Whamcloud - gitweb
Land b_clr_patches onto b1_2 (20040929_1519)
authoradilger <adilger>
Thu, 30 Sep 2004 10:37:41 +0000 (10:37 +0000)
committeradilger <adilger>
Thu, 30 Sep 2004 10:37:41 +0000 (10:37 +0000)
Merge patches from b1_4 to b1_2.  Remove old/unused kernel patches/series.
b1_2 buffalo testing has all been done with these patches.

158 files changed:
ldiskfs/kernel_patches/patches/ext3-ea-in-inode-2.6-suse.patch
ldiskfs/kernel_patches/patches/ext3-extents-2.6.5.patch [new file with mode: 0644]
ldiskfs/kernel_patches/patches/ext3-include-fixes-2.6-suse.patch
ldiskfs/kernel_patches/patches/ext3-nlinks-2.6.7.patch [new file with mode: 0644]
ldiskfs/kernel_patches/patches/iopen-2.6-suse.patch
ldiskfs/kernel_patches/series/ldiskfs-2.6-suse.series
lustre/kernel_patches/patches/add_page_private-2.4.19-pre1.patch [deleted file]
lustre/kernel_patches/patches/bproc-patch-2.4.20 [deleted file]
lustre/kernel_patches/patches/configurable-x86-stack-2.4.19-pre1.patch [deleted file]
lustre/kernel_patches/patches/configurable-x86-stack-2.4.21-chaos.patch
lustre/kernel_patches/patches/configurable-x86-stack-2.4.21-suse2.patch
lustre/kernel_patches/patches/dev_read_only.patch [deleted file]
lustre/kernel_patches/patches/dev_read_only_2.4.20.patch [deleted file]
lustre/kernel_patches/patches/dump_netdev.patch [deleted file]
lustre/kernel_patches/patches/dump_netdev_over_netpoll.patch [deleted file]
lustre/kernel_patches/patches/dynamic-locks-2.4.18-chaos.patch [deleted file]
lustre/kernel_patches/patches/export-add_to_page_cache.patch [deleted file]
lustre/kernel_patches/patches/export-netpoll.patch [deleted file]
lustre/kernel_patches/patches/exports-2.4.21-chaos.patch [moved from lustre/kernel_patches/patches/exports_2.4.19-pre1.patch with 52% similarity]
lustre/kernel_patches/patches/exports_2.4.20.patch [deleted file]
lustre/kernel_patches/patches/ext-2.4-patch-1-suse.patch [deleted file]
lustre/kernel_patches/patches/ext3-2.4.18-ino_sb_macro-2.patch [deleted file]
lustre/kernel_patches/patches/ext3-2.4.18-ino_sb_macro.patch [deleted file]
lustre/kernel_patches/patches/ext3-compat-2.4.18-chaos.patch [deleted file]
lustre/kernel_patches/patches/ext3-delete_thread-2.4.18-2.patch [deleted file]
lustre/kernel_patches/patches/ext3-delete_thread-2.4.18.patch [deleted file]
lustre/kernel_patches/patches/ext3-delete_thread-2.4.20.patch [deleted file]
lustre/kernel_patches/patches/ext3-ea-in-inode-2.4.18-chaos.patch [deleted file]
lustre/kernel_patches/patches/ext3-ea-in-inode-2.6-suse.patch
lustre/kernel_patches/patches/ext3-extents-2.4.18-chaos-pdirops.patch [deleted file]
lustre/kernel_patches/patches/ext3-extents-2.4.18-chaos.patch [deleted file]
lustre/kernel_patches/patches/ext3-extents-2.4.20-rh.patch
lustre/kernel_patches/patches/ext3-extents-2.4.21-chaos.patch [moved from lustre/kernel_patches/patches/ext3-extents-2.4.20.patch with 75% similarity]
lustre/kernel_patches/patches/ext3-extents-2.4.21-suse2.patch
lustre/kernel_patches/patches/ext3-extents-2.4.24.patch
lustre/kernel_patches/patches/ext3-extents-2.6.5.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-extents-2.6.7.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-extents-asyncdel-2.4.20-rh.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-extents-asyncdel-2.4.21-chaos.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-extents-in-ea-2.4.20.patch [deleted file]
lustre/kernel_patches/patches/ext3-extents-in-ea-ioctl-2.4.20.patch [deleted file]
lustre/kernel_patches/patches/ext3-extents-oflag-2.4.18-chaos.patch [deleted file]
lustre/kernel_patches/patches/ext3-htree-2.4.19-pre1.patch [deleted file]
lustre/kernel_patches/patches/ext3-htree-rename_fix.patch [deleted file]
lustre/kernel_patches/patches/ext3-htree.patch [deleted file]
lustre/kernel_patches/patches/ext3-ialloc-2.4.21-chaos.patch [deleted file]
lustre/kernel_patches/patches/ext3-ialloc-2.4.24.patch [deleted file]
lustre/kernel_patches/patches/ext3-include-fixes-2.6-suse.patch
lustre/kernel_patches/patches/ext3-inode-reuse-2.4.18.patch [deleted file]
lustre/kernel_patches/patches/ext3-inode-reuse-2.4.20.patch [deleted file]
lustre/kernel_patches/patches/ext3-inode-reuse-2.4.22.patch [deleted file]
lustre/kernel_patches/patches/ext3-mballoc-2.4.21-chaos.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-mballoc-2.4.21-suse2.patch
lustre/kernel_patches/patches/ext3-mballoc2-2.6.7.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-nlinks-2.4.20-hp_pnnl.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-nlinks-2.4.21-chaos.patch
lustre/kernel_patches/patches/ext3-nlinks-2.4.24.patch
lustre/kernel_patches/patches/ext3-nlinks-2.6.7.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-no-write-super.patch [deleted file]
lustre/kernel_patches/patches/ext3-o_direct-1-2.4.18-chaos.patch [deleted file]
lustre/kernel_patches/patches/ext3-o_direct-1.patch [deleted file]
lustre/kernel_patches/patches/ext3-orphan_lock-2.4.19-suse.patch
lustre/kernel_patches/patches/ext3-pdirops-2.4.18-chaos.patch [deleted file]
lustre/kernel_patches/patches/ext3-pdirops-2.4.20-chaos.patch [deleted file]
lustre/kernel_patches/patches/ext3-raw-lookup-pdirops.patch [deleted file]
lustre/kernel_patches/patches/ext3-record-extents-ea.patch [deleted file]
lustre/kernel_patches/patches/ext3-snapfs-2.4.20.patch [deleted file]
lustre/kernel_patches/patches/ext3-start_this_handle-must-return-error.patch [deleted file]
lustre/kernel_patches/patches/ext3-super-ntohl.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-trusted_ea-2.4.18.patch [deleted file]
lustre/kernel_patches/patches/ext3-unmount_sync.patch [deleted file]
lustre/kernel_patches/patches/ext3-use-after-free-2.4.19-pre1.patch [deleted file]
lustre/kernel_patches/patches/ext3-use-after-free-suse.patch
lustre/kernel_patches/patches/extN-noread.patch [deleted file]
lustre/kernel_patches/patches/gfp_memalloc-2.4.18-chaos.patch [deleted file]
lustre/kernel_patches/patches/gfp_memalloc-2.4.20-rh.patch [deleted file]
lustre/kernel_patches/patches/gfp_memalloc-2.4.21-chaos.patch [deleted file]
lustre/kernel_patches/patches/gfp_memalloc-2.4.22.patch [deleted file]
lustre/kernel_patches/patches/gfp_memalloc-2.4.24.patch [deleted file]
lustre/kernel_patches/patches/htree-ext3-2.4.18.patch [deleted file]
lustre/kernel_patches/patches/invalidate_show-2.4.19-pre1.patch [deleted file]
lustre/kernel_patches/patches/invalidate_show_2.4.20_chaos.patch [deleted file]
lustre/kernel_patches/patches/iod-rmap-exports.patch [deleted file]
lustre/kernel_patches/patches/iopen-2.4.18-2.patch [deleted file]
lustre/kernel_patches/patches/iopen-2.4.18.patch [deleted file]
lustre/kernel_patches/patches/iopen-2.4.20.patch
lustre/kernel_patches/patches/iopen-2.4.21-sles8sp3.patch
lustre/kernel_patches/patches/iopen-2.6-suse.patch
lustre/kernel_patches/patches/iopen-2.6-vanilla.patch
lustre/kernel_patches/patches/jbd-2.4.19-pre1-jcberr.patch [deleted file]
lustre/kernel_patches/patches/kdev-2.4.19-pre1.patch [deleted file]
lustre/kernel_patches/patches/kernel_text_address-2.4.19-pre1.patch [deleted file]
lustre/kernel_patches/patches/kgdb-over-netpoll.patch [deleted file]
lustre/kernel_patches/patches/kgdb_eth.patch [deleted file]
lustre/kernel_patches/patches/kmem_cache_validate.patch [deleted file]
lustre/kernel_patches/patches/kmem_cache_validate_2.4.20-rh.patch [deleted file]
lustre/kernel_patches/patches/kmem_cache_validate_2.4.20.patch [deleted file]
lustre/kernel_patches/patches/kmem_cache_validate_hp.patch [deleted file]
lustre/kernel_patches/patches/linux-2.4.18ea-0.8.26-2.patch [deleted file]
lustre/kernel_patches/patches/linux-2.4.18ea-0.8.26.patch [deleted file]
lustre/kernel_patches/patches/linux-2.4.19-pre1-xattr-0.8.54.patch [deleted file]
lustre/kernel_patches/patches/linux-2.4.20-filemap.patch [deleted file]
lustre/kernel_patches/patches/linux-2.4.20-tmpfs-iopen.patch [deleted file]
lustre/kernel_patches/patches/linux-2.4.20-tmpfs-xattr.patch [deleted file]
lustre/kernel_patches/patches/linux-2.4.20-xattr-0.8.54-chaos.patch
lustre/kernel_patches/patches/linux-2.4.20-xattr-0.8.54-hp.patch
lustre/kernel_patches/patches/linux-2.4.20-xattr-0.8.54.patch [deleted file]
lustre/kernel_patches/patches/linux-2.4.21-xattr-0.8.54-chaos.patch
lustre/kernel_patches/patches/linux-2.4.21-xattr-0.8.54-suse.patch
lustre/kernel_patches/patches/linux-2.4.22-xattr-0.8.54.patch [deleted file]
lustre/kernel_patches/patches/linux-2.4.24-xattr-0.8.54.patch
lustre/kernel_patches/patches/listman-2.4.18.patch [deleted file]
lustre/kernel_patches/patches/loop_device_get_info.patch [deleted file]
lustre/kernel_patches/patches/lustre_version.patch
lustre/kernel_patches/patches/netconsole-over-netpoll.patch [deleted file]
lustre/kernel_patches/patches/netpoll-core.patch [deleted file]
lustre/kernel_patches/patches/netpoll-pcnet32.patch [deleted file]
lustre/kernel_patches/patches/nfs_export_kernel-2.4.18.patch [deleted file]
lustre/kernel_patches/patches/nfs_export_kernel-2.4.19-pre1.patch [deleted file]
lustre/kernel_patches/patches/qlogic-suse-2.4.21-2.patch [deleted file]
lustre/kernel_patches/patches/resched-2.4.19-pre1.patch [deleted file]
lustre/kernel_patches/patches/sd_iostats-2.4.21-chaos.patch [new file with mode: 0644]
lustre/kernel_patches/patches/seq-private-2.4.19-pre1.patch [deleted file]
lustre/kernel_patches/patches/slab-use-after-free-debug-2.4.22.patch [deleted file]
lustre/kernel_patches/patches/small_scatterlist-2.4.21-chaos.patch [new file with mode: 0644]
lustre/kernel_patches/patches/snapfs_core-2.4.20.patch [deleted file]
lustre/kernel_patches/patches/tcp-zero-copy-2.4.19-pre1.patch [deleted file]
lustre/kernel_patches/patches/uml-2.4.20-fixes-1.patch [deleted file]
lustre/kernel_patches/patches/uml-2.6.7-01-bb2.patch
lustre/kernel_patches/patches/uml-patch-2.4.20-6.patch [deleted file]
lustre/kernel_patches/patches/uml_check_get_page.patch [deleted file]
lustre/kernel_patches/patches/uml_get_kmem_end_export.patch [deleted file]
lustre/kernel_patches/patches/uml_no_panic.patch [deleted file]
lustre/kernel_patches/patches/vfs-pdirops-2.4.18-chaos.patch [deleted file]
lustre/kernel_patches/patches/vfs_intent-2.4.18-18-chaos65.patch [deleted file]
lustre/kernel_patches/patches/vfs_intent-2.4.19-pre1.patch [deleted file]
lustre/kernel_patches/patches/vfs_intent-2.4.20-hp.patch
lustre/kernel_patches/patches/vfs_intent-2.4.20-rh.patch
lustre/kernel_patches/patches/vfs_intent-2.4.20-vanilla.patch
lustre/kernel_patches/patches/vfs_intent-2.6-suse.patch
lustre/kernel_patches/patches/vfs_intent-2.6-vanilla.patch
lustre/kernel_patches/patches/vfs_nointent-2.6-suse.patch
lustre/kernel_patches/patches/vfs_nointent-2.6-vanilla.patch
lustre/kernel_patches/patches/vmalloc_to_page-2.4.19-pre1.patch [deleted file]
lustre/kernel_patches/patches/xattr-0.8.54-2.4.22-rh.patch
lustre/kernel_patches/series/chaos-2.4.21
lustre/kernel_patches/series/hp-pnnl-2.4.20
lustre/kernel_patches/series/ldiskfs-2.6-suse.series
lustre/kernel_patches/series/ldiskfs-2.6-vanilla.series
lustre/kernel_patches/series/rh-2.4.20
lustre/kernel_patches/series/rh-2.4.22
lustre/kernel_patches/series/rhel-2.4.21
lustre/kernel_patches/series/suse-2.4.21
lustre/kernel_patches/series/suse-2.4.21-171
lustre/kernel_patches/series/suse-2.4.21-2
lustre/kernel_patches/series/vanilla-2.4.24
lustre/scripts/clearpatches.sh [new file with mode: 0644]
lustre/scripts/confirmpatches.sh [new file with mode: 0644]

index 39fa9ce..997cc1e 100644 (file)
@@ -113,7 +113,7 @@ Index: linux-2.6.0/fs/ext3/xattr.c
 +      if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
 +              return -ENOENT;
 +
-+      ret = ext3_get_inode_loc(inode, &iloc);
++      ret = ext3_get_inode_loc(inode, &iloc, 1);
 +      if (ret)
 +              return ret;
 +      raw_inode = ext3_raw_inode(&iloc);
@@ -215,15 +215,6 @@ Index: linux-2.6.0/fs/ext3/xattr.c
        error = 0;
        if (!EXT3_I(inode)->i_file_acl)
                goto cleanup;
-@@ -380,7 +469,7 @@
-       if (!bh)
-               goto cleanup;
-       ea_bdebug(bh, "b_count=%d, refcount=%d",
--              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+              (int) atomic_read(&(bh->b_count)), (int) le32_to_cpu(HDR(bh)->h_refcount));
-       end = bh->b_data + bh->b_size;
-       if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-           HDR(bh)->h_blocks != cpu_to_le32(1)) {
 @@ -431,11 +520,138 @@
  
  cleanup:
@@ -251,7 +242,7 @@ Index: linux-2.6.0/fs/ext3/xattr.c
 +      if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
 +              return 0;
 +
-+      ret = ext3_get_inode_loc(inode, &iloc);
++      ret = ext3_get_inode_loc(inode, &iloc, 1);
 +      if (ret)
 +              return ret;
 +      raw_inode = ext3_raw_inode(&iloc);
@@ -388,7 +379,7 @@ Index: linux-2.6.0/fs/ext3/xattr.c
 +      if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
 +              return ret;
 +
-+      err = ext3_get_inode_loc(inode, &iloc);
++      err = ext3_get_inode_loc(inode, &iloc, 1);
 +      if (err)
 +              return -EIO;
 +      raw_inode = ext3_raw_inode(&iloc);
@@ -519,7 +510,7 @@ Index: linux-2.6.0/fs/ext3/xattr.c
 +      if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
 +              return -ENOSPC;
 +
-+      err = ext3_get_inode_loc(inode, &iloc);
++      err = ext3_get_inode_loc(inode, &iloc, 1);
 +      if (err)
 +              return err;
 +      raw_inode = ext3_raw_inode(&iloc);
@@ -807,6 +798,14 @@ Index: linux-2.6.0/include/linux/ext3_fs.h
  };
  
  #define i_size_high   i_dir_acl
+@@ -721,6 +723,7 @@
+ extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
+ extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
+ extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
++int ext3_get_inode_loc(struct inode *inode, struct ext3_iloc *iloc, int in_mem);
+ extern void ext3_read_inode (struct inode *);
+ extern void ext3_write_inode (struct inode *, int);
 Index: linux-2.6.0/include/linux/ext3_fs_i.h
 ===================================================================
 --- linux-2.6.0.orig/include/linux/ext3_fs_i.h 2003-12-30 08:32:44.000000000 +0300
diff --git a/ldiskfs/kernel_patches/patches/ext3-extents-2.6.5.patch b/ldiskfs/kernel_patches/patches/ext3-extents-2.6.5.patch
new file mode 100644 (file)
index 0000000..7ebb84f
--- /dev/null
@@ -0,0 +1,2822 @@
+%patch
+Index: linux-2.6.7/fs/ext3/extents.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/extents.c 2003-01-30 13:24:37.000000000 +0300
++++ linux-2.6.7/fs/ext3/extents.c      2004-08-19 08:53:49.000000000 +0400
+@@ -0,0 +1,2306 @@
++/*
++ * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public Licens
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-
++ */
++
++/*
++ * Extents support for EXT3
++ *
++ * TODO:
++ *   - ext3_ext_walk_space() sould not use ext3_ext_find_extent()
++ *   - ext3_ext_calc_credits() could take 'mergable' into account
++ *   - ext3*_error() should be used in some situations
++ *   - find_goal() [to be tested and improved]
++ *   - smart tree reduction
++ *   - arch-independence
++ *     common on-disk format for big/little-endian arch
++ */
++
++#include <linux/module.h>
++#include <linux/fs.h>
++#include <linux/time.h>
++#include <linux/ext3_jbd.h>
++#include <linux/jbd.h>
++#include <linux/smp_lock.h>
++#include <linux/highuid.h>
++#include <linux/pagemap.h>
++#include <linux/quotaops.h>
++#include <linux/string.h>
++#include <linux/slab.h>
++#include <linux/ext3_extents.h>
++#include <asm/uaccess.h>
++
++static handle_t *ext3_ext_journal_restart(handle_t *handle, int needed)
++{
++      int err;
++
++      if (handle->h_buffer_credits > needed)
++              return handle;
++      if (!ext3_journal_extend(handle, needed))
++              return handle;
++      err = ext3_journal_restart(handle, needed);
++      
++      return handle;
++}
++
++static int inline
++ext3_ext_get_access_for_root(handle_t *h, struct ext3_extents_tree *tree)
++{
++      if (tree->ops->get_write_access)
++              return tree->ops->get_write_access(h,tree->buffer);
++      else
++              return 0;
++}
++
++static int inline
++ext3_ext_mark_root_dirty(handle_t *h, struct ext3_extents_tree *tree)
++{
++      if (tree->ops->mark_buffer_dirty)
++              return tree->ops->mark_buffer_dirty(h,tree->buffer);
++      else
++              return 0;
++}
++
++/*
++ * could return:
++ *  - EROFS
++ *  - ENOMEM
++ */
++static int ext3_ext_get_access(handle_t *handle,
++                              struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++      int err;
++
++      if (path->p_bh) {
++              /* path points to block */
++              err = ext3_journal_get_write_access(handle, path->p_bh);
++      } else {
++              /* path points to leaf/index in inode body */
++              err = ext3_ext_get_access_for_root(handle, tree);
++      }
++      return err;
++}
++
++/*
++ * could return:
++ *  - EROFS
++ *  - ENOMEM
++ *  - EIO
++ */
++static int ext3_ext_dirty(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++      int err;
++      if (path->p_bh) {
++              /* path points to block */
++              err =ext3_journal_dirty_metadata(handle, path->p_bh);
++      } else {
++              /* path points to leaf/index in inode body */
++              err = ext3_ext_mark_root_dirty(handle, tree);
++      }
++      return err;
++}
++
++static int inline
++ext3_ext_new_block(handle_t *handle, struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, struct ext3_extent *ex,
++                      int *err)
++{
++      int goal, depth, newblock;
++      struct inode *inode;
++
++      EXT_ASSERT(tree);
++      if (tree->ops->new_block)
++              return tree->ops->new_block(handle, tree, path, ex, err);
++
++      inode = tree->inode;
++      depth = EXT_DEPTH(tree);
++      if (path && depth > 0) {
++              goal = path[depth-1].p_block;
++      } else {
++              struct ext3_inode_info *ei = EXT3_I(inode);
++              unsigned long bg_start;
++              unsigned long colour;
++
++              bg_start = (ei->i_block_group *
++                              EXT3_BLOCKS_PER_GROUP(inode->i_sb)) +
++                      le32_to_cpu(EXT3_SB(inode->i_sb)->s_es->s_first_data_block);
++              colour = (current->pid % 16) *
++                      (EXT3_BLOCKS_PER_GROUP(inode->i_sb) / 16);
++              goal = bg_start + colour;
++      }
++
++      newblock = ext3_new_block(handle, inode, goal, 0, 0, err);
++      return newblock;
++}
++
++static inline void ext3_ext_tree_changed(struct ext3_extents_tree *tree)
++{
++      struct ext3_extent_header *neh;
++      neh = EXT_ROOT_HDR(tree);
++      neh->eh_generation++;
++}
++
++static inline int ext3_ext_space_block(struct ext3_extents_tree *tree)
++{
++      int size;
++
++      size = (tree->inode->i_sb->s_blocksize -
++                      sizeof(struct ext3_extent_header))
++                              / sizeof(struct ext3_extent);
++#ifdef AGRESSIVE_TEST
++      size = 6;
++#endif
++      return size;
++}
++
++static inline int ext3_ext_space_block_idx(struct ext3_extents_tree *tree)
++{
++      int size;
++
++      size = (tree->inode->i_sb->s_blocksize -
++                      sizeof(struct ext3_extent_header))
++                              / sizeof(struct ext3_extent_idx);
++#ifdef AGRESSIVE_TEST
++      size = 5;
++#endif
++      return size;
++}
++
++static inline int ext3_ext_space_root(struct ext3_extents_tree *tree)
++{
++      int size;
++
++      size = (tree->buffer_len - sizeof(struct ext3_extent_header))
++                      / sizeof(struct ext3_extent);
++#ifdef AGRESSIVE_TEST
++      size = 3;
++#endif
++      return size;
++}
++
++static inline int ext3_ext_space_root_idx(struct ext3_extents_tree *tree)
++{
++      int size;
++
++      size = (tree->buffer_len -
++                      sizeof(struct ext3_extent_header))
++                      / sizeof(struct ext3_extent_idx);
++#ifdef AGRESSIVE_TEST
++      size = 4;
++#endif
++      return size;
++}
++
++static void ext3_ext_show_path(struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++#ifdef EXT_DEBUG
++      int k, l = path->p_depth;
++
++      ext_debug(tree, "path:");
++      for (k = 0; k <= l; k++, path++) {
++              if (path->p_idx) {
++                      ext_debug(tree, "  %d->%d", path->p_idx->ei_block,
++                                      path->p_idx->ei_leaf);
++              } else if (path->p_ext) {
++                      ext_debug(tree, "  %d:%d:%d",
++                                      path->p_ext->ee_block,
++                                      path->p_ext->ee_len,
++                                      path->p_ext->ee_start);
++              } else
++                      ext_debug(tree, "  []");
++      }
++      ext_debug(tree, "\n");
++#endif
++}
++
++static void ext3_ext_show_leaf(struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++#ifdef EXT_DEBUG
++      int depth = EXT_DEPTH(tree);
++      struct ext3_extent_header *eh;
++      struct ext3_extent *ex;
++      int i;
++
++      if (!path)
++              return;
++
++      eh = path[depth].p_hdr;
++      ex = EXT_FIRST_EXTENT(eh);
++
++      for (i = 0; i < eh->eh_entries; i++, ex++) {
++              ext_debug(tree, "%d:%d:%d ",
++                              ex->ee_block, ex->ee_len, ex->ee_start);
++      }
++      ext_debug(tree, "\n");
++#endif
++}
++
++static void ext3_ext_drop_refs(struct ext3_ext_path *path)
++{
++      int depth = path->p_depth;
++      int i;
++
++      for (i = 0; i <= depth; i++, path++)
++              if (path->p_bh) {
++                      brelse(path->p_bh);
++                      path->p_bh = NULL;
++              }
++}
++
++/*
++ * binary search for closest index by given block
++ */
++static inline void
++ext3_ext_binsearch_idx(struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, int block)
++{
++      struct ext3_extent_header *eh = path->p_hdr;
++      struct ext3_extent_idx *ix;
++      int l = 0, k, r;
++
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++      EXT_ASSERT(eh->eh_entries > 0);
++
++      ext_debug(tree, "binsearch for %d(idx):  ", block);
++
++      path->p_idx = ix = EXT_FIRST_INDEX(eh);
++
++      r = k = eh->eh_entries;
++      while (k > 1) {
++              k = (r - l) / 2;
++              if (block < ix[l + k].ei_block)
++                      r -= k;
++              else
++                      l += k;
++              ext_debug(tree, "%d:%d:%d ", k, l, r);
++      }
++
++      ix += l;
++      path->p_idx = ix;
++      ext_debug(tree, "  -> %d->%d ", path->p_idx->ei_block, path->p_idx->ei_leaf);
++
++      while (l++ < r) {
++              if (block < ix->ei_block) 
++                      break;
++              path->p_idx = ix++;
++      }
++      ext_debug(tree, "  -> %d->%d\n", path->p_idx->ei_block,
++                      path->p_idx->ei_leaf);
++
++#ifdef CHECK_BINSEARCH 
++      {
++              struct ext3_extent_idx *chix;
++
++              chix = ix = EXT_FIRST_INDEX(eh);
++              for (k = 0; k < eh->eh_entries; k++, ix++) {
++                      if (k != 0 && ix->ei_block <= ix[-1].ei_block) {
++                              printk("k=%d, ix=0x%p, first=0x%p\n", k,
++                                      ix, EXT_FIRST_INDEX(eh));
++                              printk("%u <= %u\n",
++                                      ix->ei_block,ix[-1].ei_block);
++                      }
++                      EXT_ASSERT(k == 0 || ix->ei_block > ix[-1].ei_block);
++                      if (block < ix->ei_block) 
++                              break;
++                      chix = ix;
++              }
++              EXT_ASSERT(chix == path->p_idx);
++      }
++#endif
++
++}
++
++/*
++ * binary search for closest extent by given block
++ */
++static inline void
++ext3_ext_binsearch(struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, int block)
++{
++      struct ext3_extent_header *eh = path->p_hdr;
++      struct ext3_extent *ex;
++      int l = 0, k, r;
++
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++
++      if (eh->eh_entries == 0) {
++              /*
++               * this leaf is empty yet:
++               *  we get such a leaf in split/add case
++               */
++              return;
++      }
++      
++      ext_debug(tree, "binsearch for %d:  ", block);
++
++      path->p_ext = ex = EXT_FIRST_EXTENT(eh);
++
++      r = k = eh->eh_entries;
++      while (k > 1) {
++              k = (r - l) / 2;
++              if (block < ex[l + k].ee_block)
++                      r -= k;
++              else
++                      l += k;
++              ext_debug(tree, "%d:%d:%d ", k, l, r);
++      }
++
++      ex += l;
++      path->p_ext = ex;
++      ext_debug(tree, "  -> %d:%d:%d ", path->p_ext->ee_block,
++                      path->p_ext->ee_start, path->p_ext->ee_len);
++
++      while (l++ < r) {
++              if (block < ex->ee_block) 
++                      break;
++              path->p_ext = ex++;
++      }
++      ext_debug(tree, "  -> %d:%d:%d\n", path->p_ext->ee_block,
++                      path->p_ext->ee_start, path->p_ext->ee_len);
++
++#ifdef CHECK_BINSEARCH 
++      {
++              struct ext3_extent *chex;
++
++              chex = ex = EXT_FIRST_EXTENT(eh);
++              for (k = 0; k < eh->eh_entries; k++, ex++) {
++                      EXT_ASSERT(k == 0 || ex->ee_block > ex[-1].ee_block);
++                      if (block < ex->ee_block) 
++                              break;
++                      chex = ex;
++              }
++              EXT_ASSERT(chex == path->p_ext);
++      }
++#endif
++
++}
++
++int ext3_extent_tree_init(handle_t *handle, struct ext3_extents_tree *tree)
++{
++      struct ext3_extent_header *eh;
++
++      BUG_ON(tree->buffer_len == 0);
++      ext3_ext_get_access_for_root(handle, tree);
++      eh = EXT_ROOT_HDR(tree);
++      eh->eh_depth = 0;
++      eh->eh_entries = 0;
++      eh->eh_magic = EXT3_EXT_MAGIC;
++      eh->eh_max = ext3_ext_space_root(tree);
++      ext3_ext_mark_root_dirty(handle, tree);
++      ext3_ext_invalidate_cache(tree);
++      return 0;
++}
++
++struct ext3_ext_path *
++ext3_ext_find_extent(struct ext3_extents_tree *tree, int block,
++                      struct ext3_ext_path *path)
++{
++      struct ext3_extent_header *eh;
++      struct buffer_head *bh;
++      int depth, i, ppos = 0;
++
++      EXT_ASSERT(tree);
++      EXT_ASSERT(tree->inode);
++      EXT_ASSERT(tree->root);
++
++      eh = EXT_ROOT_HDR(tree);
++      EXT_ASSERT(eh);
++      i = depth = EXT_DEPTH(tree);
++      EXT_ASSERT(eh->eh_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(i == 0 || eh->eh_entries > 0);
++      
++      /* account possible depth increase */
++      if (!path) {
++              path = kmalloc(sizeof(struct ext3_ext_path) * (depth + 2),
++                              GFP_NOFS);
++              if (!path)
++                      return ERR_PTR(-ENOMEM);
++      }
++      memset(path, 0, sizeof(struct ext3_ext_path) * (depth + 1));
++      path[0].p_hdr = eh;
++
++      /* walk through the tree */
++      while (i) {
++              ext_debug(tree, "depth %d: num %d, max %d\n",
++                              ppos, eh->eh_entries, eh->eh_max);
++              ext3_ext_binsearch_idx(tree, path + ppos, block);
++              path[ppos].p_block = path[ppos].p_idx->ei_leaf;
++              path[ppos].p_depth = i;
++              path[ppos].p_ext = NULL;
++
++              bh = sb_bread(tree->inode->i_sb, path[ppos].p_block);
++              if (!bh) {
++                      ext3_ext_drop_refs(path);
++                      kfree(path);
++                      return ERR_PTR(-EIO);
++              }
++              eh = EXT_BLOCK_HDR(bh);
++              ppos++;
++              EXT_ASSERT(ppos <= depth);
++              path[ppos].p_bh = bh;
++              path[ppos].p_hdr = eh;
++              i--;
++      }
++
++      path[ppos].p_depth = i;
++      path[ppos].p_hdr = eh;
++      path[ppos].p_ext = NULL;
++
++      /* find extent */
++      ext3_ext_binsearch(tree, path + ppos, block);
++
++      ext3_ext_show_path(tree, path);
++
++      return path;
++}
++
++/*
++ * insert new index [logical;ptr] into the block at cupr
++ * it check where to insert: before curp or after curp
++ */
++static int ext3_ext_insert_index(handle_t *handle,
++                              struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *curp,
++                              int logical, int ptr)
++{
++      struct ext3_extent_idx *ix;
++      int len, err;
++
++      if ((err = ext3_ext_get_access(handle, tree, curp)))
++              return err;
++
++      EXT_ASSERT(logical != curp->p_idx->ei_block);
++      len = EXT_MAX_INDEX(curp->p_hdr) - curp->p_idx;
++      if (logical > curp->p_idx->ei_block) {
++              /* insert after */
++              if (curp->p_idx != EXT_LAST_INDEX(curp->p_hdr)) {
++                      len = (len - 1) * sizeof(struct ext3_extent_idx);
++                      len = len < 0 ? 0 : len;
++                      ext_debug(tree, "insert new index %d after: %d. "
++                                      "move %d from 0x%p to 0x%p\n",
++                                      logical, ptr, len,
++                                      (curp->p_idx + 1), (curp->p_idx + 2));
++                      memmove(curp->p_idx + 2, curp->p_idx + 1, len);
++              }
++              ix = curp->p_idx + 1;
++      } else {
++              /* insert before */
++              len = len * sizeof(struct ext3_extent_idx);
++              len = len < 0 ? 0 : len;
++              ext_debug(tree, "insert new index %d before: %d. "
++                              "move %d from 0x%p to 0x%p\n",
++                              logical, ptr, len,
++                              curp->p_idx, (curp->p_idx + 1));
++              memmove(curp->p_idx + 1, curp->p_idx, len);
++              ix = curp->p_idx;
++      }
++
++      ix->ei_block = logical;
++      ix->ei_leaf = ptr;
++      curp->p_hdr->eh_entries++;
++
++      EXT_ASSERT(curp->p_hdr->eh_entries <= curp->p_hdr->eh_max);
++      EXT_ASSERT(ix <= EXT_LAST_INDEX(curp->p_hdr));
++
++      err = ext3_ext_dirty(handle, tree, curp);
++      ext3_std_error(tree->inode->i_sb, err);
++
++      return err;
++}
++
++/*
++ * routine inserts new subtree into the path, using free index entry
++ * at depth 'at:
++ *  - allocates all needed blocks (new leaf and all intermediate index blocks)
++ *  - makes decision where to split
++ *  - moves remaining extens and index entries (right to the split point)
++ *    into the newly allocated blocks
++ *  - initialize subtree
++ */
++static int ext3_ext_split(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path,
++                              struct ext3_extent *newext, int at)
++{
++      struct buffer_head *bh = NULL;
++      int depth = EXT_DEPTH(tree);
++      struct ext3_extent_header *neh;
++      struct ext3_extent_idx *fidx;
++      struct ext3_extent *ex;
++      int i = at, k, m, a;
++      unsigned long newblock, oldblock, border;
++      int *ablocks = NULL; /* array of allocated blocks */
++      int err = 0;
++
++      /* make decision: where to split? */
++      /* FIXME: now desicion is simplest: at current extent */
++
++      /* if current leaf will be splitted, then we should use 
++       * border from split point */
++      EXT_ASSERT(path[depth].p_ext <= EXT_MAX_EXTENT(path[depth].p_hdr));
++      if (path[depth].p_ext != EXT_MAX_EXTENT(path[depth].p_hdr)) {
++              border = path[depth].p_ext[1].ee_block;
++              ext_debug(tree, "leaf will be splitted."
++                              " next leaf starts at %d\n",
++                              (int)border);
++      } else {
++              border = newext->ee_block;
++              ext_debug(tree, "leaf will be added."
++                              " next leaf starts at %d\n",
++                              (int)border);
++      }
++
++      /* 
++       * if error occurs, then we break processing
++       * and turn filesystem read-only. so, index won't
++       * be inserted and tree will be in consistent
++       * state. next mount will repair buffers too
++       */
++
++      /*
++       * get array to track all allocated blocks
++       * we need this to handle errors and free blocks
++       * upon them
++       */
++      ablocks = kmalloc(sizeof(unsigned long) * depth, GFP_NOFS);
++      if (!ablocks)
++              return -ENOMEM;
++      memset(ablocks, 0, sizeof(unsigned long) * depth);
++
++      /* allocate all needed blocks */
++      ext_debug(tree, "allocate %d blocks for indexes/leaf\n", depth - at);
++      for (a = 0; a < depth - at; a++) {
++              newblock = ext3_ext_new_block(handle, tree, path, newext, &err);
++              if (newblock == 0)
++                      goto cleanup;
++              ablocks[a] = newblock;
++      }
++
++      /* initialize new leaf */
++      newblock = ablocks[--a];
++      EXT_ASSERT(newblock);
++      bh = sb_getblk(tree->inode->i_sb, newblock);
++      if (!bh) {
++              err = -EIO;
++              goto cleanup;
++      }
++      lock_buffer(bh);
++
++      if ((err = ext3_journal_get_create_access(handle, bh)))
++              goto cleanup;
++
++      neh = EXT_BLOCK_HDR(bh);
++      neh->eh_entries = 0;
++      neh->eh_max = ext3_ext_space_block(tree);
++      neh->eh_magic = EXT3_EXT_MAGIC;
++      neh->eh_depth = 0;
++      ex = EXT_FIRST_EXTENT(neh);
++
++      /* move remain of path[depth] to the new leaf */
++      EXT_ASSERT(path[depth].p_hdr->eh_entries == path[depth].p_hdr->eh_max);
++      /* start copy from next extent */
++      /* TODO: we could do it by single memmove */
++      m = 0;
++      path[depth].p_ext++;
++      while (path[depth].p_ext <=
++                      EXT_MAX_EXTENT(path[depth].p_hdr)) {
++              ext_debug(tree, "move %d:%d:%d in new leaf %lu\n",
++                              path[depth].p_ext->ee_block,
++                              path[depth].p_ext->ee_start,
++                              path[depth].p_ext->ee_len,
++                              newblock);
++              memmove(ex++, path[depth].p_ext++,
++                              sizeof(struct ext3_extent));
++              neh->eh_entries++;
++              m++;
++      }
++      set_buffer_uptodate(bh);
++      unlock_buffer(bh);
++
++      if ((err = ext3_journal_dirty_metadata(handle, bh)))
++              goto cleanup;   
++      brelse(bh);
++      bh = NULL;
++
++      /* correct old leaf */
++      if (m) {
++              if ((err = ext3_ext_get_access(handle, tree, path + depth)))
++                      goto cleanup;
++              path[depth].p_hdr->eh_entries -= m;
++              if ((err = ext3_ext_dirty(handle, tree, path + depth)))
++                      goto cleanup;
++              
++      }
++
++      /* create intermediate indexes */
++      k = depth - at - 1;
++      EXT_ASSERT(k >= 0);
++      if (k)
++              ext_debug(tree, "create %d intermediate indices\n", k);
++      /* insert new index into current index block */
++      /* current depth stored in i var */
++      i = depth - 1;
++      while (k--) {
++              oldblock = newblock;
++              newblock = ablocks[--a];
++              bh = sb_getblk(tree->inode->i_sb, newblock);
++              if (!bh) {
++                      err = -EIO;
++                      goto cleanup;
++              }
++              lock_buffer(bh);
++
++              if ((err = ext3_journal_get_create_access(handle, bh)))
++                      goto cleanup;
++
++              neh = EXT_BLOCK_HDR(bh);
++              neh->eh_entries = 1;
++              neh->eh_magic = EXT3_EXT_MAGIC;
++              neh->eh_max = ext3_ext_space_block_idx(tree);
++              neh->eh_depth = depth - i; 
++              fidx = EXT_FIRST_INDEX(neh);
++              fidx->ei_block = border;
++              fidx->ei_leaf = oldblock;
++
++              ext_debug(tree, "int.index at %d (block %lu): %lu -> %lu\n",
++                              i, newblock, border, oldblock);
++              /* copy indexes */
++              m = 0;
++              path[i].p_idx++;
++
++              ext_debug(tree, "cur 0x%p, last 0x%p\n", path[i].p_idx,
++                              EXT_MAX_INDEX(path[i].p_hdr));
++              EXT_ASSERT(EXT_MAX_INDEX(path[i].p_hdr) ==
++                              EXT_LAST_INDEX(path[i].p_hdr));
++              while (path[i].p_idx <= EXT_MAX_INDEX(path[i].p_hdr)) {
++                      ext_debug(tree, "%d: move %d:%d in new index %lu\n",
++                                      i, path[i].p_idx->ei_block,
++                                      path[i].p_idx->ei_leaf, newblock);
++                      memmove(++fidx, path[i].p_idx++,
++                                      sizeof(struct ext3_extent_idx));
++                      neh->eh_entries++;
++                      EXT_ASSERT(neh->eh_entries <= neh->eh_max);
++                      m++;
++              }
++              set_buffer_uptodate(bh);
++              unlock_buffer(bh);
++
++              if ((err = ext3_journal_dirty_metadata(handle, bh)))
++                      goto cleanup;
++              brelse(bh);
++              bh = NULL;
++
++              /* correct old index */
++              if (m) {
++                      err = ext3_ext_get_access(handle, tree, path + i);
++                      if (err)
++                              goto cleanup;
++                      path[i].p_hdr->eh_entries -= m;
++                      err = ext3_ext_dirty(handle, tree, path + i);
++                      if (err)
++                              goto cleanup;
++              }
++
++              i--;
++      }
++
++      /* insert new index */
++      if (!err)
++              err = ext3_ext_insert_index(handle, tree, path + at,
++                                              border, newblock);
++
++cleanup:
++      if (bh) {
++              if (buffer_locked(bh))
++                      unlock_buffer(bh);
++              brelse(bh);
++      }
++
++      if (err) {
++              /* free all allocated blocks in error case */
++              for (i = 0; i < depth; i++) {
++                      if (!ablocks[i])
++                              continue;
++                      ext3_free_blocks(handle, tree->inode, ablocks[i], 1);
++              }
++      }
++      kfree(ablocks);
++
++      return err;
++}
++
++/*
++ * routine implements tree growing procedure:
++ *  - allocates new block
++ *  - moves top-level data (index block or leaf) into the new block
++ *  - initialize new top-level, creating index that points to the
++ *    just created block
++ */
++static int ext3_ext_grow_indepth(handle_t *handle,
++                                      struct ext3_extents_tree *tree,
++                                      struct ext3_ext_path *path,
++                                      struct ext3_extent *newext)
++{
++      struct ext3_ext_path *curp = path;
++      struct ext3_extent_header *neh;
++      struct ext3_extent_idx *fidx;
++      struct buffer_head *bh;
++      unsigned long newblock;
++      int err = 0;
++
++      newblock = ext3_ext_new_block(handle, tree, path, newext, &err);
++      if (newblock == 0)
++              return err;
++
++      bh = sb_getblk(tree->inode->i_sb, newblock);
++      if (!bh) {
++              err = -EIO;
++              ext3_std_error(tree->inode->i_sb, err);
++              return err;
++      }
++      lock_buffer(bh);
++
++      if ((err = ext3_journal_get_create_access(handle, bh))) {
++              unlock_buffer(bh);
++              goto out;       
++      }
++
++      /* move top-level index/leaf into new block */
++      memmove(bh->b_data, curp->p_hdr, tree->buffer_len);
++
++      /* set size of new block */
++      neh = EXT_BLOCK_HDR(bh);
++      /* old root could have indexes or leaves
++       * so calculate e_max right way */
++      if (EXT_DEPTH(tree))
++              neh->eh_max = ext3_ext_space_block_idx(tree);
++      else
++              neh->eh_max = ext3_ext_space_block(tree);
++      neh->eh_magic = EXT3_EXT_MAGIC;
++      set_buffer_uptodate(bh);
++      unlock_buffer(bh);
++
++      if ((err = ext3_journal_dirty_metadata(handle, bh)))
++              goto out;
++
++      /* create index in new top-level index: num,max,pointer */
++      if ((err = ext3_ext_get_access(handle, tree, curp)))
++              goto out;
++
++      curp->p_hdr->eh_magic = EXT3_EXT_MAGIC;
++      curp->p_hdr->eh_max = ext3_ext_space_root_idx(tree);
++      curp->p_hdr->eh_entries = 1;
++      curp->p_idx = EXT_FIRST_INDEX(curp->p_hdr);
++      /* FIXME: it works, but actually path[0] can be index */
++      curp->p_idx->ei_block = EXT_FIRST_EXTENT(path[0].p_hdr)->ee_block;
++      curp->p_idx->ei_leaf = newblock;
++
++      neh = EXT_ROOT_HDR(tree);
++      fidx = EXT_FIRST_INDEX(neh);
++      ext_debug(tree, "new root: num %d(%d), lblock %d, ptr %d\n",
++                      neh->eh_entries, neh->eh_max, fidx->ei_block, fidx->ei_leaf); 
++
++      neh->eh_depth = path->p_depth + 1;
++      err = ext3_ext_dirty(handle, tree, curp);
++out:
++      brelse(bh);
++
++      return err;
++}
++
++/*
++ * routine finds empty index and adds new leaf. if no free index found
++ * then it requests in-depth growing
++ */
++static int ext3_ext_create_new_leaf(handle_t *handle,
++                                      struct ext3_extents_tree *tree,
++                                      struct ext3_ext_path *path,
++                                      struct ext3_extent *newext)
++{
++      struct ext3_ext_path *curp;
++      int depth, i, err = 0;
++
++repeat:
++      i = depth = EXT_DEPTH(tree);
++      
++      /* walk up to the tree and look for free index entry */
++      curp = path + depth;
++      while (i > 0 && !EXT_HAS_FREE_INDEX(curp)) {
++              i--;
++              curp--;
++      }
++
++      /* we use already allocated block for index block
++       * so, subsequent data blocks should be contigoues */
++      if (EXT_HAS_FREE_INDEX(curp)) {
++              /* if we found index with free entry, then use that
++               * entry: create all needed subtree and add new leaf */
++              err = ext3_ext_split(handle, tree, path, newext, i);
++
++              /* refill path */
++              ext3_ext_drop_refs(path);
++              path = ext3_ext_find_extent(tree, newext->ee_block, path);
++              if (IS_ERR(path))
++                      err = PTR_ERR(path);
++      } else {
++              /* tree is full, time to grow in depth */
++              err = ext3_ext_grow_indepth(handle, tree, path, newext);
++
++              /* refill path */
++              ext3_ext_drop_refs(path);
++              path = ext3_ext_find_extent(tree, newext->ee_block, path);
++              if (IS_ERR(path))
++                      err = PTR_ERR(path);
++
++              /*
++               * only first (depth 0 -> 1) produces free space
++               * in all other cases we have to split growed tree
++               */
++              depth = EXT_DEPTH(tree);
++              if (path[depth].p_hdr->eh_entries == path[depth].p_hdr->eh_max) {
++                      /* now we need split */
++                      goto repeat;
++              }
++      }
++
++      if (err)
++              return err;
++
++      return 0;
++}
++
++/*
++ * returns allocated block in subsequent extent or EXT_MAX_BLOCK
++ * NOTE: it consider block number from index entry as
++ * allocated block. thus, index entries have to be consistent
++ * with leafs
++ */
++static unsigned long
++ext3_ext_next_allocated_block(struct ext3_ext_path *path)
++{
++      int depth;
++
++      EXT_ASSERT(path != NULL);
++      depth = path->p_depth;
++
++      if (depth == 0 && path->p_ext == NULL)
++              return EXT_MAX_BLOCK;
++
++      /* FIXME: what if index isn't full ?! */
++      while (depth >= 0) {
++              if (depth == path->p_depth) {
++                      /* leaf */
++                      if (path[depth].p_ext !=
++                                      EXT_LAST_EXTENT(path[depth].p_hdr))
++                              return path[depth].p_ext[1].ee_block;
++              } else {
++                      /* index */
++                      if (path[depth].p_idx !=
++                                      EXT_LAST_INDEX(path[depth].p_hdr))
++                              return path[depth].p_idx[1].ei_block;
++              }
++              depth--;        
++      }
++
++      return EXT_MAX_BLOCK;
++}
++
++/*
++ * returns first allocated block from next leaf or EXT_MAX_BLOCK
++ */
++static unsigned ext3_ext_next_leaf_block(struct ext3_extents_tree *tree,
++                                               struct ext3_ext_path *path)
++{
++      int depth;
++
++      EXT_ASSERT(path != NULL);
++      depth = path->p_depth;
++
++      /* zero-tree has no leaf blocks at all */
++      if (depth == 0)
++              return EXT_MAX_BLOCK;
++
++      /* go to index block */
++      depth--;
++      
++      while (depth >= 0) {
++              if (path[depth].p_idx !=
++                              EXT_LAST_INDEX(path[depth].p_hdr))
++                      return path[depth].p_idx[1].ei_block;
++              depth--;        
++      }
++
++      return EXT_MAX_BLOCK;
++}
++
++/*
++ * if leaf gets modified and modified extent is first in the leaf
++ * then we have to correct all indexes above
++ * TODO: do we need to correct tree in all cases?
++ */
++int ext3_ext_correct_indexes(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++      struct ext3_extent_header *eh;
++      int depth = EXT_DEPTH(tree);    
++      struct ext3_extent *ex;
++      unsigned long border;
++      int k, err = 0;
++      
++      eh = path[depth].p_hdr;
++      ex = path[depth].p_ext;
++      EXT_ASSERT(ex);
++      EXT_ASSERT(eh);
++      
++      if (depth == 0) {
++              /* there is no tree at all */
++              return 0;
++      }
++      
++      if (ex != EXT_FIRST_EXTENT(eh)) {
++              /* we correct tree if first leaf got modified only */
++              return 0;
++      }
++      
++      /*
++       * TODO: we need correction if border is smaller then current one
++       */
++      k = depth - 1;
++      border = path[depth].p_ext->ee_block;
++      if ((err = ext3_ext_get_access(handle, tree, path + k)))
++              return err;
++      path[k].p_idx->ei_block = border;
++      if ((err = ext3_ext_dirty(handle, tree, path + k)))
++              return err;
++
++      while (k--) {
++              /* change all left-side indexes */
++              if (path[k+1].p_idx != EXT_FIRST_INDEX(path[k+1].p_hdr))
++                      break;
++              if ((err = ext3_ext_get_access(handle, tree, path + k)))
++                      break;
++              path[k].p_idx->ei_block = border;
++              if ((err = ext3_ext_dirty(handle, tree, path + k)))
++                      break;
++      }
++
++      return err;
++}
++
++static int inline
++ext3_can_extents_be_merged(struct ext3_extents_tree *tree,
++                              struct ext3_extent *ex1,
++                              struct ext3_extent *ex2)
++{
++      if (ex1->ee_block + ex1->ee_len != ex2->ee_block)
++              return 0;
++
++#ifdef AGRESSIVE_TEST
++      if (ex1->ee_len >= 4)
++              return 0;
++#endif
++
++      if (!tree->ops->mergable)
++              return 1;
++
++      return tree->ops->mergable(ex1, ex2);
++}
++
++/*
++ * this routine tries to merge requsted extent into the existing
++ * extent or inserts requested extent as new one into the tree,
++ * creating new leaf in no-space case
++ */
++int ext3_ext_insert_extent(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path,
++                              struct ext3_extent *newext)
++{
++      struct ext3_extent_header * eh;
++      struct ext3_extent *ex, *fex;
++      struct ext3_extent *nearex; /* nearest extent */
++      struct ext3_ext_path *npath = NULL;
++      int depth, len, err, next;
++
++      EXT_ASSERT(newext->ee_len > 0);
++      EXT_ASSERT(newext->ee_len < EXT_CACHE_MARK);
++      depth = EXT_DEPTH(tree);
++      ex = path[depth].p_ext;
++      EXT_ASSERT(path[depth].p_hdr);
++
++      /* try to insert block into found extent and return */
++      if (ex && ext3_can_extents_be_merged(tree, ex, newext)) {
++              ext_debug(tree, "append %d block to %d:%d (from %d)\n",
++                              newext->ee_len, ex->ee_block, ex->ee_len,
++                              ex->ee_start);
++              if ((err = ext3_ext_get_access(handle, tree, path + depth)))
++                      return err;
++              ex->ee_len += newext->ee_len;
++              eh = path[depth].p_hdr;
++              nearex = ex;
++              goto merge;
++      }
++
++repeat:
++      depth = EXT_DEPTH(tree);
++      eh = path[depth].p_hdr;
++      if (eh->eh_entries < eh->eh_max)
++              goto has_space;
++
++      /* probably next leaf has space for us? */
++      fex = EXT_LAST_EXTENT(eh);
++      next = ext3_ext_next_leaf_block(tree, path);
++      if (newext->ee_block > fex->ee_block && next != EXT_MAX_BLOCK) {
++              ext_debug(tree, "next leaf block - %d\n", next);
++              EXT_ASSERT(!npath);
++              npath = ext3_ext_find_extent(tree, next, NULL);
++              if (IS_ERR(npath))
++                      return PTR_ERR(npath);
++              EXT_ASSERT(npath->p_depth == path->p_depth);
++              eh = npath[depth].p_hdr;
++              if (eh->eh_entries < eh->eh_max) {
++                      ext_debug(tree, "next leaf isnt full(%d)\n",
++                                      eh->eh_entries);
++                      path = npath;
++                      goto repeat;
++              }
++              ext_debug(tree, "next leaf hasno free space(%d,%d)\n",
++                              eh->eh_entries, eh->eh_max);
++      }
++
++      /*
++       * there is no free space in found leaf
++       * we're gonna add new leaf in the tree
++       */
++      err = ext3_ext_create_new_leaf(handle, tree, path, newext);
++      if (err)
++              goto cleanup;
++      depth = EXT_DEPTH(tree);
++      eh = path[depth].p_hdr;
++
++has_space:
++      nearex = path[depth].p_ext;
++
++      if ((err = ext3_ext_get_access(handle, tree, path + depth)))
++              goto cleanup;
++
++      if (!nearex) {
++              /* there is no extent in this leaf, create first one */
++              ext_debug(tree, "first extent in the leaf: %d:%d:%d\n",
++                              newext->ee_block, newext->ee_start,
++                              newext->ee_len);
++              path[depth].p_ext = EXT_FIRST_EXTENT(eh);
++      } else if (newext->ee_block > nearex->ee_block) {
++              EXT_ASSERT(newext->ee_block != nearex->ee_block);
++              if (nearex != EXT_LAST_EXTENT(eh)) {
++                      len = EXT_MAX_EXTENT(eh) - nearex;
++                      len = (len - 1) * sizeof(struct ext3_extent);
++                      len = len < 0 ? 0 : len;
++                      ext_debug(tree, "insert %d:%d:%d after: nearest 0x%p, "
++                                      "move %d from 0x%p to 0x%p\n",
++                                      newext->ee_block, newext->ee_start,
++                                      newext->ee_len,
++                                      nearex, len, nearex + 1, nearex + 2);
++                      memmove(nearex + 2, nearex + 1, len);
++              }
++              path[depth].p_ext = nearex + 1;
++      } else {
++              EXT_ASSERT(newext->ee_block != nearex->ee_block);
++              len = (EXT_MAX_EXTENT(eh) - nearex) * sizeof(struct ext3_extent);
++              len = len < 0 ? 0 : len;
++              ext_debug(tree, "insert %d:%d:%d before: nearest 0x%p, "
++                              "move %d from 0x%p to 0x%p\n",
++                              newext->ee_block, newext->ee_start, newext->ee_len,
++                              nearex, len, nearex + 1, nearex + 2);
++              memmove(nearex + 1, nearex, len);
++              path[depth].p_ext = nearex;
++      }
++
++      eh->eh_entries++;
++      nearex = path[depth].p_ext;
++      nearex->ee_block = newext->ee_block;
++      nearex->ee_start = newext->ee_start;
++      nearex->ee_len = newext->ee_len;
++      /* FIXME: support for large fs */
++      nearex->ee_start_hi = 0;
++
++merge:
++      /* try to merge extents to the right */
++      while (nearex < EXT_LAST_EXTENT(eh)) {
++              if (!ext3_can_extents_be_merged(tree, nearex, nearex + 1))
++                      break;
++              /* merge with next extent! */
++              nearex->ee_len += nearex[1].ee_len;
++              if (nearex + 1 < EXT_LAST_EXTENT(eh)) {
++                      len = (EXT_LAST_EXTENT(eh) - nearex - 1)
++                                      * sizeof(struct ext3_extent);
++                      memmove(nearex + 1, nearex + 2, len);
++              }
++              eh->eh_entries--;
++              EXT_ASSERT(eh->eh_entries > 0);
++      }
++
++      /* try to merge extents to the left */
++
++      /* time to correct all indexes above */
++      err = ext3_ext_correct_indexes(handle, tree, path);
++      if (err)
++              goto cleanup;
++
++      err = ext3_ext_dirty(handle, tree, path + depth);
++
++cleanup:
++      if (npath) {
++              ext3_ext_drop_refs(npath);
++              kfree(npath);
++      }
++      ext3_ext_tree_changed(tree);
++      ext3_ext_invalidate_cache(tree);
++      return err;
++}
++
++int ext3_ext_walk_space(struct ext3_extents_tree *tree, unsigned long block,
++                      unsigned long num, ext_prepare_callback func)
++{
++      struct ext3_ext_path *path = NULL;
++      struct ext3_extent *ex, cbex;
++      unsigned long next, start = 0, end = 0;
++      unsigned long last = block + num;
++      int depth, exists, err = 0;
++
++      EXT_ASSERT(tree);
++      EXT_ASSERT(func);
++      EXT_ASSERT(tree->inode);
++      EXT_ASSERT(tree->root);
++
++      while (block < last && block != EXT_MAX_BLOCK) {
++              num = last - block;
++              /* find extent for this block */
++              path = ext3_ext_find_extent(tree, block, path);
++              if (IS_ERR(path)) {
++                      err = PTR_ERR(path);
++                      path = NULL;
++                      break;
++              }
++
++              depth = EXT_DEPTH(tree);
++              EXT_ASSERT(path[depth].p_hdr);
++              ex = path[depth].p_ext;
++              next = ext3_ext_next_allocated_block(path);
++
++              exists = 0;
++              if (!ex) {
++                      /* there is no extent yet, so try to allocate
++                       * all requested space */
++                      start = block;
++                      end = block + num;
++              } else if (ex->ee_block > block) {
++                      /* need to allocate space before found extent */
++                      start = block;
++                      end = ex->ee_block;
++                      if (block + num < end)
++                              end = block + num;
++              } else if (block >= ex->ee_block + ex->ee_len) {
++                      /* need to allocate space after found extent */
++                      start = block;
++                      end = block + num;
++                      if (end >= next)
++                              end = next;
++              } else if (block >= ex->ee_block) {
++                      /* 
++                       * some part of requested space is covered
++                       * by found extent
++                       */
++                      start = block;
++                      end = ex->ee_block + ex->ee_len;
++                      if (block + num < end)
++                              end = block + num;
++                      exists = 1;
++              } else {
++                      BUG();
++              }
++              EXT_ASSERT(end > start);
++
++              if (!exists) {
++                      cbex.ee_block = start;
++                      cbex.ee_len = end - start;
++                      cbex.ee_start = 0;
++              } else
++                      cbex = *ex;
++
++              EXT_ASSERT(path[depth].p_hdr);
++              err = func(tree, path, &cbex, exists);
++              ext3_ext_drop_refs(path);
++
++              if (err < 0)
++                      break;
++              if (err == EXT_REPEAT)
++                      continue;
++              else if (err == EXT_BREAK) {
++                      err = 0;
++                      break;
++              }
++
++              if (EXT_DEPTH(tree) != depth) {
++                      /* depth was changed. we have to realloc path */
++                      kfree(path);
++                      path = NULL;
++              }
++
++              block = cbex.ee_block + cbex.ee_len;
++      }
++
++      if (path) {
++              ext3_ext_drop_refs(path);
++              kfree(path);
++      }
++
++      return err;
++}
++
++static inline void
++ext3_ext_put_in_cache(struct ext3_extents_tree *tree, struct ext3_extent *ex)
++{
++      if (tree->cex) {
++              EXT_ASSERT(ex);
++              EXT_ASSERT(ex->ee_len);
++              tree->cex->ee_block = ex->ee_block;
++              tree->cex->ee_start = ex->ee_start;
++              tree->cex->ee_len = ex->ee_len;
++      }
++}
++
++/*
++ * this routine calculate boundaries of the gap requested block fits into
++ * and cache this gap
++ */
++static inline void
++ext3_ext_put_gap_in_cache(struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path,
++                              unsigned long block)
++{
++      int depth = EXT_DEPTH(tree);
++      struct ext3_extent *ex, gex;
++
++      if (!tree->cex)
++              return;
++
++      ex = path[depth].p_ext;
++      if (ex == NULL) {
++              /* there is no extent yet, so gap is [0;-] */
++              gex.ee_block = 0;
++              gex.ee_len = EXT_CACHE_MARK;
++              ext_debug(tree, "cache gap(whole file):");
++      } else if (block < ex->ee_block) {
++              gex.ee_block = block;
++              gex.ee_len = ex->ee_block - block;
++              ext_debug(tree, "cache gap(before): %lu [%lu:%lu]",
++                              (unsigned long) block,
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len);
++      } else if (block >= ex->ee_block + ex->ee_len) {
++              gex.ee_block = ex->ee_block + ex->ee_len;
++              gex.ee_len = ext3_ext_next_allocated_block(path);
++              ext_debug(tree, "cache gap(after): [%lu:%lu] %lu",
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len,
++                              (unsigned long) block);
++              EXT_ASSERT(gex.ee_len > gex.ee_block);
++              gex.ee_len = gex.ee_len - gex.ee_block;
++      } else {
++              BUG();
++      }
++
++      ext_debug(tree, " -> %lu:%lu\n", (unsigned long) gex.ee_block,
++                      (unsigned long) gex.ee_len);
++      gex.ee_start = EXT_CACHE_MARK;
++      ext3_ext_put_in_cache(tree, &gex);
++}
++
++static inline int
++ext3_ext_in_cache(struct ext3_extents_tree *tree, unsigned long block,
++                      struct ext3_extent *ex)
++{
++      struct ext3_extent *cex = tree->cex;
++
++      /* is there cache storage at all? */
++      if (!cex)
++              return 0;
++
++      /* has cache valid data? */
++      if (cex->ee_len == 0)
++              return 0;
++
++      if (block >= cex->ee_block && block < cex->ee_block + cex->ee_len) {
++              ex->ee_block = cex->ee_block;
++              ex->ee_start = cex->ee_start;
++              ex->ee_len = cex->ee_len;
++              ext_debug(tree, "%lu cached by %lu:%lu:%lu\n",
++                              (unsigned long) block,
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len,
++                              (unsigned long) ex->ee_start);
++              return 1;
++      }
++
++      /* not in cache */
++      return 0;
++}
++
++/*
++ * routine removes index from the index block
++ * it's used in truncate case only. thus all requests are for
++ * last index in the block only
++ */
++int ext3_ext_rm_idx(handle_t *handle, struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path)
++{
++      struct buffer_head *bh;
++      int err;
++      
++      /* free index block */
++      path--;
++      EXT_ASSERT(path->p_hdr->eh_entries);
++      if ((err = ext3_ext_get_access(handle, tree, path)))
++              return err;
++      path->p_hdr->eh_entries--;
++      if ((err = ext3_ext_dirty(handle, tree, path)))
++              return err;
++      ext_debug(tree, "index is empty, remove it, free block %d\n",
++                      path->p_idx->ei_leaf);
++      bh = sb_find_get_block(tree->inode->i_sb, path->p_idx->ei_leaf);
++      ext3_forget(handle, 1, tree->inode, bh, path->p_idx->ei_leaf);
++      ext3_free_blocks(handle, tree->inode, path->p_idx->ei_leaf, 1);
++      return err;
++}
++
++int ext3_ext_calc_credits_for_insert(struct ext3_extents_tree *tree,
++                                      struct ext3_ext_path *path)
++{
++      int depth = EXT_DEPTH(tree);
++      int needed;
++
++      if (path) {
++              /* probably there is space in leaf? */
++              if (path[depth].p_hdr->eh_entries < path[depth].p_hdr->eh_max)
++                      return 1;
++      }
++      
++      /*
++       * the worste case we're expecting is creation of the
++       * new root (growing in depth) with index splitting
++       * for splitting we have to consider depth + 1 because
++       * previous growing could increase it
++       */
++      depth = depth + 1;
++
++      /* 
++       * growing in depth:
++       * block allocation + new root + old root
++       */
++      needed = EXT3_ALLOC_NEEDED + 2;
++
++      /* index split. we may need:
++       *   allocate intermediate indexes and new leaf
++       *   change two blocks at each level, but root
++       *   modify root block (inode)
++       */
++      needed += (depth * EXT3_ALLOC_NEEDED) + (2 * depth) + 1;
++
++      return needed;
++}
++
++static int
++ext3_ext_split_for_rm(handle_t *handle, struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, unsigned long start,
++                      unsigned long end)
++{
++      struct ext3_extent *ex, tex;
++      struct ext3_ext_path *npath;
++      int depth, creds, err;
++
++      depth = EXT_DEPTH(tree);
++      ex = path[depth].p_ext;
++      EXT_ASSERT(ex);
++      EXT_ASSERT(end < ex->ee_block + ex->ee_len - 1);
++      EXT_ASSERT(ex->ee_block < start);
++
++      /* calculate tail extent */
++      tex.ee_block = end + 1;
++      EXT_ASSERT(tex.ee_block < ex->ee_block + ex->ee_len);
++      tex.ee_len = ex->ee_block + ex->ee_len - tex.ee_block;
++
++      creds = ext3_ext_calc_credits_for_insert(tree, path);
++      handle = ext3_ext_journal_restart(handle, creds);
++      if (IS_ERR(handle))
++              return PTR_ERR(handle);
++      
++      /* calculate head extent. use primary extent */
++      err = ext3_ext_get_access(handle, tree, path + depth);
++      if (err)
++              return err;
++      ex->ee_len = start - ex->ee_block;
++      err = ext3_ext_dirty(handle, tree, path + depth);
++      if (err)
++              return err;
++
++      /* FIXME: some callback to free underlying resource
++       * and correct ee_start? */
++      ext_debug(tree, "split extent: head %u:%u, tail %u:%u\n",
++                      ex->ee_block, ex->ee_len, tex.ee_block, tex.ee_len);
++
++      npath = ext3_ext_find_extent(tree, ex->ee_block, NULL);
++      if (IS_ERR(npath))
++              return PTR_ERR(npath);
++      depth = EXT_DEPTH(tree);
++      EXT_ASSERT(npath[depth].p_ext->ee_block == ex->ee_block);
++      EXT_ASSERT(npath[depth].p_ext->ee_len == ex->ee_len);
++
++      err = ext3_ext_insert_extent(handle, tree, npath, &tex);
++      ext3_ext_drop_refs(npath);
++      kfree(npath);
++
++      return err;
++                      
++}
++
++static int
++ext3_ext_rm_leaf(handle_t *handle, struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, unsigned long start,
++                      unsigned long end)
++{
++      struct ext3_extent *ex, *fu = NULL, *lu, *le;
++      int err = 0, correct_index = 0;
++      int depth = EXT_DEPTH(tree), credits;
++      struct ext3_extent_header *eh;
++      unsigned a, b, block, num;
++
++      ext_debug(tree, "remove [%lu:%lu] in leaf\n", start, end);
++      if (!path[depth].p_hdr)
++              path[depth].p_hdr = EXT_BLOCK_HDR(path[depth].p_bh);
++      eh = path[depth].p_hdr;
++      EXT_ASSERT(eh);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      
++      /* find where to start removing */
++      le = ex = EXT_LAST_EXTENT(eh);
++      while (ex != EXT_FIRST_EXTENT(eh)) {
++              if (ex->ee_block <= end)
++                      break;
++              ex--;
++      }
++
++      if (start > ex->ee_block && end < ex->ee_block + ex->ee_len - 1) {
++              /* removal of internal part of the extent requested
++               * tail and head must be placed in different extent
++               * so, we have to insert one more extent */
++              path[depth].p_ext = ex;
++              return ext3_ext_split_for_rm(handle, tree, path, start, end);
++      }
++      
++      lu = ex;
++      while (ex >= EXT_FIRST_EXTENT(eh) &&
++                      ex->ee_block + ex->ee_len > start) {
++              ext_debug(tree, "remove ext %u:%u\n", ex->ee_block, ex->ee_len);
++              path[depth].p_ext = ex;
++      
++              a = ex->ee_block > start ? ex->ee_block : start;
++              b = ex->ee_block + ex->ee_len - 1 < end ?
++                      ex->ee_block + ex->ee_len - 1 : end;
++              
++              ext_debug(tree, "  border %u:%u\n", a, b);
++
++              if (a != ex->ee_block && b != ex->ee_block + ex->ee_len - 1) {
++                      block = 0;
++                      num = 0;
++                      BUG();
++              } else if (a != ex->ee_block) {
++                      /* remove tail of the extent */
++                      block = ex->ee_block;
++                      num = a - block;
++              } else if (b != ex->ee_block + ex->ee_len - 1) {
++                      /* remove head of the extent */
++                      block = a;
++                      num = b - a;
++              } else {
++                      /* remove whole extent: excelent! */
++                      block = ex->ee_block; 
++                      num = 0;
++                      EXT_ASSERT(a == ex->ee_block &&
++                                      b == ex->ee_block + ex->ee_len - 1);
++              }
++
++              if (ex == EXT_FIRST_EXTENT(eh))
++                      correct_index = 1;
++
++              credits = 1;
++              if (correct_index)
++                      credits += (EXT_DEPTH(tree) * EXT3_ALLOC_NEEDED) + 1;
++              if (tree->ops->remove_extent_credits)
++                      credits+=tree->ops->remove_extent_credits(tree,ex,a,b);
++              
++              handle = ext3_ext_journal_restart(handle, credits);
++              if (IS_ERR(handle)) {
++                      err = PTR_ERR(handle);
++                      goto out;
++              }
++
++              err = ext3_ext_get_access(handle, tree, path + depth);
++              if (err)
++                      goto out;
++
++              if (tree->ops->remove_extent)
++                      err = tree->ops->remove_extent(tree, ex, a, b);
++              if (err)
++                      goto out;
++
++              if (num == 0) {
++                      /* this extent is removed entirely mark slot unused */
++                      ex->ee_start = 0;
++                      eh->eh_entries--;
++                      fu = ex;
++              }
++
++              ex->ee_block = block;
++              ex->ee_len = num;
++
++              err = ext3_ext_dirty(handle, tree, path + depth);
++              if (err)
++                      goto out;
++
++              ext_debug(tree, "new extent: %u:%u:%u\n",
++                              ex->ee_block, ex->ee_len, ex->ee_start);
++              ex--;
++      }
++
++      if (fu) {
++              /* reuse unused slots */
++              while (lu < le) {
++                      if (lu->ee_start) {
++                              *fu = *lu;
++                              lu->ee_start = 0;
++                              fu++;
++                      }
++                      lu++;
++              }
++      }
++
++      if (correct_index && eh->eh_entries)
++              err = ext3_ext_correct_indexes(handle, tree, path);
++
++      /* if this leaf is free, then we should
++       * remove it from index block above */
++      if (err == 0 && eh->eh_entries == 0 && path[depth].p_bh != NULL)
++              err = ext3_ext_rm_idx(handle, tree, path + depth);
++
++out:
++      return err;
++}
++
++
++static struct ext3_extent_idx *
++ext3_ext_last_covered(struct ext3_extent_header *hdr, unsigned long block)
++{
++      struct ext3_extent_idx *ix;
++      
++      ix = EXT_LAST_INDEX(hdr);
++      while (ix != EXT_FIRST_INDEX(hdr)) {
++              if (ix->ei_block <= block)
++                      break;
++              ix--;
++      }
++      return ix;
++}
++
++/*
++ * returns 1 if current index have to be freed (even partial)
++ */
++static int inline
++ext3_ext_more_to_rm(struct ext3_ext_path *path)
++{
++      EXT_ASSERT(path->p_idx);
++
++      if (path->p_idx < EXT_FIRST_INDEX(path->p_hdr))
++              return 0;
++
++      /*
++       * if truncate on deeper level happened it it wasn't partial
++       * so we have to consider current index for truncation
++       */
++      if (path->p_hdr->eh_entries == path->p_block)
++              return 0;
++      return 1;
++}
++
++int ext3_ext_remove_space(struct ext3_extents_tree *tree,
++                              unsigned long start, unsigned long end)
++{
++      struct inode *inode = tree->inode;
++      struct super_block *sb = inode->i_sb;
++      int depth = EXT_DEPTH(tree);
++      struct ext3_ext_path *path;
++      handle_t *handle;
++      int i = 0, err = 0;
++
++      ext_debug(tree, "space to be removed: %lu:%lu\n", start, end);
++
++      /* probably first extent we're gonna free will be last in block */
++      handle = ext3_journal_start(inode, depth + 1);
++      if (IS_ERR(handle))
++              return PTR_ERR(handle);
++
++      ext3_ext_invalidate_cache(tree);
++
++      /*
++       * we start scanning from right side freeing all the blocks
++       * after i_size and walking into the deep
++       */
++      path = kmalloc(sizeof(struct ext3_ext_path) * (depth + 1), GFP_KERNEL);
++      if (IS_ERR(path)) {
++              ext3_error(sb, "ext3_ext_remove_space",
++                              "Can't allocate path array");
++              ext3_journal_stop(handle);
++              return -ENOMEM;
++      }
++      memset(path, 0, sizeof(struct ext3_ext_path) * (depth + 1));
++      path[i].p_hdr = EXT_ROOT_HDR(tree);
++      
++      while (i >= 0 && err == 0) {
++              if (i == depth) {
++                      /* this is leaf block */
++                      err = ext3_ext_rm_leaf(handle, tree, path, start, end);
++                      /* root level have p_bh == NULL, brelse() eats this */
++                      brelse(path[i].p_bh);
++                      i--;
++                      continue;
++              }
++              
++              /* this is index block */
++              if (!path[i].p_hdr) {
++                      ext_debug(tree, "initialize header\n");
++                      path[i].p_hdr = EXT_BLOCK_HDR(path[i].p_bh);
++              }
++
++              EXT_ASSERT(path[i].p_hdr->eh_entries <= path[i].p_hdr->eh_max);
++              EXT_ASSERT(path[i].p_hdr->eh_magic == EXT3_EXT_MAGIC);
++              
++              if (!path[i].p_idx) {
++                      /* this level hasn't touched yet */
++                      path[i].p_idx =
++                              ext3_ext_last_covered(path[i].p_hdr, end);
++                      path[i].p_block = path[i].p_hdr->eh_entries + 1;
++                      ext_debug(tree, "init index ptr: hdr 0x%p, num %d\n",
++                                      path[i].p_hdr, path[i].p_hdr->eh_entries);
++              } else {
++                      /* we've already was here, see at next index */
++                      path[i].p_idx--;
++              }
++
++              ext_debug(tree, "level %d - index, first 0x%p, cur 0x%p\n",
++                              i, EXT_FIRST_INDEX(path[i].p_hdr),
++                              path[i].p_idx);
++              if (ext3_ext_more_to_rm(path + i)) {
++                      /* go to the next level */
++                      ext_debug(tree, "move to level %d (block %d)\n",
++                                      i + 1, path[i].p_idx->ei_leaf);
++                      memset(path + i + 1, 0, sizeof(*path));
++                      path[i+1].p_bh = sb_bread(sb, path[i].p_idx->ei_leaf);
++                      if (!path[i+1].p_bh) {
++                              /* should we reset i_size? */
++                              err = -EIO;
++                              break;
++                      }
++                      /* put actual number of indexes to know is this
++                       * number got changed at the next iteration */
++                      path[i].p_block = path[i].p_hdr->eh_entries;
++                      i++;
++              } else {
++                      /* we finish processing this index, go up */
++                      if (path[i].p_hdr->eh_entries == 0 && i > 0) {
++                              /* index is empty, remove it
++                               * handle must be already prepared by the
++                               * truncatei_leaf() */
++                              err = ext3_ext_rm_idx(handle, tree, path + i);
++                      }
++                      /* root level have p_bh == NULL, brelse() eats this */
++                      brelse(path[i].p_bh);
++                      i--;
++                      ext_debug(tree, "return to level %d\n", i);
++              }
++      }
++
++      /* TODO: flexible tree reduction should be here */
++      if (path->p_hdr->eh_entries == 0) {
++              /*
++               * truncate to zero freed all the tree
++               * so, we need to correct eh_depth
++               */
++              err = ext3_ext_get_access(handle, tree, path);
++              if (err == 0) {
++                      EXT_ROOT_HDR(tree)->eh_depth = 0;
++                      EXT_ROOT_HDR(tree)->eh_max = ext3_ext_space_root(tree);
++                      err = ext3_ext_dirty(handle, tree, path);
++              }
++      }
++      ext3_ext_tree_changed(tree);
++
++      kfree(path);
++      ext3_journal_stop(handle);
++
++      return err;
++}
++
++int ext3_ext_calc_metadata_amount(struct ext3_extents_tree *tree, int blocks)
++{
++      int lcap, icap, rcap, leafs, idxs, num;
++
++      rcap = ext3_ext_space_root(tree);
++      if (blocks <= rcap) {
++              /* all extents fit to the root */
++              return 0;
++      }
++
++      rcap = ext3_ext_space_root_idx(tree);
++      lcap = ext3_ext_space_block(tree);
++      icap = ext3_ext_space_block_idx(tree);
++
++      num = leafs = (blocks + lcap - 1) / lcap;
++      if (leafs <= rcap) {
++              /* all pointers to leafs fit to the root */
++              return leafs;
++      }
++
++      /* ok. we need separate index block(s) to link all leaf blocks */
++      idxs = (leafs + icap - 1) / icap;
++      do {
++              num += idxs;
++              idxs = (idxs + icap - 1) / icap;
++      } while (idxs > rcap);
++
++      return num;
++}
++
++/*
++ * called at mount time
++ */
++void ext3_ext_init(struct super_block *sb)
++{
++      /*
++       * possible initialization would be here
++       */
++
++      if (test_opt(sb, EXTENTS)) {
++              printk("EXT3-fs: file extents enabled");
++#ifdef AGRESSIVE_TEST
++              printk(", agressive tests");
++#endif
++#ifdef CHECK_BINSEARCH
++              printk(", check binsearch");
++#endif
++              printk("\n");
++      }
++}
++
++/*
++ * called at umount time
++ */
++void ext3_ext_release(struct super_block *sb)
++{
++}
++
++/************************************************************************
++ * VFS related routines
++ ************************************************************************/
++
++static int ext3_get_inode_write_access(handle_t *handle, void *buffer)
++{
++      /* we use in-core data, not bh */
++      return 0;
++}
++
++static int ext3_mark_buffer_dirty(handle_t *handle, void *buffer)
++{
++      struct inode *inode = buffer;
++      return ext3_mark_inode_dirty(handle, inode);
++}
++
++static int ext3_ext_mergable(struct ext3_extent *ex1,
++                              struct ext3_extent *ex2)
++{
++      /* FIXME: support for large fs */
++      if (ex1->ee_start + ex1->ee_len == ex2->ee_start)
++              return 1;
++      return 0;
++}
++
++static int
++ext3_remove_blocks_credits(struct ext3_extents_tree *tree,
++                              struct ext3_extent *ex,
++                              unsigned long from, unsigned long to)
++{
++      int needed;
++      
++      /* at present, extent can't cross block group */;
++      needed = 4; /* bitmap + group desc + sb + inode */
++
++#ifdef CONFIG_QUOTA
++      needed += 2 * EXT3_SINGLEDATA_TRANS_BLOCKS;
++#endif
++      return needed;
++}
++
++static int
++ext3_remove_blocks(struct ext3_extents_tree *tree,
++                              struct ext3_extent *ex,
++                              unsigned long from, unsigned long to)
++{
++      int needed = ext3_remove_blocks_credits(tree, ex, from, to);
++      handle_t *handle = ext3_journal_start(tree->inode, needed);
++      struct buffer_head *bh;
++      int i;
++
++      if (IS_ERR(handle))
++              return PTR_ERR(handle);
++      if (from >= ex->ee_block && to == ex->ee_block + ex->ee_len - 1) {
++              /* tail removal */
++              unsigned long num, start;
++              num = ex->ee_block + ex->ee_len - from;
++              start = ex->ee_start + ex->ee_len - num;
++              ext_debug(tree, "free last %lu blocks starting %lu\n",
++                              num, start);
++              for (i = 0; i < num; i++) {
++                      bh = sb_find_get_block(tree->inode->i_sb, start + i);
++                      ext3_forget(handle, 0, tree->inode, bh, start + i);
++              }
++              ext3_free_blocks(handle, tree->inode, start, num);
++      } else if (from == ex->ee_block && to <= ex->ee_block + ex->ee_len - 1) {
++              printk("strange request: removal %lu-%lu from %u:%u\n",
++                      from, to, ex->ee_block, ex->ee_len);
++      } else {
++              printk("strange request: removal(2) %lu-%lu from %u:%u\n",
++                      from, to, ex->ee_block, ex->ee_len);
++      }
++      ext3_journal_stop(handle);
++      return 0;
++}
++
++static int ext3_ext_find_goal(struct inode *inode,
++                              struct ext3_ext_path *path, unsigned long block)
++{
++      struct ext3_inode_info *ei = EXT3_I(inode);
++      unsigned long bg_start;
++      unsigned long colour;
++      int depth;
++      
++      if (path) {
++              struct ext3_extent *ex;
++              depth = path->p_depth;
++              
++              /* try to predict block placement */
++              if ((ex = path[depth].p_ext))
++                      return ex->ee_start + (block - ex->ee_block);
++
++              /* it looks index is empty
++               * try to find starting from index itself */
++              if (path[depth].p_bh)
++                      return path[depth].p_bh->b_blocknr;
++      }
++
++      /* OK. use inode's group */
++      bg_start = (ei->i_block_group * EXT3_BLOCKS_PER_GROUP(inode->i_sb)) +
++              le32_to_cpu(EXT3_SB(inode->i_sb)->s_es->s_first_data_block);
++      colour = (current->pid % 16) *
++                      (EXT3_BLOCKS_PER_GROUP(inode->i_sb) / 16);
++      return bg_start + colour + block;
++}
++
++static int ext3_new_block_cb(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path,
++                              struct ext3_extent *ex, int *err)
++{
++      struct inode *inode = tree->inode;
++      int newblock, goal;
++      
++      EXT_ASSERT(path);
++      EXT_ASSERT(ex);
++      EXT_ASSERT(ex->ee_start);
++      EXT_ASSERT(ex->ee_len);
++      
++      /* reuse block from the extent to order data/metadata */
++      newblock = ex->ee_start++;
++      ex->ee_len--;
++      if (ex->ee_len == 0) {
++              ex->ee_len = 1;
++              /* allocate new block for the extent */
++              goal = ext3_ext_find_goal(inode, path, ex->ee_block);
++              ex->ee_start = ext3_new_block(handle, inode, goal, 0, 0, err);
++              if (ex->ee_start == 0) {
++                      /* error occured: restore old extent */
++                      ex->ee_start = newblock;
++                      return 0;
++              }
++      }
++      return newblock;
++}
++
++static struct ext3_extents_helpers ext3_blockmap_helpers = {
++      .get_write_access       = ext3_get_inode_write_access,
++      .mark_buffer_dirty      = ext3_mark_buffer_dirty,
++      .mergable               = ext3_ext_mergable,
++      .new_block              = ext3_new_block_cb,
++      .remove_extent          = ext3_remove_blocks,
++      .remove_extent_credits  = ext3_remove_blocks_credits,
++};
++
++void ext3_init_tree_desc(struct ext3_extents_tree *tree,
++                              struct inode *inode)
++{
++      tree->inode = inode;
++      tree->root = (void *) EXT3_I(inode)->i_data;
++      tree->buffer = (void *) inode;
++      tree->buffer_len = sizeof(EXT3_I(inode)->i_data);
++      tree->cex = (struct ext3_extent *) &EXT3_I(inode)->i_cached_extent;
++      tree->ops = &ext3_blockmap_helpers;
++}
++
++int ext3_ext_get_block(handle_t *handle, struct inode *inode,
++                      long iblock, struct buffer_head *bh_result,
++                      int create, int extend_disksize)
++{
++      struct ext3_ext_path *path = NULL;
++      struct ext3_extent newex;
++      struct ext3_extent *ex;
++      int goal, newblock, err = 0, depth;
++      struct ext3_extents_tree tree;
++
++      clear_buffer_new(bh_result);
++      ext3_init_tree_desc(&tree, inode);
++      ext_debug(&tree, "block %d requested for inode %u\n",
++                      (int) iblock, (unsigned) inode->i_ino);
++      down(&EXT3_I(inode)->truncate_sem);
++
++      /* check in cache */
++      if (ext3_ext_in_cache(&tree, iblock, &newex)) {
++              if (newex.ee_start == EXT_CACHE_MARK) {
++                      /* this is cached gap */
++                      if (!create) {
++                              /* block isn't allocated yet and
++                               * user don't want to allocate it */
++                              goto out2;
++                      }
++                      /* we should allocate requested block */
++              } else if (newex.ee_start) {
++                      /* block is already allocated */
++                      newblock = iblock - newex.ee_block + newex.ee_start;
++                      goto out;
++              }
++      }
++
++      /* find extent for this block */
++      path = ext3_ext_find_extent(&tree, iblock, NULL);
++      if (IS_ERR(path)) {
++              err = PTR_ERR(path);
++              path = NULL;
++              goto out2;
++      }
++
++      depth = EXT_DEPTH(&tree);
++
++      /*
++       * consistent leaf must not be empty
++       * this situations is possible, though, _during_ tree modification
++       * this is why assert can't be put in ext3_ext_find_extent()
++       */
++      EXT_ASSERT(path[depth].p_ext != NULL || depth == 0);
++
++      if ((ex = path[depth].p_ext)) {
++              /* if found exent covers block, simple return it */
++              if (iblock >= ex->ee_block && iblock < ex->ee_block + ex->ee_len) {
++                      newblock = iblock - ex->ee_block + ex->ee_start;
++                      ext_debug(&tree, "%d fit into %d:%d -> %d\n",
++                                      (int) iblock, ex->ee_block, ex->ee_len,
++                                      newblock);
++                      ext3_ext_put_in_cache(&tree, ex);
++                      goto out;
++              }
++      }
++
++      /*
++       * requested block isn't allocated yet
++       * we couldn't try to create block if create flag is zero 
++       */
++      if (!create) {
++              /* put just found gap into cache to speedup subsequest reqs */
++              ext3_ext_put_gap_in_cache(&tree, path, iblock);
++              goto out2;
++      }
++
++      /* allocate new block */
++      goal = ext3_ext_find_goal(inode, path, iblock);
++      newblock = ext3_new_block(handle, inode, goal, 0, 0, &err);
++      if (!newblock)
++              goto out2;
++      ext_debug(&tree, "allocate new block: goal %d, found %d\n",
++                      goal, newblock);
++
++      /* try to insert new extent into found leaf and return */
++      newex.ee_block = iblock;
++      newex.ee_start = newblock;
++      newex.ee_len = 1;
++      err = ext3_ext_insert_extent(handle, &tree, path, &newex);
++      if (err)
++              goto out2;
++      
++      if (extend_disksize && inode->i_size > EXT3_I(inode)->i_disksize)
++              EXT3_I(inode)->i_disksize = inode->i_size;
++
++      /* previous routine could use block we allocated */
++      newblock = newex.ee_start;
++      set_buffer_new(bh_result);
++
++      ext3_ext_put_in_cache(&tree, &newex);
++out:
++      ext3_ext_show_leaf(&tree, path);
++      map_bh(bh_result, inode->i_sb, newblock);
++out2:
++      if (path) {
++              ext3_ext_drop_refs(path);
++              kfree(path);
++      }
++      up(&EXT3_I(inode)->truncate_sem);
++
++      return err;     
++}
++
++void ext3_ext_truncate(struct inode * inode, struct page *page)
++{
++      struct address_space *mapping = inode->i_mapping;
++      struct super_block *sb = inode->i_sb;
++      struct ext3_extents_tree tree;
++      unsigned long last_block;
++      handle_t *handle;
++      int err = 0;
++
++      ext3_init_tree_desc(&tree, inode);
++
++      /*
++       * probably first extent we're gonna free will be last in block
++       */
++      err = ext3_writepage_trans_blocks(inode) + 3;
++      handle = ext3_journal_start(inode, err);
++      if (IS_ERR(handle)) {
++              if (page) {
++                      clear_highpage(page);
++                      flush_dcache_page(page);
++                      unlock_page(page);
++                      page_cache_release(page);
++              }
++              return;
++      }
++
++      if (page)
++              ext3_block_truncate_page(handle, page, mapping, inode->i_size);
++
++      down(&EXT3_I(inode)->truncate_sem);
++      ext3_ext_invalidate_cache(&tree);
++
++      /* 
++       * TODO: optimization is possible here
++       * probably we need not scaning at all,
++       * because page truncation is enough
++       */
++      if (ext3_orphan_add(handle, inode))
++              goto out_stop;
++
++      /* we have to know where to truncate from in crash case */
++      EXT3_I(inode)->i_disksize = inode->i_size;
++      ext3_mark_inode_dirty(handle, inode);
++
++      last_block = (inode->i_size + sb->s_blocksize - 1)
++                      >> EXT3_BLOCK_SIZE_BITS(sb);
++      err = ext3_ext_remove_space(&tree, last_block, EXT_MAX_BLOCK);
++      
++      /* In a multi-transaction truncate, we only make the final
++       * transaction synchronous */
++      if (IS_SYNC(inode))
++              handle->h_sync = 1;
++
++out_stop:
++      /*
++       * If this was a simple ftruncate(), and the file will remain alive
++       * then we need to clear up the orphan record which we created above.
++       * However, if this was a real unlink then we were called by
++       * ext3_delete_inode(), and we allow that function to clean up the
++       * orphan info for us.
++       */
++      if (inode->i_nlink)
++              ext3_orphan_del(handle, inode);
++
++      up(&EXT3_I(inode)->truncate_sem);
++      ext3_journal_stop(handle);
++}
++
++/*
++ * this routine calculate max number of blocks we could modify
++ * in order to allocate new block for an inode
++ */
++int ext3_ext_writepage_trans_blocks(struct inode *inode, int num)
++{
++      struct ext3_extents_tree tree;
++      int needed;
++      
++      ext3_init_tree_desc(&tree, inode);
++      
++      needed = ext3_ext_calc_credits_for_insert(&tree, NULL);
++
++      /* caller want to allocate num blocks */
++      needed *= num;
++      
++#ifdef CONFIG_QUOTA
++      /* 
++       * FIXME: real calculation should be here
++       * it depends on blockmap format of qouta file
++       */
++      needed += 2 * EXT3_SINGLEDATA_TRANS_BLOCKS;
++#endif
++
++      return needed;
++}
++
++void ext3_extents_initialize_blockmap(handle_t *handle, struct inode *inode)
++{
++      struct ext3_extents_tree tree;
++
++      ext3_init_tree_desc(&tree, inode);
++      ext3_extent_tree_init(handle, &tree);
++}
++
++int ext3_ext_calc_blockmap_metadata(struct inode *inode, int blocks)
++{
++      struct ext3_extents_tree tree;
++
++      ext3_init_tree_desc(&tree, inode);
++      return ext3_ext_calc_metadata_amount(&tree, blocks);
++}
++      
++static int
++ext3_ext_store_extent_cb(struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path,
++                      struct ext3_extent *newex, int exist)
++{
++      struct ext3_extent_buf *buf = (struct ext3_extent_buf *) tree->private;
++
++      if (!exist)
++              return EXT_CONTINUE;
++      if (buf->err < 0)
++              return EXT_BREAK;
++      if (buf->cur - buf->buffer + sizeof(*newex) > buf->buflen)
++              return EXT_BREAK;
++
++      if (!copy_to_user(buf->cur, newex, sizeof(*newex))) {
++              buf->err++;
++              buf->cur += sizeof(*newex);
++      } else {
++              buf->err = -EFAULT;
++              return EXT_BREAK;
++      }
++      return EXT_CONTINUE;
++}
++
++static int
++ext3_ext_collect_stats_cb(struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path,
++                      struct ext3_extent *ex, int exist)
++{
++      struct ext3_extent_tree_stats *buf =
++              (struct ext3_extent_tree_stats *) tree->private;
++      int depth;
++
++      if (!exist)
++              return EXT_CONTINUE;
++
++      depth = EXT_DEPTH(tree);
++      buf->extents_num++;
++      if (path[depth].p_ext == EXT_FIRST_EXTENT(path[depth].p_hdr))
++              buf->leaf_num++;
++      return EXT_CONTINUE;
++}
++
++int ext3_ext_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
++              unsigned long arg)
++{
++      int err = 0;
++
++      if (!(EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL))
++              return -EINVAL;
++
++      if (cmd == EXT3_IOC_GET_EXTENTS) {
++              struct ext3_extent_buf buf;
++              struct ext3_extents_tree tree;
++
++              if (copy_from_user(&buf, (void *) arg, sizeof(buf)))
++                      return -EFAULT;
++
++              ext3_init_tree_desc(&tree, inode);
++              buf.cur = buf.buffer;
++              buf.err = 0;
++              tree.private = &buf;
++              down(&EXT3_I(inode)->truncate_sem);
++              err = ext3_ext_walk_space(&tree, buf.start, EXT_MAX_BLOCK,
++                                              ext3_ext_store_extent_cb);
++              up(&EXT3_I(inode)->truncate_sem);
++              if (err == 0)
++                      err = buf.err;
++      } else if (cmd == EXT3_IOC_GET_TREE_STATS) {
++              struct ext3_extent_tree_stats buf;
++              struct ext3_extents_tree tree;
++
++              ext3_init_tree_desc(&tree, inode);
++              down(&EXT3_I(inode)->truncate_sem);
++              buf.depth = EXT_DEPTH(&tree);
++              buf.extents_num = 0;
++              buf.leaf_num = 0;
++              tree.private = &buf;
++              err = ext3_ext_walk_space(&tree, 0, EXT_MAX_BLOCK,
++                                              ext3_ext_collect_stats_cb);
++              up(&EXT3_I(inode)->truncate_sem);
++              if (!err)
++                      err = copy_to_user((void *) arg, &buf, sizeof(buf));
++      } else if (cmd == EXT3_IOC_GET_TREE_DEPTH) {
++              struct ext3_extents_tree tree;
++              ext3_init_tree_desc(&tree, inode);
++              down(&EXT3_I(inode)->truncate_sem);
++              err = EXT_DEPTH(&tree);
++              up(&EXT3_I(inode)->truncate_sem);
++      }
++
++      return err;
++}
++
++EXPORT_SYMBOL(ext3_init_tree_desc);
++EXPORT_SYMBOL(ext3_mark_inode_dirty);
++EXPORT_SYMBOL(ext3_ext_invalidate_cache);
++EXPORT_SYMBOL(ext3_ext_insert_extent);
++EXPORT_SYMBOL(ext3_ext_walk_space);
++EXPORT_SYMBOL(ext3_ext_find_goal);
++EXPORT_SYMBOL(ext3_ext_calc_credits_for_insert);
++
+Index: linux-2.6.7/fs/ext3/ialloc.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/ialloc.c  2004-08-19 08:51:04.000000000 +0400
++++ linux-2.6.7/fs/ext3/ialloc.c       2004-08-19 08:53:49.000000000 +0400
+@@ -646,6 +646,10 @@
+               DQUOT_FREE_INODE(inode);
+               goto fail2;
+       }
++      if (test_opt(sb, EXTENTS)) {
++              EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
++              ext3_extents_initialize_blockmap(handle, inode);
++      }
+       err = ext3_mark_inode_dirty(handle, inode);
+       if (err) {
+               ext3_std_error(sb, err);
+Index: linux-2.6.7/fs/ext3/inode.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/inode.c   2004-08-19 08:51:04.000000000 +0400
++++ linux-2.6.7/fs/ext3/inode.c        2004-08-19 08:53:49.000000000 +0400
+@@ -857,6 +857,17 @@
+       goto reread;
+ }
++static inline int
++ext3_get_block_wrap(handle_t *handle, struct inode *inode, long block,
++              struct buffer_head *bh, int create, int extend_disksize)
++{
++      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
++              return ext3_ext_get_block(handle, inode, block, bh, create,
++                                              extend_disksize);
++      return ext3_get_block_handle(handle, inode, block, bh, create,
++                                      extend_disksize);
++}
++
+ static int ext3_get_block(struct inode *inode, sector_t iblock,
+                       struct buffer_head *bh_result, int create)
+ {
+@@ -867,8 +878,8 @@
+               handle = ext3_journal_current_handle();
+               J_ASSERT(handle != 0);
+       }
+-      ret = ext3_get_block_handle(handle, inode, iblock,
+-                              bh_result, create, 1);
++      ret = ext3_get_block_wrap(handle, inode, iblock,
++                                      bh_result, create, 1);
+       return ret;
+ }
+@@ -894,8 +905,8 @@
+               }
+       }
+       if (ret == 0)
+-              ret = ext3_get_block_handle(handle, inode, iblock,
+-                                      bh_result, create, 0);
++              ret = ext3_get_block_wrap(handle, inode, iblock,
++                                              bh_result, create, 0);
+       if (ret == 0)
+               bh_result->b_size = (1 << inode->i_blkbits);
+       return ret;
+@@ -916,7 +927,7 @@
+       dummy.b_state = 0;
+       dummy.b_blocknr = -1000;
+       buffer_trace_init(&dummy.b_history);
+-      *errp = ext3_get_block_handle(handle, inode, block, &dummy, create, 1);
++      *errp = ext3_get_block_wrap(handle, inode, block, &dummy, create, 1);
+       if (!*errp && buffer_mapped(&dummy)) {
+               struct buffer_head *bh;
+               bh = sb_getblk(inode->i_sb, dummy.b_blocknr);
+@@ -1669,7 +1680,7 @@
+  * This required during truncate. We need to physically zero the tail end
+  * of that block so it doesn't yield old data if the file is later grown.
+  */
+-static int ext3_block_truncate_page(handle_t *handle, struct page *page,
++int ext3_block_truncate_page(handle_t *handle, struct page *page,
+               struct address_space *mapping, loff_t from)
+ {
+       unsigned long index = from >> PAGE_CACHE_SHIFT;
+@@ -2165,6 +2176,9 @@
+                       return;
+       }
++      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
++              return ext3_ext_truncate(inode, page);
++
+       handle = start_transaction(inode);
+       if (IS_ERR(handle)) {
+               if (page) {
+@@ -2888,6 +2902,9 @@
+       int indirects = (EXT3_NDIR_BLOCKS % bpp) ? 5 : 3;
+       int ret;
++      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
++              return ext3_ext_writepage_trans_blocks(inode, bpp);
++ 
+       if (ext3_should_journal_data(inode))
+               ret = 3 * (bpp + indirects) + 2;
+       else
+Index: linux-2.6.7/fs/ext3/Makefile
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/Makefile  2004-08-19 08:52:14.000000000 +0400
++++ linux-2.6.7/fs/ext3/Makefile       2004-08-19 08:53:49.000000000 +0400
+@@ -5,7 +5,7 @@
+ obj-$(CONFIG_EXT3_FS) += ext3.o
+ ext3-y        := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
+-         ioctl.o namei.o super.o symlink.o hash.o
++         ioctl.o namei.o super.o symlink.o hash.o extents.o
+ ext3-$(CONFIG_EXT3_FS_XATTR)   += xattr.o xattr_user.o xattr_trusted.o
+ ext3-$(CONFIG_EXT3_FS_POSIX_ACL) += acl.o
+Index: linux-2.6.7/fs/ext3/super.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/super.c   2004-08-19 08:51:04.000000000 +0400
++++ linux-2.6.7/fs/ext3/super.c        2004-08-19 08:53:49.000000000 +0400
+@@ -392,6 +392,7 @@
+       struct ext3_super_block *es = sbi->s_es;
+       int i;
++      ext3_ext_release(sb);
+       ext3_xattr_put_super(sb);
+       journal_destroy(sbi->s_journal);
+       if (!(sb->s_flags & MS_RDONLY)) {
+@@ -455,6 +456,9 @@
+       ei->i_default_acl = EXT3_ACL_NOT_CACHED;
+ #endif
+       ei->vfs_inode.i_version = 1;
++      ei->i_cached_extent[0] = 0;
++      ei->i_cached_extent[1] = 0;
++      ei->i_cached_extent[2] = 0;
+       return &ei->vfs_inode;
+ }
+@@ -590,7 +594,7 @@
+       Opt_commit, Opt_journal_update, Opt_journal_inum,
+       Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
+       Opt_ignore, Opt_barrier, Opt_iopen, Opt_noiopen, Opt_iopen_nopriv,
+-      Opt_err,
++      Opt_err, Opt_extents, Opt_extdebug
+ };
+ static match_table_t tokens = {
+@@ -638,6 +642,8 @@
+       {Opt_iopen,  "iopen"},
+       {Opt_noiopen, "noiopen"},
+       {Opt_iopen_nopriv, "iopen_nopriv"},
++      {Opt_extents, "extents"},
++      {Opt_extdebug, "extdebug"},
+       {Opt_err, NULL}
+ };
+@@ -917,6 +923,12 @@
+                       break;
+               case Opt_ignore:
+                       break;
++              case Opt_extents:
++                      set_opt (sbi->s_mount_opt, EXTENTS);
++                      break;
++              case Opt_extdebug:
++                      set_opt (sbi->s_mount_opt, EXTDEBUG);
++                      break;
+               default:
+                       printk (KERN_ERR
+                               "EXT3-fs: Unrecognized mount option \"%s\" "
+@@ -1589,6 +1601,8 @@
+       percpu_counter_mod(&sbi->s_dirs_counter,
+               ext3_count_dirs(sb));
++      ext3_ext_init(sb);
++ 
+       return 0;
+ failed_mount3:
+Index: linux-2.6.7/fs/ext3/ioctl.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/ioctl.c   2004-08-19 08:51:03.000000000 +0400
++++ linux-2.6.7/fs/ext3/ioctl.c        2004-08-19 08:53:49.000000000 +0400
+@@ -176,6 +176,10 @@
+                       return ret;
+               }
+ #endif
++      case EXT3_IOC_GET_EXTENTS:
++      case EXT3_IOC_GET_TREE_STATS:
++      case EXT3_IOC_GET_TREE_DEPTH:
++              return ext3_ext_ioctl(inode, filp, cmd, arg);
+       default:
+               return -ENOTTY;
+       }
+Index: linux-2.6.7/include/linux/ext3_fs.h
+===================================================================
+--- linux-2.6.7.orig/include/linux/ext3_fs.h   2004-08-19 08:51:04.000000000 +0400
++++ linux-2.6.7/include/linux/ext3_fs.h        2004-08-19 08:53:49.000000000 +0400
+@@ -186,6 +186,7 @@
+ #define EXT3_DIRSYNC_FL                       0x00010000 /* dirsync behaviour (directories only) */
+ #define EXT3_TOPDIR_FL                        0x00020000 /* Top of directory hierarchies*/
+ #define EXT3_RESERVED_FL              0x80000000 /* reserved for ext3 lib */
++#define EXT3_EXTENTS_FL                       0x00080000 /* Inode uses extents */
+ #define EXT3_FL_USER_VISIBLE          0x0003DFFF /* User visible flags */
+ #define EXT3_FL_USER_MODIFIABLE               0x000380FF /* User modifiable flags */
+@@ -209,6 +210,9 @@
+ #ifdef CONFIG_JBD_DEBUG
+ #define EXT3_IOC_WAIT_FOR_READONLY    _IOR('f', 99, long)
+ #endif
++#define       EXT3_IOC_GET_EXTENTS            _IOR('f', 5, long)
++#define       EXT3_IOC_GET_TREE_DEPTH         _IOR('f', 6, long)
++#define       EXT3_IOC_GET_TREE_STATS         _IOR('f', 7, long)
+ /*
+  * Structure of an inode on the disk
+@@ -329,6 +333,8 @@
+ #define EXT3_MOUNT_POSIX_ACL          0x8000  /* POSIX Access Control Lists */
+ #define EXT3_MOUNT_IOPEN              0x40000 /* Allow access via iopen */
+ #define EXT3_MOUNT_IOPEN_NOPRIV               0x80000 /* Make iopen world-readable */
++#define EXT3_MOUNT_EXTENTS            0x10000 /* Extents support */
++#define EXT3_MOUNT_EXTDEBUG           0x20000 /* Extents debug */
+ /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
+ #ifndef clear_opt
+@@ -724,6 +730,7 @@
+ /* inode.c */
++extern int ext3_block_truncate_page(handle_t *, struct page *, struct address_space *, loff_t);
+ extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
+ extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
+ extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
+@@ -796,6 +803,14 @@
+ extern struct inode_operations ext3_symlink_inode_operations;
+ extern struct inode_operations ext3_fast_symlink_inode_operations;
++/* extents.c */
++extern int ext3_ext_writepage_trans_blocks(struct inode *, int);
++extern int ext3_ext_get_block(handle_t *, struct inode *, long,
++                              struct buffer_head *, int, int);
++extern void ext3_ext_truncate(struct inode *, struct page *);
++extern void ext3_ext_init(struct super_block *);
++extern void ext3_ext_release(struct super_block *);
++extern void ext3_extents_initialize_blockmap(handle_t *, struct inode *);
+ #endif        /* __KERNEL__ */
+Index: linux-2.6.7/include/linux/ext3_extents.h
+===================================================================
+--- linux-2.6.7.orig/include/linux/ext3_extents.h      2003-01-30 13:24:37.000000000 +0300
++++ linux-2.6.7/include/linux/ext3_extents.h   2004-08-19 08:53:49.000000000 +0400
+@@ -0,0 +1,238 @@
++/*
++ * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public Licens
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-
++ */
++
++#ifndef _LINUX_EXT3_EXTENTS
++#define _LINUX_EXT3_EXTENTS
++
++/*
++ * with AGRESSIVE_TEST defined capacity of index/leaf blocks
++ * become very little, so index split, in-depth growing and
++ * other hard changes happens much more often
++ * this is for debug purposes only
++ */
++#define AGRESSIVE_TEST_
++
++/*
++ * if CHECK_BINSEARCH defined, then results of binary search
++ * will be checked by linear search
++ */
++#define CHECK_BINSEARCH_
++
++/*
++ * if EXT_DEBUG is defined you can use 'extdebug' mount option
++ * to get lots of info what's going on
++ */
++#define EXT_DEBUG
++#ifdef EXT_DEBUG
++#define ext_debug(tree,fmt,a...)                      \
++do {                                                  \
++      if (test_opt((tree)->inode->i_sb, EXTDEBUG))    \
++              printk(fmt, ##a);                       \
++} while (0);
++#else
++#define ext_debug(tree,fmt,a...)
++#endif
++
++/*
++ * if EXT_STATS is defined then stats numbers are collected
++ * these number will be displayed at umount time
++ */
++#define EXT_STATS_
++
++
++#define EXT3_ALLOC_NEEDED     3       /* block bitmap + group desc. + sb */
++
++/*
++ * ext3_inode has i_block array (total 60 bytes)
++ * first 4 bytes are used to store:
++ *  - tree depth (0 mean there is no tree yet. all extents in the inode)
++ *  - number of alive extents in the inode
++ */
++
++/*
++ * this is extent on-disk structure
++ * it's used at the bottom of the tree
++ */
++struct ext3_extent {
++      __u32   ee_block;       /* first logical block extent covers */
++      __u16   ee_len;         /* number of blocks covered by extent */
++      __u16   ee_start_hi;    /* high 16 bits of physical block */
++      __u32   ee_start;       /* low 32 bigs of physical block */
++};
++
++/*
++ * this is index on-disk structure
++ * it's used at all the levels, but the bottom
++ */
++struct ext3_extent_idx {
++      __u32   ei_block;       /* index covers logical blocks from 'block' */
++      __u32   ei_leaf;        /* pointer to the physical block of the next *
++                               * level. leaf or next index could bet here */
++      __u16   ei_leaf_hi;     /* high 16 bits of physical block */
++      __u16   ei_unused;
++};
++
++/*
++ * each block (leaves and indexes), even inode-stored has header
++ */
++struct ext3_extent_header {   
++      __u16   eh_magic;       /* probably will support different formats */   
++      __u16   eh_entries;     /* number of valid entries */
++      __u16   eh_max;         /* capacity of store in entries */
++      __u16   eh_depth;       /* has tree real underlaying blocks? */
++      __u32   eh_generation;  /* generation of the tree */
++};
++
++#define EXT3_EXT_MAGIC                0xf30a
++
++/*
++ * array of ext3_ext_path contains path to some extent
++ * creation/lookup routines use it for traversal/splitting/etc
++ * truncate uses it to simulate recursive walking
++ */
++struct ext3_ext_path {
++      __u32                           p_block;
++      __u16                           p_depth;
++      struct ext3_extent              *p_ext;
++      struct ext3_extent_idx          *p_idx;
++      struct ext3_extent_header       *p_hdr;
++      struct buffer_head              *p_bh;
++};
++
++/*
++ * structure for external API
++ */
++
++/*
++ * ext3_extents_tree is used to pass initial information
++ * to top-level extents API
++ */
++struct ext3_extents_helpers;
++struct ext3_extents_tree {
++      struct inode *inode;    /* inode which tree belongs to */
++      void *root;             /* ptr to data top of tree resides at */
++      void *buffer;           /* will be passed as arg to ^^ routines */
++      int buffer_len;
++      void *private;
++      struct ext3_extent *cex;/* last found extent */
++      struct ext3_extents_helpers *ops;
++};
++
++struct ext3_extents_helpers {
++      int (*get_write_access)(handle_t *h, void *buffer);
++      int (*mark_buffer_dirty)(handle_t *h, void *buffer);
++      int (*mergable)(struct ext3_extent *ex1, struct ext3_extent *ex2);
++      int (*remove_extent_credits)(struct ext3_extents_tree *,
++                                      struct ext3_extent *, unsigned long,
++                                      unsigned long);
++      int (*remove_extent)(struct ext3_extents_tree *,
++                              struct ext3_extent *, unsigned long,
++                              unsigned long);
++      int (*new_block)(handle_t *, struct ext3_extents_tree *,
++                              struct ext3_ext_path *, struct ext3_extent *,
++                              int *);
++};
++
++/*
++ * to be called by ext3_ext_walk_space()
++ * negative retcode - error
++ * positive retcode - signal for ext3_ext_walk_space(), see below
++ * callback must return valid extent (passed or newly created)
++ */
++typedef int (*ext_prepare_callback)(struct ext3_extents_tree *,
++                                      struct ext3_ext_path *,
++                                      struct ext3_extent *, int);
++
++#define EXT_CONTINUE  0
++#define EXT_BREAK     1
++#define EXT_REPEAT    2
++
++
++#define EXT_MAX_BLOCK 0xffffffff
++#define EXT_CACHE_MARK        0xffff
++
++
++#define EXT_FIRST_EXTENT(__hdr__) \
++      ((struct ext3_extent *) (((char *) (__hdr__)) +         \
++                               sizeof(struct ext3_extent_header)))
++#define EXT_FIRST_INDEX(__hdr__) \
++      ((struct ext3_extent_idx *) (((char *) (__hdr__)) +     \
++                                   sizeof(struct ext3_extent_header)))
++#define EXT_HAS_FREE_INDEX(__path__) \
++      ((__path__)->p_hdr->eh_entries < (__path__)->p_hdr->eh_max)
++#define EXT_LAST_EXTENT(__hdr__) \
++      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_entries - 1)
++#define EXT_LAST_INDEX(__hdr__) \
++      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_entries - 1)
++#define EXT_MAX_EXTENT(__hdr__) \
++      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_max - 1)
++#define EXT_MAX_INDEX(__hdr__) \
++      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_max - 1)
++
++#define EXT_ROOT_HDR(tree) \
++      ((struct ext3_extent_header *) (tree)->root)
++#define EXT_BLOCK_HDR(bh) \
++      ((struct ext3_extent_header *) (bh)->b_data)
++#define EXT_DEPTH(_t_)        \
++      (((struct ext3_extent_header *)((_t_)->root))->eh_depth)
++#define EXT_GENERATION(_t_)   \
++      (((struct ext3_extent_header *)((_t_)->root))->eh_generation)
++
++
++#define EXT_ASSERT(__x__) if (!(__x__)) BUG();
++
++
++/*
++ * this structure is used to gather extents from the tree via ioctl
++ */
++struct ext3_extent_buf {
++      unsigned long start;
++      int buflen;
++      void *buffer;
++      void *cur;
++      int err;
++};
++
++/*
++ * this structure is used to collect stats info about the tree
++ */
++struct ext3_extent_tree_stats {
++      int depth;
++      int extents_num;
++      int leaf_num;
++};
++
++extern int ext3_extent_tree_init(handle_t *, struct ext3_extents_tree *);
++extern int ext3_ext_calc_credits_for_insert(struct ext3_extents_tree *, struct ext3_ext_path *);
++extern int ext3_ext_insert_extent(handle_t *, struct ext3_extents_tree *, struct ext3_ext_path *, struct ext3_extent *);
++extern int ext3_ext_walk_space(struct ext3_extents_tree *, unsigned long, unsigned long, ext_prepare_callback);
++extern int ext3_ext_remove_space(struct ext3_extents_tree *, unsigned long, unsigned long);
++extern struct ext3_ext_path * ext3_ext_find_extent(struct ext3_extents_tree *, int, struct ext3_ext_path *);
++extern void ext3_init_tree_desc(struct ext3_extents_tree *, struct inode *);
++extern int ext3_ext_calc_blockmap_metadata(struct inode *, int);
++
++static inline void
++ext3_ext_invalidate_cache(struct ext3_extents_tree *tree)
++{
++      if (tree->cex)
++              tree->cex->ee_len = 0;
++}
++
++
++#endif /* _LINUX_EXT3_EXTENTS */
++
+Index: linux-2.6.7/include/linux/ext3_fs_i.h
+===================================================================
+--- linux-2.6.7.orig/include/linux/ext3_fs_i.h 2004-08-19 08:51:04.000000000 +0400
++++ linux-2.6.7/include/linux/ext3_fs_i.h      2004-08-19 08:53:49.000000000 +0400
+@@ -111,6 +111,8 @@
+        */
+       struct semaphore truncate_sem;
+       struct inode vfs_inode;
++
++      __u32 i_cached_extent[3];
+ };
+ #endif        /* _LINUX_EXT3_FS_I */
+
+%diffstat
+ fs/ext3/Makefile             |    2 
+ fs/ext3/extents.c            | 2306 +++++++++++++++++++++++++++++++++++++++++++
+ fs/ext3/ialloc.c             |    4 
+ fs/ext3/inode.c              |   29 
+ fs/ext3/ioctl.c              |    4 
+ fs/ext3/super.c              |   16 
+ include/linux/ext3_extents.h |  238 ++++
+ include/linux/ext3_fs.h      |   15 
+ include/linux/ext3_fs_i.h    |    2 
+ 9 files changed, 2608 insertions(+), 8 deletions(-)
+
index 28e3587..acf97dd 100644 (file)
@@ -3,7 +3,7 @@ Index: linux-stage/include/linux/ext3_fs.h
 --- linux-stage.orig/include/linux/ext3_fs.h   2004-04-02 16:43:37.000000000 -0500
 +++ linux-stage/include/linux/ext3_fs.h        2004-04-02 16:43:37.000000000 -0500
 @@ -331,12 +331,13 @@
- #define EXT3_MOUNT_IOPEN_NOPRIV              0x20000  /* Make iopen world-readable */
+ #define EXT3_MOUNT_IOPEN_NOPRIV               0x80000 /* Make iopen world-readable */
  
  /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
 -#ifndef _LINUX_EXT2_FS_H
diff --git a/ldiskfs/kernel_patches/patches/ext3-nlinks-2.6.7.patch b/ldiskfs/kernel_patches/patches/ext3-nlinks-2.6.7.patch
new file mode 100644 (file)
index 0000000..b20be23
--- /dev/null
@@ -0,0 +1,170 @@
+Index: linux-2.6.7/fs/ext3/namei.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/namei.c   2004-06-15 23:19:36.000000000 -0600
++++ linux-2.6.7/fs/ext3/namei.c        2004-08-20 17:48:54.000000000 -0600
+@@ -1596,11 +1596,17 @@ static int ext3_delete_entry (handle_t *
+ static inline void ext3_inc_count(handle_t *handle, struct inode *inode)
+ {
+       inode->i_nlink++;
++      if (is_dx(inode) && inode->i_nlink > 1) {
++              /* limit is 16-bit i_links_count */
++              if (inode->i_nlink >= EXT3_LINK_MAX || inode->i_nlink == 2)
++                      inode->i_nlink = 1;
++        }
+ }
+ static inline void ext3_dec_count(handle_t *handle, struct inode *inode)
+ {
+-      inode->i_nlink--;
++      if (!S_ISDIR(inode->i_mode) || inode->i_nlink > 2)
++              inode->i_nlink--;
+ }
+ static int ext3_add_nondir(handle_t *handle,
+@@ -1693,7 +1698,7 @@ static int ext3_mkdir(struct inode * dir
+       struct ext3_dir_entry_2 * de;
+       int err;
+-      if (dir->i_nlink >= EXT3_LINK_MAX)
++      if (EXT3_DIR_LINK_MAXED(dir))
+               return -EMLINK;
+       handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
+@@ -1715,7 +1720,7 @@ static int ext3_mkdir(struct inode * dir
+       inode->i_size = EXT3_I(inode)->i_disksize = inode->i_sb->s_blocksize;
+       dir_block = ext3_bread (handle, inode, 0, 1, &err);
+       if (!dir_block) {
+-              inode->i_nlink--; /* is this nlink == 0? */
++              ext3_dec_count(handle, inode); /* is this nlink == 0? */
+               ext3_mark_inode_dirty(handle, inode);
+               iput (inode);
+               goto out_stop;
+@@ -1747,7 +1752,7 @@ static int ext3_mkdir(struct inode * dir
+               iput (inode);
+               goto out_stop;
+       }
+-      dir->i_nlink++;
++      ext3_inc_count(handle, dir);
+       ext3_update_dx_flag(dir);
+       ext3_mark_inode_dirty(handle, dir);
+       d_instantiate(dentry, inode);
+@@ -2010,10 +2015,10 @@ static int ext3_rmdir (struct inode * di
+       retval = ext3_delete_entry(handle, dir, de, bh);
+       if (retval)
+               goto end_rmdir;
+-      if (inode->i_nlink != 2)
+-              ext3_warning (inode->i_sb, "ext3_rmdir",
+-                            "empty directory has nlink!=2 (%d)",
+-                            inode->i_nlink);
++      if (!EXT3_DIR_LINK_EMPTY(inode))
++              ext3_warning(inode->i_sb, "ext3_rmdir",
++                           "empty directory has too many links (%d)",
++                           inode->i_nlink);
+       inode->i_version++;
+       inode->i_nlink = 0;
+       /* There's no need to set i_disksize: the fact that i_nlink is
+@@ -2023,7 +2028,7 @@ static int ext3_rmdir (struct inode * di
+       ext3_orphan_add(handle, inode);
+       inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
+       ext3_mark_inode_dirty(handle, inode);
+-      dir->i_nlink--;
++      ext3_dec_count(handle, dir);
+       ext3_update_dx_flag(dir);
+       ext3_mark_inode_dirty(handle, dir);
+@@ -2074,7 +2079,7 @@ static int ext3_unlink(struct inode * di
+       dir->i_ctime = dir->i_mtime = CURRENT_TIME;
+       ext3_update_dx_flag(dir);
+       ext3_mark_inode_dirty(handle, dir);
+-      inode->i_nlink--;
++      ext3_dec_count(handle, inode);
+       if (!inode->i_nlink)
+               ext3_orphan_add(handle, inode);
+       inode->i_ctime = dir->i_ctime;
+@@ -2146,7 +2151,7 @@ static int ext3_link (struct dentry * ol
+       struct inode *inode = old_dentry->d_inode;
+       int err;
+-      if (inode->i_nlink >= EXT3_LINK_MAX)
++      if (EXT3_DIR_LINK_MAXED(inode))
+               return -EMLINK;
+       handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
+@@ -2230,8 +2235,8 @@ static int ext3_rename (struct inode * o
+               if (le32_to_cpu(PARENT_INO(dir_bh->b_data)) != old_dir->i_ino)
+                       goto end_rename;
+               retval = -EMLINK;
+-              if (!new_inode && new_dir!=old_dir &&
+-                              new_dir->i_nlink >= EXT3_LINK_MAX)
++              if (!new_inode && new_dir != old_dir &&
++                  EXT3_DIR_LINK_MAXED(new_dir))
+                       goto end_rename;
+       }
+       if (!new_bh) {
+@@ -2288,7 +2293,7 @@ static int ext3_rename (struct inode * o
+       }
+       if (new_inode) {
+-              new_inode->i_nlink--;
++              ext3_dec_count(handle, new_inode);
+               new_inode->i_ctime = CURRENT_TIME;
+       }
+       old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME;
+@@ -2299,11 +2304,11 @@ static int ext3_rename (struct inode * o
+               PARENT_INO(dir_bh->b_data) = le32_to_cpu(new_dir->i_ino);
+               BUFFER_TRACE(dir_bh, "call ext3_journal_dirty_metadata");
+               ext3_journal_dirty_metadata(handle, dir_bh);
+-              old_dir->i_nlink--;
++              ext3_dec_count(handle, old_dir);
+               if (new_inode) {
+-                      new_inode->i_nlink--;
++                      ext3_dec_count(handle, new_inode);
+               } else {
+-                      new_dir->i_nlink++;
++                      ext3_inc_count(handle, new_dir);
+                       ext3_update_dx_flag(new_dir);
+                       ext3_mark_inode_dirty(handle, new_dir);
+               }
+Index: linux-2.6.7/include/linux/ext3_fs.h
+===================================================================
+--- linux-2.6.7.orig/include/linux/ext3_fs.h   2004-06-15 23:19:36.000000000 -0600
++++ linux-2.6.7/include/linux/ext3_fs.h        2004-08-20 17:41:27.000000000 -0600
+@@ -41,7 +41,7 @@ struct statfs;
+ /*
+  * Always enable hashed directories
+  */
+-#define CONFIG_EXT3_INDEX
++#define CONFIG_EXT3_INDEX 1
+ /*
+  * Debug code
+@@ -79,7 +81,7 @@
+ /*
+  * Maximal count of links to a file
+  */
+-#define EXT3_LINK_MAX         32000
++#define EXT3_LINK_MAX         65000
+ /*
+  * Macro-instructions used to manage several block sizes
+@@ -595,14 +595,15 @@ struct ext3_dir_entry_2 {
+  */
+ #ifdef CONFIG_EXT3_INDEX
+-  #define is_dx(dir) (EXT3_HAS_COMPAT_FEATURE(dir->i_sb, \
+-                                            EXT3_FEATURE_COMPAT_DIR_INDEX) && \
++#define is_dx(dir) (EXT3_HAS_COMPAT_FEATURE(dir->i_sb, \
++                                          EXT3_FEATURE_COMPAT_DIR_INDEX) && \
+                     (EXT3_I(dir)->i_flags & EXT3_INDEX_FL))
+-#define EXT3_DIR_LINK_MAX(dir) (!is_dx(dir) && (dir)->i_nlink >= EXT3_LINK_MAX)
+-#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || (dir)->i_nlink == 1)
++#define EXT3_DIR_LINK_MAXED(dir) (!is_dx(dir) && (dir)->i_nlink >=EXT3_LINK_MAX)
++#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || \
++                                (is_dx(dir) && (dir)->i_nlink == 1))
+ #else
+   #define is_dx(dir) 0
+-#define EXT3_DIR_LINK_MAX(dir) ((dir)->i_nlink >= EXT3_LINK_MAX)
++#define EXT3_DIR_LINK_MAXED(dir) ((dir)->i_nlink >= EXT3_LINK_MAX)
+ #define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2)
+ #endif
index c51b24f..e5d4429 100644 (file)
@@ -468,8 +468,8 @@ Index: linux-stage/include/linux/ext3_fs.h
  #define EXT3_MOUNT_XATTR_USER         0x4000  /* Extended user attributes */
  #define EXT3_MOUNT_POSIX_ACL          0x8000  /* POSIX Access Control Lists */
  #define EXT3_MOUNT_BARRIER            0x10000 /* Use block barriers */
-+#define EXT3_MOUNT_IOPEN                0x20000 /* Allow access via iopen */
-+#define EXT3_MOUNT_IOPEN_NOPRIV         0x40000 /* Make iopen world-readable */
++#define EXT3_MOUNT_IOPEN              0x40000 /* Allow access via iopen */
++#define EXT3_MOUNT_IOPEN_NOPRIV               0x80000 /* Make iopen world-readable */
  
  /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
  #ifndef _LINUX_EXT2_FS_H
index cff99dd..fa7c715 100644 (file)
@@ -7,3 +7,7 @@ ext3-init-generation-2.6-suse.patch
 ext3-ea-in-inode-2.6-suse.patch
 export-ext3-2.6-suse.patch
 ext3-include-fixes-2.6-suse.patch
+ext3-super-ntohl.patch
+ext3-extents-2.6.5.patch 
+ext3-mballoc2-2.6.7.patch 
+ext3-nlinks-2.6.7.patch
diff --git a/lustre/kernel_patches/patches/add_page_private-2.4.19-pre1.patch b/lustre/kernel_patches/patches/add_page_private-2.4.19-pre1.patch
deleted file mode 100644 (file)
index a7e087d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
- include/linux/mm.h |    1 +
- 1 files changed, 1 insertion(+)
-
-Index: linux-2.4.19-pre1/include/linux/mm.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/mm.h  2003-11-20 19:24:06.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/mm.h       2003-11-21 02:00:13.000000000 +0300
-@@ -162,6 +162,7 @@
-       wait_queue_head_t wait;         /* Page locked?  Stand in line... */
-       struct page **pprev_hash;       /* Complement to *next_hash. */
-       struct buffer_head * buffers;   /* Buffer maps us to a disk block. */
-+      unsigned long private;
-       void *virtual;                  /* Kernel virtual address (NULL if
-                                          not kmapped, ie. highmem) */
-       struct zone_struct *zone;       /* Memory zone we are in. */
diff --git a/lustre/kernel_patches/patches/bproc-patch-2.4.20 b/lustre/kernel_patches/patches/bproc-patch-2.4.20
deleted file mode 100644 (file)
index 0144b9f..0000000
+++ /dev/null
@@ -1,1824 +0,0 @@
-Index: linux/fs/exec.c
-===================================================================
---- linux.orig/fs/exec.c       2003-09-03 17:52:00.000000000 -0400
-+++ linux/fs/exec.c    2003-09-03 17:52:04.000000000 -0400
-@@ -38,6 +38,7 @@
- #include <linux/utsname.h>
- #define __NO_VERSION__
- #include <linux/module.h>
-+#include <linux/bproc.h>
- #include <asm/uaccess.h>
- #include <asm/pgalloc.h>
-@@ -953,9 +954,11 @@
-       xa_call_actions (XA_EXEC, XA_KOE, NULL);
-       retval = search_binary_handler(&bprm,regs);
--      if (retval >= 0)
-+      if (retval >= 0) {
-               /* execve success */
-+              bproc_hook_im(do_execve,());
-               return retval;
-+      }
- out:
-       /* Something went wrong, return the inode and free the argument pages*/
-Index: linux/fs/binfmt_script.c
-===================================================================
---- linux.orig/fs/binfmt_script.c      2002-08-02 20:39:45.000000000 -0400
-+++ linux/fs/binfmt_script.c   2003-09-03 17:52:04.000000000 -0400
-@@ -13,6 +13,7 @@
- #include <linux/init.h>
- #include <linux/file.h>
- #include <linux/smp_lock.h>
-+#include <linux/bproc.h>
- static int load_script(struct linux_binprm *bprm,struct pt_regs *regs)
- {
-@@ -67,7 +68,7 @@
-        * user environment and arguments are stored.
-        */
-       remove_arg_zero(bprm);
--      retval = copy_strings_kernel(1, &bprm->filename, bprm);
-+      retval = copy_strings_kernel(1,bproc_hook_v(&bprm->filename,load_script,(&bprm->filename)), bprm);
-       if (retval < 0) return retval; 
-       bprm->argc++;
-       if (i_arg) {
-Index: linux/fs/binfmt_elf.c
-===================================================================
---- linux.orig/fs/binfmt_elf.c 2002-08-02 20:39:45.000000000 -0400
-+++ linux/fs/binfmt_elf.c      2003-09-03 17:52:04.000000000 -0400
-@@ -73,7 +73,7 @@
- #define ELF_PAGEOFFSET(_v) ((_v) & (ELF_MIN_ALIGN-1))
- #define ELF_PAGEALIGN(_v) (((_v) + ELF_MIN_ALIGN - 1) & ~(ELF_MIN_ALIGN - 1))
--static struct linux_binfmt elf_format = {
-+struct linux_binfmt elf_format = {
-       NULL, THIS_MODULE, load_elf_binary, load_elf_library, elf_core_dump, ELF_EXEC_PAGESIZE
- };
-Index: linux/fs/proc/base.c
-===================================================================
---- linux.orig/fs/proc/base.c  2003-09-03 17:52:00.000000000 -0400
-+++ linux/fs/proc/base.c       2003-09-03 17:52:04.000000000 -0400
-@@ -25,6 +25,7 @@
- #include <linux/string.h>
- #include <linux/seq_file.h>
- #include <linux/namespace.h>
-+#include <linux/bproc.h>
- /*
-  * For hysterical raisins we keep the same inumbers as in the old procfs.
-@@ -304,6 +305,7 @@
-       if (!(page = __get_free_page(GFP_KERNEL)))
-               return -ENOMEM;
-+      if (bproc_isghost(task)) bproc_hook(refresh_status,(task));
-       length = inode->u.proc_i.op.proc_read(task, (char*)page);
-       if (length < 0) {
-@@ -976,14 +978,14 @@
- static int proc_self_readlink(struct dentry *dentry, char *buffer, int buflen)
- {
-       char tmp[30];
--      sprintf(tmp, "%d", current->pid);
-+      sprintf(tmp, "%d", bproc_hook_imv(current->pid,proc3,()));
-       return vfs_readlink(dentry,buffer,buflen,tmp);
- }
- static int proc_self_follow_link(struct dentry *dentry, struct nameidata *nd)
- {
-       char tmp[30];
--      sprintf(tmp, "%d", current->pid);
-+      sprintf(tmp, "%d", bproc_hook_imv(current->pid,proc3,()));
-       return vfs_follow_link(nd,tmp);
- }     
-@@ -1031,6 +1033,7 @@
-                       goto out;
-       }
-+      pid = bproc_hook_imv(pid,proc2,(pid));
-       read_lock(&tasklist_lock);
-       task = find_task_by_pid(pid);
-       if (task)
-@@ -1082,7 +1085,7 @@
-       index--;
-       read_lock(&tasklist_lock);
-       for_each_task(p) {
--              int pid = p->pid;
-+              int pid = bproc_hook_imv(p->pid,proc1,(p));
-               if (!pid)
-                       continue;
-               if (--index >= 0)
-Index: linux/fs/proc/array.c
-===================================================================
---- linux.orig/fs/proc/array.c 2002-08-02 20:39:45.000000000 -0400
-+++ linux/fs/proc/array.c      2003-09-03 17:52:04.000000000 -0400
-@@ -70,6 +70,7 @@
- #include <linux/smp.h>
- #include <linux/signal.h>
- #include <linux/highmem.h>
-+#include <linux/bproc.h>
- #include <asm/uaccess.h>
- #include <asm/pgtable.h>
-@@ -130,7 +131,8 @@
- static inline const char * get_task_state(struct task_struct *tsk)
- {
--      unsigned int state = tsk->state & (TASK_RUNNING |
-+      unsigned int state = (bproc_hook_v(tsk->state,get_task_state,(tsk)))
-+                                      & (TASK_RUNNING |
-                                          TASK_INTERRUPTIBLE |
-                                          TASK_UNINTERRUPTIBLE |
-                                          TASK_ZOMBIE |
-@@ -158,7 +160,8 @@
-               "Uid:\t%d\t%d\t%d\t%d\n"
-               "Gid:\t%d\t%d\t%d\t%d\n",
-               get_task_state(p), p->tgid,
--              p->pid, p->pid ? p->p_opptr->pid : 0, 0,
-+              bproc_hook_imv(p->pid, proc_pid, (p)),
-+              bproc_hook_imv(p->p_opptr->pid, proc_ppid, (p)), 0,
-               p->uid, p->euid, p->suid, p->fsuid,
-               p->gid, p->egid, p->sgid, p->fsgid);
-       read_unlock(&tasklist_lock);    
-@@ -305,7 +308,7 @@
-       sigset_t sigign, sigcatch;
-       char state;
-       int res;
--      pid_t ppid;
-+      pid_t pid, ppid;
-       struct mm_struct *mm;
-       state = *get_task_state(task);
-@@ -343,12 +346,14 @@
-       nice = task->nice;
-       read_lock(&tasklist_lock);
--      ppid = task->pid ? task->p_opptr->pid : 0;
-+      pid  = bproc_hook_imv(task->pid, proc_pid, (task)),
-+      ppid = bproc_hook_imv(task->pid ? task->p_opptr->pid : 0,
-+                            proc_ppid, (task));
-       read_unlock(&tasklist_lock);
-       res = sprintf(buffer,"%d (%s) %c %d %d %d %d %d %lu %lu \
- %lu %lu %lu %lu %lu %ld %ld %ld %ld %ld %ld %lu %lu %ld %lu %lu %lu %lu %lu \
- %lu %lu %lu %lu %lu %lu %lu %lu %d %d\n",
--              task->pid,
-+              pid,
-               task->comm,
-               state,
-               ppid,
-Index: linux/kernel/timer.c
-===================================================================
---- linux.orig/kernel/timer.c  2003-09-03 17:51:01.000000000 -0400
-+++ linux/kernel/timer.c       2003-09-03 17:52:04.000000000 -0400
-@@ -22,6 +22,7 @@
- #include <linux/smp_lock.h>
- #include <linux/interrupt.h>
- #include <linux/kernel_stat.h>
-+#include <linux/bproc.h>
- #include <asm/uaccess.h>
-@@ -754,7 +755,7 @@
-  */
- asmlinkage long sys_getpid(void)
- {
--      return current->tgid;
-+      return bproc_hook_imv(current->tgid, sys_getpid, ());
- }
- /*
-@@ -788,7 +789,7 @@
-       parent = me->p_opptr;
-       for (;;) {
--              pid = parent->pid;
-+              pid = bproc_hook_imv(parent->pid,sys_getppid,(parent));
- #if CONFIG_SMP
- {
-               struct task_struct *old = parent;
-Index: linux/kernel/signal.c
-===================================================================
---- linux.orig/kernel/signal.c 2003-09-03 17:51:01.000000000 -0400
-+++ linux/kernel/signal.c      2003-09-03 17:52:04.000000000 -0400
-@@ -16,6 +16,8 @@
- #include <asm/uaccess.h>
-+#include <linux/bproc.h>
-+
- /*
-  * SLAB caches for signal bits.
-  */
-@@ -548,6 +550,9 @@
-       if (sig < SIGRTMIN && sigismember(&t->pending.signal, sig))
-               goto out;
-+      if (bproc_hook_v(0, send_sig_info, (sig, info, t)))
-+              goto out;
-+
-       ret = deliver_signal(sig, info, t);
- out:
-       spin_unlock_irqrestore(&t->sigmask_lock, flags);
-@@ -590,6 +595,9 @@
- kill_pg_info(int sig, struct siginfo *info, pid_t pgrp)
- {
-       int retval = -EINVAL;
-+
-+      if (bproc_hook_imv(0,kill_pg_info, (sig, info, &pgrp, &retval)) == 1)
-+              return retval;
-       if (pgrp > 0) {
-               struct task_struct *p;
-@@ -617,6 +625,7 @@
- kill_sl_info(int sig, struct siginfo *info, pid_t sess)
- {
-       int retval = -EINVAL;
-+      /* XXX bproc: Need ways to deal with session leaders...*/
-       if (sess > 0) {
-               struct task_struct *p;
-@@ -640,6 +649,9 @@
-       int error;
-       struct task_struct *p;
-+      if (bproc_hook_imv(0, kill_proc_info,(sig, info, &pid, &error)) == 1)
-+              return error;
-+
-       read_lock(&tasklist_lock);
-       p = find_task_by_pid(pid);
-       error = -ESRCH;
-@@ -684,6 +696,7 @@
-               read_unlock(&tasklist_lock);
-               return count ? retval : -ESRCH;
-       } else if (pid < 0) {
-+              /* XXX pid masq - do PG stuff. */
-               return kill_pg_info(sig, info, -pid);
-       } else {
-               return kill_proc_info(sig, info, pid);
-@@ -815,6 +828,7 @@
- EXPORT_SYMBOL(recalc_sigpending);
- EXPORT_SYMBOL(send_sig);
- EXPORT_SYMBOL(send_sig_info);
-+EXPORT_SYMBOL(kill_something_info);
- EXPORT_SYMBOL(block_all_signals);
- EXPORT_SYMBOL(unblock_all_signals);
-Index: linux/kernel/sched.c
-===================================================================
---- linux.orig/kernel/sched.c  2003-09-03 17:51:05.000000000 -0400
-+++ linux/kernel/sched.c       2003-09-03 17:52:04.000000000 -0400
-@@ -30,6 +30,7 @@
- #include <linux/dump.h>
- #include <linux/prefetch.h>
- #include <linux/compiler.h>
-+#include <linux/bproc.h>
- #include <asm/uaccess.h>
- #include <asm/mmu_context.h>
-@@ -370,6 +371,8 @@
- inline int wake_up_process(struct task_struct * p)
- {
-+      if (p->state == TASK_STOPPED && bproc_ismasq(p))
-+              bproc_hook(wake_up_process, (p));
-       return try_to_wake_up(p, 0);
- }
-Index: linux/kernel/ksyms.c
-===================================================================
---- linux.orig/kernel/ksyms.c  2003-09-03 17:52:02.000000000 -0400
-+++ linux/kernel/ksyms.c       2003-09-03 17:52:04.000000000 -0400
-@@ -68,6 +68,10 @@
- extern void set_device_ro(kdev_t dev,int flag);
- extern void *sys_call_table;
-+extern struct task_struct *child_reaper;
-+#if defined(CONFIG_BINFMT_ELF)
-+extern struct linux_binfmt elf_format;
-+#endif
- extern struct timezone sys_tz;
- extern int request_dma(unsigned int dmanr, char * deviceID);
-@@ -104,9 +108,17 @@
- EXPORT_SYMBOL(do_munmap);
- EXPORT_SYMBOL(do_brk);
- EXPORT_SYMBOL(exit_mm);
-+EXPORT_SYMBOL(do_exit);
- EXPORT_SYMBOL(exit_files);
- EXPORT_SYMBOL(exit_fs);
- EXPORT_SYMBOL(exit_sighand);
-+EXPORT_SYMBOL(is_orphaned_pgrp);
-+EXPORT_SYMBOL(child_reaper);
-+#if defined(CONFIG_BINFMT_ELF)
-+EXPORT_SYMBOL(elf_format);
-+#endif
-+EXPORT_SYMBOL(alloc_uid);
-+EXPORT_SYMBOL(free_uid);
- EXPORT_SYMBOL(copy_fs_struct);
- EXPORT_SYMBOL_GPL(make_pages_present);
-@@ -584,6 +596,7 @@
- EXPORT_SYMBOL(read_ahead);
- EXPORT_SYMBOL(get_hash_table);
- EXPORT_SYMBOL(new_inode);
-+EXPORT_SYMBOL(get_empty_inode);
- EXPORT_SYMBOL(insert_inode_hash);
- EXPORT_SYMBOL(remove_inode_hash);
- EXPORT_SYMBOL(buffer_insert_inode_queue);
-Index: linux/kernel/fork.c
-===================================================================
---- linux.orig/kernel/fork.c   2003-09-03 17:52:00.000000000 -0400
-+++ linux/kernel/fork.c        2003-09-03 17:52:04.000000000 -0400
-@@ -23,6 +23,8 @@
- #include <linux/personality.h>
- #include <linux/compiler.h>
-+#include <linux/bproc.h>
-+
- #include <asm/pgtable.h>
- #include <asm/pgalloc.h>
- #include <asm/uaccess.h>
-@@ -413,6 +415,7 @@
- static inline int copy_fs(unsigned long clone_flags, struct task_struct * tsk)
- {
-+      if (!current->fs) return 0;
-       if (clone_flags & CLONE_FS) {
-               atomic_inc(&current->fs->count);
-               return 0;
-@@ -781,7 +784,8 @@
-        *
-        * Let it rip!
-        */
--      retval = p->pid;
-+      if ((retval = bproc_hook_v(p->pid, do_fork, (p, clone_flags))) < 0)
-+              goto bad_fork_cleanup_mm;
-       p->tgid = retval;
-       INIT_LIST_HEAD(&p->thread_group);
-@@ -805,6 +809,7 @@
-       SET_LINKS(p);
-       hash_pid(p);
-       nr_threads++;
-+      bproc_hook(do_fork_2, (p));
-       write_unlock_irq(&tasklist_lock);
-       if (p->ptrace & PT_PTRACED)
-@@ -816,6 +821,7 @@
-               wait_for_completion(&vfork);
- fork_out:
-+      bproc_clear_kcall();
-       return retval;
- bad_fork_cleanup_namespace:
-Index: linux/kernel/exit.c
-===================================================================
---- linux.orig/kernel/exit.c   2003-09-03 17:52:00.000000000 -0400
-+++ linux/kernel/exit.c        2003-09-03 17:52:04.000000000 -0400
-@@ -22,6 +22,8 @@
- #include <asm/pgtable.h>
- #include <asm/mmu_context.h>
-+#include <linux/bproc.h>
-+
- extern void sem_exit (void);
- extern struct task_struct *child_reaper;
-@@ -47,6 +49,7 @@
-               }
-               task_unlock(p);
- #endif
-+              bproc_hook(release,(p));
-               atomic_dec(&p->user->processes);
-               free_uid(p->user);
-               unhash_process(p);
-@@ -130,7 +133,8 @@
- int is_orphaned_pgrp(int pgrp)
- {
--      return will_become_orphaned_pgrp(pgrp, 0);
-+      return bproc_hook_imv(will_become_orphaned_pgrp(pgrp, 0),
-+                            is_orphaned_pgrp,(pgrp));
- }
- static inline int has_stopped_jobs(int pgrp)
-@@ -170,7 +174,7 @@
-                       p->self_exec_id++;
-                       /* Make sure we're not reparenting to ourselves */
--                      p->p_opptr = child_reaper;
-+                      p->p_opptr = bproc_hook_v(child_reaper, child_reaper, (p));
-                       if (p->pdeath_signal) send_sig(p->pdeath_signal, p, 0);
-               }
-@@ -450,6 +454,7 @@
- #endif
-       __exit_mm(tsk);
-+      bproc_hook(do_exit, (tsk,code));
-       lock_kernel();
-       sem_exit();
-       __exit_files(tsk);
-@@ -501,6 +506,7 @@
- asmlinkage long sys_wait4(pid_t pid,unsigned int * stat_addr, int options, struct rusage * ru)
- {
-       int flag, retval;
-+      pid_t orig_pid = pid;
-       DECLARE_WAITQUEUE(wait, current);
-       struct task_struct *tsk;
-@@ -512,6 +518,9 @@
-       flag = 0;
-       current->state = TASK_INTERRUPTIBLE;
-       read_lock(&tasklist_lock);
-+      pid = orig_pid;
-+      if (bproc_hook_imv(0, sys_wait4_1, (&pid, stat_addr, options, ru, &retval)))
-+              goto end_wait4;         /* handler will unlock tasklist_lock */
-       tsk = current;
-       do {
-               struct task_struct *p;
-@@ -535,7 +544,7 @@
-                           && !(options & __WALL))
-                               continue;
-                       flag = 1;
--                      switch (p->state) {
-+                      switch (bproc_hook_v(p->state,sys_wait4_2,(p))) {
-                       case TASK_STOPPED:
-                               if (!p->exit_code)
-                                       continue;
-@@ -547,7 +556,7 @@
-                                       retval = put_user((p->exit_code << 8) | 0x7f, stat_addr);
-                               if (!retval) {
-                                       p->exit_code = 0;
--                                      retval = p->pid;
-+                                      retval = bproc_hook_imv(p->pid, sys_wait4_3, (p));
-                               }
-                               goto end_wait4;
-                       case TASK_ZOMBIE:
-@@ -559,7 +568,7 @@
-                                       retval = put_user(p->exit_code, stat_addr);
-                               if (retval)
-                                       goto end_wait4; 
--                              retval = p->pid;
-+                              retval = bproc_hook_imv(p->pid, sys_wait4_3, (p));
-                               if (p->p_opptr != p->p_pptr) {
-                                       write_lock_irq(&tasklist_lock);
-                                       REMOVE_LINKS(p);
-@@ -569,6 +578,7 @@
-                                       write_unlock_irq(&tasklist_lock);
-                               } else
-                                       release_task(p);
-+                              bproc_hook_im(sys_wait4_4,(retval, options));
-                               goto end_wait4;
-                       default:
-                               continue;
-@@ -593,6 +603,7 @@
- end_wait4:
-       current->state = TASK_RUNNING;
-       remove_wait_queue(&current->wait_chldexit,&wait);
-+      bproc_clear_kcall();
-       return retval;
- }
-Index: linux/kernel/sys.c
-===================================================================
---- linux.orig/kernel/sys.c    2003-09-03 17:51:05.000000000 -0400
-+++ linux/kernel/sys.c 2003-09-03 17:52:04.000000000 -0400
-@@ -21,6 +21,8 @@
- #include <asm/uaccess.h>
- #include <asm/io.h>
-+#include <linux/bproc.h>
-+
- /*
-  * this is where the system-wide overflow UID and GID are defined, for
-  * architectures that now have 32-bit UID/GID but didn't in the past
-@@ -448,6 +450,7 @@
-       current->fsgid = new_egid;
-       current->egid = new_egid;
-       current->gid = new_rgid;
-+      bproc_hook_im(set_creds, ());
-       return 0;
- }
-@@ -480,6 +483,7 @@
-       }
-       else
-               return -EPERM;
-+      bproc_hook_im(set_creds, ());
-       return 0;
- }
-   
-@@ -614,6 +618,7 @@
-               cap_emulate_setxuid(old_ruid, old_euid, old_suid);
-       }
-+      bproc_hook_im(set_creds, ());
-       return 0;
- }
-@@ -658,6 +663,8 @@
-               cap_emulate_setxuid(old_ruid, old_euid, old_suid);
-       }
-+      bproc_hook_im(set_creds, ());
-+      bproc_hook_im(set_creds, ());
-       return 0;
- }
-@@ -746,6 +753,7 @@
-               current->gid = rgid;
-       if (sgid != (gid_t) -1)
-               current->sgid = sgid;
-+      bproc_hook_im(set_creds, ());
-       return 0;
- }
-@@ -803,6 +811,7 @@
-               }
-       }
-+      if (current->fsuid != old_fsuid) bproc_hook_im(set_creds, ());
-       return old_fsuid;
- }
-@@ -825,6 +834,8 @@
-               }
-               current->fsgid = gid;
-       }
-+
-+      if (current->fsgid != old_fsgid) bproc_hook_im(set_creds, ());
-       return old_fsgid;
- }
-@@ -860,6 +871,8 @@
-       struct task_struct * p;
-       int err = -EINVAL;
-+      bproc_hook_imr(sys_setpgid1, (pid, pgid));
-+
-       if (!pid)
-               pid = current->pid;
-       if (!pgid)
-@@ -901,6 +914,7 @@
- ok_pgid:
-       p->pgrp = pgid;
-+      if (bproc_isghost(p)) bproc_hook(sys_setpgid2, (p));
-       err = 0;
- out:
-       /* All paths lead to here, thus we are safe. -DaveM */
-@@ -910,6 +924,7 @@
- asmlinkage long sys_getpgid(pid_t pid)
- {
-+      bproc_hook_imr(sys_getpgid,(pid));
-       if (!pid) {
-               return current->pgrp;
-       } else {
-@@ -930,23 +945,25 @@
- asmlinkage long sys_getpgrp(void)
- {
-       /* SMP - assuming writes are word atomic this is fine */
--      return current->pgrp;
-+      return bproc_hook_imv(current->pgrp,sys_getpgrp,());
- }
- asmlinkage long sys_getsid(pid_t pid)
- {
-       if (!pid) {
--              return current->session;
-+              return bproc_hook_imv(current->session,sys_getsid1,());
-       } else {
-               int retval;
-               struct task_struct *p;
-+              if (bproc_hook_imv(0,sys_getsid2, (&pid, &retval))==1)
-+                      return retval;
-               read_lock(&tasklist_lock);
-               p = find_task_by_pid(pid);
-               retval = -ESRCH;
-               if(p)
--                      retval = p->session;
-+                      retval = bproc_hook_imv(p->session,sys_getsid3,(p));
-               read_unlock(&tasklist_lock);
-               return retval;
-       }
-@@ -957,6 +974,8 @@
-       struct task_struct * p;
-       int err = -EPERM;
-+      bproc_hook_imr(sys_setsid,());
-+
-       read_lock(&tasklist_lock);
-       for_each_task(p) {
-               if (p->pgrp == current->pid)
-@@ -1011,6 +1030,7 @@
-       if(copy_from_user(current->groups, grouplist, gidsetsize * sizeof(gid_t)))
-               return -EFAULT;
-       current->ngroups = gidsetsize;
-+      bproc_hook_im(set_creds, ());
-       return 0;
- }
-Index: linux/kernel/ptrace.c
-===================================================================
---- linux.orig/kernel/ptrace.c 2003-09-03 17:51:04.000000000 -0400
-+++ linux/kernel/ptrace.c      2003-09-03 17:52:04.000000000 -0400
-@@ -12,6 +12,7 @@
- #include <linux/mm.h>
- #include <linux/highmem.h>
- #include <linux/smp_lock.h>
-+#include <linux/bproc.h>
- #include <asm/pgtable.h>
- #include <asm/uaccess.h>
-@@ -25,8 +26,13 @@
-       if (!(child->ptrace & PT_PTRACED))
-               return -ESRCH;
--      if (child->p_pptr != current)
--              return -ESRCH;
-+      if (child->p_pptr != current &&
-+          !bproc_hook_v(0,ptrace_slave_call,
-+                        (PTRACE_DETACH, child, current->bproc.arg)))
-+              return -ESRCH;
-+
-+      if (bproc_isghost(child))
-+              return 0;
-       if (!kill) {
-               if (child->state != TASK_STOPPED)
-@@ -55,6 +61,7 @@
- int ptrace_attach(struct task_struct *task)
- {
-+      long ret;
-       task_lock(task);
-       if (task->pid <= 1)
-               goto bad;
-@@ -83,16 +90,22 @@
-               task->ptrace |= PT_PTRACE_CAP;
-       task_unlock(task);
-+      ret = 0;
-       write_lock_irq(&tasklist_lock);
-       if (task->p_pptr != current) {
-+              if (bproc_isghost(current) && !bproc_isghost(task)) ret = 1;
-               REMOVE_LINKS(task);
-               task->p_pptr = current;
-               SET_LINKS(task);
-       }
-+      if (bproc_ismasq(task))
-+              bproc_hook(ptrace_attach, (task, current->bproc.arg, &ret));
-       write_unlock_irq(&tasklist_lock);
--
--      send_sig(SIGSTOP, task, 1);
--      return 0;
-+      if (bproc_isghost(task))
-+              bproc_hook(ptraceg,(PTRACE_ATTACH, task, 0, 0, &ret, 0));
-+      else
-+              send_sig(SIGSTOP, task, 1);
-+      return ret;
- bad:
-       task_unlock(task);
-@@ -101,6 +114,7 @@
- int ptrace_detach(struct task_struct *child, unsigned int data)
- {
-+      long ret = 0;
-       if ((unsigned long) data > _NSIG)
-               return  -EIO;
-@@ -111,14 +125,19 @@
-       child->ptrace = 0;
-       child->exit_code = data;
-       write_lock_irq(&tasklist_lock);
-+      if (bproc_isghost(current) && !bproc_isghost(child) && 
-+          child->p_pptr != child->p_opptr)
-+              ret = 1;
-       REMOVE_LINKS(child);
-+      if (bproc_ismasq(child))
-+              bproc_hook(ptrace_detach,(child,(long*)&ret));
-       child->p_pptr = child->p_opptr;
-       SET_LINKS(child);
-       write_unlock_irq(&tasklist_lock);
-       /* .. and wake it up. */
-       wake_up_process(child);
--      return 0;
-+      return ret;
- }
- /*
-Index: linux/kernel/Makefile
-===================================================================
---- linux.orig/kernel/Makefile 2003-09-03 17:51:06.000000000 -0400
-+++ linux/kernel/Makefile      2003-09-03 17:52:04.000000000 -0400
-@@ -9,7 +9,7 @@
- O_TARGET := kernel.o
--export-objs = signal.o sys.o kmod.o context.o ksyms.o pm.o exec_domain.o printk.o
-+export-objs = signal.o sys.o kmod.o context.o ksyms.o pm.o exec_domain.o printk.o bproc_hook.o
- obj-y     = sched.o dma.o fork.o exec_domain.o panic.o printk.o \
-           module.o exit.o itimer.o info.o time.o softirq.o resource.o \
-@@ -24,6 +24,7 @@
- obj-$(CONFIG_MODULES) += ksyms.o
- obj-$(CONFIG_PM) += pm.o
- obj-$(CONFIG_KALLSYMS) += kallsyms.o
-+obj-$(CONFIG_BPROC) += bproc_hook.o
- ifneq ($(CONFIG_IA64),y)
- # According to Alan Modra <alan@linuxcare.com.au>, the -fno-omit-frame-pointer is
-Index: linux/kernel/bproc_hook.c
-===================================================================
---- linux.orig/kernel/bproc_hook.c     2003-09-03 17:52:04.000000000 -0400
-+++ linux/kernel/bproc_hook.c  2003-09-03 17:52:04.000000000 -0400
-@@ -0,0 +1,36 @@
-+/*-------------------------------------------------------------------------
-+ *  bproc_hook.c: Beowulf distributed PID space (bproc) definitions
-+ *
-+ *  Copyright (C) 2000 by Erik Hendriks <hendriks@scyld.com>
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ * Id: bproc-patch-2.4.20,v 1.8 2004/04/12 21:44:45 nic Exp $
-+ *-----------------------------------------------------------------------*/
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/module.h>
-+
-+#define bprocdeclhook(ret,func,args) \
-+        ret (* bproc_hook_ ## func ## _hook) args = 0;\
-+        EXPORT_SYMBOL( bproc_hook_ ## func ## _hook )
-+
-+#include <linux/bproc.h>
-+
-+/*
-+ * Local variables:
-+ * c-basic-offset: 4
-+ * End:
-+ */
-Index: linux/include/linux/sched.h
-===================================================================
---- linux.orig/include/linux/sched.h   2003-09-03 17:51:06.000000000 -0400
-+++ linux/include/linux/sched.h        2003-09-03 17:52:04.000000000 -0400
-@@ -430,6 +430,14 @@
- /* journalling filesystem info */
-       void *journal_info;
-+
-+/* bproc */
-+      struct {
-+              long flag;
-+              long arg;
-+              struct bproc_masq_proc_t  *masq;
-+              struct bproc_ghost_proc_t *ghost;
-+      } bproc;
- };
- /*
-@@ -526,6 +534,7 @@
-     alloc_lock:               SPIN_LOCK_UNLOCKED,                             \
-     exit_actions:       NULL,                                         \
-     journal_info:     NULL,                                           \
-+    bproc:            {0, 0, 0, 0}                                    \
- }
-Index: linux/include/linux/bproc.h
-===================================================================
---- linux.orig/include/linux/bproc.h   2003-09-03 17:52:04.000000000 -0400
-+++ linux/include/linux/bproc.h        2003-09-03 17:52:04.000000000 -0400
-@@ -0,0 +1,155 @@
-+/*-------------------------------------------------------------------------
-+ *  bproc.h: Beowulf distributed PID space (bproc) definitions
-+ *
-+ *  Copyright (C) 1999-2001 by Erik Hendriks <erik@hendriks.cx>
-+ *
-+ *  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
-+ *
-+ * Id: bproc-patch-2.4.20,v 1.8 2004/04/12 21:44:45 nic Exp $
-+ *-----------------------------------------------------------------------*/
-+#ifndef _LINUX_BPROC_H
-+#define _LINUX_BPROC_H
-+
-+#include <linux/config.h>
-+#include <linux/types.h>
-+
-+#ifdef CONFIG_BPROC
-+
-+#ifndef bprocdeclhook
-+/* Function pointers for bproc hooks. */
-+#define bprocdeclhook(ret,func,args)  extern ret (* bproc_hook_ ## func ## _hook) args
-+#endif
-+
-+struct bproc_ghost_proc_t;
-+struct task_struct;
-+struct rusage;
-+struct siginfo;
-+
-+/*----- fs/exec.c -------------------------------------------------------*/
-+bprocdeclhook(void,  do_execve,       (void));
-+/*----- fs/binfmt_script.c ----------------------------------------------*/
-+bprocdeclhook(char**,load_script,     (char **));
-+/*----- fs/proc/array.c ----------------------------------------------------*/
-+bprocdeclhook(void,  refresh_status,  (struct task_struct *));
-+bprocdeclhook(int,   get_task_state,  (struct task_struct *));
-+bprocdeclhook(int,   proc_pid,        (struct task_struct *));
-+bprocdeclhook(int,   proc_ppid,       (struct task_struct *));
-+bprocdeclhook(int,   proc1,           (struct task_struct *));
-+bprocdeclhook(int,   proc2,           (int));
-+bprocdeclhook(int,   proc3,           (void));
-+/*----- kernel/timer.c --------------------------------------------------*/
-+bprocdeclhook(int,   sys_getpid,      (void));
-+bprocdeclhook(int,   sys_getppid,     (struct task_struct *));
-+/*----- kernel/sched.c --------------------------------------------------*/
-+bprocdeclhook(void,  wake_up_process, (struct task_struct *));
-+/*----- kernel/exit.c ---------------------------------------------------*/
-+bprocdeclhook(void,  release,         (struct task_struct *));
-+bprocdeclhook(int,   is_orphaned_pgrp,(int));
-+bprocdeclhook(struct task_struct *,child_reaper,(struct task_struct *));
-+bprocdeclhook(void,  do_exit,         (struct task_struct *, long code));
-+bprocdeclhook(int,   sys_wait4_1,     (pid_t *, unsigned int *, int,
-+                                     struct rusage *, int *));
-+bprocdeclhook(long,  sys_wait4_2,     (struct task_struct *));
-+bprocdeclhook(int,   sys_wait4_3,     (struct task_struct *));
-+bprocdeclhook(void,  sys_wait4_4,     (pid_t, int options));
-+/*----- kernel/fork.c ---------------------------------------------------*/
-+bprocdeclhook(int,   do_fork,         (struct task_struct *, unsigned long));
-+bprocdeclhook(void,  do_fork_2,       (struct task_struct *));
-+/*----- kernel/signal.c -------------------------------------------------*/
-+bprocdeclhook(int,   send_sig_info,   (int, struct siginfo *,
-+                                     struct task_struct *));
-+bprocdeclhook(int,   kill_pg_info,    (int, struct siginfo *, pid_t *, int *));
-+bprocdeclhook(int,   kill_proc_info,  (int, struct siginfo *, pid_t *, int *));
-+/*----- kernel/sys.c ----------------------------------------------------*/
-+bprocdeclhook(int,   sys_setpgid1,    (pid_t, pid_t));
-+bprocdeclhook(void,  sys_setpgid2,    (struct task_struct *p));
-+bprocdeclhook(int,   sys_getpgid,     (pid_t pid));
-+bprocdeclhook(int,   sys_getpgrp,     (void));
-+bprocdeclhook(int,   sys_getsid1,     (void));
-+bprocdeclhook(int,   sys_getsid2,     (pid_t *pid, int *error));
-+bprocdeclhook(int,   sys_getsid3,     (struct task_struct *p));
-+bprocdeclhook(int,   sys_setsid,      (void));
-+bprocdeclhook(void,  set_creds,       (void));
-+/*----- arch/???/kernel/ptrace.c,signal.c -------------------------------*/
-+bprocdeclhook(void,  stop_notify,     (int));
-+bprocdeclhook(int,   ptracem,         (long, long *, long, long,
-+                                     long *, long *));
-+bprocdeclhook(void,  ptrace_attach,   (struct task_struct *, long, long *));
-+bprocdeclhook(void,  ptraceg,         (long, struct task_struct *, long,
-+                                     long, long *, long *));
-+bprocdeclhook(int,   ptrace_slave_call,(long, struct task_struct *, long));
-+bprocdeclhook(void,  ptrace_detach,   (struct task_struct *, long *));
-+bprocdeclhook(int,   sys_execve,      (struct pt_regs *, char *,
-+                                     char **, char **));
-+
-+/* Macro suffixes:
-+ * (none)   = execute this hook if it's present.
-+ * im       = if masq'ed
-+ * nkc      = no kernel call (kcall must be 0 to call hook)
-+ * r        = return the value of this hook
-+ * v        = hook returns a value.
-+ */
-+#define hookname(func) bproc_hook_ ## func ## _hook
-+#define bproc_hook(func,args)          do{if(hookname(func))hookname(func)args;}while(0)
-+#define bproc_hook_im(func,args)       do{if(hookname(func)&&current->bproc.masq)hookname(func)args;}while(0)
-+#define bproc_hook_imr(func,args)      do{if(hookname(func)&&current->bproc.masq)return hookname(func)args;}while(0)
-+#define bproc_hook_v(defl,func,args)   ( hookname(func)                      ?hookname(func)args:defl)
-+#define bproc_hook_imv(defl,func,args) ((hookname(func)&&current->bproc.masq)?hookname(func)args:defl)
-+
-+#define bproc_isghost(tsk)             ((tsk)->bproc.ghost != 0)
-+#define bproc_ismasq(tsk)              ((tsk)->bproc.masq != 0)
-+#define bproc_set_arg(x)               do{current->bproc.arg=(x);}while(0)
-+
-+/* Kernel call weirdness... a kernel call is a call made from the
-+ * kernel which we do not want to be subject to the usual rules for
-+ * PID masquerading.  This is mostly used for drivers which create and
-+ * possibly wait for kernel threads which they create.  These
-+ * functions are called from the relevant places within the kernel
-+ * (like within kernel_thread) to set a flag so that things will be
-+ * handled correctly later on. */
-+static inline void bproc_no_kcall(void) {
-+    current->bproc.flag = (current->bproc.flag & ~3) | 2;
-+}
-+static inline void bproc_clear_kcall(void) {
-+    current->bproc.flag &= ~3;
-+}
-+static inline void bproc_kcall(void) {
-+    if (current->bproc.flag & 2)
-+      bproc_clear_kcall();
-+    else
-+      current->bproc.flag |= 1; /* set kernel call flag */
-+}
-+
-+#else
-+/* Stubs for when hooks are not compiled in */
-+#define bproc_hook(func,args)          do{}while(0)
-+#define bproc_hook_im(func,args)       do{}while(0)
-+#define bproc_hook_imr(func,args)      do{}while(0)
-+#define bproc_hook_v(defl,func,args)   (defl)
-+#define bproc_hook_imv(defl,func,args) (defl)
-+#define bproc_isghost(tsk)             (0)
-+#define bproc_ismasq(tsk)              (0)
-+#define bproc_set_arg(x)               do{}while(0)
-+#define bproc_no_kcall()               do{}while(0)
-+#define bproc_clear_kcall()            do{}while(0)
-+#define bproc_kcall()                  do{}while(0)
-+#endif
-+#endif
-+
-+/*
-+ * Local variables:
-+ * c-basic-offset: 4
-+ * End:
-+ */
-Index: linux/include/asm-i386/unistd.h
-===================================================================
---- linux.orig/include/asm-i386/unistd.h       2002-11-28 18:53:15.000000000 -0500
-+++ linux/include/asm-i386/unistd.h    2003-09-03 17:52:04.000000000 -0400
-@@ -349,6 +349,7 @@
- #ifdef __KERNEL_SYSCALLS__
-+#include <linux/bproc.h>
- /*
-  * we need this inline - forking from kernel space will result
-  * in NO COPY ON WRITE (!!!), until an execve is executed. This
-@@ -373,7 +374,16 @@
- static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
- static inline _syscall1(int,close,int,fd)
- static inline _syscall1(int,_exit,int,exitcode)
--static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
-+static inline pid_t waitpid(pid_t pid, int *wait_stat, int options) {
-+      long __res;
-+      bproc_kcall();
-+      __asm__ volatile ("int $0x80"
-+                        : "=a" (__res)
-+                        : "0" (__NR_waitpid),"b" ((long)(pid)),"c" ((long)(wait_stat)),
-+                        "d" ((long)(options)));
-+      __syscall_return(pid_t,__res);
-+}
-+
- static inline _syscall1(int,delete_module,const char *,name)
- static inline pid_t wait(int * wait_stat)
-Index: linux/include/asm-alpha/unistd.h
-===================================================================
---- linux.orig/include/asm-alpha/unistd.h      2002-08-02 20:39:45.000000000 -0400
-+++ linux/include/asm-alpha/unistd.h   2003-09-03 17:52:04.000000000 -0400
-@@ -519,6 +519,7 @@
- #include <linux/string.h>
- #include <linux/signal.h>
-+#include <linux/bproc.h>
- extern void sys_idle(void);
- static inline void idle(void)
-@@ -591,11 +592,13 @@
- static inline pid_t waitpid(int pid, int * wait_stat, int flags)
- {
-+      bproc_kcall();
-       return sys_wait4(pid, wait_stat, flags, NULL);
- }
- static inline pid_t wait(int * wait_stat)
- {
-+      bproc_kcall();
-       return waitpid(-1,wait_stat,0);
- }
-Index: linux/net/socket.c
-===================================================================
---- linux.orig/net/socket.c    2003-09-03 17:51:05.000000000 -0400
-+++ linux/net/socket.c 2003-09-03 17:52:04.000000000 -0400
-@@ -111,7 +111,7 @@
-  *    in the operation structures but are done directly via the socketcall() multiplexor.
-  */
--static struct file_operations socket_file_ops = {
-+struct file_operations socket_file_ops = {
-       llseek:         no_llseek,
-       read:           sock_read,
-       write:          sock_write,
-@@ -298,13 +298,13 @@
-       return sb;
- }
--static struct vfsmount *sock_mnt;
-+struct vfsmount *sock_mnt;
- static DECLARE_FSTYPE(sock_fs_type, "sockfs", sockfs_read_super, FS_NOMOUNT);
- static int sockfs_delete_dentry(struct dentry *dentry)
- {
-       return 1;
- }
--static struct dentry_operations sockfs_dentry_operations = {
-+struct dentry_operations sockfs_dentry_operations = {
-       d_delete:       sockfs_delete_dentry,
- };
-Index: linux/net/netsyms.c
-===================================================================
---- linux.orig/net/netsyms.c   2003-09-03 17:52:04.000000000 -0400
-+++ linux/net/netsyms.c        2003-09-03 17:52:04.000000000 -0400
-@@ -599,4 +599,11 @@
- EXPORT_SYMBOL(wireless_send_event);
- #endif /* CONFIG_NET_RADIO || CONFIG_NET_PCMCIA_RADIO */
-+extern struct vfsmount *sock_mnt;
-+extern struct dentry_operations sockfs_dentry_operations;
-+extern struct file_operations socket_file_ops;
-+EXPORT_SYMBOL(sock_mnt);
-+EXPORT_SYMBOL(sockfs_dentry_operations);
-+EXPORT_SYMBOL(socket_file_ops);
-+
- #endif  /* CONFIG_NET */
-Index: linux/arch/i386/config.in
-===================================================================
---- linux.orig/arch/i386/config.in     2003-09-03 17:51:06.000000000 -0400
-+++ linux/arch/i386/config.in  2003-09-03 17:52:04.000000000 -0400
-@@ -285,6 +285,7 @@
- bool 'System V IPC' CONFIG_SYSVIPC
- bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
-+bool 'Beowulf Distributed Process Space' CONFIG_BPROC
- bool 'Sysctl support' CONFIG_SYSCTL
- if [ "$CONFIG_PROC_FS" = "y" ]; then
-    choice 'Kernel core (/proc/kcore) format' \
-Index: linux/arch/i386/kernel/signal.c
-===================================================================
---- linux.orig/arch/i386/kernel/signal.c       2002-08-02 20:39:42.000000000 -0400
-+++ linux/arch/i386/kernel/signal.c    2003-09-03 17:52:04.000000000 -0400
-@@ -20,6 +20,7 @@
- #include <linux/stddef.h>
- #include <linux/tty.h>
- #include <linux/personality.h>
-+#include <linux/bproc.h>
- #include <asm/ucontext.h>
- #include <asm/uaccess.h>
- #include <asm/i387.h>
-@@ -612,6 +613,7 @@
-                       /* Let the debugger run.  */
-                       current->exit_code = signr;
-                       current->state = TASK_STOPPED;
-+                      bproc_hook_im(stop_notify,(signr));
-                       notify_parent(current, SIGCHLD);
-                       schedule();
-@@ -670,6 +672,7 @@
-                               struct signal_struct *sig;
-                               current->state = TASK_STOPPED;
-                               current->exit_code = signr;
-+                              bproc_hook_im(stop_notify,(signr));
-                               sig = current->p_pptr->sig;
-                               if (sig && !(sig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
-                                       notify_parent(current, SIGCHLD);
-Index: linux/arch/i386/kernel/ptrace.c
-===================================================================
---- linux.orig/arch/i386/kernel/ptrace.c       2002-08-02 20:39:42.000000000 -0400
-+++ linux/arch/i386/kernel/ptrace.c    2003-09-03 17:52:04.000000000 -0400
-@@ -21,6 +21,8 @@
- #include <asm/i387.h>
- #include <asm/debugreg.h>
-+#include <linux/bproc.h>
-+
- /*
-  * does not yet catch signals sent when the child dies.
-  * in exit.c or in signal.c.
-@@ -152,6 +154,15 @@
-       struct task_struct *child;
-       struct user * dummy = NULL;
-       int i, ret;
-+      long orig_pid;
-+
-+      orig_pid = pid;
-+ retry_ptrace:
-+      pid = orig_pid;
-+      if (bproc_hook_imv(0, ptracem, (request,&pid,addr,data,(long*)&ret,0))) {
-+              if (ret == -ELOOP) goto retry_ptrace;
-+              return ret;
-+      }
-       lock_kernel();
-       ret = -EPERM;
-@@ -178,14 +189,21 @@
-               goto out_tsk;
-       if (request == PTRACE_ATTACH) {
-+              bproc_set_arg(addr);
-               ret = ptrace_attach(child);
-               goto out_tsk;
-       }
-+      bproc_set_arg(request == PTRACE_DETACH ? addr : 0);
-       ret = ptrace_check_attach(child, request == PTRACE_KILL);
-       if (ret < 0)
-               goto out_tsk;
-+      if (bproc_isghost(child)) {
-+              bproc_hook(ptraceg, (request,child,addr,data,(long*)&ret,0));
-+              goto out_tsk;
-+      }
-+
-       switch (request) {
-       /* when I and D space are separate, these will need to be fixed. */
-       case PTRACE_PEEKTEXT: /* read word at location addr. */ 
-@@ -427,6 +445,7 @@
-       free_task_struct(child);
- out:
-       unlock_kernel();
-+      if (ret == -ELOOP) goto retry_ptrace;
-       return ret;
- }
-@@ -440,6 +459,7 @@
-       current->exit_code = SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
-                                       ? 0x80 : 0);
-       current->state = TASK_STOPPED;
-+      bproc_hook_im(stop_notify,(SIGTRAP));
-       notify_parent(current, SIGCHLD);
-       schedule();
-       /*
-Index: linux/arch/i386/kernel/process.c
-===================================================================
---- linux.orig/arch/i386/kernel/process.c      2003-09-03 17:51:02.000000000 -0400
-+++ linux/arch/i386/kernel/process.c   2003-09-03 17:52:04.000000000 -0400
-@@ -33,6 +33,7 @@
- #include <linux/reboot.h>
- #include <linux/init.h>
- #include <linux/mc146818rtc.h>
-+#include <linux/bproc.h>
- #include <asm/uaccess.h>
- #include <asm/pgtable.h>
-@@ -489,6 +490,7 @@
- {
-       long retval, d0;
-+      bproc_kcall();
-       __asm__ __volatile__(
-               "movl %%esp,%%esi\n\t"
-               "int $0x80\n\t"         /* Linux/i386 system call */
-@@ -789,6 +791,11 @@
-               current->ptrace &= ~PT_DTRACE;
-       putname(filename);
- out:
-+      if (error == -ENOENT)
-+              error = bproc_hook_imv(error, sys_execve,
-+                                     (&regs,(char *)regs.ebx,
-+                                      (char **)regs.ecx, (char **)regs.edx));
-+
-       return error;
- }
-Index: linux/arch/i386/kernel/i386_ksyms.c
-===================================================================
---- linux.orig/arch/i386/kernel/i386_ksyms.c   2003-09-03 17:51:04.000000000 -0400
-+++ linux/arch/i386/kernel/i386_ksyms.c        2003-09-03 17:52:04.000000000 -0400
-@@ -107,6 +107,11 @@
- EXPORT_SYMBOL(__generic_copy_to_user);
- EXPORT_SYMBOL(strnlen_user);
-+asmlinkage void ret_from_sys_call(void) __asm__("ret_from_sys_call");
-+EXPORT_SYMBOL_NOVERS(ret_from_sys_call);
-+asmlinkage void syscall_trace(void);
-+EXPORT_SYMBOL(syscall_trace);
-+
- EXPORT_SYMBOL(pci_alloc_consistent);
- EXPORT_SYMBOL(pci_free_consistent);
-Index: linux/arch/alpha/config.in
-===================================================================
---- linux.orig/arch/alpha/config.in    2003-09-03 17:51:04.000000000 -0400
-+++ linux/arch/alpha/config.in 2003-09-03 17:52:04.000000000 -0400
-@@ -271,6 +271,7 @@
- bool 'Networking support' CONFIG_NET
- bool 'System V IPC' CONFIG_SYSVIPC
-+bool 'Beowulf Distributed Process Space' CONFIG_BPROC
- bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
- bool 'Sysctl support' CONFIG_SYSCTL
- if [ "$CONFIG_PROC_FS" = "y" ]; then
-Index: linux/arch/alpha/kernel/signal.c
-===================================================================
---- linux.orig/arch/alpha/kernel/signal.c      2002-08-02 20:39:42.000000000 -0400
-+++ linux/arch/alpha/kernel/signal.c   2003-09-03 17:52:04.000000000 -0400
-@@ -23,6 +23,7 @@
- #include <asm/uaccess.h>
- #include <asm/sigcontext.h>
- #include <asm/ucontext.h>
-+#include <linux/bproc.h>
- #include "proto.h"
-@@ -643,6 +644,7 @@
-                       /* Let the debugger run.  */
-                       current->exit_code = signr;
-                       current->state = TASK_STOPPED;
-+                      bproc_hook_im(stop_notify,(signr));
-                       notify_parent(current, SIGCHLD);
-                       schedule();
-                       single_stepping |= ptrace_cancel_bpt(current);
-@@ -701,6 +703,7 @@
-                       case SIGSTOP:
-                               current->state = TASK_STOPPED;
-                               current->exit_code = signr;
-+                              bproc_hook_im(stop_notify,(signr));
-                               if (!(current->p_pptr->sig->action[SIGCHLD-1]
-                                     .sa.sa_flags & SA_NOCLDSTOP))
-                                       notify_parent(current, SIGCHLD);
-Index: linux/arch/alpha/kernel/osf_sys.c
-===================================================================
---- linux.orig/arch/alpha/kernel/osf_sys.c     2002-08-02 20:39:42.000000000 -0400
-+++ linux/arch/alpha/kernel/osf_sys.c  2003-09-03 17:52:04.000000000 -0400
-@@ -33,6 +33,7 @@
- #include <linux/file.h>
- #include <linux/types.h>
- #include <linux/ipc.h>
-+#include <linux/bproc.h>
- #include <asm/fpu.h>
- #include <asm/io.h>
-@@ -219,8 +220,8 @@
-        * isn't actually going to matter, as if the parent happens
-        * to change we can happily return either of the pids.
-        */
--      (&regs)->r20 = tsk->p_opptr->tgid;
--      return tsk->tgid;
-+      (&regs)->r20 = bproc_hook_imv(tsk->p_opptr->tgid,sys_getppid,(tsk->p_opptr));
-+      return bproc_hook_imv(tsk->tgid,sys_getpid,());
- }
- asmlinkage unsigned long osf_mmap(unsigned long addr, unsigned long len,
-Index: linux/arch/alpha/kernel/entry.S
-===================================================================
---- linux.orig/arch/alpha/kernel/entry.S       2003-09-03 17:52:01.000000000 -0400
-+++ linux/arch/alpha/kernel/entry.S    2003-09-03 17:52:04.000000000 -0400
-@@ -212,8 +212,10 @@
-  * stack buildup, as we can't do system calls from kernel space.
-  */
- .align 3
-+.globl  kernel_clone
- .ent  kernel_clone
- kernel_clone:
-+      ldgp    $29,0($27)      /* we can be called from a module */
-       .frame $30, 0, $26
-       .prologue 0
-       subq    $30,6*8,$30
-@@ -230,6 +232,23 @@
-       br      ret_from_sys_call
- .end  kernel_clone
-+.align 3
-+.globl  ret_to_user_space
-+.ent    ret_to_user_space
-+ret_to_user_space:    
-+      ldgp $29, 0($27)        /* We can jump here from a module */
-+      bsr $1, undo_switch_stack
-+      lda  $1, 8($31)         /* Set ps = 8 */
-+      stq  $1, 0xB8($30)
-+
-+      /* This tidbit ripped from entSys.  Is this appropriate here ? */
-+      blt     $0,syscall_error        /* the call failed */
-+      stq     $0,0($30)
-+      stq     $31,72($30)             /* a3=0 => no error */
-+
-+      br ret_from_sys_call
-+.end    ret_to_user_space
-+      
- /*
-  * arch_kernel_thread(fn, arg, clone_flags)
-  */
-@@ -240,19 +259,24 @@
-       ldgp    $29,0($27)      /* we can be called from a module */
-       .frame $30, 4*8, $26
-       subq    $30,4*8,$30
-+      stq     $11,24($30)
-       stq     $10,16($30)
-       stq     $9,8($30)
--      lda     $0,CLONE_VM
-       stq     $26,0($30)
-       .prologue 1
-       mov     $16,$9          /* save fn */           
-       mov     $17,$10         /* save arg */
--      or      $18,$0,$16      /* shuffle flags to front; add CLONE_VM.  */
--      bsr     $26,kernel_clone
-+      mov     $18,$11         /* save flags */
-+      bsr     $26,bproc_kcall_
-+      lda     $0,CLONE_VM
-+      or      $11,$0,$16      /* shuffle flags to front; add CLONE_VM.  */
-+      jsr     $26,kernel_clone
-+      ldgp    $29,0($26)
-       bne     $20,1f          /* $20 is non-zero in child */
-       ldq     $26,0($30)
-       ldq     $9,8($30)
-       ldq     $10,16($30)
-+      ldq     $11,24($30)
-       addq    $30,4*8,$30
-       ret     $31,($26),1
- /* this is in child: look out as we don't have any stack here.. */
-@@ -290,6 +314,7 @@
- .end  __kernel_execve
- .align 3
-+.globl  do_switch_stack
- .ent  do_switch_stack
- do_switch_stack:
-       lda     $30,-SWITCH_STACK_SIZE($30)
-@@ -339,6 +364,7 @@
- .end do_switch_stack
- .align 3
-+.globl  undo_switch_stack
- .ent  undo_switch_stack
- undo_switch_stack:
-       ldq     $9,0($30)
-@@ -1062,7 +1088,7 @@
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 290 */
--      .quad alpha_ni_syscall
-+      .quad sys_ni_syscall                    /* bproc: please shut up... */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-Index: linux/arch/alpha/kernel/alpha_ksyms.c
-===================================================================
---- linux.orig/arch/alpha/kernel/alpha_ksyms.c 2002-08-02 20:39:42.000000000 -0400
-+++ linux/arch/alpha/kernel/alpha_ksyms.c      2003-09-03 17:52:04.000000000 -0400
-@@ -164,6 +164,17 @@
- EXPORT_SYMBOL(sys_sync);
- EXPORT_SYMBOL(sys_wait4);
-+extern void kernel_clone(void);
-+extern void ret_to_user_space(void);
-+extern void do_switch_stack(void);
-+extern void undo_switch_stack(void);
-+asmlinkage void syscall_trace(void);
-+EXPORT_SYMBOL_NOVERS(kernel_clone);
-+EXPORT_SYMBOL_NOVERS(ret_to_user_space);
-+EXPORT_SYMBOL_NOVERS(do_switch_stack);
-+EXPORT_SYMBOL_NOVERS(undo_switch_stack);
-+EXPORT_SYMBOL(syscall_trace);
-+
- /* Networking helper routines. */
- EXPORT_SYMBOL(csum_tcpudp_magic);
- EXPORT_SYMBOL(ip_compute_csum);
-Index: linux/arch/alpha/kernel/process.c
-===================================================================
---- linux.orig/arch/alpha/kernel/process.c     2001-09-30 15:26:08.000000000 -0400
-+++ linux/arch/alpha/kernel/process.c  2003-09-03 17:52:04.000000000 -0400
-@@ -30,6 +30,7 @@
- #include <linux/reboot.h>
- #include <linux/tty.h>
- #include <linux/console.h>
-+#include <linux/bproc.h>
- #include <asm/reg.h>
- #include <asm/uaccess.h>
-@@ -430,6 +431,9 @@
-       error = do_execve(filename, argv, envp, &regs);
-       putname(filename);
- out:
-+      if (error == -ENOENT)
-+              error = bproc_hook_imv(error, sys_execve,
-+                                     (&regs,ufilename,argv,envp));
-       return error;
- }
-@@ -465,3 +469,10 @@
-       }
-       return pc;
- }
-+
-+/* This is usually inlined.  It's packaged in a function here so that
-+ * we can call it from ASM code on this architecture. */
-+void bproc_kcall_(void)
-+{
-+      bproc_kcall();
-+}
-Index: linux/arch/alpha/kernel/ptrace.c
-===================================================================
---- linux.orig/arch/alpha/kernel/ptrace.c      2001-09-18 20:03:51.000000000 -0400
-+++ linux/arch/alpha/kernel/ptrace.c   2003-09-03 17:52:04.000000000 -0400
-@@ -13,6 +13,7 @@
- #include <linux/ptrace.h>
- #include <linux/user.h>
- #include <linux/slab.h>
-+#include <linux/bproc.h>
- #include <asm/uaccess.h>
- #include <asm/pgtable.h>
-@@ -248,7 +249,15 @@
-          int a4, int a5, struct pt_regs regs)
- {
-       struct task_struct *child;
--      long ret;
-+      long ret, orig_pid;
-+      
-+      orig_pid = pid;
-+ retry_ptrace:
-+      pid = orig_pid;
-+      if (bproc_hook_imv(0, ptracem, (request,&pid,addr,data,&ret,&regs.r0))) {
-+              if (ret == -ELOOP && regs.r0) goto retry_ptrace;
-+              return ret;
-+      }
-       lock_kernel();
-       DBG(DBG_MEM, ("request=%ld pid=%ld addr=0x%lx data=0x%lx\n",
-@@ -274,6 +283,7 @@
-       if (!child)
-               goto out_notsk;
-       if (request == PTRACE_ATTACH) {
-+              bproc_set_arg(addr);
-               ret = ptrace_attach(child);
-               goto out;
-       }
-@@ -282,15 +292,20 @@
-               DBG(DBG_MEM, ("child not traced\n"));
-               goto out;
-       }
-+      if (child->p_pptr != current &&
-+          !bproc_hook_v(0,ptrace_slave_call,(request,child,addr))) {
-+              DBG(DBG_MEM, ("child not parent of this process\n"));
-+              goto out;
-+      }
-+      if (bproc_isghost(child)) {
-+              bproc_hook(ptraceg,(request,child,addr,data,&ret,&regs.r0));
-+              goto out;
-+      }
-       if (child->state != TASK_STOPPED) {
-               DBG(DBG_MEM, ("child process not stopped\n"));
-               if (request != PTRACE_KILL)
-                       goto out;
-       }
--      if (child->p_pptr != current) {
--              DBG(DBG_MEM, ("child not parent of this process\n"));
--              goto out;
--      }
-       switch (request) {
-       /* When I and D space are separate, these will need to be fixed.  */
-@@ -384,6 +399,7 @@
-       free_task_struct(child);
-  out_notsk:
-       unlock_kernel();
-+      if (ret == -ELOOP && regs.r0) goto retry_ptrace;
-       return ret;
- }
-@@ -395,6 +411,7 @@
-               return;
-       current->exit_code = SIGTRAP;
-       current->state = TASK_STOPPED;
-+      bproc_hook_im(stop_notify,(SIGTRAP));
-       notify_parent(current, SIGCHLD);
-       schedule();
-       /*
-Index: linux/arch/ppc/config.in
-===================================================================
---- linux.orig/arch/ppc/config.in      2002-11-28 18:53:11.000000000 -0500
-+++ linux/arch/ppc/config.in   2003-09-03 17:52:04.000000000 -0400
-@@ -162,6 +162,7 @@
- bool 'Networking support' CONFIG_NET
- bool 'Sysctl support' CONFIG_SYSCTL
- bool 'System V IPC' CONFIG_SYSVIPC
-+bool 'Beowulf Distributed Process Space' CONFIG_BPROC
- bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
- # only elf supported, a.out is not -- Cort
-Index: linux/arch/ppc/kernel/signal.c
-===================================================================
---- linux.orig/arch/ppc/kernel/signal.c        2002-11-28 18:53:11.000000000 -0500
-+++ linux/arch/ppc/kernel/signal.c     2003-09-03 17:52:04.000000000 -0400
-@@ -29,6 +29,7 @@
- #include <linux/unistd.h>
- #include <linux/stddef.h>
- #include <linux/elf.h>
-+#include <linux/bproc.h>
- #include <asm/ucontext.h>
- #include <asm/uaccess.h>
- #include <asm/pgtable.h>
-@@ -579,6 +580,7 @@
-                       /* Let the debugger run.  */
-                       current->exit_code = signr;
-                       current->state = TASK_STOPPED;
-+                      bproc_hook_im(stop_notify,(signr));
-                       notify_parent(current, SIGCHLD);
-                       schedule();
-@@ -636,6 +638,7 @@
-                       case SIGSTOP:
-                               current->state = TASK_STOPPED;
-                               current->exit_code = signr;
-+                              bproc_hook_im(stop_notify,(signr));
-                               if (!(current->p_pptr->sig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
-                                       notify_parent(current, SIGCHLD);
-                               schedule();
-Index: linux/arch/ppc/kernel/ptrace.c
-===================================================================
---- linux.orig/arch/ppc/kernel/ptrace.c        2002-11-28 18:53:11.000000000 -0500
-+++ linux/arch/ppc/kernel/ptrace.c     2003-09-03 17:52:04.000000000 -0400
-@@ -27,6 +27,7 @@
- #include <linux/errno.h>
- #include <linux/ptrace.h>
- #include <linux/user.h>
-+#include <linux/bproc.h>
- #include <asm/uaccess.h>
- #include <asm/page.h>
-@@ -161,6 +162,15 @@
- {
-       struct task_struct *child;
-       int ret = -EPERM;
-+      long orig_pid;
-+
-+      orig_pid = pid;
-+ retry_ptrace:
-+      pid = orig_pid;
-+      if (bproc_hook_imv(0, ptracem,(request,&pid,addr,data,(long*)&ret,0))){
-+              if (ret == -ELOOP) goto retry_ptrace;
-+              return ret;
-+      }
-       lock_kernel();
-       if (request == PTRACE_TRACEME) {
-@@ -186,14 +196,21 @@
-               goto out_tsk;
-       if (request == PTRACE_ATTACH) {
-+              bproc_set_arg(addr);
-               ret = ptrace_attach(child);
-               goto out_tsk;
-       }
-+      bproc_set_arg(request == PTRACE_DETACH ? addr : 0);
-       ret = ptrace_check_attach(child, request == PTRACE_KILL);
-       if (ret < 0)
-               goto out_tsk;
-+      if (bproc_isghost(child)) {
-+              bproc_hook(ptraceg, (request,child,addr,data,(long*)&ret,0));
-+              goto out_tsk;
-+      }
-+
-       switch (request) {
-       /* when I and D space are separate, these will need to be fixed. */
-       case PTRACE_PEEKTEXT: /* read word at location addr. */ 
-@@ -342,6 +359,7 @@
-       free_task_struct(child);
- out:
-       unlock_kernel();
-+      if (ret == -ELOOP) goto retry_ptrace;
-       return ret;
- }
-@@ -352,6 +370,7 @@
-               return;
-       current->exit_code = SIGTRAP;
-       current->state = TASK_STOPPED;
-+      bproc_hook_im(stop_notify,(SIGTRAP));
-       notify_parent(current, SIGCHLD);
-       schedule();
-       /*
-Index: linux/arch/ppc/kernel/ppc_ksyms.c
-===================================================================
---- linux.orig/arch/ppc/kernel/ppc_ksyms.c     2002-11-28 18:53:11.000000000 -0500
-+++ linux/arch/ppc/kernel/ppc_ksyms.c  2003-09-03 17:52:04.000000000 -0400
-@@ -366,3 +366,5 @@
- EXPORT_SYMBOL_NOVERS(agp_special_page);
- #endif /* defined(CONFIG_ALL_PPC) */
-+asmlinkage void ret_from_syscall_1(void) __asm__("ret_from_syscall_1");
-+EXPORT_SYMBOL_NOVERS(ret_from_syscall_1);
-Index: linux/arch/ppc/kernel/misc.S
-===================================================================
---- linux.orig/arch/ppc/kernel/misc.S  2003-09-03 17:51:02.000000000 -0400
-+++ linux/arch/ppc/kernel/misc.S       2003-09-03 17:52:04.000000000 -0400
-@@ -901,6 +901,20 @@
-  *   arch_kernel_thread(fn, arg, flags)
-  */
- _GLOBAL(arch_kernel_thread)
-+      stwu    r1,-28(r1)      /* Setup stack frame to save args */
-+      mflr    r0
-+      stw     r3, 16(r1)
-+      stw     r4, 20(r1)
-+      stw     r5, 24(r1)
-+      stw     r0, 32(r1)
-+      bl      bproc_kcall_    /* Call bproc_kcall_ hook */
-+      lwz     r0, 32(r1)      /* Restore stack + arguments */
-+      lwz     r5, 24(r1)
-+      lwz     r4, 20(r1)
-+      lwz     r3, 16(r1)
-+      mtlr    r0
-+      addi    r1,r1,28
-+
-       mr      r6,r3           /* function */
-       ori     r3,r5,CLONE_VM  /* flags */
-       li      r0,__NR_clone
-@@ -941,7 +955,29 @@
- SYSCALL(execve)
- SYSCALL(open)
- SYSCALL(close)
--SYSCALL(waitpid)
-+_GLOBAL(waitpid)
-+      stwu    r1,-28(r1)      /* Setup stack frame to save args */
-+      mflr    r0
-+      stw     r3, 16(r1)
-+      stw     r4, 20(r1)
-+      stw     r5, 24(r1)
-+      stw     r0, 32(r1)
-+      bl      bproc_kcall_    /* Call bproc_kcall_ hook */
-+      lwz     r0, 32(r1)      /* Restore stack + arguments */
-+      lwz     r5, 24(r1)
-+      lwz     r4, 20(r1)
-+      lwz     r3, 16(r1)
-+      mtlr    r0
-+      addi    r1,r1,28
-+      
-+      li      r0,__NR_waitpid
-+      sc
-+      bnslr
-+      lis     r4,errno@ha
-+      stw     r3,errno@l(r4)
-+      li      r3,-1
-+      blr
-+
- SYSCALL(fork)
- SYSCALL(delete_module)
- SYSCALL(_exit)
-Index: linux/arch/ppc/kernel/process.c
-===================================================================
---- linux.orig/arch/ppc/kernel/process.c       2001-11-26 08:29:17.000000000 -0500
-+++ linux/arch/ppc/kernel/process.c    2003-09-03 17:52:04.000000000 -0400
-@@ -34,6 +34,7 @@
- #include <linux/user.h>
- #include <linux/elf.h>
- #include <linux/init.h>
-+#include <linux/bproc.h>
- #include <asm/pgtable.h>
- #include <asm/uaccess.h>
-@@ -443,6 +444,10 @@
-               current->ptrace &= ~PT_DTRACE;
-       putname(filename);
- out:
-+      if (error == -ENOENT)
-+              error = bproc_hook_imv(error, sys_execve,
-+                                     (regs,(char*)a0,(char**)a1,(char**)a2));
-+
-       return error;
- }
-@@ -605,3 +610,10 @@
-       } while (count++ < 16);
-       return 0;
- }
-+
-+/* This is usually inlined.  It's packaged in a function here so that
-+ * we can call it from ASM code on this architecture. */
-+void bproc_kcall_(void)
-+{
-+      bproc_kcall();
-+}
-Index: linux/fs/inode.c
-===================================================================
---- linux.orig/fs/inode.c      2003-09-03 17:52:00.000000000 -0400
-+++ linux/fs/inode.c   2003-09-03 17:52:04.000000000 -0400
-@@ -816,6 +816,76 @@
-       return inode;
- }
-+/*
-+ * This just initializes the inode fields
-+ * to known values before returning the inode..
-+ *
-+ * i_sb, i_ino, i_count, i_state and the lists have
-+ * been initialized elsewhere..
-+ */
-+static void clean_inode(struct inode *inode)
-+{
-+      static struct address_space_operations empty_aops;
-+      static struct inode_operations empty_iops;
-+      static struct file_operations empty_fops;
-+      memset(&inode->u, 0, sizeof(inode->u));
-+      inode->i_sock = 0;
-+      inode->i_op = &empty_iops;
-+      inode->i_fop = &empty_fops;
-+      inode->i_nlink = 1;
-+      atomic_set(&inode->i_writecount, 0);
-+      inode->i_size = 0;
-+      inode->i_blocks = 0;
-+      inode->i_generation = 0;
-+      memset(&inode->i_dquot, 0, sizeof(inode->i_dquot));
-+      inode->i_pipe = NULL;
-+      inode->i_bdev = NULL;
-+      inode->i_cdev = NULL;
-+      inode->i_data.a_ops = &empty_aops;
-+      inode->i_data.host = inode;
-+      inode->i_data.gfp_mask = GFP_HIGHUSER;
-+      inode->i_mapping = &inode->i_data;
-+}
-+
-+/**
-+ * get_empty_inode    - obtain an inode
-+ *
-+ * This is called by things like the networking layer
-+ * etc that want to get an inode without any inode
-+ * number, or filesystems that allocate new inodes with
-+ * no pre-existing information.
-+ *
-+ * On a successful return the inode pointer is returned. On a failure
-+ * a %NULL pointer is returned. The returned inode is not on any superblock
-+ * lists.
-+ */
-+ 
-+struct inode * get_empty_inode(void)
-+{
-+      static unsigned long last_ino;
-+      struct inode * inode;
-+
-+      spin_lock_prefetch(&inode_lock);
-+      
-+      inode = (struct inode *) kmem_cache_alloc(inode_cachep, SLAB_KERNEL);
-+      if (inode)
-+      {
-+              spin_lock(&inode_lock);
-+              inodes_stat.nr_inodes++;
-+              list_add(&inode->i_list, &inode_in_use);
-+              inode->i_sb = NULL;
-+              inode->i_dev = 0;
-+              inode->i_blkbits = 0;
-+              inode->i_ino = ++last_ino;
-+              inode->i_flags = 0;
-+              atomic_set(&inode->i_count, 1);
-+              inode->i_state = 0;
-+              spin_unlock(&inode_lock);
-+              clean_inode(inode);
-+      }
-+      return inode;
-+}
-+
- /**
-  *    new_inode       - obtain an inode
-  *    @sb: superblock
-Index: linux/include/linux/fs.h
-===================================================================
---- linux.orig/include/linux/fs.h      2003-09-03 17:52:02.000000000 -0400
-+++ linux/include/linux/fs.h   2003-09-03 17:52:04.000000000 -0400
-@@ -1440,6 +1440,7 @@
- extern void clear_inode(struct inode *);
- extern struct inode *new_inode(struct super_block *sb);
-+extern struct inode * get_empty_inode(void);
- extern void remove_suid(struct inode *inode);
- extern void insert_inode_hash(struct inode *);
-Index: linux/arch/i386/kernel/setup.c
-===================================================================
---- linux.orig/arch/i386/kernel/setup.c        2003-09-03 17:51:01.000000000 -0400
-+++ linux/arch/i386/kernel/setup.c     2003-09-03 17:53:05.000000000 -0400
-@@ -172,6 +172,8 @@
- static u32 disabled_x86_caps[NCAPINTS] __initdata = { 0 };
- extern int blk_nohighio;
-+int enable_acpi_smp_table;
-+
- /*
-  * This is set up by the setup-routine at boot-time
-  */
diff --git a/lustre/kernel_patches/patches/configurable-x86-stack-2.4.19-pre1.patch b/lustre/kernel_patches/patches/configurable-x86-stack-2.4.19-pre1.patch
deleted file mode 100644 (file)
index 3f79b5b..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-Index: linux-2.4.19-pre1/arch/i386/kernel/entry.S
-===================================================================
---- linux-2.4.19-pre1.orig/arch/i386/kernel/entry.S    2003-11-21 03:38:55.000000000 +0300
-+++ linux-2.4.19-pre1/arch/i386/kernel/entry.S 2003-12-01 18:14:32.000000000 +0300
-@@ -45,6 +45,7 @@
- #include <linux/linkage.h>
- #include <asm/segment.h>
- #include <asm/smp.h>
-+#include <asm/current.h>
- EBX           = 0x00
- ECX           = 0x04
-@@ -128,10 +129,6 @@
-       .long 3b,6b;    \
- .previous
--#define GET_CURRENT(reg) \
--      movl $-8192, reg; \
--      andl %esp, reg
--
- ENTRY(lcall7)
-       pushfl                  # We get a different stack layout with call gates,
-       pushl %eax              # which has to be cleaned up later..
-@@ -144,7 +141,7 @@
-       movl %ecx,CS(%esp)      #
-       movl %esp,%ebx
-       pushl %ebx
--      andl $-8192,%ebx        # GET_CURRENT
-+      andl $-THREAD_SIZE,%ebx # GET_CURRENT
-       movl exec_domain(%ebx),%edx     # Get the execution domain
-       movl 4(%edx),%edx       # Get the lcall7 handler for the domain
-       pushl $0x7
-@@ -165,7 +162,7 @@
-       movl %ecx,CS(%esp)      #
-       movl %esp,%ebx
-       pushl %ebx
--      andl $-8192,%ebx        # GET_CURRENT
-+      andl $-THREAD_SIZE,%ebx # GET_CURRENT
-       movl exec_domain(%ebx),%edx     # Get the execution domain
-       movl 4(%edx),%edx       # Get the lcall7 handler for the domain
-       pushl $0x27
-Index: linux-2.4.19-pre1/arch/i386/kernel/smpboot.c
-===================================================================
---- linux-2.4.19-pre1.orig/arch/i386/kernel/smpboot.c  2001-12-21 20:41:53.000000000 +0300
-+++ linux-2.4.19-pre1/arch/i386/kernel/smpboot.c       2003-12-01 18:14:32.000000000 +0300
-@@ -819,7 +819,7 @@
-       /* So we see what's up   */
-       printk("Booting processor %d/%d eip %lx\n", cpu, apicid, start_eip);
--      stack_start.esp = (void *) (1024 + PAGE_SIZE + (char *)idle);
-+      stack_start.esp = (void *)idle->thread.esp;
-       /*
-        * This grunge runs the startup process for
-@@ -892,7 +892,7 @@
-                       Dprintk("CPU has booted.\n");
-               } else {
-                       boot_error= 1;
--                      if (*((volatile unsigned char *)phys_to_virt(8192))
-+                      if (*((volatile unsigned char *)phys_to_virt(THREAD_SIZE))
-                                       == 0xA5)
-                               /* trampoline started but...? */
-                               printk("Stuck ??\n");
-@@ -915,7 +915,7 @@
-       }
-       /* mark "stuck" area as not stuck */
--      *((volatile unsigned long *)phys_to_virt(8192)) = 0;
-+      *((volatile unsigned long *)phys_to_virt(THREAD_SIZE)) = 0;
-       if(clustered_apic_mode) {
-               printk("Restoring NMI vector\n");
-Index: linux-2.4.19-pre1/arch/i386/kernel/traps.c
-===================================================================
---- linux-2.4.19-pre1.orig/arch/i386/kernel/traps.c    2003-12-01 18:11:31.000000000 +0300
-+++ linux-2.4.19-pre1/arch/i386/kernel/traps.c 2003-12-01 18:14:32.000000000 +0300
-@@ -158,7 +158,7 @@
-       unsigned long esp = tsk->thread.esp;
-       /* User space on another CPU? */
--      if ((esp ^ (unsigned long)tsk) & (PAGE_MASK<<1))
-+      if ((esp ^ (unsigned long)tsk) & ~(THREAD_SIZE - 1))
-               return;
-       show_trace((unsigned long *)esp);
- }
-Index: linux-2.4.19-pre1/arch/i386/kernel/head.S
-===================================================================
---- linux-2.4.19-pre1.orig/arch/i386/kernel/head.S     2003-11-20 19:01:35.000000000 +0300
-+++ linux-2.4.19-pre1/arch/i386/kernel/head.S  2003-12-01 18:14:32.000000000 +0300
-@@ -15,6 +15,7 @@
- #include <asm/page.h>
- #include <asm/pgtable.h>
- #include <asm/desc.h>
-+#include <asm/current.h>
- #define OLD_CL_MAGIC_ADDR     0x90020
- #define OLD_CL_MAGIC          0xA33F
-@@ -320,7 +321,7 @@
-       ret
- ENTRY(stack_start)
--      .long SYMBOL_NAME(init_task_union)+8192
-+      .long SYMBOL_NAME(init_task_union)+THREAD_SIZE
-       .long __KERNEL_DS
- /* This is the default interrupt "handler" :-) */
-Index: linux-2.4.19-pre1/arch/i386/lib/getuser.S
-===================================================================
---- linux-2.4.19-pre1.orig/arch/i386/lib/getuser.S     1998-01-13 00:42:52.000000000 +0300
-+++ linux-2.4.19-pre1/arch/i386/lib/getuser.S  2003-12-01 18:14:32.000000000 +0300
-@@ -21,6 +21,10 @@
-  * as they get called from within inline assembly.
-  */
-+/* Duplicated from asm/processor.h */
-+#include <asm/current.h>
-+#include <linux/config.h>
-+
- addr_limit = 12
- .text
-@@ -28,7 +32,7 @@
- .globl __get_user_1
- __get_user_1:
-       movl %esp,%edx
--      andl $0xffffe000,%edx
-+      andl $~(THREAD_SIZE - 1),%edx
-       cmpl addr_limit(%edx),%eax
-       jae bad_get_user
- 1:    movzbl (%eax),%edx
-@@ -41,7 +45,7 @@
-       addl $1,%eax
-       movl %esp,%edx
-       jc bad_get_user
--      andl $0xffffe000,%edx
-+      andl $~(THREAD_SIZE - 1),%edx
-       cmpl addr_limit(%edx),%eax
-       jae bad_get_user
- 2:    movzwl -1(%eax),%edx
-@@ -54,7 +58,7 @@
-       addl $3,%eax
-       movl %esp,%edx
-       jc bad_get_user
--      andl $0xffffe000,%edx
-+      andl $~(THREAD_SIZE - 1),%edx
-       cmpl addr_limit(%edx),%eax
-       jae bad_get_user
- 3:    movl -3(%eax),%edx
-Index: linux-2.4.19-pre1/arch/i386/config.in
-===================================================================
---- linux-2.4.19-pre1.orig/arch/i386/config.in 2003-11-20 19:01:35.000000000 +0300
-+++ linux-2.4.19-pre1/arch/i386/config.in      2003-12-01 18:14:32.000000000 +0300
-@@ -201,6 +201,29 @@
- if [ "$CONFIG_SMP" = "y" -a "$CONFIG_X86_CMPXCHG" = "y" ]; then
-    define_bool CONFIG_HAVE_DEC_LOCK y
- fi
-+
-+choice 'Bigger Stack Size Support' \
-+     "off    CONFIG_NOBIGSTACK \
-+      16KB   CONFIG_STACK_SIZE_16KB \
-+      32KB   CONFIG_STACK_SIZE_32KB \
-+      64KB   CONFIG_STACK_SIZE_64KB" off
-+
-+if [ "$CONFIG_NOBIGSTACK" = "y" ]; then
-+   define_int CONFIG_STACK_SIZE_SHIFT 1
-+else
-+  if [ "$CONFIG_STACK_SIZE_16KB" = "y" ]; then
-+     define_int CONFIG_STACK_SIZE_SHIFT 2
-+  else
-+    if [ "$CONFIG_STACK_SIZE_32KB" = "y" ]; then
-+      define_int CONFIG_STACK_SIZE_SHIFT 3
-+    else
-+      if [ "$CONFIG_STACK_SIZE_64KB" = "y" ]; then
-+        define_int CONFIG_STACK_SIZE_SHIFT 4
-+      fi
-+    fi
-+  fi
-+fi
-+ 
- endmenu
- mainmenu_option next_comment
-Index: linux-2.4.19-pre1/arch/i386/vmlinux.lds
-===================================================================
---- linux-2.4.19-pre1.orig/arch/i386/vmlinux.lds       2003-11-20 19:01:35.000000000 +0300
-+++ linux-2.4.19-pre1/arch/i386/vmlinux.lds    2003-12-01 18:14:32.000000000 +0300
-@@ -35,7 +35,8 @@
-   _edata = .;                 /* End of data section */
--  . = ALIGN(8192);            /* init_task */
-+/* chose the biggest of the possible stack sizes here? */
-+  . = ALIGN(65536);           /* init_task */
-   .data.init_task : { *(.data.init_task) }
-   . = ALIGN(4096);            /* Init code and data */
-Index: linux-2.4.19-pre1/include/asm-i386/current.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/asm-i386/current.h  1998-08-15 03:35:22.000000000 +0400
-+++ linux-2.4.19-pre1/include/asm-i386/current.h       2003-12-01 18:14:32.000000000 +0300
-@@ -1,15 +1,43 @@
- #ifndef _I386_CURRENT_H
- #define _I386_CURRENT_H
-+#include <asm/page.h>
-+
-+/*
-+ * Configurable page sizes on i386, mainly for debugging purposes.
-+ * (c) Balbir Singh
-+ */
-+
-+#ifdef __ASSEMBLY__
-+
-+#define PAGE_SIZE      4096    /* as cannot handle 1UL << 12 */
-+#define THREAD_SIZE ((1 << CONFIG_STACK_SIZE_SHIFT) * PAGE_SIZE)
-+
-+#define GET_CURRENT(reg) \
-+        movl $-THREAD_SIZE, reg; \
-+        andl %esp, reg
-+
-+#else  /* __ASSEMBLY__ */
-+
-+#define THREAD_SIZE ((1 << CONFIG_STACK_SIZE_SHIFT) * PAGE_SIZE)
-+#define alloc_task_struct() \
-+  ((struct task_struct *) __get_free_pages(GFP_KERNEL,CONFIG_STACK_SIZE_SHIFT))
-+
-+#define free_task_struct(p) \
-+  free_pages((unsigned long) (p), CONFIG_STACK_SIZE_SHIFT)
-+
-+#define INIT_TASK_SIZE THREAD_SIZE
- struct task_struct;
- static inline struct task_struct * get_current(void)
- {
-       struct task_struct *current;
--      __asm__("andl %%esp,%0; ":"=r" (current) : "0" (~8191UL));
-+      __asm__("andl %%esp,%0; ":"=r" (current) : "0" (~(THREAD_SIZE - 1)));
-       return current;
-  }
-  
- #define current get_current()
-+#endif /* __ASSEMBLY__ */
-+
- #endif /* !(_I386_CURRENT_H) */
-Index: linux-2.4.19-pre1/include/asm-i386/hw_irq.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/asm-i386/hw_irq.h   2003-11-21 02:59:05.000000000 +0300
-+++ linux-2.4.19-pre1/include/asm-i386/hw_irq.h        2003-12-01 18:14:32.000000000 +0300
-@@ -15,6 +15,7 @@
- #include <linux/config.h>
- #include <asm/atomic.h>
- #include <asm/irq.h>
-+#include <asm/current.h>
- /*
-  * IDT vectors usable for external interrupt sources start
-@@ -113,10 +114,6 @@
- #define IRQ_NAME2(nr) nr##_interrupt(void)
- #define IRQ_NAME(nr) IRQ_NAME2(IRQ##nr)
--#define GET_CURRENT \
--      "movl %esp, %ebx\n\t" \
--      "andl $-8192, %ebx\n\t"
--
- /*
-  *    SMP has a few special interrupts for IPI messages
-  */
-Index: linux-2.4.19-pre1/include/asm-i386/processor.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/asm-i386/processor.h        2003-11-21 02:59:05.000000000 +0300
-+++ linux-2.4.19-pre1/include/asm-i386/processor.h     2003-12-01 18:14:32.000000000 +0300
-@@ -14,6 +14,7 @@
- #include <asm/types.h>
- #include <asm/sigcontext.h>
- #include <asm/cpufeature.h>
-+#include <asm/current.h>
- #include <linux/cache.h>
- #include <linux/config.h>
- #include <linux/threads.h>
-@@ -447,9 +448,6 @@
- #define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1019])
- #define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1022])
--#define THREAD_SIZE (2*PAGE_SIZE)
--#define alloc_task_struct() ((struct task_struct *) __get_free_pages(GFP_KERNEL,1))
--#define free_task_struct(p) free_pages((unsigned long) (p), 1)
- #define get_task_struct(tsk)      atomic_inc(&virt_to_page(tsk)->count)
- #define init_task     (init_task_union.task)
-Index: linux-2.4.19-pre1/include/linux/sched.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/sched.h       2003-12-01 18:11:28.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/sched.h    2003-12-01 18:14:32.000000000 +0300
-@@ -2,6 +2,7 @@
- #define _LINUX_SCHED_H
- #include <asm/param.h>        /* for HZ */
-+#include <asm/current.h>      /* maybe for INIT_TASK_SIZE */
- extern unsigned long event;
index 5be430e..66c2ef2 100644 (file)
@@ -200,33 +200,27 @@ Index: linux-2.4.21/arch/i386/config.in
  if [ "$CONFIG_SMP" = "y" -a "$CONFIG_X86_CMPXCHG" = "y" ]; then
     define_bool CONFIG_HAVE_DEC_LOCK y
  fi
-Index: linux-2.4.21/arch/i386/vmlinux.lds
+Index: linux-p4smp/arch/i386/vmlinux.lds.in
 ===================================================================
---- linux-2.4.21.orig/arch/i386/vmlinux.lds    2004-07-09 19:14:43.000000000 -0400
-+++ linux-2.4.21/arch/i386/vmlinux.lds 2004-07-16 18:00:14.000000000 -0400
-@@ -38,7 +38,7 @@
+--- linux-p4smp.orig/arch/i386/vmlinux.lds.in  2004-06-14 13:13:07.000000000 -0700
++++ linux-p4smp/arch/i386/vmlinux.lds.in       2004-06-14 13:41:19.000000000 -0700
+@@ -1,6 +1,7 @@
  
-   _edata = .;                 /* End of data section */
--  . = ALIGN(8192);            /* init_task */
-+  . = ALIGN(16384);           /* init_task */
-   .data.init_task : { *(.data.init_task) }
+ #define __ASSEMBLY__
+ #include <asm/page.h>
++#include <asm/current.h>
  
-   . = ALIGN(4096);            /* Init code and data */
-Index: linux-2.4.21/arch/i386/vmlinux.lds.in
-===================================================================
---- linux-2.4.21.orig/arch/i386/vmlinux.lds.in 2004-07-09 19:14:45.000000000 -0400
-+++ linux-2.4.21/arch/i386/vmlinux.lds.in      2004-07-16 18:00:49.000000000 -0400
-@@ -51,7 +51,7 @@
+ /* ld script to make i386 Linux kernel
+  * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>;
+@@ -51,7 +52,7 @@
  
    _edata = .;                 /* End of data section */
  
 -  . = ALIGN(8192);            /* init_task */
-+  . = ALIGN(16384);           /* init_task */
++  . = ALIGN(THREAD_SIZE);             /* init_task */
    .data.init_task : { *(.data.init_task) }
  
    entry_tramp_start = .;
-Index: linux-2.4.21/include/asm-i386/current.h
 ===================================================================
 --- linux-2.4.21.orig/include/asm-i386/current.h       1998-08-14 19:35:22.000000000 -0400
 +++ linux-2.4.21/include/asm-i386/current.h    2004-07-16 18:00:14.000000000 -0400
index f682a00..dc68b3e 100644 (file)
@@ -316,15 +316,3 @@ Index: kernel-2.4.21/include/linux/sched.h
  
  extern unsigned long event;
  
-Index: kernel-2.4.21/include/asm-x86_64/current.h
-===================================================================
---- kernel-2.4.21.orig/include/asm-x86_64/current.h    2003-06-13 15:26:52.000000000 -0700
-+++ kernel-2.4.21/include/asm-x86_64/current.h 2003-12-04 12:00:13.000000000 -0800
-@@ -5,6 +5,7 @@
- struct task_struct;
- #include <asm/pda.h>
-+#include <asm/page.h>
- static inline struct task_struct *get_current(void) 
- { 
diff --git a/lustre/kernel_patches/patches/dev_read_only.patch b/lustre/kernel_patches/patches/dev_read_only.patch
deleted file mode 100644 (file)
index bac5ebf..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
- 0 files changed
-
---- linux-2.4.18-17.8.0/drivers/block/blkpg.c~dev_read_only    2002-12-06 14:52:29.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/drivers/block/blkpg.c      2002-12-06 14:52:29.000000000 -0800
-@@ -297,3 +297,38 @@ int blk_ioctl(kdev_t dev, unsigned int c
- }
- EXPORT_SYMBOL(blk_ioctl);
-+
-+#define NUM_DEV_NO_WRITE 16
-+static int dev_no_write[NUM_DEV_NO_WRITE];
-+
-+/*
-+ * Debug code for turning block devices "read-only" (will discard writes
-+ * silently).  This is for filesystem crash/recovery testing.
-+ */
-+void dev_set_rdonly(kdev_t dev, int no_write)
-+{
-+      if (dev) {
-+              printk(KERN_WARNING "Turning device %s read-only\n",
-+                     bdevname(dev));
-+              dev_no_write[no_write] = 0xdead0000 + dev;
-+      }
-+}
-+
-+int dev_check_rdonly(kdev_t dev) {
-+      int i;
-+
-+      for (i = 0; i < NUM_DEV_NO_WRITE; i++) {
-+              if ((dev_no_write[i] & 0xffff0000) == 0xdead0000 &&
-+                  dev == (dev_no_write[i] & 0xffff))
-+                      return 1;
-+      }
-+      return 0;
-+}
-+
-+void dev_clear_rdonly(int no_write) {
-+      dev_no_write[no_write] = 0;
-+}
-+
-+EXPORT_SYMBOL(dev_set_rdonly);
-+EXPORT_SYMBOL(dev_check_rdonly);
-+EXPORT_SYMBOL(dev_clear_rdonly);
---- linux-2.4.18-17.8.0/drivers/block/loop.c~dev_read_only     2002-12-06 14:52:29.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/drivers/block/loop.c       2002-12-06 14:52:29.000000000 -0800
-@@ -491,6 +491,9 @@ static int loop_make_request(request_que
-       spin_unlock_irq(&lo->lo_lock);
-       if (rw == WRITE) {
-+              if (dev_check_rdonly(rbh->b_rdev))
-+                      goto err;
-+
-               if (lo->lo_flags & LO_FLAGS_READ_ONLY)
-                       goto err;
-       } else if (rw == READA) {
---- linux-2.4.18-17.8.0/drivers/ide/ide-disk.c~dev_read_only   2002-12-06 14:52:29.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/drivers/ide/ide-disk.c     2002-12-06 14:52:29.000000000 -0800
-@@ -557,6 +557,10 @@ static ide_startstop_t lba_48_rw_disk (i
-  */
- static ide_startstop_t do_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block)
- {
-+      if (rq->cmd == WRITE && dev_check_rdonly(rq->rq_dev)) {
-+              ide_end_request(1, HWGROUP(drive));
-+              return ide_stopped;
-+      }
-       if (IDE_CONTROL_REG)
-               OUT_BYTE(drive->ctl,IDE_CONTROL_REG);
-
-_
diff --git a/lustre/kernel_patches/patches/dev_read_only_2.4.20.patch b/lustre/kernel_patches/patches/dev_read_only_2.4.20.patch
deleted file mode 100644 (file)
index 7df8dbe..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-Index: linux-2.4.20-8/drivers/block/blkpg.c
-===================================================================
---- linux-2.4.20-8.orig/drivers/block/blkpg.c  2002-08-03 08:39:43.000000000 +0800
-+++ linux-2.4.20-8/drivers/block/blkpg.c       2003-12-08 15:50:20.000000000 +0800
-@@ -296,3 +296,42 @@
- }
- EXPORT_SYMBOL(blk_ioctl);
-+
-+  
-+
-+#define NUM_DEV_NO_WRITE 16
-+static int dev_no_write[NUM_DEV_NO_WRITE];
-+
-+/*
-+ * Debug code for turning block devices "read-only" (will discard writes
-+ * silently).  This is for filesystem crash/recovery testing.
-+ */
-+void dev_set_rdonly(kdev_t dev, int no_write)
-+{
-+      if (dev) {
-+              printk(KERN_WARNING "Turning device %s read-only\n",
-+                     bdevname(dev));
-+              dev_no_write[no_write] = 0xdead0000 + dev;
-+      }
-+}
-+
-+int dev_check_rdonly(kdev_t dev) {
-+      int i;
-+
-+      for (i = 0; i < NUM_DEV_NO_WRITE; i++) {
-+              if ((dev_no_write[i] & 0xffff0000) == 0xdead0000 &&
-+                  dev == (dev_no_write[i] & 0xffff))
-+                      return 1;
-+      }
-+      return 0;
-+}
-+
-+void dev_clear_rdonly(int no_write) {
-+      dev_no_write[no_write] = 0;
-+}
-+
-+EXPORT_SYMBOL(dev_set_rdonly);
-+EXPORT_SYMBOL(dev_check_rdonly);
-+EXPORT_SYMBOL(dev_clear_rdonly);
-+
-+
-Index: linux-2.4.20-8/drivers/block/ll_rw_blk.c
-===================================================================
---- linux-2.4.20-8.orig/drivers/block/ll_rw_blk.c      2003-12-08 15:47:50.000000000 +0800
-+++ linux-2.4.20-8/drivers/block/ll_rw_blk.c   2003-12-08 15:51:17.000000000 +0800
-@@ -1164,6 +1164,10 @@
-                       buffer_IO_error(bh);
-                       break;
-               }
-+               if ((dev_check_rdonly(bh->b_rdev))&&(rw & WRITE)) {
-+                        bh->b_end_io(bh, 0);
-+                        break;
-+                }
-       } while (q->make_request_fn(q, rw, bh));
- }
diff --git a/lustre/kernel_patches/patches/dump_netdev.patch b/lustre/kernel_patches/patches/dump_netdev.patch
deleted file mode 100644 (file)
index cd8ec53..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
- drivers/net/3c59x.c            |   27 +++++++++++++++++++++++++++
- drivers/net/e100/e100_main.c   |   19 +++++++++++++++++++
- drivers/net/e1000/e1000_main.c |   13 +++++++++++++
- drivers/net/eepro100.c         |   21 +++++++++++++++++++++
- drivers/net/smc-ultra.c        |   11 +++++++++++
- drivers/net/tlan.c             |   14 +++++++++++++-
- drivers/net/tulip/tulip_core.c |   22 ++++++++++++++++++++++
- include/linux/netdevice.h      |    3 +++
- net/core/dev.c                 |   18 ++++++++++++++++--
- 9 files changed, 145 insertions(+), 3 deletions(-)
-
---- linux-2.6.0-test1/drivers/net/3c59x.c~dump_netdev  2003-07-22 01:14:04.000000000 -0600
-+++ linux-2.6.0-test1-braam/drivers/net/3c59x.c        2003-07-22 01:15:10.000000000 -0600
-@@ -900,6 +900,7 @@ static void set_rx_mode(struct net_devic
- static int vortex_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
- static void vortex_tx_timeout(struct net_device *dev);
- static void acpi_set_WOL(struct net_device *dev);
-+static void vorboom_poll(struct net_device *dev);
\f
- /* This driver uses 'options' to pass the media type, full-duplex flag, etc. */
- /* Option count limit only -- unlimited interfaces are supported. */
-@@ -1448,6 +1449,9 @@ static int __devinit vortex_probe1(struc
-       dev->set_multicast_list = set_rx_mode;
-       dev->tx_timeout = vortex_tx_timeout;
-       dev->watchdog_timeo = (watchdog * HZ) / 1000;
-+#ifdef HAVE_POLL_CONTROLLER
-+      dev->poll_controller = &vorboom_poll;
-+#endif
-       if (pdev) {
-               vp->pm_state_valid = 1;
-               pci_save_state(VORTEX_PCI(vp), vp->power_state);
-@@ -2438,6 +2442,29 @@ handler_exit:
-       return IRQ_HANDLED;
- }
-+#ifdef HAVE_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 vorboom_poll (struct net_device *dev)
-+{
-+      struct vortex_private *vp = (struct vortex_private *)dev->priv;
-+
-+      disable_irq(dev->irq);
-+      if (vp->full_bus_master_tx)
-+              boomerang_interrupt(dev->irq, dev, 0);
-+      else
-+              vortex_interrupt(dev->irq, dev, 0);
-+      enable_irq(dev->irq);
-+}
-+
-+#endif
-+
-+
- static int vortex_rx(struct net_device *dev)
- {
-       struct vortex_private *vp = (struct vortex_private *)dev->priv;
---- linux-2.6.0-test1/drivers/net/e100/e100_main.c~dump_netdev 2003-07-13 21:34:02.000000000 -0600
-+++ linux-2.6.0-test1-braam/drivers/net/e100/e100_main.c       2003-07-22 01:14:38.000000000 -0600
-@@ -551,6 +551,22 @@ e100_trigger_SWI(struct e100_private *bd
-       readw(&(bdp->scb->scb_status)); /* flushes last write, read-safe */
- }
-+#ifdef HAVE_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
-+e100_poll(struct net_device *dev)
-+{
-+      disable_irq(dev->irq);
-+      e100intr(dev->irq, dev, NULL);
-+      enable_irq(dev->irq);
-+}
-+#endif
-+
- static int __devinit
- e100_found1(struct pci_dev *pcid, const struct pci_device_id *ent)
- {
-@@ -569,6 +585,9 @@ e100_found1(struct pci_dev *pcid, const 
-       SET_MODULE_OWNER(dev);
-+#ifdef HAVE_POLL_CONTROLLER
-+      dev->poll_controller = &e100_poll;
-+#endif
-       if (first_time) {
-               first_time = false;
-               printk(KERN_NOTICE "%s - version %s\n",
---- linux-2.6.0-test1/drivers/net/e1000/e1000_main.c~dump_netdev       2003-07-13 21:32:43.000000000 -0600
-+++ linux-2.6.0-test1-braam/drivers/net/e1000/e1000_main.c     2003-07-22 01:14:38.000000000 -0600
-@@ -138,6 +138,7 @@ static void e1000_leave_82542_rst(struct
- static inline void e1000_rx_checksum(struct e1000_adapter *adapter,
-                                      struct e1000_rx_desc *rx_desc,
-                                      struct sk_buff *skb);
-+static void e1000_Poll(struct net_device *dev);
- static void e1000_tx_timeout(struct net_device *dev);
- static void e1000_tx_timeout_task(struct net_device *dev);
- static void e1000_smartspeed(struct e1000_adapter *adapter);
-@@ -402,6 +403,9 @@ e1000_probe(struct pci_dev *pdev,
-       adapter->bd_number = cards_found;
-+#ifdef HAVE_POLL_CONTROLLER
-+      netdev->poll_controller = &e1000_Poll;
-+#endif
-       /* setup the private structure */
-       if(e1000_sw_init(adapter))
-@@ -1700,6 +1704,15 @@ e1000_xmit_frame(struct sk_buff *skb, st
-       return 0;
- }
-+#ifdef HAVE_POLL_CONTROLLER
-+static void e1000_Poll(struct net_device *dev)
-+{
-+      disable_irq(dev->irq);
-+      e1000_intr(dev->irq, dev, NULL);
-+      enable_irq(dev->irq);
-+}
-+#endif
-+
- /**
-  * e1000_tx_timeout - Respond to a Tx Hang
-  * @netdev: network interface device structure
---- linux-2.6.0-test1/drivers/net/eepro100.c~dump_netdev       2003-07-13 21:35:52.000000000 -0600
-+++ linux-2.6.0-test1-braam/drivers/net/eepro100.c     2003-07-22 01:14:38.000000000 -0600
-@@ -543,6 +543,7 @@ static void speedo_refill_rx_buffers(str
- static int speedo_rx(struct net_device *dev);
- static void speedo_tx_buffer_gc(struct net_device *dev);
- static irqreturn_t speedo_interrupt(int irq, void *dev_instance, struct pt_regs *regs);
-+static void poll_speedo (struct net_device *dev);
- static int speedo_close(struct net_device *dev);
- static struct net_device_stats *speedo_get_stats(struct net_device *dev);
- static int speedo_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
-@@ -885,6 +886,9 @@ static int __devinit speedo_found1(struc
-       dev->get_stats = &speedo_get_stats;
-       dev->set_multicast_list = &set_rx_mode;
-       dev->do_ioctl = &speedo_ioctl;
-+#ifdef HAVE_POLL_CONTROLLER
-+      dev->poll_controller = &poll_speedo;
-+#endif
-       if (register_netdevice(dev))
-               goto err_free_unlock;
-@@ -1675,6 +1679,23 @@ static irqreturn_t speedo_interrupt(int 
-       return IRQ_RETVAL(handled);
- }
-+#ifdef HAVE_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_speedo (struct net_device *dev)
-+{
-+      disable_irq(dev->irq);
-+      speedo_interrupt (dev->irq, dev, NULL);
-+      enable_irq(dev->irq);
-+}
-+
-+#endif
-+
- static inline struct RxFD *speedo_rx_alloc(struct net_device *dev, int entry)
- {
-       struct speedo_private *sp = (struct speedo_private *)dev->priv;
---- linux-2.6.0-test1/drivers/net/smc-ultra.c~dump_netdev      2003-07-13 21:30:47.000000000 -0600
-+++ linux-2.6.0-test1-braam/drivers/net/smc-ultra.c    2003-07-22 01:14:38.000000000 -0600
-@@ -122,6 +122,14 @@ MODULE_DEVICE_TABLE(isapnp, ultra_device
- #define ULTRA_IO_EXTENT 32
- #define EN0_ERWCNT            0x08    /* Early receive warning count. */
\f
-+
-+static void ultra_poll(struct net_device *dev)
-+{
-+      disable_irq(dev->irq);
-+      ei_interrupt(dev->irq, dev, NULL);
-+      enable_irq(dev->irq);
-+}
-+
- /*    Probe for the Ultra.  This looks like a 8013 with the station
-       address PROM at I/O ports <base>+8 to <base>+13, with a checksum
-       following.
-@@ -134,6 +142,9 @@ int __init ultra_probe(struct net_device
-       SET_MODULE_OWNER(dev);
-+#ifdef HAVE_POLL_CONTROLLER
-+      dev->poll_controller = &ultra_poll;
-+#endif
-       if (base_addr > 0x1ff)          /* Check a single specified location. */
-               return ultra_probe1(dev, base_addr);
-       else if (base_addr != 0)        /* Don't probe at all. */
---- linux-2.6.0-test1/drivers/net/tlan.c~dump_netdev   2003-07-13 21:30:42.000000000 -0600
-+++ linux-2.6.0-test1-braam/drivers/net/tlan.c 2003-07-22 01:14:38.000000000 -0600
-@@ -345,6 +345,8 @@ static int TLan_EeSendByte( u16, u8, int
- static void   TLan_EeReceiveByte( u16, u8 *, int );
- static int    TLan_EeReadByte( struct net_device *, u8, u8 * );
-+static void   TLan_Poll(struct net_device *);
-+
- static void 
- TLan_StoreSKB( struct tlan_list_tag *tag, struct sk_buff *skb)
-@@ -890,6 +892,9 @@ static int TLan_Init( struct net_device 
-       dev->get_stats = &TLan_GetStats;
-       dev->set_multicast_list = &TLan_SetMulticastList;
-       dev->do_ioctl = &TLan_ioctl;
-+#ifdef HAVE_POLL_CONTROLLER
-+      dev->poll_controller = &TLan_Poll;
-+#endif
-       dev->tx_timeout = &TLan_tx_timeout;
-       dev->watchdog_timeo = TX_TIMEOUT;
-@@ -1173,7 +1178,14 @@ static irqreturn_t TLan_HandleInterrupt(
-       return IRQ_HANDLED;
- } /* TLan_HandleInterrupts */
--
-+#ifdef HAVE_POLL_CONTROLLER
-+static void TLan_Poll(struct net_device *dev)
-+{
-+      disable_irq(dev->irq);
-+      TLan_HandleInterrupt(dev->irq, dev, NULL);
-+      enable_irq(dev->irq);
-+}
-+#endif
-       /***************************************************************
---- linux-2.6.0-test1/drivers/net/tulip/tulip_core.c~dump_netdev       2003-07-13 21:34:48.000000000 -0600
-+++ linux-2.6.0-test1-braam/drivers/net/tulip/tulip_core.c     2003-07-22 01:14:38.000000000 -0600
-@@ -245,6 +245,7 @@ static void tulip_down(struct net_device
- static struct net_device_stats *tulip_get_stats(struct net_device *dev);
- static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
- static void set_rx_mode(struct net_device *dev);
-+static void poll_tulip(struct net_device *dev);
-@@ -1630,6 +1631,9 @@ static int __devinit tulip_init_one (str
-       dev->get_stats = tulip_get_stats;
-       dev->do_ioctl = private_ioctl;
-       dev->set_multicast_list = set_rx_mode;
-+#ifdef HAVE_POLL_CONTROLLER
-+      dev->poll_controller = &poll_tulip;
-+#endif
-       if (register_netdev(dev))
-               goto err_out_free_ring;
-@@ -1787,6 +1791,24 @@ static void __devexit tulip_remove_one (
- }
-+#ifdef HAVE_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_tulip (struct net_device *dev)
-+{
-+       disable_irq(dev->irq);
-+       tulip_interrupt (dev->irq, dev, NULL);
-+       enable_irq(dev->irq);
-+}
-+
-+#endif
-+
-+
- static struct pci_driver tulip_driver = {
-       .name           = DRV_NAME,
-       .id_table       = tulip_pci_tbl,
---- linux-2.6.0-test1/include/linux/netdevice.h~dump_netdev    2003-07-22 01:14:05.000000000 -0600
-+++ linux-2.6.0-test1-braam/include/linux/netdevice.h  2003-07-22 01:14:38.000000000 -0600
-@@ -446,6 +446,9 @@ struct net_device
-                                                    unsigned char *haddr);
-       int                     (*neigh_setup)(struct net_device *dev, struct neigh_parms *);
-       int                     (*accept_fastpath)(struct net_device *, struct dst_entry*);
-+#define HAVE_POLL_CONTROLLER
-+      void                    (*poll_controller)(struct net_device *dev);
-+      int                     (*rx_hook)(struct sk_buff *skb);
-       /* bridge stuff */
-       struct net_bridge_port  *br_port;
---- linux-2.6.0-test1/net/core/dev.c~dump_netdev       2003-07-22 01:14:05.000000000 -0600
-+++ linux-2.6.0-test1-braam/net/core/dev.c     2003-07-22 01:14:38.000000000 -0600
-@@ -1349,8 +1349,6 @@ int netif_rx(struct sk_buff *skb)
-       struct softnet_data *queue;
-       unsigned long flags;
--      if (!skb->stamp.tv_sec)
--              do_gettimeofday(&skb->stamp);
-       /*
-        * The code is rearranged so that the path is the most
-@@ -1360,6 +1358,13 @@ int netif_rx(struct sk_buff *skb)
-       this_cpu = smp_processor_id();
-       queue = &__get_cpu_var(softnet_data);
-+      if (skb->dev->rx_hook)
-+              goto rx_hook;
-+rx_hook_continue:
-+
-+      if (!skb->stamp.tv_sec )
-+              do_gettimeofday(&skb->stamp);
-+
-       netdev_rx_stat[this_cpu].total++;
-       if (queue->input_pkt_queue.qlen <= netdev_max_backlog) {
-               if (queue->input_pkt_queue.qlen) {
-@@ -1402,6 +1407,15 @@ drop:
-       kfree_skb(skb);
-       return NET_RX_DROP;
-+rx_hook:
-+      {
-+              int ret;
-+
-+              ret = skb->dev->rx_hook(skb);
-+              if (ret == NET_RX_DROP)
-+                      goto drop;
-+              goto rx_hook_continue;
-+      }
- }
- /* Deliver skb to an old protocol, which is not threaded well
-
-_
diff --git a/lustre/kernel_patches/patches/dump_netdev_over_netpoll.patch b/lustre/kernel_patches/patches/dump_netdev_over_netpoll.patch
deleted file mode 100644 (file)
index b93e2f9..0000000
+++ /dev/null
@@ -1,761 +0,0 @@
-Index: linux-2.6.0-test6/drivers/dump/dump_netdev.c
-===================================================================
---- linux-2.6.0-test6.orig/drivers/dump/dump_netdev.c  2003-10-07 16:08:57.000000000 +0800
-+++ linux-2.6.0-test6/drivers/dump/dump_netdev.c       2003-10-09 17:36:18.000000000 +0800
-@@ -14,6 +14,7 @@
-  *
-  * Copyright (C) 2001  Ingo Molnar <mingo@redhat.com>
-  * Copyright (C) 2002 International Business Machines Corp. 
-+ * Rewrited with netpoll by wangdi <wangdi@clusterfs.com>
-  *
-  *  This code is released under version 2 of the GNU GPL.
-  */
-@@ -26,29 +27,19 @@
- #include <linux/module.h>
- #include <linux/dump.h>
- #include <linux/dump_netdev.h>
-+#include <linux/netpoll.h>
- #include <asm/unaligned.h>
- static int startup_handshake;
- static int page_counter;
--static struct net_device *dump_ndev;
- static struct in_device *dump_in_dev;
--static u16 source_port, target_port;
--static u32 source_ip, target_ip;
--static unsigned char daddr[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff} ;
--static spinlock_t dump_skb_lock = SPIN_LOCK_UNLOCKED;
--static int dump_nr_skbs;
--static struct sk_buff *dump_skb;
- static unsigned long flags_global;
- static int netdump_in_progress;
- static char device_name[IFNAMSIZ];
-+int new_req = 0;
-+static req_t req;
--/*
-- * security depends on the trusted path between the netconsole
-- * server and netconsole client, since none of the packets are
-- * encrypted. The random magic number protects the protocol
-- * against spoofing.
-- */
- static u64 dump_magic;
- #define MAX_UDP_CHUNK 1460
-@@ -64,300 +55,28 @@
- #define MAX_SKB_SIZE \
-               (MAX_UDP_CHUNK + sizeof(struct udphdr) + \
-                               sizeof(struct iphdr) + sizeof(struct ethhdr))
-+static char send_buffer[MAX_UDP_CHUNK];
--static void
--dump_refill_skbs(void)
--{
--      struct sk_buff *skb;
--      unsigned long flags;
--
--      spin_lock_irqsave(&dump_skb_lock, flags);
--      while (dump_nr_skbs < DUMP_MAX_SKBS) {
--              skb = alloc_skb(MAX_SKB_SIZE, GFP_ATOMIC);
--              if (!skb)
--                      break;
--              if (dump_skb)
--                      skb->next = dump_skb;
--              else
--                      skb->next = NULL;
--              dump_skb = skb;
--              dump_nr_skbs++;
--      }
--      spin_unlock_irqrestore(&dump_skb_lock, flags);
--}
--
--static struct
--sk_buff * dump_get_skb(void)
--{
--      struct sk_buff *skb;
--      unsigned long flags;
--
--      spin_lock_irqsave(&dump_skb_lock, flags);
--      skb = dump_skb;
--      if (skb) {
--              dump_skb = skb->next;
--              skb->next = NULL;
--              dump_nr_skbs--;
--      }
--      spin_unlock_irqrestore(&dump_skb_lock, flags);
--        
--      return skb;
--}
--
--/*
-- * Zap completed output skbs.
-- */
--static void
--zap_completion_queue(void)
--{
--      int count;
--      unsigned long flags;
--      int cpu = smp_processor_id();
--      struct softnet_data *softnet_data;
--              
--
--      softnet_data = &__get_cpu_var(softnet_data);
--      count=0;
--      if (softnet_data[cpu].completion_queue) {
--              struct sk_buff *clist;
--      
--              local_irq_save(flags);
--              clist = softnet_data[cpu].completion_queue;
--              softnet_data[cpu].completion_queue = NULL;
--              local_irq_restore(flags);
--
--              while (clist != NULL) {
--                      struct sk_buff *skb = clist;
--                      clist = clist->next;
--                      __kfree_skb(skb);
--                      count++;
--                      if (count > 10000)
--                              printk("Error in sk list\n");
--              }
--      }
--}
--
--static void
--dump_send_skb(struct net_device *dev, const char *msg, unsigned int msg_len,
--              reply_t *reply)
--{
--      int once = 1;
--      int total_len, eth_len, ip_len, udp_len, count = 0;
--      struct sk_buff *skb;
--      struct udphdr *udph;
--      struct iphdr *iph;
--      struct ethhdr *eth; 
--
--      udp_len = msg_len + HEADER_LEN + sizeof(*udph);
--      ip_len = eth_len = udp_len + sizeof(*iph);
--      total_len = eth_len + ETH_HLEN;
--
--repeat_loop:
--      zap_completion_queue();
--      if (dump_nr_skbs < DUMP_MAX_SKBS)
--              dump_refill_skbs();
--
--      skb = alloc_skb(total_len, GFP_ATOMIC);
--      if (!skb) {
--              skb = dump_get_skb();
--              if (!skb) {
--                      count++;
--                      if (once && (count == 1000000)) {
--                              printk("possibly FATAL: out of netconsole "
--                                      "skbs!!! will keep retrying.\n");
--                              once = 0;
--                      }
--                      dev->poll_controller(dev);
--                      goto repeat_loop;
--              }
--      }
--
--      atomic_set(&skb->users, 1);
--      skb_reserve(skb, total_len - msg_len - HEADER_LEN);
--      skb->data[0] = NETCONSOLE_VERSION;
--
--      put_unaligned(htonl(reply->nr), (u32 *) (skb->data + 1));
--      put_unaligned(htonl(reply->code), (u32 *) (skb->data + 5));
--      put_unaligned(htonl(reply->info), (u32 *) (skb->data + 9));
--
--      memcpy(skb->data + HEADER_LEN, msg, msg_len);
--      skb->len += msg_len + HEADER_LEN;
--
--      udph = (struct udphdr *) skb_push(skb, sizeof(*udph));
--      udph->source = source_port;
--      udph->dest = target_port;
--      udph->len = htons(udp_len);
--      udph->check = 0;
--
--      iph = (struct iphdr *)skb_push(skb, sizeof(*iph));
--
--      iph->version  = 4;
--      iph->ihl      = 5;
--      iph->tos      = 0;
--      iph->tot_len  = htons(ip_len);
--      iph->id       = 0;
--      iph->frag_off = 0;
--      iph->ttl      = 64;
--      iph->protocol = IPPROTO_UDP;
--      iph->check    = 0;
--      iph->saddr    = source_ip;
--      iph->daddr    = target_ip;
--      iph->check    = ip_fast_csum((unsigned char *)iph, iph->ihl);
--
--      eth = (struct ethhdr *) skb_push(skb, ETH_HLEN);
--
--      eth->h_proto = htons(ETH_P_IP);
--      memcpy(eth->h_source, dev->dev_addr, dev->addr_len);
--      memcpy(eth->h_dest, daddr, dev->addr_len);
-+extern void handle_sysrq(int key, struct pt_regs *pt_regs, struct tty_struct *tty);
-+static void dump_rx_hook(struct netpoll *np, int port, char *msg, int len);
--      count=0;
--repeat_poll:
--      spin_lock(&dev->xmit_lock);
--      dev->xmit_lock_owner = smp_processor_id();
--
--      count++;
--
--
--      if (netif_queue_stopped(dev)) {
--              dev->xmit_lock_owner = -1;
--              spin_unlock(&dev->xmit_lock);
--
--              dev->poll_controller(dev);
--              zap_completion_queue();
--
--
--              goto repeat_poll;
--      }
--
--      dev->hard_start_xmit(skb, dev);
--
--      dev->xmit_lock_owner = -1;
--      spin_unlock(&dev->xmit_lock);
--}
--
--static unsigned short
--udp_check(struct udphdr *uh, int len, unsigned long saddr, unsigned long daddr,
--              unsigned long base)
--{
--      return csum_tcpudp_magic(saddr, daddr, len, IPPROTO_UDP, base);
--}
--
--static int
--udp_checksum_init(struct sk_buff *skb, struct udphdr *uh,
--                           unsigned short ulen, u32 saddr, u32 daddr)
--{
--      if (uh->check == 0) {
--              skb->ip_summed = CHECKSUM_UNNECESSARY;
--      } else if (skb->ip_summed == CHECKSUM_HW) {
--              skb->ip_summed = CHECKSUM_UNNECESSARY;
--              if (!udp_check(uh, ulen, saddr, daddr, skb->csum))
--                      return 0;
--              skb->ip_summed = CHECKSUM_NONE;
--      }
--      if (skb->ip_summed != CHECKSUM_UNNECESSARY)
--              skb->csum = csum_tcpudp_nofold(saddr, daddr, ulen,
--                              IPPROTO_UDP, 0);
--      /* Probably, we should checksum udp header (it should be in cache
--       * in any case) and data in tiny packets (< rx copybreak).
--       */
--      return 0;
--}
--
--static __inline__ int
--__udp_checksum_complete(struct sk_buff *skb)
--{
--      return (unsigned short)csum_fold(skb_checksum(skb, 0, skb->len,
--                              skb->csum));
--}
--
--static __inline__
--int udp_checksum_complete(struct sk_buff *skb)
--{
--      return skb->ip_summed != CHECKSUM_UNNECESSARY &&
--              __udp_checksum_complete(skb);
--}
--
--int new_req = 0;
--static req_t req;
-+static struct netpoll np = {
-+      .name = "netdumpoe",
-+      .dev_name = "eth0",
-+      .rx_hook = dump_rx_hook,
-+      .local_port = 0,
-+      .remote_port = 0,
-+      .remote_mac = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-+};
--static int
--dump_rx_hook(struct sk_buff *skb)
-+static void dump_rx_hook(struct netpoll *np, int port, char *msg, int len)
- {
--      int proto;
--      struct iphdr *iph;
--      struct udphdr *uh;
--      __u32 len, saddr, daddr, ulen;
-       req_t *__req;
--
--      /* 
--       * First check if were are dumping or doing startup handshake, if
--       * not quickly return.
--       */
-+      
-       if (!netdump_in_progress)
--              return NET_RX_SUCCESS;
-+               goto out;
-+      __req = (req_t *)msg;
--      if (skb->dev->type != ARPHRD_ETHER)
--              goto out;
--
--      proto = ntohs(skb->mac.ethernet->h_proto);
--      if (proto != ETH_P_IP)
--              goto out;
--
--      if (skb->pkt_type == PACKET_OTHERHOST)
--              goto out;
--
--      if (skb_shared(skb))
--              goto out;
--
--       /* IP header correctness testing: */
--      iph = (struct iphdr *)skb->data;
--      if (!pskb_may_pull(skb, sizeof(struct iphdr)))
--              goto out;
--
--      if (iph->ihl < 5 || iph->version != 4)
--              goto out;
--
--      if (!pskb_may_pull(skb, iph->ihl*4))
--              goto out;
--
--      if (ip_fast_csum((u8 *)iph, iph->ihl) != 0)
--              goto out;
--
--      len = ntohs(iph->tot_len);
--      if (skb->len < len || len < iph->ihl*4)
--              goto out;
--
--      saddr = iph->saddr;
--      daddr = iph->daddr;
--      if (iph->protocol != IPPROTO_UDP)
--              goto out;
--
--      if (source_ip != daddr)
--              goto out;
--
--      if (target_ip != saddr)
--              goto out;
--
--      len -= iph->ihl*4;
--      uh = (struct udphdr *)(((char *)iph) + iph->ihl*4);
--      ulen = ntohs(uh->len);
--
--      if (ulen != len || ulen < (sizeof(*uh) + sizeof(*__req)))
--              goto out;
--
--      if (udp_checksum_init(skb, uh, ulen, saddr, daddr) < 0)
--              goto out;
--
--      if (udp_checksum_complete(skb))
--              goto out;
--
--      if (source_port != uh->dest)
--              goto out;
--
--      if (target_port != uh->source)
--              goto out;
--
--      __req = (req_t *)(uh + 1);
-       if ((ntohl(__req->command) != COMM_GET_MAGIC) &&
-           (ntohl(__req->command) != COMM_HELLO) &&
-           (ntohl(__req->command) != COMM_START_WRITE_NETDUMP_ACK) &&
-@@ -372,11 +91,27 @@
-       req.nr = ntohl(__req->nr);
-       new_req = 1;
- out:
--      return NET_RX_DROP;
-+      return;
- }
- static void
--dump_send_mem(struct net_device *dev, req_t *req, const char* buff, size_t len)
-+dump_send_skb(const char *msg, unsigned int msg_len, reply_t *reply)
-+{
-+      /*copy the msg to send buffer*/
-+      send_buffer[0] = NETCONSOLE_VERSION;
-+
-+      put_unaligned(htonl(reply->nr), (u32 *) (send_buffer + 1));
-+      put_unaligned(htonl(reply->code), (u32 *) (send_buffer + 5));
-+      put_unaligned(htonl(reply->info), (u32 *) (send_buffer + 9));
-+      memcpy(send_buffer + 1 + sizeof(reply_t), msg, msg_len);
-+
-+      if (!np.dev)
-+              return;
-+      netpoll_send_udp(&np, send_buffer, (msg_len + 1 + sizeof(reply_t)));
-+}
-+
-+static void
-+dump_send_mem( req_t *req, const char* buff, size_t len)
- {
-       int i;
-@@ -392,7 +127,7 @@
-               unsigned int offset = i*1024;
-               reply.code = REPLY_MEM;
-               reply.info = offset;
--                dump_send_skb(dev, buff + offset, 1024, &reply);
-+                dump_send_skb(buff + offset, 1024, &reply);
-       }
- }
- static void dump_do_sysrq(int key)
-@@ -400,9 +135,16 @@
-         struct pt_regs regs;
-         
-       get_current_regs(&regs);
--      handle_sysrq(key, &regs, NULL, NULL);
-+      handle_sysrq(key, &regs, NULL);
- }
-+static void netdump_netpoll_poll(struct netpoll *np)
-+{
-+      /*FIXME netpoll_set_trap(0) may have impacts to other parts */
-+      netpoll_set_trap(1);
-+      netpoll_poll(np);
-+      netpoll_set_trap(0);
-+}
- /*
-  * This function waits for the client to acknowledge the receipt
-  * of the netdump startup reply, with the possibility of packets
-@@ -433,24 +175,27 @@
-       
-       /* send 300 handshake packets before declaring failure */
-       for (i = 0; i < 300; i++) {
--              dump_send_skb(dump_ndev, tmp, strlen(tmp), &reply);
--
-+              dump_send_skb(tmp, strlen(tmp), &reply);
-+#if 0
-               /* wait 1 sec */
-+                      udelay(100);
-+                      netpoll_poll(&np);
-+                      if (new_req)
-+                              break;
-+              }
-+#endif
-               for (j = 0; j < 10000; j++) {
-                       udelay(100);
--                      dump_ndev->poll_controller(dump_ndev);
--                      zap_completion_queue();
-+                      netdump_netpoll_poll(&np);
-                       if (new_req)
-                               break;
-               }
--
-               /* 
-                * if there is no new request, try sending the handshaking
-                * packet again
-                */
-               if (!new_req)
-                       continue;
--
-               /* 
-                * check if the new request is of the expected type,
-                * if so, return, else try sending the handshaking
-@@ -504,10 +249,12 @@
-       repeatCounter = 0;
-       total_loop = 0;
-       while (1) {
--                if (!new_req) {
--                      dump_ndev->poll_controller(dump_ndev);
--                      zap_completion_queue();
-+                while (!new_req) {
-+                      netdump_netpoll_poll(&np);
-+                      if (new_req)
-+                              break;
-               }
-+#if 0
-               if (!new_req) {
-                       repeatCounter++;
-@@ -532,13 +279,15 @@
-               repeatCounter = 0;
-               counter = 0;
-               total_loop = 0;
-+#endif
-+              
-               new_req = 0;
-               switch (req.command) {
-               case COMM_NONE:
-                       break;
-               case COMM_SEND_MEM:
--                      dump_send_mem(dump_ndev, &req, buff, len);
-+                      dump_send_mem(&req, buff, len);
-                       break;
-               case COMM_EXIT:
-@@ -549,10 +298,11 @@
-               case COMM_HELLO:
-                       sprintf(tmp, "Hello, this is netdump version "
-                                       "0.%02d\n", NETCONSOLE_VERSION);
-+                      
-                       reply.code = REPLY_HELLO;
-                       reply.nr = req.nr;
-                         reply.info = net_dev->curr_offset;
--                      dump_send_skb(dump_ndev, tmp, strlen(tmp), &reply);
-+                      dump_send_skb(tmp, strlen(tmp), &reply);
-                       break;
-               case COMM_GET_PAGE_SIZE:
-@@ -560,7 +310,7 @@
-                       reply.code = REPLY_PAGE_SIZE;
-                       reply.nr = req.nr;
-                       reply.info = PAGE_SIZE;
--                      dump_send_skb(dump_ndev, tmp, strlen(tmp), &reply);
-+                      dump_send_skb(tmp, strlen(tmp), &reply);
-                       break;
-               case COMM_GET_NR_PAGES:
-@@ -569,15 +319,14 @@
-                       reply.info = num_physpages;
-                         reply.info = page_counter;
-                       sprintf(tmp, "Number of pages: %ld\n", num_physpages);
--                      dump_send_skb(dump_ndev, tmp, strlen(tmp), &reply);
-+                      dump_send_skb(tmp, strlen(tmp), &reply);
-                       break;
-               case COMM_GET_MAGIC:
-                       reply.code = REPLY_MAGIC;
-                       reply.nr = req.nr;
-                       reply.info = NETCONSOLE_VERSION;
--                      dump_send_skb(dump_ndev, (char *)&dump_magic,
--                                      sizeof(dump_magic), &reply);
-+                      dump_send_skb((char *)&dump_magic, sizeof(dump_magic), &reply);
-                       break;
-                 case COMM_SYSRQ:
-                       dump_do_sysrq(req.from);
-@@ -585,7 +334,7 @@
-                       reply.nr = req.nr;
-                       reply.info = req.from;
-                       sprintf(tmp, "SYSRQ command %d \n", req.from);
--                      dump_send_skb(dump_ndev, tmp, strlen(tmp), &reply);
-+                      dump_send_skb(tmp, strlen(tmp), &reply);
-                       break;
-               default:
-                       reply.code = REPLY_ERROR;
-@@ -593,7 +342,7 @@
-                       reply.info = req.command;
-                       sprintf(tmp, "Got unknown command code %d!\n",
-                                       req.command);
--                      dump_send_skb(dump_ndev, tmp, strlen(tmp), &reply);
-+                      dump_send_skb(tmp, strlen(tmp), &reply);
-                       break;
-               }
-       }
-@@ -605,45 +354,45 @@
- static int
- dump_validate_config(void)
- {
--      source_ip = dump_in_dev->ifa_list->ifa_local;
--      if (!source_ip) {
-+#if 0
-+      np.local_ip = dump_in_dev->ifa_list->ifa_local;
-+      if (!np.local_ip) {
-               printk("network device %s has no local address, "
-                               "aborting.\n", device_name);
-               return -1;
-       }
--
--#define IP(x) ((unsigned char *)&source_ip)[x]
-+#endif
-+#define IP(x) ((unsigned char *)&np.local_ip)[x]
-       printk("Source %d.%d.%d.%d", IP(0), IP(1), IP(2), IP(3));
- #undef IP
--      if (!source_port) {
-+      if (!np.local_port) {
-               printk("source_port parameter not specified, aborting.\n");
-               return -1;
-       }
--      printk(":%i\n", source_port);
--      source_port = htons(source_port);
-+      printk(":%i\n", np.local_port);
--      if (!target_ip) {
-+      if (!np.remote_ip) {
-               printk("target_ip parameter not specified, aborting.\n");
-               return -1;
-       }
--#define IP(x) ((unsigned char *)&target_ip)[x]
-+#define IP(x) ((unsigned char *)&np.remote_ip)[x]
-       printk("Target %d.%d.%d.%d", IP(0), IP(1), IP(2), IP(3));
- #undef IP
--      if (!target_port) {
-+      if (!np.remote_port) {
-               printk("target_port parameter not specified, aborting.\n");
-               return -1;
-       }
--      printk(":%i\n", target_port);
--      target_port = htons(target_port);
-+      printk(":%i\n", np.remote_port);
-       printk("Target Ethernet Address %02x:%02x:%02x:%02x:%02x:%02x",
--              daddr[0], daddr[1], daddr[2], daddr[3], daddr[4], daddr[5]);
-+              np.remote_mac[0], np.remote_mac[1], np.remote_mac[2], 
-+              np.remote_mac[3], np.remote_mac[4], np.remote_mac[5]);
--      if ((daddr[0] & daddr[1] & daddr[2] & daddr[3] & daddr[4] & 
--                              daddr[5]) == 255)
-+      if ((np.remote_mac[0] & np.remote_mac[1] & np.remote_mac[2] & 
-+              np.remote_mac[3] & np.remote_mac[4] & np.remote_mac[5]) == 255)
-               printk("(Broadcast)");
-       printk("\n");
-       return 0;
-@@ -659,31 +408,24 @@
- dump_net_open(struct dump_dev *net_dev, unsigned long arg)
- {
-       int retval = 0;
--
-+#if 0
-       /* get the interface name */
-       if (copy_from_user(device_name, (void *)arg, IFNAMSIZ))
-               return -EFAULT;
--      if (!(dump_ndev = dev_get_by_name(device_name))) {
-+      if (!(np.dev = dev_get_by_name(device_name))) {
-               printk("network device %s does not exist, aborting.\n",
-                               device_name);
-               return -ENODEV;
-       }
--
--      if (!dump_ndev->poll_controller) {
--              printk("network device %s does not implement polling yet, "
--                              "aborting.\n", device_name);
--              retval = -1; /* return proper error */
--              goto err1;
--      }
--
--      if (!(dump_in_dev = in_dev_get(dump_ndev))) {
-+#endif
-+      if (!(dump_in_dev = in_dev_get(np.dev))) {
-               printk("network device %s is not an IP protocol device, "
-                               "aborting.\n", device_name);
-               retval = -EINVAL;
-               goto err1;
-       }
--
-+      
-       if ((retval = dump_validate_config()) < 0)
-               goto err2;
-@@ -694,7 +436,7 @@
- err2:
-       in_dev_put(dump_in_dev);
- err1:
--      dev_put(dump_ndev);     
-+      dev_put(np.dev);        
-       return retval;
- }
-@@ -707,8 +449,8 @@
- {
-       if (dump_in_dev)
-               in_dev_put(dump_in_dev);
--      if (dump_ndev)
--              dev_put(dump_ndev);
-+      if (np.dev)
-+              dev_put(np.dev);
-       return 0;
- }
-@@ -720,7 +462,6 @@
- dump_net_silence(struct dump_dev *net_dev)
- {
-       local_irq_save(flags_global);
--      dump_ndev->rx_hook = dump_rx_hook;
-         startup_handshake = 1;
-       net_dev->curr_offset = 0;
-       printk("Dumping to network device %s on CPU %d ...\n", device_name,
-@@ -740,7 +481,7 @@
-       reply_t reply;
-       char tmp[200];
--        if (!dump_ndev)
-+        if (!np.dev)
-               return (0);
-       sprintf(tmp, "NETDUMP end.\n");
-@@ -748,11 +489,10 @@
-               reply.code = REPLY_END_NETDUMP;
-               reply.nr = 0;
-               reply.info = 0;
--              dump_send_skb(dump_ndev, tmp, strlen(tmp), &reply);
-+              dump_send_skb(tmp, strlen(tmp), &reply);
-       }
-       printk("NETDUMP END!\n");
-       local_irq_restore(flags_global);
--      dump_ndev->rx_hook = NULL;
-       startup_handshake = 0;
-       return 0;
- }
-@@ -809,18 +549,19 @@
- static int
- dump_net_ioctl(struct dump_dev *net_dev, unsigned int cmd, unsigned long arg)
- {
-+      #if 0
-       switch (cmd) {
-       case DIOSTARGETIP:
--              target_ip = arg;
-+              np.remote_ip = arg;
-               break;
-       case DIOSTARGETPORT:
--              target_port = (u16)arg;
-+              np.remote_port = (u16)arg;
-               break;
-       case DIOSSOURCEPORT:
--              source_port = (u16)arg;
-+              np.local_port = (u16)arg;
-               break;
-       case DIOSETHADDR:
--              return copy_from_user(daddr, (void *)arg, 6);
-+              return copy_from_user(np.remote_mac, (void *)arg, 6);
-               break;
-       case DIOGTARGETIP:
-       case DIOGTARGETPORT:
-@@ -830,6 +571,7 @@
-       default:
-               return -EINVAL;
-       }
-+      #endif
-       return 0;
- }
-@@ -851,17 +593,28 @@
-       .curr_offset = 0
- };
-+static int option_setup(char *opt)
-+{
-+      return netpoll_parse_options(&np, opt);
-+}
-+
-+__setup("netdumpoe=", option_setup);
-+
-+
- static int __init
- dump_netdev_init(void)
- {
-         default_dump_netdev.curr_offset = 0;
-+      if(!np.remote_ip || netpoll_setup(&np))
-+              return 1;
-+
-       if (dump_register_device(&default_dump_netdev) < 0) {
-               printk("network dump device driver registration failed\n");
-               return -1;
-       }
-       printk("network device driver for LKCD registered\n");
-- 
-+
-       get_random_bytes(&dump_magic, sizeof(dump_magic));
-       return 0;
- }
-@@ -870,6 +623,7 @@
- dump_netdev_cleanup(void)
- {
-       dump_unregister_device(&default_dump_netdev);
-+      netpoll_cleanup(&np);
- }
- MODULE_AUTHOR("LKCD Development Team <lkcd-devel@lists.sourceforge.net>");
diff --git a/lustre/kernel_patches/patches/dynamic-locks-2.4.18-chaos.patch b/lustre/kernel_patches/patches/dynamic-locks-2.4.18-chaos.patch
deleted file mode 100644 (file)
index a1cef3e..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
- include/linux/dynlocks.h |   33 ++++++++++
- lib/Makefile             |    4 -
- lib/dynlocks.c           |  152 +++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 187 insertions(+), 2 deletions(-)
-
---- /dev/null  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.18-alexey/include/linux/dynlocks.h       2003-09-01 16:33:25.000000000 +0400
-@@ -0,0 +1,33 @@
-+#ifndef _LINUX_DYNLOCKS_H
-+#define _LINUX_DYNLOCKS_H
-+
-+#include <linux/list.h>
-+#include <linux/wait.h>
-+
-+struct dynlock_member {
-+      struct list_head        dl_list;
-+      unsigned long           dl_value;       /* lock value */
-+      int                     dl_refcount;    /* number of users */
-+      int                     dl_readers;
-+      int                     dl_writers;
-+      int                     dl_pid;         /* holder of the lock */
-+      wait_queue_head_t       dl_wait;
-+};
-+
-+/*
-+ * lock's namespace:
-+ *   - list of locks
-+ *   - lock to protect this list
-+ */
-+struct dynlock {
-+      struct list_head dl_list;
-+      spinlock_t dl_list_lock;
-+};
-+
-+void dynlock_init(struct dynlock *dl);
-+void *dynlock_lock(struct dynlock *dl, unsigned long value, int rw, int gfp);
-+void dynlock_unlock(struct dynlock *dl, void *lock);
-+
-+
-+#endif
-+
---- /dev/null  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.18-alexey/lib/dynlocks.c 2003-09-01 16:36:00.000000000 +0400
-@@ -0,0 +1,152 @@
-+/*
-+ * Dynamic Locks
-+ *
-+ * struct dynlock is lockspace
-+ * one may request lock (exclusive or shared) for some value
-+ * in that lockspace
-+ *
-+ */
-+
-+#include <linux/dynlocks.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+#include <linux/sched.h>
-+
-+/*
-+ * dynlock_init
-+ *
-+ * initialize lockspace
-+ *
-+ */
-+void dynlock_init(struct dynlock *dl)
-+{
-+      spin_lock_init(&dl->dl_list_lock);
-+      INIT_LIST_HEAD(&dl->dl_list);
-+}
-+
-+/*
-+ * dynlock_lock
-+ *
-+ * acquires lock (exclusive or shared) in specified lockspace
-+ * each lock in lockspace is allocated separately, so user have
-+ * to specify GFP flags.
-+ * routine returns pointer to lock. this pointer is intended to
-+ * be passed to dynlock_unlock
-+ *
-+ */
-+void *dynlock_lock(struct dynlock *dl, unsigned long value, int rw, int gfp)
-+{
-+      struct dynlock_member *nhl = NULL; 
-+      struct dynlock_member *hl; 
-+      struct list_head *cur;
-+
-+repeat:
-+      /* find requested lock in lockspace */
-+      spin_lock(&dl->dl_list_lock);
-+      list_for_each(cur, &dl->dl_list) {
-+              hl = list_entry(cur, struct dynlock_member, dl_list);
-+              if (hl->dl_value == value) {
-+                      /* lock is found */
-+                      if (nhl) {
-+                              /* someone else just allocated
-+                               * lock we didn't find and just created
-+                               * so, we drop our lock
-+                               */
-+                              kfree(nhl);
-+                              nhl = NULL;
-+                      }
-+                      hl->dl_refcount++;
-+                      goto found;
-+              }
-+      }
-+      /* lock not found */
-+      if (nhl) {
-+              /* we already have allocated lock. use it */
-+              hl = nhl;
-+              nhl = NULL;
-+              list_add(&hl->dl_list, &dl->dl_list);
-+              goto found;
-+      }
-+      spin_unlock(&dl->dl_list_lock);
-+      
-+      /* lock not found and we haven't allocated lock yet. allocate it */
-+      nhl = kmalloc(sizeof(struct dynlock_member), gfp);
-+      if (nhl == NULL)
-+              return NULL;
-+      nhl->dl_refcount = 1;
-+      nhl->dl_value = value;
-+      nhl->dl_readers = 0;
-+      nhl->dl_writers = 0;
-+      init_waitqueue_head(&nhl->dl_wait);
-+
-+      /* while lock is being allocated, someone else may allocate it
-+       * and put onto to list. check this situation
-+       */
-+      goto repeat;
-+
-+found:
-+      if (rw) {
-+              /* exclusive lock: user don't want to share lock at all
-+               * NOTE: one process may take the same lock several times
-+               * this functionaly is useful for rename operations */
-+              while ((hl->dl_writers && hl->dl_pid != current->pid) ||
-+                              hl->dl_readers) {
-+                      spin_unlock(&dl->dl_list_lock);
-+                      wait_event(hl->dl_wait,
-+                              hl->dl_writers == 0 && hl->dl_readers == 0);
-+                      spin_lock(&dl->dl_list_lock);
-+              }
-+              hl->dl_writers++;
-+      } else {
-+              /* shared lock: user do not want to share lock with writer */
-+              while (hl->dl_writers) {
-+                      spin_unlock(&dl->dl_list_lock);
-+                      wait_event(hl->dl_wait, hl->dl_writers == 0);
-+                      spin_lock(&dl->dl_list_lock);
-+              }
-+              hl->dl_readers++;
-+      }
-+      hl->dl_pid = current->pid;
-+      spin_unlock(&dl->dl_list_lock);
-+
-+      return hl;
-+}
-+
-+
-+/*
-+ * dynlock_unlock
-+ *
-+ * user have to specify lockspace (dl) and pointer to lock structure
-+ * returned by dynlock_lock()
-+ *
-+ */
-+void dynlock_unlock(struct dynlock *dl, void *lock)
-+{
-+      struct dynlock_member *hl = lock;
-+      int wakeup = 0;
-+      
-+      spin_lock(&dl->dl_list_lock);
-+      if (hl->dl_writers) {
-+              hl->dl_writers--;
-+              if (hl->dl_writers == 0)
-+                      wakeup = 1;
-+      } else {
-+              hl->dl_readers--;
-+              if (hl->dl_readers == 0)
-+                      wakeup = 1;
-+      }
-+      if (wakeup) {
-+              hl->dl_pid = 0;
-+              wake_up(&hl->dl_wait);
-+      }
-+      if (--(hl->dl_refcount) == 0) 
-+              list_del(&hl->dl_list);
-+      spin_unlock(&dl->dl_list_lock);
-+      if (hl->dl_refcount == 0)
-+              kfree(hl);
-+}
-+
-+EXPORT_SYMBOL(dynlock_init);
-+EXPORT_SYMBOL(dynlock_lock);
-+EXPORT_SYMBOL(dynlock_unlock);
-+
---- linux-2.4.18/lib/Makefile~dynamic-locks-2.4.18-chaos       2003-08-29 11:57:40.000000000 +0400
-+++ linux-2.4.18-alexey/lib/Makefile   2003-09-01 16:35:23.000000000 +0400
-@@ -8,9 +8,9 @@
- L_TARGET := lib.a
--export-objs := cmdline.o dec_and_lock.o rwsem-spinlock.o rwsem.o rbtree.o
-+export-objs := cmdline.o dec_and_lock.o rwsem-spinlock.o rwsem.o rbtree.o dynlocks.o
--obj-y := errno.o ctype.o string.o vsprintf.o brlock.o cmdline.o bust_spinlocks.o rbtree.o
-+obj-y := errno.o ctype.o string.o vsprintf.o brlock.o cmdline.o bust_spinlocks.o rbtree.o dynlocks.o
- obj-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o
- obj-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
-
-_
diff --git a/lustre/kernel_patches/patches/export-add_to_page_cache.patch b/lustre/kernel_patches/patches/export-add_to_page_cache.patch
deleted file mode 100644 (file)
index 0d3b5da..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
- mm/filemap.c |    2 ++
- 1 files changed, 2 insertions(+)
-
---- linux-2.4.20-l19/mm/filemap.c~export-add_to_page_cache     2003-07-15 03:05:47.000000000 -0500
-+++ linux-2.4.20-l19-zab/mm/filemap.c  2003-07-15 15:33:01.000000000 -0500
-@@ -670,6 +670,7 @@ void add_to_page_cache(struct page * pag
-       spin_unlock(&pagecache_lock);
-       lru_cache_add(page);
- }
-+EXPORT_SYMBOL_GPL(add_to_page_cache);
- int add_to_page_cache_unique(struct page * page,
-       struct address_space *mapping, unsigned long offset,
-@@ -692,6 +693,7 @@ int add_to_page_cache_unique(struct page
-               lru_cache_add(page);
-       return err;
- }
-+EXPORT_SYMBOL_GPL(add_to_page_cache_unique);
- /*
-  * This adds the requested page to the page cache if it isn't already there,
-
-_
diff --git a/lustre/kernel_patches/patches/export-netpoll.patch b/lustre/kernel_patches/patches/export-netpoll.patch
deleted file mode 100644 (file)
index 6d30941..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-Index: linux-2.6.0-test5/net/core/netpoll.c
-===================================================================
---- linux-2.6.0-test5.orig/net/core/netpoll.c  2003-09-26 15:42:10.000000000 +0800
-+++ linux-2.6.0-test5/net/core/netpoll.c       2003-09-26 15:42:32.000000000 +0800
-@@ -630,3 +630,11 @@
- {
-       trapped = trap;
- }
-+EXPORT_SYMBOL(netpoll_set_trap);
-+EXPORT_SYMBOL(netpoll_trap);
-+EXPORT_SYMBOL(netpoll_parse_options);
-+EXPORT_SYMBOL(netpoll_setup);
-+EXPORT_SYMBOL(netpoll_cleanup);
-+EXPORT_SYMBOL(netpoll_send_skb);
-+EXPORT_SYMBOL(netpoll_send_udp);
-+EXPORT_SYMBOL(netpoll_poll);
@@ -1,16 +1,13 @@
-
-
-
- fs/ext3/Makefile   |    4 +++-
+ fs/ext3/Makefile   |    2 ++
  fs/ext3/super.c    |    2 +-
  include/linux/fs.h |    1 +
- kernel/ksyms.c     |    5 +++++
- 4 files changed, 10 insertions(+), 2 deletions(-)
+ kernel/ksyms.c     |    ++++
+ 4 files changed, 8 insertions(+), 1 deletion(-)
 
-Index: linux-2.4.19-pre1/fs/ext3/Makefile
+Index: 57chaos/fs/ext3/Makefile
 ===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/Makefile    2003-11-21 02:39:49.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/Makefile 2003-11-21 02:41:04.000000000 +0300
+--- 57chaos.orig/fs/ext3/Makefile      2004-06-21 13:39:47.000000000 -0700
++++ 57chaos/fs/ext3/Makefile   2004-06-21 13:59:16.000000000 -0700
 @@ -9,6 +9,8 @@
  
  O_TARGET := ext3.o
@@ -20,11 +17,11 @@ Index: linux-2.4.19-pre1/fs/ext3/Makefile
  obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
                ioctl.o namei.o super.o symlink.o
  obj-m    := $(O_TARGET)
-Index: linux-2.4.19-pre1/fs/ext3/super.c
+Index: 57chaos/fs/ext3/super.c
 ===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/super.c     2003-11-21 02:39:49.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/super.c  2003-11-21 02:41:04.000000000 +0300
-@@ -1744,7 +1744,7 @@
+--- 57chaos.orig/fs/ext3/super.c       2004-06-21 13:39:47.000000000 -0700
++++ 57chaos/fs/ext3/super.c    2004-06-21 13:59:16.000000000 -0700
+@@ -1938,7 +1938,7 @@ static void __exit exit_ext3_fs(void)
        unregister_filesystem(&ext3_fs_type);
  }
  
@@ -33,28 +30,28 @@ Index: linux-2.4.19-pre1/fs/ext3/super.c
  
  MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
  MODULE_DESCRIPTION("Second Extended Filesystem with journaling extensions");
-Index: linux-2.4.19-pre1/include/linux/fs.h
+Index: 57chaos/include/linux/fs.h
 ===================================================================
---- linux-2.4.19-pre1.orig/include/linux/fs.h  2003-11-21 02:39:49.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/fs.h       2003-11-21 02:41:41.000000000 +0300
-@@ -984,6 +984,7 @@
+--- 57chaos.orig/include/linux/fs.h    2004-06-21 13:39:47.000000000 -0700
++++ 57chaos/include/linux/fs.h 2004-06-21 13:59:57.000000000 -0700
+@@ -1073,6 +1073,7 @@ extern int unregister_filesystem(struct 
  extern struct vfsmount *kern_mount(struct file_system_type *);
  extern int may_umount(struct vfsmount *);
  extern long do_mount(char *, char *, char *, unsigned long, void *);
-+struct vfsmount *do_kern_mount(char *type, int flags, char *name, void *data);
++struct vfsmount *do_kern_mount(const char *type, int flags, char *name, void *data);
  
  #define kern_umount mntput
  
-Index: linux-2.4.19-pre1/kernel/ksyms.c
+Index: 57chaos/kernel/ksyms.c
 ===================================================================
---- linux-2.4.19-pre1.orig/kernel/ksyms.c      2003-11-21 02:39:49.000000000 +0300
-+++ linux-2.4.19-pre1/kernel/ksyms.c   2003-11-21 02:41:04.000000000 +0300
-@@ -271,6 +271,10 @@
- EXPORT_SYMBOL(lock_may_write);
+--- 57chaos.orig/kernel/ksyms.c        2004-06-21 13:39:47.000000000 -0700
++++ 57chaos/kernel/ksyms.c     2004-06-21 13:59:16.000000000 -0700
+@@ -336,6 +336,10 @@ EXPORT_SYMBOL(dcache_dir_fsync);
  EXPORT_SYMBOL(dcache_readdir);
+ EXPORT_SYMBOL(dcache_dir_ops);
  
 +/* lustre */
-+EXPORT_SYMBOL(panic_notifier_list);
++EXPORT_SYMBOL(pagecache_lock_cacheline);
 +EXPORT_SYMBOL(do_kern_mount);
 +
  /* for stackable file systems (lofs, wrapfs, cryptfs, etc.) */
diff --git a/lustre/kernel_patches/patches/exports_2.4.20.patch b/lustre/kernel_patches/patches/exports_2.4.20.patch
deleted file mode 100644 (file)
index bed8693..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
- fs/ext3/Makefile   |    4 +++-
- fs/ext3/super.c    |    2 +-
- include/linux/fs.h |    1 +
- kernel/ksyms.c     |    5 +++++
- 4 files changed, 10 insertions(+), 2 deletions(-)
-
---- linux-2.4.20/fs/ext3/Makefile~exports_hp   Sat Apr  5 03:55:19 2003
-+++ linux-2.4.20-braam/fs/ext3/Makefile        Sat Apr  5 03:56:03 2003
-@@ -9,6 +9,8 @@
- O_TARGET := ext3.o
-+export-objs :=        super.o inode.o
-+
- obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
-               ioctl.o namei.o super.o symlink.o
- obj-m    := $(O_TARGET)
---- linux-2.4.20/fs/ext3/super.c~exports_hp    Sat Apr  5 03:55:19 2003
-+++ linux-2.4.20-braam/fs/ext3/super.c Sat Apr  5 03:55:19 2003
-@@ -1769,7 +1769,7 @@ static void __exit exit_ext3_fs(void)
-       unregister_filesystem(&ext3_fs_type);
- }
--EXPORT_NO_SYMBOLS;
-+EXPORT_SYMBOL(ext3_bread);
- MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
- MODULE_DESCRIPTION("Second Extended Filesystem with journaling extensions");
---- linux-2.4.20/include/linux/fs.h~exports_hp Sat Apr  5 03:55:19 2003
-+++ linux-2.4.20-braam/include/linux/fs.h      Sat Apr  5 03:55:19 2003
-@@ -1005,6 +1005,7 @@ extern int unregister_filesystem(struct 
- extern struct vfsmount *kern_mount(struct file_system_type *);
- extern int may_umount(struct vfsmount *);
- extern long do_mount(char *, char *, char *, unsigned long, void *);
-+struct vfsmount *do_kern_mount(const char *type, int flags, char *name, void *data);
- #define kern_umount mntput
---- linux-2.4.20/kernel/ksyms.c~exports_hp     Sat Apr  5 03:55:19 2003
-+++ linux-2.4.20-braam/kernel/ksyms.c  Sat Apr  5 03:55:19 2003
-@@ -284,6 +284,11 @@ EXPORT_SYMBOL(dcache_dir_fsync);
- EXPORT_SYMBOL(dcache_readdir);
- EXPORT_SYMBOL(dcache_dir_ops);
-+/* lustre */
-+EXPORT_SYMBOL(pagecache_lock_cacheline);
-+EXPORT_SYMBOL(panic_notifier_list);
-+EXPORT_SYMBOL(do_kern_mount);
-+
- /* for stackable file systems (lofs, wrapfs, cryptfs, etc.) */
- EXPORT_SYMBOL(default_llseek);
- EXPORT_SYMBOL(dentry_open);
-
-_
diff --git a/lustre/kernel_patches/patches/ext-2.4-patch-1-suse.patch b/lustre/kernel_patches/patches/ext-2.4-patch-1-suse.patch
deleted file mode 100644 (file)
index 28a1ad6..0000000
+++ /dev/null
@@ -1,2528 +0,0 @@
- fs/ext3/Makefile           |    2 
- fs/ext3/dir.c              |  299 +++++++++
- fs/ext3/file.c             |    3 
- fs/ext3/hash.c             |  215 ++++++
- fs/ext3/namei.c            | 1387 ++++++++++++++++++++++++++++++++++++++++-----
- fs/ext3/super.c            |    7 
- include/linux/ext3_fs.h    |   85 ++
- include/linux/ext3_fs_sb.h |    2 
- include/linux/ext3_jbd.h   |    2 
- include/linux/rbtree.h     |    2 
- lib/rbtree.c               |   42 +
- 11 files changed, 1886 insertions(+), 160 deletions(-)
-
---- linux-2.4.20/fs/ext3/Makefile~ext-2.4-patch-1      Sat Apr  5 03:56:31 2003
-+++ linux-2.4.20-braam/fs/ext3/Makefile        Sat Apr  5 03:57:05 2003
-@@ -12,7 +12,7 @@ O_TARGET := ext3.o
- export-objs :=        super.o inode.o
- obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
--              ioctl.o namei.o super.o symlink.o
-+              ioctl.o namei.o super.o symlink.o hash.o
- obj-m    := $(O_TARGET)
- include $(TOPDIR)/Rules.make
---- linux-2.4.20/fs/ext3/dir.c~ext-2.4-patch-1 Sat Apr  5 03:56:31 2003
-+++ linux-2.4.20-braam/fs/ext3/dir.c   Sat Apr  5 03:56:31 2003
-@@ -21,12 +21,16 @@
- #include <linux/fs.h>
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
-+#include <linux/slab.h>
-+#include <linux/rbtree.h>
- static unsigned char ext3_filetype_table[] = {
-       DT_UNKNOWN, DT_REG, DT_DIR, DT_CHR, DT_BLK, DT_FIFO, DT_SOCK, DT_LNK
- };
- static int ext3_readdir(struct file *, void *, filldir_t);
-+static int ext3_dx_readdir(struct file * filp,
-+                         void * dirent, filldir_t filldir);
- struct file_operations ext3_dir_operations = {
-       read:           generic_read_dir,
-@@ -35,6 +39,17 @@ struct file_operations ext3_dir_operatio
-       fsync:          ext3_sync_file,         /* BKL held */
- };
-+
-+static unsigned char get_dtype(struct super_block *sb, int filetype)
-+{
-+      if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_FILETYPE) ||
-+          (filetype >= EXT3_FT_MAX))
-+              return DT_UNKNOWN;
-+
-+      return (ext3_filetype_table[filetype]);
-+}
-+                             
-+
- int ext3_check_dir_entry (const char * function, struct inode * dir,
-                         struct ext3_dir_entry_2 * de,
-                         struct buffer_head * bh,
-@@ -79,6 +94,16 @@ static int ext3_readdir(struct file * fi
-       sb = inode->i_sb;
-+      if (is_dx(inode)) {
-+              err = ext3_dx_readdir(filp, dirent, filldir);
-+              if (err != ERR_BAD_DX_DIR)
-+                      return err;
-+              /*
-+               * We don't set the inode dirty flag since it's not
-+               * critical that it get flushed back to the disk.
-+               */
-+              EXT3_I(filp->f_dentry->d_inode)->i_flags &= ~EXT3_INDEX_FL;
-+      }
-       stored = 0;
-       bh = NULL;
-       offset = filp->f_pos & (sb->s_blocksize - 1);
-@@ -162,18 +187,12 @@ revalidate:
-                                * during the copy operation.
-                                */
-                               unsigned long version = filp->f_version;
--                              unsigned char d_type = DT_UNKNOWN;
--                              if (EXT3_HAS_INCOMPAT_FEATURE(sb,
--                                              EXT3_FEATURE_INCOMPAT_FILETYPE)
--                                              && de->file_type < EXT3_FT_MAX)
--                                      d_type =
--                                        ext3_filetype_table[de->file_type];
-                               error = filldir(dirent, de->name,
-                                               de->name_len,
-                                               filp->f_pos,
-                                               le32_to_cpu(de->inode),
--                                              d_type);
-+                                              get_dtype(sb, de->file_type));
-                               if (error)
-                                       break;
-                               if (version != filp->f_version)
-@@ -188,3 +207,269 @@ revalidate:
-       UPDATE_ATIME(inode);
-       return 0;
- }
-+
-+#ifdef CONFIG_EXT3_INDEX
-+/*
-+ * These functions convert from the major/minor hash to an f_pos
-+ * value.
-+ * 
-+ * Currently we only use major hash numer.  This is unfortunate, but
-+ * on 32-bit machines, the same VFS interface is used for lseek and
-+ * llseek, so if we use the 64 bit offset, then the 32-bit versions of
-+ * lseek/telldir/seekdir will blow out spectacularly, and from within
-+ * the ext2 low-level routine, we don't know if we're being called by
-+ * a 64-bit version of the system call or the 32-bit version of the
-+ * system call.  Worse yet, NFSv2 only allows for a 32-bit readdir
-+ * cookie.  Sigh.
-+ */
-+#define hash2pos(major, minor)        (major >> 1)
-+#define pos2maj_hash(pos)     ((pos << 1) & 0xffffffff)
-+#define pos2min_hash(pos)     (0)
-+
-+/*
-+ * This structure holds the nodes of the red-black tree used to store
-+ * the directory entry in hash order.
-+ */
-+struct fname {
-+      __u32           hash;
-+      __u32           minor_hash;
-+      rb_node_t       rb_hash; 
-+      struct fname    *next;
-+      __u32           inode;
-+      __u8            name_len;
-+      __u8            file_type;
-+      char            name[0];
-+};
-+
-+/*
-+ * This functoin implements a non-recursive way of freeing all of the
-+ * nodes in the red-black tree.
-+ */
-+static void free_rb_tree_fname(rb_root_t *root)
-+{
-+      rb_node_t       *n = root->rb_node;
-+      rb_node_t       *parent;
-+      struct fname    *fname;
-+
-+      while (n) {
-+              /* Do the node's children first */
-+              if ((n)->rb_left) {
-+                      n = n->rb_left;
-+                      continue;
-+              }
-+              if (n->rb_right) {
-+                      n = n->rb_right;
-+                      continue;
-+              }
-+              /*
-+               * The node has no children; free it, and then zero
-+               * out parent's link to it.  Finally go to the
-+               * beginning of the loop and try to free the parent
-+               * node.
-+               */
-+              parent = n->rb_parent;
-+              fname = rb_entry(n, struct fname, rb_hash);
-+              kfree(fname);
-+              if (!parent)
-+                      root->rb_node = 0;
-+              else if (parent->rb_left == n)
-+                      parent->rb_left = 0;
-+              else if (parent->rb_right == n)
-+                      parent->rb_right = 0;
-+              n = parent;
-+      }
-+      root->rb_node = 0;
-+}
-+
-+
-+struct dir_private_info *create_dir_info(loff_t pos)
-+{
-+      struct dir_private_info *p;
-+
-+      p = kmalloc(sizeof(struct dir_private_info), GFP_KERNEL);
-+      if (!p)
-+              return NULL;
-+      p->root.rb_node = 0;
-+      p->curr_node = 0;
-+      p->extra_fname = 0;
-+      p->last_pos = 0;
-+      p->curr_hash = pos2maj_hash(pos);
-+      p->curr_minor_hash = pos2min_hash(pos);
-+      p->next_hash = 0;
-+      return p;
-+}
-+
-+void ext3_htree_free_dir_info(struct dir_private_info *p)
-+{
-+      free_rb_tree_fname(&p->root);
-+      kfree(p);
-+}
-+              
-+/*
-+ * Given a directory entry, enter it into the fname rb tree.
-+ */
-+void ext3_htree_store_dirent(struct file *dir_file, __u32 hash,
-+                           __u32 minor_hash,
-+                           struct ext3_dir_entry_2 *dirent)
-+{
-+      rb_node_t **p, *parent = NULL;
-+      struct fname * fname, *new_fn;
-+      struct dir_private_info *info;
-+      int len;
-+
-+      info = (struct dir_private_info *) dir_file->private_data;
-+      p = &info->root.rb_node;
-+
-+      /* Create and allocate the fname structure */
-+      len = sizeof(struct fname) + dirent->name_len + 1;
-+      new_fn = kmalloc(len, GFP_KERNEL);
-+      memset(new_fn, 0, len);
-+      new_fn->hash = hash;
-+      new_fn->minor_hash = minor_hash;
-+      new_fn->inode = le32_to_cpu(dirent->inode);
-+      new_fn->name_len = dirent->name_len;
-+      new_fn->file_type = dirent->file_type;
-+      memcpy(new_fn->name, dirent->name, dirent->name_len);
-+      new_fn->name[dirent->name_len] = 0;
-+      
-+      while (*p) {
-+              parent = *p;
-+              fname = rb_entry(parent, struct fname, rb_hash);
-+
-+              /*
-+               * If the hash and minor hash match up, then we put
-+               * them on a linked list.  This rarely happens...
-+               */
-+              if ((new_fn->hash == fname->hash) &&
-+                  (new_fn->minor_hash == fname->minor_hash)) {
-+                      new_fn->next = fname->next;
-+                      fname->next = new_fn;
-+                      return;
-+              }
-+                      
-+              if (new_fn->hash < fname->hash)
-+                      p = &(*p)->rb_left;
-+              else if (new_fn->hash > fname->hash)
-+                      p = &(*p)->rb_right;
-+              else if (new_fn->minor_hash < fname->minor_hash)
-+                      p = &(*p)->rb_left;
-+              else /* if (new_fn->minor_hash > fname->minor_hash) */
-+                      p = &(*p)->rb_right;
-+      }
-+
-+      rb_link_node(&new_fn->rb_hash, parent, p);
-+      rb_insert_color(&new_fn->rb_hash, &info->root);
-+}
-+
-+
-+
-+/*
-+ * This is a helper function for ext3_dx_readdir.  It calls filldir
-+ * for all entres on the fname linked list.  (Normally there is only
-+ * one entry on the linked list, unless there are 62 bit hash collisions.)
-+ */
-+static int call_filldir(struct file * filp, void * dirent,
-+                      filldir_t filldir, struct fname *fname)
-+{
-+      struct dir_private_info *info = filp->private_data;
-+      loff_t  curr_pos;
-+      struct inode *inode = filp->f_dentry->d_inode;
-+      struct super_block * sb;
-+      int error;
-+
-+      sb = inode->i_sb;
-+      
-+      if (!fname) {
-+              printk("call_filldir: called with null fname?!?\n");
-+              return 0;
-+      }
-+      curr_pos = hash2pos(fname->hash, fname->minor_hash);
-+      while (fname) {
-+              error = filldir(dirent, fname->name,
-+                              fname->name_len, curr_pos, 
-+                              fname->inode,
-+                              get_dtype(sb, fname->file_type));
-+              if (error) {
-+                      filp->f_pos = curr_pos;
-+                      info->extra_fname = fname->next;
-+                      return error;
-+              }
-+              fname = fname->next;
-+      }
-+      return 0;
-+}
-+
-+static int ext3_dx_readdir(struct file * filp,
-+                       void * dirent, filldir_t filldir)
-+{
-+      struct dir_private_info *info = filp->private_data;
-+      struct inode *inode = filp->f_dentry->d_inode;
-+      struct fname *fname;
-+      int     ret;
-+
-+      if (!info) {
-+              info = create_dir_info(filp->f_pos);
-+              if (!info)
-+                      return -ENOMEM;
-+              filp->private_data = info;
-+      }
-+
-+      /* Some one has messed with f_pos; reset the world */
-+      if (info->last_pos != filp->f_pos) {
-+              free_rb_tree_fname(&info->root);
-+              info->curr_node = 0;
-+              info->extra_fname = 0;
-+              info->curr_hash = pos2maj_hash(filp->f_pos);
-+              info->curr_minor_hash = pos2min_hash(filp->f_pos);
-+      }
-+
-+      /*
-+       * If there are any leftover names on the hash collision
-+       * chain, return them first.
-+       */
-+      if (info->extra_fname &&
-+          call_filldir(filp, dirent, filldir, info->extra_fname))
-+              goto finished;
-+
-+      if (!info->curr_node)
-+              info->curr_node = rb_get_first(&info->root);
-+
-+      while (1) {
-+              /*
-+               * Fill the rbtree if we have no more entries,
-+               * or the inode has changed since we last read in the
-+               * cached entries. 
-+               */
-+              if ((!info->curr_node) ||
-+                  (filp->f_version != inode->i_version)) {
-+                      info->curr_node = 0;
-+                      free_rb_tree_fname(&info->root);
-+                      filp->f_version = inode->i_version;
-+                      ret = ext3_htree_fill_tree(filp, info->curr_hash,
-+                                                 info->curr_minor_hash,
-+                                                 &info->next_hash);
-+                      if (ret < 0)
-+                              return ret;
-+                      if (ret == 0)
-+                              break;
-+                      info->curr_node = rb_get_first(&info->root);
-+              }
-+
-+              fname = rb_entry(info->curr_node, struct fname, rb_hash);
-+              info->curr_hash = fname->hash;
-+              info->curr_minor_hash = fname->minor_hash;
-+              if (call_filldir(filp, dirent, filldir, fname))
-+                      break;
-+
-+              info->curr_node = rb_get_next(info->curr_node);
-+              if (!info->curr_node) {
-+                      info->curr_hash = info->next_hash;
-+                      info->curr_minor_hash = 0;
-+              }
-+      }
-+finished:
-+      info->last_pos = filp->f_pos;
-+      UPDATE_ATIME(inode);
-+      return 0;
-+}
-+#endif
---- linux-2.4.20/fs/ext3/file.c~ext-2.4-patch-1        Sat Apr  5 03:56:31 2003
-+++ linux-2.4.20-braam/fs/ext3/file.c  Sat Apr  5 03:56:31 2003
-@@ -35,6 +35,9 @@ static int ext3_release_file (struct ino
- {
-       if (filp->f_mode & FMODE_WRITE)
-               ext3_discard_prealloc (inode);
-+      if (is_dx(inode) && filp->private_data)
-+              ext3_htree_free_dir_info(filp->private_data);
-+
-       return 0;
- }
---- /dev/null  Fri Aug 30 17:31:37 2002
-+++ linux-2.4.20-braam/fs/ext3/hash.c  Sat Apr  5 03:56:31 2003
-@@ -0,0 +1,215 @@
-+/*
-+ *  linux/fs/ext3/hash.c
-+ *
-+ * Copyright (C) 2002 by Theodore Ts'o
-+ *
-+ * This file is released under the GPL v2.
-+ * 
-+ * This file may be redistributed under the terms of the GNU Public
-+ * License.
-+ */
-+
-+#include <linux/fs.h>
-+#include <linux/jbd.h>
-+#include <linux/sched.h>
-+#include <linux/ext3_fs.h>
-+
-+#define DELTA 0x9E3779B9
-+
-+static void TEA_transform(__u32 buf[4], __u32 const in[])
-+{
-+      __u32   sum = 0;
-+      __u32   b0 = buf[0], b1 = buf[1];
-+      __u32   a = in[0], b = in[1], c = in[2], d = in[3];
-+      int     n = 16;
-+
-+      do {                                                    
-+              sum += DELTA;                                   
-+              b0 += ((b1 << 4)+a) ^ (b1+sum) ^ ((b1 >> 5)+b); 
-+              b1 += ((b0 << 4)+c) ^ (b0+sum) ^ ((b0 >> 5)+d); 
-+      } while(--n);
-+
-+      buf[0] += b0;
-+      buf[1] += b1;
-+}
-+
-+/* F, G and H are basic MD4 functions: selection, majority, parity */
-+#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
-+#define G(x, y, z) (((x) & (y)) + (((x) ^ (y)) & (z)))
-+#define H(x, y, z) ((x) ^ (y) ^ (z))
-+
-+/*
-+ * The generic round function.  The application is so specific that
-+ * we don't bother protecting all the arguments with parens, as is generally
-+ * good macro practice, in favor of extra legibility.
-+ * Rotation is separate from addition to prevent recomputation
-+ */
-+#define ROUND(f, a, b, c, d, x, s)    \
-+      (a += f(b, c, d) + x, a = (a << s) | (a >> (32-s)))
-+#define K1 0
-+#define K2 013240474631UL
-+#define K3 015666365641UL
-+
-+/*
-+ * Basic cut-down MD4 transform.  Returns only 32 bits of result.
-+ */
-+static void halfMD4Transform (__u32 buf[4], __u32 const in[])
-+{
-+      __u32   a = buf[0], b = buf[1], c = buf[2], d = buf[3];
-+
-+      /* Round 1 */
-+      ROUND(F, a, b, c, d, in[0] + K1,  3);
-+      ROUND(F, d, a, b, c, in[1] + K1,  7);
-+      ROUND(F, c, d, a, b, in[2] + K1, 11);
-+      ROUND(F, b, c, d, a, in[3] + K1, 19);
-+      ROUND(F, a, b, c, d, in[4] + K1,  3);
-+      ROUND(F, d, a, b, c, in[5] + K1,  7);
-+      ROUND(F, c, d, a, b, in[6] + K1, 11);
-+      ROUND(F, b, c, d, a, in[7] + K1, 19);
-+
-+      /* Round 2 */
-+      ROUND(G, a, b, c, d, in[1] + K2,  3);
-+      ROUND(G, d, a, b, c, in[3] + K2,  5);
-+      ROUND(G, c, d, a, b, in[5] + K2,  9);
-+      ROUND(G, b, c, d, a, in[7] + K2, 13);
-+      ROUND(G, a, b, c, d, in[0] + K2,  3);
-+      ROUND(G, d, a, b, c, in[2] + K2,  5);
-+      ROUND(G, c, d, a, b, in[4] + K2,  9);
-+      ROUND(G, b, c, d, a, in[6] + K2, 13);
-+
-+      /* Round 3 */
-+      ROUND(H, a, b, c, d, in[3] + K3,  3);
-+      ROUND(H, d, a, b, c, in[7] + K3,  9);
-+      ROUND(H, c, d, a, b, in[2] + K3, 11);
-+      ROUND(H, b, c, d, a, in[6] + K3, 15);
-+      ROUND(H, a, b, c, d, in[1] + K3,  3);
-+      ROUND(H, d, a, b, c, in[5] + K3,  9);
-+      ROUND(H, c, d, a, b, in[0] + K3, 11);
-+      ROUND(H, b, c, d, a, in[4] + K3, 15);
-+
-+      buf[0] += a;
-+      buf[1] += b;
-+      buf[2] += c;
-+      buf[3] += d;
-+}
-+
-+#undef ROUND
-+#undef F
-+#undef G
-+#undef H
-+#undef K1
-+#undef K2
-+#undef K3
-+
-+/* The old legacy hash */
-+static __u32 dx_hack_hash (const char *name, int len)
-+{
-+      __u32 hash0 = 0x12a3fe2d, hash1 = 0x37abe8f9;
-+      while (len--) {
-+              __u32 hash = hash1 + (hash0 ^ (*name++ * 7152373));
-+              
-+              if (hash & 0x80000000) hash -= 0x7fffffff;
-+              hash1 = hash0;
-+              hash0 = hash;
-+      }
-+      return (hash0 << 1);
-+}
-+
-+static void str2hashbuf(const char *msg, int len, __u32 *buf, int num)
-+{
-+      __u32   pad, val;
-+      int     i;
-+
-+      pad = (__u32)len | ((__u32)len << 8);
-+      pad |= pad << 16;
-+
-+      val = pad;
-+      if (len > num*4)
-+              len = num * 4;
-+      for (i=0; i < len; i++) {
-+              if ((i % 4) == 0)
-+                      val = pad;
-+              val = msg[i] + (val << 8);
-+              if ((i % 4) == 3) {
-+                      *buf++ = val;
-+                      val = pad;
-+                      num--;
-+              }
-+      }
-+      if (--num >= 0)
-+              *buf++ = val;
-+      while (--num >= 0)
-+              *buf++ = pad;
-+}
-+
-+/*
-+ * Returns the hash of a filename.  If len is 0 and name is NULL, then
-+ * this function can be used to test whether or not a hash version is
-+ * supported.
-+ * 
-+ * The seed is an 4 longword (32 bits) "secret" which can be used to
-+ * uniquify a hash.  If the seed is all zero's, then some default seed
-+ * may be used.
-+ * 
-+ * A particular hash version specifies whether or not the seed is
-+ * represented, and whether or not the returned hash is 32 bits or 64
-+ * bits.  32 bit hashes will return 0 for the minor hash.
-+ */
-+int ext3fs_dirhash(const char *name, int len, struct dx_hash_info *hinfo)
-+{
-+      __u32   hash;
-+      __u32   minor_hash = 0;
-+      const char      *p;
-+      int             i;
-+      __u32           in[8], buf[4];
-+
-+      /* Initialize the default seed for the hash checksum functions */
-+      buf[0] = 0x67452301;
-+      buf[1] = 0xefcdab89;
-+      buf[2] = 0x98badcfe;
-+      buf[3] = 0x10325476;
-+
-+      /* Check to see if the seed is all zero's */
-+      if (hinfo->seed) {
-+              for (i=0; i < 4; i++) {
-+                      if (hinfo->seed[i])
-+                              break;
-+              }
-+              if (i < 4)
-+                      memcpy(buf, hinfo->seed, sizeof(buf));
-+      }
-+              
-+      switch (hinfo->hash_version) {
-+      case DX_HASH_LEGACY:
-+              hash = dx_hack_hash(name, len);
-+              break;
-+      case DX_HASH_HALF_MD4:
-+              p = name;
-+              while (len > 0) {
-+                      str2hashbuf(p, len, in, 8);
-+                      halfMD4Transform(buf, in);
-+                      len -= 32;
-+                      p += 32;
-+              }
-+              minor_hash = buf[2];
-+              hash = buf[1];
-+              break;
-+      case DX_HASH_TEA:
-+              p = name;
-+              while (len > 0) {
-+                      str2hashbuf(p, len, in, 4);
-+                      TEA_transform(buf, in);
-+                      len -= 16;
-+                      p += 16;
-+              }
-+              hash = buf[0];
-+              minor_hash = buf[1];
-+              break;
-+      default:
-+              hinfo->hash = 0;
-+              return -1;
-+      }
-+      hinfo->hash = hash & ~1;
-+      hinfo->minor_hash = minor_hash;
-+      return 0;
-+}
---- linux-2.4.20/fs/ext3/namei.c~ext-2.4-patch-1       Sat Apr  5 03:56:31 2003
-+++ linux-2.4.20-braam/fs/ext3/namei.c Sat Apr  5 03:56:31 2003
-@@ -16,6 +16,12 @@
-  *        David S. Miller (davem@caip.rutgers.edu), 1995
-  *  Directory entry file type support and forward compatibility hooks
-  *    for B-tree directories by Theodore Ts'o (tytso@mit.edu), 1998
-+ *  Hash Tree Directory indexing (c)
-+ *    Daniel Phillips, 2001
-+ *  Hash Tree Directory indexing porting
-+ *    Christopher Li, 2002
-+ *  Hash Tree Directory indexing cleanup
-+ *    Theodore Ts'o, 2002
-  */
- #include <linux/fs.h>
-@@ -38,6 +44,630 @@
- #define NAMEI_RA_SIZE        (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
- #define NAMEI_RA_INDEX(c,b)  (((c) * NAMEI_RA_BLOCKS) + (b))
-+static struct buffer_head *ext3_append(handle_t *handle,
-+                                      struct inode *inode,
-+                                      u32 *block, int *err)
-+{
-+      struct buffer_head *bh;
-+
-+      *block = inode->i_size >> inode->i_sb->s_blocksize_bits;
-+
-+      if ((bh = ext3_bread(handle, inode, *block, 1, err))) {
-+              inode->i_size += inode->i_sb->s_blocksize;
-+              EXT3_I(inode)->i_disksize = inode->i_size;
-+              ext3_journal_get_write_access(handle,bh);
-+      }
-+      return bh;
-+}
-+
-+#ifndef assert
-+#define assert(test) J_ASSERT(test)
-+#endif
-+
-+#ifndef swap
-+#define swap(x, y) do { typeof(x) z = x; x = y; y = z; } while (0)
-+#endif
-+
-+typedef struct { u32 v; } le_u32;
-+typedef struct { u16 v; } le_u16;
-+
-+#ifdef DX_DEBUG
-+#define dxtrace(command) command
-+#else
-+#define dxtrace(command) 
-+#endif
-+
-+struct fake_dirent
-+{
-+      /*le*/u32 inode;
-+      /*le*/u16 rec_len;
-+      u8 name_len;
-+      u8 file_type;
-+};
-+
-+struct dx_countlimit
-+{
-+      le_u16 limit;
-+      le_u16 count;
-+};
-+
-+struct dx_entry
-+{
-+      le_u32 hash;
-+      le_u32 block;
-+};
-+
-+/*
-+ * dx_root_info is laid out so that if it should somehow get overlaid by a
-+ * dirent the two low bits of the hash version will be zero.  Therefore, the
-+ * hash version mod 4 should never be 0.  Sincerely, the paranoia department.
-+ */
-+
-+struct dx_root
-+{
-+      struct fake_dirent dot;
-+      char dot_name[4];
-+      struct fake_dirent dotdot;
-+      char dotdot_name[4];
-+      struct dx_root_info
-+      {
-+              le_u32 reserved_zero;
-+              u8 hash_version;
-+              u8 info_length; /* 8 */
-+              u8 indirect_levels;
-+              u8 unused_flags;
-+      }
-+      info;
-+      struct dx_entry entries[0];
-+};
-+
-+struct dx_node
-+{
-+      struct fake_dirent fake;
-+      struct dx_entry entries[0];
-+};
-+
-+
-+struct dx_frame
-+{
-+      struct buffer_head *bh;
-+      struct dx_entry *entries;
-+      struct dx_entry *at;
-+};
-+
-+struct dx_map_entry
-+{
-+      u32 hash;
-+      u32 offs;
-+};
-+
-+#ifdef CONFIG_EXT3_INDEX
-+static inline unsigned dx_get_block (struct dx_entry *entry);
-+static void dx_set_block (struct dx_entry *entry, unsigned value);
-+static inline unsigned dx_get_hash (struct dx_entry *entry);
-+static void dx_set_hash (struct dx_entry *entry, unsigned value);
-+static unsigned dx_get_count (struct dx_entry *entries);
-+static unsigned dx_get_limit (struct dx_entry *entries);
-+static void dx_set_count (struct dx_entry *entries, unsigned value);
-+static void dx_set_limit (struct dx_entry *entries, unsigned value);
-+static unsigned dx_root_limit (struct inode *dir, unsigned infosize);
-+static unsigned dx_node_limit (struct inode *dir);
-+static struct dx_frame *dx_probe(struct dentry *dentry,
-+                               struct inode *dir,
-+                               struct dx_hash_info *hinfo,
-+                               struct dx_frame *frame,
-+                               int *err);
-+static void dx_release (struct dx_frame *frames);
-+static int dx_make_map (struct ext3_dir_entry_2 *de, int size,
-+                      struct dx_hash_info *hinfo, struct dx_map_entry map[]);
-+static void dx_sort_map(struct dx_map_entry *map, unsigned count);
-+static struct ext3_dir_entry_2 *dx_move_dirents (char *from, char *to,
-+              struct dx_map_entry *offsets, int count);
-+static struct ext3_dir_entry_2* dx_pack_dirents (char *base, int size);
-+static void dx_insert_block (struct dx_frame *frame, u32 hash, u32 block);
-+static int ext3_htree_next_block(struct inode *dir, __u32 hash,
-+                               struct dx_frame *frame,
-+                               struct dx_frame *frames, int *err,
-+                               __u32 *start_hash);
-+static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
-+                     struct ext3_dir_entry_2 **res_dir, int *err);
-+static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry,
-+                           struct inode *inode);
-+
-+/*
-+ * Future: use high four bits of block for coalesce-on-delete flags
-+ * Mask them off for now.
-+ */
-+
-+static inline unsigned dx_get_block (struct dx_entry *entry)
-+{
-+      return le32_to_cpu(entry->block.v) & 0x00ffffff;
-+}
-+
-+static inline void dx_set_block (struct dx_entry *entry, unsigned value)
-+{
-+      entry->block.v = cpu_to_le32(value);
-+}
-+
-+static inline unsigned dx_get_hash (struct dx_entry *entry)
-+{
-+      return le32_to_cpu(entry->hash.v);
-+}
-+
-+static inline void dx_set_hash (struct dx_entry *entry, unsigned value)
-+{
-+      entry->hash.v = cpu_to_le32(value);
-+}
-+
-+static inline unsigned dx_get_count (struct dx_entry *entries)
-+{
-+      return le16_to_cpu(((struct dx_countlimit *) entries)->count.v);
-+}
-+
-+static inline unsigned dx_get_limit (struct dx_entry *entries)
-+{
-+      return le16_to_cpu(((struct dx_countlimit *) entries)->limit.v);
-+}
-+
-+static inline void dx_set_count (struct dx_entry *entries, unsigned value)
-+{
-+      ((struct dx_countlimit *) entries)->count.v = cpu_to_le16(value);
-+}
-+
-+static inline void dx_set_limit (struct dx_entry *entries, unsigned value)
-+{
-+      ((struct dx_countlimit *) entries)->limit.v = cpu_to_le16(value);
-+}
-+
-+static inline unsigned dx_root_limit (struct inode *dir, unsigned infosize)
-+{
-+      unsigned entry_space = dir->i_sb->s_blocksize - EXT3_DIR_REC_LEN(1) -
-+              EXT3_DIR_REC_LEN(2) - infosize;
-+      return 0? 20: entry_space / sizeof(struct dx_entry);
-+}
-+
-+static inline unsigned dx_node_limit (struct inode *dir)
-+{
-+      unsigned entry_space = dir->i_sb->s_blocksize - EXT3_DIR_REC_LEN(0);
-+      return 0? 22: entry_space / sizeof(struct dx_entry);
-+}
-+
-+/*
-+ * Debug
-+ */
-+#ifdef DX_DEBUG
-+struct stats
-+{ 
-+      unsigned names;
-+      unsigned space;
-+      unsigned bcount;
-+};
-+
-+static struct stats dx_show_leaf(struct dx_hash_info *hinfo, struct ext3_dir_entry_2 *de,
-+                               int size, int show_names)
-+{
-+      unsigned names = 0, space = 0;
-+      char *base = (char *) de;
-+      struct dx_hash_info h = *hinfo;
-+      
-+      printk("names: ");
-+      while ((char *) de < base + size)
-+      {
-+              if (de->inode)
-+              {
-+                      if (show_names)
-+                      {
-+                              int len = de->name_len;
-+                              char *name = de->name;
-+                              while (len--) printk("%c", *name++);
-+                              ext3fs_dirhash(de->name, de->name_len, &h);
-+                              printk(":%x.%u ", h.hash,
-+                                     ((char *) de - base));
-+                      }
-+                      space += EXT3_DIR_REC_LEN(de->name_len);
-+                      names++;
-+              }
-+              de = (struct ext3_dir_entry_2 *) ((char *) de + le16_to_cpu(de->rec_len));
-+      }
-+      printk("(%i)\n", names);
-+      return (struct stats) { names, space, 1 };
-+}
-+
-+struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir,
-+                           struct dx_entry *entries, int levels)
-+{
-+      unsigned blocksize = dir->i_sb->s_blocksize;
-+      unsigned count = dx_get_count (entries), names = 0, space = 0, i;
-+      unsigned bcount = 0;
-+      struct buffer_head *bh;
-+      int err;
-+      printk("%i indexed blocks...\n", count);
-+      for (i = 0; i < count; i++, entries++)
-+      {
-+              u32 block = dx_get_block(entries), hash = i? dx_get_hash(entries): 0;
-+              u32 range = i < count - 1? (dx_get_hash(entries + 1) - hash): ~hash;
-+              struct stats stats;
-+              printk("%s%3u:%03u hash %8x/%8x ",levels?"":"   ", i, block, hash, range);
-+              if (!(bh = ext3_bread (NULL,dir, block, 0,&err))) continue;
-+              stats = levels?
-+                 dx_show_entries(hinfo, dir, ((struct dx_node *) bh->b_data)->entries, levels - 1):
-+                 dx_show_leaf(hinfo, (struct ext3_dir_entry_2 *) bh->b_data, blocksize, 0);
-+              names += stats.names;
-+              space += stats.space;
-+              bcount += stats.bcount;
-+              brelse (bh);
-+      }
-+      if (bcount)
-+              printk("%snames %u, fullness %u (%u%%)\n", levels?"":"   ",
-+                      names, space/bcount,(space/bcount)*100/blocksize);
-+      return (struct stats) { names, space, bcount};
-+}
-+#endif /* DX_DEBUG */
-+
-+/*
-+ * Probe for a directory leaf block to search.
-+ *
-+ * dx_probe can return ERR_BAD_DX_DIR, which means there was a format
-+ * error in the directory index, and the caller should fall back to
-+ * searching the directory normally.  The callers of dx_probe **MUST**
-+ * check for this error code, and make sure it never gets reflected
-+ * back to userspace.
-+ */
-+static struct dx_frame *
-+dx_probe(struct dentry *dentry, struct inode *dir,
-+       struct dx_hash_info *hinfo, struct dx_frame *frame_in, int *err)
-+{
-+      unsigned count, indirect;
-+      struct dx_entry *at, *entries, *p, *q, *m;
-+      struct dx_root *root;
-+      struct buffer_head *bh;
-+      struct dx_frame *frame = frame_in;
-+      u32 hash;
-+
-+      frame->bh = NULL;
-+      if (dentry)
-+              dir = dentry->d_parent->d_inode;
-+      if (!(bh = ext3_bread (NULL,dir, 0, 0, err)))
-+              goto fail;
-+      root = (struct dx_root *) bh->b_data;
-+      if (root->info.hash_version != DX_HASH_TEA &&
-+          root->info.hash_version != DX_HASH_HALF_MD4 &&
-+          root->info.hash_version != DX_HASH_LEGACY) {
-+              ext3_warning(dir->i_sb, __FUNCTION__,
-+                           "Unrecognised inode hash code %d",
-+                           root->info.hash_version);
-+              brelse(bh);
-+              *err = ERR_BAD_DX_DIR;
-+              goto fail;
-+      }
-+      hinfo->hash_version = root->info.hash_version;
-+      hinfo->seed = dir->i_sb->u.ext3_sb.s_hash_seed;
-+      if (dentry)
-+              ext3fs_dirhash(dentry->d_name.name, dentry->d_name.len, hinfo);
-+      hash = hinfo->hash;
-+
-+      if (root->info.unused_flags & 1) {
-+              ext3_warning(dir->i_sb, __FUNCTION__,
-+                           "Unimplemented inode hash flags: %#06x",
-+                           root->info.unused_flags);
-+              brelse(bh);
-+              *err = ERR_BAD_DX_DIR;
-+              goto fail;
-+      }
-+
-+      if ((indirect = root->info.indirect_levels) > 1) {
-+              ext3_warning(dir->i_sb, __FUNCTION__,
-+                           "Unimplemented inode hash depth: %#06x",
-+                           root->info.indirect_levels);
-+              brelse(bh);
-+              *err = ERR_BAD_DX_DIR;
-+              goto fail;
-+      }
-+
-+      entries = (struct dx_entry *) (((char *)&root->info) +
-+                                     root->info.info_length);
-+      assert(dx_get_limit(entries) == dx_root_limit(dir,
-+                                                    root->info.info_length));
-+      dxtrace (printk("Look up %x", hash));
-+      while (1)
-+      {
-+              count = dx_get_count(entries);
-+              assert (count && count <= dx_get_limit(entries));
-+              p = entries + 1;
-+              q = entries + count - 1;
-+              while (p <= q)
-+              {
-+                      m = p + (q - p)/2;
-+                      dxtrace(printk("."));
-+                      if (dx_get_hash(m) > hash)
-+                              q = m - 1;
-+                      else
-+                              p = m + 1;
-+              }
-+
-+              if (0) // linear search cross check
-+              {
-+                      unsigned n = count - 1;
-+                      at = entries;
-+                      while (n--)
-+                      {
-+                              dxtrace(printk(","));
-+                              if (dx_get_hash(++at) > hash)
-+                              {
-+                                      at--;
-+                                      break;
-+                              }
-+                      }
-+                      assert (at == p - 1);
-+              }
-+
-+              at = p - 1;
-+              dxtrace(printk(" %x->%u\n", at == entries? 0: dx_get_hash(at), dx_get_block(at)));
-+              frame->bh = bh;
-+              frame->entries = entries;
-+              frame->at = at;
-+              if (!indirect--) return frame;
-+              if (!(bh = ext3_bread (NULL,dir, dx_get_block(at), 0, err)))
-+                      goto fail2;
-+              at = entries = ((struct dx_node *) bh->b_data)->entries;
-+              assert (dx_get_limit(entries) == dx_node_limit (dir));
-+              frame++;
-+      }
-+fail2:
-+      while (frame >= frame_in) {
-+              brelse(frame->bh);
-+              frame--;
-+      }
-+fail:
-+      return NULL;
-+}
-+
-+static void dx_release (struct dx_frame *frames)
-+{
-+      if (frames[0].bh == NULL)
-+              return;
-+
-+      if (((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels)
-+              brelse(frames[1].bh);
-+      brelse(frames[0].bh);
-+}
-+
-+/*
-+ * This function increments the frame pointer to search the next leaf
-+ * block, and reads in the necessary intervening nodes if the search
-+ * should be necessary.  Whether or not the search is necessary is
-+ * controlled by the hash parameter.  If the hash value is even, then
-+ * the search is only continued if the next block starts with that
-+ * hash value.  This is used if we are searching for a specific file.
-+ *
-+ * If the hash value is HASH_NB_ALWAYS, then always go to the next block.
-+ *
-+ * This function returns 1 if the caller should continue to search,
-+ * or 0 if it should not.  If there is an error reading one of the
-+ * index blocks, it will return -1.
-+ *
-+ * If start_hash is non-null, it will be filled in with the starting
-+ * hash of the next page.
-+ */
-+static int ext3_htree_next_block(struct inode *dir, __u32 hash,
-+                               struct dx_frame *frame,
-+                               struct dx_frame *frames, int *err,
-+                               __u32 *start_hash)
-+{
-+      struct dx_frame *p;
-+      struct buffer_head *bh;
-+      int num_frames = 0;
-+      __u32 bhash;
-+
-+      *err = ENOENT;
-+      p = frame;
-+      /*
-+       * Find the next leaf page by incrementing the frame pointer.
-+       * If we run out of entries in the interior node, loop around and
-+       * increment pointer in the parent node.  When we break out of
-+       * this loop, num_frames indicates the number of interior
-+       * nodes need to be read.
-+       */
-+      while (1) {
-+              if (++(p->at) < p->entries + dx_get_count(p->entries))
-+                      break;
-+              if (p == frames)
-+                      return 0;
-+              num_frames++;
-+              p--;
-+      }
-+
-+      /*
-+       * If the hash is 1, then continue only if the next page has a
-+       * continuation hash of any value.  This is used for readdir
-+       * handling.  Otherwise, check to see if the hash matches the
-+       * desired contiuation hash.  If it doesn't, return since
-+       * there's no point to read in the successive index pages.
-+       */
-+      bhash = dx_get_hash(p->at);
-+      if (start_hash)
-+              *start_hash = bhash;
-+      if ((hash & 1) == 0) {
-+              if ((bhash & ~1) != hash)
-+                      return 0;
-+      }
-+      /*
-+       * If the hash is HASH_NB_ALWAYS, we always go to the next
-+       * block so no check is necessary
-+       */
-+      while (num_frames--) {
-+              if (!(bh = ext3_bread(NULL, dir, dx_get_block(p->at),
-+                                    0, err)))
-+                      return -1; /* Failure */
-+              p++;
-+              brelse (p->bh);
-+              p->bh = bh;
-+              p->at = p->entries = ((struct dx_node *) bh->b_data)->entries;
-+      }
-+      return 1;
-+}
-+
-+
-+/*
-+ * p is at least 6 bytes before the end of page
-+ */
-+static inline struct ext3_dir_entry_2 *ext3_next_entry(struct ext3_dir_entry_2 *p)
-+{
-+      return (struct ext3_dir_entry_2 *)((char*)p + le16_to_cpu(p->rec_len));
-+}
-+
-+/*
-+ * This function fills a red-black tree with information from a
-+ * directory.  We start scanning the directory in hash order, starting
-+ * at start_hash and start_minor_hash.
-+ *
-+ * This function returns the number of entries inserted into the tree,
-+ * or a negative error code.
-+ */
-+int ext3_htree_fill_tree(struct file *dir_file, __u32 start_hash,
-+                       __u32 start_minor_hash, __u32 *next_hash)
-+{
-+      struct dx_hash_info hinfo;
-+      struct buffer_head *bh;
-+      struct ext3_dir_entry_2 *de, *top;
-+      static struct dx_frame frames[2], *frame;
-+      struct inode *dir;
-+      int block, err;
-+      int count = 0;
-+      int ret;
-+      __u32 hashval;
-+      
-+      dxtrace(printk("In htree_fill_tree, start hash: %x:%x\n", start_hash,
-+                     start_minor_hash));
-+      dir = dir_file->f_dentry->d_inode;
-+      hinfo.hash = start_hash;
-+      hinfo.minor_hash = 0;
-+      frame = dx_probe(0, dir_file->f_dentry->d_inode, &hinfo, frames, &err);
-+      if (!frame)
-+              return err;
-+
-+      while (1) {
-+              block = dx_get_block(frame->at);
-+              dxtrace(printk("Reading block %d\n", block));
-+              if (!(bh = ext3_bread (NULL, dir, block, 0, &err)))
-+                      goto errout;
-+      
-+              de = (struct ext3_dir_entry_2 *) bh->b_data;
-+              top = (struct ext3_dir_entry_2 *) ((char *) de + dir->i_sb->s_blocksize -
-+                                     EXT3_DIR_REC_LEN(0));
-+              for (; de < top; de = ext3_next_entry(de)) {
-+                      ext3fs_dirhash(de->name, de->name_len, &hinfo);
-+                      if ((hinfo.hash < start_hash) ||
-+                          ((hinfo.hash == start_hash) &&
-+                           (hinfo.minor_hash < start_minor_hash)))
-+                              continue;
-+                      ext3_htree_store_dirent(dir_file, hinfo.hash,
-+                                              hinfo.minor_hash, de);
-+                      count++;
-+              }
-+              brelse (bh);
-+              hashval = ~1;
-+              ret = ext3_htree_next_block(dir, HASH_NB_ALWAYS, 
-+                                          frame, frames, &err, &hashval);
-+              if (next_hash)
-+                      *next_hash = hashval;
-+              if (ret == -1)
-+                      goto errout;
-+              /*
-+               * Stop if:  (a) there are no more entries, or
-+               * (b) we have inserted at least one entry and the
-+               * next hash value is not a continuation
-+               */
-+              if ((ret == 0) ||
-+                  (count && ((hashval & 1) == 0)))
-+                      break;
-+      }
-+      dx_release(frames);
-+      dxtrace(printk("Fill tree: returned %d entries\n", count));
-+      return count;
-+errout:
-+      dx_release(frames);
-+      return (err);
-+}
-+
-+
-+/*
-+ * Directory block splitting, compacting
-+ */
-+
-+static int dx_make_map (struct ext3_dir_entry_2 *de, int size,
-+                      struct dx_hash_info *hinfo, struct dx_map_entry *map_tail)
-+{
-+      int count = 0;
-+      char *base = (char *) de;
-+      struct dx_hash_info h = *hinfo;
-+      
-+      while ((char *) de < base + size)
-+      {
-+              if (de->name_len && de->inode) {
-+                      ext3fs_dirhash(de->name, de->name_len, &h);
-+                      map_tail--;
-+                      map_tail->hash = h.hash;
-+                      map_tail->offs = (u32) ((char *) de - base);
-+                      count++;
-+              }
-+              /* XXX: do we need to check rec_len == 0 case? -Chris */
-+              de = (struct ext3_dir_entry_2 *) ((char *) de + le16_to_cpu(de->rec_len));
-+      }
-+      return count;
-+}
-+
-+static void dx_sort_map (struct dx_map_entry *map, unsigned count)
-+{
-+      struct dx_map_entry *p, *q, *top = map + count - 1;
-+      int more;
-+      /* Combsort until bubble sort doesn't suck */
-+      while (count > 2)
-+      {
-+              count = count*10/13;
-+              if (count - 9 < 2) /* 9, 10 -> 11 */
-+                      count = 11;
-+              for (p = top, q = p - count; q >= map; p--, q--)
-+                      if (p->hash < q->hash)
-+                              swap(*p, *q);
-+      }
-+      /* Garden variety bubble sort */
-+      do {
-+              more = 0;
-+              q = top;
-+              while (q-- > map)
-+              {
-+                      if (q[1].hash >= q[0].hash)
-+                              continue;
-+                      swap(*(q+1), *q);
-+                      more = 1;
-+              }
-+      } while(more);
-+}
-+
-+static void dx_insert_block(struct dx_frame *frame, u32 hash, u32 block)
-+{
-+      struct dx_entry *entries = frame->entries;
-+      struct dx_entry *old = frame->at, *new = old + 1;
-+      int count = dx_get_count(entries);
-+
-+      assert(count < dx_get_limit(entries));
-+      assert(old < entries + count);
-+      memmove(new + 1, new, (char *)(entries + count) - (char *)(new));
-+      dx_set_hash(new, hash);
-+      dx_set_block(new, block);
-+      dx_set_count(entries, count + 1);
-+}
-+#endif
-+
-+
-+static void ext3_update_dx_flag(struct inode *inode)
-+{
-+      if (!EXT3_HAS_COMPAT_FEATURE(inode->i_sb,
-+                                   EXT3_FEATURE_COMPAT_DIR_INDEX))
-+              EXT3_I(inode)->i_flags &= ~EXT3_INDEX_FL;
-+}
-+
- /*
-  * NOTE! unlike strncmp, ext3_match returns 1 for success, 0 for failure.
-  *
-@@ -94,6 +724,7 @@ static int inline search_dirblock(struct
-       return 0;
- }
-+
- /*
-  *    ext3_find_entry()
-  *
-@@ -105,6 +736,8 @@ static int inline search_dirblock(struct
-  * The returned buffer_head has ->b_count elevated.  The caller is expected
-  * to brelse() it when appropriate.
-  */
-+
-+      
- static struct buffer_head * ext3_find_entry (struct dentry *dentry,
-                                       struct ext3_dir_entry_2 ** res_dir)
- {
-@@ -119,12 +752,32 @@ static struct buffer_head * ext3_find_en
-       int num = 0;
-       int nblocks, i, err;
-       struct inode *dir = dentry->d_parent->d_inode;
-+      int namelen;
-+      const u8 *name;
-+      unsigned blocksize;
-       *res_dir = NULL;
-       sb = dir->i_sb;
--
-+      blocksize = sb->s_blocksize;
-+      namelen = dentry->d_name.len;
-+      name = dentry->d_name.name;
-+      if (namelen > EXT3_NAME_LEN)
-+              return NULL;
-+#ifdef CONFIG_EXT3_INDEX
-+      if (is_dx(dir)) {
-+              bh = ext3_dx_find_entry(dentry, res_dir, &err);
-+              /*
-+               * On success, or if the error was file not found,
-+               * return.  Otherwise, fall back to doing a search the
-+               * old fashioned way.
-+               */
-+              if (bh || (err != ERR_BAD_DX_DIR))
-+                      return bh;
-+              dxtrace(printk("ext3_find_entry: dx failed, falling back\n"));
-+      }
-+#endif
-       nblocks = dir->i_size >> EXT3_BLOCK_SIZE_BITS(sb);
--      start = dir->u.ext3_i.i_dir_start_lookup;
-+      start = EXT3_I(dir)->i_dir_start_lookup;
-       if (start >= nblocks)
-               start = 0;
-       block = start;
-@@ -165,7 +818,7 @@ restart:
-               i = search_dirblock(bh, dir, dentry,
-                           block << EXT3_BLOCK_SIZE_BITS(sb), res_dir);
-               if (i == 1) {
--                      dir->u.ext3_i.i_dir_start_lookup = block;
-+                      EXT3_I(dir)->i_dir_start_lookup = block;
-                       ret = bh;
-                       goto cleanup_and_exit;
-               } else {
-@@ -196,6 +849,66 @@ cleanup_and_exit:
-       return ret;
- }
-+#ifdef CONFIG_EXT3_INDEX
-+static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
-+                     struct ext3_dir_entry_2 **res_dir, int *err)
-+{
-+      struct super_block * sb;
-+      struct dx_hash_info     hinfo;
-+      u32 hash;
-+      struct dx_frame frames[2], *frame;
-+      struct ext3_dir_entry_2 *de, *top;
-+      struct buffer_head *bh;
-+      unsigned long block;
-+      int retval;
-+      int namelen = dentry->d_name.len;
-+      const u8 *name = dentry->d_name.name;
-+      struct inode *dir = dentry->d_parent->d_inode;
-+      
-+      sb = dir->i_sb;
-+      if (!(frame = dx_probe (dentry, 0, &hinfo, frames, err)))
-+              return NULL;
-+      hash = hinfo.hash;
-+      do {
-+              block = dx_get_block(frame->at);
-+              if (!(bh = ext3_bread (NULL,dir, block, 0, err)))
-+                      goto errout;
-+              de = (struct ext3_dir_entry_2 *) bh->b_data;
-+              top = (struct ext3_dir_entry_2 *) ((char *) de + sb->s_blocksize -
-+                                     EXT3_DIR_REC_LEN(0));
-+              for (; de < top; de = ext3_next_entry(de))
-+              if (ext3_match (namelen, name, de)) {
-+                      if (!ext3_check_dir_entry("ext3_find_entry",
-+                                                dir, de, bh,
-+                                (block<<EXT3_BLOCK_SIZE_BITS(sb))
-+                                        +((char *)de - bh->b_data))) {
-+                              brelse (bh);
-+                              goto errout;
-+                      }
-+                      *res_dir = de;
-+                      dx_release (frames);
-+                      return bh;
-+              }
-+              brelse (bh);
-+              /* Check to see if we should continue to search */
-+              retval = ext3_htree_next_block(dir, hash, frame,
-+                                             frames, err, 0);
-+              if (retval == -1) {
-+                      ext3_warning(sb, __FUNCTION__,
-+                           "error reading index page in directory #%lu",
-+                           dir->i_ino);
-+                      goto errout;
-+              }
-+      } while (retval == 1);
-+      
-+      *err = -ENOENT;
-+errout:
-+      dxtrace(printk("%s not found\n", name));
-+      dx_release (frames);
-+      return NULL;
-+}
-+#endif
-+
- static struct dentry *ext3_lookup(struct inode * dir, struct dentry *dentry)
- {
-       struct inode * inode;
-@@ -212,8 +925,9 @@ static struct dentry *ext3_lookup(struct
-               brelse (bh);
-               inode = iget(dir->i_sb, ino);
--              if (!inode)
-+              if (!inode) {
-                       return ERR_PTR(-EACCES);
-+              }
-       }
-       d_add(dentry, inode);
-       return NULL;
-@@ -237,6 +951,301 @@ static inline void ext3_set_de_type(stru
-               de->file_type = ext3_type_by_mode[(mode & S_IFMT)>>S_SHIFT];
- }
-+#ifdef CONFIG_EXT3_INDEX
-+static struct ext3_dir_entry_2 *
-+dx_move_dirents(char *from, char *to, struct dx_map_entry *map, int count)
-+{
-+      unsigned rec_len = 0;
-+
-+      while (count--) {
-+              struct ext3_dir_entry_2 *de = (struct ext3_dir_entry_2 *) (from + map->offs);
-+              rec_len = EXT3_DIR_REC_LEN(de->name_len);
-+              memcpy (to, de, rec_len);
-+              ((struct ext3_dir_entry_2 *)to)->rec_len = cpu_to_le16(rec_len);
-+              de->inode = 0;
-+              map++;
-+              to += rec_len;
-+      }
-+      return (struct ext3_dir_entry_2 *) (to - rec_len);
-+}
-+
-+static struct ext3_dir_entry_2* dx_pack_dirents(char *base, int size)
-+{
-+      struct ext3_dir_entry_2 *next, *to, *prev, *de = (struct ext3_dir_entry_2 *) base;
-+      unsigned rec_len = 0;
-+
-+      prev = to = de;
-+      while ((char*)de < base + size) {
-+              next = (struct ext3_dir_entry_2 *) ((char *) de +
-+                                                  le16_to_cpu(de->rec_len));
-+              if (de->inode && de->name_len) {
-+                      rec_len = EXT3_DIR_REC_LEN(de->name_len);
-+                      if (de > to)
-+                              memmove(to, de, rec_len);
-+                      to->rec_len = cpu_to_le16(rec_len);
-+                      prev = to;
-+                      to = (struct ext3_dir_entry_2 *)((char *)to + rec_len);
-+              }
-+              de = next;
-+      }
-+      return prev;
-+}
-+
-+static struct ext3_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
-+                      struct buffer_head **bh,struct dx_frame *frame,
-+                      struct dx_hash_info *hinfo, int *error)
-+{
-+      unsigned blocksize = dir->i_sb->s_blocksize;
-+      unsigned count, continued;
-+      struct buffer_head *bh2;
-+      u32 newblock;
-+      u32 hash2;
-+      struct dx_map_entry *map;
-+      char *data1 = (*bh)->b_data, *data2;
-+      unsigned split;
-+      struct ext3_dir_entry_2 *de = NULL, *de2;
-+      int     err;
-+
-+      bh2 = ext3_append (handle, dir, &newblock, error);
-+      if (!(bh2)) {
-+              brelse(*bh);
-+              *bh = NULL;
-+              goto errout;
-+      }
-+
-+      BUFFER_TRACE(*bh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, *bh);
-+      if (err) {
-+      journal_error:
-+              brelse(*bh);
-+              brelse(bh2);
-+              *bh = NULL;
-+              ext3_std_error(dir->i_sb, err);
-+              goto errout;
-+      }
-+      BUFFER_TRACE(frame->bh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, frame->bh);
-+      if (err)
-+              goto journal_error;
-+
-+      data2 = bh2->b_data;
-+
-+      /* create map in the end of data2 block */
-+      map = (struct dx_map_entry *) (data2 + blocksize);
-+      count = dx_make_map ((struct ext3_dir_entry_2 *) data1,
-+                           blocksize, hinfo, map);
-+      map -= count;
-+      split = count/2; // need to adjust to actual middle
-+      dx_sort_map (map, count);
-+      hash2 = map[split].hash;
-+      continued = hash2 == map[split - 1].hash;
-+      dxtrace(printk("Split block %i at %x, %i/%i\n",
-+              dx_get_block(frame->at), hash2, split, count-split));
-+
-+      /* Fancy dance to stay within two buffers */
-+      de2 = dx_move_dirents(data1, data2, map + split, count - split);
-+      de = dx_pack_dirents(data1,blocksize);
-+      de->rec_len = cpu_to_le16(data1 + blocksize - (char *) de);
-+      de2->rec_len = cpu_to_le16(data2 + blocksize - (char *) de2);
-+      dxtrace(dx_show_leaf (hinfo, (struct ext3_dir_entry_2 *) data1, blocksize, 1));
-+      dxtrace(dx_show_leaf (hinfo, (struct ext3_dir_entry_2 *) data2, blocksize, 1));
-+
-+      /* Which block gets the new entry? */
-+      if (hinfo->hash >= hash2)
-+      {
-+              swap(*bh, bh2);
-+              de = de2;
-+      }
-+      dx_insert_block (frame, hash2 + continued, newblock);
-+      err = ext3_journal_dirty_metadata (handle, bh2);
-+      if (err)
-+              goto journal_error;
-+      err = ext3_journal_dirty_metadata (handle, frame->bh);
-+      if (err)
-+              goto journal_error;
-+      brelse (bh2);
-+      dxtrace(dx_show_index ("frame", frame->entries));
-+errout:
-+      return de;
-+}
-+#endif
-+
-+
-+/*
-+ * Add a new entry into a directory (leaf) block.  If de is non-NULL,
-+ * it points to a directory entry which is guaranteed to be large
-+ * enough for new directory entry.  If de is NULL, then
-+ * add_dirent_to_buf will attempt search the directory block for
-+ * space.  It will return -ENOSPC if no space is available, and -EIO
-+ * and -EEXIST if directory entry already exists.
-+ * 
-+ * NOTE!  bh is NOT released in the case where ENOSPC is returned.  In
-+ * all other cases bh is released.
-+ */
-+static int add_dirent_to_buf(handle_t *handle, struct dentry *dentry,
-+                           struct inode *inode, struct ext3_dir_entry_2 *de,
-+                           struct buffer_head * bh)
-+{
-+      struct inode    *dir = dentry->d_parent->d_inode;
-+      const char      *name = dentry->d_name.name;
-+      int             namelen = dentry->d_name.len;
-+      unsigned long   offset = 0;
-+      unsigned short  reclen;
-+      int             nlen, rlen, err;
-+      char            *top;
-+      
-+      reclen = EXT3_DIR_REC_LEN(namelen);
-+      if (!de) {
-+              de = (struct ext3_dir_entry_2 *)bh->b_data;
-+              top = bh->b_data + dir->i_sb->s_blocksize - reclen;
-+              while ((char *) de <= top) {
-+                      if (!ext3_check_dir_entry("ext3_add_entry", dir, de,
-+                                                bh, offset)) {
-+                              brelse (bh);
-+                              return -EIO;
-+                      }
-+                      if (ext3_match (namelen, name, de)) {
-+                              brelse (bh);
-+                              return -EEXIST;
-+                      }
-+                      nlen = EXT3_DIR_REC_LEN(de->name_len);
-+                      rlen = le16_to_cpu(de->rec_len);
-+                      if ((de->inode? rlen - nlen: rlen) >= reclen)
-+                              break;
-+                      de = (struct ext3_dir_entry_2 *)((char *)de + rlen);
-+                      offset += rlen;
-+              }
-+              if ((char *) de > top)
-+                      return -ENOSPC;
-+      }
-+      BUFFER_TRACE(bh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, bh);
-+      if (err) {
-+              ext3_std_error(dir->i_sb, err);
-+              brelse(bh);
-+              return err;
-+      }
-+      
-+      /* By now the buffer is marked for journaling */
-+      nlen = EXT3_DIR_REC_LEN(de->name_len);
-+      rlen = le16_to_cpu(de->rec_len);
-+      if (de->inode) {
-+              struct ext3_dir_entry_2 *de1 = (struct ext3_dir_entry_2 *)((char *)de + nlen);
-+              de1->rec_len = cpu_to_le16(rlen - nlen);
-+              de->rec_len = cpu_to_le16(nlen);
-+              de = de1;
-+      }
-+      de->file_type = EXT3_FT_UNKNOWN;
-+      if (inode) {
-+              de->inode = cpu_to_le32(inode->i_ino);
-+              ext3_set_de_type(dir->i_sb, de, inode->i_mode);
-+      } else
-+              de->inode = 0;
-+      de->name_len = namelen;
-+      memcpy (de->name, name, namelen);
-+      /*
-+       * XXX shouldn't update any times until successful
-+       * completion of syscall, but too many callers depend
-+       * on this.
-+       *
-+       * XXX similarly, too many callers depend on
-+       * ext3_new_inode() setting the times, but error
-+       * recovery deletes the inode, so the worst that can
-+       * happen is that the times are slightly out of date
-+       * and/or different from the directory change time.
-+       */
-+      dir->i_mtime = dir->i_ctime = CURRENT_TIME;
-+      ext3_update_dx_flag(dir);
-+      dir->i_version = ++event;
-+      ext3_mark_inode_dirty(handle, dir);
-+      BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-+      err = ext3_journal_dirty_metadata(handle, bh);
-+      if (err)
-+              ext3_std_error(dir->i_sb, err);
-+      brelse(bh);
-+      return 0;
-+}
-+
-+#ifdef CONFIG_EXT3_INDEX
-+/*
-+ * This converts a one block unindexed directory to a 3 block indexed
-+ * directory, and adds the dentry to the indexed directory.
-+ */
-+static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
-+                          struct inode *inode, struct buffer_head *bh)
-+{
-+      struct inode    *dir = dentry->d_parent->d_inode;
-+      const char      *name = dentry->d_name.name;
-+      int             namelen = dentry->d_name.len;
-+      struct buffer_head *bh2;
-+      struct dx_root  *root;
-+      struct dx_frame frames[2], *frame;
-+      struct dx_entry *entries;
-+      struct ext3_dir_entry_2 *de, *de2;
-+      char            *data1, *top;
-+      unsigned        len;
-+      int             retval;
-+      unsigned        blocksize;
-+      struct dx_hash_info hinfo;
-+      u32             block;
-+              
-+      blocksize =  dir->i_sb->s_blocksize;
-+      dxtrace(printk("Creating index\n"));
-+      retval = ext3_journal_get_write_access(handle, bh);
-+      if (retval) {
-+              ext3_std_error(dir->i_sb, retval);
-+              brelse(bh);
-+              return retval;
-+      }
-+      root = (struct dx_root *) bh->b_data;
-+              
-+      EXT3_I(dir)->i_flags |= EXT3_INDEX_FL;
-+      bh2 = ext3_append (handle, dir, &block, &retval);
-+      if (!(bh2)) {
-+              brelse(bh);
-+              return retval;
-+      }
-+      data1 = bh2->b_data;
-+
-+      /* The 0th block becomes the root, move the dirents out */
-+      de = (struct ext3_dir_entry_2 *)&root->dotdot;
-+      de = (struct ext3_dir_entry_2 *)((char *)de + le16_to_cpu(de->rec_len));
-+      len = ((char *) root) + blocksize - (char *) de;
-+      memcpy (data1, de, len);
-+      de = (struct ext3_dir_entry_2 *) data1;
-+      top = data1 + len;
-+      while (((char *) de2=(char*)de+le16_to_cpu(de->rec_len)) < top)
-+              de = de2;
-+      de->rec_len = cpu_to_le16(data1 + blocksize - (char *) de);
-+      /* Initialize the root; the dot dirents already exist */
-+      de = (struct ext3_dir_entry_2 *) (&root->dotdot);
-+      de->rec_len = cpu_to_le16(blocksize - EXT3_DIR_REC_LEN(2));
-+      memset (&root->info, 0, sizeof(root->info));
-+      root->info.info_length = sizeof(root->info);
-+      root->info.hash_version = dir->i_sb->u.ext3_sb.s_def_hash_version;
-+      entries = root->entries;
-+      dx_set_block (entries, 1);
-+      dx_set_count (entries, 1);
-+      dx_set_limit (entries, dx_root_limit(dir, sizeof(root->info)));
-+
-+      /* Initialize as for dx_probe */
-+      hinfo.hash_version = root->info.hash_version;
-+      hinfo.seed = dir->i_sb->u.ext3_sb.s_hash_seed;
-+      ext3fs_dirhash(name, namelen, &hinfo);
-+      frame = frames;
-+      frame->entries = entries;
-+      frame->at = entries;
-+      frame->bh = bh;
-+      bh = bh2;
-+      de = do_split(handle,dir, &bh, frame, &hinfo, &retval);
-+      dx_release (frames);
-+      if (!(de))
-+              return retval;
-+
-+      return add_dirent_to_buf(handle, dentry, inode, de, bh);
-+}
-+#endif
-+
- /*
-  *    ext3_add_entry()
-  *
-@@ -247,127 +1255,198 @@ static inline void ext3_set_de_type(stru
-  * may not sleep between calling this and putting something into
-  * the entry, as someone else might have used it while you slept.
-  */
--
--/*
-- * AKPM: the journalling code here looks wrong on the error paths
-- */
- static int ext3_add_entry (handle_t *handle, struct dentry *dentry,
-       struct inode *inode)
- {
-       struct inode *dir = dentry->d_parent->d_inode;
--      const char *name = dentry->d_name.name;
--      int namelen = dentry->d_name.len;
-       unsigned long offset;
--      unsigned short rec_len;
-       struct buffer_head * bh;
--      struct ext3_dir_entry_2 * de, * de1;
-+      struct ext3_dir_entry_2 *de;
-       struct super_block * sb;
-       int     retval;
-+#ifdef CONFIG_EXT3_INDEX
-+      int     dx_fallback=0;
-+#endif
-+      unsigned blocksize;
-+      unsigned nlen, rlen;
-+      u32 block, blocks;
-       sb = dir->i_sb;
--
--      if (!namelen)
-+      blocksize = sb->s_blocksize;
-+      if (!dentry->d_name.len)
-               return -EINVAL;
--      bh = ext3_bread (handle, dir, 0, 0, &retval);
-+#ifdef CONFIG_EXT3_INDEX
-+      if (is_dx(dir)) {
-+              retval = ext3_dx_add_entry(handle, dentry, inode);
-+              if (!retval || (retval != ERR_BAD_DX_DIR))
-+                      return retval;
-+              EXT3_I(dir)->i_flags &= ~EXT3_INDEX_FL;
-+              dx_fallback++;
-+              ext3_mark_inode_dirty(handle, dir);
-+      }
-+#endif
-+      blocks = dir->i_size >> sb->s_blocksize_bits;
-+      for (block = 0, offset = 0; block < blocks; block++) {
-+              bh = ext3_bread(handle, dir, block, 0, &retval);
-+              if(!bh)
-+                      return retval;
-+              retval = add_dirent_to_buf(handle, dentry, inode, 0, bh);
-+              if (retval != -ENOSPC)
-+                      return retval;
-+
-+#ifdef CONFIG_EXT3_INDEX
-+              if (blocks == 1 && !dx_fallback &&
-+                  EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_DIR_INDEX))
-+                      return make_indexed_dir(handle, dentry, inode, bh);
-+#endif
-+              brelse(bh);
-+      }
-+      bh = ext3_append(handle, dir, &block, &retval);
-       if (!bh)
-               return retval;
--      rec_len = EXT3_DIR_REC_LEN(namelen);
--      offset = 0;
-       de = (struct ext3_dir_entry_2 *) bh->b_data;
--      while (1) {
--              if ((char *)de >= sb->s_blocksize + bh->b_data) {
--                      brelse (bh);
--                      bh = NULL;
--                      bh = ext3_bread (handle, dir,
--                              offset >> EXT3_BLOCK_SIZE_BITS(sb), 1, &retval);
--                      if (!bh)
--                              return retval;
--                      if (dir->i_size <= offset) {
--                              if (dir->i_size == 0) {
--                                      brelse(bh);
--                                      return -ENOENT;
--                              }
-+      de->inode = 0;
-+      de->rec_len = cpu_to_le16(rlen = blocksize);
-+      nlen = 0;
-+      return add_dirent_to_buf(handle, dentry, inode, de, bh);
-+}
--                              ext3_debug ("creating next block\n");
-+#ifdef CONFIG_EXT3_INDEX
-+/*
-+ * Returns 0 for success, or a negative error value
-+ */
-+static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry,
-+                           struct inode *inode)
-+{
-+      struct dx_frame frames[2], *frame;
-+      struct dx_entry *entries, *at;
-+      struct dx_hash_info hinfo;
-+      struct buffer_head * bh;
-+      struct inode *dir = dentry->d_parent->d_inode;
-+      struct super_block * sb = dir->i_sb;
-+      struct ext3_dir_entry_2 *de;
-+      int err;
--                              BUFFER_TRACE(bh, "get_write_access");
--                              ext3_journal_get_write_access(handle, bh);
--                              de = (struct ext3_dir_entry_2 *) bh->b_data;
--                              de->inode = 0;
--                              de->rec_len = le16_to_cpu(sb->s_blocksize);
--                              dir->u.ext3_i.i_disksize =
--                                      dir->i_size = offset + sb->s_blocksize;
--                              dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
--                              ext3_mark_inode_dirty(handle, dir);
--                      } else {
-+      frame = dx_probe(dentry, 0, &hinfo, frames, &err);
-+      if (!frame)
-+              return err;
-+      entries = frame->entries;
-+      at = frame->at;
--                              ext3_debug ("skipping to next block\n");
-+      if (!(bh = ext3_bread(handle,dir, dx_get_block(frame->at), 0, &err)))
-+              goto cleanup;
--                              de = (struct ext3_dir_entry_2 *) bh->b_data;
--                      }
--              }
--              if (!ext3_check_dir_entry ("ext3_add_entry", dir, de, bh,
--                                         offset)) {
--                      brelse (bh);
--                      return -ENOENT;
--              }
--              if (ext3_match (namelen, name, de)) {
--                              brelse (bh);
--                              return -EEXIST;
-+      BUFFER_TRACE(bh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, bh);
-+      if (err)
-+              goto journal_error;
-+
-+      err = add_dirent_to_buf(handle, dentry, inode, 0, bh);
-+      if (err != -ENOSPC) {
-+              bh = 0;
-+              goto cleanup;
-+      }
-+
-+      /* Block full, should compress but for now just split */
-+      dxtrace(printk("using %u of %u node entries\n",
-+                     dx_get_count(entries), dx_get_limit(entries)));
-+      /* Need to split index? */
-+      if (dx_get_count(entries) == dx_get_limit(entries)) {
-+              u32 newblock;
-+              unsigned icount = dx_get_count(entries);
-+              int levels = frame - frames;
-+              struct dx_entry *entries2;
-+              struct dx_node *node2;
-+              struct buffer_head *bh2;
-+
-+              if (levels && (dx_get_count(frames->entries) ==
-+                             dx_get_limit(frames->entries))) {
-+                      ext3_warning(sb, __FUNCTION__,
-+                                   "Directory index full!\n");
-+                      err = -ENOSPC;
-+                      goto cleanup;
-               }
--              if ((le32_to_cpu(de->inode) == 0 &&
--                              le16_to_cpu(de->rec_len) >= rec_len) ||
--                  (le16_to_cpu(de->rec_len) >=
--                              EXT3_DIR_REC_LEN(de->name_len) + rec_len)) {
--                      BUFFER_TRACE(bh, "get_write_access");
--                      ext3_journal_get_write_access(handle, bh);
--                      /* By now the buffer is marked for journaling */
--                      offset += le16_to_cpu(de->rec_len);
--                      if (le32_to_cpu(de->inode)) {
--                              de1 = (struct ext3_dir_entry_2 *) ((char *) de +
--                                      EXT3_DIR_REC_LEN(de->name_len));
--                              de1->rec_len =
--                                      cpu_to_le16(le16_to_cpu(de->rec_len) -
--                                      EXT3_DIR_REC_LEN(de->name_len));
--                              de->rec_len = cpu_to_le16(
--                                              EXT3_DIR_REC_LEN(de->name_len));
--                              de = de1;
-+              bh2 = ext3_append (handle, dir, &newblock, &err);
-+              if (!(bh2))
-+                      goto cleanup;
-+              node2 = (struct dx_node *)(bh2->b_data);
-+              entries2 = node2->entries;
-+              node2->fake.rec_len = cpu_to_le16(sb->s_blocksize);
-+              node2->fake.inode = 0;
-+              BUFFER_TRACE(frame->bh, "get_write_access");
-+              err = ext3_journal_get_write_access(handle, frame->bh);
-+              if (err)
-+                      goto journal_error;
-+              if (levels) {
-+                      unsigned icount1 = icount/2, icount2 = icount - icount1;
-+                      unsigned hash2 = dx_get_hash(entries + icount1);
-+                      dxtrace(printk("Split index %i/%i\n", icount1, icount2));
-+                              
-+                      BUFFER_TRACE(frame->bh, "get_write_access"); /* index root */
-+                      err = ext3_journal_get_write_access(handle,
-+                                                           frames[0].bh);
-+                      if (err)
-+                              goto journal_error;
-+                              
-+                      memcpy ((char *) entries2, (char *) (entries + icount1),
-+                              icount2 * sizeof(struct dx_entry));
-+                      dx_set_count (entries, icount1);
-+                      dx_set_count (entries2, icount2);
-+                      dx_set_limit (entries2, dx_node_limit(dir));
-+
-+                      /* Which index block gets the new entry? */
-+                      if (at - entries >= icount1) {
-+                              frame->at = at = at - entries - icount1 + entries2;
-+                              frame->entries = entries = entries2;
-+                              swap(frame->bh, bh2);
-                       }
--                      de->file_type = EXT3_FT_UNKNOWN;
--                      if (inode) {
--                              de->inode = cpu_to_le32(inode->i_ino);
--                              ext3_set_de_type(dir->i_sb, de, inode->i_mode);
--                      } else
--                              de->inode = 0;
--                      de->name_len = namelen;
--                      memcpy (de->name, name, namelen);
--                      /*
--                       * XXX shouldn't update any times until successful
--                       * completion of syscall, but too many callers depend
--                       * on this.
--                       *
--                       * XXX similarly, too many callers depend on
--                       * ext3_new_inode() setting the times, but error
--                       * recovery deletes the inode, so the worst that can
--                       * happen is that the times are slightly out of date
--                       * and/or different from the directory change time.
--                       */
--                      dir->i_mtime = dir->i_ctime = CURRENT_TIME;
--                      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
--                      dir->i_version = ++event;
--                      ext3_mark_inode_dirty(handle, dir);
--                      BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
--                      ext3_journal_dirty_metadata(handle, bh);
--                      brelse(bh);
--                      return 0;
-+                      dx_insert_block (frames + 0, hash2, newblock);
-+                      dxtrace(dx_show_index ("node", frames[1].entries));
-+                      dxtrace(dx_show_index ("node",
-+                             ((struct dx_node *) bh2->b_data)->entries));
-+                      err = ext3_journal_dirty_metadata(handle, bh2);
-+                      if (err)
-+                              goto journal_error;
-+                      brelse (bh2);
-+              } else {
-+                      dxtrace(printk("Creating second level index...\n"));
-+                      memcpy((char *) entries2, (char *) entries,
-+                             icount * sizeof(struct dx_entry));
-+                      dx_set_limit(entries2, dx_node_limit(dir));
-+
-+                      /* Set up root */
-+                      dx_set_count(entries, 1);
-+                      dx_set_block(entries + 0, newblock);
-+                      ((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels = 1;
-+
-+                      /* Add new access path frame */
-+                      frame = frames + 1;
-+                      frame->at = at = at - entries + entries2;
-+                      frame->entries = entries = entries2;
-+                      frame->bh = bh2;
-+                      err = ext3_journal_get_write_access(handle,
-+                                                           frame->bh);
-+                      if (err)
-+                              goto journal_error;
-               }
--              offset += le16_to_cpu(de->rec_len);
--              de = (struct ext3_dir_entry_2 *)
--                      ((char *) de + le16_to_cpu(de->rec_len));
-+              ext3_journal_dirty_metadata(handle, frames[0].bh);
-       }
--      brelse (bh);
--      return -ENOSPC;
-+      de = do_split(handle, dir, &bh, frame, &hinfo, &err);
-+      if (!de)
-+              goto cleanup;
-+      err = add_dirent_to_buf(handle, dentry, inode, de, bh);
-+      bh = 0;
-+      goto cleanup;
-+      
-+journal_error:
-+      ext3_std_error(dir->i_sb, err);
-+cleanup:
-+      if (bh)
-+              brelse(bh);
-+      dx_release(frames);
-+      return err;
- }
-+#endif
- /*
-  * ext3_delete_entry deletes a directory entry by merging it with the
-@@ -451,9 +1530,11 @@ static int ext3_create (struct inode * d
-       struct inode * inode;
-       int err;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -478,9 +1559,11 @@ static int ext3_mknod (struct inode * di
-       struct inode *inode;
-       int err;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -507,9 +1590,11 @@ static int ext3_mkdir(struct inode * dir
-       if (dir->i_nlink >= EXT3_LINK_MAX)
-               return -EMLINK;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -521,7 +1606,7 @@ static int ext3_mkdir(struct inode * dir
-       inode->i_op = &ext3_dir_inode_operations;
-       inode->i_fop = &ext3_dir_operations;
--      inode->i_size = inode->u.ext3_i.i_disksize = inode->i_sb->s_blocksize;
-+      inode->i_size = EXT3_I(inode)->i_disksize = inode->i_sb->s_blocksize;
-       inode->i_blocks = 0;    
-       dir_block = ext3_bread (handle, inode, 0, 1, &err);
-       if (!dir_block) {
-@@ -554,21 +1639,19 @@ static int ext3_mkdir(struct inode * dir
-               inode->i_mode |= S_ISGID;
-       ext3_mark_inode_dirty(handle, inode);
-       err = ext3_add_entry (handle, dentry, inode);
--      if (err)
--              goto out_no_entry;
-+      if (err) {
-+              inode->i_nlink = 0;
-+              ext3_mark_inode_dirty(handle, inode);
-+              iput (inode);
-+              goto out_stop;
-+      }
-       dir->i_nlink++;
--      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(dir);
-       ext3_mark_inode_dirty(handle, dir);
-       d_instantiate(dentry, inode);
- out_stop:
-       ext3_journal_stop(handle, dir);
-       return err;
--
--out_no_entry:
--      inode->i_nlink = 0;
--      ext3_mark_inode_dirty(handle, inode);
--      iput (inode);
--      goto out_stop;
- }
- /*
-@@ -655,7 +1738,7 @@ int ext3_orphan_add(handle_t *handle, st
-       int err = 0, rc;
-       
-       lock_super(sb);
--      if (!list_empty(&inode->u.ext3_i.i_orphan))
-+      if (!list_empty(&EXT3_I(inode)->i_orphan))
-               goto out_unlock;
-       /* Orphan handling is only valid for files with data blocks
-@@ -696,7 +1779,7 @@ int ext3_orphan_add(handle_t *handle, st
-        * This is safe: on error we're going to ignore the orphan list
-        * anyway on the next recovery. */
-       if (!err)
--              list_add(&inode->u.ext3_i.i_orphan, &EXT3_SB(sb)->s_orphan);
-+              list_add(&EXT3_I(inode)->i_orphan, &EXT3_SB(sb)->s_orphan);
-       jbd_debug(4, "superblock will point to %ld\n", inode->i_ino);
-       jbd_debug(4, "orphan inode %ld will point to %d\n",
-@@ -714,25 +1797,26 @@ out_unlock:
- int ext3_orphan_del(handle_t *handle, struct inode *inode)
- {
-       struct list_head *prev;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       struct ext3_sb_info *sbi;
-       ino_t ino_next; 
-       struct ext3_iloc iloc;
-       int err = 0;
-       
-       lock_super(inode->i_sb);
--      if (list_empty(&inode->u.ext3_i.i_orphan)) {
-+      if (list_empty(&ei->i_orphan)) {
-               unlock_super(inode->i_sb);
-               return 0;
-       }
-       ino_next = NEXT_ORPHAN(inode);
--      prev = inode->u.ext3_i.i_orphan.prev;
-+      prev = ei->i_orphan.prev;
-       sbi = EXT3_SB(inode->i_sb);
-       jbd_debug(4, "remove inode %ld from orphan list\n", inode->i_ino);
--      list_del(&inode->u.ext3_i.i_orphan);
--      INIT_LIST_HEAD(&inode->u.ext3_i.i_orphan);
-+      list_del(&ei->i_orphan);
-+      INIT_LIST_HEAD(&ei->i_orphan);
-       /* If we're on an error path, we may not have a valid
-        * transaction handle with which to update the orphan list on
-@@ -793,8 +1877,9 @@ static int ext3_rmdir (struct inode * di
-       handle_t *handle;
-       handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS);
--      if (IS_ERR(handle))
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       retval = -ENOENT;
-       bh = ext3_find_entry (dentry, &de);
-@@ -832,7 +1917,7 @@ static int ext3_rmdir (struct inode * di
-       dir->i_nlink--;
-       inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
-       ext3_mark_inode_dirty(handle, inode);
--      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(dir);
-       ext3_mark_inode_dirty(handle, dir);
- end_rmdir:
-@@ -850,8 +1935,9 @@ static int ext3_unlink(struct inode * di
-       handle_t *handle;
-       handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS);
--      if (IS_ERR(handle))
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -878,7 +1964,7 @@ static int ext3_unlink(struct inode * di
-       if (retval)
-               goto end_unlink;
-       dir->i_ctime = dir->i_mtime = CURRENT_TIME;
--      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(dir);
-       ext3_mark_inode_dirty(handle, dir);
-       inode->i_nlink--;
-       if (!inode->i_nlink)
-@@ -904,9 +1990,11 @@ static int ext3_symlink (struct inode * 
-       if (l > dir->i_sb->s_blocksize)
-               return -ENAMETOOLONG;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 5);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 5);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -916,7 +2004,7 @@ static int ext3_symlink (struct inode * 
-       if (IS_ERR(inode))
-               goto out_stop;
--      if (l > sizeof (inode->u.ext3_i.i_data)) {
-+      if (l > sizeof (EXT3_I(inode)->i_data)) {
-               inode->i_op = &page_symlink_inode_operations;
-               inode->i_mapping->a_ops = &ext3_aops;
-               /*
-@@ -925,25 +2013,23 @@ static int ext3_symlink (struct inode * 
-                * i_size in generic_commit_write().
-                */
-               err = block_symlink(inode, symname, l);
--              if (err)
--                      goto out_no_entry;
-+              if (err) {
-+                      ext3_dec_count(handle, inode);
-+                      ext3_mark_inode_dirty(handle, inode);
-+                      iput (inode);
-+                      goto out_stop;
-+              }
-       } else {
-               inode->i_op = &ext3_fast_symlink_inode_operations;
--              memcpy((char*)&inode->u.ext3_i.i_data,symname,l);
-+              memcpy((char*)&EXT3_I(inode)->i_data,symname,l);
-               inode->i_size = l-1;
-       }
--      inode->u.ext3_i.i_disksize = inode->i_size;
-+      EXT3_I(inode)->i_disksize = inode->i_size;
-       err = ext3_add_nondir(handle, dentry, inode);
-       ext3_mark_inode_dirty(handle, inode);
- out_stop:
-       ext3_journal_stop(handle, dir);
-       return err;
--
--out_no_entry:
--      ext3_dec_count(handle, inode);
--      ext3_mark_inode_dirty(handle, inode);
--      iput (inode);
--      goto out_stop;
- }
- static int ext3_link (struct dentry * old_dentry,
-@@ -956,12 +2042,15 @@ static int ext3_link (struct dentry * ol
-       if (S_ISDIR(inode->i_mode))
-               return -EPERM;
--      if (inode->i_nlink >= EXT3_LINK_MAX)
-+      if (inode->i_nlink >= EXT3_LINK_MAX) {
-               return -EMLINK;
-+      }
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -995,9 +2084,11 @@ static int ext3_rename (struct inode * o
-       old_bh = new_bh = dir_bh = NULL;
--      handle = ext3_journal_start(old_dir, 2 * EXT3_DATA_TRANS_BLOCKS + 2);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(old_dir, 2 * EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 2);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(old_dir) || IS_SYNC(new_dir))
-               handle->h_sync = 1;
-@@ -1077,7 +2168,7 @@ static int ext3_rename (struct inode * o
-               new_inode->i_ctime = CURRENT_TIME;
-       }
-       old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME;
--      old_dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(old_dir);
-       if (dir_bh) {
-               BUFFER_TRACE(dir_bh, "get_write_access");
-               ext3_journal_get_write_access(handle, dir_bh);
-@@ -1089,7 +2180,7 @@ static int ext3_rename (struct inode * o
-                       new_inode->i_nlink--;
-               } else {
-                       new_dir->i_nlink++;
--                      new_dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+                      ext3_update_dx_flag(new_dir);
-                       ext3_mark_inode_dirty(handle, new_dir);
-               }
-       }
---- linux-2.4.20/fs/ext3/super.c~ext-2.4-patch-1       Sat Apr  5 03:56:31 2003
-+++ linux-2.4.20-braam/fs/ext3/super.c Sat Apr  5 03:56:31 2003
-@@ -707,6 +707,7 @@ static int ext3_setup_super(struct super
-       es->s_mtime = cpu_to_le32(CURRENT_TIME);
-       ext3_update_dynamic_rev(sb);
-       EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
-+
-       ext3_commit_super (sb, es, 1);
-       if (test_opt (sb, DEBUG))
-               printk (KERN_INFO
-@@ -717,6 +718,7 @@ static int ext3_setup_super(struct super
-                       EXT3_BLOCKS_PER_GROUP(sb),
-                       EXT3_INODES_PER_GROUP(sb),
-                       sbi->s_mount_opt);
-+
-       printk(KERN_INFO "EXT3 FS " EXT3FS_VERSION ", " EXT3FS_DATE " on %s, ",
-                               bdevname(sb->s_dev));
-       if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
-@@ -890,6 +892,7 @@ static loff_t ext3_max_size(int bits)
-       return res;
- }
-+
- struct super_block * ext3_read_super (struct super_block * sb, void * data,
-                                     int silent)
- {
-@@ -1066,6 +1069,9 @@ struct super_block * ext3_read_super (st
-       sbi->s_mount_state = le16_to_cpu(es->s_state);
-       sbi->s_addr_per_block_bits = log2(EXT3_ADDR_PER_BLOCK(sb));
-       sbi->s_desc_per_block_bits = log2(EXT3_DESC_PER_BLOCK(sb));
-+      for (i=0; i < 4; i++)
-+              sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);
-+      sbi->s_def_hash_version = es->s_def_hash_version;
-       if (sbi->s_blocks_per_group > blocksize * 8) {
-               printk (KERN_ERR
-@@ -1769,6 +1775,7 @@ static void __exit exit_ext3_fs(void)
-       unregister_filesystem(&ext3_fs_type);
- }
-+EXPORT_SYMBOL(ext3_force_commit);
- EXPORT_SYMBOL(ext3_bread);
- MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
---- linux-2.4.20/include/linux/ext3_fs.h~ext-2.4-patch-1       Sat Apr  5 03:56:31 2003
-+++ linux-2.4.20-braam/include/linux/ext3_fs.h Sat Apr  5 03:56:31 2003
-@@ -40,6 +40,11 @@
- #define EXT3FS_VERSION                "2.4-0.9.19"
- /*
-+ * Always enable hashed directories
-+ */
-+#define CONFIG_EXT3_INDEX
-+
-+/*
-  * Debug code
-  */
- #ifdef EXT3FS_DEBUG
-@@ -437,8 +442,11 @@ struct ext3_super_block {
- /*E0*/        __u32   s_journal_inum;         /* inode number of journal file */
-       __u32   s_journal_dev;          /* device number of journal file */
-       __u32   s_last_orphan;          /* start of list of inodes to delete */
--
--/*EC*/        __u32   s_reserved[197];        /* Padding to the end of the block */
-+      __u32   s_hash_seed[4];         /* HTREE hash seed */
-+      __u8    s_def_hash_version;     /* Default hash version to use */
-+      __u8    s_reserved_char_pad;
-+      __u16   s_reserved_word_pad;
-+      __u32   s_reserved[192];        /* Padding to the end of the block */
- };
- #ifdef __KERNEL__
-@@ -575,9 +583,46 @@ struct ext3_dir_entry_2 {
- #define EXT3_DIR_ROUND                        (EXT3_DIR_PAD - 1)
- #define EXT3_DIR_REC_LEN(name_len)    (((name_len) + 8 + EXT3_DIR_ROUND) & \
-                                        ~EXT3_DIR_ROUND)
-+/*
-+ * Hash Tree Directory indexing
-+ * (c) Daniel Phillips, 2001
-+ */
-+
-+#ifdef CONFIG_EXT3_INDEX
-+  #define is_dx(dir) (EXT3_HAS_COMPAT_FEATURE(dir->i_sb, \
-+                                            EXT3_FEATURE_COMPAT_DIR_INDEX) && \
-+                    (EXT3_I(dir)->i_flags & EXT3_INDEX_FL))
-+#define EXT3_DIR_LINK_MAX(dir) (!is_dx(dir) && (dir)->i_nlink >= EXT3_LINK_MAX)
-+#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || (dir)->i_nlink == 1)
-+#else
-+  #define is_dx(dir) 0
-+#define EXT3_DIR_LINK_MAX(dir) ((dir)->i_nlink >= EXT3_LINK_MAX)
-+#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2)
-+#endif
-+
-+/* Legal values for the dx_root hash_version field: */
-+
-+#define DX_HASH_LEGACY                0
-+#define DX_HASH_HALF_MD4      1
-+#define DX_HASH_TEA           2
-+
-+/* hash info structure used by the directory hash */
-+struct dx_hash_info
-+{
-+      u32             hash;
-+      u32             minor_hash;
-+      int             hash_version;
-+      u32             *seed;
-+};
- #ifdef __KERNEL__
- /*
-+ * Control parameters used by ext3_htree_next_block
-+ */
-+#define HASH_NB_ALWAYS                1
-+
-+
-+/*
-  * Describe an inode's exact location on disk and in memory
-  */
- struct ext3_iloc
-@@ -587,6 +632,27 @@ struct ext3_iloc
-       unsigned long block_group;
- };
-+
-+/*
-+ * This structure is stuffed into the struct file's private_data field
-+ * for directories.  It is where we put information so that we can do
-+ * readdir operations in hash tree order.
-+ */
-+struct dir_private_info {
-+      rb_root_t       root;
-+      rb_node_t       *curr_node;
-+      struct fname    *extra_fname;
-+      loff_t          last_pos;
-+      __u32           curr_hash;
-+      __u32           curr_minor_hash;
-+      __u32           next_hash;
-+};
-+
-+/*
-+ * Special error return code only used by dx_probe() and its callers.
-+ */
-+#define ERR_BAD_DX_DIR        -75000
-+
- /*
-  * Function prototypes
-  */
-@@ -614,11 +680,20 @@ extern struct ext3_group_desc * ext3_get
- /* dir.c */
- extern int ext3_check_dir_entry(const char *, struct inode *,
--                              struct ext3_dir_entry_2 *, struct buffer_head *,
--                              unsigned long);
-+                              struct ext3_dir_entry_2 *,
-+                              struct buffer_head *, unsigned long);
-+extern void ext3_htree_store_dirent(struct file *dir_file, __u32 hash,
-+                                  __u32 minor_hash,
-+                                  struct ext3_dir_entry_2 *dirent);
-+extern void ext3_htree_free_dir_info(struct dir_private_info *p);
-+
- /* fsync.c */
- extern int ext3_sync_file (struct file *, struct dentry *, int);
-+/* hash.c */
-+extern int ext3fs_dirhash(const char *name, int len, struct
-+                        dx_hash_info *hinfo);
-+
- /* ialloc.c */
- extern struct inode * ext3_new_inode (handle_t *, const struct inode *, int);
- extern void ext3_free_inode (handle_t *, struct inode *);
-@@ -650,6 +725,8 @@ extern int ext3_ioctl (struct inode *, s
- /* namei.c */
- extern int ext3_orphan_add(handle_t *, struct inode *);
- extern int ext3_orphan_del(handle_t *, struct inode *);
-+extern int ext3_htree_fill_tree(struct file *dir_file, __u32 start_hash,
-+                              __u32 start_minor_hash, __u32 *next_hash);
- /* super.c */
- extern void ext3_error (struct super_block *, const char *, const char *, ...)
---- linux-2.4.20/include/linux/ext3_fs_sb.h~ext-2.4-patch-1    Sat Apr  5 03:56:31 2003
-+++ linux-2.4.20-braam/include/linux/ext3_fs_sb.h      Sat Apr  5 03:56:31 2003
-@@ -62,6 +62,8 @@ struct ext3_sb_info {
-       int s_inode_size;
-       int s_first_ino;
-       u32 s_next_generation;
-+      u32 s_hash_seed[4];
-+      int s_def_hash_version;
-       /* Journaling */
-       struct inode * s_journal_inode;
---- linux-2.4.20/include/linux/ext3_jbd.h~ext-2.4-patch-1      Sat Apr  5 03:56:31 2003
-+++ linux-2.4.20-braam/include/linux/ext3_jbd.h        Sat Apr  5 03:56:31 2003
-@@ -63,6 +63,8 @@ extern int ext3_writepage_trans_blocks(s
- #define EXT3_RESERVE_TRANS_BLOCKS     12
-+#define EXT3_INDEX_EXTRA_TRANS_BLOCKS 8
-+
- int
- ext3_mark_iloc_dirty(handle_t *handle, 
-                    struct inode *inode,
---- linux-2.4.20/include/linux/rbtree.h~ext-2.4-patch-1        Sat Apr  5 03:56:31 2003
-+++ linux-2.4.20-braam/include/linux/rbtree.h  Sat Apr  5 03:56:31 2003
-@@ -120,6 +120,8 @@ rb_root_t;
- extern void rb_insert_color(rb_node_t *, rb_root_t *);
- extern void rb_erase(rb_node_t *, rb_root_t *);
-+extern rb_node_t *rb_get_first(rb_root_t *root);
-+extern rb_node_t *rb_get_next(rb_node_t *n);
- static inline void rb_link_node(rb_node_t * node, rb_node_t * parent, rb_node_t ** rb_link)
- {
---- linux-2.4.20/lib/rbtree.c~ext-2.4-patch-1  Sat Apr  5 03:56:31 2003
-+++ linux-2.4.20-braam/lib/rbtree.c    Sat Apr  5 03:56:31 2003
-@@ -17,6 +17,8 @@
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-   linux/lib/rbtree.c
-+
-+  rb_get_first and rb_get_next written by Theodore Ts'o, 9/8/2002
- */
- #include <linux/rbtree.h>
-@@ -294,3 +296,43 @@ void rb_erase(rb_node_t * node, rb_root_
-               __rb_erase_color(child, parent, root);
- }
- EXPORT_SYMBOL(rb_erase);
-+
-+/*
-+ * This function returns the first node (in sort order) of the tree.
-+ */
-+rb_node_t *rb_get_first(rb_root_t *root)
-+{
-+      rb_node_t       *n;
-+
-+      n = root->rb_node;
-+      if (!n)
-+              return 0;
-+      while (n->rb_left)
-+              n = n->rb_left;
-+      return n;
-+}
-+EXPORT_SYMBOL(rb_get_first);
-+
-+/*
-+ * Given a node, this function will return the next node in the tree.
-+ */
-+rb_node_t *rb_get_next(rb_node_t *n)
-+{
-+      rb_node_t       *parent;
-+
-+      if (n->rb_right) {
-+              n = n->rb_right;
-+              while (n->rb_left)
-+                      n = n->rb_left;
-+              return n;
-+      } else {
-+              while ((parent = n->rb_parent)) {
-+                      if (n == parent->rb_left)
-+                              return parent;
-+                      n = parent;
-+              }
-+              return 0;
-+      }
-+}
-+EXPORT_SYMBOL(rb_get_next);
-+
-
-_
diff --git a/lustre/kernel_patches/patches/ext3-2.4.18-ino_sb_macro-2.patch b/lustre/kernel_patches/patches/ext3-2.4.18-ino_sb_macro-2.patch
deleted file mode 100644 (file)
index bbfe6a9..0000000
+++ /dev/null
@@ -1,1478 +0,0 @@
- fs/ext3/balloc.c              |  134 +-
- fs/ext3/dir.c                 |    2 
- fs/ext3/ialloc.c              |  102 -
- fs/ext3/inode.c               |  202 +--
- fs/ext3/ioctl.c               |   13 
- fs/ext3/namei.c               |    9 
- fs/ext3/super.c               |   22 
- fs/ext3/symlink.c             |    8 
- include/linux/ext3_fs.h       |   64 
- include/linux/ext3_jbd.h      |    2 
- 19 files changed, 5574 insertions(+), 290 deletions(-)
-
---- linux-2.4.18-chaos/fs/ext3/balloc.c~ext3-2.4.18-ino_sb_macro-2     2003-07-28 17:52:04.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/balloc.c 2003-09-16 23:34:40.000000000 +0400
-@@ -46,18 +46,18 @@ struct ext3_group_desc * ext3_get_group_
-       unsigned long desc;
-       struct ext3_group_desc * gdp;
--      if (block_group >= sb->u.ext3_sb.s_groups_count) {
-+      if (block_group >= EXT3_SB(sb)->s_groups_count) {
-               ext3_error (sb, "ext3_get_group_desc",
-                           "block_group >= groups_count - "
-                           "block_group = %d, groups_count = %lu",
--                          block_group, sb->u.ext3_sb.s_groups_count);
-+                          block_group, EXT3_SB(sb)->s_groups_count);
-               return NULL;
-       }
-       
-       group_desc = block_group / EXT3_DESC_PER_BLOCK(sb);
-       desc = block_group % EXT3_DESC_PER_BLOCK(sb);
--      if (!sb->u.ext3_sb.s_group_desc[group_desc]) {
-+      if (!EXT3_SB(sb)->s_group_desc[group_desc]) {
-               ext3_error (sb, "ext3_get_group_desc",
-                           "Group descriptor not loaded - "
-                           "block_group = %d, group_desc = %lu, desc = %lu",
-@@ -66,9 +66,9 @@ struct ext3_group_desc * ext3_get_group_
-       }
-       
-       gdp = (struct ext3_group_desc *) 
--            sb->u.ext3_sb.s_group_desc[group_desc]->b_data;
-+            EXT3_SB(sb)->s_group_desc[group_desc]->b_data;
-       if (bh)
--              *bh = sb->u.ext3_sb.s_group_desc[group_desc];
-+              *bh = EXT3_SB(sb)->s_group_desc[group_desc];
-       return gdp + desc;
- }
-@@ -104,8 +104,8 @@ static int read_block_bitmap (struct sup
-        * this group.  The IO will be retried next time.
-        */
- error_out:
--      sb->u.ext3_sb.s_block_bitmap_number[bitmap_nr] = block_group;
--      sb->u.ext3_sb.s_block_bitmap[bitmap_nr] = bh;
-+      EXT3_SB(sb)->s_block_bitmap_number[bitmap_nr] = block_group;
-+      EXT3_SB(sb)->s_block_bitmap[bitmap_nr] = bh;
-       return retval;
- }
-@@ -128,16 +128,17 @@ static int __load_block_bitmap (struct s
-       int i, j, retval = 0;
-       unsigned long block_bitmap_number;
-       struct buffer_head * block_bitmap;
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
--      if (block_group >= sb->u.ext3_sb.s_groups_count)
-+      if (block_group >= sbi->s_groups_count)
-               ext3_panic (sb, "load_block_bitmap",
-                           "block_group >= groups_count - "
-                           "block_group = %d, groups_count = %lu",
--                          block_group, sb->u.ext3_sb.s_groups_count);
-+                          block_group, EXT3_SB(sb)->s_groups_count);
--      if (sb->u.ext3_sb.s_groups_count <= EXT3_MAX_GROUP_LOADED) {
--              if (sb->u.ext3_sb.s_block_bitmap[block_group]) {
--                      if (sb->u.ext3_sb.s_block_bitmap_number[block_group] ==
-+      if (sbi->s_groups_count <= EXT3_MAX_GROUP_LOADED) {
-+              if (sbi->s_block_bitmap[block_group]) {
-+                      if (sbi->s_block_bitmap_number[block_group] ==
-                           block_group)
-                               return block_group;
-                       ext3_error (sb, "__load_block_bitmap",
-@@ -149,21 +150,20 @@ static int __load_block_bitmap (struct s
-               return block_group;
-       }
--      for (i = 0; i < sb->u.ext3_sb.s_loaded_block_bitmaps &&
--                  sb->u.ext3_sb.s_block_bitmap_number[i] != block_group; i++)
-+      for (i = 0; i < sbi->s_loaded_block_bitmaps &&
-+                  sbi->s_block_bitmap_number[i] != block_group; i++)
-               ;
--      if (i < sb->u.ext3_sb.s_loaded_block_bitmaps &&
--          sb->u.ext3_sb.s_block_bitmap_number[i] == block_group) {
--              block_bitmap_number = sb->u.ext3_sb.s_block_bitmap_number[i];
--              block_bitmap = sb->u.ext3_sb.s_block_bitmap[i];
-+      if (i < sbi->s_loaded_block_bitmaps &&
-+          sbi->s_block_bitmap_number[i] == block_group) {
-+              block_bitmap_number = sbi->s_block_bitmap_number[i];
-+              block_bitmap = sbi->s_block_bitmap[i];
-               for (j = i; j > 0; j--) {
--                      sb->u.ext3_sb.s_block_bitmap_number[j] =
--                              sb->u.ext3_sb.s_block_bitmap_number[j - 1];
--                      sb->u.ext3_sb.s_block_bitmap[j] =
--                              sb->u.ext3_sb.s_block_bitmap[j - 1];
-+                      sbi->s_block_bitmap_number[j] =
-+                              sbi->s_block_bitmap_number[j - 1];
-+                      sbi->s_block_bitmap[j] = sbi->s_block_bitmap[j - 1];
-               }
--              sb->u.ext3_sb.s_block_bitmap_number[0] = block_bitmap_number;
--              sb->u.ext3_sb.s_block_bitmap[0] = block_bitmap;
-+              sbi->s_block_bitmap_number[0] = block_bitmap_number;
-+              sbi->s_block_bitmap[0] = block_bitmap;
-               /*
-                * There's still one special case here --- if block_bitmap == 0
-@@ -173,17 +173,14 @@ static int __load_block_bitmap (struct s
-               if (!block_bitmap)
-                       retval = read_block_bitmap (sb, block_group, 0);
-       } else {
--              if (sb->u.ext3_sb.s_loaded_block_bitmaps<EXT3_MAX_GROUP_LOADED)
--                      sb->u.ext3_sb.s_loaded_block_bitmaps++;
-+              if (sbi->s_loaded_block_bitmaps<EXT3_MAX_GROUP_LOADED)
-+                      sbi->s_loaded_block_bitmaps++;
-               else
--                      brelse (sb->u.ext3_sb.s_block_bitmap
--                                      [EXT3_MAX_GROUP_LOADED - 1]);
--              for (j = sb->u.ext3_sb.s_loaded_block_bitmaps - 1;
--                                      j > 0;  j--) {
--                      sb->u.ext3_sb.s_block_bitmap_number[j] =
--                              sb->u.ext3_sb.s_block_bitmap_number[j - 1];
--                      sb->u.ext3_sb.s_block_bitmap[j] =
--                              sb->u.ext3_sb.s_block_bitmap[j - 1];
-+                      brelse(sbi->s_block_bitmap[EXT3_MAX_GROUP_LOADED - 1]);
-+              for (j = sbi->s_loaded_block_bitmaps - 1; j > 0;  j--) {
-+                      sbi->s_block_bitmap_number[j] =
-+                              sbi->s_block_bitmap_number[j - 1];
-+                      sbi->s_block_bitmap[j] = sbi->s_block_bitmap[j - 1];
-               }
-               retval = read_block_bitmap (sb, block_group, 0);
-       }
-@@ -206,24 +203,25 @@ static int __load_block_bitmap (struct s
- static inline int load_block_bitmap (struct super_block * sb,
-                                    unsigned int block_group)
- {
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-       int slot;
--      
-+
-       /*
-        * Do the lookup for the slot.  First of all, check if we're asking
-        * for the same slot as last time, and did we succeed that last time?
-        */
--      if (sb->u.ext3_sb.s_loaded_block_bitmaps > 0 &&
--          sb->u.ext3_sb.s_block_bitmap_number[0] == block_group &&
--          sb->u.ext3_sb.s_block_bitmap[0]) {
-+      if (sbi->s_loaded_block_bitmaps > 0 &&
-+          sbi->s_block_bitmap_number[0] == block_group &&
-+          sbi->s_block_bitmap[0]) {
-               return 0;
-       }
-       /*
-        * Or can we do a fast lookup based on a loaded group on a filesystem
-        * small enough to be mapped directly into the superblock?
-        */
--      else if (sb->u.ext3_sb.s_groups_count <= EXT3_MAX_GROUP_LOADED && 
--               sb->u.ext3_sb.s_block_bitmap_number[block_group]==block_group
--                      && sb->u.ext3_sb.s_block_bitmap[block_group]) {
-+      else if (sbi->s_groups_count <= EXT3_MAX_GROUP_LOADED &&
-+               sbi->s_block_bitmap_number[block_group] == block_group
-+                      && sbi->s_block_bitmap[block_group]) {
-               slot = block_group;
-       }
-       /*
-@@ -243,7 +241,7 @@ static inline int load_block_bitmap (str
-        * If it's a valid slot, we may still have cached a previous IO error,
-        * in which case the bh in the superblock cache will be zero.
-        */
--      if (!sb->u.ext3_sb.s_block_bitmap[slot])
-+      if (!sbi->s_block_bitmap[slot])
-               return -EIO;
-       
-       /*
-@@ -275,7 +273,7 @@ void ext3_free_blocks (handle_t *handle,
-               return;
-       }
-       lock_super (sb);
--      es = sb->u.ext3_sb.s_es;
-+      es = EXT3_SB(sb)->s_es;
-       if (block < le32_to_cpu(es->s_first_data_block) ||
-           block + count < block ||
-           (block + count) > le32_to_cpu(es->s_blocks_count)) {
-@@ -305,7 +303,7 @@ do_more:
-       if (bitmap_nr < 0)
-               goto error_return;
-       
--      bitmap_bh = sb->u.ext3_sb.s_block_bitmap[bitmap_nr];
-+      bitmap_bh = EXT3_SB(sb)->s_block_bitmap[bitmap_nr];
-       gdp = ext3_get_group_desc (sb, block_group, &gd_bh);
-       if (!gdp)
-               goto error_return;
-@@ -330,8 +328,8 @@ do_more:
-       if (err)
-               goto error_return;
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get_write_access");
--      err = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-       if (err)
-               goto error_return;
-@@ -339,7 +337,7 @@ do_more:
-               if (block == le32_to_cpu(gdp->bg_block_bitmap) ||
-                   block == le32_to_cpu(gdp->bg_inode_bitmap) ||
-                   in_range(block, le32_to_cpu(gdp->bg_inode_table),
--                           sb->u.ext2_sb.s_itb_per_group)) {
-+                           EXT3_SB(sb)->s_itb_per_group)) {
-                       ext3_error(sb, __FUNCTION__,
-                                  "Freeing block in system zone - block = %lu",
-                                  block);
-@@ -412,8 +410,8 @@ do_more:
-       if (!err) err = ret;
-       /* And the superblock */
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "dirtied superblock");
--      ret = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "dirtied superblock");
-+      ret = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-       if (!err) err = ret;
-       if (overflow && !err) {
-@@ -566,12 +564,12 @@ int ext3_new_block (handle_t *handle, st
-       }
-       lock_super (sb);
--      es = sb->u.ext3_sb.s_es;
-+      es = EXT3_SB(sb)->s_es;
-       if (le32_to_cpu(es->s_free_blocks_count) <=
-                       le32_to_cpu(es->s_r_blocks_count) &&
--          ((sb->u.ext3_sb.s_resuid != current->fsuid) &&
--           (sb->u.ext3_sb.s_resgid == 0 ||
--            !in_group_p (sb->u.ext3_sb.s_resgid)) && 
-+          ((EXT3_SB(sb)->s_resuid != current->fsuid) &&
-+           (EXT3_SB(sb)->s_resgid == 0 ||
-+            !in_group_p (EXT3_SB(sb)->s_resgid)) &&
-            !capable(CAP_SYS_RESOURCE)))
-               goto out;
-@@ -601,7 +599,7 @@ repeat:
-               if (bitmap_nr < 0)
-                       goto io_error;
-               
--              bh = sb->u.ext3_sb.s_block_bitmap[bitmap_nr];
-+              bh = EXT3_SB(sb)->s_block_bitmap[bitmap_nr];
-               ext3_debug ("goal is at %d:%d.\n", i, j);
-@@ -624,9 +622,9 @@ repeat:
-        * Now search the rest of the groups.  We assume that 
-        * i and gdp correctly point to the last group visited.
-        */
--      for (k = 0; k < sb->u.ext3_sb.s_groups_count; k++) {
-+      for (k = 0; k < EXT3_SB(sb)->s_groups_count; k++) {
-               i++;
--              if (i >= sb->u.ext3_sb.s_groups_count)
-+              if (i >= EXT3_SB(sb)->s_groups_count)
-                       i = 0;
-               gdp = ext3_get_group_desc (sb, i, &bh2);
-               if (!gdp) {
-@@ -638,7 +636,7 @@ repeat:
-                       if (bitmap_nr < 0)
-                               goto io_error;
-       
--                      bh = sb->u.ext3_sb.s_block_bitmap[bitmap_nr];
-+                      bh = EXT3_SB(sb)->s_block_bitmap[bitmap_nr];
-                       j = find_next_usable_block(-1, bh, 
-                                                  EXT3_BLOCKS_PER_GROUP(sb));
-                       if (j >= 0) 
-@@ -676,8 +674,8 @@ got_block:
-       fatal = ext3_journal_get_write_access(handle, bh2);
-       if (fatal) goto out;
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get_write_access");
--      fatal = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "get_write_access");
-+      fatal = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-       if (fatal) goto out;
-       tmp = j + i * EXT3_BLOCKS_PER_GROUP(sb)
-@@ -810,7 +808,7 @@ got_block:
-       if (!fatal) fatal = err;
-       
-       BUFFER_TRACE(bh, "journal_dirty_metadata for superblock");
--      err = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
-+      err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-       if (!fatal) fatal = err;
-       sb->s_dirt = 1;
-@@ -848,11 +846,11 @@ unsigned long ext3_count_free_blocks (st
-       int i;
-       
-       lock_super (sb);
--      es = sb->u.ext3_sb.s_es;
-+      es = EXT3_SB(sb)->s_es;
-       desc_count = 0;
-       bitmap_count = 0;
-       gdp = NULL;
--      for (i = 0; i < sb->u.ext3_sb.s_groups_count; i++) {
-+      for (i = 0; i < EXT3_SB(sb)->s_groups_count; i++) {
-               gdp = ext3_get_group_desc (sb, i, NULL);
-               if (!gdp)
-                       continue;
-@@ -861,7 +859,7 @@ unsigned long ext3_count_free_blocks (st
-               if (bitmap_nr < 0)
-                       continue;
-               
--              x = ext3_count_free (sb->u.ext3_sb.s_block_bitmap[bitmap_nr],
-+              x = ext3_count_free (EXT3_SB(sb)->s_block_bitmap[bitmap_nr],
-                                    sb->s_blocksize);
-               printk ("group %d: stored = %d, counted = %lu\n",
-                       i, le16_to_cpu(gdp->bg_free_blocks_count), x);
-@@ -872,7 +870,7 @@ unsigned long ext3_count_free_blocks (st
-       unlock_super (sb);
-       return bitmap_count;
- #else
--      return le32_to_cpu(sb->u.ext3_sb.s_es->s_free_blocks_count);
-+      return le32_to_cpu(EXT3_SB(sb)->s_es->s_free_blocks_count);
- #endif
- }
-@@ -881,7 +879,7 @@ static inline int block_in_use (unsigned
-                               unsigned char * map)
- {
-       return ext3_test_bit ((block -
--              le32_to_cpu(sb->u.ext3_sb.s_es->s_first_data_block)) %
-+              le32_to_cpu(EXT3_SB(sb)->s_es->s_first_data_block)) %
-                        EXT3_BLOCKS_PER_GROUP(sb), map);
- }
-@@ -949,11 +947,11 @@ void ext3_check_blocks_bitmap (struct su
-       struct ext3_group_desc * gdp;
-       int i;
--      es = sb->u.ext3_sb.s_es;
-+      es = EXT3_SB(sb)->s_es;
-       desc_count = 0;
-       bitmap_count = 0;
-       gdp = NULL;
--      for (i = 0; i < sb->u.ext3_sb.s_groups_count; i++) {
-+      for (i = 0; i < EXT3_SB(sb)->s_groups_count; i++) {
-               gdp = ext3_get_group_desc (sb, i, NULL);
-               if (!gdp)
-                       continue;
-@@ -987,7 +985,7 @@ void ext3_check_blocks_bitmap (struct su
-                                   "Inode bitmap for group %d is marked free",
-                                   i);
--              for (j = 0; j < sb->u.ext3_sb.s_itb_per_group; j++)
-+              for (j = 0; j < EXT3_SB(sb)->s_itb_per_group; j++)
-                       if (!block_in_use (le32_to_cpu(gdp->bg_inode_table) + j,
-                                                       sb, bh->b_data))
-                               ext3_error (sb, "ext3_check_blocks_bitmap",
---- linux-2.4.18-chaos/fs/ext3/dir.c~ext3-2.4.18-ino_sb_macro-2        2003-09-16 23:34:14.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/dir.c    2003-09-16 23:34:40.000000000 +0400
-@@ -67,7 +67,7 @@ int ext3_check_dir_entry (const char * f
-       else if (((char *) de - bh->b_data) + rlen > dir->i_sb->s_blocksize)
-               error_msg = "directory entry across blocks";
-       else if (le32_to_cpu(de->inode) >
--                      le32_to_cpu(dir->i_sb->u.ext3_sb.s_es->s_inodes_count))
-+                      le32_to_cpu(EXT3_SB(dir->i_sb)->s_es->s_inodes_count))
-               error_msg = "inode out of bounds";
-       if (error_msg != NULL)
---- linux-2.4.18-chaos/fs/ext3/ialloc.c~ext3-2.4.18-ino_sb_macro-2     2003-09-16 23:34:33.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/ialloc.c 2003-09-16 23:34:40.000000000 +0400
-@@ -74,8 +74,8 @@ static int read_inode_bitmap (struct sup
-        * this group.  The IO will be retried next time.
-        */
- error_out:
--      sb->u.ext3_sb.s_inode_bitmap_number[bitmap_nr] = block_group;
--      sb->u.ext3_sb.s_inode_bitmap[bitmap_nr] = bh;
-+      EXT3_SB(sb)->s_inode_bitmap_number[bitmap_nr] = block_group;
-+      EXT3_SB(sb)->s_inode_bitmap[bitmap_nr] = bh;
-       return retval;
- }
-@@ -227,7 +227,7 @@ void ext3_free_inode (handle_t *handle, 
-       clear_inode (inode);
-       lock_super (sb);
--      es = sb->u.ext3_sb.s_es;
-+      es = EXT3_SB(sb)->s_es;
-       if (ino < EXT3_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) {
-               ext3_error (sb, "ext3_free_inode",
-                           "reserved or nonexistent inode %lu", ino);
-@@ -239,7 +239,7 @@ void ext3_free_inode (handle_t *handle, 
-       if (bitmap_nr < 0)
-               goto error_return;
--      bh = sb->u.ext3_sb.s_inode_bitmap[bitmap_nr];
-+      bh = EXT3_SB(sb)->s_inode_bitmap[bitmap_nr];
-       BUFFER_TRACE(bh, "get_write_access");
-       fatal = ext3_journal_get_write_access(handle, bh);
-@@ -257,8 +257,8 @@ void ext3_free_inode (handle_t *handle, 
-               fatal = ext3_journal_get_write_access(handle, bh2);
-               if (fatal) goto error_return;
--              BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get write access");
--              fatal = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
-+              BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "get write access");
-+              fatal = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-               if (fatal) goto error_return;
-               if (gdp) {
-@@ -273,9 +273,9 @@ void ext3_free_inode (handle_t *handle, 
-               if (!fatal) fatal = err;
-               es->s_free_inodes_count =
-                       cpu_to_le32(le32_to_cpu(es->s_free_inodes_count) + 1);
--              BUFFER_TRACE(sb->u.ext3_sb.s_sbh,
-+              BUFFER_TRACE(EXT3_SB(sb)->s_sbh,
-                                       "call ext3_journal_dirty_metadata");
--              err = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
-+              err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-               if (!fatal) fatal = err;
-       }
-       BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-@@ -307,6 +307,8 @@ struct inode * ext3_new_inode (handle_t 
-       int i, j, avefreei;
-       struct inode * inode;
-       int bitmap_nr;
-+      struct ext3_inode_info *ei;
-+      struct ext3_sb_info *sbi;
-       struct ext3_group_desc * gdp;
-       struct ext3_group_desc * tmp;
-       struct ext3_super_block * es;
-@@ -320,7 +322,9 @@ struct inode * ext3_new_inode (handle_t 
-       inode = new_inode(sb);
-       if (!inode)
-               return ERR_PTR(-ENOMEM);
--      init_rwsem(&inode->u.ext3_i.truncate_sem);
-+      sbi = EXT3_SB(sb);
-+      ei = EXT3_I(inode);
-+      init_rwsem(&ei->truncate_sem);
-       lock_super (sb);
-       es = sb->u.ext3_sb.s_es;
-@@ -330,9 +334,9 @@ repeat:
-       if (S_ISDIR(mode)) {
-               avefreei = le32_to_cpu(es->s_free_inodes_count) /
--                      sb->u.ext3_sb.s_groups_count;
-+                      sbi->s_groups_count;
-               if (!gdp) {
--                      for (j = 0; j < sb->u.ext3_sb.s_groups_count; j++) {
-+                      for (j = 0; j < sbi->s_groups_count; j++) {
-                               struct buffer_head *temp_buffer;
-                               tmp = ext3_get_group_desc (sb, j, &temp_buffer);
-                               if (tmp &&
-@@ -352,7 +356,7 @@ repeat:
-               /*
-                * Try to place the inode in its parent directory
-                */
--              i = dir->u.ext3_i.i_block_group;
-+              i = EXT3_I(dir)->i_block_group;
-               tmp = ext3_get_group_desc (sb, i, &bh2);
-               if (tmp && le16_to_cpu(tmp->bg_free_inodes_count))
-                       gdp = tmp;
-@@ -362,10 +366,10 @@ repeat:
-                        * Use a quadratic hash to find a group with a
-                        * free inode
-                        */
--                      for (j = 1; j < sb->u.ext3_sb.s_groups_count; j <<= 1) {
-+                      for (j = 1; j < sbi->s_groups_count; j <<= 1) {
-                               i += j;
--                              if (i >= sb->u.ext3_sb.s_groups_count)
--                                      i -= sb->u.ext3_sb.s_groups_count;
-+                              if (i >= sbi->s_groups_count)
-+                                      i -= sbi->s_groups_count;
-                               tmp = ext3_get_group_desc (sb, i, &bh2);
-                               if (tmp &&
-                                   le16_to_cpu(tmp->bg_free_inodes_count)) {
-@@ -378,9 +382,9 @@ repeat:
-                       /*
-                        * That failed: try linear search for a free inode
-                        */
--                      i = dir->u.ext3_i.i_block_group + 1;
--                      for (j = 2; j < sb->u.ext3_sb.s_groups_count; j++) {
--                              if (++i >= sb->u.ext3_sb.s_groups_count)
-+                      i = EXT3_I(dir)->i_block_group + 1;
-+                      for (j = 2; j < sbi->s_groups_count; j++) {
-+                              if (++i >= sbi->s_groups_count)
-                                       i = 0;
-                               tmp = ext3_get_group_desc (sb, i, &bh2);
-                               if (tmp &&
-@@ -401,11 +405,11 @@ repeat:
-       if (bitmap_nr < 0)
-               goto fail;
--      bh = sb->u.ext3_sb.s_inode_bitmap[bitmap_nr];
-+      bh = sbi->s_inode_bitmap[bitmap_nr];
-       if ((j = ext3_find_first_zero_bit ((unsigned long *) bh->b_data,
--                                    EXT3_INODES_PER_GROUP(sb))) <
--          EXT3_INODES_PER_GROUP(sb)) {
-+                                    sbi->s_inodes_per_group)) <
-+          sbi->s_inodes_per_group) {
-               BUFFER_TRACE(bh, "get_write_access");
-               err = ext3_journal_get_write_access(handle, bh);
-               if (err) goto fail;
-@@ -459,13 +463,13 @@ repeat:
-       err = ext3_journal_dirty_metadata(handle, bh2);
-       if (err) goto fail;
-       
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get_write_access");
--      err = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(sbi->s_sbh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, sbi->s_sbh);
-       if (err) goto fail;
-       es->s_free_inodes_count =
-               cpu_to_le32(le32_to_cpu(es->s_free_inodes_count) - 1);
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "call ext3_journal_dirty_metadata");
--      err = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(sbi->s_sbh, "call ext3_journal_dirty_metadata");
-+      err = ext3_journal_dirty_metadata(handle, sbi->s_sbh);
-       sb->s_dirt = 1;
-       if (err) goto fail;
-@@ -485,31 +489,31 @@ repeat:
-       inode->i_blksize = PAGE_SIZE;
-       inode->i_blocks = 0;
-       inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
--      inode->u.ext3_i.i_flags = dir->u.ext3_i.i_flags & ~EXT3_INDEX_FL;
-+      ei->i_flags = EXT3_I(dir)->i_flags & ~EXT3_INDEX_FL;
-       if (S_ISLNK(mode))
--              inode->u.ext3_i.i_flags &= ~(EXT3_IMMUTABLE_FL|EXT3_APPEND_FL);
-+              ei->i_flags &= ~(EXT3_IMMUTABLE_FL|EXT3_APPEND_FL);
- #ifdef EXT3_FRAGMENTS
--      inode->u.ext3_i.i_faddr = 0;
--      inode->u.ext3_i.i_frag_no = 0;
--      inode->u.ext3_i.i_frag_size = 0;
-+      ei->i_faddr = 0;
-+      ei->i_frag_no = 0;
-+      ei->i_frag_size = 0;
- #endif
--      inode->u.ext3_i.i_file_acl = 0;
--      inode->u.ext3_i.i_dir_acl = 0;
--      inode->u.ext3_i.i_dtime = 0;
--      INIT_LIST_HEAD(&inode->u.ext3_i.i_orphan);
-+      ei->i_file_acl = 0;
-+      ei->i_dir_acl = 0;
-+      ei->i_dtime = 0;
-+      INIT_LIST_HEAD(&ei->i_orphan);
- #ifdef EXT3_PREALLOCATE
--      inode->u.ext3_i.i_prealloc_count = 0;
-+      ei->i_prealloc_count = 0;
- #endif
--      inode->u.ext3_i.i_block_group = i;
-+      ei->i_block_group = i;
-       
--      if (inode->u.ext3_i.i_flags & EXT3_SYNC_FL)
-+      if (ei->i_flags & EXT3_SYNC_FL)
-               inode->i_flags |= S_SYNC;
-       if (IS_SYNC(inode))
-               handle->h_sync = 1;
-       insert_inode_hash(inode);
--      inode->i_generation = sb->u.ext3_sb.s_next_generation++;
-+      inode->i_generation = sbi->s_next_generation++;
--      inode->u.ext3_i.i_state = EXT3_STATE_NEW;
-+      ei->i_state = EXT3_STATE_NEW;
-       err = ext3_mark_inode_dirty(handle, inode);
-       if (err) goto fail;
-       
-@@ -588,19 +592,19 @@ struct inode *ext3_orphan_get(struct sup
- unsigned long ext3_count_free_inodes (struct super_block * sb)
- {
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+      struct ext3_super_block *es = sbi->s_es;
- #ifdef EXT3FS_DEBUG
--      struct ext3_super_block * es;
-       unsigned long desc_count, bitmap_count, x;
-       int bitmap_nr;
-       struct ext3_group_desc * gdp;
-       int i;
-       lock_super (sb);
--      es = sb->u.ext3_sb.s_es;
-       desc_count = 0;
-       bitmap_count = 0;
-       gdp = NULL;
--      for (i = 0; i < sb->u.ext3_sb.s_groups_count; i++) {
-+      for (i = 0; i < sbi->s_groups_count; i++) {
-               gdp = ext3_get_group_desc (sb, i, NULL);
-               if (!gdp)
-                       continue;
-@@ -609,8 +613,8 @@ unsigned long ext3_count_free_inodes (st
-               if (bitmap_nr < 0)
-                       continue;
--              x = ext3_count_free (sb->u.ext3_sb.s_inode_bitmap[bitmap_nr],
--                                   EXT3_INODES_PER_GROUP(sb) / 8);
-+              x = ext3_count_free(sbi->s_inode_bitmap[bitmap_nr],
-+                                  sbi->s_inodes_per_group / 8);
-               printk ("group %d: stored = %d, counted = %lu\n",
-                       i, le16_to_cpu(gdp->bg_free_inodes_count), x);
-               bitmap_count += x;
-@@ -620,7 +624,7 @@ unsigned long ext3_count_free_inodes (st
-       unlock_super (sb);
-       return desc_count;
- #else
--      return le32_to_cpu(sb->u.ext3_sb.s_es->s_free_inodes_count);
-+      return le32_to_cpu(es->s_free_inodes_count);
- #endif
- }
-@@ -629,16 +633,18 @@ unsigned long ext3_count_free_inodes (st
- void ext3_check_inodes_bitmap (struct super_block * sb)
- {
-       struct ext3_super_block * es;
-+      struct ext3_sb_info *sbi;
-       unsigned long desc_count, bitmap_count, x;
-       int bitmap_nr;
-       struct ext3_group_desc * gdp;
-       int i;
--      es = sb->u.ext3_sb.s_es;
-+      sbi = EXT3_SB(sb);
-+      es = sbi->s_es;
-       desc_count = 0;
-       bitmap_count = 0;
-       gdp = NULL;
--      for (i = 0; i < sb->u.ext3_sb.s_groups_count; i++) {
-+      for (i = 0; i < sbi->s_groups_count; i++) {
-               gdp = ext3_get_group_desc (sb, i, NULL);
-               if (!gdp)
-                       continue;
-@@ -647,7 +653,7 @@ void ext3_check_inodes_bitmap (struct su
-               if (bitmap_nr < 0)
-                       continue;
--              x = ext3_count_free (sb->u.ext3_sb.s_inode_bitmap[bitmap_nr],
-+              x = ext3_count_free (sbi->s_inode_bitmap[bitmap_nr],
-                                    EXT3_INODES_PER_GROUP(sb) / 8);
-               if (le16_to_cpu(gdp->bg_free_inodes_count) != x)
-                       ext3_error (sb, "ext3_check_inodes_bitmap",
---- linux-2.4.18-chaos/fs/ext3/inode.c~ext3-2.4.18-ino_sb_macro-2      2003-09-16 23:34:16.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/inode.c  2003-09-16 23:34:40.000000000 +0400
-@@ -206,7 +206,7 @@ void ext3_delete_inode (struct inode * i
-        * (Well, we could do this if we need to, but heck - it works)
-        */
-       ext3_orphan_del(handle, inode);
--      inode->u.ext3_i.i_dtime = CURRENT_TIME;
-+      EXT3_I(inode)->i_dtime = CURRENT_TIME;
-       /* 
-        * One subtle ordering requirement: if anything has gone wrong
-@@ -230,13 +230,14 @@ no_delete:
- void ext3_discard_prealloc (struct inode * inode)
- {
- #ifdef EXT3_PREALLOCATE
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       lock_kernel();
-       /* Writer: ->i_prealloc* */
--      if (inode->u.ext3_i.i_prealloc_count) {
--              unsigned short total = inode->u.ext3_i.i_prealloc_count;
--              unsigned long block = inode->u.ext3_i.i_prealloc_block;
--              inode->u.ext3_i.i_prealloc_count = 0;
--              inode->u.ext3_i.i_prealloc_block = 0;
-+      if (ei->i_prealloc_count) {
-+              unsigned short total = ei->i_prealloc_count;
-+              unsigned long block = ei->i_prealloc_block;
-+              ei->i_prealloc_count = 0;
-+              ei->i_prealloc_block = 0;
-               /* Writer: end */
-               ext3_free_blocks (inode, block, total);
-       }
-@@ -253,13 +254,15 @@ static int ext3_alloc_block (handle_t *h
-       unsigned long result;
- #ifdef EXT3_PREALLOCATE
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+
-       /* Writer: ->i_prealloc* */
--      if (inode->u.ext3_i.i_prealloc_count &&
--          (goal == inode->u.ext3_i.i_prealloc_block ||
--           goal + 1 == inode->u.ext3_i.i_prealloc_block))
-+      if (ei->i_prealloc_count &&
-+          (goal == ei->i_prealloc_block ||
-+           goal + 1 == ei->i_prealloc_block))
-       {
--              result = inode->u.ext3_i.i_prealloc_block++;
--              inode->u.ext3_i.i_prealloc_count--;
-+              result = ei->i_prealloc_block++;
-+              ei->i_prealloc_count--;
-               /* Writer: end */
-               ext3_debug ("preallocation hit (%lu/%lu).\n",
-                           ++alloc_hits, ++alloc_attempts);
-@@ -269,8 +272,8 @@ static int ext3_alloc_block (handle_t *h
-                           alloc_hits, ++alloc_attempts);
-               if (S_ISREG(inode->i_mode))
-                       result = ext3_new_block (inode, goal, 
--                               &inode->u.ext3_i.i_prealloc_count,
--                               &inode->u.ext3_i.i_prealloc_block, err);
-+                               &ei->i_prealloc_count,
-+                               &ei->i_prealloc_block, err);
-               else
-                       result = ext3_new_block (inode, goal, 0, 0, err);
-               /*
-@@ -404,7 +407,7 @@ static Indirect *ext3_get_branch(struct 
-       *err = 0;
-       /* i_data is not going away, no lock needed */
--      add_chain (chain, NULL, inode->u.ext3_i.i_data + *offsets);
-+      add_chain (chain, NULL, EXT3_I(inode)->i_data + *offsets);
-       if (!p->key)
-               goto no_block;
-       while (--depth) {
-@@ -448,7 +451,8 @@ no_block:
- static inline unsigned long ext3_find_near(struct inode *inode, Indirect *ind)
- {
--      u32 *start = ind->bh ? (u32*) ind->bh->b_data : inode->u.ext3_i.i_data;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+      u32 *start = ind->bh ? (u32*) ind->bh->b_data : ei->i_data;
-       u32 *p;
-       /* Try to find previous block */
-@@ -464,9 +468,8 @@ static inline unsigned long ext3_find_ne
-        * It is going to be refered from inode itself? OK, just put it into
-        * the same cylinder group then.
-        */
--      return (inode->u.ext3_i.i_block_group * 
--              EXT3_BLOCKS_PER_GROUP(inode->i_sb)) +
--             le32_to_cpu(inode->i_sb->u.ext3_sb.s_es->s_first_data_block);
-+      return (ei->i_block_group * EXT3_BLOCKS_PER_GROUP(inode->i_sb)) +
-+             le32_to_cpu(EXT3_SB(inode->i_sb)->s_es->s_first_data_block);
- }
- /**
-@@ -485,14 +488,15 @@ static inline unsigned long ext3_find_ne
- static int ext3_find_goal(struct inode *inode, long block, Indirect chain[4],
-                         Indirect *partial, unsigned long *goal)
- {
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       /* Writer: ->i_next_alloc* */
--      if (block == inode->u.ext3_i.i_next_alloc_block + 1) {
--              inode->u.ext3_i.i_next_alloc_block++;
--              inode->u.ext3_i.i_next_alloc_goal++;
-+      if (block == ei->i_next_alloc_block + 1) {
-+              ei->i_next_alloc_block++;
-+              ei->i_next_alloc_goal++;
-       }
- #ifdef SEARCH_FROM_ZERO
--      inode->u.ext3_i.i_next_alloc_block = 0;
--      inode->u.ext3_i.i_next_alloc_goal = 0;
-+      ei->i_next_alloc_block = 0;
-+      ei->i_next_alloc_goal = 0;
- #endif
-       /* Writer: end */
-       /* Reader: pointers, ->i_next_alloc* */
-@@ -501,8 +505,8 @@ static int ext3_find_goal(struct inode *
-                * try the heuristic for sequential allocation,
-                * failing that at least try to get decent locality.
-                */
--              if (block == inode->u.ext3_i.i_next_alloc_block)
--                      *goal = inode->u.ext3_i.i_next_alloc_goal;
-+              if (block == ei->i_next_alloc_block)
-+                      *goal = ei->i_next_alloc_goal;
-               if (!*goal)
-                       *goal = ext3_find_near(inode, partial);
- #ifdef SEARCH_FROM_ZERO
-@@ -628,6 +632,7 @@ static int ext3_splice_branch(handle_t *
- {
-       int i;
-       int err = 0;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       /*
-        * If we're splicing into a [td]indirect block (as opposed to the
-@@ -650,11 +655,11 @@ static int ext3_splice_branch(handle_t *
-       /* That's it */
-       *where->p = where->key;
--      inode->u.ext3_i.i_next_alloc_block = block;
--      inode->u.ext3_i.i_next_alloc_goal = le32_to_cpu(where[num-1].key);
-+      ei->i_next_alloc_block = block;
-+      ei->i_next_alloc_goal = le32_to_cpu(where[num-1].key);
- #ifdef SEARCH_FROM_ZERO
--      inode->u.ext3_i.i_next_alloc_block = 0;
--      inode->u.ext3_i.i_next_alloc_goal = 0;
-+      ei->i_next_alloc_block = 0;
-+      ei->i_next_alloc_goal = 0;
- #endif
-       /* Writer: end */
-@@ -738,6 +743,7 @@ static int ext3_get_block_handle(handle_
-       unsigned long goal;
-       int left;
-       int depth = ext3_block_to_path(inode, iblock, offsets);
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       loff_t new_size;
-       J_ASSERT(handle != NULL || create == 0);
-@@ -791,7 +797,7 @@ out:
-       /*
-        * Block out ext3_truncate while we alter the tree
-        */
--      down_read(&inode->u.ext3_i.truncate_sem);
-+      down_read(&ei->truncate_sem);
-       err = ext3_alloc_branch(handle, inode, left, goal,
-                                       offsets+(partial-chain), partial);
-@@ -803,7 +809,7 @@ out:
-       if (!err)
-               err = ext3_splice_branch(handle, inode, iblock, chain,
-                                        partial, left);
--      up_read(&inode->u.ext3_i.truncate_sem);
-+      up_read(&ei->truncate_sem);
-       if (err == -EAGAIN)
-               goto changed;
-       if (err)
-@@ -816,8 +822,8 @@ out:
-        * truncate is in progress.  It is racy between multiple parallel
-        * instances of get_block, but we have the BKL.
-        */
--      if (new_size > inode->u.ext3_i.i_disksize)
--              inode->u.ext3_i.i_disksize = new_size;
-+      if (new_size > ei->i_disksize)
-+              ei->i_disksize = new_size;
-       bh_result->b_state |= (1UL << BH_New);
-       goto got_it;
-@@ -932,7 +938,7 @@ struct buffer_head *ext3_bread(handle_t 
-               struct buffer_head *tmp_bh;
-               for (i = 1;
--                   inode->u.ext3_i.i_prealloc_count &&
-+                   EXT3_I(inode)->i_prealloc_count &&
-                    i < EXT3_SB(inode->i_sb)->s_es->s_prealloc_dir_blocks;
-                    i++) {
-                       /*
-@@ -1152,8 +1158,8 @@ static int ext3_commit_write(struct file
-                       kunmap(page);
-               }
-       }
--      if (inode->i_size > inode->u.ext3_i.i_disksize) {
--              inode->u.ext3_i.i_disksize = inode->i_size;
-+      if (inode->i_size > EXT3_I(inode)->i_disksize) {
-+              EXT3_I(inode)->i_disksize = inode->i_size;
-               ret2 = ext3_mark_inode_dirty(handle, inode);
-               if (!ret) 
-                       ret = ret2;
-@@ -1873,7 +1879,8 @@ static void ext3_free_branches(handle_t 
- void ext3_truncate(struct inode * inode)
- {
-       handle_t *handle;
--      u32 *i_data = inode->u.ext3_i.i_data;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+      u32 *i_data = EXT3_I(inode)->i_data;
-       int addr_per_block = EXT3_ADDR_PER_BLOCK(inode->i_sb);
-       int offsets[4];
-       Indirect chain[4];
-@@ -1934,13 +1941,13 @@ void ext3_truncate(struct inode * inode)
-        * on-disk inode. We do this via i_disksize, which is the value which
-        * ext3 *really* writes onto the disk inode.
-        */
--      inode->u.ext3_i.i_disksize = inode->i_size;
-+      ei->i_disksize = inode->i_size;
-       /*
-        * From here we block out all ext3_get_block() callers who want to
-        * modify the block allocation tree.
-        */
--      down_write(&inode->u.ext3_i.truncate_sem);
-+      down_write(&ei->truncate_sem);
-       if (n == 1) {           /* direct blocks */
-               ext3_free_data(handle, inode, NULL, i_data+offsets[0],
-@@ -2004,7 +2011,7 @@ do_indirects:
-               case EXT3_TIND_BLOCK:
-                       ;
-       }
--      up_write(&inode->u.ext3_i.truncate_sem);
-+      up_write(&ei->truncate_sem);
-       inode->i_mtime = inode->i_ctime = CURRENT_TIME;
-       ext3_mark_inode_dirty(handle, inode);
-@@ -2041,6 +2048,8 @@ out_unlock:
- int ext3_get_inode_loc (struct inode *inode, struct ext3_iloc *iloc)
- {
-+      struct super_block *sb = inode->i_sb;
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-       struct buffer_head *bh = 0;
-       unsigned long block;
-       unsigned long block_group;
-@@ -2051,25 +2060,21 @@ int ext3_get_inode_loc (struct inode *in
-               
-       if ((inode->i_ino != EXT3_ROOT_INO &&
-               inode->i_ino != EXT3_JOURNAL_INO &&
--              inode->i_ino < EXT3_FIRST_INO(inode->i_sb)) ||
--              inode->i_ino > le32_to_cpu(
--                      inode->i_sb->u.ext3_sb.s_es->s_inodes_count)) {
--              ext3_error (inode->i_sb, "ext3_get_inode_loc",
--                          "bad inode number: %lu", inode->i_ino);
-+              inode->i_ino < EXT3_FIRST_INO(sb)) ||
-+              inode->i_ino > le32_to_cpu(sbi->s_es->s_inodes_count)) {
-+              ext3_error (sb, __FUNCTION__, "bad inode #%lu", inode->i_ino);
-               goto bad_inode;
-       }
--      block_group = (inode->i_ino - 1) / EXT3_INODES_PER_GROUP(inode->i_sb);
--      if (block_group >= inode->i_sb->u.ext3_sb.s_groups_count) {
--              ext3_error (inode->i_sb, "ext3_get_inode_loc",
--                          "group >= groups count");
-+      block_group = (inode->i_ino - 1) / sbi->s_inodes_per_group;
-+      if (block_group >= sbi->s_groups_count) {
-+              ext3_error(sb, __FUNCTION__, "group >= groups count");
-               goto bad_inode;
-       }
--      group_desc = block_group >> EXT3_DESC_PER_BLOCK_BITS(inode->i_sb);
--      desc = block_group & (EXT3_DESC_PER_BLOCK(inode->i_sb) - 1);
--      bh = inode->i_sb->u.ext3_sb.s_group_desc[group_desc];
-+      group_desc = block_group >> sbi->s_desc_per_block_bits;
-+      desc = block_group & (sbi->s_desc_per_block - 1);
-+      bh = sbi->s_group_desc[group_desc];
-       if (!bh) {
--              ext3_error (inode->i_sb, "ext3_get_inode_loc",
--                          "Descriptor not loaded");
-+              ext3_error(sb, __FUNCTION__, "Descriptor not loaded");
-               goto bad_inode;
-       }
-@@ -2077,17 +2082,17 @@ int ext3_get_inode_loc (struct inode *in
-       /*
-        * Figure out the offset within the block group inode table
-        */
--      offset = ((inode->i_ino - 1) % EXT3_INODES_PER_GROUP(inode->i_sb)) *
--              EXT3_INODE_SIZE(inode->i_sb);
-+      offset = ((inode->i_ino - 1) % sbi->s_inodes_per_group) *
-+              sbi->s_inode_size;
-       block = le32_to_cpu(gdp[desc].bg_inode_table) +
--              (offset >> EXT3_BLOCK_SIZE_BITS(inode->i_sb));
--      if (!(bh = sb_bread(inode->i_sb, block))) {
--              ext3_error (inode->i_sb, "ext3_get_inode_loc",
-+              (offset >> EXT3_BLOCK_SIZE_BITS(sb));
-+      if (!(bh = sb_bread(sb, block))) {
-+              ext3_error (sb, __FUNCTION__,
-                           "unable to read inode block - "
-                           "inode=%lu, block=%lu", inode->i_ino, block);
-               goto bad_inode;
-       }
--      offset &= (EXT3_BLOCK_SIZE(inode->i_sb) - 1);
-+      offset &= (EXT3_BLOCK_SIZE(sb) - 1);
-       iloc->bh = bh;
-       iloc->raw_inode = (struct ext3_inode *) (bh->b_data + offset);
-@@ -2103,6 +2108,7 @@ void ext3_read_inode(struct inode * inod
- {
-       struct ext3_iloc iloc;
-       struct ext3_inode *raw_inode;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       struct buffer_head *bh;
-       int block;
-       
-@@ -2110,7 +2116,7 @@ void ext3_read_inode(struct inode * inod
-               goto bad_inode;
-       bh = iloc.bh;
-       raw_inode = iloc.raw_inode;
--      init_rwsem(&inode->u.ext3_i.truncate_sem);
-+      init_rwsem(&ei->truncate_sem);
-       inode->i_mode = le16_to_cpu(raw_inode->i_mode);
-       inode->i_uid = (uid_t)le16_to_cpu(raw_inode->i_uid_low);
-       inode->i_gid = (gid_t)le16_to_cpu(raw_inode->i_gid_low);
-@@ -2123,7 +2129,7 @@ void ext3_read_inode(struct inode * inod
-       inode->i_atime = le32_to_cpu(raw_inode->i_atime);
-       inode->i_ctime = le32_to_cpu(raw_inode->i_ctime);
-       inode->i_mtime = le32_to_cpu(raw_inode->i_mtime);
--      inode->u.ext3_i.i_dtime = le32_to_cpu(raw_inode->i_dtime);
-+      ei->i_dtime = le32_to_cpu(raw_inode->i_dtime);
-       /* We now have enough fields to check if the inode was active or not.
-        * This is needed because nfsd might try to access dead inodes
-        * the test is that same one that e2fsck uses
-@@ -2131,7 +2137,7 @@ void ext3_read_inode(struct inode * inod
-        */
-       if (inode->i_nlink == 0) {
-               if (inode->i_mode == 0 ||
--                  !(inode->i_sb->u.ext3_sb.s_mount_state & EXT3_ORPHAN_FS)) {
-+                  !(EXT3_SB(inode->i_sb)->s_mount_state & EXT3_ORPHAN_FS)) {
-                       /* this inode is deleted */
-                       brelse (bh);
-                       goto bad_inode;
-@@ -2146,33 +2152,33 @@ void ext3_read_inode(struct inode * inod
-                                        * size */  
-       inode->i_blocks = le32_to_cpu(raw_inode->i_blocks);
-       inode->i_version = ++event;
--      inode->u.ext3_i.i_flags = le32_to_cpu(raw_inode->i_flags);
-+      ei->i_flags = le32_to_cpu(raw_inode->i_flags);
- #ifdef EXT3_FRAGMENTS
--      inode->u.ext3_i.i_faddr = le32_to_cpu(raw_inode->i_faddr);
--      inode->u.ext3_i.i_frag_no = raw_inode->i_frag;
--      inode->u.ext3_i.i_frag_size = raw_inode->i_fsize;
-+      ei->i_faddr = le32_to_cpu(raw_inode->i_faddr);
-+      ei->i_frag_no = raw_inode->i_frag;
-+      ei->i_frag_size = raw_inode->i_fsize;
- #endif
--      inode->u.ext3_i.i_file_acl = le32_to_cpu(raw_inode->i_file_acl);
-+      ei->i_file_acl = le32_to_cpu(raw_inode->i_file_acl);
-       if (!S_ISREG(inode->i_mode)) {
--              inode->u.ext3_i.i_dir_acl = le32_to_cpu(raw_inode->i_dir_acl);
-+              ei->i_dir_acl = le32_to_cpu(raw_inode->i_dir_acl);
-       } else {
-               inode->i_size |=
-                       ((__u64)le32_to_cpu(raw_inode->i_size_high)) << 32;
-       }
--      inode->u.ext3_i.i_disksize = inode->i_size;
-+      ei->i_disksize = inode->i_size;
-       inode->i_generation = le32_to_cpu(raw_inode->i_generation);
- #ifdef EXT3_PREALLOCATE
--      inode->u.ext3_i.i_prealloc_count = 0;
-+      ei->i_prealloc_count = 0;
- #endif
--      inode->u.ext3_i.i_block_group = iloc.block_group;
-+      ei->i_block_group = iloc.block_group;
-       /*
-        * NOTE! The in-memory inode i_data array is in little-endian order
-        * even on big-endian machines: we do NOT byteswap the block numbers!
-        */
-       for (block = 0; block < EXT3_N_BLOCKS; block++)
--              inode->u.ext3_i.i_data[block] = iloc.raw_inode->i_block[block];
--      INIT_LIST_HEAD(&inode->u.ext3_i.i_orphan);
-+              ei->i_data[block] = iloc.raw_inode->i_block[block];
-+      INIT_LIST_HEAD(&ei->i_orphan);
-       brelse (iloc.bh);
-@@ -2194,19 +2200,19 @@ void ext3_read_inode(struct inode * inod
-               init_special_inode(inode, inode->i_mode,
-                                  le32_to_cpu(iloc.raw_inode->i_block[0]));
-       /* inode->i_attr_flags = 0;                             unused */
--      if (inode->u.ext3_i.i_flags & EXT3_SYNC_FL) {
-+      if (ei->i_flags & EXT3_SYNC_FL) {
-               /* inode->i_attr_flags |= ATTR_FLAG_SYNCRONOUS; unused */
-               inode->i_flags |= S_SYNC;
-       }
--      if (inode->u.ext3_i.i_flags & EXT3_APPEND_FL) {
-+      if (ei->i_flags & EXT3_APPEND_FL) {
-               /* inode->i_attr_flags |= ATTR_FLAG_APPEND;     unused */
-               inode->i_flags |= S_APPEND;
-       }
--      if (inode->u.ext3_i.i_flags & EXT3_IMMUTABLE_FL) {
-+      if (ei->i_flags & EXT3_IMMUTABLE_FL) {
-               /* inode->i_attr_flags |= ATTR_FLAG_IMMUTABLE;  unused */
-               inode->i_flags |= S_IMMUTABLE;
-       }
--      if (inode->u.ext3_i.i_flags & EXT3_NOATIME_FL) {
-+      if (ei->i_flags & EXT3_NOATIME_FL) {
-               /* inode->i_attr_flags |= ATTR_FLAG_NOATIME;    unused */
-               inode->i_flags |= S_NOATIME;
-       }
-@@ -2228,6 +2234,7 @@ static int ext3_do_update_inode(handle_t
-                               struct ext3_iloc *iloc)
- {
-       struct ext3_inode *raw_inode = iloc->raw_inode;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       struct buffer_head *bh = iloc->bh;
-       int err = 0, rc, block;
-@@ -2245,7 +2252,7 @@ static int ext3_do_update_inode(handle_t
-  * Fix up interoperability with old kernels. Otherwise, old inodes get
-  * re-used with the upper 16 bits of the uid/gid intact
-  */
--              if(!inode->u.ext3_i.i_dtime) {
-+              if(!ei->i_dtime) {
-                       raw_inode->i_uid_high =
-                               cpu_to_le16(high_16_bits(inode->i_uid));
-                       raw_inode->i_gid_high =
-@@ -2263,34 +2270,33 @@ static int ext3_do_update_inode(handle_t
-               raw_inode->i_gid_high = 0;
-       }
-       raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
--      raw_inode->i_size = cpu_to_le32(inode->u.ext3_i.i_disksize);
-+      raw_inode->i_size = cpu_to_le32(ei->i_disksize);
-       raw_inode->i_atime = cpu_to_le32(inode->i_atime);
-       raw_inode->i_ctime = cpu_to_le32(inode->i_ctime);
-       raw_inode->i_mtime = cpu_to_le32(inode->i_mtime);
-       raw_inode->i_blocks = cpu_to_le32(inode->i_blocks);
--      raw_inode->i_dtime = cpu_to_le32(inode->u.ext3_i.i_dtime);
--      raw_inode->i_flags = cpu_to_le32(inode->u.ext3_i.i_flags);
-+      raw_inode->i_dtime = cpu_to_le32(ei->i_dtime);
-+      raw_inode->i_flags = cpu_to_le32(ei->i_flags);
- #ifdef EXT3_FRAGMENTS
--      raw_inode->i_faddr = cpu_to_le32(inode->u.ext3_i.i_faddr);
--      raw_inode->i_frag = inode->u.ext3_i.i_frag_no;
--      raw_inode->i_fsize = inode->u.ext3_i.i_frag_size;
-+      raw_inode->i_faddr = cpu_to_le32(ei->i_faddr);
-+      raw_inode->i_frag = ei->i_frag_no;
-+      raw_inode->i_fsize = ei->i_frag_size;
- #else
-       /* If we are not tracking these fields in the in-memory inode,
-        * then preserve them on disk, but still initialise them to zero
-        * for new inodes. */
--      if (EXT3_I(inode)->i_state & EXT3_STATE_NEW) {
-+      if (ei->i_state & EXT3_STATE_NEW) {
-               raw_inode->i_faddr = 0;
-               raw_inode->i_frag = 0;
-               raw_inode->i_fsize = 0;
-       }
- #endif
--      raw_inode->i_file_acl = cpu_to_le32(inode->u.ext3_i.i_file_acl);
-+      raw_inode->i_file_acl = cpu_to_le32(ei->i_file_acl);
-       if (!S_ISREG(inode->i_mode)) {
--              raw_inode->i_dir_acl = cpu_to_le32(inode->u.ext3_i.i_dir_acl);
-+              raw_inode->i_dir_acl = cpu_to_le32(ei->i_dir_acl);
-       } else {
--              raw_inode->i_size_high =
--                      cpu_to_le32(inode->u.ext3_i.i_disksize >> 32);
--              if (inode->u.ext3_i.i_disksize > 0x7fffffffULL) {
-+              raw_inode->i_size_high = cpu_to_le32(ei->i_disksize >> 32);
-+              if (ei->i_disksize > MAX_NON_LFS) {
-                       struct super_block *sb = inode->i_sb;
-                       if (!EXT3_HAS_RO_COMPAT_FEATURE(sb,
-                                       EXT3_FEATURE_RO_COMPAT_LARGE_FILE) ||
-@@ -2300,7 +2306,7 @@ static int ext3_do_update_inode(handle_t
-                               * created, add a flag to the superblock.
-                               */
-                               err = ext3_journal_get_write_access(handle,
--                                              sb->u.ext3_sb.s_sbh);
-+                                              EXT3_SB(sb)->s_sbh);
-                               if (err)
-                                       goto out_brelse;
-                               ext3_update_dynamic_rev(sb);
-@@ -2309,7 +2315,7 @@ static int ext3_do_update_inode(handle_t
-                               sb->s_dirt = 1;
-                               handle->h_sync = 1;
-                               err = ext3_journal_dirty_metadata(handle,
--                                              sb->u.ext3_sb.s_sbh);
-+                                              EXT3_SB(sb)->s_sbh);
-                       }
-               }
-       }
-@@ -2318,13 +2324,13 @@ static int ext3_do_update_inode(handle_t
-               raw_inode->i_block[0] =
-                       cpu_to_le32(kdev_t_to_nr(inode->i_rdev));
-       else for (block = 0; block < EXT3_N_BLOCKS; block++)
--              raw_inode->i_block[block] = inode->u.ext3_i.i_data[block];
-+              raw_inode->i_block[block] = ei->i_data[block];
-       BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-       rc = ext3_journal_dirty_metadata(handle, bh);
-       if (!err)
-               err = rc;
--      EXT3_I(inode)->i_state &= ~EXT3_STATE_NEW;
-+      ei->i_state &= ~EXT3_STATE_NEW;
- out_brelse:
-       brelse (bh);
-@@ -2432,7 +2438,7 @@ int ext3_setattr(struct dentry *dentry, 
-               }
-               
-               error = ext3_orphan_add(handle, inode);
--              inode->u.ext3_i.i_disksize = attr->ia_size;
-+              EXT3_I(inode)->i_disksize = attr->ia_size;
-               rc = ext3_mark_inode_dirty(handle, inode);
-               if (!error)
-                       error = rc;
-@@ -2675,9 +2681,9 @@ int ext3_change_inode_journal_flag(struc
-        */
-       if (val)
--              inode->u.ext3_i.i_flags |= EXT3_JOURNAL_DATA_FL;
-+              EXT3_I(inode)->i_flags |= EXT3_JOURNAL_DATA_FL;
-       else
--              inode->u.ext3_i.i_flags &= ~EXT3_JOURNAL_DATA_FL;
-+              EXT3_I(inode)->i_flags &= ~EXT3_JOURNAL_DATA_FL;
-       journal_unlock_updates(journal);
---- linux-2.4.18-chaos/fs/ext3/ioctl.c~ext3-2.4.18-ino_sb_macro-2      2001-11-10 01:25:04.000000000 +0300
-+++ linux-2.4.18-chaos-alexey/fs/ext3/ioctl.c  2003-09-16 23:34:40.000000000 +0400
-@@ -18,13 +18,14 @@
- int ext3_ioctl (struct inode * inode, struct file * filp, unsigned int cmd,
-               unsigned long arg)
- {
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       unsigned int flags;
-       ext3_debug ("cmd = %u, arg = %lu\n", cmd, arg);
-       switch (cmd) {
-       case EXT3_IOC_GETFLAGS:
--              flags = inode->u.ext3_i.i_flags & EXT3_FL_USER_VISIBLE;
-+              flags = ei->i_flags & EXT3_FL_USER_VISIBLE;
-               return put_user(flags, (int *) arg);
-       case EXT3_IOC_SETFLAGS: {
-               handle_t *handle = NULL;
-@@ -42,7 +43,7 @@ int ext3_ioctl (struct inode * inode, st
-               if (get_user(flags, (int *) arg))
-                       return -EFAULT;
--              oldflags = inode->u.ext3_i.i_flags;
-+              oldflags = ei->i_flags;
-               /* The JOURNAL_DATA flag is modifiable only by root */
-               jflag = flags & EXT3_JOURNAL_DATA_FL;
-@@ -79,7 +80,7 @@ int ext3_ioctl (struct inode * inode, st
-               
-               flags = flags & EXT3_FL_USER_MODIFIABLE;
-               flags |= oldflags & ~EXT3_FL_USER_MODIFIABLE;
--              inode->u.ext3_i.i_flags = flags;
-+              ei->i_flags = flags;
-               if (flags & EXT3_SYNC_FL)
-                       inode->i_flags |= S_SYNC;
-@@ -155,12 +156,12 @@ flags_err:
-                       int ret = 0;
-                       set_current_state(TASK_INTERRUPTIBLE);
--                      add_wait_queue(&sb->u.ext3_sb.ro_wait_queue, &wait);
--                      if (timer_pending(&sb->u.ext3_sb.turn_ro_timer)) {
-+                      add_wait_queue(&EXT3_SB(sb)->ro_wait_queue, &wait);
-+                      if (timer_pending(&EXT3_SB(sb)->turn_ro_timer)) {
-                               schedule();
-                               ret = 1;
-                       }
--                      remove_wait_queue(&sb->u.ext3_sb.ro_wait_queue, &wait);
-+                      remove_wait_queue(&EXT3_SB(sb)->ro_wait_queue, &wait);
-                       return ret;
-               }
- #endif
---- linux-2.4.18-chaos/fs/ext3/namei.c~ext3-2.4.18-ino_sb_macro-2      2003-09-16 23:34:33.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/namei.c  2003-09-16 23:34:40.000000000 +0400
-@@ -1764,8 +1764,8 @@ int ext3_orphan_add(handle_t *handle, st
-       J_ASSERT ((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
-               S_ISLNK(inode->i_mode)) || inode->i_nlink == 0);
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get_write_access");
--      err = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-       if (err)
-               goto out_unlock;
-       
-@@ -1776,7 +1776,7 @@ int ext3_orphan_add(handle_t *handle, st
-       /* Insert this inode at the head of the on-disk orphan list... */
-       NEXT_ORPHAN(inode) = le32_to_cpu(EXT3_SB(sb)->s_es->s_last_orphan);
-       EXT3_SB(sb)->s_es->s_last_orphan = cpu_to_le32(inode->i_ino);
--      err = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
-+      err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-       rc = ext3_mark_iloc_dirty(handle, inode, &iloc);
-       if (!err)
-               err = rc;
-@@ -1850,8 +1850,7 @@ int ext3_orphan_del(handle_t *handle, st
-               err = ext3_journal_dirty_metadata(handle, sbi->s_sbh);
-       } else {
-               struct ext3_iloc iloc2;
--              struct inode *i_prev =
--                      list_entry(prev, struct inode, u.ext3_i.i_orphan);
-+              struct inode *i_prev = orphan_list_entry(prev);
-               jbd_debug(4, "orphan inode %lu will point to %lu\n",
-                         i_prev->i_ino, ino_next);
---- linux-2.4.18-chaos/fs/ext3/super.c~ext3-2.4.18-ino_sb_macro-2      2003-09-16 23:34:16.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/super.c  2003-09-16 23:34:40.000000000 +0400
-@@ -124,7 +124,7 @@ static int ext3_error_behaviour(struct s
-       /* If no overrides were specified on the mount, then fall back
-        * to the default behaviour set in the filesystem's superblock
-        * on disk. */
--      switch (le16_to_cpu(sb->u.ext3_sb.s_es->s_errors)) {
-+      switch (le16_to_cpu(EXT3_SB(sb)->s_es->s_errors)) {
-       case EXT3_ERRORS_PANIC:
-               return EXT3_ERRORS_PANIC;
-       case EXT3_ERRORS_RO:
-@@ -272,9 +272,9 @@ void ext3_abort (struct super_block * sb
-               return;
-       
-       printk (KERN_CRIT "Remounting filesystem read-only\n");
--      sb->u.ext3_sb.s_mount_state |= EXT3_ERROR_FS;
-+      EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS;
-       sb->s_flags |= MS_RDONLY;
--      sb->u.ext3_sb.s_mount_opt |= EXT3_MOUNT_ABORT;
-+      EXT3_SB(sb)->s_mount_opt |= EXT3_MOUNT_ABORT;
-       journal_abort(EXT3_SB(sb)->s_journal, -EIO);
- }
-@@ -380,8 +380,6 @@ static int ext3_blkdev_remove(struct ext
-       return ret;
- }
--#define orphan_list_entry(l) list_entry((l), struct inode, u.ext3_i.i_orphan)
--
- static void dump_orphan_list(struct super_block *sb, struct ext3_sb_info *sbi)
- {
-       struct list_head *l;
-@@ -825,7 +823,7 @@ static void ext3_orphan_cleanup (struct 
-               sb->s_flags &= ~MS_RDONLY;
-       }
--      if (sb->u.ext3_sb.s_mount_state & EXT3_ERROR_FS) {
-+      if (EXT3_SB(sb)->s_mount_state & EXT3_ERROR_FS) {
-               if (es->s_last_orphan)
-                       jbd_debug(1, "Errors on filesystem, "
-                                 "clearing orphan list.\n");
-@@ -1474,12 +1472,14 @@ static void ext3_commit_super (struct su
-                              struct ext3_super_block * es,
-                              int sync)
- {
-+      struct buffer_head *sbh = EXT3_SB(sb)->s_sbh;
-+
-       es->s_wtime = cpu_to_le32(CURRENT_TIME);
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "marking dirty");
--      mark_buffer_dirty(sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(sbh, "marking dirty");
-+      mark_buffer_dirty(sbh);
-       if (sync) {
--              ll_rw_block(WRITE, 1, &sb->u.ext3_sb.s_sbh);
--              wait_on_buffer(sb->u.ext3_sb.s_sbh);
-+              ll_rw_block(WRITE, 1, &sbh);
-+              wait_on_buffer(sbh);
-       }
- }
-@@ -1530,7 +1530,7 @@ static void ext3_clear_journal_err(struc
-               ext3_warning(sb, __FUNCTION__, "Marking fs in need of "
-                            "filesystem check.");
-               
--              sb->u.ext3_sb.s_mount_state |= EXT3_ERROR_FS;
-+              EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS;
-               es->s_state |= cpu_to_le16(EXT3_ERROR_FS);
-               ext3_commit_super (sb, es, 1);
---- linux-2.4.18-chaos/fs/ext3/symlink.c~ext3-2.4.18-ino_sb_macro-2    2001-11-10 01:25:04.000000000 +0300
-+++ linux-2.4.18-chaos-alexey/fs/ext3/symlink.c        2003-09-16 23:34:40.000000000 +0400
-@@ -23,14 +23,14 @@
- static int ext3_readlink(struct dentry *dentry, char *buffer, int buflen)
- {
--      char *s = (char *)dentry->d_inode->u.ext3_i.i_data;
--      return vfs_readlink(dentry, buffer, buflen, s);
-+      struct ext3_inode_info *ei = EXT3_I(dentry->d_inode);
-+      return vfs_readlink(dentry, buffer, buflen, (char *)ei->i_data);
- }
- static int ext3_follow_link(struct dentry *dentry, struct nameidata *nd)
- {
--      char *s = (char *)dentry->d_inode->u.ext3_i.i_data;
--      return vfs_follow_link(nd, s);
-+      struct ext3_inode_info *ei = EXT3_I(dentry->d_inode);
-+      return vfs_follow_link(nd, (char*)ei->i_data);
- }
- struct inode_operations ext3_fast_symlink_inode_operations = {
---- linux-2.4.18-chaos/include/linux/ext3_fs.h~ext3-2.4.18-ino_sb_macro-2      2003-09-16 23:34:33.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/linux/ext3_fs.h  2003-09-16 23:34:40.000000000 +0400
-@@ -87,22 +87,25 @@
- #define EXT3_MIN_BLOCK_SIZE           1024
- #define       EXT3_MAX_BLOCK_SIZE             4096
- #define EXT3_MIN_BLOCK_LOG_SIZE                 10
-+
- #ifdef __KERNEL__
--# define EXT3_BLOCK_SIZE(s)           ((s)->s_blocksize)
--#else
--# define EXT3_BLOCK_SIZE(s)           (EXT3_MIN_BLOCK_SIZE << (s)->s_log_block_size)
--#endif
--#define       EXT3_ADDR_PER_BLOCK(s)          (EXT3_BLOCK_SIZE(s) / sizeof (__u32))
--#ifdef __KERNEL__
--# define EXT3_BLOCK_SIZE_BITS(s)      ((s)->s_blocksize_bits)
--#else
--# define EXT3_BLOCK_SIZE_BITS(s)      ((s)->s_log_block_size + 10)
--#endif
--#ifdef __KERNEL__
--#define       EXT3_ADDR_PER_BLOCK_BITS(s)     ((s)->u.ext3_sb.s_addr_per_block_bits)
--#define EXT3_INODE_SIZE(s)            ((s)->u.ext3_sb.s_inode_size)
--#define EXT3_FIRST_INO(s)             ((s)->u.ext3_sb.s_first_ino)
-+#define EXT3_SB(sb)   (&((sb)->u.ext3_sb))
-+#define EXT3_I(inode) (&((inode)->u.ext3_i))
-+
-+#define EXT3_BLOCK_SIZE(s)            ((s)->s_blocksize)
-+#define EXT3_BLOCK_SIZE_BITS(s)               ((s)->s_blocksize_bits)
-+#define       EXT3_ADDR_PER_BLOCK_BITS(s)     (EXT3_SB(s)->s_addr_per_block_bits)
-+#define EXT3_INODE_SIZE(s)            (EXT3_SB(s)->s_inode_size)
-+#define EXT3_FIRST_INO(s)             (EXT3_SB(s)->s_first_ino)
- #else
-+
-+/* Assume that user mode programs are passing in an ext3fs superblock, not
-+ * a kernel struct super_block.  This will allow us to call the feature-test
-+ * macros from user land. */
-+#define EXT3_SB(sb)   (sb)
-+
-+#define EXT3_BLOCK_SIZE(s)    (EXT3_MIN_BLOCK_SIZE << (s)->s_log_block_size)
-+#define EXT3_BLOCK_SIZE_BITS(s)       ((s)->s_log_block_size + 10)
- #define EXT3_INODE_SIZE(s)    (((s)->s_rev_level == EXT3_GOOD_OLD_REV) ? \
-                                EXT3_GOOD_OLD_INODE_SIZE : \
-                                (s)->s_inode_size)
-@@ -110,6 +113,7 @@
-                                EXT3_GOOD_OLD_FIRST_INO : \
-                                (s)->s_first_ino)
- #endif
-+#define EXT3_ADDR_PER_BLOCK(s)        (EXT3_BLOCK_SIZE(s) / sizeof (__u32))
- /*
-  * Macro-instructions used to manage fragments
-@@ -118,8 +122,8 @@
- #define       EXT3_MAX_FRAG_SIZE              4096
- #define EXT3_MIN_FRAG_LOG_SIZE                  10
- #ifdef __KERNEL__
--# define EXT3_FRAG_SIZE(s)            ((s)->u.ext3_sb.s_frag_size)
--# define EXT3_FRAGS_PER_BLOCK(s)      ((s)->u.ext3_sb.s_frags_per_block)
-+# define EXT3_FRAG_SIZE(s)            (EXT3_SB(s)->s_frag_size)
-+# define EXT3_FRAGS_PER_BLOCK(s)      (EXT3_SB(s)->s_frags_per_block)
- #else
- # define EXT3_FRAG_SIZE(s)            (EXT3_MIN_FRAG_SIZE << (s)->s_log_frag_size)
- # define EXT3_FRAGS_PER_BLOCK(s)      (EXT3_BLOCK_SIZE(s) / EXT3_FRAG_SIZE(s))
-@@ -143,15 +147,13 @@ struct ext3_group_desc
- /*
-  * Macro-instructions used to manage group descriptors
-  */
-+# define EXT3_BLOCKS_PER_GROUP(s)     (EXT3_SB(s)->s_blocks_per_group)
-+# define EXT3_INODES_PER_GROUP(s)     (EXT3_SB(s)->s_inodes_per_group)
- #ifdef __KERNEL__
--# define EXT3_BLOCKS_PER_GROUP(s)     ((s)->u.ext3_sb.s_blocks_per_group)
--# define EXT3_DESC_PER_BLOCK(s)               ((s)->u.ext3_sb.s_desc_per_block)
--# define EXT3_INODES_PER_GROUP(s)     ((s)->u.ext3_sb.s_inodes_per_group)
--# define EXT3_DESC_PER_BLOCK_BITS(s)  ((s)->u.ext3_sb.s_desc_per_block_bits)
-+# define EXT3_DESC_PER_BLOCK(s)               (EXT3_SB(s)->s_desc_per_block)
-+# define EXT3_DESC_PER_BLOCK_BITS(s)  (EXT3_SB(s)->s_desc_per_block_bits)
- #else
--# define EXT3_BLOCKS_PER_GROUP(s)     ((s)->s_blocks_per_group)
- # define EXT3_DESC_PER_BLOCK(s)               (EXT3_BLOCK_SIZE(s) / sizeof (struct ext3_group_desc))
--# define EXT3_INODES_PER_GROUP(s)     ((s)->s_inodes_per_group)
- #endif
- /*
-@@ -325,7 +327,7 @@ struct ext3_inode {
- #ifndef _LINUX_EXT2_FS_H
- #define clear_opt(o, opt)             o &= ~EXT3_MOUNT_##opt
- #define set_opt(o, opt)                       o |= EXT3_MOUNT_##opt
--#define test_opt(sb, opt)             ((sb)->u.ext3_sb.s_mount_opt & \
-+#define test_opt(sb, opt)             (EXT3_SB(sb)->s_mount_opt & \
-                                        EXT3_MOUNT_##opt)
- #else
- #define EXT2_MOUNT_NOLOAD             EXT3_MOUNT_NOLOAD
-@@ -425,17 +427,11 @@ struct ext3_super_block {
-       __u32   s_reserved[192];        /* Padding to the end of the block */
- };
--#ifdef __KERNEL__
--#define EXT3_SB(sb)   (&((sb)->u.ext3_sb))
--#define EXT3_I(inode) (&((inode)->u.ext3_i))
--#else
--/* Assume that user mode programs are passing in an ext3fs superblock, not
-- * a kernel struct super_block.  This will allow us to call the feature-test
-- * macros from user land. */
--#define EXT3_SB(sb)   (sb)
--#endif
--
--#define NEXT_ORPHAN(inode) (inode)->u.ext3_i.i_dtime
-+#define NEXT_ORPHAN(inode) EXT3_I(inode)->i_dtime
-+static inline struct inode *orphan_list_entry(struct list_head *l)
-+{
-+      return list_entry(l, struct inode, u.ext3_i.i_orphan);
-+}
- /*
-  * Codes for operating systems
---- linux-2.4.18-chaos/include/linux/ext3_jbd.h~ext3-2.4.18-ino_sb_macro-2     2003-09-16 23:34:16.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/linux/ext3_jbd.h 2003-09-16 23:34:40.000000000 +0400
-@@ -297,7 +297,7 @@ static inline int ext3_should_journal_da
-               return 1;
-       if (test_opt(inode->i_sb, DATA_FLAGS) == EXT3_MOUNT_JOURNAL_DATA)
-               return 1;
--      if (inode->u.ext3_i.i_flags & EXT3_JOURNAL_DATA_FL)
-+      if (EXT3_I(inode)->i_flags & EXT3_JOURNAL_DATA_FL)
-               return 1;
-       return 0;
- }
diff --git a/lustre/kernel_patches/patches/ext3-2.4.18-ino_sb_macro.patch b/lustre/kernel_patches/patches/ext3-2.4.18-ino_sb_macro.patch
deleted file mode 100644 (file)
index 2ddff7d..0000000
+++ /dev/null
@@ -1,1540 +0,0 @@
---- ./fs/ext3/balloc.c.orig    Fri Apr 12 10:27:49 2002
-+++ ./fs/ext3/balloc.c Tue May  7 15:35:59 2002
-@@ -46,18 +46,18 @@ struct ext3_group_desc * ext3_get_group_
-       unsigned long desc;
-       struct ext3_group_desc * gdp;
--      if (block_group >= sb->u.ext3_sb.s_groups_count) {
-+      if (block_group >= EXT3_SB(sb)->s_groups_count) {
-               ext3_error (sb, "ext3_get_group_desc",
-                           "block_group >= groups_count - "
-                           "block_group = %d, groups_count = %lu",
--                          block_group, sb->u.ext3_sb.s_groups_count);
-+                          block_group, EXT3_SB(sb)->s_groups_count);
-               return NULL;
-       }
-       
-       group_desc = block_group / EXT3_DESC_PER_BLOCK(sb);
-       desc = block_group % EXT3_DESC_PER_BLOCK(sb);
--      if (!sb->u.ext3_sb.s_group_desc[group_desc]) {
-+      if (!EXT3_SB(sb)->s_group_desc[group_desc]) {
-               ext3_error (sb, "ext3_get_group_desc",
-                           "Group descriptor not loaded - "
-                           "block_group = %d, group_desc = %lu, desc = %lu",
-@@ -66,9 +66,9 @@ struct ext3_group_desc * ext3_get_group_
-       }
-       
-       gdp = (struct ext3_group_desc *) 
--            sb->u.ext3_sb.s_group_desc[group_desc]->b_data;
-+            EXT3_SB(sb)->s_group_desc[group_desc]->b_data;
-       if (bh)
--              *bh = sb->u.ext3_sb.s_group_desc[group_desc];
-+              *bh = EXT3_SB(sb)->s_group_desc[group_desc];
-       return gdp + desc;
- }
-@@ -104,8 +104,8 @@ static int read_block_bitmap (struct sup
-        * this group.  The IO will be retried next time.
-        */
- error_out:
--      sb->u.ext3_sb.s_block_bitmap_number[bitmap_nr] = block_group;
--      sb->u.ext3_sb.s_block_bitmap[bitmap_nr] = bh;
-+      EXT3_SB(sb)->s_block_bitmap_number[bitmap_nr] = block_group;
-+      EXT3_SB(sb)->s_block_bitmap[bitmap_nr] = bh;
-       return retval;
- }
-@@ -128,16 +128,17 @@ static int __load_block_bitmap (struct s
-       int i, j, retval = 0;
-       unsigned long block_bitmap_number;
-       struct buffer_head * block_bitmap;
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
--      if (block_group >= sb->u.ext3_sb.s_groups_count)
-+      if (block_group >= sbi->s_groups_count)
-               ext3_panic (sb, "load_block_bitmap",
-                           "block_group >= groups_count - "
-                           "block_group = %d, groups_count = %lu",
--                          block_group, sb->u.ext3_sb.s_groups_count);
-+                          block_group, EXT3_SB(sb)->s_groups_count);
--      if (sb->u.ext3_sb.s_groups_count <= EXT3_MAX_GROUP_LOADED) {
--              if (sb->u.ext3_sb.s_block_bitmap[block_group]) {
--                      if (sb->u.ext3_sb.s_block_bitmap_number[block_group] ==
-+      if (sbi->s_groups_count <= EXT3_MAX_GROUP_LOADED) {
-+              if (sbi->s_block_bitmap[block_group]) {
-+                      if (sbi->s_block_bitmap_number[block_group] ==
-                           block_group)
-                               return block_group;
-                       ext3_error (sb, "__load_block_bitmap",
-@@ -149,21 +150,20 @@ static int __load_block_bitmap (struct s
-               return block_group;
-       }
--      for (i = 0; i < sb->u.ext3_sb.s_loaded_block_bitmaps &&
--                  sb->u.ext3_sb.s_block_bitmap_number[i] != block_group; i++)
-+      for (i = 0; i < sbi->s_loaded_block_bitmaps &&
-+                  sbi->s_block_bitmap_number[i] != block_group; i++)
-               ;
--      if (i < sb->u.ext3_sb.s_loaded_block_bitmaps &&
--          sb->u.ext3_sb.s_block_bitmap_number[i] == block_group) {
--              block_bitmap_number = sb->u.ext3_sb.s_block_bitmap_number[i];
--              block_bitmap = sb->u.ext3_sb.s_block_bitmap[i];
-+      if (i < sbi->s_loaded_block_bitmaps &&
-+          sbi->s_block_bitmap_number[i] == block_group) {
-+              block_bitmap_number = sbi->s_block_bitmap_number[i];
-+              block_bitmap = sbi->s_block_bitmap[i];
-               for (j = i; j > 0; j--) {
--                      sb->u.ext3_sb.s_block_bitmap_number[j] =
--                              sb->u.ext3_sb.s_block_bitmap_number[j - 1];
--                      sb->u.ext3_sb.s_block_bitmap[j] =
--                              sb->u.ext3_sb.s_block_bitmap[j - 1];
-+                      sbi->s_block_bitmap_number[j] =
-+                              sbi->s_block_bitmap_number[j - 1];
-+                      sbi->s_block_bitmap[j] = sbi->s_block_bitmap[j - 1];
-               }
--              sb->u.ext3_sb.s_block_bitmap_number[0] = block_bitmap_number;
--              sb->u.ext3_sb.s_block_bitmap[0] = block_bitmap;
-+              sbi->s_block_bitmap_number[0] = block_bitmap_number;
-+              sbi->s_block_bitmap[0] = block_bitmap;
-               /*
-                * There's still one special case here --- if block_bitmap == 0
-@@ -173,17 +173,14 @@ static int __load_block_bitmap (struct s
-               if (!block_bitmap)
-                       retval = read_block_bitmap (sb, block_group, 0);
-       } else {
--              if (sb->u.ext3_sb.s_loaded_block_bitmaps<EXT3_MAX_GROUP_LOADED)
--                      sb->u.ext3_sb.s_loaded_block_bitmaps++;
-+              if (sbi->s_loaded_block_bitmaps<EXT3_MAX_GROUP_LOADED)
-+                      sbi->s_loaded_block_bitmaps++;
-               else
--                      brelse (sb->u.ext3_sb.s_block_bitmap
--                                      [EXT3_MAX_GROUP_LOADED - 1]);
--              for (j = sb->u.ext3_sb.s_loaded_block_bitmaps - 1;
--                                      j > 0;  j--) {
--                      sb->u.ext3_sb.s_block_bitmap_number[j] =
--                              sb->u.ext3_sb.s_block_bitmap_number[j - 1];
--                      sb->u.ext3_sb.s_block_bitmap[j] =
--                              sb->u.ext3_sb.s_block_bitmap[j - 1];
-+                      brelse(sbi->s_block_bitmap[EXT3_MAX_GROUP_LOADED - 1]);
-+              for (j = sbi->s_loaded_block_bitmaps - 1; j > 0;  j--) {
-+                      sbi->s_block_bitmap_number[j] =
-+                              sbi->s_block_bitmap_number[j - 1];
-+                      sbi->s_block_bitmap[j] = sbi->s_block_bitmap[j - 1];
-               }
-               retval = read_block_bitmap (sb, block_group, 0);
-       }
-@@ -206,24 +203,25 @@ static int __load_block_bitmap (struct s
- static inline int load_block_bitmap (struct super_block * sb,
-                                    unsigned int block_group)
- {
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-       int slot;
--      
-+
-       /*
-        * Do the lookup for the slot.  First of all, check if we're asking
-        * for the same slot as last time, and did we succeed that last time?
-        */
--      if (sb->u.ext3_sb.s_loaded_block_bitmaps > 0 &&
--          sb->u.ext3_sb.s_block_bitmap_number[0] == block_group &&
--          sb->u.ext3_sb.s_block_bitmap[0]) {
-+      if (sbi->s_loaded_block_bitmaps > 0 &&
-+          sbi->s_block_bitmap_number[0] == block_group &&
-+          sbi->s_block_bitmap[0]) {
-               return 0;
-       }
-       /*
-        * Or can we do a fast lookup based on a loaded group on a filesystem
-        * small enough to be mapped directly into the superblock?
-        */
--      else if (sb->u.ext3_sb.s_groups_count <= EXT3_MAX_GROUP_LOADED && 
--               sb->u.ext3_sb.s_block_bitmap_number[block_group]==block_group
--                      && sb->u.ext3_sb.s_block_bitmap[block_group]) {
-+      else if (sbi->s_groups_count <= EXT3_MAX_GROUP_LOADED &&
-+               sbi->s_block_bitmap_number[block_group] == block_group
-+                      && sbi->s_block_bitmap[block_group]) {
-               slot = block_group;
-       }
-       /*
-@@ -243,7 +241,7 @@ static inline int load_block_bitmap (str
-        * If it's a valid slot, we may still have cached a previous IO error,
-        * in which case the bh in the superblock cache will be zero.
-        */
--      if (!sb->u.ext3_sb.s_block_bitmap[slot])
-+      if (!sbi->s_block_bitmap[slot])
-               return -EIO;
-       
-       /*
-@@ -275,7 +273,7 @@ void ext3_free_blocks (handle_t *handle,
-               return;
-       }
-       lock_super (sb);
--      es = sb->u.ext3_sb.s_es;
-+      es = EXT3_SB(sb)->s_es;
-       if (block < le32_to_cpu(es->s_first_data_block) ||
-           block + count < block ||
-           (block + count) > le32_to_cpu(es->s_blocks_count)) {
-@@ -304,7 +302,7 @@ do_more:
-       if (bitmap_nr < 0)
-               goto error_return;
-       
--      bitmap_bh = sb->u.ext3_sb.s_block_bitmap[bitmap_nr];
-+      bitmap_bh = EXT3_SB(sb)->s_block_bitmap[bitmap_nr];
-       gdp = ext3_get_group_desc (sb, block_group, &gd_bh);
-       if (!gdp)
-               goto error_return;
-@@ -330,8 +328,8 @@ do_more:
-       if (err)
-               goto error_return;
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get_write_access");
--      err = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-       if (err)
-               goto error_return;
-@@ -341,7 +339,7 @@
-               if (block == le32_to_cpu(gdp->bg_block_bitmap) ||
-                   block == le32_to_cpu(gdp->bg_inode_bitmap) ||
-                   in_range(block, le32_to_cpu(gdp->bg_inode_table),
--                           sb->u.ext2_sb.s_itb_per_group)) {
-+                           EXT3_SB(sb)->s_itb_per_group)) {
-                       ext3_error(sb, __FUNCTION__,
-                                  "Freeing block in system zone - block = %lu",
-                                  block);
-@@ -410,8 +407,8 @@ do_more:
-       if (!err) err = ret;
-       /* And the superblock */
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "dirtied superblock");
--      ret = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "dirtied superblock");
-+      ret = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-       if (!err) err = ret;
-       if (overflow && !err) {
-@@ -564,12 +560,12 @@ int ext3_new_block (handle_t *handle, st
-       }
-       lock_super (sb);
--      es = sb->u.ext3_sb.s_es;
-+      es = EXT3_SB(sb)->s_es;
-       if (le32_to_cpu(es->s_free_blocks_count) <=
-                       le32_to_cpu(es->s_r_blocks_count) &&
--          ((sb->u.ext3_sb.s_resuid != current->fsuid) &&
--           (sb->u.ext3_sb.s_resgid == 0 ||
--            !in_group_p (sb->u.ext3_sb.s_resgid)) && 
-+          ((EXT3_SB(sb)->s_resuid != current->fsuid) &&
-+           (EXT3_SB(sb)->s_resgid == 0 ||
-+            !in_group_p (EXT3_SB(sb)->s_resgid)) &&
-            !capable(CAP_SYS_RESOURCE)))
-               goto out;
-@@ -598,7 +595,7 @@ int ext3_new_block (handle_t *handle, st
-               if (bitmap_nr < 0)
-                       goto io_error;
-               
--              bh = sb->u.ext3_sb.s_block_bitmap[bitmap_nr];
-+              bh = EXT3_SB(sb)->s_block_bitmap[bitmap_nr];
-               ext3_debug ("goal is at %d:%d.\n", i, j);
-@@ -621,9 +618,9 @@ int ext3_new_block (handle_t *handle, st
-        * Now search the rest of the groups.  We assume that 
-        * i and gdp correctly point to the last group visited.
-        */
--      for (k = 0; k < sb->u.ext3_sb.s_groups_count; k++) {
-+      for (k = 0; k < EXT3_SB(sb)->s_groups_count; k++) {
-               i++;
--              if (i >= sb->u.ext3_sb.s_groups_count)
-+              if (i >= EXT3_SB(sb)->s_groups_count)
-                       i = 0;
-               gdp = ext3_get_group_desc (sb, i, &bh2);
-               if (!gdp) {
-@@ -635,7 +632,7 @@ int ext3_new_block (handle_t *handle, st
-                       if (bitmap_nr < 0)
-                               goto io_error;
-       
--                      bh = sb->u.ext3_sb.s_block_bitmap[bitmap_nr];
-+                      bh = EXT3_SB(sb)->s_block_bitmap[bitmap_nr];
-                       j = find_next_usable_block(-1, bh, 
-                                                  EXT3_BLOCKS_PER_GROUP(sb));
-                       if (j >= 0) 
-@@ -674,8 +671,8 @@ got_block:
-       fatal = ext3_journal_get_write_access(handle, bh2);
-       if (fatal) goto out;
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get_write_access");
--      fatal = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "get_write_access");
-+      fatal = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-       if (fatal) goto out;
-       tmp = j + i * EXT3_BLOCKS_PER_GROUP(sb)
-@@ -796,7 +804,7 @@ got_block:
-       if (!fatal) fatal = err;
-       
-       BUFFER_TRACE(bh, "journal_dirty_metadata for superblock");
--      err = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
-+      err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-       if (!fatal) fatal = err;
-       sb->s_dirt = 1;
-@@ -829,11 +837,11 @@ unsigned long ext3_count_free_blocks (st
-       int i;
-       
-       lock_super (sb);
--      es = sb->u.ext3_sb.s_es;
-+      es = EXT3_SB(sb)->s_es;
-       desc_count = 0;
-       bitmap_count = 0;
-       gdp = NULL;
--      for (i = 0; i < sb->u.ext3_sb.s_groups_count; i++) {
-+      for (i = 0; i < EXT3_SB(sb)->s_groups_count; i++) {
-               gdp = ext3_get_group_desc (sb, i, NULL);
-               if (!gdp)
-                       continue;
-@@ -842,7 +850,7 @@ unsigned long ext3_count_free_blocks (st
-               if (bitmap_nr < 0)
-                       continue;
-               
--              x = ext3_count_free (sb->u.ext3_sb.s_block_bitmap[bitmap_nr],
-+              x = ext3_count_free (EXT3_SB(sb)->s_block_bitmap[bitmap_nr],
-                                    sb->s_blocksize);
-               printk ("group %d: stored = %d, counted = %lu\n",
-                       i, le16_to_cpu(gdp->bg_free_blocks_count), x);
-@@ -853,7 +861,7 @@ unsigned long ext3_count_free_blocks (st
-       unlock_super (sb);
-       return bitmap_count;
- #else
--      return le32_to_cpu(sb->u.ext3_sb.s_es->s_free_blocks_count);
-+      return le32_to_cpu(EXT3_SB(sb)->s_es->s_free_blocks_count);
- #endif
- }
-@@ -862,7 +870,7 @@ static inline int block_in_use (unsigned
-                               unsigned char * map)
- {
-       return ext3_test_bit ((block -
--              le32_to_cpu(sb->u.ext3_sb.s_es->s_first_data_block)) %
-+              le32_to_cpu(EXT3_SB(sb)->s_es->s_first_data_block)) %
-                        EXT3_BLOCKS_PER_GROUP(sb), map);
- }
-@@ -930,11 +938,11 @@ void ext3_check_blocks_bitmap (struct su
-       struct ext3_group_desc * gdp;
-       int i;
--      es = sb->u.ext3_sb.s_es;
-+      es = EXT3_SB(sb)->s_es;
-       desc_count = 0;
-       bitmap_count = 0;
-       gdp = NULL;
--      for (i = 0; i < sb->u.ext3_sb.s_groups_count; i++) {
-+      for (i = 0; i < EXT3_SB(sb)->s_groups_count; i++) {
-               gdp = ext3_get_group_desc (sb, i, NULL);
-               if (!gdp)
-                       continue;
-@@ -968,7 +976,7 @@ void ext3_check_blocks_bitmap (struct su
-                                   "Inode bitmap for group %d is marked free",
-                                   i);
--              for (j = 0; j < sb->u.ext3_sb.s_itb_per_group; j++)
-+              for (j = 0; j < EXT3_SB(sb)->s_itb_per_group; j++)
-                       if (!block_in_use (le32_to_cpu(gdp->bg_inode_table) + j,
-                                                       sb, bh->b_data))
-                               ext3_error (sb, "ext3_check_blocks_bitmap",
---- ./fs/ext3/dir.c.orig       Fri Apr 12 10:27:49 2002
-+++ ./fs/ext3/dir.c    Tue May  7 14:54:13 2002
-@@ -52,7 +52,7 @@ int ext3_check_dir_entry (const char * f
-       else if (((char *) de - bh->b_data) + rlen > dir->i_sb->s_blocksize)
-               error_msg = "directory entry across blocks";
-       else if (le32_to_cpu(de->inode) >
--                      le32_to_cpu(dir->i_sb->u.ext3_sb.s_es->s_inodes_count))
-+                      le32_to_cpu(EXT3_SB(dir->i_sb)->s_es->s_inodes_count))
-               error_msg = "inode out of bounds";
-       if (error_msg != NULL)
---- ./fs/ext3/ialloc.c.orig    Fri Apr 12 10:27:49 2002
-+++ ./fs/ext3/ialloc.c Tue May  7 15:39:26 2002
-@@ -73,8 +73,8 @@ static int read_inode_bitmap (struct sup
-        * this group.  The IO will be retried next time.
-        */
- error_out:
--      sb->u.ext3_sb.s_inode_bitmap_number[bitmap_nr] = block_group;
--      sb->u.ext3_sb.s_inode_bitmap[bitmap_nr] = bh;
-+      EXT3_SB(sb)->s_inode_bitmap_number[bitmap_nr] = block_group;
-+      EXT3_SB(sb)->s_inode_bitmap[bitmap_nr] = bh;
-       return retval;
- }
-@@ -225,7 +225,7 @@ void ext3_free_inode (handle_t *handle, 
-       clear_inode (inode);
-       lock_super (sb);
--      es = sb->u.ext3_sb.s_es;
-+      es = EXT3_SB(sb)->s_es;
-       if (ino < EXT3_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) {
-               ext3_error (sb, "ext3_free_inode",
-                           "reserved or nonexistent inode %lu", ino);
-@@ -237,7 +237,7 @@ void ext3_free_inode (handle_t *handle, 
-       if (bitmap_nr < 0)
-               goto error_return;
--      bh = sb->u.ext3_sb.s_inode_bitmap[bitmap_nr];
-+      bh = EXT3_SB(sb)->s_inode_bitmap[bitmap_nr];
-       BUFFER_TRACE(bh, "get_write_access");
-       fatal = ext3_journal_get_write_access(handle, bh);
-@@ -255,8 +255,8 @@ void ext3_free_inode (handle_t *handle, 
-               fatal = ext3_journal_get_write_access(handle, bh2);
-               if (fatal) goto error_return;
--              BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get write access");
--              fatal = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
-+              BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "get write access");
-+              fatal = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-               if (fatal) goto error_return;
-               if (gdp) {
-@@ -271,9 +271,9 @@ void ext3_free_inode (handle_t *handle, 
-               if (!fatal) fatal = err;
-               es->s_free_inodes_count =
-                       cpu_to_le32(le32_to_cpu(es->s_free_inodes_count) + 1);
--              BUFFER_TRACE(sb->u.ext3_sb.s_sbh,
-+              BUFFER_TRACE(EXT3_SB(sb)->s_sbh,
-                                       "call ext3_journal_dirty_metadata");
--              err = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
-+              err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-               if (!fatal) fatal = err;
-       }
-       BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-@@ -305,6 +305,8 @@ struct inode * ext3_new_inode (handle_t 
-       int i, j, avefreei;
-       struct inode * inode;
-       int bitmap_nr;
-+      struct ext3_inode_info *ei;
-+      struct ext3_sb_info *sbi;
-       struct ext3_group_desc * gdp;
-       struct ext3_group_desc * tmp;
-       struct ext3_super_block * es;
-@@ -318,7 +320,9 @@ struct inode * ext3_new_inode (handle_t 
-       inode = new_inode(sb);
-       if (!inode)
-               return ERR_PTR(-ENOMEM);
--      init_rwsem(&inode->u.ext3_i.truncate_sem);
-+      sbi = EXT3_SB(sb);
-+      ei = EXT3_I(inode);
-+      init_rwsem(&ei->truncate_sem);
-       lock_super (sb);
-       es = sb->u.ext3_sb.s_es;
-@@ -328,9 +332,9 @@ struct inode * ext3_new_inode (handle_t 
-       if (S_ISDIR(mode)) {
-               avefreei = le32_to_cpu(es->s_free_inodes_count) /
--                      sb->u.ext3_sb.s_groups_count;
-+                      sbi->s_groups_count;
-               if (!gdp) {
--                      for (j = 0; j < sb->u.ext3_sb.s_groups_count; j++) {
-+                      for (j = 0; j < sbi->s_groups_count; j++) {
-                               struct buffer_head *temp_buffer;
-                               tmp = ext3_get_group_desc (sb, j, &temp_buffer);
-                               if (tmp &&
-@@ -350,7 +354,7 @@ repeat:
-               /*
-                * Try to place the inode in its parent directory
-                */
--              i = dir->u.ext3_i.i_block_group;
-+              i = EXT3_I(dir)->i_block_group;
-               tmp = ext3_get_group_desc (sb, i, &bh2);
-               if (tmp && le16_to_cpu(tmp->bg_free_inodes_count))
-                       gdp = tmp;
-@@ -360,10 +364,10 @@ repeat:
-                        * Use a quadratic hash to find a group with a
-                        * free inode
-                        */
--                      for (j = 1; j < sb->u.ext3_sb.s_groups_count; j <<= 1) {
-+                      for (j = 1; j < sbi->s_groups_count; j <<= 1) {
-                               i += j;
--                              if (i >= sb->u.ext3_sb.s_groups_count)
--                                      i -= sb->u.ext3_sb.s_groups_count;
-+                              if (i >= sbi->s_groups_count)
-+                                      i -= sbi->s_groups_count;
-                               tmp = ext3_get_group_desc (sb, i, &bh2);
-                               if (tmp &&
-                                   le16_to_cpu(tmp->bg_free_inodes_count)) {
-@@ -376,9 +380,9 @@ repeat:
-                       /*
-                        * That failed: try linear search for a free inode
-                        */
--                      i = dir->u.ext3_i.i_block_group + 1;
--                      for (j = 2; j < sb->u.ext3_sb.s_groups_count; j++) {
--                              if (++i >= sb->u.ext3_sb.s_groups_count)
-+                      i = EXT3_I(dir)->i_block_group + 1;
-+                      for (j = 2; j < sbi->s_groups_count; j++) {
-+                              if (++i >= sbi->s_groups_count)
-                                       i = 0;
-                               tmp = ext3_get_group_desc (sb, i, &bh2);
-                               if (tmp &&
-@@ -399,11 +403,11 @@ repeat:
-       if (bitmap_nr < 0)
-               goto fail;
--      bh = sb->u.ext3_sb.s_inode_bitmap[bitmap_nr];
-+      bh = sbi->s_inode_bitmap[bitmap_nr];
-       if ((j = ext3_find_first_zero_bit ((unsigned long *) bh->b_data,
--                                    EXT3_INODES_PER_GROUP(sb))) <
--          EXT3_INODES_PER_GROUP(sb)) {
-+                                    sbi->s_inodes_per_group)) <
-+          sbi->s_inodes_per_group) {
-               BUFFER_TRACE(bh, "get_write_access");
-               err = ext3_journal_get_write_access(handle, bh);
-               if (err) goto fail;
-@@ -457,13 +461,13 @@ repeat:
-       err = ext3_journal_dirty_metadata(handle, bh2);
-       if (err) goto fail;
-       
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get_write_access");
--      err = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(sbi->s_sbh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, sbi->s_sbh);
-       if (err) goto fail;
-       es->s_free_inodes_count =
-               cpu_to_le32(le32_to_cpu(es->s_free_inodes_count) - 1);
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "call ext3_journal_dirty_metadata");
--      err = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(sbi->s_sbh, "call ext3_journal_dirty_metadata");
-+      err = ext3_journal_dirty_metadata(handle, sbi->s_sbh);
-       sb->s_dirt = 1;
-       if (err) goto fail;
-@@ -483,31 +487,31 @@ repeat:
-       inode->i_blksize = PAGE_SIZE;
-       inode->i_blocks = 0;
-       inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
--      inode->u.ext3_i.i_flags = dir->u.ext3_i.i_flags & ~EXT3_INDEX_FL;
-+      ei->i_flags = EXT3_I(dir)->i_flags & ~EXT3_INDEX_FL;
-       if (S_ISLNK(mode))
--              inode->u.ext3_i.i_flags &= ~(EXT3_IMMUTABLE_FL|EXT3_APPEND_FL);
-+              ei->i_flags &= ~(EXT3_IMMUTABLE_FL|EXT3_APPEND_FL);
- #ifdef EXT3_FRAGMENTS
--      inode->u.ext3_i.i_faddr = 0;
--      inode->u.ext3_i.i_frag_no = 0;
--      inode->u.ext3_i.i_frag_size = 0;
-+      ei->i_faddr = 0;
-+      ei->i_frag_no = 0;
-+      ei->i_frag_size = 0;
- #endif
--      inode->u.ext3_i.i_file_acl = 0;
--      inode->u.ext3_i.i_dir_acl = 0;
--      inode->u.ext3_i.i_dtime = 0;
--      INIT_LIST_HEAD(&inode->u.ext3_i.i_orphan);
-+      ei->i_file_acl = 0;
-+      ei->i_dir_acl = 0;
-+      ei->i_dtime = 0;
-+      INIT_LIST_HEAD(&ei->i_orphan);
- #ifdef EXT3_PREALLOCATE
--      inode->u.ext3_i.i_prealloc_count = 0;
-+      ei->i_prealloc_count = 0;
- #endif
--      inode->u.ext3_i.i_block_group = i;
-+      ei->i_block_group = i;
-       
--      if (inode->u.ext3_i.i_flags & EXT3_SYNC_FL)
-+      if (ei->i_flags & EXT3_SYNC_FL)
-               inode->i_flags |= S_SYNC;
-       if (IS_SYNC(inode))
-               handle->h_sync = 1;
-       insert_inode_hash(inode);
--      inode->i_generation = sb->u.ext3_sb.s_next_generation++;
-+      inode->i_generation = sbi->s_next_generation++;
--      inode->u.ext3_i.i_state = EXT3_STATE_NEW;
-+      ei->i_state = EXT3_STATE_NEW;
-       err = ext3_mark_inode_dirty(handle, inode);
-       if (err) goto fail;
-       
-@@ -585,19 +589,19 @@ struct inode *ext3_orphan_get (struct su
- unsigned long ext3_count_free_inodes (struct super_block * sb)
- {
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+      struct ext3_super_block *es = sbi->s_es;
- #ifdef EXT3FS_DEBUG
--      struct ext3_super_block * es;
-       unsigned long desc_count, bitmap_count, x;
-       int bitmap_nr;
-       struct ext3_group_desc * gdp;
-       int i;
-       lock_super (sb);
--      es = sb->u.ext3_sb.s_es;
-       desc_count = 0;
-       bitmap_count = 0;
-       gdp = NULL;
--      for (i = 0; i < sb->u.ext3_sb.s_groups_count; i++) {
-+      for (i = 0; i < sbi->s_groups_count; i++) {
-               gdp = ext3_get_group_desc (sb, i, NULL);
-               if (!gdp)
-                       continue;
-@@ -606,8 +610,8 @@ unsigned long ext3_count_free_inodes (st
-               if (bitmap_nr < 0)
-                       continue;
--              x = ext3_count_free (sb->u.ext3_sb.s_inode_bitmap[bitmap_nr],
--                                   EXT3_INODES_PER_GROUP(sb) / 8);
-+              x = ext3_count_free(sbi->s_inode_bitmap[bitmap_nr],
-+                                  sbi->s_inodes_per_group / 8);
-               printk ("group %d: stored = %d, counted = %lu\n",
-                       i, le16_to_cpu(gdp->bg_free_inodes_count), x);
-               bitmap_count += x;
-@@ -617,7 +621,7 @@ unsigned long ext3_count_free_inodes (st
-       unlock_super (sb);
-       return desc_count;
- #else
--      return le32_to_cpu(sb->u.ext3_sb.s_es->s_free_inodes_count);
-+      return le32_to_cpu(es->s_free_inodes_count);
- #endif
- }
-@@ -626,16 +630,18 @@ unsigned long ext3_count_free_inodes (st
- void ext3_check_inodes_bitmap (struct super_block * sb)
- {
-       struct ext3_super_block * es;
-+      struct ext3_sb_info *sbi;
-       unsigned long desc_count, bitmap_count, x;
-       int bitmap_nr;
-       struct ext3_group_desc * gdp;
-       int i;
--      es = sb->u.ext3_sb.s_es;
-+      sbi = EXT3_SB(sb);
-+      es = sbi->s_es;
-       desc_count = 0;
-       bitmap_count = 0;
-       gdp = NULL;
--      for (i = 0; i < sb->u.ext3_sb.s_groups_count; i++) {
-+      for (i = 0; i < sbi->s_groups_count; i++) {
-               gdp = ext3_get_group_desc (sb, i, NULL);
-               if (!gdp)
-                       continue;
-@@ -644,7 +650,7 @@ void ext3_check_inodes_bitmap (struct su
-               if (bitmap_nr < 0)
-                       continue;
--              x = ext3_count_free (sb->u.ext3_sb.s_inode_bitmap[bitmap_nr],
-+              x = ext3_count_free (sbi->s_inode_bitmap[bitmap_nr],
-                                    EXT3_INODES_PER_GROUP(sb) / 8);
-               if (le16_to_cpu(gdp->bg_free_inodes_count) != x)
-                       ext3_error (sb, "ext3_check_inodes_bitmap",
---- ./fs/ext3/inode.c.orig     Fri Apr 12 10:27:49 2002
-+++ ./fs/ext3/inode.c  Tue May  7 15:41:23 2002
-@@ -196,7 +196,7 @@ void ext3_delete_inode (struct inode * i
-        * (Well, we could do this if we need to, but heck - it works)
-        */
-       ext3_orphan_del(handle, inode);
--      inode->u.ext3_i.i_dtime = CURRENT_TIME;
-+      EXT3_I(inode)->i_dtime = CURRENT_TIME;
-       /* 
-        * One subtle ordering requirement: if anything has gone wrong
-@@ -220,13 +220,14 @@ no_delete:
- void ext3_discard_prealloc (struct inode * inode)
- {
- #ifdef EXT3_PREALLOCATE
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       lock_kernel();
-       /* Writer: ->i_prealloc* */
--      if (inode->u.ext3_i.i_prealloc_count) {
--              unsigned short total = inode->u.ext3_i.i_prealloc_count;
--              unsigned long block = inode->u.ext3_i.i_prealloc_block;
--              inode->u.ext3_i.i_prealloc_count = 0;
--              inode->u.ext3_i.i_prealloc_block = 0;
-+      if (ei->i_prealloc_count) {
-+              unsigned short total = ei->i_prealloc_count;
-+              unsigned long block = ei->i_prealloc_block;
-+              ei->i_prealloc_count = 0;
-+              ei->i_prealloc_block = 0;
-               /* Writer: end */
-               ext3_free_blocks (inode, block, total);
-       }
-@@ -243,13 +244,15 @@ static int ext3_alloc_block (handle_t *h
-       unsigned long result;
- #ifdef EXT3_PREALLOCATE
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+
-       /* Writer: ->i_prealloc* */
--      if (inode->u.ext3_i.i_prealloc_count &&
--          (goal == inode->u.ext3_i.i_prealloc_block ||
--           goal + 1 == inode->u.ext3_i.i_prealloc_block))
-+      if (ei->i_prealloc_count &&
-+          (goal == ei->i_prealloc_block ||
-+           goal + 1 == ei->i_prealloc_block))
-       {
--              result = inode->u.ext3_i.i_prealloc_block++;
--              inode->u.ext3_i.i_prealloc_count--;
-+              result = ei->i_prealloc_block++;
-+              ei->i_prealloc_count--;
-               /* Writer: end */
-               ext3_debug ("preallocation hit (%lu/%lu).\n",
-                           ++alloc_hits, ++alloc_attempts);
-@@ -259,8 +262,8 @@ static int ext3_alloc_block (handle_t *h
-                           alloc_hits, ++alloc_attempts);
-               if (S_ISREG(inode->i_mode))
-                       result = ext3_new_block (inode, goal, 
--                               &inode->u.ext3_i.i_prealloc_count,
--                               &inode->u.ext3_i.i_prealloc_block, err);
-+                               &ei->i_prealloc_count,
-+                               &ei->i_prealloc_block, err);
-               else
-                       result = ext3_new_block (inode, goal, 0, 0, err);
-               /*
-@@ -394,7 +397,7 @@ static Indirect *ext3_get_branch(struct 
-       *err = 0;
-       /* i_data is not going away, no lock needed */
--      add_chain (chain, NULL, inode->u.ext3_i.i_data + *offsets);
-+      add_chain (chain, NULL, EXT3_I(inode)->i_data + *offsets);
-       if (!p->key)
-               goto no_block;
-       while (--depth) {
-@@ -437,7 +440,8 @@ no_block:
- static inline unsigned long ext3_find_near(struct inode *inode, Indirect *ind)
- {
--      u32 *start = ind->bh ? (u32*) ind->bh->b_data : inode->u.ext3_i.i_data;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+      u32 *start = ind->bh ? (u32*) ind->bh->b_data : ei->i_data;
-       u32 *p;
-       /* Try to find previous block */
-@@ -453,9 +456,8 @@ static inline unsigned long ext3_find_ne
-        * It is going to be refered from inode itself? OK, just put it into
-        * the same cylinder group then.
-        */
--      return (inode->u.ext3_i.i_block_group * 
--              EXT3_BLOCKS_PER_GROUP(inode->i_sb)) +
--             le32_to_cpu(inode->i_sb->u.ext3_sb.s_es->s_first_data_block);
-+      return (ei->i_block_group * EXT3_BLOCKS_PER_GROUP(inode->i_sb)) +
-+             le32_to_cpu(EXT3_SB(inode->i_sb)->s_es->s_first_data_block);
- }
- /**
-@@ -474,14 +477,15 @@
- static int ext3_find_goal(struct inode *inode, long block, Indirect chain[4],
-                         Indirect *partial, unsigned long *goal)
- {
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       /* Writer: ->i_next_alloc* */
--      if (block == inode->u.ext3_i.i_next_alloc_block + 1) {
--              inode->u.ext3_i.i_next_alloc_block++;
--              inode->u.ext3_i.i_next_alloc_goal++;
-+      if (block == ei->i_next_alloc_block + 1) {
-+              ei->i_next_alloc_block++;
-+              ei->i_next_alloc_goal++;
-       }
- #ifdef SEARCH_FROM_ZERO
--      inode->u.ext3_i.i_next_alloc_block = 0;
--      inode->u.ext3_i.i_next_alloc_goal = 0;
-+      ei->i_next_alloc_block = 0;
-+      ei->i_next_alloc_goal = 0;
- #endif
-       /* Writer: end */
-       /* Reader: pointers, ->i_next_alloc* */
-@@ -490,8 +493,8 @@ static int ext3_find_goal(struct inode *
-                * try the heuristic for sequential allocation,
-                * failing that at least try to get decent locality.
-                */
--              if (block == inode->u.ext3_i.i_next_alloc_block)
--                      *goal = inode->u.ext3_i.i_next_alloc_goal;
-+              if (block == ei->i_next_alloc_block)
-+                      *goal = ei->i_next_alloc_goal;
-               if (!*goal)
-                       *goal = ext3_find_near(inode, partial);
- #ifdef SEARCH_FROM_ZERO
-@@ -619,6 +621,7 @@
- {
-       int i;
-       int err = 0;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       /*
-        * If we're splicing into a [td]indirect block (as opposed to the
-@@ -641,11 +644,11 @@ static int ext3_splice_branch(handle_t *
-       /* That's it */
-       *where->p = where->key;
--      inode->u.ext3_i.i_next_alloc_block = block;
--      inode->u.ext3_i.i_next_alloc_goal = le32_to_cpu(where[num-1].key);
-+      ei->i_next_alloc_block = block;
-+      ei->i_next_alloc_goal = le32_to_cpu(where[num-1].key);
- #ifdef SEARCH_FROM_ZERO
--      inode->u.ext3_i.i_next_alloc_block = 0;
--      inode->u.ext3_i.i_next_alloc_goal = 0;
-+      ei->i_next_alloc_block = 0;
-+      ei->i_next_alloc_goal = 0;
- #endif
-       /* Writer: end */
-@@ -729,6 +732,7 @@
-       unsigned long goal;
-       int left;
-       int depth = ext3_block_to_path(inode, iblock, offsets);
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       loff_t new_size;
-       J_ASSERT(handle != NULL || create == 0);
-@@ -782,7 +785,7 @@ out:
-       /*
-        * Block out ext3_truncate while we alter the tree
-        */
--      down_read(&inode->u.ext3_i.truncate_sem);
-+      down_read(&ei->truncate_sem);
-       err = ext3_alloc_branch(handle, inode, left, goal,
-                                       offsets+(partial-chain), partial);
-@@ -794,7 +797,7 @@ out:
-       if (!err)
-               err = ext3_splice_branch(handle, inode, iblock, chain,
-                                        partial, left);
--      up_read(&inode->u.ext3_i.truncate_sem);
-+      up_read(&ei->truncate_sem);
-       if (err == -EAGAIN)
-               goto changed;
-       if (err)
-@@ -807,8 +810,8 @@ out:
-        * truncate is in progress.  It is racy between multiple parallel
-        * instances of get_block, but we have the BKL.
-        */
--      if (new_size > inode->u.ext3_i.i_disksize)
--              inode->u.ext3_i.i_disksize = new_size;
-+      if (new_size > ei->i_disksize)
-+              ei->i_disksize = new_size;
-       bh_result->b_state |= (1UL << BH_New);
-       goto got_it;
-@@ -921,7 +924,7 @@ struct buffer_head *ext3_bread(handle_t 
-               struct buffer_head *tmp_bh;
-               for (i = 1;
--                   inode->u.ext3_i.i_prealloc_count &&
-+                   EXT3_I(inode)->i_prealloc_count &&
-                    i < EXT3_SB(inode->i_sb)->s_es->s_prealloc_dir_blocks;
-                    i++) {
-                       /*
-@@ -1131,8 +1134,8 @@ static int ext3_commit_write(struct file
-                       kunmap(page);
-               }
-       }
--      if (inode->i_size > inode->u.ext3_i.i_disksize) {
--              inode->u.ext3_i.i_disksize = inode->i_size;
-+      if (inode->i_size > EXT3_I(inode)->i_disksize) {
-+              EXT3_I(inode)->i_disksize = inode->i_size;
-               ret2 = ext3_mark_inode_dirty(handle, inode);
-               if (!ret) 
-                       ret = ret2;
-@@ -1832,7 +1835,8 @@ static void ext3_free_branches(handle_t 
- void ext3_truncate(struct inode * inode)
- {
-       handle_t *handle;
--      u32 *i_data = inode->u.ext3_i.i_data;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+      u32 *i_data = EXT3_I(inode)->i_data;
-       int addr_per_block = EXT3_ADDR_PER_BLOCK(inode->i_sb);
-       int offsets[4];
-       Indirect chain[4];
-@@ -1884,13 +1887,13 @@ void ext3_truncate(struct inode * inode)
-        * on-disk inode. We do this via i_disksize, which is the value which
-        * ext3 *really* writes onto the disk inode.
-        */
--      inode->u.ext3_i.i_disksize = inode->i_size;
-+      ei->i_disksize = inode->i_size;
-       /*
-        * From here we block out all ext3_get_block() callers who want to
-        * modify the block allocation tree.
-        */
--      down_write(&inode->u.ext3_i.truncate_sem);
-+      down_write(&ei->truncate_sem);
-       if (n == 1) {           /* direct blocks */
-               ext3_free_data(handle, inode, NULL, i_data+offsets[0],
-@@ -1954,7 +1957,7 @@ do_indirects:
-               case EXT3_TIND_BLOCK:
-                       ;
-       }
--      up_write(&inode->u.ext3_i.truncate_sem);
-+      up_write(&ei->truncate_sem);
-       inode->i_mtime = inode->i_ctime = CURRENT_TIME;
-       ext3_mark_inode_dirty(handle, inode);
-@@ -1983,6 +1986,8 @@ out_stop:
- int ext3_get_inode_loc (struct inode *inode, struct ext3_iloc *iloc)
- {
-+      struct super_block *sb = inode->i_sb;
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-       struct buffer_head *bh = 0;
-       unsigned long block;
-       unsigned long block_group;
-@@ -1997,23 +2010,19 @@ int ext3_get_inode_loc (struct inode *in
-               inode->i_ino != EXT3_JOURNAL_INO &&
--              inode->i_ino < EXT3_FIRST_INO(inode->i_sb)) ||
--              inode->i_ino > le32_to_cpu(
--                      inode->i_sb->u.ext3_sb.s_es->s_inodes_count)) {
--              ext3_error (inode->i_sb, "ext3_get_inode_loc",
--                          "bad inode number: %lu", inode->i_ino);
-+              inode->i_ino < EXT3_FIRST_INO(sb)) ||
-+              inode->i_ino > le32_to_cpu(sbi->s_es->s_inodes_count)) {
-+              ext3_error (sb, __FUNCTION__, "bad inode #%lu", inode->i_ino);
-               goto bad_inode;
-       }
--      block_group = (inode->i_ino - 1) / EXT3_INODES_PER_GROUP(inode->i_sb);
--      if (block_group >= inode->i_sb->u.ext3_sb.s_groups_count) {
--              ext3_error (inode->i_sb, "ext3_get_inode_loc",
--                          "group >= groups count");
-+      block_group = (inode->i_ino - 1) / sbi->s_inodes_per_group;
-+      if (block_group >= sbi->s_groups_count) {
-+              ext3_error(sb, __FUNCTION__, "group >= groups count");
-               goto bad_inode;
-       }
--      group_desc = block_group >> EXT3_DESC_PER_BLOCK_BITS(inode->i_sb);
--      desc = block_group & (EXT3_DESC_PER_BLOCK(inode->i_sb) - 1);
--      bh = inode->i_sb->u.ext3_sb.s_group_desc[group_desc];
-+      group_desc = block_group >> sbi->s_desc_per_block_bits;
-+      desc = block_group & (sbi->s_desc_per_block - 1);
-+      bh = sbi->s_group_desc[group_desc];
-       if (!bh) {
--              ext3_error (inode->i_sb, "ext3_get_inode_loc",
--                          "Descriptor not loaded");
-+              ext3_error(sb, __FUNCTION__, "Descriptor not loaded");
-               goto bad_inode;
-       }
-@@ -2021,17 +2022,17 @@ int ext3_get_inode_loc (struct inode *in
-       /*
-        * Figure out the offset within the block group inode table
-        */
--      offset = ((inode->i_ino - 1) % EXT3_INODES_PER_GROUP(inode->i_sb)) *
--              EXT3_INODE_SIZE(inode->i_sb);
-+      offset = ((inode->i_ino - 1) % sbi->s_inodes_per_group) *
-+              sbi->s_inode_size;
-       block = le32_to_cpu(gdp[desc].bg_inode_table) +
--              (offset >> EXT3_BLOCK_SIZE_BITS(inode->i_sb));
--      if (!(bh = sb_bread(inode->i_sb, block))) {
--              ext3_error (inode->i_sb, "ext3_get_inode_loc",
-+              (offset >> EXT3_BLOCK_SIZE_BITS(sb));
-+      if (!(bh = sb_bread(sb, block))) {
-+              ext3_error (sb, __FUNCTION__,
-                           "unable to read inode block - "
-                           "inode=%lu, block=%lu", inode->i_ino, block);
-               goto bad_inode;
-       }
--      offset &= (EXT3_BLOCK_SIZE(inode->i_sb) - 1);
-+      offset &= (EXT3_BLOCK_SIZE(sb) - 1);
-       iloc->bh = bh;
-       iloc->raw_inode = (struct ext3_inode *) (bh->b_data + offset);
-@@ -2047,6 +2048,7 @@ void ext3_read_inode(struct inode * inod
- {
-       struct ext3_iloc iloc;
-       struct ext3_inode *raw_inode;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       struct buffer_head *bh;
-       int block;
-       
-@@ -2054,7 +2056,7 @@ void ext3_read_inode(struct inode * inod
-               goto bad_inode;
-       bh = iloc.bh;
-       raw_inode = iloc.raw_inode;
--      init_rwsem(&inode->u.ext3_i.truncate_sem);
-+      init_rwsem(&ei->truncate_sem);
-       inode->i_mode = le16_to_cpu(raw_inode->i_mode);
-       inode->i_uid = (uid_t)le16_to_cpu(raw_inode->i_uid_low);
-       inode->i_gid = (gid_t)le16_to_cpu(raw_inode->i_gid_low);
-@@ -2067,7 +2069,7 @@ void ext3_read_inode(struct inode * inod
-       inode->i_atime = le32_to_cpu(raw_inode->i_atime);
-       inode->i_ctime = le32_to_cpu(raw_inode->i_ctime);
-       inode->i_mtime = le32_to_cpu(raw_inode->i_mtime);
--      inode->u.ext3_i.i_dtime = le32_to_cpu(raw_inode->i_dtime);
-+      ei->i_dtime = le32_to_cpu(raw_inode->i_dtime);
-       /* We now have enough fields to check if the inode was active or not.
-        * This is needed because nfsd might try to access dead inodes
-        * the test is that same one that e2fsck uses
-@@ -2075,7 +2077,7 @@ void ext3_read_inode(struct inode * inod
-        */
-       if (inode->i_nlink == 0) {
-               if (inode->i_mode == 0 ||
--                  !(inode->i_sb->u.ext3_sb.s_mount_state & EXT3_ORPHAN_FS)) {
-+                  !(EXT3_SB(inode->i_sb)->s_mount_state & EXT3_ORPHAN_FS)) {
-                       /* this inode is deleted */
-                       brelse (bh);
-                       goto bad_inode;
-@@ -2090,33 +2092,33 @@ void ext3_read_inode(struct inode * inod
-                                        * size */  
-       inode->i_blocks = le32_to_cpu(raw_inode->i_blocks);
-       inode->i_version = ++event;
--      inode->u.ext3_i.i_flags = le32_to_cpu(raw_inode->i_flags);
-+      ei->i_flags = le32_to_cpu(raw_inode->i_flags);
- #ifdef EXT3_FRAGMENTS
--      inode->u.ext3_i.i_faddr = le32_to_cpu(raw_inode->i_faddr);
--      inode->u.ext3_i.i_frag_no = raw_inode->i_frag;
--      inode->u.ext3_i.i_frag_size = raw_inode->i_fsize;
-+      ei->i_faddr = le32_to_cpu(raw_inode->i_faddr);
-+      ei->i_frag_no = raw_inode->i_frag;
-+      ei->i_frag_size = raw_inode->i_fsize;
- #endif
--      inode->u.ext3_i.i_file_acl = le32_to_cpu(raw_inode->i_file_acl);
-+      ei->i_file_acl = le32_to_cpu(raw_inode->i_file_acl);
-       if (!S_ISREG(inode->i_mode)) {
--              inode->u.ext3_i.i_dir_acl = le32_to_cpu(raw_inode->i_dir_acl);
-+              ei->i_dir_acl = le32_to_cpu(raw_inode->i_dir_acl);
-       } else {
-               inode->i_size |=
-                       ((__u64)le32_to_cpu(raw_inode->i_size_high)) << 32;
-       }
--      inode->u.ext3_i.i_disksize = inode->i_size;
-+      ei->i_disksize = inode->i_size;
-       inode->i_generation = le32_to_cpu(raw_inode->i_generation);
- #ifdef EXT3_PREALLOCATE
--      inode->u.ext3_i.i_prealloc_count = 0;
-+      ei->i_prealloc_count = 0;
- #endif
--      inode->u.ext3_i.i_block_group = iloc.block_group;
-+      ei->i_block_group = iloc.block_group;
-       /*
-        * NOTE! The in-memory inode i_data array is in little-endian order
-        * even on big-endian machines: we do NOT byteswap the block numbers!
-        */
-       for (block = 0; block < EXT3_N_BLOCKS; block++)
--              inode->u.ext3_i.i_data[block] = iloc.raw_inode->i_block[block];
--      INIT_LIST_HEAD(&inode->u.ext3_i.i_orphan);
-+              ei->i_data[block] = iloc.raw_inode->i_block[block];
-+      INIT_LIST_HEAD(&ei->i_orphan);
-       brelse (iloc.bh);
-@@ -2143,17 +2145,17 @@ void ext3_read_inode(struct inode * inod
-       /* inode->i_attr_flags = 0;                             unused */
--      if (inode->u.ext3_i.i_flags & EXT3_SYNC_FL) {
-+      if (ei->i_flags & EXT3_SYNC_FL) {
-               /* inode->i_attr_flags |= ATTR_FLAG_SYNCRONOUS; unused */
-               inode->i_flags |= S_SYNC;
-       }
--      if (inode->u.ext3_i.i_flags & EXT3_APPEND_FL) {
-+      if (ei->i_flags & EXT3_APPEND_FL) {
-               /* inode->i_attr_flags |= ATTR_FLAG_APPEND;     unused */
-               inode->i_flags |= S_APPEND;
-       }
--      if (inode->u.ext3_i.i_flags & EXT3_IMMUTABLE_FL) {
-+      if (ei->i_flags & EXT3_IMMUTABLE_FL) {
-               /* inode->i_attr_flags |= ATTR_FLAG_IMMUTABLE;  unused */
-               inode->i_flags |= S_IMMUTABLE;
-       }
--      if (inode->u.ext3_i.i_flags & EXT3_NOATIME_FL) {
-+      if (ei->i_flags & EXT3_NOATIME_FL) {
-               /* inode->i_attr_flags |= ATTR_FLAG_NOATIME;    unused */
-               inode->i_flags |= S_NOATIME;
-       }
-@@ -2175,6 +2177,7 @@ static int ext3_do_update_inode(handle_t
-                               struct ext3_iloc *iloc)
- {
-       struct ext3_inode *raw_inode = iloc->raw_inode;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       struct buffer_head *bh = iloc->bh;
-       int err = 0, rc, block;
-@@ -2192,7 +2195,7 @@ static int ext3_do_update_inode(handle_t
-  * Fix up interoperability with old kernels. Otherwise, old inodes get
-  * re-used with the upper 16 bits of the uid/gid intact
-  */
--              if(!inode->u.ext3_i.i_dtime) {
-+              if(!ei->i_dtime) {
-                       raw_inode->i_uid_high =
-                               cpu_to_le16(high_16_bits(inode->i_uid));
-                       raw_inode->i_gid_high =
-@@ -2210,34 +2213,33 @@ static int ext3_do_update_inode(handle_t
-               raw_inode->i_gid_high = 0;
-       }
-       raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
--      raw_inode->i_size = cpu_to_le32(inode->u.ext3_i.i_disksize);
-+      raw_inode->i_size = cpu_to_le32(ei->i_disksize);
-       raw_inode->i_atime = cpu_to_le32(inode->i_atime);
-       raw_inode->i_ctime = cpu_to_le32(inode->i_ctime);
-       raw_inode->i_mtime = cpu_to_le32(inode->i_mtime);
-       raw_inode->i_blocks = cpu_to_le32(inode->i_blocks);
--      raw_inode->i_dtime = cpu_to_le32(inode->u.ext3_i.i_dtime);
--      raw_inode->i_flags = cpu_to_le32(inode->u.ext3_i.i_flags);
-+      raw_inode->i_dtime = cpu_to_le32(ei->i_dtime);
-+      raw_inode->i_flags = cpu_to_le32(ei->i_flags);
- #ifdef EXT3_FRAGMENTS
--      raw_inode->i_faddr = cpu_to_le32(inode->u.ext3_i.i_faddr);
--      raw_inode->i_frag = inode->u.ext3_i.i_frag_no;
--      raw_inode->i_fsize = inode->u.ext3_i.i_frag_size;
-+      raw_inode->i_faddr = cpu_to_le32(ei->i_faddr);
-+      raw_inode->i_frag = ei->i_frag_no;
-+      raw_inode->i_fsize = ei->i_frag_size;
- #else
-       /* If we are not tracking these fields in the in-memory inode,
-        * then preserve them on disk, but still initialise them to zero
-        * for new inodes. */
--      if (EXT3_I(inode)->i_state & EXT3_STATE_NEW) {
-+      if (ei->i_state & EXT3_STATE_NEW) {
-               raw_inode->i_faddr = 0;
-               raw_inode->i_frag = 0;
-               raw_inode->i_fsize = 0;
-       }
- #endif
--      raw_inode->i_file_acl = cpu_to_le32(inode->u.ext3_i.i_file_acl);
-+      raw_inode->i_file_acl = cpu_to_le32(ei->i_file_acl);
-       if (!S_ISREG(inode->i_mode)) {
--              raw_inode->i_dir_acl = cpu_to_le32(inode->u.ext3_i.i_dir_acl);
-+              raw_inode->i_dir_acl = cpu_to_le32(ei->i_dir_acl);
-       } else {
--              raw_inode->i_size_high =
--                      cpu_to_le32(inode->u.ext3_i.i_disksize >> 32);
--              if (inode->u.ext3_i.i_disksize > 0x7fffffffULL) {
-+              raw_inode->i_size_high = cpu_to_le32(ei->i_disksize >> 32);
-+              if (ei->i_disksize > MAX_NON_LFS) {
-                       struct super_block *sb = inode->i_sb;
-                       if (!EXT3_HAS_RO_COMPAT_FEATURE(sb,
-                                       EXT3_FEATURE_RO_COMPAT_LARGE_FILE) ||
-@@ -2247,7 +2249,7 @@ static int ext3_do_update_inode(handle_t
-                               * created, add a flag to the superblock.
-                               */
-                               err = ext3_journal_get_write_access(handle,
--                                              sb->u.ext3_sb.s_sbh);
-+                                              EXT3_SB(sb)->s_sbh);
-                               if (err)
-                                       goto out_brelse;
-                               ext3_update_dynamic_rev(sb);
-@@ -2256,7 +2258,7 @@ static int ext3_do_update_inode(handle_t
-                               sb->s_dirt = 1;
-                               handle->h_sync = 1;
-                               err = ext3_journal_dirty_metadata(handle,
--                                              sb->u.ext3_sb.s_sbh);
-+                                              EXT3_SB(sb)->s_sbh);
-                       }
-               }
-       }
-@@ -2265,13 +2267,13 @@ static int ext3_do_update_inode(handle_t
-               raw_inode->i_block[0] =
-                       cpu_to_le32(kdev_t_to_nr(inode->i_rdev));
-       else for (block = 0; block < EXT3_N_BLOCKS; block++)
--              raw_inode->i_block[block] = inode->u.ext3_i.i_data[block];
-+              raw_inode->i_block[block] = ei->i_data[block];
-       BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-       rc = ext3_journal_dirty_metadata(handle, bh);
-       if (!err)
-               err = rc;
--      EXT3_I(inode)->i_state &= ~EXT3_STATE_NEW;
-+      ei->i_state &= ~EXT3_STATE_NEW;
- out_brelse:
-       brelse (bh);
-@@ -2379,7 +2381,7 @@ int ext3_setattr(struct dentry *dentry, 
-               }
-               
-               error = ext3_orphan_add(handle, inode);
--              inode->u.ext3_i.i_disksize = attr->ia_size;
-+              EXT3_I(inode)->i_disksize = attr->ia_size;
-               rc = ext3_mark_inode_dirty(handle, inode);
-               if (!error)
-                       error = rc;
-@@ -2622,9 +2624,9 @@ int ext3_change_inode_journal_flag(struc
-        */
-       if (val)
--              inode->u.ext3_i.i_flags |= EXT3_JOURNAL_DATA_FL;
-+              EXT3_I(inode)->i_flags |= EXT3_JOURNAL_DATA_FL;
-       else
--              inode->u.ext3_i.i_flags &= ~EXT3_JOURNAL_DATA_FL;
-+              EXT3_I(inode)->i_flags &= ~EXT3_JOURNAL_DATA_FL;
-       journal_unlock_updates(journal);
---- ./fs/ext3/ioctl.c.orig     Fri Apr 12 10:27:49 2002
-+++ ./fs/ext3/ioctl.c  Tue May  7 15:20:52 2002
-@@ -18,13 +18,14 @@
- int ext3_ioctl (struct inode * inode, struct file * filp, unsigned int cmd,
-               unsigned long arg)
- {
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       unsigned int flags;
-       ext3_debug ("cmd = %u, arg = %lu\n", cmd, arg);
-       switch (cmd) {
-       case EXT3_IOC_GETFLAGS:
--              flags = inode->u.ext3_i.i_flags & EXT3_FL_USER_VISIBLE;
-+              flags = ei->i_flags & EXT3_FL_USER_VISIBLE;
-               return put_user(flags, (int *) arg);
-       case EXT3_IOC_SETFLAGS: {
-               handle_t *handle = NULL;
-@@ -42,7 +42,7 @@ int ext3_ioctl (struct inode * inode, st
-               if (get_user(flags, (int *) arg))
-                       return -EFAULT;
--              oldflags = inode->u.ext3_i.i_flags;
-+              oldflags = ei->i_flags;
-               /* The JOURNAL_DATA flag is modifiable only by root */
-               jflag = flags & EXT3_JOURNAL_DATA_FL;
-@@ -79,7 +79,7 @@ int ext3_ioctl (struct inode * inode, st
-               
-               flags = flags & EXT3_FL_USER_MODIFIABLE;
-               flags |= oldflags & ~EXT3_FL_USER_MODIFIABLE;
--              inode->u.ext3_i.i_flags = flags;
-+              ei->i_flags = flags;
-               if (flags & EXT3_SYNC_FL)
-                       inode->i_flags |= S_SYNC;
-@@ -155,12 +155,12 @@ flags_err:
-                       int ret = 0;
-                       set_current_state(TASK_INTERRUPTIBLE);
--                      add_wait_queue(&sb->u.ext3_sb.ro_wait_queue, &wait);
--                      if (timer_pending(&sb->u.ext3_sb.turn_ro_timer)) {
-+                      add_wait_queue(&EXT3_SB(sb)->ro_wait_queue, &wait);
-+                      if (timer_pending(&EXT3_SB(sb)->turn_ro_timer)) {
-                               schedule();
-                               ret = 1;
-                       }
--                      remove_wait_queue(&sb->u.ext3_sb.ro_wait_queue, &wait);
-+                      remove_wait_queue(&EXT3_SB(sb)->ro_wait_queue, &wait);
-                       return ret;
-               }
- #endif
---- ./fs/ext3/namei.c.orig     Fri Apr 12 10:27:49 2002
-+++ ./fs/ext3/namei.c  Tue May  7 16:05:51 2002
-@@ -636,7 +636,7 @@ static struct buffer_head * ext3_find_en
-       }
-       
-       nblocks = dir->i_size >> EXT3_BLOCK_SIZE_BITS(sb);
--      start = dir->u.ext3_i.i_dir_start_lookup;
-+      start = EXT3_I(dir)->i_dir_start_lookup;
-       if (start >= nblocks)
-               start = 0;
-       block = start;
-@@ -677,7 +677,7 @@ restart:
-               i = search_dirblock(bh, dir, dentry,
-                           block << EXT3_BLOCK_SIZE_BITS(sb), res_dir);
-               if (i == 1) {
--                      dir->u.ext3_i.i_dir_start_lookup = block;
-+                      EXT3_I(dir)->i_dir_start_lookup = block;
-                       ret = bh;
-                       goto cleanup_and_exit;
-               } else {
-@@ -1419,7 +1419,7 @@ int ext3_orphan_add(handle_t *handle, st
-       int err = 0, rc;
-       
-       lock_super(sb);
--      if (!list_empty(&inode->u.ext3_i.i_orphan))
-+      if (!list_empty(&EXT3_I(inode)->i_orphan))
-               goto out_unlock;
-       /* Orphan handling is only valid for files with data blocks
-@@ -1430,8 +1430,8 @@ int ext3_orphan_add(handle_t *handle, st
-       J_ASSERT ((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
-               S_ISLNK(inode->i_mode)) || inode->i_nlink == 0);
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get_write_access");
--      err = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-       if (err)
-               goto out_unlock;
-       
-@@ -1442,7 +1442,7 @@ int ext3_orphan_add(handle_t *handle, st
-       /* Insert this inode at the head of the on-disk orphan list... */
-       NEXT_ORPHAN(inode) = le32_to_cpu(EXT3_SB(sb)->s_es->s_last_orphan);
-       EXT3_SB(sb)->s_es->s_last_orphan = cpu_to_le32(inode->i_ino);
--      err = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
-+      err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-       rc = ext3_mark_iloc_dirty(handle, inode, &iloc);
-       if (!err)
-               err = rc;
-@@ -1456,7 +1456,7 @@ int ext3_orphan_add(handle_t *handle, st
-        * This is safe: on error we're going to ignore the orphan list
-        * anyway on the next recovery. */
-       if (!err)
--              list_add(&inode->u.ext3_i.i_orphan, &EXT3_SB(sb)->s_orphan);
-+              list_add(&EXT3_I(inode)->i_orphan, &EXT3_SB(sb)->s_orphan);
-       jbd_debug(4, "superblock will point to %ld\n", inode->i_ino);
-       jbd_debug(4, "orphan inode %ld will point to %d\n",
-@@ -714,25 +770,25 @@
- int ext3_orphan_del(handle_t *handle, struct inode *inode)
- {
-       struct list_head *prev;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       struct ext3_sb_info *sbi;
-       unsigned long ino_next;
-       struct ext3_iloc iloc;
-       int err = 0;
-       lock_super(inode->i_sb);
--      if (list_empty(&inode->u.ext3_i.i_orphan)) {
-+      if (list_empty(&ei->i_orphan)) {
-               unlock_super(inode->i_sb);
-               return 0;
-       }
-       ino_next = NEXT_ORPHAN(inode);
--      prev = inode->u.ext3_i.i_orphan.prev;
-+      prev = ei->i_orphan.prev;
-       sbi = EXT3_SB(inode->i_sb);
-       jbd_debug(4, "remove inode %lu from orphan list\n", inode->i_ino);
--      list_del(&inode->u.ext3_i.i_orphan);
--      INIT_LIST_HEAD(&inode->u.ext3_i.i_orphan);
-+      list_del_init(&ei->i_orphan);
-       /* If we're on an error path, we may not have a valid
-        * transaction handle with which to update the orphan list on
-@@ -1520,8 +1520,7 @@ int ext3_orphan_del(handle_t *handle, st
-               err = ext3_journal_dirty_metadata(handle, sbi->s_sbh);
-       } else {
-               struct ext3_iloc iloc2;
--              struct inode *i_prev =
--                      list_entry(prev, struct inode, u.ext3_i.i_orphan);
-+              struct inode *i_prev = orphan_list_entry(prev);
-               jbd_debug(4, "orphan inode %lu will point to %lu\n",
-                         i_prev->i_ino, ino_next);
-@@ -1695,10 +1695,10 @@ static int ext3_symlink (struct inode * 
-                       goto out_no_entry;
-       } else {
-               inode->i_op = &ext3_fast_symlink_inode_operations;
--              memcpy((char*)&inode->u.ext3_i.i_data,symname,l);
-+              memcpy((char*)&EXT3_I(inode)->i_data,symname,l);
-               inode->i_size = l-1;
-       }
--      inode->u.ext3_i.i_disksize = inode->i_size;
-+      EXT3_I(inode)->i_disksize = inode->i_size;
-       err = ext3_add_nondir(handle, dentry, inode);
-       ext3_mark_inode_dirty(handle, inode);
- out_stop:
---- ./fs/ext3/super.c.orig     Fri Apr 12 10:27:49 2002
-+++ ./fs/ext3/super.c  Tue May  7 16:05:44 2002
-@@ -121,7 +121,7 @@ static int ext3_error_behaviour(struct s
-       /* If no overrides were specified on the mount, then fall back
-        * to the default behaviour set in the filesystem's superblock
-        * on disk. */
--      switch (le16_to_cpu(sb->u.ext3_sb.s_es->s_errors)) {
-+      switch (le16_to_cpu(EXT3_SB(sb)->s_es->s_errors)) {
-       case EXT3_ERRORS_PANIC:
-               return EXT3_ERRORS_PANIC;
-       case EXT3_ERRORS_RO:
-@@ -269,9 +269,9 @@ void ext3_abort (struct super_block * sb
-               return;
-       
-       printk (KERN_CRIT "Remounting filesystem read-only\n");
--      sb->u.ext3_sb.s_mount_state |= EXT3_ERROR_FS;
-+      EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS;
-       sb->s_flags |= MS_RDONLY;
--      sb->u.ext3_sb.s_mount_opt |= EXT3_MOUNT_ABORT;
-+      EXT3_SB(sb)->s_mount_opt |= EXT3_MOUNT_ABORT;
-       journal_abort(EXT3_SB(sb)->s_journal, -EIO);
- }
-@@ -377,8 +377,6 @@ static int ext3_blkdev_remove(struct ext3
-       return ret;
- }
--#define orphan_list_entry(l) list_entry((l), struct inode, u.ext3_i.i_orphan)
--
- static void dump_orphan_list(struct super_block *sb, struct ext3_sb_info *sbi)
- {
-       struct list_head *l;
-@@ -818,7 +818,7 @@ static void ext3_orphan_cleanup (struct 
-               sb->s_flags &= ~MS_RDONLY;
-       }
--      if (sb->u.ext3_sb.s_mount_state & EXT3_ERROR_FS) {
-+      if (EXT3_SB(sb)->s_mount_state & EXT3_ERROR_FS) {
-               if (es->s_last_orphan)
-                       jbd_debug(1, "Errors on filesystem, "
-                                 "clearing orphan list.\n");
-@@ -1463,12 +1463,14 @@ static void ext3_commit_super (struct su
-                              struct ext3_super_block * es,
-                              int sync)
- {
-+      struct buffer_head *sbh = EXT3_SB(sb)->s_sbh;
-+
-       es->s_wtime = cpu_to_le32(CURRENT_TIME);
--      BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "marking dirty");
--      mark_buffer_dirty(sb->u.ext3_sb.s_sbh);
-+      BUFFER_TRACE(sbh, "marking dirty");
-+      mark_buffer_dirty(sbh);
-       if (sync) {
--              ll_rw_block(WRITE, 1, &sb->u.ext3_sb.s_sbh);
--              wait_on_buffer(sb->u.ext3_sb.s_sbh);
-+              ll_rw_block(WRITE, 1, &sbh);
-+              wait_on_buffer(sbh);
-       }
- }
-@@ -1519,7 +1521,7 @@ static void ext3_clear_journal_err(struc
-               ext3_warning(sb, __FUNCTION__, "Marking fs in need of "
-                            "filesystem check.");
-               
--              sb->u.ext3_sb.s_mount_state |= EXT3_ERROR_FS;
-+              EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS;
-               es->s_state |= cpu_to_le16(EXT3_ERROR_FS);
-               ext3_commit_super (sb, es, 1);
---- ./fs/ext3/symlink.c.orig   Fri Apr 12 10:27:49 2002
-+++ ./fs/ext3/symlink.c        Tue May  7 15:25:39 2002
-@@ -23,13 +23,13 @@
- static int ext3_readlink(struct dentry *dentry, char *buffer, int buflen)
- {
--      char *s = (char *)dentry->d_inode->u.ext3_i.i_data;
--      return vfs_readlink(dentry, buffer, buflen, s);
-+      struct ext3_inode_info *ei = EXT3_I(dentry->d_inode);
-+      return vfs_readlink(dentry, buffer, buflen, (char *)ei->i_data);
- }
- static int ext3_follow_link(struct dentry *dentry, struct nameidata *nd)
- {
--      char *s = (char *)dentry->d_inode->u.ext3_i.i_data;
--      return vfs_follow_link(nd, s);
-+      struct ext3_inode_info *ei = EXT3_I(dentry->d_inode);
-+      return vfs_follow_link(nd, (char*)ei->i_data);
- }
---- ./include/linux/ext3_fs.h.orig     Tue Apr 16 14:27:25 2002
-+++ ./include/linux/ext3_fs.h  Tue May  7 16:47:36 2002
-@@ -84,22 +84,25 @@
- #define EXT3_MIN_BLOCK_SIZE           1024
- #define       EXT3_MAX_BLOCK_SIZE             4096
- #define EXT3_MIN_BLOCK_LOG_SIZE                 10
-+
- #ifdef __KERNEL__
--# define EXT3_BLOCK_SIZE(s)           ((s)->s_blocksize)
--#else
--# define EXT3_BLOCK_SIZE(s)           (EXT3_MIN_BLOCK_SIZE << (s)->s_log_block_size)
--#endif
--#define       EXT3_ADDR_PER_BLOCK(s)          (EXT3_BLOCK_SIZE(s) / sizeof (__u32))
--#ifdef __KERNEL__
--# define EXT3_BLOCK_SIZE_BITS(s)      ((s)->s_blocksize_bits)
--#else
--# define EXT3_BLOCK_SIZE_BITS(s)      ((s)->s_log_block_size + 10)
--#endif
--#ifdef __KERNEL__
--#define       EXT3_ADDR_PER_BLOCK_BITS(s)     ((s)->u.ext3_sb.s_addr_per_block_bits)
--#define EXT3_INODE_SIZE(s)            ((s)->u.ext3_sb.s_inode_size)
--#define EXT3_FIRST_INO(s)             ((s)->u.ext3_sb.s_first_ino)
-+#define EXT3_SB(sb)   (&((sb)->u.ext3_sb))
-+#define EXT3_I(inode) (&((inode)->u.ext3_i))
-+
-+#define EXT3_BLOCK_SIZE(s)            ((s)->s_blocksize)
-+#define EXT3_BLOCK_SIZE_BITS(s)               ((s)->s_blocksize_bits)
-+#define       EXT3_ADDR_PER_BLOCK_BITS(s)     (EXT3_SB(s)->s_addr_per_block_bits)
-+#define EXT3_INODE_SIZE(s)            (EXT3_SB(s)->s_inode_size)
-+#define EXT3_FIRST_INO(s)             (EXT3_SB(s)->s_first_ino)
- #else
-+
-+/* Assume that user mode programs are passing in an ext3fs superblock, not
-+ * a kernel struct super_block.  This will allow us to call the feature-test
-+ * macros from user land. */
-+#define EXT3_SB(sb)   (sb)
-+
-+#define EXT3_BLOCK_SIZE(s)    (EXT3_MIN_BLOCK_SIZE << (s)->s_log_block_size)
-+#define EXT3_BLOCK_SIZE_BITS(s)       ((s)->s_log_block_size + 10)
- #define EXT3_INODE_SIZE(s)    (((s)->s_rev_level == EXT3_GOOD_OLD_REV) ? \
-                                EXT3_GOOD_OLD_INODE_SIZE : \
-                                (s)->s_inode_size)
-@@ -108,6 +110,7 @@
-                                EXT3_GOOD_OLD_FIRST_INO : \
-                                (s)->s_first_ino)
- #endif
-+#define EXT3_ADDR_PER_BLOCK(s)        (EXT3_BLOCK_SIZE(s) / sizeof (__u32))
- /*
-  * Macro-instructions used to manage fragments
-@@ -116,8 +120,8 @@
- #define       EXT3_MAX_FRAG_SIZE              4096
- #define EXT3_MIN_FRAG_LOG_SIZE                  10
- #ifdef __KERNEL__
--# define EXT3_FRAG_SIZE(s)            ((s)->u.ext3_sb.s_frag_size)
--# define EXT3_FRAGS_PER_BLOCK(s)      ((s)->u.ext3_sb.s_frags_per_block)
-+# define EXT3_FRAG_SIZE(s)            (EXT3_SB(s)->s_frag_size)
-+# define EXT3_FRAGS_PER_BLOCK(s)      (EXT3_SB(s)->s_frags_per_block)
- #else
- # define EXT3_FRAG_SIZE(s)            (EXT3_MIN_FRAG_SIZE << (s)->s_log_frag_size)
- # define EXT3_FRAGS_PER_BLOCK(s)      (EXT3_BLOCK_SIZE(s) / EXT3_FRAG_SIZE(s))
-@@ -163,15 +167,13 @@
- /*
-  * Macro-instructions used to manage group descriptors
-  */
-+# define EXT3_BLOCKS_PER_GROUP(s)     (EXT3_SB(s)->s_blocks_per_group)
-+# define EXT3_INODES_PER_GROUP(s)     (EXT3_SB(s)->s_inodes_per_group)
- #ifdef __KERNEL__
--# define EXT3_BLOCKS_PER_GROUP(s)     ((s)->u.ext3_sb.s_blocks_per_group)
--# define EXT3_DESC_PER_BLOCK(s)               ((s)->u.ext3_sb.s_desc_per_block)
--# define EXT3_INODES_PER_GROUP(s)     ((s)->u.ext3_sb.s_inodes_per_group)
--# define EXT3_DESC_PER_BLOCK_BITS(s)  ((s)->u.ext3_sb.s_desc_per_block_bits)
-+# define EXT3_DESC_PER_BLOCK(s)               (EXT3_SB(s)->s_desc_per_block)
-+# define EXT3_DESC_PER_BLOCK_BITS(s)  (EXT3_SB(s)->s_desc_per_block_bits)
- #else
--# define EXT3_BLOCKS_PER_GROUP(s)     ((s)->s_blocks_per_group)
- # define EXT3_DESC_PER_BLOCK(s)               (EXT3_BLOCK_SIZE(s) / sizeof (struct ext3_group_desc))
--# define EXT3_INODES_PER_GROUP(s)     ((s)->s_inodes_per_group)
- #endif
- /*
-@@ -344,7 +347,7 @@
- #ifndef _LINUX_EXT2_FS_H
- #define clear_opt(o, opt)             o &= ~EXT3_MOUNT_##opt
- #define set_opt(o, opt)                       o |= EXT3_MOUNT_##opt
--#define test_opt(sb, opt)             ((sb)->u.ext3_sb.s_mount_opt & \
-+#define test_opt(sb, opt)             (EXT3_SB(sb)->s_mount_opt & \
-                                        EXT3_MOUNT_##opt)
- #else
- #define EXT2_MOUNT_NOLOAD             EXT3_MOUNT_NOLOAD
-@@ -441,17 +443,11 @@
- /*EC*/        __u32   s_reserved[197];        /* Padding to the end of the block */
- };
--#ifdef __KERNEL__
--#define EXT3_SB(sb)   (&((sb)->u.ext3_sb))
--#define EXT3_I(inode) (&((inode)->u.ext3_i))
--#else
--/* Assume that user mode programs are passing in an ext3fs superblock, not
-- * a kernel struct super_block.  This will allow us to call the feature-test
-- * macros from user land. */
--#define EXT3_SB(sb)   (sb)
--#endif
--
--#define NEXT_ORPHAN(inode) (inode)->u.ext3_i.i_dtime
-+#define NEXT_ORPHAN(inode) EXT3_I(inode)->i_dtime
-+static inline struct inode *orphan_list_entry(struct list_head *l)
-+{
-+      return list_entry(l, struct inode, u.ext3_i.i_orphan);
-+}
- /*
-  * Codes for operating systems
---- ./include/linux/ext3_jbd.h.orig    Tue May  7 14:44:08 2002
-+++ ./include/linux/ext3_jbd.h Tue May  7 14:44:43 2002
-@@ -291,7 +291,7 @@
-               return 1;
-       if (test_opt(inode->i_sb, DATA_FLAGS) == EXT3_MOUNT_JOURNAL_DATA)
-               return 1;
--      if (inode->u.ext3_i.i_flags & EXT3_JOURNAL_DATA_FL)
-+      if (EXT3_I(inode)->i_flags & EXT3_JOURNAL_DATA_FL)
-               return 1;
-       return 0;
- }
diff --git a/lustre/kernel_patches/patches/ext3-compat-2.4.18-chaos.patch b/lustre/kernel_patches/patches/ext3-compat-2.4.18-chaos.patch
deleted file mode 100644 (file)
index 68a2244..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
- fs/ext3/namei.c |    3 ++-
- lib/rbtree.c    |    6 +++---
- 2 files changed, 5 insertions(+), 4 deletions(-)
-
---- linux-2.4.18-chaos-pdirops/fs/ext3/namei.c~ext3-compat-2.4.18-chaos        2003-09-23 13:13:10.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/fs/ext3/namei.c  2003-09-23 13:13:28.000000000 +0400
-@@ -28,6 +28,7 @@
- #include <linux/string.h>
- #include <linux/locks.h>
- #include <linux/quotaops.h>
-+#include <linux/slab.h>
- /*
-@@ -830,9 +831,9 @@ static int ext3_rmdir (struct inode * di
-        * recovery. */
-       inode->i_size = 0;
-       ext3_orphan_add(handle, inode);
--      ext3_mark_inode_dirty(handle, inode);
-       dir->i_nlink--;
-       inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
-+      ext3_mark_inode_dirty(handle, inode);
-       dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-       ext3_mark_inode_dirty(handle, dir);
---- linux-2.4.18-chaos-pdirops/lib/rbtree.c~ext3-compat-2.4.18-chaos   2003-07-28 17:52:20.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/lib/rbtree.c     2003-09-23 13:13:15.000000000 +0400
-@@ -219,6 +219,8 @@ static void __rb_erase_color(rb_node_t *
-               node->rb_color = RB_BLACK;
- }
-+EXPORT_SYMBOL_GPL(rb_insert_color);
-+
- void rb_erase(rb_node_t * node, rb_root_t * root)
- {
-       rb_node_t * child, * parent;
-@@ -292,6 +294,4 @@ void rb_erase(rb_node_t * node, rb_root_
-       if (color == RB_BLACK)
-               __rb_erase_color(child, parent, root);
- }
--
--EXPORT_SYMBOL_GPL(rb_insert_color);
--EXPORT_SYMBOL_GPL(rb_erase);
-+EXPORT_SYMBOL(rb_erase);
-
-_
diff --git a/lustre/kernel_patches/patches/ext3-delete_thread-2.4.18-2.patch b/lustre/kernel_patches/patches/ext3-delete_thread-2.4.18-2.patch
deleted file mode 100644 (file)
index 1e2295c..0000000
+++ /dev/null
@@ -1,474 +0,0 @@
- fs/ext3/file.c             |    4 
- fs/ext3/inode.c            |  112 +++++++++++++++++++++
- fs/ext3/super.c            |  231 +++++++++++++++++++++++++++++++++++++++++++++
- include/linux/ext3_fs.h    |    5 
- include/linux/ext3_fs_sb.h |   10 +
- 5 files changed, 362 insertions(+)
-
---- linux-2.4.18-chaos/fs/ext3/file.c~ext3-delete_thread-2.4.18-2      2003-09-16 23:34:07.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/file.c   2003-09-16 23:42:34.000000000 +0400
-@@ -124,7 +124,11 @@ struct file_operations ext3_file_operati
- };
- struct inode_operations ext3_file_inode_operations = {
-+#ifdef EXT3_DELETE_THREAD
-+      truncate:       ext3_truncate_thread,   /* BKL held */
-+#else
-       truncate:       ext3_truncate,          /* BKL held */
-+#endif
-       setattr:        ext3_setattr,           /* BKL held */
- };
---- linux-2.4.18-chaos/fs/ext3/inode.c~ext3-delete_thread-2.4.18-2     2003-09-16 23:39:37.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/inode.c  2003-09-16 23:42:34.000000000 +0400
-@@ -2041,6 +2041,118 @@ out_unlock:
-       return;         /* AKPM: return what? */
- }
-+#ifdef EXT3_DELETE_THREAD
-+/* Move blocks from to-be-truncated inode over to a new inode, and delete
-+ * that one from the delete thread instead.  This avoids a lot of latency
-+ * when truncating large files.
-+ *
-+ * If we have any problem deferring the truncate, just truncate it right away.
-+ * If we defer it, we also mark how many blocks it would free, so that we
-+ * can keep the statfs data correct, and we know if we should sleep on the
-+ * delete thread when we run out of space.
-+ */
-+void ext3_truncate_thread(struct inode *old_inode)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(old_inode->i_sb);
-+      struct ext3_inode_info *nei, *oei = EXT3_I(old_inode);
-+      struct inode *new_inode;
-+      handle_t *handle;
-+      unsigned long blocks = old_inode->i_blocks >> (old_inode->i_blkbits-9);
-+
-+      if (!test_opt(old_inode->i_sb, ASYNCDEL) || !sbi->s_delete_list.next)
-+              goto out_truncate;
-+
-+      /* XXX This is a temporary limitation for code simplicity.
-+       *     We could truncate to arbitrary sizes at some later time.
-+       */
-+      if (old_inode->i_size != 0)
-+              goto out_truncate;
-+
-+      /* We may want to truncate the inode immediately and not defer it */
-+      if (IS_SYNC(old_inode) || blocks <= EXT3_NDIR_BLOCKS ||
-+          old_inode->i_size > oei->i_disksize)
-+              goto out_truncate;
-+
-+      /* We can't use the delete thread as-is during real orphan recovery,
-+       * as we add to the orphan list here, causing ext3_orphan_cleanup()
-+       * to loop endlessly.  It would be nice to do so, but needs work.
-+       */
-+      if (oei->i_state & EXT3_STATE_DELETE ||
-+          sbi->s_mount_state & EXT3_ORPHAN_FS) {
-+              ext3_debug("doing deferred inode %lu delete (%lu blocks)\n",
-+                         old_inode->i_ino, blocks);
-+              goto out_truncate;
-+      }
-+
-+      ext3_discard_prealloc(old_inode);
-+
-+      /* old_inode   = 1
-+       * new_inode   = sb + GDT + ibitmap
-+       * orphan list = 1 inode/superblock for add, 2 inodes for del
-+       * quota files = 2 * EXT3_SINGLEDATA_TRANS_BLOCKS
-+       */
-+      handle = ext3_journal_start(old_inode, 7);
-+      if (IS_ERR(handle))
-+              goto out_truncate;
-+
-+      new_inode = ext3_new_inode(handle, old_inode, old_inode->i_mode);
-+      if (IS_ERR(new_inode)) {
-+              ext3_debug("truncate inode %lu directly (no new inodes)\n",
-+                         old_inode->i_ino);
-+              goto out_journal;
-+      }
-+
-+      nei = EXT3_I(new_inode);
-+
-+      down_write(&oei->truncate_sem);
-+      new_inode->i_size = old_inode->i_size;
-+      new_inode->i_blocks = old_inode->i_blocks;
-+      new_inode->i_uid = old_inode->i_uid;
-+      new_inode->i_gid = old_inode->i_gid;
-+      new_inode->i_nlink = 0;
-+
-+      /* FIXME when we do arbitrary truncates */
-+      old_inode->i_blocks = oei->i_file_acl ? old_inode->i_blksize / 512 : 0;
-+      old_inode->i_mtime = old_inode->i_ctime = CURRENT_TIME;
-+
-+      memcpy(nei->i_data, oei->i_data, sizeof(nei->i_data));
-+      memset(oei->i_data, 0, sizeof(oei->i_data));
-+
-+      nei->i_disksize = oei->i_disksize;
-+      nei->i_state |= EXT3_STATE_DELETE;
-+      up_write(&oei->truncate_sem);
-+
-+      if (ext3_orphan_add(handle, new_inode) < 0)
-+              goto out_journal;
-+
-+      if (ext3_orphan_del(handle, old_inode) < 0) {
-+              ext3_orphan_del(handle, new_inode);
-+              iput(new_inode);
-+              goto out_journal;
-+      }
-+
-+      ext3_journal_stop(handle, old_inode);
-+
-+      spin_lock(&sbi->s_delete_lock);
-+      J_ASSERT(list_empty(&new_inode->i_dentry));
-+      list_add_tail(&new_inode->i_dentry, &sbi->s_delete_list);
-+      sbi->s_delete_blocks += blocks;
-+      sbi->s_delete_inodes++;
-+      spin_unlock(&sbi->s_delete_lock);
-+
-+      ext3_debug("delete inode %lu (%lu blocks) by thread\n",
-+                 new_inode->i_ino, blocks);
-+
-+      wake_up(&sbi->s_delete_thread_queue);
-+      return;
-+
-+out_journal:
-+      ext3_journal_stop(handle, old_inode);
-+out_truncate:
-+      ext3_truncate(old_inode);
-+}
-+#endif /* EXT3_DELETE_THREAD */
-+
- /* 
-  * ext3_get_inode_loc returns with an extra refcount against the
-  * inode's underlying buffer_head on success. 
---- linux-2.4.18-chaos/fs/ext3/super.c~ext3-delete_thread-2.4.18-2     2003-09-16 23:42:33.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/super.c  2003-09-16 23:42:34.000000000 +0400
-@@ -398,6 +398,220 @@ static void dump_orphan_list(struct supe
-       }
- }
-+#ifdef EXT3_DELETE_THREAD
-+/*
-+ * Delete inodes in a loop until there are no more to be deleted.
-+ * Normally, we run in the background doing the deletes and sleeping again,
-+ * and clients just add new inodes to be deleted onto the end of the list.
-+ * If someone is concerned about free space (e.g. block allocation or similar)
-+ * then they can sleep on s_delete_waiter_queue and be woken up when space
-+ * has been freed.
-+ */
-+int ext3_delete_thread(void *data)
-+{
-+      struct super_block *sb = data;
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+      struct task_struct *tsk = current;
-+
-+      /* Almost like daemonize, but not quite */
-+      exit_mm(current);
-+      tsk->session = 1;
-+      tsk->pgrp = 1;
-+      tsk->tty = NULL;
-+      exit_files(current);
-+      reparent_to_init();
-+
-+      sprintf(tsk->comm, "kdelext3-%s", kdevname(sb->s_dev));
-+      sigfillset(&tsk->blocked);
-+
-+      /*tsk->flags |= PF_KERNTHREAD;*/
-+
-+      INIT_LIST_HEAD(&sbi->s_delete_list);
-+      wake_up(&sbi->s_delete_waiter_queue);
-+      ext3_debug("delete thread on %s started\n", kdevname(sb->s_dev));
-+
-+      /* main loop */
-+      for (;;) {
-+              wait_event_interruptible(sbi->s_delete_thread_queue,
-+                                       !list_empty(&sbi->s_delete_list) ||
-+                                       !test_opt(sb, ASYNCDEL));
-+              ext3_debug("%s woken up: %lu inodes, %lu blocks\n",
-+                         tsk->comm,sbi->s_delete_inodes,sbi->s_delete_blocks);
-+
-+              spin_lock(&sbi->s_delete_lock);
-+              if (list_empty(&sbi->s_delete_list)) {
-+                      clear_opt(sbi->s_mount_opt, ASYNCDEL);
-+                      memset(&sbi->s_delete_list, 0,
-+                             sizeof(sbi->s_delete_list));
-+                      spin_unlock(&sbi->s_delete_lock);
-+                      ext3_debug("delete thread on %s exiting\n",
-+                                 kdevname(sb->s_dev));
-+                      wake_up(&sbi->s_delete_waiter_queue);
-+                      break;
-+              }
-+
-+              while (!list_empty(&sbi->s_delete_list)) {
-+                      struct inode *inode=list_entry(sbi->s_delete_list.next,
-+                                                     struct inode, i_dentry);
-+                      unsigned long blocks = inode->i_blocks >>
-+                                                      (inode->i_blkbits - 9);
-+
-+                      list_del_init(&inode->i_dentry);
-+                      spin_unlock(&sbi->s_delete_lock);
-+                      ext3_debug("%s delete ino %lu blk %lu\n",
-+                                 tsk->comm, inode->i_ino, blocks);
-+
-+                      iput(inode);
-+
-+                      spin_lock(&sbi->s_delete_lock);
-+                      sbi->s_delete_blocks -= blocks;
-+                      sbi->s_delete_inodes--;
-+              }
-+              if (sbi->s_delete_blocks != 0 || sbi->s_delete_inodes != 0) {
-+                      ext3_warning(sb, __FUNCTION__,
-+                                   "%lu blocks, %lu inodes on list?\n",
-+                                   sbi->s_delete_blocks,sbi->s_delete_inodes);
-+                      sbi->s_delete_blocks = 0;
-+                      sbi->s_delete_inodes = 0;
-+              }
-+              spin_unlock(&sbi->s_delete_lock);
-+              wake_up(&sbi->s_delete_waiter_queue);
-+      }
-+
-+      return 0;
-+}
-+
-+static void ext3_start_delete_thread(struct super_block *sb)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+      int rc;
-+
-+      spin_lock_init(&sbi->s_delete_lock);
-+      init_waitqueue_head(&sbi->s_delete_thread_queue);
-+      init_waitqueue_head(&sbi->s_delete_waiter_queue);
-+
-+      if (!test_opt(sb, ASYNCDEL))
-+              return;
-+
-+      rc = kernel_thread(ext3_delete_thread, sb, CLONE_VM | CLONE_FILES);
-+      if (rc < 0)
-+              printk(KERN_ERR "EXT3-fs: cannot start delete thread: rc %d\n",
-+                     rc);
-+      else
-+              wait_event(sbi->s_delete_waiter_queue, sbi->s_delete_list.next);
-+}
-+
-+static void ext3_stop_delete_thread(struct ext3_sb_info *sbi)
-+{
-+      if (sbi->s_delete_list.next == 0)       /* thread never started */
-+              return;
-+
-+      clear_opt(sbi->s_mount_opt, ASYNCDEL);
-+      wake_up(&sbi->s_delete_thread_queue);
-+      wait_event(sbi->s_delete_waiter_queue, list_empty(&sbi->s_delete_list));
-+}
-+
-+/* Instead of playing games with the inode flags, destruction, etc we just
-+ * create a new inode locally and put it on a list for the truncate thread.
-+ * We need large parts of the inode struct in order to complete the
-+ * truncate and unlink, so we may as well just have a real inode to do it.
-+ *
-+ * If we have any problem deferring the delete, just delete it right away.
-+ * If we defer it, we also mark how many blocks it would free, so that we
-+ * can keep the statfs data correct, and we know if we should sleep on the
-+ * delete thread when we run out of space.
-+ */
-+static void ext3_delete_inode_thread(struct inode *old_inode)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(old_inode->i_sb);
-+      struct ext3_inode_info *nei, *oei = EXT3_I(old_inode);
-+      struct inode *new_inode;
-+      unsigned long blocks = old_inode->i_blocks >> (old_inode->i_blkbits-9);
-+
-+      if (is_bad_inode(old_inode)) {
-+              clear_inode(old_inode);
-+              return;
-+      }
-+
-+      if (!test_opt(old_inode->i_sb, ASYNCDEL) || !sbi->s_delete_list.next)
-+              goto out_delete;
-+
-+      /* We may want to delete the inode immediately and not defer it */
-+      if (IS_SYNC(old_inode) || blocks <= EXT3_NDIR_BLOCKS)
-+              goto out_delete;
-+
-+      /* We can't use the delete thread as-is during real orphan recovery,
-+       * as we add to the orphan list here, causing ext3_orphan_cleanup()
-+       * to loop endlessly.  It would be nice to do so, but needs work.
-+       */
-+      if (oei->i_state & EXT3_STATE_DELETE ||
-+          sbi->s_mount_state & EXT3_ORPHAN_FS) {
-+              ext3_debug("doing deferred inode %lu delete (%lu blocks)\n",
-+                         old_inode->i_ino, blocks);
-+              goto out_delete;
-+      }
-+
-+      /* We can iget this inode again here, because our caller has unhashed
-+       * old_inode, so new_inode will be in a different inode struct.
-+       *
-+       * We need to ensure that the i_orphan pointers in the other inodes
-+       * point at the new inode copy instead of the old one so the orphan
-+       * list doesn't get corrupted when the old orphan inode is freed.
-+       */
-+      down(&sbi->s_orphan_lock);
-+
-+      sbi->s_mount_state |= EXT3_ORPHAN_FS;
-+      new_inode = iget(old_inode->i_sb, old_inode->i_ino);
-+      sbi->s_mount_state &= ~EXT3_ORPHAN_FS;
-+      if (is_bad_inode(new_inode)) {
-+              printk(KERN_WARNING "read bad inode %lu\n", old_inode->i_ino);
-+              iput(new_inode);
-+              new_inode = NULL;
-+      }
-+      if (!new_inode) {
-+              up(&sbi->s_orphan_lock);
-+              ext3_debug("delete inode %lu directly (bad read)\n",
-+                         old_inode->i_ino);
-+              goto out_delete;
-+      }
-+      J_ASSERT(new_inode != old_inode);
-+
-+      J_ASSERT(!list_empty(&oei->i_orphan));
-+
-+      nei = EXT3_I(new_inode);
-+      /* Ugh.  We need to insert new_inode into the same spot on the list
-+       * as old_inode was, to ensure the in-memory orphan list is still
-+       * in the same order as the on-disk orphan list (badness otherwise).
-+       */
-+      nei->i_orphan = oei->i_orphan;
-+      nei->i_orphan.next->prev = &nei->i_orphan;
-+      nei->i_orphan.prev->next = &nei->i_orphan;
-+      nei->i_state |= EXT3_STATE_DELETE;
-+      up(&sbi->s_orphan_lock);
-+
-+      clear_inode(old_inode);
-+
-+      spin_lock(&sbi->s_delete_lock);
-+      J_ASSERT(list_empty(&new_inode->i_dentry));
-+      list_add_tail(&new_inode->i_dentry, &sbi->s_delete_list);
-+      sbi->s_delete_blocks += blocks;
-+      sbi->s_delete_inodes++;
-+      spin_unlock(&sbi->s_delete_lock);
-+
-+      ext3_debug("delete inode %lu (%lu blocks) by thread\n",
-+                 new_inode->i_ino, blocks);
-+
-+      wake_up(&sbi->s_delete_thread_queue);
-+      return;
-+
-+out_delete:
-+      ext3_delete_inode(old_inode);
-+}
-+#else
-+#define ext3_start_delete_thread(sbi) do {} while(0)
-+#define ext3_stop_delete_thread(sbi) do {} while(0)
-+#endif /* EXT3_DELETE_THREAD */
-+
- void ext3_put_super (struct super_block * sb)
- {
-       struct ext3_sb_info *sbi = EXT3_SB(sb);
-@@ -405,6 +619,7 @@ void ext3_put_super (struct super_block 
-       kdev_t j_dev = sbi->s_journal->j_dev;
-       int i;
-+      ext3_stop_delete_thread(sbi);
-       ext3_xattr_put_super(sb);
-       journal_destroy(sbi->s_journal);
-       if (!(sb->s_flags & MS_RDONLY)) {
-@@ -453,7 +668,11 @@ static struct super_operations ext3_sops
-       write_inode:    ext3_write_inode,       /* BKL not held.  Don't need */
-       dirty_inode:    ext3_dirty_inode,       /* BKL not held.  We take it */
-       put_inode:      ext3_put_inode,         /* BKL not held.  Don't need */
-+#ifdef EXT3_DELETE_THREAD
-+      delete_inode:   ext3_delete_inode_thread,/* BKL not held. We take it */
-+#else
-       delete_inode:   ext3_delete_inode,      /* BKL not held.  We take it */
-+#endif
-       put_super:      ext3_put_super,         /* BKL held */
-       write_super:    ext3_write_super,       /* BKL held */
-       sync_fs:        ext3_sync_fs,
-@@ -514,6 +733,14 @@ static int parse_options (char * options
-            this_char = strtok (NULL, ",")) {
-               if ((value = strchr (this_char, '=')) != NULL)
-                       *value++ = 0;
-+#ifdef EXT3_DELETE_THREAD
-+              if (!strcmp(this_char, "asyncdel"))
-+                      set_opt(*mount_options, ASYNCDEL);
-+              else if (!strcmp(this_char, "noasyncdel"))
-+                      clear_opt(*mount_options, ASYNCDEL);
-+              else
-+#endif
-+
-               if (!strcmp (this_char, "bsddf"))
-                       clear_opt (*mount_options, MINIX_DF);
-               else if (!strcmp (this_char, "nouid32")) {
-@@ -1203,6 +1430,7 @@ struct super_block * ext3_read_super (st
-       }
-       ext3_setup_super (sb, es, sb->s_flags & MS_RDONLY);
-+      ext3_start_delete_thread(sb);
-       /*
-        * akpm: core read_super() calls in here with the superblock locked.
-        * That deadlocks, because orphan cleanup needs to lock the superblock
-@@ -1643,6 +1871,9 @@ int ext3_remount (struct super_block * s
-       if (!parse_options(data, &tmp, sbi, &tmp, 1))
-               return -EINVAL;
-+      if (!test_opt(sb, ASYNCDEL) || (*flags & MS_RDONLY))
-+              ext3_stop_delete_thread(sbi);
-+
-       if (sbi->s_mount_opt & EXT3_MOUNT_ABORT)
-               ext3_abort(sb, __FUNCTION__, "Abort forced by user");
---- linux-2.4.18-chaos/include/linux/ext3_fs.h~ext3-delete_thread-2.4.18-2     2003-09-16 23:39:37.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/linux/ext3_fs.h  2003-09-16 23:42:34.000000000 +0400
-@@ -195,6 +195,7 @@ struct ext3_group_desc
-  */
- #define EXT3_STATE_JDATA              0x00000001 /* journaled data exists */
- #define EXT3_STATE_NEW                        0x00000002 /* inode is newly created */
-+#define EXT3_STATE_DELETE             0x00000010 /* deferred delete inode */
- /*
-  * ioctl commands
-@@ -322,6 +323,7 @@ struct ext3_inode {
-   #define EXT3_MOUNT_WRITEBACK_DATA   0x0C00  /* No data ordering */
- #define EXT3_MOUNT_UPDATE_JOURNAL     0x1000  /* Update the journal format */
- #define EXT3_MOUNT_NO_UID32           0x2000  /* Disable 32-bit UIDs */
-+#define EXT3_MOUNT_ASYNCDEL           0x20000 /* Delayed deletion */
- /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
- #ifndef _LINUX_EXT2_FS_H
-@@ -708,6 +710,9 @@ extern void ext3_discard_prealloc (struc
- extern void ext3_dirty_inode(struct inode *);
- extern int ext3_change_inode_journal_flag(struct inode *, int);
- extern void ext3_truncate (struct inode *);
-+#ifdef EXT3_DELETE_THREAD
-+extern void ext3_truncate_thread(struct inode *inode);
-+#endif
- /* ioctl.c */
- extern int ext3_ioctl (struct inode *, struct file *, unsigned int,
---- linux-2.4.18-chaos/include/linux/ext3_fs_sb.h~ext3-delete_thread-2.4.18-2  2003-09-16 23:42:33.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/linux/ext3_fs_sb.h       2003-09-16 23:42:34.000000000 +0400
-@@ -29,6 +29,8 @@
- #define EXT3_MAX_GROUP_LOADED 32
-+#define EXT3_DELETE_THREAD
-+
- /*
-  * third extended-fs super-block data in memory
-  */
-@@ -76,6 +78,14 @@ struct ext3_sb_info {
-       struct timer_list turn_ro_timer;        /* For turning read-only (crash simulation) */
-       wait_queue_head_t ro_wait_queue;        /* For people waiting for the fs to go read-only */
- #endif
-+#ifdef EXT3_DELETE_THREAD
-+      spinlock_t s_delete_lock;
-+      struct list_head s_delete_list;
-+      unsigned long s_delete_blocks;
-+      unsigned long s_delete_inodes;
-+      wait_queue_head_t s_delete_thread_queue;
-+      wait_queue_head_t s_delete_waiter_queue;
-+#endif
- };
- #endif        /* _LINUX_EXT3_FS_SB */
-
-_
diff --git a/lustre/kernel_patches/patches/ext3-delete_thread-2.4.18.patch b/lustre/kernel_patches/patches/ext3-delete_thread-2.4.18.patch
deleted file mode 100644 (file)
index a6a64de..0000000
+++ /dev/null
@@ -1,517 +0,0 @@
-
-Create a service thread to handle delete and truncate of inodes, to avoid
-long latency while truncating very large files.
-
-
- fs/ext3/inode.c            |  116 ++++++++++++++++++++++
- fs/ext3/super.c            |  231 +++++++++++++++++++++++++++++++++++++++++++++
- include/linux/ext3_fs.h    |    5 
- include/linux/ext3_fs_sb.h |   10 +
- 4 files changed, 362 insertions(+)
-
-Index: linux-2.4.18-chaos/fs/ext3/super.c
-===================================================================
---- linux-2.4.18-chaos.orig/fs/ext3/super.c    2004-01-13 15:39:03.000000000 +0300
-+++ linux-2.4.18-chaos/fs/ext3/super.c 2004-01-13 16:35:05.000000000 +0300
-@@ -398,6 +398,221 @@
-       }
- }
-+#ifdef EXT3_DELETE_THREAD
-+/*
-+ * Delete inodes in a loop until there are no more to be deleted.
-+ * Normally, we run in the background doing the deletes and sleeping again,
-+ * and clients just add new inodes to be deleted onto the end of the list.
-+ * If someone is concerned about free space (e.g. block allocation or similar)
-+ * then they can sleep on s_delete_waiter_queue and be woken up when space
-+ * has been freed.
-+ */
-+int ext3_delete_thread(void *data)
-+{
-+      struct super_block *sb = data;
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+      struct task_struct *tsk = current;
-+
-+      /* Almost like daemonize, but not quite */
-+      exit_mm(current);
-+      tsk->session = 1;
-+      tsk->pgrp = 1;
-+      tsk->tty = NULL;
-+      exit_files(current);
-+      reparent_to_init();
-+
-+      sprintf(tsk->comm, "kdelext3-%s", kdevname(sb->s_dev));
-+      sigfillset(&tsk->blocked);
-+
-+      /*tsk->flags |= PF_KERNTHREAD;*/
-+
-+      INIT_LIST_HEAD(&sbi->s_delete_list);
-+      wake_up(&sbi->s_delete_waiter_queue);
-+      ext3_debug("delete thread on %s started\n", kdevname(sb->s_dev));
-+
-+      /* main loop */
-+      for (;;) {
-+              wait_event_interruptible(sbi->s_delete_thread_queue,
-+                                       !list_empty(&sbi->s_delete_list) ||
-+                                       !test_opt(sb, ASYNCDEL));
-+              ext3_debug("%s woken up: %lu inodes, %lu blocks\n",
-+                         tsk->comm,sbi->s_delete_inodes,sbi->s_delete_blocks);
-+
-+              spin_lock(&sbi->s_delete_lock);
-+              if (list_empty(&sbi->s_delete_list)) {
-+                      clear_opt(sbi->s_mount_opt, ASYNCDEL);
-+                      memset(&sbi->s_delete_list, 0,
-+                             sizeof(sbi->s_delete_list));
-+                      spin_unlock(&sbi->s_delete_lock);
-+                      ext3_debug("delete thread on %s exiting\n",
-+                                 kdevname(sb->s_dev));
-+                      wake_up(&sbi->s_delete_waiter_queue);
-+                      break;
-+              }
-+
-+              while (!list_empty(&sbi->s_delete_list)) {
-+                      struct inode *inode=list_entry(sbi->s_delete_list.next,
-+                                                     struct inode, i_dentry);
-+                      unsigned long blocks = inode->i_blocks >>
-+                                                      (inode->i_blkbits - 9);
-+
-+                      list_del_init(&inode->i_dentry);
-+                      spin_unlock(&sbi->s_delete_lock);
-+                      ext3_debug("%s delete ino %lu blk %lu\n",
-+                                 tsk->comm, inode->i_ino, blocks);
-+
-+                      iput(inode);
-+
-+                      spin_lock(&sbi->s_delete_lock);
-+                      sbi->s_delete_blocks -= blocks;
-+                      sbi->s_delete_inodes--;
-+              }
-+              if (sbi->s_delete_blocks != 0 || sbi->s_delete_inodes != 0) {
-+                      ext3_warning(sb, __FUNCTION__,
-+                                   "%lu blocks, %lu inodes on list?\n",
-+                                   sbi->s_delete_blocks,sbi->s_delete_inodes);
-+                      sbi->s_delete_blocks = 0;
-+                      sbi->s_delete_inodes = 0;
-+              }
-+              spin_unlock(&sbi->s_delete_lock);
-+              wake_up(&sbi->s_delete_waiter_queue);
-+      }
-+
-+      return 0;
-+}
-+
-+static void ext3_start_delete_thread(struct super_block *sb)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+      int rc;
-+
-+      spin_lock_init(&sbi->s_delete_lock);
-+      init_waitqueue_head(&sbi->s_delete_thread_queue);
-+      init_waitqueue_head(&sbi->s_delete_waiter_queue);
-+
-+      if (!test_opt(sb, ASYNCDEL))
-+              return;
-+
-+      rc = kernel_thread(ext3_delete_thread, sb, CLONE_VM | CLONE_FILES);
-+      if (rc < 0)
-+              printk(KERN_ERR "EXT3-fs: cannot start delete thread: rc %d\n",
-+                     rc);
-+      else
-+              wait_event(sbi->s_delete_waiter_queue, sbi->s_delete_list.next);
-+}
-+
-+static void ext3_stop_delete_thread(struct ext3_sb_info *sbi)
-+{
-+      if (sbi->s_delete_list.next == 0)       /* thread never started */
-+              return;
-+
-+      clear_opt(sbi->s_mount_opt, ASYNCDEL);
-+      wake_up(&sbi->s_delete_thread_queue);
-+      wait_event(sbi->s_delete_waiter_queue,
-+                      sbi->s_delete_list.next == 0 && sbi->s_delete_inodes == 0);
-+}
-+
-+/* Instead of playing games with the inode flags, destruction, etc we just
-+ * create a new inode locally and put it on a list for the truncate thread.
-+ * We need large parts of the inode struct in order to complete the
-+ * truncate and unlink, so we may as well just have a real inode to do it.
-+ *
-+ * If we have any problem deferring the delete, just delete it right away.
-+ * If we defer it, we also mark how many blocks it would free, so that we
-+ * can keep the statfs data correct, and we know if we should sleep on the
-+ * delete thread when we run out of space.
-+ */
-+static void ext3_delete_inode_thread(struct inode *old_inode)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(old_inode->i_sb);
-+      struct ext3_inode_info *nei, *oei = EXT3_I(old_inode);
-+      struct inode *new_inode;
-+      unsigned long blocks = old_inode->i_blocks >> (old_inode->i_blkbits-9);
-+
-+      if (is_bad_inode(old_inode)) {
-+              clear_inode(old_inode);
-+              return;
-+      }
-+
-+      if (!test_opt(old_inode->i_sb, ASYNCDEL) || !sbi->s_delete_list.next)
-+              goto out_delete;
-+
-+      /* We may want to delete the inode immediately and not defer it */
-+      if (IS_SYNC(old_inode) || blocks <= EXT3_NDIR_BLOCKS)
-+              goto out_delete;
-+
-+      /* We can't use the delete thread as-is during real orphan recovery,
-+       * as we add to the orphan list here, causing ext3_orphan_cleanup()
-+       * to loop endlessly.  It would be nice to do so, but needs work.
-+       */
-+      if (oei->i_state & EXT3_STATE_DELETE ||
-+          sbi->s_mount_state & EXT3_ORPHAN_FS) {
-+              ext3_debug("doing deferred inode %lu delete (%lu blocks)\n",
-+                         old_inode->i_ino, blocks);
-+              goto out_delete;
-+      }
-+
-+      /* We can iget this inode again here, because our caller has unhashed
-+       * old_inode, so new_inode will be in a different inode struct.
-+       *
-+       * We need to ensure that the i_orphan pointers in the other inodes
-+       * point at the new inode copy instead of the old one so the orphan
-+       * list doesn't get corrupted when the old orphan inode is freed.
-+       */
-+      down(&sbi->s_orphan_lock);
-+
-+      sbi->s_mount_state |= EXT3_ORPHAN_FS;
-+      new_inode = iget(old_inode->i_sb, old_inode->i_ino);
-+      sbi->s_mount_state &= ~EXT3_ORPHAN_FS;
-+      if (is_bad_inode(new_inode)) {
-+              printk(KERN_WARNING "read bad inode %lu\n", old_inode->i_ino);
-+              iput(new_inode);
-+              new_inode = NULL;
-+      }
-+      if (!new_inode) {
-+              up(&sbi->s_orphan_lock);
-+              ext3_debug("delete inode %lu directly (bad read)\n",
-+                         old_inode->i_ino);
-+              goto out_delete;
-+      }
-+      J_ASSERT(new_inode != old_inode);
-+
-+      J_ASSERT(!list_empty(&oei->i_orphan));
-+
-+      nei = EXT3_I(new_inode);
-+      /* Ugh.  We need to insert new_inode into the same spot on the list
-+       * as old_inode was, to ensure the in-memory orphan list is still
-+       * in the same order as the on-disk orphan list (badness otherwise).
-+       */
-+      nei->i_orphan = oei->i_orphan;
-+      nei->i_orphan.next->prev = &nei->i_orphan;
-+      nei->i_orphan.prev->next = &nei->i_orphan;
-+      nei->i_state |= EXT3_STATE_DELETE;
-+      up(&sbi->s_orphan_lock);
-+
-+      clear_inode(old_inode);
-+
-+      spin_lock(&sbi->s_delete_lock);
-+      J_ASSERT(list_empty(&new_inode->i_dentry));
-+      list_add_tail(&new_inode->i_dentry, &sbi->s_delete_list);
-+      sbi->s_delete_blocks += blocks;
-+      sbi->s_delete_inodes++;
-+      spin_unlock(&sbi->s_delete_lock);
-+
-+      ext3_debug("delete inode %lu (%lu blocks) by thread\n",
-+                 new_inode->i_ino, blocks);
-+
-+      wake_up(&sbi->s_delete_thread_queue);
-+      return;
-+
-+out_delete:
-+      ext3_delete_inode(old_inode);
-+}
-+#else
-+#define ext3_start_delete_thread(sbi) do {} while(0)
-+#define ext3_stop_delete_thread(sbi) do {} while(0)
-+#endif /* EXT3_DELETE_THREAD */
-+
- void ext3_put_super (struct super_block * sb)
- {
-       struct ext3_sb_info *sbi = EXT3_SB(sb);
-@@ -405,6 +620,8 @@
-       kdev_t j_dev = sbi->s_journal->j_dev;
-       int i;
-+      J_ASSERT(sbi->s_delete_inodes == 0);
-+
-       ext3_xattr_put_super(sb);
-       journal_destroy(sbi->s_journal);
-       if (!(sb->s_flags & MS_RDONLY)) {
-@@ -453,7 +670,11 @@
-       write_inode:    ext3_write_inode,       /* BKL not held.  Don't need */
-       dirty_inode:    ext3_dirty_inode,       /* BKL not held.  We take it */
-       put_inode:      ext3_put_inode,         /* BKL not held.  Don't need */
-+#ifdef EXT3_DELETE_THREAD
-+      delete_inode:   ext3_delete_inode_thread,/* BKL not held. We take it */
-+#else
-       delete_inode:   ext3_delete_inode,      /* BKL not held.  We take it */
-+#endif
-       put_super:      ext3_put_super,         /* BKL held */
-       write_super:    ext3_write_super,       /* BKL held */
-       sync_fs:        ext3_sync_fs,
-@@ -514,6 +735,14 @@
-            this_char = strtok (NULL, ",")) {
-               if ((value = strchr (this_char, '=')) != NULL)
-                       *value++ = 0;
-+#ifdef EXT3_DELETE_THREAD
-+              if (!strcmp(this_char, "asyncdel"))
-+                      set_opt(*mount_options, ASYNCDEL);
-+              else if (!strcmp(this_char, "noasyncdel"))
-+                      clear_opt(*mount_options, ASYNCDEL);
-+              else
-+#endif
-+
-               if (!strcmp (this_char, "bsddf"))
-                       clear_opt (*mount_options, MINIX_DF);
-               else if (!strcmp (this_char, "nouid32")) {
-@@ -1209,6 +1438,7 @@
-       }
-       ext3_setup_super (sb, es, sb->s_flags & MS_RDONLY);
-+      ext3_start_delete_thread(sb);
-       /*
-        * akpm: core read_super() calls in here with the superblock locked.
-        * That deadlocks, because orphan cleanup needs to lock the superblock
-@@ -1585,7 +1815,12 @@
- static int ext3_sync_fs(struct super_block *sb)
- {
-       tid_t target;
--      
-+
-+      if (atomic_read(&sb->s_active) == 0) {
-+              /* fs is being umounted: time to stop delete thread */
-+              ext3_stop_delete_thread(EXT3_SB(sb));
-+      }
-+
-       sb->s_dirt = 0;
-       target = log_start_commit(EXT3_SB(sb)->s_journal, NULL);
-       log_wait_commit(EXT3_SB(sb)->s_journal, target);
-@@ -1649,6 +1884,9 @@
-       if (!parse_options(data, &tmp, sbi, &tmp, 1))
-               return -EINVAL;
-+      if (!test_opt(sb, ASYNCDEL) || (*flags & MS_RDONLY))
-+              ext3_stop_delete_thread(sbi);
-+
-       if (sbi->s_mount_opt & EXT3_MOUNT_ABORT)
-               ext3_abort(sb, __FUNCTION__, "Abort forced by user");
-Index: linux-2.4.18-chaos/fs/ext3/file.c
-===================================================================
---- linux-2.4.18-chaos.orig/fs/ext3/file.c     2003-07-28 17:52:04.000000000 +0400
-+++ linux-2.4.18-chaos/fs/ext3/file.c  2004-01-13 16:26:01.000000000 +0300
-@@ -121,7 +121,11 @@
- };
- struct inode_operations ext3_file_inode_operations = {
-+#ifdef EXT3_DELETE_THREAD
-+      truncate:       ext3_truncate_thread,   /* BKL held */
-+#else
-       truncate:       ext3_truncate,          /* BKL held */
-+#endif
-       setattr:        ext3_setattr,           /* BKL held */
- };
-Index: linux-2.4.18-chaos/fs/ext3/inode.c
-===================================================================
---- linux-2.4.18-chaos.orig/fs/ext3/inode.c    2004-01-13 15:39:03.000000000 +0300
-+++ linux-2.4.18-chaos/fs/ext3/inode.c 2004-01-13 16:26:01.000000000 +0300
-@@ -2041,6 +2041,118 @@
-       return;         /* AKPM: return what? */
- }
-+#ifdef EXT3_DELETE_THREAD
-+/* Move blocks from to-be-truncated inode over to a new inode, and delete
-+ * that one from the delete thread instead.  This avoids a lot of latency
-+ * when truncating large files.
-+ *
-+ * If we have any problem deferring the truncate, just truncate it right away.
-+ * If we defer it, we also mark how many blocks it would free, so that we
-+ * can keep the statfs data correct, and we know if we should sleep on the
-+ * delete thread when we run out of space.
-+ */
-+void ext3_truncate_thread(struct inode *old_inode)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(old_inode->i_sb);
-+      struct ext3_inode_info *nei, *oei = EXT3_I(old_inode);
-+      struct inode *new_inode;
-+      handle_t *handle;
-+      unsigned long blocks = old_inode->i_blocks >> (old_inode->i_blkbits-9);
-+
-+      if (!test_opt(old_inode->i_sb, ASYNCDEL) || !sbi->s_delete_list.next)
-+              goto out_truncate;
-+
-+      /* XXX This is a temporary limitation for code simplicity.
-+       *     We could truncate to arbitrary sizes at some later time.
-+       */
-+      if (old_inode->i_size != 0)
-+              goto out_truncate;
-+
-+      /* We may want to truncate the inode immediately and not defer it */
-+      if (IS_SYNC(old_inode) || blocks <= EXT3_NDIR_BLOCKS ||
-+          old_inode->i_size > oei->i_disksize)
-+              goto out_truncate;
-+
-+      /* We can't use the delete thread as-is during real orphan recovery,
-+       * as we add to the orphan list here, causing ext3_orphan_cleanup()
-+       * to loop endlessly.  It would be nice to do so, but needs work.
-+       */
-+      if (oei->i_state & EXT3_STATE_DELETE ||
-+          sbi->s_mount_state & EXT3_ORPHAN_FS) {
-+              ext3_debug("doing deferred inode %lu delete (%lu blocks)\n",
-+                         old_inode->i_ino, blocks);
-+              goto out_truncate;
-+      }
-+
-+      ext3_discard_prealloc(old_inode);
-+
-+      /* old_inode   = 1
-+       * new_inode   = sb + GDT + ibitmap
-+       * orphan list = 1 inode/superblock for add, 2 inodes for del
-+       * quota files = 2 * EXT3_SINGLEDATA_TRANS_BLOCKS
-+       */
-+      handle = ext3_journal_start(old_inode, 7);
-+      if (IS_ERR(handle))
-+              goto out_truncate;
-+
-+      new_inode = ext3_new_inode(handle, old_inode, old_inode->i_mode);
-+      if (IS_ERR(new_inode)) {
-+              ext3_debug("truncate inode %lu directly (no new inodes)\n",
-+                         old_inode->i_ino);
-+              goto out_journal;
-+      }
-+
-+      nei = EXT3_I(new_inode);
-+
-+      down_write(&oei->truncate_sem);
-+      new_inode->i_size = old_inode->i_size;
-+      new_inode->i_blocks = old_inode->i_blocks;
-+      new_inode->i_uid = old_inode->i_uid;
-+      new_inode->i_gid = old_inode->i_gid;
-+      new_inode->i_nlink = 0;
-+
-+      /* FIXME when we do arbitrary truncates */
-+      old_inode->i_blocks = oei->i_file_acl ? old_inode->i_blksize / 512 : 0;
-+      old_inode->i_mtime = old_inode->i_ctime = CURRENT_TIME;
-+
-+      memcpy(nei->i_data, oei->i_data, sizeof(nei->i_data));
-+      memset(oei->i_data, 0, sizeof(oei->i_data));
-+
-+      nei->i_disksize = oei->i_disksize;
-+      nei->i_state |= EXT3_STATE_DELETE;
-+      up_write(&oei->truncate_sem);
-+
-+      if (ext3_orphan_add(handle, new_inode) < 0)
-+              goto out_journal;
-+
-+      if (ext3_orphan_del(handle, old_inode) < 0) {
-+              ext3_orphan_del(handle, new_inode);
-+              iput(new_inode);
-+              goto out_journal;
-+      }
-+
-+      ext3_journal_stop(handle, old_inode);
-+
-+      spin_lock(&sbi->s_delete_lock);
-+      J_ASSERT(list_empty(&new_inode->i_dentry));
-+      list_add_tail(&new_inode->i_dentry, &sbi->s_delete_list);
-+      sbi->s_delete_blocks += blocks;
-+      sbi->s_delete_inodes++;
-+      spin_unlock(&sbi->s_delete_lock);
-+
-+      ext3_debug("delete inode %lu (%lu blocks) by thread\n",
-+                 new_inode->i_ino, blocks);
-+
-+      wake_up(&sbi->s_delete_thread_queue);
-+      return;
-+
-+out_journal:
-+      ext3_journal_stop(handle, old_inode);
-+out_truncate:
-+      ext3_truncate(old_inode);
-+}
-+#endif /* EXT3_DELETE_THREAD */
-+
- /* 
-  * ext3_get_inode_loc returns with an extra refcount against the
-  * inode's underlying buffer_head on success. 
-Index: linux-2.4.18-chaos/fs/buffer.c
-===================================================================
---- linux-2.4.18-chaos.orig/fs/buffer.c        2003-07-28 17:52:03.000000000 +0400
-+++ linux-2.4.18-chaos/fs/buffer.c     2004-01-13 16:34:43.000000000 +0300
-@@ -352,9 +352,9 @@
-       lock_super(sb);
-       if (sb->s_dirt && sb->s_op && sb->s_op->write_super)
-               sb->s_op->write_super(sb);
-+      unlock_super(sb);
-       if (sb->s_op && sb->s_op->sync_fs)
-               sb->s_op->sync_fs(sb);
--      unlock_super(sb);
-       unlock_kernel();
-       return sync_buffers(dev, 1);
-Index: linux-2.4.18-chaos/include/linux/ext3_fs.h
-===================================================================
---- linux-2.4.18-chaos.orig/include/linux/ext3_fs.h    2004-01-13 15:39:03.000000000 +0300
-+++ linux-2.4.18-chaos/include/linux/ext3_fs.h 2004-01-13 16:26:01.000000000 +0300
-@@ -190,6 +190,7 @@
-  */
- #define EXT3_STATE_JDATA              0x00000001 /* journaled data exists */
- #define EXT3_STATE_NEW                        0x00000002 /* inode is newly created */
-+#define EXT3_STATE_DELETE             0x00000010 /* deferred delete inode */
- /*
-  * ioctl commands
-@@ -317,6 +318,7 @@
- #define EXT3_MOUNT_UPDATE_JOURNAL     0x1000  /* Update the journal format */
- #define EXT3_MOUNT_NO_UID32           0x2000  /* Disable 32-bit UIDs */
- #define EXT3_MOUNT_INDEX              0x4000  /* Enable directory index */
-+#define EXT3_MOUNT_ASYNCDEL           0x20000 /* Delayed deletion */
- /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
- #ifndef _LINUX_EXT2_FS_H
-@@ -651,6 +653,9 @@
- extern void ext3_dirty_inode(struct inode *);
- extern int ext3_change_inode_journal_flag(struct inode *, int);
- extern void ext3_truncate (struct inode *);
-+#ifdef EXT3_DELETE_THREAD
-+extern void ext3_truncate_thread(struct inode *inode);
-+#endif
- /* ioctl.c */
- extern int ext3_ioctl (struct inode *, struct file *, unsigned int,
-Index: linux-2.4.18-chaos/include/linux/ext3_fs_sb.h
-===================================================================
---- linux-2.4.18-chaos.orig/include/linux/ext3_fs_sb.h 2004-01-13 15:39:03.000000000 +0300
-+++ linux-2.4.18-chaos/include/linux/ext3_fs_sb.h      2004-01-13 16:26:01.000000000 +0300
-@@ -29,6 +29,8 @@
- #define EXT3_MAX_GROUP_LOADED 32
-+#define EXT3_DELETE_THREAD
-+
- /*
-  * third extended-fs super-block data in memory
-  */
-@@ -74,6 +76,14 @@
-       struct timer_list turn_ro_timer;        /* For turning read-only (crash simulation) */
-       wait_queue_head_t ro_wait_queue;        /* For people waiting for the fs to go read-only */
- #endif
-+#ifdef EXT3_DELETE_THREAD
-+      spinlock_t s_delete_lock;
-+      struct list_head s_delete_list;
-+      unsigned long s_delete_blocks;
-+      unsigned long s_delete_inodes;
-+      wait_queue_head_t s_delete_thread_queue;
-+      wait_queue_head_t s_delete_waiter_queue;
-+#endif
- };
- #endif        /* _LINUX_EXT3_FS_SB */
diff --git a/lustre/kernel_patches/patches/ext3-delete_thread-2.4.20.patch b/lustre/kernel_patches/patches/ext3-delete_thread-2.4.20.patch
deleted file mode 100644 (file)
index ca05893..0000000
+++ /dev/null
@@ -1,541 +0,0 @@
- fs/ext3/file.c             |    4 
- fs/ext3/inode.c            |  116 ++++++++++++++++++++++
- fs/ext3/super.c            |  230 +++++++++++++++++++++++++++++++++++++++++++++
- include/linux/ext3_fs.h    |    5 
- include/linux/ext3_fs_sb.h |   10 +
- 5 files changed, 365 insertions(+)
-
-Index: linux-2.4.20/fs/ext3/super.c
-===================================================================
---- linux-2.4.20.orig/fs/ext3/super.c  2004-01-12 20:13:37.000000000 +0300
-+++ linux-2.4.20/fs/ext3/super.c       2004-01-13 16:59:54.000000000 +0300
-@@ -48,6 +48,8 @@
- static void ext3_clear_journal_err(struct super_block * sb,
-                                  struct ext3_super_block * es);
-+static int ext3_sync_fs(struct super_block * sb);
-+
- #ifdef CONFIG_JBD_DEBUG
- int journal_no_write[2];
-@@ -398,6 +400,221 @@
-       }
- }
-+#ifdef EXT3_DELETE_THREAD
-+/*
-+ * Delete inodes in a loop until there are no more to be deleted.
-+ * Normally, we run in the background doing the deletes and sleeping again,
-+ * and clients just add new inodes to be deleted onto the end of the list.
-+ * If someone is concerned about free space (e.g. block allocation or similar)
-+ * then they can sleep on s_delete_waiter_queue and be woken up when space
-+ * has been freed.
-+ */
-+int ext3_delete_thread(void *data)
-+{
-+      struct super_block *sb = data;
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+      struct task_struct *tsk = current;
-+
-+      /* Almost like daemonize, but not quite */
-+      exit_mm(current);
-+      tsk->session = 1;
-+      tsk->pgrp = 1;
-+      tsk->tty = NULL;
-+      exit_files(current);
-+      reparent_to_init();
-+
-+      sprintf(tsk->comm, "kdelext3-%s", kdevname(sb->s_dev));
-+      sigfillset(&tsk->blocked);
-+
-+      /*tsk->flags |= PF_KERNTHREAD;*/
-+
-+      INIT_LIST_HEAD(&sbi->s_delete_list);
-+      wake_up(&sbi->s_delete_waiter_queue);
-+      ext3_debug("delete thread on %s started\n", kdevname(sb->s_dev));
-+
-+      /* main loop */
-+      for (;;) {
-+              wait_event_interruptible(sbi->s_delete_thread_queue,
-+                                       !list_empty(&sbi->s_delete_list) ||
-+                                       !test_opt(sb, ASYNCDEL));
-+              ext3_debug("%s woken up: %lu inodes, %lu blocks\n",
-+                         tsk->comm,sbi->s_delete_inodes,sbi->s_delete_blocks);
-+
-+              spin_lock(&sbi->s_delete_lock);
-+              if (list_empty(&sbi->s_delete_list)) {
-+                      clear_opt(sbi->s_mount_opt, ASYNCDEL);
-+                      memset(&sbi->s_delete_list, 0,
-+                             sizeof(sbi->s_delete_list));
-+                      spin_unlock(&sbi->s_delete_lock);
-+                      ext3_debug("delete thread on %s exiting\n",
-+                                 kdevname(sb->s_dev));
-+                      wake_up(&sbi->s_delete_waiter_queue);
-+                      break;
-+              }
-+
-+              while (!list_empty(&sbi->s_delete_list)) {
-+                      struct inode *inode=list_entry(sbi->s_delete_list.next,
-+                                                     struct inode, i_dentry);
-+                      unsigned long blocks = inode->i_blocks >>
-+                                                      (inode->i_blkbits - 9);
-+
-+                      list_del_init(&inode->i_dentry);
-+                      spin_unlock(&sbi->s_delete_lock);
-+                      ext3_debug("%s delete ino %lu blk %lu\n",
-+                                 tsk->comm, inode->i_ino, blocks);
-+
-+                      iput(inode);
-+
-+                      spin_lock(&sbi->s_delete_lock);
-+                      sbi->s_delete_blocks -= blocks;
-+                      sbi->s_delete_inodes--;
-+              }
-+              if (sbi->s_delete_blocks != 0 || sbi->s_delete_inodes != 0) {
-+                      ext3_warning(sb, __FUNCTION__,
-+                                   "%lu blocks, %lu inodes on list?\n",
-+                                   sbi->s_delete_blocks,sbi->s_delete_inodes);
-+                      sbi->s_delete_blocks = 0;
-+                      sbi->s_delete_inodes = 0;
-+              }
-+              spin_unlock(&sbi->s_delete_lock);
-+              wake_up(&sbi->s_delete_waiter_queue);
-+      }
-+
-+      return 0;
-+}
-+
-+static void ext3_start_delete_thread(struct super_block *sb)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+      int rc;
-+
-+      spin_lock_init(&sbi->s_delete_lock);
-+      init_waitqueue_head(&sbi->s_delete_thread_queue);
-+      init_waitqueue_head(&sbi->s_delete_waiter_queue);
-+
-+      if (!test_opt(sb, ASYNCDEL))
-+              return;
-+
-+      rc = kernel_thread(ext3_delete_thread, sb, CLONE_VM | CLONE_FILES);
-+      if (rc < 0)
-+              printk(KERN_ERR "EXT3-fs: cannot start delete thread: rc %d\n",
-+                     rc);
-+      else
-+              wait_event(sbi->s_delete_waiter_queue, sbi->s_delete_list.next);
-+}
-+
-+static void ext3_stop_delete_thread(struct ext3_sb_info *sbi)
-+{
-+      if (sbi->s_delete_list.next == 0)       /* thread never started */
-+              return;
-+
-+      clear_opt(sbi->s_mount_opt, ASYNCDEL);
-+      wake_up(&sbi->s_delete_thread_queue);
-+      wait_event(sbi->s_delete_waiter_queue,
-+                      sbi->s_delete_list.next == 0 && sbi->s_delete_inodes == 0);
-+}
-+
-+/* Instead of playing games with the inode flags, destruction, etc we just
-+ * create a new inode locally and put it on a list for the truncate thread.
-+ * We need large parts of the inode struct in order to complete the
-+ * truncate and unlink, so we may as well just have a real inode to do it.
-+ *
-+ * If we have any problem deferring the delete, just delete it right away.
-+ * If we defer it, we also mark how many blocks it would free, so that we
-+ * can keep the statfs data correct, and we know if we should sleep on the
-+ * delete thread when we run out of space.
-+ */
-+static void ext3_delete_inode_thread(struct inode *old_inode)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(old_inode->i_sb);
-+      struct ext3_inode_info *nei, *oei = EXT3_I(old_inode);
-+      struct inode *new_inode;
-+      unsigned long blocks = old_inode->i_blocks >> (old_inode->i_blkbits-9);
-+
-+      if (is_bad_inode(old_inode)) {
-+              clear_inode(old_inode);
-+              return;
-+      }
-+
-+      if (!test_opt(old_inode->i_sb, ASYNCDEL) || !sbi->s_delete_list.next)
-+              goto out_delete;
-+
-+      /* We may want to delete the inode immediately and not defer it */
-+      if (IS_SYNC(old_inode) || blocks <= EXT3_NDIR_BLOCKS)
-+              goto out_delete;
-+
-+      /* We can't use the delete thread as-is during real orphan recovery,
-+       * as we add to the orphan list here, causing ext3_orphan_cleanup()
-+       * to loop endlessly.  It would be nice to do so, but needs work.
-+       */
-+      if (oei->i_state & EXT3_STATE_DELETE ||
-+          sbi->s_mount_state & EXT3_ORPHAN_FS) {
-+              ext3_debug("doing deferred inode %lu delete (%lu blocks)\n",
-+                         old_inode->i_ino, blocks);
-+              goto out_delete;
-+      }
-+
-+      /* We can iget this inode again here, because our caller has unhashed
-+       * old_inode, so new_inode will be in a different inode struct.
-+       *
-+       * We need to ensure that the i_orphan pointers in the other inodes
-+       * point at the new inode copy instead of the old one so the orphan
-+       * list doesn't get corrupted when the old orphan inode is freed.
-+       */
-+      down(&sbi->s_orphan_lock);
-+
-+      sbi->s_mount_state |= EXT3_ORPHAN_FS;
-+      new_inode = iget(old_inode->i_sb, old_inode->i_ino);
-+      sbi->s_mount_state &= ~EXT3_ORPHAN_FS;
-+      if (is_bad_inode(new_inode)) {
-+              printk(KERN_WARNING "read bad inode %lu\n", old_inode->i_ino);
-+              iput(new_inode);
-+              new_inode = NULL;
-+      }
-+      if (!new_inode) {
-+              up(&sbi->s_orphan_lock);
-+              ext3_debug("delete inode %lu directly (bad read)\n",
-+                         old_inode->i_ino);
-+              goto out_delete;
-+      }
-+      J_ASSERT(new_inode != old_inode);
-+
-+      J_ASSERT(!list_empty(&oei->i_orphan));
-+
-+      nei = EXT3_I(new_inode);
-+      /* Ugh.  We need to insert new_inode into the same spot on the list
-+       * as old_inode was, to ensure the in-memory orphan list is still
-+       * in the same order as the on-disk orphan list (badness otherwise).
-+       */
-+      nei->i_orphan = oei->i_orphan;
-+      nei->i_orphan.next->prev = &nei->i_orphan;
-+      nei->i_orphan.prev->next = &nei->i_orphan;
-+      nei->i_state |= EXT3_STATE_DELETE;
-+      up(&sbi->s_orphan_lock);
-+
-+      clear_inode(old_inode);
-+
-+      spin_lock(&sbi->s_delete_lock);
-+      J_ASSERT(list_empty(&new_inode->i_dentry));
-+      list_add_tail(&new_inode->i_dentry, &sbi->s_delete_list);
-+      sbi->s_delete_blocks += blocks;
-+      sbi->s_delete_inodes++;
-+      spin_unlock(&sbi->s_delete_lock);
-+
-+      ext3_debug("delete inode %lu (%lu blocks) by thread\n",
-+                 new_inode->i_ino, blocks);
-+
-+      wake_up(&sbi->s_delete_thread_queue);
-+      return;
-+
-+out_delete:
-+      ext3_delete_inode(old_inode);
-+}
-+#else
-+#define ext3_start_delete_thread(sbi) do {} while(0)
-+#define ext3_stop_delete_thread(sbi) do {} while(0)
-+#endif /* EXT3_DELETE_THREAD */
-+
- void ext3_put_super (struct super_block * sb)
- {
-       struct ext3_sb_info *sbi = EXT3_SB(sb);
-@@ -405,6 +622,7 @@
-       kdev_t j_dev = sbi->s_journal->j_dev;
-       int i;
-+      J_ASSERT(sbi->s_delete_inodes == 0);
-       ext3_xattr_put_super(sb);
-       journal_destroy(sbi->s_journal);
-       if (!(sb->s_flags & MS_RDONLY)) {
-@@ -453,9 +671,14 @@
-       write_inode:    ext3_write_inode,       /* BKL not held.  Don't need */
-       dirty_inode:    ext3_dirty_inode,       /* BKL not held.  We take it */
-       put_inode:      ext3_put_inode,         /* BKL not held.  Don't need */
-+#ifdef EXT3_DELETE_THREAD
-+      delete_inode:   ext3_delete_inode_thread,/* BKL not held. We take it */
-+#else
-       delete_inode:   ext3_delete_inode,      /* BKL not held.  We take it */
-+#endif
-       put_super:      ext3_put_super,         /* BKL held */
-       write_super:    ext3_write_super,       /* BKL held */
-+      sync_fs:        ext3_sync_fs,
-       write_super_lockfs: ext3_write_super_lockfs, /* BKL not held. Take it */
-       unlockfs:       ext3_unlockfs,          /* BKL not held.  We take it */
-       statfs:         ext3_statfs,            /* BKL held */
-@@ -521,6 +744,13 @@
-                       clear_opt (*mount_options, XATTR_USER);
-               else
- #endif
-+#ifdef EXT3_DELETE_THREAD
-+              if (!strcmp(this_char, "asyncdel"))
-+                      set_opt(*mount_options, ASYNCDEL);
-+              else if (!strcmp(this_char, "noasyncdel"))
-+                      clear_opt(*mount_options, ASYNCDEL);
-+              else
-+#endif
-               if (!strcmp (this_char, "bsddf"))
-                       clear_opt (*mount_options, MINIX_DF);
-               else if (!strcmp (this_char, "nouid32")) {
-@@ -1220,6 +1450,7 @@
-       }
-       ext3_setup_super (sb, es, sb->s_flags & MS_RDONLY);
-+      ext3_start_delete_thread(sb);
-       /*
-        * akpm: core read_super() calls in here with the superblock locked.
-        * That deadlocks, because orphan cleanup needs to lock the superblock
-@@ -1625,6 +1856,21 @@
-       }
- }
-+static int ext3_sync_fs(struct super_block *sb)
-+{
-+      tid_t target;
-+
-+      if (atomic_read(&sb->s_active) == 0) {
-+              /* fs is being umounted: time to stop delete thread */
-+              ext3_stop_delete_thread(EXT3_SB(sb));
-+      }
-+
-+      sb->s_dirt = 0;
-+      target = log_start_commit(EXT3_SB(sb)->s_journal, NULL);
-+      log_wait_commit(EXT3_SB(sb)->s_journal, target);
-+      return 0;
-+}
-+
- /*
-  * LVM calls this function before a (read-only) snapshot is created.  This
-  * gives us a chance to flush the journal completely and mark the fs clean.
-@@ -1682,6 +1928,9 @@
-       if (!parse_options(data, &tmp, sbi, &tmp, 1))
-               return -EINVAL;
-+      if (!test_opt(sb, ASYNCDEL) || (*flags & MS_RDONLY))
-+              ext3_stop_delete_thread(sbi);
-+
-       if (sbi->s_mount_opt & EXT3_MOUNT_ABORT)
-               ext3_abort(sb, __FUNCTION__, "Abort forced by user");
-Index: linux-2.4.20/fs/ext3/inode.c
-===================================================================
---- linux-2.4.20.orig/fs/ext3/inode.c  2004-01-12 20:13:37.000000000 +0300
-+++ linux-2.4.20/fs/ext3/inode.c       2004-01-13 16:55:45.000000000 +0300
-@@ -2552,6 +2552,118 @@
-       return err;
- }
-+#ifdef EXT3_DELETE_THREAD
-+/* Move blocks from to-be-truncated inode over to a new inode, and delete
-+ * that one from the delete thread instead.  This avoids a lot of latency
-+ * when truncating large files.
-+ *
-+ * If we have any problem deferring the truncate, just truncate it right away.
-+ * If we defer it, we also mark how many blocks it would free, so that we
-+ * can keep the statfs data correct, and we know if we should sleep on the
-+ * delete thread when we run out of space.
-+ */
-+void ext3_truncate_thread(struct inode *old_inode)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(old_inode->i_sb);
-+      struct ext3_inode_info *nei, *oei = EXT3_I(old_inode);
-+      struct inode *new_inode;
-+      handle_t *handle;
-+      unsigned long blocks = old_inode->i_blocks >> (old_inode->i_blkbits-9);
-+
-+      if (!test_opt(old_inode->i_sb, ASYNCDEL) || !sbi->s_delete_list.next)
-+              goto out_truncate;
-+
-+      /* XXX This is a temporary limitation for code simplicity.
-+       *     We could truncate to arbitrary sizes at some later time.
-+       */
-+      if (old_inode->i_size != 0)
-+              goto out_truncate;
-+
-+      /* We may want to truncate the inode immediately and not defer it */
-+      if (IS_SYNC(old_inode) || blocks <= EXT3_NDIR_BLOCKS ||
-+          old_inode->i_size > oei->i_disksize)
-+              goto out_truncate;
-+
-+      /* We can't use the delete thread as-is during real orphan recovery,
-+       * as we add to the orphan list here, causing ext3_orphan_cleanup()
-+       * to loop endlessly.  It would be nice to do so, but needs work.
-+       */
-+      if (oei->i_state & EXT3_STATE_DELETE ||
-+          sbi->s_mount_state & EXT3_ORPHAN_FS) {
-+              ext3_debug("doing deferred inode %lu delete (%lu blocks)\n",
-+                         old_inode->i_ino, blocks);
-+              goto out_truncate;
-+      }
-+
-+      ext3_discard_prealloc(old_inode);
-+
-+      /* old_inode   = 1
-+       * new_inode   = sb + GDT + ibitmap
-+       * orphan list = 1 inode/superblock for add, 2 inodes for del
-+       * quota files = 2 * EXT3_SINGLEDATA_TRANS_BLOCKS
-+       */
-+      handle = ext3_journal_start(old_inode, 7);
-+      if (IS_ERR(handle))
-+              goto out_truncate;
-+
-+      new_inode = ext3_new_inode(handle, old_inode, old_inode->i_mode);
-+      if (IS_ERR(new_inode)) {
-+              ext3_debug("truncate inode %lu directly (no new inodes)\n",
-+                         old_inode->i_ino);
-+              goto out_journal;
-+      }
-+
-+      nei = EXT3_I(new_inode);
-+
-+      down_write(&oei->truncate_sem);
-+      new_inode->i_size = old_inode->i_size;
-+      new_inode->i_blocks = old_inode->i_blocks;
-+      new_inode->i_uid = old_inode->i_uid;
-+      new_inode->i_gid = old_inode->i_gid;
-+      new_inode->i_nlink = 0;
-+
-+      /* FIXME when we do arbitrary truncates */
-+      old_inode->i_blocks = oei->i_file_acl ? old_inode->i_blksize / 512 : 0;
-+      old_inode->i_mtime = old_inode->i_ctime = CURRENT_TIME;
-+
-+      memcpy(nei->i_data, oei->i_data, sizeof(nei->i_data));
-+      memset(oei->i_data, 0, sizeof(oei->i_data));
-+
-+      nei->i_disksize = oei->i_disksize;
-+      nei->i_state |= EXT3_STATE_DELETE;
-+      up_write(&oei->truncate_sem);
-+
-+      if (ext3_orphan_add(handle, new_inode) < 0)
-+              goto out_journal;
-+
-+      if (ext3_orphan_del(handle, old_inode) < 0) {
-+              ext3_orphan_del(handle, new_inode);
-+              iput(new_inode);
-+              goto out_journal;
-+      }
-+
-+      ext3_journal_stop(handle, old_inode);
-+
-+      spin_lock(&sbi->s_delete_lock);
-+      J_ASSERT(list_empty(&new_inode->i_dentry));
-+      list_add_tail(&new_inode->i_dentry, &sbi->s_delete_list);
-+      sbi->s_delete_blocks += blocks;
-+      sbi->s_delete_inodes++;
-+      spin_unlock(&sbi->s_delete_lock);
-+
-+      ext3_debug("delete inode %lu (%lu blocks) by thread\n",
-+                 new_inode->i_ino, blocks);
-+
-+      wake_up(&sbi->s_delete_thread_queue);
-+      return;
-+
-+out_journal:
-+      ext3_journal_stop(handle, old_inode);
-+out_truncate:
-+      ext3_truncate(old_inode);
-+}
-+#endif /* EXT3_DELETE_THREAD */
-+
- /* 
-  * On success, We end up with an outstanding reference count against
-  * iloc->bh.  This _must_ be cleaned up later. 
-Index: linux-2.4.20/fs/ext3/file.c
-===================================================================
---- linux-2.4.20.orig/fs/ext3/file.c   2004-01-12 20:13:36.000000000 +0300
-+++ linux-2.4.20/fs/ext3/file.c        2004-01-13 16:55:45.000000000 +0300
-@@ -125,7 +125,11 @@
- };
- struct inode_operations ext3_file_inode_operations = {
-+#ifdef EXT3_DELETE_THREAD
-+      truncate:       ext3_truncate_thread,   /* BKL held */
-+#else
-       truncate:       ext3_truncate,          /* BKL held */
-+#endif
-       setattr:        ext3_setattr,           /* BKL held */
-       setxattr:       ext3_setxattr,          /* BKL held */
-       getxattr:       ext3_getxattr,          /* BKL held */
-Index: linux-2.4.20/fs/buffer.c
-===================================================================
---- linux-2.4.20.orig/fs/buffer.c      2003-05-16 05:29:12.000000000 +0400
-+++ linux-2.4.20/fs/buffer.c   2004-01-13 16:55:45.000000000 +0300
-@@ -328,6 +328,8 @@
-       if (sb->s_dirt && sb->s_op && sb->s_op->write_super)
-               sb->s_op->write_super(sb);
-       unlock_super(sb);
-+      if (sb->s_op && sb->s_op->sync_fs)
-+              sb->s_op->sync_fs(sb);
-       unlock_kernel();
-       return sync_buffers(dev, 1);
-Index: linux-2.4.20/include/linux/ext3_fs.h
-===================================================================
---- linux-2.4.20.orig/include/linux/ext3_fs.h  2004-01-12 20:13:37.000000000 +0300
-+++ linux-2.4.20/include/linux/ext3_fs.h       2004-01-13 16:55:45.000000000 +0300
-@@ -193,6 +193,7 @@
-  */
- #define EXT3_STATE_JDATA              0x00000001 /* journaled data exists */
- #define EXT3_STATE_NEW                        0x00000002 /* inode is newly created */
-+#define EXT3_STATE_DELETE             0x00000010 /* deferred delete inode */
- /*
-  * ioctl commands
-@@ -320,6 +321,7 @@
- #define EXT3_MOUNT_UPDATE_JOURNAL     0x1000  /* Update the journal format */
- #define EXT3_MOUNT_NO_UID32           0x2000  /* Disable 32-bit UIDs */
- #define EXT3_MOUNT_XATTR_USER         0x4000  /* Extended user attributes */
-+#define EXT3_MOUNT_ASYNCDEL           0x20000 /* Delayed deletion */
- /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
- #ifndef _LINUX_EXT2_FS_H
-@@ -696,6 +698,9 @@
- extern void ext3_dirty_inode(struct inode *);
- extern int ext3_change_inode_journal_flag(struct inode *, int);
- extern void ext3_truncate (struct inode *);
-+#ifdef EXT3_DELETE_THREAD
-+extern void ext3_truncate_thread(struct inode *inode);
-+#endif
- /* ioctl.c */
- extern int ext3_ioctl (struct inode *, struct file *, unsigned int,
-Index: linux-2.4.20/include/linux/ext3_fs_sb.h
-===================================================================
---- linux-2.4.20.orig/include/linux/ext3_fs_sb.h       2004-01-12 20:13:37.000000000 +0300
-+++ linux-2.4.20/include/linux/ext3_fs_sb.h    2004-01-13 16:55:45.000000000 +0300
-@@ -29,6 +29,8 @@
- #define EXT3_MAX_GROUP_LOADED 8
-+#define EXT3_DELETE_THREAD
-+
- /*
-  * third extended-fs super-block data in memory
-  */
-@@ -76,6 +78,14 @@
-       struct timer_list turn_ro_timer;        /* For turning read-only (crash simulation) */
-       wait_queue_head_t ro_wait_queue;        /* For people waiting for the fs to go read-only */
- #endif
-+#ifdef EXT3_DELETE_THREAD
-+      spinlock_t s_delete_lock;
-+      struct list_head s_delete_list;
-+      unsigned long s_delete_blocks;
-+      unsigned long s_delete_inodes;
-+      wait_queue_head_t s_delete_thread_queue;
-+      wait_queue_head_t s_delete_waiter_queue;
-+#endif
- };
- #endif        /* _LINUX_EXT3_FS_SB */
-Index: linux-2.4.20/include/linux/fs.h
-===================================================================
---- linux-2.4.20.orig/include/linux/fs.h       2004-01-12 20:13:36.000000000 +0300
-+++ linux-2.4.20/include/linux/fs.h    2004-01-13 16:55:45.000000000 +0300
-@@ -917,6 +917,7 @@
-       void (*delete_inode) (struct inode *);
-       void (*put_super) (struct super_block *);
-       void (*write_super) (struct super_block *);
-+      int (*sync_fs) (struct super_block *);
-       void (*write_super_lockfs) (struct super_block *);
-       void (*unlockfs) (struct super_block *);
-       int (*statfs) (struct super_block *, struct statfs *);
diff --git a/lustre/kernel_patches/patches/ext3-ea-in-inode-2.4.18-chaos.patch b/lustre/kernel_patches/patches/ext3-ea-in-inode-2.4.18-chaos.patch
deleted file mode 100644 (file)
index b6dc0dd..0000000
+++ /dev/null
@@ -1,761 +0,0 @@
- fs/ext3/ialloc.c          |    6 
- fs/ext3/inode.c           |   10 
- fs/ext3/super.c           |    4 
- fs/ext3/xattr.c           |  598 +++++++++++++++++++++++++++++++++++++++++++++-
- include/linux/ext3_fs.h   |    2 
- include/linux/ext3_fs_i.h |    3 
- 6 files changed, 613 insertions(+), 10 deletions(-)
-
---- linux-2.4.18-chaos/fs/ext3/ialloc.c~ext3-ea-in-inode-2.4.18-chaos  2003-10-08 10:38:03.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/ialloc.c 2003-10-08 15:08:45.000000000 +0400
-@@ -586,6 +586,12 @@ repeat:
-       insert_inode_hash(inode);
-       inode->i_generation = sbi->s_next_generation++;
-+      if (EXT3_INODE_SIZE(inode->i_sb) > EXT3_GOOD_OLD_INODE_SIZE) {
-+              ei->i_extra_isize = sizeof(__u16)       /* i_extra_isize */
-+                              + sizeof(__u16);        /* i_pad1 */
-+      } else
-+              ei->i_extra_isize = 0;
-+
-       ei->i_state = EXT3_STATE_NEW;
-       err = ext3_get_inode_loc_new(inode, &iloc, 1);
-       if (err) goto fail;
---- linux-2.4.18-chaos/fs/ext3/inode.c~ext3-ea-in-inode-2.4.18-chaos   2003-10-08 10:38:03.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/inode.c  2003-10-08 15:08:45.000000000 +0400
-@@ -2459,6 +2459,11 @@ void ext3_read_inode(struct inode * inod
-               ei->i_data[block] = iloc.raw_inode->i_block[block];
-       INIT_LIST_HEAD(&ei->i_orphan);
-+      if (EXT3_INODE_SIZE(inode->i_sb) > EXT3_GOOD_OLD_INODE_SIZE)
-+              ei->i_extra_isize = le16_to_cpu(raw_inode->i_extra_isize);
-+      else
-+              ei->i_extra_isize = 0;
-+
-       brelse (iloc.bh);
-       if (S_ISREG(inode->i_mode)) {
-@@ -2523,6 +2528,8 @@ static int ext3_do_update_inode(handle_t
-               if (err)
-                       goto out_brelse;
-       }
-+      if (ei->i_state & EXT3_STATE_NEW)
-+              memset(raw_inode, 0, EXT3_INODE_SIZE(inode->i_sb));
-       raw_inode->i_mode = cpu_to_le16(inode->i_mode);
-       if(!(test_opt(inode->i_sb, NO_UID32))) {
-               raw_inode->i_uid_low = cpu_to_le16(low_16_bits(inode->i_uid));
-@@ -2606,6 +2613,9 @@ static int ext3_do_update_inode(handle_t
-       else for (block = 0; block < EXT3_N_BLOCKS; block++)
-               raw_inode->i_block[block] = ei->i_data[block];
-+      if (EXT3_INODE_SIZE(inode->i_sb) > EXT3_GOOD_OLD_INODE_SIZE)
-+              raw_inode->i_extra_isize = cpu_to_le16(ei->i_extra_isize);
-+
-       BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-       rc = ext3_journal_dirty_metadata(handle, bh);
-       if (!err)
---- linux-2.4.18-chaos/fs/ext3/xattr.c~ext3-ea-in-inode-2.4.18-chaos   2003-10-08 10:38:01.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/xattr.c  2003-10-12 16:16:44.000000000 +0400
-@@ -102,6 +102,9 @@
- static int ext3_xattr_set2(handle_t *, struct inode *, struct buffer_head *,
-                          struct ext3_xattr_header *);
-+int ext3_xattr_block_set(handle_t *, struct inode *, int, const char *,
-+                      void *, size_t, int);
-+
- #ifdef CONFIG_EXT3_FS_XATTR_SHARING
- static int ext3_xattr_cache_insert(struct buffer_head *);
-@@ -362,17 +365,12 @@ ext3_removexattr(struct dentry *dentry, 
- }
- /*
-- * ext3_xattr_get()
-- *
-- * Copy an extended attribute into the buffer
-- * provided, or compute the buffer size required.
-- * Buffer is NULL to compute the size of the buffer required.
-+ * ext3_xattr_block_get()
-  *
-- * Returns a negative error number on failure, or the number of bytes
-- * used / required on success.
-+ * routine looks for attribute in EA block and returns it's value and size
-  */
- int
--ext3_xattr_get(struct inode *inode, int name_index, const char *name,
-+ext3_xattr_block_get(struct inode *inode, int name_index, const char *name,
-              void *buffer, size_t buffer_size)
- {
-       struct buffer_head *bh = NULL;
-@@ -461,6 +459,94 @@ cleanup:
- }
- /*
-+ * ext3_xattr_ibode_get()
-+ *
-+ * routine looks for attribute in inode body and returns it's value and size
-+ */
-+int
-+ext3_xattr_ibody_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t buffer_size)
-+{
-+      int size, name_len = strlen(name), storage_size;
-+      struct ext3_xattr_entry *last;
-+      struct ext3_inode *raw_inode;
-+      struct ext3_iloc iloc;
-+      char *start, *end;
-+      int ret = -ENOENT;
-+      
-+      if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
-+              return -ENOENT;
-+
-+      ret = ext3_get_inode_loc(inode, &iloc);
-+      if (ret)
-+              return ret;
-+      raw_inode = iloc.raw_inode;
-+
-+      storage_size = EXT3_SB(inode->i_sb)->s_inode_size -
-+                              EXT3_GOOD_OLD_INODE_SIZE -
-+                              EXT3_I(inode)->i_extra_isize -
-+                              sizeof(__u32);
-+      start = (char *) raw_inode + EXT3_GOOD_OLD_INODE_SIZE +
-+                      EXT3_I(inode)->i_extra_isize;
-+      if (le32_to_cpu((*(__u32*) start)) != EXT3_XATTR_MAGIC) {
-+              brelse(iloc.bh);
-+              return -ENOENT;
-+      }
-+      start += sizeof(__u32);
-+      end = (char *) raw_inode + EXT3_SB(inode->i_sb)->s_inode_size;
-+
-+      last = (struct ext3_xattr_entry *) start;
-+      while (!IS_LAST_ENTRY(last)) {
-+              struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(last);
-+              if (le32_to_cpu(last->e_value_size) > storage_size ||
-+                              (char *) next >= end) {
-+                      ext3_error(inode->i_sb, "ext3_xattr_ibody_get",
-+                              "inode %ld", inode->i_ino);
-+                      brelse(iloc.bh);
-+                      return -EIO;
-+              }
-+              if (name_index == last->e_name_index &&
-+                  name_len == last->e_name_len &&
-+                  !memcmp(name, last->e_name, name_len))
-+                      goto found;
-+              last = next;
-+      }
-+
-+      /* can't find EA */
-+      brelse(iloc.bh);
-+      return -ENOENT;
-+      
-+found:
-+      size = le32_to_cpu(last->e_value_size);
-+      if (buffer) {
-+              ret = -ERANGE;
-+              if (buffer_size >= size) {
-+                      memcpy(buffer, start + le16_to_cpu(last->e_value_offs),
-+                      size);
-+                      ret = size;
-+              }
-+      } else
-+              ret = size;
-+      brelse(iloc.bh);
-+      return ret;
-+}
-+
-+int ext3_xattr_get(struct inode *inode, int name_index, const char *name,
-+                      void *buffer, size_t buffer_size)
-+{
-+      int err;
-+
-+      /* try to find attribute in inode body */
-+      err = ext3_xattr_ibody_get(inode, name_index, name,
-+                                      buffer, buffer_size);
-+      if (err < 0)
-+              /* search was unsuccessful, try to find EA in dedicated block */
-+              err = ext3_xattr_block_get(inode, name_index, name,
-+                              buffer, buffer_size);
-+      return err;
-+}
-+
-+/*
-  * ext3_xattr_list()
-  *
-  * Copy a list of attribute names into the buffer
-@@ -471,7 +557,7 @@ cleanup:
-  * used / required on success.
-  */
- int
--ext3_xattr_list(struct inode *inode, char *buffer, size_t buffer_size)
-+ext3_xattr_block_list(struct inode *inode, char *buffer, size_t buffer_size)
- {
-       struct buffer_head *bh = NULL;
-       struct ext3_xattr_entry *entry;
-@@ -547,6 +633,131 @@ cleanup:
-       return error;
- }
-+/* ext3_xattr_ibody_list()
-+ *
-+ * generate list of attributes stored in inode body
-+ */
-+int
-+ext3_xattr_ibody_list(struct inode *inode, char *buffer, size_t buffer_size)
-+{
-+      struct ext3_xattr_entry *last;
-+      struct ext3_inode *raw_inode;
-+      char *start, *end, *buf;
-+      struct ext3_iloc iloc;
-+      int storage_size;
-+      int ret;
-+      int size = 0;
-+      
-+      if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
-+              return 0;
-+
-+      ret = ext3_get_inode_loc(inode, &iloc);
-+      if (ret)
-+              return ret;
-+      raw_inode = iloc.raw_inode;
-+
-+      storage_size = EXT3_SB(inode->i_sb)->s_inode_size -
-+                              EXT3_GOOD_OLD_INODE_SIZE -
-+                              EXT3_I(inode)->i_extra_isize -
-+                              sizeof(__u32);
-+      start = (char *) raw_inode + EXT3_GOOD_OLD_INODE_SIZE +
-+                      EXT3_I(inode)->i_extra_isize;
-+      if (le32_to_cpu((*(__u32*) start)) != EXT3_XATTR_MAGIC) {
-+              brelse(iloc.bh);
-+              return 0;
-+      }
-+      start += sizeof(__u32);
-+      end = (char *) raw_inode + EXT3_SB(inode->i_sb)->s_inode_size;
-+
-+      last = (struct ext3_xattr_entry *) start;
-+      while (!IS_LAST_ENTRY(last)) {
-+              struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(last);
-+              struct ext3_xattr_handler *handler;
-+              if (le32_to_cpu(last->e_value_size) > storage_size ||
-+                              (char *) next >= end) {
-+                      ext3_error(inode->i_sb, "ext3_xattr_ibody_list",
-+                              "inode %ld", inode->i_ino);
-+                      brelse(iloc.bh);
-+                      return -EIO;
-+              }
-+              handler = ext3_xattr_handler(last->e_name_index);
-+              if (handler)
-+                      size += handler->list(NULL, inode, last->e_name,
-+                                            last->e_name_len);
-+              last = next;
-+      }
-+
-+      if (!buffer) {
-+              ret = size;
-+              goto cleanup;
-+      } else {
-+              ret = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+      }
-+
-+      last = (struct ext3_xattr_entry *) start;
-+      buf = buffer;
-+      while (!IS_LAST_ENTRY(last)) {
-+              struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(last);
-+              struct ext3_xattr_handler *handler;
-+              handler = ext3_xattr_handler(last->e_name_index);
-+              if (handler)
-+                      buf += handler->list(buf, inode, last->e_name,
-+                                            last->e_name_len);
-+              last = next;
-+      }
-+      ret = size;
-+cleanup:
-+      brelse(iloc.bh);
-+      return ret;
-+}
-+
-+/*
-+ * ext3_xattr_list()
-+ *
-+ * Copy a list of attribute names into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext3_xattr_list(struct inode *inode, char *buffer, size_t buffer_size)
-+{
-+      int error;
-+      int size = buffer_size;
-+
-+      /* get list of attributes stored in inode body */
-+      error = ext3_xattr_ibody_list(inode, buffer, buffer_size);
-+      if (error < 0) {
-+              /* some error occured while collecting
-+               * attributes in inode body */
-+              size = 0;
-+              goto cleanup;
-+      }
-+      size = error;
-+
-+      /* get list of attributes stored in dedicated block */
-+      if (buffer) {
-+              buffer_size -= error;
-+              if (buffer_size <= 0) {
-+                      buffer = NULL;
-+                      buffer_size = 0;
-+              } else
-+                      buffer += error;
-+      }
-+
-+      error = ext3_xattr_block_list(inode, buffer, buffer_size);
-+      if (error < 0)
-+              /* listing was successful, so we return len */
-+              size = 0;
-+
-+cleanup:
-+      return error + size;
-+}
-+
- /*
-  * If the EXT3_FEATURE_COMPAT_EXT_ATTR feature of this file system is
-  * not set, set it.
-@@ -570,6 +781,279 @@ static void ext3_xattr_update_super_bloc
- }
- /*
-+ * ext3_xattr_ibody_find()
-+ *
-+ * search attribute and calculate free space in inode body
-+ * NOTE: free space includes space our attribute hold
-+ */
-+int
-+ext3_xattr_ibody_find(struct inode *inode, int name_index,
-+              const char *name, struct ext3_xattr_entry *rentry, int *free)
-+{
-+      struct ext3_xattr_entry *last;
-+      struct ext3_inode *raw_inode;
-+      int name_len = strlen(name);
-+      int err, storage_size;
-+      struct ext3_iloc iloc;
-+      char *start, *end;
-+      int ret = -ENOENT;
-+      
-+      if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
-+              return ret;
-+
-+      err = ext3_get_inode_loc(inode, &iloc);
-+      if (err)
-+              return -EIO;
-+      raw_inode = iloc.raw_inode;
-+
-+      storage_size = EXT3_SB(inode->i_sb)->s_inode_size -
-+                              EXT3_GOOD_OLD_INODE_SIZE -
-+                              EXT3_I(inode)->i_extra_isize -
-+                              sizeof(__u32);
-+      *free = storage_size - sizeof(__u32);
-+      start = (char *) raw_inode + EXT3_GOOD_OLD_INODE_SIZE +
-+                      EXT3_I(inode)->i_extra_isize;
-+      if (le32_to_cpu((*(__u32*) start)) != EXT3_XATTR_MAGIC) {
-+              brelse(iloc.bh);
-+              return -ENOENT;
-+      }
-+      start += sizeof(__u32);
-+      end = (char *) raw_inode + EXT3_SB(inode->i_sb)->s_inode_size;
-+
-+      last = (struct ext3_xattr_entry *) start;
-+      while (!IS_LAST_ENTRY(last)) {
-+              struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(last);
-+              if (le32_to_cpu(last->e_value_size) > storage_size ||
-+                              (char *) next >= end) {
-+                      ext3_error(inode->i_sb, "ext3_xattr_ibody_find",
-+                              "inode %ld", inode->i_ino);
-+                      brelse(iloc.bh);
-+                      return -EIO;
-+              }
-+
-+              if (name_index == last->e_name_index &&
-+                  name_len == last->e_name_len &&
-+                  !memcmp(name, last->e_name, name_len)) {
-+                      memcpy(rentry, last, sizeof(struct ext3_xattr_entry));
-+                      ret = 0;
-+              } else {
-+                      *free -= EXT3_XATTR_LEN(last->e_name_len);
-+                      *free -= le32_to_cpu(last->e_value_size);
-+              }
-+              last = next;
-+      }
-+      
-+      brelse(iloc.bh);
-+      return ret;
-+}
-+
-+/*
-+ * ext3_xattr_block_find()
-+ *
-+ * search attribute and calculate free space in EA block (if it allocated)
-+ * NOTE: free space includes space our attribute hold
-+ */
-+int
-+ext3_xattr_block_find(struct inode *inode, int name_index, const char *name,
-+             struct ext3_xattr_entry *rentry, int *free)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_entry *entry;
-+      char *end;
-+      int name_len, error = -ENOENT;
-+
-+      if (!EXT3_I(inode)->i_file_acl) {
-+              *free = inode->i_sb->s_blocksize -
-+                      sizeof(struct ext3_xattr_header) -
-+                      sizeof(__u32);
-+              return -ENOENT;
-+      }
-+      ea_idebug(inode, "reading block %d", EXT3_I(inode)->i_file_acl);
-+      bh = sb_bread(inode->i_sb, EXT3_I(inode)->i_file_acl);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext3_error(inode->i_sb, "ext3_xattr_get",
-+                      "inode %ld: bad block %d", inode->i_ino,
-+                      EXT3_I(inode)->i_file_acl);
-+              brelse(bh);
-+              return -EIO;
-+      }
-+      /* find named attribute */
-+      name_len = strlen(name);
-+      *free = bh->b_size - sizeof(__u32);
-+
-+      entry = FIRST_ENTRY(bh);
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              if (name_index == entry->e_name_index &&
-+                  name_len == entry->e_name_len &&
-+                  memcmp(name, entry->e_name, name_len) == 0) {
-+                      memcpy(rentry, entry, sizeof(struct ext3_xattr_entry));
-+                      error = 0;
-+              } else {
-+                      *free -= EXT3_XATTR_LEN(entry->e_name_len);
-+                      *free -= le32_to_cpu(entry->e_value_size);
-+              }
-+              entry = next;
-+      }
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_inode_set()
-+ *
-+ * this routine add/remove/replace attribute in inode body
-+ */
-+int
-+ext3_xattr_ibody_set(handle_t *handle, struct inode *inode, int name_index,
-+                    const char *name, const void *value, size_t value_len,
-+                    int flags)
-+{
-+      struct ext3_xattr_entry *last, *next, *here = NULL;
-+      struct ext3_inode *raw_inode;
-+      int name_len = strlen(name);
-+      int esize = EXT3_XATTR_LEN(name_len);
-+      struct buffer_head *bh;
-+      int err, storage_size;
-+      struct ext3_iloc iloc;
-+      int free, min_offs;
-+      char *start, *end;
-+      
-+      if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
-+              return -ENOSPC;
-+
-+      err = ext3_get_inode_loc(inode, &iloc);
-+      if (err)
-+              return err;
-+      raw_inode = iloc.raw_inode;
-+      bh = iloc.bh;
-+
-+      storage_size = EXT3_SB(inode->i_sb)->s_inode_size -
-+                              EXT3_GOOD_OLD_INODE_SIZE -
-+                              EXT3_I(inode)->i_extra_isize -
-+                              sizeof(__u32);
-+      start = (char *) raw_inode + EXT3_GOOD_OLD_INODE_SIZE +
-+                      EXT3_I(inode)->i_extra_isize;
-+      if ((*(__u32*) start) != EXT3_XATTR_MAGIC) {
-+              /* inode had no attributes before */
-+              *((__u32*) start) = cpu_to_le32(EXT3_XATTR_MAGIC);
-+      }
-+      start += sizeof(__u32);
-+      end = (char *) raw_inode + EXT3_SB(inode->i_sb)->s_inode_size;
-+      min_offs = storage_size;
-+      free = storage_size - sizeof(__u32);
-+
-+      last = (struct ext3_xattr_entry *) start;       
-+      while (!IS_LAST_ENTRY(last)) {
-+              next = EXT3_XATTR_NEXT(last);
-+              if (le32_to_cpu(last->e_value_size) > storage_size ||
-+                              (char *) next >= end) {
-+                      ext3_error(inode->i_sb, "ext3_xattr_ibody_set",
-+                              "inode %ld", inode->i_ino);
-+                      brelse(bh);
-+                      return -EIO;
-+              }
-+              
-+              if (last->e_value_size) {
-+                      int offs = le16_to_cpu(last->e_value_offs);
-+                      if (offs < min_offs)
-+                              min_offs = offs;
-+              }
-+              if (name_index == last->e_name_index &&
-+                      name_len == last->e_name_len &&
-+                      !memcmp(name, last->e_name, name_len))
-+                      here = last;
-+              else {
-+                      /* we calculate all but our attribute
-+                       * because it will be removed before changing */
-+                      free -= EXT3_XATTR_LEN(last->e_name_len);
-+                      free -= le32_to_cpu(last->e_value_size);
-+              }
-+              last = next;
-+      }
-+
-+      if (value && (esize + value_len > free)) {
-+              brelse(bh);
-+              return -ENOSPC;
-+      }
-+      
-+      err = ext3_reserve_inode_write(handle, inode, &iloc);
-+      if (err) {
-+              brelse(bh);     
-+              return err;
-+      }
-+
-+      if (here) {
-+              /* time to remove old value */
-+              struct ext3_xattr_entry *e;
-+              int size = le32_to_cpu(here->e_value_size);
-+              int border = le16_to_cpu(here->e_value_offs);
-+              char *src;
-+
-+              /* move tail */
-+              memmove(start + min_offs + size, start + min_offs,
-+                              border - min_offs);
-+
-+              /* recalculate offsets */
-+              e = (struct ext3_xattr_entry *) start;
-+              while (!IS_LAST_ENTRY(e)) {
-+                      struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(e);
-+                      int offs = le16_to_cpu(e->e_value_offs);
-+                      if (offs < border)
-+                              e->e_value_offs =
-+                                      cpu_to_le16(offs + size);
-+                      e = next;
-+              }
-+              min_offs += size;
-+
-+              /* remove entry */
-+              border = EXT3_XATTR_LEN(here->e_name_len);
-+              src = (char *) here + EXT3_XATTR_LEN(here->e_name_len);
-+              size = (char *) last - src;
-+              if ((char *) here + size > end)
-+                      printk("ALERT at %s:%d: 0x%p + %d > 0x%p\n",
-+                                      __FILE__, __LINE__, here, size, end);
-+              memmove(here, src, size);
-+              last = (struct ext3_xattr_entry *) ((char *) last - border);
-+              *((__u32 *) last) = 0;
-+      }
-+      
-+      if (value) {
-+              int offs = min_offs - value_len;
-+              /* use last to create new entry */
-+              last->e_name_len = strlen(name);
-+              last->e_name_index = name_index;
-+              last->e_value_offs = cpu_to_le16(offs);
-+              last->e_value_size = cpu_to_le32(value_len);
-+              last->e_hash = last->e_value_block = 0;
-+              memset(last->e_name, 0, esize);
-+              memcpy(last->e_name, name, last->e_name_len);
-+              if (start + offs + value_len > end)
-+                      printk("ALERT at %s:%d: 0x%p + %d + %d > 0x%p\n",
-+                                      __FILE__, __LINE__, start, offs,
-+                                      value_len, end);
-+              memcpy(start + offs, value, value_len);
-+              last = EXT3_XATTR_NEXT(last);
-+              *((__u32 *) last) = 0;
-+      }
-+      
-+      ext3_mark_iloc_dirty(handle, inode, &iloc);
-+      brelse(bh);
-+
-+      return 0;
-+}
-+
-+/*
-  * ext3_xattr_set()
-  *
-  * Create, replace or remove an extended attribute for this inode. Buffer
-@@ -583,6 +1067,101 @@ static void ext3_xattr_update_super_bloc
-  */
- int
- ext3_xattr_set(handle_t *handle, struct inode *inode, int name_index,
-+              const char *name, void *value, size_t value_len, int flags)
-+{
-+      struct ext3_xattr_entry entry;
-+      int err, where = 0, found = 0, total;
-+      int free1 = -1, free2 = -1;
-+      int name_len;
-+      
-+      ea_idebug(inode, "name=%d.%s, value=%p, value_len=%ld",
-+                name_index, name, value, (long)value_len);
-+
-+      if (IS_RDONLY(inode))
-+              return -EROFS;
-+      if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
-+              return -EPERM;
-+      if (value == NULL)
-+              value_len = 0;
-+      if (name == NULL)
-+              return -EINVAL;
-+      name_len = strlen(name);
-+      if (name_len > 255 || value_len > inode->i_sb->s_blocksize)
-+              return -ERANGE;
-+
-+      /* try to find attribute in inode body */
-+      err = ext3_xattr_ibody_find(inode, name_index, name, &entry, &free1);
-+      if (err == 0) {
-+              /* found EA in inode */
-+              found = 1;
-+              where = 0;
-+      } else if (err == -ENOENT) {
-+              /* there is no such attribute in inode body */
-+              /* try to find attribute in dedicated block */
-+              err = ext3_xattr_block_find(inode, name_index, name,
-+                                              &entry, &free2);
-+              if (err != 0 && err != -ENOENT) {
-+                      /* not found EA in block */
-+                      goto finish;    
-+              } else if (err == 0) {
-+                      /* found EA in block */
-+                      where = 1;
-+                      found = 1;
-+              }
-+      } else
-+              goto finish;
-+
-+      /* check flags: may replace? may create ? */
-+      if (found && (flags & XATTR_CREATE)) {
-+              err = -EEXIST;
-+              goto finish;
-+      } else if (!found && (flags & XATTR_REPLACE)) {
-+              err = -ENODATA;
-+              goto finish;
-+      }
-+
-+      /* check if we have enough space to store attribute */
-+      total = EXT3_XATTR_LEN(strlen(name)) + value_len;
-+      if (free1 >= 0 && total > free1 && free2 >= 0 && total > free2) {
-+              /* have no enough space */
-+              err = -ENOSPC;
-+              goto finish;
-+      }
-+      
-+      /* time to remove attribute */
-+      if (found) {
-+              if (where == 0) {
-+                      /* EA is stored in inode body */
-+                      ext3_xattr_ibody_set(handle, inode, name_index, name,
-+                                      NULL, 0, flags);
-+              } else {
-+                      /* EA is stored in separated block */
-+                      ext3_xattr_block_set(handle, inode, name_index, name,
-+                                      NULL, 0, flags);
-+              }
-+      }
-+
-+      /* try to store EA in inode body */
-+      err = ext3_xattr_ibody_set(handle, inode, name_index, name,
-+                              value, value_len, flags);
-+      if (err) {
-+              /* can't store EA in inode body */
-+              /* try to store in block */
-+              err = ext3_xattr_block_set(handle, inode, name_index,
-+                                      name, value, value_len, flags); 
-+      }
-+
-+finish:       
-+      return err;
-+}
-+
-+/*
-+ * ext3_xattr_block_set()
-+ *
-+ * this routine add/remove/replace attribute in EA block
-+ */
-+int
-+ext3_xattr_block_set(handle_t *handle, struct inode *inode, int name_index,
-              const char *name, void *value, size_t value_len, int flags)
- {
-       struct super_block *sb = inode->i_sb;
-@@ -619,6 +1197,7 @@ ext3_xattr_set(handle_t *handle, struct 
-       name_len = strlen(name);
-       if (name_len > 255 || value_len > sb->s_blocksize)
-               return -ERANGE;
-+
-       ext3_xattr_lock();
-       if (EXT3_I(inode)->i_file_acl) {
-@@ -819,6 +1398,7 @@ cleanup:
-       brelse(bh);
-       if (!(bh && header == HDR(bh)))
-               kfree(header);
-+
-       ext3_xattr_unlock();
-       return error;
---- linux-2.4.18-chaos/include/linux/ext3_fs.h~ext3-ea-in-inode-2.4.18-chaos   2003-10-08 10:38:03.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/linux/ext3_fs.h  2003-10-08 15:08:45.000000000 +0400
-@@ -264,6 +264,8 @@ struct ext3_inode {
-                       __u32   m_i_reserved2[2];
-               } masix2;
-       } osd2;                         /* OS dependent 2 */
-+      __u16   i_extra_isize;
-+      __u16   i_pad1;
- };
- #define i_size_high   i_dir_acl
---- linux-2.4.18-chaos/include/linux/ext3_fs_i.h~ext3-ea-in-inode-2.4.18-chaos 2003-10-08 10:38:03.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/linux/ext3_fs_i.h        2003-10-08 15:08:45.000000000 +0400
-@@ -62,6 +62,9 @@ struct ext3_inode_info {
-        */
-       loff_t  i_disksize;
-+      /* on-disk additional length */
-+      __u16 i_extra_isize;
-+
-       /*
-        * truncate_sem is for serialising ext3_truncate() against
-        * ext3_getblock().  In the 2.4 ext2 design, great chunks of inode's
---- linux-2.4.18-chaos/fs/ext3/super.c~ext3-ea-in-inode-2.4.18-chaos   2003-10-08 10:38:03.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/super.c  2003-10-08 15:08:45.000000000 +0400
-@@ -1292,7 +1292,9 @@ struct super_block * ext3_read_super (st
-       } else {
-               sbi->s_inode_size = le16_to_cpu(es->s_inode_size);
-               sbi->s_first_ino = le32_to_cpu(es->s_first_ino);
--              if (sbi->s_inode_size != EXT3_GOOD_OLD_INODE_SIZE) {
-+              if ((sbi->s_inode_size < EXT3_GOOD_OLD_INODE_SIZE) ||
-+                  (sbi->s_inode_size & (sbi->s_inode_size - 1)) ||
-+                  (sbi->s_inode_size > blocksize)) {
-                       printk (KERN_ERR
-                               "EXT3-fs: unsupported inode size: %d\n",
-                               sbi->s_inode_size);
-
-_
index 39fa9ce..997cc1e 100644 (file)
@@ -113,7 +113,7 @@ Index: linux-2.6.0/fs/ext3/xattr.c
 +      if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
 +              return -ENOENT;
 +
-+      ret = ext3_get_inode_loc(inode, &iloc);
++      ret = ext3_get_inode_loc(inode, &iloc, 1);
 +      if (ret)
 +              return ret;
 +      raw_inode = ext3_raw_inode(&iloc);
@@ -215,15 +215,6 @@ Index: linux-2.6.0/fs/ext3/xattr.c
        error = 0;
        if (!EXT3_I(inode)->i_file_acl)
                goto cleanup;
-@@ -380,7 +469,7 @@
-       if (!bh)
-               goto cleanup;
-       ea_bdebug(bh, "b_count=%d, refcount=%d",
--              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+              (int) atomic_read(&(bh->b_count)), (int) le32_to_cpu(HDR(bh)->h_refcount));
-       end = bh->b_data + bh->b_size;
-       if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-           HDR(bh)->h_blocks != cpu_to_le32(1)) {
 @@ -431,11 +520,138 @@
  
  cleanup:
@@ -251,7 +242,7 @@ Index: linux-2.6.0/fs/ext3/xattr.c
 +      if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
 +              return 0;
 +
-+      ret = ext3_get_inode_loc(inode, &iloc);
++      ret = ext3_get_inode_loc(inode, &iloc, 1);
 +      if (ret)
 +              return ret;
 +      raw_inode = ext3_raw_inode(&iloc);
@@ -388,7 +379,7 @@ Index: linux-2.6.0/fs/ext3/xattr.c
 +      if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
 +              return ret;
 +
-+      err = ext3_get_inode_loc(inode, &iloc);
++      err = ext3_get_inode_loc(inode, &iloc, 1);
 +      if (err)
 +              return -EIO;
 +      raw_inode = ext3_raw_inode(&iloc);
@@ -519,7 +510,7 @@ Index: linux-2.6.0/fs/ext3/xattr.c
 +      if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
 +              return -ENOSPC;
 +
-+      err = ext3_get_inode_loc(inode, &iloc);
++      err = ext3_get_inode_loc(inode, &iloc, 1);
 +      if (err)
 +              return err;
 +      raw_inode = ext3_raw_inode(&iloc);
@@ -807,6 +798,14 @@ Index: linux-2.6.0/include/linux/ext3_fs.h
  };
  
  #define i_size_high   i_dir_acl
+@@ -721,6 +723,7 @@
+ extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
+ extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
+ extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
++int ext3_get_inode_loc(struct inode *inode, struct ext3_iloc *iloc, int in_mem);
+ extern void ext3_read_inode (struct inode *);
+ extern void ext3_write_inode (struct inode *, int);
 Index: linux-2.6.0/include/linux/ext3_fs_i.h
 ===================================================================
 --- linux-2.6.0.orig/include/linux/ext3_fs_i.h 2003-12-30 08:32:44.000000000 +0300
diff --git a/lustre/kernel_patches/patches/ext3-extents-2.4.18-chaos-pdirops.patch b/lustre/kernel_patches/patches/ext3-extents-2.4.18-chaos-pdirops.patch
deleted file mode 100644 (file)
index 592af93..0000000
+++ /dev/null
@@ -1,1891 +0,0 @@
- fs/ext3/Makefile           |    3 
- fs/ext3/extents.c          | 1624 +++++++++++++++++++++++++++++++++++++++++++++
- fs/ext3/ialloc.c           |    4 
- fs/ext3/inode.c            |   30 
- fs/ext3/super.c            |    8 
- include/linux/ext3_fs.h    |   18 
- include/linux/ext3_fs_i.h  |    4 
- include/linux/ext3_fs_sb.h |   10 
- 8 files changed, 1693 insertions(+), 8 deletions(-)
-
---- /dev/null  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.18-chaos-pdirops-alexey/fs/ext3/extents.c        2003-09-23 18:09:30.000000000 +0400
-@@ -0,0 +1,1624 @@
-+/*
-+ *
-+ * linux/fs/ext3/extents.c
-+ *
-+ * Extents support for EXT3
-+ *
-+ * 07/08/2003    Alex Tomas <bzzz@tmi.comex.ru>
-+ * 
-+ * TODO:
-+ *   - ext3*_error() should be used in some situations
-+ *   - find_goal() [to be tested and improved]
-+ *   - error handling
-+ *   - we could leak allocated block in some error cases
-+ *   - quick search for index/leaf in ext3_ext_find_extent()
-+ *   - tree reduction
-+ *   - cache last found extent
-+ *   - arch-independent
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/fs.h>
-+#include <linux/time.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/jbd.h>
-+#include <linux/smp_lock.h>
-+#include <linux/highuid.h>
-+#include <linux/pagemap.h>
-+#include <linux/quotaops.h>
-+#include <linux/string.h>
-+#include <linux/slab.h>
-+#include <linux/locks.h>
-+
-+/*
-+ * with AGRESSIVE_TEST defined capacity of index/leaf blocks
-+ * become very little, so index split, in-depth growing and
-+ * other hard changes happens much more often
-+ * this is for debug purposes only
-+ */
-+#define AGRESSIVE_TEST_
-+
-+/*
-+ * if EXT_DEBUG defined you can use 'extdebug' mount option
-+ * to get lots of info what's going on
-+ */
-+#define EXT_DEBUG
-+#ifdef EXT_DEBUG
-+#define ext_debug(inode,fmt,a...)             \
-+do {                                          \
-+      if (test_opt((inode)->i_sb, EXTDEBUG))  \
-+              printk(fmt, ##a);               \
-+} while (0);
-+#else
-+#define ext_debug(inode,fmt,a...)
-+#endif
-+
-+#define EXT3_ALLOC_NEEDED     2       /* block bitmap + group descriptor */
-+
-+/*
-+ * ext3_inode has i_block array (total 60 bytes)
-+ * first 4 bytes are used to store:
-+ *  - tree depth (0 mean there is no tree yet. all extents in the inode)
-+ *  - number of alive extents in the inode
-+ */
-+
-+/*
-+ * this is extent on-disk structure
-+ * it's used at the bottom of the tree
-+ */
-+struct ext3_extent {
-+      __u32   e_block;        /* first logical block extent covers */
-+      __u32   e_start;        /* first physical block extents lives */
-+      __u32   e_num;          /* number of blocks covered by extent */
-+};
-+
-+/*
-+ * this is index on-disk structure
-+ * it's used at all the levels, but the bottom
-+ */
-+struct ext3_extent_idx {
-+      __u32   e_block;        /* index covers logical blocks from 'block' */
-+      __u32   e_leaf;         /* pointer to the physical block of the next *
-+                               * level. leaf or next index could bet here */
-+};
-+
-+/*
-+ * each block (leaves and indexes), even inode-stored has header
-+ */
-+struct ext3_extent_header {   
-+      __u16   e_num;          /* number of valid entries */
-+      __u16   e_max;          /* capacity of store in entries */
-+};
-+
-+/*
-+ * array of ext3_ext_path contains path to some extent
-+ * creation/lookup routines use it for traversal/splitting/etc
-+ * truncate uses it to simulate recursive walking
-+ */
-+struct ext3_ext_path {
-+      __u32                           p_block;
-+      __u16                           p_depth;
-+      struct ext3_extent              *p_ext;
-+      struct ext3_extent_idx          *p_idx;
-+      struct ext3_extent_header       *p_hdr;
-+      struct buffer_head              *p_bh;
-+};
-+
-+#define EXT_FIRST_EXTENT(__hdr__) \
-+      ((struct ext3_extent *) (((char *) (__hdr__)) +         \
-+                               sizeof(struct ext3_extent_header)))
-+#define EXT_FIRST_INDEX(__hdr__) \
-+      ((struct ext3_extent_idx *) (((char *) (__hdr__)) +     \
-+                                   sizeof(struct ext3_extent_header)))
-+#define EXT_HAS_FREE_INDEX(__path__) \
-+      ((__path__)->p_hdr->e_num < (__path__)->p_hdr->e_max)
-+#define EXT_LAST_EXTENT(__hdr__) \
-+      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->e_num - 1)
-+#define EXT_LAST_INDEX(__hdr__) \
-+      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->e_num - 1)
-+#define EXT_MAX_EXTENT(__hdr__) \
-+      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->e_max - 1)
-+#define EXT_MAX_INDEX(__hdr__) \
-+      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->e_max - 1)
-+
-+
-+#define EXT_ASSERT(__x__) if (!(__x__)) BUG();
-+
-+/*
-+ * could return:
-+ *  - EROFS
-+ *  - ENOMEM
-+ */
-+static int ext3_ext_get_access(handle_t *handle, struct inode *inode,
-+                              struct ext3_ext_path *path)
-+{
-+      if (path->p_bh) {
-+              /* path points to block */
-+              return ext3_journal_get_write_access(handle, path->p_bh);
-+      }
-+
-+      /* path points to leaf/index in inode body */
-+      return 0;
-+}
-+
-+/*
-+ * could return:
-+ *  - EROFS
-+ *  - ENOMEM
-+ *  - EIO
-+ */
-+static int ext3_ext_dirty(handle_t *handle, struct inode *inode,
-+                              struct ext3_ext_path *path)
-+{
-+      if (path->p_bh) {
-+              /* path points to block */
-+              return ext3_journal_dirty_metadata(handle, path->p_bh);
-+      }
-+
-+      /* path points to leaf/index in inode body */
-+      return ext3_mark_inode_dirty(handle, inode);
-+}
-+
-+static inline int ext3_ext_space_block(struct inode *inode)
-+{
-+      int size;
-+
-+      size = (inode->i_sb->s_blocksize - sizeof(struct ext3_extent_header))
-+              / sizeof(struct ext3_extent);
-+#ifdef AGRESSIVE_TEST
-+      size = 6; /* FIXME: for debug, remove this line */
-+#endif
-+      return size;
-+}
-+
-+static inline int ext3_ext_space_inode(struct inode *inode)
-+{
-+      int size;
-+
-+      size = (sizeof(EXT3_I(inode)->i_data) -
-+                      sizeof(struct ext3_extent_header))
-+                      / sizeof(struct ext3_extent);
-+#ifdef AGRESSIVE_TEST
-+      size = 3; /* FIXME: for debug, remove this line */
-+#endif
-+      return size;
-+}
-+
-+static inline int ext3_ext_space_inode_idx(struct inode *inode)
-+{
-+      int size;
-+
-+      size = (sizeof(EXT3_I(inode)->i_data) -
-+                      sizeof(struct ext3_extent_header))
-+                      / sizeof(struct ext3_extent_idx);
-+#ifdef AGRESSIVE_TEST
-+      size = 4; /* FIXME: for debug, remove this line */
-+#endif
-+      return size;
-+}
-+
-+static void ext3_ext_show_path(struct inode *inode, struct ext3_ext_path *path)
-+{
-+      int k, l = path->p_depth;
-+
-+      ext_debug(inode, "path:");
-+      for (k = 0; k <= l; k++, path++) {
-+              if (path->p_idx) {
-+                      ext_debug(inode, "  %d->%d", path->p_idx->e_block,
-+                                      path->p_idx->e_leaf);
-+              } else if (path->p_ext) {
-+                      ext_debug(inode, "  %d:%d:%d",
-+                                      path->p_ext->e_block,
-+                                      path->p_ext->e_start,
-+                                      path->p_ext->e_num);
-+              } else
-+                      ext_debug(inode, "  []");
-+      }
-+      ext_debug(inode, "\n");
-+}
-+
-+static void ext3_ext_show_leaf(struct inode *inode, struct ext3_ext_path *path)
-+{
-+      int depth = EXT3_I(inode)->i_depth;
-+      struct ext3_extent_header *eh = path[depth].p_hdr;
-+      struct ext3_extent *ex = EXT_FIRST_EXTENT(eh);
-+      int i;
-+
-+      for (i = 0; i < eh->e_num; i++, ex++) {
-+              ext_debug(inode, "%d:%d:%d ",
-+                              ex->e_block, ex->e_start, ex->e_num);
-+      }
-+      ext_debug(inode, "\n");
-+}
-+
-+static void ext3_ext_drop_refs(struct inode *inode, struct ext3_ext_path *path)
-+{
-+      int depth = path->p_depth;
-+      int i;
-+
-+      for (i = 0; i <= depth; i++, path++)
-+              if (path->p_bh) {
-+                      brelse(path->p_bh);
-+                      path->p_bh = NULL;
-+              }
-+}
-+
-+static int ext3_ext_find_goal(struct inode *inode, struct ext3_ext_path *path)
-+{
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+      unsigned long bg_start;
-+      unsigned long colour;
-+      int depth;
-+      
-+      if (path) {
-+              depth = path->p_depth;
-+              /* try to find previous block */
-+              if (path[depth].p_ext)
-+                      return path[depth].p_ext->e_start +
-+                              path[depth].p_ext->e_num - 1;
-+              
-+              /* it looks index is empty
-+               * try to find starting from index itself */
-+              if (path[depth].p_bh)
-+                      return path[depth].p_bh->b_blocknr;
-+      }
-+
-+      /* OK. use inode's group */
-+      bg_start = (ei->i_block_group * EXT3_BLOCKS_PER_GROUP(inode->i_sb)) +
-+              le32_to_cpu(EXT3_SB(inode->i_sb)->s_es->s_first_data_block);
-+      colour = (current->pid % 16) *
-+                      (EXT3_BLOCKS_PER_GROUP(inode->i_sb) / 16);
-+      return bg_start + colour;
-+}
-+
-+static struct ext3_ext_path *
-+ext3_ext_find_extent(struct inode *inode, int block, struct ext3_ext_path *path)
-+{
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+      struct ext3_extent_header *eh = (void *) ei->i_data;
-+      struct ext3_extent_idx *ix;
-+      struct buffer_head *bh;
-+      struct ext3_extent *ex;
-+      int depth, i, k, ppos = 0, prev = 0;
-+      
-+      eh = (struct ext3_extent_header *) ei->i_data;
-+
-+      /* initialize capacity of leaf in inode for first time */
-+      if (eh->e_max == 0)
-+              eh->e_max = ext3_ext_space_inode(inode);
-+      i = depth = ei->i_depth;
-+      EXT_ASSERT(i == 0 || eh->e_num > 0);
-+      
-+      /* account possible depth increase */
-+      if (!path) {
-+              path = kmalloc(sizeof(struct ext3_ext_path) * (depth + 2),
-+                              GFP_NOFS);
-+              if (!path)
-+                      return ERR_PTR(-ENOMEM);
-+      }
-+      memset(path, 0, sizeof(struct ext3_ext_path) * (depth + 1));
-+
-+      /* walk through the tree */
-+      while (i) {
-+              ext_debug(inode, "depth %d: num %d, max %d\n",
-+                              ppos, eh->e_num, eh->e_max);
-+              ix = EXT_FIRST_INDEX(eh);
-+              if (eh->e_num) {
-+                      EXT_ASSERT(prev == 0 || ix->e_block == prev);
-+                      path[ppos].p_idx = ix;
-+              }
-+              EXT_ASSERT(eh->e_num <= eh->e_max);
-+              for (k = 0; k < eh->e_num; k++, ix++) {
-+                      ext_debug(inode, "index: %d -> %d\n",
-+                                      ix->e_block, ix->e_leaf);
-+                      EXT_ASSERT((k == 0 && prev <= (int)ix->e_block) ||
-+                                      (k > 0 && prev < (int)ix->e_block));
-+                      if (block < ix->e_block)
-+                              break;
-+                      prev = ix->e_block;
-+                      path[ppos].p_idx = ix;
-+              }
-+              path[ppos].p_block = path[ppos].p_idx->e_leaf;
-+              path[ppos].p_depth = i;
-+              path[ppos].p_hdr = eh;
-+              path[ppos].p_ext = NULL;
-+
-+              bh = sb_bread(inode->i_sb, path[ppos].p_block);
-+              if (!bh) {
-+                      ext3_ext_drop_refs(inode, path);
-+                      kfree(path);
-+                      return ERR_PTR(-EIO);
-+              }
-+              eh = (struct ext3_extent_header *) bh->b_data;
-+              ppos++;
-+              EXT_ASSERT(ppos <= depth);
-+              path[ppos].p_bh = bh;
-+              i--;
-+      }
-+
-+      path[ppos].p_depth = i;
-+      path[ppos].p_hdr = eh;
-+      path[ppos].p_ext = NULL;
-+      
-+      /* find extent */
-+      ex = EXT_FIRST_EXTENT(eh);
-+      if (eh->e_num)
-+              path[ppos].p_ext = ex;
-+      EXT_ASSERT(eh->e_num <= eh->e_max);
-+      for (k = 0; k < eh->e_num; k++, ex++) {
-+              EXT_ASSERT(ex->e_num < EXT3_BLOCKS_PER_GROUP(inode->i_sb));
-+              EXT_ASSERT((k == 0 && prev <= (int)ex->e_block) ||
-+                              (k > 0 && prev < (int)ex->e_block));
-+              if (block < ex->e_block) 
-+                      break;
-+              prev = ex->e_block;
-+              path[ppos].p_ext = ex;
-+      }
-+
-+      ext3_ext_show_path(inode, path);
-+
-+      return path;
-+}
-+
-+static void ext3_ext_check_boundary(struct inode *inode,
-+                                      struct ext3_ext_path *curp,
-+                                      void *addr, int len)
-+{
-+      void *end;
-+
-+      if (!len)
-+              return;
-+      if (curp->p_bh)
-+              end = (void *) curp->p_hdr + inode->i_sb->s_blocksize;
-+      else
-+              end = (void *) curp->p_hdr + sizeof(EXT3_I(inode)->i_data);
-+      if (((unsigned long) addr) + len > (unsigned long) end) {
-+              printk("overflow! 0x%p > 0x%p\n", addr + len, end);
-+              BUG();
-+      }
-+      if ((unsigned long) addr < (unsigned long) curp->p_hdr) {
-+              printk("underflow! 0x%p < 0x%p\n", addr, curp->p_hdr);
-+              BUG();
-+      }
-+}
-+
-+/*
-+ * insert new index [logical;ptr] into the block at cupr
-+ * it check where to insert: before curp or after curp
-+ */
-+static int ext3_ext_insert_index(handle_t *handle, struct inode *inode,
-+                              struct ext3_ext_path *curp, int logical,
-+                              int ptr)
-+{
-+      struct ext3_extent_idx *ix;
-+      int len, err;
-+
-+      if ((err = ext3_ext_get_access(handle, inode, curp)))
-+              return err;
-+
-+      EXT_ASSERT(logical != curp->p_idx->e_block);
-+      len = EXT_MAX_INDEX(curp->p_hdr) - curp->p_idx;
-+      if (logical > curp->p_idx->e_block) {
-+              /* insert after */
-+              len = (len - 1) * sizeof(struct ext3_extent_idx);
-+              len = len < 0 ? 0 : len;
-+              ext_debug(inode, "insert new index %d after: %d. "
-+                              "move %d from 0x%p to 0x%p\n",
-+                              logical, ptr, len,
-+                              (curp->p_idx + 1), (curp->p_idx + 2));
-+
-+              ext3_ext_check_boundary(inode, curp, curp->p_idx + 2, len);
-+              memmove(curp->p_idx + 2, curp->p_idx + 1, len);
-+              ix = curp->p_idx + 1;
-+      } else {
-+              /* insert before */
-+              len = len * sizeof(struct ext3_extent_idx);
-+              len = len < 0 ? 0 : len;
-+              ext_debug(inode, "insert new index %d before: %d. "
-+                              "move %d from 0x%p to 0x%p\n",
-+                              logical, ptr, len,
-+                              curp->p_idx, (curp->p_idx + 1));
-+
-+              ext3_ext_check_boundary(inode, curp, curp->p_idx + 1, len);
-+              memmove(curp->p_idx + 1, curp->p_idx, len);
-+              ix = curp->p_idx;
-+      }
-+
-+      ix->e_block = logical;
-+      ix->e_leaf = ptr;
-+      curp->p_hdr->e_num++;
-+
-+      err = ext3_ext_dirty(handle, inode, curp);
-+      ext3_std_error(inode->i_sb, err);
-+
-+      return err;
-+}
-+
-+/*
-+ * routine inserts new subtree into the path, using free index entry
-+ * at depth 'at:
-+ *  - allocates all needed blocks (new leaf and all intermediate index blocks)
-+ *  - makes decision where to split
-+ *  - moves remaining extens and index entries (right to the split point)
-+ *    into the newly allocated blocks
-+ *  - initialize subtree
-+ */
-+static int ext3_ext_split(handle_t *handle, struct inode *inode,
-+                              struct ext3_ext_path *path,
-+                              struct ext3_extent *newext, int at)
-+{
-+      struct buffer_head *bh = NULL;
-+      int depth = EXT3_I(inode)->i_depth;
-+      struct ext3_extent_header *neh;
-+      struct ext3_extent_idx *fidx;
-+      struct ext3_extent *ex;
-+      int i = at, k, m, a;
-+      long newblock, oldblock, border;
-+      int *ablocks = NULL; /* array of allocated blocks */
-+      int err = 0;
-+
-+      /* make decision: where to split? */
-+      /* FIXME: now desicion is simplest: at current extent */
-+
-+      /* if current leaf will be splitted, then we should use 
-+       * border from split point */
-+      
-+      if (path[depth].p_ext != EXT_MAX_EXTENT(path[depth].p_hdr)) {
-+              border = path[depth].p_ext[1].e_block;
-+              ext_debug(inode, "leaf will be splitted."
-+                              " next leaf starts at %d\n",
-+                              (int)border);
-+      } else {
-+              border = newext->e_block;
-+              ext_debug(inode, "leaf will be added."
-+                              " next leaf starts at %d\n",
-+                              (int)border);
-+      }
-+
-+      /* 
-+       * if error occurs, then we break processing
-+       * and turn filesystem read-only. so, index won't
-+       * be inserted and tree will be in consistent
-+       * state. next mount will repair buffers too
-+       */
-+
-+      /*
-+       * get array to track all allocated blocks
-+       * we need this to handle errors and free blocks
-+       * upon them
-+       */
-+      ablocks = kmalloc(sizeof(long) * depth, GFP_NOFS);
-+      if (!ablocks)
-+              return -ENOMEM;
-+      memset(ablocks, 0, sizeof(long) * depth);
-+
-+      /* allocate all needed blocks */
-+      ext_debug(inode, "allocate %d blocks for indexes/leaf\n", depth - at);
-+      newblock = 0; /* FIXME: something more sophisticated needed here */ 
-+      for (a = 0; newext->e_num > 0 && a < depth - at; a++) {
-+              newblock = ablocks[a] = newext->e_start++;
-+              newext->e_num--;
-+      }
-+      for (; a < depth - at; a++) {
-+              newblock = ext3_new_block(handle, inode,
-+                                              newblock + 1, 0, 0, &err);
-+              if (newblock == 0)
-+                      goto cleanup;
-+              ablocks[a] = newblock;
-+      }
-+
-+      /* initialize new leaf */
-+      newblock = ablocks[--a];
-+      EXT_ASSERT(newblock);
-+      bh = sb_getblk(inode->i_sb, newblock);
-+      if (!bh) {
-+              err = -EIO;
-+              goto cleanup;
-+      }
-+      lock_buffer(bh);
-+
-+      if ((err = ext3_journal_get_create_access(handle, bh)))
-+              goto cleanup;
-+
-+      neh = (struct ext3_extent_header *) bh->b_data;
-+      neh->e_num = 0;
-+      neh->e_max = ext3_ext_space_block(inode);
-+      ex = EXT_FIRST_EXTENT(neh);
-+
-+      /* move remain of path[depth] to the new leaf */
-+      EXT_ASSERT(path[depth].p_hdr->e_num ==
-+                      path[depth].p_hdr->e_max);
-+      /* start copy from next extent */
-+      /* TODO: we could do it by single memmove */
-+      m = 0;
-+      path[depth].p_ext++;
-+      while (path[depth].p_ext <=
-+                      EXT_MAX_EXTENT(path[depth].p_hdr)) {
-+              ext_debug(inode, "move %d:%d:%d in new leaf\n",
-+                              path[depth].p_ext->e_block,
-+                              path[depth].p_ext->e_start,
-+                              path[depth].p_ext->e_num);
-+              memmove(ex++, path[depth].p_ext++,
-+                              sizeof(struct ext3_extent));
-+              neh->e_num++;
-+              m++;
-+      }
-+      mark_buffer_uptodate(bh, 1);
-+      unlock_buffer(bh);
-+
-+      if ((err = ext3_journal_dirty_metadata(handle, bh)))
-+              goto cleanup;   
-+      brelse(bh);
-+      bh = NULL;
-+
-+      /* correct old leaf */
-+      if (m) {
-+              if ((err = ext3_ext_get_access(handle, inode, path)))
-+                      goto cleanup;
-+              path[depth].p_hdr->e_num -= m;
-+              if ((err = ext3_ext_dirty(handle, inode, path)))
-+                      goto cleanup;
-+              
-+      }
-+
-+      /* create intermediate indexes */
-+      k = depth - at - 1;
-+      EXT_ASSERT(k >= 0);
-+      if (k)
-+              ext_debug(inode,
-+                              "create %d intermediate indices\n", k);
-+      /* insert new index into current index block */
-+      /* current depth stored in i var */
-+      i = depth - 1;
-+      while (k--) {
-+              oldblock = newblock;
-+              newblock = ablocks[--a];
-+              bh = sb_getblk(inode->i_sb, newblock);
-+              if (!bh) {
-+                      err = -EIO;
-+                      goto cleanup;
-+              }
-+              lock_buffer(bh);
-+
-+              if ((err = ext3_journal_get_create_access(handle, bh)))
-+                      goto cleanup;
-+
-+              neh = (struct ext3_extent_header *) bh->b_data;
-+              neh->e_num = 1;
-+              neh->e_max = ext3_ext_space_block(inode);
-+              fidx = EXT_FIRST_INDEX(neh);
-+              fidx->e_block = border;
-+              fidx->e_leaf = oldblock;
-+
-+              ext_debug(inode,
-+                              "int.index at %d (block %u): %d -> %d\n",
-+                              i, (unsigned) newblock,
-+                              (int) border,
-+                              (int) oldblock);
-+              /* copy indexes */
-+              m = 0;
-+              path[i].p_idx++;
-+              ext_debug(inode, "cur 0x%p, last 0x%p\n", path[i].p_idx,
-+                              EXT_MAX_INDEX(path[i].p_hdr));
-+              EXT_ASSERT(EXT_MAX_INDEX(path[i].p_hdr) ==
-+                              EXT_LAST_INDEX(path[i].p_hdr));
-+              while (path[i].p_idx <=
-+                              EXT_MAX_INDEX(path[i].p_hdr)) {
-+                      ext_debug(inode, "%d: move %d:%d in new index\n",
-+                                      i, path[i].p_idx->e_block,
-+                                      path[i].p_idx->e_leaf);
-+                      memmove(++fidx, path[i].p_idx++,
-+                                      sizeof(struct ext3_extent_idx));
-+                      neh->e_num++;
-+                      m++;
-+              }
-+
-+              mark_buffer_uptodate(bh, 1);
-+              unlock_buffer(bh);
-+
-+              if ((err = ext3_journal_dirty_metadata(handle, bh)))
-+                      goto cleanup;
-+              brelse(bh);
-+              bh = NULL;
-+
-+              /* correct old index */
-+              if (m) {
-+                      err = ext3_ext_get_access(handle,inode,path+i);
-+                      if (err)
-+                              goto cleanup;
-+                      path[i].p_hdr->e_num -= m;
-+                      err = ext3_ext_dirty(handle, inode, path + i);
-+                      if (err)
-+                              goto cleanup;
-+              }
-+
-+              i--;
-+      }
-+
-+      /* insert new index */
-+      if (!err)
-+              err = ext3_ext_insert_index(handle, inode, path + at,
-+                                              border, newblock);
-+
-+cleanup:
-+      if (bh) {
-+              if (buffer_locked(bh))
-+                      unlock_buffer(bh);
-+              brelse(bh);
-+      }
-+
-+      if (err) {
-+              /* free all allocated blocks in error case */
-+              for (i = 0; i < depth; i++)
-+                      if (!ablocks[i])
-+                              continue;
-+                      ext3_free_blocks(handle, inode, ablocks[i], 1);
-+      }
-+      kfree(ablocks);
-+
-+      return err;
-+}
-+
-+/*
-+ * routine implements tree growing procedure:
-+ *  - allocates new block
-+ *  - moves top-level data (index block or leaf) into the new block
-+ *  - initialize new top-level, creating index that points to the
-+ *    just created block
-+ */
-+static int ext3_ext_grow_indepth(handle_t *handle, struct inode *inode,
-+                                      struct ext3_ext_path *path,
-+                                      struct ext3_extent *newext)
-+{
-+      struct buffer_head *bh;
-+      struct ext3_ext_path *curp = path;
-+      struct ext3_extent_header *neh;
-+      struct ext3_extent_idx *fidx;
-+      int len, err = 0;
-+      long newblock;
-+
-+      /*
-+       * use already allocated by the called block for new root block
-+       */
-+      newblock = newext->e_start++;
-+      if (newext->e_num == 0) {
-+              /* 
-+               * FIXME: if this may happen, then we have to handle
-+               * possible error and free allocated block
-+               */
-+              printk("grow_indepth with zero blocks\n");
-+              newblock = ext3_new_block(handle, inode,
-+                                              newblock, 0, 0, &err);
-+      } else
-+              newext->e_num--;
-+      
-+      bh = sb_getblk(inode->i_sb, newblock);
-+      if (!bh) {
-+              err = -EIO;
-+              ext3_std_error(inode->i_sb, err);
-+              return err;
-+      }
-+      lock_buffer(bh);
-+
-+      if ((err = ext3_journal_get_create_access(handle, bh))) {
-+              unlock_buffer(bh);
-+              goto out;       
-+      }
-+
-+      /* move top-level index/leaf into new block */
-+      len = sizeof(struct ext3_extent_header) +
-+              sizeof(struct ext3_extent) * curp->p_hdr->e_max;
-+      EXT_ASSERT(len >= 0 && len < 4096);
-+      memmove(bh->b_data, curp->p_hdr, len);
-+
-+      /* set size of new block */
-+      neh = (struct ext3_extent_header *) bh->b_data;
-+      neh->e_max = ext3_ext_space_block(inode);
-+      mark_buffer_uptodate(bh, 1);
-+      unlock_buffer(bh);
-+
-+      if ((err = ext3_journal_dirty_metadata(handle, bh)))
-+              goto out;
-+
-+      /* create index in new top-level index: num,max,pointer */
-+      if ((err = ext3_ext_get_access(handle, inode, curp)))
-+              goto out;
-+
-+      curp->p_hdr->e_max = ext3_ext_space_inode_idx(inode);
-+      curp->p_hdr->e_num = 1;
-+      curp->p_idx = EXT_FIRST_INDEX(curp->p_hdr);
-+      curp->p_idx->e_block = EXT_FIRST_EXTENT(path[0].p_hdr)->e_block;
-+      curp->p_idx->e_leaf = newblock;
-+
-+      neh = (struct ext3_extent_header *) EXT3_I(inode)->i_data;
-+      fidx = EXT_FIRST_INDEX(neh);
-+      ext_debug(inode, "new root: num %d(%d), lblock %d, ptr %d\n",
-+                      neh->e_num, neh->e_max, fidx->e_block, fidx->e_leaf); 
-+
-+      EXT3_I(inode)->i_depth++;
-+      err = ext3_ext_dirty(handle, inode, curp);
-+out:
-+      brelse(bh);
-+
-+      return err;
-+}
-+
-+/*
-+ * routine finds empty index and adds new leaf. if no free index found
-+ * then it requests in-depth growing
-+ */
-+static int ext3_ext_create_new_leaf(handle_t *handle, struct inode *inode,
-+                                      struct ext3_ext_path *path,
-+                                      struct ext3_extent *newext)
-+{
-+      long newblock = newext->e_start;
-+      struct ext3_ext_path *curp;
-+      int depth, i, err = 0;
-+
-+repeat:
-+      i = depth = EXT3_I(inode)->i_depth;
-+      
-+      /* walk up to the tree and look for free index entry */
-+      curp = path + depth;
-+      while (i > 0 && !EXT_HAS_FREE_INDEX(curp)) {
-+              i--;
-+              curp--;
-+      }
-+
-+      /* we use already allocated block for index block
-+       * so, subsequent data blocks should be contigoues */
-+      if (EXT_HAS_FREE_INDEX(curp)) {
-+              /* if we found index with free entry, then use that
-+               * entry: create all needed subtree and add new leaf */
-+              err = ext3_ext_split(handle, inode, path, newext, i);
-+
-+              /* refill path */
-+              ext3_ext_drop_refs(inode, path);
-+              path = ext3_ext_find_extent(inode, newext->e_block, path);
-+              if (IS_ERR(path))
-+                      err = PTR_ERR(path);
-+      } else {
-+              /* tree is full, time to grow in depth */
-+              err = ext3_ext_grow_indepth(handle, inode, path, newext);
-+
-+              /* refill path */
-+              ext3_ext_drop_refs(inode, path);
-+              path = ext3_ext_find_extent(inode, newext->e_block, path);
-+              if (IS_ERR(path))
-+                      err = PTR_ERR(path);
-+      
-+              /*
-+               * only first (depth 0 -> 1) produces free space
-+               * in all other cases we have to split growed tree
-+               */
-+              depth = EXT3_I(inode)->i_depth;
-+              if (path[depth].p_hdr->e_num == path[depth].p_hdr->e_max) {
-+                      /* now we need split */
-+                      goto repeat;
-+              }
-+      }
-+
-+      if (err)
-+              return err;
-+
-+      /*
-+       * probably we've used some blocks from extent
-+       * let's allocate new block for it
-+       */
-+      if (newext->e_num == 0 && !err) {
-+              newext->e_start =
-+                      ext3_new_block(handle, inode, newblock,
-+                                      0, 0, &err);
-+              if (newext->e_start != 0)
-+                      newext->e_num = 1;
-+      }
-+
-+      return 0;
-+}
-+
-+/*
-+ * returns next allocated block or 0xffffffff
-+ * NOTE: it consider block number from index entry as
-+ * allocated block. thus, index entries have to be consistent
-+ * with leafs
-+ */
-+static inline unsigned ext3_ext_next_allocated_block(struct inode *inode,
-+                                               struct ext3_ext_path *path)
-+{
-+      int depth;
-+
-+      EXT_ASSERT(path != NULL);
-+      depth = path->p_depth;
-+
-+      if (depth == 0 && path->p_ext == NULL)
-+              return 0xffffffff;
-+
-+      /* FIXME: what if index isn't full ?! */
-+      while (depth >= 0) {
-+              if (depth == path->p_depth) {
-+                      /* leaf */
-+                      if (path[depth].p_ext !=
-+                                      EXT_LAST_EXTENT(path[depth].p_hdr))
-+                              return path[depth].p_ext[1].e_block;
-+              } else {
-+                      /* index */
-+                      if (path[depth].p_idx !=
-+                                      EXT_LAST_INDEX(path[depth].p_hdr))
-+                              return path[depth].p_idx[1].e_block;
-+              }
-+              depth--;        
-+      }
-+
-+      return 0xffffffff;
-+}
-+
-+/*
-+ * returns first allocated block from next leaf or 0xffffffff
-+ */
-+static unsigned ext3_ext_next_leaf_block(struct inode *inode,
-+                                               struct ext3_ext_path *path)
-+{
-+      int depth;
-+
-+      EXT_ASSERT(path != NULL);
-+      depth = path->p_depth;
-+
-+      /* zero-tree has no leaf blocks at all */
-+      if (depth == 0)
-+              return 0xffffffff;
-+
-+      /* go to index block */
-+      depth--;
-+      
-+      while (depth >= 0) {
-+              if (path[depth].p_idx !=
-+                              EXT_LAST_INDEX(path[depth].p_hdr))
-+                      return path[depth].p_idx[1].e_block;
-+              depth--;        
-+      }
-+
-+      return 0xffffffff;
-+}
-+
-+/*
-+ * if leaf gets modified and modified extent is first in the leaf
-+ * then we have to correct all indexes above
-+ * TODO: do we need to correct tree in all cases?
-+ */
-+int ext3_ext_correct_indexes(handle_t *handle, struct inode *inode,
-+                              struct ext3_ext_path *path)
-+{
-+      int depth = EXT3_I(inode)->i_depth;     
-+      struct ext3_extent_header *eh;
-+      struct ext3_extent *ex;
-+      long border;
-+      int k, err = 0;
-+      
-+      eh = path[depth].p_hdr;
-+      ex = path[depth].p_ext;
-+
-+      EXT_ASSERT(ex);
-+      EXT_ASSERT(eh);
-+      
-+      if (depth == 0) {
-+              /* there is no tree at all */
-+              return 0;
-+      }
-+      
-+      if (ex != EXT_FIRST_EXTENT(eh)) {
-+              /* we correct tree if first leaf got modified only */
-+              return 0;
-+      }
-+      
-+      /*
-+       * TODO: we need correction if border is smaller then current one
-+       */
-+      k = depth - 1;
-+      border = path[depth].p_ext->e_block;
-+      if ((err = ext3_ext_get_access(handle, inode, path + k)))
-+              return err;
-+      path[k].p_idx->e_block = border;
-+      if ((err = ext3_ext_dirty(handle, inode, path + k)))
-+              return err;
-+
-+      while (k--) {
-+              /* change all left-side indexes */
-+              if (path[k+1].p_idx != EXT_FIRST_INDEX(path[k+1].p_hdr))
-+                      break;
-+              if ((err = ext3_ext_get_access(handle, inode, path + k)))
-+                      break;
-+              path[k].p_idx->e_block = border;
-+              if ((err = ext3_ext_dirty(handle, inode, path + k)))
-+                      break;
-+      }
-+
-+      return err;
-+}
-+
-+/*
-+ * this routine tries to merge requsted extent into the existing
-+ * extent or inserts requested extent as new one into the tree,
-+ * creating new leaf in no-space case
-+ */
-+int ext3_ext_insert_extent(handle_t *handle, struct inode *inode,
-+                              struct ext3_ext_path *path,
-+                              struct ext3_extent *newext)
-+{
-+      int depth, len;
-+      struct ext3_extent_header * eh;
-+      struct ext3_extent *ex;
-+      struct ext3_extent *nearex; /* nearest extent */
-+      struct ext3_ext_path *npath = NULL;
-+      int err;
-+
-+      depth = EXT3_I(inode)->i_depth; 
-+      if ((ex = path[depth].p_ext)) {
-+              /* try to insert block into found extent and return */
-+              if (ex->e_block + ex->e_num == newext->e_block &&
-+                              ex->e_start + ex->e_num == newext->e_start) {
-+#ifdef AGRESSIVE_TEST
-+                      if (ex->e_num >= 2)
-+                              goto repeat;
-+#endif
-+                      if ((err = ext3_ext_get_access(handle, inode,
-+                                                      path + depth)))
-+                              return err;
-+                      ext_debug(inode, "append %d block to %d:%d (from %d)\n",
-+                                      newext->e_num, ex->e_block, ex->e_num,
-+                                      ex->e_start);
-+                      ex->e_num += newext->e_num;
-+                      err = ext3_ext_dirty(handle, inode, path + depth);
-+                      return err;
-+              }
-+      }
-+
-+repeat:
-+      depth = EXT3_I(inode)->i_depth; 
-+      eh = path[depth].p_hdr;
-+      if (eh->e_num == eh->e_max) {
-+              /* probably next leaf has space for us? */
-+              int next = ext3_ext_next_leaf_block(inode, path);
-+              if (next != 0xffffffff) {
-+                      ext_debug(inode, "next leaf block - %d\n", next);
-+                      EXT_ASSERT(!npath);
-+                      npath = ext3_ext_find_extent(inode, next, NULL);
-+                      if (IS_ERR(npath))
-+                              return PTR_ERR(npath);
-+                      EXT_ASSERT(npath->p_depth == path->p_depth);
-+                      eh = npath[depth].p_hdr;
-+                      if (eh->e_num < eh->e_max) {
-+                              ext_debug(inode,
-+                                              "next leaf has free ext(%d)\n",
-+                                              eh->e_num);
-+                              path = npath;
-+                              goto repeat;
-+                      }
-+                      ext_debug(inode, "next leaf hasno free space(%d,%d)\n",
-+                                      eh->e_num, eh->e_max);
-+              }
-+              /*
-+               * there is no free space in found leaf
-+               * we're gonna add new leaf in the tree
-+               */
-+              err = ext3_ext_create_new_leaf(handle, inode, path, newext);
-+              if (err)
-+                      goto cleanup;
-+              goto repeat;
-+      }
-+
-+      nearex = path[depth].p_ext;
-+
-+      if ((err = ext3_ext_get_access(handle, inode, path + depth)))
-+              goto cleanup;
-+
-+      if (!nearex) {
-+              /* there is no extent in this leaf, create first one */
-+              ext_debug(inode, "first extent in the leaf: %d:%d:%d\n",
-+                              newext->e_block, newext->e_start,
-+                              newext->e_num);
-+              eh->e_num++;
-+              path[depth].p_ext = EXT_FIRST_EXTENT(eh);
-+
-+      } else if (newext->e_block > nearex->e_block) {
-+              EXT_ASSERT(newext->e_block != nearex->e_block);
-+              len = EXT_MAX_EXTENT(eh) - nearex;
-+              len = (len - 1) * sizeof(struct ext3_extent);
-+              len = len < 0 ? 0 : len;
-+              ext_debug(inode, "insert %d:%d:%d after: nearest 0x%p, "
-+                              "move %d from 0x%p to 0x%p\n",
-+                              newext->e_block, newext->e_start, newext->e_num,
-+                              nearex, len, nearex + 1, nearex + 2);
-+              ext3_ext_check_boundary(inode, path + depth, nearex + 2, len);
-+              memmove(nearex + 2, nearex + 1, len);
-+              path[depth].p_ext = nearex + 1;
-+              eh->e_num++;
-+      } else {
-+              EXT_ASSERT(newext->e_block != nearex->e_block);
-+              len = (EXT_MAX_EXTENT(eh) - nearex) * sizeof(struct ext3_extent);
-+              len = len < 0 ? 0 : len;
-+              ext_debug(inode, "insert %d:%d:%d before: nearest 0x%p, "
-+                              "move %d from 0x%p to 0x%p\n",
-+                              newext->e_block, newext->e_start, newext->e_num,
-+                              nearex, len, nearex + 1, nearex + 2);
-+              
-+              memmove(nearex + 1, nearex, len);
-+              path[depth].p_ext = nearex;
-+      }
-+
-+      if (!err) {
-+              eh->e_num++;
-+              nearex = path[depth].p_ext;
-+              nearex->e_block = newext->e_block;
-+              nearex->e_start = newext->e_start;
-+              nearex->e_num = newext->e_num;
-+              EXT_ASSERT(nearex->e_num < EXT3_BLOCKS_PER_GROUP(inode->i_sb) &&
-+                              nearex->e_num > 0);
-+
-+              /* time to correct all indexes above */
-+              err = ext3_ext_correct_indexes(handle, inode, path);
-+      }
-+
-+      err = ext3_ext_dirty(handle, inode, path + depth);
-+
-+cleanup:
-+      if (npath) {
-+              ext3_ext_drop_refs(inode, npath);
-+              kfree(npath);
-+      }
-+              
-+      return err;
-+}
-+
-+int ext3_ext_get_block(handle_t *handle, struct inode *inode, long iblock,
-+                      struct buffer_head *bh_result, int create,
-+                      int extend_disksize)
-+{
-+      struct ext3_ext_path *path;
-+      int depth = EXT3_I(inode)->i_depth;
-+      struct ext3_extent newex;
-+      struct ext3_extent *ex;
-+      int goal, newblock, err = 0;
-+
-+      ext_debug(inode, "block %d requested for inode %u, bh_result 0x%p\n",
-+                      (int) iblock, (unsigned) inode->i_ino, bh_result);
-+      bh_result->b_state &= ~(1UL << BH_New);
-+
-+      down(&EXT3_I(inode)->i_ext_sem);
-+
-+      /* find extent for this block */
-+      path = ext3_ext_find_extent(inode, iblock, NULL);
-+      if (IS_ERR(path)) {
-+              err = PTR_ERR(path);
-+              goto out2;
-+      }
-+
-+      if ((ex = path[depth].p_ext)) {
-+              /* if found exent covers block, simple return it */
-+              if (iblock >= ex->e_block && iblock < ex->e_block + ex->e_num) {
-+                      newblock = iblock - ex->e_block + ex->e_start;
-+                      ext_debug(inode, "%d fit into %d:%d -> %d\n",
-+                                      (int) iblock, ex->e_block, ex->e_num,
-+                                      newblock);
-+                      goto out;
-+              }
-+      }
-+
-+      /*
-+       * we couldn't try to create block if create flag is zero 
-+       */
-+      if (!create) 
-+              goto out2;
-+
-+      /* allocate new block */
-+      goal = ext3_ext_find_goal(inode, path);
-+      newblock = ext3_new_block(handle, inode, goal, 0, 0, &err);
-+      if (!newblock)
-+              goto out2;
-+      ext_debug(inode, "allocate new block: goal %d, found %d\n",
-+                      goal, newblock);
-+
-+      /* try to insert new extent into found leaf and return */
-+      newex.e_block = iblock;
-+      newex.e_start = newblock;
-+      newex.e_num = 1;
-+      err = ext3_ext_insert_extent(handle, inode, path, &newex);
-+      if (err)
-+              goto out2;
-+      
-+      /* previous routine could use block we allocated */
-+      newblock = newex.e_start;
-+      bh_result->b_state |= (1UL << BH_New);
-+
-+out:
-+      ext3_ext_show_leaf(inode, path);
-+      bh_result->b_dev = inode->i_dev;
-+      bh_result->b_blocknr = newblock;
-+      bh_result->b_state |= (1UL << BH_Mapped);
-+out2:
-+      ext3_ext_drop_refs(inode, path);
-+      kfree(path);
-+      up(&EXT3_I(inode)->i_ext_sem);
-+
-+      return err;     
-+}
-+
-+/*
-+ * returns 1 if current index have to be freed (even partial)
-+ */
-+static int ext3_ext_more_to_truncate(struct inode *inode,
-+                              struct ext3_ext_path *path)
-+{
-+      EXT_ASSERT(path->p_idx);
-+
-+      if (path->p_idx < EXT_FIRST_INDEX(path->p_hdr))
-+              return 0;
-+
-+      /*
-+       * if truncate on deeper level happened it it wasn't partial
-+       * so we have to consider current index for truncation
-+       */
-+      if (path->p_hdr->e_num == path->p_block)
-+              return 0;
-+
-+      /*
-+       * put actual number of indexes to know is this number got
-+       * changed at the next iteration
-+       */
-+      path->p_block = path->p_hdr->e_num;
-+      
-+      return 1;
-+}
-+
-+/*
-+ * routine removes index from the index block
-+ * it's used in truncate case only. thus all requests are for
-+ * last index in the block only
-+ */
-+int ext3_ext_remove_index(handle_t *handle, struct inode *inode,
-+                                      struct ext3_ext_path *path)
-+{
-+      struct buffer_head *bh;
-+      int err;
-+      
-+      /* free index block */
-+      path--;
-+      EXT_ASSERT(path->p_hdr->e_num);
-+      if ((err = ext3_ext_get_access(handle, inode, path)))
-+              return err;
-+      path->p_hdr->e_num--;
-+      if ((err = ext3_ext_dirty(handle, inode, path)))
-+              return err;
-+      bh = sb_get_hash_table(inode->i_sb, path->p_idx->e_leaf);
-+      ext3_forget(handle, 0, inode, bh, path->p_idx->e_leaf);
-+      ext3_free_blocks(handle, inode, path->p_idx->e_leaf, 1);
-+
-+      ext_debug(inode, "index is empty, remove it, free block %d\n",
-+                      path->p_idx->e_leaf);
-+      return err;
-+}
-+
-+/*
-+ * returns 1 if current extent needs to be freed (even partial)
-+ * instead, returns 0
-+ */
-+int ext3_ext_more_leaves_to_truncate(struct inode *inode,
-+                                      struct ext3_ext_path *path)
-+{
-+      unsigned blocksize = inode->i_sb->s_blocksize;
-+      struct ext3_extent *ex = path->p_ext;
-+      int last_block; 
-+
-+      EXT_ASSERT(ex);
-+
-+      /* is there leave in the current leaf? */
-+      if (ex < EXT_FIRST_EXTENT(path->p_hdr))
-+              return 0;
-+      
-+      last_block = (inode->i_size + blocksize-1)
-+                      >> EXT3_BLOCK_SIZE_BITS(inode->i_sb);
-+
-+      if (last_block >= ex->e_block + ex->e_num)
-+              return 0;
-+
-+      /* seems it extent have to be freed */
-+      return 1;
-+}
-+
-+handle_t *ext3_ext_journal_restart(handle_t *handle, int needed)
-+{
-+      int err;
-+
-+      if (handle->h_buffer_credits > needed)
-+              return handle;
-+      if (!ext3_journal_extend(handle, needed))
-+              return handle;
-+      err = ext3_journal_restart(handle, needed);
-+      
-+      return handle;
-+}
-+
-+/*
-+ * this routine calculate max number of blocks to be modified
-+ * while freeing extent and is intended to be used in truncate path
-+ */
-+static int ext3_ext_calc_credits(struct inode *inode,
-+                                      struct ext3_ext_path *path,
-+                                      int num)
-+{
-+      int depth = EXT3_I(inode)->i_depth;
-+      int needed;
-+      
-+      /*
-+       * extent couldn't cross group, so we will modify
-+       * single bitmap block and single group descriptor
-+       */
-+      needed = 2;
-+
-+      /*
-+       * if this is last extent in a leaf, then we have to
-+       * free leaf block and remove pointer from index above.
-+       * that pointer could be last in index block, so we'll
-+       * have to remove it too. this way we could modify/free
-+       * the whole path + root index (inode stored) will be
-+       * modified
-+       */
-+      if (!path || (num == path->p_ext->e_num &&
-+                              path->p_ext == EXT_FIRST_EXTENT(path->p_hdr)))
-+              needed += (depth * EXT3_ALLOC_NEEDED) + 1;
-+
-+      /*
-+       * it seems current calculation has bug
-+       * this is workaround -bzzz
-+       */
-+      needed += 10;
-+
-+      return needed;
-+}
-+
-+/*
-+ * core of the truncate procedure:
-+ * - calculated what part of each extent in the requested leaf
-+ *   need to be freed
-+ * - frees and forgets these blocks
-+ *
-+ * TODO: we could optimize and free several extents during
-+ *       single journal_restart()-journal_restart() cycle
-+ */
-+static int ext3_ext_truncate_leaf(handle_t *handle,
-+                                      struct inode *inode,
-+                                      struct ext3_ext_path *path,
-+                                      int depth)
-+{
-+      unsigned blocksize = inode->i_sb->s_blocksize;
-+      int last_block; 
-+      int i, err = 0, sf, num;
-+
-+      ext_debug(inode, "level %d - leaf\n", depth);
-+      if (!path->p_hdr)
-+              path->p_hdr =
-+                      (struct ext3_extent_header *) path->p_bh->b_data;
-+
-+      EXT_ASSERT(path->p_hdr->e_num <= path->p_hdr->e_max);
-+      
-+      last_block = (inode->i_size + blocksize-1)
-+                                      >> EXT3_BLOCK_SIZE_BITS(inode->i_sb);
-+      path->p_ext = EXT_LAST_EXTENT(path->p_hdr);
-+      while (ext3_ext_more_leaves_to_truncate(inode, path)) {
-+
-+              /* what part of extent have to be freed? */
-+              sf = last_block > path->p_ext->e_block ?
-+                      last_block : path->p_ext->e_block;
-+
-+              /* number of blocks from extent to be freed */
-+              num = path->p_ext->e_block + path->p_ext->e_num - sf;
-+
-+              /* calc physical first physical block to be freed */
-+              sf = path->p_ext->e_start + (sf - path->p_ext->e_block);
-+
-+              i = ext3_ext_calc_credits(inode, path, num);
-+              handle = ext3_ext_journal_restart(handle, i);
-+              if (IS_ERR(handle))
-+                      return PTR_ERR(handle);
-+              
-+              ext_debug(inode, "free extent %d:%d:%d -> free %d:%d\n",
-+                              path->p_ext->e_block, path->p_ext->e_start,
-+                              path->p_ext->e_num, sf, num);
-+              for (i = 0; i < num; i++) {
-+                      struct buffer_head *bh =
-+                              sb_get_hash_table(inode->i_sb, sf + i);
-+                      ext3_forget(handle, 0, inode, bh, sf + i);
-+              }
-+              ext3_free_blocks(handle, inode, sf, num);
-+
-+              /* collect extents usage stats */
-+              spin_lock(&EXT3_SB(inode->i_sb)->s_ext_lock);
-+              EXT3_SB(inode->i_sb)->s_ext_extents++;
-+              EXT3_SB(inode->i_sb)->s_ext_blocks += num;
-+              spin_unlock(&EXT3_SB(inode->i_sb)->s_ext_lock);
-+
-+              /* reduce extent */
-+              if ((err = ext3_ext_get_access(handle, inode, path)))
-+                      return err;
-+              path->p_ext->e_num -= num;
-+              if (path->p_ext->e_num == 0)
-+                      path->p_hdr->e_num--;
-+              if ((err = ext3_ext_dirty(handle, inode, path)))
-+                      return err;
-+
-+              path->p_ext--;
-+      }
-+      
-+      /* if this leaf is free, then we should
-+       * remove it from index block above */
-+      if (path->p_hdr->e_num == 0 && depth > 0) 
-+              err = ext3_ext_remove_index(handle, inode, path);
-+
-+      return err;
-+}
-+
-+static void ext3_ext_collect_stats(struct inode *inode)
-+{
-+      int depth;
-+      
-+      /* skip inodes with old good bitmap */
-+      if (!(EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL))
-+              return;
-+      
-+      /* collect on full truncate only */
-+      if (inode->i_size)
-+              return;
-+
-+      depth = EXT3_I(inode)->i_depth;
-+      if (depth < EXT3_SB(inode->i_sb)->s_ext_mindepth)
-+               EXT3_SB(inode->i_sb)->s_ext_mindepth = depth;
-+      if (depth > EXT3_SB(inode->i_sb)->s_ext_maxdepth)
-+               EXT3_SB(inode->i_sb)->s_ext_maxdepth = depth;
-+      EXT3_SB(inode->i_sb)->s_ext_sum += depth;
-+      EXT3_SB(inode->i_sb)->s_ext_count++;
-+      
-+}
-+
-+void ext3_ext_truncate(struct inode * inode)
-+{
-+      struct address_space *mapping = inode->i_mapping;
-+      struct ext3_ext_path *path;
-+      struct page * page;
-+      handle_t *handle;
-+      int i, depth, err = 0;
-+
-+      ext3_ext_collect_stats(inode);
-+
-+      /*
-+       * We have to lock the EOF page here, because lock_page() nests
-+       * outside journal_start().
-+       */
-+      if ((inode->i_size & (inode->i_sb->s_blocksize - 1)) == 0) {
-+              /* Block boundary? Nothing to do */
-+              page = NULL;
-+      } else {
-+              page = grab_cache_page(mapping,
-+                              inode->i_size >> PAGE_CACHE_SHIFT);
-+              if (!page)
-+                      return;
-+      }
-+
-+      /*
-+       * probably first extent we're gonna free will be last in block
-+       */
-+      i = ext3_ext_calc_credits(inode, NULL, 0);
-+      handle = ext3_journal_start(inode, i);
-+      if (IS_ERR(handle)) {
-+              if (page) {
-+                      clear_highpage(page);
-+                      flush_dcache_page(page);
-+                      unlock_page(page);
-+                      page_cache_release(page);
-+              }
-+              return;
-+      }
-+
-+      if (page)
-+              ext3_block_truncate_page(handle, mapping, inode->i_size, page,
-+                                              inode->i_sb->s_blocksize);
-+
-+      down(&EXT3_I(inode)->i_ext_sem);
-+
-+      /* 
-+       * TODO: optimization is possible here
-+       * probably we need not scaning at all,
-+       * because page truncation is enough
-+       */
-+      if (ext3_orphan_add(handle, inode))
-+              goto out_stop;
-+
-+      /* we have to know where to truncate from in crash case */
-+      EXT3_I(inode)->i_disksize = inode->i_size;
-+      ext3_mark_inode_dirty(handle, inode);
-+
-+      /*
-+       * we start scanning from right side freeing all the blocks
-+       * after i_size and walking into the deep
-+       */
-+      i = 0;
-+      depth = EXT3_I(inode)->i_depth;
-+      path = kmalloc(sizeof(struct ext3_ext_path) * (depth + 1), GFP_KERNEL);
-+      if (IS_ERR(path)) {
-+              ext3_error(inode->i_sb, "ext3_ext_truncate",
-+                              "Can't allocate path array");
-+              goto out_stop;
-+      }
-+      memset(path, 0, sizeof(struct ext3_ext_path) * (depth + 1));
-+
-+      path[i].p_hdr = (struct ext3_extent_header *) EXT3_I(inode)->i_data;
-+      while (i >= 0 && err == 0) {
-+              if (i == depth) {
-+                      /* this is leaf block */
-+                      err = ext3_ext_truncate_leaf(handle, inode,
-+                                                      path + i, i);
-+                      /* root level have p_bh == NULL, brelse() eats this */
-+                      brelse(path[i].p_bh);
-+                      i--;
-+                      continue;
-+              }
-+              
-+              /* this is index block */
-+              if (!path[i].p_hdr) {
-+                      path[i].p_hdr =
-+                              (struct ext3_extent_header *) path[i].p_bh->b_data;
-+                      ext_debug(inode, "initialize header\n");
-+              }
-+
-+              EXT_ASSERT(path[i].p_hdr->e_num <= path[i].p_hdr->e_max);
-+              
-+              if (!path[i].p_idx) {
-+                      /* this level hasn't touched yet */
-+                      path[i].p_idx = EXT_LAST_INDEX(path[i].p_hdr);
-+                      path[i].p_block = path[i].p_hdr->e_num + 1;
-+                      ext_debug(inode, "init index ptr: hdr 0x%p, num %d\n",
-+                                      path[i].p_hdr, path[i].p_hdr->e_num);
-+              } else {
-+                      /* we've already was here, see at next index */
-+                      path[i].p_idx--;
-+              }
-+
-+              ext_debug(inode, "level %d - index, first 0x%p, cur 0x%p\n",
-+                              i, EXT_FIRST_INDEX(path[i].p_hdr),
-+                              path[i].p_idx);
-+              if (ext3_ext_more_to_truncate(inode, path + i)) {
-+                      /* go to the next level */
-+                      ext_debug(inode, "move to level %d (block %d)\n", i+1,
-+                                      path[i].p_idx->e_leaf);
-+                      memset(path + i + 1, 0, sizeof(*path));
-+                      path[i+1].p_bh = sb_bread(inode->i_sb,
-+                                                      path[i].p_idx->e_leaf);
-+                      if (!path[i+1].p_bh) {
-+                              /* should we reset i_size? */
-+                              err = -EIO;
-+                              break;
-+                      }
-+                      i++;
-+              } else {
-+                      /* we finish processing this index, go up */
-+                      if (path[i].p_hdr->e_num == 0 && i > 0) {
-+                              /* index is empty, remove it
-+                               * handle must be already prepared by the
-+                               * truncate_leaf()
-+                               */
-+                              err = ext3_ext_remove_index(handle, inode,
-+                                                              path + i);
-+                      }
-+                      /* root level have p_bh == NULL, brelse() eats this */
-+                      brelse(path[i].p_bh);
-+                      i--;
-+                      ext_debug(inode, "return to level %d\n", i);
-+              }
-+      }
-+
-+      /* TODO: flexible tree reduction should be here */
-+      if (path->p_hdr->e_num == 0) {
-+              /*
-+               * truncate to zero freed all the tree
-+               * so, we need to correct i_depth
-+               */
-+              EXT3_I(inode)->i_depth = 0;
-+              path->p_hdr->e_max = 0;
-+              ext3_mark_inode_dirty(handle, inode);
-+      }
-+
-+      kfree(path);
-+
-+      /* In a multi-transaction truncate, we only make the final
-+       * transaction synchronous */
-+      if (IS_SYNC(inode))
-+              handle->h_sync = 1;
-+
-+out_stop:
-+      /*
-+       * If this was a simple ftruncate(), and the file will remain alive
-+       * then we need to clear up the orphan record which we created above.
-+       * However, if this was a real unlink then we were called by
-+       * ext3_delete_inode(), and we allow that function to clean up the
-+       * orphan info for us.
-+       */
-+      if (inode->i_nlink)
-+              ext3_orphan_del(handle, inode);
-+
-+      up(&EXT3_I(inode)->i_ext_sem);
-+      ext3_journal_stop(handle, inode);
-+}
-+
-+/*
-+ * this routine calculate max number of blocks we could modify
-+ * in order to allocate new block for an inode
-+ */
-+int ext3_ext_writepage_trans_blocks(struct inode *inode, int num)
-+{
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+      int depth = ei->i_depth + 1;
-+      int needed;
-+      
-+      /*
-+       * the worste case we're expecting is creation of the
-+       * new root (growing in depth) with index splitting
-+       * for splitting we have to consider depth + 1 because
-+       * previous growing could increase it
-+       */
-+
-+      /* 
-+       * growing in depth:
-+       * block allocation + new root + old root
-+       */
-+      needed = EXT3_ALLOC_NEEDED + 2;
-+
-+      /* index split. we may need:
-+       *   allocate intermediate indexes and new leaf
-+       *   change two blocks at each level, but root
-+       *   modify root block (inode)
-+       */
-+      needed += (depth * EXT3_ALLOC_NEEDED) + (2 * depth) + 1;
-+
-+      /* caller want to allocate num blocks */
-+      needed *= num;
-+      
-+#ifdef CONFIG_QUOTA
-+      /* 
-+       * FIXME: real calculation should be here
-+       * it depends on blockmap format of qouta file
-+       */
-+      needed += 2 * EXT3_SINGLEDATA_TRANS_BLOCKS;
-+#endif
-+
-+      return needed;
-+}
-+
-+/*
-+ * called at mount time
-+ */
-+void ext3_ext_init(struct super_block *sb)
-+{
-+      /*
-+       * possible initialization would be here
-+       */
-+
-+      if (test_opt(sb, EXTENTS))
-+              printk("EXT3-fs: file extents enabled\n");
-+      spin_lock_init(&EXT3_SB(sb)->s_ext_lock);
-+}
-+
-+/*
-+ * called at umount time
-+ */
-+void ext3_ext_release(struct super_block *sb)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+
-+      /* show collected stats */
-+      if (sbi->s_ext_count && sbi->s_ext_extents)
-+              printk("EXT3-fs: min depth - %d, max depth - %d, "
-+                              "ave. depth - %d, ave. blocks/extent - %d\n",
-+                              sbi->s_ext_mindepth,
-+                              sbi->s_ext_maxdepth,
-+                              sbi->s_ext_sum / sbi->s_ext_count,
-+                              sbi->s_ext_blocks / sbi->s_ext_extents);
-+}
-+
---- linux-2.4.18-chaos-pdirops/fs/ext3/ialloc.c~ext3-extents-2.4.18-chaos-pdirops      2003-09-23 13:44:53.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/fs/ext3/ialloc.c 2003-09-23 14:29:32.000000000 +0400
-@@ -573,6 +573,10 @@ repeat:
-       ei->i_prealloc_count = 0;
- #endif
-       ei->i_block_group = i;
-+      if (test_opt(sb, EXTENTS))
-+              EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
-+      ei->i_depth = 0;
-+      sema_init(&ei->i_ext_sem, 1);
-       if (ei->i_flags & EXT3_SYNC_FL)
-               inode->i_flags |= S_SYNC;
---- linux-2.4.18-chaos-pdirops/fs/ext3/inode.c~ext3-extents-2.4.18-chaos-pdirops       2003-09-23 13:44:53.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/fs/ext3/inode.c  2003-09-23 14:29:32.000000000 +0400
-@@ -842,6 +842,15 @@ changed:
-       goto reread;
- }
-+static inline int
-+ext3_get_block_wrap(handle_t *handle, struct inode *inode, long block,
-+              struct buffer_head *bh, int create, int extend_disksize)
-+{
-+      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
-+              return ext3_ext_get_block(handle, inode, block, bh, create, 1);
-+      return ext3_get_block_handle(handle, inode, block, bh, create, 1);
-+}
-+
- /*
-  * The BKL is not held on entry here.
-  */
-@@ -855,7 +864,7 @@ static int ext3_get_block(struct inode *
-               handle = ext3_journal_current_handle();
-               J_ASSERT(handle != 0);
-       }
--      ret = ext3_get_block_handle(handle, inode, iblock,
-+      ret = ext3_get_block_wrap(handle, inode, iblock,
-                               bh_result, create, 1);
-       return ret;
- }
-@@ -882,7 +891,7 @@ ext3_direct_io_get_block(struct inode *i
-               }
-       }
-       if (ret == 0)
--              ret = ext3_get_block_handle(handle, inode, iblock,
-+              ret = ext3_get_block_wrap(handle, inode, iblock,
-                                       bh_result, create, 0);
-       if (ret == 0)
-               bh_result->b_size = (1 << inode->i_blkbits);
-@@ -904,7 +913,7 @@ struct buffer_head *ext3_getblk(handle_t
-       dummy.b_state = 0;
-       dummy.b_blocknr = -1000;
-       buffer_trace_init(&dummy.b_history);
--      *errp = ext3_get_block_handle(handle, inode, block, &dummy, create, 1);
-+      *errp = ext3_get_block_wrap(handle, inode, block, &dummy, create, 1);
-       if (!*errp && buffer_mapped(&dummy)) {
-               struct buffer_head *bh;
-               bh = sb_getblk(inode->i_sb, dummy.b_blocknr);
-@@ -1520,7 +1529,7 @@ ext3_block_truncate_page_prepare(struct 
-  * This required during truncate. We need to physically zero the tail end
-  * of that block so it doesn't yield old data if the file is later grown.
-  */
--static int ext3_block_truncate_page(handle_t *handle,
-+int ext3_block_truncate_page(handle_t *handle,
-                                   struct address_space *mapping, loff_t from,
-                                   struct page *page, unsigned blocksize)
- {
-@@ -1998,6 +2007,9 @@ void ext3_truncate(struct inode * inode)
-       ext3_discard_prealloc(inode);
-+      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
-+              return ext3_ext_truncate(inode);
-+
-       blocksize = inode->i_sb->s_blocksize;
-       last_block = (inode->i_size + blocksize-1)
-                                       >> EXT3_BLOCK_SIZE_BITS(inode->i_sb);
-@@ -2436,6 +2448,8 @@ void ext3_read_inode(struct inode * inod
-       ei->i_prealloc_count = 0;
- #endif
-       ei->i_block_group = iloc.block_group;
-+      ei->i_depth = raw_inode->osd2.linux2.l_i_depth;
-+      sema_init(&ei->i_ext_sem, 1);
-       /*
-        * NOTE! The in-memory inode i_data array is in little-endian order
-@@ -2559,6 +2573,7 @@ static int ext3_do_update_inode(handle_t
-               raw_inode->i_fsize = 0;
-       }
- #endif
-+      raw_inode->osd2.linux2.l_i_depth = ei->i_depth;
-       raw_inode->i_file_acl = cpu_to_le32(ei->i_file_acl);
-       if (!S_ISREG(inode->i_mode)) {
-               raw_inode->i_dir_acl = cpu_to_le32(ei->i_dir_acl);
-@@ -2762,6 +2777,9 @@ int ext3_writepage_trans_blocks(struct i
-       int indirects = (EXT3_NDIR_BLOCKS % bpp) ? 5 : 3;
-       int ret;
-       
-+      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
-+              return ext3_ext_writepage_trans_blocks(inode, bpp);
-+
-       if (ext3_should_journal_data(inode))
-               ret = 3 * (bpp + indirects) + 2;
-       else
-@@ -3085,7 +3103,7 @@ int ext3_prep_san_write(struct inode *in
-       /* alloc blocks one by one */
-       for (i = 0; i < nblocks; i++) {
--              ret = ext3_get_block_handle(handle, inode, blocks[i],
-+              ret = ext3_get_block_wrap(handle, inode, blocks[i],
-                                               &bh_tmp, 1, 1);
-               if (ret)
-                       break;
-@@ -3146,7 +3164,7 @@ int ext3_map_inode_page(struct inode *in
-                 if (blocks[i] != 0)
-                         continue;
--                rc = ext3_get_block_handle(handle, inode, iblock, &dummy, 1, 1);
-+                rc = ext3_get_block_wrap(handle, inode, iblock, &dummy, 1, 1);
-                 if (rc) {
-                         printk(KERN_INFO "ext3_map_inode_page: error reading "
-                                "block %ld\n", iblock);
---- linux-2.4.18-chaos-pdirops/fs/ext3/Makefile~ext3-extents-2.4.18-chaos-pdirops      2003-09-23 13:44:48.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/fs/ext3/Makefile 2003-09-23 14:29:32.000000000 +0400
-@@ -12,7 +12,8 @@ O_TARGET := ext3.o
- export-objs :=        ext3-exports.o
- obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
--              ioctl.o namei.o super.o symlink.o xattr.o hash.o ext3-exports.o
-+              ioctl.o namei.o super.o symlink.o xattr.o hash.o ext3-exports.o \
-+              extents.o
- obj-m    := $(O_TARGET)
- include $(TOPDIR)/Rules.make
---- linux-2.4.18-chaos-pdirops/fs/ext3/super.c~ext3-extents-2.4.18-chaos-pdirops       2003-09-23 13:44:53.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/fs/ext3/super.c  2003-09-23 14:29:33.000000000 +0400
-@@ -619,6 +619,7 @@ void ext3_put_super (struct super_block 
-       kdev_t j_dev = sbi->s_journal->j_dev;
-       int i;
-+      ext3_ext_release(sb);
-       ext3_stop_delete_thread(sbi);
-       ext3_xattr_put_super(sb);
-       journal_destroy(sbi->s_journal);
-@@ -741,6 +742,12 @@ static int parse_options (char * options
-               else
- #endif
-+              if (!strcmp (this_char, "extents"))
-+                      set_opt (sbi->s_mount_opt, EXTENTS);
-+              else
-+              if (!strcmp (this_char, "extdebug"))
-+                      set_opt (sbi->s_mount_opt, EXTDEBUG);
-+              else
-               if (!strcmp (this_char, "bsddf"))
-                       clear_opt (*mount_options, MINIX_DF);
-               else if (!strcmp (this_char, "nouid32")) {
-@@ -1471,6 +1478,7 @@ struct super_block * ext3_read_super (st
-               test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_JOURNAL_DATA ? "journal":
-               test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered":
-               "writeback");
-+      ext3_ext_init(sb);
-       if (test_opt(sb, PDIROPS)) {
-               printk (KERN_INFO "EXT3-fs: mounted filesystem with parallel dirops\n");
---- linux-2.4.18-chaos-pdirops/include/linux/ext3_fs.h~ext3-extents-2.4.18-chaos-pdirops       2003-09-23 13:44:53.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/include/linux/ext3_fs.h  2003-09-23 14:29:33.000000000 +0400
-@@ -188,6 +188,7 @@ struct ext3_group_desc
- #define EXT3_IMAGIC_FL                        0x00002000 /* AFS directory */
- #define EXT3_JOURNAL_DATA_FL          0x00004000 /* file data should be journaled */
- #define EXT3_RESERVED_FL              0x80000000 /* reserved for ext3 lib */
-+#define EXT3_EXTENTS_FL                       0x00080000 /* Inode uses extents */
- #define EXT3_FL_USER_VISIBLE          0x00005FFF /* User visible flags */
- #define EXT3_FL_USER_MODIFIABLE               0x000000FF /* User modifiable flags */
-@@ -248,7 +249,7 @@ struct ext3_inode {
-               struct {
-                       __u8    l_i_frag;       /* Fragment number */
-                       __u8    l_i_fsize;      /* Fragment size */
--                      __u16   i_pad1;
-+                      __u16   l_i_depth;
-                       __u16   l_i_uid_high;   /* these 2 fields    */
-                       __u16   l_i_gid_high;   /* were reserved2[0] */
-                       __u32   l_i_reserved2;
-@@ -329,6 +330,8 @@ struct ext3_inode {
- #define EXT3_MOUNT_IOPEN              0x8000  /* Allow access via iopen */
- #define EXT3_MOUNT_IOPEN_NOPRIV               0x10000 /* Make iopen world-readable */
- #define EXT3_MOUNT_ASYNCDEL           0x20000 /* Delayed deletion */
-+#define EXT3_MOUNT_EXTENTS            0x40000 /* Extents support */
-+#define EXT3_MOUNT_EXTDEBUG           0x80000 /* Extents debug */
- /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
- #ifndef _LINUX_EXT2_FS_H
-@@ -720,6 +723,12 @@ extern void ext3_discard_prealloc (struc
- extern void ext3_dirty_inode(struct inode *);
- extern int ext3_change_inode_journal_flag(struct inode *, int);
- extern void ext3_truncate (struct inode *);
-+extern int ext3_block_truncate_page(handle_t *handle,
-+                                  struct address_space *mapping, loff_t from,
-+                                  struct page *page, unsigned blocksize);
-+extern int ext3_forget(handle_t *handle, int is_metadata,
-+                     struct inode *inode, struct buffer_head *bh,
-+                     int blocknr);
- #ifdef EXT3_DELETE_THREAD
- extern void ext3_truncate_thread(struct inode *inode);
- #endif
-@@ -781,6 +790,13 @@ extern struct inode_operations ext3_dir_
- /* symlink.c */
- extern struct inode_operations ext3_fast_symlink_inode_operations;
-+/* extents.c */
-+extern int ext3_ext_writepage_trans_blocks(struct inode *, int);
-+extern int ext3_ext_get_block(handle_t *, struct inode *, long,
-+                              struct buffer_head *, int, int);
-+extern void ext3_ext_truncate(struct inode *);
-+extern void ext3_ext_init(struct super_block *);
-+extern void ext3_ext_release(struct super_block *);
- #endif        /* __KERNEL__ */
---- linux-2.4.18-chaos-pdirops/include/linux/ext3_fs_i.h~ext3-extents-2.4.18-chaos-pdirops     2003-09-23 13:44:53.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/include/linux/ext3_fs_i.h        2003-09-23 14:29:33.000000000 +0400
-@@ -79,6 +79,10 @@ struct ext3_inode_info {
-       struct dynlock i_htree_lock;
-       struct semaphore i_append_sem;
-       struct semaphore i_rename_sem;
-+
-+      /* extents-related data */
-+      struct semaphore i_ext_sem;
-+      __u16 i_depth;
- };
- #endif        /* _LINUX_EXT3_FS_I */
---- linux-2.4.18-chaos-pdirops/include/linux/ext3_fs_sb.h~ext3-extents-2.4.18-chaos-pdirops    2003-09-23 13:34:51.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/include/linux/ext3_fs_sb.h       2003-09-23 14:29:33.000000000 +0400
-@@ -86,6 +86,16 @@ struct ext3_sb_info {
-       wait_queue_head_t s_delete_thread_queue;
-       wait_queue_head_t s_delete_waiter_queue;
- #endif
-+
-+      /* extents */
-+      int s_ext_debug;
-+      int s_ext_mindepth;
-+      int s_ext_maxdepth;
-+      int s_ext_sum;
-+      int s_ext_count;
-+      spinlock_t s_ext_lock;
-+      int s_ext_extents;
-+      int s_ext_blocks;
- };
- #endif        /* _LINUX_EXT3_FS_SB */
-
-_
diff --git a/lustre/kernel_patches/patches/ext3-extents-2.4.18-chaos.patch b/lustre/kernel_patches/patches/ext3-extents-2.4.18-chaos.patch
deleted file mode 100644 (file)
index a0b4230..0000000
+++ /dev/null
@@ -1,1895 +0,0 @@
- fs/ext3/Makefile           |    3 
- fs/ext3/extents.c          | 1615 +++++++++++++++++++++++++++++++++++++++++++++
- fs/ext3/ialloc.c           |    4 
- fs/ext3/inode.c            |   30 
- fs/ext3/super.c            |    8 
- include/linux/ext3_fs.h    |   18 
- include/linux/ext3_fs_i.h  |    4 
- include/linux/ext3_fs_sb.h |   10 
- 8 files changed, 1684 insertions(+), 8 deletions(-)
-
-Index: linux-2.4.18-chaos/fs/ext3/extents.c
-===================================================================
---- linux-2.4.18-chaos.orig/fs/ext3/extents.c  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.18-chaos/fs/ext3/extents.c       2004-01-13 16:11:00.000000000 +0300
-@@ -0,0 +1,1614 @@
-+/*
-+ *
-+ * linux/fs/ext3/extents.c
-+ *
-+ * Extents support for EXT3
-+ *
-+ * 07/08/2003    Alex Tomas <bzzz@tmi.comex.ru>
-+ * 
-+ * TODO:
-+ *   - ext3*_error() should be used in some situations
-+ *   - find_goal() [to be tested and improved]
-+ *   - error handling
-+ *   - we could leak allocated block in some error cases
-+ *   - quick search for index/leaf in ext3_ext_find_extent()
-+ *   - tree reduction
-+ *   - cache last found extent
-+ *   - arch-independent
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/fs.h>
-+#include <linux/time.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/jbd.h>
-+#include <linux/smp_lock.h>
-+#include <linux/highuid.h>
-+#include <linux/pagemap.h>
-+#include <linux/quotaops.h>
-+#include <linux/string.h>
-+#include <linux/slab.h>
-+#include <linux/locks.h>
-+
-+/*
-+ * with AGRESSIVE_TEST defined capacity of index/leaf blocks
-+ * become very little, so index split, in-depth growing and
-+ * other hard changes happens much more often
-+ * this is for debug purposes only
-+ */
-+#define AGRESSIVE_TEST_
-+
-+/*
-+ * if EXT_DEBUG defined you can use 'extdebug' mount option
-+ * to get lots of info what's going on
-+ */
-+#define EXT_DEBUG
-+#ifdef EXT_DEBUG
-+#define ext_debug(inode,fmt,a...)             \
-+do {                                          \
-+      if (test_opt((inode)->i_sb, EXTDEBUG))  \
-+              printk(fmt, ##a);               \
-+} while (0);
-+#else
-+#define ext_debug(inode,fmt,a...)
-+#endif
-+
-+#define EXT3_ALLOC_NEEDED     2       /* block bitmap + group descriptor */
-+
-+/*
-+ * ext3_inode has i_block array (total 60 bytes)
-+ * first 4 bytes are used to store:
-+ *  - tree depth (0 mean there is no tree yet. all extents in the inode)
-+ *  - number of alive extents in the inode
-+ */
-+
-+/*
-+ * this is extent on-disk structure
-+ * it's used at the bottom of the tree
-+ */
-+struct ext3_extent {
-+      __u32   e_block;        /* first logical block extent covers */
-+      __u32   e_start;        /* first physical block extents lives */
-+      __u32   e_num;          /* number of blocks covered by extent */
-+};
-+
-+/*
-+ * this is index on-disk structure
-+ * it's used at all the levels, but the bottom
-+ */
-+struct ext3_extent_idx {
-+      __u32   e_block;        /* index covers logical blocks from 'block' */
-+      __u32   e_leaf;         /* pointer to the physical block of the next *
-+                               * level. leaf or next index could bet here */
-+};
-+
-+/*
-+ * each block (leaves and indexes), even inode-stored has header
-+ */
-+struct ext3_extent_header {   
-+      __u16   e_num;          /* number of valid entries */
-+      __u16   e_max;          /* capacity of store in entries */
-+};
-+
-+/*
-+ * array of ext3_ext_path contains path to some extent
-+ * creation/lookup routines use it for traversal/splitting/etc
-+ * truncate uses it to simulate recursive walking
-+ */
-+struct ext3_ext_path {
-+      __u32                           p_block;
-+      __u16                           p_depth;
-+      struct ext3_extent              *p_ext;
-+      struct ext3_extent_idx          *p_idx;
-+      struct ext3_extent_header       *p_hdr;
-+      struct buffer_head              *p_bh;
-+};
-+
-+#define EXT_FIRST_EXTENT(__hdr__) \
-+      ((struct ext3_extent *) (((char *) (__hdr__)) +         \
-+                               sizeof(struct ext3_extent_header)))
-+#define EXT_FIRST_INDEX(__hdr__) \
-+      ((struct ext3_extent_idx *) (((char *) (__hdr__)) +     \
-+                                   sizeof(struct ext3_extent_header)))
-+#define EXT_HAS_FREE_INDEX(__path__) \
-+      ((__path__)->p_hdr->e_num < (__path__)->p_hdr->e_max)
-+#define EXT_LAST_EXTENT(__hdr__) \
-+      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->e_num - 1)
-+#define EXT_LAST_INDEX(__hdr__) \
-+      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->e_num - 1)
-+#define EXT_MAX_EXTENT(__hdr__) \
-+      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->e_max - 1)
-+#define EXT_MAX_INDEX(__hdr__) \
-+      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->e_max - 1)
-+
-+
-+#define EXT_ASSERT(__x__) if (!(__x__)) BUG();
-+
-+/*
-+ * could return:
-+ *  - EROFS
-+ *  - ENOMEM
-+ */
-+static int ext3_ext_get_access(handle_t *handle, struct inode *inode,
-+                              struct ext3_ext_path *path)
-+{
-+      if (path->p_bh) {
-+              /* path points to block */
-+              return ext3_journal_get_write_access(handle, path->p_bh);
-+      }
-+
-+      /* path points to leaf/index in inode body */
-+      return 0;
-+}
-+
-+/*
-+ * could return:
-+ *  - EROFS
-+ *  - ENOMEM
-+ *  - EIO
-+ */
-+static int ext3_ext_dirty(handle_t *handle, struct inode *inode,
-+                              struct ext3_ext_path *path)
-+{
-+      if (path->p_bh) {
-+              /* path points to block */
-+              return ext3_journal_dirty_metadata(handle, path->p_bh);
-+      }
-+
-+      /* path points to leaf/index in inode body */
-+      return ext3_mark_inode_dirty(handle, inode);
-+}
-+
-+static inline int ext3_ext_space_block(struct inode *inode)
-+{
-+      int size;
-+
-+      size = (inode->i_sb->s_blocksize - sizeof(struct ext3_extent_header))
-+              / sizeof(struct ext3_extent);
-+#ifdef AGRESSIVE_TEST
-+      size = 6; /* FIXME: for debug, remove this line */
-+#endif
-+      return size;
-+}
-+
-+static inline int ext3_ext_space_inode(struct inode *inode)
-+{
-+      int size;
-+
-+      size = (sizeof(EXT3_I(inode)->i_data) -
-+                      sizeof(struct ext3_extent_header))
-+                      / sizeof(struct ext3_extent);
-+#ifdef AGRESSIVE_TEST
-+      size = 3; /* FIXME: for debug, remove this line */
-+#endif
-+      return size;
-+}
-+
-+static inline int ext3_ext_space_inode_idx(struct inode *inode)
-+{
-+      int size;
-+
-+      size = (sizeof(EXT3_I(inode)->i_data) -
-+                      sizeof(struct ext3_extent_header))
-+                      / sizeof(struct ext3_extent_idx);
-+#ifdef AGRESSIVE_TEST
-+      size = 4; /* FIXME: for debug, remove this line */
-+#endif
-+      return size;
-+}
-+
-+static void ext3_ext_show_path(struct inode *inode, struct ext3_ext_path *path)
-+{
-+      int k, l = path->p_depth;
-+
-+      ext_debug(inode, "path:");
-+      for (k = 0; k <= l; k++, path++) {
-+              if (path->p_idx) {
-+                      ext_debug(inode, "  %d->%d", path->p_idx->e_block,
-+                                      path->p_idx->e_leaf);
-+              } else if (path->p_ext) {
-+                      ext_debug(inode, "  %d:%d:%d",
-+                                      path->p_ext->e_block,
-+                                      path->p_ext->e_start,
-+                                      path->p_ext->e_num);
-+              } else
-+                      ext_debug(inode, "  []");
-+      }
-+      ext_debug(inode, "\n");
-+}
-+
-+static void ext3_ext_show_leaf(struct inode *inode, struct ext3_ext_path *path)
-+{
-+      int depth = EXT3_I(inode)->i_depth;
-+      struct ext3_extent_header *eh = path[depth].p_hdr;
-+      struct ext3_extent *ex = EXT_FIRST_EXTENT(eh);
-+      int i;
-+
-+      for (i = 0; i < eh->e_num; i++, ex++) {
-+              ext_debug(inode, "%d:%d:%d ",
-+                              ex->e_block, ex->e_start, ex->e_num);
-+      }
-+      ext_debug(inode, "\n");
-+}
-+
-+static void ext3_ext_drop_refs(struct inode *inode, struct ext3_ext_path *path)
-+{
-+      int depth = path->p_depth;
-+      int i;
-+
-+      for (i = 0; i <= depth; i++, path++)
-+              if (path->p_bh) {
-+                      brelse(path->p_bh);
-+                      path->p_bh = NULL;
-+              }
-+}
-+
-+static int ext3_ext_find_goal(struct inode *inode, struct ext3_ext_path *path)
-+{
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+      unsigned long bg_start;
-+      unsigned long colour;
-+      int depth;
-+      
-+      if (path) {
-+              depth = path->p_depth;
-+              /* try to find previous block */
-+              if (path[depth].p_ext)
-+                      return path[depth].p_ext->e_start +
-+                              path[depth].p_ext->e_num - 1;
-+              
-+              /* it looks index is empty
-+               * try to find starting from index itself */
-+              if (path[depth].p_bh)
-+                      return path[depth].p_bh->b_blocknr;
-+      }
-+
-+      /* OK. use inode's group */
-+      bg_start = (ei->i_block_group * EXT3_BLOCKS_PER_GROUP(inode->i_sb)) +
-+              le32_to_cpu(EXT3_SB(inode->i_sb)->s_es->s_first_data_block);
-+      colour = (current->pid % 16) *
-+                      (EXT3_BLOCKS_PER_GROUP(inode->i_sb) / 16);
-+      return bg_start + colour;
-+}
-+
-+static struct ext3_ext_path *
-+ext3_ext_find_extent(struct inode *inode, int block, struct ext3_ext_path *path)
-+{
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+      struct ext3_extent_header *eh = (void *) ei->i_data;
-+      struct ext3_extent_idx *ix;
-+      struct buffer_head *bh;
-+      struct ext3_extent *ex;
-+      int depth, i, k, ppos = 0, prev = 0;
-+      
-+      eh = (struct ext3_extent_header *) ei->i_data;
-+
-+      /* initialize capacity of leaf in inode for first time */
-+      if (eh->e_max == 0)
-+              eh->e_max = ext3_ext_space_inode(inode);
-+      i = depth = ei->i_depth;
-+      EXT_ASSERT(i == 0 || eh->e_num > 0);
-+      
-+      /* account possible depth increase */
-+      if (!path) {
-+              path = kmalloc(sizeof(struct ext3_ext_path) * (depth + 2),
-+                              GFP_NOFS);
-+              if (!path)
-+                      return ERR_PTR(-ENOMEM);
-+      }
-+      memset(path, 0, sizeof(struct ext3_ext_path) * (depth + 1));
-+
-+      /* walk through the tree */
-+      while (i) {
-+              ext_debug(inode, "depth %d: num %d, max %d\n",
-+                              ppos, eh->e_num, eh->e_max);
-+              ix = EXT_FIRST_INDEX(eh);
-+              if (eh->e_num) {
-+                      EXT_ASSERT(prev == 0 || ix->e_block == prev);
-+                      path[ppos].p_idx = ix;
-+              }
-+              EXT_ASSERT(eh->e_num <= eh->e_max);
-+              for (k = 0; k < eh->e_num; k++, ix++) {
-+                      ext_debug(inode, "index: %d -> %d\n",
-+                                      ix->e_block, ix->e_leaf);
-+                      EXT_ASSERT((k == 0 && prev <= (int)ix->e_block) ||
-+                                      (k > 0 && prev < (int)ix->e_block));
-+                      if (block < ix->e_block)
-+                              break;
-+                      prev = ix->e_block;
-+                      path[ppos].p_idx = ix;
-+              }
-+              path[ppos].p_block = path[ppos].p_idx->e_leaf;
-+              path[ppos].p_depth = i;
-+              path[ppos].p_hdr = eh;
-+              path[ppos].p_ext = NULL;
-+
-+              bh = sb_bread(inode->i_sb, path[ppos].p_block);
-+              if (!bh) {
-+                      ext3_ext_drop_refs(inode, path);
-+                      kfree(path);
-+                      return ERR_PTR(-EIO);
-+              }
-+              eh = (struct ext3_extent_header *) bh->b_data;
-+              ppos++;
-+              EXT_ASSERT(ppos <= depth);
-+              path[ppos].p_bh = bh;
-+              i--;
-+      }
-+
-+      path[ppos].p_depth = i;
-+      path[ppos].p_hdr = eh;
-+      path[ppos].p_ext = NULL;
-+      
-+      /* find extent */
-+      ex = EXT_FIRST_EXTENT(eh);
-+      if (eh->e_num)
-+              path[ppos].p_ext = ex;
-+      EXT_ASSERT(eh->e_num <= eh->e_max);
-+      for (k = 0; k < eh->e_num; k++, ex++) {
-+              EXT_ASSERT(ex->e_num < EXT3_BLOCKS_PER_GROUP(inode->i_sb));
-+              EXT_ASSERT((k == 0 && prev <= (int)ex->e_block) ||
-+                              (k > 0 && prev < (int)ex->e_block));
-+              if (block < ex->e_block) 
-+                      break;
-+              prev = ex->e_block;
-+              path[ppos].p_ext = ex;
-+      }
-+
-+      ext3_ext_show_path(inode, path);
-+
-+      return path;
-+}
-+
-+static void ext3_ext_check_boundary(struct inode *inode,
-+                                      struct ext3_ext_path *curp,
-+                                      void *addr, int len)
-+{
-+      void *end;
-+
-+      if (!len)
-+              return;
-+      if (curp->p_bh)
-+              end = (void *) curp->p_hdr + inode->i_sb->s_blocksize;
-+      else
-+              end = (void *) curp->p_hdr + sizeof(EXT3_I(inode)->i_data);
-+      if (((unsigned long) addr) + len > (unsigned long) end) {
-+              printk("overflow! 0x%p > 0x%p\n", addr + len, end);
-+              BUG();
-+      }
-+      if ((unsigned long) addr < (unsigned long) curp->p_hdr) {
-+              printk("underflow! 0x%p < 0x%p\n", addr, curp->p_hdr);
-+              BUG();
-+      }
-+}
-+
-+/*
-+ * insert new index [logical;ptr] into the block at cupr
-+ * it check where to insert: before curp or after curp
-+ */
-+static int ext3_ext_insert_index(handle_t *handle, struct inode *inode,
-+                              struct ext3_ext_path *curp, int logical,
-+                              int ptr)
-+{
-+      struct ext3_extent_idx *ix;
-+      int len, err;
-+
-+      if ((err = ext3_ext_get_access(handle, inode, curp)))
-+              return err;
-+
-+      EXT_ASSERT(logical != curp->p_idx->e_block);
-+      len = EXT_MAX_INDEX(curp->p_hdr) - curp->p_idx;
-+      if (logical > curp->p_idx->e_block) {
-+              /* insert after */
-+              len = (len - 1) * sizeof(struct ext3_extent_idx);
-+              len = len < 0 ? 0 : len;
-+              ext_debug(inode, "insert new index %d after: %d. "
-+                              "move %d from 0x%p to 0x%p\n",
-+                              logical, ptr, len,
-+                              (curp->p_idx + 1), (curp->p_idx + 2));
-+
-+              ext3_ext_check_boundary(inode, curp, curp->p_idx + 2, len);
-+              memmove(curp->p_idx + 2, curp->p_idx + 1, len);
-+              ix = curp->p_idx + 1;
-+      } else {
-+              /* insert before */
-+              len = len * sizeof(struct ext3_extent_idx);
-+              len = len < 0 ? 0 : len;
-+              ext_debug(inode, "insert new index %d before: %d. "
-+                              "move %d from 0x%p to 0x%p\n",
-+                              logical, ptr, len,
-+                              curp->p_idx, (curp->p_idx + 1));
-+
-+              ext3_ext_check_boundary(inode, curp, curp->p_idx + 1, len);
-+              memmove(curp->p_idx + 1, curp->p_idx, len);
-+              ix = curp->p_idx;
-+      }
-+
-+      ix->e_block = logical;
-+      ix->e_leaf = ptr;
-+      curp->p_hdr->e_num++;
-+
-+      err = ext3_ext_dirty(handle, inode, curp);
-+      ext3_std_error(inode->i_sb, err);
-+
-+      return err;
-+}
-+
-+/*
-+ * routine inserts new subtree into the path, using free index entry
-+ * at depth 'at:
-+ *  - allocates all needed blocks (new leaf and all intermediate index blocks)
-+ *  - makes decision where to split
-+ *  - moves remaining extens and index entries (right to the split point)
-+ *    into the newly allocated blocks
-+ *  - initialize subtree
-+ */
-+static int ext3_ext_split(handle_t *handle, struct inode *inode,
-+                              struct ext3_ext_path *path,
-+                              struct ext3_extent *newext, int at)
-+{
-+      struct buffer_head *bh = NULL;
-+      int depth = EXT3_I(inode)->i_depth;
-+      struct ext3_extent_header *neh;
-+      struct ext3_extent_idx *fidx;
-+      struct ext3_extent *ex;
-+      int i = at, k, m, a;
-+      long newblock, oldblock, border;
-+      int *ablocks = NULL; /* array of allocated blocks */
-+      int err = 0;
-+
-+      /* make decision: where to split? */
-+      /* FIXME: now desicion is simplest: at current extent */
-+
-+      /* if current leaf will be splitted, then we should use 
-+       * border from split point */
-+      
-+      if (path[depth].p_ext != EXT_MAX_EXTENT(path[depth].p_hdr)) {
-+              border = path[depth].p_ext[1].e_block;
-+              ext_debug(inode, "leaf will be splitted."
-+                              " next leaf starts at %d\n",
-+                              (int)border);
-+      } else {
-+              border = newext->e_block;
-+              ext_debug(inode, "leaf will be added."
-+                              " next leaf starts at %d\n",
-+                              (int)border);
-+      }
-+
-+      /* 
-+       * if error occurs, then we break processing
-+       * and turn filesystem read-only. so, index won't
-+       * be inserted and tree will be in consistent
-+       * state. next mount will repair buffers too
-+       */
-+
-+      /*
-+       * get array to track all allocated blocks
-+       * we need this to handle errors and free blocks
-+       * upon them
-+       */
-+      ablocks = kmalloc(sizeof(long) * depth, GFP_NOFS);
-+      if (!ablocks)
-+              return -ENOMEM;
-+      memset(ablocks, 0, sizeof(long) * depth);
-+
-+      /* allocate all needed blocks */
-+      ext_debug(inode, "allocate %d blocks for indexes/leaf\n", depth - at);
-+      newblock = 0; /* FIXME: something more sophisticated needed here */ 
-+      for (a = 0; newext->e_num > 0 && a < depth - at; a++) {
-+              newblock = ablocks[a] = newext->e_start++;
-+              newext->e_num--;
-+      }
-+      for (; a < depth - at; a++) {
-+              newblock = ext3_new_block(handle, inode,
-+                                              newblock + 1, 0, 0, &err);
-+              if (newblock == 0)
-+                      goto cleanup;
-+              ablocks[a] = newblock;
-+      }
-+
-+      /* initialize new leaf */
-+      newblock = ablocks[--a];
-+      EXT_ASSERT(newblock);
-+      bh = sb_getblk(inode->i_sb, newblock);
-+      if (!bh) {
-+              err = -EIO;
-+              goto cleanup;
-+      }
-+      lock_buffer(bh);
-+
-+      if ((err = ext3_journal_get_create_access(handle, bh)))
-+              goto cleanup;
-+
-+      neh = (struct ext3_extent_header *) bh->b_data;
-+      neh->e_num = 0;
-+      neh->e_max = ext3_ext_space_block(inode);
-+      ex = EXT_FIRST_EXTENT(neh);
-+
-+      /* move remain of path[depth] to the new leaf */
-+      EXT_ASSERT(path[depth].p_hdr->e_num ==
-+                      path[depth].p_hdr->e_max);
-+      /* start copy from next extent */
-+      /* TODO: we could do it by single memmove */
-+      m = 0;
-+      path[depth].p_ext++;
-+      while (path[depth].p_ext <=
-+                      EXT_MAX_EXTENT(path[depth].p_hdr)) {
-+              ext_debug(inode, "move %d:%d:%d in new leaf\n",
-+                              path[depth].p_ext->e_block,
-+                              path[depth].p_ext->e_start,
-+                              path[depth].p_ext->e_num);
-+              memmove(ex++, path[depth].p_ext++,
-+                              sizeof(struct ext3_extent));
-+              neh->e_num++;
-+              m++;
-+      }
-+      mark_buffer_uptodate(bh, 1);
-+      unlock_buffer(bh);
-+
-+      if ((err = ext3_journal_dirty_metadata(handle, bh)))
-+              goto cleanup;   
-+      brelse(bh);
-+      bh = NULL;
-+
-+      /* correct old leaf */
-+      if (m) {
-+              if ((err = ext3_ext_get_access(handle, inode, path)))
-+                      goto cleanup;
-+              path[depth].p_hdr->e_num -= m;
-+              if ((err = ext3_ext_dirty(handle, inode, path)))
-+                      goto cleanup;
-+              
-+      }
-+
-+      /* create intermediate indexes */
-+      k = depth - at - 1;
-+      EXT_ASSERT(k >= 0);
-+      if (k)
-+              ext_debug(inode,
-+                              "create %d intermediate indices\n", k);
-+      /* insert new index into current index block */
-+      /* current depth stored in i var */
-+      i = depth - 1;
-+      while (k--) {
-+              oldblock = newblock;
-+              newblock = ablocks[--a];
-+              bh = sb_getblk(inode->i_sb, newblock);
-+              if (!bh) {
-+                      err = -EIO;
-+                      goto cleanup;
-+              }
-+              lock_buffer(bh);
-+
-+              if ((err = ext3_journal_get_create_access(handle, bh)))
-+                      goto cleanup;
-+
-+              neh = (struct ext3_extent_header *) bh->b_data;
-+              neh->e_num = 1;
-+              neh->e_max = ext3_ext_space_block(inode);
-+              fidx = EXT_FIRST_INDEX(neh);
-+              fidx->e_block = border;
-+              fidx->e_leaf = oldblock;
-+
-+              ext_debug(inode,
-+                              "int.index at %d (block %u): %d -> %d\n",
-+                              i, (unsigned) newblock,
-+                              (int) border,
-+                              (int) oldblock);
-+              /* copy indexes */
-+              m = 0;
-+              path[i].p_idx++;
-+              ext_debug(inode, "cur 0x%p, last 0x%p\n", path[i].p_idx,
-+                              EXT_MAX_INDEX(path[i].p_hdr));
-+              EXT_ASSERT(EXT_MAX_INDEX(path[i].p_hdr) ==
-+                              EXT_LAST_INDEX(path[i].p_hdr));
-+              while (path[i].p_idx <=
-+                              EXT_MAX_INDEX(path[i].p_hdr)) {
-+                      ext_debug(inode, "%d: move %d:%d in new index\n",
-+                                      i, path[i].p_idx->e_block,
-+                                      path[i].p_idx->e_leaf);
-+                      memmove(++fidx, path[i].p_idx++,
-+                                      sizeof(struct ext3_extent_idx));
-+                      neh->e_num++;
-+                      m++;
-+              }
-+
-+              mark_buffer_uptodate(bh, 1);
-+              unlock_buffer(bh);
-+
-+              if ((err = ext3_journal_dirty_metadata(handle, bh)))
-+                      goto cleanup;
-+              brelse(bh);
-+              bh = NULL;
-+
-+              /* correct old index */
-+              if (m) {
-+                      err = ext3_ext_get_access(handle,inode,path+i);
-+                      if (err)
-+                              goto cleanup;
-+                      path[i].p_hdr->e_num -= m;
-+                      err = ext3_ext_dirty(handle, inode, path + i);
-+                      if (err)
-+                              goto cleanup;
-+              }
-+
-+              i--;
-+      }
-+
-+      /* insert new index */
-+      if (!err)
-+              err = ext3_ext_insert_index(handle, inode, path + at,
-+                                              border, newblock);
-+
-+cleanup:
-+      if (bh) {
-+              if (buffer_locked(bh))
-+                      unlock_buffer(bh);
-+              brelse(bh);
-+      }
-+
-+      if (err) {
-+              /* free all allocated blocks in error case */
-+              for (i = 0; i < depth; i++)
-+                      if (!ablocks[i])
-+                              continue;
-+                      ext3_free_blocks(handle, inode, ablocks[i], 1);
-+      }
-+      kfree(ablocks);
-+
-+      return err;
-+}
-+
-+/*
-+ * routine implements tree growing procedure:
-+ *  - allocates new block
-+ *  - moves top-level data (index block or leaf) into the new block
-+ *  - initialize new top-level, creating index that points to the
-+ *    just created block
-+ */
-+static int ext3_ext_grow_indepth(handle_t *handle, struct inode *inode,
-+                                      struct ext3_ext_path *path,
-+                                      struct ext3_extent *newext)
-+{
-+      struct buffer_head *bh;
-+      struct ext3_ext_path *curp = path;
-+      struct ext3_extent_header *neh;
-+      struct ext3_extent_idx *fidx;
-+      int len, err = 0;
-+      long newblock;
-+
-+      /*
-+       * use already allocated by the called block for new root block
-+       */
-+      newblock = newext->e_start++;
-+      if (newext->e_num == 0) {
-+              /* 
-+               * FIXME: if this may happen, then we have to handle
-+               * possible error and free allocated block
-+               */
-+              printk("grow_indepth with zero blocks\n");
-+              newblock = ext3_new_block(handle, inode,
-+                                              newblock, 0, 0, &err);
-+      } else
-+              newext->e_num--;
-+      
-+      bh = sb_getblk(inode->i_sb, newblock);
-+      if (!bh) {
-+              err = -EIO;
-+              ext3_std_error(inode->i_sb, err);
-+              return err;
-+      }
-+      lock_buffer(bh);
-+
-+      if ((err = ext3_journal_get_create_access(handle, bh))) {
-+              unlock_buffer(bh);
-+              goto out;       
-+      }
-+
-+      /* move top-level index/leaf into new block */
-+      len = sizeof(struct ext3_extent_header) +
-+              sizeof(struct ext3_extent) * curp->p_hdr->e_max;
-+      EXT_ASSERT(len >= 0 && len < 4096);
-+      memmove(bh->b_data, curp->p_hdr, len);
-+
-+      /* set size of new block */
-+      neh = (struct ext3_extent_header *) bh->b_data;
-+      neh->e_max = ext3_ext_space_block(inode);
-+      mark_buffer_uptodate(bh, 1);
-+      unlock_buffer(bh);
-+
-+      if ((err = ext3_journal_dirty_metadata(handle, bh)))
-+              goto out;
-+
-+      /* create index in new top-level index: num,max,pointer */
-+      if ((err = ext3_ext_get_access(handle, inode, curp)))
-+              goto out;
-+
-+      curp->p_hdr->e_max = ext3_ext_space_inode_idx(inode);
-+      curp->p_hdr->e_num = 1;
-+      curp->p_idx = EXT_FIRST_INDEX(curp->p_hdr);
-+      curp->p_idx->e_block = EXT_FIRST_EXTENT(path[0].p_hdr)->e_block;
-+      curp->p_idx->e_leaf = newblock;
-+
-+      neh = (struct ext3_extent_header *) EXT3_I(inode)->i_data;
-+      fidx = EXT_FIRST_INDEX(neh);
-+      ext_debug(inode, "new root: num %d(%d), lblock %d, ptr %d\n",
-+                      neh->e_num, neh->e_max, fidx->e_block, fidx->e_leaf); 
-+
-+      EXT3_I(inode)->i_depth++;
-+      err = ext3_ext_dirty(handle, inode, curp);
-+out:
-+      brelse(bh);
-+
-+      return err;
-+}
-+
-+/*
-+ * routine finds empty index and adds new leaf. if no free index found
-+ * then it requests in-depth growing
-+ */
-+static int ext3_ext_create_new_leaf(handle_t *handle, struct inode *inode,
-+                                      struct ext3_ext_path *path,
-+                                      struct ext3_extent *newext)
-+{
-+      long newblock = newext->e_start;
-+      struct ext3_ext_path *curp;
-+      int depth, i, err = 0;
-+
-+repeat:
-+      i = depth = EXT3_I(inode)->i_depth;
-+      
-+      /* walk up to the tree and look for free index entry */
-+      curp = path + depth;
-+      while (i > 0 && !EXT_HAS_FREE_INDEX(curp)) {
-+              i--;
-+              curp--;
-+      }
-+
-+      /* we use already allocated block for index block
-+       * so, subsequent data blocks should be contigoues */
-+      if (EXT_HAS_FREE_INDEX(curp)) {
-+              /* if we found index with free entry, then use that
-+               * entry: create all needed subtree and add new leaf */
-+              err = ext3_ext_split(handle, inode, path, newext, i);
-+
-+              /* refill path */
-+              ext3_ext_drop_refs(inode, path);
-+              path = ext3_ext_find_extent(inode, newext->e_block, path);
-+              if (IS_ERR(path))
-+                      err = PTR_ERR(path);
-+      } else {
-+              /* tree is full, time to grow in depth */
-+              err = ext3_ext_grow_indepth(handle, inode, path, newext);
-+
-+              /* refill path */
-+              ext3_ext_drop_refs(inode, path);
-+              path = ext3_ext_find_extent(inode, newext->e_block, path);
-+              if (IS_ERR(path))
-+                      err = PTR_ERR(path);
-+      
-+              /*
-+               * only first (depth 0 -> 1) produces free space
-+               * in all other cases we have to split growed tree
-+               */
-+              depth = EXT3_I(inode)->i_depth;
-+              if (path[depth].p_hdr->e_num == path[depth].p_hdr->e_max) {
-+                      /* now we need split */
-+                      goto repeat;
-+              }
-+      }
-+
-+      if (err)
-+              return err;
-+
-+      /*
-+       * probably we've used some blocks from extent
-+       * let's allocate new block for it
-+       */
-+      if (newext->e_num == 0 && !err) {
-+              newext->e_start =
-+                      ext3_new_block(handle, inode, newblock,
-+                                      0, 0, &err);
-+              if (newext->e_start != 0)
-+                      newext->e_num = 1;
-+      }
-+
-+      return 0;
-+}
-+
-+/*
-+ * returns next allocated block or 0xffffffff
-+ * NOTE: it consider block number from index entry as
-+ * allocated block. thus, index entries have to be consistent
-+ * with leafs
-+ */
-+static inline unsigned ext3_ext_next_allocated_block(struct inode *inode,
-+                                               struct ext3_ext_path *path)
-+{
-+      int depth;
-+
-+      EXT_ASSERT(path != NULL);
-+      depth = path->p_depth;
-+
-+      if (depth == 0 && path->p_ext == NULL)
-+              return 0xffffffff;
-+
-+      /* FIXME: what if index isn't full ?! */
-+      while (depth >= 0) {
-+              if (depth == path->p_depth) {
-+                      /* leaf */
-+                      if (path[depth].p_ext !=
-+                                      EXT_LAST_EXTENT(path[depth].p_hdr))
-+                              return path[depth].p_ext[1].e_block;
-+              } else {
-+                      /* index */
-+                      if (path[depth].p_idx !=
-+                                      EXT_LAST_INDEX(path[depth].p_hdr))
-+                              return path[depth].p_idx[1].e_block;
-+              }
-+              depth--;        
-+      }
-+
-+      return 0xffffffff;
-+}
-+
-+/*
-+ * returns first allocated block from next leaf or 0xffffffff
-+ */
-+static unsigned ext3_ext_next_leaf_block(struct inode *inode,
-+                                               struct ext3_ext_path *path)
-+{
-+      int depth;
-+
-+      EXT_ASSERT(path != NULL);
-+      depth = path->p_depth;
-+
-+      /* zero-tree has no leaf blocks at all */
-+      if (depth == 0)
-+              return 0xffffffff;
-+
-+      /* go to index block */
-+      depth--;
-+      
-+      while (depth >= 0) {
-+              if (path[depth].p_idx !=
-+                              EXT_LAST_INDEX(path[depth].p_hdr))
-+                      return path[depth].p_idx[1].e_block;
-+              depth--;        
-+      }
-+
-+      return 0xffffffff;
-+}
-+
-+/*
-+ * if leaf gets modified and modified extent is first in the leaf
-+ * then we have to correct all indexes above
-+ * TODO: do we need to correct tree in all cases?
-+ */
-+int ext3_ext_correct_indexes(handle_t *handle, struct inode *inode,
-+                              struct ext3_ext_path *path)
-+{
-+      int depth = EXT3_I(inode)->i_depth;     
-+      struct ext3_extent_header *eh;
-+      struct ext3_extent *ex;
-+      long border;
-+      int k, err = 0;
-+      
-+      eh = path[depth].p_hdr;
-+      ex = path[depth].p_ext;
-+
-+      EXT_ASSERT(ex);
-+      EXT_ASSERT(eh);
-+      
-+      if (depth == 0) {
-+              /* there is no tree at all */
-+              return 0;
-+      }
-+      
-+      if (ex != EXT_FIRST_EXTENT(eh)) {
-+              /* we correct tree if first leaf got modified only */
-+              return 0;
-+      }
-+      
-+      /*
-+       * TODO: we need correction if border is smaller then current one
-+       */
-+      k = depth - 1;
-+      border = path[depth].p_ext->e_block;
-+      if ((err = ext3_ext_get_access(handle, inode, path + k)))
-+              return err;
-+      path[k].p_idx->e_block = border;
-+      if ((err = ext3_ext_dirty(handle, inode, path + k)))
-+              return err;
-+
-+      while (k--) {
-+              /* change all left-side indexes */
-+              if (path[k+1].p_idx != EXT_FIRST_INDEX(path[k+1].p_hdr))
-+                      break;
-+              if ((err = ext3_ext_get_access(handle, inode, path + k)))
-+                      break;
-+              path[k].p_idx->e_block = border;
-+              if ((err = ext3_ext_dirty(handle, inode, path + k)))
-+                      break;
-+      }
-+
-+      return err;
-+}
-+
-+/*
-+ * this routine tries to merge requsted extent into the existing
-+ * extent or inserts requested extent as new one into the tree,
-+ * creating new leaf in no-space case
-+ */
-+int ext3_ext_insert_extent(handle_t *handle, struct inode *inode,
-+                              struct ext3_ext_path *path,
-+                              struct ext3_extent *newext)
-+{
-+      int depth, len;
-+      struct ext3_extent_header * eh;
-+      struct ext3_extent *ex;
-+      struct ext3_extent *nearex; /* nearest extent */
-+      struct ext3_ext_path *npath = NULL;
-+      int err;
-+
-+      depth = EXT3_I(inode)->i_depth; 
-+      if ((ex = path[depth].p_ext)) {
-+              /* try to insert block into found extent and return */
-+              if (ex->e_block + ex->e_num == newext->e_block &&
-+                              ex->e_start + ex->e_num == newext->e_start) {
-+#ifdef AGRESSIVE_TEST
-+                      if (ex->e_num >= 2)
-+                              goto repeat;
-+#endif
-+                      if ((err = ext3_ext_get_access(handle, inode,
-+                                                      path + depth)))
-+                              return err;
-+                      ext_debug(inode, "append %d block to %d:%d (from %d)\n",
-+                                      newext->e_num, ex->e_block, ex->e_num,
-+                                      ex->e_start);
-+                      ex->e_num += newext->e_num;
-+                      err = ext3_ext_dirty(handle, inode, path + depth);
-+                      return err;
-+              }
-+      }
-+
-+repeat:
-+      depth = EXT3_I(inode)->i_depth; 
-+      eh = path[depth].p_hdr;
-+      if (eh->e_num == eh->e_max) {
-+              /* probably next leaf has space for us? */
-+              int next = ext3_ext_next_leaf_block(inode, path);
-+              if (next != 0xffffffff) {
-+                      ext_debug(inode, "next leaf block - %d\n", next);
-+                      EXT_ASSERT(!npath);
-+                      npath = ext3_ext_find_extent(inode, next, NULL);
-+                      if (IS_ERR(npath))
-+                              return PTR_ERR(npath);
-+                      EXT_ASSERT(npath->p_depth == path->p_depth);
-+                      eh = npath[depth].p_hdr;
-+                      if (eh->e_num < eh->e_max) {
-+                              ext_debug(inode,
-+                                              "next leaf has free ext(%d)\n",
-+                                              eh->e_num);
-+                              path = npath;
-+                              goto repeat;
-+                      }
-+                      ext_debug(inode, "next leaf hasno free space(%d,%d)\n",
-+                                      eh->e_num, eh->e_max);
-+              }
-+              /*
-+               * there is no free space in found leaf
-+               * we're gonna add new leaf in the tree
-+               */
-+              err = ext3_ext_create_new_leaf(handle, inode, path, newext);
-+              if (err)
-+                      goto cleanup;
-+              goto repeat;
-+      }
-+
-+      nearex = path[depth].p_ext;
-+
-+      if ((err = ext3_ext_get_access(handle, inode, path + depth)))
-+              goto cleanup;
-+
-+      if (!nearex) {
-+              /* there is no extent in this leaf, create first one */
-+              ext_debug(inode, "first extent in the leaf: %d:%d:%d\n",
-+                              newext->e_block, newext->e_start,
-+                              newext->e_num);
-+              path[depth].p_ext = EXT_FIRST_EXTENT(eh);
-+      } else if (newext->e_block > nearex->e_block) {
-+              EXT_ASSERT(newext->e_block != nearex->e_block);
-+              len = EXT_MAX_EXTENT(eh) - nearex;
-+              len = (len - 1) * sizeof(struct ext3_extent);
-+              len = len < 0 ? 0 : len;
-+              ext_debug(inode, "insert %d:%d:%d after: nearest 0x%p, "
-+                              "move %d from 0x%p to 0x%p\n",
-+                              newext->e_block, newext->e_start, newext->e_num,
-+                              nearex, len, nearex + 1, nearex + 2);
-+              ext3_ext_check_boundary(inode, path + depth, nearex + 2, len);
-+              memmove(nearex + 2, nearex + 1, len);
-+              path[depth].p_ext = nearex + 1;
-+      } else {
-+              EXT_ASSERT(newext->e_block != nearex->e_block);
-+              len = (EXT_MAX_EXTENT(eh) - nearex) * sizeof(struct ext3_extent);
-+              len = len < 0 ? 0 : len;
-+              ext_debug(inode, "insert %d:%d:%d before: nearest 0x%p, "
-+                              "move %d from 0x%p to 0x%p\n",
-+                              newext->e_block, newext->e_start, newext->e_num,
-+                              nearex, len, nearex + 1, nearex + 2);
-+              
-+              memmove(nearex + 1, nearex, len);
-+              path[depth].p_ext = nearex;
-+      }
-+
-+      if (!err) {
-+              eh->e_num++;
-+              nearex = path[depth].p_ext;
-+              nearex->e_block = newext->e_block;
-+              nearex->e_start = newext->e_start;
-+              nearex->e_num = newext->e_num;
-+              EXT_ASSERT(nearex->e_num < EXT3_BLOCKS_PER_GROUP(inode->i_sb) &&
-+                              nearex->e_num > 0);
-+
-+              /* time to correct all indexes above */
-+              err = ext3_ext_correct_indexes(handle, inode, path);
-+      }
-+
-+      err = ext3_ext_dirty(handle, inode, path + depth);
-+
-+cleanup:
-+      if (npath) {
-+              ext3_ext_drop_refs(inode, npath);
-+              kfree(npath);
-+      }
-+              
-+      return err;
-+}
-+
-+int ext3_ext_get_block(handle_t *handle, struct inode *inode, long iblock,
-+                      struct buffer_head *bh_result, int create,
-+                      int extend_disksize)
-+{
-+      struct ext3_ext_path *path;
-+      int depth = EXT3_I(inode)->i_depth;
-+      struct ext3_extent newex;
-+      struct ext3_extent *ex;
-+      int goal, newblock, err = 0;
-+
-+      ext_debug(inode, "block %d requested for inode %u, bh_result 0x%p\n",
-+                      (int) iblock, (unsigned) inode->i_ino, bh_result);
-+      bh_result->b_state &= ~(1UL << BH_New);
-+
-+      down(&EXT3_I(inode)->i_ext_sem);
-+
-+      /* find extent for this block */
-+      path = ext3_ext_find_extent(inode, iblock, NULL);
-+      if (IS_ERR(path)) {
-+              err = PTR_ERR(path);
-+              goto out2;
-+      }
-+
-+      if ((ex = path[depth].p_ext)) {
-+              /* if found exent covers block, simple return it */
-+              if (iblock >= ex->e_block && iblock < ex->e_block + ex->e_num) {
-+                      newblock = iblock - ex->e_block + ex->e_start;
-+                      ext_debug(inode, "%d fit into %d:%d -> %d\n",
-+                                      (int) iblock, ex->e_block, ex->e_num,
-+                                      newblock);
-+                      goto out;
-+              }
-+      }
-+
-+      /*
-+       * we couldn't try to create block if create flag is zero 
-+       */
-+      if (!create) 
-+              goto out2;
-+
-+      /* allocate new block */
-+      goal = ext3_ext_find_goal(inode, path);
-+      newblock = ext3_new_block(handle, inode, goal, 0, 0, &err);
-+      if (!newblock)
-+              goto out2;
-+      ext_debug(inode, "allocate new block: goal %d, found %d\n",
-+                      goal, newblock);
-+
-+      /* try to insert new extent into found leaf and return */
-+      newex.e_block = iblock;
-+      newex.e_start = newblock;
-+      newex.e_num = 1;
-+      err = ext3_ext_insert_extent(handle, inode, path, &newex);
-+      if (err)
-+              goto out2;
-+      
-+      /* previous routine could use block we allocated */
-+      newblock = newex.e_start;
-+      bh_result->b_state |= (1UL << BH_New);
-+
-+out:
-+      ext3_ext_show_leaf(inode, path);
-+      bh_result->b_dev = inode->i_dev;
-+      bh_result->b_blocknr = newblock;
-+      bh_result->b_state |= (1UL << BH_Mapped);
-+out2:
-+      ext3_ext_drop_refs(inode, path);
-+      kfree(path);
-+      up(&EXT3_I(inode)->i_ext_sem);
-+
-+      return err;     
-+}
-+
-+/*
-+ * returns 1 if current index have to be freed (even partial)
-+ */
-+static int ext3_ext_more_to_truncate(struct inode *inode,
-+                              struct ext3_ext_path *path)
-+{
-+      EXT_ASSERT(path->p_idx);
-+
-+      if (path->p_idx < EXT_FIRST_INDEX(path->p_hdr))
-+              return 0;
-+
-+      /*
-+       * if truncate on deeper level happened it it wasn't partial
-+       * so we have to consider current index for truncation
-+       */
-+      if (path->p_hdr->e_num == path->p_block)
-+              return 0;
-+
-+      /*
-+       * put actual number of indexes to know is this number got
-+       * changed at the next iteration
-+       */
-+      path->p_block = path->p_hdr->e_num;
-+      
-+      return 1;
-+}
-+
-+/*
-+ * routine removes index from the index block
-+ * it's used in truncate case only. thus all requests are for
-+ * last index in the block only
-+ */
-+int ext3_ext_remove_index(handle_t *handle, struct inode *inode,
-+                                      struct ext3_ext_path *path)
-+{
-+      struct buffer_head *bh;
-+      int err;
-+      
-+      /* free index block */
-+      path--;
-+      EXT_ASSERT(path->p_hdr->e_num);
-+      if ((err = ext3_ext_get_access(handle, inode, path)))
-+              return err;
-+      path->p_hdr->e_num--;
-+      if ((err = ext3_ext_dirty(handle, inode, path)))
-+              return err;
-+      bh = sb_get_hash_table(inode->i_sb, path->p_idx->e_leaf);
-+      ext3_forget(handle, 0, inode, bh, path->p_idx->e_leaf);
-+      ext3_free_blocks(handle, inode, path->p_idx->e_leaf, 1);
-+
-+      ext_debug(inode, "index is empty, remove it, free block %d\n",
-+                      path->p_idx->e_leaf);
-+      return err;
-+}
-+
-+/*
-+ * returns 1 if current extent needs to be freed (even partial)
-+ * instead, returns 0
-+ */
-+int ext3_ext_more_leaves_to_truncate(struct inode *inode,
-+                                      struct ext3_ext_path *path)
-+{
-+      unsigned blocksize = inode->i_sb->s_blocksize;
-+      struct ext3_extent *ex = path->p_ext;
-+      int last_block; 
-+
-+      EXT_ASSERT(ex);
-+
-+      /* is there leave in the current leaf? */
-+      if (ex < EXT_FIRST_EXTENT(path->p_hdr))
-+              return 0;
-+      
-+      last_block = (inode->i_size + blocksize-1)
-+                      >> EXT3_BLOCK_SIZE_BITS(inode->i_sb);
-+
-+      if (last_block >= ex->e_block + ex->e_num)
-+              return 0;
-+
-+      /* seems it extent have to be freed */
-+      return 1;
-+}
-+
-+handle_t *ext3_ext_journal_restart(handle_t *handle, int needed)
-+{
-+      int err;
-+
-+      if (handle->h_buffer_credits > needed)
-+              return handle;
-+      if (!ext3_journal_extend(handle, needed))
-+              return handle;
-+      err = ext3_journal_restart(handle, needed);
-+      
-+      return handle;
-+}
-+
-+/*
-+ * this routine calculate max number of blocks to be modified
-+ * while freeing extent and is intended to be used in truncate path
-+ */
-+static int ext3_ext_calc_credits(struct inode *inode,
-+                                      struct ext3_ext_path *path,
-+                                      int num)
-+{
-+      int depth = EXT3_I(inode)->i_depth;
-+      int needed;
-+      
-+      /*
-+       * extent couldn't cross group, so we will modify
-+       * single bitmap block and single group descriptor
-+       */
-+      needed = 3;
-+
-+      /*
-+       * if this is last extent in a leaf, then we have to
-+       * free leaf block and remove pointer from index above.
-+       * that pointer could be last in index block, so we'll
-+       * have to remove it too. this way we could modify/free
-+       * the whole path + root index (inode stored) will be
-+       * modified
-+       */
-+      if (!path || (num == path->p_ext->e_num &&
-+                              path->p_ext == EXT_FIRST_EXTENT(path->p_hdr)))
-+              needed += (depth * (EXT3_ALLOC_NEEDED + 1)) + 1;
-+
-+      return needed;
-+}
-+
-+/*
-+ * core of the truncate procedure:
-+ * - calculated what part of each extent in the requested leaf
-+ *   need to be freed
-+ * - frees and forgets these blocks
-+ *
-+ * TODO: we could optimize and free several extents during
-+ *       single journal_restart()-journal_restart() cycle
-+ */
-+static int ext3_ext_truncate_leaf(handle_t *handle,
-+                                      struct inode *inode,
-+                                      struct ext3_ext_path *path,
-+                                      int depth)
-+{
-+      unsigned blocksize = inode->i_sb->s_blocksize;
-+      int last_block; 
-+      int i, err = 0, sf, num;
-+
-+      ext_debug(inode, "level %d - leaf\n", depth);
-+      if (!path->p_hdr)
-+              path->p_hdr =
-+                      (struct ext3_extent_header *) path->p_bh->b_data;
-+
-+      EXT_ASSERT(path->p_hdr->e_num <= path->p_hdr->e_max);
-+      
-+      last_block = (inode->i_size + blocksize-1)
-+                                      >> EXT3_BLOCK_SIZE_BITS(inode->i_sb);
-+      path->p_ext = EXT_LAST_EXTENT(path->p_hdr);
-+      while (ext3_ext_more_leaves_to_truncate(inode, path)) {
-+
-+              /* what part of extent have to be freed? */
-+              sf = last_block > path->p_ext->e_block ?
-+                      last_block : path->p_ext->e_block;
-+
-+              /* number of blocks from extent to be freed */
-+              num = path->p_ext->e_block + path->p_ext->e_num - sf;
-+
-+              /* calc physical first physical block to be freed */
-+              sf = path->p_ext->e_start + (sf - path->p_ext->e_block);
-+
-+              i = ext3_ext_calc_credits(inode, path, num);
-+              handle = ext3_ext_journal_restart(handle, i);
-+              if (IS_ERR(handle))
-+                      return PTR_ERR(handle);
-+              
-+              ext_debug(inode, "free extent %d:%d:%d -> free %d:%d\n",
-+                              path->p_ext->e_block, path->p_ext->e_start,
-+                              path->p_ext->e_num, sf, num);
-+              for (i = 0; i < num; i++) {
-+                      struct buffer_head *bh =
-+                              sb_get_hash_table(inode->i_sb, sf + i);
-+                      ext3_forget(handle, 0, inode, bh, sf + i);
-+              }
-+              ext3_free_blocks(handle, inode, sf, num);
-+
-+              /* collect extents usage stats */
-+              spin_lock(&EXT3_SB(inode->i_sb)->s_ext_lock);
-+              EXT3_SB(inode->i_sb)->s_ext_extents++;
-+              EXT3_SB(inode->i_sb)->s_ext_blocks += num;
-+              spin_unlock(&EXT3_SB(inode->i_sb)->s_ext_lock);
-+
-+              /* reduce extent */
-+              if ((err = ext3_ext_get_access(handle, inode, path)))
-+                      return err;
-+              path->p_ext->e_num -= num;
-+              if (path->p_ext->e_num == 0)
-+                      path->p_hdr->e_num--;
-+              if ((err = ext3_ext_dirty(handle, inode, path)))
-+                      return err;
-+
-+              path->p_ext--;
-+      }
-+      
-+      /* if this leaf is free, then we should
-+       * remove it from index block above */
-+      if (path->p_hdr->e_num == 0 && depth > 0) 
-+              err = ext3_ext_remove_index(handle, inode, path);
-+
-+      return err;
-+}
-+
-+static void ext3_ext_collect_stats(struct inode *inode)
-+{
-+      int depth;
-+      
-+      /* skip inodes with old good bitmap */
-+      if (!(EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL))
-+              return;
-+      
-+      /* collect on full truncate only */
-+      if (inode->i_size)
-+              return;
-+
-+      depth = EXT3_I(inode)->i_depth;
-+      if (depth < EXT3_SB(inode->i_sb)->s_ext_mindepth)
-+               EXT3_SB(inode->i_sb)->s_ext_mindepth = depth;
-+      if (depth > EXT3_SB(inode->i_sb)->s_ext_maxdepth)
-+               EXT3_SB(inode->i_sb)->s_ext_maxdepth = depth;
-+      EXT3_SB(inode->i_sb)->s_ext_sum += depth;
-+      EXT3_SB(inode->i_sb)->s_ext_count++;
-+      
-+}
-+
-+void ext3_ext_truncate(struct inode * inode)
-+{
-+      struct address_space *mapping = inode->i_mapping;
-+      struct ext3_ext_path *path;
-+      struct page * page;
-+      handle_t *handle;
-+      int i, depth, err = 0;
-+
-+      ext3_ext_collect_stats(inode);
-+
-+      /*
-+       * We have to lock the EOF page here, because lock_page() nests
-+       * outside journal_start().
-+       */
-+      if ((inode->i_size & (inode->i_sb->s_blocksize - 1)) == 0) {
-+              /* Block boundary? Nothing to do */
-+              page = NULL;
-+      } else {
-+              page = grab_cache_page(mapping,
-+                              inode->i_size >> PAGE_CACHE_SHIFT);
-+              if (!page)
-+                      return;
-+      }
-+
-+      /*
-+       * probably first extent we're gonna free will be last in block
-+       */
-+      i = ext3_ext_calc_credits(inode, NULL, 0);
-+      handle = ext3_journal_start(inode, i);
-+      if (IS_ERR(handle)) {
-+              if (page) {
-+                      clear_highpage(page);
-+                      flush_dcache_page(page);
-+                      unlock_page(page);
-+                      page_cache_release(page);
-+              }
-+              return;
-+      }
-+
-+      if (page)
-+              ext3_block_truncate_page(handle, mapping, inode->i_size, page,
-+                                              inode->i_sb->s_blocksize);
-+
-+      down(&EXT3_I(inode)->i_ext_sem);
-+
-+      /* 
-+       * TODO: optimization is possible here
-+       * probably we need not scaning at all,
-+       * because page truncation is enough
-+       */
-+      if (ext3_orphan_add(handle, inode))
-+              goto out_stop;
-+
-+      /* we have to know where to truncate from in crash case */
-+      EXT3_I(inode)->i_disksize = inode->i_size;
-+      ext3_mark_inode_dirty(handle, inode);
-+
-+      /*
-+       * we start scanning from right side freeing all the blocks
-+       * after i_size and walking into the deep
-+       */
-+      i = 0;
-+      depth = EXT3_I(inode)->i_depth;
-+      path = kmalloc(sizeof(struct ext3_ext_path) * (depth + 1), GFP_KERNEL);
-+      if (IS_ERR(path)) {
-+              ext3_error(inode->i_sb, "ext3_ext_truncate",
-+                              "Can't allocate path array");
-+              goto out_stop;
-+      }
-+      memset(path, 0, sizeof(struct ext3_ext_path) * (depth + 1));
-+
-+      path[i].p_hdr = (struct ext3_extent_header *) EXT3_I(inode)->i_data;
-+      while (i >= 0 && err == 0) {
-+              if (i == depth) {
-+                      /* this is leaf block */
-+                      err = ext3_ext_truncate_leaf(handle, inode,
-+                                                      path + i, i);
-+                      /* root level have p_bh == NULL, brelse() eats this */
-+                      brelse(path[i].p_bh);
-+                      i--;
-+                      continue;
-+              }
-+              
-+              /* this is index block */
-+              if (!path[i].p_hdr) {
-+                      path[i].p_hdr =
-+                              (struct ext3_extent_header *) path[i].p_bh->b_data;
-+                      ext_debug(inode, "initialize header\n");
-+              }
-+
-+              EXT_ASSERT(path[i].p_hdr->e_num <= path[i].p_hdr->e_max);
-+              
-+              if (!path[i].p_idx) {
-+                      /* this level hasn't touched yet */
-+                      path[i].p_idx = EXT_LAST_INDEX(path[i].p_hdr);
-+                      path[i].p_block = path[i].p_hdr->e_num + 1;
-+                      ext_debug(inode, "init index ptr: hdr 0x%p, num %d\n",
-+                                      path[i].p_hdr, path[i].p_hdr->e_num);
-+              } else {
-+                      /* we've already was here, see at next index */
-+                      path[i].p_idx--;
-+              }
-+
-+              ext_debug(inode, "level %d - index, first 0x%p, cur 0x%p\n",
-+                              i, EXT_FIRST_INDEX(path[i].p_hdr),
-+                              path[i].p_idx);
-+              if (ext3_ext_more_to_truncate(inode, path + i)) {
-+                      /* go to the next level */
-+                      ext_debug(inode, "move to level %d (block %d)\n", i+1,
-+                                      path[i].p_idx->e_leaf);
-+                      memset(path + i + 1, 0, sizeof(*path));
-+                      path[i+1].p_bh = sb_bread(inode->i_sb,
-+                                                      path[i].p_idx->e_leaf);
-+                      if (!path[i+1].p_bh) {
-+                              /* should we reset i_size? */
-+                              err = -EIO;
-+                              break;
-+                      }
-+                      i++;
-+              } else {
-+                      /* we finish processing this index, go up */
-+                      if (path[i].p_hdr->e_num == 0 && i > 0) {
-+                              /* index is empty, remove it
-+                               * handle must be already prepared by the
-+                               * truncate_leaf()
-+                               */
-+                              err = ext3_ext_remove_index(handle, inode,
-+                                                              path + i);
-+                      }
-+                      /* root level have p_bh == NULL, brelse() eats this */
-+                      brelse(path[i].p_bh);
-+                      i--;
-+                      ext_debug(inode, "return to level %d\n", i);
-+              }
-+      }
-+
-+      /* TODO: flexible tree reduction should be here */
-+      if (path->p_hdr->e_num == 0) {
-+              /*
-+               * truncate to zero freed all the tree
-+               * so, we need to correct i_depth
-+               */
-+              EXT3_I(inode)->i_depth = 0;
-+              path->p_hdr->e_max = 0;
-+              ext3_mark_inode_dirty(handle, inode);
-+      }
-+
-+      kfree(path);
-+
-+      /* In a multi-transaction truncate, we only make the final
-+       * transaction synchronous */
-+      if (IS_SYNC(inode))
-+              handle->h_sync = 1;
-+
-+out_stop:
-+      /*
-+       * If this was a simple ftruncate(), and the file will remain alive
-+       * then we need to clear up the orphan record which we created above.
-+       * However, if this was a real unlink then we were called by
-+       * ext3_delete_inode(), and we allow that function to clean up the
-+       * orphan info for us.
-+       */
-+      if (inode->i_nlink)
-+              ext3_orphan_del(handle, inode);
-+
-+      up(&EXT3_I(inode)->i_ext_sem);
-+      ext3_journal_stop(handle, inode);
-+}
-+
-+/*
-+ * this routine calculate max number of blocks we could modify
-+ * in order to allocate new block for an inode
-+ */
-+int ext3_ext_writepage_trans_blocks(struct inode *inode, int num)
-+{
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+      int depth = ei->i_depth + 1;
-+      int needed;
-+      
-+      /*
-+       * the worste case we're expecting is creation of the
-+       * new root (growing in depth) with index splitting
-+       * for splitting we have to consider depth + 1 because
-+       * previous growing could increase it
-+       */
-+
-+      /* 
-+       * growing in depth:
-+       * block allocation + new root + old root
-+       */
-+      needed = EXT3_ALLOC_NEEDED + 2;
-+
-+      /* index split. we may need:
-+       *   allocate intermediate indexes and new leaf
-+       *   change two blocks at each level, but root
-+       *   modify root block (inode)
-+       */
-+      needed += (depth * EXT3_ALLOC_NEEDED) + (2 * depth) + 1;
-+
-+      /* caller want to allocate num blocks */
-+      needed *= num;
-+      
-+#ifdef CONFIG_QUOTA
-+      /* 
-+       * FIXME: real calculation should be here
-+       * it depends on blockmap format of qouta file
-+       */
-+      needed += 2 * EXT3_SINGLEDATA_TRANS_BLOCKS;
-+#endif
-+
-+      return needed;
-+}
-+
-+/*
-+ * called at mount time
-+ */
-+void ext3_ext_init(struct super_block *sb)
-+{
-+      /*
-+       * possible initialization would be here
-+       */
-+
-+      if (test_opt(sb, EXTENTS))
-+              printk("EXT3-fs: file extents enabled\n");
-+      spin_lock_init(&EXT3_SB(sb)->s_ext_lock);
-+}
-+
-+/*
-+ * called at umount time
-+ */
-+void ext3_ext_release(struct super_block *sb)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+
-+      /* show collected stats */
-+      if (sbi->s_ext_count && sbi->s_ext_extents)
-+              printk("EXT3-fs: min depth - %d, max depth - %d, "
-+                              "ave. depth - %d, ave. blocks/extent - %d\n",
-+                              sbi->s_ext_mindepth,
-+                              sbi->s_ext_maxdepth,
-+                              sbi->s_ext_sum / sbi->s_ext_count,
-+                              sbi->s_ext_blocks / sbi->s_ext_extents);
-+}
-Index: linux-2.4.18-chaos/fs/ext3/ialloc.c
-===================================================================
---- linux-2.4.18-chaos.orig/fs/ext3/ialloc.c   2004-01-13 16:10:23.000000000 +0300
-+++ linux-2.4.18-chaos/fs/ext3/ialloc.c        2004-01-13 16:11:00.000000000 +0300
-@@ -573,6 +573,10 @@
-       ei->i_prealloc_count = 0;
- #endif
-       ei->i_block_group = i;
-+      if (test_opt(sb, EXTENTS))
-+              EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
-+      ei->i_depth = 0;
-+      sema_init(&ei->i_ext_sem, 1);
-       if (ei->i_flags & EXT3_SYNC_FL)
-               inode->i_flags |= S_SYNC;
-Index: linux-2.4.18-chaos/fs/ext3/inode.c
-===================================================================
---- linux-2.4.18-chaos.orig/fs/ext3/inode.c    2004-01-13 16:10:23.000000000 +0300
-+++ linux-2.4.18-chaos/fs/ext3/inode.c 2004-01-13 16:11:00.000000000 +0300
-@@ -842,6 +842,15 @@
-       goto reread;
- }
-+static inline int
-+ext3_get_block_wrap(handle_t *handle, struct inode *inode, long block,
-+              struct buffer_head *bh, int create, int extend_disksize)
-+{
-+      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
-+              return ext3_ext_get_block(handle, inode, block, bh, create, 1);
-+      return ext3_get_block_handle(handle, inode, block, bh, create, 1);
-+}
-+
- /*
-  * The BKL is not held on entry here.
-  */
-@@ -855,7 +864,7 @@
-               handle = ext3_journal_current_handle();
-               J_ASSERT(handle != 0);
-       }
--      ret = ext3_get_block_handle(handle, inode, iblock,
-+      ret = ext3_get_block_wrap(handle, inode, iblock,
-                               bh_result, create, 1);
-       return ret;
- }
-@@ -882,7 +891,7 @@
-               }
-       }
-       if (ret == 0)
--              ret = ext3_get_block_handle(handle, inode, iblock,
-+              ret = ext3_get_block_wrap(handle, inode, iblock,
-                                       bh_result, create, 0);
-       if (ret == 0)
-               bh_result->b_size = (1 << inode->i_blkbits);
-@@ -904,7 +913,7 @@
-       dummy.b_state = 0;
-       dummy.b_blocknr = -1000;
-       buffer_trace_init(&dummy.b_history);
--      *errp = ext3_get_block_handle(handle, inode, block, &dummy, create, 1);
-+      *errp = ext3_get_block_wrap(handle, inode, block, &dummy, create, 1);
-       if (!*errp && buffer_mapped(&dummy)) {
-               struct buffer_head *bh;
-               bh = sb_getblk(inode->i_sb, dummy.b_blocknr);
-@@ -1520,7 +1529,7 @@
-  * This required during truncate. We need to physically zero the tail end
-  * of that block so it doesn't yield old data if the file is later grown.
-  */
--static int ext3_block_truncate_page(handle_t *handle,
-+int ext3_block_truncate_page(handle_t *handle,
-                                   struct address_space *mapping, loff_t from,
-                                   struct page *page, unsigned blocksize)
- {
-@@ -1998,6 +2007,9 @@
-       ext3_discard_prealloc(inode);
-+      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
-+              return ext3_ext_truncate(inode);
-+
-       blocksize = inode->i_sb->s_blocksize;
-       last_block = (inode->i_size + blocksize-1)
-                                       >> EXT3_BLOCK_SIZE_BITS(inode->i_sb);
-@@ -2436,6 +2448,8 @@
-       ei->i_prealloc_count = 0;
- #endif
-       ei->i_block_group = iloc.block_group;
-+      ei->i_depth = raw_inode->osd2.linux2.l_i_depth;
-+      sema_init(&ei->i_ext_sem, 1);
-       /*
-        * NOTE! The in-memory inode i_data array is in little-endian order
-@@ -2556,6 +2570,7 @@
-               raw_inode->i_fsize = 0;
-       }
- #endif
-+      raw_inode->osd2.linux2.l_i_depth = ei->i_depth;
-       raw_inode->i_file_acl = cpu_to_le32(ei->i_file_acl);
-       if (!S_ISREG(inode->i_mode)) {
-               raw_inode->i_dir_acl = cpu_to_le32(ei->i_dir_acl);
-@@ -2759,6 +2774,9 @@
-       int indirects = (EXT3_NDIR_BLOCKS % bpp) ? 5 : 3;
-       int ret;
-       
-+      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
-+              return ext3_ext_writepage_trans_blocks(inode, bpp);
-+
-       if (ext3_should_journal_data(inode))
-               ret = 3 * (bpp + indirects) + 2;
-       else
-@@ -3082,7 +3100,7 @@
-       /* alloc blocks one by one */
-       for (i = 0; i < nblocks; i++) {
--              ret = ext3_get_block_handle(handle, inode, blocks[i],
-+              ret = ext3_get_block_wrap(handle, inode, blocks[i],
-                                               &bh_tmp, 1, 1);
-               if (ret)
-                       break;
-@@ -3158,7 +3176,7 @@
-                 if (blocks[i] != 0)
-                         continue;
--                rc = ext3_get_block_handle(handle, inode, iblock, &bh, 1, 1);
-+                rc = ext3_get_block_wrap(handle, inode, iblock, &bh, 1, 1);
-                 if (rc) {
-                         printk(KERN_INFO "ext3_map_inode_page: error %d "
-                                "allocating block %ld\n", rc, iblock);
-Index: linux-2.4.18-chaos/fs/ext3/Makefile
-===================================================================
---- linux-2.4.18-chaos.orig/fs/ext3/Makefile   2004-01-13 16:10:23.000000000 +0300
-+++ linux-2.4.18-chaos/fs/ext3/Makefile        2004-01-13 16:11:00.000000000 +0300
-@@ -12,7 +12,8 @@
- export-objs :=        ext3-exports.o
- obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
--              ioctl.o namei.o super.o symlink.o xattr.o ext3-exports.o
-+              ioctl.o namei.o super.o symlink.o xattr.o ext3-exports.o \
-+              extents.o
- obj-m    := $(O_TARGET)
- include $(TOPDIR)/Rules.make
-Index: linux-2.4.18-chaos/fs/ext3/super.c
-===================================================================
---- linux-2.4.18-chaos.orig/fs/ext3/super.c    2004-01-13 16:10:23.000000000 +0300
-+++ linux-2.4.18-chaos/fs/ext3/super.c 2004-01-13 16:11:23.000000000 +0300
-@@ -622,6 +622,7 @@
-       J_ASSERT(sbi->s_delete_inodes == 0);
-+      ext3_ext_release(sb);
-       ext3_xattr_put_super(sb);
-       journal_destroy(sbi->s_journal);
-       if (!(sb->s_flags & MS_RDONLY)) {
-@@ -743,6 +744,12 @@
-               else
- #endif
-+              if (!strcmp (this_char, "extents"))
-+                      set_opt (sbi->s_mount_opt, EXTENTS);
-+              else
-+              if (!strcmp (this_char, "extdebug"))
-+                      set_opt (sbi->s_mount_opt, EXTDEBUG);
-+              else
-               if (!strcmp (this_char, "bsddf"))
-                       clear_opt (*mount_options, MINIX_DF);
-               else if (!strcmp (this_char, "nouid32")) {
-@@ -1470,6 +1477,7 @@
-               test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_JOURNAL_DATA ? "journal":
-               test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered":
-               "writeback");
-+      ext3_ext_init(sb);
-       return sb;
-Index: linux-2.4.18-chaos/include/linux/ext3_fs.h
-===================================================================
---- linux-2.4.18-chaos.orig/include/linux/ext3_fs.h    2004-01-13 16:10:23.000000000 +0300
-+++ linux-2.4.18-chaos/include/linux/ext3_fs.h 2004-01-13 16:11:00.000000000 +0300
-@@ -183,6 +183,7 @@
- #define EXT3_IMAGIC_FL                        0x00002000 /* AFS directory */
- #define EXT3_JOURNAL_DATA_FL          0x00004000 /* file data should be journaled */
- #define EXT3_RESERVED_FL              0x80000000 /* reserved for ext3 lib */
-+#define EXT3_EXTENTS_FL                       0x00080000 /* Inode uses extents */
- #define EXT3_FL_USER_VISIBLE          0x00005FFF /* User visible flags */
- #define EXT3_FL_USER_MODIFIABLE               0x000000FF /* User modifiable flags */
-@@ -243,7 +244,7 @@
-               struct {
-                       __u8    l_i_frag;       /* Fragment number */
-                       __u8    l_i_fsize;      /* Fragment size */
--                      __u16   i_pad1;
-+                      __u16   l_i_depth;
-                       __u16   l_i_uid_high;   /* these 2 fields    */
-                       __u16   l_i_gid_high;   /* were reserved2[0] */
-                       __u32   l_i_reserved2;
-@@ -324,6 +325,8 @@
- #define EXT3_MOUNT_IOPEN              0x8000  /* Allow access via iopen */
- #define EXT3_MOUNT_IOPEN_NOPRIV               0x10000 /* Make iopen world-readable */
- #define EXT3_MOUNT_ASYNCDEL           0x20000 /* Delayed deletion */
-+#define EXT3_MOUNT_EXTENTS            0x40000 /* Extents support */
-+#define EXT3_MOUNT_EXTDEBUG           0x80000 /* Extents debug */
- /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
- #ifndef _LINUX_EXT2_FS_H
-@@ -663,6 +666,12 @@
- extern void ext3_dirty_inode(struct inode *);
- extern int ext3_change_inode_journal_flag(struct inode *, int);
- extern void ext3_truncate (struct inode *);
-+extern int ext3_block_truncate_page(handle_t *handle,
-+                                  struct address_space *mapping, loff_t from,
-+                                  struct page *page, unsigned blocksize);
-+extern int ext3_forget(handle_t *handle, int is_metadata,
-+                     struct inode *inode, struct buffer_head *bh,
-+                     int blocknr);
- #ifdef EXT3_DELETE_THREAD
- extern void ext3_truncate_thread(struct inode *inode);
- #endif
-@@ -722,6 +731,13 @@
- /* symlink.c */
- extern struct inode_operations ext3_fast_symlink_inode_operations;
-+/* extents.c */
-+extern int ext3_ext_writepage_trans_blocks(struct inode *, int);
-+extern int ext3_ext_get_block(handle_t *, struct inode *, long,
-+                              struct buffer_head *, int, int);
-+extern void ext3_ext_truncate(struct inode *);
-+extern void ext3_ext_init(struct super_block *);
-+extern void ext3_ext_release(struct super_block *);
- #endif        /* __KERNEL__ */
-Index: linux-2.4.18-chaos/include/linux/ext3_fs_i.h
-===================================================================
---- linux-2.4.18-chaos.orig/include/linux/ext3_fs_i.h  2001-11-22 22:46:19.000000000 +0300
-+++ linux-2.4.18-chaos/include/linux/ext3_fs_i.h       2004-01-13 16:11:00.000000000 +0300
-@@ -73,6 +73,10 @@
-        * by other means, so we have truncate_sem.
-        */
-       struct rw_semaphore truncate_sem;
-+
-+      /* extents-related data */
-+      struct semaphore i_ext_sem;
-+      __u16 i_depth;
- };
- #endif        /* _LINUX_EXT3_FS_I */
-Index: linux-2.4.18-chaos/include/linux/ext3_fs_sb.h
-===================================================================
---- linux-2.4.18-chaos.orig/include/linux/ext3_fs_sb.h 2004-01-13 16:10:21.000000000 +0300
-+++ linux-2.4.18-chaos/include/linux/ext3_fs_sb.h      2004-01-13 16:11:00.000000000 +0300
-@@ -84,6 +84,16 @@
-       wait_queue_head_t s_delete_thread_queue;
-       wait_queue_head_t s_delete_waiter_queue;
- #endif
-+
-+      /* extents */
-+      int s_ext_debug;
-+      int s_ext_mindepth;
-+      int s_ext_maxdepth;
-+      int s_ext_sum;
-+      int s_ext_count;
-+      spinlock_t s_ext_lock;
-+      int s_ext_extents;
-+      int s_ext_blocks;
- };
- #endif        /* _LINUX_EXT3_FS_SB */
index cd51771..5a05370 100644 (file)
@@ -1,10 +1,11 @@
-Index: linux-2.4.20-rh/fs/ext3/extents.c
+Index: linux-2.4.20-rh-20.9/fs/ext3/extents.c
 ===================================================================
---- linux-2.4.20-rh.orig/fs/ext3/extents.c     2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-rh/fs/ext3/extents.c  2004-04-28 10:32:44.000000000 +0800
-@@ -0,0 +1,2347 @@
+--- linux-2.4.20-rh-20.9.orig/fs/ext3/extents.c        2003-01-30 13:24:37.000000000 +0300
++++ linux-2.4.20-rh-20.9/fs/ext3/extents.c     2004-09-12 20:01:45.000000000 +0400
+@@ -0,0 +1,2262 @@
 +/*
-+ * Copyright (C) 2003 Alex Tomas <alex@clusterfs.com>
++ * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
@@ -38,13 +39,13 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +#include <linux/time.h>
 +#include <linux/ext3_jbd.h>
 +#include <linux/jbd.h>
++#include <linux/locks.h>
 +#include <linux/smp_lock.h>
 +#include <linux/highuid.h>
 +#include <linux/pagemap.h>
 +#include <linux/quotaops.h>
 +#include <linux/string.h>
 +#include <linux/slab.h>
-+#include <linux/locks.h>
 +#include <linux/ext3_extents.h>
 +#include <asm/uaccess.h>
 +
@@ -64,8 +65,8 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +static int inline
 +ext3_ext_get_access_for_root(handle_t *h, struct ext3_extents_tree *tree)
 +{
-+      if (tree->get_write_access)
-+              return tree->get_write_access(h,tree->buffer);
++      if (tree->ops->get_write_access)
++              return tree->ops->get_write_access(h,tree->buffer);
 +      else
 +              return 0;
 +}
@@ -73,8 +74,8 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +static int inline
 +ext3_ext_mark_root_dirty(handle_t *h, struct ext3_extents_tree *tree)
 +{
-+      if (tree->mark_buffer_dirty)
-+              return tree->mark_buffer_dirty(h,tree->buffer);
++      if (tree->ops->mark_buffer_dirty)
++              return tree->ops->mark_buffer_dirty(h,tree->buffer);
 +      else
 +              return 0;
 +}
@@ -129,8 +130,8 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      struct inode *inode;
 +
 +      EXT_ASSERT(tree);
-+      if (tree->new_block)
-+              return tree->new_block(handle, tree, path, ex, err);
++      if (tree->ops->new_block)
++              return tree->ops->new_block(handle, tree, path, ex, err);
 +
 +      inode = tree->inode;
 +      depth = EXT_DEPTH(tree);
@@ -157,7 +158,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +{
 +      struct ext3_extent_header *neh;
 +      neh = EXT_ROOT_HDR(tree);
-+      neh->e_generation++;
++      neh->eh_generation++;
 +}
 +
 +static inline int ext3_ext_space_block(struct ext3_extents_tree *tree)
@@ -220,13 +221,13 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      ext_debug(tree, "path:");
 +      for (k = 0; k <= l; k++, path++) {
 +              if (path->p_idx) {
-+                      ext_debug(tree, "  %d->%d", path->p_idx->e_block,
-+                                      path->p_idx->e_leaf);
++                      ext_debug(tree, "  %d->%d", path->p_idx->ei_block,
++                                      path->p_idx->ei_leaf);
 +              } else if (path->p_ext) {
 +                      ext_debug(tree, "  %d:%d:%d",
-+                                      path->p_ext->e_block,
-+                                      path->p_ext->e_num,
-+                                      path->p_ext->e_start);
++                                      path->p_ext->ee_block,
++                                      path->p_ext->ee_len,
++                                      path->p_ext->ee_start);
 +              } else
 +                      ext_debug(tree, "  []");
 +      }
@@ -249,9 +250,9 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      eh = path[depth].p_hdr;
 +      ex = EXT_FIRST_EXTENT(eh);
 +
-+      for (i = 0; i < eh->e_num; i++, ex++) {
++      for (i = 0; i < eh->eh_entries; i++, ex++) {
 +              ext_debug(tree, "%d:%d:%d ",
-+                              ex->e_block, ex->e_num, ex->e_start);
++                              ex->ee_block, ex->ee_len, ex->ee_start);
 +      }
 +      ext_debug(tree, "\n");
 +#endif
@@ -280,18 +281,18 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      struct ext3_extent_idx *ix;
 +      int l = 0, k, r;
 +
-+      EXT_ASSERT(eh->e_magic == EXT3_EXT_MAGIC);
-+      EXT_ASSERT(eh->e_num <= eh->e_max);
-+      EXT_ASSERT(eh->e_num > 0);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++      EXT_ASSERT(eh->eh_entries > 0);
 +
 +      ext_debug(tree, "binsearch for %d(idx):  ", block);
 +
 +      path->p_idx = ix = EXT_FIRST_INDEX(eh);
 +
-+      r = k = eh->e_num;
++      r = k = eh->eh_entries;
 +      while (k > 1) {
 +              k = (r - l) / 2;
-+              if (block < ix[l + k].e_block)
++              if (block < ix[l + k].ei_block)
 +                      r -= k;
 +              else
 +                      l += k;
@@ -300,30 +301,30 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +
 +      ix += l;
 +      path->p_idx = ix;
-+      ext_debug(tree, "  -> %d->%d ", path->p_idx->e_block, path->p_idx->e_leaf);
++      ext_debug(tree, "  -> %d->%d ", path->p_idx->ei_block, path->p_idx->ei_leaf);
 +
 +      while (l++ < r) {
-+              if (block < ix->e_block) 
++              if (block < ix->ei_block) 
 +                      break;
 +              path->p_idx = ix++;
 +      }
-+      ext_debug(tree, "  -> %d->%d\n", path->p_idx->e_block,
-+                      path->p_idx->e_leaf);
++      ext_debug(tree, "  -> %d->%d\n", path->p_idx->ei_block,
++                      path->p_idx->ei_leaf);
 +
 +#ifdef CHECK_BINSEARCH 
 +      {
 +              struct ext3_extent_idx *chix;
 +
 +              chix = ix = EXT_FIRST_INDEX(eh);
-+              for (k = 0; k < eh->e_num; k++, ix++) {
-+                      if (k != 0 && ix->e_block <= ix[-1].e_block) {
++              for (k = 0; k < eh->eh_entries; k++, ix++) {
++                      if (k != 0 && ix->ei_block <= ix[-1].ei_block) {
 +                              printk("k=%d, ix=0x%p, first=0x%p\n", k,
 +                                      ix, EXT_FIRST_INDEX(eh));
 +                              printk("%u <= %u\n",
-+                                      ix->e_block,ix[-1].e_block);
++                                      ix->ei_block,ix[-1].ei_block);
 +                      }
-+                      EXT_ASSERT(k == 0 || ix->e_block > ix[-1].e_block);
-+                      if (block < ix->e_block) 
++                      EXT_ASSERT(k == 0 || ix->ei_block > ix[-1].ei_block);
++                      if (block < ix->ei_block) 
 +                              break;
 +                      chix = ix;
 +              }
@@ -344,10 +345,10 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      struct ext3_extent *ex;
 +      int l = 0, k, r;
 +
-+      EXT_ASSERT(eh->e_magic == EXT3_EXT_MAGIC);
-+      EXT_ASSERT(eh->e_num <= eh->e_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
 +
-+      if (eh->e_num == 0) {
++      if (eh->eh_entries == 0) {
 +              /*
 +               * this leaf is empty yet:
 +               *  we get such a leaf in split/add case
@@ -359,10 +360,10 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +
 +      path->p_ext = ex = EXT_FIRST_EXTENT(eh);
 +
-+      r = k = eh->e_num;
++      r = k = eh->eh_entries;
 +      while (k > 1) {
 +              k = (r - l) / 2;
-+              if (block < ex[l + k].e_block)
++              if (block < ex[l + k].ee_block)
 +                      r -= k;
 +              else
 +                      l += k;
@@ -371,25 +372,25 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +
 +      ex += l;
 +      path->p_ext = ex;
-+      ext_debug(tree, "  -> %d:%d:%d ", path->p_ext->e_block,
-+                      path->p_ext->e_start, path->p_ext->e_num);
++      ext_debug(tree, "  -> %d:%d:%d ", path->p_ext->ee_block,
++                      path->p_ext->ee_start, path->p_ext->ee_len);
 +
 +      while (l++ < r) {
-+              if (block < ex->e_block) 
++              if (block < ex->ee_block) 
 +                      break;
 +              path->p_ext = ex++;
 +      }
-+      ext_debug(tree, "  -> %d:%d:%d\n", path->p_ext->e_block,
-+                      path->p_ext->e_start, path->p_ext->e_num);
++      ext_debug(tree, "  -> %d:%d:%d\n", path->p_ext->ee_block,
++                      path->p_ext->ee_start, path->p_ext->ee_len);
 +
 +#ifdef CHECK_BINSEARCH 
 +      {
 +              struct ext3_extent *chex;
 +
 +              chex = ex = EXT_FIRST_EXTENT(eh);
-+              for (k = 0; k < eh->e_num; k++, ex++) {
-+                      EXT_ASSERT(k == 0 || ex->e_block > ex[-1].e_block);
-+                      if (block < ex->e_block) 
++              for (k = 0; k < eh->eh_entries; k++, ex++) {
++                      EXT_ASSERT(k == 0 || ex->ee_block > ex[-1].ee_block);
++                      if (block < ex->ee_block) 
 +                              break;
 +                      chex = ex;
 +              }
@@ -406,11 +407,12 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      BUG_ON(tree->buffer_len == 0);
 +      ext3_ext_get_access_for_root(handle, tree);
 +      eh = EXT_ROOT_HDR(tree);
-+      eh->e_depth = 0;
-+      eh->e_num = 0;
-+      eh->e_magic = EXT3_EXT_MAGIC;
-+      eh->e_max = ext3_ext_space_root(tree);
++      eh->eh_depth = 0;
++      eh->eh_entries = 0;
++      eh->eh_magic = EXT3_EXT_MAGIC;
++      eh->eh_max = ext3_ext_space_root(tree);
 +      ext3_ext_mark_root_dirty(handle, tree);
++      ext3_ext_invalidate_cache(tree);
 +      return 0;
 +}
 +
@@ -429,9 +431,9 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      eh = EXT_ROOT_HDR(tree);
 +      EXT_ASSERT(eh);
 +      i = depth = EXT_DEPTH(tree);
-+      EXT_ASSERT(eh->e_max);
-+      EXT_ASSERT(eh->e_magic == EXT3_EXT_MAGIC);
-+      EXT_ASSERT(i == 0 || eh->e_num > 0);
++      EXT_ASSERT(eh->eh_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(i == 0 || eh->eh_entries > 0);
 +      
 +      /* account possible depth increase */
 +      if (!path) {
@@ -446,9 +448,9 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      /* walk through the tree */
 +      while (i) {
 +              ext_debug(tree, "depth %d: num %d, max %d\n",
-+                              ppos, eh->e_num, eh->e_max);
++                              ppos, eh->eh_entries, eh->eh_max);
 +              ext3_ext_binsearch_idx(tree, path + ppos, block);
-+              path[ppos].p_block = path[ppos].p_idx->e_leaf;
++              path[ppos].p_block = path[ppos].p_idx->ei_leaf;
 +              path[ppos].p_depth = i;
 +              path[ppos].p_ext = NULL;
 +
@@ -493,9 +495,9 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      if ((err = ext3_ext_get_access(handle, tree, curp)))
 +              return err;
 +
-+      EXT_ASSERT(logical != curp->p_idx->e_block);
++      EXT_ASSERT(logical != curp->p_idx->ei_block);
 +      len = EXT_MAX_INDEX(curp->p_hdr) - curp->p_idx;
-+      if (logical > curp->p_idx->e_block) {
++      if (logical > curp->p_idx->ei_block) {
 +              /* insert after */
 +              if (curp->p_idx != EXT_LAST_INDEX(curp->p_hdr)) {
 +                      len = (len - 1) * sizeof(struct ext3_extent_idx);
@@ -519,11 +521,11 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              ix = curp->p_idx;
 +      }
 +
-+      ix->e_block = logical;
-+      ix->e_leaf = ptr;
-+      curp->p_hdr->e_num++;
++      ix->ei_block = logical;
++      ix->ei_leaf = ptr;
++      curp->p_hdr->eh_entries++;
 +
-+      EXT_ASSERT(curp->p_hdr->e_num <= curp->p_hdr->e_max);
++      EXT_ASSERT(curp->p_hdr->eh_entries <= curp->p_hdr->eh_max);
 +      EXT_ASSERT(ix <= EXT_LAST_INDEX(curp->p_hdr));
 +
 +      err = ext3_ext_dirty(handle, tree, curp);
@@ -562,12 +564,12 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +       * border from split point */
 +      EXT_ASSERT(path[depth].p_ext <= EXT_MAX_EXTENT(path[depth].p_hdr));
 +      if (path[depth].p_ext != EXT_MAX_EXTENT(path[depth].p_hdr)) {
-+              border = path[depth].p_ext[1].e_block;
++              border = path[depth].p_ext[1].ee_block;
 +              ext_debug(tree, "leaf will be splitted."
 +                              " next leaf starts at %d\n",
 +                              (int)border);
 +      } else {
-+              border = newext->e_block;
++              border = newext->ee_block;
 +              ext_debug(tree, "leaf will be added."
 +                              " next leaf starts at %d\n",
 +                              (int)border);
@@ -613,14 +615,14 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              goto cleanup;
 +
 +      neh = EXT_BLOCK_HDR(bh);
-+      neh->e_num = 0;
-+      neh->e_max = ext3_ext_space_block(tree);
-+      neh->e_magic = EXT3_EXT_MAGIC;
-+      neh->e_depth = 0;
++      neh->eh_entries = 0;
++      neh->eh_max = ext3_ext_space_block(tree);
++      neh->eh_magic = EXT3_EXT_MAGIC;
++      neh->eh_depth = 0;
 +      ex = EXT_FIRST_EXTENT(neh);
 +
 +      /* move remain of path[depth] to the new leaf */
-+      EXT_ASSERT(path[depth].p_hdr->e_num == path[depth].p_hdr->e_max);
++      EXT_ASSERT(path[depth].p_hdr->eh_entries == path[depth].p_hdr->eh_max);
 +      /* start copy from next extent */
 +      /* TODO: we could do it by single memmove */
 +      m = 0;
@@ -628,13 +630,13 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      while (path[depth].p_ext <=
 +                      EXT_MAX_EXTENT(path[depth].p_hdr)) {
 +              ext_debug(tree, "move %d:%d:%d in new leaf %lu\n",
-+                              path[depth].p_ext->e_block,
-+                              path[depth].p_ext->e_start,
-+                              path[depth].p_ext->e_num,
++                              path[depth].p_ext->ee_block,
++                              path[depth].p_ext->ee_start,
++                              path[depth].p_ext->ee_len,
 +                              newblock);
 +              memmove(ex++, path[depth].p_ext++,
 +                              sizeof(struct ext3_extent));
-+              neh->e_num++;
++              neh->eh_entries++;
 +              m++;
 +      }
 +      mark_buffer_uptodate(bh, 1);
@@ -649,7 +651,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      if (m) {
 +              if ((err = ext3_ext_get_access(handle, tree, path + depth)))
 +                      goto cleanup;
-+              path[depth].p_hdr->e_num -= m;
++              path[depth].p_hdr->eh_entries -= m;
 +              if ((err = ext3_ext_dirty(handle, tree, path + depth)))
 +                      goto cleanup;
 +              
@@ -677,13 +679,13 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +                      goto cleanup;
 +
 +              neh = EXT_BLOCK_HDR(bh);
-+              neh->e_num = 1;
-+              neh->e_magic = EXT3_EXT_MAGIC;
-+              neh->e_max = ext3_ext_space_block_idx(tree);
-+              neh->e_depth = depth - i; 
++              neh->eh_entries = 1;
++              neh->eh_magic = EXT3_EXT_MAGIC;
++              neh->eh_max = ext3_ext_space_block_idx(tree);
++              neh->eh_depth = depth - i; 
 +              fidx = EXT_FIRST_INDEX(neh);
-+              fidx->e_block = border;
-+              fidx->e_leaf = oldblock;
++              fidx->ei_block = border;
++              fidx->ei_leaf = oldblock;
 +
 +              ext_debug(tree, "int.index at %d (block %lu): %lu -> %lu\n",
 +                              i, newblock, border, oldblock);
@@ -697,12 +699,12 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +                              EXT_LAST_INDEX(path[i].p_hdr));
 +              while (path[i].p_idx <= EXT_MAX_INDEX(path[i].p_hdr)) {
 +                      ext_debug(tree, "%d: move %d:%d in new index %lu\n",
-+                                      i, path[i].p_idx->e_block,
-+                                      path[i].p_idx->e_leaf, newblock);
++                                      i, path[i].p_idx->ei_block,
++                                      path[i].p_idx->ei_leaf, newblock);
 +                      memmove(++fidx, path[i].p_idx++,
 +                                      sizeof(struct ext3_extent_idx));
-+                      neh->e_num++;
-+                      EXT_ASSERT(neh->e_num <= neh->e_max);
++                      neh->eh_entries++;
++                      EXT_ASSERT(neh->eh_entries <= neh->eh_max);
 +                      m++;
 +              }
 +              mark_buffer_uptodate(bh, 1);
@@ -718,7 +720,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +                      err = ext3_ext_get_access(handle, tree, path + i);
 +                      if (err)
 +                              goto cleanup;
-+                      path[i].p_hdr->e_num -= m;
++                      path[i].p_hdr->eh_entries -= m;
 +                      err = ext3_ext_dirty(handle, tree, path + i);
 +                      if (err)
 +                              goto cleanup;
@@ -741,10 +743,11 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +
 +      if (err) {
 +              /* free all allocated blocks in error case */
-+              for (i = 0; i < depth; i++)
++              for (i = 0; i < depth; i++) {
 +                      if (!ablocks[i])
 +                              continue;
 +                      ext3_free_blocks(handle, tree->inode, ablocks[i], 1);
++              }
 +      }
 +      kfree(ablocks);
 +
@@ -793,12 +796,12 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      /* set size of new block */
 +      neh = EXT_BLOCK_HDR(bh);
 +      /* old root could have indexes or leaves
-+       * so calculate e_max right way */
++       * so calculate eh_max right way */
 +      if (EXT_DEPTH(tree))
-+              neh->e_max = ext3_ext_space_block_idx(tree);
++              neh->eh_max = ext3_ext_space_block_idx(tree);
 +      else
-+              neh->e_max = ext3_ext_space_block(tree);
-+      neh->e_magic = EXT3_EXT_MAGIC;
++              neh->eh_max = ext3_ext_space_block(tree);
++      neh->eh_magic = EXT3_EXT_MAGIC;
 +      mark_buffer_uptodate(bh, 1);
 +      unlock_buffer(bh);
 +
@@ -809,20 +812,20 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      if ((err = ext3_ext_get_access(handle, tree, curp)))
 +              goto out;
 +
-+      curp->p_hdr->e_magic = EXT3_EXT_MAGIC;
-+      curp->p_hdr->e_max = ext3_ext_space_root_idx(tree);
-+      curp->p_hdr->e_num = 1;
++      curp->p_hdr->eh_magic = EXT3_EXT_MAGIC;
++      curp->p_hdr->eh_max = ext3_ext_space_root_idx(tree);
++      curp->p_hdr->eh_entries = 1;
 +      curp->p_idx = EXT_FIRST_INDEX(curp->p_hdr);
 +      /* FIXME: it works, but actually path[0] can be index */
-+      curp->p_idx->e_block = EXT_FIRST_EXTENT(path[0].p_hdr)->e_block;
-+      curp->p_idx->e_leaf = newblock;
++      curp->p_idx->ei_block = EXT_FIRST_EXTENT(path[0].p_hdr)->ee_block;
++      curp->p_idx->ei_leaf = newblock;
 +
 +      neh = EXT_ROOT_HDR(tree);
 +      fidx = EXT_FIRST_INDEX(neh);
 +      ext_debug(tree, "new root: num %d(%d), lblock %d, ptr %d\n",
-+                      neh->e_num, neh->e_max, fidx->e_block, fidx->e_leaf); 
++                      neh->eh_entries, neh->eh_max, fidx->ei_block, fidx->ei_leaf); 
 +
-+      neh->e_depth = path->p_depth + 1;
++      neh->eh_depth = path->p_depth + 1;
 +      err = ext3_ext_dirty(handle, tree, curp);
 +out:
 +      brelse(bh);
@@ -861,7 +864,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +
 +              /* refill path */
 +              ext3_ext_drop_refs(path);
-+              path = ext3_ext_find_extent(tree, newext->e_block, path);
++              path = ext3_ext_find_extent(tree, newext->ee_block, path);
 +              if (IS_ERR(path))
 +                      err = PTR_ERR(path);
 +      } else {
@@ -870,7 +873,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +
 +              /* refill path */
 +              ext3_ext_drop_refs(path);
-+              path = ext3_ext_find_extent(tree, newext->e_block, path);
++              path = ext3_ext_find_extent(tree, newext->ee_block, path);
 +              if (IS_ERR(path))
 +                      err = PTR_ERR(path);
 +
@@ -879,7 +882,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +               * in all other cases we have to split growed tree
 +               */
 +              depth = EXT_DEPTH(tree);
-+              if (path[depth].p_hdr->e_num == path[depth].p_hdr->e_max) {
++              if (path[depth].p_hdr->eh_entries == path[depth].p_hdr->eh_max) {
 +                      /* now we need split */
 +                      goto repeat;
 +              }
@@ -892,7 +895,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +}
 +
 +/*
-+ * returns allocated block in subsequent extent or 0xffffffff
++ * returns allocated block in subsequent extent or EXT_MAX_BLOCK
 + * NOTE: it consider block number from index entry as
 + * allocated block. thus, index entries have to be consistent
 + * with leafs
@@ -906,7 +909,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      depth = path->p_depth;
 +
 +      if (depth == 0 && path->p_ext == NULL)
-+              return 0xffffffff;
++              return EXT_MAX_BLOCK;
 +
 +      /* FIXME: what if index isn't full ?! */
 +      while (depth >= 0) {
@@ -914,21 +917,21 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +                      /* leaf */
 +                      if (path[depth].p_ext !=
 +                                      EXT_LAST_EXTENT(path[depth].p_hdr))
-+                              return path[depth].p_ext[1].e_block;
++                              return path[depth].p_ext[1].ee_block;
 +              } else {
 +                      /* index */
 +                      if (path[depth].p_idx !=
 +                                      EXT_LAST_INDEX(path[depth].p_hdr))
-+                              return path[depth].p_idx[1].e_block;
++                              return path[depth].p_idx[1].ei_block;
 +              }
 +              depth--;        
 +      }
 +
-+      return 0xffffffff;
++      return EXT_MAX_BLOCK;
 +}
 +
 +/*
-+ * returns first allocated block from next leaf or 0xffffffff
++ * returns first allocated block from next leaf or EXT_MAX_BLOCK
 + */
 +static unsigned ext3_ext_next_leaf_block(struct ext3_extents_tree *tree,
 +                                               struct ext3_ext_path *path)
@@ -940,7 +943,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +
 +      /* zero-tree has no leaf blocks at all */
 +      if (depth == 0)
-+              return 0xffffffff;
++              return EXT_MAX_BLOCK;
 +
 +      /* go to index block */
 +      depth--;
@@ -948,11 +951,11 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      while (depth >= 0) {
 +              if (path[depth].p_idx !=
 +                              EXT_LAST_INDEX(path[depth].p_hdr))
-+                      return path[depth].p_idx[1].e_block;
++                      return path[depth].p_idx[1].ei_block;
 +              depth--;        
 +      }
 +
-+      return 0xffffffff;
++      return EXT_MAX_BLOCK;
 +}
 +
 +/*
@@ -988,10 +991,10 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +       * TODO: we need correction if border is smaller then current one
 +       */
 +      k = depth - 1;
-+      border = path[depth].p_ext->e_block;
++      border = path[depth].p_ext->ee_block;
 +      if ((err = ext3_ext_get_access(handle, tree, path + k)))
 +              return err;
-+      path[k].p_idx->e_block = border;
++      path[k].p_idx->ei_block = border;
 +      if ((err = ext3_ext_dirty(handle, tree, path + k)))
 +              return err;
 +
@@ -1001,7 +1004,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +                      break;
 +              if ((err = ext3_ext_get_access(handle, tree, path + k)))
 +                      break;
-+              path[k].p_idx->e_block = border;
++              path[k].p_idx->ei_block = border;
 +              if ((err = ext3_ext_dirty(handle, tree, path + k)))
 +                      break;
 +      }
@@ -1014,18 +1017,18 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +                              struct ext3_extent *ex1,
 +                              struct ext3_extent *ex2)
 +{
-+      if (ex1->e_block + ex1->e_num != ex2->e_block)
++      if (ex1->ee_block + ex1->ee_len != ex2->ee_block)
 +              return 0;
 +
 +#ifdef AGRESSIVE_TEST
-+      if (ex1->e_num >= 4)
++      if (ex1->ee_len >= 4)
 +              return 0;
 +#endif
 +
-+      if (!tree->mergable)
++      if (!tree->ops->mergable)
 +              return 1;
 +
-+      return tree->mergable(ex1, ex2);
++      return tree->ops->mergable(ex1, ex2);
 +}
 +
 +/*
@@ -1043,6 +1046,8 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      struct ext3_ext_path *npath = NULL;
 +      int depth, len, err, next;
 +
++      EXT_ASSERT(newext->ee_len > 0);
++      EXT_ASSERT(newext->ee_len < EXT_CACHE_MARK);
 +      depth = EXT_DEPTH(tree);
 +      ex = path[depth].p_ext;
 +      EXT_ASSERT(path[depth].p_hdr);
@@ -1050,11 +1055,11 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      /* try to insert block into found extent and return */
 +      if (ex && ext3_can_extents_be_merged(tree, ex, newext)) {
 +              ext_debug(tree, "append %d block to %d:%d (from %d)\n",
-+                              newext->e_num, ex->e_block, ex->e_num,
-+                              ex->e_start);
++                              newext->ee_len, ex->ee_block, ex->ee_len,
++                              ex->ee_start);
 +              if ((err = ext3_ext_get_access(handle, tree, path + depth)))
 +                      return err;
-+              ex->e_num += newext->e_num;
++              ex->ee_len += newext->ee_len;
 +              eh = path[depth].p_hdr;
 +              nearex = ex;
 +              goto merge;
@@ -1063,13 +1068,13 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +repeat:
 +      depth = EXT_DEPTH(tree);
 +      eh = path[depth].p_hdr;
-+      if (eh->e_num < eh->e_max)
++      if (eh->eh_entries < eh->eh_max)
 +              goto has_space;
 +
 +      /* probably next leaf has space for us? */
 +      fex = EXT_LAST_EXTENT(eh);
 +      next = ext3_ext_next_leaf_block(tree, path);
-+      if (newext->e_block > fex->e_block && next != 0xffffffff) {
++      if (newext->ee_block > fex->ee_block && next != EXT_MAX_BLOCK) {
 +              ext_debug(tree, "next leaf block - %d\n", next);
 +              EXT_ASSERT(!npath);
 +              npath = ext3_ext_find_extent(tree, next, NULL);
@@ -1077,14 +1082,14 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +                      return PTR_ERR(npath);
 +              EXT_ASSERT(npath->p_depth == path->p_depth);
 +              eh = npath[depth].p_hdr;
-+              if (eh->e_num < eh->e_max) {
++              if (eh->eh_entries < eh->eh_max) {
 +                      ext_debug(tree, "next leaf isnt full(%d)\n",
-+                                      eh->e_num);
++                                      eh->eh_entries);
 +                      path = npath;
 +                      goto repeat;
 +              }
 +              ext_debug(tree, "next leaf hasno free space(%d,%d)\n",
-+                              eh->e_num, eh->e_max);
++                              eh->eh_entries, eh->eh_max);
 +      }
 +
 +      /*
@@ -1106,40 +1111,42 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      if (!nearex) {
 +              /* there is no extent in this leaf, create first one */
 +              ext_debug(tree, "first extent in the leaf: %d:%d:%d\n",
-+                              newext->e_block, newext->e_start,
-+                              newext->e_num);
++                              newext->ee_block, newext->ee_start,
++                              newext->ee_len);
 +              path[depth].p_ext = EXT_FIRST_EXTENT(eh);
-+      } else if (newext->e_block > nearex->e_block) {
-+              EXT_ASSERT(newext->e_block != nearex->e_block);
++      } else if (newext->ee_block > nearex->ee_block) {
++              EXT_ASSERT(newext->ee_block != nearex->ee_block);
 +              if (nearex != EXT_LAST_EXTENT(eh)) {
 +                      len = EXT_MAX_EXTENT(eh) - nearex;
 +                      len = (len - 1) * sizeof(struct ext3_extent);
 +                      len = len < 0 ? 0 : len;
 +                      ext_debug(tree, "insert %d:%d:%d after: nearest 0x%p, "
 +                                      "move %d from 0x%p to 0x%p\n",
-+                                      newext->e_block, newext->e_start,
-+                                      newext->e_num,
++                                      newext->ee_block, newext->ee_start,
++                                      newext->ee_len,
 +                                      nearex, len, nearex + 1, nearex + 2);
 +                      memmove(nearex + 2, nearex + 1, len);
 +              }
 +              path[depth].p_ext = nearex + 1;
 +      } else {
-+              EXT_ASSERT(newext->e_block != nearex->e_block);
++              EXT_ASSERT(newext->ee_block != nearex->ee_block);
 +              len = (EXT_MAX_EXTENT(eh) - nearex) * sizeof(struct ext3_extent);
 +              len = len < 0 ? 0 : len;
 +              ext_debug(tree, "insert %d:%d:%d before: nearest 0x%p, "
 +                              "move %d from 0x%p to 0x%p\n",
-+                              newext->e_block, newext->e_start, newext->e_num,
++                              newext->ee_block, newext->ee_start, newext->ee_len,
 +                              nearex, len, nearex + 1, nearex + 2);
 +              memmove(nearex + 1, nearex, len);
 +              path[depth].p_ext = nearex;
 +      }
 +
-+      eh->e_num++;
++      eh->eh_entries++;
 +      nearex = path[depth].p_ext;
-+      nearex->e_block = newext->e_block;
-+      nearex->e_start = newext->e_start;
-+      nearex->e_num = newext->e_num;
++      nearex->ee_block = newext->ee_block;
++      nearex->ee_start = newext->ee_start;
++      nearex->ee_len = newext->ee_len;
++      /* FIXME: support for large fs */
++      nearex->ee_start_hi = 0;
 +
 +merge:
 +      /* try to merge extents to the right */
@@ -1147,14 +1154,14 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              if (!ext3_can_extents_be_merged(tree, nearex, nearex + 1))
 +                      break;
 +              /* merge with next extent! */
-+              nearex->e_num += nearex[1].e_num;
++              nearex->ee_len += nearex[1].ee_len;
 +              if (nearex + 1 < EXT_LAST_EXTENT(eh)) {
 +                      len = (EXT_LAST_EXTENT(eh) - nearex - 1)
 +                                      * sizeof(struct ext3_extent);
 +                      memmove(nearex + 1, nearex + 2, len);
 +              }
-+              eh->e_num--;
-+              EXT_ASSERT(eh->e_num > 0);
++              eh->eh_entries--;
++              EXT_ASSERT(eh->eh_entries > 0);
 +      }
 +
 +      /* try to merge extents to the left */
@@ -1172,6 +1179,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              kfree(npath);
 +      }
 +      ext3_ext_tree_changed(tree);
++      ext3_ext_invalidate_cache(tree);
 +      return err;
 +}
 +
@@ -1189,7 +1197,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      EXT_ASSERT(tree->inode);
 +      EXT_ASSERT(tree->root);
 +
-+      while (block < last && block != 0xfffffffff) {
++      while (block < last && block != EXT_MAX_BLOCK) {
 +              num = last - block;
 +              /* find extent for this block */
 +              path = ext3_ext_find_extent(tree, block, path);
@@ -1210,25 +1218,25 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +                       * all requested space */
 +                      start = block;
 +                      end = block + num;
-+              } else if (ex->e_block > block) {
++              } else if (ex->ee_block > block) {
 +                      /* need to allocate space before found extent */
 +                      start = block;
-+                      end = ex->e_block;
++                      end = ex->ee_block;
 +                      if (block + num < end)
 +                              end = block + num;
-+              } else if (block >= ex->e_block + ex->e_num) {
++              } else if (block >= ex->ee_block + ex->ee_len) {
 +                      /* need to allocate space after found extent */
 +                      start = block;
 +                      end = block + num;
 +                      if (end >= next)
 +                              end = next;
-+              } else if (block >= ex->e_block) {
++              } else if (block >= ex->ee_block) {
 +                      /* 
 +                       * some part of requested space is covered
 +                       * by found extent
 +                       */
 +                      start = block;
-+                      end = ex->e_block + ex->e_num;
++                      end = ex->ee_block + ex->ee_len;
 +                      if (block + num < end)
 +                              end = block + num;
 +                      exists = 1;
@@ -1238,9 +1246,9 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              EXT_ASSERT(end > start);
 +
 +              if (!exists) {
-+                      cbex.e_block = start;
-+                      cbex.e_num = end - start;
-+                      cbex.e_start = 0;
++                      cbex.ee_block = start;
++                      cbex.ee_len = end - start;
++                      cbex.ee_start = 0;
 +              } else
 +                      cbex = *ex;
 +
@@ -1263,7 +1271,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +                      path = NULL;
 +              }
 +
-+              block = cbex.e_block + cbex.e_num;
++              block = cbex.ee_block + cbex.ee_len;
 +      }
 +
 +      if (path) {
@@ -1275,21 +1283,14 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +}
 +
 +static inline void
-+ext3_ext_invalidate_cache(struct ext3_extents_tree *tree)
-+{
-+      if (tree->cex)
-+              tree->cex->e_num = 0;
-+}
-+
-+static inline void
 +ext3_ext_put_in_cache(struct ext3_extents_tree *tree, struct ext3_extent *ex)
 +{
 +      if (tree->cex) {
 +              EXT_ASSERT(ex);
-+              EXT_ASSERT(ex->e_num);
-+              tree->cex->e_block = ex->e_block;
-+              tree->cex->e_start = ex->e_start;
-+              tree->cex->e_num = ex->e_num;
++              EXT_ASSERT(ex->ee_len);
++              tree->cex->ee_block = ex->ee_block;
++              tree->cex->ee_start = ex->ee_start;
++              tree->cex->ee_len = ex->ee_len;
 +      }
 +}
 +
@@ -1311,32 +1312,32 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      ex = path[depth].p_ext;
 +      if (ex == NULL) {
 +              /* there is no extent yet, so gap is [0;-] */
-+              gex.e_block = 0;
-+              gex.e_num = 0xffffffff;
++              gex.ee_block = 0;
++              gex.ee_len = EXT_CACHE_MARK;
 +              ext_debug(tree, "cache gap(whole file):");
-+      } else if (block < ex->e_block) {
-+              gex.e_block = block;
-+              gex.e_num = ex->e_block - block;
++      } else if (block < ex->ee_block) {
++              gex.ee_block = block;
++              gex.ee_len = ex->ee_block - block;
 +              ext_debug(tree, "cache gap(before): %lu [%lu:%lu]",
 +                              (unsigned long) block,
-+                              (unsigned long) ex->e_block,
-+                              (unsigned long) ex->e_num);
-+      } else if (block >= ex->e_block + ex->e_num) {
-+              gex.e_block = ex->e_block + ex->e_num;
-+              gex.e_num = ext3_ext_next_allocated_block(path);
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len);
++      } else if (block >= ex->ee_block + ex->ee_len) {
++              gex.ee_block = ex->ee_block + ex->ee_len;
++              gex.ee_len = ext3_ext_next_allocated_block(path);
 +              ext_debug(tree, "cache gap(after): [%lu:%lu] %lu",
-+                              (unsigned long) ex->e_block,
-+                              (unsigned long) ex->e_num,
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len,
 +                              (unsigned long) block);
-+              EXT_ASSERT(gex.e_num > gex.e_block);
-+              gex.e_num = gex.e_num - gex.e_block;
++              EXT_ASSERT(gex.ee_len > gex.ee_block);
++              gex.ee_len = gex.ee_len - gex.ee_block;
 +      } else {
 +              BUG();
 +      }
 +
-+      ext_debug(tree, " -> %lu:%lu\n", (unsigned long) gex.e_block,
-+                      (unsigned long) gex.e_num);
-+      gex.e_start = 0xffffffff;
++      ext_debug(tree, " -> %lu:%lu\n", (unsigned long) gex.ee_block,
++                      (unsigned long) gex.ee_len);
++      gex.ee_start = EXT_CACHE_MARK;
 +      ext3_ext_put_in_cache(tree, &gex);
 +}
 +
@@ -1351,18 +1352,18 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              return 0;
 +
 +      /* has cache valid data? */
-+      if (cex->e_num == 0)
++      if (cex->ee_len == 0)
 +              return 0;
 +
-+      if (block >= cex->e_block && block < cex->e_block + cex->e_num) {
-+              ex->e_block = cex->e_block;
-+              ex->e_start = cex->e_start;
-+              ex->e_num = cex->e_num;
++      if (block >= cex->ee_block && block < cex->ee_block + cex->ee_len) {
++              ex->ee_block = cex->ee_block;
++              ex->ee_start = cex->ee_start;
++              ex->ee_len = cex->ee_len;
 +              ext_debug(tree, "%lu cached by %lu:%lu:%lu\n",
 +                              (unsigned long) block,
-+                              (unsigned long) ex->e_block,
-+                              (unsigned long) ex->e_num,
-+                              (unsigned long) ex->e_start);
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len,
++                              (unsigned long) ex->ee_start);
 +              return 1;
 +      }
 +
@@ -1383,17 +1384,17 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      
 +      /* free index block */
 +      path--;
-+      EXT_ASSERT(path->p_hdr->e_num);
++      EXT_ASSERT(path->p_hdr->eh_entries);
 +      if ((err = ext3_ext_get_access(handle, tree, path)))
 +              return err;
-+      path->p_hdr->e_num--;
++      path->p_hdr->eh_entries--;
 +      if ((err = ext3_ext_dirty(handle, tree, path)))
 +              return err;
 +      ext_debug(tree, "index is empty, remove it, free block %d\n",
-+                      path->p_idx->e_leaf);
-+      bh = sb_get_hash_table(tree->inode->i_sb, path->p_idx->e_leaf);
-+      ext3_forget(handle, 1, tree->inode, bh, path->p_idx->e_leaf);
-+      ext3_free_blocks(handle, tree->inode, path->p_idx->e_leaf, 1);
++                      path->p_idx->ei_leaf);
++      bh = sb_get_hash_table(tree->inode->i_sb, path->p_idx->ei_leaf);
++      ext3_forget(handle, 1, tree->inode, bh, path->p_idx->ei_leaf);
++      ext3_free_blocks(handle, tree->inode, path->p_idx->ei_leaf, 1);
 +      return err;
 +}
 +
@@ -1405,7 +1406,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +
 +      if (path) {
 +              /* probably there is space in leaf? */
-+              if (path[depth].p_hdr->e_num < path[depth].p_hdr->e_max)
++              if (path[depth].p_hdr->eh_entries < path[depth].p_hdr->eh_max)
 +                      return 1;
 +      }
 +      
@@ -1445,13 +1446,13 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      depth = EXT_DEPTH(tree);
 +      ex = path[depth].p_ext;
 +      EXT_ASSERT(ex);
-+      EXT_ASSERT(end < ex->e_block + ex->e_num - 1);
-+      EXT_ASSERT(ex->e_block < start);
++      EXT_ASSERT(end < ex->ee_block + ex->ee_len - 1);
++      EXT_ASSERT(ex->ee_block < start);
 +
 +      /* calculate tail extent */
-+      tex.e_block = end + 1;
-+      EXT_ASSERT(tex.e_block < ex->e_block + ex->e_num);
-+      tex.e_num = ex->e_block + ex->e_num - tex.e_block;
++      tex.ee_block = end + 1;
++      EXT_ASSERT(tex.ee_block < ex->ee_block + ex->ee_len);
++      tex.ee_len = ex->ee_block + ex->ee_len - tex.ee_block;
 +
 +      creds = ext3_ext_calc_credits_for_insert(tree, path);
 +      handle = ext3_ext_journal_restart(handle, creds);
@@ -1462,22 +1463,22 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      err = ext3_ext_get_access(handle, tree, path + depth);
 +      if (err)
 +              return err;
-+      ex->e_num = start - ex->e_block;
++      ex->ee_len = start - ex->ee_block;
 +      err = ext3_ext_dirty(handle, tree, path + depth);
 +      if (err)
 +              return err;
 +
 +      /* FIXME: some callback to free underlying resource
-+       * and correct e_start? */
++       * and correct ee_start? */
 +      ext_debug(tree, "split extent: head %u:%u, tail %u:%u\n",
-+                      ex->e_block, ex->e_num, tex.e_block, tex.e_num);
++                      ex->ee_block, ex->ee_len, tex.ee_block, tex.ee_len);
 +
-+      npath = ext3_ext_find_extent(tree, ex->e_block, NULL);
++      npath = ext3_ext_find_extent(tree, ex->ee_block, NULL);
 +      if (IS_ERR(npath))
 +              return PTR_ERR(npath);
 +      depth = EXT_DEPTH(tree);
-+      EXT_ASSERT(npath[depth].p_ext->e_block == ex->e_block);
-+      EXT_ASSERT(npath[depth].p_ext->e_num == ex->e_num);
++      EXT_ASSERT(npath[depth].p_ext->ee_block == ex->ee_block);
++      EXT_ASSERT(npath[depth].p_ext->ee_len == ex->ee_len);
 +
 +      err = ext3_ext_insert_extent(handle, tree, npath, &tex);
 +      ext3_ext_drop_refs(npath);
@@ -1503,18 +1504,18 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              path[depth].p_hdr = EXT_BLOCK_HDR(path[depth].p_bh);
 +      eh = path[depth].p_hdr;
 +      EXT_ASSERT(eh);
-+      EXT_ASSERT(eh->e_num <= eh->e_max);
-+      EXT_ASSERT(eh->e_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
 +      
 +      /* find where to start removing */
 +      le = ex = EXT_LAST_EXTENT(eh);
 +      while (ex != EXT_FIRST_EXTENT(eh)) {
-+              if (ex->e_block <= end)
++              if (ex->ee_block <= end)
 +                      break;
 +              ex--;
 +      }
 +
-+      if (start > ex->e_block && end < ex->e_block + ex->e_num - 1) {
++      if (start > ex->ee_block && end < ex->ee_block + ex->ee_len - 1) {
 +              /* removal of internal part of the extent requested
 +               * tail and head must be placed in different extent
 +               * so, we have to insert one more extent */
@@ -1524,34 +1525,34 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      
 +      lu = ex;
 +      while (ex >= EXT_FIRST_EXTENT(eh) &&
-+                      ex->e_block + ex->e_num > start) {
-+              ext_debug(tree, "remove ext %u:%u\n", ex->e_block, ex->e_num);
++                      ex->ee_block + ex->ee_len > start) {
++              ext_debug(tree, "remove ext %u:%u\n", ex->ee_block, ex->ee_len);
 +              path[depth].p_ext = ex;
 +      
-+              a = ex->e_block > start ? ex->e_block : start;
-+              b = ex->e_block + ex->e_num - 1 < end ?
-+                      ex->e_block + ex->e_num - 1 : end;
++              a = ex->ee_block > start ? ex->ee_block : start;
++              b = ex->ee_block + ex->ee_len - 1 < end ?
++                      ex->ee_block + ex->ee_len - 1 : end;
 +              
 +              ext_debug(tree, "  border %u:%u\n", a, b);
 +
-+              if (a != ex->e_block && b != ex->e_block + ex->e_num - 1) {
++              if (a != ex->ee_block && b != ex->ee_block + ex->ee_len - 1) {
 +                      block = 0;
 +                      num = 0;
 +                      BUG();
-+              } else if (a != ex->e_block) {
++              } else if (a != ex->ee_block) {
 +                      /* remove tail of the extent */
-+                      block = ex->e_block;
++                      block = ex->ee_block;
 +                      num = a - block;
-+              } else if (b != ex->e_block + ex->e_num - 1) {
++              } else if (b != ex->ee_block + ex->ee_len - 1) {
 +                      /* remove head of the extent */
 +                      block = a;
 +                      num = b - a;
 +              } else {
 +                      /* remove whole extent: excelent! */
-+                      block = ex->e_block; 
++                      block = ex->ee_block; 
 +                      num = 0;
-+                      EXT_ASSERT(a == ex->e_block &&
-+                                      b == ex->e_block + ex->e_num - 1);
++                      EXT_ASSERT(a == ex->ee_block &&
++                                      b == ex->ee_block + ex->ee_len - 1);
 +              }
 +
 +              if (ex == EXT_FIRST_EXTENT(eh))
@@ -1560,8 +1561,8 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              credits = 1;
 +              if (correct_index)
 +                      credits += (EXT_DEPTH(tree) * EXT3_ALLOC_NEEDED) + 1;
-+              if (tree->remove_extent_credits)
-+                      credits += tree->remove_extent_credits(tree, ex, a, b);
++              if (tree->ops->remove_extent_credits)
++                      credits+=tree->ops->remove_extent_credits(tree,ex,a,b);
 +              
 +              handle = ext3_ext_journal_restart(handle, credits);
 +              if (IS_ERR(handle)) {
@@ -1573,48 +1574,48 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              if (err)
 +                      goto out;
 +
-+              if (tree->remove_extent)
-+                      err = tree->remove_extent(tree, ex, a, b);
++              if (tree->ops->remove_extent)
++                      err = tree->ops->remove_extent(tree, ex, a, b);
 +              if (err)
 +                      goto out;
 +
 +              if (num == 0) {
 +                      /* this extent is removed entirely mark slot unused */
-+                      ex->e_start = 0;
-+                      eh->e_num--;
++                      ex->ee_start = 0;
++                      eh->eh_entries--;
 +                      fu = ex;
 +              }
 +
-+              ex->e_block = block;
-+              ex->e_num = num;
++              ex->ee_block = block;
++              ex->ee_len = num;
 +
 +              err = ext3_ext_dirty(handle, tree, path + depth);
 +              if (err)
 +                      goto out;
 +
 +              ext_debug(tree, "new extent: %u:%u:%u\n",
-+                              ex->e_block, ex->e_num, ex->e_start);
++                              ex->ee_block, ex->ee_len, ex->ee_start);
 +              ex--;
 +      }
 +
 +      if (fu) {
 +              /* reuse unused slots */
 +              while (lu < le) {
-+                      if (lu->e_start) {
++                      if (lu->ee_start) {
 +                              *fu = *lu;
-+                              lu->e_start = 0;
++                              lu->ee_start = 0;
 +                              fu++;
 +                      }
 +                      lu++;
 +              }
 +      }
 +
-+      if (correct_index && eh->e_num)
++      if (correct_index && eh->eh_entries)
 +              err = ext3_ext_correct_indexes(handle, tree, path);
 +
 +      /* if this leaf is free, then we should
 +       * remove it from index block above */
-+      if (err == 0 && eh->e_num == 0 && path[depth].p_bh != NULL)
++      if (err == 0 && eh->eh_entries == 0 && path[depth].p_bh != NULL)
 +              err = ext3_ext_rm_idx(handle, tree, path + depth);
 +
 +out:
@@ -1629,7 +1630,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      
 +      ix = EXT_LAST_INDEX(hdr);
 +      while (ix != EXT_FIRST_INDEX(hdr)) {
-+              if (ix->e_block <= block)
++              if (ix->ei_block <= block)
 +                      break;
 +              ix--;
 +      }
@@ -1651,7 +1652,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +       * if truncate on deeper level happened it it wasn't partial
 +       * so we have to consider current index for truncation
 +       */
-+      if (path->p_hdr->e_num == path->p_block)
++      if (path->p_hdr->eh_entries == path->p_block)
 +              return 0;
 +      return 1;
 +}
@@ -1705,16 +1706,16 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +                      path[i].p_hdr = EXT_BLOCK_HDR(path[i].p_bh);
 +              }
 +
-+              EXT_ASSERT(path[i].p_hdr->e_num <= path[i].p_hdr->e_max);
-+              EXT_ASSERT(path[i].p_hdr->e_magic == EXT3_EXT_MAGIC);
++              EXT_ASSERT(path[i].p_hdr->eh_entries <= path[i].p_hdr->eh_max);
++              EXT_ASSERT(path[i].p_hdr->eh_magic == EXT3_EXT_MAGIC);
 +              
 +              if (!path[i].p_idx) {
 +                      /* this level hasn't touched yet */
 +                      path[i].p_idx =
 +                              ext3_ext_last_covered(path[i].p_hdr, end);
-+                      path[i].p_block = path[i].p_hdr->e_num + 1;
++                      path[i].p_block = path[i].p_hdr->eh_entries + 1;
 +                      ext_debug(tree, "init index ptr: hdr 0x%p, num %d\n",
-+                                      path[i].p_hdr, path[i].p_hdr->e_num);
++                                      path[i].p_hdr, path[i].p_hdr->eh_entries);
 +              } else {
 +                      /* we've already was here, see at next index */
 +                      path[i].p_idx--;
@@ -1726,9 +1727,9 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              if (ext3_ext_more_to_rm(path + i)) {
 +                      /* go to the next level */
 +                      ext_debug(tree, "move to level %d (block %d)\n",
-+                                      i + 1, path[i].p_idx->e_leaf);
++                                      i + 1, path[i].p_idx->ei_leaf);
 +                      memset(path + i + 1, 0, sizeof(*path));
-+                      path[i+1].p_bh = sb_bread(sb, path[i].p_idx->e_leaf);
++                      path[i+1].p_bh = sb_bread(sb, path[i].p_idx->ei_leaf);
 +                      if (!path[i+1].p_bh) {
 +                              /* should we reset i_size? */
 +                              err = -EIO;
@@ -1736,14 +1737,14 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +                      }
 +                      /* put actual number of indexes to know is this
 +                       * number got changed at the next iteration */
-+                      path[i].p_block = path[i].p_hdr->e_num;
++                      path[i].p_block = path[i].p_hdr->eh_entries;
 +                      i++;
 +              } else {
 +                      /* we finish processing this index, go up */
-+                      if (path[i].p_hdr->e_num == 0 && i > 0) {
++                      if (path[i].p_hdr->eh_entries == 0 && i > 0) {
 +                              /* index is empty, remove it
 +                               * handle must be already prepared by the
-+                               * truncate_leaf() */
++                               * truncatei_leaf() */
 +                              err = ext3_ext_rm_idx(handle, tree, path + i);
 +                      }
 +                      /* root level have p_bh == NULL, brelse() eats this */
@@ -1754,14 +1755,15 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      }
 +
 +      /* TODO: flexible tree reduction should be here */
-+      if (path->p_hdr->e_num == 0) {
++      if (path->p_hdr->eh_entries == 0) {
 +              /*
 +               * truncate to zero freed all the tree
-+               * so, we need to correct e_depth
++               * so, we need to correct eh_depth
 +               */
 +              err = ext3_ext_get_access(handle, tree, path);
 +              if (err == 0) {
-+                      EXT_ROOT_HDR(tree)->e_depth = 0;
++                      EXT_ROOT_HDR(tree)->eh_depth = 0;
++                      EXT_ROOT_HDR(tree)->eh_max = ext3_ext_space_root(tree);
 +                      err = ext3_ext_dirty(handle, tree, path);
 +              }
 +      }
@@ -1820,7 +1822,8 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +static int ext3_ext_mergable(struct ext3_extent *ex1,
 +                              struct ext3_extent *ex2)
 +{
-+      if (ex1->e_start + ex1->e_num == ex2->e_start)
++      /* FIXME: support for large fs */
++      if (ex1->ee_start + ex1->ee_len == ex2->ee_start)
 +              return 1;
 +      return 0;
 +}
@@ -1833,7 +1836,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      int needed;
 +      
 +      /* at present, extent can't cross block group */;
-+      needed = 3; /* bitmap + group desc + sb */
++      needed = 4; /* bitmap + group desc + sb + inode */
 +
 +#ifdef CONFIG_QUOTA
 +      needed += 2 * EXT3_SINGLEDATA_TRANS_BLOCKS;
@@ -1853,11 +1856,11 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +
 +      if (IS_ERR(handle))
 +              return PTR_ERR(handle);
-+      if (from >= ex->e_block && to == ex->e_block + ex->e_num - 1) {
++      if (from >= ex->ee_block && to == ex->ee_block + ex->ee_len - 1) {
 +              /* tail removal */
 +              unsigned long num, start;
-+              num = ex->e_block + ex->e_num - from;
-+              start = ex->e_start + ex->e_num - num;
++              num = ex->ee_block + ex->ee_len - from;
++              start = ex->ee_start + ex->ee_len - num;
 +              ext_debug(tree, "free last %lu blocks starting %lu\n",
 +                              num, start);
 +              for (i = 0; i < num; i++) {
@@ -1865,19 +1868,19 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +                      ext3_forget(handle, 0, tree->inode, bh, start + i);
 +              }
 +              ext3_free_blocks(handle, tree->inode, start, num);
-+      } else if (from == ex->e_block && to <= ex->e_block + ex->e_num - 1) {
++      } else if (from == ex->ee_block && to <= ex->ee_block + ex->ee_len - 1) {
 +              printk("strange request: removal %lu-%lu from %u:%u\n",
-+                      from, to, ex->e_block, ex->e_num);
++                      from, to, ex->ee_block, ex->ee_len);
 +      } else {
 +              printk("strange request: removal(2) %lu-%lu from %u:%u\n",
-+                      from, to, ex->e_block, ex->e_num);
++                      from, to, ex->ee_block, ex->ee_len);
 +      }
 +      ext3_journal_stop(handle, tree->inode);
 +      return 0;
 +}
 +
-+static int ext3_ext_find_goal(struct inode *inode, struct ext3_ext_path *path,
-+                              unsigned long block)
++int ext3_ext_find_goal(struct inode *inode, struct ext3_ext_path *path,
++                      unsigned long block)
 +{
 +      struct ext3_inode_info *ei = EXT3_I(inode);
 +      unsigned long bg_start;
@@ -1890,7 +1893,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              
 +              /* try to predict block placement */
 +              if ((ex = path[depth].p_ext))
-+                      return ex->e_start + (block - ex->e_block);
++                      return ex->ee_start + (block - ex->ee_block);
 +
 +              /* it looks index is empty
 +               * try to find starting from index itself */
@@ -1915,138 +1918,46 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +      
 +      EXT_ASSERT(path);
 +      EXT_ASSERT(ex);
-+      EXT_ASSERT(ex->e_start);
-+      EXT_ASSERT(ex->e_num);
++      EXT_ASSERT(ex->ee_start);
++      EXT_ASSERT(ex->ee_len);
 +      
 +      /* reuse block from the extent to order data/metadata */
-+      newblock = ex->e_start++;
-+      ex->e_num--;
-+      if (ex->e_num == 0) {
-+              ex->e_num = 1;
++      newblock = ex->ee_start++;
++      ex->ee_len--;
++      if (ex->ee_len == 0) {
++              ex->ee_len = 1;
 +              /* allocate new block for the extent */
-+              goal = ext3_ext_find_goal(inode, path, ex->e_block);
-+              ex->e_start = ext3_new_block(handle, inode, goal, 0, 0, err);
-+              if (ex->e_start == 0) {
++              goal = ext3_ext_find_goal(inode, path, ex->ee_block);
++              ex->ee_start = ext3_new_block(handle, inode, goal, 0, 0, err);
++              if (ex->ee_start == 0) {
 +                      /* error occured: restore old extent */
-+                      ex->e_start = newblock;
++                      ex->ee_start = newblock;
 +                      return 0;
 +              }
 +      }
 +      return newblock;
 +}
 +
-+static void ext3_init_tree_desc(struct ext3_extents_tree *tree,
++static struct ext3_extents_helpers ext3_blockmap_helpers = {
++      .get_write_access       = ext3_get_inode_write_access,
++      .mark_buffer_dirty      = ext3_mark_buffer_dirty,
++      .mergable               = ext3_ext_mergable,
++      .new_block              = ext3_new_block_cb,
++      .remove_extent          = ext3_remove_blocks,
++      .remove_extent_credits  = ext3_remove_blocks_credits,
++};
++
++void ext3_init_tree_desc(struct ext3_extents_tree *tree,
 +                              struct inode *inode)
 +{
 +      tree->inode = inode;
 +      tree->root = (void *) EXT3_I(inode)->i_data;
-+      tree->get_write_access = ext3_get_inode_write_access;
-+      tree->mark_buffer_dirty = ext3_mark_buffer_dirty;
-+      tree->mergable = ext3_ext_mergable;
-+      tree->new_block = ext3_new_block_cb;
-+      tree->remove_extent = ext3_remove_blocks;
-+      tree->remove_extent_credits = ext3_remove_blocks_credits;
 +      tree->buffer = (void *) inode;
 +      tree->buffer_len = sizeof(EXT3_I(inode)->i_data);
 +      tree->cex = (struct ext3_extent *) &EXT3_I(inode)->i_cached_extent;
++      tree->ops = &ext3_blockmap_helpers;
 +}
 +
-+#if EXT3_MULTIBLOCK_ALLOCATOR
-+static int
-+ext3_ext_new_extent_cb(struct ext3_extents_tree *tree,
-+                      struct ext3_ext_path *path,
-+                      struct ext3_extent *newex, int exist)
-+{
-+      struct inode *inode = tree->inode;
-+      struct buffer_head *bh;
-+      int count, err, goal;
-+      unsigned long pblock;
-+      unsigned long tgen;
-+      loff_t new_i_size;
-+      handle_t *handle;
-+      int i;
-+
-+      if (exist)
-+              return EXT_CONTINUE;
-+
-+      tgen = EXT_GENERATION(tree);
-+      count = ext3_ext_calc_credits_for_insert(tree, path);
-+      up_write(&EXT3_I(inode)->truncate_sem);
-+
-+      handle = ext3_journal_start(inode, count + EXT3_ALLOC_NEEDED + 1);
-+      if (IS_ERR(handle)) {
-+              down_write(&EXT3_I(inode)->truncate_sem);
-+              return PTR_ERR(handle);
-+      }
-+
-+      if (tgen != EXT_GENERATION(tree)) {
-+              /* the tree has changed. so path can be invalid at moment */
-+              ext3_journal_stop(handle, inode);
-+              down_write(&EXT3_I(inode)->truncate_sem);
-+              return EXT_REPEAT;
-+      }
-+
-+      down_write(&EXT3_I(inode)->truncate_sem);
-+      goal = ext3_ext_find_goal(inode, path, newex->e_block);
-+      count = newex->e_num;
-+      pblock = ext3_new_blocks(handle, inode, &count, goal, &err);
-+      if (!pblock)
-+              goto out;
-+      EXT_ASSERT(count <= newex->e_num);
-+
-+      /* insert new extent */
-+      newex->e_start = pblock;
-+      newex->e_num = count;
-+      err = ext3_ext_insert_extent(handle, tree, path, newex);
-+      if (err)
-+              goto out;
-+
-+      /* block have been allocated for data, so time to drop dirty
-+       * in correspondend buffer_heads to prevent corruptions */
-+      for (i = 0; i < newex->e_num; i++) {
-+              bh = sb_get_hash_table(inode->i_sb, newex->e_start + i);
-+              if (bh) {
-+                      mark_buffer_clean(bh);
-+                      wait_on_buffer(bh);
-+                      clear_bit(BH_Req, &bh->b_state);
-+                      __brelse(bh);
-+              }
-+      }
-+
-+      /* correct on-disk inode size */
-+      if (newex->e_num > 0) {
-+              new_i_size = (loff_t) newex->e_block + newex->e_num;
-+              new_i_size = new_i_size << inode->i_blkbits;
-+              if (new_i_size > EXT3_I(inode)->i_disksize) {
-+                      EXT3_I(inode)->i_disksize = new_i_size;
-+                      err = ext3_mark_inode_dirty(handle, inode);
-+              }
-+      }
-+
-+out:
-+      ext3_journal_stop(handle, inode);
-+      return err;
-+}
-+
-+
-+int ext3_ext_allocate_nblocks(struct inode *inode, unsigned long block,
-+                              unsigned long num)
-+{
-+      struct ext3_extents_tree tree;
-+      int err;
-+
-+      ext3_init_tree_desc(&tree, inode);
-+      ext_debug(&tree, "blocks %lu-%lu requested for inode %u\n",
-+                      block, block + num,(unsigned) inode->i_ino);
-+      down_write(&EXT3_I(inode)->truncate_sem);
-+      err = ext3_ext_walk_space(&tree, block, num, ext3_ext_new_extent_cb);
-+      ext3_ext_invalidate_cache(&tree);
-+      up_write(&EXT3_I(inode)->truncate_sem);
-+
-+      return err;
-+}
-+#endif
-+
 +int ext3_ext_get_block(handle_t *handle, struct inode *inode,
 +                      long iblock, struct buffer_head *bh_result, int create)
 +{
@@ -2064,13 +1975,17 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +
 +      /* check in cache */
 +      if (ext3_ext_in_cache(&tree, iblock, &newex)) {
-+              if (newex.e_start == 0xffffffff && !create) {
-+                      /* block isn't allocated yet and
-+                       * user don't want to allocate it */
-+                      goto out2;
-+              } else if (newex.e_start) {
++              if (newex.ee_start == EXT_CACHE_MARK) {
++                      /* this is cached gap */
++                      if (!create) {
++                              /* block isn't allocated yet and
++                               * user don't want to allocate it */
++                              goto out2;
++                      }
++                      /* we should allocate requested block */
++              } else if (newex.ee_start) {
 +                      /* block is already allocated */
-+                      newblock = iblock - newex.e_block + newex.e_start;
++                      newblock = iblock - newex.ee_block + newex.ee_start;
 +                      goto out;
 +              }
 +      }
@@ -2094,10 +2009,10 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +
 +      if ((ex = path[depth].p_ext)) {
 +              /* if found exent covers block, simple return it */
-+              if (iblock >= ex->e_block && iblock < ex->e_block + ex->e_num) {
-+                      newblock = iblock - ex->e_block + ex->e_start;
++              if (iblock >= ex->ee_block && iblock < ex->ee_block + ex->ee_len) {
++                      newblock = iblock - ex->ee_block + ex->ee_start;
 +                      ext_debug(&tree, "%d fit into %d:%d -> %d\n",
-+                                      (int) iblock, ex->e_block, ex->e_num,
++                                      (int) iblock, ex->ee_block, ex->ee_len,
 +                                      newblock);
 +                      ext3_ext_put_in_cache(&tree, ex);
 +                      goto out;
@@ -2123,9 +2038,9 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +                      goal, newblock);
 +
 +      /* try to insert new extent into found leaf and return */
-+      newex.e_block = iblock;
-+      newex.e_start = newblock;
-+      newex.e_num = 1;
++      newex.ee_block = iblock;
++      newex.ee_start = newblock;
++      newex.ee_len = 1;
 +      err = ext3_ext_insert_extent(handle, &tree, path, &newex);
 +      if (err)
 +              goto out2;
@@ -2134,7 +2049,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              EXT3_I(inode)->i_disksize = inode->i_size;
 +
 +      /* previous routine could use block we allocated */
-+      newblock = newex.e_start;
++      newblock = newex.ee_start;
 +      set_bit(BH_New, &bh_result->b_state);
 +
 +      ext3_ext_put_in_cache(&tree, &newex);
@@ -2191,7 +2106,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +
 +      last_block = (inode->i_size + sb->s_blocksize - 1)
 +                      >> EXT3_BLOCK_SIZE_BITS(sb);
-+      err = ext3_ext_remove_space(&tree, last_block, 0xffffffff);
++      err = ext3_ext_remove_space(&tree, last_block, EXT_MAX_BLOCK);
 +      
 +      /* In a multi-transaction truncate, we only make the final
 +       * transaction synchronous */
@@ -2311,7 +2226,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              buf.err = 0;
 +              tree.private = &buf;
 +              down_write(&EXT3_I(inode)->truncate_sem);
-+              err = ext3_ext_walk_space(&tree, buf.start, 0xffffffff,
++              err = ext3_ext_walk_space(&tree, buf.start, EXT_MAX_BLOCK,
 +                                              ext3_ext_store_extent_cb);
 +              up_write(&EXT3_I(inode)->truncate_sem);
 +              if (err == 0)
@@ -2326,7 +2241,7 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +              buf.extents_num = 0;
 +              buf.leaf_num = 0;
 +              tree.private = &buf;
-+              err = ext3_ext_walk_space(&tree, 0, 0xffffffff,
++              err = ext3_ext_walk_space(&tree, 0, EXT_MAX_BLOCK,
 +                                              ext3_ext_collect_stats_cb);
 +              up_write(&EXT3_I(inode)->truncate_sem);
 +              if (!err)
@@ -2350,31 +2265,39 @@ Index: linux-2.4.20-rh/fs/ext3/extents.c
 +EXPORT_SYMBOL(ext3_ext_find_goal);
 +EXPORT_SYMBOL(ext3_ext_calc_credits_for_insert);
 +
-Index: linux-2.4.20-rh/fs/ext3/ialloc.c
+Index: linux-2.4.20-rh-20.9/fs/ext3/ialloc.c
 ===================================================================
---- linux-2.4.20-rh.orig/fs/ext3/ialloc.c      2004-04-28 10:31:55.000000000 +0800
-+++ linux-2.4.20-rh/fs/ext3/ialloc.c   2004-04-28 10:32:44.000000000 +0800
-@@ -593,10 +593,13 @@
+--- linux-2.4.20-rh-20.9.orig/fs/ext3/ialloc.c 2004-09-12 20:00:59.000000000 +0400
++++ linux-2.4.20-rh-20.9/fs/ext3/ialloc.c      2004-09-12 20:02:04.000000000 +0400
+@@ -593,10 +593,21 @@
                iloc.bh = NULL;
                goto fail;
        }
-+      if (test_opt(sb, EXTENTS)) {
-+              EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
-+              ext3_extents_initialize_blockmap(handle, inode);
-+      }
-+
-       err = ext3_mark_iloc_dirty(handle, inode, &iloc);
-       if (err) goto fail;
--
--
+-      err = ext3_mark_iloc_dirty(handle, inode, &iloc);
+-      if (err) goto fail;
++      if (test_opt(sb, EXTENTS)) {
++              EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
++              ext3_extents_initialize_blockmap(handle, inode);
++              if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_EXTENTS)) {
++                      err = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
++                      if (err) goto fail;
++                      EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_EXTENTS);
++                      BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "call ext3_journal_dirty_metadata");
++                      err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
++              }
++      }
++      err = ext3_mark_iloc_dirty(handle, inode, &iloc);
++      if (err) goto fail;
        
        unlock_super (sb);
        if(DQUOT_ALLOC_INODE(inode)) {
-Index: linux-2.4.20-rh/fs/ext3/inode.c
+Index: linux-2.4.20-rh-20.9/fs/ext3/inode.c
 ===================================================================
---- linux-2.4.20-rh.orig/fs/ext3/inode.c       2004-04-28 10:31:55.000000000 +0800
-+++ linux-2.4.20-rh/fs/ext3/inode.c    2004-04-28 10:41:41.000000000 +0800
-@@ -852,6 +852,15 @@
+--- linux-2.4.20-rh-20.9.orig/fs/ext3/inode.c  2004-09-12 20:01:10.000000000 +0400
++++ linux-2.4.20-rh-20.9/fs/ext3/inode.c       2004-09-12 20:01:45.000000000 +0400
+@@ -852,6 +852,16 @@
        goto reread;
  }
  
@@ -2384,44 +2307,41 @@ Index: linux-2.4.20-rh/fs/ext3/inode.c
 +{
 +      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
 +              return ext3_ext_get_block(handle, inode, block, bh, create);
-+      return ext3_get_block_handle(handle, inode, block, bh, create, extend_disksize);
++      return ext3_get_block_handle(handle, inode, block, bh, create, 
++                                      extend_disksize);
 +}
 +
  /*
   * The BKL is not held on entry here.
   */
-@@ -865,8 +874,8 @@
+@@ -865,7 +875,7 @@
                handle = ext3_journal_current_handle();
                J_ASSERT(handle != 0);
        }
 -      ret = ext3_get_block_handle(handle, inode, iblock,
--                              bh_result, create, 1);
-+      
-+      ret = ext3_get_block_wrap(handle, inode, iblock, bh_result, create, 0);
++      ret = ext3_get_block_wrap(handle, inode, iblock,
+                               bh_result, create, 1);
        return ret;
  }
-@@ -892,8 +901,8 @@
+@@ -892,7 +902,7 @@
                }
        }
        if (ret == 0)
 -              ret = ext3_get_block_handle(handle, inode, iblock,
--                                      bh_result, create, 0);
-+              ret = ext3_get_block_wrap(handle, inode, iblock, 
-+                                        bh_result, create, 0);
++              ret = ext3_get_block_wrap(handle, inode, iblock,
+                                       bh_result, create, 0);
        if (ret == 0)
                bh_result->b_size = (1 << inode->i_blkbits);
-       unlock_kernel();
-@@ -914,7 +923,7 @@
+@@ -914,7 +924,7 @@
        dummy.b_state = 0;
        dummy.b_blocknr = -1000;
        buffer_trace_init(&dummy.b_history);
 -      *errp = ext3_get_block_handle(handle, inode, block, &dummy, create, 1);
-+      *errp = ext3_get_block_wrap(handle, inode, block, &dummy, create, 0);
++      *errp = ext3_get_block_wrap(handle, inode, block, &dummy, create, 1);
        if (!*errp && buffer_mapped(&dummy)) {
                struct buffer_head *bh;
                bh = sb_getblk(inode->i_sb, dummy.b_blocknr);
-@@ -1502,7 +1511,7 @@
+@@ -1502,7 +1512,7 @@
   * This required during truncate. We need to physically zero the tail end
   * of that block so it doesn't yield old data if the file is later grown.
   */
@@ -2430,7 +2350,7 @@ Index: linux-2.4.20-rh/fs/ext3/inode.c
                struct address_space *mapping, loff_t from)
  {
        unsigned long index = from >> PAGE_CACHE_SHIFT;
-@@ -1989,6 +1998,9 @@
+@@ -1990,6 +2000,9 @@
  
        ext3_discard_prealloc(inode);
  
@@ -2440,7 +2360,7 @@ Index: linux-2.4.20-rh/fs/ext3/inode.c
        handle = start_transaction(inode);
        if (IS_ERR(handle))
                return;         /* AKPM: return what? */
-@@ -2757,6 +2769,9 @@
+@@ -2758,6 +2771,9 @@
        int indirects = (EXT3_NDIR_BLOCKS % bpp) ? 5 : 3;
        int ret;
        
@@ -2450,18 +2370,16 @@ Index: linux-2.4.20-rh/fs/ext3/inode.c
        if (ext3_should_journal_data(inode))
                ret = 3 * (bpp + indirects) + 2;
        else
-@@ -3081,8 +3096,8 @@
+@@ -3082,7 +3098,7 @@
  
        /* alloc blocks one by one */
        for (i = 0; i < nblocks; i++) {
 -              ret = ext3_get_block_handle(handle, inode, blocks[i],
--                                              &bh_tmp, 1, 1);
-+              ret = ext3_get_block_wrap(handle, inode, blocks[i],
-+                                              &bh_tmp, 1, 1);
++              ret = ext3_get_block_wrap(handle, inode, blocks[i],
+                                               &bh_tmp, 1, 1);
                if (ret)
                        break;
-@@ -3157,7 +3172,7 @@
+@@ -3158,7 +3174,7 @@
                  if (blocks[i] != 0)
                          continue;
  
@@ -2470,10 +2388,10 @@ Index: linux-2.4.20-rh/fs/ext3/inode.c
                  if (rc) {
                          printk(KERN_INFO "ext3_map_inode_page: error %d "
                                 "allocating block %ld\n", rc, iblock);
-Index: linux-2.4.20-rh/fs/ext3/Makefile
+Index: linux-2.4.20-rh-20.9/fs/ext3/Makefile
 ===================================================================
---- linux-2.4.20-rh.orig/fs/ext3/Makefile      2004-04-28 10:31:56.000000000 +0800
-+++ linux-2.4.20-rh/fs/ext3/Makefile   2004-04-28 10:32:44.000000000 +0800
+--- linux-2.4.20-rh-20.9.orig/fs/ext3/Makefile 2004-09-12 20:01:01.000000000 +0400
++++ linux-2.4.20-rh-20.9/fs/ext3/Makefile      2004-09-12 20:01:45.000000000 +0400
 @@ -13,7 +13,9 @@
  
  obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
@@ -2485,10 +2403,10 @@ Index: linux-2.4.20-rh/fs/ext3/Makefile
  obj-m    := $(O_TARGET)
  
  export-objs += xattr.o
-Index: linux-2.4.20-rh/fs/ext3/super.c
+Index: linux-2.4.20-rh-20.9/fs/ext3/super.c
 ===================================================================
---- linux-2.4.20-rh.orig/fs/ext3/super.c       2004-04-28 10:31:55.000000000 +0800
-+++ linux-2.4.20-rh/fs/ext3/super.c    2004-04-28 10:58:00.000000000 +0800
+--- linux-2.4.20-rh-20.9.orig/fs/ext3/super.c  2004-09-12 20:00:59.000000000 +0400
++++ linux-2.4.20-rh-20.9/fs/ext3/super.c       2004-09-12 20:01:45.000000000 +0400
 @@ -623,6 +623,7 @@
        int i;
  
@@ -2497,30 +2415,30 @@ Index: linux-2.4.20-rh/fs/ext3/super.c
        ext3_xattr_put_super(sb);
        journal_destroy(sbi->s_journal);
        if (!(sb->s_flags & MS_RDONLY)) {
-@@ -796,6 +797,10 @@
-                               return 0;
-                       }
+@@ -798,6 +799,10 @@
                }
+               else if (!strcmp (this_char, "pdirops"))
+                       set_opt (sbi->s_mount_opt, PDIROPS);
 +              else if (!strcmp (this_char, "extents"))
 +                      set_opt (*mount_options, EXTENTS);
 +              else if (!strcmp (this_char, "extdebug"))
 +                      set_opt (*mount_options, EXTDEBUG);
-               else if (!strcmp (this_char, "pdirops"))
-                       set_opt (sbi->s_mount_opt, PDIROPS);
                else if (!strcmp (this_char, "grpid") ||
-@@ -1500,6 +1505,8 @@
+                        !strcmp (this_char, "bsdgroups"))
+                       set_opt (*mount_options, GRPID);
+@@ -1499,6 +1504,8 @@
+               printk (KERN_INFO "EXT3-fs: mounted filesystem with parallel dirops\n");
                sb->s_flags |= S_PDIROPS;
        }
-               
-+      ext3_ext_init(sb);
 +
++      ext3_ext_init(sb);
+               
        return sb;
  
- failed_mount3:
-Index: linux-2.4.20-rh/fs/ext3/ioctl.c
+Index: linux-2.4.20-rh-20.9/fs/ext3/ioctl.c
 ===================================================================
---- linux-2.4.20-rh.orig/fs/ext3/ioctl.c       2004-04-28 10:31:33.000000000 +0800
-+++ linux-2.4.20-rh/fs/ext3/ioctl.c    2004-04-28 10:32:44.000000000 +0800
+--- linux-2.4.20-rh-20.9.orig/fs/ext3/ioctl.c  2004-09-12 20:00:32.000000000 +0400
++++ linux-2.4.20-rh-20.9/fs/ext3/ioctl.c       2004-09-12 20:01:45.000000000 +0400
 @@ -189,6 +189,10 @@
                        return ret;
                }
@@ -2532,10 +2450,10 @@ Index: linux-2.4.20-rh/fs/ext3/ioctl.c
        default:
                return -ENOTTY;
        }
-Index: linux-2.4.20-rh/include/linux/ext3_fs.h
+Index: linux-2.4.20-rh-20.9/include/linux/ext3_fs.h
 ===================================================================
---- linux-2.4.20-rh.orig/include/linux/ext3_fs.h       2004-04-28 10:31:55.000000000 +0800
-+++ linux-2.4.20-rh/include/linux/ext3_fs.h    2004-04-28 10:32:44.000000000 +0800
+--- linux-2.4.20-rh-20.9.orig/include/linux/ext3_fs.h  2004-09-12 20:00:59.000000000 +0400
++++ linux-2.4.20-rh-20.9/include/linux/ext3_fs.h       2004-09-12 20:02:04.000000000 +0400
 @@ -184,6 +184,7 @@
  #define EXT3_IMAGIC_FL                        0x00002000 /* AFS directory */
  #define EXT3_JOURNAL_DATA_FL          0x00004000 /* file data should be journaled */
@@ -2555,15 +2473,29 @@ Index: linux-2.4.20-rh/include/linux/ext3_fs.h
  /*
   * Structure of an inode on the disk
 @@ -328,6 +332,8 @@
- #define EXT3_MOUNT_IOPEN              0x8000  /* Allow access via iopen */
- #define EXT3_MOUNT_IOPEN_NOPRIV               0x10000 /* Make iopen world-readable */
  #define EXT3_MOUNT_ASYNCDEL           0x20000 /* Delayed deletion */
+ #define EXT3_MOUNT_IOPEN              0x40000 /* Allow access via iopen */
+ #define EXT3_MOUNT_IOPEN_NOPRIV               0x80000 /* Make iopen world-readable */
 +#define EXT3_MOUNT_EXTENTS            0x100000/* Extents support */
 +#define EXT3_MOUNT_EXTDEBUG           0x200000/* Extents debug */
  
  /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
  #ifndef _LINUX_EXT2_FS_H
-@@ -689,6 +695,7 @@
+@@ -504,10 +510,12 @@
+ #define EXT3_FEATURE_INCOMPAT_FILETYPE                0x0002
+ #define EXT3_FEATURE_INCOMPAT_RECOVER         0x0004 /* Needs recovery */
+ #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008 /* Journal device */
++#define EXT3_FEATURE_INCOMPAT_EXTENTS         0x0040 /* extents support */
+ #define EXT3_FEATURE_COMPAT_SUPP      EXT2_FEATURE_COMPAT_EXT_ATTR
+ #define EXT3_FEATURE_INCOMPAT_SUPP    (EXT3_FEATURE_INCOMPAT_FILETYPE| \
+-                                       EXT3_FEATURE_INCOMPAT_RECOVER)
++                                       EXT3_FEATURE_INCOMPAT_RECOVER| \
++                                       EXT3_FEATURE_INCOMPAT_EXTENTS)
+ #define EXT3_FEATURE_RO_COMPAT_SUPP   (EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+                                        EXT3_FEATURE_RO_COMPAT_LARGE_FILE| \
+                                        EXT3_FEATURE_RO_COMPAT_BTREE_DIR)
+@@ -689,6 +697,7 @@
  extern unsigned long ext3_count_free (struct buffer_head *, unsigned);
  
  /* inode.c */
@@ -2571,7 +2503,7 @@ Index: linux-2.4.20-rh/include/linux/ext3_fs.h
  extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
  extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
  extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
-@@ -770,6 +777,14 @@
+@@ -770,6 +779,14 @@
  extern struct inode_operations ext3_symlink_inode_operations;
  extern struct inode_operations ext3_fast_symlink_inode_operations;
  
@@ -2586,13 +2518,14 @@ Index: linux-2.4.20-rh/include/linux/ext3_fs.h
  
  #endif        /* __KERNEL__ */
  
-Index: linux-2.4.20-rh/include/linux/ext3_extents.h
+Index: linux-2.4.20-rh-20.9/include/linux/ext3_extents.h
 ===================================================================
---- linux-2.4.20-rh.orig/include/linux/ext3_extents.h  2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-rh/include/linux/ext3_extents.h       2004-04-28 10:32:44.000000000 +0800
-@@ -0,0 +1,216 @@
+--- linux-2.4.20-rh-20.9.orig/include/linux/ext3_extents.h     2003-01-30 13:24:37.000000000 +0300
++++ linux-2.4.20-rh-20.9/include/linux/ext3_extents.h  2004-09-12 20:01:45.000000000 +0400
+@@ -0,0 +1,237 @@
 +/*
-+ * Copyright (C) 2003 Alex Tomas <alex@clusterfs.com>
++ * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
@@ -2661,9 +2594,10 @@ Index: linux-2.4.20-rh/include/linux/ext3_extents.h
 + * it's used at the bottom of the tree
 + */
 +struct ext3_extent {
-+      __u32   e_block;        /* first logical block extent covers */
-+      __u32   e_start;        /* first physical block extents lives */
-+      __u32   e_num;          /* number of blocks covered by extent */
++      __u32   ee_block;       /* first logical block extent covers */
++      __u16   ee_len;         /* number of blocks covered by extent */
++      __u16   ee_start_hi;    /* high 16 bits of physical block */
++      __u32   ee_start;       /* low 32 bigs of physical block */
 +};
 +
 +/*
@@ -2671,23 +2605,25 @@ Index: linux-2.4.20-rh/include/linux/ext3_extents.h
 + * it's used at all the levels, but the bottom
 + */
 +struct ext3_extent_idx {
-+      __u32   e_block;        /* index covers logical blocks from 'block' */
-+      __u32   e_leaf;         /* pointer to the physical block of the next *
++      __u32   ei_block;       /* index covers logical blocks from 'block' */
++      __u32   ei_leaf;        /* pointer to the physical block of the next *
 +                               * level. leaf or next index could bet here */
++      __u16   ei_leaf_hi;     /* high 16 bits of physical block */
++      __u16   ei_unused;
 +};
 +
 +/*
 + * each block (leaves and indexes), even inode-stored has header
 + */
 +struct ext3_extent_header {   
-+      __u16   e_magic;        /* probably will support different formats */   
-+      __u16   e_num;          /* number of valid entries */
-+      __u16   e_max;          /* capacity of store in entries */
-+      __u16   e_depth;        /* has tree real underlaying blocks? */
-+      __u32   e_generation;   /* generation of the tree */
++      __u16   eh_magic;       /* probably will support different formats */   
++      __u16   eh_entries;     /* number of valid entries */
++      __u16   eh_max;         /* capacity of store in entries */
++      __u16   eh_depth;       /* has tree real underlaying blocks? */
++      __u32   eh_generation;  /* generation of the tree */
 +};
 +
-+#define EXT3_EXT_MAGIC                0xf301
++#define EXT3_EXT_MAGIC                0xf30a
 +
 +/*
 + * array of ext3_ext_path contains path to some extent
@@ -2707,11 +2643,11 @@ Index: linux-2.4.20-rh/include/linux/ext3_extents.h
 + * structure for external API
 + */
 +
-+
 +/*
 + * ext3_extents_tree is used to pass initial information
 + * to top-level extents API
 + */
++struct ext3_extents_helpers;
 +struct ext3_extents_tree {
 +      struct inode *inode;    /* inode which tree belongs to */
 +      void *root;             /* ptr to data top of tree resides at */
@@ -2719,6 +2655,10 @@ Index: linux-2.4.20-rh/include/linux/ext3_extents.h
 +      int buffer_len;
 +      void *private;
 +      struct ext3_extent *cex;/* last found extent */
++      struct ext3_extents_helpers *ops;
++};
++
++struct ext3_extents_helpers {
 +      int (*get_write_access)(handle_t *h, void *buffer);
 +      int (*mark_buffer_dirty)(handle_t *h, void *buffer);
 +      int (*mergable)(struct ext3_extent *ex1, struct ext3_extent *ex2);
@@ -2748,6 +2688,10 @@ Index: linux-2.4.20-rh/include/linux/ext3_extents.h
 +#define EXT_REPEAT    2
 +
 +
++#define EXT_MAX_BLOCK 0xffffffff
++#define EXT_CACHE_MARK        0xffff
++
++
 +#define EXT_FIRST_EXTENT(__hdr__) \
 +      ((struct ext3_extent *) (((char *) (__hdr__)) +         \
 +                               sizeof(struct ext3_extent_header)))
@@ -2755,24 +2699,24 @@ Index: linux-2.4.20-rh/include/linux/ext3_extents.h
 +      ((struct ext3_extent_idx *) (((char *) (__hdr__)) +     \
 +                                   sizeof(struct ext3_extent_header)))
 +#define EXT_HAS_FREE_INDEX(__path__) \
-+      ((__path__)->p_hdr->e_num < (__path__)->p_hdr->e_max)
++      ((__path__)->p_hdr->eh_entries < (__path__)->p_hdr->eh_max)
 +#define EXT_LAST_EXTENT(__hdr__) \
-+      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->e_num - 1)
++      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_entries - 1)
 +#define EXT_LAST_INDEX(__hdr__) \
-+      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->e_num - 1)
++      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_entries - 1)
 +#define EXT_MAX_EXTENT(__hdr__) \
-+      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->e_max - 1)
++      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_max - 1)
 +#define EXT_MAX_INDEX(__hdr__) \
-+      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->e_max - 1)
++      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_max - 1)
 +
 +#define EXT_ROOT_HDR(tree) \
 +      ((struct ext3_extent_header *) (tree)->root)
 +#define EXT_BLOCK_HDR(bh) \
 +      ((struct ext3_extent_header *) (bh)->b_data)
 +#define EXT_DEPTH(_t_)        \
-+      (((struct ext3_extent_header *)((_t_)->root))->e_depth)
++      (((struct ext3_extent_header *)((_t_)->root))->eh_depth)
 +#define EXT_GENERATION(_t_)   \
-+      (((struct ext3_extent_header *)((_t_)->root))->e_generation)
++      (((struct ext3_extent_header *)((_t_)->root))->eh_generation)
 +
 +
 +#define EXT_ASSERT(__x__) if (!(__x__)) BUG();
@@ -2798,6 +2742,7 @@ Index: linux-2.4.20-rh/include/linux/ext3_extents.h
 +      int leaf_num;
 +};
 +
++void ext3_init_tree_desc(struct ext3_extents_tree *, struct inode *);
 +extern int ext3_extent_tree_init(handle_t *, struct ext3_extents_tree *);
 +extern int ext3_ext_calc_credits_for_insert(struct ext3_extents_tree *, struct ext3_ext_path *);
 +extern int ext3_ext_insert_extent(handle_t *, struct ext3_extents_tree *, struct ext3_ext_path *, struct ext3_extent *);
@@ -2805,17 +2750,26 @@ Index: linux-2.4.20-rh/include/linux/ext3_extents.h
 +extern int ext3_ext_remove_space(struct ext3_extents_tree *, unsigned long, unsigned long);
 +extern struct ext3_ext_path * ext3_ext_find_extent(struct ext3_extents_tree *, int, struct ext3_ext_path *);
 +
++static inline void
++ext3_ext_invalidate_cache(struct ext3_extents_tree *tree)
++{
++      if (tree->cex)
++              tree->cex->ee_len = 0;
++}
++
++
 +#endif /* _LINUX_EXT3_EXTENTS */
 +
-Index: linux-2.4.20-rh/include/linux/ext3_fs_i.h
+Index: linux-2.4.20-rh-20.9/include/linux/ext3_fs_i.h
 ===================================================================
---- linux-2.4.20-rh.orig/include/linux/ext3_fs_i.h     2004-04-28 10:31:55.000000000 +0800
-+++ linux-2.4.20-rh/include/linux/ext3_fs_i.h  2004-04-28 10:59:04.000000000 +0800
-@@ -78,6 +78,7 @@
-        */
-       struct rw_semaphore truncate_sem;
-+      __u32 i_cached_extent[3];
-       /* following fields for parallel directory operations -bzzz */
+--- linux-2.4.20-rh-20.9.orig/include/linux/ext3_fs_i.h        2004-09-12 20:00:59.000000000 +0400
++++ linux-2.4.20-rh-20.9/include/linux/ext3_fs_i.h     2004-09-12 20:01:45.000000000 +0400
+@@ -82,6 +82,8 @@
        struct dynlock i_htree_lock;
        struct semaphore i_append_sem;
+       struct semaphore i_rename_sem;
++
++      __u32 i_cached_extent[3];
+ };
+ #endif        /* _LINUX_EXT3_FS_I */
@@ -1,10 +1,11 @@
-Index: linux-2.4.24/fs/ext3/extents.c
+Index: linux-2.4.21-15.EL/fs/ext3/extents.c
 ===================================================================
---- linux-2.4.24.orig/fs/ext3/extents.c        2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.24/fs/ext3/extents.c     2004-02-06 10:18:42.000000000 +0300
-@@ -0,0 +1,2347 @@
+--- linux-2.4.21-15.EL.orig/fs/ext3/extents.c  2003-01-30 13:24:37.000000000 +0300
++++ linux-2.4.21-15.EL/fs/ext3/extents.c       2004-09-12 20:22:35.000000000 +0400
+@@ -0,0 +1,2271 @@
 +/*
-+ * Copyright (C) 2003 Alex Tomas <alex@clusterfs.com>
++ * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
@@ -64,8 +65,8 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +static int inline
 +ext3_ext_get_access_for_root(handle_t *h, struct ext3_extents_tree *tree)
 +{
-+      if (tree->get_write_access)
-+              return tree->get_write_access(h,tree->buffer);
++      if (tree->ops->get_write_access)
++              return tree->ops->get_write_access(h,tree->buffer);
 +      else
 +              return 0;
 +}
@@ -73,8 +74,8 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +static int inline
 +ext3_ext_mark_root_dirty(handle_t *h, struct ext3_extents_tree *tree)
 +{
-+      if (tree->mark_buffer_dirty)
-+              return tree->mark_buffer_dirty(h,tree->buffer);
++      if (tree->ops->mark_buffer_dirty)
++              return tree->ops->mark_buffer_dirty(h,tree->buffer);
 +      else
 +              return 0;
 +}
@@ -129,8 +130,8 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      struct inode *inode;
 +
 +      EXT_ASSERT(tree);
-+      if (tree->new_block)
-+              return tree->new_block(handle, tree, path, ex, err);
++      if (tree->ops->new_block)
++              return tree->ops->new_block(handle, tree, path, ex, err);
 +
 +      inode = tree->inode;
 +      depth = EXT_DEPTH(tree);
@@ -157,7 +158,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +{
 +      struct ext3_extent_header *neh;
 +      neh = EXT_ROOT_HDR(tree);
-+      neh->e_generation++;
++      neh->eh_generation++;
 +}
 +
 +static inline int ext3_ext_space_block(struct ext3_extents_tree *tree)
@@ -220,13 +221,13 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      ext_debug(tree, "path:");
 +      for (k = 0; k <= l; k++, path++) {
 +              if (path->p_idx) {
-+                      ext_debug(tree, "  %d->%d", path->p_idx->e_block,
-+                                      path->p_idx->e_leaf);
++                      ext_debug(tree, "  %d->%d", path->p_idx->ei_block,
++                                      path->p_idx->ei_leaf);
 +              } else if (path->p_ext) {
 +                      ext_debug(tree, "  %d:%d:%d",
-+                                      path->p_ext->e_block,
-+                                      path->p_ext->e_num,
-+                                      path->p_ext->e_start);
++                                      path->p_ext->ee_block,
++                                      path->p_ext->ee_len,
++                                      path->p_ext->ee_start);
 +              } else
 +                      ext_debug(tree, "  []");
 +      }
@@ -249,9 +250,9 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      eh = path[depth].p_hdr;
 +      ex = EXT_FIRST_EXTENT(eh);
 +
-+      for (i = 0; i < eh->e_num; i++, ex++) {
++      for (i = 0; i < eh->eh_entries; i++, ex++) {
 +              ext_debug(tree, "%d:%d:%d ",
-+                              ex->e_block, ex->e_num, ex->e_start);
++                              ex->ee_block, ex->ee_len, ex->ee_start);
 +      }
 +      ext_debug(tree, "\n");
 +#endif
@@ -280,18 +281,18 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      struct ext3_extent_idx *ix;
 +      int l = 0, k, r;
 +
-+      EXT_ASSERT(eh->e_magic == EXT3_EXT_MAGIC);
-+      EXT_ASSERT(eh->e_num <= eh->e_max);
-+      EXT_ASSERT(eh->e_num > 0);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++      EXT_ASSERT(eh->eh_entries > 0);
 +
 +      ext_debug(tree, "binsearch for %d(idx):  ", block);
 +
 +      path->p_idx = ix = EXT_FIRST_INDEX(eh);
 +
-+      r = k = eh->e_num;
++      r = k = eh->eh_entries;
 +      while (k > 1) {
 +              k = (r - l) / 2;
-+              if (block < ix[l + k].e_block)
++              if (block < ix[l + k].ei_block)
 +                      r -= k;
 +              else
 +                      l += k;
@@ -300,30 +301,30 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 +      ix += l;
 +      path->p_idx = ix;
-+      ext_debug(tree, "  -> %d->%d ", path->p_idx->e_block, path->p_idx->e_leaf);
++      ext_debug(tree, "  -> %d->%d ", path->p_idx->ei_block, path->p_idx->ei_leaf);
 +
 +      while (l++ < r) {
-+              if (block < ix->e_block) 
++              if (block < ix->ei_block) 
 +                      break;
 +              path->p_idx = ix++;
 +      }
-+      ext_debug(tree, "  -> %d->%d\n", path->p_idx->e_block,
-+                      path->p_idx->e_leaf);
++      ext_debug(tree, "  -> %d->%d\n", path->p_idx->ei_block,
++                      path->p_idx->ei_leaf);
 +
 +#ifdef CHECK_BINSEARCH 
 +      {
 +              struct ext3_extent_idx *chix;
 +
 +              chix = ix = EXT_FIRST_INDEX(eh);
-+              for (k = 0; k < eh->e_num; k++, ix++) {
-+                      if (k != 0 && ix->e_block <= ix[-1].e_block) {
++              for (k = 0; k < eh->eh_entries; k++, ix++) {
++                      if (k != 0 && ix->ei_block <= ix[-1].ei_block) {
 +                              printk("k=%d, ix=0x%p, first=0x%p\n", k,
 +                                      ix, EXT_FIRST_INDEX(eh));
 +                              printk("%u <= %u\n",
-+                                      ix->e_block,ix[-1].e_block);
++                                      ix->ei_block,ix[-1].ei_block);
 +                      }
-+                      EXT_ASSERT(k == 0 || ix->e_block > ix[-1].e_block);
-+                      if (block < ix->e_block) 
++                      EXT_ASSERT(k == 0 || ix->ei_block > ix[-1].ei_block);
++                      if (block < ix->ei_block) 
 +                              break;
 +                      chix = ix;
 +              }
@@ -344,10 +345,10 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      struct ext3_extent *ex;
 +      int l = 0, k, r;
 +
-+      EXT_ASSERT(eh->e_magic == EXT3_EXT_MAGIC);
-+      EXT_ASSERT(eh->e_num <= eh->e_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
 +
-+      if (eh->e_num == 0) {
++      if (eh->eh_entries == 0) {
 +              /*
 +               * this leaf is empty yet:
 +               *  we get such a leaf in split/add case
@@ -359,10 +360,10 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 +      path->p_ext = ex = EXT_FIRST_EXTENT(eh);
 +
-+      r = k = eh->e_num;
++      r = k = eh->eh_entries;
 +      while (k > 1) {
 +              k = (r - l) / 2;
-+              if (block < ex[l + k].e_block)
++              if (block < ex[l + k].ee_block)
 +                      r -= k;
 +              else
 +                      l += k;
@@ -371,25 +372,25 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 +      ex += l;
 +      path->p_ext = ex;
-+      ext_debug(tree, "  -> %d:%d:%d ", path->p_ext->e_block,
-+                      path->p_ext->e_start, path->p_ext->e_num);
++      ext_debug(tree, "  -> %d:%d:%d ", path->p_ext->ee_block,
++                      path->p_ext->ee_start, path->p_ext->ee_len);
 +
 +      while (l++ < r) {
-+              if (block < ex->e_block) 
++              if (block < ex->ee_block) 
 +                      break;
 +              path->p_ext = ex++;
 +      }
-+      ext_debug(tree, "  -> %d:%d:%d\n", path->p_ext->e_block,
-+                      path->p_ext->e_start, path->p_ext->e_num);
++      ext_debug(tree, "  -> %d:%d:%d\n", path->p_ext->ee_block,
++                      path->p_ext->ee_start, path->p_ext->ee_len);
 +
 +#ifdef CHECK_BINSEARCH 
 +      {
 +              struct ext3_extent *chex;
 +
 +              chex = ex = EXT_FIRST_EXTENT(eh);
-+              for (k = 0; k < eh->e_num; k++, ex++) {
-+                      EXT_ASSERT(k == 0 || ex->e_block > ex[-1].e_block);
-+                      if (block < ex->e_block) 
++              for (k = 0; k < eh->eh_entries; k++, ex++) {
++                      EXT_ASSERT(k == 0 || ex->ee_block > ex[-1].ee_block);
++                      if (block < ex->ee_block) 
 +                              break;
 +                      chex = ex;
 +              }
@@ -406,11 +407,12 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      BUG_ON(tree->buffer_len == 0);
 +      ext3_ext_get_access_for_root(handle, tree);
 +      eh = EXT_ROOT_HDR(tree);
-+      eh->e_depth = 0;
-+      eh->e_num = 0;
-+      eh->e_magic = EXT3_EXT_MAGIC;
-+      eh->e_max = ext3_ext_space_root(tree);
++      eh->eh_depth = 0;
++      eh->eh_entries = 0;
++      eh->eh_magic = EXT3_EXT_MAGIC;
++      eh->eh_max = ext3_ext_space_root(tree);
 +      ext3_ext_mark_root_dirty(handle, tree);
++      ext3_ext_invalidate_cache(tree);
 +      return 0;
 +}
 +
@@ -429,9 +431,9 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      eh = EXT_ROOT_HDR(tree);
 +      EXT_ASSERT(eh);
 +      i = depth = EXT_DEPTH(tree);
-+      EXT_ASSERT(eh->e_max);
-+      EXT_ASSERT(eh->e_magic == EXT3_EXT_MAGIC);
-+      EXT_ASSERT(i == 0 || eh->e_num > 0);
++      EXT_ASSERT(eh->eh_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(i == 0 || eh->eh_entries > 0);
 +      
 +      /* account possible depth increase */
 +      if (!path) {
@@ -446,9 +448,9 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      /* walk through the tree */
 +      while (i) {
 +              ext_debug(tree, "depth %d: num %d, max %d\n",
-+                              ppos, eh->e_num, eh->e_max);
++                              ppos, eh->eh_entries, eh->eh_max);
 +              ext3_ext_binsearch_idx(tree, path + ppos, block);
-+              path[ppos].p_block = path[ppos].p_idx->e_leaf;
++              path[ppos].p_block = path[ppos].p_idx->ei_leaf;
 +              path[ppos].p_depth = i;
 +              path[ppos].p_ext = NULL;
 +
@@ -493,9 +495,9 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      if ((err = ext3_ext_get_access(handle, tree, curp)))
 +              return err;
 +
-+      EXT_ASSERT(logical != curp->p_idx->e_block);
++      EXT_ASSERT(logical != curp->p_idx->ei_block);
 +      len = EXT_MAX_INDEX(curp->p_hdr) - curp->p_idx;
-+      if (logical > curp->p_idx->e_block) {
++      if (logical > curp->p_idx->ei_block) {
 +              /* insert after */
 +              if (curp->p_idx != EXT_LAST_INDEX(curp->p_hdr)) {
 +                      len = (len - 1) * sizeof(struct ext3_extent_idx);
@@ -519,11 +521,11 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              ix = curp->p_idx;
 +      }
 +
-+      ix->e_block = logical;
-+      ix->e_leaf = ptr;
-+      curp->p_hdr->e_num++;
++      ix->ei_block = logical;
++      ix->ei_leaf = ptr;
++      curp->p_hdr->eh_entries++;
 +
-+      EXT_ASSERT(curp->p_hdr->e_num <= curp->p_hdr->e_max);
++      EXT_ASSERT(curp->p_hdr->eh_entries <= curp->p_hdr->eh_max);
 +      EXT_ASSERT(ix <= EXT_LAST_INDEX(curp->p_hdr));
 +
 +      err = ext3_ext_dirty(handle, tree, curp);
@@ -562,12 +564,12 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +       * border from split point */
 +      EXT_ASSERT(path[depth].p_ext <= EXT_MAX_EXTENT(path[depth].p_hdr));
 +      if (path[depth].p_ext != EXT_MAX_EXTENT(path[depth].p_hdr)) {
-+              border = path[depth].p_ext[1].e_block;
++              border = path[depth].p_ext[1].ee_block;
 +              ext_debug(tree, "leaf will be splitted."
 +                              " next leaf starts at %d\n",
 +                              (int)border);
 +      } else {
-+              border = newext->e_block;
++              border = newext->ee_block;
 +              ext_debug(tree, "leaf will be added."
 +                              " next leaf starts at %d\n",
 +                              (int)border);
@@ -613,14 +615,14 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              goto cleanup;
 +
 +      neh = EXT_BLOCK_HDR(bh);
-+      neh->e_num = 0;
-+      neh->e_max = ext3_ext_space_block(tree);
-+      neh->e_magic = EXT3_EXT_MAGIC;
-+      neh->e_depth = 0;
++      neh->eh_entries = 0;
++      neh->eh_max = ext3_ext_space_block(tree);
++      neh->eh_magic = EXT3_EXT_MAGIC;
++      neh->eh_depth = 0;
 +      ex = EXT_FIRST_EXTENT(neh);
 +
 +      /* move remain of path[depth] to the new leaf */
-+      EXT_ASSERT(path[depth].p_hdr->e_num == path[depth].p_hdr->e_max);
++      EXT_ASSERT(path[depth].p_hdr->eh_entries == path[depth].p_hdr->eh_max);
 +      /* start copy from next extent */
 +      /* TODO: we could do it by single memmove */
 +      m = 0;
@@ -628,13 +630,13 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      while (path[depth].p_ext <=
 +                      EXT_MAX_EXTENT(path[depth].p_hdr)) {
 +              ext_debug(tree, "move %d:%d:%d in new leaf %lu\n",
-+                              path[depth].p_ext->e_block,
-+                              path[depth].p_ext->e_start,
-+                              path[depth].p_ext->e_num,
++                              path[depth].p_ext->ee_block,
++                              path[depth].p_ext->ee_start,
++                              path[depth].p_ext->ee_len,
 +                              newblock);
 +              memmove(ex++, path[depth].p_ext++,
 +                              sizeof(struct ext3_extent));
-+              neh->e_num++;
++              neh->eh_entries++;
 +              m++;
 +      }
 +      mark_buffer_uptodate(bh, 1);
@@ -649,7 +651,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      if (m) {
 +              if ((err = ext3_ext_get_access(handle, tree, path + depth)))
 +                      goto cleanup;
-+              path[depth].p_hdr->e_num -= m;
++              path[depth].p_hdr->eh_entries -= m;
 +              if ((err = ext3_ext_dirty(handle, tree, path + depth)))
 +                      goto cleanup;
 +              
@@ -677,13 +679,13 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +                      goto cleanup;
 +
 +              neh = EXT_BLOCK_HDR(bh);
-+              neh->e_num = 1;
-+              neh->e_magic = EXT3_EXT_MAGIC;
-+              neh->e_max = ext3_ext_space_block_idx(tree);
-+              neh->e_depth = depth - i; 
++              neh->eh_entries = 1;
++              neh->eh_magic = EXT3_EXT_MAGIC;
++              neh->eh_max = ext3_ext_space_block_idx(tree);
++              neh->eh_depth = depth - i; 
 +              fidx = EXT_FIRST_INDEX(neh);
-+              fidx->e_block = border;
-+              fidx->e_leaf = oldblock;
++              fidx->ei_block = border;
++              fidx->ei_leaf = oldblock;
 +
 +              ext_debug(tree, "int.index at %d (block %lu): %lu -> %lu\n",
 +                              i, newblock, border, oldblock);
@@ -697,12 +699,12 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +                              EXT_LAST_INDEX(path[i].p_hdr));
 +              while (path[i].p_idx <= EXT_MAX_INDEX(path[i].p_hdr)) {
 +                      ext_debug(tree, "%d: move %d:%d in new index %lu\n",
-+                                      i, path[i].p_idx->e_block,
-+                                      path[i].p_idx->e_leaf, newblock);
++                                      i, path[i].p_idx->ei_block,
++                                      path[i].p_idx->ei_leaf, newblock);
 +                      memmove(++fidx, path[i].p_idx++,
 +                                      sizeof(struct ext3_extent_idx));
-+                      neh->e_num++;
-+                      EXT_ASSERT(neh->e_num <= neh->e_max);
++                      neh->eh_entries++;
++                      EXT_ASSERT(neh->eh_entries <= neh->eh_max);
 +                      m++;
 +              }
 +              mark_buffer_uptodate(bh, 1);
@@ -718,7 +720,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +                      err = ext3_ext_get_access(handle, tree, path + i);
 +                      if (err)
 +                              goto cleanup;
-+                      path[i].p_hdr->e_num -= m;
++                      path[i].p_hdr->eh_entries -= m;
 +                      err = ext3_ext_dirty(handle, tree, path + i);
 +                      if (err)
 +                              goto cleanup;
@@ -741,10 +743,11 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 +      if (err) {
 +              /* free all allocated blocks in error case */
-+              for (i = 0; i < depth; i++)
++              for (i = 0; i < depth; i++) {
 +                      if (!ablocks[i])
 +                              continue;
 +                      ext3_free_blocks(handle, tree->inode, ablocks[i], 1);
++              }
 +      }
 +      kfree(ablocks);
 +
@@ -793,12 +796,12 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      /* set size of new block */
 +      neh = EXT_BLOCK_HDR(bh);
 +      /* old root could have indexes or leaves
-+       * so calculate e_max right way */
++       * so calculate eh_max right way */
 +      if (EXT_DEPTH(tree))
-+              neh->e_max = ext3_ext_space_block_idx(tree);
++              neh->eh_max = ext3_ext_space_block_idx(tree);
 +      else
-+              neh->e_max = ext3_ext_space_block(tree);
-+      neh->e_magic = EXT3_EXT_MAGIC;
++              neh->eh_max = ext3_ext_space_block(tree);
++      neh->eh_magic = EXT3_EXT_MAGIC;
 +      mark_buffer_uptodate(bh, 1);
 +      unlock_buffer(bh);
 +
@@ -809,20 +812,20 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      if ((err = ext3_ext_get_access(handle, tree, curp)))
 +              goto out;
 +
-+      curp->p_hdr->e_magic = EXT3_EXT_MAGIC;
-+      curp->p_hdr->e_max = ext3_ext_space_root_idx(tree);
-+      curp->p_hdr->e_num = 1;
++      curp->p_hdr->eh_magic = EXT3_EXT_MAGIC;
++      curp->p_hdr->eh_max = ext3_ext_space_root_idx(tree);
++      curp->p_hdr->eh_entries = 1;
 +      curp->p_idx = EXT_FIRST_INDEX(curp->p_hdr);
 +      /* FIXME: it works, but actually path[0] can be index */
-+      curp->p_idx->e_block = EXT_FIRST_EXTENT(path[0].p_hdr)->e_block;
-+      curp->p_idx->e_leaf = newblock;
++      curp->p_idx->ei_block = EXT_FIRST_EXTENT(path[0].p_hdr)->ee_block;
++      curp->p_idx->ei_leaf = newblock;
 +
 +      neh = EXT_ROOT_HDR(tree);
 +      fidx = EXT_FIRST_INDEX(neh);
 +      ext_debug(tree, "new root: num %d(%d), lblock %d, ptr %d\n",
-+                      neh->e_num, neh->e_max, fidx->e_block, fidx->e_leaf); 
++                      neh->eh_entries, neh->eh_max, fidx->ei_block, fidx->ei_leaf); 
 +
-+      neh->e_depth = path->p_depth + 1;
++      neh->eh_depth = path->p_depth + 1;
 +      err = ext3_ext_dirty(handle, tree, curp);
 +out:
 +      brelse(bh);
@@ -861,7 +864,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 +              /* refill path */
 +              ext3_ext_drop_refs(path);
-+              path = ext3_ext_find_extent(tree, newext->e_block, path);
++              path = ext3_ext_find_extent(tree, newext->ee_block, path);
 +              if (IS_ERR(path))
 +                      err = PTR_ERR(path);
 +      } else {
@@ -870,7 +873,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 +              /* refill path */
 +              ext3_ext_drop_refs(path);
-+              path = ext3_ext_find_extent(tree, newext->e_block, path);
++              path = ext3_ext_find_extent(tree, newext->ee_block, path);
 +              if (IS_ERR(path))
 +                      err = PTR_ERR(path);
 +
@@ -879,7 +882,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +               * in all other cases we have to split growed tree
 +               */
 +              depth = EXT_DEPTH(tree);
-+              if (path[depth].p_hdr->e_num == path[depth].p_hdr->e_max) {
++              if (path[depth].p_hdr->eh_entries == path[depth].p_hdr->eh_max) {
 +                      /* now we need split */
 +                      goto repeat;
 +              }
@@ -892,7 +895,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +}
 +
 +/*
-+ * returns allocated block in subsequent extent or 0xffffffff
++ * returns allocated block in subsequent extent or EXT_MAX_BLOCK
 + * NOTE: it consider block number from index entry as
 + * allocated block. thus, index entries have to be consistent
 + * with leafs
@@ -906,7 +909,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      depth = path->p_depth;
 +
 +      if (depth == 0 && path->p_ext == NULL)
-+              return 0xffffffff;
++              return EXT_MAX_BLOCK;
 +
 +      /* FIXME: what if index isn't full ?! */
 +      while (depth >= 0) {
@@ -914,21 +917,21 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +                      /* leaf */
 +                      if (path[depth].p_ext !=
 +                                      EXT_LAST_EXTENT(path[depth].p_hdr))
-+                              return path[depth].p_ext[1].e_block;
++                              return path[depth].p_ext[1].ee_block;
 +              } else {
 +                      /* index */
 +                      if (path[depth].p_idx !=
 +                                      EXT_LAST_INDEX(path[depth].p_hdr))
-+                              return path[depth].p_idx[1].e_block;
++                              return path[depth].p_idx[1].ei_block;
 +              }
 +              depth--;        
 +      }
 +
-+      return 0xffffffff;
++      return EXT_MAX_BLOCK;
 +}
 +
 +/*
-+ * returns first allocated block from next leaf or 0xffffffff
++ * returns first allocated block from next leaf or EXT_MAX_BLOCK
 + */
 +static unsigned ext3_ext_next_leaf_block(struct ext3_extents_tree *tree,
 +                                               struct ext3_ext_path *path)
@@ -940,7 +943,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 +      /* zero-tree has no leaf blocks at all */
 +      if (depth == 0)
-+              return 0xffffffff;
++              return EXT_MAX_BLOCK;
 +
 +      /* go to index block */
 +      depth--;
@@ -948,11 +951,11 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      while (depth >= 0) {
 +              if (path[depth].p_idx !=
 +                              EXT_LAST_INDEX(path[depth].p_hdr))
-+                      return path[depth].p_idx[1].e_block;
++                      return path[depth].p_idx[1].ei_block;
 +              depth--;        
 +      }
 +
-+      return 0xffffffff;
++      return EXT_MAX_BLOCK;
 +}
 +
 +/*
@@ -988,10 +991,10 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +       * TODO: we need correction if border is smaller then current one
 +       */
 +      k = depth - 1;
-+      border = path[depth].p_ext->e_block;
++      border = path[depth].p_ext->ee_block;
 +      if ((err = ext3_ext_get_access(handle, tree, path + k)))
 +              return err;
-+      path[k].p_idx->e_block = border;
++      path[k].p_idx->ei_block = border;
 +      if ((err = ext3_ext_dirty(handle, tree, path + k)))
 +              return err;
 +
@@ -1001,7 +1004,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +                      break;
 +              if ((err = ext3_ext_get_access(handle, tree, path + k)))
 +                      break;
-+              path[k].p_idx->e_block = border;
++              path[k].p_idx->ei_block = border;
 +              if ((err = ext3_ext_dirty(handle, tree, path + k)))
 +                      break;
 +      }
@@ -1014,18 +1017,18 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +                              struct ext3_extent *ex1,
 +                              struct ext3_extent *ex2)
 +{
-+      if (ex1->e_block + ex1->e_num != ex2->e_block)
++      if (ex1->ee_block + ex1->ee_len != ex2->ee_block)
 +              return 0;
 +
 +#ifdef AGRESSIVE_TEST
-+      if (ex1->e_num >= 4)
++      if (ex1->ee_len >= 4)
 +              return 0;
 +#endif
 +
-+      if (!tree->mergable)
++      if (!tree->ops->mergable)
 +              return 1;
 +
-+      return tree->mergable(ex1, ex2);
++      return tree->ops->mergable(ex1, ex2);
 +}
 +
 +/*
@@ -1043,6 +1046,8 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      struct ext3_ext_path *npath = NULL;
 +      int depth, len, err, next;
 +
++      EXT_ASSERT(newext->ee_len > 0);
++      EXT_ASSERT(newext->ee_len < EXT_CACHE_MARK);
 +      depth = EXT_DEPTH(tree);
 +      ex = path[depth].p_ext;
 +      EXT_ASSERT(path[depth].p_hdr);
@@ -1050,11 +1055,11 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      /* try to insert block into found extent and return */
 +      if (ex && ext3_can_extents_be_merged(tree, ex, newext)) {
 +              ext_debug(tree, "append %d block to %d:%d (from %d)\n",
-+                              newext->e_num, ex->e_block, ex->e_num,
-+                              ex->e_start);
++                              newext->ee_len, ex->ee_block, ex->ee_len,
++                              ex->ee_start);
 +              if ((err = ext3_ext_get_access(handle, tree, path + depth)))
 +                      return err;
-+              ex->e_num += newext->e_num;
++              ex->ee_len += newext->ee_len;
 +              eh = path[depth].p_hdr;
 +              nearex = ex;
 +              goto merge;
@@ -1063,13 +1068,13 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +repeat:
 +      depth = EXT_DEPTH(tree);
 +      eh = path[depth].p_hdr;
-+      if (eh->e_num < eh->e_max)
++      if (eh->eh_entries < eh->eh_max)
 +              goto has_space;
 +
 +      /* probably next leaf has space for us? */
 +      fex = EXT_LAST_EXTENT(eh);
 +      next = ext3_ext_next_leaf_block(tree, path);
-+      if (newext->e_block > fex->e_block && next != 0xffffffff) {
++      if (newext->ee_block > fex->ee_block && next != EXT_MAX_BLOCK) {
 +              ext_debug(tree, "next leaf block - %d\n", next);
 +              EXT_ASSERT(!npath);
 +              npath = ext3_ext_find_extent(tree, next, NULL);
@@ -1077,14 +1082,14 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +                      return PTR_ERR(npath);
 +              EXT_ASSERT(npath->p_depth == path->p_depth);
 +              eh = npath[depth].p_hdr;
-+              if (eh->e_num < eh->e_max) {
++              if (eh->eh_entries < eh->eh_max) {
 +                      ext_debug(tree, "next leaf isnt full(%d)\n",
-+                                      eh->e_num);
++                                      eh->eh_entries);
 +                      path = npath;
 +                      goto repeat;
 +              }
 +              ext_debug(tree, "next leaf hasno free space(%d,%d)\n",
-+                              eh->e_num, eh->e_max);
++                              eh->eh_entries, eh->eh_max);
 +      }
 +
 +      /*
@@ -1106,40 +1111,42 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      if (!nearex) {
 +              /* there is no extent in this leaf, create first one */
 +              ext_debug(tree, "first extent in the leaf: %d:%d:%d\n",
-+                              newext->e_block, newext->e_start,
-+                              newext->e_num);
++                              newext->ee_block, newext->ee_start,
++                              newext->ee_len);
 +              path[depth].p_ext = EXT_FIRST_EXTENT(eh);
-+      } else if (newext->e_block > nearex->e_block) {
-+              EXT_ASSERT(newext->e_block != nearex->e_block);
++      } else if (newext->ee_block > nearex->ee_block) {
++              EXT_ASSERT(newext->ee_block != nearex->ee_block);
 +              if (nearex != EXT_LAST_EXTENT(eh)) {
 +                      len = EXT_MAX_EXTENT(eh) - nearex;
 +                      len = (len - 1) * sizeof(struct ext3_extent);
 +                      len = len < 0 ? 0 : len;
 +                      ext_debug(tree, "insert %d:%d:%d after: nearest 0x%p, "
 +                                      "move %d from 0x%p to 0x%p\n",
-+                                      newext->e_block, newext->e_start,
-+                                      newext->e_num,
++                                      newext->ee_block, newext->ee_start,
++                                      newext->ee_len,
 +                                      nearex, len, nearex + 1, nearex + 2);
 +                      memmove(nearex + 2, nearex + 1, len);
 +              }
 +              path[depth].p_ext = nearex + 1;
 +      } else {
-+              EXT_ASSERT(newext->e_block != nearex->e_block);
++              EXT_ASSERT(newext->ee_block != nearex->ee_block);
 +              len = (EXT_MAX_EXTENT(eh) - nearex) * sizeof(struct ext3_extent);
 +              len = len < 0 ? 0 : len;
 +              ext_debug(tree, "insert %d:%d:%d before: nearest 0x%p, "
 +                              "move %d from 0x%p to 0x%p\n",
-+                              newext->e_block, newext->e_start, newext->e_num,
++                              newext->ee_block, newext->ee_start, newext->ee_len,
 +                              nearex, len, nearex + 1, nearex + 2);
 +              memmove(nearex + 1, nearex, len);
 +              path[depth].p_ext = nearex;
 +      }
 +
-+      eh->e_num++;
++      eh->eh_entries++;
 +      nearex = path[depth].p_ext;
-+      nearex->e_block = newext->e_block;
-+      nearex->e_start = newext->e_start;
-+      nearex->e_num = newext->e_num;
++      nearex->ee_block = newext->ee_block;
++      nearex->ee_start = newext->ee_start;
++      nearex->ee_len = newext->ee_len;
++      /* FIXME: support for large fs */
++      nearex->ee_start_hi = 0;
 +
 +merge:
 +      /* try to merge extents to the right */
@@ -1147,14 +1154,14 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              if (!ext3_can_extents_be_merged(tree, nearex, nearex + 1))
 +                      break;
 +              /* merge with next extent! */
-+              nearex->e_num += nearex[1].e_num;
++              nearex->ee_len += nearex[1].ee_len;
 +              if (nearex + 1 < EXT_LAST_EXTENT(eh)) {
 +                      len = (EXT_LAST_EXTENT(eh) - nearex - 1)
 +                                      * sizeof(struct ext3_extent);
 +                      memmove(nearex + 1, nearex + 2, len);
 +              }
-+              eh->e_num--;
-+              EXT_ASSERT(eh->e_num > 0);
++              eh->eh_entries--;
++              EXT_ASSERT(eh->eh_entries > 0);
 +      }
 +
 +      /* try to merge extents to the left */
@@ -1172,6 +1179,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              kfree(npath);
 +      }
 +      ext3_ext_tree_changed(tree);
++      ext3_ext_invalidate_cache(tree);
 +      return err;
 +}
 +
@@ -1189,7 +1197,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      EXT_ASSERT(tree->inode);
 +      EXT_ASSERT(tree->root);
 +
-+      while (block < last && block != 0xfffffffff) {
++      while (block < last && block != EXT_MAX_BLOCK) {
 +              num = last - block;
 +              /* find extent for this block */
 +              path = ext3_ext_find_extent(tree, block, path);
@@ -1210,25 +1218,25 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +                       * all requested space */
 +                      start = block;
 +                      end = block + num;
-+              } else if (ex->e_block > block) {
++              } else if (ex->ee_block > block) {
 +                      /* need to allocate space before found extent */
 +                      start = block;
-+                      end = ex->e_block;
++                      end = ex->ee_block;
 +                      if (block + num < end)
 +                              end = block + num;
-+              } else if (block >= ex->e_block + ex->e_num) {
++              } else if (block >= ex->ee_block + ex->ee_len) {
 +                      /* need to allocate space after found extent */
 +                      start = block;
 +                      end = block + num;
 +                      if (end >= next)
 +                              end = next;
-+              } else if (block >= ex->e_block) {
++              } else if (block >= ex->ee_block) {
 +                      /* 
 +                       * some part of requested space is covered
 +                       * by found extent
 +                       */
 +                      start = block;
-+                      end = ex->e_block + ex->e_num;
++                      end = ex->ee_block + ex->ee_len;
 +                      if (block + num < end)
 +                              end = block + num;
 +                      exists = 1;
@@ -1238,9 +1246,9 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              EXT_ASSERT(end > start);
 +
 +              if (!exists) {
-+                      cbex.e_block = start;
-+                      cbex.e_num = end - start;
-+                      cbex.e_start = 0;
++                      cbex.ee_block = start;
++                      cbex.ee_len = end - start;
++                      cbex.ee_start = 0;
 +              } else
 +                      cbex = *ex;
 +
@@ -1263,7 +1271,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +                      path = NULL;
 +              }
 +
-+              block = cbex.e_block + cbex.e_num;
++              block = cbex.ee_block + cbex.ee_len;
 +      }
 +
 +      if (path) {
@@ -1275,21 +1283,14 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +}
 +
 +static inline void
-+ext3_ext_invalidate_cache(struct ext3_extents_tree *tree)
-+{
-+      if (tree->cex)
-+              tree->cex->e_num = 0;
-+}
-+
-+static inline void
 +ext3_ext_put_in_cache(struct ext3_extents_tree *tree, struct ext3_extent *ex)
 +{
 +      if (tree->cex) {
 +              EXT_ASSERT(ex);
-+              EXT_ASSERT(ex->e_num);
-+              tree->cex->e_block = ex->e_block;
-+              tree->cex->e_start = ex->e_start;
-+              tree->cex->e_num = ex->e_num;
++              EXT_ASSERT(ex->ee_len);
++              tree->cex->ee_block = ex->ee_block;
++              tree->cex->ee_start = ex->ee_start;
++              tree->cex->ee_len = ex->ee_len;
 +      }
 +}
 +
@@ -1311,32 +1312,32 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      ex = path[depth].p_ext;
 +      if (ex == NULL) {
 +              /* there is no extent yet, so gap is [0;-] */
-+              gex.e_block = 0;
-+              gex.e_num = 0xffffffff;
++              gex.ee_block = 0;
++              gex.ee_len = EXT_CACHE_MARK;
 +              ext_debug(tree, "cache gap(whole file):");
-+      } else if (block < ex->e_block) {
-+              gex.e_block = block;
-+              gex.e_num = ex->e_block - block;
++      } else if (block < ex->ee_block) {
++              gex.ee_block = block;
++              gex.ee_len = ex->ee_block - block;
 +              ext_debug(tree, "cache gap(before): %lu [%lu:%lu]",
 +                              (unsigned long) block,
-+                              (unsigned long) ex->e_block,
-+                              (unsigned long) ex->e_num);
-+      } else if (block >= ex->e_block + ex->e_num) {
-+              gex.e_block = ex->e_block + ex->e_num;
-+              gex.e_num = ext3_ext_next_allocated_block(path);
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len);
++      } else if (block >= ex->ee_block + ex->ee_len) {
++              gex.ee_block = ex->ee_block + ex->ee_len;
++              gex.ee_len = ext3_ext_next_allocated_block(path);
 +              ext_debug(tree, "cache gap(after): [%lu:%lu] %lu",
-+                              (unsigned long) ex->e_block,
-+                              (unsigned long) ex->e_num,
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len,
 +                              (unsigned long) block);
-+              EXT_ASSERT(gex.e_num > gex.e_block);
-+              gex.e_num = gex.e_num - gex.e_block;
++              EXT_ASSERT(gex.ee_len > gex.ee_block);
++              gex.ee_len = gex.ee_len - gex.ee_block;
 +      } else {
 +              BUG();
 +      }
 +
-+      ext_debug(tree, " -> %lu:%lu\n", (unsigned long) gex.e_block,
-+                      (unsigned long) gex.e_num);
-+      gex.e_start = 0xffffffff;
++      ext_debug(tree, " -> %lu:%lu\n", (unsigned long) gex.ee_block,
++                      (unsigned long) gex.ee_len);
++      gex.ee_start = EXT_CACHE_MARK;
 +      ext3_ext_put_in_cache(tree, &gex);
 +}
 +
@@ -1351,18 +1352,18 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              return 0;
 +
 +      /* has cache valid data? */
-+      if (cex->e_num == 0)
++      if (cex->ee_len == 0)
 +              return 0;
 +
-+      if (block >= cex->e_block && block < cex->e_block + cex->e_num) {
-+              ex->e_block = cex->e_block;
-+              ex->e_start = cex->e_start;
-+              ex->e_num = cex->e_num;
++      if (block >= cex->ee_block && block < cex->ee_block + cex->ee_len) {
++              ex->ee_block = cex->ee_block;
++              ex->ee_start = cex->ee_start;
++              ex->ee_len = cex->ee_len;
 +              ext_debug(tree, "%lu cached by %lu:%lu:%lu\n",
 +                              (unsigned long) block,
-+                              (unsigned long) ex->e_block,
-+                              (unsigned long) ex->e_num,
-+                              (unsigned long) ex->e_start);
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len,
++                              (unsigned long) ex->ee_start);
 +              return 1;
 +      }
 +
@@ -1383,17 +1384,17 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      
 +      /* free index block */
 +      path--;
-+      EXT_ASSERT(path->p_hdr->e_num);
++      EXT_ASSERT(path->p_hdr->eh_entries);
 +      if ((err = ext3_ext_get_access(handle, tree, path)))
 +              return err;
-+      path->p_hdr->e_num--;
++      path->p_hdr->eh_entries--;
 +      if ((err = ext3_ext_dirty(handle, tree, path)))
 +              return err;
 +      ext_debug(tree, "index is empty, remove it, free block %d\n",
-+                      path->p_idx->e_leaf);
-+      bh = sb_get_hash_table(tree->inode->i_sb, path->p_idx->e_leaf);
-+      ext3_forget(handle, 1, tree->inode, bh, path->p_idx->e_leaf);
-+      ext3_free_blocks(handle, tree->inode, path->p_idx->e_leaf, 1);
++                      path->p_idx->ei_leaf);
++      bh = sb_get_hash_table(tree->inode->i_sb, path->p_idx->ei_leaf);
++      ext3_forget(handle, 1, tree->inode, bh, path->p_idx->ei_leaf);
++      ext3_free_blocks(handle, tree->inode, path->p_idx->ei_leaf, 1);
 +      return err;
 +}
 +
@@ -1405,7 +1406,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 +      if (path) {
 +              /* probably there is space in leaf? */
-+              if (path[depth].p_hdr->e_num < path[depth].p_hdr->e_max)
++              if (path[depth].p_hdr->eh_entries < path[depth].p_hdr->eh_max)
 +                      return 1;
 +      }
 +      
@@ -1445,13 +1446,13 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      depth = EXT_DEPTH(tree);
 +      ex = path[depth].p_ext;
 +      EXT_ASSERT(ex);
-+      EXT_ASSERT(end < ex->e_block + ex->e_num - 1);
-+      EXT_ASSERT(ex->e_block < start);
++      EXT_ASSERT(end < ex->ee_block + ex->ee_len - 1);
++      EXT_ASSERT(ex->ee_block < start);
 +
 +      /* calculate tail extent */
-+      tex.e_block = end + 1;
-+      EXT_ASSERT(tex.e_block < ex->e_block + ex->e_num);
-+      tex.e_num = ex->e_block + ex->e_num - tex.e_block;
++      tex.ee_block = end + 1;
++      EXT_ASSERT(tex.ee_block < ex->ee_block + ex->ee_len);
++      tex.ee_len = ex->ee_block + ex->ee_len - tex.ee_block;
 +
 +      creds = ext3_ext_calc_credits_for_insert(tree, path);
 +      handle = ext3_ext_journal_restart(handle, creds);
@@ -1462,22 +1463,22 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      err = ext3_ext_get_access(handle, tree, path + depth);
 +      if (err)
 +              return err;
-+      ex->e_num = start - ex->e_block;
++      ex->ee_len = start - ex->ee_block;
 +      err = ext3_ext_dirty(handle, tree, path + depth);
 +      if (err)
 +              return err;
 +
 +      /* FIXME: some callback to free underlying resource
-+       * and correct e_start? */
++       * and correct ee_start? */
 +      ext_debug(tree, "split extent: head %u:%u, tail %u:%u\n",
-+                      ex->e_block, ex->e_num, tex.e_block, tex.e_num);
++                      ex->ee_block, ex->ee_len, tex.ee_block, tex.ee_len);
 +
-+      npath = ext3_ext_find_extent(tree, ex->e_block, NULL);
++      npath = ext3_ext_find_extent(tree, ex->ee_block, NULL);
 +      if (IS_ERR(npath))
 +              return PTR_ERR(npath);
 +      depth = EXT_DEPTH(tree);
-+      EXT_ASSERT(npath[depth].p_ext->e_block == ex->e_block);
-+      EXT_ASSERT(npath[depth].p_ext->e_num == ex->e_num);
++      EXT_ASSERT(npath[depth].p_ext->ee_block == ex->ee_block);
++      EXT_ASSERT(npath[depth].p_ext->ee_len == ex->ee_len);
 +
 +      err = ext3_ext_insert_extent(handle, tree, npath, &tex);
 +      ext3_ext_drop_refs(npath);
@@ -1503,18 +1504,18 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              path[depth].p_hdr = EXT_BLOCK_HDR(path[depth].p_bh);
 +      eh = path[depth].p_hdr;
 +      EXT_ASSERT(eh);
-+      EXT_ASSERT(eh->e_num <= eh->e_max);
-+      EXT_ASSERT(eh->e_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
 +      
 +      /* find where to start removing */
 +      le = ex = EXT_LAST_EXTENT(eh);
 +      while (ex != EXT_FIRST_EXTENT(eh)) {
-+              if (ex->e_block <= end)
++              if (ex->ee_block <= end)
 +                      break;
 +              ex--;
 +      }
 +
-+      if (start > ex->e_block && end < ex->e_block + ex->e_num - 1) {
++      if (start > ex->ee_block && end < ex->ee_block + ex->ee_len - 1) {
 +              /* removal of internal part of the extent requested
 +               * tail and head must be placed in different extent
 +               * so, we have to insert one more extent */
@@ -1524,34 +1525,34 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      
 +      lu = ex;
 +      while (ex >= EXT_FIRST_EXTENT(eh) &&
-+                      ex->e_block + ex->e_num > start) {
-+              ext_debug(tree, "remove ext %u:%u\n", ex->e_block, ex->e_num);
++                      ex->ee_block + ex->ee_len > start) {
++              ext_debug(tree, "remove ext %u:%u\n", ex->ee_block, ex->ee_len);
 +              path[depth].p_ext = ex;
 +      
-+              a = ex->e_block > start ? ex->e_block : start;
-+              b = ex->e_block + ex->e_num - 1 < end ?
-+                      ex->e_block + ex->e_num - 1 : end;
++              a = ex->ee_block > start ? ex->ee_block : start;
++              b = ex->ee_block + ex->ee_len - 1 < end ?
++                      ex->ee_block + ex->ee_len - 1 : end;
 +              
 +              ext_debug(tree, "  border %u:%u\n", a, b);
 +
-+              if (a != ex->e_block && b != ex->e_block + ex->e_num - 1) {
++              if (a != ex->ee_block && b != ex->ee_block + ex->ee_len - 1) {
 +                      block = 0;
 +                      num = 0;
 +                      BUG();
-+              } else if (a != ex->e_block) {
++              } else if (a != ex->ee_block) {
 +                      /* remove tail of the extent */
-+                      block = ex->e_block;
++                      block = ex->ee_block;
 +                      num = a - block;
-+              } else if (b != ex->e_block + ex->e_num - 1) {
++              } else if (b != ex->ee_block + ex->ee_len - 1) {
 +                      /* remove head of the extent */
 +                      block = a;
 +                      num = b - a;
 +              } else {
 +                      /* remove whole extent: excelent! */
-+                      block = ex->e_block; 
++                      block = ex->ee_block; 
 +                      num = 0;
-+                      EXT_ASSERT(a == ex->e_block &&
-+                                      b == ex->e_block + ex->e_num - 1);
++                      EXT_ASSERT(a == ex->ee_block &&
++                                      b == ex->ee_block + ex->ee_len - 1);
 +              }
 +
 +              if (ex == EXT_FIRST_EXTENT(eh))
@@ -1560,8 +1561,8 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              credits = 1;
 +              if (correct_index)
 +                      credits += (EXT_DEPTH(tree) * EXT3_ALLOC_NEEDED) + 1;
-+              if (tree->remove_extent_credits)
-+                      credits += tree->remove_extent_credits(tree, ex, a, b);
++              if (tree->ops->remove_extent_credits)
++                      credits+=tree->ops->remove_extent_credits(tree,ex,a,b);
 +              
 +              handle = ext3_ext_journal_restart(handle, credits);
 +              if (IS_ERR(handle)) {
@@ -1573,48 +1574,48 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              if (err)
 +                      goto out;
 +
-+              if (tree->remove_extent)
-+                      err = tree->remove_extent(tree, ex, a, b);
++              if (tree->ops->remove_extent)
++                      err = tree->ops->remove_extent(tree, ex, a, b);
 +              if (err)
 +                      goto out;
 +
 +              if (num == 0) {
 +                      /* this extent is removed entirely mark slot unused */
-+                      ex->e_start = 0;
-+                      eh->e_num--;
++                      ex->ee_start = 0;
++                      eh->eh_entries--;
 +                      fu = ex;
 +              }
 +
-+              ex->e_block = block;
-+              ex->e_num = num;
++              ex->ee_block = block;
++              ex->ee_len = num;
 +
 +              err = ext3_ext_dirty(handle, tree, path + depth);
 +              if (err)
 +                      goto out;
 +
 +              ext_debug(tree, "new extent: %u:%u:%u\n",
-+                              ex->e_block, ex->e_num, ex->e_start);
++                              ex->ee_block, ex->ee_len, ex->ee_start);
 +              ex--;
 +      }
 +
 +      if (fu) {
 +              /* reuse unused slots */
 +              while (lu < le) {
-+                      if (lu->e_start) {
++                      if (lu->ee_start) {
 +                              *fu = *lu;
-+                              lu->e_start = 0;
++                              lu->ee_start = 0;
 +                              fu++;
 +                      }
 +                      lu++;
 +              }
 +      }
 +
-+      if (correct_index && eh->e_num)
++      if (correct_index && eh->eh_entries)
 +              err = ext3_ext_correct_indexes(handle, tree, path);
 +
 +      /* if this leaf is free, then we should
 +       * remove it from index block above */
-+      if (err == 0 && eh->e_num == 0 && path[depth].p_bh != NULL)
++      if (err == 0 && eh->eh_entries == 0 && path[depth].p_bh != NULL)
 +              err = ext3_ext_rm_idx(handle, tree, path + depth);
 +
 +out:
@@ -1629,7 +1630,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      
 +      ix = EXT_LAST_INDEX(hdr);
 +      while (ix != EXT_FIRST_INDEX(hdr)) {
-+              if (ix->e_block <= block)
++              if (ix->ei_block <= block)
 +                      break;
 +              ix--;
 +      }
@@ -1651,7 +1652,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +       * if truncate on deeper level happened it it wasn't partial
 +       * so we have to consider current index for truncation
 +       */
-+      if (path->p_hdr->e_num == path->p_block)
++      if (path->p_hdr->eh_entries == path->p_block)
 +              return 0;
 +      return 1;
 +}
@@ -1705,16 +1706,16 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +                      path[i].p_hdr = EXT_BLOCK_HDR(path[i].p_bh);
 +              }
 +
-+              EXT_ASSERT(path[i].p_hdr->e_num <= path[i].p_hdr->e_max);
-+              EXT_ASSERT(path[i].p_hdr->e_magic == EXT3_EXT_MAGIC);
++              EXT_ASSERT(path[i].p_hdr->eh_entries <= path[i].p_hdr->eh_max);
++              EXT_ASSERT(path[i].p_hdr->eh_magic == EXT3_EXT_MAGIC);
 +              
 +              if (!path[i].p_idx) {
 +                      /* this level hasn't touched yet */
 +                      path[i].p_idx =
 +                              ext3_ext_last_covered(path[i].p_hdr, end);
-+                      path[i].p_block = path[i].p_hdr->e_num + 1;
++                      path[i].p_block = path[i].p_hdr->eh_entries + 1;
 +                      ext_debug(tree, "init index ptr: hdr 0x%p, num %d\n",
-+                                      path[i].p_hdr, path[i].p_hdr->e_num);
++                                      path[i].p_hdr, path[i].p_hdr->eh_entries);
 +              } else {
 +                      /* we've already was here, see at next index */
 +                      path[i].p_idx--;
@@ -1726,9 +1727,9 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              if (ext3_ext_more_to_rm(path + i)) {
 +                      /* go to the next level */
 +                      ext_debug(tree, "move to level %d (block %d)\n",
-+                                      i + 1, path[i].p_idx->e_leaf);
++                                      i + 1, path[i].p_idx->ei_leaf);
 +                      memset(path + i + 1, 0, sizeof(*path));
-+                      path[i+1].p_bh = sb_bread(sb, path[i].p_idx->e_leaf);
++                      path[i+1].p_bh = sb_bread(sb, path[i].p_idx->ei_leaf);
 +                      if (!path[i+1].p_bh) {
 +                              /* should we reset i_size? */
 +                              err = -EIO;
@@ -1736,14 +1737,14 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +                      }
 +                      /* put actual number of indexes to know is this
 +                       * number got changed at the next iteration */
-+                      path[i].p_block = path[i].p_hdr->e_num;
++                      path[i].p_block = path[i].p_hdr->eh_entries;
 +                      i++;
 +              } else {
 +                      /* we finish processing this index, go up */
-+                      if (path[i].p_hdr->e_num == 0 && i > 0) {
++                      if (path[i].p_hdr->eh_entries == 0 && i > 0) {
 +                              /* index is empty, remove it
 +                               * handle must be already prepared by the
-+                               * truncate_leaf() */
++                               * truncatei_leaf() */
 +                              err = ext3_ext_rm_idx(handle, tree, path + i);
 +                      }
 +                      /* root level have p_bh == NULL, brelse() eats this */
@@ -1754,14 +1755,15 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      }
 +
 +      /* TODO: flexible tree reduction should be here */
-+      if (path->p_hdr->e_num == 0) {
++      if (path->p_hdr->eh_entries == 0) {
 +              /*
 +               * truncate to zero freed all the tree
-+               * so, we need to correct e_depth
++               * so, we need to correct eh_depth
 +               */
 +              err = ext3_ext_get_access(handle, tree, path);
 +              if (err == 0) {
-+                      EXT_ROOT_HDR(tree)->e_depth = 0;
++                      EXT_ROOT_HDR(tree)->eh_depth = 0;
++                      EXT_ROOT_HDR(tree)->eh_max = ext3_ext_space_root(tree);
 +                      err = ext3_ext_dirty(handle, tree, path);
 +              }
 +      }
@@ -1820,7 +1822,8 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +static int ext3_ext_mergable(struct ext3_extent *ex1,
 +                              struct ext3_extent *ex2)
 +{
-+      if (ex1->e_start + ex1->e_num == ex2->e_start)
++      /* FIXME: support for large fs */
++      if (ex1->ee_start + ex1->ee_len == ex2->ee_start)
 +              return 1;
 +      return 0;
 +}
@@ -1833,7 +1836,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      int needed;
 +      
 +      /* at present, extent can't cross block group */;
-+      needed = 3; /* bitmap + group desc + sb */
++      needed = 4; /* bitmap + group desc + sb + inode */
 +
 +#ifdef CONFIG_QUOTA
 +      needed += 2 * EXT3_SINGLEDATA_TRANS_BLOCKS;
@@ -1853,11 +1856,11 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 +      if (IS_ERR(handle))
 +              return PTR_ERR(handle);
-+      if (from >= ex->e_block && to == ex->e_block + ex->e_num - 1) {
++      if (from >= ex->ee_block && to == ex->ee_block + ex->ee_len - 1) {
 +              /* tail removal */
 +              unsigned long num, start;
-+              num = ex->e_block + ex->e_num - from;
-+              start = ex->e_start + ex->e_num - num;
++              num = ex->ee_block + ex->ee_len - from;
++              start = ex->ee_start + ex->ee_len - num;
 +              ext_debug(tree, "free last %lu blocks starting %lu\n",
 +                              num, start);
 +              for (i = 0; i < num; i++) {
@@ -1865,19 +1868,19 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +                      ext3_forget(handle, 0, tree->inode, bh, start + i);
 +              }
 +              ext3_free_blocks(handle, tree->inode, start, num);
-+      } else if (from == ex->e_block && to <= ex->e_block + ex->e_num - 1) {
++      } else if (from == ex->ee_block && to <= ex->ee_block + ex->ee_len - 1) {
 +              printk("strange request: removal %lu-%lu from %u:%u\n",
-+                      from, to, ex->e_block, ex->e_num);
++                      from, to, ex->ee_block, ex->ee_len);
 +      } else {
 +              printk("strange request: removal(2) %lu-%lu from %u:%u\n",
-+                      from, to, ex->e_block, ex->e_num);
++                      from, to, ex->ee_block, ex->ee_len);
 +      }
 +      ext3_journal_stop(handle, tree->inode);
 +      return 0;
 +}
 +
-+static int ext3_ext_find_goal(struct inode *inode, struct ext3_ext_path *path,
-+                              unsigned long block)
++int ext3_ext_find_goal(struct inode *inode, struct ext3_ext_path *path,
++                      unsigned long block)
 +{
 +      struct ext3_inode_info *ei = EXT3_I(inode);
 +      unsigned long bg_start;
@@ -1890,7 +1893,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              
 +              /* try to predict block placement */
 +              if ((ex = path[depth].p_ext))
-+                      return ex->e_start + (block - ex->e_block);
++                      return ex->ee_start + (block - ex->ee_block);
 +
 +              /* it looks index is empty
 +               * try to find starting from index itself */
@@ -1915,138 +1918,46 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      
 +      EXT_ASSERT(path);
 +      EXT_ASSERT(ex);
-+      EXT_ASSERT(ex->e_start);
-+      EXT_ASSERT(ex->e_num);
++      EXT_ASSERT(ex->ee_start);
++      EXT_ASSERT(ex->ee_len);
 +      
 +      /* reuse block from the extent to order data/metadata */
-+      newblock = ex->e_start++;
-+      ex->e_num--;
-+      if (ex->e_num == 0) {
-+              ex->e_num = 1;
++      newblock = ex->ee_start++;
++      ex->ee_len--;
++      if (ex->ee_len == 0) {
++              ex->ee_len = 1;
 +              /* allocate new block for the extent */
-+              goal = ext3_ext_find_goal(inode, path, ex->e_block);
-+              ex->e_start = ext3_new_block(handle, inode, goal, 0, 0, err);
-+              if (ex->e_start == 0) {
++              goal = ext3_ext_find_goal(inode, path, ex->ee_block);
++              ex->ee_start = ext3_new_block(handle, inode, goal, 0, 0, err);
++              if (ex->ee_start == 0) {
 +                      /* error occured: restore old extent */
-+                      ex->e_start = newblock;
++                      ex->ee_start = newblock;
 +                      return 0;
 +              }
 +      }
 +      return newblock;
 +}
 +
-+static void ext3_init_tree_desc(struct ext3_extents_tree *tree,
++static struct ext3_extents_helpers ext3_blockmap_helpers = {
++      .get_write_access       = ext3_get_inode_write_access,
++      .mark_buffer_dirty      = ext3_mark_buffer_dirty,
++      .mergable               = ext3_ext_mergable,
++      .new_block              = ext3_new_block_cb,
++      .remove_extent          = ext3_remove_blocks,
++      .remove_extent_credits  = ext3_remove_blocks_credits,
++};
++
++void ext3_init_tree_desc(struct ext3_extents_tree *tree,
 +                              struct inode *inode)
 +{
 +      tree->inode = inode;
 +      tree->root = (void *) EXT3_I(inode)->i_data;
-+      tree->get_write_access = ext3_get_inode_write_access;
-+      tree->mark_buffer_dirty = ext3_mark_buffer_dirty;
-+      tree->mergable = ext3_ext_mergable;
-+      tree->new_block = ext3_new_block_cb;
-+      tree->remove_extent = ext3_remove_blocks;
-+      tree->remove_extent_credits = ext3_remove_blocks_credits;
 +      tree->buffer = (void *) inode;
 +      tree->buffer_len = sizeof(EXT3_I(inode)->i_data);
 +      tree->cex = (struct ext3_extent *) &EXT3_I(inode)->i_cached_extent;
++      tree->ops = &ext3_blockmap_helpers;
 +}
 +
-+#if EXT3_MULTIBLOCK_ALLOCATOR
-+static int
-+ext3_ext_new_extent_cb(struct ext3_extents_tree *tree,
-+                      struct ext3_ext_path *path,
-+                      struct ext3_extent *newex, int exist)
-+{
-+      struct inode *inode = tree->inode;
-+      struct buffer_head *bh;
-+      int count, err, goal;
-+      unsigned long pblock;
-+      unsigned long tgen;
-+      loff_t new_i_size;
-+      handle_t *handle;
-+      int i;
-+
-+      if (exist)
-+              return EXT_CONTINUE;
-+
-+      tgen = EXT_GENERATION(tree);
-+      count = ext3_ext_calc_credits_for_insert(tree, path);
-+      up_write(&EXT3_I(inode)->truncate_sem);
-+
-+      handle = ext3_journal_start(inode, count + EXT3_ALLOC_NEEDED + 1);
-+      if (IS_ERR(handle)) {
-+              down_write(&EXT3_I(inode)->truncate_sem);
-+              return PTR_ERR(handle);
-+      }
-+
-+      if (tgen != EXT_GENERATION(tree)) {
-+              /* the tree has changed. so path can be invalid at moment */
-+              ext3_journal_stop(handle, inode);
-+              down_write(&EXT3_I(inode)->truncate_sem);
-+              return EXT_REPEAT;
-+      }
-+
-+      down_write(&EXT3_I(inode)->truncate_sem);
-+      goal = ext3_ext_find_goal(inode, path, newex->e_block);
-+      count = newex->e_num;
-+      pblock = ext3_new_blocks(handle, inode, &count, goal, &err);
-+      if (!pblock)
-+              goto out;
-+      EXT_ASSERT(count <= newex->e_num);
-+
-+      /* insert new extent */
-+      newex->e_start = pblock;
-+      newex->e_num = count;
-+      err = ext3_ext_insert_extent(handle, tree, path, newex);
-+      if (err)
-+              goto out;
-+
-+      /* block have been allocated for data, so time to drop dirty
-+       * in correspondend buffer_heads to prevent corruptions */
-+      for (i = 0; i < newex->e_num; i++) {
-+              bh = sb_get_hash_table(inode->i_sb, newex->e_start + i);
-+              if (bh) {
-+                      mark_buffer_clean(bh);
-+                      wait_on_buffer(bh);
-+                      clear_bit(BH_Req, &bh->b_state);
-+                      __brelse(bh);
-+              }
-+      }
-+
-+      /* correct on-disk inode size */
-+      if (newex->e_num > 0) {
-+              new_i_size = (loff_t) newex->e_block + newex->e_num;
-+              new_i_size = new_i_size << inode->i_blkbits;
-+              if (new_i_size > EXT3_I(inode)->i_disksize) {
-+                      EXT3_I(inode)->i_disksize = new_i_size;
-+                      err = ext3_mark_inode_dirty(handle, inode);
-+              }
-+      }
-+
-+out:
-+      ext3_journal_stop(handle, inode);
-+      return err;
-+}
-+
-+
-+int ext3_ext_allocate_nblocks(struct inode *inode, unsigned long block,
-+                              unsigned long num)
-+{
-+      struct ext3_extents_tree tree;
-+      int err;
-+
-+      ext3_init_tree_desc(&tree, inode);
-+      ext_debug(&tree, "blocks %lu-%lu requested for inode %u\n",
-+                      block, block + num,(unsigned) inode->i_ino);
-+      down_write(&EXT3_I(inode)->truncate_sem);
-+      err = ext3_ext_walk_space(&tree, block, num, ext3_ext_new_extent_cb);
-+      ext3_ext_invalidate_cache(&tree);
-+      up_write(&EXT3_I(inode)->truncate_sem);
-+
-+      return err;
-+}
-+#endif
-+
 +int ext3_ext_get_block(handle_t *handle, struct inode *inode,
 +                      long iblock, struct buffer_head *bh_result, int create)
 +{
@@ -2064,13 +1975,17 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 +      /* check in cache */
 +      if (ext3_ext_in_cache(&tree, iblock, &newex)) {
-+              if (newex.e_start == 0xffffffff && !create) {
-+                      /* block isn't allocated yet and
-+                       * user don't want to allocate it */
-+                      goto out2;
-+              } else if (newex.e_start) {
++              if (newex.ee_start == EXT_CACHE_MARK) {
++                      /* this is cached gap */
++                      if (!create) {
++                              /* block isn't allocated yet and
++                               * user don't want to allocate it */
++                              goto out2;
++                      }
++                      /* we should allocate requested block */
++              } else if (newex.ee_start) {
 +                      /* block is already allocated */
-+                      newblock = iblock - newex.e_block + newex.e_start;
++                      newblock = iblock - newex.ee_block + newex.ee_start;
 +                      goto out;
 +              }
 +      }
@@ -2094,10 +2009,10 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 +      if ((ex = path[depth].p_ext)) {
 +              /* if found exent covers block, simple return it */
-+              if (iblock >= ex->e_block && iblock < ex->e_block + ex->e_num) {
-+                      newblock = iblock - ex->e_block + ex->e_start;
++              if (iblock >= ex->ee_block && iblock < ex->ee_block + ex->ee_len) {
++                      newblock = iblock - ex->ee_block + ex->ee_start;
 +                      ext_debug(&tree, "%d fit into %d:%d -> %d\n",
-+                                      (int) iblock, ex->e_block, ex->e_num,
++                                      (int) iblock, ex->ee_block, ex->ee_len,
 +                                      newblock);
 +                      ext3_ext_put_in_cache(&tree, ex);
 +                      goto out;
@@ -2123,9 +2038,9 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +                      goal, newblock);
 +
 +      /* try to insert new extent into found leaf and return */
-+      newex.e_block = iblock;
-+      newex.e_start = newblock;
-+      newex.e_num = 1;
++      newex.ee_block = iblock;
++      newex.ee_start = newblock;
++      newex.ee_len = 1;
 +      err = ext3_ext_insert_extent(handle, &tree, path, &newex);
 +      if (err)
 +              goto out2;
@@ -2134,7 +2049,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              EXT3_I(inode)->i_disksize = inode->i_size;
 +
 +      /* previous routine could use block we allocated */
-+      newblock = newex.e_start;
++      newblock = newex.ee_start;
 +      set_bit(BH_New, &bh_result->b_state);
 +
 +      ext3_ext_put_in_cache(&tree, &newex);
@@ -2153,7 +2068,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      return err;     
 +}
 +
-+void ext3_ext_truncate(struct inode * inode)
++void ext3_ext_truncate(struct inode * inode, struct page *page)
 +{
 +      struct address_space *mapping = inode->i_mapping;
 +      struct super_block *sb = inode->i_sb;
@@ -2170,9 +2085,11 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +      err = ext3_writepage_trans_blocks(inode) + 3;
 +      handle = ext3_journal_start(inode, err);
 +      if (IS_ERR(handle))
-+              return;
++              goto out_unlock;
 +
-+      ext3_block_truncate_page(handle, mapping, inode->i_size);
++      if (page)
++              ext3_block_truncate_page(handle, mapping, inode->i_size, page, 
++                                      inode->i_sb->s_blocksize);
 +
 +      down_write(&EXT3_I(inode)->truncate_sem);
 +      ext3_ext_invalidate_cache(&tree);
@@ -2191,7 +2108,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 +      last_block = (inode->i_size + sb->s_blocksize - 1)
 +                      >> EXT3_BLOCK_SIZE_BITS(sb);
-+      err = ext3_ext_remove_space(&tree, last_block, 0xffffffff);
++      err = ext3_ext_remove_space(&tree, last_block, EXT_MAX_BLOCK);
 +      
 +      /* In a multi-transaction truncate, we only make the final
 +       * transaction synchronous */
@@ -2211,6 +2128,13 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 +      up_write(&EXT3_I(inode)->truncate_sem);
 +      ext3_journal_stop(handle, inode);
++      return;
++      
++out_unlock:
++      if (page) {
++              UnlockPage(page);
++              page_cache_release(page);
++      }
 +}
 +
 +/*
@@ -2311,7 +2235,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              buf.err = 0;
 +              tree.private = &buf;
 +              down_write(&EXT3_I(inode)->truncate_sem);
-+              err = ext3_ext_walk_space(&tree, buf.start, 0xffffffff,
++              err = ext3_ext_walk_space(&tree, buf.start, EXT_MAX_BLOCK,
 +                                              ext3_ext_store_extent_cb);
 +              up_write(&EXT3_I(inode)->truncate_sem);
 +              if (err == 0)
@@ -2326,7 +2250,7 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +              buf.extents_num = 0;
 +              buf.leaf_num = 0;
 +              tree.private = &buf;
-+              err = ext3_ext_walk_space(&tree, 0, 0xffffffff,
++              err = ext3_ext_walk_space(&tree, 0, EXT_MAX_BLOCK,
 +                                              ext3_ext_collect_stats_cb);
 +              up_write(&EXT3_I(inode)->truncate_sem);
 +              if (!err)
@@ -2350,84 +2274,93 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +EXPORT_SYMBOL(ext3_ext_find_goal);
 +EXPORT_SYMBOL(ext3_ext_calc_credits_for_insert);
 +
-Index: linux-2.4.24/fs/ext3/ialloc.c
+Index: linux-2.4.21-15.EL/fs/ext3/ialloc.c
 ===================================================================
---- linux-2.4.24.orig/fs/ext3/ialloc.c 2004-01-14 02:58:45.000000000 +0300
-+++ linux-2.4.24/fs/ext3/ialloc.c      2004-01-26 23:17:19.000000000 +0300
-@@ -592,11 +592,13 @@
-               iloc.bh = NULL;
-               goto fail;
-       }
-+      if (test_opt(sb, EXTENTS)) {
-+              EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
-+              ext3_extents_initialize_blockmap(handle, inode);
-+      }
-       err = ext3_mark_iloc_dirty(handle, inode, &iloc);
-       if (err) goto fail;
+--- linux-2.4.21-15.EL.orig/fs/ext3/ialloc.c   2004-09-12 20:22:15.000000000 +0400
++++ linux-2.4.21-15.EL/fs/ext3/ialloc.c        2004-09-12 20:24:20.000000000 +0400
+@@ -596,9 +596,21 @@
+               iloc.bh = NULL;
+               goto fail;
+       }
+-      err = ext3_mark_iloc_dirty(handle, inode, &iloc);
+-      if (err) goto fail;
   
--
--      
-       unlock_super (sb);
-       if(DQUOT_ALLOC_INODE(inode)) {
-               DQUOT_DROP(inode);
-Index: linux-2.4.24/fs/ext3/inode.c
++      if (test_opt(sb, EXTENTS)) {
++              EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
++              ext3_extents_initialize_blockmap(handle, inode);
++              if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_EXTENTS)) {
++                      err = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
++                      if (err) goto fail;
++                      EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_EXTENTS);
++                      BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "call ext3_journal_dirty_metadata");
++                      err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
++              }
++      }
++  
++      err = ext3_mark_iloc_dirty(handle, inode, &iloc);
++      if (err) goto fail;
+ #ifdef CONFIG_EXT3_FS_XATTR
+Index: linux-2.4.21-15.EL/fs/ext3/inode.c
 ===================================================================
---- linux-2.4.24.orig/fs/ext3/inode.c  2004-01-14 02:58:45.000000000 +0300
-+++ linux-2.4.24/fs/ext3/inode.c       2004-01-26 23:17:19.000000000 +0300
-@@ -848,6 +848,15 @@
+--- linux-2.4.21-15.EL.orig/fs/ext3/inode.c    2004-09-12 20:22:29.000000000 +0400
++++ linux-2.4.21-15.EL/fs/ext3/inode.c 2004-09-12 20:22:35.000000000 +0400
+@@ -859,6 +859,16 @@
        goto reread;
  }
  
 +static inline int
 +ext3_get_block_wrap(handle_t *handle, struct inode *inode, long block,
-+              struct buffer_head *bh, int create)
++              struct buffer_head *bh, int create, int extend_disksize)
 +{
 +      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
 +              return ext3_ext_get_block(handle, inode, block, bh, create);
-+      return ext3_get_block_handle(handle, inode, block, bh, create);
++      return ext3_get_block_handle(handle, inode, block, bh, create,
++                                      extend_disksize);
 +}
 +
  /*
   * The BKL is not held on entry here.
   */
-@@ -861,7 +870,7 @@
+@@ -872,7 +882,7 @@
                handle = ext3_journal_current_handle();
                J_ASSERT(handle != 0);
        }
--      ret = ext3_get_block_handle(handle, inode, iblock, bh_result, create);
-+      ret = ext3_get_block_wrap(handle, inode, iblock, bh_result, create);
+-      ret = ext3_get_block_handle(handle, inode, iblock,
++      ret = ext3_get_block_wrap(handle, inode, iblock,
+                               bh_result, create, 1);
        return ret;
  }
-@@ -879,7 +888,7 @@
+@@ -921,7 +931,7 @@
        dummy.b_state = 0;
        dummy.b_blocknr = -1000;
        buffer_trace_init(&dummy.b_history);
--      *errp = ext3_get_block_handle(handle, inode, block, &dummy, create);
-+      *errp = ext3_get_block_wrap(handle, inode, block, &dummy, create);
+-      *errp = ext3_get_block_handle(handle, inode, block, &dummy, create, 1);
++      *errp = ext3_get_block_wrap(handle, inode, block, &dummy, create, 1);
        if (!*errp && buffer_mapped(&dummy)) {
                struct buffer_head *bh;
                bh = sb_getblk(inode->i_sb, dummy.b_blocknr);
-@@ -1403,7 +1412,7 @@
+@@ -1564,7 +1574,7 @@
   * This required during truncate. We need to physically zero the tail end
   * of that block so it doesn't yield old data if the file is later grown.
   */
 -static int ext3_block_truncate_page(handle_t *handle,
 +int ext3_block_truncate_page(handle_t *handle,
-               struct address_space *mapping, loff_t from)
+                                   struct address_space *mapping, loff_t from,
+                                   struct page *page, unsigned blocksize)
  {
-       unsigned long index = from >> PAGE_CACHE_SHIFT;
-@@ -1888,6 +1897,9 @@
-       ext3_discard_prealloc(inode);
-+      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
-+              return ext3_ext_truncate(inode);
+@@ -2049,6 +2059,9 @@
+               (inode->i_mapping, inode->i_size, blocksize);
+       if (IS_ERR(page))
+               return;
 +
++      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
++              return ext3_ext_truncate(inode, page);
+       
        handle = start_transaction(inode);
        if (IS_ERR(handle))
-               return;         /* AKPM: return what? */
-@@ -2536,6 +2548,9 @@
+@@ -2842,6 +2855,9 @@
        int indirects = (EXT3_NDIR_BLOCKS % bpp) ? 5 : 3;
        int ret;
        
@@ -2437,44 +2370,47 @@ Index: linux-2.4.24/fs/ext3/inode.c
        if (ext3_should_journal_data(inode))
                ret = 3 * (bpp + indirects) + 2;
        else
-@@ -2972,7 +2987,7 @@
+@@ -3166,7 +3182,7 @@
  
        /* alloc blocks one by one */
        for (i = 0; i < nblocks; i++) {
 -              ret = ext3_get_block_handle(handle, inode, blocks[i],
 +              ret = ext3_get_block_wrap(handle, inode, blocks[i],
-                                               &bh_tmp, 1);
+                                               &bh_tmp, 1, 1);
                if (ret)
                        break;
-@@ -3048,7 +3063,7 @@
+@@ -3242,7 +3258,7 @@
                  if (blocks[i] != 0)
                          continue;
  
--                rc = ext3_get_block_handle(handle, inode, iblock, &bh, 1);
-+                rc = ext3_get_block_wrap(handle, inode, iblock, &bh, 1);
+-                rc = ext3_get_block_handle(handle, inode, iblock, &bh, 1, 1);
++                rc = ext3_get_block_wrap(handle, inode, iblock, &bh, 1, 1);
                  if (rc) {
                          printk(KERN_INFO "ext3_map_inode_page: error %d "
                                 "allocating block %ld\n", rc, iblock);
-Index: linux-2.4.24/fs/ext3/Makefile
+Index: linux-2.4.21-15.EL/fs/ext3/Makefile
 ===================================================================
---- linux-2.4.24.orig/fs/ext3/Makefile 2004-01-14 02:58:45.000000000 +0300
-+++ linux-2.4.24/fs/ext3/Makefile      2004-02-05 18:44:25.000000000 +0300
-@@ -13,7 +13,9 @@
+--- linux-2.4.21-15.EL.orig/fs/ext3/Makefile   2004-09-12 20:22:01.000000000 +0400
++++ linux-2.4.21-15.EL/fs/ext3/Makefile        2004-09-12 20:22:35.000000000 +0400
+@@ -9,10 +9,11 @@
+ O_TARGET := ext3.o
+-export-objs := ext3-exports.o
++export-objs := ext3-exports.o extents.o
  
  obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
-               ioctl.o namei.o super.o symlink.o hash.o ext3-exports.o \
--              xattr_trusted.o
-+              xattr_trusted.o extents.o
-+export-objs += extents.o
-+
+-              ioctl.o namei.o super.o symlink.o hash.o ext3-exports.o
++              ioctl.o namei.o super.o symlink.o hash.o ext3-exports.o \
++              extents.o
  obj-m    := $(O_TARGET)
  
  export-objs += xattr.o
-Index: linux-2.4.24/fs/ext3/super.c
+Index: linux-2.4.21-15.EL/fs/ext3/super.c
 ===================================================================
---- linux-2.4.24.orig/fs/ext3/super.c  2004-01-14 02:58:45.000000000 +0300
-+++ linux-2.4.24/fs/ext3/super.c       2004-01-26 23:17:19.000000000 +0300
-@@ -530,6 +530,7 @@
+--- linux-2.4.21-15.EL.orig/fs/ext3/super.c    2004-09-12 20:22:15.000000000 +0400
++++ linux-2.4.21-15.EL/fs/ext3/super.c 2004-09-12 20:22:35.000000000 +0400
+@@ -648,6 +648,7 @@
        int i;
  
        J_ASSERT(sbi->s_delete_inodes == 0);
@@ -2482,7 +2418,7 @@ Index: linux-2.4.24/fs/ext3/super.c
        ext3_xattr_put_super(sb);
        journal_destroy(sbi->s_journal);
        if (!(sb->s_flags & MS_RDONLY)) {
-@@ -702,6 +703,10 @@
+@@ -851,6 +852,10 @@
                                return 0;
                        }
                }
@@ -2493,7 +2429,7 @@ Index: linux-2.4.24/fs/ext3/super.c
                else if (!strcmp (this_char, "grpid") ||
                         !strcmp (this_char, "bsdgroups"))
                        set_opt (*mount_options, GRPID);
-@@ -1392,6 +1397,8 @@
+@@ -1546,6 +1551,8 @@
                test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered":
                "writeback");
  
@@ -2502,11 +2438,11 @@ Index: linux-2.4.24/fs/ext3/super.c
        return sb;
  
  failed_mount3:
-Index: linux-2.4.24/fs/ext3/ioctl.c
+Index: linux-2.4.21-15.EL/fs/ext3/ioctl.c
 ===================================================================
---- linux-2.4.24.orig/fs/ext3/ioctl.c  2004-01-14 02:58:42.000000000 +0300
-+++ linux-2.4.24/fs/ext3/ioctl.c       2004-01-26 23:17:19.000000000 +0300
-@@ -174,6 +174,10 @@
+--- linux-2.4.21-15.EL.orig/fs/ext3/ioctl.c    2004-09-12 20:21:53.000000000 +0400
++++ linux-2.4.21-15.EL/fs/ext3/ioctl.c 2004-09-12 20:22:35.000000000 +0400
+@@ -173,6 +173,10 @@
                        return ret;
                }
  #endif
@@ -2517,11 +2453,11 @@ Index: linux-2.4.24/fs/ext3/ioctl.c
        default:
                return -ENOTTY;
        }
-Index: linux-2.4.24/include/linux/ext3_fs.h
+Index: linux-2.4.21-15.EL/include/linux/ext3_fs.h
 ===================================================================
---- linux-2.4.24.orig/include/linux/ext3_fs.h  2004-01-14 02:58:45.000000000 +0300
-+++ linux-2.4.24/include/linux/ext3_fs.h       2004-01-30 00:09:37.000000000 +0300
-@@ -184,6 +184,7 @@
+--- linux-2.4.21-15.EL.orig/include/linux/ext3_fs.h    2004-09-12 20:22:15.000000000 +0400
++++ linux-2.4.21-15.EL/include/linux/ext3_fs.h 2004-09-12 20:23:38.000000000 +0400
+@@ -188,6 +188,7 @@
  #define EXT3_IMAGIC_FL                        0x00002000 /* AFS directory */
  #define EXT3_JOURNAL_DATA_FL          0x00004000 /* file data should be journaled */
  #define EXT3_RESERVED_FL              0x80000000 /* reserved for ext3 lib */
@@ -2529,7 +2465,7 @@ Index: linux-2.4.24/include/linux/ext3_fs.h
  
  #define EXT3_FL_USER_VISIBLE          0x00005FFF /* User visible flags */
  #define EXT3_FL_USER_MODIFIABLE               0x000000FF /* User modifiable flags */
-@@ -208,6 +209,9 @@
+@@ -212,6 +213,9 @@
  #ifdef CONFIG_JBD_DEBUG
  #define EXT3_IOC_WAIT_FOR_READONLY    _IOR('f', 99, long)
  #endif
@@ -2539,24 +2475,39 @@ Index: linux-2.4.24/include/linux/ext3_fs.h
  
  /*
   * Structure of an inode on the disk
-@@ -327,6 +331,8 @@
- #define EXT3_MOUNT_IOPEN              0x8000  /* Allow access via iopen */
- #define EXT3_MOUNT_IOPEN_NOPRIV               0x10000 /* Make iopen world-readable */
+@@ -332,6 +336,8 @@
  #define EXT3_MOUNT_ASYNCDEL           0x20000 /* Delayed deletion */
+ #define EXT3_MOUNT_IOPEN              0x40000 /* Allow access via iopen */
+ #define EXT3_MOUNT_IOPEN_NOPRIV               0x80000 /* Make iopen world-readable */
 +#define EXT3_MOUNT_EXTENTS            0x100000/* Extents support */
 +#define EXT3_MOUNT_EXTDEBUG           0x200000/* Extents debug */
  
  /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
  #ifndef _LINUX_EXT2_FS_H
-@@ -688,6 +694,7 @@
+@@ -504,10 +510,12 @@
+ #define EXT3_FEATURE_INCOMPAT_FILETYPE                0x0002
+ #define EXT3_FEATURE_INCOMPAT_RECOVER         0x0004 /* Needs recovery */
+ #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008 /* Journal device */
++#define EXT3_FEATURE_INCOMPAT_EXTENTS         0x0040 /* extents support */
+ #define EXT3_FEATURE_COMPAT_SUPP      EXT2_FEATURE_COMPAT_EXT_ATTR
+ #define EXT3_FEATURE_INCOMPAT_SUPP    (EXT3_FEATURE_INCOMPAT_FILETYPE| \
+-                                       EXT3_FEATURE_INCOMPAT_RECOVER)
++                                       EXT3_FEATURE_INCOMPAT_RECOVER| \
++                                       EXT3_FEATURE_INCOMPAT_EXTENTS)
+ #define EXT3_FEATURE_RO_COMPAT_SUPP   (EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+                                        EXT3_FEATURE_RO_COMPAT_LARGE_FILE| \
+                                        EXT3_FEATURE_RO_COMPAT_BTREE_DIR)
+@@ -689,6 +697,8 @@
  extern unsigned long ext3_count_free (struct buffer_head *, unsigned);
  
  /* inode.c */
-+extern int ext3_block_truncate_page(handle_t *, struct address_space *, loff_t);
++int ext3_block_truncate_page(handle_t *, struct address_space *, loff_t,
++                                  struct page *, unsigned);
  extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
  extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
  extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
-@@ -769,6 +776,14 @@
+@@ -770,6 +780,14 @@
  extern struct inode_operations ext3_symlink_inode_operations;
  extern struct inode_operations ext3_fast_symlink_inode_operations;
  
@@ -2564,20 +2515,21 @@ Index: linux-2.4.24/include/linux/ext3_fs.h
 +extern int ext3_ext_writepage_trans_blocks(struct inode *, int);
 +extern int ext3_ext_get_block(handle_t *, struct inode *, long,
 +                              struct buffer_head *, int);
-+extern void ext3_ext_truncate(struct inode *);
++extern void ext3_ext_truncate(struct inode *, struct page *);
 +extern void ext3_ext_init(struct super_block *);
 +extern void ext3_ext_release(struct super_block *);
 +extern void ext3_extents_initialize_blockmap(handle_t *, struct inode *);
  
  #endif        /* __KERNEL__ */
  
-Index: linux-2.4.24/include/linux/ext3_extents.h
+Index: linux-2.4.21-15.EL/include/linux/ext3_extents.h
 ===================================================================
---- linux-2.4.24.orig/include/linux/ext3_extents.h     2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.24/include/linux/ext3_extents.h  2004-02-05 20:31:08.000000000 +0300
-@@ -0,0 +1,216 @@
+--- linux-2.4.21-15.EL.orig/include/linux/ext3_extents.h       2003-01-30 13:24:37.000000000 +0300
++++ linux-2.4.21-15.EL/include/linux/ext3_extents.h    2004-09-12 20:22:35.000000000 +0400
+@@ -0,0 +1,237 @@
 +/*
-+ * Copyright (C) 2003 Alex Tomas <alex@clusterfs.com>
++ * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
@@ -2646,9 +2598,10 @@ Index: linux-2.4.24/include/linux/ext3_extents.h
 + * it's used at the bottom of the tree
 + */
 +struct ext3_extent {
-+      __u32   e_block;        /* first logical block extent covers */
-+      __u32   e_start;        /* first physical block extents lives */
-+      __u32   e_num;          /* number of blocks covered by extent */
++      __u32   ee_block;       /* first logical block extent covers */
++      __u16   ee_len;         /* number of blocks covered by extent */
++      __u16   ee_start_hi;    /* high 16 bits of physical block */
++      __u32   ee_start;       /* low 32 bigs of physical block */
 +};
 +
 +/*
@@ -2656,23 +2609,25 @@ Index: linux-2.4.24/include/linux/ext3_extents.h
 + * it's used at all the levels, but the bottom
 + */
 +struct ext3_extent_idx {
-+      __u32   e_block;        /* index covers logical blocks from 'block' */
-+      __u32   e_leaf;         /* pointer to the physical block of the next *
++      __u32   ei_block;       /* index covers logical blocks from 'block' */
++      __u32   ei_leaf;        /* pointer to the physical block of the next *
 +                               * level. leaf or next index could bet here */
++      __u16   ei_leaf_hi;     /* high 16 bits of physical block */
++      __u16   ei_unused;
 +};
 +
 +/*
 + * each block (leaves and indexes), even inode-stored has header
 + */
 +struct ext3_extent_header {   
-+      __u16   e_magic;        /* probably will support different formats */   
-+      __u16   e_num;          /* number of valid entries */
-+      __u16   e_max;          /* capacity of store in entries */
-+      __u16   e_depth;        /* has tree real underlaying blocks? */
-+      __u32   e_generation;   /* generation of the tree */
++      __u16   eh_magic;       /* probably will support different formats */   
++      __u16   eh_entries;     /* number of valid entries */
++      __u16   eh_max;         /* capacity of store in entries */
++      __u16   eh_depth;       /* has tree real underlaying blocks? */
++      __u32   eh_generation;  /* generation of the tree */
 +};
 +
-+#define EXT3_EXT_MAGIC                0xf301
++#define EXT3_EXT_MAGIC                0xf30a
 +
 +/*
 + * array of ext3_ext_path contains path to some extent
@@ -2692,11 +2647,11 @@ Index: linux-2.4.24/include/linux/ext3_extents.h
 + * structure for external API
 + */
 +
-+
 +/*
 + * ext3_extents_tree is used to pass initial information
 + * to top-level extents API
 + */
++struct ext3_extents_helpers;
 +struct ext3_extents_tree {
 +      struct inode *inode;    /* inode which tree belongs to */
 +      void *root;             /* ptr to data top of tree resides at */
@@ -2704,6 +2659,10 @@ Index: linux-2.4.24/include/linux/ext3_extents.h
 +      int buffer_len;
 +      void *private;
 +      struct ext3_extent *cex;/* last found extent */
++      struct ext3_extents_helpers *ops;
++};
++
++struct ext3_extents_helpers {
 +      int (*get_write_access)(handle_t *h, void *buffer);
 +      int (*mark_buffer_dirty)(handle_t *h, void *buffer);
 +      int (*mergable)(struct ext3_extent *ex1, struct ext3_extent *ex2);
@@ -2733,6 +2692,10 @@ Index: linux-2.4.24/include/linux/ext3_extents.h
 +#define EXT_REPEAT    2
 +
 +
++#define EXT_MAX_BLOCK 0xffffffff
++#define EXT_CACHE_MARK        0xffff
++
++
 +#define EXT_FIRST_EXTENT(__hdr__) \
 +      ((struct ext3_extent *) (((char *) (__hdr__)) +         \
 +                               sizeof(struct ext3_extent_header)))
@@ -2740,24 +2703,24 @@ Index: linux-2.4.24/include/linux/ext3_extents.h
 +      ((struct ext3_extent_idx *) (((char *) (__hdr__)) +     \
 +                                   sizeof(struct ext3_extent_header)))
 +#define EXT_HAS_FREE_INDEX(__path__) \
-+      ((__path__)->p_hdr->e_num < (__path__)->p_hdr->e_max)
++      ((__path__)->p_hdr->eh_entries < (__path__)->p_hdr->eh_max)
 +#define EXT_LAST_EXTENT(__hdr__) \
-+      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->e_num - 1)
++      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_entries - 1)
 +#define EXT_LAST_INDEX(__hdr__) \
-+      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->e_num - 1)
++      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_entries - 1)
 +#define EXT_MAX_EXTENT(__hdr__) \
-+      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->e_max - 1)
++      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_max - 1)
 +#define EXT_MAX_INDEX(__hdr__) \
-+      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->e_max - 1)
++      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_max - 1)
 +
 +#define EXT_ROOT_HDR(tree) \
 +      ((struct ext3_extent_header *) (tree)->root)
 +#define EXT_BLOCK_HDR(bh) \
 +      ((struct ext3_extent_header *) (bh)->b_data)
 +#define EXT_DEPTH(_t_)        \
-+      (((struct ext3_extent_header *)((_t_)->root))->e_depth)
++      (((struct ext3_extent_header *)((_t_)->root))->eh_depth)
 +#define EXT_GENERATION(_t_)   \
-+      (((struct ext3_extent_header *)((_t_)->root))->e_generation)
++      (((struct ext3_extent_header *)((_t_)->root))->eh_generation)
 +
 +
 +#define EXT_ASSERT(__x__) if (!(__x__)) BUG();
@@ -2783,6 +2746,7 @@ Index: linux-2.4.24/include/linux/ext3_extents.h
 +      int leaf_num;
 +};
 +
++void ext3_init_tree_desc(struct ext3_extents_tree *, struct inode *);
 +extern int ext3_extent_tree_init(handle_t *, struct ext3_extents_tree *);
 +extern int ext3_ext_calc_credits_for_insert(struct ext3_extents_tree *, struct ext3_ext_path *);
 +extern int ext3_ext_insert_extent(handle_t *, struct ext3_extents_tree *, struct ext3_ext_path *, struct ext3_extent *);
@@ -2790,13 +2754,21 @@ Index: linux-2.4.24/include/linux/ext3_extents.h
 +extern int ext3_ext_remove_space(struct ext3_extents_tree *, unsigned long, unsigned long);
 +extern struct ext3_ext_path * ext3_ext_find_extent(struct ext3_extents_tree *, int, struct ext3_ext_path *);
 +
++static inline void
++ext3_ext_invalidate_cache(struct ext3_extents_tree *tree)
++{
++      if (tree->cex)
++              tree->cex->ee_len = 0;
++}
++
++
 +#endif /* _LINUX_EXT3_EXTENTS */
 +
-Index: linux-2.4.24/include/linux/ext3_fs_i.h
+Index: linux-2.4.21-15.EL/include/linux/ext3_fs_i.h
 ===================================================================
---- linux-2.4.24.orig/include/linux/ext3_fs_i.h        2004-01-24 19:30:22.000000000 +0300
-+++ linux-2.4.24/include/linux/ext3_fs_i.h     2004-01-26 23:17:19.000000000 +0300
-@@ -76,6 +76,8 @@
+--- linux-2.4.21-15.EL.orig/include/linux/ext3_fs_i.h  2004-09-12 20:22:15.000000000 +0400
++++ linux-2.4.21-15.EL/include/linux/ext3_fs_i.h       2004-09-12 20:22:35.000000000 +0400
+@@ -90,6 +90,8 @@
         * by other means, so we have truncate_sem.
         */
        struct rw_semaphore truncate_sem;
index e09ea96..20355a5 100644 (file)
@@ -1,10 +1,11 @@
 Index: linux-2.4.21-suse2/fs/ext3/extents.c
 ===================================================================
 --- linux-2.4.21-suse2.orig/fs/ext3/extents.c  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.21-suse2/fs/ext3/extents.c       2004-02-06 10:19:27.000000000 +0300
-@@ -0,0 +1,2348 @@
++++ linux-2.4.21-suse2/fs/ext3/extents.c       2004-09-12 19:52:27.000000000 +0400
+@@ -0,0 +1,2262 @@
 +/*
-+ * Copyright (C) 2003 Alex Tomas <alex@clusterfs.com>
++ * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
@@ -38,13 +39,13 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +#include <linux/time.h>
 +#include <linux/ext3_jbd.h>
 +#include <linux/jbd.h>
++#include <linux/locks.h>
 +#include <linux/smp_lock.h>
 +#include <linux/highuid.h>
 +#include <linux/pagemap.h>
 +#include <linux/quotaops.h>
 +#include <linux/string.h>
 +#include <linux/slab.h>
-+#include <linux/locks.h>
 +#include <linux/ext3_extents.h>
 +#include <asm/uaccess.h>
 +
@@ -64,8 +65,8 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +static int inline
 +ext3_ext_get_access_for_root(handle_t *h, struct ext3_extents_tree *tree)
 +{
-+      if (tree->get_write_access)
-+              return tree->get_write_access(h,tree->buffer);
++      if (tree->ops->get_write_access)
++              return tree->ops->get_write_access(h,tree->buffer);
 +      else
 +              return 0;
 +}
@@ -73,8 +74,8 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +static int inline
 +ext3_ext_mark_root_dirty(handle_t *h, struct ext3_extents_tree *tree)
 +{
-+      if (tree->mark_buffer_dirty)
-+              return tree->mark_buffer_dirty(h,tree->buffer);
++      if (tree->ops->mark_buffer_dirty)
++              return tree->ops->mark_buffer_dirty(h,tree->buffer);
 +      else
 +              return 0;
 +}
@@ -129,8 +130,8 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      struct inode *inode;
 +
 +      EXT_ASSERT(tree);
-+      if (tree->new_block)
-+              return tree->new_block(handle, tree, path, ex, err);
++      if (tree->ops->new_block)
++              return tree->ops->new_block(handle, tree, path, ex, err);
 +
 +      inode = tree->inode;
 +      depth = EXT_DEPTH(tree);
@@ -157,7 +158,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +{
 +      struct ext3_extent_header *neh;
 +      neh = EXT_ROOT_HDR(tree);
-+      neh->e_generation++;
++      neh->eh_generation++;
 +}
 +
 +static inline int ext3_ext_space_block(struct ext3_extents_tree *tree)
@@ -220,13 +221,13 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      ext_debug(tree, "path:");
 +      for (k = 0; k <= l; k++, path++) {
 +              if (path->p_idx) {
-+                      ext_debug(tree, "  %d->%d", path->p_idx->e_block,
-+                                      path->p_idx->e_leaf);
++                      ext_debug(tree, "  %d->%d", path->p_idx->ei_block,
++                                      path->p_idx->ei_leaf);
 +              } else if (path->p_ext) {
 +                      ext_debug(tree, "  %d:%d:%d",
-+                                      path->p_ext->e_block,
-+                                      path->p_ext->e_num,
-+                                      path->p_ext->e_start);
++                                      path->p_ext->ee_block,
++                                      path->p_ext->ee_len,
++                                      path->p_ext->ee_start);
 +              } else
 +                      ext_debug(tree, "  []");
 +      }
@@ -249,9 +250,9 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      eh = path[depth].p_hdr;
 +      ex = EXT_FIRST_EXTENT(eh);
 +
-+      for (i = 0; i < eh->e_num; i++, ex++) {
++      for (i = 0; i < eh->eh_entries; i++, ex++) {
 +              ext_debug(tree, "%d:%d:%d ",
-+                              ex->e_block, ex->e_num, ex->e_start);
++                              ex->ee_block, ex->ee_len, ex->ee_start);
 +      }
 +      ext_debug(tree, "\n");
 +#endif
@@ -280,18 +281,18 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      struct ext3_extent_idx *ix;
 +      int l = 0, k, r;
 +
-+      EXT_ASSERT(eh->e_magic == EXT3_EXT_MAGIC);
-+      EXT_ASSERT(eh->e_num <= eh->e_max);
-+      EXT_ASSERT(eh->e_num > 0);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++      EXT_ASSERT(eh->eh_entries > 0);
 +
 +      ext_debug(tree, "binsearch for %d(idx):  ", block);
 +
 +      path->p_idx = ix = EXT_FIRST_INDEX(eh);
 +
-+      r = k = eh->e_num;
++      r = k = eh->eh_entries;
 +      while (k > 1) {
 +              k = (r - l) / 2;
-+              if (block < ix[l + k].e_block)
++              if (block < ix[l + k].ei_block)
 +                      r -= k;
 +              else
 +                      l += k;
@@ -300,30 +301,30 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +
 +      ix += l;
 +      path->p_idx = ix;
-+      ext_debug(tree, "  -> %d->%d ", path->p_idx->e_block, path->p_idx->e_leaf);
++      ext_debug(tree, "  -> %d->%d ", path->p_idx->ei_block, path->p_idx->ei_leaf);
 +
 +      while (l++ < r) {
-+              if (block < ix->e_block) 
++              if (block < ix->ei_block) 
 +                      break;
 +              path->p_idx = ix++;
 +      }
-+      ext_debug(tree, "  -> %d->%d\n", path->p_idx->e_block,
-+                      path->p_idx->e_leaf);
++      ext_debug(tree, "  -> %d->%d\n", path->p_idx->ei_block,
++                      path->p_idx->ei_leaf);
 +
 +#ifdef CHECK_BINSEARCH 
 +      {
 +              struct ext3_extent_idx *chix;
 +
 +              chix = ix = EXT_FIRST_INDEX(eh);
-+              for (k = 0; k < eh->e_num; k++, ix++) {
-+                      if (k != 0 && ix->e_block <= ix[-1].e_block) {
++              for (k = 0; k < eh->eh_entries; k++, ix++) {
++                      if (k != 0 && ix->ei_block <= ix[-1].ei_block) {
 +                              printk("k=%d, ix=0x%p, first=0x%p\n", k,
 +                                      ix, EXT_FIRST_INDEX(eh));
 +                              printk("%u <= %u\n",
-+                                      ix->e_block,ix[-1].e_block);
++                                      ix->ei_block,ix[-1].ei_block);
 +                      }
-+                      EXT_ASSERT(k == 0 || ix->e_block > ix[-1].e_block);
-+                      if (block < ix->e_block) 
++                      EXT_ASSERT(k == 0 || ix->ei_block > ix[-1].ei_block);
++                      if (block < ix->ei_block) 
 +                              break;
 +                      chix = ix;
 +              }
@@ -344,10 +345,10 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      struct ext3_extent *ex;
 +      int l = 0, k, r;
 +
-+      EXT_ASSERT(eh->e_magic == EXT3_EXT_MAGIC);
-+      EXT_ASSERT(eh->e_num <= eh->e_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
 +
-+      if (eh->e_num == 0) {
++      if (eh->eh_entries == 0) {
 +              /*
 +               * this leaf is empty yet:
 +               *  we get such a leaf in split/add case
@@ -359,10 +360,10 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +
 +      path->p_ext = ex = EXT_FIRST_EXTENT(eh);
 +
-+      r = k = eh->e_num;
++      r = k = eh->eh_entries;
 +      while (k > 1) {
 +              k = (r - l) / 2;
-+              if (block < ex[l + k].e_block)
++              if (block < ex[l + k].ee_block)
 +                      r -= k;
 +              else
 +                      l += k;
@@ -371,25 +372,25 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +
 +      ex += l;
 +      path->p_ext = ex;
-+      ext_debug(tree, "  -> %d:%d:%d ", path->p_ext->e_block,
-+                      path->p_ext->e_start, path->p_ext->e_num);
++      ext_debug(tree, "  -> %d:%d:%d ", path->p_ext->ee_block,
++                      path->p_ext->ee_start, path->p_ext->ee_len);
 +
 +      while (l++ < r) {
-+              if (block < ex->e_block) 
++              if (block < ex->ee_block) 
 +                      break;
 +              path->p_ext = ex++;
 +      }
-+      ext_debug(tree, "  -> %d:%d:%d\n", path->p_ext->e_block,
-+                      path->p_ext->e_start, path->p_ext->e_num);
++      ext_debug(tree, "  -> %d:%d:%d\n", path->p_ext->ee_block,
++                      path->p_ext->ee_start, path->p_ext->ee_len);
 +
 +#ifdef CHECK_BINSEARCH 
 +      {
 +              struct ext3_extent *chex;
 +
 +              chex = ex = EXT_FIRST_EXTENT(eh);
-+              for (k = 0; k < eh->e_num; k++, ex++) {
-+                      EXT_ASSERT(k == 0 || ex->e_block > ex[-1].e_block);
-+                      if (block < ex->e_block) 
++              for (k = 0; k < eh->eh_entries; k++, ex++) {
++                      EXT_ASSERT(k == 0 || ex->ee_block > ex[-1].ee_block);
++                      if (block < ex->ee_block) 
 +                              break;
 +                      chex = ex;
 +              }
@@ -406,11 +407,12 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      BUG_ON(tree->buffer_len == 0);
 +      ext3_ext_get_access_for_root(handle, tree);
 +      eh = EXT_ROOT_HDR(tree);
-+      eh->e_depth = 0;
-+      eh->e_num = 0;
-+      eh->e_magic = EXT3_EXT_MAGIC;
-+      eh->e_max = ext3_ext_space_root(tree);
++      eh->eh_depth = 0;
++      eh->eh_entries = 0;
++      eh->eh_magic = EXT3_EXT_MAGIC;
++      eh->eh_max = ext3_ext_space_root(tree);
 +      ext3_ext_mark_root_dirty(handle, tree);
++      ext3_ext_invalidate_cache(tree);
 +      return 0;
 +}
 +
@@ -429,9 +431,9 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      eh = EXT_ROOT_HDR(tree);
 +      EXT_ASSERT(eh);
 +      i = depth = EXT_DEPTH(tree);
-+      EXT_ASSERT(eh->e_max);
-+      EXT_ASSERT(eh->e_magic == EXT3_EXT_MAGIC);
-+      EXT_ASSERT(i == 0 || eh->e_num > 0);
++      EXT_ASSERT(eh->eh_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(i == 0 || eh->eh_entries > 0);
 +      
 +      /* account possible depth increase */
 +      if (!path) {
@@ -446,9 +448,9 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      /* walk through the tree */
 +      while (i) {
 +              ext_debug(tree, "depth %d: num %d, max %d\n",
-+                              ppos, eh->e_num, eh->e_max);
++                              ppos, eh->eh_entries, eh->eh_max);
 +              ext3_ext_binsearch_idx(tree, path + ppos, block);
-+              path[ppos].p_block = path[ppos].p_idx->e_leaf;
++              path[ppos].p_block = path[ppos].p_idx->ei_leaf;
 +              path[ppos].p_depth = i;
 +              path[ppos].p_ext = NULL;
 +
@@ -493,9 +495,9 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      if ((err = ext3_ext_get_access(handle, tree, curp)))
 +              return err;
 +
-+      EXT_ASSERT(logical != curp->p_idx->e_block);
++      EXT_ASSERT(logical != curp->p_idx->ei_block);
 +      len = EXT_MAX_INDEX(curp->p_hdr) - curp->p_idx;
-+      if (logical > curp->p_idx->e_block) {
++      if (logical > curp->p_idx->ei_block) {
 +              /* insert after */
 +              if (curp->p_idx != EXT_LAST_INDEX(curp->p_hdr)) {
 +                      len = (len - 1) * sizeof(struct ext3_extent_idx);
@@ -519,11 +521,11 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +              ix = curp->p_idx;
 +      }
 +
-+      ix->e_block = logical;
-+      ix->e_leaf = ptr;
-+      curp->p_hdr->e_num++;
++      ix->ei_block = logical;
++      ix->ei_leaf = ptr;
++      curp->p_hdr->eh_entries++;
 +
-+      EXT_ASSERT(curp->p_hdr->e_num <= curp->p_hdr->e_max);
++      EXT_ASSERT(curp->p_hdr->eh_entries <= curp->p_hdr->eh_max);
 +      EXT_ASSERT(ix <= EXT_LAST_INDEX(curp->p_hdr));
 +
 +      err = ext3_ext_dirty(handle, tree, curp);
@@ -562,12 +564,12 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +       * border from split point */
 +      EXT_ASSERT(path[depth].p_ext <= EXT_MAX_EXTENT(path[depth].p_hdr));
 +      if (path[depth].p_ext != EXT_MAX_EXTENT(path[depth].p_hdr)) {
-+              border = path[depth].p_ext[1].e_block;
++              border = path[depth].p_ext[1].ee_block;
 +              ext_debug(tree, "leaf will be splitted."
 +                              " next leaf starts at %d\n",
 +                              (int)border);
 +      } else {
-+              border = newext->e_block;
++              border = newext->ee_block;
 +              ext_debug(tree, "leaf will be added."
 +                              " next leaf starts at %d\n",
 +                              (int)border);
@@ -613,14 +615,14 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +              goto cleanup;
 +
 +      neh = EXT_BLOCK_HDR(bh);
-+      neh->e_num = 0;
-+      neh->e_max = ext3_ext_space_block(tree);
-+      neh->e_magic = EXT3_EXT_MAGIC;
-+      neh->e_depth = 0;
++      neh->eh_entries = 0;
++      neh->eh_max = ext3_ext_space_block(tree);
++      neh->eh_magic = EXT3_EXT_MAGIC;
++      neh->eh_depth = 0;
 +      ex = EXT_FIRST_EXTENT(neh);
 +
 +      /* move remain of path[depth] to the new leaf */
-+      EXT_ASSERT(path[depth].p_hdr->e_num == path[depth].p_hdr->e_max);
++      EXT_ASSERT(path[depth].p_hdr->eh_entries == path[depth].p_hdr->eh_max);
 +      /* start copy from next extent */
 +      /* TODO: we could do it by single memmove */
 +      m = 0;
@@ -628,13 +630,13 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      while (path[depth].p_ext <=
 +                      EXT_MAX_EXTENT(path[depth].p_hdr)) {
 +              ext_debug(tree, "move %d:%d:%d in new leaf %lu\n",
-+                              path[depth].p_ext->e_block,
-+                              path[depth].p_ext->e_start,
-+                              path[depth].p_ext->e_num,
++                              path[depth].p_ext->ee_block,
++                              path[depth].p_ext->ee_start,
++                              path[depth].p_ext->ee_len,
 +                              newblock);
 +              memmove(ex++, path[depth].p_ext++,
 +                              sizeof(struct ext3_extent));
-+              neh->e_num++;
++              neh->eh_entries++;
 +              m++;
 +      }
 +      mark_buffer_uptodate(bh, 1);
@@ -649,7 +651,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      if (m) {
 +              if ((err = ext3_ext_get_access(handle, tree, path + depth)))
 +                      goto cleanup;
-+              path[depth].p_hdr->e_num -= m;
++              path[depth].p_hdr->eh_entries -= m;
 +              if ((err = ext3_ext_dirty(handle, tree, path + depth)))
 +                      goto cleanup;
 +              
@@ -677,13 +679,13 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +                      goto cleanup;
 +
 +              neh = EXT_BLOCK_HDR(bh);
-+              neh->e_num = 1;
-+              neh->e_magic = EXT3_EXT_MAGIC;
-+              neh->e_max = ext3_ext_space_block_idx(tree);
-+              neh->e_depth = depth - i; 
++              neh->eh_entries = 1;
++              neh->eh_magic = EXT3_EXT_MAGIC;
++              neh->eh_max = ext3_ext_space_block_idx(tree);
++              neh->eh_depth = depth - i; 
 +              fidx = EXT_FIRST_INDEX(neh);
-+              fidx->e_block = border;
-+              fidx->e_leaf = oldblock;
++              fidx->ei_block = border;
++              fidx->ei_leaf = oldblock;
 +
 +              ext_debug(tree, "int.index at %d (block %lu): %lu -> %lu\n",
 +                              i, newblock, border, oldblock);
@@ -697,12 +699,12 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +                              EXT_LAST_INDEX(path[i].p_hdr));
 +              while (path[i].p_idx <= EXT_MAX_INDEX(path[i].p_hdr)) {
 +                      ext_debug(tree, "%d: move %d:%d in new index %lu\n",
-+                                      i, path[i].p_idx->e_block,
-+                                      path[i].p_idx->e_leaf, newblock);
++                                      i, path[i].p_idx->ei_block,
++                                      path[i].p_idx->ei_leaf, newblock);
 +                      memmove(++fidx, path[i].p_idx++,
 +                                      sizeof(struct ext3_extent_idx));
-+                      neh->e_num++;
-+                      EXT_ASSERT(neh->e_num <= neh->e_max);
++                      neh->eh_entries++;
++                      EXT_ASSERT(neh->eh_entries <= neh->eh_max);
 +                      m++;
 +              }
 +              mark_buffer_uptodate(bh, 1);
@@ -718,7 +720,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +                      err = ext3_ext_get_access(handle, tree, path + i);
 +                      if (err)
 +                              goto cleanup;
-+                      path[i].p_hdr->e_num -= m;
++                      path[i].p_hdr->eh_entries -= m;
 +                      err = ext3_ext_dirty(handle, tree, path + i);
 +                      if (err)
 +                              goto cleanup;
@@ -741,10 +743,11 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +
 +      if (err) {
 +              /* free all allocated blocks in error case */
-+              for (i = 0; i < depth; i++)
++              for (i = 0; i < depth; i++) {
 +                      if (!ablocks[i])
 +                              continue;
 +                      ext3_free_blocks(handle, tree->inode, ablocks[i], 1);
++              }
 +      }
 +      kfree(ablocks);
 +
@@ -793,12 +796,12 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      /* set size of new block */
 +      neh = EXT_BLOCK_HDR(bh);
 +      /* old root could have indexes or leaves
-+       * so calculate e_max right way */
++       * so calculate eh_max right way */
 +      if (EXT_DEPTH(tree))
-+              neh->e_max = ext3_ext_space_block_idx(tree);
++              neh->eh_max = ext3_ext_space_block_idx(tree);
 +      else
-+              neh->e_max = ext3_ext_space_block(tree);
-+      neh->e_magic = EXT3_EXT_MAGIC;
++              neh->eh_max = ext3_ext_space_block(tree);
++      neh->eh_magic = EXT3_EXT_MAGIC;
 +      mark_buffer_uptodate(bh, 1);
 +      unlock_buffer(bh);
 +
@@ -809,20 +812,20 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      if ((err = ext3_ext_get_access(handle, tree, curp)))
 +              goto out;
 +
-+      curp->p_hdr->e_magic = EXT3_EXT_MAGIC;
-+      curp->p_hdr->e_max = ext3_ext_space_root_idx(tree);
-+      curp->p_hdr->e_num = 1;
++      curp->p_hdr->eh_magic = EXT3_EXT_MAGIC;
++      curp->p_hdr->eh_max = ext3_ext_space_root_idx(tree);
++      curp->p_hdr->eh_entries = 1;
 +      curp->p_idx = EXT_FIRST_INDEX(curp->p_hdr);
 +      /* FIXME: it works, but actually path[0] can be index */
-+      curp->p_idx->e_block = EXT_FIRST_EXTENT(path[0].p_hdr)->e_block;
-+      curp->p_idx->e_leaf = newblock;
++      curp->p_idx->ei_block = EXT_FIRST_EXTENT(path[0].p_hdr)->ee_block;
++      curp->p_idx->ei_leaf = newblock;
 +
 +      neh = EXT_ROOT_HDR(tree);
 +      fidx = EXT_FIRST_INDEX(neh);
 +      ext_debug(tree, "new root: num %d(%d), lblock %d, ptr %d\n",
-+                      neh->e_num, neh->e_max, fidx->e_block, fidx->e_leaf); 
++                      neh->eh_entries, neh->eh_max, fidx->ei_block, fidx->ei_leaf); 
 +
-+      neh->e_depth = path->p_depth + 1;
++      neh->eh_depth = path->p_depth + 1;
 +      err = ext3_ext_dirty(handle, tree, curp);
 +out:
 +      brelse(bh);
@@ -861,7 +864,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +
 +              /* refill path */
 +              ext3_ext_drop_refs(path);
-+              path = ext3_ext_find_extent(tree, newext->e_block, path);
++              path = ext3_ext_find_extent(tree, newext->ee_block, path);
 +              if (IS_ERR(path))
 +                      err = PTR_ERR(path);
 +      } else {
@@ -870,7 +873,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +
 +              /* refill path */
 +              ext3_ext_drop_refs(path);
-+              path = ext3_ext_find_extent(tree, newext->e_block, path);
++              path = ext3_ext_find_extent(tree, newext->ee_block, path);
 +              if (IS_ERR(path))
 +                      err = PTR_ERR(path);
 +
@@ -879,7 +882,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +               * in all other cases we have to split growed tree
 +               */
 +              depth = EXT_DEPTH(tree);
-+              if (path[depth].p_hdr->e_num == path[depth].p_hdr->e_max) {
++              if (path[depth].p_hdr->eh_entries == path[depth].p_hdr->eh_max) {
 +                      /* now we need split */
 +                      goto repeat;
 +              }
@@ -892,7 +895,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +}
 +
 +/*
-+ * returns allocated block in subsequent extent or 0xffffffff
++ * returns allocated block in subsequent extent or EXT_MAX_BLOCK
 + * NOTE: it consider block number from index entry as
 + * allocated block. thus, index entries have to be consistent
 + * with leafs
@@ -906,7 +909,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      depth = path->p_depth;
 +
 +      if (depth == 0 && path->p_ext == NULL)
-+              return 0xffffffff;
++              return EXT_MAX_BLOCK;
 +
 +      /* FIXME: what if index isn't full ?! */
 +      while (depth >= 0) {
@@ -914,21 +917,21 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +                      /* leaf */
 +                      if (path[depth].p_ext !=
 +                                      EXT_LAST_EXTENT(path[depth].p_hdr))
-+                              return path[depth].p_ext[1].e_block;
++                              return path[depth].p_ext[1].ee_block;
 +              } else {
 +                      /* index */
 +                      if (path[depth].p_idx !=
 +                                      EXT_LAST_INDEX(path[depth].p_hdr))
-+                              return path[depth].p_idx[1].e_block;
++                              return path[depth].p_idx[1].ei_block;
 +              }
 +              depth--;        
 +      }
 +
-+      return 0xffffffff;
++      return EXT_MAX_BLOCK;
 +}
 +
 +/*
-+ * returns first allocated block from next leaf or 0xffffffff
++ * returns first allocated block from next leaf or EXT_MAX_BLOCK
 + */
 +static unsigned ext3_ext_next_leaf_block(struct ext3_extents_tree *tree,
 +                                               struct ext3_ext_path *path)
@@ -940,7 +943,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +
 +      /* zero-tree has no leaf blocks at all */
 +      if (depth == 0)
-+              return 0xffffffff;
++              return EXT_MAX_BLOCK;
 +
 +      /* go to index block */
 +      depth--;
@@ -948,11 +951,11 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      while (depth >= 0) {
 +              if (path[depth].p_idx !=
 +                              EXT_LAST_INDEX(path[depth].p_hdr))
-+                      return path[depth].p_idx[1].e_block;
++                      return path[depth].p_idx[1].ei_block;
 +              depth--;        
 +      }
 +
-+      return 0xffffffff;
++      return EXT_MAX_BLOCK;
 +}
 +
 +/*
@@ -988,10 +991,10 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +       * TODO: we need correction if border is smaller then current one
 +       */
 +      k = depth - 1;
-+      border = path[depth].p_ext->e_block;
++      border = path[depth].p_ext->ee_block;
 +      if ((err = ext3_ext_get_access(handle, tree, path + k)))
 +              return err;
-+      path[k].p_idx->e_block = border;
++      path[k].p_idx->ei_block = border;
 +      if ((err = ext3_ext_dirty(handle, tree, path + k)))
 +              return err;
 +
@@ -1001,7 +1004,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +                      break;
 +              if ((err = ext3_ext_get_access(handle, tree, path + k)))
 +                      break;
-+              path[k].p_idx->e_block = border;
++              path[k].p_idx->ei_block = border;
 +              if ((err = ext3_ext_dirty(handle, tree, path + k)))
 +                      break;
 +      }
@@ -1014,18 +1017,18 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +                              struct ext3_extent *ex1,
 +                              struct ext3_extent *ex2)
 +{
-+      if (ex1->e_block + ex1->e_num != ex2->e_block)
++      if (ex1->ee_block + ex1->ee_len != ex2->ee_block)
 +              return 0;
 +
 +#ifdef AGRESSIVE_TEST
-+      if (ex1->e_num >= 4)
++      if (ex1->ee_len >= 4)
 +              return 0;
 +#endif
 +
-+      if (!tree->mergable)
++      if (!tree->ops->mergable)
 +              return 1;
 +
-+      return tree->mergable(ex1, ex2);
++      return tree->ops->mergable(ex1, ex2);
 +}
 +
 +/*
@@ -1043,6 +1046,8 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      struct ext3_ext_path *npath = NULL;
 +      int depth, len, err, next;
 +
++      EXT_ASSERT(newext->ee_len > 0);
++      EXT_ASSERT(newext->ee_len < EXT_CACHE_MARK);
 +      depth = EXT_DEPTH(tree);
 +      ex = path[depth].p_ext;
 +      EXT_ASSERT(path[depth].p_hdr);
@@ -1050,11 +1055,11 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      /* try to insert block into found extent and return */
 +      if (ex && ext3_can_extents_be_merged(tree, ex, newext)) {
 +              ext_debug(tree, "append %d block to %d:%d (from %d)\n",
-+                              newext->e_num, ex->e_block, ex->e_num,
-+                              ex->e_start);
++                              newext->ee_len, ex->ee_block, ex->ee_len,
++                              ex->ee_start);
 +              if ((err = ext3_ext_get_access(handle, tree, path + depth)))
 +                      return err;
-+              ex->e_num += newext->e_num;
++              ex->ee_len += newext->ee_len;
 +              eh = path[depth].p_hdr;
 +              nearex = ex;
 +              goto merge;
@@ -1063,13 +1068,13 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +repeat:
 +      depth = EXT_DEPTH(tree);
 +      eh = path[depth].p_hdr;
-+      if (eh->e_num < eh->e_max)
++      if (eh->eh_entries < eh->eh_max)
 +              goto has_space;
 +
 +      /* probably next leaf has space for us? */
 +      fex = EXT_LAST_EXTENT(eh);
 +      next = ext3_ext_next_leaf_block(tree, path);
-+      if (newext->e_block > fex->e_block && next != 0xffffffff) {
++      if (newext->ee_block > fex->ee_block && next != EXT_MAX_BLOCK) {
 +              ext_debug(tree, "next leaf block - %d\n", next);
 +              EXT_ASSERT(!npath);
 +              npath = ext3_ext_find_extent(tree, next, NULL);
@@ -1077,14 +1082,14 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +                      return PTR_ERR(npath);
 +              EXT_ASSERT(npath->p_depth == path->p_depth);
 +              eh = npath[depth].p_hdr;
-+              if (eh->e_num < eh->e_max) {
++              if (eh->eh_entries < eh->eh_max) {
 +                      ext_debug(tree, "next leaf isnt full(%d)\n",
-+                                      eh->e_num);
++                                      eh->eh_entries);
 +                      path = npath;
 +                      goto repeat;
 +              }
 +              ext_debug(tree, "next leaf hasno free space(%d,%d)\n",
-+                              eh->e_num, eh->e_max);
++                              eh->eh_entries, eh->eh_max);
 +      }
 +
 +      /*
@@ -1106,40 +1111,42 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      if (!nearex) {
 +              /* there is no extent in this leaf, create first one */
 +              ext_debug(tree, "first extent in the leaf: %d:%d:%d\n",
-+                              newext->e_block, newext->e_start,
-+                              newext->e_num);
++                              newext->ee_block, newext->ee_start,
++                              newext->ee_len);
 +              path[depth].p_ext = EXT_FIRST_EXTENT(eh);
-+      } else if (newext->e_block > nearex->e_block) {
-+              EXT_ASSERT(newext->e_block != nearex->e_block);
++      } else if (newext->ee_block > nearex->ee_block) {
++              EXT_ASSERT(newext->ee_block != nearex->ee_block);
 +              if (nearex != EXT_LAST_EXTENT(eh)) {
 +                      len = EXT_MAX_EXTENT(eh) - nearex;
 +                      len = (len - 1) * sizeof(struct ext3_extent);
 +                      len = len < 0 ? 0 : len;
 +                      ext_debug(tree, "insert %d:%d:%d after: nearest 0x%p, "
 +                                      "move %d from 0x%p to 0x%p\n",
-+                                      newext->e_block, newext->e_start,
-+                                      newext->e_num,
++                                      newext->ee_block, newext->ee_start,
++                                      newext->ee_len,
 +                                      nearex, len, nearex + 1, nearex + 2);
 +                      memmove(nearex + 2, nearex + 1, len);
 +              }
 +              path[depth].p_ext = nearex + 1;
 +      } else {
-+              EXT_ASSERT(newext->e_block != nearex->e_block);
++              EXT_ASSERT(newext->ee_block != nearex->ee_block);
 +              len = (EXT_MAX_EXTENT(eh) - nearex) * sizeof(struct ext3_extent);
 +              len = len < 0 ? 0 : len;
 +              ext_debug(tree, "insert %d:%d:%d before: nearest 0x%p, "
 +                              "move %d from 0x%p to 0x%p\n",
-+                              newext->e_block, newext->e_start, newext->e_num,
++                              newext->ee_block, newext->ee_start, newext->ee_len,
 +                              nearex, len, nearex + 1, nearex + 2);
 +              memmove(nearex + 1, nearex, len);
 +              path[depth].p_ext = nearex;
 +      }
 +
-+      eh->e_num++;
++      eh->eh_entries++;
 +      nearex = path[depth].p_ext;
-+      nearex->e_block = newext->e_block;
-+      nearex->e_start = newext->e_start;
-+      nearex->e_num = newext->e_num;
++      nearex->ee_block = newext->ee_block;
++      nearex->ee_start = newext->ee_start;
++      nearex->ee_len = newext->ee_len;
++      /* FIXME: support for large fs */
++      nearex->ee_start_hi = 0;
 +
 +merge:
 +      /* try to merge extents to the right */
@@ -1147,14 +1154,14 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +              if (!ext3_can_extents_be_merged(tree, nearex, nearex + 1))
 +                      break;
 +              /* merge with next extent! */
-+              nearex->e_num += nearex[1].e_num;
++              nearex->ee_len += nearex[1].ee_len;
 +              if (nearex + 1 < EXT_LAST_EXTENT(eh)) {
 +                      len = (EXT_LAST_EXTENT(eh) - nearex - 1)
 +                                      * sizeof(struct ext3_extent);
 +                      memmove(nearex + 1, nearex + 2, len);
 +              }
-+              eh->e_num--;
-+              EXT_ASSERT(eh->e_num > 0);
++              eh->eh_entries--;
++              EXT_ASSERT(eh->eh_entries > 0);
 +      }
 +
 +      /* try to merge extents to the left */
@@ -1172,6 +1179,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +              kfree(npath);
 +      }
 +      ext3_ext_tree_changed(tree);
++      ext3_ext_invalidate_cache(tree);
 +      return err;
 +}
 +
@@ -1189,7 +1197,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      EXT_ASSERT(tree->inode);
 +      EXT_ASSERT(tree->root);
 +
-+      while (block < last && block != 0xfffffffff) {
++      while (block < last && block != EXT_MAX_BLOCK) {
 +              num = last - block;
 +              /* find extent for this block */
 +              path = ext3_ext_find_extent(tree, block, path);
@@ -1210,25 +1218,25 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +                       * all requested space */
 +                      start = block;
 +                      end = block + num;
-+              } else if (ex->e_block > block) {
++              } else if (ex->ee_block > block) {
 +                      /* need to allocate space before found extent */
 +                      start = block;
-+                      end = ex->e_block;
++                      end = ex->ee_block;
 +                      if (block + num < end)
 +                              end = block + num;
-+              } else if (block >= ex->e_block + ex->e_num) {
++              } else if (block >= ex->ee_block + ex->ee_len) {
 +                      /* need to allocate space after found extent */
 +                      start = block;
 +                      end = block + num;
 +                      if (end >= next)
 +                              end = next;
-+              } else if (block >= ex->e_block) {
++              } else if (block >= ex->ee_block) {
 +                      /* 
 +                       * some part of requested space is covered
 +                       * by found extent
 +                       */
 +                      start = block;
-+                      end = ex->e_block + ex->e_num;
++                      end = ex->ee_block + ex->ee_len;
 +                      if (block + num < end)
 +                              end = block + num;
 +                      exists = 1;
@@ -1238,9 +1246,9 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +              EXT_ASSERT(end > start);
 +
 +              if (!exists) {
-+                      cbex.e_block = start;
-+                      cbex.e_num = end - start;
-+                      cbex.e_start = 0;
++                      cbex.ee_block = start;
++                      cbex.ee_len = end - start;
++                      cbex.ee_start = 0;
 +              } else
 +                      cbex = *ex;
 +
@@ -1263,7 +1271,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +                      path = NULL;
 +              }
 +
-+              block = cbex.e_block + cbex.e_num;
++              block = cbex.ee_block + cbex.ee_len;
 +      }
 +
 +      if (path) {
@@ -1275,21 +1283,14 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +}
 +
 +static inline void
-+ext3_ext_invalidate_cache(struct ext3_extents_tree *tree)
-+{
-+      if (tree->cex)
-+              tree->cex->e_num = 0;
-+}
-+
-+static inline void
 +ext3_ext_put_in_cache(struct ext3_extents_tree *tree, struct ext3_extent *ex)
 +{
 +      if (tree->cex) {
 +              EXT_ASSERT(ex);
-+              EXT_ASSERT(ex->e_num);
-+              tree->cex->e_block = ex->e_block;
-+              tree->cex->e_start = ex->e_start;
-+              tree->cex->e_num = ex->e_num;
++              EXT_ASSERT(ex->ee_len);
++              tree->cex->ee_block = ex->ee_block;
++              tree->cex->ee_start = ex->ee_start;
++              tree->cex->ee_len = ex->ee_len;
 +      }
 +}
 +
@@ -1311,32 +1312,32 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      ex = path[depth].p_ext;
 +      if (ex == NULL) {
 +              /* there is no extent yet, so gap is [0;-] */
-+              gex.e_block = 0;
-+              gex.e_num = 0xffffffff;
++              gex.ee_block = 0;
++              gex.ee_len = EXT_CACHE_MARK;
 +              ext_debug(tree, "cache gap(whole file):");
-+      } else if (block < ex->e_block) {
-+              gex.e_block = block;
-+              gex.e_num = ex->e_block - block;
++      } else if (block < ex->ee_block) {
++              gex.ee_block = block;
++              gex.ee_len = ex->ee_block - block;
 +              ext_debug(tree, "cache gap(before): %lu [%lu:%lu]",
 +                              (unsigned long) block,
-+                              (unsigned long) ex->e_block,
-+                              (unsigned long) ex->e_num);
-+      } else if (block >= ex->e_block + ex->e_num) {
-+              gex.e_block = ex->e_block + ex->e_num;
-+              gex.e_num = ext3_ext_next_allocated_block(path);
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len);
++      } else if (block >= ex->ee_block + ex->ee_len) {
++              gex.ee_block = ex->ee_block + ex->ee_len;
++              gex.ee_len = ext3_ext_next_allocated_block(path);
 +              ext_debug(tree, "cache gap(after): [%lu:%lu] %lu",
-+                              (unsigned long) ex->e_block,
-+                              (unsigned long) ex->e_num,
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len,
 +                              (unsigned long) block);
-+              EXT_ASSERT(gex.e_num > gex.e_block);
-+              gex.e_num = gex.e_num - gex.e_block;
++              EXT_ASSERT(gex.ee_len > gex.ee_block);
++              gex.ee_len = gex.ee_len - gex.ee_block;
 +      } else {
 +              BUG();
 +      }
 +
-+      ext_debug(tree, " -> %lu:%lu\n", (unsigned long) gex.e_block,
-+                      (unsigned long) gex.e_num);
-+      gex.e_start = 0xffffffff;
++      ext_debug(tree, " -> %lu:%lu\n", (unsigned long) gex.ee_block,
++                      (unsigned long) gex.ee_len);
++      gex.ee_start = EXT_CACHE_MARK;
 +      ext3_ext_put_in_cache(tree, &gex);
 +}
 +
@@ -1351,18 +1352,18 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +              return 0;
 +
 +      /* has cache valid data? */
-+      if (cex->e_num == 0)
++      if (cex->ee_len == 0)
 +              return 0;
 +
-+      if (block >= cex->e_block && block < cex->e_block + cex->e_num) {
-+              ex->e_block = cex->e_block;
-+              ex->e_start = cex->e_start;
-+              ex->e_num = cex->e_num;
++      if (block >= cex->ee_block && block < cex->ee_block + cex->ee_len) {
++              ex->ee_block = cex->ee_block;
++              ex->ee_start = cex->ee_start;
++              ex->ee_len = cex->ee_len;
 +              ext_debug(tree, "%lu cached by %lu:%lu:%lu\n",
 +                              (unsigned long) block,
-+                              (unsigned long) ex->e_block,
-+                              (unsigned long) ex->e_num,
-+                              (unsigned long) ex->e_start);
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len,
++                              (unsigned long) ex->ee_start);
 +              return 1;
 +      }
 +
@@ -1383,17 +1384,17 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      
 +      /* free index block */
 +      path--;
-+      EXT_ASSERT(path->p_hdr->e_num);
++      EXT_ASSERT(path->p_hdr->eh_entries);
 +      if ((err = ext3_ext_get_access(handle, tree, path)))
 +              return err;
-+      path->p_hdr->e_num--;
++      path->p_hdr->eh_entries--;
 +      if ((err = ext3_ext_dirty(handle, tree, path)))
 +              return err;
 +      ext_debug(tree, "index is empty, remove it, free block %d\n",
-+                      path->p_idx->e_leaf);
-+      bh = sb_get_hash_table(tree->inode->i_sb, path->p_idx->e_leaf);
-+      ext3_forget(handle, 1, tree->inode, bh, path->p_idx->e_leaf);
-+      ext3_free_blocks(handle, tree->inode, path->p_idx->e_leaf, 1);
++                      path->p_idx->ei_leaf);
++      bh = sb_get_hash_table(tree->inode->i_sb, path->p_idx->ei_leaf);
++      ext3_forget(handle, 1, tree->inode, bh, path->p_idx->ei_leaf);
++      ext3_free_blocks(handle, tree->inode, path->p_idx->ei_leaf, 1);
 +      return err;
 +}
 +
@@ -1405,7 +1406,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +
 +      if (path) {
 +              /* probably there is space in leaf? */
-+              if (path[depth].p_hdr->e_num < path[depth].p_hdr->e_max)
++              if (path[depth].p_hdr->eh_entries < path[depth].p_hdr->eh_max)
 +                      return 1;
 +      }
 +      
@@ -1445,13 +1446,13 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      depth = EXT_DEPTH(tree);
 +      ex = path[depth].p_ext;
 +      EXT_ASSERT(ex);
-+      EXT_ASSERT(end < ex->e_block + ex->e_num - 1);
-+      EXT_ASSERT(ex->e_block < start);
++      EXT_ASSERT(end < ex->ee_block + ex->ee_len - 1);
++      EXT_ASSERT(ex->ee_block < start);
 +
 +      /* calculate tail extent */
-+      tex.e_block = end + 1;
-+      EXT_ASSERT(tex.e_block < ex->e_block + ex->e_num);
-+      tex.e_num = ex->e_block + ex->e_num - tex.e_block;
++      tex.ee_block = end + 1;
++      EXT_ASSERT(tex.ee_block < ex->ee_block + ex->ee_len);
++      tex.ee_len = ex->ee_block + ex->ee_len - tex.ee_block;
 +
 +      creds = ext3_ext_calc_credits_for_insert(tree, path);
 +      handle = ext3_ext_journal_restart(handle, creds);
@@ -1462,22 +1463,22 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      err = ext3_ext_get_access(handle, tree, path + depth);
 +      if (err)
 +              return err;
-+      ex->e_num = start - ex->e_block;
++      ex->ee_len = start - ex->ee_block;
 +      err = ext3_ext_dirty(handle, tree, path + depth);
 +      if (err)
 +              return err;
 +
 +      /* FIXME: some callback to free underlying resource
-+       * and correct e_start? */
++       * and correct ee_start? */
 +      ext_debug(tree, "split extent: head %u:%u, tail %u:%u\n",
-+                      ex->e_block, ex->e_num, tex.e_block, tex.e_num);
++                      ex->ee_block, ex->ee_len, tex.ee_block, tex.ee_len);
 +
-+      npath = ext3_ext_find_extent(tree, ex->e_block, NULL);
++      npath = ext3_ext_find_extent(tree, ex->ee_block, NULL);
 +      if (IS_ERR(npath))
 +              return PTR_ERR(npath);
 +      depth = EXT_DEPTH(tree);
-+      EXT_ASSERT(npath[depth].p_ext->e_block == ex->e_block);
-+      EXT_ASSERT(npath[depth].p_ext->e_num == ex->e_num);
++      EXT_ASSERT(npath[depth].p_ext->ee_block == ex->ee_block);
++      EXT_ASSERT(npath[depth].p_ext->ee_len == ex->ee_len);
 +
 +      err = ext3_ext_insert_extent(handle, tree, npath, &tex);
 +      ext3_ext_drop_refs(npath);
@@ -1503,18 +1504,18 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +              path[depth].p_hdr = EXT_BLOCK_HDR(path[depth].p_bh);
 +      eh = path[depth].p_hdr;
 +      EXT_ASSERT(eh);
-+      EXT_ASSERT(eh->e_num <= eh->e_max);
-+      EXT_ASSERT(eh->e_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
 +      
 +      /* find where to start removing */
 +      le = ex = EXT_LAST_EXTENT(eh);
 +      while (ex != EXT_FIRST_EXTENT(eh)) {
-+              if (ex->e_block <= end)
++              if (ex->ee_block <= end)
 +                      break;
 +              ex--;
 +      }
 +
-+      if (start > ex->e_block && end < ex->e_block + ex->e_num - 1) {
++      if (start > ex->ee_block && end < ex->ee_block + ex->ee_len - 1) {
 +              /* removal of internal part of the extent requested
 +               * tail and head must be placed in different extent
 +               * so, we have to insert one more extent */
@@ -1524,34 +1525,34 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      
 +      lu = ex;
 +      while (ex >= EXT_FIRST_EXTENT(eh) &&
-+                      ex->e_block + ex->e_num > start) {
-+              ext_debug(tree, "remove ext %u:%u\n", ex->e_block, ex->e_num);
++                      ex->ee_block + ex->ee_len > start) {
++              ext_debug(tree, "remove ext %u:%u\n", ex->ee_block, ex->ee_len);
 +              path[depth].p_ext = ex;
 +      
-+              a = ex->e_block > start ? ex->e_block : start;
-+              b = ex->e_block + ex->e_num - 1 < end ?
-+                      ex->e_block + ex->e_num - 1 : end;
++              a = ex->ee_block > start ? ex->ee_block : start;
++              b = ex->ee_block + ex->ee_len - 1 < end ?
++                      ex->ee_block + ex->ee_len - 1 : end;
 +              
 +              ext_debug(tree, "  border %u:%u\n", a, b);
 +
-+              if (a != ex->e_block && b != ex->e_block + ex->e_num - 1) {
++              if (a != ex->ee_block && b != ex->ee_block + ex->ee_len - 1) {
 +                      block = 0;
 +                      num = 0;
 +                      BUG();
-+              } else if (a != ex->e_block) {
++              } else if (a != ex->ee_block) {
 +                      /* remove tail of the extent */
-+                      block = ex->e_block;
++                      block = ex->ee_block;
 +                      num = a - block;
-+              } else if (b != ex->e_block + ex->e_num - 1) {
++              } else if (b != ex->ee_block + ex->ee_len - 1) {
 +                      /* remove head of the extent */
 +                      block = a;
 +                      num = b - a;
 +              } else {
 +                      /* remove whole extent: excelent! */
-+                      block = ex->e_block; 
++                      block = ex->ee_block; 
 +                      num = 0;
-+                      EXT_ASSERT(a == ex->e_block &&
-+                                      b == ex->e_block + ex->e_num - 1);
++                      EXT_ASSERT(a == ex->ee_block &&
++                                      b == ex->ee_block + ex->ee_len - 1);
 +              }
 +
 +              if (ex == EXT_FIRST_EXTENT(eh))
@@ -1560,8 +1561,8 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +              credits = 1;
 +              if (correct_index)
 +                      credits += (EXT_DEPTH(tree) * EXT3_ALLOC_NEEDED) + 1;
-+              if (tree->remove_extent_credits)
-+                      credits += tree->remove_extent_credits(tree, ex, a, b);
++              if (tree->ops->remove_extent_credits)
++                      credits+=tree->ops->remove_extent_credits(tree,ex,a,b);
 +              
 +              handle = ext3_ext_journal_restart(handle, credits);
 +              if (IS_ERR(handle)) {
@@ -1573,48 +1574,48 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +              if (err)
 +                      goto out;
 +
-+              if (tree->remove_extent)
-+                      err = tree->remove_extent(tree, ex, a, b);
++              if (tree->ops->remove_extent)
++                      err = tree->ops->remove_extent(tree, ex, a, b);
 +              if (err)
 +                      goto out;
 +
 +              if (num == 0) {
 +                      /* this extent is removed entirely mark slot unused */
-+                      ex->e_start = 0;
-+                      eh->e_num--;
++                      ex->ee_start = 0;
++                      eh->eh_entries--;
 +                      fu = ex;
 +              }
 +
-+              ex->e_block = block;
-+              ex->e_num = num;
++              ex->ee_block = block;
++              ex->ee_len = num;
 +
 +              err = ext3_ext_dirty(handle, tree, path + depth);
 +              if (err)
 +                      goto out;
 +
 +              ext_debug(tree, "new extent: %u:%u:%u\n",
-+                              ex->e_block, ex->e_num, ex->e_start);
++                              ex->ee_block, ex->ee_len, ex->ee_start);
 +              ex--;
 +      }
 +
 +      if (fu) {
 +              /* reuse unused slots */
 +              while (lu < le) {
-+                      if (lu->e_start) {
++                      if (lu->ee_start) {
 +                              *fu = *lu;
-+                              lu->e_start = 0;
++                              lu->ee_start = 0;
 +                              fu++;
 +                      }
 +                      lu++;
 +              }
 +      }
 +
-+      if (correct_index && eh->e_num)
++      if (correct_index && eh->eh_entries)
 +              err = ext3_ext_correct_indexes(handle, tree, path);
 +
 +      /* if this leaf is free, then we should
 +       * remove it from index block above */
-+      if (err == 0 && eh->e_num == 0 && path[depth].p_bh != NULL)
++      if (err == 0 && eh->eh_entries == 0 && path[depth].p_bh != NULL)
 +              err = ext3_ext_rm_idx(handle, tree, path + depth);
 +
 +out:
@@ -1629,7 +1630,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      
 +      ix = EXT_LAST_INDEX(hdr);
 +      while (ix != EXT_FIRST_INDEX(hdr)) {
-+              if (ix->e_block <= block)
++              if (ix->ei_block <= block)
 +                      break;
 +              ix--;
 +      }
@@ -1651,7 +1652,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +       * if truncate on deeper level happened it it wasn't partial
 +       * so we have to consider current index for truncation
 +       */
-+      if (path->p_hdr->e_num == path->p_block)
++      if (path->p_hdr->eh_entries == path->p_block)
 +              return 0;
 +      return 1;
 +}
@@ -1705,16 +1706,16 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +                      path[i].p_hdr = EXT_BLOCK_HDR(path[i].p_bh);
 +              }
 +
-+              EXT_ASSERT(path[i].p_hdr->e_num <= path[i].p_hdr->e_max);
-+              EXT_ASSERT(path[i].p_hdr->e_magic == EXT3_EXT_MAGIC);
++              EXT_ASSERT(path[i].p_hdr->eh_entries <= path[i].p_hdr->eh_max);
++              EXT_ASSERT(path[i].p_hdr->eh_magic == EXT3_EXT_MAGIC);
 +              
 +              if (!path[i].p_idx) {
 +                      /* this level hasn't touched yet */
 +                      path[i].p_idx =
 +                              ext3_ext_last_covered(path[i].p_hdr, end);
-+                      path[i].p_block = path[i].p_hdr->e_num + 1;
++                      path[i].p_block = path[i].p_hdr->eh_entries + 1;
 +                      ext_debug(tree, "init index ptr: hdr 0x%p, num %d\n",
-+                                      path[i].p_hdr, path[i].p_hdr->e_num);
++                                      path[i].p_hdr, path[i].p_hdr->eh_entries);
 +              } else {
 +                      /* we've already was here, see at next index */
 +                      path[i].p_idx--;
@@ -1726,9 +1727,9 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +              if (ext3_ext_more_to_rm(path + i)) {
 +                      /* go to the next level */
 +                      ext_debug(tree, "move to level %d (block %d)\n",
-+                                      i + 1, path[i].p_idx->e_leaf);
++                                      i + 1, path[i].p_idx->ei_leaf);
 +                      memset(path + i + 1, 0, sizeof(*path));
-+                      path[i+1].p_bh = sb_bread(sb, path[i].p_idx->e_leaf);
++                      path[i+1].p_bh = sb_bread(sb, path[i].p_idx->ei_leaf);
 +                      if (!path[i+1].p_bh) {
 +                              /* should we reset i_size? */
 +                              err = -EIO;
@@ -1736,14 +1737,14 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +                      }
 +                      /* put actual number of indexes to know is this
 +                       * number got changed at the next iteration */
-+                      path[i].p_block = path[i].p_hdr->e_num;
++                      path[i].p_block = path[i].p_hdr->eh_entries;
 +                      i++;
 +              } else {
 +                      /* we finish processing this index, go up */
-+                      if (path[i].p_hdr->e_num == 0 && i > 0) {
++                      if (path[i].p_hdr->eh_entries == 0 && i > 0) {
 +                              /* index is empty, remove it
 +                               * handle must be already prepared by the
-+                               * truncate_leaf() */
++                               * truncatei_leaf() */
 +                              err = ext3_ext_rm_idx(handle, tree, path + i);
 +                      }
 +                      /* root level have p_bh == NULL, brelse() eats this */
@@ -1754,14 +1755,15 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      }
 +
 +      /* TODO: flexible tree reduction should be here */
-+      if (path->p_hdr->e_num == 0) {
++      if (path->p_hdr->eh_entries == 0) {
 +              /*
 +               * truncate to zero freed all the tree
-+               * so, we need to correct e_depth
++               * so, we need to correct eh_depth
 +               */
 +              err = ext3_ext_get_access(handle, tree, path);
 +              if (err == 0) {
-+                      EXT_ROOT_HDR(tree)->e_depth = 0;
++                      EXT_ROOT_HDR(tree)->eh_depth = 0;
++                      EXT_ROOT_HDR(tree)->eh_max = ext3_ext_space_root(tree);
 +                      err = ext3_ext_dirty(handle, tree, path);
 +              }
 +      }
@@ -1820,7 +1822,8 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +static int ext3_ext_mergable(struct ext3_extent *ex1,
 +                              struct ext3_extent *ex2)
 +{
-+      if (ex1->e_start + ex1->e_num == ex2->e_start)
++      /* FIXME: support for large fs */
++      if (ex1->ee_start + ex1->ee_len == ex2->ee_start)
 +              return 1;
 +      return 0;
 +}
@@ -1833,7 +1836,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      int needed;
 +      
 +      /* at present, extent can't cross block group */;
-+      needed = 3; /* bitmap + group desc + sb */
++      needed = 4; /* bitmap + group desc + sb + inode */
 +
 +#ifdef CONFIG_QUOTA
 +      needed += 2 * EXT3_SINGLEDATA_TRANS_BLOCKS;
@@ -1853,11 +1856,11 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +
 +      if (IS_ERR(handle))
 +              return PTR_ERR(handle);
-+      if (from >= ex->e_block && to == ex->e_block + ex->e_num - 1) {
++      if (from >= ex->ee_block && to == ex->ee_block + ex->ee_len - 1) {
 +              /* tail removal */
 +              unsigned long num, start;
-+              num = ex->e_block + ex->e_num - from;
-+              start = ex->e_start + ex->e_num - num;
++              num = ex->ee_block + ex->ee_len - from;
++              start = ex->ee_start + ex->ee_len - num;
 +              ext_debug(tree, "free last %lu blocks starting %lu\n",
 +                              num, start);
 +              for (i = 0; i < num; i++) {
@@ -1865,19 +1868,19 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +                      ext3_forget(handle, 0, tree->inode, bh, start + i);
 +              }
 +              ext3_free_blocks(handle, tree->inode, start, num);
-+      } else if (from == ex->e_block && to <= ex->e_block + ex->e_num - 1) {
++      } else if (from == ex->ee_block && to <= ex->ee_block + ex->ee_len - 1) {
 +              printk("strange request: removal %lu-%lu from %u:%u\n",
-+                      from, to, ex->e_block, ex->e_num);
++                      from, to, ex->ee_block, ex->ee_len);
 +      } else {
 +              printk("strange request: removal(2) %lu-%lu from %u:%u\n",
-+                      from, to, ex->e_block, ex->e_num);
++                      from, to, ex->ee_block, ex->ee_len);
 +      }
 +      ext3_journal_stop(handle, tree->inode);
 +      return 0;
 +}
 +
-+static int ext3_ext_find_goal(struct inode *inode, struct ext3_ext_path *path,
-+                              unsigned long block)
++int ext3_ext_find_goal(struct inode *inode, struct ext3_ext_path *path,
++                      unsigned long block)
 +{
 +      struct ext3_inode_info *ei = EXT3_I(inode);
 +      unsigned long bg_start;
@@ -1890,7 +1893,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +              
 +              /* try to predict block placement */
 +              if ((ex = path[depth].p_ext))
-+                      return ex->e_start + (block - ex->e_block);
++                      return ex->ee_start + (block - ex->ee_block);
 +
 +              /* it looks index is empty
 +               * try to find starting from index itself */
@@ -1915,141 +1918,48 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +      
 +      EXT_ASSERT(path);
 +      EXT_ASSERT(ex);
-+      EXT_ASSERT(ex->e_start);
-+      EXT_ASSERT(ex->e_num);
++      EXT_ASSERT(ex->ee_start);
++      EXT_ASSERT(ex->ee_len);
 +      
 +      /* reuse block from the extent to order data/metadata */
-+      newblock = ex->e_start++;
-+      ex->e_num--;
-+      if (ex->e_num == 0) {
-+              ex->e_num = 1;
++      newblock = ex->ee_start++;
++      ex->ee_len--;
++      if (ex->ee_len == 0) {
++              ex->ee_len = 1;
 +              /* allocate new block for the extent */
-+              goal = ext3_ext_find_goal(inode, path, ex->e_block);
-+              ex->e_start = ext3_new_block(handle, inode, goal, 0, 0, err);
-+              if (ex->e_start == 0) {
++              goal = ext3_ext_find_goal(inode, path, ex->ee_block);
++              ex->ee_start = ext3_new_block(handle, inode, goal, 0, 0, err);
++              if (ex->ee_start == 0) {
 +                      /* error occured: restore old extent */
-+                      ex->e_start = newblock;
++                      ex->ee_start = newblock;
 +                      return 0;
 +              }
 +      }
 +      return newblock;
 +}
 +
-+static void ext3_init_tree_desc(struct ext3_extents_tree *tree,
++static struct ext3_extents_helpers ext3_blockmap_helpers = {
++      .get_write_access       = ext3_get_inode_write_access,
++      .mark_buffer_dirty      = ext3_mark_buffer_dirty,
++      .mergable               = ext3_ext_mergable,
++      .new_block              = ext3_new_block_cb,
++      .remove_extent          = ext3_remove_blocks,
++      .remove_extent_credits  = ext3_remove_blocks_credits,
++};
++
++void ext3_init_tree_desc(struct ext3_extents_tree *tree,
 +                              struct inode *inode)
 +{
 +      tree->inode = inode;
 +      tree->root = (void *) EXT3_I(inode)->i_data;
-+      tree->get_write_access = ext3_get_inode_write_access;
-+      tree->mark_buffer_dirty = ext3_mark_buffer_dirty;
-+      tree->mergable = ext3_ext_mergable;
-+      tree->new_block = ext3_new_block_cb;
-+      tree->remove_extent = ext3_remove_blocks;
-+      tree->remove_extent_credits = ext3_remove_blocks_credits;
 +      tree->buffer = (void *) inode;
 +      tree->buffer_len = sizeof(EXT3_I(inode)->i_data);
 +      tree->cex = (struct ext3_extent *) &EXT3_I(inode)->i_cached_extent;
++      tree->ops = &ext3_blockmap_helpers;
 +}
 +
-+#if EXT3_MULTIBLOCK_ALLOCATOR
-+static int
-+ext3_ext_new_extent_cb(struct ext3_extents_tree *tree,
-+                      struct ext3_ext_path *path,
-+                      struct ext3_extent *newex, int exist)
-+{
-+      struct inode *inode = tree->inode;
-+      struct buffer_head *bh;
-+      int count, err, goal;
-+      unsigned long pblock;
-+      unsigned long tgen;
-+      loff_t new_i_size;
-+      handle_t *handle;
-+      int i;
-+
-+      if (exist)
-+              return EXT_CONTINUE;
-+
-+      tgen = EXT_GENERATION(tree);
-+      count = ext3_ext_calc_credits_for_insert(tree, path);
-+      up_write(&EXT3_I(inode)->truncate_sem);
-+
-+      handle = ext3_journal_start(inode, count + EXT3_ALLOC_NEEDED + 1);
-+      if (IS_ERR(handle)) {
-+              down_write(&EXT3_I(inode)->truncate_sem);
-+              return PTR_ERR(handle);
-+      }
-+
-+      if (tgen != EXT_GENERATION(tree)) {
-+              /* the tree has changed. so path can be invalid at moment */
-+              ext3_journal_stop(handle, inode);
-+              down_write(&EXT3_I(inode)->truncate_sem);
-+              return EXT_REPEAT;
-+      }
-+
-+      down_write(&EXT3_I(inode)->truncate_sem);
-+      goal = ext3_ext_find_goal(inode, path, newex->e_block);
-+      count = newex->e_num;
-+      pblock = ext3_new_blocks(handle, inode, &count, goal, &err);
-+      if (!pblock)
-+              goto out;
-+      EXT_ASSERT(count <= newex->e_num);
-+
-+      /* insert new extent */
-+      newex->e_start = pblock;
-+      newex->e_num = count;
-+      err = ext3_ext_insert_extent(handle, tree, path, newex);
-+      if (err)
-+              goto out;
-+
-+      /* block have been allocated for data, so time to drop dirty
-+       * in correspondend buffer_heads to prevent corruptions */
-+      for (i = 0; i < newex->e_num; i++) {
-+              bh = sb_get_hash_table(inode->i_sb, newex->e_start + i);
-+              if (bh) {
-+                      mark_buffer_clean(bh);
-+                      wait_on_buffer(bh);
-+                      clear_bit(BH_Req, &bh->b_state);
-+                      __brelse(bh);
-+              }
-+      }
-+
-+      /* correct on-disk inode size */
-+      if (newex->e_num > 0) {
-+              new_i_size = (loff_t) newex->e_block + newex->e_num;
-+              new_i_size = new_i_size << inode->i_blkbits;
-+              if (new_i_size > EXT3_I(inode)->i_disksize) {
-+                      EXT3_I(inode)->i_disksize = new_i_size;
-+                      err = ext3_mark_inode_dirty(handle, inode);
-+              }
-+      }
-+
-+out:
-+      ext3_journal_stop(handle, inode);
-+      return err;
-+}
-+
-+
-+int ext3_ext_allocate_nblocks(struct inode *inode, unsigned long block,
-+                              unsigned long num)
-+{
-+      struct ext3_extents_tree tree;
-+      int err;
-+
-+      ext3_init_tree_desc(&tree, inode);
-+      ext_debug(&tree, "blocks %lu-%lu requested for inode %u\n",
-+                      block, block + num,(unsigned) inode->i_ino);
-+      down_write(&EXT3_I(inode)->truncate_sem);
-+      err = ext3_ext_walk_space(&tree, block, num, ext3_ext_new_extent_cb);
-+      ext3_ext_invalidate_cache(&tree);
-+      up_write(&EXT3_I(inode)->truncate_sem);
-+
-+      return err;
-+}
-+#endif
-+
 +int ext3_ext_get_block(handle_t *handle, struct inode *inode,
-+                      long iblock, struct buffer_head *bh_result,
-+                      int create, int extend_disksize)
++                      long iblock, struct buffer_head *bh_result, int create)
 +{
 +      struct ext3_ext_path *path = NULL;
 +      struct ext3_extent newex;
@@ -2065,13 +1975,17 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +
 +      /* check in cache */
 +      if (ext3_ext_in_cache(&tree, iblock, &newex)) {
-+              if (newex.e_start == 0xffffffff && !create) {
-+                      /* block isn't allocated yet and
-+                       * user don't want to allocate it */
-+                      goto out2;
-+              } else if (newex.e_start) {
++              if (newex.ee_start == EXT_CACHE_MARK) {
++                      /* this is cached gap */
++                      if (!create) {
++                              /* block isn't allocated yet and
++                               * user don't want to allocate it */
++                              goto out2;
++                      }
++                      /* we should allocate requested block */
++              } else if (newex.ee_start) {
 +                      /* block is already allocated */
-+                      newblock = iblock - newex.e_block + newex.e_start;
++                      newblock = iblock - newex.ee_block + newex.ee_start;
 +                      goto out;
 +              }
 +      }
@@ -2095,10 +2009,10 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +
 +      if ((ex = path[depth].p_ext)) {
 +              /* if found exent covers block, simple return it */
-+              if (iblock >= ex->e_block && iblock < ex->e_block + ex->e_num) {
-+                      newblock = iblock - ex->e_block + ex->e_start;
++              if (iblock >= ex->ee_block && iblock < ex->ee_block + ex->ee_len) {
++                      newblock = iblock - ex->ee_block + ex->ee_start;
 +                      ext_debug(&tree, "%d fit into %d:%d -> %d\n",
-+                                      (int) iblock, ex->e_block, ex->e_num,
++                                      (int) iblock, ex->ee_block, ex->ee_len,
 +                                      newblock);
 +                      ext3_ext_put_in_cache(&tree, ex);
 +                      goto out;
@@ -2124,18 +2038,18 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +                      goal, newblock);
 +
 +      /* try to insert new extent into found leaf and return */
-+      newex.e_block = iblock;
-+      newex.e_start = newblock;
-+      newex.e_num = 1;
++      newex.ee_block = iblock;
++      newex.ee_start = newblock;
++      newex.ee_len = 1;
 +      err = ext3_ext_insert_extent(handle, &tree, path, &newex);
 +      if (err)
 +              goto out2;
 +      
-+      if (extend_disksize && inode->i_size > EXT3_I(inode)->i_disksize)
++      if (inode->i_size > EXT3_I(inode)->i_disksize)
 +              EXT3_I(inode)->i_disksize = inode->i_size;
 +
 +      /* previous routine could use block we allocated */
-+      newblock = newex.e_start;
++      newblock = newex.ee_start;
 +      set_bit(BH_New, &bh_result->b_state);
 +
 +      ext3_ext_put_in_cache(&tree, &newex);
@@ -2192,7 +2106,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +
 +      last_block = (inode->i_size + sb->s_blocksize - 1)
 +                      >> EXT3_BLOCK_SIZE_BITS(sb);
-+      err = ext3_ext_remove_space(&tree, last_block, 0xffffffff);
++      err = ext3_ext_remove_space(&tree, last_block, EXT_MAX_BLOCK);
 +      
 +      /* In a multi-transaction truncate, we only make the final
 +       * transaction synchronous */
@@ -2312,7 +2226,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +              buf.err = 0;
 +              tree.private = &buf;
 +              down_write(&EXT3_I(inode)->truncate_sem);
-+              err = ext3_ext_walk_space(&tree, buf.start, 0xffffffff,
++              err = ext3_ext_walk_space(&tree, buf.start, EXT_MAX_BLOCK,
 +                                              ext3_ext_store_extent_cb);
 +              up_write(&EXT3_I(inode)->truncate_sem);
 +              if (err == 0)
@@ -2327,7 +2241,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +              buf.extents_num = 0;
 +              buf.leaf_num = 0;
 +              tree.private = &buf;
-+              err = ext3_ext_walk_space(&tree, 0, 0xffffffff,
++              err = ext3_ext_walk_space(&tree, 0, EXT_MAX_BLOCK,
 +                                              ext3_ext_collect_stats_cb);
 +              up_write(&EXT3_I(inode)->truncate_sem);
 +              if (!err)
@@ -2353,24 +2267,38 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c
 +
 Index: linux-2.4.21-suse2/fs/ext3/ialloc.c
 ===================================================================
---- linux-2.4.21-suse2.orig/fs/ext3/ialloc.c   2004-02-05 20:42:40.000000000 +0300
-+++ linux-2.4.21-suse2/fs/ext3/ialloc.c        2004-02-05 20:42:40.000000000 +0300
-@@ -592,6 +592,10 @@
-               iloc.bh = NULL;
-               goto fail;
-       }
-+      if (test_opt(sb, EXTENTS)) {
-+              EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
-+              ext3_extents_initialize_blockmap(handle, inode);
-+      }
-       err = ext3_mark_iloc_dirty(handle, inode, &iloc);
-       if (err) goto fail;
-  
+--- linux-2.4.21-suse2.orig/fs/ext3/ialloc.c   2004-09-12 19:52:26.000000000 +0400
++++ linux-2.4.21-suse2/fs/ext3/ialloc.c        2004-09-12 19:53:34.000000000 +0400
+@@ -592,10 +592,21 @@
+               iloc.bh = NULL;
+               goto fail;
+       }
+-      err = ext3_mark_iloc_dirty(handle, inode, &iloc);
+-      if (err) goto fail;
+- 
++      if (test_opt(sb, EXTENTS)) {
++              EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
++              ext3_extents_initialize_blockmap(handle, inode);
++              if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_EXTENTS)) {
++                      err = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
++                      if (err) goto fail;
++                      EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_EXTENTS);
++                      BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "call ext3_journal_dirty_metadata");
++                      err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
++              }
++      }
++ 
++      err = ext3_mark_iloc_dirty(handle, inode, &iloc);
++      if (err) goto fail;
+ #ifdef CONFIG_EXT3_FS_XATTR
+       init_rwsem(&inode->u.ext3_i.xattr_sem);
 Index: linux-2.4.21-suse2/fs/ext3/inode.c
 ===================================================================
---- linux-2.4.21-suse2.orig/fs/ext3/inode.c    2004-02-05 20:42:40.000000000 +0300
-+++ linux-2.4.21-suse2/fs/ext3/inode.c 2004-02-05 20:42:40.000000000 +0300
-@@ -853,6 +853,18 @@
+--- linux-2.4.21-suse2.orig/fs/ext3/inode.c    2004-09-12 19:52:27.000000000 +0400
++++ linux-2.4.21-suse2/fs/ext3/inode.c 2004-09-12 19:52:27.000000000 +0400
+@@ -853,6 +853,16 @@
        goto reread;
  }
  
@@ -2379,17 +2307,15 @@ Index: linux-2.4.21-suse2/fs/ext3/inode.c
 +              struct buffer_head *bh, int create, int extend_disksize)
 +{
 +      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
-+              return ext3_ext_get_block(handle, inode,
-+                                              block, bh, create,
-+                                              extend_disksize);
-+      return ext3_get_block_handle(handle, inode,
-+                                      block, bh, create, extend_disksize);
++              return ext3_ext_get_block(handle, inode, block, bh, create);
++      return ext3_get_block_handle(handle, inode, block, bh, create,
++                                      extend_disksize);
 +}
 +
  /*
   * The BKL is not held on entry here.
   */
-@@ -866,7 +878,7 @@
+@@ -866,7 +876,7 @@
                handle = ext3_journal_current_handle();
                J_ASSERT(handle != 0);
        }
@@ -2398,7 +2324,7 @@ Index: linux-2.4.21-suse2/fs/ext3/inode.c
                                bh_result, create, 1);
        return ret;
  }
-@@ -893,7 +905,7 @@
+@@ -893,7 +903,7 @@
                }
        }
        if (ret == 0)
@@ -2407,7 +2333,7 @@ Index: linux-2.4.21-suse2/fs/ext3/inode.c
                                        bh_result, create, 0);
        if (ret == 0)
                bh_result->b_size = (1 << inode->i_blkbits);
-@@ -915,7 +927,7 @@
+@@ -915,7 +925,7 @@
        dummy.b_state = 0;
        dummy.b_blocknr = -1000;
        buffer_trace_init(&dummy.b_history);
@@ -2416,7 +2342,7 @@ Index: linux-2.4.21-suse2/fs/ext3/inode.c
        if (!*errp && buffer_mapped(&dummy)) {
                struct buffer_head *bh;
                bh = sb_getblk(inode->i_sb, dummy.b_blocknr);
-@@ -1502,7 +1514,7 @@
+@@ -1502,7 +1512,7 @@
   * This required during truncate. We need to physically zero the tail end
   * of that block so it doesn't yield old data if the file is later grown.
   */
@@ -2425,7 +2351,7 @@ Index: linux-2.4.21-suse2/fs/ext3/inode.c
                struct address_space *mapping, loff_t from)
  {
        unsigned long index = from >> PAGE_CACHE_SHIFT;
-@@ -1987,6 +1999,9 @@
+@@ -1988,6 +1998,9 @@
  
        ext3_discard_prealloc(inode);
  
@@ -2435,7 +2361,7 @@ Index: linux-2.4.21-suse2/fs/ext3/inode.c
        handle = start_transaction(inode);
        if (IS_ERR(handle))
                return;         /* AKPM: return what? */
-@@ -2663,6 +2678,9 @@
+@@ -2664,6 +2677,9 @@
        int indirects = (EXT3_NDIR_BLOCKS % bpp) ? 5 : 3;
        int ret;
        
@@ -2445,7 +2371,7 @@ Index: linux-2.4.21-suse2/fs/ext3/inode.c
        if (ext3_should_journal_data(inode))
                ret = 3 * (bpp + indirects) + 2;
        else
-@@ -3099,7 +3117,7 @@
+@@ -3100,7 +3116,7 @@
  
        /* alloc blocks one by one */
        for (i = 0; i < nblocks; i++) {
@@ -2454,7 +2380,7 @@ Index: linux-2.4.21-suse2/fs/ext3/inode.c
                                                &bh_tmp, 1, 1);
                if (ret)
                        break;
-@@ -3175,7 +3193,7 @@
+@@ -3176,7 +3192,7 @@
                  if (blocks[i] != 0)
                          continue;
  
@@ -2465,9 +2391,9 @@ Index: linux-2.4.21-suse2/fs/ext3/inode.c
                                 "allocating block %ld\n", rc, iblock);
 Index: linux-2.4.21-suse2/fs/ext3/Makefile
 ===================================================================
---- linux-2.4.21-suse2.orig/fs/ext3/Makefile   2004-02-05 20:42:39.000000000 +0300
-+++ linux-2.4.21-suse2/fs/ext3/Makefile        2004-02-05 20:43:47.000000000 +0300
-@@ -12,7 +12,9 @@
+--- linux-2.4.21-suse2.orig/fs/ext3/Makefile   2004-09-12 19:52:25.000000000 +0400
++++ linux-2.4.21-suse2/fs/ext3/Makefile        2004-09-12 19:52:27.000000000 +0400
+@@ -12,7 +12,10 @@
  export-objs := ext3-exports.o
  
  obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
@@ -2475,13 +2401,14 @@ Index: linux-2.4.21-suse2/fs/ext3/Makefile
 +              ioctl.o namei.o super.o symlink.o hash.o ext3-exports.o \
 +              extents.o
 +export-objs += extents.o
++
  obj-m    := $(O_TARGET)
  
  export-objs += xattr.o
 Index: linux-2.4.21-suse2/fs/ext3/super.c
 ===================================================================
---- linux-2.4.21-suse2.orig/fs/ext3/super.c    2004-02-05 20:42:40.000000000 +0300
-+++ linux-2.4.21-suse2/fs/ext3/super.c 2004-02-05 20:42:40.000000000 +0300
+--- linux-2.4.21-suse2.orig/fs/ext3/super.c    2004-09-12 19:52:26.000000000 +0400
++++ linux-2.4.21-suse2/fs/ext3/super.c 2004-09-12 19:52:27.000000000 +0400
 @@ -624,6 +624,7 @@
        int i;
  
@@ -2501,7 +2428,7 @@ Index: linux-2.4.21-suse2/fs/ext3/super.c
                else if (!strcmp (this_char, "grpid") ||
                         !strcmp (this_char, "bsdgroups"))
                        set_opt (*mount_options, GRPID);
-@@ -1523,6 +1528,8 @@
+@@ -1524,6 +1529,8 @@
                test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered":
                "writeback");
  
@@ -2512,8 +2439,8 @@ Index: linux-2.4.21-suse2/fs/ext3/super.c
  failed_mount3:
 Index: linux-2.4.21-suse2/fs/ext3/ioctl.c
 ===================================================================
---- linux-2.4.21-suse2.orig/fs/ext3/ioctl.c    2004-02-05 20:42:39.000000000 +0300
-+++ linux-2.4.21-suse2/fs/ext3/ioctl.c 2004-02-05 20:42:40.000000000 +0300
+--- linux-2.4.21-suse2.orig/fs/ext3/ioctl.c    2004-09-12 19:52:25.000000000 +0400
++++ linux-2.4.21-suse2/fs/ext3/ioctl.c 2004-09-12 19:52:27.000000000 +0400
 @@ -174,6 +174,10 @@
                        return ret;
                }
@@ -2527,8 +2454,8 @@ Index: linux-2.4.21-suse2/fs/ext3/ioctl.c
        }
 Index: linux-2.4.21-suse2/include/linux/ext3_fs.h
 ===================================================================
---- linux-2.4.21-suse2.orig/include/linux/ext3_fs.h    2004-02-05 20:42:40.000000000 +0300
-+++ linux-2.4.21-suse2/include/linux/ext3_fs.h 2004-02-05 20:42:40.000000000 +0300
+--- linux-2.4.21-suse2.orig/include/linux/ext3_fs.h    2004-09-12 19:52:26.000000000 +0400
++++ linux-2.4.21-suse2/include/linux/ext3_fs.h 2004-09-12 19:52:50.000000000 +0400
 @@ -184,6 +184,7 @@
  #define EXT3_IMAGIC_FL                        0x00002000 /* AFS directory */
  #define EXT3_JOURNAL_DATA_FL          0x00004000 /* file data should be journaled */
@@ -2556,7 +2483,21 @@ Index: linux-2.4.21-suse2/include/linux/ext3_fs.h
  
  /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
  #ifndef _LINUX_EXT2_FS_H
-@@ -689,6 +695,7 @@
+@@ -504,10 +510,12 @@
+ #define EXT3_FEATURE_INCOMPAT_FILETYPE                0x0002
+ #define EXT3_FEATURE_INCOMPAT_RECOVER         0x0004 /* Needs recovery */
+ #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008 /* Journal device */
++#define EXT3_FEATURE_INCOMPAT_EXTENTS         0x0040 /* extents support */
+ #define EXT3_FEATURE_COMPAT_SUPP      EXT2_FEATURE_COMPAT_EXT_ATTR
+ #define EXT3_FEATURE_INCOMPAT_SUPP    (EXT3_FEATURE_INCOMPAT_FILETYPE| \
+-                                       EXT3_FEATURE_INCOMPAT_RECOVER)
++                                       EXT3_FEATURE_INCOMPAT_RECOVER| \
++                                       EXT3_FEATURE_INCOMPAT_EXTENTS)
+ #define EXT3_FEATURE_RO_COMPAT_SUPP   (EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+                                        EXT3_FEATURE_RO_COMPAT_LARGE_FILE| \
+                                        EXT3_FEATURE_RO_COMPAT_BTREE_DIR)
+@@ -689,6 +697,7 @@
  extern unsigned long ext3_count_free (struct buffer_head *, unsigned);
  
  /* inode.c */
@@ -2564,14 +2505,14 @@ Index: linux-2.4.21-suse2/include/linux/ext3_fs.h
  extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
  extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
  extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
-@@ -770,6 +777,14 @@
+@@ -770,6 +779,14 @@
  extern struct inode_operations ext3_symlink_inode_operations;
  extern struct inode_operations ext3_fast_symlink_inode_operations;
  
 +/* extents.c */
 +extern int ext3_ext_writepage_trans_blocks(struct inode *, int);
 +extern int ext3_ext_get_block(handle_t *, struct inode *, long,
-+                              struct buffer_head *, int, int);
++                              struct buffer_head *, int);
 +extern void ext3_ext_truncate(struct inode *);
 +extern void ext3_ext_init(struct super_block *);
 +extern void ext3_ext_release(struct super_block *);
@@ -2582,10 +2523,11 @@ Index: linux-2.4.21-suse2/include/linux/ext3_fs.h
 Index: linux-2.4.21-suse2/include/linux/ext3_extents.h
 ===================================================================
 --- linux-2.4.21-suse2.orig/include/linux/ext3_extents.h       2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.21-suse2/include/linux/ext3_extents.h    2004-02-05 20:42:40.000000000 +0300
-@@ -0,0 +1,216 @@
++++ linux-2.4.21-suse2/include/linux/ext3_extents.h    2004-09-12 19:52:27.000000000 +0400
+@@ -0,0 +1,237 @@
 +/*
-+ * Copyright (C) 2003 Alex Tomas <alex@clusterfs.com>
++ * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
@@ -2654,9 +2596,10 @@ Index: linux-2.4.21-suse2/include/linux/ext3_extents.h
 + * it's used at the bottom of the tree
 + */
 +struct ext3_extent {
-+      __u32   e_block;        /* first logical block extent covers */
-+      __u32   e_start;        /* first physical block extents lives */
-+      __u32   e_num;          /* number of blocks covered by extent */
++      __u32   ee_block;       /* first logical block extent covers */
++      __u16   ee_len;         /* number of blocks covered by extent */
++      __u16   ee_start_hi;    /* high 16 bits of physical block */
++      __u32   ee_start;       /* low 32 bigs of physical block */
 +};
 +
 +/*
@@ -2664,23 +2607,25 @@ Index: linux-2.4.21-suse2/include/linux/ext3_extents.h
 + * it's used at all the levels, but the bottom
 + */
 +struct ext3_extent_idx {
-+      __u32   e_block;        /* index covers logical blocks from 'block' */
-+      __u32   e_leaf;         /* pointer to the physical block of the next *
++      __u32   ei_block;       /* index covers logical blocks from 'block' */
++      __u32   ei_leaf;        /* pointer to the physical block of the next *
 +                               * level. leaf or next index could bet here */
++      __u16   ei_leaf_hi;     /* high 16 bits of physical block */
++      __u16   ei_unused;
 +};
 +
 +/*
 + * each block (leaves and indexes), even inode-stored has header
 + */
 +struct ext3_extent_header {   
-+      __u16   e_magic;        /* probably will support different formats */   
-+      __u16   e_num;          /* number of valid entries */
-+      __u16   e_max;          /* capacity of store in entries */
-+      __u16   e_depth;        /* has tree real underlaying blocks? */
-+      __u32   e_generation;   /* generation of the tree */
++      __u16   eh_magic;       /* probably will support different formats */   
++      __u16   eh_entries;     /* number of valid entries */
++      __u16   eh_max;         /* capacity of store in entries */
++      __u16   eh_depth;       /* has tree real underlaying blocks? */
++      __u32   eh_generation;  /* generation of the tree */
 +};
 +
-+#define EXT3_EXT_MAGIC                0xf301
++#define EXT3_EXT_MAGIC                0xf30a
 +
 +/*
 + * array of ext3_ext_path contains path to some extent
@@ -2700,11 +2645,11 @@ Index: linux-2.4.21-suse2/include/linux/ext3_extents.h
 + * structure for external API
 + */
 +
-+
 +/*
 + * ext3_extents_tree is used to pass initial information
 + * to top-level extents API
 + */
++struct ext3_extents_helpers;
 +struct ext3_extents_tree {
 +      struct inode *inode;    /* inode which tree belongs to */
 +      void *root;             /* ptr to data top of tree resides at */
@@ -2712,6 +2657,10 @@ Index: linux-2.4.21-suse2/include/linux/ext3_extents.h
 +      int buffer_len;
 +      void *private;
 +      struct ext3_extent *cex;/* last found extent */
++      struct ext3_extents_helpers *ops;
++};
++
++struct ext3_extents_helpers {
 +      int (*get_write_access)(handle_t *h, void *buffer);
 +      int (*mark_buffer_dirty)(handle_t *h, void *buffer);
 +      int (*mergable)(struct ext3_extent *ex1, struct ext3_extent *ex2);
@@ -2741,6 +2690,10 @@ Index: linux-2.4.21-suse2/include/linux/ext3_extents.h
 +#define EXT_REPEAT    2
 +
 +
++#define EXT_MAX_BLOCK 0xffffffff
++#define EXT_CACHE_MARK        0xffff
++
++
 +#define EXT_FIRST_EXTENT(__hdr__) \
 +      ((struct ext3_extent *) (((char *) (__hdr__)) +         \
 +                               sizeof(struct ext3_extent_header)))
@@ -2748,24 +2701,24 @@ Index: linux-2.4.21-suse2/include/linux/ext3_extents.h
 +      ((struct ext3_extent_idx *) (((char *) (__hdr__)) +     \
 +                                   sizeof(struct ext3_extent_header)))
 +#define EXT_HAS_FREE_INDEX(__path__) \
-+      ((__path__)->p_hdr->e_num < (__path__)->p_hdr->e_max)
++      ((__path__)->p_hdr->eh_entries < (__path__)->p_hdr->eh_max)
 +#define EXT_LAST_EXTENT(__hdr__) \
-+      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->e_num - 1)
++      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_entries - 1)
 +#define EXT_LAST_INDEX(__hdr__) \
-+      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->e_num - 1)
++      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_entries - 1)
 +#define EXT_MAX_EXTENT(__hdr__) \
-+      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->e_max - 1)
++      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_max - 1)
 +#define EXT_MAX_INDEX(__hdr__) \
-+      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->e_max - 1)
++      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_max - 1)
 +
 +#define EXT_ROOT_HDR(tree) \
 +      ((struct ext3_extent_header *) (tree)->root)
 +#define EXT_BLOCK_HDR(bh) \
 +      ((struct ext3_extent_header *) (bh)->b_data)
 +#define EXT_DEPTH(_t_)        \
-+      (((struct ext3_extent_header *)((_t_)->root))->e_depth)
++      (((struct ext3_extent_header *)((_t_)->root))->eh_depth)
 +#define EXT_GENERATION(_t_)   \
-+      (((struct ext3_extent_header *)((_t_)->root))->e_generation)
++      (((struct ext3_extent_header *)((_t_)->root))->eh_generation)
 +
 +
 +#define EXT_ASSERT(__x__) if (!(__x__)) BUG();
@@ -2791,6 +2744,7 @@ Index: linux-2.4.21-suse2/include/linux/ext3_extents.h
 +      int leaf_num;
 +};
 +
++void ext3_init_tree_desc(struct ext3_extents_tree *, struct inode *);
 +extern int ext3_extent_tree_init(handle_t *, struct ext3_extents_tree *);
 +extern int ext3_ext_calc_credits_for_insert(struct ext3_extents_tree *, struct ext3_ext_path *);
 +extern int ext3_ext_insert_extent(handle_t *, struct ext3_extents_tree *, struct ext3_ext_path *, struct ext3_extent *);
@@ -2798,12 +2752,20 @@ Index: linux-2.4.21-suse2/include/linux/ext3_extents.h
 +extern int ext3_ext_remove_space(struct ext3_extents_tree *, unsigned long, unsigned long);
 +extern struct ext3_ext_path * ext3_ext_find_extent(struct ext3_extents_tree *, int, struct ext3_ext_path *);
 +
++static inline void
++ext3_ext_invalidate_cache(struct ext3_extents_tree *tree)
++{
++      if (tree->cex)
++              tree->cex->ee_len = 0;
++}
++
++
 +#endif /* _LINUX_EXT3_EXTENTS */
 +
 Index: linux-2.4.21-suse2/include/linux/ext3_fs_i.h
 ===================================================================
---- linux-2.4.21-suse2.orig/include/linux/ext3_fs_i.h  2004-02-05 20:42:40.000000000 +0300
-+++ linux-2.4.21-suse2/include/linux/ext3_fs_i.h       2004-02-05 20:47:04.000000000 +0300
+--- linux-2.4.21-suse2.orig/include/linux/ext3_fs_i.h  2004-09-12 19:52:27.000000000 +0400
++++ linux-2.4.21-suse2/include/linux/ext3_fs_i.h       2004-09-12 19:52:27.000000000 +0400
 @@ -90,6 +90,8 @@
         * by other means, so we have truncate_sem.
         */
index d6b0d4f..0159dd9 100644 (file)
@@ -1,7 +1,7 @@
 Index: linux-2.4.24/fs/ext3/extents.c
 ===================================================================
 --- linux-2.4.24.orig/fs/ext3/extents.c        2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.24/fs/ext3/extents.c     2004-09-12 17:37:14.000000000 +0400
++++ linux-2.4.24/fs/ext3/extents.c     2004-09-12 19:57:09.000000000 +0400
 @@ -0,0 +1,2262 @@
 +/*
 + * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
@@ -2267,9 +2267,9 @@ Index: linux-2.4.24/fs/ext3/extents.c
 +
 Index: linux-2.4.24/fs/ext3/ialloc.c
 ===================================================================
---- linux-2.4.24.orig/fs/ext3/ialloc.c 2004-08-07 16:35:25.000000000 +0400
-+++ linux-2.4.24/fs/ext3/ialloc.c      2004-09-12 17:49:24.000000000 +0400
-@@ -593,10 +593,21 @@
+--- linux-2.4.24.orig/fs/ext3/ialloc.c 2004-09-12 19:57:08.000000000 +0400
++++ linux-2.4.24/fs/ext3/ialloc.c      2004-09-12 19:57:45.000000000 +0400
+@@ -592,10 +592,21 @@
                iloc.bh = NULL;
                goto fail;
        }
@@ -2286,7 +2286,7 @@ Index: linux-2.4.24/fs/ext3/ialloc.c
 +                      BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "call ext3_journal_dirty_metadata");
 +                      err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
 +              }
-+      }
++      }
  
 +      err = ext3_mark_iloc_dirty(handle, inode, &iloc);
 +      if (err) goto fail;
@@ -2295,8 +2295,8 @@ Index: linux-2.4.24/fs/ext3/ialloc.c
        if(DQUOT_ALLOC_INODE(inode)) {
 Index: linux-2.4.24/fs/ext3/inode.c
 ===================================================================
---- linux-2.4.24.orig/fs/ext3/inode.c  2004-08-07 16:35:25.000000000 +0400
-+++ linux-2.4.24/fs/ext3/inode.c       2004-09-12 17:37:14.000000000 +0400
+--- linux-2.4.24.orig/fs/ext3/inode.c  2004-09-12 19:57:09.000000000 +0400
++++ linux-2.4.24/fs/ext3/inode.c       2004-09-12 19:57:09.000000000 +0400
 @@ -848,6 +848,15 @@
        goto reread;
  }
@@ -2340,7 +2340,7 @@ Index: linux-2.4.24/fs/ext3/inode.c
                struct address_space *mapping, loff_t from)
  {
        unsigned long index = from >> PAGE_CACHE_SHIFT;
-@@ -1888,6 +1897,9 @@
+@@ -1889,6 +1898,9 @@
  
        ext3_discard_prealloc(inode);
  
@@ -2350,7 +2350,7 @@ Index: linux-2.4.24/fs/ext3/inode.c
        handle = start_transaction(inode);
        if (IS_ERR(handle))
                return;         /* AKPM: return what? */
-@@ -2547,6 +2559,9 @@
+@@ -2537,6 +2549,9 @@
        int indirects = (EXT3_NDIR_BLOCKS % bpp) ? 5 : 3;
        int ret;
        
@@ -2360,7 +2360,7 @@ Index: linux-2.4.24/fs/ext3/inode.c
        if (ext3_should_journal_data(inode))
                ret = 3 * (bpp + indirects) + 2;
        else
-@@ -2983,7 +2998,7 @@
+@@ -2973,7 +2988,7 @@
  
        /* alloc blocks one by one */
        for (i = 0; i < nblocks; i++) {
@@ -2369,7 +2369,7 @@ Index: linux-2.4.24/fs/ext3/inode.c
                                                &bh_tmp, 1);
                if (ret)
                        break;
-@@ -3059,7 +3074,7 @@
+@@ -3049,7 +3064,7 @@
                  if (blocks[i] != 0)
                          continue;
  
@@ -2380,8 +2380,8 @@ Index: linux-2.4.24/fs/ext3/inode.c
                                 "allocating block %ld\n", rc, iblock);
 Index: linux-2.4.24/fs/ext3/Makefile
 ===================================================================
---- linux-2.4.24.orig/fs/ext3/Makefile 2004-08-07 16:35:25.000000000 +0400
-+++ linux-2.4.24/fs/ext3/Makefile      2004-09-12 17:37:14.000000000 +0400
+--- linux-2.4.24.orig/fs/ext3/Makefile 2004-09-12 19:57:08.000000000 +0400
++++ linux-2.4.24/fs/ext3/Makefile      2004-09-12 19:57:09.000000000 +0400
 @@ -13,7 +13,9 @@
  
  obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
@@ -2395,17 +2395,17 @@ Index: linux-2.4.24/fs/ext3/Makefile
  export-objs += xattr.o
 Index: linux-2.4.24/fs/ext3/super.c
 ===================================================================
---- linux-2.4.24.orig/fs/ext3/super.c  2004-08-07 16:35:25.000000000 +0400
-+++ linux-2.4.24/fs/ext3/super.c       2004-09-12 17:37:14.000000000 +0400
-@@ -530,6 +530,7 @@
-       int i;
-       J_ASSERT(sbi->s_delete_inodes == 0);
+--- linux-2.4.24.orig/fs/ext3/super.c  2004-09-12 19:57:08.000000000 +0400
++++ linux-2.4.24/fs/ext3/super.c       2004-09-12 19:57:09.000000000 +0400
+@@ -532,6 +532,7 @@
+ #ifdef EXT3_DELETE_THREAD
+        J_ASSERT(sbi->s_delete_inodes == 0);
+ #endif
 +      ext3_ext_release(sb);
        ext3_xattr_put_super(sb);
        journal_destroy(sbi->s_journal);
        if (!(sb->s_flags & MS_RDONLY)) {
-@@ -702,6 +703,10 @@
+@@ -704,6 +705,10 @@
                                return 0;
                        }
                }
@@ -2416,7 +2416,7 @@ Index: linux-2.4.24/fs/ext3/super.c
                else if (!strcmp (this_char, "grpid") ||
                         !strcmp (this_char, "bsdgroups"))
                        set_opt (*mount_options, GRPID);
-@@ -1393,6 +1398,8 @@
+@@ -1395,6 +1400,8 @@
                test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered":
                "writeback");
  
@@ -2427,8 +2427,8 @@ Index: linux-2.4.24/fs/ext3/super.c
  failed_mount3:
 Index: linux-2.4.24/fs/ext3/ioctl.c
 ===================================================================
---- linux-2.4.24.orig/fs/ext3/ioctl.c  2004-08-07 16:35:23.000000000 +0400
-+++ linux-2.4.24/fs/ext3/ioctl.c       2004-09-12 17:37:14.000000000 +0400
+--- linux-2.4.24.orig/fs/ext3/ioctl.c  2004-09-12 19:57:07.000000000 +0400
++++ linux-2.4.24/fs/ext3/ioctl.c       2004-09-12 19:57:09.000000000 +0400
 @@ -174,6 +174,10 @@
                        return ret;
                }
@@ -2442,17 +2442,17 @@ Index: linux-2.4.24/fs/ext3/ioctl.c
        }
 Index: linux-2.4.24/include/linux/ext3_fs.h
 ===================================================================
---- linux-2.4.24.orig/include/linux/ext3_fs.h  2004-08-07 16:35:25.000000000 +0400
-+++ linux-2.4.24/include/linux/ext3_fs.h       2004-09-12 17:45:20.000000000 +0400
-@@ -185,6 +185,7 @@
+--- linux-2.4.24.orig/include/linux/ext3_fs.h  2004-09-12 19:57:08.000000000 +0400
++++ linux-2.4.24/include/linux/ext3_fs.h       2004-09-12 19:57:45.000000000 +0400
+@@ -184,6 +184,7 @@
+ #define EXT3_IMAGIC_FL                        0x00002000 /* AFS directory */
  #define EXT3_JOURNAL_DATA_FL          0x00004000 /* file data should be journaled */
- #define EXT3_EXTRA_ISIZE              0x00008000 /* inode has initialized i_extra_isize */
  #define EXT3_RESERVED_FL              0x80000000 /* reserved for ext3 lib */
 +#define EXT3_EXTENTS_FL                       0x00080000 /* Inode uses extents */
  
  #define EXT3_FL_USER_VISIBLE          0x00005FFF /* User visible flags */
  #define EXT3_FL_USER_MODIFIABLE               0x000000FF /* User modifiable flags */
-@@ -209,6 +210,9 @@
+@@ -208,6 +209,9 @@
  #ifdef CONFIG_JBD_DEBUG
  #define EXT3_IOC_WAIT_FOR_READONLY    _IOR('f', 99, long)
  #endif
@@ -2462,16 +2462,16 @@ Index: linux-2.4.24/include/linux/ext3_fs.h
  
  /*
   * Structure of an inode on the disk
-@@ -328,6 +332,8 @@
- #define EXT3_MOUNT_IOPEN              0x8000  /* Allow access via iopen */
- #define EXT3_MOUNT_IOPEN_NOPRIV               0x10000 /* Make iopen world-readable */
+@@ -327,6 +331,8 @@
  #define EXT3_MOUNT_ASYNCDEL           0x20000 /* Delayed deletion */
-+#define EXT3_MOUNT_EXTENTS            0x40000 /* Extents support */
-+#define EXT3_MOUNT_EXTDEBUG           0x80000 /* Extents debug */
+ #define EXT3_MOUNT_IOPEN              0x40000 /* Allow access via iopen */
+ #define EXT3_MOUNT_IOPEN_NOPRIV               0x80000 /* Make iopen world-readable */
++#define EXT3_MOUNT_EXTENTS            0x100000/* Extents support */
++#define EXT3_MOUNT_EXTDEBUG           0x200000/* Extents debug */
  
  /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
  #ifndef _LINUX_EXT2_FS_H
-@@ -504,10 +510,12 @@
+@@ -503,10 +509,12 @@
  #define EXT3_FEATURE_INCOMPAT_FILETYPE                0x0002
  #define EXT3_FEATURE_INCOMPAT_RECOVER         0x0004 /* Needs recovery */
  #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008 /* Journal device */
@@ -2485,7 +2485,7 @@ Index: linux-2.4.24/include/linux/ext3_fs.h
  #define EXT3_FEATURE_RO_COMPAT_SUPP   (EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER| \
                                         EXT3_FEATURE_RO_COMPAT_LARGE_FILE| \
                                         EXT3_FEATURE_RO_COMPAT_BTREE_DIR)
-@@ -689,6 +697,7 @@
+@@ -688,6 +696,7 @@
  extern unsigned long ext3_count_free (struct buffer_head *, unsigned);
  
  /* inode.c */
@@ -2493,7 +2493,7 @@ Index: linux-2.4.24/include/linux/ext3_fs.h
  extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
  extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
  extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
-@@ -770,6 +779,14 @@
+@@ -769,6 +778,14 @@
  extern struct inode_operations ext3_symlink_inode_operations;
  extern struct inode_operations ext3_fast_symlink_inode_operations;
  
@@ -2511,7 +2511,7 @@ Index: linux-2.4.24/include/linux/ext3_fs.h
 Index: linux-2.4.24/include/linux/ext3_extents.h
 ===================================================================
 --- linux-2.4.24.orig/include/linux/ext3_extents.h     2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.24/include/linux/ext3_extents.h  2004-09-12 17:37:14.000000000 +0400
++++ linux-2.4.24/include/linux/ext3_extents.h  2004-09-12 19:57:09.000000000 +0400
 @@ -0,0 +1,237 @@
 +/*
 + * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
@@ -2752,8 +2752,8 @@ Index: linux-2.4.24/include/linux/ext3_extents.h
 +
 Index: linux-2.4.24/include/linux/ext3_fs_i.h
 ===================================================================
---- linux-2.4.24.orig/include/linux/ext3_fs_i.h        2004-08-07 16:35:25.000000000 +0400
-+++ linux-2.4.24/include/linux/ext3_fs_i.h     2004-09-12 17:37:14.000000000 +0400
+--- linux-2.4.24.orig/include/linux/ext3_fs_i.h        2004-09-12 19:57:08.000000000 +0400
++++ linux-2.4.24/include/linux/ext3_fs_i.h     2004-09-12 19:57:09.000000000 +0400
 @@ -76,6 +76,8 @@
         * by other means, so we have truncate_sem.
         */
diff --git a/lustre/kernel_patches/patches/ext3-extents-2.6.5.patch b/lustre/kernel_patches/patches/ext3-extents-2.6.5.patch
new file mode 100644 (file)
index 0000000..7ebb84f
--- /dev/null
@@ -0,0 +1,2822 @@
+%patch
+Index: linux-2.6.7/fs/ext3/extents.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/extents.c 2003-01-30 13:24:37.000000000 +0300
++++ linux-2.6.7/fs/ext3/extents.c      2004-08-19 08:53:49.000000000 +0400
+@@ -0,0 +1,2306 @@
++/*
++ * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public Licens
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-
++ */
++
++/*
++ * Extents support for EXT3
++ *
++ * TODO:
++ *   - ext3_ext_walk_space() sould not use ext3_ext_find_extent()
++ *   - ext3_ext_calc_credits() could take 'mergable' into account
++ *   - ext3*_error() should be used in some situations
++ *   - find_goal() [to be tested and improved]
++ *   - smart tree reduction
++ *   - arch-independence
++ *     common on-disk format for big/little-endian arch
++ */
++
++#include <linux/module.h>
++#include <linux/fs.h>
++#include <linux/time.h>
++#include <linux/ext3_jbd.h>
++#include <linux/jbd.h>
++#include <linux/smp_lock.h>
++#include <linux/highuid.h>
++#include <linux/pagemap.h>
++#include <linux/quotaops.h>
++#include <linux/string.h>
++#include <linux/slab.h>
++#include <linux/ext3_extents.h>
++#include <asm/uaccess.h>
++
++static handle_t *ext3_ext_journal_restart(handle_t *handle, int needed)
++{
++      int err;
++
++      if (handle->h_buffer_credits > needed)
++              return handle;
++      if (!ext3_journal_extend(handle, needed))
++              return handle;
++      err = ext3_journal_restart(handle, needed);
++      
++      return handle;
++}
++
++static int inline
++ext3_ext_get_access_for_root(handle_t *h, struct ext3_extents_tree *tree)
++{
++      if (tree->ops->get_write_access)
++              return tree->ops->get_write_access(h,tree->buffer);
++      else
++              return 0;
++}
++
++static int inline
++ext3_ext_mark_root_dirty(handle_t *h, struct ext3_extents_tree *tree)
++{
++      if (tree->ops->mark_buffer_dirty)
++              return tree->ops->mark_buffer_dirty(h,tree->buffer);
++      else
++              return 0;
++}
++
++/*
++ * could return:
++ *  - EROFS
++ *  - ENOMEM
++ */
++static int ext3_ext_get_access(handle_t *handle,
++                              struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++      int err;
++
++      if (path->p_bh) {
++              /* path points to block */
++              err = ext3_journal_get_write_access(handle, path->p_bh);
++      } else {
++              /* path points to leaf/index in inode body */
++              err = ext3_ext_get_access_for_root(handle, tree);
++      }
++      return err;
++}
++
++/*
++ * could return:
++ *  - EROFS
++ *  - ENOMEM
++ *  - EIO
++ */
++static int ext3_ext_dirty(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++      int err;
++      if (path->p_bh) {
++              /* path points to block */
++              err =ext3_journal_dirty_metadata(handle, path->p_bh);
++      } else {
++              /* path points to leaf/index in inode body */
++              err = ext3_ext_mark_root_dirty(handle, tree);
++      }
++      return err;
++}
++
++static int inline
++ext3_ext_new_block(handle_t *handle, struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, struct ext3_extent *ex,
++                      int *err)
++{
++      int goal, depth, newblock;
++      struct inode *inode;
++
++      EXT_ASSERT(tree);
++      if (tree->ops->new_block)
++              return tree->ops->new_block(handle, tree, path, ex, err);
++
++      inode = tree->inode;
++      depth = EXT_DEPTH(tree);
++      if (path && depth > 0) {
++              goal = path[depth-1].p_block;
++      } else {
++              struct ext3_inode_info *ei = EXT3_I(inode);
++              unsigned long bg_start;
++              unsigned long colour;
++
++              bg_start = (ei->i_block_group *
++                              EXT3_BLOCKS_PER_GROUP(inode->i_sb)) +
++                      le32_to_cpu(EXT3_SB(inode->i_sb)->s_es->s_first_data_block);
++              colour = (current->pid % 16) *
++                      (EXT3_BLOCKS_PER_GROUP(inode->i_sb) / 16);
++              goal = bg_start + colour;
++      }
++
++      newblock = ext3_new_block(handle, inode, goal, 0, 0, err);
++      return newblock;
++}
++
++static inline void ext3_ext_tree_changed(struct ext3_extents_tree *tree)
++{
++      struct ext3_extent_header *neh;
++      neh = EXT_ROOT_HDR(tree);
++      neh->eh_generation++;
++}
++
++static inline int ext3_ext_space_block(struct ext3_extents_tree *tree)
++{
++      int size;
++
++      size = (tree->inode->i_sb->s_blocksize -
++                      sizeof(struct ext3_extent_header))
++                              / sizeof(struct ext3_extent);
++#ifdef AGRESSIVE_TEST
++      size = 6;
++#endif
++      return size;
++}
++
++static inline int ext3_ext_space_block_idx(struct ext3_extents_tree *tree)
++{
++      int size;
++
++      size = (tree->inode->i_sb->s_blocksize -
++                      sizeof(struct ext3_extent_header))
++                              / sizeof(struct ext3_extent_idx);
++#ifdef AGRESSIVE_TEST
++      size = 5;
++#endif
++      return size;
++}
++
++static inline int ext3_ext_space_root(struct ext3_extents_tree *tree)
++{
++      int size;
++
++      size = (tree->buffer_len - sizeof(struct ext3_extent_header))
++                      / sizeof(struct ext3_extent);
++#ifdef AGRESSIVE_TEST
++      size = 3;
++#endif
++      return size;
++}
++
++static inline int ext3_ext_space_root_idx(struct ext3_extents_tree *tree)
++{
++      int size;
++
++      size = (tree->buffer_len -
++                      sizeof(struct ext3_extent_header))
++                      / sizeof(struct ext3_extent_idx);
++#ifdef AGRESSIVE_TEST
++      size = 4;
++#endif
++      return size;
++}
++
++static void ext3_ext_show_path(struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++#ifdef EXT_DEBUG
++      int k, l = path->p_depth;
++
++      ext_debug(tree, "path:");
++      for (k = 0; k <= l; k++, path++) {
++              if (path->p_idx) {
++                      ext_debug(tree, "  %d->%d", path->p_idx->ei_block,
++                                      path->p_idx->ei_leaf);
++              } else if (path->p_ext) {
++                      ext_debug(tree, "  %d:%d:%d",
++                                      path->p_ext->ee_block,
++                                      path->p_ext->ee_len,
++                                      path->p_ext->ee_start);
++              } else
++                      ext_debug(tree, "  []");
++      }
++      ext_debug(tree, "\n");
++#endif
++}
++
++static void ext3_ext_show_leaf(struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++#ifdef EXT_DEBUG
++      int depth = EXT_DEPTH(tree);
++      struct ext3_extent_header *eh;
++      struct ext3_extent *ex;
++      int i;
++
++      if (!path)
++              return;
++
++      eh = path[depth].p_hdr;
++      ex = EXT_FIRST_EXTENT(eh);
++
++      for (i = 0; i < eh->eh_entries; i++, ex++) {
++              ext_debug(tree, "%d:%d:%d ",
++                              ex->ee_block, ex->ee_len, ex->ee_start);
++      }
++      ext_debug(tree, "\n");
++#endif
++}
++
++static void ext3_ext_drop_refs(struct ext3_ext_path *path)
++{
++      int depth = path->p_depth;
++      int i;
++
++      for (i = 0; i <= depth; i++, path++)
++              if (path->p_bh) {
++                      brelse(path->p_bh);
++                      path->p_bh = NULL;
++              }
++}
++
++/*
++ * binary search for closest index by given block
++ */
++static inline void
++ext3_ext_binsearch_idx(struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, int block)
++{
++      struct ext3_extent_header *eh = path->p_hdr;
++      struct ext3_extent_idx *ix;
++      int l = 0, k, r;
++
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++      EXT_ASSERT(eh->eh_entries > 0);
++
++      ext_debug(tree, "binsearch for %d(idx):  ", block);
++
++      path->p_idx = ix = EXT_FIRST_INDEX(eh);
++
++      r = k = eh->eh_entries;
++      while (k > 1) {
++              k = (r - l) / 2;
++              if (block < ix[l + k].ei_block)
++                      r -= k;
++              else
++                      l += k;
++              ext_debug(tree, "%d:%d:%d ", k, l, r);
++      }
++
++      ix += l;
++      path->p_idx = ix;
++      ext_debug(tree, "  -> %d->%d ", path->p_idx->ei_block, path->p_idx->ei_leaf);
++
++      while (l++ < r) {
++              if (block < ix->ei_block) 
++                      break;
++              path->p_idx = ix++;
++      }
++      ext_debug(tree, "  -> %d->%d\n", path->p_idx->ei_block,
++                      path->p_idx->ei_leaf);
++
++#ifdef CHECK_BINSEARCH 
++      {
++              struct ext3_extent_idx *chix;
++
++              chix = ix = EXT_FIRST_INDEX(eh);
++              for (k = 0; k < eh->eh_entries; k++, ix++) {
++                      if (k != 0 && ix->ei_block <= ix[-1].ei_block) {
++                              printk("k=%d, ix=0x%p, first=0x%p\n", k,
++                                      ix, EXT_FIRST_INDEX(eh));
++                              printk("%u <= %u\n",
++                                      ix->ei_block,ix[-1].ei_block);
++                      }
++                      EXT_ASSERT(k == 0 || ix->ei_block > ix[-1].ei_block);
++                      if (block < ix->ei_block) 
++                              break;
++                      chix = ix;
++              }
++              EXT_ASSERT(chix == path->p_idx);
++      }
++#endif
++
++}
++
++/*
++ * binary search for closest extent by given block
++ */
++static inline void
++ext3_ext_binsearch(struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, int block)
++{
++      struct ext3_extent_header *eh = path->p_hdr;
++      struct ext3_extent *ex;
++      int l = 0, k, r;
++
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++
++      if (eh->eh_entries == 0) {
++              /*
++               * this leaf is empty yet:
++               *  we get such a leaf in split/add case
++               */
++              return;
++      }
++      
++      ext_debug(tree, "binsearch for %d:  ", block);
++
++      path->p_ext = ex = EXT_FIRST_EXTENT(eh);
++
++      r = k = eh->eh_entries;
++      while (k > 1) {
++              k = (r - l) / 2;
++              if (block < ex[l + k].ee_block)
++                      r -= k;
++              else
++                      l += k;
++              ext_debug(tree, "%d:%d:%d ", k, l, r);
++      }
++
++      ex += l;
++      path->p_ext = ex;
++      ext_debug(tree, "  -> %d:%d:%d ", path->p_ext->ee_block,
++                      path->p_ext->ee_start, path->p_ext->ee_len);
++
++      while (l++ < r) {
++              if (block < ex->ee_block) 
++                      break;
++              path->p_ext = ex++;
++      }
++      ext_debug(tree, "  -> %d:%d:%d\n", path->p_ext->ee_block,
++                      path->p_ext->ee_start, path->p_ext->ee_len);
++
++#ifdef CHECK_BINSEARCH 
++      {
++              struct ext3_extent *chex;
++
++              chex = ex = EXT_FIRST_EXTENT(eh);
++              for (k = 0; k < eh->eh_entries; k++, ex++) {
++                      EXT_ASSERT(k == 0 || ex->ee_block > ex[-1].ee_block);
++                      if (block < ex->ee_block) 
++                              break;
++                      chex = ex;
++              }
++              EXT_ASSERT(chex == path->p_ext);
++      }
++#endif
++
++}
++
++int ext3_extent_tree_init(handle_t *handle, struct ext3_extents_tree *tree)
++{
++      struct ext3_extent_header *eh;
++
++      BUG_ON(tree->buffer_len == 0);
++      ext3_ext_get_access_for_root(handle, tree);
++      eh = EXT_ROOT_HDR(tree);
++      eh->eh_depth = 0;
++      eh->eh_entries = 0;
++      eh->eh_magic = EXT3_EXT_MAGIC;
++      eh->eh_max = ext3_ext_space_root(tree);
++      ext3_ext_mark_root_dirty(handle, tree);
++      ext3_ext_invalidate_cache(tree);
++      return 0;
++}
++
++struct ext3_ext_path *
++ext3_ext_find_extent(struct ext3_extents_tree *tree, int block,
++                      struct ext3_ext_path *path)
++{
++      struct ext3_extent_header *eh;
++      struct buffer_head *bh;
++      int depth, i, ppos = 0;
++
++      EXT_ASSERT(tree);
++      EXT_ASSERT(tree->inode);
++      EXT_ASSERT(tree->root);
++
++      eh = EXT_ROOT_HDR(tree);
++      EXT_ASSERT(eh);
++      i = depth = EXT_DEPTH(tree);
++      EXT_ASSERT(eh->eh_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(i == 0 || eh->eh_entries > 0);
++      
++      /* account possible depth increase */
++      if (!path) {
++              path = kmalloc(sizeof(struct ext3_ext_path) * (depth + 2),
++                              GFP_NOFS);
++              if (!path)
++                      return ERR_PTR(-ENOMEM);
++      }
++      memset(path, 0, sizeof(struct ext3_ext_path) * (depth + 1));
++      path[0].p_hdr = eh;
++
++      /* walk through the tree */
++      while (i) {
++              ext_debug(tree, "depth %d: num %d, max %d\n",
++                              ppos, eh->eh_entries, eh->eh_max);
++              ext3_ext_binsearch_idx(tree, path + ppos, block);
++              path[ppos].p_block = path[ppos].p_idx->ei_leaf;
++              path[ppos].p_depth = i;
++              path[ppos].p_ext = NULL;
++
++              bh = sb_bread(tree->inode->i_sb, path[ppos].p_block);
++              if (!bh) {
++                      ext3_ext_drop_refs(path);
++                      kfree(path);
++                      return ERR_PTR(-EIO);
++              }
++              eh = EXT_BLOCK_HDR(bh);
++              ppos++;
++              EXT_ASSERT(ppos <= depth);
++              path[ppos].p_bh = bh;
++              path[ppos].p_hdr = eh;
++              i--;
++      }
++
++      path[ppos].p_depth = i;
++      path[ppos].p_hdr = eh;
++      path[ppos].p_ext = NULL;
++
++      /* find extent */
++      ext3_ext_binsearch(tree, path + ppos, block);
++
++      ext3_ext_show_path(tree, path);
++
++      return path;
++}
++
++/*
++ * insert new index [logical;ptr] into the block at cupr
++ * it check where to insert: before curp or after curp
++ */
++static int ext3_ext_insert_index(handle_t *handle,
++                              struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *curp,
++                              int logical, int ptr)
++{
++      struct ext3_extent_idx *ix;
++      int len, err;
++
++      if ((err = ext3_ext_get_access(handle, tree, curp)))
++              return err;
++
++      EXT_ASSERT(logical != curp->p_idx->ei_block);
++      len = EXT_MAX_INDEX(curp->p_hdr) - curp->p_idx;
++      if (logical > curp->p_idx->ei_block) {
++              /* insert after */
++              if (curp->p_idx != EXT_LAST_INDEX(curp->p_hdr)) {
++                      len = (len - 1) * sizeof(struct ext3_extent_idx);
++                      len = len < 0 ? 0 : len;
++                      ext_debug(tree, "insert new index %d after: %d. "
++                                      "move %d from 0x%p to 0x%p\n",
++                                      logical, ptr, len,
++                                      (curp->p_idx + 1), (curp->p_idx + 2));
++                      memmove(curp->p_idx + 2, curp->p_idx + 1, len);
++              }
++              ix = curp->p_idx + 1;
++      } else {
++              /* insert before */
++              len = len * sizeof(struct ext3_extent_idx);
++              len = len < 0 ? 0 : len;
++              ext_debug(tree, "insert new index %d before: %d. "
++                              "move %d from 0x%p to 0x%p\n",
++                              logical, ptr, len,
++                              curp->p_idx, (curp->p_idx + 1));
++              memmove(curp->p_idx + 1, curp->p_idx, len);
++              ix = curp->p_idx;
++      }
++
++      ix->ei_block = logical;
++      ix->ei_leaf = ptr;
++      curp->p_hdr->eh_entries++;
++
++      EXT_ASSERT(curp->p_hdr->eh_entries <= curp->p_hdr->eh_max);
++      EXT_ASSERT(ix <= EXT_LAST_INDEX(curp->p_hdr));
++
++      err = ext3_ext_dirty(handle, tree, curp);
++      ext3_std_error(tree->inode->i_sb, err);
++
++      return err;
++}
++
++/*
++ * routine inserts new subtree into the path, using free index entry
++ * at depth 'at:
++ *  - allocates all needed blocks (new leaf and all intermediate index blocks)
++ *  - makes decision where to split
++ *  - moves remaining extens and index entries (right to the split point)
++ *    into the newly allocated blocks
++ *  - initialize subtree
++ */
++static int ext3_ext_split(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path,
++                              struct ext3_extent *newext, int at)
++{
++      struct buffer_head *bh = NULL;
++      int depth = EXT_DEPTH(tree);
++      struct ext3_extent_header *neh;
++      struct ext3_extent_idx *fidx;
++      struct ext3_extent *ex;
++      int i = at, k, m, a;
++      unsigned long newblock, oldblock, border;
++      int *ablocks = NULL; /* array of allocated blocks */
++      int err = 0;
++
++      /* make decision: where to split? */
++      /* FIXME: now desicion is simplest: at current extent */
++
++      /* if current leaf will be splitted, then we should use 
++       * border from split point */
++      EXT_ASSERT(path[depth].p_ext <= EXT_MAX_EXTENT(path[depth].p_hdr));
++      if (path[depth].p_ext != EXT_MAX_EXTENT(path[depth].p_hdr)) {
++              border = path[depth].p_ext[1].ee_block;
++              ext_debug(tree, "leaf will be splitted."
++                              " next leaf starts at %d\n",
++                              (int)border);
++      } else {
++              border = newext->ee_block;
++              ext_debug(tree, "leaf will be added."
++                              " next leaf starts at %d\n",
++                              (int)border);
++      }
++
++      /* 
++       * if error occurs, then we break processing
++       * and turn filesystem read-only. so, index won't
++       * be inserted and tree will be in consistent
++       * state. next mount will repair buffers too
++       */
++
++      /*
++       * get array to track all allocated blocks
++       * we need this to handle errors and free blocks
++       * upon them
++       */
++      ablocks = kmalloc(sizeof(unsigned long) * depth, GFP_NOFS);
++      if (!ablocks)
++              return -ENOMEM;
++      memset(ablocks, 0, sizeof(unsigned long) * depth);
++
++      /* allocate all needed blocks */
++      ext_debug(tree, "allocate %d blocks for indexes/leaf\n", depth - at);
++      for (a = 0; a < depth - at; a++) {
++              newblock = ext3_ext_new_block(handle, tree, path, newext, &err);
++              if (newblock == 0)
++                      goto cleanup;
++              ablocks[a] = newblock;
++      }
++
++      /* initialize new leaf */
++      newblock = ablocks[--a];
++      EXT_ASSERT(newblock);
++      bh = sb_getblk(tree->inode->i_sb, newblock);
++      if (!bh) {
++              err = -EIO;
++              goto cleanup;
++      }
++      lock_buffer(bh);
++
++      if ((err = ext3_journal_get_create_access(handle, bh)))
++              goto cleanup;
++
++      neh = EXT_BLOCK_HDR(bh);
++      neh->eh_entries = 0;
++      neh->eh_max = ext3_ext_space_block(tree);
++      neh->eh_magic = EXT3_EXT_MAGIC;
++      neh->eh_depth = 0;
++      ex = EXT_FIRST_EXTENT(neh);
++
++      /* move remain of path[depth] to the new leaf */
++      EXT_ASSERT(path[depth].p_hdr->eh_entries == path[depth].p_hdr->eh_max);
++      /* start copy from next extent */
++      /* TODO: we could do it by single memmove */
++      m = 0;
++      path[depth].p_ext++;
++      while (path[depth].p_ext <=
++                      EXT_MAX_EXTENT(path[depth].p_hdr)) {
++              ext_debug(tree, "move %d:%d:%d in new leaf %lu\n",
++                              path[depth].p_ext->ee_block,
++                              path[depth].p_ext->ee_start,
++                              path[depth].p_ext->ee_len,
++                              newblock);
++              memmove(ex++, path[depth].p_ext++,
++                              sizeof(struct ext3_extent));
++              neh->eh_entries++;
++              m++;
++      }
++      set_buffer_uptodate(bh);
++      unlock_buffer(bh);
++
++      if ((err = ext3_journal_dirty_metadata(handle, bh)))
++              goto cleanup;   
++      brelse(bh);
++      bh = NULL;
++
++      /* correct old leaf */
++      if (m) {
++              if ((err = ext3_ext_get_access(handle, tree, path + depth)))
++                      goto cleanup;
++              path[depth].p_hdr->eh_entries -= m;
++              if ((err = ext3_ext_dirty(handle, tree, path + depth)))
++                      goto cleanup;
++              
++      }
++
++      /* create intermediate indexes */
++      k = depth - at - 1;
++      EXT_ASSERT(k >= 0);
++      if (k)
++              ext_debug(tree, "create %d intermediate indices\n", k);
++      /* insert new index into current index block */
++      /* current depth stored in i var */
++      i = depth - 1;
++      while (k--) {
++              oldblock = newblock;
++              newblock = ablocks[--a];
++              bh = sb_getblk(tree->inode->i_sb, newblock);
++              if (!bh) {
++                      err = -EIO;
++                      goto cleanup;
++              }
++              lock_buffer(bh);
++
++              if ((err = ext3_journal_get_create_access(handle, bh)))
++                      goto cleanup;
++
++              neh = EXT_BLOCK_HDR(bh);
++              neh->eh_entries = 1;
++              neh->eh_magic = EXT3_EXT_MAGIC;
++              neh->eh_max = ext3_ext_space_block_idx(tree);
++              neh->eh_depth = depth - i; 
++              fidx = EXT_FIRST_INDEX(neh);
++              fidx->ei_block = border;
++              fidx->ei_leaf = oldblock;
++
++              ext_debug(tree, "int.index at %d (block %lu): %lu -> %lu\n",
++                              i, newblock, border, oldblock);
++              /* copy indexes */
++              m = 0;
++              path[i].p_idx++;
++
++              ext_debug(tree, "cur 0x%p, last 0x%p\n", path[i].p_idx,
++                              EXT_MAX_INDEX(path[i].p_hdr));
++              EXT_ASSERT(EXT_MAX_INDEX(path[i].p_hdr) ==
++                              EXT_LAST_INDEX(path[i].p_hdr));
++              while (path[i].p_idx <= EXT_MAX_INDEX(path[i].p_hdr)) {
++                      ext_debug(tree, "%d: move %d:%d in new index %lu\n",
++                                      i, path[i].p_idx->ei_block,
++                                      path[i].p_idx->ei_leaf, newblock);
++                      memmove(++fidx, path[i].p_idx++,
++                                      sizeof(struct ext3_extent_idx));
++                      neh->eh_entries++;
++                      EXT_ASSERT(neh->eh_entries <= neh->eh_max);
++                      m++;
++              }
++              set_buffer_uptodate(bh);
++              unlock_buffer(bh);
++
++              if ((err = ext3_journal_dirty_metadata(handle, bh)))
++                      goto cleanup;
++              brelse(bh);
++              bh = NULL;
++
++              /* correct old index */
++              if (m) {
++                      err = ext3_ext_get_access(handle, tree, path + i);
++                      if (err)
++                              goto cleanup;
++                      path[i].p_hdr->eh_entries -= m;
++                      err = ext3_ext_dirty(handle, tree, path + i);
++                      if (err)
++                              goto cleanup;
++              }
++
++              i--;
++      }
++
++      /* insert new index */
++      if (!err)
++              err = ext3_ext_insert_index(handle, tree, path + at,
++                                              border, newblock);
++
++cleanup:
++      if (bh) {
++              if (buffer_locked(bh))
++                      unlock_buffer(bh);
++              brelse(bh);
++      }
++
++      if (err) {
++              /* free all allocated blocks in error case */
++              for (i = 0; i < depth; i++) {
++                      if (!ablocks[i])
++                              continue;
++                      ext3_free_blocks(handle, tree->inode, ablocks[i], 1);
++              }
++      }
++      kfree(ablocks);
++
++      return err;
++}
++
++/*
++ * routine implements tree growing procedure:
++ *  - allocates new block
++ *  - moves top-level data (index block or leaf) into the new block
++ *  - initialize new top-level, creating index that points to the
++ *    just created block
++ */
++static int ext3_ext_grow_indepth(handle_t *handle,
++                                      struct ext3_extents_tree *tree,
++                                      struct ext3_ext_path *path,
++                                      struct ext3_extent *newext)
++{
++      struct ext3_ext_path *curp = path;
++      struct ext3_extent_header *neh;
++      struct ext3_extent_idx *fidx;
++      struct buffer_head *bh;
++      unsigned long newblock;
++      int err = 0;
++
++      newblock = ext3_ext_new_block(handle, tree, path, newext, &err);
++      if (newblock == 0)
++              return err;
++
++      bh = sb_getblk(tree->inode->i_sb, newblock);
++      if (!bh) {
++              err = -EIO;
++              ext3_std_error(tree->inode->i_sb, err);
++              return err;
++      }
++      lock_buffer(bh);
++
++      if ((err = ext3_journal_get_create_access(handle, bh))) {
++              unlock_buffer(bh);
++              goto out;       
++      }
++
++      /* move top-level index/leaf into new block */
++      memmove(bh->b_data, curp->p_hdr, tree->buffer_len);
++
++      /* set size of new block */
++      neh = EXT_BLOCK_HDR(bh);
++      /* old root could have indexes or leaves
++       * so calculate e_max right way */
++      if (EXT_DEPTH(tree))
++              neh->eh_max = ext3_ext_space_block_idx(tree);
++      else
++              neh->eh_max = ext3_ext_space_block(tree);
++      neh->eh_magic = EXT3_EXT_MAGIC;
++      set_buffer_uptodate(bh);
++      unlock_buffer(bh);
++
++      if ((err = ext3_journal_dirty_metadata(handle, bh)))
++              goto out;
++
++      /* create index in new top-level index: num,max,pointer */
++      if ((err = ext3_ext_get_access(handle, tree, curp)))
++              goto out;
++
++      curp->p_hdr->eh_magic = EXT3_EXT_MAGIC;
++      curp->p_hdr->eh_max = ext3_ext_space_root_idx(tree);
++      curp->p_hdr->eh_entries = 1;
++      curp->p_idx = EXT_FIRST_INDEX(curp->p_hdr);
++      /* FIXME: it works, but actually path[0] can be index */
++      curp->p_idx->ei_block = EXT_FIRST_EXTENT(path[0].p_hdr)->ee_block;
++      curp->p_idx->ei_leaf = newblock;
++
++      neh = EXT_ROOT_HDR(tree);
++      fidx = EXT_FIRST_INDEX(neh);
++      ext_debug(tree, "new root: num %d(%d), lblock %d, ptr %d\n",
++                      neh->eh_entries, neh->eh_max, fidx->ei_block, fidx->ei_leaf); 
++
++      neh->eh_depth = path->p_depth + 1;
++      err = ext3_ext_dirty(handle, tree, curp);
++out:
++      brelse(bh);
++
++      return err;
++}
++
++/*
++ * routine finds empty index and adds new leaf. if no free index found
++ * then it requests in-depth growing
++ */
++static int ext3_ext_create_new_leaf(handle_t *handle,
++                                      struct ext3_extents_tree *tree,
++                                      struct ext3_ext_path *path,
++                                      struct ext3_extent *newext)
++{
++      struct ext3_ext_path *curp;
++      int depth, i, err = 0;
++
++repeat:
++      i = depth = EXT_DEPTH(tree);
++      
++      /* walk up to the tree and look for free index entry */
++      curp = path + depth;
++      while (i > 0 && !EXT_HAS_FREE_INDEX(curp)) {
++              i--;
++              curp--;
++      }
++
++      /* we use already allocated block for index block
++       * so, subsequent data blocks should be contigoues */
++      if (EXT_HAS_FREE_INDEX(curp)) {
++              /* if we found index with free entry, then use that
++               * entry: create all needed subtree and add new leaf */
++              err = ext3_ext_split(handle, tree, path, newext, i);
++
++              /* refill path */
++              ext3_ext_drop_refs(path);
++              path = ext3_ext_find_extent(tree, newext->ee_block, path);
++              if (IS_ERR(path))
++                      err = PTR_ERR(path);
++      } else {
++              /* tree is full, time to grow in depth */
++              err = ext3_ext_grow_indepth(handle, tree, path, newext);
++
++              /* refill path */
++              ext3_ext_drop_refs(path);
++              path = ext3_ext_find_extent(tree, newext->ee_block, path);
++              if (IS_ERR(path))
++                      err = PTR_ERR(path);
++
++              /*
++               * only first (depth 0 -> 1) produces free space
++               * in all other cases we have to split growed tree
++               */
++              depth = EXT_DEPTH(tree);
++              if (path[depth].p_hdr->eh_entries == path[depth].p_hdr->eh_max) {
++                      /* now we need split */
++                      goto repeat;
++              }
++      }
++
++      if (err)
++              return err;
++
++      return 0;
++}
++
++/*
++ * returns allocated block in subsequent extent or EXT_MAX_BLOCK
++ * NOTE: it consider block number from index entry as
++ * allocated block. thus, index entries have to be consistent
++ * with leafs
++ */
++static unsigned long
++ext3_ext_next_allocated_block(struct ext3_ext_path *path)
++{
++      int depth;
++
++      EXT_ASSERT(path != NULL);
++      depth = path->p_depth;
++
++      if (depth == 0 && path->p_ext == NULL)
++              return EXT_MAX_BLOCK;
++
++      /* FIXME: what if index isn't full ?! */
++      while (depth >= 0) {
++              if (depth == path->p_depth) {
++                      /* leaf */
++                      if (path[depth].p_ext !=
++                                      EXT_LAST_EXTENT(path[depth].p_hdr))
++                              return path[depth].p_ext[1].ee_block;
++              } else {
++                      /* index */
++                      if (path[depth].p_idx !=
++                                      EXT_LAST_INDEX(path[depth].p_hdr))
++                              return path[depth].p_idx[1].ei_block;
++              }
++              depth--;        
++      }
++
++      return EXT_MAX_BLOCK;
++}
++
++/*
++ * returns first allocated block from next leaf or EXT_MAX_BLOCK
++ */
++static unsigned ext3_ext_next_leaf_block(struct ext3_extents_tree *tree,
++                                               struct ext3_ext_path *path)
++{
++      int depth;
++
++      EXT_ASSERT(path != NULL);
++      depth = path->p_depth;
++
++      /* zero-tree has no leaf blocks at all */
++      if (depth == 0)
++              return EXT_MAX_BLOCK;
++
++      /* go to index block */
++      depth--;
++      
++      while (depth >= 0) {
++              if (path[depth].p_idx !=
++                              EXT_LAST_INDEX(path[depth].p_hdr))
++                      return path[depth].p_idx[1].ei_block;
++              depth--;        
++      }
++
++      return EXT_MAX_BLOCK;
++}
++
++/*
++ * if leaf gets modified and modified extent is first in the leaf
++ * then we have to correct all indexes above
++ * TODO: do we need to correct tree in all cases?
++ */
++int ext3_ext_correct_indexes(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++      struct ext3_extent_header *eh;
++      int depth = EXT_DEPTH(tree);    
++      struct ext3_extent *ex;
++      unsigned long border;
++      int k, err = 0;
++      
++      eh = path[depth].p_hdr;
++      ex = path[depth].p_ext;
++      EXT_ASSERT(ex);
++      EXT_ASSERT(eh);
++      
++      if (depth == 0) {
++              /* there is no tree at all */
++              return 0;
++      }
++      
++      if (ex != EXT_FIRST_EXTENT(eh)) {
++              /* we correct tree if first leaf got modified only */
++              return 0;
++      }
++      
++      /*
++       * TODO: we need correction if border is smaller then current one
++       */
++      k = depth - 1;
++      border = path[depth].p_ext->ee_block;
++      if ((err = ext3_ext_get_access(handle, tree, path + k)))
++              return err;
++      path[k].p_idx->ei_block = border;
++      if ((err = ext3_ext_dirty(handle, tree, path + k)))
++              return err;
++
++      while (k--) {
++              /* change all left-side indexes */
++              if (path[k+1].p_idx != EXT_FIRST_INDEX(path[k+1].p_hdr))
++                      break;
++              if ((err = ext3_ext_get_access(handle, tree, path + k)))
++                      break;
++              path[k].p_idx->ei_block = border;
++              if ((err = ext3_ext_dirty(handle, tree, path + k)))
++                      break;
++      }
++
++      return err;
++}
++
++static int inline
++ext3_can_extents_be_merged(struct ext3_extents_tree *tree,
++                              struct ext3_extent *ex1,
++                              struct ext3_extent *ex2)
++{
++      if (ex1->ee_block + ex1->ee_len != ex2->ee_block)
++              return 0;
++
++#ifdef AGRESSIVE_TEST
++      if (ex1->ee_len >= 4)
++              return 0;
++#endif
++
++      if (!tree->ops->mergable)
++              return 1;
++
++      return tree->ops->mergable(ex1, ex2);
++}
++
++/*
++ * this routine tries to merge requsted extent into the existing
++ * extent or inserts requested extent as new one into the tree,
++ * creating new leaf in no-space case
++ */
++int ext3_ext_insert_extent(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path,
++                              struct ext3_extent *newext)
++{
++      struct ext3_extent_header * eh;
++      struct ext3_extent *ex, *fex;
++      struct ext3_extent *nearex; /* nearest extent */
++      struct ext3_ext_path *npath = NULL;
++      int depth, len, err, next;
++
++      EXT_ASSERT(newext->ee_len > 0);
++      EXT_ASSERT(newext->ee_len < EXT_CACHE_MARK);
++      depth = EXT_DEPTH(tree);
++      ex = path[depth].p_ext;
++      EXT_ASSERT(path[depth].p_hdr);
++
++      /* try to insert block into found extent and return */
++      if (ex && ext3_can_extents_be_merged(tree, ex, newext)) {
++              ext_debug(tree, "append %d block to %d:%d (from %d)\n",
++                              newext->ee_len, ex->ee_block, ex->ee_len,
++                              ex->ee_start);
++              if ((err = ext3_ext_get_access(handle, tree, path + depth)))
++                      return err;
++              ex->ee_len += newext->ee_len;
++              eh = path[depth].p_hdr;
++              nearex = ex;
++              goto merge;
++      }
++
++repeat:
++      depth = EXT_DEPTH(tree);
++      eh = path[depth].p_hdr;
++      if (eh->eh_entries < eh->eh_max)
++              goto has_space;
++
++      /* probably next leaf has space for us? */
++      fex = EXT_LAST_EXTENT(eh);
++      next = ext3_ext_next_leaf_block(tree, path);
++      if (newext->ee_block > fex->ee_block && next != EXT_MAX_BLOCK) {
++              ext_debug(tree, "next leaf block - %d\n", next);
++              EXT_ASSERT(!npath);
++              npath = ext3_ext_find_extent(tree, next, NULL);
++              if (IS_ERR(npath))
++                      return PTR_ERR(npath);
++              EXT_ASSERT(npath->p_depth == path->p_depth);
++              eh = npath[depth].p_hdr;
++              if (eh->eh_entries < eh->eh_max) {
++                      ext_debug(tree, "next leaf isnt full(%d)\n",
++                                      eh->eh_entries);
++                      path = npath;
++                      goto repeat;
++              }
++              ext_debug(tree, "next leaf hasno free space(%d,%d)\n",
++                              eh->eh_entries, eh->eh_max);
++      }
++
++      /*
++       * there is no free space in found leaf
++       * we're gonna add new leaf in the tree
++       */
++      err = ext3_ext_create_new_leaf(handle, tree, path, newext);
++      if (err)
++              goto cleanup;
++      depth = EXT_DEPTH(tree);
++      eh = path[depth].p_hdr;
++
++has_space:
++      nearex = path[depth].p_ext;
++
++      if ((err = ext3_ext_get_access(handle, tree, path + depth)))
++              goto cleanup;
++
++      if (!nearex) {
++              /* there is no extent in this leaf, create first one */
++              ext_debug(tree, "first extent in the leaf: %d:%d:%d\n",
++                              newext->ee_block, newext->ee_start,
++                              newext->ee_len);
++              path[depth].p_ext = EXT_FIRST_EXTENT(eh);
++      } else if (newext->ee_block > nearex->ee_block) {
++              EXT_ASSERT(newext->ee_block != nearex->ee_block);
++              if (nearex != EXT_LAST_EXTENT(eh)) {
++                      len = EXT_MAX_EXTENT(eh) - nearex;
++                      len = (len - 1) * sizeof(struct ext3_extent);
++                      len = len < 0 ? 0 : len;
++                      ext_debug(tree, "insert %d:%d:%d after: nearest 0x%p, "
++                                      "move %d from 0x%p to 0x%p\n",
++                                      newext->ee_block, newext->ee_start,
++                                      newext->ee_len,
++                                      nearex, len, nearex + 1, nearex + 2);
++                      memmove(nearex + 2, nearex + 1, len);
++              }
++              path[depth].p_ext = nearex + 1;
++      } else {
++              EXT_ASSERT(newext->ee_block != nearex->ee_block);
++              len = (EXT_MAX_EXTENT(eh) - nearex) * sizeof(struct ext3_extent);
++              len = len < 0 ? 0 : len;
++              ext_debug(tree, "insert %d:%d:%d before: nearest 0x%p, "
++                              "move %d from 0x%p to 0x%p\n",
++                              newext->ee_block, newext->ee_start, newext->ee_len,
++                              nearex, len, nearex + 1, nearex + 2);
++              memmove(nearex + 1, nearex, len);
++              path[depth].p_ext = nearex;
++      }
++
++      eh->eh_entries++;
++      nearex = path[depth].p_ext;
++      nearex->ee_block = newext->ee_block;
++      nearex->ee_start = newext->ee_start;
++      nearex->ee_len = newext->ee_len;
++      /* FIXME: support for large fs */
++      nearex->ee_start_hi = 0;
++
++merge:
++      /* try to merge extents to the right */
++      while (nearex < EXT_LAST_EXTENT(eh)) {
++              if (!ext3_can_extents_be_merged(tree, nearex, nearex + 1))
++                      break;
++              /* merge with next extent! */
++              nearex->ee_len += nearex[1].ee_len;
++              if (nearex + 1 < EXT_LAST_EXTENT(eh)) {
++                      len = (EXT_LAST_EXTENT(eh) - nearex - 1)
++                                      * sizeof(struct ext3_extent);
++                      memmove(nearex + 1, nearex + 2, len);
++              }
++              eh->eh_entries--;
++              EXT_ASSERT(eh->eh_entries > 0);
++      }
++
++      /* try to merge extents to the left */
++
++      /* time to correct all indexes above */
++      err = ext3_ext_correct_indexes(handle, tree, path);
++      if (err)
++              goto cleanup;
++
++      err = ext3_ext_dirty(handle, tree, path + depth);
++
++cleanup:
++      if (npath) {
++              ext3_ext_drop_refs(npath);
++              kfree(npath);
++      }
++      ext3_ext_tree_changed(tree);
++      ext3_ext_invalidate_cache(tree);
++      return err;
++}
++
++int ext3_ext_walk_space(struct ext3_extents_tree *tree, unsigned long block,
++                      unsigned long num, ext_prepare_callback func)
++{
++      struct ext3_ext_path *path = NULL;
++      struct ext3_extent *ex, cbex;
++      unsigned long next, start = 0, end = 0;
++      unsigned long last = block + num;
++      int depth, exists, err = 0;
++
++      EXT_ASSERT(tree);
++      EXT_ASSERT(func);
++      EXT_ASSERT(tree->inode);
++      EXT_ASSERT(tree->root);
++
++      while (block < last && block != EXT_MAX_BLOCK) {
++              num = last - block;
++              /* find extent for this block */
++              path = ext3_ext_find_extent(tree, block, path);
++              if (IS_ERR(path)) {
++                      err = PTR_ERR(path);
++                      path = NULL;
++                      break;
++              }
++
++              depth = EXT_DEPTH(tree);
++              EXT_ASSERT(path[depth].p_hdr);
++              ex = path[depth].p_ext;
++              next = ext3_ext_next_allocated_block(path);
++
++              exists = 0;
++              if (!ex) {
++                      /* there is no extent yet, so try to allocate
++                       * all requested space */
++                      start = block;
++                      end = block + num;
++              } else if (ex->ee_block > block) {
++                      /* need to allocate space before found extent */
++                      start = block;
++                      end = ex->ee_block;
++                      if (block + num < end)
++                              end = block + num;
++              } else if (block >= ex->ee_block + ex->ee_len) {
++                      /* need to allocate space after found extent */
++                      start = block;
++                      end = block + num;
++                      if (end >= next)
++                              end = next;
++              } else if (block >= ex->ee_block) {
++                      /* 
++                       * some part of requested space is covered
++                       * by found extent
++                       */
++                      start = block;
++                      end = ex->ee_block + ex->ee_len;
++                      if (block + num < end)
++                              end = block + num;
++                      exists = 1;
++              } else {
++                      BUG();
++              }
++              EXT_ASSERT(end > start);
++
++              if (!exists) {
++                      cbex.ee_block = start;
++                      cbex.ee_len = end - start;
++                      cbex.ee_start = 0;
++              } else
++                      cbex = *ex;
++
++              EXT_ASSERT(path[depth].p_hdr);
++              err = func(tree, path, &cbex, exists);
++              ext3_ext_drop_refs(path);
++
++              if (err < 0)
++                      break;
++              if (err == EXT_REPEAT)
++                      continue;
++              else if (err == EXT_BREAK) {
++                      err = 0;
++                      break;
++              }
++
++              if (EXT_DEPTH(tree) != depth) {
++                      /* depth was changed. we have to realloc path */
++                      kfree(path);
++                      path = NULL;
++              }
++
++              block = cbex.ee_block + cbex.ee_len;
++      }
++
++      if (path) {
++              ext3_ext_drop_refs(path);
++              kfree(path);
++      }
++
++      return err;
++}
++
++static inline void
++ext3_ext_put_in_cache(struct ext3_extents_tree *tree, struct ext3_extent *ex)
++{
++      if (tree->cex) {
++              EXT_ASSERT(ex);
++              EXT_ASSERT(ex->ee_len);
++              tree->cex->ee_block = ex->ee_block;
++              tree->cex->ee_start = ex->ee_start;
++              tree->cex->ee_len = ex->ee_len;
++      }
++}
++
++/*
++ * this routine calculate boundaries of the gap requested block fits into
++ * and cache this gap
++ */
++static inline void
++ext3_ext_put_gap_in_cache(struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path,
++                              unsigned long block)
++{
++      int depth = EXT_DEPTH(tree);
++      struct ext3_extent *ex, gex;
++
++      if (!tree->cex)
++              return;
++
++      ex = path[depth].p_ext;
++      if (ex == NULL) {
++              /* there is no extent yet, so gap is [0;-] */
++              gex.ee_block = 0;
++              gex.ee_len = EXT_CACHE_MARK;
++              ext_debug(tree, "cache gap(whole file):");
++      } else if (block < ex->ee_block) {
++              gex.ee_block = block;
++              gex.ee_len = ex->ee_block - block;
++              ext_debug(tree, "cache gap(before): %lu [%lu:%lu]",
++                              (unsigned long) block,
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len);
++      } else if (block >= ex->ee_block + ex->ee_len) {
++              gex.ee_block = ex->ee_block + ex->ee_len;
++              gex.ee_len = ext3_ext_next_allocated_block(path);
++              ext_debug(tree, "cache gap(after): [%lu:%lu] %lu",
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len,
++                              (unsigned long) block);
++              EXT_ASSERT(gex.ee_len > gex.ee_block);
++              gex.ee_len = gex.ee_len - gex.ee_block;
++      } else {
++              BUG();
++      }
++
++      ext_debug(tree, " -> %lu:%lu\n", (unsigned long) gex.ee_block,
++                      (unsigned long) gex.ee_len);
++      gex.ee_start = EXT_CACHE_MARK;
++      ext3_ext_put_in_cache(tree, &gex);
++}
++
++static inline int
++ext3_ext_in_cache(struct ext3_extents_tree *tree, unsigned long block,
++                      struct ext3_extent *ex)
++{
++      struct ext3_extent *cex = tree->cex;
++
++      /* is there cache storage at all? */
++      if (!cex)
++              return 0;
++
++      /* has cache valid data? */
++      if (cex->ee_len == 0)
++              return 0;
++
++      if (block >= cex->ee_block && block < cex->ee_block + cex->ee_len) {
++              ex->ee_block = cex->ee_block;
++              ex->ee_start = cex->ee_start;
++              ex->ee_len = cex->ee_len;
++              ext_debug(tree, "%lu cached by %lu:%lu:%lu\n",
++                              (unsigned long) block,
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len,
++                              (unsigned long) ex->ee_start);
++              return 1;
++      }
++
++      /* not in cache */
++      return 0;
++}
++
++/*
++ * routine removes index from the index block
++ * it's used in truncate case only. thus all requests are for
++ * last index in the block only
++ */
++int ext3_ext_rm_idx(handle_t *handle, struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path)
++{
++      struct buffer_head *bh;
++      int err;
++      
++      /* free index block */
++      path--;
++      EXT_ASSERT(path->p_hdr->eh_entries);
++      if ((err = ext3_ext_get_access(handle, tree, path)))
++              return err;
++      path->p_hdr->eh_entries--;
++      if ((err = ext3_ext_dirty(handle, tree, path)))
++              return err;
++      ext_debug(tree, "index is empty, remove it, free block %d\n",
++                      path->p_idx->ei_leaf);
++      bh = sb_find_get_block(tree->inode->i_sb, path->p_idx->ei_leaf);
++      ext3_forget(handle, 1, tree->inode, bh, path->p_idx->ei_leaf);
++      ext3_free_blocks(handle, tree->inode, path->p_idx->ei_leaf, 1);
++      return err;
++}
++
++int ext3_ext_calc_credits_for_insert(struct ext3_extents_tree *tree,
++                                      struct ext3_ext_path *path)
++{
++      int depth = EXT_DEPTH(tree);
++      int needed;
++
++      if (path) {
++              /* probably there is space in leaf? */
++              if (path[depth].p_hdr->eh_entries < path[depth].p_hdr->eh_max)
++                      return 1;
++      }
++      
++      /*
++       * the worste case we're expecting is creation of the
++       * new root (growing in depth) with index splitting
++       * for splitting we have to consider depth + 1 because
++       * previous growing could increase it
++       */
++      depth = depth + 1;
++
++      /* 
++       * growing in depth:
++       * block allocation + new root + old root
++       */
++      needed = EXT3_ALLOC_NEEDED + 2;
++
++      /* index split. we may need:
++       *   allocate intermediate indexes and new leaf
++       *   change two blocks at each level, but root
++       *   modify root block (inode)
++       */
++      needed += (depth * EXT3_ALLOC_NEEDED) + (2 * depth) + 1;
++
++      return needed;
++}
++
++static int
++ext3_ext_split_for_rm(handle_t *handle, struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, unsigned long start,
++                      unsigned long end)
++{
++      struct ext3_extent *ex, tex;
++      struct ext3_ext_path *npath;
++      int depth, creds, err;
++
++      depth = EXT_DEPTH(tree);
++      ex = path[depth].p_ext;
++      EXT_ASSERT(ex);
++      EXT_ASSERT(end < ex->ee_block + ex->ee_len - 1);
++      EXT_ASSERT(ex->ee_block < start);
++
++      /* calculate tail extent */
++      tex.ee_block = end + 1;
++      EXT_ASSERT(tex.ee_block < ex->ee_block + ex->ee_len);
++      tex.ee_len = ex->ee_block + ex->ee_len - tex.ee_block;
++
++      creds = ext3_ext_calc_credits_for_insert(tree, path);
++      handle = ext3_ext_journal_restart(handle, creds);
++      if (IS_ERR(handle))
++              return PTR_ERR(handle);
++      
++      /* calculate head extent. use primary extent */
++      err = ext3_ext_get_access(handle, tree, path + depth);
++      if (err)
++              return err;
++      ex->ee_len = start - ex->ee_block;
++      err = ext3_ext_dirty(handle, tree, path + depth);
++      if (err)
++              return err;
++
++      /* FIXME: some callback to free underlying resource
++       * and correct ee_start? */
++      ext_debug(tree, "split extent: head %u:%u, tail %u:%u\n",
++                      ex->ee_block, ex->ee_len, tex.ee_block, tex.ee_len);
++
++      npath = ext3_ext_find_extent(tree, ex->ee_block, NULL);
++      if (IS_ERR(npath))
++              return PTR_ERR(npath);
++      depth = EXT_DEPTH(tree);
++      EXT_ASSERT(npath[depth].p_ext->ee_block == ex->ee_block);
++      EXT_ASSERT(npath[depth].p_ext->ee_len == ex->ee_len);
++
++      err = ext3_ext_insert_extent(handle, tree, npath, &tex);
++      ext3_ext_drop_refs(npath);
++      kfree(npath);
++
++      return err;
++                      
++}
++
++static int
++ext3_ext_rm_leaf(handle_t *handle, struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, unsigned long start,
++                      unsigned long end)
++{
++      struct ext3_extent *ex, *fu = NULL, *lu, *le;
++      int err = 0, correct_index = 0;
++      int depth = EXT_DEPTH(tree), credits;
++      struct ext3_extent_header *eh;
++      unsigned a, b, block, num;
++
++      ext_debug(tree, "remove [%lu:%lu] in leaf\n", start, end);
++      if (!path[depth].p_hdr)
++              path[depth].p_hdr = EXT_BLOCK_HDR(path[depth].p_bh);
++      eh = path[depth].p_hdr;
++      EXT_ASSERT(eh);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      
++      /* find where to start removing */
++      le = ex = EXT_LAST_EXTENT(eh);
++      while (ex != EXT_FIRST_EXTENT(eh)) {
++              if (ex->ee_block <= end)
++                      break;
++              ex--;
++      }
++
++      if (start > ex->ee_block && end < ex->ee_block + ex->ee_len - 1) {
++              /* removal of internal part of the extent requested
++               * tail and head must be placed in different extent
++               * so, we have to insert one more extent */
++              path[depth].p_ext = ex;
++              return ext3_ext_split_for_rm(handle, tree, path, start, end);
++      }
++      
++      lu = ex;
++      while (ex >= EXT_FIRST_EXTENT(eh) &&
++                      ex->ee_block + ex->ee_len > start) {
++              ext_debug(tree, "remove ext %u:%u\n", ex->ee_block, ex->ee_len);
++              path[depth].p_ext = ex;
++      
++              a = ex->ee_block > start ? ex->ee_block : start;
++              b = ex->ee_block + ex->ee_len - 1 < end ?
++                      ex->ee_block + ex->ee_len - 1 : end;
++              
++              ext_debug(tree, "  border %u:%u\n", a, b);
++
++              if (a != ex->ee_block && b != ex->ee_block + ex->ee_len - 1) {
++                      block = 0;
++                      num = 0;
++                      BUG();
++              } else if (a != ex->ee_block) {
++                      /* remove tail of the extent */
++                      block = ex->ee_block;
++                      num = a - block;
++              } else if (b != ex->ee_block + ex->ee_len - 1) {
++                      /* remove head of the extent */
++                      block = a;
++                      num = b - a;
++              } else {
++                      /* remove whole extent: excelent! */
++                      block = ex->ee_block; 
++                      num = 0;
++                      EXT_ASSERT(a == ex->ee_block &&
++                                      b == ex->ee_block + ex->ee_len - 1);
++              }
++
++              if (ex == EXT_FIRST_EXTENT(eh))
++                      correct_index = 1;
++
++              credits = 1;
++              if (correct_index)
++                      credits += (EXT_DEPTH(tree) * EXT3_ALLOC_NEEDED) + 1;
++              if (tree->ops->remove_extent_credits)
++                      credits+=tree->ops->remove_extent_credits(tree,ex,a,b);
++              
++              handle = ext3_ext_journal_restart(handle, credits);
++              if (IS_ERR(handle)) {
++                      err = PTR_ERR(handle);
++                      goto out;
++              }
++
++              err = ext3_ext_get_access(handle, tree, path + depth);
++              if (err)
++                      goto out;
++
++              if (tree->ops->remove_extent)
++                      err = tree->ops->remove_extent(tree, ex, a, b);
++              if (err)
++                      goto out;
++
++              if (num == 0) {
++                      /* this extent is removed entirely mark slot unused */
++                      ex->ee_start = 0;
++                      eh->eh_entries--;
++                      fu = ex;
++              }
++
++              ex->ee_block = block;
++              ex->ee_len = num;
++
++              err = ext3_ext_dirty(handle, tree, path + depth);
++              if (err)
++                      goto out;
++
++              ext_debug(tree, "new extent: %u:%u:%u\n",
++                              ex->ee_block, ex->ee_len, ex->ee_start);
++              ex--;
++      }
++
++      if (fu) {
++              /* reuse unused slots */
++              while (lu < le) {
++                      if (lu->ee_start) {
++                              *fu = *lu;
++                              lu->ee_start = 0;
++                              fu++;
++                      }
++                      lu++;
++              }
++      }
++
++      if (correct_index && eh->eh_entries)
++              err = ext3_ext_correct_indexes(handle, tree, path);
++
++      /* if this leaf is free, then we should
++       * remove it from index block above */
++      if (err == 0 && eh->eh_entries == 0 && path[depth].p_bh != NULL)
++              err = ext3_ext_rm_idx(handle, tree, path + depth);
++
++out:
++      return err;
++}
++
++
++static struct ext3_extent_idx *
++ext3_ext_last_covered(struct ext3_extent_header *hdr, unsigned long block)
++{
++      struct ext3_extent_idx *ix;
++      
++      ix = EXT_LAST_INDEX(hdr);
++      while (ix != EXT_FIRST_INDEX(hdr)) {
++              if (ix->ei_block <= block)
++                      break;
++              ix--;
++      }
++      return ix;
++}
++
++/*
++ * returns 1 if current index have to be freed (even partial)
++ */
++static int inline
++ext3_ext_more_to_rm(struct ext3_ext_path *path)
++{
++      EXT_ASSERT(path->p_idx);
++
++      if (path->p_idx < EXT_FIRST_INDEX(path->p_hdr))
++              return 0;
++
++      /*
++       * if truncate on deeper level happened it it wasn't partial
++       * so we have to consider current index for truncation
++       */
++      if (path->p_hdr->eh_entries == path->p_block)
++              return 0;
++      return 1;
++}
++
++int ext3_ext_remove_space(struct ext3_extents_tree *tree,
++                              unsigned long start, unsigned long end)
++{
++      struct inode *inode = tree->inode;
++      struct super_block *sb = inode->i_sb;
++      int depth = EXT_DEPTH(tree);
++      struct ext3_ext_path *path;
++      handle_t *handle;
++      int i = 0, err = 0;
++
++      ext_debug(tree, "space to be removed: %lu:%lu\n", start, end);
++
++      /* probably first extent we're gonna free will be last in block */
++      handle = ext3_journal_start(inode, depth + 1);
++      if (IS_ERR(handle))
++              return PTR_ERR(handle);
++
++      ext3_ext_invalidate_cache(tree);
++
++      /*
++       * we start scanning from right side freeing all the blocks
++       * after i_size and walking into the deep
++       */
++      path = kmalloc(sizeof(struct ext3_ext_path) * (depth + 1), GFP_KERNEL);
++      if (IS_ERR(path)) {
++              ext3_error(sb, "ext3_ext_remove_space",
++                              "Can't allocate path array");
++              ext3_journal_stop(handle);
++              return -ENOMEM;
++      }
++      memset(path, 0, sizeof(struct ext3_ext_path) * (depth + 1));
++      path[i].p_hdr = EXT_ROOT_HDR(tree);
++      
++      while (i >= 0 && err == 0) {
++              if (i == depth) {
++                      /* this is leaf block */
++                      err = ext3_ext_rm_leaf(handle, tree, path, start, end);
++                      /* root level have p_bh == NULL, brelse() eats this */
++                      brelse(path[i].p_bh);
++                      i--;
++                      continue;
++              }
++              
++              /* this is index block */
++              if (!path[i].p_hdr) {
++                      ext_debug(tree, "initialize header\n");
++                      path[i].p_hdr = EXT_BLOCK_HDR(path[i].p_bh);
++              }
++
++              EXT_ASSERT(path[i].p_hdr->eh_entries <= path[i].p_hdr->eh_max);
++              EXT_ASSERT(path[i].p_hdr->eh_magic == EXT3_EXT_MAGIC);
++              
++              if (!path[i].p_idx) {
++                      /* this level hasn't touched yet */
++                      path[i].p_idx =
++                              ext3_ext_last_covered(path[i].p_hdr, end);
++                      path[i].p_block = path[i].p_hdr->eh_entries + 1;
++                      ext_debug(tree, "init index ptr: hdr 0x%p, num %d\n",
++                                      path[i].p_hdr, path[i].p_hdr->eh_entries);
++              } else {
++                      /* we've already was here, see at next index */
++                      path[i].p_idx--;
++              }
++
++              ext_debug(tree, "level %d - index, first 0x%p, cur 0x%p\n",
++                              i, EXT_FIRST_INDEX(path[i].p_hdr),
++                              path[i].p_idx);
++              if (ext3_ext_more_to_rm(path + i)) {
++                      /* go to the next level */
++                      ext_debug(tree, "move to level %d (block %d)\n",
++                                      i + 1, path[i].p_idx->ei_leaf);
++                      memset(path + i + 1, 0, sizeof(*path));
++                      path[i+1].p_bh = sb_bread(sb, path[i].p_idx->ei_leaf);
++                      if (!path[i+1].p_bh) {
++                              /* should we reset i_size? */
++                              err = -EIO;
++                              break;
++                      }
++                      /* put actual number of indexes to know is this
++                       * number got changed at the next iteration */
++                      path[i].p_block = path[i].p_hdr->eh_entries;
++                      i++;
++              } else {
++                      /* we finish processing this index, go up */
++                      if (path[i].p_hdr->eh_entries == 0 && i > 0) {
++                              /* index is empty, remove it
++                               * handle must be already prepared by the
++                               * truncatei_leaf() */
++                              err = ext3_ext_rm_idx(handle, tree, path + i);
++                      }
++                      /* root level have p_bh == NULL, brelse() eats this */
++                      brelse(path[i].p_bh);
++                      i--;
++                      ext_debug(tree, "return to level %d\n", i);
++              }
++      }
++
++      /* TODO: flexible tree reduction should be here */
++      if (path->p_hdr->eh_entries == 0) {
++              /*
++               * truncate to zero freed all the tree
++               * so, we need to correct eh_depth
++               */
++              err = ext3_ext_get_access(handle, tree, path);
++              if (err == 0) {
++                      EXT_ROOT_HDR(tree)->eh_depth = 0;
++                      EXT_ROOT_HDR(tree)->eh_max = ext3_ext_space_root(tree);
++                      err = ext3_ext_dirty(handle, tree, path);
++              }
++      }
++      ext3_ext_tree_changed(tree);
++
++      kfree(path);
++      ext3_journal_stop(handle);
++
++      return err;
++}
++
++int ext3_ext_calc_metadata_amount(struct ext3_extents_tree *tree, int blocks)
++{
++      int lcap, icap, rcap, leafs, idxs, num;
++
++      rcap = ext3_ext_space_root(tree);
++      if (blocks <= rcap) {
++              /* all extents fit to the root */
++              return 0;
++      }
++
++      rcap = ext3_ext_space_root_idx(tree);
++      lcap = ext3_ext_space_block(tree);
++      icap = ext3_ext_space_block_idx(tree);
++
++      num = leafs = (blocks + lcap - 1) / lcap;
++      if (leafs <= rcap) {
++              /* all pointers to leafs fit to the root */
++              return leafs;
++      }
++
++      /* ok. we need separate index block(s) to link all leaf blocks */
++      idxs = (leafs + icap - 1) / icap;
++      do {
++              num += idxs;
++              idxs = (idxs + icap - 1) / icap;
++      } while (idxs > rcap);
++
++      return num;
++}
++
++/*
++ * called at mount time
++ */
++void ext3_ext_init(struct super_block *sb)
++{
++      /*
++       * possible initialization would be here
++       */
++
++      if (test_opt(sb, EXTENTS)) {
++              printk("EXT3-fs: file extents enabled");
++#ifdef AGRESSIVE_TEST
++              printk(", agressive tests");
++#endif
++#ifdef CHECK_BINSEARCH
++              printk(", check binsearch");
++#endif
++              printk("\n");
++      }
++}
++
++/*
++ * called at umount time
++ */
++void ext3_ext_release(struct super_block *sb)
++{
++}
++
++/************************************************************************
++ * VFS related routines
++ ************************************************************************/
++
++static int ext3_get_inode_write_access(handle_t *handle, void *buffer)
++{
++      /* we use in-core data, not bh */
++      return 0;
++}
++
++static int ext3_mark_buffer_dirty(handle_t *handle, void *buffer)
++{
++      struct inode *inode = buffer;
++      return ext3_mark_inode_dirty(handle, inode);
++}
++
++static int ext3_ext_mergable(struct ext3_extent *ex1,
++                              struct ext3_extent *ex2)
++{
++      /* FIXME: support for large fs */
++      if (ex1->ee_start + ex1->ee_len == ex2->ee_start)
++              return 1;
++      return 0;
++}
++
++static int
++ext3_remove_blocks_credits(struct ext3_extents_tree *tree,
++                              struct ext3_extent *ex,
++                              unsigned long from, unsigned long to)
++{
++      int needed;
++      
++      /* at present, extent can't cross block group */;
++      needed = 4; /* bitmap + group desc + sb + inode */
++
++#ifdef CONFIG_QUOTA
++      needed += 2 * EXT3_SINGLEDATA_TRANS_BLOCKS;
++#endif
++      return needed;
++}
++
++static int
++ext3_remove_blocks(struct ext3_extents_tree *tree,
++                              struct ext3_extent *ex,
++                              unsigned long from, unsigned long to)
++{
++      int needed = ext3_remove_blocks_credits(tree, ex, from, to);
++      handle_t *handle = ext3_journal_start(tree->inode, needed);
++      struct buffer_head *bh;
++      int i;
++
++      if (IS_ERR(handle))
++              return PTR_ERR(handle);
++      if (from >= ex->ee_block && to == ex->ee_block + ex->ee_len - 1) {
++              /* tail removal */
++              unsigned long num, start;
++              num = ex->ee_block + ex->ee_len - from;
++              start = ex->ee_start + ex->ee_len - num;
++              ext_debug(tree, "free last %lu blocks starting %lu\n",
++                              num, start);
++              for (i = 0; i < num; i++) {
++                      bh = sb_find_get_block(tree->inode->i_sb, start + i);
++                      ext3_forget(handle, 0, tree->inode, bh, start + i);
++              }
++              ext3_free_blocks(handle, tree->inode, start, num);
++      } else if (from == ex->ee_block && to <= ex->ee_block + ex->ee_len - 1) {
++              printk("strange request: removal %lu-%lu from %u:%u\n",
++                      from, to, ex->ee_block, ex->ee_len);
++      } else {
++              printk("strange request: removal(2) %lu-%lu from %u:%u\n",
++                      from, to, ex->ee_block, ex->ee_len);
++      }
++      ext3_journal_stop(handle);
++      return 0;
++}
++
++static int ext3_ext_find_goal(struct inode *inode,
++                              struct ext3_ext_path *path, unsigned long block)
++{
++      struct ext3_inode_info *ei = EXT3_I(inode);
++      unsigned long bg_start;
++      unsigned long colour;
++      int depth;
++      
++      if (path) {
++              struct ext3_extent *ex;
++              depth = path->p_depth;
++              
++              /* try to predict block placement */
++              if ((ex = path[depth].p_ext))
++                      return ex->ee_start + (block - ex->ee_block);
++
++              /* it looks index is empty
++               * try to find starting from index itself */
++              if (path[depth].p_bh)
++                      return path[depth].p_bh->b_blocknr;
++      }
++
++      /* OK. use inode's group */
++      bg_start = (ei->i_block_group * EXT3_BLOCKS_PER_GROUP(inode->i_sb)) +
++              le32_to_cpu(EXT3_SB(inode->i_sb)->s_es->s_first_data_block);
++      colour = (current->pid % 16) *
++                      (EXT3_BLOCKS_PER_GROUP(inode->i_sb) / 16);
++      return bg_start + colour + block;
++}
++
++static int ext3_new_block_cb(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path,
++                              struct ext3_extent *ex, int *err)
++{
++      struct inode *inode = tree->inode;
++      int newblock, goal;
++      
++      EXT_ASSERT(path);
++      EXT_ASSERT(ex);
++      EXT_ASSERT(ex->ee_start);
++      EXT_ASSERT(ex->ee_len);
++      
++      /* reuse block from the extent to order data/metadata */
++      newblock = ex->ee_start++;
++      ex->ee_len--;
++      if (ex->ee_len == 0) {
++              ex->ee_len = 1;
++              /* allocate new block for the extent */
++              goal = ext3_ext_find_goal(inode, path, ex->ee_block);
++              ex->ee_start = ext3_new_block(handle, inode, goal, 0, 0, err);
++              if (ex->ee_start == 0) {
++                      /* error occured: restore old extent */
++                      ex->ee_start = newblock;
++                      return 0;
++              }
++      }
++      return newblock;
++}
++
++static struct ext3_extents_helpers ext3_blockmap_helpers = {
++      .get_write_access       = ext3_get_inode_write_access,
++      .mark_buffer_dirty      = ext3_mark_buffer_dirty,
++      .mergable               = ext3_ext_mergable,
++      .new_block              = ext3_new_block_cb,
++      .remove_extent          = ext3_remove_blocks,
++      .remove_extent_credits  = ext3_remove_blocks_credits,
++};
++
++void ext3_init_tree_desc(struct ext3_extents_tree *tree,
++                              struct inode *inode)
++{
++      tree->inode = inode;
++      tree->root = (void *) EXT3_I(inode)->i_data;
++      tree->buffer = (void *) inode;
++      tree->buffer_len = sizeof(EXT3_I(inode)->i_data);
++      tree->cex = (struct ext3_extent *) &EXT3_I(inode)->i_cached_extent;
++      tree->ops = &ext3_blockmap_helpers;
++}
++
++int ext3_ext_get_block(handle_t *handle, struct inode *inode,
++                      long iblock, struct buffer_head *bh_result,
++                      int create, int extend_disksize)
++{
++      struct ext3_ext_path *path = NULL;
++      struct ext3_extent newex;
++      struct ext3_extent *ex;
++      int goal, newblock, err = 0, depth;
++      struct ext3_extents_tree tree;
++
++      clear_buffer_new(bh_result);
++      ext3_init_tree_desc(&tree, inode);
++      ext_debug(&tree, "block %d requested for inode %u\n",
++                      (int) iblock, (unsigned) inode->i_ino);
++      down(&EXT3_I(inode)->truncate_sem);
++
++      /* check in cache */
++      if (ext3_ext_in_cache(&tree, iblock, &newex)) {
++              if (newex.ee_start == EXT_CACHE_MARK) {
++                      /* this is cached gap */
++                      if (!create) {
++                              /* block isn't allocated yet and
++                               * user don't want to allocate it */
++                              goto out2;
++                      }
++                      /* we should allocate requested block */
++              } else if (newex.ee_start) {
++                      /* block is already allocated */
++                      newblock = iblock - newex.ee_block + newex.ee_start;
++                      goto out;
++              }
++      }
++
++      /* find extent for this block */
++      path = ext3_ext_find_extent(&tree, iblock, NULL);
++      if (IS_ERR(path)) {
++              err = PTR_ERR(path);
++              path = NULL;
++              goto out2;
++      }
++
++      depth = EXT_DEPTH(&tree);
++
++      /*
++       * consistent leaf must not be empty
++       * this situations is possible, though, _during_ tree modification
++       * this is why assert can't be put in ext3_ext_find_extent()
++       */
++      EXT_ASSERT(path[depth].p_ext != NULL || depth == 0);
++
++      if ((ex = path[depth].p_ext)) {
++              /* if found exent covers block, simple return it */
++              if (iblock >= ex->ee_block && iblock < ex->ee_block + ex->ee_len) {
++                      newblock = iblock - ex->ee_block + ex->ee_start;
++                      ext_debug(&tree, "%d fit into %d:%d -> %d\n",
++                                      (int) iblock, ex->ee_block, ex->ee_len,
++                                      newblock);
++                      ext3_ext_put_in_cache(&tree, ex);
++                      goto out;
++              }
++      }
++
++      /*
++       * requested block isn't allocated yet
++       * we couldn't try to create block if create flag is zero 
++       */
++      if (!create) {
++              /* put just found gap into cache to speedup subsequest reqs */
++              ext3_ext_put_gap_in_cache(&tree, path, iblock);
++              goto out2;
++      }
++
++      /* allocate new block */
++      goal = ext3_ext_find_goal(inode, path, iblock);
++      newblock = ext3_new_block(handle, inode, goal, 0, 0, &err);
++      if (!newblock)
++              goto out2;
++      ext_debug(&tree, "allocate new block: goal %d, found %d\n",
++                      goal, newblock);
++
++      /* try to insert new extent into found leaf and return */
++      newex.ee_block = iblock;
++      newex.ee_start = newblock;
++      newex.ee_len = 1;
++      err = ext3_ext_insert_extent(handle, &tree, path, &newex);
++      if (err)
++              goto out2;
++      
++      if (extend_disksize && inode->i_size > EXT3_I(inode)->i_disksize)
++              EXT3_I(inode)->i_disksize = inode->i_size;
++
++      /* previous routine could use block we allocated */
++      newblock = newex.ee_start;
++      set_buffer_new(bh_result);
++
++      ext3_ext_put_in_cache(&tree, &newex);
++out:
++      ext3_ext_show_leaf(&tree, path);
++      map_bh(bh_result, inode->i_sb, newblock);
++out2:
++      if (path) {
++              ext3_ext_drop_refs(path);
++              kfree(path);
++      }
++      up(&EXT3_I(inode)->truncate_sem);
++
++      return err;     
++}
++
++void ext3_ext_truncate(struct inode * inode, struct page *page)
++{
++      struct address_space *mapping = inode->i_mapping;
++      struct super_block *sb = inode->i_sb;
++      struct ext3_extents_tree tree;
++      unsigned long last_block;
++      handle_t *handle;
++      int err = 0;
++
++      ext3_init_tree_desc(&tree, inode);
++
++      /*
++       * probably first extent we're gonna free will be last in block
++       */
++      err = ext3_writepage_trans_blocks(inode) + 3;
++      handle = ext3_journal_start(inode, err);
++      if (IS_ERR(handle)) {
++              if (page) {
++                      clear_highpage(page);
++                      flush_dcache_page(page);
++                      unlock_page(page);
++                      page_cache_release(page);
++              }
++              return;
++      }
++
++      if (page)
++              ext3_block_truncate_page(handle, page, mapping, inode->i_size);
++
++      down(&EXT3_I(inode)->truncate_sem);
++      ext3_ext_invalidate_cache(&tree);
++
++      /* 
++       * TODO: optimization is possible here
++       * probably we need not scaning at all,
++       * because page truncation is enough
++       */
++      if (ext3_orphan_add(handle, inode))
++              goto out_stop;
++
++      /* we have to know where to truncate from in crash case */
++      EXT3_I(inode)->i_disksize = inode->i_size;
++      ext3_mark_inode_dirty(handle, inode);
++
++      last_block = (inode->i_size + sb->s_blocksize - 1)
++                      >> EXT3_BLOCK_SIZE_BITS(sb);
++      err = ext3_ext_remove_space(&tree, last_block, EXT_MAX_BLOCK);
++      
++      /* In a multi-transaction truncate, we only make the final
++       * transaction synchronous */
++      if (IS_SYNC(inode))
++              handle->h_sync = 1;
++
++out_stop:
++      /*
++       * If this was a simple ftruncate(), and the file will remain alive
++       * then we need to clear up the orphan record which we created above.
++       * However, if this was a real unlink then we were called by
++       * ext3_delete_inode(), and we allow that function to clean up the
++       * orphan info for us.
++       */
++      if (inode->i_nlink)
++              ext3_orphan_del(handle, inode);
++
++      up(&EXT3_I(inode)->truncate_sem);
++      ext3_journal_stop(handle);
++}
++
++/*
++ * this routine calculate max number of blocks we could modify
++ * in order to allocate new block for an inode
++ */
++int ext3_ext_writepage_trans_blocks(struct inode *inode, int num)
++{
++      struct ext3_extents_tree tree;
++      int needed;
++      
++      ext3_init_tree_desc(&tree, inode);
++      
++      needed = ext3_ext_calc_credits_for_insert(&tree, NULL);
++
++      /* caller want to allocate num blocks */
++      needed *= num;
++      
++#ifdef CONFIG_QUOTA
++      /* 
++       * FIXME: real calculation should be here
++       * it depends on blockmap format of qouta file
++       */
++      needed += 2 * EXT3_SINGLEDATA_TRANS_BLOCKS;
++#endif
++
++      return needed;
++}
++
++void ext3_extents_initialize_blockmap(handle_t *handle, struct inode *inode)
++{
++      struct ext3_extents_tree tree;
++
++      ext3_init_tree_desc(&tree, inode);
++      ext3_extent_tree_init(handle, &tree);
++}
++
++int ext3_ext_calc_blockmap_metadata(struct inode *inode, int blocks)
++{
++      struct ext3_extents_tree tree;
++
++      ext3_init_tree_desc(&tree, inode);
++      return ext3_ext_calc_metadata_amount(&tree, blocks);
++}
++      
++static int
++ext3_ext_store_extent_cb(struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path,
++                      struct ext3_extent *newex, int exist)
++{
++      struct ext3_extent_buf *buf = (struct ext3_extent_buf *) tree->private;
++
++      if (!exist)
++              return EXT_CONTINUE;
++      if (buf->err < 0)
++              return EXT_BREAK;
++      if (buf->cur - buf->buffer + sizeof(*newex) > buf->buflen)
++              return EXT_BREAK;
++
++      if (!copy_to_user(buf->cur, newex, sizeof(*newex))) {
++              buf->err++;
++              buf->cur += sizeof(*newex);
++      } else {
++              buf->err = -EFAULT;
++              return EXT_BREAK;
++      }
++      return EXT_CONTINUE;
++}
++
++static int
++ext3_ext_collect_stats_cb(struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path,
++                      struct ext3_extent *ex, int exist)
++{
++      struct ext3_extent_tree_stats *buf =
++              (struct ext3_extent_tree_stats *) tree->private;
++      int depth;
++
++      if (!exist)
++              return EXT_CONTINUE;
++
++      depth = EXT_DEPTH(tree);
++      buf->extents_num++;
++      if (path[depth].p_ext == EXT_FIRST_EXTENT(path[depth].p_hdr))
++              buf->leaf_num++;
++      return EXT_CONTINUE;
++}
++
++int ext3_ext_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
++              unsigned long arg)
++{
++      int err = 0;
++
++      if (!(EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL))
++              return -EINVAL;
++
++      if (cmd == EXT3_IOC_GET_EXTENTS) {
++              struct ext3_extent_buf buf;
++              struct ext3_extents_tree tree;
++
++              if (copy_from_user(&buf, (void *) arg, sizeof(buf)))
++                      return -EFAULT;
++
++              ext3_init_tree_desc(&tree, inode);
++              buf.cur = buf.buffer;
++              buf.err = 0;
++              tree.private = &buf;
++              down(&EXT3_I(inode)->truncate_sem);
++              err = ext3_ext_walk_space(&tree, buf.start, EXT_MAX_BLOCK,
++                                              ext3_ext_store_extent_cb);
++              up(&EXT3_I(inode)->truncate_sem);
++              if (err == 0)
++                      err = buf.err;
++      } else if (cmd == EXT3_IOC_GET_TREE_STATS) {
++              struct ext3_extent_tree_stats buf;
++              struct ext3_extents_tree tree;
++
++              ext3_init_tree_desc(&tree, inode);
++              down(&EXT3_I(inode)->truncate_sem);
++              buf.depth = EXT_DEPTH(&tree);
++              buf.extents_num = 0;
++              buf.leaf_num = 0;
++              tree.private = &buf;
++              err = ext3_ext_walk_space(&tree, 0, EXT_MAX_BLOCK,
++                                              ext3_ext_collect_stats_cb);
++              up(&EXT3_I(inode)->truncate_sem);
++              if (!err)
++                      err = copy_to_user((void *) arg, &buf, sizeof(buf));
++      } else if (cmd == EXT3_IOC_GET_TREE_DEPTH) {
++              struct ext3_extents_tree tree;
++              ext3_init_tree_desc(&tree, inode);
++              down(&EXT3_I(inode)->truncate_sem);
++              err = EXT_DEPTH(&tree);
++              up(&EXT3_I(inode)->truncate_sem);
++      }
++
++      return err;
++}
++
++EXPORT_SYMBOL(ext3_init_tree_desc);
++EXPORT_SYMBOL(ext3_mark_inode_dirty);
++EXPORT_SYMBOL(ext3_ext_invalidate_cache);
++EXPORT_SYMBOL(ext3_ext_insert_extent);
++EXPORT_SYMBOL(ext3_ext_walk_space);
++EXPORT_SYMBOL(ext3_ext_find_goal);
++EXPORT_SYMBOL(ext3_ext_calc_credits_for_insert);
++
+Index: linux-2.6.7/fs/ext3/ialloc.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/ialloc.c  2004-08-19 08:51:04.000000000 +0400
++++ linux-2.6.7/fs/ext3/ialloc.c       2004-08-19 08:53:49.000000000 +0400
+@@ -646,6 +646,10 @@
+               DQUOT_FREE_INODE(inode);
+               goto fail2;
+       }
++      if (test_opt(sb, EXTENTS)) {
++              EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
++              ext3_extents_initialize_blockmap(handle, inode);
++      }
+       err = ext3_mark_inode_dirty(handle, inode);
+       if (err) {
+               ext3_std_error(sb, err);
+Index: linux-2.6.7/fs/ext3/inode.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/inode.c   2004-08-19 08:51:04.000000000 +0400
++++ linux-2.6.7/fs/ext3/inode.c        2004-08-19 08:53:49.000000000 +0400
+@@ -857,6 +857,17 @@
+       goto reread;
+ }
++static inline int
++ext3_get_block_wrap(handle_t *handle, struct inode *inode, long block,
++              struct buffer_head *bh, int create, int extend_disksize)
++{
++      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
++              return ext3_ext_get_block(handle, inode, block, bh, create,
++                                              extend_disksize);
++      return ext3_get_block_handle(handle, inode, block, bh, create,
++                                      extend_disksize);
++}
++
+ static int ext3_get_block(struct inode *inode, sector_t iblock,
+                       struct buffer_head *bh_result, int create)
+ {
+@@ -867,8 +878,8 @@
+               handle = ext3_journal_current_handle();
+               J_ASSERT(handle != 0);
+       }
+-      ret = ext3_get_block_handle(handle, inode, iblock,
+-                              bh_result, create, 1);
++      ret = ext3_get_block_wrap(handle, inode, iblock,
++                                      bh_result, create, 1);
+       return ret;
+ }
+@@ -894,8 +905,8 @@
+               }
+       }
+       if (ret == 0)
+-              ret = ext3_get_block_handle(handle, inode, iblock,
+-                                      bh_result, create, 0);
++              ret = ext3_get_block_wrap(handle, inode, iblock,
++                                              bh_result, create, 0);
+       if (ret == 0)
+               bh_result->b_size = (1 << inode->i_blkbits);
+       return ret;
+@@ -916,7 +927,7 @@
+       dummy.b_state = 0;
+       dummy.b_blocknr = -1000;
+       buffer_trace_init(&dummy.b_history);
+-      *errp = ext3_get_block_handle(handle, inode, block, &dummy, create, 1);
++      *errp = ext3_get_block_wrap(handle, inode, block, &dummy, create, 1);
+       if (!*errp && buffer_mapped(&dummy)) {
+               struct buffer_head *bh;
+               bh = sb_getblk(inode->i_sb, dummy.b_blocknr);
+@@ -1669,7 +1680,7 @@
+  * This required during truncate. We need to physically zero the tail end
+  * of that block so it doesn't yield old data if the file is later grown.
+  */
+-static int ext3_block_truncate_page(handle_t *handle, struct page *page,
++int ext3_block_truncate_page(handle_t *handle, struct page *page,
+               struct address_space *mapping, loff_t from)
+ {
+       unsigned long index = from >> PAGE_CACHE_SHIFT;
+@@ -2165,6 +2176,9 @@
+                       return;
+       }
++      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
++              return ext3_ext_truncate(inode, page);
++
+       handle = start_transaction(inode);
+       if (IS_ERR(handle)) {
+               if (page) {
+@@ -2888,6 +2902,9 @@
+       int indirects = (EXT3_NDIR_BLOCKS % bpp) ? 5 : 3;
+       int ret;
++      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
++              return ext3_ext_writepage_trans_blocks(inode, bpp);
++ 
+       if (ext3_should_journal_data(inode))
+               ret = 3 * (bpp + indirects) + 2;
+       else
+Index: linux-2.6.7/fs/ext3/Makefile
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/Makefile  2004-08-19 08:52:14.000000000 +0400
++++ linux-2.6.7/fs/ext3/Makefile       2004-08-19 08:53:49.000000000 +0400
+@@ -5,7 +5,7 @@
+ obj-$(CONFIG_EXT3_FS) += ext3.o
+ ext3-y        := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
+-         ioctl.o namei.o super.o symlink.o hash.o
++         ioctl.o namei.o super.o symlink.o hash.o extents.o
+ ext3-$(CONFIG_EXT3_FS_XATTR)   += xattr.o xattr_user.o xattr_trusted.o
+ ext3-$(CONFIG_EXT3_FS_POSIX_ACL) += acl.o
+Index: linux-2.6.7/fs/ext3/super.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/super.c   2004-08-19 08:51:04.000000000 +0400
++++ linux-2.6.7/fs/ext3/super.c        2004-08-19 08:53:49.000000000 +0400
+@@ -392,6 +392,7 @@
+       struct ext3_super_block *es = sbi->s_es;
+       int i;
++      ext3_ext_release(sb);
+       ext3_xattr_put_super(sb);
+       journal_destroy(sbi->s_journal);
+       if (!(sb->s_flags & MS_RDONLY)) {
+@@ -455,6 +456,9 @@
+       ei->i_default_acl = EXT3_ACL_NOT_CACHED;
+ #endif
+       ei->vfs_inode.i_version = 1;
++      ei->i_cached_extent[0] = 0;
++      ei->i_cached_extent[1] = 0;
++      ei->i_cached_extent[2] = 0;
+       return &ei->vfs_inode;
+ }
+@@ -590,7 +594,7 @@
+       Opt_commit, Opt_journal_update, Opt_journal_inum,
+       Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
+       Opt_ignore, Opt_barrier, Opt_iopen, Opt_noiopen, Opt_iopen_nopriv,
+-      Opt_err,
++      Opt_err, Opt_extents, Opt_extdebug
+ };
+ static match_table_t tokens = {
+@@ -638,6 +642,8 @@
+       {Opt_iopen,  "iopen"},
+       {Opt_noiopen, "noiopen"},
+       {Opt_iopen_nopriv, "iopen_nopriv"},
++      {Opt_extents, "extents"},
++      {Opt_extdebug, "extdebug"},
+       {Opt_err, NULL}
+ };
+@@ -917,6 +923,12 @@
+                       break;
+               case Opt_ignore:
+                       break;
++              case Opt_extents:
++                      set_opt (sbi->s_mount_opt, EXTENTS);
++                      break;
++              case Opt_extdebug:
++                      set_opt (sbi->s_mount_opt, EXTDEBUG);
++                      break;
+               default:
+                       printk (KERN_ERR
+                               "EXT3-fs: Unrecognized mount option \"%s\" "
+@@ -1589,6 +1601,8 @@
+       percpu_counter_mod(&sbi->s_dirs_counter,
+               ext3_count_dirs(sb));
++      ext3_ext_init(sb);
++ 
+       return 0;
+ failed_mount3:
+Index: linux-2.6.7/fs/ext3/ioctl.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/ioctl.c   2004-08-19 08:51:03.000000000 +0400
++++ linux-2.6.7/fs/ext3/ioctl.c        2004-08-19 08:53:49.000000000 +0400
+@@ -176,6 +176,10 @@
+                       return ret;
+               }
+ #endif
++      case EXT3_IOC_GET_EXTENTS:
++      case EXT3_IOC_GET_TREE_STATS:
++      case EXT3_IOC_GET_TREE_DEPTH:
++              return ext3_ext_ioctl(inode, filp, cmd, arg);
+       default:
+               return -ENOTTY;
+       }
+Index: linux-2.6.7/include/linux/ext3_fs.h
+===================================================================
+--- linux-2.6.7.orig/include/linux/ext3_fs.h   2004-08-19 08:51:04.000000000 +0400
++++ linux-2.6.7/include/linux/ext3_fs.h        2004-08-19 08:53:49.000000000 +0400
+@@ -186,6 +186,7 @@
+ #define EXT3_DIRSYNC_FL                       0x00010000 /* dirsync behaviour (directories only) */
+ #define EXT3_TOPDIR_FL                        0x00020000 /* Top of directory hierarchies*/
+ #define EXT3_RESERVED_FL              0x80000000 /* reserved for ext3 lib */
++#define EXT3_EXTENTS_FL                       0x00080000 /* Inode uses extents */
+ #define EXT3_FL_USER_VISIBLE          0x0003DFFF /* User visible flags */
+ #define EXT3_FL_USER_MODIFIABLE               0x000380FF /* User modifiable flags */
+@@ -209,6 +210,9 @@
+ #ifdef CONFIG_JBD_DEBUG
+ #define EXT3_IOC_WAIT_FOR_READONLY    _IOR('f', 99, long)
+ #endif
++#define       EXT3_IOC_GET_EXTENTS            _IOR('f', 5, long)
++#define       EXT3_IOC_GET_TREE_DEPTH         _IOR('f', 6, long)
++#define       EXT3_IOC_GET_TREE_STATS         _IOR('f', 7, long)
+ /*
+  * Structure of an inode on the disk
+@@ -329,6 +333,8 @@
+ #define EXT3_MOUNT_POSIX_ACL          0x8000  /* POSIX Access Control Lists */
+ #define EXT3_MOUNT_IOPEN              0x40000 /* Allow access via iopen */
+ #define EXT3_MOUNT_IOPEN_NOPRIV               0x80000 /* Make iopen world-readable */
++#define EXT3_MOUNT_EXTENTS            0x10000 /* Extents support */
++#define EXT3_MOUNT_EXTDEBUG           0x20000 /* Extents debug */
+ /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
+ #ifndef clear_opt
+@@ -724,6 +730,7 @@
+ /* inode.c */
++extern int ext3_block_truncate_page(handle_t *, struct page *, struct address_space *, loff_t);
+ extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
+ extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
+ extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
+@@ -796,6 +803,14 @@
+ extern struct inode_operations ext3_symlink_inode_operations;
+ extern struct inode_operations ext3_fast_symlink_inode_operations;
++/* extents.c */
++extern int ext3_ext_writepage_trans_blocks(struct inode *, int);
++extern int ext3_ext_get_block(handle_t *, struct inode *, long,
++                              struct buffer_head *, int, int);
++extern void ext3_ext_truncate(struct inode *, struct page *);
++extern void ext3_ext_init(struct super_block *);
++extern void ext3_ext_release(struct super_block *);
++extern void ext3_extents_initialize_blockmap(handle_t *, struct inode *);
+ #endif        /* __KERNEL__ */
+Index: linux-2.6.7/include/linux/ext3_extents.h
+===================================================================
+--- linux-2.6.7.orig/include/linux/ext3_extents.h      2003-01-30 13:24:37.000000000 +0300
++++ linux-2.6.7/include/linux/ext3_extents.h   2004-08-19 08:53:49.000000000 +0400
+@@ -0,0 +1,238 @@
++/*
++ * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public Licens
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-
++ */
++
++#ifndef _LINUX_EXT3_EXTENTS
++#define _LINUX_EXT3_EXTENTS
++
++/*
++ * with AGRESSIVE_TEST defined capacity of index/leaf blocks
++ * become very little, so index split, in-depth growing and
++ * other hard changes happens much more often
++ * this is for debug purposes only
++ */
++#define AGRESSIVE_TEST_
++
++/*
++ * if CHECK_BINSEARCH defined, then results of binary search
++ * will be checked by linear search
++ */
++#define CHECK_BINSEARCH_
++
++/*
++ * if EXT_DEBUG is defined you can use 'extdebug' mount option
++ * to get lots of info what's going on
++ */
++#define EXT_DEBUG
++#ifdef EXT_DEBUG
++#define ext_debug(tree,fmt,a...)                      \
++do {                                                  \
++      if (test_opt((tree)->inode->i_sb, EXTDEBUG))    \
++              printk(fmt, ##a);                       \
++} while (0);
++#else
++#define ext_debug(tree,fmt,a...)
++#endif
++
++/*
++ * if EXT_STATS is defined then stats numbers are collected
++ * these number will be displayed at umount time
++ */
++#define EXT_STATS_
++
++
++#define EXT3_ALLOC_NEEDED     3       /* block bitmap + group desc. + sb */
++
++/*
++ * ext3_inode has i_block array (total 60 bytes)
++ * first 4 bytes are used to store:
++ *  - tree depth (0 mean there is no tree yet. all extents in the inode)
++ *  - number of alive extents in the inode
++ */
++
++/*
++ * this is extent on-disk structure
++ * it's used at the bottom of the tree
++ */
++struct ext3_extent {
++      __u32   ee_block;       /* first logical block extent covers */
++      __u16   ee_len;         /* number of blocks covered by extent */
++      __u16   ee_start_hi;    /* high 16 bits of physical block */
++      __u32   ee_start;       /* low 32 bigs of physical block */
++};
++
++/*
++ * this is index on-disk structure
++ * it's used at all the levels, but the bottom
++ */
++struct ext3_extent_idx {
++      __u32   ei_block;       /* index covers logical blocks from 'block' */
++      __u32   ei_leaf;        /* pointer to the physical block of the next *
++                               * level. leaf or next index could bet here */
++      __u16   ei_leaf_hi;     /* high 16 bits of physical block */
++      __u16   ei_unused;
++};
++
++/*
++ * each block (leaves and indexes), even inode-stored has header
++ */
++struct ext3_extent_header {   
++      __u16   eh_magic;       /* probably will support different formats */   
++      __u16   eh_entries;     /* number of valid entries */
++      __u16   eh_max;         /* capacity of store in entries */
++      __u16   eh_depth;       /* has tree real underlaying blocks? */
++      __u32   eh_generation;  /* generation of the tree */
++};
++
++#define EXT3_EXT_MAGIC                0xf30a
++
++/*
++ * array of ext3_ext_path contains path to some extent
++ * creation/lookup routines use it for traversal/splitting/etc
++ * truncate uses it to simulate recursive walking
++ */
++struct ext3_ext_path {
++      __u32                           p_block;
++      __u16                           p_depth;
++      struct ext3_extent              *p_ext;
++      struct ext3_extent_idx          *p_idx;
++      struct ext3_extent_header       *p_hdr;
++      struct buffer_head              *p_bh;
++};
++
++/*
++ * structure for external API
++ */
++
++/*
++ * ext3_extents_tree is used to pass initial information
++ * to top-level extents API
++ */
++struct ext3_extents_helpers;
++struct ext3_extents_tree {
++      struct inode *inode;    /* inode which tree belongs to */
++      void *root;             /* ptr to data top of tree resides at */
++      void *buffer;           /* will be passed as arg to ^^ routines */
++      int buffer_len;
++      void *private;
++      struct ext3_extent *cex;/* last found extent */
++      struct ext3_extents_helpers *ops;
++};
++
++struct ext3_extents_helpers {
++      int (*get_write_access)(handle_t *h, void *buffer);
++      int (*mark_buffer_dirty)(handle_t *h, void *buffer);
++      int (*mergable)(struct ext3_extent *ex1, struct ext3_extent *ex2);
++      int (*remove_extent_credits)(struct ext3_extents_tree *,
++                                      struct ext3_extent *, unsigned long,
++                                      unsigned long);
++      int (*remove_extent)(struct ext3_extents_tree *,
++                              struct ext3_extent *, unsigned long,
++                              unsigned long);
++      int (*new_block)(handle_t *, struct ext3_extents_tree *,
++                              struct ext3_ext_path *, struct ext3_extent *,
++                              int *);
++};
++
++/*
++ * to be called by ext3_ext_walk_space()
++ * negative retcode - error
++ * positive retcode - signal for ext3_ext_walk_space(), see below
++ * callback must return valid extent (passed or newly created)
++ */
++typedef int (*ext_prepare_callback)(struct ext3_extents_tree *,
++                                      struct ext3_ext_path *,
++                                      struct ext3_extent *, int);
++
++#define EXT_CONTINUE  0
++#define EXT_BREAK     1
++#define EXT_REPEAT    2
++
++
++#define EXT_MAX_BLOCK 0xffffffff
++#define EXT_CACHE_MARK        0xffff
++
++
++#define EXT_FIRST_EXTENT(__hdr__) \
++      ((struct ext3_extent *) (((char *) (__hdr__)) +         \
++                               sizeof(struct ext3_extent_header)))
++#define EXT_FIRST_INDEX(__hdr__) \
++      ((struct ext3_extent_idx *) (((char *) (__hdr__)) +     \
++                                   sizeof(struct ext3_extent_header)))
++#define EXT_HAS_FREE_INDEX(__path__) \
++      ((__path__)->p_hdr->eh_entries < (__path__)->p_hdr->eh_max)
++#define EXT_LAST_EXTENT(__hdr__) \
++      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_entries - 1)
++#define EXT_LAST_INDEX(__hdr__) \
++      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_entries - 1)
++#define EXT_MAX_EXTENT(__hdr__) \
++      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_max - 1)
++#define EXT_MAX_INDEX(__hdr__) \
++      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_max - 1)
++
++#define EXT_ROOT_HDR(tree) \
++      ((struct ext3_extent_header *) (tree)->root)
++#define EXT_BLOCK_HDR(bh) \
++      ((struct ext3_extent_header *) (bh)->b_data)
++#define EXT_DEPTH(_t_)        \
++      (((struct ext3_extent_header *)((_t_)->root))->eh_depth)
++#define EXT_GENERATION(_t_)   \
++      (((struct ext3_extent_header *)((_t_)->root))->eh_generation)
++
++
++#define EXT_ASSERT(__x__) if (!(__x__)) BUG();
++
++
++/*
++ * this structure is used to gather extents from the tree via ioctl
++ */
++struct ext3_extent_buf {
++      unsigned long start;
++      int buflen;
++      void *buffer;
++      void *cur;
++      int err;
++};
++
++/*
++ * this structure is used to collect stats info about the tree
++ */
++struct ext3_extent_tree_stats {
++      int depth;
++      int extents_num;
++      int leaf_num;
++};
++
++extern int ext3_extent_tree_init(handle_t *, struct ext3_extents_tree *);
++extern int ext3_ext_calc_credits_for_insert(struct ext3_extents_tree *, struct ext3_ext_path *);
++extern int ext3_ext_insert_extent(handle_t *, struct ext3_extents_tree *, struct ext3_ext_path *, struct ext3_extent *);
++extern int ext3_ext_walk_space(struct ext3_extents_tree *, unsigned long, unsigned long, ext_prepare_callback);
++extern int ext3_ext_remove_space(struct ext3_extents_tree *, unsigned long, unsigned long);
++extern struct ext3_ext_path * ext3_ext_find_extent(struct ext3_extents_tree *, int, struct ext3_ext_path *);
++extern void ext3_init_tree_desc(struct ext3_extents_tree *, struct inode *);
++extern int ext3_ext_calc_blockmap_metadata(struct inode *, int);
++
++static inline void
++ext3_ext_invalidate_cache(struct ext3_extents_tree *tree)
++{
++      if (tree->cex)
++              tree->cex->ee_len = 0;
++}
++
++
++#endif /* _LINUX_EXT3_EXTENTS */
++
+Index: linux-2.6.7/include/linux/ext3_fs_i.h
+===================================================================
+--- linux-2.6.7.orig/include/linux/ext3_fs_i.h 2004-08-19 08:51:04.000000000 +0400
++++ linux-2.6.7/include/linux/ext3_fs_i.h      2004-08-19 08:53:49.000000000 +0400
+@@ -111,6 +111,8 @@
+        */
+       struct semaphore truncate_sem;
+       struct inode vfs_inode;
++
++      __u32 i_cached_extent[3];
+ };
+ #endif        /* _LINUX_EXT3_FS_I */
+
+%diffstat
+ fs/ext3/Makefile             |    2 
+ fs/ext3/extents.c            | 2306 +++++++++++++++++++++++++++++++++++++++++++
+ fs/ext3/ialloc.c             |    4 
+ fs/ext3/inode.c              |   29 
+ fs/ext3/ioctl.c              |    4 
+ fs/ext3/super.c              |   16 
+ include/linux/ext3_extents.h |  238 ++++
+ include/linux/ext3_fs.h      |   15 
+ include/linux/ext3_fs_i.h    |    2 
+ 9 files changed, 2608 insertions(+), 8 deletions(-)
+
diff --git a/lustre/kernel_patches/patches/ext3-extents-2.6.7.patch b/lustre/kernel_patches/patches/ext3-extents-2.6.7.patch
new file mode 100644 (file)
index 0000000..0348f1a
--- /dev/null
@@ -0,0 +1,2844 @@
+%patch
+Index: linux-2.6.7/fs/ext3/extents.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/extents.c 2003-01-30 13:24:37.000000000 +0300
++++ linux-2.6.7/fs/ext3/extents.c      2004-09-12 20:07:35.000000000 +0400
+@@ -0,0 +1,2306 @@
++/*
++ * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public Licens
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-
++ */
++
++/*
++ * Extents support for EXT3
++ *
++ * TODO:
++ *   - ext3_ext_walk_space() sould not use ext3_ext_find_extent()
++ *   - ext3_ext_calc_credits() could take 'mergable' into account
++ *   - ext3*_error() should be used in some situations
++ *   - find_goal() [to be tested and improved]
++ *   - smart tree reduction
++ *   - arch-independence
++ *     common on-disk format for big/little-endian arch
++ */
++
++#include <linux/module.h>
++#include <linux/fs.h>
++#include <linux/time.h>
++#include <linux/ext3_jbd.h>
++#include <linux/jbd.h>
++#include <linux/smp_lock.h>
++#include <linux/highuid.h>
++#include <linux/pagemap.h>
++#include <linux/quotaops.h>
++#include <linux/string.h>
++#include <linux/slab.h>
++#include <linux/ext3_extents.h>
++#include <asm/uaccess.h>
++
++static handle_t *ext3_ext_journal_restart(handle_t *handle, int needed)
++{
++      int err;
++
++      if (handle->h_buffer_credits > needed)
++              return handle;
++      if (!ext3_journal_extend(handle, needed))
++              return handle;
++      err = ext3_journal_restart(handle, needed);
++      
++      return handle;
++}
++
++static int inline
++ext3_ext_get_access_for_root(handle_t *h, struct ext3_extents_tree *tree)
++{
++      if (tree->ops->get_write_access)
++              return tree->ops->get_write_access(h,tree->buffer);
++      else
++              return 0;
++}
++
++static int inline
++ext3_ext_mark_root_dirty(handle_t *h, struct ext3_extents_tree *tree)
++{
++      if (tree->ops->mark_buffer_dirty)
++              return tree->ops->mark_buffer_dirty(h,tree->buffer);
++      else
++              return 0;
++}
++
++/*
++ * could return:
++ *  - EROFS
++ *  - ENOMEM
++ */
++static int ext3_ext_get_access(handle_t *handle,
++                              struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++      int err;
++
++      if (path->p_bh) {
++              /* path points to block */
++              err = ext3_journal_get_write_access(handle, path->p_bh);
++      } else {
++              /* path points to leaf/index in inode body */
++              err = ext3_ext_get_access_for_root(handle, tree);
++      }
++      return err;
++}
++
++/*
++ * could return:
++ *  - EROFS
++ *  - ENOMEM
++ *  - EIO
++ */
++static int ext3_ext_dirty(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++      int err;
++      if (path->p_bh) {
++              /* path points to block */
++              err =ext3_journal_dirty_metadata(handle, path->p_bh);
++      } else {
++              /* path points to leaf/index in inode body */
++              err = ext3_ext_mark_root_dirty(handle, tree);
++      }
++      return err;
++}
++
++static int inline
++ext3_ext_new_block(handle_t *handle, struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, struct ext3_extent *ex,
++                      int *err)
++{
++      int goal, depth, newblock;
++      struct inode *inode;
++
++      EXT_ASSERT(tree);
++      if (tree->ops->new_block)
++              return tree->ops->new_block(handle, tree, path, ex, err);
++
++      inode = tree->inode;
++      depth = EXT_DEPTH(tree);
++      if (path && depth > 0) {
++              goal = path[depth-1].p_block;
++      } else {
++              struct ext3_inode_info *ei = EXT3_I(inode);
++              unsigned long bg_start;
++              unsigned long colour;
++
++              bg_start = (ei->i_block_group *
++                              EXT3_BLOCKS_PER_GROUP(inode->i_sb)) +
++                      le32_to_cpu(EXT3_SB(inode->i_sb)->s_es->s_first_data_block);
++              colour = (current->pid % 16) *
++                      (EXT3_BLOCKS_PER_GROUP(inode->i_sb) / 16);
++              goal = bg_start + colour;
++      }
++
++      newblock = ext3_new_block(handle, inode, goal, 0, 0, err);
++      return newblock;
++}
++
++static inline void ext3_ext_tree_changed(struct ext3_extents_tree *tree)
++{
++      struct ext3_extent_header *neh;
++      neh = EXT_ROOT_HDR(tree);
++      neh->eh_generation++;
++}
++
++static inline int ext3_ext_space_block(struct ext3_extents_tree *tree)
++{
++      int size;
++
++      size = (tree->inode->i_sb->s_blocksize -
++                      sizeof(struct ext3_extent_header))
++                              / sizeof(struct ext3_extent);
++#ifdef AGRESSIVE_TEST
++      size = 6;
++#endif
++      return size;
++}
++
++static inline int ext3_ext_space_block_idx(struct ext3_extents_tree *tree)
++{
++      int size;
++
++      size = (tree->inode->i_sb->s_blocksize -
++                      sizeof(struct ext3_extent_header))
++                              / sizeof(struct ext3_extent_idx);
++#ifdef AGRESSIVE_TEST
++      size = 5;
++#endif
++      return size;
++}
++
++static inline int ext3_ext_space_root(struct ext3_extents_tree *tree)
++{
++      int size;
++
++      size = (tree->buffer_len - sizeof(struct ext3_extent_header))
++                      / sizeof(struct ext3_extent);
++#ifdef AGRESSIVE_TEST
++      size = 3;
++#endif
++      return size;
++}
++
++static inline int ext3_ext_space_root_idx(struct ext3_extents_tree *tree)
++{
++      int size;
++
++      size = (tree->buffer_len -
++                      sizeof(struct ext3_extent_header))
++                      / sizeof(struct ext3_extent_idx);
++#ifdef AGRESSIVE_TEST
++      size = 4;
++#endif
++      return size;
++}
++
++static void ext3_ext_show_path(struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++#ifdef EXT_DEBUG
++      int k, l = path->p_depth;
++
++      ext_debug(tree, "path:");
++      for (k = 0; k <= l; k++, path++) {
++              if (path->p_idx) {
++                      ext_debug(tree, "  %d->%d", path->p_idx->ei_block,
++                                      path->p_idx->ei_leaf);
++              } else if (path->p_ext) {
++                      ext_debug(tree, "  %d:%d:%d",
++                                      path->p_ext->ee_block,
++                                      path->p_ext->ee_len,
++                                      path->p_ext->ee_start);
++              } else
++                      ext_debug(tree, "  []");
++      }
++      ext_debug(tree, "\n");
++#endif
++}
++
++static void ext3_ext_show_leaf(struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++#ifdef EXT_DEBUG
++      int depth = EXT_DEPTH(tree);
++      struct ext3_extent_header *eh;
++      struct ext3_extent *ex;
++      int i;
++
++      if (!path)
++              return;
++
++      eh = path[depth].p_hdr;
++      ex = EXT_FIRST_EXTENT(eh);
++
++      for (i = 0; i < eh->eh_entries; i++, ex++) {
++              ext_debug(tree, "%d:%d:%d ",
++                              ex->ee_block, ex->ee_len, ex->ee_start);
++      }
++      ext_debug(tree, "\n");
++#endif
++}
++
++static void ext3_ext_drop_refs(struct ext3_ext_path *path)
++{
++      int depth = path->p_depth;
++      int i;
++
++      for (i = 0; i <= depth; i++, path++)
++              if (path->p_bh) {
++                      brelse(path->p_bh);
++                      path->p_bh = NULL;
++              }
++}
++
++/*
++ * binary search for closest index by given block
++ */
++static inline void
++ext3_ext_binsearch_idx(struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, int block)
++{
++      struct ext3_extent_header *eh = path->p_hdr;
++      struct ext3_extent_idx *ix;
++      int l = 0, k, r;
++
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++      EXT_ASSERT(eh->eh_entries > 0);
++
++      ext_debug(tree, "binsearch for %d(idx):  ", block);
++
++      path->p_idx = ix = EXT_FIRST_INDEX(eh);
++
++      r = k = eh->eh_entries;
++      while (k > 1) {
++              k = (r - l) / 2;
++              if (block < ix[l + k].ei_block)
++                      r -= k;
++              else
++                      l += k;
++              ext_debug(tree, "%d:%d:%d ", k, l, r);
++      }
++
++      ix += l;
++      path->p_idx = ix;
++      ext_debug(tree, "  -> %d->%d ", path->p_idx->ei_block, path->p_idx->ei_leaf);
++
++      while (l++ < r) {
++              if (block < ix->ei_block) 
++                      break;
++              path->p_idx = ix++;
++      }
++      ext_debug(tree, "  -> %d->%d\n", path->p_idx->ei_block,
++                      path->p_idx->ei_leaf);
++
++#ifdef CHECK_BINSEARCH 
++      {
++              struct ext3_extent_idx *chix;
++
++              chix = ix = EXT_FIRST_INDEX(eh);
++              for (k = 0; k < eh->eh_entries; k++, ix++) {
++                      if (k != 0 && ix->ei_block <= ix[-1].ei_block) {
++                              printk("k=%d, ix=0x%p, first=0x%p\n", k,
++                                      ix, EXT_FIRST_INDEX(eh));
++                              printk("%u <= %u\n",
++                                      ix->ei_block,ix[-1].ei_block);
++                      }
++                      EXT_ASSERT(k == 0 || ix->ei_block > ix[-1].ei_block);
++                      if (block < ix->ei_block) 
++                              break;
++                      chix = ix;
++              }
++              EXT_ASSERT(chix == path->p_idx);
++      }
++#endif
++
++}
++
++/*
++ * binary search for closest extent by given block
++ */
++static inline void
++ext3_ext_binsearch(struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, int block)
++{
++      struct ext3_extent_header *eh = path->p_hdr;
++      struct ext3_extent *ex;
++      int l = 0, k, r;
++
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++
++      if (eh->eh_entries == 0) {
++              /*
++               * this leaf is empty yet:
++               *  we get such a leaf in split/add case
++               */
++              return;
++      }
++      
++      ext_debug(tree, "binsearch for %d:  ", block);
++
++      path->p_ext = ex = EXT_FIRST_EXTENT(eh);
++
++      r = k = eh->eh_entries;
++      while (k > 1) {
++              k = (r - l) / 2;
++              if (block < ex[l + k].ee_block)
++                      r -= k;
++              else
++                      l += k;
++              ext_debug(tree, "%d:%d:%d ", k, l, r);
++      }
++
++      ex += l;
++      path->p_ext = ex;
++      ext_debug(tree, "  -> %d:%d:%d ", path->p_ext->ee_block,
++                      path->p_ext->ee_start, path->p_ext->ee_len);
++
++      while (l++ < r) {
++              if (block < ex->ee_block) 
++                      break;
++              path->p_ext = ex++;
++      }
++      ext_debug(tree, "  -> %d:%d:%d\n", path->p_ext->ee_block,
++                      path->p_ext->ee_start, path->p_ext->ee_len);
++
++#ifdef CHECK_BINSEARCH 
++      {
++              struct ext3_extent *chex;
++
++              chex = ex = EXT_FIRST_EXTENT(eh);
++              for (k = 0; k < eh->eh_entries; k++, ex++) {
++                      EXT_ASSERT(k == 0 || ex->ee_block > ex[-1].ee_block);
++                      if (block < ex->ee_block) 
++                              break;
++                      chex = ex;
++              }
++              EXT_ASSERT(chex == path->p_ext);
++      }
++#endif
++
++}
++
++int ext3_extent_tree_init(handle_t *handle, struct ext3_extents_tree *tree)
++{
++      struct ext3_extent_header *eh;
++
++      BUG_ON(tree->buffer_len == 0);
++      ext3_ext_get_access_for_root(handle, tree);
++      eh = EXT_ROOT_HDR(tree);
++      eh->eh_depth = 0;
++      eh->eh_entries = 0;
++      eh->eh_magic = EXT3_EXT_MAGIC;
++      eh->eh_max = ext3_ext_space_root(tree);
++      ext3_ext_mark_root_dirty(handle, tree);
++      ext3_ext_invalidate_cache(tree);
++      return 0;
++}
++
++struct ext3_ext_path *
++ext3_ext_find_extent(struct ext3_extents_tree *tree, int block,
++                      struct ext3_ext_path *path)
++{
++      struct ext3_extent_header *eh;
++      struct buffer_head *bh;
++      int depth, i, ppos = 0;
++
++      EXT_ASSERT(tree);
++      EXT_ASSERT(tree->inode);
++      EXT_ASSERT(tree->root);
++
++      eh = EXT_ROOT_HDR(tree);
++      EXT_ASSERT(eh);
++      i = depth = EXT_DEPTH(tree);
++      EXT_ASSERT(eh->eh_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      EXT_ASSERT(i == 0 || eh->eh_entries > 0);
++      
++      /* account possible depth increase */
++      if (!path) {
++              path = kmalloc(sizeof(struct ext3_ext_path) * (depth + 2),
++                              GFP_NOFS);
++              if (!path)
++                      return ERR_PTR(-ENOMEM);
++      }
++      memset(path, 0, sizeof(struct ext3_ext_path) * (depth + 1));
++      path[0].p_hdr = eh;
++
++      /* walk through the tree */
++      while (i) {
++              ext_debug(tree, "depth %d: num %d, max %d\n",
++                              ppos, eh->eh_entries, eh->eh_max);
++              ext3_ext_binsearch_idx(tree, path + ppos, block);
++              path[ppos].p_block = path[ppos].p_idx->ei_leaf;
++              path[ppos].p_depth = i;
++              path[ppos].p_ext = NULL;
++
++              bh = sb_bread(tree->inode->i_sb, path[ppos].p_block);
++              if (!bh) {
++                      ext3_ext_drop_refs(path);
++                      kfree(path);
++                      return ERR_PTR(-EIO);
++              }
++              eh = EXT_BLOCK_HDR(bh);
++              ppos++;
++              EXT_ASSERT(ppos <= depth);
++              path[ppos].p_bh = bh;
++              path[ppos].p_hdr = eh;
++              i--;
++      }
++
++      path[ppos].p_depth = i;
++      path[ppos].p_hdr = eh;
++      path[ppos].p_ext = NULL;
++
++      /* find extent */
++      ext3_ext_binsearch(tree, path + ppos, block);
++
++      ext3_ext_show_path(tree, path);
++
++      return path;
++}
++
++/*
++ * insert new index [logical;ptr] into the block at cupr
++ * it check where to insert: before curp or after curp
++ */
++static int ext3_ext_insert_index(handle_t *handle,
++                              struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *curp,
++                              int logical, int ptr)
++{
++      struct ext3_extent_idx *ix;
++      int len, err;
++
++      if ((err = ext3_ext_get_access(handle, tree, curp)))
++              return err;
++
++      EXT_ASSERT(logical != curp->p_idx->ei_block);
++      len = EXT_MAX_INDEX(curp->p_hdr) - curp->p_idx;
++      if (logical > curp->p_idx->ei_block) {
++              /* insert after */
++              if (curp->p_idx != EXT_LAST_INDEX(curp->p_hdr)) {
++                      len = (len - 1) * sizeof(struct ext3_extent_idx);
++                      len = len < 0 ? 0 : len;
++                      ext_debug(tree, "insert new index %d after: %d. "
++                                      "move %d from 0x%p to 0x%p\n",
++                                      logical, ptr, len,
++                                      (curp->p_idx + 1), (curp->p_idx + 2));
++                      memmove(curp->p_idx + 2, curp->p_idx + 1, len);
++              }
++              ix = curp->p_idx + 1;
++      } else {
++              /* insert before */
++              len = len * sizeof(struct ext3_extent_idx);
++              len = len < 0 ? 0 : len;
++              ext_debug(tree, "insert new index %d before: %d. "
++                              "move %d from 0x%p to 0x%p\n",
++                              logical, ptr, len,
++                              curp->p_idx, (curp->p_idx + 1));
++              memmove(curp->p_idx + 1, curp->p_idx, len);
++              ix = curp->p_idx;
++      }
++
++      ix->ei_block = logical;
++      ix->ei_leaf = ptr;
++      curp->p_hdr->eh_entries++;
++
++      EXT_ASSERT(curp->p_hdr->eh_entries <= curp->p_hdr->eh_max);
++      EXT_ASSERT(ix <= EXT_LAST_INDEX(curp->p_hdr));
++
++      err = ext3_ext_dirty(handle, tree, curp);
++      ext3_std_error(tree->inode->i_sb, err);
++
++      return err;
++}
++
++/*
++ * routine inserts new subtree into the path, using free index entry
++ * at depth 'at:
++ *  - allocates all needed blocks (new leaf and all intermediate index blocks)
++ *  - makes decision where to split
++ *  - moves remaining extens and index entries (right to the split point)
++ *    into the newly allocated blocks
++ *  - initialize subtree
++ */
++static int ext3_ext_split(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path,
++                              struct ext3_extent *newext, int at)
++{
++      struct buffer_head *bh = NULL;
++      int depth = EXT_DEPTH(tree);
++      struct ext3_extent_header *neh;
++      struct ext3_extent_idx *fidx;
++      struct ext3_extent *ex;
++      int i = at, k, m, a;
++      unsigned long newblock, oldblock, border;
++      int *ablocks = NULL; /* array of allocated blocks */
++      int err = 0;
++
++      /* make decision: where to split? */
++      /* FIXME: now desicion is simplest: at current extent */
++
++      /* if current leaf will be splitted, then we should use 
++       * border from split point */
++      EXT_ASSERT(path[depth].p_ext <= EXT_MAX_EXTENT(path[depth].p_hdr));
++      if (path[depth].p_ext != EXT_MAX_EXTENT(path[depth].p_hdr)) {
++              border = path[depth].p_ext[1].ee_block;
++              ext_debug(tree, "leaf will be splitted."
++                              " next leaf starts at %d\n",
++                              (int)border);
++      } else {
++              border = newext->ee_block;
++              ext_debug(tree, "leaf will be added."
++                              " next leaf starts at %d\n",
++                              (int)border);
++      }
++
++      /* 
++       * if error occurs, then we break processing
++       * and turn filesystem read-only. so, index won't
++       * be inserted and tree will be in consistent
++       * state. next mount will repair buffers too
++       */
++
++      /*
++       * get array to track all allocated blocks
++       * we need this to handle errors and free blocks
++       * upon them
++       */
++      ablocks = kmalloc(sizeof(unsigned long) * depth, GFP_NOFS);
++      if (!ablocks)
++              return -ENOMEM;
++      memset(ablocks, 0, sizeof(unsigned long) * depth);
++
++      /* allocate all needed blocks */
++      ext_debug(tree, "allocate %d blocks for indexes/leaf\n", depth - at);
++      for (a = 0; a < depth - at; a++) {
++              newblock = ext3_ext_new_block(handle, tree, path, newext, &err);
++              if (newblock == 0)
++                      goto cleanup;
++              ablocks[a] = newblock;
++      }
++
++      /* initialize new leaf */
++      newblock = ablocks[--a];
++      EXT_ASSERT(newblock);
++      bh = sb_getblk(tree->inode->i_sb, newblock);
++      if (!bh) {
++              err = -EIO;
++              goto cleanup;
++      }
++      lock_buffer(bh);
++
++      if ((err = ext3_journal_get_create_access(handle, bh)))
++              goto cleanup;
++
++      neh = EXT_BLOCK_HDR(bh);
++      neh->eh_entries = 0;
++      neh->eh_max = ext3_ext_space_block(tree);
++      neh->eh_magic = EXT3_EXT_MAGIC;
++      neh->eh_depth = 0;
++      ex = EXT_FIRST_EXTENT(neh);
++
++      /* move remain of path[depth] to the new leaf */
++      EXT_ASSERT(path[depth].p_hdr->eh_entries == path[depth].p_hdr->eh_max);
++      /* start copy from next extent */
++      /* TODO: we could do it by single memmove */
++      m = 0;
++      path[depth].p_ext++;
++      while (path[depth].p_ext <=
++                      EXT_MAX_EXTENT(path[depth].p_hdr)) {
++              ext_debug(tree, "move %d:%d:%d in new leaf %lu\n",
++                              path[depth].p_ext->ee_block,
++                              path[depth].p_ext->ee_start,
++                              path[depth].p_ext->ee_len,
++                              newblock);
++              memmove(ex++, path[depth].p_ext++,
++                              sizeof(struct ext3_extent));
++              neh->eh_entries++;
++              m++;
++      }
++      set_buffer_uptodate(bh);
++      unlock_buffer(bh);
++
++      if ((err = ext3_journal_dirty_metadata(handle, bh)))
++              goto cleanup;   
++      brelse(bh);
++      bh = NULL;
++
++      /* correct old leaf */
++      if (m) {
++              if ((err = ext3_ext_get_access(handle, tree, path + depth)))
++                      goto cleanup;
++              path[depth].p_hdr->eh_entries -= m;
++              if ((err = ext3_ext_dirty(handle, tree, path + depth)))
++                      goto cleanup;
++              
++      }
++
++      /* create intermediate indexes */
++      k = depth - at - 1;
++      EXT_ASSERT(k >= 0);
++      if (k)
++              ext_debug(tree, "create %d intermediate indices\n", k);
++      /* insert new index into current index block */
++      /* current depth stored in i var */
++      i = depth - 1;
++      while (k--) {
++              oldblock = newblock;
++              newblock = ablocks[--a];
++              bh = sb_getblk(tree->inode->i_sb, newblock);
++              if (!bh) {
++                      err = -EIO;
++                      goto cleanup;
++              }
++              lock_buffer(bh);
++
++              if ((err = ext3_journal_get_create_access(handle, bh)))
++                      goto cleanup;
++
++              neh = EXT_BLOCK_HDR(bh);
++              neh->eh_entries = 1;
++              neh->eh_magic = EXT3_EXT_MAGIC;
++              neh->eh_max = ext3_ext_space_block_idx(tree);
++              neh->eh_depth = depth - i; 
++              fidx = EXT_FIRST_INDEX(neh);
++              fidx->ei_block = border;
++              fidx->ei_leaf = oldblock;
++
++              ext_debug(tree, "int.index at %d (block %lu): %lu -> %lu\n",
++                              i, newblock, border, oldblock);
++              /* copy indexes */
++              m = 0;
++              path[i].p_idx++;
++
++              ext_debug(tree, "cur 0x%p, last 0x%p\n", path[i].p_idx,
++                              EXT_MAX_INDEX(path[i].p_hdr));
++              EXT_ASSERT(EXT_MAX_INDEX(path[i].p_hdr) ==
++                              EXT_LAST_INDEX(path[i].p_hdr));
++              while (path[i].p_idx <= EXT_MAX_INDEX(path[i].p_hdr)) {
++                      ext_debug(tree, "%d: move %d:%d in new index %lu\n",
++                                      i, path[i].p_idx->ei_block,
++                                      path[i].p_idx->ei_leaf, newblock);
++                      memmove(++fidx, path[i].p_idx++,
++                                      sizeof(struct ext3_extent_idx));
++                      neh->eh_entries++;
++                      EXT_ASSERT(neh->eh_entries <= neh->eh_max);
++                      m++;
++              }
++              set_buffer_uptodate(bh);
++              unlock_buffer(bh);
++
++              if ((err = ext3_journal_dirty_metadata(handle, bh)))
++                      goto cleanup;
++              brelse(bh);
++              bh = NULL;
++
++              /* correct old index */
++              if (m) {
++                      err = ext3_ext_get_access(handle, tree, path + i);
++                      if (err)
++                              goto cleanup;
++                      path[i].p_hdr->eh_entries -= m;
++                      err = ext3_ext_dirty(handle, tree, path + i);
++                      if (err)
++                              goto cleanup;
++              }
++
++              i--;
++      }
++
++      /* insert new index */
++      if (!err)
++              err = ext3_ext_insert_index(handle, tree, path + at,
++                                              border, newblock);
++
++cleanup:
++      if (bh) {
++              if (buffer_locked(bh))
++                      unlock_buffer(bh);
++              brelse(bh);
++      }
++
++      if (err) {
++              /* free all allocated blocks in error case */
++              for (i = 0; i < depth; i++) {
++                      if (!ablocks[i])
++                              continue;
++                      ext3_free_blocks(handle, tree->inode, ablocks[i], 1);
++              }
++      }
++      kfree(ablocks);
++
++      return err;
++}
++
++/*
++ * routine implements tree growing procedure:
++ *  - allocates new block
++ *  - moves top-level data (index block or leaf) into the new block
++ *  - initialize new top-level, creating index that points to the
++ *    just created block
++ */
++static int ext3_ext_grow_indepth(handle_t *handle,
++                                      struct ext3_extents_tree *tree,
++                                      struct ext3_ext_path *path,
++                                      struct ext3_extent *newext)
++{
++      struct ext3_ext_path *curp = path;
++      struct ext3_extent_header *neh;
++      struct ext3_extent_idx *fidx;
++      struct buffer_head *bh;
++      unsigned long newblock;
++      int err = 0;
++
++      newblock = ext3_ext_new_block(handle, tree, path, newext, &err);
++      if (newblock == 0)
++              return err;
++
++      bh = sb_getblk(tree->inode->i_sb, newblock);
++      if (!bh) {
++              err = -EIO;
++              ext3_std_error(tree->inode->i_sb, err);
++              return err;
++      }
++      lock_buffer(bh);
++
++      if ((err = ext3_journal_get_create_access(handle, bh))) {
++              unlock_buffer(bh);
++              goto out;       
++      }
++
++      /* move top-level index/leaf into new block */
++      memmove(bh->b_data, curp->p_hdr, tree->buffer_len);
++
++      /* set size of new block */
++      neh = EXT_BLOCK_HDR(bh);
++      /* old root could have indexes or leaves
++       * so calculate e_max right way */
++      if (EXT_DEPTH(tree))
++              neh->eh_max = ext3_ext_space_block_idx(tree);
++      else
++              neh->eh_max = ext3_ext_space_block(tree);
++      neh->eh_magic = EXT3_EXT_MAGIC;
++      set_buffer_uptodate(bh);
++      unlock_buffer(bh);
++
++      if ((err = ext3_journal_dirty_metadata(handle, bh)))
++              goto out;
++
++      /* create index in new top-level index: num,max,pointer */
++      if ((err = ext3_ext_get_access(handle, tree, curp)))
++              goto out;
++
++      curp->p_hdr->eh_magic = EXT3_EXT_MAGIC;
++      curp->p_hdr->eh_max = ext3_ext_space_root_idx(tree);
++      curp->p_hdr->eh_entries = 1;
++      curp->p_idx = EXT_FIRST_INDEX(curp->p_hdr);
++      /* FIXME: it works, but actually path[0] can be index */
++      curp->p_idx->ei_block = EXT_FIRST_EXTENT(path[0].p_hdr)->ee_block;
++      curp->p_idx->ei_leaf = newblock;
++
++      neh = EXT_ROOT_HDR(tree);
++      fidx = EXT_FIRST_INDEX(neh);
++      ext_debug(tree, "new root: num %d(%d), lblock %d, ptr %d\n",
++                      neh->eh_entries, neh->eh_max, fidx->ei_block, fidx->ei_leaf); 
++
++      neh->eh_depth = path->p_depth + 1;
++      err = ext3_ext_dirty(handle, tree, curp);
++out:
++      brelse(bh);
++
++      return err;
++}
++
++/*
++ * routine finds empty index and adds new leaf. if no free index found
++ * then it requests in-depth growing
++ */
++static int ext3_ext_create_new_leaf(handle_t *handle,
++                                      struct ext3_extents_tree *tree,
++                                      struct ext3_ext_path *path,
++                                      struct ext3_extent *newext)
++{
++      struct ext3_ext_path *curp;
++      int depth, i, err = 0;
++
++repeat:
++      i = depth = EXT_DEPTH(tree);
++      
++      /* walk up to the tree and look for free index entry */
++      curp = path + depth;
++      while (i > 0 && !EXT_HAS_FREE_INDEX(curp)) {
++              i--;
++              curp--;
++      }
++
++      /* we use already allocated block for index block
++       * so, subsequent data blocks should be contigoues */
++      if (EXT_HAS_FREE_INDEX(curp)) {
++              /* if we found index with free entry, then use that
++               * entry: create all needed subtree and add new leaf */
++              err = ext3_ext_split(handle, tree, path, newext, i);
++
++              /* refill path */
++              ext3_ext_drop_refs(path);
++              path = ext3_ext_find_extent(tree, newext->ee_block, path);
++              if (IS_ERR(path))
++                      err = PTR_ERR(path);
++      } else {
++              /* tree is full, time to grow in depth */
++              err = ext3_ext_grow_indepth(handle, tree, path, newext);
++
++              /* refill path */
++              ext3_ext_drop_refs(path);
++              path = ext3_ext_find_extent(tree, newext->ee_block, path);
++              if (IS_ERR(path))
++                      err = PTR_ERR(path);
++
++              /*
++               * only first (depth 0 -> 1) produces free space
++               * in all other cases we have to split growed tree
++               */
++              depth = EXT_DEPTH(tree);
++              if (path[depth].p_hdr->eh_entries == path[depth].p_hdr->eh_max) {
++                      /* now we need split */
++                      goto repeat;
++              }
++      }
++
++      if (err)
++              return err;
++
++      return 0;
++}
++
++/*
++ * returns allocated block in subsequent extent or EXT_MAX_BLOCK
++ * NOTE: it consider block number from index entry as
++ * allocated block. thus, index entries have to be consistent
++ * with leafs
++ */
++static unsigned long
++ext3_ext_next_allocated_block(struct ext3_ext_path *path)
++{
++      int depth;
++
++      EXT_ASSERT(path != NULL);
++      depth = path->p_depth;
++
++      if (depth == 0 && path->p_ext == NULL)
++              return EXT_MAX_BLOCK;
++
++      /* FIXME: what if index isn't full ?! */
++      while (depth >= 0) {
++              if (depth == path->p_depth) {
++                      /* leaf */
++                      if (path[depth].p_ext !=
++                                      EXT_LAST_EXTENT(path[depth].p_hdr))
++                              return path[depth].p_ext[1].ee_block;
++              } else {
++                      /* index */
++                      if (path[depth].p_idx !=
++                                      EXT_LAST_INDEX(path[depth].p_hdr))
++                              return path[depth].p_idx[1].ei_block;
++              }
++              depth--;        
++      }
++
++      return EXT_MAX_BLOCK;
++}
++
++/*
++ * returns first allocated block from next leaf or EXT_MAX_BLOCK
++ */
++static unsigned ext3_ext_next_leaf_block(struct ext3_extents_tree *tree,
++                                               struct ext3_ext_path *path)
++{
++      int depth;
++
++      EXT_ASSERT(path != NULL);
++      depth = path->p_depth;
++
++      /* zero-tree has no leaf blocks at all */
++      if (depth == 0)
++              return EXT_MAX_BLOCK;
++
++      /* go to index block */
++      depth--;
++      
++      while (depth >= 0) {
++              if (path[depth].p_idx !=
++                              EXT_LAST_INDEX(path[depth].p_hdr))
++                      return path[depth].p_idx[1].ei_block;
++              depth--;        
++      }
++
++      return EXT_MAX_BLOCK;
++}
++
++/*
++ * if leaf gets modified and modified extent is first in the leaf
++ * then we have to correct all indexes above
++ * TODO: do we need to correct tree in all cases?
++ */
++int ext3_ext_correct_indexes(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path)
++{
++      struct ext3_extent_header *eh;
++      int depth = EXT_DEPTH(tree);    
++      struct ext3_extent *ex;
++      unsigned long border;
++      int k, err = 0;
++      
++      eh = path[depth].p_hdr;
++      ex = path[depth].p_ext;
++      EXT_ASSERT(ex);
++      EXT_ASSERT(eh);
++      
++      if (depth == 0) {
++              /* there is no tree at all */
++              return 0;
++      }
++      
++      if (ex != EXT_FIRST_EXTENT(eh)) {
++              /* we correct tree if first leaf got modified only */
++              return 0;
++      }
++      
++      /*
++       * TODO: we need correction if border is smaller then current one
++       */
++      k = depth - 1;
++      border = path[depth].p_ext->ee_block;
++      if ((err = ext3_ext_get_access(handle, tree, path + k)))
++              return err;
++      path[k].p_idx->ei_block = border;
++      if ((err = ext3_ext_dirty(handle, tree, path + k)))
++              return err;
++
++      while (k--) {
++              /* change all left-side indexes */
++              if (path[k+1].p_idx != EXT_FIRST_INDEX(path[k+1].p_hdr))
++                      break;
++              if ((err = ext3_ext_get_access(handle, tree, path + k)))
++                      break;
++              path[k].p_idx->ei_block = border;
++              if ((err = ext3_ext_dirty(handle, tree, path + k)))
++                      break;
++      }
++
++      return err;
++}
++
++static int inline
++ext3_can_extents_be_merged(struct ext3_extents_tree *tree,
++                              struct ext3_extent *ex1,
++                              struct ext3_extent *ex2)
++{
++      if (ex1->ee_block + ex1->ee_len != ex2->ee_block)
++              return 0;
++
++#ifdef AGRESSIVE_TEST
++      if (ex1->ee_len >= 4)
++              return 0;
++#endif
++
++      if (!tree->ops->mergable)
++              return 1;
++
++      return tree->ops->mergable(ex1, ex2);
++}
++
++/*
++ * this routine tries to merge requsted extent into the existing
++ * extent or inserts requested extent as new one into the tree,
++ * creating new leaf in no-space case
++ */
++int ext3_ext_insert_extent(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path,
++                              struct ext3_extent *newext)
++{
++      struct ext3_extent_header * eh;
++      struct ext3_extent *ex, *fex;
++      struct ext3_extent *nearex; /* nearest extent */
++      struct ext3_ext_path *npath = NULL;
++      int depth, len, err, next;
++
++      EXT_ASSERT(newext->ee_len > 0);
++      EXT_ASSERT(newext->ee_len < EXT_CACHE_MARK);
++      depth = EXT_DEPTH(tree);
++      ex = path[depth].p_ext;
++      EXT_ASSERT(path[depth].p_hdr);
++
++      /* try to insert block into found extent and return */
++      if (ex && ext3_can_extents_be_merged(tree, ex, newext)) {
++              ext_debug(tree, "append %d block to %d:%d (from %d)\n",
++                              newext->ee_len, ex->ee_block, ex->ee_len,
++                              ex->ee_start);
++              if ((err = ext3_ext_get_access(handle, tree, path + depth)))
++                      return err;
++              ex->ee_len += newext->ee_len;
++              eh = path[depth].p_hdr;
++              nearex = ex;
++              goto merge;
++      }
++
++repeat:
++      depth = EXT_DEPTH(tree);
++      eh = path[depth].p_hdr;
++      if (eh->eh_entries < eh->eh_max)
++              goto has_space;
++
++      /* probably next leaf has space for us? */
++      fex = EXT_LAST_EXTENT(eh);
++      next = ext3_ext_next_leaf_block(tree, path);
++      if (newext->ee_block > fex->ee_block && next != EXT_MAX_BLOCK) {
++              ext_debug(tree, "next leaf block - %d\n", next);
++              EXT_ASSERT(!npath);
++              npath = ext3_ext_find_extent(tree, next, NULL);
++              if (IS_ERR(npath))
++                      return PTR_ERR(npath);
++              EXT_ASSERT(npath->p_depth == path->p_depth);
++              eh = npath[depth].p_hdr;
++              if (eh->eh_entries < eh->eh_max) {
++                      ext_debug(tree, "next leaf isnt full(%d)\n",
++                                      eh->eh_entries);
++                      path = npath;
++                      goto repeat;
++              }
++              ext_debug(tree, "next leaf hasno free space(%d,%d)\n",
++                              eh->eh_entries, eh->eh_max);
++      }
++
++      /*
++       * there is no free space in found leaf
++       * we're gonna add new leaf in the tree
++       */
++      err = ext3_ext_create_new_leaf(handle, tree, path, newext);
++      if (err)
++              goto cleanup;
++      depth = EXT_DEPTH(tree);
++      eh = path[depth].p_hdr;
++
++has_space:
++      nearex = path[depth].p_ext;
++
++      if ((err = ext3_ext_get_access(handle, tree, path + depth)))
++              goto cleanup;
++
++      if (!nearex) {
++              /* there is no extent in this leaf, create first one */
++              ext_debug(tree, "first extent in the leaf: %d:%d:%d\n",
++                              newext->ee_block, newext->ee_start,
++                              newext->ee_len);
++              path[depth].p_ext = EXT_FIRST_EXTENT(eh);
++      } else if (newext->ee_block > nearex->ee_block) {
++              EXT_ASSERT(newext->ee_block != nearex->ee_block);
++              if (nearex != EXT_LAST_EXTENT(eh)) {
++                      len = EXT_MAX_EXTENT(eh) - nearex;
++                      len = (len - 1) * sizeof(struct ext3_extent);
++                      len = len < 0 ? 0 : len;
++                      ext_debug(tree, "insert %d:%d:%d after: nearest 0x%p, "
++                                      "move %d from 0x%p to 0x%p\n",
++                                      newext->ee_block, newext->ee_start,
++                                      newext->ee_len,
++                                      nearex, len, nearex + 1, nearex + 2);
++                      memmove(nearex + 2, nearex + 1, len);
++              }
++              path[depth].p_ext = nearex + 1;
++      } else {
++              EXT_ASSERT(newext->ee_block != nearex->ee_block);
++              len = (EXT_MAX_EXTENT(eh) - nearex) * sizeof(struct ext3_extent);
++              len = len < 0 ? 0 : len;
++              ext_debug(tree, "insert %d:%d:%d before: nearest 0x%p, "
++                              "move %d from 0x%p to 0x%p\n",
++                              newext->ee_block, newext->ee_start, newext->ee_len,
++                              nearex, len, nearex + 1, nearex + 2);
++              memmove(nearex + 1, nearex, len);
++              path[depth].p_ext = nearex;
++      }
++
++      eh->eh_entries++;
++      nearex = path[depth].p_ext;
++      nearex->ee_block = newext->ee_block;
++      nearex->ee_start = newext->ee_start;
++      nearex->ee_len = newext->ee_len;
++      /* FIXME: support for large fs */
++      nearex->ee_start_hi = 0;
++
++merge:
++      /* try to merge extents to the right */
++      while (nearex < EXT_LAST_EXTENT(eh)) {
++              if (!ext3_can_extents_be_merged(tree, nearex, nearex + 1))
++                      break;
++              /* merge with next extent! */
++              nearex->ee_len += nearex[1].ee_len;
++              if (nearex + 1 < EXT_LAST_EXTENT(eh)) {
++                      len = (EXT_LAST_EXTENT(eh) - nearex - 1)
++                                      * sizeof(struct ext3_extent);
++                      memmove(nearex + 1, nearex + 2, len);
++              }
++              eh->eh_entries--;
++              EXT_ASSERT(eh->eh_entries > 0);
++      }
++
++      /* try to merge extents to the left */
++
++      /* time to correct all indexes above */
++      err = ext3_ext_correct_indexes(handle, tree, path);
++      if (err)
++              goto cleanup;
++
++      err = ext3_ext_dirty(handle, tree, path + depth);
++
++cleanup:
++      if (npath) {
++              ext3_ext_drop_refs(npath);
++              kfree(npath);
++      }
++      ext3_ext_tree_changed(tree);
++      ext3_ext_invalidate_cache(tree);
++      return err;
++}
++
++int ext3_ext_walk_space(struct ext3_extents_tree *tree, unsigned long block,
++                      unsigned long num, ext_prepare_callback func)
++{
++      struct ext3_ext_path *path = NULL;
++      struct ext3_extent *ex, cbex;
++      unsigned long next, start = 0, end = 0;
++      unsigned long last = block + num;
++      int depth, exists, err = 0;
++
++      EXT_ASSERT(tree);
++      EXT_ASSERT(func);
++      EXT_ASSERT(tree->inode);
++      EXT_ASSERT(tree->root);
++
++      while (block < last && block != EXT_MAX_BLOCK) {
++              num = last - block;
++              /* find extent for this block */
++              path = ext3_ext_find_extent(tree, block, path);
++              if (IS_ERR(path)) {
++                      err = PTR_ERR(path);
++                      path = NULL;
++                      break;
++              }
++
++              depth = EXT_DEPTH(tree);
++              EXT_ASSERT(path[depth].p_hdr);
++              ex = path[depth].p_ext;
++              next = ext3_ext_next_allocated_block(path);
++
++              exists = 0;
++              if (!ex) {
++                      /* there is no extent yet, so try to allocate
++                       * all requested space */
++                      start = block;
++                      end = block + num;
++              } else if (ex->ee_block > block) {
++                      /* need to allocate space before found extent */
++                      start = block;
++                      end = ex->ee_block;
++                      if (block + num < end)
++                              end = block + num;
++              } else if (block >= ex->ee_block + ex->ee_len) {
++                      /* need to allocate space after found extent */
++                      start = block;
++                      end = block + num;
++                      if (end >= next)
++                              end = next;
++              } else if (block >= ex->ee_block) {
++                      /* 
++                       * some part of requested space is covered
++                       * by found extent
++                       */
++                      start = block;
++                      end = ex->ee_block + ex->ee_len;
++                      if (block + num < end)
++                              end = block + num;
++                      exists = 1;
++              } else {
++                      BUG();
++              }
++              EXT_ASSERT(end > start);
++
++              if (!exists) {
++                      cbex.ee_block = start;
++                      cbex.ee_len = end - start;
++                      cbex.ee_start = 0;
++              } else
++                      cbex = *ex;
++
++              EXT_ASSERT(path[depth].p_hdr);
++              err = func(tree, path, &cbex, exists);
++              ext3_ext_drop_refs(path);
++
++              if (err < 0)
++                      break;
++              if (err == EXT_REPEAT)
++                      continue;
++              else if (err == EXT_BREAK) {
++                      err = 0;
++                      break;
++              }
++
++              if (EXT_DEPTH(tree) != depth) {
++                      /* depth was changed. we have to realloc path */
++                      kfree(path);
++                      path = NULL;
++              }
++
++              block = cbex.ee_block + cbex.ee_len;
++      }
++
++      if (path) {
++              ext3_ext_drop_refs(path);
++              kfree(path);
++      }
++
++      return err;
++}
++
++static inline void
++ext3_ext_put_in_cache(struct ext3_extents_tree *tree, struct ext3_extent *ex)
++{
++      if (tree->cex) {
++              EXT_ASSERT(ex);
++              EXT_ASSERT(ex->ee_len);
++              tree->cex->ee_block = ex->ee_block;
++              tree->cex->ee_start = ex->ee_start;
++              tree->cex->ee_len = ex->ee_len;
++      }
++}
++
++/*
++ * this routine calculate boundaries of the gap requested block fits into
++ * and cache this gap
++ */
++static inline void
++ext3_ext_put_gap_in_cache(struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path,
++                              unsigned long block)
++{
++      int depth = EXT_DEPTH(tree);
++      struct ext3_extent *ex, gex;
++
++      if (!tree->cex)
++              return;
++
++      ex = path[depth].p_ext;
++      if (ex == NULL) {
++              /* there is no extent yet, so gap is [0;-] */
++              gex.ee_block = 0;
++              gex.ee_len = EXT_CACHE_MARK;
++              ext_debug(tree, "cache gap(whole file):");
++      } else if (block < ex->ee_block) {
++              gex.ee_block = block;
++              gex.ee_len = ex->ee_block - block;
++              ext_debug(tree, "cache gap(before): %lu [%lu:%lu]",
++                              (unsigned long) block,
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len);
++      } else if (block >= ex->ee_block + ex->ee_len) {
++              gex.ee_block = ex->ee_block + ex->ee_len;
++              gex.ee_len = ext3_ext_next_allocated_block(path);
++              ext_debug(tree, "cache gap(after): [%lu:%lu] %lu",
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len,
++                              (unsigned long) block);
++              EXT_ASSERT(gex.ee_len > gex.ee_block);
++              gex.ee_len = gex.ee_len - gex.ee_block;
++      } else {
++              BUG();
++      }
++
++      ext_debug(tree, " -> %lu:%lu\n", (unsigned long) gex.ee_block,
++                      (unsigned long) gex.ee_len);
++      gex.ee_start = EXT_CACHE_MARK;
++      ext3_ext_put_in_cache(tree, &gex);
++}
++
++static inline int
++ext3_ext_in_cache(struct ext3_extents_tree *tree, unsigned long block,
++                      struct ext3_extent *ex)
++{
++      struct ext3_extent *cex = tree->cex;
++
++      /* is there cache storage at all? */
++      if (!cex)
++              return 0;
++
++      /* has cache valid data? */
++      if (cex->ee_len == 0)
++              return 0;
++
++      if (block >= cex->ee_block && block < cex->ee_block + cex->ee_len) {
++              ex->ee_block = cex->ee_block;
++              ex->ee_start = cex->ee_start;
++              ex->ee_len = cex->ee_len;
++              ext_debug(tree, "%lu cached by %lu:%lu:%lu\n",
++                              (unsigned long) block,
++                              (unsigned long) ex->ee_block,
++                              (unsigned long) ex->ee_len,
++                              (unsigned long) ex->ee_start);
++              return 1;
++      }
++
++      /* not in cache */
++      return 0;
++}
++
++/*
++ * routine removes index from the index block
++ * it's used in truncate case only. thus all requests are for
++ * last index in the block only
++ */
++int ext3_ext_rm_idx(handle_t *handle, struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path)
++{
++      struct buffer_head *bh;
++      int err;
++      
++      /* free index block */
++      path--;
++      EXT_ASSERT(path->p_hdr->eh_entries);
++      if ((err = ext3_ext_get_access(handle, tree, path)))
++              return err;
++      path->p_hdr->eh_entries--;
++      if ((err = ext3_ext_dirty(handle, tree, path)))
++              return err;
++      ext_debug(tree, "index is empty, remove it, free block %d\n",
++                      path->p_idx->ei_leaf);
++      bh = sb_find_get_block(tree->inode->i_sb, path->p_idx->ei_leaf);
++      ext3_forget(handle, 1, tree->inode, bh, path->p_idx->ei_leaf);
++      ext3_free_blocks(handle, tree->inode, path->p_idx->ei_leaf, 1);
++      return err;
++}
++
++int ext3_ext_calc_credits_for_insert(struct ext3_extents_tree *tree,
++                                      struct ext3_ext_path *path)
++{
++      int depth = EXT_DEPTH(tree);
++      int needed;
++
++      if (path) {
++              /* probably there is space in leaf? */
++              if (path[depth].p_hdr->eh_entries < path[depth].p_hdr->eh_max)
++                      return 1;
++      }
++      
++      /*
++       * the worste case we're expecting is creation of the
++       * new root (growing in depth) with index splitting
++       * for splitting we have to consider depth + 1 because
++       * previous growing could increase it
++       */
++      depth = depth + 1;
++
++      /* 
++       * growing in depth:
++       * block allocation + new root + old root
++       */
++      needed = EXT3_ALLOC_NEEDED + 2;
++
++      /* index split. we may need:
++       *   allocate intermediate indexes and new leaf
++       *   change two blocks at each level, but root
++       *   modify root block (inode)
++       */
++      needed += (depth * EXT3_ALLOC_NEEDED) + (2 * depth) + 1;
++
++      return needed;
++}
++
++static int
++ext3_ext_split_for_rm(handle_t *handle, struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, unsigned long start,
++                      unsigned long end)
++{
++      struct ext3_extent *ex, tex;
++      struct ext3_ext_path *npath;
++      int depth, creds, err;
++
++      depth = EXT_DEPTH(tree);
++      ex = path[depth].p_ext;
++      EXT_ASSERT(ex);
++      EXT_ASSERT(end < ex->ee_block + ex->ee_len - 1);
++      EXT_ASSERT(ex->ee_block < start);
++
++      /* calculate tail extent */
++      tex.ee_block = end + 1;
++      EXT_ASSERT(tex.ee_block < ex->ee_block + ex->ee_len);
++      tex.ee_len = ex->ee_block + ex->ee_len - tex.ee_block;
++
++      creds = ext3_ext_calc_credits_for_insert(tree, path);
++      handle = ext3_ext_journal_restart(handle, creds);
++      if (IS_ERR(handle))
++              return PTR_ERR(handle);
++      
++      /* calculate head extent. use primary extent */
++      err = ext3_ext_get_access(handle, tree, path + depth);
++      if (err)
++              return err;
++      ex->ee_len = start - ex->ee_block;
++      err = ext3_ext_dirty(handle, tree, path + depth);
++      if (err)
++              return err;
++
++      /* FIXME: some callback to free underlying resource
++       * and correct ee_start? */
++      ext_debug(tree, "split extent: head %u:%u, tail %u:%u\n",
++                      ex->ee_block, ex->ee_len, tex.ee_block, tex.ee_len);
++
++      npath = ext3_ext_find_extent(tree, ex->ee_block, NULL);
++      if (IS_ERR(npath))
++              return PTR_ERR(npath);
++      depth = EXT_DEPTH(tree);
++      EXT_ASSERT(npath[depth].p_ext->ee_block == ex->ee_block);
++      EXT_ASSERT(npath[depth].p_ext->ee_len == ex->ee_len);
++
++      err = ext3_ext_insert_extent(handle, tree, npath, &tex);
++      ext3_ext_drop_refs(npath);
++      kfree(npath);
++
++      return err;
++                      
++}
++
++static int
++ext3_ext_rm_leaf(handle_t *handle, struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path, unsigned long start,
++                      unsigned long end)
++{
++      struct ext3_extent *ex, *fu = NULL, *lu, *le;
++      int err = 0, correct_index = 0;
++      int depth = EXT_DEPTH(tree), credits;
++      struct ext3_extent_header *eh;
++      unsigned a, b, block, num;
++
++      ext_debug(tree, "remove [%lu:%lu] in leaf\n", start, end);
++      if (!path[depth].p_hdr)
++              path[depth].p_hdr = EXT_BLOCK_HDR(path[depth].p_bh);
++      eh = path[depth].p_hdr;
++      EXT_ASSERT(eh);
++      EXT_ASSERT(eh->eh_entries <= eh->eh_max);
++      EXT_ASSERT(eh->eh_magic == EXT3_EXT_MAGIC);
++      
++      /* find where to start removing */
++      le = ex = EXT_LAST_EXTENT(eh);
++      while (ex != EXT_FIRST_EXTENT(eh)) {
++              if (ex->ee_block <= end)
++                      break;
++              ex--;
++      }
++
++      if (start > ex->ee_block && end < ex->ee_block + ex->ee_len - 1) {
++              /* removal of internal part of the extent requested
++               * tail and head must be placed in different extent
++               * so, we have to insert one more extent */
++              path[depth].p_ext = ex;
++              return ext3_ext_split_for_rm(handle, tree, path, start, end);
++      }
++      
++      lu = ex;
++      while (ex >= EXT_FIRST_EXTENT(eh) &&
++                      ex->ee_block + ex->ee_len > start) {
++              ext_debug(tree, "remove ext %u:%u\n", ex->ee_block, ex->ee_len);
++              path[depth].p_ext = ex;
++      
++              a = ex->ee_block > start ? ex->ee_block : start;
++              b = ex->ee_block + ex->ee_len - 1 < end ?
++                      ex->ee_block + ex->ee_len - 1 : end;
++              
++              ext_debug(tree, "  border %u:%u\n", a, b);
++
++              if (a != ex->ee_block && b != ex->ee_block + ex->ee_len - 1) {
++                      block = 0;
++                      num = 0;
++                      BUG();
++              } else if (a != ex->ee_block) {
++                      /* remove tail of the extent */
++                      block = ex->ee_block;
++                      num = a - block;
++              } else if (b != ex->ee_block + ex->ee_len - 1) {
++                      /* remove head of the extent */
++                      block = a;
++                      num = b - a;
++              } else {
++                      /* remove whole extent: excelent! */
++                      block = ex->ee_block; 
++                      num = 0;
++                      EXT_ASSERT(a == ex->ee_block &&
++                                      b == ex->ee_block + ex->ee_len - 1);
++              }
++
++              if (ex == EXT_FIRST_EXTENT(eh))
++                      correct_index = 1;
++
++              credits = 1;
++              if (correct_index)
++                      credits += (EXT_DEPTH(tree) * EXT3_ALLOC_NEEDED) + 1;
++              if (tree->ops->remove_extent_credits)
++                      credits+=tree->ops->remove_extent_credits(tree,ex,a,b);
++              
++              handle = ext3_ext_journal_restart(handle, credits);
++              if (IS_ERR(handle)) {
++                      err = PTR_ERR(handle);
++                      goto out;
++              }
++
++              err = ext3_ext_get_access(handle, tree, path + depth);
++              if (err)
++                      goto out;
++
++              if (tree->ops->remove_extent)
++                      err = tree->ops->remove_extent(tree, ex, a, b);
++              if (err)
++                      goto out;
++
++              if (num == 0) {
++                      /* this extent is removed entirely mark slot unused */
++                      ex->ee_start = 0;
++                      eh->eh_entries--;
++                      fu = ex;
++              }
++
++              ex->ee_block = block;
++              ex->ee_len = num;
++
++              err = ext3_ext_dirty(handle, tree, path + depth);
++              if (err)
++                      goto out;
++
++              ext_debug(tree, "new extent: %u:%u:%u\n",
++                              ex->ee_block, ex->ee_len, ex->ee_start);
++              ex--;
++      }
++
++      if (fu) {
++              /* reuse unused slots */
++              while (lu < le) {
++                      if (lu->ee_start) {
++                              *fu = *lu;
++                              lu->ee_start = 0;
++                              fu++;
++                      }
++                      lu++;
++              }
++      }
++
++      if (correct_index && eh->eh_entries)
++              err = ext3_ext_correct_indexes(handle, tree, path);
++
++      /* if this leaf is free, then we should
++       * remove it from index block above */
++      if (err == 0 && eh->eh_entries == 0 && path[depth].p_bh != NULL)
++              err = ext3_ext_rm_idx(handle, tree, path + depth);
++
++out:
++      return err;
++}
++
++
++static struct ext3_extent_idx *
++ext3_ext_last_covered(struct ext3_extent_header *hdr, unsigned long block)
++{
++      struct ext3_extent_idx *ix;
++      
++      ix = EXT_LAST_INDEX(hdr);
++      while (ix != EXT_FIRST_INDEX(hdr)) {
++              if (ix->ei_block <= block)
++                      break;
++              ix--;
++      }
++      return ix;
++}
++
++/*
++ * returns 1 if current index have to be freed (even partial)
++ */
++static int inline
++ext3_ext_more_to_rm(struct ext3_ext_path *path)
++{
++      EXT_ASSERT(path->p_idx);
++
++      if (path->p_idx < EXT_FIRST_INDEX(path->p_hdr))
++              return 0;
++
++      /*
++       * if truncate on deeper level happened it it wasn't partial
++       * so we have to consider current index for truncation
++       */
++      if (path->p_hdr->eh_entries == path->p_block)
++              return 0;
++      return 1;
++}
++
++int ext3_ext_remove_space(struct ext3_extents_tree *tree,
++                              unsigned long start, unsigned long end)
++{
++      struct inode *inode = tree->inode;
++      struct super_block *sb = inode->i_sb;
++      int depth = EXT_DEPTH(tree);
++      struct ext3_ext_path *path;
++      handle_t *handle;
++      int i = 0, err = 0;
++
++      ext_debug(tree, "space to be removed: %lu:%lu\n", start, end);
++
++      /* probably first extent we're gonna free will be last in block */
++      handle = ext3_journal_start(inode, depth + 1);
++      if (IS_ERR(handle))
++              return PTR_ERR(handle);
++
++      ext3_ext_invalidate_cache(tree);
++
++      /*
++       * we start scanning from right side freeing all the blocks
++       * after i_size and walking into the deep
++       */
++      path = kmalloc(sizeof(struct ext3_ext_path) * (depth + 1), GFP_KERNEL);
++      if (IS_ERR(path)) {
++              ext3_error(sb, "ext3_ext_remove_space",
++                              "Can't allocate path array");
++              ext3_journal_stop(handle);
++              return -ENOMEM;
++      }
++      memset(path, 0, sizeof(struct ext3_ext_path) * (depth + 1));
++      path[i].p_hdr = EXT_ROOT_HDR(tree);
++      
++      while (i >= 0 && err == 0) {
++              if (i == depth) {
++                      /* this is leaf block */
++                      err = ext3_ext_rm_leaf(handle, tree, path, start, end);
++                      /* root level have p_bh == NULL, brelse() eats this */
++                      brelse(path[i].p_bh);
++                      i--;
++                      continue;
++              }
++              
++              /* this is index block */
++              if (!path[i].p_hdr) {
++                      ext_debug(tree, "initialize header\n");
++                      path[i].p_hdr = EXT_BLOCK_HDR(path[i].p_bh);
++              }
++
++              EXT_ASSERT(path[i].p_hdr->eh_entries <= path[i].p_hdr->eh_max);
++              EXT_ASSERT(path[i].p_hdr->eh_magic == EXT3_EXT_MAGIC);
++              
++              if (!path[i].p_idx) {
++                      /* this level hasn't touched yet */
++                      path[i].p_idx =
++                              ext3_ext_last_covered(path[i].p_hdr, end);
++                      path[i].p_block = path[i].p_hdr->eh_entries + 1;
++                      ext_debug(tree, "init index ptr: hdr 0x%p, num %d\n",
++                                      path[i].p_hdr, path[i].p_hdr->eh_entries);
++              } else {
++                      /* we've already was here, see at next index */
++                      path[i].p_idx--;
++              }
++
++              ext_debug(tree, "level %d - index, first 0x%p, cur 0x%p\n",
++                              i, EXT_FIRST_INDEX(path[i].p_hdr),
++                              path[i].p_idx);
++              if (ext3_ext_more_to_rm(path + i)) {
++                      /* go to the next level */
++                      ext_debug(tree, "move to level %d (block %d)\n",
++                                      i + 1, path[i].p_idx->ei_leaf);
++                      memset(path + i + 1, 0, sizeof(*path));
++                      path[i+1].p_bh = sb_bread(sb, path[i].p_idx->ei_leaf);
++                      if (!path[i+1].p_bh) {
++                              /* should we reset i_size? */
++                              err = -EIO;
++                              break;
++                      }
++                      /* put actual number of indexes to know is this
++                       * number got changed at the next iteration */
++                      path[i].p_block = path[i].p_hdr->eh_entries;
++                      i++;
++              } else {
++                      /* we finish processing this index, go up */
++                      if (path[i].p_hdr->eh_entries == 0 && i > 0) {
++                              /* index is empty, remove it
++                               * handle must be already prepared by the
++                               * truncatei_leaf() */
++                              err = ext3_ext_rm_idx(handle, tree, path + i);
++                      }
++                      /* root level have p_bh == NULL, brelse() eats this */
++                      brelse(path[i].p_bh);
++                      i--;
++                      ext_debug(tree, "return to level %d\n", i);
++              }
++      }
++
++      /* TODO: flexible tree reduction should be here */
++      if (path->p_hdr->eh_entries == 0) {
++              /*
++               * truncate to zero freed all the tree
++               * so, we need to correct eh_depth
++               */
++              err = ext3_ext_get_access(handle, tree, path);
++              if (err == 0) {
++                      EXT_ROOT_HDR(tree)->eh_depth = 0;
++                      EXT_ROOT_HDR(tree)->eh_max = ext3_ext_space_root(tree);
++                      err = ext3_ext_dirty(handle, tree, path);
++              }
++      }
++      ext3_ext_tree_changed(tree);
++
++      kfree(path);
++      ext3_journal_stop(handle);
++
++      return err;
++}
++
++int ext3_ext_calc_metadata_amount(struct ext3_extents_tree *tree, int blocks)
++{
++      int lcap, icap, rcap, leafs, idxs, num;
++
++      rcap = ext3_ext_space_root(tree);
++      if (blocks <= rcap) {
++              /* all extents fit to the root */
++              return 0;
++      }
++
++      rcap = ext3_ext_space_root_idx(tree);
++      lcap = ext3_ext_space_block(tree);
++      icap = ext3_ext_space_block_idx(tree);
++
++      num = leafs = (blocks + lcap - 1) / lcap;
++      if (leafs <= rcap) {
++              /* all pointers to leafs fit to the root */
++              return leafs;
++      }
++
++      /* ok. we need separate index block(s) to link all leaf blocks */
++      idxs = (leafs + icap - 1) / icap;
++      do {
++              num += idxs;
++              idxs = (idxs + icap - 1) / icap;
++      } while (idxs > rcap);
++
++      return num;
++}
++
++/*
++ * called at mount time
++ */
++void ext3_ext_init(struct super_block *sb)
++{
++      /*
++       * possible initialization would be here
++       */
++
++      if (test_opt(sb, EXTENTS)) {
++              printk("EXT3-fs: file extents enabled");
++#ifdef AGRESSIVE_TEST
++              printk(", agressive tests");
++#endif
++#ifdef CHECK_BINSEARCH
++              printk(", check binsearch");
++#endif
++              printk("\n");
++      }
++}
++
++/*
++ * called at umount time
++ */
++void ext3_ext_release(struct super_block *sb)
++{
++}
++
++/************************************************************************
++ * VFS related routines
++ ************************************************************************/
++
++static int ext3_get_inode_write_access(handle_t *handle, void *buffer)
++{
++      /* we use in-core data, not bh */
++      return 0;
++}
++
++static int ext3_mark_buffer_dirty(handle_t *handle, void *buffer)
++{
++      struct inode *inode = buffer;
++      return ext3_mark_inode_dirty(handle, inode);
++}
++
++static int ext3_ext_mergable(struct ext3_extent *ex1,
++                              struct ext3_extent *ex2)
++{
++      /* FIXME: support for large fs */
++      if (ex1->ee_start + ex1->ee_len == ex2->ee_start)
++              return 1;
++      return 0;
++}
++
++static int
++ext3_remove_blocks_credits(struct ext3_extents_tree *tree,
++                              struct ext3_extent *ex,
++                              unsigned long from, unsigned long to)
++{
++      int needed;
++      
++      /* at present, extent can't cross block group */;
++      needed = 4; /* bitmap + group desc + sb + inode */
++
++#ifdef CONFIG_QUOTA
++      needed += 2 * EXT3_SINGLEDATA_TRANS_BLOCKS;
++#endif
++      return needed;
++}
++
++static int
++ext3_remove_blocks(struct ext3_extents_tree *tree,
++                              struct ext3_extent *ex,
++                              unsigned long from, unsigned long to)
++{
++      int needed = ext3_remove_blocks_credits(tree, ex, from, to);
++      handle_t *handle = ext3_journal_start(tree->inode, needed);
++      struct buffer_head *bh;
++      int i;
++
++      if (IS_ERR(handle))
++              return PTR_ERR(handle);
++      if (from >= ex->ee_block && to == ex->ee_block + ex->ee_len - 1) {
++              /* tail removal */
++              unsigned long num, start;
++              num = ex->ee_block + ex->ee_len - from;
++              start = ex->ee_start + ex->ee_len - num;
++              ext_debug(tree, "free last %lu blocks starting %lu\n",
++                              num, start);
++              for (i = 0; i < num; i++) {
++                      bh = sb_find_get_block(tree->inode->i_sb, start + i);
++                      ext3_forget(handle, 0, tree->inode, bh, start + i);
++              }
++              ext3_free_blocks(handle, tree->inode, start, num);
++      } else if (from == ex->ee_block && to <= ex->ee_block + ex->ee_len - 1) {
++              printk("strange request: removal %lu-%lu from %u:%u\n",
++                      from, to, ex->ee_block, ex->ee_len);
++      } else {
++              printk("strange request: removal(2) %lu-%lu from %u:%u\n",
++                      from, to, ex->ee_block, ex->ee_len);
++      }
++      ext3_journal_stop(handle);
++      return 0;
++}
++
++static int ext3_ext_find_goal(struct inode *inode,
++                              struct ext3_ext_path *path, unsigned long block)
++{
++      struct ext3_inode_info *ei = EXT3_I(inode);
++      unsigned long bg_start;
++      unsigned long colour;
++      int depth;
++      
++      if (path) {
++              struct ext3_extent *ex;
++              depth = path->p_depth;
++              
++              /* try to predict block placement */
++              if ((ex = path[depth].p_ext))
++                      return ex->ee_start + (block - ex->ee_block);
++
++              /* it looks index is empty
++               * try to find starting from index itself */
++              if (path[depth].p_bh)
++                      return path[depth].p_bh->b_blocknr;
++      }
++
++      /* OK. use inode's group */
++      bg_start = (ei->i_block_group * EXT3_BLOCKS_PER_GROUP(inode->i_sb)) +
++              le32_to_cpu(EXT3_SB(inode->i_sb)->s_es->s_first_data_block);
++      colour = (current->pid % 16) *
++                      (EXT3_BLOCKS_PER_GROUP(inode->i_sb) / 16);
++      return bg_start + colour + block;
++}
++
++static int ext3_new_block_cb(handle_t *handle, struct ext3_extents_tree *tree,
++                              struct ext3_ext_path *path,
++                              struct ext3_extent *ex, int *err)
++{
++      struct inode *inode = tree->inode;
++      int newblock, goal;
++      
++      EXT_ASSERT(path);
++      EXT_ASSERT(ex);
++      EXT_ASSERT(ex->ee_start);
++      EXT_ASSERT(ex->ee_len);
++      
++      /* reuse block from the extent to order data/metadata */
++      newblock = ex->ee_start++;
++      ex->ee_len--;
++      if (ex->ee_len == 0) {
++              ex->ee_len = 1;
++              /* allocate new block for the extent */
++              goal = ext3_ext_find_goal(inode, path, ex->ee_block);
++              ex->ee_start = ext3_new_block(handle, inode, goal, 0, 0, err);
++              if (ex->ee_start == 0) {
++                      /* error occured: restore old extent */
++                      ex->ee_start = newblock;
++                      return 0;
++              }
++      }
++      return newblock;
++}
++
++static struct ext3_extents_helpers ext3_blockmap_helpers = {
++      .get_write_access       = ext3_get_inode_write_access,
++      .mark_buffer_dirty      = ext3_mark_buffer_dirty,
++      .mergable               = ext3_ext_mergable,
++      .new_block              = ext3_new_block_cb,
++      .remove_extent          = ext3_remove_blocks,
++      .remove_extent_credits  = ext3_remove_blocks_credits,
++};
++
++void ext3_init_tree_desc(struct ext3_extents_tree *tree,
++                              struct inode *inode)
++{
++      tree->inode = inode;
++      tree->root = (void *) EXT3_I(inode)->i_data;
++      tree->buffer = (void *) inode;
++      tree->buffer_len = sizeof(EXT3_I(inode)->i_data);
++      tree->cex = (struct ext3_extent *) &EXT3_I(inode)->i_cached_extent;
++      tree->ops = &ext3_blockmap_helpers;
++}
++
++int ext3_ext_get_block(handle_t *handle, struct inode *inode,
++                      long iblock, struct buffer_head *bh_result,
++                      int create, int extend_disksize)
++{
++      struct ext3_ext_path *path = NULL;
++      struct ext3_extent newex;
++      struct ext3_extent *ex;
++      int goal, newblock, err = 0, depth;
++      struct ext3_extents_tree tree;
++
++      clear_buffer_new(bh_result);
++      ext3_init_tree_desc(&tree, inode);
++      ext_debug(&tree, "block %d requested for inode %u\n",
++                      (int) iblock, (unsigned) inode->i_ino);
++      down(&EXT3_I(inode)->truncate_sem);
++
++      /* check in cache */
++      if (ext3_ext_in_cache(&tree, iblock, &newex)) {
++              if (newex.ee_start == EXT_CACHE_MARK) {
++                      /* this is cached gap */
++                      if (!create) {
++                              /* block isn't allocated yet and
++                               * user don't want to allocate it */
++                              goto out2;
++                      }
++                      /* we should allocate requested block */
++              } else if (newex.ee_start) {
++                      /* block is already allocated */
++                      newblock = iblock - newex.ee_block + newex.ee_start;
++                      goto out;
++              }
++      }
++
++      /* find extent for this block */
++      path = ext3_ext_find_extent(&tree, iblock, NULL);
++      if (IS_ERR(path)) {
++              err = PTR_ERR(path);
++              path = NULL;
++              goto out2;
++      }
++
++      depth = EXT_DEPTH(&tree);
++
++      /*
++       * consistent leaf must not be empty
++       * this situations is possible, though, _during_ tree modification
++       * this is why assert can't be put in ext3_ext_find_extent()
++       */
++      EXT_ASSERT(path[depth].p_ext != NULL || depth == 0);
++
++      if ((ex = path[depth].p_ext)) {
++              /* if found exent covers block, simple return it */
++              if (iblock >= ex->ee_block && iblock < ex->ee_block + ex->ee_len) {
++                      newblock = iblock - ex->ee_block + ex->ee_start;
++                      ext_debug(&tree, "%d fit into %d:%d -> %d\n",
++                                      (int) iblock, ex->ee_block, ex->ee_len,
++                                      newblock);
++                      ext3_ext_put_in_cache(&tree, ex);
++                      goto out;
++              }
++      }
++
++      /*
++       * requested block isn't allocated yet
++       * we couldn't try to create block if create flag is zero 
++       */
++      if (!create) {
++              /* put just found gap into cache to speedup subsequest reqs */
++              ext3_ext_put_gap_in_cache(&tree, path, iblock);
++              goto out2;
++      }
++
++      /* allocate new block */
++      goal = ext3_ext_find_goal(inode, path, iblock);
++      newblock = ext3_new_block(handle, inode, goal, 0, 0, &err);
++      if (!newblock)
++              goto out2;
++      ext_debug(&tree, "allocate new block: goal %d, found %d\n",
++                      goal, newblock);
++
++      /* try to insert new extent into found leaf and return */
++      newex.ee_block = iblock;
++      newex.ee_start = newblock;
++      newex.ee_len = 1;
++      err = ext3_ext_insert_extent(handle, &tree, path, &newex);
++      if (err)
++              goto out2;
++      
++      if (extend_disksize && inode->i_size > EXT3_I(inode)->i_disksize)
++              EXT3_I(inode)->i_disksize = inode->i_size;
++
++      /* previous routine could use block we allocated */
++      newblock = newex.ee_start;
++      set_buffer_new(bh_result);
++
++      ext3_ext_put_in_cache(&tree, &newex);
++out:
++      ext3_ext_show_leaf(&tree, path);
++      map_bh(bh_result, inode->i_sb, newblock);
++out2:
++      if (path) {
++              ext3_ext_drop_refs(path);
++              kfree(path);
++      }
++      up(&EXT3_I(inode)->truncate_sem);
++
++      return err;     
++}
++
++void ext3_ext_truncate(struct inode * inode, struct page *page)
++{
++      struct address_space *mapping = inode->i_mapping;
++      struct super_block *sb = inode->i_sb;
++      struct ext3_extents_tree tree;
++      unsigned long last_block;
++      handle_t *handle;
++      int err = 0;
++
++      ext3_init_tree_desc(&tree, inode);
++
++      /*
++       * probably first extent we're gonna free will be last in block
++       */
++      err = ext3_writepage_trans_blocks(inode) + 3;
++      handle = ext3_journal_start(inode, err);
++      if (IS_ERR(handle)) {
++              if (page) {
++                      clear_highpage(page);
++                      flush_dcache_page(page);
++                      unlock_page(page);
++                      page_cache_release(page);
++              }
++              return;
++      }
++
++      if (page)
++              ext3_block_truncate_page(handle, page, mapping, inode->i_size);
++
++      down(&EXT3_I(inode)->truncate_sem);
++      ext3_ext_invalidate_cache(&tree);
++
++      /* 
++       * TODO: optimization is possible here
++       * probably we need not scaning at all,
++       * because page truncation is enough
++       */
++      if (ext3_orphan_add(handle, inode))
++              goto out_stop;
++
++      /* we have to know where to truncate from in crash case */
++      EXT3_I(inode)->i_disksize = inode->i_size;
++      ext3_mark_inode_dirty(handle, inode);
++
++      last_block = (inode->i_size + sb->s_blocksize - 1)
++                      >> EXT3_BLOCK_SIZE_BITS(sb);
++      err = ext3_ext_remove_space(&tree, last_block, EXT_MAX_BLOCK);
++      
++      /* In a multi-transaction truncate, we only make the final
++       * transaction synchronous */
++      if (IS_SYNC(inode))
++              handle->h_sync = 1;
++
++out_stop:
++      /*
++       * If this was a simple ftruncate(), and the file will remain alive
++       * then we need to clear up the orphan record which we created above.
++       * However, if this was a real unlink then we were called by
++       * ext3_delete_inode(), and we allow that function to clean up the
++       * orphan info for us.
++       */
++      if (inode->i_nlink)
++              ext3_orphan_del(handle, inode);
++
++      up(&EXT3_I(inode)->truncate_sem);
++      ext3_journal_stop(handle);
++}
++
++/*
++ * this routine calculate max number of blocks we could modify
++ * in order to allocate new block for an inode
++ */
++int ext3_ext_writepage_trans_blocks(struct inode *inode, int num)
++{
++      struct ext3_extents_tree tree;
++      int needed;
++      
++      ext3_init_tree_desc(&tree, inode);
++      
++      needed = ext3_ext_calc_credits_for_insert(&tree, NULL);
++
++      /* caller want to allocate num blocks */
++      needed *= num;
++      
++#ifdef CONFIG_QUOTA
++      /* 
++       * FIXME: real calculation should be here
++       * it depends on blockmap format of qouta file
++       */
++      needed += 2 * EXT3_SINGLEDATA_TRANS_BLOCKS;
++#endif
++
++      return needed;
++}
++
++void ext3_extents_initialize_blockmap(handle_t *handle, struct inode *inode)
++{
++      struct ext3_extents_tree tree;
++
++      ext3_init_tree_desc(&tree, inode);
++      ext3_extent_tree_init(handle, &tree);
++}
++
++int ext3_ext_calc_blockmap_metadata(struct inode *inode, int blocks)
++{
++      struct ext3_extents_tree tree;
++
++      ext3_init_tree_desc(&tree, inode);
++      return ext3_ext_calc_metadata_amount(&tree, blocks);
++}
++      
++static int
++ext3_ext_store_extent_cb(struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path,
++                      struct ext3_extent *newex, int exist)
++{
++      struct ext3_extent_buf *buf = (struct ext3_extent_buf *) tree->private;
++
++      if (!exist)
++              return EXT_CONTINUE;
++      if (buf->err < 0)
++              return EXT_BREAK;
++      if (buf->cur - buf->buffer + sizeof(*newex) > buf->buflen)
++              return EXT_BREAK;
++
++      if (!copy_to_user(buf->cur, newex, sizeof(*newex))) {
++              buf->err++;
++              buf->cur += sizeof(*newex);
++      } else {
++              buf->err = -EFAULT;
++              return EXT_BREAK;
++      }
++      return EXT_CONTINUE;
++}
++
++static int
++ext3_ext_collect_stats_cb(struct ext3_extents_tree *tree,
++                      struct ext3_ext_path *path,
++                      struct ext3_extent *ex, int exist)
++{
++      struct ext3_extent_tree_stats *buf =
++              (struct ext3_extent_tree_stats *) tree->private;
++      int depth;
++
++      if (!exist)
++              return EXT_CONTINUE;
++
++      depth = EXT_DEPTH(tree);
++      buf->extents_num++;
++      if (path[depth].p_ext == EXT_FIRST_EXTENT(path[depth].p_hdr))
++              buf->leaf_num++;
++      return EXT_CONTINUE;
++}
++
++int ext3_ext_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
++              unsigned long arg)
++{
++      int err = 0;
++
++      if (!(EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL))
++              return -EINVAL;
++
++      if (cmd == EXT3_IOC_GET_EXTENTS) {
++              struct ext3_extent_buf buf;
++              struct ext3_extents_tree tree;
++
++              if (copy_from_user(&buf, (void *) arg, sizeof(buf)))
++                      return -EFAULT;
++
++              ext3_init_tree_desc(&tree, inode);
++              buf.cur = buf.buffer;
++              buf.err = 0;
++              tree.private = &buf;
++              down(&EXT3_I(inode)->truncate_sem);
++              err = ext3_ext_walk_space(&tree, buf.start, EXT_MAX_BLOCK,
++                                              ext3_ext_store_extent_cb);
++              up(&EXT3_I(inode)->truncate_sem);
++              if (err == 0)
++                      err = buf.err;
++      } else if (cmd == EXT3_IOC_GET_TREE_STATS) {
++              struct ext3_extent_tree_stats buf;
++              struct ext3_extents_tree tree;
++
++              ext3_init_tree_desc(&tree, inode);
++              down(&EXT3_I(inode)->truncate_sem);
++              buf.depth = EXT_DEPTH(&tree);
++              buf.extents_num = 0;
++              buf.leaf_num = 0;
++              tree.private = &buf;
++              err = ext3_ext_walk_space(&tree, 0, EXT_MAX_BLOCK,
++                                              ext3_ext_collect_stats_cb);
++              up(&EXT3_I(inode)->truncate_sem);
++              if (!err)
++                      err = copy_to_user((void *) arg, &buf, sizeof(buf));
++      } else if (cmd == EXT3_IOC_GET_TREE_DEPTH) {
++              struct ext3_extents_tree tree;
++              ext3_init_tree_desc(&tree, inode);
++              down(&EXT3_I(inode)->truncate_sem);
++              err = EXT_DEPTH(&tree);
++              up(&EXT3_I(inode)->truncate_sem);
++      }
++
++      return err;
++}
++
++EXPORT_SYMBOL(ext3_init_tree_desc);
++EXPORT_SYMBOL(ext3_mark_inode_dirty);
++EXPORT_SYMBOL(ext3_ext_invalidate_cache);
++EXPORT_SYMBOL(ext3_ext_insert_extent);
++EXPORT_SYMBOL(ext3_ext_walk_space);
++EXPORT_SYMBOL(ext3_ext_find_goal);
++EXPORT_SYMBOL(ext3_ext_calc_credits_for_insert);
++
+Index: linux-2.6.7/fs/ext3/ialloc.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/ialloc.c  2004-09-12 20:07:29.000000000 +0400
++++ linux-2.6.7/fs/ext3/ialloc.c       2004-09-12 20:09:25.000000000 +0400
+@@ -646,6 +646,17 @@
+               DQUOT_FREE_INODE(inode);
+               goto fail2;
+       }
++      if (test_opt(sb, EXTENTS)) {
++              EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
++              ext3_extents_initialize_blockmap(handle, inode);
++              if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_EXTENTS)) {
++                      err = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
++                      if (err) goto fail;
++                      EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_EXTENTS);
++                      BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "call ext3_journal_dirty_metadata");
++                      err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
++              }
++      }
+       err = ext3_mark_inode_dirty(handle, inode);
+       if (err) {
+               ext3_std_error(sb, err);
+Index: linux-2.6.7/fs/ext3/inode.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/inode.c   2004-09-12 20:07:29.000000000 +0400
++++ linux-2.6.7/fs/ext3/inode.c        2004-09-12 20:07:35.000000000 +0400
+@@ -857,6 +857,17 @@
+       goto reread;
+ }
++static inline int
++ext3_get_block_wrap(handle_t *handle, struct inode *inode, long block,
++              struct buffer_head *bh, int create, int extend_disksize)
++{
++      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
++              return ext3_ext_get_block(handle, inode, block, bh, create,
++                                              extend_disksize);
++      return ext3_get_block_handle(handle, inode, block, bh, create,
++                                      extend_disksize);
++}
++
+ static int ext3_get_block(struct inode *inode, sector_t iblock,
+                       struct buffer_head *bh_result, int create)
+ {
+@@ -867,8 +878,8 @@
+               handle = ext3_journal_current_handle();
+               J_ASSERT(handle != 0);
+       }
+-      ret = ext3_get_block_handle(handle, inode, iblock,
+-                              bh_result, create, 1);
++      ret = ext3_get_block_wrap(handle, inode, iblock,
++                                      bh_result, create, 1);
+       return ret;
+ }
+@@ -894,8 +905,8 @@
+               }
+       }
+       if (ret == 0)
+-              ret = ext3_get_block_handle(handle, inode, iblock,
+-                                      bh_result, create, 0);
++              ret = ext3_get_block_wrap(handle, inode, iblock,
++                                              bh_result, create, 0);
+       if (ret == 0)
+               bh_result->b_size = (1 << inode->i_blkbits);
+       return ret;
+@@ -916,7 +927,7 @@
+       dummy.b_state = 0;
+       dummy.b_blocknr = -1000;
+       buffer_trace_init(&dummy.b_history);
+-      *errp = ext3_get_block_handle(handle, inode, block, &dummy, create, 1);
++      *errp = ext3_get_block_wrap(handle, inode, block, &dummy, create, 1);
+       if (!*errp && buffer_mapped(&dummy)) {
+               struct buffer_head *bh;
+               bh = sb_getblk(inode->i_sb, dummy.b_blocknr);
+@@ -1669,7 +1680,7 @@
+  * This required during truncate. We need to physically zero the tail end
+  * of that block so it doesn't yield old data if the file is later grown.
+  */
+-static int ext3_block_truncate_page(handle_t *handle, struct page *page,
++int ext3_block_truncate_page(handle_t *handle, struct page *page,
+               struct address_space *mapping, loff_t from)
+ {
+       unsigned long index = from >> PAGE_CACHE_SHIFT;
+@@ -2165,6 +2176,9 @@
+                       return;
+       }
++      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
++              return ext3_ext_truncate(inode, page);
++
+       handle = start_transaction(inode);
+       if (IS_ERR(handle)) {
+               if (page) {
+@@ -2888,6 +2902,9 @@
+       int indirects = (EXT3_NDIR_BLOCKS % bpp) ? 5 : 3;
+       int ret;
++      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
++              return ext3_ext_writepage_trans_blocks(inode, bpp);
++ 
+       if (ext3_should_journal_data(inode))
+               ret = 3 * (bpp + indirects) + 2;
+       else
+Index: linux-2.6.7/fs/ext3/Makefile
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/Makefile  2004-09-12 20:07:20.000000000 +0400
++++ linux-2.6.7/fs/ext3/Makefile       2004-09-12 20:07:35.000000000 +0400
+@@ -5,7 +5,7 @@
+ obj-$(CONFIG_EXT3_FS) += ext3.o
+ ext3-y        := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
+-         ioctl.o namei.o super.o symlink.o hash.o
++         ioctl.o namei.o super.o symlink.o hash.o extents.o
+ ext3-$(CONFIG_EXT3_FS_XATTR)   += xattr.o xattr_user.o xattr_trusted.o
+ ext3-$(CONFIG_EXT3_FS_POSIX_ACL) += acl.o
+Index: linux-2.6.7/fs/ext3/super.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/super.c   2004-09-12 20:07:31.000000000 +0400
++++ linux-2.6.7/fs/ext3/super.c        2004-09-12 20:07:35.000000000 +0400
+@@ -392,6 +392,7 @@
+       struct ext3_super_block *es = sbi->s_es;
+       int i;
++      ext3_ext_release(sb);
+       ext3_xattr_put_super(sb);
+       journal_destroy(sbi->s_journal);
+       if (!(sb->s_flags & MS_RDONLY)) {
+@@ -455,6 +456,9 @@
+       ei->i_default_acl = EXT3_ACL_NOT_CACHED;
+ #endif
+       ei->vfs_inode.i_version = 1;
++      ei->i_cached_extent[0] = 0;
++      ei->i_cached_extent[1] = 0;
++      ei->i_cached_extent[2] = 0;
+       return &ei->vfs_inode;
+ }
+@@ -590,7 +594,7 @@
+       Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
+       Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0,
+       Opt_iopen, Opt_noiopen, Opt_iopen_nopriv,
+-      Opt_ignore, Opt_err,
++      Opt_ignore, Opt_err, Opt_extents, Opt_extdebug
+ };
+ static match_table_t tokens = {
+@@ -638,6 +642,8 @@
+       {Opt_iopen,  "iopen"},
+       {Opt_noiopen,  "noiopen"},
+       {Opt_iopen_nopriv,  "iopen_nopriv"},
++      {Opt_extents, "extents"},
++      {Opt_extdebug, "extdebug"},
+       {Opt_err, NULL}
+ };
+@@ -917,6 +923,12 @@
+                       break;
+               case Opt_ignore:
+                       break;
++              case Opt_extents:
++                      set_opt (sbi->s_mount_opt, EXTENTS);
++                      break;
++              case Opt_extdebug:
++                      set_opt (sbi->s_mount_opt, EXTDEBUG);
++                      break;
+               default:
+                       printk (KERN_ERR
+                               "EXT3-fs: Unrecognized mount option \"%s\" "
+@@ -1589,6 +1601,8 @@
+       percpu_counter_mod(&sbi->s_dirs_counter,
+               ext3_count_dirs(sb));
++      ext3_ext_init(sb);
++ 
+       return 0;
+ failed_mount3:
+Index: linux-2.6.7/fs/ext3/ioctl.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/ioctl.c   2004-09-12 20:07:16.000000000 +0400
++++ linux-2.6.7/fs/ext3/ioctl.c        2004-09-12 20:07:35.000000000 +0400
+@@ -176,6 +176,10 @@
+                       return ret;
+               }
+ #endif
++      case EXT3_IOC_GET_EXTENTS:
++      case EXT3_IOC_GET_TREE_STATS:
++      case EXT3_IOC_GET_TREE_DEPTH:
++              return ext3_ext_ioctl(inode, filp, cmd, arg);
+       default:
+               return -ENOTTY;
+       }
+Index: linux-2.6.7/include/linux/ext3_fs.h
+===================================================================
+--- linux-2.6.7.orig/include/linux/ext3_fs.h   2004-09-12 20:07:33.000000000 +0400
++++ linux-2.6.7/include/linux/ext3_fs.h        2004-09-12 20:10:02.000000000 +0400
+@@ -186,6 +186,7 @@
+ #define EXT3_DIRSYNC_FL                       0x00010000 /* dirsync behaviour (directories only) */
+ #define EXT3_TOPDIR_FL                        0x00020000 /* Top of directory hierarchies*/
+ #define EXT3_RESERVED_FL              0x80000000 /* reserved for ext3 lib */
++#define EXT3_EXTENTS_FL                       0x00080000 /* Inode uses extents */
+ #define EXT3_FL_USER_VISIBLE          0x0003DFFF /* User visible flags */
+ #define EXT3_FL_USER_MODIFIABLE               0x000380FF /* User modifiable flags */
+@@ -209,6 +210,9 @@
+ #ifdef CONFIG_JBD_DEBUG
+ #define EXT3_IOC_WAIT_FOR_READONLY    _IOR('f', 99, long)
+ #endif
++#define       EXT3_IOC_GET_EXTENTS            _IOR('f', 5, long)
++#define       EXT3_IOC_GET_TREE_DEPTH         _IOR('f', 6, long)
++#define       EXT3_IOC_GET_TREE_STATS         _IOR('f', 7, long)
+ /*
+  * Structure of an inode on the disk
+@@ -329,6 +333,8 @@
+ #define EXT3_MOUNT_POSIX_ACL          0x8000  /* POSIX Access Control Lists */
+ #define EXT3_MOUNT_IOPEN              0x40000 /* Allow access via iopen */
+ #define EXT3_MOUNT_IOPEN_NOPRIV               0x80000 /* Make iopen world-readable */
++#define EXT3_MOUNT_EXTENTS            0x10000 /* Extents support */
++#define EXT3_MOUNT_EXTDEBUG           0x20000 /* Extents debug */
+ /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
+ #ifndef clear_opt
+@@ -517,11 +523,13 @@
+ #define EXT3_FEATURE_INCOMPAT_RECOVER         0x0004 /* Needs recovery */
+ #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008 /* Journal device */
+ #define EXT3_FEATURE_INCOMPAT_META_BG         0x0010
++#define EXT3_FEATURE_INCOMPAT_EXTENTS         0x0040 /* extents support */
+ #define EXT3_FEATURE_COMPAT_SUPP      EXT2_FEATURE_COMPAT_EXT_ATTR
+ #define EXT3_FEATURE_INCOMPAT_SUPP    (EXT3_FEATURE_INCOMPAT_FILETYPE| \
+                                        EXT3_FEATURE_INCOMPAT_RECOVER| \
+-                                       EXT3_FEATURE_INCOMPAT_META_BG)
++                                       EXT3_FEATURE_INCOMPAT_META_BG| \
++                                       EXT3_FEATURE_INCOMPAT_EXTENTS)
+ #define EXT3_FEATURE_RO_COMPAT_SUPP   (EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+                                        EXT3_FEATURE_RO_COMPAT_LARGE_FILE| \
+                                        EXT3_FEATURE_RO_COMPAT_BTREE_DIR)
+@@ -725,6 +733,7 @@
+ /* inode.c */
++extern int ext3_block_truncate_page(handle_t *, struct page *, struct address_space *, loff_t);
+ extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
+ extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
+ extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
+@@ -798,6 +807,14 @@
+ extern struct inode_operations ext3_symlink_inode_operations;
+ extern struct inode_operations ext3_fast_symlink_inode_operations;
++/* extents.c */
++extern int ext3_ext_writepage_trans_blocks(struct inode *, int);
++extern int ext3_ext_get_block(handle_t *, struct inode *, long,
++                              struct buffer_head *, int, int);
++extern void ext3_ext_truncate(struct inode *, struct page *);
++extern void ext3_ext_init(struct super_block *);
++extern void ext3_ext_release(struct super_block *);
++extern void ext3_extents_initialize_blockmap(handle_t *, struct inode *);
+ #endif        /* __KERNEL__ */
+Index: linux-2.6.7/include/linux/ext3_extents.h
+===================================================================
+--- linux-2.6.7.orig/include/linux/ext3_extents.h      2003-01-30 13:24:37.000000000 +0300
++++ linux-2.6.7/include/linux/ext3_extents.h   2004-09-12 20:07:35.000000000 +0400
+@@ -0,0 +1,238 @@
++/*
++ * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public Licens
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-
++ */
++
++#ifndef _LINUX_EXT3_EXTENTS
++#define _LINUX_EXT3_EXTENTS
++
++/*
++ * with AGRESSIVE_TEST defined capacity of index/leaf blocks
++ * become very little, so index split, in-depth growing and
++ * other hard changes happens much more often
++ * this is for debug purposes only
++ */
++#define AGRESSIVE_TEST_
++
++/*
++ * if CHECK_BINSEARCH defined, then results of binary search
++ * will be checked by linear search
++ */
++#define CHECK_BINSEARCH_
++
++/*
++ * if EXT_DEBUG is defined you can use 'extdebug' mount option
++ * to get lots of info what's going on
++ */
++#define EXT_DEBUG
++#ifdef EXT_DEBUG
++#define ext_debug(tree,fmt,a...)                      \
++do {                                                  \
++      if (test_opt((tree)->inode->i_sb, EXTDEBUG))    \
++              printk(fmt, ##a);                       \
++} while (0);
++#else
++#define ext_debug(tree,fmt,a...)
++#endif
++
++/*
++ * if EXT_STATS is defined then stats numbers are collected
++ * these number will be displayed at umount time
++ */
++#define EXT_STATS_
++
++
++#define EXT3_ALLOC_NEEDED     3       /* block bitmap + group desc. + sb */
++
++/*
++ * ext3_inode has i_block array (total 60 bytes)
++ * first 4 bytes are used to store:
++ *  - tree depth (0 mean there is no tree yet. all extents in the inode)
++ *  - number of alive extents in the inode
++ */
++
++/*
++ * this is extent on-disk structure
++ * it's used at the bottom of the tree
++ */
++struct ext3_extent {
++      __u32   ee_block;       /* first logical block extent covers */
++      __u16   ee_len;         /* number of blocks covered by extent */
++      __u16   ee_start_hi;    /* high 16 bits of physical block */
++      __u32   ee_start;       /* low 32 bigs of physical block */
++};
++
++/*
++ * this is index on-disk structure
++ * it's used at all the levels, but the bottom
++ */
++struct ext3_extent_idx {
++      __u32   ei_block;       /* index covers logical blocks from 'block' */
++      __u32   ei_leaf;        /* pointer to the physical block of the next *
++                               * level. leaf or next index could bet here */
++      __u16   ei_leaf_hi;     /* high 16 bits of physical block */
++      __u16   ei_unused;
++};
++
++/*
++ * each block (leaves and indexes), even inode-stored has header
++ */
++struct ext3_extent_header {   
++      __u16   eh_magic;       /* probably will support different formats */   
++      __u16   eh_entries;     /* number of valid entries */
++      __u16   eh_max;         /* capacity of store in entries */
++      __u16   eh_depth;       /* has tree real underlaying blocks? */
++      __u32   eh_generation;  /* generation of the tree */
++};
++
++#define EXT3_EXT_MAGIC                0xf30a
++
++/*
++ * array of ext3_ext_path contains path to some extent
++ * creation/lookup routines use it for traversal/splitting/etc
++ * truncate uses it to simulate recursive walking
++ */
++struct ext3_ext_path {
++      __u32                           p_block;
++      __u16                           p_depth;
++      struct ext3_extent              *p_ext;
++      struct ext3_extent_idx          *p_idx;
++      struct ext3_extent_header       *p_hdr;
++      struct buffer_head              *p_bh;
++};
++
++/*
++ * structure for external API
++ */
++
++/*
++ * ext3_extents_tree is used to pass initial information
++ * to top-level extents API
++ */
++struct ext3_extents_helpers;
++struct ext3_extents_tree {
++      struct inode *inode;    /* inode which tree belongs to */
++      void *root;             /* ptr to data top of tree resides at */
++      void *buffer;           /* will be passed as arg to ^^ routines */
++      int buffer_len;
++      void *private;
++      struct ext3_extent *cex;/* last found extent */
++      struct ext3_extents_helpers *ops;
++};
++
++struct ext3_extents_helpers {
++      int (*get_write_access)(handle_t *h, void *buffer);
++      int (*mark_buffer_dirty)(handle_t *h, void *buffer);
++      int (*mergable)(struct ext3_extent *ex1, struct ext3_extent *ex2);
++      int (*remove_extent_credits)(struct ext3_extents_tree *,
++                                      struct ext3_extent *, unsigned long,
++                                      unsigned long);
++      int (*remove_extent)(struct ext3_extents_tree *,
++                              struct ext3_extent *, unsigned long,
++                              unsigned long);
++      int (*new_block)(handle_t *, struct ext3_extents_tree *,
++                              struct ext3_ext_path *, struct ext3_extent *,
++                              int *);
++};
++
++/*
++ * to be called by ext3_ext_walk_space()
++ * negative retcode - error
++ * positive retcode - signal for ext3_ext_walk_space(), see below
++ * callback must return valid extent (passed or newly created)
++ */
++typedef int (*ext_prepare_callback)(struct ext3_extents_tree *,
++                                      struct ext3_ext_path *,
++                                      struct ext3_extent *, int);
++
++#define EXT_CONTINUE  0
++#define EXT_BREAK     1
++#define EXT_REPEAT    2
++
++
++#define EXT_MAX_BLOCK 0xffffffff
++#define EXT_CACHE_MARK        0xffff
++
++
++#define EXT_FIRST_EXTENT(__hdr__) \
++      ((struct ext3_extent *) (((char *) (__hdr__)) +         \
++                               sizeof(struct ext3_extent_header)))
++#define EXT_FIRST_INDEX(__hdr__) \
++      ((struct ext3_extent_idx *) (((char *) (__hdr__)) +     \
++                                   sizeof(struct ext3_extent_header)))
++#define EXT_HAS_FREE_INDEX(__path__) \
++      ((__path__)->p_hdr->eh_entries < (__path__)->p_hdr->eh_max)
++#define EXT_LAST_EXTENT(__hdr__) \
++      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_entries - 1)
++#define EXT_LAST_INDEX(__hdr__) \
++      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_entries - 1)
++#define EXT_MAX_EXTENT(__hdr__) \
++      (EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_max - 1)
++#define EXT_MAX_INDEX(__hdr__) \
++      (EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_max - 1)
++
++#define EXT_ROOT_HDR(tree) \
++      ((struct ext3_extent_header *) (tree)->root)
++#define EXT_BLOCK_HDR(bh) \
++      ((struct ext3_extent_header *) (bh)->b_data)
++#define EXT_DEPTH(_t_)        \
++      (((struct ext3_extent_header *)((_t_)->root))->eh_depth)
++#define EXT_GENERATION(_t_)   \
++      (((struct ext3_extent_header *)((_t_)->root))->eh_generation)
++
++
++#define EXT_ASSERT(__x__) if (!(__x__)) BUG();
++
++
++/*
++ * this structure is used to gather extents from the tree via ioctl
++ */
++struct ext3_extent_buf {
++      unsigned long start;
++      int buflen;
++      void *buffer;
++      void *cur;
++      int err;
++};
++
++/*
++ * this structure is used to collect stats info about the tree
++ */
++struct ext3_extent_tree_stats {
++      int depth;
++      int extents_num;
++      int leaf_num;
++};
++
++extern int ext3_extent_tree_init(handle_t *, struct ext3_extents_tree *);
++extern int ext3_ext_calc_credits_for_insert(struct ext3_extents_tree *, struct ext3_ext_path *);
++extern int ext3_ext_insert_extent(handle_t *, struct ext3_extents_tree *, struct ext3_ext_path *, struct ext3_extent *);
++extern int ext3_ext_walk_space(struct ext3_extents_tree *, unsigned long, unsigned long, ext_prepare_callback);
++extern int ext3_ext_remove_space(struct ext3_extents_tree *, unsigned long, unsigned long);
++extern struct ext3_ext_path * ext3_ext_find_extent(struct ext3_extents_tree *, int, struct ext3_ext_path *);
++extern void ext3_init_tree_desc(struct ext3_extents_tree *, struct inode *);
++extern int ext3_ext_calc_blockmap_metadata(struct inode *, int);
++
++static inline void
++ext3_ext_invalidate_cache(struct ext3_extents_tree *tree)
++{
++      if (tree->cex)
++              tree->cex->ee_len = 0;
++}
++
++
++#endif /* _LINUX_EXT3_EXTENTS */
++
+Index: linux-2.6.7/include/linux/ext3_fs_i.h
+===================================================================
+--- linux-2.6.7.orig/include/linux/ext3_fs_i.h 2004-09-12 20:07:29.000000000 +0400
++++ linux-2.6.7/include/linux/ext3_fs_i.h      2004-09-12 20:07:35.000000000 +0400
+@@ -111,6 +111,8 @@
+        */
+       struct semaphore truncate_sem;
+       struct inode vfs_inode;
++
++      __u32 i_cached_extent[3];
+ };
+ #endif        /* _LINUX_EXT3_FS_I */
+
+%diffstat
+ fs/ext3/Makefile             |    2 
+ fs/ext3/extents.c            | 2306 +++++++++++++++++++++++++++++++++++++++++++
+ fs/ext3/ialloc.c             |   11 
+ fs/ext3/inode.c              |   29 
+ fs/ext3/ioctl.c              |    4 
+ fs/ext3/super.c              |   16 
+ include/linux/ext3_extents.h |  238 ++++
+ include/linux/ext3_fs.h      |   19 
+ include/linux/ext3_fs_i.h    |    2 
+ 9 files changed, 2618 insertions(+), 9 deletions(-)
+
diff --git a/lustre/kernel_patches/patches/ext3-extents-asyncdel-2.4.20-rh.patch b/lustre/kernel_patches/patches/ext3-extents-asyncdel-2.4.20-rh.patch
new file mode 100644 (file)
index 0000000..e37dacd
--- /dev/null
@@ -0,0 +1,28 @@
+Index: linux-2.4.20-30.9/fs/ext3/inode.c
+===================================================================
+--- linux-2.4.20-30.9.orig/fs/ext3/inode.c     2004-05-18 13:55:49.000000000 -0700
++++ linux-2.4.20-30.9/fs/ext3/inode.c  2004-05-18 13:59:46.000000000 -0700
+@@ -2217,6 +2217,10 @@
+       memcpy(nei->i_data, oei->i_data, sizeof(nei->i_data));
+       memset(oei->i_data, 0, sizeof(oei->i_data));
++      if (EXT3_I(old_inode)->i_flags & EXT3_EXTENTS_FL) {
++              EXT3_I(new_inode)->i_flags |= EXT3_EXTENTS_FL;
++              ext3_extents_initialize_blockmap(handle, old_inode);
++      }
+       nei->i_disksize = oei->i_disksize;
+       nei->i_state |= EXT3_STATE_DELETE;
+@@ -2447,6 +2451,12 @@
+       brelse (iloc.bh);
++      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL) {
++              inode->u.ext3_i.i_cached_extent[0] = 0;
++              inode->u.ext3_i.i_cached_extent[1] = 0;
++              inode->u.ext3_i.i_cached_extent[2] = 0;
++      }
++
+       if (S_ISREG(inode->i_mode)) {
+               inode->i_op = &ext3_file_inode_operations;
+               inode->i_fop = &ext3_file_operations;
diff --git a/lustre/kernel_patches/patches/ext3-extents-asyncdel-2.4.21-chaos.patch b/lustre/kernel_patches/patches/ext3-extents-asyncdel-2.4.21-chaos.patch
new file mode 100644 (file)
index 0000000..bf086e1
--- /dev/null
@@ -0,0 +1,28 @@
+Index: 57chaos/fs/ext3/inode.c
+===================================================================
+--- 57chaos.orig/fs/ext3/inode.c       2004-06-21 14:15:31.000000000 -0700
++++ 57chaos/fs/ext3/inode.c    2004-06-21 14:19:27.000000000 -0700
+@@ -2270,6 +2270,10 @@ void ext3_truncate_thread(struct inode *
+       memcpy(nei->i_data, oei->i_data, sizeof(nei->i_data));
+       memset(oei->i_data, 0, sizeof(oei->i_data));
++      if (EXT3_I(old_inode)->i_flags & EXT3_EXTENTS_FL) {
++              EXT3_I(new_inode)->i_flags |= EXT3_EXTENTS_FL;
++              ext3_extents_initialize_blockmap(handle, old_inode);
++      }
+       nei->i_disksize = oei->i_disksize;
+       nei->i_state |= EXT3_STATE_DELETE;
+@@ -2522,6 +2526,12 @@ void ext3_read_inode(struct inode * inod
+       else
+               EXT3_I(inode)->i_extra_isize = 0;
++      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL) {
++              inode->u.ext3_i.i_cached_extent[0] = 0;
++              inode->u.ext3_i.i_cached_extent[1] = 0;
++              inode->u.ext3_i.i_cached_extent[2] = 0;
++      }
++
+       if (S_ISREG(inode->i_mode)) {
+               inode->i_op = &ext3_file_inode_operations;
+               inode->i_fop = &ext3_file_operations;
diff --git a/lustre/kernel_patches/patches/ext3-extents-in-ea-2.4.20.patch b/lustre/kernel_patches/patches/ext3-extents-in-ea-2.4.20.patch
deleted file mode 100644 (file)
index bff003b..0000000
+++ /dev/null
@@ -1,343 +0,0 @@
-Index: linux-2.4.20/fs/ext3/extents-in-ea.c
-===================================================================
---- linux-2.4.20.orig/fs/ext3/extents-in-ea.c  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.20/fs/ext3/extents-in-ea.c       2004-01-24 14:54:04.000000000 +0300
-@@ -0,0 +1,202 @@
-+/*
-+ * Copyright (C) 2003 Alex Tomas <alex@clusterfs.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public Licens
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/fs.h>
-+#include <linux/time.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/jbd.h>
-+#include <linux/smp_lock.h>
-+#include <linux/highuid.h>
-+#include <linux/pagemap.h>
-+#include <linux/quotaops.h>
-+#include <linux/string.h>
-+#include <linux/ext3_extents.h>
-+#include <linux/ext3_xattr.h>
-+#include <linux/slab.h>
-+#include <asm/uaccess.h>
-+
-+static int ext3_get_ea_write_access(handle_t *handle, void *buffer)
-+{
-+      struct buffer_head *bh = (struct buffer_head *) buffer;
-+      return ext3_journal_get_write_access(handle, bh);
-+}
-+
-+static int ext3_mark_ea_buffer_dirty(handle_t *handle, void *buffer)
-+{
-+      struct buffer_head *bh = (struct buffer_head *) buffer;
-+      ext3_journal_dirty_metadata(handle, bh);
-+      return 0;
-+}
-+
-+int ext3_init_tree_in_ea_desc(struct ext3_extents_tree *tree,
-+                              struct inode *inode, int name_index,
-+                              const char *eaname)
-+{
-+      struct buffer_head *bh;
-+      int offset, err, size;
-+
-+      err = ext3_xattr_get_ea_loc(inode, name_index, eaname,
-+                                      &bh, &offset, &size);
-+      if (err)
-+              return err;
-+
-+      EXT_ASSERT(bh);
-+      EXT_ASSERT(size >= sizeof(struct ext3_extent_header)
-+                              + sizeof(struct ext3_extent));
-+      tree->inode = inode;
-+      tree->root = (void *) bh->b_data + offset;
-+      tree->buffer_len = size;
-+      tree->buffer = (void *) bh;
-+      tree->get_write_access = ext3_get_ea_write_access;
-+      tree->mark_buffer_dirty = ext3_mark_ea_buffer_dirty;
-+      tree->mergable = NULL;
-+      tree->remove_extent = NULL;
-+      tree->remove_extent_credits = NULL;
-+      tree->new_block = NULL;
-+      tree->cex = NULL;       /* FIXME: add cache store later */
-+      return 0;
-+}
-+
-+void ext3_release_tree_in_ea_desc(struct ext3_extents_tree *tree)
-+{
-+      struct buffer_head *bh;
-+
-+      bh = (struct buffer_head *) tree->buffer;
-+      EXT_ASSERT(bh);
-+      brelse(bh);
-+}
-+
-+int ext3_init_tree_in_ea(struct inode *inode, int name_index,
-+                              const char *eaname, int size)
-+{
-+      struct ext3_extents_tree tree;
-+      handle_t *handle;
-+      char *root;
-+      int err;
-+
-+      root = kmalloc(size, GFP_USER);
-+      if (!root)
-+              return -ENOMEM;
-+      memset(root, 0, size);
-+
-+      /* first, create ea to store root of the tree */
-+      handle = ext3_journal_start(inode, EXT3_ALLOC_NEEDED + 1);
-+      if (IS_ERR(handle))
-+              return PTR_ERR(handle);
-+      if ((err = ext3_xattr_set(handle, inode, name_index,
-+                                      eaname, root, size, 0)))
-+              goto out;
-+      if ((err = ext3_init_tree_in_ea_desc(&tree, inode, name_index, eaname)))
-+              goto out;
-+      err = ext3_extent_tree_init(handle, &tree);
-+      ext3_release_tree_in_ea_desc(&tree);
-+out:
-+      ext3_journal_stop(handle, inode);
-+      kfree(root);
-+      return err;
-+}
-+
-+static int
-+ext3_ext_in_ea_new_extent(struct ext3_extents_tree *tree,
-+                      struct ext3_ext_path *path,
-+                      struct ext3_extent *newex, int exist)
-+{
-+      handle_t *handle;
-+      int needed, err;
-+
-+      if (exist)
-+              return EXT_CONTINUE;
-+
-+      needed = ext3_ext_calc_credits_for_insert(tree, path);
-+      handle = ext3_journal_start(tree->inode, needed);
-+      if (IS_ERR(handle))
-+              return PTR_ERR(handle);
-+
-+      /* insert new extent */
-+      newex->e_start = 0;
-+      err = ext3_ext_insert_extent(handle, tree, path, newex);
-+      if (!err)
-+              ext3_journal_stop(handle, tree->inode);
-+
-+      return err;
-+}
-+
-+int ext3_ext_in_ea_alloc_space(struct inode *inode, int name_index,
-+                              const char *eaname, unsigned long from,
-+                              unsigned long num)
-+{
-+      struct ext3_extents_tree tree;
-+      int err;
-+
-+      err = ext3_init_tree_in_ea_desc(&tree, inode, name_index, eaname);
-+      if (err == 0) {
-+              err = ext3_ext_walk_space(&tree, from, num,
-+                                              ext3_ext_in_ea_new_extent);
-+              ext3_release_tree_in_ea_desc(&tree);
-+      }
-+      return err;
-+}
-+
-+int ext3_ext_in_ea_remove_space(struct inode *inode, int name_index,
-+                              const char *eaname, unsigned long from,
-+                              unsigned long num)
-+{
-+      struct ext3_extents_tree tree;
-+      int err;
-+
-+      err = ext3_init_tree_in_ea_desc(&tree, inode, name_index, eaname);
-+      if (err == 0) {
-+              err = ext3_ext_remove_space(&tree, from, num);
-+              ext3_release_tree_in_ea_desc(&tree);
-+      }
-+      return err;
-+}
-+
-+int ext3_ext_in_ea_presence(struct inode *inode, int name_index,
-+                              const char *eaname, unsigned long block)
-+{
-+      struct ext3_extents_tree tree;
-+      struct ext3_ext_path *path;
-+      struct ext3_extent *ex;
-+      int err, depth;
-+
-+      err = ext3_init_tree_in_ea_desc(&tree, inode, name_index, eaname);
-+      if (err)
-+              return err;
-+
-+      /* find extent for this block */
-+      path = ext3_ext_find_extent(&tree, block, NULL);
-+      if (IS_ERR(path)) {
-+              err = PTR_ERR(path);
-+              goto out;
-+      }
-+
-+      depth = EXT_DEPTH(&tree);
-+      ex = path[depth].p_ext;
-+      if (!ex) {
-+              /* there is no extent yet */
-+              goto out;
-+      }
-+
-+      if (block >= ex->e_block && block < ex->e_block + ex->e_num)
-+              err = 1;
-+out:
-+      ext3_release_tree_in_ea_desc(&tree);
-+      return err;
-+}
-+
-Index: linux-2.4.20/fs/ext3/Makefile
-===================================================================
---- linux-2.4.20.orig/fs/ext3/Makefile 2004-01-24 00:45:20.000000000 +0300
-+++ linux-2.4.20/fs/ext3/Makefile      2004-01-24 14:34:27.000000000 +0300
-@@ -17,7 +17,7 @@
- obj-m    := $(O_TARGET)
- export-objs += xattr.o
--obj-$(CONFIG_EXT3_FS_XATTR) += xattr.o
-+obj-$(CONFIG_EXT3_FS_XATTR) += xattr.o extents-in-ea.o
- obj-$(CONFIG_EXT3_FS_XATTR_USER) += xattr_user.o
- include $(TOPDIR)/Rules.make
-Index: linux-2.4.20/fs/ext3/xattr.c
-===================================================================
---- linux-2.4.20.orig/fs/ext3/xattr.c  2004-01-23 19:00:43.000000000 +0300
-+++ linux-2.4.20/fs/ext3/xattr.c       2004-01-24 14:34:27.000000000 +0300
-@@ -771,7 +771,8 @@
-  */
- int
- ext3_xattr_ibody_find(struct inode *inode, int name_index, 
--              const char *name, struct ext3_xattr_entry *rentry, int *free)
-+              const char *name, struct ext3_xattr_entry *rentry, int *free,
-+              struct buffer_head **bh, int *offset)
- {
-       struct ext3_xattr_entry *last;
-       struct ext3_inode *raw_inode;
-@@ -818,6 +819,15 @@
-                   name_len == last->e_name_len &&
-                   !memcmp(name, last->e_name, name_len)) {
-                       memcpy(rentry, last, sizeof(struct ext3_xattr_entry));
-+                      if (offset) {
-+                              void *voff;
-+                              voff = start + le16_to_cpu(last->e_value_offs);
-+                              *offset = voff - (void *) iloc.bh->b_data;
-+                      }
-+                      if (bh) {
-+                              get_bh(iloc.bh);        
-+                              *bh = iloc.bh;
-+                      }
-                       ret = 0;
-               } else {
-                       *free -= EXT3_XATTR_LEN(last->e_name_len);
-@@ -838,7 +848,8 @@
-  */
- int
- ext3_xattr_block_find(struct inode *inode, int name_index, const char *name,
--             struct ext3_xattr_entry *rentry, int *free)
-+             struct ext3_xattr_entry *rentry, int *free,
-+             struct buffer_head **tbh, int *offset)
- {
-       struct buffer_head *bh = NULL;
-       struct ext3_xattr_entry *entry;
-@@ -881,6 +892,12 @@
-                   memcmp(name, entry->e_name, name_len) == 0) {
-                       memcpy(rentry, entry, sizeof(struct ext3_xattr_entry));
-                       error = 0;
-+                      if (offset)
-+                              *offset = le16_to_cpu(entry->e_value_offs);
-+                      if (tbh) {
-+                              get_bh(bh);     
-+                              *tbh = bh;
-+                      }
-               } else {
-                       *free -= EXT3_XATTR_LEN(entry->e_name_len);
-                       *free -= le32_to_cpu(entry->e_value_size);
-@@ -1073,7 +1090,8 @@
-               return -ERANGE;
-       /* try to find attribute in inode body */
--      err = ext3_xattr_ibody_find(inode, name_index, name, &entry, &free1);
-+      err = ext3_xattr_ibody_find(inode, name_index, name,
-+                                      &entry, &free1, NULL, NULL);
-       if (err == 0) {
-               /* found EA in inode */
-               found = 1;
-@@ -1082,7 +1100,7 @@
-               /* there is no such attribute in inode body */
-               /* try to find attribute in dedicated block */
-               err = ext3_xattr_block_find(inode, name_index, name,
--                                              &entry, &free2);
-+                                              &entry, &free2, NULL, NULL);
-               if (err != 0 && err != -ENOENT) {
-                       /* not found EA in block */
-                       goto finish;    
-@@ -1138,6 +1156,38 @@
-       return err;
- }
-+int ext3_xattr_get_ea_loc(struct inode *inode, int name_index,
-+                              const char *name, struct buffer_head **bh,
-+                              int *offset, int *size)
-+{
-+      int free1 = -1, free2 = -1, err, name_len;
-+      struct ext3_xattr_entry entry;
-+      
-+      ea_idebug(inode, "name=%d.%s", name_index, name);
-+
-+      if (name == NULL)
-+              return -EINVAL;
-+      name_len = strlen(name);
-+      if (name_len > 255)
-+              return -ERANGE;
-+
-+      down(&ext3_xattr_sem);
-+
-+      /* try to find attribute in inode body */
-+      err = ext3_xattr_ibody_find(inode, name_index, name,
-+                                      &entry, &free1, bh, offset);
-+      if (err == -ENOENT) {
-+              /* there is no such attribute in inode body */
-+              /* try to find attribute in dedicated block */
-+              err = ext3_xattr_block_find(inode, name_index, name,
-+                                              &entry, &free2, bh, offset);
-+      }
-+      if (err == 0 && size)
-+              *size = le32_to_cpu(entry.e_value_size);
-+      up(&ext3_xattr_sem);
-+      return err;
-+}
-+
- /*
-  * ext3_xattr_block_set()
-  * 
-Index: linux-2.4.20/include/linux/ext3_xattr.h
-===================================================================
---- linux-2.4.20.orig/include/linux/ext3_xattr.h       2004-01-24 14:22:28.000000000 +0300
-+++ linux-2.4.20/include/linux/ext3_xattr.h    2004-01-24 14:34:27.000000000 +0300
-@@ -80,6 +80,7 @@
- extern int ext3_xattr_get(struct inode *, int, const char *, void *, size_t);
- extern int ext3_xattr_list(struct inode *, char *, size_t);
- extern int ext3_xattr_set(handle_t *handle, struct inode *, int, const char *, const void *, size_t, int);
-+extern int ext3_xattr_get_ea_loc(struct inode *, int, const char *, struct buffer_head **, int *, int *);
- extern void ext3_xattr_delete_inode(handle_t *, struct inode *);
- extern void ext3_xattr_put_super(struct super_block *);
diff --git a/lustre/kernel_patches/patches/ext3-extents-in-ea-ioctl-2.4.20.patch b/lustre/kernel_patches/patches/ext3-extents-in-ea-ioctl-2.4.20.patch
deleted file mode 100644 (file)
index 027b0ea..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-Index: linux-2.4.20/fs/ext3/extents-in-ea.c
-===================================================================
---- linux-2.4.20.orig/fs/ext3/extents-in-ea.c  2004-01-24 14:54:37.000000000 +0300
-+++ linux-2.4.20/fs/ext3/extents-in-ea.c       2004-01-24 14:55:10.000000000 +0300
-@@ -200,3 +200,112 @@
-       return err;
- }
-+static int
-+ext3_ext_store_extent_cb(struct ext3_extents_tree *tree,
-+                      struct ext3_ext_path *path,
-+                      struct ext3_extent *newex, int exist)
-+{
-+      struct ext3_extent_buf *buf = (struct ext3_extent_buf *) tree->private;
-+
-+      if (!exist)
-+              return EXT_CONTINUE;
-+      if (buf->err < 0)
-+              return EXT_BREAK;
-+      if (buf->cur - buf->buffer + sizeof(*newex) > buf->buflen)
-+              return EXT_BREAK;
-+
-+      if (!copy_to_user(buf->cur, newex, sizeof(*newex))) {
-+              buf->err++;
-+              buf->cur += sizeof(*newex);
-+      } else {
-+              buf->err = -EFAULT;
-+              return EXT_BREAK;
-+      }
-+      return EXT_CONTINUE;
-+}
-+
-+static int
-+ext3_ext_collect_stats_cb(struct ext3_extents_tree *tree,
-+                      struct ext3_ext_path *path,
-+                      struct ext3_extent *ex, int exist)
-+{
-+      struct ext3_extent_tree_stats *buf =
-+              (struct ext3_extent_tree_stats *) tree->private;
-+      int depth;
-+
-+      if (!exist)
-+              return EXT_CONTINUE;
-+
-+      depth = EXT_DEPTH(tree);
-+      buf->extents_num++;
-+      if (path[depth].p_ext == EXT_FIRST_EXTENT(path[depth].p_hdr))
-+              buf->leaf_num++;
-+      return EXT_CONTINUE;
-+}
-+
-+struct ea_tree_desc {
-+      int name_index;
-+      char eaname[256];
-+};
-+
-+int ext3_ext_in_ea_ioctl(struct inode *inode, struct file *filp,
-+                              unsigned int cmd, unsigned long arg)
-+{
-+      int err = 0;
-+
-+      if (cmd == EXT3_IOC_EA_TREE_INIT) {
-+              struct ea_tree_desc desc;
-+
-+              if (copy_from_user(&desc, (void *) arg, sizeof(desc)))
-+                      return -EFAULT;
-+              err = ext3_init_tree_in_ea(inode, desc.name_index,
-+                                              desc.eaname, 64);
-+      } else if (cmd == EXT3_IOC_GET_EA_EXTENTS) {
-+              struct ext3_extents_tree tree;
-+              struct ext3_extent_buf buf;
-+              struct ea_tree_desc desc;
-+
-+              if (copy_from_user(&buf, (void *) arg, sizeof(buf)))
-+                      return -EFAULT;
-+              if (copy_from_user(&desc, buf.cur, sizeof(desc)))
-+                      return -EFAULT;
-+              err = ext3_init_tree_in_ea_desc(&tree, inode,
-+                                              desc.name_index, desc.eaname);
-+              if (err)
-+                      goto out;
-+              buf.cur = buf.buffer;
-+              buf.err = 0;
-+              tree.private = &buf;
-+              err = ext3_ext_walk_space(&tree, buf.start, 0xffffffff,
-+                                              ext3_ext_store_extent_cb);
-+              if (err == 0)
-+                      err = buf.err;
-+              ext3_release_tree_in_ea_desc(&tree);
-+      } else if (cmd == EXT3_IOC_EA_TREE_ALLOCATE) {
-+              struct ext3_extent_buf buf;
-+              struct ea_tree_desc desc;
-+
-+              if (copy_from_user(&buf, (void *) arg, sizeof(buf)))
-+                      return -EFAULT;
-+              if (copy_from_user(&desc, buf.cur, sizeof(desc)))
-+                      return -EFAULT;
-+              err = ext3_ext_in_ea_alloc_space(inode, desc.name_index,
-+                                              desc.eaname, buf.start,
-+                                              buf.err);
-+      } else if (cmd == EXT3_IOC_EA_TREE_REMOVE) {
-+              struct ext3_extent_buf buf;
-+              struct ea_tree_desc desc;
-+
-+              if (copy_from_user(&buf, (void *) arg, sizeof(buf)))
-+                      return -EFAULT;
-+              if (copy_from_user(&desc, buf.cur, sizeof(desc)))
-+                      return -EFAULT;
-+              err = ext3_ext_in_ea_remove_space(inode, desc.name_index,
-+                                              desc.eaname, buf.start,
-+                                              buf.err);
-+      }
-+
-+out:
-+      return err;
-+}
-+
-Index: linux-2.4.20/fs/ext3/ioctl.c
-===================================================================
---- linux-2.4.20.orig/fs/ext3/ioctl.c  2004-01-24 14:54:31.000000000 +0300
-+++ linux-2.4.20/fs/ext3/ioctl.c       2004-01-24 14:55:04.000000000 +0300
-@@ -193,6 +193,13 @@
-       case EXT3_IOC_GET_TREE_STATS:
-       case EXT3_IOC_GET_TREE_DEPTH:
-               return ext3_ext_ioctl(inode, filp, cmd, arg);
-+      case EXT3_IOC_GET_EA_EXTENTS:
-+      case EXT3_IOC_GET_EA_TREE_DEPTH:
-+      case EXT3_IOC_GET_EA_TREE_STATS:
-+      case EXT3_IOC_EA_TREE_INIT:
-+      case EXT3_IOC_EA_TREE_ALLOCATE:
-+      case EXT3_IOC_EA_TREE_REMOVE:
-+              return ext3_ext_in_ea_ioctl(inode, filp, cmd, arg);
-       default:
-               return -ENOTTY;
-       }
-Index: linux-2.4.20/include/linux/ext3_fs.h
-===================================================================
---- linux-2.4.20.orig/include/linux/ext3_fs.h  2004-01-24 01:28:06.000000000 +0300
-+++ linux-2.4.20/include/linux/ext3_fs.h       2004-01-24 14:55:04.000000000 +0300
-@@ -213,6 +213,14 @@
- #define       EXT3_IOC_GET_TREE_DEPTH         _IOR('f', 6, long)
- #define       EXT3_IOC_GET_TREE_STATS         _IOR('f', 7, long)
-+#define       EXT3_IOC_GET_EA_EXTENTS         _IOR('f', 10, long)
-+#define       EXT3_IOC_GET_EA_TREE_DEPTH      _IOR('f', 11, long)
-+#define       EXT3_IOC_GET_EA_TREE_STATS      _IOR('f', 12, long)
-+#define       EXT3_IOC_EA_TREE_INIT           _IOW('f', 13, long)
-+#define       EXT3_IOC_EA_TREE_ALLOCATE       _IOW('f', 14, long)
-+#define       EXT3_IOC_EA_TREE_REMOVE         _IOW('f', 15, long)
-+
-+
- /*
-  * Structure of an inode on the disk
-  */
diff --git a/lustre/kernel_patches/patches/ext3-extents-oflag-2.4.18-chaos.patch b/lustre/kernel_patches/patches/ext3-extents-oflag-2.4.18-chaos.patch
deleted file mode 100644 (file)
index 53e00a4..0000000
+++ /dev/null
@@ -1,310 +0,0 @@
- fs/ext3/ialloc.c            |    5 +++--
- fs/ext3/inode.c             |    2 +-
- fs/ext3/namei.c             |   43 +++++++++++++++++++++++++++++++++++++------
- include/asm-alpha/fcntl.h   |    1 +
- include/asm-arm/fcntl.h     |    1 +
- include/asm-cris/fcntl.h    |    1 +
- include/asm-i386/fcntl.h    |    1 +
- include/asm-ia64/fcntl.h    |    1 +
- include/asm-m68k/fcntl.h    |    1 +
- include/asm-mips/fcntl.h    |    1 +
- include/asm-mips64/fcntl.h  |    1 +
- include/asm-parisc/fcntl.h  |    1 +
- include/asm-ppc/fcntl.h     |    1 +
- include/asm-s390/fcntl.h    |    1 +
- include/asm-s390x/fcntl.h   |    1 +
- include/asm-sh/fcntl.h      |    1 +
- include/asm-sparc/fcntl.h   |    1 +
- include/asm-sparc64/fcntl.h |    1 +
- include/linux/ext3_fs.h     |    2 +-
- 19 files changed, 57 insertions(+), 10 deletions(-)
-
---- linux-2.4.18-chaos/fs/ext3/ialloc.c~ext3-extents-oflag-2.4.18-chaos        2003-10-08 10:29:12.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/ialloc.c 2003-10-08 10:29:30.000000000 +0400
-@@ -331,7 +331,8 @@ int ext3_itable_block_used(struct super_
-  */
- struct inode * ext3_new_inode (handle_t *handle,
-                               const struct inode * dir, int mode,
--                              unsigned long goal)
-+                              unsigned long goal,
-+                              struct lookup_intent *it)
- {
-       struct super_block * sb;
-       struct buffer_head * bh;
-@@ -573,7 +574,7 @@ repeat:
-       ei->i_prealloc_count = 0;
- #endif
-       ei->i_block_group = i;
--      if (test_opt(sb, EXTENTS))
-+      if (test_opt(sb, EXTENTS) && it && (it->it_flags & O_EXTENTS))
-               EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
-       ei->i_depth = 0;
-       sema_init(&ei->i_ext_sem, 1);
---- linux-2.4.18-chaos/fs/ext3/namei.c~ext3-extents-oflag-2.4.18-chaos 2003-10-08 10:29:11.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/namei.c  2003-10-08 10:36:33.000000000 +0400
-@@ -1204,7 +1204,9 @@ static int ext3_add_nondir(handle_t *han
- }
- static struct inode * ext3_new_inode_wantedi(handle_t *handle, struct inode *dir,
--                                              int mode, struct dentry *dentry)
-+                                              int mode, struct dentry *dentry,
-+                                              struct lookup_intent *it)
-+
- {
-       unsigned long inum = 0;
-@@ -1213,7 +1215,7 @@ static struct inode * ext3_new_inode_wan
-                       (struct dentry_params *) dentry->d_fsdata;
-               inum = param->p_inum;
-       }
--      return ext3_new_inode(handle, dir, mode, inum);
-+      return ext3_new_inode(handle, dir, mode, inum, it);
- }
- /*
-@@ -1238,7 +1240,35 @@ static int ext3_create (struct inode * d
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
--      inode = ext3_new_inode_wantedi (handle, dir, mode, dentry);
-+      inode = ext3_new_inode_wantedi (handle, dir, mode, dentry, NULL);
-+      err = PTR_ERR(inode);
-+      if (!IS_ERR(inode)) {
-+              inode->i_op = &ext3_file_inode_operations;
-+              inode->i_fop = &ext3_file_operations;
-+              inode->i_mapping->a_ops = &ext3_aops;
-+              err = ext3_add_nondir(handle, dentry, inode);
-+              ext3_mark_inode_dirty(handle, inode);
-+      }
-+      ext3_journal_stop(handle, dir);
-+      return err;
-+}
-+
-+static int ext3_create_it (struct inode * dir, struct dentry * dentry, int mode,
-+                              struct lookup_intent *it)
-+{
-+      handle_t *handle; 
-+      struct inode * inode;
-+      int err;
-+
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3);
-+      if (IS_ERR(handle))
-+              return PTR_ERR(handle);
-+
-+      if (IS_SYNC(dir))
-+              handle->h_sync = 1;
-+
-+      inode = ext3_new_inode_wantedi (handle, dir, mode, dentry, it);
-       err = PTR_ERR(inode);
-       if (!IS_ERR(inode)) {
-               inode->i_op = &ext3_file_inode_operations;
-@@ -1266,7 +1296,7 @@ static int ext3_mknod (struct inode * di
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
--      inode = ext3_new_inode_wantedi (handle, dir, mode, dentry);
-+      inode = ext3_new_inode_wantedi (handle, dir, mode, dentry, NULL);
-       err = PTR_ERR(inode);
-       if (!IS_ERR(inode)) {
-               init_special_inode(inode, mode, rdev);
-@@ -1296,7 +1326,7 @@ static int ext3_mkdir(struct inode * dir
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
--      inode = ext3_new_inode_wantedi (handle, dir, S_IFDIR | mode, dentry);
-+      inode = ext3_new_inode_wantedi (handle, dir, S_IFDIR|mode, dentry, NULL);
-       err = PTR_ERR(inode);
-       if (IS_ERR(inode))
-               goto out_stop;
-@@ -1688,7 +1718,7 @@ static int ext3_symlink (struct inode * 
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
--      inode = ext3_new_inode_wantedi (handle, dir, S_IFLNK|S_IRWXUGO, dentry);
-+      inode = ext3_new_inode_wantedi (handle, dir, S_IFLNK|S_IRWXUGO, dentry,NULL);
-       err = PTR_ERR(inode);
-       if (IS_ERR(inode))
-               goto out_stop;
-@@ -1892,6 +1922,7 @@ end_rename:
-  * directories can handle most operations...
-  */
- struct inode_operations ext3_dir_inode_operations = {
-+      create_it:      ext3_create_it,         /* BKL held */
-       create:         ext3_create,            /* BKL held */
-       lookup:         ext3_lookup,            /* BKL held */
-       link:           ext3_link,              /* BKL held */
---- linux-2.4.18-chaos/include/asm-alpha/fcntl.h~ext3-extents-oflag-2.4.18-chaos       2003-07-28 17:52:07.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/asm-alpha/fcntl.h        2003-10-08 10:29:30.000000000 +0400
-@@ -22,6 +22,7 @@
- #define O_LARGEFILE   0400000 /* will be set by the kernel on every open */
- #define O_ATOMICLOOKUP        01000000 /* do atomic file lookup */
- #define O_DIRECT      02000000 /* direct disk access - should check with OSF/1 */
-+#define O_EXTENTS     04000000 /* create file with extents if possible */
- #define F_DUPFD               0       /* dup */
- #define F_GETFD               1       /* get close_on_exec */
---- linux-2.4.18-chaos/include/asm-arm/fcntl.h~ext3-extents-oflag-2.4.18-chaos 2003-07-28 17:52:07.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/asm-arm/fcntl.h  2003-10-08 10:29:30.000000000 +0400
-@@ -21,6 +21,7 @@
- #define O_DIRECT      0200000 /* direct disk access hint - currently ignored */
- #define O_LARGEFILE   0400000
- #define O_ATOMICLOOKUP 01000000
-+#define O_EXTENTS     02000000 /* create file with extents if possible */
- #define F_DUPFD               0       /* dup */
- #define F_GETFD               1       /* get close_on_exec */
---- linux-2.4.18-chaos/include/asm-cris/fcntl.h~ext3-extents-oflag-2.4.18-chaos        2001-02-09 03:32:44.000000000 +0300
-+++ linux-2.4.18-chaos-alexey/include/asm-cris/fcntl.h 2003-10-08 10:29:30.000000000 +0400
-@@ -22,6 +22,7 @@
- #define O_LARGEFILE   0100000
- #define O_DIRECTORY   0200000 /* must be a directory */
- #define O_NOFOLLOW    0400000 /* don't follow links */
-+#define O_EXTENTS     01000000 /* create file with extents if possible */
- #define F_DUPFD               0       /* dup */
- #define F_GETFD               1       /* get f_flags */
---- linux-2.4.18-chaos/include/asm-i386/fcntl.h~ext3-extents-oflag-2.4.18-chaos        2003-07-28 17:52:09.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/asm-i386/fcntl.h 2003-10-08 10:29:30.000000000 +0400
-@@ -21,6 +21,7 @@
- #define O_DIRECTORY   0200000 /* must be a directory */
- #define O_NOFOLLOW    0400000 /* don't follow links */
- #define O_ATOMICLOOKUP        01000000 /* do atomic file lookup */
-+#define O_EXTENTS     02000000 /* create file with extents if possible */
- #define F_DUPFD               0       /* dup */
- #define F_GETFD               1       /* get close_on_exec */
---- linux-2.4.18-chaos/include/asm-ia64/fcntl.h~ext3-extents-oflag-2.4.18-chaos        2003-07-28 17:52:09.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/asm-ia64/fcntl.h 2003-10-08 10:29:30.000000000 +0400
-@@ -29,6 +29,7 @@
- #define O_DIRECTORY   0200000 /* must be a directory */
- #define O_NOFOLLOW    0400000 /* don't follow links */
- #define O_ATOMICLOOKUP  01000000 /* do atomic file lookup */
-+#define O_EXTENTS     02000000 /* create file with extents if possible */
- #define F_DUPFD               0       /* dup */
- #define F_GETFD               1       /* get close_on_exec */
---- linux-2.4.18-chaos/include/asm-m68k/fcntl.h~ext3-extents-oflag-2.4.18-chaos        2000-11-28 05:00:49.000000000 +0300
-+++ linux-2.4.18-chaos-alexey/include/asm-m68k/fcntl.h 2003-10-08 10:29:30.000000000 +0400
-@@ -20,6 +20,7 @@
- #define O_NOFOLLOW    0100000 /* don't follow links */
- #define O_DIRECT      0200000 /* direct disk access hint - currently ignored */
- #define O_LARGEFILE   0400000
-+#define O_EXTENTS     01000000 /* create file with extents if possible */
- #define F_DUPFD               0       /* dup */
- #define F_GETFD               1       /* get close_on_exec */
---- linux-2.4.18-chaos/include/asm-mips64/fcntl.h~ext3-extents-oflag-2.4.18-chaos      2003-07-28 17:52:15.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/asm-mips64/fcntl.h       2003-10-08 10:29:30.000000000 +0400
-@@ -27,6 +27,7 @@
- #define O_DIRECTORY   0x10000 /* must be a directory */
- #define O_NOFOLLOW    0x20000 /* don't follow links */
- #define O_ATOMICLOOKUP        0x40000
-+#define O_EXTENTS     0x80000 /* create file with extents if possible */
- #define O_NDELAY      O_NONBLOCK
---- linux-2.4.18-chaos/include/asm-mips/fcntl.h~ext3-extents-oflag-2.4.18-chaos        2003-07-28 17:52:14.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/asm-mips/fcntl.h 2003-10-08 10:29:30.000000000 +0400
-@@ -27,6 +27,7 @@
- #define O_DIRECTORY   0x10000 /* must be a directory */
- #define O_NOFOLLOW    0x20000 /* don't follow links */
- #define O_ATOMICLOOKUP        0x40000
-+#define O_EXTENTS     02000000 /* create file with extents if possible */
- #define O_NDELAY      O_NONBLOCK
---- linux-2.4.18-chaos/include/asm-parisc/fcntl.h~ext3-extents-oflag-2.4.18-chaos      2000-12-05 23:29:39.000000000 +0300
-+++ linux-2.4.18-chaos-alexey/include/asm-parisc/fcntl.h       2003-10-08 10:29:30.000000000 +0400
-@@ -19,6 +19,7 @@
- #define O_NOCTTY      00400000 /* not fcntl */
- #define O_DSYNC               01000000 /* HPUX only */
- #define O_RSYNC               02000000 /* HPUX only */
-+#define O_EXTENTS     04000000 /* create file with extents if possible */
- #define FASYNC                00020000 /* fcntl, for BSD compatibility */
- #define O_DIRECT      00040000 /* direct disk access hint - currently ignored */
---- linux-2.4.18-chaos/include/asm-ppc/fcntl.h~ext3-extents-oflag-2.4.18-chaos 2003-07-28 17:52:15.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/asm-ppc/fcntl.h  2003-10-08 10:29:30.000000000 +0400
-@@ -24,6 +24,7 @@
- #define O_LARGEFILE     0200000
- #define O_DIRECT      0400000 /* direct disk access hint */
- #define O_ATOMICLOOKUP 01000000       /* do atomic file lookup */
-+#define O_EXTENT      02000000 /* create file with extents if possible */
- #define F_DUPFD               0       /* dup */
- #define F_GETFD               1       /* get close_on_exec */
---- linux-2.4.18-chaos/include/asm-s390/fcntl.h~ext3-extents-oflag-2.4.18-chaos        2003-07-28 17:52:15.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/asm-s390/fcntl.h 2003-10-08 10:29:30.000000000 +0400
-@@ -28,6 +28,7 @@
- #define O_DIRECTORY   0200000 /* must be a directory */
- #define O_NOFOLLOW    0400000 /* don't follow links */
- #define O_ATOMICLOOKUP        01000000 /* do atomic file lookup */
-+#define O_EXTENTS     02000000 /* create file with extents if possible */
- #define F_DUPFD               0       /* dup */
- #define F_GETFD               1       /* get close_on_exec */
---- linux-2.4.18-chaos/include/asm-s390x/fcntl.h~ext3-extents-oflag-2.4.18-chaos       2003-07-28 17:52:15.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/asm-s390x/fcntl.h        2003-10-08 10:29:30.000000000 +0400
-@@ -28,6 +28,7 @@
- #define O_DIRECTORY   0200000 /* must be a directory */
- #define O_NOFOLLOW    0400000 /* don't follow links */
- #define O_ATOMICLOOKUP 01000000       /* do atomic file lookup */
-+#define O_EXTENTS     02000000 /* create file with extents if possible */
- #define F_DUPFD               0       /* dup */
- #define F_GETFD               1       /* get close_on_exec */
---- linux-2.4.18-chaos/include/asm-sh/fcntl.h~ext3-extents-oflag-2.4.18-chaos  2003-07-28 17:52:15.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/asm-sh/fcntl.h   2003-10-08 10:29:30.000000000 +0400
-@@ -21,6 +21,7 @@
- #define O_DIRECTORY   0200000 /* must be a directory */
- #define O_NOFOLLOW    0400000 /* don't follow links */
- #define O_ATOMICLOOKUP  01000000
-+#define O_EXTENTS     02000000 /* create file with extents if possible */
- #define F_DUPFD               0       /* dup */
- #define F_GETFD               1       /* get close_on_exec */
---- linux-2.4.18-chaos/include/asm-sparc64/fcntl.h~ext3-extents-oflag-2.4.18-chaos     2003-07-28 17:52:16.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/asm-sparc64/fcntl.h      2003-10-08 10:29:30.000000000 +0400
-@@ -22,6 +22,7 @@
- #define O_LARGEFILE   0x40000
- #define O_ATOMICLOOKUP        0x80000 /* do atomic file lookup */
- #define O_DIRECT        0x100000 /* direct disk access hint */
-+#define O_EXTENTS     0x200000 /* create file with extents if possible */
- #define F_DUPFD               0       /* dup */
---- linux-2.4.18-chaos/include/asm-sparc/fcntl.h~ext3-extents-oflag-2.4.18-chaos       2003-07-28 17:52:16.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/asm-sparc/fcntl.h        2003-10-08 10:29:30.000000000 +0400
-@@ -22,6 +22,7 @@
- #define O_LARGEFILE   0x40000
- #define O_ATOMICLOOKUP        0x80000 /* do atomic file lookup */
- #define O_DIRECT        0x100000 /* direct disk access hint */
-+#define O_EXTENTS     0x200000 /* create file with extents if possible */
- #define F_DUPFD               0       /* dup */
- #define F_GETFD               1       /* get close_on_exec */
---- linux-2.4.18-chaos/include/linux/ext3_fs.h~ext3-extents-oflag-2.4.18-chaos 2003-10-08 10:29:12.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/linux/ext3_fs.h  2003-10-08 10:29:30.000000000 +0400
-@@ -641,7 +641,7 @@ extern int ext3_sync_file (struct file *
- /* ialloc.c */
- extern struct inode * ext3_new_inode (handle_t *, const struct inode *, int,
--                                    unsigned long);
-+                                    unsigned long, struct lookup_intent *);
- extern void ext3_free_inode (handle_t *, struct inode *);
- extern struct inode * ext3_orphan_get (struct super_block *, unsigned long);
- extern unsigned long ext3_count_free_inodes (struct super_block *);
---- linux-2.4.18-chaos/fs/ext3/inode.c~ext3-extents-oflag-2.4.18-chaos 2003-10-08 10:29:12.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/ext3/inode.c  2003-10-08 10:29:30.000000000 +0400
-@@ -2204,7 +2204,7 @@ void ext3_truncate_thread(struct inode *
-       if (IS_ERR(handle))
-               goto out_truncate;
--      new_inode = ext3_new_inode(handle, old_inode, old_inode->i_mode, 0);
-+      new_inode = ext3_new_inode(handle, old_inode, old_inode->i_mode, 0, 0);
-       if (IS_ERR(new_inode)) {
-               ext3_debug("truncate inode %lu directly (no new inodes)\n",
-                          old_inode->i_ino);
-
-_
diff --git a/lustre/kernel_patches/patches/ext3-htree-2.4.19-pre1.patch b/lustre/kernel_patches/patches/ext3-htree-2.4.19-pre1.patch
deleted file mode 100644 (file)
index 0806c38..0000000
+++ /dev/null
@@ -1,2588 +0,0 @@
- fs/ext3/Makefile           |    2 
- fs/ext3/dir.c              |  302 +++++++++
- fs/ext3/file.c             |    3 
- fs/ext3/hash.c             |  215 ++++++
- fs/ext3/namei.c            | 1420 ++++++++++++++++++++++++++++++++++++++++-----
- fs/ext3/super.c            |    7 
- include/linux/ext3_fs.h    |   85 ++
- include/linux/ext3_fs_sb.h |    2 
- include/linux/ext3_jbd.h   |    2 
- include/linux/rbtree.h     |    2 
- lib/rbtree.c               |   42 +
- 11 files changed, 1921 insertions(+), 161 deletions(-)
-
-Index: linux-2.4.19-pre1/fs/ext3/dir.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/dir.c       2001-11-10 01:25:04.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/dir.c    2003-11-20 23:05:26.000000000 +0300
-@@ -21,12 +21,16 @@
- #include <linux/fs.h>
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
-+#include <linux/slab.h>
-+#include <linux/rbtree.h>
- static unsigned char ext3_filetype_table[] = {
-       DT_UNKNOWN, DT_REG, DT_DIR, DT_CHR, DT_BLK, DT_FIFO, DT_SOCK, DT_LNK
- };
- static int ext3_readdir(struct file *, void *, filldir_t);
-+static int ext3_dx_readdir(struct file * filp,
-+                         void * dirent, filldir_t filldir);
- struct file_operations ext3_dir_operations = {
-       read:           generic_read_dir,
-@@ -35,6 +39,17 @@
-       fsync:          ext3_sync_file,         /* BKL held */
- };
-+
-+static unsigned char get_dtype(struct super_block *sb, int filetype)
-+{
-+      if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_FILETYPE) ||
-+          (filetype >= EXT3_FT_MAX))
-+              return DT_UNKNOWN;
-+
-+      return (ext3_filetype_table[filetype]);
-+}
-+                             
-+
- int ext3_check_dir_entry (const char * function, struct inode * dir,
-                         struct ext3_dir_entry_2 * de,
-                         struct buffer_head * bh,
-@@ -79,6 +94,16 @@
-       sb = inode->i_sb;
-+      if (is_dx(inode)) {
-+              err = ext3_dx_readdir(filp, dirent, filldir);
-+              if (err != ERR_BAD_DX_DIR)
-+                      return err;
-+              /*
-+               * We don't set the inode dirty flag since it's not
-+               * critical that it get flushed back to the disk.
-+               */
-+              EXT3_I(filp->f_dentry->d_inode)->i_flags &= ~EXT3_INDEX_FL;
-+      }
-       stored = 0;
-       bh = NULL;
-       offset = filp->f_pos & (sb->s_blocksize - 1);
-@@ -162,18 +187,12 @@
-                                * during the copy operation.
-                                */
-                               unsigned long version = filp->f_version;
--                              unsigned char d_type = DT_UNKNOWN;
--                              if (EXT3_HAS_INCOMPAT_FEATURE(sb,
--                                              EXT3_FEATURE_INCOMPAT_FILETYPE)
--                                              && de->file_type < EXT3_FT_MAX)
--                                      d_type =
--                                        ext3_filetype_table[de->file_type];
-                               error = filldir(dirent, de->name,
-                                               de->name_len,
-                                               filp->f_pos,
-                                               le32_to_cpu(de->inode),
--                                              d_type);
-+                                              get_dtype(sb, de->file_type));
-                               if (error)
-                                       break;
-                               if (version != filp->f_version)
-@@ -188,3 +207,272 @@
-       UPDATE_ATIME(inode);
-       return 0;
- }
-+
-+#ifdef CONFIG_EXT3_INDEX
-+/*
-+ * These functions convert from the major/minor hash to an f_pos
-+ * value.
-+ * 
-+ * Currently we only use major hash numer.  This is unfortunate, but
-+ * on 32-bit machines, the same VFS interface is used for lseek and
-+ * llseek, so if we use the 64 bit offset, then the 32-bit versions of
-+ * lseek/telldir/seekdir will blow out spectacularly, and from within
-+ * the ext2 low-level routine, we don't know if we're being called by
-+ * a 64-bit version of the system call or the 32-bit version of the
-+ * system call.  Worse yet, NFSv2 only allows for a 32-bit readdir
-+ * cookie.  Sigh.
-+ */
-+#define hash2pos(major, minor)        (major >> 1)
-+#define pos2maj_hash(pos)     ((pos << 1) & 0xffffffff)
-+#define pos2min_hash(pos)     (0)
-+
-+/*
-+ * This structure holds the nodes of the red-black tree used to store
-+ * the directory entry in hash order.
-+ */
-+struct fname {
-+      __u32           hash;
-+      __u32           minor_hash;
-+      rb_node_t       rb_hash; 
-+      struct fname    *next;
-+      __u32           inode;
-+      __u8            name_len;
-+      __u8            file_type;
-+      char            name[0];
-+};
-+
-+/*
-+ * This functoin implements a non-recursive way of freeing all of the
-+ * nodes in the red-black tree.
-+ */
-+static void free_rb_tree_fname(rb_root_t *root)
-+{
-+      rb_node_t       *n = root->rb_node;
-+      rb_node_t       *parent;
-+      struct fname    *fname;
-+
-+      while (n) {
-+              /* Do the node's children first */
-+              if ((n)->rb_left) {
-+                      n = n->rb_left;
-+                      continue;
-+              }
-+              if (n->rb_right) {
-+                      n = n->rb_right;
-+                      continue;
-+              }
-+              /*
-+               * The node has no children; free it, and then zero
-+               * out parent's link to it.  Finally go to the
-+               * beginning of the loop and try to free the parent
-+               * node.
-+               */
-+              parent = n->rb_parent;
-+              fname = rb_entry(n, struct fname, rb_hash);
-+              kfree(fname);
-+              if (!parent)
-+                      root->rb_node = 0;
-+              else if (parent->rb_left == n)
-+                      parent->rb_left = 0;
-+              else if (parent->rb_right == n)
-+                      parent->rb_right = 0;
-+              n = parent;
-+      }
-+      root->rb_node = 0;
-+}
-+
-+
-+struct dir_private_info *create_dir_info(loff_t pos)
-+{
-+      struct dir_private_info *p;
-+
-+      p = kmalloc(sizeof(struct dir_private_info), GFP_KERNEL);
-+      if (!p)
-+              return NULL;
-+      p->root.rb_node = 0;
-+      p->curr_node = 0;
-+      p->extra_fname = 0;
-+      p->last_pos = 0;
-+      p->curr_hash = pos2maj_hash(pos);
-+      p->curr_minor_hash = pos2min_hash(pos);
-+      p->next_hash = 0;
-+      return p;
-+}
-+
-+void ext3_htree_free_dir_info(struct dir_private_info *p)
-+{
-+      free_rb_tree_fname(&p->root);
-+      kfree(p);
-+}
-+              
-+/*
-+ * Given a directory entry, enter it into the fname rb tree.
-+ */
-+int ext3_htree_store_dirent(struct file *dir_file, __u32 hash,
-+                           __u32 minor_hash,
-+                           struct ext3_dir_entry_2 *dirent)
-+{
-+      rb_node_t **p, *parent = NULL;
-+      struct fname * fname, *new_fn;
-+      struct dir_private_info *info;
-+      int len;
-+
-+      info = (struct dir_private_info *) dir_file->private_data;
-+      p = &info->root.rb_node;
-+
-+      /* Create and allocate the fname structure */
-+      len = sizeof(struct fname) + dirent->name_len + 1;
-+      new_fn = kmalloc(len, GFP_KERNEL);
-+      if (!new_fn)
-+              return -ENOMEM;
-+      memset(new_fn, 0, len);
-+      new_fn->hash = hash;
-+      new_fn->minor_hash = minor_hash;
-+      new_fn->inode = le32_to_cpu(dirent->inode);
-+      new_fn->name_len = dirent->name_len;
-+      new_fn->file_type = dirent->file_type;
-+      memcpy(new_fn->name, dirent->name, dirent->name_len);
-+      new_fn->name[dirent->name_len] = 0;
-+      
-+      while (*p) {
-+              parent = *p;
-+              fname = rb_entry(parent, struct fname, rb_hash);
-+
-+              /*
-+               * If the hash and minor hash match up, then we put
-+               * them on a linked list.  This rarely happens...
-+               */
-+              if ((new_fn->hash == fname->hash) &&
-+                  (new_fn->minor_hash == fname->minor_hash)) {
-+                      new_fn->next = fname->next;
-+                      fname->next = new_fn;
-+                      return 0;
-+              }
-+                      
-+              if (new_fn->hash < fname->hash)
-+                      p = &(*p)->rb_left;
-+              else if (new_fn->hash > fname->hash)
-+                      p = &(*p)->rb_right;
-+              else if (new_fn->minor_hash < fname->minor_hash)
-+                      p = &(*p)->rb_left;
-+              else /* if (new_fn->minor_hash > fname->minor_hash) */
-+                      p = &(*p)->rb_right;
-+      }
-+
-+      rb_link_node(&new_fn->rb_hash, parent, p);
-+      rb_insert_color(&new_fn->rb_hash, &info->root);
-+      return 0;
-+}
-+
-+
-+
-+/*
-+ * This is a helper function for ext3_dx_readdir.  It calls filldir
-+ * for all entres on the fname linked list.  (Normally there is only
-+ * one entry on the linked list, unless there are 62 bit hash collisions.)
-+ */
-+static int call_filldir(struct file * filp, void * dirent,
-+                      filldir_t filldir, struct fname *fname)
-+{
-+      struct dir_private_info *info = filp->private_data;
-+      loff_t  curr_pos;
-+      struct inode *inode = filp->f_dentry->d_inode;
-+      struct super_block * sb;
-+      int error;
-+
-+      sb = inode->i_sb;
-+      
-+      if (!fname) {
-+              printk("call_filldir: called with null fname?!?\n");
-+              return 0;
-+      }
-+      curr_pos = hash2pos(fname->hash, fname->minor_hash);
-+      while (fname) {
-+              error = filldir(dirent, fname->name,
-+                              fname->name_len, curr_pos, 
-+                              fname->inode,
-+                              get_dtype(sb, fname->file_type));
-+              if (error) {
-+                      filp->f_pos = curr_pos;
-+                      info->extra_fname = fname->next;
-+                      return error;
-+              }
-+              fname = fname->next;
-+      }
-+      return 0;
-+}
-+
-+static int ext3_dx_readdir(struct file * filp,
-+                       void * dirent, filldir_t filldir)
-+{
-+      struct dir_private_info *info = filp->private_data;
-+      struct inode *inode = filp->f_dentry->d_inode;
-+      struct fname *fname;
-+      int     ret;
-+
-+      if (!info) {
-+              info = create_dir_info(filp->f_pos);
-+              if (!info)
-+                      return -ENOMEM;
-+              filp->private_data = info;
-+      }
-+
-+      /* Some one has messed with f_pos; reset the world */
-+      if (info->last_pos != filp->f_pos) {
-+              free_rb_tree_fname(&info->root);
-+              info->curr_node = 0;
-+              info->extra_fname = 0;
-+              info->curr_hash = pos2maj_hash(filp->f_pos);
-+              info->curr_minor_hash = pos2min_hash(filp->f_pos);
-+      }
-+
-+      /*
-+       * If there are any leftover names on the hash collision
-+       * chain, return them first.
-+       */
-+      if (info->extra_fname &&
-+          call_filldir(filp, dirent, filldir, info->extra_fname))
-+              goto finished;
-+
-+      if (!info->curr_node)
-+              info->curr_node = rb_get_first(&info->root);
-+
-+      while (1) {
-+              /*
-+               * Fill the rbtree if we have no more entries,
-+               * or the inode has changed since we last read in the
-+               * cached entries. 
-+               */
-+              if ((!info->curr_node) ||
-+                  (filp->f_version != inode->i_version)) {
-+                      info->curr_node = 0;
-+                      free_rb_tree_fname(&info->root);
-+                      filp->f_version = inode->i_version;
-+                      ret = ext3_htree_fill_tree(filp, info->curr_hash,
-+                                                 info->curr_minor_hash,
-+                                                 &info->next_hash);
-+                      if (ret < 0)
-+                              return ret;
-+                      if (ret == 0)
-+                              break;
-+                      info->curr_node = rb_get_first(&info->root);
-+              }
-+
-+              fname = rb_entry(info->curr_node, struct fname, rb_hash);
-+              info->curr_hash = fname->hash;
-+              info->curr_minor_hash = fname->minor_hash;
-+              if (call_filldir(filp, dirent, filldir, fname))
-+                      break;
-+
-+              info->curr_node = rb_get_next(info->curr_node);
-+              if (!info->curr_node) {
-+                      info->curr_hash = info->next_hash;
-+                      info->curr_minor_hash = 0;
-+              }
-+      }
-+finished:
-+      info->last_pos = filp->f_pos;
-+      UPDATE_ATIME(inode);
-+      return 0;
-+}
-+#endif
-Index: linux-2.4.19-pre1/fs/ext3/file.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/file.c      2001-11-16 00:37:55.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/file.c   2003-11-20 23:05:26.000000000 +0300
-@@ -35,6 +35,9 @@
- {
-       if (filp->f_mode & FMODE_WRITE)
-               ext3_discard_prealloc (inode);
-+      if (is_dx(inode) && filp->private_data)
-+              ext3_htree_free_dir_info(filp->private_data);
-+
-       return 0;
- }
-Index: linux-2.4.19-pre1/fs/ext3/hash.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/hash.c      2003-11-20 23:05:26.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/hash.c   2003-11-20 23:05:26.000000000 +0300
-@@ -0,0 +1,215 @@
-+/*
-+ *  linux/fs/ext3/hash.c
-+ *
-+ * Copyright (C) 2002 by Theodore Ts'o
-+ *
-+ * This file is released under the GPL v2.
-+ * 
-+ * This file may be redistributed under the terms of the GNU Public
-+ * License.
-+ */
-+
-+#include <linux/fs.h>
-+#include <linux/jbd.h>
-+#include <linux/sched.h>
-+#include <linux/ext3_fs.h>
-+
-+#define DELTA 0x9E3779B9
-+
-+static void TEA_transform(__u32 buf[4], __u32 const in[])
-+{
-+      __u32   sum = 0;
-+      __u32   b0 = buf[0], b1 = buf[1];
-+      __u32   a = in[0], b = in[1], c = in[2], d = in[3];
-+      int     n = 16;
-+
-+      do {                                                    
-+              sum += DELTA;                                   
-+              b0 += ((b1 << 4)+a) ^ (b1+sum) ^ ((b1 >> 5)+b); 
-+              b1 += ((b0 << 4)+c) ^ (b0+sum) ^ ((b0 >> 5)+d); 
-+      } while(--n);
-+
-+      buf[0] += b0;
-+      buf[1] += b1;
-+}
-+
-+/* F, G and H are basic MD4 functions: selection, majority, parity */
-+#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
-+#define G(x, y, z) (((x) & (y)) + (((x) ^ (y)) & (z)))
-+#define H(x, y, z) ((x) ^ (y) ^ (z))
-+
-+/*
-+ * The generic round function.  The application is so specific that
-+ * we don't bother protecting all the arguments with parens, as is generally
-+ * good macro practice, in favor of extra legibility.
-+ * Rotation is separate from addition to prevent recomputation
-+ */
-+#define ROUND(f, a, b, c, d, x, s)    \
-+      (a += f(b, c, d) + x, a = (a << s) | (a >> (32-s)))
-+#define K1 0
-+#define K2 013240474631UL
-+#define K3 015666365641UL
-+
-+/*
-+ * Basic cut-down MD4 transform.  Returns only 32 bits of result.
-+ */
-+static void halfMD4Transform (__u32 buf[4], __u32 const in[])
-+{
-+      __u32   a = buf[0], b = buf[1], c = buf[2], d = buf[3];
-+
-+      /* Round 1 */
-+      ROUND(F, a, b, c, d, in[0] + K1,  3);
-+      ROUND(F, d, a, b, c, in[1] + K1,  7);
-+      ROUND(F, c, d, a, b, in[2] + K1, 11);
-+      ROUND(F, b, c, d, a, in[3] + K1, 19);
-+      ROUND(F, a, b, c, d, in[4] + K1,  3);
-+      ROUND(F, d, a, b, c, in[5] + K1,  7);
-+      ROUND(F, c, d, a, b, in[6] + K1, 11);
-+      ROUND(F, b, c, d, a, in[7] + K1, 19);
-+
-+      /* Round 2 */
-+      ROUND(G, a, b, c, d, in[1] + K2,  3);
-+      ROUND(G, d, a, b, c, in[3] + K2,  5);
-+      ROUND(G, c, d, a, b, in[5] + K2,  9);
-+      ROUND(G, b, c, d, a, in[7] + K2, 13);
-+      ROUND(G, a, b, c, d, in[0] + K2,  3);
-+      ROUND(G, d, a, b, c, in[2] + K2,  5);
-+      ROUND(G, c, d, a, b, in[4] + K2,  9);
-+      ROUND(G, b, c, d, a, in[6] + K2, 13);
-+
-+      /* Round 3 */
-+      ROUND(H, a, b, c, d, in[3] + K3,  3);
-+      ROUND(H, d, a, b, c, in[7] + K3,  9);
-+      ROUND(H, c, d, a, b, in[2] + K3, 11);
-+      ROUND(H, b, c, d, a, in[6] + K3, 15);
-+      ROUND(H, a, b, c, d, in[1] + K3,  3);
-+      ROUND(H, d, a, b, c, in[5] + K3,  9);
-+      ROUND(H, c, d, a, b, in[0] + K3, 11);
-+      ROUND(H, b, c, d, a, in[4] + K3, 15);
-+
-+      buf[0] += a;
-+      buf[1] += b;
-+      buf[2] += c;
-+      buf[3] += d;
-+}
-+
-+#undef ROUND
-+#undef F
-+#undef G
-+#undef H
-+#undef K1
-+#undef K2
-+#undef K3
-+
-+/* The old legacy hash */
-+static __u32 dx_hack_hash (const char *name, int len)
-+{
-+      __u32 hash0 = 0x12a3fe2d, hash1 = 0x37abe8f9;
-+      while (len--) {
-+              __u32 hash = hash1 + (hash0 ^ (*name++ * 7152373));
-+              
-+              if (hash & 0x80000000) hash -= 0x7fffffff;
-+              hash1 = hash0;
-+              hash0 = hash;
-+      }
-+      return (hash0 << 1);
-+}
-+
-+static void str2hashbuf(const char *msg, int len, __u32 *buf, int num)
-+{
-+      __u32   pad, val;
-+      int     i;
-+
-+      pad = (__u32)len | ((__u32)len << 8);
-+      pad |= pad << 16;
-+
-+      val = pad;
-+      if (len > num*4)
-+              len = num * 4;
-+      for (i=0; i < len; i++) {
-+              if ((i % 4) == 0)
-+                      val = pad;
-+              val = msg[i] + (val << 8);
-+              if ((i % 4) == 3) {
-+                      *buf++ = val;
-+                      val = pad;
-+                      num--;
-+              }
-+      }
-+      if (--num >= 0)
-+              *buf++ = val;
-+      while (--num >= 0)
-+              *buf++ = pad;
-+}
-+
-+/*
-+ * Returns the hash of a filename.  If len is 0 and name is NULL, then
-+ * this function can be used to test whether or not a hash version is
-+ * supported.
-+ * 
-+ * The seed is an 4 longword (32 bits) "secret" which can be used to
-+ * uniquify a hash.  If the seed is all zero's, then some default seed
-+ * may be used.
-+ * 
-+ * A particular hash version specifies whether or not the seed is
-+ * represented, and whether or not the returned hash is 32 bits or 64
-+ * bits.  32 bit hashes will return 0 for the minor hash.
-+ */
-+int ext3fs_dirhash(const char *name, int len, struct dx_hash_info *hinfo)
-+{
-+      __u32   hash;
-+      __u32   minor_hash = 0;
-+      const char      *p;
-+      int             i;
-+      __u32           in[8], buf[4];
-+
-+      /* Initialize the default seed for the hash checksum functions */
-+      buf[0] = 0x67452301;
-+      buf[1] = 0xefcdab89;
-+      buf[2] = 0x98badcfe;
-+      buf[3] = 0x10325476;
-+
-+      /* Check to see if the seed is all zero's */
-+      if (hinfo->seed) {
-+              for (i=0; i < 4; i++) {
-+                      if (hinfo->seed[i])
-+                              break;
-+              }
-+              if (i < 4)
-+                      memcpy(buf, hinfo->seed, sizeof(buf));
-+      }
-+              
-+      switch (hinfo->hash_version) {
-+      case DX_HASH_LEGACY:
-+              hash = dx_hack_hash(name, len);
-+              break;
-+      case DX_HASH_HALF_MD4:
-+              p = name;
-+              while (len > 0) {
-+                      str2hashbuf(p, len, in, 8);
-+                      halfMD4Transform(buf, in);
-+                      len -= 32;
-+                      p += 32;
-+              }
-+              minor_hash = buf[2];
-+              hash = buf[1];
-+              break;
-+      case DX_HASH_TEA:
-+              p = name;
-+              while (len > 0) {
-+                      str2hashbuf(p, len, in, 4);
-+                      TEA_transform(buf, in);
-+                      len -= 16;
-+                      p += 16;
-+              }
-+              hash = buf[0];
-+              minor_hash = buf[1];
-+              break;
-+      default:
-+              hinfo->hash = 0;
-+              return -1;
-+      }
-+      hinfo->hash = hash & ~1;
-+      hinfo->minor_hash = minor_hash;
-+      return 0;
-+}
-Index: linux-2.4.19-pre1/fs/ext3/Makefile
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/Makefile    2003-11-20 19:01:58.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/Makefile 2003-11-20 23:05:26.000000000 +0300
-@@ -12,7 +12,7 @@
- export-objs :=        super.o inode.o
- obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
--              ioctl.o namei.o super.o symlink.o
-+              ioctl.o namei.o super.o symlink.o hash.o
- obj-m    := $(O_TARGET)
- include $(TOPDIR)/Rules.make
-Index: linux-2.4.19-pre1/fs/ext3/namei.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/namei.c     2001-11-10 01:25:04.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/namei.c  2003-11-20 23:22:54.000000000 +0300
-@@ -16,6 +16,12 @@
-  *        David S. Miller (davem@caip.rutgers.edu), 1995
-  *  Directory entry file type support and forward compatibility hooks
-  *    for B-tree directories by Theodore Ts'o (tytso@mit.edu), 1998
-+ *  Hash Tree Directory indexing (c)
-+ *    Daniel Phillips, 2001
-+ *  Hash Tree Directory indexing porting
-+ *    Christopher Li, 2002
-+ *  Hash Tree Directory indexing cleanup
-+ *    Theodore Ts'o, 2002
-  */
- #include <linux/fs.h>
-@@ -38,6 +44,642 @@
- #define NAMEI_RA_SIZE        (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
- #define NAMEI_RA_INDEX(c,b)  (((c) * NAMEI_RA_BLOCKS) + (b))
-+static struct buffer_head *ext3_append(handle_t *handle,
-+                                      struct inode *inode,
-+                                      u32 *block, int *err)
-+{
-+      struct buffer_head *bh;
-+
-+      *block = inode->i_size >> inode->i_sb->s_blocksize_bits;
-+
-+      if ((bh = ext3_bread(handle, inode, *block, 1, err))) {
-+              inode->i_size += inode->i_sb->s_blocksize;
-+              EXT3_I(inode)->i_disksize = inode->i_size;
-+              ext3_journal_get_write_access(handle,bh);
-+      }
-+      return bh;
-+}
-+
-+#ifndef assert
-+#define assert(test) J_ASSERT(test)
-+#endif
-+
-+#ifndef swap
-+#define swap(x, y) do { typeof(x) z = x; x = y; y = z; } while (0)
-+#endif
-+
-+typedef struct { u32 v; } le_u32;
-+typedef struct { u16 v; } le_u16;
-+
-+#ifdef DX_DEBUG
-+#define dxtrace(command) command
-+#else
-+#define dxtrace(command) 
-+#endif
-+
-+struct fake_dirent
-+{
-+      /*le*/u32 inode;
-+      /*le*/u16 rec_len;
-+      u8 name_len;
-+      u8 file_type;
-+};
-+
-+struct dx_countlimit
-+{
-+      le_u16 limit;
-+      le_u16 count;
-+};
-+
-+struct dx_entry
-+{
-+      le_u32 hash;
-+      le_u32 block;
-+};
-+
-+/*
-+ * dx_root_info is laid out so that if it should somehow get overlaid by a
-+ * dirent the two low bits of the hash version will be zero.  Therefore, the
-+ * hash version mod 4 should never be 0.  Sincerely, the paranoia department.
-+ */
-+
-+struct dx_root
-+{
-+      struct fake_dirent dot;
-+      char dot_name[4];
-+      struct fake_dirent dotdot;
-+      char dotdot_name[4];
-+      struct dx_root_info
-+      {
-+              le_u32 reserved_zero;
-+              u8 hash_version;
-+              u8 info_length; /* 8 */
-+              u8 indirect_levels;
-+              u8 unused_flags;
-+      }
-+      info;
-+      struct dx_entry entries[0];
-+};
-+
-+struct dx_node
-+{
-+      struct fake_dirent fake;
-+      struct dx_entry entries[0];
-+};
-+
-+
-+struct dx_frame
-+{
-+      struct buffer_head *bh;
-+      struct dx_entry *entries;
-+      struct dx_entry *at;
-+};
-+
-+struct dx_map_entry
-+{
-+      u32 hash;
-+      u32 offs;
-+};
-+
-+#ifdef CONFIG_EXT3_INDEX
-+static inline unsigned dx_get_block (struct dx_entry *entry);
-+static void dx_set_block (struct dx_entry *entry, unsigned value);
-+static inline unsigned dx_get_hash (struct dx_entry *entry);
-+static void dx_set_hash (struct dx_entry *entry, unsigned value);
-+static unsigned dx_get_count (struct dx_entry *entries);
-+static unsigned dx_get_limit (struct dx_entry *entries);
-+static void dx_set_count (struct dx_entry *entries, unsigned value);
-+static void dx_set_limit (struct dx_entry *entries, unsigned value);
-+static unsigned dx_root_limit (struct inode *dir, unsigned infosize);
-+static unsigned dx_node_limit (struct inode *dir);
-+static struct dx_frame *dx_probe(struct dentry *dentry,
-+                               struct inode *dir,
-+                               struct dx_hash_info *hinfo,
-+                               struct dx_frame *frame,
-+                               int *err);
-+static void dx_release (struct dx_frame *frames);
-+static int dx_make_map (struct ext3_dir_entry_2 *de, int size,
-+                      struct dx_hash_info *hinfo, struct dx_map_entry map[]);
-+static void dx_sort_map(struct dx_map_entry *map, unsigned count);
-+static struct ext3_dir_entry_2 *dx_move_dirents (char *from, char *to,
-+              struct dx_map_entry *offsets, int count);
-+static struct ext3_dir_entry_2* dx_pack_dirents (char *base, int size);
-+static void dx_insert_block (struct dx_frame *frame, u32 hash, u32 block);
-+static int ext3_htree_next_block(struct inode *dir, __u32 hash,
-+                               struct dx_frame *frame,
-+                               struct dx_frame *frames, int *err,
-+                               __u32 *start_hash);
-+static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
-+                     struct ext3_dir_entry_2 **res_dir, int *err);
-+static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry,
-+                           struct inode *inode);
-+
-+/*
-+ * Future: use high four bits of block for coalesce-on-delete flags
-+ * Mask them off for now.
-+ */
-+
-+static inline unsigned dx_get_block (struct dx_entry *entry)
-+{
-+      return le32_to_cpu(entry->block.v) & 0x00ffffff;
-+}
-+
-+static inline void dx_set_block (struct dx_entry *entry, unsigned value)
-+{
-+      entry->block.v = cpu_to_le32(value);
-+}
-+
-+static inline unsigned dx_get_hash (struct dx_entry *entry)
-+{
-+      return le32_to_cpu(entry->hash.v);
-+}
-+
-+static inline void dx_set_hash (struct dx_entry *entry, unsigned value)
-+{
-+      entry->hash.v = cpu_to_le32(value);
-+}
-+
-+static inline unsigned dx_get_count (struct dx_entry *entries)
-+{
-+      return le16_to_cpu(((struct dx_countlimit *) entries)->count.v);
-+}
-+
-+static inline unsigned dx_get_limit (struct dx_entry *entries)
-+{
-+      return le16_to_cpu(((struct dx_countlimit *) entries)->limit.v);
-+}
-+
-+static inline void dx_set_count (struct dx_entry *entries, unsigned value)
-+{
-+      ((struct dx_countlimit *) entries)->count.v = cpu_to_le16(value);
-+}
-+
-+static inline void dx_set_limit (struct dx_entry *entries, unsigned value)
-+{
-+      ((struct dx_countlimit *) entries)->limit.v = cpu_to_le16(value);
-+}
-+
-+static inline unsigned dx_root_limit (struct inode *dir, unsigned infosize)
-+{
-+      unsigned entry_space = dir->i_sb->s_blocksize - EXT3_DIR_REC_LEN(1) -
-+              EXT3_DIR_REC_LEN(2) - infosize;
-+      return 0? 20: entry_space / sizeof(struct dx_entry);
-+}
-+
-+static inline unsigned dx_node_limit (struct inode *dir)
-+{
-+      unsigned entry_space = dir->i_sb->s_blocksize - EXT3_DIR_REC_LEN(0);
-+      return 0? 22: entry_space / sizeof(struct dx_entry);
-+}
-+
-+/*
-+ * Debug
-+ */
-+#ifdef DX_DEBUG
-+struct stats
-+{ 
-+      unsigned names;
-+      unsigned space;
-+      unsigned bcount;
-+};
-+
-+static struct stats dx_show_leaf(struct dx_hash_info *hinfo, struct ext3_dir_entry_2 *de,
-+                               int size, int show_names)
-+{
-+      unsigned names = 0, space = 0;
-+      char *base = (char *) de;
-+      struct dx_hash_info h = *hinfo;
-+      
-+      printk("names: ");
-+      while ((char *) de < base + size)
-+      {
-+              if (de->inode)
-+              {
-+                      if (show_names)
-+                      {
-+                              int len = de->name_len;
-+                              char *name = de->name;
-+                              while (len--) printk("%c", *name++);
-+                              ext3fs_dirhash(de->name, de->name_len, &h);
-+                              printk(":%x.%u ", h.hash,
-+                                     ((char *) de - base));
-+                      }
-+                      space += EXT3_DIR_REC_LEN(de->name_len);
-+                      names++;
-+              }
-+              de = (struct ext3_dir_entry_2 *) ((char *) de + le16_to_cpu(de->rec_len));
-+      }
-+      printk("(%i)\n", names);
-+      return (struct stats) { names, space, 1 };
-+}
-+
-+struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir,
-+                           struct dx_entry *entries, int levels)
-+{
-+      unsigned blocksize = dir->i_sb->s_blocksize;
-+      unsigned count = dx_get_count (entries), names = 0, space = 0, i;
-+      unsigned bcount = 0;
-+      struct buffer_head *bh;
-+      int err;
-+      printk("%i indexed blocks...\n", count);
-+      for (i = 0; i < count; i++, entries++)
-+      {
-+              u32 block = dx_get_block(entries), hash = i? dx_get_hash(entries): 0;
-+              u32 range = i < count - 1? (dx_get_hash(entries + 1) - hash): ~hash;
-+              struct stats stats;
-+              printk("%s%3u:%03u hash %8x/%8x ",levels?"":"   ", i, block, hash, range);
-+              if (!(bh = ext3_bread (NULL,dir, block, 0,&err))) continue;
-+              stats = levels?
-+                 dx_show_entries(hinfo, dir, ((struct dx_node *) bh->b_data)->entries, levels - 1):
-+                 dx_show_leaf(hinfo, (struct ext3_dir_entry_2 *) bh->b_data, blocksize, 0);
-+              names += stats.names;
-+              space += stats.space;
-+              bcount += stats.bcount;
-+              brelse (bh);
-+      }
-+      if (bcount)
-+              printk("%snames %u, fullness %u (%u%%)\n", levels?"":"   ",
-+                      names, space/bcount,(space/bcount)*100/blocksize);
-+      return (struct stats) { names, space, bcount};
-+}
-+#endif /* DX_DEBUG */
-+
-+/*
-+ * Probe for a directory leaf block to search.
-+ *
-+ * dx_probe can return ERR_BAD_DX_DIR, which means there was a format
-+ * error in the directory index, and the caller should fall back to
-+ * searching the directory normally.  The callers of dx_probe **MUST**
-+ * check for this error code, and make sure it never gets reflected
-+ * back to userspace.
-+ */
-+static struct dx_frame *
-+dx_probe(struct dentry *dentry, struct inode *dir,
-+       struct dx_hash_info *hinfo, struct dx_frame *frame_in, int *err)
-+{
-+      unsigned count, indirect;
-+      struct dx_entry *at, *entries, *p, *q, *m;
-+      struct dx_root *root;
-+      struct buffer_head *bh;
-+      struct dx_frame *frame = frame_in;
-+      u32 hash;
-+
-+      frame->bh = NULL;
-+      if (dentry)
-+              dir = dentry->d_parent->d_inode;
-+      if (!(bh = ext3_bread (NULL,dir, 0, 0, err)))
-+              goto fail;
-+      root = (struct dx_root *) bh->b_data;
-+      if (root->info.hash_version != DX_HASH_TEA &&
-+          root->info.hash_version != DX_HASH_HALF_MD4 &&
-+          root->info.hash_version != DX_HASH_LEGACY) {
-+              ext3_warning(dir->i_sb, __FUNCTION__,
-+                           "Unrecognised inode hash code %d",
-+                           root->info.hash_version);
-+              brelse(bh);
-+              *err = ERR_BAD_DX_DIR;
-+              goto fail;
-+      }
-+      hinfo->hash_version = root->info.hash_version;
-+      hinfo->seed = dir->i_sb->u.ext3_sb.s_hash_seed;
-+      if (dentry)
-+              ext3fs_dirhash(dentry->d_name.name, dentry->d_name.len, hinfo);
-+      hash = hinfo->hash;
-+
-+      if (root->info.unused_flags & 1) {
-+              ext3_warning(dir->i_sb, __FUNCTION__,
-+                           "Unimplemented inode hash flags: %#06x",
-+                           root->info.unused_flags);
-+              brelse(bh);
-+              *err = ERR_BAD_DX_DIR;
-+              goto fail;
-+      }
-+
-+      if ((indirect = root->info.indirect_levels) > 1) {
-+              ext3_warning(dir->i_sb, __FUNCTION__,
-+                           "Unimplemented inode hash depth: %#06x",
-+                           root->info.indirect_levels);
-+              brelse(bh);
-+              *err = ERR_BAD_DX_DIR;
-+              goto fail;
-+      }
-+
-+      entries = (struct dx_entry *) (((char *)&root->info) +
-+                                     root->info.info_length);
-+      assert(dx_get_limit(entries) == dx_root_limit(dir,
-+                                                    root->info.info_length));
-+      dxtrace (printk("Look up %x", hash));
-+      while (1)
-+      {
-+              count = dx_get_count(entries);
-+              assert (count && count <= dx_get_limit(entries));
-+              p = entries + 1;
-+              q = entries + count - 1;
-+              while (p <= q)
-+              {
-+                      m = p + (q - p)/2;
-+                      dxtrace(printk("."));
-+                      if (dx_get_hash(m) > hash)
-+                              q = m - 1;
-+                      else
-+                              p = m + 1;
-+              }
-+
-+              if (0) // linear search cross check
-+              {
-+                      unsigned n = count - 1;
-+                      at = entries;
-+                      while (n--)
-+                      {
-+                              dxtrace(printk(","));
-+                              if (dx_get_hash(++at) > hash)
-+                              {
-+                                      at--;
-+                                      break;
-+                              }
-+                      }
-+                      assert (at == p - 1);
-+              }
-+
-+              at = p - 1;
-+              dxtrace(printk(" %x->%u\n", at == entries? 0: dx_get_hash(at), dx_get_block(at)));
-+              frame->bh = bh;
-+              frame->entries = entries;
-+              frame->at = at;
-+              if (!indirect--) return frame;
-+              if (!(bh = ext3_bread (NULL,dir, dx_get_block(at), 0, err)))
-+                      goto fail2;
-+              at = entries = ((struct dx_node *) bh->b_data)->entries;
-+              assert (dx_get_limit(entries) == dx_node_limit (dir));
-+              frame++;
-+      }
-+fail2:
-+      while (frame >= frame_in) {
-+              brelse(frame->bh);
-+              frame--;
-+      }
-+fail:
-+      return NULL;
-+}
-+
-+static void dx_release (struct dx_frame *frames)
-+{
-+      if (frames[0].bh == NULL)
-+              return;
-+
-+      if (((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels)
-+              brelse(frames[1].bh);
-+      brelse(frames[0].bh);
-+}
-+
-+/*
-+ * This function increments the frame pointer to search the next leaf
-+ * block, and reads in the necessary intervening nodes if the search
-+ * should be necessary.  Whether or not the search is necessary is
-+ * controlled by the hash parameter.  If the hash value is even, then
-+ * the search is only continued if the next block starts with that
-+ * hash value.  This is used if we are searching for a specific file.
-+ *
-+ * If the hash value is HASH_NB_ALWAYS, then always go to the next block.
-+ *
-+ * This function returns 1 if the caller should continue to search,
-+ * or 0 if it should not.  If there is an error reading one of the
-+ * index blocks, it will return -1.
-+ *
-+ * If start_hash is non-null, it will be filled in with the starting
-+ * hash of the next page.
-+ */
-+static int ext3_htree_next_block(struct inode *dir, __u32 hash,
-+                               struct dx_frame *frame,
-+                               struct dx_frame *frames, int *err,
-+                               __u32 *start_hash)
-+{
-+      struct dx_frame *p;
-+      struct buffer_head *bh;
-+      int num_frames = 0;
-+      __u32 bhash;
-+
-+      *err = ENOENT;
-+      p = frame;
-+      /*
-+       * Find the next leaf page by incrementing the frame pointer.
-+       * If we run out of entries in the interior node, loop around and
-+       * increment pointer in the parent node.  When we break out of
-+       * this loop, num_frames indicates the number of interior
-+       * nodes need to be read.
-+       */
-+      while (1) {
-+              if (++(p->at) < p->entries + dx_get_count(p->entries))
-+                      break;
-+              if (p == frames)
-+                      return 0;
-+              num_frames++;
-+              p--;
-+      }
-+
-+      /*
-+       * If the hash is 1, then continue only if the next page has a
-+       * continuation hash of any value.  This is used for readdir
-+       * handling.  Otherwise, check to see if the hash matches the
-+       * desired contiuation hash.  If it doesn't, return since
-+       * there's no point to read in the successive index pages.
-+       */
-+      bhash = dx_get_hash(p->at);
-+      if (start_hash)
-+              *start_hash = bhash;
-+      if ((hash & 1) == 0) {
-+              if ((bhash & ~1) != hash)
-+                      return 0;
-+      }
-+      /*
-+       * If the hash is HASH_NB_ALWAYS, we always go to the next
-+       * block so no check is necessary
-+       */
-+      while (num_frames--) {
-+              if (!(bh = ext3_bread(NULL, dir, dx_get_block(p->at),
-+                                    0, err)))
-+                      return -1; /* Failure */
-+              p++;
-+              brelse (p->bh);
-+              p->bh = bh;
-+              p->at = p->entries = ((struct dx_node *) bh->b_data)->entries;
-+      }
-+      return 1;
-+}
-+
-+
-+/*
-+ * p is at least 6 bytes before the end of page
-+ */
-+static inline struct ext3_dir_entry_2 *ext3_next_entry(struct ext3_dir_entry_2 *p)
-+{
-+      return (struct ext3_dir_entry_2 *)((char*)p + le16_to_cpu(p->rec_len));
-+}
-+
-+/*
-+ * This function fills a red-black tree with information from a
-+ * directory.  We start scanning the directory in hash order, starting
-+ * at start_hash and start_minor_hash.
-+ *
-+ * This function returns the number of entries inserted into the tree,
-+ * or a negative error code.
-+ */
-+int ext3_htree_fill_tree(struct file *dir_file, __u32 start_hash,
-+                       __u32 start_minor_hash, __u32 *next_hash)
-+{
-+      struct dx_hash_info hinfo;
-+      struct buffer_head *bh;
-+      struct ext3_dir_entry_2 *de, *top;
-+      static struct dx_frame frames[2], *frame;
-+      struct inode *dir;
-+      int block, err;
-+      int count = 0;
-+      int ret;
-+      __u32 hashval;
-+      
-+      dxtrace(printk("In htree_fill_tree, start hash: %x:%x\n", start_hash,
-+                     start_minor_hash));
-+      dir = dir_file->f_dentry->d_inode;
-+      hinfo.hash = start_hash;
-+      hinfo.minor_hash = 0;
-+      frame = dx_probe(0, dir_file->f_dentry->d_inode, &hinfo, frames, &err);
-+      if (!frame)
-+              return err;
-+
-+      /* Add '.' and '..' from the htree header */
-+      if (!start_hash && !start_minor_hash) {
-+              de = (struct ext3_dir_entry_2 *) frames[0].bh->b_data;
-+              if ((err = ext3_htree_store_dirent(dir_file, 0, 0, de)) != 0)
-+                      goto errout;
-+              de = ext3_next_entry(de);
-+              if ((err = ext3_htree_store_dirent(dir_file, 0, 0, de)) != 0)
-+                      goto errout;
-+              count += 2;
-+      }
-+
-+      while (1) {
-+              block = dx_get_block(frame->at);
-+              dxtrace(printk("Reading block %d\n", block));
-+              if (!(bh = ext3_bread (NULL, dir, block, 0, &err)))
-+                      goto errout;
-+      
-+              de = (struct ext3_dir_entry_2 *) bh->b_data;
-+              top = (struct ext3_dir_entry_2 *) ((char *) de + dir->i_sb->s_blocksize -
-+                                     EXT3_DIR_REC_LEN(0));
-+              for (; de < top; de = ext3_next_entry(de)) {
-+                      ext3fs_dirhash(de->name, de->name_len, &hinfo);
-+                      if ((hinfo.hash < start_hash) ||
-+                          ((hinfo.hash == start_hash) &&
-+                           (hinfo.minor_hash < start_minor_hash)))
-+                              continue;
-+                      if ((err = ext3_htree_store_dirent(dir_file,
-+                                 hinfo.hash, hinfo.minor_hash, de)) != 0)
-+                              goto errout;
-+                      count++;
-+              }
-+              brelse (bh);
-+              hashval = ~1;
-+              ret = ext3_htree_next_block(dir, HASH_NB_ALWAYS, 
-+                                          frame, frames, &err, &hashval);
-+              if (next_hash)
-+                      *next_hash = hashval;
-+              if (ret == -1)
-+                      goto errout;
-+              /*
-+               * Stop if:  (a) there are no more entries, or
-+               * (b) we have inserted at least one entry and the
-+               * next hash value is not a continuation
-+               */
-+              if ((ret == 0) ||
-+                  (count && ((hashval & 1) == 0)))
-+                      break;
-+      }
-+      dx_release(frames);
-+      dxtrace(printk("Fill tree: returned %d entries\n", count));
-+      return count;
-+errout:
-+      dx_release(frames);
-+      return (err);
-+}
-+
-+
-+/*
-+ * Directory block splitting, compacting
-+ */
-+
-+static int dx_make_map (struct ext3_dir_entry_2 *de, int size,
-+                      struct dx_hash_info *hinfo, struct dx_map_entry *map_tail)
-+{
-+      int count = 0;
-+      char *base = (char *) de;
-+      struct dx_hash_info h = *hinfo;
-+      
-+      while ((char *) de < base + size)
-+      {
-+              if (de->name_len && de->inode) {
-+                      ext3fs_dirhash(de->name, de->name_len, &h);
-+                      map_tail--;
-+                      map_tail->hash = h.hash;
-+                      map_tail->offs = (u32) ((char *) de - base);
-+                      count++;
-+              }
-+              /* XXX: do we need to check rec_len == 0 case? -Chris */
-+              de = (struct ext3_dir_entry_2 *) ((char *) de + le16_to_cpu(de->rec_len));
-+      }
-+      return count;
-+}
-+
-+static void dx_sort_map (struct dx_map_entry *map, unsigned count)
-+{
-+        struct dx_map_entry *p, *q, *top = map + count - 1;
-+        int more;
-+        /* Combsort until bubble sort doesn't suck */
-+        while (count > 2)
-+      {
-+                count = count*10/13;
-+                if (count - 9 < 2) /* 9, 10 -> 11 */
-+                        count = 11;
-+                for (p = top, q = p - count; q >= map; p--, q--)
-+                        if (p->hash < q->hash)
-+                                swap(*p, *q);
-+        }
-+        /* Garden variety bubble sort */
-+        do {
-+                more = 0;
-+                q = top;
-+                while (q-- > map)
-+              {
-+                        if (q[1].hash >= q[0].hash)
-+                              continue;
-+                        swap(*(q+1), *q);
-+                        more = 1;
-+              }
-+      } while(more);
-+}
-+
-+static void dx_insert_block(struct dx_frame *frame, u32 hash, u32 block)
-+{
-+      struct dx_entry *entries = frame->entries;
-+      struct dx_entry *old = frame->at, *new = old + 1;
-+      int count = dx_get_count(entries);
-+
-+      assert(count < dx_get_limit(entries));
-+      assert(old < entries + count);
-+      memmove(new + 1, new, (char *)(entries + count) - (char *)(new));
-+      dx_set_hash(new, hash);
-+      dx_set_block(new, block);
-+      dx_set_count(entries, count + 1);
-+}
-+#endif
-+
-+
-+static void ext3_update_dx_flag(struct inode *inode)
-+{
-+      if (!EXT3_HAS_COMPAT_FEATURE(inode->i_sb,
-+                                   EXT3_FEATURE_COMPAT_DIR_INDEX))
-+              EXT3_I(inode)->i_flags &= ~EXT3_INDEX_FL;
-+}
-+
- /*
-  * NOTE! unlike strncmp, ext3_match returns 1 for success, 0 for failure.
-  *
-@@ -94,6 +736,7 @@
-       return 0;
- }
-+
- /*
-  *    ext3_find_entry()
-  *
-@@ -105,6 +748,8 @@
-  * The returned buffer_head has ->b_count elevated.  The caller is expected
-  * to brelse() it when appropriate.
-  */
-+
-+      
- static struct buffer_head * ext3_find_entry (struct dentry *dentry,
-                                       struct ext3_dir_entry_2 ** res_dir)
- {
-@@ -119,12 +764,32 @@
-       int num = 0;
-       int nblocks, i, err;
-       struct inode *dir = dentry->d_parent->d_inode;
-+      int namelen;
-+      const u8 *name;
-+      unsigned blocksize;
-       *res_dir = NULL;
-       sb = dir->i_sb;
--
-+      blocksize = sb->s_blocksize;
-+      namelen = dentry->d_name.len;
-+      name = dentry->d_name.name;
-+      if (namelen > EXT3_NAME_LEN)
-+              return NULL;
-+#ifdef CONFIG_EXT3_INDEX
-+      if (is_dx(dir)) {
-+              bh = ext3_dx_find_entry(dentry, res_dir, &err);
-+              /*
-+               * On success, or if the error was file not found,
-+               * return.  Otherwise, fall back to doing a search the
-+               * old fashioned way.
-+               */
-+              if (bh || (err != ERR_BAD_DX_DIR))
-+                      return bh;
-+              dxtrace(printk("ext3_find_entry: dx failed, falling back\n"));
-+      }
-+#endif
-       nblocks = dir->i_size >> EXT3_BLOCK_SIZE_BITS(sb);
--      start = dir->u.ext3_i.i_dir_start_lookup;
-+      start = EXT3_I(dir)->i_dir_start_lookup;
-       if (start >= nblocks)
-               start = 0;
-       block = start;
-@@ -165,7 +830,7 @@
-               i = search_dirblock(bh, dir, dentry,
-                           block << EXT3_BLOCK_SIZE_BITS(sb), res_dir);
-               if (i == 1) {
--                      dir->u.ext3_i.i_dir_start_lookup = block;
-+                      EXT3_I(dir)->i_dir_start_lookup = block;
-                       ret = bh;
-                       goto cleanup_and_exit;
-               } else {
-@@ -196,6 +861,66 @@
-       return ret;
- }
-+#ifdef CONFIG_EXT3_INDEX
-+static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
-+                     struct ext3_dir_entry_2 **res_dir, int *err)
-+{
-+      struct super_block * sb;
-+      struct dx_hash_info     hinfo;
-+      u32 hash;
-+      struct dx_frame frames[2], *frame;
-+      struct ext3_dir_entry_2 *de, *top;
-+      struct buffer_head *bh;
-+      unsigned long block;
-+      int retval;
-+      int namelen = dentry->d_name.len;
-+      const u8 *name = dentry->d_name.name;
-+      struct inode *dir = dentry->d_parent->d_inode;
-+      
-+      sb = dir->i_sb;
-+      if (!(frame = dx_probe (dentry, 0, &hinfo, frames, err)))
-+              return NULL;
-+      hash = hinfo.hash;
-+      do {
-+              block = dx_get_block(frame->at);
-+              if (!(bh = ext3_bread (NULL,dir, block, 0, err)))
-+                      goto errout;
-+              de = (struct ext3_dir_entry_2 *) bh->b_data;
-+              top = (struct ext3_dir_entry_2 *) ((char *) de + sb->s_blocksize -
-+                                     EXT3_DIR_REC_LEN(0));
-+              for (; de < top; de = ext3_next_entry(de))
-+              if (ext3_match (namelen, name, de)) {
-+                      if (!ext3_check_dir_entry("ext3_find_entry",
-+                                                dir, de, bh,
-+                                (block<<EXT3_BLOCK_SIZE_BITS(sb))
-+                                        +((char *)de - bh->b_data))) {
-+                              brelse (bh);
-+                              goto errout;
-+                      }
-+                      *res_dir = de;
-+                      dx_release (frames);
-+                      return bh;
-+              }
-+              brelse (bh);
-+              /* Check to see if we should continue to search */
-+              retval = ext3_htree_next_block(dir, hash, frame,
-+                                             frames, err, 0);
-+              if (retval == -1) {
-+                      ext3_warning(sb, __FUNCTION__,
-+                           "error reading index page in directory #%lu",
-+                           dir->i_ino);
-+                      goto errout;
-+              }
-+      } while (retval == 1);
-+      
-+      *err = -ENOENT;
-+errout:
-+      dxtrace(printk("%s not found\n", name));
-+      dx_release (frames);
-+      return NULL;
-+}
-+#endif
-+
- static struct dentry *ext3_lookup(struct inode * dir, struct dentry *dentry)
- {
-       struct inode * inode;
-@@ -212,8 +937,9 @@
-               brelse (bh);
-               inode = iget(dir->i_sb, ino);
--              if (!inode)
-+              if (!inode) {
-                       return ERR_PTR(-EACCES);
-+              }
-       }
-       d_add(dentry, inode);
-       return NULL;
-@@ -237,6 +963,301 @@
-               de->file_type = ext3_type_by_mode[(mode & S_IFMT)>>S_SHIFT];
- }
-+#ifdef CONFIG_EXT3_INDEX
-+static struct ext3_dir_entry_2 *
-+dx_move_dirents(char *from, char *to, struct dx_map_entry *map, int count)
-+{
-+      unsigned rec_len = 0;
-+
-+      while (count--) {
-+              struct ext3_dir_entry_2 *de = (struct ext3_dir_entry_2 *) (from + map->offs);
-+              rec_len = EXT3_DIR_REC_LEN(de->name_len);
-+              memcpy (to, de, rec_len);
-+              ((struct ext3_dir_entry_2 *)to)->rec_len = cpu_to_le16(rec_len);
-+              de->inode = 0;
-+              map++;
-+              to += rec_len;
-+      }
-+      return (struct ext3_dir_entry_2 *) (to - rec_len);
-+}
-+
-+static struct ext3_dir_entry_2* dx_pack_dirents(char *base, int size)
-+{
-+      struct ext3_dir_entry_2 *next, *to, *prev, *de = (struct ext3_dir_entry_2 *) base;
-+      unsigned rec_len = 0;
-+
-+      prev = to = de;
-+      while ((char*)de < base + size) {
-+              next = (struct ext3_dir_entry_2 *) ((char *) de +
-+                                                  le16_to_cpu(de->rec_len));
-+              if (de->inode && de->name_len) {
-+                      rec_len = EXT3_DIR_REC_LEN(de->name_len);
-+                      if (de > to)
-+                              memmove(to, de, rec_len);
-+                      to->rec_len = cpu_to_le16(rec_len);
-+                      prev = to;
-+                      to = (struct ext3_dir_entry_2 *)((char *)to + rec_len);
-+              }
-+              de = next;
-+      }
-+      return prev;
-+}
-+
-+static struct ext3_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
-+                      struct buffer_head **bh,struct dx_frame *frame,
-+                      struct dx_hash_info *hinfo, int *error)
-+{
-+      unsigned blocksize = dir->i_sb->s_blocksize;
-+      unsigned count, continued;
-+      struct buffer_head *bh2;
-+      u32 newblock;
-+      u32 hash2;
-+      struct dx_map_entry *map;
-+      char *data1 = (*bh)->b_data, *data2;
-+      unsigned split;
-+      struct ext3_dir_entry_2 *de = NULL, *de2;
-+      int     err;
-+
-+      bh2 = ext3_append (handle, dir, &newblock, error);
-+      if (!(bh2)) {
-+              brelse(*bh);
-+              *bh = NULL;
-+              goto errout;
-+      }
-+
-+      BUFFER_TRACE(*bh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, *bh);
-+      if (err) {
-+      journal_error:
-+              brelse(*bh);
-+              brelse(bh2);
-+              *bh = NULL;
-+              ext3_std_error(dir->i_sb, err);
-+              goto errout;
-+      }
-+      BUFFER_TRACE(frame->bh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, frame->bh);
-+      if (err)
-+              goto journal_error;
-+
-+      data2 = bh2->b_data;
-+
-+      /* create map in the end of data2 block */
-+      map = (struct dx_map_entry *) (data2 + blocksize);
-+      count = dx_make_map ((struct ext3_dir_entry_2 *) data1,
-+                           blocksize, hinfo, map);
-+      map -= count;
-+      split = count/2; // need to adjust to actual middle
-+      dx_sort_map (map, count);
-+      hash2 = map[split].hash;
-+      continued = hash2 == map[split - 1].hash;
-+      dxtrace(printk("Split block %i at %x, %i/%i\n",
-+              dx_get_block(frame->at), hash2, split, count-split));
-+
-+      /* Fancy dance to stay within two buffers */
-+      de2 = dx_move_dirents(data1, data2, map + split, count - split);
-+      de = dx_pack_dirents(data1,blocksize);
-+      de->rec_len = cpu_to_le16(data1 + blocksize - (char *) de);
-+      de2->rec_len = cpu_to_le16(data2 + blocksize - (char *) de2);
-+      dxtrace(dx_show_leaf (hinfo, (struct ext3_dir_entry_2 *) data1, blocksize, 1));
-+      dxtrace(dx_show_leaf (hinfo, (struct ext3_dir_entry_2 *) data2, blocksize, 1));
-+
-+      /* Which block gets the new entry? */
-+      if (hinfo->hash >= hash2)
-+      {
-+              swap(*bh, bh2);
-+              de = de2;
-+      }
-+      dx_insert_block (frame, hash2 + continued, newblock);
-+      err = ext3_journal_dirty_metadata (handle, bh2);
-+      if (err)
-+              goto journal_error;
-+      err = ext3_journal_dirty_metadata (handle, frame->bh);
-+      if (err)
-+              goto journal_error;
-+      brelse (bh2);
-+      dxtrace(dx_show_index ("frame", frame->entries));
-+errout:
-+      return de;
-+}
-+#endif
-+
-+
-+/*
-+ * Add a new entry into a directory (leaf) block.  If de is non-NULL,
-+ * it points to a directory entry which is guaranteed to be large
-+ * enough for new directory entry.  If de is NULL, then
-+ * add_dirent_to_buf will attempt search the directory block for
-+ * space.  It will return -ENOSPC if no space is available, and -EIO
-+ * and -EEXIST if directory entry already exists.
-+ * 
-+ * NOTE!  bh is NOT released in the case where ENOSPC is returned.  In
-+ * all other cases bh is released.
-+ */
-+static int add_dirent_to_buf(handle_t *handle, struct dentry *dentry,
-+                           struct inode *inode, struct ext3_dir_entry_2 *de,
-+                           struct buffer_head * bh)
-+{
-+      struct inode    *dir = dentry->d_parent->d_inode;
-+      const char      *name = dentry->d_name.name;
-+      int             namelen = dentry->d_name.len;
-+      unsigned long   offset = 0;
-+      unsigned short  reclen;
-+      int             nlen, rlen, err;
-+      char            *top;
-+      
-+      reclen = EXT3_DIR_REC_LEN(namelen);
-+      if (!de) {
-+              de = (struct ext3_dir_entry_2 *)bh->b_data;
-+              top = bh->b_data + dir->i_sb->s_blocksize - reclen;
-+              while ((char *) de <= top) {
-+                      if (!ext3_check_dir_entry("ext3_add_entry", dir, de,
-+                                                bh, offset)) {
-+                              brelse (bh);
-+                              return -EIO;
-+                      }
-+                      if (ext3_match (namelen, name, de)) {
-+                              brelse (bh);
-+                              return -EEXIST;
-+                      }
-+                      nlen = EXT3_DIR_REC_LEN(de->name_len);
-+                      rlen = le16_to_cpu(de->rec_len);
-+                      if ((de->inode? rlen - nlen: rlen) >= reclen)
-+                              break;
-+                      de = (struct ext3_dir_entry_2 *)((char *)de + rlen);
-+                      offset += rlen;
-+              }
-+              if ((char *) de > top)
-+                      return -ENOSPC;
-+      }
-+      BUFFER_TRACE(bh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, bh);
-+      if (err) {
-+              ext3_std_error(dir->i_sb, err);
-+              brelse(bh);
-+              return err;
-+      }
-+      
-+      /* By now the buffer is marked for journaling */
-+      nlen = EXT3_DIR_REC_LEN(de->name_len);
-+      rlen = le16_to_cpu(de->rec_len);
-+      if (de->inode) {
-+              struct ext3_dir_entry_2 *de1 = (struct ext3_dir_entry_2 *)((char *)de + nlen);
-+              de1->rec_len = cpu_to_le16(rlen - nlen);
-+              de->rec_len = cpu_to_le16(nlen);
-+              de = de1;
-+      }
-+      de->file_type = EXT3_FT_UNKNOWN;
-+      if (inode) {
-+              de->inode = cpu_to_le32(inode->i_ino);
-+              ext3_set_de_type(dir->i_sb, de, inode->i_mode);
-+      } else
-+              de->inode = 0;
-+      de->name_len = namelen;
-+      memcpy (de->name, name, namelen);
-+      /*
-+       * XXX shouldn't update any times until successful
-+       * completion of syscall, but too many callers depend
-+       * on this.
-+       *
-+       * XXX similarly, too many callers depend on
-+       * ext3_new_inode() setting the times, but error
-+       * recovery deletes the inode, so the worst that can
-+       * happen is that the times are slightly out of date
-+       * and/or different from the directory change time.
-+       */
-+      dir->i_mtime = dir->i_ctime = CURRENT_TIME;
-+      ext3_update_dx_flag(dir);
-+      dir->i_version = ++event;
-+      ext3_mark_inode_dirty(handle, dir);
-+      BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-+      err = ext3_journal_dirty_metadata(handle, bh);
-+      if (err)
-+              ext3_std_error(dir->i_sb, err);
-+      brelse(bh);
-+      return 0;
-+}
-+
-+#ifdef CONFIG_EXT3_INDEX
-+/*
-+ * This converts a one block unindexed directory to a 3 block indexed
-+ * directory, and adds the dentry to the indexed directory.
-+ */
-+static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
-+                          struct inode *inode, struct buffer_head *bh)
-+{
-+      struct inode    *dir = dentry->d_parent->d_inode;
-+      const char      *name = dentry->d_name.name;
-+      int             namelen = dentry->d_name.len;
-+      struct buffer_head *bh2;
-+      struct dx_root  *root;
-+      struct dx_frame frames[2], *frame;
-+      struct dx_entry *entries;
-+      struct ext3_dir_entry_2 *de, *de2;
-+      char            *data1, *top;
-+      unsigned        len;
-+      int             retval;
-+      unsigned        blocksize;
-+      struct dx_hash_info hinfo;
-+      u32             block;
-+              
-+      blocksize =  dir->i_sb->s_blocksize;
-+      dxtrace(printk("Creating index\n"));
-+      retval = ext3_journal_get_write_access(handle, bh);
-+      if (retval) {
-+              ext3_std_error(dir->i_sb, retval);
-+              brelse(bh);
-+              return retval;
-+      }
-+      root = (struct dx_root *) bh->b_data;
-+              
-+      EXT3_I(dir)->i_flags |= EXT3_INDEX_FL;
-+      bh2 = ext3_append (handle, dir, &block, &retval);
-+      if (!(bh2)) {
-+              brelse(bh);
-+              return retval;
-+      }
-+      data1 = bh2->b_data;
-+
-+      /* The 0th block becomes the root, move the dirents out */
-+      de = (struct ext3_dir_entry_2 *)&root->dotdot;
-+      de = (struct ext3_dir_entry_2 *)((char *)de + le16_to_cpu(de->rec_len));
-+      len = ((char *) root) + blocksize - (char *) de;
-+      memcpy (data1, de, len);
-+      de = (struct ext3_dir_entry_2 *) data1;
-+      top = data1 + len;
-+      while (((char *) de2=(char*)de+le16_to_cpu(de->rec_len)) < top)
-+              de = de2;
-+      de->rec_len = cpu_to_le16(data1 + blocksize - (char *) de);
-+      /* Initialize the root; the dot dirents already exist */
-+      de = (struct ext3_dir_entry_2 *) (&root->dotdot);
-+      de->rec_len = cpu_to_le16(blocksize - EXT3_DIR_REC_LEN(2));
-+      memset (&root->info, 0, sizeof(root->info));
-+      root->info.info_length = sizeof(root->info);
-+      root->info.hash_version = dir->i_sb->u.ext3_sb.s_def_hash_version;
-+      entries = root->entries;
-+      dx_set_block (entries, 1);
-+      dx_set_count (entries, 1);
-+      dx_set_limit (entries, dx_root_limit(dir, sizeof(root->info)));
-+
-+      /* Initialize as for dx_probe */
-+      hinfo.hash_version = root->info.hash_version;
-+      hinfo.seed = dir->i_sb->u.ext3_sb.s_hash_seed;
-+      ext3fs_dirhash(name, namelen, &hinfo);
-+      frame = frames;
-+      frame->entries = entries;
-+      frame->at = entries;
-+      frame->bh = bh;
-+      bh = bh2;
-+      de = do_split(handle,dir, &bh, frame, &hinfo, &retval);
-+      dx_release (frames);
-+      if (!(de))
-+              return retval;
-+
-+      return add_dirent_to_buf(handle, dentry, inode, de, bh);
-+}
-+#endif
-+
- /*
-  *    ext3_add_entry()
-  *
-@@ -247,127 +1268,198 @@
-  * may not sleep between calling this and putting something into
-  * the entry, as someone else might have used it while you slept.
-  */
--
--/*
-- * AKPM: the journalling code here looks wrong on the error paths
-- */
- static int ext3_add_entry (handle_t *handle, struct dentry *dentry,
-       struct inode *inode)
- {
-       struct inode *dir = dentry->d_parent->d_inode;
--      const char *name = dentry->d_name.name;
--      int namelen = dentry->d_name.len;
-       unsigned long offset;
--      unsigned short rec_len;
-       struct buffer_head * bh;
--      struct ext3_dir_entry_2 * de, * de1;
-+      struct ext3_dir_entry_2 *de;
-       struct super_block * sb;
-       int     retval;
-+#ifdef CONFIG_EXT3_INDEX
-+      int     dx_fallback=0;
-+#endif
-+      unsigned blocksize;
-+      unsigned nlen, rlen;
-+      u32 block, blocks;
-       sb = dir->i_sb;
--
--      if (!namelen)
-+      blocksize = sb->s_blocksize;
-+      if (!dentry->d_name.len)
-               return -EINVAL;
--      bh = ext3_bread (handle, dir, 0, 0, &retval);
-+#ifdef CONFIG_EXT3_INDEX
-+      if (is_dx(dir)) {
-+              retval = ext3_dx_add_entry(handle, dentry, inode);
-+              if (!retval || (retval != ERR_BAD_DX_DIR))
-+                      return retval;
-+              EXT3_I(dir)->i_flags &= ~EXT3_INDEX_FL;
-+              dx_fallback++;
-+              ext3_mark_inode_dirty(handle, dir);
-+      }
-+#endif
-+      blocks = dir->i_size >> sb->s_blocksize_bits;
-+      for (block = 0, offset = 0; block < blocks; block++) {
-+              bh = ext3_bread(handle, dir, block, 0, &retval);
-+              if(!bh)
-+                      return retval;
-+              retval = add_dirent_to_buf(handle, dentry, inode, 0, bh);
-+              if (retval != -ENOSPC)
-+                      return retval;
-+
-+#ifdef CONFIG_EXT3_INDEX
-+              if (blocks == 1 && !dx_fallback &&
-+                  EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_DIR_INDEX))
-+                      return make_indexed_dir(handle, dentry, inode, bh);
-+#endif
-+              brelse(bh);
-+      }
-+      bh = ext3_append(handle, dir, &block, &retval);
-       if (!bh)
-               return retval;
--      rec_len = EXT3_DIR_REC_LEN(namelen);
--      offset = 0;
-       de = (struct ext3_dir_entry_2 *) bh->b_data;
--      while (1) {
--              if ((char *)de >= sb->s_blocksize + bh->b_data) {
--                      brelse (bh);
--                      bh = NULL;
--                      bh = ext3_bread (handle, dir,
--                              offset >> EXT3_BLOCK_SIZE_BITS(sb), 1, &retval);
--                      if (!bh)
--                              return retval;
--                      if (dir->i_size <= offset) {
--                              if (dir->i_size == 0) {
--                                      brelse(bh);
--                                      return -ENOENT;
--                              }
-+      de->inode = 0;
-+      de->rec_len = cpu_to_le16(rlen = blocksize);
-+      nlen = 0;
-+      return add_dirent_to_buf(handle, dentry, inode, de, bh);
-+}
--                              ext3_debug ("creating next block\n");
-+#ifdef CONFIG_EXT3_INDEX
-+/*
-+ * Returns 0 for success, or a negative error value
-+ */
-+static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry,
-+                           struct inode *inode)
-+{
-+      struct dx_frame frames[2], *frame;
-+      struct dx_entry *entries, *at;
-+      struct dx_hash_info hinfo;
-+      struct buffer_head * bh;
-+      struct inode *dir = dentry->d_parent->d_inode;
-+      struct super_block * sb = dir->i_sb;
-+      struct ext3_dir_entry_2 *de;
-+      int err;
--                              BUFFER_TRACE(bh, "get_write_access");
--                              ext3_journal_get_write_access(handle, bh);
--                              de = (struct ext3_dir_entry_2 *) bh->b_data;
--                              de->inode = 0;
--                              de->rec_len = le16_to_cpu(sb->s_blocksize);
--                              dir->u.ext3_i.i_disksize =
--                                      dir->i_size = offset + sb->s_blocksize;
--                              dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
--                              ext3_mark_inode_dirty(handle, dir);
--                      } else {
-+      frame = dx_probe(dentry, 0, &hinfo, frames, &err);
-+      if (!frame)
-+              return err;
-+      entries = frame->entries;
-+      at = frame->at;
--                              ext3_debug ("skipping to next block\n");
-+      if (!(bh = ext3_bread(handle,dir, dx_get_block(frame->at), 0, &err)))
-+              goto cleanup;
--                              de = (struct ext3_dir_entry_2 *) bh->b_data;
--                      }
--              }
--              if (!ext3_check_dir_entry ("ext3_add_entry", dir, de, bh,
--                                         offset)) {
--                      brelse (bh);
--                      return -ENOENT;
--              }
--              if (ext3_match (namelen, name, de)) {
--                              brelse (bh);
--                              return -EEXIST;
-+      BUFFER_TRACE(bh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, bh);
-+      if (err)
-+              goto journal_error;
-+
-+      err = add_dirent_to_buf(handle, dentry, inode, 0, bh);
-+      if (err != -ENOSPC) {
-+              bh = 0;
-+              goto cleanup;
-+      }
-+
-+      /* Block full, should compress but for now just split */
-+      dxtrace(printk("using %u of %u node entries\n",
-+                     dx_get_count(entries), dx_get_limit(entries)));
-+      /* Need to split index? */
-+      if (dx_get_count(entries) == dx_get_limit(entries)) {
-+              u32 newblock;
-+              unsigned icount = dx_get_count(entries);
-+              int levels = frame - frames;
-+              struct dx_entry *entries2;
-+              struct dx_node *node2;
-+              struct buffer_head *bh2;
-+
-+              if (levels && (dx_get_count(frames->entries) ==
-+                             dx_get_limit(frames->entries))) {
-+                      ext3_warning(sb, __FUNCTION__,
-+                                   "Directory index full!\n");
-+                      err = -ENOSPC;
-+                      goto cleanup;
-               }
--              if ((le32_to_cpu(de->inode) == 0 &&
--                              le16_to_cpu(de->rec_len) >= rec_len) ||
--                  (le16_to_cpu(de->rec_len) >=
--                              EXT3_DIR_REC_LEN(de->name_len) + rec_len)) {
--                      BUFFER_TRACE(bh, "get_write_access");
--                      ext3_journal_get_write_access(handle, bh);
--                      /* By now the buffer is marked for journaling */
--                      offset += le16_to_cpu(de->rec_len);
--                      if (le32_to_cpu(de->inode)) {
--                              de1 = (struct ext3_dir_entry_2 *) ((char *) de +
--                                      EXT3_DIR_REC_LEN(de->name_len));
--                              de1->rec_len =
--                                      cpu_to_le16(le16_to_cpu(de->rec_len) -
--                                      EXT3_DIR_REC_LEN(de->name_len));
--                              de->rec_len = cpu_to_le16(
--                                              EXT3_DIR_REC_LEN(de->name_len));
--                              de = de1;
-+              bh2 = ext3_append (handle, dir, &newblock, &err);
-+              if (!(bh2))
-+                      goto cleanup;
-+              node2 = (struct dx_node *)(bh2->b_data);
-+              entries2 = node2->entries;
-+              node2->fake.rec_len = cpu_to_le16(sb->s_blocksize);
-+              node2->fake.inode = 0;
-+              BUFFER_TRACE(frame->bh, "get_write_access");
-+              err = ext3_journal_get_write_access(handle, frame->bh);
-+              if (err)
-+                      goto journal_error;
-+              if (levels) {
-+                      unsigned icount1 = icount/2, icount2 = icount - icount1;
-+                      unsigned hash2 = dx_get_hash(entries + icount1);
-+                      dxtrace(printk("Split index %i/%i\n", icount1, icount2));
-+                              
-+                      BUFFER_TRACE(frame->bh, "get_write_access"); /* index root */
-+                      err = ext3_journal_get_write_access(handle,
-+                                                           frames[0].bh);
-+                      if (err)
-+                              goto journal_error;
-+                              
-+                      memcpy ((char *) entries2, (char *) (entries + icount1),
-+                              icount2 * sizeof(struct dx_entry));
-+                      dx_set_count (entries, icount1);
-+                      dx_set_count (entries2, icount2);
-+                      dx_set_limit (entries2, dx_node_limit(dir));
-+
-+                      /* Which index block gets the new entry? */
-+                      if (at - entries >= icount1) {
-+                              frame->at = at = at - entries - icount1 + entries2;
-+                              frame->entries = entries = entries2;
-+                              swap(frame->bh, bh2);
-                       }
--                      de->file_type = EXT3_FT_UNKNOWN;
--                      if (inode) {
--                              de->inode = cpu_to_le32(inode->i_ino);
--                              ext3_set_de_type(dir->i_sb, de, inode->i_mode);
--                      } else
--                              de->inode = 0;
--                      de->name_len = namelen;
--                      memcpy (de->name, name, namelen);
--                      /*
--                       * XXX shouldn't update any times until successful
--                       * completion of syscall, but too many callers depend
--                       * on this.
--                       *
--                       * XXX similarly, too many callers depend on
--                       * ext3_new_inode() setting the times, but error
--                       * recovery deletes the inode, so the worst that can
--                       * happen is that the times are slightly out of date
--                       * and/or different from the directory change time.
--                       */
--                      dir->i_mtime = dir->i_ctime = CURRENT_TIME;
--                      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
--                      ext3_mark_inode_dirty(handle, dir);
--                      dir->i_version = ++event;
--                      BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
--                      ext3_journal_dirty_metadata(handle, bh);
--                      brelse(bh);
--                      return 0;
-+                      dx_insert_block (frames + 0, hash2, newblock);
-+                      dxtrace(dx_show_index ("node", frames[1].entries));
-+                      dxtrace(dx_show_index ("node",
-+                             ((struct dx_node *) bh2->b_data)->entries));
-+                      err = ext3_journal_dirty_metadata(handle, bh2);
-+                      if (err)
-+                              goto journal_error;
-+                      brelse (bh2);
-+              } else {
-+                      dxtrace(printk("Creating second level index...\n"));
-+                      memcpy((char *) entries2, (char *) entries,
-+                             icount * sizeof(struct dx_entry));
-+                      dx_set_limit(entries2, dx_node_limit(dir));
-+
-+                      /* Set up root */
-+                      dx_set_count(entries, 1);
-+                      dx_set_block(entries + 0, newblock);
-+                      ((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels = 1;
-+
-+                      /* Add new access path frame */
-+                      frame = frames + 1;
-+                      frame->at = at = at - entries + entries2;
-+                      frame->entries = entries = entries2;
-+                      frame->bh = bh2;
-+                      err = ext3_journal_get_write_access(handle,
-+                                                           frame->bh);
-+                      if (err)
-+                              goto journal_error;
-               }
--              offset += le16_to_cpu(de->rec_len);
--              de = (struct ext3_dir_entry_2 *)
--                      ((char *) de + le16_to_cpu(de->rec_len));
-+              ext3_journal_dirty_metadata(handle, frames[0].bh);
-       }
--      brelse (bh);
--      return -ENOSPC;
-+      de = do_split(handle, dir, &bh, frame, &hinfo, &err);
-+      if (!de)
-+              goto cleanup;
-+      err = add_dirent_to_buf(handle, dentry, inode, de, bh);
-+      bh = 0;
-+      goto cleanup;
-+      
-+journal_error:
-+      ext3_std_error(dir->i_sb, err);
-+cleanup:
-+      if (bh)
-+              brelse(bh);
-+      dx_release(frames);
-+      return err;
- }
-+#endif
- /*
-  * ext3_delete_entry deletes a directory entry by merging it with the
-@@ -451,9 +1543,11 @@
-       struct inode * inode;
-       int err;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -478,9 +1572,11 @@
-       struct inode *inode;
-       int err;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -507,9 +1603,11 @@
-       if (dir->i_nlink >= EXT3_LINK_MAX)
-               return -EMLINK;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -521,7 +1619,7 @@
-       inode->i_op = &ext3_dir_inode_operations;
-       inode->i_fop = &ext3_dir_operations;
--      inode->i_size = inode->u.ext3_i.i_disksize = inode->i_sb->s_blocksize;
-+      inode->i_size = EXT3_I(inode)->i_disksize = inode->i_sb->s_blocksize;
-       inode->i_blocks = 0;    
-       dir_block = ext3_bread (handle, inode, 0, 1, &err);
-       if (!dir_block) {
-@@ -554,21 +1652,19 @@
-               inode->i_mode |= S_ISGID;
-       ext3_mark_inode_dirty(handle, inode);
-       err = ext3_add_entry (handle, dentry, inode);
--      if (err)
--              goto out_no_entry;
-+      if (err) {
-+              inode->i_nlink = 0;
-+              ext3_mark_inode_dirty(handle, inode);
-+              iput (inode);
-+              goto out_stop;
-+      }
-       dir->i_nlink++;
--      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(dir);
-       ext3_mark_inode_dirty(handle, dir);
-       d_instantiate(dentry, inode);
- out_stop:
-       ext3_journal_stop(handle, dir);
-       return err;
--
--out_no_entry:
--      inode->i_nlink = 0;
--      ext3_mark_inode_dirty(handle, inode);
--      iput (inode);
--      goto out_stop;
- }
- /*
-@@ -655,7 +1751,7 @@
-       int err = 0, rc;
-       
-       lock_super(sb);
--      if (!list_empty(&inode->u.ext3_i.i_orphan))
-+      if (!list_empty(&EXT3_I(inode)->i_orphan))
-               goto out_unlock;
-       /* Orphan handling is only valid for files with data blocks
-@@ -696,7 +1792,7 @@
-        * This is safe: on error we're going to ignore the orphan list
-        * anyway on the next recovery. */
-       if (!err)
--              list_add(&inode->u.ext3_i.i_orphan, &EXT3_SB(sb)->s_orphan);
-+              list_add(&EXT3_I(inode)->i_orphan, &EXT3_SB(sb)->s_orphan);
-       jbd_debug(4, "superblock will point to %ld\n", inode->i_ino);
-       jbd_debug(4, "orphan inode %ld will point to %d\n",
-@@ -714,25 +1810,26 @@
- int ext3_orphan_del(handle_t *handle, struct inode *inode)
- {
-       struct list_head *prev;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       struct ext3_sb_info *sbi;
-       ino_t ino_next; 
-       struct ext3_iloc iloc;
-       int err = 0;
-       
-       lock_super(inode->i_sb);
--      if (list_empty(&inode->u.ext3_i.i_orphan)) {
-+      if (list_empty(&ei->i_orphan)) {
-               unlock_super(inode->i_sb);
-               return 0;
-       }
-       ino_next = NEXT_ORPHAN(inode);
--      prev = inode->u.ext3_i.i_orphan.prev;
-+      prev = ei->i_orphan.prev;
-       sbi = EXT3_SB(inode->i_sb);
-       jbd_debug(4, "remove inode %ld from orphan list\n", inode->i_ino);
--      list_del(&inode->u.ext3_i.i_orphan);
--      INIT_LIST_HEAD(&inode->u.ext3_i.i_orphan);
-+      list_del(&ei->i_orphan);
-+      INIT_LIST_HEAD(&ei->i_orphan);
-       /* If we're on an error path, we may not have a valid
-        * transaction handle with which to update the orphan list on
-@@ -793,8 +1890,9 @@
-       handle_t *handle;
-       handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS);
--      if (IS_ERR(handle))
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       retval = -ENOENT;
-       bh = ext3_find_entry (dentry, &de);
-@@ -832,7 +1930,7 @@
-       ext3_mark_inode_dirty(handle, inode);
-       dir->i_nlink--;
-       inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
--      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(dir);
-       ext3_mark_inode_dirty(handle, dir);
- end_rmdir:
-@@ -850,8 +1948,9 @@
-       handle_t *handle;
-       handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS);
--      if (IS_ERR(handle))
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -878,7 +1977,7 @@
-       if (retval)
-               goto end_unlink;
-       dir->i_ctime = dir->i_mtime = CURRENT_TIME;
--      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(dir);
-       ext3_mark_inode_dirty(handle, dir);
-       inode->i_nlink--;
-       if (!inode->i_nlink)
-@@ -904,9 +2003,11 @@
-       if (l > dir->i_sb->s_blocksize)
-               return -ENAMETOOLONG;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 5);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 5);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -916,7 +2017,7 @@
-       if (IS_ERR(inode))
-               goto out_stop;
--      if (l > sizeof (inode->u.ext3_i.i_data)) {
-+      if (l > sizeof (EXT3_I(inode)->i_data)) {
-               inode->i_op = &page_symlink_inode_operations;
-               inode->i_mapping->a_ops = &ext3_aops;
-               /*
-@@ -925,8 +2026,12 @@
-                * i_size in generic_commit_write().
-                */
-               err = block_symlink(inode, symname, l);
--              if (err)
--                      goto out_no_entry;
-+              if (err) {
-+                      ext3_dec_count(handle, inode);
-+                      ext3_mark_inode_dirty(handle, inode);
-+                      iput (inode);
-+                      goto out_stop;
-+              }
-       } else {
-               inode->i_op = &ext3_fast_symlink_inode_operations;
-               memcpy((char*)&inode->u.ext3_i.i_data,symname,l);
-@@ -938,12 +2043,6 @@
- out_stop:
-       ext3_journal_stop(handle, dir);
-       return err;
--
--out_no_entry:
--      ext3_dec_count(handle, inode);
--      ext3_mark_inode_dirty(handle, inode);
--      iput (inode);
--      goto out_stop;
- }
- static int ext3_link (struct dentry * old_dentry,
-@@ -956,12 +2055,15 @@
-       if (S_ISDIR(inode->i_mode))
-               return -EPERM;
--      if (inode->i_nlink >= EXT3_LINK_MAX)
-+      if (inode->i_nlink >= EXT3_LINK_MAX) {
-               return -EMLINK;
-+      }
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -995,9 +2097,11 @@
-       old_bh = new_bh = dir_bh = NULL;
--      handle = ext3_journal_start(old_dir, 2 * EXT3_DATA_TRANS_BLOCKS + 2);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(old_dir, 2 * EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 2);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(old_dir) || IS_SYNC(new_dir))
-               handle->h_sync = 1;
-@@ -1070,14 +2174,37 @@
-       /*
-        * ok, that's it
-        */
--      ext3_delete_entry(handle, old_dir, old_de, old_bh);
-+      if (le32_to_cpu(old_de->inode) != old_inode->i_ino ||
-+          old_de->name_len != old_dentry->d_name.len ||
-+          strncmp(old_de->name, old_dentry->d_name.name, old_de->name_len) ||
-+          (retval = ext3_delete_entry(handle, old_dir,
-+                                      old_de, old_bh)) == -ENOENT) {
-+              /* old_de could have moved from under us during htree split, so
-+               * make sure that we are deleting the right entry.  We might
-+               * also be pointing to a stale entry in the unused part of
-+               * old_bh so just checking inum and the name isn't enough. */
-+              struct buffer_head *old_bh2;
-+              struct ext3_dir_entry_2 *old_de2;
-+
-+              old_bh2 = ext3_find_entry(old_dentry, &old_de2);
-+              if (old_bh2) {
-+                      retval = ext3_delete_entry(handle, old_dir,
-+                                                 old_de2, old_bh2);
-+                      brelse(old_bh2);
-+              }
-+      }
-+      if (retval) {
-+              ext3_warning(old_dir->i_sb, "ext3_rename",
-+                              "Deleting old file (%lu), %d, error=%d",
-+                              old_dir->i_ino, old_dir->i_nlink, retval);
-+      }
-       if (new_inode) {
-               new_inode->i_nlink--;
-               new_inode->i_ctime = CURRENT_TIME;
-       }
-       old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME;
--      old_dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(old_dir);
-       if (dir_bh) {
-               BUFFER_TRACE(dir_bh, "get_write_access");
-               ext3_journal_get_write_access(handle, dir_bh);
-@@ -1089,7 +2212,7 @@
-                       new_inode->i_nlink--;
-               } else {
-                       new_dir->i_nlink++;
--                      new_dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+                      ext3_update_dx_flag(new_dir);
-                       ext3_mark_inode_dirty(handle, new_dir);
-               }
-       }
-Index: linux-2.4.19-pre1/fs/ext3/super.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/super.c     2003-11-20 19:01:58.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/super.c  2003-11-20 23:05:26.000000000 +0300
-@@ -702,6 +702,7 @@
-       es->s_mtime = cpu_to_le32(CURRENT_TIME);
-       ext3_update_dynamic_rev(sb);
-       EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
-+
-       ext3_commit_super (sb, es, 1);
-       if (test_opt (sb, DEBUG))
-               printk (KERN_INFO
-@@ -712,6 +713,7 @@
-                       EXT3_BLOCKS_PER_GROUP(sb),
-                       EXT3_INODES_PER_GROUP(sb),
-                       sbi->s_mount_opt);
-+
-       printk(KERN_INFO "EXT3 FS " EXT3FS_VERSION ", " EXT3FS_DATE " on %s, ",
-                               bdevname(sb->s_dev));
-       if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
-@@ -886,6 +888,7 @@
-       return res;
- }
-+
- struct super_block * ext3_read_super (struct super_block * sb, void * data,
-                                     int silent)
- {
-@@ -1062,6 +1065,9 @@
-       sbi->s_mount_state = le16_to_cpu(es->s_state);
-       sbi->s_addr_per_block_bits = log2(EXT3_ADDR_PER_BLOCK(sb));
-       sbi->s_desc_per_block_bits = log2(EXT3_DESC_PER_BLOCK(sb));
-+      for (i=0; i < 4; i++)
-+              sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);
-+      sbi->s_def_hash_version = es->s_def_hash_version;
-       if (sbi->s_blocks_per_group > blocksize * 8) {
-               printk (KERN_ERR
-@@ -1744,6 +1750,7 @@
-       unregister_filesystem(&ext3_fs_type);
- }
-+EXPORT_SYMBOL(ext3_force_commit);
- EXPORT_SYMBOL(ext3_bread);
- MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
-Index: linux-2.4.19-pre1/include/linux/ext3_fs.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/ext3_fs.h     2003-11-20 19:01:38.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/ext3_fs.h  2003-11-20 23:05:26.000000000 +0300
-@@ -40,6 +40,11 @@
- #define EXT3FS_VERSION                "2.4-0.9.17"
- /*
-+ * Always enable hashed directories
-+ */
-+#define CONFIG_EXT3_INDEX
-+
-+/*
-  * Debug code
-  */
- #ifdef EXT3FS_DEBUG
-@@ -437,8 +442,11 @@
- /*E0*/        __u32   s_journal_inum;         /* inode number of journal file */
-       __u32   s_journal_dev;          /* device number of journal file */
-       __u32   s_last_orphan;          /* start of list of inodes to delete */
--
--/*EC*/        __u32   s_reserved[197];        /* Padding to the end of the block */
-+      __u32   s_hash_seed[4];         /* HTREE hash seed */
-+      __u8    s_def_hash_version;     /* Default hash version to use */
-+      __u8    s_reserved_char_pad;
-+      __u16   s_reserved_word_pad;
-+      __u32   s_reserved[192];        /* Padding to the end of the block */
- };
- #ifdef __KERNEL__
-@@ -575,9 +583,46 @@
- #define EXT3_DIR_ROUND                        (EXT3_DIR_PAD - 1)
- #define EXT3_DIR_REC_LEN(name_len)    (((name_len) + 8 + EXT3_DIR_ROUND) & \
-                                        ~EXT3_DIR_ROUND)
-+/*
-+ * Hash Tree Directory indexing
-+ * (c) Daniel Phillips, 2001
-+ */
-+
-+#ifdef CONFIG_EXT3_INDEX
-+  #define is_dx(dir) (EXT3_HAS_COMPAT_FEATURE(dir->i_sb, \
-+                                            EXT3_FEATURE_COMPAT_DIR_INDEX) && \
-+                    (EXT3_I(dir)->i_flags & EXT3_INDEX_FL))
-+#define EXT3_DIR_LINK_MAX(dir) (!is_dx(dir) && (dir)->i_nlink >= EXT3_LINK_MAX)
-+#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || (dir)->i_nlink == 1)
-+#else
-+  #define is_dx(dir) 0
-+#define EXT3_DIR_LINK_MAX(dir) ((dir)->i_nlink >= EXT3_LINK_MAX)
-+#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2)
-+#endif
-+
-+/* Legal values for the dx_root hash_version field: */
-+
-+#define DX_HASH_LEGACY                0
-+#define DX_HASH_HALF_MD4      1
-+#define DX_HASH_TEA           2
-+
-+/* hash info structure used by the directory hash */
-+struct dx_hash_info
-+{
-+      u32             hash;
-+      u32             minor_hash;
-+      int             hash_version;
-+      u32             *seed;
-+};
- #ifdef __KERNEL__
- /*
-+ * Control parameters used by ext3_htree_next_block
-+ */
-+#define HASH_NB_ALWAYS                1
-+
-+
-+/*
-  * Describe an inode's exact location on disk and in memory
-  */
- struct ext3_iloc
-@@ -587,6 +632,27 @@
-       unsigned long block_group;
- };
-+
-+/*
-+ * This structure is stuffed into the struct file's private_data field
-+ * for directories.  It is where we put information so that we can do
-+ * readdir operations in hash tree order.
-+ */
-+struct dir_private_info {
-+      rb_root_t       root;
-+      rb_node_t       *curr_node;
-+      struct fname    *extra_fname;
-+      loff_t          last_pos;
-+      __u32           curr_hash;
-+      __u32           curr_minor_hash;
-+      __u32           next_hash;
-+};
-+
-+/*
-+ * Special error return code only used by dx_probe() and its callers.
-+ */
-+#define ERR_BAD_DX_DIR        -75000
-+
- /*
-  * Function prototypes
-  */
-@@ -614,11 +680,20 @@
- /* dir.c */
- extern int ext3_check_dir_entry(const char *, struct inode *,
--                              struct ext3_dir_entry_2 *, struct buffer_head *,
--                              unsigned long);
-+                              struct ext3_dir_entry_2 *,
-+                              struct buffer_head *, unsigned long);
-+extern int ext3_htree_store_dirent(struct file *dir_file, __u32 hash,
-+                                  __u32 minor_hash,
-+                                  struct ext3_dir_entry_2 *dirent);
-+extern void ext3_htree_free_dir_info(struct dir_private_info *p);
-+
- /* fsync.c */
- extern int ext3_sync_file (struct file *, struct dentry *, int);
-+/* hash.c */
-+extern int ext3fs_dirhash(const char *name, int len, struct
-+                        dx_hash_info *hinfo);
-+
- /* ialloc.c */
- extern struct inode * ext3_new_inode (handle_t *, const struct inode *, int);
- extern void ext3_free_inode (handle_t *, struct inode *);
-@@ -650,6 +725,8 @@
- /* namei.c */
- extern int ext3_orphan_add(handle_t *, struct inode *);
- extern int ext3_orphan_del(handle_t *, struct inode *);
-+extern int ext3_htree_fill_tree(struct file *dir_file, __u32 start_hash,
-+                              __u32 start_minor_hash, __u32 *next_hash);
- /* super.c */
- extern void ext3_error (struct super_block *, const char *, const char *, ...)
-Index: linux-2.4.19-pre1/include/linux/ext3_fs_sb.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/ext3_fs_sb.h  2003-11-20 19:01:38.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/ext3_fs_sb.h       2003-11-20 23:05:26.000000000 +0300
-@@ -62,6 +62,8 @@
-       int s_inode_size;
-       int s_first_ino;
-       u32 s_next_generation;
-+      u32 s_hash_seed[4];
-+      int s_def_hash_version;
-       /* Journaling */
-       struct inode * s_journal_inode;
-Index: linux-2.4.19-pre1/include/linux/ext3_jbd.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/ext3_jbd.h    2001-12-21 20:42:03.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/ext3_jbd.h 2003-11-20 23:05:26.000000000 +0300
-@@ -63,6 +63,8 @@
- #define EXT3_RESERVE_TRANS_BLOCKS     12
-+#define EXT3_INDEX_EXTRA_TRANS_BLOCKS 8
-+
- int
- ext3_mark_iloc_dirty(handle_t *handle, 
-                    struct inode *inode,
-Index: linux-2.4.19-pre1/include/linux/rbtree.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/rbtree.h      2001-11-22 22:46:18.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/rbtree.h   2003-11-20 23:05:26.000000000 +0300
-@@ -120,6 +120,8 @@
- extern void rb_insert_color(rb_node_t *, rb_root_t *);
- extern void rb_erase(rb_node_t *, rb_root_t *);
-+extern rb_node_t *rb_get_first(rb_root_t *root);
-+extern rb_node_t *rb_get_next(rb_node_t *n);
- static inline void rb_link_node(rb_node_t * node, rb_node_t * parent, rb_node_t ** rb_link)
- {
-Index: linux-2.4.19-pre1/lib/rbtree.c
-===================================================================
---- linux-2.4.19-pre1.orig/lib/rbtree.c        2001-09-18 02:30:23.000000000 +0400
-+++ linux-2.4.19-pre1/lib/rbtree.c     2003-11-20 23:25:57.000000000 +0300
-@@ -17,6 +17,8 @@
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-   linux/lib/rbtree.c
-+
-+  rb_get_first and rb_get_next written by Theodore Ts'o, 9/8/2002
- */
- #include <linux/rbtree.h>
-@@ -291,3 +293,43 @@
-       if (color == RB_BLACK)
-               __rb_erase_color(child, parent, root);
- }
-+
-+/*
-+ * This function returns the first node (in sort order) of the tree.
-+ */
-+rb_node_t *rb_get_first(rb_root_t *root)
-+{
-+      rb_node_t       *n;
-+
-+      n = root->rb_node;
-+      if (!n)
-+              return 0;
-+      while (n->rb_left)
-+              n = n->rb_left;
-+      return n;
-+}
-+EXPORT_SYMBOL(rb_get_first);
-+
-+/*
-+ * Given a node, this function will return the next node in the tree.
-+ */
-+rb_node_t *rb_get_next(rb_node_t *n)
-+{
-+      rb_node_t       *parent;
-+
-+      if (n->rb_right) {
-+              n = n->rb_right;
-+              while (n->rb_left)
-+                      n = n->rb_left;
-+              return n;
-+      } else {
-+              while ((parent = n->rb_parent)) {
-+                      if (n == parent->rb_left)
-+                              return parent;
-+                      n = parent;
-+              }
-+              return 0;
-+      }
-+}
-+EXPORT_SYMBOL(rb_get_next);
-+
diff --git a/lustre/kernel_patches/patches/ext3-htree-rename_fix.patch b/lustre/kernel_patches/patches/ext3-htree-rename_fix.patch
deleted file mode 100644 (file)
index 75bf288..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-===== fs/ext3/namei.c 1.52 vs edited =====
---- 1.52/fs/ext3/namei.c       Mon May 10 05:25:34 2004
-+++ edited/fs/ext3/namei.c     Thu May 20 19:57:10 2004
-@@ -2264,11 +2264,15 @@
-       /*
-        * ok, that's it
-        */
--      retval = ext3_delete_entry(handle, old_dir, old_de, old_bh);
--      if (retval == -ENOENT) {
--              /*
--               * old_de could have moved out from under us.
--               */
-+      if (le32_to_cpu(old_de->inode) != old_inode->i_ino ||
-+          old_de->name_len != old_dentry->d_name.len ||
-+          strncmp(old_de->name, old_dentry->d_name.name, old_de->name_len) ||
-+          (retval = ext3_delete_entry(handle, old_dir,
-+                                      old_de, old_bh)) == -ENOENT) {
-+              /* old_de could have moved from under us during htree split, so
-+               * make sure that we are deleting the right entry.  We might
-+               * also be pointing to a stale entry in the unused part of
-+               * old_bh so just checking inum and the name isn't enough. */
-               struct buffer_head *old_bh2;
-               struct ext3_dir_entry_2 *old_de2;
diff --git a/lustre/kernel_patches/patches/ext3-htree.patch b/lustre/kernel_patches/patches/ext3-htree.patch
deleted file mode 100644 (file)
index 31f2ae3..0000000
+++ /dev/null
@@ -1,2574 +0,0 @@
- fs/ext3/Makefile           |    2 
- fs/ext3/dir.c              |  302 +++++++++
- fs/ext3/file.c             |    3 
- fs/ext3/hash.c             |  215 ++++++
- fs/ext3/namei.c            | 1420 ++++++++++++++++++++++++++++++++++++++++-----
- fs/ext3/super.c            |    7 
- include/linux/ext3_fs.h    |   85 ++
- include/linux/ext3_fs_sb.h |    2 
- include/linux/ext3_jbd.h   |    2 
- include/linux/rbtree.h     |    2 
- lib/rbtree.c               |   42 +
- 11 files changed, 1921 insertions(+), 161 deletions(-)
-
---- linux-2.4.18-chaos-pdirops/fs/ext3/dir.c~ext3-htree        2001-11-10 01:25:04.000000000 +0300
-+++ linux-2.4.18-chaos-pdirops-alexey/fs/ext3/dir.c    2003-09-23 12:12:04.000000000 +0400
-@@ -21,12 +21,16 @@
- #include <linux/fs.h>
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
-+#include <linux/slab.h>
-+#include <linux/rbtree.h>
- static unsigned char ext3_filetype_table[] = {
-       DT_UNKNOWN, DT_REG, DT_DIR, DT_CHR, DT_BLK, DT_FIFO, DT_SOCK, DT_LNK
- };
- static int ext3_readdir(struct file *, void *, filldir_t);
-+static int ext3_dx_readdir(struct file * filp,
-+                         void * dirent, filldir_t filldir);
- struct file_operations ext3_dir_operations = {
-       read:           generic_read_dir,
-@@ -35,6 +39,17 @@ struct file_operations ext3_dir_operatio
-       fsync:          ext3_sync_file,         /* BKL held */
- };
-+
-+static unsigned char get_dtype(struct super_block *sb, int filetype)
-+{
-+      if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_FILETYPE) ||
-+          (filetype >= EXT3_FT_MAX))
-+              return DT_UNKNOWN;
-+
-+      return (ext3_filetype_table[filetype]);
-+}
-+                             
-+
- int ext3_check_dir_entry (const char * function, struct inode * dir,
-                         struct ext3_dir_entry_2 * de,
-                         struct buffer_head * bh,
-@@ -79,6 +94,16 @@ static int ext3_readdir(struct file * fi
-       sb = inode->i_sb;
-+      if (is_dx(inode)) {
-+              err = ext3_dx_readdir(filp, dirent, filldir);
-+              if (err != ERR_BAD_DX_DIR)
-+                      return err;
-+              /*
-+               * We don't set the inode dirty flag since it's not
-+               * critical that it get flushed back to the disk.
-+               */
-+              EXT3_I(filp->f_dentry->d_inode)->i_flags &= ~EXT3_INDEX_FL;
-+      }
-       stored = 0;
-       bh = NULL;
-       offset = filp->f_pos & (sb->s_blocksize - 1);
-@@ -162,18 +187,12 @@ revalidate:
-                                * during the copy operation.
-                                */
-                               unsigned long version = filp->f_version;
--                              unsigned char d_type = DT_UNKNOWN;
--                              if (EXT3_HAS_INCOMPAT_FEATURE(sb,
--                                              EXT3_FEATURE_INCOMPAT_FILETYPE)
--                                              && de->file_type < EXT3_FT_MAX)
--                                      d_type =
--                                        ext3_filetype_table[de->file_type];
-                               error = filldir(dirent, de->name,
-                                               de->name_len,
-                                               filp->f_pos,
-                                               le32_to_cpu(de->inode),
--                                              d_type);
-+                                              get_dtype(sb, de->file_type));
-                               if (error)
-                                       break;
-                               if (version != filp->f_version)
-@@ -188,3 +207,272 @@ revalidate:
-       UPDATE_ATIME(inode);
-       return 0;
- }
-+
-+#ifdef CONFIG_EXT3_INDEX
-+/*
-+ * These functions convert from the major/minor hash to an f_pos
-+ * value.
-+ * 
-+ * Currently we only use major hash numer.  This is unfortunate, but
-+ * on 32-bit machines, the same VFS interface is used for lseek and
-+ * llseek, so if we use the 64 bit offset, then the 32-bit versions of
-+ * lseek/telldir/seekdir will blow out spectacularly, and from within
-+ * the ext2 low-level routine, we don't know if we're being called by
-+ * a 64-bit version of the system call or the 32-bit version of the
-+ * system call.  Worse yet, NFSv2 only allows for a 32-bit readdir
-+ * cookie.  Sigh.
-+ */
-+#define hash2pos(major, minor)        (major >> 1)
-+#define pos2maj_hash(pos)     ((pos << 1) & 0xffffffff)
-+#define pos2min_hash(pos)     (0)
-+
-+/*
-+ * This structure holds the nodes of the red-black tree used to store
-+ * the directory entry in hash order.
-+ */
-+struct fname {
-+      __u32           hash;
-+      __u32           minor_hash;
-+      rb_node_t       rb_hash; 
-+      struct fname    *next;
-+      __u32           inode;
-+      __u8            name_len;
-+      __u8            file_type;
-+      char            name[0];
-+};
-+
-+/*
-+ * This functoin implements a non-recursive way of freeing all of the
-+ * nodes in the red-black tree.
-+ */
-+static void free_rb_tree_fname(rb_root_t *root)
-+{
-+      rb_node_t       *n = root->rb_node;
-+      rb_node_t       *parent;
-+      struct fname    *fname;
-+
-+      while (n) {
-+              /* Do the node's children first */
-+              if ((n)->rb_left) {
-+                      n = n->rb_left;
-+                      continue;
-+              }
-+              if (n->rb_right) {
-+                      n = n->rb_right;
-+                      continue;
-+              }
-+              /*
-+               * The node has no children; free it, and then zero
-+               * out parent's link to it.  Finally go to the
-+               * beginning of the loop and try to free the parent
-+               * node.
-+               */
-+              parent = n->rb_parent;
-+              fname = rb_entry(n, struct fname, rb_hash);
-+              kfree(fname);
-+              if (!parent)
-+                      root->rb_node = 0;
-+              else if (parent->rb_left == n)
-+                      parent->rb_left = 0;
-+              else if (parent->rb_right == n)
-+                      parent->rb_right = 0;
-+              n = parent;
-+      }
-+      root->rb_node = 0;
-+}
-+
-+
-+struct dir_private_info *create_dir_info(loff_t pos)
-+{
-+      struct dir_private_info *p;
-+
-+      p = kmalloc(sizeof(struct dir_private_info), GFP_KERNEL);
-+      if (!p)
-+              return NULL;
-+      p->root.rb_node = 0;
-+      p->curr_node = 0;
-+      p->extra_fname = 0;
-+      p->last_pos = 0;
-+      p->curr_hash = pos2maj_hash(pos);
-+      p->curr_minor_hash = pos2min_hash(pos);
-+      p->next_hash = 0;
-+      return p;
-+}
-+
-+void ext3_htree_free_dir_info(struct dir_private_info *p)
-+{
-+      free_rb_tree_fname(&p->root);
-+      kfree(p);
-+}
-+              
-+/*
-+ * Given a directory entry, enter it into the fname rb tree.
-+ */
-+int ext3_htree_store_dirent(struct file *dir_file, __u32 hash,
-+                           __u32 minor_hash,
-+                           struct ext3_dir_entry_2 *dirent)
-+{
-+      rb_node_t **p, *parent = NULL;
-+      struct fname * fname, *new_fn;
-+      struct dir_private_info *info;
-+      int len;
-+
-+      info = (struct dir_private_info *) dir_file->private_data;
-+      p = &info->root.rb_node;
-+
-+      /* Create and allocate the fname structure */
-+      len = sizeof(struct fname) + dirent->name_len + 1;
-+      new_fn = kmalloc(len, GFP_KERNEL);
-+      if (!new_fn)
-+              return -ENOMEM;
-+      memset(new_fn, 0, len);
-+      new_fn->hash = hash;
-+      new_fn->minor_hash = minor_hash;
-+      new_fn->inode = le32_to_cpu(dirent->inode);
-+      new_fn->name_len = dirent->name_len;
-+      new_fn->file_type = dirent->file_type;
-+      memcpy(new_fn->name, dirent->name, dirent->name_len);
-+      new_fn->name[dirent->name_len] = 0;
-+      
-+      while (*p) {
-+              parent = *p;
-+              fname = rb_entry(parent, struct fname, rb_hash);
-+
-+              /*
-+               * If the hash and minor hash match up, then we put
-+               * them on a linked list.  This rarely happens...
-+               */
-+              if ((new_fn->hash == fname->hash) &&
-+                  (new_fn->minor_hash == fname->minor_hash)) {
-+                      new_fn->next = fname->next;
-+                      fname->next = new_fn;
-+                      return 0;
-+              }
-+                      
-+              if (new_fn->hash < fname->hash)
-+                      p = &(*p)->rb_left;
-+              else if (new_fn->hash > fname->hash)
-+                      p = &(*p)->rb_right;
-+              else if (new_fn->minor_hash < fname->minor_hash)
-+                      p = &(*p)->rb_left;
-+              else /* if (new_fn->minor_hash > fname->minor_hash) */
-+                      p = &(*p)->rb_right;
-+      }
-+
-+      rb_link_node(&new_fn->rb_hash, parent, p);
-+      rb_insert_color(&new_fn->rb_hash, &info->root);
-+      return 0;
-+}
-+
-+
-+
-+/*
-+ * This is a helper function for ext3_dx_readdir.  It calls filldir
-+ * for all entres on the fname linked list.  (Normally there is only
-+ * one entry on the linked list, unless there are 62 bit hash collisions.)
-+ */
-+static int call_filldir(struct file * filp, void * dirent,
-+                      filldir_t filldir, struct fname *fname)
-+{
-+      struct dir_private_info *info = filp->private_data;
-+      loff_t  curr_pos;
-+      struct inode *inode = filp->f_dentry->d_inode;
-+      struct super_block * sb;
-+      int error;
-+
-+      sb = inode->i_sb;
-+      
-+      if (!fname) {
-+              printk("call_filldir: called with null fname?!?\n");
-+              return 0;
-+      }
-+      curr_pos = hash2pos(fname->hash, fname->minor_hash);
-+      while (fname) {
-+              error = filldir(dirent, fname->name,
-+                              fname->name_len, curr_pos, 
-+                              fname->inode,
-+                              get_dtype(sb, fname->file_type));
-+              if (error) {
-+                      filp->f_pos = curr_pos;
-+                      info->extra_fname = fname->next;
-+                      return error;
-+              }
-+              fname = fname->next;
-+      }
-+      return 0;
-+}
-+
-+static int ext3_dx_readdir(struct file * filp,
-+                       void * dirent, filldir_t filldir)
-+{
-+      struct dir_private_info *info = filp->private_data;
-+      struct inode *inode = filp->f_dentry->d_inode;
-+      struct fname *fname;
-+      int     ret;
-+
-+      if (!info) {
-+              info = create_dir_info(filp->f_pos);
-+              if (!info)
-+                      return -ENOMEM;
-+              filp->private_data = info;
-+      }
-+
-+      /* Some one has messed with f_pos; reset the world */
-+      if (info->last_pos != filp->f_pos) {
-+              free_rb_tree_fname(&info->root);
-+              info->curr_node = 0;
-+              info->extra_fname = 0;
-+              info->curr_hash = pos2maj_hash(filp->f_pos);
-+              info->curr_minor_hash = pos2min_hash(filp->f_pos);
-+      }
-+
-+      /*
-+       * If there are any leftover names on the hash collision
-+       * chain, return them first.
-+       */
-+      if (info->extra_fname &&
-+          call_filldir(filp, dirent, filldir, info->extra_fname))
-+              goto finished;
-+
-+      if (!info->curr_node)
-+              info->curr_node = rb_get_first(&info->root);
-+
-+      while (1) {
-+              /*
-+               * Fill the rbtree if we have no more entries,
-+               * or the inode has changed since we last read in the
-+               * cached entries. 
-+               */
-+              if ((!info->curr_node) ||
-+                  (filp->f_version != inode->i_version)) {
-+                      info->curr_node = 0;
-+                      free_rb_tree_fname(&info->root);
-+                      filp->f_version = inode->i_version;
-+                      ret = ext3_htree_fill_tree(filp, info->curr_hash,
-+                                                 info->curr_minor_hash,
-+                                                 &info->next_hash);
-+                      if (ret < 0)
-+                              return ret;
-+                      if (ret == 0)
-+                              break;
-+                      info->curr_node = rb_get_first(&info->root);
-+              }
-+
-+              fname = rb_entry(info->curr_node, struct fname, rb_hash);
-+              info->curr_hash = fname->hash;
-+              info->curr_minor_hash = fname->minor_hash;
-+              if (call_filldir(filp, dirent, filldir, fname))
-+                      break;
-+
-+              info->curr_node = rb_get_next(info->curr_node);
-+              if (!info->curr_node) {
-+                      info->curr_hash = info->next_hash;
-+                      info->curr_minor_hash = 0;
-+              }
-+      }
-+finished:
-+      info->last_pos = filp->f_pos;
-+      UPDATE_ATIME(inode);
-+      return 0;
-+}
-+#endif
---- linux-2.4.18-chaos-pdirops/fs/ext3/file.c~ext3-htree       2003-07-28 17:52:04.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/fs/ext3/file.c   2003-09-23 12:11:54.000000000 +0400
-@@ -35,6 +35,9 @@ static int ext3_release_file (struct ino
- {
-       if (filp->f_mode & FMODE_WRITE)
-               ext3_discard_prealloc (inode);
-+      if (is_dx(inode) && filp->private_data)
-+              ext3_htree_free_dir_info(filp->private_data);
-+
-       return 0;
- }
---- /dev/null  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.18-chaos-pdirops-alexey/fs/ext3/hash.c   2003-09-23 12:11:54.000000000 +0400
-@@ -0,0 +1,215 @@
-+/*
-+ *  linux/fs/ext3/hash.c
-+ *
-+ * Copyright (C) 2002 by Theodore Ts'o
-+ *
-+ * This file is released under the GPL v2.
-+ * 
-+ * This file may be redistributed under the terms of the GNU Public
-+ * License.
-+ */
-+
-+#include <linux/fs.h>
-+#include <linux/jbd.h>
-+#include <linux/sched.h>
-+#include <linux/ext3_fs.h>
-+
-+#define DELTA 0x9E3779B9
-+
-+static void TEA_transform(__u32 buf[4], __u32 const in[])
-+{
-+      __u32   sum = 0;
-+      __u32   b0 = buf[0], b1 = buf[1];
-+      __u32   a = in[0], b = in[1], c = in[2], d = in[3];
-+      int     n = 16;
-+
-+      do {                                                    
-+              sum += DELTA;                                   
-+              b0 += ((b1 << 4)+a) ^ (b1+sum) ^ ((b1 >> 5)+b); 
-+              b1 += ((b0 << 4)+c) ^ (b0+sum) ^ ((b0 >> 5)+d); 
-+      } while(--n);
-+
-+      buf[0] += b0;
-+      buf[1] += b1;
-+}
-+
-+/* F, G and H are basic MD4 functions: selection, majority, parity */
-+#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
-+#define G(x, y, z) (((x) & (y)) + (((x) ^ (y)) & (z)))
-+#define H(x, y, z) ((x) ^ (y) ^ (z))
-+
-+/*
-+ * The generic round function.  The application is so specific that
-+ * we don't bother protecting all the arguments with parens, as is generally
-+ * good macro practice, in favor of extra legibility.
-+ * Rotation is separate from addition to prevent recomputation
-+ */
-+#define ROUND(f, a, b, c, d, x, s)    \
-+      (a += f(b, c, d) + x, a = (a << s) | (a >> (32-s)))
-+#define K1 0
-+#define K2 013240474631UL
-+#define K3 015666365641UL
-+
-+/*
-+ * Basic cut-down MD4 transform.  Returns only 32 bits of result.
-+ */
-+static void halfMD4Transform (__u32 buf[4], __u32 const in[])
-+{
-+      __u32   a = buf[0], b = buf[1], c = buf[2], d = buf[3];
-+
-+      /* Round 1 */
-+      ROUND(F, a, b, c, d, in[0] + K1,  3);
-+      ROUND(F, d, a, b, c, in[1] + K1,  7);
-+      ROUND(F, c, d, a, b, in[2] + K1, 11);
-+      ROUND(F, b, c, d, a, in[3] + K1, 19);
-+      ROUND(F, a, b, c, d, in[4] + K1,  3);
-+      ROUND(F, d, a, b, c, in[5] + K1,  7);
-+      ROUND(F, c, d, a, b, in[6] + K1, 11);
-+      ROUND(F, b, c, d, a, in[7] + K1, 19);
-+
-+      /* Round 2 */
-+      ROUND(G, a, b, c, d, in[1] + K2,  3);
-+      ROUND(G, d, a, b, c, in[3] + K2,  5);
-+      ROUND(G, c, d, a, b, in[5] + K2,  9);
-+      ROUND(G, b, c, d, a, in[7] + K2, 13);
-+      ROUND(G, a, b, c, d, in[0] + K2,  3);
-+      ROUND(G, d, a, b, c, in[2] + K2,  5);
-+      ROUND(G, c, d, a, b, in[4] + K2,  9);
-+      ROUND(G, b, c, d, a, in[6] + K2, 13);
-+
-+      /* Round 3 */
-+      ROUND(H, a, b, c, d, in[3] + K3,  3);
-+      ROUND(H, d, a, b, c, in[7] + K3,  9);
-+      ROUND(H, c, d, a, b, in[2] + K3, 11);
-+      ROUND(H, b, c, d, a, in[6] + K3, 15);
-+      ROUND(H, a, b, c, d, in[1] + K3,  3);
-+      ROUND(H, d, a, b, c, in[5] + K3,  9);
-+      ROUND(H, c, d, a, b, in[0] + K3, 11);
-+      ROUND(H, b, c, d, a, in[4] + K3, 15);
-+
-+      buf[0] += a;
-+      buf[1] += b;
-+      buf[2] += c;
-+      buf[3] += d;
-+}
-+
-+#undef ROUND
-+#undef F
-+#undef G
-+#undef H
-+#undef K1
-+#undef K2
-+#undef K3
-+
-+/* The old legacy hash */
-+static __u32 dx_hack_hash (const char *name, int len)
-+{
-+      __u32 hash0 = 0x12a3fe2d, hash1 = 0x37abe8f9;
-+      while (len--) {
-+              __u32 hash = hash1 + (hash0 ^ (*name++ * 7152373));
-+              
-+              if (hash & 0x80000000) hash -= 0x7fffffff;
-+              hash1 = hash0;
-+              hash0 = hash;
-+      }
-+      return (hash0 << 1);
-+}
-+
-+static void str2hashbuf(const char *msg, int len, __u32 *buf, int num)
-+{
-+      __u32   pad, val;
-+      int     i;
-+
-+      pad = (__u32)len | ((__u32)len << 8);
-+      pad |= pad << 16;
-+
-+      val = pad;
-+      if (len > num*4)
-+              len = num * 4;
-+      for (i=0; i < len; i++) {
-+              if ((i % 4) == 0)
-+                      val = pad;
-+              val = msg[i] + (val << 8);
-+              if ((i % 4) == 3) {
-+                      *buf++ = val;
-+                      val = pad;
-+                      num--;
-+              }
-+      }
-+      if (--num >= 0)
-+              *buf++ = val;
-+      while (--num >= 0)
-+              *buf++ = pad;
-+}
-+
-+/*
-+ * Returns the hash of a filename.  If len is 0 and name is NULL, then
-+ * this function can be used to test whether or not a hash version is
-+ * supported.
-+ * 
-+ * The seed is an 4 longword (32 bits) "secret" which can be used to
-+ * uniquify a hash.  If the seed is all zero's, then some default seed
-+ * may be used.
-+ * 
-+ * A particular hash version specifies whether or not the seed is
-+ * represented, and whether or not the returned hash is 32 bits or 64
-+ * bits.  32 bit hashes will return 0 for the minor hash.
-+ */
-+int ext3fs_dirhash(const char *name, int len, struct dx_hash_info *hinfo)
-+{
-+      __u32   hash;
-+      __u32   minor_hash = 0;
-+      const char      *p;
-+      int             i;
-+      __u32           in[8], buf[4];
-+
-+      /* Initialize the default seed for the hash checksum functions */
-+      buf[0] = 0x67452301;
-+      buf[1] = 0xefcdab89;
-+      buf[2] = 0x98badcfe;
-+      buf[3] = 0x10325476;
-+
-+      /* Check to see if the seed is all zero's */
-+      if (hinfo->seed) {
-+              for (i=0; i < 4; i++) {
-+                      if (hinfo->seed[i])
-+                              break;
-+              }
-+              if (i < 4)
-+                      memcpy(buf, hinfo->seed, sizeof(buf));
-+      }
-+              
-+      switch (hinfo->hash_version) {
-+      case DX_HASH_LEGACY:
-+              hash = dx_hack_hash(name, len);
-+              break;
-+      case DX_HASH_HALF_MD4:
-+              p = name;
-+              while (len > 0) {
-+                      str2hashbuf(p, len, in, 8);
-+                      halfMD4Transform(buf, in);
-+                      len -= 32;
-+                      p += 32;
-+              }
-+              minor_hash = buf[2];
-+              hash = buf[1];
-+              break;
-+      case DX_HASH_TEA:
-+              p = name;
-+              while (len > 0) {
-+                      str2hashbuf(p, len, in, 4);
-+                      TEA_transform(buf, in);
-+                      len -= 16;
-+                      p += 16;
-+              }
-+              hash = buf[0];
-+              minor_hash = buf[1];
-+              break;
-+      default:
-+              hinfo->hash = 0;
-+              return -1;
-+      }
-+      hinfo->hash = hash & ~1;
-+      hinfo->minor_hash = minor_hash;
-+      return 0;
-+}
---- linux-2.4.18-chaos-pdirops/fs/ext3/Makefile~ext3-htree     2003-09-23 11:52:24.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/fs/ext3/Makefile 2003-09-23 12:11:54.000000000 +0400
-@@ -12,7 +12,7 @@ O_TARGET := ext3.o
- export-objs :=        super.o inode.o
- obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
--              ioctl.o namei.o super.o symlink.o
-+              ioctl.o namei.o super.o symlink.o hash.o
- obj-m    := $(O_TARGET)
- include $(TOPDIR)/Rules.make
---- linux-2.4.18-chaos-pdirops/fs/ext3/namei.c~ext3-htree      2003-09-23 11:52:34.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/fs/ext3/namei.c  2003-09-23 12:12:09.000000000 +0400
-@@ -16,6 +16,12 @@
-  *        David S. Miller (davem@caip.rutgers.edu), 1995
-  *  Directory entry file type support and forward compatibility hooks
-  *    for B-tree directories by Theodore Ts'o (tytso@mit.edu), 1998
-+ *  Hash Tree Directory indexing (c)
-+ *    Daniel Phillips, 2001
-+ *  Hash Tree Directory indexing porting
-+ *    Christopher Li, 2002
-+ *  Hash Tree Directory indexing cleanup
-+ *    Theodore Ts'o, 2002
-  */
- #include <linux/fs.h>
-@@ -38,6 +44,642 @@
- #define NAMEI_RA_SIZE        (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
- #define NAMEI_RA_INDEX(c,b)  (((c) * NAMEI_RA_BLOCKS) + (b))
-+static struct buffer_head *ext3_append(handle_t *handle,
-+                                      struct inode *inode,
-+                                      u32 *block, int *err)
-+{
-+      struct buffer_head *bh;
-+
-+      *block = inode->i_size >> inode->i_sb->s_blocksize_bits;
-+
-+      if ((bh = ext3_bread(handle, inode, *block, 1, err))) {
-+              inode->i_size += inode->i_sb->s_blocksize;
-+              EXT3_I(inode)->i_disksize = inode->i_size;
-+              ext3_journal_get_write_access(handle,bh);
-+      }
-+      return bh;
-+}
-+
-+#ifndef assert
-+#define assert(test) J_ASSERT(test)
-+#endif
-+
-+#ifndef swap
-+#define swap(x, y) do { typeof(x) z = x; x = y; y = z; } while (0)
-+#endif
-+
-+typedef struct { u32 v; } le_u32;
-+typedef struct { u16 v; } le_u16;
-+
-+#ifdef DX_DEBUG
-+#define dxtrace(command) command
-+#else
-+#define dxtrace(command) 
-+#endif
-+
-+struct fake_dirent
-+{
-+      /*le*/u32 inode;
-+      /*le*/u16 rec_len;
-+      u8 name_len;
-+      u8 file_type;
-+};
-+
-+struct dx_countlimit
-+{
-+      le_u16 limit;
-+      le_u16 count;
-+};
-+
-+struct dx_entry
-+{
-+      le_u32 hash;
-+      le_u32 block;
-+};
-+
-+/*
-+ * dx_root_info is laid out so that if it should somehow get overlaid by a
-+ * dirent the two low bits of the hash version will be zero.  Therefore, the
-+ * hash version mod 4 should never be 0.  Sincerely, the paranoia department.
-+ */
-+
-+struct dx_root
-+{
-+      struct fake_dirent dot;
-+      char dot_name[4];
-+      struct fake_dirent dotdot;
-+      char dotdot_name[4];
-+      struct dx_root_info
-+      {
-+              le_u32 reserved_zero;
-+              u8 hash_version;
-+              u8 info_length; /* 8 */
-+              u8 indirect_levels;
-+              u8 unused_flags;
-+      }
-+      info;
-+      struct dx_entry entries[0];
-+};
-+
-+struct dx_node
-+{
-+      struct fake_dirent fake;
-+      struct dx_entry entries[0];
-+};
-+
-+
-+struct dx_frame
-+{
-+      struct buffer_head *bh;
-+      struct dx_entry *entries;
-+      struct dx_entry *at;
-+};
-+
-+struct dx_map_entry
-+{
-+      u32 hash;
-+      u32 offs;
-+};
-+
-+#ifdef CONFIG_EXT3_INDEX
-+static inline unsigned dx_get_block (struct dx_entry *entry);
-+static void dx_set_block (struct dx_entry *entry, unsigned value);
-+static inline unsigned dx_get_hash (struct dx_entry *entry);
-+static void dx_set_hash (struct dx_entry *entry, unsigned value);
-+static unsigned dx_get_count (struct dx_entry *entries);
-+static unsigned dx_get_limit (struct dx_entry *entries);
-+static void dx_set_count (struct dx_entry *entries, unsigned value);
-+static void dx_set_limit (struct dx_entry *entries, unsigned value);
-+static unsigned dx_root_limit (struct inode *dir, unsigned infosize);
-+static unsigned dx_node_limit (struct inode *dir);
-+static struct dx_frame *dx_probe(struct dentry *dentry,
-+                               struct inode *dir,
-+                               struct dx_hash_info *hinfo,
-+                               struct dx_frame *frame,
-+                               int *err);
-+static void dx_release (struct dx_frame *frames);
-+static int dx_make_map (struct ext3_dir_entry_2 *de, int size,
-+                      struct dx_hash_info *hinfo, struct dx_map_entry map[]);
-+static void dx_sort_map(struct dx_map_entry *map, unsigned count);
-+static struct ext3_dir_entry_2 *dx_move_dirents (char *from, char *to,
-+              struct dx_map_entry *offsets, int count);
-+static struct ext3_dir_entry_2* dx_pack_dirents (char *base, int size);
-+static void dx_insert_block (struct dx_frame *frame, u32 hash, u32 block);
-+static int ext3_htree_next_block(struct inode *dir, __u32 hash,
-+                               struct dx_frame *frame,
-+                               struct dx_frame *frames, int *err,
-+                               __u32 *start_hash);
-+static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
-+                     struct ext3_dir_entry_2 **res_dir, int *err);
-+static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry,
-+                           struct inode *inode);
-+
-+/*
-+ * Future: use high four bits of block for coalesce-on-delete flags
-+ * Mask them off for now.
-+ */
-+
-+static inline unsigned dx_get_block (struct dx_entry *entry)
-+{
-+      return le32_to_cpu(entry->block.v) & 0x00ffffff;
-+}
-+
-+static inline void dx_set_block (struct dx_entry *entry, unsigned value)
-+{
-+      entry->block.v = cpu_to_le32(value);
-+}
-+
-+static inline unsigned dx_get_hash (struct dx_entry *entry)
-+{
-+      return le32_to_cpu(entry->hash.v);
-+}
-+
-+static inline void dx_set_hash (struct dx_entry *entry, unsigned value)
-+{
-+      entry->hash.v = cpu_to_le32(value);
-+}
-+
-+static inline unsigned dx_get_count (struct dx_entry *entries)
-+{
-+      return le16_to_cpu(((struct dx_countlimit *) entries)->count.v);
-+}
-+
-+static inline unsigned dx_get_limit (struct dx_entry *entries)
-+{
-+      return le16_to_cpu(((struct dx_countlimit *) entries)->limit.v);
-+}
-+
-+static inline void dx_set_count (struct dx_entry *entries, unsigned value)
-+{
-+      ((struct dx_countlimit *) entries)->count.v = cpu_to_le16(value);
-+}
-+
-+static inline void dx_set_limit (struct dx_entry *entries, unsigned value)
-+{
-+      ((struct dx_countlimit *) entries)->limit.v = cpu_to_le16(value);
-+}
-+
-+static inline unsigned dx_root_limit (struct inode *dir, unsigned infosize)
-+{
-+      unsigned entry_space = dir->i_sb->s_blocksize - EXT3_DIR_REC_LEN(1) -
-+              EXT3_DIR_REC_LEN(2) - infosize;
-+      return 0? 20: entry_space / sizeof(struct dx_entry);
-+}
-+
-+static inline unsigned dx_node_limit (struct inode *dir)
-+{
-+      unsigned entry_space = dir->i_sb->s_blocksize - EXT3_DIR_REC_LEN(0);
-+      return 0? 22: entry_space / sizeof(struct dx_entry);
-+}
-+
-+/*
-+ * Debug
-+ */
-+#ifdef DX_DEBUG
-+struct stats
-+{ 
-+      unsigned names;
-+      unsigned space;
-+      unsigned bcount;
-+};
-+
-+static struct stats dx_show_leaf(struct dx_hash_info *hinfo, struct ext3_dir_entry_2 *de,
-+                               int size, int show_names)
-+{
-+      unsigned names = 0, space = 0;
-+      char *base = (char *) de;
-+      struct dx_hash_info h = *hinfo;
-+      
-+      printk("names: ");
-+      while ((char *) de < base + size)
-+      {
-+              if (de->inode)
-+              {
-+                      if (show_names)
-+                      {
-+                              int len = de->name_len;
-+                              char *name = de->name;
-+                              while (len--) printk("%c", *name++);
-+                              ext3fs_dirhash(de->name, de->name_len, &h);
-+                              printk(":%x.%u ", h.hash,
-+                                     ((char *) de - base));
-+                      }
-+                      space += EXT3_DIR_REC_LEN(de->name_len);
-+                      names++;
-+              }
-+              de = (struct ext3_dir_entry_2 *) ((char *) de + le16_to_cpu(de->rec_len));
-+      }
-+      printk("(%i)\n", names);
-+      return (struct stats) { names, space, 1 };
-+}
-+
-+struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir,
-+                           struct dx_entry *entries, int levels)
-+{
-+      unsigned blocksize = dir->i_sb->s_blocksize;
-+      unsigned count = dx_get_count (entries), names = 0, space = 0, i;
-+      unsigned bcount = 0;
-+      struct buffer_head *bh;
-+      int err;
-+      printk("%i indexed blocks...\n", count);
-+      for (i = 0; i < count; i++, entries++)
-+      {
-+              u32 block = dx_get_block(entries), hash = i? dx_get_hash(entries): 0;
-+              u32 range = i < count - 1? (dx_get_hash(entries + 1) - hash): ~hash;
-+              struct stats stats;
-+              printk("%s%3u:%03u hash %8x/%8x ",levels?"":"   ", i, block, hash, range);
-+              if (!(bh = ext3_bread (NULL,dir, block, 0,&err))) continue;
-+              stats = levels?
-+                 dx_show_entries(hinfo, dir, ((struct dx_node *) bh->b_data)->entries, levels - 1):
-+                 dx_show_leaf(hinfo, (struct ext3_dir_entry_2 *) bh->b_data, blocksize, 0);
-+              names += stats.names;
-+              space += stats.space;
-+              bcount += stats.bcount;
-+              brelse (bh);
-+      }
-+      if (bcount)
-+              printk("%snames %u, fullness %u (%u%%)\n", levels?"":"   ",
-+                      names, space/bcount,(space/bcount)*100/blocksize);
-+      return (struct stats) { names, space, bcount};
-+}
-+#endif /* DX_DEBUG */
-+
-+/*
-+ * Probe for a directory leaf block to search.
-+ *
-+ * dx_probe can return ERR_BAD_DX_DIR, which means there was a format
-+ * error in the directory index, and the caller should fall back to
-+ * searching the directory normally.  The callers of dx_probe **MUST**
-+ * check for this error code, and make sure it never gets reflected
-+ * back to userspace.
-+ */
-+static struct dx_frame *
-+dx_probe(struct dentry *dentry, struct inode *dir,
-+       struct dx_hash_info *hinfo, struct dx_frame *frame_in, int *err)
-+{
-+      unsigned count, indirect;
-+      struct dx_entry *at, *entries, *p, *q, *m;
-+      struct dx_root *root;
-+      struct buffer_head *bh;
-+      struct dx_frame *frame = frame_in;
-+      u32 hash;
-+
-+      frame->bh = NULL;
-+      if (dentry)
-+              dir = dentry->d_parent->d_inode;
-+      if (!(bh = ext3_bread (NULL,dir, 0, 0, err)))
-+              goto fail;
-+      root = (struct dx_root *) bh->b_data;
-+      if (root->info.hash_version != DX_HASH_TEA &&
-+          root->info.hash_version != DX_HASH_HALF_MD4 &&
-+          root->info.hash_version != DX_HASH_LEGACY) {
-+              ext3_warning(dir->i_sb, __FUNCTION__,
-+                           "Unrecognised inode hash code %d",
-+                           root->info.hash_version);
-+              brelse(bh);
-+              *err = ERR_BAD_DX_DIR;
-+              goto fail;
-+      }
-+      hinfo->hash_version = root->info.hash_version;
-+      hinfo->seed = dir->i_sb->u.ext3_sb.s_hash_seed;
-+      if (dentry)
-+              ext3fs_dirhash(dentry->d_name.name, dentry->d_name.len, hinfo);
-+      hash = hinfo->hash;
-+
-+      if (root->info.unused_flags & 1) {
-+              ext3_warning(dir->i_sb, __FUNCTION__,
-+                           "Unimplemented inode hash flags: %#06x",
-+                           root->info.unused_flags);
-+              brelse(bh);
-+              *err = ERR_BAD_DX_DIR;
-+              goto fail;
-+      }
-+
-+      if ((indirect = root->info.indirect_levels) > 1) {
-+              ext3_warning(dir->i_sb, __FUNCTION__,
-+                           "Unimplemented inode hash depth: %#06x",
-+                           root->info.indirect_levels);
-+              brelse(bh);
-+              *err = ERR_BAD_DX_DIR;
-+              goto fail;
-+      }
-+
-+      entries = (struct dx_entry *) (((char *)&root->info) +
-+                                     root->info.info_length);
-+      assert(dx_get_limit(entries) == dx_root_limit(dir,
-+                                                    root->info.info_length));
-+      dxtrace (printk("Look up %x", hash));
-+      while (1)
-+      {
-+              count = dx_get_count(entries);
-+              assert (count && count <= dx_get_limit(entries));
-+              p = entries + 1;
-+              q = entries + count - 1;
-+              while (p <= q)
-+              {
-+                      m = p + (q - p)/2;
-+                      dxtrace(printk("."));
-+                      if (dx_get_hash(m) > hash)
-+                              q = m - 1;
-+                      else
-+                              p = m + 1;
-+              }
-+
-+              if (0) // linear search cross check
-+              {
-+                      unsigned n = count - 1;
-+                      at = entries;
-+                      while (n--)
-+                      {
-+                              dxtrace(printk(","));
-+                              if (dx_get_hash(++at) > hash)
-+                              {
-+                                      at--;
-+                                      break;
-+                              }
-+                      }
-+                      assert (at == p - 1);
-+              }
-+
-+              at = p - 1;
-+              dxtrace(printk(" %x->%u\n", at == entries? 0: dx_get_hash(at), dx_get_block(at)));
-+              frame->bh = bh;
-+              frame->entries = entries;
-+              frame->at = at;
-+              if (!indirect--) return frame;
-+              if (!(bh = ext3_bread (NULL,dir, dx_get_block(at), 0, err)))
-+                      goto fail2;
-+              at = entries = ((struct dx_node *) bh->b_data)->entries;
-+              assert (dx_get_limit(entries) == dx_node_limit (dir));
-+              frame++;
-+      }
-+fail2:
-+      while (frame >= frame_in) {
-+              brelse(frame->bh);
-+              frame--;
-+      }
-+fail:
-+      return NULL;
-+}
-+
-+static void dx_release (struct dx_frame *frames)
-+{
-+      if (frames[0].bh == NULL)
-+              return;
-+
-+      if (((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels)
-+              brelse(frames[1].bh);
-+      brelse(frames[0].bh);
-+}
-+
-+/*
-+ * This function increments the frame pointer to search the next leaf
-+ * block, and reads in the necessary intervening nodes if the search
-+ * should be necessary.  Whether or not the search is necessary is
-+ * controlled by the hash parameter.  If the hash value is even, then
-+ * the search is only continued if the next block starts with that
-+ * hash value.  This is used if we are searching for a specific file.
-+ *
-+ * If the hash value is HASH_NB_ALWAYS, then always go to the next block.
-+ *
-+ * This function returns 1 if the caller should continue to search,
-+ * or 0 if it should not.  If there is an error reading one of the
-+ * index blocks, it will return -1.
-+ *
-+ * If start_hash is non-null, it will be filled in with the starting
-+ * hash of the next page.
-+ */
-+static int ext3_htree_next_block(struct inode *dir, __u32 hash,
-+                               struct dx_frame *frame,
-+                               struct dx_frame *frames, int *err,
-+                               __u32 *start_hash)
-+{
-+      struct dx_frame *p;
-+      struct buffer_head *bh;
-+      int num_frames = 0;
-+      __u32 bhash;
-+
-+      *err = ENOENT;
-+      p = frame;
-+      /*
-+       * Find the next leaf page by incrementing the frame pointer.
-+       * If we run out of entries in the interior node, loop around and
-+       * increment pointer in the parent node.  When we break out of
-+       * this loop, num_frames indicates the number of interior
-+       * nodes need to be read.
-+       */
-+      while (1) {
-+              if (++(p->at) < p->entries + dx_get_count(p->entries))
-+                      break;
-+              if (p == frames)
-+                      return 0;
-+              num_frames++;
-+              p--;
-+      }
-+
-+      /*
-+       * If the hash is 1, then continue only if the next page has a
-+       * continuation hash of any value.  This is used for readdir
-+       * handling.  Otherwise, check to see if the hash matches the
-+       * desired contiuation hash.  If it doesn't, return since
-+       * there's no point to read in the successive index pages.
-+       */
-+      bhash = dx_get_hash(p->at);
-+      if (start_hash)
-+              *start_hash = bhash;
-+      if ((hash & 1) == 0) {
-+              if ((bhash & ~1) != hash)
-+                      return 0;
-+      }
-+      /*
-+       * If the hash is HASH_NB_ALWAYS, we always go to the next
-+       * block so no check is necessary
-+       */
-+      while (num_frames--) {
-+              if (!(bh = ext3_bread(NULL, dir, dx_get_block(p->at),
-+                                    0, err)))
-+                      return -1; /* Failure */
-+              p++;
-+              brelse (p->bh);
-+              p->bh = bh;
-+              p->at = p->entries = ((struct dx_node *) bh->b_data)->entries;
-+      }
-+      return 1;
-+}
-+
-+
-+/*
-+ * p is at least 6 bytes before the end of page
-+ */
-+static inline struct ext3_dir_entry_2 *ext3_next_entry(struct ext3_dir_entry_2 *p)
-+{
-+      return (struct ext3_dir_entry_2 *)((char*)p + le16_to_cpu(p->rec_len));
-+}
-+
-+/*
-+ * This function fills a red-black tree with information from a
-+ * directory.  We start scanning the directory in hash order, starting
-+ * at start_hash and start_minor_hash.
-+ *
-+ * This function returns the number of entries inserted into the tree,
-+ * or a negative error code.
-+ */
-+int ext3_htree_fill_tree(struct file *dir_file, __u32 start_hash,
-+                       __u32 start_minor_hash, __u32 *next_hash)
-+{
-+      struct dx_hash_info hinfo;
-+      struct buffer_head *bh;
-+      struct ext3_dir_entry_2 *de, *top;
-+      static struct dx_frame frames[2], *frame;
-+      struct inode *dir;
-+      int block, err;
-+      int count = 0;
-+      int ret;
-+      __u32 hashval;
-+      
-+      dxtrace(printk("In htree_fill_tree, start hash: %x:%x\n", start_hash,
-+                     start_minor_hash));
-+      dir = dir_file->f_dentry->d_inode;
-+      hinfo.hash = start_hash;
-+      hinfo.minor_hash = 0;
-+      frame = dx_probe(0, dir_file->f_dentry->d_inode, &hinfo, frames, &err);
-+      if (!frame)
-+              return err;
-+
-+      /* Add '.' and '..' from the htree header */
-+      if (!start_hash && !start_minor_hash) {
-+              de = (struct ext3_dir_entry_2 *) frames[0].bh->b_data;
-+              if ((err = ext3_htree_store_dirent(dir_file, 0, 0, de)) != 0)
-+                      goto errout;
-+              de = ext3_next_entry(de);
-+              if ((err = ext3_htree_store_dirent(dir_file, 0, 0, de)) != 0)
-+                      goto errout;
-+              count += 2;
-+      }
-+
-+      while (1) {
-+              block = dx_get_block(frame->at);
-+              dxtrace(printk("Reading block %d\n", block));
-+              if (!(bh = ext3_bread (NULL, dir, block, 0, &err)))
-+                      goto errout;
-+      
-+              de = (struct ext3_dir_entry_2 *) bh->b_data;
-+              top = (struct ext3_dir_entry_2 *) ((char *) de + dir->i_sb->s_blocksize -
-+                                     EXT3_DIR_REC_LEN(0));
-+              for (; de < top; de = ext3_next_entry(de)) {
-+                      ext3fs_dirhash(de->name, de->name_len, &hinfo);
-+                      if ((hinfo.hash < start_hash) ||
-+                          ((hinfo.hash == start_hash) &&
-+                           (hinfo.minor_hash < start_minor_hash)))
-+                              continue;
-+                      if ((err = ext3_htree_store_dirent(dir_file,
-+                                 hinfo.hash, hinfo.minor_hash, de)) != 0)
-+                              goto errout;
-+                      count++;
-+              }
-+              brelse (bh);
-+              hashval = ~1;
-+              ret = ext3_htree_next_block(dir, HASH_NB_ALWAYS, 
-+                                          frame, frames, &err, &hashval);
-+              if (next_hash)
-+                      *next_hash = hashval;
-+              if (ret == -1)
-+                      goto errout;
-+              /*
-+               * Stop if:  (a) there are no more entries, or
-+               * (b) we have inserted at least one entry and the
-+               * next hash value is not a continuation
-+               */
-+              if ((ret == 0) ||
-+                  (count && ((hashval & 1) == 0)))
-+                      break;
-+      }
-+      dx_release(frames);
-+      dxtrace(printk("Fill tree: returned %d entries\n", count));
-+      return count;
-+errout:
-+      dx_release(frames);
-+      return (err);
-+}
-+
-+
-+/*
-+ * Directory block splitting, compacting
-+ */
-+
-+static int dx_make_map (struct ext3_dir_entry_2 *de, int size,
-+                      struct dx_hash_info *hinfo, struct dx_map_entry *map_tail)
-+{
-+      int count = 0;
-+      char *base = (char *) de;
-+      struct dx_hash_info h = *hinfo;
-+      
-+      while ((char *) de < base + size)
-+      {
-+              if (de->name_len && de->inode) {
-+                      ext3fs_dirhash(de->name, de->name_len, &h);
-+                      map_tail--;
-+                      map_tail->hash = h.hash;
-+                      map_tail->offs = (u32) ((char *) de - base);
-+                      count++;
-+              }
-+              /* XXX: do we need to check rec_len == 0 case? -Chris */
-+              de = (struct ext3_dir_entry_2 *) ((char *) de + le16_to_cpu(de->rec_len));
-+      }
-+      return count;
-+}
-+
-+static void dx_sort_map (struct dx_map_entry *map, unsigned count)
-+{
-+        struct dx_map_entry *p, *q, *top = map + count - 1;
-+        int more;
-+        /* Combsort until bubble sort doesn't suck */
-+        while (count > 2)
-+      {
-+                count = count*10/13;
-+                if (count - 9 < 2) /* 9, 10 -> 11 */
-+                        count = 11;
-+                for (p = top, q = p - count; q >= map; p--, q--)
-+                        if (p->hash < q->hash)
-+                                swap(*p, *q);
-+        }
-+        /* Garden variety bubble sort */
-+        do {
-+                more = 0;
-+                q = top;
-+                while (q-- > map)
-+              {
-+                        if (q[1].hash >= q[0].hash)
-+                              continue;
-+                        swap(*(q+1), *q);
-+                        more = 1;
-+              }
-+      } while(more);
-+}
-+
-+static void dx_insert_block(struct dx_frame *frame, u32 hash, u32 block)
-+{
-+      struct dx_entry *entries = frame->entries;
-+      struct dx_entry *old = frame->at, *new = old + 1;
-+      int count = dx_get_count(entries);
-+
-+      assert(count < dx_get_limit(entries));
-+      assert(old < entries + count);
-+      memmove(new + 1, new, (char *)(entries + count) - (char *)(new));
-+      dx_set_hash(new, hash);
-+      dx_set_block(new, block);
-+      dx_set_count(entries, count + 1);
-+}
-+#endif
-+
-+
-+static void ext3_update_dx_flag(struct inode *inode)
-+{
-+      if (!EXT3_HAS_COMPAT_FEATURE(inode->i_sb,
-+                                   EXT3_FEATURE_COMPAT_DIR_INDEX))
-+              EXT3_I(inode)->i_flags &= ~EXT3_INDEX_FL;
-+}
-+
- /*
-  * NOTE! unlike strncmp, ext3_match returns 1 for success, 0 for failure.
-  *
-@@ -94,6 +736,7 @@ static int inline search_dirblock(struct
-       return 0;
- }
-+
- /*
-  *    ext3_find_entry()
-  *
-@@ -105,6 +748,8 @@ static int inline search_dirblock(struct
-  * The returned buffer_head has ->b_count elevated.  The caller is expected
-  * to brelse() it when appropriate.
-  */
-+
-+      
- static struct buffer_head * ext3_find_entry (struct dentry *dentry,
-                                       struct ext3_dir_entry_2 ** res_dir)
- {
-@@ -119,12 +764,32 @@ static struct buffer_head * ext3_find_en
-       int num = 0;
-       int nblocks, i, err;
-       struct inode *dir = dentry->d_parent->d_inode;
-+      int namelen;
-+      const u8 *name;
-+      unsigned blocksize;
-       *res_dir = NULL;
-       sb = dir->i_sb;
--
-+      blocksize = sb->s_blocksize;
-+      namelen = dentry->d_name.len;
-+      name = dentry->d_name.name;
-+      if (namelen > EXT3_NAME_LEN)
-+              return NULL;
-+#ifdef CONFIG_EXT3_INDEX
-+      if (is_dx(dir)) {
-+              bh = ext3_dx_find_entry(dentry, res_dir, &err);
-+              /*
-+               * On success, or if the error was file not found,
-+               * return.  Otherwise, fall back to doing a search the
-+               * old fashioned way.
-+               */
-+              if (bh || (err != ERR_BAD_DX_DIR))
-+                      return bh;
-+              dxtrace(printk("ext3_find_entry: dx failed, falling back\n"));
-+      }
-+#endif
-       nblocks = dir->i_size >> EXT3_BLOCK_SIZE_BITS(sb);
--      start = dir->u.ext3_i.i_dir_start_lookup;
-+      start = EXT3_I(dir)->i_dir_start_lookup;
-       if (start >= nblocks)
-               start = 0;
-       block = start;
-@@ -166,7 +831,7 @@ restart:
-               i = search_dirblock(bh, dir, dentry,
-                           block << EXT3_BLOCK_SIZE_BITS(sb), res_dir);
-               if (i == 1) {
--                      dir->u.ext3_i.i_dir_start_lookup = block;
-+                      EXT3_I(dir)->i_dir_start_lookup = block;
-                       ret = bh;
-                       goto cleanup_and_exit;
-               } else {
-@@ -197,6 +862,66 @@ cleanup_and_exit:
-       return ret;
- }
-+#ifdef CONFIG_EXT3_INDEX
-+static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
-+                     struct ext3_dir_entry_2 **res_dir, int *err)
-+{
-+      struct super_block * sb;
-+      struct dx_hash_info     hinfo;
-+      u32 hash;
-+      struct dx_frame frames[2], *frame;
-+      struct ext3_dir_entry_2 *de, *top;
-+      struct buffer_head *bh;
-+      unsigned long block;
-+      int retval;
-+      int namelen = dentry->d_name.len;
-+      const u8 *name = dentry->d_name.name;
-+      struct inode *dir = dentry->d_parent->d_inode;
-+      
-+      sb = dir->i_sb;
-+      if (!(frame = dx_probe (dentry, 0, &hinfo, frames, err)))
-+              return NULL;
-+      hash = hinfo.hash;
-+      do {
-+              block = dx_get_block(frame->at);
-+              if (!(bh = ext3_bread (NULL,dir, block, 0, err)))
-+                      goto errout;
-+              de = (struct ext3_dir_entry_2 *) bh->b_data;
-+              top = (struct ext3_dir_entry_2 *) ((char *) de + sb->s_blocksize -
-+                                     EXT3_DIR_REC_LEN(0));
-+              for (; de < top; de = ext3_next_entry(de))
-+              if (ext3_match (namelen, name, de)) {
-+                      if (!ext3_check_dir_entry("ext3_find_entry",
-+                                                dir, de, bh,
-+                                (block<<EXT3_BLOCK_SIZE_BITS(sb))
-+                                        +((char *)de - bh->b_data))) {
-+                              brelse (bh);
-+                              goto errout;
-+                      }
-+                      *res_dir = de;
-+                      dx_release (frames);
-+                      return bh;
-+              }
-+              brelse (bh);
-+              /* Check to see if we should continue to search */
-+              retval = ext3_htree_next_block(dir, hash, frame,
-+                                             frames, err, 0);
-+              if (retval == -1) {
-+                      ext3_warning(sb, __FUNCTION__,
-+                           "error reading index page in directory #%lu",
-+                           dir->i_ino);
-+                      goto errout;
-+              }
-+      } while (retval == 1);
-+      
-+      *err = -ENOENT;
-+errout:
-+      dxtrace(printk("%s not found\n", name));
-+      dx_release (frames);
-+      return NULL;
-+}
-+#endif
-+
- static struct dentry *ext3_lookup(struct inode * dir, struct dentry *dentry)
- {
-       struct inode * inode;
-@@ -213,8 +938,9 @@ static struct dentry *ext3_lookup(struct
-               brelse (bh);
-               inode = iget(dir->i_sb, ino);
--              if (!inode)
-+              if (!inode) {
-                       return ERR_PTR(-EACCES);
-+              }
-       }
-       d_add(dentry, inode);
-       return NULL;
-@@ -238,6 +964,301 @@ static inline void ext3_set_de_type(stru
-               de->file_type = ext3_type_by_mode[(mode & S_IFMT)>>S_SHIFT];
- }
-+#ifdef CONFIG_EXT3_INDEX
-+static struct ext3_dir_entry_2 *
-+dx_move_dirents(char *from, char *to, struct dx_map_entry *map, int count)
-+{
-+      unsigned rec_len = 0;
-+
-+      while (count--) {
-+              struct ext3_dir_entry_2 *de = (struct ext3_dir_entry_2 *) (from + map->offs);
-+              rec_len = EXT3_DIR_REC_LEN(de->name_len);
-+              memcpy (to, de, rec_len);
-+              ((struct ext3_dir_entry_2 *)to)->rec_len = cpu_to_le16(rec_len);
-+              de->inode = 0;
-+              map++;
-+              to += rec_len;
-+      }
-+      return (struct ext3_dir_entry_2 *) (to - rec_len);
-+}
-+
-+static struct ext3_dir_entry_2* dx_pack_dirents(char *base, int size)
-+{
-+      struct ext3_dir_entry_2 *next, *to, *prev, *de = (struct ext3_dir_entry_2 *) base;
-+      unsigned rec_len = 0;
-+
-+      prev = to = de;
-+      while ((char*)de < base + size) {
-+              next = (struct ext3_dir_entry_2 *) ((char *) de +
-+                                                  le16_to_cpu(de->rec_len));
-+              if (de->inode && de->name_len) {
-+                      rec_len = EXT3_DIR_REC_LEN(de->name_len);
-+                      if (de > to)
-+                              memmove(to, de, rec_len);
-+                      to->rec_len = cpu_to_le16(rec_len);
-+                      prev = to;
-+                      to = (struct ext3_dir_entry_2 *)((char *)to + rec_len);
-+              }
-+              de = next;
-+      }
-+      return prev;
-+}
-+
-+static struct ext3_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
-+                      struct buffer_head **bh,struct dx_frame *frame,
-+                      struct dx_hash_info *hinfo, int *error)
-+{
-+      unsigned blocksize = dir->i_sb->s_blocksize;
-+      unsigned count, continued;
-+      struct buffer_head *bh2;
-+      u32 newblock;
-+      u32 hash2;
-+      struct dx_map_entry *map;
-+      char *data1 = (*bh)->b_data, *data2;
-+      unsigned split;
-+      struct ext3_dir_entry_2 *de = NULL, *de2;
-+      int     err;
-+
-+      bh2 = ext3_append (handle, dir, &newblock, error);
-+      if (!(bh2)) {
-+              brelse(*bh);
-+              *bh = NULL;
-+              goto errout;
-+      }
-+
-+      BUFFER_TRACE(*bh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, *bh);
-+      if (err) {
-+      journal_error:
-+              brelse(*bh);
-+              brelse(bh2);
-+              *bh = NULL;
-+              ext3_std_error(dir->i_sb, err);
-+              goto errout;
-+      }
-+      BUFFER_TRACE(frame->bh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, frame->bh);
-+      if (err)
-+              goto journal_error;
-+
-+      data2 = bh2->b_data;
-+
-+      /* create map in the end of data2 block */
-+      map = (struct dx_map_entry *) (data2 + blocksize);
-+      count = dx_make_map ((struct ext3_dir_entry_2 *) data1,
-+                           blocksize, hinfo, map);
-+      map -= count;
-+      split = count/2; // need to adjust to actual middle
-+      dx_sort_map (map, count);
-+      hash2 = map[split].hash;
-+      continued = hash2 == map[split - 1].hash;
-+      dxtrace(printk("Split block %i at %x, %i/%i\n",
-+              dx_get_block(frame->at), hash2, split, count-split));
-+
-+      /* Fancy dance to stay within two buffers */
-+      de2 = dx_move_dirents(data1, data2, map + split, count - split);
-+      de = dx_pack_dirents(data1,blocksize);
-+      de->rec_len = cpu_to_le16(data1 + blocksize - (char *) de);
-+      de2->rec_len = cpu_to_le16(data2 + blocksize - (char *) de2);
-+      dxtrace(dx_show_leaf (hinfo, (struct ext3_dir_entry_2 *) data1, blocksize, 1));
-+      dxtrace(dx_show_leaf (hinfo, (struct ext3_dir_entry_2 *) data2, blocksize, 1));
-+
-+      /* Which block gets the new entry? */
-+      if (hinfo->hash >= hash2)
-+      {
-+              swap(*bh, bh2);
-+              de = de2;
-+      }
-+      dx_insert_block (frame, hash2 + continued, newblock);
-+      err = ext3_journal_dirty_metadata (handle, bh2);
-+      if (err)
-+              goto journal_error;
-+      err = ext3_journal_dirty_metadata (handle, frame->bh);
-+      if (err)
-+              goto journal_error;
-+      brelse (bh2);
-+      dxtrace(dx_show_index ("frame", frame->entries));
-+errout:
-+      return de;
-+}
-+#endif
-+
-+
-+/*
-+ * Add a new entry into a directory (leaf) block.  If de is non-NULL,
-+ * it points to a directory entry which is guaranteed to be large
-+ * enough for new directory entry.  If de is NULL, then
-+ * add_dirent_to_buf will attempt search the directory block for
-+ * space.  It will return -ENOSPC if no space is available, and -EIO
-+ * and -EEXIST if directory entry already exists.
-+ * 
-+ * NOTE!  bh is NOT released in the case where ENOSPC is returned.  In
-+ * all other cases bh is released.
-+ */
-+static int add_dirent_to_buf(handle_t *handle, struct dentry *dentry,
-+                           struct inode *inode, struct ext3_dir_entry_2 *de,
-+                           struct buffer_head * bh)
-+{
-+      struct inode    *dir = dentry->d_parent->d_inode;
-+      const char      *name = dentry->d_name.name;
-+      int             namelen = dentry->d_name.len;
-+      unsigned long   offset = 0;
-+      unsigned short  reclen;
-+      int             nlen, rlen, err;
-+      char            *top;
-+      
-+      reclen = EXT3_DIR_REC_LEN(namelen);
-+      if (!de) {
-+              de = (struct ext3_dir_entry_2 *)bh->b_data;
-+              top = bh->b_data + dir->i_sb->s_blocksize - reclen;
-+              while ((char *) de <= top) {
-+                      if (!ext3_check_dir_entry("ext3_add_entry", dir, de,
-+                                                bh, offset)) {
-+                              brelse (bh);
-+                              return -EIO;
-+                      }
-+                      if (ext3_match (namelen, name, de)) {
-+                              brelse (bh);
-+                              return -EEXIST;
-+                      }
-+                      nlen = EXT3_DIR_REC_LEN(de->name_len);
-+                      rlen = le16_to_cpu(de->rec_len);
-+                      if ((de->inode? rlen - nlen: rlen) >= reclen)
-+                              break;
-+                      de = (struct ext3_dir_entry_2 *)((char *)de + rlen);
-+                      offset += rlen;
-+              }
-+              if ((char *) de > top)
-+                      return -ENOSPC;
-+      }
-+      BUFFER_TRACE(bh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, bh);
-+      if (err) {
-+              ext3_std_error(dir->i_sb, err);
-+              brelse(bh);
-+              return err;
-+      }
-+      
-+      /* By now the buffer is marked for journaling */
-+      nlen = EXT3_DIR_REC_LEN(de->name_len);
-+      rlen = le16_to_cpu(de->rec_len);
-+      if (de->inode) {
-+              struct ext3_dir_entry_2 *de1 = (struct ext3_dir_entry_2 *)((char *)de + nlen);
-+              de1->rec_len = cpu_to_le16(rlen - nlen);
-+              de->rec_len = cpu_to_le16(nlen);
-+              de = de1;
-+      }
-+      de->file_type = EXT3_FT_UNKNOWN;
-+      if (inode) {
-+              de->inode = cpu_to_le32(inode->i_ino);
-+              ext3_set_de_type(dir->i_sb, de, inode->i_mode);
-+      } else
-+              de->inode = 0;
-+      de->name_len = namelen;
-+      memcpy (de->name, name, namelen);
-+      /*
-+       * XXX shouldn't update any times until successful
-+       * completion of syscall, but too many callers depend
-+       * on this.
-+       *
-+       * XXX similarly, too many callers depend on
-+       * ext3_new_inode() setting the times, but error
-+       * recovery deletes the inode, so the worst that can
-+       * happen is that the times are slightly out of date
-+       * and/or different from the directory change time.
-+       */
-+      dir->i_mtime = dir->i_ctime = CURRENT_TIME;
-+      ext3_update_dx_flag(dir);
-+      dir->i_version = ++event;
-+      ext3_mark_inode_dirty(handle, dir);
-+      BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-+      err = ext3_journal_dirty_metadata(handle, bh);
-+      if (err)
-+              ext3_std_error(dir->i_sb, err);
-+      brelse(bh);
-+      return 0;
-+}
-+
-+#ifdef CONFIG_EXT3_INDEX
-+/*
-+ * This converts a one block unindexed directory to a 3 block indexed
-+ * directory, and adds the dentry to the indexed directory.
-+ */
-+static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
-+                          struct inode *inode, struct buffer_head *bh)
-+{
-+      struct inode    *dir = dentry->d_parent->d_inode;
-+      const char      *name = dentry->d_name.name;
-+      int             namelen = dentry->d_name.len;
-+      struct buffer_head *bh2;
-+      struct dx_root  *root;
-+      struct dx_frame frames[2], *frame;
-+      struct dx_entry *entries;
-+      struct ext3_dir_entry_2 *de, *de2;
-+      char            *data1, *top;
-+      unsigned        len;
-+      int             retval;
-+      unsigned        blocksize;
-+      struct dx_hash_info hinfo;
-+      u32             block;
-+              
-+      blocksize =  dir->i_sb->s_blocksize;
-+      dxtrace(printk("Creating index\n"));
-+      retval = ext3_journal_get_write_access(handle, bh);
-+      if (retval) {
-+              ext3_std_error(dir->i_sb, retval);
-+              brelse(bh);
-+              return retval;
-+      }
-+      root = (struct dx_root *) bh->b_data;
-+              
-+      EXT3_I(dir)->i_flags |= EXT3_INDEX_FL;
-+      bh2 = ext3_append (handle, dir, &block, &retval);
-+      if (!(bh2)) {
-+              brelse(bh);
-+              return retval;
-+      }
-+      data1 = bh2->b_data;
-+
-+      /* The 0th block becomes the root, move the dirents out */
-+      de = (struct ext3_dir_entry_2 *)&root->dotdot;
-+      de = (struct ext3_dir_entry_2 *)((char *)de + le16_to_cpu(de->rec_len));
-+      len = ((char *) root) + blocksize - (char *) de;
-+      memcpy (data1, de, len);
-+      de = (struct ext3_dir_entry_2 *) data1;
-+      top = data1 + len;
-+      while (((char *) de2=(char*)de+le16_to_cpu(de->rec_len)) < top)
-+              de = de2;
-+      de->rec_len = cpu_to_le16(data1 + blocksize - (char *) de);
-+      /* Initialize the root; the dot dirents already exist */
-+      de = (struct ext3_dir_entry_2 *) (&root->dotdot);
-+      de->rec_len = cpu_to_le16(blocksize - EXT3_DIR_REC_LEN(2));
-+      memset (&root->info, 0, sizeof(root->info));
-+      root->info.info_length = sizeof(root->info);
-+      root->info.hash_version = dir->i_sb->u.ext3_sb.s_def_hash_version;
-+      entries = root->entries;
-+      dx_set_block (entries, 1);
-+      dx_set_count (entries, 1);
-+      dx_set_limit (entries, dx_root_limit(dir, sizeof(root->info)));
-+
-+      /* Initialize as for dx_probe */
-+      hinfo.hash_version = root->info.hash_version;
-+      hinfo.seed = dir->i_sb->u.ext3_sb.s_hash_seed;
-+      ext3fs_dirhash(name, namelen, &hinfo);
-+      frame = frames;
-+      frame->entries = entries;
-+      frame->at = entries;
-+      frame->bh = bh;
-+      bh = bh2;
-+      de = do_split(handle,dir, &bh, frame, &hinfo, &retval);
-+      dx_release (frames);
-+      if (!(de))
-+              return retval;
-+
-+      return add_dirent_to_buf(handle, dentry, inode, de, bh);
-+}
-+#endif
-+
- /*
-  *    ext3_add_entry()
-  *
-@@ -248,127 +1268,198 @@ static inline void ext3_set_de_type(stru
-  * may not sleep between calling this and putting something into
-  * the entry, as someone else might have used it while you slept.
-  */
--
--/*
-- * AKPM: the journalling code here looks wrong on the error paths
-- */
- static int ext3_add_entry (handle_t *handle, struct dentry *dentry,
-       struct inode *inode)
- {
-       struct inode *dir = dentry->d_parent->d_inode;
--      const char *name = dentry->d_name.name;
--      int namelen = dentry->d_name.len;
-       unsigned long offset;
--      unsigned short rec_len;
-       struct buffer_head * bh;
--      struct ext3_dir_entry_2 * de, * de1;
-+      struct ext3_dir_entry_2 *de;
-       struct super_block * sb;
-       int     retval;
-+#ifdef CONFIG_EXT3_INDEX
-+      int     dx_fallback=0;
-+#endif
-+      unsigned blocksize;
-+      unsigned nlen, rlen;
-+      u32 block, blocks;
-       sb = dir->i_sb;
--
--      if (!namelen)
-+      blocksize = sb->s_blocksize;
-+      if (!dentry->d_name.len)
-               return -EINVAL;
--      bh = ext3_bread (handle, dir, 0, 0, &retval);
-+#ifdef CONFIG_EXT3_INDEX
-+      if (is_dx(dir)) {
-+              retval = ext3_dx_add_entry(handle, dentry, inode);
-+              if (!retval || (retval != ERR_BAD_DX_DIR))
-+                      return retval;
-+              EXT3_I(dir)->i_flags &= ~EXT3_INDEX_FL;
-+              dx_fallback++;
-+              ext3_mark_inode_dirty(handle, dir);
-+      }
-+#endif
-+      blocks = dir->i_size >> sb->s_blocksize_bits;
-+      for (block = 0, offset = 0; block < blocks; block++) {
-+              bh = ext3_bread(handle, dir, block, 0, &retval);
-+              if(!bh)
-+                      return retval;
-+              retval = add_dirent_to_buf(handle, dentry, inode, 0, bh);
-+              if (retval != -ENOSPC)
-+                      return retval;
-+
-+#ifdef CONFIG_EXT3_INDEX
-+              if (blocks == 1 && !dx_fallback &&
-+                  EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_DIR_INDEX))
-+                      return make_indexed_dir(handle, dentry, inode, bh);
-+#endif
-+              brelse(bh);
-+      }
-+      bh = ext3_append(handle, dir, &block, &retval);
-       if (!bh)
-               return retval;
--      rec_len = EXT3_DIR_REC_LEN(namelen);
--      offset = 0;
-       de = (struct ext3_dir_entry_2 *) bh->b_data;
--      while (1) {
--              if ((char *)de >= sb->s_blocksize + bh->b_data) {
--                      brelse (bh);
--                      bh = NULL;
--                      bh = ext3_bread (handle, dir,
--                              offset >> EXT3_BLOCK_SIZE_BITS(sb), 1, &retval);
--                      if (!bh)
--                              return retval;
--                      if (dir->i_size <= offset) {
--                              if (dir->i_size == 0) {
--                                      brelse(bh);
--                                      return -ENOENT;
--                              }
-+      de->inode = 0;
-+      de->rec_len = cpu_to_le16(rlen = blocksize);
-+      nlen = 0;
-+      return add_dirent_to_buf(handle, dentry, inode, de, bh);
-+}
--                              ext3_debug ("creating next block\n");
-+#ifdef CONFIG_EXT3_INDEX
-+/*
-+ * Returns 0 for success, or a negative error value
-+ */
-+static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry,
-+                           struct inode *inode)
-+{
-+      struct dx_frame frames[2], *frame;
-+      struct dx_entry *entries, *at;
-+      struct dx_hash_info hinfo;
-+      struct buffer_head * bh;
-+      struct inode *dir = dentry->d_parent->d_inode;
-+      struct super_block * sb = dir->i_sb;
-+      struct ext3_dir_entry_2 *de;
-+      int err;
--                              BUFFER_TRACE(bh, "get_write_access");
--                              ext3_journal_get_write_access(handle, bh);
--                              de = (struct ext3_dir_entry_2 *) bh->b_data;
--                              de->inode = 0;
--                              de->rec_len = le16_to_cpu(sb->s_blocksize);
--                              dir->u.ext3_i.i_disksize =
--                                      dir->i_size = offset + sb->s_blocksize;
--                              dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
--                              ext3_mark_inode_dirty(handle, dir);
--                      } else {
-+      frame = dx_probe(dentry, 0, &hinfo, frames, &err);
-+      if (!frame)
-+              return err;
-+      entries = frame->entries;
-+      at = frame->at;
--                              ext3_debug ("skipping to next block\n");
-+      if (!(bh = ext3_bread(handle,dir, dx_get_block(frame->at), 0, &err)))
-+              goto cleanup;
--                              de = (struct ext3_dir_entry_2 *) bh->b_data;
--                      }
--              }
--              if (!ext3_check_dir_entry ("ext3_add_entry", dir, de, bh,
--                                         offset)) {
--                      brelse (bh);
--                      return -ENOENT;
--              }
--              if (ext3_match (namelen, name, de)) {
--                              brelse (bh);
--                              return -EEXIST;
-+      BUFFER_TRACE(bh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, bh);
-+      if (err)
-+              goto journal_error;
-+
-+      err = add_dirent_to_buf(handle, dentry, inode, 0, bh);
-+      if (err != -ENOSPC) {
-+              bh = 0;
-+              goto cleanup;
-+      }
-+
-+      /* Block full, should compress but for now just split */
-+      dxtrace(printk("using %u of %u node entries\n",
-+                     dx_get_count(entries), dx_get_limit(entries)));
-+      /* Need to split index? */
-+      if (dx_get_count(entries) == dx_get_limit(entries)) {
-+              u32 newblock;
-+              unsigned icount = dx_get_count(entries);
-+              int levels = frame - frames;
-+              struct dx_entry *entries2;
-+              struct dx_node *node2;
-+              struct buffer_head *bh2;
-+
-+              if (levels && (dx_get_count(frames->entries) ==
-+                             dx_get_limit(frames->entries))) {
-+                      ext3_warning(sb, __FUNCTION__,
-+                                   "Directory index full!\n");
-+                      err = -ENOSPC;
-+                      goto cleanup;
-               }
--              if ((le32_to_cpu(de->inode) == 0 &&
--                              le16_to_cpu(de->rec_len) >= rec_len) ||
--                  (le16_to_cpu(de->rec_len) >=
--                              EXT3_DIR_REC_LEN(de->name_len) + rec_len)) {
--                      BUFFER_TRACE(bh, "get_write_access");
--                      ext3_journal_get_write_access(handle, bh);
--                      /* By now the buffer is marked for journaling */
--                      offset += le16_to_cpu(de->rec_len);
--                      if (le32_to_cpu(de->inode)) {
--                              de1 = (struct ext3_dir_entry_2 *) ((char *) de +
--                                      EXT3_DIR_REC_LEN(de->name_len));
--                              de1->rec_len =
--                                      cpu_to_le16(le16_to_cpu(de->rec_len) -
--                                      EXT3_DIR_REC_LEN(de->name_len));
--                              de->rec_len = cpu_to_le16(
--                                              EXT3_DIR_REC_LEN(de->name_len));
--                              de = de1;
-+              bh2 = ext3_append (handle, dir, &newblock, &err);
-+              if (!(bh2))
-+                      goto cleanup;
-+              node2 = (struct dx_node *)(bh2->b_data);
-+              entries2 = node2->entries;
-+              node2->fake.rec_len = cpu_to_le16(sb->s_blocksize);
-+              node2->fake.inode = 0;
-+              BUFFER_TRACE(frame->bh, "get_write_access");
-+              err = ext3_journal_get_write_access(handle, frame->bh);
-+              if (err)
-+                      goto journal_error;
-+              if (levels) {
-+                      unsigned icount1 = icount/2, icount2 = icount - icount1;
-+                      unsigned hash2 = dx_get_hash(entries + icount1);
-+                      dxtrace(printk("Split index %i/%i\n", icount1, icount2));
-+                              
-+                      BUFFER_TRACE(frame->bh, "get_write_access"); /* index root */
-+                      err = ext3_journal_get_write_access(handle,
-+                                                           frames[0].bh);
-+                      if (err)
-+                              goto journal_error;
-+                              
-+                      memcpy ((char *) entries2, (char *) (entries + icount1),
-+                              icount2 * sizeof(struct dx_entry));
-+                      dx_set_count (entries, icount1);
-+                      dx_set_count (entries2, icount2);
-+                      dx_set_limit (entries2, dx_node_limit(dir));
-+
-+                      /* Which index block gets the new entry? */
-+                      if (at - entries >= icount1) {
-+                              frame->at = at = at - entries - icount1 + entries2;
-+                              frame->entries = entries = entries2;
-+                              swap(frame->bh, bh2);
-                       }
--                      de->file_type = EXT3_FT_UNKNOWN;
--                      if (inode) {
--                              de->inode = cpu_to_le32(inode->i_ino);
--                              ext3_set_de_type(dir->i_sb, de, inode->i_mode);
--                      } else
--                              de->inode = 0;
--                      de->name_len = namelen;
--                      memcpy (de->name, name, namelen);
--                      /*
--                       * XXX shouldn't update any times until successful
--                       * completion of syscall, but too many callers depend
--                       * on this.
--                       *
--                       * XXX similarly, too many callers depend on
--                       * ext3_new_inode() setting the times, but error
--                       * recovery deletes the inode, so the worst that can
--                       * happen is that the times are slightly out of date
--                       * and/or different from the directory change time.
--                       */
--                      dir->i_mtime = dir->i_ctime = CURRENT_TIME;
--                      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
--                      dir->i_version = ++event;
--                      ext3_mark_inode_dirty(handle, dir);
--                      BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
--                      ext3_journal_dirty_metadata(handle, bh);
--                      brelse(bh);
--                      return 0;
-+                      dx_insert_block (frames + 0, hash2, newblock);
-+                      dxtrace(dx_show_index ("node", frames[1].entries));
-+                      dxtrace(dx_show_index ("node",
-+                             ((struct dx_node *) bh2->b_data)->entries));
-+                      err = ext3_journal_dirty_metadata(handle, bh2);
-+                      if (err)
-+                              goto journal_error;
-+                      brelse (bh2);
-+              } else {
-+                      dxtrace(printk("Creating second level index...\n"));
-+                      memcpy((char *) entries2, (char *) entries,
-+                             icount * sizeof(struct dx_entry));
-+                      dx_set_limit(entries2, dx_node_limit(dir));
-+
-+                      /* Set up root */
-+                      dx_set_count(entries, 1);
-+                      dx_set_block(entries + 0, newblock);
-+                      ((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels = 1;
-+
-+                      /* Add new access path frame */
-+                      frame = frames + 1;
-+                      frame->at = at = at - entries + entries2;
-+                      frame->entries = entries = entries2;
-+                      frame->bh = bh2;
-+                      err = ext3_journal_get_write_access(handle,
-+                                                           frame->bh);
-+                      if (err)
-+                              goto journal_error;
-               }
--              offset += le16_to_cpu(de->rec_len);
--              de = (struct ext3_dir_entry_2 *)
--                      ((char *) de + le16_to_cpu(de->rec_len));
-+              ext3_journal_dirty_metadata(handle, frames[0].bh);
-       }
--      brelse (bh);
--      return -ENOSPC;
-+      de = do_split(handle, dir, &bh, frame, &hinfo, &err);
-+      if (!de)
-+              goto cleanup;
-+      err = add_dirent_to_buf(handle, dentry, inode, de, bh);
-+      bh = 0;
-+      goto cleanup;
-+      
-+journal_error:
-+      ext3_std_error(dir->i_sb, err);
-+cleanup:
-+      if (bh)
-+              brelse(bh);
-+      dx_release(frames);
-+      return err;
- }
-+#endif
- /*
-  * ext3_delete_entry deletes a directory entry by merging it with the
-@@ -452,9 +1543,11 @@ static int ext3_create (struct inode * d
-       struct inode * inode;
-       int err;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -479,9 +1572,11 @@ static int ext3_mknod (struct inode * di
-       struct inode *inode;
-       int err;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -508,9 +1603,11 @@ static int ext3_mkdir(struct inode * dir
-       if (dir->i_nlink >= EXT3_LINK_MAX)
-               return -EMLINK;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -522,7 +1619,7 @@ static int ext3_mkdir(struct inode * dir
-       inode->i_op = &ext3_dir_inode_operations;
-       inode->i_fop = &ext3_dir_operations;
--      inode->i_size = inode->u.ext3_i.i_disksize = inode->i_sb->s_blocksize;
-+      inode->i_size = EXT3_I(inode)->i_disksize = inode->i_sb->s_blocksize;
-       inode->i_blocks = 0;    
-       dir_block = ext3_bread (handle, inode, 0, 1, &err);
-       if (!dir_block) {
-@@ -555,21 +1652,19 @@ static int ext3_mkdir(struct inode * dir
-               inode->i_mode |= S_ISGID;
-       ext3_mark_inode_dirty(handle, inode);
-       err = ext3_add_entry (handle, dentry, inode);
--      if (err)
--              goto out_no_entry;
-+      if (err) {
-+              inode->i_nlink = 0;
-+              ext3_mark_inode_dirty(handle, inode);
-+              iput (inode);
-+              goto out_stop;
-+      }
-       dir->i_nlink++;
--      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(dir);
-       ext3_mark_inode_dirty(handle, dir);
-       d_instantiate(dentry, inode);
- out_stop:
-       ext3_journal_stop(handle, dir);
-       return err;
--
--out_no_entry:
--      inode->i_nlink = 0;
--      ext3_mark_inode_dirty(handle, inode);
--      iput (inode);
--      goto out_stop;
- }
- /*
-@@ -656,7 +1751,7 @@ int ext3_orphan_add(handle_t *handle, st
-       int err = 0, rc;
-       
-       lock_super(sb);
--      if (!list_empty(&inode->u.ext3_i.i_orphan))
-+      if (!list_empty(&EXT3_I(inode)->i_orphan))
-               goto out_unlock;
-       /* Orphan handling is only valid for files with data blocks
-@@ -697,7 +1792,7 @@ int ext3_orphan_add(handle_t *handle, st
-        * This is safe: on error we're going to ignore the orphan list
-        * anyway on the next recovery. */
-       if (!err)
--              list_add(&inode->u.ext3_i.i_orphan, &EXT3_SB(sb)->s_orphan);
-+              list_add(&EXT3_I(inode)->i_orphan, &EXT3_SB(sb)->s_orphan);
-       jbd_debug(4, "superblock will point to %ld\n", inode->i_ino);
-       jbd_debug(4, "orphan inode %ld will point to %d\n",
-@@ -715,25 +1810,26 @@ out_unlock:
- int ext3_orphan_del(handle_t *handle, struct inode *inode)
- {
-       struct list_head *prev;
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-       struct ext3_sb_info *sbi;
-       ino_t ino_next; 
-       struct ext3_iloc iloc;
-       int err = 0;
-       
-       lock_super(inode->i_sb);
--      if (list_empty(&inode->u.ext3_i.i_orphan)) {
-+      if (list_empty(&ei->i_orphan)) {
-               unlock_super(inode->i_sb);
-               return 0;
-       }
-       ino_next = NEXT_ORPHAN(inode);
--      prev = inode->u.ext3_i.i_orphan.prev;
-+      prev = ei->i_orphan.prev;
-       sbi = EXT3_SB(inode->i_sb);
-       jbd_debug(4, "remove inode %ld from orphan list\n", inode->i_ino);
--      list_del(&inode->u.ext3_i.i_orphan);
--      INIT_LIST_HEAD(&inode->u.ext3_i.i_orphan);
-+      list_del(&ei->i_orphan);
-+      INIT_LIST_HEAD(&ei->i_orphan);
-       /* If we're on an error path, we may not have a valid
-        * transaction handle with which to update the orphan list on
-@@ -794,8 +1890,9 @@ static int ext3_rmdir (struct inode * di
-       handle_t *handle;
-       handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS);
--      if (IS_ERR(handle))
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       retval = -ENOENT;
-       bh = ext3_find_entry (dentry, &de);
-@@ -833,7 +1930,7 @@ static int ext3_rmdir (struct inode * di
-       dir->i_nlink--;
-       inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
-       ext3_mark_inode_dirty(handle, inode);
--      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(dir);
-       ext3_mark_inode_dirty(handle, dir);
- end_rmdir:
-@@ -851,8 +1948,9 @@ static int ext3_unlink(struct inode * di
-       handle_t *handle;
-       handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS);
--      if (IS_ERR(handle))
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -879,7 +1977,7 @@ static int ext3_unlink(struct inode * di
-       if (retval)
-               goto end_unlink;
-       dir->i_ctime = dir->i_mtime = CURRENT_TIME;
--      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(dir);
-       ext3_mark_inode_dirty(handle, dir);
-       inode->i_nlink--;
-       if (!inode->i_nlink)
-@@ -905,9 +2003,11 @@ static int ext3_symlink (struct inode * 
-       if (l > dir->i_sb->s_blocksize)
-               return -ENAMETOOLONG;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 5);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 5);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -917,7 +2017,7 @@ static int ext3_symlink (struct inode * 
-       if (IS_ERR(inode))
-               goto out_stop;
--      if (l > sizeof (inode->u.ext3_i.i_data)) {
-+      if (l > sizeof (EXT3_I(inode)->i_data)) {
-               inode->i_op = &page_symlink_inode_operations;
-               inode->i_mapping->a_ops = &ext3_aops;
-               /*
-@@ -926,25 +2026,23 @@ static int ext3_symlink (struct inode * 
-                * i_size in generic_commit_write().
-                */
-               err = block_symlink(inode, symname, l);
--              if (err)
--                      goto out_no_entry;
-+              if (err) {
-+                      ext3_dec_count(handle, inode);
-+                      ext3_mark_inode_dirty(handle, inode);
-+                      iput (inode);
-+                      goto out_stop;
-+              }
-       } else {
-               inode->i_op = &ext3_fast_symlink_inode_operations;
--              memcpy((char*)&inode->u.ext3_i.i_data,symname,l);
-+              memcpy((char*)&EXT3_I(inode)->i_data,symname,l);
-               inode->i_size = l-1;
-       }
--      inode->u.ext3_i.i_disksize = inode->i_size;
-+      EXT3_I(inode)->i_disksize = inode->i_size;
-       err = ext3_add_nondir(handle, dentry, inode);
-       ext3_mark_inode_dirty(handle, inode);
- out_stop:
-       ext3_journal_stop(handle, dir);
-       return err;
--
--out_no_entry:
--      ext3_dec_count(handle, inode);
--      ext3_mark_inode_dirty(handle, inode);
--      iput (inode);
--      goto out_stop;
- }
- static int ext3_link (struct dentry * old_dentry,
-@@ -957,12 +2055,15 @@ static int ext3_link (struct dentry * ol
-       if (S_ISDIR(inode->i_mode))
-               return -EPERM;
--      if (inode->i_nlink >= EXT3_LINK_MAX)
-+      if (inode->i_nlink >= EXT3_LINK_MAX) {
-               return -EMLINK;
-+      }
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
-@@ -996,9 +2097,11 @@ static int ext3_rename (struct inode * o
-       old_bh = new_bh = dir_bh = NULL;
--      handle = ext3_journal_start(old_dir, 2 * EXT3_DATA_TRANS_BLOCKS + 2);
--      if (IS_ERR(handle))
-+      handle = ext3_journal_start(old_dir, 2 * EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 2);
-+      if (IS_ERR(handle)) {
-               return PTR_ERR(handle);
-+      }
-       if (IS_SYNC(old_dir) || IS_SYNC(new_dir))
-               handle->h_sync = 1;
-@@ -1071,14 +2174,37 @@ static int ext3_rename (struct inode * o
-       /*
-        * ok, that's it
-        */
--      ext3_delete_entry(handle, old_dir, old_de, old_bh);
-+      if (le32_to_cpu(old_de->inode) != old_inode->i_ino ||
-+          old_de->name_len != old_dentry->d_name.len ||
-+          strncmp(old_de->name, old_dentry->d_name.name, old_de->name_len) ||
-+          (retval = ext3_delete_entry(handle, old_dir,
-+                                      old_de, old_bh)) == -ENOENT) {
-+              /* old_de could have moved from under us during htree split, so
-+               * make sure that we are deleting the right entry.  We might
-+               * also be pointing to a stale entry in the unused part of
-+               * old_bh so just checking inum and the name isn't enough. */
-+              struct buffer_head *old_bh2;
-+              struct ext3_dir_entry_2 *old_de2;
-+
-+              old_bh2 = ext3_find_entry(old_dentry, &old_de2);
-+              if (old_bh2) {
-+                      retval = ext3_delete_entry(handle, old_dir,
-+                                                 old_de2, old_bh2);
-+                      brelse(old_bh2);
-+              }
-+      }
-+      if (retval) {
-+              ext3_warning(old_dir->i_sb, "ext3_rename",
-+                              "Deleting old file (%lu), %d, error=%d",
-+                              old_dir->i_ino, old_dir->i_nlink, retval);
-+      }
-       if (new_inode) {
-               new_inode->i_nlink--;
-               new_inode->i_ctime = CURRENT_TIME;
-       }
-       old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME;
--      old_dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(old_dir);
-       if (dir_bh) {
-               BUFFER_TRACE(dir_bh, "get_write_access");
-               ext3_journal_get_write_access(handle, dir_bh);
-@@ -1090,7 +2212,7 @@ static int ext3_rename (struct inode * o
-                       new_inode->i_nlink--;
-               } else {
-                       new_dir->i_nlink++;
--                      new_dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+                      ext3_update_dx_flag(new_dir);
-                       ext3_mark_inode_dirty(handle, new_dir);
-               }
-       }
---- linux-2.4.18-chaos-pdirops/fs/ext3/super.c~ext3-htree      2003-09-23 11:52:24.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/fs/ext3/super.c  2003-09-23 12:11:54.000000000 +0400
-@@ -705,6 +705,7 @@ static int ext3_setup_super(struct super
-       es->s_mtime = cpu_to_le32(CURRENT_TIME);
-       ext3_update_dynamic_rev(sb);
-       EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
-+
-       ext3_commit_super (sb, es, 1);
-       if (test_opt (sb, DEBUG))
-               printk (KERN_INFO
-@@ -715,6 +716,7 @@ static int ext3_setup_super(struct super
-                       EXT3_BLOCKS_PER_GROUP(sb),
-                       EXT3_INODES_PER_GROUP(sb),
-                       sbi->s_mount_opt);
-+
-       printk(KERN_INFO "EXT3 FS " EXT3FS_VERSION ", " EXT3FS_DATE " on %s, ",
-                               bdevname(sb->s_dev));
-       if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
-@@ -889,6 +891,7 @@ static loff_t ext3_max_size(int bits)
-       return res;
- }
-+
- struct super_block * ext3_read_super (struct super_block * sb, void * data,
-                                     int silent)
- {
-@@ -1065,6 +1068,9 @@ struct super_block * ext3_read_super (st
-       sbi->s_mount_state = le16_to_cpu(es->s_state);
-       sbi->s_addr_per_block_bits = log2(EXT3_ADDR_PER_BLOCK(sb));
-       sbi->s_desc_per_block_bits = log2(EXT3_DESC_PER_BLOCK(sb));
-+      for (i=0; i < 4; i++)
-+              sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);
-+      sbi->s_def_hash_version = es->s_def_hash_version;
-       if (sbi->s_blocks_per_group > blocksize * 8) {
-               printk (KERN_ERR
-@@ -1747,6 +1753,7 @@ static void __exit exit_ext3_fs(void)
-       unregister_filesystem(&ext3_fs_type);
- }
-+EXPORT_SYMBOL(ext3_force_commit);
- EXPORT_SYMBOL(ext3_bread);
- MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
---- linux-2.4.18-chaos-pdirops/include/linux/ext3_fs.h~ext3-htree      2003-07-28 17:52:17.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/include/linux/ext3_fs.h  2003-09-23 12:12:04.000000000 +0400
-@@ -40,6 +40,11 @@
- #define EXT3FS_VERSION                "2.4-0.9.18"
- /*
-+ * Always enable hashed directories
-+ */
-+#define CONFIG_EXT3_INDEX
-+
-+/*
-  * Debug code
-  */
- #ifdef EXT3FS_DEBUG
-@@ -437,8 +442,11 @@ struct ext3_super_block {
- /*E0*/        __u32   s_journal_inum;         /* inode number of journal file */
-       __u32   s_journal_dev;          /* device number of journal file */
-       __u32   s_last_orphan;          /* start of list of inodes to delete */
--
--/*EC*/        __u32   s_reserved[197];        /* Padding to the end of the block */
-+      __u32   s_hash_seed[4];         /* HTREE hash seed */
-+      __u8    s_def_hash_version;     /* Default hash version to use */
-+      __u8    s_reserved_char_pad;
-+      __u16   s_reserved_word_pad;
-+      __u32   s_reserved[192];        /* Padding to the end of the block */
- };
- #ifdef __KERNEL__
-@@ -575,9 +583,46 @@ struct ext3_dir_entry_2 {
- #define EXT3_DIR_ROUND                        (EXT3_DIR_PAD - 1)
- #define EXT3_DIR_REC_LEN(name_len)    (((name_len) + 8 + EXT3_DIR_ROUND) & \
-                                        ~EXT3_DIR_ROUND)
-+/*
-+ * Hash Tree Directory indexing
-+ * (c) Daniel Phillips, 2001
-+ */
-+
-+#ifdef CONFIG_EXT3_INDEX
-+  #define is_dx(dir) (EXT3_HAS_COMPAT_FEATURE(dir->i_sb, \
-+                                            EXT3_FEATURE_COMPAT_DIR_INDEX) && \
-+                    (EXT3_I(dir)->i_flags & EXT3_INDEX_FL))
-+#define EXT3_DIR_LINK_MAX(dir) (!is_dx(dir) && (dir)->i_nlink >= EXT3_LINK_MAX)
-+#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || (dir)->i_nlink == 1)
-+#else
-+  #define is_dx(dir) 0
-+#define EXT3_DIR_LINK_MAX(dir) ((dir)->i_nlink >= EXT3_LINK_MAX)
-+#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2)
-+#endif
-+
-+/* Legal values for the dx_root hash_version field: */
-+
-+#define DX_HASH_LEGACY                0
-+#define DX_HASH_HALF_MD4      1
-+#define DX_HASH_TEA           2
-+
-+/* hash info structure used by the directory hash */
-+struct dx_hash_info
-+{
-+      u32             hash;
-+      u32             minor_hash;
-+      int             hash_version;
-+      u32             *seed;
-+};
- #ifdef __KERNEL__
- /*
-+ * Control parameters used by ext3_htree_next_block
-+ */
-+#define HASH_NB_ALWAYS                1
-+
-+
-+/*
-  * Describe an inode's exact location on disk and in memory
-  */
- struct ext3_iloc
-@@ -587,6 +632,27 @@ struct ext3_iloc
-       unsigned long block_group;
- };
-+
-+/*
-+ * This structure is stuffed into the struct file's private_data field
-+ * for directories.  It is where we put information so that we can do
-+ * readdir operations in hash tree order.
-+ */
-+struct dir_private_info {
-+      rb_root_t       root;
-+      rb_node_t       *curr_node;
-+      struct fname    *extra_fname;
-+      loff_t          last_pos;
-+      __u32           curr_hash;
-+      __u32           curr_minor_hash;
-+      __u32           next_hash;
-+};
-+
-+/*
-+ * Special error return code only used by dx_probe() and its callers.
-+ */
-+#define ERR_BAD_DX_DIR        -75000
-+
- /*
-  * Function prototypes
-  */
-@@ -614,11 +680,20 @@ extern struct ext3_group_desc * ext3_get
- /* dir.c */
- extern int ext3_check_dir_entry(const char *, struct inode *,
--                              struct ext3_dir_entry_2 *, struct buffer_head *,
--                              unsigned long);
-+                              struct ext3_dir_entry_2 *,
-+                              struct buffer_head *, unsigned long);
-+extern int ext3_htree_store_dirent(struct file *dir_file, __u32 hash,
-+                                  __u32 minor_hash,
-+                                  struct ext3_dir_entry_2 *dirent);
-+extern void ext3_htree_free_dir_info(struct dir_private_info *p);
-+
- /* fsync.c */
- extern int ext3_sync_file (struct file *, struct dentry *, int);
-+/* hash.c */
-+extern int ext3fs_dirhash(const char *name, int len, struct
-+                        dx_hash_info *hinfo);
-+
- /* ialloc.c */
- extern struct inode * ext3_new_inode (handle_t *, const struct inode *, int);
- extern void ext3_free_inode (handle_t *, struct inode *);
-@@ -650,6 +725,8 @@ extern int ext3_ioctl (struct inode *, s
- /* namei.c */
- extern int ext3_orphan_add(handle_t *, struct inode *);
- extern int ext3_orphan_del(handle_t *, struct inode *);
-+extern int ext3_htree_fill_tree(struct file *dir_file, __u32 start_hash,
-+                              __u32 start_minor_hash, __u32 *next_hash);
- /* super.c */
- extern void ext3_error (struct super_block *, const char *, const char *, ...)
---- linux-2.4.18-chaos-pdirops/include/linux/ext3_fs_sb.h~ext3-htree   2003-07-28 17:52:17.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/include/linux/ext3_fs_sb.h       2003-09-23 12:11:54.000000000 +0400
-@@ -62,6 +62,8 @@ struct ext3_sb_info {
-       int s_inode_size;
-       int s_first_ino;
-       u32 s_next_generation;
-+      u32 s_hash_seed[4];
-+      int s_def_hash_version;
-       /* Journaling */
-       struct inode * s_journal_inode;
---- linux-2.4.18-chaos-pdirops/include/linux/ext3_jbd.h~ext3-htree     2001-12-21 20:42:03.000000000 +0300
-+++ linux-2.4.18-chaos-pdirops-alexey/include/linux/ext3_jbd.h 2003-09-23 12:11:54.000000000 +0400
-@@ -63,6 +63,8 @@ extern int ext3_writepage_trans_blocks(s
- #define EXT3_RESERVE_TRANS_BLOCKS     12
-+#define EXT3_INDEX_EXTRA_TRANS_BLOCKS 8
-+
- int
- ext3_mark_iloc_dirty(handle_t *handle, 
-                    struct inode *inode,
---- linux-2.4.18-chaos-pdirops/include/linux/rbtree.h~ext3-htree       2001-11-22 22:46:18.000000000 +0300
-+++ linux-2.4.18-chaos-pdirops-alexey/include/linux/rbtree.h   2003-09-23 12:11:54.000000000 +0400
-@@ -120,6 +120,8 @@ rb_root_t;
- extern void rb_insert_color(rb_node_t *, rb_root_t *);
- extern void rb_erase(rb_node_t *, rb_root_t *);
-+extern rb_node_t *rb_get_first(rb_root_t *root);
-+extern rb_node_t *rb_get_next(rb_node_t *n);
- static inline void rb_link_node(rb_node_t * node, rb_node_t * parent, rb_node_t ** rb_link)
- {
---- linux-2.4.18-chaos-pdirops/lib/rbtree.c~ext3-htree 2003-09-23 11:52:34.000000000 +0400
-+++ linux-2.4.18-chaos-pdirops-alexey/lib/rbtree.c     2003-09-23 12:11:54.000000000 +0400
-@@ -17,6 +17,8 @@
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-   linux/lib/rbtree.c
-+
-+  rb_get_first and rb_get_next written by Theodore Ts'o, 9/8/2002
- */
- #include <linux/rbtree.h>
-@@ -295,3 +297,43 @@ void rb_erase(rb_node_t * node, rb_root_
-               __rb_erase_color(child, parent, root);
- }
- EXPORT_SYMBOL(rb_erase);
-+
-+/*
-+ * This function returns the first node (in sort order) of the tree.
-+ */
-+rb_node_t *rb_get_first(rb_root_t *root)
-+{
-+      rb_node_t       *n;
-+
-+      n = root->rb_node;
-+      if (!n)
-+              return 0;
-+      while (n->rb_left)
-+              n = n->rb_left;
-+      return n;
-+}
-+EXPORT_SYMBOL(rb_get_first);
-+
-+/*
-+ * Given a node, this function will return the next node in the tree.
-+ */
-+rb_node_t *rb_get_next(rb_node_t *n)
-+{
-+      rb_node_t       *parent;
-+
-+      if (n->rb_right) {
-+              n = n->rb_right;
-+              while (n->rb_left)
-+                      n = n->rb_left;
-+              return n;
-+      } else {
-+              while ((parent = n->rb_parent)) {
-+                      if (n == parent->rb_left)
-+                              return parent;
-+                      n = parent;
-+              }
-+              return 0;
-+      }
-+}
-+EXPORT_SYMBOL(rb_get_next);
-+
-
-_
diff --git a/lustre/kernel_patches/patches/ext3-ialloc-2.4.21-chaos.patch b/lustre/kernel_patches/patches/ext3-ialloc-2.4.21-chaos.patch
deleted file mode 100644 (file)
index dd50ad0..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
---- ./fs/ext3/ialloc.c.orig    2004-08-02 13:26:38.000000000 -0700
-+++ ./fs/ext3/ialloc.c 2004-09-03 14:57:14.000000000 -0700
-@@ -328,21 +328,143 @@
-  * directories already is chosen.
-  *
-  * For other inodes, search forward from the parent directory's block
-- * group to find a free inode.
-+ * group to find a free inode in a group with some free blocks.
-  */
-+static int find_group_dir(struct super_block *sb, const struct inode *parent,
-+                        struct ext3_group_desc **best_desc,
-+                        struct buffer_head **best_bh)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+      int ngroups = sbi->s_groups_count;
-+      int avefreei;
-+      struct ext3_group_desc *desc;
-+      struct buffer_head *bh;
-+      int group, best_group = -1, ndir_best = 999999999;
-+
-+      *best_desc = NULL;
-+      *best_bh = NULL;
-+
-+      avefreei = le32_to_cpu(sbi->s_es->s_free_inodes_count) /
-+              sbi->s_groups_count / ngroups;
-+
-+      for (group = 0; group < ngroups; group++) {
-+              desc = ext3_get_group_desc(sb, group, &bh);
-+              if (!desc || !desc->bg_free_inodes_count)
-+                      continue;
-+              if (le16_to_cpu(desc->bg_free_inodes_count) < avefreei)
-+                      continue;
-+              if (le16_to_cpu(desc->bg_used_dirs_count) > ndir_best)
-+                      continue;
-+              if (!*best_desc ||
-+                  (le16_to_cpu(desc->bg_free_blocks_count) >
-+                   le16_to_cpu((*best_desc)->bg_free_blocks_count))) {
-+                      *best_bh = bh;
-+                      *best_desc = desc;
-+                      best_group = group;
-+                      ndir_best = le16_to_cpu(desc->bg_used_dirs_count);
-+              }
-+      }
-+
-+      return best_group;
-+}
-+
-+static int find_group_other(struct super_block *sb, const struct inode *parent,
-+                          struct ext3_group_desc **best_desc,
-+                          struct buffer_head **best_bh)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+      int parent_group = EXT3_I(parent)->i_block_group;
-+      int ngroups = sbi->s_groups_count;
-+      int avefreeb;
-+      struct ext3_group_desc *desc;
-+      struct buffer_head *bh;
-+      int group, i, best_group = -1;
-+
-+      *best_desc = NULL;
-+      *best_bh = NULL;
-+
-+      /*
-+       * Try to place the inode in its parent directory
-+       */
-+      group = parent_group;
-+      desc = ext3_get_group_desc (sb, group, &bh);
-+      if (desc && le16_to_cpu(desc->bg_free_inodes_count) &&
-+          le16_to_cpu(desc->bg_free_blocks_count)) {
-+              *best_desc = desc;
-+              *best_bh = bh;
-+              return group;
-+      }
-+
-+      /*
-+       * We're going to place this inode in a different blockgroup from its
-+       * parent.  We want to cause files in a common directory to all land in
-+       * the same blockgroup if it has space.  But we want files which are
-+       * in a different directory which shares a blockgroup with our parent
-+       * to land in a different blockgroup.
-+       *
-+       * So add our directory's i_ino into the starting point for the hash.
-+       */
-+      group = (group + parent->i_ino) % ngroups;
-+
-+      avefreeb = le32_to_cpu(sbi->s_es->s_free_blocks_count) /
-+              sbi->s_groups_count / ngroups;
-+
-+      /*
-+       * Use a quadratic hash to find a group with a free inode and some free
-+       * blocks.
-+       */
-+      for (i = 1; i < ngroups; i <<= 1) {
-+              group += i;
-+              if (group >= ngroups)
-+                      group -= ngroups;
-+              desc = ext3_get_group_desc(sb, group, &bh);
-+              if (!desc || !desc->bg_free_inodes_count)
-+                      continue;
-+              if (le16_to_cpu(desc->bg_free_blocks_count) > avefreeb) {
-+                      *best_bh = bh;
-+                      *best_desc = desc;
-+                      return group;
-+              }
-+      }
-+
-+      /*
-+       * That failed: try linear search for a group with free inodes and
-+       * preferrably free blocks, returning as soon as we find a good one.
-+       */
-+      group = sbi->s_last_group;
-+      for (i = 0; i < ngroups; i++) {
-+              if (++group >= ngroups)
-+                      group = 0;
-+              desc = ext3_get_group_desc(sb, group, &bh);
-+              if (!desc || !desc->bg_free_inodes_count)
-+                      continue;
-+              if (!*best_desc ||
-+                  (le16_to_cpu(desc->bg_free_blocks_count) >
-+                   le16_to_cpu((*best_desc)->bg_free_blocks_count))) {
-+                      *best_bh = bh;
-+                      *best_desc = desc;
-+                      best_group = group;
-+                      if (le16_to_cpu(desc->bg_free_blocks_count) >= avefreeb)
-+                              break;
-+              }
-+      }
-+      sbi->s_last_group = best_group;
-+
-+      return best_group;
-+}
-+
- struct inode * ext3_new_inode(handle_t *handle, const struct inode * dir,
-                             int mode, unsigned long goal)
- {
-       struct super_block * sb;
-       struct buffer_head * bh;
-       struct buffer_head * bh2;
--      int i, j, avefreei;
-+      int i, j;
-       struct inode * inode;
-       int bitmap_nr;
-       struct ext3_inode_info *ei;
-       struct ext3_sb_info *sbi;
-       struct ext3_group_desc * gdp;
--      struct ext3_group_desc * tmp;
-       struct ext3_super_block * es;
-       struct ext3_iloc iloc;
-       int err = 0;
-@@ -396,72 +518,10 @@
-       }
- repeat:
--      gdp = NULL;
--      i = 0;
--
--      if (S_ISDIR(mode)) {
--              avefreei = le32_to_cpu(es->s_free_inodes_count) /
--                      sbi->s_groups_count;
--              if (!gdp) {
--                      for (j = 0; j < sbi->s_groups_count; j++) {
--                              struct buffer_head *temp_buffer;
--                              tmp = ext3_get_group_desc (sb, j, &temp_buffer);
--                              if (tmp &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count) &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count) >=
--                                                      avefreei) {
--                                      if (!gdp || (le16_to_cpu(tmp->bg_free_blocks_count) >
--                                              le16_to_cpu(gdp->bg_free_blocks_count))) {
--                                              i = j;
--                                              gdp = tmp;
--                                              bh2 = temp_buffer;
--                                      }
--                              }
--                      }
--              }
--      } else {
--              /*
--               * Try to place the inode in its parent directory
--               */
--              i = EXT3_I(dir)->i_block_group;
--              tmp = ext3_get_group_desc (sb, i, &bh2);
--              if (tmp && le16_to_cpu(tmp->bg_free_inodes_count))
--                      gdp = tmp;
--              else
--              {
--                      /*
--                       * Use a quadratic hash to find a group with a
--                       * free inode
--                       */
--                      for (j = 1; j < sbi->s_groups_count; j <<= 1) {
--                              i += j;
--                              if (i >= sbi->s_groups_count)
--                                      i -= sbi->s_groups_count;
--                              tmp = ext3_get_group_desc (sb, i, &bh2);
--                              if (tmp &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count)) {
--                                      gdp = tmp;
--                                      break;
--                              }
--                      }
--              }
--              if (!gdp) {
--                      /*
--                       * That failed: try linear search for a free inode
--                       */
--                      i = EXT3_I(dir)->i_block_group + 1;
--                      for (j = 2; j < sbi->s_groups_count; j++) {
--                              if (++i >= sbi->s_groups_count)
--                                      i = 0;
--                              tmp = ext3_get_group_desc (sb, i, &bh2);
--                              if (tmp &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count)) {
--                                      gdp = tmp;
--                                      break;
--                              }
--                      }
--              }
--      }
-+      if (S_ISDIR(mode))
-+              i = find_group_dir(sb, dir, &gdp, &bh2);
-+      else
-+              i = find_group_other(sb, dir, &gdp, &bh2);
-       err = -ENOSPC;
-       if (!gdp)
---- linux/include/linux/ext3_fs_sb.h.orig      2004-08-26 13:28:53.000000000 -0600
-+++ linux/include/linux/ext3_fs_sb.h   2004-08-31 11:04:27.000000000 -0600
-@@ -45,6 +45,7 @@ struct ext3_sb_info {
-       unsigned long s_gdb_count;      /* Number of group descriptor blocks */
-       unsigned long s_desc_per_block; /* Number of group descriptors per block */
-       unsigned long s_groups_count;   /* Number of groups in the fs */
-+      unsigned long s_last_group;     /* Last group used for inode allocation */
-       struct buffer_head * s_sbh;     /* Buffer containing the super block */
-       struct ext3_super_block * s_es; /* Pointer to the super block in the buffer */
-       struct buffer_head ** s_group_desc;
diff --git a/lustre/kernel_patches/patches/ext3-ialloc-2.4.24.patch b/lustre/kernel_patches/patches/ext3-ialloc-2.4.24.patch
deleted file mode 100644 (file)
index ac27901..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-Index: lum/fs/ext3/ialloc.c
-===================================================================
---- lum.orig/fs/ext3/ialloc.c  2004-08-26 13:14:35.000000000 -0600
-+++ lum/fs/ext3/ialloc.c       2004-08-31 15:00:35.000000000 -0600
-@@ -327,8 +327,131 @@ int ext3_itable_block_used(struct super_
-  * directories already is chosen.
-  *
-  * For other inodes, search forward from the parent directory's block
-- * group to find a free inode.
-+ * group to find a free inode in a group with some free blocks.
-  */
-+static int find_group_dir(struct super_block *sb, const struct inode *parent,
-+                        struct ext3_group_desc **best_desc,
-+                        struct buffer_head **best_bh)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+      int ngroups = sbi->s_groups_count;
-+      int avefreei;
-+      struct ext3_group_desc *desc;
-+      struct buffer_head *bh;
-+      int group, best_group = -1, ndir_best = 999999999;
-+
-+      *best_desc = NULL;
-+      *best_bh = NULL;
-+
-+      avefreei = le32_to_cpu(sbi->s_es->s_free_inodes_count) /
-+              sbi->s_groups_count / ngroups;
-+
-+      for (group = 0; group < ngroups; group++) {
-+              desc = ext3_get_group_desc(sb, group, &bh);
-+              if (!desc || !desc->bg_free_inodes_count)
-+                      continue;
-+              if (le16_to_cpu(desc->bg_free_inodes_count) < avefreei)
-+                      continue;
-+              if (le16_to_cpu(desc->bg_used_dirs_count) > ndir_best)
-+                      continue;
-+              if (!*best_desc ||
-+                  (le16_to_cpu(desc->bg_free_blocks_count) >
-+                   le16_to_cpu((*best_desc)->bg_free_blocks_count))) {
-+                      *best_bh = bh;
-+                      *best_desc = desc;
-+                      best_group = group;
-+                      ndir_best = le16_to_cpu(desc->bg_used_dirs_count);
-+              }
-+      }
-+
-+      return best_group;
-+}
-+
-+static int find_group_other(struct super_block *sb, const struct inode *parent,
-+                          struct ext3_group_desc **best_desc,
-+                          struct buffer_head **best_bh)
-+{
-+      struct ext3_sb_info *sbi = EXT3_SB(sb);
-+      int parent_group = EXT3_I(parent)->i_block_group;
-+      int ngroups = sbi->s_groups_count;
-+      int avefreeb;
-+      struct ext3_group_desc *desc;
-+      struct buffer_head *bh;
-+      int group, i, best_group = -1;
-+
-+      *best_desc = NULL;
-+      *best_bh = NULL;
-+
-+      /*
-+       * Try to place the inode in its parent directory
-+       */
-+      group = parent_group;
-+      desc = ext3_get_group_desc (sb, group, &bh);
-+      if (desc && le16_to_cpu(desc->bg_free_inodes_count) &&
-+          le16_to_cpu(desc->bg_free_blocks_count)) {
-+              *best_desc = desc;
-+              *best_bh = bh;
-+              return group;
-+      }
-+
-+      /*
-+       * We're going to place this inode in a different blockgroup from its
-+       * parent.  We want to cause files in a common directory to all land in
-+       * the same blockgroup if it has space.  But we want files which are
-+       * in a different directory which shares a blockgroup with our parent
-+       * to land in a different blockgroup.
-+       *
-+       * So add our directory's i_ino into the starting point for the hash.
-+       */
-+      group = (group + parent->i_ino) % ngroups;
-+
-+      avefreeb = le32_to_cpu(sbi->s_es->s_free_blocks_count) /
-+              sbi->s_groups_count / ngroups;
-+
-+      /*
-+       * Use a quadratic hash to find a group with a free inode and some free
-+       * blocks.
-+       */
-+      for (i = 1; i < ngroups; i <<= 1) {
-+              group += i;
-+              if (group >= ngroups)
-+                      group -= ngroups;
-+              desc = ext3_get_group_desc(sb, group, &bh);
-+              if (!desc || !desc->bg_free_inodes_count)
-+                      continue;
-+              if (le16_to_cpu(desc->bg_free_blocks_count) > avefreeb) {
-+                      *best_bh = bh;
-+                      *best_desc = desc;
-+                      return group;
-+              }
-+      }
-+
-+      /*
-+       * That failed: try linear search for a group with free inodes and
-+       * preferrably free blocks, returning as soon as we find a good one.
-+       */
-+      group = sbi->s_last_group;
-+      for (i = 0; i < ngroups; i++) {
-+              if (++group >= ngroups)
-+                      group = 0;
-+              desc = ext3_get_group_desc(sb, group, &bh);
-+              if (!desc || !desc->bg_free_inodes_count)
-+                      continue;
-+              if (!*best_desc ||
-+                  (le16_to_cpu(desc->bg_free_blocks_count) >
-+                   le16_to_cpu((*best_desc)->bg_free_blocks_count))) {
-+                      *best_bh = bh;
-+                      *best_desc = desc;
-+                      best_group = group;
-+                      if (le16_to_cpu(desc->bg_free_blocks_count) >= avefreeb)
-+                              break;
-+              }
-+      }
-+      sbi->s_last_group = best_group;
-+
-+      return best_group;
-+}
-+
- struct inode * ext3_new_inode (handle_t *handle,
-                               const struct inode * dir, int mode,
-                               unsigned long goal)
-@@ -336,11 +459,10 @@ struct inode * ext3_new_inode (handle_t 
-       struct super_block * sb;
-       struct buffer_head * bh;
-       struct buffer_head * bh2;
--      int i, j, avefreei;
-+      int i, j;
-       struct inode * inode;
-       int bitmap_nr;
-       struct ext3_group_desc * gdp;
--      struct ext3_group_desc * tmp;
-       struct ext3_super_block * es;
-       struct ext3_iloc iloc;
-       int err = 0;
-@@ -392,72 +514,10 @@ struct inode * ext3_new_inode (handle_t 
-       }
- repeat:
--      gdp = NULL;
--      i = 0;
--
--      if (S_ISDIR(mode)) {
--              avefreei = le32_to_cpu(es->s_free_inodes_count) /
--                      sb->u.ext3_sb.s_groups_count;
--              if (!gdp) {
--                      for (j = 0; j < sb->u.ext3_sb.s_groups_count; j++) {
--                              struct buffer_head *temp_buffer;
--                              tmp = ext3_get_group_desc (sb, j, &temp_buffer);
--                              if (tmp &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count) &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count) >=
--                                                      avefreei) {
--                                      if (!gdp || (le16_to_cpu(tmp->bg_free_blocks_count) >
--                                              le16_to_cpu(gdp->bg_free_blocks_count))) {
--                                              i = j;
--                                              gdp = tmp;
--                                              bh2 = temp_buffer;
--                                      }
--                              }
--                      }
--              }
--      } else {
--              /*
--               * Try to place the inode in its parent directory
--               */
--              i = dir->u.ext3_i.i_block_group;
--              tmp = ext3_get_group_desc (sb, i, &bh2);
--              if (tmp && le16_to_cpu(tmp->bg_free_inodes_count))
--                      gdp = tmp;
--              else
--              {
--                      /*
--                       * Use a quadratic hash to find a group with a
--                       * free inode
--                       */
--                      for (j = 1; j < sb->u.ext3_sb.s_groups_count; j <<= 1) {
--                              i += j;
--                              if (i >= sb->u.ext3_sb.s_groups_count)
--                                      i -= sb->u.ext3_sb.s_groups_count;
--                              tmp = ext3_get_group_desc (sb, i, &bh2);
--                              if (tmp &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count)) {
--                                      gdp = tmp;
--                                      break;
--                              }
--                      }
--              }
--              if (!gdp) {
--                      /*
--                       * That failed: try linear search for a free inode
--                       */
--                      i = dir->u.ext3_i.i_block_group + 1;
--                      for (j = 2; j < sb->u.ext3_sb.s_groups_count; j++) {
--                              if (++i >= sb->u.ext3_sb.s_groups_count)
--                                      i = 0;
--                              tmp = ext3_get_group_desc (sb, i, &bh2);
--                              if (tmp &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count)) {
--                                      gdp = tmp;
--                                      break;
--                              }
--                      }
--              }
--      }
-+      if (S_ISDIR(mode))
-+              i = find_group_dir(sb, dir, &gdp, &bh2);
-+      else
-+              i = find_group_other(sb, dir, &gdp, &bh2);
-       err = -ENOSPC;
-       if (!gdp)
-Index: lum/include/linux/ext3_fs_sb.h
-===================================================================
---- lum.orig/include/linux/ext3_fs_sb.h        2004-08-26 13:28:53.000000000 -0600
-+++ lum/include/linux/ext3_fs_sb.h     2004-08-31 11:04:27.000000000 -0600
-@@ -45,6 +45,7 @@ struct ext3_sb_info {
-       unsigned long s_gdb_count;      /* Number of group descriptor blocks */
-       unsigned long s_desc_per_block; /* Number of group descriptors per block */
-       unsigned long s_groups_count;   /* Number of groups in the fs */
-+      unsigned long s_last_group;     /* Last group used for inode allocation */
-       struct buffer_head * s_sbh;     /* Buffer containing the super block */
-       struct ext3_super_block * s_es; /* Pointer to the super block in the buffer */
-       struct buffer_head ** s_group_desc;
index 28e3587..acf97dd 100644 (file)
@@ -3,7 +3,7 @@ Index: linux-stage/include/linux/ext3_fs.h
 --- linux-stage.orig/include/linux/ext3_fs.h   2004-04-02 16:43:37.000000000 -0500
 +++ linux-stage/include/linux/ext3_fs.h        2004-04-02 16:43:37.000000000 -0500
 @@ -331,12 +331,13 @@
- #define EXT3_MOUNT_IOPEN_NOPRIV              0x20000  /* Make iopen world-readable */
+ #define EXT3_MOUNT_IOPEN_NOPRIV               0x80000 /* Make iopen world-readable */
  
  /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
 -#ifndef _LINUX_EXT2_FS_H
diff --git a/lustre/kernel_patches/patches/ext3-inode-reuse-2.4.18.patch b/lustre/kernel_patches/patches/ext3-inode-reuse-2.4.18.patch
deleted file mode 100644 (file)
index 85e12b8..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-Index: linux-2.4.18-chaos/fs/ext3/ialloc.c
-===================================================================
---- linux-2.4.18-chaos.orig/fs/ext3/ialloc.c   2003-10-22 14:23:53.000000000 +0400
-+++ linux-2.4.18-chaos/fs/ext3/ialloc.c        2003-10-29 20:42:04.000000000 +0300
-@@ -241,11 +241,16 @@
-       bh = EXT3_SB(sb)->s_inode_bitmap[bitmap_nr];
--      BUFFER_TRACE(bh, "get_write_access");
--      fatal = ext3_journal_get_write_access(handle, bh);
-+      BUFFER_TRACE(bh, "get_undo_access");
-+      fatal = ext3_journal_get_undo_access(handle, bh);
-       if (fatal)
-               goto error_return;
-+      /* to prevent inode reusing within single transaction -bzzz */
-+      BUFFER_TRACE(bh, "clear in b_committed_data");
-+      J_ASSERT_BH(bh, bh2jh(bh)->b_committed_data != NULL);
-+      ext3_set_bit(bit, bh2jh(bh)->b_committed_data);
-+
-       /* Ok, now we can actually update the inode bitmaps.. */
-       if (!ext3_clear_bit (bit, bh->b_data))
-               ext3_error (sb, "ext3_free_inode",
-@@ -319,6 +324,131 @@
-       return 0;
- }
-+static int ext3_test_allocatable(int nr, struct buffer_head *bh)
-+{
-+      if (ext3_test_bit(nr, bh->b_data))
-+              return 0;
-+      if (!buffer_jbd(bh) || !bh2jh(bh)->b_committed_data)
-+              return 1;
-+#if 0
-+      if (!ext3_test_bit(nr, bh2jh(bh)->b_committed_data))
-+              printk("EXT3-fs: inode %d was used\n", nr);
-+#endif
-+      return !ext3_test_bit(nr, bh2jh(bh)->b_committed_data);
-+}
-+
-+int ext3_find_group_dir(const struct inode *dir,
-+                              struct ext3_group_desc **gdp,
-+                              struct buffer_head **bh)
-+{
-+      struct super_block *sb = dir->i_sb;
-+      struct ext3_super_block *es;
-+      struct ext3_group_desc *tmp;
-+      int i = 0, j, avefreei;
-+
-+      es = EXT3_SB(sb)->s_es;
-+      avefreei = le32_to_cpu(es->s_free_inodes_count) /
-+                      EXT3_SB(sb)->s_groups_count;
-+      for (j = 0; j < EXT3_SB(sb)->s_groups_count; j++) {
-+              struct buffer_head *temp_buffer;
-+              tmp = ext3_get_group_desc(sb, j, &temp_buffer);
-+              if (tmp && le16_to_cpu(tmp->bg_free_inodes_count) &&
-+                      le16_to_cpu(tmp->bg_free_inodes_count) >= avefreei) {
-+                      if (!*gdp || (le16_to_cpu(tmp->bg_free_blocks_count) >
-+                              le16_to_cpu((*gdp)->bg_free_blocks_count))) {
-+                              i = j;
-+                              *gdp = tmp;
-+                              *bh = temp_buffer;
-+                      }
-+              }
-+      }
-+
-+      return i;
-+}
-+
-+int ext3_find_group_other(const struct inode *dir,
-+                              struct ext3_group_desc **gdp,
-+                              struct buffer_head **bh)
-+{
-+      struct super_block *sb = dir->i_sb;
-+      struct ext3_group_desc *tmp;
-+      int i, j;
-+
-+      /*
-+       * Try to place the inode in its parent directory
-+       */
-+      i = EXT3_I(dir)->i_block_group;
-+      tmp = ext3_get_group_desc(sb, i, bh);
-+      if (tmp && le16_to_cpu(tmp->bg_free_inodes_count))
-+              *gdp = tmp;
-+      else {
-+              /*
-+               * Use a quadratic hash to find a group with a
-+               * free inode
-+               */
-+              for (j = 1; j < EXT3_SB(sb)->s_groups_count; j <<= 1) {
-+                      i += j;
-+                      if (i >= EXT3_SB(sb)->s_groups_count)
-+                              i -= EXT3_SB(sb)->s_groups_count;
-+                      tmp = ext3_get_group_desc (sb, i, bh);
-+                      if (tmp && le16_to_cpu(tmp->bg_free_inodes_count)) {
-+                              *gdp = tmp;
-+                              break;
-+                      }
-+              }
-+      }
-+      if (!*gdp) {
-+              /*
-+               * That failed: try linear search for a free inode
-+               */
-+              i = EXT3_I(dir)->i_block_group + 1;
-+              for (j = 2; j < EXT3_SB(sb)->s_groups_count; j++) {
-+                      if (++i >= EXT3_SB(sb)->s_groups_count)
-+                              i = 0;
-+                      tmp = ext3_get_group_desc (sb, i, bh);
-+                      if (tmp && le16_to_cpu(tmp->bg_free_inodes_count)) {
-+                              *gdp = tmp;
-+                              break;
-+                      }
-+              }
-+      }
-+
-+      return i;
-+}
-+
-+static int ext3_find_group(const struct inode *dir, int mode,
-+                              struct ext3_group_desc **gdp,
-+                              struct buffer_head **bh)
-+{
-+      if (S_ISDIR(mode))
-+              return ext3_find_group_dir(dir, gdp, bh);
-+      return ext3_find_group_other(dir, gdp, bh);
-+}
-+
-+static int ext3_find_usable_inode(struct super_block *sb,
-+                                      struct buffer_head *bh)
-+{
-+      int here, maxinodes, next;
-+
-+      maxinodes = EXT3_INODES_PER_GROUP(sb);
-+      here = 0;       
-+
-+      while (here < maxinodes) {
-+              next  = ext3_find_next_zero_bit((unsigned long *) bh->b_data, 
-+                                               maxinodes, here);
-+              if (next >= maxinodes)
-+                      return -1;
-+              if (ext3_test_allocatable(next, bh))
-+                      return next;
-+
-+              J_ASSERT_BH(bh, bh2jh(bh)->b_committed_data);
-+              here = ext3_find_next_zero_bit
-+                      ((unsigned long *) bh2jh(bh)->b_committed_data, 
-+                       maxinodes, next);
-+      }
-+      return -1;
-+}
-+
- /*
-  * There are two policies for allocating an inode.  If the new inode is
-  * a directory, then a forward search is made for a block group with both
-@@ -337,7 +467,7 @@
-       struct super_block * sb;
-       struct buffer_head * bh;
-       struct buffer_head * bh2;
--      int i, j, avefreei;
-+      int i, j, k;
-       struct inode * inode;
-       int bitmap_nr;
-       struct ext3_inode_info *ei;
-@@ -376,11 +506,12 @@
-               bh = EXT3_SB(sb)->s_inode_bitmap[bitmap_nr];
--              BUFFER_TRACE(bh, "get_write_access");
--              err = ext3_journal_get_write_access(handle, bh);
-+              BUFFER_TRACE(bh, "get_undo_access");
-+              err = ext3_journal_get_undo_access(handle, bh);
-               if (err) goto fail;
--              if (ext3_set_bit(j, bh->b_data)) {
-+              if (!ext3_test_allocatable(j, bh) ||
-+                              ext3_set_bit(j, bh->b_data)) {
-                       printk(KERN_ERR "goal inode %lu unavailable\n", goal);
-                       /* Oh well, we tried. */
-                       goto repeat;
-@@ -398,119 +529,68 @@
- repeat:
-       gdp = NULL;
--      i = 0;
--
--      if (S_ISDIR(mode)) {
--              avefreei = le32_to_cpu(es->s_free_inodes_count) /
--                      sbi->s_groups_count;
--              if (!gdp) {
--                      for (j = 0; j < sbi->s_groups_count; j++) {
--                              struct buffer_head *temp_buffer;
--                              tmp = ext3_get_group_desc (sb, j, &temp_buffer);
--                              if (tmp &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count) &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count) >=
--                                                      avefreei) {
--                                      if (!gdp || (le16_to_cpu(tmp->bg_free_blocks_count) >
--                                              le16_to_cpu(gdp->bg_free_blocks_count))) {
--                                              i = j;
--                                              gdp = tmp;
--                                              bh2 = temp_buffer;
--                                      }
--                              }
--                      }
--              }
--      } else {
--              /*
--               * Try to place the inode in its parent directory
--               */
--              i = EXT3_I(dir)->i_block_group;
--              tmp = ext3_get_group_desc (sb, i, &bh2);
--              if (tmp && le16_to_cpu(tmp->bg_free_inodes_count))
--                      gdp = tmp;
--              else
--              {
--                      /*
--                       * Use a quadratic hash to find a group with a
--                       * free inode
--                       */
--                      for (j = 1; j < sbi->s_groups_count; j <<= 1) {
--                              i += j;
--                              if (i >= sbi->s_groups_count)
--                                      i -= sbi->s_groups_count;
--                              tmp = ext3_get_group_desc (sb, i, &bh2);
--                              if (tmp &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count)) {
--                                      gdp = tmp;
--                                      break;
--                              }
--                      }
--              }
--              if (!gdp) {
--                      /*
--                       * That failed: try linear search for a free inode
--                       */
--                      i = EXT3_I(dir)->i_block_group + 1;
--                      for (j = 2; j < sbi->s_groups_count; j++) {
--                              if (++i >= sbi->s_groups_count)
--                                      i = 0;
--                              tmp = ext3_get_group_desc (sb, i, &bh2);
--                              if (tmp &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count)) {
--                                      gdp = tmp;
--                                      break;
--                              }
--                      }
--              }
--      }
-+      /* choose group */
-+      i = ext3_find_group(dir, mode, &gdp, &bh2);
-       err = -ENOSPC;
-       if (!gdp)
-               goto out;
--
-+      
-       err = -EIO;
--      bitmap_nr = load_inode_bitmap (sb, i);
-+      bitmap_nr = load_inode_bitmap(sb, i);
-       if (bitmap_nr < 0)
-               goto fail;
--
-       bh = sbi->s_inode_bitmap[bitmap_nr];
--      if ((j = ext3_find_first_zero_bit ((unsigned long *) bh->b_data,
--                                    sbi->s_inodes_per_group)) <
--          sbi->s_inodes_per_group) {
--              BUFFER_TRACE(bh, "get_write_access");
--              err = ext3_journal_get_write_access(handle, bh);
--              if (err) goto fail;
--              
--              if (ext3_set_bit (j, bh->b_data)) {
--                      ext3_error (sb, "ext3_new_inode",
--                                    "bit already set for inode %d", j);
--                      goto repeat;
--              }
--              BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
--              err = ext3_journal_dirty_metadata(handle, bh);
--              if (err) goto fail;
--      } else {
--              if (le16_to_cpu(gdp->bg_free_inodes_count) != 0) {
--                      ext3_error (sb, "ext3_new_inode",
--                                  "Free inodes count corrupted in group %d",
--                                  i);
--                      /* Is it really ENOSPC? */
--                      err = -ENOSPC;
--                      if (sb->s_flags & MS_RDONLY)
--                              goto fail;
--
--                      BUFFER_TRACE(bh2, "get_write_access");
--                      err = ext3_journal_get_write_access(handle, bh2);
--                      if (err) goto fail;
--                      gdp->bg_free_inodes_count = 0;
--                      BUFFER_TRACE(bh2, "call ext3_journal_dirty_metadata");
--                      err = ext3_journal_dirty_metadata(handle, bh2);
--                      if (err) goto fail;
-+      /* try to allocate in selected group */
-+      if ((j = ext3_find_usable_inode(sb, bh)) >= 0)
-+              goto find_free;
-+
-+      /* can't allocate: try to allocate in ANY another groups */
-+      k = i;
-+      err = -EIO;
-+      for (i = i + 1; i != k; i++) {
-+              if (i >= sbi->s_groups_count)
-+                      i = 0;
-+              tmp = ext3_get_group_desc(sb, i, &bh2);
-+              if (le16_to_cpu(tmp->bg_free_inodes_count) == 0)
-+                      continue;
-+
-+              bitmap_nr = load_inode_bitmap(sb, i);
-+              if (bitmap_nr < 0)
-+                      goto fail;
-+              bh = sbi->s_inode_bitmap[bitmap_nr];
-+
-+              /* try to allocate in selected group */
-+              if ((j = ext3_find_usable_inode(sb, bh)) >= 0) {
-+                      gdp = tmp;
-+                      break;
-               }
--              goto repeat;
-       }
-+      err = -ENOSPC;
-+      if (!gdp)
-+              goto out;
-+
-+ find_free:
-+      BUFFER_TRACE(bh, "get_undo_access");
-+      err = ext3_journal_get_undo_access(handle, bh);
-+      if (err)
-+              goto fail;
-+
-+      if (ext3_set_bit(j, bh->b_data)) {
-+              ext3_error (sb, "ext3_new_inode",
-+                              "bit already set for inode %d", j);
-+              goto fail; 
-+      }
-+      BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-+      err = ext3_journal_dirty_metadata(handle, bh);
-+      if (err)
-+              goto fail;
-+      
-  have_bit_and_group:
-+      if (buffer_jbd(bh) && bh2jh(bh)->b_committed_data)
-+              J_ASSERT_BH(bh, !ext3_test_bit(j, bh2jh(bh)->b_committed_data));
-+
-       j += i * EXT3_INODES_PER_GROUP(sb) + 1;
-       if (j < EXT3_FIRST_INO(sb) || j > le32_to_cpu(es->s_inodes_count)) {
-               ext3_error (sb, "ext3_new_inode",
diff --git a/lustre/kernel_patches/patches/ext3-inode-reuse-2.4.20.patch b/lustre/kernel_patches/patches/ext3-inode-reuse-2.4.20.patch
deleted file mode 100644 (file)
index 18c69ff..0000000
+++ /dev/null
@@ -1,352 +0,0 @@
-Index: linux-2.4.20/fs/ext3/ialloc.c
-===================================================================
---- linux-2.4.20.orig/fs/ext3/ialloc.c 2003-10-25 00:37:13.000000000 +0400
-+++ linux-2.4.20/fs/ext3/ialloc.c      2003-10-29 20:33:33.000000000 +0300
-@@ -241,11 +241,16 @@
-       bh = sb->u.ext3_sb.s_inode_bitmap[bitmap_nr];
--      BUFFER_TRACE(bh, "get_write_access");
--      fatal = ext3_journal_get_write_access(handle, bh);
-+      BUFFER_TRACE(bh, "get_undo_access");
-+      fatal = ext3_journal_get_undo_access(handle, bh);
-       if (fatal)
-               goto error_return;
-+      /* to prevent inode reusing within single transaction -bzzz */
-+      BUFFER_TRACE(bh, "clear in b_committed_data");
-+      J_ASSERT_BH(bh, bh2jh(bh)->b_committed_data != NULL);
-+      ext3_set_bit(bit, bh2jh(bh)->b_committed_data);
-+
-       /* Ok, now we can actually update the inode bitmaps.. */
-       if (!ext3_clear_bit (bit, bh->b_data))
-               ext3_error (sb, "ext3_free_inode",
-@@ -319,6 +324,131 @@
-       return 0;
- }
-+static int ext3_test_allocatable(int nr, struct buffer_head *bh)
-+{
-+      if (ext3_test_bit(nr, bh->b_data))
-+              return 0;
-+      if (!buffer_jbd(bh) || !bh2jh(bh)->b_committed_data)
-+              return 1;
-+#if 0
-+      if (!ext3_test_bit(nr, bh2jh(bh)->b_committed_data))
-+              printk("EXT3-fs: inode %d was used\n", nr);
-+#endif
-+      return !ext3_test_bit(nr, bh2jh(bh)->b_committed_data);
-+}
-+
-+int ext3_find_group_dir(const struct inode *dir,
-+                              struct ext3_group_desc **gdp,
-+                              struct buffer_head **bh)
-+{
-+      struct super_block *sb = dir->i_sb;
-+      struct ext3_super_block *es;
-+      struct ext3_group_desc *tmp;
-+      int i = 0, j, avefreei;
-+
-+      es = EXT3_SB(sb)->s_es;
-+      avefreei = le32_to_cpu(es->s_free_inodes_count) /
-+                      sb->u.ext3_sb.s_groups_count;
-+      for (j = 0; j < sb->u.ext3_sb.s_groups_count; j++) {
-+              struct buffer_head *temp_buffer;
-+              tmp = ext3_get_group_desc(sb, j, &temp_buffer);
-+              if (tmp && le16_to_cpu(tmp->bg_free_inodes_count) &&
-+                      le16_to_cpu(tmp->bg_free_inodes_count) >= avefreei) {
-+                      if (!*gdp || (le16_to_cpu(tmp->bg_free_blocks_count) >
-+                              le16_to_cpu((*gdp)->bg_free_blocks_count))) {
-+                              i = j;
-+                              *gdp = tmp;
-+                              *bh = temp_buffer;
-+                      }
-+              }
-+      }
-+
-+      return i;
-+}
-+
-+int ext3_find_group_other(const struct inode *dir,
-+                              struct ext3_group_desc **gdp,
-+                              struct buffer_head **bh)
-+{
-+      struct super_block *sb = dir->i_sb;
-+      struct ext3_group_desc *tmp;
-+      int i, j;
-+
-+      /*
-+       * Try to place the inode in its parent directory
-+       */
-+      i = dir->u.ext3_i.i_block_group;
-+      tmp = ext3_get_group_desc(sb, i, bh);
-+      if (tmp && le16_to_cpu(tmp->bg_free_inodes_count))
-+              *gdp = tmp;
-+      else {
-+              /*
-+               * Use a quadratic hash to find a group with a
-+               * free inode
-+               */
-+              for (j = 1; j < sb->u.ext3_sb.s_groups_count; j <<= 1) {
-+                      i += j;
-+                      if (i >= sb->u.ext3_sb.s_groups_count)
-+                              i -= sb->u.ext3_sb.s_groups_count;
-+                      tmp = ext3_get_group_desc (sb, i, bh);
-+                      if (tmp && le16_to_cpu(tmp->bg_free_inodes_count)) {
-+                              *gdp = tmp;
-+                              break;
-+                      }
-+              }
-+      }
-+      if (!*gdp) {
-+              /*
-+               * That failed: try linear search for a free inode
-+               */
-+              i = dir->u.ext3_i.i_block_group + 1;
-+              for (j = 2; j < sb->u.ext3_sb.s_groups_count; j++) {
-+                      if (++i >= sb->u.ext3_sb.s_groups_count)
-+                              i = 0;
-+                      tmp = ext3_get_group_desc (sb, i, bh);
-+                      if (tmp && le16_to_cpu(tmp->bg_free_inodes_count)) {
-+                              *gdp = tmp;
-+                              break;
-+                      }
-+              }
-+      }
-+
-+      return i;
-+}
-+
-+static int ext3_find_group(const struct inode *dir, int mode,
-+                              struct ext3_group_desc **gdp,
-+                              struct buffer_head **bh)
-+{
-+      if (S_ISDIR(mode))
-+              return ext3_find_group_dir(dir, gdp, bh);
-+      return ext3_find_group_other(dir, gdp, bh);
-+}
-+
-+static int ext3_find_usable_inode(struct super_block *sb,
-+                                      struct buffer_head *bh)
-+{
-+      int here, maxinodes, next;
-+
-+      maxinodes = EXT3_INODES_PER_GROUP(sb);
-+      here = 0;       
-+
-+      while (here < maxinodes) {
-+              next  = ext3_find_next_zero_bit((unsigned long *) bh->b_data, 
-+                                               maxinodes, here);
-+              if (next >= maxinodes)
-+                      return -1;
-+              if (ext3_test_allocatable(next, bh))
-+                      return next;
-+
-+              J_ASSERT_BH(bh, bh2jh(bh)->b_committed_data);
-+              here = ext3_find_next_zero_bit
-+                      ((unsigned long *) bh2jh(bh)->b_committed_data, 
-+                       maxinodes, next);
-+      }
-+      return -1;
-+}
-+
- /*
-  * There are two policies for allocating an inode.  If the new inode is
-  * a directory, then a forward search is made for a block group with both
-@@ -336,7 +466,7 @@
-       struct super_block * sb;
-       struct buffer_head * bh;
-       struct buffer_head * bh2;
--      int i, j, avefreei;
-+      int i, j, k;
-       struct inode * inode;
-       int bitmap_nr;
-       struct ext3_group_desc * gdp;
-@@ -371,11 +501,12 @@
-               bh = EXT3_SB(sb)->s_inode_bitmap[bitmap_nr];
--              BUFFER_TRACE(bh, "get_write_access");
--              err = ext3_journal_get_write_access(handle, bh);
-+              BUFFER_TRACE(bh, "get_undo_access");
-+              err = ext3_journal_get_undo_access(handle, bh);
-               if (err) goto fail;
--              if (ext3_set_bit(j, bh->b_data)) {
-+              if (!ext3_test_allocatable(j, bh) ||
-+                              ext3_set_bit(j, bh->b_data)) {
-                       printk(KERN_ERR "goal inode %lu unavailable\n", goal);
-                       /* Oh well, we tried. */
-                       goto repeat;
-@@ -393,119 +524,70 @@
- repeat:
-       gdp = NULL;
--      i = 0;
--
--      if (S_ISDIR(mode)) {
--              avefreei = le32_to_cpu(es->s_free_inodes_count) /
--                      sb->u.ext3_sb.s_groups_count;
--              if (!gdp) {
--                      for (j = 0; j < sb->u.ext3_sb.s_groups_count; j++) {
--                              struct buffer_head *temp_buffer;
--                              tmp = ext3_get_group_desc (sb, j, &temp_buffer);
--                              if (tmp &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count) &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count) >=
--                                                      avefreei) {
--                                      if (!gdp || (le16_to_cpu(tmp->bg_free_blocks_count) >
--                                              le16_to_cpu(gdp->bg_free_blocks_count))) {
--                                              i = j;
--                                              gdp = tmp;
--                                              bh2 = temp_buffer;
--                                      }
--                              }
--                      }
--              }
--      } else {
--              /*
--               * Try to place the inode in its parent directory
--               */
--              i = dir->u.ext3_i.i_block_group;
--              tmp = ext3_get_group_desc (sb, i, &bh2);
--              if (tmp && le16_to_cpu(tmp->bg_free_inodes_count))
--                      gdp = tmp;
--              else
--              {
--                      /*
--                       * Use a quadratic hash to find a group with a
--                       * free inode
--                       */
--                      for (j = 1; j < sb->u.ext3_sb.s_groups_count; j <<= 1) {
--                              i += j;
--                              if (i >= sb->u.ext3_sb.s_groups_count)
--                                      i -= sb->u.ext3_sb.s_groups_count;
--                              tmp = ext3_get_group_desc (sb, i, &bh2);
--                              if (tmp &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count)) {
--                                      gdp = tmp;
--                                      break;
--                              }
--                      }
--              }
--              if (!gdp) {
--                      /*
--                       * That failed: try linear search for a free inode
--                       */
--                      i = dir->u.ext3_i.i_block_group + 1;
--                      for (j = 2; j < sb->u.ext3_sb.s_groups_count; j++) {
--                              if (++i >= sb->u.ext3_sb.s_groups_count)
--                                      i = 0;
--                              tmp = ext3_get_group_desc (sb, i, &bh2);
--                              if (tmp &&
--                                  le16_to_cpu(tmp->bg_free_inodes_count)) {
--                                      gdp = tmp;
--                                      break;
--                              }
--                      }
--              }
--      }
-+      /* choose group */
-+      i = ext3_find_group(dir, mode, &gdp, &bh2);
-       err = -ENOSPC;
-       if (!gdp)
-               goto out;
--
-+      
-       err = -EIO;
--      bitmap_nr = load_inode_bitmap (sb, i);
-+      bitmap_nr = load_inode_bitmap(sb, i);
-       if (bitmap_nr < 0)
-               goto fail;
--
-       bh = sb->u.ext3_sb.s_inode_bitmap[bitmap_nr];
--      if ((j = ext3_find_first_zero_bit ((unsigned long *) bh->b_data,
--                                    EXT3_INODES_PER_GROUP(sb))) <
--          EXT3_INODES_PER_GROUP(sb)) {
--              BUFFER_TRACE(bh, "get_write_access");
--              err = ext3_journal_get_write_access(handle, bh);
--              if (err) goto fail;
--              
--              if (ext3_set_bit (j, bh->b_data)) {
--                      ext3_error (sb, "ext3_new_inode",
--                                    "bit already set for inode %d", j);
--                      goto repeat;
--              }
--              BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
--              err = ext3_journal_dirty_metadata(handle, bh);
--              if (err) goto fail;
--      } else {
--              if (le16_to_cpu(gdp->bg_free_inodes_count) != 0) {
--                      ext3_error (sb, "ext3_new_inode",
--                                  "Free inodes count corrupted in group %d",
--                                  i);
--                      /* Is it really ENOSPC? */
--                      err = -ENOSPC;
--                      if (sb->s_flags & MS_RDONLY)
--                              goto fail;
--
--                      BUFFER_TRACE(bh2, "get_write_access");
--                      err = ext3_journal_get_write_access(handle, bh2);
--                      if (err) goto fail;
--                      gdp->bg_free_inodes_count = 0;
--                      BUFFER_TRACE(bh2, "call ext3_journal_dirty_metadata");
--                      err = ext3_journal_dirty_metadata(handle, bh2);
--                      if (err) goto fail;
-+      /* try to allocate in selected group */
-+      j = ext3_find_usable_inode(sb, bh);
-+      err = -ENOSPC;
-+      if (j >= 0)
-+              goto found_free;
-+
-+      /* can't allocate: try to allocate in ANY another groups */
-+      k = i;
-+      err = -EIO;
-+      for (i = i + 1; i != k; i++) {
-+              if (i >= sb->u.ext3_sb.s_groups_count)
-+                      i = 0;
-+              tmp = ext3_get_group_desc(sb, i, &bh2);
-+              if (le16_to_cpu(tmp->bg_free_inodes_count) == 0)
-+                      continue;
-+
-+              bitmap_nr = load_inode_bitmap(sb, i);
-+              if (bitmap_nr < 0)
-+                      goto fail;
-+              bh = sb->u.ext3_sb.s_inode_bitmap[bitmap_nr];
-+
-+              /* try to allocate in selected group */
-+              if ((j = ext3_find_usable_inode(sb, bh)) >= 0) {
-+                      gdp = tmp;
-+                      break;
-               }
--              goto repeat;
-       }
-+      err = -ENOSPC;
-+      if (!gdp)
-+              goto out;
-+
-+ found_free:
-+      BUFFER_TRACE(bh, "get_undo_access");
-+      err = ext3_journal_get_undo_access(handle, bh);
-+      if (err)
-+              goto fail;
-+
-+      if (ext3_set_bit(j, bh->b_data)) {
-+              ext3_error (sb, "ext3_new_inode",
-+                              "bit already set for inode %d", j);
-+              goto fail; 
-+      }
-+      BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-+      err = ext3_journal_dirty_metadata(handle, bh);
-+      if (err)
-+              goto fail;
-+      
-  have_bit_and_group:
-+      if (buffer_jbd(bh) && bh2jh(bh)->b_committed_data)
-+              J_ASSERT_BH(bh, !ext3_test_bit(j, bh2jh(bh)->b_committed_data));
-+
-       j += i * EXT3_INODES_PER_GROUP(sb) + 1;
-       if (j < EXT3_FIRST_INO(sb) || j > le32_to_cpu(es->s_inodes_count)) {
-               ext3_error (sb, "ext3_new_inode",
diff --git a/lustre/kernel_patches/patches/ext3-inode-reuse-2.4.22.patch b/lustre/kernel_patches/patches/ext3-inode-reuse-2.4.22.patch
deleted file mode 100644 (file)
index 2bbebbf..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-Index: linux-2.4.22-ac1/fs/ext3/ialloc.c
-===================================================================
---- linux-2.4.22-ac1.orig/fs/ext3/ialloc.c     2003-10-22 14:20:03.000000000 +0400
-+++ linux-2.4.22-ac1/fs/ext3/ialloc.c  2003-10-29 22:32:28.000000000 +0300
-@@ -242,11 +242,16 @@
-       bh = sb->u.ext3_sb.s_inode_bitmap[bitmap_nr];
--      BUFFER_TRACE(bh, "get_write_access");
--      fatal = ext3_journal_get_write_access(handle, bh);
-+      BUFFER_TRACE(bh, "get_undo_access");
-+      fatal = ext3_journal_get_undo_access(handle, bh);
-       if (fatal)
-               goto error_return;
-+      /* to prevent inode reusing within single transaction -bzzz */
-+      BUFFER_TRACE(bh, "clear in b_committed_data");
-+      J_ASSERT_BH(bh, bh2jh(bh)->b_committed_data != NULL);
-+      ext3_set_bit(bit, bh2jh(bh)->b_committed_data);
-+
-       /* Ok, now we can actually update the inode bitmaps.. */
-       if (!ext3_clear_bit (bit, bh->b_data))
-               ext3_error (sb, "ext3_free_inode",
-@@ -320,6 +325,43 @@
-       return 0;
- }
-+static int ext3_test_allocatable(int nr, struct buffer_head *bh)
-+{
-+      if (ext3_test_bit(nr, bh->b_data))
-+              return 0;
-+      if (!buffer_jbd(bh) || !bh2jh(bh)->b_committed_data)
-+              return 1;
-+#if 0
-+      if (!ext3_test_bit(nr, bh2jh(bh)->b_committed_data))
-+              printk("EXT3-fs: inode %d was used\n", nr);
-+#endif
-+      return !ext3_test_bit(nr, bh2jh(bh)->b_committed_data);
-+}
-+
-+static int ext3_find_usable_inode(struct super_block *sb,
-+                                      struct buffer_head *bh)
-+{
-+      int here, maxinodes, next;
-+
-+      maxinodes = EXT3_INODES_PER_GROUP(sb);
-+      here = 0;       
-+
-+      while (here < maxinodes) {
-+              next  = ext3_find_next_zero_bit((unsigned long *) bh->b_data, 
-+                                               maxinodes, here);
-+              if (next >= maxinodes)
-+                      return -1;
-+              if (ext3_test_allocatable(next, bh))
-+                      return next;
-+
-+              J_ASSERT_BH(bh, bh2jh(bh)->b_committed_data);
-+              here = ext3_find_next_zero_bit
-+                      ((unsigned long *) bh2jh(bh)->b_committed_data, 
-+                       maxinodes, next);
-+      }
-+      return -1;
-+}
-+
- /*
-  * There are two policies for allocating an inode.  If the new inode is
-  * a directory, then a forward search is made for a block group with both
-@@ -530,7 +572,7 @@
-       struct super_block * sb;
-       struct buffer_head * bh;
-       struct buffer_head * bh2;
--      int group;
-+      int group, k;
-       ino_t ino;
-       struct inode * inode;
-       int bitmap_nr;
-@@ -569,7 +611,8 @@
-               err = ext3_journal_get_write_access(handle, bh);
-               if (err) goto fail;
--              if (ext3_set_bit(ino, bh->b_data)) {
-+              if (!ext3_test_allocatable(ino, bh) ||
-+                              ext3_set_bit(ino, bh->b_data)) {
-                       printk(KERN_ERR "goal inode %lu unavailable\n", goal);
-                       /* Oh well, we tried. */
-                       goto repeat;
-@@ -595,52 +638,63 @@
-               group = find_group_other(sb, dir);
-   
-       err = -ENOSPC;
--      if (!group == -1)
-+      if (group == -1)
-               goto out;
-       err = -EIO;
--      bitmap_nr = load_inode_bitmap (sb, group);
-+      bitmap_nr = load_inode_bitmap(sb, group);
-       if (bitmap_nr < 0)
-               goto fail;
--
-       bh = sb->u.ext3_sb.s_inode_bitmap[bitmap_nr];
--      gdp = ext3_get_group_desc (sb, group, &bh2);
--      if ((ino = ext3_find_first_zero_bit ((unsigned long *) bh->b_data,
--                                    EXT3_INODES_PER_GROUP(sb))) <
--          EXT3_INODES_PER_GROUP(sb)) {
--              BUFFER_TRACE(bh, "get_write_access");
--              err = ext3_journal_get_write_access(handle, bh);
--              if (err) goto fail;
--              
--              if (ext3_set_bit (ino, bh->b_data)) {
--                      ext3_error (sb, "ext3_new_inode",
--                                    "bit already set for inode %lu", ino);
--                      goto repeat;
--              }
--              BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
--              err = ext3_journal_dirty_metadata(handle, bh);
--              if (err) goto fail;
--      } else {
--              if (le16_to_cpu(gdp->bg_free_inodes_count) != 0) {
--                      ext3_error (sb, "ext3_new_inode",
--                                  "Free inodes count corrupted in group %d",
--                                  group);
--                      /* Is it really ENOSPC? */
--                      err = -ENOSPC;
--                      if (sb->s_flags & MS_RDONLY)
--                              goto fail;
--
--                      BUFFER_TRACE(bh2, "get_write_access");
--                      err = ext3_journal_get_write_access(handle, bh2);
--                      if (err) goto fail;
--                      gdp->bg_free_inodes_count = 0;
--                      BUFFER_TRACE(bh2, "call ext3_journal_dirty_metadata");
--                      err = ext3_journal_dirty_metadata(handle, bh2);
--                      if (err) goto fail;
-+      /* try to allocate in selected group */
-+      if ((ino = ext3_find_usable_inode(sb, bh)) >= 0)
-+              goto find_free;
-+
-+      /* can't allocate: try to allocate in ANY another groups */
-+      k = group;
-+      gdp = NULL;
-+      err = -EIO;
-+      for (group = group + 1; group != k; group++) {
-+              struct ext3_group_desc *tmp;
-+
-+              if (group >= sb->u.ext3_sb.s_groups_count)
-+                      group = 0;
-+              tmp = ext3_get_group_desc(sb, group, &bh2);
-+              if (le16_to_cpu(tmp->bg_free_inodes_count) == 0)
-+                      continue;
-+
-+              bitmap_nr = load_inode_bitmap(sb, group);
-+              if (bitmap_nr < 0)
-+                      goto fail;
-+              bh = sb->u.ext3_sb.s_inode_bitmap[bitmap_nr];
-+
-+              /* try to allocate in selected group */
-+              if ((ino = ext3_find_usable_inode(sb, bh)) >= 0) {
-+                      gdp = tmp;
-+                      break;
-               }
--              goto repeat;
-       }
-+      err = -ENOSPC;
-+      if (!gdp)
-+              goto out;
-+
-+find_free:
-+      BUFFER_TRACE(bh, "get_undo_access");
-+      err = ext3_journal_get_undo_access(handle, bh);
-+      if (err)
-+              goto fail;
-+
-+      if (ext3_set_bit(ino, bh->b_data)) {
-+              ext3_error (sb, "ext3_new_inode",
-+                              "bit already set for inode %lu",
-+                              (unsigned long) ino);
-+              goto fail; 
-+      }
-+      BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-+      err = ext3_journal_dirty_metadata(handle, bh);
-+      if (err)
-+              goto fail;
- have_bit_and_group:
-       ino += group * EXT3_INODES_PER_GROUP(sb) + 1;
diff --git a/lustre/kernel_patches/patches/ext3-mballoc-2.4.21-chaos.patch b/lustre/kernel_patches/patches/ext3-mballoc-2.4.21-chaos.patch
new file mode 100644 (file)
index 0000000..61e8981
--- /dev/null
@@ -0,0 +1,378 @@
+Index: 57chaos/fs/ext3/balloc.c
+===================================================================
+--- 57chaos.orig/fs/ext3/balloc.c      2004-06-21 14:00:07.000000000 -0700
++++ 57chaos/fs/ext3/balloc.c   2004-06-21 14:19:56.000000000 -0700
+@@ -11,6 +11,7 @@
+  *        David S. Miller (davem@caip.rutgers.edu), 1995
+  */
++#include <linux/module.h>
+ #include <linux/config.h>
+ #include <linux/sched.h>
+ #include <linux/fs.h>
+@@ -1005,3 +1006,303 @@ void ext3_check_blocks_bitmap (struct su
+                       bitmap_count);
+ }
+ #endif
++
++#define MBDEBUG_
++#ifdef MBDEBUG
++#define mbdebug(fmt,a...)     printk(fmt, ##a)
++#else
++#define mbdebug(fmt,a...)
++#endif
++
++/*
++ * in alloc_status we track allocation: the best found extent, how many
++ * extents we've skipped, etc
++ */
++struct alloc_status {
++      struct inode *inode;
++      struct super_block *sb;
++      int goal;               /* goal for allocation */
++      int target_len;         /* goal for len */
++      int start, len;         /* the best found extent */
++      int num;                /* number of extent: to limit searching */
++};
++
++/*
++ * ext3_test_extent() compares requested extent with existing in as.
++ * if requested extent is better than that, then replace old one.
++ * then it tries to understand is new extent suitable or not
++ * return 1 if caller can complete searching
++ */
++inline int ext3_test_extent(struct alloc_status *as, int group,
++                              int start, int len)
++{
++      struct ext3_super_block * es = EXT3_SB(as->sb)->s_es;
++      unsigned long tmp;
++
++      J_ASSERT(as->target_len >= len);
++
++      mbdebug("found extent %d:%d\n", start, len);
++      tmp = start + group * EXT3_BLOCKS_PER_GROUP(as->sb)
++                      + le32_to_cpu(es->s_first_data_block);
++
++      /* account requests in order to limit searching */
++      as->num++;
++
++      if (as->num == 20)
++              return 1;
++
++      /* if hit goal, then searching may complete right now */
++      if (tmp == as->goal) {
++nice:
++              as->start = tmp;
++              as->len = len;
++              return 1;
++      }
++
++      /* if found extent has length we need, return it right now */
++      if (as->target_len == len)
++              goto nice;
++
++      /* first, check is found extent better than we have in as */
++      if (as->len > len) {
++better:
++              as->start = tmp;
++              as->len = len;
++              return 0;
++      }
++
++      /* FIXME: more checks! */
++      as->start = tmp;
++      as->len = len;
++
++      /* 1) closeness to goal */
++      
++      /* 2) extent length */
++      /* 3) number of tested extent (we check all found extents) */
++      /* */
++      return 0;
++}
++
++/*
++ * this routine tries to find upto *len free contig. blocks
++ * return number of found block (+ length of extent in *len)
++ * or -1 if no free blocks at all
++ */
++int ext3_find_free_extent(struct buffer_head *bh, int goal, int *len, int max)
++{
++      int i, l = 0;
++
++repeat:
++      if (goal >= max)
++              return -1;
++      /* find first free block */
++      i = ext3_find_next_zero_bit(bh->b_data, max, goal);
++      if (i >= max) {
++              /* no free block */
++              return -1;
++      }
++      /* check upto len block for ability to be allocated */
++      while (l < *len && i + l < max) {
++              if (!ext3_test_allocatable(i + l, bh))
++                      break;
++              l++;
++      }
++      if (l == 0) {
++              goal = i + 1;
++              goto repeat;
++      }
++      *len = l;
++      return i;
++}
++
++/*
++ * this routine loops over group, finds free extents and tests them
++ * for some criterias
++ * it may return negative value if group can't be loaded, 0 - if
++ * no good extent can be found, 1 - if good extent found
++ */
++int ext3_find_extent_in_group(struct alloc_status *as, int group,
++                              unsigned long goal, int len)
++{
++      int k, i, l, bitmap_nr, found = 0;
++      struct super_block *sb = as->sb;
++      int max = EXT3_BLOCKS_PER_GROUP(sb);
++      struct buffer_head *bh, *bmbh;
++      struct ext3_group_desc *gdp;
++
++      mbdebug("look for %d blocks in group %d starting from %lu\n",
++                      len, group, goal);
++
++      gdp = ext3_get_group_desc(as->sb, group, &bh);
++      if (!gdp)
++              return -EIO;
++
++      if (le16_to_cpu(gdp->bg_free_blocks_count) == 0)
++              return 0;
++
++      bitmap_nr = load_block_bitmap(as->sb, group);
++      if (bitmap_nr < 0)
++              return -EIO;
++
++      bmbh = EXT3_SB(sb)->s_block_bitmap[bitmap_nr];
++
++      i = goal;
++      /* scan from goal to the end */
++repeat:
++      while (i < max) {
++              l = len;
++              k = ext3_find_free_extent(bmbh, i, &l, max);
++              i = k + l;
++              if (k < 0)
++                      break;
++              if (ext3_test_extent(as, group, k, l)) {
++                      found = 1;
++                      goto out;
++              }
++      }
++
++      if (goal) {
++              /* scan from 0 upto goal */
++              mbdebug("repeat from %lu in %d\n", goal, group);
++              max = goal - 1;
++              goal = i = 0;
++              goto repeat;
++      }
++out:
++      return found; 
++}
++
++#define check_in_committed(bh,j)      \
++      J_ASSERT_BH((bh), !ext3_test_bit((j), bh2jh((bh))->b_committed_data))
++
++int ext3_new_blocks(handle_t *handle, struct inode *inode, int *num,
++                      unsigned long goal, int *errp)
++{
++      struct super_block *sb = inode->i_sb;
++      int first_group, group, bitmap_nr;
++      struct buffer_head *bh, *bmbh;
++      struct ext3_super_block *es;
++      struct ext3_group_desc *gdp;
++      struct alloc_status as;
++      int err, bit, i;
++
++      J_ASSERT(num && *num > 0);
++
++      if (DQUOT_ALLOC_BLOCK(inode, *num)) {
++              *errp = -EDQUOT;
++              return 0;
++      }
++
++      es = EXT3_SB(inode->i_sb)->s_es;
++
++      *errp = 0;
++      as.target_len = *num;
++      as.sb = sb;
++      as.inode = inode;
++      as.goal = goal;
++      as.start = -1;
++      as.len = 0;
++      as.num = 0;
++
++      if (goal < le32_to_cpu(es->s_first_data_block) ||
++          goal >= le32_to_cpu(es->s_blocks_count))
++              goal = le32_to_cpu(es->s_first_data_block);
++
++      lock_super(sb);
++      first_group = (goal - le32_to_cpu(es->s_first_data_block)) /
++                      EXT3_BLOCKS_PER_GROUP(sb);
++      goal = (goal - le32_to_cpu(es->s_first_data_block)) %
++                      EXT3_BLOCKS_PER_GROUP(sb);
++      group = first_group;
++      do {
++              err = ext3_find_extent_in_group(&as, group, goal, *num);
++              if (err < 0) 
++                      goto error_out;
++              else if (err)
++                      break;
++
++              /* reset goal for next groups */
++              goal = 0;
++
++              /* try next group */
++              if (++group == EXT3_SB(sb)->s_groups_count)
++                      group = 0;
++      } while (group != first_group);
++
++      if (as.len == 0) {
++              err = -ENOSPC;
++              goto error_out;
++      }
++
++      /* in the end we've found something, allocate it */
++      mbdebug("best extent: %u:%u\n", as.start, as.len);
++
++      group = (as.start - le32_to_cpu(es->s_first_data_block)) /
++              EXT3_BLOCKS_PER_GROUP(sb);
++      bit = (as.start - le32_to_cpu(es->s_first_data_block)) %
++              EXT3_BLOCKS_PER_GROUP(sb);
++      gdp = ext3_get_group_desc(sb, group, &bh);
++      if (!gdp) {
++              err = -EIO;
++              goto error_out; 
++      }
++
++      /* mark block(s) used in bitmap ... */
++      bitmap_nr = load_block_bitmap(sb, group);
++      if (bitmap_nr < 0) {
++              err = -EIO;
++              goto error_out;
++      }
++      bmbh = EXT3_SB(sb)->s_block_bitmap[bitmap_nr];
++      /* Make sure we use undo access for the bitmap, because it is
++           critical that we do the frozen_data COW on bitmap buffers in
++           all cases even if the buffer is in BJ_Forget state in the
++           committing transaction.  */
++      err = ext3_journal_get_undo_access(handle, bmbh);
++      if (err)
++              goto error_out;
++      err = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
++      if (err)
++              goto error_out;
++      err = ext3_journal_get_write_access(handle, bh);
++      if (err)
++              goto error_out;
++      for (i = 0; i < as.len; i++) {
++              J_ASSERT(!ext3_test_bit(bit + i, bmbh->b_data));
++              if (buffer_jbd(bmbh) && bh2jh(bmbh)->b_committed_data)
++                      check_in_committed(bmbh, bit + i);
++              set_bit(bit + i, bmbh->b_data);
++      }
++      err = ext3_journal_dirty_metadata(handle, bmbh);
++      if (err)
++              goto error_out;
++
++      /* ... and correct group descriptor */
++      gdp->bg_free_blocks_count =
++              cpu_to_le16(le16_to_cpu(gdp->bg_free_blocks_count) - as.len);
++      es->s_free_blocks_count =
++              cpu_to_le32(le32_to_cpu(es->s_free_blocks_count) - as.len);
++      err = ext3_journal_dirty_metadata(handle, bmbh);
++      if (err)
++              goto error_out;
++      err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
++      if (err)
++              goto error_out;
++      sb->s_dirt = 1;
++
++      if (*num != as.len)
++              DQUOT_FREE_BLOCK(inode, *num - as.len);
++      *num = as.len;
++
++out:
++      unlock_super(sb);
++      return as.start;
++
++error_out:
++      as.start = 0;
++      *errp = err;
++      goto out;
++}
++
++EXPORT_SYMBOL(ext3_new_blocks);
++
+Index: 57chaos/fs/ext3/file.c
+===================================================================
+--- 57chaos.orig/fs/ext3/file.c        2004-06-21 14:00:07.000000000 -0700
++++ 57chaos/fs/ext3/file.c     2004-06-21 14:19:56.000000000 -0700
+@@ -71,6 +71,18 @@ ext3_file_write(struct file *file, const
+       ssize_t ret;
+       struct inode *inode = file->f_dentry->d_inode;
++#if 0
++      /* allocate all the space to be written */
++      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL) {
++              int blocksize = inode->i_sb->s_blocksize;
++              unsigned long start, end;
++
++              start = (unsigned long) *ppos / blocksize;
++              end = ((unsigned long) *ppos + count + blocksize - 1)
++                              / blocksize;
++              ext3_ext_allocate_nblocks(inode, start, end - start);
++      }
++#endif
+       ret = generic_file_write(file, buf, count, ppos);
+       /* Skip file flushing code if there was an error, or if nothing
+Index: 57chaos/fs/ext3/Makefile
+===================================================================
+--- 57chaos.orig/fs/ext3/Makefile      2004-06-21 14:17:11.000000000 -0700
++++ 57chaos/fs/ext3/Makefile   2004-06-21 14:20:30.000000000 -0700
+@@ -9,11 +9,11 @@
+ O_TARGET := ext3.o
+-export-objs := ext3-exports.o extents.o
++export-objs := ext3-exports.o extents.o balloc.o
+ obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
+               ioctl.o namei.o super.o symlink.o hash.o ext3-exports.o \
+-              extents.o
++              extents.o 
+ obj-m    := $(O_TARGET)
+ export-objs += xattr.o
+Index: 57chaos/include/linux/ext3_fs.h
+===================================================================
+--- 57chaos.orig/include/linux/ext3_fs.h       2004-06-21 14:17:43.000000000 -0700
++++ 57chaos/include/linux/ext3_fs.h    2004-06-21 14:19:56.000000000 -0700
+@@ -60,6 +60,8 @@
+ #define ext3_debug(f, a...)   do {} while (0)
+ #endif
++#define EXT3_MULTIBLOCK_ALLOCATOR     1
++
+ /*
+  * Special inodes numbers
+  */
+@@ -668,6 +670,7 @@ extern void ext3_check_blocks_bitmap (st
+ extern struct ext3_group_desc * ext3_get_group_desc(struct super_block * sb,
+                                                   unsigned int block_group,
+                                                   struct buffer_head ** bh);
++extern int ext3_new_blocks(handle_t*, struct inode*, int*, unsigned long, int*);
+ /* dir.c */
+ extern int ext3_check_dir_entry(const char *, struct inode *,
index d9196dd..55f69aa 100644 (file)
@@ -1,7 +1,7 @@
-Index: linux-2.4.21-suse2/fs/ext3/balloc.c
+Index: linux-2.4.21-rs-2/fs/ext3/balloc.c
 ===================================================================
---- linux-2.4.21-suse2.orig/fs/ext3/balloc.c   2003-06-13 18:51:37.000000000 +0400
-+++ linux-2.4.21-suse2/fs/ext3/balloc.c        2004-02-06 11:07:16.000000000 +0300
+--- linux-2.4.21-rs-2.orig/fs/ext3/balloc.c    2003-06-13 07:51:37.000000000 -0700
++++ linux-2.4.21-rs-2/fs/ext3/balloc.c 2004-05-18 14:16:35.000000000 -0700
 @@ -11,6 +11,7 @@
   *        David S. Miller (davem@caip.rutgers.edu), 1995
   */
@@ -314,10 +314,10 @@ Index: linux-2.4.21-suse2/fs/ext3/balloc.c
 +
 +EXPORT_SYMBOL(ext3_new_blocks);
 +
-Index: linux-2.4.21-suse2/fs/ext3/file.c
+Index: linux-2.4.21-rs-2/fs/ext3/file.c
 ===================================================================
---- linux-2.4.21-suse2.orig/fs/ext3/file.c     2004-02-05 20:42:39.000000000 +0300
-+++ linux-2.4.21-suse2/fs/ext3/file.c  2004-02-06 10:19:59.000000000 +0300
+--- linux-2.4.21-rs-2.orig/fs/ext3/file.c      2004-05-18 14:06:02.000000000 -0700
++++ linux-2.4.21-rs-2/fs/ext3/file.c   2004-05-18 14:16:35.000000000 -0700
 @@ -70,6 +70,18 @@
        int ret, err;
        struct inode *inode = file->f_dentry->d_inode;
@@ -337,23 +337,23 @@ Index: linux-2.4.21-suse2/fs/ext3/file.c
        ret = generic_file_write(file, buf, count, ppos);
  
        /* Skip file flushing code if there was an error, or if nothing
-Index: linux-2.4.21-suse2/fs/ext3/Makefile
+Index: linux-2.4.21-rs-2/fs/ext3/Makefile
 ===================================================================
---- linux-2.4.21-suse2.orig/fs/ext3/Makefile   2004-02-05 20:43:47.000000000 +0300
-+++ linux-2.4.21-suse2/fs/ext3/Makefile        2004-02-06 10:19:59.000000000 +0300
+--- linux-2.4.21-rs-2.orig/fs/ext3/Makefile    2004-05-18 14:12:56.000000000 -0700
++++ linux-2.4.21-rs-2/fs/ext3/Makefile 2004-05-18 14:16:46.000000000 -0700
 @@ -14,7 +14,7 @@
  obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
                ioctl.o namei.o super.o symlink.o hash.o ext3-exports.o \
                extents.o
 -export-objs += extents.o
 +export-objs += extents.o balloc.o
  obj-m    := $(O_TARGET)
  
- export-objs += xattr.o
-Index: linux-2.4.21-suse2/include/linux/ext3_fs.h
+Index: linux-2.4.21-rs-2/include/linux/ext3_fs.h
 ===================================================================
---- linux-2.4.21-suse2.orig/include/linux/ext3_fs.h    2004-02-05 20:42:40.000000000 +0300
-+++ linux-2.4.21-suse2/include/linux/ext3_fs.h 2004-02-06 10:19:59.000000000 +0300
+--- linux-2.4.21-rs-2.orig/include/linux/ext3_fs.h     2004-05-18 14:13:24.000000000 -0700
++++ linux-2.4.21-rs-2/include/linux/ext3_fs.h  2004-05-18 14:16:35.000000000 -0700
 @@ -58,6 +58,8 @@
  #define ext3_debug(f, a...)   do {} while (0)
  #endif
diff --git a/lustre/kernel_patches/patches/ext3-mballoc2-2.6.7.patch b/lustre/kernel_patches/patches/ext3-mballoc2-2.6.7.patch
new file mode 100644 (file)
index 0000000..6118bba
--- /dev/null
@@ -0,0 +1,1719 @@
+Index: linux-2.6.7/fs/ext3/mballoc.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/mballoc.c 2003-01-30 13:24:37.000000000 +0300
++++ linux-2.6.7/fs/ext3/mballoc.c      2004-09-03 09:48:40.000000000 +0400
+@@ -0,0 +1,1397 @@
++/*
++ * Copyright (c) 2003, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public Licens
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-
++ */
++
++
++/*
++ * mballoc.c contains the multiblocks allocation routines
++ */
++
++#include <linux/config.h>
++#include <linux/time.h>
++#include <linux/fs.h>
++#include <linux/namei.h>
++#include <linux/jbd.h>
++#include <linux/ext3_fs.h>
++#include <linux/ext3_jbd.h>
++#include <linux/quotaops.h>
++#include <linux/buffer_head.h>
++#include <linux/module.h>
++
++/*
++ * TODO:
++ *   - do not scan from the beginning, try to remember first free block
++ *   - mb_mark_used_* may allocate chunk right after splitting buddy
++ *   - special flag to advice allocator to look for requested + N blocks
++ *     this may improve interaction between extents and mballoc
++ */
++
++/*
++ * with AGRESSIVE_CHECK allocator runs consistency checks over
++ * structures. this checks slow things down a lot
++ */
++#define AGGRESSIVE_CHECK__
++
++/*
++ */
++#define MB_DEBUG__
++#ifdef MB_DEBUG
++#define mb_debug(fmt,a...)    printk(fmt, ##a)
++#else
++#define mb_debug(fmt,a...)
++#endif
++
++/*
++ * where to save buddies structures beetween umount/mount (clean case only)
++ */
++#define EXT3_BUDDY_FILE               ".buddy"
++
++/*
++ * max. number of chunks to be tracked in ext3_free_extent struct
++ */
++#define MB_ARR_SIZE   32
++
++struct ext3_allocation_context {
++      struct super_block *ac_sb;
++
++      /* search goals */
++      int ac_g_group;
++      int ac_g_start;
++      int ac_g_len;
++      int ac_g_flags;
++      
++      /* the best found extent */
++      int ac_b_group;
++      int ac_b_start;
++      int ac_b_len;
++      
++      /* number of iterations done. we have to track to limit searching */
++      int ac_repeats;
++      int ac_groups_scanned;
++      int ac_status;
++};
++
++#define AC_STATUS_CONTINUE    1
++#define AC_STATUS_FOUND               2
++
++
++struct ext3_buddy {
++      void *bd_bitmap;
++      void *bd_buddy;
++      int bd_blkbits;
++      struct buffer_head *bd_bh;
++      struct buffer_head *bd_bh2;
++      struct ext3_buddy_group_blocks *bd_bd;
++      struct super_block *bd_sb;
++};
++
++struct ext3_free_extent {
++      int fe_start;
++      int fe_len;
++      unsigned char fe_orders[MB_ARR_SIZE];
++      unsigned char fe_nums;
++      unsigned char fe_back;
++};
++
++#define in_range(b, first, len)       ((b) >= (first) && (b) <= (first) + (len) - 1)
++
++
++int ext3_create (struct inode *, struct dentry *, int, struct nameidata *);
++struct buffer_head * read_block_bitmap(struct super_block *, unsigned int);
++void ext3_free_blocks_old(handle_t *, struct inode *, unsigned long, unsigned long);
++int ext3_new_block_old(handle_t *, struct inode *, unsigned long, u32 *, u32 *, int *);
++int ext3_mb_reserve_blocks(struct super_block *, int);
++void ext3_mb_release_blocks(struct super_block *, int);
++void ext3_mb_poll_new_transaction(struct super_block *, handle_t *);
++void ext3_mb_free_committed_blocks(struct super_block *);
++
++static inline void *mb_find_buddy(struct ext3_buddy *e3b, int order, int *max)
++{
++      int i = 1;
++      void *bb;
++
++      J_ASSERT(e3b->bd_bitmap != e3b->bd_buddy);
++      J_ASSERT(max != NULL);
++
++      if (order > e3b->bd_blkbits + 1)
++              return NULL;
++
++      /* at order 0 we see each particular block */
++      *max = 1 << (e3b->bd_blkbits + 3);
++      if (order == 0)
++              return e3b->bd_bitmap;
++
++      bb = e3b->bd_buddy;
++      *max = *max >> 1;
++      while (i < order) {
++              bb += 1 << (e3b->bd_blkbits - i);
++              i++;
++              *max = *max >> 1;
++      }
++      return bb;
++}
++
++static int ext3_mb_load_desc(struct super_block *sb, int group,
++                              struct ext3_buddy *e3b)
++{
++      struct ext3_sb_info *sbi = EXT3_SB(sb);
++
++      J_ASSERT(sbi->s_buddy_blocks[group].bb_bitmap);
++      J_ASSERT(sbi->s_buddy_blocks[group].bb_buddy);
++
++      /* load bitmap */
++      e3b->bd_bh = sb_getblk(sb, sbi->s_buddy_blocks[group].bb_bitmap);
++      if (e3b->bd_bh == NULL) {
++              ext3_error(sb, "ext3_mb_load_desc",
++                              "can't get block for buddy bitmap\n");
++              goto out;
++      }
++      if (!buffer_uptodate(e3b->bd_bh)) {
++              ll_rw_block(READ, 1, &e3b->bd_bh);
++              wait_on_buffer(e3b->bd_bh);
++      }
++      J_ASSERT(buffer_uptodate(e3b->bd_bh));
++
++      /* load buddy */
++      e3b->bd_bh2 = sb_getblk(sb, sbi->s_buddy_blocks[group].bb_buddy);
++      if (e3b->bd_bh2 == NULL) {
++              ext3_error(sb, "ext3_mb_load_desc",
++                              "can't get block for buddy bitmap\n");
++              goto out;
++      }
++      if (!buffer_uptodate(e3b->bd_bh2)) {
++              ll_rw_block(READ, 1, &e3b->bd_bh2);
++              wait_on_buffer(e3b->bd_bh2);
++      }
++      J_ASSERT(buffer_uptodate(e3b->bd_bh2));
++
++      e3b->bd_bitmap = e3b->bd_bh->b_data;
++      e3b->bd_buddy = e3b->bd_bh2->b_data;
++      e3b->bd_blkbits = sb->s_blocksize_bits;
++      e3b->bd_bd = sbi->s_buddy_blocks + group;
++      e3b->bd_sb = sb;
++
++      return 0;
++out:
++      brelse(e3b->bd_bh);
++      brelse(e3b->bd_bh2);
++      e3b->bd_bh = NULL;
++      e3b->bd_bh2 = NULL;
++      return -EIO;
++}
++
++static void ext3_mb_dirty_buddy(struct ext3_buddy *e3b)
++{
++      mark_buffer_dirty(e3b->bd_bh);
++      mark_buffer_dirty(e3b->bd_bh2);
++}
++
++static void ext3_mb_release_desc(struct ext3_buddy *e3b)
++{
++      brelse(e3b->bd_bh);
++      brelse(e3b->bd_bh2);
++}
++
++#ifdef AGGRESSIVE_CHECK
++static void mb_check_buddy(struct ext3_buddy *e3b)
++{
++      int order = e3b->bd_blkbits + 1;
++      int max, max2, i, j, k, count;
++      void *buddy, *buddy2;
++
++      if (!test_opt(e3b->bd_sb, MBALLOC))
++              return;
++
++      while (order > 1) {
++              buddy = mb_find_buddy(e3b, order, &max);
++              J_ASSERT(buddy);
++              buddy2 = mb_find_buddy(e3b, order - 1, &max2);
++              J_ASSERT(buddy2);
++              J_ASSERT(buddy != buddy2);
++              J_ASSERT(max * 2 == max2);
++
++              count = 0;
++              for (i = 0; i < max; i++) {
++
++                      if (!test_bit(i, buddy)) {
++                              /* only single bit in buddy2 may be 1 */
++                              if (test_bit(i << 1, buddy2))
++                                      J_ASSERT(!test_bit((i<<1)+1, buddy2));
++                              else if (test_bit((i << 1) + 1, buddy2))
++                                      J_ASSERT(!test_bit(i << 1, buddy2));
++                              continue;
++                      }
++
++                      /* both bits in buddy2 must be 0 */
++                      J_ASSERT(!test_bit(i << 1, buddy2));
++                      J_ASSERT(!test_bit((i << 1) + 1, buddy2));
++
++                      for (j = 0; j < (1 << order); j++) {
++                              k = (i * (1 << order)) + j;
++                              J_ASSERT(test_bit(k, e3b->bd_bitmap));
++                      }
++                      count++;
++              }
++              J_ASSERT(e3b->bd_bd->bb_counters[order] == count);
++              order--;
++      }
++
++      buddy = mb_find_buddy(e3b, 0, &max);
++      for (i = 0; i < max; i++) {
++              if (test_bit(i, buddy))
++                      continue;
++              /* check used bits only */
++              for (j = 0; j < e3b->bd_blkbits + 1; j++) {
++                      buddy2 = mb_find_buddy(e3b, j, &max2);
++                      k = i >> j;
++                      J_ASSERT(k < max2);
++                      J_ASSERT(!test_bit(k, buddy2));
++              }
++      }
++}
++#else
++#define mb_check_buddy(e3b)
++#endif
++
++static inline void
++ext3_lock_group(struct super_block *sb, int group)
++{
++      spin_lock(&EXT3_SB(sb)->s_buddy_blocks[group].bb_lock);
++}
++
++static inline void
++ext3_unlock_group(struct super_block *sb, int group)
++{
++      spin_unlock(&EXT3_SB(sb)->s_buddy_blocks[group].bb_lock);
++}
++
++static int mb_find_order_for_block(struct ext3_buddy *e3b, int block)
++{
++      int order = 1;
++      void *bb;
++
++      J_ASSERT(e3b->bd_bitmap != e3b->bd_buddy);
++      J_ASSERT(block < (1 << (e3b->bd_blkbits + 3)));
++
++      bb = e3b->bd_buddy;
++      while (order <= e3b->bd_blkbits + 1) {
++              block = block >> 1;
++              if (test_bit(block, bb)) {
++                      /* this block is part of buddy of order 'order' */
++                      return order;
++              }
++              bb += 1 << (e3b->bd_blkbits - order);
++              order++;
++      }
++      return 0;
++}
++
++static inline void mb_clear_bits(void *bm, int cur, int len)
++{
++      __u32 *addr;
++
++      len = cur + len;
++      while (cur < len) {
++              if ((cur & 31) == 0 && (len - cur) >= 32) {
++                      /* fast path: clear whole word at once */
++                      addr = bm + (cur >> 3);
++                      *addr = 0;
++                      cur += 32;
++                      continue;
++              }
++              clear_bit(cur, bm);
++              cur++;
++      }
++}
++
++static inline void mb_set_bits(void *bm, int cur, int len)
++{
++      __u32 *addr;
++
++      len = cur + len;
++      while (cur < len) {
++              if ((cur & 31) == 0 && (len - cur) >= 32) {
++                      /* fast path: clear whole word at once */
++                      addr = bm + (cur >> 3);
++                      *addr = 0xffffffff;
++                      cur += 32;
++                      continue;
++              }
++              set_bit(cur, bm);
++              cur++;
++      }
++}
++
++static int mb_free_blocks(struct ext3_buddy *e3b, int first, int count)
++{
++      int block, max, order;
++      void *buddy, *buddy2;
++
++      mb_check_buddy(e3b);
++      while (count-- > 0) {
++              block = first++;
++              order = 0;
++
++              J_ASSERT(!test_bit(block, e3b->bd_bitmap));
++              set_bit(block, e3b->bd_bitmap);
++              e3b->bd_bd->bb_counters[order]++;
++
++              /* start of the buddy */
++              buddy = mb_find_buddy(e3b, order, &max);
++
++              do {
++                      block &= ~1UL;
++                      if (!test_bit(block, buddy) ||
++                                      !test_bit(block + 1, buddy))
++                              break;
++
++                      /* both the buddies are free, try to coalesce them */
++                      buddy2 = mb_find_buddy(e3b, order + 1, &max);
++
++                      if (!buddy2)
++                              break;
++
++                      if (order > 0) {
++                              /* for special purposes, we don't clear
++                               * free bits in bitmap */
++                              clear_bit(block, buddy);
++                              clear_bit(block + 1, buddy);
++                      }
++                      e3b->bd_bd->bb_counters[order]--;
++                      e3b->bd_bd->bb_counters[order]--;
++
++                      block = block >> 1;
++                      order++;
++                      e3b->bd_bd->bb_counters[order]++;
++
++                      set_bit(block, buddy2);
++                      buddy = buddy2;
++              } while (1);
++      }
++      mb_check_buddy(e3b);
++
++      return 0;
++}
++
++/*
++ * returns 1 if out extent is enough to fill needed space
++ */
++int mb_make_backward_extent(struct ext3_free_extent *in,
++                              struct ext3_free_extent *out, int needed)
++{
++      int i;
++
++      J_ASSERT(in);
++      J_ASSERT(out);
++      J_ASSERT(in->fe_nums < MB_ARR_SIZE);
++
++      out->fe_len = 0;
++      out->fe_start = in->fe_start + in->fe_len;
++      out->fe_nums = 0;
++
++      /* for single-chunk extent we need not back order
++       * also, if an extent doesn't fill needed space
++       * then it makes no sense to try back order becase
++       * if we select this extent then it'll be use as is */
++      if (in->fe_nums < 2 || in->fe_len < needed)
++              return 0;
++
++      i = in->fe_nums - 1;
++      while (i >= 0 && out->fe_len < needed) {
++              out->fe_len += (1 << in->fe_orders[i]);
++              out->fe_start -= (1 << in->fe_orders[i]);
++              i--;
++      }
++      /* FIXME: in some situation fe_orders may be too small to hold
++       * all the buddies */
++      J_ASSERT(out->fe_len >= needed);
++      
++      for (i++; i < in->fe_nums; i++)
++              out->fe_orders[out->fe_nums++] = in->fe_orders[i];
++      J_ASSERT(out->fe_nums < MB_ARR_SIZE);
++      out->fe_back = 1;
++
++      return 1;
++}
++
++int mb_find_extent(struct ext3_buddy *e3b, int order, int block,
++                      int needed, struct ext3_free_extent *ex)
++{
++      int space = needed;
++      int next, max, ord;
++      void *buddy;
++
++      J_ASSERT(ex != NULL);
++
++      ex->fe_nums = 0;
++      ex->fe_len = 0;
++      
++      buddy = mb_find_buddy(e3b, order, &max);
++      J_ASSERT(buddy);
++      J_ASSERT(block < max);
++      if (!test_bit(block, buddy))
++              goto nofree;
++
++      if (order == 0) {
++              /* find actual order */
++              order = mb_find_order_for_block(e3b, block);
++              block = block >> order;
++      }
++
++      ex->fe_orders[ex->fe_nums++] = order;
++      ex->fe_len = 1 << order;
++      ex->fe_start = block << order;
++      ex->fe_back = 0;
++
++      while ((space = space - (1 << order)) > 0) {
++
++              buddy = mb_find_buddy(e3b, order, &max);
++              J_ASSERT(buddy);
++
++              if (block + 1 >= max)
++                      break;
++
++              next = (block + 1) * (1 << order);
++              if (!test_bit(next, e3b->bd_bitmap))
++                      break;
++
++              ord = mb_find_order_for_block(e3b, next);
++
++              if ((1 << ord) >= needed) {
++                      /* we dont want to coalesce with self-enough buddies */
++                      break;
++              }
++              order = ord;
++              block = next >> order;
++              ex->fe_len += 1 << order;
++
++              if (ex->fe_nums < MB_ARR_SIZE)
++                      ex->fe_orders[ex->fe_nums++] = order;
++      }
++
++nofree:
++      J_ASSERT(ex->fe_start + ex->fe_len <= (1 << (e3b->bd_blkbits + 3)));
++      return ex->fe_len;
++}
++
++static int mb_mark_used_backward(struct ext3_buddy *e3b,
++                                      struct ext3_free_extent *ex, int len)
++{
++      int start = ex->fe_start, len0 = len;
++      int ord, mlen, max, cur;
++      void *buddy;
++
++      start = ex->fe_start + ex->fe_len - 1;
++      while (len) {
++              ord = mb_find_order_for_block(e3b, start);
++              if (((start >> ord) << ord) == (start - (1 << ord) + 1) &&
++                              len >= (1 << ord)) {
++                      /* the whole chunk may be allocated at once! */
++                      mlen = 1 << ord;
++                      buddy = mb_find_buddy(e3b, ord, &max);
++                      J_ASSERT((start >> ord) < max);
++                      clear_bit(start >> ord, buddy);
++                      e3b->bd_bd->bb_counters[ord]--;
++                      start -= mlen;
++                      len -= mlen;
++                      J_ASSERT(len >= 0);
++                      J_ASSERT(start >= 0);
++                      continue;
++              }
++
++              /* we have to split large buddy */
++              J_ASSERT(ord > 0);
++              buddy = mb_find_buddy(e3b, ord, &max);
++              clear_bit(start >> ord, buddy);
++              e3b->bd_bd->bb_counters[ord]--;
++
++              ord--;
++              cur = (start >> ord) & ~1U;
++              buddy = mb_find_buddy(e3b, ord, &max);
++              set_bit(cur, buddy);
++              set_bit(cur + 1, buddy);
++              e3b->bd_bd->bb_counters[ord]++;
++              e3b->bd_bd->bb_counters[ord]++;
++      }
++
++      /* now drop all the bits in bitmap */
++      mb_clear_bits(e3b->bd_bitmap, ex->fe_start + ex->fe_len - len0, len0);
++
++      mb_check_buddy(e3b);
++
++      return 0;
++}
++
++static int mb_mark_used_forward(struct ext3_buddy *e3b,
++                              struct ext3_free_extent *ex, int len)
++{
++      int start = ex->fe_start, len0 = len;
++      int ord, mlen, max, cur;
++      void *buddy;
++
++      while (len) {
++              ord = mb_find_order_for_block(e3b, start);
++
++              if (((start >> ord) << ord) == start && len >= (1 << ord)) {
++                      /* the whole chunk may be allocated at once! */
++                      mlen = 1 << ord;
++                      buddy = mb_find_buddy(e3b, ord, &max);
++                      J_ASSERT((start >> ord) < max);
++                      clear_bit(start >> ord, buddy);
++                      e3b->bd_bd->bb_counters[ord]--;
++                      start += mlen;
++                      len -= mlen;
++                      J_ASSERT(len >= 0);
++                      continue;
++              }
++
++              /* we have to split large buddy */
++              J_ASSERT(ord > 0);
++              buddy = mb_find_buddy(e3b, ord, &max);
++              clear_bit(start >> ord, buddy);
++              e3b->bd_bd->bb_counters[ord]--;
++
++              ord--;
++              cur = (start >> ord) & ~1U;
++              buddy = mb_find_buddy(e3b, ord, &max);
++              set_bit(cur, buddy);
++              set_bit(cur + 1, buddy);
++              e3b->bd_bd->bb_counters[ord]++;
++              e3b->bd_bd->bb_counters[ord]++;
++      }
++
++      /* now drop all the bits in bitmap */
++      mb_clear_bits(e3b->bd_bitmap, ex->fe_start, len0);
++
++      mb_check_buddy(e3b);
++
++      return 0;
++}
++
++int inline mb_mark_used(struct ext3_buddy *e3b,
++                      struct ext3_free_extent *ex, int len)
++{
++      int err;
++
++      J_ASSERT(ex);
++      if (ex->fe_back == 0)
++              err = mb_mark_used_forward(e3b, ex, len);
++      else
++              err = mb_mark_used_backward(e3b, ex, len);
++      return err;
++}
++
++int ext3_mb_new_in_group(struct ext3_allocation_context *ac,
++                              struct ext3_buddy *e3b, int group)
++{
++      struct super_block *sb = ac->ac_sb;
++      int err, gorder, max, i;
++      struct ext3_free_extent curex;
++
++      /* let's know order of allocation */
++      gorder = 0;
++      while (ac->ac_g_len > (1 << gorder))
++              gorder++;
++
++      if ((ac->ac_g_flags & 1) && ac->ac_g_group == group) {
++              /* someone asks for space at this specified block
++               * probably he wants to merge it into existing extent */
++              if (test_bit(ac->ac_g_start, e3b->bd_bitmap)) {
++                      /* good. at least one block is free */
++                      max = mb_find_extent(e3b, 0, ac->ac_g_start,
++                                              ac->ac_g_len, &curex);
++                      max = min(curex.fe_len, ac->ac_g_len);
++                      mb_mark_used(e3b, &curex, max);
++                      
++                      ac->ac_b_group = group;
++                      ac->ac_b_start = curex.fe_start;
++                      ac->ac_b_len = max;
++                      ac->ac_status = AC_STATUS_FOUND;
++                      err = 0;
++                      goto out;
++              }
++              /* don't try to find goal anymore */
++              ac->ac_g_flags &= ~1;
++      }
++
++      i = 0;
++      while (1) {
++              i = find_next_bit(e3b->bd_bitmap, sb->s_blocksize * 8, i);
++              if (i >= sb->s_blocksize * 8)
++                      break;
++
++              max = mb_find_extent(e3b, 0, i, ac->ac_g_len, &curex);
++              if (max >= ac->ac_g_len) {
++                      max = min(curex.fe_len, ac->ac_g_len);
++                      mb_mark_used(e3b, &curex, max);
++                      
++                      ac->ac_b_group = group;
++                      ac->ac_b_start = curex.fe_start;
++                      ac->ac_b_len = max;
++                      ac->ac_status = AC_STATUS_FOUND;
++                      break;
++              }
++              i += max;
++      }
++
++      return 0;
++
++out:
++      return err;
++}
++
++int mb_good_group(struct ext3_allocation_context *ac, int group, int cr)
++{
++      struct ext3_group_desc *gdp;
++      int free_blocks;
++
++      gdp = ext3_get_group_desc(ac->ac_sb, group, NULL);
++      if (!gdp)
++              return 0;
++      free_blocks = le16_to_cpu(gdp->bg_free_blocks_count);
++      if (free_blocks == 0)
++              return 0;
++
++      /* someone wants this block very much */
++      if ((ac->ac_g_flags & 1) && ac->ac_g_group == group)
++              return 1;
++
++      /* FIXME: I'd like to take fragmentation into account here */
++      if (cr == 0) {
++              if (free_blocks >= ac->ac_g_len >> 1)
++                      return 1;
++      } else if (cr == 1) {
++              if (free_blocks >= ac->ac_g_len >> 2)
++                      return 1;
++      } else if (cr == 2) {
++              return 1;
++      } else {
++              BUG();
++      }
++      return 0;
++}
++
++int ext3_mb_new_blocks(handle_t *handle, struct inode *inode,
++                      unsigned long goal, int *len, int flags, int *errp)
++{
++      struct buffer_head *bitmap_bh = NULL;
++      struct ext3_allocation_context ac;
++      int i, group, block, cr, err = 0;
++      struct ext3_group_desc *gdp;
++      struct ext3_super_block *es;
++      struct buffer_head *gdp_bh;
++      struct ext3_sb_info *sbi;
++      struct super_block *sb;
++      struct ext3_buddy e3b;
++
++      J_ASSERT(len != NULL);
++      J_ASSERT(*len > 0);
++
++      sb = inode->i_sb;
++      if (!sb) {
++              printk("ext3_mb_new_nblocks: nonexistent device");
++              return 0;
++      }
++
++      if (!test_opt(sb, MBALLOC)) {
++              static int ext3_mballoc_warning = 0;
++              if (ext3_mballoc_warning == 0) {
++                      printk(KERN_ERR "EXT3-fs: multiblock request with "
++                              "mballoc disabled!\n");
++                      ext3_mballoc_warning++;
++              }
++              *len = 1;
++              err = ext3_new_block_old(handle, inode, goal, NULL,NULL, errp);
++              return err;
++      }
++
++      ext3_mb_poll_new_transaction(sb, handle);
++
++      sbi = EXT3_SB(sb);
++      es = EXT3_SB(sb)->s_es;
++
++      if (!(flags & 2)) {
++              /* someone asks for non-reserved blocks */
++              BUG_ON(*len > 1);
++              err = ext3_mb_reserve_blocks(sb, 1);
++              if (err) {
++                      *errp = err;
++                      return 0;
++              }
++      }
++
++      /*
++       * Check quota for allocation of this blocks.
++       */
++      while (*len && DQUOT_ALLOC_BLOCK(inode, *len))
++              *len -= 1;
++      if (*len == 0) {
++              *errp = -EDQUOT;
++              block = 0;
++              goto out;
++      }
++
++      /* start searching from the goal */
++      if (goal < le32_to_cpu(es->s_first_data_block) ||
++          goal >= le32_to_cpu(es->s_blocks_count))
++              goal = le32_to_cpu(es->s_first_data_block);
++      group = (goal - le32_to_cpu(es->s_first_data_block)) /
++                      EXT3_BLOCKS_PER_GROUP(sb);
++      block = ((goal - le32_to_cpu(es->s_first_data_block)) %
++                      EXT3_BLOCKS_PER_GROUP(sb));
++
++      /* set up allocation goals */
++      ac.ac_b_group = ac.ac_b_start = ac.ac_b_len = 0;
++      ac.ac_status = 0;
++      ac.ac_groups_scanned = 0;
++      ac.ac_sb = inode->i_sb;
++      ac.ac_g_group = group;
++      ac.ac_g_start = block;
++      ac.ac_g_len = *len;
++      ac.ac_g_flags = flags;
++
++      /* loop over the groups */
++      for (cr = 0; cr < 3 && ac.ac_status != AC_STATUS_FOUND; cr++) {
++              for (i = 0; i < EXT3_SB(sb)->s_groups_count; group++, i++) {
++                      if (group == EXT3_SB(sb)->s_groups_count)
++                              group = 0;
++
++                      /* check is group good for our criteries */
++                      if (!mb_good_group(&ac, group, cr))
++                              continue;
++
++                      err = ext3_mb_load_desc(ac.ac_sb, group, &e3b);
++                      if (err)
++                              goto out_err;
++
++                      ext3_lock_group(sb, group);
++                      if (!mb_good_group(&ac, group, cr)) {
++                              /* someone did allocation from this group */
++                              ext3_unlock_group(sb, group);
++                              ext3_mb_release_desc(&e3b);
++                              continue;
++                      }
++
++                      err = ext3_mb_new_in_group(&ac, &e3b, group);
++                      ext3_unlock_group(sb, group);
++                      if (ac.ac_status == AC_STATUS_FOUND)
++                              ext3_mb_dirty_buddy(&e3b);
++                      ext3_mb_release_desc(&e3b);
++                      if (err)
++                              goto out_err;
++                      if (ac.ac_status == AC_STATUS_FOUND)
++                              break;
++              }
++      }
++
++      if (ac.ac_status != AC_STATUS_FOUND) {
++              /* unfortunately, we can't satisfy this request */
++              J_ASSERT(ac.ac_b_len == 0);
++              DQUOT_FREE_BLOCK(inode, *len);
++              *errp = -ENOSPC;
++              block = 0;
++              goto out;
++      }
++
++      /* good news - free block(s) have been found. now it's time
++       * to mark block(s) in good old journaled bitmap */
++      block = ac.ac_b_group * EXT3_BLOCKS_PER_GROUP(sb)
++                      + ac.ac_b_start + le32_to_cpu(es->s_first_data_block);
++
++      /* we made a desicion, now mark found blocks in good old
++       * bitmap to be journaled */
++
++      ext3_debug("using block group %d(%d)\n",
++                      ac.ac_b_group.group, gdp->bg_free_blocks_count);
++
++      bitmap_bh = read_block_bitmap(sb, ac.ac_b_group);
++      if (!bitmap_bh) {
++              *errp = -EIO;
++              goto out_err;
++      }
++
++      err = ext3_journal_get_write_access(handle, bitmap_bh);
++      if (err) {
++              *errp = err;
++              goto out_err;
++      }
++
++      gdp = ext3_get_group_desc(sb, ac.ac_b_group, &gdp_bh);
++      if (!gdp) {
++              *errp = -EIO;
++              goto out_err;
++      }
++      
++      err = ext3_journal_get_write_access(handle, gdp_bh);
++      if (err)
++              goto out_err;
++
++      block = ac.ac_b_start + ac.ac_b_group * EXT3_BLOCKS_PER_GROUP(sb)
++                              + le32_to_cpu(es->s_first_data_block);
++
++      if (block == le32_to_cpu(gdp->bg_block_bitmap) ||
++          block == le32_to_cpu(gdp->bg_inode_bitmap) ||
++          in_range(block, le32_to_cpu(gdp->bg_inode_table),
++                    EXT3_SB(sb)->s_itb_per_group))
++              ext3_error(sb, "ext3_new_block",
++                          "Allocating block in system zone - "
++                          "block = %u", block);
++#if 0
++      for (i = 0; i < ac.ac_b_len; i++)
++              J_ASSERT(!test_bit(ac.ac_b_start + i, bitmap_bh->b_data));
++#endif
++      mb_set_bits(bitmap_bh->b_data, ac.ac_b_start, ac.ac_b_len);
++
++      ext3_lock_group(sb, ac.ac_b_group);
++      gdp->bg_free_blocks_count =
++                      cpu_to_le16(le16_to_cpu(gdp->bg_free_blocks_count) - 
++                                      ac.ac_b_len);
++      ext3_unlock_group(sb, ac.ac_b_group);
++      percpu_counter_mod(&sbi->s_freeblocks_counter, -ac.ac_b_len);
++
++      err = ext3_journal_dirty_metadata(handle, bitmap_bh);
++      if (err)
++              goto out_err;
++      err = ext3_journal_dirty_metadata(handle, gdp_bh);
++      if (err)
++              goto out_err;
++
++      sb->s_dirt = 1;
++      *errp = 0;
++      brelse(bitmap_bh);
++
++      /* drop non-allocated, but dquote'd blocks */
++      J_ASSERT(*len >= ac.ac_b_len);
++      DQUOT_FREE_BLOCK(inode, *len - ac.ac_b_len);
++
++      *len = ac.ac_b_len;
++      J_ASSERT(block != 0);
++      goto out;
++
++out_err:
++      /* if we've already allocated something, roll it back */
++      if (ac.ac_status == AC_STATUS_FOUND) {
++              /* FIXME: free blocks here */
++      }
++
++      DQUOT_FREE_BLOCK(inode, *len);
++      brelse(bitmap_bh);
++      *errp = err;
++      block = 0;
++out:
++      if (!(flags & 2)) {
++              /* block wasn't reserved before and we reserved it
++               * at the beginning of allocation. it doesn't matter
++               * whether we allocated anything or we failed: time
++               * to release reservation. NOTE: because I expect
++               * any multiblock request from delayed allocation
++               * path only, here is single block always */
++              ext3_mb_release_blocks(sb, 1);
++      }
++      return block;
++}
++
++int ext3_mb_generate_buddy(struct super_block *sb, int group)
++{
++      struct buffer_head *bh;
++      int i, err, count = 0;
++      struct ext3_buddy e3b;
++      
++      err = ext3_mb_load_desc(sb, group, &e3b);
++      if (err)
++              goto out;
++      memset(e3b.bd_bh->b_data, 0, sb->s_blocksize);
++      memset(e3b.bd_bh2->b_data, 0, sb->s_blocksize);
++
++      bh = read_block_bitmap(sb, group);
++      if (bh == NULL) {
++              err = -EIO; 
++              goto out2;
++      }
++
++      /* loop over the blocks, nad create buddies for free ones */
++      for (i = 0; i < sb->s_blocksize * 8; i++) {
++              if (!test_bit(i, (void *) bh->b_data)) {
++                      mb_free_blocks(&e3b, i, 1);
++                      count++;
++              }
++      }
++      brelse(bh);
++      mb_check_buddy(&e3b);
++      ext3_mb_dirty_buddy(&e3b);
++
++out2:
++      ext3_mb_release_desc(&e3b);
++out:
++      return err;
++}
++
++EXPORT_SYMBOL(ext3_mb_new_blocks);
++
++#define MB_CREDITS    \
++      (EXT3_DATA_TRANS_BLOCKS + 3 + EXT3_INDEX_EXTRA_TRANS_BLOCKS +   \
++              2 * EXT3_QUOTA_INIT_BLOCKS)
++
++int ext3_mb_init_backend(struct super_block *sb)
++{
++      struct inode *root = sb->s_root->d_inode;
++      struct ext3_sb_info *sbi = EXT3_SB(sb);
++      struct dentry *db;
++      tid_t target;
++      int err, i;
++
++      sbi->s_buddy_blocks = kmalloc(sizeof(struct ext3_buddy_group_blocks) *
++                                      sbi->s_groups_count, GFP_KERNEL);
++      if (sbi->s_buddy_blocks == NULL) {
++              printk("can't allocate mem for buddy maps\n");
++              return -ENOMEM;
++      }
++      memset(sbi->s_buddy_blocks, 0,
++              sizeof(struct ext3_buddy_group_blocks) * sbi->s_groups_count);
++      sbi->s_buddy = NULL;
++
++      down(&root->i_sem);
++      db = lookup_one_len(EXT3_BUDDY_FILE, sb->s_root,
++                              strlen(EXT3_BUDDY_FILE));
++      if (IS_ERR(db)) {
++              err = PTR_ERR(db);
++              printk("can't lookup buddy file: %d\n", err);
++              goto out;
++      }
++
++      if (db->d_inode != NULL) {
++              sbi->s_buddy = igrab(db->d_inode);
++              goto map;
++      }
++
++      err = ext3_create(root, db, S_IFREG, NULL);
++      if (err) {
++              printk("error while creation buddy file: %d\n", err);
++      } else {
++              sbi->s_buddy = igrab(db->d_inode);
++      }
++
++map:
++      for (i = 0; i < sbi->s_groups_count; i++) {
++              struct buffer_head *bh = NULL;
++              handle_t *handle;
++
++              handle = ext3_journal_start(sbi->s_buddy, MB_CREDITS);
++              if (IS_ERR(handle)) {
++                      err = PTR_ERR(handle);
++                      goto out2;
++              }
++              
++              /* allocate block for bitmap */
++              bh = ext3_getblk(handle, sbi->s_buddy, i * 2, 1, &err);
++              if (bh == NULL) {
++                      printk("can't get block for buddy bitmap: %d\n", err);
++                      goto out2;
++              }
++              sbi->s_buddy_blocks[i].bb_bitmap = bh->b_blocknr;
++              brelse(bh);
++
++              /* allocate block for buddy */
++              bh = ext3_getblk(handle, sbi->s_buddy, i * 2 + 1, 1, &err);
++              if (bh == NULL) {
++                      printk("can't get block for buddy: %d\n", err);
++                      goto out2;
++              }
++              sbi->s_buddy_blocks[i].bb_buddy = bh->b_blocknr;
++              brelse(bh);
++              ext3_journal_stop(handle);
++              spin_lock_init(&sbi->s_buddy_blocks[i].bb_lock);
++              sbi->s_buddy_blocks[i].bb_md_cur = NULL;
++              sbi->s_buddy_blocks[i].bb_tid = 0;
++      }
++
++      if (journal_start_commit(sbi->s_journal, &target))
++              log_wait_commit(sbi->s_journal, target);
++
++out2:
++      dput(db);
++out:
++      up(&root->i_sem);
++      return err;
++}
++
++int ext3_mb_release(struct super_block *sb)
++{
++      struct ext3_sb_info *sbi = EXT3_SB(sb);
++      
++      if (!test_opt(sb, MBALLOC))
++              return 0;
++
++      /* release freed, non-committed blocks */
++      spin_lock(&sbi->s_md_lock);
++      list_splice_init(&sbi->s_closed_transaction,
++                      &sbi->s_committed_transaction);
++      list_splice_init(&sbi->s_active_transaction,
++                      &sbi->s_committed_transaction);
++      spin_unlock(&sbi->s_md_lock);
++      ext3_mb_free_committed_blocks(sb);
++
++      if (sbi->s_buddy_blocks)
++              kfree(sbi->s_buddy_blocks);
++      if (sbi->s_buddy)
++              iput(sbi->s_buddy);
++      if (sbi->s_blocks_reserved)
++              printk("ext3-fs: %ld blocks being reserved at umount!\n",
++                              sbi->s_blocks_reserved);
++      return 0;
++}
++
++int ext3_mb_init(struct super_block *sb)
++{
++      struct ext3_super_block *es;
++      int i;
++
++      if (!test_opt(sb, MBALLOC))
++              return 0;
++
++      /* init file for buddy data */
++      clear_opt(EXT3_SB(sb)->s_mount_opt, MBALLOC);
++      ext3_mb_init_backend(sb);
++
++      es = EXT3_SB(sb)->s_es;
++      for (i = 0; i < EXT3_SB(sb)->s_groups_count; i++)
++              ext3_mb_generate_buddy(sb, i);
++      spin_lock_init(&EXT3_SB(sb)->s_reserve_lock);
++      spin_lock_init(&EXT3_SB(sb)->s_md_lock);
++      INIT_LIST_HEAD(&EXT3_SB(sb)->s_active_transaction);
++      INIT_LIST_HEAD(&EXT3_SB(sb)->s_closed_transaction);
++      INIT_LIST_HEAD(&EXT3_SB(sb)->s_committed_transaction);
++      set_opt(EXT3_SB(sb)->s_mount_opt, MBALLOC);
++      printk("EXT3-fs: mballoc enabled\n");
++      return 0;
++}
++
++void ext3_mb_free_committed_blocks(struct super_block *sb)
++{
++      struct ext3_sb_info *sbi = EXT3_SB(sb);
++      int err, i, count = 0, count2 = 0;
++      struct ext3_free_metadata *md;
++      struct ext3_buddy e3b;
++
++      if (list_empty(&sbi->s_committed_transaction))
++              return;
++
++      /* there is committed blocks to be freed yet */
++      do {
++              /* get next array of blocks */
++              md = NULL;
++              spin_lock(&sbi->s_md_lock);
++              if (!list_empty(&sbi->s_committed_transaction)) {
++                      md = list_entry(sbi->s_committed_transaction.next,
++                                      struct ext3_free_metadata, list);
++                      list_del(&md->list);
++              }
++              spin_unlock(&sbi->s_md_lock);
++
++              if (md == NULL)
++                      break;
++
++              mb_debug("gonna free %u blocks in group %u (0x%p):",
++                              md->num, md->group, md);
++
++              err = ext3_mb_load_desc(sb, md->group, &e3b);
++              BUG_ON(err != 0);
++
++              /* there are blocks to put in buddy to make them really free */
++              count += md->num;
++              count2++;
++              ext3_lock_group(sb, md->group);
++              for (i = 0; i < md->num; i++) {
++                      mb_debug(" %u", md->blocks[i]);
++                      mb_free_blocks(&e3b, md->blocks[i], 1);
++              }
++              mb_debug("\n");
++              ext3_unlock_group(sb, md->group);
++
++              kfree(md);
++              ext3_mb_dirty_buddy(&e3b);
++              ext3_mb_release_desc(&e3b);
++
++      } while (md);
++      mb_debug("freed %u blocks in %u structures\n", count, count2);
++}
++
++void ext3_mb_poll_new_transaction(struct super_block *sb, handle_t *handle)
++{
++      struct ext3_sb_info *sbi = EXT3_SB(sb);
++
++      if (sbi->s_last_transaction == handle->h_transaction->t_tid)
++              return;
++
++      /* new transaction! time to close last one and free blocks for
++       * committed transaction. we know that only transaction can be
++       * active, so previos transaction can be being logged and we
++       * know that transaction before previous is known to be alreade
++       * logged. this means that now we may free blocks freed in all
++       * transactions before previous one. hope I'm clear enough ... */
++
++      spin_lock(&sbi->s_md_lock);
++      if (sbi->s_last_transaction != handle->h_transaction->t_tid) {
++              mb_debug("new transaction %lu, old %lu\n",
++                              (unsigned long) handle->h_transaction->t_tid,
++                              (unsigned long) sbi->s_last_transaction);
++              list_splice_init(&sbi->s_closed_transaction,
++                                      &sbi->s_committed_transaction);
++              list_splice_init(&sbi->s_active_transaction,
++                                      &sbi->s_closed_transaction);
++              sbi->s_last_transaction = handle->h_transaction->t_tid;
++      }
++      spin_unlock(&sbi->s_md_lock);
++
++      ext3_mb_free_committed_blocks(sb);
++}
++
++int ext3_mb_free_metadata(handle_t *handle, struct ext3_buddy *e3b,
++                              int group, int block, int count)
++{
++      struct ext3_buddy_group_blocks *db = e3b->bd_bd;
++      struct super_block *sb = e3b->bd_sb;
++      struct ext3_sb_info *sbi = EXT3_SB(sb);
++      struct ext3_free_metadata *md;
++      int i;
++
++      ext3_lock_group(sb, group);
++      for (i = 0; i < count; i++) {
++              md = db->bb_md_cur;
++              if (md && db->bb_tid != handle->h_transaction->t_tid) {
++                      db->bb_md_cur = NULL;
++                      md = NULL;
++              }
++
++              if (md == NULL) {
++                      ext3_unlock_group(sb, group);
++                      md = kmalloc(sizeof(*md), GFP_KERNEL);
++                      if (md == NULL)
++                              return -ENOMEM;
++                      md->num = 0;
++                      md->group = group;
++
++                      ext3_lock_group(sb, group);
++                      if (db->bb_md_cur == NULL) {
++                              spin_lock(&sbi->s_md_lock);
++                              list_add(&md->list, &sbi->s_active_transaction);
++                              spin_unlock(&sbi->s_md_lock);
++                              db->bb_md_cur = md;
++                              db->bb_tid = handle->h_transaction->t_tid;
++                              mb_debug("new md 0x%p for group %u\n",
++                                                      md, md->group);
++                      } else {
++                              kfree(md);
++                              md = db->bb_md_cur;
++                      }
++              }
++
++              BUG_ON(md->num >= EXT3_BB_MAX_BLOCKS);
++              md->blocks[md->num] = block + i;
++              md->num++;
++              if (md->num == EXT3_BB_MAX_BLOCKS) {
++                      /* no more space, put full container on a sb's list */
++                      db->bb_md_cur = NULL;
++              }
++      }
++      ext3_unlock_group(sb, group);
++      return 0;
++}
++
++void ext3_mb_free_blocks(handle_t *handle, struct inode *inode,
++                      unsigned long block, unsigned long count, int metadata)
++{
++      struct buffer_head *bitmap_bh = NULL;
++      struct ext3_group_desc *gdp;
++      struct ext3_super_block *es;
++      unsigned long bit, overflow;
++      struct buffer_head *gd_bh;
++      unsigned long block_group;
++      struct ext3_sb_info *sbi;
++      struct super_block *sb;
++      struct ext3_buddy e3b;
++      int err = 0, ret;
++
++      sb = inode->i_sb;
++      if (!sb) {
++              printk ("ext3_free_blocks: nonexistent device");
++              return;
++      }
++
++      ext3_mb_poll_new_transaction(sb, handle);
++
++      sbi = EXT3_SB(sb);
++      es = EXT3_SB(sb)->s_es;
++      if (block < le32_to_cpu(es->s_first_data_block) ||
++          block + count < block ||
++          block + count > le32_to_cpu(es->s_blocks_count)) {
++              ext3_error (sb, "ext3_free_blocks",
++                          "Freeing blocks not in datazone - "
++                          "block = %lu, count = %lu", block, count);
++              goto error_return;
++      }
++
++      ext3_debug("freeing block %lu\n", block);
++
++do_more:
++      overflow = 0;
++      block_group = (block - le32_to_cpu(es->s_first_data_block)) /
++                    EXT3_BLOCKS_PER_GROUP(sb);
++      bit = (block - le32_to_cpu(es->s_first_data_block)) %
++                    EXT3_BLOCKS_PER_GROUP(sb);
++      /*
++       * Check to see if we are freeing blocks across a group
++       * boundary.
++       */
++      if (bit + count > EXT3_BLOCKS_PER_GROUP(sb)) {
++              overflow = bit + count - EXT3_BLOCKS_PER_GROUP(sb);
++              count -= overflow;
++      }
++      brelse(bitmap_bh);
++      bitmap_bh = read_block_bitmap(sb, block_group);
++      if (!bitmap_bh)
++              goto error_return;
++      gdp = ext3_get_group_desc (sb, block_group, &gd_bh);
++      if (!gdp)
++              goto error_return;
++
++      if (in_range (le32_to_cpu(gdp->bg_block_bitmap), block, count) ||
++          in_range (le32_to_cpu(gdp->bg_inode_bitmap), block, count) ||
++          in_range (block, le32_to_cpu(gdp->bg_inode_table),
++                    EXT3_SB(sb)->s_itb_per_group) ||
++          in_range (block + count - 1, le32_to_cpu(gdp->bg_inode_table),
++                    EXT3_SB(sb)->s_itb_per_group))
++              ext3_error (sb, "ext3_free_blocks",
++                          "Freeing blocks in system zones - "
++                          "Block = %lu, count = %lu",
++                          block, count);
++
++      BUFFER_TRACE(bitmap_bh, "getting write access");
++      err = ext3_journal_get_write_access(handle, bitmap_bh);
++      if (err)
++              goto error_return;
++
++      /*
++       * We are about to modify some metadata.  Call the journal APIs
++       * to unshare ->b_data if a currently-committing transaction is
++       * using it
++       */
++      BUFFER_TRACE(gd_bh, "get_write_access");
++      err = ext3_journal_get_write_access(handle, gd_bh);
++      if (err)
++              goto error_return;
++
++      err = ext3_mb_load_desc(sb, block_group, &e3b);
++      if (err)
++              goto error_return;
++
++      if (metadata) {
++              /* blocks being freed are metadata. these blocks shouldn't
++               * be used until this transaction is committed */
++              ext3_mb_free_metadata(handle, &e3b, block_group, bit, count);
++      } else { 
++              ext3_lock_group(sb, block_group);
++              mb_free_blocks(&e3b, bit, count);
++              gdp->bg_free_blocks_count =
++                      cpu_to_le16(le16_to_cpu(gdp->bg_free_blocks_count) + count);
++              ext3_unlock_group(sb, block_group);
++              percpu_counter_mod(&sbi->s_freeblocks_counter, count);
++      }
++      
++      ext3_mb_dirty_buddy(&e3b);
++      ext3_mb_release_desc(&e3b);
++
++      /* FIXME: undo logic will be implemented later and another way */
++      mb_clear_bits(bitmap_bh->b_data, bit, count);
++      DQUOT_FREE_BLOCK(inode, count);
++
++      /* We dirtied the bitmap block */
++      BUFFER_TRACE(bitmap_bh, "dirtied bitmap block");
++      err = ext3_journal_dirty_metadata(handle, bitmap_bh);
++
++      /* And the group descriptor block */
++      BUFFER_TRACE(gd_bh, "dirtied group descriptor block");
++      ret = ext3_journal_dirty_metadata(handle, gd_bh);
++      if (!err) err = ret;
++
++      if (overflow && !err) {
++              block += count;
++              count = overflow;
++              goto do_more;
++      }
++      sb->s_dirt = 1;
++error_return:
++      brelse(bitmap_bh);
++      ext3_std_error(sb, err);
++      return;
++}
++
++int ext3_mb_reserve_blocks(struct super_block *sb, int blocks)
++{
++      struct ext3_sb_info *sbi = EXT3_SB(sb);
++      int free, ret = -ENOSPC;
++
++      BUG_ON(blocks < 0);
++      spin_lock(&sbi->s_reserve_lock);
++      free = percpu_counter_read_positive(&sbi->s_freeblocks_counter);
++      if (blocks <= free - sbi->s_blocks_reserved) {
++              sbi->s_blocks_reserved += blocks;
++              ret = 0;
++      }
++      spin_unlock(&sbi->s_reserve_lock);
++      return ret;
++}
++
++void ext3_mb_release_blocks(struct super_block *sb, int blocks)
++{
++      struct ext3_sb_info *sbi = EXT3_SB(sb);
++
++      BUG_ON(blocks < 0);
++      spin_lock(&sbi->s_reserve_lock);
++      sbi->s_blocks_reserved -= blocks;
++      WARN_ON(sbi->s_blocks_reserved < 0);
++      if (sbi->s_blocks_reserved < 0)
++              sbi->s_blocks_reserved = 0;
++      spin_unlock(&sbi->s_reserve_lock);
++}
++
++int ext3_new_block(handle_t *handle, struct inode *inode,
++                      unsigned long goal, u32 *pc, u32 *pb, int *errp)
++{
++      int ret, len;
++
++      if (!test_opt(inode->i_sb, MBALLOC)) {
++              ret = ext3_new_block_old(handle, inode, goal, pc, pb, errp);
++              goto out;
++      }
++      len = 1;
++      ret = ext3_mb_new_blocks(handle, inode, goal, &len, 0, errp);
++out:
++      return ret;
++}
++
++
++void ext3_free_blocks(handle_t *handle, struct inode * inode,
++                      unsigned long block, unsigned long count, int metadata)
++{
++      if (!test_opt(inode->i_sb, MBALLOC))
++              ext3_free_blocks_old(handle, inode, block, count);
++      else
++              ext3_mb_free_blocks(handle, inode, block, count, metadata);
++      return;
++}
++
+Index: linux-2.6.7/fs/ext3/super.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/super.c   2004-09-03 08:46:59.000000000 +0400
++++ linux-2.6.7/fs/ext3/super.c        2004-09-03 08:46:59.000000000 +0400
+@@ -392,6 +392,7 @@
+       struct ext3_super_block *es = sbi->s_es;
+       int i;
++      ext3_mb_release(sb);
+       ext3_ext_release(sb);
+       ext3_xattr_put_super(sb);
+       journal_destroy(sbi->s_journal);
+@@ -594,7 +595,7 @@
+       Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
+       Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0,
+       Opt_iopen, Opt_noiopen, Opt_iopen_nopriv,
+-      Opt_ignore, Opt_err, Opt_extents, Opt_extdebug
++      Opt_ignore, Opt_err, Opt_extents, Opt_extdebug, Opt_mballoc,
+ };
+ static match_table_t tokens = {
+@@ -644,6 +645,7 @@
+       {Opt_iopen_nopriv,  "iopen_nopriv"},
+       {Opt_extents, "extents"},
+       {Opt_extdebug, "extdebug"},
++      {Opt_mballoc, "mballoc"},
+       {Opt_err, NULL}
+ };
+@@ -929,6 +931,9 @@
+               case Opt_extdebug:
+                       set_opt (sbi->s_mount_opt, EXTDEBUG);
+                       break;
++              case Opt_mballoc:
++                      set_opt (sbi->s_mount_opt, MBALLOC);
++                      break;
+               default:
+                       printk (KERN_ERR
+                               "EXT3-fs: Unrecognized mount option \"%s\" "
+@@ -1602,7 +1607,8 @@
+               ext3_count_dirs(sb));
+       ext3_ext_init(sb);
+- 
++      ext3_mb_init(sb);
++
+       return 0;
+ failed_mount3:
+Index: linux-2.6.7/fs/ext3/Makefile
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/Makefile  2004-09-03 08:46:59.000000000 +0400
++++ linux-2.6.7/fs/ext3/Makefile       2004-09-03 08:46:59.000000000 +0400
+@@ -5,7 +5,7 @@
+ obj-$(CONFIG_EXT3_FS) += ext3.o
+ ext3-y        := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
+-         ioctl.o namei.o super.o symlink.o hash.o extents.o
++         ioctl.o namei.o super.o symlink.o hash.o extents.o mballoc.o
+ ext3-$(CONFIG_EXT3_FS_XATTR)   += xattr.o xattr_user.o xattr_trusted.o
+ ext3-$(CONFIG_EXT3_FS_POSIX_ACL) += acl.o
+Index: linux-2.6.7/fs/ext3/balloc.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/balloc.c  2004-08-26 17:11:16.000000000 +0400
++++ linux-2.6.7/fs/ext3/balloc.c       2004-09-03 08:46:59.000000000 +0400
+@@ -78,7 +78,7 @@
+  *
+  * Return buffer_head on success or NULL in case of failure.
+  */
+-static struct buffer_head *
++struct buffer_head *
+ read_block_bitmap(struct super_block *sb, unsigned int block_group)
+ {
+       struct ext3_group_desc * desc;
+@@ -98,8 +98,8 @@
+ }
+ /* Free given blocks, update quota and i_blocks field */
+-void ext3_free_blocks (handle_t *handle, struct inode * inode,
+-                      unsigned long block, unsigned long count)
++void ext3_free_blocks_old (handle_t *handle, struct inode * inode,
++                              unsigned long block, unsigned long count)
+ {
+       struct buffer_head *bitmap_bh = NULL;
+       struct buffer_head *gd_bh;
+@@ -474,8 +474,8 @@
+  * This function also updates quota and i_blocks field.
+  */
+ int
+-ext3_new_block(handle_t *handle, struct inode *inode, unsigned long goal,
+-              u32 *prealloc_count, u32 *prealloc_block, int *errp)
++ext3_new_block_old(handle_t *handle, struct inode *inode, unsigned long goal,
++                      u32 *prealloc_count, u32 *prealloc_block, int *errp)
+ {
+       struct buffer_head *bitmap_bh = NULL;   /* bh */
+       struct buffer_head *gdp_bh;             /* bh2 */
+Index: linux-2.6.7/fs/ext3/namei.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/namei.c   2004-09-03 08:46:59.000000000 +0400
++++ linux-2.6.7/fs/ext3/namei.c        2004-09-03 08:46:59.000000000 +0400
+@@ -1640,7 +1640,7 @@
+  * If the create succeeds, we fill in the inode information
+  * with d_instantiate(). 
+  */
+-static int ext3_create (struct inode * dir, struct dentry * dentry, int mode,
++int ext3_create (struct inode * dir, struct dentry * dentry, int mode,
+               struct nameidata *nd)
+ {
+       handle_t *handle; 
+Index: linux-2.6.7/fs/ext3/inode.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/inode.c   2004-09-03 08:46:59.000000000 +0400
++++ linux-2.6.7/fs/ext3/inode.c        2004-09-03 08:46:59.000000000 +0400
+@@ -254,7 +254,7 @@
+               ei->i_prealloc_count = 0;
+               ei->i_prealloc_block = 0;
+               /* Writer: end */
+-              ext3_free_blocks (inode, block, total);
++              ext3_free_blocks (inode, block, total, 1);
+       }
+ #endif
+ }
+@@ -633,7 +633,7 @@
+               ext3_journal_forget(handle, branch[i].bh);
+       }
+       for (i = 0; i < keys; i++)
+-              ext3_free_blocks(handle, inode, le32_to_cpu(branch[i].key), 1);
++              ext3_free_blocks(handle, inode, le32_to_cpu(branch[i].key), 1, 1);
+       return err;
+ }
+@@ -734,7 +734,7 @@
+       if (err == -EAGAIN)
+               for (i = 0; i < num; i++)
+                       ext3_free_blocks(handle, inode, 
+-                                       le32_to_cpu(where[i].key), 1);
++                                       le32_to_cpu(where[i].key), 1, 1);
+       return err;
+ }
+@@ -1911,7 +1911,7 @@
+               }
+       }
+-      ext3_free_blocks(handle, inode, block_to_free, count);
++      ext3_free_blocks(handle, inode, block_to_free, count, 1);
+ }
+ /**
+@@ -2082,7 +2082,7 @@
+                               ext3_journal_test_restart(handle, inode);
+                       }
+-                      ext3_free_blocks(handle, inode, nr, 1);
++                      ext3_free_blocks(handle, inode, nr, 1, 1);
+                       if (parent_bh) {
+                               /*
+Index: linux-2.6.7/fs/ext3/extents.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/extents.c 2004-09-03 08:46:59.000000000 +0400
++++ linux-2.6.7/fs/ext3/extents.c      2004-09-03 08:46:59.000000000 +0400
+@@ -740,7 +740,7 @@
+               for (i = 0; i < depth; i++) {
+                       if (!ablocks[i])
+                               continue;
+-                      ext3_free_blocks(handle, tree->inode, ablocks[i], 1);
++                      ext3_free_blocks(handle, tree->inode, ablocks[i], 1, 1);
+               }
+       }
+       kfree(ablocks);
+@@ -1388,7 +1388,7 @@
+                       path->p_idx->ei_leaf);
+       bh = sb_find_get_block(tree->inode->i_sb, path->p_idx->ei_leaf);
+       ext3_forget(handle, 1, tree->inode, bh, path->p_idx->ei_leaf);
+-      ext3_free_blocks(handle, tree->inode, path->p_idx->ei_leaf, 1);
++      ext3_free_blocks(handle, tree->inode, path->p_idx->ei_leaf, 1, 1);
+       return err;
+ }
+@@ -1876,10 +1876,12 @@
+       int needed = ext3_remove_blocks_credits(tree, ex, from, to);
+       handle_t *handle = ext3_journal_start(tree->inode, needed);
+       struct buffer_head *bh;
+-      int i;
++      int i, metadata = 0;
+       if (IS_ERR(handle))
+               return PTR_ERR(handle);
++      if (S_ISDIR(tree->inode->i_mode))
++              metadata = 1;
+       if (from >= ex->ee_block && to == ex->ee_block + ex->ee_len - 1) {
+               /* tail removal */
+               unsigned long num, start;
+@@ -1891,7 +1893,7 @@
+                       bh = sb_find_get_block(tree->inode->i_sb, start + i);
+                       ext3_forget(handle, 0, tree->inode, bh, start + i);
+               }
+-              ext3_free_blocks(handle, tree->inode, start, num);
++              ext3_free_blocks(handle, tree->inode, start, num, metadata);
+       } else if (from == ex->ee_block && to <= ex->ee_block + ex->ee_len - 1) {
+               printk("strange request: removal %lu-%lu from %u:%u\n",
+                       from, to, ex->ee_block, ex->ee_len);
+Index: linux-2.6.7/fs/ext3/xattr.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/xattr.c   2004-09-03 08:46:59.000000000 +0400
++++ linux-2.6.7/fs/ext3/xattr.c        2004-09-03 08:46:59.000000000 +0400
+@@ -1366,7 +1366,7 @@
+                       new_bh = sb_getblk(sb, block);
+                       if (!new_bh) {
+ getblk_failed:
+-                              ext3_free_blocks(handle, inode, block, 1);
++                              ext3_free_blocks(handle, inode, block, 1, 1);
+                               error = -EIO;
+                               goto cleanup;
+                       }
+@@ -1408,7 +1408,7 @@
+               if (HDR(old_bh)->h_refcount == cpu_to_le32(1)) {
+                       /* Free the old block. */
+                       ea_bdebug(old_bh, "freeing");
+-                      ext3_free_blocks(handle, inode, old_bh->b_blocknr, 1);
++                      ext3_free_blocks(handle, inode, old_bh->b_blocknr, 1, 1);
+                       /* ext3_forget() calls bforget() for us, but we
+                          let our caller release old_bh, so we need to
+@@ -1497,7 +1497,7 @@
+       lock_buffer(bh);
+       if (HDR(bh)->h_refcount == cpu_to_le32(1)) {
+               ext3_xattr_cache_remove(bh);
+-              ext3_free_blocks(handle, inode, EXT3_I(inode)->i_file_acl, 1);
++              ext3_free_blocks(handle, inode, EXT3_I(inode)->i_file_acl, 1, 1);
+               get_bh(bh);
+               ext3_forget(handle, 1, inode, bh, EXT3_I(inode)->i_file_acl);
+       } else {
+Index: linux-2.6.7/include/linux/ext3_fs.h
+===================================================================
+--- linux-2.6.7.orig/include/linux/ext3_fs.h   2004-09-03 08:46:59.000000000 +0400
++++ linux-2.6.7/include/linux/ext3_fs.h        2004-09-03 08:47:35.000000000 +0400
+@@ -57,6 +57,8 @@
+ #define ext3_debug(f, a...)   do {} while (0)
+ #endif
++#define EXT3_MULTIBLOCK_ALLOCATOR     1
++
+ /*
+  * Special inodes numbers
+  */
+@@ -335,6 +337,7 @@
+ #define EXT3_MOUNT_IOPEN_NOPRIV               0x80000 /* Make iopen world-readable */
+ #define EXT3_MOUNT_EXTENTS            0x10000 /* Extents support */
+ #define EXT3_MOUNT_EXTDEBUG           0x20000 /* Extents debug */
++#define EXT3_MOUNT_MBALLOC            0x100000/* Buddy allocation support */
+ /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
+ #ifndef clear_opt
+@@ -695,7 +698,7 @@
+ extern int ext3_new_block (handle_t *, struct inode *, unsigned long,
+                                           __u32 *, __u32 *, int *);
+ extern void ext3_free_blocks (handle_t *, struct inode *, unsigned long,
+-                            unsigned long);
++                            unsigned long, int);
+ extern unsigned long ext3_count_free_blocks (struct super_block *);
+ extern void ext3_check_blocks_bitmap (struct super_block *);
+ extern struct ext3_group_desc * ext3_get_group_desc(struct super_block * sb,
+Index: linux-2.6.7/include/linux/ext3_fs_sb.h
+===================================================================
+--- linux-2.6.7.orig/include/linux/ext3_fs_sb.h        2004-09-03 08:46:59.000000000 +0400
++++ linux-2.6.7/include/linux/ext3_fs_sb.h     2004-09-03 08:46:59.000000000 +0400
+@@ -23,9 +23,29 @@
+ #define EXT_INCLUDE
+ #include <linux/blockgroup_lock.h>
+ #include <linux/percpu_counter.h>
++#include <linux/list.h>
+ #endif
+ #endif
++#define EXT3_BB_MAX_BLOCKS    30
++struct ext3_free_metadata {
++      unsigned short group;
++      unsigned short num;
++      unsigned short blocks[EXT3_BB_MAX_BLOCKS];
++      struct list_head list;
++};
++
++#define EXT3_BB_MAX_ORDER     14
++
++struct ext3_buddy_group_blocks {
++      sector_t        bb_bitmap;
++      sector_t        bb_buddy;
++      spinlock_t      bb_lock;
++      unsigned        bb_counters[EXT3_BB_MAX_ORDER];
++      struct ext3_free_metadata *bb_md_cur;
++      unsigned long bb_tid;
++};
++
+ /*
+  * third extended-fs super-block data in memory
+  */
+@@ -76,6 +96,17 @@
+       char *s_qf_names[MAXQUOTAS];            /* Names of quota files with journalled quota */
+       int s_jquota_fmt;                       /* Format of quota to use */
+ #endif
++
++      /* for buddy allocator */
++      struct ext3_buddy_group_blocks *s_buddy_blocks;
++      struct inode *s_buddy;
++      long s_blocks_reserved;
++      spinlock_t s_reserve_lock;
++      struct list_head s_active_transaction;
++      struct list_head s_closed_transaction;
++      struct list_head s_committed_transaction;
++      spinlock_t s_md_lock;
++      tid_t s_last_transaction;
+ };
+ #endif        /* _LINUX_EXT3_FS_SB */
diff --git a/lustre/kernel_patches/patches/ext3-nlinks-2.4.20-hp_pnnl.patch b/lustre/kernel_patches/patches/ext3-nlinks-2.4.20-hp_pnnl.patch
new file mode 100644 (file)
index 0000000..9407cef
--- /dev/null
@@ -0,0 +1,184 @@
+Index: linux/fs/ext3/namei.c
+===================================================================
+--- linux.orig/fs/ext3/namei.c Wed Aug 25 11:34:25 2004
++++ linux/fs/ext3/namei.c      Wed Aug 25 13:16:03 2004
+@@ -1541,11 +1541,17 @@
+ static inline void ext3_inc_count(handle_t *handle, struct inode *inode)
+ {
+       inode->i_nlink++;
++      if (is_dx(inode) && inode->i_nlink > 1) {
++              /* limit is 16-bit i_links_count */
++              if (inode->i_nlink >= EXT3_LINK_MAX || inode->i_nlink == 2)
++                      inode->i_nlink = 1;
++        }
+ }
+ static inline void ext3_dec_count(handle_t *handle, struct inode *inode)
+ {
+-      inode->i_nlink--;
++      if (!S_ISDIR(inode->i_mode) || inode->i_nlink > 2)
++              inode->i_nlink--;
+ }
+ static int ext3_add_nondir(handle_t *handle,
+@@ -1646,7 +1651,7 @@
+       struct ext3_dir_entry_2 * de;
+       int err;
+-      if (dir->i_nlink >= EXT3_LINK_MAX)
++      if (EXT3_DIR_LINK_MAXED(dir))
+               return -EMLINK;
+       handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
+@@ -1668,7 +1673,7 @@
+       inode->i_size = EXT3_I(inode)->i_disksize = inode->i_sb->s_blocksize;
+       dir_block = ext3_bread (handle, inode, 0, 1, &err);
+       if (!dir_block) {
+-              inode->i_nlink--; /* is this nlink == 0? */
++              ext3_dec_count(handle, inode); /* is this nlink == 0? */
+               ext3_mark_inode_dirty(handle, inode);
+               iput (inode);
+               goto out_stop;
+@@ -1700,7 +1705,7 @@
+               iput (inode);
+               goto out_stop;
+       }
+-      dir->i_nlink++;
++      ext3_inc_count(handle, dir);
+       ext3_update_dx_flag(dir);
+       ext3_mark_inode_dirty(handle, dir);
+       d_instantiate(dentry, inode);
+@@ -1761,10 +1766,11 @@
+                       }
+                       de = (struct ext3_dir_entry_2 *) bh->b_data;
+               }
+-              if (!ext3_check_dir_entry ("empty_dir", inode, de, bh,
+-                                         offset)) {
+-                      brelse (bh);
+-                      return 1;
++              if (!ext3_check_dir_entry("empty_dir", inode, de, bh, offset)) {
++                      /* On error skip the de and offset to the next block. */
++                      de = (void *)(bh->b_data + sb->s_blocksize);
++                      offset = (offset | (sb->s_blocksize - 1)) + 1;
++                      continue;
+               }
+               if (le32_to_cpu(de->inode)) {
+                       brelse (bh);
+@@ -1957,14 +1963,14 @@
+       retval = ext3_delete_entry(handle, dir, de, bh);
+       if (retval)
+               goto end_rmdir;
+-      if (inode->i_nlink != 2)
+-              ext3_warning (inode->i_sb, "ext3_rmdir",
+-                            "empty directory has nlink!=2 (%d)",
+-                            inode->i_nlink);
++      if (!EXT3_DIR_LINK_EMPTY(inode))
++              ext3_warning(inode->i_sb, __FUNCTION__,
++                           "empty directory has too many links (%d)",
++                           inode->i_nlink);
+       inode->i_version = ++event;
+       inode->i_nlink = 0;
+       ext3_orphan_add(handle, inode);
+-      dir->i_nlink--;
++      ext3_dec_count(handle, dir);
+       inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
+       ext3_mark_inode_dirty(handle, inode);
+       ext3_update_dx_flag(dir);
+@@ -2016,7 +2022,7 @@
+       dir->i_ctime = dir->i_mtime = CURRENT_TIME;
+       ext3_update_dx_flag(dir);
+       ext3_mark_inode_dirty(handle, dir);
+-      inode->i_nlink--;
++      ext3_dec_count(handle, inode);
+       if (!inode->i_nlink)
+               ext3_orphan_add(handle, inode);
+       inode->i_ctime = dir->i_ctime;
+@@ -2108,9 +2114,8 @@
+       if (S_ISDIR(inode->i_mode))
+               return -EPERM;
+-      if (inode->i_nlink >= EXT3_LINK_MAX) {
++      if (EXT3_DIR_LINK_MAXED(inode))
+               return -EMLINK;
+-      }
+       handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
+                                       EXT3_INDEX_EXTRA_TRANS_BLOCKS);
+@@ -2194,8 +2199,8 @@
+               if (le32_to_cpu(PARENT_INO(dir_bh->b_data)) != old_dir->i_ino)
+                       goto end_rename;
+               retval = -EMLINK;
+-              if (!new_inode && new_dir!=old_dir &&
+-                              new_dir->i_nlink >= EXT3_LINK_MAX)
++              if (!new_inode && new_dir != old_dir &&
++                  EXT3_DIR_LINK_MAXED(new_dir))
+                       goto end_rename;
+       }
+       if (!new_bh) {
+@@ -2253,7 +2258,7 @@
+       }
+       if (new_inode) {
+-              new_inode->i_nlink--;
++              ext3_dec_count(handle, new_inode);
+               new_inode->i_ctime = CURRENT_TIME;
+       }
+       old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME;
+@@ -2264,11 +2269,11 @@
+               PARENT_INO(dir_bh->b_data) = le32_to_cpu(new_dir->i_ino);
+               BUFFER_TRACE(dir_bh, "call ext3_journal_dirty_metadata");
+               ext3_journal_dirty_metadata(handle, dir_bh);
+-              old_dir->i_nlink--;
++              ext3_dec_count(handle, old_dir);
+               if (new_inode) {
+-                      new_inode->i_nlink--;
++                      ext3_dec_count(handle, new_inode);
+               } else {
+-                      new_dir->i_nlink++;
++                      ext3_inc_count(handle, new_dir);
+                       ext3_update_dx_flag(new_dir);
+                       ext3_mark_inode_dirty(handle, new_dir);
+               }
+Index: linux/include/linux/ext3_fs.h
+===================================================================
+--- linux.orig/include/linux/ext3_fs.h Wed Aug 25 11:34:27 2004
++++ linux/include/linux/ext3_fs.h      Wed Aug 25 13:14:48 2004
+@@ -42,7 +42,7 @@
+ /*
+  * Always enable hashed directories
+  */
+-#define CONFIG_EXT3_INDEX
++#define CONFIG_EXT3_INDEX 1
+ /*
+  * Debug code
+@@ -79,7 +81,7 @@
+ /*
+  * Maximal count of links to a file
+  */
+-#define EXT3_LINK_MAX         32000
++#define EXT3_LINK_MAX         65000
+ /*
+  * Macro-instructions used to manage several block sizes
+@@ -580,14 +580,15 @@
+  */
+ #ifdef CONFIG_EXT3_INDEX
+-  #define is_dx(dir) (EXT3_HAS_COMPAT_FEATURE(dir->i_sb, \
+-                                            EXT3_FEATURE_COMPAT_DIR_INDEX) && \
++#define is_dx(dir) (EXT3_HAS_COMPAT_FEATURE(dir->i_sb, \
++                                          EXT3_FEATURE_COMPAT_DIR_INDEX) && \
+                     (EXT3_I(dir)->i_flags & EXT3_INDEX_FL))
+-#define EXT3_DIR_LINK_MAX(dir) (!is_dx(dir) && (dir)->i_nlink >= EXT3_LINK_MAX)
+-#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || (dir)->i_nlink == 1)
++#define EXT3_DIR_LINK_MAXED(dir) (!is_dx(dir) && (dir)->i_nlink >=EXT3_LINK_MAX)
++#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || \
++                                (is_dx(dir) && (dir)->i_nlink == 1))
+ #else
+   #define is_dx(dir) 0
+-#define EXT3_DIR_LINK_MAX(dir) ((dir)->i_nlink >= EXT3_LINK_MAX)
++#define EXT3_DIR_LINK_MAXED(dir) ((dir)->i_nlink >= EXT3_LINK_MAX)
+ #define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2)
+ #endif
index debe4b3..d4460f8 100644 (file)
@@ -2,12 +2,13 @@ Index: 69chaos/fs/ext3/namei.c
 ===================================================================
 --- 69chaos.orig/fs/ext3/namei.c       2004-08-24 23:56:04.000000000 -0700
 +++ 69chaos/fs/ext3/namei.c    2004-08-24 23:57:20.000000000 -0700
-@@ -1542,11 +1542,16 @@
+@@ -1542,11 +1542,17 @@
  static inline void ext3_inc_count(handle_t *handle, struct inode *inode)
  {
        inode->i_nlink++;
 +      if (is_dx(inode) && inode->i_nlink > 1) {
-+              if (inode->i_nlink >= 65000) /* limit is 16-bit i_links_count */
++              /* limit is 16-bit i_links_count */
++              if (inode->i_nlink >= EXT3_LINK_MAX || inode->i_nlink == 2)
 +                      inode->i_nlink = 1;
 +        }
  }
@@ -151,6 +152,15 @@ Index: 69chaos/include/linux/ext3_fs.h
  
  /*
   * Debug code
+@@ -79,7 +81,7 @@
+ /*
+  * Maximal count of links to a file
+  */
+-#define EXT3_LINK_MAX         32000
++#define EXT3_LINK_MAX         65000
+ /*
+  * Macro-instructions used to manage several block sizes
 @@ -582,14 +582,15 @@
   */
  
index f198362..ed3fee8 100644 (file)
@@ -1,11 +1,12 @@
 --- ./fs/ext3/namei.c.orig     2004-08-19 12:53:21.000000000 +0800
 +++ ./fs/ext3/namei.c  2004-08-19 12:44:18.000000000 +0800
-@@ -1541,11 +1541,16 @@
+@@ -1541,11 +1541,17 @@
  static inline void ext3_inc_count(handle_t *handle, struct inode *inode)
  {
        inode->i_nlink++;
 +      if (is_dx(inode) && inode->i_nlink > 1) {
-+              if (inode->i_nlink >= 65000) /* limit is 16-bit i_links_count */
++              /* limit is 16-bit i_links_count */
++              if (inode->i_nlink >= EXT3_LINK_MAX || inode->i_nlink == 2)
 +                      inode->i_nlink = 1;
 +        }
  }
  
  /*
   * Debug code
+@@ -79,7 +81,7 @@
+ /*
+  * Maximal count of links to a file
+  */
+-#define EXT3_LINK_MAX         32000
++#define EXT3_LINK_MAX         65000
+ /*
+  * Macro-instructions used to manage several block sizes
 @@ -581,14 +581,15 @@
   */
  
diff --git a/lustre/kernel_patches/patches/ext3-nlinks-2.6.7.patch b/lustre/kernel_patches/patches/ext3-nlinks-2.6.7.patch
new file mode 100644 (file)
index 0000000..b20be23
--- /dev/null
@@ -0,0 +1,170 @@
+Index: linux-2.6.7/fs/ext3/namei.c
+===================================================================
+--- linux-2.6.7.orig/fs/ext3/namei.c   2004-06-15 23:19:36.000000000 -0600
++++ linux-2.6.7/fs/ext3/namei.c        2004-08-20 17:48:54.000000000 -0600
+@@ -1596,11 +1596,17 @@ static int ext3_delete_entry (handle_t *
+ static inline void ext3_inc_count(handle_t *handle, struct inode *inode)
+ {
+       inode->i_nlink++;
++      if (is_dx(inode) && inode->i_nlink > 1) {
++              /* limit is 16-bit i_links_count */
++              if (inode->i_nlink >= EXT3_LINK_MAX || inode->i_nlink == 2)
++                      inode->i_nlink = 1;
++        }
+ }
+ static inline void ext3_dec_count(handle_t *handle, struct inode *inode)
+ {
+-      inode->i_nlink--;
++      if (!S_ISDIR(inode->i_mode) || inode->i_nlink > 2)
++              inode->i_nlink--;
+ }
+ static int ext3_add_nondir(handle_t *handle,
+@@ -1693,7 +1698,7 @@ static int ext3_mkdir(struct inode * dir
+       struct ext3_dir_entry_2 * de;
+       int err;
+-      if (dir->i_nlink >= EXT3_LINK_MAX)
++      if (EXT3_DIR_LINK_MAXED(dir))
+               return -EMLINK;
+       handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
+@@ -1715,7 +1720,7 @@ static int ext3_mkdir(struct inode * dir
+       inode->i_size = EXT3_I(inode)->i_disksize = inode->i_sb->s_blocksize;
+       dir_block = ext3_bread (handle, inode, 0, 1, &err);
+       if (!dir_block) {
+-              inode->i_nlink--; /* is this nlink == 0? */
++              ext3_dec_count(handle, inode); /* is this nlink == 0? */
+               ext3_mark_inode_dirty(handle, inode);
+               iput (inode);
+               goto out_stop;
+@@ -1747,7 +1752,7 @@ static int ext3_mkdir(struct inode * dir
+               iput (inode);
+               goto out_stop;
+       }
+-      dir->i_nlink++;
++      ext3_inc_count(handle, dir);
+       ext3_update_dx_flag(dir);
+       ext3_mark_inode_dirty(handle, dir);
+       d_instantiate(dentry, inode);
+@@ -2010,10 +2015,10 @@ static int ext3_rmdir (struct inode * di
+       retval = ext3_delete_entry(handle, dir, de, bh);
+       if (retval)
+               goto end_rmdir;
+-      if (inode->i_nlink != 2)
+-              ext3_warning (inode->i_sb, "ext3_rmdir",
+-                            "empty directory has nlink!=2 (%d)",
+-                            inode->i_nlink);
++      if (!EXT3_DIR_LINK_EMPTY(inode))
++              ext3_warning(inode->i_sb, "ext3_rmdir",
++                           "empty directory has too many links (%d)",
++                           inode->i_nlink);
+       inode->i_version++;
+       inode->i_nlink = 0;
+       /* There's no need to set i_disksize: the fact that i_nlink is
+@@ -2023,7 +2028,7 @@ static int ext3_rmdir (struct inode * di
+       ext3_orphan_add(handle, inode);
+       inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
+       ext3_mark_inode_dirty(handle, inode);
+-      dir->i_nlink--;
++      ext3_dec_count(handle, dir);
+       ext3_update_dx_flag(dir);
+       ext3_mark_inode_dirty(handle, dir);
+@@ -2074,7 +2079,7 @@ static int ext3_unlink(struct inode * di
+       dir->i_ctime = dir->i_mtime = CURRENT_TIME;
+       ext3_update_dx_flag(dir);
+       ext3_mark_inode_dirty(handle, dir);
+-      inode->i_nlink--;
++      ext3_dec_count(handle, inode);
+       if (!inode->i_nlink)
+               ext3_orphan_add(handle, inode);
+       inode->i_ctime = dir->i_ctime;
+@@ -2146,7 +2151,7 @@ static int ext3_link (struct dentry * ol
+       struct inode *inode = old_dentry->d_inode;
+       int err;
+-      if (inode->i_nlink >= EXT3_LINK_MAX)
++      if (EXT3_DIR_LINK_MAXED(inode))
+               return -EMLINK;
+       handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
+@@ -2230,8 +2235,8 @@ static int ext3_rename (struct inode * o
+               if (le32_to_cpu(PARENT_INO(dir_bh->b_data)) != old_dir->i_ino)
+                       goto end_rename;
+               retval = -EMLINK;
+-              if (!new_inode && new_dir!=old_dir &&
+-                              new_dir->i_nlink >= EXT3_LINK_MAX)
++              if (!new_inode && new_dir != old_dir &&
++                  EXT3_DIR_LINK_MAXED(new_dir))
+                       goto end_rename;
+       }
+       if (!new_bh) {
+@@ -2288,7 +2293,7 @@ static int ext3_rename (struct inode * o
+       }
+       if (new_inode) {
+-              new_inode->i_nlink--;
++              ext3_dec_count(handle, new_inode);
+               new_inode->i_ctime = CURRENT_TIME;
+       }
+       old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME;
+@@ -2299,11 +2304,11 @@ static int ext3_rename (struct inode * o
+               PARENT_INO(dir_bh->b_data) = le32_to_cpu(new_dir->i_ino);
+               BUFFER_TRACE(dir_bh, "call ext3_journal_dirty_metadata");
+               ext3_journal_dirty_metadata(handle, dir_bh);
+-              old_dir->i_nlink--;
++              ext3_dec_count(handle, old_dir);
+               if (new_inode) {
+-                      new_inode->i_nlink--;
++                      ext3_dec_count(handle, new_inode);
+               } else {
+-                      new_dir->i_nlink++;
++                      ext3_inc_count(handle, new_dir);
+                       ext3_update_dx_flag(new_dir);
+                       ext3_mark_inode_dirty(handle, new_dir);
+               }
+Index: linux-2.6.7/include/linux/ext3_fs.h
+===================================================================
+--- linux-2.6.7.orig/include/linux/ext3_fs.h   2004-06-15 23:19:36.000000000 -0600
++++ linux-2.6.7/include/linux/ext3_fs.h        2004-08-20 17:41:27.000000000 -0600
+@@ -41,7 +41,7 @@ struct statfs;
+ /*
+  * Always enable hashed directories
+  */
+-#define CONFIG_EXT3_INDEX
++#define CONFIG_EXT3_INDEX 1
+ /*
+  * Debug code
+@@ -79,7 +81,7 @@
+ /*
+  * Maximal count of links to a file
+  */
+-#define EXT3_LINK_MAX         32000
++#define EXT3_LINK_MAX         65000
+ /*
+  * Macro-instructions used to manage several block sizes
+@@ -595,14 +595,15 @@ struct ext3_dir_entry_2 {
+  */
+ #ifdef CONFIG_EXT3_INDEX
+-  #define is_dx(dir) (EXT3_HAS_COMPAT_FEATURE(dir->i_sb, \
+-                                            EXT3_FEATURE_COMPAT_DIR_INDEX) && \
++#define is_dx(dir) (EXT3_HAS_COMPAT_FEATURE(dir->i_sb, \
++                                          EXT3_FEATURE_COMPAT_DIR_INDEX) && \
+                     (EXT3_I(dir)->i_flags & EXT3_INDEX_FL))
+-#define EXT3_DIR_LINK_MAX(dir) (!is_dx(dir) && (dir)->i_nlink >= EXT3_LINK_MAX)
+-#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || (dir)->i_nlink == 1)
++#define EXT3_DIR_LINK_MAXED(dir) (!is_dx(dir) && (dir)->i_nlink >=EXT3_LINK_MAX)
++#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || \
++                                (is_dx(dir) && (dir)->i_nlink == 1))
+ #else
+   #define is_dx(dir) 0
+-#define EXT3_DIR_LINK_MAX(dir) ((dir)->i_nlink >= EXT3_LINK_MAX)
++#define EXT3_DIR_LINK_MAXED(dir) ((dir)->i_nlink >= EXT3_LINK_MAX)
+ #define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2)
+ #endif
diff --git a/lustre/kernel_patches/patches/ext3-no-write-super.patch b/lustre/kernel_patches/patches/ext3-no-write-super.patch
deleted file mode 100644 (file)
index d2dcdae..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
- 0 files changed
-
---- linux-2.4.20/fs/ext3/super.c~ext3-no-write-super   2003-08-11 13:20:17.000000000 +0400
-+++ linux-2.4.20-alexey/fs/ext3/super.c        2003-08-11 13:31:35.000000000 +0400
-@@ -1849,7 +1849,6 @@ void ext3_write_super (struct super_bloc
-       if (down_trylock(&sb->s_lock) == 0)
-               BUG();          /* aviro detector */
-       sb->s_dirt = 0;
--      target = log_start_commit(EXT3_SB(sb)->s_journal, NULL);
-       /*
-        * Tricky --- if we are unmounting, the write really does need
-@@ -1857,6 +1856,7 @@ void ext3_write_super (struct super_bloc
-        * sb->s_root.
-        */
-       if (do_sync_supers || !sb->s_root) {
-+              target = log_start_commit(EXT3_SB(sb)->s_journal, NULL);
-               unlock_super(sb);
-               log_wait_commit(EXT3_SB(sb)->s_journal, target);
-               lock_super(sb);
-
-_
diff --git a/lustre/kernel_patches/patches/ext3-o_direct-1-2.4.18-chaos.patch b/lustre/kernel_patches/patches/ext3-o_direct-1-2.4.18-chaos.patch
deleted file mode 100644 (file)
index 759aaa7..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-
---- linux-2.4.18/fs/ext3/inode.c~ext3-o_direct-1-2.4.18-chaos  Mon Jul 28 14:13:05 2003
-+++ linux-2.4.18-alexey/fs/ext3/inode.c        Mon Jul 28 15:50:14 2003
-@@ -27,6 +27,7 @@
- #include <linux/ext3_jbd.h>
- #include <linux/jbd.h>
- #include <linux/locks.h>
-+#include <linux/iobuf.h>
- #include <linux/smp_lock.h>
- #include <linux/highuid.h>
- #include <linux/quotaops.h>
-@@ -733,9 +734,9 @@ err_out:
-  * The BKL may not be held on entry here.  Be sure to take it early.
-  */
--static int ext3_get_block_handle(handle_t *handle, struct inode *inode, 
--                               long iblock,
--                               struct buffer_head *bh_result, int create)
-+static int
-+ext3_get_block_handle(handle_t *handle, struct inode *inode, long iblock,
-+              struct buffer_head *bh_result, int create, int extend_disksize)
- {
-       int err = -EIO;
-       int offsets[4];
-@@ -816,16 +817,18 @@ out:
-       if (err)
-               goto cleanup;
--      new_size = inode->i_size;
--      /*
--       * This is not racy against ext3_truncate's modification of i_disksize
--       * because VM/VFS ensures that the file cannot be extended while
--       * truncate is in progress.  It is racy between multiple parallel
--       * instances of get_block, but we have the BKL.
--       */
--      if (new_size > ei->i_disksize)
--              ei->i_disksize = new_size;
--
-+      if (extend_disksize) {
-+              /*
-+               * This is not racy against ext3_truncate's modification of
-+               * i_disksize because VM/VFS ensures that the file cannot be
-+               * extended while truncate is in progress.  It is racy between
-+               * multiple parallel instances of get_block, but we have BKL.
-+               */
-+              struct ext3_inode_info *ei = EXT3_I(inode);
-+              new_size = inode->i_size;
-+              if (new_size > ei->i_disksize)
-+                      ei->i_disksize = new_size;
-+      }
-       bh_result->b_state |= (1UL << BH_New);
-       goto got_it;
-@@ -852,7 +855,38 @@ static int ext3_get_block(struct inode *
-               handle = ext3_journal_current_handle();
-               J_ASSERT(handle != 0);
-       }
--      ret = ext3_get_block_handle(handle, inode, iblock, bh_result, create);
-+      ret = ext3_get_block_handle(handle, inode, iblock,
-+                              bh_result, create, 1);
-+      return ret;
-+}
-+
-+#define DIO_CREDITS (EXT3_RESERVE_TRANS_BLOCKS + 32)
-+
-+static int
-+ext3_direct_io_get_block(struct inode *inode, long iblock,
-+              struct buffer_head *bh_result, int create)
-+{
-+      handle_t *handle = journal_current_handle();
-+      int ret = 0;
-+
-+      lock_kernel();
-+      if (handle && handle->h_buffer_credits <= EXT3_RESERVE_TRANS_BLOCKS) {
-+              /*
-+               * Getting low on buffer credits...
-+               */
-+              if (!ext3_journal_extend(handle, DIO_CREDITS)) {
-+                      /*
-+                       * Couldn't extend the transaction.  Start a new one
-+                       */
-+                      ret = ext3_journal_restart(handle, DIO_CREDITS);
-+              }
-+      }
-+      if (ret == 0)
-+              ret = ext3_get_block_handle(handle, inode, iblock,
-+                                      bh_result, create, 0);
-+      if (ret == 0)
-+              bh_result->b_size = (1 << inode->i_blkbits);
-+      unlock_kernel();
-       return ret;
- }
-@@ -870,7 +904,7 @@ struct buffer_head *ext3_getblk(handle_t
-       dummy.b_state = 0;
-       dummy.b_blocknr = -1000;
-       buffer_trace_init(&dummy.b_history);
--      *errp = ext3_get_block_handle(handle, inode, block, &dummy, create);
-+      *errp = ext3_get_block_handle(handle, inode, block, &dummy, create, 1);
-       if (!*errp && buffer_mapped(&dummy)) {
-               struct buffer_head *bh;
-               bh = sb_getblk(inode->i_sb, dummy.b_blocknr);
-@@ -1380,6 +1414,67 @@ static int ext3_releasepage(struct page 
-       return journal_try_to_free_buffers(journal, page, wait);
- }
-+static int
-+ext3_direct_IO(int rw, struct inode *inode, struct kiobuf *iobuf,
-+              unsigned long blocknr, int blocksize)
-+{
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+      handle_t *handle = NULL;
-+      int ret;
-+      int orphan = 0;
-+      loff_t offset = (loff_t)blocknr << inode->i_blkbits;    /* ugh */
-+      ssize_t count = iobuf->length;                  /* ditto */
-+
-+      if (rw == WRITE) {
-+              loff_t final_size = offset + count;
-+
-+              lock_kernel();
-+              handle = ext3_journal_start(inode, DIO_CREDITS);
-+              unlock_kernel();
-+              if (IS_ERR(handle)) {
-+                      ret = PTR_ERR(handle);
-+                      goto out;
-+              }
-+              if (final_size > inode->i_size) {
-+                      lock_kernel();
-+                      ret = ext3_orphan_add(handle, inode);
-+                      unlock_kernel();
-+                      if (ret)
-+                              goto out_stop;
-+                      orphan = 1;
-+                      ei->i_disksize = inode->i_size;
-+              }
-+      }
-+
-+      ret = generic_direct_IO(rw, inode, iobuf, blocknr,
-+                              blocksize, ext3_direct_io_get_block);
-+
-+out_stop:
-+      if (handle) {
-+              int err;
-+
-+              lock_kernel();
-+              if (orphan) 
-+                      ext3_orphan_del(handle, inode);
-+              if (orphan && ret > 0) {
-+                      loff_t end = offset + ret;
-+                      if (end > inode->i_size) {
-+                              ei->i_disksize = end;
-+                              inode->i_size = end;
-+                              err = ext3_mark_inode_dirty(handle, inode);
-+                              if (!ret) 
-+                                      ret = err;
-+                      }
-+              }
-+              err = ext3_journal_stop(handle, inode);
-+              if (ret == 0)
-+                      ret = err;
-+              unlock_kernel();
-+      }
-+out:
-+      return ret;
-+
-+}
- struct address_space_operations ext3_aops = {
-       readpage:       ext3_readpage,          /* BKL not held.  Don't need */
-@@ -1390,6 +1485,7 @@ struct address_space_operations ext3_aop
-       bmap:           ext3_bmap,              /* BKL held */
-       flushpage:      ext3_flushpage,         /* BKL not held.  Don't need */
-       releasepage:    ext3_releasepage,       /* BKL not held.  Don't need */
-+      direct_IO:      ext3_direct_IO,         /* BKL not held.  Don't need */
- };
- /*
-@@ -2987,7 +3083,7 @@ int ext3_prep_san_write(struct inode *in
-       /* alloc blocks one by one */
-       for (i = 0; i < nblocks; i++) {
-               ret = ext3_get_block_handle(handle, inode, blocks[i],
--                                              &bh_tmp, 1);
-+                                              &bh_tmp, 1, 1);
-               if (ret)
-                       break;
-@@ -3047,7 +3143,7 @@ int ext3_map_inode_page(struct inode *in
-                 if (blocks[i] != 0)
-                         continue;
--                rc = ext3_get_block_handle(handle, inode, iblock, &bh, 1);
-+                rc = ext3_get_block_handle(handle, inode, iblock, &bh, 1, 1);
-                 if (rc) {
-                         printk(KERN_INFO "ext3_map_inode_page: error %d "
-                                "allocating block %ld\n", rc, iblock);
-
-_
diff --git a/lustre/kernel_patches/patches/ext3-o_direct-1.patch b/lustre/kernel_patches/patches/ext3-o_direct-1.patch
deleted file mode 100644 (file)
index e3285cf..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
---- 2.4.20-pre2/fs/ext3/inode.c~ext3-o_direct  Thu Aug 15 01:11:02 2002
-+++ 2.4.20-pre2-akpm/fs/ext3/inode.c   Thu Aug 15 01:25:55 2002
-@@ -27,6 +27,7 @@
- #include <linux/ext3_jbd.h>
- #include <linux/jbd.h>
- #include <linux/locks.h>
-+#include <linux/iobuf.h>
- #include <linux/smp_lock.h>
- #include <linux/highuid.h>
- #include <linux/quotaops.h>
-@@ -716,9 +717,9 @@ err_out:
-  * The BKL may not be held on entry here.  Be sure to take it early.
-  */
--static int ext3_get_block_handle(handle_t *handle, struct inode *inode, 
--                               long iblock,
--                               struct buffer_head *bh_result, int create)
-+static int
-+ext3_get_block_handle(handle_t *handle, struct inode *inode, long iblock,
-+              struct buffer_head *bh_result, int create, int extend_disksize)
- {
-       int err = -EIO;
-       int offsets[4];
-@@ -798,16 +799,18 @@ out:
-       if (err)
-               goto cleanup;
--      new_size = inode->i_size;
--      /*
--       * This is not racy against ext3_truncate's modification of i_disksize
--       * because VM/VFS ensures that the file cannot be extended while
--       * truncate is in progress.  It is racy between multiple parallel
--       * instances of get_block, but we have the BKL.
--       */
--      if (new_size > inode->u.ext3_i.i_disksize)
--              inode->u.ext3_i.i_disksize = new_size;
--
-+      if (extend_disksize) {
-+              /*
-+               * This is not racy against ext3_truncate's modification of
-+               * i_disksize because VM/VFS ensures that the file cannot be
-+               * extended while truncate is in progress.  It is racy between
-+               * multiple parallel instances of get_block, but we have BKL.
-+               */
-+              struct ext3_inode_info *ei = EXT3_I(inode);
-+              new_size = inode->i_size;
-+              if (new_size > ei->i_disksize)
-+                      ei->i_disksize = new_size;
-+      }
-       bh_result->b_state |= (1UL << BH_New);
-       goto got_it;
-@@ -834,7 +837,38 @@ static int ext3_get_block(struct inode *
-               handle = ext3_journal_current_handle();
-               J_ASSERT(handle != 0);
-       }
--      ret = ext3_get_block_handle(handle, inode, iblock, bh_result, create);
-+      ret = ext3_get_block_handle(handle, inode, iblock,
-+                              bh_result, create, 1);
-+      return ret;
-+}
-+
-+#define DIO_CREDITS (EXT3_RESERVE_TRANS_BLOCKS + 32)
-+
-+static int
-+ext3_direct_io_get_block(struct inode *inode, long iblock,
-+              struct buffer_head *bh_result, int create)
-+{
-+      handle_t *handle = journal_current_handle();
-+      int ret = 0;
-+
-+      lock_kernel();
-+      if (handle && handle->h_buffer_credits <= EXT3_RESERVE_TRANS_BLOCKS) {
-+              /*
-+               * Getting low on buffer credits...
-+               */
-+              if (!ext3_journal_extend(handle, DIO_CREDITS)) {
-+                      /*
-+                       * Couldn't extend the transaction.  Start a new one
-+                       */
-+                      ret = ext3_journal_restart(handle, DIO_CREDITS);
-+              }
-+      }
-+      if (ret == 0)
-+              ret = ext3_get_block_handle(handle, inode, iblock,
-+                                      bh_result, create, 0);
-+      if (ret == 0)
-+              bh_result->b_size = (1 << inode->i_blkbits);
-+      unlock_kernel();
-       return ret;
- }
-@@ -852,7 +886,7 @@ struct buffer_head *ext3_getblk(handle_t
-       dummy.b_state = 0;
-       dummy.b_blocknr = -1000;
-       buffer_trace_init(&dummy.b_history);
--      *errp = ext3_get_block_handle(handle, inode, block, &dummy, create);
-+      *errp = ext3_get_block_handle(handle, inode, block, &dummy, create, 1);
-       if (!*errp && buffer_mapped(&dummy)) {
-               struct buffer_head *bh;
-               bh = sb_getblk(inode->i_sb, dummy.b_blocknr);
-@@ -1349,6 +1383,67 @@ static int ext3_releasepage(struct page 
-       return journal_try_to_free_buffers(journal, page, wait);
- }
-+static int
-+ext3_direct_IO(int rw, struct inode *inode, struct kiobuf *iobuf,
-+              unsigned long blocknr, int blocksize)
-+{
-+      struct ext3_inode_info *ei = EXT3_I(inode);
-+      handle_t *handle = NULL;
-+      int ret;
-+      int orphan = 0;
-+      loff_t offset = (loff_t)blocknr << inode->i_blkbits;    /* ugh */
-+      ssize_t count = iobuf->length;                  /* ditto */
-+
-+      if (rw == WRITE) {
-+              loff_t final_size = offset + count;
-+
-+              lock_kernel();
-+              handle = ext3_journal_start(inode, DIO_CREDITS);
-+              unlock_kernel();
-+              if (IS_ERR(handle)) {
-+                      ret = PTR_ERR(handle);
-+                      goto out;
-+              }
-+              if (final_size > inode->i_size) {
-+                      lock_kernel();
-+                      ret = ext3_orphan_add(handle, inode);
-+                      unlock_kernel();
-+                      if (ret)
-+                              goto out_stop;
-+                      orphan = 1;
-+                      ei->i_disksize = inode->i_size;
-+              }
-+      }
-+
-+      ret = generic_direct_IO(rw, inode, iobuf, blocknr,
-+                              blocksize, ext3_direct_io_get_block);
-+
-+out_stop:
-+      if (handle) {
-+              int err;
-+
-+              lock_kernel();
-+              if (orphan) 
-+                      ext3_orphan_del(handle, inode);
-+              if (orphan && ret > 0) {
-+                      loff_t end = offset + ret;
-+                      if (end > inode->i_size) {
-+                              ei->i_disksize = end;
-+                              inode->i_size = end;
-+                              err = ext3_mark_inode_dirty(handle, inode);
-+                              if (!ret) 
-+                                      ret = err;
-+                      }
-+              }
-+              err = ext3_journal_stop(handle, inode);
-+              if (ret == 0)
-+                      ret = err;
-+              unlock_kernel();
-+      }
-+out:
-+      return ret;
-+
-+}
- struct address_space_operations ext3_aops = {
-       readpage:       ext3_readpage,          /* BKL not held.  Don't need */
-@@ -1359,6 +1454,7 @@ struct address_space_operations ext3_aop
-       bmap:           ext3_bmap,              /* BKL held */
-       flushpage:      ext3_flushpage,         /* BKL not held.  Don't need */
-       releasepage:    ext3_releasepage,       /* BKL not held.  Don't need */
-+      direct_IO:      ext3_direct_IO,         /* BKL not held.  Don't need */
- };
- /*
index 3c6b5e5..4c16fe6 100644 (file)
@@ -1,7 +1,7 @@
-Index: linux-2.4.19.SuSE/fs/ext3/namei.c
+Index: linux-2.4.19/fs/ext3/namei.c
 ===================================================================
---- linux-2.4.19.SuSE.orig/fs/ext3/namei.c     Sun Nov 16 01:14:50 2003
-+++ linux-2.4.19.SuSE/fs/ext3/namei.c  Sun Nov 16 01:18:04 2003
+--- linux-2.4.19.orig/fs/ext3/namei.c  2004-04-23 22:36:03.000000000 -0400
++++ linux-2.4.19/fs/ext3/namei.c       2004-04-23 22:37:37.000000000 -0400
 @@ -1751,8 +1751,8 @@
        struct super_block *sb = inode->i_sb;
        struct ext3_iloc iloc;
@@ -59,11 +59,11 @@ Index: linux-2.4.19.SuSE/fs/ext3/namei.c
        return err;
  
  out_brelse:
-Index: linux-2.4.19.SuSE/fs/ext3/super.c
+Index: linux-2.4.19/fs/ext3/super.c
 ===================================================================
---- linux-2.4.19.SuSE.orig/fs/ext3/super.c     Sun Nov 16 00:40:59 2003
-+++ linux-2.4.19.SuSE/fs/ext3/super.c  Sun Nov 16 01:18:04 2003
-@@ -1182,6 +1182,7 @@
+--- linux-2.4.19.orig/fs/ext3/super.c  2004-04-23 22:30:41.000000000 -0400
++++ linux-2.4.19/fs/ext3/super.c       2004-04-23 22:36:22.000000000 -0400
+@@ -1179,6 +1179,7 @@
         */
        sb->s_op = &ext3_sops;
        INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */
@@ -71,10 +71,10 @@ Index: linux-2.4.19.SuSE/fs/ext3/super.c
  
        sb->s_root = 0;
  
-Index: linux-2.4.19.SuSE/include/linux/ext3_fs_sb.h
+Index: linux-2.4.19/include/linux/ext3_fs_sb.h
 ===================================================================
---- linux-2.4.19.SuSE.orig/include/linux/ext3_fs_sb.h  Sat Nov 15 23:58:28 2003
-+++ linux-2.4.19.SuSE/include/linux/ext3_fs_sb.h       Sun Nov 16 01:18:41 2003
+--- linux-2.4.19.orig/include/linux/ext3_fs_sb.h       2004-04-23 18:26:27.000000000 -0400
++++ linux-2.4.19/include/linux/ext3_fs_sb.h    2004-04-23 22:36:22.000000000 -0400
 @@ -69,6 +69,7 @@
        struct inode * s_journal_inode;
        struct journal_s * s_journal;
diff --git a/lustre/kernel_patches/patches/ext3-pdirops-2.4.18-chaos.patch b/lustre/kernel_patches/patches/ext3-pdirops-2.4.18-chaos.patch
deleted file mode 100644 (file)
index f8f514b..0000000
+++ /dev/null
@@ -1,1238 +0,0 @@
- fs/ext3/ialloc.c          |    3 
- fs/ext3/inode.c           |    3 
- fs/ext3/namei.c           |  582 +++++++++++++++++++++++++++++++++++++---------
- fs/ext3/super.c           |   14 +
- include/linux/ext3_fs.h   |    1 
- include/linux/ext3_fs_i.h |    6 
- 6 files changed, 500 insertions(+), 109 deletions(-)
-
---- linux-2.4.18/fs/ext3/namei.c~ext3-pdirops-2.4.18-chaos     2003-09-01 14:58:06.000000000 +0400
-+++ linux-2.4.18-alexey/fs/ext3/namei.c        2003-09-02 11:46:15.000000000 +0400
-@@ -52,6 +52,9 @@ static struct buffer_head *ext3_append(h
- {
-       struct buffer_head *bh;
-+      /* with parallel dir operations all appends
-+       * have to be serialized -bzzz */
-+      down(&EXT3_I(inode)->i_append_sem);
-       *block = inode->i_size >> inode->i_sb->s_blocksize_bits;
-       if ((bh = ext3_bread(handle, inode, *block, 1, err))) {
-@@ -59,6 +62,8 @@ static struct buffer_head *ext3_append(h
-               EXT3_I(inode)->i_disksize = inode->i_size;
-               ext3_journal_get_write_access(handle,bh);
-       }
-+      up(&EXT3_I(inode)->i_append_sem);
-+      
-       return bh;
- }
-@@ -135,6 +140,8 @@ struct dx_frame
-       struct buffer_head *bh;
-       struct dx_entry *entries;
-       struct dx_entry *at;
-+      unsigned long leaf;
-+      unsigned int curidx;
- };
- struct dx_map_entry
-@@ -143,6 +150,30 @@ struct dx_map_entry
-       u32 offs;
- };
-+/* FIXME: this should be reworked using bb_spin_lock
-+ * introduced in -mm tree
-+ */
-+#define BH_DXLock     25
-+
-+static inline void dx_lock_bh(struct buffer_head volatile *bh)
-+{
-+#ifdef CONFIG_SMP
-+        while (test_and_set_bit(BH_DXLock, &bh->b_state)) {
-+                while (test_bit(BH_DXLock, &bh->b_state))
-+                        cpu_relax();
-+        }
-+#endif
-+}
-+
-+static inline void dx_unlock_bh(struct buffer_head *bh)
-+{
-+#ifdef CONFIG_SMP
-+        smp_mb__before_clear_bit();
-+        clear_bit(BH_DXLock, &bh->b_state);
-+#endif
-+}
-+
-+
- #ifdef CONFIG_EXT3_INDEX
- static inline unsigned dx_get_block (struct dx_entry *entry);
- static void dx_set_block (struct dx_entry *entry, unsigned value);
-@@ -154,7 +185,7 @@ static void dx_set_count (struct dx_entr
- static void dx_set_limit (struct dx_entry *entries, unsigned value);
- static unsigned dx_root_limit (struct inode *dir, unsigned infosize);
- static unsigned dx_node_limit (struct inode *dir);
--static struct dx_frame *dx_probe(struct dentry *dentry,
-+static struct dx_frame *dx_probe(struct qstr *name,
-                                struct inode *dir,
-                                struct dx_hash_info *hinfo,
-                                struct dx_frame *frame,
-@@ -166,15 +197,18 @@ static void dx_sort_map(struct dx_map_en
- static struct ext3_dir_entry_2 *dx_move_dirents (char *from, char *to,
-               struct dx_map_entry *offsets, int count);
- static struct ext3_dir_entry_2* dx_pack_dirents (char *base, int size);
--static void dx_insert_block (struct dx_frame *frame, u32 hash, u32 block);
-+static void dx_insert_block (struct inode *, struct dx_frame *, u32, u32, u32);
- static int ext3_htree_next_block(struct inode *dir, __u32 hash,
-                                struct dx_frame *frame,
-                                struct dx_frame *frames, int *err,
-                                __u32 *start_hash);
- static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
--                     struct ext3_dir_entry_2 **res_dir, int *err);
-+                     struct ext3_dir_entry_2 **res_dir, int *err,
-+                     int rwlock, void **lock);
- static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry,
-                            struct inode *inode);
-+static inline void *ext3_lock_htree(struct inode *, unsigned long, int);
-+static inline void ext3_unlock_htree(struct inode *, void *);
- /*
-  * Future: use high four bits of block for coalesce-on-delete flags
-@@ -307,6 +341,94 @@ struct stats dx_show_entries(struct dx_h
- #endif /* DX_DEBUG */
- /*
-+ * dx_find_position
-+ *
-+ * search position of specified hash in index
-+ *
-+ */
-+
-+struct dx_entry * dx_find_position(struct dx_entry * entries, u32 hash)
-+{
-+      struct dx_entry *p, *q, *m;
-+      int count;
-+
-+      count = dx_get_count(entries);
-+      p = entries + 1;
-+      q = entries + count - 1;
-+      while (p <= q)
-+      {
-+              m = p + (q - p)/2;
-+              if (dx_get_hash(m) > hash)
-+                      q = m - 1;
-+              else
-+                      p = m + 1;
-+      }
-+      return p - 1;
-+}
-+
-+/*
-+ * returns 1 if path is unchanged
-+ */
-+int dx_check_path(struct dx_frame *frame, u32 hash)
-+{
-+      struct dx_entry *p;
-+      int ret = 1;
-+
-+      dx_lock_bh(frame->bh);
-+      p = dx_find_position(frame->entries, hash);
-+      if (frame->leaf != dx_get_block(p))
-+              ret = 0;
-+      dx_unlock_bh(frame->bh);
-+      
-+      return ret;
-+}
-+
-+/*
-+ * 0 - changed
-+ * 1 - hasn't changed
-+ */
-+static int
-+dx_check_full_path(struct dx_frame *frames, struct dx_hash_info *hinfo)
-+{
-+      struct dx_entry *p;
-+      struct dx_frame *frame = frames;
-+      u32 leaf;
-+
-+      /* check first level */
-+      dx_lock_bh(frame->bh);
-+      p = dx_find_position(frame->entries, hinfo->hash);
-+      leaf = dx_get_block(p);
-+      dx_unlock_bh(frame->bh);
-+      
-+      if (leaf != frame->leaf) 
-+              return 0;
-+      
-+      /* is there 2nd level? */
-+      frame++;
-+      if (frame->bh == NULL)
-+              return 1;
-+
-+      /* check second level */
-+      dx_lock_bh(frame->bh);
-+
-+      /* probably 1st level got changed, check it */
-+      if (!dx_check_path(frames, hinfo->hash)) {
-+              /* path changed */
-+              dx_unlock_bh(frame->bh);
-+              return 0;
-+      }
-+
-+      p = dx_find_position(frame->entries, hinfo->hash);
-+      leaf = dx_get_block(p);
-+      dx_unlock_bh(frame->bh);
-+      
-+      if (leaf != frame->leaf)
-+              return 0;
-+
-+      return 1;
-+}
-+
-+/*
-  * Probe for a directory leaf block to search.
-  *
-  * dx_probe can return ERR_BAD_DX_DIR, which means there was a format
-@@ -316,19 +438,20 @@ struct stats dx_show_entries(struct dx_h
-  * back to userspace.
-  */
- static struct dx_frame *
--dx_probe(struct dentry *dentry, struct inode *dir,
-+dx_probe(struct qstr *name, struct inode *dir,
-        struct dx_hash_info *hinfo, struct dx_frame *frame_in, int *err)
- {
--      unsigned count, indirect;
--      struct dx_entry *at, *entries, *p, *q, *m;
-+      unsigned indirect;
-+      struct dx_entry *at, *entries;
-       struct dx_root *root;
-       struct buffer_head *bh;
-       struct dx_frame *frame = frame_in;
-       u32 hash;
-+      unsigned int curidx;
-       frame->bh = NULL;
--      if (dentry)
--              dir = dentry->d_parent->d_inode;
-+      frame[1].bh = NULL;
-+
-       if (!(bh = ext3_bread (NULL,dir, 0, 0, err)))
-               goto fail;
-       root = (struct dx_root *) bh->b_data;
-@@ -344,8 +467,8 @@ dx_probe(struct dentry *dentry, struct i
-       }
-       hinfo->hash_version = root->info.hash_version;
-       hinfo->seed = dir->i_sb->u.ext3_sb.s_hash_seed;
--      if (dentry)
--              ext3fs_dirhash(dentry->d_name.name, dentry->d_name.len, hinfo);
-+      if (name)
-+              ext3fs_dirhash(name->name, name->len, hinfo);
-       hash = hinfo->hash;
-       if (root->info.unused_flags & 1) {
-@@ -357,7 +480,19 @@ dx_probe(struct dentry *dentry, struct i
-               goto fail;
-       }
-+repeat:
-+      curidx = 0;
-+      entries = (struct dx_entry *) (((char *)&root->info) +
-+                                     root->info.info_length);
-+      assert(dx_get_limit(entries) == dx_root_limit(dir,
-+                                                    root->info.info_length));
-+      dxtrace (printk("Look up %x", hash));
-+      dx_lock_bh(bh);
-+      /* indirect must be initialized under bh lock because
-+       * 2nd level creation procedure may change it and dx_probe()
-+       * will suggest htree is still single-level -bzzz */
-       if ((indirect = root->info.indirect_levels) > 1) {
-+              dx_unlock_bh(bh);
-               ext3_warning(dir->i_sb, __FUNCTION__,
-                            "Unimplemented inode hash depth: %#06x",
-                            root->info.indirect_levels);
-@@ -365,56 +500,46 @@ dx_probe(struct dentry *dentry, struct i
-               *err = ERR_BAD_DX_DIR;
-               goto fail;
-       }
--
--      entries = (struct dx_entry *) (((char *)&root->info) +
--                                     root->info.info_length);
--      assert(dx_get_limit(entries) == dx_root_limit(dir,
--                                                    root->info.info_length));
--      dxtrace (printk("Look up %x", hash));
-+      
-       while (1)
-       {
--              count = dx_get_count(entries);
--              assert (count && count <= dx_get_limit(entries));
--              p = entries + 1;
--              q = entries + count - 1;
--              while (p <= q)
--              {
--                      m = p + (q - p)/2;
--                      dxtrace(printk("."));
--                      if (dx_get_hash(m) > hash)
--                              q = m - 1;
--                      else
--                              p = m + 1;
--              }
--
--              if (0) // linear search cross check
--              {
--                      unsigned n = count - 1;
--                      at = entries;
--                      while (n--)
--                      {
--                              dxtrace(printk(","));
--                              if (dx_get_hash(++at) > hash)
--                              {
--                                      at--;
--                                      break;
--                              }
--                      }
--                      assert (at == p - 1);
--              }
--
--              at = p - 1;
--              dxtrace(printk(" %x->%u\n", at == entries? 0: dx_get_hash(at), dx_get_block(at)));
-+              at = dx_find_position(entries, hinfo->hash);
-+              dxtrace(printk(" %x->%u\n",
-+                              at == entries? 0: dx_get_hash(at),
-+                              dx_get_block(at)));
-               frame->bh = bh;
-               frame->entries = entries;
-               frame->at = at;
--              if (!indirect--) return frame;
--              if (!(bh = ext3_bread (NULL,dir, dx_get_block(at), 0, err)))
-+              frame->curidx = curidx;
-+              frame->leaf = dx_get_block(at);
-+              if (!indirect--) {
-+                      dx_unlock_bh(bh);
-+                      return frame;
-+              }
-+              
-+              /* step into next htree level */
-+              curidx = dx_get_block(at);
-+              dx_unlock_bh(bh);
-+              if (!(bh = ext3_bread (NULL,dir, frame->leaf, 0, err)))
-                       goto fail2;
-+              
-+              dx_lock_bh(bh);
-+              /* splitting may change root index block and move
-+               * hash we're looking for into another index block
-+               * so, we have to check this situation and repeat
-+               * from begining if path got changed -bzzz */
-+              if (!dx_check_path(frame, hash)) {
-+                      dx_unlock_bh(bh);
-+                      bh = frame->bh;
-+                      indirect++;
-+                      goto repeat;
-+              }
-+              
-               at = entries = ((struct dx_node *) bh->b_data)->entries;
-               assert (dx_get_limit(entries) == dx_node_limit (dir));
-               frame++;
-       }
-+      dx_unlock_bh(bh);
- fail2:
-       while (frame >= frame_in) {
-               brelse(frame->bh);
-@@ -428,8 +553,7 @@ static void dx_release (struct dx_frame 
- {
-       if (frames[0].bh == NULL)
-               return;
--
--      if (((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels)
-+      if (frames[1].bh != NULL)
-               brelse(frames[1].bh);
-       brelse(frames[0].bh);
- }
-@@ -471,8 +595,10 @@ static int ext3_htree_next_block(struct 
-        * nodes need to be read.
-        */
-       while (1) {
--              if (++(p->at) < p->entries + dx_get_count(p->entries))
-+              if (++(p->at) < p->entries + dx_get_count(p->entries)) {
-+                      p->leaf = dx_get_block(p->at);
-                       break;
-+              }
-               if (p == frames)
-                       return 0;
-               num_frames++;
-@@ -498,13 +624,17 @@ static int ext3_htree_next_block(struct 
-        * block so no check is necessary
-        */
-       while (num_frames--) {
--              if (!(bh = ext3_bread(NULL, dir, dx_get_block(p->at),
--                                    0, err)))
-+              u32 idx;
-+              
-+              idx = p->leaf = dx_get_block(p->at);
-+              if (!(bh = ext3_bread(NULL, dir, idx, 0, err)))
-                       return -1; /* Failure */
-               p++;
-               brelse (p->bh);
-               p->bh = bh;
-               p->at = p->entries = ((struct dx_node *) bh->b_data)->entries;
-+              p->curidx = idx;
-+              p->leaf = dx_get_block(p->at);
-       }
-       return 1;
- }
-@@ -544,7 +674,7 @@ int ext3_htree_fill_tree(struct file *di
-       dir = dir_file->f_dentry->d_inode;
-       hinfo.hash = start_hash;
-       hinfo.minor_hash = 0;
--      frame = dx_probe(0, dir_file->f_dentry->d_inode, &hinfo, frames, &err);
-+      frame = dx_probe(NULL, dir_file->f_dentry->d_inode, &hinfo, frames, &err);
-       if (!frame)
-               return err;
-@@ -626,7 +756,8 @@ static int dx_make_map (struct ext3_dir_
-                       count++;
-               }
-               /* XXX: do we need to check rec_len == 0 case? -Chris */
--              de = (struct ext3_dir_entry_2 *) ((char *) de + le16_to_cpu(de->rec_len));
-+              de = (struct ext3_dir_entry_2 *)((char*)de +
-+                              le16_to_cpu(de->rec_len));
-       }
-       return count;
- }
-@@ -659,7 +790,8 @@ static void dx_sort_map (struct dx_map_e
-       } while(more);
- }
--static void dx_insert_block(struct dx_frame *frame, u32 hash, u32 block)
-+static void dx_insert_block(struct inode *dir, struct dx_frame *frame,
-+                      u32 hash, u32 block, u32 idx)
- {
-       struct dx_entry *entries = frame->entries;
-       struct dx_entry *old = frame->at, *new = old + 1;
-@@ -671,6 +803,7 @@ static void dx_insert_block(struct dx_fr
-       dx_set_hash(new, hash);
-       dx_set_block(new, block);
-       dx_set_count(entries, count + 1);
-+      
- }
- #endif
-@@ -753,7 +886,8 @@ static int inline search_dirblock(struct
-       
- static struct buffer_head * ext3_find_entry (struct dentry *dentry,
--                                      struct ext3_dir_entry_2 ** res_dir)
-+                                      struct ext3_dir_entry_2 ** res_dir,
-+                                      int rwlock, void **lock)
- {
-       struct super_block * sb;
-       struct buffer_head * bh_use[NAMEI_RA_SIZE];
-@@ -769,6 +903,7 @@ static struct buffer_head * ext3_find_en
-       int namelen;
-       const u8 *name;
-       unsigned blocksize;
-+      int do_not_use_dx = 0;
-       *res_dir = NULL;
-       sb = dir->i_sb;
-@@ -777,9 +912,10 @@ static struct buffer_head * ext3_find_en
-       name = dentry->d_name.name;
-       if (namelen > EXT3_NAME_LEN)
-               return NULL;
-+repeat:
- #ifdef CONFIG_EXT3_INDEX
-       if (is_dx(dir)) {
--              bh = ext3_dx_find_entry(dentry, res_dir, &err);
-+              bh = ext3_dx_find_entry(dentry, res_dir, &err, rwlock, lock);
-               /*
-                * On success, or if the error was file not found,
-                * return.  Otherwise, fall back to doing a search the
-@@ -788,8 +924,14 @@ static struct buffer_head * ext3_find_en
-               if (bh || (err != ERR_BAD_DX_DIR))
-                       return bh;
-               dxtrace(printk("ext3_find_entry: dx failed, falling back\n"));
-+              do_not_use_dx = 1;
-       }
- #endif
-+      *lock = ext3_lock_htree(dir, 0, rwlock);
-+      if (is_dx(dir) && !do_not_use_dx) {
-+              ext3_unlock_htree(dir, *lock);
-+              goto repeat;
-+      }
-       nblocks = dir->i_size >> EXT3_BLOCK_SIZE_BITS(sb);
-       start = EXT3_I(dir)->i_dir_start_lookup;
-       if (start >= nblocks)
-@@ -861,12 +1003,17 @@ cleanup_and_exit:
-       /* Clean up the read-ahead blocks */
-       for (; ra_ptr < ra_max; ra_ptr++)
-               brelse (bh_use[ra_ptr]);
-+      if (!ret) {
-+              ext3_unlock_htree(dir, *lock);
-+              *lock = NULL;
-+      }
-       return ret;
- }
- #ifdef CONFIG_EXT3_INDEX
- static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
--                     struct ext3_dir_entry_2 **res_dir, int *err)
-+                     struct ext3_dir_entry_2 **res_dir, int *err,
-+                     int rwlock, void **lock)
- {
-       struct super_block * sb;
-       struct dx_hash_info     hinfo;
-@@ -881,11 +1028,22 @@ static struct buffer_head * ext3_dx_find
-       struct inode *dir = dentry->d_parent->d_inode;
-       
-       sb = dir->i_sb;
--      if (!(frame = dx_probe (dentry, 0, &hinfo, frames, err)))
-+repeat:
-+      if (!(frame = dx_probe (&dentry->d_name, dir, &hinfo, frames, err)))
-               return NULL;
-+      
-+      *lock = ext3_lock_htree(dir, frame->leaf, rwlock);
-+      /* while locking leaf we just found may get splitted
-+       * so, we need another leaf. check this */
-+      if (!dx_check_full_path(frames, &hinfo)) {
-+              ext3_unlock_htree(dir, *lock);
-+              dx_release(frames);
-+              goto repeat;
-+      }
-+
-       hash = hinfo.hash;
-       do {
--              block = dx_get_block(frame->at);
-+              block = frame->leaf;
-               if (!(bh = ext3_bread (NULL,dir, block, 0, err)))
-                       goto errout;
-               de = (struct ext3_dir_entry_2 *) bh->b_data;
-@@ -919,6 +1077,8 @@ static struct buffer_head * ext3_dx_find
-       *err = -ENOENT;
- errout:
-       dxtrace(printk("%s not found\n", name));
-+      ext3_unlock_htree(dir, *lock);
-+      *lock = NULL;
-       dx_release (frames);
-       return NULL;
- }
-@@ -931,6 +1091,7 @@ static struct dentry *ext3_lookup(struct
-       struct ext3_dir_entry_2 * de;
-       struct buffer_head * bh;
-       struct dentry *alternate = NULL;
-+      void *lock = NULL;
-       if (dentry->d_name.len > EXT3_NAME_LEN)
-               return ERR_PTR(-ENAMETOOLONG);
-@@ -938,10 +1099,11 @@ static struct dentry *ext3_lookup(struct
-       if (ext3_check_for_iopen(dir, dentry))
-               return NULL;
--      bh = ext3_find_entry(dentry, &de);
-+      bh = ext3_find_entry(dentry, &de, 0, &lock);
-       inode = NULL;
-       if (bh) {
-               unsigned long ino = le32_to_cpu(de->inode);
-+              ext3_unlock_htree(dir, lock);
-               brelse (bh);
-               inode = iget(dir->i_sb, ino);
-@@ -984,7 +1146,8 @@ dx_move_dirents(char *from, char *to, st
-       unsigned rec_len = 0;
-       while (count--) {
--              struct ext3_dir_entry_2 *de = (struct ext3_dir_entry_2 *) (from + map->offs);
-+              struct ext3_dir_entry_2 *de =
-+                      (struct ext3_dir_entry_2 *) (from + map->offs);
-               rec_len = EXT3_DIR_REC_LEN(de->name_len);
-               memcpy (to, de, rec_len);
-               ((struct ext3_dir_entry_2 *) to)->rec_len = rec_len;
-@@ -997,7 +1160,8 @@ dx_move_dirents(char *from, char *to, st
- static struct ext3_dir_entry_2* dx_pack_dirents(char *base, int size)
- {
--      struct ext3_dir_entry_2 *next, *to, *prev, *de = (struct ext3_dir_entry_2 *) base;
-+      struct ext3_dir_entry_2 *next, *to, *prev;
-+      struct ext3_dir_entry_2 *de = (struct ext3_dir_entry_2 *) base;
-       unsigned rec_len = 0;
-       prev = to = de;
-@@ -1019,7 +1183,8 @@ static struct ext3_dir_entry_2* dx_pack_
- static struct ext3_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
-                       struct buffer_head **bh,struct dx_frame *frame,
--                      struct dx_hash_info *hinfo, int *error)
-+                      struct dx_hash_info *hinfo, void **target,
-+                      int *error)
- {
-       unsigned blocksize = dir->i_sb->s_blocksize;
-       unsigned count, continued;
-@@ -1066,23 +1231,30 @@ static struct ext3_dir_entry_2 *do_split
-       hash2 = map[split].hash;
-       continued = hash2 == map[split - 1].hash;
-       dxtrace(printk("Split block %i at %x, %i/%i\n",
--              dx_get_block(frame->at), hash2, split, count-split));
--
-+              frame->leaf, hash2, split, count-split));
-+      
-       /* Fancy dance to stay within two buffers */
-       de2 = dx_move_dirents(data1, data2, map + split, count - split);
-       de = dx_pack_dirents(data1,blocksize);
-       de->rec_len = cpu_to_le16(data1 + blocksize - (char *) de);
-       de2->rec_len = cpu_to_le16(data2 + blocksize - (char *) de2);
--      dxtrace(dx_show_leaf (hinfo, (struct ext3_dir_entry_2 *) data1, blocksize, 1));
--      dxtrace(dx_show_leaf (hinfo, (struct ext3_dir_entry_2 *) data2, blocksize, 1));
-+      dxtrace(dx_show_leaf(hinfo,(struct ext3_dir_entry_2*) data1, blocksize, 1));
-+      dxtrace(dx_show_leaf(hinfo,(struct ext3_dir_entry_2*) data2, blocksize, 1));
-       /* Which block gets the new entry? */
-+      *target = NULL;
-       if (hinfo->hash >= hash2)
-       {
-               swap(*bh, bh2);
-               de = de2;
--      }
--      dx_insert_block (frame, hash2 + continued, newblock);
-+
-+              /* entry will be stored into new block
-+               * we have to lock it before add_dirent_to_buf */
-+              *target = ext3_lock_htree(dir, newblock, 1);
-+      }
-+      dx_lock_bh(frame->bh);
-+      dx_insert_block (dir, frame, hash2 + continued, newblock, frame->curidx);
-+      dx_unlock_bh(frame->bh);
-       err = ext3_journal_dirty_metadata (handle, bh2);
-       if (err)
-               goto journal_error;
-@@ -1156,7 +1328,8 @@ static int add_dirent_to_buf(handle_t *h
-       nlen = EXT3_DIR_REC_LEN(de->name_len);
-       rlen = le16_to_cpu(de->rec_len);
-       if (de->inode) {
--              struct ext3_dir_entry_2 *de1 = (struct ext3_dir_entry_2 *)((char *)de + nlen);
-+              struct ext3_dir_entry_2 *de1 =
-+                      (struct ext3_dir_entry_2 *)((char *)de + nlen);
-               de1->rec_len = cpu_to_le16(rlen - nlen);
-               de->rec_len = cpu_to_le16(nlen);
-               de = de1;
-@@ -1214,7 +1387,8 @@ static int make_indexed_dir(handle_t *ha
-       unsigned        blocksize;
-       struct dx_hash_info hinfo;
-       u32             block;
--              
-+      void            *lock, *new_lock;
-+
-       blocksize =  dir->i_sb->s_blocksize;
-       dxtrace(printk("Creating index\n"));
-       retval = ext3_journal_get_write_access(handle, bh);
-@@ -1225,7 +1399,6 @@ static int make_indexed_dir(handle_t *ha
-       }
-       root = (struct dx_root *) bh->b_data;
-               
--      EXT3_I(dir)->i_flags |= EXT3_INDEX_FL;
-       bh2 = ext3_append (handle, dir, &block, &retval);
-       if (!(bh2)) {
-               brelse(bh);
-@@ -1233,6 +1406,8 @@ static int make_indexed_dir(handle_t *ha
-       }
-       data1 = bh2->b_data;
-+      lock = ext3_lock_htree(dir, block, 1);
-+
-       /* The 0th block becomes the root, move the dirents out */
-       de = (struct ext3_dir_entry_2 *) &root->info;
-       len = ((char *) root) + blocksize - (char *) de;
-@@ -1261,13 +1436,25 @@ static int make_indexed_dir(handle_t *ha
-       frame->entries = entries;
-       frame->at = entries;
-       frame->bh = bh;
-+      frame->curidx = 0;
-+      frame->leaf = 0;
-+      frame[1].bh = NULL;
-       bh = bh2;
--      de = do_split(handle,dir, &bh, frame, &hinfo, &retval);
-+      de = do_split(handle,dir, &bh, frame, &hinfo, &new_lock, &retval);
-       dx_release (frames);
-       if (!(de))
--              return retval;
-+              goto cleanup;
-+
-+      retval = add_dirent_to_buf(handle, dentry, inode, de, bh);
-+cleanup:
-+      if (new_lock)
-+              ext3_unlock_htree(dir, new_lock);
-+      /* we mark directory indexed in order to
-+       * avoid races while htree being created -bzzz */
-+      EXT3_I(dir)->i_flags |= EXT3_INDEX_FL;
-+      ext3_unlock_htree(dir, lock);
--      return add_dirent_to_buf(handle, dentry, inode, de, bh);
-+      return retval;
- }
- #endif
-@@ -1296,11 +1483,13 @@ static int ext3_add_entry (handle_t *han
-       unsigned blocksize;
-       unsigned nlen, rlen;
-       u32 block, blocks;
-+      void *lock;
-       sb = dir->i_sb;
-       blocksize = sb->s_blocksize;
-       if (!dentry->d_name.len)
-               return -EINVAL;
-+repeat:
- #ifdef CONFIG_EXT3_INDEX
-       if (is_dx(dir)) {
-               retval = ext3_dx_add_entry(handle, dentry, inode);
-@@ -1311,36 +1500,53 @@ static int ext3_add_entry (handle_t *han
-               ext3_mark_inode_dirty(handle, dir);
-       }
- #endif
-+      lock = ext3_lock_htree(dir, 0, 1);
-+      if (is_dx(dir)) {
-+              /* we got lock for block 0
-+               * probably previous holder of the lock
-+               * created htree -bzzz */
-+              ext3_unlock_htree(dir, lock);
-+              goto repeat;
-+      }
-+      
-       blocks = dir->i_size >> sb->s_blocksize_bits;
-       for (block = 0, offset = 0; block < blocks; block++) {
-               bh = ext3_bread(handle, dir, block, 0, &retval);
--              if(!bh)
-+              if(!bh) {
-+                      ext3_unlock_htree(dir, lock);
-                       return retval;
-+              }
-               retval = add_dirent_to_buf(handle, dentry, inode, 0, bh);
--              if (retval != -ENOSPC)
-+              if (retval != -ENOSPC) {
-+                      ext3_unlock_htree(dir, lock);
-                       return retval;
-+              }
- #ifdef CONFIG_EXT3_INDEX
-               if (blocks == 1 && !dx_fallback &&
--                  EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_DIR_INDEX))
--                      return make_indexed_dir(handle, dentry, inode, bh);
-+                  EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_DIR_INDEX)) {
-+                      retval = make_indexed_dir(handle, dentry, inode, bh);
-+                      ext3_unlock_htree(dir, lock);
-+                      return retval;
-+              }
- #endif
-               brelse(bh);
-       }
-       bh = ext3_append(handle, dir, &block, &retval);
--      if (!bh)
-+      if (!bh) {
-+              ext3_unlock_htree(dir, lock);
-               return retval;
-+      }
-       de = (struct ext3_dir_entry_2 *) bh->b_data;
-       de->inode = 0;
-       de->rec_len = cpu_to_le16(rlen = blocksize);
-       nlen = 0;
--      return add_dirent_to_buf(handle, dentry, inode, de, bh);
-+      retval = add_dirent_to_buf(handle, dentry, inode, de, bh);
-+      ext3_unlock_htree(dir, lock);
-+      return retval;
- }
- #ifdef CONFIG_EXT3_INDEX
--/*
-- * Returns 0 for success, or a negative error value
-- */
- static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry,
-                            struct inode *inode)
- {
-@@ -1352,15 +1558,28 @@ static int ext3_dx_add_entry(handle_t *h
-       struct super_block * sb = dir->i_sb;
-       struct ext3_dir_entry_2 *de;
-       int err;
--
--      frame = dx_probe(dentry, 0, &hinfo, frames, &err);
-+      int curidx;
-+      void *idx_lock, *leaf_lock, *newleaf_lock;
-+      
-+repeat:
-+      frame = dx_probe(&dentry->d_name, dir, &hinfo, frames, &err);
-       if (!frame)
-               return err;
--      entries = frame->entries;
--      at = frame->at;
--      if (!(bh = ext3_bread(handle,dir, dx_get_block(frame->at), 0, &err)))
-+      /* we're going to chage leaf, so lock it first */
-+      leaf_lock = ext3_lock_htree(dir, frame->leaf, 1);
-+
-+      /* while locking leaf we just found may get splitted
-+       * so we need to check this */
-+      if (!dx_check_full_path(frames, &hinfo)) {
-+              ext3_unlock_htree(dir, leaf_lock);
-+              dx_release(frames);
-+              goto repeat;
-+      }
-+      if (!(bh = ext3_bread(handle,dir, frame->leaf, 0, &err))) {
-+              printk("can't ext3_bread(%d) = %d\n", (int) frame->leaf, err);
-               goto cleanup;
-+      }
-       BUFFER_TRACE(bh, "get_write_access");
-       err = ext3_journal_get_write_access(handle, bh);
-@@ -1373,6 +1592,35 @@ static int ext3_dx_add_entry(handle_t *h
-               goto cleanup;
-       }
-+      /* our leaf has no enough space. hence, we have to
-+       * split it. so lock index for this leaf first */
-+      curidx = frame->curidx;
-+      idx_lock = ext3_lock_htree(dir, curidx, 1);
-+
-+      /* now check did path get changed? */
-+      dx_release(frames);
-+
-+      frame = dx_probe(&dentry->d_name, dentry->d_parent->d_inode,
-+                      &hinfo, frames, &err);
-+      if (!frame) {
-+              /* FIXME: error handling here */
-+              brelse(bh);
-+              ext3_unlock_htree(dir, idx_lock);
-+              return err;
-+      }
-+      
-+      if (frame->curidx != curidx) {
-+              /* path has been changed. we have to drop old lock
-+               * and repeat */
-+              brelse(bh);
-+              ext3_unlock_htree(dir, idx_lock);
-+              ext3_unlock_htree(dir, leaf_lock);
-+              dx_release(frames);
-+              goto repeat;
-+      }
-+      entries = frame->entries;
-+      at = frame->at;
-+
-       /* Block full, should compress but for now just split */
-       dxtrace(printk("using %u of %u node entries\n",
-                      dx_get_count(entries), dx_get_limit(entries)));
-@@ -1384,7 +1632,8 @@ static int ext3_dx_add_entry(handle_t *h
-               struct dx_entry *entries2;
-               struct dx_node *node2;
-               struct buffer_head *bh2;
--
-+              void *nb_lock;
-+              
-               if (levels && (dx_get_count(frames->entries) ==
-                              dx_get_limit(frames->entries))) {
-                       ext3_warning(sb, __FUNCTION__,
-@@ -1395,6 +1644,7 @@ static int ext3_dx_add_entry(handle_t *h
-               bh2 = ext3_append (handle, dir, &newblock, &err);
-               if (!(bh2))
-                       goto cleanup;
-+              nb_lock = ext3_lock_htree(dir, newblock, 1);
-               node2 = (struct dx_node *)(bh2->b_data);
-               entries2 = node2->entries;
-               node2->fake.rec_len = cpu_to_le16(sb->s_blocksize);
-@@ -1406,27 +1656,73 @@ static int ext3_dx_add_entry(handle_t *h
-               if (levels) {
-                       unsigned icount1 = icount/2, icount2 = icount - icount1;
-                       unsigned hash2 = dx_get_hash(entries + icount1);
-+                      void *ri_lock;
-+
-+                      /* we have to protect root htree index against
-+                       * another dx_add_entry() which would want to
-+                       * split it too -bzzz */
-+                      ri_lock = ext3_lock_htree(dir, 0, 1);
-+
-+                      /* as root index block blocked we must repeat
-+                       * searching for current position of our 2nd index -bzzz */
-+                      dx_lock_bh(frame->bh);
-+                      frames->at = dx_find_position(frames->entries, hinfo.hash);
-+                      dx_unlock_bh(frame->bh);
-+                      
-                       dxtrace(printk("Split index %i/%i\n", icount1, icount2));
--                              
--                      BUFFER_TRACE(frame->bh, "get_write_access"); /* index root */
-+      
-+                      BUFFER_TRACE(frame->bh, "get_write_access");
-                       err = ext3_journal_get_write_access(handle,
-                                                            frames[0].bh);
-                       if (err)
-                               goto journal_error;
--                              
-+                      
-+                      /* copy index into new one */
-                       memcpy ((char *) entries2, (char *) (entries + icount1),
-                               icount2 * sizeof(struct dx_entry));
--                      dx_set_count (entries, icount1);
-                       dx_set_count (entries2, icount2);
-                       dx_set_limit (entries2, dx_node_limit(dir));
-                       /* Which index block gets the new entry? */
-                       if (at - entries >= icount1) {
-+                              /* unlock index we won't use */
-+                              ext3_unlock_htree(dir, idx_lock);
-+                              idx_lock = nb_lock;
-                               frame->at = at = at - entries - icount1 + entries2;
--                              frame->entries = entries = entries2;
-+                              frame->entries = entries2;
-+                              frame->curidx = curidx = newblock;
-                               swap(frame->bh, bh2);
-+                      } else {
-+                              /* we'll use old index,so new one may be freed */
-+                              ext3_unlock_htree(dir, nb_lock);
-                       }
--                      dx_insert_block (frames + 0, hash2, newblock);
-+              
-+                      /* NOTE: very subtle piece of code
-+                       * competing dx_probe() may find 2nd level index in root
-+                       * index, then we insert new index here and set new count
-+                       * in that 2nd level index. so, dx_probe() may see 2nd
-+                       * level index w/o hash it looks for. the solution is
-+                       * to check root index after we locked just founded 2nd
-+                       * level index -bzzz */
-+                      dx_lock_bh(frames[0].bh);
-+                      dx_insert_block (dir, frames + 0, hash2, newblock, 0);
-+                      dx_unlock_bh(frames[0].bh);
-+                      
-+                      /* now old and new 2nd level index blocks contain
-+                       * all pointers, so dx_probe() may find it in the both.
-+                       * it's OK -bzzz */
-+                      
-+                      dx_lock_bh(frame->bh);
-+                      dx_set_count(entries, icount1);
-+                      dx_unlock_bh(frame->bh);
-+
-+                      /* now old 2nd level index block points to first half
-+                       * of leafs. it's importand that dx_probe() must
-+                       * check root index block for changes under
-+                       * dx_lock_bh(frame->bh) -bzzz */
-+
-+                      ext3_unlock_htree(dir, ri_lock);
-+              
-                       dxtrace(dx_show_index ("node", frames[1].entries));
-                       dxtrace(dx_show_index ("node",
-                              ((struct dx_node *) bh2->b_data)->entries));
-@@ -1435,38 +1731,61 @@ static int ext3_dx_add_entry(handle_t *h
-                               goto journal_error;
-                       brelse (bh2);
-               } else {
-+                      unsigned long leaf = frame->leaf;
-+
-                       dxtrace(printk("Creating second level index...\n"));
-                       memcpy((char *) entries2, (char *) entries,
-                              icount * sizeof(struct dx_entry));
-                       dx_set_limit(entries2, dx_node_limit(dir));
-                       /* Set up root */
-+                      dx_lock_bh(frames[0].bh);
-                       dx_set_count(entries, 1);
-                       dx_set_block(entries + 0, newblock);
-                       ((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels = 1;
-+                      dx_unlock_bh(frames[0].bh);
-                       /* Add new access path frame */
-                       frame = frames + 1;
-                       frame->at = at = at - entries + entries2;
-                       frame->entries = entries = entries2;
-                       frame->bh = bh2;
-+                      frame->curidx = newblock;
-+                      frame->leaf = leaf;
-                       err = ext3_journal_get_write_access(handle,
-                                                            frame->bh);
-                       if (err)
-                               goto journal_error;
-+
-+                      /* first level index was root. it's already initialized */
-+                      /* we my unlock it now */
-+                      ext3_unlock_htree(dir, idx_lock);
-+
-+                      /* current index is just created 2nd level index */
-+                      curidx = newblock;
-+                      idx_lock = nb_lock;
-               }
-               ext3_journal_dirty_metadata(handle, frames[0].bh);
-       }
--      de = do_split(handle, dir, &bh, frame, &hinfo, &err);
-+      de = do_split(handle, dir, &bh, frame, &hinfo, &newleaf_lock, &err);
-       if (!de)
-               goto cleanup;
-+
-+      /* index splitted */
-+      ext3_unlock_htree(dir, idx_lock);
-+      
-       err = add_dirent_to_buf(handle, dentry, inode, de, bh);
-+
-+      if (newleaf_lock)
-+              ext3_unlock_htree(dir, newleaf_lock);
-+      
-       bh = 0;
-       goto cleanup;
-       
- journal_error:
-       ext3_std_error(dir->i_sb, err);
- cleanup:
-+      ext3_unlock_htree(dir, leaf_lock);
-       if (bh)
-               brelse(bh);
-       dx_release(frames);
-@@ -1899,6 +2218,7 @@ static int ext3_rmdir (struct inode * di
-       struct buffer_head * bh;
-       struct ext3_dir_entry_2 * de;
-       handle_t *handle;
-+      void *lock;
-       handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS);
-       if (IS_ERR(handle)) {
-@@ -1906,7 +2226,7 @@ static int ext3_rmdir (struct inode * di
-       }
-       retval = -ENOENT;
--      bh = ext3_find_entry (dentry, &de);
-+      bh = ext3_find_entry (dentry, &de, 1, &lock);
-       if (!bh)
-               goto end_rmdir;
-@@ -1917,14 +2237,19 @@ static int ext3_rmdir (struct inode * di
-       DQUOT_INIT(inode);
-       retval = -EIO;
--      if (le32_to_cpu(de->inode) != inode->i_ino)
-+      if (le32_to_cpu(de->inode) != inode->i_ino) {
-+              ext3_unlock_htree(dir, lock);
-               goto end_rmdir;
-+      }
-       retval = -ENOTEMPTY;
--      if (!empty_dir (inode))
-+      if (!empty_dir (inode)) {
-+              ext3_unlock_htree(dir, lock);
-               goto end_rmdir;
-+      }
-       retval = ext3_delete_entry(handle, dir, de, bh);
-+      ext3_unlock_htree(dir, lock);
-       if (retval)
-               goto end_rmdir;
-       if (inode->i_nlink != 2)
-@@ -1957,6 +2282,7 @@ static int ext3_unlink(struct inode * di
-       struct buffer_head * bh;
-       struct ext3_dir_entry_2 * de;
-       handle_t *handle;
-+      void *lock;
-       handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS);
-       if (IS_ERR(handle)) {
-@@ -1967,7 +2293,7 @@ static int ext3_unlink(struct inode * di
-               handle->h_sync = 1;
-       retval = -ENOENT;
--      bh = ext3_find_entry (dentry, &de);
-+      bh = ext3_find_entry (dentry, &de, 1, &lock);
-       if (!bh)
-               goto end_unlink;
-@@ -1975,8 +2301,10 @@ static int ext3_unlink(struct inode * di
-       DQUOT_INIT(inode);
-       retval = -EIO;
--      if (le32_to_cpu(de->inode) != inode->i_ino)
-+      if (le32_to_cpu(de->inode) != inode->i_ino) {
-+              ext3_unlock_htree(dir, lock);
-               goto end_unlink;
-+      }
-       
-       if (!inode->i_nlink) {
-               ext3_warning (inode->i_sb, "ext3_unlink",
-@@ -1985,6 +2313,7 @@ static int ext3_unlink(struct inode * di
-               inode->i_nlink = 1;
-       }
-       retval = ext3_delete_entry(handle, dir, de, bh);
-+      ext3_unlock_htree(dir, lock);
-       if (retval)
-               goto end_unlink;
-       dir->i_ctime = dir->i_mtime = CURRENT_TIME;
-@@ -2106,6 +2435,7 @@ static int ext3_rename (struct inode * o
-       struct buffer_head * old_bh, * new_bh, * dir_bh;
-       struct ext3_dir_entry_2 * old_de, * new_de;
-       int retval;
-+      void *lock1 = NULL, *lock2 = NULL, *lock3 = NULL;
-       old_bh = new_bh = dir_bh = NULL;
-@@ -2118,7 +2448,10 @@ static int ext3_rename (struct inode * o
-       if (IS_SYNC(old_dir) || IS_SYNC(new_dir))
-               handle->h_sync = 1;
--      old_bh = ext3_find_entry (old_dentry, &old_de);
-+      if (old_dentry->d_parent == new_dentry->d_parent)
-+              down(&EXT3_I(old_dentry->d_parent->d_inode)->i_rename_sem);
-+
-+      old_bh = ext3_find_entry (old_dentry, &old_de, 1, &lock1 /* FIXME */);
-       /*
-        *  Check for inode number is _not_ due to possible IO errors.
-        *  We might rmdir the source, keep it as pwd of some process
-@@ -2131,7 +2464,7 @@ static int ext3_rename (struct inode * o
-               goto end_rename;
-       new_inode = new_dentry->d_inode;
--      new_bh = ext3_find_entry (new_dentry, &new_de);
-+      new_bh = ext3_find_entry (new_dentry, &new_de, 1, &lock2 /* FIXME */);
-       if (new_bh) {
-               if (!new_inode) {
-                       brelse (new_bh);
-@@ -2194,7 +2527,7 @@ static int ext3_rename (struct inode * o
-               struct buffer_head *old_bh2;
-               struct ext3_dir_entry_2 *old_de2;
-               
--              old_bh2 = ext3_find_entry(old_dentry, &old_de2);
-+              old_bh2 = ext3_find_entry(old_dentry, &old_de2, 1, &lock3 /* FIXME */);
-               if (old_bh2) {
-                       retval = ext3_delete_entry(handle, old_dir,
-                                                  old_de2, old_bh2);
-@@ -2237,6 +2570,14 @@ static int ext3_rename (struct inode * o
-       retval = 0;
- end_rename:
-+      if (lock1)
-+              ext3_unlock_htree(old_dentry->d_parent->d_inode, lock1);
-+      if (lock2)
-+              ext3_unlock_htree(new_dentry->d_parent->d_inode, lock2);
-+      if (lock3)
-+              ext3_unlock_htree(old_dentry->d_parent->d_inode, lock3);
-+      if (old_dentry->d_parent == new_dentry->d_parent)
-+              up(&EXT3_I(old_dentry->d_parent->d_inode)->i_rename_sem);
-       brelse (dir_bh);
-       brelse (old_bh);
-       brelse (new_bh);
-@@ -2245,6 +2586,29 @@ end_rename:
- }
- /*
-+ * this locking primitives are used to protect parts
-+ * of dir's htree. protection unit is block: leaf or index
-+ */
-+static inline void *ext3_lock_htree(struct inode *dir,
-+                                      unsigned long value, int rwlock)
-+{
-+      void *lock;
-+      
-+      if (!test_opt(dir->i_sb, PDIROPS))
-+              return NULL;
-+      lock = dynlock_lock(&EXT3_I(dir)->i_htree_lock, value, 1, GFP_KERNEL);
-+      return lock;
-+}
-+
-+static inline void ext3_unlock_htree(struct inode *dir,
-+                                      void *lock)
-+{
-+      if (!test_opt(dir->i_sb, PDIROPS) || !lock)
-+              return;
-+      dynlock_unlock(&EXT3_I(dir)->i_htree_lock, lock);
-+}
-+
-+/*
-  * directories can handle most operations...
-  */
- struct inode_operations ext3_dir_inode_operations = {
---- linux-2.4.18/fs/ext3/super.c~ext3-pdirops-2.4.18-chaos     2003-09-01 16:33:25.000000000 +0400
-+++ linux-2.4.18-alexey/fs/ext3/super.c        2003-09-02 12:46:29.000000000 +0400
-@@ -786,6 +786,8 @@ static int parse_options (char * options
-                               return 0;
-                       }
-               }
-+              else if (!strcmp (this_char, "pdirops"))
-+                      set_opt (sbi->s_mount_opt, PDIROPS);
-               else if (!strcmp (this_char, "grpid") ||
-                        !strcmp (this_char, "bsdgroups"))
-                       set_opt (*mount_options, GRPID);
-@@ -812,6 +814,9 @@ static int parse_options (char * options
-                       if (want_numeric(value, "sb", sb_block))
-                               return 0;
-               }
-+              else if (!strcmp (this_char, "pdirops")) {
-+                      set_opt (sbi->s_mount_opt, PDIROPS);
-+              }
- #ifdef CONFIG_JBD_DEBUG
-               else if (!strcmp (this_char, "ro-after")) {
-                       unsigned long v;
-@@ -969,6 +974,10 @@ static int ext3_setup_super(struct super
-               ext3_check_inodes_bitmap (sb);
-       }
- #endif
-+#ifdef S_PDIROPS
-+      if (test_opt (sb, PDIROPS))
-+              sb->s_flags |= S_PDIROPS;
-+#endif
-       setup_ro_after(sb);
-       return res;
- }
-@@ -1463,6 +1472,11 @@ struct super_block * ext3_read_super (st
-               test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered":
-               "writeback");
-+      if (test_opt(sb, PDIROPS)) {
-+              printk (KERN_INFO "EXT3-fs: mounted filesystem with parallel dirops\n");
-+              sb->s_flags |= S_PDIROPS;
-+      }
-+              
-       return sb;
- failed_mount3:
---- linux-2.4.18/include/linux/ext3_fs.h~ext3-pdirops-2.4.18-chaos     2003-09-01 14:58:06.000000000 +0400
-+++ linux-2.4.18-alexey/include/linux/ext3_fs.h        2003-09-02 11:46:15.000000000 +0400
-@@ -310,6 +310,7 @@ struct ext3_inode {
- /*
-  * Mount flags
-  */
-+#define EXT3_MOUNT_PDIROPS            0x800000/* Parallel dir operations */
- #define EXT3_MOUNT_CHECK              0x0001  /* Do mount-time checks */
- #define EXT3_MOUNT_GRPID              0x0004  /* Create files with directory's group */
- #define EXT3_MOUNT_DEBUG              0x0008  /* Some debugging messages */
---- linux-2.4.18/include/linux/ext3_fs_i.h~ext3-pdirops-2.4.18-chaos   2003-08-29 11:57:30.000000000 +0400
-+++ linux-2.4.18-alexey/include/linux/ext3_fs_i.h      2003-09-02 11:46:15.000000000 +0400
-@@ -17,6 +17,7 @@
- #define _LINUX_EXT3_FS_I
- #include <linux/rwsem.h>
-+#include <linux/dynlocks.h>
- /*
-  * second extended file system inode data in memory
-@@ -73,6 +74,11 @@ struct ext3_inode_info {
-        * by other means, so we have truncate_sem.
-        */
-       struct rw_semaphore truncate_sem;
-+
-+      /* following fields for parallel directory operations -bzzz */
-+      struct dynlock i_htree_lock;
-+      struct semaphore i_append_sem;
-+      struct semaphore i_rename_sem;
- };
- #endif        /* _LINUX_EXT3_FS_I */
---- linux-2.4.18/fs/ext3/inode.c~ext3-pdirops-2.4.18-chaos     2003-09-01 16:33:25.000000000 +0400
-+++ linux-2.4.18-alexey/fs/ext3/inode.c        2003-09-02 11:46:15.000000000 +0400
-@@ -2454,6 +2454,9 @@ void ext3_read_inode(struct inode * inod
-       } else if (S_ISDIR(inode->i_mode)) {
-               inode->i_op = &ext3_dir_inode_operations;
-               inode->i_fop = &ext3_dir_operations;
-+              dynlock_init(&EXT3_I(inode)->i_htree_lock);
-+              sema_init(&EXT3_I(inode)->i_rename_sem, 1);
-+              sema_init(&EXT3_I(inode)->i_append_sem, 1);
-       } else if (S_ISLNK(inode->i_mode)) {
-               if (ext3_inode_is_fast_symlink(inode))
-                       inode->i_op = &ext3_fast_symlink_inode_operations;
---- linux-2.4.18/fs/ext3/ialloc.c~ext3-pdirops-2.4.18-chaos    2003-09-01 14:58:05.000000000 +0400
-+++ linux-2.4.18-alexey/fs/ext3/ialloc.c       2003-09-02 11:46:15.000000000 +0400
-@@ -601,6 +601,9 @@ repeat:
-               return ERR_PTR(-EDQUOT);
-       }
-       ext3_debug ("allocating inode %lu\n", inode->i_ino);
-+      dynlock_init(&EXT3_I(inode)->i_htree_lock);
-+      sema_init(&EXT3_I(inode)->i_rename_sem, 1);
-+      sema_init(&EXT3_I(inode)->i_append_sem, 1);
-       return inode;
- fail:
-
-_
diff --git a/lustre/kernel_patches/patches/ext3-pdirops-2.4.20-chaos.patch b/lustre/kernel_patches/patches/ext3-pdirops-2.4.20-chaos.patch
deleted file mode 100644 (file)
index 28badd6..0000000
+++ /dev/null
@@ -1,1248 +0,0 @@
- fs/ext3/ialloc.c          |    3 
- fs/ext3/inode.c           |    3 
- fs/ext3/namei.c           |  582 +++++++++++++++++++++++++++++++++++++---------
- fs/ext3/super.c           |   14 +
- include/linux/ext3_fs.h   |    1 
- include/linux/ext3_fs_i.h |    6 
- 6 files changed, 500 insertions(+), 109 deletions(-)
-
-Index: linux-2.4.20/fs/ext3/namei.c
-===================================================================
---- linux-2.4.20.orig/fs/ext3/namei.c  Wed Mar 17 15:37:09 2004
-+++ linux-2.4.20/fs/ext3/namei.c       Wed Mar 17 15:37:56 2004
-@@ -51,6 +51,9 @@
- {
-       struct buffer_head *bh;
-+      /* with parallel dir operations all appends
-+       * have to be serialized -bzzz */
-+      down(&EXT3_I(inode)->i_append_sem);
-       *block = inode->i_size >> inode->i_sb->s_blocksize_bits;
-       if ((bh = ext3_bread(handle, inode, *block, 1, err))) {
-@@ -58,6 +61,8 @@
-               EXT3_I(inode)->i_disksize = inode->i_size;
-               ext3_journal_get_write_access(handle,bh);
-       }
-+      up(&EXT3_I(inode)->i_append_sem);
-+      
-       return bh;
- }
-@@ -134,6 +139,8 @@
-       struct buffer_head *bh;
-       struct dx_entry *entries;
-       struct dx_entry *at;
-+      unsigned long leaf;
-+      unsigned int curidx;
- };
- struct dx_map_entry
-@@ -142,6 +149,30 @@
-       u32 offs;
- };
-+/* FIXME: this should be reworked using bb_spin_lock
-+ * introduced in -mm tree
-+ */
-+#define BH_DXLock     25
-+
-+static inline void dx_lock_bh(struct buffer_head volatile *bh)
-+{
-+#ifdef CONFIG_SMP
-+        while (test_and_set_bit(BH_DXLock, &bh->b_state)) {
-+                while (test_bit(BH_DXLock, &bh->b_state))
-+                        cpu_relax();
-+        }
-+#endif
-+}
-+
-+static inline void dx_unlock_bh(struct buffer_head *bh)
-+{
-+#ifdef CONFIG_SMP
-+        smp_mb__before_clear_bit();
-+        clear_bit(BH_DXLock, &bh->b_state);
-+#endif
-+}
-+
-+
- #ifdef CONFIG_EXT3_INDEX
- static inline unsigned dx_get_block (struct dx_entry *entry);
- static void dx_set_block (struct dx_entry *entry, unsigned value);
-@@ -153,7 +184,7 @@
- static void dx_set_limit (struct dx_entry *entries, unsigned value);
- static unsigned dx_root_limit (struct inode *dir, unsigned infosize);
- static unsigned dx_node_limit (struct inode *dir);
--static struct dx_frame *dx_probe(struct dentry *dentry,
-+static struct dx_frame *dx_probe(struct qstr *name,
-                                struct inode *dir,
-                                struct dx_hash_info *hinfo,
-                                struct dx_frame *frame,
-@@ -165,15 +196,18 @@
- static struct ext3_dir_entry_2 *dx_move_dirents (char *from, char *to,
-               struct dx_map_entry *offsets, int count);
- static struct ext3_dir_entry_2* dx_pack_dirents (char *base, int size);
--static void dx_insert_block (struct dx_frame *frame, u32 hash, u32 block);
-+static void dx_insert_block (struct inode *, struct dx_frame *, u32, u32, u32);
- static int ext3_htree_next_block(struct inode *dir, __u32 hash,
-                                struct dx_frame *frame,
-                                struct dx_frame *frames, int *err,
-                                __u32 *start_hash);
- static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
--                     struct ext3_dir_entry_2 **res_dir, int *err);
-+                     struct ext3_dir_entry_2 **res_dir, int *err,
-+                     int rwlock, void **lock);
- static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry,
-                            struct inode *inode);
-+static inline void *ext3_lock_htree(struct inode *, unsigned long, int);
-+static inline void ext3_unlock_htree(struct inode *, void *);
- /*
-  * Future: use high four bits of block for coalesce-on-delete flags
-@@ -306,6 +340,94 @@
- #endif /* DX_DEBUG */
- /*
-+ * dx_find_position
-+ *
-+ * search position of specified hash in index
-+ *
-+ */
-+
-+struct dx_entry * dx_find_position(struct dx_entry * entries, u32 hash)
-+{
-+      struct dx_entry *p, *q, *m;
-+      int count;
-+
-+      count = dx_get_count(entries);
-+      p = entries + 1;
-+      q = entries + count - 1;
-+      while (p <= q)
-+      {
-+              m = p + (q - p)/2;
-+              if (dx_get_hash(m) > hash)
-+                      q = m - 1;
-+              else
-+                      p = m + 1;
-+      }
-+      return p - 1;
-+}
-+
-+/*
-+ * returns 1 if path is unchanged
-+ */
-+int dx_check_path(struct dx_frame *frame, u32 hash)
-+{
-+      struct dx_entry *p;
-+      int ret = 1;
-+
-+      dx_lock_bh(frame->bh);
-+      p = dx_find_position(frame->entries, hash);
-+      if (frame->leaf != dx_get_block(p))
-+              ret = 0;
-+      dx_unlock_bh(frame->bh);
-+      
-+      return ret;
-+}
-+
-+/*
-+ * 0 - changed
-+ * 1 - hasn't changed
-+ */
-+static int
-+dx_check_full_path(struct dx_frame *frames, struct dx_hash_info *hinfo)
-+{
-+      struct dx_entry *p;
-+      struct dx_frame *frame = frames;
-+      u32 leaf;
-+
-+      /* check first level */
-+      dx_lock_bh(frame->bh);
-+      p = dx_find_position(frame->entries, hinfo->hash);
-+      leaf = dx_get_block(p);
-+      dx_unlock_bh(frame->bh);
-+      
-+      if (leaf != frame->leaf) 
-+              return 0;
-+      
-+      /* is there 2nd level? */
-+      frame++;
-+      if (frame->bh == NULL)
-+              return 1;
-+
-+      /* check second level */
-+      dx_lock_bh(frame->bh);
-+
-+      /* probably 1st level got changed, check it */
-+      if (!dx_check_path(frames, hinfo->hash)) {
-+              /* path changed */
-+              dx_unlock_bh(frame->bh);
-+              return 0;
-+      }
-+
-+      p = dx_find_position(frame->entries, hinfo->hash);
-+      leaf = dx_get_block(p);
-+      dx_unlock_bh(frame->bh);
-+      
-+      if (leaf != frame->leaf)
-+              return 0;
-+
-+      return 1;
-+}
-+
-+/*
-  * Probe for a directory leaf block to search.
-  *
-  * dx_probe can return ERR_BAD_DX_DIR, which means there was a format
-@@ -315,19 +437,20 @@
-  * back to userspace.
-  */
- static struct dx_frame *
--dx_probe(struct dentry *dentry, struct inode *dir,
-+dx_probe(struct qstr *name, struct inode *dir,
-        struct dx_hash_info *hinfo, struct dx_frame *frame_in, int *err)
- {
--      unsigned count, indirect;
--      struct dx_entry *at, *entries, *p, *q, *m;
-+      unsigned indirect;
-+      struct dx_entry *at, *entries;
-       struct dx_root *root;
-       struct buffer_head *bh;
-       struct dx_frame *frame = frame_in;
-       u32 hash;
-+      unsigned int curidx;
-       frame->bh = NULL;
--      if (dentry)
--              dir = dentry->d_parent->d_inode;
-+      frame[1].bh = NULL;
-+
-       if (!(bh = ext3_bread (NULL,dir, 0, 0, err)))
-               goto fail;
-       root = (struct dx_root *) bh->b_data;
-@@ -343,8 +466,8 @@
-       }
-       hinfo->hash_version = root->info.hash_version;
-       hinfo->seed = dir->i_sb->u.ext3_sb.s_hash_seed;
--      if (dentry)
--              ext3fs_dirhash(dentry->d_name.name, dentry->d_name.len, hinfo);
-+      if (name)
-+              ext3fs_dirhash(name->name, name->len, hinfo);
-       hash = hinfo->hash;
-       if (root->info.unused_flags & 1) {
-@@ -356,7 +479,19 @@
-               goto fail;
-       }
-+repeat:
-+      curidx = 0;
-+      entries = (struct dx_entry *) (((char *)&root->info) +
-+                                     root->info.info_length);
-+      assert(dx_get_limit(entries) == dx_root_limit(dir,
-+                                                    root->info.info_length));
-+      dxtrace (printk("Look up %x", hash));
-+      dx_lock_bh(bh);
-+      /* indirect must be initialized under bh lock because
-+       * 2nd level creation procedure may change it and dx_probe()
-+       * will suggest htree is still single-level -bzzz */
-       if ((indirect = root->info.indirect_levels) > 1) {
-+              dx_unlock_bh(bh);
-               ext3_warning(dir->i_sb, __FUNCTION__,
-                            "Unimplemented inode hash depth: %#06x",
-                            root->info.indirect_levels);
-@@ -364,56 +499,46 @@
-               *err = ERR_BAD_DX_DIR;
-               goto fail;
-       }
--
--      entries = (struct dx_entry *) (((char *)&root->info) +
--                                     root->info.info_length);
--      assert(dx_get_limit(entries) == dx_root_limit(dir,
--                                                    root->info.info_length));
--      dxtrace (printk("Look up %x", hash));
-+      
-       while (1)
-       {
--              count = dx_get_count(entries);
--              assert (count && count <= dx_get_limit(entries));
--              p = entries + 1;
--              q = entries + count - 1;
--              while (p <= q)
--              {
--                      m = p + (q - p)/2;
--                      dxtrace(printk("."));
--                      if (dx_get_hash(m) > hash)
--                              q = m - 1;
--                      else
--                              p = m + 1;
--              }
--
--              if (0) // linear search cross check
--              {
--                      unsigned n = count - 1;
--                      at = entries;
--                      while (n--)
--                      {
--                              dxtrace(printk(","));
--                              if (dx_get_hash(++at) > hash)
--                              {
--                                      at--;
--                                      break;
--                              }
--                      }
--                      assert (at == p - 1);
--              }
--
--              at = p - 1;
--              dxtrace(printk(" %x->%u\n", at == entries? 0: dx_get_hash(at), dx_get_block(at)));
-+              at = dx_find_position(entries, hinfo->hash);
-+              dxtrace(printk(" %x->%u\n",
-+                              at == entries? 0: dx_get_hash(at),
-+                              dx_get_block(at)));
-               frame->bh = bh;
-               frame->entries = entries;
-               frame->at = at;
--              if (!indirect--) return frame;
--              if (!(bh = ext3_bread (NULL,dir, dx_get_block(at), 0, err)))
-+              frame->curidx = curidx;
-+              frame->leaf = dx_get_block(at);
-+              if (!indirect--) {
-+                      dx_unlock_bh(bh);
-+                      return frame;
-+              }
-+              
-+              /* step into next htree level */
-+              curidx = dx_get_block(at);
-+              dx_unlock_bh(bh);
-+              if (!(bh = ext3_bread (NULL,dir, frame->leaf, 0, err)))
-                       goto fail2;
-+              
-+              dx_lock_bh(bh);
-+              /* splitting may change root index block and move
-+               * hash we're looking for into another index block
-+               * so, we have to check this situation and repeat
-+               * from begining if path got changed -bzzz */
-+              if (!dx_check_path(frame, hash)) {
-+                      dx_unlock_bh(bh);
-+                      bh = frame->bh;
-+                      indirect++;
-+                      goto repeat;
-+              }
-+              
-               at = entries = ((struct dx_node *) bh->b_data)->entries;
-               assert (dx_get_limit(entries) == dx_node_limit (dir));
-               frame++;
-       }
-+      dx_unlock_bh(bh);
- fail2:
-       while (frame >= frame_in) {
-               brelse(frame->bh);
-@@ -427,8 +552,7 @@
- {
-       if (frames[0].bh == NULL)
-               return;
--
--      if (((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels)
-+      if (frames[1].bh != NULL)
-               brelse(frames[1].bh);
-       brelse(frames[0].bh);
- }
-@@ -470,8 +594,10 @@
-        * nodes need to be read.
-        */
-       while (1) {
--              if (++(p->at) < p->entries + dx_get_count(p->entries))
-+              if (++(p->at) < p->entries + dx_get_count(p->entries)) {
-+                      p->leaf = dx_get_block(p->at);
-                       break;
-+              }
-               if (p == frames)
-                       return 0;
-               num_frames++;
-@@ -497,13 +623,17 @@
-        * block so no check is necessary
-        */
-       while (num_frames--) {
--              if (!(bh = ext3_bread(NULL, dir, dx_get_block(p->at),
--                                    0, err)))
-+              u32 idx;
-+              
-+              idx = p->leaf = dx_get_block(p->at);
-+              if (!(bh = ext3_bread(NULL, dir, idx, 0, err)))
-                       return -1; /* Failure */
-               p++;
-               brelse (p->bh);
-               p->bh = bh;
-               p->at = p->entries = ((struct dx_node *) bh->b_data)->entries;
-+              p->curidx = idx;
-+              p->leaf = dx_get_block(p->at);
-       }
-       return 1;
- }
-@@ -543,7 +673,7 @@
-       dir = dir_file->f_dentry->d_inode;
-       hinfo.hash = start_hash;
-       hinfo.minor_hash = 0;
--      frame = dx_probe(0, dir_file->f_dentry->d_inode, &hinfo, frames, &err);
-+      frame = dx_probe(NULL, dir_file->f_dentry->d_inode, &hinfo, frames, &err);
-       if (!frame)
-               return err;
-@@ -625,7 +755,8 @@
-                       count++;
-               }
-               /* XXX: do we need to check rec_len == 0 case? -Chris */
--              de = (struct ext3_dir_entry_2 *) ((char *) de + le16_to_cpu(de->rec_len));
-+              de = (struct ext3_dir_entry_2 *)((char*)de +
-+                              le16_to_cpu(de->rec_len));
-       }
-       return count;
- }
-@@ -658,7 +789,8 @@
-       } while(more);
- }
--static void dx_insert_block(struct dx_frame *frame, u32 hash, u32 block)
-+static void dx_insert_block(struct inode *dir, struct dx_frame *frame,
-+                      u32 hash, u32 block, u32 idx)
- {
-       struct dx_entry *entries = frame->entries;
-       struct dx_entry *old = frame->at, *new = old + 1;
-@@ -670,6 +802,7 @@
-       dx_set_hash(new, hash);
-       dx_set_block(new, block);
-       dx_set_count(entries, count + 1);
-+      
- }
- #endif
-@@ -752,7 +885,8 @@
-       
- static struct buffer_head * ext3_find_entry (struct dentry *dentry,
--                                      struct ext3_dir_entry_2 ** res_dir)
-+                                      struct ext3_dir_entry_2 ** res_dir,
-+                                      int rwlock, void **lock)
- {
-       struct super_block * sb;
-       struct buffer_head * bh_use[NAMEI_RA_SIZE];
-@@ -768,6 +902,7 @@
-       int namelen;
-       const u8 *name;
-       unsigned blocksize;
-+      int do_not_use_dx = 0;
-       *res_dir = NULL;
-       sb = dir->i_sb;
-@@ -776,9 +911,10 @@
-       name = dentry->d_name.name;
-       if (namelen > EXT3_NAME_LEN)
-               return NULL;
-+repeat:
- #ifdef CONFIG_EXT3_INDEX
-       if (is_dx(dir)) {
--              bh = ext3_dx_find_entry(dentry, res_dir, &err);
-+              bh = ext3_dx_find_entry(dentry, res_dir, &err, rwlock, lock);
-               /*
-                * On success, or if the error was file not found,
-                * return.  Otherwise, fall back to doing a search the
-@@ -787,8 +923,14 @@
-               if (bh || (err != ERR_BAD_DX_DIR))
-                       return bh;
-               dxtrace(printk("ext3_find_entry: dx failed, falling back\n"));
-+              do_not_use_dx = 1;
-       }
- #endif
-+      *lock = ext3_lock_htree(dir, 0, rwlock);
-+      if (is_dx(dir) && !do_not_use_dx) {
-+              ext3_unlock_htree(dir, *lock);
-+              goto repeat;
-+      }
-       nblocks = dir->i_size >> EXT3_BLOCK_SIZE_BITS(sb);
-       start = EXT3_I(dir)->i_dir_start_lookup;
-       if (start >= nblocks)
-@@ -860,12 +1002,17 @@
-       /* Clean up the read-ahead blocks */
-       for (; ra_ptr < ra_max; ra_ptr++)
-               brelse (bh_use[ra_ptr]);
-+      if (!ret) {
-+              ext3_unlock_htree(dir, *lock);
-+              *lock = NULL;
-+      }
-       return ret;
- }
- #ifdef CONFIG_EXT3_INDEX
- static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
--                     struct ext3_dir_entry_2 **res_dir, int *err)
-+                     struct ext3_dir_entry_2 **res_dir, int *err,
-+                     int rwlock, void **lock)
- {
-       struct super_block * sb;
-       struct dx_hash_info     hinfo;
-@@ -880,11 +1027,22 @@
-       struct inode *dir = dentry->d_parent->d_inode;
-       
-       sb = dir->i_sb;
--      if (!(frame = dx_probe (dentry, 0, &hinfo, frames, err)))
-+repeat:
-+      if (!(frame = dx_probe (&dentry->d_name, dir, &hinfo, frames, err)))
-               return NULL;
-+      
-+      *lock = ext3_lock_htree(dir, frame->leaf, rwlock);
-+      /* while locking leaf we just found may get splitted
-+       * so, we need another leaf. check this */
-+      if (!dx_check_full_path(frames, &hinfo)) {
-+              ext3_unlock_htree(dir, *lock);
-+              dx_release(frames);
-+              goto repeat;
-+      }
-+
-       hash = hinfo.hash;
-       do {
--              block = dx_get_block(frame->at);
-+              block = frame->leaf;
-               if (!(bh = ext3_bread (NULL,dir, block, 0, err)))
-                       goto errout;
-               de = (struct ext3_dir_entry_2 *) bh->b_data;
-@@ -918,6 +1076,8 @@
-       *err = -ENOENT;
- errout:
-       dxtrace(printk("%s not found\n", name));
-+      ext3_unlock_htree(dir, *lock);
-+      *lock = NULL;
-       dx_release (frames);
-       return NULL;
- }
-@@ -928,6 +1088,7 @@
-       struct inode * inode;
-       struct ext3_dir_entry_2 * de;
-       struct buffer_head * bh;
-+    void *lock = NULL;
-       if (dentry->d_name.len > EXT3_NAME_LEN)
-               return ERR_PTR(-ENAMETOOLONG);
-@@ -935,10 +1096,11 @@
-       if (ext3_check_for_iopen(dir, dentry))
-               return NULL;
--      bh = ext3_find_entry(dentry, &de);
-+      bh = ext3_find_entry(dentry, &de, 0, &lock);
-       inode = NULL;
-       if (bh) {
-               unsigned long ino = le32_to_cpu(de->inode);
-+              ext3_unlock_htree(dir, lock);
-               brelse (bh);
-               inode = iget(dir->i_sb, ino);
-@@ -975,7 +1137,8 @@
-       unsigned rec_len = 0;
-       while (count--) {
--              struct ext3_dir_entry_2 *de = (struct ext3_dir_entry_2 *) (from + map->offs);
-+              struct ext3_dir_entry_2 *de =
-+                      (struct ext3_dir_entry_2 *) (from + map->offs);
-               rec_len = EXT3_DIR_REC_LEN(de->name_len);
-               memcpy (to, de, rec_len);
-               ((struct ext3_dir_entry_2 *) to)->rec_len = rec_len;
-@@ -988,7 +1151,8 @@
- static struct ext3_dir_entry_2* dx_pack_dirents(char *base, int size)
- {
--      struct ext3_dir_entry_2 *next, *to, *prev, *de = (struct ext3_dir_entry_2 *) base;
-+      struct ext3_dir_entry_2 *next, *to, *prev;
-+      struct ext3_dir_entry_2 *de = (struct ext3_dir_entry_2 *) base;
-       unsigned rec_len = 0;
-       prev = to = de;
-@@ -1010,7 +1174,8 @@
- static struct ext3_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
-                       struct buffer_head **bh,struct dx_frame *frame,
--                      struct dx_hash_info *hinfo, int *error)
-+                      struct dx_hash_info *hinfo, void **target,
-+                      int *error)
- {
-       unsigned blocksize = dir->i_sb->s_blocksize;
-       unsigned count, continued;
-@@ -1057,23 +1222,30 @@
-       hash2 = map[split].hash;
-       continued = hash2 == map[split - 1].hash;
-       dxtrace(printk("Split block %i at %x, %i/%i\n",
--              dx_get_block(frame->at), hash2, split, count-split));
--
-+              frame->leaf, hash2, split, count-split));
-+      
-       /* Fancy dance to stay within two buffers */
-       de2 = dx_move_dirents(data1, data2, map + split, count - split);
-       de = dx_pack_dirents(data1,blocksize);
-       de->rec_len = cpu_to_le16(data1 + blocksize - (char *) de);
-       de2->rec_len = cpu_to_le16(data2 + blocksize - (char *) de2);
--      dxtrace(dx_show_leaf (hinfo, (struct ext3_dir_entry_2 *) data1, blocksize, 1));
--      dxtrace(dx_show_leaf (hinfo, (struct ext3_dir_entry_2 *) data2, blocksize, 1));
-+      dxtrace(dx_show_leaf(hinfo,(struct ext3_dir_entry_2*) data1, blocksize, 1));
-+      dxtrace(dx_show_leaf(hinfo,(struct ext3_dir_entry_2*) data2, blocksize, 1));
-       /* Which block gets the new entry? */
-+      *target = NULL;
-       if (hinfo->hash >= hash2)
-       {
-               swap(*bh, bh2);
-               de = de2;
--      }
--      dx_insert_block (frame, hash2 + continued, newblock);
-+
-+              /* entry will be stored into new block
-+               * we have to lock it before add_dirent_to_buf */
-+              *target = ext3_lock_htree(dir, newblock, 1);
-+      }
-+      dx_lock_bh(frame->bh);
-+      dx_insert_block (dir, frame, hash2 + continued, newblock, frame->curidx);
-+      dx_unlock_bh(frame->bh);
-       err = ext3_journal_dirty_metadata (handle, bh2);
-       if (err)
-               goto journal_error;
-@@ -1147,7 +1319,8 @@
-       nlen = EXT3_DIR_REC_LEN(de->name_len);
-       rlen = le16_to_cpu(de->rec_len);
-       if (de->inode) {
--              struct ext3_dir_entry_2 *de1 = (struct ext3_dir_entry_2 *)((char *)de + nlen);
-+              struct ext3_dir_entry_2 *de1 =
-+                      (struct ext3_dir_entry_2 *)((char *)de + nlen);
-               de1->rec_len = cpu_to_le16(rlen - nlen);
-               de->rec_len = cpu_to_le16(nlen);
-               de = de1;
-@@ -1205,7 +1378,8 @@
-       unsigned        blocksize;
-       struct dx_hash_info hinfo;
-       u32             block;
--              
-+      void            *lock, *new_lock;
-+
-       blocksize =  dir->i_sb->s_blocksize;
-       dxtrace(printk("Creating index\n"));
-       retval = ext3_journal_get_write_access(handle, bh);
-@@ -1216,7 +1390,6 @@
-       }
-       root = (struct dx_root *) bh->b_data;
-               
--      EXT3_I(dir)->i_flags |= EXT3_INDEX_FL;
-       bh2 = ext3_append (handle, dir, &block, &retval);
-       if (!(bh2)) {
-               brelse(bh);
-@@ -1224,6 +1397,8 @@
-       }
-       data1 = bh2->b_data;
-+      lock = ext3_lock_htree(dir, block, 1);
-+
-       /* The 0th block becomes the root, move the dirents out */
-       de = (struct ext3_dir_entry_2 *) &root->dotdot;
-       de = (struct ext3_dir_entry_2 *) ((char *)de + de->rec_len);
-@@ -1253,13 +1428,25 @@
-       frame->entries = entries;
-       frame->at = entries;
-       frame->bh = bh;
-+      frame->curidx = 0;
-+      frame->leaf = 0;
-+      frame[1].bh = NULL;
-       bh = bh2;
--      de = do_split(handle,dir, &bh, frame, &hinfo, &retval);
-+      de = do_split(handle,dir, &bh, frame, &hinfo, &new_lock, &retval);
-       dx_release (frames);
-       if (!(de))
--              return retval;
-+              goto cleanup;
-+
-+      retval = add_dirent_to_buf(handle, dentry, inode, de, bh);
-+cleanup:
-+      if (new_lock)
-+              ext3_unlock_htree(dir, new_lock);
-+      /* we mark directory indexed in order to
-+       * avoid races while htree being created -bzzz */
-+      EXT3_I(dir)->i_flags |= EXT3_INDEX_FL;
-+      ext3_unlock_htree(dir, lock);
--      return add_dirent_to_buf(handle, dentry, inode, de, bh);
-+      return retval;
- }
- #endif
-@@ -1288,11 +1475,13 @@
-       unsigned blocksize;
-       unsigned nlen, rlen;
-       u32 block, blocks;
-+      void *lock;
-       sb = dir->i_sb;
-       blocksize = sb->s_blocksize;
-       if (!dentry->d_name.len)
-               return -EINVAL;
-+repeat:
- #ifdef CONFIG_EXT3_INDEX
-       if (is_dx(dir)) {
-               retval = ext3_dx_add_entry(handle, dentry, inode);
-@@ -1303,36 +1492,53 @@
-               ext3_mark_inode_dirty(handle, dir);
-       }
- #endif
-+      lock = ext3_lock_htree(dir, 0, 1);
-+      if (is_dx(dir)) {
-+              /* we got lock for block 0
-+               * probably previous holder of the lock
-+               * created htree -bzzz */
-+              ext3_unlock_htree(dir, lock);
-+              goto repeat;
-+      }
-+      
-       blocks = dir->i_size >> sb->s_blocksize_bits;
-       for (block = 0, offset = 0; block < blocks; block++) {
-               bh = ext3_bread(handle, dir, block, 0, &retval);
--              if(!bh)
-+              if(!bh) {
-+                      ext3_unlock_htree(dir, lock);
-                       return retval;
-+              }
-               retval = add_dirent_to_buf(handle, dentry, inode, 0, bh);
--              if (retval != -ENOSPC)
-+              if (retval != -ENOSPC) {
-+                      ext3_unlock_htree(dir, lock);
-                       return retval;
-+              }
- #ifdef CONFIG_EXT3_INDEX
-               if (blocks == 1 && !dx_fallback &&
--                  EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_DIR_INDEX))
--                      return make_indexed_dir(handle, dentry, inode, bh);
-+                  EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_DIR_INDEX)) {
-+                      retval = make_indexed_dir(handle, dentry, inode, bh);
-+                      ext3_unlock_htree(dir, lock);
-+                      return retval;
-+              }
- #endif
-               brelse(bh);
-       }
-       bh = ext3_append(handle, dir, &block, &retval);
--      if (!bh)
-+      if (!bh) {
-+              ext3_unlock_htree(dir, lock);
-               return retval;
-+      }
-       de = (struct ext3_dir_entry_2 *) bh->b_data;
-       de->inode = 0;
-       de->rec_len = cpu_to_le16(rlen = blocksize);
-       nlen = 0;
--      return add_dirent_to_buf(handle, dentry, inode, de, bh);
-+      retval = add_dirent_to_buf(handle, dentry, inode, de, bh);
-+      ext3_unlock_htree(dir, lock);
-+      return retval;
- }
- #ifdef CONFIG_EXT3_INDEX
--/*
-- * Returns 0 for success, or a negative error value
-- */
- static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry,
-                            struct inode *inode)
- {
-@@ -1344,15 +1550,28 @@
-       struct super_block * sb = dir->i_sb;
-       struct ext3_dir_entry_2 *de;
-       int err;
--
--      frame = dx_probe(dentry, 0, &hinfo, frames, &err);
-+      int curidx;
-+      void *idx_lock, *leaf_lock, *newleaf_lock;
-+      
-+repeat:
-+      frame = dx_probe(&dentry->d_name, dir, &hinfo, frames, &err);
-       if (!frame)
-               return err;
--      entries = frame->entries;
--      at = frame->at;
--      if (!(bh = ext3_bread(handle,dir, dx_get_block(frame->at), 0, &err)))
-+      /* we're going to chage leaf, so lock it first */
-+      leaf_lock = ext3_lock_htree(dir, frame->leaf, 1);
-+
-+      /* while locking leaf we just found may get splitted
-+       * so we need to check this */
-+      if (!dx_check_full_path(frames, &hinfo)) {
-+              ext3_unlock_htree(dir, leaf_lock);
-+              dx_release(frames);
-+              goto repeat;
-+      }
-+      if (!(bh = ext3_bread(handle,dir, frame->leaf, 0, &err))) {
-+              printk("can't ext3_bread(%d) = %d\n", (int) frame->leaf, err);
-               goto cleanup;
-+      }
-       BUFFER_TRACE(bh, "get_write_access");
-       err = ext3_journal_get_write_access(handle, bh);
-@@ -1365,6 +1584,35 @@
-               goto cleanup;
-       }
-+      /* our leaf has no enough space. hence, we have to
-+       * split it. so lock index for this leaf first */
-+      curidx = frame->curidx;
-+      idx_lock = ext3_lock_htree(dir, curidx, 1);
-+
-+      /* now check did path get changed? */
-+      dx_release(frames);
-+
-+      frame = dx_probe(&dentry->d_name, dentry->d_parent->d_inode,
-+                      &hinfo, frames, &err);
-+      if (!frame) {
-+              /* FIXME: error handling here */
-+              brelse(bh);
-+              ext3_unlock_htree(dir, idx_lock);
-+              return err;
-+      }
-+      
-+      if (frame->curidx != curidx) {
-+              /* path has been changed. we have to drop old lock
-+               * and repeat */
-+              brelse(bh);
-+              ext3_unlock_htree(dir, idx_lock);
-+              ext3_unlock_htree(dir, leaf_lock);
-+              dx_release(frames);
-+              goto repeat;
-+      }
-+      entries = frame->entries;
-+      at = frame->at;
-+
-       /* Block full, should compress but for now just split */
-       dxtrace(printk("using %u of %u node entries\n",
-                      dx_get_count(entries), dx_get_limit(entries)));
-@@ -1376,7 +1624,8 @@
-               struct dx_entry *entries2;
-               struct dx_node *node2;
-               struct buffer_head *bh2;
--
-+              void *nb_lock;
-+              
-               if (levels && (dx_get_count(frames->entries) ==
-                              dx_get_limit(frames->entries))) {
-                       ext3_warning(sb, __FUNCTION__,
-@@ -1387,6 +1636,7 @@
-               bh2 = ext3_append (handle, dir, &newblock, &err);
-               if (!(bh2))
-                       goto cleanup;
-+              nb_lock = ext3_lock_htree(dir, newblock, 1);
-               node2 = (struct dx_node *)(bh2->b_data);
-               entries2 = node2->entries;
-               node2->fake.rec_len = cpu_to_le16(sb->s_blocksize);
-@@ -1398,27 +1648,73 @@
-               if (levels) {
-                       unsigned icount1 = icount/2, icount2 = icount - icount1;
-                       unsigned hash2 = dx_get_hash(entries + icount1);
-+                      void *ri_lock;
-+
-+                      /* we have to protect root htree index against
-+                       * another dx_add_entry() which would want to
-+                       * split it too -bzzz */
-+                      ri_lock = ext3_lock_htree(dir, 0, 1);
-+
-+                      /* as root index block blocked we must repeat
-+                       * searching for current position of our 2nd index -bzzz */
-+                      dx_lock_bh(frame->bh);
-+                      frames->at = dx_find_position(frames->entries, hinfo.hash);
-+                      dx_unlock_bh(frame->bh);
-+                      
-                       dxtrace(printk("Split index %i/%i\n", icount1, icount2));
--                              
--                      BUFFER_TRACE(frame->bh, "get_write_access"); /* index root */
-+      
-+                      BUFFER_TRACE(frame->bh, "get_write_access");
-                       err = ext3_journal_get_write_access(handle,
-                                                            frames[0].bh);
-                       if (err)
-                               goto journal_error;
--                              
-+                      
-+                      /* copy index into new one */
-                       memcpy ((char *) entries2, (char *) (entries + icount1),
-                               icount2 * sizeof(struct dx_entry));
--                      dx_set_count (entries, icount1);
-                       dx_set_count (entries2, icount2);
-                       dx_set_limit (entries2, dx_node_limit(dir));
-                       /* Which index block gets the new entry? */
-                       if (at - entries >= icount1) {
-+                              /* unlock index we won't use */
-+                              ext3_unlock_htree(dir, idx_lock);
-+                              idx_lock = nb_lock;
-                               frame->at = at = at - entries - icount1 + entries2;
--                              frame->entries = entries = entries2;
-+                              frame->entries = entries2;
-+                              frame->curidx = curidx = newblock;
-                               swap(frame->bh, bh2);
-+                      } else {
-+                              /* we'll use old index,so new one may be freed */
-+                              ext3_unlock_htree(dir, nb_lock);
-                       }
--                      dx_insert_block (frames + 0, hash2, newblock);
-+              
-+                      /* NOTE: very subtle piece of code
-+                       * competing dx_probe() may find 2nd level index in root
-+                       * index, then we insert new index here and set new count
-+                       * in that 2nd level index. so, dx_probe() may see 2nd
-+                       * level index w/o hash it looks for. the solution is
-+                       * to check root index after we locked just founded 2nd
-+                       * level index -bzzz */
-+                      dx_lock_bh(frames[0].bh);
-+                      dx_insert_block (dir, frames + 0, hash2, newblock, 0);
-+                      dx_unlock_bh(frames[0].bh);
-+                      
-+                      /* now old and new 2nd level index blocks contain
-+                       * all pointers, so dx_probe() may find it in the both.
-+                       * it's OK -bzzz */
-+                      
-+                      dx_lock_bh(frame->bh);
-+                      dx_set_count(entries, icount1);
-+                      dx_unlock_bh(frame->bh);
-+
-+                      /* now old 2nd level index block points to first half
-+                       * of leafs. it's importand that dx_probe() must
-+                       * check root index block for changes under
-+                       * dx_lock_bh(frame->bh) -bzzz */
-+
-+                      ext3_unlock_htree(dir, ri_lock);
-+              
-                       dxtrace(dx_show_index ("node", frames[1].entries));
-                       dxtrace(dx_show_index ("node",
-                              ((struct dx_node *) bh2->b_data)->entries));
-@@ -1427,38 +1723,61 @@
-                               goto journal_error;
-                       brelse (bh2);
-               } else {
-+                      unsigned long leaf = frame->leaf;
-+
-                       dxtrace(printk("Creating second level index...\n"));
-                       memcpy((char *) entries2, (char *) entries,
-                              icount * sizeof(struct dx_entry));
-                       dx_set_limit(entries2, dx_node_limit(dir));
-                       /* Set up root */
-+                      dx_lock_bh(frames[0].bh);
-                       dx_set_count(entries, 1);
-                       dx_set_block(entries + 0, newblock);
-                       ((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels = 1;
-+                      dx_unlock_bh(frames[0].bh);
-                       /* Add new access path frame */
-                       frame = frames + 1;
-                       frame->at = at = at - entries + entries2;
-                       frame->entries = entries = entries2;
-                       frame->bh = bh2;
-+                      frame->curidx = newblock;
-+                      frame->leaf = leaf;
-                       err = ext3_journal_get_write_access(handle,
-                                                            frame->bh);
-                       if (err)
-                               goto journal_error;
-+
-+                      /* first level index was root. it's already initialized */
-+                      /* we my unlock it now */
-+                      ext3_unlock_htree(dir, idx_lock);
-+
-+                      /* current index is just created 2nd level index */
-+                      curidx = newblock;
-+                      idx_lock = nb_lock;
-               }
-               ext3_journal_dirty_metadata(handle, frames[0].bh);
-       }
--      de = do_split(handle, dir, &bh, frame, &hinfo, &err);
-+      de = do_split(handle, dir, &bh, frame, &hinfo, &newleaf_lock, &err);
-       if (!de)
-               goto cleanup;
-+
-+      /* index splitted */
-+      ext3_unlock_htree(dir, idx_lock);
-+      
-       err = add_dirent_to_buf(handle, dentry, inode, de, bh);
-+
-+      if (newleaf_lock)
-+              ext3_unlock_htree(dir, newleaf_lock);
-+      
-       bh = 0;
-       goto cleanup;
-       
- journal_error:
-       ext3_std_error(dir->i_sb, err);
- cleanup:
-+      ext3_unlock_htree(dir, leaf_lock);
-       if (bh)
-               brelse(bh);
-       dx_release(frames);
-@@ -1902,6 +2221,7 @@
-       struct buffer_head * bh;
-       struct ext3_dir_entry_2 * de;
-       handle_t *handle;
-+      void *lock;
-       handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS);
-       if (IS_ERR(handle)) {
-@@ -1909,7 +2229,7 @@
-       }
-       retval = -ENOENT;
--      bh = ext3_find_entry (dentry, &de);
-+      bh = ext3_find_entry (dentry, &de, 1, &lock);
-       if (!bh)
-               goto end_rmdir;
-@@ -1920,14 +2240,19 @@
-       DQUOT_INIT(inode);
-       retval = -EIO;
--      if (le32_to_cpu(de->inode) != inode->i_ino)
-+      if (le32_to_cpu(de->inode) != inode->i_ino) {
-+              ext3_unlock_htree(dir, lock);
-               goto end_rmdir;
-+      }
-       retval = -ENOTEMPTY;
--      if (!empty_dir (inode))
-+      if (!empty_dir (inode)) {
-+              ext3_unlock_htree(dir, lock);
-               goto end_rmdir;
-+      }
-       retval = ext3_delete_entry(handle, dir, de, bh);
-+      ext3_unlock_htree(dir, lock);
-       if (retval)
-               goto end_rmdir;
-       if (inode->i_nlink != 2)
-@@ -1956,6 +2281,7 @@
-       struct buffer_head * bh;
-       struct ext3_dir_entry_2 * de;
-       handle_t *handle;
-+      void *lock;
-       handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS);
-       if (IS_ERR(handle)) {
-@@ -1966,7 +2292,7 @@
-               handle->h_sync = 1;
-       retval = -ENOENT;
--      bh = ext3_find_entry (dentry, &de);
-+      bh = ext3_find_entry (dentry, &de, 1, &lock);
-       if (!bh)
-               goto end_unlink;
-@@ -1974,8 +2300,10 @@
-       DQUOT_INIT(inode);
-       retval = -EIO;
--      if (le32_to_cpu(de->inode) != inode->i_ino)
-+      if (le32_to_cpu(de->inode) != inode->i_ino) {
-+              ext3_unlock_htree(dir, lock);
-               goto end_unlink;
-+      }
-       
-       if (!inode->i_nlink) {
-               ext3_warning (inode->i_sb, "ext3_unlink",
-@@ -1984,6 +2312,7 @@
-               inode->i_nlink = 1;
-       }
-       retval = ext3_delete_entry(handle, dir, de, bh);
-+      ext3_unlock_htree(dir, lock);
-       if (retval)
-               goto end_unlink;
-       dir->i_ctime = dir->i_mtime = CURRENT_TIME;
-@@ -2121,6 +2450,7 @@
-       struct buffer_head * old_bh, * new_bh, * dir_bh;
-       struct ext3_dir_entry_2 * old_de, * new_de;
-       int retval;
-+      void *lock1 = NULL, *lock2 = NULL, *lock3 = NULL;
-       old_bh = new_bh = dir_bh = NULL;
-@@ -2133,7 +2463,10 @@
-       if (IS_SYNC(old_dir) || IS_SYNC(new_dir))
-               handle->h_sync = 1;
--      old_bh = ext3_find_entry (old_dentry, &old_de);
-+      if (old_dentry->d_parent == new_dentry->d_parent)
-+              down(&EXT3_I(old_dentry->d_parent->d_inode)->i_rename_sem);
-+
-+      old_bh = ext3_find_entry (old_dentry, &old_de, 1, &lock1 /* FIXME */);
-       /*
-        *  Check for inode number is _not_ due to possible IO errors.
-        *  We might rmdir the source, keep it as pwd of some process
-@@ -2146,7 +2479,7 @@
-               goto end_rename;
-       new_inode = new_dentry->d_inode;
--      new_bh = ext3_find_entry (new_dentry, &new_de);
-+      new_bh = ext3_find_entry (new_dentry, &new_de, 1, &lock2 /* FIXME */);
-       if (new_bh) {
-               if (!new_inode) {
-                       brelse (new_bh);
-@@ -2209,7 +2542,7 @@
-               struct buffer_head *old_bh2;
-               struct ext3_dir_entry_2 *old_de2;
-               
--              old_bh2 = ext3_find_entry(old_dentry, &old_de2);
-+              old_bh2 = ext3_find_entry(old_dentry, &old_de2, 1, &lock3 /* FIXME */);
-               if (old_bh2) {
-                       retval = ext3_delete_entry(handle, old_dir,
-                                                  old_de2, old_bh2);
-@@ -2252,6 +2585,14 @@
-       retval = 0;
- end_rename:
-+      if (lock1)
-+              ext3_unlock_htree(old_dentry->d_parent->d_inode, lock1);
-+      if (lock2)
-+              ext3_unlock_htree(new_dentry->d_parent->d_inode, lock2);
-+      if (lock3)
-+              ext3_unlock_htree(old_dentry->d_parent->d_inode, lock3);
-+      if (old_dentry->d_parent == new_dentry->d_parent)
-+              up(&EXT3_I(old_dentry->d_parent->d_inode)->i_rename_sem);
-       brelse (dir_bh);
-       brelse (old_bh);
-       brelse (new_bh);
-@@ -2260,6 +2601,29 @@
- }
- /*
-+ * this locking primitives are used to protect parts
-+ * of dir's htree. protection unit is block: leaf or index
-+ */
-+static inline void *ext3_lock_htree(struct inode *dir,
-+                                      unsigned long value, int rwlock)
-+{
-+      void *lock;
-+      
-+      if (!test_opt(dir->i_sb, PDIROPS))
-+              return NULL;
-+      lock = dynlock_lock(&EXT3_I(dir)->i_htree_lock, value, 1, GFP_KERNEL);
-+      return lock;
-+}
-+
-+static inline void ext3_unlock_htree(struct inode *dir,
-+                                      void *lock)
-+{
-+      if (!test_opt(dir->i_sb, PDIROPS) || !lock)
-+              return;
-+      dynlock_unlock(&EXT3_I(dir)->i_htree_lock, lock);
-+}
-+
-+/*
-  * directories can handle most operations...
-  */
- struct inode_operations ext3_dir_inode_operations = {
-Index: linux-2.4.20/fs/ext3/super.c
-===================================================================
---- linux-2.4.20.orig/fs/ext3/super.c  Wed Mar 17 15:37:09 2004
-+++ linux-2.4.20/fs/ext3/super.c       Wed Mar 17 15:37:10 2004
-@@ -796,6 +796,8 @@
-                               return 0;
-                       }
-               }
-+              else if (!strcmp (this_char, "pdirops"))
-+                      set_opt (sbi->s_mount_opt, PDIROPS);
-               else if (!strcmp (this_char, "grpid") ||
-                        !strcmp (this_char, "bsdgroups"))
-                       set_opt (*mount_options, GRPID);
-@@ -822,6 +824,9 @@
-                       if (want_numeric(value, "sb", sb_block))
-                               return 0;
-               }
-+              else if (!strcmp (this_char, "pdirops")) {
-+                      set_opt (sbi->s_mount_opt, PDIROPS);
-+              }
- #ifdef CONFIG_JBD_DEBUG
-               else if (!strcmp (this_char, "ro-after")) {
-                       unsigned long v;
-@@ -985,6 +990,10 @@
-               ext3_check_inodes_bitmap (sb);
-       }
- #endif
-+#ifdef S_PDIROPS
-+      if (test_opt (sb, PDIROPS))
-+              sb->s_flags |= S_PDIROPS;
-+#endif
-       setup_ro_after(sb);
-       return res;
- }
-@@ -1484,6 +1493,11 @@
-               test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered":
-               "writeback");
-+      if (test_opt(sb, PDIROPS)) {
-+              printk (KERN_INFO "EXT3-fs: mounted filesystem with parallel dirops\n");
-+              sb->s_flags |= S_PDIROPS;
-+      }
-+              
-       return sb;
- failed_mount3:
-Index: linux-2.4.20/fs/ext3/inode.c
-===================================================================
---- linux-2.4.20.orig/fs/ext3/inode.c  Wed Mar 17 15:37:09 2004
-+++ linux-2.4.20/fs/ext3/inode.c       Wed Mar 17 15:37:10 2004
-@@ -2435,6 +2435,9 @@
-       } else if (S_ISDIR(inode->i_mode)) {
-               inode->i_op = &ext3_dir_inode_operations;
-               inode->i_fop = &ext3_dir_operations;
-+              dynlock_init(&EXT3_I(inode)->i_htree_lock);
-+              sema_init(&EXT3_I(inode)->i_rename_sem, 1);
-+              sema_init(&EXT3_I(inode)->i_append_sem, 1);
-       } else if (S_ISLNK(inode->i_mode)) {
-               if (ext3_inode_is_fast_symlink(inode))
-                       inode->i_op = &ext3_fast_symlink_inode_operations;
-Index: linux-2.4.20/fs/ext3/ialloc.c
-===================================================================
---- linux-2.4.20.orig/fs/ext3/ialloc.c Wed Mar 17 15:37:09 2004
-+++ linux-2.4.20/fs/ext3/ialloc.c      Wed Mar 17 15:37:10 2004
-@@ -601,6 +601,9 @@
-               return ERR_PTR(-EDQUOT);
-       }
-       ext3_debug ("allocating inode %lu\n", inode->i_ino);
-+      dynlock_init(&EXT3_I(inode)->i_htree_lock);
-+      sema_init(&EXT3_I(inode)->i_rename_sem, 1);
-+      sema_init(&EXT3_I(inode)->i_append_sem, 1);
-       return inode;
- fail:
-Index: linux-2.4.20/include/linux/ext3_fs.h
-===================================================================
---- linux-2.4.20.orig/include/linux/ext3_fs.h  Wed Mar 17 15:37:09 2004
-+++ linux-2.4.20/include/linux/ext3_fs.h       Wed Mar 17 15:37:10 2004
-@@ -306,6 +306,7 @@
- /*
-  * Mount flags
-  */
-+#define EXT3_MOUNT_PDIROPS            0x800000/* Parallel dir operations */
- #define EXT3_MOUNT_CHECK              0x0001  /* Do mount-time checks */
- #define EXT3_MOUNT_GRPID              0x0004  /* Create files with directory's group */
- #define EXT3_MOUNT_DEBUG              0x0008  /* Some debugging messages */
-Index: linux-2.4.20/include/linux/ext3_fs_i.h
-===================================================================
---- linux-2.4.20.orig/include/linux/ext3_fs_i.h        Thu Nov 22 11:46:19 2001
-+++ linux-2.4.20/include/linux/ext3_fs_i.h     Wed Mar 17 15:37:10 2004
-@@ -17,6 +17,7 @@
- #define _LINUX_EXT3_FS_I
- #include <linux/rwsem.h>
-+#include <linux/dynlocks.h>
- /*
-  * second extended file system inode data in memory
-@@ -73,6 +74,11 @@
-        * by other means, so we have truncate_sem.
-        */
-       struct rw_semaphore truncate_sem;
-+
-+      /* following fields for parallel directory operations -bzzz */
-+      struct dynlock i_htree_lock;
-+      struct semaphore i_append_sem;
-+      struct semaphore i_rename_sem;
- };
- #endif        /* _LINUX_EXT3_FS_I */
diff --git a/lustre/kernel_patches/patches/ext3-raw-lookup-pdirops.patch b/lustre/kernel_patches/patches/ext3-raw-lookup-pdirops.patch
deleted file mode 100644 (file)
index 72a5156..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
- fs/ext3/namei.c    |   31 +++++++++++++++++++++++++++++++
- include/linux/fs.h |    1 +
- 2 files changed, 32 insertions(+)
-
---- linux-2.4.18-p4smp1Guser/include/linux/fs.h~ext3-raw-lookup        Thu Sep 25 15:59:59 2003
-+++ linux-2.4.18-p4smp1Guser-pschwan/include/linux/fs.h        Thu Sep 25 15:59:59 2003
-@@ -911,6 +911,7 @@ struct inode_operations {
-       int (*create) (struct inode *,struct dentry *,int);
-       int (*create_it) (struct inode *,struct dentry *,int, struct lookup_intent *);
-       struct dentry * (*lookup) (struct inode *,struct dentry *);
-+      int (*lookup_raw) (struct inode *, const char *, int, ino_t *);
-       struct dentry * (*lookup_it) (struct inode *,struct dentry *, struct lookup_intent *, int flags);
-       int (*link) (struct dentry *,struct inode *,struct dentry *);
-       int (*link_raw) (struct nameidata *,struct nameidata *);
---- linux-2.4.18-p4smp1Guser/fs/ext3/namei.c~ext3-raw-lookup   Thu Sep 25 15:59:59 2003
-+++ linux-2.4.18-p4smp1Guser-pschwan/fs/ext3/namei.c   Thu Sep 25 16:16:48 2003
-@@ -1121,6 +1121,36 @@ static struct dentry *ext3_lookup(struct
-       return NULL;
- }
-+static int ext3_lookup_raw(struct inode *dir, const char *name,
-+                              int len, ino_t *data)
-+{
-+      struct ext3_dir_entry_2 *de;
-+      struct buffer_head *bh;
-+      struct dentry parent;
-+      struct dentry dentry;
-+      void *lock = NULL;
-+
-+      if (len > EXT3_NAME_LEN)
-+              return -ENAMETOOLONG;
-+
-+      parent.d_inode = dir;
-+      dentry.d_parent = &parent;
-+      dentry.d_name.name = name;
-+      dentry.d_name.len = len;
-+
-+      bh = ext3_find_entry(&dentry, &de, 0, &lock);
-+      if (bh) {
-+              unsigned long ino = le32_to_cpu(de->inode);
-+              ext3_unlock_htree(dir, lock);
-+              brelse (bh);
-+              if (data)
-+                      *data = ino;
-+              return 0; /* found name */
-+      }
-+
-+      return -ENOENT;
-+}
-+
- #define S_SHIFT 12
- static unsigned char ext3_type_by_mode[S_IFMT >> S_SHIFT] = {
-       [S_IFREG >> S_SHIFT]    EXT3_FT_REG_FILE,
-@@ -2623,6 +2653,7 @@ static inline void ext3_unlock_htree(str
- struct inode_operations ext3_dir_inode_operations = {
-       create:         ext3_create,            /* BKL held */
-       lookup:         ext3_lookup,            /* BKL held */
-+      lookup_raw:     ext3_lookup_raw,        /* BKL held */
-       link:           ext3_link,              /* BKL held */
-       unlink:         ext3_unlink,            /* BKL held */
-       symlink:        ext3_symlink,           /* BKL held */
-
-_
diff --git a/lustre/kernel_patches/patches/ext3-record-extents-ea.patch b/lustre/kernel_patches/patches/ext3-record-extents-ea.patch
deleted file mode 100644 (file)
index fa3554a..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-Index: linux-2.4.20-8/fs/ext3/super.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/super.c        2004-01-27 19:34:11.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/super.c     2004-01-28 05:57:51.000000000 +0800
-@@ -801,6 +801,8 @@
-                       set_opt (*mount_options, EXTENTS);
-               else if (!strcmp (this_char, "extdebug"))
-                       set_opt (*mount_options, EXTDEBUG);
-+              else if (!strcmp (this_char, "extents-ea"))
-+                      set_opt (*mount_options, EXTENTS_EA); 
-               else if (!strcmp (this_char, "grpid") ||
-                        !strcmp (this_char, "bsdgroups"))
-                       set_opt (*mount_options, GRPID);
-Index: linux-2.4.20-8/fs/ext3/ialloc.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/ialloc.c       2004-01-28 01:02:17.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/ialloc.c    2004-01-28 07:56:56.000000000 +0800
-@@ -18,6 +18,7 @@
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
- #include <linux/ext3_xattr.h>
-+#include <linux/ext3_extents.h>
- #include <linux/stat.h>
- #include <linux/string.h>
- #include <linux/locks.h>
-@@ -597,7 +598,7 @@
-               EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
-               ext3_extents_initialize_blockmap(handle, inode);
-       }
-- 
-+
-       err = ext3_mark_iloc_dirty(handle, inode, &iloc);
-       if (err) goto fail;
-  
-@@ -610,6 +611,12 @@
-               return ERR_PTR(-EDQUOT);
-       }
-       ext3_debug ("allocating inode %lu\n", inode->i_ino);
-+       
-+      if (test_opt(sb, EXTENTS_EA)) {
-+              EXT3_I(inode)->i_flags |= EXT3_EXTENTS_EA_FL;
-+              ext3_init_extents_tree_in_ea(handle, inode);
-+      }
-+
-       return inode;
- fail:
-Index: linux-2.4.20-8/fs/ext3/extents-in-ea.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/extents-in-ea.c        2004-01-27 20:21:43.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/extents-in-ea.c     2004-01-28 06:05:26.000000000 +0800
-@@ -30,6 +30,8 @@
- #include <linux/slab.h>
- #include <asm/uaccess.h>
-+#define EXTENTS_EA "sparse_extents"
-+#define EXTENTS_EA_SIZE 64
- static int ext3_get_ea_write_access(handle_t *handle, void *buffer)
- {
-       struct buffer_head *bh = (struct buffer_head *) buffer;
-@@ -81,6 +83,7 @@
-       brelse(bh);
- }
-+
- int ext3_init_tree_in_ea(struct inode *inode, int name_index,
-                               const char *eaname, int size)
- {
-@@ -242,7 +245,23 @@
-               buf->leaf_num++;
-       return EXT_CONTINUE;
- }
--
-+int ext3_init_extents_tree_in_ea(handle_t *handle, struct inode *inode)
-+{
-+      return ext3_init_tree_in_ea(inode, EXT3_XATTR_INDEX_EXTENTS,
-+                                  EXTENTS_EA,  EXTENTS_EA_SIZE);      
-+}  
-+int ext3_insert_extents_in_ea(handle_t *handle, struct inode *inode,
-+                             unsigned long from, unsigned long num)
-+{
-+      return ext3_ext_in_ea_alloc_space(inode, EXT3_XATTR_INDEX_EXTENTS,
-+                                        EXTENTS_EA, from, num);       
-+}
-+int ext3_remove_extents_in_ea(handle_t *handle, struct inode *inode,
-+                             unsigned long from, unsigned long num)
-+{
-+      return ext3_ext_in_ea_remove_space(inode, EXT3_XATTR_INDEX_EXTENTS,
-+                                         EXTENTS_EA, from, num);      
-+}
- struct ea_tree_desc {
-       int name_index;
-       char eaname[256];
-Index: linux-2.4.20-8/fs/ext3/inode.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/inode.c        2004-01-27 19:34:11.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/inode.c     2004-01-28 06:03:46.000000000 +0800
-@@ -32,7 +32,7 @@
- #include <linux/quotaops.h>
- #include <linux/module.h>
- #include "iopen.h"
--
-+#include <linux/ext3_extents.h>
- /*
-  * SEARCH_FROM_ZERO forces each block allocation to search from the start
-  * of the filesystem.  This is to force rapid reallocation of recently-freed
-@@ -852,9 +852,18 @@
- ext3_get_block_wrap(handle_t *handle, struct inode *inode, long block,
-               struct buffer_head *bh, int create)
- {
-+      int rc1 = 0, rc2 = 0;
-+
-       if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
--              return ext3_ext_get_block(handle, inode, block, bh, create);
--      return ext3_get_block_handle(handle, inode, block, bh, create);
-+              rc1 =  ext3_ext_get_block(handle, inode, block, bh, create);
-+      rc1 = ext3_get_block_handle(handle, inode, block, bh, create);
-+      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_EA_FL) {
-+              if (create)
-+                      rc2 = ext3_insert_extents_in_ea(handle, inode, block, 1);       
-+      }
-+      if (!rc1)
-+              return rc2;
-+      return rc1; 
- }
- /*
-@@ -1897,6 +1906,11 @@
-       ext3_discard_prealloc(inode);
-+      if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_EA_FL) {
-+              last_block = (inode->i_size + inode->i_sb->s_blocksize - 1)
-+                              >> EXT3_BLOCK_SIZE_BITS(inode->i_sb);
-+              ext3_remove_extents_in_ea(NULL, inode, last_block, 0xffffffff);         
-+      }
-       if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
-               return ext3_ext_truncate(inode);
-Index: linux-2.4.20-8/include/linux/ext3_fs.h
-===================================================================
---- linux-2.4.20-8.orig/include/linux/ext3_fs.h        2004-01-27 20:21:43.000000000 +0800
-+++ linux-2.4.20-8/include/linux/ext3_fs.h     2004-01-28 05:57:51.000000000 +0800
-@@ -185,6 +185,7 @@
- #define EXT3_JOURNAL_DATA_FL          0x00004000 /* file data should be journaled */
- #define EXT3_RESERVED_FL              0x80000000 /* reserved for ext3 lib */
- #define EXT3_EXTENTS_FL                       0x00080000 /* Inode uses extents */
-+#define EXT3_EXTENTS_EA_FL            0x00100000 /* Inode uses extents */
- #define EXT3_FL_USER_VISIBLE          0x00005FFF /* User visible flags */
- #define EXT3_FL_USER_MODIFIABLE               0x000000FF /* User modifiable flags */
-@@ -341,6 +342,7 @@
- #define EXT3_MOUNT_ASYNCDEL           0x20000 /* Delayed deletion */
- #define EXT3_MOUNT_EXTENTS            0x100000/* Extents support */
- #define EXT3_MOUNT_EXTDEBUG           0x200000/* Extents debug */
-+#define EXT3_MOUNT_EXTENTS_EA         0x400000/* record sparse Extents */
- /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
- #ifndef _LINUX_EXT2_FS_H
-Index: linux-2.4.20-8/include/linux/ext3_xattr.h
-===================================================================
---- linux-2.4.20-8.orig/include/linux/ext3_xattr.h     2004-01-27 20:21:42.000000000 +0800
-+++ linux-2.4.20-8/include/linux/ext3_xattr.h  2004-01-28 05:57:51.000000000 +0800
-@@ -24,6 +24,7 @@
- #define EXT3_XATTR_INDEX_TRUSTED              4
- #define EXT3_XATTR_INDEX_LUSTRE                       5
- #define EXT3_XATTR_INDEX_SECURITY             6
-+#define EXT3_XATTR_INDEX_EXTENTS              7       
- struct ext3_xattr_header {
-       __u32   h_magic;        /* magic number for identification */
-Index: linux-2.4.20-8/include/linux/ext3_extents.h
-===================================================================
---- linux-2.4.20-8.orig/include/linux/ext3_extents.h   2004-01-28 05:56:02.000000000 +0800
-+++ linux-2.4.20-8/include/linux/ext3_extents.h        2004-01-28 06:46:15.000000000 +0800
-@@ -209,5 +209,7 @@
- extern struct ext3_ext_path * ext3_ext_find_extent(struct ext3_extents_tree *, int, struct ext3_ext_path *);
- extern int ext3_insert_extents_in_ea(handle_t *handle, struct inode *inode, unsigned long from, unsigned long num);
-+extern int ext3_remove_extents_in_ea(handle_t *handle, struct inode *inode, unsigned long from, unsigned long num);
-+extern int ext3_init_extents_tree_in_ea(handle_t *handle, struct inode *inode);
- #endif /* _LINUX_EXT3_EXTENTS */
diff --git a/lustre/kernel_patches/patches/ext3-snapfs-2.4.20.patch b/lustre/kernel_patches/patches/ext3-snapfs-2.4.20.patch
deleted file mode 100644 (file)
index 0caf034..0000000
+++ /dev/null
@@ -1,3069 +0,0 @@
-%patch
-Index: linux-2.4.20-8/fs/ext3/snap.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/snap.c 2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/snap.c      2004-01-27 23:59:48.000000000 +0800
-@@ -0,0 +1,2578 @@
-+/* fs/ext3/snap.c
-+ *
-+ * Copyright (c) 2002 Cluster File Systems, Inc. <info@clusterfs.com>
-+ * started by Andreas Dilger <adilger@turbolinux.com>
-+ *            Peter Braam <braam@mountainviewdata.com>
-+ *            Harrison Xing <harrisonx@mountainviewdata.com>
-+ *          Eric Mei    <Ericm@clusterfs.com>
-+ * 
-+ * port to 2.4 by Wang Di  <wangdi@clusterfs.com>
-+ *                Eric Mei <ericm@clusterfs.com>
-+ * 
-+ * Functions for implementing snapshots in the ext3 filesystem.  They are
-+ * intended to hide the internals of the filesystem from the caller in
-+ * such a way that the caller doesn't need to know about inode numbers,
-+ * how the redirectors are implemented or stored, etc.  It may not do that
-+ * all yet, but it tries.
-+ *
-+ * The snapshot inode redirection is stored in the primary/direct inode as
-+ * an extended attribute $snap, in the form of little-endian u32 inode
-+ * numbers. 
-+ *   
-+ */
-+ 
-+#define EXPORT_SYMTAB
-+#include <linux/module.h>
-+
-+#include <linux/sched.h>
-+#include <linux/jbd.h>
-+#include <linux/mm.h>
-+#include <linux/slab.h>
-+#include <linux/locks.h>
-+#include <linux/snap.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
-+
-+#define EXT3_SNAP_ATTR "@snap"
-+#define EXT3_SNAP_GENERATION_ATTR "@snap_generation"
-+#define EXT3_MAX_SNAPS 20
-+#define EXT3_MAX_SNAP_DATA (sizeof(struct snap_ea))
-+#define EXT3_SNAP_INDEX EXT3_XATTR_INDEX_LUSTRE
-+
-+#define EXT3_SNAP_DEBUG
-+#ifdef EXT3_SNAP_DEBUG
-+       #define snap_debug(f, a...)                             \
-+       do {                                                    \
-+               printk (KERN_INFO "SNAP DEBUG: (%s, %d): %s: ", \
-+                       __FILE__, __LINE__, __FUNCTION__);      \
-+               printk (f, ## a);                               \
-+       } while (0)
-+
-+       #define snap_err(f, a...)                               \
-+       do {                                                    \
-+               printk (KERN_ERR "SNAP ERROR: (%s, %d): %s: ",  \
-+                       __FILE__, __LINE__, __FUNCTION__);      \
-+               printk (f, ## a);                               \
-+       } while (0)
-+
-+#else
-+       #define snap_debug(f, a...)             do {} while (0)
-+       #define snap_err(f, a...)                               \
-+       do {                                                    \
-+               printk (KERN_ERR "SNAP ERROR: (%s, %d): ",      \
-+                       __FILE__, __LINE__);                    \
-+               printk (f, ## a);                               \
-+       } while (0)
-+
-+#endif
-+
-+#ifdef EXT3_SNAP_DEBUG
-+       #define ALLOC(ptr, cast, size)                                  \
-+       do {                                                            \
-+               ptr = (cast)kmalloc((size_t) size, GFP_KERNEL);         \
-+               if (ptr == 0) {                                         \
-+                       printk(KERN_ERR "kmalloc returns 0 at %s:%d\n", \
-+                              __FILE__, __LINE__);                     \
-+               } else {                                                \
-+                       snap_kmem += size;                              \
-+                       printk(KERN_INFO "snap_alloc %d, kmem %ld\n",   \
-+                               (size_t)size, snap_kmem);               \
-+               }                                                       \
-+       } while (0)
-+
-+       #define FREE(ptr,size)                                          \
-+       do {                                                            \
-+               kfree((ptr));                                           \
-+               snap_kmem -= size;                                      \
-+               printk(KERN_INFO "snap_free %d, kmem %ld\n",            \
-+                       (size_t)size, snap_kmem);                       \
-+       } while (0)
-+
-+#else
-+       #define ALLOC(ptr, cast, size)                                  \
-+       do {                                                            \
-+               ptr = (cast)kmalloc((size_t) size, GFP_KERNEL);         \
-+       } while (0)
-+
-+       #define FREE(ptr,size)                                          \
-+       do {                                                            \
-+               kfree((ptr));                                           \
-+       } while (0)
-+
-+#endif /* EXT3_SNAP_DEBUG */
-+
-+#ifdef EXT3_SNAP_DEBUG
-+       /* modestr: convert inode mode to string . debug function */
-+       static char * modestr ( umode_t mode )
-+       {
-+               if( S_ISREG(mode) )
-+                       return "file";
-+               else if(S_ISDIR(mode))
-+                       return "dir";
-+               else if(S_ISLNK(mode))
-+                       return "link";
-+               else if(S_ISCHR(mode))
-+                       return "char";
-+               else if(S_ISBLK(mode))
-+                       return "block";
-+               else if(S_ISFIFO(mode))
-+                       return "fifo";
-+               else if(S_ISSOCK(mode))
-+                       return "sock";
-+               else
-+                       return "non-known";
-+       }
-+#define DEBUG_INODE(inode)                                      \
-+       if(inode && !IS_ERR(inode)) {                                                   \
-+               snap_debug("%s ino %lu, i_nlink %u, i_count %d, i_mode %u, i_size %lld, i_blocks %lu\n", \
-+               modestr(inode->i_mode), inode->i_ino, inode->i_nlink,       \
-+               atomic_read(&inode->i_count), inode->i_mode, inode->i_size, \
-+               inode->i_blocks); }
-+#else
-+       #define modestr(mode)           do {} while (0)
-+       #define DEBUG_INODE(inode)      
-+
-+#endif /* EXT3_SNAP_DEBUG */
-+/* do file cow on: dir, symlink, regular but fs has filecow flag */
-+
-+#define IS_FILECOW_TYPE(inode)         \
-+       (S_ISDIR(inode->i_mode) ||      \
-+        S_ISLNK(inode->i_mode) ||      \
-+        (S_ISREG(inode->i_mode) &&     \
-+        !SNAP_HAS_COMPAT_FEATURE(inode->i_sb, SNAP_FEATURE_COMPAT_BLOCKCOW)))
-+
-+#define SNAP_ERROR(err)  ((err) < 0 ? (err) : (-(err)))
-+/* SNAP_ERROR(err): Make sure we return negative errors for Linux ( return positive errors) */
-+
-+#ifdef DEBUG
-+#ifdef __KERNEL__
-+# ifdef  __ia64__
-+#  define CDEBUG_STACK (THREAD_SIZE -                                      \
-+                        ((unsigned long)__builtin_dwarf_cfa() &            \
-+                         (THREAD_SIZE - 1)))
-+# else
-+#  define CDEBUG_STACK (THREAD_SIZE -                                      \
-+                        ((unsigned long)__builtin_frame_address(0) &       \
-+                         (THREAD_SIZE - 1)))
-+# endif
-+
-+#define snap_debug_msg(file, fn, line, stack, format, a...)                \
-+    printf("(%s:%s,l. %d %d %lu): " format, file, fn, line,                  \
-+           getpid() , stack, ## a);
-+#endif
-+
-+#define CDEBUG(mask, format, a...)                                            \
-+do {                                                                          \
-+        CHECK_STACK(CDEBUG_STACK);                                            \
-+        if (!(mask) || ((mask) & (D_ERROR | D_EMERG)))                       \
-+                snap_debug_msg(__FILE__, __FUNCTION__, __LINE__,           \
-+                               CDEBUG_STACK, format, ## a);                \
-+} while (0)
-+
-+#define CWARN (format, a...) CDEBUG(D_WARNING, format, ## a)
-+#define CERROR(format, a...) CDEBUG(D_ERROR, format, ## a)
-+#define CEMERG(format, a...) CDEBUG(D_EMERG, format, ## a)
-+
-+#define RETURN(rc)                                                      \
-+do {                                                                    \
-+        typeof(rc) RETURN__ret = (rc);                                  \
-+        CDEBUG(D_TRACE, "Process leaving (rc=%lu : %ld : %lx)\n",       \
-+               (long)RETURN__ret, (long)RETURN__ret, (long)RETURN__ret);\
-+        return RETURN__ret;                                             \
-+} while (0)
-+
-+#define ENTRY                                                           \
-+do {                                                                    \
-+        CDEBUG(D_TRACE, "Process entered\n");                           \
-+} while (0)
-+
-+#define EXIT                                                            \
-+do {                                                                    \
-+        CDEBUG(D_TRACE, "Process leaving\n");                           \
-+} while(0)
-+#else
-+#define CDEBUG(mask, format, a...)      do { } while (0)
-+#define CWARN(format, a...)             do { } while (0)
-+#define CERROR(format, a...)            printk("<3>" format, ## a)
-+#define CEMERG(format, a...)            printk("<0>" format, ## a)
-+#define GOTO(label, rc)                 do { (void)(rc); goto label; } while (0)
-+#define RETURN(rc)                      return (rc)
-+#define ENTRY                           do { } while (0)
-+#define EXIT                            do { } while (0)
-+#endif /*DEBUG*/
-+
-+#define SNAP_ATTR_BUF_CNT 10
-+
-+#define SB_LAST_COWED_INO(sb)  (EXT3_SB(sb)->s_es->s_last_cowed_pri_ino) 
-+#define SB_FIRST_COWED_INO(sb) (EXT3_SB(sb)->s_es->s_first_cowed_pri_ino)
-+#define SB_SNAPTABLE_INO(sb)   (EXT3_SB(sb)->s_es->s_snaptable_ino)
-+#define SB_SNAP_LIST_SEM(sb)   (EXT3_SB(sb)->s_snap_list_sem)
-+#define SB_FEATURE_COMPAT(sb)  (EXT3_SB(sb)->s_es->s_feature_compat)
-+
-+#define       SNAP_HAS_COMPAT_FEATURE(sb,mask)        \
-+      (SB_FEATURE_COMPAT(sb) & cpu_to_le32(mask))
-+
-+/* NOTE: these macros are close dependant on the structure of snap ea */
-+#define SNAP_CNT_FROM_SIZE(size)       ((((size)-sizeof(ino_t)*2)/2)/sizeof(ino_t))
-+#define SNAP_EA_SIZE_FROM_INDEX(index) (sizeof(ino_t)*2 + 2*sizeof(ino_t)*((index)+1))
-+
-+#define SNAP_EA_INO_BLOCK_SIZE(size)   (((size)-sizeof(ino_t)*2)/2)
-+#define SNAP_EA_PARENT_OFFSET(size)    (sizeof(ino_t)*2 + SNAP_EA_INO_BLOCK_SIZE((size)))
-+/*SET FLAGS*/
-+extern int ext3_bmap(struct address_space *mapping, long block);
-+extern int ext3_load_inode_bitmap (struct super_block * sb, unsigned int block_group);
-+extern int ext3_block_truncate_page(handle_t *handle, struct address_space *mapping, 
-+                                  loff_t from);
-+/* helper functions to manipulate field 'parent' in snap_ea */
-+static inline int
-+set_parent_ino(struct snap_ea *pea, int size, int index, ino_t val)
-+{
-+       char * p = (char*) pea;
-+       int offset;
-+
-+       offset = sizeof(ino_t)*2 + (size - sizeof(ino_t)*2)/2;
-+       offset += sizeof(ino_t) * index;
-+       *(ino_t*)(p+offset) = val;
-+
-+       return 0;
-+}
-+/* ext3_iterate_cowed_inode:
-+ *    iterate all the cowed inode with the same index and 
-+ *  run the associate function @repeat
-+ *
-+ *  For @repeat, if it returns non-zero value, it will exit the iterator
-+ *
-+ *  return value:     0 or positive:  success
-+ *                    negative:       failure
-+ *  additional: if the return value is positive, it must be the return value
-+ *            of function @repeat.
-+ */
-+
-+static int ext3_iterate_cowed_inode(
-+              struct super_block *sb,
-+              int (*repeat)(struct inode *inode, void *priv),
-+              struct inode **start,
-+              void *priv)
-+{     
-+      struct inode *list_inode = NULL;
-+      char buf[EXT3_MAX_SNAP_DATA];   
-+      struct snap_ea *snaps;
-+      int  err = 0;
-+
-+      if (SB_FIRST_COWED_INO(sb) == 0) {
-+              snap_debug("no cowed inode in the list\n"); 
-+              return 0;
-+      }
-+
-+      /* get head inode in the list */
-+      if (start != NULL && *start != NULL && (*start)->i_ino)
-+              list_inode = iget(sb, (*start)->i_ino);
-+      else
-+              list_inode = iget (sb, le32_to_cpu( SB_FIRST_COWED_INO(sb) ));
-+
-+      /* loop for all inode in list */
-+      while (list_inode) {
-+              if (!list_inode->i_nlink || is_bad_inode(list_inode)) {
-+                      snap_err("inode %p, ino %lu, mode %o, nlink %d\n",
-+                                      list_inode,
-+                                      list_inode->i_ino,
-+                                      list_inode->i_mode,
-+                                      list_inode->i_nlink);
-+                      err = -EIO;
-+                      goto err_iput;
-+              }
-+
-+              err = ext3_xattr_get(list_inode, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                                      buf, EXT3_MAX_SNAP_DATA);
-+              if (err < 0 || err > EXT3_MAX_SNAP_DATA) {
-+                      snap_err("inode %lu, error %d\n", list_inode->i_ino, err);
-+                      goto err_iput;
-+              }
-+
-+              if ((err = (*repeat)(list_inode, priv)) != 0)
-+                      goto err_iput;
-+
-+              iput (list_inode);
-+
-+              snaps = (struct snap_ea *) buf;
-+              if (le32_to_cpu (snaps->next_ino) != 0) {
-+                      list_inode = iget(sb, le32_to_cpu(snaps->next_ino));
-+              }
-+              else {
-+                      snap_debug ("cowed inode list end, exit\n");
-+                      goto err_free;
-+              }
-+      }
-+err_iput:
-+      if (list_inode) 
-+              iput(list_inode);
-+err_free:
-+      return err; 
-+}
-+static int get_cowed_ino(struct inode *pri, void *param)
-+{
-+      ino_t *find = param;
-+        (*find) = pri->i_ino;
-+        return 0;
-+}
-+
-+/* Return 0 for error. */
-+static int get_cowed_ino_end (struct inode *inode)
-+{
-+        int rc;
-+        ino_t ino = 0;
-+
-+        rc = ext3_iterate_cowed_inode(inode->i_sb, &get_cowed_ino, &inode, &ino);
-+
-+      if (rc < 0)
-+                return 0;
-+        else
-+                return ino;
-+}
-+
-+/* find the end of the primary inode, iterate if needed
-+ * return 0 if any error found */
-+static inline ino_t find_last_cowed_ino(struct super_block *sb)
-+{
-+      struct inode *inode = NULL;
-+      ino_t first, last = 0;
-+
-+        last = le32_to_cpu(SB_LAST_COWED_INO(sb));
-+      if (last)
-+              return last;
-+
-+      first = le32_to_cpu(SB_FIRST_COWED_INO(sb));
-+
-+      if (!first) {
-+              snap_err("first cowed inode is NULL\n");
-+              goto exit;
-+      }
-+
-+      inode = iget(sb, first);
-+      if (inode) {
-+              if (is_bad_inode(inode)) {
-+                      snap_err("bad inode %lu\n", first);
-+                      goto exit;
-+              }
-+
-+              last = get_cowed_ino_end(inode);
-+      }
-+exit:
-+      if (inode)
-+              iput(inode);
-+      return last;
-+}
-+
-+/* Insert the primary inode to the cowed inode list 
-+ * Append it to the list end
-+ * 
-+ * @pri: inode to insert
-+ * @buf_pri: the valid ea buf for @pri inode ( excluding the next_ino field) , 
-+ * it's used to write the ea for @pri inode
-+ * 
-+ * To avoid list broken in abnormal case, it will first write the ea for @pri
-+ * inode, and then write ea for the list end inode. Thus list broken is 
-+ * avoid even if there are errors when writting ea.   
-+ */
-+static int insert_cowed_ino_to_list (handle_t *handle, struct inode *pri, char *buf_pri)
-+{
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      struct snap_ea *snaps;
-+      struct snap_ea *snaps_pri;
-+      struct inode *last_inode = NULL;
-+      struct ext3_sb_info *sbi = EXT3_SB(pri->i_sb);
-+      int err = 0; 
-+      
-+      snaps_pri = (struct snap_ea *)buf_pri;
-+
-+      if (!SB_FIRST_COWED_INO(pri->i_sb)) {
-+              /* we set the next_ino and write ea for pri inode */
-+              snaps_pri->next_ino = cpu_to_le32(0);
-+              snaps_pri->prev_ino = cpu_to_le32(0);
-+
-+              err = ext3_xattr_set(handle, pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                         buf_pri, EXT3_MAX_SNAP_DATA, 0);
-+              if (err < 0) {
-+                      snap_err("ino %lu, set_ext_attr err %d\n", pri->i_ino, err);
-+                      return err;
-+              }
-+              lock_super(pri->i_sb);
-+              ext3_journal_get_write_access(handle, sbi->s_sbh);
-+              sbi->s_es->s_first_cowed_pri_ino = cpu_to_le32(pri->i_ino);
-+              SB_FIRST_COWED_INO(pri->i_sb) = cpu_to_le32(pri->i_ino);
-+              pri->i_sb->s_dirt = 1;
-+              ext3_journal_dirty_metadata(handle, sbi->s_sbh);
-+              unlock_super(pri->i_sb);
-+              EXT3_I(pri)->i_flags |= EXT3_SNAP_PRI_FLAG; 
-+              return err;
-+      }
-+
-+      if (!SB_LAST_COWED_INO(pri->i_sb)){
-+              SB_LAST_COWED_INO(pri->i_sb) = find_last_cowed_ino(pri->i_sb);
-+              if (!SB_LAST_COWED_INO(pri->i_sb) ){
-+                      snap_err("error, last cowed inode is NULL\n");
-+                      return (-EINVAL);
-+              }
-+      }
-+        
-+      last_inode = iget(pri->i_sb, SB_LAST_COWED_INO(pri->i_sb));
-+      if (!last_inode || is_bad_inode(last_inode)) {
-+              iput(last_inode);
-+              return -EINVAL;
-+      }
-+      err = ext3_xattr_get(last_inode, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                             buf, EXT3_MAX_SNAP_DATA);
-+        if (err == -ENODATA) {
-+               snap_debug("no existing attributes - zeroing\n");
-+               memset(buf, 0, EXT3_MAX_SNAP_DATA);
-+        } else if (err < 0 || err > EXT3_MAX_SNAP_DATA) {
-+               snap_debug("got err %d when reading attributes\n", err);
-+             goto exit;
-+      }
-+      /*set primary inode EA*/
-+      snaps_pri->next_ino = 0;
-+        snaps_pri->prev_ino = cpu_to_le32(last_inode->i_ino);
-+
-+      err = ext3_xattr_set(handle, pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                     buf_pri, EXT3_MAX_SNAP_DATA, 0);
-+      if (err < 0) {
-+                snap_debug("set attributes error for inode %lu\n",
-+                              (ulong)pri->i_ino);
-+              goto exit;
-+      }
-+
-+      /*set last inode EA*/
-+      snaps = (struct snap_ea *) buf;
-+      snaps->next_ino = cpu_to_le32(pri->i_ino);
-+        err = ext3_xattr_set(handle, last_inode, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                            buf, EXT3_MAX_SNAP_DATA, 0);
-+        if(err < 0){
-+                snap_debug("set attributes error for inode %lu\n",
-+                              (ulong)last_inode->i_ino);
-+              goto exit;
-+      }
-+      
-+      EXT3_I(pri)->i_flags |= EXT3_SNAP_PRI_FLAG; 
-+       
-+      /* we update the new cowed ino list end in memory */ 
-+      SB_LAST_COWED_INO(pri->i_sb) = cpu_to_le32(pri->i_ino);
-+        snap_debug("cowed_inode_list_end %lu, append ino=%lu\n",
-+                  last_inode->i_ino, pri->i_ino);
-+exit:
-+      if (last_inode)
-+              iput(last_inode);
-+
-+      return err;
-+}
-+
-+/* delelte the ino from cowed inode list */
-+static int delete_cowed_ino_from_list (handle_t *handle, struct inode *inode)
-+{
-+      ino_t prev_ino = 0, next_ino = 0;
-+      struct inode *prev_inode = NULL;
-+      struct inode *next_inode = NULL;
-+      struct snap_ea *snaps;
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      int err = 0;
-+
-+      err = ext3_xattr_get(inode, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                          buf, EXT3_MAX_SNAP_DATA);
-+      if (err < 0 || err > EXT3_MAX_SNAP_DATA) {
-+              snap_err("get attr inode %lu, error %d\n", inode->i_ino, err);
-+              goto err_exit;
-+      }
-+
-+      snaps = (struct snap_ea *) buf;
-+      next_ino = le32_to_cpu(snaps->next_ino);
-+        prev_ino = le32_to_cpu(snaps->prev_ino);
-+
-+      /* if this is the first cowed ino */
-+      if (inode->i_ino == le32_to_cpu(SB_FIRST_COWED_INO(inode->i_sb))) {
-+              SB_FIRST_COWED_INO(inode->i_sb) = cpu_to_le32(next_ino); 
-+              EXT3_I(inode)->i_flags &= ~EXT3_SNAP_PRI_FLAG;
-+              if (next_ino == 0)      
-+                        SB_LAST_COWED_INO(inode->i_sb) = 0;
-+      } else {
-+              if (!prev_ino)  
-+                      goto err_exit;
-+
-+              /* find previous inode and read its ea */
-+              prev_inode = iget(inode->i_sb, prev_ino);
-+                if (!prev_inode || is_bad_inode(prev_inode)) 
-+                        goto err_exit;
-+                            
-+              err = ext3_xattr_get(prev_inode, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                                 buf, EXT3_MAX_SNAP_DATA);
-+              if (err < 0 || err > EXT3_MAX_SNAP_DATA) {
-+                      snap_err("get attr inode %lu, error %d\n", prev_inode->i_ino, err);
-+                      goto err_exit;
-+              }
-+              
-+              /* make the previous inode point to the next inode,
-+               * but ignore errors because at current version we
-+               * didn't use the previous pionter */
-+              snaps = (struct snap_ea *) buf;
-+              snaps->next_ino = cpu_to_le32(next_ino);
-+
-+              snap_debug("delete ino %lu from list\n", inode->i_ino);
-+
-+              err = ext3_xattr_set(handle, prev_inode, EXT3_SNAP_INDEX, 
-+                                   EXT3_SNAP_ATTR, buf, EXT3_MAX_SNAP_DATA, 0);
-+              if (err < 0) {
-+                      snap_err("err %d setting ea for ino %lu\n", err, prev_inode->i_ino);
-+                      goto err_exit;
-+              }
-+
-+                if (next_ino == 0) {
-+                        SB_LAST_COWED_INO(inode->i_sb) = prev_ino;
-+                        goto err_exit;
-+                }
-+
-+              /* make the next inode point to the previous one */
-+              next_inode = iget(inode->i_sb, next_ino);
-+                if (!next_inode || is_bad_inode(next_inode))       
-+                        goto err_exit;
-+
-+              err = ext3_xattr_get(next_inode, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                                 buf, EXT3_MAX_SNAP_DATA);
-+              if (err < 0 || err > EXT3_MAX_SNAP_DATA) {
-+                      snap_err("set attr inode %lu, error %d\n", next_inode->i_ino, err);
-+                      goto err_exit;
-+              }
-+              snaps = ( struct snap_ea *) buf;
-+              snaps->prev_ino = cpu_to_le32(prev_ino);
-+
-+              err = ext3_xattr_set(handle, next_inode, EXT3_SNAP_INDEX, 
-+                                      EXT3_SNAP_ATTR, buf, EXT3_MAX_SNAP_DATA, 0);
-+              if (err < 0) {
-+                      snap_err("err %d setting attributes for ino %lu\n",
-+                                    err, next_inode->i_ino);
-+              }
-+      }
-+err_exit:
-+      iput(prev_inode);
-+      iput(next_inode);
-+      return err;
-+}
-+
-+static inline void lock_list(struct super_block *sb)
-+{
-+      down(&SB_SNAP_LIST_SEM(sb));
-+}
-+
-+static inline void unlock_list(struct super_block *sb)
-+{
-+      up(&SB_SNAP_LIST_SEM(sb));
-+}
-+
-+static int ext3_snap_feature (struct super_block *sb, int feature, int op) {
-+
-+      int rc = -EINVAL;
-+      handle_t *handle;
-+      switch (op) {
-+              case SNAP_SET_FEATURE:
-+                      handle = ext3_journal_start(sb->s_root->d_inode, 1);
-+                      lock_super(sb);
-+                      ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-+                      SB_FEATURE_COMPAT(sb) |= cpu_to_le32(feature);
-+                      sb->s_dirt = 1;
-+                      ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-+                      unlock_super(sb);
-+                      ext3_journal_stop(handle, sb->s_root->d_inode); 
-+                      break;
-+              case SNAP_CLEAR_FEATURE:
-+                      handle = ext3_journal_start(sb->s_root->d_inode, 1);
-+                      lock_super(sb);
-+                      ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-+                      SB_FEATURE_COMPAT(sb) &= ~cpu_to_le32(feature); 
-+                      ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-+                      sb->s_dirt = 1;
-+                      unlock_super(sb);
-+                      ext3_journal_stop(handle, sb->s_root->d_inode); 
-+                      break;
-+              case SNAP_HAS_FEATURE:
-+                      /*FIXME should lock super or not*/
-+                      rc = SNAP_HAS_COMPAT_FEATURE(sb, feature);
-+                      break;
-+              default:
-+                      break;
-+      }
-+      return rc;
-+}
-+
-+#ifdef _DEVICE_FAIL_TEST
-+/*FIXME later*/
-+extern int loop_discard_io(kdev_t dev, long arg);
-+/*
-+ * modify failpos to let loop fail at certain point
-+ * let pos=0 mean no fail point
-+ */
-+static int failpos = 0;
-+#define loopfail(pos) \
-+      do{                                                                     \
-+              if( pos == failpos ){                                           \
-+                      int i;                                                  \
-+                      printk(KERN_EMERG "SNAP; hit fail point %d\n", failpos);\
-+                      for( i=0; i<15; i++ )                                   \
-+                              loop_discard_io( MKDEV(7,i), 1 );               \
-+              }                                                               \
-+      }while(0)
-+#else
-+#define loopfail(pos) do{}while(0)
-+#endif
-+
-+/* Save the indirect inode in the snapshot table of the primary inode. */
-+static int ext3_set_indirect(struct inode *pri, int index, ino_t ind_ino, ino_t parent_ino )
-+{
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      struct snap_ea *snaps;
-+      int err = 0, inlist = 1;
-+      int ea_size;
-+      handle_t *handle = NULL;
-+      
-+      snap_debug("(ino %lu, parent %lu): saving ind %lu to index %d\n", 
-+                      pri->i_ino, parent_ino, ind_ino, index);
-+
-+      if (index < 0 || index > MAX_SNAPS || !pri)
-+              return -EINVAL;
-+      /* need lock the list before get_attr() to avoid race */
-+      lock_list(pri->i_sb);
-+      /* read ea at first */
-+      err = ext3_xattr_get(pri, EXT3_SNAP_INDEX ,EXT3_SNAP_ATTR,
-+                                        buf, EXT3_MAX_SNAP_DATA);
-+      if (err == -ENODATA || err == -ENOATTR) {
-+              snap_debug("no extended attributes - zeroing\n");
-+              memset(buf, 0, EXT3_MAX_SNAP_DATA);
-+              /* XXX
-+               * To judge a inode in list, we only see if it has snap ea.
-+               * So take care of snap ea of primary inodes very carefully.
-+               * Is it right in snapfs EXT3, check it later?
-+               */
-+              inlist = 0; 
-+      } else if (err < 0 || err > EXT3_MAX_SNAP_DATA) {
-+              goto out_unlock;
-+      }
-+      
-+      handle = ext3_journal_start(pri, SNAP_SETIND_TRANS_BLOCKS);
-+      if(!handle) {
-+              err = PTR_ERR(handle);
-+              goto out_unlock;
-+      }
-+      
-+      snaps = (struct snap_ea *)buf;
-+      snaps->ino[index] = cpu_to_le32 (ind_ino);
-+      ea_size = EXT3_MAX_SNAP_DATA;
-+
-+      set_parent_ino(snaps, ea_size, index, cpu_to_le32(parent_ino));
-+
-+      snap_debug("saving attributes\n");
-+
-+      if (inlist) {
-+              err = ext3_xattr_set(handle, pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                   buf, EXT3_MAX_SNAP_DATA, 0);
-+      }
-+      else {
-+              /* This will also write the ea for the pri inode, like above */
-+              err = insert_cowed_ino_to_list(handle, pri, buf);
-+      }
-+      ext3_mark_inode_dirty(handle, pri);
-+      ext3_journal_stop(handle, pri);
-+out_unlock:
-+      unlock_list(pri->i_sb);
-+      return err;
-+}
-+
-+/*
-+ * is_redirector - determines if a primary inode is a redirector
-+ * @inode: primary inode to test
-+ *
-+ * Returns 1 if the inode is a redirector, 0 otherwise.
-+ */
-+static int is_redirector(struct inode *inode)
-+{
-+      int is_redirector = 0;
-+      int rc;
-+
-+      rc = ext3_xattr_get(inode, EXT3_SNAP_INDEX ,EXT3_SNAP_ATTR,
-+                                        NULL, 0);
-+        if (rc > 0 && rc <= MAX_SNAP_DATA)
-+                is_redirector = 1;
-+        snap_debug("inode %lu %s redirector\n", inode->i_ino, 
-+                      is_redirector ? "is" : "isn't");
-+        return is_redirector;
-+}
-+
-+/*if it's indirect inode or not */
-+static int is_indirect(struct inode *inode)
-+{
-+      if (EXT3_I(inode)->i_flags |= EXT3_COW_FL)
-+              return 1;
-+      else
-+              return 0;
-+}
-+/*
-+ * Copy inode metadata from one inode to another, excluding blocks and size.
-+ * FIXME do we copy EA data - ACLs and such (excluding snapshot data)?
-+ */
-+static void ext3_copy_meta(handle_t *handle, struct inode *dst, struct inode *src)
-+{
-+      int size;
-+      
-+      dst->i_mode = src->i_mode;
-+      dst->i_nlink = src->i_nlink;
-+      dst->i_uid = src->i_uid;
-+      dst->i_gid = src->i_gid;
-+      dst->i_atime = src->i_atime;
-+      dst->i_mtime = src->i_mtime;
-+      dst->i_ctime = src->i_ctime;
-+//    dst->i_version = src->i_version;
-+      dst->i_attr_flags = src->i_attr_flags;
-+      dst->i_generation = src->i_generation;
-+      dst->u.ext3_i.i_dtime = src->u.ext3_i.i_dtime;
-+      dst->u.ext3_i.i_flags = src->u.ext3_i.i_flags | EXT3_COW_FL;
-+#ifdef EXT3_FRAGMENTS
-+      dst->u.ext3_i.i_faddr = src->u.ext3_i.i_faddr;
-+      dst->u.ext3_i.i_frag_no = src->u.ext3_i.i_frag_no;
-+      dst->u.ext3_i.i_frag_size = src->u.ext3_i.i_frag_size;
-+#endif
-+      if ((size = ext3_xattr_list(src, NULL, 0)) > 0) {
-+              char names[size];
-+              char *name;
-+              int namelen;
-+
-+              if (ext3_xattr_list(src, names, 0) < 0)
-+                      return;
-+              /*
-+               * the list of attribute names are stored as NUL terminated
-+               * strings, with a double NUL string at the end.
-+               */
-+              name = names;
-+              while ((namelen = strlen(name))) {
-+                      int attrlen;
-+                      char *buf;
-+                      
-+                      /* don't copy snap data */
-+                      if (!strcmp(name, EXT3_SNAP_ATTR)) {
-+                              snap_debug("skipping %s item\n", name);
-+                              continue;
-+                      }
-+                      snap_debug("copying %s item\n", name);
-+                      attrlen = ext3_xattr_get(src, EXT3_SNAP_INDEX, 
-+                                                    EXT3_SNAP_ATTR, NULL, 0);
-+                      if (attrlen < 0)
-+                              continue;
-+                      if ((buf = kmalloc(attrlen, GFP_ATOMIC)) == NULL)
-+                              break;
-+                      if (ext3_xattr_get(src, EXT3_SNAP_INDEX,
-+                                              EXT3_SNAP_ATTR, buf, attrlen) < 0)
-+                              continue;       
-+                      if (ext3_xattr_set(handle, dst, EXT3_SNAP_INDEX,
-+                                              EXT3_SNAP_ATTR, buf, attrlen, 0) < 0)
-+                              break;
-+                      kfree(buf);
-+                      name += namelen + 1; /* skip name and trailing NUL */
-+              }
-+      }
-+}
-+
-+static inline int ext3_has_ea(struct inode *inode)
-+{
-+       return (EXT3_I(inode)->i_file_acl != 0);
-+}
-+/* XXX This function has a very bad effect to 
-+ * the performance of filesystem,
-+ * will find another way to fix it 
-+ */
-+static void fs_flushinval_pages(handle_t *handle, struct inode* inode)
-+{
-+      if (inode->i_blocks > 0 && inode->i_mapping) { 
-+              fsync_inode_data_buffers(inode);
-+       //     ext3_block_truncate_page(handle, inode->i_mapping, inode->i_size);
-+              truncate_inode_pages(inode->i_mapping, 0);
-+      }
-+}
-+
-+/* ext3_migrate_data2:
-+ *  MOVE all the data blocks from inode src to inode dst as well as
-+ *  COPY all attributes(meta data) from inode src to inode dst.
-+ *  For extended attributes(EA), we COPY all the EAs but skip the Snap EA from src to dst.
-+ *  If the dst has Snap EA, then we CAN'T overwrite it. We CAN'T copy the src Snap EA.
-+ *  XXX for EA, can we change it to MOVE all the EAs(exclude Snap EA) to dst and copy it back to src ?
-+ *  This is for LAN free backup later.
-+ */
-+
-+static int ext3_migrate_data (handle_t *handle, struct inode *dst, struct inode *src)
-+{
-+      unsigned long err = 0;
-+      /* 512 byte disk blocks per inode block */
-+      int bpib = src->i_sb->s_blocksize >> 9;
-+      
-+      if((!dst) || (!src)) 
-+              return -EINVAL;
-+      
-+      if (dst->i_ino == src->i_ino)
-+              return 0;
-+
-+      fs_flushinval_pages(handle, src);
-+      
-+      ext3_copy_meta(handle, dst, src);
-+
-+      snap_debug("migrating data blocks from %lu to %lu\n", src->i_ino, dst->i_ino);
-+      /* Can't check blocks in case of EAs */
-+       
-+      memcpy(EXT3_I(dst)->i_data, EXT3_I(src)->i_data,
-+                            sizeof(EXT3_I(src)->i_data));
-+              memset(EXT3_I(src)->i_data, 0, sizeof(EXT3_I(src)->i_data));
-+      
-+      ext3_discard_prealloc(src);
-+
-+      dst->i_size = EXT3_I(dst)->i_disksize = EXT3_I(src)->i_disksize;
-+        src->i_size = EXT3_I(src)->i_disksize = 0;
-+
-+      dst->i_blocks = src->i_blocks;
-+        src->i_blocks = 0;
-+        /*  Check EA blocks here to modify i_blocks correctly */
-+        if(ext3_has_ea (src)) {
-+              src->i_blocks += bpib;
-+              if( ! ext3_has_ea (dst) )
-+                      if( dst->i_blocks >= bpib )
-+                              dst->i_blocks -= bpib;
-+      } else {
-+              if( ext3_has_ea (dst))
-+                      dst->i_blocks += bpib;
-+      }
-+      
-+      snap_debug("migrate data from ino %lu to ino %lu\n", 
-+              src->i_ino, dst->i_ino);        
-+        ext3_mark_inode_dirty(handle, src);
-+        ext3_mark_inode_dirty(handle, dst);
-+
-+
-+      return SNAP_ERROR(err);
-+}
-+
-+/**
-+ * ext3_get_indirect - get a specific indirect inode from a primary inode
-+ * @primary: primary (direct) inode
-+ * @table: table of @slot + 1 indices in reverse chronological order
-+ * @slot: starting slot number to check for indirect inode number
-+ *
-+ * We locate an indirect inode from a primary inode using the redirection
-+ * table stored in the primary inode.  Because the desired inode may actually
-+ * be in a "newer" slot number than the supplied slot, we are given a table
-+ * of indices in chronological order to search for the correct inode number.
-+ * We walk table from @slot to 0 looking for a non-zero inode to load.
-+ *
-+ * To only load a specific index (and fail if it does not exist), you can
-+ * pass @table = NULL, and the index number in @slot.  If @slot == 0, the
-+ * primary inode data is returned.
-+ *
-+ * We return a pointer to an inode, or an error.  If the indirect inode for
-+ * the given index does not exist, NULL is returned.
-+ */
-+static struct inode *ext3_get_indirect(struct inode *primary, int *table,
-+                                     int slot)
-+{
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      struct snap_ea *snaps;
-+      ino_t ino;
-+      struct inode *inode = NULL;
-+      int err = 0, index = 0;
-+
-+      if (slot < 0 || slot > EXT3_MAX_SNAPS || !primary)
-+              return NULL;
-+        
-+      snap_debug("ino %lu, table %p, slot %d\n", primary->i_ino, table,slot);
-+      
-+      err = ext3_xattr_get(primary, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR, 
-+                              buf, EXT3_MAX_SNAP_DATA); 
-+      if (err == -ENODATA) {
-+              slot = 0;
-+      } else if (err < 0) {
-+              snap_debug(" attribute read error\n");
-+              return NULL;
-+      }
-+      snaps = (struct snap_ea *)buf;
-+
-+      /* if table is NULL and there is a slot */
-+      if( !table && slot ) {
-+              index = slot;
-+              ino = le32_to_cpu ( snaps->ino[index] );
-+              if(ino) inode = iget(primary->i_sb, ino);
-+              goto err_free;
-+      }
-+      /* if table is not NULL */
-+      while ( !inode && slot > 0) {
-+              index = table[slot];
-+              ino = le32_to_cpu ( snaps->ino[index] );
-+
-+              snap_debug("snap inode at slot %d is %lu\n", slot, ino);
-+              if (!ino) {
-+                      --slot;
-+                      continue;
-+              }
-+              inode = iget(primary->i_sb, ino);
-+              goto err_free;
-+      }
-+      if( slot == 0 && table ) {
-+              snap_debug("redirector not found, using primary\n");
-+              inode = iget(primary->i_sb, primary->i_ino);
-+      }
-+err_free:
-+      return inode;
-+}
-+
-+/* get the indirect ino at index of the primary inode 
-+ * return value:      postive:        indirect ino number
-+ *                    negative or 0:  error
-+ */
-+static ino_t ext3_get_indirect_ino(struct inode *primary, int index)
-+{
-+        char buf[EXT3_MAX_SNAP_DATA];
-+        struct snap_ea *snaps;
-+        ino_t ino = 0;
-+        int err;
-+
-+        if (index < 0 || index > EXT3_MAX_SNAPS || !primary)
-+                return 0;
-+
-+      err = ext3_xattr_get(primary, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR, 
-+                              buf, EXT3_MAX_SNAP_DATA); 
-+        if (err == -ENOATTR) {
-+                ino = -ENOATTR;
-+              goto err_free;
-+        } else if (err < 0) {
-+                snap_err(EXT3_SNAP_ATTR " attribute read error\n");
-+                ino = -EINVAL;
-+              goto err_free;
-+        }
-+
-+        snaps = (struct snap_ea *)buf;
-+        ino = le32_to_cpu (snaps->ino[index]);
-+        snap_debug("snap ino for %ld at index %d is %lu\n",
-+                       primary->i_ino, index, ino);
-+err_free:
-+        return ino;
-+}
-+/* ext3_copy_block - copy one data block from inode @src to @dst.
-+   No lock here.  User should do the lock.
-+   User should check the return value to see if the result is correct.
-+   Return value:
-+   1:    The block has been copied successfully
-+   0:    No block is copied, usually this is because src has no such blk
-+  -1:    Error
-+*/
-+
-+static int ext3_copy_block (struct inode *dst, struct inode *src, int blk) 
-+{
-+      struct buffer_head *bh_dst = NULL, *bh_src = NULL;
-+      int err = 0;
-+      handle_t *handle = NULL;
-+
-+      
-+      snap_debug("copy blk %d from %lu to %lu \n", blk, src->i_ino, dst->i_ino);
-+      /* 
-+       * ext3_getblk() require handle!=NULL
-+       */
-+      if (S_ISREG(src->i_mode))
-+              return 0;
-+
-+      handle = ext3_journal_start(dst, SNAP_COPYBLOCK_TRANS_BLOCKS);
-+      if( !handle )
-+              return -1;
-+
-+      bh_src = ext3_bread(handle, src, blk, 0, &err);
-+      if (!bh_src) {
-+              snap_err("error for src blk %d, error %d\n", blk, err);
-+              goto exit_relese;
-+      }
-+      bh_dst = ext3_getblk(handle, dst, blk, 1, &err);
-+      if (!bh_dst) {
-+              snap_err("error for dst blk %d, error %d\n", blk, err);
-+              err = -ENOSPC;
-+              goto exit_relese;
-+      }
-+      snap_debug("copy block %lu to %lu (%ld bytes)\n",
-+                 bh_src->b_blocknr, bh_dst->b_blocknr, 
-+                 src->i_sb->s_blocksize);
-+
-+      ext3_journal_get_write_access(handle, bh_dst);
-+
-+      memcpy(bh_dst->b_data, bh_src->b_data, src->i_sb->s_blocksize);
-+
-+      ext3_journal_dirty_metadata(handle, bh_dst);
-+      err = 1;
-+exit_relese:
-+      if (bh_src) brelse(bh_src);
-+      if (bh_dst) brelse(bh_dst);
-+      if (handle)     
-+              ext3_journal_stop(handle, dst);
-+      return err;
-+}
-+
-+#ifdef EXT3_ENABLE_SNAP_ORPHAN
-+/*
-+ * add one inode to superblock's snap_orphan chain
-+ * only add on-disk data for simplicity
-+ */
-+static void add_snap_orphan(handle_t *handle, struct inode *pri, struct inode *ind)
-+{
-+      struct ext3_sb_info *sb = &pri->i_sb->u.ext3_sb;
-+      struct ext3_iloc iloc;
-+      
-+      if( ext3_get_inode_loc(ind, &iloc) ){
-+              snap_debug("--- get ind loc fail\n");
-+              brelse(iloc.bh);
-+              return;
-+      }
-+
-+      snap_debug("add new ind inode %lu into orphan list,"
-+                      " primary %lu, last orphan %u\n",
-+                      ind->i_ino, pri->i_ino, 
-+                      sb->s_es->s_last_snap_orphan);
-+      lock_super(pri->i_sb);
-+      iloc.raw_inode->i_next_snap_orphan = sb->s_es->s_last_snap_orphan;
-+      iloc.raw_inode->i_snap_primary = pri->i_ino;
-+      ext3_mark_inode_dirty(handle, ind);
-+
-+      ext3_journal_get_write_access(handle, sb->s_sbh);
-+      sb->s_es->s_last_snap_orphan = ind->i_ino;
-+      pri->i_sb->s_dirt = 1;
-+      ext3_journal_dirty_metadata(handle, sb->s_sbh);
-+      unlock_super(pri->i_sb);
-+      brelse(iloc.bh);
-+}
-+
-+/*
-+ * counterpart of add_snap_orphan
-+ */
-+static void remove_snap_orphan(handle_t *handle, struct inode *ind)
-+{
-+      struct ext3_sb_info *sb = &ind->i_sb->u.ext3_sb;
-+      struct inode *pre = NULL, *inode = NULL;
-+      struct ext3_iloc iloc, pre_iloc;
-+      ino_t ino;
-+
-+      lock_super(ind->i_sb);
-+      for(ino = sb->s_es->s_last_snap_orphan; ino; ){
-+              snap_debug("found an orphan, ino=%lu\n", ino);
-+              inode = iget( ind->i_sb, ino );
-+              if( !inode ){
-+                      snap_debug("iget %lu fail\n", ino);
-+                      break;
-+              }
-+              if( ext3_get_inode_loc(inode, &iloc) ){
-+                      snap_debug("get_inode_loc %lu fail\n", ino);
-+                      break;
-+              }
-+              if( ino == ind->i_ino ){
-+                      if( !pre ){
-+                              snap_debug("found at head of orphan chain\n");
-+                              ext3_journal_get_write_access(handle, sb->s_sbh);
-+                              sb->s_es->s_last_snap_orphan =
-+                                      iloc.raw_inode->i_next_snap_orphan;
-+                              ext3_journal_dirty_metadata(handle, sb->s_sbh);
-+                              snap_debug("set new last orphan: %u\n",
-+                                              sb->s_es->s_last_snap_orphan);
-+                              break;
-+                      }
-+                      else {
-+                              snap_debug("found in middle of orphan chain\n");
-+                              if( ext3_get_inode_loc(pre, &pre_iloc) ){
-+                                      snap_err("get pre_inode loc %lu fail\n", pre->i_ino);
-+                                      break;
-+                              }
-+                              pre_iloc.raw_inode->i_next_snap_orphan =
-+                                      iloc.raw_inode->i_next_snap_orphan;
-+                              ext3_mark_inode_dirty(handle, pre);
-+                              brelse(pre_iloc.bh);
-+                              break;
-+                      }
-+              }
-+              iput(pre);
-+              pre = inode;
-+              ino = iloc.raw_inode->i_next_snap_orphan;
-+              brelse(iloc.bh);
-+      }
-+      iput(pre);
-+      iput(inode);
-+      unlock_super(ind->i_sb);
-+      brelse(iloc.bh);
-+}
-+
-+/*
-+ * FIXME: how about crashs again during recovery?
-+ */
-+void snap_orphan_cleanup(struct super_block *sb)
-+{
-+      ino_t ind_ino, pri_ino;
-+      struct inode *ind = NULL, *pri = NULL;
-+      struct ext3_iloc ind_iloc;
-+
-+      if( (ind_ino = sb->u.ext3_sb.s_es->s_last_snap_orphan) == 0 ){
-+              snap_debug("snap_orphan_cleanup: nothing to do\n");
-+              return;
-+      }
-+
-+      snap_debug("------ begin cleanup snap orphans ------\n");
-+      do{
-+              ind = iget( sb, ind_ino );
-+              if( !ind ){
-+                      snap_err("snap_orphan_cleanup: get "
-+                                      "ind %lu fail\n", ind_ino);
-+                      break;
-+              }
-+
-+              if( ext3_get_inode_loc(ind, &ind_iloc) ){
-+                      snap_err("snap_orphan_cleanup: get "
-+                                      "iloc %lu fail\n", ind_ino);
-+                      iput( ind );
-+                      break;
-+              }
-+
-+              ind_ino = sb->u.ext3_sb.s_es->s_last_snap_orphan = 
-+                      ind_iloc.raw_inode->i_next_snap_orphan;
-+              pri_ino = ind_iloc.raw_inode->i_snap_primary;
-+
-+              pri = iget( sb, pri_ino );
-+              if( !pri ){
-+                      snap_err("snap_orphan_cleanup: get primary "
-+                                      "%lu fail\n", pri_ino);
-+                      iput( ind );
-+              }else 
-+                      restore_snap_inode(pri, ind);
-+      }while( ind_ino );
-+      snap_debug("------ end cleanup snap orphans ------\n");
-+
-+      sb->u.ext3_sb.s_es->s_last_snap_orphan = 0;
-+      sb->s_dirt = 1;
-+}
-+#endif
-+/*
-+ * reserse operation of set_indirect()
-+ * we should determine whether we had put pri into primary inode chain,
-+ * if not, don't touch it
-+ */
-+static void unset_indirect(handle_t *handle, struct inode *pri, struct inode *ind)
-+{
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      struct snap_ea *snaps;
-+      int err, alone=1, index, found;
-+
-+      snap_debug("pri %lu, ind %lu\n", pri->i_ino, ind->i_ino);
-+      err = ext3_xattr_get(pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR, buf,
-+                              EXT3_MAX_SNAP_DATA);
-+      if ( err < 0 ) {
-+              if( err == -ENOATTR ){
-+                      snap_debug("primary inode has not EA\n");
-+              }
-+              else{
-+                      snap_debug("get EA error on primary inode,"
-+                                      "returned value %d\n", err);
-+              }
-+              goto exit;
-+      }
-+
-+      /* find ind's item in the ea */
-+      snaps = (struct snap_ea*)buf;
-+      for(index=EXT3_MAX_SNAPS-1, found=-1; index>=0; index--) {
-+              if( snaps->ino[index] == ind->i_ino )
-+                      found = index;
-+              else if( snaps->ino[index] )
-+                      alone = 0;
-+      }
-+
-+      if(found >= 0) {
-+              snap_debug("remove from primary inode's EA\n");
-+              snaps->ino[found] = 0;
-+              snaps->parent_ino[found] = 0;
-+              ext3_xattr_set(handle, pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                             buf, EXT3_MAX_SNAP_DATA, 0);
-+              if(alone) {
-+                      snap_debug("delete from primary inodes chain\n");
-+                      lock_list(pri->i_sb);
-+                      delete_cowed_ino_from_list(handle, pri);
-+                      unlock_list(pri->i_sb);
-+              }
-+      }else{
-+              snap_debug("didn't found ind in pri's EA, do nothing\n");
-+      }
-+
-+exit:
-+      return;
-+}
-+
-+
-+/*
-+ * restore all data in @ind to @pri after free data blocks of @pri.
-+ * then release @ind
-+ */
-+static void restore_snap_inode(struct inode *pri, struct inode *ind)
-+{
-+      handle_t *handle;
-+      struct inode *tmp;
-+
-+      snap_debug("restore from indirect %lu to primary %lu\n",
-+                      ind->i_ino, pri->i_ino);
-+
-+      handle = ext3_journal_start(pri, SNAP_RESTOREORPHAN_TRANS_BLOCKS);
-+      if( !handle )
-+              return;
-+
-+      /* first: taken from pri's ea, or from fs-wide primary inode chain */
-+      unset_indirect(handle, pri, ind);
-+
-+      /* second: throw out half-copied data in pri */
-+      if( pri->i_blocks ){
-+              tmp = ext3_new_inode(handle, pri, (int)pri->i_mode, 0);
-+              if( !tmp ){
-+                      snap_debug("ext3_new_inode error\n");
-+                      goto exit;
-+              }
-+
-+              ext3_migrate_data(handle, tmp, pri);
-+              snap_debug("freeing half-copied %lu blocks\n", tmp->i_blocks );
-+              tmp->i_nlink = 0;
-+              iput( tmp );
-+      }
-+
-+      /* third: restore ind inode to pri inode */
-+      snap_debug("restore %lu blocks to primary inode %lu\n",
-+                      ind->i_blocks, pri->i_ino);
-+      ext3_migrate_data(handle, pri, ind);
-+
-+      /* final: delete ind inode */
-+      ind->i_nlink = 0;
-+      iput( ind );
-+      iput( pri );
-+
-+exit:
-+      ext3_journal_stop(handle, pri);
-+}
-+
-+static handle_t * ext3_copy_data(handle_t *handle, struct inode *dst,
-+                              struct inode *src, int *has_orphan)
-+{
-+      unsigned long blocks, blk, cur_blks;
-+      int low_credits, save_ref;
-+
-+      blocks =(src->i_size + src->i_sb->s_blocksize-1) >>
-+                      src->i_sb->s_blocksize_bits;
-+      low_credits = handle->h_buffer_credits - SNAP_BIGCOPY_TRANS_BLOCKS;
-+
-+      snap_debug("%lu blocks need to be copied,"
-+                      "low credits limit %d\n", blocks, low_credits);
-+      for (blk = 0, cur_blks= dst->i_blocks; blk < blocks; blk++) {
-+              if (!ext3_bmap(src->i_mapping, blk))
-+                      continue;
-+              if(handle->h_buffer_credits <= low_credits) {
-+                      int needed = (blocks - blk) * EXT3_DATA_TRANS_BLOCKS;
-+                      if (needed > 4 * SNAP_COPYBLOCK_TRANS_BLOCKS)
-+                              needed = 4 * SNAP_COPYBLOCK_TRANS_BLOCKS;
-+                      if (journal_extend(handle, needed)) {
-+                              snap_debug("create_indirect:fail to extend "
-+                                              "journal, restart trans\n");
-+                              loopfail( 3 );
-+                              if(!*has_orphan) {
-+                                      snap_debug("add orphan ino %lu nlink %d to orphan list \n", 
-+                                                 dst->i_ino, dst->i_nlink); 
-+#ifdef EXT3_ENABLE_SNAP_ORPHAN
-+                                      add_snap_orphan(handle, dst, src);
-+#else
-+                                      ext3_orphan_add(handle, dst);
-+#endif
-+                                      *has_orphan = 1;
-+                              }
-+                              dst->u.ext3_i.i_disksize =
-+                                      blk * dst->i_sb->s_blocksize;
-+                              dst->i_blocks = cur_blks;
-+                              dst->i_mtime = CURRENT_TIME;
-+                              ext3_mark_inode_dirty(handle, dst);
-+
-+                              /*
-+                               * We can be sure the last handle was stoped
-+                               * ONLY if the handle's reference count is 1
-+                               */
-+                              save_ref = handle->h_ref;
-+                              handle->h_ref = 1;
-+                              if( ext3_journal_stop(handle, dst) ){
-+                                      snap_err("fail to stop journal\n");
-+                                      handle = NULL;
-+                                      break;
-+                              }
-+                              loopfail ( 4 );
-+                              handle = ext3_journal_start(dst,
-+                                              low_credits + needed);
-+                              if( !handle ){
-+                                      snap_err("fail to restart handle\n");
-+                                      break;
-+                              }
-+                              handle->h_ref = save_ref;
-+                      }
-+              }
-+              if (ext3_copy_block( dst, src, blk) < 0 )
-+                      break;
-+              cur_blks += dst->i_sb->s_blocksize / 512;
-+      }
-+      dst->i_size = dst->u.ext3_i.i_disksize = src->i_size;
-+
-+      return handle;
-+}
-+
-+static int ext3_set_generation(struct inode *inode, unsigned long gen)
-+{
-+      handle_t *handle;
-+      int err;
-+
-+      handle = ext3_journal_start(inode, EXT3_XATTR_TRANS_BLOCKS);
-+
-+      err = ext3_xattr_set(handle, inode, EXT3_SNAP_INDEX, EXT3_SNAP_GENERATION_ATTR,
-+                           (char*)&gen, sizeof(int), 0);
-+      if (err < 0) {
-+              snap_err("ino %lu, set_ext_attr err %d\n", inode->i_ino, err);
-+              return err;
-+      }
-+      
-+      ext3_journal_stop(handle, inode);
-+      return 0;
-+}
-+
-+static int ext3_get_generation(struct inode *inode)
-+{
-+      int err, gen;
-+
-+      err = ext3_xattr_get(inode, EXT3_SNAP_INDEX, EXT3_SNAP_GENERATION_ATTR,
-+                           (char*)&gen, sizeof(gen));
-+      if (err < 0) {
-+              if (err == -ENODATA) {
-+                      return 0;
-+              } else {
-+                      snap_err("can not get generation from %lu \n", inode->i_ino);
-+                      return err;
-+              }
-+      }
-+      return gen;
-+}
-+/**
-+ * ext3_create_indirect - copy data, attributes from primary to new indir inode
-+ * @pri: primary (source) inode
-+ * @index: index in snapshot table where indirect inode should be stored
-+ * @delete: flag that the primary inode is being deleted
-+ *
-+ * We copy all of the data blocks from the @*src inode to the @*dst inode, as
-+ * well as copying the attributes from @*src to @*dst.  If @delete == 1, then
-+ * the primary inode will only be a redirector and will appear deleted.
-+ *
-+ * FIXME do we move EAs, only non-snap EAs, what?
-+ * FIXME we could do readpage/writepage, but we would have to handle block
-+ *       allocation then, and it ruins sparse files for 1k/2k filesystems,
-+ *       at the expense of doing a memcpy.
-+ */
-+
-+static struct inode *ext3_create_indirect(
-+                      struct inode *pri, 
-+                      int index,
-+                      unsigned int gen,    
-+                      ino_t parent_ino,
-+                      int del)
-+{
-+      struct inode *ind;
-+      handle_t *handle = NULL;
-+      int err = 0;
-+      int has_orphan = 0;
-+
-+      if( pri == pri->i_sb->u.ext3_sb.s_journal_inode ){
-+              printk( KERN_EMERG "TRY TO COW JOUNRAL\n");
-+              return NULL;
-+      }
-+      snap_debug("creating indirect inode for %lu at index %d, %s pri\n",
-+                      pri->i_ino, index, del ? "deleting" : "preserve");
-+
-+      ind = ext3_get_indirect(pri, NULL, index);
-+
-+      loopfail( 1 );
-+
-+      handle = ext3_journal_start(pri, SNAP_CREATEIND_TRANS_BLOCKS);
-+      if( !handle )
-+              return NULL;
-+      /* XXX ? We should pass an err argument to get_indirect and precisely
-+       * detect the errors, for some errors, we should exit right away.
-+       */
-+
-+      /* if the option is SNAP_DEL_PRI_WITH_IND and there is an indirect, 
-+       * we just free the primary data blocks and mark this inode delete
-+       */
-+      if((del) && ind && !IS_ERR(ind)) {
-+              struct inode *tmp;
-+              /* for directory, we don't free the data blocks, 
-+               * or ext3_rmdir will report errors "bad dir, no data blocks" 
-+               */
-+              snap_debug("del==SNAP_DEL_PRI_WITH_IND && ind\n");
-+              if(!S_ISDIR(pri->i_mode)) {     
-+                      /*Here delete the data of that pri inode.
-+                       * FIXME later, should throw the blocks of 
-+                       * primary inode directly
-+                       */
-+                      tmp = ext3_new_inode(handle, pri, (int)pri->i_mode, 0);
-+                      if(tmp) {
-+                              down(&tmp->i_sem);
-+                              ext3_migrate_data(handle, tmp, pri);
-+                              up(&tmp->i_sem);
-+                              tmp->i_nlink = 0;
-+                              iput(tmp);      
-+                      }
-+                      else 
-+                              snap_err("ext3_new_inode error\n");
-+
-+                      pri->i_nlink = 1;
-+              }
-+
-+              pri->u.ext3_i.i_dtime = CURRENT_TIME;
-+              ext3_mark_inode_dirty(handle, pri);
-+              err = 0;
-+              goto exit;
-+      }
-+
-+      if (ind && !IS_ERR(ind)) {
-+              snap_debug("existing indirect ino %lu for %lu: index %d\n",
-+                        ind->i_ino, pri->i_ino, index);
-+              err = 0;
-+              goto exit;
-+      }
-+      /* XXX: check this, ext3_new_inode, the first arg should be "dir" */ 
-+      ind = ext3_new_inode(handle, pri, (int)pri->i_mode, 0);
-+      if (!ind)
-+              goto exit;
-+
-+      loopfail( 2 );
-+
-+      snap_debug("got new inode %lu\n", ind->i_ino);
-+      ind->i_rdev = pri->i_rdev;
-+      ind->i_op = pri->i_op;
-+      ext3_set_generation(ind, (unsigned long)gen);
-+      /* If we are deleting the primary inode, we want to ensure that it is
-+       * written to disk with a non-zero link count, otherwise the next iget
-+       * and iput will mark the inode as free (which we don't want, we want
-+       * it to stay a redirector).  We fix this in ext3_destroy_indirect()
-+       * when the last indirect inode is removed.
-+       *
-+       * We then do what ext3_delete_inode() does so that the metadata will
-+       * appear the same as a deleted inode, and we can detect it later.
-+       */
-+      if (del) {
-+              snap_debug("deleting primary inode\n");
-+              
-+              down(&ind->i_sem);
-+              err = ext3_migrate_data(handle, ind, pri);
-+              if (err)
-+                      goto exit_unlock;
-+
-+              err = ext3_set_indirect(pri, index, ind->i_ino, parent_ino);
-+              if (err)
-+                      goto exit_unlock;
-+
-+              /* XXX for directory, we copy the block back 
-+               * or ext3_rmdir will report errors "bad dir, no data blocks" 
-+               */
-+              if( S_ISDIR(pri->i_mode)) {
-+                      handle = ext3_copy_data(handle, pri, ind, &has_orphan);
-+                      if(!handle) {
-+                              err = -EINVAL;
-+                              goto exit_unlock;
-+                      }
-+              }
-+
-+              pri->u.ext3_i.i_flags |= EXT3_DEL_FL;
-+              ind->u.ext3_i.i_flags |= EXT3_COW_FL;
-+              if(S_ISREG(pri->i_mode)) pri->i_nlink = 1;
-+              pri->u.ext3_i.i_dtime = CURRENT_TIME;
-+              //pri->u.ext3_i.i_generation++;
-+              ext3_mark_inode_dirty(handle, pri);
-+              ext3_mark_inode_dirty(handle, ind);
-+              up(&ind->i_sem);
-+      } else {
-+              down(&ind->i_sem);
-+              err = ext3_migrate_data(handle, ind, pri);
-+              if (err)
-+                      goto exit_unlock;
-+
-+              /* for regular files we do blocklevel COW's maybe */
-+              if (EXT3_HAS_COMPAT_FEATURE(pri->i_sb, EXT3_FEATURE_COMPAT_BLOCKCOW)
-+                      && S_ISREG(pri->i_mode)) {
-+
-+                      snap_debug("ino %lu, do block cow\n",pri->i_ino);
-+                      /* because after migrate_data , pri->i_size is 0 */
-+                      pri->i_size = ind->i_size;
-+              }
-+              else {
-+                      int bpib = pri->i_sb->s_blocksize >> 9;
-+                      snap_debug("ino %lu, do file cow\n", pri->i_ino);
-+
-+                      /* XXX: can we do this better? 
-+                       * If it's a fast symlink, we should copy i_data back!
-+                       * The criteria to determine a fast symlink is:
-+                       * 1) it's a link and its i_blocks is 0
-+                       * 2) it's a link and its i_blocks is bpib ( the case 
-+                       *    it has been cowed and has ea )
-+                       */
-+                        if( S_ISLNK(ind->i_mode) &&
-+                         ((ind->i_blocks == 0) || (ext3_has_ea(ind) && ind->i_blocks == bpib))) {
-+                              snap_debug("ino %lu is fast symlink\n", pri->i_ino);
-+                              memcpy(EXT3_I(pri)->i_data, EXT3_I(ind)->i_data,
-+                                     sizeof(EXT3_I(ind)->i_data));
-+                              pri->i_size = ind->i_size;
-+                      }
-+                      else {
-+                              handle = ext3_copy_data(handle, pri, ind, &has_orphan);
-+                              if (!handle)
-+                                      goto exit_unlock;
-+                      }
-+              }
-+              /* set cow flag for ind */
-+              ind->u.ext3_i.i_flags |= EXT3_COW_FL;
-+              pri->u.ext3_i.i_flags &= ~EXT3_COW_FL;
-+
-+              ext3_mark_inode_dirty(handle, pri);
-+              ext3_mark_inode_dirty(handle, ind);
-+
-+              err = ext3_set_indirect(pri, index, ind->i_ino, parent_ino);
-+              if (err)
-+                      goto exit_unlock;
-+
-+              up(&ind->i_sem);
-+      }
-+
-+      if (!EXT3_HAS_COMPAT_FEATURE(pri->i_sb,
-+                                   EXT3_FEATURE_COMPAT_SNAPFS)) {
-+              lock_super(pri->i_sb);
-+              ext3_journal_get_write_access(handle, pri->i_sb->u.ext3_sb.s_sbh);
-+              pri->i_sb->u.ext3_sb.s_es->s_feature_compat |=
-+                      cpu_to_le32(EXT3_FEATURE_COMPAT_SNAPFS);
-+              ext3_journal_dirty_metadata(handle, pri->i_sb->u.ext3_sb.s_sbh);
-+              pri->i_sb->s_dirt = 1;
-+              unlock_super(pri->i_sb);
-+      }
-+      if (has_orphan) {
-+              snap_debug("del %lu nlink %d from orphan list\n", 
-+                         ind->i_ino, ind->i_nlink);
-+#ifdef EXT3_ENABLE_SNAP_ORPHAN        
-+              remove_snap_orphan(handle, ind);
-+#else
-+              ext3_orphan_del(handle, ind);
-+#endif
-+      }
-+      ext3_journal_stop(handle, pri);
-+
-+      loopfail( 5 );
-+
-+      return ind;
-+
-+exit_unlock:
-+      up(&ind->i_sem);
-+      ind->i_nlink = 0;
-+exit:
-+      if (has_orphan) {
-+              snap_debug("del %lu nlink %d from orphan list\n", 
-+                         ind->i_ino, ind->i_nlink);
-+#ifdef EXT3_ENABLE_SNAP_ORPHAN        
-+              remove_snap_orphan(handle, ind);
-+#else
-+              ext3_orphan_del(handle, ind);
-+#endif
-+      }
-+      iput(ind);
-+      ext3_journal_stop(handle, pri);
-+      if (err)
-+              snap_err("exiting with error %d\n", err);
-+      return NULL;
-+}
-+
-+
-+/* The following functions are used by destroy_indirect */
-+#define inode_bmap(inode, nr) (EXT3_I(inode)->i_data[(nr)])
-+#define inode_setbmap(inode, nr, physical) (EXT3_I(inode)->i_data[(nr)]=(physical))
-+
-+static inline int block_bmap (struct buffer_head * bh, int nr)
-+{
-+        int tmp;
-+
-+        if (!bh)
-+                return 0;
-+        tmp = le32_to_cpu(((u32 *) bh->b_data)[nr]);
-+        brelse (bh);
-+        return tmp;
-+}
-+
-+static inline int block_setbmap (handle_t *handle, struct buffer_head * bh, int nr, int physical)
-+{
-+
-+      if (!bh)
-+              return 0;
-+      ext3_journal_get_write_access(handle, bh);
-+      ((u32 *) bh->b_data)[nr] = cpu_to_le32(physical);
-+      ext3_journal_dirty_metadata(handle, bh);
-+      brelse (bh);
-+      return 1;
-+}
-+
-+static int ext3_migrate_block (handle_t *handle, struct inode * dst, struct inode *src, int block)
-+{
-+      int i1_d=0, i1_s=0, i2_d=0, i2_s=0, i3_d=0, i3_s=0;
-+      int addr_per_block = EXT3_ADDR_PER_BLOCK(src->i_sb);
-+      int addr_per_block_bits = EXT3_ADDR_PER_BLOCK_BITS(src->i_sb);
-+      unsigned long blksz = src->i_sb->s_blocksize;
-+      kdev_t ddev = dst->i_dev;
-+      kdev_t sdev = src->i_dev;
-+      int physical = 0;
-+
-+      if (block < 0) {
-+              ext3_warning (src->i_sb, "ext3_migrate_block", "block < 0");
-+              return 0;
-+      }
-+      if (block >= EXT3_NDIR_BLOCKS + addr_per_block +
-+              (1 << (addr_per_block_bits * 2)) +
-+              ((1 << (addr_per_block_bits * 2)) << addr_per_block_bits)) {
-+              ext3_warning (src->i_sb, "ext3_migrate_block", "block > big");
-+              return 0;
-+      }
-+      /* EXT3_NDIR_BLOCK */
-+      if (block < EXT3_NDIR_BLOCKS) {
-+              if( inode_bmap(dst, block) )    return 0;
-+              else {
-+                      if( (physical = inode_bmap(src, block)) ) {
-+                              inode_setbmap (dst, block, physical);
-+                              inode_setbmap (src, block, 0);
-+                              return 1;
-+                      }
-+                      else 
-+                              return 0;
-+              }
-+      }
-+      /* EXT3_IND_BLOCK */
-+      block -= EXT3_NDIR_BLOCKS;
-+      if (block < addr_per_block) {
-+              i1_d = inode_bmap (dst, EXT3_IND_BLOCK);
-+
-+              if (!i1_d) {
-+                      physical = inode_bmap(src, EXT3_IND_BLOCK);
-+                      if( physical ) {
-+                              inode_setbmap (dst, EXT3_IND_BLOCK, physical);
-+                              inode_setbmap (src, EXT3_IND_BLOCK, 0);
-+                              return 1;
-+                      }
-+                      else 
-+                              return 0;
-+              }
-+              if( block_bmap (bread (ddev, i1_d, blksz), block )) 
-+                      return 0;
-+
-+              i1_s = inode_bmap (src, EXT3_IND_BLOCK);
-+              if( !i1_s)      return 0;
-+
-+              physical = block_bmap ( bread (sdev, i1_s, blksz), block );
-+
-+              if( physical) {
-+                      block_setbmap(handle, bread(ddev, i1_d, blksz),block,physical); 
-+                      block_setbmap(handle, bread(sdev, i1_s, blksz), block, 0);
-+                      return 1; 
-+              }
-+              else 
-+                      return 0;
-+      }
-+      /* EXT3_DIND_BLOCK */
-+      block -= addr_per_block;
-+      if (block < (1 << (addr_per_block_bits * 2))) {
-+              i1_d = inode_bmap (dst, EXT3_DIND_BLOCK);
-+              i1_s = inode_bmap (src, EXT3_DIND_BLOCK);
-+              if (!i1_d) {
-+                      if( (physical = inode_bmap(src, EXT3_DIND_BLOCK)) ) {
-+                              inode_setbmap (dst, EXT3_DIND_BLOCK, physical);
-+                              inode_setbmap (src, EXT3_DIND_BLOCK, 0);
-+                              return 1;
-+                      }
-+                      else 
-+                              return 0;
-+              }
-+              i2_d = block_bmap (bread (ddev, i1_d, blksz),
-+                              block >> addr_per_block_bits);
-+
-+              if (!i2_d) {
-+                      
-+                      if( !i1_s)      return 0;
-+
-+                      physical = block_bmap (bread (sdev, i1_s, blksz),
-+                              block >> addr_per_block_bits);
-+                      if( physical) {
-+                              block_setbmap (handle, bread (ddev, i1_d, blksz), 
-+                                      block >> addr_per_block_bits, physical);
-+                              block_setbmap (handle, bread (sdev, i1_s, blksz), 
-+                                      block >> addr_per_block_bits, 0);
-+                              return 1;
-+                      }
-+                      else
-+                              return 0;
-+              }
-+              physical = block_bmap (bread (ddev, i2_d,
-+                                        blksz),
-+                                 block & (addr_per_block - 1));
-+              if(physical) 
-+                              return 0;
-+              else {
-+                      i2_s =  block_bmap (bread (sdev, i1_s,
-+                                     blksz),
-+                              block >> addr_per_block_bits);
-+                      if(!i2_s)       return 0;
-+      
-+                      physical = block_bmap(bread (sdev, i2_s,
-+                                        blksz),
-+                                 block & (addr_per_block - 1));
-+                      if(physical) {
-+                              block_setbmap(handle, bread (ddev, i2_d, blksz),
-+                                 block & (addr_per_block - 1), physical);
-+                              block_setbmap(handle, bread (sdev, i2_s, blksz),
-+                                 block & (addr_per_block - 1), 0);
-+                              return 1;
-+                      }
-+                      else 
-+                              return 0;
-+              }
-+              
-+      }
-+      /* EXT3_TIND_BLOCK */
-+      block -= (1 << (addr_per_block_bits * 2));
-+      i1_d = inode_bmap (dst, EXT3_TIND_BLOCK);
-+      i1_s = inode_bmap (src, EXT3_TIND_BLOCK);
-+      if (!i1_d) {
-+              if( (physical = inode_bmap(src, EXT3_TIND_BLOCK)) )
-+                              inode_setbmap (dst, EXT3_TIND_BLOCK, physical);
-+              else 
-+                      return 0;
-+      }
-+      i2_d = block_bmap (bread (ddev, i1_d, blksz),
-+                      block >> (addr_per_block_bits * 2));
-+
-+      if(i1_s) i2_s = block_bmap (bread (sdev, i1_s, blksz),
-+                      block >> (addr_per_block_bits * 2));
-+
-+      if (!i2_d) {
-+
-+              if( !i1_s)      return 0;
-+              
-+              physical = block_bmap (bread (sdev, i1_s, blksz),
-+                      block >> (addr_per_block_bits * 2));
-+              if(physical) {
-+                      block_setbmap (handle, bread (ddev, i1_d, blksz),
-+                              block >> (addr_per_block_bits * 2), physical);
-+                      block_setbmap (handle, bread (sdev, i1_s, blksz),
-+                              block >> (addr_per_block_bits * 2), 0);
-+                      return 1;
-+              }
-+              else
-+                      return 0;
-+      }
-+      i3_d = block_bmap (bread (ddev, i2_d, blksz),
-+                      (block >> addr_per_block_bits) & (addr_per_block - 1));
-+      if( i2_s) i3_s = block_bmap (bread (sdev, i2_s, blksz),
-+                      (block >> addr_per_block_bits) & (addr_per_block - 1));
-+      
-+      if (!i3_d) {
-+              if (!i2_s)      return 0;       
-+              physical = block_bmap (bread (sdev, i2_s, blksz),
-+                      (block >> addr_per_block_bits) & (addr_per_block - 1));
-+              if( physical) {
-+                      block_setbmap (handle, bread (ddev, i2_d, blksz),
-+                      (block >> addr_per_block_bits) & (addr_per_block - 1), 
-+                      physical);
-+                      block_setbmap (handle, bread (sdev, i2_s, blksz),
-+                      (block >> addr_per_block_bits) & (addr_per_block - 1),
-+                      0);
-+                      return 1;
-+              }
-+              else
-+                      return 0;
-+      }
-+      physical = block_bmap (bread (ddev, i3_d, blksz),
-+                         block & (addr_per_block - 1)) ;
-+      if(physical) return 0;
-+      else {
-+              if(!i3_s)       return 0;       
-+              physical =  block_bmap (bread (sdev, i3_s, blksz),
-+                         block & (addr_per_block - 1)) ;
-+              if( physical) {
-+                      block_setbmap (handle, bread (ddev, i3_d, blksz),
-+                         block & (addr_per_block - 1), physical); 
-+                      block_setbmap (handle, bread (sdev, i3_s, blksz),
-+                         block & (addr_per_block - 1), 0); 
-+                      return 1;
-+              }
-+              else
-+                      return 0; 
-+      }
-+}
-+
-+/* Generate i_blocks from blocks for an inode .
-+ * We also calculate EA block here.
-+ */
-+static unsigned long calculate_i_blocks(struct inode *inode, int blocks)
-+{
-+      /* 512 byte disk blocks per inode block */
-+      int bpib = inode->i_sb->s_blocksize >> 9;
-+      int addr_per_block = EXT3_ADDR_PER_BLOCK(inode->i_sb);
-+      unsigned long i_blocks = 0;
-+      int i=0;
-+      int j=0;
-+      int meta_blocks = 0;
-+
-+      if( !inode )    return 0;
-+
-+      if( blocks < 0 ) {
-+              /* re-calculate blocks here */  
-+              blocks = (inode->i_size + inode->i_sb->s_blocksize-1) 
-+                      >> inode->i_sb->s_blocksize_bits;
-+      }
-+
-+      /* calculate data blocks */
-+      for(i = 0; i < blocks; i++ ) {
-+              if(ext3_bmap(inode->i_mapping, i))  
-+                      i_blocks += bpib;
-+      }
-+      /* calculate meta blocks */
-+      blocks -= EXT3_NDIR_BLOCKS;
-+      if( blocks > 0 ) {
-+              meta_blocks++;
-+              blocks -= addr_per_block;
-+      }
-+      if( blocks > 0 ) meta_blocks++;
-+      i=0;
-+      while( (blocks > 0) && (i < addr_per_block) ) {
-+              meta_blocks++;
-+              blocks -= addr_per_block;
-+              i++;
-+      }
-+      if ( blocks > 0 ) meta_blocks += 2;
-+      i=0;
-+      j=0;
-+      while( blocks > 0) {
-+              meta_blocks++;
-+              blocks -= addr_per_block;
-+              i++;
-+              if(i >= addr_per_block  ) {
-+                      i=0;
-+                      j++;
-+              }
-+              if( j >= addr_per_block) {
-+                      j=0;
-+                      meta_blocks++;
-+              }
-+      }
-+      /* calculate EA blocks */
-+      if( ext3_has_ea (inode) )       meta_blocks++;
-+
-+      i_blocks += meta_blocks * bpib;
-+      snap_debug("ino %lu, get i_blocks %lu\n", inode->i_ino, i_blocks);
-+      return i_blocks;
-+}
-+
-+/**
-+ * ext3_destroy_indirect - delete an indirect inode from the table
-+ * @pri: primary inode
-+ * @ind: indirect inode
-+ * @index: index of inode that should be deleted
-+ *
-+ * We delete the @*ind inode, and remove it from the snapshot table.  If @*ind
-+ * is NULL, we use the inode at @index.
-+ */
-+static int ext3_destroy_indirect(struct inode *pri, int index, 
-+                              struct inode *next_ind)
-+{
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      struct snap_ea *snaps;
-+      struct inode *ind;
-+      int save = 0;
-+      int i=0;
-+      int err = 0;
-+      handle_t *handle=NULL;
-+      time_t ctime;
-+
-+      if (index < 0 || index > EXT3_MAX_SNAPS)
-+              return 0;
-+
-+      if( pri == pri->i_sb->u.ext3_sb.s_journal_inode ){
-+              snap_err("TRY TO DESTROY JOURNAL'S IND\n");
-+              return -EINVAL;
-+      }
-+
-+      err = ext3_xattr_get(pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                           buf, EXT3_MAX_SNAP_DATA);
-+      if (err < 0) {
-+              snap_err("inode %lu attribute read error\n", pri->i_ino);
-+              return err;
-+      }
-+      
-+      snaps = (struct snap_ea *)buf;
-+      if ( !snaps->ino[index] ) {
-+              snap_err("for pri ino %lu, index %d, redirect ino is 0\n",
-+                              pri->i_ino, index);     
-+              return -EINVAL;
-+      }
-+
-+      snap_debug("for pri ino %lu, reading inode %lu at index %d\n", 
-+              pri->i_ino, (ulong)le32_to_cpu(snaps->ino[index]), index);
-+
-+      ind = iget(pri->i_sb, le32_to_cpu (snaps->ino[index]) );
-+
-+      if ( !ind || IS_ERR(ind) || is_bad_inode(ind)) 
-+              return  -EINVAL;
-+
-+      snap_debug("iget ind %lu, ref count = %d\n", 
-+                 ind->i_ino, atomic_read(&ind->i_count));
-+
-+      handle = ext3_journal_start(pri, SNAP_DESTROY_TRANS_BLOCKS);
-+      if (!handle) {
-+              iput(ind);
-+              return -EINVAL;
-+      }
-+      /* if it's block level cow, first copy the blocks back */       
-+      if (EXT3_HAS_COMPAT_FEATURE(pri->i_sb, EXT3_FEATURE_COMPAT_BLOCKCOW) &&
-+          S_ISREG(pri->i_mode)) {
-+
-+              int blocks;
-+              if (!next_ind) {        
-+                      next_ind = pri;
-+                      down(&ind->i_sem);
-+              } else {
-+                      double_down(&next_ind->i_sem, &ind->i_sem);
-+              }
-+              blocks = (next_ind->i_size + next_ind->i_sb->s_blocksize-1) 
-+                              >> next_ind->i_sb->s_blocksize_bits;
-+#define FAST_MIGRATE_BLOCK
-+#ifdef FAST_MIGRATE_BLOCK
-+              snap_debug("migrate block back from ino %lu to %lu\n",
-+                              ind->i_ino, next_ind->i_ino);
-+
-+              for(i = 0; i < blocks; i++) {
-+                      if( ext3_bmap(next_ind->i_mapping, i) ) 
-+                              continue;
-+                      if( !ext3_bmap(ind->i_mapping, i) ) 
-+                              continue;
-+                      ext3_migrate_block(handle, next_ind, ind, i) ;
-+              }
-+              /* Now re-compute the i_blocks */
-+              /* XXX shall we take care of ind here? probably not */
-+              next_ind->i_blocks = calculate_i_blocks( next_ind, blocks);
-+              ext3_mark_inode_dirty(handle, next_ind);
-+
-+#else
-+              for (i = 0; i < blocks; i++) {
-+                      if (ext3_bmap(next_ind->i_mapping, i))  
-+                              continue;
-+                      if (ext3_copy_block(next_ind, ind, i ) < 0)     
-+                              break;
-+              }
-+              ext3_mark_inode_dirty(handle, next_ind);
-+#endif 
-+              if (next_ind == pri) 
-+                      up(&ind->i_sem);
-+              else 
-+                      double_up(&next_ind->i_sem, &ind->i_sem);
-+
-+      }
-+      
-+      snap_debug("delete indirect ino %lu\n", ind->i_ino);
-+      snap_debug("iput ind %lu, ref count = %d\n", 
-+                  ind->i_ino, atomic_read(&ind->i_count));
-+      ind->i_nlink = 0;
-+      iput (ind);
-+
-+      snaps->ino[index] = cpu_to_le32(0);
-+      for (i = 0; i < EXT3_MAX_SNAPS; i++)
-+              save += snaps->ino[i];
-+
-+      if(!save) {     
-+              lock_list(pri->i_sb);
-+              delete_cowed_ino_from_list(handle, pri);
-+              unlock_list(pri->i_sb);
-+      }
-+
-+      /* if there are no cowed inode left, then remove snapfs feature */
-+      if(!SB_FIRST_COWED_INO(pri->i_sb)) {
-+
-+              lock_super(pri->i_sb);
-+
-+              ext3_journal_get_write_access(handle, pri->i_sb->u.ext3_sb.s_sbh);
-+              if (EXT3_HAS_COMPAT_FEATURE(pri->i_sb,
-+                                     EXT3_FEATURE_COMPAT_SNAPFS)) {
-+                      pri->i_sb->u.ext3_sb.s_es->s_feature_compat &=
-+                              cpu_to_le32(~EXT3_FEATURE_COMPAT_SNAPFS);
-+              }
-+              /* clean up block level cow feature */
-+              if (EXT3_HAS_COMPAT_FEATURE(pri->i_sb,
-+                      EXT3_FEATURE_COMPAT_BLOCKCOW)) {
-+                              pri->i_sb->u.ext3_sb.s_es->s_feature_compat &=
-+                                      cpu_to_le32(~EXT3_FEATURE_COMPAT_BLOCKCOW);
-+                 }
-+              /* XXX clean the extended attribute feature,
-+               * this is not safe, find a better way
-+               */
-+                if (EXT3_HAS_COMPAT_FEATURE(pri->i_sb,
-+                      EXT3_FEATURE_COMPAT_EXT_ATTR)) {
-+                              pri->i_sb->u.ext3_sb.s_es->s_feature_compat &=
-+                                      cpu_to_le32(~EXT3_FEATURE_COMPAT_EXT_ATTR);
-+                }
-+
-+              ext3_journal_dirty_metadata(handle, pri->i_sb->u.ext3_sb.s_sbh);
-+              pri->i_sb->s_dirt = 1;
-+              unlock_super(pri->i_sb);
-+        }
-+
-+      /*
-+       * If we are deleting the last indirect inode, and the primary inode
-+       * has already been deleted, then mark the primary for deletion also.
-+       * Otherwise, if we are deleting the last indirect inode remove the
-+       * snaptable from the inode.    XXX
-+       */
-+      if (!save && pri->u.ext3_i.i_dtime) {
-+              snap_debug("deleting primary %lu\n", pri->i_ino);
-+              pri->i_nlink = 0;
-+              /* reset err to 0 now */
-+              err = 0;
-+      } else {
-+              snap_debug("%s redirector table\n",
-+                              save ? "saving" : "deleting");
-+              /* XXX: since set ea will modify i_ctime of pri, 
-+                      so save/restore i_ctime. Need this necessary ? */
-+              ctime = pri->i_ctime;   
-+              err = ext3_xattr_set(handle, pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                         save ? buf : NULL, EXT3_MAX_SNAP_DATA, 0);
-+              pri->i_ctime = ctime;
-+              ext3_mark_inode_dirty(handle, pri);
-+      }
-+      ext3_journal_stop(handle, pri);
-+      return err;
-+}
-+
-+/* restore a primary inode with the indirect inode at index */
-+static int ext3_restore_indirect(struct inode *pri, int index)
-+{
-+      struct inode *ind;
-+      struct inode *tmp;
-+      int err = 0;
-+      handle_t *handle = NULL;
-+
-+      if (index < 0 || index > EXT3_MAX_SNAPS)
-+              return -EINVAL;
-+
-+      if( pri == pri->i_sb->u.ext3_sb.s_journal_inode ){
-+              printk( KERN_EMERG "TRY TO RESTORE JOURNAL\n");
-+              return -EINVAL;
-+      }
-+      snap_debug("pri ino %lu, index %d\n", pri->i_ino, index);
-+
-+      ind = ext3_get_indirect(pri, NULL, index);
-+
-+      if ( !ind ) 
-+              return -EINVAL;
-+
-+      snap_debug("restore ino %lu to %lu\n", pri->i_ino, ind->i_ino);
-+
-+      handle = ext3_journal_start(pri, SNAP_RESTORE_TRANS_BLOCKS);
-+      if( !handle )
-+              return -EINVAL;
-+      /* first destroy all the data blocks in primary inode */
-+      /* XXX: check this, ext3_new_inode, the first arg should be "dir" */ 
-+      tmp = ext3_new_inode(handle, pri, (int)pri->i_mode, 0);
-+      if(tmp) {
-+              double_down(&pri->i_sem, &tmp->i_sem);
-+              ext3_migrate_data(handle, tmp, pri);
-+              double_up(&pri->i_sem, &tmp->i_sem);
-+
-+              tmp->i_nlink = 0;
-+              iput(tmp);      
-+      }
-+      else    
-+              snap_err("restore_indirect, new_inode err\n");
-+      
-+      double_down(&pri->i_sem, &ind->i_sem);
-+      ext3_migrate_data(handle, pri, ind);
-+      /* clear the cow flag for pri because ind has it */
-+      pri->u.ext3_i.i_flags &= ~EXT3_COW_FL;
-+      ext3_mark_inode_dirty(handle, pri);
-+      double_up(&pri->i_sem, &ind->i_sem);
-+      iput(ind);
-+
-+//    ext3_destroy_indirect(pri, index);
-+
-+      ext3_journal_stop(handle, pri);
-+      return err;
-+}
-+
-+
-+/**
-+ * ext3_snap_iterate - iterate through all of the inodes
-+ * @sb: filesystem superblock
-+ * @repeat: pointer to function called on each valid inode
-+ * @start: inode to start iterating at
-+ * @priv: private data to the caller/repeat function
-+ *
-+ * If @start is NULL, then we do not return an inode pointer.  If @*start is
-+ * NULL, then we start at the beginning of the filesystem, and iterate over
-+ * all of the inodes in the system.  If @*start is non-NULL, then we start
-+ * iterating at this inode.
-+ *
-+ * We call the repeat function for each inode that is in use.  The repeat
-+ * function must check if this is a redirector (with is_redirector) if it
-+ * only wants to operate on redirector inodes.  If there is an error or
-+ * the repeat function returns non-zero, we return the last inode operated
-+ * on in the @*start parameter.  This allows the caller to restart the
-+ * iteration at this inode if desired, by returning a positive value.
-+ * Negative return values indicate an error.
-+ *
-+ * NOTE we cannot simply traverse the existing filesystem tree from the root
-+ *      inode, as there may be disconnected trees from deleted files/dirs
-+ *
-+ * FIXME If there was a list of inodes with EAs, we could simply walk the list
-+ * intead of reading every inode.  This is an internal implementation issue.
-+ */
-+
-+static int ext3_iterate_all(struct super_block *sb,
-+                      int (*repeat)(struct inode *inode, void *priv),
-+                      struct inode **start, void *priv)
-+{
-+      struct inode *tmp = NULL;
-+      int gstart, gnum;
-+      ino_t istart, ibase;
-+      int err = 0;
-+
-+      if (!start)
-+              start = &tmp;
-+      if (!*start) {
-+              *start = iget(sb, EXT3_ROOT_INO);
-+              if (!*start) {
-+                      err = -ENOMEM;
-+                      goto exit;
-+              }
-+              if (is_bad_inode(*start)) {
-+                      err = -EIO;
-+                      goto exit;
-+              }
-+      }
-+      if ((*start)->i_ino > le32_to_cpu(EXT3_SB(sb)->s_es->s_inodes_count)) {
-+              snap_debug("invalid starting inode %ld\n",(*start)->i_ino);
-+              err = -EINVAL;
-+              goto exit;
-+      }
-+      if ((*start)->i_ino < EXT3_FIRST_INO(sb)) {
-+              if ((err = (*repeat)(*start, priv) != 0))
-+                      goto exit;
-+              iput(*start);
-+              *start = iget(sb, EXT3_FIRST_INO(sb));
-+              if (!*start) {
-+                      err = -ENOMEM;
-+                      goto exit;
-+              }
-+              if (is_bad_inode(*start)) {
-+                      err = -EIO;
-+                      goto exit;
-+              }
-+      }
-+
-+      gstart = ((*start)->i_ino - 1) / EXT3_INODES_PER_GROUP(sb);
-+      istart = ((*start)->i_ino - 1) % EXT3_INODES_PER_GROUP(sb);
-+      ibase = gstart * EXT3_INODES_PER_GROUP(sb);
-+      for (gnum = gstart; gnum < EXT3_SB(sb)->s_groups_count;
-+           gnum++, ibase += EXT3_INODES_PER_GROUP(sb)) {
-+              struct ext3_group_desc * gdp;
-+              int bitmap_nr;
-+              char *bitmap;
-+              int ibyte;
-+
-+              gdp = ext3_get_group_desc (sb, gnum, NULL);
-+              if (!gdp || le16_to_cpu(gdp->bg_free_inodes_count) ==
-+                  EXT3_INODES_PER_GROUP(sb))
-+                      continue;
-+
-+              bitmap_nr = ext3_load_inode_bitmap(sb, gnum);
-+              if (bitmap_nr < 0)
-+                      continue;
-+
-+              bitmap = EXT3_SB(sb)->s_inode_bitmap[bitmap_nr]->b_data;
-+              for (ibyte = istart >> 3;
-+                   ibyte < EXT3_INODES_PER_GROUP(sb) >> 3;
-+                   ibyte++)
-+              {
-+                      int i;
-+                      int bit;
-+
-+                      if (!bitmap[ibyte])
-+                              continue;
-+
-+                      /* FIXME need to verify if bit endianness will
-+                       *       work properly here for all architectures.
-+                       */
-+                      for (i = 1, bit = 1; i <= 8; i++, bit <<= 1) {
-+                              ino_t ino = ibase + (ibyte << 3) + i;
-+
-+                              if ((bitmap[ibyte] & bit) == 0)
-+                                      continue;
-+                              if (*start) {
-+                                      if (ino < (*start)->i_ino)
-+                                              continue;
-+                              } else {
-+                                      *start = iget(sb, ino);
-+                                      if (!*start) {
-+                                              err = -ENOMEM;
-+                                              goto exit;
-+                                      }
-+                                      if (is_bad_inode(*start)) {
-+                                              err = -EIO;
-+                                              goto exit;
-+                                      }
-+                              }
-+                              if ((err = (*repeat)(*start, priv)) != 0)
-+                                      goto exit;
-+                              iput(*start);
-+                              *start = NULL;
-+                      }
-+              }
-+              istart = 0;
-+      }
-+exit:
-+      iput(tmp);
-+      return err;
-+}
-+
-+static int ext3_iterate(struct super_block *sb,
-+                      int (*repeat)(struct inode *inode, void *priv),
-+                      struct inode **start, void *priv, int flag)
-+{
-+      switch(flag) {
-+              case SNAP_ITERATE_ALL_INODE:
-+                      return ext3_iterate_all (sb, repeat, start, priv);
-+
-+              case SNAP_ITERATE_COWED_INODE:
-+                      return ext3_iterate_cowed_inode (sb, repeat, start,priv);
-+
-+              default:
-+                      return -EINVAL;
-+      }
-+}
-+
-+static int find_snap_meta_index(
-+      struct table_snap_meta_data *snap_meta,
-+      char                        *name)
-+{
-+      int i;
-+
-+      /* table max length is null*/
-+      for( i = 0; i < TABLE_ITEM_COUNT; i++){
-+              /*compare name Max name Length 15*/
-+              if (snap_meta->array[i].name[0]){
-+                      if(!strncmp(snap_meta->array[i].name, name, strlen(name)))
-+                              return i;
-+              }
-+      }
-+      return -1; /* can not find */
-+}
-+
-+int set_snap_meta_index(
-+      struct table_snap_meta_data *snap_meta,
-+      char                        *name,
-+      int                          size)
-+{
-+      int i;
-+
-+      for( i = 0; i < TABLE_ITEM_COUNT; i++){
-+              /*compare name Max name Length 15*/
-+              if (! snap_meta->array[i].name[0]){
-+                      strcpy(snap_meta->array[i].name, name);
-+                      snap_meta->count ++;
-+                      snap_meta->array[i].start = i * TABLE_ITEM_SIZE + 1;
-+                      snap_meta->array[i].len   = size;
-+                      return i;
-+              }
-+      }
-+      return -1; /* can not find */
-+}
-+
-+static int ext3_get_meta_attr(struct super_block *sb, 
-+                            char* name, char* buf, 
-+                            int *size)
-+{
-+        ino_t                         ino;
-+        struct inode                          *inode;
-+      struct buffer_head              *bh = NULL;
-+      struct table_snap_meta_data     *s_attr;
-+      unsigned long                   map_len = 0,  left_size;
-+        int                           i, error = 0, index = 0;
-+      
-+      ino = SB_SNAPTABLE_INO(sb);     
-+      if (ino == 0){
-+              snap_err("No table file \n");
-+              return  -ENODATA;
-+      } 
-+      inode = iget(sb, ino);
-+        if(!inode || is_bad_inode(inode)){
-+                snap_err("unable to get table ino %lu\n", ino);
-+                error = -ENOENT;
-+                      goto out_iput; 
-+      }
-+      /*read the table from the table inode*/
-+      bh = ext3_bread(NULL, inode, 0, 0, &error);
-+      if (!bh) {
-+              snap_err("read table ino %lu, error %d\n", ino, error);
-+              error = -ENODATA;
-+              goto out_iput;
-+      }
-+      s_attr = (struct table_snap_meta_data *)(bh->b_data);
-+      index = find_snap_meta_index(s_attr, name);
-+      if (index < 0) {
-+              snap_debug("not exit %s meta attr of table ino %lu \n", 
-+                                      name, inode->i_ino);
-+              error = 0;
-+              goto out_iput;
-+      }
-+      if (!buf || *size < s_attr->array[index].len) {
-+              /*return the size of this meta attr */
-+              error = s_attr->array[index].len;               
-+              goto out_iput;  
-+      }
-+      map_len = (s_attr->array[index].len + sb->s_blocksize - 1) >> sb->s_blocksize_bits;     
-+      left_size = *size;
-+      for(i = 0; i < map_len; i++) {
-+              struct buffer_head *array_bh = NULL;
-+
-+              array_bh = ext3_bread(NULL, inode, 
-+                                    s_attr->array[index].start + i,
-+                                    0, &error);
-+              if (!array_bh) {
-+                      snap_err("ino %lu read snap attr offset %d error %d \n",
-+                                inode->i_ino, (s_attr->array[index].start + i),
-+                                error);
-+                      goto out_iput;
-+              }
-+              if (left_size >= sb->s_blocksize) {
-+                      memcpy(buf, array_bh->b_data, sb->s_blocksize);
-+              }else
-+                      memcpy(buf, array_bh->b_data, left_size);
-+              left_size -= sb->s_blocksize;
-+              brelse(array_bh);
-+      }
-+      *size = s_attr->array[index].len;
-+out_iput:
-+      brelse(bh);
-+      iput(inode);
-+      return error;
-+} 
-+
-+static int ext3_set_meta_attr(struct super_block *sb, char* name, 
-+                            char* buf, int size)
-+{
-+        struct inode                          *inode = NULL;
-+        handle_t                      *handle = NULL;
-+      struct  buffer_head             *bh = NULL;
-+      struct table_snap_meta_data     *s_attr = NULL;
-+      unsigned long                   ino;
-+        int                           i, index = 0, error = 0;
-+      unsigned long                   new_len = 0, left_size; 
-+              
-+      ino = SB_SNAPTABLE_INO(sb);
-+      
-+      if (ino == 0 && !buf) {
-+              snap_debug("no table ino \n");
-+              return 0;
-+      }
-+      
-+      handle = ext3_journal_start(sb->s_root->d_inode, 2*EXT3_SETMETA_TRANS_BLOCKS);
-+      if(!handle)
-+              return -EINVAL;
-+
-+      if (ino == 0) {
-+              /*create table inode update table ino*/
-+              inode = ext3_new_inode(handle, sb->s_root->d_inode, (int)S_IFREG, 0);
-+              if (!inode)
-+                      return  -EINVAL;
-+              lock_super(sb);
-+              ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
-+              SB_SNAPTABLE_INO(sb) = inode->i_ino;
-+              ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
-+              sb->s_dirt = 1;
-+              unlock_super(sb);
-+
-+      } else {
-+              inode = iget(sb, ino);
-+              if (!inode || !inode->i_nlink || is_bad_inode(inode)) {
-+                      snap_err("unable to get table ino %lu\n", ino);
-+                      error = -ENOENT;
-+                      goto exit;
-+              }
-+      }
-+      /*read the table from the table inode,
-+       * If can not find the block just create it*/
-+      bh = ext3_bread(handle, inode, 0, 1, &error);
-+      if (!bh) {
-+              snap_err("read table ino %lu, error %d\n", ino, error);
-+              error = -ENODATA;
-+              goto exit;
-+      }
-+      s_attr = (struct table_snap_meta_data *)(bh->b_data);
-+      index = find_snap_meta_index(s_attr, name);
-+      if (index < 0 && !buf) {        
-+              snap_debug("%s meta attr of table ino %lu do not exist\n", 
-+                          name, inode->i_ino);
-+                error = 0;
-+              brelse(bh);
-+              goto exit;
-+      }
-+      if (!buf) {
-+              snap_debug("delete the meta attr %s in the table ino %lu",
-+                         name, inode->i_ino);
-+              /*Here we only delete the entry of the attr
-+               *FIXME, should we also delete the block of 
-+               * this attr
-+               */
-+              ext3_journal_get_write_access(handle, bh);
-+              memset(s_attr->array[index].name, 0, TABLE_ITEM_NAME_SIZE);
-+              s_attr->array[index].len = 0;
-+              s_attr->count --;
-+              ext3_journal_dirty_metadata(handle, bh);
-+              brelse(bh);
-+              goto exit;
-+      }
-+      new_len = (size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
-+      /*find the place to put this attr in that index*/
-+      ext3_journal_get_write_access(handle, bh);
-+      if (index < 0){
-+              index = set_snap_meta_index(s_attr, name, size);
-+              if (index < 0){
-+                      snap_err("table full of ino %lu \n", inode->i_ino);
-+                      error = index;
-+                      brelse(bh);
-+                      goto exit;
-+              }
-+      }
-+      s_attr->array[index].len = size;
-+      journal_dirty_metadata(handle, bh);
-+      brelse(bh);
-+      /*put this attr to the snap table*/
-+      left_size = size;
-+      for(i = 0; i < new_len; i++) {
-+              struct buffer_head *array_bh = NULL;
-+              
-+              array_bh = ext3_bread(handle, inode, 
-+                                    s_attr->array[index].start + i, 1, &error);
-+              if (!array_bh) {
-+                      snap_err("inode %lu Can not get the block of attr %s\n",  
-+                                inode->i_ino, name);
-+                      error = -ENOSPC;
-+                      brelse(array_bh);
-+                      goto exit;
-+              }
-+              ext3_journal_get_write_access(handle, array_bh);
-+              if (left_size > inode->i_sb->s_blocksize)       
-+                      memcpy(array_bh->b_data, buf, inode->i_sb->s_blocksize);
-+              else
-+                      memcpy(array_bh->b_data, buf, left_size);
-+              ext3_journal_dirty_metadata(handle, array_bh);
-+              left_size -= inode->i_sb->s_blocksize;
-+              brelse(array_bh);
-+      }
-+exit:
-+      if (handle)
-+              ext3_journal_stop(handle, sb->s_root->d_inode); 
-+      iput(inode);
-+      return error;
-+}
-+
-+struct snapshot_operations ext3_snap_operations = {
-+      ops_version:            SNAP_VERSION(2,0,2),
-+      is_redirector:          is_redirector,
-+      is_indirect:            is_indirect,
-+      create_indirect:        ext3_create_indirect,
-+      get_indirect:           ext3_get_indirect,
-+        get_indirect_ino:     ext3_get_indirect_ino,
-+      destroy_indirect:       ext3_destroy_indirect,
-+      restore_indirect:       ext3_restore_indirect,
-+      iterate:                ext3_iterate,
-+      copy_block:             ext3_copy_block,
-+      set_indirect:           ext3_set_indirect,
-+      snap_feature:           ext3_snap_feature,
-+      get_generation:         ext3_get_generation,
-+      set_generation:         ext3_set_generation,
-+      get_meta_attr:          ext3_get_meta_attr,
-+      set_meta_attr:          ext3_set_meta_attr,                             
-+};
-+
-+EXPORT_SYMBOL(ext3_snap_operations);
-+#ifdef SNAP_PROFILE
-+EXPORT_SYMBOL(prof_snapdel);
-+#endif
-+
-+#ifdef SNAP_DEBUG_IOC
-+
-+static int print_inode(struct inode *pri, void *index_val)
-+{
-+
-+      int err=0;
-+      struct snap_ea *snaps;
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      int index = *(int *)index_val;
-+
-+      err = ext3_xattr_get(primary, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                              buf, EXT3_MAX_SNAP_DATA);
-+      
-+      if (err == -ENODATA) {
-+              memset(buf, 0, EXT3_MAX_SNAP_DATA);
-+      } 
-+      else if (err < 0) {
-+              snap_err("got err %d when reading attributes\n", err);
-+              goto err_exit;
-+      }
-+
-+      snaps = (struct snap_ea *) buf;
-+
-+      if( le32_to_cpu(snaps->ino[index]) == 0 ) {
-+              snap_debug("no redirected ino for primary inode %lu\n",
-+                              primary->i_ino);
-+      }
-+      else {
-+              snap_debug("primary inode %lu , redirected ino=%d\n",
-+                              primary->i_ino,le32_to_cpu(snaps->ino[index]));
-+      }
-+err_exit:
-+      return err;
-+}
-+
-+int snap_print(struct super_block *sb, int index)
-+{
-+      ext3_iterate_cowed_inode(sb, &print_inode, NULL, &index);
-+      return 0;
-+}
-+
-+static int ext3_snap_destroy_inode(struct inode *primary,void *index_val)
-+{
-+      int index = *(int *)index_val;
-+      int rc = 0;
-+      printk("delete_inode for index %d\n",index);
-+      rc = ext3_destroy_indirect(primary,index, NULL);
-+      if(rc != 0)     
-+              printk("ERROR:ext3_destroy_indirect(ino %lu,index %d),ret %d\n",                        
-+                                              primary->i_ino, index, rc);
-+      return 0;
-+}
-+
-+int ext3_snap_delete(struct super_block *sb, int index)
-+{
-+      ext3_iterate(sb, &ext3_snap_destroy_inode, NULL, &index, 
-+                                      SNAP_ITERATE_COWED_INODE);
-+      return 0;
-+}
-+#endif
-+
-+
-+
-+
-+
-+
-+
-+
-Index: linux-2.4.20-8/fs/ext3/Makefile
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/Makefile       2004-01-27 20:21:42.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/Makefile    2004-01-27 22:45:56.000000000 +0800
-@@ -13,7 +13,7 @@
- obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
-               ioctl.o namei.o super.o symlink.o hash.o ext3-exports.o \
--              xattr_trusted.o extents.o
-+              xattr_trusted.o extents.o snap.o
- obj-m    := $(O_TARGET)
- export-objs += xattr.o
-Index: linux-2.4.20-8/fs/ext3/inode.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/inode.c        2004-01-27 19:34:11.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/inode.c     2004-01-27 22:45:56.000000000 +0800
-@@ -1200,7 +1200,7 @@
-  * So, if we see any bmap calls here on a modified, data-journaled file,
-  * take extra steps to flush any blocks which might be in the cache. 
-  */
--static int ext3_bmap(struct address_space *mapping, long block)
-+int ext3_bmap(struct address_space *mapping, long block)
- {
-       struct inode *inode = mapping->host;
-       journal_t *journal;
-Index: linux-2.4.20-8/fs/ext3/ialloc.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/ialloc.c       2004-01-27 19:34:11.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/ialloc.c    2004-01-27 22:45:56.000000000 +0800
-@@ -160,6 +160,13 @@
-       return retval;
- }
-+/* Export load_inode_bitmap*/
-+int ext3_load_inode_bitmap (struct super_block * sb,
-+                           unsigned int block_group)
-+{
-+       return load_inode_bitmap(sb, block_group);
-+}
-+
- /*
-  * NOTE! When we get the inode, we're the only people
-  * that have access to it, and as such there are no
-Index: linux-2.4.20-8/fs/ext3/super.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/super.c        2004-01-27 19:34:11.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/super.c     2004-01-27 22:45:56.000000000 +0800
-@@ -1333,6 +1333,13 @@
-       sbi->s_mount_state = le16_to_cpu(es->s_state);
-       sbi->s_addr_per_block_bits = log2(EXT3_ADDR_PER_BLOCK(sb));
-       sbi->s_desc_per_block_bits = log2(EXT3_DESC_PER_BLOCK(sb));
-+#define EXT3_SNAP_FS
-+#ifdef EXT3_SNAP_FS
-+      init_MUTEX(&(sbi->s_snap_list_sem));
-+      sbi->s_snaptable_ino = le32_to_cpu(es->s_snaptable_ino);
-+      sbi->s_first_cowed_pri_ino = le32_to_cpu(es->s_first_cowed_pri_ino);
-+      sbi->s_last_cowed_pri_ino = le32_to_cpu(es->s_last_cowed_pri_ino);
-+#endif        
-       for (i=0; i < 4; i++)
-               sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);
-       sbi->s_def_hash_version = es->s_def_hash_version;
-Index: linux-2.4.20-8/fs/ext3/ext3-exports.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/ext3-exports.c 2004-01-27 19:33:57.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/ext3-exports.c      2004-01-27 22:45:56.000000000 +0800
-@@ -21,6 +21,8 @@
- EXPORT_SYMBOL(ext3_xattr_set);
- EXPORT_SYMBOL(ext3_prep_san_write);
- EXPORT_SYMBOL(ext3_map_inode_page);
-+EXPORT_SYMBOL(ext3_orphan_add);
-+EXPORT_SYMBOL(ext3_orphan_del);
- EXPORT_SYMBOL(ext3_abort);
- EXPORT_SYMBOL(ext3_decode_error);
-Index: linux-2.4.20-8/include/linux/snap.h
-===================================================================
---- linux-2.4.20-8.orig/include/linux/snap.h   2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-8/include/linux/snap.h        2004-01-27 22:45:56.000000000 +0800
-@@ -0,0 +1,266 @@
-+/*
-+ * Copyright (c) 2002 Cluster File Systems, Inc. <info@clusterfs.com>
-+ * started by Andreas Dilger <adilger@turbolinux.com>
-+ *            Peter Braam <braam@mountainviewdata.com>
-+ *            Harrison Xing <harrisonx@mountainviewdata.com>
-+ * 
-+ * Redesigned 2003 by Peter Braam <braam@clusterfs.com>
-+ *                  Eric Mei    <Ericm@clusterfs.com>
-+ *                  Wang Di     <wangdi@clusterfs.com>
-+ * 
-+ * Rewriten   2003  by Wang Di  <wangdi@clusterfs.com>
-+ *                    Eric Mei <ericm@clusterfs.com>
-+ *
-+ * Functions for implementing snapshots in the ext3 filesystem.  They are
-+ * intended to hide the internals of the filesystem from the caller in
-+ * such a way that the caller doesn't need to know about inode numbers,
-+ * how the redirectors are implemented or stored, etc.  It may not do that
-+ * all yet, but it tries.
-+ *
-+ * The snapshot inode redirection is stored in the primary/direct inode as
-+ * an extended attribute $snap, in the form of little-endian u32 inode
-+ * numbers. 
-+ *   
-+ */
-+
-+#ifndef _LINUX_SNAP_H
-+#define _LINUX_SNAP_H
-+
-+#include <linux/fs.h>
-+
-+/* maximum number of snapshots available for users */
-+#define MAX_SNAPS     20      
-+
-+/* snap extended attributes definition */
-+#define SNAP_ATTR     "@snap"
-+struct snap_ea{                       
-+      int   generation;
-+      ino_t prev_ino;
-+      ino_t next_ino;
-+      ino_t ino[MAX_SNAPS+1]; /* including current snapshot */
-+      ino_t parent_ino[MAX_SNAPS+1];
-+};
-+#define MAX_SNAP_DATA (sizeof(struct snap_ea))
-+#if 0
-+/* for compatibility with old 128 max snapshots */
-+#define MAX_SNAP128_DATA (sizeof(struct snap_ea) - (sizeof(ino_t) * 128 * 2))
-+#define ZERO_SNAP_ATTR_TOP(buf)                                               \
-+      do {                                                            \
-+              struct snap_ea *p = (struct snap_ea*)buf;               \
-+              memset(&p->ino[129], 0, sizeof(ino_t)*128);             \
-+              memset(&p->parent_ino[129], 0, sizeof(ino_t)*128);      \
-+      } while(0)
-+
-+/* snap new ea definition , for logging of new inode */
-+#define SNAP_NEW_INO_ATTR     "@snap_new"
-+struct snap_new_ea{                   
-+      ino_t prev_ino; /* reserved. save the inode to a linked list */
-+      ino_t next_ino;
-+      int new_index;  /* indicate for which index this is a new inode */
-+};
-+#define NULL_NEW_INDEX        -1      /* null new index, to clear the snap_new_ea */
-+
-+/* ea to identiry a indirect inode's infomation */
-+#define SNAP_INDIRECT_INFO_ATTR       "@snap_indirect_inode_info"
-+struct snap_indirect_info {
-+      __u32 index; /* which index belongs to */
-+      __u32 reserved[3]; /* reserved */
-+};
-+#endif
-+
-+/* snapfs meta data stored in extended attributes of root ino */
-+#define DISK_SNAP_META_ATTR   "@disk_snap_meta_attr"
-+struct disk_snap_meta_data {
-+      ino_t snap_first_cowed_ino;
-+      ino_t snap_table_ino;
-+      __u32 snap_feature_compat;
-+};
-+/*snapfs quota info */
-+
-+#define SNAP_USR_QUOTA                0
-+#define SNAP_GRP_QUOTA                1
-+#define DISK_SNAP_QUOTA_INFO  "@disk_snap_quota_info"
-+struct quota_info_len {
-+      int     uid_len;     /*uid quota info length */
-+      int     gid_len;     /*gid quota info length */
-+};
-+/*
-+ * Check if the EA @name is Snap EA or not.
-+ * Snap EA includes the SNAP_ATTR, SNAP_NEW_INO_ATTR and DISK_SNAP_META_ATTR
-+ */
-+
-+#define IS_SNAP_EA(name) ( (!strcmp((name), SNAP_ATTR)) ||            \
-+                         (!strcmp((name), DISK_SNAP_META_ATTR)))
-+
-+
-+
-+/* file system features */
-+#define SNAP_FEATURE_COMPAT_SNAPFS              0x0010
-+#define SNAP_FEATURE_COMPAT_BLOCKCOW            0x0020
-+
-+/* constants for snap_feature operations */
-+#define SNAP_CLEAR_FEATURE    0x0
-+#define SNAP_SET_FEATURE      0x1
-+#define SNAP_HAS_FEATURE      0x2
-+
-+/* snap flags for inode, within 1 byte range, each occupy 1 bit */
-+#define SNAP_INO_MAGIC        0x88            /* magic for snap inode */
-+#define SNAP_COW_FLAG 0x01            /* snap redirected inode */
-+#define SNAP_DEL_FLAG 0x02            /* snap deleted inode */
-+#define SNAP_TABLE_FLAG       0x04            /* snap table inode */
-+#define SNAP_PRI_FLAG 0x08            /* primary inode */
-+
-+/* no snapfs attributes for get_indirect_ino */
-+#define ENOSNAPATTR   320
-+
-+/* constants used by iterator */
-+#define SNAP_ITERATE_ALL_INODE          0x0
-+#define SNAP_ITERATE_COWED_INODE        0x1
-+
-+/* constants used by create_indirect */
-+#define SNAP_CREATE_IND_NORMAL                0x0
-+#define       SNAP_CREATE_IND_DEL_PRI         0x1
-+
-+/* the data structure represent in the xfs_dinode.pad
-+      offset  0:      magic   (1 byte)
-+      offset  1:      flag    (1 byte)
-+      offset  2:      gen     (4 bytes)
-+      offset  6:      unused
-+ */
-+#define SIZEOF_MAGIC          1
-+#define SIZEOF_FLAG           1
-+#define SIZEOF_GENERATION     4
-+
-+#define MAGIC_OFFSET          0
-+#define FLAG_OFFSET           1
-+#define GENERATION_OFFSET     2
-+
-+#define SNAP_GET_DINODE_MAGIC(dinode) \
-+              (((__u8*)(dinode)->di_pad)[MAGIC_OFFSET])
-+#define SNAP_SET_DINODE_MAGIC(dinode) \
-+              ((__u8*)(dinode)->di_pad)[MAGIC_OFFSET] = (SNAP_INO_MAGIC)
-+#define SNAP_GET_DINODE_FLAG(dinode)  \
-+              (((__u8*)(dinode)->di_pad)[FLAG_OFFSET])
-+#define SNAP_SET_DINODE_FLAG(dinode, flag)    \
-+              (((__u8*)(dinode)->di_pad)[FLAG_OFFSET] |= (flag))
-+#define SNAP_CLEAR_DINODE_FLAG(dinode, flag)  \
-+              (((__u8*)(dinode)->di_pad)[FLAG_OFFSET] &= ~(flag))
-+#define SNAP_GET_DINODE_GEN(dinode)   \
-+              (le32_to_cpu(*(__u32*)(&((__u8*)(dinode)->di_pad)[GENERATION_OFFSET])))
-+#define SNAP_SET_DINODE_GEN(dinode, gen)      \
-+              *(__u32*)(&((__u8*)(dinode)->di_pad)[GENERATION_OFFSET]) = cpu_to_le32(gen)
-+
-+#if 0
-+/* header of saving snaptable */
-+struct raw_data {
-+      unsigned int size;      /* buffer size passed by */
-+      char data[0];           /* followed by actual data */
-+};
-+
-+/* header of on-disk table data */
-+struct disk_snap_table_header {
-+      __u32   magic;
-+      __u32   version;
-+      __u32   datasize;
-+};
-+
-+/* table magic and version constant */
-+#define SNAP_TABLE_MAGIC      0xB3A2957F
-+#define SNAP_TABLE_VERSION    1
-+
-+
-+#define SNAPTABLE_BLOCKS(sb,size)     \
-+              (((size-sizeof(__u32)+sizeof(struct disk_snap_table_header)) \
-+              >> sb->s_blocksize_bits)+1)
-+#endif
-+
-+#define SNAP_VERSION(a,b,c)           \
-+              (((a & 0xFF) << 16) | ((b & 0xFF) << 8) | (c & 0xFF))
-+#define SNAP_VERSION_MAJOR(v)         \
-+              ((v >> 16) & 0xFF)
-+#define SNAP_VERSION_MINOR(v)         \
-+              ((v >> 8) & 0xFF)
-+#define SNAP_VERSION_REL(v)           \
-+              (v & 0xFF)
-+
-+/* for snap meta attr table */
-+#define TABLE_ITEM_COUNT      200
-+#define TABLE_ITEM_SIZE               1000
-+#define TABLE_ITEM_NAME_SIZE  16
-+
-+/*snap table array */
-+struct snap_meta_array {
-+      char    name[TABLE_ITEM_NAME_SIZE];
-+      int     start;  /* where is the start of the array */
-+      int     len;  /* the len of the array */
-+}; 
-+/* snap table structure for record the information */
-+struct table_snap_meta_data {
-+      int                     count;
-+      struct snap_meta_array  array[TABLE_ITEM_COUNT]; 
-+};
-+
-+
-+#if 0
-+#define SNAP_PROFILE
-+#else
-+#undef SNAP_PROFILE
-+#endif
-+
-+#ifdef SNAP_PROFILE
-+struct profile_snapdel_stat
-+{
-+      unsigned long total_tick;               /* total time */
-+      unsigned long inodes;                   /* primary inodes */
-+
-+      unsigned long yield_count;              /* for yeild cpu */
-+      unsigned long yield_tick;
-+      unsigned long yield_max_tick;
-+
-+      unsigned long getea_count;              /* for get ea */
-+      unsigned long getea_tick;
-+      unsigned long getea_max_tick;
-+
-+      unsigned long setea_count;              /* for set ea */
-+      unsigned long setea_tick;
-+      unsigned long setea_max_tick;
-+
-+      unsigned long converge_count;           /* for converge */
-+      unsigned long converge_tick;
-+      unsigned long converge_max_tick;
-+};
-+
-+#endif
-+
-+/* snapshot operations */
-+struct snapshot_operations {
-+      unsigned int ops_version;
-+        int (*is_redirector) (struct inode *inode);
-+      int (*is_indirect) (struct inode *inode);
-+        struct inode * (*create_indirect) (struct inode *pri, int index,
-+                                         unsigned int gen, ino_t parent_ino,
-+                                         int del);
-+        struct inode * (*get_indirect) (struct inode *pri, int *table,int slot);
-+        ino_t (*get_indirect_ino) (struct inode *pri, int index);
-+        int (*destroy_indirect) (struct inode *pri, int index, 
-+                              struct inode *next_ind);
-+        int (*restore_indirect) (struct inode *pri, int index);
-+        int (*iterate) (struct super_block *sb,
-+                        int (*repeat)(struct inode *inode, void *priv),
-+                        struct inode **start, void *priv, int flag);
-+        int (*copy_block) ( struct inode *dst, struct inode *src, int blk);
-+      int (*has_block) (struct inode *dst, int blk);
-+      int (*set_indirect) (struct inode *pri, int index, 
-+                           ino_t ind_ino, ino_t parent_ino );
-+      int (*snap_feature) (struct super_block *sb, int feature, int op);
-+      int (*get_generation) (struct inode *pri);
-+      int (*set_generation) (struct inode *pri, unsigned long new_gen);
-+      int (*has_del_flag) (struct inode *inode);
-+      int (*clear_del_flag) (struct inode *inode);
-+      int (*set_meta_attr)(struct super_block *sb, char *name,
-+                              char *buf, int size);
-+      int (*get_meta_attr)(struct super_block *sb, char *name,
-+                              char *buf, int *size);
-+};
-+
-+#endif
-Index: linux-2.4.20-8/include/linux/ext3_fs.h
-===================================================================
---- linux-2.4.20-8.orig/include/linux/ext3_fs.h        2004-01-27 20:21:43.000000000 +0800
-+++ linux-2.4.20-8/include/linux/ext3_fs.h     2004-01-27 22:45:56.000000000 +0800
-@@ -186,6 +186,13 @@
- #define EXT3_RESERVED_FL              0x80000000 /* reserved for ext3 lib */
- #define EXT3_EXTENTS_FL                       0x00080000 /* Inode uses extents */
-+/* For snapfs in EXT3 flags --- FIXME will find other ways to store it*/
-+#define EXT3_COW_FL                   0x00008000 /* inode is snapshot cow */
-+#define EXT3_DEL_FL                   0x00010000 /* inode is deleting in snapshot */
-+#define EXT3_SNAP_TABLE_FLAG                  0x00020000 /* snap table inode */
-+ /* FIXME For debugging will be removed later*/
-+#define EXT3_SNAP_PRI_FLAG            0x00040000 /* primary inode */
-+ 
- #define EXT3_FL_USER_VISIBLE          0x00005FFF /* User visible flags */
- #define EXT3_FL_USER_MODIFIABLE               0x000000FF /* User modifiable flags */
-@@ -219,7 +226,22 @@
- #define       EXT3_IOC_EA_TREE_INIT           _IOW('f', 13, long)
- #define       EXT3_IOC_EA_TREE_ALLOCATE       _IOW('f', 14, long)
- #define       EXT3_IOC_EA_TREE_REMOVE         _IOW('f', 15, long)
--
-+/* the following are for temporary test */
-+/* snapfs ioctls */
-+#define EXT3_IOC_CREATE_INDIR           _IOW('v', 3, long)
-+#define EXT3_IOC_GET_INDIR              _IOW('v', 4, long)
-+#define EXT3_IOC_DESTROY_INDIR          _IOW('v', 5, long)
-+#define EXT3_IOC_IS_REDIR               _IOW('v', 6, long)
-+#define EXT3_IOC_RESTORE_INDIR          _IOW('v', 7, long)
-+ 
-+#define EXT3_IOC_SNAP_SETFILECOW       _IOW('v', 10, long)
-+ 
-+/* XXX: the following are for temporary test, can be removed later */
-+#define EXT3_IOC_SNAP_PRINT             _IOW('v', 11, long)
-+#define EXT3_IOC_SNAP_DELETE            _IOW('v', 12, long)
-+#define EXT3_IOC_SNAP_RESTORE           _IOW('v', 13, long)
-+ 
-+ 
- /*
-  * Structure of an inode on the disk
-@@ -443,7 +465,15 @@
-       __u8    s_def_hash_version;     /* Default hash version to use */
-       __u8    s_reserved_char_pad;
-       __u16   s_reserved_word_pad;
--      __u32   s_reserved[192];        /* Padding to the end of the block */
-+      __u32   s_default_mount_opts;
-+        __u32   s_first_meta_bg;        /* First metablock group */
-+      __u32   s_mkfs_time;            /* When the filesystem was created */
-+      /* for snapfs */
-+      __u32   s_first_cowed_pri_ino;  /* For snapfs,the first cowed primary inode */
-+      __u32   s_last_cowed_pri_ino;     /* last cowed ino in memory */
-+      __u32   s_snaptable_ino;        /* snaptable ino in memory */
-+      __u32   s_last_snap_orphan;     /* SnapFS: start of cowing indirect inode */
-+      __u32   s_reserved[186];        /* Padding to the end of the block,originally 204 */
- };
- #ifdef __KERNEL__
-@@ -517,6 +547,9 @@
- #define EXT3_FEATURE_INCOMPAT_RECOVER         0x0004 /* Needs recovery */
- #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008 /* Journal device */
-+#define EXT3_FEATURE_COMPAT_SNAPFS             0x0010
-+#define EXT3_FEATURE_COMPAT_BLOCKCOW           0x0020
-+
- #define EXT3_FEATURE_COMPAT_SUPP      EXT2_FEATURE_COMPAT_EXT_ATTR
- #define EXT3_FEATURE_INCOMPAT_SUPP    (EXT3_FEATURE_INCOMPAT_FILETYPE| \
-                                        EXT3_FEATURE_INCOMPAT_RECOVER)
-Index: linux-2.4.20-8/include/linux/ext3_fs_sb.h
-===================================================================
---- linux-2.4.20-8.orig/include/linux/ext3_fs_sb.h     2004-01-27 19:33:54.000000000 +0800
-+++ linux-2.4.20-8/include/linux/ext3_fs_sb.h  2004-01-27 22:45:56.000000000 +0800
-@@ -86,6 +86,13 @@
-       wait_queue_head_t s_delete_thread_queue;
-       wait_queue_head_t s_delete_waiter_queue;
- #endif
-+#define EXT3_SNAP_FS
-+#ifdef EXT3_SNAP_FS
-+      struct semaphore s_snap_list_sem;
-+      unsigned long   s_first_cowed_pri_ino;/* For snapfs,the first cowed primary inode */
-+      unsigned long   s_last_cowed_pri_ino;     /* last cowed ino in memory */
-+      unsigned long   s_snaptable_ino;      /* snaptable ino in memory */
-+#endif
- };
- #endif        /* _LINUX_EXT3_FS_SB */
-Index: linux-2.4.20-8/include/linux/ext3_jbd.h
-===================================================================
---- linux-2.4.20-8.orig/include/linux/ext3_jbd.h       2004-01-27 19:33:48.000000000 +0800
-+++ linux-2.4.20-8/include/linux/ext3_jbd.h    2004-01-27 22:45:56.000000000 +0800
-@@ -71,6 +71,33 @@
- #define EXT3_INDEX_EXTRA_TRANS_BLOCKS 8
-+/*snapshot transaction blocks*/
-+
-+#define EXT3_EA_TRANS_BLOCKS          EXT3_DATA_TRANS_BLOCKS
-+#define EXT3_SETMETA_TRANS_BLOCKS     EXT3_DATA_TRANS_BLOCKS
-+#define EXT3_NEWINODE_TRANS_BLOCKS    10
-+#define SNAP_INSERTLIST_TRANS_BLOCKS  (2 * EXT3_EA_TRANS_BLOCKS + 1)
-+#define SNAP_DELETELIST_TRANS_BLOCKS  (2 * EXT3_EA_TRANS_BLOCKS + 2)
-+#define SNAP_COPYBLOCK_TRANS_BLOCKS   (EXT3_DATA_TRANS_BLOCKS)
-+#define SNAP_MIGRATEDATA_TRANS_BLOCKS 2
-+#define SNAP_SETIND_TRANS_BLOCKS      (SNAP_INSERTLIST_TRANS_BLOCKS + 1)
-+#define SNAP_ADDORPHAN_TRANS_BLOCKS   2
-+#define SNAP_REMOVEORPHAN_TRANS_BLOCKS        1
-+#define SNAP_RESTOREORPHAN_TRANS_BLOCKS       (EXT3_EA_TRANS_BLOCKS + \
-+                                       SNAP_DELETELIST_TRANS_BLOCKS + \
-+                                       EXT3_NEWINODE_TRANS_BLOCKS + \
-+                                       2 * SNAP_MIGRATEDATA_TRANS_BLOCKS)
-+#define SNAP_BIGCOPY_TRANS_BLOCKS     (2 * EXT3_DATA_TRANS_BLOCKS)
-+#define SNAP_CREATEIND_TRANS_BLOCKS   (EXT3_NEWINODE_TRANS_BLOCKS + \
-+                                       SNAP_MIGRATEDATA_TRANS_BLOCKS + \
-+                                       SNAP_SETIND_TRANS_BLOCKS + \
-+                                       SNAP_BIGCOPY_TRANS_BLOCKS + 3)
-+#define SNAP_MIGRATEBLK_TRANS_BLOCKS  2
-+#define SNAP_DESTROY_TRANS_BLOCKS     (SNAP_DELETELIST_TRANS_BLOCKS + \
-+                                       EXT3_EA_TRANS_BLOCKS + 2)
-+#define SNAP_RESTORE_TRANS_BLOCKS     (EXT3_NEWINODE_TRANS_BLOCKS + \
-+                                       2 * SNAP_MIGRATEDATA_TRANS_BLOCKS + 1)
-+
- int
- ext3_mark_iloc_dirty(handle_t *handle, 
-                    struct inode *inode,
-
-%diffstat
- fs/ext3/Makefile           |    2 
- fs/ext3/ext3-exports.c     |    2 
- fs/ext3/ialloc.c           |    7 
- fs/ext3/inode.c            |    2 
- fs/ext3/snap.c             | 2578 +++++++++++++++++++++++++++++++++++++++++++++
- fs/ext3/super.c            |    7 
- include/linux/ext3_fs.h    |   37 
- include/linux/ext3_fs_sb.h |    7 
- include/linux/ext3_jbd.h   |   27 
- include/linux/snap.h       |  266 ++++
- 10 files changed, 2931 insertions(+), 4 deletions(-)
-
diff --git a/lustre/kernel_patches/patches/ext3-start_this_handle-must-return-error.patch b/lustre/kernel_patches/patches/ext3-start_this_handle-must-return-error.patch
deleted file mode 100644 (file)
index 10f0326..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Index: linux-2.6.0/fs/jbd/transaction.c
-===================================================================
---- linux-2.6.0.orig/fs/jbd/transaction.c      2004-01-05 16:18:59.000000000 +0300
-+++ linux-2.6.0/fs/jbd/transaction.c   2004-01-05 16:19:48.000000000 +0300
-@@ -85,7 +85,7 @@
-       int needed;
-       int nblocks = handle->h_buffer_credits;
-       transaction_t *new_transaction = NULL;
--      int ret;
-+      int ret = 0;
-       if (nblocks > journal->j_max_transaction_buffers) {
-               printk(KERN_ERR "JBD: %s wants too many credits (%d > %d)\n",
-@@ -231,7 +231,7 @@
- out:
-       if (new_transaction)
-               kfree(new_transaction);
--      return 0;
-+      return ret;
- }
- /* Allocate a new handle.  This should probably be in a slab... */
diff --git a/lustre/kernel_patches/patches/ext3-super-ntohl.patch b/lustre/kernel_patches/patches/ext3-super-ntohl.patch
new file mode 100644 (file)
index 0000000..3214908
--- /dev/null
@@ -0,0 +1,16 @@
+diff -rupN linux-2.6.6.old/fs/ext3/super.c linux-2.6.6.new/fs/ext3/super.c
+--- linux-2.6.6.old/fs/ext3/super.c    Mon May 10 05:33:19 2004
++++ linux-2.6.6.new/fs/ext3/super.c    Thu Jun 24 12:28:24 2004
+@@ -1719,10 +1719,10 @@ static journal_t *ext3_get_dev_journal(s
+               printk(KERN_ERR "EXT3-fs: I/O error on journal device\n");
+               goto out_journal;
+       }
+-      if (ntohl(journal->j_superblock->s_nr_users) != 1) {
++      if (be32_to_cpu(journal->j_superblock->s_nr_users) != 1) {
+               printk(KERN_ERR "EXT3-fs: External journal has more than one "
+                                       "user (unsupported) - %d\n",
+-                      ntohl(journal->j_superblock->s_nr_users));
++                      be32_to_cpu(journal->j_superblock->s_nr_users));
+               goto out_journal;
+       }
+       EXT3_SB(sb)->journal_bdev = bdev;
diff --git a/lustre/kernel_patches/patches/ext3-trusted_ea-2.4.18.patch b/lustre/kernel_patches/patches/ext3-trusted_ea-2.4.18.patch
deleted file mode 100644 (file)
index 4ee1e2c..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
- fs/ext3/xattr.c            |   12 +++++-
- fs/ext3/xattr_trusted.c    |   86 +++++++++++++++++++++++++++++++++++++++++++++
- include/linux/ext3_xattr.h |    6 +++
- 3 files changed, 102 insertions(+), 2 deletions(-)
-
-Index: linux-2.4.18-chaos/fs/ext3/xattr.c
-===================================================================
---- linux-2.4.18-chaos.orig/fs/ext3/xattr.c    2003-10-22 14:23:53.000000000 +0400
-+++ linux-2.4.18-chaos/fs/ext3/xattr.c 2003-10-24 01:01:03.000000000 +0400
-@@ -1789,18 +1789,25 @@
- int __init
- init_ext3_xattr(void)
- {
-+      int error;
-+
-       ext3_xattr_cache = mb_cache_create("ext3_xattr", NULL,
-               sizeof(struct mb_cache_entry) +
-               sizeof(struct mb_cache_entry_index), 1, 61);
-       if (!ext3_xattr_cache)
-               return -ENOMEM;
--      return 0;
-+      error = init_ext3_xattr_trusted();
-+      if (error)
-+              mb_cache_destroy(ext3_xattr_cache);
-+
-+      return error;
- }
- void
- exit_ext3_xattr(void)
- {
-+      exit_ext3_xattr_trusted();
-       if (ext3_xattr_cache)
-               mb_cache_destroy(ext3_xattr_cache);
-       ext3_xattr_cache = NULL;
-@@ -1811,12 +1818,13 @@
- int __init
- init_ext3_xattr(void)
- {
--      return 0;
-+      return init_ext3_xattr_trusted();
- }
- void
- exit_ext3_xattr(void)
- {
-+      exit_ext3_xattr_trusted();
- }
- #endif  /* CONFIG_EXT3_FS_XATTR_SHARING */
-Index: linux-2.4.18-chaos/fs/ext3/xattr_trusted.c
-===================================================================
---- linux-2.4.18-chaos.orig/fs/ext3/xattr_trusted.c    2003-10-24 01:01:03.000000000 +0400
-+++ linux-2.4.18-chaos/fs/ext3/xattr_trusted.c 2003-10-24 01:01:03.000000000 +0400
-@@ -0,0 +1,86 @@
-+/*
-+ * linux/fs/ext3/xattr_trusted.c
-+ * Handler for trusted extended attributes.
-+ *
-+ * Copyright (C) 2003 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/string.h>
-+#include <linux/fs.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
-+
-+#define XATTR_TRUSTED_PREFIX "trusted."
-+
-+static size_t
-+ext3_xattr_trusted_list(char *list, struct inode *inode,
-+                      const char *name, int name_len)
-+{
-+      const int prefix_len = sizeof(XATTR_TRUSTED_PREFIX)-1;
-+
-+      if (!capable(CAP_SYS_ADMIN))
-+              return 0;
-+
-+      if (list) {
-+              memcpy(list, XATTR_TRUSTED_PREFIX, prefix_len);
-+              memcpy(list+prefix_len, name, name_len);
-+              list[prefix_len + name_len] = '\0';
-+      }
-+      return prefix_len + name_len + 1;
-+}
-+
-+static int
-+ext3_xattr_trusted_get(struct inode *inode, const char *name,
-+                     void *buffer, size_t size)
-+{
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!capable(CAP_SYS_ADMIN))
-+              return -EPERM;
-+      return ext3_xattr_get(inode, EXT3_XATTR_INDEX_TRUSTED, name,
-+                            buffer, size);
-+}
-+
-+static int
-+ext3_xattr_trusted_set(struct inode *inode, const char *name,
-+                     const void *value, size_t size, int flags)
-+{
-+      handle_t *handle;
-+      int error;
-+
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!capable(CAP_SYS_ADMIN))
-+              return -EPERM;
-+      handle = ext3_journal_start(inode, EXT3_XATTR_TRANS_BLOCKS);
-+      if (IS_ERR(handle))
-+              return PTR_ERR(handle);
-+      error = ext3_xattr_set(handle, inode, EXT3_XATTR_INDEX_TRUSTED, name,
-+                             value, size, flags);
-+      ext3_journal_stop(handle, inode);
-+
-+      return error;
-+}
-+
-+struct ext3_xattr_handler ext3_xattr_trusted_handler = {
-+      .prefix = XATTR_TRUSTED_PREFIX,
-+      .list   = ext3_xattr_trusted_list,
-+      .get    = ext3_xattr_trusted_get,
-+      .set    = ext3_xattr_trusted_set,
-+};
-+
-+int __init
-+init_ext3_xattr_trusted(void)
-+{
-+      return ext3_xattr_register(EXT3_XATTR_INDEX_TRUSTED,
-+                                 &ext3_xattr_trusted_handler);
-+}
-+
-+void
-+exit_ext3_xattr_trusted(void)
-+{
-+      ext3_xattr_unregister(EXT3_XATTR_INDEX_TRUSTED,
-+                            &ext3_xattr_trusted_handler);
-+}
-Index: linux-2.4.18-chaos/include/linux/ext3_xattr.h
-===================================================================
---- linux-2.4.18-chaos.orig/include/linux/ext3_xattr.h 2003-10-22 14:23:51.000000000 +0400
-+++ linux-2.4.18-chaos/include/linux/ext3_xattr.h      2003-10-24 01:01:03.000000000 +0400
-@@ -19,6 +19,10 @@
- /* Name indexes */
- #define EXT3_XATTR_INDEX_MAX                  10
- #define EXT3_XATTR_INDEX_USER                 1
-+#define EXT3_XATTR_INDEX_TRUSTED              4
-+#define EXT3_XATTR_INDEX_LUSTRE                       5
-+#define EXT3_XATTR_INDEX_SECURITY             6
-+  
- struct ext3_xattr_header {
-       __u32   h_magic;        /* magic number for identification */
-@@ -82,6 +86,9 @@
- extern int init_ext3_xattr(void) __init;
- extern void exit_ext3_xattr(void);
-+extern int init_ext3_xattr_trusted(void) __init;
-+extern void exit_ext3_xattr_trusted(void);
-+
- # else  /* CONFIG_EXT3_FS_XATTR */
- #  define ext3_setxattr               NULL
- #  define ext3_getxattr               NULL
-Index: linux-2.4.18-chaos/fs/ext3/Makefile
-===================================================================
---- linux-2.4.18-chaos.orig/fs/ext3/Makefile   2003-10-22 14:23:53.000000000 +0400
-+++ linux-2.4.18-chaos/fs/ext3/Makefile        2003-10-24 01:02:28.000000000 +0400
-@@ -13,7 +13,7 @@
- obj-y    := balloc.o iopen.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
-               ioctl.o namei.o super.o symlink.o xattr.o ext3-exports.o \
--              extents.o
-+              extents.o xattr_trusted.o
- obj-m    := $(O_TARGET)
- include $(TOPDIR)/Rules.make
diff --git a/lustre/kernel_patches/patches/ext3-unmount_sync.patch b/lustre/kernel_patches/patches/ext3-unmount_sync.patch
deleted file mode 100644 (file)
index c57903c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
- fs/ext3/super.c |    7 ++++++-
- 1 files changed, 6 insertions(+), 1 deletion(-)
-
---- linux-2.4.20/fs/ext3/super.c~ext3-unmount_sync     2003-04-08 23:35:44.000000000 -0600
-+++ linux-2.4.20-braam/fs/ext3/super.c 2003-04-08 23:35:44.000000000 -0600
-@@ -1612,7 +1612,12 @@ void ext3_write_super (struct super_bloc
-       sb->s_dirt = 0;
-       target = log_start_commit(EXT3_SB(sb)->s_journal, NULL);
--      if (do_sync_supers) {
-+      /*
-+       * Tricky --- if we are unmounting, the write really does need
-+       * to be synchronous.  We can detect that by looking for NULL in
-+       * sb->s_root.
-+       */
-+      if (do_sync_supers || !sb->s_root) {
-               unlock_super(sb);
-               log_wait_commit(EXT3_SB(sb)->s_journal, target);
-               lock_super(sb);
-
-_
diff --git a/lustre/kernel_patches/patches/ext3-use-after-free-2.4.19-pre1.patch b/lustre/kernel_patches/patches/ext3-use-after-free-2.4.19-pre1.patch
deleted file mode 100644 (file)
index 595db54..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
- ./fs/ext3/namei.c |   11 +++++------
- 1 files changed, 5 insertions(+), 6 deletions(-)
-
-Index: linux-2.4.19-pre1/./fs/ext3/namei.c
-===================================================================
---- linux-2.4.19-pre1.orig/./fs/ext3/namei.c   2003-11-21 01:52:06.000000000 +0300
-+++ linux-2.4.19-pre1/./fs/ext3/namei.c        2003-11-21 01:58:15.000000000 +0300
-@@ -1522,8 +1522,11 @@
- {
-       int err = ext3_add_entry(handle, dentry, inode);
-       if (!err) {
--              d_instantiate(dentry, inode);
--              return 0;
-+              err = ext3_mark_inode_dirty(handle, inode);
-+              if (err == 0) {
-+                      d_instantiate(dentry, inode);
-+                      return 0;
-+              }
-       }
-       ext3_dec_count(handle, inode);
-       iput(inode);
-@@ -1559,7 +1562,6 @@
-               inode->i_op = &ext3_file_inode_operations;
-               inode->i_fop = &ext3_file_operations;
-               inode->i_mapping->a_ops = &ext3_aops;
--              ext3_mark_inode_dirty(handle, inode);
-               err = ext3_add_nondir(handle, dentry, inode);
-       }
-       ext3_journal_stop(handle, dir);
-@@ -1586,7 +1588,6 @@
-       err = PTR_ERR(inode);
-       if (!IS_ERR(inode)) {
-               init_special_inode(inode, mode, rdev);
--              ext3_mark_inode_dirty(handle, inode);
-               err = ext3_add_nondir(handle, dentry, inode);
-       }
-       ext3_journal_stop(handle, dir);
-@@ -2035,7 +2036,6 @@
-               inode->i_size = l-1;
-       }
-       inode->u.ext3_i.i_disksize = inode->i_size;
--      ext3_mark_inode_dirty(handle, inode);
-       err = ext3_add_nondir(handle, dentry, inode);
- out_stop:
-       ext3_journal_stop(handle, dir);
-@@ -2069,7 +2069,6 @@
-       ext3_inc_count(handle, inode);
-       atomic_inc(&inode->i_count);
--      ext3_mark_inode_dirty(handle, inode);
-       err = ext3_add_nondir(handle, dentry, inode);
-       ext3_journal_stop(handle, dir);
-       return err;
index 1dab6d8..7899354 100644 (file)
@@ -1,11 +1,11 @@
  ./fs/ext3/namei.c |   11 +++++------
  1 files changed, 5 insertions(+), 6 deletions(-)
 
-Index: linux-2.4.19.SuSE/./fs/ext3/namei.c
+Index: linux-2.4.19/fs/ext3/namei.c
 ===================================================================
---- linux-2.4.19.SuSE.orig/./fs/ext3/namei.c   Sun Nov 16 01:02:51 2003
-+++ linux-2.4.19.SuSE/./fs/ext3/namei.c        Sun Nov 16 01:14:50 2003
-@@ -1523,8 +1523,11 @@
+--- linux-2.4.19.orig/fs/ext3/namei.c  2004-04-23 22:30:41.000000000 -0400
++++ linux-2.4.19/fs/ext3/namei.c       2004-04-23 22:36:03.000000000 -0400
+@@ -1522,8 +1522,11 @@
  {
        int err = ext3_add_entry(handle, dentry, inode);
        if (!err) {
@@ -19,7 +19,7 @@ Index: linux-2.4.19.SuSE/./fs/ext3/namei.c
        }
        ext3_dec_count(handle, inode);
        iput(inode);
-@@ -1560,7 +1563,6 @@
+@@ -1559,7 +1562,6 @@
                inode->i_op = &ext3_file_inode_operations;
                inode->i_fop = &ext3_file_operations;
                inode->i_mapping->a_ops = &ext3_aops;
@@ -27,7 +27,7 @@ Index: linux-2.4.19.SuSE/./fs/ext3/namei.c
                err = ext3_add_nondir(handle, dentry, inode);
        }
        ext3_journal_stop(handle, dir);
-@@ -1590,7 +1592,6 @@
+@@ -1589,7 +1591,6 @@
  #ifdef CONFIG_EXT3_FS_XATTR
                inode->i_op = &ext3_special_inode_operations;
  #endif
diff --git a/lustre/kernel_patches/patches/extN-noread.patch b/lustre/kernel_patches/patches/extN-noread.patch
deleted file mode 100644 (file)
index 305f6fd..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
- fs/ext3/ialloc.c        |   47 +++++++++++++++++++++-
- fs/ext3/inode.c         |   99 ++++++++++++++++++++++++++++++++++++------------
- include/linux/ext3_fs.h |    2 
- 3 files changed, 122 insertions(+), 26 deletions(-)
-
---- linux-2.4.18-chaos52/fs/ext3/ialloc.c~extN-noread  2003-05-16 12:26:29.000000000 +0800
-+++ linux-2.4.18-chaos52-root/fs/ext3/ialloc.c 2003-05-16 12:26:31.000000000 +0800
-@@ -289,6 +289,37 @@ error_return:
- }
- /*
-+ * @block_group: block group of inode
-+ * @offset: relative offset of inode within @block_group
-+ *
-+ * Check whether any of the inodes in this disk block are in use.
-+ *
-+ * Caller must be holding superblock lock (group/bitmap read lock in future).
-+ */
-+int ext3_itable_block_used(struct super_block *sb, unsigned int block_group,
-+                         int offset)
-+{
-+      int bitmap_nr = load_inode_bitmap(sb, block_group);
-+      int inodes_per_block;
-+      unsigned long inum, iend;
-+      struct buffer_head *ibitmap;
-+
-+      if (bitmap_nr < 0)
-+              return 1;
-+
-+      inodes_per_block = sb->s_blocksize / EXT3_SB(sb)->s_inode_size;
-+      inum = offset & ~(inodes_per_block - 1);
-+      iend = inum + inodes_per_block;
-+      ibitmap = EXT3_SB(sb)->s_inode_bitmap[bitmap_nr];
-+      for (; inum < iend; inum++) {
-+              if (inum != offset && ext3_test_bit(inum, ibitmap->b_data))
-+                      return 1;
-+      }
-+
-+      return 0;
-+}
-+
-+/*
-  * There are two policies for allocating an inode.  If the new inode is
-  * a directory, then a forward search is made for a block group with both
-  * free space and a low directory-to-inode ratio; if that fails, then of
-@@ -312,6 +343,7 @@ struct inode * ext3_new_inode (handle_t 
-       struct ext3_group_desc * gdp;
-       struct ext3_group_desc * tmp;
-       struct ext3_super_block * es;
-+      struct ext3_iloc iloc;
-       int err = 0;
-       /* Cannot create files in a deleted directory */
-@@ -505,7 +537,7 @@ repeat:
-       ei->i_prealloc_count = 0;
- #endif
-       ei->i_block_group = i;
--      
-+
-       if (ei->i_flags & EXT3_SYNC_FL)
-               inode->i_flags |= S_SYNC;
-       if (IS_SYNC(inode))
-@@ -514,9 +546,18 @@ repeat:
-       inode->i_generation = sbi->s_next_generation++;
-       ei->i_state = EXT3_STATE_NEW;
--      err = ext3_mark_inode_dirty(handle, inode);
-+      err = ext3_get_inode_loc_new(inode, &iloc, 1);
-       if (err) goto fail;
--      
-+      BUFFER_TRACE(iloc->bh, "get_write_access");
-+      err = ext3_journal_get_write_access(handle, iloc.bh);
-+      if (err) {
-+              brelse(iloc.bh);
-+              iloc.bh = NULL;
-+              goto fail;
-+      }
-+      err = ext3_mark_iloc_dirty(handle, inode, &iloc);
-+      if (err) goto fail;
-+
-       unlock_super (sb);
-       if(DQUOT_ALLOC_INODE(inode)) {
-               DQUOT_DROP(inode);
---- linux-2.4.18-chaos52/fs/ext3/inode.c~extN-noread   2003-05-16 12:26:29.000000000 +0800
-+++ linux-2.4.18-chaos52-root/fs/ext3/inode.c  2003-05-16 12:27:06.000000000 +0800
-@@ -2013,21 +2013,26 @@ out_stop:
--/* 
-- * ext3_get_inode_loc returns with an extra refcount against the
-- * inode's underlying buffer_head on success. 
-- */
-+#define NUM_INODE_PREREAD     16
--int ext3_get_inode_loc (struct inode *inode, struct ext3_iloc *iloc)
-+/*
-+ * ext3_get_inode_loc returns with an extra refcount against the inode's
-+ * underlying buffer_head on success.  If this is for a new inode allocation
-+ * (new is non-zero) then we may be able to optimize away the read if there
-+ * are no other in-use inodes in this inode table block.  If we need to do
-+ * a read, then read in a whole chunk of blocks to avoid blocking again soon
-+ * if we are doing lots of creates/updates.
-+ */
-+int ext3_get_inode_loc_new(struct inode *inode, struct ext3_iloc *iloc, int new)
- {
-       struct super_block *sb = inode->i_sb;
-       struct ext3_sb_info *sbi = EXT3_SB(sb);
--      struct buffer_head *bh = 0;
-+      struct buffer_head *bh[NUM_INODE_PREREAD];
-       unsigned long block;
-       unsigned long block_group;
-       unsigned long group_desc;
-       unsigned long desc;
-       unsigned long offset;
-       struct ext3_group_desc * gdp;
--              
-+
-       if ((inode->i_ino != EXT3_ROOT_INO &&
-               inode->i_ino != EXT3_JOURNAL_INO &&
-               inode->i_ino < EXT3_FIRST_INO(sb)) ||
-@@ -2042,38 +2047,86 @@ int ext3_get_inode_loc (struct inode *in
-       }
-       group_desc = block_group >> sbi->s_desc_per_block_bits;
-       desc = block_group & (sbi->s_desc_per_block - 1);
--      bh = sbi->s_group_desc[group_desc];
--      if (!bh) {
-+      if (!sbi->s_group_desc[group_desc]) {
-               ext3_error(sb, __FUNCTION__, "Descriptor not loaded");
-               goto bad_inode;
-       }
--      gdp = (struct ext3_group_desc *) bh->b_data;
-+      gdp = (struct ext3_group_desc *)(sbi->s_group_desc[group_desc]->b_data);
-+
-       /*
-        * Figure out the offset within the block group inode table
-        */
--      offset = ((inode->i_ino - 1) % sbi->s_inodes_per_group) *
--              sbi->s_inode_size;
-+      offset = ((inode->i_ino - 1) % sbi->s_inodes_per_group);
-+
-       block = le32_to_cpu(gdp[desc].bg_inode_table) +
--              (offset >> EXT3_BLOCK_SIZE_BITS(sb));
--      if (!(bh = sb_bread(sb, block))) {
--              ext3_error (sb, __FUNCTION__,
--                          "unable to read inode block - "
--                          "inode=%lu, block=%lu", inode->i_ino, block);
--              goto bad_inode;
-+              (offset * sbi->s_inode_size >> EXT3_BLOCK_SIZE_BITS(sb));
-+
-+      bh[0] = sb_getblk(sb, block);
-+      if (buffer_uptodate(bh[0]))
-+              goto done;
-+
-+      /* If we don't really need to read this block, and it isn't already
-+       * in memory, then we just zero it out.  Otherwise, we keep the
-+       * current block contents (deleted inode data) for posterity.
-+       */
-+      if (new && !ext3_itable_block_used(sb, block_group, offset)) {
-+              lock_buffer(bh[0]);
-+              memset(bh[0]->b_data, 0, bh[0]->b_size);
-+              mark_buffer_uptodate(bh[0], 1);
-+              unlock_buffer(bh[0]);
-+      } else {
-+              unsigned long block_end, itable_end;
-+              int count = 1;
-+
-+              itable_end = le32_to_cpu(gdp[desc].bg_inode_table) +
-+                              sbi->s_itb_per_group;
-+              block_end = block + NUM_INODE_PREREAD;
-+              if (block_end > itable_end)
-+                      block_end = itable_end;
-+
-+              for (++block; block < block_end; block++) {
-+                      bh[count] = sb_getblk(sb, block);
-+                      if (count && (buffer_uptodate(bh[count]) ||
-+                                    buffer_locked(bh[count]))) {
-+                              __brelse(bh[count]);
-+                      } else
-+                              count++;
-+              }
-+
-+              ll_rw_block(READ, count, bh);
-+
-+              /* Release all but the block we actually need (bh[0]) */
-+              while (--count > 0)
-+                      __brelse(bh[count]);
-+
-+              wait_on_buffer(bh[0]);
-+              if (!buffer_uptodate(bh[0])) {
-+                      ext3_error(sb, __FUNCTION__,
-+                                 "unable to read inode block - "
-+                                 "inode=%lu, block=%lu", inode->i_ino,
-+                                 bh[0]->b_blocknr);
-+                      goto bad_inode;
-+              }
-       }
--      offset &= (EXT3_BLOCK_SIZE(sb) - 1);
-+ done:
-+      offset = (offset * sbi->s_inode_size) & (EXT3_BLOCK_SIZE(sb) - 1);
--      iloc->bh = bh;
--      iloc->raw_inode = (struct ext3_inode *) (bh->b_data + offset);
-+      iloc->bh = bh[0];
-+      iloc->raw_inode = (struct ext3_inode *)(bh[0]->b_data + offset);
-       iloc->block_group = block_group;
--      
-+
-       return 0;
--      
-+
-  bad_inode:
-       return -EIO;
- }
-+int ext3_get_inode_loc(struct inode *inode, struct ext3_iloc *iloc)
-+{
-+      return ext3_get_inode_loc_new(inode, iloc, 0);
-+}
-+
- void ext3_read_inode(struct inode * inode)
- {
-       struct ext3_iloc iloc;
---- linux-2.4.18-chaos52/include/linux/ext3_fs.h~extN-noread   2003-05-16 12:26:29.000000000 +0800
-+++ linux-2.4.18-chaos52-root/include/linux/ext3_fs.h  2003-05-16 12:26:31.000000000 +0800
-@@ -640,6 +640,8 @@ extern int ext3_forget(handle_t *, int, 
- extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
- extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
-+extern int ext3_itable_block_used(struct super_block *sb, unsigned int, int);
-+extern int ext3_get_inode_loc_new(struct inode *, struct ext3_iloc *, int);
- extern int  ext3_get_inode_loc (struct inode *, struct ext3_iloc *);
- extern void ext3_read_inode (struct inode *);
- extern void ext3_write_inode (struct inode *, int);
-
-_
diff --git a/lustre/kernel_patches/patches/gfp_memalloc-2.4.18-chaos.patch b/lustre/kernel_patches/patches/gfp_memalloc-2.4.18-chaos.patch
deleted file mode 100644 (file)
index 97cd9dc..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-Index: linux-2.4.18-chaos/include/linux/mm.h
-===================================================================
---- linux-2.4.18-chaos.orig/include/linux/mm.h 2003-11-23 00:07:20.000000000 +0300
-+++ linux-2.4.18-chaos/include/linux/mm.h      2003-11-23 00:07:23.000000000 +0300
-@@ -677,6 +677,7 @@
- #define __GFP_IO      0x40    /* Can start low memory physical IO? */
- #define __GFP_HIGHIO  0x80    /* Can start high mem physical IO? */
- #define __GFP_FS      0x100   /* Can call down to low-level FS? */
-+#define __GFP_MEMALLOC        0x200   /* like PF_MEMALLOC: see __alloc_pages */
- #define GFP_NOHIGHIO  (__GFP_HIGH | __GFP_WAIT | __GFP_IO)
- #define GFP_NOIO      (__GFP_HIGH | __GFP_WAIT)
-@@ -687,6 +688,7 @@
- #define GFP_KERNEL    (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
- #define GFP_NFS               (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
- #define GFP_KSWAPD    (             __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
-+#define GFP_MEMALLOC  __GFP_MEMALLOC
- /* Flag - indicates that the buffer will be suitable for DMA.  Ignored on some
-    platforms, used as appropriate on others */
-Index: linux-2.4.18-chaos/mm/page_alloc.c
-===================================================================
---- linux-2.4.18-chaos.orig/mm/page_alloc.c    2003-11-23 00:07:20.000000000 +0300
-+++ linux-2.4.18-chaos/mm/page_alloc.c 2003-12-02 23:12:31.000000000 +0300
-@@ -554,7 +554,7 @@
-       /*
-        * Oh well, we didn't succeed.
-        */
--      if (!(current->flags & PF_MEMALLOC)) {
-+      if (!(current->flags & PF_MEMALLOC) && !(gfp_mask & __GFP_MEMALLOC)) {
-               /*
-                * Are we dealing with a higher order allocation?
-                *
-@@ -628,7 +628,9 @@
-               /* XXX: is pages_min/4 a good amount to reserve for this? */
-               min += z->pages_min / 4;
--              if (z->free_pages > min || ((current->flags & PF_MEMALLOC) && !in_interrupt())) {
-+              if (z->free_pages > min ||
-+                      (((current->flags & PF_MEMALLOC) || (gfp_mask & __GFP_MEMALLOC))
-+                       && !in_interrupt())) {
-                       page = rmqueue(z, order);
-                       if (page)
-                               return page;
-Index: linux-2.4.18-chaos/include/linux/slab.h
-===================================================================
---- linux-2.4.18-chaos.orig/include/linux/slab.h       2003-07-28 17:52:18.000000000 +0400
-+++ linux-2.4.18-chaos/include/linux/slab.h    2003-11-23 00:07:23.000000000 +0300
-@@ -23,6 +23,7 @@
- #define       SLAB_KERNEL             GFP_KERNEL
- #define       SLAB_NFS                GFP_NFS
- #define       SLAB_DMA                GFP_DMA
-+#define       SLAB_MEMALLOC           GFP_MEMALLOC
- #define SLAB_LEVEL_MASK               (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_HIGHIO|__GFP_FS)
- #define       SLAB_NO_GROW            0x00001000UL    /* don't grow a cache */
-Index: linux-2.4.18-chaos/mm/slab.c
-===================================================================
---- linux-2.4.18-chaos.orig/mm/slab.c  2003-07-28 17:52:20.000000000 +0400
-+++ linux-2.4.18-chaos/mm/slab.c       2003-11-23 00:07:23.000000000 +0300
-@@ -1116,7 +1116,7 @@
-       /* Be lazy and only check for valid flags here,
-        * keeping it out of the critical path in kmem_cache_alloc().
-        */
--      if (flags & ~(SLAB_DMA|SLAB_LEVEL_MASK|SLAB_NO_GROW))
-+      if (flags & ~(SLAB_DMA|SLAB_LEVEL_MASK|SLAB_NO_GROW|SLAB_MEMALLOC))
-               BUG();
-       if (flags & SLAB_NO_GROW)
-               return 0;
diff --git a/lustre/kernel_patches/patches/gfp_memalloc-2.4.20-rh.patch b/lustre/kernel_patches/patches/gfp_memalloc-2.4.20-rh.patch
deleted file mode 100644 (file)
index 79caa76..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-Index: linux-2.4.20-rh-20.9/include/linux/mm.h
-===================================================================
---- linux-2.4.20-rh-20.9.orig/include/linux/mm.h       2003-11-13 17:35:48.000000000 +0300
-+++ linux-2.4.20-rh-20.9/include/linux/mm.h    2003-11-17 15:50:22.000000000 +0300
-@@ -713,6 +713,7 @@
- #define __GFP_IO      0x40    /* Can start low memory physical IO? */
- #define __GFP_HIGHIO  0x80    /* Can start high mem physical IO? */
- #define __GFP_FS      0x100   /* Can call down to low-level FS? */
-+#define __GFP_MEMALLOC        0x200   /* like PF_MEMALLOC: see __alloc_pages */
- #define GFP_NOHIGHIO  (__GFP_HIGH | __GFP_WAIT | __GFP_IO)
- #define GFP_NOIO      (__GFP_HIGH | __GFP_WAIT)
-@@ -723,6 +724,7 @@
- #define GFP_KERNEL    (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
- #define GFP_NFS               (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
- #define GFP_KSWAPD    (             __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
-+#define GFP_MEMALLOC  __GFP_MEMALLOC
- /* Flag - indicates that the buffer will be suitable for DMA.  Ignored on some
-    platforms, used as appropriate on others */
-Index: linux-2.4.20-rh-20.9/mm/page_alloc.c
-===================================================================
---- linux-2.4.20-rh-20.9.orig/mm/page_alloc.c  2003-11-13 17:20:37.000000000 +0300
-+++ linux-2.4.20-rh-20.9/mm/page_alloc.c       2003-11-17 15:51:05.000000000 +0300
-@@ -509,7 +509,8 @@
-       /*
-        * Oh well, we didn't succeed.
-        */
--      if (!(current->flags & (PF_MEMALLOC|PF_MEMDIE))) {
-+      if (!(current->flags & (PF_MEMALLOC|PF_MEMDIE)) &&
-+              !(gfp_mask & __GFP_MEMALLOC)) {
-               /*
-                * Are we dealing with a higher order allocation?
-                *
-@@ -583,7 +583,9 @@
-               /* XXX: is pages_min/4 a good amount to reserve for this? */
-               min += z->pages_min / 4;
--              if (z->free_pages > min || ((current->flags & PF_MEMALLOC) && !in_interrupt())) {
-+              if (z->free_pages > min ||
-+                  (((current->flags & PF_MEMALLOC) || (gfp_mask & __GFP_MEMALLOC))
-+                   && !in_interrupt())) {
-                       page = rmqueue(z, order);
-                       if (page)
-                               return page;
-Index: linux-2.4.20-rh-20.9/include/linux/slab.h
-===================================================================
---- linux-2.4.20-rh-20.9.orig/include/linux/slab.h     2003-11-13 17:35:48.000000000 +0300
-+++ linux-2.4.20-rh-20.9/include/linux/slab.h  2003-11-17 15:50:22.000000000 +0300
-@@ -23,6 +23,7 @@
- #define       SLAB_KERNEL             GFP_KERNEL
- #define       SLAB_NFS                GFP_NFS
- #define       SLAB_DMA                GFP_DMA
-+#define       SLAB_MEMALLOC           GFP_MEMALLOC
- #define SLAB_LEVEL_MASK               (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_HIGHIO|__GFP_FS)
- #define       SLAB_NO_GROW            0x00001000UL    /* don't grow a cache */
-Index: linux-2.4.20-rh-20.9/mm/slab.c
-===================================================================
---- linux-2.4.20-rh-20.9.orig/mm/slab.c        2003-09-13 19:34:24.000000000 +0400
-+++ linux-2.4.20-rh-20.9/mm/slab.c     2003-11-17 15:50:22.000000000 +0300
-@@ -1116,7 +1116,7 @@
-       /* Be lazy and only check for valid flags here,
-        * keeping it out of the critical path in kmem_cache_alloc().
-        */
--      if (flags & ~(SLAB_DMA|SLAB_LEVEL_MASK|SLAB_NO_GROW))
-+      if (flags & ~(SLAB_DMA|SLAB_LEVEL_MASK|SLAB_NO_GROW|SLAB_MEMALLOC))
-               BUG();
-       if (flags & SLAB_NO_GROW)
-               return 0;
diff --git a/lustre/kernel_patches/patches/gfp_memalloc-2.4.21-chaos.patch b/lustre/kernel_patches/patches/gfp_memalloc-2.4.21-chaos.patch
deleted file mode 100644 (file)
index 46b7b0e..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-Index: linux-2.4.21-chaos/include/linux/mm.h
-===================================================================
---- linux-2.4.21-chaos.orig/include/linux/mm.h 2003-12-12 13:36:59.000000000 +0300
-+++ linux-2.4.21-chaos/include/linux/mm.h      2003-12-12 16:15:57.000000000 +0300
-@@ -843,6 +843,7 @@
- #define __GFP_HIGHIO  0x80    /* Can start high mem physical IO? */
- #define __GFP_FS      0x100   /* Can call down to low-level FS? */
- #define __GFP_WIRED   0x200   /* Highmem bias and wired */
-+#define __GFP_MEMALLOC        0x400   /* like PF_MEMALLOC: see __alloc_pages */
- #define GFP_NOHIGHIO  (__GFP_HIGH | __GFP_WAIT | __GFP_IO)
- #define GFP_NOIO      (__GFP_HIGH | __GFP_WAIT)
-@@ -853,6 +854,7 @@
- #define GFP_KERNEL    (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
- #define GFP_NFS               (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
- #define GFP_KSWAPD    (             __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
-+#define GFP_MEMALLOC  __GFP_MEMALLOC
- /* Flag - indicates that the buffer will be suitable for DMA.  Ignored on some
-    platforms, used as appropriate on others */
-Index: linux-2.4.21-chaos/include/linux/slab.h
-===================================================================
---- linux-2.4.21-chaos.orig/include/linux/slab.h       2003-12-05 16:54:33.000000000 +0300
-+++ linux-2.4.21-chaos/include/linux/slab.h    2003-12-12 16:15:57.000000000 +0300
-@@ -23,6 +23,7 @@
- #define       SLAB_KERNEL             GFP_KERNEL
- #define       SLAB_NFS                GFP_NFS
- #define       SLAB_DMA                GFP_DMA
-+#define       SLAB_MEMALLOC           GFP_MEMALLOC
- #define SLAB_LEVEL_MASK               (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_HIGHIO|__GFP_FS)
- #define       SLAB_NO_GROW            0x00001000UL    /* don't grow a cache */
-Index: linux-2.4.21-chaos/mm/page_alloc.c
-===================================================================
---- linux-2.4.21-chaos.orig/mm/page_alloc.c    2003-12-12 11:31:08.000000000 +0300
-+++ linux-2.4.21-chaos/mm/page_alloc.c 2003-12-12 16:15:57.000000000 +0300
-@@ -595,7 +595,8 @@
-       /*
-        * Oh well, we didn't succeed.
-        */
--      if (!(current->flags & (PF_MEMALLOC|PF_MEMDIE))) {
-+      if (!(current->flags & (PF_MEMALLOC|PF_MEMDIE)) &&
-+              !(gfp_mask & __GFP_MEMALLOC)) {
-               /*
-                * Are we dealing with a higher order allocation?
-                *
-@@ -670,7 +671,9 @@
-               /* XXX: is pages_min/4 a good amount to reserve for this? */
-               min += z->pages_min / 4;
--              if (z->free_pages > min || ((current->flags & PF_MEMALLOC) && !in_interrupt())) {
-+              if (z->free_pages > min ||
-+                  (((current->flags & PF_MEMALLOC) || (gfp_mask & __GFP_MEMALLOC))
-+                   && !in_interrupt())) {
-                       page = rmqueue(z, order);
-                       if (page)
-                               return page;
-Index: linux-2.4.21-chaos/mm/slab.c
-===================================================================
---- linux-2.4.21-chaos.orig/mm/slab.c  2003-12-05 07:55:51.000000000 +0300
-+++ linux-2.4.21-chaos/mm/slab.c       2003-12-12 16:15:57.000000000 +0300
-@@ -1125,7 +1125,7 @@
-       /* Be lazy and only check for valid flags here,
-        * keeping it out of the critical path in kmem_cache_alloc().
-        */
--      if (flags & ~(SLAB_DMA|SLAB_LEVEL_MASK|SLAB_NO_GROW))
-+      if (flags & ~(SLAB_DMA|SLAB_LEVEL_MASK|SLAB_NO_GROW|SLAB_MEMALLOC))
-               BUG();
-       if (flags & SLAB_NO_GROW)
-               return 0;
diff --git a/lustre/kernel_patches/patches/gfp_memalloc-2.4.22.patch b/lustre/kernel_patches/patches/gfp_memalloc-2.4.22.patch
deleted file mode 100644 (file)
index 92e79c8..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-Index: linux-2.4.20/include/linux/mm.h
-===================================================================
---- linux-2.4.20.orig/include/linux/mm.h       2003-12-01 17:07:14.000000000 +0300
-+++ linux-2.4.20/include/linux/mm.h    2003-12-02 23:17:06.000000000 +0300
-@@ -614,6 +614,7 @@
- #define __GFP_IO      0x40    /* Can start low memory physical IO? */
- #define __GFP_HIGHIO  0x80    /* Can start high mem physical IO? */
- #define __GFP_FS      0x100   /* Can call down to low-level FS? */
-+#define __GFP_MEMALLOC        0x200   /* like PF_MEMALLOC: see __alloc_pages */
- #define GFP_NOHIGHIO  (__GFP_HIGH | __GFP_WAIT | __GFP_IO)
- #define GFP_NOIO      (__GFP_HIGH | __GFP_WAIT)
-@@ -624,6 +625,7 @@
- #define GFP_KERNEL    (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
- #define GFP_NFS               (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
- #define GFP_KSWAPD    (             __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
-+#define GFP_MEMALLOC  __GFP_MEMALLOC
- /* Flag - indicates that the buffer will be suitable for DMA.  Ignored on some
-    platforms, used as appropriate on others */
-Index: linux-2.4.20/mm/page_alloc.c
-===================================================================
---- linux-2.4.20.orig/mm/page_alloc.c  2003-12-01 17:02:43.000000000 +0300
-+++ linux-2.4.20/mm/page_alloc.c       2003-12-02 23:21:56.000000000 +0300
-@@ -377,7 +377,8 @@
-       /* here we're in the low on memory slow path */
- rebalance:
--      if (current->flags & (PF_MEMALLOC | PF_MEMDIE)) {
-+      if (current->flags & (PF_MEMALLOC | PF_MEMDIE) || 
-+                      (gfp_mask & __GFP_MEMALLOC)) {
-               zone = zonelist->zones;
-               for (;;) {
-                       zone_t *z = *(zone++);
-Index: linux-2.4.20/include/linux/slab.h
-===================================================================
---- linux-2.4.20.orig/include/linux/slab.h     2003-12-01 17:07:14.000000000 +0300
-+++ linux-2.4.20/include/linux/slab.h  2003-12-02 23:17:06.000000000 +0300
-@@ -23,6 +23,7 @@
- #define       SLAB_KERNEL             GFP_KERNEL
- #define       SLAB_NFS                GFP_NFS
- #define       SLAB_DMA                GFP_DMA
-+#define       SLAB_MEMALLOC           GFP_MEMALLOC
- #define SLAB_LEVEL_MASK               (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_HIGHIO|__GFP_FS)
- #define       SLAB_NO_GROW            0x00001000UL    /* don't grow a cache */
-Index: linux-2.4.20/mm/slab.c
-===================================================================
---- linux-2.4.20.orig/mm/slab.c        2003-12-01 17:02:34.000000000 +0300
-+++ linux-2.4.20/mm/slab.c     2003-12-02 23:17:06.000000000 +0300
-@@ -1113,7 +1113,7 @@
-       /* Be lazy and only check for valid flags here,
-        * keeping it out of the critical path in kmem_cache_alloc().
-        */
--      if (flags & ~(SLAB_DMA|SLAB_LEVEL_MASK|SLAB_NO_GROW))
-+      if (flags & ~(SLAB_DMA|SLAB_LEVEL_MASK|SLAB_NO_GROW|SLAB_MEMALLOC))
-               BUG();
-       if (flags & SLAB_NO_GROW)
-               return 0;
diff --git a/lustre/kernel_patches/patches/gfp_memalloc-2.4.24.patch b/lustre/kernel_patches/patches/gfp_memalloc-2.4.24.patch
deleted file mode 100644 (file)
index 5780b1b..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-Index: linux-2.4.21-suse2/include/linux/mm.h
-===================================================================
---- linux-2.4.21-suse2.orig/include/linux/mm.h 2004-01-10 15:51:22.000000000 +0300
-+++ linux-2.4.21-suse2/include/linux/mm.h      2004-01-10 16:02:42.000000000 +0300
-@@ -661,6 +661,7 @@
- #define __GFP_IO      0x40    /* Can start low memory physical IO? */
- #define __GFP_HIGHIO  0x80    /* Can start high mem physical IO? */
- #define __GFP_FS      0x100   /* Can call down to low-level FS? */
-+#define __GFP_MEMALLOC        0x200   /* like PF_MEMALLOC: see __alloc_pages */
- #define GFP_NOHIGHIO  (__GFP_HIGH | __GFP_WAIT | __GFP_IO)
- #define GFP_NOIO      (__GFP_HIGH | __GFP_WAIT)
-@@ -671,6 +672,7 @@
- #define GFP_KERNEL    (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
- #define GFP_NFS               (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
- #define GFP_KSWAPD    (             __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
-+#define GFP_MEMALLOC  __GFP_MEMALLOC
- /* Flag - indicates that the buffer will be suitable for DMA.  Ignored on some
-    platforms, used as appropriate on others */
-Index: linux-2.4.21-suse2/include/linux/slab.h
-===================================================================
---- linux-2.4.21-suse2.orig/include/linux/slab.h       2004-01-10 12:48:36.000000000 +0300
-+++ linux-2.4.21-suse2/include/linux/slab.h    2004-01-10 16:02:42.000000000 +0300
-@@ -23,6 +23,7 @@
- #define       SLAB_KERNEL             GFP_KERNEL
- #define       SLAB_NFS                GFP_NFS
- #define       SLAB_DMA                GFP_DMA
-+#define       SLAB_MEMALLOC           GFP_MEMALLOC
- #define SLAB_LEVEL_MASK               (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_HIGHIO|__GFP_FS)
- #define       SLAB_NO_GROW            0x00001000UL    /* don't grow a cache */
-Index: linux-2.4.21-suse2/mm/page_alloc.c
-===================================================================
---- linux-2.4.21-suse2.orig/mm/page_alloc.c    2004-01-10 14:56:13.000000000 +0300
-+++ linux-2.4.21-suse2/mm/page_alloc.c 2004-01-10 16:03:20.000000000 +0300
-@@ -448,7 +448,8 @@
-       /* here we're in the low on memory slow path */
--      if (current->flags & PF_MEMALLOC && !in_interrupt()) {
-+      if (((current->flags & PF_MEMALLOC) || (gfp_mask & __GFP_MEMALLOC))
-+                      && !in_interrupt()) {
-               zone = zonelist->zones;
-               for (;;) {
-                       zone_t *z = *(zone++);
-Index: linux-2.4.21-suse2/mm/slab.c
-===================================================================
---- linux-2.4.21-suse2.orig/mm/slab.c  2003-10-28 21:33:57.000000000 +0300
-+++ linux-2.4.21-suse2/mm/slab.c       2004-01-10 16:02:42.000000000 +0300
-@@ -1115,7 +1115,7 @@
-       /* Be lazy and only check for valid flags here,
-        * keeping it out of the critical path in kmem_cache_alloc().
-        */
--      if (flags & ~(SLAB_DMA|SLAB_LEVEL_MASK|SLAB_NO_GROW))
-+      if (flags & ~(SLAB_DMA|SLAB_LEVEL_MASK|SLAB_NO_GROW|SLAB_MEMALLOC))
-               BUG();
-       if (flags & SLAB_NO_GROW)
-               return 0;
diff --git a/lustre/kernel_patches/patches/htree-ext3-2.4.18.patch b/lustre/kernel_patches/patches/htree-ext3-2.4.18.patch
deleted file mode 100644 (file)
index 2d8236c..0000000
+++ /dev/null
@@ -1,1233 +0,0 @@
---- ./fs/ext3/super.c  2002/03/05 06:18:59     2.1
-+++ ./fs/ext3/super.c  2002/03/05 06:26:56
-@@ -529,6 +529,12 @@
-                                      "EXT3 Check option not supported\n");
- #endif
-               }
-+              else if (!strcmp (this_char, "index"))
-+#ifdef CONFIG_EXT3_INDEX
-+                      set_opt (*mount_options, INDEX);
-+#else
-+                      printk("EXT3 index option not supported\n");
-+#endif
-               else if (!strcmp (this_char, "debug"))
-                       set_opt (*mount_options, DEBUG);
-               else if (!strcmp (this_char, "errors")) {
-@@ -702,6 +708,12 @@
-       es->s_mtime = cpu_to_le32(CURRENT_TIME);
-       ext3_update_dynamic_rev(sb);
-       EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
-+
-+      if (test_opt(sb, INDEX))
-+              EXT3_SET_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_DIR_INDEX);
-+      else if (EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_DIR_INDEX))
-+              set_opt (EXT3_SB(sb)->s_mount_opt, INDEX);
-+
-       ext3_commit_super (sb, es, 1);
-       if (test_opt (sb, DEBUG))
-               printk (KERN_INFO
---- ./fs/ext3/namei.c  2002/03/05 06:18:59     2.1
-+++ ./fs/ext3/namei.c  2002/03/06 00:13:18
-@@ -16,6 +16,10 @@
-  *        David S. Miller (davem@caip.rutgers.edu), 1995
-  *  Directory entry file type support and forward compatibility hooks
-  *    for B-tree directories by Theodore Ts'o (tytso@mit.edu), 1998
-+ *  Hash Tree Directory indexing (c)
-+ *    Daniel Phillips, 2001
-+ *  Hash Tree Directory indexing porting
-+ *    Christopher Li, 2002
-  */
- #include <linux/fs.h>
-@@ -33,7 +33,7 @@
- #include <linux/string.h>
- #include <linux/locks.h>
- #include <linux/quotaops.h>
--
-+#include <linux/slab.h>
- /*
-  * define how far ahead to read directories while searching them.
-@@ -38,6 +42,437 @@
- #define NAMEI_RA_SIZE        (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
- #define NAMEI_RA_INDEX(c,b)  (((c) * NAMEI_RA_BLOCKS) + (b))
-+static struct buffer_head *ext3_append(handle_t *handle,
-+                                      struct inode *inode,
-+                                      u32 *block, int *err)
-+{
-+      struct buffer_head *bh;
-+
-+      *block = inode->i_size >> inode->i_sb->s_blocksize_bits;
-+
-+      if ((bh = ext3_bread(handle, inode, *block, 1, err))) {
-+              inode->i_size += inode->i_sb->s_blocksize;
-+              EXT3_I(inode)->i_disksize = inode->i_size;
-+              ext3_journal_get_write_access(handle,bh);
-+      }
-+      return bh;
-+}
-+
-+#ifndef assert
-+#define assert(test) J_ASSERT(test)
-+#endif
-+
-+#ifndef swap
-+#define swap(x, y) do { typeof(x) z = x; x = y; y = z; } while (0)
-+#endif
-+
-+typedef struct { u32 v; } le_u32;
-+typedef struct { u16 v; } le_u16;
-+
-+#define dxtrace_on(command) command
-+#define dxtrace_off(command)
-+
-+struct fake_dirent
-+{
-+      /*le*/u32 inode;
-+      /*le*/u16 rec_len;
-+      u8 name_len;
-+      u8 file_type;
-+};
-+
-+struct dx_countlimit
-+{
-+      le_u16 limit;
-+      le_u16 count;
-+};
-+
-+struct dx_entry
-+{
-+      le_u32 hash;
-+      le_u32 block;
-+};
-+
-+/*
-+ * dx_root_info is laid out so that if it should somehow get overlaid by a
-+ * dirent the two low bits of the hash version will be zero.  Therefore, the
-+ * hash version mod 4 should never be 0.  Sincerely, the paranoia department.
-+ */
-+
-+struct dx_root
-+{
-+      struct fake_dirent dot;
-+      char dot_name[4];
-+      struct fake_dirent dotdot;
-+      char dotdot_name[4];
-+      struct dx_root_info
-+      {
-+              le_u32 reserved_zero;
-+              u8 hash_version; /* 0 now, 1 at release */
-+              u8 info_length; /* 8 */
-+              u8 indirect_levels;
-+              u8 unused_flags;
-+      }
-+      info;
-+      struct dx_entry entries[0];
-+};
-+
-+struct dx_node
-+{
-+      struct fake_dirent fake;
-+      struct dx_entry entries[0];
-+};
-+
-+
-+struct dx_frame
-+{
-+      struct buffer_head *bh;
-+      struct dx_entry *entries;
-+      struct dx_entry *at;
-+};
-+
-+struct dx_map_entry
-+{
-+      u32 hash;
-+      u32 offs;
-+};
-+
-+typedef struct ext3_dir_entry_2 ext3_dirent;
-+static inline unsigned dx_get_block (struct dx_entry *entry);
-+static void dx_set_block (struct dx_entry *entry, unsigned value);
-+static inline unsigned dx_get_hash (struct dx_entry *entry);
-+static void dx_set_hash (struct dx_entry *entry, unsigned value);
-+static unsigned dx_get_count (struct dx_entry *entries);
-+static unsigned dx_get_limit (struct dx_entry *entries);
-+static void dx_set_count (struct dx_entry *entries, unsigned value);
-+static void dx_set_limit (struct dx_entry *entries, unsigned value);
-+static unsigned dx_root_limit (struct inode *dir, unsigned infosize);
-+static unsigned dx_node_limit (struct inode *dir);
-+static unsigned dx_hack_hash (const u8 *name, int len);
-+static struct dx_frame *dx_probe (struct inode *dir, u32 hash, struct dx_frame *frame);
-+static void dx_release (struct dx_frame *frames);
-+static int dx_make_map (ext3_dirent *de, int size, struct dx_map_entry map[]);
-+static void dx_sort_map(struct dx_map_entry *map, unsigned count);
-+static ext3_dirent *dx_copy_dirents (char *from, char *to,
-+     struct dx_map_entry *map, int count);
-+static void dx_insert_block (struct dx_frame *frame, u32 hash, u32 block);
-+
-+
-+#ifdef CONFIG_EXT3_INDEX
-+/*
-+ * Future: use high four bits of block for coalesce-on-delete flags
-+ * Mask them off for now.
-+ */
-+
-+static inline unsigned dx_get_block (struct dx_entry *entry)
-+{
-+      return le32_to_cpu(entry->block.v) & 0x00ffffff;
-+}
-+
-+static inline void dx_set_block (struct dx_entry *entry, unsigned value)
-+{
-+      entry->block.v = cpu_to_le32(value);
-+}
-+
-+static inline unsigned dx_get_hash (struct dx_entry *entry)
-+{
-+      return le32_to_cpu(entry->hash.v);
-+}
-+
-+static inline void dx_set_hash (struct dx_entry *entry, unsigned value)
-+{
-+      entry->hash.v = cpu_to_le32(value);
-+}
-+
-+static inline unsigned dx_get_count (struct dx_entry *entries)
-+{
-+      return le16_to_cpu(((struct dx_countlimit *) entries)->count.v);
-+}
-+
-+static inline unsigned dx_get_limit (struct dx_entry *entries)
-+{
-+      return le16_to_cpu(((struct dx_countlimit *) entries)->limit.v);
-+}
-+
-+static inline void dx_set_count (struct dx_entry *entries, unsigned value)
-+{
-+      ((struct dx_countlimit *) entries)->count.v = cpu_to_le16(value);
-+}
-+
-+static inline void dx_set_limit (struct dx_entry *entries, unsigned value)
-+{
-+      ((struct dx_countlimit *) entries)->limit.v = cpu_to_le16(value);
-+}
-+
-+static inline unsigned dx_root_limit (struct inode *dir, unsigned infosize)
-+{
-+      unsigned entry_space = dir->i_sb->s_blocksize - EXT3_DIR_REC_LEN(1) -
-+              EXT3_DIR_REC_LEN(2) - infosize;
-+      return 0? 20: entry_space / sizeof(struct dx_entry);
-+}
-+
-+static inline unsigned dx_node_limit (struct inode *dir)
-+{
-+      unsigned entry_space = dir->i_sb->s_blocksize - EXT3_DIR_REC_LEN(0);
-+      return 0? 22: entry_space / sizeof(struct dx_entry);
-+}
-+
-+/* Hash function - not bad, but still looking for an ideal default */
-+
-+static unsigned dx_hack_hash (const u8 *name, int len)
-+{
-+      u32 hash0 = 0x12a3fe2d, hash1 = 0x37abe8f9;
-+      while (len--)
-+      {
-+              u32 hash = hash1 + (hash0 ^ (*name++ * 7152373));
-+              if (hash & 0x80000000) hash -= 0x7fffffff;
-+              hash1 = hash0;
-+              hash0 = hash;
-+      }
-+      return hash0;
-+}
-+
-+#define dx_hash(s,n) (dx_hack_hash(s,n) << 1)
-+
-+/*
-+ * Debug
-+ */
-+#ifdef DX_DEBUG
-+#define dxtrace dxtrace_on
-+static void dx_show_index (char * label, struct dx_entry *entries)
-+{
-+      int i, n = dx_get_count (entries);
-+      printk("%s index ", label);
-+      for (i = 0; i < n; i++)
-+      {
-+              printk("%x->%u ", i? dx_get_hash(entries + i): 0, dx_get_block(entries + i));
-+      }
-+      printk("\n");
-+}
-+
-+struct stats
-+{ 
-+      unsigned names;
-+      unsigned space;
-+      unsigned bcount;
-+};
-+
-+static struct stats dx_show_leaf (ext3_dirent *de, int size, int show_names)
-+{
-+      unsigned names = 0, space = 0;
-+      char *base = (char *) de;
-+      printk("names: ");
-+      while ((char *) de < base + size)
-+      {
-+              if (de->inode)
-+              {
-+                      if (show_names)
-+                      {
-+                              int len = de->name_len;
-+                              char *name = de->name;
-+                              while (len--) printk("%c", *name++);
-+                              printk(":%x.%u ", dx_hash (de->name, de->name_len), ((char *) de - base));
-+                      }
-+                      space += EXT3_DIR_REC_LEN(de->name_len);
-+                      names++;
-+              }
-+              de = (ext3_dirent *) ((char *) de + le16_to_cpu(de->rec_len));
-+      }
-+      printk("(%i)\n", names);
-+      return (struct stats) { names, space, 1 };
-+}
-+
-+struct stats dx_show_entries (struct inode *dir, struct dx_entry *entries, int levels)
-+{
-+      unsigned blocksize = dir->i_sb->s_blocksize;
-+      unsigned count = dx_get_count (entries), names = 0, space = 0, i;
-+      unsigned bcount = 0;
-+      struct buffer_head *bh;
-+      int err;
-+      printk("%i indexed blocks...\n", count);
-+      for (i = 0; i < count; i++, entries++)
-+      {
-+              u32 block = dx_get_block(entries), hash = i? dx_get_hash(entries): 0;
-+              u32 range = i < count - 1? (dx_get_hash(entries + 1) - hash): ~hash;
-+              struct stats stats;
-+              printk("%s%3u:%03u hash %8x/%8x ",levels?"":"   ", i, block, hash, range);
-+              if (!(bh = ext3_bread (NULL,dir, block, 0,&err))) continue;
-+              stats = levels?
-+                 dx_show_entries (dir, ((struct dx_node *) bh->b_data)->entries, levels - 1):
-+                 dx_show_leaf ((ext3_dirent *) bh->b_data, blocksize, 0);
-+              names += stats.names;
-+              space += stats.space;
-+              bcount += stats.bcount;
-+              brelse (bh);
-+      }
-+      if (bcount)
-+              printk("%snames %u, fullness %u (%u%%)\n", levels?"":"   ",
-+                      names, space/bcount,(space/bcount)*100/blocksize);
-+      return (struct stats) { names, space, bcount};
-+}
-+#else
-+#define dxtrace dxtrace_off
-+#endif
-+
-+/*
-+ * Probe for a directory leaf block to search
-+ */
-+
-+static struct dx_frame *
-+dx_probe(struct inode *dir, u32 hash, struct dx_frame *frame_in)
-+{
-+      unsigned count, indirect;
-+      struct dx_entry *at, *entries, *p, *q, *m;
-+      struct dx_root *root;
-+      struct buffer_head *bh;
-+      struct dx_frame *frame = frame_in;
-+      int err;
-+
-+      frame->bh = NULL;
-+      if (!(bh = ext3_bread(NULL, dir, 0, 0, &err)))
-+              goto fail;
-+      root = (struct dx_root *) bh->b_data;
-+      if (root->info.hash_version > 0 || root->info.unused_flags & 1) {
-+              brelse(bh);
-+              goto fail;
-+      }
-+      if ((indirect = root->info.indirect_levels) > 1) {
-+              brelse(bh);
-+              goto fail;
-+      }
-+      entries = (struct dx_entry *) (((char *) &root->info) + root->info.info_length);
-+      assert (dx_get_limit(entries) == dx_root_limit(dir, root->info.info_length));
-+      dxtrace (printk("Look up %x", hash));
-+      while (1)
-+      {
-+              count = dx_get_count(entries);
-+              assert (count && count <= dx_get_limit(entries));
-+              p = entries + 1;
-+              q = entries + count - 1;
-+              while (p <= q)
-+              {
-+                      m = p + (q - p)/2;
-+                      dxtrace(printk("."));
-+                      if (dx_get_hash(m) > hash)
-+                              q = m - 1;
-+                      else
-+                              p = m + 1;
-+              }
-+
-+              if (0) // linear search cross check
-+              {
-+                      unsigned n = count - 1;
-+                      at = entries;
-+                      while (n--)
-+                      {
-+                              dxtrace(printk(","));
-+                              if (dx_get_hash(++at) > hash)
-+                              {
-+                                      at--;
-+                                      break;
-+                              }
-+                      }
-+                      assert (at == p - 1);
-+              }
-+
-+              at = p - 1;
-+              dxtrace(printk(" %x->%u\n", at == entries? 0: dx_get_hash(at), dx_get_block(at)));
-+              frame->bh = bh;
-+              frame->entries = entries;
-+              frame->at = at;
-+              if (!indirect--) return frame;
-+              if (!(bh = ext3_bread (NULL,dir, dx_get_block(at), 0,&err)))
-+                      goto fail2;
-+              at = entries = ((struct dx_node *) bh->b_data)->entries;
-+              assert (dx_get_limit(entries) == dx_node_limit (dir));
-+              frame++;
-+      }
-+fail2:
-+      while (frame >= frame_in) {
-+              brelse(frame->bh);
-+              frame--;
-+      }
-+fail:
-+      return NULL;
-+}
-+
-+static void dx_release (struct dx_frame *frames)
-+{
-+      if (frames[0].bh == NULL)
-+              return;
-+
-+      if (((struct dx_root *)frames[0].bh->b_data)->info.indirect_levels)
-+              brelse (frames[1].bh);
-+      brelse (frames[0].bh);
-+}
-+
-+/*
-+ * Directory block splitting, compacting
-+ */
-+
-+static int dx_make_map (ext3_dirent *de, int size, struct dx_map_entry map[])
-+{
-+      int count = 0;
-+      char *base = (char *) de;
-+      while ((char *) de < base + size) {
-+              if (de->name_len && de->inode) {
-+                      map[count].hash = dx_hash (de->name, de->name_len);
-+                      map[count].offs = (u32) ((char *) de - base);
-+                      count++;
-+              }
-+              de = (ext3_dirent *) ((char *) de + le16_to_cpu(de->rec_len));
-+      }
-+      return count;
-+}
-+
-+static void dx_sort_map (struct dx_map_entry *map, unsigned count)
-+{
-+        struct dx_map_entry *p, *q, *top = map + count - 1;
-+        int more;
-+        /* Combsort until bubble sort doesn't suck */
-+        while (count > 2)
-+      {
-+                count = count*10/13;
-+                if (count - 9 < 2) /* 9, 10 -> 11 */
-+                        count = 11;
-+                for (p = top, q = p - count; q >= map; p--, q--)
-+                        if (p->hash < q->hash)
-+                                swap(*p, *q);
-+        }
-+        /* Garden variety bubble sort */
-+        do {
-+                more = 0;
-+                q = top;
-+                while (q-- > map)
-+              {
-+                        if (q[1].hash >= q[0].hash)
-+                              continue;
-+                        swap(*(q+1), *q);
-+                        more = 1;
-+              }
-+      } while(more);
-+}
-+
-+static void dx_insert_block(struct dx_frame *frame, u32 hash, u32 block)
-+{
-+      struct dx_entry *entries = frame->entries;
-+      struct dx_entry *old = frame->at, *new = old + 1;
-+      int count = dx_get_count(entries);
-+
-+      assert(count < dx_get_limit(entries));
-+      assert(old < entries + count);
-+      memmove(new + 1, new, (char *)(entries + count) - (char *)(new));
-+      dx_set_hash(new, hash);
-+      dx_set_block(new, block);
-+      dx_set_count(entries, count + 1);
-+}
-+#endif
-+
-+static void ext3_update_dx_flag(struct inode *inode)
-+{
-+      if (!test_opt(inode->i_sb, INDEX))
-+              EXT3_I(inode)->i_flags &= ~EXT3_INDEX_FL;
-+}
-+
- /*
-  * NOTE! unlike strncmp, ext3_match returns 1 for success, 0 for failure.
-  *
-@@ -95,6 +529,15 @@
- }
- /*
-+ * p is at least 6 bytes before the end of page
-+ */
-+static inline ext3_dirent *ext3_next_entry(ext3_dirent *p)
-+{
-+      return (ext3_dirent *)((char*)p + le16_to_cpu(p->rec_len));
-+}
-+
-+
-+/*
-  *    ext3_find_entry()
-  *
-  * finds an entry in the specified directory with the wanted name. It
-@@ -105,6 +548,8 @@
-  * The returned buffer_head has ->b_count elevated.  The caller is expected
-  * to brelse() it when appropriate.
-  */
-+
-+      
- static struct buffer_head * ext3_find_entry (struct dentry *dentry,
-                                       struct ext3_dir_entry_2 ** res_dir)
- {
-@@ -119,10 +564,70 @@
-       int num = 0;
-       int nblocks, i, err;
-       struct inode *dir = dentry->d_parent->d_inode;
-+      ext3_dirent *de, *top;
-       *res_dir = NULL;
-       sb = dir->i_sb;
-+      if (dentry->d_name.len > EXT3_NAME_LEN)
-+              return NULL;
-+      if (ext3_dx && is_dx(dir)) {
-+              u32 hash = dx_hash(dentry->d_name.name, dentry->d_name.len);
-+              struct dx_frame frames[2], *frame;
-+              if (!(frame = dx_probe (dir, hash, frames)))
-+                      return NULL;
-+dxnext:
-+              block = dx_get_block(frame->at);
-+              if (!(bh = ext3_bread (NULL,dir, block, 0, &err)))
-+                      goto dxfail;
-+              de = (ext3_dirent *) bh->b_data;
-+              top = (ext3_dirent *) ((char *) de + sb->s_blocksize -
-+                              EXT3_DIR_REC_LEN(0));
-+              for (; de < top; de = ext3_next_entry(de))
-+                      if (ext3_match(dentry->d_name.len, dentry->d_name.name, de)) {
-+                              if (!ext3_check_dir_entry("ext3_find_entry",
-+                                        dir, de, bh,
-+                                        (block<<EXT3_BLOCK_SIZE_BITS(sb))
-+                                         +((char *)de - bh->b_data))) {
-+                                      brelse (bh);
-+                                      goto dxfail;
-+                              }
-+                              *res_dir = de;
-+                              goto dxfound;
-+                      }
-+              brelse (bh);
-+              /* Same hash continues in next block?  Search on. */
-+              if (++(frame->at) == frame->entries + dx_get_count(frame->entries))
-+              {
-+                      struct buffer_head *bh2;
-+                      if (frame == frames)
-+                              goto dxfail;
-+                      if (++(frames->at) == frames->entries + dx_get_count(frames->entries))
-+                              goto dxfail;
-+                      /* should omit read if not continued */
-+                      if (!(bh2 = ext3_bread (NULL, dir,
-+                                              dx_get_block(frames->at),
-+                                              0, &err)))
-+                              goto dxfail;
-+                      brelse (frame->bh);
-+                      frame->bh = bh2;
-+                      frame->at = frame->entries = ((struct dx_node *) bh2->b_data)->entries;
-+                      /* Subtle: the 0th entry has the count, find the hash in frame above */
-+                      if ((dx_get_hash(frames->at) & -2) == hash)
-+                              goto dxnext;
-+                      goto dxfail;
-+              }
-+              if ((dx_get_hash(frame->at) & -2) == hash)
-+                      goto dxnext;
-+dxfail:
-+              dxtrace(printk("%s not found\n", name));
-+              dx_release (frames);
-+              return NULL;
-+dxfound:
-+              dx_release (frames);
-+              return bh;
-+      }
-+      
-       nblocks = dir->i_size >> EXT3_BLOCK_SIZE_BITS(sb);
-       start = dir->u.ext3_i.i_dir_start_lookup;
-       if (start >= nblocks)
-@@ -237,6 +748,90 @@
-               de->file_type = ext3_type_by_mode[(mode & S_IFMT)>>S_SHIFT];
- }
-+static ext3_dirent *
-+dx_copy_dirents (char *from, char *to, struct dx_map_entry *map, int count)
-+{
-+      unsigned rec_len = 0;
-+
-+      while (count--) {
-+              ext3_dirent *de = (ext3_dirent *) (from + map->offs);
-+              rec_len = EXT3_DIR_REC_LEN(de->name_len);
-+              memcpy (to, de, rec_len);
-+              ((ext3_dirent *)to)->rec_len = le16_to_cpu(rec_len);
-+              to += rec_len;
-+              map++;
-+      }
-+      return (ext3_dirent *) (to - rec_len);
-+}
-+
-+#ifdef CONFIG_EXT3_INDEX
-+static ext3_dirent *do_split(handle_t *handle, struct inode *dir,
-+                      struct buffer_head **bh,struct dx_frame *frame,
-+                      u32 hash, int *error)
-+{
-+      unsigned count;
-+      struct buffer_head *bh2;
-+      u32 newblock;
-+      u32 hash2;
-+      struct dx_map_entry *map;
-+      char *data1 = (*bh)->b_data, *data2, *data3;
-+      unsigned split;
-+      ext3_dirent *de, *de2;
-+
-+      bh2 = ext3_append (handle, dir, &newblock, error);
-+      if (!(bh2))
-+      {
-+              brelse(*bh);
-+              *bh = NULL;
-+              return (ext3_dirent *)bh2;
-+      }
-+
-+      BUFFER_TRACE(*bh, "get_write_access");
-+      ext3_journal_get_write_access(handle, *bh);
-+      BUFFER_TRACE(frame->bh, "get_write_access");
-+      ext3_journal_get_write_access(handle, frame->bh);
-+
-+      data2 = bh2->b_data;
-+
-+      map = kmalloc(sizeof(*map) * PAGE_CACHE_SIZE/EXT3_DIR_REC_LEN(1) + 1,
-+                    GFP_KERNEL);
-+      if (!map)
-+              panic("no memory for do_split\n");
-+      count = dx_make_map((ext3_dirent *)data1, dir->i_sb->s_blocksize, map);
-+      split = count/2; // need to adjust to actual middle
-+      dx_sort_map (map, count);
-+      hash2 = map[split].hash;
-+      dxtrace(printk("Split block %i at %x, %i/%i\n",
-+              dx_get_block(frame->at), hash2, split, count-split));
-+
-+      /* Fancy dance to stay within two buffers */
-+      de2 = dx_copy_dirents (data1, data2, map + split, count - split);
-+      data3 = (char *) de2 + le16_to_cpu(de2->rec_len);
-+      de = dx_copy_dirents (data1, data3, map, split);
-+      memcpy(data1, data3, (char *) de + le16_to_cpu(de->rec_len) - data3);
-+      de = (ext3_dirent *) ((char *) de - data3 + data1); // relocate de
-+      de->rec_len = cpu_to_le16(data1 + dir->i_sb->s_blocksize - (char *)de);
-+      de2->rec_len = cpu_to_le16(data2 + dir->i_sb->s_blocksize-(char *)de2);
-+      dxtrace(dx_show_leaf((ext3_dirent *)data1, dir->i_sb->s_blocksize, 1));
-+      dxtrace(dx_show_leaf((ext3_dirent *)data2, dir->i_sb->s_blocksize, 1));
-+
-+      /* Which block gets the new entry? */
-+      if (hash >= hash2)
-+      {
-+              swap(*bh, bh2);
-+              de = de2;
-+      }
-+      dx_insert_block(frame, hash2 + (hash2 == map[split-1].hash), newblock);
-+      ext3_journal_dirty_metadata (handle, bh2);
-+      brelse (bh2);
-+      ext3_journal_dirty_metadata (handle, frame->bh);
-+      dxtrace(dx_show_index ("frame", frame->entries));
-+      kfree(map);
-+      return de;
-+}
-+#endif
-+
-+
- /*
-  *    ext3_add_entry()
-  *
-@@ -255,118 +849,279 @@
-       struct inode *inode)
- {
-       struct inode *dir = dentry->d_parent->d_inode;
--      const char *name = dentry->d_name.name;
--      int namelen = dentry->d_name.len;
-       unsigned long offset;
--      unsigned short rec_len;
-       struct buffer_head * bh;
--      struct ext3_dir_entry_2 * de, * de1;
--      struct super_block * sb;
-+      ext3_dirent *de;
-+      struct super_block * sb = dir->i_sb;
-       int     retval;
-+      unsigned short reclen = EXT3_DIR_REC_LEN(dentry->d_name.len);
--      sb = dir->i_sb;
-+      unsigned nlen, rlen;
-+      u32 block, blocks;
-+      char *top;
--      if (!namelen)
-+      if (!dentry->d_name.len)
-               return -EINVAL;
--      bh = ext3_bread (handle, dir, 0, 0, &retval);
--      if (!bh)
--              return retval;
--      rec_len = EXT3_DIR_REC_LEN(namelen);
--      offset = 0;
--      de = (struct ext3_dir_entry_2 *) bh->b_data;
--      while (1) {
--              if ((char *)de >= sb->s_blocksize + bh->b_data) {
--                      brelse (bh);
--                      bh = NULL;
--                      bh = ext3_bread (handle, dir,
--                              offset >> EXT3_BLOCK_SIZE_BITS(sb), 1, &retval);
--                      if (!bh)
--                              return retval;
--                      if (dir->i_size <= offset) {
--                              if (dir->i_size == 0) {
--                                      brelse(bh);
--                                      return -ENOENT;
-+      if (ext3_dx && is_dx(dir)) {
-+              struct dx_frame frames[2], *frame;
-+              struct dx_entry *entries, *at;
-+              u32 hash;
-+              char *data1;
-+
-+              hash = dx_hash(dentry->d_name.name, dentry->d_name.len);
-+              /* FIXME: do something if dx_probe() fails here */
-+              frame = dx_probe(dir, hash, frames);
-+              entries = frame->entries;
-+              at = frame->at;
-+
-+              if (!(bh = ext3_bread(handle,dir, dx_get_block(at), 0,&retval)))
-+                      goto dxfail1;
-+
-+              BUFFER_TRACE(bh, "get_write_access");
-+              ext3_journal_get_write_access(handle, bh);
-+
-+              data1 = bh->b_data;
-+              de = (ext3_dirent *) data1;
-+              top = data1 + (0? 200: sb->s_blocksize);
-+              while ((char *) de < top)
-+              {
-+                      /* FIXME: check EEXIST and dir */
-+                      nlen = EXT3_DIR_REC_LEN(de->name_len);
-+                      rlen = le16_to_cpu(de->rec_len);
-+                      if ((de->inode? rlen - nlen: rlen) >= reclen)
-+                              goto dx_add;
-+                      de = (ext3_dirent *) ((char *) de + rlen);
-+              }
-+              /* Block full, should compress but for now just split */
-+              dxtrace(printk("using %u of %u node entries\n",
-+                      dx_get_count(entries), dx_get_limit(entries)));
-+              /* Need to split index? */
-+              if (dx_get_count(entries) == dx_get_limit(entries))
-+              {
-+                      u32 newblock;
-+                      unsigned icount = dx_get_count(entries);
-+                      int levels = frame - frames;
-+                      struct dx_entry *entries2;
-+                      struct dx_node *node2;
-+                      struct buffer_head *bh2;
-+                      if (levels && dx_get_count(frames->entries) == dx_get_limit(frames->entries))
-+                              goto dxfull;
-+                      bh2 = ext3_append (handle, dir, &newblock, &retval);
-+                      if (!(bh2))
-+                              goto dxfail2;
-+                      node2 = (struct dx_node *)(bh2->b_data);
-+                      entries2 = node2->entries;
-+                      node2->fake.rec_len = cpu_to_le16(sb->s_blocksize);
-+                      node2->fake.inode = 0;
-+                      BUFFER_TRACE(frame->bh, "get_write_access");
-+                      ext3_journal_get_write_access(handle, frame->bh);
-+                      if (levels)
-+                      {
-+                              unsigned icount1 = icount/2, icount2 = icount - icount1;
-+                              unsigned hash2 = dx_get_hash(entries + icount1);
-+                              dxtrace(printk("Split index %i/%i\n", icount1, icount2));
-+                              
-+                              BUFFER_TRACE(frame->bh, "get_write_access"); /* index root */
-+                              ext3_journal_get_write_access(handle, frames[0].bh);
-+                              
-+                              memcpy ((char *) entries2, (char *) (entries + icount1),
-+                                      icount2 * sizeof(struct dx_entry));
-+                              dx_set_count (entries, icount1);
-+                              dx_set_count (entries2, icount2);
-+                              dx_set_limit (entries2, dx_node_limit(dir));
-+
-+                              /* Which index block gets the new entry? */
-+                              if (at - entries >= icount1) {
-+                                      frame->at = at = at - entries - icount1 + entries2;
-+                                      frame->entries = entries = entries2;
-+                                      swap(frame->bh, bh2);
-                               }
--
--                              ext3_debug ("creating next block\n");
--
--                              BUFFER_TRACE(bh, "get_write_access");
--                              ext3_journal_get_write_access(handle, bh);
--                              de = (struct ext3_dir_entry_2 *) bh->b_data;
--                              de->inode = 0;
--                              de->rec_len = le16_to_cpu(sb->s_blocksize);
--                              dir->u.ext3_i.i_disksize =
--                                      dir->i_size = offset + sb->s_blocksize;
--                              dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
--                              ext3_mark_inode_dirty(handle, dir);
-+                              dx_insert_block (frames + 0, hash2, newblock);
-+                              dxtrace(dx_show_index ("node", frames[1].entries));
-+                              dxtrace(dx_show_index ("node",
-+                                      ((struct dx_node *) bh2->b_data)->entries));
-+                              ext3_journal_dirty_metadata(handle, bh2);
-+                              brelse (bh2);
-                       } else {
--
--                              ext3_debug ("skipping to next block\n");
--
--                              de = (struct ext3_dir_entry_2 *) bh->b_data;
-+                              dxtrace(printk("Creating second level index...\n"));
-+                              memcpy((char *) entries2, (char *) entries,
-+                                      icount * sizeof(struct dx_entry));
-+                              dx_set_limit(entries2, dx_node_limit(dir));
-+
-+                              /* Set up root */
-+                              dx_set_count(entries, 1);
-+                              dx_set_block(entries + 0, newblock);
-+                              ((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels = 1;
-+
-+                              /* Add new access path frame */
-+                              frame = frames + 1;
-+                              frame->at = at = at - entries + entries2;
-+                              frame->entries = entries = entries2;
-+                              frame->bh = bh2;
-+                              ext3_journal_get_write_access(handle, frame->bh);
-                       }
-+                      ext3_journal_dirty_metadata(handle, frames[0].bh);
-               }
--              if (!ext3_check_dir_entry ("ext3_add_entry", dir, de, bh,
--                                         offset)) {
--                      brelse (bh);
--                      return -ENOENT;
--              }
--              if (ext3_match (namelen, name, de)) {
-+              de = do_split(handle, dir, &bh, frame, hash, &retval);
-+              dx_release (frames);
-+              if (!(de))
-+                      goto fail;
-+              nlen = EXT3_DIR_REC_LEN(de->name_len);
-+              rlen = le16_to_cpu(de->rec_len);
-+              goto add;
-+
-+dx_add:
-+              dx_release (frames);
-+              goto add;
-+
-+dxfull:
-+              ext3_warning(sb, __FUNCTION__, "Directory index full!\n");
-+              retval = -ENOSPC;
-+dxfail2:
-+              brelse(bh);
-+dxfail1:
-+              dx_release (frames);
-+              goto fail1;
-+      }
-+
-+      blocks = dir->i_size >> sb->s_blocksize_bits;
-+      for (block = 0, offset = 0; block < blocks; block++) {
-+              bh = ext3_bread(handle, dir, block, 0, &retval);
-+              if(!bh)
-+                      return retval;
-+              de = (ext3_dirent *)bh->b_data;
-+              top = bh->b_data + sb->s_blocksize - reclen;
-+              while ((char *) de <= top) {
-+                      if (!ext3_check_dir_entry("ext3_add_entry", dir, de,
-+                                                bh, offset)) {
-+                              brelse (bh);
-+                              return -EIO;
-+                      }
-+                      if (ext3_match(dentry->d_name.len,dentry->d_name.name,de)) {
-                               brelse (bh);
-                               return -EEXIST;
--              }
--              if ((le32_to_cpu(de->inode) == 0 &&
--                              le16_to_cpu(de->rec_len) >= rec_len) ||
--                  (le16_to_cpu(de->rec_len) >=
--                              EXT3_DIR_REC_LEN(de->name_len) + rec_len)) {
--                      BUFFER_TRACE(bh, "get_write_access");
--                      ext3_journal_get_write_access(handle, bh);
--                      /* By now the buffer is marked for journaling */
--                      offset += le16_to_cpu(de->rec_len);
--                      if (le32_to_cpu(de->inode)) {
--                              de1 = (struct ext3_dir_entry_2 *) ((char *) de +
--                                      EXT3_DIR_REC_LEN(de->name_len));
--                              de1->rec_len =
--                                      cpu_to_le16(le16_to_cpu(de->rec_len) -
--                                      EXT3_DIR_REC_LEN(de->name_len));
--                              de->rec_len = cpu_to_le16(
--                                              EXT3_DIR_REC_LEN(de->name_len));
--                              de = de1;
-                       }
--                      de->file_type = EXT3_FT_UNKNOWN;
--                      if (inode) {
--                              de->inode = cpu_to_le32(inode->i_ino);
--                              ext3_set_de_type(dir->i_sb, de, inode->i_mode);
--                      } else
--                              de->inode = 0;
--                      de->name_len = namelen;
--                      memcpy (de->name, name, namelen);
--                      /*
--                       * XXX shouldn't update any times until successful
--                       * completion of syscall, but too many callers depend
--                       * on this.
--                       *
--                       * XXX similarly, too many callers depend on
--                       * ext3_new_inode() setting the times, but error
--                       * recovery deletes the inode, so the worst that can
--                       * happen is that the times are slightly out of date
--                       * and/or different from the directory change time.
--                       */
--                      dir->i_mtime = dir->i_ctime = CURRENT_TIME;
--                      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
--                      dir->i_version = ++event;
--                      ext3_mark_inode_dirty(handle, dir);
--                      BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
--                      ext3_journal_dirty_metadata(handle, bh);
-+                      nlen = EXT3_DIR_REC_LEN(de->name_len);
-+                      rlen = le16_to_cpu(de->rec_len);
-+                      if ((de->inode ? rlen - nlen: rlen) >= reclen)
-+                              goto add;
-+                      de = (ext3_dirent *)((char *)de + rlen);
-+                      offset += rlen;
-+              }
-+              if (ext3_dx && blocks == 1 && test_opt(sb, INDEX))
-+                      goto dx_make_index;
-+              brelse(bh);
-+      }
-+      bh = ext3_append(handle, dir, &block, &retval);
-+      if (!bh)
-+              return retval;
-+      de = (ext3_dirent *) bh->b_data;
-+      de->inode = 0;
-+      de->rec_len = cpu_to_le16(rlen = sb->s_blocksize);
-+      nlen = 0;
-+      goto add;
-+
-+add:
-+      BUFFER_TRACE(bh, "get_write_access");
-+      ext3_journal_get_write_access(handle, bh);
-+      /* By now the buffer is marked for journaling */
-+      if (de->inode) {
-+              ext3_dirent *de1 = (ext3_dirent *)((char *)de + nlen);
-+              de1->rec_len = cpu_to_le16(rlen - nlen);
-+              de->rec_len = cpu_to_le16(nlen);
-+              de = de1;
-+      }
-+      de->file_type = EXT3_FT_UNKNOWN;
-+      if (inode) {
-+              de->inode = cpu_to_le32(inode->i_ino);
-+              ext3_set_de_type(dir->i_sb, de, inode->i_mode);
-+      } else
-+              de->inode = 0;
-+      de->name_len = dentry->d_name.len;
-+      memcpy (de->name, dentry->d_name.name, dentry->d_name.len);
-+      /*
-+       * XXX shouldn't update any times until successful
-+       * completion of syscall, but too many callers depend
-+       * on this.
-+       *
-+       * XXX similarly, too many callers depend on
-+       * ext3_new_inode() setting the times, but error
-+       * recovery deletes the inode, so the worst that can
-+       * happen is that the times are slightly out of date
-+       * and/or different from the directory change time.
-+       */
-+      dir->i_mtime = dir->i_ctime = CURRENT_TIME;
-+      ext3_update_dx_flag(dir);
-+      dir->i_version = ++event;
-+      ext3_mark_inode_dirty(handle, dir);
-+      BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-+      ext3_journal_dirty_metadata(handle, bh);
-+      brelse(bh);
-+      return 0;
-+
-+dx_make_index:
-+      {
-+              struct buffer_head *bh2;
-+              struct dx_root *root;
-+              struct dx_frame frames[2], *frame;
-+              struct dx_entry *entries;
-+              ext3_dirent *de2;
-+              char *data1;
-+              unsigned len;
-+              u32 hash;
-+              
-+              dxtrace(printk("Creating index\n"));
-+              ext3_journal_get_write_access(handle, bh);
-+              root = (struct dx_root *) bh->b_data;
-+              
-+              EXT3_I(dir)->i_flags |= EXT3_INDEX_FL;
-+              bh2 = ext3_append (handle, dir, &block, &retval);
-+              if (!(bh2))
-+              {
-                       brelse(bh);
--                      return 0;
-+                      return retval;
-               }
--              offset += le16_to_cpu(de->rec_len);
--              de = (struct ext3_dir_entry_2 *)
--                      ((char *) de + le16_to_cpu(de->rec_len));
-+              data1 = bh2->b_data;
-+
-+              /* The 0th block becomes the root, move the dirents out */
-+              de = (struct ext3_dir_entry_2 *) &root->dotdot;
-+              de = (struct ext3_dir_entry_2 *)((char *)de + le16_to_cpu(de->rec_len));
-+              len = ((char *) root) + sb->s_blocksize - (char *) de;
-+              memcpy (data1, de, len);
-+              de = (ext3_dirent *) data1;
-+              top = data1 + len;
-+              while (((char *) de2=(char*)de+le16_to_cpu(de->rec_len)) < top)
-+                      de = de2;
-+              de->rec_len = cpu_to_le16(data1 + sb->s_blocksize - (char *)de);
-+              /* Initialize the root; the dot dirents already exist */
-+              de = (ext3_dirent *) (&root->dotdot);
-+              de->rec_len = cpu_to_le16(sb->s_blocksize-EXT3_DIR_REC_LEN(2));
-+              memset (&root->info, 0, sizeof(root->info));
-+              root->info.info_length = sizeof(root->info);
-+              entries = root->entries;
-+              dx_set_block (entries, 1);
-+              dx_set_count (entries, 1);
-+              dx_set_limit (entries, dx_root_limit(dir, sizeof(root->info)));
-+
-+              /* Initialize as for dx_probe */
-+              hash = dx_hash (dentry->d_name.name, dentry->d_name.len);
-+              frame = frames;
-+              frame->entries = entries;
-+              frame->at = entries;
-+              frame->bh = bh;
-+              bh = bh2;
-+              de = do_split(handle,dir, &bh, frame, hash, &retval);
-+              dx_release (frames);
-+              if (!(de))
-+                      return retval;
-+              nlen = EXT3_DIR_REC_LEN(de->name_len);
-+              rlen = le16_to_cpu(de->rec_len);
-+              goto add;
-       }
--      brelse (bh);
--      return -ENOSPC;
-+fail1:
-+      return retval;
-+fail:
-+      return -ENOENT;
- }
- /*
-@@ -451,7 +1212,8 @@
-       struct inode * inode;
-       int err;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3);
-       if (IS_ERR(handle))
-               return PTR_ERR(handle);
-@@ -478,7 +1240,8 @@
-       struct inode *inode;
-       int err;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3);
-       if (IS_ERR(handle))
-               return PTR_ERR(handle);
-@@ -507,7 +1270,8 @@
-       if (dir->i_nlink >= EXT3_LINK_MAX)
-               return -EMLINK;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 3);
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3);
-       if (IS_ERR(handle))
-               return PTR_ERR(handle);
-@@ -550,7 +1320,7 @@
-       if (err)
-               goto out_no_entry;
-       dir->i_nlink++;
--      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(dir);
-       ext3_mark_inode_dirty(handle, dir);
-       d_instantiate(dentry, inode);
- out_stop:
-@@ -832,7 +1596,7 @@
-       ext3_mark_inode_dirty(handle, inode);
-       dir->i_nlink--;
-       inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
--      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(dir);
-       ext3_mark_inode_dirty(handle, dir);
- end_rmdir:
-@@ -878,7 +1642,7 @@
-       if (retval)
-               goto end_unlink;
-       dir->i_ctime = dir->i_mtime = CURRENT_TIME;
--      dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(dir);
-       ext3_mark_inode_dirty(handle, dir);
-       inode->i_nlink--;
-       if (!inode->i_nlink)
-@@ -904,7 +1668,8 @@
-       if (l > dir->i_sb->s_blocksize)
-               return -ENAMETOOLONG;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS + 5);
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 5);
-       if (IS_ERR(handle))
-               return PTR_ERR(handle);
-@@ -959,7 +1724,8 @@
-       if (inode->i_nlink >= EXT3_LINK_MAX)
-               return -EMLINK;
--      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS);
-+      handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS);
-       if (IS_ERR(handle))
-               return PTR_ERR(handle);
-@@ -995,7 +1761,8 @@
-       old_bh = new_bh = dir_bh = NULL;
--      handle = ext3_journal_start(old_dir, 2 * EXT3_DATA_TRANS_BLOCKS + 2);
-+      handle = ext3_journal_start(old_dir, 2 * EXT3_DATA_TRANS_BLOCKS +
-+                                      EXT3_INDEX_EXTRA_TRANS_BLOCKS + 2);
-       if (IS_ERR(handle))
-               return PTR_ERR(handle);
-@@ -1069,14 +1837,37 @@
-       /*
-        * ok, that's it
-        */
--      ext3_delete_entry(handle, old_dir, old_de, old_bh);
-+      if (le32_to_cpu(old_de->inode) != old_inode->i_ino ||
-+          old_de->name_len != old_dentry->d_name.len ||
-+          strncmp(old_de->name, old_dentry->d_name.name, old_de->name_len) ||
-+          (retval = ext3_delete_entry(handle, old_dir,
-+                                      old_de, old_bh)) == -ENOENT) {
-+              /* old_de could have moved from under us during htree split, so
-+               * make sure that we are deleting the right entry.  We might
-+               * also be pointing to a stale entry in the unused part of
-+               * old_bh so just checking inum and the name isn't enough. */
-+              struct buffer_head *old_bh2;
-+              struct ext3_dir_entry_2 *old_de2;
-+              
-+              old_bh2 = ext3_find_entry(old_dentry, &old_de2);
-+              if (old_bh2) {
-+                      retval = ext3_delete_entry(handle, old_dir,
-+                                                 old_de2, old_bh2);
-+                      brelse(old_bh2);
-+              }
-+      }
-+      if (retval) {
-+              ext3_warning(old_dir->i_sb, "ext3_rename",
-+                              "Deleting old file (%lu), %d, error=%d",
-+                              old_dir->i_ino, old_dir->i_nlink, retval);
-+      }
-       if (new_inode) {
-               new_inode->i_nlink--;
-               new_inode->i_ctime = CURRENT_TIME;
-       }
-       old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME;
--      old_dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+      ext3_update_dx_flag(old_dir);
-       if (dir_bh) {
-               BUFFER_TRACE(dir_bh, "get_write_access");
-               ext3_journal_get_write_access(handle, dir_bh);
-@@ -1089,7 +1856,7 @@
-                       new_inode->i_nlink--;
-               } else {
-                       new_dir->i_nlink++;
--                      new_dir->u.ext3_i.i_flags &= ~EXT3_INDEX_FL;
-+                      ext3_update_dx_flag(new_dir);
-                       ext3_mark_inode_dirty(handle, new_dir);
-               }
-       }
---- ./include/linux/ext3_fs.h  2002/03/05 06:18:59     2.1
-+++ ./include/linux/ext3_fs.h  2002/03/05 06:26:56
-@@ -339,6 +339,7 @@
-   #define EXT3_MOUNT_WRITEBACK_DATA   0x0C00  /* No data ordering */
- #define EXT3_MOUNT_UPDATE_JOURNAL     0x1000  /* Update the journal format */
- #define EXT3_MOUNT_NO_UID32           0x2000  /* Disable 32-bit UIDs */
-+#define EXT3_MOUNT_INDEX              0x4000  /* Enable directory index */
- /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
- #ifndef _LINUX_EXT2_FS_H
-@@ -575,6 +576,24 @@
- #define EXT3_DIR_ROUND                        (EXT3_DIR_PAD - 1)
- #define EXT3_DIR_REC_LEN(name_len)    (((name_len) + 8 + EXT3_DIR_ROUND) & \
-                                        ~EXT3_DIR_ROUND)
-+/*
-+ * Hash Tree Directory indexing
-+ * (c) Daniel Phillips, 2001
-+ */
-+
-+#define CONFIG_EXT3_INDEX
-+
-+#ifdef CONFIG_EXT3_INDEX
-+  enum {ext3_dx = 1};
-+  #define is_dx(dir) (EXT3_I(dir)->i_flags & EXT3_INDEX_FL)
-+#define EXT3_DIR_LINK_MAX(dir) (!is_dx(dir) && (dir)->i_nlink >= EXT3_LINK_MAX)
-+#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || (dir)->i_nlink == 1)
-+#else
-+  enum {ext3_dx = 0};
-+  #define is_dx(dir) 0
-+#define EXT3_DIR_LINK_MAX(dir) ((dir)->i_nlink >= EXT3_LINK_MAX)
-+#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2)
-+#endif
- #ifdef __KERNEL__
- /*
---- ./include/linux/ext3_jbd.h 2002/03/05 06:18:59     2.1
-+++ ./include/linux/ext3_jbd.h 2002/03/05 06:33:54
-@@ -63,6 +63,8 @@
- #define EXT3_RESERVE_TRANS_BLOCKS     12
-+#define EXT3_INDEX_EXTRA_TRANS_BLOCKS 8
-+
- int
- ext3_mark_iloc_dirty(handle_t *handle, 
-                    struct inode *inode,
diff --git a/lustre/kernel_patches/patches/invalidate_show-2.4.19-pre1.patch b/lustre/kernel_patches/patches/invalidate_show-2.4.19-pre1.patch
deleted file mode 100644 (file)
index 376558b..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
- fs/inode.c         |   21 ++++++++++++++-------
- fs/smbfs/inode.c   |    2 +-
- fs/super.c         |    4 ++--
- include/linux/fs.h |    2 +-
- 4 files changed, 18 insertions(+), 11 deletions(-)
-
-Index: linux-2.4.19-pre1/fs/inode.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/inode.c  2003-11-21 02:39:48.000000000 +0300
-+++ linux-2.4.19-pre1/fs/inode.c       2003-11-21 02:39:54.000000000 +0300
-@@ -553,7 +553,8 @@
- /*
-  * Invalidate all inodes for a device.
-  */
--static int invalidate_list(struct list_head *head, struct super_block * sb, struct list_head * dispose)
-+static int invalidate_list(struct list_head *head, struct super_block * sb,
-+                         struct list_head * dispose, int show)
- {
-       struct list_head *next;
-       int busy = 0, count = 0;
-@@ -578,6 +579,11 @@
-                       count++;
-                       continue;
-               }
-+              if (show)
-+                      printk(KERN_ERR
-+                             "inode busy: dev %s:%lu (%p) mode %o count %u\n",
-+                             kdevname(sb->s_dev), inode->i_ino, inode,
-+                             inode->i_mode, atomic_read(&inode->i_count));
-               busy = 1;
-       }
-       /* only unused inodes may be cached with i_count zero */
-@@ -596,22 +602,23 @@
- /**
-  *    invalidate_inodes       - discard the inodes on a device
-  *    @sb: superblock
-+ *    @show: whether we should display any busy inodes found
-  *
-  *    Discard all of the inodes for a given superblock. If the discard
-  *    fails because there are busy inodes then a non zero value is returned.
-  *    If the discard is successful all the inodes have been discarded.
-  */
-  
--int invalidate_inodes(struct super_block * sb)
-+int invalidate_inodes(struct super_block * sb, int show)
- {
-       int busy;
-       LIST_HEAD(throw_away);
-       spin_lock(&inode_lock);
--      busy = invalidate_list(&inode_in_use, sb, &throw_away);
--      busy |= invalidate_list(&inode_unused, sb, &throw_away);
--      busy |= invalidate_list(&sb->s_dirty, sb, &throw_away);
--      busy |= invalidate_list(&sb->s_locked_inodes, sb, &throw_away);
-+      busy = invalidate_list(&inode_in_use, sb, &throw_away, show);
-+      busy |= invalidate_list(&inode_unused, sb, &throw_away, show);
-+      busy |= invalidate_list(&sb->s_dirty, sb, &throw_away, show);
-+      busy |= invalidate_list(&sb->s_locked_inodes, sb, &throw_away, show);
-       spin_unlock(&inode_lock);
-       dispose_list(&throw_away);
-@@ -637,7 +644,7 @@
-                * hold).
-                */
-               shrink_dcache_sb(sb);
--              res = invalidate_inodes(sb);
-+              res = invalidate_inodes(sb, 0);
-               drop_super(sb);
-       }
-       invalidate_buffers(dev);
-Index: linux-2.4.19-pre1/fs/super.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/super.c  2003-11-21 02:39:48.000000000 +0300
-+++ linux-2.4.19-pre1/fs/super.c       2003-11-21 02:40:09.000000000 +0300
-@@ -790,7 +790,7 @@
-       fsync_super(sb);
-       lock_super(sb);
-       sb->s_flags &= ~MS_ACTIVE;
--      invalidate_inodes(sb);  /* bad name - it should be evict_inodes() */
-+      invalidate_inodes(sb, 0);  /* bad name - it should be evict_inodes() */
-       if (sop) {
-               if (sop->write_super && sb->s_dirt)
-                       sop->write_super(sb);
-@@ -799,7 +799,7 @@
-       }
-       /* Forget any remaining inodes */
--      if (invalidate_inodes(sb)) {
-+      if (invalidate_inodes(sb, 1)) {
-               printk("VFS: Busy inodes after unmount. "
-                       "Self-destruct in 5 seconds.  Have a nice day...\n");
-       }
-Index: linux-2.4.19-pre1/include/linux/fs.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/fs.h  2003-11-21 02:39:53.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/fs.h       2003-11-21 02:39:54.000000000 +0300
-@@ -1214,7 +1214,7 @@
- extern void set_buffer_flushtime(struct buffer_head *);
- extern void balance_dirty(void);
- extern int check_disk_change(kdev_t);
--extern int invalidate_inodes(struct super_block *);
-+extern int invalidate_inodes(struct super_block *, int);
- extern int invalidate_device(kdev_t, int);
- extern void invalidate_inode_pages(struct inode *);
- extern void invalidate_inode_pages2(struct address_space *);
-Index: linux-2.4.19-pre1/fs/smbfs/inode.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/smbfs/inode.c    2003-11-21 02:39:48.000000000 +0300
-+++ linux-2.4.19-pre1/fs/smbfs/inode.c 2003-11-21 02:39:54.000000000 +0300
-@@ -166,7 +166,7 @@
- {
-       VERBOSE("\n");
-       shrink_dcache_sb(SB_of(server));
--      invalidate_inodes(SB_of(server));
-+      invalidate_inodes(SB_of(server), 0);
- }
- /*
diff --git a/lustre/kernel_patches/patches/invalidate_show_2.4.20_chaos.patch b/lustre/kernel_patches/patches/invalidate_show_2.4.20_chaos.patch
deleted file mode 100644 (file)
index 7c98c45..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
- fs/inode.c         |   21 ++++++++++++++-------
- fs/smbfs/inode.c   |    2 +-
- fs/super.c         |    4 ++--
- include/linux/fs.h |    2 +-
- 4 files changed, 18 insertions(+), 11 deletions(-)
-
---- kernel-2.4.20-6chaos_18_7/fs/inode.c~invalidate_show_2.4.20_chaos  2003-05-15 21:14:25.000000000 -0600
-+++ kernel-2.4.20-6chaos_18_7-braam/fs/inode.c 2003-07-12 15:33:08.000000000 -0600
-@@ -604,7 +604,8 @@ static void dispose_list(struct list_hea
- /*
-  * Invalidate all inodes for a device.
-  */
--static int invalidate_list(struct list_head *head, struct super_block * sb, struct list_head * dispose)
-+static int invalidate_list(struct list_head *head, struct super_block * sb,
-+                         struct list_head * dispose, int show)
- {
-       struct list_head *next;
-       int busy = 0, count = 0;
-@@ -629,6 +630,11 @@ static int invalidate_list(struct list_h
-                       count++;
-                       continue;
-               }
-+              if (show)
-+                      printk(KERN_ERR
-+                             "inode busy: dev %s:%lu (%p) mode %o count %u\n",
-+                             kdevname(sb->s_dev), inode->i_ino, inode,
-+                             inode->i_mode, atomic_read(&inode->i_count));
-               busy = 1;
-       }
-       /* only unused inodes may be cached with i_count zero */
-@@ -647,22 +653,23 @@ static int invalidate_list(struct list_h
- /**
-  *    invalidate_inodes       - discard the inodes on a device
-  *    @sb: superblock
-+ *      @show: whether we should display any busy inodes found
-  *
-  *    Discard all of the inodes for a given superblock. If the discard
-  *    fails because there are busy inodes then a non zero value is returned.
-  *    If the discard is successful all the inodes have been discarded.
-  */
-  
--int invalidate_inodes(struct super_block * sb)
-+int invalidate_inodes(struct super_block * sb, int show)
- {
-       int busy;
-       LIST_HEAD(throw_away);
-       spin_lock(&inode_lock);
--      busy = invalidate_list(&inode_in_use, sb, &throw_away);
--      busy |= invalidate_list(&inode_unused, sb, &throw_away);
--      busy |= invalidate_list(&sb->s_dirty, sb, &throw_away);
--      busy |= invalidate_list(&sb->s_locked_inodes, sb, &throw_away);
-+      busy = invalidate_list(&inode_in_use, sb, &throw_away, show);
-+      busy |= invalidate_list(&inode_unused, sb, &throw_away, show);
-+      busy |= invalidate_list(&sb->s_dirty, sb, &throw_away, show);
-+      busy |= invalidate_list(&sb->s_locked_inodes, sb, &throw_away, show);
-       spin_unlock(&inode_lock);
-       dispose_list(&throw_away);
-@@ -688,7 +695,7 @@ int invalidate_device(kdev_t dev, int do
-                * hold).
-                */
-               shrink_dcache_sb(sb);
--              res = invalidate_inodes(sb);
-+              res = invalidate_inodes(sb, 0);
-               drop_super(sb);
-       }
-       invalidate_buffers(dev);
---- kernel-2.4.20-6chaos_18_7/fs/super.c~invalidate_show_2.4.20_chaos  2003-05-15 21:14:25.000000000 -0600
-+++ kernel-2.4.20-6chaos_18_7-braam/fs/super.c 2003-07-12 15:31:35.000000000 -0600
-@@ -943,7 +943,7 @@ void kill_super(struct super_block *sb)
-       lock_super(sb);
-       lock_kernel();
-       sb->s_flags &= ~MS_ACTIVE;
--      invalidate_inodes(sb);  /* bad name - it should be evict_inodes() */
-+      invalidate_inodes(sb, 0);  /* bad name - it should be evict_inodes() */
-       if (sop) {
-               if (sop->write_super && sb->s_dirt)
-                       sop->write_super(sb);
-@@ -952,7 +952,7 @@ void kill_super(struct super_block *sb)
-       }
-       /* Forget any remaining inodes */
--      if (invalidate_inodes(sb)) {
-+      if (invalidate_inodes(sb, 1)) {
-               printk(KERN_ERR "VFS: Busy inodes after unmount. "
-                       "Self-destruct in 5 seconds.  Have a nice day...\n");
-       }
---- kernel-2.4.20-6chaos_18_7/include/linux/fs.h~invalidate_show_2.4.20_chaos  2003-07-12 15:14:02.000000000 -0600
-+++ kernel-2.4.20-6chaos_18_7-braam/include/linux/fs.h 2003-07-12 15:31:35.000000000 -0600
-@@ -1284,7 +1284,7 @@ static inline void mark_buffer_dirty_ino
- extern void set_buffer_flushtime(struct buffer_head *);
- extern void balance_dirty(void);
- extern int check_disk_change(kdev_t);
--extern int invalidate_inodes(struct super_block *);
-+extern int invalidate_inodes(struct super_block *, int);
- extern int invalidate_device(kdev_t, int);
- extern void invalidate_inode_pages(struct inode *);
- extern void invalidate_inode_pages2(struct address_space *);
---- kernel-2.4.20-6chaos_18_7/fs/smbfs/inode.c~invalidate_show_2.4.20_chaos    2003-02-14 15:59:13.000000000 -0700
-+++ kernel-2.4.20-6chaos_18_7-braam/fs/smbfs/inode.c   2003-07-12 15:31:35.000000000 -0600
-@@ -167,7 +167,7 @@ smb_invalidate_inodes(struct smb_sb_info
- {
-       VERBOSE("\n");
-       shrink_dcache_sb(SB_of(server));
--      invalidate_inodes(SB_of(server));
-+      invalidate_inodes(SB_of(server), 0);
- }
- /*
-
-_
diff --git a/lustre/kernel_patches/patches/iod-rmap-exports.patch b/lustre/kernel_patches/patches/iod-rmap-exports.patch
deleted file mode 100644 (file)
index 5ba68dd..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
- fs/Makefile     |    4 +++-
- fs/inode.c      |    4 +++-
- mm/Makefile     |    2 +-
- mm/page_alloc.c |    1 +
- mm/vmscan.c     |    3 +++
- 5 files changed, 11 insertions(+), 3 deletions(-)
-
---- linux-2.4.18-18/fs/inode.c~iod-rmap-exports        Thu Apr  3 00:40:01 2003
-+++ linux-2.4.18-18-braam/fs/inode.c   Thu Apr  3 00:40:01 2003
-@@ -5,6 +5,7 @@
-  */
- #include <linux/config.h>
-+#include <linux/module.h>
- #include <linux/fs.h>
- #include <linux/string.h>
- #include <linux/mm.h>
-@@ -66,7 +67,8 @@ static LIST_HEAD(anon_hash_chain); /* fo
-  * NOTE! You also have to own the lock if you change
-  * the i_state of an inode while it is in use..
-  */
--static spinlock_t inode_lock = SPIN_LOCK_UNLOCKED;
-+spinlock_t inode_lock = SPIN_LOCK_UNLOCKED;
-+EXPORT_SYMBOL(inode_lock);
- /*
-  * Statistics gathering..
---- linux-2.4.18-18/fs/Makefile~iod-rmap-exports       Thu Apr  3 00:40:01 2003
-+++ linux-2.4.18-18-braam/fs/Makefile  Thu Apr  3 00:40:29 2003
-@@ -1,3 +1,5 @@
-+
-+
- #
- # Makefile for the Linux filesystems.
- #
-@@ -7,7 +9,7 @@
- O_TARGET := fs.o
--export-objs :=        filesystems.o open.o dcache.o buffer.o
-+export-objs :=        filesystems.o open.o dcache.o buffer.o inode.o
- mod-subdirs :=        nls
- obj-y :=      open.o read_write.o devices.o file_table.o buffer.o \
---- linux-2.4.18-18/mm/vmscan.c~iod-rmap-exports       Thu Apr  3 00:40:01 2003
-+++ linux-2.4.18-18-braam/mm/vmscan.c  Thu Apr  3 00:40:01 2003
-@@ -14,6 +14,8 @@
-  *  Multiqueue VM started 5.8.00, Rik van Riel.
-  */
-+#include <linux/config.h>
-+#include <linux/module.h>
- #include <linux/slab.h>
- #include <linux/kernel_stat.h>
- #include <linux/swap.h>
-@@ -837,6 +839,7 @@ void wakeup_kswapd(unsigned int gfp_mask
-       set_current_state(TASK_RUNNING);
-       remove_wait_queue(&kswapd_done, &wait);
- }
-+EXPORT_SYMBOL(wakeup_kswapd);
- static void wakeup_memwaiters(void)
- {
---- linux-2.4.18-18/mm/Makefile~iod-rmap-exports       Thu Apr  3 00:40:01 2003
-+++ linux-2.4.18-18-braam/mm/Makefile  Thu Apr  3 00:40:01 2003
-@@ -9,7 +9,7 @@
- O_TARGET := mm.o
--export-objs := shmem.o filemap.o memory.o page_alloc.o mempool.o
-+export-objs := shmem.o filemap.o memory.o page_alloc.o mempool.o vmscan.o
- obj-y  := memory.o mmap.o filemap.o mprotect.o mlock.o mremap.o \
-           vmalloc.o slab.o bootmem.o swap.o vmscan.o page_io.o \
---- linux-2.4.18-18/mm/page_alloc.c~iod-rmap-exports   Thu Apr  3 00:40:01 2003
-+++ linux-2.4.18-18-braam/mm/page_alloc.c      Thu Apr  3 00:40:01 2003
-@@ -31,6 +31,7 @@ int nr_active_pages;
- int nr_inactive_dirty_pages;
- int nr_inactive_clean_pages;
- pg_data_t *pgdat_list;
-+EXPORT_SYMBOL(pgdat_list);
- /*
-  * The zone_table array is used to look up the address of the
-
-_
diff --git a/lustre/kernel_patches/patches/iopen-2.4.18-2.patch b/lustre/kernel_patches/patches/iopen-2.4.18-2.patch
deleted file mode 100644 (file)
index e2cd960..0000000
+++ /dev/null
@@ -1,493 +0,0 @@
- Documentation/filesystems/ext2.txt |   16 ++
- fs/ext3/Makefile                   |    2 
- fs/ext3/inode.c                    |    4 
- fs/ext3/iopen.c                    |  259 +++++++++++++++++++++++++++++++++++++
- fs/ext3/iopen.h                    |   13 +
- fs/ext3/namei.c                    |   12 +
- fs/ext3/super.c                    |   11 +
- include/linux/ext3_fs.h            |    2 
- 8 files changed, 318 insertions(+), 1 deletion(-)
-
-Index: linux-aed/Documentation/filesystems/ext2.txt
-===================================================================
---- linux-aed.orig/Documentation/filesystems/ext2.txt  Tue May  4 13:14:35 2004
-+++ linux-aed/Documentation/filesystems/ext2.txt       Tue May  4 19:17:12 2004
-@@ -35,6 +35,22 @@
- sb=n                          Use alternate superblock at this location.
-+iopen                         Makes an invisible pseudo-directory called
-+                              __iopen__ available in the root directory
-+                              of the filesystem.  Allows open-by-inode-
-+                              number.  i.e., inode 3145 can be accessed
-+                              via /mntpt/__iopen__/3145
-+
-+iopen_nopriv                  This option makes the iopen directory be
-+                              world-readable.  This may be safer since it
-+                              allows daemons to run as an unprivileged user,
-+                              however it significantly changes the security
-+                              model of a Unix filesystem, since previously
-+                              all files under a mode 700 directory were not
-+                              generally avilable even if the
-+                              permissions on the file itself is
-+                              world-readable.
-+
- grpquota,noquota,quota,usrquota       Quota options are silently ignored by ext2.
-Index: linux-aed/fs/ext3/Makefile
-===================================================================
---- linux-aed.orig/fs/ext3/Makefile    Tue May  4 19:16:51 2004
-+++ linux-aed/fs/ext3/Makefile Tue May  4 19:17:12 2004
-@@ -11,7 +11,7 @@
- export-objs :=        ext3-exports.o
--obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
-+obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
-               ioctl.o namei.o super.o symlink.o xattr.o hash.o ext3-exports.o
- obj-m    := $(O_TARGET)
-Index: linux-aed/fs/ext3/inode.c
-===================================================================
---- linux-aed.orig/fs/ext3/inode.c     Tue May  4 19:17:09 2004
-+++ linux-aed/fs/ext3/inode.c  Tue May  4 19:17:12 2004
-@@ -31,6 +31,7 @@
- #include <linux/highuid.h>
- #include <linux/quotaops.h>
- #include <linux/module.h>
-+#include "iopen.h"
- /*
-  * SEARCH_FROM_ZERO forces each block allocation to search from the start
-@@ -2277,6 +2278,9 @@
-       struct buffer_head *bh;
-       int block;
-       
-+      if (ext3_iopen_get_inode(inode))
-+              return;
-+
-       if(ext3_get_inode_loc(inode, &iloc))
-               goto bad_inode;
-       bh = iloc.bh;
-Index: linux-aed/fs/ext3/iopen.c
-===================================================================
---- linux-aed.orig/fs/ext3/iopen.c     Tue May  4 13:14:35 2004
-+++ linux-aed/fs/ext3/iopen.c  Tue May  4 19:17:12 2004
-@@ -0,0 +1,282 @@
-+/*
-+ * linux/fs/ext3/iopen.c
-+ *
-+ * Special support for open by inode number
-+ *
-+ * Copyright (C) 2001 by Theodore Ts'o (tytso@alum.mit.edu).
-+ *
-+ * This file may be redistributed under the terms of the GNU General
-+ * Public License.
-+ *
-+ *
-+ * Invariants:
-+ *   - there is only ever a single DCACHE_NFSD_DISCONNECTED dentry alias
-+ *     for an inode at one time.
-+ *   - there are never both connected and DCACHE_NFSD_DISCONNECTED dentry
-+ *     aliases on an inode at the same time.
-+ *
-+ * If we have any connected dentry aliases for an inode, use one of those
-+ * in iopen_lookup().  Otherwise, we instantiate a single NFSD_DISCONNECTED
-+ * dentry for this inode, which thereafter will be found by the dcache
-+ * when looking up this inode number in __iopen__, so we don't return here
-+ * until it is gone.
-+ *
-+ * If we get an inode via a regular name lookup, then we "rename" the
-+ * NFSD_DISCONNECTED dentry to the proper name and parent.  This ensures
-+ * existing users of the disconnected dentry will continue to use the same
-+ * dentry as the connected users, and there will never be both kinds of
-+ * dentry aliases at one time.
-+ */
-+
-+#include <linux/sched.h>
-+#include <linux/fs.h>
-+#include <linux/locks.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/jbd.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/smp_lock.h>
-+#include "iopen.h"
-+
-+#ifndef assert
-+#define assert(test) J_ASSERT(test)
-+#endif
-+
-+#define IOPEN_NAME_LEN        32
-+
-+/*
-+ * This implements looking up an inode by number.
-+ */
-+static struct dentry *iopen_lookup(struct inode *dir, struct dentry *dentry)
-+{
-+      struct inode *inode;
-+      unsigned long ino;
-+      struct list_head *lp;
-+      struct dentry *alternate;
-+      char buf[IOPEN_NAME_LEN];
-+
-+      if (dentry->d_name.len >= IOPEN_NAME_LEN)
-+              return ERR_PTR(-ENAMETOOLONG);
-+
-+      memcpy(buf, dentry->d_name.name, dentry->d_name.len);
-+      buf[dentry->d_name.len] = 0;
-+
-+      if (strcmp(buf, ".") == 0)
-+              ino = dir->i_ino;
-+      else if (strcmp(buf, "..") == 0)
-+              ino = EXT3_ROOT_INO;
-+      else
-+              ino = simple_strtoul(buf, 0, 0);
-+
-+      if ((ino != EXT3_ROOT_INO &&
-+           //ino != EXT3_ACL_IDX_INO &&
-+           //ino != EXT3_ACL_DATA_INO &&
-+           ino < EXT3_FIRST_INO(dir->i_sb)) ||
-+          ino > le32_to_cpu(dir->i_sb->u.ext3_sb.s_es->s_inodes_count))
-+              return ERR_PTR(-ENOENT);
-+
-+      inode = iget(dir->i_sb, ino);
-+      if (!inode)
-+              return ERR_PTR(-EACCES);
-+      if (is_bad_inode(inode)) {
-+              iput(inode);
-+              return ERR_PTR(-ENOENT);
-+      }
-+
-+      assert(list_empty(&dentry->d_alias));           /* d_instantiate */
-+      assert(list_empty(&dentry->d_hash));            /* d_rehash */
-+
-+      /* preferrably return a connected dentry */
-+      spin_lock(&dcache_lock);
-+      list_for_each(lp, &inode->i_dentry) {
-+              alternate = list_entry(lp, struct dentry, d_alias);
-+              assert(!(alternate->d_flags & DCACHE_NFSD_DISCONNECTED));
-+      }
-+
-+      if (!list_empty(&inode->i_dentry)) {
-+              alternate = list_entry(inode->i_dentry.next,
-+                                     struct dentry, d_alias);
-+              dget_locked(alternate);
-+              alternate->d_vfs_flags |= DCACHE_REFERENCED;
-+              iput(inode);
-+              spin_unlock(&dcache_lock);
-+              return alternate;
-+      }
-+      dentry->d_flags |= DCACHE_NFSD_DISCONNECTED;
-+
-+      /* d_add(), but don't drop dcache_lock before adding dentry to inode */
-+      list_add(&dentry->d_alias, &inode->i_dentry);   /* d_instantiate */
-+      dentry->d_inode = inode;
-+
-+      __d_rehash(dentry, 0);                          /* d_rehash */
-+      spin_unlock(&dcache_lock);
-+
-+      return NULL;
-+}
-+
-+#define do_switch(x,y) do { \
-+      __typeof__ (x) __tmp = x; \
-+      x = y; y = __tmp; } while (0)
-+
-+static inline void switch_names(struct dentry *dentry, struct dentry *target)
-+{
-+      const unsigned char *old_name, *new_name;
-+
-+      memcpy(dentry->d_iname, target->d_iname, DNAME_INLINE_LEN);
-+      old_name = target->d_name.name;
-+      new_name = dentry->d_name.name;
-+      if (old_name == target->d_iname)
-+              old_name = dentry->d_iname;
-+      if (new_name == dentry->d_iname)
-+              new_name = target->d_iname;
-+      target->d_name.name = new_name;
-+      dentry->d_name.name = old_name;
-+}
-+
-+/* This function is spliced into ext3_lookup and does the move of a
-+ * disconnected dentry (if it exists) to a connected dentry.
-+ */
-+struct dentry *iopen_connect_dentry(struct dentry *dentry, struct inode *inode,
-+                                  int rehash)
-+{
-+      struct dentry *tmp, *goal = NULL;
-+      struct list_head *lp;
-+
-+      /* verify this dentry is really new */
-+      assert(dentry->d_inode == NULL);
-+      assert(list_empty(&dentry->d_alias));           /* d_instantiate */
-+      if (rehash)
-+              assert(list_empty(&dentry->d_hash));    /* d_rehash */
-+      assert(list_empty(&dentry->d_subdirs));
-+
-+      spin_lock(&dcache_lock);
-+      if (!inode)
-+              goto do_rehash;
-+
-+      /* preferrably return a connected dentry */
-+      list_for_each(lp, &inode->i_dentry) {
-+              tmp = list_entry(lp, struct dentry, d_alias);
-+              if (tmp->d_flags & DCACHE_NFSD_DISCONNECTED) {
-+                      assert(tmp->d_alias.next == &inode->i_dentry);
-+                      assert(tmp->d_alias.prev == &inode->i_dentry);
-+                      goal = tmp;
-+                      dget_locked(goal);
-+                      break;
-+              }
-+      }
-+
-+      if (!goal)
-+              goto do_instantiate;
-+
-+      /* Move the goal to the de hash queue - like d_move() */
-+      goal->d_flags &= ~DCACHE_NFSD_DISCONNECTED;
-+      list_del_init(&goal->d_hash);
-+
-+      list_del(&goal->d_child);
-+      list_del(&dentry->d_child);
-+
-+      /* Switch the parents and the names.. */
-+      switch_names(goal, dentry);
-+      do_switch(goal->d_parent, dentry->d_parent);
-+      do_switch(goal->d_name.len, dentry->d_name.len);
-+      do_switch(goal->d_name.hash, dentry->d_name.hash);
-+
-+      /* And add them back to the (new) parent lists */
-+      list_add(&goal->d_child, &goal->d_parent->d_subdirs);
-+      list_add(&dentry->d_child, &dentry->d_parent->d_subdirs);
-+      __d_rehash(goal, 0);
-+      spin_unlock(&dcache_lock);
-+      iput(inode);
-+
-+      return goal;
-+
-+      /* d_add(), but don't drop dcache_lock before adding dentry to inode */
-+do_instantiate:
-+      list_add(&dentry->d_alias, &inode->i_dentry);   /* d_instantiate */
-+      dentry->d_inode = inode;
-+do_rehash:
-+      if (rehash)
-+              __d_rehash(dentry, 0);                  /* d_rehash */
-+      spin_unlock(&dcache_lock);
-+
-+      return NULL;
-+}
-+
-+/*
-+ * These are the special structures for the iopen pseudo directory.
-+ */
-+
-+static struct inode_operations iopen_inode_operations = {
-+      lookup:         iopen_lookup,           /* BKL held */
-+};
-+
-+static struct file_operations iopen_file_operations = {
-+      read:           generic_read_dir,
-+};
-+
-+static int match_dentry(struct dentry *dentry, const char *name)
-+{
-+      int     len;
-+
-+      len = strlen(name);
-+      if (dentry->d_name.len != len)
-+              return 0;
-+      if (strncmp(dentry->d_name.name, name, len))
-+              return 0;
-+      return 1;
-+}
-+
-+/*
-+ * This function is spliced into ext3_lookup and returns 1 the file
-+ * name is __iopen__ and dentry has been filled in appropriately.
-+ */
-+int ext3_check_for_iopen(struct inode *dir, struct dentry *dentry)
-+{
-+      struct inode *inode;
-+
-+      if (dir->i_ino != EXT3_ROOT_INO ||
-+          !test_opt(dir->i_sb, IOPEN) ||
-+          !match_dentry(dentry, "__iopen__"))
-+              return 0;
-+
-+      inode = iget(dir->i_sb, EXT3_BAD_INO);
-+
-+      if (!inode)
-+              return 0;
-+      d_add(dentry, inode);
-+      return 1;
-+}
-+
-+/*
-+ * This function is spliced into read_inode; it returns 1 if inode
-+ * number is the one for /__iopen__, in which case the inode is filled
-+ * in appropriately.  Otherwise, this fuction returns 0.
-+ */
-+int ext3_iopen_get_inode(struct inode *inode)
-+{
-+      if (inode->i_ino != EXT3_BAD_INO)
-+              return 0;
-+
-+      inode->i_mode = S_IFDIR | S_IRUSR | S_IXUSR;
-+      if (test_opt(inode->i_sb, IOPEN_NOPRIV))
-+              inode->i_mode |= 0777;
-+      inode->i_uid = 0;
-+      inode->i_gid = 0;
-+      inode->i_nlink = 1;
-+      inode->i_size = 4096;
-+      inode->i_atime = CURRENT_TIME;
-+      inode->i_ctime = CURRENT_TIME;
-+      inode->i_mtime = CURRENT_TIME;
-+      inode->u.ext3_i.i_dtime = 0;
-+      inode->i_blksize = PAGE_SIZE;   /* This is the optimal IO size
-+                                       * (for stat), not the fs block
-+                                       * size */
-+      inode->i_blocks = 0;
-+      inode->i_version = 1;
-+      inode->i_generation = 0;
-+
-+      inode->i_op = &iopen_inode_operations;
-+      inode->i_fop = &iopen_file_operations;
-+      inode->i_mapping->a_ops = 0;
-+
-+      return 1;
-+}
-Index: linux-aed/fs/ext3/iopen.h
-===================================================================
---- linux-aed.orig/fs/ext3/iopen.h     Tue May  4 13:14:35 2004
-+++ linux-aed/fs/ext3/iopen.h  Tue May  4 19:17:12 2004
-@@ -0,0 +1,15 @@
-+/*
-+ * iopen.h
-+ *
-+ * Special support for opening files by inode number.
-+ *
-+ * Copyright (C) 2001 by Theodore Ts'o (tytso@alum.mit.edu).
-+ *
-+ * This file may be redistributed under the terms of the GNU General
-+ * Public License.
-+ */
-+
-+extern int ext3_check_for_iopen(struct inode *dir, struct dentry *dentry);
-+extern int ext3_iopen_get_inode(struct inode *inode);
-+extern struct dentry *iopen_connect_dentry(struct dentry *dentry,
-+                                         struct inode *inode, int rehash);
-Index: linux-aed/fs/ext3/namei.c
-===================================================================
---- linux-aed.orig/fs/ext3/namei.c     Tue May  4 19:17:05 2004
-+++ linux-aed/fs/ext3/namei.c  Tue May  4 19:17:12 2004
-@@ -34,6 +34,7 @@
- #include <linux/locks.h>
- #include <linux/quotaops.h>
- #include <linux/slab.h>
-+#include "iopen.h"
- /*
-  * define how far ahead to read directories while searching them.
-@@ -713,6 +714,9 @@
-       if (dentry->d_name.len > EXT3_NAME_LEN)
-               return ERR_PTR(-ENAMETOOLONG);
-+      if (ext3_check_for_iopen(dir, dentry))
-+              return NULL;
-+
-       bh = ext3_find_entry(dentry, &de);
-       inode = NULL;
-       if (bh) {
-@@ -723,8 +727,8 @@
-               if (!inode)
-                       return ERR_PTR(-EACCES);
-       }
--      d_add(dentry, inode);
--      return NULL;
-+
-+      return iopen_connect_dentry(dentry, inode, 1);
- }
- #define S_SHIFT 12
-@@ -1588,10 +1592,6 @@
-                             inode->i_nlink);
-       inode->i_version = ++event;
-       inode->i_nlink = 0;
--      /* There's no need to set i_disksize: the fact that i_nlink is
--       * zero will ensure that the right thing happens during any
--       * recovery. */
--      inode->i_size = 0;
-       ext3_orphan_add(handle, inode);
-       ext3_mark_inode_dirty(handle, inode);
-       dir->i_nlink--;
-@@ -1711,6 +1711,23 @@
-       goto out_stop;
- }
-+/* Like ext3_add_nondir() except for call to iopen_connect_dentry */
-+static int ext3_add_link(handle_t *handle, struct dentry *dentry,
-+                       struct inode *inode)
-+{
-+      int err = ext3_add_entry(handle, dentry, inode);
-+      if (!err) {
-+              err = ext3_mark_inode_dirty(handle, inode);
-+              if (err == 0) {
-+                      dput(iopen_connect_dentry(dentry, inode, 0));
-+                      return 0;
-+              }
-+      }
-+      ext3_dec_count(handle, inode);
-+      iput(inode);
-+      return err;
-+}
-+
- static int ext3_link (struct dentry * old_dentry,
-               struct inode * dir, struct dentry *dentry)
- {
-@@ -1736,7 +1753,8 @@
-       ext3_inc_count(handle, inode);
-       atomic_inc(&inode->i_count);
--      err = ext3_add_nondir(handle, dentry, inode);
-+      err = ext3_add_link(handle, dentry, inode);
-+      ext3_orphan_del(handle, inode);
-       ext3_mark_inode_dirty(handle, inode);
-       ext3_journal_stop(handle, dir);
-       return err;
-Index: linux-aed/fs/ext3/super.c
-===================================================================
---- linux-aed.orig/fs/ext3/super.c     Tue May  4 19:17:01 2004
-+++ linux-aed/fs/ext3/super.c  Tue May  4 19:17:12 2004
-@@ -834,6 +834,18 @@
-                        || !strcmp (this_char, "quota")
-                        || !strcmp (this_char, "usrquota"))
-                       /* Don't do anything ;-) */ ;
-+              else if (!strcmp (this_char, "iopen")) {
-+                      set_opt (sbi->s_mount_opt, IOPEN);
-+                      clear_opt (sbi->s_mount_opt, IOPEN_NOPRIV);
-+              }
-+              else if (!strcmp (this_char, "noiopen")) {
-+                      clear_opt (sbi->s_mount_opt, IOPEN);
-+                      clear_opt (sbi->s_mount_opt, IOPEN_NOPRIV);
-+              }
-+              else if (!strcmp (this_char, "iopen_nopriv")) {
-+                      set_opt (sbi->s_mount_opt, IOPEN);
-+                      set_opt (sbi->s_mount_opt, IOPEN_NOPRIV);
-+              }
-               else if (!strcmp (this_char, "journal")) {
-                       /* @@@ FIXME */
-                       /* Eventually we will want to be able to create
-Index: linux-aed/include/linux/ext3_fs.h
-===================================================================
---- linux-aed.orig/include/linux/ext3_fs.h     Tue May  4 19:17:08 2004
-+++ linux-aed/include/linux/ext3_fs.h  Tue May  4 19:17:12 2004
-@@ -321,6 +321,8 @@
-   #define EXT3_MOUNT_WRITEBACK_DATA   0x0C00  /* No data ordering */
- #define EXT3_MOUNT_UPDATE_JOURNAL     0x1000  /* Update the journal format */
- #define EXT3_MOUNT_NO_UID32           0x2000  /* Disable 32-bit UIDs */
-+#define EXT3_MOUNT_IOPEN              0x8000  /* Allow access via iopen */
-+#define EXT3_MOUNT_IOPEN_NOPRIV               0x10000 /* Make iopen world-readable */
- #define EXT3_MOUNT_ASYNCDEL           0x20000 /* Delayed deletion */
- /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
diff --git a/lustre/kernel_patches/patches/iopen-2.4.18.patch b/lustre/kernel_patches/patches/iopen-2.4.18.patch
deleted file mode 100644 (file)
index 3e6e36e..0000000
+++ /dev/null
@@ -1,493 +0,0 @@
- Documentation/filesystems/ext2.txt |   16 ++
- fs/ext3/Makefile                   |    2 
- fs/ext3/inode.c                    |    4 
- fs/ext3/iopen.c                    |  259 +++++++++++++++++++++++++++++++++++++
- fs/ext3/iopen.h                    |   13 +
- fs/ext3/namei.c                    |   12 +
- fs/ext3/super.c                    |   11 +
- include/linux/ext3_fs.h            |    2 
- 8 files changed, 318 insertions(+), 1 deletion(-)
-
-Index: linux-aed/Documentation/filesystems/ext2.txt
-===================================================================
---- linux-aed.orig/Documentation/filesystems/ext2.txt  Tue May  4 13:14:35 2004
-+++ linux-aed/Documentation/filesystems/ext2.txt       Tue May  4 19:17:12 2004
-@@ -35,6 +35,22 @@
- sb=n                          Use alternate superblock at this location.
-+iopen                         Makes an invisible pseudo-directory called
-+                              __iopen__ available in the root directory
-+                              of the filesystem.  Allows open-by-inode-
-+                              number.  i.e., inode 3145 can be accessed
-+                              via /mntpt/__iopen__/3145
-+
-+iopen_nopriv                  This option makes the iopen directory be
-+                              world-readable.  This may be safer since it
-+                              allows daemons to run as an unprivileged user,
-+                              however it significantly changes the security
-+                              model of a Unix filesystem, since previously
-+                              all files under a mode 700 directory were not
-+                              generally avilable even if the
-+                              permissions on the file itself is
-+                              world-readable.
-+
- grpquota,noquota,quota,usrquota       Quota options are silently ignored by ext2.
-Index: linux-aed/fs/ext3/Makefile
-===================================================================
---- linux-aed.orig/fs/ext3/Makefile    Tue May  4 19:16:51 2004
-+++ linux-aed/fs/ext3/Makefile Tue May  4 19:17:12 2004
-@@ -11,7 +11,7 @@
- export-objs :=        ext3-exports.o
--obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
-+obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
-               ioctl.o namei.o super.o symlink.o xattr.o ext3-exports.o
- obj-m    := $(O_TARGET)
-Index: linux-aed/fs/ext3/inode.c
-===================================================================
---- linux-aed.orig/fs/ext3/inode.c     Tue May  4 19:17:09 2004
-+++ linux-aed/fs/ext3/inode.c  Tue May  4 19:17:12 2004
-@@ -31,6 +31,7 @@
- #include <linux/highuid.h>
- #include <linux/quotaops.h>
- #include <linux/module.h>
-+#include "iopen.h"
- /*
-  * SEARCH_FROM_ZERO forces each block allocation to search from the start
-@@ -2277,6 +2278,9 @@
-       struct buffer_head *bh;
-       int block;
-       
-+      if (ext3_iopen_get_inode(inode))
-+              return;
-+
-       if(ext3_get_inode_loc(inode, &iloc))
-               goto bad_inode;
-       bh = iloc.bh;
-Index: linux-aed/fs/ext3/iopen.c
-===================================================================
---- linux-aed.orig/fs/ext3/iopen.c     Tue May  4 13:14:35 2004
-+++ linux-aed/fs/ext3/iopen.c  Tue May  4 19:17:12 2004
-@@ -0,0 +1,282 @@
-+/*
-+ * linux/fs/ext3/iopen.c
-+ *
-+ * Special support for open by inode number
-+ *
-+ * Copyright (C) 2001 by Theodore Ts'o (tytso@alum.mit.edu).
-+ *
-+ * This file may be redistributed under the terms of the GNU General
-+ * Public License.
-+ *
-+ *
-+ * Invariants:
-+ *   - there is only ever a single DCACHE_NFSD_DISCONNECTED dentry alias
-+ *     for an inode at one time.
-+ *   - there are never both connected and DCACHE_NFSD_DISCONNECTED dentry
-+ *     aliases on an inode at the same time.
-+ *
-+ * If we have any connected dentry aliases for an inode, use one of those
-+ * in iopen_lookup().  Otherwise, we instantiate a single NFSD_DISCONNECTED
-+ * dentry for this inode, which thereafter will be found by the dcache
-+ * when looking up this inode number in __iopen__, so we don't return here
-+ * until it is gone.
-+ *
-+ * If we get an inode via a regular name lookup, then we "rename" the
-+ * NFSD_DISCONNECTED dentry to the proper name and parent.  This ensures
-+ * existing users of the disconnected dentry will continue to use the same
-+ * dentry as the connected users, and there will never be both kinds of
-+ * dentry aliases at one time.
-+ */
-+
-+#include <linux/sched.h>
-+#include <linux/fs.h>
-+#include <linux/locks.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/jbd.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/smp_lock.h>
-+#include "iopen.h"
-+
-+#ifndef assert
-+#define assert(test) J_ASSERT(test)
-+#endif
-+
-+#define IOPEN_NAME_LEN        32
-+
-+/*
-+ * This implements looking up an inode by number.
-+ */
-+static struct dentry *iopen_lookup(struct inode *dir, struct dentry *dentry)
-+{
-+      struct inode *inode;
-+      unsigned long ino;
-+      struct list_head *lp;
-+      struct dentry *alternate;
-+      char buf[IOPEN_NAME_LEN];
-+
-+      if (dentry->d_name.len >= IOPEN_NAME_LEN)
-+              return ERR_PTR(-ENAMETOOLONG);
-+
-+      memcpy(buf, dentry->d_name.name, dentry->d_name.len);
-+      buf[dentry->d_name.len] = 0;
-+
-+      if (strcmp(buf, ".") == 0)
-+              ino = dir->i_ino;
-+      else if (strcmp(buf, "..") == 0)
-+              ino = EXT3_ROOT_INO;
-+      else
-+              ino = simple_strtoul(buf, 0, 0);
-+
-+      if ((ino != EXT3_ROOT_INO &&
-+           //ino != EXT3_ACL_IDX_INO &&
-+           //ino != EXT3_ACL_DATA_INO &&
-+           ino < EXT3_FIRST_INO(dir->i_sb)) ||
-+          ino > le32_to_cpu(dir->i_sb->u.ext3_sb.s_es->s_inodes_count))
-+              return ERR_PTR(-ENOENT);
-+
-+      inode = iget(dir->i_sb, ino);
-+      if (!inode)
-+              return ERR_PTR(-EACCES);
-+      if (is_bad_inode(inode)) {
-+              iput(inode);
-+              return ERR_PTR(-ENOENT);
-+      }
-+
-+      assert(list_empty(&dentry->d_alias));           /* d_instantiate */
-+      assert(list_empty(&dentry->d_hash));            /* d_rehash */
-+
-+      /* preferrably return a connected dentry */
-+      spin_lock(&dcache_lock);
-+      list_for_each(lp, &inode->i_dentry) {
-+              alternate = list_entry(lp, struct dentry, d_alias);
-+              assert(!(alternate->d_flags & DCACHE_NFSD_DISCONNECTED));
-+      }
-+
-+      if (!list_empty(&inode->i_dentry)) {
-+              alternate = list_entry(inode->i_dentry.next,
-+                                     struct dentry, d_alias);
-+              dget_locked(alternate);
-+              alternate->d_vfs_flags |= DCACHE_REFERENCED;
-+              iput(inode);
-+              spin_unlock(&dcache_lock);
-+              return alternate;
-+      }
-+      dentry->d_flags |= DCACHE_NFSD_DISCONNECTED;
-+
-+      /* d_add(), but don't drop dcache_lock before adding dentry to inode */
-+      list_add(&dentry->d_alias, &inode->i_dentry);   /* d_instantiate */
-+      dentry->d_inode = inode;
-+
-+      __d_rehash(dentry, 0);                          /* d_rehash */
-+      spin_unlock(&dcache_lock);
-+
-+      return NULL;
-+}
-+
-+#define do_switch(x,y) do { \
-+      __typeof__ (x) __tmp = x; \
-+      x = y; y = __tmp; } while (0)
-+
-+static inline void switch_names(struct dentry *dentry, struct dentry *target)
-+{
-+      const unsigned char *old_name, *new_name;
-+
-+      memcpy(dentry->d_iname, target->d_iname, DNAME_INLINE_LEN);
-+      old_name = target->d_name.name;
-+      new_name = dentry->d_name.name;
-+      if (old_name == target->d_iname)
-+              old_name = dentry->d_iname;
-+      if (new_name == dentry->d_iname)
-+              new_name = target->d_iname;
-+      target->d_name.name = new_name;
-+      dentry->d_name.name = old_name;
-+}
-+
-+/* This function is spliced into ext3_lookup and does the move of a
-+ * disconnected dentry (if it exists) to a connected dentry.
-+ */
-+struct dentry *iopen_connect_dentry(struct dentry *dentry, struct inode *inode,
-+                                  int rehash)
-+{
-+      struct dentry *tmp, *goal = NULL;
-+      struct list_head *lp;
-+
-+      /* verify this dentry is really new */
-+      assert(dentry->d_inode == NULL);
-+      assert(list_empty(&dentry->d_alias));           /* d_instantiate */
-+      if (rehash)
-+              assert(list_empty(&dentry->d_hash));    /* d_rehash */
-+      assert(list_empty(&dentry->d_subdirs));
-+
-+      spin_lock(&dcache_lock);
-+      if (!inode)
-+              goto do_rehash;
-+
-+      /* preferrably return a connected dentry */
-+      list_for_each(lp, &inode->i_dentry) {
-+              tmp = list_entry(lp, struct dentry, d_alias);
-+              if (tmp->d_flags & DCACHE_NFSD_DISCONNECTED) {
-+                      assert(tmp->d_alias.next == &inode->i_dentry);
-+                      assert(tmp->d_alias.prev == &inode->i_dentry);
-+                      goal = tmp;
-+                      dget_locked(goal);
-+                      break;
-+              }
-+      }
-+
-+      if (!goal)
-+              goto do_instantiate;
-+
-+      /* Move the goal to the de hash queue - like d_move() */
-+      goal->d_flags &= ~DCACHE_NFSD_DISCONNECTED;
-+      list_del_init(&goal->d_hash);
-+
-+      list_del(&goal->d_child);
-+      list_del(&dentry->d_child);
-+
-+      /* Switch the parents and the names.. */
-+      switch_names(goal, dentry);
-+      do_switch(goal->d_parent, dentry->d_parent);
-+      do_switch(goal->d_name.len, dentry->d_name.len);
-+      do_switch(goal->d_name.hash, dentry->d_name.hash);
-+
-+      /* And add them back to the (new) parent lists */
-+      list_add(&goal->d_child, &goal->d_parent->d_subdirs);
-+      list_add(&dentry->d_child, &dentry->d_parent->d_subdirs);
-+      __d_rehash(goal, 0);
-+      spin_unlock(&dcache_lock);
-+      iput(inode);
-+
-+      return goal;
-+
-+      /* d_add(), but don't drop dcache_lock before adding dentry to inode */
-+do_instantiate:
-+      list_add(&dentry->d_alias, &inode->i_dentry);   /* d_instantiate */
-+      dentry->d_inode = inode;
-+do_rehash:
-+      if (rehash)
-+              __d_rehash(dentry, 0);                  /* d_rehash */
-+      spin_unlock(&dcache_lock);
-+
-+      return NULL;
-+}
-+
-+/*
-+ * These are the special structures for the iopen pseudo directory.
-+ */
-+
-+static struct inode_operations iopen_inode_operations = {
-+      lookup:         iopen_lookup,           /* BKL held */
-+};
-+
-+static struct file_operations iopen_file_operations = {
-+      read:           generic_read_dir,
-+};
-+
-+static int match_dentry(struct dentry *dentry, const char *name)
-+{
-+      int     len;
-+
-+      len = strlen(name);
-+      if (dentry->d_name.len != len)
-+              return 0;
-+      if (strncmp(dentry->d_name.name, name, len))
-+              return 0;
-+      return 1;
-+}
-+
-+/*
-+ * This function is spliced into ext3_lookup and returns 1 the file
-+ * name is __iopen__ and dentry has been filled in appropriately.
-+ */
-+int ext3_check_for_iopen(struct inode *dir, struct dentry *dentry)
-+{
-+      struct inode *inode;
-+
-+      if (dir->i_ino != EXT3_ROOT_INO ||
-+          !test_opt(dir->i_sb, IOPEN) ||
-+          !match_dentry(dentry, "__iopen__"))
-+              return 0;
-+
-+      inode = iget(dir->i_sb, EXT3_BAD_INO);
-+
-+      if (!inode)
-+              return 0;
-+      d_add(dentry, inode);
-+      return 1;
-+}
-+
-+/*
-+ * This function is spliced into read_inode; it returns 1 if inode
-+ * number is the one for /__iopen__, in which case the inode is filled
-+ * in appropriately.  Otherwise, this fuction returns 0.
-+ */
-+int ext3_iopen_get_inode(struct inode *inode)
-+{
-+      if (inode->i_ino != EXT3_BAD_INO)
-+              return 0;
-+
-+      inode->i_mode = S_IFDIR | S_IRUSR | S_IXUSR;
-+      if (test_opt(inode->i_sb, IOPEN_NOPRIV))
-+              inode->i_mode |= 0777;
-+      inode->i_uid = 0;
-+      inode->i_gid = 0;
-+      inode->i_nlink = 1;
-+      inode->i_size = 4096;
-+      inode->i_atime = CURRENT_TIME;
-+      inode->i_ctime = CURRENT_TIME;
-+      inode->i_mtime = CURRENT_TIME;
-+      inode->u.ext3_i.i_dtime = 0;
-+      inode->i_blksize = PAGE_SIZE;   /* This is the optimal IO size
-+                                       * (for stat), not the fs block
-+                                       * size */
-+      inode->i_blocks = 0;
-+      inode->i_version = 1;
-+      inode->i_generation = 0;
-+
-+      inode->i_op = &iopen_inode_operations;
-+      inode->i_fop = &iopen_file_operations;
-+      inode->i_mapping->a_ops = 0;
-+
-+      return 1;
-+}
-Index: linux-aed/fs/ext3/iopen.h
-===================================================================
---- linux-aed.orig/fs/ext3/iopen.h     Tue May  4 13:14:35 2004
-+++ linux-aed/fs/ext3/iopen.h  Tue May  4 19:17:12 2004
-@@ -0,0 +1,15 @@
-+/*
-+ * iopen.h
-+ *
-+ * Special support for opening files by inode number.
-+ *
-+ * Copyright (C) 2001 by Theodore Ts'o (tytso@alum.mit.edu).
-+ *
-+ * This file may be redistributed under the terms of the GNU General
-+ * Public License.
-+ */
-+
-+extern int ext3_check_for_iopen(struct inode *dir, struct dentry *dentry);
-+extern int ext3_iopen_get_inode(struct inode *inode);
-+extern struct dentry *iopen_connect_dentry(struct dentry *dentry,
-+                                         struct inode *inode, int rehash);
-Index: linux-aed/fs/ext3/namei.c
-===================================================================
---- linux-aed.orig/fs/ext3/namei.c     Tue May  4 19:17:05 2004
-+++ linux-aed/fs/ext3/namei.c  Tue May  4 19:17:12 2004
-@@ -34,6 +34,7 @@
- #include <linux/locks.h>
- #include <linux/quotaops.h>
- #include <linux/slab.h>
-+#include "iopen.h"
- /*
-  * define how far ahead to read directories while searching them.
-@@ -713,6 +714,9 @@
-       if (dentry->d_name.len > EXT3_NAME_LEN)
-               return ERR_PTR(-ENAMETOOLONG);
-+      if (ext3_check_for_iopen(dir, dentry))
-+              return NULL;
-+
-       bh = ext3_find_entry(dentry, &de);
-       inode = NULL;
-       if (bh) {
-@@ -723,8 +727,8 @@
-               if (!inode)
-                       return ERR_PTR(-EACCES);
-       }
--      d_add(dentry, inode);
--      return NULL;
-+
-+      return iopen_connect_dentry(dentry, inode, 1);
- }
- #define S_SHIFT 12
-@@ -1588,10 +1592,6 @@
-                             inode->i_nlink);
-       inode->i_version = ++event;
-       inode->i_nlink = 0;
--      /* There's no need to set i_disksize: the fact that i_nlink is
--       * zero will ensure that the right thing happens during any
--       * recovery. */
--      inode->i_size = 0;
-       ext3_orphan_add(handle, inode);
-       ext3_mark_inode_dirty(handle, inode);
-       dir->i_nlink--;
-@@ -1711,6 +1711,23 @@
-       goto out_stop;
- }
-+/* Like ext3_add_nondir() except for call to iopen_connect_dentry */
-+static int ext3_add_link(handle_t *handle, struct dentry *dentry,
-+                       struct inode *inode)
-+{
-+      int err = ext3_add_entry(handle, dentry, inode);
-+      if (!err) {
-+              err = ext3_mark_inode_dirty(handle, inode);
-+              if (err == 0) {
-+                      dput(iopen_connect_dentry(dentry, inode, 0));
-+                      return 0;
-+              }
-+      }
-+      ext3_dec_count(handle, inode);
-+      iput(inode);
-+      return err;
-+}
-+
- static int ext3_link (struct dentry * old_dentry,
-               struct inode * dir, struct dentry *dentry)
- {
-@@ -1736,7 +1753,8 @@
-       ext3_inc_count(handle, inode);
-       atomic_inc(&inode->i_count);
--      err = ext3_add_nondir(handle, dentry, inode);
-+      err = ext3_add_link(handle, dentry, inode);
-+      ext3_orphan_del(handle, inode);
-       ext3_mark_inode_dirty(handle, inode);
-       ext3_journal_stop(handle, dir);
-       return err;
-Index: linux-aed/fs/ext3/super.c
-===================================================================
---- linux-aed.orig/fs/ext3/super.c     Tue May  4 19:17:01 2004
-+++ linux-aed/fs/ext3/super.c  Tue May  4 19:17:12 2004
-@@ -834,6 +834,18 @@
-                        || !strcmp (this_char, "quota")
-                        || !strcmp (this_char, "usrquota"))
-                       /* Don't do anything ;-) */ ;
-+              else if (!strcmp (this_char, "iopen")) {
-+                      set_opt (sbi->s_mount_opt, IOPEN);
-+                      clear_opt (sbi->s_mount_opt, IOPEN_NOPRIV);
-+              }
-+              else if (!strcmp (this_char, "noiopen")) {
-+                      clear_opt (sbi->s_mount_opt, IOPEN);
-+                      clear_opt (sbi->s_mount_opt, IOPEN_NOPRIV);
-+              }
-+              else if (!strcmp (this_char, "iopen_nopriv")) {
-+                      set_opt (sbi->s_mount_opt, IOPEN);
-+                      set_opt (sbi->s_mount_opt, IOPEN_NOPRIV);
-+              }
-               else if (!strcmp (this_char, "journal")) {
-                       /* @@@ FIXME */
-                       /* Eventually we will want to be able to create
-Index: linux-aed/include/linux/ext3_fs.h
-===================================================================
---- linux-aed.orig/include/linux/ext3_fs.h     Tue May  4 19:17:08 2004
-+++ linux-aed/include/linux/ext3_fs.h  Tue May  4 19:17:12 2004
-@@ -321,6 +321,8 @@
- #define EXT3_MOUNT_UPDATE_JOURNAL     0x1000  /* Update the journal format */
- #define EXT3_MOUNT_NO_UID32           0x2000  /* Disable 32-bit UIDs */
- #define EXT3_MOUNT_INDEX              0x4000  /* Enable directory index */
-+#define EXT3_MOUNT_IOPEN              0x8000  /* Allow access via iopen */
-+#define EXT3_MOUNT_IOPEN_NOPRIV               0x10000 /* Make iopen world-readable */
- #define EXT3_MOUNT_ASYNCDEL           0x20000 /* Delayed deletion */
- /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
index d14c88f..dc860ee 100644 (file)
@@ -483,12 +483,10 @@ Index: lum/include/linux/ext3_fs.h
 ===================================================================
 --- lum.orig/include/linux/ext3_fs.h   2004-01-30 14:54:53.000000000 -0700
 +++ lum/include/linux/ext3_fs.h        2004-03-09 16:46:46.000000000 -0700
-@@ -322,6 +322,8 @@
- #define EXT3_MOUNT_UPDATE_JOURNAL     0x1000  /* Update the journal format */
- #define EXT3_MOUNT_NO_UID32           0x2000  /* Disable 32-bit UIDs */
+@@ -324,4 +324,6 @@
  #define EXT3_MOUNT_XATTR_USER         0x4000  /* Extended user attributes */
-+#define EXT3_MOUNT_IOPEN              0x8000  /* Allow access via iopen */
-+#define EXT3_MOUNT_IOPEN_NOPRIV               0x10000 /* Make iopen world-readable */
  #define EXT3_MOUNT_ASYNCDEL           0x20000 /* Delayed deletion */
++#define EXT3_MOUNT_IOPEN              0x40000 /* Allow access via iopen */
++#define EXT3_MOUNT_IOPEN_NOPRIV               0x80000 /* Make iopen world-readable */
  
  /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
index 07e49b8..038d551 100644 (file)
@@ -434,7 +434,7 @@ Index: kernel-2.4.212l35/fs/ext3/namei.c
 +      if (!err) {
 +              err = ext3_mark_inode_dirty(handle, inode);
 +              if (err == 0) {
-+                      (void)iopen_connect_dentry(dentry, inode, 0);
++                      dput(iopen_connect_dentry(dentry, inode, 0));
 +                      return 0;
 +              }
 +      }
index c51b24f..e5d4429 100644 (file)
@@ -468,8 +468,8 @@ Index: linux-stage/include/linux/ext3_fs.h
  #define EXT3_MOUNT_XATTR_USER         0x4000  /* Extended user attributes */
  #define EXT3_MOUNT_POSIX_ACL          0x8000  /* POSIX Access Control Lists */
  #define EXT3_MOUNT_BARRIER            0x10000 /* Use block barriers */
-+#define EXT3_MOUNT_IOPEN                0x20000 /* Allow access via iopen */
-+#define EXT3_MOUNT_IOPEN_NOPRIV         0x40000 /* Make iopen world-readable */
++#define EXT3_MOUNT_IOPEN              0x40000 /* Allow access via iopen */
++#define EXT3_MOUNT_IOPEN_NOPRIV               0x80000 /* Make iopen world-readable */
  
  /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
  #ifndef _LINUX_EXT2_FS_H
index fe70c18..4b31f06 100644 (file)
@@ -469,8 +469,8 @@ Index: linux-stage/include/linux/ext3_fs.h
  #define EXT3_MOUNT_NO_UID32           0x2000  /* Disable 32-bit UIDs */
  #define EXT3_MOUNT_XATTR_USER         0x4000  /* Extended user attributes */
  #define EXT3_MOUNT_POSIX_ACL          0x8000  /* POSIX Access Control Lists */
-+#define EXT3_MOUNT_IOPEN             0x10000  /* Allow access via iopen */
-+#define EXT3_MOUNT_IOPEN_NOPRIV              0x20000  /* Make iopen world-readable */
++#define EXT3_MOUNT_IOPEN              0x40000 /* Allow access via iopen */
++#define EXT3_MOUNT_IOPEN_NOPRIV               0x80000 /* Make iopen world-readable */
  
  /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
  #ifndef _LINUX_EXT2_FS_H
diff --git a/lustre/kernel_patches/patches/jbd-2.4.19-pre1-jcberr.patch b/lustre/kernel_patches/patches/jbd-2.4.19-pre1-jcberr.patch
deleted file mode 100644 (file)
index bbbf613..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-Index: linux-2.4.19-pre1/include/linux/jbd.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/jbd.h 2003-11-21 03:00:11.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/jbd.h      2003-11-21 03:04:47.000000000 +0300
-@@ -275,6 +275,13 @@
-       return bh->b_private;
- }
-+#define HAVE_JOURNAL_CALLBACK_STATUS
-+struct journal_callback {
-+      struct list_head jcb_list;
-+      void (*jcb_func)(struct journal_callback *jcb, int error);
-+      /* user data goes here */
-+};
-+
- struct jbd_revoke_table_s;
- /* The handle_t type represents a single atomic update being performed
-@@ -305,6 +312,12 @@
-          operations */
-       int                     h_err;
-+      /* List of application registered callbacks for this handle.
-+       * The function(s) will be called after the transaction that
-+       * this handle is part of has been committed to disk.
-+       */
-+      struct list_head        h_jcb;
-+
-       /* Flags */
-       unsigned int    h_sync:         1;      /* sync-on-close */
-       unsigned int    h_jdata:        1;      /* force data journaling */
-@@ -424,6 +437,10 @@
-       /* How many handles used this transaction? */
-       int t_handle_count;
-+
-+      /* List of registered callback functions for this transaction.
-+       * Called when the transaction is committed. */
-+      struct list_head        t_jcb;
- };
-@@ -672,6 +689,9 @@
- extern int     journal_try_to_free_buffers(journal_t *, struct page *, int);
- extern int     journal_stop(handle_t *);
- extern int     journal_flush (journal_t *);
-+extern void    journal_callback_set(handle_t *handle,
-+                                    void (*fn)(struct journal_callback *,int),
-+                                    struct journal_callback *jcb);
- extern void    journal_lock_updates (journal_t *);
- extern void    journal_unlock_updates (journal_t *);
-Index: linux-2.4.19-pre1/fs/jbd/checkpoint.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/jbd/checkpoint.c 2003-11-21 02:53:20.000000000 +0300
-+++ linux-2.4.19-pre1/fs/jbd/checkpoint.c      2003-11-21 03:04:47.000000000 +0300
-@@ -601,7 +601,8 @@
-       J_ASSERT (transaction->t_log_list == NULL);
-       J_ASSERT (transaction->t_checkpoint_list == NULL);
-       J_ASSERT (transaction->t_updates == 0);
--      
-+      J_ASSERT (list_empty(&transaction->t_jcb));
-+
-       J_ASSERT (transaction->t_journal->j_committing_transaction !=
-                                       transaction);
-       
-Index: linux-2.4.19-pre1/fs/jbd/commit.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/jbd/commit.c     2003-11-21 02:53:20.000000000 +0300
-+++ linux-2.4.19-pre1/fs/jbd/commit.c  2003-11-21 03:04:47.000000000 +0300
-@@ -480,7 +480,7 @@
-            transaction's t_log_list queue, and metadata buffers are on
-            the t_iobuf_list queue.
--         Wait for the transactions in reverse order.  That way we are
-+         Wait for the buffers in reverse order.  That way we are
-          less likely to be woken up until all IOs have completed, and
-          so we incur less scheduling load.
-       */
-@@ -571,8 +571,10 @@
-       jbd_debug(3, "JBD: commit phase 6\n");
--      if (is_journal_aborted(journal))
-+      if (is_journal_aborted(journal)) {
-+              unlock_journal(journal);
-               goto skip_commit;
-+      }
-       /* Done it all: now write the commit record.  We should have
-        * cleaned up our previous buffers by now, so if we are in abort
-@@ -582,9 +584,10 @@
-       descriptor = journal_get_descriptor_buffer(journal);
-       if (!descriptor) {
-               __journal_abort_hard(journal);
-+              unlock_journal(journal);
-               goto skip_commit;
-       }
--      
-+
-       /* AKPM: buglet - add `i' to tmp! */
-       for (i = 0; i < jh2bh(descriptor)->b_size; i += 512) {
-               journal_header_t *tmp =
-@@ -605,14 +608,32 @@
-               put_bh(bh);             /* One for getblk() */
-               journal_unlock_journal_head(descriptor);
-       }
--      lock_journal(journal);
-       /* End of a transaction!  Finally, we can do checkpoint
-            processing: any buffers committed as a result of this
-            transaction can be removed from any checkpoint list it was on
-            before. */
--skip_commit:
-+skip_commit: /* The journal should be unlocked by now. */
-+
-+      /* Call any callbacks that had been registered for handles in this
-+       * transaction.  It is up to the callback to free any allocated
-+       * memory.
-+       */
-+      if (!list_empty(&commit_transaction->t_jcb)) {
-+              struct list_head *p, *n;
-+              int error = is_journal_aborted(journal);
-+
-+              list_for_each_safe(p, n, &commit_transaction->t_jcb) {
-+                      struct journal_callback *jcb;
-+
-+                      jcb = list_entry(p, struct journal_callback, jcb_list);
-+                      list_del(p);
-+                      jcb->jcb_func(jcb, error);
-+              }
-+      }
-+
-+      lock_journal(journal);
-       jbd_debug(3, "JBD: commit phase 7\n");
-Index: linux-2.4.19-pre1/fs/jbd/journal.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/jbd/journal.c    2003-11-21 02:53:20.000000000 +0300
-+++ linux-2.4.19-pre1/fs/jbd/journal.c 2003-11-21 03:04:47.000000000 +0300
-@@ -58,6 +58,7 @@
- #endif
- EXPORT_SYMBOL(journal_flush);
- EXPORT_SYMBOL(journal_revoke);
-+EXPORT_SYMBOL(journal_callback_set);
- EXPORT_SYMBOL(journal_init_dev);
- EXPORT_SYMBOL(journal_init_inode);
-Index: linux-2.4.19-pre1/fs/jbd/transaction.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/jbd/transaction.c        2003-11-21 02:53:20.000000000 +0300
-+++ linux-2.4.19-pre1/fs/jbd/transaction.c     2003-11-21 03:05:14.000000000 +0300
-@@ -57,6 +57,7 @@
-       transaction->t_state = T_RUNNING;
-       transaction->t_tid = journal->j_transaction_sequence++;
-       transaction->t_expires = jiffies + journal->j_commit_interval;
-+      INIT_LIST_HEAD(&transaction->t_jcb);
-       /* Set up the commit timer for the new transaction. */
-       J_ASSERT (!journal->j_commit_timer_active);
-@@ -90,7 +91,14 @@
-       transaction_t *transaction;
-       int needed;
-       int nblocks = handle->h_buffer_credits;
--      
-+
-+      if (nblocks > journal->j_max_transaction_buffers) {
-+              jbd_debug(1, "JBD: %s wants too many credits (%d > %d)\n",
-+                        current->comm, nblocks,
-+                        journal->j_max_transaction_buffers);
-+              return -ENOSPC;
-+      }
-+
-       jbd_debug(3, "New handle %p going live.\n", handle);
- repeat:
-@@ -196,6 +204,20 @@
-       return 0;
- }
-+/* Allocate a new handle.  This should probably be in a slab... */
-+static handle_t *new_handle(int nblocks)
-+{
-+      handle_t *handle = jbd_kmalloc(sizeof (handle_t), GFP_NOFS);
-+      if (!handle)
-+              return NULL;
-+      memset(handle, 0, sizeof (handle_t));
-+      handle->h_buffer_credits = nblocks;
-+      handle->h_ref = 1;
-+      INIT_LIST_HEAD(&handle->h_jcb);
-+
-+      return handle;
-+}
-+
- /*
-  * Obtain a new handle.  
-  *
-@@ -222,14 +244,11 @@
-               handle->h_ref++;
-               return handle;
-       }
--      
--      handle = jbd_kmalloc(sizeof (handle_t), GFP_NOFS);
-+
-+      handle = new_handle(nblocks);
-       if (!handle)
-               return ERR_PTR(-ENOMEM);
--      memset (handle, 0, sizeof (handle_t));
--      handle->h_buffer_credits = nblocks;
--      handle->h_ref = 1;
-       current->journal_info = handle;
-       err = start_this_handle(journal, handle);
-@@ -328,14 +347,11 @@
-       
-       if (is_journal_aborted(journal))
-               return ERR_PTR(-EIO);
--      
--      handle = jbd_kmalloc(sizeof (handle_t), GFP_NOFS);
-+
-+      handle = new_handle(nblocks);
-       if (!handle)
-               return ERR_PTR(-ENOMEM);
--      memset (handle, 0, sizeof (handle_t));
--      handle->h_buffer_credits = nblocks;
--      handle->h_ref = 1;
-       current->journal_info = handle;
-       err = try_start_this_handle(journal, handle);
-@@ -1324,6 +1340,28 @@
- #endif
- /*
-+ * Register a callback function for this handle.  The function will be
-+ * called when the transaction that this handle is part of has been
-+ * committed to disk with the original callback data struct and the
-+ * error status of the journal as parameters.  There is no guarantee of
-+ * ordering between handles within a single transaction, nor between
-+ * callbacks registered on the same handle.
-+ *
-+ * The caller is responsible for allocating the journal_callback struct.
-+ * This is to allow the caller to add as much extra data to the callback
-+ * as needed, but reduce the overhead of multiple allocations.  The caller
-+ * allocated struct must start with a struct journal_callback at offset 0,
-+ * and has the caller-specific data afterwards.
-+ */
-+void journal_callback_set(handle_t *handle,
-+                        void (*func)(struct journal_callback *jcb, int error),
-+                        struct journal_callback *jcb)
-+{
-+      list_add_tail(&jcb->jcb_list, &handle->h_jcb);
-+      jcb->jcb_func = func;
-+}
-+
-+/*
-  * All done for a particular handle.
-  *
-  * There is not much action needed here.  We just return any remaining
-@@ -1389,7 +1427,10 @@
-                       wake_up(&journal->j_wait_transaction_locked);
-       }
--      /* 
-+      /* Move callbacks from the handle to the transaction. */
-+      list_splice(&handle->h_jcb, &transaction->t_jcb);
-+
-+      /*
-        * If the handle is marked SYNC, we need to set another commit
-        * going!  We also want to force a commit if the current
-        * transaction is occupying too much of the log, or if the
diff --git a/lustre/kernel_patches/patches/kdev-2.4.19-pre1.patch b/lustre/kernel_patches/patches/kdev-2.4.19-pre1.patch
deleted file mode 100644 (file)
index 5499df3..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: linux-2.4.19-pre1/include/linux/kdev_t.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/kdev_t.h      2003-11-20 19:01:38.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/kdev_t.h   2003-11-21 04:02:03.000000000 +0300
-@@ -82,6 +82,7 @@
- #define minor(d) MINOR(d)
- #define kdev_same(a,b) (a==b)
- #define kdev_none(d) (!(d))
-+#define val_to_kdev(d)  ((kdev_t)(d))
- /*
- As long as device numbers in the outside world have 16 bits only,
diff --git a/lustre/kernel_patches/patches/kernel_text_address-2.4.19-pre1.patch b/lustre/kernel_patches/patches/kernel_text_address-2.4.19-pre1.patch
deleted file mode 100644 (file)
index df37f7a..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-Index: linux-2.4.19-pre1/arch/i386/kernel/traps.c
-===================================================================
---- linux-2.4.19-pre1.orig/arch/i386/kernel/traps.c    2001-09-30 23:26:08.000000000 +0400
-+++ linux-2.4.19-pre1/arch/i386/kernel/traps.c 2003-11-21 02:31:28.000000000 +0300
-@@ -961,3 +961,40 @@
-       cobalt_init();
- #endif
- }
-+#ifdef CONFIG_MODULES
-+extern struct module *module_list;
-+extern struct module kernel_module;
-+#endif
-+
-+int is_kernel_text_address(unsigned long addr)
-+{
-+       int retval = 0;
-+#ifdef CONFIG_MODULES
-+       struct module *mod;
-+#endif
-+       if (addr >= (unsigned long) &_stext &&
-+           addr <= (unsigned long) &_etext);
-+               return 1;
-+
-+#ifdef CONFIG_MODULES
-+       for (mod = module_list; mod != &kernel_module; mod = mod->next) {
-+               /* mod_bound tests for addr being inside the vmalloc'ed
-+                * module area. Of course it'd be better to test only
-+                * for the .text subset... */
-+               if (mod_bound(addr, 0, mod)) {
-+                       retval = 1;
-+                       break;
-+               }
-+       }
-+#endif
-+
-+       return retval;
-+}
-+
-+int lookup_symbol(unsigned long address, char *buf, int buflen)
-+{
-+       return -ENOSYS;
-+}
-+
-+EXPORT_SYMBOL_GPL(is_kernel_text_address);
-+EXPORT_SYMBOL_GPL(lookup_symbol);
-Index: linux-2.4.19-pre1/arch/i386/kernel/Makefile
-===================================================================
---- linux-2.4.19-pre1.orig/arch/i386/kernel/Makefile   2001-11-10 01:21:21.000000000 +0300
-+++ linux-2.4.19-pre1/arch/i386/kernel/Makefile        2003-11-21 02:31:46.000000000 +0300
-@@ -14,7 +14,7 @@
- O_TARGET := kernel.o
--export-objs     := mca.o mtrr.o msr.o cpuid.o microcode.o i386_ksyms.o
-+export-objs     := mca.o mtrr.o msr.o cpuid.o microcode.o i386_ksyms.o traps.o
- obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o vm86.o \
-               ptrace.o i8259.o ioport.o ldt.o setup.o time.o sys_i386.o \
diff --git a/lustre/kernel_patches/patches/kgdb-over-netpoll.patch b/lustre/kernel_patches/patches/kgdb-over-netpoll.patch
deleted file mode 100644 (file)
index 2f7548a..0000000
+++ /dev/null
@@ -1,1072 +0,0 @@
- l-mpm/Documentation/i386/kgdb/kgdbeth.txt |   88 +----
- l-mpm/arch/i386/kernel/irq.c              |   10 
- l-mpm/arch/i386/kernel/kgdb_stub.c        |  107 +-----
- l-mpm/arch/i386/lib/kgdb_serial.c         |    2 
- l-mpm/drivers/net/Makefile                |    5 
- l-mpm/drivers/net/kgdb_eth.c              |  464 ++++--------------------------
- l-mpm/include/asm-i386/kgdb.h                  |   11 
- l-mpm/net/core/dev.c                      |    4 
- 8 files changed, 129 insertions(+), 562 deletions(-)
-
-Index: linux-2.6.0-test6/drivers/net/kgdb_eth.c
-===================================================================
---- linux-2.6.0-test6.orig/drivers/net/kgdb_eth.c      2003-10-12 13:12:22.000000000 +0800
-+++ linux-2.6.0-test6/drivers/net/kgdb_eth.c   2003-10-12 13:12:25.000000000 +0800
-@@ -7,36 +7,26 @@
-  *
-  * Twiddled for 2.6 by Robert Walsh <rjwalsh@durables.org>
-  * and wangdi <wangdi@clusterfs.com>.
-+ *
-+ * Refactored for netpoll API by Matt Mackall <mpm@selenic.com>
-+ *
-  */
--#include <linux/module.h>
--#include <linux/errno.h>
--#include <linux/signal.h>
- #include <linux/sched.h>
--#include <linux/timer.h>
- #include <linux/interrupt.h>
- #include <linux/config.h>
--#include <linux/major.h>
- #include <linux/string.h>
--#include <linux/fcntl.h>
--#include <linux/termios.h>
--#include <asm/kgdb.h>
--#include <linux/if_ether.h>
--#include <linux/netdevice.h>
--#include <linux/etherdevice.h>
--#include <linux/skbuff.h>
--#include <linux/delay.h>
--#include <net/tcp.h>
--#include <net/udp.h>
-+#include <linux/netpoll.h>
- #include <asm/system.h>
-+#include <asm/kgdb.h>
- #include <asm/io.h>
--#include <asm/segment.h>
- #include <asm/bitops.h>
- #include <asm/system.h>
- #include <asm/irq.h>
- #include <asm/atomic.h>
-+
- #define       GDB_BUF_SIZE    512             /* power of 2, please */
- static char   kgdb_buf[GDB_BUF_SIZE] ;
-@@ -44,26 +34,28 @@
- static atomic_t       kgdb_buf_in_cnt ;
- static int    kgdb_buf_out_inx ;
-+#define ETH_QUEUE_SIZE 256
-+static char eth_queue[ETH_QUEUE_SIZE];
-+static int outgoing_queue;
-+
- extern void   set_debug_traps(void) ;         /* GDB routine */
- extern void   breakpoint(void);
--unsigned int  kgdb_remoteip = 0;
--unsigned short        kgdb_listenport = 6443;
--unsigned short        kgdb_sendport= 6442;
--int           kgdb_eth = -1; /* Default tty mode */
--unsigned char kgdb_remotemac[6] = {0xff,0xff,0xff,0xff,0xff,0xff};
--unsigned char kgdb_localmac[6] = {0xff,0xff,0xff,0xff,0xff,0xff};
--volatile int  kgdb_eth_is_initializing = 0;
--int           kgdb_eth_need_breakpoint[NR_CPUS];
-+int kgdboe = 0; /* Default tty mode */
-+int kgdb_eth_need_breakpoint[NR_CPUS];
--struct net_device *kgdb_netdevice = NULL;
-+static void rx_hook(struct netpoll *np, int port, char *msg, int len);
--/*
-- * Get a char if available, return -1 if nothing available.
-- * Empty the receive buffer first, then look at the interface hardware.
-- */
--static int
--read_char(void)
-+static struct netpoll np = {
-+      .name = "kgdboe",
-+      .dev_name = "eth0",
-+      .rx_hook = rx_hook,
-+      .local_port = 6443,
-+      .remote_port = 6442,
-+      .remote_mac = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-+};
-+
-+static int read_char(void)
- {
-       /* intr routine has queued chars */
-       if (atomic_read(&kgdb_buf_in_cnt) != 0)
-@@ -79,287 +71,32 @@
-       return -1; /* no data */
- }
--/*
-- * Wait until the interface can accept a char, then write it.
-- */
--static void
--write_buffer(char *buf, int len)
-+static void write_buffer(char *buf, int len)
- {
--      int                     total_len, eth_len, ip_len, udp_len;
--      struct in_device        *in_dev;
--      struct sk_buff          *skb;
--      struct udphdr           *udph;
--      struct iphdr            *iph;
--      struct ethhdr           *eth;
--
--      if (!(in_dev = (struct in_device *) kgdb_netdevice->ip_ptr)) {
--              panic("No in_device available for interface!\n");
--      }
--
--      if (!(in_dev->ifa_list)) {
--              panic("No interface address set for interface!\n");
--      }
--
--      udp_len = len + sizeof(struct udphdr);
--      ip_len = eth_len = udp_len + sizeof(struct iphdr);
--      total_len = eth_len + ETH_HLEN;
--
--      if (!(skb = alloc_skb(total_len, GFP_ATOMIC))) {
-+      if (!np.dev)
-               return;
--      }
--
--      atomic_set(&skb->users, 1);
--      skb_reserve(skb, total_len - len);
--
--      memcpy(skb->data, (unsigned char *) buf, len);
--      skb->len += len;
--
--      udph = (struct udphdr *) skb_push(skb, sizeof(*udph));
--      udph->source = htons(kgdb_listenport);
--      udph->dest   = htons(kgdb_sendport);
--      udph->len    = htons(udp_len);
--      udph->check  = 0;
--
--      iph = (struct iphdr *)skb_push(skb, sizeof(*iph));
--      iph->version  = 4;
--      iph->ihl      = 5;
--      iph->tos      = 0;
--      iph->tot_len  = htons(ip_len);
--      iph->id       = 0;
--      iph->frag_off = 0;
--      iph->ttl      = 64;
--      iph->protocol = IPPROTO_UDP;
--      iph->check    = 0;
--      iph->saddr    = in_dev->ifa_list->ifa_address;
--      iph->daddr    = kgdb_remoteip;
--      iph->check    = ip_fast_csum((unsigned char *)iph, iph->ihl);
--
--      eth = (struct ethhdr *) skb_push(skb, ETH_HLEN);
--      eth->h_proto = htons(ETH_P_IP);
--      memcpy(eth->h_source, kgdb_localmac, kgdb_netdevice->addr_len);
--      memcpy(eth->h_dest, kgdb_remotemac, kgdb_netdevice->addr_len);
--
--repeat:
--      spin_lock(&kgdb_netdevice->xmit_lock);
--      kgdb_netdevice->xmit_lock_owner = smp_processor_id();
--
--      if (netif_queue_stopped(kgdb_netdevice)) {
--              kgdb_netdevice->xmit_lock_owner = -1;
--              spin_unlock(&kgdb_netdevice->xmit_lock);
--
--              kgdb_netdevice->poll_controller(kgdb_netdevice);
--              goto repeat;
--      }
--
--      kgdb_netdevice->hard_start_xmit(skb, kgdb_netdevice);
--      kgdb_netdevice->xmit_lock_owner = -1;
--      spin_unlock(&kgdb_netdevice->xmit_lock);
-+      netpoll_send_udp(&np, buf, len);
- }
- /*
-- * In the interrupt state the target machine will not respond to any
-- * arp requests, so handle them here.
-- */
--
--static struct sk_buff *send_skb = NULL;
--
--void
--kgdb_eth_reply_arp(void)
--{
--      if (send_skb) {
--              spin_lock(&kgdb_netdevice->xmit_lock);
--              kgdb_netdevice->xmit_lock_owner = smp_processor_id();
--              kgdb_netdevice->hard_start_xmit(send_skb, kgdb_netdevice);
--              kgdb_netdevice->xmit_lock_owner = -1;
--              spin_unlock(&kgdb_netdevice->xmit_lock);
--              send_skb = NULL;
--      }
--}
--
--static int
--make_arp_request(struct sk_buff *skb)
--{
--      struct arphdr *arp;
--      unsigned char *arp_ptr;
--      int type = ARPOP_REPLY;
--      int ptype = ETH_P_ARP;
--      u32 sip, tip;
--      unsigned char *sha, *tha;
--      struct in_device *in_dev = (struct in_device *) kgdb_netdevice->ip_ptr;
--
--      /* No arp on this interface */
--
--      if (kgdb_netdevice->flags & IFF_NOARP) {
--              return 0;
--      }
--
--      if (!pskb_may_pull(skb, (sizeof(struct arphdr) +
--                               (2 * kgdb_netdevice->addr_len) +
--                               (2 * sizeof(u32))))) {
--              return 0;
--      }
--
--      skb->h.raw = skb->nh.raw = skb->data;
--      arp = skb->nh.arph;
--
--      if ((arp->ar_hrd != htons(ARPHRD_ETHER) &&
--           arp->ar_hrd != htons(ARPHRD_IEEE802)) ||
--          arp->ar_pro != htons(ETH_P_IP)) {
--              return 0;
--      }
--
--      /* Understand only these message types */
--
--      if (arp->ar_op != htons(ARPOP_REQUEST)) {
--              return 0;
--      }
--
--      /* Extract fields */
--
--      arp_ptr= (unsigned char *)(arp+1);
--      sha = arp_ptr;
--      arp_ptr += kgdb_netdevice->addr_len;
--      memcpy(&sip, arp_ptr, 4);
--      arp_ptr += 4;
--      tha = arp_ptr;
--      arp_ptr += kgdb_netdevice->addr_len;
--      memcpy(&tip, arp_ptr, 4);
--
--      if (tip != in_dev->ifa_list->ifa_address) {
--              return 0;
--      }
--
--      if (kgdb_remoteip != sip) {
--              return 0;
--      }
--
--      /*
--       * Check for bad requests for 127.x.x.x and requests for multicast
--       * addresses.  If this is one such, delete it.
--       */
--
--      if (LOOPBACK(tip) || MULTICAST(tip)) {
--              return 0;
--      }
--
--      /* reply to the ARP request */
--
--      send_skb = alloc_skb(sizeof(struct arphdr) + 2 * (kgdb_netdevice->addr_len + 4) + LL_RESERVED_SPACE(kgdb_netdevice), GFP_ATOMIC);
--
--      if (send_skb == NULL) {
--              return 0;
--      }
--
--      skb_reserve(send_skb, LL_RESERVED_SPACE(kgdb_netdevice));
--      send_skb->nh.raw = send_skb->data;
--      arp = (struct arphdr *) skb_put(send_skb, sizeof(struct arphdr) + 2 * (kgdb_netdevice->addr_len + 4));
--      send_skb->dev = kgdb_netdevice;
--      send_skb->protocol = htons(ETH_P_ARP);
--
--      /* Fill the device header for the ARP frame */
--
--      if (kgdb_netdevice->hard_header &&
--          kgdb_netdevice->hard_header(send_skb, kgdb_netdevice, ptype,
--                                     kgdb_remotemac, kgdb_localmac,
--                                     send_skb->len) < 0) {
--              kfree_skb(send_skb);
--              return 0;
--      }
--
--      /*
--       * Fill out the arp protocol part.
--       *
--       * we only support ethernet device type,
--       * which (according to RFC 1390) should always equal 1 (Ethernet).
--       */
--
--      arp->ar_hrd = htons(kgdb_netdevice->type);
--      arp->ar_pro = htons(ETH_P_IP);
--
--      arp->ar_hln = kgdb_netdevice->addr_len;
--      arp->ar_pln = 4;
--      arp->ar_op = htons(type);
--
--      arp_ptr=(unsigned char *)(arp + 1);
--
--      memcpy(arp_ptr, kgdb_netdevice->dev_addr, kgdb_netdevice->addr_len);
--      arp_ptr += kgdb_netdevice->addr_len;
--      memcpy(arp_ptr, &tip, 4);
--      arp_ptr += 4;
--      memcpy(arp_ptr, kgdb_localmac, kgdb_netdevice->addr_len);
--      arp_ptr += kgdb_netdevice->addr_len;
--      memcpy(arp_ptr, &sip, 4);
--      return 0;
--}
--
--
--/*
-  * Accept an skbuff from net_device layer and add the payload onto
-  * kgdb buffer
-- *
-- * When the kgdb stub routine getDebugChar() is called it draws characters
-- * out of the buffer until it is empty and then reads directly from the
-- * serial port.
-- *
-- * We do not attempt to write chars from the interrupt routine since
-- * the stubs do all of that via putDebugChar() which writes one byte
-- * after waiting for the interface to become ready.
-- *
-- * The debug stubs like to run with interrupts disabled since, after all,
-- * they run as a consequence of a breakpoint in the kernel.
-- *
-- * NOTE: Return value of 1 means it was for us and is an indication to
-- * the calling driver to destroy the sk_buff and not send it up the stack.
-  */
--int
--kgdb_net_interrupt(struct sk_buff *skb)
-+static void rx_hook(struct netpoll *np, int port, char *msg, int len)
- {
--      unsigned char   chr;
--      struct iphdr    *iph = (struct iphdr*)skb->data;
--      struct udphdr   *udph= (struct udphdr*)(skb->data+(iph->ihl<<2));
--      unsigned char   *data = (unsigned char *) udph + sizeof(struct udphdr);
--      int             len;
--      int             i;
--
--      if ((kgdb_eth != -1) && (!kgdb_netdevice) &&
--          (iph->protocol == IPPROTO_UDP) &&
--          (be16_to_cpu(udph->dest) == kgdb_listenport)) {
--              kgdb_sendport = be16_to_cpu(udph->source);
--
--              while (kgdb_eth_is_initializing)
--                      ;
--              if (!kgdb_netdevice)
--                      kgdb_eth_hook();
--              if (!kgdb_netdevice) {
--                      /* Lets not even try again. */
--                      kgdb_eth = -1;
--                      return 0;
--              }
--      }
--      if (!kgdb_netdevice) {
--              return 0;
--      }
--      if (skb->protocol == __constant_htons(ETH_P_ARP) && !send_skb) {
--              make_arp_request(skb);
--              return 0;
--      }
--      if (iph->protocol != IPPROTO_UDP) {
--              return 0;
--      }
-+      int i, chr;
--      if (be16_to_cpu(udph->dest) != kgdb_listenport) {
--              return 0;
--      }
-+      np->remote_port = port;
--      len = (be16_to_cpu(iph->tot_len) -
--             (sizeof(struct udphdr) + sizeof(struct iphdr)));
-+      /* Is this gdb trying to attach? */
-+      if (!netpoll_trap() && len == 8 && !strncmp(msg, "$Hc-1#09", 8))
-+              kgdb_schedule_breakpoint();
-       for (i = 0; i < len; i++) {
--              chr = data[i];
--              if (chr == 3) {
--                      kgdb_eth_need_breakpoint[smp_processor_id()] = 1;
--                      continue;
--              }
-+              chr = msg[i];
-+              if (chr == 3)
-+                      kgdb_schedule_breakpoint();
-+
-               if (atomic_read(&kgdb_buf_in_cnt) >= GDB_BUF_SIZE) {
-                       /* buffer overflow, clear it */
-                       kgdb_buf_in_inx = 0;
-@@ -371,112 +108,54 @@
-               kgdb_buf_in_inx &= (GDB_BUF_SIZE - 1);
-               atomic_inc(&kgdb_buf_in_cnt);
-       }
--
--      if (!kgdb_netdevice->kgdb_is_trapped) {
--              /*
--               * If a new gdb instance is trying to attach, we need to
--               * break here.
--               */
--              if (!strncmp(data, "$Hc-1#09", 8))
--                      kgdb_eth_need_breakpoint[smp_processor_id()] = 1;
--      }
--      return 1;
- }
--EXPORT_SYMBOL(kgdb_net_interrupt);
--int
--kgdb_eth_hook(void)
-+static int option_setup(char *opt)
- {
--      char kgdb_netdev[16];
--      extern void kgdb_respond_ok(void);
--
--      if (kgdb_remotemac[0] == 0xff) {
--              panic("ERROR! 'gdbeth_remotemac' option not set!\n");
--      }
--      if (kgdb_localmac[0] == 0xff) {
--              panic("ERROR! 'gdbeth_localmac' option not set!\n");
--      }
--      if (kgdb_remoteip == 0) {
--              panic("ERROR! 'gdbeth_remoteip' option not set!\n");
--      }
-+      return netpoll_parse_options(&np, opt);
-+}
--      sprintf(kgdb_netdev,"eth%d",kgdb_eth);
-+__setup("kgdboe=", option_setup);
-+static int init_kgdboe(void)
-+{
- #ifdef CONFIG_SMP
-       if (num_online_cpus() > CONFIG_NO_KGDB_CPUS) {
-               printk("kgdb: too manu cpus. Cannot enable debugger with more than %d cpus\n", CONFIG_NO_KGDB_CPUS);
-               return -1;
-       }
- #endif
--      for (kgdb_netdevice = dev_base;
--              kgdb_netdevice != NULL;
--              kgdb_netdevice = kgdb_netdevice->next) {
--              if (strncmp(kgdb_netdevice->name, kgdb_netdev, IFNAMSIZ) == 0) {
--                      break;
--              }
--      }
--      if (!kgdb_netdevice) {
--              printk("KGDB NET : Unable to find interface %s\n",kgdb_netdev);
--              return -ENODEV;
--      }
--      /*
--       * Call GDB routine to setup the exception vectors for the debugger
--       */
-       set_debug_traps();
--      /*
--       * Call the breakpoint() routine in GDB to start the debugging
--       * session.
--       */
--      kgdb_eth_is_initializing = 1;
--      kgdb_eth_need_breakpoint[smp_processor_id()] = 1;
-+      if(!np.remote_ip || netpoll_setup(&np))
-+              return 1;
-+
-+      kgdboe = 1;
-+
-+      printk(KERN_INFO "kgdb: debugging over ethernet enabled\n");
-+
-       return 0;
- }
--/*
-- * getDebugChar
-- *
-- * This is a GDB stub routine.  It waits for a character from the
-- * serial interface and then returns it.  If there is no serial
-- * interface connection then it returns a bogus value which will
-- * almost certainly cause the system to hang.
-- */
--int
--eth_getDebugChar(void)
-+int eth_getDebugChar(void)
- {
--      volatile int    chr;
-+      int chr;
--      while ((chr = read_char()) < 0) {
--              if (send_skb) {
--                      kgdb_eth_reply_arp();
--              }
--              if (kgdb_netdevice->poll_controller) {
--                      kgdb_netdevice->poll_controller(kgdb_netdevice);
--              } else {
--                      printk("KGDB NET: Error - Device %s is not supported!\n", kgdb_netdevice->name);
--                      panic("Please add support for kgdb net to this driver");
--              }
--      }
-+      while ((chr = read_char()) < 0)
-+              netpoll_poll(&np);
-       return chr;
- }
--#define ETH_QUEUE_SIZE 256
--static char eth_queue[ETH_QUEUE_SIZE];
--static int outgoing_queue;
--
--void
--eth_flushDebugChar(void)
-+void eth_flushDebugChar(void)
- {
-       if(outgoing_queue) {
-               write_buffer(eth_queue, outgoing_queue);
--
-               outgoing_queue = 0;
-       }
- }
--static void
--put_char_on_queue(int chr)
-+static void put_char_on_queue(int chr)
- {
-       eth_queue[outgoing_queue++] = chr;
-       if(outgoing_queue == ETH_QUEUE_SIZE)
-@@ -485,33 +164,26 @@
-       }
- }
--/*
-- * eth_putDebugChar
-- *
-- * This is a GDB stub routine.  It waits until the interface is ready
-- * to transmit a char and then sends it.
-- */
--void
--eth_putDebugChar(int chr)
-+void eth_putDebugChar(int chr)
- {
-       put_char_on_queue(chr); /* this routine will wait */
- }
--void
--kgdb_eth_set_trapmode(int mode)
-+void kgdb_schedule_breakpoint(void)
- {
--      if (!kgdb_netdevice) {
--              return;
--      }
--      kgdb_netdevice->kgdb_is_trapped = mode;
-+      kgdb_eth_need_breakpoint[smp_processor_id()] = 1;
- }
--int
--kgdb_eth_is_trapped()
-+void kgdb_process_breakpoint(void)
- {
--      if (!kgdb_netdevice) {
--              return 0;
-+      /*
-+       * Handle a breakpoint queued from inside network driver code
-+         * to avoid reentrancy issues
-+       */
-+      if (kgdb_eth_need_breakpoint[smp_processor_id()]) {
-+              kgdb_eth_need_breakpoint[smp_processor_id()] = 0;
-+              BREAKPOINT;
-       }
--      return kgdb_netdevice->kgdb_is_trapped;
- }
--EXPORT_SYMBOL(kgdb_eth_is_trapped);
-+
-+module_init(init_kgdboe);
-Index: linux-2.6.0-test6/arch/i386/kernel/kgdb_stub.c
-===================================================================
---- linux-2.6.0-test6.orig/arch/i386/kernel/kgdb_stub.c        2003-10-12 13:12:22.000000000 +0800
-+++ linux-2.6.0-test6/arch/i386/kernel/kgdb_stub.c     2003-10-12 18:57:21.625083056 +0800
-@@ -120,6 +120,7 @@
- #include <asm/desc.h>
- #include <linux/inet.h>
- #include <linux/kallsyms.h>
-+#include <linux/netpoll.h>
- /************************************************************************
-  *
-@@ -136,10 +137,6 @@
- extern int eth_putDebugChar(int);     /* write a single character      */
- extern int eth_getDebugChar(void);    /* read and return a single char */
- extern void eth_flushDebugChar(void); /* flush pending characters      */
--extern void kgdb_eth_set_trapmode(int);
--extern void kgdb_eth_reply_arp(void);   /*send arp request */
--extern volatile int kgdb_eth_is_initializing;
--
- /************************************************************************/
- /* BUFMAX defines the maximum number of characters in inbound/outbound buffers*/
-@@ -281,13 +278,13 @@
- /*
-  * I/O dispatch functions...
-- * Based upon kgdb_eth, either call the ethernet
-+ * Based upon kgdboe, either call the ethernet
-  * handler or the serial one..
-  */
- void
- putDebugChar(int c)
- {
--      if (kgdb_eth == -1) {
-+      if (!kgdboe) {
-               tty_putDebugChar(c);
-       } else {
-               eth_putDebugChar(c);
-@@ -297,7 +294,7 @@
- int
- getDebugChar(void)
- {
--      if (kgdb_eth == -1) {
-+      if (!kgdboe) {
-               return tty_getDebugChar();
-       } else {
-               return eth_getDebugChar();
-@@ -307,7 +304,7 @@
- void
- flushDebugChar(void)
- {
--      if (kgdb_eth == -1) {
-+      if (!kgdboe) {
-               tty_flushDebugChar();
-       } else {
-               eth_flushDebugChar();
-@@ -494,66 +491,24 @@
-       /*  $<packet info>#<checksum>. */
--      if (kgdb_eth == -1) {
--              do {
--                      if (remote_debug)
--                              printk("T:%s\n", buffer);
--                      putDebugChar('$');
--                      checksum = 0;
--                      count = 0;
--
--                      while ((ch = buffer[count])) {
--                              putDebugChar(ch);
--                              checksum += ch;
--                              count += 1;
--                      }
--
--                      putDebugChar('#');
--                      putDebugChar(hexchars[checksum >> 4]);
--                      putDebugChar(hexchars[checksum % 16]);
--                      flushDebugChar();
--
--              } while ((getDebugChar() & 0x7f) != '+');
--      } else {
--              /*
--               * For udp, we can not transfer too much bytes once.
--               * We only transfer MAX_SEND_COUNT size bytes each time
--               */
--
--#define MAX_SEND_COUNT 30
--
--              int send_count = 0, i = 0;
--              char send_buf[MAX_SEND_COUNT];
-+      do {
-+              if (remote_debug)
-+                      printk("T:%s\n", buffer);
-+              putDebugChar('$');
-+              checksum = 0;
-+              count = 0;
-+              while ((ch = buffer[count])) {
-+                      putDebugChar(ch);
-+                      checksum += ch;
-+                      count += 1;
-+              }
-+              
-+              putDebugChar('#');
-+              putDebugChar(hexchars[checksum >> 4]);
-+              putDebugChar(hexchars[checksum % 16]);
-+              flushDebugChar();
--              do {
--                      if (remote_debug)
--                              printk("T:%s\n", buffer);
--                      putDebugChar('$');
--                      checksum = 0;
--                      count = 0;
--                      send_count = 0;
--                      while ((ch = buffer[count])) {
--                              if (send_count >= MAX_SEND_COUNT) {
--                                      for(i = 0; i < MAX_SEND_COUNT; i++) {
--                                              putDebugChar(send_buf[i]);
--                                      }
--                                      flushDebugChar();
--                                      send_count = 0;
--                              } else {
--                                      send_buf[send_count] = ch;
--                                      checksum += ch;
--                                      count ++;
--                                      send_count++;
--                              }
--                      }
--                      for(i = 0; i < send_count; i++)
--                              putDebugChar(send_buf[i]);
--                      putDebugChar('#');
--                      putDebugChar(hexchars[checksum >> 4]);
--                      putDebugChar(hexchars[checksum % 16]);
--                      flushDebugChar();
--              } while ((getDebugChar() & 0x7f) != '+');
--      }
-+      } while ((getDebugChar() & 0x7f) != '+');
- }
- static char remcomInBuffer[BUFMAX];
-@@ -1142,9 +1097,9 @@
-        */
-       in_kgdb_entry_log[cpu]++;
-       in_kgdb_here_log[cpu] = regs;
--      if (cpu == spinlock_cpu || waiting_cpus[cpu].task) {
-+      if (cpu == spinlock_cpu || waiting_cpus[cpu].task)
-               goto exit_in_kgdb;
--      }
-+
-       /*
-        * For protection of the initilization of the spin locks by kgdb
-        * it locks the kgdb spinlock before it gets the wait locks set
-@@ -1153,16 +1108,18 @@
-        * sequence where the wait lock is removed prior to the kgdb lock
-        * so if kgdb gets unlocked, we just exit.
-        */
-+
-       while (spin_is_locked(&kgdb_spinlock) &&
-              !spin_is_locked(waitlocks + cpu)) ;
--      if (!spin_is_locked(&kgdb_spinlock)) {
-+      if (!spin_is_locked(&kgdb_spinlock))
-               goto exit_in_kgdb;
--      }
-+
-       waiting_cpus[cpu].task = current;
-       waiting_cpus[cpu].pid = (current->pid) ? : (PID_MAX + cpu);
-       waiting_cpus[cpu].regs = regs;
-       spin_unlock_wait(waitlocks + cpu);
-+
-       /*
-        * log departure of this cpu
-        */
-@@ -1281,9 +1238,8 @@
-       __asm__("movl %%cr2,%0":"=r" (address));
--      if (kgdb_eth != -1) {
--              kgdb_eth_set_trapmode(1);
--      }
-+      if (kgdboe)
-+              netpoll_set_trap(1);
-       kgdb_local_irq_save(flags);
-@@ -1338,10 +1294,12 @@
-               if (num_online_cpus() > 1) {
-                       int me_in_kgdb = in_kgdb_entry_log[smp_processor_id()];
-                       smp_send_nmi_allbutself();
-+
-                       while (i < num_online_cpus() && time != end_time) {
-                               int j;
-                               for (j = 0; j < MAX_NO_CPUS; j++) {
-                                       if (waiting_cpus[j].task &&
-+                                          waiting_cpus[j].task != NOCPU &&
-                                           !cpu_logged_in[j]) {
-                                               i++;
-                                               cpu_logged_in[j] = 1;
-@@ -1526,13 +1484,8 @@
-       remcomOutBuffer[2] = hexchars[signo % 16];
-       remcomOutBuffer[3] = 0;
--      if (kgdb_eth_is_initializing) {
--              kgdb_eth_is_initializing = 0;
--      } else {
--              putpacket(remcomOutBuffer);
--      }
-+      putpacket(remcomOutBuffer);
--      kgdb_eth_reply_arp();
-       while (1 == 1) {
-               error = 0;
-               remcomOutBuffer[0] = 0;
-@@ -1689,10 +1642,6 @@
-                       newPC = regs.eip;
--                      if (kgdb_eth != -1) {
--                              kgdb_eth_set_trapmode(0);
--                      }
--
-                       /* clear the trace bit */
-                       regs.eflags &= 0xfffffeff;
-@@ -1724,6 +1673,10 @@
-                                       }
-                               }
-                       }
-+
-+                      if (kgdboe)
-+                              netpoll_set_trap(0);
-+
-                       correct_hw_break();
-                       asm volatile ("movl %0, %%db6\n"::"r" (0));
-                       goto exit_kgdb;
-@@ -2430,63 +2383,3 @@
-                          int signo, int err_code, struct pt_regs *linux_regs);
- gdb_debug_hook *linux_debug_hook = &kgdb_handle_exception;    /* histerical reasons... */
--static int __init kgdb_opt_kgdbeth(char *str)
--{
--      kgdb_eth = simple_strtoul(str, NULL, 10);
--      return 1;
--}
--
--static int __init kgdb_opt_kgdbeth_remoteip(char *str)
--{
--      kgdb_remoteip = in_aton(str);
--      return 1;
--}
--
--static int __init kgdb_opt_kgdbeth_listenport(char *str)
--{
--      kgdb_listenport = simple_strtoul(str, NULL, 10);
--      kgdb_sendport = kgdb_listenport - 1;
--      return 1;
--}
--
--static int __init parse_hw_addr(char *str, unsigned char *addr)
--{
--      int  i;
--      char *p;
--
--      p = str;
--      i = 0;
--      while(1)
--      {
--              unsigned int c;
--
--              sscanf(p, "%x:", &c);
--              addr[i++] = c;
--              while((*p != 0) && (*p != ':')) {
--                      p++;
--              }
--              if (*p == 0) {
--                      break;
--              }
--              p++;
--      }
--
--      return 1;
--}
--
--static int __init kgdb_opt_kgdbeth_remotemac(char *str)
--{
--      return parse_hw_addr(str, kgdb_remotemac);
--}
--static int __init kgdb_opt_kgdbeth_localmac(char *str)
--{
--      return parse_hw_addr(str, kgdb_localmac);
--}
--
--
--__setup("gdbeth=", kgdb_opt_kgdbeth);
--__setup("gdbeth_remoteip=", kgdb_opt_kgdbeth_remoteip);
--__setup("gdbeth_listenport=", kgdb_opt_kgdbeth_listenport);
--__setup("gdbeth_remotemac=", kgdb_opt_kgdbeth_remotemac);
--__setup("gdbeth_localmac=", kgdb_opt_kgdbeth_localmac);
--
-Index: linux-2.6.0-test6/arch/i386/lib/kgdb_serial.c
-===================================================================
---- linux-2.6.0-test6.orig/arch/i386/lib/kgdb_serial.c 2003-10-12 13:12:22.000000000 +0800
-+++ linux-2.6.0-test6/arch/i386/lib/kgdb_serial.c      2003-10-12 13:12:25.000000000 +0800
-@@ -386,7 +386,7 @@
- static int __init
- kgdb_enable_ints(void)
- {
--      if (kgdb_eth != -1) {
-+      if (kgdboe) {
-               return 0;
-       }
-       if (gdb_async_info == NULL) {
-Index: linux-2.6.0-test6/drivers/net/Makefile
-===================================================================
---- linux-2.6.0-test6.orig/drivers/net/Makefile        2003-10-12 13:12:22.000000000 +0800
-+++ linux-2.6.0-test6/drivers/net/Makefile     2003-10-12 13:12:25.000000000 +0800
-@@ -32,8 +32,6 @@
- obj-$(CONFIG_OAKNET) += oaknet.o 8390.o
--obj-$(CONFIG_KGDB) += kgdb_eth.o
--
- obj-$(CONFIG_DGRS) += dgrs.o
- obj-$(CONFIG_RCPCI) += rcpci.o
- obj-$(CONFIG_VORTEX) += 3c59x.o
-@@ -109,6 +107,8 @@
- ifeq ($(CONFIG_SLIP_COMPRESSED),y)
-   obj-$(CONFIG_SLIP) += slhc.o
- endif
-+# Must come after all NICs it might use
-+obj-$(CONFIG_KGDB) += kgdb_eth.o
- obj-$(CONFIG_DUMMY) += dummy.o
- obj-$(CONFIG_DE600) += de600.o
-Index: linux-2.6.0-test6/include/asm-i386/kgdb.h
-===================================================================
---- linux-2.6.0-test6.orig/include/asm-i386/kgdb.h     2003-10-12 13:12:23.000000000 +0800
-+++ linux-2.6.0-test6/include/asm-i386/kgdb.h  2003-10-12 13:12:25.000000000 +0800
-@@ -21,17 +21,13 @@
- struct sk_buff;
--extern int kgdb_eth;
--extern unsigned kgdb_remoteip;
--extern unsigned short kgdb_listenport;
--extern unsigned short kgdb_sendport;
--extern unsigned char kgdb_remotemac[6];
--extern unsigned char kgdb_localmac[6];
- extern int kgdb_eth_need_breakpoint[];
-+extern int kgdboe;
-+extern void kgdb_schedule_breakpoint(void);
-+extern void kgdb_process_breakpoint(void);
- extern int kgdb_tty_hook(void);
- extern int kgdb_eth_hook(void);
--extern int gdb_net_interrupt(struct sk_buff *skb);
- /*
-  * GDB debug stub (or any debug stub) can point the 'linux_debug_hook'
-Index: linux-2.6.0-test6/Documentation/i386/kgdb/kgdbeth.txt
-===================================================================
---- linux-2.6.0-test6.orig/Documentation/i386/kgdb/kgdbeth.txt 2003-10-12 13:12:22.000000000 +0800
-+++ linux-2.6.0-test6/Documentation/i386/kgdb/kgdbeth.txt      2003-10-12 13:12:25.000000000 +0800
-@@ -6,16 +6,20 @@
- Robert Walsh <rjwalsh@durables.org>  (2.6 port)
- wangdi <wangdi@clusterfs.com>        (2.6 port)
-+Matt Mackall <mpm@selenic.com>       (netpoll api)
- San Mehat                            (original 2.4 code)
- Introduction
- ------------
--KGDB supports debugging over ethernet.  Only a limited set of ethernet
--devices are supported right now, but adding support for new devices
--should not be too complicated.  See "New Devices" below for details.
--
-+KGDB supports debugging over ethernet (kgdboe) via polling of a given
-+network interface. Most cards should be supported automatically.
-+Debugging facilities are available as soon as the network driver and
-+kgdboe have initialized. Unfortunately, this is too late in the boot
-+process for debugging some issues, but works quite well for many
-+others. This should not interfere with normal network usage and
-+doesn't require a dedicated NIC.
- Terminology
- -----------
-@@ -29,33 +33,25 @@
- Usage
- -----
--You need to use the following command-line options on the TARGET kernel:
--
--  gdbeth=DEVICENUM
--  gdbeth_remoteip=HOSTIPADDR
--  gdbeth_remotemac=REMOTEMAC
--  gdbeth_localmac=LOCALMAC
--
--kgdbeth=DEVICENUM sets the ethernet device number to listen on for
--debugging packets.  e.g. kgdbeth=0 listens on eth0.
--
--kgdbeth_remoteip=HOSTIPADDR sets the IP address of the HOST machine.
--Only packets originating from this IP address will be accepted by the
--debugger.  e.g. kgdbeth_remoteip=192.168.2.2
-+You need to use the following command-line option on the TARGET kernel:
--kgdbeth_remotemac=REMOTEMAC sets the ethernet address of the HOST machine.
--e.g. kgdbeth_remotemac=00:07:70:12:4E:F5
-+  kgdboe=[tgt-port]@<tgt-ip>/[dev],[host-port]@<host-ip>/[host-macaddr]
--kgdbeth_localmac=LOCALMAC sets the ethernet address of the TARGET machine.
--e.g. kgdbeth_localmac=00:10:9F:18:21:3C
-+    where
-+        tgt-port      source for UDP packets (defaults to 6443)
-+        tgt-ip        source IP to use (interface address)
-+        dev           network interface (eth0)
-+        host-port     HOST UDP port (6442) (not really used)
-+        host-ip       IP address for HOST machine
-+        host-macaddr  ethernet MAC address for HOST (ff:ff:ff:ff:ff:ff)
--You can also set the following command-line option on the TARGET kernel:
-+  examples:
--  kgdbeth_listenport=PORT
-+    kgdboe=7000@192.168.0.1/wlan0,7001@192.168.0.2/00:05:3C:04:47:5D
-+    kgdboe=@192.168.0.1/,@192.168.0.2/
--kgdbeth_listenport sets the UDP port to listen on for gdb debugging
--packets.  The default value is "6443".  e.g. kgdbeth_listenport=7654
--causes the kernel to listen on UDP port 7654 for debugging packets.
-+Only packets originating from the configured HOST IP address will be
-+accepted by the debugger.
- On the HOST side, run gdb as normal and use a remote UDP host as the
- target:
-@@ -72,47 +68,16 @@
- You can now continue as if you were debugging over a serial line.
--Observations
--------------
--
--I've used this with NFS and various other network applications (ssh,
--etc.) and it's doesn't appear to interfere with their operation in
--any way.  It doesn't seem to effect the NIC it uses - i.e. you don't
--need a dedicated NIC for this.
--
- Limitations
- -----------
--In the inital release of this code you _must_ break into the system with the
--debugger by hand, early after boot, as described above.
--
--Otherwise, the first time the kernel tries to enter the debugger (say, via an
--oops or a BUG), the kgdb stub will doublefault and die because things aren't
--fully set up yet.
--
--Supported devices
-------------------
--
--Right now, the following drivers are supported:
--
--  e100 driver (drivers/net/e100/*)
--  3c59x driver (drivers/net/3c59x.c)
--
--
--New devices
-------------
--
--Supporting a new device is straightforward.  Just add a "poll" routine to
--the driver and hook it into the poll_controller field in the netdevice
--structure.  For an example, look in drivers/net/3c59x.c and search
--for CONFIG_KGDB (two places.)
--
--The poll routine is usually quite simple - it's usually enough to just
--disable interrupts, call the device's interrupt routine and re-enable
--interrupts again.
--
-+The current release of this code is exclusive of using kgdb on a
-+serial interface, so you must boot without the kgdboe option to use
-+serial debugging. Trying to debug the network driver while using it
-+will prove interesting.
- Bug reports
- -----------
--Send bug reports to Robert Walsh <rjwalsh@durables.org>.
-+Send bug reports to Robert Walsh <rjwalsh@durables.org> Matt
-+Mackall <mpm@selenic.com> and wangdi <wangdi@clusterfs.com>.
diff --git a/lustre/kernel_patches/patches/kgdb_eth.patch b/lustre/kernel_patches/patches/kgdb_eth.patch
deleted file mode 100644 (file)
index 5c8eaa2..0000000
+++ /dev/null
@@ -1,1185 +0,0 @@
-Index: linux-2.6.0-test1/arch/i386/kernel/kgdb_stub.c
-===================================================================
---- linux-2.6.0-test1.orig/arch/i386/kernel/kgdb_stub.c        2003-09-02 14:16:10.000000000 +0800
-+++ linux-2.6.0-test1/arch/i386/kernel/kgdb_stub.c     2003-09-02 14:32:02.000000000 +0800
-@@ -30,6 +30,7 @@
-  *
-  *  Written by:            Glenn Engel $
-  *  Updated by:            David Grothe <dave@gcom.com>
-+ *  Updated by:            Robert Walsh <rjwalsh@durables.org>
-  *  ModuleState:     Experimental $
-  *
-  *  NOTES:         See Below $
-@@ -112,6 +113,7 @@
- #include <asm/processor.h>
- #include <linux/irq.h>
- #include <asm/desc.h>
-+#include <linux/inet.h>
- /************************************************************************
-  *
-@@ -122,8 +124,16 @@
- /* Thread reference */
- typedef unsigned char threadref[8];
--extern void putDebugChar(int);        /* write a single character      */
--extern int getDebugChar(void);        /* read and return a single char */
-+extern int tty_putDebugChar(int);     /* write a single character      */
-+extern int tty_getDebugChar(void);    /* read and return a single char */
-+extern void tty_flushDebugChar(void); /* flush pending characters      */
-+extern int eth_putDebugChar(int);     /* write a single character      */
-+extern int eth_getDebugChar(void);    /* read and return a single char */
-+extern void eth_flushDebugChar(void); /* flush pending characters      */
-+extern void gdb_eth_set_trapmode(int);
-+extern void gdb_eth_reply_arp(void);   /*send arp request */
-+extern int gdb_eth_is_initializing;
-+
- /************************************************************************/
- /* BUFMAX defines the maximum number of characters in inbound/outbound buffers*/
-@@ -264,6 +274,35 @@
- }
- /*
-+ * I/O dispatch functions...
-+ * Based upon gdb_eth, either call the ethernet
-+ * handler or the serial one..
-+ */
-+void putDebugChar(int c)
-+{
-+  if (gdb_eth == -1)
-+      tty_putDebugChar(c);
-+  else
-+      eth_putDebugChar(c);
-+}
-+
-+int getDebugChar(void)
-+{
-+  if (gdb_eth == -1)
-+      return tty_getDebugChar();
-+  else
-+      return eth_getDebugChar();
-+}
-+
-+void flushDebugChar(void)
-+{
-+    if (gdb_eth == -1)
-+      tty_flushDebugChar();
-+    else
-+      eth_flushDebugChar();
-+}
-+
-+/*
-  * Gdb calls functions by pushing agruments, including a return address 
-  * on the stack and the adjusting EIP to point to the function.        The 
-  * whole assumption in GDB is that we are on a different stack than the
-@@ -389,7 +428,6 @@
-               xmitcsum = -1;
-               count = 0;
--
-               /* now, read until a # or end of buffer is found */
-               while (count < BUFMAX) {
-                       ch = getDebugChar() & 0x7f;
-@@ -429,6 +467,7 @@
-       if (remote_debug)
-               printk("R:%s\n", buffer);
-+      flushDebugChar();
- }
- /* send the packet in buffer.  */
-@@ -441,25 +480,64 @@
-       char ch;
-       /*  $<packet info>#<checksum>. */
--      do {
--              if (remote_debug)
--                      printk("T:%s\n", buffer);
--              putDebugChar('$');
--              checksum = 0;
--              count = 0;
--
--              while ((ch = buffer[count])) {
--                      putDebugChar(ch);
--                      checksum += ch;
--                      count += 1;
--              }
--              putDebugChar('#');
--              putDebugChar(hexchars[checksum >> 4]);
--              putDebugChar(hexchars[checksum % 16]);
--
--      } while ((getDebugChar() & 0x7f) != '+');
-+      if (gdb_eth == -1){
-+              do {
-+                      if (remote_debug)
-+                              printk("T:%s\n", buffer);
-+                      putDebugChar('$');
-+                      checksum = 0;
-+                      count = 0;
-+
-+                      while ((ch = buffer[count])) {
-+                              putDebugChar(ch);
-+                              checksum += ch;
-+                              count += 1;
-+                      }
-+                      
-+                      putDebugChar('#');
-+                      putDebugChar(hexchars[checksum >> 4]);
-+                      putDebugChar(hexchars[checksum % 16]);
-+                      flushDebugChar();
-+
-+              } while ((getDebugChar() & 0x7f) != '+');
-+      }else{
-+      
-+              /*for udp, we can not transfer too much bytes once */
-+              /*we only transfer MAX_SEND_COUNT size byts each time */
-+#define MAX_SEND_COUNT 30     
-+              int send_count=0, i=0;
-+              char send_buf[30];
-+              do {
-+                      if (remote_debug)
-+                              printk("T:%s\n", buffer);
-+                      putDebugChar('$');
-+                      checksum = 0;
-+                      count = 0;
-+                      send_count = 0; 
-+                      while ((ch = buffer[count])) {
-+                              if (send_count >= MAX_SEND_COUNT){
-+                                      for(i=0; i < MAX_SEND_COUNT; i++){
-+                                              putDebugChar(send_buf[i]);
-+                                      }               
-+                                      flushDebugChar();
-+                                      send_count = 0;
-+                              }else{
-+                                      send_buf[send_count] = ch;
-+                                      checksum += ch;
-+                                      count ++;
-+                                      send_count++;
-+                              }
-+                      }
-+                      for(i=0; i < send_count; i++)
-+                              putDebugChar(send_buf[i]);
-+                      putDebugChar('#');
-+                      putDebugChar(hexchars[checksum >> 4]);
-+                      putDebugChar(hexchars[checksum % 16]);
-+                      flushDebugChar();
-+              } while ((getDebugChar() & 0x7f) != '+');
-+      }
- }
- static char remcomInBuffer[BUFMAX];
-@@ -1143,6 +1221,13 @@
-               print_regs(&regs);
-               return (0);
-       }
-+      /*
-+       * If we're using eth mode, set the 'mode' in the netdevice.
-+       */
-+
-+      if(gdb_eth != -1) {
-+              gdb_eth_set_trapmode(1);
-+      }
-       kgdb_local_irq_save(flags);
-@@ -1156,8 +1241,8 @@
-        * NMI and will wait there for the following spin locks to be 
-        * released.
-        */
-+      
- #ifdef CONFIG_SMP
--
- #if 0
-       if (cpu_callout_map & ~MAX_CPU_MASK) {
-               printk("kgdb : too many cpus, possibly not mapped"
-@@ -1372,6 +1457,7 @@
-       gdb_i386vector = exceptionVector;
-       gdb_i386errcode = err_code;
-       kgdb_info.called_from = __builtin_return_address(0);
-+
- #ifdef CONFIG_SMP
-       /*
-        * OK, we can now communicate, lets tell gdb about the sync.
-@@ -1400,8 +1486,13 @@
-       remcomOutBuffer[2] = hexchars[signo % 16];
-       remcomOutBuffer[3] = 0;
--      putpacket(remcomOutBuffer);
-+      if (gdb_eth_is_initializing) {
-+              gdb_eth_is_initializing = 0;
-+      } else {
-+              putpacket(remcomOutBuffer);
-+      }
-+      gdb_eth_reply_arp();
-       while (1 == 1) {
-               error = 0;
-               remcomOutBuffer[0] = 0;
-@@ -1419,7 +1510,9 @@
-                              remote_debug ? "on" : "off");
-                       break;
-               case 'g':       /* return the value of the CPU registers */
-+                      
-                       get_gdb_regs(usethread, &regs, gdb_regs);
-+                      
-                       mem2hex((char *) gdb_regs,
-                               remcomOutBuffer, NUMREGBYTES, 0);
-                       break;
-@@ -1536,6 +1629,10 @@
-                       newPC = regs.eip;
-+                      if (gdb_eth != -1) {
-+                              gdb_eth_set_trapmode(0);
-+                      }
-+
-                       /* clear the trace bit */
-                       regs.eflags &= 0xfffffeff;
-@@ -1856,9 +1953,7 @@
-               kgdb_local_irq_restore(flags);
-               return (0);
-       }
--#if 0
--exit_just_unlock:
--#endif
-+      exit_just_unlock:
- #endif
-       /* Release kgdb spinlock */
-       KGDB_SPIN_UNLOCK(&kgdb_spinlock);
-@@ -2213,3 +2308,72 @@
- typedef int gdb_debug_hook(int exceptionVector,
-                          int signo, int err_code, struct pt_regs *linux_regs);
- gdb_debug_hook *linux_debug_hook = &kgdb_handle_exception;    /* histerical reasons... */
-+
-+static int __init kgdb_opt_gdbeth(char *str)
-+{
-+      gdb_eth = simple_strtoul(str,NULL,10);
-+      return 1;
-+}
-+
-+static int __init kgdb_opt_gdbeth_remote(char *str)
-+{
-+      gdb_ethremote = in_aton(str);
-+      return 1;
-+}
-+
-+static int __init kgdb_opt_gdbeth_listen(char *str)
-+{
-+      gdb_listenport = simple_strtoul(str,NULL,10);
-+      return 1;
-+}
-+
-+static int __init kgdb_opt_gdbeth_hwaddr(char *str)
-+{
-+      int  i;
-+      char *p;
-+
-+      p = str;
-+      i = 0;
-+      while(1)
-+      {
-+              unsigned int c;
-+              sscanf(p, "%x:", &c);
-+              gdb_sendhwaddr[i++] = c;
-+              while((*p != 0) && (*p != ':'))
-+                      p++;
-+              if (*p == 0)
-+                      break;
-+              p++;
-+      }
-+
-+      return 1;
-+}
-+static int __init kgdb_opt_gdbeth_rchwaddr(char *str)
-+{
-+      int  i;
-+      char *p;
-+
-+      p = str;
-+      i = 0;
-+      while(1)
-+      {
-+              unsigned int c;
-+              sscanf(p, "%x:", &c);
-+              gdb_receivehwaddr[i++] = c;
-+              while((*p != 0) && (*p != ':'))
-+                      p++;
-+              if (*p == 0)
-+                      break;
-+              p++;
-+      }
-+
-+      return 1;
-+}
-+
-+
-+__setup("gdbeth=", kgdb_opt_gdbeth);
-+__setup("gdbeth_remote=", kgdb_opt_gdbeth_remote);
-+__setup("gdbeth_listenport=", kgdb_opt_gdbeth_listen);
-+__setup("gdbeth_sendhwaddr=", kgdb_opt_gdbeth_hwaddr);
-+__setup("gdbeth_receivehwaddr=", kgdb_opt_gdbeth_rchwaddr);
-+
-Index: linux-2.6.0-test1/arch/i386/lib/kgdb_serial.c
-===================================================================
---- linux-2.6.0-test1.orig/arch/i386/lib/kgdb_serial.c 2003-09-02 14:16:11.000000000 +0800
-+++ linux-2.6.0-test1/arch/i386/lib/kgdb_serial.c      2003-09-02 14:32:02.000000000 +0800
-@@ -155,12 +155,12 @@
-  * It will receive a limited number of characters of input
-  * from the gdb  host machine and save them up in a buffer.
-  *
-- * When the gdb stub routine getDebugChar() is called it
-+ * When the gdb stub routine tty_getDebugChar() is called it
-  * draws characters out of the buffer until it is empty and
-  * then reads directly from the serial port.
-  *
-  * We do not attempt to write chars from the interrupt routine
-- * since the stubs do all of that via putDebugChar() which
-+ * since the stubs do all of that via tty_putDebugChar() which
-  * writes one byte after waiting for the interface to become
-  * ready.
-  *
-@@ -226,7 +226,7 @@
- /*
-  * Hook an IRQ for KGDB.
-  *
-- * This routine is called from putDebugChar, below.
-+ * This routine is called from tty_putDebugChar, below.
-  */
- static int ints_disabled = 1;
- int
-@@ -331,7 +331,7 @@
- }
- /*
-- * getDebugChar
-+ * tty_getDebugChar
-  *
-  * This is a GDB stub routine.        It waits for a character from the
-  * serial interface and then returns it.  If there is no serial
-@@ -345,11 +345,11 @@
- /* Caller takes needed protections */
- int
--getDebugChar(void)
-+tty_getDebugChar(void)
- {
-       volatile int chr, dum, time, end_time;
--      dbprintk(("getDebugChar(port %x): ", gdb_async_info->port));
-+      dbprintk(("tty_getDebugChar(port %x): ", gdb_async_info->port));
-       if (gdb_async_info == NULL) {
-               gdb_hook_interrupt(&local_info, 0);
-@@ -375,7 +375,7 @@
-       dbprintk(("%c\n", chr > ' ' && chr < 0x7F ? chr : ' '));
-       return (chr);
--}                             /* getDebugChar */
-+}                             /* tty_getDebugChar */
- static int count = 3;
- static spinlock_t one_at_atime = SPIN_LOCK_UNLOCKED;
-@@ -383,6 +383,9 @@
- static int __init
- kgdb_enable_ints(void)
- {
-+      if (gdb_eth != -1) {
-+              return 0;
-+      }
-       if (gdb_async_info == NULL) {
-               gdb_hook_interrupt(&local_info, 1);
-       }
-@@ -444,7 +447,7 @@
- }
- /*
-- * putDebugChar
-+ * tty_putDebugChar
-  *
-  * This is a GDB stub routine.        It waits until the interface is ready
-  * to transmit a char and then sends it.  If there is no serial
-@@ -452,9 +455,9 @@
-  * pretended to send the char.        Caller takes needed protections.
-  */
- void
--putDebugChar(int chr)
-+tty_putDebugChar(int chr)
- {
--      dbprintk(("putDebugChar(port %x): chr=%02x '%c', ints_on=%d\n",
-+      dbprintk(("tty_putDebugChar(port %x): chr=%02x '%c', ints_on=%d\n",
-                 gdb_async_info->port,
-                 chr,
-                 chr > ' ' && chr < 0x7F ? chr : ' ', ints_disabled ? 0 : 1));
-@@ -480,6 +483,14 @@
-               }
-       }
--}                             /* putDebugChar */
-+}                             /* tty_putDebugChar */
-+
-+/*
-+ * This does nothing for the serial port, since it doesn't buffer.
-+ */
-+
-+void tty_flushDebugChar(void)
-+{
-+}
- module_init(kgdb_enable_ints);
-Index: linux-2.6.0-test1/include/linux/netdevice.h
-===================================================================
---- linux-2.6.0-test1.orig/include/linux/netdevice.h   2003-09-02 14:29:27.000000000 +0800
-+++ linux-2.6.0-test1/include/linux/netdevice.h        2003-09-02 14:32:02.000000000 +0800
-@@ -469,6 +469,11 @@
-       /* statistics sub-directory */
-       struct kobject          stats_kobj;
-+
-+#ifdef CONFIG_KGDB
-+      int                     kgdb_is_trapped;
-+      void                    (*kgdb_net_poll_rx)(struct net_device *);
-+#endif
- };
- #define SET_MODULE_OWNER(dev) do { } while (0)
-@@ -524,6 +529,11 @@
- extern struct net_device      *dev_get_by_index(int ifindex);
- extern struct net_device      *__dev_get_by_index(int ifindex);
- extern int            dev_restart(struct net_device *dev);
-+#ifdef CONFIG_KGDB
-+int           gdb_eth_is_trapped(void);
-+int           gdb_net_interrupt(struct sk_buff *skb);
-+void          gdb_send_arp_request(void);
-+#endif
- typedef int gifconf_func_t(struct net_device * dev, char * bufptr, int len);
- extern int            register_gifconf(unsigned int family, gifconf_func_t * gifconf);
-@@ -582,12 +592,20 @@
- static inline void netif_wake_queue(struct net_device *dev)
- {
-+#ifdef CONFIG_KGDB
-+      if (gdb_eth_is_trapped())
-+              return;
-+#endif
-       if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state))
-               __netif_schedule(dev);
- }
- static inline void netif_stop_queue(struct net_device *dev)
- {
-+#ifdef CONFIG_KGDB
-+      if (gdb_eth_is_trapped())
-+              return;
-+#endif
-       set_bit(__LINK_STATE_XOFF, &dev->state);
- }
-Index: linux-2.6.0-test1/include/asm-i386/kgdb.h
-===================================================================
---- linux-2.6.0-test1.orig/include/asm-i386/kgdb.h     2003-09-02 14:16:20.000000000 +0800
-+++ linux-2.6.0-test1/include/asm-i386/kgdb.h  2003-09-02 14:32:03.000000000 +0800
-@@ -18,6 +18,16 @@
- #ifndef BREAKPOINT
- #define BREAKPOINT   asm("   int $3")
- #endif
-+
-+extern int gdb_eth;
-+extern unsigned gdb_ethremote;
-+extern unsigned short gdb_listenport;
-+extern unsigned char gdb_sendhwaddr[6];
-+extern unsigned char gdb_receivehwaddr[6];
-+
-+extern int gdb_tty_hook(void);
-+extern int gdb_eth_hook(void);
-+
- /*
-  * GDB debug stub (or any debug stub) can point the 'linux_debug_hook'
-  * pointer to its routine and it will be entered as the first thing
-@@ -34,6 +44,7 @@
- extern int kgdb_handle_exception(int trapno,
-                                int signo, int err_code, struct pt_regs *regs);
- extern int in_kgdb(struct pt_regs *regs);
-+extern void kgdb_null(void);
- #ifdef CONFIG_KGDB_TS
- void kgdb_tstamp(int line, char *source, int data0, int data1);
-Index: linux-2.6.0-test1/drivers/net/e100/e100_main.c
-===================================================================
---- linux-2.6.0-test1.orig/drivers/net/e100/e100_main.c        2003-09-02 14:29:27.000000000 +0800
-+++ linux-2.6.0-test1/drivers/net/e100/e100_main.c     2003-09-02 14:32:03.000000000 +0800
-@@ -567,6 +567,15 @@
- }
- #endif
-+#ifdef CONFIG_KGDB
-+static void e100_rx_poll(struct net_device *dev)
-+{
-+      disable_irq(dev->irq);
-+      e100intr(dev->irq, (void *)dev, 0);
-+      enable_irq(dev->irq);
-+}
-+#endif
-+
- static int __devinit
- e100_found1(struct pci_dev *pcid, const struct pci_device_id *ent)
- {
-@@ -662,7 +671,9 @@
-       dev->set_multicast_list = &e100_set_multi;
-       dev->set_mac_address = &e100_set_mac;
-       dev->do_ioctl = &e100_ioctl;
--
-+#ifdef CONFIG_KGDB
-+      dev->kgdb_net_poll_rx = e100_rx_poll;
-+#endif
-       if (bdp->flags & USE_IPCB)
-       dev->features = NETIF_F_SG | NETIF_F_HW_CSUM |
-                       NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
-Index: linux-2.6.0-test1/drivers/net/3c59x.c
-===================================================================
---- linux-2.6.0-test1.orig/drivers/net/3c59x.c 2003-09-02 14:29:27.000000000 +0800
-+++ linux-2.6.0-test1/drivers/net/3c59x.c      2003-09-02 14:32:03.000000000 +0800
-@@ -1063,6 +1063,22 @@
-       return rc;
- }
-+#ifdef CONFIG_KGDB
-+static void vortex_rx_poll(struct net_device *dev)
-+{
-+      disable_irq(dev->irq);
-+      vortex_interrupt(dev->irq, (void *)dev, 0);
-+      enable_irq(dev->irq);
-+}
-+
-+static void boomerang_rx_poll(struct net_device *dev)
-+{
-+      disable_irq(dev->irq);
-+      boomerang_interrupt(dev->irq, (void *)dev, 0);
-+      enable_irq(dev->irq);
-+}
-+#endif
-+
- /*
-  * Start up the PCI/EISA device which is described by *gendev.
-  * Return 0 on success.
-@@ -1449,6 +1465,14 @@
-       dev->set_multicast_list = set_rx_mode;
-       dev->tx_timeout = vortex_tx_timeout;
-       dev->watchdog_timeo = (watchdog * HZ) / 1000;
-+#ifdef CONFIG_KGDB
-+      if (vp->full_bus_master_tx) {
-+              dev->kgdb_net_poll_rx = boomerang_rx_poll;
-+      } else {
-+              dev->kgdb_net_poll_rx = vortex_rx_poll;
-+      }
-+#endif
-+
- #ifdef HAVE_POLL_CONTROLLER
-       dev->poll_controller = &vorboom_poll;
- #endif
-Index: linux-2.6.0-test1/drivers/net/Makefile
-===================================================================
---- linux-2.6.0-test1.orig/drivers/net/Makefile        2003-07-14 11:32:32.000000000 +0800
-+++ linux-2.6.0-test1/drivers/net/Makefile     2003-09-02 14:32:03.000000000 +0800
-@@ -32,6 +32,8 @@
- obj-$(CONFIG_OAKNET) += oaknet.o 8390.o
-+obj-$(CONFIG_KGDB) += kgdb_eth.o
-+
- obj-$(CONFIG_DGRS) += dgrs.o
- obj-$(CONFIG_RCPCI) += rcpci.o
- obj-$(CONFIG_VORTEX) += 3c59x.o
-Index: linux-2.6.0-test1/drivers/net/kgdb_eth.c
-===================================================================
---- linux-2.6.0-test1.orig/drivers/net/kgdb_eth.c      2003-09-02 14:32:02.000000000 +0800
-+++ linux-2.6.0-test1/drivers/net/kgdb_eth.c   2003-09-02 21:41:42.000000000 +0800
-@@ -0,0 +1,547 @@
-+/*
-+ * Network interface GDB stub
-+ *
-+ * Written by San Mehat (nettwerk@biodome.org)
-+ * Based upon 'gdbserial' by David Grothe (dave@gcom.com)
-+ * and Scott Foehner (sfoehner@engr.sgi.com)
-+ *
-+ * Twiddled for 2.5 by Robert Walsh (rjwalsh@durables.org)
-+ *
-+ */
-+ 
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/signal.h>
-+#include <linux/sched.h>
-+#include <linux/timer.h>
-+#include <linux/interrupt.h>
-+#include <linux/config.h>
-+#include <linux/major.h>
-+#include <linux/string.h>
-+#include <linux/fcntl.h>
-+#include <linux/termios.h>
-+#include <linux/workqueue.h>
-+#include <asm/kgdb.h>
-+#include <linux/if_ether.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/skbuff.h>
-+#include <linux/delay.h>
-+#include <net/tcp.h>
-+#include <net/udp.h>
-+
-+#include <asm/system.h>
-+#include <asm/io.h>
-+#include <asm/segment.h>
-+#include <asm/bitops.h>
-+#include <asm/system.h>
-+#include <asm/irq.h>
-+#include <asm/atomic.h>
-+
-+#undef        PRNT                            /* define for debug printing */
-+
-+#define       GDB_BUF_SIZE    512             /* power of 2, please */
-+
-+static char   gdb_buf[GDB_BUF_SIZE] ;
-+static int    gdb_buf_in_inx ;
-+static atomic_t       gdb_buf_in_cnt ;
-+static int    gdb_buf_out_inx ;
-+
-+extern void   set_debug_traps(void) ;         /* GDB routine */
-+extern void     breakpoint(void);
-+
-+unsigned int    gdb_ethremote = 0;
-+unsigned short  gdb_listenport = 6443;
-+unsigned short  gdb_sendport= 6442;
-+int             gdb_eth = -1; /* Default tty mode */
-+unsigned char   gdb_sendhwaddr[6] = {0xff,0xff,0xff,0xff,0xff,0xff};
-+unsigned char   gdb_receivehwaddr[6] = {0xff,0xff,0xff,0xff,0xff,0xff};
-+int             gdb_eth_is_initializing = 0;
-+int           gdb_eth_debug = 0;
-+
-+struct net_device *gdb_netdevice = NULL;
-+
-+//static int      initialized = -1;
-+//static struct work_struct irq_bp;
-+
-+static void bpwork_func(void *p)
-+{
-+    udelay(500);
-+    BREAKPOINT;
-+}
-+
-+static struct workqueue_struct *irq_bp;
-+DECLARE_WORK(bpwork, bpwork_func, NULL);
-+
-+/*
-+ * Get a char if available, return -1 if nothing available.
-+ * Empty the receive buffer first, then look at the interface hardware.
-+ */
-+static int read_char(void)
-+{
-+    
-+    if (atomic_read(&gdb_buf_in_cnt) != 0) /* intr routine has q'd chars */
-+    {
-+      int chr ;
-+
-+      chr = gdb_buf[gdb_buf_out_inx++] ;
-+      gdb_buf_out_inx &= (GDB_BUF_SIZE - 1) ;
-+      atomic_dec(&gdb_buf_in_cnt) ;
-+      return chr;
-+    }
-+    return -1; // no data
-+} /* read_char */
-+
-+//static unsigned char daddr[6] = {0x00,0x06,0x25,0xA9,0x9F,0x6A};
-+//static unsigned char daddr[6] = {0x00,0x50,0xFC,0xB8,0x22,0x03};
-+//static unsigned char daddr[6] = {0x00,0x08,0x74,0x96,0x6D,0x9B};
-+//static unsigned char daddr[6] = {0x00,0x07,0xE9,0xD4,0xBE,0x85};
-+//static unsigned char daddr[6] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
-+
-+/*
-+ * Wait until the interface can accept a char, then write it.
-+ */
-+static void write_buffer(char *buf, int len)
-+{
-+    int              total_len, eth_len, ip_len, udp_len;
-+    struct in_device *in_dev;
-+    struct sk_buff   *skb;
-+    struct udphdr    *udph;
-+    struct iphdr     *iph;
-+    struct ethhdr    *eth;
-+
-+    if (!(in_dev = (struct in_device *) gdb_netdevice->ip_ptr)) 
-+      panic("No in_device available for interface!\n");
-+    if (!(in_dev->ifa_list))
-+      panic("No interface address set for interface!\n");
-+    udp_len = len + sizeof(struct udphdr);
-+    ip_len = eth_len = udp_len + sizeof(struct iphdr);
-+    total_len = eth_len + ETH_HLEN;
-+
-+    if (!(skb = alloc_skb(total_len, GFP_ATOMIC)))
-+      return;
-+
-+    atomic_set(&skb->users, 1);
-+    skb_reserve(skb, total_len - 1);
-+
-+    memcpy(skb->data , (unsigned char *) buf, len);
-+    skb->len += len;
-+
-+    udph = (struct udphdr *) skb_push(skb, sizeof(*udph));
-+    udph->source = htons(gdb_listenport);
-+    udph->dest   = htons(gdb_sendport);
-+    udph->len    = htons(udp_len);
-+    udph->check  = 0;
-+  
-+    iph = (struct iphdr *)skb_push(skb, sizeof(*iph));
-+    iph->version = 4;
-+    iph->ihl     = 5;
-+    iph->tos     = 0;
-+    iph->tot_len = htons(ip_len);
-+    iph->id      = 0;
-+    iph->frag_off= 0;
-+    iph->ttl     = 64;
-+    iph->protocol= IPPROTO_UDP;
-+    iph->check   = 0;
-+    iph->saddr   = in_dev->ifa_list->ifa_address;
-+    iph->daddr   = gdb_ethremote;
-+    iph->check   = ip_fast_csum((unsigned char *)iph, iph->ihl);
-+
-+    eth = (struct ethhdr *) skb_push(skb, ETH_HLEN);
-+    eth->h_proto = htons(ETH_P_IP);
-+    memcpy(eth->h_source, gdb_sendhwaddr, gdb_netdevice->addr_len);
-+//    memcpy(eth->h_dest, daddr, gdb_netdevice->addr_len);
-+    memcpy(eth->h_dest, gdb_receivehwaddr, gdb_netdevice->addr_len);
-+
-+#if 0 
-+repeat_poll:
-+#endif
-+    spin_lock(&gdb_netdevice->xmit_lock);
-+    gdb_netdevice->xmit_lock_owner = smp_processor_id();
-+#if 0 
-+    if (netif_queue_stopped(gdb_netdevice))
-+    {
-+      gdb_netdevice->xmit_lock_owner = -1;
-+      spin_unlock(&gdb_netdevice->xmit_lock);
-+      gdb_netdevice->poll_controller(gdb_netdevice);
-+      zap_completion_queue();
-+      goto repeat_poll;
-+    }
-+#endif
-+    gdb_netdevice->hard_start_xmit(skb, gdb_netdevice);
-+    gdb_netdevice->xmit_lock_owner = -1;
-+    spin_unlock(&gdb_netdevice->xmit_lock);
-+
-+   // kfree_skb(skb);
-+} /* write_char */
-+/* in interrupt state the target machine will not response the arp request */ 
-+
-+static struct sk_buff *send_skb = NULL;
-+void gdb_eth_reply_arp(void)
-+{
-+      if (send_skb){
-+#if 0 
-+repeat_poll:
-+#endif
-+              spin_lock(&gdb_netdevice->xmit_lock);
-+              gdb_netdevice->xmit_lock_owner = smp_processor_id();
-+#if 0 
-+              if (netif_queue_stopped(gdb_netdevice)){
-+                      gdb_netdevice->xmit_lock_owner = -1;
-+                      spin_unlock(&gdb_netdevice->xmit_lock);
-+                      gdb_netdevice->poll_controller(gdb_netdevice);
-+                      zap_completion_queue();
-+                      goto repeat_poll;
-+              }
-+#endif
-+              gdb_netdevice->hard_start_xmit(send_skb, gdb_netdevice);
-+              gdb_netdevice->xmit_lock_owner = -1;
-+              spin_unlock(&gdb_netdevice->xmit_lock);
-+              send_skb = NULL;        
-+      
-+      }
-+}
-+static int make_arp_request( struct sk_buff *skb)
-+{
-+      struct arphdr *arp;
-+      unsigned char *arp_ptr;
-+      int type = ARPOP_REPLY;
-+      int ptype = ETH_P_ARP;
-+      u32 sip, tip;
-+      unsigned char *sha, *tha;
-+      struct in_device *in_dev = (struct in_device *) gdb_netdevice->ip_ptr; 
-+      /*
-+       *      No arp on this interface.
-+       */
-+      if (gdb_netdevice->flags &IFF_NOARP)
-+              return 0;
-+      if (!pskb_may_pull(skb, (sizeof(struct arphdr) +
-+                               (2 * gdb_netdevice->addr_len) +
-+                               (2 * sizeof(u32)))))
-+              return 0;
-+      
-+      skb->h.raw = skb->nh.raw = skb->data;
-+      arp = skb->nh.arph;
-+
-+      if ((arp->ar_hrd != htons(ARPHRD_ETHER) &&
-+           arp->ar_hrd != htons(ARPHRD_IEEE802)) ||
-+          arp->ar_pro != htons(ETH_P_IP))
-+              return 0;
-+
-+/* Understand only these message types */
-+
-+      if (arp->ar_op != htons(ARPOP_REQUEST))
-+              return 0;
-+/*
-+ *    Extract fields
-+ */
-+      arp_ptr= (unsigned char *)(arp+1);
-+      sha     = arp_ptr;
-+      arp_ptr += gdb_netdevice->addr_len;
-+      memcpy(&sip, arp_ptr, 4);
-+      arp_ptr += 4;
-+      tha     = arp_ptr;
-+      arp_ptr += gdb_netdevice->addr_len;
-+      memcpy(&tip, arp_ptr, 4);
-+      if (tip != in_dev->ifa_list->ifa_address){
-+              return 0;
-+      } 
-+      if (gdb_ethremote != sip){
-+              return 0;       
-+      }
-+/* 
-+ *    Check for bad requests for 127.x.x.x and requests for multicast
-+ *    addresses.  If this is one such, delete it.
-+ */
-+      
-+      if (LOOPBACK(tip) || MULTICAST(tip))
-+              return 0;
-+
-+/*
-+ *      reply the arp request
-+ */   
-+      send_skb = alloc_skb(sizeof(struct arphdr)+ 2*(gdb_netdevice->addr_len+4)
-+                              + LL_RESERVED_SPACE(gdb_netdevice), GFP_ATOMIC);
-+      if (send_skb == NULL)
-+              return 0;
-+
-+      skb_reserve(send_skb, LL_RESERVED_SPACE(gdb_netdevice));
-+      send_skb->nh.raw = send_skb->data;
-+      arp = (struct arphdr *) skb_put(send_skb,sizeof(struct arphdr) + 2*(gdb_netdevice->addr_len+4));
-+      send_skb->dev = gdb_netdevice;
-+      send_skb->protocol = htons(ETH_P_ARP);
-+      
-+      /*
-+       *      Fill the device header for the ARP frame
-+       */
-+      if (gdb_netdevice->hard_header &&
-+          gdb_netdevice->hard_header(send_skb,  gdb_netdevice,  ptype, gdb_receivehwaddr, gdb_sendhwaddr, send_skb->len) < 0){
-+              kfree_skb(send_skb);
-+              return 0;
-+      }
-+      /*
-+       * Fill out the arp protocol part.
-+       *
-+       * we only support ethernet device type, 
-+       * which (according to RFC 1390) should always equal 1 (Ethernet).
-+       */
-+      arp->ar_hrd = htons(gdb_netdevice->type);
-+      arp->ar_pro = htons(ETH_P_IP);
-+
-+      arp->ar_hln = gdb_netdevice->addr_len;
-+      arp->ar_pln = 4;
-+      arp->ar_op = htons(type);
-+
-+      arp_ptr=(unsigned char *)(arp+1);
-+
-+      memcpy(arp_ptr, gdb_netdevice->dev_addr, gdb_netdevice->addr_len); 
-+      arp_ptr += gdb_netdevice->addr_len;
-+      memcpy(arp_ptr, &tip, 4);
-+      arp_ptr += 4;
-+        memcpy(arp_ptr, gdb_sendhwaddr, gdb_netdevice->addr_len);
-+      arp_ptr+=gdb_netdevice->addr_len;
-+      memcpy(arp_ptr, &sip, 4);
-+      return 0;
-+}
-+/*
-+ * Accept an skbuff from net_device layer and 
-+ * add the payload onto gdb buffer
-+ *
-+ * When the gdb stub routine getDebugChar() is called it
-+ * draws characters out of the buffer until it is empty and
-+ * then reads directly from the serial port.
-+ *
-+ * We do not attempt to write chars from the interrupt routine
-+ * since the stubs do all of that via putDebugChar() which
-+ * writes one byte after waiting for the interface to become
-+ * ready.
-+ *
-+ * The debug stubs like to run with interrupts disabled since,
-+ * after all, they run as a consequence of a breakpoint in
-+ * the kernel.
-+ *
-+ * NOTE: Return value of 1 means it was for us and is an
-+ * indication to the calling driver to destroy the sk_buff
-+ * and not send it up the stack
-+ */
-+
-+int gdb_net_interrupt(struct sk_buff *skb)
-+{
-+    unsigned char  chr;
-+    struct iphdr   *iph = (struct iphdr*)skb->data;
-+    struct udphdr  *udph= (struct udphdr*)(skb->data+(iph->ihl<<2));
-+    unsigned char  *data = (unsigned char *) udph + sizeof(struct udphdr);
-+    int            len;
-+    int            i;
-+
-+    if ((gdb_eth != -1) && (!gdb_netdevice) &&
-+      (iph->protocol == IPPROTO_UDP) &&
-+      (be16_to_cpu(udph->dest) == gdb_listenport)) {
-+      gdb_sendport = be16_to_cpu(udph->source);
-+      
-+        while(gdb_eth_is_initializing);
-+      if(!gdb_netdevice)
-+          gdb_eth_hook();
-+      if (!gdb_netdevice) {
-+          /* Lets not even try again. */
-+          gdb_eth = -1;
-+          return 0;
-+      }
-+    }
-+    if (!gdb_netdevice) {
-+      return 0;
-+    }
-+    if (skb->protocol == __constant_htons(ETH_P_ARP) && !send_skb){
-+      make_arp_request(skb);
-+      return 0;
-+    }
-+    if (iph->protocol != IPPROTO_UDP)
-+      return 0;
-+
-+    if (be16_to_cpu(udph->dest) != gdb_listenport)
-+      return 0;
-+
-+    len = be16_to_cpu(iph->tot_len) - (sizeof(struct udphdr) +
-+                                     sizeof(struct iphdr));
-+    for (i = 0; i < len; i++)
-+    {
-+      chr = *data++;
-+      if (chr == 3)
-+      {
-+          queue_work(irq_bp, &bpwork);
-+//        flush_workqueue(irq_bp);
-+          continue;
-+/*
-+          if (!in_interrupt())
-+          {
-+              breakpoint();
-+          }
-+          else
-+          {
-+              schedule_work(&irq_bp); // XXX: is this really necessary??
-+          }
-+          continue;
-+*/
-+      }
-+      if (atomic_read(&gdb_buf_in_cnt) >= GDB_BUF_SIZE)
-+      {                               /* buffer overflow, clear it */
-+          gdb_buf_in_inx = 0 ;
-+          atomic_set(&gdb_buf_in_cnt, 0) ;
-+          gdb_buf_out_inx = 0 ;
-+          break ;
-+      }
-+      gdb_buf[gdb_buf_in_inx++] = chr ;
-+      gdb_buf_in_inx &= (GDB_BUF_SIZE - 1) ;
-+      atomic_inc(&gdb_buf_in_cnt) ;
-+    }
-+
-+    return 1;
-+} /* gdb_interrupt */
-+
-+
-+int gdb_eth_hook(void)
-+{
-+    char gdb_netdev[16];
-+    extern void kgdb_respond_ok(void);
-+
-+    if (gdb_sendhwaddr[0] == 0xff)
-+      panic("ERROR! 'gdbeth_sendhwaddr' option not set!\n");
-+    if (gdb_receivehwaddr[0] == 0xff)
-+      panic("ERROR! 'gdbeth_receivehwaddr' option not set!\n");
-+    if (gdb_ethremote == 0)
-+      panic("ERROR! 'gdbeth_remote' option not set!\n");
-+
-+    sprintf(gdb_netdev,"eth%d",gdb_eth);
-+
-+#ifdef CONFIG_SMP
-+    if (num_online_cpus() > CONFIG_NO_KGDB_CPUS){ 
-+      printk("kgdb: too manu cpus. Cannot enable debugger with more than %d cpus\n", CONFIG_NO_KGDB_CPUS);
-+      return -1;
-+    }
-+#endif
-+    for (gdb_netdevice = dev_base;
-+       gdb_netdevice != NULL; 
-+       gdb_netdevice = gdb_netdevice->next){
-+      if (strncmp(gdb_netdevice->name, gdb_netdev, IFNAMSIZ) == 0)
-+          break;
-+    }
-+    if (!gdb_netdevice){
-+      printk("KGDB NET : Unable to find interface %s\n",gdb_netdev);
-+      return -ENODEV;
-+    }
-+
-+    /*
-+     * Call GDB routine to setup the exception vectors for the debugger
-+     */
-+    set_debug_traps() ;
-+
-+    /*
-+     * Call the breakpoint() routine in GDB to start the debugging
-+     * session.
-+     */
-+     if (gdb_eth_debug){
-+          printk(KERN_INFO "Waiting for remote gdb connection from %x on local port %d\n",
-+                 gdb_ethremote, gdb_listenport);
-+          printk(KERN_INFO "We are sending on port %d to %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
-+                 gdb_sendport,
-+                 gdb_sendhwaddr[0],
-+                 gdb_sendhwaddr[1],
-+                 gdb_sendhwaddr[2],
-+                 gdb_sendhwaddr[3],
-+                 gdb_sendhwaddr[4],
-+                 gdb_sendhwaddr[5]);
-+          printk("Connected.\n");
-+    }
-+    gdb_eth_is_initializing = 1;
-+    queue_work(irq_bp, &bpwork);
-+    return 0;
-+} /* gdb_hook_interrupt2 */
-+
-+/*
-+ * getDebugChar
-+ *
-+ * This is a GDB stub routine.  It waits for a character from the
-+ * serial interface and then returns it.  If there is no serial
-+ * interface connection then it returns a bogus value which will
-+ * almost certainly cause the system to hang.
-+ */
-+int eth_getDebugChar(void)
-+{
-+    volatile int      chr ;
-+
-+    while((chr = read_char()) < 0)
-+    {
-+      if (send_skb){
-+              gdb_eth_reply_arp();    
-+        }
-+      if (gdb_netdevice->kgdb_net_poll_rx)
-+          gdb_netdevice->kgdb_net_poll_rx(gdb_netdevice);
-+      else
-+        {
-+          printk("KGDB NET: Error - Device %s is not supported!\n",
-+                 gdb_netdevice->name);
-+          panic("Please add support for kgdb net to this driver");
-+        }
-+    }
-+    return chr;
-+
-+} /* eth_getDebugChar */
-+
-+#define ETH_QUEUE_SIZE 256
-+static char eth_queue[ETH_QUEUE_SIZE];
-+static int outgoing_queue;
-+
-+void eth_flushDebugChar(void)
-+{
-+    if(outgoing_queue) {
-+      write_buffer(eth_queue, outgoing_queue);
-+
-+      outgoing_queue = 0;
-+    }
-+}
-+
-+static void put_char_on_queue(int chr)
-+{
-+    eth_queue[outgoing_queue++] = chr;
-+    if(outgoing_queue == ETH_QUEUE_SIZE)
-+    {
-+      eth_flushDebugChar();
-+    }
-+}
-+
-+/*
-+ * eth_putDebugChar
-+ *
-+ * This is a GDB stub routine.  It waits until the interface is ready
-+ * to transmit a char and then sends it.
-+ */
-+void eth_putDebugChar(int chr)
-+{
-+    if (gdb_eth_debug)
-+      printk(KERN_INFO "eth_putDebugChar: chr=%02x '%c'\n", chr,
-+              chr > ' ' && chr < 0x7F ? chr : ' ') ;
-+    put_char_on_queue(chr) ;  /* this routine will wait */
-+} /* putDebugChar */
-+
-+void gdb_eth_set_trapmode(int mode)
-+{
-+    if (!gdb_netdevice)
-+      return;
-+    gdb_netdevice->kgdb_is_trapped = mode;
-+}
-+
-+int gdb_eth_is_trapped()
-+{
-+    if (!gdb_netdevice)
-+      return 0;
-+    return gdb_netdevice->kgdb_is_trapped;
-+}
-+
-+static int __init
-+kgdb_eth_init(void)
-+{
-+    irq_bp = create_workqueue("kgdb");
-+    return 0;
-+}
-+
-+module_init(kgdb_eth_init);
-Index: linux-2.6.0-test1/net/core/dev.c
-===================================================================
---- linux-2.6.0-test1.orig/net/core/dev.c      2003-09-02 14:29:27.000000000 +0800
-+++ linux-2.6.0-test1/net/core/dev.c   2003-09-02 14:32:03.000000000 +0800
-@@ -188,7 +188,9 @@
- extern int netdev_sysfs_init(void);
- extern int netdev_register_sysfs(struct net_device *);
- extern void netdev_unregister_sysfs(struct net_device *);
--
-+#ifdef CONFIG_KGDB
-+extern int gdb_net_interrupt(struct sk_buff *skb);
-+#endif
- /*******************************************************************************
-@@ -1349,6 +1351,21 @@
-       struct softnet_data *queue;
-       unsigned long flags;
-+#ifdef CONFIG_KGDB
-+      /* See if kgdb_eth wants this packet */
-+      if (!gdb_net_interrupt(skb)) {
-+              /* No.. if we're 'trapped' then junk it */
-+              if (gdb_eth_is_trapped()) {
-+                      kfree_skb(skb);
-+                      return NET_RX_DROP;
-+              }
-+      } else {
-+              /* kgdb_eth ate the packet... drop it silently */
-+              kfree_skb(skb);
-+              return NET_RX_DROP;
-+      }
-+#endif
-+
-       /*
-        * The code is rearranged so that the path is the most
diff --git a/lustre/kernel_patches/patches/kmem_cache_validate.patch b/lustre/kernel_patches/patches/kmem_cache_validate.patch
deleted file mode 100644 (file)
index 52880d8..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
- 0 files changed
-
---- linux-2.4.18-17.8.0/arch/i386/mm/init.c~kmem_cache_validate        2002-12-06 14:52:30.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/arch/i386/mm/init.c        2002-12-06 14:52:30.000000000 -0800
-@@ -43,6 +43,12 @@ unsigned long highstart_pfn, highend_pfn
- static unsigned long totalram_pages;
- static unsigned long totalhigh_pages;
-+struct page *check_get_page(unsigned long kaddr)
-+{
-+#warning FIXME: Lustre team, is this solid?
-+      return virt_to_page(kaddr);
-+}
-+
- int do_check_pgt_cache(int low, int high)
- {
-       int freed = 0;
---- linux-2.4.18-17.8.0/arch/ia64/mm/init.c~kmem_cache_validate        2002-12-06 14:52:30.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/arch/ia64/mm/init.c        2002-12-06 14:52:30.000000000 -0800
-@@ -37,6 +37,12 @@ unsigned long MAX_DMA_ADDRESS = PAGE_OFF
- static unsigned long totalram_pages;
-+struct page *check_get_page(unsigned long kaddr)
-+{
-+#warning FIXME: Lustre team, is this solid?
-+      return virt_to_page(kaddr);
-+}
-+
- int
- do_check_pgt_cache (int low, int high)
- {
---- linux-2.4.18-17.8.0/include/linux/slab.h~kmem_cache_validate       2002-12-06 14:52:30.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/include/linux/slab.h       2002-12-06 14:52:30.000000000 -0800
-@@ -57,6 +57,7 @@ extern int kmem_cache_destroy(kmem_cache
- extern int kmem_cache_shrink(kmem_cache_t *);
- extern void *kmem_cache_alloc(kmem_cache_t *, int);
- extern void kmem_cache_free(kmem_cache_t *, void *);
-+extern int kmem_cache_validate(kmem_cache_t *cachep, void *objp);
- extern void *kmalloc(size_t, int);
- extern void kfree(const void *);
---- linux-2.4.18-17.8.0/kernel/ksyms.c~kmem_cache_validate     2002-12-06 14:52:30.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/kernel/ksyms.c     2002-12-06 14:52:30.000000000 -0800
-@@ -119,6 +119,7 @@ EXPORT_SYMBOL(kmem_cache_destroy);
- EXPORT_SYMBOL(kmem_cache_shrink);
- EXPORT_SYMBOL(kmem_cache_alloc);
- EXPORT_SYMBOL(kmem_cache_free);
-+EXPORT_SYMBOL(kmem_cache_validate);
- EXPORT_SYMBOL(kmalloc);
- EXPORT_SYMBOL(kfree);
- EXPORT_SYMBOL(vfree);
---- linux-2.4.18-17.8.0/mm/slab.c~kmem_cache_validate  2002-12-06 14:52:30.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/mm/slab.c  2002-12-06 14:52:30.000000000 -0800
-@@ -1208,6 +1208,59 @@ failed:
-  * Called with the cache-lock held.
-  */
-+extern struct page *check_get_page(unsigned long kaddr);
-+struct page *page_mem_map(struct page *page);
-+static int kmem_check_cache_obj (kmem_cache_t * cachep,
-+                               slab_t *slabp, void * objp)
-+{
-+      int i;
-+      unsigned int objnr;
-+
-+#if DEBUG
-+      if (cachep->flags & SLAB_RED_ZONE) {
-+              objp -= BYTES_PER_WORD;
-+              if ( *(unsigned long *)objp != RED_MAGIC2)
-+                      /* Either write before start, or a double free. */
-+                      return 0;
-+              if (*(unsigned long *)(objp+cachep->objsize -
-+                              BYTES_PER_WORD) != RED_MAGIC2)
-+                      /* Either write past end, or a double free. */
-+                      return 0;
-+      }
-+#endif
-+
-+      objnr = (objp-slabp->s_mem)/cachep->objsize;
-+      if (objnr >= cachep->num)
-+              return 0;
-+      if (objp != slabp->s_mem + objnr*cachep->objsize)
-+              return 0;
-+
-+      /* Check slab's freelist to see if this obj is there. */
-+      for (i = slabp->free; i != BUFCTL_END; i = slab_bufctl(slabp)[i]) {
-+              if (i == objnr)
-+                      return 0;
-+      }
-+      return 1;
-+}
-+
-+
-+int kmem_cache_validate(kmem_cache_t *cachep, void *objp)
-+{
-+      struct page *page = check_get_page((unsigned long)objp);
-+
-+      if (!VALID_PAGE(page))
-+              return 0;
-+
-+      if (!PageSlab(page))
-+              return 0;
-+
-+      /* XXX check for freed slab objects ? */
-+      if (!kmem_check_cache_obj(cachep, GET_PAGE_SLAB(page), objp))
-+              return 0;
-+
-+      return (cachep == GET_PAGE_CACHE(page));
-+}
-+
- #if DEBUG
- static int kmem_extra_free_checks (kmem_cache_t * cachep,
-                       slab_t *slabp, void * objp)
-
-_
diff --git a/lustre/kernel_patches/patches/kmem_cache_validate_2.4.20-rh.patch b/lustre/kernel_patches/patches/kmem_cache_validate_2.4.20-rh.patch
deleted file mode 100644 (file)
index 8113828..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
- arch/i386/mm/init.c  |    6 +++++
- arch/ia64/mm/init.c  |    6 +++++
- include/linux/slab.h |    1 
- kernel/ksyms.c       |    1 
- mm/slab.c            |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++
- 5 files changed, 67 insertions(+)
-
---- rh-2.4.20/arch/i386/mm/init.c~kmem_cache_validate_2.4.20-rh        2003-04-11 14:05:09.000000000 +0800
-+++ rh-2.4.20-root/arch/i386/mm/init.c 2003-04-13 10:51:58.000000000 +0800
-@@ -43,6 +43,12 @@ unsigned long highstart_pfn, highend_pfn
- static unsigned long totalram_pages;
- static unsigned long totalhigh_pages;
-+struct page *check_get_page(unsigned long kaddr)
-+{
-+#warning FIXME: Lustre team, is this solid?
-+      return virt_to_page(kaddr);
-+}
-+
- int do_check_pgt_cache(int low, int high)
- {
-       return 0;       /* FIXME! */
---- rh-2.4.20/arch/ia64/mm/init.c~kmem_cache_validate_2.4.20-rh        2003-04-11 14:04:43.000000000 +0800
-+++ rh-2.4.20-root/arch/ia64/mm/init.c 2003-04-13 10:51:58.000000000 +0800
-@@ -45,6 +45,12 @@ unsigned long vmalloc_end = VMALLOC_END_
- static struct page *vmem_map;
- static unsigned long num_dma_physpages;
-+struct page *check_get_page(unsigned long kaddr)
-+{
-+#warning FIXME: Lustre team, is this solid?
-+      return virt_to_page(kaddr);
-+}
-+
- int
- do_check_pgt_cache (int low, int high)
- {
---- rh-2.4.20/include/linux/slab.h~kmem_cache_validate_2.4.20-rh       2003-04-12 15:46:39.000000000 +0800
-+++ rh-2.4.20-root/include/linux/slab.h        2003-04-13 10:53:00.000000000 +0800
-@@ -57,6 +57,7 @@ extern int kmem_cache_destroy(kmem_cache
- extern int kmem_cache_shrink(kmem_cache_t *);
- extern void *kmem_cache_alloc(kmem_cache_t *, int);
- extern void kmem_cache_free(kmem_cache_t *, void *);
-+extern int kmem_cache_validate(kmem_cache_t *cachep, void *objp);
- extern unsigned int kmem_cache_size(kmem_cache_t *);
- extern void *kmalloc(size_t, int);
---- rh-2.4.20/kernel/ksyms.c~kmem_cache_validate_2.4.20-rh     2003-04-12 16:15:26.000000000 +0800
-+++ rh-2.4.20-root/kernel/ksyms.c      2003-04-13 10:54:10.000000000 +0800
-@@ -123,6 +123,7 @@ EXPORT_SYMBOL(kmem_cache_destroy);
- EXPORT_SYMBOL(kmem_cache_shrink);
- EXPORT_SYMBOL(kmem_cache_alloc);
- EXPORT_SYMBOL(kmem_cache_free);
-+EXPORT_SYMBOL(kmem_cache_validate);
- EXPORT_SYMBOL(kmem_cache_size);
- EXPORT_SYMBOL(kmalloc);
- EXPORT_SYMBOL(kfree);
---- rh-2.4.20/mm/slab.c~kmem_cache_validate_2.4.20-rh  2003-04-11 14:04:56.000000000 +0800
-+++ rh-2.4.20-root/mm/slab.c   2003-04-13 10:51:58.000000000 +0800
-@@ -1208,6 +1208,59 @@ failed:
-  * Called with the cache-lock held.
-  */
-+extern struct page *check_get_page(unsigned long kaddr);
-+struct page *page_mem_map(struct page *page);
-+static int kmem_check_cache_obj (kmem_cache_t * cachep,
-+                               slab_t *slabp, void * objp)
-+{
-+      int i;
-+      unsigned int objnr;
-+
-+#if DEBUG
-+      if (cachep->flags & SLAB_RED_ZONE) {
-+              objp -= BYTES_PER_WORD;
-+              if ( *(unsigned long *)objp != RED_MAGIC2)
-+                      /* Either write before start, or a double free. */
-+                      return 0;
-+              if (*(unsigned long *)(objp+cachep->objsize -
-+                              BYTES_PER_WORD) != RED_MAGIC2)
-+                      /* Either write past end, or a double free. */
-+                      return 0;
-+      }
-+#endif
-+
-+      objnr = (objp-slabp->s_mem)/cachep->objsize;
-+      if (objnr >= cachep->num)
-+              return 0;
-+      if (objp != slabp->s_mem + objnr*cachep->objsize)
-+              return 0;
-+
-+      /* Check slab's freelist to see if this obj is there. */
-+      for (i = slabp->free; i != BUFCTL_END; i = slab_bufctl(slabp)[i]) {
-+              if (i == objnr)
-+                      return 0;
-+      }
-+      return 1;
-+}
-+
-+
-+int kmem_cache_validate(kmem_cache_t *cachep, void *objp)
-+{
-+      struct page *page = check_get_page((unsigned long)objp);
-+
-+      if (!VALID_PAGE(page))
-+              return 0;
-+
-+      if (!PageSlab(page))
-+              return 0;
-+
-+      /* XXX check for freed slab objects ? */
-+      if (!kmem_check_cache_obj(cachep, GET_PAGE_SLAB(page), objp))
-+              return 0;
-+
-+      return (cachep == GET_PAGE_CACHE(page));
-+}
-+
- #if DEBUG
- static int kmem_extra_free_checks (kmem_cache_t * cachep,
-                       slab_t *slabp, void * objp)
-
-_
diff --git a/lustre/kernel_patches/patches/kmem_cache_validate_2.4.20.patch b/lustre/kernel_patches/patches/kmem_cache_validate_2.4.20.patch
deleted file mode 100644 (file)
index e802312..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
- 0 files changed
-
---- linux-2.4.20-8/arch/ia64/mm/init.c~kmem_cache_validate_2.4.20      2002-11-29 07:53:09.000000000 +0800
-+++ linux-2.4.20-8-root/arch/ia64/mm/init.c    2003-06-01 01:44:13.000000000 +0800
-@@ -45,6 +45,12 @@ static struct page *vmem_map;
- static unsigned long num_dma_physpages;
- #endif
-+struct page *check_get_page(unsigned long kaddr)
-+{
-+#warning FIXME: Lustre team, is this solid?
-+      return virt_to_page(kaddr);
-+}
-+
- int
- do_check_pgt_cache (int low, int high)
- {
---- linux-2.4.20-8/include/linux/slab.h~kmem_cache_validate_2.4.20     2002-11-29 07:53:15.000000000 +0800
-+++ linux-2.4.20-8-root/include/linux/slab.h   2003-06-01 01:44:13.000000000 +0800
-@@ -56,6 +56,7 @@ extern kmem_cache_t *kmem_cache_create(c
- extern int kmem_cache_destroy(kmem_cache_t *);
- extern int kmem_cache_shrink(kmem_cache_t *);
- extern void *kmem_cache_alloc(kmem_cache_t *, int);
-+extern int kmem_cache_validate(kmem_cache_t *cachep, void *objp);
- extern void kmem_cache_free(kmem_cache_t *, void *);
- extern unsigned int kmem_cache_size(kmem_cache_t *);
---- linux-2.4.20-8/kernel/ksyms.c~kmem_cache_validate_2.4.20   2003-06-01 01:44:11.000000000 +0800
-+++ linux-2.4.20-8-root/kernel/ksyms.c 2003-06-01 01:44:13.000000000 +0800
-@@ -103,6 +103,7 @@ EXPORT_SYMBOL(kmem_find_general_cachep);
- EXPORT_SYMBOL(kmem_cache_create);
- EXPORT_SYMBOL(kmem_cache_destroy);
- EXPORT_SYMBOL(kmem_cache_shrink);
-+EXPORT_SYMBOL(kmem_cache_validate);
- EXPORT_SYMBOL(kmem_cache_alloc);
- EXPORT_SYMBOL(kmem_cache_free);
- EXPORT_SYMBOL(kmem_cache_size);
---- linux-2.4.20-8/mm/slab.c~kmem_cache_validate_2.4.20        2003-06-01 01:44:08.000000000 +0800
-+++ linux-2.4.20-8-root/mm/slab.c      2003-06-01 01:44:13.000000000 +0800
-@@ -1205,6 +1205,59 @@ failed:
-  * Called with the cache-lock held.
-  */
-+extern struct page *check_get_page(unsigned long kaddr);
-+struct page *page_mem_map(struct page *page);
-+static int kmem_check_cache_obj (kmem_cache_t * cachep,
-+                               slab_t *slabp, void * objp)
-+{
-+      int i;
-+      unsigned int objnr;
-+
-+#if DEBUG
-+      if (cachep->flags & SLAB_RED_ZONE) {
-+              objp -= BYTES_PER_WORD;
-+              if ( *(unsigned long *)objp != RED_MAGIC2)
-+                      /* Either write before start, or a double free. */
-+                      return 0;
-+              if (*(unsigned long *)(objp+cachep->objsize -
-+                              BYTES_PER_WORD) != RED_MAGIC2)
-+                      /* Either write past end, or a double free. */
-+                      return 0;
-+      }
-+#endif
-+
-+      objnr = (objp-slabp->s_mem)/cachep->objsize;
-+      if (objnr >= cachep->num)
-+              return 0;
-+      if (objp != slabp->s_mem + objnr*cachep->objsize)
-+              return 0;
-+
-+      /* Check slab's freelist to see if this obj is there. */
-+      for (i = slabp->free; i != BUFCTL_END; i = slab_bufctl(slabp)[i]) {
-+              if (i == objnr)
-+                      return 0;
-+      }
-+      return 1;
-+}
-+
-+
-+int kmem_cache_validate(kmem_cache_t *cachep, void *objp)
-+{
-+      struct page *page = check_get_page((unsigned long)objp);
-+
-+      if (!VALID_PAGE(page))
-+              return 0;
-+
-+      if (!PageSlab(page))
-+              return 0;
-+
-+      /* XXX check for freed slab objects ? */
-+      if (!kmem_check_cache_obj(cachep, GET_PAGE_SLAB(page), objp))
-+              return 0;
-+
-+      return (cachep == GET_PAGE_CACHE(page));
-+}
-+
- #if DEBUG
- static int kmem_extra_free_checks (kmem_cache_t * cachep,
-                       slab_t *slabp, void * objp)
---- linux-2.4.20-8/arch/i386/mm/init.c~kmem_cache_validate_2.4.20      2002-11-29 07:53:09.000000000 +0800
-+++ linux-2.4.20-8-root/arch/i386/mm/init.c    2003-06-01 01:46:43.000000000 +0800
-@@ -43,6 +43,12 @@ unsigned long highstart_pfn, highend_pfn
- static unsigned long totalram_pages;
- static unsigned long totalhigh_pages;
-+struct page *check_get_page(unsigned long kaddr)
-+{
-+#warning FIXME: Lustre team, is this solid?
-+              return virt_to_page(kaddr);
-+}
-+
- int do_check_pgt_cache(int low, int high)
- {
-       int freed = 0;
-
-_
diff --git a/lustre/kernel_patches/patches/kmem_cache_validate_hp.patch b/lustre/kernel_patches/patches/kmem_cache_validate_hp.patch
deleted file mode 100644 (file)
index aa5cfbb..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
- arch/i386/mm/init.c  |    6 +++++
- arch/ia64/mm/init.c  |    6 +++++
- include/linux/slab.h |    1 
- kernel/ksyms.c       |    1 
- mm/slab.c            |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++
- 5 files changed, 67 insertions(+)
-
---- linux/arch/ia64/mm/init.c~kmem_cache_validate_hp   2003-04-11 14:24:25.000000000 +0800
-+++ linux-root/arch/ia64/mm/init.c     2003-05-16 20:03:56.000000000 +0800
-@@ -45,6 +45,12 @@ unsigned long vmalloc_end = VMALLOC_END_
- static struct page *vmem_map;
- static unsigned long num_dma_physpages;
-+struct page *check_get_page(unsigned long kaddr)
-+{
-+#warning FIXME: Lustre team, is this solid?
-+      return virt_to_page(kaddr);
-+}
-+
- int
- do_check_pgt_cache (int low, int high)
- {
---- linux/include/linux/slab.h~kmem_cache_validate_hp  2002-11-29 07:53:15.000000000 +0800
-+++ linux-root/include/linux/slab.h    2003-05-16 20:03:56.000000000 +0800
-@@ -56,6 +56,7 @@ extern kmem_cache_t *kmem_cache_create(c
- extern int kmem_cache_destroy(kmem_cache_t *);
- extern int kmem_cache_shrink(kmem_cache_t *);
- extern void *kmem_cache_alloc(kmem_cache_t *, int);
-+extern int kmem_cache_validate(kmem_cache_t *cachep, void *objp);
- extern void kmem_cache_free(kmem_cache_t *, void *);
- extern unsigned int kmem_cache_size(kmem_cache_t *);
---- linux/kernel/ksyms.c~kmem_cache_validate_hp        2003-05-16 20:03:55.000000000 +0800
-+++ linux-root/kernel/ksyms.c  2003-05-16 20:03:56.000000000 +0800
-@@ -119,6 +119,7 @@ EXPORT_SYMBOL(kmem_find_general_cachep);
- EXPORT_SYMBOL(kmem_cache_create);
- EXPORT_SYMBOL(kmem_cache_destroy);
- EXPORT_SYMBOL(kmem_cache_shrink);
-+EXPORT_SYMBOL(kmem_cache_validate);
- EXPORT_SYMBOL(kmem_cache_alloc);
- EXPORT_SYMBOL(kmem_cache_free);
- EXPORT_SYMBOL(kmem_cache_size);
---- linux/mm/slab.c~kmem_cache_validate_hp     2002-11-29 07:53:15.000000000 +0800
-+++ linux-root/mm/slab.c       2003-05-16 20:03:56.000000000 +0800
-@@ -1205,6 +1205,59 @@ failed:
-  * Called with the cache-lock held.
-  */
-+extern struct page *check_get_page(unsigned long kaddr);
-+struct page *page_mem_map(struct page *page);
-+static int kmem_check_cache_obj (kmem_cache_t * cachep,
-+                               slab_t *slabp, void * objp)
-+{
-+      int i;
-+      unsigned int objnr;
-+
-+#if DEBUG
-+      if (cachep->flags & SLAB_RED_ZONE) {
-+              objp -= BYTES_PER_WORD;
-+              if ( *(unsigned long *)objp != RED_MAGIC2)
-+                      /* Either write before start, or a double free. */
-+                      return 0;
-+              if (*(unsigned long *)(objp+cachep->objsize -
-+                              BYTES_PER_WORD) != RED_MAGIC2)
-+                      /* Either write past end, or a double free. */
-+                      return 0;
-+      }
-+#endif
-+
-+      objnr = (objp-slabp->s_mem)/cachep->objsize;
-+      if (objnr >= cachep->num)
-+              return 0;
-+      if (objp != slabp->s_mem + objnr*cachep->objsize)
-+              return 0;
-+
-+      /* Check slab's freelist to see if this obj is there. */
-+      for (i = slabp->free; i != BUFCTL_END; i = slab_bufctl(slabp)[i]) {
-+              if (i == objnr)
-+                      return 0;
-+      }
-+      return 1;
-+}
-+
-+
-+int kmem_cache_validate(kmem_cache_t *cachep, void *objp)
-+{
-+      struct page *page = check_get_page((unsigned long)objp);
-+
-+      if (!VALID_PAGE(page))
-+              return 0;
-+
-+      if (!PageSlab(page))
-+              return 0;
-+
-+      /* XXX check for freed slab objects ? */
-+      if (!kmem_check_cache_obj(cachep, GET_PAGE_SLAB(page), objp))
-+              return 0;
-+
-+      return (cachep == GET_PAGE_CACHE(page));
-+}
-+
- #if DEBUG
- static int kmem_extra_free_checks (kmem_cache_t * cachep,
-                       slab_t *slabp, void * objp)
---- linux/arch/i386/mm/init.c~kmem_cache_validate_hp   2003-05-16 20:03:22.000000000 +0800
-+++ linux-root/arch/i386/mm/init.c     2003-05-16 20:06:16.000000000 +0800
-@@ -42,6 +42,12 @@ mmu_gather_t mmu_gathers[NR_CPUS];
- unsigned long highstart_pfn, highend_pfn;
- static unsigned long totalram_pages;
- static unsigned long totalhigh_pages;
-+
-+struct page *check_get_page(unsigned long kaddr)
-+{
-+#warning FIXME: Lustre team, is this solid?
-+      return virt_to_page(kaddr);
-+}
- int do_check_pgt_cache(int low, int high)
- {
-
-_
diff --git a/lustre/kernel_patches/patches/linux-2.4.18ea-0.8.26-2.patch b/lustre/kernel_patches/patches/linux-2.4.18ea-0.8.26-2.patch
deleted file mode 100644 (file)
index c7d06a8..0000000
+++ /dev/null
@@ -1,1775 +0,0 @@
- fs/ext3/Makefile           |    4 
- fs/ext3/ext3-exports.c     |   13 
- fs/ext3/ialloc.c           |    2 
- fs/ext3/inode.c            |   29 -
- fs/ext3/namei.c            |    8 
- fs/ext3/super.c            |   23 
- fs/ext3/xattr.c            | 1242 +++++++++++++++++++++++++++++++++++++++++++++
- include/linux/ext3_fs.h    |   46 -
- include/linux/ext3_jbd.h   |    8 
- include/linux/ext3_xattr.h |  155 +++++
- include/linux/xattr.h      |   15 
- 11 files changed, 1494 insertions(+), 51 deletions(-)
-
---- /dev/null  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.18-alexey/fs/ext3/ext3-exports.c 2003-09-01 14:55:39.000000000 +0400
-@@ -0,0 +1,13 @@
-+#include <linux/config.h>
-+#include <linux/module.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
-+
-+EXPORT_SYMBOL(ext3_force_commit);
-+EXPORT_SYMBOL(ext3_bread);
-+EXPORT_SYMBOL(ext3_xattr_register);
-+EXPORT_SYMBOL(ext3_xattr_unregister);
-+EXPORT_SYMBOL(ext3_xattr_get);
-+EXPORT_SYMBOL(ext3_xattr_list);
-+EXPORT_SYMBOL(ext3_xattr_set);
---- linux-2.4.18/fs/ext3/ialloc.c~linux-2.4.18ea-0.8.26-2      2003-07-28 17:52:04.000000000 +0400
-+++ linux-2.4.18-alexey/fs/ext3/ialloc.c       2003-09-01 14:55:39.000000000 +0400
-@@ -17,6 +17,7 @@
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/stat.h>
- #include <linux/string.h>
- #include <linux/locks.h>
-@@ -216,6 +217,7 @@ void ext3_free_inode (handle_t *handle, 
-        * as writing the quota to disk may need the lock as well.
-        */
-       DQUOT_INIT(inode);
-+      ext3_xattr_drop_inode(handle, inode);
-       DQUOT_FREE_INODE(inode);
-       DQUOT_DROP(inode);
---- linux-2.4.18/fs/ext3/inode.c~linux-2.4.18ea-0.8.26-2       2003-07-28 17:52:04.000000000 +0400
-+++ linux-2.4.18-alexey/fs/ext3/inode.c        2003-09-01 14:55:39.000000000 +0400
-@@ -39,6 +39,18 @@
-  */
- #undef SEARCH_FROM_ZERO
-+/*
-+ * Test whether an inode is a fast symlink.
-+ */
-+static inline int ext3_inode_is_fast_symlink(struct inode *inode)
-+{
-+      int ea_blocks = EXT3_I(inode)->i_file_acl ?
-+              (inode->i_sb->s_blocksize >> 9) : 0;
-+
-+      return (S_ISLNK(inode->i_mode) &&
-+              inode->i_blocks - ea_blocks == 0);
-+}
-+
- /* The ext3 forget function must perform a revoke if we are freeing data
-  * which has been journaled.  Metadata (eg. indirect blocks) must be
-  * revoked in all cases. 
-@@ -48,7 +60,7 @@
-  * still needs to be revoked.
-  */
--static int ext3_forget(handle_t *handle, int is_metadata,
-+int ext3_forget(handle_t *handle, int is_metadata,
-                      struct inode *inode, struct buffer_head *bh,
-                      int blocknr)
- {
-@@ -164,9 +176,7 @@ void ext3_delete_inode (struct inode * i
- {
-       handle_t *handle;
-       
--      if (is_bad_inode(inode) ||
--          inode->i_ino == EXT3_ACL_IDX_INO ||
--          inode->i_ino == EXT3_ACL_DATA_INO)
-+      if (is_bad_inode(inode))
-               goto no_delete;
-       lock_kernel();
-@@ -1877,6 +1887,8 @@ void ext3_truncate(struct inode * inode)
-       if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
-           S_ISLNK(inode->i_mode)))
-               return;
-+      if (ext3_inode_is_fast_symlink(inode))
-+              return;
-       if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
-               return;
-@@ -2038,8 +2050,6 @@ int ext3_get_inode_loc (struct inode *in
-       struct ext3_group_desc * gdp;
-               
-       if ((inode->i_ino != EXT3_ROOT_INO &&
--              inode->i_ino != EXT3_ACL_IDX_INO &&
--              inode->i_ino != EXT3_ACL_DATA_INO &&
-               inode->i_ino != EXT3_JOURNAL_INO &&
-               inode->i_ino < EXT3_FIRST_INO(inode->i_sb)) ||
-               inode->i_ino > le32_to_cpu(
-@@ -2166,10 +2176,7 @@ void ext3_read_inode(struct inode * inod
-       brelse (iloc.bh);
--      if (inode->i_ino == EXT3_ACL_IDX_INO ||
--          inode->i_ino == EXT3_ACL_DATA_INO)
--              /* Nothing to do */ ;
--      else if (S_ISREG(inode->i_mode)) {
-+      if (S_ISREG(inode->i_mode)) {
-               inode->i_op = &ext3_file_inode_operations;
-               inode->i_fop = &ext3_file_operations;
-               inode->i_mapping->a_ops = &ext3_aops;
-@@ -2177,7 +2184,7 @@ void ext3_read_inode(struct inode * inod
-               inode->i_op = &ext3_dir_inode_operations;
-               inode->i_fop = &ext3_dir_operations;
-       } else if (S_ISLNK(inode->i_mode)) {
--              if (!inode->i_blocks)
-+              if (ext3_inode_is_fast_symlink(inode))
-                       inode->i_op = &ext3_fast_symlink_inode_operations;
-               else {
-                       inode->i_op = &page_symlink_inode_operations;
---- linux-2.4.18/fs/ext3/Makefile~linux-2.4.18ea-0.8.26-2      2003-08-29 16:53:17.000000000 +0400
-+++ linux-2.4.18-alexey/fs/ext3/Makefile       2003-09-01 14:55:50.000000000 +0400
-@@ -9,10 +9,10 @@
- O_TARGET := ext3.o
--export-objs :=        super.o inode.o
-+export-objs :=        ext3-exports.o
- obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
--              ioctl.o namei.o super.o symlink.o hash.o
-+              ioctl.o namei.o super.o symlink.o xattr.o hash.o ext3-exports.o
- obj-m    := $(O_TARGET)
- include $(TOPDIR)/Rules.make
---- linux-2.4.18/fs/ext3/namei.c~linux-2.4.18ea-0.8.26-2       2003-09-01 11:50:59.000000000 +0400
-+++ linux-2.4.18-alexey/fs/ext3/namei.c        2003-09-01 14:55:39.000000000 +0400
-@@ -29,6 +29,7 @@
- #include <linux/sched.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/fcntl.h>
- #include <linux/stat.h>
- #include <linux/string.h>
-@@ -1524,6 +1525,7 @@ static int ext3_add_nondir(handle_t *han
-               d_instantiate(dentry, inode);
-               return 0;
-       }
-+      ext3_xattr_drop_inode(handle, inode);
-       ext3_dec_count(handle, inode);
-       iput(inode);
-       return err;
-@@ -1612,7 +1614,7 @@ static int ext3_mkdir(struct inode * dir
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
--      inode = ext3_new_inode (handle, dir, S_IFDIR);
-+      inode = ext3_new_inode (handle, dir, S_IFDIR | mode);
-       err = PTR_ERR(inode);
-       if (IS_ERR(inode))
-               goto out_stop;
-@@ -1620,7 +1622,6 @@ static int ext3_mkdir(struct inode * dir
-       inode->i_op = &ext3_dir_inode_operations;
-       inode->i_fop = &ext3_dir_operations;
-       inode->i_size = EXT3_I(inode)->i_disksize = inode->i_sb->s_blocksize;
--      inode->i_blocks = 0;    
-       dir_block = ext3_bread (handle, inode, 0, 1, &err);
-       if (!dir_block) {
-               inode->i_nlink--; /* is this nlink == 0? */
-@@ -1647,9 +1648,6 @@ static int ext3_mkdir(struct inode * dir
-       BUFFER_TRACE(dir_block, "call ext3_journal_dirty_metadata");
-       ext3_journal_dirty_metadata(handle, dir_block);
-       brelse (dir_block);
--      inode->i_mode = S_IFDIR | mode;
--      if (dir->i_mode & S_ISGID)
--              inode->i_mode |= S_ISGID;
-       ext3_mark_inode_dirty(handle, inode);
-       err = ext3_add_entry (handle, dentry, inode);
-       if (err) {
---- linux-2.4.18/fs/ext3/super.c~linux-2.4.18ea-0.8.26-2       2003-08-29 16:53:17.000000000 +0400
-+++ linux-2.4.18-alexey/fs/ext3/super.c        2003-09-01 14:55:39.000000000 +0400
-@@ -24,6 +24,7 @@
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/slab.h>
- #include <linux/init.h>
- #include <linux/locks.h>
-@@ -406,6 +407,7 @@ void ext3_put_super (struct super_block 
-       kdev_t j_dev = sbi->s_journal->j_dev;
-       int i;
-+      ext3_xattr_put_super(sb);
-       journal_destroy(sbi->s_journal);
-       if (!(sb->s_flags & MS_RDONLY)) {
-               EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
-@@ -1743,18 +1745,27 @@ int ext3_statfs (struct super_block * sb
- static DECLARE_FSTYPE_DEV(ext3_fs_type, "ext3", ext3_read_super);
--static int __init init_ext3_fs(void)
-+static void exit_ext3_fs(void)
- {
--        return register_filesystem(&ext3_fs_type);
-+      unregister_filesystem(&ext3_fs_type);
-+      exit_ext3_xattr_user();
-+      exit_ext3_xattr();
- }
--static void __exit exit_ext3_fs(void)
-+static int __init init_ext3_fs(void)
- {
--      unregister_filesystem(&ext3_fs_type);
-+      int error = init_ext3_xattr();
-+      if (!error)
-+              error = init_ext3_xattr_user();
-+      if (!error)
-+              error = register_filesystem(&ext3_fs_type);
-+      if (!error)
-+              return 0;
-+
-+      exit_ext3_fs();
-+      return error;
- }
--EXPORT_SYMBOL(ext3_force_commit);
--EXPORT_SYMBOL(ext3_bread);
- MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
- MODULE_DESCRIPTION("Second Extended Filesystem with journaling extensions");
---- /dev/null  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.18-alexey/fs/ext3/xattr.c        2003-09-01 14:55:39.000000000 +0400
-@@ -0,0 +1,1242 @@
-+/*
-+ * linux/fs/ext3/xattr.c
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ *
-+ * Fix by Harrison Xing <harrison@mountainviewdata.com>.
-+ * Ext3 code with a lot of help from Eric Jarman <ejarman@acm.org>.
-+ * Extended attributes for symlinks and special files added per
-+ *  suggestion of Luka Renko <luka.renko@hermes.si>.
-+ */
-+
-+/*
-+ * Extended attributes are stored on disk blocks allocated outside of
-+ * any inode. The i_file_acl field is then made to point to this allocated
-+ * block. If all extended attributes of an inode are identical, these
-+ * inodes may share the same extended attribute block. Such situations
-+ * are automatically detected by keeping a cache of recent attribute block
-+ * numbers and hashes over the block's contents in memory.
-+ *
-+ *
-+ * Extended attribute block layout:
-+ *
-+ *   +------------------+
-+ *   | header           |
-+ *   Â¦ entry 1          | |
-+ *   | entry 2          | | growing downwards
-+ *   | entry 3          | v
-+ *   | four null bytes  |
-+ *   | . . .            |
-+ *   | value 1          | ^
-+ *   | value 3          | | growing upwards
-+ *   | value 2          | |
-+ *   +------------------+
-+ *
-+ * The block header is followed by multiple entry descriptors. These entry
-+ * descriptors are variable in size, and alligned to EXT3_XATTR_PAD
-+ * byte boundaries. The entry descriptors are sorted by attribute name,
-+ * so that two extended attribute blocks can be compared efficiently.
-+ *
-+ * Attribute values are aligned to the end of the block, stored in
-+ * no specific order. They are also padded to EXT3_XATTR_PAD byte
-+ * boundaries. No additional gaps are left between them.
-+ *
-+ * Locking strategy
-+ * ----------------
-+ * The VFS already holds the BKL and the inode->i_sem semaphore when any of
-+ * the xattr inode operations are called, so we are guaranteed that only one
-+ * processes accesses extended attributes of an inode at any time.
-+ *
-+ * For writing we also grab the ext3_xattr_sem semaphore. This ensures that
-+ * only a single process is modifying an extended attribute block, even
-+ * if the block is shared among inodes.
-+ *
-+ * Note for porting to 2.5
-+ * -----------------------
-+ * The BKL will no longer be held in the xattr inode operations.
-+ */
-+
-+#include <linux/fs.h>
-+#include <linux/locks.h>
-+#include <linux/slab.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+#include <linux/mbcache.h>
-+#endif
-+#include <linux/quotaops.h>
-+#include <asm/semaphore.h>
-+#include <linux/compatmac.h>
-+#include <linux/module.h>
-+
-+/* These symbols may be needed by a module. */
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+# define mark_buffer_dirty(bh) mark_buffer_dirty(bh, 1)
-+#endif
-+
-+#define HDR(bh) ((struct ext3_xattr_header *)((bh)->b_data))
-+#define ENTRY(ptr) ((struct ext3_xattr_entry *)(ptr))
-+#define FIRST_ENTRY(bh) ENTRY(HDR(bh)+1)
-+#define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
-+
-+#ifdef EXT3_XATTR_DEBUG
-+# define ea_idebug(inode, f...) do { \
-+              printk(KERN_DEBUG "inode %s:%ld: ", \
-+                      kdevname(inode->i_dev), inode->i_ino); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+# define ea_bdebug(bh, f...) do { \
-+              printk(KERN_DEBUG "block %s:%ld: ", \
-+                      kdevname(bh->b_dev), bh->b_blocknr); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+#else
-+# define ea_idebug(f...)
-+# define ea_bdebug(f...)
-+#endif
-+
-+static int ext3_xattr_set2(handle_t *, struct inode *, struct buffer_head *,
-+                         struct ext3_xattr_header *);
-+
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+
-+static int ext3_xattr_cache_insert(struct buffer_head *);
-+static struct buffer_head *ext3_xattr_cache_find(struct inode *,
-+                                               struct ext3_xattr_header *);
-+static void ext3_xattr_cache_remove(struct buffer_head *);
-+static void ext3_xattr_rehash(struct ext3_xattr_header *,
-+                            struct ext3_xattr_entry *);
-+
-+static struct mb_cache *ext3_xattr_cache;
-+
-+#else
-+# define ext3_xattr_cache_insert(bh) 0
-+# define ext3_xattr_cache_find(inode, header) NULL
-+# define ext3_xattr_cache_remove(bh) do {} while(0)
-+# define ext3_xattr_rehash(header, entry) do {} while(0)
-+#endif
-+
-+/*
-+ * If a file system does not share extended attributes among inodes,
-+ * we should not need the ext3_xattr_sem semaphore. However, the
-+ * filesystem may still contain shared blocks, so we always take
-+ * the lock.
-+ */
-+
-+DECLARE_MUTEX(ext3_xattr_sem);
-+
-+static inline void
-+ext3_xattr_lock(void)
-+{
-+      down(&ext3_xattr_sem);
-+}
-+
-+static inline void
-+ext3_xattr_unlock(void)
-+{
-+      up(&ext3_xattr_sem);
-+}
-+
-+static inline int
-+ext3_xattr_new_block(handle_t *handle, struct inode *inode,
-+                   int * errp, int force)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      int goal = le32_to_cpu(EXT3_SB(sb)->s_es->s_first_data_block) +
-+              EXT3_I(inode)->i_block_group * EXT3_BLOCKS_PER_GROUP(sb);
-+
-+      /* How can we enforce the allocation? */
-+      int block = ext3_new_block(handle, inode, goal, 0, 0, errp);
-+#ifdef OLD_QUOTAS
-+      if (!*errp)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#endif
-+      return block;
-+}
-+
-+static inline int
-+ext3_xattr_quota_alloc(struct inode *inode, int force)
-+{
-+      /* How can we enforce the allocation? */
-+#ifdef OLD_QUOTAS
-+      int error = DQUOT_ALLOC_BLOCK(inode->i_sb, inode, 1);
-+      if (!error)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#else
-+      int error = DQUOT_ALLOC_BLOCK(inode, 1);
-+#endif
-+      return error;
-+}
-+
-+#ifdef OLD_QUOTAS
-+
-+static inline void
-+ext3_xattr_quota_free(struct inode *inode)
-+{
-+      DQUOT_FREE_BLOCK(inode->i_sb, inode, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+static inline void
-+ext3_xattr_free_block(handle_t *handle, struct inode * inode,
-+                    unsigned long block)
-+{
-+      ext3_free_blocks(handle, inode, block, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+#else
-+# define ext3_xattr_quota_free(inode) \
-+      DQUOT_FREE_BLOCK(inode, 1)
-+# define ext3_xattr_free_block(handle, inode, block) \
-+      ext3_free_blocks(handle, inode, block, 1)
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
-+
-+static inline struct buffer_head *
-+sb_bread(struct super_block *sb, int block)
-+{
-+      return bread(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+static inline struct buffer_head *
-+sb_getblk(struct super_block *sb, int block)
-+{
-+      return getblk(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+#endif
-+
-+struct ext3_xattr_handler *ext3_xattr_handlers[EXT3_XATTR_INDEX_MAX];
-+rwlock_t ext3_handler_lock = RW_LOCK_UNLOCKED;
-+
-+int
-+ext3_xattr_register(int name_index, struct ext3_xattr_handler *handler)
-+{
-+      int error = -EINVAL;
-+
-+      if (name_index > 0 && name_index <= EXT3_XATTR_INDEX_MAX) {
-+              write_lock(&ext3_handler_lock);
-+              if (!ext3_xattr_handlers[name_index-1]) {
-+                      ext3_xattr_handlers[name_index-1] = handler;
-+                      error = 0;
-+              }
-+              write_unlock(&ext3_handler_lock);
-+      }
-+      return error;
-+}
-+
-+void
-+ext3_xattr_unregister(int name_index, struct ext3_xattr_handler *handler)
-+{
-+      if (name_index > 0 || name_index <= EXT3_XATTR_INDEX_MAX) {
-+              write_lock(&ext3_handler_lock);
-+              ext3_xattr_handlers[name_index-1] = NULL;
-+              write_unlock(&ext3_handler_lock);
-+      }
-+}
-+
-+static inline const char *
-+strcmp_prefix(const char *a, const char *a_prefix)
-+{
-+      while (*a_prefix && *a == *a_prefix) {
-+              a++;
-+              a_prefix++;
-+      }
-+      return *a_prefix ? NULL : a;
-+}
-+
-+/*
-+ * Decode the extended attribute name, and translate it into
-+ * the name_index and name suffix.
-+ */
-+static inline struct ext3_xattr_handler *
-+ext3_xattr_resolve_name(const char **name)
-+{
-+      struct ext3_xattr_handler *handler = NULL;
-+      int i;
-+
-+      if (!*name)
-+              return NULL;
-+      read_lock(&ext3_handler_lock);
-+      for (i=0; i<EXT3_XATTR_INDEX_MAX; i++) {
-+              if (ext3_xattr_handlers[i]) {
-+                      const char *n = strcmp_prefix(*name,
-+                              ext3_xattr_handlers[i]->prefix);
-+                      if (n) {
-+                              handler = ext3_xattr_handlers[i];
-+                              *name = n;
-+                              break;
-+                      }
-+              }
-+      }
-+      read_unlock(&ext3_handler_lock);
-+      return handler;
-+}
-+
-+static inline struct ext3_xattr_handler *
-+ext3_xattr_handler(int name_index)
-+{
-+      struct ext3_xattr_handler *handler = NULL;
-+      if (name_index > 0 && name_index <= EXT3_XATTR_INDEX_MAX) {
-+              read_lock(&ext3_handler_lock);
-+              handler = ext3_xattr_handlers[name_index-1];
-+              read_unlock(&ext3_handler_lock);
-+      }
-+      return handler;
-+}
-+
-+/*
-+ * Inode operation getxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext3_getxattr(struct dentry *dentry, const char *name,
-+            void *buffer, size_t size)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->get(inode, name, buffer, size);
-+}
-+
-+/*
-+ * Inode operation listxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext3_listxattr(struct dentry *dentry, char *buffer, size_t size)
-+{
-+      return ext3_xattr_list(dentry->d_inode, buffer, size);
-+}
-+
-+/*
-+ * Inode operation setxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext3_setxattr(struct dentry *dentry, const char *name,
-+            void *value, size_t size, int flags)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      if (size == 0)
-+              value = "";  /* empty EA, do not remove */
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, value, size, flags);
-+}
-+
-+/*
-+ * Inode operation removexattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext3_removexattr(struct dentry *dentry, const char *name)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, NULL, 0, XATTR_REPLACE);
-+}
-+
-+/*
-+ * ext3_xattr_get()
-+ *
-+ * Copy an extended attribute into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext3_xattr_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_entry *entry;
-+      unsigned int block, size;
-+      char *end;
-+      int name_len, error;
-+
-+      ea_idebug(inode, "name=%d.%s, buffer=%p, buffer_size=%ld",
-+                name_index, name, buffer, (long)buffer_size);
-+
-+      if (name == NULL)
-+              return -EINVAL;
-+      if (!EXT3_I(inode)->i_file_acl)
-+              return -ENOATTR;
-+      block = EXT3_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext3_error(inode->i_sb, "ext3_xattr_get",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* find named attribute */
-+      name_len = strlen(name);
-+
-+      error = -ERANGE;
-+      if (name_len > 255)
-+              goto cleanup;
-+      entry = FIRST_ENTRY(bh);
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              if (name_index == entry->e_name_index &&
-+                  name_len == entry->e_name_len &&
-+                  memcmp(name, entry->e_name, name_len) == 0)
-+                      goto found;
-+              entry = next;
-+      }
-+      /* Check the remaining name entries */
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              entry = next;
-+      }
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      error = -ENOATTR;
-+      goto cleanup;
-+found:
-+      /* check the buffer size */
-+      if (entry->e_value_block != 0)
-+              goto bad_block;
-+      size = le32_to_cpu(entry->e_value_size);
-+      if (size > inode->i_sb->s_blocksize ||
-+          le16_to_cpu(entry->e_value_offs) + size > inode->i_sb->s_blocksize)
-+              goto bad_block;
-+
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (buffer) {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+              /* return value of attribute */
-+              memcpy(buffer, bh->b_data + le16_to_cpu(entry->e_value_offs),
-+                      size);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_list()
-+ *
-+ * Copy a list of attribute names into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext3_xattr_list(struct inode *inode, char *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_entry *entry;
-+      unsigned int block, size = 0;
-+      char *buf, *end;
-+      int error;
-+
-+      ea_idebug(inode, "buffer=%p, buffer_size=%ld",
-+                buffer, (long)buffer_size);
-+
-+      if (!EXT3_I(inode)->i_file_acl)
-+              return 0;
-+      block = EXT3_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext3_error(inode->i_sb, "ext3_xattr_list",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* compute the size required for the list of attribute names */
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT3_XATTR_NEXT(entry)) {
-+              struct ext3_xattr_handler *handler;
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+
-+              handler = ext3_xattr_handler(entry->e_name_index);
-+              if (handler) {
-+                      size += handler->list(NULL, inode, entry->e_name,
-+                                            entry->e_name_len) + 1;
-+              }
-+      }
-+
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (!buffer) {
-+              error = size;
-+              goto cleanup;
-+      } else {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+      }
-+
-+      /* list the attribute names */
-+      buf = buffer;
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT3_XATTR_NEXT(entry)) {
-+              struct ext3_xattr_handler *handler;
-+
-+              handler = ext3_xattr_handler(entry->e_name_index);
-+              if (handler) {
-+                      buf += handler->list(buf, inode, entry->e_name,
-+                                           entry->e_name_len);
-+                      *buf++ = '\0';
-+              }
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * If the EXT3_FEATURE_COMPAT_EXT_ATTR feature of this file system is
-+ * not set, set it.
-+ */
-+static void ext3_xattr_update_super_block(handle_t *handle,
-+                                        struct super_block *sb)
-+{
-+      if (EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_EXT_ATTR))
-+              return;
-+
-+      lock_super(sb);
-+      ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+      EXT3_SB(sb)->s_feature_compat |= EXT3_FEATURE_COMPAT_EXT_ATTR;
-+#endif
-+      EXT3_SB(sb)->s_es->s_feature_compat |=
-+              cpu_to_le32(EXT3_FEATURE_COMPAT_EXT_ATTR);
-+      sb->s_dirt = 1;
-+      ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-+      unlock_super(sb);
-+}
-+
-+/*
-+ * ext3_xattr_set()
-+ *
-+ * Create, replace or remove an extended attribute for this inode. Buffer
-+ * is NULL to remove an existing extended attribute, and non-NULL to
-+ * either replace an existing extended attribute, or create a new extended
-+ * attribute. The flags XATTR_REPLACE and XATTR_CREATE
-+ * specify that an extended attribute must exist and must not exist
-+ * previous to the call, respectively.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+int
-+ext3_xattr_set(handle_t *handle, struct inode *inode, int name_index,
-+             const char *name, void *value, size_t value_len, int flags)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_header *header = NULL;
-+      struct ext3_xattr_entry *here, *last;
-+      unsigned int name_len;
-+      int min_offs = sb->s_blocksize, not_found = 1, free, error;
-+      char *end;
-+      
-+      /*
-+       * header -- Points either into bh, or to a temporarily
-+       *           allocated buffer.
-+       * here -- The named entry found, or the place for inserting, within
-+       *         the block pointed to by header.
-+       * last -- Points right after the last named entry within the block
-+       *         pointed to by header.
-+       * min_offs -- The offset of the first value (values are aligned
-+       *             towards the end of the block).
-+       * end -- Points right after the block pointed to by header.
-+       */
-+      
-+      ea_idebug(inode, "name=%d.%s, value=%p, value_len=%ld",
-+                name_index, name, value, (long)value_len);
-+
-+      if (IS_RDONLY(inode))
-+              return -EROFS;
-+      if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
-+              return -EPERM;
-+      if (value == NULL)
-+              value_len = 0;
-+      if (name == NULL)
-+              return -EINVAL;
-+      name_len = strlen(name);
-+      if (name_len > 255 || value_len > sb->s_blocksize)
-+              return -ERANGE;
-+      ext3_xattr_lock();
-+
-+      if (EXT3_I(inode)->i_file_acl) {
-+              /* The inode already has an extended attribute block. */
-+              int block = EXT3_I(inode)->i_file_acl;
-+
-+              bh = sb_bread(sb, block);
-+              error = -EIO;
-+              if (!bh)
-+                      goto cleanup;
-+              ea_bdebug(bh, "b_count=%d, refcount=%d",
-+                      atomic_read(&(bh->b_count)),
-+                      le32_to_cpu(HDR(bh)->h_refcount));
-+              header = HDR(bh);
-+              end = bh->b_data + bh->b_size;
-+              if (header->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+                  header->h_blocks != cpu_to_le32(1)) {
-+bad_block:            ext3_error(sb, "ext3_xattr_set",
-+                              "inode %ld: bad block %d", inode->i_ino, block);
-+                      error = -EIO;
-+                      goto cleanup;
-+              }
-+              /* Find the named attribute. */
-+              here = FIRST_ENTRY(bh);
-+              while (!IS_LAST_ENTRY(here)) {
-+                      struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(here);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!here->e_value_block && here->e_value_size) {
-+                              int offs = le16_to_cpu(here->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      not_found = name_index - here->e_name_index;
-+                      if (!not_found)
-+                              not_found = name_len - here->e_name_len;
-+                      if (!not_found)
-+                              not_found = memcmp(name, here->e_name,name_len);
-+                      if (not_found <= 0)
-+                              break;
-+                      here = next;
-+              }
-+              last = here;
-+              /* We still need to compute min_offs and last. */
-+              while (!IS_LAST_ENTRY(last)) {
-+                      struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(last);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!last->e_value_block && last->e_value_size) {
-+                              int offs = le16_to_cpu(last->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      last = next;
-+              }
-+
-+              /* Check whether we have enough space left. */
-+              free = min_offs - ((char*)last - (char*)header) - sizeof(__u32);
-+      } else {
-+              /* We will use a new extended attribute block. */
-+              free = sb->s_blocksize -
-+                      sizeof(struct ext3_xattr_header) - sizeof(__u32);
-+              here = last = NULL;  /* avoid gcc uninitialized warning. */
-+      }
-+
-+      if (not_found) {
-+              /* Request to remove a nonexistent attribute? */
-+              error = -ENOATTR;
-+              if (flags & XATTR_REPLACE)
-+                      goto cleanup;
-+              error = 0;
-+              if (value == NULL)
-+                      goto cleanup;
-+              else
-+                      free -= EXT3_XATTR_LEN(name_len);
-+      } else {
-+              /* Request to create an existing attribute? */
-+              error = -EEXIST;
-+              if (flags & XATTR_CREATE)
-+                      goto cleanup;
-+              if (!here->e_value_block && here->e_value_size) {
-+                      unsigned int size = le32_to_cpu(here->e_value_size);
-+
-+                      if (le16_to_cpu(here->e_value_offs) + size > 
-+                          sb->s_blocksize || size > sb->s_blocksize)
-+                              goto bad_block;
-+                      free += EXT3_XATTR_SIZE(size);
-+              }
-+      }
-+      free -= EXT3_XATTR_SIZE(value_len);
-+      error = -ENOSPC;
-+      if (free < 0)
-+              goto cleanup;
-+
-+      /* Here we know that we can set the new attribute. */
-+
-+      if (header) {
-+              if (header->h_refcount == cpu_to_le32(1)) {
-+                      ea_bdebug(bh, "modifying in-place");
-+                      ext3_xattr_cache_remove(bh);
-+                      error = ext3_journal_get_write_access(handle, bh);
-+                      if (error)
-+                              goto cleanup;
-+              } else {
-+                      int offset;
-+
-+                      ea_bdebug(bh, "cloning");
-+                      header = kmalloc(bh->b_size, GFP_KERNEL);
-+                      error = -ENOMEM;
-+                      if (header == NULL)
-+                              goto cleanup;
-+                      memcpy(header, HDR(bh), bh->b_size);
-+                      header->h_refcount = cpu_to_le32(1);
-+                      offset = (char *)header - bh->b_data;
-+                      here = ENTRY((char *)here + offset);
-+                      last = ENTRY((char *)last + offset);
-+              }
-+      } else {
-+              /* Allocate a buffer where we construct the new block. */
-+              header = kmalloc(sb->s_blocksize, GFP_KERNEL);
-+              error = -ENOMEM;
-+              if (header == NULL)
-+                      goto cleanup;
-+              memset(header, 0, sb->s_blocksize);
-+              end = (char *)header + sb->s_blocksize;
-+              header->h_magic = cpu_to_le32(EXT3_XATTR_MAGIC);
-+              header->h_blocks = header->h_refcount = cpu_to_le32(1);
-+              last = here = ENTRY(header+1);
-+      }
-+
-+      if (not_found) {
-+              /* Insert the new name. */
-+              int size = EXT3_XATTR_LEN(name_len);
-+              int rest = (char *)last - (char *)here;
-+              memmove((char *)here + size, here, rest);
-+              memset(here, 0, size);
-+              here->e_name_index = name_index;
-+              here->e_name_len = name_len;
-+              memcpy(here->e_name, name, name_len);
-+      } else {
-+              /* Remove the old value. */
-+              if (!here->e_value_block && here->e_value_size) {
-+                      char *first_val = (char *)header + min_offs;
-+                      int offs = le16_to_cpu(here->e_value_offs);
-+                      char *val = (char *)header + offs;
-+                      size_t size = EXT3_XATTR_SIZE(
-+                              le32_to_cpu(here->e_value_size));
-+                      memmove(first_val + size, first_val, val - first_val);
-+                      memset(first_val, 0, size);
-+                      here->e_value_offs = 0;
-+                      min_offs += size;
-+
-+                      /* Adjust all value offsets. */
-+                      last = ENTRY(header+1);
-+                      while (!IS_LAST_ENTRY(last)) {
-+                              int o = le16_to_cpu(last->e_value_offs);
-+                              if (!last->e_value_block && o < offs)
-+                                      last->e_value_offs =
-+                                              cpu_to_le16(o + size);
-+                              last = EXT3_XATTR_NEXT(last);
-+                      }
-+              }
-+              if (value == NULL) {
-+                      /* Remove this attribute. */
-+                      if (EXT3_XATTR_NEXT(ENTRY(header+1)) == last) {
-+                              /* This block is now empty. */
-+                              error = ext3_xattr_set2(handle, inode, bh,NULL);
-+                              goto cleanup;
-+                      } else {
-+                              /* Remove the old name. */
-+                              int size = EXT3_XATTR_LEN(name_len);
-+                              last = ENTRY((char *)last - size);
-+                              memmove(here, (char*)here + size,
-+                                      (char*)last - (char*)here);
-+                              memset(last, 0, size);
-+                      }
-+              }
-+      }
-+
-+      if (value != NULL) {
-+              /* Insert the new value. */
-+              here->e_value_size = cpu_to_le32(value_len);
-+              if (value_len) {
-+                      size_t size = EXT3_XATTR_SIZE(value_len);
-+                      char *val = (char *)header + min_offs - size;
-+                      here->e_value_offs =
-+                              cpu_to_le16((char *)val - (char *)header);
-+                      memset(val + size - EXT3_XATTR_PAD, 0,
-+                             EXT3_XATTR_PAD); /* Clear the pad bytes. */
-+                      memcpy(val, value, value_len);
-+              }
-+      }
-+      ext3_xattr_rehash(header, here);
-+
-+      error = ext3_xattr_set2(handle, inode, bh, header);
-+
-+cleanup:
-+      brelse(bh);
-+      if (!(bh && header == HDR(bh)))
-+              kfree(header);
-+      ext3_xattr_unlock();
-+
-+      return error;
-+}
-+
-+/*
-+ * Second half of ext3_xattr_set(): Update the file system.
-+ */
-+static int
-+ext3_xattr_set2(handle_t *handle, struct inode *inode,
-+              struct buffer_head *old_bh, struct ext3_xattr_header *header)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *new_bh = NULL;
-+      int error;
-+
-+      if (header) {
-+              new_bh = ext3_xattr_cache_find(inode, header);
-+              if (new_bh) {
-+                      /*
-+                       * We found an identical block in the cache.
-+                       * The old block will be released after updating
-+                       * the inode.
-+                       */
-+                      ea_bdebug(old_bh, "reusing block %ld",
-+                              new_bh->b_blocknr);
-+                      
-+                      error = -EDQUOT;
-+                      if (ext3_xattr_quota_alloc(inode, 1))
-+                              goto cleanup;
-+                      
-+                      error = ext3_journal_get_write_access(handle, new_bh);
-+                      if (error)
-+                              goto cleanup;
-+                      HDR(new_bh)->h_refcount = cpu_to_le32(
-+                              le32_to_cpu(HDR(new_bh)->h_refcount) + 1);
-+                      ea_bdebug(new_bh, "refcount now=%d",
-+                              le32_to_cpu(HDR(new_bh)->h_refcount));
-+              } else if (old_bh && header == HDR(old_bh)) {
-+                      /* Keep this block. */
-+                      new_bh = old_bh;
-+                      (void)ext3_xattr_cache_insert(new_bh);
-+              } else {
-+                      /* We need to allocate a new block */
-+                      int force = EXT3_I(inode)->i_file_acl != 0;
-+                      int block = ext3_xattr_new_block(handle, inode,
-+                                                       &error, force);
-+                      if (error)
-+                              goto cleanup;
-+                      ea_idebug(inode, "creating block %d", block);
-+
-+                      new_bh = sb_getblk(sb, block);
-+                      if (!new_bh) {
-+getblk_failed:                        ext3_xattr_free_block(handle, inode, block);
-+                              error = -EIO;
-+                              goto cleanup;
-+                      }
-+                      lock_buffer(new_bh);
-+                      error = ext3_journal_get_create_access(handle, new_bh);
-+                      if (error) {
-+                              unlock_buffer(new_bh);
-+                              goto getblk_failed;
-+                      }
-+                      memcpy(new_bh->b_data, header, new_bh->b_size);
-+                      mark_buffer_uptodate(new_bh, 1);
-+                      unlock_buffer(new_bh);
-+                      (void)ext3_xattr_cache_insert(new_bh);
-+                      ext3_xattr_update_super_block(handle, sb);
-+              }
-+              error = ext3_journal_dirty_metadata(handle, new_bh);
-+              if (error)
-+                      goto cleanup;
-+      }
-+
-+      /* Update the inode. */
-+      EXT3_I(inode)->i_file_acl = new_bh ? new_bh->b_blocknr : 0;
-+      inode->i_ctime = CURRENT_TIME;
-+      ext3_mark_inode_dirty(handle, inode);
-+      if (IS_SYNC(inode))
-+              handle->h_sync = 1;
-+
-+      error = 0;
-+      if (old_bh && old_bh != new_bh) {
-+              /*
-+               * If there was an old block, and we are not still using it,
-+               * we now release the old block.
-+              */
-+              unsigned int refcount = le32_to_cpu(HDR(old_bh)->h_refcount);
-+
-+              error = ext3_journal_get_write_access(handle, old_bh);
-+              if (error)
-+                      goto cleanup;
-+              if (refcount == 1) {
-+                      /* Free the old block. */
-+                      ea_bdebug(old_bh, "freeing");
-+                      ext3_xattr_free_block(handle, inode, old_bh->b_blocknr);
-+
-+                      /* ext3_forget() calls bforget() for us, but we
-+                         let our caller release old_bh, so we need to
-+                         duplicate the handle before. */
-+                      get_bh(old_bh);
-+                      ext3_forget(handle, 1, inode, old_bh,old_bh->b_blocknr);
-+              } else {
-+                      /* Decrement the refcount only. */
-+                      refcount--;
-+                      HDR(old_bh)->h_refcount = cpu_to_le32(refcount);
-+                      ext3_xattr_quota_free(inode);
-+                      ext3_journal_dirty_metadata(handle, old_bh);
-+                      ea_bdebug(old_bh, "refcount now=%d", refcount);
-+              }
-+      }
-+
-+cleanup:
-+      if (old_bh != new_bh)
-+              brelse(new_bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_drop_inode()
-+ *
-+ * Free extended attribute resources associated with this inode. This
-+ * is called immediately before an inode is freed.
-+ */
-+void
-+ext3_xattr_drop_inode(handle_t *handle, struct inode *inode)
-+{
-+      struct buffer_head *bh;
-+      unsigned int block = EXT3_I(inode)->i_file_acl;
-+
-+      if (!block)
-+              return;
-+      ext3_xattr_lock();
-+
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh) {
-+              ext3_error(inode->i_sb, "ext3_xattr_drop_inode",
-+                      "inode %ld: block %d read error", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ea_bdebug(bh, "b_count=%d", atomic_read(&(bh->b_count)));
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+              ext3_error(inode->i_sb, "ext3_xattr_drop_inode",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ext3_journal_get_write_access(handle, bh);
-+      ea_bdebug(bh, "refcount now=%d", le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+      if (HDR(bh)->h_refcount == cpu_to_le32(1)) {
-+              ext3_xattr_cache_remove(bh);
-+              ext3_xattr_free_block(handle, inode, block);
-+              ext3_forget(handle, 1, inode, bh, block);
-+              bh = NULL;
-+      } else {
-+              HDR(bh)->h_refcount = cpu_to_le32(
-+                      le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+              ext3_journal_dirty_metadata(handle, bh);
-+              if (IS_SYNC(inode))
-+                      handle->h_sync = 1;
-+              ext3_xattr_quota_free(inode);
-+      }
-+      EXT3_I(inode)->i_file_acl = 0;
-+
-+cleanup:
-+      brelse(bh);
-+      ext3_xattr_unlock();
-+}
-+
-+/*
-+ * ext3_xattr_put_super()
-+ *
-+ * This is called when a file system is unmounted.
-+ */
-+void
-+ext3_xattr_put_super(struct super_block *sb)
-+{
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+      mb_cache_shrink(ext3_xattr_cache, sb->s_dev);
-+#endif
-+}
-+
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+
-+/*
-+ * ext3_xattr_cache_insert()
-+ *
-+ * Create a new entry in the extended attribute cache, and insert
-+ * it unless such an entry is already in the cache.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+static int
-+ext3_xattr_cache_insert(struct buffer_head *bh)
-+{
-+      __u32 hash = le32_to_cpu(HDR(bh)->h_hash);
-+      struct mb_cache_entry *ce;
-+      int error;
-+
-+      ce = mb_cache_entry_alloc(ext3_xattr_cache);
-+      if (!ce)
-+              return -ENOMEM;
-+      error = mb_cache_entry_insert(ce, bh->b_dev, bh->b_blocknr, &hash);
-+      if (error) {
-+              mb_cache_entry_free(ce);
-+              if (error == -EBUSY) {
-+                      ea_bdebug(bh, "already in cache (%d cache entries)",
-+                              atomic_read(&ext3_xattr_cache->c_entry_count));
-+                      error = 0;
-+              }
-+      } else {
-+              ea_bdebug(bh, "inserting [%x] (%d cache entries)", (int)hash,
-+                        atomic_read(&ext3_xattr_cache->c_entry_count));
-+              mb_cache_entry_release(ce);
-+      }
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_cmp()
-+ *
-+ * Compare two extended attribute blocks for equality.
-+ *
-+ * Returns 0 if the blocks are equal, 1 if they differ, and
-+ * a negative error number on errors.
-+ */
-+static int
-+ext3_xattr_cmp(struct ext3_xattr_header *header1,
-+             struct ext3_xattr_header *header2)
-+{
-+      struct ext3_xattr_entry *entry1, *entry2;
-+
-+      entry1 = ENTRY(header1+1);
-+      entry2 = ENTRY(header2+1);
-+      while (!IS_LAST_ENTRY(entry1)) {
-+              if (IS_LAST_ENTRY(entry2))
-+                      return 1;
-+              if (entry1->e_hash != entry2->e_hash ||
-+                  entry1->e_name_len != entry2->e_name_len ||
-+                  entry1->e_value_size != entry2->e_value_size ||
-+                  memcmp(entry1->e_name, entry2->e_name, entry1->e_name_len))
-+                      return 1;
-+              if (entry1->e_value_block != 0 || entry2->e_value_block != 0)
-+                      return -EIO;
-+              if (memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
-+                         (char *)header2 + le16_to_cpu(entry2->e_value_offs),
-+                         le32_to_cpu(entry1->e_value_size)))
-+                      return 1;
-+
-+              entry1 = EXT3_XATTR_NEXT(entry1);
-+              entry2 = EXT3_XATTR_NEXT(entry2);
-+      }
-+      if (!IS_LAST_ENTRY(entry2))
-+              return 1;
-+      return 0;
-+}
-+
-+/*
-+ * ext3_xattr_cache_find()
-+ *
-+ * Find an identical extended attribute block.
-+ *
-+ * Returns a pointer to the block found, or NULL if such a block was
-+ * not found or an error occurred.
-+ */
-+static struct buffer_head *
-+ext3_xattr_cache_find(struct inode *inode, struct ext3_xattr_header *header)
-+{
-+      __u32 hash = le32_to_cpu(header->h_hash);
-+      struct mb_cache_entry *ce;
-+
-+      if (!header->h_hash)
-+              return NULL;  /* never share */
-+      ea_idebug(inode, "looking for cached blocks [%x]", (int)hash);
-+      ce = mb_cache_entry_find_first(ext3_xattr_cache, 0, inode->i_dev, hash);
-+      while (ce) {
-+              struct buffer_head *bh = sb_bread(inode->i_sb, ce->e_block);
-+
-+              if (!bh) {
-+                      ext3_error(inode->i_sb, "ext3_xattr_cache_find",
-+                              "inode %ld: block %ld read error",
-+                              inode->i_ino, ce->e_block);
-+              } else if (le32_to_cpu(HDR(bh)->h_refcount) >
-+                         EXT3_XATTR_REFCOUNT_MAX) {
-+                      ea_idebug(inode, "block %ld refcount %d>%d",ce->e_block,
-+                              le32_to_cpu(HDR(bh)->h_refcount),
-+                              EXT3_XATTR_REFCOUNT_MAX);
-+              } else if (!ext3_xattr_cmp(header, HDR(bh))) {
-+                      ea_bdebug(bh, "b_count=%d",atomic_read(&(bh->b_count)));
-+                      mb_cache_entry_release(ce);
-+                      return bh;
-+              }
-+              brelse(bh);
-+              ce = mb_cache_entry_find_next(ce, 0, inode->i_dev, hash);
-+      }
-+      return NULL;
-+}
-+
-+/*
-+ * ext3_xattr_cache_remove()
-+ *
-+ * Remove the cache entry of a block from the cache. Called when a
-+ * block becomes invalid.
-+ */
-+static void
-+ext3_xattr_cache_remove(struct buffer_head *bh)
-+{
-+      struct mb_cache_entry *ce;
-+
-+      ce = mb_cache_entry_get(ext3_xattr_cache, bh->b_dev, bh->b_blocknr);
-+      if (ce) {
-+              ea_bdebug(bh, "removing (%d cache entries remaining)",
-+                        atomic_read(&ext3_xattr_cache->c_entry_count)-1);
-+              mb_cache_entry_free(ce);
-+      } else 
-+              ea_bdebug(bh, "no cache entry");
-+}
-+
-+#define NAME_HASH_SHIFT 5
-+#define VALUE_HASH_SHIFT 16
-+
-+/*
-+ * ext3_xattr_hash_entry()
-+ *
-+ * Compute the hash of an extended attribute.
-+ */
-+static inline void ext3_xattr_hash_entry(struct ext3_xattr_header *header,
-+                                       struct ext3_xattr_entry *entry)
-+{
-+      __u32 hash = 0;
-+      char *name = entry->e_name;
-+      int n;
-+
-+      for (n=0; n < entry->e_name_len; n++) {
-+              hash = (hash << NAME_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - NAME_HASH_SHIFT)) ^
-+                     *name++;
-+      }
-+
-+      if (entry->e_value_block == 0 && entry->e_value_size != 0) {
-+              __u32 *value = (__u32 *)((char *)header +
-+                      le16_to_cpu(entry->e_value_offs));
-+              for (n = (le32_to_cpu(entry->e_value_size) +
-+                   EXT3_XATTR_ROUND) >> EXT3_XATTR_PAD_BITS; n; n--) {
-+                      hash = (hash << VALUE_HASH_SHIFT) ^
-+                             (hash >> (8*sizeof(hash) - VALUE_HASH_SHIFT)) ^
-+                             le32_to_cpu(*value++);
-+              }
-+      }
-+      entry->e_hash = cpu_to_le32(hash);
-+}
-+
-+#undef NAME_HASH_SHIFT
-+#undef VALUE_HASH_SHIFT
-+
-+#define BLOCK_HASH_SHIFT 16
-+
-+/*
-+ * ext3_xattr_rehash()
-+ *
-+ * Re-compute the extended attribute hash value after an entry has changed.
-+ */
-+static void ext3_xattr_rehash(struct ext3_xattr_header *header,
-+                            struct ext3_xattr_entry *entry)
-+{
-+      struct ext3_xattr_entry *here;
-+      __u32 hash = 0;
-+      
-+      ext3_xattr_hash_entry(header, entry);
-+      here = ENTRY(header+1);
-+      while (!IS_LAST_ENTRY(here)) {
-+              if (!here->e_hash) {
-+                      /* Block is not shared if an entry's hash value == 0 */
-+                      hash = 0;
-+                      break;
-+              }
-+              hash = (hash << BLOCK_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - BLOCK_HASH_SHIFT)) ^
-+                     le32_to_cpu(here->e_hash);
-+              here = EXT3_XATTR_NEXT(here);
-+      }
-+      header->h_hash = cpu_to_le32(hash);
-+}
-+
-+#undef BLOCK_HASH_SHIFT
-+
-+int __init
-+init_ext3_xattr(void)
-+{
-+      ext3_xattr_cache = mb_cache_create("ext3_xattr", NULL,
-+              sizeof(struct mb_cache_entry) +
-+              sizeof(struct mb_cache_entry_index), 1, 61);
-+      if (!ext3_xattr_cache)
-+              return -ENOMEM;
-+
-+      return 0;
-+}
-+
-+void
-+exit_ext3_xattr(void)
-+{
-+      if (ext3_xattr_cache)
-+              mb_cache_destroy(ext3_xattr_cache);
-+      ext3_xattr_cache = NULL;
-+}
-+
-+#else  /* CONFIG_EXT3_FS_XATTR_SHARING */
-+
-+int __init
-+init_ext3_xattr(void)
-+{
-+      return 0;
-+}
-+
-+void
-+exit_ext3_xattr(void)
-+{
-+}
-+
-+#endif  /* CONFIG_EXT3_FS_XATTR_SHARING */
---- linux-2.4.18/include/linux/ext3_fs.h~linux-2.4.18ea-0.8.26-2       2003-09-01 11:51:00.000000000 +0400
-+++ linux-2.4.18-alexey/include/linux/ext3_fs.h        2003-09-01 14:55:39.000000000 +0400
-@@ -63,8 +63,6 @@
-  */
- #define       EXT3_BAD_INO             1      /* Bad blocks inode */
- #define EXT3_ROOT_INO          2      /* Root inode */
--#define EXT3_ACL_IDX_INO       3      /* ACL inode */
--#define EXT3_ACL_DATA_INO      4      /* ACL inode */
- #define EXT3_BOOT_LOADER_INO   5      /* Boot loader inode */
- #define EXT3_UNDEL_DIR_INO     6      /* Undelete directory inode */
- #define EXT3_RESIZE_INO                7      /* Reserved group descriptors inode */
-@@ -94,7 +92,6 @@
- #else
- # define EXT3_BLOCK_SIZE(s)           (EXT3_MIN_BLOCK_SIZE << (s)->s_log_block_size)
- #endif
--#define EXT3_ACLE_PER_BLOCK(s)                (EXT3_BLOCK_SIZE(s) / sizeof (struct ext3_acl_entry))
- #define       EXT3_ADDR_PER_BLOCK(s)          (EXT3_BLOCK_SIZE(s) / sizeof (__u32))
- #ifdef __KERNEL__
- # define EXT3_BLOCK_SIZE_BITS(s)      ((s)->s_blocksize_bits)
-@@ -129,28 +126,6 @@
- #endif
- /*
-- * ACL structures
-- */
--struct ext3_acl_header        /* Header of Access Control Lists */
--{
--      __u32   aclh_size;
--      __u32   aclh_file_count;
--      __u32   aclh_acle_count;
--      __u32   aclh_first_acle;
--};
--
--struct ext3_acl_entry /* Access Control List Entry */
--{
--      __u32   acle_size;
--      __u16   acle_perms;     /* Access permissions */
--      __u16   acle_type;      /* Type of entry */
--      __u16   acle_tag;       /* User or group identity */
--      __u16   acle_pad1;
--      __u32   acle_next;      /* Pointer on next entry for the */
--                                      /* same inode or on next free entry */
--};
--
--/*
-  * Structure of a blocks group descriptor
-  */
- struct ext3_group_desc
-@@ -521,7 +496,7 @@ struct ext3_super_block {
- #define EXT3_FEATURE_INCOMPAT_RECOVER         0x0004 /* Needs recovery */
- #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008 /* Journal device */
--#define EXT3_FEATURE_COMPAT_SUPP      0
-+#define EXT3_FEATURE_COMPAT_SUPP      EXT3_FEATURE_COMPAT_EXT_ATTR
- #define EXT3_FEATURE_INCOMPAT_SUPP    (EXT3_FEATURE_INCOMPAT_FILETYPE| \
-                                        EXT3_FEATURE_INCOMPAT_RECOVER)
- #define EXT3_FEATURE_RO_COMPAT_SUPP   (EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-@@ -623,6 +598,24 @@ struct dx_hash_info
- #define HASH_NB_ALWAYS                1
-+/* Defined for extended attributes */
-+#define CONFIG_EXT3_FS_XATTR y
-+#ifndef ENOATTR
-+#define ENOATTR ENODATA               /* No such attribute */
-+#endif
-+#ifndef ENOTSUP
-+#define ENOTSUP EOPNOTSUPP    /* Operation not supported */
-+#endif
-+#ifndef XATTR_NAME_MAX
-+#define XATTR_NAME_MAX   255  /* # chars in an extended attribute name */
-+#define XATTR_SIZE_MAX 65536  /* size of an extended attribute value (64k) */
-+#define XATTR_LIST_MAX 65536  /* size of extended attribute namelist (64k) */
-+#endif
-+#ifndef XATTR_CREATE
-+#define XATTR_CREATE  1       /* set value, fail if attr already exists */
-+#define XATTR_REPLACE 2       /* set value, fail if attr does not exist */
-+#endif
-+
- /*
-  * Describe an inode's exact location on disk and in memory
-  */
-@@ -704,6 +697,7 @@ extern void ext3_check_inodes_bitmap (st
- extern unsigned long ext3_count_free (struct buffer_head *, unsigned);
- /* inode.c */
-+extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
- extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
- extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
---- linux-2.4.18/include/linux/ext3_jbd.h~linux-2.4.18ea-0.8.26-2      2003-08-29 16:53:17.000000000 +0400
-+++ linux-2.4.18-alexey/include/linux/ext3_jbd.h       2003-09-01 14:55:39.000000000 +0400
-@@ -30,13 +30,19 @@
- #define EXT3_SINGLEDATA_TRANS_BLOCKS  8
-+/* Extended attributes may touch two data buffers, two bitmap buffers,
-+ * and two group and summaries. */
-+
-+#define EXT3_XATTR_TRANS_BLOCKS               8
-+
- /* Define the minimum size for a transaction which modifies data.  This
-  * needs to take into account the fact that we may end up modifying two
-  * quota files too (one for the group, one for the user quota).  The
-  * superblock only gets updated once, of course, so don't bother
-  * counting that again for the quota updates. */
--#define EXT3_DATA_TRANS_BLOCKS                (3 * EXT3_SINGLEDATA_TRANS_BLOCKS - 2)
-+#define EXT3_DATA_TRANS_BLOCKS                (3 * EXT3_SINGLEDATA_TRANS_BLOCKS + \
-+                                       EXT3_XATTR_TRANS_BLOCKS - 2)
- extern int ext3_writepage_trans_blocks(struct inode *inode);
---- /dev/null  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.18-alexey/include/linux/ext3_xattr.h     2003-09-01 14:55:39.000000000 +0400
-@@ -0,0 +1,155 @@
-+/*
-+  File: linux/ext3_xattr.h
-+
-+  On-disk format of extended attributes for the ext3 filesystem.
-+
-+  (C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+*/
-+
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/xattr.h>
-+
-+/* Magic value in attribute blocks */
-+#define EXT3_XATTR_MAGIC              0xEA020000
-+
-+/* Maximum number of references to one attribute block */
-+#define EXT3_XATTR_REFCOUNT_MAX               1024
-+
-+/* Name indexes */
-+#define EXT3_XATTR_INDEX_MAX                  10
-+#define EXT3_XATTR_INDEX_USER                 1
-+
-+struct ext3_xattr_header {
-+      __u32   h_magic;        /* magic number for identification */
-+      __u32   h_refcount;     /* reference count */
-+      __u32   h_blocks;       /* number of disk blocks used */
-+      __u32   h_hash;         /* hash value of all attributes */
-+      __u32   h_reserved[4];  /* zero right now */
-+};
-+
-+struct ext3_xattr_entry {
-+      __u8    e_name_len;     /* length of name */
-+      __u8    e_name_index;   /* attribute name index */
-+      __u16   e_value_offs;   /* offset in disk block of value */
-+      __u32   e_value_block;  /* disk block attribute is stored on (n/i) */
-+      __u32   e_value_size;   /* size of attribute value */
-+      __u32   e_hash;         /* hash value of name and value */
-+      char    e_name[0];      /* attribute name */
-+};
-+
-+#define EXT3_XATTR_PAD_BITS           2
-+#define EXT3_XATTR_PAD                (1<<EXT3_XATTR_PAD_BITS)
-+#define EXT3_XATTR_ROUND              (EXT3_XATTR_PAD-1)
-+#define EXT3_XATTR_LEN(name_len) \
-+      (((name_len) + EXT3_XATTR_ROUND + \
-+      sizeof(struct ext3_xattr_entry)) & ~EXT3_XATTR_ROUND)
-+#define EXT3_XATTR_NEXT(entry) \
-+      ( (struct ext3_xattr_entry *)( \
-+        (char *)(entry) + EXT3_XATTR_LEN((entry)->e_name_len)) )
-+#define EXT3_XATTR_SIZE(size) \
-+      (((size) + EXT3_XATTR_ROUND) & ~EXT3_XATTR_ROUND)
-+
-+#ifdef __KERNEL__
-+
-+# ifdef CONFIG_EXT3_FS_XATTR
-+
-+struct ext3_xattr_handler {
-+      char *prefix;
-+      size_t (*list)(char *list, struct inode *inode, const char *name,
-+                     int name_len);
-+      int (*get)(struct inode *inode, const char *name, void *buffer,
-+                 size_t size);
-+      int (*set)(struct inode *inode, const char *name, void *buffer,
-+                 size_t size, int flags);
-+};
-+
-+extern int ext3_xattr_register(int, struct ext3_xattr_handler *);
-+extern void ext3_xattr_unregister(int, struct ext3_xattr_handler *);
-+
-+extern int ext3_setxattr(struct dentry *, const char *, void *, size_t, int);
-+extern ssize_t ext3_getxattr(struct dentry *, const char *, void *, size_t);
-+extern ssize_t ext3_listxattr(struct dentry *, char *, size_t);
-+extern int ext3_removexattr(struct dentry *, const char *);
-+
-+extern int ext3_xattr_get(struct inode *, int, const char *, void *, size_t);
-+extern int ext3_xattr_list(struct inode *, char *, size_t);
-+extern int ext3_xattr_set(handle_t *handle, struct inode *, int, const char *, void *, size_t, int);
-+
-+extern void ext3_xattr_drop_inode(handle_t *, struct inode *);
-+extern void ext3_xattr_put_super(struct super_block *);
-+
-+extern int init_ext3_xattr(void) __init;
-+extern void exit_ext3_xattr(void);
-+
-+# else  /* CONFIG_EXT3_FS_XATTR */
-+#  define ext3_setxattr               NULL
-+#  define ext3_getxattr               NULL
-+#  define ext3_listxattr      NULL
-+#  define ext3_removexattr    NULL
-+
-+static inline int
-+ext3_xattr_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t size, int flags)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext3_xattr_list(struct inode *inode, void *buffer, size_t size, int flags)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext3_xattr_set(handle_t *handle, struct inode *inode, int name_index,
-+             const char *name, void *value, size_t size, int flags)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline void
-+ext3_xattr_drop_inode(handle_t *handle, struct inode *inode)
-+{
-+}
-+
-+static inline void
-+ext3_xattr_put_super(struct super_block *sb)
-+{
-+}
-+
-+static inline int
-+init_ext3_xattr(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext3_xattr(void)
-+{
-+}
-+
-+# endif  /* CONFIG_EXT3_FS_XATTR */
-+
-+# ifdef CONFIG_EXT3_FS_XATTR_USER
-+
-+extern int init_ext3_xattr_user(void) __init;
-+extern void exit_ext3_xattr_user(void);
-+
-+# else  /* CONFIG_EXT3_FS_XATTR_USER */
-+
-+static inline int
-+init_ext3_xattr_user(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext3_xattr_user(void)
-+{
-+}
-+
-+#endif  /* CONFIG_EXT3_FS_XATTR_USER */
-+
-+#endif  /* __KERNEL__ */
-+
---- /dev/null  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.18-alexey/include/linux/xattr.h  2003-09-01 14:55:39.000000000 +0400
-@@ -0,0 +1,15 @@
-+/*
-+  File: linux/xattr.h
-+
-+  Extended attributes handling.
-+
-+  Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org>
-+  Copyright (C) 2001 SGI - Silicon Graphics, Inc <linux-xfs@oss.sgi.com>
-+*/
-+#ifndef _LINUX_XATTR_H
-+#define _LINUX_XATTR_H
-+
-+#define XATTR_CREATE  1       /* set value, fail if attr already exists */
-+#define XATTR_REPLACE 2       /* set value, fail if attr does not exist */
-+
-+#endif        /* _LINUX_XATTR_H */
-
-_
diff --git a/lustre/kernel_patches/patches/linux-2.4.18ea-0.8.26.patch b/lustre/kernel_patches/patches/linux-2.4.18ea-0.8.26.patch
deleted file mode 100644 (file)
index 15f1b2a..0000000
+++ /dev/null
@@ -1,1784 +0,0 @@
- fs/ext3/Makefile           |    4 
- fs/ext3/ext3-exports.c     |   13 
- fs/ext3/ialloc.c           |    2 
- fs/ext3/inode.c            |   29 -
- fs/ext3/namei.c            |   12 
- fs/ext3/super.c            |   22 
- fs/ext3/xattr.c            | 1242 +++++++++++++++++++++++++++++++++++++++++++++
- include/linux/ext3_fs.h    |   46 -
- include/linux/ext3_jbd.h   |    8 
- include/linux/ext3_xattr.h |  155 +++++
- include/linux/xattr.h      |   15 
- 11 files changed, 1496 insertions(+), 52 deletions(-)
-
---- linux-2.4.18-p4smp/fs/ext3/ialloc.c~linux-2.4.18ea-0.8.26  2003-07-20 17:12:43.000000000 -0600
-+++ linux-2.4.18-p4smp-braam/fs/ext3/ialloc.c  2003-07-21 22:49:05.000000000 -0600
-@@ -17,6 +17,7 @@
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/stat.h>
- #include <linux/string.h>
- #include <linux/locks.h>
-@@ -216,6 +217,7 @@ void ext3_free_inode (handle_t *handle, 
-        * as writing the quota to disk may need the lock as well.
-        */
-       DQUOT_INIT(inode);
-+      ext3_xattr_drop_inode(handle, inode);
-       DQUOT_FREE_INODE(inode);
-       DQUOT_DROP(inode);
---- linux-2.4.18-p4smp/fs/ext3/inode.c~linux-2.4.18ea-0.8.26   2003-07-20 17:12:43.000000000 -0600
-+++ linux-2.4.18-p4smp-braam/fs/ext3/inode.c   2003-07-21 22:49:05.000000000 -0600
-@@ -39,6 +39,18 @@
-  */
- #undef SEARCH_FROM_ZERO
-+/*
-+ * Test whether an inode is a fast symlink.
-+ */
-+static inline int ext3_inode_is_fast_symlink(struct inode *inode)
-+{
-+      int ea_blocks = EXT3_I(inode)->i_file_acl ?
-+              (inode->i_sb->s_blocksize >> 9) : 0;
-+
-+      return (S_ISLNK(inode->i_mode) &&
-+              inode->i_blocks - ea_blocks == 0);
-+}
-+
- /* The ext3 forget function must perform a revoke if we are freeing data
-  * which has been journaled.  Metadata (eg. indirect blocks) must be
-  * revoked in all cases. 
-@@ -48,7 +60,7 @@
-  * still needs to be revoked.
-  */
--static int ext3_forget(handle_t *handle, int is_metadata,
-+int ext3_forget(handle_t *handle, int is_metadata,
-                      struct inode *inode, struct buffer_head *bh,
-                      int blocknr)
- {
-@@ -164,9 +176,7 @@ void ext3_delete_inode (struct inode * i
- {
-       handle_t *handle;
-       
--      if (is_bad_inode(inode) ||
--          inode->i_ino == EXT3_ACL_IDX_INO ||
--          inode->i_ino == EXT3_ACL_DATA_INO)
-+      if (is_bad_inode(inode))
-               goto no_delete;
-       lock_kernel();
-@@ -1877,6 +1887,8 @@ void ext3_truncate(struct inode * inode)
-       if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
-           S_ISLNK(inode->i_mode)))
-               return;
-+      if (ext3_inode_is_fast_symlink(inode))
-+              return;
-       if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
-               return;
-@@ -2038,8 +2050,6 @@ int ext3_get_inode_loc (struct inode *in
-       struct ext3_group_desc * gdp;
-               
-       if ((inode->i_ino != EXT3_ROOT_INO &&
--              inode->i_ino != EXT3_ACL_IDX_INO &&
--              inode->i_ino != EXT3_ACL_DATA_INO &&
-               inode->i_ino != EXT3_JOURNAL_INO &&
-               inode->i_ino < EXT3_FIRST_INO(inode->i_sb)) ||
-               inode->i_ino > le32_to_cpu(
-@@ -2166,10 +2176,7 @@ void ext3_read_inode(struct inode * inod
-       brelse (iloc.bh);
--      if (inode->i_ino == EXT3_ACL_IDX_INO ||
--          inode->i_ino == EXT3_ACL_DATA_INO)
--              /* Nothing to do */ ;
--      else if (S_ISREG(inode->i_mode)) {
-+      if (S_ISREG(inode->i_mode)) {
-               inode->i_op = &ext3_file_inode_operations;
-               inode->i_fop = &ext3_file_operations;
-               inode->i_mapping->a_ops = &ext3_aops;
-@@ -2177,7 +2184,7 @@ void ext3_read_inode(struct inode * inod
-               inode->i_op = &ext3_dir_inode_operations;
-               inode->i_fop = &ext3_dir_operations;
-       } else if (S_ISLNK(inode->i_mode)) {
--              if (!inode->i_blocks)
-+              if (ext3_inode_is_fast_symlink(inode))
-                       inode->i_op = &ext3_fast_symlink_inode_operations;
-               else {
-                       inode->i_op = &page_symlink_inode_operations;
---- linux-2.4.18-p4smp/fs/ext3/namei.c~linux-2.4.18ea-0.8.26   2003-07-21 22:29:27.000000000 -0600
-+++ linux-2.4.18-p4smp-braam/fs/ext3/namei.c   2003-07-21 22:49:05.000000000 -0600
-@@ -27,6 +27,7 @@
- #include <linux/sched.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/fcntl.h>
- #include <linux/stat.h>
- #include <linux/string.h>
-@@ -1183,6 +1184,7 @@ static int ext3_add_nondir(handle_t *han
-               d_instantiate(dentry, inode);
-               return 0;
-       }
-+      ext3_xattr_drop_inode(handle, inode);
-       ext3_dec_count(handle, inode);
-       iput(inode);
-       return err;
-@@ -1268,15 +1270,14 @@ static int ext3_mkdir(struct inode * dir
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
--      inode = ext3_new_inode (handle, dir, S_IFDIR);
-+      inode = ext3_new_inode (handle, dir, S_IFDIR | mode);
-       err = PTR_ERR(inode);
-       if (IS_ERR(inode))
-               goto out_stop;
-       inode->i_op = &ext3_dir_inode_operations;
-       inode->i_fop = &ext3_dir_operations;
--      inode->i_size = inode->u.ext3_i.i_disksize = inode->i_sb->s_blocksize;
--      inode->i_blocks = 0;    
-+      inode->i_size = EXT3_I(inode)->i_disksize = inode->i_sb->s_blocksize;
-       dir_block = ext3_bread (handle, inode, 0, 1, &err);
-       if (!dir_block) {
-               inode->i_nlink--; /* is this nlink == 0? */
-@@ -1303,9 +1304,6 @@ static int ext3_mkdir(struct inode * dir
-       BUFFER_TRACE(dir_block, "call ext3_journal_dirty_metadata");
-       ext3_journal_dirty_metadata(handle, dir_block);
-       brelse (dir_block);
--      inode->i_mode = S_IFDIR | mode;
--      if (dir->i_mode & S_ISGID)
--              inode->i_mode |= S_ISGID;
-       ext3_mark_inode_dirty(handle, inode);
-       err = ext3_add_entry (handle, dentry, inode);
-       if (err)
-@@ -1671,7 +1669,7 @@ static int ext3_symlink (struct inode * 
-       if (IS_ERR(inode))
-               goto out_stop;
--      if (l > sizeof (inode->u.ext3_i.i_data)) {
-+      if (l > sizeof(EXT3_I(inode)->i_data)) {
-               inode->i_op = &page_symlink_inode_operations;
-               inode->i_mapping->a_ops = &ext3_aops;
-               /*
---- linux-2.4.18-p4smp/fs/ext3/super.c~linux-2.4.18ea-0.8.26   2003-07-21 22:29:27.000000000 -0600
-+++ linux-2.4.18-p4smp-braam/fs/ext3/super.c   2003-07-21 22:50:28.000000000 -0600
-@@ -24,6 +24,7 @@
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/slab.h>
- #include <linux/init.h>
- #include <linux/locks.h>
-@@ -406,6 +407,7 @@ void ext3_put_super (struct super_block 
-       kdev_t j_dev = sbi->s_journal->j_dev;
-       int i;
-+      ext3_xattr_put_super(sb);
-       journal_destroy(sbi->s_journal);
-       if (!(sb->s_flags & MS_RDONLY)) {
-               EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
-@@ -1749,17 +1751,27 @@ int ext3_statfs (struct super_block * sb
- static DECLARE_FSTYPE_DEV(ext3_fs_type, "ext3", ext3_read_super);
--static int __init init_ext3_fs(void)
-+static void exit_ext3_fs(void)
- {
--        return register_filesystem(&ext3_fs_type);
-+      unregister_filesystem(&ext3_fs_type);
-+      exit_ext3_xattr_user();
-+      exit_ext3_xattr();
- }
--static void __exit exit_ext3_fs(void)
-+static int __init init_ext3_fs(void)
- {
--      unregister_filesystem(&ext3_fs_type);
-+      int error = init_ext3_xattr();
-+      if (!error)
-+              error = init_ext3_xattr_user();
-+      if (!error)
-+              error = register_filesystem(&ext3_fs_type);
-+      if (!error)
-+              return 0;
-+
-+      exit_ext3_fs();
-+      return error;
- }
--EXPORT_SYMBOL(ext3_bread);
- MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
- MODULE_DESCRIPTION("Second Extended Filesystem with journaling extensions");
---- /dev/null  2003-01-30 03:24:37.000000000 -0700
-+++ linux-2.4.18-p4smp-braam/fs/ext3/ext3-exports.c    2003-07-21 22:49:05.000000000 -0600
-@@ -0,0 +1,13 @@
-+#include <linux/config.h>
-+#include <linux/module.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
-+
-+EXPORT_SYMBOL(ext3_force_commit);
-+EXPORT_SYMBOL(ext3_bread);
-+EXPORT_SYMBOL(ext3_xattr_register);
-+EXPORT_SYMBOL(ext3_xattr_unregister);
-+EXPORT_SYMBOL(ext3_xattr_get);
-+EXPORT_SYMBOL(ext3_xattr_list);
-+EXPORT_SYMBOL(ext3_xattr_set);
---- /dev/null  2003-01-30 03:24:37.000000000 -0700
-+++ linux-2.4.18-p4smp-braam/fs/ext3/xattr.c   2003-07-21 22:50:40.000000000 -0600
-@@ -0,0 +1,1242 @@
-+/*
-+ * linux/fs/ext3/xattr.c
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ *
-+ * Fix by Harrison Xing <harrison@mountainviewdata.com>.
-+ * Ext3 code with a lot of help from Eric Jarman <ejarman@acm.org>.
-+ * Extended attributes for symlinks and special files added per
-+ *  suggestion of Luka Renko <luka.renko@hermes.si>.
-+ */
-+
-+/*
-+ * Extended attributes are stored on disk blocks allocated outside of
-+ * any inode. The i_file_acl field is then made to point to this allocated
-+ * block. If all extended attributes of an inode are identical, these
-+ * inodes may share the same extended attribute block. Such situations
-+ * are automatically detected by keeping a cache of recent attribute block
-+ * numbers and hashes over the block's contents in memory.
-+ *
-+ *
-+ * Extended attribute block layout:
-+ *
-+ *   +------------------+
-+ *   | header           |
-+ *   Â¦ entry 1          | |
-+ *   | entry 2          | | growing downwards
-+ *   | entry 3          | v
-+ *   | four null bytes  |
-+ *   | . . .            |
-+ *   | value 1          | ^
-+ *   | value 3          | | growing upwards
-+ *   | value 2          | |
-+ *   +------------------+
-+ *
-+ * The block header is followed by multiple entry descriptors. These entry
-+ * descriptors are variable in size, and alligned to EXT3_XATTR_PAD
-+ * byte boundaries. The entry descriptors are sorted by attribute name,
-+ * so that two extended attribute blocks can be compared efficiently.
-+ *
-+ * Attribute values are aligned to the end of the block, stored in
-+ * no specific order. They are also padded to EXT3_XATTR_PAD byte
-+ * boundaries. No additional gaps are left between them.
-+ *
-+ * Locking strategy
-+ * ----------------
-+ * The VFS already holds the BKL and the inode->i_sem semaphore when any of
-+ * the xattr inode operations are called, so we are guaranteed that only one
-+ * processes accesses extended attributes of an inode at any time.
-+ *
-+ * For writing we also grab the ext3_xattr_sem semaphore. This ensures that
-+ * only a single process is modifying an extended attribute block, even
-+ * if the block is shared among inodes.
-+ *
-+ * Note for porting to 2.5
-+ * -----------------------
-+ * The BKL will no longer be held in the xattr inode operations.
-+ */
-+
-+#include <linux/fs.h>
-+#include <linux/locks.h>
-+#include <linux/slab.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+#include <linux/mbcache.h>
-+#endif
-+#include <linux/quotaops.h>
-+#include <asm/semaphore.h>
-+#include <linux/compatmac.h>
-+#include <linux/module.h>
-+
-+/* These symbols may be needed by a module. */
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+# define mark_buffer_dirty(bh) mark_buffer_dirty(bh, 1)
-+#endif
-+
-+#define HDR(bh) ((struct ext3_xattr_header *)((bh)->b_data))
-+#define ENTRY(ptr) ((struct ext3_xattr_entry *)(ptr))
-+#define FIRST_ENTRY(bh) ENTRY(HDR(bh)+1)
-+#define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
-+
-+#ifdef EXT3_XATTR_DEBUG
-+# define ea_idebug(inode, f...) do { \
-+              printk(KERN_DEBUG "inode %s:%ld: ", \
-+                      kdevname(inode->i_dev), inode->i_ino); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+# define ea_bdebug(bh, f...) do { \
-+              printk(KERN_DEBUG "block %s:%ld: ", \
-+                      kdevname(bh->b_dev), bh->b_blocknr); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+#else
-+# define ea_idebug(f...)
-+# define ea_bdebug(f...)
-+#endif
-+
-+static int ext3_xattr_set2(handle_t *, struct inode *, struct buffer_head *,
-+                         struct ext3_xattr_header *);
-+
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+
-+static int ext3_xattr_cache_insert(struct buffer_head *);
-+static struct buffer_head *ext3_xattr_cache_find(struct inode *,
-+                                               struct ext3_xattr_header *);
-+static void ext3_xattr_cache_remove(struct buffer_head *);
-+static void ext3_xattr_rehash(struct ext3_xattr_header *,
-+                            struct ext3_xattr_entry *);
-+
-+static struct mb_cache *ext3_xattr_cache;
-+
-+#else
-+# define ext3_xattr_cache_insert(bh) 0
-+# define ext3_xattr_cache_find(inode, header) NULL
-+# define ext3_xattr_cache_remove(bh) do {} while(0)
-+# define ext3_xattr_rehash(header, entry) do {} while(0)
-+#endif
-+
-+/*
-+ * If a file system does not share extended attributes among inodes,
-+ * we should not need the ext3_xattr_sem semaphore. However, the
-+ * filesystem may still contain shared blocks, so we always take
-+ * the lock.
-+ */
-+
-+DECLARE_MUTEX(ext3_xattr_sem);
-+
-+static inline void
-+ext3_xattr_lock(void)
-+{
-+      down(&ext3_xattr_sem);
-+}
-+
-+static inline void
-+ext3_xattr_unlock(void)
-+{
-+      up(&ext3_xattr_sem);
-+}
-+
-+static inline int
-+ext3_xattr_new_block(handle_t *handle, struct inode *inode,
-+                   int * errp, int force)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      int goal = le32_to_cpu(EXT3_SB(sb)->s_es->s_first_data_block) +
-+              EXT3_I(inode)->i_block_group * EXT3_BLOCKS_PER_GROUP(sb);
-+
-+      /* How can we enforce the allocation? */
-+      int block = ext3_new_block(handle, inode, goal, 0, 0, errp);
-+#ifdef OLD_QUOTAS
-+      if (!*errp)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#endif
-+      return block;
-+}
-+
-+static inline int
-+ext3_xattr_quota_alloc(struct inode *inode, int force)
-+{
-+      /* How can we enforce the allocation? */
-+#ifdef OLD_QUOTAS
-+      int error = DQUOT_ALLOC_BLOCK(inode->i_sb, inode, 1);
-+      if (!error)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#else
-+      int error = DQUOT_ALLOC_BLOCK(inode, 1);
-+#endif
-+      return error;
-+}
-+
-+#ifdef OLD_QUOTAS
-+
-+static inline void
-+ext3_xattr_quota_free(struct inode *inode)
-+{
-+      DQUOT_FREE_BLOCK(inode->i_sb, inode, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+static inline void
-+ext3_xattr_free_block(handle_t *handle, struct inode * inode,
-+                    unsigned long block)
-+{
-+      ext3_free_blocks(handle, inode, block, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+#else
-+# define ext3_xattr_quota_free(inode) \
-+      DQUOT_FREE_BLOCK(inode, 1)
-+# define ext3_xattr_free_block(handle, inode, block) \
-+      ext3_free_blocks(handle, inode, block, 1)
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
-+
-+static inline struct buffer_head *
-+sb_bread(struct super_block *sb, int block)
-+{
-+      return bread(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+static inline struct buffer_head *
-+sb_getblk(struct super_block *sb, int block)
-+{
-+      return getblk(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+#endif
-+
-+struct ext3_xattr_handler *ext3_xattr_handlers[EXT3_XATTR_INDEX_MAX];
-+rwlock_t ext3_handler_lock = RW_LOCK_UNLOCKED;
-+
-+int
-+ext3_xattr_register(int name_index, struct ext3_xattr_handler *handler)
-+{
-+      int error = -EINVAL;
-+
-+      if (name_index > 0 && name_index <= EXT3_XATTR_INDEX_MAX) {
-+              write_lock(&ext3_handler_lock);
-+              if (!ext3_xattr_handlers[name_index-1]) {
-+                      ext3_xattr_handlers[name_index-1] = handler;
-+                      error = 0;
-+              }
-+              write_unlock(&ext3_handler_lock);
-+      }
-+      return error;
-+}
-+
-+void
-+ext3_xattr_unregister(int name_index, struct ext3_xattr_handler *handler)
-+{
-+      if (name_index > 0 || name_index <= EXT3_XATTR_INDEX_MAX) {
-+              write_lock(&ext3_handler_lock);
-+              ext3_xattr_handlers[name_index-1] = NULL;
-+              write_unlock(&ext3_handler_lock);
-+      }
-+}
-+
-+static inline const char *
-+strcmp_prefix(const char *a, const char *a_prefix)
-+{
-+      while (*a_prefix && *a == *a_prefix) {
-+              a++;
-+              a_prefix++;
-+      }
-+      return *a_prefix ? NULL : a;
-+}
-+
-+/*
-+ * Decode the extended attribute name, and translate it into
-+ * the name_index and name suffix.
-+ */
-+static inline struct ext3_xattr_handler *
-+ext3_xattr_resolve_name(const char **name)
-+{
-+      struct ext3_xattr_handler *handler = NULL;
-+      int i;
-+
-+      if (!*name)
-+              return NULL;
-+      read_lock(&ext3_handler_lock);
-+      for (i=0; i<EXT3_XATTR_INDEX_MAX; i++) {
-+              if (ext3_xattr_handlers[i]) {
-+                      const char *n = strcmp_prefix(*name,
-+                              ext3_xattr_handlers[i]->prefix);
-+                      if (n) {
-+                              handler = ext3_xattr_handlers[i];
-+                              *name = n;
-+                              break;
-+                      }
-+              }
-+      }
-+      read_unlock(&ext3_handler_lock);
-+      return handler;
-+}
-+
-+static inline struct ext3_xattr_handler *
-+ext3_xattr_handler(int name_index)
-+{
-+      struct ext3_xattr_handler *handler = NULL;
-+      if (name_index > 0 && name_index <= EXT3_XATTR_INDEX_MAX) {
-+              read_lock(&ext3_handler_lock);
-+              handler = ext3_xattr_handlers[name_index-1];
-+              read_unlock(&ext3_handler_lock);
-+      }
-+      return handler;
-+}
-+
-+/*
-+ * Inode operation getxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext3_getxattr(struct dentry *dentry, const char *name,
-+            void *buffer, size_t size)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->get(inode, name, buffer, size);
-+}
-+
-+/*
-+ * Inode operation listxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext3_listxattr(struct dentry *dentry, char *buffer, size_t size)
-+{
-+      return ext3_xattr_list(dentry->d_inode, buffer, size);
-+}
-+
-+/*
-+ * Inode operation setxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext3_setxattr(struct dentry *dentry, const char *name,
-+            void *value, size_t size, int flags)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      if (size == 0)
-+              value = "";  /* empty EA, do not remove */
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, value, size, flags);
-+}
-+
-+/*
-+ * Inode operation removexattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext3_removexattr(struct dentry *dentry, const char *name)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, NULL, 0, XATTR_REPLACE);
-+}
-+
-+/*
-+ * ext3_xattr_get()
-+ *
-+ * Copy an extended attribute into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext3_xattr_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_entry *entry;
-+      unsigned int block, size;
-+      char *end;
-+      int name_len, error;
-+
-+      ea_idebug(inode, "name=%d.%s, buffer=%p, buffer_size=%ld",
-+                name_index, name, buffer, (long)buffer_size);
-+
-+      if (name == NULL)
-+              return -EINVAL;
-+      if (!EXT3_I(inode)->i_file_acl)
-+              return -ENOATTR;
-+      block = EXT3_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext3_error(inode->i_sb, "ext3_xattr_get",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* find named attribute */
-+      name_len = strlen(name);
-+
-+      error = -ERANGE;
-+      if (name_len > 255)
-+              goto cleanup;
-+      entry = FIRST_ENTRY(bh);
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              if (name_index == entry->e_name_index &&
-+                  name_len == entry->e_name_len &&
-+                  memcmp(name, entry->e_name, name_len) == 0)
-+                      goto found;
-+              entry = next;
-+      }
-+      /* Check the remaining name entries */
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              entry = next;
-+      }
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      error = -ENOATTR;
-+      goto cleanup;
-+found:
-+      /* check the buffer size */
-+      if (entry->e_value_block != 0)
-+              goto bad_block;
-+      size = le32_to_cpu(entry->e_value_size);
-+      if (size > inode->i_sb->s_blocksize ||
-+          le16_to_cpu(entry->e_value_offs) + size > inode->i_sb->s_blocksize)
-+              goto bad_block;
-+
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (buffer) {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+              /* return value of attribute */
-+              memcpy(buffer, bh->b_data + le16_to_cpu(entry->e_value_offs),
-+                      size);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_list()
-+ *
-+ * Copy a list of attribute names into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext3_xattr_list(struct inode *inode, char *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_entry *entry;
-+      unsigned int block, size = 0;
-+      char *buf, *end;
-+      int error;
-+
-+      ea_idebug(inode, "buffer=%p, buffer_size=%ld",
-+                buffer, (long)buffer_size);
-+
-+      if (!EXT3_I(inode)->i_file_acl)
-+              return 0;
-+      block = EXT3_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext3_error(inode->i_sb, "ext3_xattr_list",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* compute the size required for the list of attribute names */
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT3_XATTR_NEXT(entry)) {
-+              struct ext3_xattr_handler *handler;
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+
-+              handler = ext3_xattr_handler(entry->e_name_index);
-+              if (handler) {
-+                      size += handler->list(NULL, inode, entry->e_name,
-+                                            entry->e_name_len) + 1;
-+              }
-+      }
-+
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (!buffer) {
-+              error = size;
-+              goto cleanup;
-+      } else {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+      }
-+
-+      /* list the attribute names */
-+      buf = buffer;
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT3_XATTR_NEXT(entry)) {
-+              struct ext3_xattr_handler *handler;
-+
-+              handler = ext3_xattr_handler(entry->e_name_index);
-+              if (handler) {
-+                      buf += handler->list(buf, inode, entry->e_name,
-+                                           entry->e_name_len);
-+                      *buf++ = '\0';
-+              }
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * If the EXT3_FEATURE_COMPAT_EXT_ATTR feature of this file system is
-+ * not set, set it.
-+ */
-+static void ext3_xattr_update_super_block(handle_t *handle,
-+                                        struct super_block *sb)
-+{
-+      if (EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_EXT_ATTR))
-+              return;
-+
-+      lock_super(sb);
-+      ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+      EXT3_SB(sb)->s_feature_compat |= EXT3_FEATURE_COMPAT_EXT_ATTR;
-+#endif
-+      EXT3_SB(sb)->s_es->s_feature_compat |=
-+              cpu_to_le32(EXT3_FEATURE_COMPAT_EXT_ATTR);
-+      sb->s_dirt = 1;
-+      ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-+      unlock_super(sb);
-+}
-+
-+/*
-+ * ext3_xattr_set()
-+ *
-+ * Create, replace or remove an extended attribute for this inode. Buffer
-+ * is NULL to remove an existing extended attribute, and non-NULL to
-+ * either replace an existing extended attribute, or create a new extended
-+ * attribute. The flags XATTR_REPLACE and XATTR_CREATE
-+ * specify that an extended attribute must exist and must not exist
-+ * previous to the call, respectively.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+int
-+ext3_xattr_set(handle_t *handle, struct inode *inode, int name_index,
-+             const char *name, void *value, size_t value_len, int flags)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_header *header = NULL;
-+      struct ext3_xattr_entry *here, *last;
-+      unsigned int name_len;
-+      int min_offs = sb->s_blocksize, not_found = 1, free, error;
-+      char *end;
-+      
-+      /*
-+       * header -- Points either into bh, or to a temporarily
-+       *           allocated buffer.
-+       * here -- The named entry found, or the place for inserting, within
-+       *         the block pointed to by header.
-+       * last -- Points right after the last named entry within the block
-+       *         pointed to by header.
-+       * min_offs -- The offset of the first value (values are aligned
-+       *             towards the end of the block).
-+       * end -- Points right after the block pointed to by header.
-+       */
-+      
-+      ea_idebug(inode, "name=%d.%s, value=%p, value_len=%ld",
-+                name_index, name, value, (long)value_len);
-+
-+      if (IS_RDONLY(inode))
-+              return -EROFS;
-+      if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
-+              return -EPERM;
-+      if (value == NULL)
-+              value_len = 0;
-+      if (name == NULL)
-+              return -EINVAL;
-+      name_len = strlen(name);
-+      if (name_len > 255 || value_len > sb->s_blocksize)
-+              return -ERANGE;
-+      ext3_xattr_lock();
-+
-+      if (EXT3_I(inode)->i_file_acl) {
-+              /* The inode already has an extended attribute block. */
-+              int block = EXT3_I(inode)->i_file_acl;
-+
-+              bh = sb_bread(sb, block);
-+              error = -EIO;
-+              if (!bh)
-+                      goto cleanup;
-+              ea_bdebug(bh, "b_count=%d, refcount=%d",
-+                      atomic_read(&(bh->b_count)),
-+                      le32_to_cpu(HDR(bh)->h_refcount));
-+              header = HDR(bh);
-+              end = bh->b_data + bh->b_size;
-+              if (header->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+                  header->h_blocks != cpu_to_le32(1)) {
-+bad_block:            ext3_error(sb, "ext3_xattr_set",
-+                              "inode %ld: bad block %d", inode->i_ino, block);
-+                      error = -EIO;
-+                      goto cleanup;
-+              }
-+              /* Find the named attribute. */
-+              here = FIRST_ENTRY(bh);
-+              while (!IS_LAST_ENTRY(here)) {
-+                      struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(here);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!here->e_value_block && here->e_value_size) {
-+                              int offs = le16_to_cpu(here->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      not_found = name_index - here->e_name_index;
-+                      if (!not_found)
-+                              not_found = name_len - here->e_name_len;
-+                      if (!not_found)
-+                              not_found = memcmp(name, here->e_name,name_len);
-+                      if (not_found <= 0)
-+                              break;
-+                      here = next;
-+              }
-+              last = here;
-+              /* We still need to compute min_offs and last. */
-+              while (!IS_LAST_ENTRY(last)) {
-+                      struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(last);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!last->e_value_block && last->e_value_size) {
-+                              int offs = le16_to_cpu(last->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      last = next;
-+              }
-+
-+              /* Check whether we have enough space left. */
-+              free = min_offs - ((char*)last - (char*)header) - sizeof(__u32);
-+      } else {
-+              /* We will use a new extended attribute block. */
-+              free = sb->s_blocksize -
-+                      sizeof(struct ext3_xattr_header) - sizeof(__u32);
-+              here = last = NULL;  /* avoid gcc uninitialized warning. */
-+      }
-+
-+      if (not_found) {
-+              /* Request to remove a nonexistent attribute? */
-+              error = -ENOATTR;
-+              if (flags & XATTR_REPLACE)
-+                      goto cleanup;
-+              error = 0;
-+              if (value == NULL)
-+                      goto cleanup;
-+              else
-+                      free -= EXT3_XATTR_LEN(name_len);
-+      } else {
-+              /* Request to create an existing attribute? */
-+              error = -EEXIST;
-+              if (flags & XATTR_CREATE)
-+                      goto cleanup;
-+              if (!here->e_value_block && here->e_value_size) {
-+                      unsigned int size = le32_to_cpu(here->e_value_size);
-+
-+                      if (le16_to_cpu(here->e_value_offs) + size > 
-+                          sb->s_blocksize || size > sb->s_blocksize)
-+                              goto bad_block;
-+                      free += EXT3_XATTR_SIZE(size);
-+              }
-+      }
-+      free -= EXT3_XATTR_SIZE(value_len);
-+      error = -ENOSPC;
-+      if (free < 0)
-+              goto cleanup;
-+
-+      /* Here we know that we can set the new attribute. */
-+
-+      if (header) {
-+              if (header->h_refcount == cpu_to_le32(1)) {
-+                      ea_bdebug(bh, "modifying in-place");
-+                      ext3_xattr_cache_remove(bh);
-+                      error = ext3_journal_get_write_access(handle, bh);
-+                      if (error)
-+                              goto cleanup;
-+              } else {
-+                      int offset;
-+
-+                      ea_bdebug(bh, "cloning");
-+                      header = kmalloc(bh->b_size, GFP_KERNEL);
-+                      error = -ENOMEM;
-+                      if (header == NULL)
-+                              goto cleanup;
-+                      memcpy(header, HDR(bh), bh->b_size);
-+                      header->h_refcount = cpu_to_le32(1);
-+                      offset = (char *)header - bh->b_data;
-+                      here = ENTRY((char *)here + offset);
-+                      last = ENTRY((char *)last + offset);
-+              }
-+      } else {
-+              /* Allocate a buffer where we construct the new block. */
-+              header = kmalloc(sb->s_blocksize, GFP_KERNEL);
-+              error = -ENOMEM;
-+              if (header == NULL)
-+                      goto cleanup;
-+              memset(header, 0, sb->s_blocksize);
-+              end = (char *)header + sb->s_blocksize;
-+              header->h_magic = cpu_to_le32(EXT3_XATTR_MAGIC);
-+              header->h_blocks = header->h_refcount = cpu_to_le32(1);
-+              last = here = ENTRY(header+1);
-+      }
-+
-+      if (not_found) {
-+              /* Insert the new name. */
-+              int size = EXT3_XATTR_LEN(name_len);
-+              int rest = (char *)last - (char *)here;
-+              memmove((char *)here + size, here, rest);
-+              memset(here, 0, size);
-+              here->e_name_index = name_index;
-+              here->e_name_len = name_len;
-+              memcpy(here->e_name, name, name_len);
-+      } else {
-+              /* Remove the old value. */
-+              if (!here->e_value_block && here->e_value_size) {
-+                      char *first_val = (char *)header + min_offs;
-+                      int offs = le16_to_cpu(here->e_value_offs);
-+                      char *val = (char *)header + offs;
-+                      size_t size = EXT3_XATTR_SIZE(
-+                              le32_to_cpu(here->e_value_size));
-+                      memmove(first_val + size, first_val, val - first_val);
-+                      memset(first_val, 0, size);
-+                      here->e_value_offs = 0;
-+                      min_offs += size;
-+
-+                      /* Adjust all value offsets. */
-+                      last = ENTRY(header+1);
-+                      while (!IS_LAST_ENTRY(last)) {
-+                              int o = le16_to_cpu(last->e_value_offs);
-+                              if (!last->e_value_block && o < offs)
-+                                      last->e_value_offs =
-+                                              cpu_to_le16(o + size);
-+                              last = EXT3_XATTR_NEXT(last);
-+                      }
-+              }
-+              if (value == NULL) {
-+                      /* Remove this attribute. */
-+                      if (EXT3_XATTR_NEXT(ENTRY(header+1)) == last) {
-+                              /* This block is now empty. */
-+                              error = ext3_xattr_set2(handle, inode, bh,NULL);
-+                              goto cleanup;
-+                      } else {
-+                              /* Remove the old name. */
-+                              int size = EXT3_XATTR_LEN(name_len);
-+                              last = ENTRY((char *)last - size);
-+                              memmove(here, (char*)here + size,
-+                                      (char*)last - (char*)here);
-+                              memset(last, 0, size);
-+                      }
-+              }
-+      }
-+
-+      if (value != NULL) {
-+              /* Insert the new value. */
-+              here->e_value_size = cpu_to_le32(value_len);
-+              if (value_len) {
-+                      size_t size = EXT3_XATTR_SIZE(value_len);
-+                      char *val = (char *)header + min_offs - size;
-+                      here->e_value_offs =
-+                              cpu_to_le16((char *)val - (char *)header);
-+                      memset(val + size - EXT3_XATTR_PAD, 0,
-+                             EXT3_XATTR_PAD); /* Clear the pad bytes. */
-+                      memcpy(val, value, value_len);
-+              }
-+      }
-+      ext3_xattr_rehash(header, here);
-+
-+      error = ext3_xattr_set2(handle, inode, bh, header);
-+
-+cleanup:
-+      brelse(bh);
-+      if (!(bh && header == HDR(bh)))
-+              kfree(header);
-+      ext3_xattr_unlock();
-+
-+      return error;
-+}
-+
-+/*
-+ * Second half of ext3_xattr_set(): Update the file system.
-+ */
-+static int
-+ext3_xattr_set2(handle_t *handle, struct inode *inode,
-+              struct buffer_head *old_bh, struct ext3_xattr_header *header)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *new_bh = NULL;
-+      int error;
-+
-+      if (header) {
-+              new_bh = ext3_xattr_cache_find(inode, header);
-+              if (new_bh) {
-+                      /*
-+                       * We found an identical block in the cache.
-+                       * The old block will be released after updating
-+                       * the inode.
-+                       */
-+                      ea_bdebug(old_bh, "reusing block %ld",
-+                              new_bh->b_blocknr);
-+                      
-+                      error = -EDQUOT;
-+                      if (ext3_xattr_quota_alloc(inode, 1))
-+                              goto cleanup;
-+                      
-+                      error = ext3_journal_get_write_access(handle, new_bh);
-+                      if (error)
-+                              goto cleanup;
-+                      HDR(new_bh)->h_refcount = cpu_to_le32(
-+                              le32_to_cpu(HDR(new_bh)->h_refcount) + 1);
-+                      ea_bdebug(new_bh, "refcount now=%d",
-+                              le32_to_cpu(HDR(new_bh)->h_refcount));
-+              } else if (old_bh && header == HDR(old_bh)) {
-+                      /* Keep this block. */
-+                      new_bh = old_bh;
-+                      (void)ext3_xattr_cache_insert(new_bh);
-+              } else {
-+                      /* We need to allocate a new block */
-+                      int force = EXT3_I(inode)->i_file_acl != 0;
-+                      int block = ext3_xattr_new_block(handle, inode,
-+                                                       &error, force);
-+                      if (error)
-+                              goto cleanup;
-+                      ea_idebug(inode, "creating block %d", block);
-+
-+                      new_bh = sb_getblk(sb, block);
-+                      if (!new_bh) {
-+getblk_failed:                        ext3_xattr_free_block(handle, inode, block);
-+                              error = -EIO;
-+                              goto cleanup;
-+                      }
-+                      lock_buffer(new_bh);
-+                      error = ext3_journal_get_create_access(handle, new_bh);
-+                      if (error) {
-+                              unlock_buffer(new_bh);
-+                              goto getblk_failed;
-+                      }
-+                      memcpy(new_bh->b_data, header, new_bh->b_size);
-+                      mark_buffer_uptodate(new_bh, 1);
-+                      unlock_buffer(new_bh);
-+                      (void)ext3_xattr_cache_insert(new_bh);
-+                      ext3_xattr_update_super_block(handle, sb);
-+              }
-+              error = ext3_journal_dirty_metadata(handle, new_bh);
-+              if (error)
-+                      goto cleanup;
-+      }
-+
-+      /* Update the inode. */
-+      EXT3_I(inode)->i_file_acl = new_bh ? new_bh->b_blocknr : 0;
-+      inode->i_ctime = CURRENT_TIME;
-+      ext3_mark_inode_dirty(handle, inode);
-+      if (IS_SYNC(inode))
-+              handle->h_sync = 1;
-+
-+      error = 0;
-+      if (old_bh && old_bh != new_bh) {
-+              /*
-+               * If there was an old block, and we are not still using it,
-+               * we now release the old block.
-+              */
-+              unsigned int refcount = le32_to_cpu(HDR(old_bh)->h_refcount);
-+
-+              error = ext3_journal_get_write_access(handle, old_bh);
-+              if (error)
-+                      goto cleanup;
-+              if (refcount == 1) {
-+                      /* Free the old block. */
-+                      ea_bdebug(old_bh, "freeing");
-+                      ext3_xattr_free_block(handle, inode, old_bh->b_blocknr);
-+
-+                      /* ext3_forget() calls bforget() for us, but we
-+                         let our caller release old_bh, so we need to
-+                         duplicate the handle before. */
-+                      get_bh(old_bh);
-+                      ext3_forget(handle, 1, inode, old_bh,old_bh->b_blocknr);
-+              } else {
-+                      /* Decrement the refcount only. */
-+                      refcount--;
-+                      HDR(old_bh)->h_refcount = cpu_to_le32(refcount);
-+                      ext3_xattr_quota_free(inode);
-+                      ext3_journal_dirty_metadata(handle, old_bh);
-+                      ea_bdebug(old_bh, "refcount now=%d", refcount);
-+              }
-+      }
-+
-+cleanup:
-+      if (old_bh != new_bh)
-+              brelse(new_bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_drop_inode()
-+ *
-+ * Free extended attribute resources associated with this inode. This
-+ * is called immediately before an inode is freed.
-+ */
-+void
-+ext3_xattr_drop_inode(handle_t *handle, struct inode *inode)
-+{
-+      struct buffer_head *bh;
-+      unsigned int block = EXT3_I(inode)->i_file_acl;
-+
-+      if (!block)
-+              return;
-+      ext3_xattr_lock();
-+
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh) {
-+              ext3_error(inode->i_sb, "ext3_xattr_drop_inode",
-+                      "inode %ld: block %d read error", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ea_bdebug(bh, "b_count=%d", atomic_read(&(bh->b_count)));
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+              ext3_error(inode->i_sb, "ext3_xattr_drop_inode",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ext3_journal_get_write_access(handle, bh);
-+      ea_bdebug(bh, "refcount now=%d", le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+      if (HDR(bh)->h_refcount == cpu_to_le32(1)) {
-+              ext3_xattr_cache_remove(bh);
-+              ext3_xattr_free_block(handle, inode, block);
-+              ext3_forget(handle, 1, inode, bh, block);
-+              bh = NULL;
-+      } else {
-+              HDR(bh)->h_refcount = cpu_to_le32(
-+                      le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+              ext3_journal_dirty_metadata(handle, bh);
-+              if (IS_SYNC(inode))
-+                      handle->h_sync = 1;
-+              ext3_xattr_quota_free(inode);
-+      }
-+      EXT3_I(inode)->i_file_acl = 0;
-+
-+cleanup:
-+      brelse(bh);
-+      ext3_xattr_unlock();
-+}
-+
-+/*
-+ * ext3_xattr_put_super()
-+ *
-+ * This is called when a file system is unmounted.
-+ */
-+void
-+ext3_xattr_put_super(struct super_block *sb)
-+{
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+      mb_cache_shrink(ext3_xattr_cache, sb->s_dev);
-+#endif
-+}
-+
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+
-+/*
-+ * ext3_xattr_cache_insert()
-+ *
-+ * Create a new entry in the extended attribute cache, and insert
-+ * it unless such an entry is already in the cache.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+static int
-+ext3_xattr_cache_insert(struct buffer_head *bh)
-+{
-+      __u32 hash = le32_to_cpu(HDR(bh)->h_hash);
-+      struct mb_cache_entry *ce;
-+      int error;
-+
-+      ce = mb_cache_entry_alloc(ext3_xattr_cache);
-+      if (!ce)
-+              return -ENOMEM;
-+      error = mb_cache_entry_insert(ce, bh->b_dev, bh->b_blocknr, &hash);
-+      if (error) {
-+              mb_cache_entry_free(ce);
-+              if (error == -EBUSY) {
-+                      ea_bdebug(bh, "already in cache (%d cache entries)",
-+                              atomic_read(&ext3_xattr_cache->c_entry_count));
-+                      error = 0;
-+              }
-+      } else {
-+              ea_bdebug(bh, "inserting [%x] (%d cache entries)", (int)hash,
-+                        atomic_read(&ext3_xattr_cache->c_entry_count));
-+              mb_cache_entry_release(ce);
-+      }
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_cmp()
-+ *
-+ * Compare two extended attribute blocks for equality.
-+ *
-+ * Returns 0 if the blocks are equal, 1 if they differ, and
-+ * a negative error number on errors.
-+ */
-+static int
-+ext3_xattr_cmp(struct ext3_xattr_header *header1,
-+             struct ext3_xattr_header *header2)
-+{
-+      struct ext3_xattr_entry *entry1, *entry2;
-+
-+      entry1 = ENTRY(header1+1);
-+      entry2 = ENTRY(header2+1);
-+      while (!IS_LAST_ENTRY(entry1)) {
-+              if (IS_LAST_ENTRY(entry2))
-+                      return 1;
-+              if (entry1->e_hash != entry2->e_hash ||
-+                  entry1->e_name_len != entry2->e_name_len ||
-+                  entry1->e_value_size != entry2->e_value_size ||
-+                  memcmp(entry1->e_name, entry2->e_name, entry1->e_name_len))
-+                      return 1;
-+              if (entry1->e_value_block != 0 || entry2->e_value_block != 0)
-+                      return -EIO;
-+              if (memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
-+                         (char *)header2 + le16_to_cpu(entry2->e_value_offs),
-+                         le32_to_cpu(entry1->e_value_size)))
-+                      return 1;
-+
-+              entry1 = EXT3_XATTR_NEXT(entry1);
-+              entry2 = EXT3_XATTR_NEXT(entry2);
-+      }
-+      if (!IS_LAST_ENTRY(entry2))
-+              return 1;
-+      return 0;
-+}
-+
-+/*
-+ * ext3_xattr_cache_find()
-+ *
-+ * Find an identical extended attribute block.
-+ *
-+ * Returns a pointer to the block found, or NULL if such a block was
-+ * not found or an error occurred.
-+ */
-+static struct buffer_head *
-+ext3_xattr_cache_find(struct inode *inode, struct ext3_xattr_header *header)
-+{
-+      __u32 hash = le32_to_cpu(header->h_hash);
-+      struct mb_cache_entry *ce;
-+
-+      if (!header->h_hash)
-+              return NULL;  /* never share */
-+      ea_idebug(inode, "looking for cached blocks [%x]", (int)hash);
-+      ce = mb_cache_entry_find_first(ext3_xattr_cache, 0, inode->i_dev, hash);
-+      while (ce) {
-+              struct buffer_head *bh = sb_bread(inode->i_sb, ce->e_block);
-+
-+              if (!bh) {
-+                      ext3_error(inode->i_sb, "ext3_xattr_cache_find",
-+                              "inode %ld: block %ld read error",
-+                              inode->i_ino, ce->e_block);
-+              } else if (le32_to_cpu(HDR(bh)->h_refcount) >
-+                         EXT3_XATTR_REFCOUNT_MAX) {
-+                      ea_idebug(inode, "block %ld refcount %d>%d",ce->e_block,
-+                              le32_to_cpu(HDR(bh)->h_refcount),
-+                              EXT3_XATTR_REFCOUNT_MAX);
-+              } else if (!ext3_xattr_cmp(header, HDR(bh))) {
-+                      ea_bdebug(bh, "b_count=%d",atomic_read(&(bh->b_count)));
-+                      mb_cache_entry_release(ce);
-+                      return bh;
-+              }
-+              brelse(bh);
-+              ce = mb_cache_entry_find_next(ce, 0, inode->i_dev, hash);
-+      }
-+      return NULL;
-+}
-+
-+/*
-+ * ext3_xattr_cache_remove()
-+ *
-+ * Remove the cache entry of a block from the cache. Called when a
-+ * block becomes invalid.
-+ */
-+static void
-+ext3_xattr_cache_remove(struct buffer_head *bh)
-+{
-+      struct mb_cache_entry *ce;
-+
-+      ce = mb_cache_entry_get(ext3_xattr_cache, bh->b_dev, bh->b_blocknr);
-+      if (ce) {
-+              ea_bdebug(bh, "removing (%d cache entries remaining)",
-+                        atomic_read(&ext3_xattr_cache->c_entry_count)-1);
-+              mb_cache_entry_free(ce);
-+      } else 
-+              ea_bdebug(bh, "no cache entry");
-+}
-+
-+#define NAME_HASH_SHIFT 5
-+#define VALUE_HASH_SHIFT 16
-+
-+/*
-+ * ext3_xattr_hash_entry()
-+ *
-+ * Compute the hash of an extended attribute.
-+ */
-+static inline void ext3_xattr_hash_entry(struct ext3_xattr_header *header,
-+                                       struct ext3_xattr_entry *entry)
-+{
-+      __u32 hash = 0;
-+      char *name = entry->e_name;
-+      int n;
-+
-+      for (n=0; n < entry->e_name_len; n++) {
-+              hash = (hash << NAME_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - NAME_HASH_SHIFT)) ^
-+                     *name++;
-+      }
-+
-+      if (entry->e_value_block == 0 && entry->e_value_size != 0) {
-+              __u32 *value = (__u32 *)((char *)header +
-+                      le16_to_cpu(entry->e_value_offs));
-+              for (n = (le32_to_cpu(entry->e_value_size) +
-+                   EXT3_XATTR_ROUND) >> EXT3_XATTR_PAD_BITS; n; n--) {
-+                      hash = (hash << VALUE_HASH_SHIFT) ^
-+                             (hash >> (8*sizeof(hash) - VALUE_HASH_SHIFT)) ^
-+                             le32_to_cpu(*value++);
-+              }
-+      }
-+      entry->e_hash = cpu_to_le32(hash);
-+}
-+
-+#undef NAME_HASH_SHIFT
-+#undef VALUE_HASH_SHIFT
-+
-+#define BLOCK_HASH_SHIFT 16
-+
-+/*
-+ * ext3_xattr_rehash()
-+ *
-+ * Re-compute the extended attribute hash value after an entry has changed.
-+ */
-+static void ext3_xattr_rehash(struct ext3_xattr_header *header,
-+                            struct ext3_xattr_entry *entry)
-+{
-+      struct ext3_xattr_entry *here;
-+      __u32 hash = 0;
-+      
-+      ext3_xattr_hash_entry(header, entry);
-+      here = ENTRY(header+1);
-+      while (!IS_LAST_ENTRY(here)) {
-+              if (!here->e_hash) {
-+                      /* Block is not shared if an entry's hash value == 0 */
-+                      hash = 0;
-+                      break;
-+              }
-+              hash = (hash << BLOCK_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - BLOCK_HASH_SHIFT)) ^
-+                     le32_to_cpu(here->e_hash);
-+              here = EXT3_XATTR_NEXT(here);
-+      }
-+      header->h_hash = cpu_to_le32(hash);
-+}
-+
-+#undef BLOCK_HASH_SHIFT
-+
-+int __init
-+init_ext3_xattr(void)
-+{
-+      ext3_xattr_cache = mb_cache_create("ext3_xattr", NULL,
-+              sizeof(struct mb_cache_entry) +
-+              sizeof(struct mb_cache_entry_index), 1, 61);
-+      if (!ext3_xattr_cache)
-+              return -ENOMEM;
-+
-+      return 0;
-+}
-+
-+void
-+exit_ext3_xattr(void)
-+{
-+      if (ext3_xattr_cache)
-+              mb_cache_destroy(ext3_xattr_cache);
-+      ext3_xattr_cache = NULL;
-+}
-+
-+#else  /* CONFIG_EXT3_FS_XATTR_SHARING */
-+
-+int __init
-+init_ext3_xattr(void)
-+{
-+      return 0;
-+}
-+
-+void
-+exit_ext3_xattr(void)
-+{
-+}
-+
-+#endif  /* CONFIG_EXT3_FS_XATTR_SHARING */
---- linux-2.4.18-p4smp/include/linux/ext3_fs.h~linux-2.4.18ea-0.8.26   2003-07-21 22:29:27.000000000 -0600
-+++ linux-2.4.18-p4smp-braam/include/linux/ext3_fs.h   2003-07-21 22:49:05.000000000 -0600
-@@ -58,8 +58,6 @@
-  */
- #define       EXT3_BAD_INO             1      /* Bad blocks inode */
- #define EXT3_ROOT_INO          2      /* Root inode */
--#define EXT3_ACL_IDX_INO       3      /* ACL inode */
--#define EXT3_ACL_DATA_INO      4      /* ACL inode */
- #define EXT3_BOOT_LOADER_INO   5      /* Boot loader inode */
- #define EXT3_UNDEL_DIR_INO     6      /* Undelete directory inode */
- #define EXT3_RESIZE_INO                7      /* Reserved group descriptors inode */
-@@ -89,7 +87,6 @@
- #else
- # define EXT3_BLOCK_SIZE(s)           (EXT3_MIN_BLOCK_SIZE << (s)->s_log_block_size)
- #endif
--#define EXT3_ACLE_PER_BLOCK(s)                (EXT3_BLOCK_SIZE(s) / sizeof (struct ext3_acl_entry))
- #define       EXT3_ADDR_PER_BLOCK(s)          (EXT3_BLOCK_SIZE(s) / sizeof (__u32))
- #ifdef __KERNEL__
- # define EXT3_BLOCK_SIZE_BITS(s)      ((s)->s_blocksize_bits)
-@@ -124,28 +121,6 @@
- #endif
- /*
-- * ACL structures
-- */
--struct ext3_acl_header        /* Header of Access Control Lists */
--{
--      __u32   aclh_size;
--      __u32   aclh_file_count;
--      __u32   aclh_acle_count;
--      __u32   aclh_first_acle;
--};
--
--struct ext3_acl_entry /* Access Control List Entry */
--{
--      __u32   acle_size;
--      __u16   acle_perms;     /* Access permissions */
--      __u16   acle_type;      /* Type of entry */
--      __u16   acle_tag;       /* User or group identity */
--      __u16   acle_pad1;
--      __u32   acle_next;      /* Pointer on next entry for the */
--                                      /* same inode or on next free entry */
--};
--
--/*
-  * Structure of a blocks group descriptor
-  */
- struct ext3_group_desc
-@@ -513,7 +488,7 @@ struct ext3_super_block {
- #define EXT3_FEATURE_INCOMPAT_RECOVER         0x0004 /* Needs recovery */
- #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008 /* Journal device */
--#define EXT3_FEATURE_COMPAT_SUPP      0
-+#define EXT3_FEATURE_COMPAT_SUPP      EXT3_FEATURE_COMPAT_EXT_ATTR
- #define EXT3_FEATURE_INCOMPAT_SUPP    (EXT3_FEATURE_INCOMPAT_FILETYPE| \
-                                        EXT3_FEATURE_INCOMPAT_RECOVER)
- #define EXT3_FEATURE_RO_COMPAT_SUPP   (EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-@@ -606,6 +581,24 @@ struct ext3_iloc
-       unsigned long block_group;
- };
-+/* Defined for extended attributes */
-+#define CONFIG_EXT3_FS_XATTR y
-+#ifndef ENOATTR
-+#define ENOATTR ENODATA               /* No such attribute */
-+#endif
-+#ifndef ENOTSUP
-+#define ENOTSUP EOPNOTSUPP    /* Operation not supported */
-+#endif
-+#ifndef XATTR_NAME_MAX
-+#define XATTR_NAME_MAX   255  /* # chars in an extended attribute name */
-+#define XATTR_SIZE_MAX 65536  /* size of an extended attribute value (64k) */
-+#define XATTR_LIST_MAX 65536  /* size of extended attribute namelist (64k) */
-+#endif
-+#ifndef XATTR_CREATE
-+#define XATTR_CREATE  1       /* set value, fail if attr already exists */
-+#define XATTR_REPLACE 2       /* set value, fail if attr does not exist */
-+#endif
-+
- /*
-  * Function prototypes
-  */
-@@ -647,6 +640,7 @@ extern void ext3_check_inodes_bitmap (st
- extern unsigned long ext3_count_free (struct buffer_head *, unsigned);
- /* inode.c */
-+extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
- extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
- extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
---- linux-2.4.18-p4smp/include/linux/ext3_jbd.h~linux-2.4.18ea-0.8.26  2003-07-21 22:29:27.000000000 -0600
-+++ linux-2.4.18-p4smp-braam/include/linux/ext3_jbd.h  2003-07-21 22:49:05.000000000 -0600
-@@ -30,13 +30,19 @@
- #define EXT3_SINGLEDATA_TRANS_BLOCKS  8
-+/* Extended attributes may touch two data buffers, two bitmap buffers,
-+ * and two group and summaries. */
-+
-+#define EXT3_XATTR_TRANS_BLOCKS               8
-+
- /* Define the minimum size for a transaction which modifies data.  This
-  * needs to take into account the fact that we may end up modifying two
-  * quota files too (one for the group, one for the user quota).  The
-  * superblock only gets updated once, of course, so don't bother
-  * counting that again for the quota updates. */
--#define EXT3_DATA_TRANS_BLOCKS                (3 * EXT3_SINGLEDATA_TRANS_BLOCKS - 2)
-+#define EXT3_DATA_TRANS_BLOCKS                (3 * EXT3_SINGLEDATA_TRANS_BLOCKS + \
-+                                       EXT3_XATTR_TRANS_BLOCKS - 2)
- extern int ext3_writepage_trans_blocks(struct inode *inode);
---- /dev/null  2003-01-30 03:24:37.000000000 -0700
-+++ linux-2.4.18-p4smp-braam/include/linux/ext3_xattr.h        2003-07-21 22:49:05.000000000 -0600
-@@ -0,0 +1,155 @@
-+/*
-+  File: linux/ext3_xattr.h
-+
-+  On-disk format of extended attributes for the ext3 filesystem.
-+
-+  (C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+*/
-+
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/xattr.h>
-+
-+/* Magic value in attribute blocks */
-+#define EXT3_XATTR_MAGIC              0xEA020000
-+
-+/* Maximum number of references to one attribute block */
-+#define EXT3_XATTR_REFCOUNT_MAX               1024
-+
-+/* Name indexes */
-+#define EXT3_XATTR_INDEX_MAX                  10
-+#define EXT3_XATTR_INDEX_USER                 1
-+
-+struct ext3_xattr_header {
-+      __u32   h_magic;        /* magic number for identification */
-+      __u32   h_refcount;     /* reference count */
-+      __u32   h_blocks;       /* number of disk blocks used */
-+      __u32   h_hash;         /* hash value of all attributes */
-+      __u32   h_reserved[4];  /* zero right now */
-+};
-+
-+struct ext3_xattr_entry {
-+      __u8    e_name_len;     /* length of name */
-+      __u8    e_name_index;   /* attribute name index */
-+      __u16   e_value_offs;   /* offset in disk block of value */
-+      __u32   e_value_block;  /* disk block attribute is stored on (n/i) */
-+      __u32   e_value_size;   /* size of attribute value */
-+      __u32   e_hash;         /* hash value of name and value */
-+      char    e_name[0];      /* attribute name */
-+};
-+
-+#define EXT3_XATTR_PAD_BITS           2
-+#define EXT3_XATTR_PAD                (1<<EXT3_XATTR_PAD_BITS)
-+#define EXT3_XATTR_ROUND              (EXT3_XATTR_PAD-1)
-+#define EXT3_XATTR_LEN(name_len) \
-+      (((name_len) + EXT3_XATTR_ROUND + \
-+      sizeof(struct ext3_xattr_entry)) & ~EXT3_XATTR_ROUND)
-+#define EXT3_XATTR_NEXT(entry) \
-+      ( (struct ext3_xattr_entry *)( \
-+        (char *)(entry) + EXT3_XATTR_LEN((entry)->e_name_len)) )
-+#define EXT3_XATTR_SIZE(size) \
-+      (((size) + EXT3_XATTR_ROUND) & ~EXT3_XATTR_ROUND)
-+
-+#ifdef __KERNEL__
-+
-+# ifdef CONFIG_EXT3_FS_XATTR
-+
-+struct ext3_xattr_handler {
-+      char *prefix;
-+      size_t (*list)(char *list, struct inode *inode, const char *name,
-+                     int name_len);
-+      int (*get)(struct inode *inode, const char *name, void *buffer,
-+                 size_t size);
-+      int (*set)(struct inode *inode, const char *name, void *buffer,
-+                 size_t size, int flags);
-+};
-+
-+extern int ext3_xattr_register(int, struct ext3_xattr_handler *);
-+extern void ext3_xattr_unregister(int, struct ext3_xattr_handler *);
-+
-+extern int ext3_setxattr(struct dentry *, const char *, void *, size_t, int);
-+extern ssize_t ext3_getxattr(struct dentry *, const char *, void *, size_t);
-+extern ssize_t ext3_listxattr(struct dentry *, char *, size_t);
-+extern int ext3_removexattr(struct dentry *, const char *);
-+
-+extern int ext3_xattr_get(struct inode *, int, const char *, void *, size_t);
-+extern int ext3_xattr_list(struct inode *, char *, size_t);
-+extern int ext3_xattr_set(handle_t *handle, struct inode *, int, const char *, void *, size_t, int);
-+
-+extern void ext3_xattr_drop_inode(handle_t *, struct inode *);
-+extern void ext3_xattr_put_super(struct super_block *);
-+
-+extern int init_ext3_xattr(void) __init;
-+extern void exit_ext3_xattr(void);
-+
-+# else  /* CONFIG_EXT3_FS_XATTR */
-+#  define ext3_setxattr               NULL
-+#  define ext3_getxattr               NULL
-+#  define ext3_listxattr      NULL
-+#  define ext3_removexattr    NULL
-+
-+static inline int
-+ext3_xattr_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t size, int flags)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext3_xattr_list(struct inode *inode, void *buffer, size_t size, int flags)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext3_xattr_set(handle_t *handle, struct inode *inode, int name_index,
-+             const char *name, void *value, size_t size, int flags)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline void
-+ext3_xattr_drop_inode(handle_t *handle, struct inode *inode)
-+{
-+}
-+
-+static inline void
-+ext3_xattr_put_super(struct super_block *sb)
-+{
-+}
-+
-+static inline int
-+init_ext3_xattr(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext3_xattr(void)
-+{
-+}
-+
-+# endif  /* CONFIG_EXT3_FS_XATTR */
-+
-+# ifdef CONFIG_EXT3_FS_XATTR_USER
-+
-+extern int init_ext3_xattr_user(void) __init;
-+extern void exit_ext3_xattr_user(void);
-+
-+# else  /* CONFIG_EXT3_FS_XATTR_USER */
-+
-+static inline int
-+init_ext3_xattr_user(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext3_xattr_user(void)
-+{
-+}
-+
-+#endif  /* CONFIG_EXT3_FS_XATTR_USER */
-+
-+#endif  /* __KERNEL__ */
-+
---- /dev/null  2003-01-30 03:24:37.000000000 -0700
-+++ linux-2.4.18-p4smp-braam/include/linux/xattr.h     2003-07-21 22:49:05.000000000 -0600
-@@ -0,0 +1,15 @@
-+/*
-+  File: linux/xattr.h
-+
-+  Extended attributes handling.
-+
-+  Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org>
-+  Copyright (C) 2001 SGI - Silicon Graphics, Inc <linux-xfs@oss.sgi.com>
-+*/
-+#ifndef _LINUX_XATTR_H
-+#define _LINUX_XATTR_H
-+
-+#define XATTR_CREATE  1       /* set value, fail if attr already exists */
-+#define XATTR_REPLACE 2       /* set value, fail if attr does not exist */
-+
-+#endif        /* _LINUX_XATTR_H */
---- linux-2.4.18-p4smp/fs/ext3/Makefile~linux-2.4.18ea-0.8.26  2003-07-21 22:27:37.000000000 -0600
-+++ linux-2.4.18-p4smp-braam/fs/ext3/Makefile  2003-07-21 22:51:23.000000000 -0600
-@@ -9,10 +9,10 @@
- O_TARGET := ext3.o
--export-objs :=        super.o inode.o
-+export-objs :=        ext3-exports.o
- obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
--              ioctl.o namei.o super.o symlink.o
-+              ioctl.o namei.o super.o symlink.o xattr.o ext3-exports.o
- obj-m    := $(O_TARGET)
- include $(TOPDIR)/Rules.make
-
-_
diff --git a/lustre/kernel_patches/patches/linux-2.4.19-pre1-xattr-0.8.54.patch b/lustre/kernel_patches/patches/linux-2.4.19-pre1-xattr-0.8.54.patch
deleted file mode 100644 (file)
index 4cf7592..0000000
+++ /dev/null
@@ -1,6045 +0,0 @@
- Documentation/Configure.help  |   66 ++
- arch/alpha/defconfig          |    7 
- arch/alpha/kernel/entry.S     |   12 
- arch/arm/defconfig            |    7 
- arch/arm/kernel/calls.S       |   24 
- arch/i386/defconfig           |    7 
- arch/ia64/defconfig           |    7 
- arch/ia64/kernel/entry.S      |   24 
- arch/m68k/defconfig           |    7 
- arch/mips/defconfig           |    7 
- arch/mips64/defconfig         |    7 
- arch/ppc/defconfig            |   14 
- arch/ppc64/kernel/misc.S      |    2 
- arch/s390/defconfig           |    7 
- arch/s390/kernel/entry.S      |   24 
- arch/s390x/defconfig          |    7 
- arch/s390x/kernel/entry.S     |   24 
- arch/s390x/kernel/wrapper32.S |   92 +++
- arch/sparc/defconfig          |    7 
- arch/sparc/kernel/systbls.S   |   10 
- arch/sparc64/defconfig        |    7 
- arch/sparc64/kernel/systbls.S |   20 
- fs/Config.in                  |   14 
- fs/Makefile                   |    3 
- fs/ext2/Makefile              |    4 
- fs/ext2/file.c                |    5 
- fs/ext2/ialloc.c              |    2 
- fs/ext2/inode.c               |   34 -
- fs/ext2/namei.c               |   14 
- fs/ext2/super.c               |   29 
- fs/ext2/symlink.c             |   14 
- fs/ext2/xattr.c               | 1212 +++++++++++++++++++++++++++++++++++++++++
- fs/ext2/xattr_user.c          |  103 +++
- fs/ext3/Makefile              |   10 
- fs/ext3/file.c                |    5 
- fs/ext3/ialloc.c              |    2 
- fs/ext3/inode.c               |   35 -
- fs/ext3/namei.c               |   21 
- fs/ext3/super.c               |   36 +
- fs/ext3/symlink.c             |   14 
- fs/ext3/xattr.c               | 1225 ++++++++++++++++++++++++++++++++++++++++++
- fs/ext3/xattr_user.c          |  111 +++
- fs/jfs/jfs_xattr.h            |    6 
- fs/jfs/xattr.c                |    6 
- fs/mbcache.c                  |  648 ++++++++++++++++++++++
- include/asm-arm/unistd.h      |    2 
- include/asm-ia64/unistd.h     |   13 
- include/asm-ppc64/unistd.h    |    2 
- include/asm-s390/unistd.h     |   15 
- include/asm-s390x/unistd.h    |   15 
- include/asm-sparc/unistd.h    |   24 
- include/asm-sparc64/unistd.h  |   24 
- include/linux/cache_def.h     |   15 
- include/linux/errno.h         |    4 
- include/linux/ext2_fs.h       |   31 -
- include/linux/ext2_xattr.h    |  157 +++++
- include/linux/ext3_fs.h       |   31 -
- include/linux/ext3_jbd.h      |    8 
- include/linux/ext3_xattr.h    |  157 +++++
- include/linux/fs.h            |    2 
- include/linux/mbcache.h       |   69 ++
- kernel/ksyms.c                |    4 
- mm/vmscan.c                   |   35 +
- fs/ext3/ext3-exports.c        |   14 +  
- 64 files changed, 4355 insertions(+), 195 deletions(-)
-
-Index: linux-2.4.19-pre1/Documentation/Configure.help
-===================================================================
---- linux-2.4.19-pre1.orig/Documentation/Configure.help        2004-01-14 01:11:29.000000000 +0300
-+++ linux-2.4.19-pre1/Documentation/Configure.help     2004-01-14 01:11:49.000000000 +0300
-@@ -14035,6 +14035,39 @@
-   be compiled as a module, and so this could be dangerous.  Most
-   everyone wants to say Y here.
-+Ext2 extended attributes
-+CONFIG_EXT2_FS_XATTR
-+  Extended attributes are name:value pairs associated with inodes by
-+  the kernel or by users (see the attr(5) manual page, or visit
-+  <http://acl.bestbits.at/> for details).
-+
-+  If unsure, say N.
-+
-+Ext2 extended attribute block sharing
-+CONFIG_EXT2_FS_XATTR_SHARING
-+  This options enables code for sharing identical extended attribute
-+  blocks among multiple inodes.
-+
-+  Usually, say Y.
-+
-+Ext2 extended user attributes
-+CONFIG_EXT2_FS_XATTR_USER
-+  This option enables extended user attributes on ext2. Processes can
-+  associate extended user attributes with inodes to store additional
-+  information such as the character encoding of files, etc. (see the
-+  attr(5) manual page, or visit <http://acl.bestbits.at/> for details).
-+
-+  If unsure, say N.
-+
-+Ext2 trusted extended attributes
-+CONFIG_EXT2_FS_XATTR_TRUSTED
-+  This option enables extended attributes on ext2 that are accessible
-+  (and visible) only to users capable of CAP_SYS_ADMIN. Usually this
-+  is only the super user. Trusted extended attributes are meant for
-+  implementing system/security services.
-+
-+  If unsure, say N.
-+
- Ext3 journalling file system support (EXPERIMENTAL)
- CONFIG_EXT3_FS
-   This is the journalling version of the Second extended file system
-@@ -14067,6 +14100,39 @@
-   of your root partition (the one containing the directory /) cannot
-   be compiled as a module, and so this may be dangerous.
-+Ext3 extended attributes
-+CONFIG_EXT3_FS_XATTR
-+  Extended attributes are name:value pairs associated with inodes by
-+  the kernel or by users (see the attr(5) manual page, or visit
-+  <http://acl.bestbits.at/> for details).
-+
-+  If unsure, say N.
-+
-+Ext3 extended attribute block sharing
-+CONFIG_EXT3_FS_XATTR_SHARING
-+  This options enables code for sharing identical extended attribute
-+  blocks among multiple inodes.
-+
-+  Usually, say Y.
-+
-+Ext3 extended user attributes
-+CONFIG_EXT3_FS_XATTR_USER
-+  This option enables extended user attributes on ext3. Processes can
-+  associate extended user attributes with inodes to store additional
-+  information such as the character encoding of files, etc. (see the
-+  attr(5) manual page, or visit <http://acl.bestbits.at/> for details).
-+
-+  If unsure, say N.
-+
-+Ext3 trusted extended attributes
-+CONFIG_EXT3_FS_XATTR_TRUSTED
-+  This option enables extended attributes on ext3 that are accessible
-+  (and visible) only to users capable of CAP_SYS_ADMIN. Usually this
-+  is only the super user. Trusted extended attributes are meant for
-+  implementing system/security services.
-+
-+  If unsure, say N.
-+
- Journal Block Device support (JBD for ext3) (EXPERIMENTAL)
- CONFIG_JBD
-   This is a generic journalling layer for block devices.  It is
-Index: linux-2.4.19-pre1/arch/alpha/defconfig
-===================================================================
---- linux-2.4.19-pre1.orig/arch/alpha/defconfig        2001-11-20 02:19:42.000000000 +0300
-+++ linux-2.4.19-pre1/arch/alpha/defconfig     2004-01-14 01:11:49.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_ALPHA=y
- # CONFIG_UID16 is not set
- # CONFIG_RWSEM_GENERIC_SPINLOCK is not set
-Index: linux-2.4.19-pre1/arch/alpha/kernel/entry.S
-===================================================================
---- linux-2.4.19-pre1.orig/arch/alpha/kernel/entry.S   2001-11-10 00:45:35.000000000 +0300
-+++ linux-2.4.19-pre1/arch/alpha/kernel/entry.S        2004-01-14 01:11:49.000000000 +0300
-@@ -1148,3 +1148,16 @@
-       .quad sys_gettid
-       .quad sys_readahead
-       .quad sys_ni_syscall                    /* 380, sys_security */
-+      .quad sys_ni_syscall                    /* 381, sys_tkill */
-+      .quad sys_setxattr
-+      .quad sys_lsetxattr
-+      .quad sys_fsetxattr
-+      .quad sys_getxattr                      /* 385 */
-+      .quad sys_lgetxattr
-+      .quad sys_fgetxattr
-+      .quad sys_listxattr
-+      .quad sys_llistxattr
-+      .quad sys_flistxattr                    /* 390 */
-+      .quad sys_removexattr
-+      .quad sys_lremovexattr
-+      .quad sys_fremovexattr
-Index: linux-2.4.19-pre1/arch/arm/defconfig
-===================================================================
---- linux-2.4.19-pre1.orig/arch/arm/defconfig  2001-05-20 04:43:05.000000000 +0400
-+++ linux-2.4.19-pre1/arch/arm/defconfig       2004-01-14 01:11:49.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_ARM=y
- # CONFIG_EISA is not set
- # CONFIG_SBUS is not set
-Index: linux-2.4.19-pre1/arch/arm/kernel/calls.S
-===================================================================
---- linux-2.4.19-pre1.orig/arch/arm/kernel/calls.S     2001-10-08 21:39:18.000000000 +0400
-+++ linux-2.4.19-pre1/arch/arm/kernel/calls.S  2004-01-14 01:11:49.000000000 +0300
-@@ -236,6 +236,22 @@
-               .long   SYMBOL_NAME(sys_mincore)
- /* 220 */     .long   SYMBOL_NAME(sys_madvise)
-               .long   SYMBOL_NAME(sys_fcntl64)
-+              .long   SYMBOL_NAME(sys_ni_syscall) /* TUX */
-+              .long   SYMBOL_NAME(sys_ni_syscall) /* Security */
-+              .long   SYMBOL_NAME(sys_gettid)
-+ /* 225 */    .long   SYMBOL_NAME(sys_readahead)
-+              .long   SYMBOL_NAME(sys_setxattr)
-+              .long   SYMBOL_NAME(sys_lsetxattr)
-+              .long   SYMBOL_NAME(sys_fsetxattr)
-+              .long   SYMBOL_NAME(sys_getxattr)
-+/* 230 */     .long   SYMBOL_NAME(sys_lgetxattr)
-+              .long   SYMBOL_NAME(sys_fgetxattr)
-+              .long   SYMBOL_NAME(sys_listxattr)
-+              .long   SYMBOL_NAME(sys_llistxattr)
-+              .long   SYMBOL_NAME(sys_flistxattr)
-+/* 235 */     .long   SYMBOL_NAME(sys_removexattr)
-+              .long   SYMBOL_NAME(sys_lremovexattr)
-+              .long   SYMBOL_NAME(sys_fremovexattr)
- __syscall_end:
-               .rept   NR_syscalls - (__syscall_end - __syscall_start) / 4
-Index: linux-2.4.19-pre1/arch/i386/defconfig
-===================================================================
---- linux-2.4.19-pre1.orig/arch/i386/defconfig 2004-01-14 01:10:36.000000000 +0300
-+++ linux-2.4.19-pre1/arch/i386/defconfig      2004-01-14 01:11:49.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_X86=y
- CONFIG_ISA=y
- # CONFIG_SBUS is not set
-Index: linux-2.4.19-pre1/arch/i386/kernel/entry.S
-===================================================================
---- linux-2.4.19-pre1.orig/arch/i386/kernel/entry.S    2004-01-14 01:11:46.000000000 +0300
-+++ linux-2.4.19-pre1/arch/i386/kernel/entry.S 2004-01-14 01:11:49.000000000 +0300
-@@ -619,18 +619,18 @@
-       .long SYMBOL_NAME(sys_ni_syscall)       /* Reserved for Security */
-       .long SYMBOL_NAME(sys_gettid)
-       .long SYMBOL_NAME(sys_readahead)        /* 225 */
--      .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for setxattr */
--      .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for lsetxattr */
--      .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for fsetxattr */
--      .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for getxattr */
--      .long SYMBOL_NAME(sys_ni_syscall)       /* 230 reserved for lgetxattr */
--      .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for fgetxattr */
--      .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for listxattr */
--      .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for llistxattr */
--      .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for flistxattr */
--      .long SYMBOL_NAME(sys_ni_syscall)       /* 235 reserved for removexattr */
--      .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for lremovexattr */
--      .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for fremovexattr */
-+      .long SYMBOL_NAME(sys_setxattr)
-+      .long SYMBOL_NAME(sys_lsetxattr)
-+      .long SYMBOL_NAME(sys_fsetxattr)
-+      .long SYMBOL_NAME(sys_getxattr)
-+      .long SYMBOL_NAME(sys_lgetxattr)        /* 230 */
-+      .long SYMBOL_NAME(sys_fgetxattr)
-+      .long SYMBOL_NAME(sys_listxattr)
-+      .long SYMBOL_NAME(sys_llistxattr)
-+      .long SYMBOL_NAME(sys_flistxattr)
-+      .long SYMBOL_NAME(sys_removexattr)      /* 235 */
-+      .long SYMBOL_NAME(sys_lremovexattr)
-+      .long SYMBOL_NAME(sys_fremovexattr)
-       .rept NR_syscalls-(.-sys_call_table)/4
-               .long SYMBOL_NAME(sys_ni_syscall)
-Index: linux-2.4.19-pre1/arch/ia64/defconfig
-===================================================================
---- linux-2.4.19-pre1.orig/arch/ia64/defconfig 2001-11-10 01:26:17.000000000 +0300
-+++ linux-2.4.19-pre1/arch/ia64/defconfig      2004-01-14 01:11:49.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- #
- # Code maturity level options
-Index: linux-2.4.19-pre1/arch/ia64/kernel/entry.S
-===================================================================
---- linux-2.4.19-pre1.orig/arch/ia64/kernel/entry.S    2001-11-10 01:26:17.000000000 +0300
-+++ linux-2.4.19-pre1/arch/ia64/kernel/entry.S 2004-01-14 01:11:49.000000000 +0300
-@@ -1130,18 +1130,18 @@
-       data8 sys_getdents64
-       data8 sys_getunwind                     // 1215
-       data8 sys_readahead
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall                   // 1220
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall                   // 1225
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
-+      data8 sys_setxattr
-+      data8 sys_lsetxattr
-+      data8 sys_fsetxattr
-+      data8 sys_getxattr                      // 1220
-+      data8 sys_lgetxattr
-+      data8 sys_fgetxattr
-+      data8 sys_listxattr
-+      data8 sys_llistxattr
-+      data8 sys_flistxattr                    // 1225
-+      data8 sys_removexattr
-+      data8 sys_lremovexattr
-+      data8 sys_fremovexattr
-       data8 ia64_ni_syscall
-       data8 ia64_ni_syscall                   // 1230
-       data8 ia64_ni_syscall
-Index: linux-2.4.19-pre1/arch/m68k/defconfig
-===================================================================
---- linux-2.4.19-pre1.orig/arch/m68k/defconfig 2000-06-19 23:56:08.000000000 +0400
-+++ linux-2.4.19-pre1/arch/m68k/defconfig      2004-01-14 01:11:49.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_UID16=y
- #
-Index: linux-2.4.19-pre1/arch/mips/defconfig
-===================================================================
---- linux-2.4.19-pre1.orig/arch/mips/defconfig 2001-09-09 21:43:02.000000000 +0400
-+++ linux-2.4.19-pre1/arch/mips/defconfig      2004-01-14 01:11:49.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_MIPS=y
- # CONFIG_SMP is not set
-Index: linux-2.4.19-pre1/arch/mips64/defconfig
-===================================================================
---- linux-2.4.19-pre1.orig/arch/mips64/defconfig       2001-09-09 21:43:02.000000000 +0400
-+++ linux-2.4.19-pre1/arch/mips64/defconfig    2004-01-14 01:11:49.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- #
- # Code maturity level options
-Index: linux-2.4.19-pre1/arch/ppc/defconfig
-===================================================================
---- linux-2.4.19-pre1.orig/arch/ppc/defconfig  2004-01-14 01:10:36.000000000 +0300
-+++ linux-2.4.19-pre1/arch/ppc/defconfig       2004-01-14 01:11:49.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- # CONFIG_UID16 is not set
- # CONFIG_RWSEM_GENERIC_SPINLOCK is not set
- CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-Index: linux-2.4.19-pre1/arch/s390/defconfig
-===================================================================
---- linux-2.4.19-pre1.orig/arch/s390/defconfig 2004-01-14 01:10:36.000000000 +0300
-+++ linux-2.4.19-pre1/arch/s390/defconfig      2004-01-14 01:11:49.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- # CONFIG_ISA is not set
- # CONFIG_EISA is not set
- # CONFIG_MCA is not set
-Index: linux-2.4.19-pre1/arch/s390/kernel/entry.S
-===================================================================
---- linux-2.4.19-pre1.orig/arch/s390/kernel/entry.S    2004-01-14 01:10:36.000000000 +0300
-+++ linux-2.4.19-pre1/arch/s390/kernel/entry.S 2004-01-14 01:11:49.000000000 +0300
-@@ -599,8 +599,19 @@
-         .long  sys_fcntl64 
-       .long  sys_ni_syscall            /* 222 - reserved for posix_acl */
-       .long  sys_ni_syscall            /* 223 - reserved for posix_acl */
--      .long  sys_ni_syscall            /* 224 - reserved for posix_acl */
--      .rept  255-224
-+      .long  sys_setxattr
-+      .long  sys_lsetxattr            /* 225 */
-+      .long  sys_fsetxattr
-+      .long  sys_getxattr
-+      .long  sys_lgetxattr
-+      .long  sys_fgetxattr
-+      .long  sys_listxattr            /* 230 */
-+      .long  sys_llistxattr
-+      .long  sys_flistxattr
-+      .long  sys_removexattr
-+      .long  sys_lremovexattr
-+      .long  sys_fremovexattr         /* 235 */
-+      .rept  255-235
-       .long  sys_ni_syscall
-       .endr
-Index: linux-2.4.19-pre1/arch/s390x/defconfig
-===================================================================
---- linux-2.4.19-pre1.orig/arch/s390x/defconfig        2004-01-14 01:10:36.000000000 +0300
-+++ linux-2.4.19-pre1/arch/s390x/defconfig     2004-01-14 01:11:49.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- # CONFIG_ISA is not set
- # CONFIG_EISA is not set
- # CONFIG_MCA is not set
-Index: linux-2.4.19-pre1/arch/s390x/kernel/entry.S
-===================================================================
---- linux-2.4.19-pre1.orig/arch/s390x/kernel/entry.S   2004-01-14 01:10:36.000000000 +0300
-+++ linux-2.4.19-pre1/arch/s390x/kernel/entry.S        2004-01-14 01:11:49.000000000 +0300
-@@ -632,8 +632,19 @@
-       .long  SYSCALL(sys_ni_syscall,sys32_fcntl64_wrapper)
-       .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 222 - reserved for posix_acl */
-       .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 223 - reserved for posix_acl */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 224 - reserved for posix_acl */
--        .rept  255-224
-+      .long  SYSCALL(sys_setxattr,sys32_setxattr_wrapper)
-+      .long  SYSCALL(sys_lsetxattr,sys32_lsetxattr_wrapper)   /* 225 */
-+      .long  SYSCALL(sys_fsetxattr,sys32_fsetxattr_wrapper)
-+      .long  SYSCALL(sys_getxattr,sys32_getxattr_wrapper)
-+      .long  SYSCALL(sys_lgetxattr,sys32_lgetxattr_wrapper)
-+      .long  SYSCALL(sys_fgetxattr,sys32_fgetxattr_wrapper)
-+      .long  SYSCALL(sys_listxattr,sys32_listxattr_wrapper)   /* 230 */
-+      .long  SYSCALL(sys_llistxattr,sys32_llistxattr_wrapper)
-+      .long  SYSCALL(sys_flistxattr,sys32_flistxattr_wrapper)
-+      .long  SYSCALL(sys_removexattr,sys32_removexattr_wrapper)
-+      .long  SYSCALL(sys_lremovexattr,sys32_lremovexattr_wrapper)
-+      .long  SYSCALL(sys_fremovexattr,sys32_fremovexattr_wrapper)/* 235 */
-+        .rept  255-235
-       .long  SYSCALL(sys_ni_syscall,sys_ni_syscall)
-       .endr
-Index: linux-2.4.19-pre1/arch/s390x/kernel/wrapper32.S
-===================================================================
---- linux-2.4.19-pre1.orig/arch/s390x/kernel/wrapper32.S       2004-01-14 01:10:36.000000000 +0300
-+++ linux-2.4.19-pre1/arch/s390x/kernel/wrapper32.S    2004-01-14 01:11:49.000000000 +0300
-@@ -1091,3 +1091,95 @@
-       llgtr   %r3,%r3                 # struct stat64 *
-       llgfr   %r4,%r4                 # long
-       jg      sys32_fstat64           # branch to system call
-+
-+      .globl  sys32_setxattr_wrapper
-+sys32_setxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      lgfr    %r6,%r6                 # int
-+      jg      sys_setxattr
-+
-+      .globl  sys32_lsetxattr_wrapper
-+sys32_lsetxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      lgfr    %r6,%r6                 # int
-+      jg      sys_lsetxattr
-+
-+      .globl  sys32_fsetxattr_wrapper
-+sys32_fsetxattr_wrapper:
-+      lgfr    %r2,%r2                 # int
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      lgfr    %r6,%r6                 # int
-+      jg      sys_fsetxattr
-+
-+      .globl  sys32_getxattr_wrapper
-+sys32_getxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      jg      sys_getxattr
-+
-+      .globl  sys32_lgetxattr_wrapper
-+sys32_lgetxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      jg      sys_lgetxattr
-+
-+      .globl  sys32_fgetxattr_wrapper
-+sys32_fgetxattr_wrapper:
-+      lgfr    %r2,%r2                 # int
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      jg      sys_fgetxattr
-+
-+      .globl  sys32_listxattr_wrapper
-+sys32_listxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgfr   %r4,%r4                 # size_t
-+      jg      sys_listxattr
-+
-+      .globl  sys32_llistxattr_wrapper
-+sys32_llistxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgfr   %r4,%r4                 # size_t
-+      jg      sys_llistxattr
-+
-+      .globl  sys32_flistxattr_wrapper
-+sys32_flistxattr_wrapper:
-+      lgfr    %r2,%r2                 # int
-+      llgtr   %r3,%r3                 # char *
-+      llgfr   %r4,%r4                 # size_t
-+      jg      sys_flistxattr
-+
-+      .globl  sys32_removexattr_wrapper
-+sys32_removexattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      jg      sys_removexattr
-+
-+      .globl  sys32_lremovexattr_wrapper
-+sys32_lremovexattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      jg      sys_lremovexattr
-+
-+      .globl  sys32_fremovexattr_wrapper
-+sys32_fremovexattr_wrapper:
-+      lgfr    %r2,%r2                 # int
-+      llgtr   %r3,%r3                 # char *
-+      jg      sys_fremovexattr
-+
-+
-Index: linux-2.4.19-pre1/arch/sparc/defconfig
-===================================================================
---- linux-2.4.19-pre1.orig/arch/sparc/defconfig        2004-01-14 01:10:36.000000000 +0300
-+++ linux-2.4.19-pre1/arch/sparc/defconfig     2004-01-14 01:11:49.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_UID16=y
- CONFIG_HIGHMEM=y
-Index: linux-2.4.19-pre1/arch/sparc/kernel/systbls.S
-===================================================================
---- linux-2.4.19-pre1.orig/arch/sparc/kernel/systbls.S 2001-10-21 21:36:54.000000000 +0400
-+++ linux-2.4.19-pre1/arch/sparc/kernel/systbls.S      2004-01-14 01:11:49.000000000 +0300
-@@ -51,11 +51,11 @@
- /*150*/       .long sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64
- /*155*/       .long sys_fcntl64, sys_nis_syscall, sys_statfs, sys_fstatfs, sys_oldumount
- /*160*/       .long sys_nis_syscall, sys_nis_syscall, sys_getdomainname, sys_setdomainname, sys_nis_syscall
--/*165*/       .long sys_quotactl, sys_nis_syscall, sys_mount, sys_ustat, sys_nis_syscall
--/*170*/       .long sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_getdents
--/*175*/       .long sys_setsid, sys_fchdir, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
--/*180*/       .long sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_sigpending, sys_query_module
--/*185*/       .long sys_setpgid, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_newuname
-+/*165*/       .long sys_quotactl, sys_nis_syscall, sys_mount, sys_ustat, sys_setxattr
-+/*170*/       .long sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr, sys_getdents
-+/*175*/       .long sys_setsid, sys_fchdir, sys_fgetxattr, sys_listxattr, sys_llistxattr
-+/*180*/       .long sys_flistxattr, sys_removexattr, sys_lremovexattr, sys_sigpending, sys_query_module
-+/*185*/       .long sys_setpgid, sys_fremovexattr, sys_tkill, sys_nis_syscall, sys_newuname
- /*190*/       .long sys_init_module, sys_personality, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
- /*195*/       .long sys_nis_syscall, sys_nis_syscall, sys_getppid, sparc_sigaction, sys_sgetmask
- /*200*/       .long sys_ssetmask, sys_sigsuspend, sys_newlstat, sys_uselib, old_readdir
-Index: linux-2.4.19-pre1/arch/sparc64/defconfig
-===================================================================
---- linux-2.4.19-pre1.orig/arch/sparc64/defconfig      2004-01-14 01:10:36.000000000 +0300
-+++ linux-2.4.19-pre1/arch/sparc64/defconfig   2004-01-14 01:11:49.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- #
- # Code maturity level options
-Index: linux-2.4.19-pre1/arch/sparc64/kernel/systbls.S
-===================================================================
---- linux-2.4.19-pre1.orig/arch/sparc64/kernel/systbls.S       2001-10-21 21:36:54.000000000 +0400
-+++ linux-2.4.19-pre1/arch/sparc64/kernel/systbls.S    2004-01-14 01:11:49.000000000 +0300
-@@ -52,11 +52,11 @@
- /*150*/       .word sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64
-       .word sys32_fcntl64, sys_nis_syscall, sys32_statfs, sys32_fstatfs, sys_oldumount
- /*160*/       .word sys_nis_syscall, sys_nis_syscall, sys_getdomainname, sys_setdomainname, sys_nis_syscall
--      .word sys32_quotactl, sys_nis_syscall, sys32_mount, sys_ustat, sys_nis_syscall
--/*170*/       .word sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys32_getdents
--      .word sys_setsid, sys_fchdir, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
--/*180*/       .word sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys32_sigpending, sys32_query_module
--      .word sys_setpgid, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sparc64_newuname
-+      .word sys32_quotactl, sys_nis_syscall, sys32_mount, sys_ustat, sys_setxattr
-+/*170*/       .word sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr, sys32_getdents
-+      .word sys_setsid, sys_fchdir, sys_fgetxattr, sys_listxattr, sys_llistxattr
-+/*180*/       .word sys_flistxattr, sys_removexattr, sys_lremovexattr, sys32_sigpending, sys32_query_module
-+      .word sys_setpgid, sys_fremovexattr, sys_tkill, sys_nis_syscall, sparc64_newuname
- /*190*/       .word sys32_init_module, sparc64_personality, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
-       .word sys_nis_syscall, sys_nis_syscall, sys_getppid, sys32_sigaction, sys_sgetmask
- /*200*/       .word sys_ssetmask, sys_sigsuspend, sys32_newlstat, sys_uselib, old32_readdir
-@@ -111,11 +111,11 @@
- /*150*/       .word sys_getsockname, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64
-       .word sys_nis_syscall, sys_nis_syscall, sys_statfs, sys_fstatfs, sys_oldumount
- /*160*/       .word sys_nis_syscall, sys_nis_syscall, sys_getdomainname, sys_setdomainname, sys_utrap_install
--      .word sys_quotactl, sys_nis_syscall, sys_mount, sys_ustat, sys_nis_syscall
--/*170*/       .word sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_getdents
--      .word sys_setsid, sys_fchdir, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
--/*180*/       .word sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_query_module
--      .word sys_setpgid, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sparc64_newuname
-+      .word sys_quotactl, sys_nis_syscall, sys_mount, sys_ustat, sys_setxattr
-+/*170*/       .word sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr, sys_getdents
-+      .word sys_setsid, sys_fchdir, sys_fgetxattr, sys_listxattr, sys_llistxattr
-+/*180*/       .word sys_flistxattr, sys_removexattr, sys_lremovexattr, sys_nis_syscall, sys_query_module
-+      .word sys_setpgid, sys_fremovexattr, sys_tkill, sys_nis_syscall, sparc64_newuname
- /*190*/       .word sys_init_module, sparc64_personality, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
-       .word sys_nis_syscall, sys_nis_syscall, sys_getppid, sys_nis_syscall, sys_sgetmask
- /*200*/       .word sys_ssetmask, sys_nis_syscall, sys_newlstat, sys_uselib, sys_nis_syscall
-Index: linux-2.4.19-pre1/fs/Config.in
-===================================================================
---- linux-2.4.19-pre1.orig/fs/Config.in        2004-01-14 01:10:37.000000000 +0300
-+++ linux-2.4.19-pre1/fs/Config.in     2004-01-14 01:11:49.000000000 +0300
-@@ -22,6 +22,11 @@
- dep_tristate 'BFS file system support (EXPERIMENTAL)' CONFIG_BFS_FS $CONFIG_EXPERIMENTAL
- tristate 'Ext3 journalling file system support (EXPERIMENTAL)' CONFIG_EXT3_FS
-+dep_mbool '  Ext3 extended attributes' CONFIG_EXT3_FS_XATTR $CONFIG_EXT3_FS
-+dep_bool '    Ext3 extended attribute block sharing' \
-+    CONFIG_EXT3_FS_XATTR_SHARING $CONFIG_EXT3_FS_XATTR
-+dep_bool '    Ext3 extended user attributes' \
-+    CONFIG_EXT3_FS_XATTR_USER $CONFIG_EXT3_FS_XATTR
- # CONFIG_JBD could be its own option (even modular), but until there are
- # other users than ext3, we will simply make it be the same as CONFIG_EXT3_FS
- # dep_tristate '  Journal Block Device support (JBD for ext3)' CONFIG_JBD $CONFIG_EXT3_FS
-@@ -77,6 +82,11 @@
- tristate 'ROM file system support' CONFIG_ROMFS_FS
- tristate 'Second extended fs support' CONFIG_EXT2_FS
-+dep_mbool '  Ext2 extended attributes' CONFIG_EXT2_FS_XATTR $CONFIG_EXT2_FS
-+dep_bool '    Ext2 extended attribute block sharing' \
-+    CONFIG_EXT2_FS_XATTR_SHARING $CONFIG_EXT2_FS_XATTR
-+dep_bool '    Ext2 extended user attributes' \
-+    CONFIG_EXT2_FS_XATTR_USER $CONFIG_EXT2_FS_XATTR
- tristate 'System V/Xenix/V7/Coherent file system support' CONFIG_SYSV_FS
-@@ -156,6 +166,10 @@
-   fi
- fi
-+# Meta block cache for Extended Attributes (ext2/ext3)
-+#tristate 'Meta block cache' CONFIG_FS_MBCACHE
-+define_tristate CONFIG_FS_MBCACHE y 
-+
- mainmenu_option next_comment
- comment 'Partition Types'
- source fs/partitions/Config.in
-Index: linux-2.4.19-pre1/fs/Makefile
-===================================================================
---- linux-2.4.19-pre1.orig/fs/Makefile 2004-01-14 01:11:49.000000000 +0300
-+++ linux-2.4.19-pre1/fs/Makefile      2004-01-14 01:11:49.000000000 +0300
-@@ -14,7 +14,7 @@
-               super.o block_dev.o char_dev.o stat.o exec.o pipe.o namei.o \
-               fcntl.o ioctl.o readdir.o select.o fifo.o locks.o \
-               dcache.o inode.o attr.o bad_inode.o file.o iobuf.o dnotify.o \
--              filesystems.o namespace.o seq_file.o
-+              filesystems.o namespace.o seq_file.o xattr.o
- ifeq ($(CONFIG_QUOTA),y)
- obj-y += dquot.o
-@@ -78,6 +78,9 @@
- obj-$(CONFIG_BINFMT_ELF)      += binfmt_elf.o
-+export-objs += mbcache.o
-+obj-$(CONFIG_FS_MBCACHE)      += mbcache.o
-+
- # persistent filesystems
- obj-y += $(join $(subdir-y),$(subdir-y:%=/%.o))
-Index: linux-2.4.19-pre1/fs/ext2/Makefile
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext2/Makefile    2001-10-11 19:05:18.000000000 +0400
-+++ linux-2.4.19-pre1/fs/ext2/Makefile 2004-01-14 01:11:49.000000000 +0300
-@@ -13,4 +13,8 @@
-               ioctl.o namei.o super.o symlink.o
- obj-m    := $(O_TARGET)
-+export-objs += xattr.o
-+obj-$(CONFIG_EXT2_FS_XATTR) += xattr.o
-+obj-$(CONFIG_EXT2_FS_XATTR_USER) += xattr_user.o
-+
- include $(TOPDIR)/Rules.make
-Index: linux-2.4.19-pre1/fs/ext2/file.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext2/file.c      2001-10-11 19:05:18.000000000 +0400
-+++ linux-2.4.19-pre1/fs/ext2/file.c   2004-01-14 01:11:49.000000000 +0300
-@@ -20,6 +20,7 @@
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- #include <linux/sched.h>
- /*
-@@ -51,4 +52,8 @@
- struct inode_operations ext2_file_inode_operations = {
-       truncate:       ext2_truncate,
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
- };
-Index: linux-2.4.19-pre1/fs/ext2/ialloc.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext2/ialloc.c    2004-01-14 01:10:37.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext2/ialloc.c 2004-01-14 01:11:49.000000000 +0300
-@@ -15,6 +15,7 @@
- #include <linux/config.h>
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- #include <linux/locks.h>
- #include <linux/quotaops.h>
-@@ -167,6 +168,7 @@
-        */
-       if (!is_bad_inode(inode)) {
-               /* Quota is already initialized in iput() */
-+              ext2_xattr_delete_inode(inode);
-               DQUOT_FREE_INODE(inode);
-               DQUOT_DROP(inode);
-       }
-Index: linux-2.4.19-pre1/fs/ext2/inode.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext2/inode.c     2004-01-14 01:10:37.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext2/inode.c  2004-01-14 01:11:49.000000000 +0300
-@@ -39,6 +39,18 @@
- static int ext2_update_inode(struct inode * inode, int do_sync);
- /*
-+ * Test whether an inode is a fast symlink.
-+ */
-+static inline int ext2_inode_is_fast_symlink(struct inode *inode)
-+{
-+      int ea_blocks = inode->u.ext2_i.i_file_acl ?
-+              (inode->i_sb->s_blocksize >> 9) : 0;
-+
-+      return (S_ISLNK(inode->i_mode) &&
-+              inode->i_blocks - ea_blocks == 0);
-+}
-+
-+/*
-  * Called at each iput()
-  */
- void ext2_put_inode (struct inode * inode)
-@@ -53,9 +65,7 @@
- {
-       lock_kernel();
--      if (is_bad_inode(inode) ||
--          inode->i_ino == EXT2_ACL_IDX_INO ||
--          inode->i_ino == EXT2_ACL_DATA_INO)
-+      if (is_bad_inode(inode))
-               goto no_delete;
-       inode->u.ext2_i.i_dtime = CURRENT_TIME;
-       mark_inode_dirty(inode);
-@@ -800,6 +810,8 @@
-       if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
-           S_ISLNK(inode->i_mode)))
-               return;
-+      if (ext2_inode_is_fast_symlink(inode))
-+              return;
-       if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
-               return;
-@@ -889,8 +901,7 @@
-       unsigned long offset;
-       struct ext2_group_desc * gdp;
--      if ((inode->i_ino != EXT2_ROOT_INO && inode->i_ino != EXT2_ACL_IDX_INO &&
--           inode->i_ino != EXT2_ACL_DATA_INO &&
-+      if ((inode->i_ino != EXT2_ROOT_INO &&
-            inode->i_ino < EXT2_FIRST_INO(inode->i_sb)) ||
-           inode->i_ino > le32_to_cpu(inode->i_sb->u.ext2_sb.s_es->s_inodes_count)) {
-               ext2_error (inode->i_sb, "ext2_read_inode",
-@@ -975,10 +986,7 @@
-       for (block = 0; block < EXT2_N_BLOCKS; block++)
-               inode->u.ext2_i.i_data[block] = raw_inode->i_block[block];
--      if (inode->i_ino == EXT2_ACL_IDX_INO ||
--          inode->i_ino == EXT2_ACL_DATA_INO)
--              /* Nothing to do */ ;
--      else if (S_ISREG(inode->i_mode)) {
-+      if (S_ISREG(inode->i_mode)) {
-               inode->i_op = &ext2_file_inode_operations;
-               inode->i_fop = &ext2_file_operations;
-               inode->i_mapping->a_ops = &ext2_aops;
-@@ -987,15 +995,17 @@
-               inode->i_fop = &ext2_dir_operations;
-               inode->i_mapping->a_ops = &ext2_aops;
-       } else if (S_ISLNK(inode->i_mode)) {
--              if (!inode->i_blocks)
-+              if (ext2_inode_is_fast_symlink(inode))
-                       inode->i_op = &ext2_fast_symlink_inode_operations;
-               else {
--                      inode->i_op = &page_symlink_inode_operations;
-+                      inode->i_op = &ext2_symlink_inode_operations;
-                       inode->i_mapping->a_ops = &ext2_aops;
-               }
--      } else 
-+      } else {
-+              inode->i_op = &ext2_special_inode_operations;
-               init_special_inode(inode, inode->i_mode,
-                                  le32_to_cpu(raw_inode->i_block[0]));
-+      }
-       brelse (bh);
-       inode->i_attr_flags = 0;
-       if (inode->u.ext2_i.i_flags & EXT2_SYNC_FL) {
-Index: linux-2.4.19-pre1/fs/ext2/namei.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext2/namei.c     2001-10-04 09:57:36.000000000 +0400
-+++ linux-2.4.19-pre1/fs/ext2/namei.c  2004-01-14 01:11:49.000000000 +0300
-@@ -31,6 +31,7 @@
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- #include <linux/pagemap.h>
- /*
-@@ -136,7 +137,7 @@
-       if (l > sizeof (inode->u.ext2_i.i_data)) {
-               /* slow symlink */
--              inode->i_op = &page_symlink_inode_operations;
-+              inode->i_op = &ext2_symlink_inode_operations;
-               inode->i_mapping->a_ops = &ext2_aops;
-               err = block_symlink(inode, symname, l);
-               if (err)
-@@ -345,4 +346,15 @@
-       rmdir:          ext2_rmdir,
-       mknod:          ext2_mknod,
-       rename:         ext2_rename,
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
-+};
-+
-+struct inode_operations ext2_special_inode_operations = {
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
- };
-Index: linux-2.4.19-pre1/fs/ext2/super.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext2/super.c     2004-01-14 01:10:37.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext2/super.c  2004-01-14 01:11:49.000000000 +0300
-@@ -21,6 +21,7 @@
- #include <linux/string.h>
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- #include <linux/slab.h>
- #include <linux/init.h>
- #include <linux/locks.h>
-@@ -125,6 +126,7 @@
-       int db_count;
-       int i;
-+      ext2_xattr_put_super(sb);
-       if (!(sb->s_flags & MS_RDONLY)) {
-               struct ext2_super_block *es = EXT2_SB(sb)->s_es;
-@@ -175,6 +177,13 @@
-            this_char = strtok (NULL, ",")) {
-               if ((value = strchr (this_char, '=')) != NULL)
-                       *value++ = 0;
-+#ifdef CONFIG_EXT2_FS_XATTR_USER
-+              if (!strcmp (this_char, "user_xattr"))
-+                      set_opt (*mount_options, XATTR_USER);
-+              else if (!strcmp (this_char, "nouser_xattr"))
-+                      clear_opt (*mount_options, XATTR_USER);
-+              else
-+#endif
-               if (!strcmp (this_char, "bsddf"))
-                       clear_opt (*mount_options, MINIX_DF);
-               else if (!strcmp (this_char, "nouid32")) {
-@@ -424,6 +433,9 @@
-           blocksize = BLOCK_SIZE;
-       sb->u.ext2_sb.s_mount_opt = 0;
-+#ifdef CONFIG_EXT2_FS_XATTR_USER
-+      /* set_opt (sb->u.ext2_sb.s_mount_opt, XATTR_USER); */
-+#endif
-       if (!parse_options ((char *) data, &sb_block, &resuid, &resgid,
-           &sb->u.ext2_sb.s_mount_opt)) {
-               return NULL;
-@@ -810,12 +822,27 @@
- static int __init init_ext2_fs(void)
- {
--        return register_filesystem(&ext2_fs_type);
-+      int error = init_ext2_xattr();
-+      if (error)
-+              return error;
-+      error = init_ext2_xattr_user();
-+      if (error)
-+              goto fail;
-+      error = register_filesystem(&ext2_fs_type);
-+      if (!error)
-+              return 0;
-+
-+      exit_ext2_xattr_user();
-+fail:
-+      exit_ext2_xattr();
-+      return error;
- }
- static void __exit exit_ext2_fs(void)
- {
-       unregister_filesystem(&ext2_fs_type);
-+      exit_ext2_xattr_user();
-+      exit_ext2_xattr();
- }
- EXPORT_NO_SYMBOLS;
-Index: linux-2.4.19-pre1/fs/ext2/symlink.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext2/symlink.c   2000-09-28 00:41:33.000000000 +0400
-+++ linux-2.4.19-pre1/fs/ext2/symlink.c        2004-01-14 01:11:49.000000000 +0300
-@@ -19,6 +19,7 @@
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- static int ext2_readlink(struct dentry *dentry, char *buffer, int buflen)
- {
-@@ -32,7 +33,20 @@
-       return vfs_follow_link(nd, s);
- }
-+struct inode_operations ext2_symlink_inode_operations = {
-+      readlink:       page_readlink,
-+      follow_link:    page_follow_link,
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
-+};
-+
- struct inode_operations ext2_fast_symlink_inode_operations = {
-       readlink:       ext2_readlink,
-       follow_link:    ext2_follow_link,
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
- };
-Index: linux-2.4.19-pre1/fs/ext2/xattr.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext2/xattr.c     2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext2/xattr.c  2004-01-14 01:11:49.000000000 +0300
-@@ -0,0 +1,1212 @@
-+/*
-+ * linux/fs/ext2/xattr.c
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ *
-+ * Fix by Harrison Xing <harrison@mountainviewdata.com>.
-+ * Extended attributes for symlinks and special files added per
-+ *  suggestion of Luka Renko <luka.renko@hermes.si>.
-+ */
-+
-+/*
-+ * Extended attributes are stored on disk blocks allocated outside of
-+ * any inode. The i_file_acl field is then made to point to this allocated
-+ * block. If all extended attributes of an inode are identical, these
-+ * inodes may share the same extended attribute block. Such situations
-+ * are automatically detected by keeping a cache of recent attribute block
-+ * numbers and hashes over the block's contents in memory.
-+ *
-+ *
-+ * Extended attribute block layout:
-+ *
-+ *   +------------------+
-+ *   | header           |
-+ *   | entry 1          | |
-+ *   | entry 2          | | growing downwards
-+ *   | entry 3          | v
-+ *   | four null bytes  |
-+ *   | . . .            |
-+ *   | value 1          | ^
-+ *   | value 3          | | growing upwards
-+ *   | value 2          | |
-+ *   +------------------+
-+ *
-+ * The block header is followed by multiple entry descriptors. These entry
-+ * descriptors are variable in size, and alligned to EXT2_XATTR_PAD
-+ * byte boundaries. The entry descriptors are sorted by attribute name,
-+ * so that two extended attribute blocks can be compared efficiently.
-+ *
-+ * Attribute values are aligned to the end of the block, stored in
-+ * no specific order. They are also padded to EXT2_XATTR_PAD byte
-+ * boundaries. No additional gaps are left between them.
-+ *
-+ * Locking strategy
-+ * ----------------
-+ * The VFS already holds the BKL and the inode->i_sem semaphore when any of
-+ * the xattr inode operations are called, so we are guaranteed that only one
-+ * processes accesses extended attributes of an inode at any time.
-+ *
-+ * For writing we also grab the ext2_xattr_sem semaphore. This ensures that
-+ * only a single process is modifying an extended attribute block, even
-+ * if the block is shared among inodes.
-+ *
-+ * Note for porting to 2.5
-+ * -----------------------
-+ * The BKL will no longer be held in the xattr inode operations.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/locks.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
-+#include <linux/mbcache.h>
-+#include <linux/quotaops.h>
-+#include <asm/semaphore.h>
-+#include <linux/compatmac.h>
-+
-+/* These symbols may be needed by a module. */
-+EXPORT_SYMBOL(ext2_xattr_register);
-+EXPORT_SYMBOL(ext2_xattr_unregister);
-+EXPORT_SYMBOL(ext2_xattr_get);
-+EXPORT_SYMBOL(ext2_xattr_list);
-+EXPORT_SYMBOL(ext2_xattr_set);
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+# define mark_buffer_dirty(bh) mark_buffer_dirty(bh, 1)
-+#endif
-+
-+#define HDR(bh) ((struct ext2_xattr_header *)((bh)->b_data))
-+#define ENTRY(ptr) ((struct ext2_xattr_entry *)(ptr))
-+#define FIRST_ENTRY(bh) ENTRY(HDR(bh)+1)
-+#define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
-+
-+#ifdef EXT2_XATTR_DEBUG
-+# define ea_idebug(inode, f...) do { \
-+              printk(KERN_DEBUG "inode %s:%ld: ", \
-+                      kdevname(inode->i_dev), inode->i_ino); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+# define ea_bdebug(bh, f...) do { \
-+              printk(KERN_DEBUG "block %s:%ld: ", \
-+                      kdevname(bh->b_dev), bh->b_blocknr); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+#else
-+# define ea_idebug(f...)
-+# define ea_bdebug(f...)
-+#endif
-+
-+static int ext2_xattr_set2(struct inode *, struct buffer_head *,
-+                         struct ext2_xattr_header *);
-+
-+#ifdef CONFIG_EXT2_FS_XATTR_SHARING
-+
-+static int ext2_xattr_cache_insert(struct buffer_head *);
-+static struct buffer_head *ext2_xattr_cache_find(struct inode *,
-+                                               struct ext2_xattr_header *);
-+static void ext2_xattr_cache_remove(struct buffer_head *);
-+static void ext2_xattr_rehash(struct ext2_xattr_header *,
-+                            struct ext2_xattr_entry *);
-+
-+static struct mb_cache *ext2_xattr_cache;
-+
-+#else
-+# define ext2_xattr_cache_insert(bh) 0
-+# define ext2_xattr_cache_find(inode, header) NULL
-+# define ext2_xattr_cache_remove(bh) while(0) {}
-+# define ext2_xattr_rehash(header, entry) while(0) {}
-+#endif
-+
-+/*
-+ * If a file system does not share extended attributes among inodes,
-+ * we should not need the ext2_xattr_sem semaphore. However, the
-+ * filesystem may still contain shared blocks, so we always take
-+ * the lock.
-+ */
-+
-+DECLARE_MUTEX(ext2_xattr_sem);
-+
-+static inline int
-+ext2_xattr_new_block(struct inode *inode, int * errp, int force)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      int goal = le32_to_cpu(EXT2_SB(sb)->s_es->s_first_data_block) +
-+              EXT2_I(inode)->i_block_group * EXT2_BLOCKS_PER_GROUP(sb);
-+
-+      /* How can we enforce the allocation? */
-+      int block = ext2_new_block(inode, goal, 0, 0, errp);
-+#ifdef OLD_QUOTAS
-+      if (!*errp)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#endif
-+      return block;
-+}
-+
-+static inline int
-+ext2_xattr_quota_alloc(struct inode *inode, int force)
-+{
-+      /* How can we enforce the allocation? */
-+#ifdef OLD_QUOTAS
-+      int error = DQUOT_ALLOC_BLOCK(inode->i_sb, inode, 1);
-+      if (!error)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#else
-+      int error = DQUOT_ALLOC_BLOCK(inode, 1);
-+#endif
-+      return error;
-+}
-+
-+#ifdef OLD_QUOTAS
-+
-+static inline void
-+ext2_xattr_quota_free(struct inode *inode)
-+{
-+      DQUOT_FREE_BLOCK(inode->i_sb, inode, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+static inline void
-+ext2_xattr_free_block(struct inode * inode, unsigned long block)
-+{
-+      ext2_free_blocks(inode, block, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+#else
-+# define ext2_xattr_quota_free(inode) \
-+      DQUOT_FREE_BLOCK(inode, 1)
-+# define ext2_xattr_free_block(inode, block) \
-+      ext2_free_blocks(inode, block, 1)
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
-+
-+static inline struct buffer_head *
-+sb_bread(struct super_block *sb, int block)
-+{
-+      return bread(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+static inline struct buffer_head *
-+sb_getblk(struct super_block *sb, int block)
-+{
-+      return getblk(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+#endif
-+
-+struct ext2_xattr_handler *ext2_xattr_handlers[EXT2_XATTR_INDEX_MAX];
-+rwlock_t ext2_handler_lock = RW_LOCK_UNLOCKED;
-+
-+int
-+ext2_xattr_register(int name_index, struct ext2_xattr_handler *handler)
-+{
-+      int error = -EINVAL;
-+
-+      if (name_index > 0 && name_index <= EXT2_XATTR_INDEX_MAX) {
-+              write_lock(&ext2_handler_lock);
-+              if (!ext2_xattr_handlers[name_index-1]) {
-+                      ext2_xattr_handlers[name_index-1] = handler;
-+                      error = 0;
-+              }
-+              write_unlock(&ext2_handler_lock);
-+      }
-+      return error;
-+}
-+
-+void
-+ext2_xattr_unregister(int name_index, struct ext2_xattr_handler *handler)
-+{
-+      if (name_index > 0 || name_index <= EXT2_XATTR_INDEX_MAX) {
-+              write_lock(&ext2_handler_lock);
-+              ext2_xattr_handlers[name_index-1] = NULL;
-+              write_unlock(&ext2_handler_lock);
-+      }
-+}
-+
-+static inline const char *
-+strcmp_prefix(const char *a, const char *a_prefix)
-+{
-+      while (*a_prefix && *a == *a_prefix) {
-+              a++;
-+              a_prefix++;
-+      }
-+      return *a_prefix ? NULL : a;
-+}
-+
-+/*
-+ * Decode the extended attribute name, and translate it into
-+ * the name_index and name suffix.
-+ */
-+static struct ext2_xattr_handler *
-+ext2_xattr_resolve_name(const char **name)
-+{
-+      struct ext2_xattr_handler *handler = NULL;
-+      int i;
-+
-+      if (!*name)
-+              return NULL;
-+      read_lock(&ext2_handler_lock);
-+      for (i=0; i<EXT2_XATTR_INDEX_MAX; i++) {
-+              if (ext2_xattr_handlers[i]) {
-+                      const char *n = strcmp_prefix(*name,
-+                              ext2_xattr_handlers[i]->prefix);
-+                      if (n) {
-+                              handler = ext2_xattr_handlers[i];
-+                              *name = n;
-+                              break;
-+                      }
-+              }
-+      }
-+      read_unlock(&ext2_handler_lock);
-+      return handler;
-+}
-+
-+static inline struct ext2_xattr_handler *
-+ext2_xattr_handler(int name_index)
-+{
-+      struct ext2_xattr_handler *handler = NULL;
-+      if (name_index > 0 && name_index <= EXT2_XATTR_INDEX_MAX) {
-+              read_lock(&ext2_handler_lock);
-+              handler = ext2_xattr_handlers[name_index-1];
-+              read_unlock(&ext2_handler_lock);
-+      }
-+      return handler;
-+}
-+
-+/*
-+ * Inode operation getxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext2_getxattr(struct dentry *dentry, const char *name,
-+            void *buffer, size_t size)
-+{
-+      struct ext2_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext2_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->get(inode, name, buffer, size);
-+}
-+
-+/*
-+ * Inode operation listxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext2_listxattr(struct dentry *dentry, char *buffer, size_t size)
-+{
-+      return ext2_xattr_list(dentry->d_inode, buffer, size);
-+}
-+
-+/*
-+ * Inode operation setxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext2_setxattr(struct dentry *dentry, const char *name,
-+            const void *value, size_t size, int flags)
-+{
-+      struct ext2_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      if (size == 0)
-+              value = "";  /* empty EA, do not remove */
-+      handler = ext2_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, value, size, flags);
-+}
-+
-+/*
-+ * Inode operation removexattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext2_removexattr(struct dentry *dentry, const char *name)
-+{
-+      struct ext2_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext2_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, NULL, 0, XATTR_REPLACE);
-+}
-+
-+/*
-+ * ext2_xattr_get()
-+ *
-+ * Copy an extended attribute into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext2_xattr_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext2_xattr_entry *entry;
-+      unsigned int block, size;
-+      char *end;
-+      int name_len, error;
-+
-+      ea_idebug(inode, "name=%d.%s, buffer=%p, buffer_size=%ld",
-+                name_index, name, buffer, (long)buffer_size);
-+
-+      if (name == NULL)
-+              return -EINVAL;
-+      if (!EXT2_I(inode)->i_file_acl)
-+              return -ENOATTR;
-+      block = EXT2_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext2_error(inode->i_sb, "ext2_xattr_get",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* find named attribute */
-+      name_len = strlen(name);
-+
-+      error = -ERANGE;
-+      if (name_len > 255)
-+              goto cleanup;
-+      entry = FIRST_ENTRY(bh);
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext2_xattr_entry *next =
-+                      EXT2_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              if (name_index == entry->e_name_index &&
-+                  name_len == entry->e_name_len &&
-+                  memcmp(name, entry->e_name, name_len) == 0)
-+                      goto found;
-+              entry = next;
-+      }
-+      /* Check the remaining name entries */
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext2_xattr_entry *next =
-+                      EXT2_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              entry = next;
-+      }
-+      if (ext2_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      error = -ENOATTR;
-+      goto cleanup;
-+found:
-+      /* check the buffer size */
-+      if (entry->e_value_block != 0)
-+              goto bad_block;
-+      size = le32_to_cpu(entry->e_value_size);
-+      if (size > inode->i_sb->s_blocksize ||
-+          le16_to_cpu(entry->e_value_offs) + size > inode->i_sb->s_blocksize)
-+              goto bad_block;
-+
-+      if (ext2_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (buffer) {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+              /* return value of attribute */
-+              memcpy(buffer, bh->b_data + le16_to_cpu(entry->e_value_offs),
-+                      size);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext2_xattr_list()
-+ *
-+ * Copy a list of attribute names into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext2_xattr_list(struct inode *inode, char *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext2_xattr_entry *entry;
-+      unsigned int block, size = 0;
-+      char *buf, *end;
-+      int error;
-+
-+      ea_idebug(inode, "buffer=%p, buffer_size=%ld",
-+                buffer, (long)buffer_size);
-+
-+      if (!EXT2_I(inode)->i_file_acl)
-+              return 0;
-+      block = EXT2_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext2_error(inode->i_sb, "ext2_xattr_list",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* compute the size required for the list of attribute names */
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT2_XATTR_NEXT(entry)) {
-+              struct ext2_xattr_handler *handler;
-+              struct ext2_xattr_entry *next =
-+                      EXT2_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+
-+              handler = ext2_xattr_handler(entry->e_name_index);
-+              if (handler)
-+                      size += handler->list(NULL, inode, entry->e_name,
-+                                            entry->e_name_len);
-+      }
-+
-+      if (ext2_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (!buffer) {
-+              error = size;
-+              goto cleanup;
-+      } else {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+      }
-+
-+      /* list the attribute names */
-+      buf = buffer;
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT2_XATTR_NEXT(entry)) {
-+              struct ext2_xattr_handler *handler;
-+              
-+              handler = ext2_xattr_handler(entry->e_name_index);
-+              if (handler)
-+                      buf += handler->list(buf, inode, entry->e_name,
-+                                           entry->e_name_len);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * If the EXT2_FEATURE_COMPAT_EXT_ATTR feature of this file system is
-+ * not set, set it.
-+ */
-+static void ext2_xattr_update_super_block(struct super_block *sb)
-+{
-+      if (EXT2_HAS_COMPAT_FEATURE(sb, EXT2_FEATURE_COMPAT_EXT_ATTR))
-+              return;
-+
-+      lock_super(sb);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+      EXT2_SB(sb)->s_feature_compat |= EXT2_FEATURE_COMPAT_EXT_ATTR;
-+#endif
-+      EXT2_SB(sb)->s_es->s_feature_compat |=
-+              cpu_to_le32(EXT2_FEATURE_COMPAT_EXT_ATTR);
-+      sb->s_dirt = 1;
-+      mark_buffer_dirty(EXT2_SB(sb)->s_sbh);
-+      unlock_super(sb);
-+}
-+
-+/*
-+ * ext2_xattr_set()
-+ *
-+ * Create, replace or remove an extended attribute for this inode. Buffer
-+ * is NULL to remove an existing extended attribute, and non-NULL to
-+ * either replace an existing extended attribute, or create a new extended
-+ * attribute. The flags XATTR_REPLACE and XATTR_CREATE
-+ * specify that an extended attribute must exist and must not exist
-+ * previous to the call, respectively.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+int
-+ext2_xattr_set(struct inode *inode, int name_index, const char *name,
-+             const void *value, size_t value_len, int flags)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *bh = NULL;
-+      struct ext2_xattr_header *header = NULL;
-+      struct ext2_xattr_entry *here, *last;
-+      unsigned int name_len;
-+      int block = EXT2_I(inode)->i_file_acl;
-+      int min_offs = sb->s_blocksize, not_found = 1, free, error;
-+      char *end;
-+      
-+      /*
-+       * header -- Points either into bh, or to a temporarily
-+       *           allocated buffer.
-+       * here -- The named entry found, or the place for inserting, within
-+       *         the block pointed to by header.
-+       * last -- Points right after the last named entry within the block
-+       *         pointed to by header.
-+       * min_offs -- The offset of the first value (values are aligned
-+       *             towards the end of the block).
-+       * end -- Points right after the block pointed to by header.
-+       */
-+      
-+      ea_idebug(inode, "name=%d.%s, value=%p, value_len=%ld",
-+                name_index, name, value, (long)value_len);
-+
-+      if (IS_RDONLY(inode))
-+              return -EROFS;
-+      if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
-+              return -EPERM;
-+      if (value == NULL)
-+              value_len = 0;
-+      if (name == NULL)
-+              return -EINVAL;
-+      name_len = strlen(name);
-+      if (name_len > 255 || value_len > sb->s_blocksize)
-+              return -ERANGE;
-+      down(&ext2_xattr_sem);
-+
-+      if (block) {
-+              /* The inode already has an extended attribute block. */
-+
-+              bh = sb_bread(sb, block);
-+              error = -EIO;
-+              if (!bh)
-+                      goto cleanup;
-+              ea_bdebug(bh, "b_count=%d, refcount=%d",
-+                      atomic_read(&(bh->b_count)),
-+                      le32_to_cpu(HDR(bh)->h_refcount));
-+              header = HDR(bh);
-+              end = bh->b_data + bh->b_size;
-+              if (header->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
-+                  header->h_blocks != cpu_to_le32(1)) {
-+bad_block:            ext2_error(sb, "ext2_xattr_set",
-+                              "inode %ld: bad block %d", inode->i_ino, block);
-+                      error = -EIO;
-+                      goto cleanup;
-+              }
-+              /* Find the named attribute. */
-+              here = FIRST_ENTRY(bh);
-+              while (!IS_LAST_ENTRY(here)) {
-+                      struct ext2_xattr_entry *next = EXT2_XATTR_NEXT(here);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!here->e_value_block && here->e_value_size) {
-+                              int offs = le16_to_cpu(here->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      not_found = name_index - here->e_name_index;
-+                      if (!not_found)
-+                              not_found = name_len - here->e_name_len;
-+                      if (!not_found)
-+                              not_found = memcmp(name, here->e_name,name_len);
-+                      if (not_found <= 0)
-+                              break;
-+                      here = next;
-+              }
-+              last = here;
-+              /* We still need to compute min_offs and last. */
-+              while (!IS_LAST_ENTRY(last)) {
-+                      struct ext2_xattr_entry *next = EXT2_XATTR_NEXT(last);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!last->e_value_block && last->e_value_size) {
-+                              int offs = le16_to_cpu(last->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      last = next;
-+              }
-+
-+              /* Check whether we have enough space left. */
-+              free = min_offs - ((char*)last - (char*)header) - sizeof(__u32);
-+      } else {
-+              /* We will use a new extended attribute block. */
-+              free = sb->s_blocksize -
-+                      sizeof(struct ext2_xattr_header) - sizeof(__u32);
-+              here = last = NULL;  /* avoid gcc uninitialized warning. */
-+      }
-+
-+      if (not_found) {
-+              /* Request to remove a nonexistent attribute? */
-+              error = -ENOATTR;
-+              if (flags & XATTR_REPLACE)
-+                      goto cleanup;
-+              error = 0;
-+              if (value == NULL)
-+                      goto cleanup;
-+              else
-+                      free -= EXT2_XATTR_LEN(name_len);
-+      } else {
-+              /* Request to create an existing attribute? */
-+              error = -EEXIST;
-+              if (flags & XATTR_CREATE)
-+                      goto cleanup;
-+              if (!here->e_value_block && here->e_value_size) {
-+                      unsigned int size = le32_to_cpu(here->e_value_size);
-+
-+                      if (le16_to_cpu(here->e_value_offs) + size > 
-+                          sb->s_blocksize || size > sb->s_blocksize)
-+                              goto bad_block;
-+                      free += EXT2_XATTR_SIZE(size);
-+              }
-+      }
-+      free -= EXT2_XATTR_SIZE(value_len);
-+      error = -ENOSPC;
-+      if (free < 0)
-+              goto cleanup;
-+
-+      /* Here we know that we can set the new attribute. */
-+
-+      if (header) {
-+              if (header->h_refcount == cpu_to_le32(1)) {
-+                      ea_bdebug(bh, "modifying in-place");
-+                      ext2_xattr_cache_remove(bh);
-+              } else {
-+                      int offset;
-+
-+                      ea_bdebug(bh, "cloning");
-+                      header = kmalloc(bh->b_size, GFP_KERNEL);
-+                      error = -ENOMEM;
-+                      if (header == NULL)
-+                              goto cleanup;
-+                      memcpy(header, HDR(bh), bh->b_size);
-+                      header->h_refcount = cpu_to_le32(1);
-+                      offset = (char *)header - bh->b_data;
-+                      here = ENTRY((char *)here + offset);
-+                      last = ENTRY((char *)last + offset);
-+              }
-+      } else {
-+              /* Allocate a buffer where we construct the new block. */
-+              header = kmalloc(sb->s_blocksize, GFP_KERNEL);
-+              error = -ENOMEM;
-+              if (header == NULL)
-+                      goto cleanup;
-+              memset(header, 0, sb->s_blocksize);
-+              end = (char *)header + sb->s_blocksize;
-+              header->h_magic = cpu_to_le32(EXT2_XATTR_MAGIC);
-+              header->h_blocks = header->h_refcount = cpu_to_le32(1);
-+              last = here = ENTRY(header+1);
-+      }
-+
-+      if (not_found) {
-+              /* Insert the new name. */
-+              int size = EXT2_XATTR_LEN(name_len);
-+              int rest = (char *)last - (char *)here;
-+              memmove((char *)here + size, here, rest);
-+              memset(here, 0, size);
-+              here->e_name_index = name_index;
-+              here->e_name_len = name_len;
-+              memcpy(here->e_name, name, name_len);
-+      } else {
-+              /* Remove the old value. */
-+              if (!here->e_value_block && here->e_value_size) {
-+                      char *first_val = (char *)header + min_offs;
-+                      int offs = le16_to_cpu(here->e_value_offs);
-+                      char *val = (char *)header + offs;
-+                      size_t size = EXT2_XATTR_SIZE(
-+                              le32_to_cpu(here->e_value_size));
-+                      memmove(first_val + size, first_val, val - first_val);
-+                      memset(first_val, 0, size);
-+                      here->e_value_offs = 0;
-+                      min_offs += size;
-+
-+                      /* Adjust all value offsets. */
-+                      last = ENTRY(header+1);
-+                      while (!IS_LAST_ENTRY(last)) {
-+                              int o = le16_to_cpu(last->e_value_offs);
-+                              if (!last->e_value_block && o < offs)
-+                                      last->e_value_offs =
-+                                              cpu_to_le16(o + size);
-+                              last = EXT2_XATTR_NEXT(last);
-+                      }
-+              }
-+              if (value == NULL) {
-+                      /* Remove this attribute. */
-+                      if (EXT2_XATTR_NEXT(ENTRY(header+1)) == last) {
-+                              /* This block is now empty. */
-+                              error = ext2_xattr_set2(inode, bh, NULL);
-+                              goto cleanup;
-+                      } else {
-+                              /* Remove the old name. */
-+                              int size = EXT2_XATTR_LEN(name_len);
-+                              last = ENTRY((char *)last - size);
-+                              memmove(here, (char*)here + size,
-+                                      (char*)last - (char*)here);
-+                              memset(last, 0, size);
-+                      }
-+              }
-+      }
-+
-+      if (value != NULL) {
-+              /* Insert the new value. */
-+              here->e_value_size = cpu_to_le32(value_len);
-+              if (value_len) {
-+                      size_t size = EXT2_XATTR_SIZE(value_len);
-+                      char *val = (char *)header + min_offs - size;
-+                      here->e_value_offs =
-+                              cpu_to_le16((char *)val - (char *)header);
-+                      memset(val + size - EXT2_XATTR_PAD, 0,
-+                             EXT2_XATTR_PAD); /* Clear the pad bytes. */
-+                      memcpy(val, value, value_len);
-+              }
-+      }
-+      ext2_xattr_rehash(header, here);
-+
-+      error = ext2_xattr_set2(inode, bh, header);
-+
-+cleanup:
-+      brelse(bh);
-+      if (!(bh && header == HDR(bh)))
-+              kfree(header);
-+      up(&ext2_xattr_sem);
-+
-+      return error;
-+}
-+
-+/*
-+ * Second half of ext2_xattr_set(): Update the file system.
-+ */
-+static int
-+ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,
-+              struct ext2_xattr_header *header)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *new_bh = NULL;
-+      int error;
-+
-+      if (header) {
-+              new_bh = ext2_xattr_cache_find(inode, header);
-+              if (new_bh) {
-+                      /*
-+                       * We found an identical block in the cache.
-+                       * The old block will be released after updating
-+                       * the inode.
-+                       */
-+                      ea_bdebug(old_bh, "reusing block %ld",
-+                              new_bh->b_blocknr);
-+                      
-+                      error = -EDQUOT;
-+                      if (ext2_xattr_quota_alloc(inode, 1))
-+                              goto cleanup;
-+                      
-+                      HDR(new_bh)->h_refcount = cpu_to_le32(
-+                              le32_to_cpu(HDR(new_bh)->h_refcount) + 1);
-+                      ea_bdebug(new_bh, "refcount now=%d",
-+                              le32_to_cpu(HDR(new_bh)->h_refcount));
-+              } else if (old_bh && header == HDR(old_bh)) {
-+                      /* Keep this block. */
-+                      new_bh = old_bh;
-+                      ext2_xattr_cache_insert(new_bh);
-+              } else {
-+                      /* We need to allocate a new block */
-+                      int force = EXT2_I(inode)->i_file_acl != 0;
-+                      int block = ext2_xattr_new_block(inode, &error, force);
-+                      if (error)
-+                              goto cleanup;
-+                      ea_idebug(inode, "creating block %d", block);
-+
-+                      new_bh = sb_getblk(sb, block);
-+                      if (!new_bh) {
-+                              ext2_xattr_free_block(inode, block);
-+                              error = -EIO;
-+                              goto cleanup;
-+                      }
-+                      lock_buffer(new_bh);
-+                      memcpy(new_bh->b_data, header, new_bh->b_size);
-+                      mark_buffer_uptodate(new_bh, 1);
-+                      unlock_buffer(new_bh);
-+                      ext2_xattr_cache_insert(new_bh);
-+                      
-+                      ext2_xattr_update_super_block(sb);
-+              }
-+              mark_buffer_dirty(new_bh);
-+              if (IS_SYNC(inode)) {
-+                      ll_rw_block(WRITE, 1, &new_bh);
-+                      wait_on_buffer(new_bh); 
-+                      error = -EIO;
-+                      if (buffer_req(new_bh) && !buffer_uptodate(new_bh))
-+                              goto cleanup;
-+              }
-+      }
-+
-+      /* Update the inode. */
-+      EXT2_I(inode)->i_file_acl = new_bh ? new_bh->b_blocknr : 0;
-+      inode->i_ctime = CURRENT_TIME;
-+      if (IS_SYNC(inode)) {
-+              error = ext2_sync_inode (inode);
-+              if (error)
-+                      goto cleanup;
-+      } else
-+              mark_inode_dirty(inode);
-+
-+      error = 0;
-+      if (old_bh && old_bh != new_bh) {
-+              /*
-+               * If there was an old block, and we are not still using it,
-+               * we now release the old block.
-+              */
-+              unsigned int refcount = le32_to_cpu(HDR(old_bh)->h_refcount);
-+
-+              if (refcount == 1) {
-+                      /* Free the old block. */
-+                      ea_bdebug(old_bh, "freeing");
-+                      ext2_xattr_free_block(inode, old_bh->b_blocknr);
-+                      mark_buffer_clean(old_bh);
-+              } else {
-+                      /* Decrement the refcount only. */
-+                      refcount--;
-+                      HDR(old_bh)->h_refcount = cpu_to_le32(refcount);
-+                      ext2_xattr_quota_free(inode);
-+                      mark_buffer_dirty(old_bh);
-+                      ea_bdebug(old_bh, "refcount now=%d", refcount);
-+              }
-+      }
-+
-+cleanup:
-+      if (old_bh != new_bh)
-+              brelse(new_bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext2_xattr_delete_inode()
-+ *
-+ * Free extended attribute resources associated with this inode. This
-+ * is called immediately before an inode is freed.
-+ */
-+void
-+ext2_xattr_delete_inode(struct inode *inode)
-+{
-+      struct buffer_head *bh;
-+      unsigned int block = EXT2_I(inode)->i_file_acl;
-+
-+      if (!block)
-+              return;
-+      down(&ext2_xattr_sem);
-+
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh) {
-+              ext2_error(inode->i_sb, "ext2_xattr_delete_inode",
-+                      "inode %ld: block %d read error", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ea_bdebug(bh, "b_count=%d", atomic_read(&(bh->b_count)));
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+              ext2_error(inode->i_sb, "ext2_xattr_delete_inode",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ea_bdebug(bh, "refcount now=%d", le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+      if (HDR(bh)->h_refcount == cpu_to_le32(1)) {
-+              ext2_xattr_cache_remove(bh);
-+              ext2_xattr_free_block(inode, block);
-+              bforget(bh);
-+              bh = NULL;
-+      } else {
-+              HDR(bh)->h_refcount = cpu_to_le32(
-+                      le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+              mark_buffer_dirty(bh);
-+              if (IS_SYNC(inode)) {
-+                      ll_rw_block(WRITE, 1, &bh);
-+                      wait_on_buffer(bh);
-+              }
-+              ext2_xattr_quota_free(inode);
-+      }
-+      EXT2_I(inode)->i_file_acl = 0;
-+
-+cleanup:
-+      brelse(bh);
-+      up(&ext2_xattr_sem);
-+}
-+
-+/*
-+ * ext2_xattr_put_super()
-+ *
-+ * This is called when a file system is unmounted.
-+ */
-+void
-+ext2_xattr_put_super(struct super_block *sb)
-+{
-+#ifdef CONFIG_EXT2_FS_XATTR_SHARING
-+      mb_cache_shrink(ext2_xattr_cache, sb->s_dev);
-+#endif
-+}
-+
-+#ifdef CONFIG_EXT2_FS_XATTR_SHARING
-+
-+/*
-+ * ext2_xattr_cache_insert()
-+ *
-+ * Create a new entry in the extended attribute cache, and insert
-+ * it unless such an entry is already in the cache.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+static int
-+ext2_xattr_cache_insert(struct buffer_head *bh)
-+{
-+      __u32 hash = le32_to_cpu(HDR(bh)->h_hash);
-+      struct mb_cache_entry *ce;
-+      int error;
-+
-+      ce = mb_cache_entry_alloc(ext2_xattr_cache);
-+      if (!ce)
-+              return -ENOMEM;
-+      error = mb_cache_entry_insert(ce, bh->b_dev, bh->b_blocknr, &hash);
-+      if (error) {
-+              mb_cache_entry_free(ce);
-+              if (error == -EBUSY) {
-+                      ea_bdebug(bh, "already in cache (%d cache entries)",
-+                              atomic_read(&ext2_xattr_cache->c_entry_count));
-+                      error = 0;
-+              }
-+      } else {
-+              ea_bdebug(bh, "inserting [%x] (%d cache entries)", (int)hash,
-+                        atomic_read(&ext2_xattr_cache->c_entry_count));
-+              mb_cache_entry_release(ce);
-+      }
-+      return error;
-+}
-+
-+/*
-+ * ext2_xattr_cmp()
-+ *
-+ * Compare two extended attribute blocks for equality.
-+ *
-+ * Returns 0 if the blocks are equal, 1 if they differ, and
-+ * a negative error number on errors.
-+ */
-+static int
-+ext2_xattr_cmp(struct ext2_xattr_header *header1,
-+             struct ext2_xattr_header *header2)
-+{
-+      struct ext2_xattr_entry *entry1, *entry2;
-+
-+      entry1 = ENTRY(header1+1);
-+      entry2 = ENTRY(header2+1);
-+      while (!IS_LAST_ENTRY(entry1)) {
-+              if (IS_LAST_ENTRY(entry2))
-+                      return 1;
-+              if (entry1->e_hash != entry2->e_hash ||
-+                  entry1->e_name_len != entry2->e_name_len ||
-+                  entry1->e_value_size != entry2->e_value_size ||
-+                  memcmp(entry1->e_name, entry2->e_name, entry1->e_name_len))
-+                      return 1;
-+              if (entry1->e_value_block != 0 || entry2->e_value_block != 0)
-+                      return -EIO;
-+              if (memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
-+                         (char *)header2 + le16_to_cpu(entry2->e_value_offs),
-+                         le32_to_cpu(entry1->e_value_size)))
-+                      return 1;
-+
-+              entry1 = EXT2_XATTR_NEXT(entry1);
-+              entry2 = EXT2_XATTR_NEXT(entry2);
-+      }
-+      if (!IS_LAST_ENTRY(entry2))
-+              return 1;
-+      return 0;
-+}
-+
-+/*
-+ * ext2_xattr_cache_find()
-+ *
-+ * Find an identical extended attribute block.
-+ *
-+ * Returns a pointer to the block found, or NULL if such a block was
-+ * not found or an error occurred.
-+ */
-+static struct buffer_head *
-+ext2_xattr_cache_find(struct inode *inode, struct ext2_xattr_header *header)
-+{
-+      __u32 hash = le32_to_cpu(header->h_hash);
-+      struct mb_cache_entry *ce;
-+
-+      if (!header->h_hash)
-+              return NULL;  /* never share */
-+      ea_idebug(inode, "looking for cached blocks [%x]", (int)hash);
-+      ce = mb_cache_entry_find_first(ext2_xattr_cache, 0, inode->i_dev, hash);
-+      while (ce) {
-+              struct buffer_head *bh = sb_bread(inode->i_sb, ce->e_block);
-+
-+              if (!bh) {
-+                      ext2_error(inode->i_sb, "ext2_xattr_cache_find",
-+                              "inode %ld: block %ld read error",
-+                              inode->i_ino, ce->e_block);
-+              } else if (le32_to_cpu(HDR(bh)->h_refcount) >
-+                         EXT2_XATTR_REFCOUNT_MAX) {
-+                      ea_idebug(inode, "block %ld refcount %d>%d",ce->e_block,
-+                              le32_to_cpu(HDR(bh)->h_refcount),
-+                              EXT2_XATTR_REFCOUNT_MAX);
-+              } else if (!ext2_xattr_cmp(header, HDR(bh))) {
-+                      ea_bdebug(bh, "b_count=%d",atomic_read(&(bh->b_count)));
-+                      mb_cache_entry_release(ce);
-+                      return bh;
-+              }
-+              brelse(bh);
-+              ce = mb_cache_entry_find_next(ce, 0, inode->i_dev, hash);
-+      }
-+      return NULL;
-+}
-+
-+/*
-+ * ext2_xattr_cache_remove()
-+ *
-+ * Remove the cache entry of a block from the cache. Called when a
-+ * block becomes invalid.
-+ */
-+static void
-+ext2_xattr_cache_remove(struct buffer_head *bh)
-+{
-+      struct mb_cache_entry *ce;
-+
-+      ce = mb_cache_entry_get(ext2_xattr_cache, bh->b_dev, bh->b_blocknr);
-+      if (ce) {
-+              ea_bdebug(bh, "removing (%d cache entries remaining)",
-+                        atomic_read(&ext2_xattr_cache->c_entry_count)-1);
-+              mb_cache_entry_free(ce);
-+      } else 
-+              ea_bdebug(bh, "no cache entry");
-+}
-+
-+#define NAME_HASH_SHIFT 5
-+#define VALUE_HASH_SHIFT 16
-+
-+/*
-+ * ext2_xattr_hash_entry()
-+ *
-+ * Compute the hash of an extended attribute.
-+ */
-+static inline void ext2_xattr_hash_entry(struct ext2_xattr_header *header,
-+                                       struct ext2_xattr_entry *entry)
-+{
-+      __u32 hash = 0;
-+      char *name = entry->e_name;
-+      int n;
-+
-+      for (n=0; n < entry->e_name_len; n++) {
-+              hash = (hash << NAME_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - NAME_HASH_SHIFT)) ^
-+                     *name++;
-+      }
-+
-+      if (entry->e_value_block == 0 && entry->e_value_size != 0) {
-+              __u32 *value = (__u32 *)((char *)header +
-+                      le16_to_cpu(entry->e_value_offs));
-+              for (n = (le32_to_cpu(entry->e_value_size) +
-+                   EXT2_XATTR_ROUND) >> EXT2_XATTR_PAD_BITS; n; n--) {
-+                      hash = (hash << VALUE_HASH_SHIFT) ^
-+                             (hash >> (8*sizeof(hash) - VALUE_HASH_SHIFT)) ^
-+                             le32_to_cpu(*value++);
-+              }
-+      }
-+      entry->e_hash = cpu_to_le32(hash);
-+}
-+
-+#undef NAME_HASH_SHIFT
-+#undef VALUE_HASH_SHIFT
-+
-+#define BLOCK_HASH_SHIFT 16
-+
-+/*
-+ * ext2_xattr_rehash()
-+ *
-+ * Re-compute the extended attribute hash value after an entry has changed.
-+ */
-+static void ext2_xattr_rehash(struct ext2_xattr_header *header,
-+                            struct ext2_xattr_entry *entry)
-+{
-+      struct ext2_xattr_entry *here;
-+      __u32 hash = 0;
-+      
-+      ext2_xattr_hash_entry(header, entry);
-+      here = ENTRY(header+1);
-+      while (!IS_LAST_ENTRY(here)) {
-+              if (!here->e_hash) {
-+                      /* Block is not shared if an entry's hash value == 0 */
-+                      hash = 0;
-+                      break;
-+              }
-+              hash = (hash << BLOCK_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - BLOCK_HASH_SHIFT)) ^
-+                     le32_to_cpu(here->e_hash);
-+              here = EXT2_XATTR_NEXT(here);
-+      }
-+      header->h_hash = cpu_to_le32(hash);
-+}
-+
-+#undef BLOCK_HASH_SHIFT
-+
-+int __init
-+init_ext2_xattr(void)
-+{
-+      ext2_xattr_cache = mb_cache_create("ext2_xattr", NULL,
-+              sizeof(struct mb_cache_entry) +
-+              sizeof(struct mb_cache_entry_index), 1, 61);
-+      if (!ext2_xattr_cache)
-+              return -ENOMEM;
-+
-+      return 0;
-+}
-+
-+void
-+exit_ext2_xattr(void)
-+{
-+      mb_cache_destroy(ext2_xattr_cache);
-+}
-+
-+#else  /* CONFIG_EXT2_FS_XATTR_SHARING */
-+
-+int __init
-+init_ext2_xattr(void)
-+{
-+      return 0;
-+}
-+
-+void
-+exit_ext2_xattr(void)
-+{
-+}
-+
-+#endif  /* CONFIG_EXT2_FS_XATTR_SHARING */
-Index: linux-2.4.19-pre1/fs/ext2/xattr_user.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext2/xattr_user.c        2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext2/xattr_user.c     2004-01-14 01:11:49.000000000 +0300
-@@ -0,0 +1,103 @@
-+/*
-+ * linux/fs/ext2/xattr_user.c
-+ * Handler for extended user attributes.
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/string.h>
-+#include <linux/fs.h>
-+#include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
-+
-+#ifdef CONFIG_EXT2_FS_POSIX_ACL
-+# include <linux/ext2_acl.h>
-+#endif
-+
-+#define XATTR_USER_PREFIX "user."
-+
-+static size_t
-+ext2_xattr_user_list(char *list, struct inode *inode,
-+                   const char *name, int name_len)
-+{
-+      const int prefix_len = sizeof(XATTR_USER_PREFIX)-1;
-+
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return 0;
-+
-+      if (list) {
-+              memcpy(list, XATTR_USER_PREFIX, prefix_len);
-+              memcpy(list+prefix_len, name, name_len);
-+              list[prefix_len + name_len] = '\0';
-+      }
-+      return prefix_len + name_len + 1;
-+}
-+
-+static int
-+ext2_xattr_user_get(struct inode *inode, const char *name,
-+                  void *buffer, size_t size)
-+{
-+      int error;
-+
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return -ENOTSUP;
-+#ifdef CONFIG_EXT2_FS_POSIX_ACL
-+      error = ext2_permission_locked(inode, MAY_READ);
-+#else
-+      error = permission(inode, MAY_READ);
-+#endif
-+      if (error)
-+              return error;
-+
-+      return ext2_xattr_get(inode, EXT2_XATTR_INDEX_USER, name,
-+                            buffer, size);
-+}
-+
-+static int
-+ext2_xattr_user_set(struct inode *inode, const char *name,
-+                  const void *value, size_t size, int flags)
-+{
-+      int error;
-+
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return -ENOTSUP;
-+      if ( !S_ISREG(inode->i_mode) &&
-+          (!S_ISDIR(inode->i_mode) || inode->i_mode & S_ISVTX))
-+              return -EPERM;
-+#ifdef CONFIG_EXT2_FS_POSIX_ACL
-+      error = ext2_permission_locked(inode, MAY_WRITE);
-+#else
-+      error = permission(inode, MAY_WRITE);
-+#endif
-+      if (error)
-+              return error;
-+
-+      return ext2_xattr_set(inode, EXT2_XATTR_INDEX_USER, name,
-+                            value, size, flags);
-+}
-+
-+struct ext2_xattr_handler ext2_xattr_user_handler = {
-+      prefix: XATTR_USER_PREFIX,
-+      list:   ext2_xattr_user_list,
-+      get:    ext2_xattr_user_get,
-+      set:    ext2_xattr_user_set,
-+};
-+
-+int __init
-+init_ext2_xattr_user(void)
-+{
-+      return ext2_xattr_register(EXT2_XATTR_INDEX_USER,
-+                                 &ext2_xattr_user_handler);
-+}
-+
-+void
-+exit_ext2_xattr_user(void)
-+{
-+      ext2_xattr_unregister(EXT2_XATTR_INDEX_USER,
-+                            &ext2_xattr_user_handler);
-+}
-Index: linux-2.4.19-pre1/fs/ext3/Makefile
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/Makefile    2004-01-14 01:11:49.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/Makefile 2004-01-14 01:11:49.000000000 +0300
-@@ -1,5 +1,5 @@
- #
--# Makefile for the linux ext2-filesystem routines.
-+# Makefile for the linux ext3-filesystem routines.
- #
- # Note! Dependencies are done automagically by 'make dep', which also
- # removes any old dependencies. DON'T put your own dependencies here
-@@ -9,10 +9,14 @@
- O_TARGET := ext3.o
--export-objs :=        super.o inode.o
-+export-objs := ext3-exports.o
- obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
--              ioctl.o namei.o super.o symlink.o hash.o
-+              ioctl.o namei.o super.o symlink.o hash.o ext3-exports.o
- obj-m    := $(O_TARGET)
-+export-objs += xattr.o
-+obj-$(CONFIG_EXT3_FS_XATTR) += xattr.o
-+obj-$(CONFIG_EXT3_FS_XATTR_USER) += xattr_user.o
-+
- include $(TOPDIR)/Rules.make
-Index: linux-2.4.19-pre1/fs/ext3/file.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/file.c      2004-01-14 01:11:49.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/file.c   2004-01-14 01:11:49.000000000 +0300
-@@ -23,6 +23,7 @@
- #include <linux/locks.h>
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/ext3_jbd.h>
- #include <linux/smp_lock.h>
-@@ -93,5 +94,9 @@
- struct inode_operations ext3_file_inode_operations = {
-       truncate:       ext3_truncate,          /* BKL held */
-       setattr:        ext3_setattr,           /* BKL held */
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
- };
-Index: linux-2.4.19-pre1/fs/ext3/ialloc.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/ialloc.c    2004-01-14 01:10:37.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/ialloc.c 2004-01-14 01:11:49.000000000 +0300
-@@ -17,6 +17,7 @@
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/stat.h>
- #include <linux/string.h>
- #include <linux/locks.h>
-@@ -216,6 +217,7 @@
-        * as writing the quota to disk may need the lock as well.
-        */
-       DQUOT_INIT(inode);
-+      ext3_xattr_delete_inode(handle, inode);
-       DQUOT_FREE_INODE(inode);
-       DQUOT_DROP(inode);
-Index: linux-2.4.19-pre1/fs/ext3/inode.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/inode.c     2004-01-14 01:10:37.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/inode.c  2004-01-14 01:11:49.000000000 +0300
-@@ -39,6 +39,18 @@
-  */
- #undef SEARCH_FROM_ZERO
-+/*
-+ * Test whether an inode is a fast symlink.
-+ */
-+static inline int ext3_inode_is_fast_symlink(struct inode *inode)
-+{
-+      int ea_blocks = inode->u.ext3_i.i_file_acl ?
-+              (inode->i_sb->s_blocksize >> 9) : 0;
-+
-+      return (S_ISLNK(inode->i_mode) &&
-+              inode->i_blocks - ea_blocks == 0);
-+}
-+
- /* The ext3 forget function must perform a revoke if we are freeing data
-  * which has been journaled.  Metadata (eg. indirect blocks) must be
-  * revoked in all cases. 
-@@ -48,7 +60,7 @@
-  * still needs to be revoked.
-  */
--static int ext3_forget(handle_t *handle, int is_metadata,
-+int ext3_forget(handle_t *handle, int is_metadata,
-                      struct inode *inode, struct buffer_head *bh,
-                      int blocknr)
- {
-@@ -164,9 +176,7 @@
- {
-       handle_t *handle;
-       
--      if (is_bad_inode(inode) ||
--          inode->i_ino == EXT3_ACL_IDX_INO ||
--          inode->i_ino == EXT3_ACL_DATA_INO)
-+      if (is_bad_inode(inode))
-               goto no_delete;
-       lock_kernel();
-@@ -1845,6 +1855,8 @@
-       if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
-           S_ISLNK(inode->i_mode)))
-               return;
-+      if (ext3_inode_is_fast_symlink(inode))
-+              return;
-       if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
-               return;
-@@ -1992,8 +2004,6 @@
-       struct ext3_group_desc * gdp;
-               
-       if ((inode->i_ino != EXT3_ROOT_INO &&
--              inode->i_ino != EXT3_ACL_IDX_INO &&
--              inode->i_ino != EXT3_ACL_DATA_INO &&
-               inode->i_ino != EXT3_JOURNAL_INO &&
-               inode->i_ino < EXT3_FIRST_INO(inode->i_sb)) ||
-               inode->i_ino > le32_to_cpu(
-@@ -2120,10 +2130,7 @@
-       brelse (iloc.bh);
--      if (inode->i_ino == EXT3_ACL_IDX_INO ||
--          inode->i_ino == EXT3_ACL_DATA_INO)
--              /* Nothing to do */ ;
--      else if (S_ISREG(inode->i_mode)) {
-+      if (S_ISREG(inode->i_mode)) {
-               inode->i_op = &ext3_file_inode_operations;
-               inode->i_fop = &ext3_file_operations;
-               inode->i_mapping->a_ops = &ext3_aops;
-@@ -2131,15 +2138,17 @@
-               inode->i_op = &ext3_dir_inode_operations;
-               inode->i_fop = &ext3_dir_operations;
-       } else if (S_ISLNK(inode->i_mode)) {
--              if (!inode->i_blocks)
-+              if (ext3_inode_is_fast_symlink(inode))
-                       inode->i_op = &ext3_fast_symlink_inode_operations;
-               else {
--                      inode->i_op = &page_symlink_inode_operations;
-+                      inode->i_op = &ext3_symlink_inode_operations;
-                       inode->i_mapping->a_ops = &ext3_aops;
-               }
--      } else 
-+      } else {
-+              inode->i_op = &ext3_special_inode_operations;
-               init_special_inode(inode, inode->i_mode,
-                                  le32_to_cpu(iloc.raw_inode->i_block[0]));
-+      }
-       /* inode->i_attr_flags = 0;                             unused */
-       if (inode->u.ext3_i.i_flags & EXT3_SYNC_FL) {
-               /* inode->i_attr_flags |= ATTR_FLAG_SYNCRONOUS; unused */
-Index: linux-2.4.19-pre1/fs/ext3/namei.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/namei.c     2004-01-14 01:11:49.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/namei.c  2004-01-14 01:11:49.000000000 +0300
-@@ -29,6 +29,7 @@
- #include <linux/sched.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/fcntl.h>
- #include <linux/stat.h>
- #include <linux/string.h>
-@@ -1612,7 +1613,7 @@
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
--      inode = ext3_new_inode (handle, dir, S_IFDIR);
-+      inode = ext3_new_inode (handle, dir, S_IFDIR | mode);
-       err = PTR_ERR(inode);
-       if (IS_ERR(inode))
-               goto out_stop;
-@@ -1620,7 +1621,6 @@
-       inode->i_op = &ext3_dir_inode_operations;
-       inode->i_fop = &ext3_dir_operations;
-       inode->i_size = EXT3_I(inode)->i_disksize = inode->i_sb->s_blocksize;
--      inode->i_blocks = 0;    
-       dir_block = ext3_bread (handle, inode, 0, 1, &err);
-       if (!dir_block) {
-               inode->i_nlink--; /* is this nlink == 0? */
-@@ -1647,9 +1647,6 @@
-       BUFFER_TRACE(dir_block, "call ext3_journal_dirty_metadata");
-       ext3_journal_dirty_metadata(handle, dir_block);
-       brelse (dir_block);
--      inode->i_mode = S_IFDIR | mode;
--      if (dir->i_mode & S_ISGID)
--              inode->i_mode |= S_ISGID;
-       ext3_mark_inode_dirty(handle, inode);
-       err = ext3_add_entry (handle, dentry, inode);
-       if (err) {
-@@ -2018,7 +2015,7 @@
-               goto out_stop;
-       if (l > sizeof (EXT3_I(inode)->i_data)) {
--              inode->i_op = &page_symlink_inode_operations;
-+              inode->i_op = &ext3_symlink_inode_operations;
-               inode->i_mapping->a_ops = &ext3_aops;
-               /*
-                * block_symlink() calls back into ext3_prepare/commit_write.
-@@ -2245,4 +2242,16 @@
-       rmdir:          ext3_rmdir,             /* BKL held */
-       mknod:          ext3_mknod,             /* BKL held */
-       rename:         ext3_rename,            /* BKL held */
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
- };
-+
-+struct inode_operations ext3_special_inode_operations = {
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
-+};
-+
-Index: linux-2.4.19-pre1/fs/ext3/super.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/super.c     2004-01-14 01:11:49.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/super.c  2004-01-14 01:11:49.000000000 +0300
-@@ -24,6 +24,7 @@
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/slab.h>
- #include <linux/init.h>
- #include <linux/locks.h>
-@@ -404,6 +405,7 @@
-       kdev_t j_dev = sbi->s_journal->j_dev;
-       int i;
-+      ext3_xattr_put_super(sb);
-       journal_destroy(sbi->s_journal);
-       if (!(sb->s_flags & MS_RDONLY)) {
-               EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
-@@ -499,6 +501,7 @@
-                         int is_remount)
- {
-       unsigned long *mount_options = &sbi->s_mount_opt;
-+      
-       uid_t *resuid = &sbi->s_resuid;
-       gid_t *resgid = &sbi->s_resgid;
-       char * this_char;
-@@ -511,6 +514,13 @@
-            this_char = strtok (NULL, ",")) {
-               if ((value = strchr (this_char, '=')) != NULL)
-                       *value++ = 0;
-+#ifdef CONFIG_EXT3_FS_XATTR_USER
-+              if (!strcmp (this_char, "user_xattr"))
-+                      set_opt (*mount_options, XATTR_USER);
-+              else if (!strcmp (this_char, "nouser_xattr"))
-+                      clear_opt (*mount_options, XATTR_USER);
-+              else
-+#endif
-               if (!strcmp (this_char, "bsddf"))
-                       clear_opt (*mount_options, MINIX_DF);
-               else if (!strcmp (this_char, "nouid32")) {
-@@ -924,6 +934,12 @@
-       sbi->s_mount_opt = 0;
-       sbi->s_resuid = EXT3_DEF_RESUID;
-       sbi->s_resgid = EXT3_DEF_RESGID;
-+
-+      /* Default extended attribute flags */
-+#ifdef CONFIG_EXT3_FS_XATTR_USER
-+      /* set_opt(sbi->s_mount_opt, XATTR_USER); */
-+#endif
-+
-       if (!parse_options ((char *) data, &sb_block, sbi, &journal_inum, 0)) {
-               sb->s_dev = 0;
-               goto out_fail;
-@@ -1742,17 +1758,29 @@
- static int __init init_ext3_fs(void)
- {
--        return register_filesystem(&ext3_fs_type);
-+      int error = init_ext3_xattr();
-+      if (error)
-+              return error;
-+      error = init_ext3_xattr_user();
-+      if (error)
-+              goto fail;
-+      error = register_filesystem(&ext3_fs_type);
-+      if (!error)
-+              return 0;
-+      
-+      exit_ext3_xattr_user();
-+fail:
-+      exit_ext3_xattr();
-+      return error;
- }
- static void __exit exit_ext3_fs(void)
- {
-       unregister_filesystem(&ext3_fs_type);
-+      exit_ext3_xattr_user();
-+      exit_ext3_xattr();
- }
--EXPORT_SYMBOL(ext3_force_commit);
--EXPORT_SYMBOL(ext3_bread);
--
- MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
- MODULE_DESCRIPTION("Second Extended Filesystem with journaling extensions");
- MODULE_LICENSE("GPL");
-Index: linux-2.4.19-pre1/fs/ext3/symlink.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/symlink.c   2001-11-10 01:25:04.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/symlink.c        2004-01-14 01:11:49.000000000 +0300
-@@ -20,6 +20,7 @@
- #include <linux/fs.h>
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
- static int ext3_readlink(struct dentry *dentry, char *buffer, int buflen)
- {
-@@ -33,7 +34,20 @@
-       return vfs_follow_link(nd, s);
- }
-+struct inode_operations ext3_symlink_inode_operations = {
-+      readlink:       page_readlink,          /* BKL not held.  Don't need */
-+      follow_link:    page_follow_link,       /* BKL not held.  Don't need */
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
-+};
-+
- struct inode_operations ext3_fast_symlink_inode_operations = {
-       readlink:       ext3_readlink,          /* BKL not held.  Don't need */
-       follow_link:    ext3_follow_link,       /* BKL not held.  Don't need */
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
- };
-Index: linux-2.4.19-pre1/fs/ext3/xattr.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/xattr.c     2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/xattr.c  2004-01-14 01:11:49.000000000 +0300
-@@ -0,0 +1,1225 @@
-+/*
-+ * linux/fs/ext3/xattr.c
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ *
-+ * Fix by Harrison Xing <harrison@mountainviewdata.com>.
-+ * Ext3 code with a lot of help from Eric Jarman <ejarman@acm.org>.
-+ * Extended attributes for symlinks and special files added per
-+ *  suggestion of Luka Renko <luka.renko@hermes.si>.
-+ */
-+
-+/*
-+ * Extended attributes are stored on disk blocks allocated outside of
-+ * any inode. The i_file_acl field is then made to point to this allocated
-+ * block. If all extended attributes of an inode are identical, these
-+ * inodes may share the same extended attribute block. Such situations
-+ * are automatically detected by keeping a cache of recent attribute block
-+ * numbers and hashes over the block's contents in memory.
-+ *
-+ *
-+ * Extended attribute block layout:
-+ *
-+ *   +------------------+
-+ *   | header           |
-+ *   | entry 1          | |
-+ *   | entry 2          | | growing downwards
-+ *   | entry 3          | v
-+ *   | four null bytes  |
-+ *   | . . .            |
-+ *   | value 1          | ^
-+ *   | value 3          | | growing upwards
-+ *   | value 2          | |
-+ *   +------------------+
-+ *
-+ * The block header is followed by multiple entry descriptors. These entry
-+ * descriptors are variable in size, and alligned to EXT3_XATTR_PAD
-+ * byte boundaries. The entry descriptors are sorted by attribute name,
-+ * so that two extended attribute blocks can be compared efficiently.
-+ *
-+ * Attribute values are aligned to the end of the block, stored in
-+ * no specific order. They are also padded to EXT3_XATTR_PAD byte
-+ * boundaries. No additional gaps are left between them.
-+ *
-+ * Locking strategy
-+ * ----------------
-+ * The VFS already holds the BKL and the inode->i_sem semaphore when any of
-+ * the xattr inode operations are called, so we are guaranteed that only one
-+ * processes accesses extended attributes of an inode at any time.
-+ *
-+ * For writing we also grab the ext3_xattr_sem semaphore. This ensures that
-+ * only a single process is modifying an extended attribute block, even
-+ * if the block is shared among inodes.
-+ *
-+ * Note for porting to 2.5
-+ * -----------------------
-+ * The BKL will no longer be held in the xattr inode operations.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/fs.h>
-+#include <linux/locks.h>
-+#include <linux/slab.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
-+#include <linux/mbcache.h>
-+#include <linux/quotaops.h>
-+#include <asm/semaphore.h>
-+#include <linux/compatmac.h>
-+
-+#define EXT3_EA_USER "user."
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+# define mark_buffer_dirty(bh) mark_buffer_dirty(bh, 1)
-+#endif
-+
-+#define HDR(bh) ((struct ext3_xattr_header *)((bh)->b_data))
-+#define ENTRY(ptr) ((struct ext3_xattr_entry *)(ptr))
-+#define FIRST_ENTRY(bh) ENTRY(HDR(bh)+1)
-+#define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
-+
-+#ifdef EXT3_XATTR_DEBUG
-+# define ea_idebug(inode, f...) do { \
-+              printk(KERN_DEBUG "inode %s:%ld: ", \
-+                      kdevname(inode->i_dev), inode->i_ino); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+# define ea_bdebug(bh, f...) do { \
-+              printk(KERN_DEBUG "block %s:%ld: ", \
-+                      kdevname(bh->b_dev), bh->b_blocknr); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+#else
-+# define ea_idebug(f...)
-+# define ea_bdebug(f...)
-+#endif
-+
-+static int ext3_xattr_set2(handle_t *, struct inode *, struct buffer_head *,
-+                         struct ext3_xattr_header *);
-+
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+
-+static int ext3_xattr_cache_insert(struct buffer_head *);
-+static struct buffer_head *ext3_xattr_cache_find(struct inode *,
-+                                               struct ext3_xattr_header *);
-+static void ext3_xattr_cache_remove(struct buffer_head *);
-+static void ext3_xattr_rehash(struct ext3_xattr_header *,
-+                            struct ext3_xattr_entry *);
-+
-+static struct mb_cache *ext3_xattr_cache;
-+
-+#else
-+# define ext3_xattr_cache_insert(bh) 0
-+# define ext3_xattr_cache_find(inode, header) NULL
-+# define ext3_xattr_cache_remove(bh) while(0) {}
-+# define ext3_xattr_rehash(header, entry) while(0) {}
-+#endif
-+
-+/*
-+ * If a file system does not share extended attributes among inodes,
-+ * we should not need the ext3_xattr_sem semaphore. However, the
-+ * filesystem may still contain shared blocks, so we always take
-+ * the lock.
-+ */
-+
-+DECLARE_MUTEX(ext3_xattr_sem);
-+
-+static inline int
-+ext3_xattr_new_block(handle_t *handle, struct inode *inode,
-+                   int * errp, int force)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      int goal = le32_to_cpu(EXT3_SB(sb)->s_es->s_first_data_block) +
-+              EXT3_I(inode)->i_block_group * EXT3_BLOCKS_PER_GROUP(sb);
-+
-+      /* How can we enforce the allocation? */
-+      int block = ext3_new_block(handle, inode, goal, 0, 0, errp);
-+#ifdef OLD_QUOTAS
-+      if (!*errp)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#endif
-+      return block;
-+}
-+
-+static inline int
-+ext3_xattr_quota_alloc(struct inode *inode, int force)
-+{
-+      /* How can we enforce the allocation? */
-+#ifdef OLD_QUOTAS
-+      int error = DQUOT_ALLOC_BLOCK(inode->i_sb, inode, 1);
-+      if (!error)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#else
-+      int error = DQUOT_ALLOC_BLOCK(inode, 1);
-+#endif
-+      return error;
-+}
-+
-+#ifdef OLD_QUOTAS
-+
-+static inline void
-+ext3_xattr_quota_free(struct inode *inode)
-+{
-+      DQUOT_FREE_BLOCK(inode->i_sb, inode, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+static inline void
-+ext3_xattr_free_block(handle_t *handle, struct inode * inode,
-+                    unsigned long block)
-+{
-+      ext3_free_blocks(handle, inode, block, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+#else
-+# define ext3_xattr_quota_free(inode) \
-+      DQUOT_FREE_BLOCK(inode, 1)
-+# define ext3_xattr_free_block(handle, inode, block) \
-+      ext3_free_blocks(handle, inode, block, 1)
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
-+
-+static inline struct buffer_head *
-+sb_bread(struct super_block *sb, int block)
-+{
-+      return bread(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+static inline struct buffer_head *
-+sb_getblk(struct super_block *sb, int block)
-+{
-+      return getblk(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+#endif
-+
-+struct ext3_xattr_handler *ext3_xattr_handlers[EXT3_XATTR_INDEX_MAX];
-+rwlock_t ext3_handler_lock = RW_LOCK_UNLOCKED;
-+
-+int
-+ext3_xattr_register(int name_index, struct ext3_xattr_handler *handler)
-+{
-+      int error = -EINVAL;
-+
-+      if (name_index > 0 && name_index <= EXT3_XATTR_INDEX_MAX) {
-+              write_lock(&ext3_handler_lock);
-+              if (!ext3_xattr_handlers[name_index-1]) {
-+                      ext3_xattr_handlers[name_index-1] = handler;
-+                      error = 0;
-+              }
-+              write_unlock(&ext3_handler_lock);
-+      }
-+      return error;
-+}
-+
-+void
-+ext3_xattr_unregister(int name_index, struct ext3_xattr_handler *handler)
-+{
-+      if (name_index > 0 || name_index <= EXT3_XATTR_INDEX_MAX) {
-+              write_lock(&ext3_handler_lock);
-+              ext3_xattr_handlers[name_index-1] = NULL;
-+              write_unlock(&ext3_handler_lock);
-+      }
-+}
-+
-+static inline const char *
-+strcmp_prefix(const char *a, const char *a_prefix)
-+{
-+      while (*a_prefix && *a == *a_prefix) {
-+              a++;
-+              a_prefix++;
-+      }
-+      return *a_prefix ? NULL : a;
-+}
-+
-+/*
-+ * Decode the extended attribute name, and translate it into
-+ * the name_index and name suffix.
-+ */
-+static inline struct ext3_xattr_handler *
-+ext3_xattr_resolve_name(const char **name)
-+{
-+      struct ext3_xattr_handler *handler = NULL;
-+      int i;
-+
-+      if (!*name)
-+              return NULL;
-+      read_lock(&ext3_handler_lock);
-+      for (i=0; i<EXT3_XATTR_INDEX_MAX; i++) {
-+              if (ext3_xattr_handlers[i]) {
-+                      const char *n = strcmp_prefix(*name,
-+                              ext3_xattr_handlers[i]->prefix);
-+                      if (n) {
-+                              handler = ext3_xattr_handlers[i];
-+                              *name = n;
-+                              break;
-+                      }
-+              }
-+      }
-+      read_unlock(&ext3_handler_lock);
-+      return handler;
-+}
-+
-+static inline struct ext3_xattr_handler *
-+ext3_xattr_handler(int name_index)
-+{
-+      struct ext3_xattr_handler *handler = NULL;
-+      if (name_index > 0 && name_index <= EXT3_XATTR_INDEX_MAX) {
-+              read_lock(&ext3_handler_lock);
-+              handler = ext3_xattr_handlers[name_index-1];
-+              read_unlock(&ext3_handler_lock);
-+      }
-+      return handler;
-+}
-+
-+/*
-+ * Inode operation getxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext3_getxattr(struct dentry *dentry, const char *name,
-+            void *buffer, size_t size)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->get(inode, name, buffer, size);
-+}
-+
-+/*
-+ * Inode operation listxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext3_listxattr(struct dentry *dentry, char *buffer, size_t size)
-+{
-+      return ext3_xattr_list(dentry->d_inode, buffer, size);
-+}
-+
-+/*
-+ * Inode operation setxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext3_setxattr(struct dentry *dentry, const char *name,
-+            const void *value, size_t size, int flags)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      if (size == 0)
-+              value = "";  /* empty EA, do not remove */
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, value, size, flags);
-+}
-+
-+/*
-+ * Inode operation removexattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext3_removexattr(struct dentry *dentry, const char *name)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, NULL, 0, XATTR_REPLACE);
-+}
-+
-+/*
-+ * ext3_xattr_get()
-+ *
-+ * Copy an extended attribute into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext3_xattr_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_entry *entry;
-+      unsigned int block, size;
-+      char *end;
-+      int name_len, error;
-+
-+      ea_idebug(inode, "name=%d.%s, buffer=%p, buffer_size=%ld",
-+                name_index, name, buffer, (long)buffer_size);
-+
-+      if (name == NULL)
-+              return -EINVAL;
-+      if (!EXT3_I(inode)->i_file_acl)
-+              return -ENOATTR;
-+      block = EXT3_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext3_error(inode->i_sb, "ext3_xattr_get",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* find named attribute */
-+      name_len = strlen(name);
-+
-+      error = -ERANGE;
-+      if (name_len > 255)
-+              goto cleanup;
-+      entry = FIRST_ENTRY(bh);
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              if (name_index == entry->e_name_index &&
-+                  name_len == entry->e_name_len &&
-+                  memcmp(name, entry->e_name, name_len) == 0)
-+                      goto found;
-+              entry = next;
-+      }
-+      /* Check the remaining name entries */
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              entry = next;
-+      }
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      error = -ENOATTR;
-+      goto cleanup;
-+found:
-+      /* check the buffer size */
-+      if (entry->e_value_block != 0)
-+              goto bad_block;
-+      size = le32_to_cpu(entry->e_value_size);
-+      if (size > inode->i_sb->s_blocksize ||
-+          le16_to_cpu(entry->e_value_offs) + size > inode->i_sb->s_blocksize)
-+              goto bad_block;
-+
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (buffer) {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+              /* return value of attribute */
-+              memcpy(buffer, bh->b_data + le16_to_cpu(entry->e_value_offs),
-+                      size);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_list()
-+ *
-+ * Copy a list of attribute names into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext3_xattr_list(struct inode *inode, char *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_entry *entry;
-+      unsigned int block, size = 0;
-+      char *buf, *end;
-+      int error;
-+
-+      ea_idebug(inode, "buffer=%p, buffer_size=%ld",
-+                buffer, (long)buffer_size);
-+
-+      if (!EXT3_I(inode)->i_file_acl)
-+              return 0;
-+      block = EXT3_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext3_error(inode->i_sb, "ext3_xattr_list",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* compute the size required for the list of attribute names */
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT3_XATTR_NEXT(entry)) {
-+              struct ext3_xattr_handler *handler;
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+
-+              handler = ext3_xattr_handler(entry->e_name_index);
-+              if (handler)
-+                      size += handler->list(NULL, inode, entry->e_name,
-+                                            entry->e_name_len);
-+      }
-+
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (!buffer) {
-+              error = size;
-+              goto cleanup;
-+      } else {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+      }
-+
-+      /* list the attribute names */
-+      buf = buffer;
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT3_XATTR_NEXT(entry)) {
-+              struct ext3_xattr_handler *handler;
-+
-+              handler = ext3_xattr_handler(entry->e_name_index);
-+              if (handler)
-+                      buf += handler->list(buf, inode, entry->e_name,
-+                                           entry->e_name_len);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * If the EXT3_FEATURE_COMPAT_EXT_ATTR feature of this file system is
-+ * not set, set it.
-+ */
-+static void ext3_xattr_update_super_block(handle_t *handle,
-+                                        struct super_block *sb)
-+{
-+      if (EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_EXT_ATTR))
-+              return;
-+
-+      lock_super(sb);
-+      ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+      EXT3_SB(sb)->s_feature_compat |= EXT3_FEATURE_COMPAT_EXT_ATTR;
-+#endif
-+      EXT3_SB(sb)->s_es->s_feature_compat |=
-+              cpu_to_le32(EXT3_FEATURE_COMPAT_EXT_ATTR);
-+      sb->s_dirt = 1;
-+      ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-+      unlock_super(sb);
-+}
-+
-+/*
-+ * ext3_xattr_set()
-+ *
-+ * Create, replace or remove an extended attribute for this inode. Buffer
-+ * is NULL to remove an existing extended attribute, and non-NULL to
-+ * either replace an existing extended attribute, or create a new extended
-+ * attribute. The flags XATTR_REPLACE and XATTR_CREATE
-+ * specify that an extended attribute must exist and must not exist
-+ * previous to the call, respectively.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+int
-+ext3_xattr_set(handle_t *handle, struct inode *inode, int name_index,
-+             const char *name, const void *value, size_t value_len, int flags)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_header *header = NULL;
-+      struct ext3_xattr_entry *here, *last;
-+      unsigned int name_len;
-+      int block = EXT3_I(inode)->i_file_acl;
-+      int min_offs = sb->s_blocksize, not_found = 1, free, error;
-+      char *end;
-+      
-+      /*
-+       * header -- Points either into bh, or to a temporarily
-+       *           allocated buffer.
-+       * here -- The named entry found, or the place for inserting, within
-+       *         the block pointed to by header.
-+       * last -- Points right after the last named entry within the block
-+       *         pointed to by header.
-+       * min_offs -- The offset of the first value (values are aligned
-+       *             towards the end of the block).
-+       * end -- Points right after the block pointed to by header.
-+       */
-+      
-+      ea_idebug(inode, "name=%d.%s, value=%p, value_len=%ld",
-+                name_index, name, value, (long)value_len);
-+
-+      if (IS_RDONLY(inode))
-+              return -EROFS;
-+      if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
-+              return -EPERM;
-+      if (value == NULL)
-+              value_len = 0;
-+      if (name == NULL)
-+              return -EINVAL;
-+      name_len = strlen(name);
-+      if (name_len > 255 || value_len > sb->s_blocksize)
-+              return -ERANGE;
-+      down(&ext3_xattr_sem);
-+
-+      if (block) {
-+              /* The inode already has an extended attribute block. */
-+              bh = sb_bread(sb, block);
-+              error = -EIO;
-+              if (!bh)
-+                      goto cleanup;
-+              ea_bdebug(bh, "b_count=%d, refcount=%d",
-+                      atomic_read(&(bh->b_count)),
-+                      le32_to_cpu(HDR(bh)->h_refcount));
-+              header = HDR(bh);
-+              end = bh->b_data + bh->b_size;
-+              if (header->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+                  header->h_blocks != cpu_to_le32(1)) {
-+bad_block:            ext3_error(sb, "ext3_xattr_set",
-+                              "inode %ld: bad block %d", inode->i_ino, block);
-+                      error = -EIO;
-+                      goto cleanup;
-+              }
-+              /* Find the named attribute. */
-+              here = FIRST_ENTRY(bh);
-+              while (!IS_LAST_ENTRY(here)) {
-+                      struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(here);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!here->e_value_block && here->e_value_size) {
-+                              int offs = le16_to_cpu(here->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      not_found = name_index - here->e_name_index;
-+                      if (!not_found)
-+                              not_found = name_len - here->e_name_len;
-+                      if (!not_found)
-+                              not_found = memcmp(name, here->e_name,name_len);
-+                      if (not_found <= 0)
-+                              break;
-+                      here = next;
-+              }
-+              last = here;
-+              /* We still need to compute min_offs and last. */
-+              while (!IS_LAST_ENTRY(last)) {
-+                      struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(last);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!last->e_value_block && last->e_value_size) {
-+                              int offs = le16_to_cpu(last->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      last = next;
-+              }
-+
-+              /* Check whether we have enough space left. */
-+              free = min_offs - ((char*)last - (char*)header) - sizeof(__u32);
-+      } else {
-+              /* We will use a new extended attribute block. */
-+              free = sb->s_blocksize -
-+                      sizeof(struct ext3_xattr_header) - sizeof(__u32);
-+              here = last = NULL;  /* avoid gcc uninitialized warning. */
-+      }
-+
-+      if (not_found) {
-+              /* Request to remove a nonexistent attribute? */
-+              error = -ENOATTR;
-+              if (flags & XATTR_REPLACE)
-+                      goto cleanup;
-+              error = 0;
-+              if (value == NULL)
-+                      goto cleanup;
-+              else
-+                      free -= EXT3_XATTR_LEN(name_len);
-+      } else {
-+              /* Request to create an existing attribute? */
-+              error = -EEXIST;
-+              if (flags & XATTR_CREATE)
-+                      goto cleanup;
-+              if (!here->e_value_block && here->e_value_size) {
-+                      unsigned int size = le32_to_cpu(here->e_value_size);
-+
-+                      if (le16_to_cpu(here->e_value_offs) + size > 
-+                          sb->s_blocksize || size > sb->s_blocksize)
-+                              goto bad_block;
-+                      free += EXT3_XATTR_SIZE(size);
-+              }
-+      }
-+      free -= EXT3_XATTR_SIZE(value_len);
-+      error = -ENOSPC;
-+      if (free < 0)
-+              goto cleanup;
-+
-+      /* Here we know that we can set the new attribute. */
-+
-+      if (header) {
-+              if (header->h_refcount == cpu_to_le32(1)) {
-+                      ea_bdebug(bh, "modifying in-place");
-+                      ext3_xattr_cache_remove(bh);
-+                      error = ext3_journal_get_write_access(handle, bh);
-+                      if (error)
-+                              goto cleanup;
-+              } else {
-+                      int offset;
-+
-+                      ea_bdebug(bh, "cloning");
-+                      header = kmalloc(bh->b_size, GFP_KERNEL);
-+                      error = -ENOMEM;
-+                      if (header == NULL)
-+                              goto cleanup;
-+                      memcpy(header, HDR(bh), bh->b_size);
-+                      header->h_refcount = cpu_to_le32(1);
-+                      offset = (char *)header - bh->b_data;
-+                      here = ENTRY((char *)here + offset);
-+                      last = ENTRY((char *)last + offset);
-+              }
-+      } else {
-+              /* Allocate a buffer where we construct the new block. */
-+              header = kmalloc(sb->s_blocksize, GFP_KERNEL);
-+              error = -ENOMEM;
-+              if (header == NULL)
-+                      goto cleanup;
-+              memset(header, 0, sb->s_blocksize);
-+              end = (char *)header + sb->s_blocksize;
-+              header->h_magic = cpu_to_le32(EXT3_XATTR_MAGIC);
-+              header->h_blocks = header->h_refcount = cpu_to_le32(1);
-+              last = here = ENTRY(header+1);
-+      }
-+
-+      if (not_found) {
-+              /* Insert the new name. */
-+              int size = EXT3_XATTR_LEN(name_len);
-+              int rest = (char *)last - (char *)here;
-+              memmove((char *)here + size, here, rest);
-+              memset(here, 0, size);
-+              here->e_name_index = name_index;
-+              here->e_name_len = name_len;
-+              memcpy(here->e_name, name, name_len);
-+      } else {
-+              /* Remove the old value. */
-+              if (!here->e_value_block && here->e_value_size) {
-+                      char *first_val = (char *)header + min_offs;
-+                      int offs = le16_to_cpu(here->e_value_offs);
-+                      char *val = (char *)header + offs;
-+                      size_t size = EXT3_XATTR_SIZE(
-+                              le32_to_cpu(here->e_value_size));
-+                      memmove(first_val + size, first_val, val - first_val);
-+                      memset(first_val, 0, size);
-+                      here->e_value_offs = 0;
-+                      min_offs += size;
-+
-+                      /* Adjust all value offsets. */
-+                      last = ENTRY(header+1);
-+                      while (!IS_LAST_ENTRY(last)) {
-+                              int o = le16_to_cpu(last->e_value_offs);
-+                              if (!last->e_value_block && o < offs)
-+                                      last->e_value_offs =
-+                                              cpu_to_le16(o + size);
-+                              last = EXT3_XATTR_NEXT(last);
-+                      }
-+              }
-+              if (value == NULL) {
-+                      /* Remove this attribute. */
-+                      if (EXT3_XATTR_NEXT(ENTRY(header+1)) == last) {
-+                              /* This block is now empty. */
-+                              error = ext3_xattr_set2(handle, inode, bh,NULL);
-+                              goto cleanup;
-+                      } else {
-+                              /* Remove the old name. */
-+                              int size = EXT3_XATTR_LEN(name_len);
-+                              last = ENTRY((char *)last - size);
-+                              memmove(here, (char*)here + size,
-+                                      (char*)last - (char*)here);
-+                              memset(last, 0, size);
-+                      }
-+              }
-+      }
-+
-+      if (value != NULL) {
-+              /* Insert the new value. */
-+              here->e_value_size = cpu_to_le32(value_len);
-+              if (value_len) {
-+                      size_t size = EXT3_XATTR_SIZE(value_len);
-+                      char *val = (char *)header + min_offs - size;
-+                      here->e_value_offs =
-+                              cpu_to_le16((char *)val - (char *)header);
-+                      memset(val + size - EXT3_XATTR_PAD, 0,
-+                             EXT3_XATTR_PAD); /* Clear the pad bytes. */
-+                      memcpy(val, value, value_len);
-+              }
-+      }
-+      ext3_xattr_rehash(header, here);
-+
-+      error = ext3_xattr_set2(handle, inode, bh, header);
-+
-+cleanup:
-+      brelse(bh);
-+      if (!(bh && header == HDR(bh)))
-+              kfree(header);
-+      up(&ext3_xattr_sem);
-+
-+      return error;
-+}
-+
-+/*
-+ * Second half of ext3_xattr_set(): Update the file system.
-+ */
-+static int
-+ext3_xattr_set2(handle_t *handle, struct inode *inode,
-+              struct buffer_head *old_bh, struct ext3_xattr_header *header)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *new_bh = NULL;
-+      int error;
-+
-+      if (header) {
-+              new_bh = ext3_xattr_cache_find(inode, header);
-+              if (new_bh) {
-+                      /*
-+                       * We found an identical block in the cache.
-+                       * The old block will be released after updating
-+                       * the inode.
-+                       */
-+                      ea_bdebug(old_bh, "reusing block %ld",
-+                              new_bh->b_blocknr);
-+                      
-+                      error = -EDQUOT;
-+                      if (ext3_xattr_quota_alloc(inode, 1))
-+                              goto cleanup;
-+                      
-+                      error = ext3_journal_get_write_access(handle, new_bh);
-+                      if (error)
-+                              goto cleanup;
-+                      HDR(new_bh)->h_refcount = cpu_to_le32(
-+                              le32_to_cpu(HDR(new_bh)->h_refcount) + 1);
-+                      ea_bdebug(new_bh, "refcount now=%d",
-+                              le32_to_cpu(HDR(new_bh)->h_refcount));
-+              } else if (old_bh && header == HDR(old_bh)) {
-+                      /* Keep this block. */
-+                      new_bh = old_bh;
-+                      ext3_xattr_cache_insert(new_bh);
-+              } else {
-+                      /* We need to allocate a new block */
-+                      int force = EXT3_I(inode)->i_file_acl != 0;
-+                      int block = ext3_xattr_new_block(handle, inode,
-+                                                       &error, force);
-+                      if (error)
-+                              goto cleanup;
-+                      ea_idebug(inode, "creating block %d", block);
-+
-+                      new_bh = sb_getblk(sb, block);
-+                      if (!new_bh) {
-+getblk_failed:                        ext3_xattr_free_block(handle, inode, block);
-+                              error = -EIO;
-+                              goto cleanup;
-+                      }
-+                      lock_buffer(new_bh);
-+                      error = ext3_journal_get_create_access(handle, new_bh);
-+                      if (error) {
-+                              unlock_buffer(new_bh);
-+                              goto getblk_failed;
-+                      }
-+                      memcpy(new_bh->b_data, header, new_bh->b_size);
-+                      mark_buffer_uptodate(new_bh, 1);
-+                      unlock_buffer(new_bh);
-+                      ext3_xattr_cache_insert(new_bh);
-+                      
-+                      ext3_xattr_update_super_block(handle, sb);
-+              }
-+              error = ext3_journal_dirty_metadata(handle, new_bh);
-+              if (error)
-+                      goto cleanup;
-+      }
-+
-+      /* Update the inode. */
-+      EXT3_I(inode)->i_file_acl = new_bh ? new_bh->b_blocknr : 0;
-+      inode->i_ctime = CURRENT_TIME;
-+      ext3_mark_inode_dirty(handle, inode);
-+      if (IS_SYNC(inode))
-+              handle->h_sync = 1;
-+
-+      error = 0;
-+      if (old_bh && old_bh != new_bh) {
-+              /*
-+               * If there was an old block, and we are not still using it,
-+               * we now release the old block.
-+              */
-+              unsigned int refcount = le32_to_cpu(HDR(old_bh)->h_refcount);
-+
-+              error = ext3_journal_get_write_access(handle, old_bh);
-+              if (error)
-+                      goto cleanup;
-+              if (refcount == 1) {
-+                      /* Free the old block. */
-+                      ea_bdebug(old_bh, "freeing");
-+                      ext3_xattr_free_block(handle, inode, old_bh->b_blocknr);
-+
-+                      /* ext3_forget() calls bforget() for us, but we
-+                         let our caller release old_bh, so we need to
-+                         duplicate the handle before. */
-+                      get_bh(old_bh);
-+                      ext3_forget(handle, 1, inode, old_bh,old_bh->b_blocknr);
-+              } else {
-+                      /* Decrement the refcount only. */
-+                      refcount--;
-+                      HDR(old_bh)->h_refcount = cpu_to_le32(refcount);
-+                      ext3_xattr_quota_free(inode);
-+                      ext3_journal_dirty_metadata(handle, old_bh);
-+                      ea_bdebug(old_bh, "refcount now=%d", refcount);
-+              }
-+      }
-+
-+cleanup:
-+      if (old_bh != new_bh)
-+              brelse(new_bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_delete_inode()
-+ *
-+ * Free extended attribute resources associated with this inode. This
-+ * is called immediately before an inode is freed.
-+ */
-+void
-+ext3_xattr_delete_inode(handle_t *handle, struct inode *inode)
-+{
-+      struct buffer_head *bh;
-+      unsigned int block = EXT3_I(inode)->i_file_acl;
-+
-+      if (!block)
-+              return;
-+      down(&ext3_xattr_sem);
-+
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh) {
-+              ext3_error(inode->i_sb, "ext3_xattr_delete_inode",
-+                      "inode %ld: block %d read error", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ea_bdebug(bh, "b_count=%d", atomic_read(&(bh->b_count)));
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+              ext3_error(inode->i_sb, "ext3_xattr_delete_inode",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ext3_journal_get_write_access(handle, bh);
-+      ea_bdebug(bh, "refcount now=%d", le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+      if (HDR(bh)->h_refcount == cpu_to_le32(1)) {
-+              ext3_xattr_cache_remove(bh);
-+              ext3_xattr_free_block(handle, inode, block);
-+              ext3_forget(handle, 1, inode, bh, block);
-+              bh = NULL;
-+      } else {
-+              HDR(bh)->h_refcount = cpu_to_le32(
-+                      le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+              ext3_journal_dirty_metadata(handle, bh);
-+              if (IS_SYNC(inode))
-+                      handle->h_sync = 1;
-+              ext3_xattr_quota_free(inode);
-+      }
-+      EXT3_I(inode)->i_file_acl = 0;
-+
-+cleanup:
-+      brelse(bh);
-+      up(&ext3_xattr_sem);
-+}
-+
-+/*
-+ * ext3_xattr_put_super()
-+ *
-+ * This is called when a file system is unmounted.
-+ */
-+void
-+ext3_xattr_put_super(struct super_block *sb)
-+{
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+      mb_cache_shrink(ext3_xattr_cache, sb->s_dev);
-+#endif
-+}
-+
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+
-+/*
-+ * ext3_xattr_cache_insert()
-+ *
-+ * Create a new entry in the extended attribute cache, and insert
-+ * it unless such an entry is already in the cache.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+static int
-+ext3_xattr_cache_insert(struct buffer_head *bh)
-+{
-+      __u32 hash = le32_to_cpu(HDR(bh)->h_hash);
-+      struct mb_cache_entry *ce;
-+      int error;
-+
-+      ce = mb_cache_entry_alloc(ext3_xattr_cache);
-+      if (!ce)
-+              return -ENOMEM;
-+      error = mb_cache_entry_insert(ce, bh->b_dev, bh->b_blocknr, &hash);
-+      if (error) {
-+              mb_cache_entry_free(ce);
-+              if (error == -EBUSY) {
-+                      ea_bdebug(bh, "already in cache (%d cache entries)",
-+                              atomic_read(&ext3_xattr_cache->c_entry_count));
-+                      error = 0;
-+              }
-+      } else {
-+              ea_bdebug(bh, "inserting [%x] (%d cache entries)", (int)hash,
-+                        atomic_read(&ext3_xattr_cache->c_entry_count));
-+              mb_cache_entry_release(ce);
-+      }
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_cmp()
-+ *
-+ * Compare two extended attribute blocks for equality.
-+ *
-+ * Returns 0 if the blocks are equal, 1 if they differ, and
-+ * a negative error number on errors.
-+ */
-+static int
-+ext3_xattr_cmp(struct ext3_xattr_header *header1,
-+             struct ext3_xattr_header *header2)
-+{
-+      struct ext3_xattr_entry *entry1, *entry2;
-+
-+      entry1 = ENTRY(header1+1);
-+      entry2 = ENTRY(header2+1);
-+      while (!IS_LAST_ENTRY(entry1)) {
-+              if (IS_LAST_ENTRY(entry2))
-+                      return 1;
-+              if (entry1->e_hash != entry2->e_hash ||
-+                  entry1->e_name_len != entry2->e_name_len ||
-+                  entry1->e_value_size != entry2->e_value_size ||
-+                  memcmp(entry1->e_name, entry2->e_name, entry1->e_name_len))
-+                      return 1;
-+              if (entry1->e_value_block != 0 || entry2->e_value_block != 0)
-+                      return -EIO;
-+              if (memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
-+                         (char *)header2 + le16_to_cpu(entry2->e_value_offs),
-+                         le32_to_cpu(entry1->e_value_size)))
-+                      return 1;
-+
-+              entry1 = EXT3_XATTR_NEXT(entry1);
-+              entry2 = EXT3_XATTR_NEXT(entry2);
-+      }
-+      if (!IS_LAST_ENTRY(entry2))
-+              return 1;
-+      return 0;
-+}
-+
-+/*
-+ * ext3_xattr_cache_find()
-+ *
-+ * Find an identical extended attribute block.
-+ *
-+ * Returns a pointer to the block found, or NULL if such a block was
-+ * not found or an error occurred.
-+ */
-+static struct buffer_head *
-+ext3_xattr_cache_find(struct inode *inode, struct ext3_xattr_header *header)
-+{
-+      __u32 hash = le32_to_cpu(header->h_hash);
-+      struct mb_cache_entry *ce;
-+
-+      if (!header->h_hash)
-+              return NULL;  /* never share */
-+      ea_idebug(inode, "looking for cached blocks [%x]", (int)hash);
-+      ce = mb_cache_entry_find_first(ext3_xattr_cache, 0, inode->i_dev, hash);
-+      while (ce) {
-+              struct buffer_head *bh = sb_bread(inode->i_sb, ce->e_block);
-+
-+              if (!bh) {
-+                      ext3_error(inode->i_sb, "ext3_xattr_cache_find",
-+                              "inode %ld: block %ld read error",
-+                              inode->i_ino, ce->e_block);
-+              } else if (le32_to_cpu(HDR(bh)->h_refcount) >
-+                         EXT3_XATTR_REFCOUNT_MAX) {
-+                      ea_idebug(inode, "block %ld refcount %d>%d",ce->e_block,
-+                              le32_to_cpu(HDR(bh)->h_refcount),
-+                              EXT3_XATTR_REFCOUNT_MAX);
-+              } else if (!ext3_xattr_cmp(header, HDR(bh))) {
-+                      ea_bdebug(bh, "b_count=%d",atomic_read(&(bh->b_count)));
-+                      mb_cache_entry_release(ce);
-+                      return bh;
-+              }
-+              brelse(bh);
-+              ce = mb_cache_entry_find_next(ce, 0, inode->i_dev, hash);
-+      }
-+      return NULL;
-+}
-+
-+/*
-+ * ext3_xattr_cache_remove()
-+ *
-+ * Remove the cache entry of a block from the cache. Called when a
-+ * block becomes invalid.
-+ */
-+static void
-+ext3_xattr_cache_remove(struct buffer_head *bh)
-+{
-+      struct mb_cache_entry *ce;
-+
-+      ce = mb_cache_entry_get(ext3_xattr_cache, bh->b_dev, bh->b_blocknr);
-+      if (ce) {
-+              ea_bdebug(bh, "removing (%d cache entries remaining)",
-+                        atomic_read(&ext3_xattr_cache->c_entry_count)-1);
-+              mb_cache_entry_free(ce);
-+      } else 
-+              ea_bdebug(bh, "no cache entry");
-+}
-+
-+#define NAME_HASH_SHIFT 5
-+#define VALUE_HASH_SHIFT 16
-+
-+/*
-+ * ext3_xattr_hash_entry()
-+ *
-+ * Compute the hash of an extended attribute.
-+ */
-+static inline void ext3_xattr_hash_entry(struct ext3_xattr_header *header,
-+                                       struct ext3_xattr_entry *entry)
-+{
-+      __u32 hash = 0;
-+      char *name = entry->e_name;
-+      int n;
-+
-+      for (n=0; n < entry->e_name_len; n++) {
-+              hash = (hash << NAME_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - NAME_HASH_SHIFT)) ^
-+                     *name++;
-+      }
-+
-+      if (entry->e_value_block == 0 && entry->e_value_size != 0) {
-+              __u32 *value = (__u32 *)((char *)header +
-+                      le16_to_cpu(entry->e_value_offs));
-+              for (n = (le32_to_cpu(entry->e_value_size) +
-+                   EXT3_XATTR_ROUND) >> EXT3_XATTR_PAD_BITS; n; n--) {
-+                      hash = (hash << VALUE_HASH_SHIFT) ^
-+                             (hash >> (8*sizeof(hash) - VALUE_HASH_SHIFT)) ^
-+                             le32_to_cpu(*value++);
-+              }
-+      }
-+      entry->e_hash = cpu_to_le32(hash);
-+}
-+
-+#undef NAME_HASH_SHIFT
-+#undef VALUE_HASH_SHIFT
-+
-+#define BLOCK_HASH_SHIFT 16
-+
-+/*
-+ * ext3_xattr_rehash()
-+ *
-+ * Re-compute the extended attribute hash value after an entry has changed.
-+ */
-+static void ext3_xattr_rehash(struct ext3_xattr_header *header,
-+                            struct ext3_xattr_entry *entry)
-+{
-+      struct ext3_xattr_entry *here;
-+      __u32 hash = 0;
-+      
-+      ext3_xattr_hash_entry(header, entry);
-+      here = ENTRY(header+1);
-+      while (!IS_LAST_ENTRY(here)) {
-+              if (!here->e_hash) {
-+                      /* Block is not shared if an entry's hash value == 0 */
-+                      hash = 0;
-+                      break;
-+              }
-+              hash = (hash << BLOCK_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - BLOCK_HASH_SHIFT)) ^
-+                     le32_to_cpu(here->e_hash);
-+              here = EXT3_XATTR_NEXT(here);
-+      }
-+      header->h_hash = cpu_to_le32(hash);
-+}
-+
-+#undef BLOCK_HASH_SHIFT
-+
-+int __init
-+init_ext3_xattr(void)
-+{
-+      ext3_xattr_cache = mb_cache_create("ext3_xattr", NULL,
-+              sizeof(struct mb_cache_entry) +
-+              sizeof(struct mb_cache_entry_index), 1, 61);
-+      if (!ext3_xattr_cache)
-+              return -ENOMEM;
-+
-+      return 0;
-+}
-+
-+void
-+exit_ext3_xattr(void)
-+{
-+      if (ext3_xattr_cache)
-+              mb_cache_destroy(ext3_xattr_cache);
-+      ext3_xattr_cache = NULL;
-+}
-+
-+#else  /* CONFIG_EXT3_FS_XATTR_SHARING */
-+
-+int __init
-+init_ext3_xattr(void)
-+{
-+      return 0;
-+}
-+
-+void
-+exit_ext3_xattr(void)
-+{
-+}
-+
-+#endif  /* CONFIG_EXT3_FS_XATTR_SHARING */
-Index: linux-2.4.19-pre1/fs/ext3/xattr_user.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/xattr_user.c        2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/xattr_user.c     2004-01-14 01:11:49.000000000 +0300
-@@ -0,0 +1,111 @@
-+/*
-+ * linux/fs/ext3/xattr_user.c
-+ * Handler for extended user attributes.
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/string.h>
-+#include <linux/fs.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
-+
-+#ifdef CONFIG_EXT3_FS_POSIX_ACL
-+# include <linux/ext3_acl.h>
-+#endif
-+
-+#define XATTR_USER_PREFIX "user."
-+
-+static size_t
-+ext3_xattr_user_list(char *list, struct inode *inode,
-+                   const char *name, int name_len)
-+{
-+      const int prefix_len = sizeof(XATTR_USER_PREFIX)-1;
-+
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return 0;
-+
-+      if (list) {
-+              memcpy(list, XATTR_USER_PREFIX, prefix_len);
-+              memcpy(list+prefix_len, name, name_len);
-+              list[prefix_len + name_len] = '\0';
-+      }
-+      return prefix_len + name_len + 1;
-+}
-+
-+static int
-+ext3_xattr_user_get(struct inode *inode, const char *name,
-+                  void *buffer, size_t size)
-+{
-+      int error;
-+
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return -ENOTSUP;
-+#ifdef CONFIG_EXT3_FS_POSIX_ACL
-+      error = ext3_permission_locked(inode, MAY_READ);
-+#else
-+      error = permission(inode, MAY_READ);
-+#endif
-+      if (error)
-+              return error;
-+
-+      return ext3_xattr_get(inode, EXT3_XATTR_INDEX_USER, name,
-+                            buffer, size);
-+}
-+
-+static int
-+ext3_xattr_user_set(struct inode *inode, const char *name,
-+                  const void *value, size_t size, int flags)
-+{
-+      handle_t *handle;
-+      int error;
-+
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return -ENOTSUP;
-+      if ( !S_ISREG(inode->i_mode) &&
-+          (!S_ISDIR(inode->i_mode) || inode->i_mode & S_ISVTX))
-+              return -EPERM;
-+#ifdef CONFIG_EXT3_FS_POSIX_ACL
-+      error = ext3_permission_locked(inode, MAY_WRITE);
-+#else
-+      error = permission(inode, MAY_WRITE);
-+#endif
-+      if (error)
-+              return error;
-+
-+      handle = ext3_journal_start(inode, EXT3_XATTR_TRANS_BLOCKS);
-+      if (IS_ERR(handle))
-+              return PTR_ERR(handle);
-+      error = ext3_xattr_set(handle, inode, EXT3_XATTR_INDEX_USER, name,
-+                             value, size, flags);
-+      ext3_journal_stop(handle, inode);
-+
-+      return error;
-+}
-+
-+struct ext3_xattr_handler ext3_xattr_user_handler = {
-+      prefix: XATTR_USER_PREFIX,
-+      list:   ext3_xattr_user_list,
-+      get:    ext3_xattr_user_get,
-+      set:    ext3_xattr_user_set,
-+};
-+
-+int __init
-+init_ext3_xattr_user(void)
-+{
-+      return ext3_xattr_register(EXT3_XATTR_INDEX_USER,
-+                                 &ext3_xattr_user_handler);
-+}
-+
-+void
-+exit_ext3_xattr_user(void)
-+{
-+      ext3_xattr_unregister(EXT3_XATTR_INDEX_USER,
-+                            &ext3_xattr_user_handler);
-+}
-Index: linux-2.4.19-pre1/fs/ext3/ext3-exports.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/ext3/ext3-exports.c      2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.19-pre1/fs/ext3/ext3-exports.c   2004-01-14 01:11:49.000000000 +0300
-@@ -0,0 +1,13 @@
-+#include <linux/config.h>
-+#include <linux/module.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
-+
-+EXPORT_SYMBOL(ext3_force_commit);
-+EXPORT_SYMBOL(ext3_bread);
-+EXPORT_SYMBOL(ext3_xattr_register);
-+EXPORT_SYMBOL(ext3_xattr_unregister);
-+EXPORT_SYMBOL(ext3_xattr_get);
-+EXPORT_SYMBOL(ext3_xattr_list);
-+EXPORT_SYMBOL(ext3_xattr_set);
-Index: linux-2.4.19-pre1/fs/mbcache.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/mbcache.c        2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.19-pre1/fs/mbcache.c     2004-01-14 01:11:49.000000000 +0300
-@@ -0,0 +1,648 @@
-+/*
-+ * linux/fs/mbcache.c
-+ * (C) 2001-2002 Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ */
-+
-+/*
-+ * Filesystem Meta Information Block Cache (mbcache)
-+ *
-+ * The mbcache caches blocks of block devices that need to be located
-+ * by their device/block number, as well as by other criteria (such
-+ * as the block's contents).
-+ *
-+ * There can only be one cache entry in a cache per device and block number.
-+ * Additional indexes need not be unique in this sense. The number of
-+ * additional indexes (=other criteria) can be hardwired at compile time
-+ * or specified at cache create time.
-+ *
-+ * Each cache entry is of fixed size. An entry may be `valid' or `invalid'
-+ * in the cache. A valid entry is in the main hash tables of the cache,
-+ * and may also be in the lru list. An invalid entry is not in any hashes
-+ * or lists.
-+ *
-+ * A valid cache entry is only in the lru list if no handles refer to it.
-+ * Invalid cache entries will be freed when the last handle to the cache
-+ * entry is released. Entries that cannot be freed immediately are put
-+ * back on the lru list.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+
-+#include <linux/fs.h>
-+#include <linux/slab.h>
-+#include <linux/sched.h>
-+#include <linux/cache_def.h>
-+#include <linux/version.h>
-+#include <linux/init.h>
-+#include <linux/mbcache.h>
-+
-+
-+#ifdef MB_CACHE_DEBUG
-+# define mb_debug(f...) do { \
-+              printk(KERN_DEBUG f); \
-+              printk("\n"); \
-+      } while (0)
-+#define mb_assert(c) do { if (!(c)) \
-+              printk(KERN_ERR "assertion " #c " failed\n"); \
-+      } while(0)
-+#else
-+# define mb_debug(f...) do { } while(0)
-+# define mb_assert(c) do { } while(0)
-+#endif
-+#define mb_error(f...) do { \
-+              printk(KERN_ERR f); \
-+              printk("\n"); \
-+      } while(0)
-+              
-+MODULE_AUTHOR("Andreas Gruenbacher <a.gruenbacher@computer.org>");
-+MODULE_DESCRIPTION("Meta block cache (for extended attributes)");
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+MODULE_LICENSE("GPL");
-+#endif
-+
-+EXPORT_SYMBOL(mb_cache_create);
-+EXPORT_SYMBOL(mb_cache_shrink);
-+EXPORT_SYMBOL(mb_cache_destroy);
-+EXPORT_SYMBOL(mb_cache_entry_alloc);
-+EXPORT_SYMBOL(mb_cache_entry_insert);
-+EXPORT_SYMBOL(mb_cache_entry_release);
-+EXPORT_SYMBOL(mb_cache_entry_takeout);
-+EXPORT_SYMBOL(mb_cache_entry_free);
-+EXPORT_SYMBOL(mb_cache_entry_dup);
-+EXPORT_SYMBOL(mb_cache_entry_get);
-+#if !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0)
-+EXPORT_SYMBOL(mb_cache_entry_find_first);
-+EXPORT_SYMBOL(mb_cache_entry_find_next);
-+#endif
-+
-+
-+/*
-+ * Global data: list of all mbcache's, lru list, and a spinlock for
-+ * accessing cache data structures on SMP machines. The lru list is
-+ * global across all mbcaches.
-+ */
-+
-+static LIST_HEAD(mb_cache_list);
-+static LIST_HEAD(mb_cache_lru_list);
-+static spinlock_t mb_cache_spinlock = SPIN_LOCK_UNLOCKED;
-+
-+static inline int
-+mb_cache_indexes(struct mb_cache *cache)
-+{
-+#ifdef MB_CACHE_INDEXES_COUNT
-+      return MB_CACHE_INDEXES_COUNT;
-+#else
-+      return cache->c_indexes_count;
-+#endif
-+}
-+
-+/*
-+ * What the mbcache registers as to get shrunk dynamically.
-+ */
-+
-+static void
-+mb_cache_memory_pressure(int priority, unsigned int gfp_mask);
-+
-+static struct cache_definition mb_cache_definition = {
-+      "mb_cache",
-+      mb_cache_memory_pressure
-+};
-+
-+
-+static inline int
-+__mb_cache_entry_is_hashed(struct mb_cache_entry *ce)
-+{
-+      return !list_empty(&ce->e_block_list);
-+}
-+
-+
-+static inline void
-+__mb_cache_entry_unhash(struct mb_cache_entry *ce)
-+{
-+      int n;
-+
-+      if (__mb_cache_entry_is_hashed(ce)) {
-+              list_del_init(&ce->e_block_list);
-+              for (n=0; n<mb_cache_indexes(ce->e_cache); n++)
-+                      list_del(&ce->e_indexes[n].o_list);
-+      }
-+}
-+
-+
-+static inline void
-+__mb_cache_entry_forget(struct mb_cache_entry *ce, int gfp_mask)
-+{
-+      struct mb_cache *cache = ce->e_cache;
-+
-+      mb_assert(atomic_read(&ce->e_used) == 0);
-+      if (cache->c_op.free && cache->c_op.free(ce, gfp_mask)) {
-+              /* free failed -- put back on the lru list
-+                 for freeing later. */
-+              spin_lock(&mb_cache_spinlock);
-+              list_add(&ce->e_lru_list, &mb_cache_lru_list);
-+              spin_unlock(&mb_cache_spinlock);
-+      } else {
-+              kmem_cache_free(cache->c_entry_cache, ce);
-+              atomic_dec(&cache->c_entry_count);
-+      }
-+}
-+
-+
-+static inline void
-+__mb_cache_entry_release_unlock(struct mb_cache_entry *ce)
-+{
-+      if (atomic_dec_and_test(&ce->e_used)) {
-+              if (__mb_cache_entry_is_hashed(ce))
-+                      list_add_tail(&ce->e_lru_list, &mb_cache_lru_list);
-+              else {
-+                      spin_unlock(&mb_cache_spinlock);
-+                      __mb_cache_entry_forget(ce, GFP_KERNEL);
-+                      return;
-+              }
-+      }
-+      spin_unlock(&mb_cache_spinlock);
-+}
-+
-+
-+/*
-+ * mb_cache_memory_pressure()  memory pressure callback
-+ *
-+ * This function is called by the kernel memory management when memory
-+ * gets low.
-+ *
-+ * @priority: Amount by which to shrink the cache (0 = highes priority)
-+ * @gfp_mask: (ignored)
-+ */
-+static void
-+mb_cache_memory_pressure(int priority, unsigned int gfp_mask)
-+{
-+      LIST_HEAD(free_list);
-+      struct list_head *l, *ltmp;
-+      int count = 0;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each(l, &mb_cache_list) {
-+              struct mb_cache *cache =
-+                      list_entry(l, struct mb_cache, c_cache_list);
-+              mb_debug("cache %s (%d)", cache->c_name,
-+                        atomic_read(&cache->c_entry_count));
-+              count += atomic_read(&cache->c_entry_count);
-+      }
-+      mb_debug("trying to free %d of %d entries",
-+                count / (priority ? priority : 1), count);
-+      if (priority)
-+              count /= priority;
-+      while (count-- && !list_empty(&mb_cache_lru_list)) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(mb_cache_lru_list.next,
-+                                 struct mb_cache_entry, e_lru_list);
-+              list_del(&ce->e_lru_list);
-+              __mb_cache_entry_unhash(ce);
-+              list_add_tail(&ce->e_lru_list, &free_list);
-+      }
-+      spin_unlock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &free_list) {
-+              __mb_cache_entry_forget(list_entry(l, struct mb_cache_entry,
-+                                                 e_lru_list), gfp_mask);
-+      }
-+}
-+
-+
-+/*
-+ * mb_cache_create()  create a new cache
-+ *
-+ * All entries in one cache are equal size. Cache entries may be from
-+ * multiple devices. If this is the first mbcache created, registers
-+ * the cache with kernel memory management. Returns NULL if no more
-+ * memory was available.
-+ *
-+ * @name: name of the cache (informal)
-+ * @cache_op: contains the callback called when freeing a cache entry
-+ * @entry_size: The size of a cache entry, including
-+ *              struct mb_cache_entry
-+ * @indexes_count: number of additional indexes in the cache. Must equal
-+ *                 MB_CACHE_INDEXES_COUNT if the number of indexes is
-+ *                 hardwired.
-+ * @bucket_count: number of hash buckets
-+ */
-+struct mb_cache *
-+mb_cache_create(const char *name, struct mb_cache_op *cache_op,
-+              size_t entry_size, int indexes_count, int bucket_count)
-+{
-+      int m=0, n;
-+      struct mb_cache *cache = NULL;
-+
-+      if(entry_size < sizeof(struct mb_cache_entry) +
-+         indexes_count * sizeof(struct mb_cache_entry_index))
-+              return NULL;
-+
-+      MOD_INC_USE_COUNT;
-+      cache = kmalloc(sizeof(struct mb_cache) +
-+                      indexes_count * sizeof(struct list_head), GFP_KERNEL);
-+      if (!cache)
-+              goto fail;
-+      cache->c_name = name;
-+      cache->c_op.free = NULL;
-+      if (cache_op)
-+              cache->c_op.free = cache_op->free;
-+      atomic_set(&cache->c_entry_count, 0);
-+      cache->c_bucket_count = bucket_count;
-+#ifdef MB_CACHE_INDEXES_COUNT
-+      mb_assert(indexes_count == MB_CACHE_INDEXES_COUNT);
-+#else
-+      cache->c_indexes_count = indexes_count;
-+#endif
-+      cache->c_block_hash = kmalloc(bucket_count * sizeof(struct list_head),
-+                                    GFP_KERNEL);
-+      if (!cache->c_block_hash)
-+              goto fail;
-+      for (n=0; n<bucket_count; n++)
-+              INIT_LIST_HEAD(&cache->c_block_hash[n]);
-+      for (m=0; m<indexes_count; m++) {
-+              cache->c_indexes_hash[m] = kmalloc(bucket_count *
-+                                               sizeof(struct list_head),
-+                                               GFP_KERNEL);
-+              if (!cache->c_indexes_hash[m])
-+                      goto fail;
-+              for (n=0; n<bucket_count; n++)
-+                      INIT_LIST_HEAD(&cache->c_indexes_hash[m][n]);
-+      }
-+      cache->c_entry_cache = kmem_cache_create(name, entry_size, 0,
-+              0 /*SLAB_POISON | SLAB_RED_ZONE*/, NULL, NULL);
-+      if (!cache->c_entry_cache)
-+              goto fail;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_add(&cache->c_cache_list, &mb_cache_list);
-+      spin_unlock(&mb_cache_spinlock);
-+      return cache;
-+
-+fail:
-+      if (cache) {
-+              while (--m >= 0)
-+                      kfree(cache->c_indexes_hash[m]);
-+              if (cache->c_block_hash)
-+                      kfree(cache->c_block_hash);
-+              kfree(cache);
-+      }
-+      MOD_DEC_USE_COUNT;
-+      return NULL;
-+}
-+
-+
-+/*
-+ * mb_cache_shrink()
-+ *
-+ * Removes all cache entires of a device from the cache. All cache entries
-+ * currently in use cannot be freed, and thus remain in the cache.
-+ *
-+ * @cache: which cache to shrink
-+ * @dev: which device's cache entries to shrink
-+ */
-+void
-+mb_cache_shrink(struct mb_cache *cache, kdev_t dev)
-+{
-+      LIST_HEAD(free_list);
-+      struct list_head *l, *ltmp;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &mb_cache_lru_list) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(l, struct mb_cache_entry, e_lru_list);
-+              if (ce->e_dev == dev) {
-+                      list_del(&ce->e_lru_list);
-+                      list_add_tail(&ce->e_lru_list, &free_list);
-+                      __mb_cache_entry_unhash(ce);
-+              }
-+      }
-+      spin_unlock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &free_list) {
-+              __mb_cache_entry_forget(list_entry(l, struct mb_cache_entry,
-+                                                 e_lru_list), GFP_KERNEL);
-+      }
-+}
-+
-+
-+/*
-+ * mb_cache_destroy()
-+ *
-+ * Shrinks the cache to its minimum possible size (hopefully 0 entries),
-+ * and then destroys it. If this was the last mbcache, un-registers the
-+ * mbcache from kernel memory management.
-+ */
-+void
-+mb_cache_destroy(struct mb_cache *cache)
-+{
-+      LIST_HEAD(free_list);
-+      struct list_head *l, *ltmp;
-+      int n;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &mb_cache_lru_list) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(l, struct mb_cache_entry, e_lru_list);
-+              if (ce->e_cache == cache) {
-+                      list_del(&ce->e_lru_list);
-+                      list_add_tail(&ce->e_lru_list, &free_list);
-+                      __mb_cache_entry_unhash(ce);
-+              }
-+      }
-+      list_del(&cache->c_cache_list);
-+      spin_unlock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &free_list) {
-+              __mb_cache_entry_forget(list_entry(l, struct mb_cache_entry,
-+                                                 e_lru_list), GFP_KERNEL);
-+      }
-+
-+      if (atomic_read(&cache->c_entry_count) > 0) {
-+              mb_error("cache %s: %d orphaned entries",
-+                        cache->c_name,
-+                        atomic_read(&cache->c_entry_count));
-+      }
-+
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0))
-+      /* We don't have kmem_cache_destroy() in 2.2.x */
-+      kmem_cache_shrink(cache->c_entry_cache);
-+#else
-+      kmem_cache_destroy(cache->c_entry_cache);
-+#endif
-+      for (n=0; n < mb_cache_indexes(cache); n++)
-+              kfree(cache->c_indexes_hash[n]);
-+      kfree(cache->c_block_hash);
-+      kfree(cache);
-+
-+      MOD_DEC_USE_COUNT;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_alloc()
-+ *
-+ * Allocates a new cache entry. The new entry will not be valid initially,
-+ * and thus cannot be looked up yet. It should be filled with data, and
-+ * then inserted into the cache using mb_cache_entry_insert(). Returns NULL
-+ * if no more memory was available.
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_alloc(struct mb_cache *cache)
-+{
-+      struct mb_cache_entry *ce;
-+
-+      atomic_inc(&cache->c_entry_count);
-+      ce = kmem_cache_alloc(cache->c_entry_cache, GFP_KERNEL);
-+      if (ce) {
-+              INIT_LIST_HEAD(&ce->e_lru_list);
-+              INIT_LIST_HEAD(&ce->e_block_list);
-+              ce->e_cache = cache;
-+              atomic_set(&ce->e_used, 1);
-+      }
-+      return ce;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_insert()
-+ *
-+ * Inserts an entry that was allocated using mb_cache_entry_alloc() into
-+ * the cache. After this, the cache entry can be looked up, but is not yet
-+ * in the lru list as the caller still holds a handle to it. Returns 0 on
-+ * success, or -EBUSY if a cache entry for that device + inode exists
-+ * already (this may happen after a failed lookup, if another process has
-+ * inserted the same cache entry in the meantime).
-+ *
-+ * @dev: device the cache entry belongs to
-+ * @block: block number
-+ * @keys: array of additional keys. There must be indexes_count entries
-+ *        in the array (as specified when creating the cache).
-+ */
-+int
-+mb_cache_entry_insert(struct mb_cache_entry *ce, kdev_t dev,
-+                    unsigned long block, unsigned int keys[])
-+{
-+      struct mb_cache *cache = ce->e_cache;
-+      unsigned int bucket = (HASHDEV(dev) + block) % cache->c_bucket_count;
-+      struct list_head *l;
-+      int error = -EBUSY, n;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each(l, &cache->c_block_hash[bucket]) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(l, struct mb_cache_entry, e_block_list);
-+              if (ce->e_dev == dev && ce->e_block == block)
-+                      goto out;
-+      }
-+      __mb_cache_entry_unhash(ce);
-+      ce->e_dev = dev;
-+      ce->e_block = block;
-+      list_add(&ce->e_block_list, &cache->c_block_hash[bucket]);
-+      for (n=0; n<mb_cache_indexes(cache); n++) {
-+              ce->e_indexes[n].o_key = keys[n];
-+              bucket = keys[n] % cache->c_bucket_count;
-+              list_add(&ce->e_indexes[n].o_list,
-+                       &cache->c_indexes_hash[n][bucket]);
-+      }
-+out:
-+      spin_unlock(&mb_cache_spinlock);
-+      return error;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_release()
-+ *
-+ * Release a handle to a cache entry. When the last handle to a cache entry
-+ * is released it is either freed (if it is invalid) or otherwise inserted
-+ * in to the lru list.
-+ */
-+void
-+mb_cache_entry_release(struct mb_cache_entry *ce)
-+{
-+      spin_lock(&mb_cache_spinlock);
-+      __mb_cache_entry_release_unlock(ce);
-+}
-+
-+
-+/*
-+ * mb_cache_entry_takeout()
-+ *
-+ * Take a cache entry out of the cache, making it invalid. The entry can later
-+ * be re-inserted using mb_cache_entry_insert(), or released using
-+ * mb_cache_entry_release().
-+ */
-+void
-+mb_cache_entry_takeout(struct mb_cache_entry *ce)
-+{
-+      spin_lock(&mb_cache_spinlock);
-+      mb_assert(list_empty(&ce->e_lru_list));
-+      __mb_cache_entry_unhash(ce);
-+      spin_unlock(&mb_cache_spinlock);
-+}
-+
-+
-+/*
-+ * mb_cache_entry_free()
-+ *
-+ * This is equivalent to the sequence mb_cache_entry_takeout() --
-+ * mb_cache_entry_release().
-+ */
-+void
-+mb_cache_entry_free(struct mb_cache_entry *ce)
-+{
-+      spin_lock(&mb_cache_spinlock);
-+      mb_assert(list_empty(&ce->e_lru_list));
-+      __mb_cache_entry_unhash(ce);
-+      __mb_cache_entry_release_unlock(ce);
-+}
-+
-+
-+/*
-+ * mb_cache_entry_dup()
-+ *
-+ * Duplicate a handle to a cache entry (does not duplicate the cache entry
-+ * itself). After the call, both the old and the new handle must be released.
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_dup(struct mb_cache_entry *ce)
-+{
-+      atomic_inc(&ce->e_used);
-+      return ce;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_get()
-+ *
-+ * Get a cache entry  by device / block number. (There can only be one entry
-+ * in the cache per device and block.) Returns NULL if no such cache entry
-+ * exists.
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_get(struct mb_cache *cache, kdev_t dev, unsigned long block)
-+{
-+      unsigned int bucket = (HASHDEV(dev) + block) % cache->c_bucket_count;
-+      struct list_head *l;
-+      struct mb_cache_entry *ce;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each(l, &cache->c_block_hash[bucket]) {
-+              ce = list_entry(l, struct mb_cache_entry, e_block_list);
-+              if (ce->e_dev == dev && ce->e_block == block) {
-+                      if (!list_empty(&ce->e_lru_list))
-+                              list_del_init(&ce->e_lru_list);
-+                      atomic_inc(&ce->e_used);
-+                      goto cleanup;
-+              }
-+      }
-+      ce = NULL;
-+
-+cleanup:
-+      spin_unlock(&mb_cache_spinlock);
-+      return ce;
-+}
-+
-+#if !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0)
-+
-+static struct mb_cache_entry *
-+__mb_cache_entry_find(struct list_head *l, struct list_head *head,
-+                    int index, kdev_t dev, unsigned int key)
-+{
-+      while (l != head) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(l, struct mb_cache_entry,
-+                                 e_indexes[index].o_list);
-+              if (ce->e_dev == dev && ce->e_indexes[index].o_key == key) {
-+                      if (!list_empty(&ce->e_lru_list))
-+                              list_del_init(&ce->e_lru_list);
-+                      atomic_inc(&ce->e_used);
-+                      return ce;
-+              }
-+              l = l->next;
-+      }
-+      return NULL;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_find_first()
-+ *
-+ * Find the first cache entry on a given device with a certain key in
-+ * an additional index. Additonal matches can be found with
-+ * mb_cache_entry_find_next(). Returns NULL if no match was found.
-+ *
-+ * @cache: the cache to search
-+ * @index: the number of the additonal index to search (0<=index<indexes_count)
-+ * @dev: the device the cache entry should belong to
-+ * @key: the key in the index
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_find_first(struct mb_cache *cache, int index, kdev_t dev,
-+                        unsigned int key)
-+{
-+      unsigned int bucket = key % cache->c_bucket_count;
-+      struct list_head *l;
-+      struct mb_cache_entry *ce;
-+
-+      mb_assert(index < mb_cache_indexes(cache));
-+      spin_lock(&mb_cache_spinlock);
-+      l = cache->c_indexes_hash[index][bucket].next;
-+      ce = __mb_cache_entry_find(l, &cache->c_indexes_hash[index][bucket],
-+                                 index, dev, key);
-+      spin_unlock(&mb_cache_spinlock);
-+      return ce;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_find_next()
-+ *
-+ * Find the next cache entry on a given device with a certain key in an
-+ * additional index. Returns NULL if no match could be found. The previous
-+ * entry is atomatically released, so that mb_cache_entry_find_next() can
-+ * be called like this:
-+ *
-+ * entry = mb_cache_entry_find_first();
-+ * while (entry) {
-+ *    ...
-+ *    entry = mb_cache_entry_find_next(entry, ...);
-+ * }
-+ *
-+ * @prev: The previous match
-+ * @index: the number of the additonal index to search (0<=index<indexes_count)
-+ * @dev: the device the cache entry should belong to
-+ * @key: the key in the index
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_find_next(struct mb_cache_entry *prev, int index, kdev_t dev,
-+                       unsigned int key)
-+{
-+      struct mb_cache *cache = prev->e_cache;
-+      unsigned int bucket = key % cache->c_bucket_count;
-+      struct list_head *l;
-+      struct mb_cache_entry *ce;
-+
-+      mb_assert(index < mb_cache_indexes(cache));
-+      spin_lock(&mb_cache_spinlock);
-+      l = prev->e_indexes[index].o_list.next;
-+      ce = __mb_cache_entry_find(l, &cache->c_indexes_hash[index][bucket],
-+                                 index, dev, key);
-+      __mb_cache_entry_release_unlock(prev);
-+      return ce;
-+}
-+
-+#endif  /* !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0) */
-+
-+static int __init init_mbcache(void)
-+{
-+      register_cache(&mb_cache_definition);
-+      return 0;
-+}
-+
-+static void __exit exit_mbcache(void)
-+{
-+      unregister_cache(&mb_cache_definition);
-+}
-+
-+module_init(init_mbcache)
-+module_exit(exit_mbcache)
-+
-Index: linux-2.4.19-pre1/fs/xattr.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/xattr.c  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.19-pre1/fs/xattr.c       2004-01-14 01:11:49.000000000 +0300
-@@ -0,0 +1,355 @@
-+/*
-+  File: fs/xattr.c
-+
-+  Extended attribute handling.
-+
-+  Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org>
-+  Copyright (C) 2001 SGI - Silicon Graphics, Inc <linux-xfs@oss.sgi.com>
-+ */
-+#include <linux/fs.h>
-+#include <linux/slab.h>
-+#include <linux/vmalloc.h>
-+#include <linux/smp_lock.h>
-+#include <linux/file.h>
-+#include <linux/xattr.h>
-+#include <asm/uaccess.h>
-+
-+/*
-+ * Extended attribute memory allocation wrappers, originally
-+ * based on the Intermezzo PRESTO_ALLOC/PRESTO_FREE macros.
-+ * The vmalloc use here is very uncommon - extended attributes
-+ * are supposed to be small chunks of metadata, and it is quite
-+ * unusual to have very many extended attributes, so lists tend
-+ * to be quite short as well.  The 64K upper limit is derived
-+ * from the extended attribute size limit used by XFS.
-+ * Intentionally allow zero @size for value/list size requests.
-+ */
-+static void *
-+xattr_alloc(size_t size, size_t limit)
-+{
-+      void *ptr;
-+
-+      if (size > limit)
-+              return ERR_PTR(-E2BIG);
-+
-+      if (!size)      /* size request, no buffer is needed */
-+              return NULL;
-+      else if (size <= PAGE_SIZE)
-+              ptr = kmalloc((unsigned long) size, GFP_KERNEL);
-+      else
-+              ptr = vmalloc((unsigned long) size);
-+      if (!ptr)
-+              return ERR_PTR(-ENOMEM);
-+      return ptr;
-+}
-+
-+static void
-+xattr_free(void *ptr, size_t size)
-+{
-+      if (!size)      /* size request, no buffer was needed */
-+              return;
-+      else if (size <= PAGE_SIZE)
-+              kfree(ptr);
-+      else
-+              vfree(ptr);
-+}
-+
-+/*
-+ * Extended attribute SET operations
-+ */
-+static long
-+setxattr(struct dentry *d, char *name, void *value, size_t size, int flags)
-+{
-+      int error;
-+      void *kvalue;
-+      char kname[XATTR_NAME_MAX + 1];
-+
-+      if (flags & ~(XATTR_CREATE|XATTR_REPLACE))
-+              return -EINVAL;
-+
-+      error = strncpy_from_user(kname, name, sizeof(kname));
-+      if (error == 0 || error == sizeof(kname))
-+              error = -ERANGE;
-+      if (error < 0)
-+              return error;
-+
-+      kvalue = xattr_alloc(size, XATTR_SIZE_MAX);
-+      if (IS_ERR(kvalue))
-+              return PTR_ERR(kvalue);
-+
-+      if (size > 0 && copy_from_user(kvalue, value, size)) {
-+              xattr_free(kvalue, size);
-+              return -EFAULT;
-+      }
-+
-+      error = -EOPNOTSUPP;
-+      if (d->d_inode->i_op && d->d_inode->i_op->setxattr) {
-+              down(&d->d_inode->i_sem);
-+              lock_kernel();
-+              error = d->d_inode->i_op->setxattr(d, kname, kvalue, size, flags);
-+              unlock_kernel();
-+              up(&d->d_inode->i_sem);
-+      }
-+
-+      xattr_free(kvalue, size);
-+      return error;
-+}
-+
-+asmlinkage long
-+sys_setxattr(char *path, char *name, void *value, size_t size, int flags)
-+{
-+      struct nameidata nd;
-+      int error;
-+
-+      error = user_path_walk(path, &nd);
-+      if (error)
-+              return error;
-+      error = setxattr(nd.dentry, name, value, size, flags);
-+      path_release(&nd);
-+      return error;
-+}
-+
-+asmlinkage long
-+sys_lsetxattr(char *path, char *name, void *value, size_t size, int flags)
-+{
-+      struct nameidata nd;
-+      int error;
-+
-+      error = user_path_walk_link(path, &nd);
-+      if (error)
-+              return error;
-+      error = setxattr(nd.dentry, name, value, size, flags);
-+      path_release(&nd);
-+      return error;
-+}
-+
-+asmlinkage long
-+sys_fsetxattr(int fd, char *name, void *value, size_t size, int flags)
-+{
-+      struct file *f;
-+      int error = -EBADF;
-+
-+      f = fget(fd);
-+      if (!f)
-+              return error;
-+      error = setxattr(f->f_dentry, name, value, size, flags);
-+      fput(f);
-+      return error;
-+}
-+
-+/*
-+ * Extended attribute GET operations
-+ */
-+static ssize_t
-+getxattr(struct dentry *d, char *name, void *value, size_t size)
-+{
-+      ssize_t error;
-+      void *kvalue;
-+      char kname[XATTR_NAME_MAX + 1];
-+
-+      error = strncpy_from_user(kname, name, sizeof(kname));
-+      if (error == 0 || error == sizeof(kname))
-+              error = -ERANGE;
-+      if (error < 0)
-+              return error;
-+
-+      kvalue = xattr_alloc(size, XATTR_SIZE_MAX);
-+      if (IS_ERR(kvalue))
-+              return PTR_ERR(kvalue);
-+
-+      error = -EOPNOTSUPP;
-+      if (d->d_inode->i_op && d->d_inode->i_op->getxattr) {
-+              down(&d->d_inode->i_sem);
-+              lock_kernel();
-+              error = d->d_inode->i_op->getxattr(d, kname, kvalue, size);
-+              unlock_kernel();
-+              up(&d->d_inode->i_sem);
-+      }
-+
-+      if (kvalue && error > 0)
-+              if (copy_to_user(value, kvalue, error))
-+                      error = -EFAULT;
-+      xattr_free(kvalue, size);
-+      return error;
-+}
-+
-+asmlinkage ssize_t
-+sys_getxattr(char *path, char *name, void *value, size_t size)
-+{
-+      struct nameidata nd;
-+      ssize_t error;
-+
-+      error = user_path_walk(path, &nd);
-+      if (error)
-+              return error;
-+      error = getxattr(nd.dentry, name, value, size);
-+      path_release(&nd);
-+      return error;
-+}
-+
-+asmlinkage ssize_t
-+sys_lgetxattr(char *path, char *name, void *value, size_t size)
-+{
-+      struct nameidata nd;
-+      ssize_t error;
-+
-+      error = user_path_walk_link(path, &nd);
-+      if (error)
-+              return error;
-+      error = getxattr(nd.dentry, name, value, size);
-+      path_release(&nd);
-+      return error;
-+}
-+
-+asmlinkage ssize_t
-+sys_fgetxattr(int fd, char *name, void *value, size_t size)
-+{
-+      struct file *f;
-+      ssize_t error = -EBADF;
-+
-+      f = fget(fd);
-+      if (!f)
-+              return error;
-+      error = getxattr(f->f_dentry, name, value, size);
-+      fput(f);
-+      return error;
-+}
-+
-+/*
-+ * Extended attribute LIST operations
-+ */
-+static ssize_t
-+listxattr(struct dentry *d, char *list, size_t size)
-+{
-+      ssize_t error;
-+      char *klist;
-+
-+      klist = (char *)xattr_alloc(size, XATTR_LIST_MAX);
-+      if (IS_ERR(klist))
-+              return PTR_ERR(klist);
-+
-+      error = -EOPNOTSUPP;
-+      if (d->d_inode->i_op && d->d_inode->i_op->listxattr) {
-+              down(&d->d_inode->i_sem);
-+              lock_kernel();
-+              error = d->d_inode->i_op->listxattr(d, klist, size);
-+              unlock_kernel();
-+              up(&d->d_inode->i_sem);
-+      }
-+
-+      if (klist && error > 0)
-+              if (copy_to_user(list, klist, error))
-+                      error = -EFAULT;
-+      xattr_free(klist, size);
-+      return error;
-+}
-+
-+asmlinkage ssize_t
-+sys_listxattr(char *path, char *list, size_t size)
-+{
-+      struct nameidata nd;
-+      ssize_t error;
-+
-+      error = user_path_walk(path, &nd);
-+      if (error)
-+              return error;
-+      error = listxattr(nd.dentry, list, size);
-+      path_release(&nd);
-+      return error;
-+}
-+
-+asmlinkage ssize_t
-+sys_llistxattr(char *path, char *list, size_t size)
-+{
-+      struct nameidata nd;
-+      ssize_t error;
-+
-+      error = user_path_walk_link(path, &nd);
-+      if (error)
-+              return error;
-+      error = listxattr(nd.dentry, list, size);
-+      path_release(&nd);
-+      return error;
-+}
-+
-+asmlinkage ssize_t
-+sys_flistxattr(int fd, char *list, size_t size)
-+{
-+      struct file *f;
-+      ssize_t error = -EBADF;
-+
-+      f = fget(fd);
-+      if (!f)
-+              return error;
-+      error = listxattr(f->f_dentry, list, size);
-+      fput(f);
-+      return error;
-+}
-+
-+/*
-+ * Extended attribute REMOVE operations
-+ */
-+static long
-+removexattr(struct dentry *d, char *name)
-+{
-+      int error;
-+      char kname[XATTR_NAME_MAX + 1];
-+
-+      error = strncpy_from_user(kname, name, sizeof(kname));
-+      if (error == 0 || error == sizeof(kname))
-+              error = -ERANGE;
-+      if (error < 0)
-+              return error;
-+
-+      error = -EOPNOTSUPP;
-+      if (d->d_inode->i_op && d->d_inode->i_op->removexattr) {
-+              down(&d->d_inode->i_sem);
-+              lock_kernel();
-+              error = d->d_inode->i_op->removexattr(d, kname);
-+              unlock_kernel();
-+              up(&d->d_inode->i_sem);
-+      }
-+      return error;
-+}
-+
-+asmlinkage long
-+sys_removexattr(char *path, char *name)
-+{
-+      struct nameidata nd;
-+      int error;
-+
-+      error = user_path_walk(path, &nd);
-+      if (error)
-+              return error;
-+      error = removexattr(nd.dentry, name);
-+      path_release(&nd);
-+      return error;
-+}
-+
-+asmlinkage long
-+sys_lremovexattr(char *path, char *name)
-+{
-+      struct nameidata nd;
-+      int error;
-+
-+      error = user_path_walk_link(path, &nd);
-+      if (error)
-+              return error;
-+      error = removexattr(nd.dentry, name);
-+      path_release(&nd);
-+      return error;
-+}
-+
-+asmlinkage long
-+sys_fremovexattr(int fd, char *name)
-+{
-+      struct file *f;
-+      int error = -EBADF;
-+
-+      f = fget(fd);
-+      if (!f)
-+              return error;
-+      error = removexattr(f->f_dentry, name);
-+      fput(f);
-+      return error;
-+}
-Index: linux-2.4.19-pre1/include/asm-arm/unistd.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/asm-arm/unistd.h    2001-08-12 22:14:00.000000000 +0400
-+++ linux-2.4.19-pre1/include/asm-arm/unistd.h 2004-01-14 01:11:49.000000000 +0300
-@@ -240,6 +240,18 @@
- #define __NR_mincore                  (__NR_SYSCALL_BASE+219)
- #define __NR_madvise                  (__NR_SYSCALL_BASE+220)
- #define __NR_fcntl64                  (__NR_SYSCALL_BASE+221)
-+#define __NR_setxattr                 (__NR_SYSCALL_BASE+226)
-+#define __NR_lsetxattr                        (__NR_SYSCALL_BASE+227)
-+#define __NR_fsetxattr                        (__NR_SYSCALL_BASE+228)
-+#define __NR_getxattr                 (__NR_SYSCALL_BASE+229)
-+#define __NR_lgetxattr                        (__NR_SYSCALL_BASE+230)
-+#define __NR_fgetxattr                        (__NR_SYSCALL_BASE+231)
-+#define __NR_listxattr                        (__NR_SYSCALL_BASE+232)
-+#define __NR_llistxattr                       (__NR_SYSCALL_BASE+233)
-+#define __NR_flistxattr                       (__NR_SYSCALL_BASE+234)
-+#define __NR_removexattr              (__NR_SYSCALL_BASE+235)
-+#define __NR_lremovexattr             (__NR_SYSCALL_BASE+236)
-+#define __NR_fremovexattr             (__NR_SYSCALL_BASE+237)
- /*
-  * The following SWIs are ARM private.
-Index: linux-2.4.19-pre1/include/asm-ia64/unistd.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/asm-ia64/unistd.h   2001-11-10 01:26:17.000000000 +0300
-+++ linux-2.4.19-pre1/include/asm-ia64/unistd.h        2004-01-14 01:11:49.000000000 +0300
-@@ -206,6 +206,18 @@
- #define __NR_getdents64                       1214
- #define __NR_getunwind                        1215
- #define __NR_readahead                        1216
-+#define __NR_setxattr                 1217
-+#define __NR_lsetxattr                        1218
-+#define __NR_fsetxattr                        1219
-+#define __NR_getxattr                 1220
-+#define __NR_lgetxattr                        1221
-+#define __NR_fgetxattr                        1222
-+#define __NR_listxattr                        1223
-+#define __NR_llistxattr                       1224
-+#define __NR_flistxattr                       1225
-+#define __NR_removexattr              1226
-+#define __NR_lremovexattr             1227
-+#define __NR_fremovexattr             1228
- #if !defined(__ASSEMBLY__) && !defined(ASSEMBLER)
-Index: linux-2.4.19-pre1/include/asm-s390/unistd.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/asm-s390/unistd.h   2001-10-11 20:43:38.000000000 +0400
-+++ linux-2.4.19-pre1/include/asm-s390/unistd.h        2004-01-14 01:11:49.000000000 +0300
-@@ -211,6 +211,18 @@
- #define __NR_mincore            218
- #define __NR_madvise            219
- #define __NR_getdents64               220
-+#define __NR_setxattr         224
-+#define __NR_lsetxattr                225
-+#define __NR_fsetxattr                226
-+#define __NR_getxattr         227
-+#define __NR_lgetxattr                228
-+#define __NR_fgetxattr                229
-+#define __NR_listxattr                230
-+#define __NR_llistxattr               231
-+#define __NR_flistxattr               232
-+#define __NR_removexattr      233
-+#define __NR_lremovexattr     234
-+#define __NR_fremovexattr     235
- /* user-visible error numbers are in the range -1 - -122: see <asm-s390/errno.h> */
-Index: linux-2.4.19-pre1/include/asm-s390x/unistd.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/asm-s390x/unistd.h  2001-10-11 20:43:38.000000000 +0400
-+++ linux-2.4.19-pre1/include/asm-s390x/unistd.h       2004-01-14 01:11:49.000000000 +0300
-@@ -181,6 +181,18 @@
- #define __NR_mincore            218
- #define __NR_madvise            219
- #define __NR_getdents64         220
-+#define __NR_setxattr         224
-+#define __NR_lsetxattr                225
-+#define __NR_fsetxattr                226
-+#define __NR_getxattr         227
-+#define __NR_lgetxattr                228
-+#define __NR_fgetxattr                229
-+#define __NR_listxattr                230
-+#define __NR_llistxattr               231
-+#define __NR_flistxattr               232
-+#define __NR_removexattr      233
-+#define __NR_lremovexattr     234
-+#define __NR_fremovexattr     235
- /* user-visible error numbers are in the range -1 - -122: see <asm-s390/errno.h> */
-Index: linux-2.4.19-pre1/include/asm-sparc/unistd.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/asm-sparc/unistd.h  2001-10-21 21:36:54.000000000 +0400
-+++ linux-2.4.19-pre1/include/asm-sparc/unistd.h       2004-01-14 01:11:49.000000000 +0300
-@@ -184,24 +184,24 @@
- /* #define __NR_exportfs        166    SunOS Specific                              */
- #define __NR_mount              167 /* Common                                      */
- #define __NR_ustat              168 /* Common                                      */
--/* #define __NR_semsys          169    SunOS Specific                              */
--/* #define __NR_msgsys          170    SunOS Specific                              */
--/* #define __NR_shmsys          171    SunOS Specific                              */
--/* #define __NR_auditsys        172    SunOS Specific                              */
--/* #define __NR_rfssys          173    SunOS Specific                              */
-+#define __NR_setxattr           169 /* SunOS: semsys                               */
-+#define __NR_lsetxattr          170 /* SunOS: msgsys                               */
-+#define __NR_fsetxattr          171 /* SunOS: shmsys                               */
-+#define __NR_getxattr           172 /* SunOS: auditsys                             */
-+#define __NR_lgetxattr          173 /* SunOS: rfssys                               */
- #define __NR_getdents           174 /* Common                                      */
- #define __NR_setsid             175 /* Common                                      */
- #define __NR_fchdir             176 /* Common                                      */
--/* #define __NR_fchroot         177    SunOS Specific                              */
--/* #define __NR_vpixsys         178    SunOS Specific                              */
--/* #define __NR_aioread         179    SunOS Specific                              */
--/* #define __NR_aiowrite        180    SunOS Specific                              */
--/* #define __NR_aiowait         181    SunOS Specific                              */
--/* #define __NR_aiocancel       182    SunOS Specific                              */
-+#define __NR_fgetxattr          177 /* SunOS: fchroot                              */
-+#define __NR_listxattr          178 /* SunOS: vpixsys                              */
-+#define __NR_llistxattr         179 /* SunOS: aioread                              */
-+#define __NR_flistxattr         180 /* SunOS: aiowrite                             */
-+#define __NR_removexattr        181 /* SunOS: aiowait                              */
-+#define __NR_lremovexattr       182 /* SunOS: aiocancel                            */
- #define __NR_sigpending         183 /* Common                                      */
- #define __NR_query_module     184 /* Linux Specific                              */
- #define __NR_setpgid            185 /* Common                                      */
--/* #define __NR_pathconf        186    SunOS Specific                              */
-+#define __NR_fremovexattr       186 /* SunOS: pathconf                             */
- /* #define __NR_fpathconf       187    SunOS Specific                              */
- /* #define __NR_sysconf         188    SunOS Specific                              */
- #define __NR_uname              189 /* Linux Specific                              */
-Index: linux-2.4.19-pre1/include/asm-sparc64/unistd.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/asm-sparc64/unistd.h        2001-10-21 21:36:54.000000000 +0400
-+++ linux-2.4.19-pre1/include/asm-sparc64/unistd.h     2004-01-14 01:11:49.000000000 +0300
-@@ -184,24 +184,24 @@
- /* #define __NR_exportfs        166    SunOS Specific                              */
- #define __NR_mount              167 /* Common                                      */
- #define __NR_ustat              168 /* Common                                      */
--/* #define __NR_semsys          169    SunOS Specific                              */
--/* #define __NR_msgsys          170    SunOS Specific                              */
--/* #define __NR_shmsys          171    SunOS Specific                              */
--/* #define __NR_auditsys        172    SunOS Specific                              */
--/* #define __NR_rfssys          173    SunOS Specific                              */
-+#define __NR_setxattr           169 /* SunOS: semsys                               */
-+#define __NR_lsetxattr          170 /* SunOS: msgsys                               */
-+#define __NR_fsetxattr          171 /* SunOS: shmsys                               */
-+#define __NR_getxattr           172 /* SunOS: auditsys                             */
-+#define __NR_lgetxattr          173 /* SunOS: rfssys                               */
- #define __NR_getdents           174 /* Common                                      */
- #define __NR_setsid             175 /* Common                                      */
- #define __NR_fchdir             176 /* Common                                      */
--/* #define __NR_fchroot         177    SunOS Specific                              */
--/* #define __NR_vpixsys         178    SunOS Specific                              */
--/* #define __NR_aioread         179    SunOS Specific                              */
--/* #define __NR_aiowrite        180    SunOS Specific                              */
--/* #define __NR_aiowait         181    SunOS Specific                              */
--/* #define __NR_aiocancel       182    SunOS Specific                              */
-+#define __NR_fgetxattr          177 /* SunOS: fchroot                              */
-+#define __NR_listxattr          178 /* SunOS: vpixsys                              */
-+#define __NR_llistxattr         179 /* SunOS: aioread                              */
-+#define __NR_flistxattr         180 /* SunOS: aiowrite                             */
-+#define __NR_removexattr        181 /* SunOS: aiowait                              */
-+#define __NR_lremovexattr       182 /* SunOS: aiocancel                            */
- #define __NR_sigpending         183 /* Common                                      */
- #define __NR_query_module     184 /* Linux Specific                              */
- #define __NR_setpgid            185 /* Common                                      */
--/* #define __NR_pathconf        186    SunOS Specific                              */
-+#define __NR_fremovexattr       186 /* SunOS: pathconf                             */
- /* #define __NR_fpathconf       187    SunOS Specific                              */
- /* #define __NR_sysconf         188    SunOS Specific                              */
- #define __NR_uname              189 /* Linux Specific                              */
-Index: linux-2.4.19-pre1/include/linux/cache_def.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/cache_def.h   2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/cache_def.h        2004-01-14 01:11:49.000000000 +0300
-@@ -0,0 +1,15 @@
-+/*
-+ * linux/cache_def.h
-+ * Handling of caches defined in drivers, filesystems, ...
-+ *
-+ * Copyright (C) 2002 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ */
-+
-+struct cache_definition {
-+      const char *name;
-+      void (*shrink)(int, unsigned int);
-+      struct list_head link;
-+};
-+
-+extern void register_cache(struct cache_definition *);
-+extern void unregister_cache(struct cache_definition *);
-Index: linux-2.4.19-pre1/include/linux/errno.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/errno.h       2001-02-10 01:46:13.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/errno.h    2004-01-14 01:11:49.000000000 +0300
-@@ -23,4 +23,8 @@
- #endif
-+/* Defined for extended attributes */
-+#define ENOATTR ENODATA               /* No such attribute */
-+#define ENOTSUP EOPNOTSUPP    /* Operation not supported */
-+
- #endif
-Index: linux-2.4.19-pre1/include/linux/ext2_fs.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/ext2_fs.h     2001-11-22 22:46:52.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/ext2_fs.h  2004-01-14 01:18:00.000000000 +0300
-@@ -57,8 +57,6 @@
-  */
- #define       EXT2_BAD_INO             1      /* Bad blocks inode */
- #define EXT2_ROOT_INO          2      /* Root inode */
--#define EXT2_ACL_IDX_INO       3      /* ACL inode */
--#define EXT2_ACL_DATA_INO      4      /* ACL inode */
- #define EXT2_BOOT_LOADER_INO   5      /* Boot loader inode */
- #define EXT2_UNDEL_DIR_INO     6      /* Undelete directory inode */
-@@ -86,7 +84,6 @@
- #else
- # define EXT2_BLOCK_SIZE(s)           (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
- #endif
--#define EXT2_ACLE_PER_BLOCK(s)                (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_acl_entry))
- #define       EXT2_ADDR_PER_BLOCK(s)          (EXT2_BLOCK_SIZE(s) / sizeof (__u32))
- #ifdef __KERNEL__
- # define EXT2_BLOCK_SIZE_BITS(s)      ((s)->s_blocksize_bits)
-@@ -121,28 +118,6 @@
- #endif
- /*
-- * ACL structures
-- */
--struct ext2_acl_header        /* Header of Access Control Lists */
--{
--      __u32   aclh_size;
--      __u32   aclh_file_count;
--      __u32   aclh_acle_count;
--      __u32   aclh_first_acle;
--};
--
--struct ext2_acl_entry /* Access Control List Entry */
--{
--      __u32   acle_size;
--      __u16   acle_perms;     /* Access permissions */
--      __u16   acle_type;      /* Type of entry */
--      __u16   acle_tag;       /* User or group identity */
--      __u16   acle_pad1;
--      __u32   acle_next;      /* Pointer on next entry for the */
--                                      /* same inode or on next free entry */
--};
--
--/*
-  * Structure of a blocks group descriptor
-  */
- struct ext2_group_desc
-@@ -314,6 +289,7 @@
- #define EXT2_MOUNT_ERRORS_PANIC               0x0040  /* Panic on errors */
- #define EXT2_MOUNT_MINIX_DF           0x0080  /* Mimics the Minix statfs */
- #define EXT2_MOUNT_NO_UID32           0x0200  /* Disable 32-bit UIDs */
-+#define EXT2_MOUNT_XATTR_USER         0x4000  /* Extended user attributes */
- #define clear_opt(o, opt)             o &= ~EXT2_MOUNT_##opt
- #define set_opt(o, opt)                       o |= EXT2_MOUNT_##opt
-@@ -397,6 +373,7 @@
- #ifdef __KERNEL__
- #define EXT2_SB(sb)   (&((sb)->u.ext2_sb))
-+#define EXT2_I(inode) (&((inode)->u.ext2_i))
- #else
- /* Assume that user mode programs are passing in an ext2fs superblock, not
-  * a kernel struct super_block.  This will allow us to call the feature-test
-@@ -466,7 +443,7 @@
- #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008
- #define EXT2_FEATURE_INCOMPAT_ANY             0xffffffff
--#define EXT2_FEATURE_COMPAT_SUPP      0
-+#define EXT2_FEATURE_COMPAT_SUPP      EXT2_FEATURE_COMPAT_EXT_ATTR
- #define EXT2_FEATURE_INCOMPAT_SUPP    EXT2_FEATURE_INCOMPAT_FILETYPE
- #define EXT2_FEATURE_RO_COMPAT_SUPP   (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
-@@ -623,8 +600,10 @@
- /* namei.c */
- extern struct inode_operations ext2_dir_inode_operations;
-+extern struct inode_operations ext2_special_inode_operations;
- /* symlink.c */
-+extern struct inode_operations ext2_symlink_inode_operations;
- extern struct inode_operations ext2_fast_symlink_inode_operations;
- #endif        /* __KERNEL__ */
-Index: linux-2.4.19-pre1/include/linux/ext2_xattr.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/ext2_xattr.h  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/ext2_xattr.h       2004-01-14 01:18:01.000000000 +0300
-@@ -0,0 +1,157 @@
-+/*
-+  File: linux/ext2_xattr.h
-+
-+  On-disk format of extended attributes for the ext2 filesystem.
-+
-+  (C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+*/
-+
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/xattr.h>
-+
-+/* Magic value in attribute blocks */
-+#define EXT2_XATTR_MAGIC              0xEA020000
-+
-+/* Maximum number of references to one attribute block */
-+#define EXT2_XATTR_REFCOUNT_MAX               1024
-+
-+/* Name indexes */
-+#define EXT2_XATTR_INDEX_MAX                  10
-+#define EXT2_XATTR_INDEX_USER                 1
-+#define EXT2_XATTR_INDEX_POSIX_ACL_ACCESS     2
-+#define EXT2_XATTR_INDEX_POSIX_ACL_DEFAULT    3
-+
-+struct ext2_xattr_header {
-+      __u32   h_magic;        /* magic number for identification */
-+      __u32   h_refcount;     /* reference count */
-+      __u32   h_blocks;       /* number of disk blocks used */
-+      __u32   h_hash;         /* hash value of all attributes */
-+      __u32   h_reserved[4];  /* zero right now */
-+};
-+
-+struct ext2_xattr_entry {
-+      __u8    e_name_len;     /* length of name */
-+      __u8    e_name_index;   /* attribute name index */
-+      __u16   e_value_offs;   /* offset in disk block of value */
-+      __u32   e_value_block;  /* disk block attribute is stored on (n/i) */
-+      __u32   e_value_size;   /* size of attribute value */
-+      __u32   e_hash;         /* hash value of name and value */
-+      char    e_name[0];      /* attribute name */
-+};
-+
-+#define EXT2_XATTR_PAD_BITS           2
-+#define EXT2_XATTR_PAD                (1<<EXT2_XATTR_PAD_BITS)
-+#define EXT2_XATTR_ROUND              (EXT2_XATTR_PAD-1)
-+#define EXT2_XATTR_LEN(name_len) \
-+      (((name_len) + EXT2_XATTR_ROUND + \
-+      sizeof(struct ext2_xattr_entry)) & ~EXT2_XATTR_ROUND)
-+#define EXT2_XATTR_NEXT(entry) \
-+      ( (struct ext2_xattr_entry *)( \
-+        (char *)(entry) + EXT2_XATTR_LEN((entry)->e_name_len)) )
-+#define EXT2_XATTR_SIZE(size) \
-+      (((size) + EXT2_XATTR_ROUND) & ~EXT2_XATTR_ROUND)
-+
-+#ifdef __KERNEL__
-+
-+# ifdef CONFIG_EXT2_FS_XATTR
-+
-+struct ext2_xattr_handler {
-+      char *prefix;
-+      size_t (*list)(char *list, struct inode *inode, const char *name,
-+                     int name_len);
-+      int (*get)(struct inode *inode, const char *name, void *buffer,
-+                 size_t size);
-+      int (*set)(struct inode *inode, const char *name, const void *buffer,
-+                 size_t size, int flags);
-+};
-+
-+extern int ext2_xattr_register(int, struct ext2_xattr_handler *);
-+extern void ext2_xattr_unregister(int, struct ext2_xattr_handler *);
-+
-+extern int ext2_setxattr(struct dentry *, const char *, const void *, size_t, int);
-+extern ssize_t ext2_getxattr(struct dentry *, const char *, void *, size_t);
-+extern ssize_t ext2_listxattr(struct dentry *, char *, size_t);
-+extern int ext2_removexattr(struct dentry *, const char *);
-+
-+extern int ext2_xattr_get(struct inode *, int, const char *, void *, size_t);
-+extern int ext2_xattr_list(struct inode *, char *, size_t);
-+extern int ext2_xattr_set(struct inode *, int, const char *, const void *, size_t, int);
-+
-+extern void ext2_xattr_delete_inode(struct inode *);
-+extern void ext2_xattr_put_super(struct super_block *);
-+
-+extern int init_ext2_xattr(void) __init;
-+extern void exit_ext2_xattr(void);
-+
-+# else  /* CONFIG_EXT2_FS_XATTR */
-+#  define ext2_setxattr               NULL
-+#  define ext2_getxattr               NULL
-+#  define ext2_listxattr      NULL
-+#  define ext2_removexattr    NULL
-+
-+static inline int
-+ext2_xattr_get(struct inode *inode, int name_index,
-+             const char *name, void *buffer, size_t size)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext2_xattr_list(struct inode *inode, char *buffer, size_t size)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext2_xattr_set(struct inode *inode, int name_index, const char *name,
-+             const void *value, size_t size, int flags)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline void
-+ext2_xattr_delete_inode(struct inode *inode)
-+{
-+}
-+
-+static inline void
-+ext2_xattr_put_super(struct super_block *sb)
-+{
-+}
-+
-+static inline int
-+init_ext2_xattr(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext2_xattr(void)
-+{
-+}
-+
-+# endif  /* CONFIG_EXT2_FS_XATTR */
-+
-+# ifdef CONFIG_EXT2_FS_XATTR_USER
-+
-+extern int init_ext2_xattr_user(void) __init;
-+extern void exit_ext2_xattr_user(void);
-+
-+# else  /* CONFIG_EXT2_FS_XATTR_USER */
-+
-+static inline int
-+init_ext2_xattr_user(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext2_xattr_user(void)
-+{
-+}
-+
-+# endif  /* CONFIG_EXT2_FS_XATTR_USER */
-+
-+#endif  /* __KERNEL__ */
-+
-Index: linux-2.4.19-pre1/include/linux/ext3_fs.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/ext3_fs.h     2004-01-14 01:11:49.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/ext3_fs.h  2004-01-14 01:11:49.000000000 +0300
-@@ -63,8 +63,6 @@
-  */
- #define       EXT3_BAD_INO             1      /* Bad blocks inode */
- #define EXT3_ROOT_INO          2      /* Root inode */
--#define EXT3_ACL_IDX_INO       3      /* ACL inode */
--#define EXT3_ACL_DATA_INO      4      /* ACL inode */
- #define EXT3_BOOT_LOADER_INO   5      /* Boot loader inode */
- #define EXT3_UNDEL_DIR_INO     6      /* Undelete directory inode */
- #define EXT3_RESIZE_INO                7      /* Reserved group descriptors inode */
-@@ -94,7 +92,6 @@
- #else
- # define EXT3_BLOCK_SIZE(s)           (EXT3_MIN_BLOCK_SIZE << (s)->s_log_block_size)
- #endif
--#define EXT3_ACLE_PER_BLOCK(s)                (EXT3_BLOCK_SIZE(s) / sizeof (struct ext3_acl_entry))
- #define       EXT3_ADDR_PER_BLOCK(s)          (EXT3_BLOCK_SIZE(s) / sizeof (__u32))
- #ifdef __KERNEL__
- # define EXT3_BLOCK_SIZE_BITS(s)      ((s)->s_blocksize_bits)
-@@ -129,28 +126,6 @@
- #endif
- /*
-- * ACL structures
-- */
--struct ext3_acl_header        /* Header of Access Control Lists */
--{
--      __u32   aclh_size;
--      __u32   aclh_file_count;
--      __u32   aclh_acle_count;
--      __u32   aclh_first_acle;
--};
--
--struct ext3_acl_entry /* Access Control List Entry */
--{
--      __u32   acle_size;
--      __u16   acle_perms;     /* Access permissions */
--      __u16   acle_type;      /* Type of entry */
--      __u16   acle_tag;       /* User or group identity */
--      __u16   acle_pad1;
--      __u32   acle_next;      /* Pointer on next entry for the */
--                                      /* same inode or on next free entry */
--};
--
--/*
-  * Structure of a blocks group descriptor
-  */
- struct ext3_group_desc
-@@ -344,6 +319,7 @@
-   #define EXT3_MOUNT_WRITEBACK_DATA   0x0C00  /* No data ordering */
- #define EXT3_MOUNT_UPDATE_JOURNAL     0x1000  /* Update the journal format */
- #define EXT3_MOUNT_NO_UID32           0x2000  /* Disable 32-bit UIDs */
-+#define EXT3_MOUNT_XATTR_USER         0x4000  /* Extended user attributes */
- /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
- #ifndef _LINUX_EXT2_FS_H
-@@ -520,7 +496,7 @@
- #define EXT3_FEATURE_INCOMPAT_RECOVER         0x0004 /* Needs recovery */
- #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008 /* Journal device */
--#define EXT3_FEATURE_COMPAT_SUPP      0
-+#define EXT3_FEATURE_COMPAT_SUPP      EXT2_FEATURE_COMPAT_EXT_ATTR
- #define EXT3_FEATURE_INCOMPAT_SUPP    (EXT3_FEATURE_INCOMPAT_FILETYPE| \
-                                        EXT3_FEATURE_INCOMPAT_RECOVER)
- #define EXT3_FEATURE_RO_COMPAT_SUPP   (EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-@@ -703,6 +679,7 @@
- extern unsigned long ext3_count_free (struct buffer_head *, unsigned);
- /* inode.c */
-+extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
- extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
- extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
-@@ -771,8 +748,10 @@
- /* namei.c */
- extern struct inode_operations ext3_dir_inode_operations;
-+extern struct inode_operations ext3_special_inode_operations;
- /* symlink.c */
-+extern struct inode_operations ext3_symlink_inode_operations;
- extern struct inode_operations ext3_fast_symlink_inode_operations;
-Index: linux-2.4.19-pre1/include/linux/ext3_jbd.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/ext3_jbd.h    2004-01-14 01:11:49.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/ext3_jbd.h 2004-01-14 01:18:04.000000000 +0300
-@@ -30,13 +30,19 @@
- #define EXT3_SINGLEDATA_TRANS_BLOCKS  8
-+/* Extended attributes may touch two data buffers, two bitmap buffers,
-+ * and two group and summaries. */
-+
-+#define EXT3_XATTR_TRANS_BLOCKS               8
-+
- /* Define the minimum size for a transaction which modifies data.  This
-  * needs to take into account the fact that we may end up modifying two
-  * quota files too (one for the group, one for the user quota).  The
-  * superblock only gets updated once, of course, so don't bother
-  * counting that again for the quota updates. */
--#define EXT3_DATA_TRANS_BLOCKS                (3 * EXT3_SINGLEDATA_TRANS_BLOCKS - 2)
-+#define EXT3_DATA_TRANS_BLOCKS                (3 * EXT3_SINGLEDATA_TRANS_BLOCKS + \
-+                                       EXT3_XATTR_TRANS_BLOCKS - 2)
- extern int ext3_writepage_trans_blocks(struct inode *inode);
-Index: linux-2.4.19-pre1/include/linux/ext3_xattr.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/ext3_xattr.h  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/ext3_xattr.h       2004-01-14 01:11:49.000000000 +0300
-@@ -0,0 +1,157 @@
-+/*
-+  File: linux/ext3_xattr.h
-+
-+  On-disk format of extended attributes for the ext3 filesystem.
-+
-+  (C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+*/
-+
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/xattr.h>
-+
-+/* Magic value in attribute blocks */
-+#define EXT3_XATTR_MAGIC              0xEA020000
-+
-+/* Maximum number of references to one attribute block */
-+#define EXT3_XATTR_REFCOUNT_MAX               1024
-+
-+/* Name indexes */
-+#define EXT3_XATTR_INDEX_MAX                  10
-+#define EXT3_XATTR_INDEX_USER                 1
-+#define EXT3_XATTR_INDEX_POSIX_ACL_ACCESS     2
-+#define EXT3_XATTR_INDEX_POSIX_ACL_DEFAULT    3
-+
-+struct ext3_xattr_header {
-+      __u32   h_magic;        /* magic number for identification */
-+      __u32   h_refcount;     /* reference count */
-+      __u32   h_blocks;       /* number of disk blocks used */
-+      __u32   h_hash;         /* hash value of all attributes */
-+      __u32   h_reserved[4];  /* zero right now */
-+};
-+
-+struct ext3_xattr_entry {
-+      __u8    e_name_len;     /* length of name */
-+      __u8    e_name_index;   /* attribute name index */
-+      __u16   e_value_offs;   /* offset in disk block of value */
-+      __u32   e_value_block;  /* disk block attribute is stored on (n/i) */
-+      __u32   e_value_size;   /* size of attribute value */
-+      __u32   e_hash;         /* hash value of name and value */
-+      char    e_name[0];      /* attribute name */
-+};
-+
-+#define EXT3_XATTR_PAD_BITS           2
-+#define EXT3_XATTR_PAD                (1<<EXT3_XATTR_PAD_BITS)
-+#define EXT3_XATTR_ROUND              (EXT3_XATTR_PAD-1)
-+#define EXT3_XATTR_LEN(name_len) \
-+      (((name_len) + EXT3_XATTR_ROUND + \
-+      sizeof(struct ext3_xattr_entry)) & ~EXT3_XATTR_ROUND)
-+#define EXT3_XATTR_NEXT(entry) \
-+      ( (struct ext3_xattr_entry *)( \
-+        (char *)(entry) + EXT3_XATTR_LEN((entry)->e_name_len)) )
-+#define EXT3_XATTR_SIZE(size) \
-+      (((size) + EXT3_XATTR_ROUND) & ~EXT3_XATTR_ROUND)
-+
-+#ifdef __KERNEL__
-+
-+# ifdef CONFIG_EXT3_FS_XATTR
-+
-+struct ext3_xattr_handler {
-+      char *prefix;
-+      size_t (*list)(char *list, struct inode *inode, const char *name,
-+                     int name_len);
-+      int (*get)(struct inode *inode, const char *name, void *buffer,
-+                 size_t size);
-+      int (*set)(struct inode *inode, const char *name, const void *buffer,
-+                 size_t size, int flags);
-+};
-+
-+extern int ext3_xattr_register(int, struct ext3_xattr_handler *);
-+extern void ext3_xattr_unregister(int, struct ext3_xattr_handler *);
-+
-+extern int ext3_setxattr(struct dentry *, const char *, const void *, size_t, int);
-+extern ssize_t ext3_getxattr(struct dentry *, const char *, void *, size_t);
-+extern ssize_t ext3_listxattr(struct dentry *, char *, size_t);
-+extern int ext3_removexattr(struct dentry *, const char *);
-+
-+extern int ext3_xattr_get(struct inode *, int, const char *, void *, size_t);
-+extern int ext3_xattr_list(struct inode *, char *, size_t);
-+extern int ext3_xattr_set(handle_t *handle, struct inode *, int, const char *, const void *, size_t, int);
-+
-+extern void ext3_xattr_delete_inode(handle_t *, struct inode *);
-+extern void ext3_xattr_put_super(struct super_block *);
-+
-+extern int init_ext3_xattr(void) __init;
-+extern void exit_ext3_xattr(void);
-+
-+# else  /* CONFIG_EXT3_FS_XATTR */
-+#  define ext3_setxattr               NULL
-+#  define ext3_getxattr               NULL
-+#  define ext3_listxattr      NULL
-+#  define ext3_removexattr    NULL
-+
-+static inline int
-+ext3_xattr_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t size)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext3_xattr_list(struct inode *inode, void *buffer, size_t size)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext3_xattr_set(handle_t *handle, struct inode *inode, int name_index,
-+             const char *name, const void *value, size_t size, int flags)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline void
-+ext3_xattr_delete_inode(handle_t *handle, struct inode *inode)
-+{
-+}
-+
-+static inline void
-+ext3_xattr_put_super(struct super_block *sb)
-+{
-+}
-+
-+static inline int
-+init_ext3_xattr(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext3_xattr(void)
-+{
-+}
-+
-+# endif  /* CONFIG_EXT3_FS_XATTR */
-+
-+# ifdef CONFIG_EXT3_FS_XATTR_USER
-+
-+extern int init_ext3_xattr_user(void) __init;
-+extern void exit_ext3_xattr_user(void);
-+
-+# else  /* CONFIG_EXT3_FS_XATTR_USER */
-+
-+static inline int
-+init_ext3_xattr_user(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext3_xattr_user(void)
-+{
-+}
-+
-+#endif  /* CONFIG_EXT3_FS_XATTR_USER */
-+
-+#endif  /* __KERNEL__ */
-+
-Index: linux-2.4.19-pre1/include/linux/fs.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/fs.h  2004-01-14 01:11:48.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/fs.h       2004-01-14 01:11:49.000000000 +0300
-@@ -872,6 +872,10 @@
-       int (*setattr) (struct dentry *, struct iattr *);
-       int (*setattr_raw) (struct inode *, struct iattr *);
-       int (*getattr) (struct dentry *, struct iattr *);
-+      int (*setxattr) (struct dentry *, const char *, const void *, size_t, int);
-+      ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
-+      ssize_t (*listxattr) (struct dentry *, char *, size_t);
-+      int (*removexattr) (struct dentry *, const char *);
- };
- struct seq_file;
-Index: linux-2.4.19-pre1/include/linux/mbcache.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/mbcache.h     2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/mbcache.h  2004-01-14 01:11:49.000000000 +0300
-@@ -0,0 +1,69 @@
-+/*
-+  File: linux/mbcache.h
-+
-+  (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+*/
-+
-+/* Hardwire the number of additional indexes */
-+#define MB_CACHE_INDEXES_COUNT 1
-+
-+struct mb_cache_entry;
-+
-+struct mb_cache_op {
-+      int (*free)(struct mb_cache_entry *, int);
-+};
-+
-+struct mb_cache {
-+      struct list_head                c_cache_list;
-+      const char                      *c_name;
-+      struct mb_cache_op              c_op;
-+      atomic_t                        c_entry_count;
-+      int                             c_bucket_count;
-+#ifndef MB_CACHE_INDEXES_COUNT
-+      int                             c_indexes_count;
-+#endif
-+      kmem_cache_t                    *c_entry_cache;
-+      struct list_head                *c_block_hash;
-+      struct list_head                *c_indexes_hash[0];
-+};
-+
-+struct mb_cache_entry_index {
-+      struct list_head                o_list;
-+      unsigned int                    o_key;
-+};
-+
-+struct mb_cache_entry {
-+      struct list_head                e_lru_list;
-+      struct mb_cache                 *e_cache;
-+      atomic_t                        e_used;
-+      kdev_t                          e_dev;
-+      unsigned long                   e_block;
-+      struct list_head                e_block_list;
-+      struct mb_cache_entry_index     e_indexes[0];
-+};
-+
-+/* Functions on caches */
-+
-+struct mb_cache * mb_cache_create(const char *, struct mb_cache_op *, size_t,
-+                                int, int);
-+void mb_cache_shrink(struct mb_cache *, kdev_t);
-+void mb_cache_destroy(struct mb_cache *);
-+
-+/* Functions on cache entries */
-+
-+struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *);
-+int mb_cache_entry_insert(struct mb_cache_entry *, kdev_t, unsigned long,
-+                        unsigned int[]);
-+void mb_cache_entry_rehash(struct mb_cache_entry *, unsigned int[]);
-+void mb_cache_entry_release(struct mb_cache_entry *);
-+void mb_cache_entry_takeout(struct mb_cache_entry *);
-+void mb_cache_entry_free(struct mb_cache_entry *);
-+struct mb_cache_entry *mb_cache_entry_dup(struct mb_cache_entry *);
-+struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *, kdev_t,
-+                                        unsigned long);
-+#if !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0)
-+struct mb_cache_entry *mb_cache_entry_find_first(struct mb_cache *cache, int,
-+                                               kdev_t, unsigned int);
-+struct mb_cache_entry *mb_cache_entry_find_next(struct mb_cache_entry *, int,
-+                                              kdev_t, unsigned int);
-+#endif
-Index: linux-2.4.19-pre1/include/linux/xattr.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/xattr.h       2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/xattr.h    2004-01-14 01:11:49.000000000 +0300
-@@ -0,0 +1,15 @@
-+/*
-+  File: linux/xattr.h
-+
-+  Extended attributes handling.
-+
-+  Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org>
-+  Copyright (c) 2001-2002 Silicon Graphics, Inc.  All Rights Reserved.
-+*/
-+#ifndef _LINUX_XATTR_H
-+#define _LINUX_XATTR_H
-+
-+#define XATTR_CREATE  0x1     /* set the value, fail if attr already exists */
-+#define XATTR_REPLACE 0x2     /* set the value, fail if attr does not exist */
-+
-+#endif        /* _LINUX_XATTR_H */
-Index: linux-2.4.19-pre1/include/linux/kernel.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/kernel.h      2004-01-14 01:10:37.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/kernel.h   2004-01-14 01:16:51.000000000 +0300
-@@ -11,6 +11,7 @@
- #include <linux/linkage.h>
- #include <linux/stddef.h>
- #include <linux/types.h>
-+#include <linux/compiler.h>
- /* Optimization barrier */
- /* The "volatile" is due to gcc bugs */
-Index: linux-2.4.19-pre1/include/linux/limits.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/limits.h      2004-01-14 01:10:37.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/limits.h   2004-01-14 01:22:08.000000000 +0300
-@@ -13,6 +13,9 @@
- #define NAME_MAX         255  /* # chars in a file name */
- #define PATH_MAX        4096  /* # chars in a path name including nul */
- #define PIPE_BUF        4096  /* # bytes in atomic write to a pipe */
-+#define XATTR_NAME_MAX   255  /* # chars in an extended attribute name */
-+#define XATTR_SIZE_MAX 65536  /* size of an extended attribute value (64k) */
-+#define XATTR_LIST_MAX 65536  /* size of extended attribute namelist (64k) */
- #define RTSIG_MAX       32
-Index: linux-2.4.19-pre1/kernel/ksyms.c
-===================================================================
---- linux-2.4.19-pre1.orig/kernel/ksyms.c      2004-01-14 01:11:48.000000000 +0300
-+++ linux-2.4.19-pre1/kernel/ksyms.c   2004-01-14 01:11:49.000000000 +0300
-@@ -11,6 +11,7 @@
- #include <linux/config.h>
- #include <linux/slab.h>
-+#include <linux/cache_def.h>
- #include <linux/module.h>
- #include <linux/blkdev.h>
- #include <linux/cdrom.h>
-@@ -88,6 +89,7 @@
- EXPORT_SYMBOL(exit_files);
- EXPORT_SYMBOL(exit_fs);
- EXPORT_SYMBOL(exit_sighand);
-+EXPORT_SYMBOL(copy_fs_struct);
- /* internal kernel memory management */
- EXPORT_SYMBOL(_alloc_pages);
-@@ -104,6 +106,8 @@
- EXPORT_SYMBOL(kmem_cache_shrink);
- EXPORT_SYMBOL(kmem_cache_alloc);
- EXPORT_SYMBOL(kmem_cache_free);
-+EXPORT_SYMBOL(register_cache);
-+EXPORT_SYMBOL(unregister_cache);
- EXPORT_SYMBOL(kmalloc);
- EXPORT_SYMBOL(kfree);
- EXPORT_SYMBOL(vfree);
-Index: linux-2.4.19-pre1/mm/vmscan.c
-===================================================================
---- linux-2.4.19-pre1.orig/mm/vmscan.c 2004-01-14 01:10:37.000000000 +0300
-+++ linux-2.4.19-pre1/mm/vmscan.c      2004-01-14 01:11:49.000000000 +0300
-@@ -15,6 +15,7 @@
- #include <linux/kernel_stat.h>
- #include <linux/swap.h>
- #include <linux/swapctl.h>
-+#include <linux/cache_def.h>
- #include <linux/smp_lock.h>
- #include <linux/pagemap.h>
- #include <linux/init.h>
-@@ -32,6 +33,39 @@
-  */
- #define DEF_PRIORITY (6)
-+static DECLARE_MUTEX(other_caches_sem);
-+static LIST_HEAD(cache_definitions);
-+
-+void register_cache(struct cache_definition *cache)
-+{
-+      down(&other_caches_sem);
-+      list_add(&cache->link, &cache_definitions);
-+      up(&other_caches_sem);
-+}
-+
-+void unregister_cache(struct cache_definition *cache)
-+{
-+      down(&other_caches_sem);
-+      list_del(&cache->link);
-+      up(&other_caches_sem);
-+}
-+
-+static void shrink_other_caches(unsigned int priority, int gfp_mask)
-+{
-+      struct list_head *p;
-+
-+      if (down_trylock(&other_caches_sem))
-+              return;
-+
-+      list_for_each_prev(p, &cache_definitions) {
-+              struct cache_definition *cache =
-+                      list_entry(p, struct cache_definition, link);
-+
-+              cache->shrink(priority, gfp_mask);
-+      }
-+      up(&other_caches_sem);
-+}
-+
- /*
-  * The swap-out function returns 1 if it successfully
-  * scanned all the pages it was asked to (`count').
-@@ -578,6 +612,7 @@
-       shrink_dcache_memory(priority, gfp_mask);
-       shrink_icache_memory(priority, gfp_mask);
-+      shrink_other_caches(priority, gfp_mask);
- #ifdef CONFIG_QUOTA
-       shrink_dqcache_memory(DEF_PRIORITY, gfp_mask);
- #endif
diff --git a/lustre/kernel_patches/patches/linux-2.4.20-filemap.patch b/lustre/kernel_patches/patches/linux-2.4.20-filemap.patch
deleted file mode 100644 (file)
index e321e07..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-diff -rupN --exclude='ide*' linux-2.4.20.orig/mm/filemap.c linux-2.4.20/mm/filemap.c
---- linux-2.4.20.orig/mm/filemap.c     2002-11-29 01:53:15.000000000 +0200
-+++ linux-2.4.20/mm/filemap.c  2004-02-20 13:52:26.990361912 +0200
-@@ -3195,3 +3195,5 @@ void __init page_cache_init(unsigned lon
-               panic("Failed to allocate page hash table\n");
-       memset((void *)page_hash_table, 0, PAGE_HASH_SIZE * sizeof(struct page *));
- }
-+
-+EXPORT_SYMBOL(add_to_page_cache_unique);
diff --git a/lustre/kernel_patches/patches/linux-2.4.20-tmpfs-iopen.patch b/lustre/kernel_patches/patches/linux-2.4.20-tmpfs-iopen.patch
deleted file mode 100644 (file)
index b3b75e3..0000000
+++ /dev/null
@@ -1,1287 +0,0 @@
-diff -rupN --exclude='ide*' linux-2.4.20.orig/include/linux/mm.h linux-2.4.20/include/linux/mm.h
---- linux-2.4.20.orig/include/linux/mm.h       2004-02-10 11:43:10.000000000 +0200
-+++ linux-2.4.20/include/linux/mm.h    2004-03-01 13:44:45.000000000 +0200
-@@ -468,7 +468,8 @@ extern void clear_page_tables(struct mm_
- extern int fail_writepage(struct page *);
- struct page * shmem_nopage(struct vm_area_struct * vma, unsigned long address, int unused);
- struct file *shmem_file_setup(char * name, loff_t size);
--int shmem_getpage(struct inode * inode, unsigned long idx, struct page **ptr);
-+struct page *shmem_getpage_locked(struct inode *inode, unsigned long idx);
-+struct page *shmem_getpage_unlocked(struct inode *inode, unsigned long idx);
- extern void shmem_lock(struct file * file, int lock);
- extern int shmem_zero_setup(struct vm_area_struct *);
-diff -rupN --exclude='ide*' linux-2.4.20.orig/include/linux/shmem_fs.h linux-2.4.20/include/linux/shmem_fs.h
---- linux-2.4.20.orig/include/linux/shmem_fs.h 2004-02-10 18:39:17.000000000 +0200
-+++ linux-2.4.20/include/linux/shmem_fs.h      2004-02-23 12:40:28.000000000 +0200
-@@ -7,6 +7,9 @@
- #define SHMEM_NR_DIRECT 16
-+#define SHMEM_MOUNT_IOPEN       0x8000        /* Allow access via iopen */
-+#define SHMEM_MOUNT_IOPEN_NOPRIV  0x10000     /* Make iopen world-readable */
-+
- /*
-  * A swap entry has to fit into a "unsigned long", as
-  * the entry is hidden in the "index" field of the
-@@ -38,6 +41,9 @@ struct shmem_inode_info {
- };
- struct shmem_sb_info {
-+      struct dentry *iopen;
-+      unsigned long options;
-+      unsigned long root_ino;
-       unsigned long max_blocks;   /* How many blocks are allowed */
-       unsigned long free_blocks;  /* How many are left for allocation */
-       unsigned long max_inodes;   /* How many inodes are allowed */
-@@ -59,11 +65,9 @@ shmem_xattr_find(struct inode *inode, co
- extern ssize_t
- shmem_xattr_set(struct inode *inode, const char *name,
-               const void *value, u16 valuelen, int flags);
--              
- extern ssize_t
- shmem_xattr_get(struct inode *inode, const char *name,
-               void *value, size_t valuelen);
--              
- extern int
- shmem_xattr_delete(struct inode *inode, struct shmem_xattr *xattr);
-diff -rupN --exclude='ide*' linux-2.4.20.orig/mm/shmem.c linux-2.4.20/mm/shmem.c
---- linux-2.4.20.orig/mm/shmem.c       2004-02-10 18:44:05.000000000 +0200
-+++ linux-2.4.20/mm/shmem.c    2004-03-01 14:37:21.000000000 +0200
-@@ -36,29 +36,45 @@
- #define TMPFS_MAGIC   0x01021994
- #define ENTRIES_PER_PAGE (PAGE_CACHE_SIZE/sizeof(unsigned long))
-+
- #define BLOCKS_PER_PAGE  (PAGE_CACHE_SIZE/512)
--#define SHMEM_MAX_INDEX  (SHMEM_NR_DIRECT + ENTRIES_PER_PAGE * (ENTRIES_PER_PAGE/2) * (ENTRIES_PER_PAGE+1))
-+#define SHMEM_MAX_INDEX  (SHMEM_NR_DIRECT + ENTRIES_PER_PAGE * \
-+                        (ENTRIES_PER_PAGE/2) * (ENTRIES_PER_PAGE+1))
-+
- #define SHMEM_MAX_BYTES  ((unsigned long long)SHMEM_MAX_INDEX << PAGE_CACHE_SHIFT)
- #define VM_ACCT(size)    (((size) + PAGE_CACHE_SIZE - 1) >> PAGE_SHIFT)
- /* Pretend that each entry is of this size in directory's i_size */
--#define BOGO_DIRENT_SIZE 20
--
-+#define BOGO_DIRENT_SIZE (20)
- #define SHMEM_SB(sb) (&sb->u.shmem_sb)
-+#define SHMEM_IOPEN_INO       2
-+#define SHMEM_IOPEN_NAME_LEN  32
-+
-+#define ASSERT(cond)                                                    \
-+do {                                                                  \
-+      if (!(cond)) {                                                  \
-+              printk (KERN_EMERG                                      \
-+                      "Assertion failure in %s() at %s:%d: \"%s\"\n", \
-+                      __FUNCTION__, __FILE__, __LINE__, # cond);      \
-+              BUG();                                                  \
-+      }                                                               \
-+} while (0)
-+
- static struct super_operations shmem_ops;
-+static struct vm_operations_struct shmem_vm_ops;
- static struct address_space_operations shmem_aops;
- static struct file_operations shmem_file_operations;
- static struct inode_operations shmem_inode_operations;
- static struct inode_operations shmem_dir_inode_operations;
--static struct vm_operations_struct shmem_vm_ops;
- LIST_HEAD (shmem_inodes);
- static spinlock_t shmem_ilock = SPIN_LOCK_UNLOCKED;
- atomic_t shmem_nrpages = ATOMIC_INIT(0); /* Not used right now */
--static struct page *shmem_getpage_locked(struct shmem_inode_info *, struct inode *, unsigned long);
-+struct page *shmem_getpage_locked(struct inode *inode, unsigned long idx);
-+struct page *shmem_getpage_unlocked(struct inode *inode, unsigned long idx);
- #ifdef CONFIG_TMPFS
- static struct inode_operations shmem_symlink_inode_operations;
-@@ -327,7 +343,7 @@ shmem_getxattr(struct dentry *dentry, co
-  * inode attributes list.*/
- static int
- shmem_setxattr(struct dentry *dentry, const char *name,
--               void *value, size_t valuelen, int flags)
-+               const void *value, size_t valuelen, int flags)
- {
-         int error;
-         struct inode *inode = dentry->d_inode;
-@@ -404,8 +420,8 @@ shmem_listxattr(struct dentry *dentry, c
-  * @inode: inode to recalc
-  * @swap:  additional swap pages freed externally
-  *
-- * We have to calculate the free blocks since the mm can drop pages
-- * behind our back
-+ * We have to calculate the free blocks since the mm can drop pages behind our
-+ * back
-  *
-  * But we know that normally
-  * inodes->i_blocks/BLOCKS_PER_PAGE == 
-@@ -441,24 +457,23 @@ static void shmem_recalc_inode(struct in
-  * @page:  optional page to add to the structure. Has to be preset to
-  *         all zeros
-  *
-- * If there is no space allocated yet it will return -ENOMEM when
-- * page == 0 else it will use the page for the needed block.
-+ * If there is no space allocated yet it will return -ENOMEM when page == 0 else
-+ * it will use the page for the needed block.
-  *
-  * returns -EFBIG if the index is too big.
-  *
-  *
-  * The swap vector is organized the following way:
-  *
-- * There are SHMEM_NR_DIRECT entries directly stored in the
-- * shmem_inode_info structure. So small files do not need an addional
-- * allocation.
-- *
-- * For pages with index > SHMEM_NR_DIRECT there is the pointer
-- * i_indirect which points to a page which holds in the first half
-- * doubly indirect blocks, in the second half triple indirect blocks:
-+ * There are SHMEM_NR_DIRECT entries directly stored in the shmem_inode_info
-+ * structure. So small files do not need an addional allocation.
-+ *
-+ * For pages with index > SHMEM_NR_DIRECT there is the pointer i_indirect which
-+ * points to a page which holds in the first half doubly indirect blocks, in the
-+ * second half triple indirect blocks:
-  *
-- * For an artificial ENTRIES_PER_PAGE = 4 this would lead to the
-- * following layout (for SHMEM_NR_DIRECT == 16):
-+ * For an artificial ENTRIES_PER_PAGE = 4 this would lead to the following
-+ * layout (for SHMEM_NR_DIRECT == 16):
-  *
-  * i_indirect -> dir --> 16-19
-  *          |      +-> 20-23
-@@ -473,7 +488,9 @@ static void shmem_recalc_inode(struct in
-  *                   +-> 48-51
-  *                   +-> 52-55
-  */
--static swp_entry_t * shmem_swp_entry (struct shmem_inode_info *info, unsigned long index, unsigned long page) 
-+static swp_entry_t *
-+shmem_swp_entry (struct shmem_inode_info *info, unsigned long index,
-+               unsigned long page) 
- {
-       unsigned long offset;
-       void **dir;
-@@ -520,7 +537,8 @@ static swp_entry_t * shmem_swp_entry (st
-  * @info:     info structure for the inode
-  * @index:    index of the page to find
-  */
--static inline swp_entry_t * shmem_alloc_entry (struct shmem_inode_info *info, unsigned long index)
-+static inline swp_entry_t *
-+shmem_alloc_entry(struct shmem_inode_info *info, unsigned long index)
- {
-       unsigned long page = 0;
-       swp_entry_t * res;
-@@ -545,7 +563,8 @@ static inline swp_entry_t * shmem_alloc_
-  * @dir:   pointer to the directory
-  * @count: number of entries to scan
-  */
--static int shmem_free_swp(swp_entry_t *dir, unsigned int count)
-+static int
-+shmem_free_swp(swp_entry_t *dir, unsigned int count)
- {
-       swp_entry_t *ptr, entry;
-       int freed = 0;
-@@ -573,7 +592,9 @@ static int shmem_free_swp(swp_entry_t *d
-  */
- static inline unsigned long 
--shmem_truncate_direct(swp_entry_t *** dir, unsigned long start, unsigned long len) {
-+shmem_truncate_direct(swp_entry_t ***dir, unsigned long start,
-+                    unsigned long len)
-+{
-       swp_entry_t **last, **ptr;
-       unsigned long off, freed = 0;
-  
-@@ -639,7 +660,8 @@ shmem_truncate_indirect(struct shmem_ino
-                       BUG();
-               baseidx = max & ~(ENTRIES_PER_PAGE*ENTRIES_PER_PAGE-1);
--              base = (swp_entry_t ***) info->i_indirect + ENTRIES_PER_PAGE/2 + baseidx/ENTRIES_PER_PAGE/ENTRIES_PER_PAGE ;
-+              base = (swp_entry_t ***) info->i_indirect + ENTRIES_PER_PAGE/2 +
-+                      baseidx/ENTRIES_PER_PAGE/ENTRIES_PER_PAGE ;
-               len = max - baseidx + 1;
-               baseidx += ENTRIES_PER_PAGE*ENTRIES_PER_PAGE/2+SHMEM_NR_DIRECT;
-       }
-@@ -654,7 +676,8 @@ shmem_truncate_indirect(struct shmem_ino
-       return shmem_truncate_direct(base, start, len);
- }
--static void shmem_truncate (struct inode * inode)
-+static void
-+shmem_truncate(struct inode *inode)
- {
-       unsigned long index;
-       unsigned long partial;
-@@ -668,16 +691,16 @@ static void shmem_truncate (struct inode
-       partial = inode->i_size & ~PAGE_CACHE_MASK;
-       if (partial) {
--              swp_entry_t *entry = shmem_swp_entry(info, index-1, 0);
-               struct page *page;
--              /*
--               * This check is racy: it's faintly possible that page
--               * was assigned to swap during truncate_inode_pages,
--               * and now assigned to file; but better than nothing.
-+              swp_entry_t *entry = shmem_swp_entry(info, index - 1, 0);
-+              
-+              /* This check is racy: it's faintly possible that page was
-+               * assigned to swap during truncate_inode_pages, and now
-+               * assigned to file; but better than nothing.
-                */
-               if (!IS_ERR(entry) && entry->val) {
-                       spin_unlock(&info->lock);
--                      page = shmem_getpage_locked(info, inode, index-1);
-+                      page = shmem_getpage_locked(inode, index - 1);
-                       if (!IS_ERR(page)) {
-                               memclear_highpage_flush(page, partial,
-                                       PAGE_CACHE_SIZE - partial);
-@@ -697,8 +720,166 @@ static void shmem_truncate (struct inode
-       up(&info->sem);
- }
--static void shmem_delete_inode(struct inode * inode)
-+static struct inode *
-+shmem_find_inode(struct super_block *sb, long int ino)
-+{
-+      struct list_head *p;
-+      struct inode *inode = NULL;
-+      struct shmem_inode_info *info;
-+
-+      spin_lock (&shmem_ilock);
-+      list_for_each(p, &shmem_inodes) {
-+              info = list_entry(p, struct shmem_inode_info, list);
-+              
-+              if (info->inode->i_ino == ino && 
-+                  info->inode->i_sb == sb) 
-+              {
-+                      inode = info->inode;
-+                      break;
-+              }
-+      }
-+      
-+      spin_unlock (&shmem_ilock);
-+      
-+      if (inode)
-+              igrab(inode);
-+              
-+      return inode;
-+}
-+
-+#define switch_fields(x,y) do {   \
-+      __typeof__ (x) __tmp = x; \
-+      x = y; y = __tmp; } while (0)
-+
-+static inline void
-+switch_names(struct dentry *dentry, struct dentry *target)
-+{
-+      const unsigned char *old_name, *new_name;
-+
-+      memcpy(dentry->d_iname, target->d_iname, 
-+             DNAME_INLINE_LEN);
-+      
-+      old_name = target->d_name.name;
-+      new_name = dentry->d_name.name;
-+      
-+      if (old_name == target->d_iname)
-+              old_name = dentry->d_iname;
-+      
-+      if (new_name == dentry->d_iname)
-+              new_name = target->d_iname;
-+      
-+      target->d_name.name = new_name;
-+      dentry->d_name.name = old_name;
-+}
-+
-+static struct dentry *
-+shmem_iopen_lookup(struct inode *dir, 
-+                 struct dentry *dentry)
-+{
-+      struct inode *inode;
-+      unsigned long ino;
-+      struct list_head *lp;
-+      struct dentry *alternate;
-+      char buf[SHMEM_IOPEN_NAME_LEN];
-+      struct shmem_sb_info *sbinfo = SHMEM_SB(dir->i_sb);
-+
-+      if (dentry->d_name.len >= SHMEM_IOPEN_NAME_LEN)
-+              return ERR_PTR(-ENAMETOOLONG);
-+
-+      memcpy(buf, dentry->d_name.name, dentry->d_name.len);
-+      buf[dentry->d_name.len] = 0;
-+
-+      if (strcmp(buf, ".") == 0)
-+              ino = dir->i_ino;
-+      else if (strcmp(buf, "..") == 0)
-+              ino = sbinfo->root_ino;
-+      else
-+              ino = simple_strtoul(buf, 0, 0);
-+
-+      if (ino < sbinfo->root_ino)
-+              return ERR_PTR(-ENOENT);
-+
-+      if (!(inode = shmem_find_inode(dir->i_sb, ino)))
-+              return ERR_PTR(-ENOENT);
-+
-+      ASSERT(list_empty(&dentry->d_alias));
-+      ASSERT(list_empty(&dentry->d_hash));
-+
-+      /* preferrably return a connected dentry */
-+      spin_lock(&dcache_lock);
-+      list_for_each(lp, &inode->i_dentry) {
-+              alternate = list_entry(lp, struct dentry, d_alias);
-+              ASSERT(!(alternate->d_flags & DCACHE_NFSD_DISCONNECTED));
-+      }
-+
-+      if (!list_empty(&inode->i_dentry)) {
-+              alternate = list_entry(inode->i_dentry.next,
-+                                     struct dentry, d_alias);
-+              dget_locked(alternate);
-+              alternate->d_vfs_flags |= DCACHE_REFERENCED;
-+              iput(inode);
-+              spin_unlock(&dcache_lock);
-+              return alternate;
-+      }
-+      dentry->d_flags |= DCACHE_NFSD_DISCONNECTED;
-+
-+      /* d_add(), but don't drop dcache_lock before adding dentry to inode */
-+      list_add(&dentry->d_alias, &inode->i_dentry);
-+      dentry->d_inode = inode;
-+
-+      __d_rehash(dentry, 0);
-+      spin_unlock(&dcache_lock);
-+
-+      return NULL;
-+}
-+
-+struct dentry *
-+shmem_iopen_unalias(struct dentry *dentry, struct inode *inode)
-+{
-+      struct dentry *tmp, *goal = NULL;
-+      struct list_head *lp;
-+
-+      list_for_each(lp, &inode->i_dentry) {
-+              tmp = list_entry(lp, struct dentry, d_alias);
-+              if (tmp->d_flags & DCACHE_NFSD_DISCONNECTED) {
-+                      ASSERT(tmp->d_alias.next == &inode->i_dentry);
-+                      ASSERT(tmp->d_alias.prev == &inode->i_dentry);
-+                      goal = tmp;
-+                      dget_locked(goal);
-+                      break;
-+              }
-+      }
-+
-+      if (!goal)
-+              return NULL;
-+
-+      goal->d_flags &= ~DCACHE_NFSD_DISCONNECTED;
-+      list_del_init(&goal->d_hash);
-+
-+      list_del(&goal->d_child);
-+      list_del(&dentry->d_child);
-+
-+      switch_names(goal, dentry);
-+      switch_fields(goal->d_parent, dentry->d_parent);
-+      switch_fields(goal->d_name.len, dentry->d_name.len);
-+      switch_fields(goal->d_name.hash, dentry->d_name.hash);
-+
-+      list_add(&goal->d_child, &goal->d_parent->d_subdirs);
-+      list_add(&dentry->d_child, &dentry->d_parent->d_subdirs);
-+      __d_rehash(goal, 0);
-+
-+      return goal;
-+}
-+
-+static struct inode_operations iopen_inode_operations = {
-+      lookup:         shmem_iopen_lookup,
-+};
-+
-+static void
-+shmem_delete_inode(struct inode *inode)
- {
-+      struct dentry *dentry;
-+      
- #ifdef CONFIG_TMPFS_XATTR
-       struct list_head *tmp, *p;
-       struct shmem_xattr *xattr;
-@@ -706,16 +887,30 @@ static void shmem_delete_inode(struct in
- #endif
-       struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb);
--      if (inode->i_op->truncate == shmem_truncate) {
-+      if (inode->i_ino != SHMEM_IOPEN_INO) {
-+              /* eliminating iopen alias */
-+              spin_lock(&dcache_lock);
-+              if (!list_empty(&inode->i_dentry)) {
-+                      dentry = list_entry(inode->i_dentry.next,
-+                                          struct dentry, d_alias);
-+                      shmem_iopen_unalias(dentry, inode);
-+              }
-+              spin_unlock(&dcache_lock);
-+
-               spin_lock (&shmem_ilock);
-               list_del (&SHMEM_I(inode)->list);
-               spin_unlock (&shmem_ilock);
--              inode->i_size = 0;
--              shmem_truncate (inode);
-+      
-+              if (inode->i_op->truncate == shmem_truncate) {
-+                      inode->i_size = 0;
-+                      shmem_truncate (inode);
-+              }
-+      
-+              spin_lock (&sbinfo->stat_lock);
-+              sbinfo->free_inodes++;
-+              spin_unlock (&sbinfo->stat_lock);
-       }
--      spin_lock (&sbinfo->stat_lock);
--      sbinfo->free_inodes++;
--      spin_unlock (&sbinfo->stat_lock);
-+      
- #ifdef CONFIG_TMPFS_XATTR
-         list_for_each_safe(p, tmp, &info->xattrs) {
-                 xattr = list_entry(p, struct shmem_xattr, list);
-@@ -725,7 +920,8 @@ static void shmem_delete_inode(struct in
-       clear_inode(inode);
- }
--static inline int shmem_find_swp(swp_entry_t entry, swp_entry_t *ptr, swp_entry_t *eptr)
-+static inline int
-+shmem_find_swp(swp_entry_t entry, swp_entry_t *ptr, swp_entry_t *eptr)
- {
-       swp_entry_t *test;
-@@ -736,7 +932,9 @@ static inline int shmem_find_swp(swp_ent
-       return -1;
- }
--static int shmem_unuse_inode(struct shmem_inode_info *info, swp_entry_t entry, struct page *page)
-+static int
-+shmem_unuse_inode(struct shmem_inode_info *info, swp_entry_t entry,
-+                struct page *page)
- {
-       swp_entry_t *ptr;
-       unsigned long idx;
-@@ -875,9 +1073,11 @@ getswap:
-  * still need to guard against racing with shm_writepage(), which might
-  * be trying to move the page to the swap cache as we run.
-  */
--static struct page * shmem_getpage_locked(struct shmem_inode_info *info, struct inode * inode, unsigned long idx)
-+struct page *
-+shmem_getpage_locked(struct inode *inode, unsigned long idx)
- {
-       struct address_space * mapping = inode->i_mapping;
-+      struct shmem_inode_info *info = SHMEM_I(inode);
-       struct shmem_sb_info *sbinfo;
-       struct page * page;
-       swp_entry_t *entry;
-@@ -941,7 +1141,8 @@ repeat:
-               swap_free(*entry);
-               *entry = (swp_entry_t) {0};
-               delete_from_swap_cache(page);
--              flags = page->flags & ~((1 << PG_uptodate) | (1 << PG_error) | (1 << PG_referenced) | (1 << PG_arch_1));
-+              flags = page->flags & ~((1 << PG_uptodate) | (1 << PG_error) |
-+                                      (1 << PG_referenced) | (1 << PG_arch_1));
-               page->flags = flags | (1 << PG_dirty);
-               add_to_page_cache_locked(page, mapping, idx);
-               info->swapped--;
-@@ -985,46 +1186,53 @@ wait_retry:
-       goto repeat;
- }
--int shmem_getpage(struct inode * inode, unsigned long idx, struct page **ptr)
-+struct page *
-+shmem_getpage_unlocked(struct inode *inode, unsigned long idx)
- {
-+      struct page *page;
-       struct shmem_inode_info *info = SHMEM_I(inode);
--      int error;
--      down (&info->sem);
--      *ptr = ERR_PTR(-EFAULT);
--      if (inode->i_size <= (loff_t) idx * PAGE_CACHE_SIZE)
-+      down(&info->sem);
-+      page = ERR_PTR(-EFAULT);
-+      
-+      if (inode->i_size <= (loff_t)idx * PAGE_CACHE_SIZE)
-               goto failed;
--      *ptr = shmem_getpage_locked(info, inode, idx);
--      if (IS_ERR (*ptr))
-+      page = shmem_getpage_locked(inode, idx);
-+      
-+      if (IS_ERR(page))
-               goto failed;
--      UnlockPage(*ptr);
--      up (&info->sem);
--      return 0;
-+      UnlockPage(page);
-+      up(&info->sem);
-+      return page;
- failed:
--      up (&info->sem);
--      error = PTR_ERR(*ptr);
--      *ptr = NOPAGE_SIGBUS;
--      if (error == -ENOMEM)
--              *ptr = NOPAGE_OOM;
--      return error;
-+      up(&info->sem);
-+
-+      if (PTR_ERR(page) == -ENOMEM)
-+              return NOPAGE_OOM;
-+      
-+      return page;
- }
--struct page * shmem_nopage(struct vm_area_struct * vma, unsigned long address, int unused)
-+struct page *
-+shmem_nopage(struct vm_area_struct *vma, 
-+           unsigned long address, int unused)
- {
--      struct page * page;
-       unsigned int idx;
-+      struct page * page;
-       struct inode * inode = vma->vm_file->f_dentry->d_inode;
--      idx = (address - vma->vm_start) >> PAGE_CACHE_SHIFT;
--      idx += vma->vm_pgoff;
-+      idx = ((address - vma->vm_start) >> PAGE_CACHE_SHIFT) +
-+              vma->vm_pgoff;
--      if (shmem_getpage(inode, idx, &page))
-+      page = shmem_getpage_unlocked(inode, idx);
-+      
-+      if (IS_ERR(page))
-               return page;
-       flush_page_to_ram(page);
--      return(page);
-+      return page;
- }
- void shmem_lock(struct file * file, int lock)
-@@ -1037,7 +1245,8 @@ void shmem_lock(struct file * file, int 
-       up(&info->sem);
- }
--static int shmem_mmap(struct file * file, struct vm_area_struct * vma)
-+static int
-+shmem_mmap(struct file * file, struct vm_area_struct * vma)
- {
-       struct vm_operations_struct * ops;
-       struct inode *inode = file->f_dentry->d_inode;
-@@ -1050,39 +1259,53 @@ static int shmem_mmap(struct file * file
-       return 0;
- }
--struct inode *shmem_get_inode(struct super_block *sb, int mode, int dev)
-+static void
-+shmem_fill_inode(struct inode *inode, int mode, int dev)
- {
--      struct inode * inode;
-       struct shmem_inode_info *info;
--      struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
-+      
-+      info = SHMEM_I(inode);
-+      info->inode = inode;
-+      spin_lock_init (&info->lock);
-+      sema_init (&info->sem, 1);
--      spin_lock (&sbinfo->stat_lock);
--      if (!sbinfo->free_inodes) {
--              spin_unlock (&sbinfo->stat_lock);
--              return NULL;
--      }
--      sbinfo->free_inodes--;
--      spin_unlock (&sbinfo->stat_lock);
-+#ifdef CONFIG_TMPFS_XATTR
-+      INIT_LIST_HEAD(&info->xattrs);
-+      info->xtail = &info->xattrs;
-+#endif
--      inode = new_inode(sb);
--      if (inode) {
-+      inode->i_blocks = 0;
-+      inode->i_rdev = NODEV;
-+      inode->i_atime = CURRENT_TIME;
-+      inode->i_ctime = CURRENT_TIME;
-+      inode->i_mtime = CURRENT_TIME;
-+      inode->i_blksize = PAGE_CACHE_SIZE;
-+      
-+      /* handling speciall iopen inode. */
-+      if (inode->i_ino == SHMEM_IOPEN_INO) {
-+              struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb);
-+              
-+              inode->i_mode = S_IFDIR | S_IRUSR | S_IXUSR;
-+      
-+              if (sbinfo->options & SHMEM_MOUNT_IOPEN_NOPRIV)
-+                      inode->i_mode |= 0777;
-+              
-+              inode->i_uid = 0;
-+              inode->i_gid = 0;
-+              inode->i_nlink = 1;
-+              inode->i_size = 2 * BOGO_DIRENT_SIZE;
-+              inode->i_version = 1;
-+              inode->i_generation = 0;
-+
-+              inode->i_op = &iopen_inode_operations;
-+              inode->i_fop = &dcache_dir_ops;
-+              inode->i_mapping->a_ops = 0;
-+      } else {
-               inode->i_mode = mode;
-               inode->i_uid = current->fsuid;
-               inode->i_gid = current->fsgid;
--              inode->i_blksize = PAGE_CACHE_SIZE;
--              inode->i_blocks = 0;
--              inode->i_rdev = NODEV;
-               inode->i_mapping->a_ops = &shmem_aops;
--              inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
--              info = SHMEM_I(inode);
--              info->inode = inode;
--              spin_lock_init (&info->lock);
--              sema_init (&info->sem, 1);
--#ifdef CONFIG_TMPFS_XATTR
--              INIT_LIST_HEAD(&info->xattrs);
--              info->xtail = &info->xattrs;
--#endif
-               switch (mode & S_IFMT) {
-               default:
-                       init_special_inode(inode, mode, dev);
-@@ -1090,9 +1313,6 @@ struct inode *shmem_get_inode(struct sup
-               case S_IFREG:
-                       inode->i_op = &shmem_inode_operations;
-                       inode->i_fop = &shmem_file_operations;
--                      spin_lock (&shmem_ilock);
--                      list_add_tail(&info->list, &shmem_inodes);
--                      spin_unlock (&shmem_ilock);
-                       break;
-               case S_IFDIR:
-                       inode->i_nlink++;
-@@ -1104,12 +1324,59 @@ struct inode *shmem_get_inode(struct sup
-               case S_IFLNK:
-                       break;
-               }
-+              
-+              spin_lock (&shmem_ilock);
-+              list_add_tail(&info->list, &shmem_inodes);
-+              spin_unlock (&shmem_ilock);
-+      }
-+}
-+
-+struct inode *
-+shmem_get_inode(struct super_block *sb, 
-+              int mode, int dev, int root)
-+{
-+      struct inode *inode;
-+      struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
-+
-+      spin_lock (&sbinfo->stat_lock);
-+      if (!sbinfo->free_inodes) {
-+              spin_unlock (&sbinfo->stat_lock);
-+              return NULL;
-+      }
-+      sbinfo->free_inodes--;
-+      spin_unlock (&sbinfo->stat_lock);
-+
-+      if ((inode = new_inode(sb))) {
-+              shmem_fill_inode(inode, mode, dev);
-+              if (root)
-+                      sbinfo->root_ino = inode->i_ino;
-       }
-+      
-       return inode;
- }
--static int shmem_set_size(struct shmem_sb_info *info,
--                        unsigned long max_blocks, unsigned long max_inodes)
-+void shmem_read_inode(struct inode *inode)
-+{
-+      struct shmem_sb_info *sbinfo;
-+
-+      if (inode->i_ino != SHMEM_IOPEN_INO)
-+              return;
-+              
-+      sbinfo = SHMEM_SB(inode->i_sb);
-+      
-+      spin_lock (&sbinfo->stat_lock);
-+      if (!sbinfo->free_inodes) {
-+              spin_unlock (&sbinfo->stat_lock);
-+              return;
-+      }
-+      sbinfo->free_inodes--;
-+      spin_unlock (&sbinfo->stat_lock);
-+      shmem_fill_inode(inode, 0, 0);
-+}
-+
-+static int
-+shmem_set_size(struct shmem_sb_info *info, unsigned long max_blocks, 
-+             unsigned long max_inodes)
- {
-       int error;
-       unsigned long blocks, inodes;
-@@ -1192,7 +1459,6 @@ shmem_file_write(struct file *file,const
-       while (count) {
-               unsigned long bytes, index, offset;
--              char *kaddr;
-               /*
-                * Try to find the page in the cache. If it isn't there,
-@@ -1201,9 +1467,9 @@ shmem_file_write(struct file *file,const
-               offset = (pos & (PAGE_CACHE_SIZE -1)); /* Within page */
-               index = pos >> PAGE_CACHE_SHIFT;
-               bytes = PAGE_CACHE_SIZE - offset;
--              if (bytes > count) {
-+
-+              if (bytes > count)
-                       bytes = count;
--              }
-               /*
-                * Bring in the user page that we will copy from _first_.
-@@ -1218,7 +1484,7 @@ shmem_file_write(struct file *file,const
-               info = SHMEM_I(inode);
-               down (&info->sem);
--              page = shmem_getpage_locked(info, inode, index);
-+              page = shmem_getpage_locked(inode, index);
-               up (&info->sem);
-               status = PTR_ERR(page);
-@@ -1226,17 +1492,19 @@ shmem_file_write(struct file *file,const
-                       break;
-               /* We have exclusive IO access to the page.. */
--              if (!PageLocked(page)) {
-+              if (!PageLocked(page))
-                       PAGE_BUG(page);
--              }
--              kaddr = kmap(page);
--              status = copy_from_user(kaddr+offset, buf, bytes);
-+              status = copy_from_user(kmap(page) + offset,
-+                                      buf, bytes);
-+              
-               kunmap(page);
-+
-               if (status)
-                       goto fail_write;
-               flush_dcache_page(page);
-+              
-               if (bytes > 0) {
-                       SetPageDirty(page);
-                       written += bytes;
-@@ -1266,7 +1534,8 @@ fail_write:
-       goto unlock;
- }
--static void do_shmem_file_read(struct file * filp, loff_t *ppos, read_descriptor_t * desc)
-+static void
-+do_shmem_file_read(struct file * filp, loff_t *ppos, read_descriptor_t * desc)
- {
-       struct inode *inode = filp->f_dentry->d_inode;
-       struct address_space *mapping = inode->i_mapping;
-@@ -1292,15 +1561,18 @@ static void do_shmem_file_read(struct fi
-               nr = nr - offset;
--              if ((desc->error = shmem_getpage(inode, index, &page)))
-+              page = shmem_getpage_unlocked(inode, index);
-+
-+              if (IS_ERR(page)) {
-+                      desc->error = PTR_ERR(page);
-                       break;
-+              }
-               if (mapping->i_mmap_shared != NULL)
-                       flush_dcache_page(page);
--              /*
--               * Ok, we have the page, and it's up-to-date, so
--               * now we can copy it to user space...
-+              /* Ok, we have the page, and it's up-to-date, so now we can copy
-+               * it to user space...
-                *
-                * The actor routine returns how many bytes were actually used..
-                * NOTE! This may not be the same as how much of a user buffer
-@@ -1309,6 +1581,8 @@ static void do_shmem_file_read(struct fi
-                * pointers and the remaining count).
-                */
-               nr = file_read_actor(desc, page, offset, nr);
-+
-+              /* updating counters */
-               offset += nr;
-               index += offset >> PAGE_CACHE_SHIFT;
-               offset &= ~PAGE_CACHE_MASK;
-@@ -1320,7 +1594,8 @@ static void do_shmem_file_read(struct fi
-       UPDATE_ATIME(inode);
- }
--static ssize_t shmem_file_read(struct file * filp, char * buf, size_t count, loff_t *ppos)
-+static ssize_t
-+shmem_file_read(struct file * filp, char * buf, size_t count, loff_t *ppos)
- {
-       ssize_t retval;
-@@ -1345,7 +1620,8 @@ static ssize_t shmem_file_read(struct fi
-       return retval;
- }
--static int shmem_statfs(struct super_block *sb, struct statfs *buf)
-+static int
-+shmem_statfs(struct super_block *sb, struct statfs *buf)
- {
-       struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
-@@ -1361,22 +1637,62 @@ static int shmem_statfs(struct super_blo
-       return 0;
- }
--/*
-- * Lookup the data. This is trivial - if the dentry didn't already
-- * exist, we know it is negative.
-- */
--static struct dentry * shmem_lookup(struct inode *dir, struct dentry *dentry)
-+static int
-+match_dentry(struct dentry *dentry, const char *name)
-+{
-+      int len = strlen(name);
-+      
-+      if (dentry->d_name.len != len)
-+              return 0;
-+              
-+      if (strncmp(dentry->d_name.name, name, len))
-+              return 0;
-+              
-+      return 1;
-+}
-+
-+static int
-+shmem_iopen_check(struct inode *dir, struct dentry *dentry)
-+{
-+      struct inode *inode;
-+      struct shmem_sb_info *sbinfo = SHMEM_SB(dir->i_sb);
-+
-+      if (dir->i_ino != sbinfo->root_ino ||
-+          !(sbinfo->options & SHMEM_MOUNT_IOPEN) ||
-+          !match_dentry(dentry, "__iopen__"))
-+      {
-+              return 0;
-+      }
-+
-+      if (!(inode = iget(dir->i_sb, SHMEM_IOPEN_INO)))
-+              return 0;
-+              
-+      d_add(dentry, inode);
-+      
-+      spin_lock (&sbinfo->stat_lock);
-+      sbinfo->iopen = dentry;
-+      spin_unlock (&sbinfo->stat_lock);
-+      
-+      dget(dentry);
-+      return 1;
-+}
-+
-+static struct dentry *
-+shmem_lookup(struct inode *dir, struct dentry *dentry)
- {
--      d_add(dentry, NULL);
-+      if (!shmem_iopen_check(dir, dentry))
-+              d_add(dentry, NULL);
-+      
-       return NULL;
- }
- /*
-  * File creation. Allocate an inode, and we're done..
-  */
--static int shmem_mknod(struct inode *dir, struct dentry *dentry, int mode, int dev)
-+static int
-+shmem_mknod(struct inode *dir, struct dentry *dentry, int mode, int dev)
- {
--      struct inode * inode = shmem_get_inode(dir->i_sb, mode, dev);
-+      struct inode *inode = shmem_get_inode(dir->i_sb, mode, dev, 0);
-       int error = -ENOSPC;
-       if (inode) {
-@@ -1386,20 +1702,24 @@ static int shmem_mknod(struct inode *dir
-               dget(dentry); /* Extra count - pin the dentry in core */
-               error = 0;
-       }
-+      
-       return error;
- }
--static int shmem_mkdir(struct inode * dir, struct dentry * dentry, int mode)
-+static int
-+shmem_mkdir(struct inode * dir, struct dentry * dentry, int mode)
- {
-       int error;
-       if ((error = shmem_mknod(dir, dentry, mode | S_IFDIR, 0)))
-               return error;
-+              
-       dir->i_nlink++;
-       return 0;
- }
--static int shmem_create(struct inode *dir, struct dentry *dentry, int mode)
-+static int
-+shmem_create(struct inode *dir, struct dentry *dentry, int mode)
- {
-       return shmem_mknod(dir, dentry, mode | S_IFREG, 0);
- }
-@@ -1407,7 +1727,8 @@ static int shmem_create(struct inode *di
- /*
-  * Link a file..
-  */
--static int shmem_link(struct dentry *old_dentry, struct inode * dir, struct dentry * dentry)
-+static int
-+shmem_link(struct dentry *old_dentry, struct inode * dir, struct dentry * dentry)
- {
-       struct inode *inode = old_dentry->d_inode;
-@@ -1429,13 +1750,11 @@ static inline int shmem_positive(struct 
- }
- /*
-- * Check that a directory is empty (this works
-- * for regular files too, they'll just always be
-- * considered empty..).
-+ * Check that a directory is empty (this works for regular files too, they'll
-+ * just always be considered empty..).
-  *
-- * Note that an empty directory can still have
-- * children, they just all have to be negative..
-- */
-+ * Note that an empty directory can still have children, they just all have to
-+ * be negative.. */
- static int shmem_empty(struct dentry *dentry)
- {
-       struct list_head *list;
-@@ -1456,18 +1775,22 @@ static int shmem_empty(struct dentry *de
-       return 1;
- }
--static int shmem_unlink(struct inode * dir, struct dentry *dentry)
-+static int
-+shmem_unlink(struct inode *dir, struct dentry *dentry)
- {
-       struct inode *inode = dentry->d_inode;
-       dir->i_size -= BOGO_DIRENT_SIZE;
-       inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
-       inode->i_nlink--;
--      dput(dentry);   /* Undo the count from "create" - this does all the work */
-+      
-+      /* undo the count from "create" - this does all the work. */
-+      dput(dentry);
-       return 0;
- }
--static int shmem_rmdir(struct inode * dir, struct dentry *dentry)
-+static int
-+shmem_rmdir(struct inode *dir, struct dentry *dentry)
- {
-       if (!shmem_empty(dentry))
-               return -ENOTEMPTY;
-@@ -1477,12 +1800,13 @@ static int shmem_rmdir(struct inode * di
- }
- /*
-- * The VFS layer already does all the dentry stuff for rename,
-- * we just have to decrement the usage count for the target if
-- * it exists so that the VFS layer correctly free's it when it
-- * gets overwritten.
-+ * The VFS layer already does all the dentry stuff for rename, we just have to
-+ * decrement the usage count for the target if it exists so that the VFS layer
-+ * correctly free's it when it gets overwritten.
-  */
--static int shmem_rename(struct inode * old_dir, struct dentry *old_dentry, struct inode * new_dir,struct dentry *new_dentry)
-+static int
-+shmem_rename(struct inode *old_dir, struct dentry *old_dentry,
-+           struct inode *new_dir, struct dentry *new_dentry)
- {
-       struct inode *inode = old_dentry->d_inode;
-       int they_are_dirs = S_ISDIR(inode->i_mode);
-@@ -1507,19 +1831,20 @@ static int shmem_rename(struct inode * o
-       return 0;
- }
--static int shmem_symlink(struct inode * dir, struct dentry *dentry, const char * symname)
-+static int
-+shmem_symlink(struct inode *dir, struct dentry *dentry,
-+            const char *symname)
- {
-       int len;
--      struct inode *inode;
-       struct page *page;
--      char *kaddr;
--      struct shmem_inode_info * info;
-+      struct inode *inode;
-+      struct shmem_inode_info *info;
-       len = strlen(symname) + 1;
-       if (len > PAGE_CACHE_SIZE)
-               return -ENAMETOOLONG;
--      inode = shmem_get_inode(dir->i_sb, S_IFLNK|S_IRWXUGO, 0);
-+      inode = shmem_get_inode(dir->i_sb, S_IFLNK|S_IRWXUGO, 0, 0);
-       if (!inode)
-               return -ENOSPC;
-@@ -1531,7 +1856,7 @@ static int shmem_symlink(struct inode * 
-               inode->i_op = &shmem_symlink_inline_operations;
-       } else {
-               down(&info->sem);
--              page = shmem_getpage_locked(info, inode, 0);
-+              page = shmem_getpage_locked(inode, 0);
-               if (IS_ERR(page)) {
-                       up(&info->sem);
-                       iput(inode);
-@@ -1541,8 +1866,7 @@ static int shmem_symlink(struct inode * 
-               spin_lock (&shmem_ilock);
-               list_add_tail(&info->list, &shmem_inodes);
-               spin_unlock (&shmem_ilock);
--              kaddr = kmap(page);
--              memcpy(kaddr, symname, len);
-+              memcpy(kmap(page), symname, len);
-               kunmap(page);
-               SetPageDirty(page);
-               UnlockPage(page);
-@@ -1556,40 +1880,52 @@ static int shmem_symlink(struct inode * 
-       return 0;
- }
--static int shmem_readlink_inline(struct dentry *dentry, char *buffer, int buflen)
-+static int
-+shmem_readlink_inline(struct dentry *dentry, char *buffer, int buflen)
- {
--      return vfs_readlink(dentry,buffer,buflen, (const char *)SHMEM_I(dentry->d_inode));
-+      return vfs_readlink(dentry,buffer, buflen,
-+                          (const char *)SHMEM_I(dentry->d_inode));
- }
--static int shmem_follow_link_inline(struct dentry *dentry, struct nameidata *nd)
-+static int
-+shmem_follow_link_inline(struct dentry *dentry, struct nameidata *nd)
- {
-       return vfs_follow_link(nd, (const char *)SHMEM_I(dentry->d_inode));
- }
--static int shmem_readlink(struct dentry *dentry, char *buffer, int buflen)
-+static int
-+shmem_readlink(struct dentry *dentry, char *buffer, int buflen)
- {
--      struct page * page;
--      int res = shmem_getpage(dentry->d_inode, 0, &page);
-+      int res;
-+      struct page *page;
-+
-+      page = shmem_getpage_unlocked(dentry->d_inode, 0);
--      if (res)
--              return res;
-+      if (IS_ERR(page))
-+              return PTR_ERR(page);
-       res = vfs_readlink(dentry,buffer,buflen, kmap(page));
-       kunmap(page);
-       page_cache_release(page);
-+      
-       return res;
- }
--static int shmem_follow_link(struct dentry *dentry, struct nameidata *nd)
-+static int
-+shmem_follow_link(struct dentry *dentry, struct nameidata *nd)
- {
-       struct page * page;
--      int res = shmem_getpage(dentry->d_inode, 0, &page);
--      if (res)
--              return res;
-+      int res;
-+
-+      page = shmem_getpage_unlocked(dentry->d_inode, 0);
-+
-+      if (IS_ERR(page))
-+              return PTR_ERR(page);
-       res = vfs_follow_link(nd, kmap(page));
-       kunmap(page);
-       page_cache_release(page);
-+
-       return res;
- }
-@@ -1610,7 +1946,10 @@ static struct inode_operations shmem_sym
- #endif
- };
--static int shmem_parse_options(char *options, int *mode, uid_t *uid, gid_t *gid, unsigned long * blocks, unsigned long *inodes)
-+static int
-+shmem_parse_options(char *options, int *mode, uid_t *uid, gid_t *gid, 
-+                  unsigned long *blocks, unsigned long *inodes, 
-+                  unsigned long *opts)
- {
-       char *this_char, *value, *rest;
-@@ -1620,11 +1959,6 @@ static int shmem_parse_options(char *opt
-       for ( ; this_char; this_char = strtok(NULL,",")) {
-               if ((value = strchr(this_char,'=')) != NULL) {
-                       *value++ = 0;
--              } else {
--                      printk(KERN_ERR 
--                          "tmpfs: No value for mount option '%s'\n", 
--                          this_char);
--                      return 1;
-               }
-               if (!strcmp(this_char,"size")) {
-@@ -1659,6 +1993,17 @@ static int shmem_parse_options(char *opt
-                       *gid = simple_strtoul(value,&rest,0);
-                       if (*rest)
-                               goto bad_val;
-+              } else if (!strcmp(this_char, "iopen")) {
-+                      *opts |= SHMEM_MOUNT_IOPEN;
-+                      *opts &= ~SHMEM_MOUNT_IOPEN_NOPRIV;
-+              }
-+              else if (!strcmp(this_char, "noiopen")) {
-+                      *opts &= ~SHMEM_MOUNT_IOPEN;
-+                      *opts &= ~SHMEM_MOUNT_IOPEN_NOPRIV;
-+              }
-+              else if (!strcmp (this_char, "iopen_nopriv")) {
-+                      *opts |= SHMEM_MOUNT_IOPEN;
-+                      *opts |= SHMEM_MOUNT_IOPEN_NOPRIV;
-               } else {
-                       printk(KERN_ERR "tmpfs: Bad mount option %s\n",
-                              this_char);
-@@ -1674,14 +2019,19 @@ bad_val:
- }
--static int shmem_remount_fs (struct super_block *sb, int *flags, char *data)
-+static int
-+shmem_remount_fs(struct super_block *sb, int *flags, char *data)
- {
-       struct shmem_sb_info *sbinfo = &sb->u.shmem_sb;
-       unsigned long max_blocks = sbinfo->max_blocks;
-       unsigned long max_inodes = sbinfo->max_inodes;
--      if (shmem_parse_options (data, NULL, NULL, NULL, &max_blocks, &max_inodes))
-+      if (shmem_parse_options (data, NULL, NULL, NULL, &max_blocks, 
-+                               &max_inodes, &sbinfo->options))
-+      {
-               return -EINVAL;
-+      }
-+              
-       return shmem_set_size(sbinfo, max_blocks, max_inodes);
- }
-@@ -1691,7 +2041,8 @@ int shmem_sync_file(struct file * file, 
- }
- #endif
--static struct super_block *shmem_read_super(struct super_block * sb, void * data, int silent)
-+static struct super_block *
-+shmem_read_super(struct super_block * sb, void * data, int silent)
- {
-       struct inode * inode;
-       struct dentry * root;
-@@ -1710,11 +2061,15 @@ static struct super_block *shmem_read_su
-       blocks = inodes = si.totalram / 2;
- #ifdef CONFIG_TMPFS
--      if (shmem_parse_options (data, &mode, &uid, &gid, &blocks, &inodes))
-+      if (shmem_parse_options (data, &mode, &uid, &gid, &blocks, 
-+                               &inodes, &sbinfo->options))
-+      {
-               return NULL;
-+      }
- #endif
-       spin_lock_init (&sbinfo->stat_lock);
-+      sbinfo->iopen = NULL;
-       sbinfo->max_blocks = blocks;
-       sbinfo->free_blocks = blocks;
-       sbinfo->max_inodes = inodes;
-@@ -1724,7 +2079,7 @@ static struct super_block *shmem_read_su
-       sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
-       sb->s_magic = TMPFS_MAGIC;
-       sb->s_op = &shmem_ops;
--      inode = shmem_get_inode(sb, S_IFDIR | mode, 0);
-+      inode = shmem_get_inode(sb, S_IFDIR | mode, 0, 1);
-       if (!inode)
-               return NULL;
-@@ -1739,7 +2094,19 @@ static struct super_block *shmem_read_su
-       return sb;
- }
-+void shmem_put_super(struct super_block *sb)
-+{
-+      struct dentry *iopen;
-+      struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
-+      spin_lock(&sbinfo->stat_lock);
-+      iopen = sbinfo->iopen;
-+      sbinfo->iopen = NULL;
-+      spin_unlock(&sbinfo->stat_lock);
-+
-+      if (iopen)
-+              dput(iopen);
-+}
- static struct address_space_operations shmem_aops = {
-       writepage:      shmem_writepage,
-@@ -1790,11 +2157,13 @@ static struct super_operations shmem_ops
-       remount_fs:     shmem_remount_fs,
- #endif
-       delete_inode:   shmem_delete_inode,
--      put_inode:      force_delete,   
-+      read_inode:     shmem_read_inode,
-+      put_inode:      force_delete,
-+      put_super:      shmem_put_super,
- };
- static struct vm_operations_struct shmem_vm_ops = {
--      nopage: shmem_nopage,
-+      nopage:         shmem_nopage,
- };
- #ifdef CONFIG_TMPFS
-@@ -1885,7 +2254,7 @@ struct file *shmem_file_setup(char * nam
-               goto put_dentry;
-       error = -ENOSPC;
--      inode = shmem_get_inode(root->d_sb, S_IFREG | S_IRWXUGO, 0);
-+      inode = shmem_get_inode(root->d_sb, S_IFREG | S_IRWXUGO, 0, 0);
-       if (!inode) 
-               goto close_file;
-@@ -1921,15 +2290,17 @@ int shmem_zero_setup(struct vm_area_stru
-       if (vma->vm_file)
-               fput (vma->vm_file);
-+      
-       vma->vm_file = file;
-       vma->vm_ops = &shmem_vm_ops;
-       return 0;
- }
- EXPORT_SYMBOL(shmem_file_setup);
--EXPORT_SYMBOL(shmem_getpage);
- EXPORT_SYMBOL(shmem_xattr_find);
- EXPORT_SYMBOL(shmem_xattr_set);
- EXPORT_SYMBOL(shmem_xattr_get);
- EXPORT_SYMBOL(shmem_xattr_delete);
- EXPORT_SYMBOL(shmem_xattr_remove);
-+EXPORT_SYMBOL(shmem_getpage_locked);
-+EXPORT_SYMBOL(shmem_getpage_unlocked);
diff --git a/lustre/kernel_patches/patches/linux-2.4.20-tmpfs-xattr.patch b/lustre/kernel_patches/patches/linux-2.4.20-tmpfs-xattr.patch
deleted file mode 100644 (file)
index a807ac7..0000000
+++ /dev/null
@@ -1,543 +0,0 @@
-diff -rupN --exclude='ide*' linux-2.4.20.orig/fs/Config.in linux-2.4.20/fs/Config.in
---- linux-2.4.20.orig/fs/Config.in     2002-11-29 01:53:15.000000000 +0200
-+++ linux-2.4.20/fs/Config.in  2004-02-08 21:37:47.000000000 +0200
-@@ -48,6 +48,9 @@ if [ "$CONFIG_JFFS2_FS" = "y" -o "$CONFI
- fi
- tristate 'Compressed ROM file system support' CONFIG_CRAMFS
- bool 'Virtual memory file system support (former shm fs)' CONFIG_TMPFS
-+if [ "$CONFIG_TMPFS" = "y" ]; then
-+   bool '  tmpfs Extended Attributes' CONFIG_TMPFS_XATTR
-+fi
- define_bool CONFIG_RAMFS y
- tristate 'ISO 9660 CDROM file system support' CONFIG_ISO9660_FS
-diff -rupN --exclude='ide*' linux-2.4.20.orig/include/linux/mm.h linux-2.4.20/include/linux/mm.h
---- linux-2.4.20.orig/include/linux/mm.h       2002-08-03 03:39:45.000000000 +0300
-+++ linux-2.4.20/include/linux/mm.h    2004-02-10 11:43:10.000000000 +0200
-@@ -468,6 +468,7 @@ extern void clear_page_tables(struct mm_
- extern int fail_writepage(struct page *);
- struct page * shmem_nopage(struct vm_area_struct * vma, unsigned long address, int unused);
- struct file *shmem_file_setup(char * name, loff_t size);
-+int shmem_getpage(struct inode * inode, unsigned long idx, struct page **ptr);
- extern void shmem_lock(struct file * file, int lock);
- extern int shmem_zero_setup(struct vm_area_struct *);
-diff -rupN --exclude='ide*' linux-2.4.20.orig/include/linux/shmem_fs.h linux-2.4.20/include/linux/shmem_fs.h
---- linux-2.4.20.orig/include/linux/shmem_fs.h 2001-12-21 19:42:03.000000000 +0200
-+++ linux-2.4.20/include/linux/shmem_fs.h      2004-02-10 18:39:17.000000000 +0200
-@@ -3,6 +3,8 @@
- /* inode in-kernel data */
-+#include <linux/config.h>
-+
- #define SHMEM_NR_DIRECT 16
- /*
-@@ -28,6 +30,10 @@ struct shmem_inode_info {
-       unsigned long           swapped;
-       int                     locked;     /* into memory */
-       struct list_head        list;
-+#ifdef CONFIG_TMPFS_XATTR
-+      struct list_head        xattrs;
-+      struct list_head        *xtail;
-+#endif
-       struct inode           *inode;
- };
-@@ -39,6 +45,32 @@ struct shmem_sb_info {
-       spinlock_t    stat_lock;
- };
-+#ifdef CONFIG_TMPFS_XATTR
-+struct shmem_xattr {
-+      u8 namelen;
-+      u16 valuelen;
-+      void *entity;
-+      struct list_head list;
-+};
-+
-+extern struct shmem_xattr *
-+shmem_xattr_find(struct inode *inode, const char *name);
-+
-+extern ssize_t
-+shmem_xattr_set(struct inode *inode, const char *name,
-+              const void *value, u16 valuelen, int flags);
-+              
-+extern ssize_t
-+shmem_xattr_get(struct inode *inode, const char *name,
-+              void *value, size_t valuelen);
-+              
-+extern int
-+shmem_xattr_delete(struct inode *inode, struct shmem_xattr *xattr);
-+
-+extern int
-+shmem_xattr_remove(struct inode *inode, const char *name);
-+#endif
-+
- #define SHMEM_I(inode)  (&inode->u.shmem_i)
- #endif
-diff -rupN --exclude='ide*' linux-2.4.20.orig/mm/shmem.c linux-2.4.20/mm/shmem.c
---- linux-2.4.20.orig/mm/shmem.c       2002-11-29 01:53:15.000000000 +0200
-+++ linux-2.4.20/mm/shmem.c    2004-02-10 18:44:05.000000000 +0200
-@@ -27,6 +27,8 @@
- #include <linux/string.h>
- #include <linux/locks.h>
- #include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/xattr.h>
- #include <asm/uaccess.h>
-@@ -58,6 +60,344 @@ atomic_t shmem_nrpages = ATOMIC_INIT(0);
- static struct page *shmem_getpage_locked(struct shmem_inode_info *, struct inode *, unsigned long);
-+#ifdef CONFIG_TMPFS
-+static struct inode_operations shmem_symlink_inode_operations;
-+static struct inode_operations shmem_symlink_inline_operations;
-+#endif
-+
-+#ifdef CONFIG_TMPFS_XATTR
-+#define xattr_name(xattr)                     \
-+      ((char *)xattr->entity)
-+
-+#define xattr_value(xattr)                            \
-+      ((void *)xattr->entity + xattr->namelen + 1)
-+
-+/* allocates memory for new xattr with name length of @namelen and value size of
-+ * @valuelen. */
-+static struct shmem_xattr *
-+shmem_xattr_alloc(u8 namelen, u16 valuelen)
-+{
-+      u16 size;
-+        struct shmem_xattr *xattr;
-+                                                                                      
-+      size = namelen + 1 + valuelen;
-+
-+        if (!(xattr = kmalloc(sizeof(*xattr), GFP_KERNEL)))
-+                return NULL;
-+
-+      if (!(xattr->entity = kmalloc(size, GFP_KERNEL))) {
-+              kfree(xattr);
-+              return NULL;
-+      }
-+                                                                                      
-+        xattr->namelen = namelen;
-+        xattr->valuelen = valuelen;
-+        return xattr;
-+}
-+
-+/* reallocs passed @xattr with new @value. */
-+static int
-+shmem_xattr_realloc(struct shmem_xattr *xattr, u16 valuelen)
-+{
-+        if (xattr->valuelen != valuelen) {
-+              u16 new_size;
-+                void *entity;
-+
-+              /* allocating new entity. */
-+              new_size = xattr->namelen + 1 + valuelen;
-+                                                                                      
-+              if (!(entity = kmalloc(new_size, GFP_KERNEL)))
-+                        return -ENOMEM;
-+
-+              /* copying old name to new entity.*/
-+              memcpy(entity, xattr->entity, xattr->namelen);
-+              *((char *)(entity + xattr->namelen)) = '\0';
-+
-+              /* finishing the change.*/
-+                kfree(xattr->entity);
-+              xattr->entity = entity;
-+                xattr->valuelen = valuelen;
-+        }
-+
-+        return 0;
-+}
-+
-+/* assigns @name and @value to passed @xattr. */
-+static int
-+shmem_xattr_assign(struct shmem_xattr *xattr,
-+                 const char *name, const void *value)
-+{
-+      if (name) {
-+              if (xattr->namelen != strlen(name))
-+                      return -EINVAL;
-+              
-+              memcpy(xattr->entity, name, xattr->namelen);
-+              *((char *)(xattr->entity + xattr->namelen)) = '\0';
-+      }
-+
-+      if (value) {
-+              memcpy(xattr_value(xattr),
-+                     value, xattr->valuelen);
-+      }
-+
-+        return 0;
-+}
-+
-+/* frees passed @xattr. */
-+static void
-+shmem_xattr_free(struct shmem_xattr *xattr)
-+{
-+        kfree(xattr->entity);
-+        kfree(xattr);
-+}
-+
-+/* lookups passed @name inside @inode's xattr list. */
-+struct shmem_xattr *
-+shmem_xattr_find(struct inode *inode, const char *name)
-+{
-+      u8 namelen;
-+        struct list_head *p;
-+        struct shmem_xattr *xattr;
-+        struct shmem_inode_info *info;
-+
-+        info = SHMEM_I(inode);
-+      namelen = strlen(name);
-+
-+        list_for_each(p, &info->xattrs) {
-+                xattr = list_entry(p, struct shmem_xattr, list);
-+
-+                if (xattr->namelen == namelen &&
-+                    !memcmp(xattr->entity, name, namelen))
-+                {
-+                        return xattr;
-+                }
-+        }
-+
-+        return NULL;
-+}
-+
-+/* allocates new xattr and fills it with passed value, name, etc. */
-+ssize_t
-+shmem_xattr_set(struct inode *inode, const char *name,
-+              const void *value, u16 valuelen, int flags)
-+{
-+      ssize_t error;
-+        struct shmem_xattr *xattr;
-+      struct shmem_inode_info *info;
-+
-+        xattr = shmem_xattr_find(inode, name);
-+
-+        if (xattr) {
-+                if (flags & XATTR_CREATE)
-+                        return -EEXIST;
-+
-+                if ((error = shmem_xattr_realloc(xattr, valuelen)))
-+                        return error;
-+
-+              if ((error = shmem_xattr_assign(xattr, NULL, value)))
-+                      return error;
-+        } else {
-+                info = SHMEM_I(inode);
-+
-+              if (flags & XATTR_REPLACE)
-+                        return -ENODATA;
-+
-+              if (!(xattr = shmem_xattr_alloc(strlen(name), valuelen)))
-+                      return -ENOMEM;
-+
-+              if ((error = shmem_xattr_assign(xattr, name, value)))
-+                      return error;
-+              
-+                list_add(&xattr->list, info->xtail);
-+              info->xtail = &xattr->list;
-+        }
-+      
-+        return 0;
-+}
-+
-+/* fills passed @value by attribute value found by @name. */
-+ssize_t
-+shmem_xattr_get(struct inode *inode, const char *name,
-+              void *value, size_t valuelen)
-+{
-+        struct shmem_xattr *xattr;
-+
-+        if (!(xattr = shmem_xattr_find(inode, name)))
-+                return -ENODATA;
-+
-+        /* handling value size guess request */
-+        if (valuelen == 0 || value == NULL)
-+                return xattr->valuelen;
-+
-+        if (xattr->valuelen > valuelen)
-+                return -ERANGE;
-+
-+        memcpy(value, xattr_value(xattr),
-+             xattr->valuelen);
-+      
-+        return xattr->valuelen;
-+}
-+
-+/* deletes passed @xattr from inode xattr list and frees it. */
-+int
-+shmem_xattr_delete(struct inode *inode, struct shmem_xattr *xattr)
-+{
-+      struct shmem_inode_info *info;
-+
-+      info = SHMEM_I(inode);
-+      
-+      if (&xattr->list == info->xtail)
-+              info->xtail = xattr->list.prev;
-+      
-+      list_del(&xattr->list);
-+      shmem_xattr_free(xattr);
-+
-+      return 0;
-+}
-+
-+/* removes attribute found by passed @name. */
-+int
-+shmem_xattr_remove(struct inode *inode, const char *name)
-+{
-+        struct shmem_xattr *xattr;
-+
-+        if (!(xattr = shmem_xattr_find(inode, name)))
-+                return -ENODATA;
-+
-+      return shmem_xattr_delete(inode, xattr);
-+}
-+
-+static int
-+shmem_xattr_can_read(struct inode *inode, const char *name)
-+{
-+      /* check for inlined symlinks. They store path inside inode info and
-+       * thus, cannot be used for access xattrs. */
-+      if (S_ISLNK(inode->i_mode) &&
-+          inode->i_op == &shmem_symlink_inline_operations)
-+      {
-+                return -EPERM;
-+      }
-+      
-+      return permission(inode, MAY_READ);
-+}
-+                                                                                      
-+static int
-+shmem_xattr_can_write(struct inode *inode, const char *name)
-+{
-+        if (IS_RDONLY(inode))
-+                return -EROFS;
-+                                                                                      
-+        if (IS_IMMUTABLE(inode) || IS_APPEND(inode) ||
-+          S_ISLNK(inode->i_mode))
-+      {
-+                return -EPERM;
-+      }
-+                                                                                      
-+        if ((!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode)) ||
-+          inode->i_mode & S_ISVTX)
-+      {
-+                return -EPERM;
-+      }
-+                                                                                      
-+        return permission(inode, MAY_WRITE);
-+}
-+
-+/* fills passed @value with data of attribute @name from @dentry->d_inode
-+ * attribute list. */
-+static ssize_t
-+shmem_getxattr(struct dentry *dentry, const char *name,
-+               void *value, size_t valuelen)
-+{
-+        int error;
-+        struct inode *inode = dentry->d_inode;
-+
-+      if (name == NULL)
-+              return -EINVAL;
-+                                                                                      
-+        if ((error = shmem_xattr_can_read(inode, name)))
-+                return error;
-+
-+      return shmem_xattr_get(inode, name,
-+                             value, valuelen);
-+                                                                                      
-+}
-+
-+/* updates attribute with @name inside @dentry->d_inode attributes list (if
-+ * any), or creates new attribute with name @name and value @value and put it to
-+ * inode attributes list.*/
-+static int
-+shmem_setxattr(struct dentry *dentry, const char *name,
-+               void *value, size_t valuelen, int flags)
-+{
-+        int error;
-+        struct inode *inode = dentry->d_inode;
-+                                                                                      
-+      if (name == NULL)
-+              return -EINVAL;
-+      
-+        if ((error = shmem_xattr_can_write(inode, name)))
-+                return error;
-+                                                                                      
-+        if (value == NULL) {
-+                value = "";
-+                valuelen = 0;
-+        }
-+                                                                                      
-+        return shmem_xattr_set(inode, name, value,
-+                             valuelen, flags);
-+}
-+
-+/* removes attribute with passed @name from @dentry->d_inode attributes list. */
-+static int
-+shmem_removexattr(struct dentry *dentry, const char *name)
-+{
-+        int error;
-+        struct inode *inode = dentry->d_inode;
-+                                                                                      
-+      if (name == NULL)
-+              return -EINVAL;
-+
-+        if ((error = shmem_xattr_can_write(inode, name)))
-+                return error;
-+                                                                                      
-+        return shmem_xattr_remove(inode, name);
-+}
-+
-+/* fills passed @data with list of @dentry->d_inode attributes. Returns size of
-+ * actuall data put to @data. */
-+static ssize_t
-+shmem_listxattr(struct dentry *dentry, char *data, size_t buf_size)
-+{
-+        ssize_t size = 0;
-+        struct list_head *p;
-+        struct shmem_xattr *xattr;
-+        struct shmem_inode_info *info;
-+        struct inode *inode = dentry->d_inode;
-+
-+        info = SHMEM_I(inode);
-+
-+        list_for_each(p, &info->xattrs) {
-+                xattr = list_entry(p, struct shmem_xattr, list);
-+                size += xattr->namelen + 1;
-+        }
-+
-+        /* handling data size guess request. */
-+        if (buf_size == 0 || data == NULL)
-+                return size;
-+
-+        if (size > buf_size)
-+                return -ERANGE;
-+
-+        list_for_each(p, &info->xattrs) {
-+                xattr = list_entry(p, struct shmem_xattr, list);
-+                memcpy(data, xattr->entity, xattr->namelen + 1);
-+                data += xattr->namelen + 1;
-+        }
-+
-+        return size;
-+}
-+#endif
-+
- /*
-  * shmem_recalc_inode - recalculate the size of an inode
-  *
-@@ -359,6 +699,11 @@ static void shmem_truncate (struct inode
- static void shmem_delete_inode(struct inode * inode)
- {
-+#ifdef CONFIG_TMPFS_XATTR
-+      struct list_head *tmp, *p;
-+      struct shmem_xattr *xattr;
-+      struct shmem_inode_info * info = SHMEM_I(inode);
-+#endif
-       struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb);
-       if (inode->i_op->truncate == shmem_truncate) {
-@@ -371,6 +716,12 @@ static void shmem_delete_inode(struct in
-       spin_lock (&sbinfo->stat_lock);
-       sbinfo->free_inodes++;
-       spin_unlock (&sbinfo->stat_lock);
-+#ifdef CONFIG_TMPFS_XATTR
-+        list_for_each_safe(p, tmp, &info->xattrs) {
-+                xattr = list_entry(p, struct shmem_xattr, list);
-+              shmem_xattr_delete(inode, xattr);
-+        }
-+#endif
-       clear_inode(inode);
- }
-@@ -634,7 +985,7 @@ wait_retry:
-       goto repeat;
- }
--static int shmem_getpage(struct inode * inode, unsigned long idx, struct page **ptr)
-+int shmem_getpage(struct inode * inode, unsigned long idx, struct page **ptr)
- {
-       struct shmem_inode_info *info = SHMEM_I(inode);
-       int error;
-@@ -727,6 +1078,11 @@ struct inode *shmem_get_inode(struct sup
-               info->inode = inode;
-               spin_lock_init (&info->lock);
-               sema_init (&info->sem, 1);
-+
-+#ifdef CONFIG_TMPFS_XATTR
-+              INIT_LIST_HEAD(&info->xattrs);
-+              info->xtail = &info->xattrs;
-+#endif
-               switch (mode & S_IFMT) {
-               default:
-                       init_special_inode(inode, mode, dev);
-@@ -777,10 +1133,6 @@ out:
- }
- #ifdef CONFIG_TMPFS
--
--static struct inode_operations shmem_symlink_inode_operations;
--static struct inode_operations shmem_symlink_inline_operations;
--
- static ssize_t
- shmem_file_write(struct file *file,const char *buf,size_t count,loff_t *ppos)
- {
-@@ -1250,6 +1602,12 @@ static struct inode_operations shmem_sym
-       truncate:       shmem_truncate,
-       readlink:       shmem_readlink,
-       follow_link:    shmem_follow_link,
-+#ifdef CONFIG_TMPFS_XATTR
-+      setxattr:       shmem_setxattr,
-+      getxattr:       shmem_getxattr,
-+      listxattr:      shmem_listxattr,
-+      removexattr:    shmem_removexattr,
-+#endif
- };
- static int shmem_parse_options(char *options, int *mode, uid_t *uid, gid_t *gid, unsigned long * blocks, unsigned long *inodes)
-@@ -1398,6 +1756,12 @@ static struct file_operations shmem_file
- static struct inode_operations shmem_inode_operations = {
-       truncate:       shmem_truncate,
-+#ifdef CONFIG_TMPFS_XATTR
-+      setxattr:       shmem_setxattr,
-+      getxattr:       shmem_getxattr,
-+      listxattr:      shmem_listxattr,
-+      removexattr:    shmem_removexattr,
-+#endif
- };
- static struct inode_operations shmem_dir_inode_operations = {
-@@ -1411,6 +1775,12 @@ static struct inode_operations shmem_dir
-       rmdir:          shmem_rmdir,
-       mknod:          shmem_mknod,
-       rename:         shmem_rename,
-+#ifdef CONFIG_TMPFS_XATTR
-+      setxattr:       shmem_setxattr,
-+      getxattr:       shmem_getxattr,
-+      listxattr:      shmem_listxattr,
-+      removexattr:    shmem_removexattr,
-+#endif
- #endif
- };
-@@ -1557,3 +1927,9 @@ int shmem_zero_setup(struct vm_area_stru
- }
- EXPORT_SYMBOL(shmem_file_setup);
-+EXPORT_SYMBOL(shmem_getpage);
-+EXPORT_SYMBOL(shmem_xattr_find);
-+EXPORT_SYMBOL(shmem_xattr_set);
-+EXPORT_SYMBOL(shmem_xattr_get);
-+EXPORT_SYMBOL(shmem_xattr_delete);
-+EXPORT_SYMBOL(shmem_xattr_remove);
index 811c40f..5bdfaff 100644 (file)
 +              } else if (old_bh && header == HDR(old_bh)) {
 +                      /* Keep this block. */
 +                      new_bh = old_bh;
-+                      ext2_xattr_cache_insert(new_bh);
++                      (void)ext2_xattr_cache_insert(new_bh);
 +              } else {
 +                      /* We need to allocate a new block */
 +                      int force = EXT2_I(inode)->i_file_acl != 0;
 +                      memcpy(new_bh->b_data, header, new_bh->b_size);
 +                      mark_buffer_uptodate(new_bh, 1);
 +                      unlock_buffer(new_bh);
-+                      ext2_xattr_cache_insert(new_bh);
++                      (void)ext2_xattr_cache_insert(new_bh);
 +                      
 +                      ext2_xattr_update_super_block(sb);
 +              }
 +              } else if (old_bh && header == HDR(old_bh)) {
 +                      /* Keep this block. */
 +                      new_bh = old_bh;
-+                      ext3_xattr_cache_insert(new_bh);
++                      (void)ext3_xattr_cache_insert(new_bh);
 +              } else {
 +                      /* We need to allocate a new block */
 +                      int force = EXT3_I(inode)->i_file_acl != 0;
 +                      memcpy(new_bh->b_data, header, new_bh->b_size);
 +                      mark_buffer_uptodate(new_bh, 1);
 +                      unlock_buffer(new_bh);
-+                      ext3_xattr_cache_insert(new_bh);
++                      (void)ext3_xattr_cache_insert(new_bh);
 +                      
 +                      ext3_xattr_update_super_block(handle, sb);
 +              }
index c9fb126..f1365d7 100644 (file)
 +              } else if (old_bh && header == HDR(old_bh)) {
 +                      /* Keep this block. */
 +                      new_bh = old_bh;
-+                      ext2_xattr_cache_insert(new_bh);
++                      (void)ext2_xattr_cache_insert(new_bh);
 +              } else {
 +                      /* We need to allocate a new block */
 +                      int force = EXT2_I(inode)->i_file_acl != 0;
 +                      memcpy(new_bh->b_data, header, new_bh->b_size);
 +                      mark_buffer_uptodate(new_bh, 1);
 +                      unlock_buffer(new_bh);
-+                      ext2_xattr_cache_insert(new_bh);
++                      (void)ext2_xattr_cache_insert(new_bh);
 +                      
 +                      ext2_xattr_update_super_block(sb);
 +              }
 +              } else if (old_bh && header == HDR(old_bh)) {
 +                      /* Keep this block. */
 +                      new_bh = old_bh;
-+                      ext3_xattr_cache_insert(new_bh);
++                      (void)ext3_xattr_cache_insert(new_bh);
 +              } else {
 +                      /* We need to allocate a new block */
 +                      int force = EXT3_I(inode)->i_file_acl != 0;
 +                      memcpy(new_bh->b_data, header, new_bh->b_size);
 +                      mark_buffer_uptodate(new_bh, 1);
 +                      unlock_buffer(new_bh);
-+                      ext3_xattr_cache_insert(new_bh);
++                      (void)ext3_xattr_cache_insert(new_bh);
 +                      
 +                      ext3_xattr_update_super_block(handle, sb);
 +              }
diff --git a/lustre/kernel_patches/patches/linux-2.4.20-xattr-0.8.54.patch b/lustre/kernel_patches/patches/linux-2.4.20-xattr-0.8.54.patch
deleted file mode 100644 (file)
index 2e4750b..0000000
+++ /dev/null
@@ -1,5588 +0,0 @@
- Documentation/Configure.help  |   66 ++
- arch/alpha/defconfig          |    7 
- arch/alpha/kernel/entry.S     |   12 
- arch/arm/defconfig            |    7 
- arch/arm/kernel/calls.S       |   24 
- arch/i386/defconfig           |    7 
- arch/ia64/defconfig           |    7 
- arch/ia64/kernel/entry.S      |   24 
- arch/m68k/defconfig           |    7 
- arch/mips/defconfig           |    7 
- arch/mips64/defconfig         |    7 
- arch/ppc/defconfig            |   14 
- arch/ppc64/kernel/misc.S      |    2 
- arch/s390/defconfig           |    7 
- arch/s390/kernel/entry.S      |   24 
- arch/s390x/defconfig          |    7 
- arch/s390x/kernel/entry.S     |   24 
- arch/s390x/kernel/wrapper32.S |   92 +++
- arch/sparc/defconfig          |    7 
- arch/sparc/kernel/systbls.S   |   10 
- arch/sparc64/defconfig        |    7 
- arch/sparc64/kernel/systbls.S |   20 
- fs/Config.in                  |   14 
- fs/Makefile                   |    3 
- fs/ext2/Makefile              |    4 
- fs/ext2/file.c                |    5 
- fs/ext2/ialloc.c              |    2 
- fs/ext2/inode.c               |   34 -
- fs/ext2/namei.c               |   14 
- fs/ext2/super.c               |   29 
- fs/ext2/symlink.c             |   14 
- fs/ext2/xattr.c               | 1212 +++++++++++++++++++++++++++++++++++++++++
- fs/ext2/xattr_user.c          |  103 +++
- fs/ext3/Makefile              |   10 
- fs/ext3/file.c                |    5 
- fs/ext3/ialloc.c              |    2 
- fs/ext3/inode.c               |   35 -
- fs/ext3/namei.c               |   21 
- fs/ext3/super.c               |   36 +
- fs/ext3/symlink.c             |   14 
- fs/ext3/xattr.c               | 1225 ++++++++++++++++++++++++++++++++++++++++++
- fs/ext3/xattr_user.c          |  111 +++
- fs/jfs/jfs_xattr.h            |    6 
- fs/jfs/xattr.c                |    6 
- fs/mbcache.c                  |  648 ++++++++++++++++++++++
- include/asm-arm/unistd.h      |    2 
- include/asm-ia64/unistd.h     |   13 
- include/asm-ppc64/unistd.h    |    2 
- include/asm-s390/unistd.h     |   15 
- include/asm-s390x/unistd.h    |   15 
- include/asm-sparc/unistd.h    |   24 
- include/asm-sparc64/unistd.h  |   24 
- include/linux/cache_def.h     |   15 
- include/linux/errno.h         |    4 
- include/linux/ext2_fs.h       |   31 -
- include/linux/ext2_xattr.h    |  157 +++++
- include/linux/ext3_fs.h       |   31 -
- include/linux/ext3_jbd.h      |    8 
- include/linux/ext3_xattr.h    |  157 +++++
- include/linux/fs.h            |    2 
- include/linux/mbcache.h       |   69 ++
- kernel/ksyms.c                |    4 
- mm/vmscan.c                   |   35 +
- fs/ext3/ext3-exports.c        |   14 +  
- 64 files changed, 4355 insertions(+), 195 deletions(-)
-
---- linux-2.4.20/Documentation/Configure.help~linux-2.4.20-xattr-0.8.54        2003-05-05 17:43:06.000000000 +0800
-+++ linux-2.4.20-root/Documentation/Configure.help     2003-05-07 18:08:03.000000000 +0800
-@@ -15242,6 +15242,39 @@ CONFIG_EXT2_FS
-   be compiled as a module, and so this could be dangerous.  Most
-   everyone wants to say Y here.
-+Ext2 extended attributes
-+CONFIG_EXT2_FS_XATTR
-+  Extended attributes are name:value pairs associated with inodes by
-+  the kernel or by users (see the attr(5) manual page, or visit
-+  <http://acl.bestbits.at/> for details).
-+
-+  If unsure, say N.
-+
-+Ext2 extended attribute block sharing
-+CONFIG_EXT2_FS_XATTR_SHARING
-+  This options enables code for sharing identical extended attribute
-+  blocks among multiple inodes.
-+
-+  Usually, say Y.
-+
-+Ext2 extended user attributes
-+CONFIG_EXT2_FS_XATTR_USER
-+  This option enables extended user attributes on ext2. Processes can
-+  associate extended user attributes with inodes to store additional
-+  information such as the character encoding of files, etc. (see the
-+  attr(5) manual page, or visit <http://acl.bestbits.at/> for details).
-+
-+  If unsure, say N.
-+
-+Ext2 trusted extended attributes
-+CONFIG_EXT2_FS_XATTR_TRUSTED
-+  This option enables extended attributes on ext2 that are accessible
-+  (and visible) only to users capable of CAP_SYS_ADMIN. Usually this
-+  is only the super user. Trusted extended attributes are meant for
-+  implementing system/security services.
-+
-+  If unsure, say N.
-+
- Ext3 journalling file system support (EXPERIMENTAL)
- CONFIG_EXT3_FS
-   This is the journalling version of the Second extended file system
-@@ -15274,6 +15307,39 @@ CONFIG_EXT3_FS
-   of your root partition (the one containing the directory /) cannot
-   be compiled as a module, and so this may be dangerous.
-+Ext3 extended attributes
-+CONFIG_EXT3_FS_XATTR
-+  Extended attributes are name:value pairs associated with inodes by
-+  the kernel or by users (see the attr(5) manual page, or visit
-+  <http://acl.bestbits.at/> for details).
-+
-+  If unsure, say N.
-+
-+Ext3 extended attribute block sharing
-+CONFIG_EXT3_FS_XATTR_SHARING
-+  This options enables code for sharing identical extended attribute
-+  blocks among multiple inodes.
-+
-+  Usually, say Y.
-+
-+Ext3 extended user attributes
-+CONFIG_EXT3_FS_XATTR_USER
-+  This option enables extended user attributes on ext3. Processes can
-+  associate extended user attributes with inodes to store additional
-+  information such as the character encoding of files, etc. (see the
-+  attr(5) manual page, or visit <http://acl.bestbits.at/> for details).
-+
-+  If unsure, say N.
-+
-+Ext3 trusted extended attributes
-+CONFIG_EXT3_FS_XATTR_TRUSTED
-+  This option enables extended attributes on ext3 that are accessible
-+  (and visible) only to users capable of CAP_SYS_ADMIN. Usually this
-+  is only the super user. Trusted extended attributes are meant for
-+  implementing system/security services.
-+
-+  If unsure, say N.
-+
- Journal Block Device support (JBD for ext3) (EXPERIMENTAL)
- CONFIG_JBD
-   This is a generic journalling layer for block devices.  It is
---- linux-2.4.20/arch/alpha/defconfig~linux-2.4.20-xattr-0.8.54        2001-11-20 07:19:42.000000000 +0800
-+++ linux-2.4.20-root/arch/alpha/defconfig     2003-05-07 18:08:03.000000000 +0800
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_ALPHA=y
- # CONFIG_UID16 is not set
- # CONFIG_RWSEM_GENERIC_SPINLOCK is not set
---- linux-2.4.20/arch/alpha/kernel/entry.S~linux-2.4.20-xattr-0.8.54   2002-08-03 08:39:42.000000000 +0800
-+++ linux-2.4.20-root/arch/alpha/kernel/entry.S        2003-05-07 18:08:03.000000000 +0800
-@@ -1154,6 +1154,18 @@ sys_call_table:
-       .quad sys_readahead
-       .quad sys_ni_syscall                    /* 380, sys_security */
-       .quad sys_tkill
-+      .quad sys_setxattr
-+      .quad sys_lsetxattr
-+      .quad sys_fsetxattr
-+      .quad sys_getxattr                      /* 385 */
-+      .quad sys_lgetxattr
-+      .quad sys_fgetxattr
-+      .quad sys_listxattr
-+      .quad sys_llistxattr
-+      .quad sys_flistxattr                    /* 390 */
-+      .quad sys_removexattr
-+      .quad sys_lremovexattr
-+      .quad sys_fremovexattr
- /* Remember to update everything, kids.  */
- .ifne (. - sys_call_table) - (NR_SYSCALLS * 8)
---- linux-2.4.20/arch/arm/defconfig~linux-2.4.20-xattr-0.8.54  2001-05-20 08:43:05.000000000 +0800
-+++ linux-2.4.20-root/arch/arm/defconfig       2003-05-07 18:08:03.000000000 +0800
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_ARM=y
- # CONFIG_EISA is not set
- # CONFIG_SBUS is not set
---- linux-2.4.20/arch/arm/kernel/calls.S~linux-2.4.20-xattr-0.8.54     2002-08-03 08:39:42.000000000 +0800
-+++ linux-2.4.20-root/arch/arm/kernel/calls.S  2003-05-07 18:08:03.000000000 +0800
-@@ -240,18 +240,18 @@ __syscall_start:
-               .long   SYMBOL_NAME(sys_ni_syscall) /* Security */
-               .long   SYMBOL_NAME(sys_gettid)
- /* 225 */     .long   SYMBOL_NAME(sys_readahead)
--              .long   SYMBOL_NAME(sys_ni_syscall) /* sys_setxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* sys_lsetxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* sys_fsetxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* sys_getxattr */
--/* 230 */     .long   SYMBOL_NAME(sys_ni_syscall) /* sys_lgetxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* sys_fgetxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* sys_listxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* sys_llistxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* sys_flistxattr */
--/* 235 */     .long   SYMBOL_NAME(sys_ni_syscall) /* sys_removexattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* sys_lremovexattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* sys_fremovexattr */
-+              .long   SYMBOL_NAME(sys_setxattr)
-+              .long   SYMBOL_NAME(sys_lsetxattr)
-+              .long   SYMBOL_NAME(sys_fsetxattr)
-+              .long   SYMBOL_NAME(sys_getxattr)
-+/* 230 */     .long   SYMBOL_NAME(sys_lgetxattr)
-+              .long   SYMBOL_NAME(sys_fgetxattr)
-+              .long   SYMBOL_NAME(sys_listxattr)
-+              .long   SYMBOL_NAME(sys_llistxattr)
-+              .long   SYMBOL_NAME(sys_flistxattr)
-+/* 235 */     .long   SYMBOL_NAME(sys_removexattr)
-+              .long   SYMBOL_NAME(sys_lremovexattr)
-+              .long   SYMBOL_NAME(sys_fremovexattr)
-               .long   SYMBOL_NAME(sys_tkill)
-               /*
-                * Please check 2.5 _before_ adding calls here,
---- linux-2.4.20/arch/i386/defconfig~linux-2.4.20-xattr-0.8.54 2002-11-29 07:53:09.000000000 +0800
-+++ linux-2.4.20-root/arch/i386/defconfig      2003-05-07 18:08:03.000000000 +0800
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_X86=y
- CONFIG_ISA=y
- # CONFIG_SBUS is not set
---- linux-2.4.20/arch/ia64/defconfig~linux-2.4.20-xattr-0.8.54 2002-11-29 07:53:09.000000000 +0800
-+++ linux-2.4.20-root/arch/ia64/defconfig      2003-05-07 18:08:03.000000000 +0800
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- #
- # Code maturity level options
---- linux-2.4.20/arch/ia64/kernel/entry.S~linux-2.4.20-xattr-0.8.54    2002-11-29 07:53:09.000000000 +0800
-+++ linux-2.4.20-root/arch/ia64/kernel/entry.S 2003-05-07 18:08:03.000000000 +0800
-@@ -1170,18 +1170,18 @@ sys_call_table:
-       data8 sys_getdents64
-       data8 sys_getunwind                     // 1215
-       data8 sys_readahead
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall                   // 1220
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall                   // 1225
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
--      data8 ia64_ni_syscall
-+      data8 sys_setxattr
-+      data8 sys_lsetxattr
-+      data8 sys_fsetxattr
-+      data8 sys_getxattr                      // 1220
-+      data8 sys_lgetxattr
-+      data8 sys_fgetxattr
-+      data8 sys_listxattr
-+      data8 sys_llistxattr
-+      data8 sys_flistxattr                    // 1225
-+      data8 sys_removexattr
-+      data8 sys_lremovexattr
-+      data8 sys_fremovexattr
-       data8 sys_tkill
-       data8 ia64_ni_syscall                   // 1230
-       data8 ia64_ni_syscall
---- linux-2.4.20/arch/m68k/defconfig~linux-2.4.20-xattr-0.8.54 2000-06-20 03:56:08.000000000 +0800
-+++ linux-2.4.20-root/arch/m68k/defconfig      2003-05-07 18:08:03.000000000 +0800
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_UID16=y
- #
---- linux-2.4.20/arch/mips/defconfig~linux-2.4.20-xattr-0.8.54 2002-11-29 07:53:10.000000000 +0800
-+++ linux-2.4.20-root/arch/mips/defconfig      2003-05-07 18:08:03.000000000 +0800
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_MIPS=y
- CONFIG_MIPS32=y
- # CONFIG_MIPS64 is not set
---- linux-2.4.20/arch/mips64/defconfig~linux-2.4.20-xattr-0.8.54       2002-11-29 07:53:10.000000000 +0800
-+++ linux-2.4.20-root/arch/mips64/defconfig    2003-05-07 18:08:03.000000000 +0800
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_MIPS=y
- # CONFIG_MIPS32 is not set
- CONFIG_MIPS64=y
---- linux-2.4.20/arch/ppc/defconfig~linux-2.4.20-xattr-0.8.54  2002-11-29 07:53:11.000000000 +0800
-+++ linux-2.4.20-root/arch/ppc/defconfig       2003-05-07 18:08:03.000000000 +0800
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- # CONFIG_UID16 is not set
- # CONFIG_RWSEM_GENERIC_SPINLOCK is not set
- CONFIG_RWSEM_XCHGADD_ALGORITHM=y
---- linux-2.4.20/arch/ppc64/kernel/misc.S~linux-2.4.20-xattr-0.8.54    2002-11-29 07:53:11.000000000 +0800
-+++ linux-2.4.20-root/arch/ppc64/kernel/misc.S 2003-05-07 18:08:03.000000000 +0800
-@@ -731,6 +731,7 @@ _GLOBAL(sys_call_table32)
-       .llong .sys_gettid              /* 207 */
- #if 0 /* Reserved syscalls */
-       .llong .sys_tkill               /* 208 */
-+#endif
-       .llong .sys_setxattr
-       .llong .sys_lsetxattr   /* 210 */
-       .llong .sys_fsetxattr
-@@ -743,6 +744,7 @@ _GLOBAL(sys_call_table32)
-       .llong .sys_removexattr
-       .llong .sys_lremovexattr
-       .llong .sys_fremovexattr        /* 220 */
-+#if 0 /* Reserved syscalls */
-       .llong .sys_futex
- #endif
-       .llong .sys_perfmonctl   /* Put this here for now ... */
---- linux-2.4.20/arch/s390/defconfig~linux-2.4.20-xattr-0.8.54 2002-11-29 07:53:11.000000000 +0800
-+++ linux-2.4.20-root/arch/s390/defconfig      2003-05-07 18:08:03.000000000 +0800
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- # CONFIG_ISA is not set
- # CONFIG_EISA is not set
- # CONFIG_MCA is not set
---- linux-2.4.20/arch/s390/kernel/entry.S~linux-2.4.20-xattr-0.8.54    2002-11-29 07:53:11.000000000 +0800
-+++ linux-2.4.20-root/arch/s390/kernel/entry.S 2003-05-07 18:08:03.000000000 +0800
-@@ -558,18 +558,18 @@ sys_call_table:
-         .long  sys_fcntl64 
-       .long  sys_ni_syscall
-       .long  sys_ni_syscall
--      .long  sys_ni_syscall            /* 224 - reserved for setxattr  */
--      .long  sys_ni_syscall            /* 225 - reserved for lsetxattr */
--      .long  sys_ni_syscall            /* 226 - reserved for fsetxattr */
--      .long  sys_ni_syscall            /* 227 - reserved for getxattr  */
--      .long  sys_ni_syscall            /* 228 - reserved for lgetxattr */
--      .long  sys_ni_syscall            /* 229 - reserved for fgetxattr */
--      .long  sys_ni_syscall            /* 230 - reserved for listxattr */
--      .long  sys_ni_syscall            /* 231 - reserved for llistxattr */
--      .long  sys_ni_syscall            /* 232 - reserved for flistxattr */
--      .long  sys_ni_syscall            /* 233 - reserved for removexattr */
--      .long  sys_ni_syscall            /* 234 - reserved for lremovexattr */
--      .long  sys_ni_syscall            /* 235 - reserved for fremovexattr */
-+      .long  sys_setxattr
-+      .long  sys_lsetxattr            /* 225 */
-+      .long  sys_fsetxattr
-+      .long  sys_getxattr
-+      .long  sys_lgetxattr
-+      .long  sys_fgetxattr
-+      .long  sys_listxattr            /* 230 */
-+      .long  sys_llistxattr
-+      .long  sys_flistxattr
-+      .long  sys_removexattr
-+      .long  sys_lremovexattr
-+      .long  sys_fremovexattr         /* 235 */
-       .long  sys_gettid
-       .long  sys_tkill
-       .rept  255-237
---- linux-2.4.20/arch/s390x/defconfig~linux-2.4.20-xattr-0.8.54        2002-11-29 07:53:11.000000000 +0800
-+++ linux-2.4.20-root/arch/s390x/defconfig     2003-05-07 18:08:03.000000000 +0800
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- # CONFIG_ISA is not set
- # CONFIG_EISA is not set
- # CONFIG_MCA is not set
---- linux-2.4.20/arch/s390x/kernel/entry.S~linux-2.4.20-xattr-0.8.54   2002-11-29 07:53:11.000000000 +0800
-+++ linux-2.4.20-root/arch/s390x/kernel/entry.S        2003-05-07 18:08:03.000000000 +0800
-@@ -591,18 +591,18 @@ sys_call_table:
-       .long  SYSCALL(sys_ni_syscall,sys32_fcntl64_wrapper)
-       .long  SYSCALL(sys_ni_syscall,sys_ni_syscall)
-       .long  SYSCALL(sys_ni_syscall,sys_ni_syscall)
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 224 - reserved for setxattr  */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 225 - reserved for lsetxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 226 - reserved for fsetxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 227 - reserved for getxattr  */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 228 - reserved for lgetxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 229 - reserved for fgetxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 230 - reserved for listxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 231 - reserved for llistxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 232 - reserved for flistxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 233 - reserved for removexattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 234 - reserved for lremovexattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 235 - reserved for fremovexattr */
-+      .long  SYSCALL(sys_setxattr,sys32_setxattr_wrapper)
-+      .long  SYSCALL(sys_lsetxattr,sys32_lsetxattr_wrapper)   /* 225 */
-+      .long  SYSCALL(sys_fsetxattr,sys32_fsetxattr_wrapper)
-+      .long  SYSCALL(sys_getxattr,sys32_getxattr_wrapper)
-+      .long  SYSCALL(sys_lgetxattr,sys32_lgetxattr_wrapper)
-+      .long  SYSCALL(sys_fgetxattr,sys32_fgetxattr_wrapper)
-+      .long  SYSCALL(sys_listxattr,sys32_listxattr_wrapper)   /* 230 */
-+      .long  SYSCALL(sys_llistxattr,sys32_llistxattr_wrapper)
-+      .long  SYSCALL(sys_flistxattr,sys32_flistxattr_wrapper)
-+      .long  SYSCALL(sys_removexattr,sys32_removexattr_wrapper)
-+      .long  SYSCALL(sys_lremovexattr,sys32_lremovexattr_wrapper)
-+      .long  SYSCALL(sys_fremovexattr,sys32_fremovexattr_wrapper)/* 235 */
-       .long  SYSCALL(sys_gettid,sys_gettid)
-       .long  SYSCALL(sys_tkill,sys_tkill)
-       .rept  255-237
---- linux-2.4.20/arch/s390x/kernel/wrapper32.S~linux-2.4.20-xattr-0.8.54       2002-02-26 03:37:56.000000000 +0800
-+++ linux-2.4.20-root/arch/s390x/kernel/wrapper32.S    2003-05-07 18:08:03.000000000 +0800
-@@ -1091,3 +1091,95 @@ sys32_fstat64_wrapper:
-       llgtr   %r3,%r3                 # struct stat64 *
-       llgfr   %r4,%r4                 # long
-       jg      sys32_fstat64           # branch to system call
-+
-+      .globl  sys32_setxattr_wrapper
-+sys32_setxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      lgfr    %r6,%r6                 # int
-+      jg      sys_setxattr
-+
-+      .globl  sys32_lsetxattr_wrapper
-+sys32_lsetxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      lgfr    %r6,%r6                 # int
-+      jg      sys_lsetxattr
-+
-+      .globl  sys32_fsetxattr_wrapper
-+sys32_fsetxattr_wrapper:
-+      lgfr    %r2,%r2                 # int
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      lgfr    %r6,%r6                 # int
-+      jg      sys_fsetxattr
-+
-+      .globl  sys32_getxattr_wrapper
-+sys32_getxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      jg      sys_getxattr
-+
-+      .globl  sys32_lgetxattr_wrapper
-+sys32_lgetxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      jg      sys_lgetxattr
-+
-+      .globl  sys32_fgetxattr_wrapper
-+sys32_fgetxattr_wrapper:
-+      lgfr    %r2,%r2                 # int
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      jg      sys_fgetxattr
-+
-+      .globl  sys32_listxattr_wrapper
-+sys32_listxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgfr   %r4,%r4                 # size_t
-+      jg      sys_listxattr
-+
-+      .globl  sys32_llistxattr_wrapper
-+sys32_llistxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgfr   %r4,%r4                 # size_t
-+      jg      sys_llistxattr
-+
-+      .globl  sys32_flistxattr_wrapper
-+sys32_flistxattr_wrapper:
-+      lgfr    %r2,%r2                 # int
-+      llgtr   %r3,%r3                 # char *
-+      llgfr   %r4,%r4                 # size_t
-+      jg      sys_flistxattr
-+
-+      .globl  sys32_removexattr_wrapper
-+sys32_removexattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      jg      sys_removexattr
-+
-+      .globl  sys32_lremovexattr_wrapper
-+sys32_lremovexattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      jg      sys_lremovexattr
-+
-+      .globl  sys32_fremovexattr_wrapper
-+sys32_fremovexattr_wrapper:
-+      lgfr    %r2,%r2                 # int
-+      llgtr   %r3,%r3                 # char *
-+      jg      sys_fremovexattr
-+
-+
---- linux-2.4.20/arch/sparc/defconfig~linux-2.4.20-xattr-0.8.54        2002-08-03 08:39:43.000000000 +0800
-+++ linux-2.4.20-root/arch/sparc/defconfig     2003-05-07 18:08:03.000000000 +0800
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_UID16=y
- CONFIG_HIGHMEM=y
---- linux-2.4.20/arch/sparc/kernel/systbls.S~linux-2.4.20-xattr-0.8.54 2002-08-03 08:39:43.000000000 +0800
-+++ linux-2.4.20-root/arch/sparc/kernel/systbls.S      2003-05-07 18:08:03.000000000 +0800
-@@ -51,11 +51,11 @@ sys_call_table:
- /*150*/       .long sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64
- /*155*/       .long sys_fcntl64, sys_nis_syscall, sys_statfs, sys_fstatfs, sys_oldumount
- /*160*/       .long sys_nis_syscall, sys_nis_syscall, sys_getdomainname, sys_setdomainname, sys_nis_syscall
--/*165*/       .long sys_quotactl, sys_nis_syscall, sys_mount, sys_ustat, sys_nis_syscall
--/*170*/       .long sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_getdents
--/*175*/       .long sys_setsid, sys_fchdir, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
--/*180*/       .long sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_sigpending, sys_query_module
--/*185*/       .long sys_setpgid, sys_nis_syscall, sys_tkill, sys_nis_syscall, sys_newuname
-+/*165*/       .long sys_quotactl, sys_nis_syscall, sys_mount, sys_ustat, sys_setxattr
-+/*170*/       .long sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr, sys_getdents
-+/*175*/       .long sys_setsid, sys_fchdir, sys_fgetxattr, sys_listxattr, sys_llistxattr
-+/*180*/       .long sys_flistxattr, sys_removexattr, sys_lremovexattr, sys_sigpending, sys_query_module
-+/*185*/       .long sys_setpgid, sys_fremovexattr, sys_tkill, sys_nis_syscall, sys_newuname
- /*190*/       .long sys_init_module, sys_personality, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
- /*195*/       .long sys_nis_syscall, sys_nis_syscall, sys_getppid, sparc_sigaction, sys_sgetmask
- /*200*/       .long sys_ssetmask, sys_sigsuspend, sys_newlstat, sys_uselib, old_readdir
---- linux-2.4.20/arch/sparc64/defconfig~linux-2.4.20-xattr-0.8.54      2002-11-29 07:53:12.000000000 +0800
-+++ linux-2.4.20-root/arch/sparc64/defconfig   2003-05-07 18:08:03.000000000 +0800
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- #
- # Code maturity level options
---- linux-2.4.20/arch/sparc64/kernel/systbls.S~linux-2.4.20-xattr-0.8.54       2002-08-03 08:39:43.000000000 +0800
-+++ linux-2.4.20-root/arch/sparc64/kernel/systbls.S    2003-05-07 18:08:03.000000000 +0800
-@@ -52,11 +52,11 @@ sys_call_table32:
- /*150*/       .word sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64
-       .word sys32_fcntl64, sys_nis_syscall, sys32_statfs, sys32_fstatfs, sys_oldumount
- /*160*/       .word sys_nis_syscall, sys_nis_syscall, sys_getdomainname, sys_setdomainname, sys_nis_syscall
--      .word sys32_quotactl, sys_nis_syscall, sys32_mount, sys_ustat, sys_nis_syscall
--/*170*/       .word sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys32_getdents
--      .word sys_setsid, sys_fchdir, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
--/*180*/       .word sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys32_sigpending, sys32_query_module
--      .word sys_setpgid, sys_nis_syscall, sys_tkill, sys_nis_syscall, sparc64_newuname
-+      .word sys32_quotactl, sys_nis_syscall, sys32_mount, sys_ustat, sys_setxattr
-+/*170*/       .word sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr, sys32_getdents
-+      .word sys_setsid, sys_fchdir, sys_fgetxattr, sys_listxattr, sys_llistxattr
-+/*180*/       .word sys_flistxattr, sys_removexattr, sys_lremovexattr, sys32_sigpending, sys32_query_module
-+      .word sys_setpgid, sys_fremovexattr, sys_tkill, sys_nis_syscall, sparc64_newuname
- /*190*/       .word sys32_init_module, sparc64_personality, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
-       .word sys_nis_syscall, sys_nis_syscall, sys_getppid, sys32_sigaction, sys_sgetmask
- /*200*/       .word sys_ssetmask, sys_sigsuspend, sys32_newlstat, sys_uselib, old32_readdir
-@@ -111,11 +111,11 @@ sys_call_table:
- /*150*/       .word sys_getsockname, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64
-       .word sys_nis_syscall, sys_nis_syscall, sys_statfs, sys_fstatfs, sys_oldumount
- /*160*/       .word sys_nis_syscall, sys_nis_syscall, sys_getdomainname, sys_setdomainname, sys_utrap_install
--      .word sys_quotactl, sys_nis_syscall, sys_mount, sys_ustat, sys_nis_syscall
--/*170*/       .word sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_getdents
--      .word sys_setsid, sys_fchdir, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
--/*180*/       .word sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_query_module
--      .word sys_setpgid, sys_nis_syscall, sys_tkill, sys_nis_syscall, sparc64_newuname
-+      .word sys_quotactl, sys_nis_syscall, sys_mount, sys_ustat, sys_setxattr
-+/*170*/       .word sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr, sys_getdents
-+      .word sys_setsid, sys_fchdir, sys_fgetxattr, sys_listxattr, sys_llistxattr
-+/*180*/       .word sys_flistxattr, sys_removexattr, sys_lremovexattr, sys_nis_syscall, sys_query_module
-+      .word sys_setpgid, sys_fremovexattr, sys_tkill, sys_nis_syscall, sparc64_newuname
- /*190*/       .word sys_init_module, sparc64_personality, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
-       .word sys_nis_syscall, sys_nis_syscall, sys_getppid, sys_nis_syscall, sys_sgetmask
- /*200*/       .word sys_ssetmask, sys_nis_syscall, sys_newlstat, sys_uselib, sys_nis_syscall
---- linux-2.4.20/fs/Config.in~linux-2.4.20-xattr-0.8.54        2002-11-29 07:53:15.000000000 +0800
-+++ linux-2.4.20-root/fs/Config.in     2003-05-07 18:08:03.000000000 +0800
-@@ -25,6 +25,11 @@ dep_mbool '  Debug Befs' CONFIG_BEFS_DEB
- dep_tristate 'BFS file system support (EXPERIMENTAL)' CONFIG_BFS_FS $CONFIG_EXPERIMENTAL
- tristate 'Ext3 journalling file system support' CONFIG_EXT3_FS
-+dep_mbool '  Ext3 extended attributes' CONFIG_EXT3_FS_XATTR $CONFIG_EXT3_FS
-+dep_bool '    Ext3 extended attribute block sharing' \
-+    CONFIG_EXT3_FS_XATTR_SHARING $CONFIG_EXT3_FS_XATTR
-+dep_bool '    Ext3 extended user attributes' \
-+    CONFIG_EXT3_FS_XATTR_USER $CONFIG_EXT3_FS_XATTR
- # CONFIG_JBD could be its own option (even modular), but until there are
- # other users than ext3, we will simply make it be the same as CONFIG_EXT3_FS
- # dep_tristate '  Journal Block Device support (JBD for ext3)' CONFIG_JBD $CONFIG_EXT3_FS
-@@ -84,6 +89,11 @@ dep_mbool '  QNX4FS write support (DANGE
- tristate 'ROM file system support' CONFIG_ROMFS_FS
- tristate 'Second extended fs support' CONFIG_EXT2_FS
-+dep_mbool '  Ext2 extended attributes' CONFIG_EXT2_FS_XATTR $CONFIG_EXT2_FS
-+dep_bool '    Ext2 extended attribute block sharing' \
-+    CONFIG_EXT2_FS_XATTR_SHARING $CONFIG_EXT2_FS_XATTR
-+dep_bool '    Ext2 extended user attributes' \
-+    CONFIG_EXT2_FS_XATTR_USER $CONFIG_EXT2_FS_XATTR
- tristate 'System V/Xenix/V7/Coherent file system support' CONFIG_SYSV_FS
-@@ -155,6 +165,10 @@ else
-    define_tristate CONFIG_ZISOFS_FS n
- fi
-+# Meta block cache for Extended Attributes (ext2/ext3)
-+#tristate 'Meta block cache' CONFIG_FS_MBCACHE
-+define_tristate CONFIG_FS_MBCACHE y 
-+
- mainmenu_option next_comment
- comment 'Partition Types'
- source fs/partitions/Config.in
---- linux-2.4.20/fs/Makefile~linux-2.4.20-xattr-0.8.54 2003-05-05 19:00:58.000000000 +0800
-+++ linux-2.4.20-root/fs/Makefile      2003-05-07 18:08:03.000000000 +0800
-@@ -79,6 +79,9 @@ obj-y                                += binfmt_script.o
- obj-$(CONFIG_BINFMT_ELF)      += binfmt_elf.o
-+export-objs += mbcache.o
-+obj-$(CONFIG_FS_MBCACHE)      += mbcache.o
-+
- # persistent filesystems
- obj-y += $(join $(subdir-y),$(subdir-y:%=/%.o))
---- linux-2.4.20/fs/ext2/Makefile~linux-2.4.20-xattr-0.8.54    2001-10-11 23:05:18.000000000 +0800
-+++ linux-2.4.20-root/fs/ext2/Makefile 2003-05-07 18:08:03.000000000 +0800
-@@ -13,4 +13,8 @@ obj-y    := balloc.o bitmap.o dir.o file
-               ioctl.o namei.o super.o symlink.o
- obj-m    := $(O_TARGET)
-+export-objs += xattr.o
-+obj-$(CONFIG_EXT2_FS_XATTR) += xattr.o
-+obj-$(CONFIG_EXT2_FS_XATTR_USER) += xattr_user.o
-+
- include $(TOPDIR)/Rules.make
---- linux-2.4.20/fs/ext2/file.c~linux-2.4.20-xattr-0.8.54      2001-10-11 23:05:18.000000000 +0800
-+++ linux-2.4.20-root/fs/ext2/file.c   2003-05-07 18:08:03.000000000 +0800
-@@ -20,6 +20,7 @@
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- #include <linux/sched.h>
- /*
-@@ -51,4 +52,8 @@ struct file_operations ext2_file_operati
- struct inode_operations ext2_file_inode_operations = {
-       truncate:       ext2_truncate,
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
- };
---- linux-2.4.20/fs/ext2/ialloc.c~linux-2.4.20-xattr-0.8.54    2002-11-29 07:53:15.000000000 +0800
-+++ linux-2.4.20-root/fs/ext2/ialloc.c 2003-05-07 18:08:03.000000000 +0800
-@@ -15,6 +15,7 @@
- #include <linux/config.h>
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- #include <linux/locks.h>
- #include <linux/quotaops.h>
-@@ -167,6 +168,7 @@ void ext2_free_inode (struct inode * ino
-        */
-       if (!is_bad_inode(inode)) {
-               /* Quota is already initialized in iput() */
-+              ext2_xattr_delete_inode(inode);
-               DQUOT_FREE_INODE(inode);
-               DQUOT_DROP(inode);
-       }
---- linux-2.4.20/fs/ext2/inode.c~linux-2.4.20-xattr-0.8.54     2002-11-29 07:53:15.000000000 +0800
-+++ linux-2.4.20-root/fs/ext2/inode.c  2003-05-07 18:08:03.000000000 +0800
-@@ -39,6 +39,18 @@ MODULE_LICENSE("GPL");
- static int ext2_update_inode(struct inode * inode, int do_sync);
- /*
-+ * Test whether an inode is a fast symlink.
-+ */
-+static inline int ext2_inode_is_fast_symlink(struct inode *inode)
-+{
-+      int ea_blocks = inode->u.ext2_i.i_file_acl ?
-+              (inode->i_sb->s_blocksize >> 9) : 0;
-+
-+      return (S_ISLNK(inode->i_mode) &&
-+              inode->i_blocks - ea_blocks == 0);
-+}
-+
-+/*
-  * Called at each iput()
-  */
- void ext2_put_inode (struct inode * inode)
-@@ -53,9 +65,7 @@ void ext2_delete_inode (struct inode * i
- {
-       lock_kernel();
--      if (is_bad_inode(inode) ||
--          inode->i_ino == EXT2_ACL_IDX_INO ||
--          inode->i_ino == EXT2_ACL_DATA_INO)
-+      if (is_bad_inode(inode))
-               goto no_delete;
-       inode->u.ext2_i.i_dtime = CURRENT_TIME;
-       mark_inode_dirty(inode);
-@@ -801,6 +811,8 @@ void ext2_truncate (struct inode * inode
-       if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
-           S_ISLNK(inode->i_mode)))
-               return;
-+      if (ext2_inode_is_fast_symlink(inode))
-+              return;
-       if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
-               return;
-@@ -888,8 +900,7 @@ void ext2_read_inode (struct inode * ino
-       unsigned long offset;
-       struct ext2_group_desc * gdp;
--      if ((inode->i_ino != EXT2_ROOT_INO && inode->i_ino != EXT2_ACL_IDX_INO &&
--           inode->i_ino != EXT2_ACL_DATA_INO &&
-+      if ((inode->i_ino != EXT2_ROOT_INO &&
-            inode->i_ino < EXT2_FIRST_INO(inode->i_sb)) ||
-           inode->i_ino > le32_to_cpu(inode->i_sb->u.ext2_sb.s_es->s_inodes_count)) {
-               ext2_error (inode->i_sb, "ext2_read_inode",
-@@ -974,10 +985,7 @@ void ext2_read_inode (struct inode * ino
-       for (block = 0; block < EXT2_N_BLOCKS; block++)
-               inode->u.ext2_i.i_data[block] = raw_inode->i_block[block];
--      if (inode->i_ino == EXT2_ACL_IDX_INO ||
--          inode->i_ino == EXT2_ACL_DATA_INO)
--              /* Nothing to do */ ;
--      else if (S_ISREG(inode->i_mode)) {
-+      if (S_ISREG(inode->i_mode)) {
-               inode->i_op = &ext2_file_inode_operations;
-               inode->i_fop = &ext2_file_operations;
-               inode->i_mapping->a_ops = &ext2_aops;
-@@ -986,15 +994,17 @@ void ext2_read_inode (struct inode * ino
-               inode->i_fop = &ext2_dir_operations;
-               inode->i_mapping->a_ops = &ext2_aops;
-       } else if (S_ISLNK(inode->i_mode)) {
--              if (!inode->i_blocks)
-+              if (ext2_inode_is_fast_symlink(inode))
-                       inode->i_op = &ext2_fast_symlink_inode_operations;
-               else {
--                      inode->i_op = &page_symlink_inode_operations;
-+                      inode->i_op = &ext2_symlink_inode_operations;
-                       inode->i_mapping->a_ops = &ext2_aops;
-               }
--      } else 
-+      } else {
-+              inode->i_op = &ext2_special_inode_operations;
-               init_special_inode(inode, inode->i_mode,
-                                  le32_to_cpu(raw_inode->i_block[0]));
-+      }
-       brelse (bh);
-       inode->i_attr_flags = 0;
-       if (inode->u.ext2_i.i_flags & EXT2_SYNC_FL) {
---- linux-2.4.20/fs/ext2/namei.c~linux-2.4.20-xattr-0.8.54     2001-10-04 13:57:36.000000000 +0800
-+++ linux-2.4.20-root/fs/ext2/namei.c  2003-05-07 18:08:03.000000000 +0800
-@@ -31,6 +31,7 @@
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- #include <linux/pagemap.h>
- /*
-@@ -136,7 +137,7 @@ static int ext2_symlink (struct inode * 
-       if (l > sizeof (inode->u.ext2_i.i_data)) {
-               /* slow symlink */
--              inode->i_op = &page_symlink_inode_operations;
-+              inode->i_op = &ext2_symlink_inode_operations;
-               inode->i_mapping->a_ops = &ext2_aops;
-               err = block_symlink(inode, symname, l);
-               if (err)
-@@ -345,4 +346,15 @@ struct inode_operations ext2_dir_inode_o
-       rmdir:          ext2_rmdir,
-       mknod:          ext2_mknod,
-       rename:         ext2_rename,
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
-+};
-+
-+struct inode_operations ext2_special_inode_operations = {
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
- };
---- linux-2.4.20/fs/ext2/super.c~linux-2.4.20-xattr-0.8.54     2002-11-29 07:53:15.000000000 +0800
-+++ linux-2.4.20-root/fs/ext2/super.c  2003-05-07 18:08:03.000000000 +0800
-@@ -21,6 +21,7 @@
- #include <linux/string.h>
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- #include <linux/slab.h>
- #include <linux/init.h>
- #include <linux/locks.h>
-@@ -125,6 +126,7 @@ void ext2_put_super (struct super_block 
-       int db_count;
-       int i;
-+      ext2_xattr_put_super(sb);
-       if (!(sb->s_flags & MS_RDONLY)) {
-               struct ext2_super_block *es = EXT2_SB(sb)->s_es;
-@@ -175,6 +177,13 @@ static int parse_options (char * options
-            this_char = strtok (NULL, ",")) {
-               if ((value = strchr (this_char, '=')) != NULL)
-                       *value++ = 0;
-+#ifdef CONFIG_EXT2_FS_XATTR_USER
-+              if (!strcmp (this_char, "user_xattr"))
-+                      set_opt (*mount_options, XATTR_USER);
-+              else if (!strcmp (this_char, "nouser_xattr"))
-+                      clear_opt (*mount_options, XATTR_USER);
-+              else
-+#endif
-               if (!strcmp (this_char, "bsddf"))
-                       clear_opt (*mount_options, MINIX_DF);
-               else if (!strcmp (this_char, "nouid32")) {
-@@ -424,6 +433,9 @@ struct super_block * ext2_read_super (st
-           blocksize = BLOCK_SIZE;
-       sb->u.ext2_sb.s_mount_opt = 0;
-+#ifdef CONFIG_EXT2_FS_XATTR_USER
-+      /* set_opt (sb->u.ext2_sb.s_mount_opt, XATTR_USER); */
-+#endif
-       if (!parse_options ((char *) data, &sb_block, &resuid, &resgid,
-           &sb->u.ext2_sb.s_mount_opt)) {
-               return NULL;
-@@ -813,12 +825,27 @@ static DECLARE_FSTYPE_DEV(ext2_fs_type, 
- static int __init init_ext2_fs(void)
- {
--        return register_filesystem(&ext2_fs_type);
-+      int error = init_ext2_xattr();
-+      if (error)
-+              return error;
-+      error = init_ext2_xattr_user();
-+      if (error)
-+              goto fail;
-+      error = register_filesystem(&ext2_fs_type);
-+      if (!error)
-+              return 0;
-+
-+      exit_ext2_xattr_user();
-+fail:
-+      exit_ext2_xattr();
-+      return error;
- }
- static void __exit exit_ext2_fs(void)
- {
-       unregister_filesystem(&ext2_fs_type);
-+      exit_ext2_xattr_user();
-+      exit_ext2_xattr();
- }
- EXPORT_NO_SYMBOLS;
---- linux-2.4.20/fs/ext2/symlink.c~linux-2.4.20-xattr-0.8.54   2000-09-28 04:41:33.000000000 +0800
-+++ linux-2.4.20-root/fs/ext2/symlink.c        2003-05-07 18:08:03.000000000 +0800
-@@ -19,6 +19,7 @@
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- static int ext2_readlink(struct dentry *dentry, char *buffer, int buflen)
- {
-@@ -32,7 +33,20 @@ static int ext2_follow_link(struct dentr
-       return vfs_follow_link(nd, s);
- }
-+struct inode_operations ext2_symlink_inode_operations = {
-+      readlink:       page_readlink,
-+      follow_link:    page_follow_link,
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
-+};
-+
- struct inode_operations ext2_fast_symlink_inode_operations = {
-       readlink:       ext2_readlink,
-       follow_link:    ext2_follow_link,
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
- };
---- /dev/null  2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-root/fs/ext2/xattr.c  2003-05-07 18:08:03.000000000 +0800
-@@ -0,0 +1,1212 @@
-+/*
-+ * linux/fs/ext2/xattr.c
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ *
-+ * Fix by Harrison Xing <harrison@mountainviewdata.com>.
-+ * Extended attributes for symlinks and special files added per
-+ *  suggestion of Luka Renko <luka.renko@hermes.si>.
-+ */
-+
-+/*
-+ * Extended attributes are stored on disk blocks allocated outside of
-+ * any inode. The i_file_acl field is then made to point to this allocated
-+ * block. If all extended attributes of an inode are identical, these
-+ * inodes may share the same extended attribute block. Such situations
-+ * are automatically detected by keeping a cache of recent attribute block
-+ * numbers and hashes over the block's contents in memory.
-+ *
-+ *
-+ * Extended attribute block layout:
-+ *
-+ *   +------------------+
-+ *   | header           |
-+ *   | entry 1          | |
-+ *   | entry 2          | | growing downwards
-+ *   | entry 3          | v
-+ *   | four null bytes  |
-+ *   | . . .            |
-+ *   | value 1          | ^
-+ *   | value 3          | | growing upwards
-+ *   | value 2          | |
-+ *   +------------------+
-+ *
-+ * The block header is followed by multiple entry descriptors. These entry
-+ * descriptors are variable in size, and alligned to EXT2_XATTR_PAD
-+ * byte boundaries. The entry descriptors are sorted by attribute name,
-+ * so that two extended attribute blocks can be compared efficiently.
-+ *
-+ * Attribute values are aligned to the end of the block, stored in
-+ * no specific order. They are also padded to EXT2_XATTR_PAD byte
-+ * boundaries. No additional gaps are left between them.
-+ *
-+ * Locking strategy
-+ * ----------------
-+ * The VFS already holds the BKL and the inode->i_sem semaphore when any of
-+ * the xattr inode operations are called, so we are guaranteed that only one
-+ * processes accesses extended attributes of an inode at any time.
-+ *
-+ * For writing we also grab the ext2_xattr_sem semaphore. This ensures that
-+ * only a single process is modifying an extended attribute block, even
-+ * if the block is shared among inodes.
-+ *
-+ * Note for porting to 2.5
-+ * -----------------------
-+ * The BKL will no longer be held in the xattr inode operations.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/locks.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
-+#include <linux/mbcache.h>
-+#include <linux/quotaops.h>
-+#include <asm/semaphore.h>
-+#include <linux/compatmac.h>
-+
-+/* These symbols may be needed by a module. */
-+EXPORT_SYMBOL(ext2_xattr_register);
-+EXPORT_SYMBOL(ext2_xattr_unregister);
-+EXPORT_SYMBOL(ext2_xattr_get);
-+EXPORT_SYMBOL(ext2_xattr_list);
-+EXPORT_SYMBOL(ext2_xattr_set);
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+# define mark_buffer_dirty(bh) mark_buffer_dirty(bh, 1)
-+#endif
-+
-+#define HDR(bh) ((struct ext2_xattr_header *)((bh)->b_data))
-+#define ENTRY(ptr) ((struct ext2_xattr_entry *)(ptr))
-+#define FIRST_ENTRY(bh) ENTRY(HDR(bh)+1)
-+#define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
-+
-+#ifdef EXT2_XATTR_DEBUG
-+# define ea_idebug(inode, f...) do { \
-+              printk(KERN_DEBUG "inode %s:%ld: ", \
-+                      kdevname(inode->i_dev), inode->i_ino); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+# define ea_bdebug(bh, f...) do { \
-+              printk(KERN_DEBUG "block %s:%ld: ", \
-+                      kdevname(bh->b_dev), bh->b_blocknr); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+#else
-+# define ea_idebug(f...)
-+# define ea_bdebug(f...)
-+#endif
-+
-+static int ext2_xattr_set2(struct inode *, struct buffer_head *,
-+                         struct ext2_xattr_header *);
-+
-+#ifdef CONFIG_EXT2_FS_XATTR_SHARING
-+
-+static int ext2_xattr_cache_insert(struct buffer_head *);
-+static struct buffer_head *ext2_xattr_cache_find(struct inode *,
-+                                               struct ext2_xattr_header *);
-+static void ext2_xattr_cache_remove(struct buffer_head *);
-+static void ext2_xattr_rehash(struct ext2_xattr_header *,
-+                            struct ext2_xattr_entry *);
-+
-+static struct mb_cache *ext2_xattr_cache;
-+
-+#else
-+# define ext2_xattr_cache_insert(bh) 0
-+# define ext2_xattr_cache_find(inode, header) NULL
-+# define ext2_xattr_cache_remove(bh) while(0) {}
-+# define ext2_xattr_rehash(header, entry) while(0) {}
-+#endif
-+
-+/*
-+ * If a file system does not share extended attributes among inodes,
-+ * we should not need the ext2_xattr_sem semaphore. However, the
-+ * filesystem may still contain shared blocks, so we always take
-+ * the lock.
-+ */
-+
-+DECLARE_MUTEX(ext2_xattr_sem);
-+
-+static inline int
-+ext2_xattr_new_block(struct inode *inode, int * errp, int force)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      int goal = le32_to_cpu(EXT2_SB(sb)->s_es->s_first_data_block) +
-+              EXT2_I(inode)->i_block_group * EXT2_BLOCKS_PER_GROUP(sb);
-+
-+      /* How can we enforce the allocation? */
-+      int block = ext2_new_block(inode, goal, 0, 0, errp);
-+#ifdef OLD_QUOTAS
-+      if (!*errp)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#endif
-+      return block;
-+}
-+
-+static inline int
-+ext2_xattr_quota_alloc(struct inode *inode, int force)
-+{
-+      /* How can we enforce the allocation? */
-+#ifdef OLD_QUOTAS
-+      int error = DQUOT_ALLOC_BLOCK(inode->i_sb, inode, 1);
-+      if (!error)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#else
-+      int error = DQUOT_ALLOC_BLOCK(inode, 1);
-+#endif
-+      return error;
-+}
-+
-+#ifdef OLD_QUOTAS
-+
-+static inline void
-+ext2_xattr_quota_free(struct inode *inode)
-+{
-+      DQUOT_FREE_BLOCK(inode->i_sb, inode, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+static inline void
-+ext2_xattr_free_block(struct inode * inode, unsigned long block)
-+{
-+      ext2_free_blocks(inode, block, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+#else
-+# define ext2_xattr_quota_free(inode) \
-+      DQUOT_FREE_BLOCK(inode, 1)
-+# define ext2_xattr_free_block(inode, block) \
-+      ext2_free_blocks(inode, block, 1)
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
-+
-+static inline struct buffer_head *
-+sb_bread(struct super_block *sb, int block)
-+{
-+      return bread(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+static inline struct buffer_head *
-+sb_getblk(struct super_block *sb, int block)
-+{
-+      return getblk(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+#endif
-+
-+struct ext2_xattr_handler *ext2_xattr_handlers[EXT2_XATTR_INDEX_MAX];
-+rwlock_t ext2_handler_lock = RW_LOCK_UNLOCKED;
-+
-+int
-+ext2_xattr_register(int name_index, struct ext2_xattr_handler *handler)
-+{
-+      int error = -EINVAL;
-+
-+      if (name_index > 0 && name_index <= EXT2_XATTR_INDEX_MAX) {
-+              write_lock(&ext2_handler_lock);
-+              if (!ext2_xattr_handlers[name_index-1]) {
-+                      ext2_xattr_handlers[name_index-1] = handler;
-+                      error = 0;
-+              }
-+              write_unlock(&ext2_handler_lock);
-+      }
-+      return error;
-+}
-+
-+void
-+ext2_xattr_unregister(int name_index, struct ext2_xattr_handler *handler)
-+{
-+      if (name_index > 0 || name_index <= EXT2_XATTR_INDEX_MAX) {
-+              write_lock(&ext2_handler_lock);
-+              ext2_xattr_handlers[name_index-1] = NULL;
-+              write_unlock(&ext2_handler_lock);
-+      }
-+}
-+
-+static inline const char *
-+strcmp_prefix(const char *a, const char *a_prefix)
-+{
-+      while (*a_prefix && *a == *a_prefix) {
-+              a++;
-+              a_prefix++;
-+      }
-+      return *a_prefix ? NULL : a;
-+}
-+
-+/*
-+ * Decode the extended attribute name, and translate it into
-+ * the name_index and name suffix.
-+ */
-+static struct ext2_xattr_handler *
-+ext2_xattr_resolve_name(const char **name)
-+{
-+      struct ext2_xattr_handler *handler = NULL;
-+      int i;
-+
-+      if (!*name)
-+              return NULL;
-+      read_lock(&ext2_handler_lock);
-+      for (i=0; i<EXT2_XATTR_INDEX_MAX; i++) {
-+              if (ext2_xattr_handlers[i]) {
-+                      const char *n = strcmp_prefix(*name,
-+                              ext2_xattr_handlers[i]->prefix);
-+                      if (n) {
-+                              handler = ext2_xattr_handlers[i];
-+                              *name = n;
-+                              break;
-+                      }
-+              }
-+      }
-+      read_unlock(&ext2_handler_lock);
-+      return handler;
-+}
-+
-+static inline struct ext2_xattr_handler *
-+ext2_xattr_handler(int name_index)
-+{
-+      struct ext2_xattr_handler *handler = NULL;
-+      if (name_index > 0 && name_index <= EXT2_XATTR_INDEX_MAX) {
-+              read_lock(&ext2_handler_lock);
-+              handler = ext2_xattr_handlers[name_index-1];
-+              read_unlock(&ext2_handler_lock);
-+      }
-+      return handler;
-+}
-+
-+/*
-+ * Inode operation getxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext2_getxattr(struct dentry *dentry, const char *name,
-+            void *buffer, size_t size)
-+{
-+      struct ext2_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext2_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->get(inode, name, buffer, size);
-+}
-+
-+/*
-+ * Inode operation listxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext2_listxattr(struct dentry *dentry, char *buffer, size_t size)
-+{
-+      return ext2_xattr_list(dentry->d_inode, buffer, size);
-+}
-+
-+/*
-+ * Inode operation setxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext2_setxattr(struct dentry *dentry, const char *name,
-+            const void *value, size_t size, int flags)
-+{
-+      struct ext2_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      if (size == 0)
-+              value = "";  /* empty EA, do not remove */
-+      handler = ext2_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, value, size, flags);
-+}
-+
-+/*
-+ * Inode operation removexattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext2_removexattr(struct dentry *dentry, const char *name)
-+{
-+      struct ext2_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext2_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, NULL, 0, XATTR_REPLACE);
-+}
-+
-+/*
-+ * ext2_xattr_get()
-+ *
-+ * Copy an extended attribute into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext2_xattr_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext2_xattr_entry *entry;
-+      unsigned int block, size;
-+      char *end;
-+      int name_len, error;
-+
-+      ea_idebug(inode, "name=%d.%s, buffer=%p, buffer_size=%ld",
-+                name_index, name, buffer, (long)buffer_size);
-+
-+      if (name == NULL)
-+              return -EINVAL;
-+      if (!EXT2_I(inode)->i_file_acl)
-+              return -ENOATTR;
-+      block = EXT2_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext2_error(inode->i_sb, "ext2_xattr_get",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* find named attribute */
-+      name_len = strlen(name);
-+
-+      error = -ERANGE;
-+      if (name_len > 255)
-+              goto cleanup;
-+      entry = FIRST_ENTRY(bh);
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext2_xattr_entry *next =
-+                      EXT2_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              if (name_index == entry->e_name_index &&
-+                  name_len == entry->e_name_len &&
-+                  memcmp(name, entry->e_name, name_len) == 0)
-+                      goto found;
-+              entry = next;
-+      }
-+      /* Check the remaining name entries */
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext2_xattr_entry *next =
-+                      EXT2_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              entry = next;
-+      }
-+      if (ext2_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      error = -ENOATTR;
-+      goto cleanup;
-+found:
-+      /* check the buffer size */
-+      if (entry->e_value_block != 0)
-+              goto bad_block;
-+      size = le32_to_cpu(entry->e_value_size);
-+      if (size > inode->i_sb->s_blocksize ||
-+          le16_to_cpu(entry->e_value_offs) + size > inode->i_sb->s_blocksize)
-+              goto bad_block;
-+
-+      if (ext2_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (buffer) {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+              /* return value of attribute */
-+              memcpy(buffer, bh->b_data + le16_to_cpu(entry->e_value_offs),
-+                      size);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext2_xattr_list()
-+ *
-+ * Copy a list of attribute names into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext2_xattr_list(struct inode *inode, char *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext2_xattr_entry *entry;
-+      unsigned int block, size = 0;
-+      char *buf, *end;
-+      int error;
-+
-+      ea_idebug(inode, "buffer=%p, buffer_size=%ld",
-+                buffer, (long)buffer_size);
-+
-+      if (!EXT2_I(inode)->i_file_acl)
-+              return 0;
-+      block = EXT2_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext2_error(inode->i_sb, "ext2_xattr_list",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* compute the size required for the list of attribute names */
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT2_XATTR_NEXT(entry)) {
-+              struct ext2_xattr_handler *handler;
-+              struct ext2_xattr_entry *next =
-+                      EXT2_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+
-+              handler = ext2_xattr_handler(entry->e_name_index);
-+              if (handler)
-+                      size += handler->list(NULL, inode, entry->e_name,
-+                                            entry->e_name_len);
-+      }
-+
-+      if (ext2_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (!buffer) {
-+              error = size;
-+              goto cleanup;
-+      } else {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+      }
-+
-+      /* list the attribute names */
-+      buf = buffer;
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT2_XATTR_NEXT(entry)) {
-+              struct ext2_xattr_handler *handler;
-+              
-+              handler = ext2_xattr_handler(entry->e_name_index);
-+              if (handler)
-+                      buf += handler->list(buf, inode, entry->e_name,
-+                                           entry->e_name_len);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * If the EXT2_FEATURE_COMPAT_EXT_ATTR feature of this file system is
-+ * not set, set it.
-+ */
-+static void ext2_xattr_update_super_block(struct super_block *sb)
-+{
-+      if (EXT2_HAS_COMPAT_FEATURE(sb, EXT2_FEATURE_COMPAT_EXT_ATTR))
-+              return;
-+
-+      lock_super(sb);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+      EXT2_SB(sb)->s_feature_compat |= EXT2_FEATURE_COMPAT_EXT_ATTR;
-+#endif
-+      EXT2_SB(sb)->s_es->s_feature_compat |=
-+              cpu_to_le32(EXT2_FEATURE_COMPAT_EXT_ATTR);
-+      sb->s_dirt = 1;
-+      mark_buffer_dirty(EXT2_SB(sb)->s_sbh);
-+      unlock_super(sb);
-+}
-+
-+/*
-+ * ext2_xattr_set()
-+ *
-+ * Create, replace or remove an extended attribute for this inode. Buffer
-+ * is NULL to remove an existing extended attribute, and non-NULL to
-+ * either replace an existing extended attribute, or create a new extended
-+ * attribute. The flags XATTR_REPLACE and XATTR_CREATE
-+ * specify that an extended attribute must exist and must not exist
-+ * previous to the call, respectively.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+int
-+ext2_xattr_set(struct inode *inode, int name_index, const char *name,
-+             const void *value, size_t value_len, int flags)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *bh = NULL;
-+      struct ext2_xattr_header *header = NULL;
-+      struct ext2_xattr_entry *here, *last;
-+      unsigned int name_len;
-+      int block = EXT2_I(inode)->i_file_acl;
-+      int min_offs = sb->s_blocksize, not_found = 1, free, error;
-+      char *end;
-+      
-+      /*
-+       * header -- Points either into bh, or to a temporarily
-+       *           allocated buffer.
-+       * here -- The named entry found, or the place for inserting, within
-+       *         the block pointed to by header.
-+       * last -- Points right after the last named entry within the block
-+       *         pointed to by header.
-+       * min_offs -- The offset of the first value (values are aligned
-+       *             towards the end of the block).
-+       * end -- Points right after the block pointed to by header.
-+       */
-+      
-+      ea_idebug(inode, "name=%d.%s, value=%p, value_len=%ld",
-+                name_index, name, value, (long)value_len);
-+
-+      if (IS_RDONLY(inode))
-+              return -EROFS;
-+      if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
-+              return -EPERM;
-+      if (value == NULL)
-+              value_len = 0;
-+      if (name == NULL)
-+              return -EINVAL;
-+      name_len = strlen(name);
-+      if (name_len > 255 || value_len > sb->s_blocksize)
-+              return -ERANGE;
-+      down(&ext2_xattr_sem);
-+
-+      if (block) {
-+              /* The inode already has an extended attribute block. */
-+
-+              bh = sb_bread(sb, block);
-+              error = -EIO;
-+              if (!bh)
-+                      goto cleanup;
-+              ea_bdebug(bh, "b_count=%d, refcount=%d",
-+                      atomic_read(&(bh->b_count)),
-+                      le32_to_cpu(HDR(bh)->h_refcount));
-+              header = HDR(bh);
-+              end = bh->b_data + bh->b_size;
-+              if (header->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
-+                  header->h_blocks != cpu_to_le32(1)) {
-+bad_block:            ext2_error(sb, "ext2_xattr_set",
-+                              "inode %ld: bad block %d", inode->i_ino, block);
-+                      error = -EIO;
-+                      goto cleanup;
-+              }
-+              /* Find the named attribute. */
-+              here = FIRST_ENTRY(bh);
-+              while (!IS_LAST_ENTRY(here)) {
-+                      struct ext2_xattr_entry *next = EXT2_XATTR_NEXT(here);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!here->e_value_block && here->e_value_size) {
-+                              int offs = le16_to_cpu(here->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      not_found = name_index - here->e_name_index;
-+                      if (!not_found)
-+                              not_found = name_len - here->e_name_len;
-+                      if (!not_found)
-+                              not_found = memcmp(name, here->e_name,name_len);
-+                      if (not_found <= 0)
-+                              break;
-+                      here = next;
-+              }
-+              last = here;
-+              /* We still need to compute min_offs and last. */
-+              while (!IS_LAST_ENTRY(last)) {
-+                      struct ext2_xattr_entry *next = EXT2_XATTR_NEXT(last);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!last->e_value_block && last->e_value_size) {
-+                              int offs = le16_to_cpu(last->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      last = next;
-+              }
-+
-+              /* Check whether we have enough space left. */
-+              free = min_offs - ((char*)last - (char*)header) - sizeof(__u32);
-+      } else {
-+              /* We will use a new extended attribute block. */
-+              free = sb->s_blocksize -
-+                      sizeof(struct ext2_xattr_header) - sizeof(__u32);
-+              here = last = NULL;  /* avoid gcc uninitialized warning. */
-+      }
-+
-+      if (not_found) {
-+              /* Request to remove a nonexistent attribute? */
-+              error = -ENOATTR;
-+              if (flags & XATTR_REPLACE)
-+                      goto cleanup;
-+              error = 0;
-+              if (value == NULL)
-+                      goto cleanup;
-+              else
-+                      free -= EXT2_XATTR_LEN(name_len);
-+      } else {
-+              /* Request to create an existing attribute? */
-+              error = -EEXIST;
-+              if (flags & XATTR_CREATE)
-+                      goto cleanup;
-+              if (!here->e_value_block && here->e_value_size) {
-+                      unsigned int size = le32_to_cpu(here->e_value_size);
-+
-+                      if (le16_to_cpu(here->e_value_offs) + size > 
-+                          sb->s_blocksize || size > sb->s_blocksize)
-+                              goto bad_block;
-+                      free += EXT2_XATTR_SIZE(size);
-+              }
-+      }
-+      free -= EXT2_XATTR_SIZE(value_len);
-+      error = -ENOSPC;
-+      if (free < 0)
-+              goto cleanup;
-+
-+      /* Here we know that we can set the new attribute. */
-+
-+      if (header) {
-+              if (header->h_refcount == cpu_to_le32(1)) {
-+                      ea_bdebug(bh, "modifying in-place");
-+                      ext2_xattr_cache_remove(bh);
-+              } else {
-+                      int offset;
-+
-+                      ea_bdebug(bh, "cloning");
-+                      header = kmalloc(bh->b_size, GFP_KERNEL);
-+                      error = -ENOMEM;
-+                      if (header == NULL)
-+                              goto cleanup;
-+                      memcpy(header, HDR(bh), bh->b_size);
-+                      header->h_refcount = cpu_to_le32(1);
-+                      offset = (char *)header - bh->b_data;
-+                      here = ENTRY((char *)here + offset);
-+                      last = ENTRY((char *)last + offset);
-+              }
-+      } else {
-+              /* Allocate a buffer where we construct the new block. */
-+              header = kmalloc(sb->s_blocksize, GFP_KERNEL);
-+              error = -ENOMEM;
-+              if (header == NULL)
-+                      goto cleanup;
-+              memset(header, 0, sb->s_blocksize);
-+              end = (char *)header + sb->s_blocksize;
-+              header->h_magic = cpu_to_le32(EXT2_XATTR_MAGIC);
-+              header->h_blocks = header->h_refcount = cpu_to_le32(1);
-+              last = here = ENTRY(header+1);
-+      }
-+
-+      if (not_found) {
-+              /* Insert the new name. */
-+              int size = EXT2_XATTR_LEN(name_len);
-+              int rest = (char *)last - (char *)here;
-+              memmove((char *)here + size, here, rest);
-+              memset(here, 0, size);
-+              here->e_name_index = name_index;
-+              here->e_name_len = name_len;
-+              memcpy(here->e_name, name, name_len);
-+      } else {
-+              /* Remove the old value. */
-+              if (!here->e_value_block && here->e_value_size) {
-+                      char *first_val = (char *)header + min_offs;
-+                      int offs = le16_to_cpu(here->e_value_offs);
-+                      char *val = (char *)header + offs;
-+                      size_t size = EXT2_XATTR_SIZE(
-+                              le32_to_cpu(here->e_value_size));
-+                      memmove(first_val + size, first_val, val - first_val);
-+                      memset(first_val, 0, size);
-+                      here->e_value_offs = 0;
-+                      min_offs += size;
-+
-+                      /* Adjust all value offsets. */
-+                      last = ENTRY(header+1);
-+                      while (!IS_LAST_ENTRY(last)) {
-+                              int o = le16_to_cpu(last->e_value_offs);
-+                              if (!last->e_value_block && o < offs)
-+                                      last->e_value_offs =
-+                                              cpu_to_le16(o + size);
-+                              last = EXT2_XATTR_NEXT(last);
-+                      }
-+              }
-+              if (value == NULL) {
-+                      /* Remove this attribute. */
-+                      if (EXT2_XATTR_NEXT(ENTRY(header+1)) == last) {
-+                              /* This block is now empty. */
-+                              error = ext2_xattr_set2(inode, bh, NULL);
-+                              goto cleanup;
-+                      } else {
-+                              /* Remove the old name. */
-+                              int size = EXT2_XATTR_LEN(name_len);
-+                              last = ENTRY((char *)last - size);
-+                              memmove(here, (char*)here + size,
-+                                      (char*)last - (char*)here);
-+                              memset(last, 0, size);
-+                      }
-+              }
-+      }
-+
-+      if (value != NULL) {
-+              /* Insert the new value. */
-+              here->e_value_size = cpu_to_le32(value_len);
-+              if (value_len) {
-+                      size_t size = EXT2_XATTR_SIZE(value_len);
-+                      char *val = (char *)header + min_offs - size;
-+                      here->e_value_offs =
-+                              cpu_to_le16((char *)val - (char *)header);
-+                      memset(val + size - EXT2_XATTR_PAD, 0,
-+                             EXT2_XATTR_PAD); /* Clear the pad bytes. */
-+                      memcpy(val, value, value_len);
-+              }
-+      }
-+      ext2_xattr_rehash(header, here);
-+
-+      error = ext2_xattr_set2(inode, bh, header);
-+
-+cleanup:
-+      brelse(bh);
-+      if (!(bh && header == HDR(bh)))
-+              kfree(header);
-+      up(&ext2_xattr_sem);
-+
-+      return error;
-+}
-+
-+/*
-+ * Second half of ext2_xattr_set(): Update the file system.
-+ */
-+static int
-+ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,
-+              struct ext2_xattr_header *header)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *new_bh = NULL;
-+      int error;
-+
-+      if (header) {
-+              new_bh = ext2_xattr_cache_find(inode, header);
-+              if (new_bh) {
-+                      /*
-+                       * We found an identical block in the cache.
-+                       * The old block will be released after updating
-+                       * the inode.
-+                       */
-+                      ea_bdebug(old_bh, "reusing block %ld",
-+                              new_bh->b_blocknr);
-+                      
-+                      error = -EDQUOT;
-+                      if (ext2_xattr_quota_alloc(inode, 1))
-+                              goto cleanup;
-+                      
-+                      HDR(new_bh)->h_refcount = cpu_to_le32(
-+                              le32_to_cpu(HDR(new_bh)->h_refcount) + 1);
-+                      ea_bdebug(new_bh, "refcount now=%d",
-+                              le32_to_cpu(HDR(new_bh)->h_refcount));
-+              } else if (old_bh && header == HDR(old_bh)) {
-+                      /* Keep this block. */
-+                      new_bh = old_bh;
-+                      ext2_xattr_cache_insert(new_bh);
-+              } else {
-+                      /* We need to allocate a new block */
-+                      int force = EXT2_I(inode)->i_file_acl != 0;
-+                      int block = ext2_xattr_new_block(inode, &error, force);
-+                      if (error)
-+                              goto cleanup;
-+                      ea_idebug(inode, "creating block %d", block);
-+
-+                      new_bh = sb_getblk(sb, block);
-+                      if (!new_bh) {
-+                              ext2_xattr_free_block(inode, block);
-+                              error = -EIO;
-+                              goto cleanup;
-+                      }
-+                      lock_buffer(new_bh);
-+                      memcpy(new_bh->b_data, header, new_bh->b_size);
-+                      mark_buffer_uptodate(new_bh, 1);
-+                      unlock_buffer(new_bh);
-+                      ext2_xattr_cache_insert(new_bh);
-+                      
-+                      ext2_xattr_update_super_block(sb);
-+              }
-+              mark_buffer_dirty(new_bh);
-+              if (IS_SYNC(inode)) {
-+                      ll_rw_block(WRITE, 1, &new_bh);
-+                      wait_on_buffer(new_bh); 
-+                      error = -EIO;
-+                      if (buffer_req(new_bh) && !buffer_uptodate(new_bh))
-+                              goto cleanup;
-+              }
-+      }
-+
-+      /* Update the inode. */
-+      EXT2_I(inode)->i_file_acl = new_bh ? new_bh->b_blocknr : 0;
-+      inode->i_ctime = CURRENT_TIME;
-+      if (IS_SYNC(inode)) {
-+              error = ext2_sync_inode (inode);
-+              if (error)
-+                      goto cleanup;
-+      } else
-+              mark_inode_dirty(inode);
-+
-+      error = 0;
-+      if (old_bh && old_bh != new_bh) {
-+              /*
-+               * If there was an old block, and we are not still using it,
-+               * we now release the old block.
-+              */
-+              unsigned int refcount = le32_to_cpu(HDR(old_bh)->h_refcount);
-+
-+              if (refcount == 1) {
-+                      /* Free the old block. */
-+                      ea_bdebug(old_bh, "freeing");
-+                      ext2_xattr_free_block(inode, old_bh->b_blocknr);
-+                      mark_buffer_clean(old_bh);
-+              } else {
-+                      /* Decrement the refcount only. */
-+                      refcount--;
-+                      HDR(old_bh)->h_refcount = cpu_to_le32(refcount);
-+                      ext2_xattr_quota_free(inode);
-+                      mark_buffer_dirty(old_bh);
-+                      ea_bdebug(old_bh, "refcount now=%d", refcount);
-+              }
-+      }
-+
-+cleanup:
-+      if (old_bh != new_bh)
-+              brelse(new_bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext2_xattr_delete_inode()
-+ *
-+ * Free extended attribute resources associated with this inode. This
-+ * is called immediately before an inode is freed.
-+ */
-+void
-+ext2_xattr_delete_inode(struct inode *inode)
-+{
-+      struct buffer_head *bh;
-+      unsigned int block = EXT2_I(inode)->i_file_acl;
-+
-+      if (!block)
-+              return;
-+      down(&ext2_xattr_sem);
-+
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh) {
-+              ext2_error(inode->i_sb, "ext2_xattr_delete_inode",
-+                      "inode %ld: block %d read error", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ea_bdebug(bh, "b_count=%d", atomic_read(&(bh->b_count)));
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+              ext2_error(inode->i_sb, "ext2_xattr_delete_inode",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ea_bdebug(bh, "refcount now=%d", le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+      if (HDR(bh)->h_refcount == cpu_to_le32(1)) {
-+              ext2_xattr_cache_remove(bh);
-+              ext2_xattr_free_block(inode, block);
-+              bforget(bh);
-+              bh = NULL;
-+      } else {
-+              HDR(bh)->h_refcount = cpu_to_le32(
-+                      le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+              mark_buffer_dirty(bh);
-+              if (IS_SYNC(inode)) {
-+                      ll_rw_block(WRITE, 1, &bh);
-+                      wait_on_buffer(bh);
-+              }
-+              ext2_xattr_quota_free(inode);
-+      }
-+      EXT2_I(inode)->i_file_acl = 0;
-+
-+cleanup:
-+      brelse(bh);
-+      up(&ext2_xattr_sem);
-+}
-+
-+/*
-+ * ext2_xattr_put_super()
-+ *
-+ * This is called when a file system is unmounted.
-+ */
-+void
-+ext2_xattr_put_super(struct super_block *sb)
-+{
-+#ifdef CONFIG_EXT2_FS_XATTR_SHARING
-+      mb_cache_shrink(ext2_xattr_cache, sb->s_dev);
-+#endif
-+}
-+
-+#ifdef CONFIG_EXT2_FS_XATTR_SHARING
-+
-+/*
-+ * ext2_xattr_cache_insert()
-+ *
-+ * Create a new entry in the extended attribute cache, and insert
-+ * it unless such an entry is already in the cache.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+static int
-+ext2_xattr_cache_insert(struct buffer_head *bh)
-+{
-+      __u32 hash = le32_to_cpu(HDR(bh)->h_hash);
-+      struct mb_cache_entry *ce;
-+      int error;
-+
-+      ce = mb_cache_entry_alloc(ext2_xattr_cache);
-+      if (!ce)
-+              return -ENOMEM;
-+      error = mb_cache_entry_insert(ce, bh->b_dev, bh->b_blocknr, &hash);
-+      if (error) {
-+              mb_cache_entry_free(ce);
-+              if (error == -EBUSY) {
-+                      ea_bdebug(bh, "already in cache (%d cache entries)",
-+                              atomic_read(&ext2_xattr_cache->c_entry_count));
-+                      error = 0;
-+              }
-+      } else {
-+              ea_bdebug(bh, "inserting [%x] (%d cache entries)", (int)hash,
-+                        atomic_read(&ext2_xattr_cache->c_entry_count));
-+              mb_cache_entry_release(ce);
-+      }
-+      return error;
-+}
-+
-+/*
-+ * ext2_xattr_cmp()
-+ *
-+ * Compare two extended attribute blocks for equality.
-+ *
-+ * Returns 0 if the blocks are equal, 1 if they differ, and
-+ * a negative error number on errors.
-+ */
-+static int
-+ext2_xattr_cmp(struct ext2_xattr_header *header1,
-+             struct ext2_xattr_header *header2)
-+{
-+      struct ext2_xattr_entry *entry1, *entry2;
-+
-+      entry1 = ENTRY(header1+1);
-+      entry2 = ENTRY(header2+1);
-+      while (!IS_LAST_ENTRY(entry1)) {
-+              if (IS_LAST_ENTRY(entry2))
-+                      return 1;
-+              if (entry1->e_hash != entry2->e_hash ||
-+                  entry1->e_name_len != entry2->e_name_len ||
-+                  entry1->e_value_size != entry2->e_value_size ||
-+                  memcmp(entry1->e_name, entry2->e_name, entry1->e_name_len))
-+                      return 1;
-+              if (entry1->e_value_block != 0 || entry2->e_value_block != 0)
-+                      return -EIO;
-+              if (memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
-+                         (char *)header2 + le16_to_cpu(entry2->e_value_offs),
-+                         le32_to_cpu(entry1->e_value_size)))
-+                      return 1;
-+
-+              entry1 = EXT2_XATTR_NEXT(entry1);
-+              entry2 = EXT2_XATTR_NEXT(entry2);
-+      }
-+      if (!IS_LAST_ENTRY(entry2))
-+              return 1;
-+      return 0;
-+}
-+
-+/*
-+ * ext2_xattr_cache_find()
-+ *
-+ * Find an identical extended attribute block.
-+ *
-+ * Returns a pointer to the block found, or NULL if such a block was
-+ * not found or an error occurred.
-+ */
-+static struct buffer_head *
-+ext2_xattr_cache_find(struct inode *inode, struct ext2_xattr_header *header)
-+{
-+      __u32 hash = le32_to_cpu(header->h_hash);
-+      struct mb_cache_entry *ce;
-+
-+      if (!header->h_hash)
-+              return NULL;  /* never share */
-+      ea_idebug(inode, "looking for cached blocks [%x]", (int)hash);
-+      ce = mb_cache_entry_find_first(ext2_xattr_cache, 0, inode->i_dev, hash);
-+      while (ce) {
-+              struct buffer_head *bh = sb_bread(inode->i_sb, ce->e_block);
-+
-+              if (!bh) {
-+                      ext2_error(inode->i_sb, "ext2_xattr_cache_find",
-+                              "inode %ld: block %ld read error",
-+                              inode->i_ino, ce->e_block);
-+              } else if (le32_to_cpu(HDR(bh)->h_refcount) >
-+                         EXT2_XATTR_REFCOUNT_MAX) {
-+                      ea_idebug(inode, "block %ld refcount %d>%d",ce->e_block,
-+                              le32_to_cpu(HDR(bh)->h_refcount),
-+                              EXT2_XATTR_REFCOUNT_MAX);
-+              } else if (!ext2_xattr_cmp(header, HDR(bh))) {
-+                      ea_bdebug(bh, "b_count=%d",atomic_read(&(bh->b_count)));
-+                      mb_cache_entry_release(ce);
-+                      return bh;
-+              }
-+              brelse(bh);
-+              ce = mb_cache_entry_find_next(ce, 0, inode->i_dev, hash);
-+      }
-+      return NULL;
-+}
-+
-+/*
-+ * ext2_xattr_cache_remove()
-+ *
-+ * Remove the cache entry of a block from the cache. Called when a
-+ * block becomes invalid.
-+ */
-+static void
-+ext2_xattr_cache_remove(struct buffer_head *bh)
-+{
-+      struct mb_cache_entry *ce;
-+
-+      ce = mb_cache_entry_get(ext2_xattr_cache, bh->b_dev, bh->b_blocknr);
-+      if (ce) {
-+              ea_bdebug(bh, "removing (%d cache entries remaining)",
-+                        atomic_read(&ext2_xattr_cache->c_entry_count)-1);
-+              mb_cache_entry_free(ce);
-+      } else 
-+              ea_bdebug(bh, "no cache entry");
-+}
-+
-+#define NAME_HASH_SHIFT 5
-+#define VALUE_HASH_SHIFT 16
-+
-+/*
-+ * ext2_xattr_hash_entry()
-+ *
-+ * Compute the hash of an extended attribute.
-+ */
-+static inline void ext2_xattr_hash_entry(struct ext2_xattr_header *header,
-+                                       struct ext2_xattr_entry *entry)
-+{
-+      __u32 hash = 0;
-+      char *name = entry->e_name;
-+      int n;
-+
-+      for (n=0; n < entry->e_name_len; n++) {
-+              hash = (hash << NAME_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - NAME_HASH_SHIFT)) ^
-+                     *name++;
-+      }
-+
-+      if (entry->e_value_block == 0 && entry->e_value_size != 0) {
-+              __u32 *value = (__u32 *)((char *)header +
-+                      le16_to_cpu(entry->e_value_offs));
-+              for (n = (le32_to_cpu(entry->e_value_size) +
-+                   EXT2_XATTR_ROUND) >> EXT2_XATTR_PAD_BITS; n; n--) {
-+                      hash = (hash << VALUE_HASH_SHIFT) ^
-+                             (hash >> (8*sizeof(hash) - VALUE_HASH_SHIFT)) ^
-+                             le32_to_cpu(*value++);
-+              }
-+      }
-+      entry->e_hash = cpu_to_le32(hash);
-+}
-+
-+#undef NAME_HASH_SHIFT
-+#undef VALUE_HASH_SHIFT
-+
-+#define BLOCK_HASH_SHIFT 16
-+
-+/*
-+ * ext2_xattr_rehash()
-+ *
-+ * Re-compute the extended attribute hash value after an entry has changed.
-+ */
-+static void ext2_xattr_rehash(struct ext2_xattr_header *header,
-+                            struct ext2_xattr_entry *entry)
-+{
-+      struct ext2_xattr_entry *here;
-+      __u32 hash = 0;
-+      
-+      ext2_xattr_hash_entry(header, entry);
-+      here = ENTRY(header+1);
-+      while (!IS_LAST_ENTRY(here)) {
-+              if (!here->e_hash) {
-+                      /* Block is not shared if an entry's hash value == 0 */
-+                      hash = 0;
-+                      break;
-+              }
-+              hash = (hash << BLOCK_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - BLOCK_HASH_SHIFT)) ^
-+                     le32_to_cpu(here->e_hash);
-+              here = EXT2_XATTR_NEXT(here);
-+      }
-+      header->h_hash = cpu_to_le32(hash);
-+}
-+
-+#undef BLOCK_HASH_SHIFT
-+
-+int __init
-+init_ext2_xattr(void)
-+{
-+      ext2_xattr_cache = mb_cache_create("ext2_xattr", NULL,
-+              sizeof(struct mb_cache_entry) +
-+              sizeof(struct mb_cache_entry_index), 1, 61);
-+      if (!ext2_xattr_cache)
-+              return -ENOMEM;
-+
-+      return 0;
-+}
-+
-+void
-+exit_ext2_xattr(void)
-+{
-+      mb_cache_destroy(ext2_xattr_cache);
-+}
-+
-+#else  /* CONFIG_EXT2_FS_XATTR_SHARING */
-+
-+int __init
-+init_ext2_xattr(void)
-+{
-+      return 0;
-+}
-+
-+void
-+exit_ext2_xattr(void)
-+{
-+}
-+
-+#endif  /* CONFIG_EXT2_FS_XATTR_SHARING */
---- /dev/null  2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-root/fs/ext2/xattr_user.c     2003-05-07 18:08:03.000000000 +0800
-@@ -0,0 +1,103 @@
-+/*
-+ * linux/fs/ext2/xattr_user.c
-+ * Handler for extended user attributes.
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/string.h>
-+#include <linux/fs.h>
-+#include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
-+
-+#ifdef CONFIG_EXT2_FS_POSIX_ACL
-+# include <linux/ext2_acl.h>
-+#endif
-+
-+#define XATTR_USER_PREFIX "user."
-+
-+static size_t
-+ext2_xattr_user_list(char *list, struct inode *inode,
-+                   const char *name, int name_len)
-+{
-+      const int prefix_len = sizeof(XATTR_USER_PREFIX)-1;
-+
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return 0;
-+
-+      if (list) {
-+              memcpy(list, XATTR_USER_PREFIX, prefix_len);
-+              memcpy(list+prefix_len, name, name_len);
-+              list[prefix_len + name_len] = '\0';
-+      }
-+      return prefix_len + name_len + 1;
-+}
-+
-+static int
-+ext2_xattr_user_get(struct inode *inode, const char *name,
-+                  void *buffer, size_t size)
-+{
-+      int error;
-+
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return -ENOTSUP;
-+#ifdef CONFIG_EXT2_FS_POSIX_ACL
-+      error = ext2_permission_locked(inode, MAY_READ);
-+#else
-+      error = permission(inode, MAY_READ);
-+#endif
-+      if (error)
-+              return error;
-+
-+      return ext2_xattr_get(inode, EXT2_XATTR_INDEX_USER, name,
-+                            buffer, size);
-+}
-+
-+static int
-+ext2_xattr_user_set(struct inode *inode, const char *name,
-+                  const void *value, size_t size, int flags)
-+{
-+      int error;
-+
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return -ENOTSUP;
-+      if ( !S_ISREG(inode->i_mode) &&
-+          (!S_ISDIR(inode->i_mode) || inode->i_mode & S_ISVTX))
-+              return -EPERM;
-+#ifdef CONFIG_EXT2_FS_POSIX_ACL
-+      error = ext2_permission_locked(inode, MAY_WRITE);
-+#else
-+      error = permission(inode, MAY_WRITE);
-+#endif
-+      if (error)
-+              return error;
-+
-+      return ext2_xattr_set(inode, EXT2_XATTR_INDEX_USER, name,
-+                            value, size, flags);
-+}
-+
-+struct ext2_xattr_handler ext2_xattr_user_handler = {
-+      prefix: XATTR_USER_PREFIX,
-+      list:   ext2_xattr_user_list,
-+      get:    ext2_xattr_user_get,
-+      set:    ext2_xattr_user_set,
-+};
-+
-+int __init
-+init_ext2_xattr_user(void)
-+{
-+      return ext2_xattr_register(EXT2_XATTR_INDEX_USER,
-+                                 &ext2_xattr_user_handler);
-+}
-+
-+void
-+exit_ext2_xattr_user(void)
-+{
-+      ext2_xattr_unregister(EXT2_XATTR_INDEX_USER,
-+                            &ext2_xattr_user_handler);
-+}
---- linux-2.4.20/fs/ext3/Makefile~linux-2.4.20-xattr-0.8.54    2003-05-05 19:01:02.000000000 +0800
-+++ linux-2.4.20-root/fs/ext3/Makefile 2003-05-07 18:10:33.000000000 +0800
-@@ -1,5 +1,5 @@
- #
--# Makefile for the linux ext2-filesystem routines.
-+# Makefile for the linux ext3-filesystem routines.
- #
- # Note! Dependencies are done automagically by 'make dep', which also
- # removes any old dependencies. DON'T put your own dependencies here
-@@ -9,10 +9,14 @@
- O_TARGET := ext3.o
--export-objs :=        super.o inode.o
-+export-objs := ext3-exports.o
- obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
--              ioctl.o namei.o super.o symlink.o hash.o
-+              ioctl.o namei.o super.o symlink.o hash.o ext3-exports.o
- obj-m    := $(O_TARGET)
-+export-objs += xattr.o
-+obj-$(CONFIG_EXT3_FS_XATTR) += xattr.o
-+obj-$(CONFIG_EXT3_FS_XATTR_USER) += xattr_user.o
-+
- include $(TOPDIR)/Rules.make
---- linux-2.4.20/fs/ext3/file.c~linux-2.4.20-xattr-0.8.54      2003-05-05 19:01:02.000000000 +0800
-+++ linux-2.4.20-root/fs/ext3/file.c   2003-05-07 18:08:03.000000000 +0800
-@@ -23,6 +23,7 @@
- #include <linux/locks.h>
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/ext3_jbd.h>
- #include <linux/smp_lock.h>
-@@ -126,5 +127,9 @@ struct file_operations ext3_file_operati
- struct inode_operations ext3_file_inode_operations = {
-       truncate:       ext3_truncate,          /* BKL held */
-       setattr:        ext3_setattr,           /* BKL held */
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
- };
---- linux-2.4.20/fs/ext3/ialloc.c~linux-2.4.20-xattr-0.8.54    2002-11-29 07:53:15.000000000 +0800
-+++ linux-2.4.20-root/fs/ext3/ialloc.c 2003-05-07 18:08:03.000000000 +0800
-@@ -17,6 +17,7 @@
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/stat.h>
- #include <linux/string.h>
- #include <linux/locks.h>
-@@ -216,6 +217,7 @@ void ext3_free_inode (handle_t *handle, 
-        * as writing the quota to disk may need the lock as well.
-        */
-       DQUOT_INIT(inode);
-+      ext3_xattr_delete_inode(handle, inode);
-       DQUOT_FREE_INODE(inode);
-       DQUOT_DROP(inode);
---- linux-2.4.20/fs/ext3/inode.c~linux-2.4.20-xattr-0.8.54     2002-11-29 07:53:15.000000000 +0800
-+++ linux-2.4.20-root/fs/ext3/inode.c  2003-05-07 18:08:03.000000000 +0800
-@@ -39,6 +39,18 @@
-  */
- #undef SEARCH_FROM_ZERO
-+/*
-+ * Test whether an inode is a fast symlink.
-+ */
-+static inline int ext3_inode_is_fast_symlink(struct inode *inode)
-+{
-+      int ea_blocks = inode->u.ext3_i.i_file_acl ?
-+              (inode->i_sb->s_blocksize >> 9) : 0;
-+
-+      return (S_ISLNK(inode->i_mode) &&
-+              inode->i_blocks - ea_blocks == 0);
-+}
-+
- /* The ext3 forget function must perform a revoke if we are freeing data
-  * which has been journaled.  Metadata (eg. indirect blocks) must be
-  * revoked in all cases. 
-@@ -48,7 +60,7 @@
-  * still needs to be revoked.
-  */
--static int ext3_forget(handle_t *handle, int is_metadata,
-+int ext3_forget(handle_t *handle, int is_metadata,
-                      struct inode *inode, struct buffer_head *bh,
-                      int blocknr)
- {
-@@ -164,9 +176,7 @@ void ext3_delete_inode (struct inode * i
- {
-       handle_t *handle;
-       
--      if (is_bad_inode(inode) ||
--          inode->i_ino == EXT3_ACL_IDX_INO ||
--          inode->i_ino == EXT3_ACL_DATA_INO)
-+      if (is_bad_inode(inode))
-               goto no_delete;
-       lock_kernel();
-@@ -1855,6 +1865,8 @@ void ext3_truncate(struct inode * inode)
-       if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
-           S_ISLNK(inode->i_mode)))
-               return;
-+      if (ext3_inode_is_fast_symlink(inode))
-+              return;
-       if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
-               return;
-@@ -2002,8 +2014,6 @@ int ext3_get_inode_loc (struct inode *in
-       struct ext3_group_desc * gdp;
-               
-       if ((inode->i_ino != EXT3_ROOT_INO &&
--              inode->i_ino != EXT3_ACL_IDX_INO &&
--              inode->i_ino != EXT3_ACL_DATA_INO &&
-               inode->i_ino != EXT3_JOURNAL_INO &&
-               inode->i_ino < EXT3_FIRST_INO(inode->i_sb)) ||
-               inode->i_ino > le32_to_cpu(
-@@ -2130,10 +2140,7 @@ void ext3_read_inode(struct inode * inod
-       brelse (iloc.bh);
--      if (inode->i_ino == EXT3_ACL_IDX_INO ||
--          inode->i_ino == EXT3_ACL_DATA_INO)
--              /* Nothing to do */ ;
--      else if (S_ISREG(inode->i_mode)) {
-+      if (S_ISREG(inode->i_mode)) {
-               inode->i_op = &ext3_file_inode_operations;
-               inode->i_fop = &ext3_file_operations;
-               inode->i_mapping->a_ops = &ext3_aops;
-@@ -2141,15 +2148,17 @@ void ext3_read_inode(struct inode * inod
-               inode->i_op = &ext3_dir_inode_operations;
-               inode->i_fop = &ext3_dir_operations;
-       } else if (S_ISLNK(inode->i_mode)) {
--              if (!inode->i_blocks)
-+              if (ext3_inode_is_fast_symlink(inode))
-                       inode->i_op = &ext3_fast_symlink_inode_operations;
-               else {
--                      inode->i_op = &page_symlink_inode_operations;
-+                      inode->i_op = &ext3_symlink_inode_operations;
-                       inode->i_mapping->a_ops = &ext3_aops;
-               }
--      } else 
-+      } else {
-+              inode->i_op = &ext3_special_inode_operations;
-               init_special_inode(inode, inode->i_mode,
-                                  le32_to_cpu(iloc.raw_inode->i_block[0]));
-+      }
-       /* inode->i_attr_flags = 0;                             unused */
-       if (inode->u.ext3_i.i_flags & EXT3_SYNC_FL) {
-               /* inode->i_attr_flags |= ATTR_FLAG_SYNCRONOUS; unused */
---- linux-2.4.20/fs/ext3/namei.c~linux-2.4.20-xattr-0.8.54     2003-05-05 19:01:05.000000000 +0800
-+++ linux-2.4.20-root/fs/ext3/namei.c  2003-05-07 18:08:03.000000000 +0800
-@@ -29,6 +29,7 @@
- #include <linux/sched.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/fcntl.h>
- #include <linux/stat.h>
- #include <linux/string.h>
-@@ -1611,7 +1612,7 @@ static int ext3_mkdir(struct inode * dir
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
--      inode = ext3_new_inode (handle, dir, S_IFDIR);
-+      inode = ext3_new_inode (handle, dir, S_IFDIR | mode);
-       err = PTR_ERR(inode);
-       if (IS_ERR(inode))
-               goto out_stop;
-@@ -1619,7 +1620,6 @@ static int ext3_mkdir(struct inode * dir
-       inode->i_op = &ext3_dir_inode_operations;
-       inode->i_fop = &ext3_dir_operations;
-       inode->i_size = EXT3_I(inode)->i_disksize = inode->i_sb->s_blocksize;
--      inode->i_blocks = 0;    
-       dir_block = ext3_bread (handle, inode, 0, 1, &err);
-       if (!dir_block) {
-               inode->i_nlink--; /* is this nlink == 0? */
-@@ -1646,9 +1646,6 @@ static int ext3_mkdir(struct inode * dir
-       BUFFER_TRACE(dir_block, "call ext3_journal_dirty_metadata");
-       ext3_journal_dirty_metadata(handle, dir_block);
-       brelse (dir_block);
--      inode->i_mode = S_IFDIR | mode;
--      if (dir->i_mode & S_ISGID)
--              inode->i_mode |= S_ISGID;
-       ext3_mark_inode_dirty(handle, inode);
-       err = ext3_add_entry (handle, dentry, inode);
-       if (err) {
-@@ -2017,7 +2014,7 @@ static int ext3_symlink (struct inode * 
-               goto out_stop;
-       if (l > sizeof (EXT3_I(inode)->i_data)) {
--              inode->i_op = &page_symlink_inode_operations;
-+              inode->i_op = &ext3_symlink_inode_operations;
-               inode->i_mapping->a_ops = &ext3_aops;
-               /*
-                * block_symlink() calls back into ext3_prepare/commit_write.
-@@ -2244,4 +2241,16 @@ struct inode_operations ext3_dir_inode_o
-       rmdir:          ext3_rmdir,             /* BKL held */
-       mknod:          ext3_mknod,             /* BKL held */
-       rename:         ext3_rename,            /* BKL held */
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
- };
-+
-+struct inode_operations ext3_special_inode_operations = {
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
-+};
-+
---- linux-2.4.20/fs/ext3/super.c~linux-2.4.20-xattr-0.8.54     2003-05-05 19:01:02.000000000 +0800
-+++ linux-2.4.20-root/fs/ext3/super.c  2003-05-07 18:08:39.000000000 +0800
-@@ -24,6 +24,7 @@
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/slab.h>
- #include <linux/init.h>
- #include <linux/locks.h>
-@@ -404,6 +405,7 @@ void ext3_put_super (struct super_block 
-       kdev_t j_dev = sbi->s_journal->j_dev;
-       int i;
-+      ext3_xattr_put_super(sb);
-       journal_destroy(sbi->s_journal);
-       if (!(sb->s_flags & MS_RDONLY)) {
-               EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
-@@ -499,6 +501,7 @@ static int parse_options (char * options
-                         int is_remount)
- {
-       unsigned long *mount_options = &sbi->s_mount_opt;
-+      
-       uid_t *resuid = &sbi->s_resuid;
-       gid_t *resgid = &sbi->s_resgid;
-       char * this_char;
-@@ -511,6 +514,13 @@ static int parse_options (char * options
-            this_char = strtok (NULL, ",")) {
-               if ((value = strchr (this_char, '=')) != NULL)
-                       *value++ = 0;
-+#ifdef CONFIG_EXT3_FS_XATTR_USER
-+              if (!strcmp (this_char, "user_xattr"))
-+                      set_opt (*mount_options, XATTR_USER);
-+              else if (!strcmp (this_char, "nouser_xattr"))
-+                      clear_opt (*mount_options, XATTR_USER);
-+              else
-+#endif
-               if (!strcmp (this_char, "bsddf"))
-                       clear_opt (*mount_options, MINIX_DF);
-               else if (!strcmp (this_char, "nouid32")) {
-@@ -928,6 +938,12 @@ struct super_block * ext3_read_super (st
-       sbi->s_mount_opt = 0;
-       sbi->s_resuid = EXT3_DEF_RESUID;
-       sbi->s_resgid = EXT3_DEF_RESGID;
-+
-+      /* Default extended attribute flags */
-+#ifdef CONFIG_EXT3_FS_XATTR_USER
-+      /* set_opt(sbi->s_mount_opt, XATTR_USER); */
-+#endif
-+
-       if (!parse_options ((char *) data, &sb_block, sbi, &journal_inum, 0)) {
-               sb->s_dev = 0;
-               goto out_fail;
-@@ -1767,17 +1783,29 @@ static DECLARE_FSTYPE_DEV(ext3_fs_type, 
- static int __init init_ext3_fs(void)
- {
--        return register_filesystem(&ext3_fs_type);
-+      int error = init_ext3_xattr();
-+      if (error)
-+              return error;
-+      error = init_ext3_xattr_user();
-+      if (error)
-+              goto fail;
-+      error = register_filesystem(&ext3_fs_type);
-+      if (!error)
-+              return 0;
-+      
-+      exit_ext3_xattr_user();
-+fail:
-+      exit_ext3_xattr();
-+      return error;
- }
- static void __exit exit_ext3_fs(void)
- {
-       unregister_filesystem(&ext3_fs_type);
-+      exit_ext3_xattr_user();
-+      exit_ext3_xattr();
- }
--EXPORT_SYMBOL(ext3_force_commit);
--EXPORT_SYMBOL(ext3_bread);
--
- MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
- MODULE_DESCRIPTION("Second Extended Filesystem with journaling extensions");
- MODULE_LICENSE("GPL");
---- linux-2.4.20/fs/ext3/symlink.c~linux-2.4.20-xattr-0.8.54   2001-11-10 06:25:04.000000000 +0800
-+++ linux-2.4.20-root/fs/ext3/symlink.c        2003-05-07 18:08:03.000000000 +0800
-@@ -20,6 +20,7 @@
- #include <linux/fs.h>
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
- static int ext3_readlink(struct dentry *dentry, char *buffer, int buflen)
- {
-@@ -33,7 +34,20 @@ static int ext3_follow_link(struct dentr
-       return vfs_follow_link(nd, s);
- }
-+struct inode_operations ext3_symlink_inode_operations = {
-+      readlink:       page_readlink,          /* BKL not held.  Don't need */
-+      follow_link:    page_follow_link,       /* BKL not held.  Don't need */
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
-+};
-+
- struct inode_operations ext3_fast_symlink_inode_operations = {
-       readlink:       ext3_readlink,          /* BKL not held.  Don't need */
-       follow_link:    ext3_follow_link,       /* BKL not held.  Don't need */
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
- };
---- /dev/null  2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-root/fs/ext3/xattr.c  2003-05-07 18:09:23.000000000 +0800
-@@ -0,0 +1,1225 @@
-+/*
-+ * linux/fs/ext3/xattr.c
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ *
-+ * Fix by Harrison Xing <harrison@mountainviewdata.com>.
-+ * Ext3 code with a lot of help from Eric Jarman <ejarman@acm.org>.
-+ * Extended attributes for symlinks and special files added per
-+ *  suggestion of Luka Renko <luka.renko@hermes.si>.
-+ */
-+
-+/*
-+ * Extended attributes are stored on disk blocks allocated outside of
-+ * any inode. The i_file_acl field is then made to point to this allocated
-+ * block. If all extended attributes of an inode are identical, these
-+ * inodes may share the same extended attribute block. Such situations
-+ * are automatically detected by keeping a cache of recent attribute block
-+ * numbers and hashes over the block's contents in memory.
-+ *
-+ *
-+ * Extended attribute block layout:
-+ *
-+ *   +------------------+
-+ *   | header           |
-+ *   | entry 1          | |
-+ *   | entry 2          | | growing downwards
-+ *   | entry 3          | v
-+ *   | four null bytes  |
-+ *   | . . .            |
-+ *   | value 1          | ^
-+ *   | value 3          | | growing upwards
-+ *   | value 2          | |
-+ *   +------------------+
-+ *
-+ * The block header is followed by multiple entry descriptors. These entry
-+ * descriptors are variable in size, and alligned to EXT3_XATTR_PAD
-+ * byte boundaries. The entry descriptors are sorted by attribute name,
-+ * so that two extended attribute blocks can be compared efficiently.
-+ *
-+ * Attribute values are aligned to the end of the block, stored in
-+ * no specific order. They are also padded to EXT3_XATTR_PAD byte
-+ * boundaries. No additional gaps are left between them.
-+ *
-+ * Locking strategy
-+ * ----------------
-+ * The VFS already holds the BKL and the inode->i_sem semaphore when any of
-+ * the xattr inode operations are called, so we are guaranteed that only one
-+ * processes accesses extended attributes of an inode at any time.
-+ *
-+ * For writing we also grab the ext3_xattr_sem semaphore. This ensures that
-+ * only a single process is modifying an extended attribute block, even
-+ * if the block is shared among inodes.
-+ *
-+ * Note for porting to 2.5
-+ * -----------------------
-+ * The BKL will no longer be held in the xattr inode operations.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/fs.h>
-+#include <linux/locks.h>
-+#include <linux/slab.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
-+#include <linux/mbcache.h>
-+#include <linux/quotaops.h>
-+#include <asm/semaphore.h>
-+#include <linux/compatmac.h>
-+
-+#define EXT3_EA_USER "user."
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+# define mark_buffer_dirty(bh) mark_buffer_dirty(bh, 1)
-+#endif
-+
-+#define HDR(bh) ((struct ext3_xattr_header *)((bh)->b_data))
-+#define ENTRY(ptr) ((struct ext3_xattr_entry *)(ptr))
-+#define FIRST_ENTRY(bh) ENTRY(HDR(bh)+1)
-+#define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
-+
-+#ifdef EXT3_XATTR_DEBUG
-+# define ea_idebug(inode, f...) do { \
-+              printk(KERN_DEBUG "inode %s:%ld: ", \
-+                      kdevname(inode->i_dev), inode->i_ino); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+# define ea_bdebug(bh, f...) do { \
-+              printk(KERN_DEBUG "block %s:%ld: ", \
-+                      kdevname(bh->b_dev), bh->b_blocknr); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+#else
-+# define ea_idebug(f...)
-+# define ea_bdebug(f...)
-+#endif
-+
-+static int ext3_xattr_set2(handle_t *, struct inode *, struct buffer_head *,
-+                         struct ext3_xattr_header *);
-+
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+
-+static int ext3_xattr_cache_insert(struct buffer_head *);
-+static struct buffer_head *ext3_xattr_cache_find(struct inode *,
-+                                               struct ext3_xattr_header *);
-+static void ext3_xattr_cache_remove(struct buffer_head *);
-+static void ext3_xattr_rehash(struct ext3_xattr_header *,
-+                            struct ext3_xattr_entry *);
-+
-+static struct mb_cache *ext3_xattr_cache;
-+
-+#else
-+# define ext3_xattr_cache_insert(bh) 0
-+# define ext3_xattr_cache_find(inode, header) NULL
-+# define ext3_xattr_cache_remove(bh) while(0) {}
-+# define ext3_xattr_rehash(header, entry) while(0) {}
-+#endif
-+
-+/*
-+ * If a file system does not share extended attributes among inodes,
-+ * we should not need the ext3_xattr_sem semaphore. However, the
-+ * filesystem may still contain shared blocks, so we always take
-+ * the lock.
-+ */
-+
-+DECLARE_MUTEX(ext3_xattr_sem);
-+
-+static inline int
-+ext3_xattr_new_block(handle_t *handle, struct inode *inode,
-+                   int * errp, int force)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      int goal = le32_to_cpu(EXT3_SB(sb)->s_es->s_first_data_block) +
-+              EXT3_I(inode)->i_block_group * EXT3_BLOCKS_PER_GROUP(sb);
-+
-+      /* How can we enforce the allocation? */
-+      int block = ext3_new_block(handle, inode, goal, 0, 0, errp);
-+#ifdef OLD_QUOTAS
-+      if (!*errp)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#endif
-+      return block;
-+}
-+
-+static inline int
-+ext3_xattr_quota_alloc(struct inode *inode, int force)
-+{
-+      /* How can we enforce the allocation? */
-+#ifdef OLD_QUOTAS
-+      int error = DQUOT_ALLOC_BLOCK(inode->i_sb, inode, 1);
-+      if (!error)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#else
-+      int error = DQUOT_ALLOC_BLOCK(inode, 1);
-+#endif
-+      return error;
-+}
-+
-+#ifdef OLD_QUOTAS
-+
-+static inline void
-+ext3_xattr_quota_free(struct inode *inode)
-+{
-+      DQUOT_FREE_BLOCK(inode->i_sb, inode, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+static inline void
-+ext3_xattr_free_block(handle_t *handle, struct inode * inode,
-+                    unsigned long block)
-+{
-+      ext3_free_blocks(handle, inode, block, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+#else
-+# define ext3_xattr_quota_free(inode) \
-+      DQUOT_FREE_BLOCK(inode, 1)
-+# define ext3_xattr_free_block(handle, inode, block) \
-+      ext3_free_blocks(handle, inode, block, 1)
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
-+
-+static inline struct buffer_head *
-+sb_bread(struct super_block *sb, int block)
-+{
-+      return bread(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+static inline struct buffer_head *
-+sb_getblk(struct super_block *sb, int block)
-+{
-+      return getblk(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+#endif
-+
-+struct ext3_xattr_handler *ext3_xattr_handlers[EXT3_XATTR_INDEX_MAX];
-+rwlock_t ext3_handler_lock = RW_LOCK_UNLOCKED;
-+
-+int
-+ext3_xattr_register(int name_index, struct ext3_xattr_handler *handler)
-+{
-+      int error = -EINVAL;
-+
-+      if (name_index > 0 && name_index <= EXT3_XATTR_INDEX_MAX) {
-+              write_lock(&ext3_handler_lock);
-+              if (!ext3_xattr_handlers[name_index-1]) {
-+                      ext3_xattr_handlers[name_index-1] = handler;
-+                      error = 0;
-+              }
-+              write_unlock(&ext3_handler_lock);
-+      }
-+      return error;
-+}
-+
-+void
-+ext3_xattr_unregister(int name_index, struct ext3_xattr_handler *handler)
-+{
-+      if (name_index > 0 || name_index <= EXT3_XATTR_INDEX_MAX) {
-+              write_lock(&ext3_handler_lock);
-+              ext3_xattr_handlers[name_index-1] = NULL;
-+              write_unlock(&ext3_handler_lock);
-+      }
-+}
-+
-+static inline const char *
-+strcmp_prefix(const char *a, const char *a_prefix)
-+{
-+      while (*a_prefix && *a == *a_prefix) {
-+              a++;
-+              a_prefix++;
-+      }
-+      return *a_prefix ? NULL : a;
-+}
-+
-+/*
-+ * Decode the extended attribute name, and translate it into
-+ * the name_index and name suffix.
-+ */
-+static inline struct ext3_xattr_handler *
-+ext3_xattr_resolve_name(const char **name)
-+{
-+      struct ext3_xattr_handler *handler = NULL;
-+      int i;
-+
-+      if (!*name)
-+              return NULL;
-+      read_lock(&ext3_handler_lock);
-+      for (i=0; i<EXT3_XATTR_INDEX_MAX; i++) {
-+              if (ext3_xattr_handlers[i]) {
-+                      const char *n = strcmp_prefix(*name,
-+                              ext3_xattr_handlers[i]->prefix);
-+                      if (n) {
-+                              handler = ext3_xattr_handlers[i];
-+                              *name = n;
-+                              break;
-+                      }
-+              }
-+      }
-+      read_unlock(&ext3_handler_lock);
-+      return handler;
-+}
-+
-+static inline struct ext3_xattr_handler *
-+ext3_xattr_handler(int name_index)
-+{
-+      struct ext3_xattr_handler *handler = NULL;
-+      if (name_index > 0 && name_index <= EXT3_XATTR_INDEX_MAX) {
-+              read_lock(&ext3_handler_lock);
-+              handler = ext3_xattr_handlers[name_index-1];
-+              read_unlock(&ext3_handler_lock);
-+      }
-+      return handler;
-+}
-+
-+/*
-+ * Inode operation getxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext3_getxattr(struct dentry *dentry, const char *name,
-+            void *buffer, size_t size)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->get(inode, name, buffer, size);
-+}
-+
-+/*
-+ * Inode operation listxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext3_listxattr(struct dentry *dentry, char *buffer, size_t size)
-+{
-+      return ext3_xattr_list(dentry->d_inode, buffer, size);
-+}
-+
-+/*
-+ * Inode operation setxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext3_setxattr(struct dentry *dentry, const char *name,
-+            const void *value, size_t size, int flags)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      if (size == 0)
-+              value = "";  /* empty EA, do not remove */
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, value, size, flags);
-+}
-+
-+/*
-+ * Inode operation removexattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext3_removexattr(struct dentry *dentry, const char *name)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, NULL, 0, XATTR_REPLACE);
-+}
-+
-+/*
-+ * ext3_xattr_get()
-+ *
-+ * Copy an extended attribute into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext3_xattr_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_entry *entry;
-+      unsigned int block, size;
-+      char *end;
-+      int name_len, error;
-+
-+      ea_idebug(inode, "name=%d.%s, buffer=%p, buffer_size=%ld",
-+                name_index, name, buffer, (long)buffer_size);
-+
-+      if (name == NULL)
-+              return -EINVAL;
-+      if (!EXT3_I(inode)->i_file_acl)
-+              return -ENOATTR;
-+      block = EXT3_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext3_error(inode->i_sb, "ext3_xattr_get",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* find named attribute */
-+      name_len = strlen(name);
-+
-+      error = -ERANGE;
-+      if (name_len > 255)
-+              goto cleanup;
-+      entry = FIRST_ENTRY(bh);
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              if (name_index == entry->e_name_index &&
-+                  name_len == entry->e_name_len &&
-+                  memcmp(name, entry->e_name, name_len) == 0)
-+                      goto found;
-+              entry = next;
-+      }
-+      /* Check the remaining name entries */
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              entry = next;
-+      }
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      error = -ENOATTR;
-+      goto cleanup;
-+found:
-+      /* check the buffer size */
-+      if (entry->e_value_block != 0)
-+              goto bad_block;
-+      size = le32_to_cpu(entry->e_value_size);
-+      if (size > inode->i_sb->s_blocksize ||
-+          le16_to_cpu(entry->e_value_offs) + size > inode->i_sb->s_blocksize)
-+              goto bad_block;
-+
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (buffer) {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+              /* return value of attribute */
-+              memcpy(buffer, bh->b_data + le16_to_cpu(entry->e_value_offs),
-+                      size);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_list()
-+ *
-+ * Copy a list of attribute names into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext3_xattr_list(struct inode *inode, char *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_entry *entry;
-+      unsigned int block, size = 0;
-+      char *buf, *end;
-+      int error;
-+
-+      ea_idebug(inode, "buffer=%p, buffer_size=%ld",
-+                buffer, (long)buffer_size);
-+
-+      if (!EXT3_I(inode)->i_file_acl)
-+              return 0;
-+      block = EXT3_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext3_error(inode->i_sb, "ext3_xattr_list",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* compute the size required for the list of attribute names */
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT3_XATTR_NEXT(entry)) {
-+              struct ext3_xattr_handler *handler;
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+
-+              handler = ext3_xattr_handler(entry->e_name_index);
-+              if (handler)
-+                      size += handler->list(NULL, inode, entry->e_name,
-+                                            entry->e_name_len);
-+      }
-+
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (!buffer) {
-+              error = size;
-+              goto cleanup;
-+      } else {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+      }
-+
-+      /* list the attribute names */
-+      buf = buffer;
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT3_XATTR_NEXT(entry)) {
-+              struct ext3_xattr_handler *handler;
-+
-+              handler = ext3_xattr_handler(entry->e_name_index);
-+              if (handler)
-+                      buf += handler->list(buf, inode, entry->e_name,
-+                                           entry->e_name_len);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * If the EXT3_FEATURE_COMPAT_EXT_ATTR feature of this file system is
-+ * not set, set it.
-+ */
-+static void ext3_xattr_update_super_block(handle_t *handle,
-+                                        struct super_block *sb)
-+{
-+      if (EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_EXT_ATTR))
-+              return;
-+
-+      lock_super(sb);
-+      ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+      EXT3_SB(sb)->s_feature_compat |= EXT3_FEATURE_COMPAT_EXT_ATTR;
-+#endif
-+      EXT3_SB(sb)->s_es->s_feature_compat |=
-+              cpu_to_le32(EXT3_FEATURE_COMPAT_EXT_ATTR);
-+      sb->s_dirt = 1;
-+      ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-+      unlock_super(sb);
-+}
-+
-+/*
-+ * ext3_xattr_set()
-+ *
-+ * Create, replace or remove an extended attribute for this inode. Buffer
-+ * is NULL to remove an existing extended attribute, and non-NULL to
-+ * either replace an existing extended attribute, or create a new extended
-+ * attribute. The flags XATTR_REPLACE and XATTR_CREATE
-+ * specify that an extended attribute must exist and must not exist
-+ * previous to the call, respectively.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+int
-+ext3_xattr_set(handle_t *handle, struct inode *inode, int name_index,
-+             const char *name, const void *value, size_t value_len, int flags)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_header *header = NULL;
-+      struct ext3_xattr_entry *here, *last;
-+      unsigned int name_len;
-+      int block = EXT3_I(inode)->i_file_acl;
-+      int min_offs = sb->s_blocksize, not_found = 1, free, error;
-+      char *end;
-+      
-+      /*
-+       * header -- Points either into bh, or to a temporarily
-+       *           allocated buffer.
-+       * here -- The named entry found, or the place for inserting, within
-+       *         the block pointed to by header.
-+       * last -- Points right after the last named entry within the block
-+       *         pointed to by header.
-+       * min_offs -- The offset of the first value (values are aligned
-+       *             towards the end of the block).
-+       * end -- Points right after the block pointed to by header.
-+       */
-+      
-+      ea_idebug(inode, "name=%d.%s, value=%p, value_len=%ld",
-+                name_index, name, value, (long)value_len);
-+
-+      if (IS_RDONLY(inode))
-+              return -EROFS;
-+      if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
-+              return -EPERM;
-+      if (value == NULL)
-+              value_len = 0;
-+      if (name == NULL)
-+              return -EINVAL;
-+      name_len = strlen(name);
-+      if (name_len > 255 || value_len > sb->s_blocksize)
-+              return -ERANGE;
-+      down(&ext3_xattr_sem);
-+
-+      if (block) {
-+              /* The inode already has an extended attribute block. */
-+              bh = sb_bread(sb, block);
-+              error = -EIO;
-+              if (!bh)
-+                      goto cleanup;
-+              ea_bdebug(bh, "b_count=%d, refcount=%d",
-+                      atomic_read(&(bh->b_count)),
-+                      le32_to_cpu(HDR(bh)->h_refcount));
-+              header = HDR(bh);
-+              end = bh->b_data + bh->b_size;
-+              if (header->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+                  header->h_blocks != cpu_to_le32(1)) {
-+bad_block:            ext3_error(sb, "ext3_xattr_set",
-+                              "inode %ld: bad block %d", inode->i_ino, block);
-+                      error = -EIO;
-+                      goto cleanup;
-+              }
-+              /* Find the named attribute. */
-+              here = FIRST_ENTRY(bh);
-+              while (!IS_LAST_ENTRY(here)) {
-+                      struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(here);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!here->e_value_block && here->e_value_size) {
-+                              int offs = le16_to_cpu(here->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      not_found = name_index - here->e_name_index;
-+                      if (!not_found)
-+                              not_found = name_len - here->e_name_len;
-+                      if (!not_found)
-+                              not_found = memcmp(name, here->e_name,name_len);
-+                      if (not_found <= 0)
-+                              break;
-+                      here = next;
-+              }
-+              last = here;
-+              /* We still need to compute min_offs and last. */
-+              while (!IS_LAST_ENTRY(last)) {
-+                      struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(last);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!last->e_value_block && last->e_value_size) {
-+                              int offs = le16_to_cpu(last->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      last = next;
-+              }
-+
-+              /* Check whether we have enough space left. */
-+              free = min_offs - ((char*)last - (char*)header) - sizeof(__u32);
-+      } else {
-+              /* We will use a new extended attribute block. */
-+              free = sb->s_blocksize -
-+                      sizeof(struct ext3_xattr_header) - sizeof(__u32);
-+              here = last = NULL;  /* avoid gcc uninitialized warning. */
-+      }
-+
-+      if (not_found) {
-+              /* Request to remove a nonexistent attribute? */
-+              error = -ENOATTR;
-+              if (flags & XATTR_REPLACE)
-+                      goto cleanup;
-+              error = 0;
-+              if (value == NULL)
-+                      goto cleanup;
-+              else
-+                      free -= EXT3_XATTR_LEN(name_len);
-+      } else {
-+              /* Request to create an existing attribute? */
-+              error = -EEXIST;
-+              if (flags & XATTR_CREATE)
-+                      goto cleanup;
-+              if (!here->e_value_block && here->e_value_size) {
-+                      unsigned int size = le32_to_cpu(here->e_value_size);
-+
-+                      if (le16_to_cpu(here->e_value_offs) + size > 
-+                          sb->s_blocksize || size > sb->s_blocksize)
-+                              goto bad_block;
-+                      free += EXT3_XATTR_SIZE(size);
-+              }
-+      }
-+      free -= EXT3_XATTR_SIZE(value_len);
-+      error = -ENOSPC;
-+      if (free < 0)
-+              goto cleanup;
-+
-+      /* Here we know that we can set the new attribute. */
-+
-+      if (header) {
-+              if (header->h_refcount == cpu_to_le32(1)) {
-+                      ea_bdebug(bh, "modifying in-place");
-+                      ext3_xattr_cache_remove(bh);
-+                      error = ext3_journal_get_write_access(handle, bh);
-+                      if (error)
-+                              goto cleanup;
-+              } else {
-+                      int offset;
-+
-+                      ea_bdebug(bh, "cloning");
-+                      header = kmalloc(bh->b_size, GFP_KERNEL);
-+                      error = -ENOMEM;
-+                      if (header == NULL)
-+                              goto cleanup;
-+                      memcpy(header, HDR(bh), bh->b_size);
-+                      header->h_refcount = cpu_to_le32(1);
-+                      offset = (char *)header - bh->b_data;
-+                      here = ENTRY((char *)here + offset);
-+                      last = ENTRY((char *)last + offset);
-+              }
-+      } else {
-+              /* Allocate a buffer where we construct the new block. */
-+              header = kmalloc(sb->s_blocksize, GFP_KERNEL);
-+              error = -ENOMEM;
-+              if (header == NULL)
-+                      goto cleanup;
-+              memset(header, 0, sb->s_blocksize);
-+              end = (char *)header + sb->s_blocksize;
-+              header->h_magic = cpu_to_le32(EXT3_XATTR_MAGIC);
-+              header->h_blocks = header->h_refcount = cpu_to_le32(1);
-+              last = here = ENTRY(header+1);
-+      }
-+
-+      if (not_found) {
-+              /* Insert the new name. */
-+              int size = EXT3_XATTR_LEN(name_len);
-+              int rest = (char *)last - (char *)here;
-+              memmove((char *)here + size, here, rest);
-+              memset(here, 0, size);
-+              here->e_name_index = name_index;
-+              here->e_name_len = name_len;
-+              memcpy(here->e_name, name, name_len);
-+      } else {
-+              /* Remove the old value. */
-+              if (!here->e_value_block && here->e_value_size) {
-+                      char *first_val = (char *)header + min_offs;
-+                      int offs = le16_to_cpu(here->e_value_offs);
-+                      char *val = (char *)header + offs;
-+                      size_t size = EXT3_XATTR_SIZE(
-+                              le32_to_cpu(here->e_value_size));
-+                      memmove(first_val + size, first_val, val - first_val);
-+                      memset(first_val, 0, size);
-+                      here->e_value_offs = 0;
-+                      min_offs += size;
-+
-+                      /* Adjust all value offsets. */
-+                      last = ENTRY(header+1);
-+                      while (!IS_LAST_ENTRY(last)) {
-+                              int o = le16_to_cpu(last->e_value_offs);
-+                              if (!last->e_value_block && o < offs)
-+                                      last->e_value_offs =
-+                                              cpu_to_le16(o + size);
-+                              last = EXT3_XATTR_NEXT(last);
-+                      }
-+              }
-+              if (value == NULL) {
-+                      /* Remove this attribute. */
-+                      if (EXT3_XATTR_NEXT(ENTRY(header+1)) == last) {
-+                              /* This block is now empty. */
-+                              error = ext3_xattr_set2(handle, inode, bh,NULL);
-+                              goto cleanup;
-+                      } else {
-+                              /* Remove the old name. */
-+                              int size = EXT3_XATTR_LEN(name_len);
-+                              last = ENTRY((char *)last - size);
-+                              memmove(here, (char*)here + size,
-+                                      (char*)last - (char*)here);
-+                              memset(last, 0, size);
-+                      }
-+              }
-+      }
-+
-+      if (value != NULL) {
-+              /* Insert the new value. */
-+              here->e_value_size = cpu_to_le32(value_len);
-+              if (value_len) {
-+                      size_t size = EXT3_XATTR_SIZE(value_len);
-+                      char *val = (char *)header + min_offs - size;
-+                      here->e_value_offs =
-+                              cpu_to_le16((char *)val - (char *)header);
-+                      memset(val + size - EXT3_XATTR_PAD, 0,
-+                             EXT3_XATTR_PAD); /* Clear the pad bytes. */
-+                      memcpy(val, value, value_len);
-+              }
-+      }
-+      ext3_xattr_rehash(header, here);
-+
-+      error = ext3_xattr_set2(handle, inode, bh, header);
-+
-+cleanup:
-+      brelse(bh);
-+      if (!(bh && header == HDR(bh)))
-+              kfree(header);
-+      up(&ext3_xattr_sem);
-+
-+      return error;
-+}
-+
-+/*
-+ * Second half of ext3_xattr_set(): Update the file system.
-+ */
-+static int
-+ext3_xattr_set2(handle_t *handle, struct inode *inode,
-+              struct buffer_head *old_bh, struct ext3_xattr_header *header)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *new_bh = NULL;
-+      int error;
-+
-+      if (header) {
-+              new_bh = ext3_xattr_cache_find(inode, header);
-+              if (new_bh) {
-+                      /*
-+                       * We found an identical block in the cache.
-+                       * The old block will be released after updating
-+                       * the inode.
-+                       */
-+                      ea_bdebug(old_bh, "reusing block %ld",
-+                              new_bh->b_blocknr);
-+                      
-+                      error = -EDQUOT;
-+                      if (ext3_xattr_quota_alloc(inode, 1))
-+                              goto cleanup;
-+                      
-+                      error = ext3_journal_get_write_access(handle, new_bh);
-+                      if (error)
-+                              goto cleanup;
-+                      HDR(new_bh)->h_refcount = cpu_to_le32(
-+                              le32_to_cpu(HDR(new_bh)->h_refcount) + 1);
-+                      ea_bdebug(new_bh, "refcount now=%d",
-+                              le32_to_cpu(HDR(new_bh)->h_refcount));
-+              } else if (old_bh && header == HDR(old_bh)) {
-+                      /* Keep this block. */
-+                      new_bh = old_bh;
-+                      ext3_xattr_cache_insert(new_bh);
-+              } else {
-+                      /* We need to allocate a new block */
-+                      int force = EXT3_I(inode)->i_file_acl != 0;
-+                      int block = ext3_xattr_new_block(handle, inode,
-+                                                       &error, force);
-+                      if (error)
-+                              goto cleanup;
-+                      ea_idebug(inode, "creating block %d", block);
-+
-+                      new_bh = sb_getblk(sb, block);
-+                      if (!new_bh) {
-+getblk_failed:                        ext3_xattr_free_block(handle, inode, block);
-+                              error = -EIO;
-+                              goto cleanup;
-+                      }
-+                      lock_buffer(new_bh);
-+                      error = ext3_journal_get_create_access(handle, new_bh);
-+                      if (error) {
-+                              unlock_buffer(new_bh);
-+                              goto getblk_failed;
-+                      }
-+                      memcpy(new_bh->b_data, header, new_bh->b_size);
-+                      mark_buffer_uptodate(new_bh, 1);
-+                      unlock_buffer(new_bh);
-+                      ext3_xattr_cache_insert(new_bh);
-+                      
-+                      ext3_xattr_update_super_block(handle, sb);
-+              }
-+              error = ext3_journal_dirty_metadata(handle, new_bh);
-+              if (error)
-+                      goto cleanup;
-+      }
-+
-+      /* Update the inode. */
-+      EXT3_I(inode)->i_file_acl = new_bh ? new_bh->b_blocknr : 0;
-+      inode->i_ctime = CURRENT_TIME;
-+      ext3_mark_inode_dirty(handle, inode);
-+      if (IS_SYNC(inode))
-+              handle->h_sync = 1;
-+
-+      error = 0;
-+      if (old_bh && old_bh != new_bh) {
-+              /*
-+               * If there was an old block, and we are not still using it,
-+               * we now release the old block.
-+              */
-+              unsigned int refcount = le32_to_cpu(HDR(old_bh)->h_refcount);
-+
-+              error = ext3_journal_get_write_access(handle, old_bh);
-+              if (error)
-+                      goto cleanup;
-+              if (refcount == 1) {
-+                      /* Free the old block. */
-+                      ea_bdebug(old_bh, "freeing");
-+                      ext3_xattr_free_block(handle, inode, old_bh->b_blocknr);
-+
-+                      /* ext3_forget() calls bforget() for us, but we
-+                         let our caller release old_bh, so we need to
-+                         duplicate the handle before. */
-+                      get_bh(old_bh);
-+                      ext3_forget(handle, 1, inode, old_bh,old_bh->b_blocknr);
-+              } else {
-+                      /* Decrement the refcount only. */
-+                      refcount--;
-+                      HDR(old_bh)->h_refcount = cpu_to_le32(refcount);
-+                      ext3_xattr_quota_free(inode);
-+                      ext3_journal_dirty_metadata(handle, old_bh);
-+                      ea_bdebug(old_bh, "refcount now=%d", refcount);
-+              }
-+      }
-+
-+cleanup:
-+      if (old_bh != new_bh)
-+              brelse(new_bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_delete_inode()
-+ *
-+ * Free extended attribute resources associated with this inode. This
-+ * is called immediately before an inode is freed.
-+ */
-+void
-+ext3_xattr_delete_inode(handle_t *handle, struct inode *inode)
-+{
-+      struct buffer_head *bh;
-+      unsigned int block = EXT3_I(inode)->i_file_acl;
-+
-+      if (!block)
-+              return;
-+      down(&ext3_xattr_sem);
-+
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh) {
-+              ext3_error(inode->i_sb, "ext3_xattr_delete_inode",
-+                      "inode %ld: block %d read error", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ea_bdebug(bh, "b_count=%d", atomic_read(&(bh->b_count)));
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+              ext3_error(inode->i_sb, "ext3_xattr_delete_inode",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ext3_journal_get_write_access(handle, bh);
-+      ea_bdebug(bh, "refcount now=%d", le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+      if (HDR(bh)->h_refcount == cpu_to_le32(1)) {
-+              ext3_xattr_cache_remove(bh);
-+              ext3_xattr_free_block(handle, inode, block);
-+              ext3_forget(handle, 1, inode, bh, block);
-+              bh = NULL;
-+      } else {
-+              HDR(bh)->h_refcount = cpu_to_le32(
-+                      le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+              ext3_journal_dirty_metadata(handle, bh);
-+              if (IS_SYNC(inode))
-+                      handle->h_sync = 1;
-+              ext3_xattr_quota_free(inode);
-+      }
-+      EXT3_I(inode)->i_file_acl = 0;
-+
-+cleanup:
-+      brelse(bh);
-+      up(&ext3_xattr_sem);
-+}
-+
-+/*
-+ * ext3_xattr_put_super()
-+ *
-+ * This is called when a file system is unmounted.
-+ */
-+void
-+ext3_xattr_put_super(struct super_block *sb)
-+{
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+      mb_cache_shrink(ext3_xattr_cache, sb->s_dev);
-+#endif
-+}
-+
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+
-+/*
-+ * ext3_xattr_cache_insert()
-+ *
-+ * Create a new entry in the extended attribute cache, and insert
-+ * it unless such an entry is already in the cache.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+static int
-+ext3_xattr_cache_insert(struct buffer_head *bh)
-+{
-+      __u32 hash = le32_to_cpu(HDR(bh)->h_hash);
-+      struct mb_cache_entry *ce;
-+      int error;
-+
-+      ce = mb_cache_entry_alloc(ext3_xattr_cache);
-+      if (!ce)
-+              return -ENOMEM;
-+      error = mb_cache_entry_insert(ce, bh->b_dev, bh->b_blocknr, &hash);
-+      if (error) {
-+              mb_cache_entry_free(ce);
-+              if (error == -EBUSY) {
-+                      ea_bdebug(bh, "already in cache (%d cache entries)",
-+                              atomic_read(&ext3_xattr_cache->c_entry_count));
-+                      error = 0;
-+              }
-+      } else {
-+              ea_bdebug(bh, "inserting [%x] (%d cache entries)", (int)hash,
-+                        atomic_read(&ext3_xattr_cache->c_entry_count));
-+              mb_cache_entry_release(ce);
-+      }
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_cmp()
-+ *
-+ * Compare two extended attribute blocks for equality.
-+ *
-+ * Returns 0 if the blocks are equal, 1 if they differ, and
-+ * a negative error number on errors.
-+ */
-+static int
-+ext3_xattr_cmp(struct ext3_xattr_header *header1,
-+             struct ext3_xattr_header *header2)
-+{
-+      struct ext3_xattr_entry *entry1, *entry2;
-+
-+      entry1 = ENTRY(header1+1);
-+      entry2 = ENTRY(header2+1);
-+      while (!IS_LAST_ENTRY(entry1)) {
-+              if (IS_LAST_ENTRY(entry2))
-+                      return 1;
-+              if (entry1->e_hash != entry2->e_hash ||
-+                  entry1->e_name_len != entry2->e_name_len ||
-+                  entry1->e_value_size != entry2->e_value_size ||
-+                  memcmp(entry1->e_name, entry2->e_name, entry1->e_name_len))
-+                      return 1;
-+              if (entry1->e_value_block != 0 || entry2->e_value_block != 0)
-+                      return -EIO;
-+              if (memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
-+                         (char *)header2 + le16_to_cpu(entry2->e_value_offs),
-+                         le32_to_cpu(entry1->e_value_size)))
-+                      return 1;
-+
-+              entry1 = EXT3_XATTR_NEXT(entry1);
-+              entry2 = EXT3_XATTR_NEXT(entry2);
-+      }
-+      if (!IS_LAST_ENTRY(entry2))
-+              return 1;
-+      return 0;
-+}
-+
-+/*
-+ * ext3_xattr_cache_find()
-+ *
-+ * Find an identical extended attribute block.
-+ *
-+ * Returns a pointer to the block found, or NULL if such a block was
-+ * not found or an error occurred.
-+ */
-+static struct buffer_head *
-+ext3_xattr_cache_find(struct inode *inode, struct ext3_xattr_header *header)
-+{
-+      __u32 hash = le32_to_cpu(header->h_hash);
-+      struct mb_cache_entry *ce;
-+
-+      if (!header->h_hash)
-+              return NULL;  /* never share */
-+      ea_idebug(inode, "looking for cached blocks [%x]", (int)hash);
-+      ce = mb_cache_entry_find_first(ext3_xattr_cache, 0, inode->i_dev, hash);
-+      while (ce) {
-+              struct buffer_head *bh = sb_bread(inode->i_sb, ce->e_block);
-+
-+              if (!bh) {
-+                      ext3_error(inode->i_sb, "ext3_xattr_cache_find",
-+                              "inode %ld: block %ld read error",
-+                              inode->i_ino, ce->e_block);
-+              } else if (le32_to_cpu(HDR(bh)->h_refcount) >
-+                         EXT3_XATTR_REFCOUNT_MAX) {
-+                      ea_idebug(inode, "block %ld refcount %d>%d",ce->e_block,
-+                              le32_to_cpu(HDR(bh)->h_refcount),
-+                              EXT3_XATTR_REFCOUNT_MAX);
-+              } else if (!ext3_xattr_cmp(header, HDR(bh))) {
-+                      ea_bdebug(bh, "b_count=%d",atomic_read(&(bh->b_count)));
-+                      mb_cache_entry_release(ce);
-+                      return bh;
-+              }
-+              brelse(bh);
-+              ce = mb_cache_entry_find_next(ce, 0, inode->i_dev, hash);
-+      }
-+      return NULL;
-+}
-+
-+/*
-+ * ext3_xattr_cache_remove()
-+ *
-+ * Remove the cache entry of a block from the cache. Called when a
-+ * block becomes invalid.
-+ */
-+static void
-+ext3_xattr_cache_remove(struct buffer_head *bh)
-+{
-+      struct mb_cache_entry *ce;
-+
-+      ce = mb_cache_entry_get(ext3_xattr_cache, bh->b_dev, bh->b_blocknr);
-+      if (ce) {
-+              ea_bdebug(bh, "removing (%d cache entries remaining)",
-+                        atomic_read(&ext3_xattr_cache->c_entry_count)-1);
-+              mb_cache_entry_free(ce);
-+      } else 
-+              ea_bdebug(bh, "no cache entry");
-+}
-+
-+#define NAME_HASH_SHIFT 5
-+#define VALUE_HASH_SHIFT 16
-+
-+/*
-+ * ext3_xattr_hash_entry()
-+ *
-+ * Compute the hash of an extended attribute.
-+ */
-+static inline void ext3_xattr_hash_entry(struct ext3_xattr_header *header,
-+                                       struct ext3_xattr_entry *entry)
-+{
-+      __u32 hash = 0;
-+      char *name = entry->e_name;
-+      int n;
-+
-+      for (n=0; n < entry->e_name_len; n++) {
-+              hash = (hash << NAME_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - NAME_HASH_SHIFT)) ^
-+                     *name++;
-+      }
-+
-+      if (entry->e_value_block == 0 && entry->e_value_size != 0) {
-+              __u32 *value = (__u32 *)((char *)header +
-+                      le16_to_cpu(entry->e_value_offs));
-+              for (n = (le32_to_cpu(entry->e_value_size) +
-+                   EXT3_XATTR_ROUND) >> EXT3_XATTR_PAD_BITS; n; n--) {
-+                      hash = (hash << VALUE_HASH_SHIFT) ^
-+                             (hash >> (8*sizeof(hash) - VALUE_HASH_SHIFT)) ^
-+                             le32_to_cpu(*value++);
-+              }
-+      }
-+      entry->e_hash = cpu_to_le32(hash);
-+}
-+
-+#undef NAME_HASH_SHIFT
-+#undef VALUE_HASH_SHIFT
-+
-+#define BLOCK_HASH_SHIFT 16
-+
-+/*
-+ * ext3_xattr_rehash()
-+ *
-+ * Re-compute the extended attribute hash value after an entry has changed.
-+ */
-+static void ext3_xattr_rehash(struct ext3_xattr_header *header,
-+                            struct ext3_xattr_entry *entry)
-+{
-+      struct ext3_xattr_entry *here;
-+      __u32 hash = 0;
-+      
-+      ext3_xattr_hash_entry(header, entry);
-+      here = ENTRY(header+1);
-+      while (!IS_LAST_ENTRY(here)) {
-+              if (!here->e_hash) {
-+                      /* Block is not shared if an entry's hash value == 0 */
-+                      hash = 0;
-+                      break;
-+              }
-+              hash = (hash << BLOCK_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - BLOCK_HASH_SHIFT)) ^
-+                     le32_to_cpu(here->e_hash);
-+              here = EXT3_XATTR_NEXT(here);
-+      }
-+      header->h_hash = cpu_to_le32(hash);
-+}
-+
-+#undef BLOCK_HASH_SHIFT
-+
-+int __init
-+init_ext3_xattr(void)
-+{
-+      ext3_xattr_cache = mb_cache_create("ext3_xattr", NULL,
-+              sizeof(struct mb_cache_entry) +
-+              sizeof(struct mb_cache_entry_index), 1, 61);
-+      if (!ext3_xattr_cache)
-+              return -ENOMEM;
-+
-+      return 0;
-+}
-+
-+void
-+exit_ext3_xattr(void)
-+{
-+      if (ext3_xattr_cache)
-+              mb_cache_destroy(ext3_xattr_cache);
-+      ext3_xattr_cache = NULL;
-+}
-+
-+#else  /* CONFIG_EXT3_FS_XATTR_SHARING */
-+
-+int __init
-+init_ext3_xattr(void)
-+{
-+      return 0;
-+}
-+
-+void
-+exit_ext3_xattr(void)
-+{
-+}
-+
-+#endif  /* CONFIG_EXT3_FS_XATTR_SHARING */
---- /dev/null  2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-root/fs/ext3/xattr_user.c     2003-05-07 18:08:03.000000000 +0800
-@@ -0,0 +1,111 @@
-+/*
-+ * linux/fs/ext3/xattr_user.c
-+ * Handler for extended user attributes.
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/string.h>
-+#include <linux/fs.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
-+
-+#ifdef CONFIG_EXT3_FS_POSIX_ACL
-+# include <linux/ext3_acl.h>
-+#endif
-+
-+#define XATTR_USER_PREFIX "user."
-+
-+static size_t
-+ext3_xattr_user_list(char *list, struct inode *inode,
-+                   const char *name, int name_len)
-+{
-+      const int prefix_len = sizeof(XATTR_USER_PREFIX)-1;
-+
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return 0;
-+
-+      if (list) {
-+              memcpy(list, XATTR_USER_PREFIX, prefix_len);
-+              memcpy(list+prefix_len, name, name_len);
-+              list[prefix_len + name_len] = '\0';
-+      }
-+      return prefix_len + name_len + 1;
-+}
-+
-+static int
-+ext3_xattr_user_get(struct inode *inode, const char *name,
-+                  void *buffer, size_t size)
-+{
-+      int error;
-+
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return -ENOTSUP;
-+#ifdef CONFIG_EXT3_FS_POSIX_ACL
-+      error = ext3_permission_locked(inode, MAY_READ);
-+#else
-+      error = permission(inode, MAY_READ);
-+#endif
-+      if (error)
-+              return error;
-+
-+      return ext3_xattr_get(inode, EXT3_XATTR_INDEX_USER, name,
-+                            buffer, size);
-+}
-+
-+static int
-+ext3_xattr_user_set(struct inode *inode, const char *name,
-+                  const void *value, size_t size, int flags)
-+{
-+      handle_t *handle;
-+      int error;
-+
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return -ENOTSUP;
-+      if ( !S_ISREG(inode->i_mode) &&
-+          (!S_ISDIR(inode->i_mode) || inode->i_mode & S_ISVTX))
-+              return -EPERM;
-+#ifdef CONFIG_EXT3_FS_POSIX_ACL
-+      error = ext3_permission_locked(inode, MAY_WRITE);
-+#else
-+      error = permission(inode, MAY_WRITE);
-+#endif
-+      if (error)
-+              return error;
-+
-+      handle = ext3_journal_start(inode, EXT3_XATTR_TRANS_BLOCKS);
-+      if (IS_ERR(handle))
-+              return PTR_ERR(handle);
-+      error = ext3_xattr_set(handle, inode, EXT3_XATTR_INDEX_USER, name,
-+                             value, size, flags);
-+      ext3_journal_stop(handle, inode);
-+
-+      return error;
-+}
-+
-+struct ext3_xattr_handler ext3_xattr_user_handler = {
-+      prefix: XATTR_USER_PREFIX,
-+      list:   ext3_xattr_user_list,
-+      get:    ext3_xattr_user_get,
-+      set:    ext3_xattr_user_set,
-+};
-+
-+int __init
-+init_ext3_xattr_user(void)
-+{
-+      return ext3_xattr_register(EXT3_XATTR_INDEX_USER,
-+                                 &ext3_xattr_user_handler);
-+}
-+
-+void
-+exit_ext3_xattr_user(void)
-+{
-+      ext3_xattr_unregister(EXT3_XATTR_INDEX_USER,
-+                            &ext3_xattr_user_handler);
-+}
---- linux-2.4.20/fs/jfs/jfs_xattr.h~linux-2.4.20-xattr-0.8.54  2002-11-29 07:53:15.000000000 +0800
-+++ linux-2.4.20-root/fs/jfs/jfs_xattr.h       2003-05-07 18:08:03.000000000 +0800
-@@ -52,8 +52,10 @@ struct jfs_ea_list {
- #define       END_EALIST(ealist) \
-       ((struct jfs_ea *) (((char *) (ealist)) + EALIST_SIZE(ealist)))
--extern int __jfs_setxattr(struct inode *, const char *, void *, size_t, int);
--extern int jfs_setxattr(struct dentry *, const char *, void *, size_t, int);
-+extern int __jfs_setxattr(struct inode *, const char *, const void *, size_t,
-+                        int);
-+extern int jfs_setxattr(struct dentry *, const char *, const void *, size_t,
-+                      int);
- extern ssize_t __jfs_getxattr(struct inode *, const char *, void *, size_t);
- extern ssize_t jfs_getxattr(struct dentry *, const char *, void *, size_t);
- extern ssize_t jfs_listxattr(struct dentry *, char *, size_t);
---- linux-2.4.20/fs/jfs/xattr.c~linux-2.4.20-xattr-0.8.54      2002-11-29 07:53:15.000000000 +0800
-+++ linux-2.4.20-root/fs/jfs/xattr.c   2003-05-07 18:08:03.000000000 +0800
-@@ -641,7 +641,7 @@ static int ea_put(struct inode *inode, s
- }
- static int can_set_xattr(struct inode *inode, const char *name,
--                       void *value, size_t value_len)
-+                       const void *value, size_t value_len)
- {
-       if (IS_RDONLY(inode))
-               return -EROFS;
-@@ -660,7 +660,7 @@ static int can_set_xattr(struct inode *i
-       return permission(inode, MAY_WRITE);
- }
--int __jfs_setxattr(struct inode *inode, const char *name, void *value,
-+int __jfs_setxattr(struct inode *inode, const char *name, const void *value,
-                  size_t value_len, int flags)
- {
-       struct jfs_ea_list *ealist;
-@@ -799,7 +799,7 @@ int __jfs_setxattr(struct inode *inode, 
-       return rc;
- }
--int jfs_setxattr(struct dentry *dentry, const char *name, void *value,
-+int jfs_setxattr(struct dentry *dentry, const char *name, const void *value,
-                size_t value_len, int flags)
- {
-       if (value == NULL) {    /* empty EA, do not remove */
---- /dev/null  2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-root/fs/mbcache.c     2003-05-07 18:08:03.000000000 +0800
-@@ -0,0 +1,648 @@
-+/*
-+ * linux/fs/mbcache.c
-+ * (C) 2001-2002 Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ */
-+
-+/*
-+ * Filesystem Meta Information Block Cache (mbcache)
-+ *
-+ * The mbcache caches blocks of block devices that need to be located
-+ * by their device/block number, as well as by other criteria (such
-+ * as the block's contents).
-+ *
-+ * There can only be one cache entry in a cache per device and block number.
-+ * Additional indexes need not be unique in this sense. The number of
-+ * additional indexes (=other criteria) can be hardwired at compile time
-+ * or specified at cache create time.
-+ *
-+ * Each cache entry is of fixed size. An entry may be `valid' or `invalid'
-+ * in the cache. A valid entry is in the main hash tables of the cache,
-+ * and may also be in the lru list. An invalid entry is not in any hashes
-+ * or lists.
-+ *
-+ * A valid cache entry is only in the lru list if no handles refer to it.
-+ * Invalid cache entries will be freed when the last handle to the cache
-+ * entry is released. Entries that cannot be freed immediately are put
-+ * back on the lru list.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+
-+#include <linux/fs.h>
-+#include <linux/slab.h>
-+#include <linux/sched.h>
-+#include <linux/cache_def.h>
-+#include <linux/version.h>
-+#include <linux/init.h>
-+#include <linux/mbcache.h>
-+
-+
-+#ifdef MB_CACHE_DEBUG
-+# define mb_debug(f...) do { \
-+              printk(KERN_DEBUG f); \
-+              printk("\n"); \
-+      } while (0)
-+#define mb_assert(c) do { if (!(c)) \
-+              printk(KERN_ERR "assertion " #c " failed\n"); \
-+      } while(0)
-+#else
-+# define mb_debug(f...) do { } while(0)
-+# define mb_assert(c) do { } while(0)
-+#endif
-+#define mb_error(f...) do { \
-+              printk(KERN_ERR f); \
-+              printk("\n"); \
-+      } while(0)
-+              
-+MODULE_AUTHOR("Andreas Gruenbacher <a.gruenbacher@computer.org>");
-+MODULE_DESCRIPTION("Meta block cache (for extended attributes)");
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+MODULE_LICENSE("GPL");
-+#endif
-+
-+EXPORT_SYMBOL(mb_cache_create);
-+EXPORT_SYMBOL(mb_cache_shrink);
-+EXPORT_SYMBOL(mb_cache_destroy);
-+EXPORT_SYMBOL(mb_cache_entry_alloc);
-+EXPORT_SYMBOL(mb_cache_entry_insert);
-+EXPORT_SYMBOL(mb_cache_entry_release);
-+EXPORT_SYMBOL(mb_cache_entry_takeout);
-+EXPORT_SYMBOL(mb_cache_entry_free);
-+EXPORT_SYMBOL(mb_cache_entry_dup);
-+EXPORT_SYMBOL(mb_cache_entry_get);
-+#if !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0)
-+EXPORT_SYMBOL(mb_cache_entry_find_first);
-+EXPORT_SYMBOL(mb_cache_entry_find_next);
-+#endif
-+
-+
-+/*
-+ * Global data: list of all mbcache's, lru list, and a spinlock for
-+ * accessing cache data structures on SMP machines. The lru list is
-+ * global across all mbcaches.
-+ */
-+
-+static LIST_HEAD(mb_cache_list);
-+static LIST_HEAD(mb_cache_lru_list);
-+static spinlock_t mb_cache_spinlock = SPIN_LOCK_UNLOCKED;
-+
-+static inline int
-+mb_cache_indexes(struct mb_cache *cache)
-+{
-+#ifdef MB_CACHE_INDEXES_COUNT
-+      return MB_CACHE_INDEXES_COUNT;
-+#else
-+      return cache->c_indexes_count;
-+#endif
-+}
-+
-+/*
-+ * What the mbcache registers as to get shrunk dynamically.
-+ */
-+
-+static void
-+mb_cache_memory_pressure(int priority, unsigned int gfp_mask);
-+
-+static struct cache_definition mb_cache_definition = {
-+      "mb_cache",
-+      mb_cache_memory_pressure
-+};
-+
-+
-+static inline int
-+__mb_cache_entry_is_hashed(struct mb_cache_entry *ce)
-+{
-+      return !list_empty(&ce->e_block_list);
-+}
-+
-+
-+static inline void
-+__mb_cache_entry_unhash(struct mb_cache_entry *ce)
-+{
-+      int n;
-+
-+      if (__mb_cache_entry_is_hashed(ce)) {
-+              list_del_init(&ce->e_block_list);
-+              for (n=0; n<mb_cache_indexes(ce->e_cache); n++)
-+                      list_del(&ce->e_indexes[n].o_list);
-+      }
-+}
-+
-+
-+static inline void
-+__mb_cache_entry_forget(struct mb_cache_entry *ce, int gfp_mask)
-+{
-+      struct mb_cache *cache = ce->e_cache;
-+
-+      mb_assert(atomic_read(&ce->e_used) == 0);
-+      if (cache->c_op.free && cache->c_op.free(ce, gfp_mask)) {
-+              /* free failed -- put back on the lru list
-+                 for freeing later. */
-+              spin_lock(&mb_cache_spinlock);
-+              list_add(&ce->e_lru_list, &mb_cache_lru_list);
-+              spin_unlock(&mb_cache_spinlock);
-+      } else {
-+              kmem_cache_free(cache->c_entry_cache, ce);
-+              atomic_dec(&cache->c_entry_count);
-+      }
-+}
-+
-+
-+static inline void
-+__mb_cache_entry_release_unlock(struct mb_cache_entry *ce)
-+{
-+      if (atomic_dec_and_test(&ce->e_used)) {
-+              if (__mb_cache_entry_is_hashed(ce))
-+                      list_add_tail(&ce->e_lru_list, &mb_cache_lru_list);
-+              else {
-+                      spin_unlock(&mb_cache_spinlock);
-+                      __mb_cache_entry_forget(ce, GFP_KERNEL);
-+                      return;
-+              }
-+      }
-+      spin_unlock(&mb_cache_spinlock);
-+}
-+
-+
-+/*
-+ * mb_cache_memory_pressure()  memory pressure callback
-+ *
-+ * This function is called by the kernel memory management when memory
-+ * gets low.
-+ *
-+ * @priority: Amount by which to shrink the cache (0 = highes priority)
-+ * @gfp_mask: (ignored)
-+ */
-+static void
-+mb_cache_memory_pressure(int priority, unsigned int gfp_mask)
-+{
-+      LIST_HEAD(free_list);
-+      struct list_head *l, *ltmp;
-+      int count = 0;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each(l, &mb_cache_list) {
-+              struct mb_cache *cache =
-+                      list_entry(l, struct mb_cache, c_cache_list);
-+              mb_debug("cache %s (%d)", cache->c_name,
-+                        atomic_read(&cache->c_entry_count));
-+              count += atomic_read(&cache->c_entry_count);
-+      }
-+      mb_debug("trying to free %d of %d entries",
-+                count / (priority ? priority : 1), count);
-+      if (priority)
-+              count /= priority;
-+      while (count-- && !list_empty(&mb_cache_lru_list)) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(mb_cache_lru_list.next,
-+                                 struct mb_cache_entry, e_lru_list);
-+              list_del(&ce->e_lru_list);
-+              __mb_cache_entry_unhash(ce);
-+              list_add_tail(&ce->e_lru_list, &free_list);
-+      }
-+      spin_unlock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &free_list) {
-+              __mb_cache_entry_forget(list_entry(l, struct mb_cache_entry,
-+                                                 e_lru_list), gfp_mask);
-+      }
-+}
-+
-+
-+/*
-+ * mb_cache_create()  create a new cache
-+ *
-+ * All entries in one cache are equal size. Cache entries may be from
-+ * multiple devices. If this is the first mbcache created, registers
-+ * the cache with kernel memory management. Returns NULL if no more
-+ * memory was available.
-+ *
-+ * @name: name of the cache (informal)
-+ * @cache_op: contains the callback called when freeing a cache entry
-+ * @entry_size: The size of a cache entry, including
-+ *              struct mb_cache_entry
-+ * @indexes_count: number of additional indexes in the cache. Must equal
-+ *                 MB_CACHE_INDEXES_COUNT if the number of indexes is
-+ *                 hardwired.
-+ * @bucket_count: number of hash buckets
-+ */
-+struct mb_cache *
-+mb_cache_create(const char *name, struct mb_cache_op *cache_op,
-+              size_t entry_size, int indexes_count, int bucket_count)
-+{
-+      int m=0, n;
-+      struct mb_cache *cache = NULL;
-+
-+      if(entry_size < sizeof(struct mb_cache_entry) +
-+         indexes_count * sizeof(struct mb_cache_entry_index))
-+              return NULL;
-+
-+      MOD_INC_USE_COUNT;
-+      cache = kmalloc(sizeof(struct mb_cache) +
-+                      indexes_count * sizeof(struct list_head), GFP_KERNEL);
-+      if (!cache)
-+              goto fail;
-+      cache->c_name = name;
-+      cache->c_op.free = NULL;
-+      if (cache_op)
-+              cache->c_op.free = cache_op->free;
-+      atomic_set(&cache->c_entry_count, 0);
-+      cache->c_bucket_count = bucket_count;
-+#ifdef MB_CACHE_INDEXES_COUNT
-+      mb_assert(indexes_count == MB_CACHE_INDEXES_COUNT);
-+#else
-+      cache->c_indexes_count = indexes_count;
-+#endif
-+      cache->c_block_hash = kmalloc(bucket_count * sizeof(struct list_head),
-+                                    GFP_KERNEL);
-+      if (!cache->c_block_hash)
-+              goto fail;
-+      for (n=0; n<bucket_count; n++)
-+              INIT_LIST_HEAD(&cache->c_block_hash[n]);
-+      for (m=0; m<indexes_count; m++) {
-+              cache->c_indexes_hash[m] = kmalloc(bucket_count *
-+                                               sizeof(struct list_head),
-+                                               GFP_KERNEL);
-+              if (!cache->c_indexes_hash[m])
-+                      goto fail;
-+              for (n=0; n<bucket_count; n++)
-+                      INIT_LIST_HEAD(&cache->c_indexes_hash[m][n]);
-+      }
-+      cache->c_entry_cache = kmem_cache_create(name, entry_size, 0,
-+              0 /*SLAB_POISON | SLAB_RED_ZONE*/, NULL, NULL);
-+      if (!cache->c_entry_cache)
-+              goto fail;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_add(&cache->c_cache_list, &mb_cache_list);
-+      spin_unlock(&mb_cache_spinlock);
-+      return cache;
-+
-+fail:
-+      if (cache) {
-+              while (--m >= 0)
-+                      kfree(cache->c_indexes_hash[m]);
-+              if (cache->c_block_hash)
-+                      kfree(cache->c_block_hash);
-+              kfree(cache);
-+      }
-+      MOD_DEC_USE_COUNT;
-+      return NULL;
-+}
-+
-+
-+/*
-+ * mb_cache_shrink()
-+ *
-+ * Removes all cache entires of a device from the cache. All cache entries
-+ * currently in use cannot be freed, and thus remain in the cache.
-+ *
-+ * @cache: which cache to shrink
-+ * @dev: which device's cache entries to shrink
-+ */
-+void
-+mb_cache_shrink(struct mb_cache *cache, kdev_t dev)
-+{
-+      LIST_HEAD(free_list);
-+      struct list_head *l, *ltmp;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &mb_cache_lru_list) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(l, struct mb_cache_entry, e_lru_list);
-+              if (ce->e_dev == dev) {
-+                      list_del(&ce->e_lru_list);
-+                      list_add_tail(&ce->e_lru_list, &free_list);
-+                      __mb_cache_entry_unhash(ce);
-+              }
-+      }
-+      spin_unlock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &free_list) {
-+              __mb_cache_entry_forget(list_entry(l, struct mb_cache_entry,
-+                                                 e_lru_list), GFP_KERNEL);
-+      }
-+}
-+
-+
-+/*
-+ * mb_cache_destroy()
-+ *
-+ * Shrinks the cache to its minimum possible size (hopefully 0 entries),
-+ * and then destroys it. If this was the last mbcache, un-registers the
-+ * mbcache from kernel memory management.
-+ */
-+void
-+mb_cache_destroy(struct mb_cache *cache)
-+{
-+      LIST_HEAD(free_list);
-+      struct list_head *l, *ltmp;
-+      int n;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &mb_cache_lru_list) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(l, struct mb_cache_entry, e_lru_list);
-+              if (ce->e_cache == cache) {
-+                      list_del(&ce->e_lru_list);
-+                      list_add_tail(&ce->e_lru_list, &free_list);
-+                      __mb_cache_entry_unhash(ce);
-+              }
-+      }
-+      list_del(&cache->c_cache_list);
-+      spin_unlock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &free_list) {
-+              __mb_cache_entry_forget(list_entry(l, struct mb_cache_entry,
-+                                                 e_lru_list), GFP_KERNEL);
-+      }
-+
-+      if (atomic_read(&cache->c_entry_count) > 0) {
-+              mb_error("cache %s: %d orphaned entries",
-+                        cache->c_name,
-+                        atomic_read(&cache->c_entry_count));
-+      }
-+
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0))
-+      /* We don't have kmem_cache_destroy() in 2.2.x */
-+      kmem_cache_shrink(cache->c_entry_cache);
-+#else
-+      kmem_cache_destroy(cache->c_entry_cache);
-+#endif
-+      for (n=0; n < mb_cache_indexes(cache); n++)
-+              kfree(cache->c_indexes_hash[n]);
-+      kfree(cache->c_block_hash);
-+      kfree(cache);
-+
-+      MOD_DEC_USE_COUNT;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_alloc()
-+ *
-+ * Allocates a new cache entry. The new entry will not be valid initially,
-+ * and thus cannot be looked up yet. It should be filled with data, and
-+ * then inserted into the cache using mb_cache_entry_insert(). Returns NULL
-+ * if no more memory was available.
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_alloc(struct mb_cache *cache)
-+{
-+      struct mb_cache_entry *ce;
-+
-+      atomic_inc(&cache->c_entry_count);
-+      ce = kmem_cache_alloc(cache->c_entry_cache, GFP_KERNEL);
-+      if (ce) {
-+              INIT_LIST_HEAD(&ce->e_lru_list);
-+              INIT_LIST_HEAD(&ce->e_block_list);
-+              ce->e_cache = cache;
-+              atomic_set(&ce->e_used, 1);
-+      }
-+      return ce;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_insert()
-+ *
-+ * Inserts an entry that was allocated using mb_cache_entry_alloc() into
-+ * the cache. After this, the cache entry can be looked up, but is not yet
-+ * in the lru list as the caller still holds a handle to it. Returns 0 on
-+ * success, or -EBUSY if a cache entry for that device + inode exists
-+ * already (this may happen after a failed lookup, if another process has
-+ * inserted the same cache entry in the meantime).
-+ *
-+ * @dev: device the cache entry belongs to
-+ * @block: block number
-+ * @keys: array of additional keys. There must be indexes_count entries
-+ *        in the array (as specified when creating the cache).
-+ */
-+int
-+mb_cache_entry_insert(struct mb_cache_entry *ce, kdev_t dev,
-+                    unsigned long block, unsigned int keys[])
-+{
-+      struct mb_cache *cache = ce->e_cache;
-+      unsigned int bucket = (HASHDEV(dev) + block) % cache->c_bucket_count;
-+      struct list_head *l;
-+      int error = -EBUSY, n;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each(l, &cache->c_block_hash[bucket]) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(l, struct mb_cache_entry, e_block_list);
-+              if (ce->e_dev == dev && ce->e_block == block)
-+                      goto out;
-+      }
-+      __mb_cache_entry_unhash(ce);
-+      ce->e_dev = dev;
-+      ce->e_block = block;
-+      list_add(&ce->e_block_list, &cache->c_block_hash[bucket]);
-+      for (n=0; n<mb_cache_indexes(cache); n++) {
-+              ce->e_indexes[n].o_key = keys[n];
-+              bucket = keys[n] % cache->c_bucket_count;
-+              list_add(&ce->e_indexes[n].o_list,
-+                       &cache->c_indexes_hash[n][bucket]);
-+      }
-+out:
-+      spin_unlock(&mb_cache_spinlock);
-+      return error;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_release()
-+ *
-+ * Release a handle to a cache entry. When the last handle to a cache entry
-+ * is released it is either freed (if it is invalid) or otherwise inserted
-+ * in to the lru list.
-+ */
-+void
-+mb_cache_entry_release(struct mb_cache_entry *ce)
-+{
-+      spin_lock(&mb_cache_spinlock);
-+      __mb_cache_entry_release_unlock(ce);
-+}
-+
-+
-+/*
-+ * mb_cache_entry_takeout()
-+ *
-+ * Take a cache entry out of the cache, making it invalid. The entry can later
-+ * be re-inserted using mb_cache_entry_insert(), or released using
-+ * mb_cache_entry_release().
-+ */
-+void
-+mb_cache_entry_takeout(struct mb_cache_entry *ce)
-+{
-+      spin_lock(&mb_cache_spinlock);
-+      mb_assert(list_empty(&ce->e_lru_list));
-+      __mb_cache_entry_unhash(ce);
-+      spin_unlock(&mb_cache_spinlock);
-+}
-+
-+
-+/*
-+ * mb_cache_entry_free()
-+ *
-+ * This is equivalent to the sequence mb_cache_entry_takeout() --
-+ * mb_cache_entry_release().
-+ */
-+void
-+mb_cache_entry_free(struct mb_cache_entry *ce)
-+{
-+      spin_lock(&mb_cache_spinlock);
-+      mb_assert(list_empty(&ce->e_lru_list));
-+      __mb_cache_entry_unhash(ce);
-+      __mb_cache_entry_release_unlock(ce);
-+}
-+
-+
-+/*
-+ * mb_cache_entry_dup()
-+ *
-+ * Duplicate a handle to a cache entry (does not duplicate the cache entry
-+ * itself). After the call, both the old and the new handle must be released.
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_dup(struct mb_cache_entry *ce)
-+{
-+      atomic_inc(&ce->e_used);
-+      return ce;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_get()
-+ *
-+ * Get a cache entry  by device / block number. (There can only be one entry
-+ * in the cache per device and block.) Returns NULL if no such cache entry
-+ * exists.
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_get(struct mb_cache *cache, kdev_t dev, unsigned long block)
-+{
-+      unsigned int bucket = (HASHDEV(dev) + block) % cache->c_bucket_count;
-+      struct list_head *l;
-+      struct mb_cache_entry *ce;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each(l, &cache->c_block_hash[bucket]) {
-+              ce = list_entry(l, struct mb_cache_entry, e_block_list);
-+              if (ce->e_dev == dev && ce->e_block == block) {
-+                      if (!list_empty(&ce->e_lru_list))
-+                              list_del_init(&ce->e_lru_list);
-+                      atomic_inc(&ce->e_used);
-+                      goto cleanup;
-+              }
-+      }
-+      ce = NULL;
-+
-+cleanup:
-+      spin_unlock(&mb_cache_spinlock);
-+      return ce;
-+}
-+
-+#if !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0)
-+
-+static struct mb_cache_entry *
-+__mb_cache_entry_find(struct list_head *l, struct list_head *head,
-+                    int index, kdev_t dev, unsigned int key)
-+{
-+      while (l != head) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(l, struct mb_cache_entry,
-+                                 e_indexes[index].o_list);
-+              if (ce->e_dev == dev && ce->e_indexes[index].o_key == key) {
-+                      if (!list_empty(&ce->e_lru_list))
-+                              list_del_init(&ce->e_lru_list);
-+                      atomic_inc(&ce->e_used);
-+                      return ce;
-+              }
-+              l = l->next;
-+      }
-+      return NULL;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_find_first()
-+ *
-+ * Find the first cache entry on a given device with a certain key in
-+ * an additional index. Additonal matches can be found with
-+ * mb_cache_entry_find_next(). Returns NULL if no match was found.
-+ *
-+ * @cache: the cache to search
-+ * @index: the number of the additonal index to search (0<=index<indexes_count)
-+ * @dev: the device the cache entry should belong to
-+ * @key: the key in the index
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_find_first(struct mb_cache *cache, int index, kdev_t dev,
-+                        unsigned int key)
-+{
-+      unsigned int bucket = key % cache->c_bucket_count;
-+      struct list_head *l;
-+      struct mb_cache_entry *ce;
-+
-+      mb_assert(index < mb_cache_indexes(cache));
-+      spin_lock(&mb_cache_spinlock);
-+      l = cache->c_indexes_hash[index][bucket].next;
-+      ce = __mb_cache_entry_find(l, &cache->c_indexes_hash[index][bucket],
-+                                 index, dev, key);
-+      spin_unlock(&mb_cache_spinlock);
-+      return ce;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_find_next()
-+ *
-+ * Find the next cache entry on a given device with a certain key in an
-+ * additional index. Returns NULL if no match could be found. The previous
-+ * entry is atomatically released, so that mb_cache_entry_find_next() can
-+ * be called like this:
-+ *
-+ * entry = mb_cache_entry_find_first();
-+ * while (entry) {
-+ *    ...
-+ *    entry = mb_cache_entry_find_next(entry, ...);
-+ * }
-+ *
-+ * @prev: The previous match
-+ * @index: the number of the additonal index to search (0<=index<indexes_count)
-+ * @dev: the device the cache entry should belong to
-+ * @key: the key in the index
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_find_next(struct mb_cache_entry *prev, int index, kdev_t dev,
-+                       unsigned int key)
-+{
-+      struct mb_cache *cache = prev->e_cache;
-+      unsigned int bucket = key % cache->c_bucket_count;
-+      struct list_head *l;
-+      struct mb_cache_entry *ce;
-+
-+      mb_assert(index < mb_cache_indexes(cache));
-+      spin_lock(&mb_cache_spinlock);
-+      l = prev->e_indexes[index].o_list.next;
-+      ce = __mb_cache_entry_find(l, &cache->c_indexes_hash[index][bucket],
-+                                 index, dev, key);
-+      __mb_cache_entry_release_unlock(prev);
-+      return ce;
-+}
-+
-+#endif  /* !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0) */
-+
-+static int __init init_mbcache(void)
-+{
-+      register_cache(&mb_cache_definition);
-+      return 0;
-+}
-+
-+static void __exit exit_mbcache(void)
-+{
-+      unregister_cache(&mb_cache_definition);
-+}
-+
-+module_init(init_mbcache)
-+module_exit(exit_mbcache)
-+
---- linux-2.4.20/include/asm-arm/unistd.h~linux-2.4.20-xattr-0.8.54    2002-08-03 08:39:45.000000000 +0800
-+++ linux-2.4.20-root/include/asm-arm/unistd.h 2003-05-07 18:08:03.000000000 +0800
-@@ -244,7 +244,6 @@
- #define __NR_security                 (__NR_SYSCALL_BASE+223)
- #define __NR_gettid                   (__NR_SYSCALL_BASE+224)
- #define __NR_readahead                        (__NR_SYSCALL_BASE+225)
--#if 0 /* allocated in 2.5 */
- #define __NR_setxattr                 (__NR_SYSCALL_BASE+226)
- #define __NR_lsetxattr                        (__NR_SYSCALL_BASE+227)
- #define __NR_fsetxattr                        (__NR_SYSCALL_BASE+228)
-@@ -257,7 +256,6 @@
- #define __NR_removexattr              (__NR_SYSCALL_BASE+235)
- #define __NR_lremovexattr             (__NR_SYSCALL_BASE+236)
- #define __NR_fremovexattr             (__NR_SYSCALL_BASE+237)
--#endif
- #define __NR_tkill                    (__NR_SYSCALL_BASE+238)
- /*
-  * Please check 2.5 _before_ adding calls here,
---- linux-2.4.20/include/asm-ia64/unistd.h~linux-2.4.20-xattr-0.8.54   2002-11-29 07:53:15.000000000 +0800
-+++ linux-2.4.20-root/include/asm-ia64/unistd.h        2003-05-07 18:08:03.000000000 +0800
-@@ -206,8 +206,19 @@
- #define __NR_getdents64                       1214
- #define __NR_getunwind                        1215
- #define __NR_readahead                        1216
-+#define __NR_setxattr                 1217
-+#define __NR_lsetxattr                        1218
-+#define __NR_fsetxattr                        1219
-+#define __NR_getxattr                 1220
-+#define __NR_lgetxattr                        1221
-+#define __NR_fgetxattr                        1222
-+#define __NR_listxattr                        1223
-+#define __NR_llistxattr                       1224
-+#define __NR_flistxattr                       1225
-+#define __NR_removexattr              1226
-+#define __NR_lremovexattr             1227
-+#define __NR_fremovexattr             1228
- /*
-- * 1217-1228: reserved for xattr
-  * 1230-1232: reserved for futex and sched_[sg]etaffinity.
-  */
- #define __NR_tkill                    1229
---- linux-2.4.20/include/asm-ppc64/unistd.h~linux-2.4.20-xattr-0.8.54  2002-08-03 08:39:45.000000000 +0800
-+++ linux-2.4.20-root/include/asm-ppc64/unistd.h       2003-05-07 18:08:03.000000000 +0800
-@@ -218,6 +218,7 @@
- #define __NR_gettid           207
- #if 0 /* Reserved syscalls */
- #define __NR_tkill            208
-+#endif
- #define __NR_setxattr         209
- #define __NR_lsetxattr                210
- #define __NR_fsetxattr                211
-@@ -230,6 +231,7 @@
- #define __NR_removexattr      218
- #define __NR_lremovexattr     219
- #define __NR_fremovexattr     220
-+#if 0 /* Reserved syscalls */
- #define __NR_futex            221
- #endif
---- linux-2.4.20/include/asm-s390/unistd.h~linux-2.4.20-xattr-0.8.54   2002-08-03 08:39:45.000000000 +0800
-+++ linux-2.4.20-root/include/asm-s390/unistd.h        2003-05-07 18:08:03.000000000 +0800
-@@ -212,9 +212,18 @@
- #define __NR_madvise            219
- #define __NR_getdents64               220
- #define __NR_fcntl64          221
--/*
-- * Numbers 224-235 are reserved for posix acl
-- */
-+#define __NR_setxattr         224
-+#define __NR_lsetxattr                225
-+#define __NR_fsetxattr                226
-+#define __NR_getxattr         227
-+#define __NR_lgetxattr                228
-+#define __NR_fgetxattr                229
-+#define __NR_listxattr                230
-+#define __NR_llistxattr               231
-+#define __NR_flistxattr               232
-+#define __NR_removexattr      233
-+#define __NR_lremovexattr     234
-+#define __NR_fremovexattr     235
- #define __NR_gettid           236
- #define __NR_tkill            237
---- linux-2.4.20/include/asm-s390x/unistd.h~linux-2.4.20-xattr-0.8.54  2002-08-03 08:39:45.000000000 +0800
-+++ linux-2.4.20-root/include/asm-s390x/unistd.h       2003-05-07 18:08:03.000000000 +0800
-@@ -180,9 +180,18 @@
- #define __NR_pivot_root         217
- #define __NR_mincore            218
- #define __NR_madvise            219
--/*
-- * Numbers 224-235 are reserved for posix acl
-- */
-+#define __NR_setxattr         224
-+#define __NR_lsetxattr                225
-+#define __NR_fsetxattr                226
-+#define __NR_getxattr         227
-+#define __NR_lgetxattr                228
-+#define __NR_fgetxattr                229
-+#define __NR_listxattr                230
-+#define __NR_llistxattr               231
-+#define __NR_flistxattr               232
-+#define __NR_removexattr      233
-+#define __NR_lremovexattr     234
-+#define __NR_fremovexattr     235
- #define __NR_gettid           236
- #define __NR_tkill            237
---- linux-2.4.20/include/asm-sparc/unistd.h~linux-2.4.20-xattr-0.8.54  2002-08-03 08:39:45.000000000 +0800
-+++ linux-2.4.20-root/include/asm-sparc/unistd.h       2003-05-07 18:08:03.000000000 +0800
-@@ -184,24 +184,24 @@
- /* #define __NR_exportfs        166    SunOS Specific                              */
- #define __NR_mount              167 /* Common                                      */
- #define __NR_ustat              168 /* Common                                      */
--/* #define __NR_semsys          169    SunOS Specific                              */
--/* #define __NR_msgsys          170    SunOS Specific                              */
--/* #define __NR_shmsys          171    SunOS Specific                              */
--/* #define __NR_auditsys        172    SunOS Specific                              */
--/* #define __NR_rfssys          173    SunOS Specific                              */
-+#define __NR_setxattr           169 /* SunOS: semsys                               */
-+#define __NR_lsetxattr          170 /* SunOS: msgsys                               */
-+#define __NR_fsetxattr          171 /* SunOS: shmsys                               */
-+#define __NR_getxattr           172 /* SunOS: auditsys                             */
-+#define __NR_lgetxattr          173 /* SunOS: rfssys                               */
- #define __NR_getdents           174 /* Common                                      */
- #define __NR_setsid             175 /* Common                                      */
- #define __NR_fchdir             176 /* Common                                      */
--/* #define __NR_fchroot         177    SunOS Specific                              */
--/* #define __NR_vpixsys         178    SunOS Specific                              */
--/* #define __NR_aioread         179    SunOS Specific                              */
--/* #define __NR_aiowrite        180    SunOS Specific                              */
--/* #define __NR_aiowait         181    SunOS Specific                              */
--/* #define __NR_aiocancel       182    SunOS Specific                              */
-+#define __NR_fgetxattr          177 /* SunOS: fchroot                              */
-+#define __NR_listxattr          178 /* SunOS: vpixsys                              */
-+#define __NR_llistxattr         179 /* SunOS: aioread                              */
-+#define __NR_flistxattr         180 /* SunOS: aiowrite                             */
-+#define __NR_removexattr        181 /* SunOS: aiowait                              */
-+#define __NR_lremovexattr       182 /* SunOS: aiocancel                            */
- #define __NR_sigpending         183 /* Common                                      */
- #define __NR_query_module     184 /* Linux Specific                              */
- #define __NR_setpgid            185 /* Common                                      */
--/* #define __NR_pathconf        186    SunOS Specific                              */
-+#define __NR_fremovexattr       186 /* SunOS: pathconf                             */
- #define __NR_tkill              187 /* SunOS: fpathconf                            */
- /* #define __NR_sysconf         188    SunOS Specific                              */
- #define __NR_uname              189 /* Linux Specific                              */
---- linux-2.4.20/include/asm-sparc64/unistd.h~linux-2.4.20-xattr-0.8.54        2002-08-03 08:39:45.000000000 +0800
-+++ linux-2.4.20-root/include/asm-sparc64/unistd.h     2003-05-07 18:08:03.000000000 +0800
-@@ -184,24 +184,24 @@
- /* #define __NR_exportfs        166    SunOS Specific                              */
- #define __NR_mount              167 /* Common                                      */
- #define __NR_ustat              168 /* Common                                      */
--/* #define __NR_semsys          169    SunOS Specific                              */
--/* #define __NR_msgsys          170    SunOS Specific                              */
--/* #define __NR_shmsys          171    SunOS Specific                              */
--/* #define __NR_auditsys        172    SunOS Specific                              */
--/* #define __NR_rfssys          173    SunOS Specific                              */
-+#define __NR_setxattr           169 /* SunOS: semsys                               */
-+#define __NR_lsetxattr          170 /* SunOS: msgsys                               */
-+#define __NR_fsetxattr          171 /* SunOS: shmsys                               */
-+#define __NR_getxattr           172 /* SunOS: auditsys                             */
-+#define __NR_lgetxattr          173 /* SunOS: rfssys                               */
- #define __NR_getdents           174 /* Common                                      */
- #define __NR_setsid             175 /* Common                                      */
- #define __NR_fchdir             176 /* Common                                      */
--/* #define __NR_fchroot         177    SunOS Specific                              */
--/* #define __NR_vpixsys         178    SunOS Specific                              */
--/* #define __NR_aioread         179    SunOS Specific                              */
--/* #define __NR_aiowrite        180    SunOS Specific                              */
--/* #define __NR_aiowait         181    SunOS Specific                              */
--/* #define __NR_aiocancel       182    SunOS Specific                              */
-+#define __NR_fgetxattr          177 /* SunOS: fchroot                              */
-+#define __NR_listxattr          178 /* SunOS: vpixsys                              */
-+#define __NR_llistxattr         179 /* SunOS: aioread                              */
-+#define __NR_flistxattr         180 /* SunOS: aiowrite                             */
-+#define __NR_removexattr        181 /* SunOS: aiowait                              */
-+#define __NR_lremovexattr       182 /* SunOS: aiocancel                            */
- #define __NR_sigpending         183 /* Common                                      */
- #define __NR_query_module     184 /* Linux Specific                              */
- #define __NR_setpgid            185 /* Common                                      */
--/* #define __NR_pathconf        186    SunOS Specific                              */
-+#define __NR_fremovexattr       186 /* SunOS: pathconf                             */
- #define __NR_tkill              187 /* SunOS: fpathconf                            */
- /* #define __NR_sysconf         188    SunOS Specific                              */
- #define __NR_uname              189 /* Linux Specific                              */
---- /dev/null  2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-root/include/linux/cache_def.h        2003-05-07 18:08:03.000000000 +0800
-@@ -0,0 +1,15 @@
-+/*
-+ * linux/cache_def.h
-+ * Handling of caches defined in drivers, filesystems, ...
-+ *
-+ * Copyright (C) 2002 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ */
-+
-+struct cache_definition {
-+      const char *name;
-+      void (*shrink)(int, unsigned int);
-+      struct list_head link;
-+};
-+
-+extern void register_cache(struct cache_definition *);
-+extern void unregister_cache(struct cache_definition *);
---- linux-2.4.20/include/linux/errno.h~linux-2.4.20-xattr-0.8.54       2003-04-14 16:39:03.000000000 +0800
-+++ linux-2.4.20-root/include/linux/errno.h    2003-05-07 18:08:03.000000000 +0800
-@@ -23,4 +23,8 @@
- #endif
-+/* Defined for extended attributes */
-+#define ENOATTR ENODATA               /* No such attribute */
-+#define ENOTSUP EOPNOTSUPP    /* Operation not supported */
-+
- #endif
---- linux-2.4.20/include/linux/ext2_fs.h~linux-2.4.20-xattr-0.8.54     2003-04-14 16:39:08.000000000 +0800
-+++ linux-2.4.20-root/include/linux/ext2_fs.h  2003-05-07 18:08:03.000000000 +0800
-@@ -57,8 +57,6 @@
-  */
- #define       EXT2_BAD_INO             1      /* Bad blocks inode */
- #define EXT2_ROOT_INO          2      /* Root inode */
--#define EXT2_ACL_IDX_INO       3      /* ACL inode */
--#define EXT2_ACL_DATA_INO      4      /* ACL inode */
- #define EXT2_BOOT_LOADER_INO   5      /* Boot loader inode */
- #define EXT2_UNDEL_DIR_INO     6      /* Undelete directory inode */
-@@ -86,7 +84,6 @@
- #else
- # define EXT2_BLOCK_SIZE(s)           (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
- #endif
--#define EXT2_ACLE_PER_BLOCK(s)                (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_acl_entry))
- #define       EXT2_ADDR_PER_BLOCK(s)          (EXT2_BLOCK_SIZE(s) / sizeof (__u32))
- #ifdef __KERNEL__
- # define EXT2_BLOCK_SIZE_BITS(s)      ((s)->s_blocksize_bits)
-@@ -121,28 +118,6 @@
- #endif
- /*
-- * ACL structures
-- */
--struct ext2_acl_header        /* Header of Access Control Lists */
--{
--      __u32   aclh_size;
--      __u32   aclh_file_count;
--      __u32   aclh_acle_count;
--      __u32   aclh_first_acle;
--};
--
--struct ext2_acl_entry /* Access Control List Entry */
--{
--      __u32   acle_size;
--      __u16   acle_perms;     /* Access permissions */
--      __u16   acle_type;      /* Type of entry */
--      __u16   acle_tag;       /* User or group identity */
--      __u16   acle_pad1;
--      __u32   acle_next;      /* Pointer on next entry for the */
--                                      /* same inode or on next free entry */
--};
--
--/*
-  * Structure of a blocks group descriptor
-  */
- struct ext2_group_desc
-@@ -314,6 +289,7 @@ struct ext2_inode {
- #define EXT2_MOUNT_ERRORS_PANIC               0x0040  /* Panic on errors */
- #define EXT2_MOUNT_MINIX_DF           0x0080  /* Mimics the Minix statfs */
- #define EXT2_MOUNT_NO_UID32           0x0200  /* Disable 32-bit UIDs */
-+#define EXT2_MOUNT_XATTR_USER         0x4000  /* Extended user attributes */
- #define clear_opt(o, opt)             o &= ~EXT2_MOUNT_##opt
- #define set_opt(o, opt)                       o |= EXT2_MOUNT_##opt
-@@ -397,6 +373,7 @@ struct ext2_super_block {
- #ifdef __KERNEL__
- #define EXT2_SB(sb)   (&((sb)->u.ext2_sb))
-+#define EXT2_I(inode) (&((inode)->u.ext2_i))
- #else
- /* Assume that user mode programs are passing in an ext2fs superblock, not
-  * a kernel struct super_block.  This will allow us to call the feature-test
-@@ -466,7 +443,7 @@ struct ext2_super_block {
- #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008
- #define EXT2_FEATURE_INCOMPAT_ANY             0xffffffff
--#define EXT2_FEATURE_COMPAT_SUPP      0
-+#define EXT2_FEATURE_COMPAT_SUPP      EXT2_FEATURE_COMPAT_EXT_ATTR
- #define EXT2_FEATURE_INCOMPAT_SUPP    EXT2_FEATURE_INCOMPAT_FILETYPE
- #define EXT2_FEATURE_RO_COMPAT_SUPP   (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
-@@ -623,8 +600,10 @@ extern struct address_space_operations e
- /* namei.c */
- extern struct inode_operations ext2_dir_inode_operations;
-+extern struct inode_operations ext2_special_inode_operations;
- /* symlink.c */
-+extern struct inode_operations ext2_symlink_inode_operations;
- extern struct inode_operations ext2_fast_symlink_inode_operations;
- #endif        /* __KERNEL__ */
---- /dev/null  2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-root/include/linux/ext2_xattr.h       2003-05-07 18:08:03.000000000 +0800
-@@ -0,0 +1,157 @@
-+/*
-+  File: linux/ext2_xattr.h
-+
-+  On-disk format of extended attributes for the ext2 filesystem.
-+
-+  (C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+*/
-+
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/xattr.h>
-+
-+/* Magic value in attribute blocks */
-+#define EXT2_XATTR_MAGIC              0xEA020000
-+
-+/* Maximum number of references to one attribute block */
-+#define EXT2_XATTR_REFCOUNT_MAX               1024
-+
-+/* Name indexes */
-+#define EXT2_XATTR_INDEX_MAX                  10
-+#define EXT2_XATTR_INDEX_USER                 1
-+#define EXT2_XATTR_INDEX_POSIX_ACL_ACCESS     2
-+#define EXT2_XATTR_INDEX_POSIX_ACL_DEFAULT    3
-+
-+struct ext2_xattr_header {
-+      __u32   h_magic;        /* magic number for identification */
-+      __u32   h_refcount;     /* reference count */
-+      __u32   h_blocks;       /* number of disk blocks used */
-+      __u32   h_hash;         /* hash value of all attributes */
-+      __u32   h_reserved[4];  /* zero right now */
-+};
-+
-+struct ext2_xattr_entry {
-+      __u8    e_name_len;     /* length of name */
-+      __u8    e_name_index;   /* attribute name index */
-+      __u16   e_value_offs;   /* offset in disk block of value */
-+      __u32   e_value_block;  /* disk block attribute is stored on (n/i) */
-+      __u32   e_value_size;   /* size of attribute value */
-+      __u32   e_hash;         /* hash value of name and value */
-+      char    e_name[0];      /* attribute name */
-+};
-+
-+#define EXT2_XATTR_PAD_BITS           2
-+#define EXT2_XATTR_PAD                (1<<EXT2_XATTR_PAD_BITS)
-+#define EXT2_XATTR_ROUND              (EXT2_XATTR_PAD-1)
-+#define EXT2_XATTR_LEN(name_len) \
-+      (((name_len) + EXT2_XATTR_ROUND + \
-+      sizeof(struct ext2_xattr_entry)) & ~EXT2_XATTR_ROUND)
-+#define EXT2_XATTR_NEXT(entry) \
-+      ( (struct ext2_xattr_entry *)( \
-+        (char *)(entry) + EXT2_XATTR_LEN((entry)->e_name_len)) )
-+#define EXT2_XATTR_SIZE(size) \
-+      (((size) + EXT2_XATTR_ROUND) & ~EXT2_XATTR_ROUND)
-+
-+#ifdef __KERNEL__
-+
-+# ifdef CONFIG_EXT2_FS_XATTR
-+
-+struct ext2_xattr_handler {
-+      char *prefix;
-+      size_t (*list)(char *list, struct inode *inode, const char *name,
-+                     int name_len);
-+      int (*get)(struct inode *inode, const char *name, void *buffer,
-+                 size_t size);
-+      int (*set)(struct inode *inode, const char *name, const void *buffer,
-+                 size_t size, int flags);
-+};
-+
-+extern int ext2_xattr_register(int, struct ext2_xattr_handler *);
-+extern void ext2_xattr_unregister(int, struct ext2_xattr_handler *);
-+
-+extern int ext2_setxattr(struct dentry *, const char *, const void *, size_t, int);
-+extern ssize_t ext2_getxattr(struct dentry *, const char *, void *, size_t);
-+extern ssize_t ext2_listxattr(struct dentry *, char *, size_t);
-+extern int ext2_removexattr(struct dentry *, const char *);
-+
-+extern int ext2_xattr_get(struct inode *, int, const char *, void *, size_t);
-+extern int ext2_xattr_list(struct inode *, char *, size_t);
-+extern int ext2_xattr_set(struct inode *, int, const char *, const void *, size_t, int);
-+
-+extern void ext2_xattr_delete_inode(struct inode *);
-+extern void ext2_xattr_put_super(struct super_block *);
-+
-+extern int init_ext2_xattr(void) __init;
-+extern void exit_ext2_xattr(void);
-+
-+# else  /* CONFIG_EXT2_FS_XATTR */
-+#  define ext2_setxattr               NULL
-+#  define ext2_getxattr               NULL
-+#  define ext2_listxattr      NULL
-+#  define ext2_removexattr    NULL
-+
-+static inline int
-+ext2_xattr_get(struct inode *inode, int name_index,
-+             const char *name, void *buffer, size_t size)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext2_xattr_list(struct inode *inode, char *buffer, size_t size)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext2_xattr_set(struct inode *inode, int name_index, const char *name,
-+             const void *value, size_t size, int flags)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline void
-+ext2_xattr_delete_inode(struct inode *inode)
-+{
-+}
-+
-+static inline void
-+ext2_xattr_put_super(struct super_block *sb)
-+{
-+}
-+
-+static inline int
-+init_ext2_xattr(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext2_xattr(void)
-+{
-+}
-+
-+# endif  /* CONFIG_EXT2_FS_XATTR */
-+
-+# ifdef CONFIG_EXT2_FS_XATTR_USER
-+
-+extern int init_ext2_xattr_user(void) __init;
-+extern void exit_ext2_xattr_user(void);
-+
-+# else  /* CONFIG_EXT2_FS_XATTR_USER */
-+
-+static inline int
-+init_ext2_xattr_user(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext2_xattr_user(void)
-+{
-+}
-+
-+# endif  /* CONFIG_EXT2_FS_XATTR_USER */
-+
-+#endif  /* __KERNEL__ */
-+
---- linux-2.4.20/include/linux/ext3_fs.h~linux-2.4.20-xattr-0.8.54     2003-05-05 19:01:04.000000000 +0800
-+++ linux-2.4.20-root/include/linux/ext3_fs.h  2003-05-07 18:08:03.000000000 +0800
-@@ -63,8 +63,6 @@
-  */
- #define       EXT3_BAD_INO             1      /* Bad blocks inode */
- #define EXT3_ROOT_INO          2      /* Root inode */
--#define EXT3_ACL_IDX_INO       3      /* ACL inode */
--#define EXT3_ACL_DATA_INO      4      /* ACL inode */
- #define EXT3_BOOT_LOADER_INO   5      /* Boot loader inode */
- #define EXT3_UNDEL_DIR_INO     6      /* Undelete directory inode */
- #define EXT3_RESIZE_INO                7      /* Reserved group descriptors inode */
-@@ -94,7 +92,6 @@
- #else
- # define EXT3_BLOCK_SIZE(s)           (EXT3_MIN_BLOCK_SIZE << (s)->s_log_block_size)
- #endif
--#define EXT3_ACLE_PER_BLOCK(s)                (EXT3_BLOCK_SIZE(s) / sizeof (struct ext3_acl_entry))
- #define       EXT3_ADDR_PER_BLOCK(s)          (EXT3_BLOCK_SIZE(s) / sizeof (__u32))
- #ifdef __KERNEL__
- # define EXT3_BLOCK_SIZE_BITS(s)      ((s)->s_blocksize_bits)
-@@ -129,28 +126,6 @@
- #endif
- /*
-- * ACL structures
-- */
--struct ext3_acl_header        /* Header of Access Control Lists */
--{
--      __u32   aclh_size;
--      __u32   aclh_file_count;
--      __u32   aclh_acle_count;
--      __u32   aclh_first_acle;
--};
--
--struct ext3_acl_entry /* Access Control List Entry */
--{
--      __u32   acle_size;
--      __u16   acle_perms;     /* Access permissions */
--      __u16   acle_type;      /* Type of entry */
--      __u16   acle_tag;       /* User or group identity */
--      __u16   acle_pad1;
--      __u32   acle_next;      /* Pointer on next entry for the */
--                                      /* same inode or on next free entry */
--};
--
--/*
-  * Structure of a blocks group descriptor
-  */
- struct ext3_group_desc
-@@ -344,6 +319,7 @@ struct ext3_inode {
-   #define EXT3_MOUNT_WRITEBACK_DATA   0x0C00  /* No data ordering */
- #define EXT3_MOUNT_UPDATE_JOURNAL     0x1000  /* Update the journal format */
- #define EXT3_MOUNT_NO_UID32           0x2000  /* Disable 32-bit UIDs */
-+#define EXT3_MOUNT_XATTR_USER         0x4000  /* Extended user attributes */
- /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
- #ifndef _LINUX_EXT2_FS_H
-@@ -520,7 +496,7 @@ struct ext3_super_block {
- #define EXT3_FEATURE_INCOMPAT_RECOVER         0x0004 /* Needs recovery */
- #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008 /* Journal device */
--#define EXT3_FEATURE_COMPAT_SUPP      0
-+#define EXT3_FEATURE_COMPAT_SUPP      EXT2_FEATURE_COMPAT_EXT_ATTR
- #define EXT3_FEATURE_INCOMPAT_SUPP    (EXT3_FEATURE_INCOMPAT_FILETYPE| \
-                                        EXT3_FEATURE_INCOMPAT_RECOVER)
- #define EXT3_FEATURE_RO_COMPAT_SUPP   (EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-@@ -703,6 +679,7 @@ extern void ext3_check_inodes_bitmap (st
- extern unsigned long ext3_count_free (struct buffer_head *, unsigned);
- /* inode.c */
-+extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
- extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
- extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
-@@ -771,8 +748,10 @@ extern struct address_space_operations e
- /* namei.c */
- extern struct inode_operations ext3_dir_inode_operations;
-+extern struct inode_operations ext3_special_inode_operations;
- /* symlink.c */
-+extern struct inode_operations ext3_symlink_inode_operations;
- extern struct inode_operations ext3_fast_symlink_inode_operations;
---- linux-2.4.20/include/linux/ext3_jbd.h~linux-2.4.20-xattr-0.8.54    2003-05-05 19:01:02.000000000 +0800
-+++ linux-2.4.20-root/include/linux/ext3_jbd.h 2003-05-07 18:08:03.000000000 +0800
-@@ -30,13 +30,19 @@
- #define EXT3_SINGLEDATA_TRANS_BLOCKS  8
-+/* Extended attributes may touch two data buffers, two bitmap buffers,
-+ * and two group and summaries. */
-+
-+#define EXT3_XATTR_TRANS_BLOCKS               8
-+
- /* Define the minimum size for a transaction which modifies data.  This
-  * needs to take into account the fact that we may end up modifying two
-  * quota files too (one for the group, one for the user quota).  The
-  * superblock only gets updated once, of course, so don't bother
-  * counting that again for the quota updates. */
--#define EXT3_DATA_TRANS_BLOCKS                (3 * EXT3_SINGLEDATA_TRANS_BLOCKS - 2)
-+#define EXT3_DATA_TRANS_BLOCKS                (3 * EXT3_SINGLEDATA_TRANS_BLOCKS + \
-+                                       EXT3_XATTR_TRANS_BLOCKS - 2)
- extern int ext3_writepage_trans_blocks(struct inode *inode);
---- /dev/null  2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-root/include/linux/ext3_xattr.h       2003-05-07 18:08:03.000000000 +0800
-@@ -0,0 +1,157 @@
-+/*
-+  File: linux/ext3_xattr.h
-+
-+  On-disk format of extended attributes for the ext3 filesystem.
-+
-+  (C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+*/
-+
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/xattr.h>
-+
-+/* Magic value in attribute blocks */
-+#define EXT3_XATTR_MAGIC              0xEA020000
-+
-+/* Maximum number of references to one attribute block */
-+#define EXT3_XATTR_REFCOUNT_MAX               1024
-+
-+/* Name indexes */
-+#define EXT3_XATTR_INDEX_MAX                  10
-+#define EXT3_XATTR_INDEX_USER                 1
-+#define EXT3_XATTR_INDEX_POSIX_ACL_ACCESS     2
-+#define EXT3_XATTR_INDEX_POSIX_ACL_DEFAULT    3
-+
-+struct ext3_xattr_header {
-+      __u32   h_magic;        /* magic number for identification */
-+      __u32   h_refcount;     /* reference count */
-+      __u32   h_blocks;       /* number of disk blocks used */
-+      __u32   h_hash;         /* hash value of all attributes */
-+      __u32   h_reserved[4];  /* zero right now */
-+};
-+
-+struct ext3_xattr_entry {
-+      __u8    e_name_len;     /* length of name */
-+      __u8    e_name_index;   /* attribute name index */
-+      __u16   e_value_offs;   /* offset in disk block of value */
-+      __u32   e_value_block;  /* disk block attribute is stored on (n/i) */
-+      __u32   e_value_size;   /* size of attribute value */
-+      __u32   e_hash;         /* hash value of name and value */
-+      char    e_name[0];      /* attribute name */
-+};
-+
-+#define EXT3_XATTR_PAD_BITS           2
-+#define EXT3_XATTR_PAD                (1<<EXT3_XATTR_PAD_BITS)
-+#define EXT3_XATTR_ROUND              (EXT3_XATTR_PAD-1)
-+#define EXT3_XATTR_LEN(name_len) \
-+      (((name_len) + EXT3_XATTR_ROUND + \
-+      sizeof(struct ext3_xattr_entry)) & ~EXT3_XATTR_ROUND)
-+#define EXT3_XATTR_NEXT(entry) \
-+      ( (struct ext3_xattr_entry *)( \
-+        (char *)(entry) + EXT3_XATTR_LEN((entry)->e_name_len)) )
-+#define EXT3_XATTR_SIZE(size) \
-+      (((size) + EXT3_XATTR_ROUND) & ~EXT3_XATTR_ROUND)
-+
-+#ifdef __KERNEL__
-+
-+# ifdef CONFIG_EXT3_FS_XATTR
-+
-+struct ext3_xattr_handler {
-+      char *prefix;
-+      size_t (*list)(char *list, struct inode *inode, const char *name,
-+                     int name_len);
-+      int (*get)(struct inode *inode, const char *name, void *buffer,
-+                 size_t size);
-+      int (*set)(struct inode *inode, const char *name, const void *buffer,
-+                 size_t size, int flags);
-+};
-+
-+extern int ext3_xattr_register(int, struct ext3_xattr_handler *);
-+extern void ext3_xattr_unregister(int, struct ext3_xattr_handler *);
-+
-+extern int ext3_setxattr(struct dentry *, const char *, const void *, size_t, int);
-+extern ssize_t ext3_getxattr(struct dentry *, const char *, void *, size_t);
-+extern ssize_t ext3_listxattr(struct dentry *, char *, size_t);
-+extern int ext3_removexattr(struct dentry *, const char *);
-+
-+extern int ext3_xattr_get(struct inode *, int, const char *, void *, size_t);
-+extern int ext3_xattr_list(struct inode *, char *, size_t);
-+extern int ext3_xattr_set(handle_t *handle, struct inode *, int, const char *, const void *, size_t, int);
-+
-+extern void ext3_xattr_delete_inode(handle_t *, struct inode *);
-+extern void ext3_xattr_put_super(struct super_block *);
-+
-+extern int init_ext3_xattr(void) __init;
-+extern void exit_ext3_xattr(void);
-+
-+# else  /* CONFIG_EXT3_FS_XATTR */
-+#  define ext3_setxattr               NULL
-+#  define ext3_getxattr               NULL
-+#  define ext3_listxattr      NULL
-+#  define ext3_removexattr    NULL
-+
-+static inline int
-+ext3_xattr_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t size)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext3_xattr_list(struct inode *inode, void *buffer, size_t size)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext3_xattr_set(handle_t *handle, struct inode *inode, int name_index,
-+             const char *name, const void *value, size_t size, int flags)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline void
-+ext3_xattr_delete_inode(handle_t *handle, struct inode *inode)
-+{
-+}
-+
-+static inline void
-+ext3_xattr_put_super(struct super_block *sb)
-+{
-+}
-+
-+static inline int
-+init_ext3_xattr(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext3_xattr(void)
-+{
-+}
-+
-+# endif  /* CONFIG_EXT3_FS_XATTR */
-+
-+# ifdef CONFIG_EXT3_FS_XATTR_USER
-+
-+extern int init_ext3_xattr_user(void) __init;
-+extern void exit_ext3_xattr_user(void);
-+
-+# else  /* CONFIG_EXT3_FS_XATTR_USER */
-+
-+static inline int
-+init_ext3_xattr_user(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext3_xattr_user(void)
-+{
-+}
-+
-+#endif  /* CONFIG_EXT3_FS_XATTR_USER */
-+
-+#endif  /* __KERNEL__ */
-+
---- linux-2.4.20/include/linux/fs.h~linux-2.4.20-xattr-0.8.54  2003-05-05 19:00:55.000000000 +0800
-+++ linux-2.4.20-root/include/linux/fs.h       2003-05-07 18:08:03.000000000 +0800
-@@ -888,7 +888,7 @@ struct inode_operations {
-       int (*setattr) (struct dentry *, struct iattr *);
-       int (*setattr_raw) (struct inode *, struct iattr *);
-       int (*getattr) (struct dentry *, struct iattr *);
--      int (*setxattr) (struct dentry *, const char *, void *, size_t, int);
-+      int (*setxattr) (struct dentry *, const char *, const void *, size_t, int);
-       ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
-       ssize_t (*listxattr) (struct dentry *, char *, size_t);
-       int (*removexattr) (struct dentry *, const char *);
---- /dev/null  2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-root/include/linux/mbcache.h  2003-05-07 18:08:03.000000000 +0800
-@@ -0,0 +1,69 @@
-+/*
-+  File: linux/mbcache.h
-+
-+  (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+*/
-+
-+/* Hardwire the number of additional indexes */
-+#define MB_CACHE_INDEXES_COUNT 1
-+
-+struct mb_cache_entry;
-+
-+struct mb_cache_op {
-+      int (*free)(struct mb_cache_entry *, int);
-+};
-+
-+struct mb_cache {
-+      struct list_head                c_cache_list;
-+      const char                      *c_name;
-+      struct mb_cache_op              c_op;
-+      atomic_t                        c_entry_count;
-+      int                             c_bucket_count;
-+#ifndef MB_CACHE_INDEXES_COUNT
-+      int                             c_indexes_count;
-+#endif
-+      kmem_cache_t                    *c_entry_cache;
-+      struct list_head                *c_block_hash;
-+      struct list_head                *c_indexes_hash[0];
-+};
-+
-+struct mb_cache_entry_index {
-+      struct list_head                o_list;
-+      unsigned int                    o_key;
-+};
-+
-+struct mb_cache_entry {
-+      struct list_head                e_lru_list;
-+      struct mb_cache                 *e_cache;
-+      atomic_t                        e_used;
-+      kdev_t                          e_dev;
-+      unsigned long                   e_block;
-+      struct list_head                e_block_list;
-+      struct mb_cache_entry_index     e_indexes[0];
-+};
-+
-+/* Functions on caches */
-+
-+struct mb_cache * mb_cache_create(const char *, struct mb_cache_op *, size_t,
-+                                int, int);
-+void mb_cache_shrink(struct mb_cache *, kdev_t);
-+void mb_cache_destroy(struct mb_cache *);
-+
-+/* Functions on cache entries */
-+
-+struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *);
-+int mb_cache_entry_insert(struct mb_cache_entry *, kdev_t, unsigned long,
-+                        unsigned int[]);
-+void mb_cache_entry_rehash(struct mb_cache_entry *, unsigned int[]);
-+void mb_cache_entry_release(struct mb_cache_entry *);
-+void mb_cache_entry_takeout(struct mb_cache_entry *);
-+void mb_cache_entry_free(struct mb_cache_entry *);
-+struct mb_cache_entry *mb_cache_entry_dup(struct mb_cache_entry *);
-+struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *, kdev_t,
-+                                        unsigned long);
-+#if !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0)
-+struct mb_cache_entry *mb_cache_entry_find_first(struct mb_cache *cache, int,
-+                                               kdev_t, unsigned int);
-+struct mb_cache_entry *mb_cache_entry_find_next(struct mb_cache_entry *, int,
-+                                              kdev_t, unsigned int);
-+#endif
---- linux-2.4.20/kernel/ksyms.c~linux-2.4.20-xattr-0.8.54      2003-05-05 17:43:15.000000000 +0800
-+++ linux-2.4.20-root/kernel/ksyms.c   2003-05-07 18:08:03.000000000 +0800
-@@ -11,6 +11,7 @@
- #include <linux/config.h>
- #include <linux/slab.h>
-+#include <linux/cache_def.h>
- #include <linux/module.h>
- #include <linux/blkdev.h>
- #include <linux/cdrom.h>
-@@ -89,6 +90,7 @@ EXPORT_SYMBOL(exit_mm);
- EXPORT_SYMBOL(exit_files);
- EXPORT_SYMBOL(exit_fs);
- EXPORT_SYMBOL(exit_sighand);
-+EXPORT_SYMBOL(copy_fs_struct);
- /* internal kernel memory management */
- EXPORT_SYMBOL(_alloc_pages);
-@@ -107,6 +109,8 @@ EXPORT_SYMBOL(kmem_cache_validate);
- EXPORT_SYMBOL(kmem_cache_alloc);
- EXPORT_SYMBOL(kmem_cache_free);
- EXPORT_SYMBOL(kmem_cache_size);
-+EXPORT_SYMBOL(register_cache);
-+EXPORT_SYMBOL(unregister_cache);
- EXPORT_SYMBOL(kmalloc);
- EXPORT_SYMBOL(kfree);
- EXPORT_SYMBOL(vfree);
---- linux-2.4.20/mm/vmscan.c~linux-2.4.20-xattr-0.8.54 2002-11-29 07:53:15.000000000 +0800
-+++ linux-2.4.20-root/mm/vmscan.c      2003-05-07 18:08:03.000000000 +0800
-@@ -18,6 +18,7 @@
- #include <linux/kernel_stat.h>
- #include <linux/swap.h>
- #include <linux/swapctl.h>
-+#include <linux/cache_def.h>
- #include <linux/smp_lock.h>
- #include <linux/pagemap.h>
- #include <linux/init.h>
-@@ -34,6 +35,39 @@
-  */
- #define DEF_PRIORITY (6)
-+static DECLARE_MUTEX(other_caches_sem);
-+static LIST_HEAD(cache_definitions);
-+
-+void register_cache(struct cache_definition *cache)
-+{
-+      down(&other_caches_sem);
-+      list_add(&cache->link, &cache_definitions);
-+      up(&other_caches_sem);
-+}
-+
-+void unregister_cache(struct cache_definition *cache)
-+{
-+      down(&other_caches_sem);
-+      list_del(&cache->link);
-+      up(&other_caches_sem);
-+}
-+
-+static void shrink_other_caches(unsigned int priority, int gfp_mask)
-+{
-+      struct list_head *p;
-+
-+      if (down_trylock(&other_caches_sem))
-+              return;
-+
-+      list_for_each_prev(p, &cache_definitions) {
-+              struct cache_definition *cache =
-+                      list_entry(p, struct cache_definition, link);
-+
-+              cache->shrink(priority, gfp_mask);
-+      }
-+      up(&other_caches_sem);
-+}
-+
- /*
-  * The swap-out function returns 1 if it successfully
-  * scanned all the pages it was asked to (`count').
-@@ -577,6 +611,7 @@ static int shrink_caches(zone_t * classz
-       shrink_dcache_memory(priority, gfp_mask);
-       shrink_icache_memory(priority, gfp_mask);
-+      shrink_other_caches(priority, gfp_mask);
- #ifdef CONFIG_QUOTA
-       shrink_dqcache_memory(DEF_PRIORITY, gfp_mask);
- #endif
---- /dev/null  2003-01-30 18:24:37.000000000 +0800
-+++ linux-root/fs/ext3/ext3-exports.c  2003-05-05 18:19:11.000000000 +0800
-@@ -0,0 +1,13 @@
-+#include <linux/config.h>
-+#include <linux/module.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
-+
-+EXPORT_SYMBOL(ext3_force_commit);
-+EXPORT_SYMBOL(ext3_bread);
-+EXPORT_SYMBOL(ext3_xattr_register);
-+EXPORT_SYMBOL(ext3_xattr_unregister);
-+EXPORT_SYMBOL(ext3_xattr_get);
-+EXPORT_SYMBOL(ext3_xattr_list);
-+EXPORT_SYMBOL(ext3_xattr_set);
-
-_
index e18ac9d..8e198f8 100644 (file)
@@ -1315,7 +1315,7 @@ Index: linux-2.4.21-chaos/fs/ext2/xattr.c
 +              } else if (old_bh && header == HDR(old_bh)) {
 +                      /* Keep this block. */
 +                      new_bh = old_bh;
-+                      ext2_xattr_cache_insert(new_bh);
++                      (void)ext2_xattr_cache_insert(new_bh);
 +              } else {
 +                      /* We need to allocate a new block */
 +                      int force = EXT2_I(inode)->i_file_acl != 0;
@@ -1334,7 +1334,7 @@ Index: linux-2.4.21-chaos/fs/ext2/xattr.c
 +                      memcpy(new_bh->b_data, header, new_bh->b_size);
 +                      mark_buffer_uptodate(new_bh, 1);
 +                      unlock_buffer(new_bh);
-+                      ext2_xattr_cache_insert(new_bh);
++                      (void)ext2_xattr_cache_insert(new_bh);
 +                      
 +                      ext2_xattr_update_super_block(sb);
 +              }
index 22dad3c..da8c15c 100644 (file)
 +              } else if (old_bh && header == HDR(old_bh)) {
 +                      /* Keep this block. */
 +                      new_bh = old_bh;
-+                      ext2_xattr_cache_insert(new_bh);
++                      (void)ext2_xattr_cache_insert(new_bh);
 +              } else {
 +                      /* We need to allocate a new block */
 +                      int force = EXT2_I(inode)->i_file_acl != 0;
 +                      memcpy(new_bh->b_data, header, new_bh->b_size);
 +                      mark_buffer_uptodate(new_bh, 1);
 +                      unlock_buffer(new_bh);
-+                      ext2_xattr_cache_insert(new_bh);
++                      (void)ext2_xattr_cache_insert(new_bh);
 +                      
 +                      ext2_xattr_update_super_block(sb);
 +              }
 +              } else if (old_bh && header == HDR(old_bh)) {
 +                      /* Keep this block. */
 +                      new_bh = old_bh;
-+                      ext3_xattr_cache_insert(new_bh);
++                      (void)ext3_xattr_cache_insert(new_bh);
 +              } else {
 +                      /* We need to allocate a new block */
 +                      int force = EXT3_I(inode)->i_file_acl != 0;
 +                      memcpy(new_bh->b_data, header, new_bh->b_size);
 +                      mark_buffer_uptodate(new_bh, 1);
 +                      unlock_buffer(new_bh);
-+                      ext3_xattr_cache_insert(new_bh);
++                      (void)ext3_xattr_cache_insert(new_bh);
 +                      
 +                      ext3_xattr_update_super_block(handle, sb);
 +              }
diff --git a/lustre/kernel_patches/patches/linux-2.4.22-xattr-0.8.54.patch b/lustre/kernel_patches/patches/linux-2.4.22-xattr-0.8.54.patch
deleted file mode 100644 (file)
index b63cc2e..0000000
+++ /dev/null
@@ -1,5466 +0,0 @@
- Documentation/Configure.help  |   66 ++
- arch/alpha/defconfig          |    7 
- arch/alpha/kernel/entry.S     |   12 
- arch/arm/defconfig            |    7 
- arch/arm/kernel/calls.S       |   24 
- arch/i386/defconfig           |    7 
- arch/ia64/defconfig           |    7 
- arch/ia64/kernel/entry.S      |   24 
- arch/m68k/defconfig           |    7 
- arch/mips/defconfig           |    7 
- arch/mips64/defconfig         |    7 
- arch/ppc/defconfig            |   14 
- arch/ppc64/kernel/misc.S      |    2 
- arch/s390/defconfig           |    7 
- arch/s390/kernel/entry.S      |   24 
- arch/s390x/defconfig          |    7 
- arch/s390x/kernel/entry.S     |   24 
- arch/s390x/kernel/wrapper32.S |   92 +++
- arch/sparc/defconfig          |    7 
- arch/sparc/kernel/systbls.S   |   10 
- arch/sparc64/defconfig        |    7 
- arch/sparc64/kernel/systbls.S |   20 
- fs/Config.in                  |   14 
- fs/Makefile                   |    3 
- fs/ext2/Makefile              |    4 
- fs/ext2/file.c                |    5 
- fs/ext2/ialloc.c              |    2 
- fs/ext2/inode.c               |   34 -
- fs/ext2/namei.c               |   14 
- fs/ext2/super.c               |   29 
- fs/ext2/symlink.c             |   14 
- fs/ext2/xattr.c               | 1212 +++++++++++++++++++++++++++++++++++++++++
- fs/ext2/xattr_user.c          |  103 +++
- fs/ext3/Makefile              |   10 
- fs/ext3/file.c                |    5 
- fs/ext3/ialloc.c              |    2 
- fs/ext3/inode.c               |   35 -
- fs/ext3/namei.c               |   21 
- fs/ext3/super.c               |   36 +
- fs/ext3/symlink.c             |   14 
- fs/ext3/xattr.c               | 1225 ++++++++++++++++++++++++++++++++++++++++++
- fs/ext3/xattr_user.c          |  111 +++
- fs/jfs/jfs_xattr.h            |    6 
- fs/jfs/xattr.c                |    6 
- fs/mbcache.c                  |  648 ++++++++++++++++++++++
- include/asm-arm/unistd.h      |    2 
- include/asm-ia64/unistd.h     |   13 
- include/asm-ppc64/unistd.h    |    2 
- include/asm-s390/unistd.h     |   15 
- include/asm-s390x/unistd.h    |   15 
- include/asm-sparc/unistd.h    |   24 
- include/asm-sparc64/unistd.h  |   24 
- include/linux/cache_def.h     |   15 
- include/linux/errno.h         |    4 
- include/linux/ext2_fs.h       |   31 -
- include/linux/ext2_xattr.h    |  157 +++++
- include/linux/ext3_fs.h       |   31 -
- include/linux/ext3_jbd.h      |    8 
- include/linux/ext3_xattr.h    |  157 +++++
- include/linux/fs.h            |    2 
- include/linux/mbcache.h       |   69 ++
- kernel/ksyms.c                |    4 
- mm/vmscan.c                   |   35 +
- fs/ext3/ext3-exports.c        |   14 +  
- 64 files changed, 4355 insertions(+), 195 deletions(-)
-
-Index: linux-2.4.22-vanilla/Documentation/Configure.help
-===================================================================
---- linux-2.4.22-vanilla.orig/Documentation/Configure.help     2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/Documentation/Configure.help  2003-12-02 23:55:38.000000000 +0300
-@@ -15613,6 +15613,39 @@
-   be compiled as a module, and so this could be dangerous.  Most
-   everyone wants to say Y here.
-+Ext2 extended attributes
-+CONFIG_EXT2_FS_XATTR
-+  Extended attributes are name:value pairs associated with inodes by
-+  the kernel or by users (see the attr(5) manual page, or visit
-+  <http://acl.bestbits.at/> for details).
-+
-+  If unsure, say N.
-+
-+Ext2 extended attribute block sharing
-+CONFIG_EXT2_FS_XATTR_SHARING
-+  This options enables code for sharing identical extended attribute
-+  blocks among multiple inodes.
-+
-+  Usually, say Y.
-+
-+Ext2 extended user attributes
-+CONFIG_EXT2_FS_XATTR_USER
-+  This option enables extended user attributes on ext2. Processes can
-+  associate extended user attributes with inodes to store additional
-+  information such as the character encoding of files, etc. (see the
-+  attr(5) manual page, or visit <http://acl.bestbits.at/> for details).
-+
-+  If unsure, say N.
-+
-+Ext2 trusted extended attributes
-+CONFIG_EXT2_FS_XATTR_TRUSTED
-+  This option enables extended attributes on ext2 that are accessible
-+  (and visible) only to users capable of CAP_SYS_ADMIN. Usually this
-+  is only the super user. Trusted extended attributes are meant for
-+  implementing system/security services.
-+
-+  If unsure, say N.
-+
- Ext3 journalling file system support (EXPERIMENTAL)
- CONFIG_EXT3_FS
-   This is the journalling version of the Second extended file system
-@@ -15645,6 +15678,39 @@
-   of your root partition (the one containing the directory /) cannot
-   be compiled as a module, and so this may be dangerous.
-+Ext3 extended attributes
-+CONFIG_EXT3_FS_XATTR
-+  Extended attributes are name:value pairs associated with inodes by
-+  the kernel or by users (see the attr(5) manual page, or visit
-+  <http://acl.bestbits.at/> for details).
-+
-+  If unsure, say N.
-+
-+Ext3 extended attribute block sharing
-+CONFIG_EXT3_FS_XATTR_SHARING
-+  This options enables code for sharing identical extended attribute
-+  blocks among multiple inodes.
-+
-+  Usually, say Y.
-+
-+Ext3 extended user attributes
-+CONFIG_EXT3_FS_XATTR_USER
-+  This option enables extended user attributes on ext3. Processes can
-+  associate extended user attributes with inodes to store additional
-+  information such as the character encoding of files, etc. (see the
-+  attr(5) manual page, or visit <http://acl.bestbits.at/> for details).
-+
-+  If unsure, say N.
-+
-+Ext3 trusted extended attributes
-+CONFIG_EXT3_FS_XATTR_TRUSTED
-+  This option enables extended attributes on ext3 that are accessible
-+  (and visible) only to users capable of CAP_SYS_ADMIN. Usually this
-+  is only the super user. Trusted extended attributes are meant for
-+  implementing system/security services.
-+
-+  If unsure, say N.
-+
- Journal Block Device support (JBD for ext3) (EXPERIMENTAL)
- CONFIG_JBD
-   This is a generic journalling layer for block devices.  It is
-Index: linux-2.4.22-vanilla/arch/alpha/defconfig
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/alpha/defconfig     2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/alpha/defconfig  2003-12-02 23:55:38.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_ALPHA=y
- # CONFIG_UID16 is not set
- # CONFIG_RWSEM_GENERIC_SPINLOCK is not set
-Index: linux-2.4.22-vanilla/arch/alpha/kernel/entry.S
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/alpha/kernel/entry.S        2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/alpha/kernel/entry.S     2003-12-02 23:55:38.000000000 +0300
-@@ -1154,6 +1154,18 @@
-       .quad sys_readahead
-       .quad sys_ni_syscall                    /* 380, sys_security */
-       .quad sys_tkill
-+      .quad sys_setxattr
-+      .quad sys_lsetxattr
-+      .quad sys_fsetxattr
-+      .quad sys_getxattr                      /* 385 */
-+      .quad sys_lgetxattr
-+      .quad sys_fgetxattr
-+      .quad sys_listxattr
-+      .quad sys_llistxattr
-+      .quad sys_flistxattr                    /* 390 */
-+      .quad sys_removexattr
-+      .quad sys_lremovexattr
-+      .quad sys_fremovexattr
- /* Remember to update everything, kids.  */
- .ifne (. - sys_call_table) - (NR_SYSCALLS * 8)
-Index: linux-2.4.22-vanilla/arch/arm/defconfig
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/arm/defconfig       2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/arm/defconfig    2003-12-02 23:55:38.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_ARM=y
- # CONFIG_EISA is not set
- # CONFIG_SBUS is not set
-Index: linux-2.4.22-vanilla/arch/arm/kernel/calls.S
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/arm/kernel/calls.S  2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/arm/kernel/calls.S       2003-12-02 23:55:38.000000000 +0300
-@@ -240,18 +240,18 @@
-               .long   SYMBOL_NAME(sys_ni_syscall) /* Security */
-               .long   SYMBOL_NAME(sys_gettid)
- /* 225 */     .long   SYMBOL_NAME(sys_readahead)
--              .long   SYMBOL_NAME(sys_ni_syscall) /* setxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* lsetxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* fsetxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* getxattr */
--/* 230 */     .long   SYMBOL_NAME(sys_ni_syscall) /* lgetxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* fgetxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* listxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* llistxattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* flistxattr */
--/* 235 */     .long   SYMBOL_NAME(sys_ni_syscall) /* removexattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* lremovexattr */
--              .long   SYMBOL_NAME(sys_ni_syscall) /* fremovexattr */
-+              .long   SYMBOL_NAME(sys_setxattr)
-+              .long   SYMBOL_NAME(sys_lsetxattr)
-+              .long   SYMBOL_NAME(sys_fsetxattr)
-+              .long   SYMBOL_NAME(sys_getxattr)
-+/* 230 */     .long   SYMBOL_NAME(sys_lgetxattr)
-+              .long   SYMBOL_NAME(sys_fgetxattr)
-+              .long   SYMBOL_NAME(sys_listxattr)
-+              .long   SYMBOL_NAME(sys_llistxattr)
-+              .long   SYMBOL_NAME(sys_flistxattr)
-+/* 235 */     .long   SYMBOL_NAME(sys_removexattr)
-+              .long   SYMBOL_NAME(sys_lremovexattr)
-+              .long   SYMBOL_NAME(sys_fremovexattr)
-               .long   SYMBOL_NAME(sys_tkill)
-               .long   SYMBOL_NAME(sys_ni_syscall) /* sendfile64 */
- /* 240 */     .long   SYMBOL_NAME(sys_ni_syscall) /* futex */
-Index: linux-2.4.22-vanilla/arch/i386/defconfig
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/i386/defconfig      2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/i386/defconfig   2003-12-02 23:55:38.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_X86=y
- CONFIG_ISA=y
- # CONFIG_SBUS is not set
-Index: linux-2.4.22-vanilla/arch/ia64/defconfig
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/ia64/defconfig      2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/ia64/defconfig   2003-12-02 23:55:38.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- #
- # Code maturity level options
-Index: linux-2.4.22-vanilla/arch/m68k/defconfig
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/m68k/defconfig      2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/m68k/defconfig   2003-12-02 23:55:38.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_UID16=y
- #
-Index: linux-2.4.22-vanilla/arch/mips/defconfig
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/mips/defconfig      2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/mips/defconfig   2003-12-02 23:55:38.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_MIPS=y
- CONFIG_MIPS32=y
- # CONFIG_MIPS64 is not set
-Index: linux-2.4.22-vanilla/arch/mips64/defconfig
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/mips64/defconfig    2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/mips64/defconfig 2003-12-02 23:55:38.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- CONFIG_MIPS=y
- # CONFIG_MIPS32 is not set
- CONFIG_MIPS64=y
-Index: linux-2.4.22-vanilla/arch/s390/defconfig
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/s390/defconfig      2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/s390/defconfig   2003-12-02 23:55:38.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- # CONFIG_ISA is not set
- # CONFIG_EISA is not set
- # CONFIG_MCA is not set
-Index: linux-2.4.22-vanilla/arch/s390/kernel/entry.S
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/s390/kernel/entry.S 2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/s390/kernel/entry.S      2003-12-02 23:55:38.000000000 +0300
-@@ -558,18 +558,18 @@
-         .long  sys_fcntl64 
-       .long  sys_readahead
-       .long  sys_ni_syscall
--      .long  sys_ni_syscall            /* 224 - reserved for setxattr  */
--      .long  sys_ni_syscall            /* 225 - reserved for lsetxattr */
--      .long  sys_ni_syscall            /* 226 - reserved for fsetxattr */
--      .long  sys_ni_syscall            /* 227 - reserved for getxattr  */
--      .long  sys_ni_syscall            /* 228 - reserved for lgetxattr */
--      .long  sys_ni_syscall            /* 229 - reserved for fgetxattr */
--      .long  sys_ni_syscall            /* 230 - reserved for listxattr */
--      .long  sys_ni_syscall            /* 231 - reserved for llistxattr */
--      .long  sys_ni_syscall            /* 232 - reserved for flistxattr */
--      .long  sys_ni_syscall            /* 233 - reserved for removexattr */
--      .long  sys_ni_syscall            /* 234 - reserved for lremovexattr */
--      .long  sys_ni_syscall            /* 235 - reserved for fremovexattr */
-+      .long  sys_setxattr
-+      .long  sys_lsetxattr            /* 225 */
-+      .long  sys_fsetxattr
-+      .long  sys_getxattr
-+      .long  sys_lgetxattr
-+      .long  sys_fgetxattr
-+      .long  sys_listxattr            /* 230 */
-+      .long  sys_llistxattr
-+      .long  sys_flistxattr
-+      .long  sys_removexattr
-+      .long  sys_lremovexattr
-+      .long  sys_fremovexattr         /* 235 */
-       .long  sys_gettid
-       .long  sys_tkill
-       .rept  255-237
-Index: linux-2.4.22-vanilla/arch/s390x/defconfig
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/s390x/defconfig     2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/s390x/defconfig  2003-12-02 23:55:38.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- # CONFIG_ISA is not set
- # CONFIG_EISA is not set
- # CONFIG_MCA is not set
-Index: linux-2.4.22-vanilla/arch/s390x/kernel/entry.S
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/s390x/kernel/entry.S        2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/s390x/kernel/entry.S     2003-12-02 23:55:38.000000000 +0300
-@@ -591,18 +591,18 @@
-       .long  SYSCALL(sys_ni_syscall,sys32_fcntl64_wrapper)
-       .long  SYSCALL(sys_readahead,sys32_readahead)
-       .long  SYSCALL(sys_ni_syscall,sys_ni_syscall)
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 224 - reserved for setxattr  */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 225 - reserved for lsetxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 226 - reserved for fsetxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 227 - reserved for getxattr  */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 228 - reserved for lgetxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 229 - reserved for fgetxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 230 - reserved for listxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 231 - reserved for llistxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 232 - reserved for flistxattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 233 - reserved for removexattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 234 - reserved for lremovexattr */
--      .long  SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 235 - reserved for fremovexattr */
-+      .long  SYSCALL(sys_setxattr,sys32_setxattr_wrapper)
-+      .long  SYSCALL(sys_lsetxattr,sys32_lsetxattr_wrapper)   /* 225 */
-+      .long  SYSCALL(sys_fsetxattr,sys32_fsetxattr_wrapper)
-+      .long  SYSCALL(sys_getxattr,sys32_getxattr_wrapper)
-+      .long  SYSCALL(sys_lgetxattr,sys32_lgetxattr_wrapper)
-+      .long  SYSCALL(sys_fgetxattr,sys32_fgetxattr_wrapper)
-+      .long  SYSCALL(sys_listxattr,sys32_listxattr_wrapper)   /* 230 */
-+      .long  SYSCALL(sys_llistxattr,sys32_llistxattr_wrapper)
-+      .long  SYSCALL(sys_flistxattr,sys32_flistxattr_wrapper)
-+      .long  SYSCALL(sys_removexattr,sys32_removexattr_wrapper)
-+      .long  SYSCALL(sys_lremovexattr,sys32_lremovexattr_wrapper)
-+      .long  SYSCALL(sys_fremovexattr,sys32_fremovexattr_wrapper)/* 235 */
-       .long  SYSCALL(sys_gettid,sys_gettid)
-       .long  SYSCALL(sys_tkill,sys_tkill)
-       .rept  255-237
-Index: linux-2.4.22-vanilla/arch/s390x/kernel/wrapper32.S
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/s390x/kernel/wrapper32.S    2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/s390x/kernel/wrapper32.S 2003-12-02 23:55:38.000000000 +0300
-@@ -1098,6 +1098,98 @@
-       llgfr   %r4,%r4                 # long
-       jg      sys32_fstat64           # branch to system call
-+      .globl  sys32_setxattr_wrapper
-+sys32_setxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      lgfr    %r6,%r6                 # int
-+      jg      sys_setxattr
-+
-+      .globl  sys32_lsetxattr_wrapper
-+sys32_lsetxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      lgfr    %r6,%r6                 # int
-+      jg      sys_lsetxattr
-+
-+      .globl  sys32_fsetxattr_wrapper
-+sys32_fsetxattr_wrapper:
-+      lgfr    %r2,%r2                 # int
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      lgfr    %r6,%r6                 # int
-+      jg      sys_fsetxattr
-+
-+      .globl  sys32_getxattr_wrapper
-+sys32_getxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      jg      sys_getxattr
-+
-+      .globl  sys32_lgetxattr_wrapper
-+sys32_lgetxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      jg      sys_lgetxattr
-+
-+      .globl  sys32_fgetxattr_wrapper
-+sys32_fgetxattr_wrapper:
-+      lgfr    %r2,%r2                 # int
-+      llgtr   %r3,%r3                 # char *
-+      llgtr   %r4,%r4                 # void *
-+      llgfr   %r5,%r5                 # size_t
-+      jg      sys_fgetxattr
-+
-+      .globl  sys32_listxattr_wrapper
-+sys32_listxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgfr   %r4,%r4                 # size_t
-+      jg      sys_listxattr
-+
-+      .globl  sys32_llistxattr_wrapper
-+sys32_llistxattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      llgfr   %r4,%r4                 # size_t
-+      jg      sys_llistxattr
-+
-+      .globl  sys32_flistxattr_wrapper
-+sys32_flistxattr_wrapper:
-+      lgfr    %r2,%r2                 # int
-+      llgtr   %r3,%r3                 # char *
-+      llgfr   %r4,%r4                 # size_t
-+      jg      sys_flistxattr
-+
-+      .globl  sys32_removexattr_wrapper
-+sys32_removexattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      jg      sys_removexattr
-+
-+      .globl  sys32_lremovexattr_wrapper
-+sys32_lremovexattr_wrapper:
-+      llgtr   %r2,%r2                 # char *
-+      llgtr   %r3,%r3                 # char *
-+      jg      sys_lremovexattr
-+
-+      .globl  sys32_fremovexattr_wrapper
-+sys32_fremovexattr_wrapper:
-+      lgfr    %r2,%r2                 # int
-+      llgtr   %r3,%r3                 # char *
-+      jg      sys_fremovexattr
-+
-+
-+
-       .globl  sys32_stime_wrapper
- sys32_stime_wrapper:
-       llgtr   %r2,%r2                 # int *
-Index: linux-2.4.22-vanilla/arch/sparc64/defconfig
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/sparc64/defconfig   2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/sparc64/defconfig        2003-12-02 23:55:38.000000000 +0300
-@@ -1,6 +1,13 @@
- #
- # Automatically generated make config: don't edit
- #
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_XATTR_SHARING is not set
-+# CONFIG_EXT3_FS_XATTR_USER is not set
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XATTR_SHARING is not set
-+# CONFIG_EXT2_FS_XATTR_USER is not set
-+# CONFIG_FS_MBCACHE is not set
- #
- # Code maturity level options
-Index: linux-2.4.22-vanilla/fs/Config.in
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/Config.in     2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/Config.in  2003-12-02 23:55:38.000000000 +0300
-@@ -29,6 +29,11 @@
- dep_tristate 'BFS file system support (EXPERIMENTAL)' CONFIG_BFS_FS $CONFIG_EXPERIMENTAL
- tristate 'Ext3 journalling file system support' CONFIG_EXT3_FS
-+dep_mbool '  Ext3 extended attributes' CONFIG_EXT3_FS_XATTR $CONFIG_EXT3_FS
-+dep_bool '    Ext3 extended attribute block sharing' \
-+    CONFIG_EXT3_FS_XATTR_SHARING $CONFIG_EXT3_FS_XATTR
-+dep_bool '    Ext3 extended user attributes' \
-+    CONFIG_EXT3_FS_XATTR_USER $CONFIG_EXT3_FS_XATTR
- # CONFIG_JBD could be its own option (even modular), but until there are
- # other users than ext3, we will simply make it be the same as CONFIG_EXT3_FS
- # dep_tristate '  Journal Block Device support (JBD for ext3)' CONFIG_JBD $CONFIG_EXT3_FS
-@@ -88,6 +93,11 @@
- tristate 'ROM file system support' CONFIG_ROMFS_FS
- tristate 'Second extended fs support' CONFIG_EXT2_FS
-+dep_mbool '  Ext2 extended attributes' CONFIG_EXT2_FS_XATTR $CONFIG_EXT2_FS
-+dep_bool '    Ext2 extended attribute block sharing' \
-+    CONFIG_EXT2_FS_XATTR_SHARING $CONFIG_EXT2_FS_XATTR
-+dep_bool '    Ext2 extended user attributes' \
-+    CONFIG_EXT2_FS_XATTR_USER $CONFIG_EXT2_FS_XATTR
- tristate 'System V/Xenix/V7/Coherent file system support' CONFIG_SYSV_FS
-@@ -160,6 +170,10 @@
-    define_tristate CONFIG_ZISOFS_FS n
- fi
-+# Meta block cache for Extended Attributes (ext2/ext3)
-+#tristate 'Meta block cache' CONFIG_FS_MBCACHE
-+define_tristate CONFIG_FS_MBCACHE y 
-+
- mainmenu_option next_comment
- comment 'Partition Types'
- source fs/partitions/Config.in
-Index: linux-2.4.22-vanilla/fs/Makefile
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/Makefile      2003-12-02 23:55:36.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/Makefile   2003-12-02 23:55:38.000000000 +0300
-@@ -77,6 +77,9 @@
- obj-$(CONFIG_BINFMT_ELF)      += binfmt_elf.o
-+export-objs += mbcache.o
-+obj-$(CONFIG_FS_MBCACHE)      += mbcache.o
-+
- # persistent filesystems
- obj-y += $(join $(subdir-y),$(subdir-y:%=/%.o))
-Index: linux-2.4.22-vanilla/fs/ext2/Makefile
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext2/Makefile 2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext2/Makefile      2003-12-02 23:55:38.000000000 +0300
-@@ -13,4 +13,8 @@
-               ioctl.o namei.o super.o symlink.o
- obj-m    := $(O_TARGET)
-+export-objs += xattr.o
-+obj-$(CONFIG_EXT2_FS_XATTR) += xattr.o
-+obj-$(CONFIG_EXT2_FS_XATTR_USER) += xattr_user.o
-+
- include $(TOPDIR)/Rules.make
-Index: linux-2.4.22-vanilla/fs/ext2/file.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext2/file.c   2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext2/file.c        2003-12-02 23:55:38.000000000 +0300
-@@ -20,6 +20,7 @@
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- #include <linux/sched.h>
- /*
-@@ -51,4 +52,8 @@
- struct inode_operations ext2_file_inode_operations = {
-       truncate:       ext2_truncate,
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
- };
-Index: linux-2.4.22-vanilla/fs/ext2/ialloc.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext2/ialloc.c 2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext2/ialloc.c      2003-12-02 23:55:38.000000000 +0300
-@@ -15,6 +15,7 @@
- #include <linux/config.h>
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- #include <linux/locks.h>
- #include <linux/quotaops.h>
-@@ -167,6 +168,7 @@
-        */
-       if (!is_bad_inode(inode)) {
-               /* Quota is already initialized in iput() */
-+              ext2_xattr_delete_inode(inode);
-               DQUOT_FREE_INODE(inode);
-               DQUOT_DROP(inode);
-       }
-Index: linux-2.4.22-vanilla/fs/ext2/inode.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext2/inode.c  2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext2/inode.c       2003-12-02 23:55:38.000000000 +0300
-@@ -39,6 +39,18 @@
- static int ext2_update_inode(struct inode * inode, int do_sync);
- /*
-+ * Test whether an inode is a fast symlink.
-+ */
-+static inline int ext2_inode_is_fast_symlink(struct inode *inode)
-+{
-+      int ea_blocks = inode->u.ext2_i.i_file_acl ?
-+              (inode->i_sb->s_blocksize >> 9) : 0;
-+
-+      return (S_ISLNK(inode->i_mode) &&
-+              inode->i_blocks - ea_blocks == 0);
-+}
-+
-+/*
-  * Called at each iput()
-  */
- void ext2_put_inode (struct inode * inode)
-@@ -53,9 +65,7 @@
- {
-       lock_kernel();
--      if (is_bad_inode(inode) ||
--          inode->i_ino == EXT2_ACL_IDX_INO ||
--          inode->i_ino == EXT2_ACL_DATA_INO)
-+      if (is_bad_inode(inode))
-               goto no_delete;
-       inode->u.ext2_i.i_dtime = CURRENT_TIME;
-       mark_inode_dirty(inode);
-@@ -801,6 +811,8 @@
-       if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
-           S_ISLNK(inode->i_mode)))
-               return;
-+      if (ext2_inode_is_fast_symlink(inode))
-+              return;
-       if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
-               return;
-@@ -903,8 +915,7 @@
-       unsigned long offset;
-       struct ext2_group_desc * gdp;
--      if ((inode->i_ino != EXT2_ROOT_INO && inode->i_ino != EXT2_ACL_IDX_INO &&
--           inode->i_ino != EXT2_ACL_DATA_INO &&
-+      if ((inode->i_ino != EXT2_ROOT_INO &&
-            inode->i_ino < EXT2_FIRST_INO(inode->i_sb)) ||
-           inode->i_ino > le32_to_cpu(inode->i_sb->u.ext2_sb.s_es->s_inodes_count)) {
-               ext2_error (inode->i_sb, "ext2_read_inode",
-@@ -989,10 +1000,7 @@
-       for (block = 0; block < EXT2_N_BLOCKS; block++)
-               inode->u.ext2_i.i_data[block] = raw_inode->i_block[block];
--      if (inode->i_ino == EXT2_ACL_IDX_INO ||
--          inode->i_ino == EXT2_ACL_DATA_INO)
--              /* Nothing to do */ ;
--      else if (S_ISREG(inode->i_mode)) {
-+      if (S_ISREG(inode->i_mode)) {
-               inode->i_op = &ext2_file_inode_operations;
-               inode->i_fop = &ext2_file_operations;
-               inode->i_mapping->a_ops = &ext2_aops;
-@@ -1001,15 +1009,17 @@
-               inode->i_fop = &ext2_dir_operations;
-               inode->i_mapping->a_ops = &ext2_aops;
-       } else if (S_ISLNK(inode->i_mode)) {
--              if (!inode->i_blocks)
-+              if (ext2_inode_is_fast_symlink(inode))
-                       inode->i_op = &ext2_fast_symlink_inode_operations;
-               else {
--                      inode->i_op = &page_symlink_inode_operations;
-+                      inode->i_op = &ext2_symlink_inode_operations;
-                       inode->i_mapping->a_ops = &ext2_aops;
-               }
--      } else 
-+      } else {
-+              inode->i_op = &ext2_special_inode_operations;
-               init_special_inode(inode, inode->i_mode,
-                                  le32_to_cpu(raw_inode->i_block[0]));
-+      }
-       brelse (bh);
-       inode->i_attr_flags = 0;
-       ext2_set_inode_flags(inode);
-Index: linux-2.4.22-vanilla/fs/ext2/namei.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext2/namei.c  2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext2/namei.c       2003-12-02 23:55:38.000000000 +0300
-@@ -31,6 +31,7 @@
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- #include <linux/pagemap.h>
- /*
-@@ -136,7 +137,7 @@
-       if (l > sizeof (inode->u.ext2_i.i_data)) {
-               /* slow symlink */
--              inode->i_op = &page_symlink_inode_operations;
-+              inode->i_op = &ext2_symlink_inode_operations;
-               inode->i_mapping->a_ops = &ext2_aops;
-               err = block_symlink(inode, symname, l);
-               if (err)
-@@ -345,4 +346,15 @@
-       rmdir:          ext2_rmdir,
-       mknod:          ext2_mknod,
-       rename:         ext2_rename,
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
-+};
-+
-+struct inode_operations ext2_special_inode_operations = {
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
- };
-Index: linux-2.4.22-vanilla/fs/ext2/super.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext2/super.c  2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext2/super.c       2003-12-02 23:55:38.000000000 +0300
-@@ -21,6 +21,7 @@
- #include <linux/string.h>
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- #include <linux/slab.h>
- #include <linux/init.h>
- #include <linux/locks.h>
-@@ -125,6 +126,7 @@
-       int db_count;
-       int i;
-+      ext2_xattr_put_super(sb);
-       if (!(sb->s_flags & MS_RDONLY)) {
-               struct ext2_super_block *es = EXT2_SB(sb)->s_es;
-@@ -175,6 +177,13 @@
-            this_char = strtok (NULL, ",")) {
-               if ((value = strchr (this_char, '=')) != NULL)
-                       *value++ = 0;
-+#ifdef CONFIG_EXT2_FS_XATTR_USER
-+              if (!strcmp (this_char, "user_xattr"))
-+                      set_opt (*mount_options, XATTR_USER);
-+              else if (!strcmp (this_char, "nouser_xattr"))
-+                      clear_opt (*mount_options, XATTR_USER);
-+              else
-+#endif
-               if (!strcmp (this_char, "bsddf"))
-                       clear_opt (*mount_options, MINIX_DF);
-               else if (!strcmp (this_char, "nouid32")) {
-@@ -424,6 +433,9 @@
-           blocksize = BLOCK_SIZE;
-       sb->u.ext2_sb.s_mount_opt = 0;
-+#ifdef CONFIG_EXT2_FS_XATTR_USER
-+      /* set_opt (sb->u.ext2_sb.s_mount_opt, XATTR_USER); */
-+#endif
-       if (!parse_options ((char *) data, &sb_block, &resuid, &resgid,
-           &sb->u.ext2_sb.s_mount_opt)) {
-               return NULL;
-@@ -813,12 +825,27 @@
- static int __init init_ext2_fs(void)
- {
--        return register_filesystem(&ext2_fs_type);
-+      int error = init_ext2_xattr();
-+      if (error)
-+              return error;
-+      error = init_ext2_xattr_user();
-+      if (error)
-+              goto fail;
-+      error = register_filesystem(&ext2_fs_type);
-+      if (!error)
-+              return 0;
-+
-+      exit_ext2_xattr_user();
-+fail:
-+      exit_ext2_xattr();
-+      return error;
- }
- static void __exit exit_ext2_fs(void)
- {
-       unregister_filesystem(&ext2_fs_type);
-+      exit_ext2_xattr_user();
-+      exit_ext2_xattr();
- }
- EXPORT_NO_SYMBOLS;
-Index: linux-2.4.22-vanilla/fs/ext2/symlink.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext2/symlink.c        2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext2/symlink.c     2003-12-02 23:55:38.000000000 +0300
-@@ -19,6 +19,7 @@
- #include <linux/fs.h>
- #include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
- static int ext2_readlink(struct dentry *dentry, char *buffer, int buflen)
- {
-@@ -32,7 +33,20 @@
-       return vfs_follow_link(nd, s);
- }
-+struct inode_operations ext2_symlink_inode_operations = {
-+      readlink:       page_readlink,
-+      follow_link:    page_follow_link,
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
-+};
-+
- struct inode_operations ext2_fast_symlink_inode_operations = {
-       readlink:       ext2_readlink,
-       follow_link:    ext2_follow_link,
-+      setxattr:       ext2_setxattr,
-+      getxattr:       ext2_getxattr,
-+      listxattr:      ext2_listxattr,
-+      removexattr:    ext2_removexattr,
- };
-Index: linux-2.4.22-vanilla/fs/ext2/xattr.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext2/xattr.c  2003-12-02 23:55:38.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext2/xattr.c       2003-12-02 23:55:38.000000000 +0300
-@@ -0,0 +1,1212 @@
-+/*
-+ * linux/fs/ext2/xattr.c
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ *
-+ * Fix by Harrison Xing <harrison@mountainviewdata.com>.
-+ * Extended attributes for symlinks and special files added per
-+ *  suggestion of Luka Renko <luka.renko@hermes.si>.
-+ */
-+
-+/*
-+ * Extended attributes are stored on disk blocks allocated outside of
-+ * any inode. The i_file_acl field is then made to point to this allocated
-+ * block. If all extended attributes of an inode are identical, these
-+ * inodes may share the same extended attribute block. Such situations
-+ * are automatically detected by keeping a cache of recent attribute block
-+ * numbers and hashes over the block's contents in memory.
-+ *
-+ *
-+ * Extended attribute block layout:
-+ *
-+ *   +------------------+
-+ *   | header           |
-+ *   | entry 1          | |
-+ *   | entry 2          | | growing downwards
-+ *   | entry 3          | v
-+ *   | four null bytes  |
-+ *   | . . .            |
-+ *   | value 1          | ^
-+ *   | value 3          | | growing upwards
-+ *   | value 2          | |
-+ *   +------------------+
-+ *
-+ * The block header is followed by multiple entry descriptors. These entry
-+ * descriptors are variable in size, and alligned to EXT2_XATTR_PAD
-+ * byte boundaries. The entry descriptors are sorted by attribute name,
-+ * so that two extended attribute blocks can be compared efficiently.
-+ *
-+ * Attribute values are aligned to the end of the block, stored in
-+ * no specific order. They are also padded to EXT2_XATTR_PAD byte
-+ * boundaries. No additional gaps are left between them.
-+ *
-+ * Locking strategy
-+ * ----------------
-+ * The VFS already holds the BKL and the inode->i_sem semaphore when any of
-+ * the xattr inode operations are called, so we are guaranteed that only one
-+ * processes accesses extended attributes of an inode at any time.
-+ *
-+ * For writing we also grab the ext2_xattr_sem semaphore. This ensures that
-+ * only a single process is modifying an extended attribute block, even
-+ * if the block is shared among inodes.
-+ *
-+ * Note for porting to 2.5
-+ * -----------------------
-+ * The BKL will no longer be held in the xattr inode operations.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/locks.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
-+#include <linux/mbcache.h>
-+#include <linux/quotaops.h>
-+#include <asm/semaphore.h>
-+#include <linux/compatmac.h>
-+
-+/* These symbols may be needed by a module. */
-+EXPORT_SYMBOL(ext2_xattr_register);
-+EXPORT_SYMBOL(ext2_xattr_unregister);
-+EXPORT_SYMBOL(ext2_xattr_get);
-+EXPORT_SYMBOL(ext2_xattr_list);
-+EXPORT_SYMBOL(ext2_xattr_set);
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+# define mark_buffer_dirty(bh) mark_buffer_dirty(bh, 1)
-+#endif
-+
-+#define HDR(bh) ((struct ext2_xattr_header *)((bh)->b_data))
-+#define ENTRY(ptr) ((struct ext2_xattr_entry *)(ptr))
-+#define FIRST_ENTRY(bh) ENTRY(HDR(bh)+1)
-+#define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
-+
-+#ifdef EXT2_XATTR_DEBUG
-+# define ea_idebug(inode, f...) do { \
-+              printk(KERN_DEBUG "inode %s:%ld: ", \
-+                      kdevname(inode->i_dev), inode->i_ino); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+# define ea_bdebug(bh, f...) do { \
-+              printk(KERN_DEBUG "block %s:%ld: ", \
-+                      kdevname(bh->b_dev), bh->b_blocknr); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+#else
-+# define ea_idebug(f...)
-+# define ea_bdebug(f...)
-+#endif
-+
-+static int ext2_xattr_set2(struct inode *, struct buffer_head *,
-+                         struct ext2_xattr_header *);
-+
-+#ifdef CONFIG_EXT2_FS_XATTR_SHARING
-+
-+static int ext2_xattr_cache_insert(struct buffer_head *);
-+static struct buffer_head *ext2_xattr_cache_find(struct inode *,
-+                                               struct ext2_xattr_header *);
-+static void ext2_xattr_cache_remove(struct buffer_head *);
-+static void ext2_xattr_rehash(struct ext2_xattr_header *,
-+                            struct ext2_xattr_entry *);
-+
-+static struct mb_cache *ext2_xattr_cache;
-+
-+#else
-+# define ext2_xattr_cache_insert(bh) 0
-+# define ext2_xattr_cache_find(inode, header) NULL
-+# define ext2_xattr_cache_remove(bh) while(0) {}
-+# define ext2_xattr_rehash(header, entry) while(0) {}
-+#endif
-+
-+/*
-+ * If a file system does not share extended attributes among inodes,
-+ * we should not need the ext2_xattr_sem semaphore. However, the
-+ * filesystem may still contain shared blocks, so we always take
-+ * the lock.
-+ */
-+
-+DECLARE_MUTEX(ext2_xattr_sem);
-+
-+static inline int
-+ext2_xattr_new_block(struct inode *inode, int * errp, int force)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      int goal = le32_to_cpu(EXT2_SB(sb)->s_es->s_first_data_block) +
-+              EXT2_I(inode)->i_block_group * EXT2_BLOCKS_PER_GROUP(sb);
-+
-+      /* How can we enforce the allocation? */
-+      int block = ext2_new_block(inode, goal, 0, 0, errp);
-+#ifdef OLD_QUOTAS
-+      if (!*errp)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#endif
-+      return block;
-+}
-+
-+static inline int
-+ext2_xattr_quota_alloc(struct inode *inode, int force)
-+{
-+      /* How can we enforce the allocation? */
-+#ifdef OLD_QUOTAS
-+      int error = DQUOT_ALLOC_BLOCK(inode->i_sb, inode, 1);
-+      if (!error)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#else
-+      int error = DQUOT_ALLOC_BLOCK(inode, 1);
-+#endif
-+      return error;
-+}
-+
-+#ifdef OLD_QUOTAS
-+
-+static inline void
-+ext2_xattr_quota_free(struct inode *inode)
-+{
-+      DQUOT_FREE_BLOCK(inode->i_sb, inode, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+static inline void
-+ext2_xattr_free_block(struct inode * inode, unsigned long block)
-+{
-+      ext2_free_blocks(inode, block, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+#else
-+# define ext2_xattr_quota_free(inode) \
-+      DQUOT_FREE_BLOCK(inode, 1)
-+# define ext2_xattr_free_block(inode, block) \
-+      ext2_free_blocks(inode, block, 1)
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
-+
-+static inline struct buffer_head *
-+sb_bread(struct super_block *sb, int block)
-+{
-+      return bread(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+static inline struct buffer_head *
-+sb_getblk(struct super_block *sb, int block)
-+{
-+      return getblk(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+#endif
-+
-+struct ext2_xattr_handler *ext2_xattr_handlers[EXT2_XATTR_INDEX_MAX];
-+rwlock_t ext2_handler_lock = RW_LOCK_UNLOCKED;
-+
-+int
-+ext2_xattr_register(int name_index, struct ext2_xattr_handler *handler)
-+{
-+      int error = -EINVAL;
-+
-+      if (name_index > 0 && name_index <= EXT2_XATTR_INDEX_MAX) {
-+              write_lock(&ext2_handler_lock);
-+              if (!ext2_xattr_handlers[name_index-1]) {
-+                      ext2_xattr_handlers[name_index-1] = handler;
-+                      error = 0;
-+              }
-+              write_unlock(&ext2_handler_lock);
-+      }
-+      return error;
-+}
-+
-+void
-+ext2_xattr_unregister(int name_index, struct ext2_xattr_handler *handler)
-+{
-+      if (name_index > 0 || name_index <= EXT2_XATTR_INDEX_MAX) {
-+              write_lock(&ext2_handler_lock);
-+              ext2_xattr_handlers[name_index-1] = NULL;
-+              write_unlock(&ext2_handler_lock);
-+      }
-+}
-+
-+static inline const char *
-+strcmp_prefix(const char *a, const char *a_prefix)
-+{
-+      while (*a_prefix && *a == *a_prefix) {
-+              a++;
-+              a_prefix++;
-+      }
-+      return *a_prefix ? NULL : a;
-+}
-+
-+/*
-+ * Decode the extended attribute name, and translate it into
-+ * the name_index and name suffix.
-+ */
-+static struct ext2_xattr_handler *
-+ext2_xattr_resolve_name(const char **name)
-+{
-+      struct ext2_xattr_handler *handler = NULL;
-+      int i;
-+
-+      if (!*name)
-+              return NULL;
-+      read_lock(&ext2_handler_lock);
-+      for (i=0; i<EXT2_XATTR_INDEX_MAX; i++) {
-+              if (ext2_xattr_handlers[i]) {
-+                      const char *n = strcmp_prefix(*name,
-+                              ext2_xattr_handlers[i]->prefix);
-+                      if (n) {
-+                              handler = ext2_xattr_handlers[i];
-+                              *name = n;
-+                              break;
-+                      }
-+              }
-+      }
-+      read_unlock(&ext2_handler_lock);
-+      return handler;
-+}
-+
-+static inline struct ext2_xattr_handler *
-+ext2_xattr_handler(int name_index)
-+{
-+      struct ext2_xattr_handler *handler = NULL;
-+      if (name_index > 0 && name_index <= EXT2_XATTR_INDEX_MAX) {
-+              read_lock(&ext2_handler_lock);
-+              handler = ext2_xattr_handlers[name_index-1];
-+              read_unlock(&ext2_handler_lock);
-+      }
-+      return handler;
-+}
-+
-+/*
-+ * Inode operation getxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext2_getxattr(struct dentry *dentry, const char *name,
-+            void *buffer, size_t size)
-+{
-+      struct ext2_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext2_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->get(inode, name, buffer, size);
-+}
-+
-+/*
-+ * Inode operation listxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext2_listxattr(struct dentry *dentry, char *buffer, size_t size)
-+{
-+      return ext2_xattr_list(dentry->d_inode, buffer, size);
-+}
-+
-+/*
-+ * Inode operation setxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext2_setxattr(struct dentry *dentry, const char *name,
-+            const void *value, size_t size, int flags)
-+{
-+      struct ext2_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      if (size == 0)
-+              value = "";  /* empty EA, do not remove */
-+      handler = ext2_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, value, size, flags);
-+}
-+
-+/*
-+ * Inode operation removexattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext2_removexattr(struct dentry *dentry, const char *name)
-+{
-+      struct ext2_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext2_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, NULL, 0, XATTR_REPLACE);
-+}
-+
-+/*
-+ * ext2_xattr_get()
-+ *
-+ * Copy an extended attribute into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext2_xattr_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext2_xattr_entry *entry;
-+      unsigned int block, size;
-+      char *end;
-+      int name_len, error;
-+
-+      ea_idebug(inode, "name=%d.%s, buffer=%p, buffer_size=%ld",
-+                name_index, name, buffer, (long)buffer_size);
-+
-+      if (name == NULL)
-+              return -EINVAL;
-+      if (!EXT2_I(inode)->i_file_acl)
-+              return -ENOATTR;
-+      block = EXT2_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext2_error(inode->i_sb, "ext2_xattr_get",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* find named attribute */
-+      name_len = strlen(name);
-+
-+      error = -ERANGE;
-+      if (name_len > 255)
-+              goto cleanup;
-+      entry = FIRST_ENTRY(bh);
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext2_xattr_entry *next =
-+                      EXT2_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              if (name_index == entry->e_name_index &&
-+                  name_len == entry->e_name_len &&
-+                  memcmp(name, entry->e_name, name_len) == 0)
-+                      goto found;
-+              entry = next;
-+      }
-+      /* Check the remaining name entries */
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext2_xattr_entry *next =
-+                      EXT2_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              entry = next;
-+      }
-+      if (ext2_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      error = -ENOATTR;
-+      goto cleanup;
-+found:
-+      /* check the buffer size */
-+      if (entry->e_value_block != 0)
-+              goto bad_block;
-+      size = le32_to_cpu(entry->e_value_size);
-+      if (size > inode->i_sb->s_blocksize ||
-+          le16_to_cpu(entry->e_value_offs) + size > inode->i_sb->s_blocksize)
-+              goto bad_block;
-+
-+      if (ext2_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (buffer) {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+              /* return value of attribute */
-+              memcpy(buffer, bh->b_data + le16_to_cpu(entry->e_value_offs),
-+                      size);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext2_xattr_list()
-+ *
-+ * Copy a list of attribute names into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext2_xattr_list(struct inode *inode, char *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext2_xattr_entry *entry;
-+      unsigned int block, size = 0;
-+      char *buf, *end;
-+      int error;
-+
-+      ea_idebug(inode, "buffer=%p, buffer_size=%ld",
-+                buffer, (long)buffer_size);
-+
-+      if (!EXT2_I(inode)->i_file_acl)
-+              return 0;
-+      block = EXT2_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext2_error(inode->i_sb, "ext2_xattr_list",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* compute the size required for the list of attribute names */
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT2_XATTR_NEXT(entry)) {
-+              struct ext2_xattr_handler *handler;
-+              struct ext2_xattr_entry *next =
-+                      EXT2_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+
-+              handler = ext2_xattr_handler(entry->e_name_index);
-+              if (handler)
-+                      size += handler->list(NULL, inode, entry->e_name,
-+                                            entry->e_name_len);
-+      }
-+
-+      if (ext2_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (!buffer) {
-+              error = size;
-+              goto cleanup;
-+      } else {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+      }
-+
-+      /* list the attribute names */
-+      buf = buffer;
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT2_XATTR_NEXT(entry)) {
-+              struct ext2_xattr_handler *handler;
-+              
-+              handler = ext2_xattr_handler(entry->e_name_index);
-+              if (handler)
-+                      buf += handler->list(buf, inode, entry->e_name,
-+                                           entry->e_name_len);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * If the EXT2_FEATURE_COMPAT_EXT_ATTR feature of this file system is
-+ * not set, set it.
-+ */
-+static void ext2_xattr_update_super_block(struct super_block *sb)
-+{
-+      if (EXT2_HAS_COMPAT_FEATURE(sb, EXT2_FEATURE_COMPAT_EXT_ATTR))
-+              return;
-+
-+      lock_super(sb);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+      EXT2_SB(sb)->s_feature_compat |= EXT2_FEATURE_COMPAT_EXT_ATTR;
-+#endif
-+      EXT2_SB(sb)->s_es->s_feature_compat |=
-+              cpu_to_le32(EXT2_FEATURE_COMPAT_EXT_ATTR);
-+      sb->s_dirt = 1;
-+      mark_buffer_dirty(EXT2_SB(sb)->s_sbh);
-+      unlock_super(sb);
-+}
-+
-+/*
-+ * ext2_xattr_set()
-+ *
-+ * Create, replace or remove an extended attribute for this inode. Buffer
-+ * is NULL to remove an existing extended attribute, and non-NULL to
-+ * either replace an existing extended attribute, or create a new extended
-+ * attribute. The flags XATTR_REPLACE and XATTR_CREATE
-+ * specify that an extended attribute must exist and must not exist
-+ * previous to the call, respectively.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+int
-+ext2_xattr_set(struct inode *inode, int name_index, const char *name,
-+             const void *value, size_t value_len, int flags)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *bh = NULL;
-+      struct ext2_xattr_header *header = NULL;
-+      struct ext2_xattr_entry *here, *last;
-+      unsigned int name_len;
-+      int block = EXT2_I(inode)->i_file_acl;
-+      int min_offs = sb->s_blocksize, not_found = 1, free, error;
-+      char *end;
-+      
-+      /*
-+       * header -- Points either into bh, or to a temporarily
-+       *           allocated buffer.
-+       * here -- The named entry found, or the place for inserting, within
-+       *         the block pointed to by header.
-+       * last -- Points right after the last named entry within the block
-+       *         pointed to by header.
-+       * min_offs -- The offset of the first value (values are aligned
-+       *             towards the end of the block).
-+       * end -- Points right after the block pointed to by header.
-+       */
-+      
-+      ea_idebug(inode, "name=%d.%s, value=%p, value_len=%ld",
-+                name_index, name, value, (long)value_len);
-+
-+      if (IS_RDONLY(inode))
-+              return -EROFS;
-+      if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
-+              return -EPERM;
-+      if (value == NULL)
-+              value_len = 0;
-+      if (name == NULL)
-+              return -EINVAL;
-+      name_len = strlen(name);
-+      if (name_len > 255 || value_len > sb->s_blocksize)
-+              return -ERANGE;
-+      down(&ext2_xattr_sem);
-+
-+      if (block) {
-+              /* The inode already has an extended attribute block. */
-+
-+              bh = sb_bread(sb, block);
-+              error = -EIO;
-+              if (!bh)
-+                      goto cleanup;
-+              ea_bdebug(bh, "b_count=%d, refcount=%d",
-+                      atomic_read(&(bh->b_count)),
-+                      le32_to_cpu(HDR(bh)->h_refcount));
-+              header = HDR(bh);
-+              end = bh->b_data + bh->b_size;
-+              if (header->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
-+                  header->h_blocks != cpu_to_le32(1)) {
-+bad_block:            ext2_error(sb, "ext2_xattr_set",
-+                              "inode %ld: bad block %d", inode->i_ino, block);
-+                      error = -EIO;
-+                      goto cleanup;
-+              }
-+              /* Find the named attribute. */
-+              here = FIRST_ENTRY(bh);
-+              while (!IS_LAST_ENTRY(here)) {
-+                      struct ext2_xattr_entry *next = EXT2_XATTR_NEXT(here);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!here->e_value_block && here->e_value_size) {
-+                              int offs = le16_to_cpu(here->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      not_found = name_index - here->e_name_index;
-+                      if (!not_found)
-+                              not_found = name_len - here->e_name_len;
-+                      if (!not_found)
-+                              not_found = memcmp(name, here->e_name,name_len);
-+                      if (not_found <= 0)
-+                              break;
-+                      here = next;
-+              }
-+              last = here;
-+              /* We still need to compute min_offs and last. */
-+              while (!IS_LAST_ENTRY(last)) {
-+                      struct ext2_xattr_entry *next = EXT2_XATTR_NEXT(last);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!last->e_value_block && last->e_value_size) {
-+                              int offs = le16_to_cpu(last->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      last = next;
-+              }
-+
-+              /* Check whether we have enough space left. */
-+              free = min_offs - ((char*)last - (char*)header) - sizeof(__u32);
-+      } else {
-+              /* We will use a new extended attribute block. */
-+              free = sb->s_blocksize -
-+                      sizeof(struct ext2_xattr_header) - sizeof(__u32);
-+              here = last = NULL;  /* avoid gcc uninitialized warning. */
-+      }
-+
-+      if (not_found) {
-+              /* Request to remove a nonexistent attribute? */
-+              error = -ENOATTR;
-+              if (flags & XATTR_REPLACE)
-+                      goto cleanup;
-+              error = 0;
-+              if (value == NULL)
-+                      goto cleanup;
-+              else
-+                      free -= EXT2_XATTR_LEN(name_len);
-+      } else {
-+              /* Request to create an existing attribute? */
-+              error = -EEXIST;
-+              if (flags & XATTR_CREATE)
-+                      goto cleanup;
-+              if (!here->e_value_block && here->e_value_size) {
-+                      unsigned int size = le32_to_cpu(here->e_value_size);
-+
-+                      if (le16_to_cpu(here->e_value_offs) + size > 
-+                          sb->s_blocksize || size > sb->s_blocksize)
-+                              goto bad_block;
-+                      free += EXT2_XATTR_SIZE(size);
-+              }
-+      }
-+      free -= EXT2_XATTR_SIZE(value_len);
-+      error = -ENOSPC;
-+      if (free < 0)
-+              goto cleanup;
-+
-+      /* Here we know that we can set the new attribute. */
-+
-+      if (header) {
-+              if (header->h_refcount == cpu_to_le32(1)) {
-+                      ea_bdebug(bh, "modifying in-place");
-+                      ext2_xattr_cache_remove(bh);
-+              } else {
-+                      int offset;
-+
-+                      ea_bdebug(bh, "cloning");
-+                      header = kmalloc(bh->b_size, GFP_KERNEL);
-+                      error = -ENOMEM;
-+                      if (header == NULL)
-+                              goto cleanup;
-+                      memcpy(header, HDR(bh), bh->b_size);
-+                      header->h_refcount = cpu_to_le32(1);
-+                      offset = (char *)header - bh->b_data;
-+                      here = ENTRY((char *)here + offset);
-+                      last = ENTRY((char *)last + offset);
-+              }
-+      } else {
-+              /* Allocate a buffer where we construct the new block. */
-+              header = kmalloc(sb->s_blocksize, GFP_KERNEL);
-+              error = -ENOMEM;
-+              if (header == NULL)
-+                      goto cleanup;
-+              memset(header, 0, sb->s_blocksize);
-+              end = (char *)header + sb->s_blocksize;
-+              header->h_magic = cpu_to_le32(EXT2_XATTR_MAGIC);
-+              header->h_blocks = header->h_refcount = cpu_to_le32(1);
-+              last = here = ENTRY(header+1);
-+      }
-+
-+      if (not_found) {
-+              /* Insert the new name. */
-+              int size = EXT2_XATTR_LEN(name_len);
-+              int rest = (char *)last - (char *)here;
-+              memmove((char *)here + size, here, rest);
-+              memset(here, 0, size);
-+              here->e_name_index = name_index;
-+              here->e_name_len = name_len;
-+              memcpy(here->e_name, name, name_len);
-+      } else {
-+              /* Remove the old value. */
-+              if (!here->e_value_block && here->e_value_size) {
-+                      char *first_val = (char *)header + min_offs;
-+                      int offs = le16_to_cpu(here->e_value_offs);
-+                      char *val = (char *)header + offs;
-+                      size_t size = EXT2_XATTR_SIZE(
-+                              le32_to_cpu(here->e_value_size));
-+                      memmove(first_val + size, first_val, val - first_val);
-+                      memset(first_val, 0, size);
-+                      here->e_value_offs = 0;
-+                      min_offs += size;
-+
-+                      /* Adjust all value offsets. */
-+                      last = ENTRY(header+1);
-+                      while (!IS_LAST_ENTRY(last)) {
-+                              int o = le16_to_cpu(last->e_value_offs);
-+                              if (!last->e_value_block && o < offs)
-+                                      last->e_value_offs =
-+                                              cpu_to_le16(o + size);
-+                              last = EXT2_XATTR_NEXT(last);
-+                      }
-+              }
-+              if (value == NULL) {
-+                      /* Remove this attribute. */
-+                      if (EXT2_XATTR_NEXT(ENTRY(header+1)) == last) {
-+                              /* This block is now empty. */
-+                              error = ext2_xattr_set2(inode, bh, NULL);
-+                              goto cleanup;
-+                      } else {
-+                              /* Remove the old name. */
-+                              int size = EXT2_XATTR_LEN(name_len);
-+                              last = ENTRY((char *)last - size);
-+                              memmove(here, (char*)here + size,
-+                                      (char*)last - (char*)here);
-+                              memset(last, 0, size);
-+                      }
-+              }
-+      }
-+
-+      if (value != NULL) {
-+              /* Insert the new value. */
-+              here->e_value_size = cpu_to_le32(value_len);
-+              if (value_len) {
-+                      size_t size = EXT2_XATTR_SIZE(value_len);
-+                      char *val = (char *)header + min_offs - size;
-+                      here->e_value_offs =
-+                              cpu_to_le16((char *)val - (char *)header);
-+                      memset(val + size - EXT2_XATTR_PAD, 0,
-+                             EXT2_XATTR_PAD); /* Clear the pad bytes. */
-+                      memcpy(val, value, value_len);
-+              }
-+      }
-+      ext2_xattr_rehash(header, here);
-+
-+      error = ext2_xattr_set2(inode, bh, header);
-+
-+cleanup:
-+      brelse(bh);
-+      if (!(bh && header == HDR(bh)))
-+              kfree(header);
-+      up(&ext2_xattr_sem);
-+
-+      return error;
-+}
-+
-+/*
-+ * Second half of ext2_xattr_set(): Update the file system.
-+ */
-+static int
-+ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,
-+              struct ext2_xattr_header *header)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *new_bh = NULL;
-+      int error;
-+
-+      if (header) {
-+              new_bh = ext2_xattr_cache_find(inode, header);
-+              if (new_bh) {
-+                      /*
-+                       * We found an identical block in the cache.
-+                       * The old block will be released after updating
-+                       * the inode.
-+                       */
-+                      ea_bdebug(old_bh, "reusing block %ld",
-+                              new_bh->b_blocknr);
-+                      
-+                      error = -EDQUOT;
-+                      if (ext2_xattr_quota_alloc(inode, 1))
-+                              goto cleanup;
-+                      
-+                      HDR(new_bh)->h_refcount = cpu_to_le32(
-+                              le32_to_cpu(HDR(new_bh)->h_refcount) + 1);
-+                      ea_bdebug(new_bh, "refcount now=%d",
-+                              le32_to_cpu(HDR(new_bh)->h_refcount));
-+              } else if (old_bh && header == HDR(old_bh)) {
-+                      /* Keep this block. */
-+                      new_bh = old_bh;
-+                      ext2_xattr_cache_insert(new_bh);
-+              } else {
-+                      /* We need to allocate a new block */
-+                      int force = EXT2_I(inode)->i_file_acl != 0;
-+                      int block = ext2_xattr_new_block(inode, &error, force);
-+                      if (error)
-+                              goto cleanup;
-+                      ea_idebug(inode, "creating block %d", block);
-+
-+                      new_bh = sb_getblk(sb, block);
-+                      if (!new_bh) {
-+                              ext2_xattr_free_block(inode, block);
-+                              error = -EIO;
-+                              goto cleanup;
-+                      }
-+                      lock_buffer(new_bh);
-+                      memcpy(new_bh->b_data, header, new_bh->b_size);
-+                      mark_buffer_uptodate(new_bh, 1);
-+                      unlock_buffer(new_bh);
-+                      ext2_xattr_cache_insert(new_bh);
-+                      
-+                      ext2_xattr_update_super_block(sb);
-+              }
-+              mark_buffer_dirty(new_bh);
-+              if (IS_SYNC(inode)) {
-+                      ll_rw_block(WRITE, 1, &new_bh);
-+                      wait_on_buffer(new_bh); 
-+                      error = -EIO;
-+                      if (buffer_req(new_bh) && !buffer_uptodate(new_bh))
-+                              goto cleanup;
-+              }
-+      }
-+
-+      /* Update the inode. */
-+      EXT2_I(inode)->i_file_acl = new_bh ? new_bh->b_blocknr : 0;
-+      inode->i_ctime = CURRENT_TIME;
-+      if (IS_SYNC(inode)) {
-+              error = ext2_sync_inode (inode);
-+              if (error)
-+                      goto cleanup;
-+      } else
-+              mark_inode_dirty(inode);
-+
-+      error = 0;
-+      if (old_bh && old_bh != new_bh) {
-+              /*
-+               * If there was an old block, and we are not still using it,
-+               * we now release the old block.
-+              */
-+              unsigned int refcount = le32_to_cpu(HDR(old_bh)->h_refcount);
-+
-+              if (refcount == 1) {
-+                      /* Free the old block. */
-+                      ea_bdebug(old_bh, "freeing");
-+                      ext2_xattr_free_block(inode, old_bh->b_blocknr);
-+                      mark_buffer_clean(old_bh);
-+              } else {
-+                      /* Decrement the refcount only. */
-+                      refcount--;
-+                      HDR(old_bh)->h_refcount = cpu_to_le32(refcount);
-+                      ext2_xattr_quota_free(inode);
-+                      mark_buffer_dirty(old_bh);
-+                      ea_bdebug(old_bh, "refcount now=%d", refcount);
-+              }
-+      }
-+
-+cleanup:
-+      if (old_bh != new_bh)
-+              brelse(new_bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext2_xattr_delete_inode()
-+ *
-+ * Free extended attribute resources associated with this inode. This
-+ * is called immediately before an inode is freed.
-+ */
-+void
-+ext2_xattr_delete_inode(struct inode *inode)
-+{
-+      struct buffer_head *bh;
-+      unsigned int block = EXT2_I(inode)->i_file_acl;
-+
-+      if (!block)
-+              return;
-+      down(&ext2_xattr_sem);
-+
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh) {
-+              ext2_error(inode->i_sb, "ext2_xattr_delete_inode",
-+                      "inode %ld: block %d read error", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ea_bdebug(bh, "b_count=%d", atomic_read(&(bh->b_count)));
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+              ext2_error(inode->i_sb, "ext2_xattr_delete_inode",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ea_bdebug(bh, "refcount now=%d", le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+      if (HDR(bh)->h_refcount == cpu_to_le32(1)) {
-+              ext2_xattr_cache_remove(bh);
-+              ext2_xattr_free_block(inode, block);
-+              bforget(bh);
-+              bh = NULL;
-+      } else {
-+              HDR(bh)->h_refcount = cpu_to_le32(
-+                      le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+              mark_buffer_dirty(bh);
-+              if (IS_SYNC(inode)) {
-+                      ll_rw_block(WRITE, 1, &bh);
-+                      wait_on_buffer(bh);
-+              }
-+              ext2_xattr_quota_free(inode);
-+      }
-+      EXT2_I(inode)->i_file_acl = 0;
-+
-+cleanup:
-+      brelse(bh);
-+      up(&ext2_xattr_sem);
-+}
-+
-+/*
-+ * ext2_xattr_put_super()
-+ *
-+ * This is called when a file system is unmounted.
-+ */
-+void
-+ext2_xattr_put_super(struct super_block *sb)
-+{
-+#ifdef CONFIG_EXT2_FS_XATTR_SHARING
-+      mb_cache_shrink(ext2_xattr_cache, sb->s_dev);
-+#endif
-+}
-+
-+#ifdef CONFIG_EXT2_FS_XATTR_SHARING
-+
-+/*
-+ * ext2_xattr_cache_insert()
-+ *
-+ * Create a new entry in the extended attribute cache, and insert
-+ * it unless such an entry is already in the cache.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+static int
-+ext2_xattr_cache_insert(struct buffer_head *bh)
-+{
-+      __u32 hash = le32_to_cpu(HDR(bh)->h_hash);
-+      struct mb_cache_entry *ce;
-+      int error;
-+
-+      ce = mb_cache_entry_alloc(ext2_xattr_cache);
-+      if (!ce)
-+              return -ENOMEM;
-+      error = mb_cache_entry_insert(ce, bh->b_dev, bh->b_blocknr, &hash);
-+      if (error) {
-+              mb_cache_entry_free(ce);
-+              if (error == -EBUSY) {
-+                      ea_bdebug(bh, "already in cache (%d cache entries)",
-+                              atomic_read(&ext2_xattr_cache->c_entry_count));
-+                      error = 0;
-+              }
-+      } else {
-+              ea_bdebug(bh, "inserting [%x] (%d cache entries)", (int)hash,
-+                        atomic_read(&ext2_xattr_cache->c_entry_count));
-+              mb_cache_entry_release(ce);
-+      }
-+      return error;
-+}
-+
-+/*
-+ * ext2_xattr_cmp()
-+ *
-+ * Compare two extended attribute blocks for equality.
-+ *
-+ * Returns 0 if the blocks are equal, 1 if they differ, and
-+ * a negative error number on errors.
-+ */
-+static int
-+ext2_xattr_cmp(struct ext2_xattr_header *header1,
-+             struct ext2_xattr_header *header2)
-+{
-+      struct ext2_xattr_entry *entry1, *entry2;
-+
-+      entry1 = ENTRY(header1+1);
-+      entry2 = ENTRY(header2+1);
-+      while (!IS_LAST_ENTRY(entry1)) {
-+              if (IS_LAST_ENTRY(entry2))
-+                      return 1;
-+              if (entry1->e_hash != entry2->e_hash ||
-+                  entry1->e_name_len != entry2->e_name_len ||
-+                  entry1->e_value_size != entry2->e_value_size ||
-+                  memcmp(entry1->e_name, entry2->e_name, entry1->e_name_len))
-+                      return 1;
-+              if (entry1->e_value_block != 0 || entry2->e_value_block != 0)
-+                      return -EIO;
-+              if (memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
-+                         (char *)header2 + le16_to_cpu(entry2->e_value_offs),
-+                         le32_to_cpu(entry1->e_value_size)))
-+                      return 1;
-+
-+              entry1 = EXT2_XATTR_NEXT(entry1);
-+              entry2 = EXT2_XATTR_NEXT(entry2);
-+      }
-+      if (!IS_LAST_ENTRY(entry2))
-+              return 1;
-+      return 0;
-+}
-+
-+/*
-+ * ext2_xattr_cache_find()
-+ *
-+ * Find an identical extended attribute block.
-+ *
-+ * Returns a pointer to the block found, or NULL if such a block was
-+ * not found or an error occurred.
-+ */
-+static struct buffer_head *
-+ext2_xattr_cache_find(struct inode *inode, struct ext2_xattr_header *header)
-+{
-+      __u32 hash = le32_to_cpu(header->h_hash);
-+      struct mb_cache_entry *ce;
-+
-+      if (!header->h_hash)
-+              return NULL;  /* never share */
-+      ea_idebug(inode, "looking for cached blocks [%x]", (int)hash);
-+      ce = mb_cache_entry_find_first(ext2_xattr_cache, 0, inode->i_dev, hash);
-+      while (ce) {
-+              struct buffer_head *bh = sb_bread(inode->i_sb, ce->e_block);
-+
-+              if (!bh) {
-+                      ext2_error(inode->i_sb, "ext2_xattr_cache_find",
-+                              "inode %ld: block %ld read error",
-+                              inode->i_ino, ce->e_block);
-+              } else if (le32_to_cpu(HDR(bh)->h_refcount) >
-+                         EXT2_XATTR_REFCOUNT_MAX) {
-+                      ea_idebug(inode, "block %ld refcount %d>%d",ce->e_block,
-+                              le32_to_cpu(HDR(bh)->h_refcount),
-+                              EXT2_XATTR_REFCOUNT_MAX);
-+              } else if (!ext2_xattr_cmp(header, HDR(bh))) {
-+                      ea_bdebug(bh, "b_count=%d",atomic_read(&(bh->b_count)));
-+                      mb_cache_entry_release(ce);
-+                      return bh;
-+              }
-+              brelse(bh);
-+              ce = mb_cache_entry_find_next(ce, 0, inode->i_dev, hash);
-+      }
-+      return NULL;
-+}
-+
-+/*
-+ * ext2_xattr_cache_remove()
-+ *
-+ * Remove the cache entry of a block from the cache. Called when a
-+ * block becomes invalid.
-+ */
-+static void
-+ext2_xattr_cache_remove(struct buffer_head *bh)
-+{
-+      struct mb_cache_entry *ce;
-+
-+      ce = mb_cache_entry_get(ext2_xattr_cache, bh->b_dev, bh->b_blocknr);
-+      if (ce) {
-+              ea_bdebug(bh, "removing (%d cache entries remaining)",
-+                        atomic_read(&ext2_xattr_cache->c_entry_count)-1);
-+              mb_cache_entry_free(ce);
-+      } else 
-+              ea_bdebug(bh, "no cache entry");
-+}
-+
-+#define NAME_HASH_SHIFT 5
-+#define VALUE_HASH_SHIFT 16
-+
-+/*
-+ * ext2_xattr_hash_entry()
-+ *
-+ * Compute the hash of an extended attribute.
-+ */
-+static inline void ext2_xattr_hash_entry(struct ext2_xattr_header *header,
-+                                       struct ext2_xattr_entry *entry)
-+{
-+      __u32 hash = 0;
-+      char *name = entry->e_name;
-+      int n;
-+
-+      for (n=0; n < entry->e_name_len; n++) {
-+              hash = (hash << NAME_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - NAME_HASH_SHIFT)) ^
-+                     *name++;
-+      }
-+
-+      if (entry->e_value_block == 0 && entry->e_value_size != 0) {
-+              __u32 *value = (__u32 *)((char *)header +
-+                      le16_to_cpu(entry->e_value_offs));
-+              for (n = (le32_to_cpu(entry->e_value_size) +
-+                   EXT2_XATTR_ROUND) >> EXT2_XATTR_PAD_BITS; n; n--) {
-+                      hash = (hash << VALUE_HASH_SHIFT) ^
-+                             (hash >> (8*sizeof(hash) - VALUE_HASH_SHIFT)) ^
-+                             le32_to_cpu(*value++);
-+              }
-+      }
-+      entry->e_hash = cpu_to_le32(hash);
-+}
-+
-+#undef NAME_HASH_SHIFT
-+#undef VALUE_HASH_SHIFT
-+
-+#define BLOCK_HASH_SHIFT 16
-+
-+/*
-+ * ext2_xattr_rehash()
-+ *
-+ * Re-compute the extended attribute hash value after an entry has changed.
-+ */
-+static void ext2_xattr_rehash(struct ext2_xattr_header *header,
-+                            struct ext2_xattr_entry *entry)
-+{
-+      struct ext2_xattr_entry *here;
-+      __u32 hash = 0;
-+      
-+      ext2_xattr_hash_entry(header, entry);
-+      here = ENTRY(header+1);
-+      while (!IS_LAST_ENTRY(here)) {
-+              if (!here->e_hash) {
-+                      /* Block is not shared if an entry's hash value == 0 */
-+                      hash = 0;
-+                      break;
-+              }
-+              hash = (hash << BLOCK_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - BLOCK_HASH_SHIFT)) ^
-+                     le32_to_cpu(here->e_hash);
-+              here = EXT2_XATTR_NEXT(here);
-+      }
-+      header->h_hash = cpu_to_le32(hash);
-+}
-+
-+#undef BLOCK_HASH_SHIFT
-+
-+int __init
-+init_ext2_xattr(void)
-+{
-+      ext2_xattr_cache = mb_cache_create("ext2_xattr", NULL,
-+              sizeof(struct mb_cache_entry) +
-+              sizeof(struct mb_cache_entry_index), 1, 61);
-+      if (!ext2_xattr_cache)
-+              return -ENOMEM;
-+
-+      return 0;
-+}
-+
-+void
-+exit_ext2_xattr(void)
-+{
-+      mb_cache_destroy(ext2_xattr_cache);
-+}
-+
-+#else  /* CONFIG_EXT2_FS_XATTR_SHARING */
-+
-+int __init
-+init_ext2_xattr(void)
-+{
-+      return 0;
-+}
-+
-+void
-+exit_ext2_xattr(void)
-+{
-+}
-+
-+#endif  /* CONFIG_EXT2_FS_XATTR_SHARING */
-Index: linux-2.4.22-vanilla/fs/ext2/xattr_user.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext2/xattr_user.c     2003-12-02 23:55:38.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext2/xattr_user.c  2003-12-02 23:55:38.000000000 +0300
-@@ -0,0 +1,103 @@
-+/*
-+ * linux/fs/ext2/xattr_user.c
-+ * Handler for extended user attributes.
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/string.h>
-+#include <linux/fs.h>
-+#include <linux/ext2_fs.h>
-+#include <linux/ext2_xattr.h>
-+
-+#ifdef CONFIG_EXT2_FS_POSIX_ACL
-+# include <linux/ext2_acl.h>
-+#endif
-+
-+#define XATTR_USER_PREFIX "user."
-+
-+static size_t
-+ext2_xattr_user_list(char *list, struct inode *inode,
-+                   const char *name, int name_len)
-+{
-+      const int prefix_len = sizeof(XATTR_USER_PREFIX)-1;
-+
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return 0;
-+
-+      if (list) {
-+              memcpy(list, XATTR_USER_PREFIX, prefix_len);
-+              memcpy(list+prefix_len, name, name_len);
-+              list[prefix_len + name_len] = '\0';
-+      }
-+      return prefix_len + name_len + 1;
-+}
-+
-+static int
-+ext2_xattr_user_get(struct inode *inode, const char *name,
-+                  void *buffer, size_t size)
-+{
-+      int error;
-+
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return -ENOTSUP;
-+#ifdef CONFIG_EXT2_FS_POSIX_ACL
-+      error = ext2_permission_locked(inode, MAY_READ);
-+#else
-+      error = permission(inode, MAY_READ);
-+#endif
-+      if (error)
-+              return error;
-+
-+      return ext2_xattr_get(inode, EXT2_XATTR_INDEX_USER, name,
-+                            buffer, size);
-+}
-+
-+static int
-+ext2_xattr_user_set(struct inode *inode, const char *name,
-+                  const void *value, size_t size, int flags)
-+{
-+      int error;
-+
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return -ENOTSUP;
-+      if ( !S_ISREG(inode->i_mode) &&
-+          (!S_ISDIR(inode->i_mode) || inode->i_mode & S_ISVTX))
-+              return -EPERM;
-+#ifdef CONFIG_EXT2_FS_POSIX_ACL
-+      error = ext2_permission_locked(inode, MAY_WRITE);
-+#else
-+      error = permission(inode, MAY_WRITE);
-+#endif
-+      if (error)
-+              return error;
-+
-+      return ext2_xattr_set(inode, EXT2_XATTR_INDEX_USER, name,
-+                            value, size, flags);
-+}
-+
-+struct ext2_xattr_handler ext2_xattr_user_handler = {
-+      prefix: XATTR_USER_PREFIX,
-+      list:   ext2_xattr_user_list,
-+      get:    ext2_xattr_user_get,
-+      set:    ext2_xattr_user_set,
-+};
-+
-+int __init
-+init_ext2_xattr_user(void)
-+{
-+      return ext2_xattr_register(EXT2_XATTR_INDEX_USER,
-+                                 &ext2_xattr_user_handler);
-+}
-+
-+void
-+exit_ext2_xattr_user(void)
-+{
-+      ext2_xattr_unregister(EXT2_XATTR_INDEX_USER,
-+                            &ext2_xattr_user_handler);
-+}
-Index: linux-2.4.22-vanilla/fs/ext3/Makefile
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext3/Makefile 2003-12-02 23:55:37.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext3/Makefile      2003-12-02 23:55:38.000000000 +0300
-@@ -1,5 +1,5 @@
- #
--# Makefile for the linux ext2-filesystem routines.
-+# Makefile for the linux ext3-filesystem routines.
- #
- # Note! Dependencies are done automagically by 'make dep', which also
- # removes any old dependencies. DON'T put your own dependencies here
-@@ -9,10 +9,14 @@
- O_TARGET := ext3.o
--export-objs :=        super.o inode.o
-+export-objs := ext3-exports.o
- obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
--              ioctl.o namei.o super.o symlink.o hash.o
-+              ioctl.o namei.o super.o symlink.o hash.o ext3-exports.o
- obj-m    := $(O_TARGET)
-+export-objs += xattr.o
-+obj-$(CONFIG_EXT3_FS_XATTR) += xattr.o
-+obj-$(CONFIG_EXT3_FS_XATTR_USER) += xattr_user.o
-+
- include $(TOPDIR)/Rules.make
-Index: linux-2.4.22-vanilla/fs/ext3/file.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext3/file.c   2003-12-02 23:55:37.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext3/file.c        2003-12-02 23:55:38.000000000 +0300
-@@ -23,6 +23,7 @@
- #include <linux/locks.h>
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/ext3_jbd.h>
- #include <linux/smp_lock.h>
-@@ -127,5 +128,9 @@
- struct inode_operations ext3_file_inode_operations = {
-       truncate:       ext3_truncate,          /* BKL held */
-       setattr:        ext3_setattr,           /* BKL held */
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
- };
-Index: linux-2.4.22-vanilla/fs/ext3/ialloc.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext3/ialloc.c 2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext3/ialloc.c      2003-12-02 23:55:38.000000000 +0300
-@@ -17,6 +17,7 @@
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/stat.h>
- #include <linux/string.h>
- #include <linux/locks.h>
-@@ -216,6 +217,7 @@
-        * as writing the quota to disk may need the lock as well.
-        */
-       DQUOT_INIT(inode);
-+      ext3_xattr_delete_inode(handle, inode);
-       DQUOT_FREE_INODE(inode);
-       DQUOT_DROP(inode);
-Index: linux-2.4.22-vanilla/fs/ext3/inode.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext3/inode.c  2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext3/inode.c       2003-12-02 23:55:38.000000000 +0300
-@@ -39,6 +39,18 @@
-  */
- #undef SEARCH_FROM_ZERO
-+/*
-+ * Test whether an inode is a fast symlink.
-+ */
-+static inline int ext3_inode_is_fast_symlink(struct inode *inode)
-+{
-+      int ea_blocks = inode->u.ext3_i.i_file_acl ?
-+              (inode->i_sb->s_blocksize >> 9) : 0;
-+
-+      return (S_ISLNK(inode->i_mode) &&
-+              inode->i_blocks - ea_blocks == 0);
-+}
-+
- /* The ext3 forget function must perform a revoke if we are freeing data
-  * which has been journaled.  Metadata (eg. indirect blocks) must be
-  * revoked in all cases. 
-@@ -48,7 +60,7 @@
-  * still needs to be revoked.
-  */
--static int ext3_forget(handle_t *handle, int is_metadata,
-+int ext3_forget(handle_t *handle, int is_metadata,
-                      struct inode *inode, struct buffer_head *bh,
-                      int blocknr)
- {
-@@ -179,9 +191,7 @@
- {
-       handle_t *handle;
-       
--      if (is_bad_inode(inode) ||
--          inode->i_ino == EXT3_ACL_IDX_INO ||
--          inode->i_ino == EXT3_ACL_DATA_INO)
-+      if (is_bad_inode(inode))
-               goto no_delete;
-       lock_kernel();
-@@ -1870,6 +1880,8 @@
-       if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
-           S_ISLNK(inode->i_mode)))
-               return;
-+      if (ext3_inode_is_fast_symlink(inode))
-+              return;
-       if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
-               return;
-@@ -2017,8 +2029,6 @@
-       struct ext3_group_desc * gdp;
-               
-       if ((inode->i_ino != EXT3_ROOT_INO &&
--              inode->i_ino != EXT3_ACL_IDX_INO &&
--              inode->i_ino != EXT3_ACL_DATA_INO &&
-               inode->i_ino != EXT3_JOURNAL_INO &&
-               inode->i_ino < EXT3_FIRST_INO(inode->i_sb)) ||
-               inode->i_ino > le32_to_cpu(
-@@ -2159,10 +2169,7 @@
-               inode->u.ext3_i.i_data[block] = iloc.raw_inode->i_block[block];
-       INIT_LIST_HEAD(&inode->u.ext3_i.i_orphan);
--      if (inode->i_ino == EXT3_ACL_IDX_INO ||
--          inode->i_ino == EXT3_ACL_DATA_INO)
--              /* Nothing to do */ ;
--      else if (S_ISREG(inode->i_mode)) {
-+      if (S_ISREG(inode->i_mode)) {
-               inode->i_op = &ext3_file_inode_operations;
-               inode->i_fop = &ext3_file_operations;
-               inode->i_mapping->a_ops = &ext3_aops;
-@@ -2170,15 +2177,17 @@
-               inode->i_op = &ext3_dir_inode_operations;
-               inode->i_fop = &ext3_dir_operations;
-       } else if (S_ISLNK(inode->i_mode)) {
--              if (!inode->i_blocks)
-+              if (ext3_inode_is_fast_symlink(inode))
-                       inode->i_op = &ext3_fast_symlink_inode_operations;
-               else {
--                      inode->i_op = &page_symlink_inode_operations;
-+                      inode->i_op = &ext3_symlink_inode_operations;
-                       inode->i_mapping->a_ops = &ext3_aops;
-               }
--      } else 
-+      } else {
-+              inode->i_op = &ext3_special_inode_operations;
-               init_special_inode(inode, inode->i_mode,
-                                  le32_to_cpu(iloc.raw_inode->i_block[0]));
-+      }
-       brelse(iloc.bh);
-       ext3_set_inode_flags(inode);
-       return;
-Index: linux-2.4.22-vanilla/fs/ext3/namei.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext3/namei.c  2003-12-02 23:55:37.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext3/namei.c       2003-12-02 23:55:38.000000000 +0300
-@@ -29,6 +29,7 @@
- #include <linux/sched.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/fcntl.h>
- #include <linux/stat.h>
- #include <linux/string.h>
-@@ -1613,7 +1614,7 @@
-       if (IS_SYNC(dir))
-               handle->h_sync = 1;
--      inode = ext3_new_inode (handle, dir, S_IFDIR);
-+      inode = ext3_new_inode (handle, dir, S_IFDIR | mode);
-       err = PTR_ERR(inode);
-       if (IS_ERR(inode))
-               goto out_stop;
-@@ -1621,7 +1622,6 @@
-       inode->i_op = &ext3_dir_inode_operations;
-       inode->i_fop = &ext3_dir_operations;
-       inode->i_size = EXT3_I(inode)->i_disksize = inode->i_sb->s_blocksize;
--      inode->i_blocks = 0;    
-       dir_block = ext3_bread (handle, inode, 0, 1, &err);
-       if (!dir_block) {
-               inode->i_nlink--; /* is this nlink == 0? */
-@@ -1648,9 +1648,6 @@
-       BUFFER_TRACE(dir_block, "call ext3_journal_dirty_metadata");
-       ext3_journal_dirty_metadata(handle, dir_block);
-       brelse (dir_block);
--      inode->i_mode = S_IFDIR | mode;
--      if (dir->i_mode & S_ISGID)
--              inode->i_mode |= S_ISGID;
-       ext3_mark_inode_dirty(handle, inode);
-       err = ext3_add_entry (handle, dentry, inode);
-       if (err) {
-@@ -2019,7 +2016,7 @@
-               goto out_stop;
-       if (l > sizeof (EXT3_I(inode)->i_data)) {
--              inode->i_op = &page_symlink_inode_operations;
-+              inode->i_op = &ext3_symlink_inode_operations;
-               inode->i_mapping->a_ops = &ext3_aops;
-               /*
-                * block_symlink() calls back into ext3_prepare/commit_write.
-@@ -2244,4 +2241,16 @@
-       rmdir:          ext3_rmdir,             /* BKL held */
-       mknod:          ext3_mknod,             /* BKL held */
-       rename:         ext3_rename,            /* BKL held */
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
- };
-+
-+struct inode_operations ext3_special_inode_operations = {
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
-+};
-+
-Index: linux-2.4.22-vanilla/fs/ext3/super.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext3/super.c  2003-12-02 23:55:37.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext3/super.c       2003-12-02 23:56:03.000000000 +0300
-@@ -24,6 +24,7 @@
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
- #include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
- #include <linux/slab.h>
- #include <linux/init.h>
- #include <linux/locks.h>
-@@ -406,6 +407,7 @@
-       kdev_t j_dev = sbi->s_journal->j_dev;
-       int i;
-+      ext3_xattr_put_super(sb);
-       journal_destroy(sbi->s_journal);
-       if (!(sb->s_flags & MS_RDONLY)) {
-               EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
-@@ -505,6 +507,7 @@
-                         int is_remount)
- {
-       unsigned long *mount_options = &sbi->s_mount_opt;
-+      
-       uid_t *resuid = &sbi->s_resuid;
-       gid_t *resgid = &sbi->s_resgid;
-       char * this_char;
-@@ -517,6 +520,13 @@
-            this_char = strtok (NULL, ",")) {
-               if ((value = strchr (this_char, '=')) != NULL)
-                       *value++ = 0;
-+#ifdef CONFIG_EXT3_FS_XATTR_USER
-+              if (!strcmp (this_char, "user_xattr"))
-+                      set_opt (*mount_options, XATTR_USER);
-+              else if (!strcmp (this_char, "nouser_xattr"))
-+                      clear_opt (*mount_options, XATTR_USER);
-+              else
-+#endif
-               if (!strcmp (this_char, "bsddf"))
-                       clear_opt (*mount_options, MINIX_DF);
-               else if (!strcmp (this_char, "nouid32")) {
-@@ -934,6 +944,12 @@
-       sbi->s_mount_opt = 0;
-       sbi->s_resuid = EXT3_DEF_RESUID;
-       sbi->s_resgid = EXT3_DEF_RESGID;
-+
-+      /* Default extended attribute flags */
-+#ifdef CONFIG_EXT3_FS_XATTR_USER
-+      /* set_opt(sbi->s_mount_opt, XATTR_USER); */
-+#endif
-+
-       if (!parse_options ((char *) data, &sb_block, sbi, &journal_inum, 0)) {
-               sb->s_dev = 0;
-               goto out_fail;
-@@ -1822,22 +1838,35 @@
- static int __init init_ext3_fs(void)
- {
-+      int error;
- #ifdef CONFIG_QUOTA
-       init_dquot_operations(&ext3_qops);
-       old_sync_dquot = ext3_qops.sync_dquot;
-       ext3_qops.sync_dquot = ext3_sync_dquot;
- #endif
--        return register_filesystem(&ext3_fs_type);
-+      error = init_ext3_xattr();
-+      if (error)
-+              return error;
-+      error = init_ext3_xattr_user();
-+      if (error)
-+              goto fail;
-+      error = register_filesystem(&ext3_fs_type);
-+      if (!error)
-+              return 0;
-+      
-+      exit_ext3_xattr_user();
-+fail:
-+      exit_ext3_xattr();
-+      return error;
- }
- static void __exit exit_ext3_fs(void)
- {
-       unregister_filesystem(&ext3_fs_type);
-+      exit_ext3_xattr_user();
-+      exit_ext3_xattr();
- }
--EXPORT_SYMBOL(ext3_force_commit);
--EXPORT_SYMBOL(ext3_bread);
--
- MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
- MODULE_DESCRIPTION("Second Extended Filesystem with journaling extensions");
- MODULE_LICENSE("GPL");
-Index: linux-2.4.22-vanilla/fs/ext3/symlink.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext3/symlink.c        2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext3/symlink.c     2003-12-02 23:55:38.000000000 +0300
-@@ -20,6 +20,7 @@
- #include <linux/fs.h>
- #include <linux/jbd.h>
- #include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
- static int ext3_readlink(struct dentry *dentry, char *buffer, int buflen)
- {
-@@ -33,7 +34,20 @@
-       return vfs_follow_link(nd, s);
- }
-+struct inode_operations ext3_symlink_inode_operations = {
-+      readlink:       page_readlink,          /* BKL not held.  Don't need */
-+      follow_link:    page_follow_link,       /* BKL not held.  Don't need */
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
-+};
-+
- struct inode_operations ext3_fast_symlink_inode_operations = {
-       readlink:       ext3_readlink,          /* BKL not held.  Don't need */
-       follow_link:    ext3_follow_link,       /* BKL not held.  Don't need */
-+      setxattr:       ext3_setxattr,          /* BKL held */
-+      getxattr:       ext3_getxattr,          /* BKL held */
-+      listxattr:      ext3_listxattr,         /* BKL held */
-+      removexattr:    ext3_removexattr,       /* BKL held */
- };
-Index: linux-2.4.22-vanilla/fs/ext3/xattr.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext3/xattr.c  2003-12-02 23:55:38.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext3/xattr.c       2003-12-02 23:55:38.000000000 +0300
-@@ -0,0 +1,1225 @@
-+/*
-+ * linux/fs/ext3/xattr.c
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ *
-+ * Fix by Harrison Xing <harrison@mountainviewdata.com>.
-+ * Ext3 code with a lot of help from Eric Jarman <ejarman@acm.org>.
-+ * Extended attributes for symlinks and special files added per
-+ *  suggestion of Luka Renko <luka.renko@hermes.si>.
-+ */
-+
-+/*
-+ * Extended attributes are stored on disk blocks allocated outside of
-+ * any inode. The i_file_acl field is then made to point to this allocated
-+ * block. If all extended attributes of an inode are identical, these
-+ * inodes may share the same extended attribute block. Such situations
-+ * are automatically detected by keeping a cache of recent attribute block
-+ * numbers and hashes over the block's contents in memory.
-+ *
-+ *
-+ * Extended attribute block layout:
-+ *
-+ *   +------------------+
-+ *   | header           |
-+ *   | entry 1          | |
-+ *   | entry 2          | | growing downwards
-+ *   | entry 3          | v
-+ *   | four null bytes  |
-+ *   | . . .            |
-+ *   | value 1          | ^
-+ *   | value 3          | | growing upwards
-+ *   | value 2          | |
-+ *   +------------------+
-+ *
-+ * The block header is followed by multiple entry descriptors. These entry
-+ * descriptors are variable in size, and alligned to EXT3_XATTR_PAD
-+ * byte boundaries. The entry descriptors are sorted by attribute name,
-+ * so that two extended attribute blocks can be compared efficiently.
-+ *
-+ * Attribute values are aligned to the end of the block, stored in
-+ * no specific order. They are also padded to EXT3_XATTR_PAD byte
-+ * boundaries. No additional gaps are left between them.
-+ *
-+ * Locking strategy
-+ * ----------------
-+ * The VFS already holds the BKL and the inode->i_sem semaphore when any of
-+ * the xattr inode operations are called, so we are guaranteed that only one
-+ * processes accesses extended attributes of an inode at any time.
-+ *
-+ * For writing we also grab the ext3_xattr_sem semaphore. This ensures that
-+ * only a single process is modifying an extended attribute block, even
-+ * if the block is shared among inodes.
-+ *
-+ * Note for porting to 2.5
-+ * -----------------------
-+ * The BKL will no longer be held in the xattr inode operations.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/fs.h>
-+#include <linux/locks.h>
-+#include <linux/slab.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
-+#include <linux/mbcache.h>
-+#include <linux/quotaops.h>
-+#include <asm/semaphore.h>
-+#include <linux/compatmac.h>
-+
-+#define EXT3_EA_USER "user."
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+# define mark_buffer_dirty(bh) mark_buffer_dirty(bh, 1)
-+#endif
-+
-+#define HDR(bh) ((struct ext3_xattr_header *)((bh)->b_data))
-+#define ENTRY(ptr) ((struct ext3_xattr_entry *)(ptr))
-+#define FIRST_ENTRY(bh) ENTRY(HDR(bh)+1)
-+#define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
-+
-+#ifdef EXT3_XATTR_DEBUG
-+# define ea_idebug(inode, f...) do { \
-+              printk(KERN_DEBUG "inode %s:%ld: ", \
-+                      kdevname(inode->i_dev), inode->i_ino); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+# define ea_bdebug(bh, f...) do { \
-+              printk(KERN_DEBUG "block %s:%ld: ", \
-+                      kdevname(bh->b_dev), bh->b_blocknr); \
-+              printk(f); \
-+              printk("\n"); \
-+      } while (0)
-+#else
-+# define ea_idebug(f...)
-+# define ea_bdebug(f...)
-+#endif
-+
-+static int ext3_xattr_set2(handle_t *, struct inode *, struct buffer_head *,
-+                         struct ext3_xattr_header *);
-+
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+
-+static int ext3_xattr_cache_insert(struct buffer_head *);
-+static struct buffer_head *ext3_xattr_cache_find(struct inode *,
-+                                               struct ext3_xattr_header *);
-+static void ext3_xattr_cache_remove(struct buffer_head *);
-+static void ext3_xattr_rehash(struct ext3_xattr_header *,
-+                            struct ext3_xattr_entry *);
-+
-+static struct mb_cache *ext3_xattr_cache;
-+
-+#else
-+# define ext3_xattr_cache_insert(bh) 0
-+# define ext3_xattr_cache_find(inode, header) NULL
-+# define ext3_xattr_cache_remove(bh) while(0) {}
-+# define ext3_xattr_rehash(header, entry) while(0) {}
-+#endif
-+
-+/*
-+ * If a file system does not share extended attributes among inodes,
-+ * we should not need the ext3_xattr_sem semaphore. However, the
-+ * filesystem may still contain shared blocks, so we always take
-+ * the lock.
-+ */
-+
-+DECLARE_MUTEX(ext3_xattr_sem);
-+
-+static inline int
-+ext3_xattr_new_block(handle_t *handle, struct inode *inode,
-+                   int * errp, int force)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      int goal = le32_to_cpu(EXT3_SB(sb)->s_es->s_first_data_block) +
-+              EXT3_I(inode)->i_block_group * EXT3_BLOCKS_PER_GROUP(sb);
-+
-+      /* How can we enforce the allocation? */
-+      int block = ext3_new_block(handle, inode, goal, 0, 0, errp);
-+#ifdef OLD_QUOTAS
-+      if (!*errp)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#endif
-+      return block;
-+}
-+
-+static inline int
-+ext3_xattr_quota_alloc(struct inode *inode, int force)
-+{
-+      /* How can we enforce the allocation? */
-+#ifdef OLD_QUOTAS
-+      int error = DQUOT_ALLOC_BLOCK(inode->i_sb, inode, 1);
-+      if (!error)
-+              inode->i_blocks += inode->i_sb->s_blocksize >> 9;
-+#else
-+      int error = DQUOT_ALLOC_BLOCK(inode, 1);
-+#endif
-+      return error;
-+}
-+
-+#ifdef OLD_QUOTAS
-+
-+static inline void
-+ext3_xattr_quota_free(struct inode *inode)
-+{
-+      DQUOT_FREE_BLOCK(inode->i_sb, inode, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+static inline void
-+ext3_xattr_free_block(handle_t *handle, struct inode * inode,
-+                    unsigned long block)
-+{
-+      ext3_free_blocks(handle, inode, block, 1);
-+      inode->i_blocks -= inode->i_sb->s_blocksize >> 9;
-+}
-+
-+#else
-+# define ext3_xattr_quota_free(inode) \
-+      DQUOT_FREE_BLOCK(inode, 1)
-+# define ext3_xattr_free_block(handle, inode, block) \
-+      ext3_free_blocks(handle, inode, block, 1)
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
-+
-+static inline struct buffer_head *
-+sb_bread(struct super_block *sb, int block)
-+{
-+      return bread(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+static inline struct buffer_head *
-+sb_getblk(struct super_block *sb, int block)
-+{
-+      return getblk(sb->s_dev, block, sb->s_blocksize);
-+}
-+
-+#endif
-+
-+struct ext3_xattr_handler *ext3_xattr_handlers[EXT3_XATTR_INDEX_MAX];
-+rwlock_t ext3_handler_lock = RW_LOCK_UNLOCKED;
-+
-+int
-+ext3_xattr_register(int name_index, struct ext3_xattr_handler *handler)
-+{
-+      int error = -EINVAL;
-+
-+      if (name_index > 0 && name_index <= EXT3_XATTR_INDEX_MAX) {
-+              write_lock(&ext3_handler_lock);
-+              if (!ext3_xattr_handlers[name_index-1]) {
-+                      ext3_xattr_handlers[name_index-1] = handler;
-+                      error = 0;
-+              }
-+              write_unlock(&ext3_handler_lock);
-+      }
-+      return error;
-+}
-+
-+void
-+ext3_xattr_unregister(int name_index, struct ext3_xattr_handler *handler)
-+{
-+      if (name_index > 0 || name_index <= EXT3_XATTR_INDEX_MAX) {
-+              write_lock(&ext3_handler_lock);
-+              ext3_xattr_handlers[name_index-1] = NULL;
-+              write_unlock(&ext3_handler_lock);
-+      }
-+}
-+
-+static inline const char *
-+strcmp_prefix(const char *a, const char *a_prefix)
-+{
-+      while (*a_prefix && *a == *a_prefix) {
-+              a++;
-+              a_prefix++;
-+      }
-+      return *a_prefix ? NULL : a;
-+}
-+
-+/*
-+ * Decode the extended attribute name, and translate it into
-+ * the name_index and name suffix.
-+ */
-+static inline struct ext3_xattr_handler *
-+ext3_xattr_resolve_name(const char **name)
-+{
-+      struct ext3_xattr_handler *handler = NULL;
-+      int i;
-+
-+      if (!*name)
-+              return NULL;
-+      read_lock(&ext3_handler_lock);
-+      for (i=0; i<EXT3_XATTR_INDEX_MAX; i++) {
-+              if (ext3_xattr_handlers[i]) {
-+                      const char *n = strcmp_prefix(*name,
-+                              ext3_xattr_handlers[i]->prefix);
-+                      if (n) {
-+                              handler = ext3_xattr_handlers[i];
-+                              *name = n;
-+                              break;
-+                      }
-+              }
-+      }
-+      read_unlock(&ext3_handler_lock);
-+      return handler;
-+}
-+
-+static inline struct ext3_xattr_handler *
-+ext3_xattr_handler(int name_index)
-+{
-+      struct ext3_xattr_handler *handler = NULL;
-+      if (name_index > 0 && name_index <= EXT3_XATTR_INDEX_MAX) {
-+              read_lock(&ext3_handler_lock);
-+              handler = ext3_xattr_handlers[name_index-1];
-+              read_unlock(&ext3_handler_lock);
-+      }
-+      return handler;
-+}
-+
-+/*
-+ * Inode operation getxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext3_getxattr(struct dentry *dentry, const char *name,
-+            void *buffer, size_t size)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->get(inode, name, buffer, size);
-+}
-+
-+/*
-+ * Inode operation listxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+ssize_t
-+ext3_listxattr(struct dentry *dentry, char *buffer, size_t size)
-+{
-+      return ext3_xattr_list(dentry->d_inode, buffer, size);
-+}
-+
-+/*
-+ * Inode operation setxattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext3_setxattr(struct dentry *dentry, const char *name,
-+            const void *value, size_t size, int flags)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      if (size == 0)
-+              value = "";  /* empty EA, do not remove */
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, value, size, flags);
-+}
-+
-+/*
-+ * Inode operation removexattr()
-+ *
-+ * dentry->d_inode->i_sem down
-+ * BKL held [before 2.5.x]
-+ */
-+int
-+ext3_removexattr(struct dentry *dentry, const char *name)
-+{
-+      struct ext3_xattr_handler *handler;
-+      struct inode *inode = dentry->d_inode;
-+
-+      handler = ext3_xattr_resolve_name(&name);
-+      if (!handler)
-+              return -ENOTSUP;
-+      return handler->set(inode, name, NULL, 0, XATTR_REPLACE);
-+}
-+
-+/*
-+ * ext3_xattr_get()
-+ *
-+ * Copy an extended attribute into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext3_xattr_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_entry *entry;
-+      unsigned int block, size;
-+      char *end;
-+      int name_len, error;
-+
-+      ea_idebug(inode, "name=%d.%s, buffer=%p, buffer_size=%ld",
-+                name_index, name, buffer, (long)buffer_size);
-+
-+      if (name == NULL)
-+              return -EINVAL;
-+      if (!EXT3_I(inode)->i_file_acl)
-+              return -ENOATTR;
-+      block = EXT3_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext3_error(inode->i_sb, "ext3_xattr_get",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* find named attribute */
-+      name_len = strlen(name);
-+
-+      error = -ERANGE;
-+      if (name_len > 255)
-+              goto cleanup;
-+      entry = FIRST_ENTRY(bh);
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              if (name_index == entry->e_name_index &&
-+                  name_len == entry->e_name_len &&
-+                  memcmp(name, entry->e_name, name_len) == 0)
-+                      goto found;
-+              entry = next;
-+      }
-+      /* Check the remaining name entries */
-+      while (!IS_LAST_ENTRY(entry)) {
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+              entry = next;
-+      }
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      error = -ENOATTR;
-+      goto cleanup;
-+found:
-+      /* check the buffer size */
-+      if (entry->e_value_block != 0)
-+              goto bad_block;
-+      size = le32_to_cpu(entry->e_value_size);
-+      if (size > inode->i_sb->s_blocksize ||
-+          le16_to_cpu(entry->e_value_offs) + size > inode->i_sb->s_blocksize)
-+              goto bad_block;
-+
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (buffer) {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+              /* return value of attribute */
-+              memcpy(buffer, bh->b_data + le16_to_cpu(entry->e_value_offs),
-+                      size);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_list()
-+ *
-+ * Copy a list of attribute names into the buffer
-+ * provided, or compute the buffer size required.
-+ * Buffer is NULL to compute the size of the buffer required.
-+ *
-+ * Returns a negative error number on failure, or the number of bytes
-+ * used / required on success.
-+ */
-+int
-+ext3_xattr_list(struct inode *inode, char *buffer, size_t buffer_size)
-+{
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_entry *entry;
-+      unsigned int block, size = 0;
-+      char *buf, *end;
-+      int error;
-+
-+      ea_idebug(inode, "buffer=%p, buffer_size=%ld",
-+                buffer, (long)buffer_size);
-+
-+      if (!EXT3_I(inode)->i_file_acl)
-+              return 0;
-+      block = EXT3_I(inode)->i_file_acl;
-+      ea_idebug(inode, "reading block %d", block);
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh)
-+              return -EIO;
-+      ea_bdebug(bh, "b_count=%d, refcount=%d",
-+              atomic_read(&(bh->b_count)), le32_to_cpu(HDR(bh)->h_refcount));
-+      end = bh->b_data + bh->b_size;
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+bad_block:    ext3_error(inode->i_sb, "ext3_xattr_list",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              error = -EIO;
-+              goto cleanup;
-+      }
-+      /* compute the size required for the list of attribute names */
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT3_XATTR_NEXT(entry)) {
-+              struct ext3_xattr_handler *handler;
-+              struct ext3_xattr_entry *next =
-+                      EXT3_XATTR_NEXT(entry);
-+              if ((char *)next >= end)
-+                      goto bad_block;
-+
-+              handler = ext3_xattr_handler(entry->e_name_index);
-+              if (handler)
-+                      size += handler->list(NULL, inode, entry->e_name,
-+                                            entry->e_name_len);
-+      }
-+
-+      if (ext3_xattr_cache_insert(bh))
-+              ea_idebug(inode, "cache insert failed");
-+      if (!buffer) {
-+              error = size;
-+              goto cleanup;
-+      } else {
-+              error = -ERANGE;
-+              if (size > buffer_size)
-+                      goto cleanup;
-+      }
-+
-+      /* list the attribute names */
-+      buf = buffer;
-+      for (entry = FIRST_ENTRY(bh); !IS_LAST_ENTRY(entry);
-+           entry = EXT3_XATTR_NEXT(entry)) {
-+              struct ext3_xattr_handler *handler;
-+
-+              handler = ext3_xattr_handler(entry->e_name_index);
-+              if (handler)
-+                      buf += handler->list(buf, inode, entry->e_name,
-+                                           entry->e_name_len);
-+      }
-+      error = size;
-+
-+cleanup:
-+      brelse(bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * If the EXT3_FEATURE_COMPAT_EXT_ATTR feature of this file system is
-+ * not set, set it.
-+ */
-+static void ext3_xattr_update_super_block(handle_t *handle,
-+                                        struct super_block *sb)
-+{
-+      if (EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_EXT_ATTR))
-+              return;
-+
-+      lock_super(sb);
-+      ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+      EXT3_SB(sb)->s_feature_compat |= EXT3_FEATURE_COMPAT_EXT_ATTR;
-+#endif
-+      EXT3_SB(sb)->s_es->s_feature_compat |=
-+              cpu_to_le32(EXT3_FEATURE_COMPAT_EXT_ATTR);
-+      sb->s_dirt = 1;
-+      ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-+      unlock_super(sb);
-+}
-+
-+/*
-+ * ext3_xattr_set()
-+ *
-+ * Create, replace or remove an extended attribute for this inode. Buffer
-+ * is NULL to remove an existing extended attribute, and non-NULL to
-+ * either replace an existing extended attribute, or create a new extended
-+ * attribute. The flags XATTR_REPLACE and XATTR_CREATE
-+ * specify that an extended attribute must exist and must not exist
-+ * previous to the call, respectively.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+int
-+ext3_xattr_set(handle_t *handle, struct inode *inode, int name_index,
-+             const char *name, const void *value, size_t value_len, int flags)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *bh = NULL;
-+      struct ext3_xattr_header *header = NULL;
-+      struct ext3_xattr_entry *here, *last;
-+      unsigned int name_len;
-+      int block = EXT3_I(inode)->i_file_acl;
-+      int min_offs = sb->s_blocksize, not_found = 1, free, error;
-+      char *end;
-+      
-+      /*
-+       * header -- Points either into bh, or to a temporarily
-+       *           allocated buffer.
-+       * here -- The named entry found, or the place for inserting, within
-+       *         the block pointed to by header.
-+       * last -- Points right after the last named entry within the block
-+       *         pointed to by header.
-+       * min_offs -- The offset of the first value (values are aligned
-+       *             towards the end of the block).
-+       * end -- Points right after the block pointed to by header.
-+       */
-+      
-+      ea_idebug(inode, "name=%d.%s, value=%p, value_len=%ld",
-+                name_index, name, value, (long)value_len);
-+
-+      if (IS_RDONLY(inode))
-+              return -EROFS;
-+      if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
-+              return -EPERM;
-+      if (value == NULL)
-+              value_len = 0;
-+      if (name == NULL)
-+              return -EINVAL;
-+      name_len = strlen(name);
-+      if (name_len > 255 || value_len > sb->s_blocksize)
-+              return -ERANGE;
-+      down(&ext3_xattr_sem);
-+
-+      if (block) {
-+              /* The inode already has an extended attribute block. */
-+              bh = sb_bread(sb, block);
-+              error = -EIO;
-+              if (!bh)
-+                      goto cleanup;
-+              ea_bdebug(bh, "b_count=%d, refcount=%d",
-+                      atomic_read(&(bh->b_count)),
-+                      le32_to_cpu(HDR(bh)->h_refcount));
-+              header = HDR(bh);
-+              end = bh->b_data + bh->b_size;
-+              if (header->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+                  header->h_blocks != cpu_to_le32(1)) {
-+bad_block:            ext3_error(sb, "ext3_xattr_set",
-+                              "inode %ld: bad block %d", inode->i_ino, block);
-+                      error = -EIO;
-+                      goto cleanup;
-+              }
-+              /* Find the named attribute. */
-+              here = FIRST_ENTRY(bh);
-+              while (!IS_LAST_ENTRY(here)) {
-+                      struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(here);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!here->e_value_block && here->e_value_size) {
-+                              int offs = le16_to_cpu(here->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      not_found = name_index - here->e_name_index;
-+                      if (!not_found)
-+                              not_found = name_len - here->e_name_len;
-+                      if (!not_found)
-+                              not_found = memcmp(name, here->e_name,name_len);
-+                      if (not_found <= 0)
-+                              break;
-+                      here = next;
-+              }
-+              last = here;
-+              /* We still need to compute min_offs and last. */
-+              while (!IS_LAST_ENTRY(last)) {
-+                      struct ext3_xattr_entry *next = EXT3_XATTR_NEXT(last);
-+                      if ((char *)next >= end)
-+                              goto bad_block;
-+                      if (!last->e_value_block && last->e_value_size) {
-+                              int offs = le16_to_cpu(last->e_value_offs);
-+                              if (offs < min_offs)
-+                                      min_offs = offs;
-+                      }
-+                      last = next;
-+              }
-+
-+              /* Check whether we have enough space left. */
-+              free = min_offs - ((char*)last - (char*)header) - sizeof(__u32);
-+      } else {
-+              /* We will use a new extended attribute block. */
-+              free = sb->s_blocksize -
-+                      sizeof(struct ext3_xattr_header) - sizeof(__u32);
-+              here = last = NULL;  /* avoid gcc uninitialized warning. */
-+      }
-+
-+      if (not_found) {
-+              /* Request to remove a nonexistent attribute? */
-+              error = -ENOATTR;
-+              if (flags & XATTR_REPLACE)
-+                      goto cleanup;
-+              error = 0;
-+              if (value == NULL)
-+                      goto cleanup;
-+              else
-+                      free -= EXT3_XATTR_LEN(name_len);
-+      } else {
-+              /* Request to create an existing attribute? */
-+              error = -EEXIST;
-+              if (flags & XATTR_CREATE)
-+                      goto cleanup;
-+              if (!here->e_value_block && here->e_value_size) {
-+                      unsigned int size = le32_to_cpu(here->e_value_size);
-+
-+                      if (le16_to_cpu(here->e_value_offs) + size > 
-+                          sb->s_blocksize || size > sb->s_blocksize)
-+                              goto bad_block;
-+                      free += EXT3_XATTR_SIZE(size);
-+              }
-+      }
-+      free -= EXT3_XATTR_SIZE(value_len);
-+      error = -ENOSPC;
-+      if (free < 0)
-+              goto cleanup;
-+
-+      /* Here we know that we can set the new attribute. */
-+
-+      if (header) {
-+              if (header->h_refcount == cpu_to_le32(1)) {
-+                      ea_bdebug(bh, "modifying in-place");
-+                      ext3_xattr_cache_remove(bh);
-+                      error = ext3_journal_get_write_access(handle, bh);
-+                      if (error)
-+                              goto cleanup;
-+              } else {
-+                      int offset;
-+
-+                      ea_bdebug(bh, "cloning");
-+                      header = kmalloc(bh->b_size, GFP_KERNEL);
-+                      error = -ENOMEM;
-+                      if (header == NULL)
-+                              goto cleanup;
-+                      memcpy(header, HDR(bh), bh->b_size);
-+                      header->h_refcount = cpu_to_le32(1);
-+                      offset = (char *)header - bh->b_data;
-+                      here = ENTRY((char *)here + offset);
-+                      last = ENTRY((char *)last + offset);
-+              }
-+      } else {
-+              /* Allocate a buffer where we construct the new block. */
-+              header = kmalloc(sb->s_blocksize, GFP_KERNEL);
-+              error = -ENOMEM;
-+              if (header == NULL)
-+                      goto cleanup;
-+              memset(header, 0, sb->s_blocksize);
-+              end = (char *)header + sb->s_blocksize;
-+              header->h_magic = cpu_to_le32(EXT3_XATTR_MAGIC);
-+              header->h_blocks = header->h_refcount = cpu_to_le32(1);
-+              last = here = ENTRY(header+1);
-+      }
-+
-+      if (not_found) {
-+              /* Insert the new name. */
-+              int size = EXT3_XATTR_LEN(name_len);
-+              int rest = (char *)last - (char *)here;
-+              memmove((char *)here + size, here, rest);
-+              memset(here, 0, size);
-+              here->e_name_index = name_index;
-+              here->e_name_len = name_len;
-+              memcpy(here->e_name, name, name_len);
-+      } else {
-+              /* Remove the old value. */
-+              if (!here->e_value_block && here->e_value_size) {
-+                      char *first_val = (char *)header + min_offs;
-+                      int offs = le16_to_cpu(here->e_value_offs);
-+                      char *val = (char *)header + offs;
-+                      size_t size = EXT3_XATTR_SIZE(
-+                              le32_to_cpu(here->e_value_size));
-+                      memmove(first_val + size, first_val, val - first_val);
-+                      memset(first_val, 0, size);
-+                      here->e_value_offs = 0;
-+                      min_offs += size;
-+
-+                      /* Adjust all value offsets. */
-+                      last = ENTRY(header+1);
-+                      while (!IS_LAST_ENTRY(last)) {
-+                              int o = le16_to_cpu(last->e_value_offs);
-+                              if (!last->e_value_block && o < offs)
-+                                      last->e_value_offs =
-+                                              cpu_to_le16(o + size);
-+                              last = EXT3_XATTR_NEXT(last);
-+                      }
-+              }
-+              if (value == NULL) {
-+                      /* Remove this attribute. */
-+                      if (EXT3_XATTR_NEXT(ENTRY(header+1)) == last) {
-+                              /* This block is now empty. */
-+                              error = ext3_xattr_set2(handle, inode, bh,NULL);
-+                              goto cleanup;
-+                      } else {
-+                              /* Remove the old name. */
-+                              int size = EXT3_XATTR_LEN(name_len);
-+                              last = ENTRY((char *)last - size);
-+                              memmove(here, (char*)here + size,
-+                                      (char*)last - (char*)here);
-+                              memset(last, 0, size);
-+                      }
-+              }
-+      }
-+
-+      if (value != NULL) {
-+              /* Insert the new value. */
-+              here->e_value_size = cpu_to_le32(value_len);
-+              if (value_len) {
-+                      size_t size = EXT3_XATTR_SIZE(value_len);
-+                      char *val = (char *)header + min_offs - size;
-+                      here->e_value_offs =
-+                              cpu_to_le16((char *)val - (char *)header);
-+                      memset(val + size - EXT3_XATTR_PAD, 0,
-+                             EXT3_XATTR_PAD); /* Clear the pad bytes. */
-+                      memcpy(val, value, value_len);
-+              }
-+      }
-+      ext3_xattr_rehash(header, here);
-+
-+      error = ext3_xattr_set2(handle, inode, bh, header);
-+
-+cleanup:
-+      brelse(bh);
-+      if (!(bh && header == HDR(bh)))
-+              kfree(header);
-+      up(&ext3_xattr_sem);
-+
-+      return error;
-+}
-+
-+/*
-+ * Second half of ext3_xattr_set(): Update the file system.
-+ */
-+static int
-+ext3_xattr_set2(handle_t *handle, struct inode *inode,
-+              struct buffer_head *old_bh, struct ext3_xattr_header *header)
-+{
-+      struct super_block *sb = inode->i_sb;
-+      struct buffer_head *new_bh = NULL;
-+      int error;
-+
-+      if (header) {
-+              new_bh = ext3_xattr_cache_find(inode, header);
-+              if (new_bh) {
-+                      /*
-+                       * We found an identical block in the cache.
-+                       * The old block will be released after updating
-+                       * the inode.
-+                       */
-+                      ea_bdebug(old_bh, "reusing block %ld",
-+                              new_bh->b_blocknr);
-+                      
-+                      error = -EDQUOT;
-+                      if (ext3_xattr_quota_alloc(inode, 1))
-+                              goto cleanup;
-+                      
-+                      error = ext3_journal_get_write_access(handle, new_bh);
-+                      if (error)
-+                              goto cleanup;
-+                      HDR(new_bh)->h_refcount = cpu_to_le32(
-+                              le32_to_cpu(HDR(new_bh)->h_refcount) + 1);
-+                      ea_bdebug(new_bh, "refcount now=%d",
-+                              le32_to_cpu(HDR(new_bh)->h_refcount));
-+              } else if (old_bh && header == HDR(old_bh)) {
-+                      /* Keep this block. */
-+                      new_bh = old_bh;
-+                      ext3_xattr_cache_insert(new_bh);
-+              } else {
-+                      /* We need to allocate a new block */
-+                      int force = EXT3_I(inode)->i_file_acl != 0;
-+                      int block = ext3_xattr_new_block(handle, inode,
-+                                                       &error, force);
-+                      if (error)
-+                              goto cleanup;
-+                      ea_idebug(inode, "creating block %d", block);
-+
-+                      new_bh = sb_getblk(sb, block);
-+                      if (!new_bh) {
-+getblk_failed:                        ext3_xattr_free_block(handle, inode, block);
-+                              error = -EIO;
-+                              goto cleanup;
-+                      }
-+                      lock_buffer(new_bh);
-+                      error = ext3_journal_get_create_access(handle, new_bh);
-+                      if (error) {
-+                              unlock_buffer(new_bh);
-+                              goto getblk_failed;
-+                      }
-+                      memcpy(new_bh->b_data, header, new_bh->b_size);
-+                      mark_buffer_uptodate(new_bh, 1);
-+                      unlock_buffer(new_bh);
-+                      ext3_xattr_cache_insert(new_bh);
-+                      
-+                      ext3_xattr_update_super_block(handle, sb);
-+              }
-+              error = ext3_journal_dirty_metadata(handle, new_bh);
-+              if (error)
-+                      goto cleanup;
-+      }
-+
-+      /* Update the inode. */
-+      EXT3_I(inode)->i_file_acl = new_bh ? new_bh->b_blocknr : 0;
-+      inode->i_ctime = CURRENT_TIME;
-+      ext3_mark_inode_dirty(handle, inode);
-+      if (IS_SYNC(inode))
-+              handle->h_sync = 1;
-+
-+      error = 0;
-+      if (old_bh && old_bh != new_bh) {
-+              /*
-+               * If there was an old block, and we are not still using it,
-+               * we now release the old block.
-+              */
-+              unsigned int refcount = le32_to_cpu(HDR(old_bh)->h_refcount);
-+
-+              error = ext3_journal_get_write_access(handle, old_bh);
-+              if (error)
-+                      goto cleanup;
-+              if (refcount == 1) {
-+                      /* Free the old block. */
-+                      ea_bdebug(old_bh, "freeing");
-+                      ext3_xattr_free_block(handle, inode, old_bh->b_blocknr);
-+
-+                      /* ext3_forget() calls bforget() for us, but we
-+                         let our caller release old_bh, so we need to
-+                         duplicate the handle before. */
-+                      get_bh(old_bh);
-+                      ext3_forget(handle, 1, inode, old_bh,old_bh->b_blocknr);
-+              } else {
-+                      /* Decrement the refcount only. */
-+                      refcount--;
-+                      HDR(old_bh)->h_refcount = cpu_to_le32(refcount);
-+                      ext3_xattr_quota_free(inode);
-+                      ext3_journal_dirty_metadata(handle, old_bh);
-+                      ea_bdebug(old_bh, "refcount now=%d", refcount);
-+              }
-+      }
-+
-+cleanup:
-+      if (old_bh != new_bh)
-+              brelse(new_bh);
-+
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_delete_inode()
-+ *
-+ * Free extended attribute resources associated with this inode. This
-+ * is called immediately before an inode is freed.
-+ */
-+void
-+ext3_xattr_delete_inode(handle_t *handle, struct inode *inode)
-+{
-+      struct buffer_head *bh;
-+      unsigned int block = EXT3_I(inode)->i_file_acl;
-+
-+      if (!block)
-+              return;
-+      down(&ext3_xattr_sem);
-+
-+      bh = sb_bread(inode->i_sb, block);
-+      if (!bh) {
-+              ext3_error(inode->i_sb, "ext3_xattr_delete_inode",
-+                      "inode %ld: block %d read error", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ea_bdebug(bh, "b_count=%d", atomic_read(&(bh->b_count)));
-+      if (HDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
-+          HDR(bh)->h_blocks != cpu_to_le32(1)) {
-+              ext3_error(inode->i_sb, "ext3_xattr_delete_inode",
-+                      "inode %ld: bad block %d", inode->i_ino, block);
-+              goto cleanup;
-+      }
-+      ext3_journal_get_write_access(handle, bh);
-+      ea_bdebug(bh, "refcount now=%d", le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+      if (HDR(bh)->h_refcount == cpu_to_le32(1)) {
-+              ext3_xattr_cache_remove(bh);
-+              ext3_xattr_free_block(handle, inode, block);
-+              ext3_forget(handle, 1, inode, bh, block);
-+              bh = NULL;
-+      } else {
-+              HDR(bh)->h_refcount = cpu_to_le32(
-+                      le32_to_cpu(HDR(bh)->h_refcount) - 1);
-+              ext3_journal_dirty_metadata(handle, bh);
-+              if (IS_SYNC(inode))
-+                      handle->h_sync = 1;
-+              ext3_xattr_quota_free(inode);
-+      }
-+      EXT3_I(inode)->i_file_acl = 0;
-+
-+cleanup:
-+      brelse(bh);
-+      up(&ext3_xattr_sem);
-+}
-+
-+/*
-+ * ext3_xattr_put_super()
-+ *
-+ * This is called when a file system is unmounted.
-+ */
-+void
-+ext3_xattr_put_super(struct super_block *sb)
-+{
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+      mb_cache_shrink(ext3_xattr_cache, sb->s_dev);
-+#endif
-+}
-+
-+#ifdef CONFIG_EXT3_FS_XATTR_SHARING
-+
-+/*
-+ * ext3_xattr_cache_insert()
-+ *
-+ * Create a new entry in the extended attribute cache, and insert
-+ * it unless such an entry is already in the cache.
-+ *
-+ * Returns 0, or a negative error number on failure.
-+ */
-+static int
-+ext3_xattr_cache_insert(struct buffer_head *bh)
-+{
-+      __u32 hash = le32_to_cpu(HDR(bh)->h_hash);
-+      struct mb_cache_entry *ce;
-+      int error;
-+
-+      ce = mb_cache_entry_alloc(ext3_xattr_cache);
-+      if (!ce)
-+              return -ENOMEM;
-+      error = mb_cache_entry_insert(ce, bh->b_dev, bh->b_blocknr, &hash);
-+      if (error) {
-+              mb_cache_entry_free(ce);
-+              if (error == -EBUSY) {
-+                      ea_bdebug(bh, "already in cache (%d cache entries)",
-+                              atomic_read(&ext3_xattr_cache->c_entry_count));
-+                      error = 0;
-+              }
-+      } else {
-+              ea_bdebug(bh, "inserting [%x] (%d cache entries)", (int)hash,
-+                        atomic_read(&ext3_xattr_cache->c_entry_count));
-+              mb_cache_entry_release(ce);
-+      }
-+      return error;
-+}
-+
-+/*
-+ * ext3_xattr_cmp()
-+ *
-+ * Compare two extended attribute blocks for equality.
-+ *
-+ * Returns 0 if the blocks are equal, 1 if they differ, and
-+ * a negative error number on errors.
-+ */
-+static int
-+ext3_xattr_cmp(struct ext3_xattr_header *header1,
-+             struct ext3_xattr_header *header2)
-+{
-+      struct ext3_xattr_entry *entry1, *entry2;
-+
-+      entry1 = ENTRY(header1+1);
-+      entry2 = ENTRY(header2+1);
-+      while (!IS_LAST_ENTRY(entry1)) {
-+              if (IS_LAST_ENTRY(entry2))
-+                      return 1;
-+              if (entry1->e_hash != entry2->e_hash ||
-+                  entry1->e_name_len != entry2->e_name_len ||
-+                  entry1->e_value_size != entry2->e_value_size ||
-+                  memcmp(entry1->e_name, entry2->e_name, entry1->e_name_len))
-+                      return 1;
-+              if (entry1->e_value_block != 0 || entry2->e_value_block != 0)
-+                      return -EIO;
-+              if (memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
-+                         (char *)header2 + le16_to_cpu(entry2->e_value_offs),
-+                         le32_to_cpu(entry1->e_value_size)))
-+                      return 1;
-+
-+              entry1 = EXT3_XATTR_NEXT(entry1);
-+              entry2 = EXT3_XATTR_NEXT(entry2);
-+      }
-+      if (!IS_LAST_ENTRY(entry2))
-+              return 1;
-+      return 0;
-+}
-+
-+/*
-+ * ext3_xattr_cache_find()
-+ *
-+ * Find an identical extended attribute block.
-+ *
-+ * Returns a pointer to the block found, or NULL if such a block was
-+ * not found or an error occurred.
-+ */
-+static struct buffer_head *
-+ext3_xattr_cache_find(struct inode *inode, struct ext3_xattr_header *header)
-+{
-+      __u32 hash = le32_to_cpu(header->h_hash);
-+      struct mb_cache_entry *ce;
-+
-+      if (!header->h_hash)
-+              return NULL;  /* never share */
-+      ea_idebug(inode, "looking for cached blocks [%x]", (int)hash);
-+      ce = mb_cache_entry_find_first(ext3_xattr_cache, 0, inode->i_dev, hash);
-+      while (ce) {
-+              struct buffer_head *bh = sb_bread(inode->i_sb, ce->e_block);
-+
-+              if (!bh) {
-+                      ext3_error(inode->i_sb, "ext3_xattr_cache_find",
-+                              "inode %ld: block %ld read error",
-+                              inode->i_ino, ce->e_block);
-+              } else if (le32_to_cpu(HDR(bh)->h_refcount) >
-+                         EXT3_XATTR_REFCOUNT_MAX) {
-+                      ea_idebug(inode, "block %ld refcount %d>%d",ce->e_block,
-+                              le32_to_cpu(HDR(bh)->h_refcount),
-+                              EXT3_XATTR_REFCOUNT_MAX);
-+              } else if (!ext3_xattr_cmp(header, HDR(bh))) {
-+                      ea_bdebug(bh, "b_count=%d",atomic_read(&(bh->b_count)));
-+                      mb_cache_entry_release(ce);
-+                      return bh;
-+              }
-+              brelse(bh);
-+              ce = mb_cache_entry_find_next(ce, 0, inode->i_dev, hash);
-+      }
-+      return NULL;
-+}
-+
-+/*
-+ * ext3_xattr_cache_remove()
-+ *
-+ * Remove the cache entry of a block from the cache. Called when a
-+ * block becomes invalid.
-+ */
-+static void
-+ext3_xattr_cache_remove(struct buffer_head *bh)
-+{
-+      struct mb_cache_entry *ce;
-+
-+      ce = mb_cache_entry_get(ext3_xattr_cache, bh->b_dev, bh->b_blocknr);
-+      if (ce) {
-+              ea_bdebug(bh, "removing (%d cache entries remaining)",
-+                        atomic_read(&ext3_xattr_cache->c_entry_count)-1);
-+              mb_cache_entry_free(ce);
-+      } else 
-+              ea_bdebug(bh, "no cache entry");
-+}
-+
-+#define NAME_HASH_SHIFT 5
-+#define VALUE_HASH_SHIFT 16
-+
-+/*
-+ * ext3_xattr_hash_entry()
-+ *
-+ * Compute the hash of an extended attribute.
-+ */
-+static inline void ext3_xattr_hash_entry(struct ext3_xattr_header *header,
-+                                       struct ext3_xattr_entry *entry)
-+{
-+      __u32 hash = 0;
-+      char *name = entry->e_name;
-+      int n;
-+
-+      for (n=0; n < entry->e_name_len; n++) {
-+              hash = (hash << NAME_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - NAME_HASH_SHIFT)) ^
-+                     *name++;
-+      }
-+
-+      if (entry->e_value_block == 0 && entry->e_value_size != 0) {
-+              __u32 *value = (__u32 *)((char *)header +
-+                      le16_to_cpu(entry->e_value_offs));
-+              for (n = (le32_to_cpu(entry->e_value_size) +
-+                   EXT3_XATTR_ROUND) >> EXT3_XATTR_PAD_BITS; n; n--) {
-+                      hash = (hash << VALUE_HASH_SHIFT) ^
-+                             (hash >> (8*sizeof(hash) - VALUE_HASH_SHIFT)) ^
-+                             le32_to_cpu(*value++);
-+              }
-+      }
-+      entry->e_hash = cpu_to_le32(hash);
-+}
-+
-+#undef NAME_HASH_SHIFT
-+#undef VALUE_HASH_SHIFT
-+
-+#define BLOCK_HASH_SHIFT 16
-+
-+/*
-+ * ext3_xattr_rehash()
-+ *
-+ * Re-compute the extended attribute hash value after an entry has changed.
-+ */
-+static void ext3_xattr_rehash(struct ext3_xattr_header *header,
-+                            struct ext3_xattr_entry *entry)
-+{
-+      struct ext3_xattr_entry *here;
-+      __u32 hash = 0;
-+      
-+      ext3_xattr_hash_entry(header, entry);
-+      here = ENTRY(header+1);
-+      while (!IS_LAST_ENTRY(here)) {
-+              if (!here->e_hash) {
-+                      /* Block is not shared if an entry's hash value == 0 */
-+                      hash = 0;
-+                      break;
-+              }
-+              hash = (hash << BLOCK_HASH_SHIFT) ^
-+                     (hash >> (8*sizeof(hash) - BLOCK_HASH_SHIFT)) ^
-+                     le32_to_cpu(here->e_hash);
-+              here = EXT3_XATTR_NEXT(here);
-+      }
-+      header->h_hash = cpu_to_le32(hash);
-+}
-+
-+#undef BLOCK_HASH_SHIFT
-+
-+int __init
-+init_ext3_xattr(void)
-+{
-+      ext3_xattr_cache = mb_cache_create("ext3_xattr", NULL,
-+              sizeof(struct mb_cache_entry) +
-+              sizeof(struct mb_cache_entry_index), 1, 61);
-+      if (!ext3_xattr_cache)
-+              return -ENOMEM;
-+
-+      return 0;
-+}
-+
-+void
-+exit_ext3_xattr(void)
-+{
-+      if (ext3_xattr_cache)
-+              mb_cache_destroy(ext3_xattr_cache);
-+      ext3_xattr_cache = NULL;
-+}
-+
-+#else  /* CONFIG_EXT3_FS_XATTR_SHARING */
-+
-+int __init
-+init_ext3_xattr(void)
-+{
-+      return 0;
-+}
-+
-+void
-+exit_ext3_xattr(void)
-+{
-+}
-+
-+#endif  /* CONFIG_EXT3_FS_XATTR_SHARING */
-Index: linux-2.4.22-vanilla/fs/ext3/xattr_user.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext3/xattr_user.c     2003-12-02 23:55:38.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext3/xattr_user.c  2003-12-02 23:55:39.000000000 +0300
-@@ -0,0 +1,111 @@
-+/*
-+ * linux/fs/ext3/xattr_user.c
-+ * Handler for extended user attributes.
-+ *
-+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/string.h>
-+#include <linux/fs.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
-+
-+#ifdef CONFIG_EXT3_FS_POSIX_ACL
-+# include <linux/ext3_acl.h>
-+#endif
-+
-+#define XATTR_USER_PREFIX "user."
-+
-+static size_t
-+ext3_xattr_user_list(char *list, struct inode *inode,
-+                   const char *name, int name_len)
-+{
-+      const int prefix_len = sizeof(XATTR_USER_PREFIX)-1;
-+
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return 0;
-+
-+      if (list) {
-+              memcpy(list, XATTR_USER_PREFIX, prefix_len);
-+              memcpy(list+prefix_len, name, name_len);
-+              list[prefix_len + name_len] = '\0';
-+      }
-+      return prefix_len + name_len + 1;
-+}
-+
-+static int
-+ext3_xattr_user_get(struct inode *inode, const char *name,
-+                  void *buffer, size_t size)
-+{
-+      int error;
-+
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return -ENOTSUP;
-+#ifdef CONFIG_EXT3_FS_POSIX_ACL
-+      error = ext3_permission_locked(inode, MAY_READ);
-+#else
-+      error = permission(inode, MAY_READ);
-+#endif
-+      if (error)
-+              return error;
-+
-+      return ext3_xattr_get(inode, EXT3_XATTR_INDEX_USER, name,
-+                            buffer, size);
-+}
-+
-+static int
-+ext3_xattr_user_set(struct inode *inode, const char *name,
-+                  const void *value, size_t size, int flags)
-+{
-+      handle_t *handle;
-+      int error;
-+
-+      if (strcmp(name, "") == 0)
-+              return -EINVAL;
-+      if (!test_opt(inode->i_sb, XATTR_USER))
-+              return -ENOTSUP;
-+      if ( !S_ISREG(inode->i_mode) &&
-+          (!S_ISDIR(inode->i_mode) || inode->i_mode & S_ISVTX))
-+              return -EPERM;
-+#ifdef CONFIG_EXT3_FS_POSIX_ACL
-+      error = ext3_permission_locked(inode, MAY_WRITE);
-+#else
-+      error = permission(inode, MAY_WRITE);
-+#endif
-+      if (error)
-+              return error;
-+
-+      handle = ext3_journal_start(inode, EXT3_XATTR_TRANS_BLOCKS);
-+      if (IS_ERR(handle))
-+              return PTR_ERR(handle);
-+      error = ext3_xattr_set(handle, inode, EXT3_XATTR_INDEX_USER, name,
-+                             value, size, flags);
-+      ext3_journal_stop(handle, inode);
-+
-+      return error;
-+}
-+
-+struct ext3_xattr_handler ext3_xattr_user_handler = {
-+      prefix: XATTR_USER_PREFIX,
-+      list:   ext3_xattr_user_list,
-+      get:    ext3_xattr_user_get,
-+      set:    ext3_xattr_user_set,
-+};
-+
-+int __init
-+init_ext3_xattr_user(void)
-+{
-+      return ext3_xattr_register(EXT3_XATTR_INDEX_USER,
-+                                 &ext3_xattr_user_handler);
-+}
-+
-+void
-+exit_ext3_xattr_user(void)
-+{
-+      ext3_xattr_unregister(EXT3_XATTR_INDEX_USER,
-+                            &ext3_xattr_user_handler);
-+}
-Index: linux-2.4.22-vanilla/fs/jfs/jfs_xattr.h
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/jfs/jfs_xattr.h       2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/jfs/jfs_xattr.h    2003-12-02 23:55:39.000000000 +0300
-@@ -52,8 +52,10 @@
- #define       END_EALIST(ealist) \
-       ((struct jfs_ea *) (((char *) (ealist)) + EALIST_SIZE(ealist)))
--extern int __jfs_setxattr(struct inode *, const char *, void *, size_t, int);
--extern int jfs_setxattr(struct dentry *, const char *, void *, size_t, int);
-+extern int __jfs_setxattr(struct inode *, const char *, const void *, size_t,
-+                        int);
-+extern int jfs_setxattr(struct dentry *, const char *, const void *, size_t,
-+                      int);
- extern ssize_t __jfs_getxattr(struct inode *, const char *, void *, size_t);
- extern ssize_t jfs_getxattr(struct dentry *, const char *, void *, size_t);
- extern ssize_t jfs_listxattr(struct dentry *, char *, size_t);
-Index: linux-2.4.22-vanilla/fs/jfs/xattr.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/jfs/xattr.c   2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/jfs/xattr.c        2003-12-02 23:55:39.000000000 +0300
-@@ -641,7 +641,7 @@
- }
- static int can_set_xattr(struct inode *inode, const char *name,
--                       void *value, size_t value_len)
-+                       const void *value, size_t value_len)
- {
-       if (IS_RDONLY(inode))
-               return -EROFS;
-@@ -660,7 +660,7 @@
-       return permission(inode, MAY_WRITE);
- }
--int __jfs_setxattr(struct inode *inode, const char *name, void *value,
-+int __jfs_setxattr(struct inode *inode, const char *name, const void *value,
-                  size_t value_len, int flags)
- {
-       struct jfs_ea_list *ealist;
-@@ -799,7 +799,7 @@
-       return rc;
- }
--int jfs_setxattr(struct dentry *dentry, const char *name, void *value,
-+int jfs_setxattr(struct dentry *dentry, const char *name, const void *value,
-                size_t value_len, int flags)
- {
-       if (value == NULL) {    /* empty EA, do not remove */
-Index: linux-2.4.22-vanilla/fs/mbcache.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/mbcache.c     2003-12-02 23:55:38.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/mbcache.c  2003-12-02 23:55:39.000000000 +0300
-@@ -0,0 +1,648 @@
-+/*
-+ * linux/fs/mbcache.c
-+ * (C) 2001-2002 Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ */
-+
-+/*
-+ * Filesystem Meta Information Block Cache (mbcache)
-+ *
-+ * The mbcache caches blocks of block devices that need to be located
-+ * by their device/block number, as well as by other criteria (such
-+ * as the block's contents).
-+ *
-+ * There can only be one cache entry in a cache per device and block number.
-+ * Additional indexes need not be unique in this sense. The number of
-+ * additional indexes (=other criteria) can be hardwired at compile time
-+ * or specified at cache create time.
-+ *
-+ * Each cache entry is of fixed size. An entry may be `valid' or `invalid'
-+ * in the cache. A valid entry is in the main hash tables of the cache,
-+ * and may also be in the lru list. An invalid entry is not in any hashes
-+ * or lists.
-+ *
-+ * A valid cache entry is only in the lru list if no handles refer to it.
-+ * Invalid cache entries will be freed when the last handle to the cache
-+ * entry is released. Entries that cannot be freed immediately are put
-+ * back on the lru list.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+
-+#include <linux/fs.h>
-+#include <linux/slab.h>
-+#include <linux/sched.h>
-+#include <linux/cache_def.h>
-+#include <linux/version.h>
-+#include <linux/init.h>
-+#include <linux/mbcache.h>
-+
-+
-+#ifdef MB_CACHE_DEBUG
-+# define mb_debug(f...) do { \
-+              printk(KERN_DEBUG f); \
-+              printk("\n"); \
-+      } while (0)
-+#define mb_assert(c) do { if (!(c)) \
-+              printk(KERN_ERR "assertion " #c " failed\n"); \
-+      } while(0)
-+#else
-+# define mb_debug(f...) do { } while(0)
-+# define mb_assert(c) do { } while(0)
-+#endif
-+#define mb_error(f...) do { \
-+              printk(KERN_ERR f); \
-+              printk("\n"); \
-+      } while(0)
-+              
-+MODULE_AUTHOR("Andreas Gruenbacher <a.gruenbacher@computer.org>");
-+MODULE_DESCRIPTION("Meta block cache (for extended attributes)");
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+MODULE_LICENSE("GPL");
-+#endif
-+
-+EXPORT_SYMBOL(mb_cache_create);
-+EXPORT_SYMBOL(mb_cache_shrink);
-+EXPORT_SYMBOL(mb_cache_destroy);
-+EXPORT_SYMBOL(mb_cache_entry_alloc);
-+EXPORT_SYMBOL(mb_cache_entry_insert);
-+EXPORT_SYMBOL(mb_cache_entry_release);
-+EXPORT_SYMBOL(mb_cache_entry_takeout);
-+EXPORT_SYMBOL(mb_cache_entry_free);
-+EXPORT_SYMBOL(mb_cache_entry_dup);
-+EXPORT_SYMBOL(mb_cache_entry_get);
-+#if !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0)
-+EXPORT_SYMBOL(mb_cache_entry_find_first);
-+EXPORT_SYMBOL(mb_cache_entry_find_next);
-+#endif
-+
-+
-+/*
-+ * Global data: list of all mbcache's, lru list, and a spinlock for
-+ * accessing cache data structures on SMP machines. The lru list is
-+ * global across all mbcaches.
-+ */
-+
-+static LIST_HEAD(mb_cache_list);
-+static LIST_HEAD(mb_cache_lru_list);
-+static spinlock_t mb_cache_spinlock = SPIN_LOCK_UNLOCKED;
-+
-+static inline int
-+mb_cache_indexes(struct mb_cache *cache)
-+{
-+#ifdef MB_CACHE_INDEXES_COUNT
-+      return MB_CACHE_INDEXES_COUNT;
-+#else
-+      return cache->c_indexes_count;
-+#endif
-+}
-+
-+/*
-+ * What the mbcache registers as to get shrunk dynamically.
-+ */
-+
-+static void
-+mb_cache_memory_pressure(int priority, unsigned int gfp_mask);
-+
-+static struct cache_definition mb_cache_definition = {
-+      "mb_cache",
-+      mb_cache_memory_pressure
-+};
-+
-+
-+static inline int
-+__mb_cache_entry_is_hashed(struct mb_cache_entry *ce)
-+{
-+      return !list_empty(&ce->e_block_list);
-+}
-+
-+
-+static inline void
-+__mb_cache_entry_unhash(struct mb_cache_entry *ce)
-+{
-+      int n;
-+
-+      if (__mb_cache_entry_is_hashed(ce)) {
-+              list_del_init(&ce->e_block_list);
-+              for (n=0; n<mb_cache_indexes(ce->e_cache); n++)
-+                      list_del(&ce->e_indexes[n].o_list);
-+      }
-+}
-+
-+
-+static inline void
-+__mb_cache_entry_forget(struct mb_cache_entry *ce, int gfp_mask)
-+{
-+      struct mb_cache *cache = ce->e_cache;
-+
-+      mb_assert(atomic_read(&ce->e_used) == 0);
-+      if (cache->c_op.free && cache->c_op.free(ce, gfp_mask)) {
-+              /* free failed -- put back on the lru list
-+                 for freeing later. */
-+              spin_lock(&mb_cache_spinlock);
-+              list_add(&ce->e_lru_list, &mb_cache_lru_list);
-+              spin_unlock(&mb_cache_spinlock);
-+      } else {
-+              kmem_cache_free(cache->c_entry_cache, ce);
-+              atomic_dec(&cache->c_entry_count);
-+      }
-+}
-+
-+
-+static inline void
-+__mb_cache_entry_release_unlock(struct mb_cache_entry *ce)
-+{
-+      if (atomic_dec_and_test(&ce->e_used)) {
-+              if (__mb_cache_entry_is_hashed(ce))
-+                      list_add_tail(&ce->e_lru_list, &mb_cache_lru_list);
-+              else {
-+                      spin_unlock(&mb_cache_spinlock);
-+                      __mb_cache_entry_forget(ce, GFP_KERNEL);
-+                      return;
-+              }
-+      }
-+      spin_unlock(&mb_cache_spinlock);
-+}
-+
-+
-+/*
-+ * mb_cache_memory_pressure()  memory pressure callback
-+ *
-+ * This function is called by the kernel memory management when memory
-+ * gets low.
-+ *
-+ * @priority: Amount by which to shrink the cache (0 = highes priority)
-+ * @gfp_mask: (ignored)
-+ */
-+static void
-+mb_cache_memory_pressure(int priority, unsigned int gfp_mask)
-+{
-+      LIST_HEAD(free_list);
-+      struct list_head *l, *ltmp;
-+      int count = 0;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each(l, &mb_cache_list) {
-+              struct mb_cache *cache =
-+                      list_entry(l, struct mb_cache, c_cache_list);
-+              mb_debug("cache %s (%d)", cache->c_name,
-+                        atomic_read(&cache->c_entry_count));
-+              count += atomic_read(&cache->c_entry_count);
-+      }
-+      mb_debug("trying to free %d of %d entries",
-+                count / (priority ? priority : 1), count);
-+      if (priority)
-+              count /= priority;
-+      while (count-- && !list_empty(&mb_cache_lru_list)) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(mb_cache_lru_list.next,
-+                                 struct mb_cache_entry, e_lru_list);
-+              list_del(&ce->e_lru_list);
-+              __mb_cache_entry_unhash(ce);
-+              list_add_tail(&ce->e_lru_list, &free_list);
-+      }
-+      spin_unlock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &free_list) {
-+              __mb_cache_entry_forget(list_entry(l, struct mb_cache_entry,
-+                                                 e_lru_list), gfp_mask);
-+      }
-+}
-+
-+
-+/*
-+ * mb_cache_create()  create a new cache
-+ *
-+ * All entries in one cache are equal size. Cache entries may be from
-+ * multiple devices. If this is the first mbcache created, registers
-+ * the cache with kernel memory management. Returns NULL if no more
-+ * memory was available.
-+ *
-+ * @name: name of the cache (informal)
-+ * @cache_op: contains the callback called when freeing a cache entry
-+ * @entry_size: The size of a cache entry, including
-+ *              struct mb_cache_entry
-+ * @indexes_count: number of additional indexes in the cache. Must equal
-+ *                 MB_CACHE_INDEXES_COUNT if the number of indexes is
-+ *                 hardwired.
-+ * @bucket_count: number of hash buckets
-+ */
-+struct mb_cache *
-+mb_cache_create(const char *name, struct mb_cache_op *cache_op,
-+              size_t entry_size, int indexes_count, int bucket_count)
-+{
-+      int m=0, n;
-+      struct mb_cache *cache = NULL;
-+
-+      if(entry_size < sizeof(struct mb_cache_entry) +
-+         indexes_count * sizeof(struct mb_cache_entry_index))
-+              return NULL;
-+
-+      MOD_INC_USE_COUNT;
-+      cache = kmalloc(sizeof(struct mb_cache) +
-+                      indexes_count * sizeof(struct list_head), GFP_KERNEL);
-+      if (!cache)
-+              goto fail;
-+      cache->c_name = name;
-+      cache->c_op.free = NULL;
-+      if (cache_op)
-+              cache->c_op.free = cache_op->free;
-+      atomic_set(&cache->c_entry_count, 0);
-+      cache->c_bucket_count = bucket_count;
-+#ifdef MB_CACHE_INDEXES_COUNT
-+      mb_assert(indexes_count == MB_CACHE_INDEXES_COUNT);
-+#else
-+      cache->c_indexes_count = indexes_count;
-+#endif
-+      cache->c_block_hash = kmalloc(bucket_count * sizeof(struct list_head),
-+                                    GFP_KERNEL);
-+      if (!cache->c_block_hash)
-+              goto fail;
-+      for (n=0; n<bucket_count; n++)
-+              INIT_LIST_HEAD(&cache->c_block_hash[n]);
-+      for (m=0; m<indexes_count; m++) {
-+              cache->c_indexes_hash[m] = kmalloc(bucket_count *
-+                                               sizeof(struct list_head),
-+                                               GFP_KERNEL);
-+              if (!cache->c_indexes_hash[m])
-+                      goto fail;
-+              for (n=0; n<bucket_count; n++)
-+                      INIT_LIST_HEAD(&cache->c_indexes_hash[m][n]);
-+      }
-+      cache->c_entry_cache = kmem_cache_create(name, entry_size, 0,
-+              0 /*SLAB_POISON | SLAB_RED_ZONE*/, NULL, NULL);
-+      if (!cache->c_entry_cache)
-+              goto fail;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_add(&cache->c_cache_list, &mb_cache_list);
-+      spin_unlock(&mb_cache_spinlock);
-+      return cache;
-+
-+fail:
-+      if (cache) {
-+              while (--m >= 0)
-+                      kfree(cache->c_indexes_hash[m]);
-+              if (cache->c_block_hash)
-+                      kfree(cache->c_block_hash);
-+              kfree(cache);
-+      }
-+      MOD_DEC_USE_COUNT;
-+      return NULL;
-+}
-+
-+
-+/*
-+ * mb_cache_shrink()
-+ *
-+ * Removes all cache entires of a device from the cache. All cache entries
-+ * currently in use cannot be freed, and thus remain in the cache.
-+ *
-+ * @cache: which cache to shrink
-+ * @dev: which device's cache entries to shrink
-+ */
-+void
-+mb_cache_shrink(struct mb_cache *cache, kdev_t dev)
-+{
-+      LIST_HEAD(free_list);
-+      struct list_head *l, *ltmp;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &mb_cache_lru_list) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(l, struct mb_cache_entry, e_lru_list);
-+              if (ce->e_dev == dev) {
-+                      list_del(&ce->e_lru_list);
-+                      list_add_tail(&ce->e_lru_list, &free_list);
-+                      __mb_cache_entry_unhash(ce);
-+              }
-+      }
-+      spin_unlock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &free_list) {
-+              __mb_cache_entry_forget(list_entry(l, struct mb_cache_entry,
-+                                                 e_lru_list), GFP_KERNEL);
-+      }
-+}
-+
-+
-+/*
-+ * mb_cache_destroy()
-+ *
-+ * Shrinks the cache to its minimum possible size (hopefully 0 entries),
-+ * and then destroys it. If this was the last mbcache, un-registers the
-+ * mbcache from kernel memory management.
-+ */
-+void
-+mb_cache_destroy(struct mb_cache *cache)
-+{
-+      LIST_HEAD(free_list);
-+      struct list_head *l, *ltmp;
-+      int n;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &mb_cache_lru_list) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(l, struct mb_cache_entry, e_lru_list);
-+              if (ce->e_cache == cache) {
-+                      list_del(&ce->e_lru_list);
-+                      list_add_tail(&ce->e_lru_list, &free_list);
-+                      __mb_cache_entry_unhash(ce);
-+              }
-+      }
-+      list_del(&cache->c_cache_list);
-+      spin_unlock(&mb_cache_spinlock);
-+      list_for_each_safe(l, ltmp, &free_list) {
-+              __mb_cache_entry_forget(list_entry(l, struct mb_cache_entry,
-+                                                 e_lru_list), GFP_KERNEL);
-+      }
-+
-+      if (atomic_read(&cache->c_entry_count) > 0) {
-+              mb_error("cache %s: %d orphaned entries",
-+                        cache->c_name,
-+                        atomic_read(&cache->c_entry_count));
-+      }
-+
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0))
-+      /* We don't have kmem_cache_destroy() in 2.2.x */
-+      kmem_cache_shrink(cache->c_entry_cache);
-+#else
-+      kmem_cache_destroy(cache->c_entry_cache);
-+#endif
-+      for (n=0; n < mb_cache_indexes(cache); n++)
-+              kfree(cache->c_indexes_hash[n]);
-+      kfree(cache->c_block_hash);
-+      kfree(cache);
-+
-+      MOD_DEC_USE_COUNT;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_alloc()
-+ *
-+ * Allocates a new cache entry. The new entry will not be valid initially,
-+ * and thus cannot be looked up yet. It should be filled with data, and
-+ * then inserted into the cache using mb_cache_entry_insert(). Returns NULL
-+ * if no more memory was available.
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_alloc(struct mb_cache *cache)
-+{
-+      struct mb_cache_entry *ce;
-+
-+      atomic_inc(&cache->c_entry_count);
-+      ce = kmem_cache_alloc(cache->c_entry_cache, GFP_KERNEL);
-+      if (ce) {
-+              INIT_LIST_HEAD(&ce->e_lru_list);
-+              INIT_LIST_HEAD(&ce->e_block_list);
-+              ce->e_cache = cache;
-+              atomic_set(&ce->e_used, 1);
-+      }
-+      return ce;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_insert()
-+ *
-+ * Inserts an entry that was allocated using mb_cache_entry_alloc() into
-+ * the cache. After this, the cache entry can be looked up, but is not yet
-+ * in the lru list as the caller still holds a handle to it. Returns 0 on
-+ * success, or -EBUSY if a cache entry for that device + inode exists
-+ * already (this may happen after a failed lookup, if another process has
-+ * inserted the same cache entry in the meantime).
-+ *
-+ * @dev: device the cache entry belongs to
-+ * @block: block number
-+ * @keys: array of additional keys. There must be indexes_count entries
-+ *        in the array (as specified when creating the cache).
-+ */
-+int
-+mb_cache_entry_insert(struct mb_cache_entry *ce, kdev_t dev,
-+                    unsigned long block, unsigned int keys[])
-+{
-+      struct mb_cache *cache = ce->e_cache;
-+      unsigned int bucket = (HASHDEV(dev) + block) % cache->c_bucket_count;
-+      struct list_head *l;
-+      int error = -EBUSY, n;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each(l, &cache->c_block_hash[bucket]) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(l, struct mb_cache_entry, e_block_list);
-+              if (ce->e_dev == dev && ce->e_block == block)
-+                      goto out;
-+      }
-+      __mb_cache_entry_unhash(ce);
-+      ce->e_dev = dev;
-+      ce->e_block = block;
-+      list_add(&ce->e_block_list, &cache->c_block_hash[bucket]);
-+      for (n=0; n<mb_cache_indexes(cache); n++) {
-+              ce->e_indexes[n].o_key = keys[n];
-+              bucket = keys[n] % cache->c_bucket_count;
-+              list_add(&ce->e_indexes[n].o_list,
-+                       &cache->c_indexes_hash[n][bucket]);
-+      }
-+out:
-+      spin_unlock(&mb_cache_spinlock);
-+      return error;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_release()
-+ *
-+ * Release a handle to a cache entry. When the last handle to a cache entry
-+ * is released it is either freed (if it is invalid) or otherwise inserted
-+ * in to the lru list.
-+ */
-+void
-+mb_cache_entry_release(struct mb_cache_entry *ce)
-+{
-+      spin_lock(&mb_cache_spinlock);
-+      __mb_cache_entry_release_unlock(ce);
-+}
-+
-+
-+/*
-+ * mb_cache_entry_takeout()
-+ *
-+ * Take a cache entry out of the cache, making it invalid. The entry can later
-+ * be re-inserted using mb_cache_entry_insert(), or released using
-+ * mb_cache_entry_release().
-+ */
-+void
-+mb_cache_entry_takeout(struct mb_cache_entry *ce)
-+{
-+      spin_lock(&mb_cache_spinlock);
-+      mb_assert(list_empty(&ce->e_lru_list));
-+      __mb_cache_entry_unhash(ce);
-+      spin_unlock(&mb_cache_spinlock);
-+}
-+
-+
-+/*
-+ * mb_cache_entry_free()
-+ *
-+ * This is equivalent to the sequence mb_cache_entry_takeout() --
-+ * mb_cache_entry_release().
-+ */
-+void
-+mb_cache_entry_free(struct mb_cache_entry *ce)
-+{
-+      spin_lock(&mb_cache_spinlock);
-+      mb_assert(list_empty(&ce->e_lru_list));
-+      __mb_cache_entry_unhash(ce);
-+      __mb_cache_entry_release_unlock(ce);
-+}
-+
-+
-+/*
-+ * mb_cache_entry_dup()
-+ *
-+ * Duplicate a handle to a cache entry (does not duplicate the cache entry
-+ * itself). After the call, both the old and the new handle must be released.
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_dup(struct mb_cache_entry *ce)
-+{
-+      atomic_inc(&ce->e_used);
-+      return ce;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_get()
-+ *
-+ * Get a cache entry  by device / block number. (There can only be one entry
-+ * in the cache per device and block.) Returns NULL if no such cache entry
-+ * exists.
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_get(struct mb_cache *cache, kdev_t dev, unsigned long block)
-+{
-+      unsigned int bucket = (HASHDEV(dev) + block) % cache->c_bucket_count;
-+      struct list_head *l;
-+      struct mb_cache_entry *ce;
-+
-+      spin_lock(&mb_cache_spinlock);
-+      list_for_each(l, &cache->c_block_hash[bucket]) {
-+              ce = list_entry(l, struct mb_cache_entry, e_block_list);
-+              if (ce->e_dev == dev && ce->e_block == block) {
-+                      if (!list_empty(&ce->e_lru_list))
-+                              list_del_init(&ce->e_lru_list);
-+                      atomic_inc(&ce->e_used);
-+                      goto cleanup;
-+              }
-+      }
-+      ce = NULL;
-+
-+cleanup:
-+      spin_unlock(&mb_cache_spinlock);
-+      return ce;
-+}
-+
-+#if !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0)
-+
-+static struct mb_cache_entry *
-+__mb_cache_entry_find(struct list_head *l, struct list_head *head,
-+                    int index, kdev_t dev, unsigned int key)
-+{
-+      while (l != head) {
-+              struct mb_cache_entry *ce =
-+                      list_entry(l, struct mb_cache_entry,
-+                                 e_indexes[index].o_list);
-+              if (ce->e_dev == dev && ce->e_indexes[index].o_key == key) {
-+                      if (!list_empty(&ce->e_lru_list))
-+                              list_del_init(&ce->e_lru_list);
-+                      atomic_inc(&ce->e_used);
-+                      return ce;
-+              }
-+              l = l->next;
-+      }
-+      return NULL;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_find_first()
-+ *
-+ * Find the first cache entry on a given device with a certain key in
-+ * an additional index. Additonal matches can be found with
-+ * mb_cache_entry_find_next(). Returns NULL if no match was found.
-+ *
-+ * @cache: the cache to search
-+ * @index: the number of the additonal index to search (0<=index<indexes_count)
-+ * @dev: the device the cache entry should belong to
-+ * @key: the key in the index
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_find_first(struct mb_cache *cache, int index, kdev_t dev,
-+                        unsigned int key)
-+{
-+      unsigned int bucket = key % cache->c_bucket_count;
-+      struct list_head *l;
-+      struct mb_cache_entry *ce;
-+
-+      mb_assert(index < mb_cache_indexes(cache));
-+      spin_lock(&mb_cache_spinlock);
-+      l = cache->c_indexes_hash[index][bucket].next;
-+      ce = __mb_cache_entry_find(l, &cache->c_indexes_hash[index][bucket],
-+                                 index, dev, key);
-+      spin_unlock(&mb_cache_spinlock);
-+      return ce;
-+}
-+
-+
-+/*
-+ * mb_cache_entry_find_next()
-+ *
-+ * Find the next cache entry on a given device with a certain key in an
-+ * additional index. Returns NULL if no match could be found. The previous
-+ * entry is atomatically released, so that mb_cache_entry_find_next() can
-+ * be called like this:
-+ *
-+ * entry = mb_cache_entry_find_first();
-+ * while (entry) {
-+ *    ...
-+ *    entry = mb_cache_entry_find_next(entry, ...);
-+ * }
-+ *
-+ * @prev: The previous match
-+ * @index: the number of the additonal index to search (0<=index<indexes_count)
-+ * @dev: the device the cache entry should belong to
-+ * @key: the key in the index
-+ */
-+struct mb_cache_entry *
-+mb_cache_entry_find_next(struct mb_cache_entry *prev, int index, kdev_t dev,
-+                       unsigned int key)
-+{
-+      struct mb_cache *cache = prev->e_cache;
-+      unsigned int bucket = key % cache->c_bucket_count;
-+      struct list_head *l;
-+      struct mb_cache_entry *ce;
-+
-+      mb_assert(index < mb_cache_indexes(cache));
-+      spin_lock(&mb_cache_spinlock);
-+      l = prev->e_indexes[index].o_list.next;
-+      ce = __mb_cache_entry_find(l, &cache->c_indexes_hash[index][bucket],
-+                                 index, dev, key);
-+      __mb_cache_entry_release_unlock(prev);
-+      return ce;
-+}
-+
-+#endif  /* !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0) */
-+
-+static int __init init_mbcache(void)
-+{
-+      register_cache(&mb_cache_definition);
-+      return 0;
-+}
-+
-+static void __exit exit_mbcache(void)
-+{
-+      unregister_cache(&mb_cache_definition);
-+}
-+
-+module_init(init_mbcache)
-+module_exit(exit_mbcache)
-+
-Index: linux-2.4.22-vanilla/include/asm-arm/unistd.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/asm-arm/unistd.h 2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/include/asm-arm/unistd.h      2003-12-02 23:55:39.000000000 +0300
-@@ -250,7 +250,6 @@
- #define __NR_security                 (__NR_SYSCALL_BASE+223)
- #define __NR_gettid                   (__NR_SYSCALL_BASE+224)
- #define __NR_readahead                        (__NR_SYSCALL_BASE+225)
--#if 0 /* allocated in 2.5 */
- #define __NR_setxattr                 (__NR_SYSCALL_BASE+226)
- #define __NR_lsetxattr                        (__NR_SYSCALL_BASE+227)
- #define __NR_fsetxattr                        (__NR_SYSCALL_BASE+228)
-@@ -263,7 +262,6 @@
- #define __NR_removexattr              (__NR_SYSCALL_BASE+235)
- #define __NR_lremovexattr             (__NR_SYSCALL_BASE+236)
- #define __NR_fremovexattr             (__NR_SYSCALL_BASE+237)
--#endif
- #define __NR_tkill                    (__NR_SYSCALL_BASE+238)
- #if 0 /* allocated in 2.5 */
- #define __NR_sendfile64                 (__NR_SYSCALL_BASE+239)
-Index: linux-2.4.22-vanilla/include/asm-ppc64/unistd.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/asm-ppc64/unistd.h       2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/include/asm-ppc64/unistd.h    2003-12-02 23:55:39.000000000 +0300
-@@ -218,6 +218,7 @@
- #define __NR_mincore          206
- #define __NR_gettid           207
- #define __NR_tkill            208
-+#endif
- #define __NR_setxattr         209
- #define __NR_lsetxattr                210
- #define __NR_fsetxattr                211
-@@ -230,6 +231,7 @@
- #define __NR_removexattr      218
- #define __NR_lremovexattr     219
- #define __NR_fremovexattr     220
-+#if 0 /* Reserved syscalls */
- #define __NR_futex            221
- #define __NR_sched_setaffinity        222     
- #define __NR_sched_getaffinity        223
-Index: linux-2.4.22-vanilla/include/asm-s390/unistd.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/asm-s390/unistd.h        2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/include/asm-s390/unistd.h     2003-12-02 23:55:39.000000000 +0300
-@@ -213,9 +213,18 @@
- #define __NR_getdents64               220
- #define __NR_fcntl64          221
- #define __NR_readahead                222
--/*
-- * Numbers 224-235 are reserved for posix acl
-- */
-+#define __NR_setxattr         224
-+#define __NR_lsetxattr                225
-+#define __NR_fsetxattr                226
-+#define __NR_getxattr         227
-+#define __NR_lgetxattr                228
-+#define __NR_fgetxattr                229
-+#define __NR_listxattr                230
-+#define __NR_llistxattr               231
-+#define __NR_flistxattr               232
-+#define __NR_removexattr      233
-+#define __NR_lremovexattr     234
-+#define __NR_fremovexattr     235
- #define __NR_gettid           236
- #define __NR_tkill            237
-Index: linux-2.4.22-vanilla/include/asm-s390x/unistd.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/asm-s390x/unistd.h       2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/include/asm-s390x/unistd.h    2003-12-02 23:55:39.000000000 +0300
-@@ -181,9 +181,18 @@
- #define __NR_mincore            218
- #define __NR_madvise            219
- #define __NR_readahead                222
--/*
-- * Numbers 224-235 are reserved for posix acl
-- */
-+#define __NR_setxattr         224
-+#define __NR_lsetxattr                225
-+#define __NR_fsetxattr                226
-+#define __NR_getxattr         227
-+#define __NR_lgetxattr                228
-+#define __NR_fgetxattr                229
-+#define __NR_listxattr                230
-+#define __NR_llistxattr               231
-+#define __NR_flistxattr               232
-+#define __NR_removexattr      233
-+#define __NR_lremovexattr     234
-+#define __NR_fremovexattr     235
- #define __NR_gettid           236
- #define __NR_tkill            237
-Index: linux-2.4.22-vanilla/include/linux/cache_def.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/linux/cache_def.h        2003-12-02 23:55:38.000000000 +0300
-+++ linux-2.4.22-vanilla/include/linux/cache_def.h     2003-12-02 23:55:39.000000000 +0300
-@@ -0,0 +1,15 @@
-+/*
-+ * linux/cache_def.h
-+ * Handling of caches defined in drivers, filesystems, ...
-+ *
-+ * Copyright (C) 2002 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+ */
-+
-+struct cache_definition {
-+      const char *name;
-+      void (*shrink)(int, unsigned int);
-+      struct list_head link;
-+};
-+
-+extern void register_cache(struct cache_definition *);
-+extern void unregister_cache(struct cache_definition *);
-Index: linux-2.4.22-vanilla/include/linux/errno.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/linux/errno.h    2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/include/linux/errno.h 2003-12-02 23:55:39.000000000 +0300
-@@ -23,4 +23,8 @@
- #endif
-+/* Defined for extended attributes */
-+#define ENOATTR ENODATA               /* No such attribute */
-+#define ENOTSUP EOPNOTSUPP    /* Operation not supported */
-+
- #endif
-Index: linux-2.4.22-vanilla/include/linux/ext2_fs.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/linux/ext2_fs.h  2003-11-03 23:41:26.000000000 +0300
-+++ linux-2.4.22-vanilla/include/linux/ext2_fs.h       2003-12-02 23:55:39.000000000 +0300
-@@ -57,8 +57,6 @@
-  */
- #define       EXT2_BAD_INO             1      /* Bad blocks inode */
- #define EXT2_ROOT_INO          2      /* Root inode */
--#define EXT2_ACL_IDX_INO       3      /* ACL inode */
--#define EXT2_ACL_DATA_INO      4      /* ACL inode */
- #define EXT2_BOOT_LOADER_INO   5      /* Boot loader inode */
- #define EXT2_UNDEL_DIR_INO     6      /* Undelete directory inode */
-@@ -86,7 +84,6 @@
- #else
- # define EXT2_BLOCK_SIZE(s)           (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
- #endif
--#define EXT2_ACLE_PER_BLOCK(s)                (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_acl_entry))
- #define       EXT2_ADDR_PER_BLOCK(s)          (EXT2_BLOCK_SIZE(s) / sizeof (__u32))
- #ifdef __KERNEL__
- # define EXT2_BLOCK_SIZE_BITS(s)      ((s)->s_blocksize_bits)
-@@ -121,28 +118,6 @@
- #endif
- /*
-- * ACL structures
-- */
--struct ext2_acl_header        /* Header of Access Control Lists */
--{
--      __u32   aclh_size;
--      __u32   aclh_file_count;
--      __u32   aclh_acle_count;
--      __u32   aclh_first_acle;
--};
--
--struct ext2_acl_entry /* Access Control List Entry */
--{
--      __u32   acle_size;
--      __u16   acle_perms;     /* Access permissions */
--      __u16   acle_type;      /* Type of entry */
--      __u16   acle_tag;       /* User or group identity */
--      __u16   acle_pad1;
--      __u32   acle_next;      /* Pointer on next entry for the */
--                                      /* same inode or on next free entry */
--};
--
--/*
-  * Structure of a blocks group descriptor
-  */
- struct ext2_group_desc
-@@ -314,6 +289,7 @@
- #define EXT2_MOUNT_ERRORS_PANIC               0x0040  /* Panic on errors */
- #define EXT2_MOUNT_MINIX_DF           0x0080  /* Mimics the Minix statfs */
- #define EXT2_MOUNT_NO_UID32           0x0200  /* Disable 32-bit UIDs */
-+#define EXT2_MOUNT_XATTR_USER         0x4000  /* Extended user attributes */
- #define clear_opt(o, opt)             o &= ~EXT2_MOUNT_##opt
- #define set_opt(o, opt)                       o |= EXT2_MOUNT_##opt
-@@ -397,6 +373,7 @@
- #ifdef __KERNEL__
- #define EXT2_SB(sb)   (&((sb)->u.ext2_sb))
-+#define EXT2_I(inode) (&((inode)->u.ext2_i))
- #else
- /* Assume that user mode programs are passing in an ext2fs superblock, not
-  * a kernel struct super_block.  This will allow us to call the feature-test
-@@ -466,7 +443,7 @@
- #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008
- #define EXT2_FEATURE_INCOMPAT_ANY             0xffffffff
--#define EXT2_FEATURE_COMPAT_SUPP      0
-+#define EXT2_FEATURE_COMPAT_SUPP      EXT2_FEATURE_COMPAT_EXT_ATTR
- #define EXT2_FEATURE_INCOMPAT_SUPP    EXT2_FEATURE_INCOMPAT_FILETYPE
- #define EXT2_FEATURE_RO_COMPAT_SUPP   (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
-@@ -624,8 +601,10 @@
- /* namei.c */
- extern struct inode_operations ext2_dir_inode_operations;
-+extern struct inode_operations ext2_special_inode_operations;
- /* symlink.c */
-+extern struct inode_operations ext2_symlink_inode_operations;
- extern struct inode_operations ext2_fast_symlink_inode_operations;
- #endif        /* __KERNEL__ */
-Index: linux-2.4.22-vanilla/include/linux/ext2_xattr.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/linux/ext2_xattr.h       2003-12-02 23:55:38.000000000 +0300
-+++ linux-2.4.22-vanilla/include/linux/ext2_xattr.h    2003-12-02 23:55:39.000000000 +0300
-@@ -0,0 +1,157 @@
-+/*
-+  File: linux/ext2_xattr.h
-+
-+  On-disk format of extended attributes for the ext2 filesystem.
-+
-+  (C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+*/
-+
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/xattr.h>
-+
-+/* Magic value in attribute blocks */
-+#define EXT2_XATTR_MAGIC              0xEA020000
-+
-+/* Maximum number of references to one attribute block */
-+#define EXT2_XATTR_REFCOUNT_MAX               1024
-+
-+/* Name indexes */
-+#define EXT2_XATTR_INDEX_MAX                  10
-+#define EXT2_XATTR_INDEX_USER                 1
-+#define EXT2_XATTR_INDEX_POSIX_ACL_ACCESS     2
-+#define EXT2_XATTR_INDEX_POSIX_ACL_DEFAULT    3
-+
-+struct ext2_xattr_header {
-+      __u32   h_magic;        /* magic number for identification */
-+      __u32   h_refcount;     /* reference count */
-+      __u32   h_blocks;       /* number of disk blocks used */
-+      __u32   h_hash;         /* hash value of all attributes */
-+      __u32   h_reserved[4];  /* zero right now */
-+};
-+
-+struct ext2_xattr_entry {
-+      __u8    e_name_len;     /* length of name */
-+      __u8    e_name_index;   /* attribute name index */
-+      __u16   e_value_offs;   /* offset in disk block of value */
-+      __u32   e_value_block;  /* disk block attribute is stored on (n/i) */
-+      __u32   e_value_size;   /* size of attribute value */
-+      __u32   e_hash;         /* hash value of name and value */
-+      char    e_name[0];      /* attribute name */
-+};
-+
-+#define EXT2_XATTR_PAD_BITS           2
-+#define EXT2_XATTR_PAD                (1<<EXT2_XATTR_PAD_BITS)
-+#define EXT2_XATTR_ROUND              (EXT2_XATTR_PAD-1)
-+#define EXT2_XATTR_LEN(name_len) \
-+      (((name_len) + EXT2_XATTR_ROUND + \
-+      sizeof(struct ext2_xattr_entry)) & ~EXT2_XATTR_ROUND)
-+#define EXT2_XATTR_NEXT(entry) \
-+      ( (struct ext2_xattr_entry *)( \
-+        (char *)(entry) + EXT2_XATTR_LEN((entry)->e_name_len)) )
-+#define EXT2_XATTR_SIZE(size) \
-+      (((size) + EXT2_XATTR_ROUND) & ~EXT2_XATTR_ROUND)
-+
-+#ifdef __KERNEL__
-+
-+# ifdef CONFIG_EXT2_FS_XATTR
-+
-+struct ext2_xattr_handler {
-+      char *prefix;
-+      size_t (*list)(char *list, struct inode *inode, const char *name,
-+                     int name_len);
-+      int (*get)(struct inode *inode, const char *name, void *buffer,
-+                 size_t size);
-+      int (*set)(struct inode *inode, const char *name, const void *buffer,
-+                 size_t size, int flags);
-+};
-+
-+extern int ext2_xattr_register(int, struct ext2_xattr_handler *);
-+extern void ext2_xattr_unregister(int, struct ext2_xattr_handler *);
-+
-+extern int ext2_setxattr(struct dentry *, const char *, const void *, size_t, int);
-+extern ssize_t ext2_getxattr(struct dentry *, const char *, void *, size_t);
-+extern ssize_t ext2_listxattr(struct dentry *, char *, size_t);
-+extern int ext2_removexattr(struct dentry *, const char *);
-+
-+extern int ext2_xattr_get(struct inode *, int, const char *, void *, size_t);
-+extern int ext2_xattr_list(struct inode *, char *, size_t);
-+extern int ext2_xattr_set(struct inode *, int, const char *, const void *, size_t, int);
-+
-+extern void ext2_xattr_delete_inode(struct inode *);
-+extern void ext2_xattr_put_super(struct super_block *);
-+
-+extern int init_ext2_xattr(void) __init;
-+extern void exit_ext2_xattr(void);
-+
-+# else  /* CONFIG_EXT2_FS_XATTR */
-+#  define ext2_setxattr               NULL
-+#  define ext2_getxattr               NULL
-+#  define ext2_listxattr      NULL
-+#  define ext2_removexattr    NULL
-+
-+static inline int
-+ext2_xattr_get(struct inode *inode, int name_index,
-+             const char *name, void *buffer, size_t size)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext2_xattr_list(struct inode *inode, char *buffer, size_t size)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext2_xattr_set(struct inode *inode, int name_index, const char *name,
-+             const void *value, size_t size, int flags)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline void
-+ext2_xattr_delete_inode(struct inode *inode)
-+{
-+}
-+
-+static inline void
-+ext2_xattr_put_super(struct super_block *sb)
-+{
-+}
-+
-+static inline int
-+init_ext2_xattr(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext2_xattr(void)
-+{
-+}
-+
-+# endif  /* CONFIG_EXT2_FS_XATTR */
-+
-+# ifdef CONFIG_EXT2_FS_XATTR_USER
-+
-+extern int init_ext2_xattr_user(void) __init;
-+extern void exit_ext2_xattr_user(void);
-+
-+# else  /* CONFIG_EXT2_FS_XATTR_USER */
-+
-+static inline int
-+init_ext2_xattr_user(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext2_xattr_user(void)
-+{
-+}
-+
-+# endif  /* CONFIG_EXT2_FS_XATTR_USER */
-+
-+#endif  /* __KERNEL__ */
-+
-Index: linux-2.4.22-vanilla/include/linux/ext3_fs.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/linux/ext3_fs.h  2003-12-02 23:55:37.000000000 +0300
-+++ linux-2.4.22-vanilla/include/linux/ext3_fs.h       2003-12-02 23:55:39.000000000 +0300
-@@ -63,8 +63,6 @@
-  */
- #define       EXT3_BAD_INO             1      /* Bad blocks inode */
- #define EXT3_ROOT_INO          2      /* Root inode */
--#define EXT3_ACL_IDX_INO       3      /* ACL inode */
--#define EXT3_ACL_DATA_INO      4      /* ACL inode */
- #define EXT3_BOOT_LOADER_INO   5      /* Boot loader inode */
- #define EXT3_UNDEL_DIR_INO     6      /* Undelete directory inode */
- #define EXT3_RESIZE_INO                7      /* Reserved group descriptors inode */
-@@ -94,7 +92,6 @@
- #else
- # define EXT3_BLOCK_SIZE(s)           (EXT3_MIN_BLOCK_SIZE << (s)->s_log_block_size)
- #endif
--#define EXT3_ACLE_PER_BLOCK(s)                (EXT3_BLOCK_SIZE(s) / sizeof (struct ext3_acl_entry))
- #define       EXT3_ADDR_PER_BLOCK(s)          (EXT3_BLOCK_SIZE(s) / sizeof (__u32))
- #ifdef __KERNEL__
- # define EXT3_BLOCK_SIZE_BITS(s)      ((s)->s_blocksize_bits)
-@@ -129,28 +126,6 @@
- #endif
- /*
-- * ACL structures
-- */
--struct ext3_acl_header        /* Header of Access Control Lists */
--{
--      __u32   aclh_size;
--      __u32   aclh_file_count;
--      __u32   aclh_acle_count;
--      __u32   aclh_first_acle;
--};
--
--struct ext3_acl_entry /* Access Control List Entry */
--{
--      __u32   acle_size;
--      __u16   acle_perms;     /* Access permissions */
--      __u16   acle_type;      /* Type of entry */
--      __u16   acle_tag;       /* User or group identity */
--      __u16   acle_pad1;
--      __u32   acle_next;      /* Pointer on next entry for the */
--                                      /* same inode or on next free entry */
--};
--
--/*
-  * Structure of a blocks group descriptor
-  */
- struct ext3_group_desc
-@@ -344,6 +319,7 @@
-   #define EXT3_MOUNT_WRITEBACK_DATA   0x0C00  /* No data ordering */
- #define EXT3_MOUNT_UPDATE_JOURNAL     0x1000  /* Update the journal format */
- #define EXT3_MOUNT_NO_UID32           0x2000  /* Disable 32-bit UIDs */
-+#define EXT3_MOUNT_XATTR_USER         0x4000  /* Extended user attributes */
- /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
- #ifndef _LINUX_EXT2_FS_H
-@@ -521,7 +497,7 @@
- #define EXT3_FEATURE_INCOMPAT_RECOVER         0x0004 /* Needs recovery */
- #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008 /* Journal device */
--#define EXT3_FEATURE_COMPAT_SUPP      0
-+#define EXT3_FEATURE_COMPAT_SUPP      EXT2_FEATURE_COMPAT_EXT_ATTR
- #define EXT3_FEATURE_INCOMPAT_SUPP    (EXT3_FEATURE_INCOMPAT_FILETYPE| \
-                                        EXT3_FEATURE_INCOMPAT_RECOVER)
- #define EXT3_FEATURE_RO_COMPAT_SUPP   (EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-@@ -704,6 +680,7 @@
- extern unsigned long ext3_count_free (struct buffer_head *, unsigned);
- /* inode.c */
-+extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
- extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
- extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
-@@ -773,8 +750,10 @@
- /* namei.c */
- extern struct inode_operations ext3_dir_inode_operations;
-+extern struct inode_operations ext3_special_inode_operations;
- /* symlink.c */
-+extern struct inode_operations ext3_symlink_inode_operations;
- extern struct inode_operations ext3_fast_symlink_inode_operations;
-Index: linux-2.4.22-vanilla/include/linux/ext3_jbd.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/linux/ext3_jbd.h 2003-12-02 23:55:37.000000000 +0300
-+++ linux-2.4.22-vanilla/include/linux/ext3_jbd.h      2003-12-02 23:55:39.000000000 +0300
-@@ -30,13 +30,19 @@
- #define EXT3_SINGLEDATA_TRANS_BLOCKS  8U
-+/* Extended attributes may touch two data buffers, two bitmap buffers,
-+ * and two group and summaries. */
-+
-+#define EXT3_XATTR_TRANS_BLOCKS               8
-+
- /* Define the minimum size for a transaction which modifies data.  This
-  * needs to take into account the fact that we may end up modifying two
-  * quota files too (one for the group, one for the user quota).  The
-  * superblock only gets updated once, of course, so don't bother
-  * counting that again for the quota updates. */
--#define EXT3_DATA_TRANS_BLOCKS                (3 * EXT3_SINGLEDATA_TRANS_BLOCKS - 2)
-+#define EXT3_DATA_TRANS_BLOCKS                (3 * EXT3_SINGLEDATA_TRANS_BLOCKS + \
-+                                       EXT3_XATTR_TRANS_BLOCKS - 2)
- extern int ext3_writepage_trans_blocks(struct inode *inode);
-Index: linux-2.4.22-vanilla/include/linux/ext3_xattr.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/linux/ext3_xattr.h       2003-12-02 23:55:38.000000000 +0300
-+++ linux-2.4.22-vanilla/include/linux/ext3_xattr.h    2003-12-02 23:55:39.000000000 +0300
-@@ -0,0 +1,157 @@
-+/*
-+  File: linux/ext3_xattr.h
-+
-+  On-disk format of extended attributes for the ext3 filesystem.
-+
-+  (C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+*/
-+
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/xattr.h>
-+
-+/* Magic value in attribute blocks */
-+#define EXT3_XATTR_MAGIC              0xEA020000
-+
-+/* Maximum number of references to one attribute block */
-+#define EXT3_XATTR_REFCOUNT_MAX               1024
-+
-+/* Name indexes */
-+#define EXT3_XATTR_INDEX_MAX                  10
-+#define EXT3_XATTR_INDEX_USER                 1
-+#define EXT3_XATTR_INDEX_POSIX_ACL_ACCESS     2
-+#define EXT3_XATTR_INDEX_POSIX_ACL_DEFAULT    3
-+
-+struct ext3_xattr_header {
-+      __u32   h_magic;        /* magic number for identification */
-+      __u32   h_refcount;     /* reference count */
-+      __u32   h_blocks;       /* number of disk blocks used */
-+      __u32   h_hash;         /* hash value of all attributes */
-+      __u32   h_reserved[4];  /* zero right now */
-+};
-+
-+struct ext3_xattr_entry {
-+      __u8    e_name_len;     /* length of name */
-+      __u8    e_name_index;   /* attribute name index */
-+      __u16   e_value_offs;   /* offset in disk block of value */
-+      __u32   e_value_block;  /* disk block attribute is stored on (n/i) */
-+      __u32   e_value_size;   /* size of attribute value */
-+      __u32   e_hash;         /* hash value of name and value */
-+      char    e_name[0];      /* attribute name */
-+};
-+
-+#define EXT3_XATTR_PAD_BITS           2
-+#define EXT3_XATTR_PAD                (1<<EXT3_XATTR_PAD_BITS)
-+#define EXT3_XATTR_ROUND              (EXT3_XATTR_PAD-1)
-+#define EXT3_XATTR_LEN(name_len) \
-+      (((name_len) + EXT3_XATTR_ROUND + \
-+      sizeof(struct ext3_xattr_entry)) & ~EXT3_XATTR_ROUND)
-+#define EXT3_XATTR_NEXT(entry) \
-+      ( (struct ext3_xattr_entry *)( \
-+        (char *)(entry) + EXT3_XATTR_LEN((entry)->e_name_len)) )
-+#define EXT3_XATTR_SIZE(size) \
-+      (((size) + EXT3_XATTR_ROUND) & ~EXT3_XATTR_ROUND)
-+
-+#ifdef __KERNEL__
-+
-+# ifdef CONFIG_EXT3_FS_XATTR
-+
-+struct ext3_xattr_handler {
-+      char *prefix;
-+      size_t (*list)(char *list, struct inode *inode, const char *name,
-+                     int name_len);
-+      int (*get)(struct inode *inode, const char *name, void *buffer,
-+                 size_t size);
-+      int (*set)(struct inode *inode, const char *name, const void *buffer,
-+                 size_t size, int flags);
-+};
-+
-+extern int ext3_xattr_register(int, struct ext3_xattr_handler *);
-+extern void ext3_xattr_unregister(int, struct ext3_xattr_handler *);
-+
-+extern int ext3_setxattr(struct dentry *, const char *, const void *, size_t, int);
-+extern ssize_t ext3_getxattr(struct dentry *, const char *, void *, size_t);
-+extern ssize_t ext3_listxattr(struct dentry *, char *, size_t);
-+extern int ext3_removexattr(struct dentry *, const char *);
-+
-+extern int ext3_xattr_get(struct inode *, int, const char *, void *, size_t);
-+extern int ext3_xattr_list(struct inode *, char *, size_t);
-+extern int ext3_xattr_set(handle_t *handle, struct inode *, int, const char *, const void *, size_t, int);
-+
-+extern void ext3_xattr_delete_inode(handle_t *, struct inode *);
-+extern void ext3_xattr_put_super(struct super_block *);
-+
-+extern int init_ext3_xattr(void) __init;
-+extern void exit_ext3_xattr(void);
-+
-+# else  /* CONFIG_EXT3_FS_XATTR */
-+#  define ext3_setxattr               NULL
-+#  define ext3_getxattr               NULL
-+#  define ext3_listxattr      NULL
-+#  define ext3_removexattr    NULL
-+
-+static inline int
-+ext3_xattr_get(struct inode *inode, int name_index, const char *name,
-+             void *buffer, size_t size)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext3_xattr_list(struct inode *inode, void *buffer, size_t size)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline int
-+ext3_xattr_set(handle_t *handle, struct inode *inode, int name_index,
-+             const char *name, const void *value, size_t size, int flags)
-+{
-+      return -ENOTSUP;
-+}
-+
-+static inline void
-+ext3_xattr_delete_inode(handle_t *handle, struct inode *inode)
-+{
-+}
-+
-+static inline void
-+ext3_xattr_put_super(struct super_block *sb)
-+{
-+}
-+
-+static inline int
-+init_ext3_xattr(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext3_xattr(void)
-+{
-+}
-+
-+# endif  /* CONFIG_EXT3_FS_XATTR */
-+
-+# ifdef CONFIG_EXT3_FS_XATTR_USER
-+
-+extern int init_ext3_xattr_user(void) __init;
-+extern void exit_ext3_xattr_user(void);
-+
-+# else  /* CONFIG_EXT3_FS_XATTR_USER */
-+
-+static inline int
-+init_ext3_xattr_user(void)
-+{
-+      return 0;
-+}
-+
-+static inline void
-+exit_ext3_xattr_user(void)
-+{
-+}
-+
-+#endif  /* CONFIG_EXT3_FS_XATTR_USER */
-+
-+#endif  /* __KERNEL__ */
-+
-Index: linux-2.4.22-vanilla/include/linux/fs.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/linux/fs.h       2003-12-02 23:55:35.000000000 +0300
-+++ linux-2.4.22-vanilla/include/linux/fs.h    2003-12-02 23:55:39.000000000 +0300
-@@ -913,7 +913,7 @@
-       int (*setattr) (struct dentry *, struct iattr *);
-       int (*setattr_raw) (struct inode *, struct iattr *);
-       int (*getattr) (struct dentry *, struct iattr *);
--      int (*setxattr) (struct dentry *, const char *, void *, size_t, int);
-+      int (*setxattr) (struct dentry *, const char *, const void *, size_t, int);
-       ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
-       ssize_t (*listxattr) (struct dentry *, char *, size_t);
-       int (*removexattr) (struct dentry *, const char *);
-Index: linux-2.4.22-vanilla/include/linux/mbcache.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/linux/mbcache.h  2003-12-02 23:55:38.000000000 +0300
-+++ linux-2.4.22-vanilla/include/linux/mbcache.h       2003-12-02 23:55:39.000000000 +0300
-@@ -0,0 +1,69 @@
-+/*
-+  File: linux/mbcache.h
-+
-+  (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
-+*/
-+
-+/* Hardwire the number of additional indexes */
-+#define MB_CACHE_INDEXES_COUNT 1
-+
-+struct mb_cache_entry;
-+
-+struct mb_cache_op {
-+      int (*free)(struct mb_cache_entry *, int);
-+};
-+
-+struct mb_cache {
-+      struct list_head                c_cache_list;
-+      const char                      *c_name;
-+      struct mb_cache_op              c_op;
-+      atomic_t                        c_entry_count;
-+      int                             c_bucket_count;
-+#ifndef MB_CACHE_INDEXES_COUNT
-+      int                             c_indexes_count;
-+#endif
-+      kmem_cache_t                    *c_entry_cache;
-+      struct list_head                *c_block_hash;
-+      struct list_head                *c_indexes_hash[0];
-+};
-+
-+struct mb_cache_entry_index {
-+      struct list_head                o_list;
-+      unsigned int                    o_key;
-+};
-+
-+struct mb_cache_entry {
-+      struct list_head                e_lru_list;
-+      struct mb_cache                 *e_cache;
-+      atomic_t                        e_used;
-+      kdev_t                          e_dev;
-+      unsigned long                   e_block;
-+      struct list_head                e_block_list;
-+      struct mb_cache_entry_index     e_indexes[0];
-+};
-+
-+/* Functions on caches */
-+
-+struct mb_cache * mb_cache_create(const char *, struct mb_cache_op *, size_t,
-+                                int, int);
-+void mb_cache_shrink(struct mb_cache *, kdev_t);
-+void mb_cache_destroy(struct mb_cache *);
-+
-+/* Functions on cache entries */
-+
-+struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *);
-+int mb_cache_entry_insert(struct mb_cache_entry *, kdev_t, unsigned long,
-+                        unsigned int[]);
-+void mb_cache_entry_rehash(struct mb_cache_entry *, unsigned int[]);
-+void mb_cache_entry_release(struct mb_cache_entry *);
-+void mb_cache_entry_takeout(struct mb_cache_entry *);
-+void mb_cache_entry_free(struct mb_cache_entry *);
-+struct mb_cache_entry *mb_cache_entry_dup(struct mb_cache_entry *);
-+struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *, kdev_t,
-+                                        unsigned long);
-+#if !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0)
-+struct mb_cache_entry *mb_cache_entry_find_first(struct mb_cache *cache, int,
-+                                               kdev_t, unsigned int);
-+struct mb_cache_entry *mb_cache_entry_find_next(struct mb_cache_entry *, int,
-+                                              kdev_t, unsigned int);
-+#endif
-Index: linux-2.4.22-vanilla/kernel/ksyms.c
-===================================================================
---- linux-2.4.22-vanilla.orig/kernel/ksyms.c   2003-12-02 23:55:34.000000000 +0300
-+++ linux-2.4.22-vanilla/kernel/ksyms.c        2003-12-02 23:55:39.000000000 +0300
-@@ -11,6 +11,7 @@
- #include <linux/config.h>
- #include <linux/slab.h>
-+#include <linux/cache_def.h>
- #include <linux/module.h>
- #include <linux/blkdev.h>
- #include <linux/cdrom.h>
-@@ -91,6 +92,7 @@
- EXPORT_SYMBOL(exit_files);
- EXPORT_SYMBOL(exit_fs);
- EXPORT_SYMBOL(exit_sighand);
-+EXPORT_SYMBOL(copy_fs_struct);
- /* internal kernel memory management */
- EXPORT_SYMBOL(_alloc_pages);
-@@ -108,6 +110,8 @@
- EXPORT_SYMBOL(kmem_cache_alloc);
- EXPORT_SYMBOL(kmem_cache_free);
- EXPORT_SYMBOL(kmem_cache_size);
-+EXPORT_SYMBOL(register_cache);
-+EXPORT_SYMBOL(unregister_cache);
- EXPORT_SYMBOL(kmalloc);
- EXPORT_SYMBOL(kfree);
- EXPORT_SYMBOL(vfree);
-Index: linux-2.4.22-vanilla/mm/vmscan.c
-===================================================================
---- linux-2.4.22-vanilla.orig/mm/vmscan.c      2003-11-03 23:41:27.000000000 +0300
-+++ linux-2.4.22-vanilla/mm/vmscan.c   2003-12-02 23:55:39.000000000 +0300
-@@ -18,6 +18,7 @@
- #include <linux/kernel_stat.h>
- #include <linux/swap.h>
- #include <linux/swapctl.h>
-+#include <linux/cache_def.h>
- #include <linux/smp_lock.h>
- #include <linux/pagemap.h>
- #include <linux/init.h>
-@@ -34,6 +35,39 @@
-  */
- #define DEF_PRIORITY (6)
-+static DECLARE_MUTEX(other_caches_sem);
-+static LIST_HEAD(cache_definitions);
-+
-+void register_cache(struct cache_definition *cache)
-+{
-+      down(&other_caches_sem);
-+      list_add(&cache->link, &cache_definitions);
-+      up(&other_caches_sem);
-+}
-+
-+void unregister_cache(struct cache_definition *cache)
-+{
-+      down(&other_caches_sem);
-+      list_del(&cache->link);
-+      up(&other_caches_sem);
-+}
-+
-+static void shrink_other_caches(unsigned int priority, int gfp_mask)
-+{
-+      struct list_head *p;
-+
-+      if (down_trylock(&other_caches_sem))
-+              return;
-+
-+      list_for_each_prev(p, &cache_definitions) {
-+              struct cache_definition *cache =
-+                      list_entry(p, struct cache_definition, link);
-+
-+              cache->shrink(priority, gfp_mask);
-+      }
-+      up(&other_caches_sem);
-+}
-+
- /*
-  * The swap-out function returns 1 if it successfully
-  * scanned all the pages it was asked to (`count').
-@@ -577,6 +611,7 @@
-       shrink_dcache_memory(priority, gfp_mask);
-       shrink_icache_memory(priority, gfp_mask);
-+      shrink_other_caches(priority, gfp_mask);
- #ifdef CONFIG_QUOTA
-       shrink_dqcache_memory(DEF_PRIORITY, gfp_mask);
- #endif
-Index: linux-2.4.22-vanilla/fs/ext3/ext3-exports.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/ext3/ext3-exports.c   2003-12-02 23:55:38.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/ext3/ext3-exports.c        2003-12-02 23:55:39.000000000 +0300
-@@ -0,0 +1,13 @@
-+#include <linux/config.h>
-+#include <linux/module.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_xattr.h>
-+
-+EXPORT_SYMBOL(ext3_force_commit);
-+EXPORT_SYMBOL(ext3_bread);
-+EXPORT_SYMBOL(ext3_xattr_register);
-+EXPORT_SYMBOL(ext3_xattr_unregister);
-+EXPORT_SYMBOL(ext3_xattr_get);
-+EXPORT_SYMBOL(ext3_xattr_list);
-+EXPORT_SYMBOL(ext3_xattr_set);
index 0109dd9..4cf5c2c 100644 (file)
@@ -1738,7 +1738,7 @@ Index: linux-2.4.24-vanilla/fs/ext2/xattr.c
 +              } else if (old_bh && header == HDR(old_bh)) {
 +                      /* Keep this block. */
 +                      new_bh = old_bh;
-+                      ext2_xattr_cache_insert(new_bh);
++                      (void)ext2_xattr_cache_insert(new_bh);
 +              } else {
 +                      /* We need to allocate a new block */
 +                      int force = EXT2_I(inode)->i_file_acl != 0;
@@ -1757,7 +1757,7 @@ Index: linux-2.4.24-vanilla/fs/ext2/xattr.c
 +                      memcpy(new_bh->b_data, header, new_bh->b_size);
 +                      mark_buffer_uptodate(new_bh, 1);
 +                      unlock_buffer(new_bh);
-+                      ext2_xattr_cache_insert(new_bh);
++                      (void)ext2_xattr_cache_insert(new_bh);
 +                      
 +                      ext2_xattr_update_super_block(sb);
 +              }
@@ -3426,7 +3426,7 @@ Index: linux-2.4.24-vanilla/fs/ext3/xattr.c
 +              } else if (old_bh && header == HDR(old_bh)) {
 +                      /* Keep this block. */
 +                      new_bh = old_bh;
-+                      ext3_xattr_cache_insert(new_bh);
++                      (void)ext3_xattr_cache_insert(new_bh);
 +              } else {
 +                      /* We need to allocate a new block */
 +                      int force = EXT3_I(inode)->i_file_acl != 0;
@@ -3451,7 +3451,7 @@ Index: linux-2.4.24-vanilla/fs/ext3/xattr.c
 +                      memcpy(new_bh->b_data, header, new_bh->b_size);
 +                      mark_buffer_uptodate(new_bh, 1);
 +                      unlock_buffer(new_bh);
-+                      ext3_xattr_cache_insert(new_bh);
++                      (void)ext3_xattr_cache_insert(new_bh);
 +                      
 +                      ext3_xattr_update_super_block(handle, sb);
 +              }
diff --git a/lustre/kernel_patches/patches/listman-2.4.18.patch b/lustre/kernel_patches/patches/listman-2.4.18.patch
deleted file mode 100644 (file)
index 19ad959..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-Index: linux-2.4.18-chaos/include/linux/list.h
-===================================================================
---- linux-2.4.18-chaos.orig/include/linux/list.h       2003-11-23 00:07:05.000000000 +0300
-+++ linux-2.4.18-chaos/include/linux/list.h    2003-12-11 00:25:15.000000000 +0300
-@@ -173,6 +173,67 @@
-       for (pos = (head)->prev, prefetch(pos->prev); pos != (head); \
-               pos = pos->prev, prefetch(pos->prev))
-               
-+/**
-+ * list_for_each_entry        -       iterate over list of given type
-+ * @pos:      the type * to use as a loop counter.
-+ * @head:     the head for your list.
-+ * @member:   the name of the list_struct within the struct.
-+ */
-+#define list_for_each_entry(pos, head, member)                                \
-+      for (pos = list_entry((head)->next, typeof(*pos), member),      \
-+                   prefetch(pos->member.next);                        \
-+           &pos->member != (head);                                    \
-+           pos = list_entry(pos->member.next, typeof(*pos), member),  \
-+                   prefetch(pos->member.next))
-+
-+#ifndef list_for_each_entry_safe
-+/**
-+ * list_for_each_entry_safe  -       iterate over list of given type safe against removal of list entry
-+ * @pos:        the type * to use as a loop counter.
-+ * @n:          another type * to use as temporary storage
-+ * @head:       the head for your list.
-+ * @member:     the name of the list_struct within the struct.
-+ */
-+#define list_for_each_entry_safe(pos, n, head, member)                        \
-+        for (pos = list_entry((head)->next, typeof(*pos), member),    \
-+              n = list_entry(pos->member.next, typeof(*pos), member); \
-+           &pos->member != (head);                                    \
-+           pos = n, n = list_entry(n->member.next, typeof(*n), member))
-+#endif
-+
-+/**
-+ * list_move - delete from one list and add as another's head
-+ * @list: the entry to move
-+ * @head: the head that will precede our entry
-+ */
-+static inline void list_move(struct list_head *list, struct list_head *head)
-+{
-+      __list_del(list->prev, list->next);
-+      list_add(list, head);
-+}
-+
-+/**
-+ * list_move_tail - delete from one list and add as another's tail
-+ * @list: the entry to move
-+ * @head: the head that will follow our entry
-+ */
-+static inline void list_move_tail(struct list_head *list,
-+                                struct list_head *head)
-+{
-+      __list_del(list->prev, list->next);
-+      list_add_tail(list, head);
-+}
-+
-+/* 2.5 uses hlists for some things, like the d_hash.  we'll treat them
-+ * as 2.5 and let macros drop back.. */
-+#define hlist_entry                     list_entry
-+#define hlist_head                      list_head
-+#define hlist_node                      list_head
-+#define HLIST_HEAD                      LIST_HEAD
-+#define INIT_HLIST_HEAD                 INIT_LIST_HEAD
-+#define hlist_del_init                  list_del_init
-+#define hlist_add_head                  list_add
-+#define hlist_for_each_safe             list_for_each_safe
- #endif /* __KERNEL__ || _LVM_H_INCLUDE */
diff --git a/lustre/kernel_patches/patches/loop_device_get_info.patch b/lustre/kernel_patches/patches/loop_device_get_info.patch
deleted file mode 100644 (file)
index d45d64b..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-Index: linux-2.4.20-8/drivers/block/loop.c
-===================================================================
---- linux-2.4.20-8.orig/drivers/block/loop.c   2002-11-29 07:53:12.000000000 +0800
-+++ linux-2.4.20-8/drivers/block/loop.c        2004-01-10 00:02:33.000000000 +0800
-@@ -843,6 +843,31 @@
-       }
-       return copy_to_user(arg, &info, sizeof(info)) ? -EFAULT : 0;
- }
-+static int loop_get_info(struct loop_device *lo, struct loop_info *arg)
-+{
-+      struct loop_info        info;
-+      struct file *file = lo->lo_backing_file;
-+
-+      if (lo->lo_state != Lo_bound)
-+              return -ENXIO;
-+      if (!arg)
-+              return -EINVAL;
-+      memset(&info, 0, sizeof(info));
-+      info.lo_number = lo->lo_number;
-+      info.lo_device = kdev_t_to_nr(file->f_dentry->d_inode->i_dev);
-+      info.lo_inode = file->f_dentry->d_inode->i_ino;
-+      info.lo_rdevice = kdev_t_to_nr(lo->lo_device);
-+      info.lo_offset = lo->lo_offset;
-+      info.lo_flags = lo->lo_flags;
-+      strncpy(info.lo_name, lo->lo_name, LO_NAME_SIZE);
-+      info.lo_encrypt_type = lo->lo_encrypt_type;
-+      if (lo->lo_encrypt_key_size && capable(CAP_SYS_ADMIN)) {
-+              info.lo_encrypt_key_size = lo->lo_encrypt_key_size;
-+              memcpy(info.lo_encrypt_key, lo->lo_encrypt_key,
-+                     lo->lo_encrypt_key_size);
-+      }
-+      return memcpy(arg, &info, sizeof(info)) ? -EFAULT : 0;
-+}
- static int lo_ioctl(struct inode * inode, struct file * file,
-       unsigned int cmd, unsigned long arg)
-@@ -875,6 +900,9 @@
-       case LOOP_GET_STATUS:
-               err = loop_get_status(lo, (struct loop_info *) arg);
-               break;
-+      case LOOP_GET_INFO:
-+              err = loop_get_info(lo, (struct loop_info *) arg);
-+              break;
-       case BLKGETSIZE:
-               if (lo->lo_state != Lo_bound) {
-                       err = -ENXIO;
-Index: linux-2.4.20-8/include/linux/loop.h
-===================================================================
---- linux-2.4.20-8.orig/include/linux/loop.h   2001-09-18 04:16:30.000000000 +0800
-+++ linux-2.4.20-8/include/linux/loop.h        2004-01-09 23:50:17.000000000 +0800
-@@ -151,5 +151,6 @@
- #define LOOP_CLR_FD   0x4C01
- #define LOOP_SET_STATUS       0x4C02
- #define LOOP_GET_STATUS       0x4C03
-+#define LOOP_GET_INFO 0x4C04
- #endif
index 6df5d04..b478e8a 100644 (file)
@@ -1,6 +1,8 @@
+Version 41: revalidate should check working dir is a directory (b=4134)
 Version 40: >32000 subdirectories support for ext3 (b=3244)
 Version 39: add EXPORT_SYMBOL(smp_num_siblings) to vanilla-2.4.24 (b=3966)
             eebperf (unfragmented 1MB write/read support)
+            48-bit physical block support for extents
 Version 38: drop dentry ref in ext3_add_link from open_connect_dentry (b=3266)
 Version 37: fix htree rename-within-same-dir (b=3417), endianness (b=2447)
 Version 36: don't dput dentry after error (b=2350), zero page->private (3119)
diff --git a/lustre/kernel_patches/patches/netconsole-over-netpoll.patch b/lustre/kernel_patches/patches/netconsole-over-netpoll.patch
deleted file mode 100644 (file)
index c715c84..0000000
+++ /dev/null
@@ -1,416 +0,0 @@
- Documentation/networking/netconsole.txt |   57 ++++++++
- arch/i386/kernel/i386_ksyms.c           |    8 +
- arch/i386/kernel/irq.c                  |   12 +
- drivers/net/Kconfig                     |    7 +
- drivers/net/Makefile                    |    1 
- drivers/net/netconsole.c                |  217 ++++++++++++++++++++++++++++++++
- include/asm-i386/netconsole.h           |    6 
- net/Kconfig                             |    2 
- net/core/dev.c                          |    3 
- 9 files changed, 311 insertions(+), 2 deletions(-)
-
---- linux-2.6.0-test6/arch/i386/kernel/i386_ksyms.c~netconsole-over-netpoll    2003-10-14 17:44:04.000000000 +0400
-+++ linux-2.6.0-test6-alexey/arch/i386/kernel/i386_ksyms.c     2003-10-14 17:45:08.000000000 +0400
-@@ -34,7 +34,7 @@
- #include <asm/nmi.h>
- #include <asm/edd.h>
- #include <asm/ist.h>
--
-+#include <asm/netconsole.h>
- extern void dump_thread(struct pt_regs *, struct user *);
- extern spinlock_t rtc_lock;
-@@ -211,6 +211,12 @@ EXPORT_SYMBOL(edd);
- EXPORT_SYMBOL(eddnr);
- #endif
-+#ifdef CONFIG_NETCONSOLE
-+EXPORT_SYMBOL(netconsole_sysrq_req);
-+EXPORT_SYMBOL(netconsole_do_sysrq);
-+EXPORT_SYMBOL(netif_in_poll);
-+#endif
-+
- #if defined(CONFIG_X86_SPEEDSTEP_SMI) || defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE)
- EXPORT_SYMBOL(ist_info);
- #endif
---- linux-2.6.0-test6/arch/i386/kernel/irq.c~netconsole-over-netpoll   2003-10-14 17:45:03.000000000 +0400
-+++ linux-2.6.0-test6-alexey/arch/i386/kernel/irq.c    2003-10-14 17:45:08.000000000 +0400
-@@ -45,6 +45,7 @@
- #include <asm/desc.h>
- #include <asm/irq.h>
- #include <asm/kgdb.h>
-+#include <asm/netconsole.h>
- /*
-  * Linux has a controller-independent x86 interrupt architecture.
-@@ -510,6 +511,17 @@ out:
-               BREAKPOINT;
-       }
- #endif
-+#ifdef CONFIG_NETCONSOLE
-+      /*
-+       * We need to do this after clearing out of all the interrupt
-+       * machinery because kgdb will reenter the NIC driver and the IRQ
-+       * system.  synchronize_irq() (at least) will deadlock.
-+       */
-+      if (netconsole_sysrq_req && !netif_in_poll) {
-+              netconsole_sysrq_req = 0;
-+              HANDLE_NETCONSOLE;
-+      }
-+#endif
-       return 1;
- }
---- /dev/null  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.6.0-test6-alexey/Documentation/networking/netconsole.txt   2003-10-14 17:45:08.000000000 +0400
-@@ -0,0 +1,57 @@
-+
-+started by Ingo Molnar <mingo@redhat.com>, 2001.09.17
-+2.6 port and netpoll api by Matt Mackall <mpm@selenic.com>, Sep 9 2003
-+
-+Please send bug reports to Matt Mackall <mpm@selenic.com>
-+
-+This module logs kernel printk messages over UDP allowing debugging of
-+problem where disk logging fails and serial consoles are impractical.
-+
-+It can be used either built-in or as a module. As a built-in,
-+netconsole initializes immediately after NIC cards and will bring up
-+the specified interface as soon as possible. While this doesn't allow
-+capture of early kernel panics, it does capture most of the boot
-+process.
-+
-+It takes a string configuration parameter "netconsole" in the
-+following format:
-+
-+ netconsole=[src-port]@[src-ip]/[<dev>],[tgt-port]@<tgt-ip>/[tgt-macaddr]
-+
-+   where
-+        src-port      source for UDP packets (defaults to 6666)
-+        src-ip        source IP to use (interface address)
-+        dev           network interface (eth0)
-+        tgt-port      port for logging agent (514)
-+        tgt-ip        IP address for logging agent
-+        tgt-macaddr   ethernet MAC address for logging agent (broadcast)
-+
-+Examples:
-+
-+ linux netconsole=4444@10.0.0.1/eth1,9353@10.0.0.2/12:34:56:78:9a:bc
-+
-+  or
-+
-+ insmod netconsole netconsole=@/,@10.0.0.2/
-+
-+Built-in netconsole starts immediately after the TCP stack is
-+initialized and attempts to bring up the supplied dev at the supplied
-+address.
-+
-+The remote host can run either 'netcat -u -l -p <port>' or syslogd.
-+
-+WARNING: the default target ethernet setting uses the broadcast
-+ethernet address to send packets, which can cause increased load on
-+other systems on the same ethernet segment.
-+
-+NOTE: the network device (eth1 in the above case) can run any kind
-+of other network traffic, netconsole is not intrusive. Netconsole
-+might cause slight delays in other traffic if the volume of kernel
-+messages is high, but should have no other impact.
-+
-+Netconsole was designed to be as instantaneous as possible, to
-+enable the logging of even the most critical kernel bugs. It works
-+from IRQ contexts as well, and does not enable interrupts while
-+sending packets. Due to these unique needs, configuration can not
-+be more automatic, and some fundamental limitations will remain:
-+only IP networks, UDP packets and ethernet devices are supported.
---- linux-2.6.0-test6/drivers/net/Kconfig~netconsole-over-netpoll      2003-10-14 17:44:05.000000000 +0400
-+++ linux-2.6.0-test6-alexey/drivers/net/Kconfig       2003-10-14 17:45:08.000000000 +0400
-@@ -2444,6 +2444,13 @@ config SHAPER
- config NET_POLL_CONTROLLER
-       def_bool KGDB
-+config NETCONSOLE
-+      tristate "Network console logging support"
-+      depends on NETDEVICES
-+      ---help---
-+      If you want to log kernel messages over the network, enable this.
-+      See Documentation/networking/netconsole.txt for details.
-+
- source "drivers/net/wan/Kconfig"
- source "drivers/net/pcmcia/Kconfig"
---- linux-2.6.0-test6/drivers/net/Makefile~netconsole-over-netpoll     2003-10-14 17:45:04.000000000 +0400
-+++ linux-2.6.0-test6-alexey/drivers/net/Makefile      2003-10-14 17:45:08.000000000 +0400
-@@ -109,6 +109,7 @@ ifeq ($(CONFIG_SLIP_COMPRESSED),y)
- endif
- # Must come after all NICs it might use
- obj-$(CONFIG_KGDB) += kgdb_eth.o
-+obj-$(CONFIG_NETCONSOLE) += netconsole.o
- obj-$(CONFIG_DUMMY) += dummy.o
- obj-$(CONFIG_DE600) += de600.o
---- /dev/null  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.6.0-test6-alexey/drivers/net/netconsole.c  2003-10-14 17:45:56.000000000 +0400
-@@ -0,0 +1,217 @@
-+/*
-+ *  linux/drivers/net/netconsole.c
-+ *
-+ *  Copyright (C) 2001  Ingo Molnar <mingo@redhat.com>
-+ *
-+ *  This file contains the implementation of an IRQ-safe, crash-safe
-+ *  kernel console implementation that outputs kernel messages to the
-+ *  network.
-+ *
-+ * Modification history:
-+ *
-+ * 2001-09-17    started by Ingo Molnar.
-+ * 2003-08-11    2.6 port by Matt Mackall
-+ *               simplified options
-+ *               generic card hooks
-+ *               works non-modular
-+ * 2003-09-07    rewritten with netpoll api
-+ * 2003-09-27    updated by wangdi <wangdi@clusterfs.com>
-+ */
-+
-+/****************************************************************
-+ *      This program is free software; you can redistribute it and/or modify
-+ *      it under the terms of the GNU General Public License as published by
-+ *      the Free Software Foundation; either version 2, or (at your option)
-+ *      any later version.
-+ *
-+ *      This program is distributed in the hope that it will be useful,
-+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *      GNU General Public License for more details.
-+ *
-+ *      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 <linux/mm.h>
-+#include <linux/tty.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/console.h>
-+#include <linux/tty_driver.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/string.h>
-+#include <linux/sysrq.h>
-+#include <linux/smp.h>
-+#include <linux/netpoll.h>
-+#include <linux/dump.h>
-+#include <linux/dump_netdev.h>
-+#include <asm/unaligned.h>
-+#include <asm/dump.h>
-+#include <asm/netconsole.h>
-+
-+MODULE_AUTHOR("Maintainer: Matt Mackall <mpm@selenic.com>");
-+MODULE_DESCRIPTION("Console driver for network interfaces");
-+MODULE_LICENSE("GPL");
-+
-+static char config[256];
-+module_param_string(netconsole, config, 256, 0);
-+MODULE_PARM_DESC(netconsole, " netconsole=[src-port]@[src-ip]/[dev],[tgt-port]@<tgt-ip>/[tgt-macaddr]\n");
-+
-+static void rx_hook(struct netpoll *np, int port, char *msg, int len);
-+
-+static int sysrq_mode = 0;
-+
-+static req_t req;
-+unsigned int netconsole_sysrq_req = 0;
-+unsigned int netif_in_poll = 0;
-+static unsigned int handle_sysrq_progress = 0;
-+#define Set_Sysrq_mode()      (sysrq_mode = 1)
-+#define Clear_Sysrq_mode()    (sysrq_mode = 0)
-+
-+static struct netpoll np = {
-+      .name = "netconsole",
-+      .dev_name = "eth0",
-+      .rx_hook = rx_hook,
-+      .local_port = 6666,
-+      .remote_port = 6666,
-+      .remote_mac = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-+};
-+
-+#define MAX_PRINT_CHUNK 1000
-+#define MAX_SEND_BUFFER_LEN (MAX_PRINT_CHUNK + 200)
-+
-+static char send_buf[MAX_SEND_BUFFER_LEN];
-+static char send_cache[MAX_PRINT_CHUNK];
-+static unsigned int send_cache_pos = 0;
-+
-+static void send_msg_buffer(struct netpoll *np, const char *msg, int len)
-+{
-+      reply_t reply;
-+ 
-+      send_buf[0] = NETCONSOLE_VERSION;
-+        reply.code = REPLY_LOG;
-+        reply.nr = 0;
-+        reply.info = 0;
-+
-+        put_unaligned(htonl(reply.nr), (u32 *) (send_buf + 1));
-+        put_unaligned(htonl(reply.code), (u32 *) (send_buf + 5));
-+        put_unaligned(htonl(reply.info), (u32 *) (send_buf+ 9));
-+
-+      memcpy(send_buf + 1 + sizeof(reply_t), msg, len);
-+      netpoll_send_udp(np, send_buf, len + 1 + sizeof(reply_t));
-+      return;
-+}
-+static void write_msg(struct console *con, const char *msg, unsigned int len)
-+{
-+      unsigned long total_len = send_cache_pos + len;
-+      unsigned long left_len = len;
-+      unsigned long flags;
-+
-+      if (!sysrq_mode)
-+              return;
-+      if (!np.dev)
-+              return;
-+      while (total_len >=  MAX_PRINT_CHUNK){
-+              unsigned long send_len = MAX_PRINT_CHUNK - send_cache_pos; 
-+              memcpy(send_cache + send_cache_pos, msg, send_len);
-+              local_irq_save(flags);
-+#if 0
-+              for(left = send_len; left; ) {
-+                      frag = min(left, MAX_PRINT_CHUNK);
-+                      send_msg_buffer(&np, send_buffer, frag);
-+                      msg += frag;
-+                      left -= frag;
-+              }
-+#endif
-+              send_msg_buffer(&np, send_cache, MAX_PRINT_CHUNK);
-+              send_cache_pos = 0;
-+              local_irq_restore(flags);
-+              total_len -= MAX_PRINT_CHUNK;
-+              left_len -= send_len; 
-+      }
-+      if (left_len > 0){
-+              memcpy(send_cache + send_cache_pos, msg + (len -left_len), left_len);
-+              send_cache_pos += left_len;
-+      }
-+}
-+void netconsole_do_sysrq()
-+{
-+        struct pt_regs regs;
-+      unsigned long flags;    
-+      
-+      handle_sysrq_progress = 1; 
-+      Set_Sysrq_mode();
-+      get_current_regs(&regs);
-+      handle_sysrq((int)req.from, &regs, NULL);
-+      
-+      if (send_cache_pos != 0){
-+              local_irq_save(flags);
-+              send_msg_buffer(&np, send_cache, send_cache_pos);
-+              send_cache_pos = 0;
-+              local_irq_restore(flags);
-+      } 
-+
-+      handle_sysrq_progress = 0;
-+      Clear_Sysrq_mode();
-+}
-+static void rx_hook(struct netpoll *np, int port, char *msg, int len)
-+{
-+      /* add sysrq support */
-+      req_t *__req;
-+
-+      if (handle_sysrq_progress)
-+              goto out;       
-+      __req = (req_t *)(msg);
-+      if(len < (sizeof(req_t)))
-+              goto out;
-+
-+      if ((ntohl(__req->command) != COMM_SYSRQ)) 
-+              goto out;
-+      /*FIXME should check magic, but did not have good ways*/
-+
-+      req.magic = ntohl(__req->magic);
-+      req.command = ntohl(__req->command);
-+      req.from = ntohl(__req->from);
-+      req.to = ntohl(__req->to);
-+      req.nr = ntohl(__req->nr);
-+      netconsole_sysrq_req = 1;       
-+out:
-+      return ;
-+}
-+
-+static struct console netconsole = {
-+      .flags = CON_ENABLED | CON_PRINTBUFFER,
-+      .write = write_msg
-+};
-+
-+static int option_setup(char *opt)
-+{
-+      return netpoll_parse_options(&np, opt);
-+}
-+
-+__setup("netconsole=", option_setup);
-+
-+static int init_netconsole(void)
-+{
-+      if(strlen(config) && option_setup(config))
-+              return 1;
-+
-+      if(!np.remote_ip || netpoll_setup(&np))
-+              return 1;
-+      register_console(&netconsole);
-+      printk(KERN_INFO "netconsole: network logging started\n");
-+      return 0;
-+}
-+
-+static void cleanup_netconsole(void)
-+{
-+      unregister_console(&netconsole);
-+      netpoll_cleanup(&np);
-+}
-+
-+module_init(init_netconsole);
-+module_exit(cleanup_netconsole);
---- /dev/null  2003-01-30 13:24:37.000000000 +0300
-+++ linux-2.6.0-test6-alexey/include/asm-i386/netconsole.h     2003-10-14 17:45:08.000000000 +0400
-@@ -0,0 +1,6 @@
-+extern unsigned int netconsole_sysrq_req;
-+extern void netconsole_do_sysrq(void);
-+extern unsigned int netif_in_poll;
-+#ifndef HANDLE_NETCONSOLE
-+#define HANDLE_NETCONSOLE netconsole_do_sysrq()
-+#endif
---- linux-2.6.0-test6/net/core/dev.c~netconsole-over-netpoll   2003-10-14 17:45:03.000000000 +0400
-+++ linux-2.6.0-test6-alexey/net/core/dev.c    2003-10-14 17:45:08.000000000 +0400
-@@ -109,6 +109,7 @@
- #include <linux/wireless.h>           /* Note : will define WIRELESS_EXT */
- #include <net/iw_handler.h>
- #endif        /* CONFIG_NET_RADIO */
-+#include <asm/netconsole.h>
- #include <asm/current.h>
- #ifdef CONFIG_KGDB
-@@ -1687,6 +1688,7 @@ static void net_rx_action(struct softirq
-       preempt_disable();
-       local_irq_disable();
-+      netif_in_poll = 1;
-       while (!list_empty(&queue->poll_list)) {
-               struct net_device *dev;
-@@ -1711,6 +1713,7 @@ static void net_rx_action(struct softirq
-                       local_irq_disable();
-               }
-       }
-+      netif_in_poll = 0;
- out:
-       local_irq_enable();
-       preempt_enable();
---- linux-2.6.0-test6/net/Kconfig~netconsole-over-netpoll      2003-10-14 17:45:03.000000000 +0400
-+++ linux-2.6.0-test6-alexey/net/Kconfig       2003-10-14 17:45:08.000000000 +0400
-@@ -671,6 +671,6 @@ source "net/irda/Kconfig"
- source "net/bluetooth/Kconfig"
- config NETPOLL
--      def_bool KGDB
-+      def_bool KGDB || NETCONSOLE
- endmenu
-
-_
diff --git a/lustre/kernel_patches/patches/netpoll-core.patch b/lustre/kernel_patches/patches/netpoll-core.patch
deleted file mode 100644 (file)
index bd55424..0000000
+++ /dev/null
@@ -1,854 +0,0 @@
- l-mpm/arch/i386/kernel/irq.c    |   15 
- l-mpm/include/asm-i386/irq.h         |    1 
- l-mpm/include/linux/netdevice.h |   22 -
- l-mpm/include/linux/netpoll.h   |   37 ++
- l-mpm/net/Kconfig               |    3 
- l-mpm/net/core/Makefile         |    1 
- l-mpm/net/core/dev.c            |   22 -
- l-mpm/net/core/netpoll.c        |  632 ++++++++++++++++++++++++++++++++++++++++
- 8 files changed, 707 insertions(+), 26 deletions(-)
-
-Index: linux-2.6.0-test6/net/core/netpoll.c
-===================================================================
---- linux-2.6.0-test6.orig/net/core/netpoll.c  2003-10-07 16:08:51.000000000 +0800
-+++ linux-2.6.0-test6/net/core/netpoll.c       2003-10-09 20:40:07.769057232 +0800
-@@ -0,0 +1,633 @@
-+/*
-+ * Common framework for low-level network console, dump, and debugger code
-+ *
-+ * Sep 8 2003  Matt Mackall <mpm@selenic.com>
-+ */
-+
-+#include <linux/smp_lock.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/string.h>
-+#include <linux/inetdevice.h>
-+#include <linux/inet.h>
-+#include <linux/interrupt.h>
-+#include <linux/netpoll.h>
-+#include <linux/sched.h>
-+#include <net/tcp.h>
-+#include <net/udp.h>
-+
-+/*
-+ * We maintain a small pool of fully-sized skbs, to make sure the
-+ * message gets out even in extreme OOM situations.
-+ */
-+
-+#define MAX_SKBS 32
-+#define MAX_UDP_CHUNK 1460
-+
-+static spinlock_t skb_list_lock = SPIN_LOCK_UNLOCKED;
-+static int nr_skbs;
-+static struct sk_buff *skbs;
-+
-+static spinlock_t rx_list_lock = SPIN_LOCK_UNLOCKED;
-+static LIST_HEAD(rx_list);
-+
-+static int trapped;
-+
-+#define MAX_SKB_SIZE \
-+              (MAX_UDP_CHUNK + sizeof(struct udphdr) + \
-+                              sizeof(struct iphdr) + sizeof(struct ethhdr))
-+
-+static int checksum_udp(struct sk_buff *skb, struct udphdr *uh,
-+                           unsigned short ulen, u32 saddr, u32 daddr)
-+{
-+      if (uh->check == 0)
-+              return 0;
-+
-+      if (skb->ip_summed == CHECKSUM_HW)
-+              return csum_tcpudp_magic(
-+                      saddr, daddr, ulen, IPPROTO_UDP, skb->csum);
-+
-+      skb->csum = csum_tcpudp_nofold(saddr, daddr, ulen, IPPROTO_UDP, 0);
-+
-+      return csum_fold(skb_checksum(skb, 0, skb->len, skb->csum));
-+}
-+
-+void netpoll_poll(struct netpoll *np)
-+{
-+      int budget = 1;
-+
-+      if(!np || !np->dev || !(np->dev->flags & IFF_UP))
-+              return;
-+
-+      disable_irq(np->dev->irq);
-+
-+      /* Process pending work on NIC */
-+      np->irqfunc(np->dev->irq, np->dev, 0);
-+
-+      /* If scheduling is stopped, tickle NAPI bits */
-+      if(trapped && np->dev->poll &&
-+         test_bit(__LINK_STATE_RX_SCHED, &np->dev->state))
-+              np->dev->poll(np->dev, &budget);
-+
-+      enable_irq(np->dev->irq);
-+}
-+
-+static void refill_skbs(void)
-+{
-+      struct sk_buff *skb;
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&skb_list_lock, flags);
-+      while (nr_skbs < MAX_SKBS) {
-+              skb = alloc_skb(MAX_SKB_SIZE, GFP_ATOMIC);
-+              if (!skb)
-+                      break;
-+
-+              skb->next = skbs;
-+              skbs = skb;
-+              nr_skbs++;
-+      }
-+      spin_unlock_irqrestore(&skb_list_lock, flags);
-+}
-+
-+static void zap_completion_queue(void)
-+{
-+      unsigned long flags;
-+      struct softnet_data *sd = &get_cpu_var(softnet_data);
-+
-+      if (sd->completion_queue) {
-+              struct sk_buff *clist;
-+
-+              local_irq_save(flags);
-+              clist = sd->completion_queue;
-+              sd->completion_queue = NULL;
-+              local_irq_restore(flags);
-+
-+              while (clist != NULL) {
-+                      struct sk_buff *skb = clist;
-+                      clist = clist->next;
-+                      __kfree_skb(skb);
-+              }
-+      }
-+
-+      put_cpu_var(softnet_data);
-+}
-+
-+static struct sk_buff * find_skb(struct netpoll *np, int len, int reserve)
-+{
-+      int once = 1, count = 0;
-+      unsigned long flags;
-+      struct sk_buff *skb = NULL;
-+
-+repeat:
-+      zap_completion_queue();
-+      if (nr_skbs < MAX_SKBS)
-+              refill_skbs();
-+
-+      skb = alloc_skb(len, GFP_ATOMIC);
-+
-+      if (!skb) {
-+              spin_lock_irqsave(&skb_list_lock, flags);
-+              skb = skbs;
-+              if (skb)
-+                      skbs = skb->next;
-+              skb->next = NULL;
-+              nr_skbs--;
-+              spin_unlock_irqrestore(&skb_list_lock, flags);
-+      }
-+
-+      if(!skb) {
-+              count++;
-+              if (once && (count == 1000000)) {
-+                      printk("out of netpoll skbs!\n");
-+                      once = 0;
-+              }
-+              netpoll_poll(np);
-+              goto repeat;
-+      }
-+
-+      atomic_set(&skb->users, 1);
-+      skb_reserve(skb, reserve);
-+      return skb;
-+}
-+
-+void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb)
-+{
-+      int status;
-+
-+repeat:
-+      if(!np || !np->dev || !(np->dev->flags & IFF_UP)) {
-+              __kfree_skb(skb);
-+              return;
-+      }
-+
-+      spin_lock(&np->dev->xmit_lock);
-+      np->dev->xmit_lock_owner = smp_processor_id();
-+
-+      if (netif_queue_stopped(np->dev)) {
-+              np->dev->xmit_lock_owner = -1;
-+              spin_unlock(&np->dev->xmit_lock);
-+
-+              netpoll_poll(np);
-+              zap_completion_queue();
-+              goto repeat;
-+      }
-+
-+      status = np->dev->hard_start_xmit(skb, np->dev);
-+      np->dev->xmit_lock_owner = -1;
-+      spin_unlock(&np->dev->xmit_lock);
-+
-+      /* transmit busy */
-+      if(status)
-+              goto repeat;
-+}
-+
-+void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
-+{
-+      int total_len, eth_len, ip_len, udp_len;
-+      struct sk_buff *skb;
-+      struct udphdr *udph;
-+      struct iphdr *iph;
-+      struct ethhdr *eth;
-+
-+      udp_len = len + sizeof(*udph);
-+      ip_len = eth_len = udp_len + sizeof(*iph);
-+      total_len = eth_len + ETH_HLEN;
-+
-+      skb = find_skb(np, total_len, total_len - len);
-+      if (!skb)
-+              return;
-+
-+      memcpy(skb->data, msg, len);
-+      skb->len += len;
-+
-+      udph = (struct udphdr *) skb_push(skb, sizeof(*udph));
-+      udph->source = htons(np->local_port);
-+      udph->dest = htons(np->remote_port);
-+      udph->len = htons(udp_len);
-+      udph->check = 0;
-+
-+      iph = (struct iphdr *)skb_push(skb, sizeof(*iph));
-+
-+      iph->version  = 4;
-+      iph->ihl      = 5;
-+      iph->tos      = 0;
-+      iph->tot_len  = htons(ip_len);
-+      iph->id       = 0;
-+      iph->frag_off = 0;
-+      iph->ttl      = 64;
-+      iph->protocol = IPPROTO_UDP;
-+      iph->check    = 0;
-+      iph->saddr    = htonl(np->local_ip);
-+      iph->daddr    = htonl(np->remote_ip);
-+      iph->check    = ip_fast_csum((unsigned char *)iph, iph->ihl);
-+
-+      eth = (struct ethhdr *) skb_push(skb, ETH_HLEN);
-+
-+      eth->h_proto = htons(ETH_P_IP);
-+      memcpy(eth->h_source, np->local_mac, 6);
-+      memcpy(eth->h_dest, np->remote_mac, 6);
-+
-+      netpoll_send_skb(np, skb);
-+}
-+
-+static void arp_reply(struct sk_buff *skb)
-+{
-+      struct in_device *in_dev = (struct in_device *) skb->dev->ip_ptr;
-+      struct arphdr *arp;
-+      unsigned char *arp_ptr, *sha, *tha;
-+      int size, type = ARPOP_REPLY, ptype = ETH_P_ARP;
-+      u32 sip, tip;
-+      struct sk_buff *send_skb;
-+      unsigned long flags;
-+      struct list_head *p;
-+      struct netpoll *np = 0;
-+
-+      spin_lock_irqsave(&rx_list_lock, flags);
-+      list_for_each(p, &rx_list) {
-+              np = list_entry(p, struct netpoll, rx_list);
-+              if ( np->dev == skb->dev )
-+                      break;
-+              np = 0;
-+      }
-+      spin_unlock_irqrestore(&rx_list_lock, flags);
-+
-+      if (!np) return;
-+
-+      /* No arp on this interface */
-+      if (!in_dev || skb->dev->flags & IFF_NOARP)
-+              return;
-+
-+      if (!pskb_may_pull(skb, (sizeof(struct arphdr) +
-+                               (2 * skb->dev->addr_len) +
-+                               (2 * sizeof(u32)))))
-+              return;
-+
-+      skb->h.raw = skb->nh.raw = skb->data;
-+      arp = skb->nh.arph;
-+
-+      if ((arp->ar_hrd != htons(ARPHRD_ETHER) &&
-+           arp->ar_hrd != htons(ARPHRD_IEEE802)) ||
-+          arp->ar_pro != htons(ETH_P_IP) ||
-+          arp->ar_op != htons(ARPOP_REQUEST))
-+              return;
-+
-+      arp_ptr= (unsigned char *)(arp+1);
-+      sha = arp_ptr;
-+      arp_ptr += skb->dev->addr_len;
-+      memcpy(&sip, arp_ptr, 4);
-+      arp_ptr += 4;
-+      tha = arp_ptr;
-+      arp_ptr += skb->dev->addr_len;
-+      memcpy(&tip, arp_ptr, 4);
-+
-+      /* Should we ignore arp? */
-+      if (tip != in_dev->ifa_list->ifa_address ||
-+          LOOPBACK(tip) || MULTICAST(tip))
-+              return;
-+
-+
-+      size = sizeof(struct arphdr) + 2 * (skb->dev->addr_len + 4);
-+      send_skb = find_skb(np, size + LL_RESERVED_SPACE(np->dev),
-+                          LL_RESERVED_SPACE(np->dev));
-+
-+      if (!send_skb)
-+              return;
-+
-+      send_skb->nh.raw = send_skb->data;
-+      arp = (struct arphdr *) skb_put(send_skb, size);
-+      send_skb->dev = skb->dev;
-+      send_skb->protocol = htons(ETH_P_ARP);
-+
-+      /* Fill the device header for the ARP frame */
-+
-+      if (np->dev->hard_header &&
-+          np->dev->hard_header(send_skb, skb->dev, ptype,
-+                                     np->remote_mac, np->local_mac,
-+                                     send_skb->len) < 0) {
-+              kfree_skb(send_skb);
-+              return;
-+      }
-+
-+      /*
-+       * Fill out the arp protocol part.
-+       *
-+       * we only support ethernet device type,
-+       * which (according to RFC 1390) should always equal 1 (Ethernet).
-+       */
-+
-+      arp->ar_hrd = htons(np->dev->type);
-+      arp->ar_pro = htons(ETH_P_IP);
-+      arp->ar_hln = np->dev->addr_len;
-+      arp->ar_pln = 4;
-+      arp->ar_op = htons(type);
-+
-+      arp_ptr=(unsigned char *)(arp + 1);
-+      memcpy(arp_ptr, np->dev->dev_addr, np->dev->addr_len);
-+      arp_ptr += np->dev->addr_len;
-+      memcpy(arp_ptr, &tip, 4);
-+      arp_ptr += 4;
-+      memcpy(arp_ptr, np->local_mac, np->dev->addr_len);
-+      arp_ptr += np->dev->addr_len;
-+      memcpy(arp_ptr, &sip, 4);
-+
-+      netpoll_send_skb(np, send_skb);
-+}
-+
-+static int rx_hook(struct sk_buff *skb)
-+{
-+      int proto, len, ulen;
-+      struct iphdr *iph;
-+      struct udphdr *uh;
-+      struct netpoll *np;
-+      struct list_head *p;
-+      unsigned long flags;
-+      int rx_hook_called = 0;
-+
-+      if (skb->dev->type != ARPHRD_ETHER)
-+              goto out;
-+
-+      /* check if netpoll clients need ARP */
-+      if (skb->protocol == __constant_htons(ETH_P_ARP) && trapped) {
-+              arp_reply(skb);
-+              return 1;
-+      }
-+
-+      proto = ntohs(skb->mac.ethernet->h_proto);
-+      if (proto != ETH_P_IP)
-+              goto out;
-+      if (skb->pkt_type == PACKET_OTHERHOST)
-+              goto out;
-+      if (skb_shared(skb))
-+              goto out;
-+
-+      iph = (struct iphdr *)skb->data;
-+      if (!pskb_may_pull(skb, sizeof(struct iphdr)))
-+              goto out;
-+      if (iph->ihl < 5 || iph->version != 4)
-+              goto out;
-+      if (!pskb_may_pull(skb, iph->ihl*4))
-+              goto out;
-+      if (ip_fast_csum((u8 *)iph, iph->ihl) != 0)
-+              goto out;
-+
-+      len = ntohs(iph->tot_len);
-+      if (skb->len < len || len < iph->ihl*4)
-+              goto out;
-+
-+      if (iph->protocol != IPPROTO_UDP)
-+              goto out;
-+
-+      len -= iph->ihl*4;
-+      uh = (struct udphdr *)(((char *)iph) + iph->ihl*4);
-+      ulen = ntohs(uh->len);
-+
-+      if (ulen != len)
-+              goto out;
-+      if (checksum_udp(skb, uh, ulen, iph->saddr, iph->daddr) < 0)
-+              goto out;
-+
-+      spin_lock_irqsave(&rx_list_lock, flags);
-+      list_for_each(p, &rx_list) {
-+              np = list_entry(p, struct netpoll, rx_list);
-+              if (np->dev && np->dev != skb->dev)
-+                      continue;
-+              if (np->local_ip && np->local_ip != ntohl(iph->daddr))
-+                      continue;
-+              if (np->remote_ip && np->remote_ip != ntohl(iph->saddr))
-+                      continue;
-+              if (np->local_port && np->local_port != ntohs(uh->dest))
-+                      continue;
-+
-+              if (np->rx_hook){
-+                      np->rx_hook(np, ntohs(uh->source),
-+                                  (char *)(uh+1), ulen-sizeof(uh)-4);
-+                      rx_hook_called = 1;
-+              }
-+      }
-+      spin_unlock_irqrestore(&rx_list_lock, flags);
-+      
-+      if (rx_hook_called)
-+              return 1;
-+out:
-+      return trapped;
-+}
-+
-+int netpoll_parse_options(struct netpoll *np, char *opt)
-+{
-+      char *cur=opt, *delim;
-+
-+      if(*cur != '@') {
-+              if ((delim = strchr(cur, '@')) == NULL)
-+                      goto parse_failed;
-+              *delim=0;
-+              np->local_port=simple_strtol(cur, 0, 10);
-+              cur=delim;
-+      }
-+      cur++;
-+      printk(KERN_INFO "%s: local port %d\n", np->name, np->local_port);
-+
-+      if(*cur != '/') {
-+              if ((delim = strchr(cur, '/')) == NULL)
-+                      goto parse_failed;
-+              *delim=0;
-+              np->local_ip=ntohl(in_aton(cur));
-+              cur=delim;
-+
-+              printk(KERN_INFO "%s: local IP %d.%d.%d.%d\n",
-+                     np->name, HIPQUAD(np->local_ip));
-+      }
-+      cur++;
-+
-+      if ( *cur != ',') {
-+              /* parse out dev name */
-+              if ((delim = strchr(cur, ',')) == NULL)
-+                      goto parse_failed;
-+              *delim=0;
-+              strlcpy(np->dev_name, cur, sizeof(np->dev_name));
-+              cur=delim;
-+      }
-+      cur++;
-+
-+      printk(KERN_INFO "%s: interface %s\n", np->name, np->dev_name);
-+
-+      if ( *cur != '@' ) {
-+              /* dst port */
-+              if ((delim = strchr(cur, '@')) == NULL)
-+                      goto parse_failed;
-+              *delim=0;
-+              np->remote_port=simple_strtol(cur, 0, 10);
-+              cur=delim;
-+      }
-+      cur++;
-+      printk(KERN_INFO "%s: remote port %d\n", np->name, np->remote_port);
-+
-+      /* dst ip */
-+      if ((delim = strchr(cur, '/')) == NULL)
-+              goto parse_failed;
-+      *delim=0;
-+      np->remote_ip=ntohl(in_aton(cur));
-+      cur=delim+1;
-+
-+      printk(KERN_INFO "%s: remote IP %d.%d.%d.%d\n",
-+                     np->name, HIPQUAD(np->remote_ip));
-+
-+      if( *cur != 0 )
-+      {
-+              /* MAC address */
-+              if ((delim = strchr(cur, ':')) == NULL)
-+                      goto parse_failed;
-+              *delim=0;
-+              np->remote_mac[0]=simple_strtol(cur, 0, 16);
-+              cur=delim+1;
-+              if ((delim = strchr(cur, ':')) == NULL)
-+                      goto parse_failed;
-+              *delim=0;
-+              np->remote_mac[1]=simple_strtol(cur, 0, 16);
-+              cur=delim+1;
-+              if ((delim = strchr(cur, ':')) == NULL)
-+                      goto parse_failed;
-+              *delim=0;
-+              np->remote_mac[2]=simple_strtol(cur, 0, 16);
-+              cur=delim+1;
-+              if ((delim = strchr(cur, ':')) == NULL)
-+                      goto parse_failed;
-+              *delim=0;
-+              np->remote_mac[3]=simple_strtol(cur, 0, 16);
-+              cur=delim+1;
-+              if ((delim = strchr(cur, ':')) == NULL)
-+                      goto parse_failed;
-+              *delim=0;
-+              np->remote_mac[4]=simple_strtol(cur, 0, 16);
-+              cur=delim+1;
-+              np->remote_mac[5]=simple_strtol(cur, 0, 16);
-+      }
-+
-+      printk(KERN_INFO "%s: remote ethernet address "
-+             "%02x:%02x:%02x:%02x:%02x:%02x\n",
-+             np->name,
-+             np->remote_mac[0],
-+             np->remote_mac[1],
-+             np->remote_mac[2],
-+             np->remote_mac[3],
-+             np->remote_mac[4],
-+             np->remote_mac[5]);
-+
-+      return 0;
-+
-+ parse_failed:
-+      printk(KERN_INFO "%s: couldn't parse config at %s!\n",
-+             np->name, cur);
-+      return -1;
-+}
-+
-+int netpoll_setup(struct netpoll *np)
-+{
-+      struct net_device *ndev = NULL;
-+      struct in_device *in_dev;
-+      struct irqaction *a;
-+
-+      if (np->dev_name)
-+              ndev = dev_get_by_name(np->dev_name);
-+      if (!ndev) {
-+              printk(KERN_ERR "%s: %s doesn't exist, aborting.\n",
-+                     np->name, np->dev_name);
-+              return -1;
-+      }
-+
-+      if (!(ndev->flags & IFF_UP)) {
-+              unsigned short oflags;
-+              unsigned long jiff;
-+
-+              printk(KERN_INFO "%s: device %s not up yet, forcing it\n",
-+                     np->name, np->dev_name);
-+
-+              oflags = ndev->flags;
-+
-+              rtnl_shlock();
-+              if (dev_change_flags(ndev, oflags | IFF_UP) < 0) {
-+                      printk(KERN_ERR "%s: failed to open %s\n",
-+                             np->name, np->dev_name);
-+                      rtnl_shunlock();
-+                      return -1;
-+              }
-+              rtnl_shunlock();
-+
-+              jiff = jiffies + 6*HZ;
-+              while(!netif_carrier_ok(ndev)) {
-+                      if (!time_before(jiffies, jiff)) {
-+                              printk(KERN_NOTICE
-+                                     "%s: timeout waiting for carrier\n",
-+                                     np->name);
-+                              break;
-+                      }
-+                      cond_resched();
-+              }
-+
-+      }
-+
-+      if (!memcmp(np->local_mac, "\0\0\0\0\0\0", 6) && ndev->dev_addr)
-+              memcpy(np->local_mac, ndev->dev_addr, 6);
-+
-+      if (!np->local_ip)
-+      {
-+              in_dev = in_dev_get(ndev);
-+
-+              if (!in_dev) {
-+                      printk(KERN_ERR "%s: no IP address for %s, aborting\n",
-+                             np->name, np->dev_name);
-+                      return -1;
-+              }
-+
-+              np->local_ip = ntohl(in_dev->ifa_list->ifa_local);
-+              in_dev_put(in_dev);
-+              printk(KERN_INFO "%s: local IP %d.%d.%d.%d\n",
-+                     np->name, HIPQUAD(np->local_ip));
-+      }
-+
-+      a=find_irq_action(ndev->irq, ndev);
-+      if (!a) {
-+              printk(KERN_ERR "%s: couldn't find irq handler for %s, "
-+                     "aborting\n", np->name, np->dev_name);
-+              return -1;
-+      }
-+
-+      np->irqfunc = a->handler;
-+      np->dev = ndev;
-+
-+      if(np->rx_hook) {
-+              unsigned long flags;
-+
-+              np->dev->rx_hook = rx_hook;
-+
-+              spin_lock_irqsave(&rx_list_lock, flags);
-+              list_add(&np->rx_list, &rx_list);
-+              spin_unlock_irqrestore(&rx_list_lock, flags);
-+      }
-+
-+      return 0;
-+}
-+
-+void netpoll_cleanup(struct netpoll *np)
-+{
-+      if(np->rx_hook) {
-+              unsigned long flags;
-+
-+              spin_lock_irqsave(&rx_list_lock, flags);
-+              list_del(&np->rx_list);
-+              np->dev->rx_hook = 0;
-+              spin_unlock_irqrestore(&rx_list_lock, flags);
-+      }
-+
-+      np->dev = 0;
-+}
-+
-+int netpoll_trap()
-+{
-+      return trapped;
-+}
-+
-+void netpoll_set_trap(int trap)
-+{
-+      trapped = trap;
-+}
-Index: linux-2.6.0-test6/include/linux/netpoll.h
-===================================================================
---- linux-2.6.0-test6.orig/include/linux/netpoll.h     2003-10-07 16:08:51.000000000 +0800
-+++ linux-2.6.0-test6/include/linux/netpoll.h  2003-10-07 16:08:51.000000000 +0800
-@@ -0,0 +1,37 @@
-+/*
-+ * Common code for low-level network console, dump, and debugger code
-+ *
-+ * Derived from netconsole, kgdb-over-ethernet, and netdump patches
-+ */
-+
-+#ifndef _LINUX_NETPOLL_H
-+#define _LINUX_NETPOLL_H
-+
-+#include <linux/netdevice.h>
-+#include <linux/irq.h>
-+#include <linux/list.h>
-+
-+struct netpoll;
-+
-+struct netpoll {
-+      struct net_device *dev;
-+      char dev_name[16], *name;
-+      irqreturn_t (*irqfunc)(int, void *, struct pt_regs *);
-+      void (*rx_hook)(struct netpoll *, int, char *, int);
-+      u32 local_ip, remote_ip;
-+      u16 local_port, remote_port;
-+      unsigned char local_mac[6], remote_mac[6];
-+      struct list_head rx_list;
-+};
-+
-+void netpoll_poll(struct netpoll *np);
-+void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb);
-+void netpoll_send_udp(struct netpoll *np, const char *msg, int len);
-+int netpoll_parse_options(struct netpoll *np, char *opt);
-+int netpoll_setup(struct netpoll *np);
-+int netpoll_trap(void);
-+void netpoll_set_trap(int trap);
-+void netpoll_cleanup(struct netpoll *np);
-+
-+
-+#endif
-Index: linux-2.6.0-test6/net/core/Makefile
-===================================================================
---- linux-2.6.0-test6.orig/net/core/Makefile   2003-09-28 08:51:03.000000000 +0800
-+++ linux-2.6.0-test6/net/core/Makefile        2003-10-07 16:08:51.000000000 +0800
-@@ -13,3 +13,4 @@
- obj-$(CONFIG_NET_DIVERT) += dv.o
- obj-$(CONFIG_NET_PKTGEN) += pktgen.o
- obj-$(CONFIG_NET_RADIO) += wireless.o
-+obj-$(CONFIG_NETPOLL) += netpoll.o
-Index: linux-2.6.0-test6/net/Kconfig
-===================================================================
---- linux-2.6.0-test6.orig/net/Kconfig 2003-09-28 08:50:07.000000000 +0800
-+++ linux-2.6.0-test6/net/Kconfig      2003-10-09 20:36:23.429162080 +0800
-@@ -670,4 +670,7 @@
- source "net/bluetooth/Kconfig"
-+config NETPOLL
-+      def_bool KGDB
-+
- endmenu
-Index: linux-2.6.0-test6/include/linux/netdevice.h
-===================================================================
---- linux-2.6.0-test6.orig/include/linux/netdevice.h   2003-10-07 16:08:42.000000000 +0800
-+++ linux-2.6.0-test6/include/linux/netdevice.h        2003-10-07 16:08:51.000000000 +0800
-@@ -452,13 +452,13 @@
-                                                    unsigned char *haddr);
-       int                     (*neigh_setup)(struct net_device *dev, struct neigh_parms *);
-       int                     (*accept_fastpath)(struct net_device *, struct dst_entry*);
-+#ifdef CONFIG_NETPOLL
-+      int                     (*rx_hook)(struct sk_buff *skb);
-+#endif
-       /* bridge stuff */
-       struct net_bridge_port  *br_port;
--#ifdef CONFIG_KGDB
--      int                     kgdb_is_trapped;
--#endif
- #ifdef CONFIG_NET_POLL_CONTROLLER
-       void                    (*poll_controller)(struct net_device *);
- #endif
-@@ -537,10 +537,8 @@
- extern struct net_device      *dev_get_by_index(int ifindex);
- extern struct net_device      *__dev_get_by_index(int ifindex);
- extern int            dev_restart(struct net_device *dev);
--#ifdef CONFIG_KGDB
--extern int            kgdb_eth_is_trapped(void);
--extern int            kgdb_net_interrupt(struct sk_buff *skb);
--extern void           kgdb_send_arp_request(void);
-+#ifdef CONFIG_NETPOLL
-+extern int            netpoll_trap(void);
- #endif
- typedef int gifconf_func_t(struct net_device * dev, char * bufptr, int len);
-@@ -600,10 +598,9 @@
- static inline void netif_wake_queue(struct net_device *dev)
- {
--#ifdef CONFIG_KGDB
--      if (kgdb_eth_is_trapped()) {
-+#ifdef CONFIG_NETPOLL
-+      if (netpoll_trap())
-               return;
--      }
- #endif
-       if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state))
-               __netif_schedule(dev);
-@@ -611,10 +608,9 @@
- static inline void netif_stop_queue(struct net_device *dev)
- {
--#ifdef CONFIG_KGDB
--      if (kgdb_eth_is_trapped()) {
-+#ifdef CONFIG_NETPOLL
-+      if (netpoll_trap())
-               return;
--      }
- #endif
-       set_bit(__LINK_STATE_XOFF, &dev->state);
- }
-Index: linux-2.6.0-test6/net/core/dev.c
-===================================================================
---- linux-2.6.0-test6.orig/net/core/dev.c      2003-10-07 16:08:42.000000000 +0800
-+++ linux-2.6.0-test6/net/core/dev.c   2003-10-09 20:36:23.436161016 +0800
-@@ -1352,16 +1352,8 @@
-       struct softnet_data *queue;
-       unsigned long flags;
--#ifdef CONFIG_KGDB
--      /* See if kgdb_eth wants this packet */
--      if (!kgdb_net_interrupt(skb)) {
--              /* No.. if we're 'trapped' then junk it */
--              if (kgdb_eth_is_trapped()) {
--                      kfree_skb(skb);
--                      return NET_RX_DROP;
--              }
--      } else {
--              /* kgdb_eth ate the packet... drop it silently */
-+#ifdef CONFIG_NETPOLL
-+      if (skb->dev->rx_hook && skb->dev->rx_hook(skb)) {
-               kfree_skb(skb);
-               return NET_RX_DROP;
-       }
-@@ -1556,6 +1548,13 @@
-       int ret = NET_RX_DROP;
-       unsigned short type = skb->protocol;
-+#ifdef CONFIG_NETPOLL
-+      if (skb->dev->rx_hook && skb->dev->rx_hook(skb)) {
-+              kfree_skb(skb);
-+              return NET_RX_DROP;
-+      }
-+#endif
-+
-       if (!skb->stamp.tv_sec)
-               do_gettimeofday(&skb->stamp);
-Index: linux-2.6.0-test6/include/asm-i386/irq.h
-===================================================================
---- linux-2.6.0-test6.orig/include/asm-i386/irq.h      2003-09-28 08:50:36.000000000 +0800
-+++ linux-2.6.0-test6/include/asm-i386/irq.h   2003-10-07 16:08:51.000000000 +0800
-@@ -24,6 +24,7 @@
- extern void disable_irq_nosync(unsigned int);
- extern void enable_irq(unsigned int);
- extern void release_x86_irqs(struct task_struct *);
-+struct irqaction *find_irq_action(unsigned int irq, void *dev_id);
- #ifdef CONFIG_X86_LOCAL_APIC
- #define ARCH_HAS_NMI_WATCHDOG         /* See include/linux/nmi.h */
-Index: linux-2.6.0-test6/arch/i386/kernel/irq.c
-===================================================================
---- linux-2.6.0-test6.orig/arch/i386/kernel/irq.c      2003-10-07 16:08:34.000000000 +0800
-+++ linux-2.6.0-test6/arch/i386/kernel/irq.c   2003-10-09 20:36:23.433161472 +0800
-@@ -396,7 +396,6 @@
-       }
-       spin_unlock_irqrestore(&desc->lock, flags);
- }
--
- /*
-  * do_IRQ handles all normal device IRQ's (the special
-  * SMP cross-CPU interrupts have their own specific
-@@ -896,6 +895,21 @@
-       return 0;
- }
-+struct irqaction *find_irq_action(unsigned int irq, void *dev_id)
-+{
-+      struct irqaction *a, *r=0;
-+
-+      spin_lock_irq(&irq_desc[irq].lock);
-+      for(a=irq_desc[irq].action; a; a=a->next) {
-+              if(a->dev_id == dev_id) {
-+                      r=a;
-+                      break;
-+              }
-+      }
-+      spin_unlock_irq(&irq_desc[irq].lock);
-+      return r;
-+}
-+
- static struct proc_dir_entry * root_irq_dir;
- static struct proc_dir_entry * irq_dir [NR_IRQS];
diff --git a/lustre/kernel_patches/patches/netpoll-pcnet32.patch b/lustre/kernel_patches/patches/netpoll-pcnet32.patch
deleted file mode 100644 (file)
index f0ad313..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
- drivers/net/pcnet32.c |   16 ++++++++++++++++
- 1 files changed, 16 insertions(+)
-
-diff -puN drivers/net/pcnet32.c~kgdbeth-pcnet32-support drivers/net/pcnet32.c
---- linux-2.6.0-test6-mm/drivers/net/pcnet32.c~kgdbeth-pcnet32-support 2003-10-06 00:45:54.000000000 +0400
-+++ linux-2.6.0-test6-mm-alexey/drivers/net/pcnet32.c  2003-10-06 00:54:55.000000000 +0400
-@@ -331,6 +331,9 @@ static int  pcnet32_init_ring(struct net
- static int  pcnet32_start_xmit(struct sk_buff *, struct net_device *);
- static int  pcnet32_rx(struct net_device *);
- static void pcnet32_tx_timeout (struct net_device *dev);
-+#ifdef CONFIG_NET_POLL_CONTROLLER
-+static void pcnet32_rx_poll(struct net_device *);
-+#endif
- static irqreturn_t pcnet32_interrupt(int, void *, struct pt_regs *);
- static int  pcnet32_close(struct net_device *);
- static struct net_device_stats *pcnet32_get_stats(struct net_device *);
-@@ -806,6 +809,10 @@ pcnet32_probe1(unsigned long ioaddr, uns
-     dev->tx_timeout = pcnet32_tx_timeout;
-     dev->watchdog_timeo = (5*HZ);
-+#ifdef CONFIG_NET_POLL_CONTROLLER
-+    dev->poll_controller = pcnet32_rx_poll;
-+#endif
-+
-     lp->next = pcnet32_dev;
-     pcnet32_dev = dev;
-@@ -1152,6 +1159,15 @@ pcnet32_start_xmit(struct sk_buff *skb, 
-     return 0;
- }
-+#ifdef CONFIG_NET_POLL_CONTROLLER
-+static void pcnet32_rx_poll(struct net_device *dev)
-+{
-+      disable_irq(dev->irq);
-+      pcnet32_interrupt(dev->irq, (void *)dev, 0);
-+      enable_irq(dev->irq);
-+}       
-+#endif
-+
- /* The PCNET32 interrupt handler. */
- static irqreturn_t
- pcnet32_interrupt(int irq, void *dev_id, struct pt_regs * regs)
-
-_
diff --git a/lustre/kernel_patches/patches/nfs_export_kernel-2.4.18.patch b/lustre/kernel_patches/patches/nfs_export_kernel-2.4.18.patch
deleted file mode 100644 (file)
index 51f581e..0000000
+++ /dev/null
@@ -1,741 +0,0 @@
- fs/Makefile        |    3 
- fs/file_table.c    |   11 ++
- fs/inode.c         |   23 ++++-
- fs/namei.c         |   12 ++
- fs/nfsd/export.c   |    5 +
- fs/nfsd/nfsfh.c    |   65 +++++++++++++-
- fs/nfsd/vfs.c      |  240 ++++++++++++++++++++++++++++++++++++++++++++++++-----
- include/linux/fs.h |   10 ++
- kernel/ksyms.c     |    2 
- 9 files changed, 337 insertions(+), 34 deletions(-)
-
---- linux-2.4.18-chaos/fs/file_table.c~nfs_export_kernel-2.4.18        2003-07-28 17:52:04.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/file_table.c  2003-10-08 01:10:58.000000000 +0400
-@@ -82,7 +82,8 @@ struct file * get_empty_filp(void)
-  * and call the open function (if any).  The caller must verify that
-  * inode->i_fop is not NULL.
-  */
--int init_private_file(struct file *filp, struct dentry *dentry, int mode)
-+int init_private_file_it(struct file *filp, struct dentry *dentry, int mode,
-+                         struct lookup_intent *it)
- {
-       memset(filp, 0, sizeof(*filp));
-       filp->f_mode   = mode;
-@@ -90,12 +91,20 @@ int init_private_file(struct file *filp,
-       filp->f_dentry = dentry;
-       filp->f_uid    = current->fsuid;
-       filp->f_gid    = current->fsgid;
-+      if (it)
-+              filp->f_it = it;
-       filp->f_op     = dentry->d_inode->i_fop;
-       if (filp->f_op->open)
-               return filp->f_op->open(dentry->d_inode, filp);
-       else
-               return 0;
- }
-+EXPORT_SYMBOL(init_private_file_it);
-+
-+int init_private_file(struct file *filp, struct dentry *dentry, int mode)
-+{
-+      return init_private_file_it(filp, dentry, mode, NULL);
-+}
- void fput(struct file * file)
- {
---- linux-2.4.18-chaos/fs/inode.c~nfs_export_kernel-2.4.18     2003-10-08 00:58:35.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/inode.c       2003-10-08 01:10:58.000000000 +0400
-@@ -987,9 +987,10 @@ struct inode *igrab(struct inode *inode)
- }
--struct inode *iget4(struct super_block *sb, unsigned long ino, find_inode_t find_actor, void *opaque)
-+static inline struct inode *ifind(struct super_block *sb, unsigned long ino,
-+                                  struct list_head *head,
-+                                  find_inode_t find_actor, void *opaque)
- {
--      struct list_head * head = inode_hashtable + hash(sb,ino);
-       struct inode * inode;
-       spin_lock(&inode_lock);
-@@ -1002,6 +1003,24 @@ struct inode *iget4(struct super_block *
-       }
-       spin_unlock(&inode_lock);
-+      return NULL;
-+}
-+
-+struct inode *ilookup4(struct super_block *sb, unsigned long ino,
-+                       find_inode_t find_actor, void *opaque)
-+{
-+      struct list_head * head = inode_hashtable + hash(sb,ino);
-+      return ifind(sb, ino, head, find_actor, opaque);
-+}
-+
-+struct inode *iget4(struct super_block *sb, unsigned long ino,
-+                    find_inode_t find_actor, void *opaque)
-+{
-+      struct list_head * head = inode_hashtable + hash(sb,ino);
-+      struct inode *inode = ifind(sb, ino, head, find_actor, opaque);
-+      if (inode)
-+              return inode;
-+
-       /*
-        * get_new_inode() will do the right thing, re-trying the search
-        * in case it had to block at any point.
---- linux-2.4.18-chaos/fs/Makefile~nfs_export_kernel-2.4.18    2003-10-08 00:58:35.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/Makefile      2003-10-08 01:10:58.000000000 +0400
-@@ -9,7 +9,8 @@
- O_TARGET := fs.o
--export-objs :=        filesystems.o open.o dcache.o buffer.o inode.o
-+export-objs :=        filesystems.o open.o dcache.o buffer.o inode.o namei.o \
-+              file_table.o
- mod-subdirs :=        nls
- obj-y :=      open.o read_write.o devices.o file_table.o buffer.o \
---- linux-2.4.18-chaos/fs/namei.c~nfs_export_kernel-2.4.18     2003-10-08 00:58:34.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/namei.c       2003-10-08 01:10:58.000000000 +0400
-@@ -22,6 +22,7 @@
- #include <linux/dnotify.h>
- #include <linux/smp_lock.h>
- #include <linux/personality.h>
-+#include <linux/module.h>
- #include <asm/namei.h>
- #include <asm/uaccess.h>
-@@ -100,6 +101,7 @@ void intent_release(struct lookup_intent
-               it->it_op_release(it);
- }
-+EXPORT_SYMBOL(intent_release);
- /* In order to reduce some races, while at the same time doing additional
-  * checking and hopefully speeding things up, we copy filenames to the
-@@ -914,7 +916,8 @@ struct dentry * lookup_hash(struct qstr 
- /* SMP-safe */
--struct dentry * lookup_one_len(const char * name, struct dentry * base, int len)
-+struct dentry * lookup_one_len_it(const char * name, struct dentry * base,
-+                                  int len, struct lookup_intent *it)
- {
-       unsigned long hash;
-       struct qstr this;
-@@ -934,11 +937,16 @@ struct dentry * lookup_one_len(const cha
-       }
-       this.hash = end_name_hash(hash);
--      return lookup_hash_it(&this, base, NULL);
-+      return lookup_hash_it(&this, base, it);
- access:
-       return ERR_PTR(-EACCES);
- }
-+struct dentry * lookup_one_len(const char * name, struct dentry * base, int len)
-+{
-+      return lookup_one_len_it(name, base, len, NULL);
-+}
-+
- /*
-  *    namei()
-  *
---- linux-2.4.18-chaos/fs/nfsd/export.c~nfs_export_kernel-2.4.18       2003-07-28 17:52:06.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/nfsd/export.c 2003-10-08 01:10:58.000000000 +0400
-@@ -250,6 +250,11 @@ exp_export(struct nfsctl_export *nxp)
-       inode = nd.dentry->d_inode;
-       dev = inode->i_dev;
-       ino = inode->i_ino;
-+      if ((inode->i_sb->s_type->fs_flags & FS_NFSEXP_FSID) &&
-+          !(nxp->ex_flags & NFSEXP_FSID)) {
-+          nxp->ex_dev = inode->i_sb->s_dev;
-+          nxp->ex_flags |= NFSEXP_FSID;
-+      }
-       err = -EINVAL;
-       exp = exp_get(clp, dev, ino);
---- linux-2.4.18-chaos/fs/nfsd/nfsfh.c~nfs_export_kernel-2.4.18        2003-07-28 17:52:06.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/nfsd/nfsfh.c  2003-10-08 01:10:58.000000000 +0400
-@@ -37,6 +37,15 @@ struct nfsd_getdents_callback {
-       int sequence;           /* sequence counter */
- };
-+static struct dentry *lookup_it(struct inode *inode, struct dentry * dentry)
-+{
-+      if (inode->i_op->lookup_it)
-+          return inode->i_op->lookup_it(inode, dentry, NULL, 0);
-+      else
-+          return inode->i_op->lookup(inode, dentry);
-+              
-+}
-+
- /*
-  * A rather strange filldir function to capture
-  * the name matching the specified inode number.
-@@ -76,6 +85,8 @@ static int nfsd_get_name(struct dentry *
-       int error;
-       struct file file;
-       struct nfsd_getdents_callback buffer;
-+      struct lookup_intent it;
-+      struct file *filp = NULL;
-       error = -ENOTDIR;
-       if (!dir || !S_ISDIR(dir->i_mode))
-@@ -86,9 +97,37 @@ static int nfsd_get_name(struct dentry *
-       /*
-        * Open the directory ...
-        */
--      error = init_private_file(&file, dentry, FMODE_READ);
--      if (error)
-+      if (dentry->d_op && dentry->d_op->d_revalidate_it) {
-+              if ((dentry->d_flags & DCACHE_NFSD_DISCONNECTED) &&
-+                  (dentry->d_parent == dentry) ) {
-+                      it.it_op_release = NULL;
-+                      /* 
-+                       * XXX Temporary Hack: Simulating init_private_file without
-+                       * f_op->open for disconnected dentry Since we don't have actual
-+                       * dentry->d_name to revalidate in revalidate_it()
-+                       */
-+                      filp = &file;
-+                      memset(filp, 0, sizeof(*filp));
-+                      filp->f_mode   = FMODE_READ;
-+                      atomic_set(&filp->f_count, 1);
-+                      filp->f_dentry = dentry;
-+                      filp->f_uid = current->fsuid;
-+                      filp->f_gid = current->fsgid;
-+                      filp->f_op = dentry->d_inode->i_fop;
-+                      error = 0;
-+              } else {
-+                      intent_init(&it, IT_OPEN, 0);
-+                      error = revalidate_it(dentry, &it);
-+                      if (error)
-+                              goto out;
-+                      error = init_private_file_it(&file, dentry, FMODE_READ, &it);
-+              }
-+      } else {
-+              error = init_private_file_it(&file, dentry, FMODE_READ, NULL);
-+      }
-+      if (error) 
-               goto out;
-+
-       error = -EINVAL;
-       if (!file.f_op->readdir)
-               goto out_close;
-@@ -114,9 +153,13 @@ static int nfsd_get_name(struct dentry *
-       }
- out_close:
--      if (file.f_op->release)
-+      if (file.f_op->release && !filp)
-               file.f_op->release(dir, &file);
- out:
-+      if (dentry->d_op &&
-+          dentry->d_op->d_revalidate_it &&
-+          it.it_op_release && !filp)
-+              intent_release(&it);
-       return error;
- }
-@@ -275,7 +318,7 @@ struct dentry *nfsd_findparent(struct de
-        * it is well connected.  But nobody returns different dentrys do they?
-        */
-       down(&child->d_inode->i_sem);
--      pdentry = child->d_inode->i_op->lookup(child->d_inode, tdentry);
-+      pdentry = lookup_it(child->d_inode, tdentry);
-       up(&child->d_inode->i_sem);
-       d_drop(tdentry); /* we never want ".." hashed */
-       if (!pdentry && tdentry->d_inode == NULL) {
-@@ -307,6 +350,8 @@ struct dentry *nfsd_findparent(struct de
-                               igrab(tdentry->d_inode);
-                               pdentry->d_flags |= DCACHE_NFSD_DISCONNECTED;
-                       }
-+                      if (child->d_op && child->d_op->d_revalidate_it)
-+                              pdentry->d_op = child->d_op;
-               }
-               if (pdentry == NULL)
-                       pdentry = ERR_PTR(-ENOMEM);
-@@ -465,6 +510,8 @@ find_fh_dentry(struct super_block *sb, _
-               struct dentry *pdentry;
-               struct inode *parent;
-+              if (result->d_op && result->d_op->d_revalidate_it)
-+                      dentry->d_op = result->d_op;
-               pdentry = nfsd_findparent(dentry);
-               err = PTR_ERR(pdentry);
-               if (IS_ERR(pdentry))
-@@ -667,6 +714,11 @@ fh_verify(struct svc_rqst *rqstp, struct
-       inode = dentry->d_inode;
-+      /* cache coherency for non-device filesystems */
-+      if (inode->i_op && inode->i_op->revalidate_it) {
-+          inode->i_op->revalidate_it(dentry, NULL);
-+      }
-+
-       /* Type check. The correct error return for type mismatches
-        * does not seem to be generally agreed upon. SunOS seems to
-        * use EISDIR if file isn't S_IFREG; a comment in the NFSv3
-@@ -905,8 +957,9 @@ out_negative:
-               dentry->d_parent->d_name.name, dentry->d_name.name);
-       goto out;
- out_uptodate:
--      printk(KERN_ERR "fh_update: %s/%s already up-to-date!\n",
--              dentry->d_parent->d_name.name, dentry->d_name.name);
-+      if(!dentry->d_parent->d_inode->i_op->mkdir_raw)
-+              printk(KERN_ERR "fh_update: %s/%s already up-to-date!\n",
-+                      dentry->d_parent->d_name.name, dentry->d_name.name);
-       goto out;
- }
---- linux-2.4.18-chaos/fs/nfsd/vfs.c~nfs_export_kernel-2.4.18  2003-07-28 17:52:06.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/nfsd/vfs.c    2003-10-08 01:11:59.000000000 +0400
-@@ -77,6 +77,128 @@ struct raparms {
- static struct raparms *               raparml;
- static struct raparms *               raparm_cache;
-+static int link_raw(struct dentry *dold, struct dentry *ddir,
-+                    struct dentry *dnew)
-+{
-+      int err;
-+
-+      struct nameidata old_nd = { .dentry = dold };
-+      struct nameidata nd = { .dentry = ddir, .last = dnew->d_name };
-+      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+      err = op->link_raw(&old_nd, &nd);
-+      d_instantiate(dnew, dold->d_inode);
-+      if(dold->d_inode->i_op && dold->d_inode->i_op->revalidate_it)
-+              dold->d_inode->i_op->revalidate_it(dnew, NULL);
-+
-+      return err;
-+}
-+
-+static int unlink_raw(struct dentry *dentry, char *fname, int flen,
-+                      struct dentry *rdentry)
-+{
-+      int err;
-+        struct qstr last = { .name = fname, .len = flen };
-+      struct nameidata nd = { .dentry = dentry, .last = last };
-+      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+      err = op->unlink_raw(&nd);
-+      if (!err)
-+              d_delete(rdentry);
-+
-+      return err;
-+}
-+
-+static int rmdir_raw(struct dentry *dentry, char *fname, int flen,
-+                     struct dentry *rdentry)
-+{
-+      int err;
-+        struct qstr last = { .name = fname, .len = flen };
-+      struct nameidata nd = { .dentry = dentry, .last = last };
-+      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+      err = op->rmdir_raw(&nd);
-+      if(!err) {
-+              rdentry->d_inode->i_flags |= S_DEAD;
-+              d_delete(rdentry);
-+      }
-+
-+      return err;
-+}
-+
-+static int symlink_raw(struct dentry *dentry,  char *fname, int flen,
-+                       char *path)
-+{
-+      int err;
-+        struct qstr last = { .name = fname, .len = flen };
-+      struct nameidata nd = { .dentry = dentry, .last = last };
-+      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+      err = op->symlink_raw(&nd, path);
-+
-+      return err;
-+}
-+
-+static int mkdir_raw(struct dentry *dentry, char *fname, int flen, int mode)
-+{
-+      int err;
-+        struct qstr last = { .name = fname, .len = flen };
-+      struct nameidata nd = { .dentry = dentry, .last = last };
-+      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+      err = op->mkdir_raw(&nd, mode);
-+
-+      return err;
-+}
-+
-+static int mknod_raw(struct dentry *dentry, char *fname, int flen, int mode,
-+                     dev_t dev)
-+{
-+      int err;
-+        struct qstr last = { .name = fname, .len = flen };
-+      struct nameidata nd = { .dentry = dentry, .last = last };
-+      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+      err = op->mknod_raw(&nd, mode, dev);
-+
-+      return err;
-+}     
-+
-+static int rename_raw(struct dentry *fdentry, struct dentry *tdentry,
-+                      struct dentry *odentry, struct dentry *ndentry)
-+{
-+      int err;
-+
-+      struct nameidata old_nd = { .dentry = fdentry, .last = odentry->d_name};
-+      struct nameidata new_nd = { .dentry = tdentry, .last = ndentry->d_name};
-+      struct inode_operations *op = old_nd.dentry->d_inode->i_op;
-+      err = op->rename_raw(&old_nd, &new_nd);
-+      d_move(odentry, ndentry);
-+
-+      return err;
-+}
-+
-+static int setattr_raw(struct inode *inode, struct iattr *iap)
-+{
-+      int err;
-+
-+      iap->ia_valid |= ATTR_RAW;
-+      err = inode->i_op->setattr_raw(inode, iap);
-+
-+      return err;
-+}
-+
-+int revalidate_it(struct dentry *dentry, struct lookup_intent *it)
-+{
-+      int err = 0;
-+
-+      if (dentry && dentry->d_op && dentry->d_op->d_revalidate_it) {
-+              if (!dentry->d_op->d_revalidate_it(dentry, 0, it) &&
-+                      !d_invalidate(dentry)) {
-+                      dput(dentry);
-+                      err = -EINVAL;
-+                      dentry = NULL;
-+                      return err;
-+              }
-+      }
-+
-+      return err;
-+}
-+
- /*
-  * Look up one component of a pathname.
-  * N.B. After this call _both_ fhp and resfh need an fh_put
-@@ -300,7 +422,10 @@ nfsd_setattr(struct svc_rqst *rqstp, str
-       }
-       err = nfserr_notsync;
-       if (!check_guard || guardtime == inode->i_ctime) {
--              err = notify_change(dentry, iap);
-+              if ( dentry->d_inode->i_op && dentry->d_inode->i_op->setattr_raw)
-+                      err = setattr_raw(dentry->d_inode, iap);
-+              else
-+                      err = notify_change(dentry, iap);
-               err = nfserrno(err);
-       }
-       if (size_change) {
-@@ -427,6 +552,7 @@ nfsd_open(struct svc_rqst *rqstp, struct
- {
-       struct dentry   *dentry;
-       struct inode    *inode;
-+      struct lookup_intent it;
-       int             err;
-       /* If we get here, then the client has already done an "open", and (hopefully)
-@@ -473,6 +599,14 @@ nfsd_open(struct svc_rqst *rqstp, struct
-               filp->f_mode  = FMODE_READ;
-       }
-+      intent_init(&it, IT_OPEN, (filp->f_flags & ~O_ACCMODE) | filp->f_mode);
-+
-+      err = revalidate_it(dentry, &it);
-+      if (err)
-+              goto out_nfserr;
-+      
-+      filp->f_it = &it;
-+      
-       err = 0;
-       if (filp->f_op && filp->f_op->open) {
-               err = filp->f_op->open(inode, filp);
-@@ -487,7 +621,11 @@ nfsd_open(struct svc_rqst *rqstp, struct
-                       atomic_dec(&filp->f_count);
-               }
-       }
-+
- out_nfserr:
-+      if (it.it_op_release)
-+              intent_release(&it);
-+
-       if (err)
-               err = nfserrno(err);
- out:
-@@ -824,7 +962,7 @@ nfsd_create(struct svc_rqst *rqstp, stru
- {
-       struct dentry   *dentry, *dchild;
-       struct inode    *dirp;
--      int             err;
-+      int             err, error = -EOPNOTSUPP;
-       err = nfserr_perm;
-       if (!flen)
-@@ -840,20 +978,44 @@ nfsd_create(struct svc_rqst *rqstp, stru
-       dentry = fhp->fh_dentry;
-       dirp = dentry->d_inode;
-+      switch (type) {
-+                      case S_IFDIR:
-+                              if (dirp->i_op->mkdir_raw)
-+                          error = mkdir_raw(dentry, fname, flen, iap->ia_mode);
-+                              break;
-+                      case S_IFCHR:
-+                      case S_IFBLK:
-+                      case S_IFIFO:
-+                      case S_IFSOCK:
-+                      case S_IFREG:
-+                          if (dirp->i_op->mknod_raw) {
-+                                      if (type == S_IFREG)
-+                                              rdev = 0;
-+                                      error = mknod_raw(dentry, fname, flen, iap->ia_mode, rdev);
-+                              }
-+                              break;
-+                              default:
-+                      printk("nfsd: bad file type %o in nfsd_create\n", type);
-+      }
-+
-       err = nfserr_notdir;
--      if(!dirp->i_op || !dirp->i_op->lookup)
-+      if(!dirp->i_op || !(dirp->i_op->lookup || dirp->i_op->lookup_it))
-               goto out;
-       /*
-        * Check whether the response file handle has been verified yet.
-        * If it has, the parent directory should already be locked.
-        */
--      if (!resfhp->fh_dentry) {
--              /* called from nfsd_proc_mkdir, or possibly nfsd3_proc_create */
--              fh_lock(fhp);
-+      if (!resfhp->fh_dentry || dirp->i_op->lookup_it) {
-+              /* called from nfsd_proc_mkdir, or possibly nfsd3_proc_create
-+                 and nfsd_proc_create in case of lustre
-+              */
-+              if (!resfhp->fh_dentry)
-+                      fh_lock(fhp);
-               dchild = lookup_one_len(fname, dentry, flen);
-               err = PTR_ERR(dchild);
-               if (IS_ERR(dchild))
-                       goto out_nfserr;
-+              resfhp->fh_dentry = NULL;
-               err = fh_compose(resfhp, fhp->fh_export, dchild, fhp);
-               if (err)
-                       goto out;
-@@ -874,10 +1036,12 @@ nfsd_create(struct svc_rqst *rqstp, stru
-        * Make sure the child dentry is still negative ...
-        */
-       err = nfserr_exist;
--      if (dchild->d_inode) {
--              dprintk("nfsd_create: dentry %s/%s not negative!\n",
--                      dentry->d_name.name, dchild->d_name.name);
--              goto out; 
-+      if ( error == -EOPNOTSUPP) {
-+              if (dchild->d_inode) {
-+                      dprintk("nfsd_create: dentry %s/%s not negative!\n",
-+                              dentry->d_name.name, dchild->d_name.name);
-+                      goto out; 
-+              }
-       }
-       if (!(iap->ia_valid & ATTR_MODE))
-@@ -890,16 +1054,19 @@ nfsd_create(struct svc_rqst *rqstp, stru
-       err = nfserr_perm;
-       switch (type) {
-       case S_IFREG:
--              err = vfs_create(dirp, dchild, iap->ia_mode);
-+              if (error == -EOPNOTSUPP)
-+                      err = vfs_create(dirp, dchild, iap->ia_mode);
-               break;
-       case S_IFDIR:
--              err = vfs_mkdir(dirp, dchild, iap->ia_mode);
-+              if (error == -EOPNOTSUPP)
-+                      err = vfs_mkdir(dirp, dchild, iap->ia_mode);
-               break;
-       case S_IFCHR:
-       case S_IFBLK:
-       case S_IFIFO:
-       case S_IFSOCK:
--              err = vfs_mknod(dirp, dchild, iap->ia_mode, rdev);
-+              if (error == -EOPNOTSUPP)       
-+                      err = vfs_mknod(dirp, dchild, iap->ia_mode, rdev);
-               break;
-       default:
-               printk("nfsd: bad file type %o in nfsd_create\n", type);
-@@ -968,7 +1135,13 @@ nfsd_create_v3(struct svc_rqst *rqstp, s
-       /* Get all the sanity checks out of the way before
-        * we lock the parent. */
-       err = nfserr_notdir;
--      if(!dirp->i_op || !dirp->i_op->lookup)
-+      if (dirp->i_op->mknod_raw) {
-+              err = mknod_raw(dentry, fname, flen, iap->ia_mode, 0);
-+              if (err && err != -EOPNOTSUPP)
-+                      goto out;
-+      }
-+
-+      if(!dirp->i_op ||  !(dirp->i_op->lookup || dirp->i_op->lookup_it))
-               goto out;
-       fh_lock(fhp);
-@@ -1019,6 +1192,8 @@ nfsd_create_v3(struct svc_rqst *rqstp, s
-               case NFS3_CREATE_GUARDED:
-                       err = nfserr_exist;
-               }
-+              if(dirp->i_op->mknod_raw)
-+                      err = 0;
-               goto out;
-       }
-@@ -1125,7 +1300,7 @@ nfsd_symlink(struct svc_rqst *rqstp, str
-                               struct iattr *iap)
- {
-       struct dentry   *dentry, *dnew;
--      int             err, cerr;
-+      int             err, cerr, error = -EOPNOTSUPP;
-       err = nfserr_noent;
-       if (!flen || !plen)
-@@ -1139,12 +1314,18 @@ nfsd_symlink(struct svc_rqst *rqstp, str
-               goto out;
-       fh_lock(fhp);
-       dentry = fhp->fh_dentry;
-+      
-+      if (dentry->d_inode->i_op->symlink_raw)
-+              error = symlink_raw(dentry, fname, flen, path);
-+
-       dnew = lookup_one_len(fname, dentry, flen);
-       err = PTR_ERR(dnew);
-       if (IS_ERR(dnew))
-               goto out_nfserr;
--      err = vfs_symlink(dentry->d_inode, dnew, path);
-+      err = error;
-+      if (err == -EOPNOTSUPP || !dentry->d_inode->i_op->symlink_raw)
-+              err = vfs_symlink(dentry->d_inode, dnew, path);
-       if (!err) {
-               if (EX_ISSYNC(fhp->fh_export))
-                       nfsd_sync_dir(dentry);
-@@ -1154,7 +1335,10 @@ nfsd_symlink(struct svc_rqst *rqstp, str
-                               iap->ia_valid |= ATTR_CTIME;
-                               iap->ia_mode = (iap->ia_mode&S_IALLUGO)
-                                       | S_IFLNK;
--                              err = notify_change(dnew, iap);
-+                              if (dnew->d_inode->i_op && dnew->d_inode->i_op->setattr_raw)
-+                                      err = setattr_raw(dnew->d_inode, iap);
-+                              else
-+                                      err = notify_change(dnew, iap);
-                               if (!err && EX_ISSYNC(fhp->fh_export))
-                                       write_inode_now(dentry->d_inode, 1);
-                      }
-@@ -1212,7 +1396,10 @@ nfsd_link(struct svc_rqst *rqstp, struct
-       dold = tfhp->fh_dentry;
-       dest = dold->d_inode;
--      err = vfs_link(dold, dirp, dnew);
-+      if (dirp->i_op->link_raw)
-+              err = link_raw(dold, ddir, dnew);
-+      else
-+              err = vfs_link(dold, dirp, dnew);
-       if (!err) {
-               if (EX_ISSYNC(ffhp->fh_export)) {
-                       nfsd_sync_dir(ddir);
-@@ -1298,7 +1485,10 @@ nfsd_rename(struct svc_rqst *rqstp, stru
-                       err = nfserr_perm;
-       } else
- #endif
--      err = vfs_rename(fdir, odentry, tdir, ndentry);
-+      if(fdir->i_op->rename_raw)
-+              err = rename_raw(fdentry, tdentry, odentry, ndentry);
-+      else
-+              err = vfs_rename(fdir, odentry, tdir, ndentry);
-       unlock_kernel();
-       if (!err && EX_ISSYNC(tfhp->fh_export)) {
-               nfsd_sync_dir(tdentry);
-@@ -1320,7 +1510,7 @@ nfsd_rename(struct svc_rqst *rqstp, stru
-       fill_post_wcc(tfhp);
-       double_up(&tdir->i_sem, &fdir->i_sem);
-       ffhp->fh_locked = tfhp->fh_locked = 0;
--      
-+
- out:
-       return err;
- }
-@@ -1366,9 +1556,15 @@ nfsd_unlink(struct svc_rqst *rqstp, stru
-                       err = nfserr_perm;
-               } else
- #endif
--              err = vfs_unlink(dirp, rdentry);
-+              if (dirp->i_op->unlink_raw)
-+                      err = unlink_raw(dentry, fname, flen, rdentry);
-+              else
-+                      err = vfs_unlink(dirp, rdentry);
-       } else { /* It's RMDIR */
--              err = vfs_rmdir(dirp, rdentry);
-+              if (dirp->i_op->rmdir_raw)
-+                      err = rmdir_raw(dentry, fname, flen, rdentry);
-+              else
-+                      err = vfs_rmdir(dirp, rdentry);
-       }
-       dput(rdentry);
---- linux-2.4.18-chaos/include/linux/fs.h~nfs_export_kernel-2.4.18     2003-10-08 01:09:51.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/linux/fs.h       2003-10-08 01:10:58.000000000 +0400
-@@ -93,6 +93,9 @@ extern int leases_enable, dir_notify_ena
- #define FS_SINGLE     8 /* Filesystem that can have only one superblock */
- #define FS_NOMOUNT    16 /* Never mount from userland */
- #define FS_LITTER     32 /* Keeps the tree in dcache */
-+#define FS_NFSEXP_FSID 64 /* Use file system specific fsid for
-+                         * exporting non device filesystems.
-+                         */
- #define FS_ODD_RENAME 32768   /* Temporary stuff; will go away as soon
-                                 * as nfs_rename() will be cleaned up
-                                 */
-@@ -1147,6 +1150,9 @@ extern struct file *filp_open(const char
- extern struct file * dentry_open(struct dentry *, struct vfsmount *, int);
- extern struct file *dentry_open_it(struct dentry *dentry, struct vfsmount *mnt,
-                           int flags, struct lookup_intent *it);
-+extern int revalidate_it(struct dentry *dentry, struct lookup_intent *it);
-+extern int init_private_file_it(struct file *, struct dentry *dentry, int mode,
-+                                struct lookup_intent *it);
- extern int filp_close(struct file *, fl_owner_t id);
- extern char * getname(const char *);
-@@ -1423,6 +1429,8 @@ extern void path_release(struct nameidat
- extern int follow_down(struct vfsmount **, struct dentry **);
- extern int follow_up(struct vfsmount **, struct dentry **);
- extern struct dentry * lookup_one_len(const char *, struct dentry *, int);
-+extern struct dentry * lookup_one_len_it(const char *, struct dentry *, int,
-+                                         struct lookup_intent *);
- extern struct dentry * lookup_hash(struct qstr *, struct dentry *);
- #define user_path_walk(name,nd)        __user_walk(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, nd)
- #define user_path_walk_link(name,nd) __user_walk(name, LOOKUP_POSITIVE, nd)
-@@ -1437,6 +1445,8 @@ extern ino_t iunique(struct super_block 
- typedef int (*find_inode_t)(struct inode *, unsigned long, void *);
- extern struct inode * iget4(struct super_block *, unsigned long, find_inode_t, void *);
-+extern struct inode * ilookup4(struct super_block *, unsigned long,
-+                               find_inode_t, void *);
- static inline struct inode *iget(struct super_block *sb, unsigned long ino)
- {
-       return iget4(sb, ino, NULL, NULL);
---- linux-2.4.18-chaos/kernel/ksyms.c~nfs_export_kernel-2.4.18 2003-10-08 00:58:34.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/kernel/ksyms.c   2003-10-08 01:10:58.000000000 +0400
-@@ -156,6 +156,7 @@ EXPORT_SYMBOL(fget);
- EXPORT_SYMBOL(igrab);
- EXPORT_SYMBOL(iunique);
- EXPORT_SYMBOL(iget4);
-+EXPORT_SYMBOL(ilookup4);
- EXPORT_SYMBOL(iput);
- EXPORT_SYMBOL(inode_init_once);
- EXPORT_SYMBOL(force_delete);
-@@ -167,6 +168,7 @@ EXPORT_SYMBOL(path_walk);
- EXPORT_SYMBOL(path_release);
- EXPORT_SYMBOL(__user_walk);
- EXPORT_SYMBOL(lookup_one_len);
-+EXPORT_SYMBOL(lookup_one_len_it);
- EXPORT_SYMBOL(lookup_hash);
- EXPORT_SYMBOL(sys_close);
- EXPORT_SYMBOL(sys_read);
-
-_
diff --git a/lustre/kernel_patches/patches/nfs_export_kernel-2.4.19-pre1.patch b/lustre/kernel_patches/patches/nfs_export_kernel-2.4.19-pre1.patch
deleted file mode 100644 (file)
index 7278b23..0000000
+++ /dev/null
@@ -1,757 +0,0 @@
- fs/Makefile        |    3 
- fs/file_table.c    |   11 ++
- fs/inode.c         |   23 ++++-
- fs/namei.c         |   12 ++
- fs/nfsd/export.c   |    5 +
- fs/nfsd/nfsfh.c    |   65 +++++++++++++-
- fs/nfsd/vfs.c      |  240 ++++++++++++++++++++++++++++++++++++++++++++++++-----
- include/linux/fs.h |   10 ++
- kernel/ksyms.c     |    2 
- 9 files changed, 337 insertions(+), 34 deletions(-)
-
-Index: linux-2.4.19-pre1/fs/file_table.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/file_table.c     2001-09-18 00:16:30.000000000 +0400
-+++ linux-2.4.19-pre1/fs/file_table.c  2003-11-21 02:02:35.000000000 +0300
-@@ -82,7 +82,8 @@
-  * and call the open function (if any).  The caller must verify that
-  * inode->i_fop is not NULL.
-  */
--int init_private_file(struct file *filp, struct dentry *dentry, int mode)
-+int init_private_file_it(struct file *filp, struct dentry *dentry, int mode,
-+                         struct lookup_intent *it)
- {
-       memset(filp, 0, sizeof(*filp));
-       filp->f_mode   = mode;
-@@ -90,12 +91,20 @@
-       filp->f_dentry = dentry;
-       filp->f_uid    = current->fsuid;
-       filp->f_gid    = current->fsgid;
-+      if (it)
-+              filp->f_it = it;
-       filp->f_op     = dentry->d_inode->i_fop;
-       if (filp->f_op->open)
-               return filp->f_op->open(dentry->d_inode, filp);
-       else
-               return 0;
- }
-+EXPORT_SYMBOL(init_private_file_it);
-+
-+int init_private_file(struct file *filp, struct dentry *dentry, int mode)
-+{
-+      return init_private_file_it(filp, dentry, mode, NULL);
-+}
- void fput(struct file * file)
- {
-Index: linux-2.4.19-pre1/fs/inode.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/inode.c  2003-11-20 19:24:08.000000000 +0300
-+++ linux-2.4.19-pre1/fs/inode.c       2003-11-21 02:02:35.000000000 +0300
-@@ -971,9 +971,10 @@
- }
--struct inode *iget4(struct super_block *sb, unsigned long ino, find_inode_t find_actor, void *opaque)
-+static inline struct inode *ifind(struct super_block *sb, unsigned long ino,
-+                                  struct list_head *head,
-+                                  find_inode_t find_actor, void *opaque)
- {
--      struct list_head * head = inode_hashtable + hash(sb,ino);
-       struct inode * inode;
-       spin_lock(&inode_lock);
-@@ -986,6 +987,24 @@
-       }
-       spin_unlock(&inode_lock);
-+      return NULL;
-+}
-+
-+struct inode *ilookup4(struct super_block *sb, unsigned long ino,
-+                       find_inode_t find_actor, void *opaque)
-+{
-+      struct list_head * head = inode_hashtable + hash(sb,ino);
-+      return ifind(sb, ino, head, find_actor, opaque);
-+}
-+
-+struct inode *iget4(struct super_block *sb, unsigned long ino,
-+                    find_inode_t find_actor, void *opaque)
-+{
-+      struct list_head * head = inode_hashtable + hash(sb,ino);
-+      struct inode *inode = ifind(sb, ino, head, find_actor, opaque);
-+      if (inode)
-+              return inode;
-+
-       /*
-        * get_new_inode() will do the right thing, re-trying the search
-        * in case it had to block at any point.
-Index: linux-2.4.19-pre1/fs/Makefile
-===================================================================
---- linux-2.4.19-pre1.orig/fs/Makefile 2003-11-21 01:51:50.000000000 +0300
-+++ linux-2.4.19-pre1/fs/Makefile      2003-11-21 02:02:35.000000000 +0300
-@@ -7,7 +7,8 @@
- O_TARGET := fs.o
--export-objs :=        filesystems.o open.o dcache.o buffer.o inode.o
-+export-objs :=        filesystems.o open.o dcache.o buffer.o inode.o namei.o \
-+              file_table.o
- mod-subdirs :=        nls
- obj-y :=      open.o read_write.o devices.o file_table.o buffer.o \
-Index: linux-2.4.19-pre1/fs/namei.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/namei.c  2003-11-20 19:16:40.000000000 +0300
-+++ linux-2.4.19-pre1/fs/namei.c       2003-11-21 02:02:35.000000000 +0300
-@@ -22,6 +22,7 @@
- #include <linux/dnotify.h>
- #include <linux/smp_lock.h>
- #include <linux/personality.h>
-+#include <linux/module.h>
- #include <asm/namei.h>
- #include <asm/uaccess.h>
-@@ -100,6 +101,7 @@
-               it->it_op_release(it);
- }
-+EXPORT_SYMBOL(intent_release);
- /* In order to reduce some races, while at the same time doing additional
-  * checking and hopefully speeding things up, we copy filenames to the
-@@ -878,7 +880,8 @@
- /* SMP-safe */
--struct dentry * lookup_one_len(const char * name, struct dentry * base, int len)
-+struct dentry * lookup_one_len_it(const char * name, struct dentry * base,
-+                                  int len, struct lookup_intent *it)
- {
-       unsigned long hash;
-       struct qstr this;
-@@ -898,11 +901,16 @@
-       }
-       this.hash = end_name_hash(hash);
--      return lookup_hash_it(&this, base, NULL);
-+      return lookup_hash_it(&this, base, it);
- access:
-       return ERR_PTR(-EACCES);
- }
-+struct dentry * lookup_one_len(const char * name, struct dentry * base, int len)
-+{
-+      return lookup_one_len_it(name, base, len, NULL);
-+}
-+
- /*
-  *    namei()
-  *
-Index: linux-2.4.19-pre1/fs/nfsd/export.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/nfsd/export.c    2001-10-04 09:57:36.000000000 +0400
-+++ linux-2.4.19-pre1/fs/nfsd/export.c 2003-11-21 02:13:10.000000000 +0300
-@@ -196,6 +196,11 @@
-               goto out_unlock;
-       inode = nd.dentry->d_inode;
-+      if ((inode->i_sb->s_type->fs_flags & FS_NFSEXP_FSID) &&
-+          !(nxp->ex_flags & NFSEXP_FSID)) {
-+          nxp->ex_dev = inode->i_sb->s_dev;
-+          nxp->ex_flags |= NFSEXP_FSID;
-+      }
-       err = -EINVAL;
-       if (inode->i_dev != dev || inode->i_ino != nxp->ex_ino) {
-               printk(KERN_DEBUG "exp_export: i_dev = %x, dev = %x\n",
-Index: linux-2.4.19-pre1/fs/nfsd/nfsfh.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/nfsd/nfsfh.c     2001-10-04 09:59:22.000000000 +0400
-+++ linux-2.4.19-pre1/fs/nfsd/nfsfh.c  2003-11-21 02:14:53.000000000 +0300
-@@ -36,6 +36,15 @@
-       int sequence;           /* sequence counter */
- };
-+static struct dentry *lookup_it(struct inode *inode, struct dentry * dentry)
-+{
-+      if (inode->i_op->lookup_it)
-+          return inode->i_op->lookup_it(inode, dentry, NULL, 0);
-+      else
-+          return inode->i_op->lookup(inode, dentry);
-+              
-+}
-+
- /*
-  * A rather strange filldir function to capture
-  * the name matching the specified inode number.
-@@ -75,6 +84,8 @@
-       int error;
-       struct file file;
-       struct nfsd_getdents_callback buffer;
-+      struct lookup_intent it;
-+      struct file *filp = NULL;
-       error = -ENOTDIR;
-       if (!dir || !S_ISDIR(dir->i_mode))
-@@ -85,9 +96,37 @@
-       /*
-        * Open the directory ...
-        */
--      error = init_private_file(&file, dentry, FMODE_READ);
--      if (error)
-+      if (dentry->d_op && dentry->d_op->d_revalidate_it) {
-+              if ((dentry->d_flags & DCACHE_NFSD_DISCONNECTED) &&
-+                  (dentry->d_parent == dentry) ) {
-+                      it.it_op_release = NULL;
-+                      /* 
-+                       * XXX Temporary Hack: Simulating init_private_file without
-+                       * f_op->open for disconnected dentry Since we don't have actual
-+                       * dentry->d_name to revalidate in revalidate_it()
-+                       */
-+                      filp = &file;
-+                      memset(filp, 0, sizeof(*filp));
-+                      filp->f_mode   = FMODE_READ;
-+                      atomic_set(&filp->f_count, 1);
-+                      filp->f_dentry = dentry;
-+                      filp->f_uid = current->fsuid;
-+                      filp->f_gid = current->fsgid;
-+                      filp->f_op = dentry->d_inode->i_fop;
-+                      error = 0;
-+              } else {
-+                      intent_init(&it, IT_OPEN, 0);
-+                      error = revalidate_it(dentry, &it);
-+                      if (error)
-+                              goto out;
-+                      error = init_private_file_it(&file, dentry, FMODE_READ, &it);
-+              }
-+      } else {
-+              error = init_private_file_it(&file, dentry, FMODE_READ, NULL);
-+      }
-+      if (error) 
-               goto out;
-+
-       error = -EINVAL;
-       if (!file.f_op->readdir)
-               goto out_close;
-@@ -113,9 +152,13 @@
-       }
- out_close:
--      if (file.f_op->release)
-+      if (file.f_op->release && !filp)
-               file.f_op->release(dir, &file);
- out:
-+      if (dentry->d_op &&
-+          dentry->d_op->d_revalidate_it &&
-+          it.it_op_release && !filp)
-+              intent_release(&it);
-       return error;
- }
-@@ -273,7 +316,7 @@
-       /* I'm going to assume that if the returned dentry is different, then
-        * it is well connected.  But nobody returns different dentrys do they?
-        */
--      pdentry = child->d_inode->i_op->lookup(child->d_inode, tdentry);
-+      pdentry = lookup_it(child->d_inode, tdentry);
-       d_drop(tdentry); /* we never want ".." hashed */
-       if (!pdentry && tdentry->d_inode == NULL) {
-               /* File system cannot find ".." ... sad but possible */
-@@ -304,6 +347,8 @@
-                               igrab(tdentry->d_inode);
-                               pdentry->d_flags |= DCACHE_NFSD_DISCONNECTED;
-                       }
-+                      if (child->d_op && child->d_op->d_revalidate_it)
-+                              pdentry->d_op = child->d_op;
-               }
-               if (pdentry == NULL)
-                       pdentry = ERR_PTR(-ENOMEM);
-@@ -461,6 +506,8 @@
-               struct dentry *pdentry;
-               struct inode *parent;
-+              if (result->d_op && result->d_op->d_revalidate_it)
-+                      dentry->d_op = result->d_op;
-               pdentry = nfsd_findparent(dentry);
-               err = PTR_ERR(pdentry);
-               if (IS_ERR(pdentry))
-@@ -650,6 +697,11 @@
-       inode = dentry->d_inode;
-+      /* cache coherency for non-device filesystems */
-+      if (inode->i_op && inode->i_op->revalidate_it) {
-+          inode->i_op->revalidate_it(dentry, NULL);
-+      }
-+
-       /* Type check. The correct error return for type mismatches
-        * does not seem to be generally agreed upon. SunOS seems to
-        * use EISDIR if file isn't S_IFREG; a comment in the NFSv3
-@@ -880,8 +932,9 @@
-               dentry->d_parent->d_name.name, dentry->d_name.name);
-       goto out;
- out_uptodate:
--      printk(KERN_ERR "fh_update: %s/%s already up-to-date!\n",
--              dentry->d_parent->d_name.name, dentry->d_name.name);
-+      if(!dentry->d_parent->d_inode->i_op->mkdir_raw)
-+              printk(KERN_ERR "fh_update: %s/%s already up-to-date!\n",
-+                      dentry->d_parent->d_name.name, dentry->d_name.name);
-       goto out;
- }
-Index: linux-2.4.19-pre1/fs/nfsd/vfs.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/nfsd/vfs.c       2001-12-21 20:41:55.000000000 +0300
-+++ linux-2.4.19-pre1/fs/nfsd/vfs.c    2003-11-21 02:15:47.000000000 +0300
-@@ -77,6 +77,128 @@
- static struct raparms *               raparml;
- static struct raparms *               raparm_cache;
-+static int link_raw(struct dentry *dold, struct dentry *ddir,
-+                    struct dentry *dnew)
-+{
-+      int err;
-+
-+      struct nameidata old_nd = { .dentry = dold };
-+      struct nameidata nd = { .dentry = ddir, .last = dnew->d_name };
-+      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+      err = op->link_raw(&old_nd, &nd);
-+      d_instantiate(dnew, dold->d_inode);
-+      if(dold->d_inode->i_op && dold->d_inode->i_op->revalidate_it)
-+              dold->d_inode->i_op->revalidate_it(dnew, NULL);
-+
-+      return err;
-+}
-+
-+static int unlink_raw(struct dentry *dentry, char *fname, int flen,
-+                      struct dentry *rdentry)
-+{
-+      int err;
-+        struct qstr last = { .name = fname, .len = flen };
-+      struct nameidata nd = { .dentry = dentry, .last = last };
-+      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+      err = op->unlink_raw(&nd);
-+      if (!err)
-+              d_delete(rdentry);
-+
-+      return err;
-+}
-+
-+static int rmdir_raw(struct dentry *dentry, char *fname, int flen,
-+                     struct dentry *rdentry)
-+{
-+      int err;
-+        struct qstr last = { .name = fname, .len = flen };
-+      struct nameidata nd = { .dentry = dentry, .last = last };
-+      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+      err = op->rmdir_raw(&nd);
-+      if(!err) {
-+              rdentry->d_inode->i_flags |= S_DEAD;
-+              d_delete(rdentry);
-+      }
-+
-+      return err;
-+}
-+
-+static int symlink_raw(struct dentry *dentry,  char *fname, int flen,
-+                       char *path)
-+{
-+      int err;
-+        struct qstr last = { .name = fname, .len = flen };
-+      struct nameidata nd = { .dentry = dentry, .last = last };
-+      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+      err = op->symlink_raw(&nd, path);
-+
-+      return err;
-+}
-+
-+static int mkdir_raw(struct dentry *dentry, char *fname, int flen, int mode)
-+{
-+      int err;
-+        struct qstr last = { .name = fname, .len = flen };
-+      struct nameidata nd = { .dentry = dentry, .last = last };
-+      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+      err = op->mkdir_raw(&nd, mode);
-+
-+      return err;
-+}
-+
-+static int mknod_raw(struct dentry *dentry, char *fname, int flen, int mode,
-+                     dev_t dev)
-+{
-+      int err;
-+        struct qstr last = { .name = fname, .len = flen };
-+      struct nameidata nd = { .dentry = dentry, .last = last };
-+      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+      err = op->mknod_raw(&nd, mode, dev);
-+
-+      return err;
-+}     
-+
-+static int rename_raw(struct dentry *fdentry, struct dentry *tdentry,
-+                      struct dentry *odentry, struct dentry *ndentry)
-+{
-+      int err;
-+
-+      struct nameidata old_nd = { .dentry = fdentry, .last = odentry->d_name};
-+      struct nameidata new_nd = { .dentry = tdentry, .last = ndentry->d_name};
-+      struct inode_operations *op = old_nd.dentry->d_inode->i_op;
-+      err = op->rename_raw(&old_nd, &new_nd);
-+      d_move(odentry, ndentry);
-+
-+      return err;
-+}
-+
-+static int setattr_raw(struct inode *inode, struct iattr *iap)
-+{
-+      int err;
-+
-+      iap->ia_valid |= ATTR_RAW;
-+      err = inode->i_op->setattr_raw(inode, iap);
-+
-+      return err;
-+}
-+
-+int revalidate_it(struct dentry *dentry, struct lookup_intent *it)
-+{
-+      int err = 0;
-+
-+      if (dentry && dentry->d_op && dentry->d_op->d_revalidate_it) {
-+              if (!dentry->d_op->d_revalidate_it(dentry, 0, it) &&
-+                      !d_invalidate(dentry)) {
-+                      dput(dentry);
-+                      err = -EINVAL;
-+                      dentry = NULL;
-+                      return err;
-+              }
-+      }
-+
-+      return err;
-+}
-+
- /*
-  * Look up one component of a pathname.
-  * N.B. After this call _both_ fhp and resfh need an fh_put
-@@ -303,7 +425,10 @@
-       }
-       err = nfserr_notsync;
-       if (!check_guard || guardtime == inode->i_ctime) {
--              err = notify_change(dentry, iap);
-+              if ( dentry->d_inode->i_op && dentry->d_inode->i_op->setattr_raw)
-+                      err = setattr_raw(dentry->d_inode, iap);
-+              else
-+                      err = notify_change(dentry, iap);
-               err = nfserrno(err);
-       }
-       if (size_change) {
-@@ -430,6 +555,7 @@
- {
-       struct dentry   *dentry;
-       struct inode    *inode;
-+      struct lookup_intent it;
-       int             err;
-       /* If we get here, then the client has already done an "open", and (hopefully)
-@@ -476,6 +602,14 @@
-               filp->f_mode  = FMODE_READ;
-       }
-+      intent_init(&it, IT_OPEN, (filp->f_flags & ~O_ACCMODE) | filp->f_mode);
-+
-+      err = revalidate_it(dentry, &it);
-+      if (err)
-+              goto out_nfserr;
-+      
-+      filp->f_it = &it;
-+      
-       err = 0;
-       if (filp->f_op && filp->f_op->open) {
-               err = filp->f_op->open(inode, filp);
-@@ -490,7 +624,11 @@
-                       atomic_dec(&filp->f_count);
-               }
-       }
-+
- out_nfserr:
-+      if (it.it_op_release)
-+              intent_release(&it);
-+
-       if (err)
-               err = nfserrno(err);
- out:
-@@ -812,7 +950,7 @@
- {
-       struct dentry   *dentry, *dchild;
-       struct inode    *dirp;
--      int             err;
-+      int             err, error = -EOPNOTSUPP;
-       err = nfserr_perm;
-       if (!flen)
-@@ -828,20 +966,44 @@
-       dentry = fhp->fh_dentry;
-       dirp = dentry->d_inode;
-+      switch (type) {
-+                      case S_IFDIR:
-+                              if (dirp->i_op->mkdir_raw)
-+                          error = mkdir_raw(dentry, fname, flen, iap->ia_mode);
-+                              break;
-+                      case S_IFCHR:
-+                      case S_IFBLK:
-+                      case S_IFIFO:
-+                      case S_IFSOCK:
-+                      case S_IFREG:
-+                          if (dirp->i_op->mknod_raw) {
-+                                      if (type == S_IFREG)
-+                                              rdev = 0;
-+                                      error = mknod_raw(dentry, fname, flen, iap->ia_mode, rdev);
-+                              }
-+                              break;
-+                              default:
-+                      printk("nfsd: bad file type %o in nfsd_create\n", type);
-+      }
-+
-       err = nfserr_notdir;
--      if(!dirp->i_op || !dirp->i_op->lookup)
-+      if(!dirp->i_op || !(dirp->i_op->lookup || dirp->i_op->lookup_it))
-               goto out;
-       /*
-        * Check whether the response file handle has been verified yet.
-        * If it has, the parent directory should already be locked.
-        */
--      if (!resfhp->fh_dentry) {
--              /* called from nfsd_proc_mkdir, or possibly nfsd3_proc_create */
--              fh_lock(fhp);
-+      if (!resfhp->fh_dentry || dirp->i_op->lookup_it) {
-+              /* called from nfsd_proc_mkdir, or possibly nfsd3_proc_create
-+                 and nfsd_proc_create in case of lustre
-+              */
-+              if (!resfhp->fh_dentry)
-+                      fh_lock(fhp);
-               dchild = lookup_one_len(fname, dentry, flen);
-               err = PTR_ERR(dchild);
-               if (IS_ERR(dchild))
-                       goto out_nfserr;
-+              resfhp->fh_dentry = NULL;
-               err = fh_compose(resfhp, fhp->fh_export, dchild, fhp);
-               if (err)
-                       goto out;
-@@ -862,10 +1024,12 @@
-        * Make sure the child dentry is still negative ...
-        */
-       err = nfserr_exist;
--      if (dchild->d_inode) {
--              dprintk("nfsd_create: dentry %s/%s not negative!\n",
--                      dentry->d_name.name, dchild->d_name.name);
--              goto out; 
-+      if ( error == -EOPNOTSUPP) {
-+              if (dchild->d_inode) {
-+                      dprintk("nfsd_create: dentry %s/%s not negative!\n",
-+                              dentry->d_name.name, dchild->d_name.name);
-+                      goto out; 
-+              }
-       }
-       if (!(iap->ia_valid & ATTR_MODE))
-@@ -878,16 +1042,19 @@
-       err = nfserr_perm;
-       switch (type) {
-       case S_IFREG:
--              err = vfs_create(dirp, dchild, iap->ia_mode);
-+              if (error == -EOPNOTSUPP)
-+                      err = vfs_create(dirp, dchild, iap->ia_mode);
-               break;
-       case S_IFDIR:
--              err = vfs_mkdir(dirp, dchild, iap->ia_mode);
-+              if (error == -EOPNOTSUPP)
-+                      err = vfs_mkdir(dirp, dchild, iap->ia_mode);
-               break;
-       case S_IFCHR:
-       case S_IFBLK:
-       case S_IFIFO:
-       case S_IFSOCK:
--              err = vfs_mknod(dirp, dchild, iap->ia_mode, rdev);
-+              if (error == -EOPNOTSUPP)       
-+                      err = vfs_mknod(dirp, dchild, iap->ia_mode, rdev);
-               break;
-       default:
-               printk("nfsd: bad file type %o in nfsd_create\n", type);
-@@ -956,7 +1123,13 @@
-       /* Get all the sanity checks out of the way before
-        * we lock the parent. */
-       err = nfserr_notdir;
--      if(!dirp->i_op || !dirp->i_op->lookup)
-+      if (dirp->i_op->mknod_raw) {
-+              err = mknod_raw(dentry, fname, flen, iap->ia_mode, 0);
-+              if (err && err != -EOPNOTSUPP)
-+                      goto out;
-+      }
-+
-+      if(!dirp->i_op ||  !(dirp->i_op->lookup || dirp->i_op->lookup_it))
-               goto out;
-       fh_lock(fhp);
-@@ -1007,6 +1180,8 @@
-               case NFS3_CREATE_GUARDED:
-                       err = nfserr_exist;
-               }
-+              if(dirp->i_op->mknod_raw)
-+                      err = 0;
-               goto out;
-       }
-@@ -1113,7 +1288,7 @@
-                               struct iattr *iap)
- {
-       struct dentry   *dentry, *dnew;
--      int             err, cerr;
-+      int             err, cerr, error = -EOPNOTSUPP;
-       err = nfserr_noent;
-       if (!flen || !plen)
-@@ -1127,12 +1302,18 @@
-               goto out;
-       fh_lock(fhp);
-       dentry = fhp->fh_dentry;
-+      
-+      if (dentry->d_inode->i_op->symlink_raw)
-+              error = symlink_raw(dentry, fname, flen, path);
-+
-       dnew = lookup_one_len(fname, dentry, flen);
-       err = PTR_ERR(dnew);
-       if (IS_ERR(dnew))
-               goto out_nfserr;
--      err = vfs_symlink(dentry->d_inode, dnew, path);
-+      err = error;
-+      if (err == -EOPNOTSUPP || !dentry->d_inode->i_op->symlink_raw)
-+              err = vfs_symlink(dentry->d_inode, dnew, path);
-       if (!err) {
-               if (EX_ISSYNC(fhp->fh_export))
-                       nfsd_sync_dir(dentry);
-@@ -1142,7 +1323,10 @@
-                               iap->ia_valid |= ATTR_CTIME;
-                               iap->ia_mode = (iap->ia_mode&S_IALLUGO)
-                                       | S_IFLNK;
--                              err = notify_change(dnew, iap);
-+                              if (dnew->d_inode->i_op && dnew->d_inode->i_op->setattr_raw)
-+                                      err = setattr_raw(dnew->d_inode, iap);
-+                              else
-+                                      err = notify_change(dnew, iap);
-                               if (!err && EX_ISSYNC(fhp->fh_export))
-                                       write_inode_now(dentry->d_inode, 1);
-                      }
-@@ -1200,7 +1384,10 @@
-       dold = tfhp->fh_dentry;
-       dest = dold->d_inode;
--      err = vfs_link(dold, dirp, dnew);
-+      if (dirp->i_op->link_raw)
-+              err = link_raw(dold, ddir, dnew);
-+      else
-+              err = vfs_link(dold, dirp, dnew);
-       if (!err) {
-               if (EX_ISSYNC(ffhp->fh_export)) {
-                       nfsd_sync_dir(ddir);
-@@ -1285,7 +1472,10 @@
-                       err = nfserr_perm;
-       } else
- #endif
--      err = vfs_rename(fdir, odentry, tdir, ndentry);
-+      if(fdir->i_op->rename_raw)
-+              err = rename_raw(fdentry, tdentry, odentry, ndentry);
-+      else
-+              err = vfs_rename(fdir, odentry, tdir, ndentry);
-       if (!err && EX_ISSYNC(tfhp->fh_export)) {
-               nfsd_sync_dir(tdentry);
-               nfsd_sync_dir(fdentry);
-@@ -1306,7 +1496,7 @@
-       fill_post_wcc(tfhp);
-       double_up(&tdir->i_sem, &fdir->i_sem);
-       ffhp->fh_locked = tfhp->fh_locked = 0;
--      
-+
- out:
-       return err;
- }
-@@ -1352,9 +1542,15 @@
-                       err = nfserr_perm;
-               } else
- #endif
--              err = vfs_unlink(dirp, rdentry);
-+              if (dirp->i_op->unlink_raw)
-+                      err = unlink_raw(dentry, fname, flen, rdentry);
-+              else
-+                      err = vfs_unlink(dirp, rdentry);
-       } else { /* It's RMDIR */
--              err = vfs_rmdir(dirp, rdentry);
-+              if (dirp->i_op->rmdir_raw)
-+                      err = rmdir_raw(dentry, fname, flen, rdentry);
-+              else
-+                      err = vfs_rmdir(dirp, rdentry);
-       }
-       dput(rdentry);
-Index: linux-2.4.19-pre1/include/linux/fs.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/fs.h  2003-11-21 02:00:20.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/fs.h       2003-11-21 02:02:36.000000000 +0300
-@@ -93,6 +93,9 @@
- #define FS_SINGLE     8 /* Filesystem that can have only one superblock */
- #define FS_NOMOUNT    16 /* Never mount from userland */
- #define FS_LITTER     32 /* Keeps the tree in dcache */
-+#define FS_NFSEXP_FSID 64 /* Use file system specific fsid for
-+                         * exporting non device filesystems.
-+                         */
- #define FS_ODD_RENAME 32768   /* Temporary stuff; will go away as soon
-                                 * as nfs_rename() will be cleaned up
-                                 */
-@@ -1081,6 +1084,9 @@
-                        struct nameidata *nd, struct lookup_intent *it);
- extern struct file *dentry_open_it(struct dentry *dentry, struct vfsmount *mnt,
-                           int flags, struct lookup_intent *it);
-+extern int revalidate_it(struct dentry *dentry, struct lookup_intent *it);
-+extern int init_private_file_it(struct file *, struct dentry *dentry, int mode,
-+                                struct lookup_intent *it);
- extern int filp_close(struct file *, fl_owner_t id);
- extern char * getname(const char *);
-@@ -1342,6 +1348,8 @@
- extern int follow_down(struct vfsmount **, struct dentry **);
- extern int follow_up(struct vfsmount **, struct dentry **);
- extern struct dentry * lookup_one_len(const char *, struct dentry *, int);
-+extern struct dentry * lookup_one_len_it(const char *, struct dentry *, int,
-+                                         struct lookup_intent *);
- extern struct dentry * lookup_hash(struct qstr *, struct dentry *);
- #define user_path_walk(name,nd)        __user_walk(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, nd)
- #define user_path_walk_link(name,nd) __user_walk(name, LOOKUP_POSITIVE, nd)
-@@ -1355,6 +1363,8 @@
- typedef int (*find_inode_t)(struct inode *, unsigned long, void *);
- extern struct inode * iget4(struct super_block *, unsigned long, find_inode_t, void *);
-+extern struct inode * ilookup4(struct super_block *, unsigned long,
-+                               find_inode_t, void *);
- static inline struct inode *iget(struct super_block *sb, unsigned long ino)
- {
-       return iget4(sb, ino, NULL, NULL);
-Index: linux-2.4.19-pre1/kernel/ksyms.c
-===================================================================
---- linux-2.4.19-pre1.orig/kernel/ksyms.c      2003-11-21 01:51:50.000000000 +0300
-+++ linux-2.4.19-pre1/kernel/ksyms.c   2003-11-21 02:02:36.000000000 +0300
-@@ -140,6 +140,7 @@
- EXPORT_SYMBOL(igrab);
- EXPORT_SYMBOL(iunique);
- EXPORT_SYMBOL(iget4);
-+EXPORT_SYMBOL(ilookup4);
- EXPORT_SYMBOL(iput);
- EXPORT_SYMBOL(force_delete);
- EXPORT_SYMBOL(follow_up);
-@@ -150,6 +151,7 @@
- EXPORT_SYMBOL(path_release);
- EXPORT_SYMBOL(__user_walk);
- EXPORT_SYMBOL(lookup_one_len);
-+EXPORT_SYMBOL(lookup_one_len_it);
- EXPORT_SYMBOL(lookup_hash);
- EXPORT_SYMBOL(sys_close);
- EXPORT_SYMBOL(dcache_lock);
diff --git a/lustre/kernel_patches/patches/qlogic-suse-2.4.21-2.patch b/lustre/kernel_patches/patches/qlogic-suse-2.4.21-2.patch
deleted file mode 100644 (file)
index b082a07..0000000
+++ /dev/null
@@ -1,75673 +0,0 @@
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/BUILD_KERNEL.txt linux-2.4.21-x86_64/drivers/scsi/qla2xxx/BUILD_KERNEL.txt
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/BUILD_KERNEL.txt     1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/BUILD_KERNEL.txt  2004-04-22 19:42:21.000000000 -0700
-@@ -0,0 +1,216 @@
-+      Build a Custom kernel with  QLogic Fibre Channel Driver
-+      
-+1.0  Building a Custom Kernel to Load the Driver
-+-------------------------------------------------
-+
-+Since it is not feasible to construct a single set of kernel build
-+instructions for every possible hardware or software configuration,
-+the following instructions are provided as an example of how to compile
-+the driver into the Linux kernel.  The user may be required to make
-+some adjustments in the procedure for their particular system hardware
-+or software configuration. The kernel source tree is referenced below
-+as /usr/src/linux.
-+
-+
-+This process is only supported on RedHat 7.1/7.2 and SuSE 7.3/
-+Enterprise 7.  The kernel source tree is referenced below 
-+as /usr/src/linux.  Under the RedHat distribution, the normal
-+directory path is /usr/src/linux-2.4.  For SuSE distributions,
-+the kernel source is usually located in /usr/src/linux.
-+
-+Prerequisites:
-+
-+      a) Verify that both kernel-headers and kernel-source 
-+              RPMS are already installed.
-+
-+              # rpm -qa | grep kernel
-+
-+         If the kernel-headers and kernel-source RPMs are 
-+         not installed, install from the distribution's CD
-+         with the following commands:
-+
-+              # rpm -i kernel-sources*
-+              # rpm -i kernel-headers*
-+
-+1. Make a special QLogic Directory under kernel source tree
-+
-+      # mkdir /usr/src/linux/drivers/scsi/qla2xxx/
-+      # cd /usr/src/linux/drivers/scsi/qla2xxx/
-+      # tar xvzf qla2x00src-v6.0.X.tgz
-+      # rm -f makefile
-+      # cp -f Makefile.kernel Makefile
-+
-+2. Edit the Makefile under the kernel scsi directory
-+
-+      # cd /usr/src/linux/drivers/scsi
-+      # vi Makefile
-+
-+      Look for the following line:
-+
-+              subdir-$(CONFIG_SCSI_AIC7XXX)   += aic7xxx
-+
-+      And add the following lines: 
-+
-+              subdir-$(CONFIG_SCSI_QLOGIC_QLA2XXX)   += qla2xxx               
-+              ifeq ($(CONFIG_SCSI_QLOGIC_QLA2XXX_QLA2200),y)
-+                      SUB_DIRS += qla2xxx
-+                      MOD_IN_SUB_DIRS += qla2xxx
-+              else
-+                      ifeq ($(CONFIG_SCSI_QLOGIC_QLA2XXX_QLA2200),m)
-+                              MOD_IN_SUB_DIRS += qla2xxx
-+                      endif
-+              endif
-+              ifeq ($(CONFIG_SCSI_QLOGIC_QLA2XXX_QLA2300),y)
-+                      SUB_DIRS += qla2xxx
-+                      MOD_IN_SUB_DIRS += qla2xxx
-+              else
-+                      ifeq ($(CONFIG_SCSI_QLOGIC_QLA2XXX_QLA2300),m)
-+                              MOD_IN_SUB_DIRS += qla2xxx
-+                      endif
-+              endif
-+
-+      The edited lines should read as:
-+
-+              subdir-$(CONFIG_SCSI_AIC7XXX)   += aic7xxx
-+              subdir-$(CONFIG_SCSI_QLOGIC_QLA2XXX)   += qla2xxx
-+              ifeq ($(CONFIG_SCSI_QLOGIC_QLA2XXX_QLA2200),y)
-+                      SUB_DIRS += qla2xxx
-+                      MOD_IN_SUB_DIRS += qla2xxx
-+              else
-+                      ifeq ($(CONFIG_SCSI_QLOGIC_QLA2XXX_QLA2200),m)
-+                              MOD_IN_SUB_DIRS += qla2xxx
-+                      endif
-+              endif
-+              ifeq ($(CONFIG_SCSI_QLOGIC_QLA2XXX_QLA2300),y)
-+                      SUB_DIRS += qla2xxx
-+                      MOD_IN_SUB_DIRS += qla2xxx
-+              else
-+                      ifeq ($(CONFIG_SCSI_QLOGIC_QLA2XXX_QLA2300),m)
-+                              MOD_IN_SUB_DIRS += qla2xxx
-+                      endif
-+              endif
-+
-+      NOTE: For Redhat Distributions (7.1 and 7.2) :-
-+
-+      Locate the following line: 
-+
-+              obj-$(CONFIG_SCSI_QLOGIC_QLA2100) += qla2x00.o
-+
-+      Add the following lines below that:
-+      
-+              obj-$(CONFIG_SCSI_QLOGIC_QLA2XXX_QLA2200) += qla2xxx/qla2200.o
-+                obj-$(CONFIG_SCSI_QLOGIC_QLA2XXX_QLA2300) += qla2xxx/qla2300.o
-+
-+      Append the following lines to the end of the Makefile:
-+
-+              qla2xxx/qla2200.o:
-+                      cd qla2xxx; make qla2200.o
-+
-+              qla2xxx/qla2300.o:
-+                      cd qla2xxx; make qla2300.o
-+
-+      NOTE: For SuSE Distributions (7.2 and 7.3) :-
-+
-+      Locate the following line: 
-+
-+              obj-$(CONFIG_SCSI_QLOGIC_QLA2200) += qla2200.o
-+              obj-$(CONFIG_SCSI_QLOGIC_QLA2300) += qla2300.o
-+
-+      Add the following lines below that:
-+      
-+              obj-$(CONFIG_SCSI_QLOGIC_QLA2XXX_QLA2200) += qla2xxx/qla2200.o
-+                obj-$(CONFIG_SCSI_QLOGIC_QLA2XXX_QLA2300) += qla2xxx/qla2300.o
-+      
-+      Append the following lines to the end of the Makefile:
-+
-+              qla2xxx/qla2200.o:
-+                      cd qla2xxx; make qla2200.o
-+
-+              qla2xxx/qla2300.o:
-+                      cd qla2xxx; make qla2300.o
-+
-+4. Edit the Config.in file under the kernel scsi directory
-+
-+      # cd /usr/src/linux/drivers/scsi
-+      # vi Config.in
-+
-+      NOTE: For Redhat Distributions (7.1 and 7.2) :-
-+
-+      Locate the following lines:
-+
-+              dep_tristate 'Qlogic QLA 2100 FC SCSI support' CONFIG_SCSI_QLOGIC_QLA2100 $CONFIG_SCSI
-+              dep_tristate 'Qlogic QLA 2200 FC SCSI support' CONFIG_SCSI_QLOGIC_QLA2200 $CONFIG_SCSI
-+
-+      Add the following line below that:
-+
-+              source drivers/scsi/qla2xxx/Config.in
-+
-+      NOTE: For SuSE Distributions (7.2 and 7.3) :-
-+
-+      Locate the following lines:
-+
-+              dep_tristate 'Qlogic QLA2200 SCSI support' CONFIG_SCSI_QLOGIC_QLA2200 $CONFIG_SCSI
-+              dep_tristate 'Qlogic QLA2300 SCSI support' CONFIG_SCSI_QLOGIC_QLA2300 $CONFIG_SCSI
-+
-+      Add the following lines below that:
-+
-+              source drivers/scsi/qla2xxx/Config.in
-+      
-+5. Remove any reference to older QLogic FC drivers
-+
-+      NOTE: To ensure that the older driver binary included in the original
-+            distribution does not interfere with the updated version, please
-+            rename the old driver binary as follows:
-+
-+      For Redhat Distributions (7.2 with 2.4.9-21 or above) :-
-+
-+              # cd /usr/src/linux/drivers/addon/qla2200
-+              # mv qla2200.o qla2200_rh.o
-+              # mv qla2300.o qla2300_rh.o
-+              # cd /lib/modules/<kernel_version>/kernel/drivers/addon/qla2200
-+              # mv qla2200.o qla2200_rh.o
-+              # mv qla2300.o qla2300_rh.o
-+
-+      For SuSE Distributions (Enterprise 7 and above, 7.3 and above) :-
-+
-+              # cd /usr/src/linux/drivers/scsi
-+              # mv qla2200.o qla2200_su.o
-+              # mv qla2300.o qla2300_su.o
-+              # cd /lib/modules/<kernel_version>/kernel/drivers/scsi
-+              # mv qla2200.o qla2200_su.o
-+              # mv qla2300.o qla2300_su.o
-+
-+6. Configure the kernel to load the new QLogic driver.
-+
-+      # cd /usr/src/linux
-+      # make menuconfig
-+
-+      - Select "SCSI Support" <Enter>
-+
-+      - Select "SCSI Generic Support" <Space bar> <Space bar>
-+
-+      - Select "SCSI low-level drivers" <Enter>
-+      
-+      - Select "Qlogic QLA 2XXX v6 FC SCSI support" <Enter>
-+
-+      - Select "Qlogic QLA 2200 v6 FC SCSI support" <Space bar> <Space bar>
-+
-+      OR
-+
-+      - Select "Qlogic QLA 2300 v6 FC SCSI support" <Space bar> <Space bar>
-+      
-+      - Select Exit to go back to the SCSI Support menu.
-+
-+      - Select Exit to go back to the Main Menu.
-+
-+      - Select Exit to exit the Main Menu.
-+
-+      The system prompts: "Do you wish to save your new kernel 
-+      configuration?"  Select "Yes." The system saves a new config 
-+      file called ".config" in the current directory.
-+
-+7. Build Kernel 
-+
-+       # make dep bzImage modules modules_install
-+
-+
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/drvrinstall linux-2.4.21-x86_64/drivers/scsi/qla2xxx/drvrinstall
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/drvrinstall  1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/drvrinstall       2004-04-22 19:42:21.000000000 -0700
-@@ -0,0 +1,9 @@
-+#!/bin/bash
-+
-+# Install QLA2X00 driver.
-+
-+echo "Extracting QLogic driver source..."
-+
-+tar xfz ./qla2x00src-*.tgz
-+
-+echo "Done."
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/exioct.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/exioct.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/exioct.h     2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/exioct.h  2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -195,6 +195,8 @@
-  *        EXT_SC_GET_BEACON_STATE,EXT_SC_SET_BEACON_STATE for the
-  *        led blinking feature.
-  *
-+ * Rev. 5.30     July 21, 2003
-+ * RL - Added new statistics fields in HBA_PORT_STAT struct.
-  */
- #ifndef       _EXIOCT_H
-@@ -651,6 +653,7 @@ typedef struct _EXT_DEST_ADDR {
- #define       EXT_DEF_DESTTYPE_SCSI                   5
- /* Statistic */
-+#if defined(linux)                                    /* Linux */
- typedef struct _EXT_HBA_PORT_STAT {
-       UINT32    ControllerErrorCount;         /* 4 */
-       UINT32    DeviceErrorCount;             /* 4 */
-@@ -664,8 +667,35 @@ typedef struct _EXT_HBA_PORT_STAT {
-       UINT32    PrimitiveSeqProtocolErrorCount;/* 4 */
-       UINT32    InvalidTransmissionWordCount; /* 4 */
-       UINT32    InvalidCRCCount;              /* 4 */
--      UINT32    Reserved[16];                 /* 64 */
-+      uint64_t  InputRequestCount;            /* 8 */
-+      uint64_t  OutputRequestCount;           /* 8 */
-+      uint64_t  ControlRequestCount;          /* 8 */
-+      uint64_t  InputMBytes;                  /* 8 */
-+      uint64_t  OutputMBytes;                 /* 8 */
-+      UINT32    Reserved[6];                  /* 24 */
- } EXT_HBA_PORT_STAT, *PEXT_HBA_PORT_STAT;     /* 112 */
-+#else
-+typedef struct _EXT_HBA_PORT_STAT {
-+      UINT32    ControllerErrorCount;         /* 4 */
-+      UINT32    DeviceErrorCount;             /* 4 */
-+      UINT32    TotalIoCount;                 /* 4 */
-+      UINT32    TotalMBytes;                  /* 4; MB of data processed */
-+      UINT32    TotalLipResets;               /* 4; Total no. of LIP Reset */
-+      UINT32    Reserved2;                    /* 4 */
-+      UINT32    TotalLinkFailures;            /* 4 */
-+      UINT32    TotalLossOfSync;              /* 4 */
-+      UINT32    TotalLossOfSignals;           /* 4 */
-+      UINT32    PrimitiveSeqProtocolErrorCount;/* 4 */
-+      UINT32    InvalidTransmissionWordCount; /* 4 */
-+      UINT32    InvalidCRCCount;              /* 4 */
-+      UINT64    InputRequestCount;            /* 8 */
-+      UINT64    OutputRequestCount;           /* 8 */
-+      UINT64    ControlRequestCount;          /* 8 */
-+      UINT64    InputMBytes;                  /* 8 */
-+      UINT64    OutputMBytes;                 /* 8 */
-+      UINT32    Reserved[6];                  /* 24 */
-+} EXT_HBA_PORT_STAT, *PEXT_HBA_PORT_STAT;     /* 112 */
-+#endif
- /* Driver property */
-@@ -757,7 +787,8 @@ typedef struct _EXT_SCSI_PASSTHRU {
-       UINT8           Direction;
-       UINT8           CdbLength;
-       UINT8           Cdb[EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH];
--        UINT32          Reserved[14];
-+        UINT32          Timeout;
-+        UINT32          Reserved[13];
-         UINT16          Reserved2;
-         UINT16          SenseLength;
-       UINT8           SenseData[256];
-@@ -769,7 +800,8 @@ typedef struct _EXT_FC_SCSI_PASSTHRU {
-       UINT8           Direction;
-       UINT8           CdbLength;
-       UINT8           Cdb[EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH];
--        UINT32          Reserved[14];
-+        UINT32          Timeout;
-+        UINT32          Reserved[13];
-         UINT16          Reserved2;
-         UINT16          SenseLength;
-       UINT8           SenseData[256];
-@@ -821,6 +853,7 @@ typedef struct _EXT_ASYNC_EVENT {
- #define       EXT_DEF_GET_HIDDEN_DEVICE       0x4
- #define       EXT_DEF_GET_FABRIC_DEVICE       0x8
- #define       EXT_DEF_GET_LOOP_DEVICE         0x10
-+#define EXT_DEF_GET_TRUE_NN_DEVICE    0x1000
- /* Each entry in device database */
- typedef struct _EXT_DEVICEDATAENTRY
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/exioctln.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/exioctln.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/exioctln.h   2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/exioctln.h        2004-04-22 19:42:21.000000000 -0700
-@@ -149,7 +149,7 @@ typedef struct  track_instance {
-     _IOWR(QLMULTIPATH_MAGIC, idx, sizeof(EXT_IOCTL))
- #ifndef APILIB
--  #if CONFIG_PPC64
-+  #if defined(QLA_CONFIG_COMPAT)
-   #define     QL_IOCTL_CMD(idx)       (QL_IOCTL_BASE(idx) - 0x40000)
-   #else
-   #define     QL_IOCTL_CMD(idx)       QL_IOCTL_BASE(idx)
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/inioct.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/inioct.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/inioct.h     2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/inioct.h  2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/libinstall linux-2.4.21-x86_64/drivers/scsi/qla2xxx/libinstall
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/libinstall   1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/libinstall        2004-04-22 19:42:21.000000000 -0700
-@@ -0,0 +1,77 @@
-+#!/bin/sh
-+
-+# Install QLSDM library. Check /etc/hba.conf
-+
-+echo "Setting up QLogic HBA API library..."
-+echo "Please make sure the /usr/lib/libqlsdm.so file is not in use."
-+
-+APIDIR=ApiPkg
-+
-+mkdir -p ${APIDIR}
-+cd ${APIDIR}
-+
-+tar xfz ../qlapi*rel.tgz
-+
-+# Make sure we install with correct permission
-+
-+chmod 500 ./lib/*
-+
-+# First, some clean up.
-+MAIN_QLLIB_COPY=./lib/libqlsdm.so
-+rm -f $MAIN_QLLIB_COPY
-+rm -f /usr/lib/libqlsdm.a
-+
-+# Right now we only support/check for IA32 and IA64 bit platforms.
-+# Later need to add support for PPC64
-+
-+if [ $HOSTTYPE == ia64 ]
-+then
-+        ln ./lib/libqlsdm-ia64.so $MAIN_QLLIB_COPY
-+else
-+      ln ./lib/libqlsdm-ia32.so $MAIN_QLLIB_COPY
-+fi
-+
-+cp --suffix=.bak --backup=simple $MAIN_QLLIB_COPY /usr/lib
-+
-+# Now check the hba.conf file
-+
-+if [ -s /etc/hba.conf ]
-+then
-+
-+    if [ -r /etc/hba.conf ] && [ -w /etc/hba.conf ]
-+    then
-+        grep -v qla2x00 /etc/hba.conf > ./tmp.conf
-+
-+        if [ -s ./tmp.conf ]
-+        then
-+            rm -f /etc/hba.conf.bak
-+            mv /etc/hba.conf /etc/hba.conf.bak
-+            sed '$r ./hba.conf' ./tmp.conf > /etc/hba.conf
-+        fi
-+
-+        rm ./tmp.conf
-+    else
-+        echo "Cannot update /etc/hba.conf. Permission denied."
-+        exit
-+    fi
-+
-+else
-+    cp ./hba.conf /etc
-+fi
-+
-+# Now check the library data file
-+
-+if [ -s /tmp/qlsdm.dat ]
-+then
-+    if [ -r /tmp/qlsdm.dat ] && [ -w /tmp/qlsdm.dat ]
-+    then
-+      rm -f /tmp/qlsdm.dat
-+    else
-+        echo "Cannot delete /tmp/qlsdm.dat. Permission denied."
-+        exit
-+    fi
-+fi
-+
-+echo "Done."
-+
-+
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/libremove linux-2.4.21-x86_64/drivers/scsi/qla2xxx/libremove
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/libremove    1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/libremove 2004-04-22 19:42:21.000000000 -0700
-@@ -0,0 +1,13 @@
-+#!/bin/bash
-+
-+# Remove QLSDM library. Edit /etc/hba.conf
-+
-+echo "Removing QLogic HBA API library..."
-+
-+rm -rf /usr/lib/libqlsdm.so
-+grep -v qla2x00 /etc/hba.conf > /tmp/tmp.conf
-+cp --suffix=.bak --backup=simple /tmp/tmp.conf /etc/hba.conf
-+rm /tmp/tmp.conf
-+rm -f /tmp/qlsdm.dat
-+
-+echo "Done."
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/listops.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/listops.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/listops.h    2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/listops.h 2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -31,6 +31,47 @@
-               pos = n, n = pos->next )
- #endif
-+
-+#if !defined(list_for_each_entry)
-+#define list_for_each_entry(pos, head, member)                          \
-+      for (pos = list_entry((head)->next, typeof(*pos), member);      \
-+          &pos->member != (head);                                    \
-+          pos = list_entry(pos->member.next, typeof(*pos), member))
-+
-+#endif
-+#if !defined(list_for_each_entry_safe)
-+#define list_for_each_entry_safe(pos, n, head, member)                        \
-+      for (pos = list_entry((head)->next, typeof(*pos), member),      \
-+          n = list_entry(pos->member.next, typeof(*pos), member);     \
-+          &pos->member != (head);                                     \
-+          pos = n, n = list_entry(n->member.next, typeof(*n), member))
-+#endif
-+
-+/* Non-standard definitions. */
-+static inline void __qla_list_splice(struct list_head *list,
-+    struct list_head *head)
-+{
-+      struct list_head        *first = list->next;
-+      struct  list_head       *last = list->prev;
-+      struct  list_head       *at = head->next;
-+
-+      first->prev = head;
-+      head->next = first;
-+
-+      last->next = at;
-+      at->prev = last;
-+
-+}
-+
-+static inline void qla_list_splice_init(struct list_head *list,
-+    struct list_head *head)
-+{
-+      if (!list_empty(list)) {
-+              __qla_list_splice(list, head);
-+              INIT_LIST_HEAD(list);
-+      }
-+}
-+
- /* __add_to_done_queue()
-  * 
-  * Place SRB command on done queue.
-@@ -96,7 +137,6 @@ __add_to_retry_queue(struct scsi_qla_hos
-         list_add_tail(&sp->list,&ha->retry_queue);
-         ha->retry_q_cnt++;
-         sp->flags |= SRB_WATCHDOG;
--        ha->flags.watchdog_enabled = TRUE;
-         sp->state = SRB_RETRY_STATE;
-       sp->ha = ha;
- }
-@@ -177,8 +217,6 @@ __del_from_retry_queue(struct scsi_qla_h
- {
-         list_del_init(&sp->list);
--        if (list_empty(&ha->retry_queue))
--                ha->flags.watchdog_enabled = FALSE;
-         sp->flags &= ~(SRB_WATCHDOG | SRB_BUSY);
-         sp->state = SRB_NO_QUEUE_STATE;
-         ha->retry_q_cnt--;
-@@ -309,15 +347,20 @@ __add_to_pending_queue_head(struct scsi_
-       sp->state = SRB_PENDING_STATE;
- }
--static inline void
-+/* returns 1 if the queue was empty before the add */
-+static inline int
- add_to_pending_queue(struct scsi_qla_host *ha, srb_t *sp)
- {
-       unsigned long flags;
--
-+      int ret;
-+      
-       spin_lock_irqsave(&ha->list_lock, flags);
-+      ret = list_empty(&ha->pending_queue);   
-       __add_to_pending_queue(ha, sp);
-       spin_unlock_irqrestore(&ha->list_lock, flags);
-+      return ret;
- }
-+
- static inline void
- add_to_pending_queue_head(struct scsi_qla_host *ha, srb_t *sp)
- {
-@@ -394,4 +437,4 @@ del_from_pending_queue(struct scsi_qla_h
-         spin_unlock_irqrestore(&ha->list_lock, flags);
- }
--
-+ 
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/Makefile linux-2.4.21-x86_64/drivers/scsi/qla2xxx/Makefile
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/Makefile     2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/Makefile  2004-04-22 19:42:21.000000000 -0700
-@@ -16,6 +16,52 @@ ifeq ($(CONFIG_SMP),y)
-       QLA_FLAGS += -D__SMP__ -DCONFIG_SMP
- endif
-+SHT_FLAGS := $(CFLAGS)
-+check_sht = $(shell \
-+      echo "\#include <linux/config.h>" > check_sht.c ; \
-+      echo "\#include <linux/version.h>" >> check_sht.c ; \
-+      echo "\#include <linux/types.h>" >> check_sht.c ; \
-+      echo "\#include <linux/init.h>" >> check_sht.c ; \
-+      echo "\#include <linux/blk.h>" >> check_sht.c ; \
-+      echo "\#include \"sd.h\"" >> check_sht.c ; \
-+      echo "\#include \"scsi.h\"" >> check_sht.c ; \
-+      echo "\#include \"hosts.h\"" >> check_sht.c ; \
-+      echo "struct SHT test_sht;" >> check_sht.c ; \
-+      echo "void test_func(void) { test_sht.$(1) = 1; }" >> check_sht.c ; \
-+      if $(CC) $(SHT_FLAGS) -o /dev/null -c check_sht.c > /dev/null 2>&1 ; \
-+      then \
-+              echo "$(2)" ; \
-+      fi ; \
-+      rm check_sht*)
-+
-+QLA_FLAGS += $(call check_sht,highmem_io,-DSHT_HAS_HIGHMEM_IO)
-+QLA_FLAGS += $(call check_sht,can_dma_32,-DSHT_HAS_CAN_DMA_32)
-+QLA_FLAGS += $(call check_sht,single_sg_ok,-DSHT_HAS_SINGLE_SG_OK)
-+QLA_FLAGS += $(call check_sht,can_do_varyio,-DSHT_HAS_CAN_DO_VARYIO)
-+QLA_FLAGS += $(call check_sht,vary_io,-DSHT_HAS_VARY_IO)
-+QLA_FLAGS += $(call check_sht,need_plug_timer,-DSHT_HAS_NEED_PLUG_TIMER)
-+
-+SH_FLAGS := $(CFLAGS)
-+check_sh = $(shell \
-+      echo "\#include <linux/config.h>" > check_sh.c ; \
-+      echo "\#include <linux/version.h>" >> check_sh.c ; \
-+      echo "\#include <linux/types.h>" >> check_sh.c ; \
-+      echo "\#include <linux/init.h>" >> check_sh.c ; \
-+      echo "\#include <linux/blk.h>" >> check_sh.c ; \
-+      echo "\#include \"sd.h\"" >> check_sh.c ; \
-+      echo "\#include \"scsi.h\"" >> check_sh.c ; \
-+      echo "\#include \"hosts.h\"" >> check_sh.c ; \
-+      echo "struct Scsi_Host test_sh;" >> check_sh.c ; \
-+      echo "void test_func(void) { test_sh.$(1) = 0; }" >> check_sh.c ; \
-+      if $(CC) $(SH_FLAGS) -o /dev/null -c check_sh.c > /dev/null 2>&1 ; \
-+      then \
-+              echo "$(2)" ; \
-+      fi ; \
-+      rm check_sh*)
-+
-+QLA_FLAGS += $(call check_sh,host_lock,-DSH_HAS_HOST_LOCK)
-+QLA_FLAGS += $(call check_sh,can_queue_mask,-DSH_HAS_CAN_QUEUE_MASK)
-+
- qla2100.o: $(SRC_FILES) 
-       $(CC) $(CFLAGS) $(QLA_FLAGS) -DISP2100 -c qla2100.c -o $@
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2100_fw.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2100_fw.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2100_fw.h  2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2100_fw.h       2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2200_fw.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2200_fw.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2200_fw.h  2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2200_fw.h       2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -25,7 +25,7 @@
-  *                                                                    *
-  ************************************************************************/
- /*
-- *    Firmware Version 2.02.04 (08:24 Feb 28, 2003)
-+ *    Firmware Version 2.02.06 (08:46 Jun 26, 2003)
-  */
- #ifdef UNIQUE_FW_NAME
-@@ -35,15 +35,15 @@ unsigned short risc_code_version = 2*102
- #endif
- #ifdef UNIQUE_FW_NAME
--unsigned char fw2200tp_version_str[] = {2,2,4};
-+unsigned char fw2200tp_version_str[] = {2,2,6};
- #else
--unsigned char firmware_version[] = {2,2,4};
-+unsigned char firmware_version[] = {2,2,6};
- #endif
- #ifdef UNIQUE_FW_NAME
--#define fw2200tp_VERSION_STRING "2.02.04"
-+#define fw2200tp_VERSION_STRING "2.02.06"
- #else
--#define FW_VERSION_STRING "2.02.04"
-+#define FW_VERSION_STRING "2.02.06"
- #endif
- #ifdef UNIQUE_FW_NAME
-@@ -57,17 +57,17 @@ unsigned short fw2200tp_code01[] = { 
- #else
- unsigned short risc_code01[] = { 
- #endif
--      0x0470, 0x0000, 0x0000, 0xa463, 0x0000, 0x0002, 0x0002, 0x0004,
-+      0x0470, 0x0000, 0x0000, 0xa46f, 0x0000, 0x0002, 0x0002, 0x0006,
-       0x0017, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
-       0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
-       0x5449, 0x4f4e, 0x2049, 0x5350, 0x3232, 0x3030, 0x2046, 0x6972,
-       0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
--      0x322e, 0x3032, 0x2e30, 0x3420, 0x2020, 0x2020, 0x2400, 0x20c1,
-+      0x322e, 0x3032, 0x2e30, 0x3620, 0x2020, 0x2020, 0x2400, 0x20c1,
-       0x0005, 0x2001, 0x017f, 0x2003, 0x0000, 0x20c9, 0xbaff, 0x2091,
-       0x2000, 0x2059, 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x296a,
-       0x2051, 0xb500, 0x2a70, 0x2029, 0xed00, 0x2031, 0xffff, 0x2039,
--      0xece9, 0x2021, 0x0200, 0x0804, 0x1468, 0x20a1, 0xb463, 0xa00e,
--      0x20a9, 0x089d, 0x41a4, 0x3400, 0x7562, 0x7666, 0x775e, 0x746a,
-+      0xece9, 0x2021, 0x0200, 0x0804, 0x1468, 0x20a1, 0xb46f, 0xa00e,
-+      0x20a9, 0x0891, 0x41a4, 0x3400, 0x7562, 0x7666, 0x775e, 0x746a,
-       0x746e, 0x20a1, 0xbd00, 0x7164, 0x810d, 0x810d, 0x810d, 0x810d,
-       0xa18c, 0x000f, 0x2001, 0x000b, 0xa112, 0xa00e, 0x21a8, 0x41a4,
-       0x3400, 0x8211, 0x1dd8, 0x7164, 0x3400, 0xa102, 0x0120, 0x0218,
-@@ -76,65 +76,65 @@ unsigned short risc_code01[] = { 
-       0xa112, 0x20a1, 0x1000, 0xa00e, 0x21a8, 0x41a4, 0x8211, 0x1de0,
-       0x2009, 0xb500, 0x3400, 0xa102, 0x0120, 0x0218, 0x20a8, 0xa00e,
-       0x41a4, 0x080c, 0x1411, 0x080c, 0x1632, 0x080c, 0x17cf, 0x080c,
--      0x1fa2, 0x080c, 0x4c00, 0x080c, 0x85b9, 0x080c, 0x15bb, 0x080c,
--      0x2ec4, 0x080c, 0x5d8b, 0x080c, 0x5342, 0x080c, 0x68cf, 0x080c,
--      0x2510, 0x080c, 0x6b62, 0x080c, 0x63bc, 0x080c, 0x23ca, 0x080c,
-+      0x1fa2, 0x080c, 0x4bff, 0x080c, 0x85bf, 0x080c, 0x15bb, 0x080c,
-+      0x2ec4, 0x080c, 0x5d8a, 0x080c, 0x5341, 0x080c, 0x68ce, 0x080c,
-+      0x2510, 0x080c, 0x6b61, 0x080c, 0x63bb, 0x080c, 0x23ca, 0x080c,
-       0x24de, 0x2091, 0x3009, 0x7823, 0x0000, 0x1004, 0x10c5, 0x7820,
-       0xa086, 0x0002, 0x1150, 0x7823, 0x4000, 0x0e04, 0x10bd, 0x781b,
-       0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70, 0x7003, 0x0000,
--      0x2a70, 0x7000, 0xa08e, 0x0003, 0x1158, 0x080c, 0x3f09, 0x080c,
--      0x2eeb, 0x080c, 0x5dd9, 0x080c, 0x54f1, 0x080c, 0x68fa, 0x0c80,
-+      0x2a70, 0x7000, 0xa08e, 0x0003, 0x1158, 0x080c, 0x3f08, 0x080c,
-+      0x2eeb, 0x080c, 0x5dd8, 0x080c, 0x54f0, 0x080c, 0x68f9, 0x0c80,
-       0x000b, 0x0c98, 0x10e4, 0x10e5, 0x1210, 0x10e2, 0x12dd, 0x140e,
-       0x140f, 0x1410, 0x080c, 0x1515, 0x0005, 0x0126, 0x00f6, 0x2091,
-       0x8000, 0x7000, 0xa086, 0x0001, 0x1904, 0x11ed, 0x080c, 0x1588,
--      0x080c, 0x5ad0, 0x0150, 0x080c, 0x5af6, 0x15c0, 0x2079, 0x0100,
--      0x7828, 0xa085, 0x1800, 0x782a, 0x0488, 0x080c, 0x5a08, 0x7000,
-+      0x080c, 0x5acf, 0x0150, 0x080c, 0x5af5, 0x15c0, 0x2079, 0x0100,
-+      0x7828, 0xa085, 0x1800, 0x782a, 0x0488, 0x080c, 0x5a07, 0x7000,
-       0xa086, 0x0001, 0x1904, 0x11ed, 0x708c, 0xa086, 0x0028, 0x1904,
-       0x11ed, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, 0x0100, 0x7827,
--      0xffff, 0x7a28, 0xa295, 0x1e2f, 0x7a2a, 0x2011, 0x59a3, 0x080c,
--      0x699d, 0x2011, 0x5996, 0x080c, 0x6a5d, 0x2011, 0x59e5, 0x080c,
--      0x699d, 0x2011, 0x4add, 0x080c, 0x699d, 0x2011, 0x8030, 0x2019,
--      0x0000, 0x708b, 0x0000, 0x080c, 0x1de9, 0x00e8, 0x080c, 0x4490,
--      0x2079, 0x0100, 0x7844, 0xa005, 0x1904, 0x11ed, 0x2011, 0x4add,
--      0x080c, 0x699d, 0x2011, 0x59e5, 0x080c, 0x699d, 0x080c, 0x1de9,
-+      0xffff, 0x7a28, 0xa295, 0x1e2f, 0x7a2a, 0x2011, 0x59a2, 0x080c,
-+      0x699c, 0x2011, 0x5995, 0x080c, 0x6a5c, 0x2011, 0x59e4, 0x080c,
-+      0x699c, 0x2011, 0x4adc, 0x080c, 0x699c, 0x2011, 0x8030, 0x2019,
-+      0x0000, 0x708b, 0x0000, 0x080c, 0x1de9, 0x00e8, 0x080c, 0x448f,
-+      0x2079, 0x0100, 0x7844, 0xa005, 0x1904, 0x11ed, 0x2011, 0x4adc,
-+      0x080c, 0x699c, 0x2011, 0x59e4, 0x080c, 0x699c, 0x080c, 0x1de9,
-       0x2001, 0xb78d, 0x2004, 0x780e, 0x7840, 0xa084, 0xfffb, 0x7842,
--      0x2011, 0x8010, 0x73cc, 0x080c, 0x3ecd, 0x723c, 0xc284, 0x723e,
--      0x2001, 0xb50c, 0x200c, 0xc1ac, 0x2102, 0x080c, 0x7f36, 0x2011,
--      0x0004, 0x080c, 0x9c5a, 0x080c, 0x524e, 0x080c, 0x5ad0, 0x0158,
--      0x080c, 0x4be9, 0x0140, 0x708b, 0x0001, 0x70c7, 0x0000, 0x080c,
--      0x462d, 0x0804, 0x11ed, 0x080c, 0x530a, 0x0120, 0x7a0c, 0xc2b4,
--      0x7a0e, 0x0060, 0x7073, 0x0000, 0x080c, 0xa002, 0x70d4, 0xd09c,
--      0x1128, 0x70a0, 0xa005, 0x0110, 0x080c, 0x4bc7, 0x70df, 0x0000,
--      0x70db, 0x0000, 0x72d4, 0x080c, 0x5ad0, 0x1178, 0x2011, 0x0000,
-+      0x2011, 0x8010, 0x73cc, 0x080c, 0x3ecc, 0x723c, 0xc284, 0x723e,
-+      0x2001, 0xb50c, 0x200c, 0xc1ac, 0x2102, 0x080c, 0x7f35, 0x2011,
-+      0x0004, 0x080c, 0x9c60, 0x080c, 0x524d, 0x080c, 0x5acf, 0x0158,
-+      0x080c, 0x4be8, 0x0140, 0x708b, 0x0001, 0x70c7, 0x0000, 0x080c,
-+      0x462c, 0x0804, 0x11ed, 0x080c, 0x5309, 0x0120, 0x7a0c, 0xc2b4,
-+      0x7a0e, 0x0060, 0x7073, 0x0000, 0x080c, 0xa008, 0x70d4, 0xd09c,
-+      0x1128, 0x70a0, 0xa005, 0x0110, 0x080c, 0x4bc6, 0x70df, 0x0000,
-+      0x70db, 0x0000, 0x72d4, 0x080c, 0x5acf, 0x1178, 0x2011, 0x0000,
-       0x0016, 0x080c, 0x28eb, 0x2019, 0xb78f, 0x211a, 0x001e, 0x7053,
-       0xffff, 0x7057, 0x00ef, 0x7077, 0x0000, 0x2079, 0xb552, 0x7804,
--      0xd0ac, 0x0108, 0xc295, 0x72d6, 0x080c, 0x5ad0, 0x0118, 0xa296,
--      0x0004, 0x0548, 0x2011, 0x0001, 0x080c, 0x9c5a, 0x709b, 0x0000,
-+      0xd0ac, 0x0108, 0xc295, 0x72d6, 0x080c, 0x5acf, 0x0118, 0xa296,
-+      0x0004, 0x0548, 0x2011, 0x0001, 0x080c, 0x9c60, 0x709b, 0x0000,
-       0x709f, 0xffff, 0x7003, 0x0002, 0x2079, 0x0100, 0x7827, 0x0003,
-       0x7828, 0xa085, 0x0003, 0x782a, 0x00fe, 0x080c, 0x2ab8, 0x2011,
--      0x0005, 0x080c, 0x8076, 0x080c, 0x7174, 0x080c, 0x5ad0, 0x0148,
-+      0x0005, 0x080c, 0x8075, 0x080c, 0x7173, 0x080c, 0x5acf, 0x0148,
-       0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x28eb, 0x61e2, 0x001e,
-       0x00ce, 0x012e, 0x0420, 0x709b, 0x0000, 0x709f, 0xffff, 0x7003,
-       0x0002, 0x00f6, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0xa085,
--      0x0003, 0x782a, 0x00fe, 0x2011, 0x0005, 0x080c, 0x8076, 0x080c,
--      0x7174, 0x080c, 0x5ad0, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
-+      0x0003, 0x782a, 0x00fe, 0x2011, 0x0005, 0x080c, 0x8075, 0x080c,
-+      0x7173, 0x080c, 0x5acf, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
-       0x080c, 0x28eb, 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005,
--      0x00c6, 0x080c, 0x5ad0, 0x1118, 0x20a9, 0x0100, 0x0010, 0x20a9,
--      0x0082, 0x080c, 0x5ad0, 0x1118, 0x2009, 0x0000, 0x0010, 0x2009,
-+      0x00c6, 0x080c, 0x5acf, 0x1118, 0x20a9, 0x0100, 0x0010, 0x20a9,
-+      0x0082, 0x080c, 0x5acf, 0x1118, 0x2009, 0x0000, 0x0010, 0x2009,
-       0x007e, 0x080c, 0x2d97, 0x8108, 0x1f04, 0x1201, 0x00ce, 0x7073,
-       0x0000, 0x7074, 0xa084, 0x00ff, 0x7076, 0x70a3, 0x0000, 0x0005,
-       0x0126, 0x2091, 0x8000, 0x7000, 0xa086, 0x0002, 0x1904, 0x12db,
--      0x709c, 0xa086, 0xffff, 0x0130, 0x080c, 0x2ab8, 0x080c, 0x7174,
-+      0x709c, 0xa086, 0xffff, 0x0130, 0x080c, 0x2ab8, 0x080c, 0x7173,
-       0x0804, 0x12db, 0x70d4, 0xd0ac, 0x1110, 0xd09c, 0x0540, 0xd084,
-       0x0530, 0x0006, 0x0016, 0x2001, 0x0103, 0x2009, 0xb78d, 0x210c,
-       0x2102, 0x001e, 0x000e, 0xd08c, 0x01d0, 0x70d8, 0xa086, 0xffff,
--      0x0190, 0x080c, 0x2c17, 0x080c, 0x7174, 0x70d4, 0xd094, 0x1904,
-+      0x0190, 0x080c, 0x2c17, 0x080c, 0x7173, 0x70d4, 0xd094, 0x1904,
-       0x12db, 0x2011, 0x0001, 0x2019, 0x0000, 0x080c, 0x2c4f, 0x080c,
--      0x7174, 0x0804, 0x12db, 0x70dc, 0xa005, 0x1904, 0x12db, 0x7098,
-+      0x7173, 0x0804, 0x12db, 0x70dc, 0xa005, 0x1904, 0x12db, 0x7098,
-       0xa005, 0x1904, 0x12db, 0x70d4, 0xd0a4, 0x0118, 0xd0b4, 0x0904,
--      0x12db, 0x080c, 0x530a, 0x1904, 0x12db, 0x2001, 0xb553, 0x2004,
-+      0x12db, 0x080c, 0x5309, 0x1904, 0x12db, 0x2001, 0xb553, 0x2004,
-       0xd0ac, 0x01c8, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x2009, 0x0000,
--      0x0016, 0x080c, 0x4faa, 0x1118, 0x6000, 0xd0ec, 0x1138, 0x001e,
-+      0x0016, 0x080c, 0x4fa9, 0x1118, 0x6000, 0xd0ec, 0x1138, 0x001e,
-       0x8108, 0x1f04, 0x1268, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce,
-       0x015e, 0x0804, 0x12db, 0x0006, 0x0016, 0x2001, 0x0103, 0x2009,
-       0xb78d, 0x210c, 0x2102, 0x001e, 0x000e, 0x71a8, 0x81ff, 0x11b0,
-@@ -143,55 +143,55 @@ unsigned short risc_code01[] = { 
-       0x8007, 0x7174, 0x810f, 0x20a9, 0x0002, 0x40a1, 0x20a1, 0xb7d2,
-       0x2009, 0x0000, 0x080c, 0x14fb, 0x2001, 0x0000, 0x810f, 0x20a9,
-       0x0002, 0x40a1, 0x7030, 0xc08c, 0x7032, 0x7003, 0x0003, 0x709f,
--      0xffff, 0x080c, 0x1581, 0xa006, 0x080c, 0x27c3, 0x080c, 0x3f3f,
--      0x00f6, 0x2079, 0x0100, 0x080c, 0x5af6, 0x0150, 0x080c, 0x5ad0,
-+      0xffff, 0x080c, 0x1581, 0xa006, 0x080c, 0x27c3, 0x080c, 0x3f3e,
-+      0x00f6, 0x2079, 0x0100, 0x080c, 0x5af5, 0x0150, 0x080c, 0x5acf,
-       0x7828, 0x0118, 0xa084, 0xe1ff, 0x0010, 0xa084, 0xffdf, 0x782a,
-       0x00fe, 0x2001, 0xb7e1, 0x2004, 0xa086, 0x0005, 0x1120, 0x2011,
--      0x0000, 0x080c, 0x8076, 0x2011, 0x0000, 0x080c, 0x8080, 0x080c,
--      0x7174, 0x080c, 0x7231, 0x012e, 0x0005, 0x0016, 0x0046, 0x00f6,
-+      0x0000, 0x080c, 0x8075, 0x2011, 0x0000, 0x080c, 0x807f, 0x080c,
-+      0x7173, 0x080c, 0x7230, 0x012e, 0x0005, 0x0016, 0x0046, 0x00f6,
-       0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x2009, 0xb534, 0x2104,
--      0xa005, 0x1110, 0x080c, 0x2917, 0x2009, 0x00f7, 0x080c, 0x4bb0,
-+      0xa005, 0x1110, 0x080c, 0x2917, 0x2009, 0x00f7, 0x080c, 0x4baf,
-       0x7940, 0xa18c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827,
-       0x0040, 0xd19c, 0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156,
--      0x7954, 0xd1ac, 0x1904, 0x134b, 0x080c, 0x5ae2, 0x0158, 0x080c,
--      0x5af6, 0x1128, 0x2001, 0xb79e, 0x2003, 0x0000, 0x0070, 0x080c,
--      0x5ad8, 0x0dc0, 0x2001, 0xb79e, 0x2003, 0xaaaa, 0x2001, 0xb79f,
--      0x2003, 0x0001, 0x080c, 0x5a08, 0x0058, 0x080c, 0x5ad0, 0x0140,
--      0x2009, 0x00f8, 0x080c, 0x4bb0, 0x7843, 0x0090, 0x7843, 0x0010,
--      0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x5ad0, 0x0138,
-+      0x7954, 0xd1ac, 0x1904, 0x134b, 0x080c, 0x5ae1, 0x0158, 0x080c,
-+      0x5af5, 0x1128, 0x2001, 0xb79e, 0x2003, 0x0000, 0x0070, 0x080c,
-+      0x5ad7, 0x0dc0, 0x2001, 0xb79e, 0x2003, 0xaaaa, 0x2001, 0xb79f,
-+      0x2003, 0x0001, 0x080c, 0x5a07, 0x0058, 0x080c, 0x5acf, 0x0140,
-+      0x2009, 0x00f8, 0x080c, 0x4baf, 0x7843, 0x0090, 0x7843, 0x0010,
-+      0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x5acf, 0x0138,
-       0x7824, 0xd0ac, 0x1904, 0x13f5, 0x1f04, 0x132a, 0x0070, 0x7824,
--      0x080c, 0x5aec, 0x0118, 0xd0ac, 0x1904, 0x13f5, 0xa084, 0x1800,
-+      0x080c, 0x5aeb, 0x0118, 0xd0ac, 0x1904, 0x13f5, 0xa084, 0x1800,
-       0x0d98, 0x7003, 0x0001, 0x0804, 0x13f5, 0x2001, 0x0001, 0x080c,
-       0x27c3, 0x0804, 0x1404, 0x7850, 0xa084, 0x0180, 0x7852, 0x782f,
--      0x0020, 0x20a9, 0x0046, 0x1d04, 0x1353, 0x080c, 0x6a45, 0x1f04,
-+      0x0020, 0x20a9, 0x0046, 0x1d04, 0x1353, 0x080c, 0x6a44, 0x1f04,
-       0x1353, 0x7850, 0xa084, 0x0180, 0xa085, 0x0400, 0x7852, 0x782f,
--      0x0000, 0x080c, 0x5ae2, 0x0158, 0x080c, 0x5af6, 0x1128, 0x2001,
--      0xb79e, 0x2003, 0x0000, 0x0070, 0x080c, 0x5ad8, 0x0dc0, 0x2001,
-+      0x0000, 0x080c, 0x5ae1, 0x0158, 0x080c, 0x5af5, 0x1128, 0x2001,
-+      0xb79e, 0x2003, 0x0000, 0x0070, 0x080c, 0x5ad7, 0x0dc0, 0x2001,
-       0xb79e, 0x2003, 0xaaaa, 0x2001, 0xb79f, 0x2003, 0x0001, 0x080c,
--      0x5a08, 0x0020, 0x2009, 0x00f8, 0x080c, 0x4bb0, 0x20a9, 0x000e,
-+      0x5a07, 0x0020, 0x2009, 0x00f8, 0x080c, 0x4baf, 0x20a9, 0x000e,
-       0xe000, 0x1f04, 0x1380, 0x7850, 0xa084, 0x0180, 0xa085, 0x1400,
--      0x7852, 0x080c, 0x5ad0, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010,
-+      0x7852, 0x080c, 0x5acf, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010,
-       0x2021, 0xe678, 0x2019, 0xea60, 0x7820, 0xd09c, 0x1558, 0x080c,
--      0x5ad0, 0x05d8, 0x7824, 0xd0ac, 0x1904, 0x13f5, 0x080c, 0x5af6,
-+      0x5acf, 0x05d8, 0x7824, 0xd0ac, 0x1904, 0x13f5, 0x080c, 0x5af5,
-       0x1508, 0x0046, 0x2021, 0x0190, 0x8421, 0x1df0, 0x004e, 0x8421,
-       0x11c8, 0x7827, 0x0048, 0x20a9, 0x01f4, 0x1d04, 0x13ad, 0x080c,
--      0x6a45, 0x1f04, 0x13ad, 0x7824, 0xa084, 0x0068, 0x15c8, 0x2001,
-+      0x6a44, 0x1f04, 0x13ad, 0x7824, 0xa084, 0x0068, 0x15c8, 0x2001,
-       0xb79e, 0x2003, 0xaaaa, 0x2001, 0xb79f, 0x2003, 0x0001, 0x7003,
--      0x0001, 0x0498, 0x1d04, 0x13c6, 0x080c, 0x6a45, 0x8319, 0x1960,
-+      0x0001, 0x0498, 0x1d04, 0x13c6, 0x080c, 0x6a44, 0x8319, 0x1960,
-       0x2009, 0xb534, 0x2104, 0x8000, 0x200a, 0xa084, 0xfff0, 0x0120,
--      0x200b, 0x0000, 0x080c, 0x2917, 0x00d8, 0x080c, 0x5ae2, 0x1140,
--      0xa4a2, 0x0064, 0x1128, 0x080c, 0x5aa7, 0x7003, 0x0001, 0x00a8,
--      0x7827, 0x1800, 0xe000, 0xe000, 0x7824, 0x080c, 0x5aec, 0x0110,
-+      0x200b, 0x0000, 0x080c, 0x2917, 0x00d8, 0x080c, 0x5ae1, 0x1140,
-+      0xa4a2, 0x0064, 0x1128, 0x080c, 0x5aa6, 0x7003, 0x0001, 0x00a8,
-+      0x7827, 0x1800, 0xe000, 0xe000, 0x7824, 0x080c, 0x5aeb, 0x0110,
-       0xd0ac, 0x1158, 0xa084, 0x1800, 0x09a8, 0x7003, 0x0001, 0x0028,
-       0x2001, 0x0001, 0x080c, 0x27c3, 0x0048, 0x2001, 0xb534, 0x2003,
-       0x0000, 0x7827, 0x0048, 0x7828, 0xc09d, 0x782a, 0x7850, 0xa084,
-       0x0180, 0xa085, 0x0400, 0x7852, 0x015e, 0x003e, 0x000e, 0x080c,
-       0x1558, 0x012e, 0x00fe, 0x004e, 0x001e, 0x0005, 0x0005, 0x0005,
-       0x0005, 0x2a70, 0x2061, 0xb7c1, 0x2063, 0x0002, 0x6007, 0x0002,
--      0x600b, 0x0004, 0x600f, 0x0017, 0x2001, 0xb79e, 0x2003, 0x0000,
-+      0x600b, 0x0006, 0x600f, 0x0017, 0x2001, 0xb79e, 0x2003, 0x0000,
-       0x708b, 0x0000, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0218,
-       0x7053, 0xffff, 0x0010, 0x7053, 0x0000, 0x705b, 0xffff, 0x7073,
--      0x0000, 0x7077, 0x0000, 0x080c, 0xa002, 0x2061, 0xb78e, 0x6003,
-+      0x0000, 0x7077, 0x0000, 0x080c, 0xa008, 0x2061, 0xb78e, 0x6003,
-       0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f, 0x0200, 0x6013,
-       0x00ff, 0x6017, 0x000f, 0x601b, 0x0000, 0x601f, 0x07d0, 0x2061,
-       0xb796, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b, 0x0000, 0x600f,
-@@ -216,7 +216,7 @@ unsigned short risc_code01[] = { 
-       0xe000, 0xe000, 0x2c1c, 0x2061, 0x7fff, 0x2c04, 0x2061, 0xffff,
-       0x2262, 0xa306, 0x1110, 0xc195, 0x0008, 0xc19d, 0x2011, 0x0001,
-       0x2019, 0x14f3, 0x0010, 0x0804, 0x1469, 0x3800, 0xa084, 0xfffc,
--      0xa205, 0x20c0, 0x0837, 0x2011, 0x0000, 0x080c, 0x4faa, 0x1178,
-+      0xa205, 0x20c0, 0x0837, 0x2011, 0x0000, 0x080c, 0x4fa9, 0x1178,
-       0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0128, 0xa0c4, 0xff00,
-       0xa8c6, 0x0600, 0x1120, 0xa186, 0x0080, 0x0108, 0x8210, 0x8108,
-       0xa186, 0x0100, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x0e04,
-@@ -303,10 +303,10 @@ unsigned short risc_code01[] = { 
-       0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020,
-       0x53a5, 0x2001, 0xb5fa, 0x2004, 0xd0bc, 0x0148, 0x2001, 0xb603,
-       0x2004, 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5, 0x015e,
--      0x014e, 0x013e, 0x7007, 0x0000, 0x080c, 0x5e70, 0x080c, 0x166c,
--      0x0005, 0x2011, 0x8003, 0x080c, 0x3ecd, 0x0cf8, 0xa18c, 0x0700,
-+      0x014e, 0x013e, 0x7007, 0x0000, 0x080c, 0x5e6f, 0x080c, 0x166c,
-+      0x0005, 0x2011, 0x8003, 0x080c, 0x3ecc, 0x0cf8, 0xa18c, 0x0700,
-       0x1148, 0x2001, 0xb628, 0x2003, 0x0100, 0x7007, 0x0000, 0x080c,
--      0x166c, 0x0005, 0x2011, 0x8004, 0x080c, 0x3ecd, 0x0cf8, 0x0126,
-+      0x166c, 0x0005, 0x2011, 0x8004, 0x080c, 0x3ecc, 0x0cf8, 0x0126,
-       0x2091, 0x2200, 0x2079, 0x0030, 0x2071, 0xb823, 0x7003, 0x0000,
-       0x700f, 0xb82f, 0x7013, 0xb82f, 0x780f, 0x00f6, 0x7803, 0x0004,
-       0x012e, 0x0005, 0x6934, 0xa184, 0x0007, 0x0002, 0x17ee, 0x182c,
-@@ -345,7 +345,7 @@ unsigned short risc_code01[] = { 
-       0x2001, 0x0207, 0x2004, 0xd09c, 0x1d48, 0x7804, 0xa084, 0x6000,
-       0x0120, 0xa086, 0x6000, 0x0108, 0x0c08, 0x7818, 0x6812, 0x781c,
-       0x6816, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6100,
--      0xa18e, 0x0004, 0x1904, 0x1949, 0x2009, 0x0048, 0x080c, 0x8646,
-+      0xa18e, 0x0004, 0x1904, 0x1949, 0x2009, 0x0048, 0x080c, 0x864c,
-       0x0804, 0x1949, 0x6808, 0xa005, 0x05a0, 0x7000, 0xa005, 0x0588,
-       0x700c, 0x7110, 0xa106, 0x1118, 0x7004, 0xa406, 0x1550, 0x2001,
-       0x0005, 0x2004, 0xd08c, 0x0160, 0x0046, 0x080c, 0x1b06, 0x004e,
-@@ -354,7 +354,7 @@ unsigned short risc_code01[] = { 
-       0xd08c, 0x1d50, 0x7804, 0xa084, 0x6000, 0x0118, 0xa086, 0x6000,
-       0x19f0, 0x7818, 0x6812, 0x781c, 0x6816, 0x7803, 0x0004, 0x7003,
-       0x0000, 0x6100, 0xa18e, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c,
--      0x8646, 0x00ce, 0x00de, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x0026,
-+      0x864c, 0x00ce, 0x00de, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x0026,
-       0x0036, 0x0046, 0x0056, 0x2071, 0xb823, 0x7000, 0xa086, 0x0000,
-       0x0904, 0x19b3, 0x7004, 0xac06, 0x1904, 0x19a5, 0x2079, 0x0030,
-       0x7000, 0xa086, 0x0003, 0x0904, 0x19a5, 0x7804, 0xd0fc, 0x15c8,
-@@ -363,7 +363,7 @@ unsigned short risc_code01[] = { 
-       0x1540, 0x080c, 0x1e6e, 0x0026, 0x0056, 0x7803, 0x0004, 0x7804,
-       0xd0ac, 0x1de8, 0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003,
-       0x7007, 0x0000, 0x005e, 0x002e, 0x2001, 0x015d, 0x2003, 0x0000,
--      0x080c, 0x5ad0, 0x1138, 0x0066, 0x2031, 0x0001, 0x080c, 0x5b52,
-+      0x080c, 0x5acf, 0x1138, 0x0066, 0x2031, 0x0001, 0x080c, 0x5b51,
-       0x006e, 0x0058, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,
-       0x0020, 0x080c, 0x1b06, 0x0804, 0x1955, 0x0156, 0x20a9, 0x0009,
-       0x2009, 0xb82f, 0x2104, 0xac06, 0x1108, 0x200a, 0xa188, 0x0003,
-@@ -382,7 +382,7 @@ unsigned short risc_code01[] = { 
-       0xd0f4, 0x11e0, 0xd0d4, 0x01b8, 0x6038, 0xa402, 0x6034, 0xa303,
-       0x0108, 0x1288, 0x643a, 0x6336, 0x6c2a, 0x6b2e, 0x0046, 0x0036,
-       0x2400, 0x6c7c, 0xa402, 0x6812, 0x2300, 0x6b80, 0xa303, 0x6816,
--      0x003e, 0x004e, 0x0018, 0x080c, 0x9f94, 0x09e0, 0x601c, 0xa08e,
-+      0x003e, 0x004e, 0x0018, 0x080c, 0x9f9a, 0x09e0, 0x601c, 0xa08e,
-       0x0008, 0x0904, 0x19e0, 0xa08e, 0x000a, 0x0904, 0x19e0, 0x2001,
-       0xb574, 0x2004, 0xd0b4, 0x1140, 0x6018, 0x2004, 0xd0bc, 0x1120,
-       0x6817, 0x7fff, 0x6813, 0xffff, 0x080c, 0x2305, 0x1918, 0x0804,
-@@ -406,10 +406,10 @@ unsigned short risc_code01[] = { 
-       0x6800, 0xa506, 0x1160, 0x6804, 0xa406, 0x1148, 0x6808, 0xa706,
-       0x1130, 0x680c, 0xa606, 0x0018, 0xc9fc, 0x080c, 0x22a7, 0x2168,
-       0x0005, 0x080c, 0x1515, 0x080c, 0x1f55, 0x7004, 0x2060, 0x00d6,
--      0x6010, 0x2068, 0x7003, 0x0000, 0x080c, 0x1dfe, 0x080c, 0x9c54,
-+      0x6010, 0x2068, 0x7003, 0x0000, 0x080c, 0x1dfe, 0x080c, 0x9c5a,
-       0x0170, 0x6808, 0x8001, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916,
-       0x682b, 0xffff, 0x682f, 0xffff, 0x6850, 0xc0bd, 0x6852, 0x00de,
--      0x080c, 0x9924, 0x0804, 0x1d2b, 0x080c, 0x1515, 0x0126, 0x2091,
-+      0x080c, 0x992a, 0x0804, 0x1d2b, 0x080c, 0x1515, 0x0126, 0x2091,
-       0x2200, 0x0006, 0x0016, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803,
-       0x0002, 0xa184, 0x0700, 0x1978, 0xa184, 0x0003, 0xa086, 0x0003,
-       0x0d58, 0x7000, 0x0002, 0x1b23, 0x1b29, 0x1c3a, 0x1d06, 0x1d1a,
-@@ -427,10 +427,10 @@ unsigned short risc_code01[] = { 
-       0x2500, 0xa405, 0x0128, 0x080c, 0x22bd, 0x6850, 0xc0fd, 0x6852,
-       0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x6808, 0x8001,
-       0x680a, 0x1148, 0x684c, 0xd0e4, 0x0130, 0x7004, 0x2060, 0x2009,
--      0x0048, 0x080c, 0x8646, 0x7000, 0xa086, 0x0004, 0x0904, 0x1d2b,
-+      0x0048, 0x080c, 0x864c, 0x7000, 0xa086, 0x0004, 0x0904, 0x1d2b,
-       0x7003, 0x0000, 0x080c, 0x19ba, 0x0804, 0x1d2b, 0x0056, 0x7d0c,
--      0xd5bc, 0x1110, 0x080c, 0xb3fb, 0x005e, 0x080c, 0x1dfe, 0x00f6,
--      0x7004, 0x2078, 0x080c, 0x5306, 0x0118, 0x7820, 0xc0f5, 0x7822,
-+      0xd5bc, 0x1110, 0x080c, 0xb407, 0x005e, 0x080c, 0x1dfe, 0x00f6,
-+      0x7004, 0x2078, 0x080c, 0x5305, 0x0118, 0x7820, 0xc0f5, 0x7822,
-       0x00fe, 0x682b, 0xffff, 0x682f, 0xffff, 0x6808, 0x8001, 0x680a,
-       0x697c, 0x791a, 0x6980, 0x791e, 0x0804, 0x1d2b, 0x7004, 0x00c6,
-       0x2060, 0x6020, 0x00ce, 0xd0f4, 0x0120, 0x6808, 0x8001, 0x680a,
-@@ -441,13 +441,13 @@ unsigned short risc_code01[] = { 
-       0x2060, 0x601c, 0xa086, 0x000a, 0x11a0, 0x0156, 0x20a9, 0x0009,
-       0x2009, 0xb82f, 0x2104, 0xac06, 0x1108, 0x200a, 0xa188, 0x0003,
-       0x1f04, 0x1bf2, 0x015e, 0x7004, 0x2060, 0x2009, 0x0048, 0x080c,
--      0x8646, 0x080c, 0x19ba, 0x0804, 0x1d2b, 0x7818, 0x6812, 0x781c,
-+      0x864c, 0x080c, 0x19ba, 0x0804, 0x1d2b, 0x7818, 0x6812, 0x781c,
-       0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff, 0xa192, 0x0841, 0x1a04,
-       0x1ae3, 0xa188, 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, 0x8104,
-       0x8004, 0x8004, 0xa20a, 0x810b, 0x810b, 0x810b, 0x080c, 0x1e99,
-       0x7803, 0x0004, 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, 0xd0fc,
-       0x0de8, 0x7803, 0x0002, 0x7803, 0x0004, 0x780f, 0x00f6, 0x7004,
--      0x7007, 0x0000, 0x2060, 0x2009, 0x0048, 0x080c, 0x8646, 0x080c,
-+      0x7007, 0x0000, 0x2060, 0x2009, 0x0048, 0x080c, 0x864c, 0x080c,
-       0x1eef, 0x0838, 0x8001, 0x7002, 0xd194, 0x01b0, 0x7804, 0xd0fc,
-       0x1904, 0x1cd6, 0xd09c, 0x0138, 0x7804, 0xd0fc, 0x1904, 0x1cd6,
-       0xd09c, 0x1904, 0x1cda, 0x8aff, 0x0904, 0x1d2b, 0x2009, 0x0001,
-@@ -464,8 +464,8 @@ unsigned short risc_code01[] = { 
-       0x0020, 0x6810, 0xa31a, 0x6814, 0xa213, 0x00de, 0xd194, 0x0904,
-       0x1b63, 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x6808,
-       0x8001, 0x680a, 0x6b2a, 0x6a2e, 0x003e, 0x002e, 0x0804, 0x1c01,
--      0x0056, 0x7d0c, 0x080c, 0xb3fb, 0x005e, 0x080c, 0x1dfe, 0x00f6,
--      0x7004, 0x2078, 0x080c, 0x5306, 0x0118, 0x7820, 0xc0f5, 0x7822,
-+      0x0056, 0x7d0c, 0x080c, 0xb407, 0x005e, 0x080c, 0x1dfe, 0x00f6,
-+      0x7004, 0x2078, 0x080c, 0x5305, 0x0118, 0x7820, 0xc0f5, 0x7822,
-       0x00fe, 0x682b, 0xffff, 0x682f, 0xffff, 0x6808, 0x8001, 0x680a,
-       0x697c, 0x791a, 0x6980, 0x791e, 0x0804, 0x1d2b, 0x7804, 0xd09c,
-       0x0904, 0x1b0e, 0x7c20, 0x7824, 0xa405, 0x1904, 0x1b0e, 0x7818,
-@@ -475,7 +475,7 @@ unsigned short risc_code01[] = { 
-       0x7834, 0xa406, 0x1138, 0x7838, 0xa706, 0x1120, 0x783c, 0xa606,
-       0x0904, 0x1b0e, 0x7803, 0x0002, 0x0804, 0x1c67, 0x7803, 0x0004,
-       0x7003, 0x0000, 0x7004, 0xa00d, 0x0150, 0x6808, 0x8001, 0x680a,
--      0x1130, 0x7004, 0x2060, 0x2009, 0x0048, 0x080c, 0x8646, 0x080c,
-+      0x1130, 0x7004, 0x2060, 0x2009, 0x0048, 0x080c, 0x864c, 0x080c,
-       0x19ba, 0x0088, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060,
-       0x6010, 0xa005, 0x0da0, 0x2068, 0x6808, 0x8000, 0x680a, 0x6c28,
-       0x6b2c, 0x080c, 0x19d5, 0x001e, 0x000e, 0x012e, 0x0005, 0x700c,
-@@ -505,9 +505,9 @@ unsigned short risc_code01[] = { 
-       0x0005, 0x0126, 0x2091, 0x2200, 0x7000, 0xa086, 0x0003, 0x1160,
-       0x700c, 0x7110, 0xa106, 0x0140, 0x080c, 0x295c, 0x20e1, 0x9028,
-       0x700f, 0xb82f, 0x7013, 0xb82f, 0x012e, 0x0005, 0x00c6, 0x080c,
--      0x5ad0, 0x11b8, 0x2001, 0x0160, 0x2003, 0x0000, 0x2001, 0x0138,
-+      0x5acf, 0x11b8, 0x2001, 0x0160, 0x2003, 0x0000, 0x2001, 0x0138,
-       0x2003, 0x0000, 0x2011, 0x00c8, 0xe000, 0xe000, 0x8211, 0x1de0,
--      0x04b1, 0x0066, 0x2031, 0x0000, 0x080c, 0x5b52, 0x006e, 0x00ce,
-+      0x04b1, 0x0066, 0x2031, 0x0000, 0x080c, 0x5b51, 0x006e, 0x00ce,
-       0x0005, 0x080c, 0x1e6e, 0x080c, 0x295c, 0x20e1, 0x9028, 0x700c,
-       0x7110, 0xa106, 0x01c0, 0x2104, 0xa005, 0x0130, 0x2060, 0x6010,
-       0x2060, 0x6008, 0x8001, 0x600a, 0xa188, 0x0003, 0xa182, 0xb84a,
-@@ -520,7 +520,7 @@ unsigned short risc_code01[] = { 
-       0x600a, 0xa188, 0x0003, 0xa182, 0xb84a, 0x0210, 0x2009, 0xb82f,
-       0x7112, 0x0c50, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x2001, 0x0138,
-       0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, 0x0000,
--      0x080c, 0x5ad0, 0x1148, 0x2021, 0x0002, 0x1d04, 0x1e7d, 0x2091,
-+      0x080c, 0x5acf, 0x1148, 0x2021, 0x0002, 0x1d04, 0x1e7d, 0x2091,
-       0x6000, 0x8421, 0x1dd0, 0x0005, 0x2021, 0xb015, 0x2001, 0x0141,
-       0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0xa39c, 0x0048,
-       0x1138, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421, 0x1d70,
-@@ -557,7 +557,7 @@ unsigned short risc_code01[] = { 
-       0x2079, 0x0010, 0x000e, 0x783e, 0x000e, 0x783a, 0x000e, 0x7836,
-       0x000e, 0x7832, 0x000e, 0x7822, 0x000e, 0x7802, 0x00fe, 0x00ee,
-       0x0030, 0x00fe, 0x00ee, 0x7804, 0xd0ac, 0x190c, 0x1515, 0x080c,
--      0x7231, 0x0005, 0x00e6, 0x2071, 0xb84a, 0x7003, 0x0000, 0x00ee,
-+      0x7230, 0x0005, 0x00e6, 0x2071, 0xb84a, 0x7003, 0x0000, 0x00ee,
-       0x0005, 0x00d6, 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x1904,
-       0x201f, 0x6934, 0xa184, 0x0007, 0x0002, 0x1fbd, 0x200a, 0x1fbd,
-       0x1fbd, 0x1fbd, 0x1ff1, 0x1fd0, 0x1fbf, 0x080c, 0x1515, 0x684c,
-@@ -604,12 +604,12 @@ unsigned short risc_code01[] = { 
-       0x002e, 0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c,
-       0x1515, 0x0026, 0x2001, 0x0105, 0x2003, 0x0010, 0x20e1, 0x9040,
-       0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x00d6, 0x6010,
--      0x2068, 0x080c, 0x9c54, 0x0118, 0x6850, 0xc0bd, 0x6852, 0x601c,
-+      0x2068, 0x080c, 0x9c5a, 0x0118, 0x6850, 0xc0bd, 0x6852, 0x601c,
-       0xa086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8, 0x2001, 0x00fa,
-       0x8001, 0x1df0, 0x60c8, 0xa206, 0x1dc0, 0x60c4, 0x686a, 0x60c8,
--      0x6866, 0x7004, 0x2060, 0x00de, 0x00c6, 0x080c, 0x9924, 0x00ce,
-+      0x6866, 0x7004, 0x2060, 0x00de, 0x00c6, 0x080c, 0x992a, 0x00ce,
-       0x2001, 0xb7ef, 0x2004, 0xac06, 0x1150, 0x20e1, 0x9040, 0x080c,
--      0x8257, 0x2011, 0x0000, 0x080c, 0x8080, 0x080c, 0x7231, 0x002e,
-+      0x825d, 0x2011, 0x0000, 0x080c, 0x807f, 0x080c, 0x7230, 0x002e,
-       0x0804, 0x2204, 0x0126, 0x2091, 0x2400, 0x0006, 0x0016, 0x00f6,
-       0x00e6, 0x00d6, 0x00c6, 0x2079, 0x0020, 0x2071, 0xb84a, 0x2b68,
-       0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x1904,
-@@ -637,7 +637,7 @@ unsigned short risc_code01[] = { 
-       0x001e, 0x000e, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, 0xb84a,
-       0x7000, 0xa086, 0x0000, 0x05d0, 0x2079, 0x0020, 0x0016, 0x2009,
-       0x0207, 0x210c, 0xd194, 0x0198, 0x2009, 0x020c, 0x210c, 0xa184,
--      0x0003, 0x0168, 0x080c, 0xb444, 0x2001, 0x0133, 0x2004, 0xa005,
-+      0x0003, 0x0168, 0x080c, 0xb450, 0x2001, 0x0133, 0x2004, 0xa005,
-       0x090c, 0x1515, 0x20e1, 0x9040, 0x2001, 0x020c, 0x2102, 0x2009,
-       0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0xa106, 0x1110, 0x20e1,
-       0x9040, 0x7804, 0xd0fc, 0x09d8, 0x080c, 0x214a, 0x7000, 0xa086,
-@@ -645,11 +645,11 @@ unsigned short risc_code01[] = { 
-       0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe,
-       0x0005, 0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0xb84a,
-       0x2079, 0x0020, 0x7000, 0xa086, 0x0000, 0x0540, 0x7004, 0x2060,
--      0x6010, 0x2068, 0x080c, 0x9c54, 0x0158, 0x6850, 0xc0b5, 0x6852,
-+      0x6010, 0x2068, 0x080c, 0x9c5a, 0x0158, 0x6850, 0xc0b5, 0x6852,
-       0x680c, 0x7a1c, 0xa206, 0x1120, 0x6808, 0x7a18, 0xa206, 0x01e0,
-       0x2001, 0x0105, 0x2003, 0x0010, 0x20e1, 0x9040, 0x7803, 0x0004,
--      0x7003, 0x0000, 0x7004, 0x2060, 0x080c, 0x9924, 0x20e1, 0x9040,
--      0x080c, 0x8257, 0x2011, 0x0000, 0x080c, 0x8080, 0x00fe, 0x00ee,
-+      0x7003, 0x0000, 0x7004, 0x2060, 0x080c, 0x992a, 0x20e1, 0x9040,
-+      0x080c, 0x825d, 0x2011, 0x0000, 0x080c, 0x807f, 0x00fe, 0x00ee,
-       0x00de, 0x00ce, 0x002e, 0x0005, 0x6810, 0x6a14, 0xa205, 0x1d00,
-       0x684c, 0xc0dc, 0x684e, 0x2c10, 0x080c, 0x1fa9, 0x2001, 0x0105,
-       0x2003, 0x0010, 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000,
-@@ -697,17 +697,17 @@ unsigned short risc_code01[] = { 
-       0x1f04, 0x23e6, 0x20e1, 0x9080, 0x783b, 0x001f, 0x20e1, 0x8700,
-       0x012e, 0x0005, 0x0126, 0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c,
-       0x24ad, 0xa084, 0x0007, 0x0002, 0x2416, 0x2404, 0x2407, 0x240a,
--      0x240f, 0x2411, 0x2413, 0x2415, 0x080c, 0x63c5, 0x0078, 0x080c,
--      0x6404, 0x0060, 0x080c, 0x63c5, 0x080c, 0x6404, 0x0038, 0x0041,
-+      0x240f, 0x2411, 0x2413, 0x2415, 0x080c, 0x63c4, 0x0078, 0x080c,
-+      0x6403, 0x0060, 0x080c, 0x63c4, 0x080c, 0x6403, 0x0038, 0x0041,
-       0x0028, 0x0031, 0x0018, 0x0021, 0x0008, 0x0011, 0x012e, 0x0005,
--      0x0006, 0x0016, 0x0026, 0x080c, 0xb444, 0x7930, 0xa184, 0x0003,
-+      0x0006, 0x0016, 0x0026, 0x080c, 0xb450, 0x7930, 0xa184, 0x0003,
-       0x01b0, 0x2001, 0xb7ef, 0x2004, 0xa005, 0x0170, 0x2001, 0x0133,
-       0x2004, 0xa005, 0x090c, 0x1515, 0x00c6, 0x2001, 0xb7ef, 0x2064,
--      0x080c, 0x9924, 0x00ce, 0x04b8, 0x20e1, 0x9040, 0x04a0, 0xa184,
-+      0x080c, 0x992a, 0x00ce, 0x04b8, 0x20e1, 0x9040, 0x04a0, 0xa184,
-       0x0030, 0x01e0, 0x6a00, 0xa286, 0x0003, 0x1108, 0x00a0, 0x080c,
--      0x5ad0, 0x1178, 0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500,
--      0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5b14, 0x080c, 0x5a08,
--      0x0010, 0x080c, 0x4b20, 0x080c, 0x24b0, 0x00a8, 0xa184, 0x00c0,
-+      0x5acf, 0x1178, 0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500,
-+      0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5b13, 0x080c, 0x5a07,
-+      0x0010, 0x080c, 0x4b1f, 0x080c, 0x24b0, 0x00a8, 0xa184, 0x00c0,
-       0x0168, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0xb823, 0x080c,
-       0x1dfe, 0x005e, 0x004e, 0x003e, 0x00ee, 0x0028, 0xa184, 0x0300,
-       0x0110, 0x20e1, 0x9020, 0x7932, 0x002e, 0x001e, 0x000e, 0x0005,
-@@ -735,93 +735,93 @@ unsigned short risc_code01[] = { 
-       0x0005, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x6124,
-       0xa184, 0x1e2c, 0x1118, 0xa184, 0x0007, 0x002a, 0xa195, 0x0004,
-       0xa284, 0x0007, 0x0002, 0x254d, 0x2533, 0x2536, 0x2539, 0x253e,
--      0x2540, 0x2544, 0x2548, 0x080c, 0x6b75, 0x00b8, 0x080c, 0x6c50,
--      0x00a0, 0x080c, 0x6c50, 0x080c, 0x6b75, 0x0078, 0x0099, 0x0068,
--      0x080c, 0x6b75, 0x0079, 0x0048, 0x080c, 0x6c50, 0x0059, 0x0028,
--      0x080c, 0x6c50, 0x080c, 0x6b75, 0x0029, 0x002e, 0x001e, 0x000e,
-+      0x2540, 0x2544, 0x2548, 0x080c, 0x6b74, 0x00b8, 0x080c, 0x6c4f,
-+      0x00a0, 0x080c, 0x6c4f, 0x080c, 0x6b74, 0x0078, 0x0099, 0x0068,
-+      0x080c, 0x6b74, 0x0079, 0x0048, 0x080c, 0x6c4f, 0x0059, 0x0028,
-+      0x080c, 0x6c4f, 0x080c, 0x6b74, 0x0029, 0x002e, 0x001e, 0x000e,
-       0x012e, 0x0005, 0x6124, 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904,
--      0x2766, 0x080c, 0x5ad0, 0x0578, 0x7000, 0xa086, 0x0003, 0x0198,
--      0x6024, 0xa084, 0x1800, 0x0178, 0x080c, 0x5af6, 0x0118, 0x080c,
--      0x5ae2, 0x1148, 0x6027, 0x0020, 0x6043, 0x0000, 0x2001, 0xb79e,
--      0x2003, 0xaaaa, 0x0458, 0x080c, 0x5af6, 0x15d0, 0x6024, 0xa084,
-+      0x2766, 0x080c, 0x5acf, 0x0578, 0x7000, 0xa086, 0x0003, 0x0198,
-+      0x6024, 0xa084, 0x1800, 0x0178, 0x080c, 0x5af5, 0x0118, 0x080c,
-+      0x5ae1, 0x1148, 0x6027, 0x0020, 0x6043, 0x0000, 0x2001, 0xb79e,
-+      0x2003, 0xaaaa, 0x0458, 0x080c, 0x5af5, 0x15d0, 0x6024, 0xa084,
-       0x1800, 0x1108, 0x04a8, 0x2001, 0xb79e, 0x2003, 0xaaaa, 0x2001,
-       0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003, 0x0001, 0x080c,
--      0x5a08, 0x0804, 0x2766, 0xd1ac, 0x1518, 0x6024, 0xd0dc, 0x1170,
-+      0x5a07, 0x0804, 0x2766, 0xd1ac, 0x1518, 0x6024, 0xd0dc, 0x1170,
-       0xd0e4, 0x1188, 0xd0d4, 0x11a0, 0xd0cc, 0x0130, 0x708c, 0xa086,
--      0x0028, 0x1110, 0x080c, 0x5c5f, 0x0804, 0x2766, 0x2001, 0xb79f,
-+      0x0028, 0x1110, 0x080c, 0x5c5e, 0x0804, 0x2766, 0x2001, 0xb79f,
-       0x2003, 0x0000, 0x0048, 0x2001, 0xb79f, 0x2003, 0x0002, 0x0020,
--      0x080c, 0x5bd2, 0x0804, 0x2766, 0x080c, 0x5d04, 0x0804, 0x2766,
--      0xd1ac, 0x0904, 0x26ae, 0x080c, 0x5ad0, 0x11d8, 0x6027, 0x0020,
--      0x0006, 0x0026, 0x0036, 0x080c, 0x5aec, 0x1170, 0x2001, 0xb79f,
--      0x2003, 0x0001, 0x2001, 0xb500, 0x2003, 0x0001, 0x080c, 0x5a08,
-+      0x080c, 0x5bd1, 0x0804, 0x2766, 0x080c, 0x5d03, 0x0804, 0x2766,
-+      0xd1ac, 0x0904, 0x26ae, 0x080c, 0x5acf, 0x11d8, 0x6027, 0x0020,
-+      0x0006, 0x0026, 0x0036, 0x080c, 0x5aeb, 0x1170, 0x2001, 0xb79f,
-+      0x2003, 0x0001, 0x2001, 0xb500, 0x2003, 0x0001, 0x080c, 0x5a07,
-       0x003e, 0x002e, 0x000e, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c,
--      0x5aa7, 0x0016, 0x0046, 0x00c6, 0x644c, 0xa486, 0xf0f0, 0x1138,
-+      0x5aa6, 0x0016, 0x0046, 0x00c6, 0x644c, 0xa486, 0xf0f0, 0x1138,
-       0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74ce,
-       0xa48c, 0xff00, 0x7034, 0xd084, 0x0178, 0xa186, 0xf800, 0x1160,
-       0x703c, 0xd084, 0x1148, 0xc085, 0x703e, 0x0036, 0x2418, 0x2011,
--      0x8016, 0x080c, 0x3ecd, 0x003e, 0xa196, 0xff00, 0x05b8, 0x7054,
-+      0x8016, 0x080c, 0x3ecc, 0x003e, 0xa196, 0xff00, 0x05b8, 0x7054,
-       0xa084, 0x00ff, 0x810f, 0xa116, 0x0588, 0x7130, 0xd184, 0x1570,
-       0x2011, 0xb553, 0x2214, 0xd2ec, 0x0138, 0xc18d, 0x7132, 0x2011,
-       0xb553, 0x2214, 0xd2ac, 0x1510, 0x6240, 0xa294, 0x0010, 0x0130,
-       0x6248, 0xa294, 0xff00, 0xa296, 0xff00, 0x01c0, 0x7030, 0xd08c,
-       0x0904, 0x267b, 0x7034, 0xd08c, 0x1140, 0x2001, 0xb50c, 0x200c,
-       0xd1ac, 0x1904, 0x267b, 0xc1ad, 0x2102, 0x0036, 0x73cc, 0x2011,
--      0x8013, 0x080c, 0x3ecd, 0x003e, 0x0804, 0x267b, 0x7034, 0xd08c,
-+      0x8013, 0x080c, 0x3ecc, 0x003e, 0x0804, 0x267b, 0x7034, 0xd08c,
-       0x1140, 0x2001, 0xb50c, 0x200c, 0xd1ac, 0x1904, 0x267b, 0xc1ad,
--      0x2102, 0x0036, 0x73cc, 0x2011, 0x8013, 0x080c, 0x3ecd, 0x003e,
-+      0x2102, 0x0036, 0x73cc, 0x2011, 0x8013, 0x080c, 0x3ecc, 0x003e,
-       0x7130, 0xc185, 0x7132, 0x2011, 0xb553, 0x220c, 0xd1a4, 0x01d0,
--      0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x6b1b, 0x2019,
--      0x000e, 0x080c, 0xb059, 0xa484, 0x00ff, 0xa080, 0x2dc4, 0x200d,
-+      0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x6b1a, 0x2019,
-+      0x000e, 0x080c, 0xb065, 0xa484, 0x00ff, 0xa080, 0x2dc4, 0x200d,
-       0xa18c, 0xff00, 0x810f, 0x8127, 0xa006, 0x2009, 0x000e, 0x080c,
--      0xb0dc, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0000, 0x2019,
-+      0xb0e8, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0000, 0x2019,
-       0x0004, 0x080c, 0x2c6f, 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f,
--      0x2009, 0x0000, 0x080c, 0x4faa, 0x1110, 0x080c, 0x4c0c, 0x8108,
-+      0x2009, 0x0000, 0x080c, 0x4fa9, 0x1110, 0x080c, 0x4c0b, 0x8108,
-       0x1f04, 0x2672, 0x015e, 0x00ce, 0x004e, 0x2011, 0x0003, 0x080c,
--      0x8076, 0x2011, 0x0002, 0x080c, 0x8080, 0x080c, 0x7f5a, 0x0036,
--      0x2019, 0x0000, 0x080c, 0x7fe5, 0x003e, 0x60e3, 0x0000, 0x001e,
-+      0x8075, 0x2011, 0x0002, 0x080c, 0x807f, 0x080c, 0x7f59, 0x0036,
-+      0x2019, 0x0000, 0x080c, 0x7fe4, 0x003e, 0x60e3, 0x0000, 0x001e,
-       0x2001, 0xb500, 0x2014, 0xa296, 0x0004, 0x1128, 0xd19c, 0x11b0,
-       0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0xb523, 0x2003,
--      0x0000, 0x6027, 0x0020, 0x080c, 0x5af6, 0x1140, 0x0016, 0x2009,
--      0x07d0, 0x2011, 0x59e5, 0x080c, 0x6a23, 0x001e, 0xd194, 0x0904,
--      0x2766, 0x0016, 0x6220, 0xd2b4, 0x0904, 0x2717, 0x080c, 0x6a11,
--      0x080c, 0x7d7b, 0x6027, 0x0004, 0x00f6, 0x2019, 0xb7e9, 0x2304,
-+      0x0000, 0x6027, 0x0020, 0x080c, 0x5af5, 0x1140, 0x0016, 0x2009,
-+      0x07d0, 0x2011, 0x59e4, 0x080c, 0x6a22, 0x001e, 0xd194, 0x0904,
-+      0x2766, 0x0016, 0x6220, 0xd2b4, 0x0904, 0x2717, 0x080c, 0x6a10,
-+      0x080c, 0x7d7a, 0x6027, 0x0004, 0x00f6, 0x2019, 0xb7e9, 0x2304,
-       0xa07d, 0x0570, 0x7804, 0xa086, 0x0032, 0x1550, 0x00d6, 0x00c6,
-       0x00e6, 0x2069, 0x0140, 0x618c, 0x6288, 0x7818, 0x608e, 0x7808,
-       0x608a, 0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043,
-       0x0000, 0x6803, 0x1000, 0x6803, 0x0000, 0x618e, 0x628a, 0x080c,
--      0x7091, 0x080c, 0x7174, 0x7810, 0x2070, 0x7037, 0x0103, 0x2f60,
--      0x080c, 0x8617, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x0005,
-+      0x7090, 0x080c, 0x7173, 0x7810, 0x2070, 0x7037, 0x0103, 0x2f60,
-+      0x080c, 0x861d, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x0005,
-       0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0120,
-       0x6803, 0x1000, 0x6803, 0x0000, 0x00de, 0x00c6, 0x2061, 0xb7e0,
-       0x6028, 0xa09a, 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c,
--      0x7d6e, 0x0804, 0x2765, 0x2019, 0xb7e9, 0x2304, 0xa065, 0x0120,
--      0x2009, 0x0027, 0x080c, 0x8646, 0x00ce, 0x0804, 0x2765, 0xd2bc,
--      0x0904, 0x2765, 0x080c, 0x6a1e, 0x6014, 0xa084, 0x0184, 0xa085,
-+      0x7d6d, 0x0804, 0x2765, 0x2019, 0xb7e9, 0x2304, 0xa065, 0x0120,
-+      0x2009, 0x0027, 0x080c, 0x864c, 0x00ce, 0x0804, 0x2765, 0xd2bc,
-+      0x0904, 0x2765, 0x080c, 0x6a1d, 0x6014, 0xa084, 0x0184, 0xa085,
-       0x0010, 0x6016, 0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804,
-       0xa084, 0x4000, 0x0120, 0x6803, 0x1000, 0x6803, 0x0000, 0x00de,
-       0x00c6, 0x2061, 0xb7e0, 0x6044, 0xa09a, 0x00c8, 0x12f0, 0x8000,
-       0x6046, 0x603c, 0x00ce, 0xa005, 0x0540, 0x2009, 0x07d0, 0x080c,
--      0x6a16, 0xa080, 0x0007, 0x2004, 0xa086, 0x0006, 0x1138, 0x6114,
-+      0x6a15, 0xa080, 0x0007, 0x2004, 0xa086, 0x0006, 0x1138, 0x6114,
-       0xa18c, 0x0184, 0xa18d, 0x0012, 0x6116, 0x00b8, 0x6114, 0xa18c,
-       0x0184, 0xa18d, 0x0016, 0x6116, 0x0080, 0x0036, 0x2019, 0x0001,
--      0x080c, 0x7fe5, 0x003e, 0x2019, 0xb7ef, 0x2304, 0xa065, 0x0120,
--      0x2009, 0x004f, 0x080c, 0x8646, 0x00ce, 0x001e, 0xd19c, 0x0904,
-+      0x080c, 0x7fe4, 0x003e, 0x2019, 0xb7ef, 0x2304, 0xa065, 0x0120,
-+      0x2009, 0x004f, 0x080c, 0x864c, 0x00ce, 0x001e, 0xd19c, 0x0904,
-       0x27bf, 0x7034, 0xd0ac, 0x1560, 0x0016, 0x0156, 0x6027, 0x0008,
-       0x602f, 0x0020, 0x20a9, 0x0006, 0x1d04, 0x2774, 0x2091, 0x6000,
-       0x1f04, 0x2774, 0x602f, 0x0000, 0x6150, 0xa185, 0x1400, 0x6052,
-       0x20a9, 0x0366, 0x1d04, 0x2782, 0x2091, 0x6000, 0x6020, 0xd09c,
-       0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0480, 0x080c,
-       0x2907, 0x1f04, 0x2782, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008,
--      0x0016, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x8076,
--      0x2011, 0x0002, 0x080c, 0x8080, 0x080c, 0x7f5a, 0x0036, 0x2019,
--      0x0000, 0x080c, 0x7fe5, 0x003e, 0x60e3, 0x0000, 0x080c, 0xb423,
--      0x080c, 0xb43e, 0xa085, 0x0001, 0x080c, 0x5b14, 0x2001, 0xb500,
-+      0x0016, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x8075,
-+      0x2011, 0x0002, 0x080c, 0x807f, 0x080c, 0x7f59, 0x0036, 0x2019,
-+      0x0000, 0x080c, 0x7fe4, 0x003e, 0x60e3, 0x0000, 0x080c, 0xb42f,
-+      0x080c, 0xb44a, 0xa085, 0x0001, 0x080c, 0x5b13, 0x2001, 0xb500,
-       0x2003, 0x0004, 0x6027, 0x0008, 0x080c, 0x12dd, 0x001e, 0xa18c,
-       0xffd0, 0x6126, 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6,
-       0x0126, 0x2091, 0x8000, 0x2071, 0xb500, 0x71c4, 0x70c6, 0xa116,
--      0x0500, 0x81ff, 0x0128, 0x2011, 0x8011, 0x080c, 0x3ecd, 0x00c8,
--      0x2011, 0x8012, 0x080c, 0x3ecd, 0x2001, 0xb572, 0x2004, 0xd0fc,
--      0x1180, 0x0036, 0x00c6, 0x080c, 0x2892, 0x080c, 0x7f36, 0x2061,
-+      0x0500, 0x81ff, 0x0128, 0x2011, 0x8011, 0x080c, 0x3ecc, 0x00c8,
-+      0x2011, 0x8012, 0x080c, 0x3ecc, 0x2001, 0xb572, 0x2004, 0xd0fc,
-+      0x1180, 0x0036, 0x00c6, 0x080c, 0x2892, 0x080c, 0x7f35, 0x2061,
-       0x0100, 0x2019, 0x0028, 0x2009, 0x0000, 0x080c, 0x2c6f, 0x00ce,
-       0x003e, 0x012e, 0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e, 0x0005,
-       0x00c6, 0x00f6, 0x0006, 0x0026, 0x2061, 0x0100, 0xa190, 0x280b,
-@@ -829,14 +829,14 @@ unsigned short risc_code01[] = { 
-       0x00fe, 0x00ce, 0x0005, 0x0840, 0x0840, 0x0840, 0x0580, 0x0420,
-       0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8, 0x01a8, 0x01a8,
-       0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0x2028, 0xa18c, 0x00ff,
--      0x2130, 0xa094, 0xff00, 0x1110, 0x81ff, 0x0118, 0x080c, 0x66b2,
-+      0x2130, 0xa094, 0xff00, 0x1110, 0x81ff, 0x0118, 0x080c, 0x66b1,
-       0x0038, 0xa080, 0x2dc4, 0x200d, 0xa18c, 0xff00, 0x810f, 0xa006,
-       0x0005, 0xa080, 0x2dc4, 0x200d, 0xa18c, 0x00ff, 0x0005, 0x00d6,
-       0x2069, 0x0140, 0x2001, 0xb515, 0x2003, 0x00ef, 0x20a9, 0x0010,
-       0xa006, 0x6852, 0x6856, 0x1f04, 0x2842, 0x00de, 0x0005, 0x0006,
-       0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0xb515, 0x2102, 0x8114,
-       0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0xa006,
--      0x82ff, 0x1128, 0xa184, 0x000f, 0xa080, 0xb452, 0x2005, 0x6856,
-+      0x82ff, 0x1128, 0xa184, 0x000f, 0xa080, 0xb45e, 0x2005, 0x6856,
-       0x8211, 0x1f04, 0x2857, 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6,
-       0x2061, 0xb500, 0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032,
-       0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069,
-@@ -844,13 +844,13 @@ unsigned short risc_code01[] = { 
-       0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e,
-       0x1f04, 0x2887, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de,
-       0x015e, 0x0005, 0x2001, 0xb553, 0x2004, 0xd0c4, 0x0150, 0xd0a4,
--      0x0140, 0xa006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xb0dc,
-+      0x0140, 0xa006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xb0e8,
-       0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4,
-       0xd0dc, 0x0548, 0xa084, 0x0700, 0xa08e, 0x0300, 0x1520, 0x2011,
-       0x0000, 0x2009, 0x0002, 0x2300, 0xa080, 0x0020, 0x2018, 0x2300,
--      0x080c, 0x6b41, 0x2011, 0x0030, 0x2200, 0x8007, 0xa085, 0x004c,
-+      0x080c, 0x6b40, 0x2011, 0x0030, 0x2200, 0x8007, 0xa085, 0x004c,
-       0x78c2, 0x2009, 0x0204, 0x210c, 0x2200, 0xa100, 0x2009, 0x0138,
--      0x200a, 0x080c, 0x5ad0, 0x1118, 0x2009, 0xb78f, 0x200a, 0x002e,
-+      0x200a, 0x080c, 0x5acf, 0x1118, 0x2009, 0xb78f, 0x200a, 0x002e,
-       0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091,
-       0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170, 0x200c, 0x8000,
-       0x2014, 0xa184, 0x0003, 0x0110, 0x0804, 0x1b04, 0x002e, 0x001e,
-@@ -912,10 +912,10 @@ unsigned short risc_code01[] = { 
-       0x23f2, 0x0098, 0x0106, 0x0006, 0x080c, 0x28d6, 0x080c, 0x2519,
-       0x080c, 0x239c, 0x080c, 0x23f2, 0x0040, 0x20d1, 0x0000, 0x20d1,
-       0x0001, 0x20d1, 0x0000, 0x080c, 0x1515, 0x000e, 0x010e, 0x000d,
--      0x00c6, 0x0026, 0x0046, 0x2021, 0x0000, 0x080c, 0x530a, 0x1904,
-+      0x00c6, 0x0026, 0x0046, 0x2021, 0x0000, 0x080c, 0x5309, 0x1904,
-       0x2b95, 0x72d4, 0x2001, 0xb79e, 0x2004, 0xa005, 0x1110, 0xd29c,
-       0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, 0x2b95, 0x080c, 0x2b99,
--      0x0804, 0x2b95, 0xd2cc, 0x1904, 0x2b95, 0x080c, 0x5ad0, 0x1120,
-+      0x0804, 0x2b95, 0xd2cc, 0x1904, 0x2b95, 0x080c, 0x5acf, 0x1120,
-       0x709f, 0xffff, 0x0804, 0x2b95, 0xd294, 0x0120, 0x709f, 0xffff,
-       0x0804, 0x2b95, 0x2001, 0xb515, 0x203c, 0x7288, 0xd284, 0x0904,
-       0x2b37, 0xd28c, 0x1904, 0x2b37, 0x0036, 0x739c, 0xa38e, 0xffff,
-@@ -923,7 +923,7 @@ unsigned short risc_code01[] = { 
-       0x0001, 0x0120, 0xa084, 0xff00, 0x8007, 0x0010, 0xa084, 0x00ff,
-       0xa70e, 0x0560, 0xa08e, 0x0000, 0x0548, 0xa08e, 0x00ff, 0x1150,
-       0x7230, 0xd284, 0x1538, 0x7288, 0xc28d, 0x728a, 0x709f, 0xffff,
--      0x003e, 0x0428, 0x2009, 0x0000, 0x080c, 0x281d, 0x080c, 0x4f4e,
-+      0x003e, 0x0428, 0x2009, 0x0000, 0x080c, 0x281d, 0x080c, 0x4f4d,
-       0x11b8, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1150, 0x7030,
-       0xd08c, 0x0118, 0x6000, 0xd0bc, 0x0120, 0x080c, 0x2bac, 0x0140,
-       0x0028, 0x080c, 0x2cdd, 0x080c, 0x2bda, 0x0110, 0x8318, 0x0818,
-@@ -932,51 +932,51 @@ unsigned short risc_code01[] = { 
-       0xa096, 0xffff, 0x1120, 0x2009, 0x0000, 0x28a8, 0x0050, 0xa812,
-       0x0220, 0x2008, 0xa802, 0x20a8, 0x0020, 0x709f, 0xffff, 0x0804,
-       0x2b95, 0x2700, 0x0156, 0x0016, 0xa106, 0x05a0, 0xc484, 0x080c,
--      0x4faa, 0x0120, 0x080c, 0x4f4e, 0x15a8, 0x0008, 0xc485, 0x6004,
-+      0x4fa9, 0x0120, 0x080c, 0x4f4d, 0x15a8, 0x0008, 0xc485, 0x6004,
-       0xa084, 0x00ff, 0xa086, 0x0006, 0x1130, 0x7030, 0xd08c, 0x01e8,
-       0x6000, 0xd0bc, 0x11d0, 0x7288, 0xd28c, 0x0188, 0x6004, 0xa084,
--      0x00ff, 0xa082, 0x0006, 0x02b0, 0xd484, 0x1118, 0x080c, 0x4f6d,
-+      0x00ff, 0xa082, 0x0006, 0x02b0, 0xd484, 0x1118, 0x080c, 0x4f6c,
-       0x0028, 0x080c, 0x2d6a, 0x0170, 0x080c, 0x2d97, 0x0058, 0x080c,
-       0x2cdd, 0x080c, 0x2bda, 0x0170, 0x0028, 0x080c, 0x2d6a, 0x0110,
-       0x0419, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04, 0x2b51, 0x709f,
-       0xffff, 0x0018, 0x001e, 0x015e, 0x719e, 0x004e, 0x002e, 0x00ce,
-       0x0005, 0x00c6, 0x0016, 0x709f, 0x0001, 0x2009, 0x007e, 0x080c,
--      0x4f4e, 0x1138, 0x080c, 0x2cdd, 0x04a9, 0x0118, 0x70d4, 0xc0bd,
-+      0x4f4d, 0x1138, 0x080c, 0x2cdd, 0x04a9, 0x0118, 0x70d4, 0xc0bd,
-       0x70d6, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
-       0x2c68, 0x2001, 0xb557, 0x2004, 0xa084, 0x00ff, 0x6842, 0x080c,
--      0x9ed0, 0x01d8, 0x2d00, 0x601a, 0x080c, 0xa021, 0x601f, 0x0001,
--      0x2001, 0x0000, 0x080c, 0x4eec, 0x2001, 0x0000, 0x080c, 0x4efe,
-+      0x9ed6, 0x01d8, 0x2d00, 0x601a, 0x080c, 0xa027, 0x601f, 0x0001,
-+      0x2001, 0x0000, 0x080c, 0x4eeb, 0x2001, 0x0000, 0x080c, 0x4efd,
-       0x0126, 0x2091, 0x8000, 0x7098, 0x8000, 0x709a, 0x012e, 0x2009,
--      0x0004, 0x080c, 0x8646, 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e,
-+      0x0004, 0x080c, 0x864c, 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e,
-       0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x2001,
--      0xb557, 0x2004, 0xa084, 0x00ff, 0x6842, 0x080c, 0x9ed0, 0x0550,
-+      0xb557, 0x2004, 0xa084, 0x00ff, 0x6842, 0x080c, 0x9ed6, 0x0550,
-       0x2d00, 0x601a, 0x6800, 0xc0c4, 0x6802, 0x68a0, 0xa086, 0x007e,
-       0x0140, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1110, 0x080c,
--      0x2c9c, 0x080c, 0xa021, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c,
--      0x4eec, 0x2001, 0x0002, 0x080c, 0x4efe, 0x0126, 0x2091, 0x8000,
--      0x7098, 0x8000, 0x709a, 0x012e, 0x2009, 0x0002, 0x080c, 0x8646,
-+      0x2c9c, 0x080c, 0xa027, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c,
-+      0x4eeb, 0x2001, 0x0002, 0x080c, 0x4efd, 0x0126, 0x2091, 0x8000,
-+      0x7098, 0x8000, 0x709a, 0x012e, 0x2009, 0x0002, 0x080c, 0x864c,
-       0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6,
--      0x0026, 0x2009, 0x0080, 0x080c, 0x4f4e, 0x1120, 0x0031, 0x0110,
-+      0x0026, 0x2009, 0x0080, 0x080c, 0x4f4d, 0x1120, 0x0031, 0x0110,
-       0x70db, 0xffff, 0x002e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6,
--      0x00c6, 0x2c68, 0x080c, 0x85c1, 0x01e8, 0x2d00, 0x601a, 0x080c,
--      0xa021, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x4eec, 0x2001,
--      0x0002, 0x080c, 0x4efe, 0x0126, 0x2091, 0x8000, 0x080c, 0x2c9c,
--      0x70dc, 0x8000, 0x70de, 0x012e, 0x2009, 0x0002, 0x080c, 0x8646,
-+      0x00c6, 0x2c68, 0x080c, 0x85c7, 0x01e8, 0x2d00, 0x601a, 0x080c,
-+      0xa027, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x4eeb, 0x2001,
-+      0x0002, 0x080c, 0x4efd, 0x0126, 0x2091, 0x8000, 0x080c, 0x2c9c,
-+      0x70dc, 0x8000, 0x70de, 0x012e, 0x2009, 0x0002, 0x080c, 0x864c,
-       0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6,
--      0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x4f4e,
--      0x1190, 0x2c68, 0x080c, 0x85c1, 0x0170, 0x2d00, 0x601a, 0x6312,
--      0x601f, 0x0001, 0x620a, 0x080c, 0xa021, 0x2009, 0x0022, 0x080c,
--      0x8646, 0xa085, 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6,
--      0x00c6, 0x0066, 0x0036, 0x0026, 0x080c, 0x6e02, 0x080c, 0x6da5,
--      0x080c, 0x9069, 0x2130, 0x81ff, 0x0128, 0x20a9, 0x007e, 0x2009,
-+      0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x4f4d,
-+      0x1190, 0x2c68, 0x080c, 0x85c7, 0x0170, 0x2d00, 0x601a, 0x6312,
-+      0x601f, 0x0001, 0x620a, 0x080c, 0xa027, 0x2009, 0x0022, 0x080c,
-+      0x864c, 0xa085, 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6,
-+      0x00c6, 0x0066, 0x0036, 0x0026, 0x080c, 0x6e01, 0x080c, 0x6da4,
-+      0x080c, 0x906f, 0x2130, 0x81ff, 0x0128, 0x20a9, 0x007e, 0x2009,
-       0x0000, 0x0020, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c,
--      0x4faa, 0x1120, 0x080c, 0x51ab, 0x080c, 0x4c0c, 0x001e, 0x8108,
-+      0x4fa9, 0x1120, 0x080c, 0x51aa, 0x080c, 0x4c0b, 0x001e, 0x8108,
-       0x1f04, 0x2c86, 0x86ff, 0x1110, 0x080c, 0x11f0, 0x002e, 0x003e,
-       0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0026,
-       0x0016, 0x6218, 0x2270, 0x72a0, 0x0026, 0x2019, 0x0029, 0x080c,
--      0x6df6, 0x0076, 0x2039, 0x0000, 0x080c, 0x6d03, 0x2c08, 0x080c,
--      0xae76, 0x007e, 0x001e, 0x2e60, 0x080c, 0x51ab, 0x6210, 0x6314,
--      0x080c, 0x4c0c, 0x6212, 0x6316, 0x001e, 0x002e, 0x003e, 0x00ce,
-+      0x6df5, 0x0076, 0x2039, 0x0000, 0x080c, 0x6d02, 0x2c08, 0x080c,
-+      0xae82, 0x007e, 0x001e, 0x2e60, 0x080c, 0x51aa, 0x6210, 0x6314,
-+      0x080c, 0x4c0b, 0x6212, 0x6316, 0x001e, 0x002e, 0x003e, 0x00ce,
-       0x00ee, 0x0005, 0x00e6, 0x0006, 0x6018, 0xa080, 0x0028, 0x2004,
-       0xa086, 0x0080, 0x0150, 0x2071, 0xb500, 0x7098, 0xa005, 0x0110,
-       0x8001, 0x709a, 0x000e, 0x00ee, 0x0005, 0x2071, 0xb500, 0x70dc,
-@@ -984,20 +984,20 @@ unsigned short risc_code01[] = { 
-       0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x0156,
-       0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0098, 0x2001, 0xb553,
-       0x2004, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0xa006, 0x0046, 0x2020,
--      0x2009, 0x002d, 0x080c, 0xb0dc, 0x004e, 0x20a9, 0x00ff, 0x2011,
-+      0x2009, 0x002d, 0x080c, 0xb0e8, 0x004e, 0x20a9, 0x00ff, 0x2011,
-       0x0000, 0x0026, 0xa28e, 0x007e, 0x0904, 0x2d49, 0xa28e, 0x007f,
-       0x0904, 0x2d49, 0xa28e, 0x0080, 0x05e0, 0xa288, 0xb635, 0x210c,
-       0x81ff, 0x05b8, 0x8fff, 0x1148, 0x2001, 0xb7be, 0x0006, 0x2003,
-       0x0001, 0x04d9, 0x000e, 0x2003, 0x0000, 0x00c6, 0x2160, 0x2001,
--      0x0001, 0x080c, 0x5314, 0x00ce, 0x2019, 0x0029, 0x080c, 0x6df6,
--      0x0076, 0x2039, 0x0000, 0x080c, 0x6d03, 0x00c6, 0x0026, 0x2160,
-+      0x0001, 0x080c, 0x5313, 0x00ce, 0x2019, 0x0029, 0x080c, 0x6df5,
-+      0x0076, 0x2039, 0x0000, 0x080c, 0x6d02, 0x00c6, 0x0026, 0x2160,
-       0x6204, 0xa294, 0x00ff, 0xa286, 0x0006, 0x1118, 0x6007, 0x0404,
-       0x0028, 0x2001, 0x0004, 0x8007, 0xa215, 0x6206, 0x002e, 0x00ce,
--      0x0016, 0x2c08, 0x080c, 0xae76, 0x001e, 0x007e, 0x2160, 0x080c,
--      0x51ab, 0x002e, 0x8210, 0x1f04, 0x2d01, 0x015e, 0x001e, 0x002e,
-+      0x0016, 0x2c08, 0x080c, 0xae82, 0x001e, 0x007e, 0x2160, 0x080c,
-+      0x51aa, 0x002e, 0x8210, 0x1f04, 0x2d01, 0x015e, 0x001e, 0x002e,
-       0x003e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016,
-       0x2001, 0xb553, 0x2004, 0xd0c4, 0x0148, 0xd0a4, 0x0138, 0xa006,
--      0x2220, 0x8427, 0x2009, 0x0029, 0x080c, 0xb0dc, 0x001e, 0x002e,
-+      0x2220, 0x8427, 0x2009, 0x0029, 0x080c, 0xb0e8, 0x001e, 0x002e,
-       0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7288, 0x82ff,
-       0x01f8, 0x2011, 0xb553, 0x2214, 0xd2ac, 0x11d0, 0x2100, 0x080c,
-       0x2831, 0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314, 0xa2e0, 0xbcc0,
-@@ -1005,10 +1005,10 @@ unsigned short risc_code01[] = { 
-       0x00ff, 0xa116, 0x0138, 0xa096, 0x00ff, 0x0110, 0x8318, 0x0c68,
-       0xa085, 0x0001, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0016,
-       0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, 0x0026, 0x0036, 0x2110,
--      0x0026, 0x2019, 0x0029, 0x080c, 0x8293, 0x002e, 0x080c, 0xb381,
-+      0x0026, 0x2019, 0x0029, 0x080c, 0x8299, 0x002e, 0x080c, 0xb38d,
-       0x003e, 0x002e, 0x001e, 0xa180, 0xb635, 0x2004, 0xa065, 0x0158,
-       0x0016, 0x00c6, 0x2061, 0xb8f4, 0x001e, 0x611a, 0x080c, 0x2c9c,
--      0x001e, 0x080c, 0x4f6d, 0x012e, 0x00ce, 0x001e, 0x0005, 0x2001,
-+      0x001e, 0x080c, 0x4f6c, 0x012e, 0x00ce, 0x001e, 0x0005, 0x2001,
-       0xb535, 0x2004, 0xd0cc, 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2,
-       0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4,
-       0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca,
-@@ -1063,89 +1063,89 @@ unsigned short risc_code01[] = { 
-       0x2fc6, 0x2fc6, 0x3282, 0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6,
-       0x3294, 0x329e, 0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6,
-       0x0002, 0x32c8, 0x331c, 0x3377, 0x3391, 0x2fc6, 0x33c2, 0x37f5,
--      0x4234, 0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6,
--      0x2fc6, 0x300c, 0x300f, 0x37f7, 0x2fc6, 0x3804, 0x42cd, 0x4328,
--      0x438c, 0x2fc6, 0x43ef, 0x4419, 0x4438, 0x446a, 0x2fc6, 0x2fc6,
-+      0x4233, 0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6,
-+      0x2fc6, 0x300c, 0x300f, 0x37f7, 0x2fc6, 0x3804, 0x42cc, 0x4327,
-+      0x438b, 0x2fc6, 0x43ee, 0x4418, 0x4437, 0x4469, 0x2fc6, 0x2fc6,
-       0x2fc6, 0x3808, 0x39ad, 0x39c7, 0x39e5, 0x3a46, 0x3aa6, 0x3ab1,
--      0x3ae9, 0x3af8, 0x3b07, 0x3b0a, 0x3b2d, 0x3b77, 0x3bed, 0x3bfa,
--      0x3cfb, 0x3e24, 0x3e4d, 0x3f4b, 0x3f6d, 0x3f79, 0x3fb2, 0x4076,
--      0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6, 0x40de, 0x40f9, 0x416b, 0x421d,
--      0x713c, 0x0000, 0x2021, 0x4000, 0x080c, 0x3eaa, 0x0126, 0x2091,
-+      0x3ae9, 0x3af8, 0x3b07, 0x3b0a, 0x3b2d, 0x3b79, 0x3bef, 0x3bfc,
-+      0x3cfd, 0x3e23, 0x3e4c, 0x3f4a, 0x3f6c, 0x3f78, 0x3fb1, 0x4075,
-+      0x2fc6, 0x2fc6, 0x2fc6, 0x2fc6, 0x40dd, 0x40f8, 0x416a, 0x421c,
-+      0x713c, 0x0000, 0x2021, 0x4000, 0x080c, 0x3ea9, 0x0126, 0x2091,
-       0x8000, 0x0e04, 0x2fb6, 0x7818, 0xd084, 0x0110, 0x012e, 0x0cb0,
-       0x7c22, 0x7926, 0x7a2a, 0x7b2e, 0x781b, 0x0001, 0x2091, 0x4080,
-       0x7007, 0x0001, 0x2091, 0x5000, 0x012e, 0x0005, 0x2021, 0x4001,
-       0x0c18, 0x2021, 0x4002, 0x0c00, 0x2021, 0x4003, 0x08e8, 0x2021,
-       0x4005, 0x08d0, 0x2021, 0x4006, 0x08b8, 0xa02e, 0x2520, 0x7b28,
--      0x7a2c, 0x7824, 0x7930, 0x0804, 0x3eb7, 0x7823, 0x0004, 0x7824,
-+      0x7a2c, 0x7824, 0x7930, 0x0804, 0x3eb6, 0x7823, 0x0004, 0x7824,
-       0x0807, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0804,
--      0x3eba, 0x7924, 0x7828, 0x2114, 0x200a, 0x0804, 0x2faa, 0x7924,
-+      0x3eb9, 0x7924, 0x7828, 0x2114, 0x200a, 0x0804, 0x2faa, 0x7924,
-       0x2114, 0x0804, 0x2faa, 0x2099, 0x0009, 0x20a1, 0x0009, 0x20a9,
-       0x0007, 0x53a3, 0x7924, 0x7a28, 0x7b2c, 0x0804, 0x2faa, 0x7824,
--      0x2060, 0x0090, 0x2009, 0x0002, 0x2011, 0x0002, 0x2019, 0x0004,
-+      0x2060, 0x0090, 0x2009, 0x0002, 0x2011, 0x0002, 0x2019, 0x0006,
-       0x783b, 0x0017, 0x0804, 0x2faa, 0x7d38, 0x7c3c, 0x0840, 0x7d38,
-       0x7c3c, 0x0888, 0x2061, 0x1000, 0xe10c, 0xa006, 0x2c15, 0xa200,
-       0x8c60, 0x8109, 0x1dd8, 0x2010, 0xa005, 0x0904, 0x2faa, 0x0804,
-       0x2fcc, 0x2069, 0xb552, 0x7824, 0x7930, 0xa11a, 0x1a04, 0x2fd2,
-       0x8019, 0x0904, 0x2fd2, 0x684a, 0x6942, 0x782c, 0x6852, 0x7828,
--      0x6856, 0xa006, 0x685a, 0x685e, 0x080c, 0x5da6, 0x0804, 0x2faa,
-+      0x6856, 0xa006, 0x685a, 0x685e, 0x080c, 0x5da5, 0x0804, 0x2faa,
-       0x2069, 0xb552, 0x7824, 0x7934, 0xa11a, 0x1a04, 0x2fd2, 0x8019,
-       0x0904, 0x2fd2, 0x684e, 0x6946, 0x782c, 0x6862, 0x7828, 0x6866,
--      0xa006, 0x686a, 0x686e, 0x080c, 0x53d6, 0x0804, 0x2faa, 0xa02e,
-+      0xa006, 0x686a, 0x686e, 0x080c, 0x53d5, 0x0804, 0x2faa, 0xa02e,
-       0x2520, 0x81ff, 0x1904, 0x2fcf, 0x7924, 0x7b28, 0x7a2c, 0x20a9,
--      0x0005, 0x20a1, 0xb589, 0x41a1, 0x080c, 0x3e76, 0x0904, 0x2fcf,
--      0x2009, 0x0020, 0x080c, 0x3eb7, 0x701b, 0x3067, 0x0005, 0x6834,
-+      0x0005, 0x20a1, 0xb589, 0x41a1, 0x080c, 0x3e75, 0x0904, 0x2fcf,
-+      0x2009, 0x0020, 0x080c, 0x3eb6, 0x701b, 0x3067, 0x0005, 0x6834,
-       0x2008, 0xa084, 0x00ff, 0xa096, 0x0011, 0x0138, 0xa096, 0x0019,
-       0x0120, 0xa096, 0x0015, 0x1904, 0x2fcf, 0x810f, 0xa18c, 0x00ff,
-       0x0904, 0x2fcf, 0x710e, 0x700c, 0x8001, 0x0528, 0x700e, 0x080c,
--      0x3e76, 0x0904, 0x2fcf, 0x2009, 0x0020, 0x2061, 0xb5d2, 0x6224,
-+      0x3e75, 0x0904, 0x2fcf, 0x2009, 0x0020, 0x2061, 0xb5d2, 0x6224,
-       0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1,
--      0x0000, 0xa5a9, 0x0000, 0x080c, 0x3eb7, 0x701b, 0x3098, 0x0005,
-+      0x0000, 0xa5a9, 0x0000, 0x080c, 0x3eb6, 0x701b, 0x3098, 0x0005,
-       0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0120, 0xa096, 0x000a,
-       0x1904, 0x2fcf, 0x08c0, 0x7010, 0x2068, 0x6838, 0xc0fd, 0x683a,
--      0x080c, 0x4e4a, 0x1128, 0x7007, 0x0003, 0x701b, 0x30b2, 0x0005,
--      0x080c, 0x54dc, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x2099,
-+      0x080c, 0x4e49, 0x1128, 0x7007, 0x0003, 0x701b, 0x30b2, 0x0005,
-+      0x080c, 0x54db, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x2099,
-       0xb589, 0x530a, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000,
-       0xa5a9, 0x0000, 0xad80, 0x000d, 0x2009, 0x0020, 0x012e, 0x0804,
--      0x3eba, 0x61ac, 0x7824, 0x60ae, 0x0804, 0x2faa, 0x2091, 0x8000,
-+      0x3eb9, 0x61ac, 0x7824, 0x60ae, 0x0804, 0x2faa, 0x2091, 0x8000,
-       0x7823, 0x4000, 0x7827, 0x4953, 0x782b, 0x5020, 0x782f, 0x2020,
-       0x2009, 0x017f, 0x2104, 0x7832, 0x3f00, 0x7836, 0x2061, 0x0100,
-       0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0xa205, 0x783a, 0x2009,
-       0x04fd, 0x2104, 0x783e, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091,
-       0x4080, 0x2071, 0x0010, 0x20c1, 0x00f0, 0x0804, 0x0427, 0x81ff,
--      0x1904, 0x2fcf, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x080c, 0x4faa,
-+      0x1904, 0x2fcf, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x080c, 0x4fa9,
-       0x1904, 0x2fd2, 0x7e38, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0210,
--      0x0804, 0x2fd2, 0x7c28, 0x7d2c, 0x080c, 0x5172, 0xd28c, 0x1118,
--      0x080c, 0x511b, 0x0010, 0x080c, 0x514b, 0x1518, 0x2061, 0xbd00,
-+      0x0804, 0x2fd2, 0x7c28, 0x7d2c, 0x080c, 0x5171, 0xd28c, 0x1118,
-+      0x080c, 0x511a, 0x0010, 0x080c, 0x514a, 0x1518, 0x2061, 0xbd00,
-       0x0126, 0x2091, 0x8000, 0x6000, 0xa086, 0x0000, 0x0148, 0x6010,
-       0xa06d, 0x0130, 0x683c, 0xa406, 0x1118, 0x6840, 0xa506, 0x0150,
-       0x012e, 0xace0, 0x0018, 0x2001, 0xb517, 0x2004, 0xac02, 0x1a04,
--      0x2fcf, 0x0c30, 0x080c, 0x9924, 0x012e, 0x0904, 0x2fcf, 0x0804,
--      0x2faa, 0xa00e, 0x2001, 0x0005, 0x080c, 0x54dc, 0x0126, 0x2091,
--      0x8000, 0x080c, 0x9ecc, 0x080c, 0x5409, 0x012e, 0x0804, 0x2faa,
--      0x81ff, 0x1904, 0x2fcf, 0x080c, 0x3e8b, 0x0904, 0x2fd2, 0x080c,
--      0x5070, 0x0904, 0x2fcf, 0x080c, 0x517e, 0x0904, 0x2fcf, 0x0804,
--      0x2faa, 0x81ff, 0x1904, 0x2fcf, 0x080c, 0x3e9b, 0x0904, 0x2fd2,
--      0x080c, 0x51ea, 0x0904, 0x2fcf, 0x2019, 0x0005, 0x7924, 0x080c,
--      0x5199, 0x0904, 0x2fcf, 0x7828, 0xa08a, 0x1000, 0x1a04, 0x2fd2,
--      0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x69a9, 0x0804, 0x2faa,
-+      0x2fcf, 0x0c30, 0x080c, 0x992a, 0x012e, 0x0904, 0x2fcf, 0x0804,
-+      0x2faa, 0xa00e, 0x2001, 0x0005, 0x080c, 0x54db, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x9ed2, 0x080c, 0x5408, 0x012e, 0x0804, 0x2faa,
-+      0x81ff, 0x1904, 0x2fcf, 0x080c, 0x3e8a, 0x0904, 0x2fd2, 0x080c,
-+      0x506f, 0x0904, 0x2fcf, 0x080c, 0x517d, 0x0904, 0x2fcf, 0x0804,
-+      0x2faa, 0x81ff, 0x1904, 0x2fcf, 0x080c, 0x3e9a, 0x0904, 0x2fd2,
-+      0x080c, 0x51e9, 0x0904, 0x2fcf, 0x2019, 0x0005, 0x7924, 0x080c,
-+      0x5198, 0x0904, 0x2fcf, 0x7828, 0xa08a, 0x1000, 0x1a04, 0x2fd2,
-+      0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x69a8, 0x0804, 0x2faa,
-       0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450,
-       0x2029, 0x00ff, 0x6450, 0x2400, 0xa506, 0x01f8, 0x2508, 0x080c,
--      0x4faa, 0x11d8, 0x080c, 0x51ea, 0x1128, 0x2009, 0x0002, 0x62b4,
--      0x2518, 0x00c0, 0x2019, 0x0004, 0xa00e, 0x080c, 0x5199, 0x1118,
-+      0x4fa9, 0x11d8, 0x080c, 0x51e9, 0x1128, 0x2009, 0x0002, 0x62b4,
-+      0x2518, 0x00c0, 0x2019, 0x0004, 0xa00e, 0x080c, 0x5198, 0x1118,
-       0x2009, 0x0006, 0x0078, 0x7824, 0xa08a, 0x1000, 0x1270, 0x8003,
--      0x800b, 0x810b, 0xa108, 0x080c, 0x69a9, 0x8529, 0x1ae0, 0x012e,
-+      0x800b, 0x810b, 0xa108, 0x080c, 0x69a8, 0x8529, 0x1ae0, 0x012e,
-       0x0804, 0x2faa, 0x012e, 0x0804, 0x2fcf, 0x012e, 0x0804, 0x2fd2,
--      0x080c, 0x3e8b, 0x0904, 0x2fd2, 0x080c, 0x50d6, 0x080c, 0x5172,
--      0x0804, 0x2faa, 0x81ff, 0x1904, 0x2fcf, 0x080c, 0x3e8b, 0x0904,
--      0x2fd2, 0x080c, 0x50c7, 0x080c, 0x5172, 0x0804, 0x2faa, 0x81ff,
--      0x1904, 0x2fcf, 0x080c, 0x3e8b, 0x0904, 0x2fd2, 0x080c, 0x514d,
--      0x0904, 0x2fcf, 0x080c, 0x4e8e, 0x080c, 0x5114, 0x080c, 0x5172,
--      0x0804, 0x2faa, 0x080c, 0x3e8b, 0x0904, 0x2fd2, 0x080c, 0x5070,
--      0x0904, 0x2fcf, 0x62a0, 0x2019, 0x0005, 0x00c6, 0x080c, 0x51ab,
--      0x2061, 0x0000, 0x080c, 0x6df6, 0x0076, 0x2039, 0x0000, 0x080c,
--      0x6d03, 0x2009, 0x0000, 0x080c, 0xae76, 0x007e, 0x00ce, 0x080c,
--      0x5172, 0x0804, 0x2faa, 0x080c, 0x3e8b, 0x0904, 0x2fd2, 0x080c,
--      0x5172, 0x2208, 0x0804, 0x2faa, 0x0156, 0x00d6, 0x00e6, 0x2069,
-+      0x080c, 0x3e8a, 0x0904, 0x2fd2, 0x080c, 0x50d5, 0x080c, 0x5171,
-+      0x0804, 0x2faa, 0x81ff, 0x1904, 0x2fcf, 0x080c, 0x3e8a, 0x0904,
-+      0x2fd2, 0x080c, 0x50c6, 0x080c, 0x5171, 0x0804, 0x2faa, 0x81ff,
-+      0x1904, 0x2fcf, 0x080c, 0x3e8a, 0x0904, 0x2fd2, 0x080c, 0x514c,
-+      0x0904, 0x2fcf, 0x080c, 0x4e8d, 0x080c, 0x5113, 0x080c, 0x5171,
-+      0x0804, 0x2faa, 0x080c, 0x3e8a, 0x0904, 0x2fd2, 0x080c, 0x506f,
-+      0x0904, 0x2fcf, 0x62a0, 0x2019, 0x0005, 0x00c6, 0x080c, 0x51aa,
-+      0x2061, 0x0000, 0x080c, 0x6df5, 0x0076, 0x2039, 0x0000, 0x080c,
-+      0x6d02, 0x2009, 0x0000, 0x080c, 0xae82, 0x007e, 0x00ce, 0x080c,
-+      0x5171, 0x0804, 0x2faa, 0x080c, 0x3e8a, 0x0904, 0x2fd2, 0x080c,
-+      0x5171, 0x2208, 0x0804, 0x2faa, 0x0156, 0x00d6, 0x00e6, 0x2069,
-       0xb614, 0x6810, 0x6914, 0xa10a, 0x1210, 0x2009, 0x0000, 0x6816,
-       0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x007e, 0x2069, 0xb635,
-       0x2d04, 0xa075, 0x0130, 0x704c, 0x0071, 0xa210, 0x7080, 0x0059,
-@@ -1156,18 +1156,18 @@ unsigned short risc_code01[] = { 
-       0x81ff, 0x1904, 0x2fcf, 0x6150, 0xa190, 0x2dc4, 0x2215, 0xa294,
-       0x00ff, 0x6370, 0x83ff, 0x0108, 0x6274, 0x67d4, 0xd79c, 0x0118,
-       0x2031, 0x0001, 0x0090, 0xd7ac, 0x0118, 0x2031, 0x0003, 0x0068,
--      0xd7a4, 0x0118, 0x2031, 0x0002, 0x0040, 0x080c, 0x5ad0, 0x1118,
-+      0xd7a4, 0x0118, 0x2031, 0x0002, 0x0040, 0x080c, 0x5acf, 0x1118,
-       0x2031, 0x0004, 0x0010, 0x2031, 0x0000, 0x7e3a, 0x7f3e, 0x0804,
-       0x2faa, 0x6140, 0x6244, 0x2019, 0xb7b6, 0x231c, 0x0804, 0x2faa,
-       0x0126, 0x2091, 0x8000, 0x6134, 0xa006, 0x2010, 0x6338, 0x012e,
--      0x0804, 0x2faa, 0x080c, 0x3e9b, 0x0904, 0x2fd2, 0x6244, 0x6338,
-+      0x0804, 0x2faa, 0x080c, 0x3e9a, 0x0904, 0x2fd2, 0x6244, 0x6338,
-       0x0804, 0x2faa, 0x6140, 0x6244, 0x7824, 0x6042, 0x7b28, 0x6346,
-       0x2069, 0xb552, 0x831f, 0xa305, 0x6816, 0x782c, 0x2069, 0xb7b6,
-       0x2d1c, 0x206a, 0x0804, 0x2faa, 0x0126, 0x2091, 0x8000, 0x7824,
-       0x6036, 0x782c, 0x603a, 0x012e, 0x0804, 0x2faa, 0x7838, 0xa005,
-       0x01a8, 0x7828, 0xa025, 0x0904, 0x2fd2, 0x782c, 0xa02d, 0x0904,
--      0x2fd2, 0xa00e, 0x080c, 0x4faa, 0x1120, 0x6244, 0x6338, 0x6446,
--      0x653a, 0xa186, 0x00ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x3e9b,
-+      0x2fd2, 0xa00e, 0x080c, 0x4fa9, 0x1120, 0x6244, 0x6338, 0x6446,
-+      0x653a, 0xa186, 0x00ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x3e9a,
-       0x0904, 0x2fd2, 0x7828, 0xa00d, 0x0904, 0x2fd2, 0x782c, 0xa005,
-       0x0904, 0x2fd2, 0x6244, 0x6146, 0x6338, 0x603a, 0x0804, 0x2faa,
-       0x2001, 0xb500, 0x2004, 0xa086, 0x0003, 0x1904, 0x2fcf, 0x00c6,
-@@ -1175,32 +1175,32 @@ unsigned short risc_code01[] = { 
-       0x1130, 0x2001, 0xb515, 0x2004, 0xa085, 0xff00, 0x0078, 0xa182,
-       0x007f, 0x16a0, 0xa188, 0x2dc4, 0x210d, 0xa18c, 0x00ff, 0x2001,
-       0xb515, 0x2004, 0xa116, 0x0550, 0x810f, 0xa105, 0x0126, 0x2091,
--      0x8000, 0x0006, 0x080c, 0x85c1, 0x000e, 0x01e0, 0x601a, 0x600b,
--      0xbc09, 0x601f, 0x0001, 0x080c, 0x3e76, 0x01d8, 0x6837, 0x0000,
-+      0x8000, 0x0006, 0x080c, 0x85c7, 0x000e, 0x01e0, 0x601a, 0x600b,
-+      0xbc09, 0x601f, 0x0001, 0x080c, 0x3e75, 0x01d8, 0x6837, 0x0000,
-       0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x701b,
--      0x3370, 0x2d00, 0x6012, 0x2009, 0x0032, 0x080c, 0x8646, 0x012e,
-+      0x3370, 0x2d00, 0x6012, 0x2009, 0x0032, 0x080c, 0x864c, 0x012e,
-       0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x2fcf, 0x00ce, 0x0804,
--      0x2fd2, 0x080c, 0x8617, 0x0cb0, 0x2001, 0xb500, 0x2004, 0xa086,
-+      0x2fd2, 0x080c, 0x861d, 0x0cb0, 0x2001, 0xb500, 0x2004, 0xa086,
-       0x0003, 0x1904, 0x2fcf, 0x00c6, 0x2061, 0x0100, 0x7924, 0x810f,
-       0xa18c, 0x00ff, 0xa196, 0x00ff, 0x1130, 0x2001, 0xb515, 0x2004,
-       0xa085, 0xff00, 0x0078, 0xa182, 0x007f, 0x16a0, 0xa188, 0x2dc4,
-       0x210d, 0xa18c, 0x00ff, 0x2001, 0xb515, 0x2004, 0xa116, 0x0550,
--      0x810f, 0xa105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x85c1,
-+      0x810f, 0xa105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x85c7,
-       0x000e, 0x01e0, 0x601a, 0x600b, 0xbc05, 0x601f, 0x0001, 0x080c,
--      0x3e76, 0x01d8, 0x6837, 0x0000, 0x7007, 0x0003, 0x6833, 0x0000,
-+      0x3e75, 0x01d8, 0x6837, 0x0000, 0x7007, 0x0003, 0x6833, 0x0000,
-       0x6838, 0xc0fd, 0x683a, 0x701b, 0x3370, 0x2d00, 0x6012, 0x2009,
--      0x0032, 0x080c, 0x8646, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce,
--      0x0804, 0x2fcf, 0x00ce, 0x0804, 0x2fd2, 0x080c, 0x8617, 0x0cb0,
-+      0x0032, 0x080c, 0x864c, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce,
-+      0x0804, 0x2fcf, 0x00ce, 0x0804, 0x2fd2, 0x080c, 0x861d, 0x0cb0,
-       0x6830, 0xa086, 0x0100, 0x0904, 0x2fcf, 0x0804, 0x2faa, 0x2061,
-       0xb874, 0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0178, 0x6104,
-       0x6208, 0x2a60, 0x6068, 0x783a, 0x60b4, 0x783e, 0x60b0, 0x2019,
-       0x0072, 0x201a, 0x6348, 0x012e, 0x0804, 0x2faa, 0xa00e, 0x2110,
--      0x0c80, 0x81ff, 0x1904, 0x2fcf, 0x080c, 0x5ad0, 0x0904, 0x2fcf,
-+      0x0c80, 0x81ff, 0x1904, 0x2fcf, 0x080c, 0x5acf, 0x0904, 0x2fcf,
-       0x0126, 0x2091, 0x8000, 0x6248, 0x6068, 0xa202, 0x0248, 0xa085,
--      0x0001, 0x080c, 0x2867, 0x080c, 0x462d, 0x012e, 0x0804, 0x2faa,
-+      0x0001, 0x080c, 0x2867, 0x080c, 0x462c, 0x012e, 0x0804, 0x2faa,
-       0x012e, 0x0804, 0x2fd2, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001,
-       0xb7bf, 0x2070, 0x2061, 0xb552, 0x6008, 0x2072, 0x2009, 0x0000,
--      0x2011, 0x1000, 0x080c, 0x6b41, 0x7206, 0x00ee, 0x00ce, 0x001e,
-+      0x2011, 0x1000, 0x080c, 0x6b40, 0x7206, 0x00ee, 0x00ce, 0x001e,
-       0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7824, 0xa084, 0x0007,
-       0x0002, 0x33d4, 0x33dd, 0x33e4, 0x33d1, 0x33d1, 0x33d1, 0x33d1,
-       0x33d1, 0x012e, 0x0804, 0x2fd2, 0x2009, 0x0114, 0x2104, 0xa085,
-@@ -1308,10 +1308,10 @@ unsigned short risc_code01[] = { 
-       0x00c6, 0x2061, 0x0200, 0x2001, 0xb7c0, 0x2004, 0x601a, 0x2061,
-       0x0100, 0x2001, 0xb7bf, 0x2004, 0x60ce, 0x6004, 0xc0ac, 0xa085,
-       0x0200, 0x6006, 0x2001, 0x0074, 0x2004, 0xa005, 0x01f8, 0x2038,
--      0x2001, 0x0076, 0x2024, 0x2001, 0x0077, 0x201c, 0x080c, 0x3e76,
-+      0x2001, 0x0076, 0x2024, 0x2001, 0x0077, 0x201c, 0x080c, 0x3e75,
-       0x6833, 0x000d, 0x6f26, 0x2d00, 0x681a, 0xa78a, 0x0007, 0x0220,
-       0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0xa03e, 0x6818, 0xa080,
--      0x000d, 0x04b1, 0x1d90, 0x2d00, 0x681a, 0x0088, 0x080c, 0x3e76,
-+      0x000d, 0x04b1, 0x1d90, 0x2d00, 0x681a, 0x0088, 0x080c, 0x3e75,
-       0x6833, 0x000d, 0x2070, 0x6827, 0x0001, 0x2d00, 0x681a, 0x2001,
-       0x0076, 0x2004, 0x2072, 0x2001, 0x0077, 0x2004, 0x7006, 0x2061,
-       0x0020, 0x2079, 0x0100, 0x2001, 0xb7bf, 0x2004, 0x6012, 0x20e1,
-@@ -1322,14 +1322,14 @@ unsigned short risc_code01[] = { 
-       0x7432, 0x7336, 0xa006, 0x703a, 0x703e, 0x810b, 0x810b, 0x21a8,
-       0x810b, 0x7122, 0x7003, 0x0041, 0x7004, 0xd0fc, 0x0de8, 0x7003,
-       0x0002, 0x7003, 0x0040, 0x53a5, 0x7430, 0x7334, 0x87ff, 0x0180,
--      0x00c6, 0x00d6, 0x2d60, 0x00c6, 0x080c, 0x3e76, 0x00ce, 0x6018,
-+      0x00c6, 0x00d6, 0x2d60, 0x00c6, 0x080c, 0x3e75, 0x00ce, 0x6018,
-       0x2070, 0x2d00, 0x7006, 0x601a, 0x00de, 0x00ce, 0xa085, 0x0001,
-       0x00ee, 0x0005, 0x00e6, 0x2001, 0x0075, 0x2004, 0xa005, 0x0508,
-       0x2038, 0x2001, 0x0078, 0x2024, 0x2001, 0x0079, 0x201c, 0x080c,
--      0x3e76, 0x2d60, 0x6833, 0x000d, 0x6f26, 0x2d00, 0x681a, 0xa78a,
-+      0x3e75, 0x2d60, 0x6833, 0x000d, 0x6f26, 0x2d00, 0x681a, 0xa78a,
-       0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0xa03e,
-       0x6818, 0xa080, 0x000d, 0x080c, 0x3768, 0x1d88, 0x2d00, 0x681a,
--      0x00e0, 0x080c, 0x3e76, 0x2d60, 0x6033, 0x000d, 0x2070, 0x6027,
-+      0x00e0, 0x080c, 0x3e75, 0x2d60, 0x6033, 0x000d, 0x2070, 0x6027,
-       0x0001, 0x2c00, 0x601a, 0x2001, 0x0078, 0x2004, 0x2072, 0x2001,
-       0x0079, 0x2004, 0x7006, 0x2001, 0x0072, 0x2004, 0xa084, 0xfff8,
-       0x700a, 0x2001, 0x0073, 0x2004, 0x700e, 0x2001, 0x0030, 0x2003,
-@@ -1338,9 +1338,9 @@ unsigned short risc_code01[] = { 
-       0x0030, 0x2003, 0x0009, 0x00ee, 0x0005, 0x0804, 0x2faa, 0x0126,
-       0x2091, 0x8000, 0x20a9, 0x0012, 0x2001, 0xb540, 0x20a0, 0xa006,
-       0x40a4, 0x012e, 0x0804, 0x2faa, 0x7d38, 0x7c3c, 0x0804, 0x3051,
--      0x080c, 0x3e76, 0x0904, 0x2fcf, 0x080c, 0x5ad0, 0x0110, 0x080c,
--      0x4bf1, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c,
--      0x3eb7, 0x701b, 0x381c, 0x0005, 0xade8, 0x000d, 0x6800, 0xa005,
-+      0x080c, 0x3e75, 0x0904, 0x2fcf, 0x080c, 0x5acf, 0x0110, 0x080c,
-+      0x4bf0, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c,
-+      0x3eb6, 0x701b, 0x381c, 0x0005, 0xade8, 0x000d, 0x6800, 0xa005,
-       0x0904, 0x2fd2, 0x6804, 0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x2fd2,
-       0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138, 0x6200, 0xa292,
-       0x0005, 0x0218, 0xa18c, 0xffdf, 0x0010, 0xa18d, 0x0020, 0x6106,
-@@ -1354,9 +1354,9 @@ unsigned short risc_code01[] = { 
-       0x0904, 0x2fd2, 0x6810, 0xa005, 0x0904, 0x2fd2, 0x6848, 0x6940,
-       0xa10a, 0x1a04, 0x2fd2, 0x8001, 0x0904, 0x2fd2, 0x684c, 0x6944,
-       0xa10a, 0x1a04, 0x2fd2, 0x8001, 0x0904, 0x2fd2, 0x6804, 0xd0fc,
--      0x0560, 0x080c, 0x3e76, 0x0904, 0x2fcf, 0x2009, 0x0014, 0x7a2c,
-+      0x0560, 0x080c, 0x3e75, 0x0904, 0x2fcf, 0x2009, 0x0014, 0x7a2c,
-       0x7b28, 0x7c3c, 0x7d38, 0xa290, 0x0038, 0xa399, 0x0000, 0x080c,
--      0x3eb7, 0x701b, 0x389c, 0x0005, 0xade8, 0x000d, 0x20a9, 0x0014,
-+      0x3eb6, 0x701b, 0x389c, 0x0005, 0xade8, 0x000d, 0x20a9, 0x0014,
-       0x2d98, 0x2069, 0xb56e, 0x2da0, 0x53a3, 0x7010, 0xa0e8, 0x000d,
-       0x2001, 0xb572, 0x200c, 0xd1e4, 0x0140, 0x00c6, 0x2061, 0x0100,
-       0x6004, 0xa085, 0x0b00, 0x6006, 0x00ce, 0x2009, 0xb7b1, 0x200b,
-@@ -1364,7 +1364,7 @@ unsigned short risc_code01[] = { 
-       0x2009, 0x017f, 0x200a, 0x3200, 0xa084, 0x003f, 0xa085, 0x3020,
-       0x2090, 0x20a9, 0x001c, 0x2d98, 0x2069, 0xb552, 0x2da0, 0x53a3,
-       0x6814, 0xa08c, 0x00ff, 0x6142, 0x8007, 0xa084, 0x00ff, 0x6046,
--      0x080c, 0x5da6, 0x080c, 0x536d, 0x080c, 0x53d6, 0x6000, 0xa086,
-+      0x080c, 0x5da5, 0x080c, 0x536c, 0x080c, 0x53d5, 0x6000, 0xa086,
-       0x0000, 0x1904, 0x3997, 0x6808, 0x602a, 0x080c, 0x2470, 0x0006,
-       0x2001, 0x0100, 0x2004, 0xa082, 0x0005, 0x000e, 0x0268, 0x2009,
-       0x0170, 0x200b, 0x0080, 0xe000, 0xe000, 0x200b, 0x0000, 0x0036,
-@@ -1373,3955 +1373,3956 @@ unsigned short risc_code01[] = { 
-       0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007,
-       0x810f, 0x8217, 0x831f, 0x0010, 0xa084, 0xf0ff, 0x6006, 0x610a,
-       0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004,
--      0x20a1, 0xb7c6, 0x40a1, 0x080c, 0x6a69, 0x6904, 0xd1fc, 0x0520,
-+      0x20a1, 0xb7c6, 0x40a1, 0x080c, 0x6a68, 0x6904, 0xd1fc, 0x0520,
-       0x00c6, 0x2009, 0x0000, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x01c8,
--      0x0020, 0x839d, 0x12b0, 0x3508, 0x8109, 0x080c, 0x635d, 0x6878,
-+      0x0020, 0x839d, 0x12b0, 0x3508, 0x8109, 0x080c, 0x635c, 0x6878,
-       0x6016, 0x6874, 0x2008, 0xa084, 0xff00, 0x8007, 0x600a, 0xa184,
-       0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003,
-       0x0001, 0x1f04, 0x3931, 0x00ce, 0x2069, 0xb552, 0x2001, 0xb79e,
-       0x6a80, 0xa294, 0x0030, 0xa28e, 0x0000, 0x0170, 0xa28e, 0x0010,
-       0x0118, 0xa28e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c, 0x28eb,
-       0x2001, 0xb78f, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100,
--      0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x5ad0, 0x0128,
--      0x080c, 0x40d0, 0x0110, 0x080c, 0x2867, 0x60c8, 0xa005, 0x01d0,
--      0x6003, 0x0001, 0x2009, 0x397d, 0x00e0, 0x080c, 0x5ad0, 0x1178,
--      0x2011, 0x59a3, 0x080c, 0x699d, 0x2011, 0x5996, 0x080c, 0x6a5d,
--      0x2001, 0xb79f, 0x2003, 0x0000, 0x080c, 0x5a08, 0x0040, 0x080c,
--      0x4b20, 0x0028, 0x6003, 0x0004, 0x2009, 0x3997, 0x0010, 0x0804,
-+      0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x5acf, 0x0128,
-+      0x080c, 0x40cf, 0x0110, 0x080c, 0x2867, 0x60c8, 0xa005, 0x01d0,
-+      0x6003, 0x0001, 0x2009, 0x397d, 0x00e0, 0x080c, 0x5acf, 0x1178,
-+      0x2011, 0x59a2, 0x080c, 0x699c, 0x2011, 0x5995, 0x080c, 0x6a5c,
-+      0x2001, 0xb79f, 0x2003, 0x0000, 0x080c, 0x5a07, 0x0040, 0x080c,
-+      0x4b1f, 0x0028, 0x6003, 0x0004, 0x2009, 0x3997, 0x0010, 0x0804,
-       0x2faa, 0x2001, 0x0100, 0x2004, 0xa082, 0x0005, 0x0258, 0x2001,
-       0x0170, 0x2004, 0xa084, 0x00ff, 0xa086, 0x004c, 0x1118, 0x2091,
-       0x309d, 0x0817, 0x2091, 0x301d, 0x0817, 0x6000, 0xa086, 0x0000,
-       0x0904, 0x2fcf, 0x2069, 0xb552, 0x7830, 0x6842, 0x7834, 0x6846,
-       0x6804, 0xd0fc, 0x0118, 0x2009, 0x0030, 0x0010, 0x2009, 0x001c,
--      0x2d00, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3eba, 0xa006,
--      0x080c, 0x2867, 0x81ff, 0x1904, 0x2fcf, 0x080c, 0x5ad0, 0x1178,
-+      0x2d00, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3eb9, 0xa006,
-+      0x080c, 0x2867, 0x81ff, 0x1904, 0x2fcf, 0x080c, 0x5acf, 0x1178,
-       0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003, 0x0001,
--      0xa085, 0x0001, 0x080c, 0x5b14, 0x080c, 0x5a08, 0x0020, 0x080c,
--      0x4bf1, 0x080c, 0x4b20, 0x0804, 0x2faa, 0x81ff, 0x1904, 0x2fcf,
--      0x080c, 0x5ad0, 0x1110, 0x0804, 0x2fcf, 0x6188, 0x81ff, 0x0198,
-+      0xa085, 0x0001, 0x080c, 0x5b13, 0x080c, 0x5a07, 0x0020, 0x080c,
-+      0x4bf0, 0x080c, 0x4b1f, 0x0804, 0x2faa, 0x81ff, 0x1904, 0x2fcf,
-+      0x080c, 0x5acf, 0x1110, 0x0804, 0x2fcf, 0x6188, 0x81ff, 0x0198,
-       0x703f, 0x0000, 0x2001, 0xbcc0, 0x2009, 0x0040, 0x7a2c, 0x7b28,
--      0x7c3c, 0x7d38, 0x0126, 0x2091, 0x8000, 0x080c, 0x3eba, 0x701b,
-+      0x7c3c, 0x7d38, 0x0126, 0x2091, 0x8000, 0x080c, 0x3eb9, 0x701b,
-       0x2fa8, 0x012e, 0x0005, 0x703f, 0x0001, 0x00d6, 0x2069, 0xbcc0,
-       0x20a9, 0x0040, 0x20a1, 0xbcc0, 0x2019, 0xffff, 0x43a4, 0x6550,
-       0xa588, 0x2dc4, 0x210d, 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011,
--      0x0002, 0x2100, 0xa506, 0x01a8, 0x080c, 0x4faa, 0x1190, 0x6014,
-+      0x0002, 0x2100, 0xa506, 0x01a8, 0x080c, 0x4fa9, 0x1190, 0x6014,
-       0x821c, 0x0238, 0xa398, 0xbcc0, 0xa085, 0xff00, 0x8007, 0x201a,
-       0x0038, 0xa398, 0xbcc0, 0x2324, 0xa4a4, 0xff00, 0xa405, 0x201a,
-       0x8210, 0x8108, 0xa182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007,
-       0x2d0c, 0xa105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0xbcc0,
--      0x2099, 0xbcc0, 0x080c, 0x4b90, 0x0804, 0x39f2, 0x080c, 0x3e9b,
--      0x0904, 0x2fd2, 0x00c6, 0x080c, 0x3e76, 0x00ce, 0x1120, 0x2009,
-+      0x2099, 0xbcc0, 0x080c, 0x4b8f, 0x0804, 0x39f2, 0x080c, 0x3e9a,
-+      0x0904, 0x2fd2, 0x00c6, 0x080c, 0x3e75, 0x00ce, 0x1120, 0x2009,
-       0x0002, 0x0804, 0x2fcf, 0x2001, 0xb553, 0x2004, 0xd0b4, 0x0550,
-       0x7824, 0xa084, 0xff00, 0xa08e, 0x7e00, 0x0520, 0xa08e, 0x7f00,
-       0x0508, 0xa08e, 0x8000, 0x01f0, 0x6000, 0xd08c, 0x11d8, 0x6004,
-       0xa084, 0x00ff, 0xa086, 0x0006, 0x11a8, 0x6837, 0x0000, 0x6838,
--      0xc0fd, 0x683a, 0x080c, 0x9dd4, 0x1120, 0x2009, 0x0003, 0x0804,
--      0x2fcf, 0x7007, 0x0003, 0x701b, 0x3a7e, 0x0005, 0x080c, 0x3e9b,
-+      0xc0fd, 0x683a, 0x080c, 0x9dda, 0x1120, 0x2009, 0x0003, 0x0804,
-+      0x2fcf, 0x7007, 0x0003, 0x701b, 0x3a7e, 0x0005, 0x080c, 0x3e9a,
-       0x0904, 0x2fd2, 0x20a9, 0x002b, 0x2c98, 0xade8, 0x0002, 0x2da0,
-       0x53a3, 0x20a9, 0x0004, 0xac80, 0x0006, 0x2098, 0xad80, 0x0006,
--      0x20a0, 0x080c, 0x4b90, 0x20a9, 0x0004, 0xac80, 0x000a, 0x2098,
--      0xad80, 0x000a, 0x20a0, 0x080c, 0x4b90, 0x2d00, 0x2009, 0x002b,
--      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3eba, 0x81ff, 0x1904,
--      0x2fcf, 0x080c, 0x3e8b, 0x0904, 0x2fd2, 0x080c, 0x5187, 0x0804,
-+      0x20a0, 0x080c, 0x4b8f, 0x20a9, 0x0004, 0xac80, 0x000a, 0x2098,
-+      0xad80, 0x000a, 0x20a0, 0x080c, 0x4b8f, 0x2d00, 0x2009, 0x002b,
-+      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3eb9, 0x81ff, 0x1904,
-+      0x2fcf, 0x080c, 0x3e8a, 0x0904, 0x2fd2, 0x080c, 0x5186, 0x0804,
-       0x2faa, 0x81ff, 0x1904, 0x2fcf, 0x7828, 0xa08a, 0x1000, 0x1a04,
--      0x2fd2, 0x080c, 0x3e9b, 0x0904, 0x2fd2, 0x080c, 0x51ea, 0x0904,
--      0x2fcf, 0x2019, 0x0004, 0xa00e, 0x080c, 0x5199, 0x7924, 0x810f,
-+      0x2fd2, 0x080c, 0x3e9a, 0x0904, 0x2fd2, 0x080c, 0x51e9, 0x0904,
-+      0x2fcf, 0x2019, 0x0004, 0xa00e, 0x080c, 0x5198, 0x7924, 0x810f,
-       0x7a28, 0x0011, 0x0804, 0x2faa, 0xa186, 0x00ff, 0x0110, 0x0071,
-       0x0060, 0x2029, 0x007e, 0x2061, 0xb500, 0x6450, 0x2400, 0xa506,
--      0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x4faa,
--      0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x69a9,
--      0x0005, 0x81ff, 0x1904, 0x2fcf, 0x080c, 0x3e8b, 0x0904, 0x2fd2,
--      0x080c, 0x5070, 0x0904, 0x2fcf, 0x080c, 0x5190, 0x0804, 0x2faa,
--      0x81ff, 0x1904, 0x2fcf, 0x080c, 0x3e8b, 0x0904, 0x2fd2, 0x080c,
--      0x5070, 0x0904, 0x2fcf, 0x080c, 0x517e, 0x0804, 0x2faa, 0x6100,
--      0x0804, 0x2faa, 0x080c, 0x3e9b, 0x0904, 0x2fd2, 0x2001, 0xb500,
-+      0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x4fa9,
-+      0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x69a8,
-+      0x0005, 0x81ff, 0x1904, 0x2fcf, 0x080c, 0x3e8a, 0x0904, 0x2fd2,
-+      0x080c, 0x506f, 0x0904, 0x2fcf, 0x080c, 0x518f, 0x0804, 0x2faa,
-+      0x81ff, 0x1904, 0x2fcf, 0x080c, 0x3e8a, 0x0904, 0x2fd2, 0x080c,
-+      0x506f, 0x0904, 0x2fcf, 0x080c, 0x517d, 0x0804, 0x2faa, 0x6100,
-+      0x0804, 0x2faa, 0x080c, 0x3e9a, 0x0904, 0x2fd2, 0x2001, 0xb500,
-       0x2004, 0xa086, 0x0003, 0x1904, 0x2fcf, 0x00d6, 0xace8, 0x000a,
-       0x7924, 0xd184, 0x0110, 0xace8, 0x0006, 0x680c, 0x8007, 0x783e,
-       0x6808, 0x8007, 0x783a, 0x6b04, 0x831f, 0x6a00, 0x8217, 0x00de,
--      0x6100, 0xa18c, 0x0200, 0x0804, 0x2faa, 0x7824, 0xa09c, 0x00ff,
--      0xa39a, 0x0003, 0x1a04, 0x2fcf, 0x6250, 0xa294, 0x00ff, 0xa084,
--      0xff00, 0x8007, 0xa206, 0x1150, 0x2001, 0xb540, 0x2009, 0x000c,
--      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3eba, 0x81ff, 0x1904,
--      0x2fcf, 0x080c, 0x3e9b, 0x0904, 0x2fd2, 0x6004, 0xa084, 0x00ff,
--      0xa086, 0x0006, 0x1904, 0x2fcf, 0x00c6, 0x080c, 0x3e76, 0x00ce,
--      0x0904, 0x2fcf, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c,
--      0x9d80, 0x0904, 0x2fcf, 0x7007, 0x0003, 0x701b, 0x3b68, 0x0005,
--      0x6830, 0xa086, 0x0100, 0x0904, 0x2fcf, 0xad80, 0x000e, 0x2009,
--      0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3eba, 0xa006,
--      0x080c, 0x2867, 0x7824, 0xa084, 0x00ff, 0xa086, 0x00ff, 0x0118,
--      0x81ff, 0x1904, 0x2fcf, 0x080c, 0x5ad0, 0x0110, 0x080c, 0x4bf1,
--      0x7828, 0xa08a, 0x1000, 0x1a04, 0x2fd2, 0x7924, 0xa18c, 0xff00,
--      0x810f, 0xa186, 0x00ff, 0x0138, 0xa182, 0x007f, 0x1a04, 0x2fd2,
--      0x2100, 0x080c, 0x2831, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000,
--      0x2061, 0xb7f3, 0x601b, 0x0000, 0x601f, 0x0000, 0x080c, 0x5ad0,
--      0x1178, 0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003,
--      0x0001, 0xa085, 0x0001, 0x080c, 0x5b14, 0x080c, 0x5a08, 0x0420,
--      0x2011, 0x0003, 0x080c, 0x8076, 0x2011, 0x0002, 0x080c, 0x8080,
--      0x080c, 0x7f5a, 0x0036, 0x2019, 0x0000, 0x080c, 0x7fe5, 0x003e,
--      0x2061, 0x0100, 0x2001, 0xb515, 0x2004, 0xa084, 0x00ff, 0x810f,
--      0xa105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d,
--      0x2011, 0x4b55, 0x080c, 0x6a23, 0x7924, 0xa18c, 0xff00, 0x810f,
--      0x080c, 0x5ad0, 0x1110, 0x2009, 0x00ff, 0x7a28, 0x080c, 0x3acc,
--      0x012e, 0x00ce, 0x002e, 0x0804, 0x2faa, 0x7924, 0xa18c, 0xff00,
--      0x810f, 0x00c6, 0x080c, 0x4f4e, 0x2c08, 0x00ce, 0x1904, 0x2fd2,
--      0x0804, 0x2faa, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x2fcf,
--      0x60d4, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804,
--      0x2fcf, 0x080c, 0x3e76, 0x1120, 0x2009, 0x0002, 0x0804, 0x2fcf,
--      0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3eb7, 0x701b,
--      0x3c1a, 0x0005, 0x2009, 0x0080, 0x080c, 0x4faa, 0x1130, 0x6004,
--      0xa084, 0x00ff, 0xa086, 0x0006, 0x0120, 0x2021, 0x400a, 0x0804,
--      0x2fac, 0x00d6, 0xade8, 0x000d, 0x6900, 0x6a08, 0x6b0c, 0x6c10,
--      0x6d14, 0x6e18, 0x6820, 0xa0be, 0x0100, 0x0904, 0x3c91, 0xa0be,
--      0x0112, 0x0904, 0x3c91, 0xa0be, 0x0113, 0x0904, 0x3c91, 0xa0be,
--      0x0114, 0x0904, 0x3c91, 0xa0be, 0x0117, 0x0904, 0x3c91, 0xa0be,
--      0x011a, 0x0904, 0x3c91, 0xa0be, 0x011c, 0x0904, 0x3c91, 0xa0be,
--      0x0121, 0x05b0, 0xa0be, 0x0131, 0x0598, 0xa0be, 0x0171, 0x05c8,
--      0xa0be, 0x0173, 0x05b0, 0xa0be, 0x01a1, 0x1120, 0x6830, 0x8007,
--      0x6832, 0x04a8, 0xa0be, 0x0212, 0x0540, 0xa0be, 0x0213, 0x0528,
--      0xa0be, 0x0214, 0x01b0, 0xa0be, 0x0217, 0x0168, 0xa0be, 0x021a,
--      0x1120, 0x6838, 0x8007, 0x683a, 0x00e0, 0xa0be, 0x0300, 0x01c8,
--      0x00de, 0x0804, 0x2fd2, 0xad80, 0x0010, 0x20a9, 0x0007, 0x080c,
--      0x3cd7, 0xad80, 0x000e, 0x20a9, 0x0001, 0x080c, 0x3cd7, 0x0048,
--      0xad80, 0x000c, 0x080c, 0x3ce5, 0x0050, 0xad80, 0x000e, 0x080c,
--      0x3ce5, 0xad80, 0x000c, 0x20a9, 0x0001, 0x080c, 0x3cd7, 0x00c6,
--      0x080c, 0x3e76, 0x0568, 0x6838, 0xc0fd, 0x683a, 0x6837, 0x0119,
--      0x6853, 0x0000, 0x684f, 0x0020, 0x685b, 0x0001, 0x810b, 0x697e,
--      0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92, 0x6996, 0x689b,
--      0x0000, 0x00ce, 0x00de, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a,
--      0x6823, 0x0000, 0x6804, 0x2068, 0x080c, 0x9d9c, 0x1120, 0x2009,
--      0x0003, 0x0804, 0x2fcf, 0x7007, 0x0003, 0x701b, 0x3cce, 0x0005,
--      0x00ce, 0x00de, 0x2009, 0x0002, 0x0804, 0x2fcf, 0x6820, 0xa086,
--      0x8001, 0x1904, 0x2faa, 0x2009, 0x0004, 0x0804, 0x2fcf, 0x0016,
--      0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a, 0x8108, 0x280a,
--      0x8108, 0x1f04, 0x3cd9, 0x001e, 0x0005, 0x0016, 0x00a6, 0x00b6,
--      0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054, 0x8000, 0x205c,
--      0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108, 0x280a, 0x00be,
--      0x00ae, 0x001e, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
--      0x2fcf, 0x60d4, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005,
--      0x0804, 0x2fcf, 0x7924, 0x2140, 0xa18c, 0xff00, 0x810f, 0x60d4,
--      0xd0ac, 0x1120, 0xa182, 0x0080, 0x0a04, 0x2fd2, 0xa182, 0x00ff,
--      0x1a04, 0x2fd2, 0x7a2c, 0x7b28, 0x6070, 0xa306, 0x1140, 0x6074,
--      0xa24e, 0x0904, 0x2fd2, 0xa9cc, 0xff00, 0x0904, 0x2fd2, 0x00c6,
--      0x080c, 0x3dc4, 0x2c68, 0x00ce, 0x0538, 0xa0c6, 0x4000, 0x1180,
--      0x00c6, 0x0006, 0x2d60, 0x2009, 0x0000, 0x080c, 0x524b, 0x1108,
--      0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x000e, 0x00ce, 0x0088,
--      0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060, 0xa0c6, 0x4008, 0x1118,
--      0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009, 0x1108, 0x0010, 0x2001,
--      0x4006, 0x2020, 0x0804, 0x2fac, 0x2d00, 0x7022, 0x0016, 0x00b6,
--      0x00c6, 0x00e6, 0x2c70, 0x080c, 0x85c1, 0x05d8, 0x2d00, 0x601a,
--      0x080c, 0xa021, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x3e76,
--      0x00ce, 0x2b70, 0x1150, 0x080c, 0x8617, 0x00ee, 0x00ce, 0x00be,
--      0x001e, 0x2009, 0x0002, 0x0804, 0x2fcf, 0x6837, 0x0000, 0x683b,
--      0x0000, 0x2d00, 0x6012, 0x6833, 0x0000, 0x6838, 0xc0fd, 0xd88c,
--      0x0108, 0xc0f5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2c9c,
--      0x012e, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x4eec, 0x2001,
--      0x0002, 0x080c, 0x4efe, 0x2009, 0x0002, 0x080c, 0x8646, 0xa085,
--      0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x1120, 0x2009, 0x0003,
--      0x0804, 0x2fcf, 0x7007, 0x0003, 0x701b, 0x3da7, 0x0005, 0x6830,
--      0xa086, 0x0100, 0x7020, 0x2060, 0x1138, 0x2009, 0x0004, 0x6204,
--      0xa294, 0x00ff, 0x0804, 0x2fcf, 0x2009, 0x0000, 0x6838, 0xd0f4,
--      0x1904, 0x2faa, 0x080c, 0x524b, 0x1108, 0xc185, 0x6000, 0xd0bc,
--      0x0108, 0xc18d, 0x0804, 0x2faa, 0x00e6, 0x00d6, 0x2029, 0x0000,
--      0x2001, 0xb535, 0x2004, 0xd0ac, 0x0138, 0x2021, 0x0000, 0x20a9,
--      0x00ff, 0x2071, 0xb635, 0x0030, 0x2021, 0x0080, 0x20a9, 0x007f,
--      0x2071, 0xb6b5, 0x2e04, 0xa005, 0x1130, 0x2100, 0xa406, 0x1570,
--      0x2428, 0xc5fd, 0x0458, 0x2068, 0x6f10, 0x2700, 0xa306, 0x11b0,
--      0x6e14, 0x2600, 0xa206, 0x1190, 0x2400, 0xa106, 0x1160, 0x2d60,
--      0xd884, 0x0568, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1538,
--      0x2001, 0x4000, 0x0428, 0x2001, 0x4007, 0x0410, 0x2400, 0xa106,
--      0x1168, 0x6e14, 0x87ff, 0x1138, 0x86ff, 0x09d0, 0x2001, 0xb535,
--      0x2004, 0xd0ac, 0x19a8, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70,
--      0x1f04, 0x3dda, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001,
--      0x0001, 0x0030, 0x080c, 0x4f4e, 0x1dd0, 0x6312, 0x6216, 0xa006,
--      0xa005, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x1904, 0x2fcf, 0x080c,
--      0x3e76, 0x0904, 0x2fcf, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a,
--      0x7824, 0xa005, 0x0904, 0x2fd2, 0xa096, 0x00ff, 0x0120, 0xa092,
--      0x0004, 0x1a04, 0x2fd2, 0x2010, 0x2d18, 0x080c, 0x2c4f, 0x0904,
--      0x2fcf, 0x7007, 0x0003, 0x701b, 0x3e46, 0x0005, 0x6830, 0xa086,
--      0x0100, 0x0904, 0x2fcf, 0x0804, 0x2faa, 0x7924, 0xa18c, 0xff00,
-+      0x6100, 0xa18c, 0x0200, 0x0804, 0x2faa, 0x7824, 0xa09c, 0x0003,
-+      0xd0b4, 0x1160, 0xa39a, 0x0003, 0x1a04, 0x2fcf, 0x6250, 0xa294,
-+      0x00ff, 0xa084, 0xff00, 0x8007, 0xa206, 0x1150, 0x2001, 0xb540,
-+      0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3eb9,
-+      0x81ff, 0x1904, 0x2fcf, 0x080c, 0x3e9a, 0x0904, 0x2fd2, 0x6004,
-+      0xa084, 0x00ff, 0xa086, 0x0006, 0x1904, 0x2fcf, 0x00c6, 0x080c,
-+      0x3e75, 0x00ce, 0x0904, 0x2fcf, 0x6837, 0x0000, 0x6838, 0xc0fd,
-+      0x683a, 0x080c, 0x9d86, 0x0904, 0x2fcf, 0x7007, 0x0003, 0x701b,
-+      0x3b6a, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, 0x2fcf, 0xad80,
-+      0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804,
-+      0x3eb9, 0xa006, 0x080c, 0x2867, 0x7824, 0xa084, 0x00ff, 0xa086,
-+      0x00ff, 0x0118, 0x81ff, 0x1904, 0x2fcf, 0x080c, 0x5acf, 0x0110,
-+      0x080c, 0x4bf0, 0x7828, 0xa08a, 0x1000, 0x1a04, 0x2fd2, 0x7924,
-+      0xa18c, 0xff00, 0x810f, 0xa186, 0x00ff, 0x0138, 0xa182, 0x007f,
-+      0x1a04, 0x2fd2, 0x2100, 0x080c, 0x2831, 0x0026, 0x00c6, 0x0126,
-+      0x2091, 0x8000, 0x2061, 0xb7f3, 0x601b, 0x0000, 0x601f, 0x0000,
-+      0x080c, 0x5acf, 0x1178, 0x2001, 0xb79f, 0x2003, 0x0001, 0x2001,
-+      0xb500, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5b13, 0x080c,
-+      0x5a07, 0x0420, 0x2011, 0x0003, 0x080c, 0x8075, 0x2011, 0x0002,
-+      0x080c, 0x807f, 0x080c, 0x7f59, 0x0036, 0x2019, 0x0000, 0x080c,
-+      0x7fe4, 0x003e, 0x2061, 0x0100, 0x2001, 0xb515, 0x2004, 0xa084,
-+      0x00ff, 0x810f, 0xa105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010,
-+      0x2009, 0x002d, 0x2011, 0x4b54, 0x080c, 0x6a22, 0x7924, 0xa18c,
-+      0xff00, 0x810f, 0x080c, 0x5acf, 0x1110, 0x2009, 0x00ff, 0x7a28,
-+      0x080c, 0x3acc, 0x012e, 0x00ce, 0x002e, 0x0804, 0x2faa, 0x7924,
-+      0xa18c, 0xff00, 0x810f, 0x00c6, 0x080c, 0x4f4d, 0x2c08, 0x00ce,
-+      0x1904, 0x2fd2, 0x0804, 0x2faa, 0x81ff, 0x0120, 0x2009, 0x0001,
-+      0x0804, 0x2fcf, 0x60d4, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009,
-+      0x0005, 0x0804, 0x2fcf, 0x080c, 0x3e75, 0x1120, 0x2009, 0x0002,
-+      0x0804, 0x2fcf, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c,
-+      0x3eb6, 0x701b, 0x3c1c, 0x0005, 0x2009, 0x0080, 0x080c, 0x4fa9,
-+      0x1130, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0120, 0x2021,
-+      0x400a, 0x0804, 0x2fac, 0x00d6, 0xade8, 0x000d, 0x6900, 0x6a08,
-+      0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be, 0x0100, 0x0904,
-+      0x3c93, 0xa0be, 0x0112, 0x0904, 0x3c93, 0xa0be, 0x0113, 0x0904,
-+      0x3c93, 0xa0be, 0x0114, 0x0904, 0x3c93, 0xa0be, 0x0117, 0x0904,
-+      0x3c93, 0xa0be, 0x011a, 0x0904, 0x3c93, 0xa0be, 0x011c, 0x0904,
-+      0x3c93, 0xa0be, 0x0121, 0x05b0, 0xa0be, 0x0131, 0x0598, 0xa0be,
-+      0x0171, 0x05c8, 0xa0be, 0x0173, 0x05b0, 0xa0be, 0x01a1, 0x1120,
-+      0x6830, 0x8007, 0x6832, 0x04a8, 0xa0be, 0x0212, 0x0540, 0xa0be,
-+      0x0213, 0x0528, 0xa0be, 0x0214, 0x01b0, 0xa0be, 0x0217, 0x0168,
-+      0xa0be, 0x021a, 0x1120, 0x6838, 0x8007, 0x683a, 0x00e0, 0xa0be,
-+      0x0300, 0x01c8, 0x00de, 0x0804, 0x2fd2, 0xad80, 0x0010, 0x20a9,
-+      0x0007, 0x080c, 0x3cd9, 0xad80, 0x000e, 0x20a9, 0x0001, 0x080c,
-+      0x3cd9, 0x0048, 0xad80, 0x000c, 0x080c, 0x3ce7, 0x0050, 0xad80,
-+      0x000e, 0x080c, 0x3ce7, 0xad80, 0x000c, 0x20a9, 0x0001, 0x080c,
-+      0x3cd9, 0x00c6, 0x080c, 0x3e75, 0x0568, 0x6838, 0xc0fd, 0x683a,
-+      0x6837, 0x0119, 0x6853, 0x0000, 0x684f, 0x0020, 0x685b, 0x0001,
-+      0x810b, 0x697e, 0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92,
-+      0x6996, 0x689b, 0x0000, 0x00ce, 0x00de, 0x6837, 0x0000, 0x6838,
-+      0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804, 0x2068, 0x080c, 0x9da2,
-+      0x1120, 0x2009, 0x0003, 0x0804, 0x2fcf, 0x7007, 0x0003, 0x701b,
-+      0x3cd0, 0x0005, 0x00ce, 0x00de, 0x2009, 0x0002, 0x0804, 0x2fcf,
-+      0x6820, 0xa086, 0x8001, 0x1904, 0x2faa, 0x2009, 0x0004, 0x0804,
-+      0x2fcf, 0x0016, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a,
-+      0x8108, 0x280a, 0x8108, 0x1f04, 0x3cdb, 0x001e, 0x0005, 0x0016,
-+      0x00a6, 0x00b6, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054,
-+      0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108,
-+      0x280a, 0x00be, 0x00ae, 0x001e, 0x0005, 0x81ff, 0x0120, 0x2009,
-+      0x0001, 0x0804, 0x2fcf, 0x60d4, 0xd0ac, 0x1130, 0xd09c, 0x1120,
-+      0x2009, 0x0005, 0x0804, 0x2fcf, 0x7924, 0x2140, 0xa18c, 0xff00,
-       0x810f, 0x60d4, 0xd0ac, 0x1120, 0xa182, 0x0080, 0x0a04, 0x2fd2,
--      0xa182, 0x00ff, 0x1a04, 0x2fd2, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x9c84, 0x1188, 0xa190, 0xb635, 0x2204, 0xa065, 0x0160, 0x080c,
--      0x4c0c, 0x2001, 0xb535, 0x2004, 0xd0ac, 0x0110, 0x6017, 0x0000,
--      0x012e, 0x0804, 0x2faa, 0x012e, 0x0804, 0x2fcf, 0x080c, 0x15f8,
--      0x0188, 0xa006, 0x6802, 0x7010, 0xa005, 0x1120, 0x2d00, 0x7012,
--      0x7016, 0x0030, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016,
--      0xad80, 0x000d, 0x0005, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x080c,
--      0x4faa, 0x1130, 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0208,
--      0xa066, 0x8cff, 0x0005, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x080c,
--      0x4faa, 0x1128, 0xa6b4, 0x00ff, 0xa682, 0x4000, 0x0208, 0xa066,
--      0x8cff, 0x0005, 0x0016, 0x7110, 0x81ff, 0x0128, 0x2168, 0x6904,
--      0x080c, 0x160f, 0x0cc8, 0x7112, 0x7116, 0x001e, 0x0005, 0x2031,
--      0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0xb5d2, 0x6606, 0x6112,
--      0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c, 0x1643,
--      0x7007, 0x0002, 0x701b, 0x2faa, 0x0005, 0x00f6, 0x0126, 0x2091,
--      0x8000, 0x2079, 0x0000, 0x2001, 0xb590, 0x2004, 0xa005, 0x1168,
--      0x0e04, 0x3ee5, 0x7818, 0xd084, 0x1140, 0x7a22, 0x7b26, 0x7c2a,
--      0x781b, 0x0001, 0x2091, 0x4080, 0x0408, 0x0016, 0x00c6, 0x00e6,
--      0x2071, 0xb582, 0x7138, 0xa182, 0x0010, 0x0218, 0x7030, 0x2060,
--      0x0078, 0x7030, 0xa0e0, 0x0004, 0xac82, 0xb5d2, 0x0210, 0x2061,
--      0xb592, 0x2c00, 0x7032, 0x81ff, 0x1108, 0x7036, 0x8108, 0x713a,
--      0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x001e, 0x012e, 0x00fe,
--      0x0005, 0x00e6, 0x2071, 0xb582, 0x7038, 0xa005, 0x0570, 0x0126,
--      0x2091, 0x8000, 0x0e04, 0x3f3c, 0x00f6, 0x2079, 0x0000, 0x7818,
--      0xd084, 0x1508, 0x00c6, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004,
--      0x7826, 0x6008, 0x782a, 0x781b, 0x0001, 0x2091, 0x4080, 0x7038,
--      0x8001, 0x703a, 0xa005, 0x1130, 0x7033, 0xb592, 0x7037, 0xb592,
--      0x00ce, 0x0048, 0xac80, 0x0004, 0xa0fa, 0xb5d2, 0x0210, 0x2001,
--      0xb592, 0x7036, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x0026,
--      0x2001, 0xb553, 0x2004, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c,
--      0x3ecd, 0x002e, 0x0005, 0x81ff, 0x1904, 0x2fcf, 0x0126, 0x2091,
--      0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x5ad0,
--      0x1178, 0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003,
--      0x0001, 0xa085, 0x0001, 0x080c, 0x5b14, 0x080c, 0x5a08, 0x0010,
--      0x080c, 0x4b20, 0x012e, 0x0804, 0x2faa, 0x7824, 0x2008, 0xa18c,
--      0xfffd, 0x1128, 0x61e0, 0xa10d, 0x61e2, 0x0804, 0x2faa, 0x0804,
--      0x2fd2, 0x81ff, 0x1904, 0x2fcf, 0x6000, 0xa086, 0x0003, 0x1904,
--      0x2fcf, 0x2001, 0xb553, 0x2004, 0xd0ac, 0x1904, 0x2fcf, 0x080c,
--      0x3e9b, 0x0904, 0x2fd2, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
--      0x1120, 0x7828, 0xa005, 0x0904, 0x2faa, 0x00c6, 0x080c, 0x3e76,
--      0x00ce, 0x0904, 0x2fcf, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838,
--      0xc0fd, 0x683a, 0x080c, 0x9e65, 0x0904, 0x2fcf, 0x7007, 0x0003,
--      0x701b, 0x3fab, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, 0x2fcf,
--      0x0804, 0x2faa, 0x2001, 0xb500, 0x2004, 0xa086, 0x0003, 0x1904,
--      0x2fcf, 0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3e76,
--      0x0904, 0x2fcf, 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000,
--      0x702f, 0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, 0x080c, 0x4faa,
--      0x1904, 0x4025, 0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0130,
--      0xa0c4, 0xff00, 0xa8c6, 0x0600, 0x1904, 0x4025, 0x2001, 0xb553,
--      0x2004, 0xd0ac, 0x1128, 0x080c, 0x524b, 0x1110, 0xd79c, 0x05e8,
--      0xd794, 0x1110, 0xd784, 0x0158, 0xac80, 0x0006, 0x2098, 0x3400,
--      0x20a9, 0x0004, 0x53a3, 0x080c, 0x3ce5, 0xd794, 0x0148, 0xac80,
--      0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x080c, 0x3ce5,
--      0x21a2, 0xd794, 0x01d8, 0xac80, 0x0000, 0x2098, 0x94a0, 0x20a9,
--      0x0002, 0x53a3, 0xac80, 0x0003, 0x20a6, 0x94a0, 0xac80, 0x0004,
--      0x2098, 0x3400, 0x20a9, 0x0002, 0x53a3, 0x080c, 0x3cd7, 0xac80,
--      0x0026, 0x2098, 0x20a9, 0x0002, 0x53a3, 0x0008, 0x94a0, 0xd794,
--      0x0110, 0xa6b0, 0x000b, 0xa6b0, 0x0005, 0x8108, 0x2001, 0xb535,
--      0x2004, 0xd0ac, 0x0118, 0xa186, 0x0100, 0x0040, 0xd78c, 0x0120,
--      0xa186, 0x0100, 0x0170, 0x0018, 0xa186, 0x007e, 0x0150, 0xd794,
--      0x0118, 0xa686, 0x0020, 0x0010, 0xa686, 0x0028, 0x0150, 0x0804,
--      0x3fce, 0x86ff, 0x1120, 0x7120, 0x810b, 0x0804, 0x2faa, 0x702f,
--      0x0001, 0x711e, 0x7020, 0xa600, 0x7022, 0x772a, 0x2061, 0xb5d2,
--      0x6007, 0x0000, 0x6612, 0x7024, 0x600e, 0x6226, 0x632a, 0x642e,
--      0x6532, 0x2c10, 0x080c, 0x1643, 0x7007, 0x0002, 0x701b, 0x4061,
--      0x0005, 0x702c, 0xa005, 0x1170, 0x711c, 0x7024, 0x20a0, 0x7728,
--      0x2031, 0x0000, 0x2061, 0xb5d2, 0x6224, 0x6328, 0x642c, 0x6530,
--      0x0804, 0x3fce, 0x7120, 0x810b, 0x0804, 0x2faa, 0x2029, 0x007e,
--      0x7924, 0x7a28, 0x7b2c, 0x7c38, 0xa184, 0xff00, 0x8007, 0xa0e2,
--      0x0020, 0x0a04, 0x2fd2, 0xa502, 0x0a04, 0x2fd2, 0xa184, 0x00ff,
--      0xa0e2, 0x0020, 0x0a04, 0x2fd2, 0xa502, 0x0a04, 0x2fd2, 0xa284,
--      0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x2fd2, 0xa502, 0x0a04,
--      0x2fd2, 0xa284, 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x2fd2, 0xa502,
--      0x0a04, 0x2fd2, 0xa384, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04,
--      0x2fd2, 0xa502, 0x0a04, 0x2fd2, 0xa384, 0x00ff, 0xa0e2, 0x0020,
--      0x0a04, 0x2fd2, 0xa502, 0x0a04, 0x2fd2, 0xa484, 0xff00, 0x8007,
--      0xa0e2, 0x0020, 0x0a04, 0x2fd2, 0xa502, 0x0a04, 0x2fd2, 0xa484,
--      0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x2fd2, 0xa502, 0x0a04, 0x2fd2,
--      0x2061, 0xb7b9, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x2faa,
--      0x0006, 0x2001, 0xb553, 0x2004, 0xd0cc, 0x000e, 0x0005, 0x0006,
--      0x2001, 0xb572, 0x2004, 0xd0bc, 0x000e, 0x0005, 0x6168, 0x7a24,
--      0x6300, 0x82ff, 0x1118, 0x7926, 0x0804, 0x2faa, 0x83ff, 0x1904,
--      0x2fd2, 0x2001, 0xfff0, 0xa200, 0x1a04, 0x2fd2, 0x2019, 0xffff,
--      0x606c, 0xa302, 0xa200, 0x0a04, 0x2fd2, 0x7926, 0x626a, 0x0804,
--      0x2faa, 0x2001, 0xb500, 0x2004, 0xa086, 0x0003, 0x1904, 0x2fcf,
--      0x7c28, 0x7d24, 0x7e38, 0x7f2c, 0x080c, 0x3e76, 0x0904, 0x2fcf,
--      0x2009, 0x0000, 0x2019, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000,
--      0xad80, 0x0003, 0x7026, 0x20a0, 0xa1e0, 0xb635, 0x2c64, 0x8cff,
--      0x01b8, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0130, 0x6004,
--      0xa084, 0xff00, 0xa086, 0x0600, 0x1158, 0x6014, 0x20a2, 0x94a0,
--      0x6010, 0x8007, 0xa105, 0x8007, 0x20a2, 0x94a0, 0xa398, 0x0002,
--      0x8108, 0xa182, 0x00ff, 0x0120, 0xa386, 0x002a, 0x0148, 0x08e0,
--      0x83ff, 0x1120, 0x7120, 0x810c, 0x0804, 0x2faa, 0x702f, 0x0001,
--      0x711e, 0x7020, 0xa300, 0x7022, 0x2061, 0xb5d2, 0x6007, 0x0000,
--      0x6312, 0x7024, 0x600e, 0x6426, 0x652a, 0x662e, 0x6732, 0x2c10,
--      0x080c, 0x1643, 0x7007, 0x0002, 0x701b, 0x4157, 0x0005, 0x702c,
--      0xa005, 0x1168, 0x711c, 0x7024, 0x20a0, 0x2019, 0x0000, 0x2061,
--      0xb5d2, 0x6424, 0x6528, 0x662c, 0x6730, 0x0804, 0x4114, 0x7120,
--      0x810c, 0x0804, 0x2faa, 0x81ff, 0x1904, 0x2fcf, 0x60d4, 0xd0ac,
--      0x1118, 0xd09c, 0x0904, 0x2fcf, 0x080c, 0x3e76, 0x0904, 0x2fcf,
--      0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3eb7, 0x701b,
--      0x4182, 0x0005, 0x00d6, 0xade8, 0x000d, 0x6828, 0xa0be, 0x7000,
--      0x0148, 0xa0be, 0x7100, 0x0130, 0xa0be, 0x7200, 0x0118, 0x00de,
--      0x0804, 0x2fd2, 0x6820, 0x6924, 0x080c, 0x281d, 0x1510, 0x080c,
--      0x4f4e, 0x11f8, 0x7122, 0x6612, 0x6516, 0x6e18, 0x00c6, 0x080c,
--      0x3e76, 0x01b8, 0x080c, 0x3e76, 0x01a0, 0x00ce, 0x00de, 0x6837,
--      0x0000, 0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804, 0x2068,
--      0x080c, 0x9db8, 0x0904, 0x2fcf, 0x7007, 0x0003, 0x701b, 0x41bc,
--      0x0005, 0x00de, 0x0804, 0x2fcf, 0x7120, 0x080c, 0x2d97, 0x6820,
--      0xa086, 0x8001, 0x0904, 0x2fcf, 0x2d00, 0x701e, 0x6804, 0xa080,
--      0x0002, 0x0006, 0x20a9, 0x002a, 0x2098, 0x20a0, 0x080c, 0x4b90,
--      0x000e, 0xade8, 0x000d, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x2061,
--      0xb5d2, 0x6007, 0x0000, 0x6e00, 0x6f28, 0xa7c6, 0x7000, 0x1108,
--      0x0018, 0xa7c6, 0x7100, 0x1140, 0xa6c2, 0x0004, 0x0a04, 0x2fd2,
--      0x2009, 0x0004, 0x0804, 0x3eba, 0xa7c6, 0x7200, 0x1904, 0x2fd2,
--      0xa6c2, 0x0054, 0x0a04, 0x2fd2, 0x600e, 0x6013, 0x002a, 0x6226,
--      0x632a, 0x642e, 0x6532, 0x2c10, 0x080c, 0x1643, 0x7007, 0x0002,
--      0x701b, 0x4203, 0x0005, 0x701c, 0x2068, 0x6804, 0xa080, 0x0001,
--      0x2004, 0xa080, 0x0002, 0x0006, 0x20a9, 0x002a, 0x2098, 0x20a0,
--      0x080c, 0x4b90, 0x000e, 0x2009, 0x002a, 0x2061, 0xb5d2, 0x6224,
--      0x6328, 0x642c, 0x6530, 0x0804, 0x3eba, 0x81ff, 0x1904, 0x2fcf,
--      0x792c, 0x2001, 0xb7a0, 0x2102, 0x080c, 0x3e8b, 0x0904, 0x2fd2,
--      0x080c, 0x5070, 0x0904, 0x2fcf, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x51a2, 0x012e, 0x0804, 0x2faa, 0x7824, 0xd08c, 0x1118, 0xd084,
--      0x0904, 0x3a46, 0x080c, 0x3e9b, 0x0904, 0x2fd2, 0x00c6, 0x080c,
--      0x3e76, 0x00ce, 0x1120, 0x2009, 0x0002, 0x0804, 0x2fcf, 0x6004,
--      0xa084, 0x00ff, 0xa086, 0x0006, 0x0128, 0xa08e, 0x0004, 0x0110,
--      0xa08e, 0x0005, 0x15b8, 0x7824, 0xd08c, 0x0120, 0x6000, 0xc08c,
--      0x6002, 0x0030, 0x2001, 0xb553, 0x2004, 0xd0b4, 0x0904, 0x3a82,
--      0x7824, 0xa084, 0xff00, 0xa08e, 0x7e00, 0x0904, 0x3a82, 0xa08e,
--      0x7f00, 0x0904, 0x3a82, 0xa08e, 0x8000, 0x0904, 0x3a82, 0x6000,
--      0xd08c, 0x1904, 0x3a82, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a,
--      0x080c, 0x9dd4, 0x1120, 0x2009, 0x0003, 0x0804, 0x2fcf, 0x7007,
--      0x0003, 0x701b, 0x4284, 0x0005, 0x080c, 0x3e9b, 0x0904, 0x2fd2,
--      0x0804, 0x3a82, 0x2009, 0xb531, 0x210c, 0x81ff, 0x0120, 0x2009,
--      0x0001, 0x0804, 0x2fcf, 0x2001, 0xb500, 0x2004, 0xa086, 0x0003,
--      0x0120, 0x2009, 0x0007, 0x0804, 0x2fcf, 0x2001, 0xb553, 0x2004,
--      0xd0ac, 0x0120, 0x2009, 0x0008, 0x0804, 0x2fcf, 0x609c, 0xd0a4,
--      0x1118, 0xd0ac, 0x1904, 0x3a82, 0x6837, 0x0000, 0x6833, 0x0000,
--      0x6838, 0xc0fd, 0x683a, 0x080c, 0x9e65, 0x1120, 0x2009, 0x0003,
--      0x0804, 0x2fcf, 0x7007, 0x0003, 0x701b, 0x42bf, 0x0005, 0x6830,
--      0xa086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x2fcf, 0x080c,
--      0x3e9b, 0x0904, 0x2fd2, 0x0804, 0x4253, 0x81ff, 0x2009, 0x0001,
--      0x1904, 0x2fcf, 0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x1904,
--      0x2fcf, 0x2001, 0xb553, 0x2004, 0xd0ac, 0x2009, 0x0008, 0x1904,
--      0x2fcf, 0x080c, 0x3e9b, 0x0904, 0x2fd2, 0x6004, 0xa084, 0x00ff,
--      0xa086, 0x0006, 0x2009, 0x0009, 0x1904, 0x2fcf, 0x00c6, 0x080c,
--      0x3e76, 0x00ce, 0x2009, 0x0002, 0x0904, 0x2fcf, 0x6837, 0x0000,
--      0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x7928, 0xa194, 0xff00,
--      0xa18c, 0x00ff, 0xa006, 0x82ff, 0x1128, 0xc0ed, 0x6952, 0x792c,
--      0x6956, 0x0048, 0xa28e, 0x0100, 0x1904, 0x2fd2, 0xc0e5, 0x6853,
--      0x0000, 0x6857, 0x0000, 0x683e, 0x080c, 0xa022, 0x2009, 0x0003,
--      0x0904, 0x2fcf, 0x7007, 0x0003, 0x701b, 0x431f, 0x0005, 0x6830,
--      0xa086, 0x0100, 0x2009, 0x0004, 0x0904, 0x2fcf, 0x0804, 0x2faa,
--      0x81ff, 0x2009, 0x0001, 0x1904, 0x2fcf, 0x6000, 0xa086, 0x0003,
--      0x2009, 0x0007, 0x1904, 0x2fcf, 0x080c, 0x3e9b, 0x0904, 0x2fd2,
--      0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x2009, 0x0009, 0x1904,
--      0x2fcf, 0x00c6, 0x080c, 0x3e76, 0x00ce, 0x2009, 0x0002, 0x0904,
--      0x2fcf, 0xad80, 0x000f, 0x2009, 0x0008, 0x7a2c, 0x7b28, 0x7c3c,
--      0x7d38, 0x080c, 0x3eb7, 0x701b, 0x4356, 0x0005, 0x00d6, 0xade8,
--      0x000f, 0x6800, 0xa086, 0x0500, 0x1140, 0x6804, 0xa005, 0x1128,
--      0x6808, 0xa084, 0xff00, 0x1108, 0x0018, 0x00de, 0x1904, 0x2fd2,
--      0x00de, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
--      0x00c6, 0x080c, 0x3e9b, 0x1118, 0x00ce, 0x0804, 0x2fd2, 0x080c,
--      0xa071, 0x2009, 0x0003, 0x00ce, 0x0904, 0x2fcf, 0x7007, 0x0003,
--      0x701b, 0x4383, 0x0005, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004,
--      0x0904, 0x2fcf, 0x0804, 0x2faa, 0x81ff, 0x0120, 0x2009, 0x0001,
--      0x0804, 0x2fcf, 0x6000, 0xa086, 0x0003, 0x0120, 0x2009, 0x0007,
--      0x0804, 0x2fcf, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0xa6b4, 0x00ff,
--      0x080c, 0x4faa, 0x1904, 0x2fd2, 0xa186, 0x007f, 0x0150, 0x6004,
--      0xa084, 0x00ff, 0xa086, 0x0006, 0x0120, 0x2009, 0x0009, 0x0804,
--      0x2fcf, 0x00c6, 0x080c, 0x3e76, 0x00ce, 0x1120, 0x2009, 0x0002,
--      0x0804, 0x2fcf, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x2001,
--      0x0100, 0x8007, 0x680a, 0x080c, 0x9def, 0x1120, 0x2009, 0x0003,
--      0x0804, 0x2fcf, 0x7007, 0x0003, 0x701b, 0x43cf, 0x0005, 0x6808,
--      0x8007, 0xa086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x2fcf,
--      0x68b0, 0x6836, 0x6810, 0x8007, 0xa084, 0x00ff, 0x800c, 0x6814,
--      0x8007, 0xa084, 0x00ff, 0x8004, 0xa080, 0x0002, 0xa108, 0xad80,
--      0x0004, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3eba, 0x080c,
--      0x3e76, 0x1120, 0x2009, 0x0002, 0x0804, 0x2fcf, 0x7924, 0xa194,
--      0xff00, 0xa18c, 0x00ff, 0x8217, 0x82ff, 0x0110, 0x0804, 0x2fd2,
--      0x2009, 0x001a, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3eb7,
--      0x701b, 0x440b, 0x0005, 0x2001, 0xb52a, 0x2003, 0x0001, 0xad80,
--      0x000d, 0x2098, 0x20a9, 0x001a, 0x20a1, 0xb7c6, 0x53a3, 0x0804,
--      0x2faa, 0x080c, 0x3e76, 0x1120, 0x2009, 0x0002, 0x0804, 0x2fcf,
--      0x7924, 0xa194, 0xff00, 0xa18c, 0x00ff, 0x8217, 0x82ff, 0x0110,
--      0x0804, 0x2fd2, 0x2099, 0xb7c6, 0x20a0, 0x20a9, 0x001a, 0x53a3,
--      0x2009, 0x001a, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3eba,
--      0x7824, 0xa08a, 0x1000, 0x1a04, 0x2fd2, 0x0126, 0x2091, 0x8000,
--      0x8003, 0x800b, 0x810b, 0xa108, 0x00c6, 0x2061, 0xb7f3, 0x6142,
--      0x00ce, 0x012e, 0x0804, 0x2faa, 0x00c6, 0x080c, 0x5ad0, 0x1188,
-+      0xa182, 0x00ff, 0x1a04, 0x2fd2, 0x7a2c, 0x7b28, 0x6070, 0xa306,
-+      0x1140, 0x6074, 0xa24e, 0x0904, 0x2fd2, 0xa9cc, 0xff00, 0x0904,
-+      0x2fd2, 0x00c6, 0x080c, 0x3dc5, 0x2c68, 0x00ce, 0x0530, 0xa0c6,
-+      0x4000, 0x1178, 0x00c6, 0x0006, 0x2d60, 0xa00e, 0x080c, 0x524a,
-+      0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x000e, 0x00ce,
-+      0x0088, 0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060, 0xa0c6, 0x4008,
-+      0x1118, 0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009, 0x1108, 0x0010,
-+      0x2001, 0x4006, 0x2020, 0x0804, 0x2fac, 0x2d00, 0x7022, 0x0016,
-+      0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x85c7, 0x05d8, 0x2d00,
-+      0x601a, 0x080c, 0xa027, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c,
-+      0x3e75, 0x00ce, 0x2b70, 0x1150, 0x080c, 0x861d, 0x00ee, 0x00ce,
-+      0x00be, 0x001e, 0x2009, 0x0002, 0x0804, 0x2fcf, 0x6837, 0x0000,
-+      0x683b, 0x0000, 0x2d00, 0x6012, 0x6833, 0x0000, 0x6838, 0xc0fd,
-+      0xd88c, 0x0108, 0xc0f5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c,
-+      0x2c9c, 0x012e, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x4eeb,
-+      0x2001, 0x0002, 0x080c, 0x4efd, 0x2009, 0x0002, 0x080c, 0x864c,
-+      0xa085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x1120, 0x2009,
-+      0x0003, 0x0804, 0x2fcf, 0x7007, 0x0003, 0x701b, 0x3da8, 0x0005,
-+      0x6830, 0xa086, 0x0100, 0x7020, 0x2060, 0x1138, 0x2009, 0x0004,
-+      0x6204, 0xa294, 0x00ff, 0x0804, 0x2fcf, 0x2009, 0x0000, 0x6838,
-+      0xd0f4, 0x1904, 0x2faa, 0x080c, 0x524a, 0x1108, 0xc185, 0x6000,
-+      0xd0bc, 0x0108, 0xc18d, 0x0804, 0x2faa, 0x00e6, 0x00d6, 0xa02e,
-+      0x2001, 0xb535, 0x2004, 0xd0ac, 0x0130, 0xa026, 0x20a9, 0x00ff,
-+      0x2071, 0xb635, 0x0030, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071,
-+      0xb6b5, 0x2e04, 0xa005, 0x1130, 0x2100, 0xa406, 0x1570, 0x2428,
-+      0xc5fd, 0x0458, 0x2068, 0x6f10, 0x2700, 0xa306, 0x11b0, 0x6e14,
-+      0x2600, 0xa206, 0x1190, 0x2400, 0xa106, 0x1160, 0x2d60, 0xd884,
-+      0x0568, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1538, 0x2001,
-+      0x4000, 0x0428, 0x2001, 0x4007, 0x0410, 0x2400, 0xa106, 0x1168,
-+      0x6e14, 0x87ff, 0x1138, 0x86ff, 0x09d0, 0x2001, 0xb535, 0x2004,
-+      0xd0ac, 0x19a8, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04,
-+      0x3dd9, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001,
-+      0x0030, 0x080c, 0x4f4d, 0x1dd0, 0x6312, 0x6216, 0xa006, 0xa005,
-+      0x00de, 0x00ee, 0x0005, 0x81ff, 0x1904, 0x2fcf, 0x080c, 0x3e75,
-+      0x0904, 0x2fcf, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x7824,
-+      0xa005, 0x0904, 0x2fd2, 0xa096, 0x00ff, 0x0120, 0xa092, 0x0004,
-+      0x1a04, 0x2fd2, 0x2010, 0x2d18, 0x080c, 0x2c4f, 0x0904, 0x2fcf,
-+      0x7007, 0x0003, 0x701b, 0x3e45, 0x0005, 0x6830, 0xa086, 0x0100,
-+      0x0904, 0x2fcf, 0x0804, 0x2faa, 0x7924, 0xa18c, 0xff00, 0x810f,
-+      0x60d4, 0xd0ac, 0x1120, 0xa182, 0x0080, 0x0a04, 0x2fd2, 0xa182,
-+      0x00ff, 0x1a04, 0x2fd2, 0x0126, 0x2091, 0x8000, 0x080c, 0x9c8a,
-+      0x1188, 0xa190, 0xb635, 0x2204, 0xa065, 0x0160, 0x080c, 0x4c0b,
-+      0x2001, 0xb535, 0x2004, 0xd0ac, 0x0110, 0x6017, 0x0000, 0x012e,
-+      0x0804, 0x2faa, 0x012e, 0x0804, 0x2fcf, 0x080c, 0x15f8, 0x0188,
-+      0xa006, 0x6802, 0x7010, 0xa005, 0x1120, 0x2d00, 0x7012, 0x7016,
-+      0x0030, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80,
-+      0x000d, 0x0005, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x080c, 0x4fa9,
-+      0x1130, 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0208, 0xa066,
-+      0x8cff, 0x0005, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x080c, 0x4fa9,
-+      0x1128, 0xa6b4, 0x00ff, 0xa682, 0x4000, 0x0208, 0xa066, 0x8cff,
-+      0x0005, 0x0016, 0x7110, 0x81ff, 0x0128, 0x2168, 0x6904, 0x080c,
-+      0x160f, 0x0cc8, 0x7112, 0x7116, 0x001e, 0x0005, 0x2031, 0x0001,
-+      0x0010, 0x2031, 0x0000, 0x2061, 0xb5d2, 0x6606, 0x6112, 0x600e,
-+      0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c, 0x1643, 0x7007,
-+      0x0002, 0x701b, 0x2faa, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000,
-+      0x2079, 0x0000, 0x2001, 0xb590, 0x2004, 0xa005, 0x1168, 0x0e04,
-+      0x3ee4, 0x7818, 0xd084, 0x1140, 0x7a22, 0x7b26, 0x7c2a, 0x781b,
-+      0x0001, 0x2091, 0x4080, 0x0408, 0x0016, 0x00c6, 0x00e6, 0x2071,
-+      0xb582, 0x7138, 0xa182, 0x0010, 0x0218, 0x7030, 0x2060, 0x0078,
-+      0x7030, 0xa0e0, 0x0004, 0xac82, 0xb5d2, 0x0210, 0x2061, 0xb592,
-+      0x2c00, 0x7032, 0x81ff, 0x1108, 0x7036, 0x8108, 0x713a, 0x2262,
-+      0x6306, 0x640a, 0x00ee, 0x00ce, 0x001e, 0x012e, 0x00fe, 0x0005,
-+      0x00e6, 0x2071, 0xb582, 0x7038, 0xa005, 0x0570, 0x0126, 0x2091,
-+      0x8000, 0x0e04, 0x3f3b, 0x00f6, 0x2079, 0x0000, 0x7818, 0xd084,
-+      0x1508, 0x00c6, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826,
-+      0x6008, 0x782a, 0x781b, 0x0001, 0x2091, 0x4080, 0x7038, 0x8001,
-+      0x703a, 0xa005, 0x1130, 0x7033, 0xb592, 0x7037, 0xb592, 0x00ce,
-+      0x0048, 0xac80, 0x0004, 0xa0fa, 0xb5d2, 0x0210, 0x2001, 0xb592,
-+      0x7036, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x0026, 0x2001,
-+      0xb553, 0x2004, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x3ecc,
-+      0x002e, 0x0005, 0x81ff, 0x1904, 0x2fcf, 0x0126, 0x2091, 0x8000,
-+      0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x5acf, 0x1178,
-       0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003, 0x0001,
--      0xa085, 0x0001, 0x080c, 0x5b14, 0x080c, 0x5a08, 0x080c, 0x1515,
--      0x0038, 0x2061, 0xb500, 0x6030, 0xc09d, 0x6032, 0x080c, 0x4b20,
--      0x00ce, 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0xb7f3,
--      0x7924, 0x6152, 0x614e, 0x6057, 0x0000, 0x604b, 0x0009, 0x7838,
--      0x606a, 0x783c, 0x6066, 0x7828, 0x6062, 0x782c, 0x605e, 0x2061,
--      0xb7a1, 0x2001, 0xb808, 0x600e, 0x6013, 0x0001, 0x6017, 0x0002,
--      0x6007, 0x0000, 0x6037, 0x0000, 0x00ce, 0x012e, 0x0804, 0x2faa,
--      0x0126, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xb500, 0x6044,
--      0xd0a4, 0x11b0, 0xd084, 0x0118, 0x080c, 0x4607, 0x0068, 0xd08c,
--      0x0118, 0x080c, 0x4528, 0x0040, 0xd094, 0x0118, 0x080c, 0x44f9,
--      0x0018, 0xd09c, 0x0108, 0x0061, 0x00ee, 0x00ce, 0x012e, 0x0005,
--      0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0ca0,
--      0x624c, 0xa286, 0xf0f0, 0x1150, 0x6048, 0xa086, 0xf0f0, 0x0130,
--      0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0xa294, 0xff00,
--      0xa296, 0xf700, 0x0178, 0x7134, 0xd1a4, 0x1160, 0x6240, 0xa295,
--      0x0100, 0x6242, 0xa294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c,
--      0x4bb0, 0x00f0, 0x6040, 0xa084, 0x0010, 0xa085, 0x0140, 0x6042,
--      0x6043, 0x0000, 0x707b, 0x0000, 0x7097, 0x0001, 0x70bb, 0x0000,
--      0x70d7, 0x0000, 0x2009, 0xbcc0, 0x200b, 0x0000, 0x708b, 0x0000,
--      0x707f, 0x000a, 0x2009, 0x000a, 0x2011, 0x4ad6, 0x080c, 0x6a23,
--      0x0005, 0x0156, 0x2001, 0xb574, 0x2004, 0xd08c, 0x0110, 0x7053,
--      0xffff, 0x707c, 0xa005, 0x1510, 0x2011, 0x4ad6, 0x080c, 0x699d,
--      0x6040, 0xa094, 0x0010, 0xa285, 0x0020, 0x6042, 0x20a9, 0x00c8,
--      0x6044, 0xd08c, 0x1168, 0x1f04, 0x4510, 0x6242, 0x708f, 0x0000,
--      0x6040, 0xa094, 0x0010, 0xa285, 0x0080, 0x6042, 0x6242, 0x0030,
--      0x6242, 0x708f, 0x0000, 0x7083, 0x0000, 0x0000, 0x015e, 0x0005,
--      0x7080, 0xa08a, 0x0003, 0x1210, 0x0023, 0x0010, 0x080c, 0x1515,
--      0x0005, 0x4534, 0x4584, 0x4606, 0x00f6, 0x7083, 0x0001, 0x20e1,
--      0xa000, 0xe000, 0x20e1, 0x8700, 0x080c, 0x2470, 0x20e1, 0x9080,
--      0x20e1, 0x4000, 0x2079, 0xbb00, 0x207b, 0x2200, 0x7807, 0x00ef,
--      0x780b, 0x0000, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000,
--      0x781b, 0x0000, 0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff,
--      0x782b, 0x0000, 0x782f, 0x0000, 0x2079, 0xbb0c, 0x207b, 0x1101,
--      0x7807, 0x0000, 0x2099, 0xb505, 0x20a1, 0xbb0e, 0x20a9, 0x0004,
--      0x53a3, 0x2079, 0xbb12, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099,
--      0xbb00, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c,
--      0x600f, 0x0000, 0x080c, 0x4b07, 0x00fe, 0x7087, 0x0000, 0x6043,
--      0x0008, 0x6043, 0x0000, 0x0005, 0x00d6, 0x7084, 0x7087, 0x0000,
--      0xa025, 0x0904, 0x45ee, 0x6020, 0xd0b4, 0x1904, 0x45ec, 0x7194,
--      0x81ff, 0x0904, 0x45dc, 0xa486, 0x000c, 0x1904, 0x45e7, 0xa480,
--      0x0018, 0x8004, 0x20a8, 0x2011, 0xbb80, 0x2019, 0xbb00, 0x220c,
--      0x2304, 0xa106, 0x11b8, 0x8210, 0x8318, 0x1f04, 0x459f, 0x6043,
--      0x0004, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x7083,
--      0x0002, 0x708f, 0x0002, 0x2009, 0x07d0, 0x2011, 0x4add, 0x080c,
--      0x6a23, 0x0490, 0x2069, 0xbb80, 0x6930, 0xa18e, 0x1101, 0x1538,
--      0x6834, 0xa005, 0x1520, 0x6900, 0xa18c, 0x00ff, 0x1118, 0x6804,
--      0xa005, 0x0190, 0x2011, 0xbb8e, 0x2019, 0xb505, 0x20a9, 0x0004,
--      0x220c, 0x2304, 0xa102, 0x0230, 0x1190, 0x8210, 0x8318, 0x1f04,
--      0x45d0, 0x0068, 0x7097, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000,
--      0x2099, 0xbb80, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x6043,
--      0x0008, 0x6043, 0x0000, 0x0010, 0x00de, 0x0005, 0x6040, 0xa085,
--      0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, 0x60c3, 0x000c, 0x2011,
--      0xb7ea, 0x2013, 0x0000, 0x7087, 0x0000, 0x20e1, 0x9080, 0x60a3,
--      0x0056, 0x60a7, 0x9575, 0x080c, 0x7d72, 0x0c30, 0x0005, 0x708c,
--      0xa08a, 0x001d, 0x1210, 0x0023, 0x0010, 0x080c, 0x1515, 0x0005,
--      0x463a, 0x4649, 0x4671, 0x468a, 0x46ae, 0x46d6, 0x46fa, 0x472b,
--      0x474f, 0x4777, 0x47ae, 0x47d6, 0x47f2, 0x4808, 0x4828, 0x483b,
--      0x4843, 0x4873, 0x4897, 0x48bf, 0x48e3, 0x4914, 0x4951, 0x4980,
--      0x499c, 0x49db, 0x49fb, 0x4a14, 0x4a15, 0x00c6, 0x2061, 0xb500,
--      0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0xa084, 0xfff9, 0x6006,
--      0x00ce, 0x0005, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0002,
--      0x708f, 0x0001, 0x2009, 0x07d0, 0x2011, 0x4add, 0x080c, 0x6a23,
--      0x0005, 0x00f6, 0x7084, 0xa086, 0x0014, 0x1508, 0x6043, 0x0000,
--      0x6020, 0xd0b4, 0x11e0, 0x2079, 0xbb80, 0x7a30, 0xa296, 0x1102,
--      0x11a0, 0x7834, 0xa005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70b8,
--      0xa005, 0x1110, 0x70bb, 0x0001, 0x2011, 0x4add, 0x080c, 0x699d,
--      0x708f, 0x0010, 0x080c, 0x4843, 0x0010, 0x080c, 0x4b20, 0x00fe,
--      0x0005, 0x708f, 0x0003, 0x6043, 0x0004, 0x2011, 0x4add, 0x080c,
--      0x699d, 0x080c, 0x4b98, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9,
--      0x000a, 0x20a3, 0x0000, 0x1f04, 0x4681, 0x60c3, 0x0014, 0x080c,
--      0x4b07, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4add,
--      0x080c, 0x699d, 0xa086, 0x0014, 0x11a8, 0x2079, 0xbb80, 0x7a30,
--      0xa296, 0x1102, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc,
--      0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0004,
--      0x0029, 0x0010, 0x080c, 0x4b20, 0x00fe, 0x0005, 0x708f, 0x0005,
--      0x080c, 0x4b98, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011,
--      0xbb8e, 0x080c, 0x4be9, 0x1160, 0x7078, 0xa005, 0x1148, 0x7150,
--      0xa186, 0xffff, 0x0128, 0x080c, 0x4aa1, 0x0110, 0x080c, 0x4bc7,
-+      0xa085, 0x0001, 0x080c, 0x5b13, 0x080c, 0x5a07, 0x0010, 0x080c,
-+      0x4b1f, 0x012e, 0x0804, 0x2faa, 0x7824, 0x2008, 0xa18c, 0xfffd,
-+      0x1128, 0x61e0, 0xa10d, 0x61e2, 0x0804, 0x2faa, 0x0804, 0x2fd2,
-+      0x81ff, 0x1904, 0x2fcf, 0x6000, 0xa086, 0x0003, 0x1904, 0x2fcf,
-+      0x2001, 0xb553, 0x2004, 0xd0ac, 0x1904, 0x2fcf, 0x080c, 0x3e9a,
-+      0x0904, 0x2fd2, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1120,
-+      0x7828, 0xa005, 0x0904, 0x2faa, 0x00c6, 0x080c, 0x3e75, 0x00ce,
-+      0x0904, 0x2fcf, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd,
-+      0x683a, 0x080c, 0x9e6b, 0x0904, 0x2fcf, 0x7007, 0x0003, 0x701b,
-+      0x3faa, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, 0x2fcf, 0x0804,
-+      0x2faa, 0x2001, 0xb500, 0x2004, 0xa086, 0x0003, 0x1904, 0x2fcf,
-+      0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3e75, 0x0904,
-+      0x2fcf, 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, 0x702f,
-+      0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, 0x080c, 0x4fa9, 0x1904,
-+      0x4024, 0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0130, 0xa0c4,
-+      0xff00, 0xa8c6, 0x0600, 0x1904, 0x4024, 0x2001, 0xb553, 0x2004,
-+      0xd0ac, 0x1128, 0x080c, 0x524a, 0x1110, 0xd79c, 0x05e8, 0xd794,
-+      0x1110, 0xd784, 0x0158, 0xac80, 0x0006, 0x2098, 0x3400, 0x20a9,
-+      0x0004, 0x53a3, 0x080c, 0x3ce7, 0xd794, 0x0148, 0xac80, 0x000a,
-+      0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x080c, 0x3ce7, 0x21a2,
-+      0xd794, 0x01d8, 0xac80, 0x0000, 0x2098, 0x94a0, 0x20a9, 0x0002,
-+      0x53a3, 0xac80, 0x0003, 0x20a6, 0x94a0, 0xac80, 0x0004, 0x2098,
-+      0x3400, 0x20a9, 0x0002, 0x53a3, 0x080c, 0x3cd9, 0xac80, 0x0026,
-+      0x2098, 0x20a9, 0x0002, 0x53a3, 0x0008, 0x94a0, 0xd794, 0x0110,
-+      0xa6b0, 0x000b, 0xa6b0, 0x0005, 0x8108, 0x2001, 0xb535, 0x2004,
-+      0xd0ac, 0x0118, 0xa186, 0x0100, 0x0040, 0xd78c, 0x0120, 0xa186,
-+      0x0100, 0x0170, 0x0018, 0xa186, 0x007e, 0x0150, 0xd794, 0x0118,
-+      0xa686, 0x0020, 0x0010, 0xa686, 0x0028, 0x0150, 0x0804, 0x3fcd,
-+      0x86ff, 0x1120, 0x7120, 0x810b, 0x0804, 0x2faa, 0x702f, 0x0001,
-+      0x711e, 0x7020, 0xa600, 0x7022, 0x772a, 0x2061, 0xb5d2, 0x6007,
-+      0x0000, 0x6612, 0x7024, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532,
-+      0x2c10, 0x080c, 0x1643, 0x7007, 0x0002, 0x701b, 0x4060, 0x0005,
-+      0x702c, 0xa005, 0x1170, 0x711c, 0x7024, 0x20a0, 0x7728, 0x2031,
-+      0x0000, 0x2061, 0xb5d2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0804,
-+      0x3fcd, 0x7120, 0x810b, 0x0804, 0x2faa, 0x2029, 0x007e, 0x7924,
-+      0x7a28, 0x7b2c, 0x7c38, 0xa184, 0xff00, 0x8007, 0xa0e2, 0x0020,
-+      0x0a04, 0x2fd2, 0xa502, 0x0a04, 0x2fd2, 0xa184, 0x00ff, 0xa0e2,
-+      0x0020, 0x0a04, 0x2fd2, 0xa502, 0x0a04, 0x2fd2, 0xa284, 0xff00,
-+      0x8007, 0xa0e2, 0x0020, 0x0a04, 0x2fd2, 0xa502, 0x0a04, 0x2fd2,
-+      0xa284, 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x2fd2, 0xa502, 0x0a04,
-+      0x2fd2, 0xa384, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x2fd2,
-+      0xa502, 0x0a04, 0x2fd2, 0xa384, 0x00ff, 0xa0e2, 0x0020, 0x0a04,
-+      0x2fd2, 0xa502, 0x0a04, 0x2fd2, 0xa484, 0xff00, 0x8007, 0xa0e2,
-+      0x0020, 0x0a04, 0x2fd2, 0xa502, 0x0a04, 0x2fd2, 0xa484, 0x00ff,
-+      0xa0e2, 0x0020, 0x0a04, 0x2fd2, 0xa502, 0x0a04, 0x2fd2, 0x2061,
-+      0xb7b9, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x2faa, 0x0006,
-+      0x2001, 0xb553, 0x2004, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x2001,
-+      0xb572, 0x2004, 0xd0bc, 0x000e, 0x0005, 0x6168, 0x7a24, 0x6300,
-+      0x82ff, 0x1118, 0x7926, 0x0804, 0x2faa, 0x83ff, 0x1904, 0x2fd2,
-+      0x2001, 0xfff0, 0xa200, 0x1a04, 0x2fd2, 0x2019, 0xffff, 0x606c,
-+      0xa302, 0xa200, 0x0a04, 0x2fd2, 0x7926, 0x626a, 0x0804, 0x2faa,
-+      0x2001, 0xb500, 0x2004, 0xa086, 0x0003, 0x1904, 0x2fcf, 0x7c28,
-+      0x7d24, 0x7e38, 0x7f2c, 0x080c, 0x3e75, 0x0904, 0x2fcf, 0x2009,
-+      0x0000, 0x2019, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000, 0xad80,
-+      0x0003, 0x7026, 0x20a0, 0xa1e0, 0xb635, 0x2c64, 0x8cff, 0x01b8,
-+      0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0130, 0x6004, 0xa084,
-+      0xff00, 0xa086, 0x0600, 0x1158, 0x6014, 0x20a2, 0x94a0, 0x6010,
-+      0x8007, 0xa105, 0x8007, 0x20a2, 0x94a0, 0xa398, 0x0002, 0x8108,
-+      0xa182, 0x00ff, 0x0120, 0xa386, 0x002a, 0x0148, 0x08e0, 0x83ff,
-+      0x1120, 0x7120, 0x810c, 0x0804, 0x2faa, 0x702f, 0x0001, 0x711e,
-+      0x7020, 0xa300, 0x7022, 0x2061, 0xb5d2, 0x6007, 0x0000, 0x6312,
-+      0x7024, 0x600e, 0x6426, 0x652a, 0x662e, 0x6732, 0x2c10, 0x080c,
-+      0x1643, 0x7007, 0x0002, 0x701b, 0x4156, 0x0005, 0x702c, 0xa005,
-+      0x1168, 0x711c, 0x7024, 0x20a0, 0x2019, 0x0000, 0x2061, 0xb5d2,
-+      0x6424, 0x6528, 0x662c, 0x6730, 0x0804, 0x4113, 0x7120, 0x810c,
-+      0x0804, 0x2faa, 0x81ff, 0x1904, 0x2fcf, 0x60d4, 0xd0ac, 0x1118,
-+      0xd09c, 0x0904, 0x2fcf, 0x080c, 0x3e75, 0x0904, 0x2fcf, 0x7924,
-+      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3eb6, 0x701b, 0x4181,
-+      0x0005, 0x00d6, 0xade8, 0x000d, 0x6828, 0xa0be, 0x7000, 0x0148,
-+      0xa0be, 0x7100, 0x0130, 0xa0be, 0x7200, 0x0118, 0x00de, 0x0804,
-+      0x2fd2, 0x6820, 0x6924, 0x080c, 0x281d, 0x1510, 0x080c, 0x4f4d,
-+      0x11f8, 0x7122, 0x6612, 0x6516, 0x6e18, 0x00c6, 0x080c, 0x3e75,
-+      0x01b8, 0x080c, 0x3e75, 0x01a0, 0x00ce, 0x00de, 0x6837, 0x0000,
-+      0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804, 0x2068, 0x080c,
-+      0x9dbe, 0x0904, 0x2fcf, 0x7007, 0x0003, 0x701b, 0x41bb, 0x0005,
-+      0x00de, 0x0804, 0x2fcf, 0x7120, 0x080c, 0x2d97, 0x6820, 0xa086,
-+      0x8001, 0x0904, 0x2fcf, 0x2d00, 0x701e, 0x6804, 0xa080, 0x0002,
-+      0x0006, 0x20a9, 0x002a, 0x2098, 0x20a0, 0x080c, 0x4b8f, 0x000e,
-+      0xade8, 0x000d, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x2061, 0xb5d2,
-+      0x6007, 0x0000, 0x6e00, 0x6f28, 0xa7c6, 0x7000, 0x1108, 0x0018,
-+      0xa7c6, 0x7100, 0x1140, 0xa6c2, 0x0004, 0x0a04, 0x2fd2, 0x2009,
-+      0x0004, 0x0804, 0x3eb9, 0xa7c6, 0x7200, 0x1904, 0x2fd2, 0xa6c2,
-+      0x0054, 0x0a04, 0x2fd2, 0x600e, 0x6013, 0x002a, 0x6226, 0x632a,
-+      0x642e, 0x6532, 0x2c10, 0x080c, 0x1643, 0x7007, 0x0002, 0x701b,
-+      0x4202, 0x0005, 0x701c, 0x2068, 0x6804, 0xa080, 0x0001, 0x2004,
-+      0xa080, 0x0002, 0x0006, 0x20a9, 0x002a, 0x2098, 0x20a0, 0x080c,
-+      0x4b8f, 0x000e, 0x2009, 0x002a, 0x2061, 0xb5d2, 0x6224, 0x6328,
-+      0x642c, 0x6530, 0x0804, 0x3eb9, 0x81ff, 0x1904, 0x2fcf, 0x792c,
-+      0x2001, 0xb7a0, 0x2102, 0x080c, 0x3e8a, 0x0904, 0x2fd2, 0x080c,
-+      0x506f, 0x0904, 0x2fcf, 0x0126, 0x2091, 0x8000, 0x080c, 0x51a1,
-+      0x012e, 0x0804, 0x2faa, 0x7824, 0xd08c, 0x1118, 0xd084, 0x0904,
-+      0x3a46, 0x080c, 0x3e9a, 0x0904, 0x2fd2, 0x00c6, 0x080c, 0x3e75,
-+      0x00ce, 0x1120, 0x2009, 0x0002, 0x0804, 0x2fcf, 0x6004, 0xa084,
-+      0x00ff, 0xa086, 0x0006, 0x0128, 0xa08e, 0x0004, 0x0110, 0xa08e,
-+      0x0005, 0x15b8, 0x7824, 0xd08c, 0x0120, 0x6000, 0xc08c, 0x6002,
-+      0x0030, 0x2001, 0xb553, 0x2004, 0xd0b4, 0x0904, 0x3a82, 0x7824,
-+      0xa084, 0xff00, 0xa08e, 0x7e00, 0x0904, 0x3a82, 0xa08e, 0x7f00,
-+      0x0904, 0x3a82, 0xa08e, 0x8000, 0x0904, 0x3a82, 0x6000, 0xd08c,
-+      0x1904, 0x3a82, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c,
-+      0x9dda, 0x1120, 0x2009, 0x0003, 0x0804, 0x2fcf, 0x7007, 0x0003,
-+      0x701b, 0x4283, 0x0005, 0x080c, 0x3e9a, 0x0904, 0x2fd2, 0x0804,
-+      0x3a82, 0x2009, 0xb531, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001,
-+      0x0804, 0x2fcf, 0x2001, 0xb500, 0x2004, 0xa086, 0x0003, 0x0120,
-+      0x2009, 0x0007, 0x0804, 0x2fcf, 0x2001, 0xb553, 0x2004, 0xd0ac,
-+      0x0120, 0x2009, 0x0008, 0x0804, 0x2fcf, 0x609c, 0xd0a4, 0x1118,
-+      0xd0ac, 0x1904, 0x3a82, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838,
-+      0xc0fd, 0x683a, 0x080c, 0x9e6b, 0x1120, 0x2009, 0x0003, 0x0804,
-+      0x2fcf, 0x7007, 0x0003, 0x701b, 0x42be, 0x0005, 0x6830, 0xa086,
-+      0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x2fcf, 0x080c, 0x3e9a,
-+      0x0904, 0x2fd2, 0x0804, 0x4252, 0x81ff, 0x2009, 0x0001, 0x1904,
-+      0x2fcf, 0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x1904, 0x2fcf,
-+      0x2001, 0xb553, 0x2004, 0xd0ac, 0x2009, 0x0008, 0x1904, 0x2fcf,
-+      0x080c, 0x3e9a, 0x0904, 0x2fd2, 0x6004, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x2009, 0x0009, 0x1904, 0x2fcf, 0x00c6, 0x080c, 0x3e75,
-+      0x00ce, 0x2009, 0x0002, 0x0904, 0x2fcf, 0x6837, 0x0000, 0x6833,
-+      0x0000, 0x6838, 0xc0fd, 0x683a, 0x7928, 0xa194, 0xff00, 0xa18c,
-+      0x00ff, 0xa006, 0x82ff, 0x1128, 0xc0ed, 0x6952, 0x792c, 0x6956,
-+      0x0048, 0xa28e, 0x0100, 0x1904, 0x2fd2, 0xc0e5, 0x6853, 0x0000,
-+      0x6857, 0x0000, 0x683e, 0x080c, 0xa028, 0x2009, 0x0003, 0x0904,
-+      0x2fcf, 0x7007, 0x0003, 0x701b, 0x431e, 0x0005, 0x6830, 0xa086,
-+      0x0100, 0x2009, 0x0004, 0x0904, 0x2fcf, 0x0804, 0x2faa, 0x81ff,
-+      0x2009, 0x0001, 0x1904, 0x2fcf, 0x6000, 0xa086, 0x0003, 0x2009,
-+      0x0007, 0x1904, 0x2fcf, 0x080c, 0x3e9a, 0x0904, 0x2fd2, 0x6004,
-+      0xa084, 0x00ff, 0xa086, 0x0006, 0x2009, 0x0009, 0x1904, 0x2fcf,
-+      0x00c6, 0x080c, 0x3e75, 0x00ce, 0x2009, 0x0002, 0x0904, 0x2fcf,
-+      0xad80, 0x000f, 0x2009, 0x0008, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-+      0x080c, 0x3eb6, 0x701b, 0x4355, 0x0005, 0x00d6, 0xade8, 0x000f,
-+      0x6800, 0xa086, 0x0500, 0x1140, 0x6804, 0xa005, 0x1128, 0x6808,
-+      0xa084, 0xff00, 0x1108, 0x0018, 0x00de, 0x1904, 0x2fd2, 0x00de,
-+      0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x00c6,
-+      0x080c, 0x3e9a, 0x1118, 0x00ce, 0x0804, 0x2fd2, 0x080c, 0xa077,
-+      0x2009, 0x0003, 0x00ce, 0x0904, 0x2fcf, 0x7007, 0x0003, 0x701b,
-+      0x4382, 0x0005, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004, 0x0904,
-+      0x2fcf, 0x0804, 0x2faa, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
-+      0x2fcf, 0x6000, 0xa086, 0x0003, 0x0120, 0x2009, 0x0007, 0x0804,
-+      0x2fcf, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0xa6b4, 0x00ff, 0x080c,
-+      0x4fa9, 0x1904, 0x2fd2, 0xa186, 0x007f, 0x0150, 0x6004, 0xa084,
-+      0x00ff, 0xa086, 0x0006, 0x0120, 0x2009, 0x0009, 0x0804, 0x2fcf,
-+      0x00c6, 0x080c, 0x3e75, 0x00ce, 0x1120, 0x2009, 0x0002, 0x0804,
-+      0x2fcf, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x2001, 0x0100,
-+      0x8007, 0x680a, 0x080c, 0x9df5, 0x1120, 0x2009, 0x0003, 0x0804,
-+      0x2fcf, 0x7007, 0x0003, 0x701b, 0x43ce, 0x0005, 0x6808, 0x8007,
-+      0xa086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x2fcf, 0x68b0,
-+      0x6836, 0x6810, 0x8007, 0xa084, 0x00ff, 0x800c, 0x6814, 0x8007,
-+      0xa084, 0x00ff, 0x8004, 0xa080, 0x0002, 0xa108, 0xad80, 0x0004,
-+      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3eb9, 0x080c, 0x3e75,
-+      0x1120, 0x2009, 0x0002, 0x0804, 0x2fcf, 0x7924, 0xa194, 0xff00,
-+      0xa18c, 0x00ff, 0x8217, 0x82ff, 0x0110, 0x0804, 0x2fd2, 0x2009,
-+      0x001a, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3eb6, 0x701b,
-+      0x440a, 0x0005, 0x2001, 0xb52a, 0x2003, 0x0001, 0xad80, 0x000d,
-+      0x2098, 0x20a9, 0x001a, 0x20a1, 0xb7c6, 0x53a3, 0x0804, 0x2faa,
-+      0x080c, 0x3e75, 0x1120, 0x2009, 0x0002, 0x0804, 0x2fcf, 0x7924,
-+      0xa194, 0xff00, 0xa18c, 0x00ff, 0x8217, 0x82ff, 0x0110, 0x0804,
-+      0x2fd2, 0x2099, 0xb7c6, 0x20a0, 0x20a9, 0x001a, 0x53a3, 0x2009,
-+      0x001a, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3eb9, 0x7824,
-+      0xa08a, 0x1000, 0x1a04, 0x2fd2, 0x0126, 0x2091, 0x8000, 0x8003,
-+      0x800b, 0x810b, 0xa108, 0x00c6, 0x2061, 0xb7f3, 0x6142, 0x00ce,
-+      0x012e, 0x0804, 0x2faa, 0x00c6, 0x080c, 0x5acf, 0x1188, 0x2001,
-+      0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003, 0x0001, 0xa085,
-+      0x0001, 0x080c, 0x5b13, 0x080c, 0x5a07, 0x080c, 0x1515, 0x0038,
-+      0x2061, 0xb500, 0x6030, 0xc09d, 0x6032, 0x080c, 0x4b1f, 0x00ce,
-+      0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0xb7f3, 0x7924,
-+      0x6152, 0x614e, 0x6057, 0x0000, 0x604b, 0x0009, 0x7838, 0x606a,
-+      0x783c, 0x6066, 0x7828, 0x6062, 0x782c, 0x605e, 0x2061, 0xb7a1,
-+      0x2001, 0xb808, 0x600e, 0x6013, 0x0001, 0x6017, 0x0002, 0x6007,
-+      0x0000, 0x6037, 0x0000, 0x00ce, 0x012e, 0x0804, 0x2faa, 0x0126,
-+      0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xb500, 0x6044, 0xd0a4,
-+      0x11b0, 0xd084, 0x0118, 0x080c, 0x4606, 0x0068, 0xd08c, 0x0118,
-+      0x080c, 0x4527, 0x0040, 0xd094, 0x0118, 0x080c, 0x44f8, 0x0018,
-+      0xd09c, 0x0108, 0x0061, 0x00ee, 0x00ce, 0x012e, 0x0005, 0x0016,
-+      0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0ca0, 0x624c,
-+      0xa286, 0xf0f0, 0x1150, 0x6048, 0xa086, 0xf0f0, 0x0130, 0x624a,
-+      0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0xa294, 0xff00, 0xa296,
-+      0xf700, 0x0178, 0x7134, 0xd1a4, 0x1160, 0x6240, 0xa295, 0x0100,
-+      0x6242, 0xa294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x4baf,
-+      0x00f0, 0x6040, 0xa084, 0x0010, 0xa085, 0x0140, 0x6042, 0x6043,
-+      0x0000, 0x707b, 0x0000, 0x7097, 0x0001, 0x70bb, 0x0000, 0x70d7,
-+      0x0000, 0x2009, 0xbcc0, 0x200b, 0x0000, 0x708b, 0x0000, 0x707f,
-+      0x000a, 0x2009, 0x000a, 0x2011, 0x4ad5, 0x080c, 0x6a22, 0x0005,
-+      0x0156, 0x2001, 0xb574, 0x2004, 0xd08c, 0x0110, 0x7053, 0xffff,
-+      0x707c, 0xa005, 0x1510, 0x2011, 0x4ad5, 0x080c, 0x699c, 0x6040,
-+      0xa094, 0x0010, 0xa285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044,
-+      0xd08c, 0x1168, 0x1f04, 0x450f, 0x6242, 0x708f, 0x0000, 0x6040,
-+      0xa094, 0x0010, 0xa285, 0x0080, 0x6042, 0x6242, 0x0030, 0x6242,
-+      0x708f, 0x0000, 0x7083, 0x0000, 0x0000, 0x015e, 0x0005, 0x7080,
-+      0xa08a, 0x0003, 0x1210, 0x0023, 0x0010, 0x080c, 0x1515, 0x0005,
-+      0x4533, 0x4583, 0x4605, 0x00f6, 0x7083, 0x0001, 0x20e1, 0xa000,
-+      0xe000, 0x20e1, 0x8700, 0x080c, 0x2470, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x2079, 0xbb00, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b,
-+      0x0000, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b,
-+      0x0000, 0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b,
-+      0x0000, 0x782f, 0x0000, 0x2079, 0xbb0c, 0x207b, 0x1101, 0x7807,
-+      0x0000, 0x2099, 0xb505, 0x20a1, 0xbb0e, 0x20a9, 0x0004, 0x53a3,
-+      0x2079, 0xbb12, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0xbb00,
-+      0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f,
-+      0x0000, 0x080c, 0x4b06, 0x00fe, 0x7087, 0x0000, 0x6043, 0x0008,
-+      0x6043, 0x0000, 0x0005, 0x00d6, 0x7084, 0x7087, 0x0000, 0xa025,
-+      0x0904, 0x45ed, 0x6020, 0xd0b4, 0x1904, 0x45eb, 0x7194, 0x81ff,
-+      0x0904, 0x45db, 0xa486, 0x000c, 0x1904, 0x45e6, 0xa480, 0x0018,
-+      0x8004, 0x20a8, 0x2011, 0xbb80, 0x2019, 0xbb00, 0x220c, 0x2304,
-+      0xa106, 0x11b8, 0x8210, 0x8318, 0x1f04, 0x459e, 0x6043, 0x0004,
-+      0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x7083, 0x0002,
-+      0x708f, 0x0002, 0x2009, 0x07d0, 0x2011, 0x4adc, 0x080c, 0x6a22,
-+      0x0490, 0x2069, 0xbb80, 0x6930, 0xa18e, 0x1101, 0x1538, 0x6834,
-+      0xa005, 0x1520, 0x6900, 0xa18c, 0x00ff, 0x1118, 0x6804, 0xa005,
-+      0x0190, 0x2011, 0xbb8e, 0x2019, 0xb505, 0x20a9, 0x0004, 0x220c,
-+      0x2304, 0xa102, 0x0230, 0x1190, 0x8210, 0x8318, 0x1f04, 0x45cf,
-+      0x0068, 0x7097, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
-+      0xbb80, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x6043, 0x0008,
-+      0x6043, 0x0000, 0x0010, 0x00de, 0x0005, 0x6040, 0xa085, 0x0100,
-+      0x6042, 0x6020, 0xd0b4, 0x1db8, 0x60c3, 0x000c, 0x2011, 0xb7ea,
-+      0x2013, 0x0000, 0x7087, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056,
-+      0x60a7, 0x9575, 0x080c, 0x7d71, 0x0c30, 0x0005, 0x708c, 0xa08a,
-+      0x001d, 0x1210, 0x0023, 0x0010, 0x080c, 0x1515, 0x0005, 0x4639,
-+      0x4648, 0x4670, 0x4689, 0x46ad, 0x46d5, 0x46f9, 0x472a, 0x474e,
-+      0x4776, 0x47ad, 0x47d5, 0x47f1, 0x4807, 0x4827, 0x483a, 0x4842,
-+      0x4872, 0x4896, 0x48be, 0x48e2, 0x4913, 0x4950, 0x497f, 0x499b,
-+      0x49da, 0x49fa, 0x4a13, 0x4a14, 0x00c6, 0x2061, 0xb500, 0x6003,
-+      0x0007, 0x2061, 0x0100, 0x6004, 0xa084, 0xfff9, 0x6006, 0x00ce,
-+      0x0005, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0002, 0x708f,
-+      0x0001, 0x2009, 0x07d0, 0x2011, 0x4adc, 0x080c, 0x6a22, 0x0005,
-+      0x00f6, 0x7084, 0xa086, 0x0014, 0x1508, 0x6043, 0x0000, 0x6020,
-+      0xd0b4, 0x11e0, 0x2079, 0xbb80, 0x7a30, 0xa296, 0x1102, 0x11a0,
-+      0x7834, 0xa005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005,
-+      0x1110, 0x70bb, 0x0001, 0x2011, 0x4adc, 0x080c, 0x699c, 0x708f,
-+      0x0010, 0x080c, 0x4842, 0x0010, 0x080c, 0x4b1f, 0x00fe, 0x0005,
-+      0x708f, 0x0003, 0x6043, 0x0004, 0x2011, 0x4adc, 0x080c, 0x699c,
-+      0x080c, 0x4b97, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9, 0x000a,
-+      0x20a3, 0x0000, 0x1f04, 0x4680, 0x60c3, 0x0014, 0x080c, 0x4b06,
-+      0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4adc, 0x080c,
-+      0x699c, 0xa086, 0x0014, 0x11a8, 0x2079, 0xbb80, 0x7a30, 0xa296,
-+      0x1102, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
-+      0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0004, 0x0029,
-+      0x0010, 0x080c, 0x4b1f, 0x00fe, 0x0005, 0x708f, 0x0005, 0x080c,
-+      0x4b97, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011, 0xbb8e,
-+      0x080c, 0x4be8, 0x1160, 0x7078, 0xa005, 0x1148, 0x7150, 0xa186,
-+      0xffff, 0x0128, 0x080c, 0x4aa0, 0x0110, 0x080c, 0x4bc6, 0x20a9,
-+      0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x60c3, 0x0014, 0x080c, 0x4b06, 0x0005, 0x00f6, 0x7084, 0xa005,
-+      0x01f0, 0x2011, 0x4adc, 0x080c, 0x699c, 0xa086, 0x0014, 0x11a8,
-+      0x2079, 0xbb80, 0x7a30, 0xa296, 0x1103, 0x1178, 0x7834, 0xa005,
-+      0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb,
-+      0x0001, 0x708f, 0x0006, 0x0029, 0x0010, 0x080c, 0x4b1f, 0x00fe,
-+      0x0005, 0x708f, 0x0007, 0x080c, 0x4b97, 0x20a3, 0x1104, 0x20a3,
-+      0x0000, 0x3430, 0x2011, 0xbb8e, 0x080c, 0x4be8, 0x11a8, 0x7078,
-+      0xa005, 0x1190, 0x7158, 0xa186, 0xffff, 0x0170, 0xa180, 0x2dc4,
-+      0x200d, 0xa18c, 0xff00, 0x810f, 0x080c, 0x4aa0, 0x0128, 0x080c,
-+      0x40d6, 0x0110, 0x080c, 0x2867, 0x20a9, 0x0008, 0x2298, 0x26a0,
-+      0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c,
-+      0x4b06, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4adc,
-+      0x080c, 0x699c, 0xa086, 0x0014, 0x11a8, 0x2079, 0xbb80, 0x7a30,
-+      0xa296, 0x1104, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc,
-+      0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0008,
-+      0x0029, 0x0010, 0x080c, 0x4b1f, 0x00fe, 0x0005, 0x708f, 0x0009,
-+      0x080c, 0x4b97, 0x20a3, 0x1105, 0x20a3, 0x0100, 0x3430, 0x080c,
-+      0x4be8, 0x1150, 0x7078, 0xa005, 0x1138, 0x080c, 0x4a15, 0x1170,
-+      0xa085, 0x0001, 0x080c, 0x2867, 0x20a9, 0x0008, 0x2099, 0xbb8e,
-+      0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014,
-+      0x080c, 0x4b06, 0x0010, 0x080c, 0x462c, 0x0005, 0x00f6, 0x7084,
-+      0xa005, 0x0588, 0x2011, 0x4adc, 0x080c, 0x699c, 0xa086, 0x0014,
-+      0x1540, 0x2079, 0xbb80, 0x7a30, 0xa296, 0x1105, 0x1510, 0x7834,
-+      0x2011, 0x0100, 0xa21e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8,
-+      0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x000a, 0x00b1, 0x0098,
-+      0xa005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110,
-+      0x70bb, 0x0001, 0x708b, 0x0000, 0x708f, 0x000e, 0x080c, 0x4827,
-+      0x0010, 0x080c, 0x4b1f, 0x00fe, 0x0005, 0x708f, 0x000b, 0x2011,
-+      0xbb0e, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9,
-+      0x0002, 0x2009, 0x0000, 0x41a4, 0x080c, 0x4b97, 0x20a3, 0x1106,
-+      0x20a3, 0x0000, 0x080c, 0x4be8, 0x0118, 0x2013, 0x0000, 0x0020,
-+      0x7054, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6,
-+      0x60c3, 0x0084, 0x080c, 0x4b06, 0x0005, 0x00f6, 0x7084, 0xa005,
-+      0x01b0, 0x2011, 0x4adc, 0x080c, 0x699c, 0xa086, 0x0084, 0x1168,
-+      0x2079, 0xbb80, 0x7a30, 0xa296, 0x1106, 0x1138, 0x7834, 0xa005,
-+      0x1120, 0x708f, 0x000c, 0x0029, 0x0010, 0x080c, 0x4b1f, 0x00fe,
-+      0x0005, 0x708f, 0x000d, 0x080c, 0x4b97, 0x20a3, 0x1107, 0x20a3,
-+      0x0000, 0x2099, 0xbb8e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x60c3, 0x0084, 0x080c, 0x4b06, 0x0005, 0x00f6,
-+      0x7084, 0xa005, 0x01d0, 0x2011, 0x4adc, 0x080c, 0x699c, 0xa086,
-+      0x0084, 0x1188, 0x2079, 0xbb80, 0x7a30, 0xa296, 0x1107, 0x1158,
-+      0x7834, 0xa005, 0x1140, 0x708b, 0x0001, 0x080c, 0x4b89, 0x708f,
-+      0x000e, 0x0029, 0x0010, 0x080c, 0x4b1f, 0x00fe, 0x0005, 0x708f,
-+      0x000f, 0x7087, 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043,
-+      0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x4adc, 0x080c,
-+      0x6990, 0x0005, 0x7084, 0xa005, 0x0120, 0x2011, 0x4adc, 0x080c,
-+      0x699c, 0x0005, 0x708f, 0x0011, 0x080c, 0x4be8, 0x11a0, 0x7170,
-+      0x81ff, 0x0188, 0x2009, 0x0000, 0x7074, 0xa084, 0x00ff, 0x080c,
-+      0x281d, 0xa186, 0x007e, 0x0138, 0xa186, 0x0080, 0x0120, 0x2011,
-+      0xbb8e, 0x080c, 0x4aa0, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
-+      0xbb80, 0x20a1, 0x020b, 0x7484, 0xa480, 0x0018, 0xa080, 0x0007,
-+      0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014, 0x080c,
-+      0x4b06, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4adc,
-+      0x080c, 0x699c, 0xa086, 0x0014, 0x11a8, 0x2079, 0xbb80, 0x7a30,
-+      0xa296, 0x1103, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc,
-+      0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0012,
-+      0x0029, 0x0010, 0x080c, 0x4b1f, 0x00fe, 0x0005, 0x708f, 0x0013,
-+      0x080c, 0x4ba3, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011,
-+      0xbb8e, 0x080c, 0x4be8, 0x1160, 0x7078, 0xa005, 0x1148, 0x7150,
-+      0xa186, 0xffff, 0x0128, 0x080c, 0x4aa0, 0x0110, 0x080c, 0x4bc6,
-       0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x60c3, 0x0014, 0x080c, 0x4b07, 0x0005, 0x00f6, 0x7084,
--      0xa005, 0x01f0, 0x2011, 0x4add, 0x080c, 0x699d, 0xa086, 0x0014,
--      0x11a8, 0x2079, 0xbb80, 0x7a30, 0xa296, 0x1103, 0x1178, 0x7834,
-+      0x0000, 0x60c3, 0x0014, 0x080c, 0x4b06, 0x0005, 0x00f6, 0x7084,
-+      0xa005, 0x01f0, 0x2011, 0x4adc, 0x080c, 0x699c, 0xa086, 0x0014,
-+      0x11a8, 0x2079, 0xbb80, 0x7a30, 0xa296, 0x1104, 0x1178, 0x7834,
-       0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110,
--      0x70bb, 0x0001, 0x708f, 0x0006, 0x0029, 0x0010, 0x080c, 0x4b20,
--      0x00fe, 0x0005, 0x708f, 0x0007, 0x080c, 0x4b98, 0x20a3, 0x1104,
--      0x20a3, 0x0000, 0x3430, 0x2011, 0xbb8e, 0x080c, 0x4be9, 0x11a8,
-+      0x70bb, 0x0001, 0x708f, 0x0014, 0x0029, 0x0010, 0x080c, 0x4b1f,
-+      0x00fe, 0x0005, 0x708f, 0x0015, 0x080c, 0x4ba3, 0x20a3, 0x1104,
-+      0x20a3, 0x0000, 0x3430, 0x2011, 0xbb8e, 0x080c, 0x4be8, 0x11a8,
-       0x7078, 0xa005, 0x1190, 0x7158, 0xa186, 0xffff, 0x0170, 0xa180,
--      0x2dc4, 0x200d, 0xa18c, 0xff00, 0x810f, 0x080c, 0x4aa1, 0x0128,
--      0x080c, 0x40d7, 0x0110, 0x080c, 0x2867, 0x20a9, 0x0008, 0x2298,
-+      0x2dc4, 0x200d, 0xa18c, 0xff00, 0x810f, 0x080c, 0x4aa0, 0x0128,
-+      0x080c, 0x40d6, 0x0110, 0x080c, 0x2867, 0x20a9, 0x0008, 0x2298,
-       0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014,
--      0x080c, 0x4b07, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011,
--      0x4add, 0x080c, 0x699d, 0xa086, 0x0014, 0x11a8, 0x2079, 0xbb80,
--      0x7a30, 0xa296, 0x1104, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38,
--      0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f,
--      0x0008, 0x0029, 0x0010, 0x080c, 0x4b20, 0x00fe, 0x0005, 0x708f,
--      0x0009, 0x080c, 0x4b98, 0x20a3, 0x1105, 0x20a3, 0x0100, 0x3430,
--      0x080c, 0x4be9, 0x1150, 0x7078, 0xa005, 0x1138, 0x080c, 0x4a16,
-+      0x080c, 0x4b06, 0x0005, 0x00f6, 0x7084, 0xa005, 0x05b8, 0x2011,
-+      0x4adc, 0x080c, 0x699c, 0xa086, 0x0014, 0x1570, 0x2079, 0xbb80,
-+      0x7a30, 0xa296, 0x1105, 0x1540, 0x7834, 0x2011, 0x0100, 0xa21e,
-+      0x1148, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb,
-+      0x0001, 0x0060, 0xa005, 0x11c0, 0x7a38, 0xd2fc, 0x0128, 0x70b8,
-+      0xa005, 0x1110, 0x70bb, 0x0001, 0x708b, 0x0000, 0x7a38, 0xd2f4,
-+      0x0138, 0x2001, 0xb574, 0x2004, 0xd0a4, 0x1110, 0x70d7, 0x0008,
-+      0x708f, 0x0016, 0x0029, 0x0010, 0x080c, 0x4b1f, 0x00fe, 0x0005,
-+      0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xbb80, 0x20a1, 0x020b,
-+      0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0xbb8e, 0x708f, 0x0017,
-+      0x080c, 0x4be8, 0x1150, 0x7078, 0xa005, 0x1138, 0x080c, 0x4a15,
-       0x1170, 0xa085, 0x0001, 0x080c, 0x2867, 0x20a9, 0x0008, 0x2099,
-       0xbb8e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
--      0x0014, 0x080c, 0x4b07, 0x0010, 0x080c, 0x462d, 0x0005, 0x00f6,
--      0x7084, 0xa005, 0x0588, 0x2011, 0x4add, 0x080c, 0x699d, 0xa086,
--      0x0014, 0x1540, 0x2079, 0xbb80, 0x7a30, 0xa296, 0x1105, 0x1510,
--      0x7834, 0x2011, 0x0100, 0xa21e, 0x1160, 0x7a38, 0xd2fc, 0x0128,
--      0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x000a, 0x00b1,
--      0x0098, 0xa005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005,
--      0x1110, 0x70bb, 0x0001, 0x708b, 0x0000, 0x708f, 0x000e, 0x080c,
--      0x4828, 0x0010, 0x080c, 0x4b20, 0x00fe, 0x0005, 0x708f, 0x000b,
--      0x2011, 0xbb0e, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4,
--      0x20a9, 0x0002, 0x2009, 0x0000, 0x41a4, 0x080c, 0x4b98, 0x20a3,
--      0x1106, 0x20a3, 0x0000, 0x080c, 0x4be9, 0x0118, 0x2013, 0x0000,
--      0x0020, 0x7054, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042,
--      0x53a6, 0x60c3, 0x0084, 0x080c, 0x4b07, 0x0005, 0x00f6, 0x7084,
--      0xa005, 0x01b0, 0x2011, 0x4add, 0x080c, 0x699d, 0xa086, 0x0084,
--      0x1168, 0x2079, 0xbb80, 0x7a30, 0xa296, 0x1106, 0x1138, 0x7834,
--      0xa005, 0x1120, 0x708f, 0x000c, 0x0029, 0x0010, 0x080c, 0x4b20,
--      0x00fe, 0x0005, 0x708f, 0x000d, 0x080c, 0x4b98, 0x20a3, 0x1107,
--      0x20a3, 0x0000, 0x2099, 0xbb8e, 0x20a9, 0x0040, 0x53a6, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, 0x080c, 0x4b07, 0x0005,
--      0x00f6, 0x7084, 0xa005, 0x01d0, 0x2011, 0x4add, 0x080c, 0x699d,
--      0xa086, 0x0084, 0x1188, 0x2079, 0xbb80, 0x7a30, 0xa296, 0x1107,
--      0x1158, 0x7834, 0xa005, 0x1140, 0x708b, 0x0001, 0x080c, 0x4b8a,
--      0x708f, 0x000e, 0x0029, 0x0010, 0x080c, 0x4b20, 0x00fe, 0x0005,
--      0x708f, 0x000f, 0x7087, 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5,
--      0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x4add,
--      0x080c, 0x6991, 0x0005, 0x7084, 0xa005, 0x0120, 0x2011, 0x4add,
--      0x080c, 0x699d, 0x0005, 0x708f, 0x0011, 0x080c, 0x4be9, 0x11a0,
--      0x7170, 0x81ff, 0x0188, 0x2009, 0x0000, 0x7074, 0xa084, 0x00ff,
--      0x080c, 0x281d, 0xa186, 0x007e, 0x0138, 0xa186, 0x0080, 0x0120,
--      0x2011, 0xbb8e, 0x080c, 0x4aa1, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+      0x0014, 0x080c, 0x4b06, 0x0010, 0x080c, 0x462c, 0x0005, 0x00f6,
-+      0x7084, 0xa005, 0x01b0, 0x2011, 0x4adc, 0x080c, 0x699c, 0xa086,
-+      0x0084, 0x1168, 0x2079, 0xbb80, 0x7a30, 0xa296, 0x1106, 0x1138,
-+      0x7834, 0xa005, 0x1120, 0x708f, 0x0018, 0x0029, 0x0010, 0x080c,
-+      0x4b1f, 0x00fe, 0x0005, 0x708f, 0x0019, 0x080c, 0x4ba3, 0x20a3,
-+      0x1106, 0x20a3, 0x0000, 0x3430, 0x2099, 0xbb8e, 0x2039, 0xbb0e,
-+      0x27a0, 0x20a9, 0x0040, 0x53a3, 0x080c, 0x4be8, 0x11e8, 0x2728,
-+      0x2514, 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff,
-+      0x8007, 0xa205, 0x202a, 0x7054, 0x2310, 0x8214, 0xa2a0, 0xbb0e,
-+      0x2414, 0xa38c, 0x0001, 0x0118, 0xa294, 0xff00, 0x0018, 0xa294,
-+      0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9, 0x0040,
-+      0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, 0x080c,
-+      0x4b06, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01d0, 0x2011, 0x4adc,
-+      0x080c, 0x699c, 0xa086, 0x0084, 0x1188, 0x2079, 0xbb80, 0x7a30,
-+      0xa296, 0x1107, 0x1158, 0x7834, 0xa005, 0x1140, 0x708b, 0x0001,
-+      0x080c, 0x4b89, 0x708f, 0x001a, 0x0029, 0x0010, 0x080c, 0x4b1f,
-+      0x00fe, 0x0005, 0x708f, 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000,
-       0x2099, 0xbb80, 0x20a1, 0x020b, 0x7484, 0xa480, 0x0018, 0xa080,
--      0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014,
--      0x080c, 0x4b07, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011,
--      0x4add, 0x080c, 0x699d, 0xa086, 0x0014, 0x11a8, 0x2079, 0xbb80,
--      0x7a30, 0xa296, 0x1103, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38,
--      0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f,
--      0x0012, 0x0029, 0x0010, 0x080c, 0x4b20, 0x00fe, 0x0005, 0x708f,
--      0x0013, 0x080c, 0x4ba4, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430,
--      0x2011, 0xbb8e, 0x080c, 0x4be9, 0x1160, 0x7078, 0xa005, 0x1148,
--      0x7150, 0xa186, 0xffff, 0x0128, 0x080c, 0x4aa1, 0x0110, 0x080c,
--      0x4bc7, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4b07, 0x0005, 0x00f6,
--      0x7084, 0xa005, 0x01f0, 0x2011, 0x4add, 0x080c, 0x699d, 0xa086,
--      0x0014, 0x11a8, 0x2079, 0xbb80, 0x7a30, 0xa296, 0x1104, 0x1178,
--      0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005,
--      0x1110, 0x70bb, 0x0001, 0x708f, 0x0014, 0x0029, 0x0010, 0x080c,
--      0x4b20, 0x00fe, 0x0005, 0x708f, 0x0015, 0x080c, 0x4ba4, 0x20a3,
--      0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0xbb8e, 0x080c, 0x4be9,
--      0x11a8, 0x7078, 0xa005, 0x1190, 0x7158, 0xa186, 0xffff, 0x0170,
--      0xa180, 0x2dc4, 0x200d, 0xa18c, 0xff00, 0x810f, 0x080c, 0x4aa1,
--      0x0128, 0x080c, 0x40d7, 0x0110, 0x080c, 0x2867, 0x20a9, 0x0008,
--      0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
--      0x0014, 0x080c, 0x4b07, 0x0005, 0x00f6, 0x7084, 0xa005, 0x05b8,
--      0x2011, 0x4add, 0x080c, 0x699d, 0xa086, 0x0014, 0x1570, 0x2079,
--      0xbb80, 0x7a30, 0xa296, 0x1105, 0x1540, 0x7834, 0x2011, 0x0100,
--      0xa21e, 0x1148, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110,
--      0x70bb, 0x0001, 0x0060, 0xa005, 0x11c0, 0x7a38, 0xd2fc, 0x0128,
--      0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708b, 0x0000, 0x7a38,
--      0xd2f4, 0x0138, 0x2001, 0xb574, 0x2004, 0xd0a4, 0x1110, 0x70d7,
--      0x0008, 0x708f, 0x0016, 0x0029, 0x0010, 0x080c, 0x4b20, 0x00fe,
--      0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xbb80, 0x20a1,
--      0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0xbb8e, 0x708f,
--      0x0017, 0x080c, 0x4be9, 0x1150, 0x7078, 0xa005, 0x1138, 0x080c,
--      0x4a16, 0x1170, 0xa085, 0x0001, 0x080c, 0x2867, 0x20a9, 0x0008,
--      0x2099, 0xbb8e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x60c3, 0x0014, 0x080c, 0x4b07, 0x0010, 0x080c, 0x462d, 0x0005,
--      0x00f6, 0x7084, 0xa005, 0x01b0, 0x2011, 0x4add, 0x080c, 0x699d,
--      0xa086, 0x0084, 0x1168, 0x2079, 0xbb80, 0x7a30, 0xa296, 0x1106,
--      0x1138, 0x7834, 0xa005, 0x1120, 0x708f, 0x0018, 0x0029, 0x0010,
--      0x080c, 0x4b20, 0x00fe, 0x0005, 0x708f, 0x0019, 0x080c, 0x4ba4,
--      0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430, 0x2099, 0xbb8e, 0x2039,
--      0xbb0e, 0x27a0, 0x20a9, 0x0040, 0x53a3, 0x080c, 0x4be9, 0x11e8,
--      0x2728, 0x2514, 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294,
--      0x00ff, 0x8007, 0xa205, 0x202a, 0x7054, 0x2310, 0x8214, 0xa2a0,
--      0xbb0e, 0x2414, 0xa38c, 0x0001, 0x0118, 0xa294, 0xff00, 0x0018,
--      0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9,
--      0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084,
--      0x080c, 0x4b07, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01d0, 0x2011,
--      0x4add, 0x080c, 0x699d, 0xa086, 0x0084, 0x1188, 0x2079, 0xbb80,
--      0x7a30, 0xa296, 0x1107, 0x1158, 0x7834, 0xa005, 0x1140, 0x708b,
--      0x0001, 0x080c, 0x4b8a, 0x708f, 0x001a, 0x0029, 0x0010, 0x080c,
--      0x4b20, 0x00fe, 0x0005, 0x708f, 0x001b, 0x20e1, 0x9080, 0x20e1,
--      0x4000, 0x2099, 0xbb80, 0x20a1, 0x020b, 0x7484, 0xa480, 0x0018,
--      0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3,
--      0x0084, 0x080c, 0x4b07, 0x0005, 0x0005, 0x0005, 0x0086, 0x0096,
--      0x2029, 0xb553, 0x252c, 0x20a9, 0x0008, 0x2041, 0xbb0e, 0x28a0,
--      0x2099, 0xbb8e, 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4,
--      0x0110, 0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff,
--      0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x4a2b,
--      0x0804, 0x4a99, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0xa1a6, 0x3fff,
--      0x0d90, 0x0020, 0xa1a6, 0x3fff, 0x0904, 0x4a99, 0xa18d, 0xc000,
--      0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010,
--      0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4,
--      0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x4a51, 0x04d0, 0x23a8,
--      0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x4a63, 0x2328, 0x8529,
--      0xa2be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0xa73a,
--      0x000e, 0x27a8, 0xa5a8, 0x0010, 0x1f04, 0x4a72, 0x7552, 0xa5c8,
--      0x2dc4, 0x292d, 0xa5ac, 0x00ff, 0x7576, 0x6532, 0x6536, 0x0016,
--      0x2508, 0x080c, 0x2847, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018,
--      0x2304, 0xa405, 0x201a, 0x707b, 0x0001, 0x26a0, 0x2898, 0x20a9,
--      0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0xa085, 0x0001,
--      0x0028, 0xa006, 0x0018, 0xa006, 0x080c, 0x1515, 0x009e, 0x008e,
--      0x0005, 0x2118, 0x2021, 0x0000, 0x2001, 0x0007, 0xa39a, 0x0010,
--      0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, 0xa39a,
--      0x0010, 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423,
--      0x8319, 0x1de8, 0xa238, 0x2704, 0xa42c, 0x11b8, 0xa405, 0x203a,
--      0x7152, 0xa1a0, 0x2dc4, 0x242d, 0xa5ac, 0x00ff, 0x7576, 0x6532,
--      0x6536, 0x0016, 0x2508, 0x080c, 0x2847, 0x001e, 0x60e7, 0x0000,
--      0x65ea, 0x707b, 0x0001, 0xa084, 0x0000, 0x0005, 0x00e6, 0x2071,
--      0xb500, 0x707f, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079,
--      0x0100, 0x2071, 0x0140, 0x080c, 0x7d7b, 0x7004, 0xa084, 0x4000,
--      0x0120, 0x7003, 0x1000, 0x7003, 0x0000, 0x0126, 0x2091, 0x8000,
--      0x2071, 0xb523, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009,
--      0x00f7, 0x080c, 0x4bb0, 0x001e, 0xa094, 0x0010, 0xa285, 0x0080,
--      0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126,
--      0x2091, 0x8000, 0x2011, 0xb7ea, 0x2013, 0x0000, 0x7087, 0x0000,
--      0x012e, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c,
--      0x7d72, 0x2009, 0x07d0, 0x2011, 0x4add, 0x080c, 0x6a23, 0x0005,
--      0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2011, 0x0003,
--      0x080c, 0x8076, 0x2011, 0x0002, 0x080c, 0x8080, 0x080c, 0x7f5a,
--      0x0036, 0x2019, 0x0000, 0x080c, 0x7fe5, 0x003e, 0x2009, 0x00f7,
--      0x080c, 0x4bb0, 0x2061, 0xb7f3, 0x601b, 0x0000, 0x601f, 0x0000,
--      0x2061, 0xb500, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090,
--      0x6043, 0x0010, 0x2009, 0x002d, 0x2011, 0x4b55, 0x080c, 0x6991,
--      0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126,
--      0x2091, 0x8000, 0x2071, 0x0100, 0x080c, 0x7d7b, 0x2071, 0x0140,
--      0x7004, 0xa084, 0x4000, 0x0120, 0x7003, 0x1000, 0x7003, 0x0000,
--      0x080c, 0x5ad8, 0x01a8, 0x080c, 0x5af6, 0x1190, 0x2001, 0xb79e,
--      0x2003, 0xaaaa, 0x0016, 0x080c, 0x28eb, 0x2001, 0xb78f, 0x2102,
--      0x001e, 0x2001, 0xb79f, 0x2003, 0x0000, 0x080c, 0x5a08, 0x0030,
--      0x2001, 0x0001, 0x080c, 0x27c3, 0x080c, 0x4b20, 0x012e, 0x000e,
--      0x00ee, 0x0005, 0x20a9, 0x0040, 0x20a1, 0xbcc0, 0x2099, 0xbb8e,
--      0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x1f04, 0x4b90, 0x0005,
--      0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xbb00, 0x20a1, 0x020b,
--      0x20a9, 0x000c, 0x53a6, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000,
--      0x2099, 0xbb80, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x0005,
--      0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0xb531, 0x2004,
--      0xa005, 0x1138, 0x2001, 0xb515, 0x2004, 0xa084, 0x00ff, 0xa105,
--      0x0010, 0xa185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016,
--      0x0046, 0x2001, 0xb553, 0x2004, 0xd0a4, 0x0158, 0xa006, 0x2020,
--      0x2009, 0x002a, 0x080c, 0xb0dc, 0x2001, 0xb50c, 0x200c, 0xc195,
--      0x2102, 0x2019, 0x002a, 0x2009, 0x0000, 0x080c, 0x2c6f, 0x004e,
--      0x001e, 0x0005, 0x080c, 0x4b20, 0x708f, 0x0000, 0x7087, 0x0000,
--      0x0005, 0x0006, 0x2001, 0xb50c, 0x2004, 0xd09c, 0x0100, 0x000e,
--      0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101,
--      0x200c, 0xa18d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005,
--      0x0156, 0x20a9, 0x00ff, 0x2009, 0xb635, 0xa006, 0x200a, 0x8108,
--      0x1f04, 0x4c06, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136,
--      0x0146, 0x2069, 0xb552, 0xa006, 0x6002, 0x6007, 0x0707, 0x600a,
--      0x600e, 0x6012, 0xa198, 0x2dc4, 0x231d, 0xa39c, 0x00ff, 0x6316,
--      0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0, 0x40a4, 0x20a9, 0x0004,
--      0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e, 0x6042, 0x604e, 0x6052,
--      0x6056, 0x605a, 0x605e, 0x6062, 0x6066, 0x606a, 0x606e, 0x6072,
--      0x6076, 0x607a, 0x607e, 0x6082, 0x6086, 0x608a, 0x608e, 0x6092,
--      0x6096, 0x609a, 0x609e, 0x60ae, 0x61a2, 0x00d6, 0x60a4, 0xa06d,
--      0x0110, 0x080c, 0x160f, 0x60a7, 0x0000, 0x60a8, 0xa06d, 0x0110,
--      0x080c, 0x160f, 0x60ab, 0x0000, 0x00de, 0xa006, 0x604a, 0x6810,
--      0x603a, 0x680c, 0x6046, 0x6814, 0xa084, 0x00ff, 0x6042, 0x014e,
--      0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091, 0x8000,
--      0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, 0x1a04, 0x4d1b,
--      0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x1a04, 0x4d20, 0x2001,
--      0xb50c, 0x2004, 0xa084, 0x0003, 0x01c0, 0x2001, 0xb50c, 0x2004,
--      0xd084, 0x1904, 0x4d03, 0xa188, 0xb635, 0x2104, 0xa065, 0x0904,
--      0x4d03, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x1904, 0x4d03,
--      0x6000, 0xd0c4, 0x0904, 0x4d03, 0x0068, 0xa188, 0xb635, 0x2104,
--      0xa065, 0x0904, 0x4ce7, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006,
--      0x1904, 0x4cec, 0x60a4, 0xa00d, 0x0118, 0x080c, 0x51d5, 0x05d0,
--      0x60a8, 0xa00d, 0x0188, 0x080c, 0x5220, 0x1170, 0x694c, 0xd1fc,
--      0x1118, 0x080c, 0x4edf, 0x0448, 0x080c, 0x4e8e, 0x694c, 0xd1ec,
--      0x1520, 0x080c, 0x50c7, 0x0408, 0x694c, 0xa184, 0xa000, 0x0178,
--      0xd1ec, 0x0140, 0xd1fc, 0x0118, 0x080c, 0x50d6, 0x0028, 0x080c,
--      0x50d6, 0x0028, 0xd1fc, 0x0118, 0x080c, 0x4e8e, 0x0070, 0x6050,
--      0xa00d, 0x0130, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x0028,
--      0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x080c, 0x6cab, 0xa006,
--      0x012e, 0x0005, 0x2001, 0x0005, 0x2009, 0x0000, 0x04e8, 0x2001,
--      0x0028, 0x2009, 0x0000, 0x04c0, 0xa082, 0x0006, 0x12a0, 0x2001,
--      0xb535, 0x2004, 0xd0ac, 0x1160, 0x60a0, 0xd0bc, 0x1148, 0x6100,
--      0xd1fc, 0x0904, 0x4ca2, 0x2001, 0x0029, 0x2009, 0x1000, 0x0420,
--      0x2001, 0x0028, 0x00a8, 0x2009, 0xb50c, 0x210c, 0xd18c, 0x0118,
--      0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040,
--      0x2001, 0x0029, 0x6100, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0060,
--      0x2009, 0x0000, 0x0048, 0x2001, 0x0029, 0x2009, 0x0000, 0x0020,
--      0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x012e, 0x0005, 0x00e6,
--      0x0126, 0x2091, 0x8000, 0x6844, 0x8007, 0xa084, 0x00ff, 0x2008,
--      0xa182, 0x00ff, 0x1a04, 0x4d7a, 0xa188, 0xb635, 0x2104, 0xa065,
--      0x01c0, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x11a8, 0x2c70,
--      0x080c, 0x85c1, 0x05e8, 0x2e00, 0x601a, 0x2d00, 0x6012, 0x600b,
--      0xffff, 0x601f, 0x000a, 0x2009, 0x0003, 0x080c, 0x8646, 0xa006,
--      0x0460, 0x2001, 0x0028, 0x0440, 0xa082, 0x0006, 0x1298, 0x2001,
--      0xb535, 0x2004, 0xd0ac, 0x1158, 0x60a0, 0xd0bc, 0x1140, 0x6100,
--      0xd1fc, 0x09e8, 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001,
--      0x0028, 0x0090, 0x2009, 0xb50c, 0x210c, 0xd18c, 0x0118, 0x2001,
--      0x0004, 0x0050, 0xd184, 0x0118, 0x2001, 0x0004, 0x0028, 0x2001,
--      0x0029, 0x0010, 0x2001, 0x0029, 0xa005, 0x012e, 0x00ee, 0x0005,
--      0x2001, 0x002c, 0x0cc8, 0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000,
--      0x2011, 0x0000, 0x2079, 0xb500, 0x6944, 0xa18c, 0xff00, 0x810f,
--      0xa182, 0x00ff, 0x1a04, 0x4e45, 0x080c, 0x4faa, 0x11a0, 0x6004,
--      0xa084, 0x00ff, 0xa082, 0x0006, 0x1270, 0x6864, 0xa0c6, 0x006f,
--      0x0150, 0x2001, 0xb535, 0x2004, 0xd0ac, 0x1904, 0x4e2e, 0x60a0,
--      0xd0bc, 0x1904, 0x4e2e, 0x6864, 0xa0c6, 0x006f, 0x0118, 0x2008,
--      0x0804, 0x4df7, 0x6968, 0x2140, 0xa18c, 0xff00, 0x810f, 0x78d4,
--      0xd0ac, 0x1118, 0xa182, 0x0080, 0x06d0, 0xa182, 0x00ff, 0x16b8,
--      0x6a70, 0x6b6c, 0x7870, 0xa306, 0x1160, 0x7874, 0xa24e, 0x1118,
--      0x2208, 0x2310, 0x0460, 0xa9cc, 0xff00, 0x1118, 0x2208, 0x2310,
--      0x0430, 0x080c, 0x3dc4, 0x2c70, 0x0550, 0x2009, 0x0000, 0x2011,
--      0x0000, 0xa0c6, 0x4000, 0x1160, 0x0006, 0x2e60, 0x080c, 0x524b,
--      0x1108, 0xc185, 0x7000, 0xd0bc, 0x0108, 0xc18d, 0x000e, 0x0088,
--      0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060, 0xa0c6, 0x4008, 0x1118,
--      0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009, 0x1108, 0x0010, 0x2001,
--      0x4006, 0x6866, 0x696a, 0x6a6e, 0x2001, 0x0030, 0x0450, 0x080c,
--      0x85c1, 0x1138, 0x2001, 0x4005, 0x2009, 0x0003, 0x2011, 0x0000,
--      0x0c80, 0x2e00, 0x601a, 0x080c, 0xa021, 0x2d00, 0x6012, 0x601f,
--      0x0001, 0x6838, 0xd88c, 0x0108, 0xc0f5, 0x683a, 0x0126, 0x2091,
--      0x8000, 0x080c, 0x2c9c, 0x012e, 0x2001, 0x0000, 0x080c, 0x4eec,
--      0x2001, 0x0002, 0x080c, 0x4efe, 0x2009, 0x0002, 0x080c, 0x8646,
--      0xa006, 0xa005, 0x012e, 0x00ee, 0x00fe, 0x0005, 0x2001, 0x0028,
--      0x2009, 0x0000, 0x0cb0, 0x2009, 0xb50c, 0x210c, 0xd18c, 0x0118,
--      0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010,
--      0x2001, 0x0029, 0x2009, 0x0000, 0x0c20, 0x2001, 0x0029, 0x2009,
--      0x0000, 0x08f8, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000,
--      0x16b8, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x12e0, 0xa188,
--      0xb635, 0x2104, 0xa065, 0x01b8, 0x6004, 0xa084, 0x00ff, 0xa08e,
--      0x0006, 0x11b0, 0x684c, 0xd0ec, 0x0120, 0x080c, 0x50d6, 0x0431,
--      0x0030, 0x0421, 0x684c, 0xd0fc, 0x0110, 0x080c, 0x50c7, 0x080c,
--      0x5114, 0xa006, 0x00c8, 0x2001, 0x0028, 0x2009, 0x0000, 0x00a0,
--      0xa082, 0x0006, 0x1240, 0x6100, 0xd1fc, 0x0d20, 0x2001, 0x0029,
--      0x2009, 0x1000, 0x0048, 0x2001, 0x0029, 0x2009, 0x0000, 0x0020,
--      0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x0005, 0x0126, 0x2091,
--      0x8000, 0x6050, 0xa00d, 0x0138, 0x2d00, 0x200a, 0x6803, 0x0000,
--      0x6052, 0x012e, 0x0005, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000,
--      0x0cc0, 0x0126, 0x2091, 0x8000, 0x604c, 0xa005, 0x0170, 0x00e6,
--      0x2071, 0xb7e0, 0x7004, 0xa086, 0x0002, 0x0168, 0x00ee, 0x604c,
--      0x6802, 0x2d00, 0x604e, 0x012e, 0x0005, 0x2d00, 0x6052, 0x604e,
--      0x6803, 0x0000, 0x0cc0, 0x701c, 0xac06, 0x1d80, 0x604c, 0x2070,
--      0x7000, 0x6802, 0x2d00, 0x7002, 0x00ee, 0x012e, 0x0005, 0x0126,
--      0x2091, 0x8000, 0x604c, 0xa06d, 0x0130, 0x6800, 0xa005, 0x1108,
--      0x6052, 0x604e, 0xad05, 0x012e, 0x0005, 0x604c, 0xa06d, 0x0130,
--      0x6800, 0xa005, 0x1108, 0x6052, 0x604e, 0xad05, 0x0005, 0x6803,
--      0x0000, 0x6084, 0xa00d, 0x0120, 0x2d00, 0x200a, 0x6086, 0x0005,
--      0x2d00, 0x6086, 0x6082, 0x0cd8, 0x0126, 0x00c6, 0x0026, 0x2091,
--      0x8000, 0x6218, 0x2260, 0x6200, 0xa005, 0x0110, 0xc285, 0x0008,
--      0xc284, 0x6202, 0x002e, 0x00ce, 0x012e, 0x0005, 0x0126, 0x00c6,
--      0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0x0006, 0xa086, 0x0006,
--      0x1180, 0x609c, 0xd0ac, 0x0168, 0x2001, 0xb553, 0x2004, 0xd0a4,
--      0x0140, 0xa284, 0xff00, 0x8007, 0xa086, 0x0007, 0x1110, 0x2011,
--      0x0600, 0x000e, 0xa294, 0xff00, 0xa215, 0x6206, 0x0006, 0xa086,
--      0x0006, 0x1128, 0x6290, 0x82ff, 0x1110, 0x080c, 0x1515, 0x000e,
--      0x00ce, 0x012e, 0x0005, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6218,
--      0x2260, 0x6204, 0x0006, 0xa086, 0x0006, 0x1178, 0x609c, 0xd0a4,
--      0x0160, 0x2001, 0xb553, 0x2004, 0xd0ac, 0x1138, 0xa284, 0x00ff,
--      0xa086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0xa294, 0x00ff,
--      0x8007, 0xa215, 0x6206, 0x00ce, 0x012e, 0x0005, 0x0026, 0xa182,
--      0x00ff, 0x0218, 0xa085, 0x0001, 0x00b0, 0xa190, 0xb635, 0x2204,
--      0xa065, 0x1180, 0x0016, 0x00d6, 0x080c, 0x15df, 0x2d60, 0x00de,
--      0x001e, 0x0d80, 0x2c00, 0x2012, 0x60a7, 0x0000, 0x60ab, 0x0000,
--      0x080c, 0x4c0c, 0xa006, 0x002e, 0x0005, 0x0126, 0x2091, 0x8000,
--      0x0026, 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001, 0x0480, 0x00d6,
--      0xa190, 0xb635, 0x2204, 0xa06d, 0x0540, 0x2013, 0x0000, 0x00d6,
--      0x00c6, 0x2d60, 0x60a4, 0xa06d, 0x0110, 0x080c, 0x160f, 0x60a8,
--      0xa06d, 0x0110, 0x080c, 0x160f, 0x00ce, 0x00de, 0x00d6, 0x00c6,
--      0x68ac, 0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6010, 0x2068,
--      0x080c, 0x9c54, 0x0110, 0x080c, 0x161f, 0x080c, 0x8617, 0x00ce,
--      0x0c88, 0x00ce, 0x00de, 0x080c, 0x160f, 0x00de, 0xa006, 0x002e,
--      0x012e, 0x0005, 0x0016, 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001,
--      0x0030, 0xa188, 0xb635, 0x2104, 0xa065, 0x0dc0, 0xa006, 0x001e,
--      0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x600b, 0x0000, 0x600f,
--      0x0000, 0x6000, 0xc08c, 0x6002, 0x080c, 0x5ad0, 0x1558, 0x60a0,
--      0xa086, 0x007e, 0x2069, 0xbb90, 0x0130, 0x2001, 0xb535, 0x2004,
--      0xd0ac, 0x1500, 0x0098, 0x2d04, 0xd0e4, 0x01e0, 0x00d6, 0x2069,
--      0xbb8e, 0x00c6, 0x2061, 0xb7b2, 0x6810, 0x2062, 0x6814, 0x6006,
--      0x6818, 0x600a, 0x681c, 0x600e, 0x00ce, 0x00de, 0x8d69, 0x2d04,
--      0x2069, 0x0140, 0xa005, 0x1110, 0x2001, 0x0001, 0x6886, 0x2069,
--      0xb500, 0x68a6, 0x2069, 0xbb8e, 0x6808, 0x605e, 0x6810, 0x6062,
--      0x6138, 0xa10a, 0x0208, 0x603a, 0x6814, 0x6066, 0x2099, 0xbb96,
--      0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0xbb9a,
--      0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0xbbae,
--      0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076,
--      0x60a0, 0xa086, 0x007e, 0x1120, 0x2069, 0xbb8e, 0x690c, 0x616e,
--      0xa182, 0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0xa182, 0x0259,
--      0x1218, 0x2009, 0x0007, 0x00d0, 0xa182, 0x02c1, 0x1218, 0x2009,
--      0x0006, 0x00a0, 0xa182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070,
--      0xa182, 0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0xa182, 0x0581,
--      0x1218, 0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0x6192, 0x014e,
--      0x013e, 0x015e, 0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071,
--      0xbb8d, 0x2e04, 0x6896, 0x2071, 0xbb8e, 0x7004, 0x689a, 0x701c,
--      0x689e, 0x6a00, 0x2009, 0xb572, 0x210c, 0xd0bc, 0x0120, 0xd1ec,
--      0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0120, 0xd1e4, 0x0110,
--      0xc2bd, 0x0008, 0xc2bc, 0x6a02, 0x00ee, 0x002e, 0x001e, 0x0005,
--      0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x01c0, 0x6900,
--      0x81ff, 0x1540, 0x6a04, 0xa282, 0x0010, 0x1648, 0xad88, 0x0004,
--      0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0128, 0x8108, 0x1f04,
--      0x5082, 0x080c, 0x1515, 0x260a, 0x8210, 0x6a06, 0x0098, 0x080c,
--      0x15f8, 0x01a8, 0x2d00, 0x60a6, 0x6803, 0x0000, 0xad88, 0x0004,
--      0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x509a, 0x6807,
--      0x0001, 0x6e12, 0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0xa006,
--      0x0cd8, 0x0126, 0x2091, 0x8000, 0x00d6, 0x60a4, 0xa00d, 0x01a0,
--      0x2168, 0x6800, 0xa005, 0x1160, 0x080c, 0x51d5, 0x1168, 0x200b,
--      0xffff, 0x6804, 0xa08a, 0x0002, 0x0218, 0x8001, 0x6806, 0x0020,
--      0x080c, 0x160f, 0x60a7, 0x0000, 0x00de, 0x012e, 0x0005, 0x0126,
--      0x2091, 0x8000, 0x080c, 0x5233, 0x0010, 0x080c, 0x4e8e, 0x080c,
--      0x514d, 0x1dd8, 0x080c, 0x5114, 0x012e, 0x0005, 0x00d6, 0x0126,
--      0x2091, 0x8000, 0x60a8, 0xa06d, 0x01c0, 0x6950, 0x81ff, 0x1540,
--      0x6a54, 0xa282, 0x0010, 0x1670, 0xad88, 0x0018, 0x20a9, 0x0010,
--      0x2104, 0xa086, 0xffff, 0x0128, 0x8108, 0x1f04, 0x50e8, 0x080c,
--      0x1515, 0x260a, 0x8210, 0x6a56, 0x0098, 0x080c, 0x15f8, 0x01d0,
--      0x2d00, 0x60aa, 0x6853, 0x0000, 0xad88, 0x0018, 0x20a9, 0x0010,
--      0x200b, 0xffff, 0x8108, 0x1f04, 0x5100, 0x6857, 0x0001, 0x6e62,
--      0x0010, 0x080c, 0x4edf, 0x0089, 0x1de0, 0xa085, 0x0001, 0x012e,
--      0x00de, 0x0005, 0xa006, 0x0cd8, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x6cab, 0x012e, 0x0005, 0xa01e, 0x0010, 0x2019, 0x0001, 0xa00e,
--      0x0126, 0x2091, 0x8000, 0x604c, 0x2068, 0x6000, 0xd0dc, 0x1170,
--      0x8dff, 0x01f8, 0x83ff, 0x0120, 0x6848, 0xa606, 0x0158, 0x0030,
--      0x683c, 0xa406, 0x1118, 0x6840, 0xa506, 0x0120, 0x2d08, 0x6800,
--      0x2068, 0x0c70, 0x080c, 0x811f, 0x6a00, 0x604c, 0xad06, 0x1110,
--      0x624e, 0x0018, 0xa180, 0x0000, 0x2202, 0x82ff, 0x1110, 0x6152,
--      0x8dff, 0x012e, 0x0005, 0xa01e, 0x0010, 0x2019, 0x0001, 0xa00e,
--      0x6080, 0x2068, 0x8dff, 0x01e8, 0x83ff, 0x0120, 0x6848, 0xa606,
--      0x0158, 0x0030, 0x683c, 0xa406, 0x1118, 0x6840, 0xa506, 0x0120,
--      0x2d08, 0x6800, 0x2068, 0x0c70, 0x6a00, 0x6080, 0xad06, 0x1110,
--      0x6282, 0x0018, 0xa180, 0x0000, 0x2202, 0x82ff, 0x1110, 0x6186,
--      0x8dff, 0x0005, 0xa016, 0x080c, 0x51cf, 0x1110, 0x2011, 0x0001,
--      0x080c, 0x521a, 0x1110, 0xa295, 0x0002, 0x0005, 0x080c, 0x524b,
--      0x0118, 0x080c, 0x9d09, 0x0010, 0xa085, 0x0001, 0x0005, 0x080c,
--      0x524b, 0x0118, 0x080c, 0x9c99, 0x0010, 0xa085, 0x0001, 0x0005,
--      0x080c, 0x524b, 0x0118, 0x080c, 0x9cec, 0x0010, 0xa085, 0x0001,
--      0x0005, 0x080c, 0x524b, 0x0118, 0x080c, 0x9cb5, 0x0010, 0xa085,
--      0x0001, 0x0005, 0x080c, 0x524b, 0x0118, 0x080c, 0x9d25, 0x0010,
--      0xa085, 0x0001, 0x0005, 0x0126, 0x0006, 0x00d6, 0x2091, 0x8000,
--      0x6080, 0xa06d, 0x01a0, 0x6800, 0x0006, 0x6837, 0x0103, 0x6b4a,
--      0x6847, 0x0000, 0x080c, 0x9ec6, 0x0006, 0x6000, 0xd0fc, 0x0110,
--      0x080c, 0xb37d, 0x000e, 0x080c, 0x5409, 0x000e, 0x0c50, 0x6083,
--      0x0000, 0x6087, 0x0000, 0x00de, 0x000e, 0x012e, 0x0005, 0x60a4,
--      0xa00d, 0x1118, 0xa085, 0x0001, 0x0005, 0x00e6, 0x2170, 0x7000,
--      0xa005, 0x1168, 0x20a9, 0x0010, 0xae88, 0x0004, 0x2104, 0xa606,
--      0x0130, 0x8108, 0x1f04, 0x51de, 0xa085, 0x0001, 0x0008, 0xa006,
--      0x00ee, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0xa06d,
--      0x1128, 0x080c, 0x15f8, 0x01a0, 0x2d00, 0x60a6, 0x6803, 0x0001,
--      0x6807, 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff,
--      0x8108, 0x1f04, 0x51fe, 0xa085, 0x0001, 0x012e, 0x00de, 0x0005,
--      0xa006, 0x0cd8, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0xa06d,
--      0x0130, 0x60a7, 0x0000, 0x080c, 0x160f, 0xa085, 0x0001, 0x012e,
--      0x00de, 0x0005, 0x60a8, 0xa00d, 0x1118, 0xa085, 0x0001, 0x0005,
--      0x00e6, 0x2170, 0x7050, 0xa005, 0x1160, 0x20a9, 0x0010, 0xae88,
--      0x0018, 0x2104, 0xa606, 0x0128, 0x8108, 0x1f04, 0x5229, 0xa085,
--      0x0001, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x0c19, 0x1188,
--      0x200b, 0xffff, 0x00d6, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002,
--      0x0218, 0x8001, 0x6856, 0x0020, 0x080c, 0x160f, 0x60ab, 0x0000,
--      0x00de, 0x012e, 0x0005, 0x609c, 0xd0a4, 0x0005, 0x00f6, 0x080c,
--      0x5ad0, 0x01b0, 0x71b8, 0x81ff, 0x1198, 0x71d4, 0xd19c, 0x0180,
--      0x2001, 0x007e, 0xa080, 0xb635, 0x2004, 0xa07d, 0x0148, 0x7804,
--      0xa084, 0x00ff, 0xa086, 0x0006, 0x1118, 0x7800, 0xc0ed, 0x7802,
--      0x2079, 0xb552, 0x7804, 0xd0a4, 0x01e8, 0x0156, 0x00c6, 0x20a9,
--      0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x4faa, 0x1168, 0x6004,
--      0xa084, 0xff00, 0x8007, 0xa096, 0x0004, 0x0118, 0xa086, 0x0006,
--      0x1118, 0x6000, 0xc0ed, 0x6002, 0x001e, 0x8108, 0x1f04, 0x5273,
--      0x00ce, 0x015e, 0x080c, 0x530a, 0x0120, 0x2001, 0xb7b5, 0x200c,
--      0x0038, 0x2079, 0xb552, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0,
--      0x2011, 0x529e, 0x080c, 0x6a23, 0x00fe, 0x0005, 0x2011, 0x529e,
--      0x080c, 0x699d, 0x080c, 0x530a, 0x01f0, 0x2001, 0xb6b3, 0x2004,
--      0xa080, 0x0000, 0x200c, 0xc1ec, 0x2102, 0x2001, 0xb553, 0x2004,
--      0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011, 0x529e, 0x080c, 0x6a23,
--      0x00e6, 0x2071, 0xb500, 0x7073, 0x0000, 0x7077, 0x0000, 0x080c,
--      0x2ab8, 0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x2009,
--      0x0000, 0x0016, 0x080c, 0x4faa, 0x1530, 0x6000, 0xd0ec, 0x0518,
--      0x0046, 0x62a0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029,
--      0x080c, 0xb0dc, 0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x6004, 0xa084,
--      0x00ff, 0xa085, 0x0700, 0x6006, 0x2019, 0x0029, 0x080c, 0x6df6,
--      0x0076, 0x2039, 0x0000, 0x080c, 0x6d03, 0x2009, 0x0000, 0x080c,
--      0xae76, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x52c9, 0x00ce,
--      0x015e, 0x0005, 0x00c6, 0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002,
--      0x00ce, 0x0005, 0x7818, 0x2004, 0xd0ac, 0x0005, 0x7818, 0x2004,
--      0xd0bc, 0x0005, 0x00f6, 0x2001, 0xb6b3, 0x2004, 0xa07d, 0x0110,
--      0x7800, 0xd0ec, 0x00fe, 0x0005, 0x0126, 0x0026, 0x2091, 0x8000,
--      0x0006, 0x62a0, 0xa290, 0xb635, 0x2204, 0xac06, 0x190c, 0x1515,
--      0x000e, 0x6200, 0xa005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0x6202,
--      0x002e, 0x012e, 0x0005, 0x2011, 0xb535, 0x2204, 0xd0cc, 0x0138,
--      0x2001, 0xb7b3, 0x200c, 0x2011, 0x5338, 0x080c, 0x6a23, 0x0005,
--      0x2011, 0x5338, 0x080c, 0x699d, 0x2011, 0xb535, 0x2204, 0xc0cc,
--      0x2012, 0x0005, 0x2071, 0xb614, 0x7003, 0x0001, 0x7007, 0x0000,
--      0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000,
--      0x700b, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b, 0x0020,
--      0x705f, 0x0040, 0x707f, 0x0000, 0x2071, 0xb77d, 0x7003, 0xb614,
--      0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0xb75d, 0x7013, 0x0020,
--      0x7017, 0x0040, 0x7037, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071,
--      0xb735, 0xa00e, 0x7186, 0x718a, 0x7097, 0x0001, 0x2001, 0xb553,
--      0x2004, 0xd0fc, 0x1150, 0x2001, 0xb553, 0x2004, 0xa00e, 0xd09c,
--      0x0108, 0x8108, 0x7102, 0x0804, 0x53d3, 0x2001, 0xb572, 0x200c,
--      0xa184, 0x000f, 0x2009, 0xb573, 0x210c, 0x0002, 0x537b, 0x53ae,
--      0x53b5, 0x53bf, 0x53c4, 0x537b, 0x537b, 0x537b, 0x539e, 0x537b,
--      0x537b, 0x537b, 0x537b, 0x537b, 0x537b, 0x537b, 0x7003, 0x0004,
--      0x0136, 0x0146, 0x0156, 0x2099, 0xb576, 0x20a1, 0xb786, 0x20a9,
--      0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x0428, 0x708f, 0x0005,
--      0x7007, 0x0122, 0x2001, 0x0002, 0x0030, 0x708f, 0x0002, 0x7007,
--      0x0121, 0x2001, 0x0003, 0x7002, 0x7097, 0x0001, 0x0088, 0x7007,
--      0x0122, 0x2001, 0x0002, 0x0020, 0x7007, 0x0121, 0x2001, 0x0003,
--      0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00, 0x8007, 0x709a,
--      0xa184, 0x00ff, 0x7092, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071,
--      0xb614, 0x684c, 0xa005, 0x1130, 0x7028, 0xc085, 0x702a, 0xa085,
--      0x0001, 0x0428, 0x6a60, 0x7236, 0x6b64, 0x733a, 0x6868, 0x703e,
--      0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e, 0x6844, 0x7032,
--      0x2009, 0x000d, 0x200a, 0x700b, 0x0000, 0x8007, 0x8006, 0x8006,
--      0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x726e,
--      0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006, 0x00ee,
--      0x0005, 0x0156, 0x00e6, 0x0026, 0x6838, 0xd0fc, 0x1904, 0x5462,
--      0x6804, 0xa00d, 0x0188, 0x00d6, 0x2071, 0xb500, 0xa016, 0x702c,
--      0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e,
--      0x70b4, 0xa200, 0x70b6, 0x00de, 0x2071, 0xb614, 0x701c, 0xa005,
--      0x1904, 0x5472, 0x20a9, 0x0032, 0x0f04, 0x5470, 0x0e04, 0x542c,
--      0x2071, 0xb735, 0x7200, 0x82ff, 0x05d8, 0x6934, 0xa186, 0x0103,
--      0x1904, 0x5480, 0x6948, 0x6844, 0xa105, 0x1540, 0x2009, 0x8020,
--      0x2200, 0x0002, 0x5470, 0x5447, 0x5498, 0x54a4, 0x5470, 0x2071,
--      0x0000, 0x20a9, 0x0032, 0x0f04, 0x5470, 0x7018, 0xd084, 0x1dd8,
--      0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091,
--      0x4080, 0x2071, 0xb500, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70b4,
--      0x8000, 0x70b6, 0x002e, 0x00ee, 0x015e, 0x0005, 0x6844, 0xa086,
--      0x0100, 0x1130, 0x6868, 0xa005, 0x1118, 0x2009, 0x8020, 0x0880,
--      0x2071, 0xb614, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000, 0x7012,
--      0x7018, 0xa06d, 0x711a, 0x0110, 0x6902, 0x0008, 0x711e, 0x0c10,
--      0xa18c, 0x00ff, 0xa186, 0x0017, 0x0130, 0xa186, 0x001e, 0x0118,
--      0xa18e, 0x001f, 0x1d28, 0x684c, 0xd0cc, 0x0d10, 0x6850, 0xa084,
--      0x00ff, 0xa086, 0x0001, 0x19e0, 0x2009, 0x8021, 0x0804, 0x5440,
--      0x7084, 0x8008, 0xa092, 0x001e, 0x1a98, 0x7186, 0xae90, 0x0003,
--      0xa210, 0x683c, 0x2012, 0x0078, 0x7084, 0x8008, 0xa092, 0x000f,
--      0x1a38, 0x7186, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012,
--      0x8210, 0x6840, 0x2012, 0x7088, 0xa10a, 0x0a04, 0x5459, 0x718c,
--      0x7084, 0xa10a, 0x0a04, 0x5459, 0x2071, 0x0000, 0x7018, 0xd084,
--      0x1904, 0x5459, 0x2071, 0xb735, 0x7000, 0xa086, 0x0002, 0x1150,
--      0x080c, 0x5723, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080,
--      0x0804, 0x5459, 0x080c, 0x574d, 0x2071, 0x0000, 0x701b, 0x0001,
--      0x2091, 0x4080, 0x0804, 0x5459, 0x0006, 0x684c, 0x0006, 0x6837,
--      0x0103, 0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0, 0x2001, 0x0000,
--      0x40a4, 0x000e, 0xa084, 0x00ff, 0x684e, 0x000e, 0x684a, 0x6952,
--      0x0005, 0x2071, 0xb614, 0x7004, 0x0002, 0x54ff, 0x5510, 0x570e,
--      0x570f, 0x571c, 0x5722, 0x5500, 0x56ff, 0x5695, 0x56eb, 0x0005,
--      0x0126, 0x2091, 0x8000, 0x0e04, 0x550f, 0x2009, 0x000d, 0x7030,
--      0x200a, 0x2091, 0x4080, 0x7007, 0x0001, 0x700b, 0x0000, 0x012e,
--      0x2069, 0xb7f3, 0x683c, 0xa005, 0x03f8, 0x11f0, 0x0126, 0x2091,
--      0x8000, 0x2069, 0x0000, 0x6934, 0x2001, 0xb620, 0x2004, 0xa10a,
--      0x0170, 0x0e04, 0x5533, 0x2069, 0x0000, 0x6818, 0xd084, 0x1158,
--      0x2009, 0x8040, 0x6922, 0x681b, 0x0001, 0x2091, 0x4080, 0x2069,
--      0xb7f3, 0x683f, 0xffff, 0x012e, 0x2069, 0xb500, 0x6848, 0x6968,
--      0xa102, 0x2069, 0xb735, 0x688a, 0x6984, 0x701c, 0xa06d, 0x0120,
--      0x81ff, 0x0904, 0x5589, 0x00a0, 0x81ff, 0x0904, 0x564f, 0x2071,
--      0xb735, 0x7184, 0x7088, 0xa10a, 0x1258, 0x7190, 0x2071, 0xb7f3,
--      0x7038, 0xa005, 0x0128, 0x1b04, 0x564f, 0x713a, 0x0804, 0x564f,
--      0x2071, 0xb735, 0x718c, 0x0126, 0x2091, 0x8000, 0x7084, 0xa10a,
--      0x0a04, 0x566a, 0x0e04, 0x560b, 0x2071, 0x0000, 0x7018, 0xd084,
--      0x1904, 0x560b, 0x2001, 0xffff, 0x2071, 0xb7f3, 0x703a, 0x2071,
--      0xb735, 0x7000, 0xa086, 0x0002, 0x1150, 0x080c, 0x5723, 0x2071,
--      0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804, 0x560b, 0x080c,
--      0x574d, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804,
--      0x560b, 0x2071, 0xb735, 0x7000, 0xa005, 0x0904, 0x5631, 0x6934,
--      0xa186, 0x0103, 0x1904, 0x560e, 0x684c, 0xd0bc, 0x1904, 0x5631,
--      0x6948, 0x6844, 0xa105, 0x1904, 0x5626, 0x2009, 0x8020, 0x2071,
--      0xb735, 0x7000, 0x0002, 0x5631, 0x55f1, 0x55c9, 0x55db, 0x55a8,
--      0x0136, 0x0146, 0x0156, 0x2099, 0xb576, 0x20a1, 0xb786, 0x20a9,
--      0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x2071, 0xb77d, 0xad80,
--      0x000f, 0x700e, 0x7013, 0x0002, 0x7007, 0x0002, 0x700b, 0x0000,
--      0x2e10, 0x080c, 0x1643, 0x2071, 0xb614, 0x7007, 0x0009, 0x0804,
--      0x564f, 0x7084, 0x8008, 0xa092, 0x001e, 0x1a04, 0x564f, 0xae90,
--      0x0003, 0xa210, 0x683c, 0x2012, 0x7186, 0x2071, 0xb614, 0x080c,
--      0x57a4, 0x0804, 0x564f, 0x7084, 0x8008, 0xa092, 0x000f, 0x1a04,
--      0x564f, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012, 0x8210,
--      0x6840, 0x2012, 0x7186, 0x2071, 0xb614, 0x080c, 0x57a4, 0x0804,
--      0x564f, 0x0126, 0x2091, 0x8000, 0x0e04, 0x560b, 0x2071, 0x0000,
--      0x7018, 0xd084, 0x1180, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a,
--      0x701b, 0x0001, 0x2091, 0x4080, 0x012e, 0x2071, 0xb614, 0x080c,
--      0x57a4, 0x0804, 0x564f, 0x012e, 0x0804, 0x564f, 0xa18c, 0x00ff,
--      0xa186, 0x0017, 0x0130, 0xa186, 0x001e, 0x0118, 0xa18e, 0x001f,
--      0x11c0, 0x684c, 0xd0cc, 0x01a8, 0x6850, 0xa084, 0x00ff, 0xa086,
--      0x0001, 0x1178, 0x2009, 0x8021, 0x0804, 0x559f, 0x6844, 0xa086,
--      0x0100, 0x1138, 0x6868, 0xa005, 0x1120, 0x2009, 0x8020, 0x0804,
--      0x559f, 0x2071, 0xb614, 0x080c, 0x57b6, 0x01c8, 0x2071, 0xb614,
--      0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003, 0x1130,
--      0x810f, 0xa18c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x7007, 0x0003,
--      0x080c, 0x57cf, 0x7050, 0xa086, 0x0100, 0x0904, 0x570f, 0x0126,
--      0x2091, 0x8000, 0x2071, 0xb614, 0x7008, 0xa086, 0x0001, 0x1180,
--      0x0e04, 0x5668, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091, 0x4080,
--      0x700b, 0x0000, 0x7004, 0xa086, 0x0006, 0x1110, 0x7007, 0x0001,
--      0x012e, 0x0005, 0x2071, 0xb614, 0x080c, 0x57b6, 0x0518, 0x2071,
--      0xb735, 0x7084, 0x700a, 0x20a9, 0x0020, 0x2099, 0xb736, 0x20a1,
--      0xb75d, 0x53a3, 0x7087, 0x0000, 0x2071, 0xb614, 0x2069, 0xb77d,
--      0x706c, 0x6826, 0x7070, 0x682a, 0x7074, 0x682e, 0x7078, 0x6832,
--      0x2d10, 0x080c, 0x1643, 0x7007, 0x0008, 0x2001, 0xffff, 0x2071,
--      0xb7f3, 0x703a, 0x012e, 0x0804, 0x564f, 0x2069, 0xb77d, 0x6808,
--      0xa08e, 0x0000, 0x0904, 0x56ea, 0xa08e, 0x0200, 0x0904, 0x56e8,
--      0xa08e, 0x0100, 0x1904, 0x56ea, 0x0126, 0x2091, 0x8000, 0x0e04,
--      0x56e6, 0x2069, 0x0000, 0x6818, 0xd084, 0x15c0, 0x702c, 0x7130,
--      0x8108, 0xa102, 0x0230, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072,
--      0x0048, 0x706c, 0xa080, 0x0040, 0x706e, 0x1220, 0x7070, 0xa081,
--      0x0000, 0x7072, 0x7132, 0x6936, 0x700b, 0x0000, 0x2001, 0xb75a,
--      0x2004, 0xa005, 0x1190, 0x6934, 0x2069, 0xb735, 0x689c, 0x699e,
--      0x2069, 0xb7f3, 0xa102, 0x1118, 0x683c, 0xa005, 0x1368, 0x2001,
--      0xb75b, 0x200c, 0x810d, 0x693e, 0x0038, 0x2009, 0x8040, 0x6922,
--      0x681b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x012e, 0x0010,
--      0x7007, 0x0005, 0x0005, 0x2001, 0xb77f, 0x2004, 0xa08e, 0x0100,
--      0x1128, 0x7007, 0x0001, 0x080c, 0x57a4, 0x0005, 0xa08e, 0x0000,
--      0x0de0, 0xa08e, 0x0200, 0x1dc8, 0x7007, 0x0005, 0x0005, 0x701c,
--      0xa06d, 0x0158, 0x080c, 0x57b6, 0x0140, 0x7007, 0x0003, 0x080c,
--      0x57cf, 0x7050, 0xa086, 0x0100, 0x0110, 0x0005, 0x0005, 0x7050,
--      0xa09e, 0x0100, 0x1118, 0x7007, 0x0004, 0x0030, 0xa086, 0x0200,
--      0x1110, 0x7007, 0x0005, 0x0005, 0x080c, 0x5772, 0x7006, 0x080c,
--      0x57a4, 0x0005, 0x0005, 0x00e6, 0x0156, 0x2071, 0xb735, 0x7184,
--      0x81ff, 0x0500, 0xa006, 0x7086, 0xae80, 0x0003, 0x2071, 0x0000,
--      0x21a8, 0x2014, 0x7226, 0x8000, 0x0f04, 0x5747, 0x2014, 0x722a,
--      0x8000, 0x0f04, 0x5747, 0x2014, 0x722e, 0x8000, 0x0f04, 0x5747,
--      0x2014, 0x723a, 0x8000, 0x0f04, 0x5747, 0x2014, 0x723e, 0xa180,
--      0x8030, 0x7022, 0x015e, 0x00ee, 0x0005, 0x00e6, 0x0156, 0x2071,
--      0xb735, 0x7184, 0x81ff, 0x01d8, 0xa006, 0x7086, 0xae80, 0x0003,
--      0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x2014, 0x722a,
--      0x8000, 0x0f04, 0x5769, 0x2014, 0x723a, 0x8000, 0x2014, 0x723e,
--      0x0018, 0x2001, 0x8020, 0x0010, 0x2001, 0x8042, 0x7022, 0x015e,
--      0x00ee, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102, 0x0230, 0xa00e,
--      0x7034, 0x706e, 0x7038, 0x7072, 0x0048, 0x706c, 0xa080, 0x0040,
--      0x706e, 0x1220, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c,
--      0x8001, 0x700e, 0x1180, 0x0126, 0x2091, 0x8000, 0x0e04, 0x579e,
--      0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x700b,
--      0x0000, 0x012e, 0x0005, 0x2001, 0x0007, 0x0005, 0x2001, 0x0006,
--      0x700b, 0x0001, 0x012e, 0x0005, 0x701c, 0xa06d, 0x0170, 0x0126,
--      0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0xa005,
--      0x1108, 0x701a, 0x012e, 0x080c, 0x160f, 0x0005, 0x2019, 0x000d,
--      0x2304, 0x230c, 0xa10e, 0x0130, 0x2304, 0x230c, 0xa10e, 0x0110,
--      0xa006, 0x0060, 0x732c, 0x8319, 0x7130, 0xa102, 0x1118, 0x2300,
--      0xa005, 0x0020, 0x0210, 0xa302, 0x0008, 0x8002, 0x0005, 0x2d00,
--      0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000, 0x0126, 0x2091,
--      0x8000, 0x2009, 0xb812, 0x2104, 0xc08d, 0x200a, 0x012e, 0x080c,
--      0x165f, 0x0005, 0x708c, 0xa08a, 0x0029, 0x1220, 0xa082, 0x001d,
--      0x0033, 0x0010, 0x080c, 0x1515, 0x6027, 0x1e00, 0x0005, 0x58dd,
--      0x5858, 0x5870, 0x58ad, 0x58ce, 0x5908, 0x591a, 0x5870, 0x58f4,
--      0x57fc, 0x582a, 0x57fb, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804,
--      0xa005, 0x1180, 0x6808, 0xa005, 0x1518, 0x708f, 0x0028, 0x2069,
--      0xb7c5, 0x2d04, 0x7002, 0x080c, 0x5bd2, 0x6028, 0xa085, 0x0600,
--      0x602a, 0x00b0, 0x708f, 0x0028, 0x2069, 0xb7c5, 0x2d04, 0x7002,
--      0x6028, 0xa085, 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056,
--      0x2071, 0xb823, 0x080c, 0x1dfe, 0x005e, 0x004e, 0x003e, 0x00ee,
--      0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0xa005, 0x1180,
--      0x6808, 0xa005, 0x1518, 0x708f, 0x0028, 0x2069, 0xb7c5, 0x2d04,
--      0x7002, 0x080c, 0x5c5f, 0x6028, 0xa085, 0x0600, 0x602a, 0x00b0,
--      0x708f, 0x0028, 0x2069, 0xb7c5, 0x2d04, 0x7002, 0x6028, 0xa085,
--      0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0xb823,
--      0x080c, 0x1dfe, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005,
--      0x6803, 0x0090, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x5985, 0xd1d4,
--      0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x708f, 0x0020, 0x080c,
--      0x5985, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x001f, 0x0005,
--      0x6803, 0x0088, 0x6124, 0xd1cc, 0x1590, 0xd1dc, 0x1568, 0xd1e4,
--      0x1540, 0xa184, 0x1e00, 0x1580, 0x60e3, 0x0001, 0x600c, 0xc0b4,
--      0x600e, 0x080c, 0x5b00, 0x080c, 0x24b0, 0x0156, 0x6803, 0x0100,
--      0x20a9, 0x0014, 0x6804, 0xd0dc, 0x1118, 0x1f04, 0x588a, 0x0048,
--      0x20a9, 0x0014, 0x6803, 0x0080, 0x6804, 0xd0d4, 0x1130, 0x1f04,
--      0x5894, 0x080c, 0x5b21, 0x015e, 0x0078, 0x015e, 0x708f, 0x0028,
--      0x0058, 0x708f, 0x001e, 0x0040, 0x708f, 0x001d, 0x0028, 0x708f,
--      0x0020, 0x0010, 0x708f, 0x001f, 0x0005, 0x60e3, 0x0001, 0x600c,
--      0xc0b4, 0x600e, 0x080c, 0x5b00, 0x080c, 0x24b0, 0x6803, 0x0080,
--      0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0xa184,
--      0x1e00, 0x1158, 0x708f, 0x0028, 0x0040, 0x708f, 0x001e, 0x0028,
--      0x708f, 0x001d, 0x0010, 0x708f, 0x001f, 0x0005, 0x6803, 0x00a0,
--      0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1e47, 0x708f,
--      0x001e, 0x0010, 0x708f, 0x001d, 0x0005, 0x080c, 0x59f7, 0x6124,
--      0xd1dc, 0x1188, 0x080c, 0x5985, 0x0016, 0x080c, 0x1e47, 0x001e,
--      0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x708f, 0x001e, 0x0020, 0x708f,
--      0x001f, 0x080c, 0x5985, 0x0005, 0x6803, 0x00a0, 0x6124, 0xd1d4,
--      0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x708f,
--      0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x0021, 0x0005,
--      0x080c, 0x59f7, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4,
--      0x0140, 0x708f, 0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f,
--      0x001f, 0x0005, 0x6803, 0x0090, 0x6124, 0xd1d4, 0x1178, 0xd1cc,
--      0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x708f, 0x001e, 0x0040,
--      0x708f, 0x001d, 0x0028, 0x708f, 0x0020, 0x0010, 0x708f, 0x001f,
--      0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100,
--      0x2069, 0x0140, 0x2071, 0xb500, 0x2091, 0x8000, 0x080c, 0x5ad0,
--      0x11e8, 0x2001, 0xb50c, 0x200c, 0xd1b4, 0x01c0, 0xc1b4, 0x2102,
--      0x6027, 0x0200, 0xe000, 0xe000, 0x6024, 0xd0cc, 0x0158, 0x6803,
--      0x00a0, 0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003,
--      0x0001, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x5aec,
--      0x0150, 0x080c, 0x5ae2, 0x1138, 0x2001, 0x0001, 0x080c, 0x27c3,
--      0x080c, 0x5aa7, 0x00a0, 0x080c, 0x59f4, 0x0178, 0x2001, 0x0001,
--      0x080c, 0x27c3, 0x708c, 0xa086, 0x001e, 0x0120, 0x708c, 0xa086,
--      0x0022, 0x1118, 0x708f, 0x0025, 0x0010, 0x708f, 0x0021, 0x012e,
--      0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x5996,
--      0x080c, 0x6a5d, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011,
--      0x5996, 0x080c, 0x6a54, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6,
--      0x0016, 0x080c, 0x7d7b, 0x2071, 0xb500, 0x080c, 0x5931, 0x001e,
--      0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
--      0x00e6, 0x00f6, 0x0126, 0x080c, 0x7d7b, 0x2061, 0x0100, 0x2069,
--      0x0140, 0x2071, 0xb500, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a,
--      0x2011, 0x0003, 0x080c, 0x8076, 0x2011, 0x0002, 0x080c, 0x8080,
--      0x080c, 0x7f5a, 0x080c, 0x6a11, 0x0036, 0x2019, 0x0000, 0x080c,
--      0x7fe5, 0x003e, 0x60e3, 0x0000, 0x080c, 0xb423, 0x080c, 0xb43e,
--      0x2001, 0xb500, 0x2003, 0x0004, 0x6027, 0x0008, 0x080c, 0x12dd,
--      0x2001, 0x0001, 0x080c, 0x27c3, 0x012e, 0x00fe, 0x00ee, 0x00de,
--      0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x2001, 0xb500, 0x2004,
--      0xa086, 0x0004, 0x0140, 0x2001, 0xb79e, 0x2003, 0xaaaa, 0x2001,
--      0xb79f, 0x2003, 0x0000, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800,
--      0xa086, 0x00c0, 0x0160, 0x6803, 0x00c0, 0x0156, 0x20a9, 0x002d,
--      0x1d04, 0x5a00, 0x2091, 0x6000, 0x1f04, 0x5a00, 0x015e, 0x0005,
--      0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
--      0xb500, 0x2001, 0xb79f, 0x200c, 0xa186, 0x0000, 0x0158, 0xa186,
--      0x0001, 0x0158, 0xa186, 0x0002, 0x0158, 0xa186, 0x0003, 0x0158,
--      0x0804, 0x5a95, 0x708f, 0x0022, 0x0040, 0x708f, 0x0021, 0x0028,
--      0x708f, 0x0023, 0x0020, 0x708f, 0x0024, 0x6043, 0x0000, 0x60e3,
--      0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x2872, 0x0026,
--      0x2011, 0x0003, 0x080c, 0x8076, 0x2011, 0x0002, 0x080c, 0x8080,
--      0x080c, 0x7f5a, 0x0036, 0x2019, 0x0000, 0x080c, 0x7fe5, 0x003e,
--      0x002e, 0x7000, 0xa08e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010,
--      0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005,
--      0x6024, 0xd0ac, 0x0120, 0x012e, 0x015e, 0x0804, 0x5aa3, 0x6800,
--      0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6904, 0xd1d4, 0x1130, 0x6803,
--      0x0100, 0x1f04, 0x5a58, 0x080c, 0x5b21, 0x012e, 0x015e, 0x080c,
--      0x5ae2, 0x01a8, 0x6044, 0xa005, 0x0168, 0x6050, 0x0006, 0xa085,
--      0x0020, 0x6052, 0x080c, 0x5b21, 0xa006, 0x8001, 0x1df0, 0x000e,
--      0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x5b21, 0x0016,
--      0x0026, 0x2009, 0x00c8, 0x2011, 0x59a3, 0x080c, 0x6a23, 0x002e,
--      0x001e, 0x2001, 0xb79f, 0x2003, 0x0004, 0x080c, 0x57e2, 0x080c,
--      0x5ae2, 0x0148, 0x6804, 0xd0d4, 0x1130, 0xd0dc, 0x1100, 0x2001,
--      0xb79f, 0x2003, 0x0000, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6,
-+      0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084,
-+      0x080c, 0x4b06, 0x0005, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029,
-+      0xb553, 0x252c, 0x20a9, 0x0008, 0x2041, 0xbb0e, 0x28a0, 0x2099,
-+      0xbb8e, 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0110,
-+      0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff, 0x1148,
-+      0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x4a2a, 0x0804,
-+      0x4a98, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0xa1a6, 0x3fff, 0x0d90,
-+      0x0020, 0xa1a6, 0x3fff, 0x0904, 0x4a98, 0xa18d, 0xc000, 0x20a9,
-+      0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120,
-+      0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110,
-+      0x8319, 0x0008, 0x8318, 0x1f04, 0x4a50, 0x04d0, 0x23a8, 0x2021,
-+      0x0001, 0x8426, 0x8425, 0x1f04, 0x4a62, 0x2328, 0x8529, 0xa2be,
-+      0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0xa73a, 0x000e,
-+      0x27a8, 0xa5a8, 0x0010, 0x1f04, 0x4a71, 0x7552, 0xa5c8, 0x2dc4,
-+      0x292d, 0xa5ac, 0x00ff, 0x7576, 0x6532, 0x6536, 0x0016, 0x2508,
-+      0x080c, 0x2847, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304,
-+      0xa405, 0x201a, 0x707b, 0x0001, 0x26a0, 0x2898, 0x20a9, 0x0008,
-+      0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0xa085, 0x0001, 0x0028,
-+      0xa006, 0x0018, 0xa006, 0x080c, 0x1515, 0x009e, 0x008e, 0x0005,
-+      0x2118, 0x2021, 0x0000, 0x2001, 0x0007, 0xa39a, 0x0010, 0x0218,
-+      0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, 0xa39a, 0x0010,
-+      0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319,
-+      0x1de8, 0xa238, 0x2704, 0xa42c, 0x11b8, 0xa405, 0x203a, 0x7152,
-+      0xa1a0, 0x2dc4, 0x242d, 0xa5ac, 0x00ff, 0x7576, 0x6532, 0x6536,
-+      0x0016, 0x2508, 0x080c, 0x2847, 0x001e, 0x60e7, 0x0000, 0x65ea,
-+      0x707b, 0x0001, 0xa084, 0x0000, 0x0005, 0x00e6, 0x2071, 0xb500,
-+      0x707f, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100,
-+      0x2071, 0x0140, 0x080c, 0x7d7a, 0x7004, 0xa084, 0x4000, 0x0120,
-+      0x7003, 0x1000, 0x7003, 0x0000, 0x0126, 0x2091, 0x8000, 0x2071,
-+      0xb523, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7,
-+      0x080c, 0x4baf, 0x001e, 0xa094, 0x0010, 0xa285, 0x0080, 0x7842,
-+      0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091,
-+      0x8000, 0x2011, 0xb7ea, 0x2013, 0x0000, 0x7087, 0x0000, 0x012e,
-+      0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x7d71,
-+      0x2009, 0x07d0, 0x2011, 0x4adc, 0x080c, 0x6a22, 0x0005, 0x0016,
-+      0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2011, 0x0003, 0x080c,
-+      0x8075, 0x2011, 0x0002, 0x080c, 0x807f, 0x080c, 0x7f59, 0x0036,
-+      0x2019, 0x0000, 0x080c, 0x7fe4, 0x003e, 0x2009, 0x00f7, 0x080c,
-+      0x4baf, 0x2061, 0xb7f3, 0x601b, 0x0000, 0x601f, 0x0000, 0x2061,
-+      0xb500, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043,
-+      0x0010, 0x2009, 0x002d, 0x2011, 0x4b54, 0x080c, 0x6990, 0x012e,
-+      0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091,
-+      0x8000, 0x2071, 0x0100, 0x080c, 0x7d7a, 0x2071, 0x0140, 0x7004,
-+      0xa084, 0x4000, 0x0120, 0x7003, 0x1000, 0x7003, 0x0000, 0x080c,
-+      0x5ad7, 0x01a8, 0x080c, 0x5af5, 0x1190, 0x2001, 0xb79e, 0x2003,
-+      0xaaaa, 0x0016, 0x080c, 0x28eb, 0x2001, 0xb78f, 0x2102, 0x001e,
-+      0x2001, 0xb79f, 0x2003, 0x0000, 0x080c, 0x5a07, 0x0030, 0x2001,
-+      0x0001, 0x080c, 0x27c3, 0x080c, 0x4b1f, 0x012e, 0x000e, 0x00ee,
-+      0x0005, 0x20a9, 0x0040, 0x20a1, 0xbcc0, 0x2099, 0xbb8e, 0x3304,
-+      0x8007, 0x20a2, 0x9398, 0x94a0, 0x1f04, 0x4b8f, 0x0005, 0x20e1,
-+      0x9080, 0x20e1, 0x4000, 0x2099, 0xbb00, 0x20a1, 0x020b, 0x20a9,
-+      0x000c, 0x53a6, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
-+      0xbb80, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x0005, 0x00c6,
-+      0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0xb531, 0x2004, 0xa005,
-+      0x1138, 0x2001, 0xb515, 0x2004, 0xa084, 0x00ff, 0xa105, 0x0010,
-+      0xa185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046,
-+      0x2001, 0xb553, 0x2004, 0xd0a4, 0x0158, 0xa006, 0x2020, 0x2009,
-+      0x002a, 0x080c, 0xb0e8, 0x2001, 0xb50c, 0x200c, 0xc195, 0x2102,
-+      0x2019, 0x002a, 0x2009, 0x0000, 0x080c, 0x2c6f, 0x004e, 0x001e,
-+      0x0005, 0x080c, 0x4b1f, 0x708f, 0x0000, 0x7087, 0x0000, 0x0005,
-+      0x0006, 0x2001, 0xb50c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005,
-+      0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c,
-+      0xa18d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x0156,
-+      0x20a9, 0x00ff, 0x2009, 0xb635, 0xa006, 0x200a, 0x8108, 0x1f04,
-+      0x4c05, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146,
-+      0x2069, 0xb552, 0xa006, 0x6002, 0x6007, 0x0707, 0x600a, 0x600e,
-+      0x6012, 0xa198, 0x2dc4, 0x231d, 0xa39c, 0x00ff, 0x6316, 0x20a9,
-+      0x0004, 0xac98, 0x0006, 0x23a0, 0x40a4, 0x20a9, 0x0004, 0xac98,
-+      0x000a, 0x23a0, 0x40a4, 0x603e, 0x6042, 0x604e, 0x6052, 0x6056,
-+      0x605a, 0x605e, 0x6062, 0x6066, 0x606a, 0x606e, 0x6072, 0x6076,
-+      0x607a, 0x607e, 0x6082, 0x6086, 0x608a, 0x608e, 0x6092, 0x6096,
-+      0x609a, 0x609e, 0x60ae, 0x61a2, 0x00d6, 0x60a4, 0xa06d, 0x0110,
-+      0x080c, 0x160f, 0x60a7, 0x0000, 0x60a8, 0xa06d, 0x0110, 0x080c,
-+      0x160f, 0x60ab, 0x0000, 0x00de, 0xa006, 0x604a, 0x6810, 0x603a,
-+      0x680c, 0x6046, 0x6814, 0xa084, 0x00ff, 0x6042, 0x014e, 0x013e,
-+      0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091, 0x8000, 0x6944,
-+      0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, 0x1a04, 0x4d1a, 0xa18c,
-+      0xff00, 0x810f, 0xa182, 0x00ff, 0x1a04, 0x4d1f, 0x2001, 0xb50c,
-+      0x2004, 0xa084, 0x0003, 0x01c0, 0x2001, 0xb50c, 0x2004, 0xd084,
-+      0x1904, 0x4d02, 0xa188, 0xb635, 0x2104, 0xa065, 0x0904, 0x4d02,
-+      0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x1904, 0x4d02, 0x6000,
-+      0xd0c4, 0x0904, 0x4d02, 0x0068, 0xa188, 0xb635, 0x2104, 0xa065,
-+      0x0904, 0x4ce6, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x1904,
-+      0x4ceb, 0x60a4, 0xa00d, 0x0118, 0x080c, 0x51d4, 0x05d0, 0x60a8,
-+      0xa00d, 0x0188, 0x080c, 0x521f, 0x1170, 0x694c, 0xd1fc, 0x1118,
-+      0x080c, 0x4ede, 0x0448, 0x080c, 0x4e8d, 0x694c, 0xd1ec, 0x1520,
-+      0x080c, 0x50c6, 0x0408, 0x694c, 0xa184, 0xa000, 0x0178, 0xd1ec,
-+      0x0140, 0xd1fc, 0x0118, 0x080c, 0x50d5, 0x0028, 0x080c, 0x50d5,
-+      0x0028, 0xd1fc, 0x0118, 0x080c, 0x4e8d, 0x0070, 0x6050, 0xa00d,
-+      0x0130, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x0028, 0x2d00,
-+      0x6052, 0x604e, 0x6803, 0x0000, 0x080c, 0x6caa, 0xa006, 0x012e,
-+      0x0005, 0x2001, 0x0005, 0x2009, 0x0000, 0x04e8, 0x2001, 0x0028,
-+      0x2009, 0x0000, 0x04c0, 0xa082, 0x0006, 0x12a0, 0x2001, 0xb535,
-+      0x2004, 0xd0ac, 0x1160, 0x60a0, 0xd0bc, 0x1148, 0x6100, 0xd1fc,
-+      0x0904, 0x4ca1, 0x2001, 0x0029, 0x2009, 0x1000, 0x0420, 0x2001,
-+      0x0028, 0x00a8, 0x2009, 0xb50c, 0x210c, 0xd18c, 0x0118, 0x2001,
-+      0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040, 0x2001,
-+      0x0029, 0x6100, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0060, 0x2009,
-+      0x0000, 0x0048, 0x2001, 0x0029, 0x2009, 0x0000, 0x0020, 0x2001,
-+      0x0029, 0x2009, 0x0000, 0xa005, 0x012e, 0x0005, 0x00e6, 0x0126,
-+      0x2091, 0x8000, 0x6844, 0x8007, 0xa084, 0x00ff, 0x2008, 0xa182,
-+      0x00ff, 0x1a04, 0x4d79, 0xa188, 0xb635, 0x2104, 0xa065, 0x01c0,
-+      0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x11a8, 0x2c70, 0x080c,
-+      0x85c7, 0x05e8, 0x2e00, 0x601a, 0x2d00, 0x6012, 0x600b, 0xffff,
-+      0x601f, 0x000a, 0x2009, 0x0003, 0x080c, 0x864c, 0xa006, 0x0460,
-+      0x2001, 0x0028, 0x0440, 0xa082, 0x0006, 0x1298, 0x2001, 0xb535,
-+      0x2004, 0xd0ac, 0x1158, 0x60a0, 0xd0bc, 0x1140, 0x6100, 0xd1fc,
-+      0x09e8, 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028,
-+      0x0090, 0x2009, 0xb50c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
-+      0x0050, 0xd184, 0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029,
-+      0x0010, 0x2001, 0x0029, 0xa005, 0x012e, 0x00ee, 0x0005, 0x2001,
-+      0x002c, 0x0cc8, 0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2011,
-+      0x0000, 0x2079, 0xb500, 0x6944, 0xa18c, 0xff00, 0x810f, 0xa182,
-+      0x00ff, 0x1a04, 0x4e44, 0x080c, 0x4fa9, 0x11a0, 0x6004, 0xa084,
-+      0x00ff, 0xa082, 0x0006, 0x1270, 0x6864, 0xa0c6, 0x006f, 0x0150,
-+      0x2001, 0xb535, 0x2004, 0xd0ac, 0x1904, 0x4e2d, 0x60a0, 0xd0bc,
-+      0x1904, 0x4e2d, 0x6864, 0xa0c6, 0x006f, 0x0118, 0x2008, 0x0804,
-+      0x4df6, 0x6968, 0x2140, 0xa18c, 0xff00, 0x810f, 0x78d4, 0xd0ac,
-+      0x1118, 0xa182, 0x0080, 0x06d0, 0xa182, 0x00ff, 0x16b8, 0x6a70,
-+      0x6b6c, 0x7870, 0xa306, 0x1160, 0x7874, 0xa24e, 0x1118, 0x2208,
-+      0x2310, 0x0460, 0xa9cc, 0xff00, 0x1118, 0x2208, 0x2310, 0x0430,
-+      0x080c, 0x3dc5, 0x2c70, 0x0550, 0x2009, 0x0000, 0x2011, 0x0000,
-+      0xa0c6, 0x4000, 0x1160, 0x0006, 0x2e60, 0x080c, 0x524a, 0x1108,
-+      0xc185, 0x7000, 0xd0bc, 0x0108, 0xc18d, 0x000e, 0x0088, 0xa0c6,
-+      0x4007, 0x1110, 0x2408, 0x0060, 0xa0c6, 0x4008, 0x1118, 0x2708,
-+      0x2610, 0x0030, 0xa0c6, 0x4009, 0x1108, 0x0010, 0x2001, 0x4006,
-+      0x6866, 0x696a, 0x6a6e, 0x2001, 0x0030, 0x0450, 0x080c, 0x85c7,
-+      0x1138, 0x2001, 0x4005, 0x2009, 0x0003, 0x2011, 0x0000, 0x0c80,
-+      0x2e00, 0x601a, 0x080c, 0xa027, 0x2d00, 0x6012, 0x601f, 0x0001,
-+      0x6838, 0xd88c, 0x0108, 0xc0f5, 0x683a, 0x0126, 0x2091, 0x8000,
-+      0x080c, 0x2c9c, 0x012e, 0x2001, 0x0000, 0x080c, 0x4eeb, 0x2001,
-+      0x0002, 0x080c, 0x4efd, 0x2009, 0x0002, 0x080c, 0x864c, 0xa006,
-+      0xa005, 0x012e, 0x00ee, 0x00fe, 0x0005, 0x2001, 0x0028, 0x2009,
-+      0x0000, 0x0cb0, 0x2009, 0xb50c, 0x210c, 0xd18c, 0x0118, 0x2001,
-+      0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001,
-+      0x0029, 0x2009, 0x0000, 0x0c20, 0x2001, 0x0029, 0x2009, 0x0000,
-+      0x08f8, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, 0x16b8,
-+      0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x12e0, 0xa188, 0xb635,
-+      0x2104, 0xa065, 0x01b8, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006,
-+      0x11b0, 0x684c, 0xd0ec, 0x0120, 0x080c, 0x50d5, 0x0431, 0x0030,
-+      0x0421, 0x684c, 0xd0fc, 0x0110, 0x080c, 0x50c6, 0x080c, 0x5113,
-+      0xa006, 0x00c8, 0x2001, 0x0028, 0x2009, 0x0000, 0x00a0, 0xa082,
-+      0x0006, 0x1240, 0x6100, 0xd1fc, 0x0d20, 0x2001, 0x0029, 0x2009,
-+      0x1000, 0x0048, 0x2001, 0x0029, 0x2009, 0x0000, 0x0020, 0x2001,
-+      0x0029, 0x2009, 0x0000, 0xa005, 0x0005, 0x0126, 0x2091, 0x8000,
-+      0x6050, 0xa00d, 0x0138, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052,
-+      0x012e, 0x0005, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0cc0,
-+      0x0126, 0x2091, 0x8000, 0x604c, 0xa005, 0x0170, 0x00e6, 0x2071,
-+      0xb7e0, 0x7004, 0xa086, 0x0002, 0x0168, 0x00ee, 0x604c, 0x6802,
-+      0x2d00, 0x604e, 0x012e, 0x0005, 0x2d00, 0x6052, 0x604e, 0x6803,
-+      0x0000, 0x0cc0, 0x701c, 0xac06, 0x1d80, 0x604c, 0x2070, 0x7000,
-+      0x6802, 0x2d00, 0x7002, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091,
-+      0x8000, 0x604c, 0xa06d, 0x0130, 0x6800, 0xa005, 0x1108, 0x6052,
-+      0x604e, 0xad05, 0x012e, 0x0005, 0x604c, 0xa06d, 0x0130, 0x6800,
-+      0xa005, 0x1108, 0x6052, 0x604e, 0xad05, 0x0005, 0x6803, 0x0000,
-+      0x6084, 0xa00d, 0x0120, 0x2d00, 0x200a, 0x6086, 0x0005, 0x2d00,
-+      0x6086, 0x6082, 0x0cd8, 0x0126, 0x00c6, 0x0026, 0x2091, 0x8000,
-+      0x6218, 0x2260, 0x6200, 0xa005, 0x0110, 0xc285, 0x0008, 0xc284,
-+      0x6202, 0x002e, 0x00ce, 0x012e, 0x0005, 0x0126, 0x00c6, 0x2091,
-+      0x8000, 0x6218, 0x2260, 0x6204, 0x0006, 0xa086, 0x0006, 0x1180,
-+      0x609c, 0xd0ac, 0x0168, 0x2001, 0xb553, 0x2004, 0xd0a4, 0x0140,
-+      0xa284, 0xff00, 0x8007, 0xa086, 0x0007, 0x1110, 0x2011, 0x0600,
-+      0x000e, 0xa294, 0xff00, 0xa215, 0x6206, 0x0006, 0xa086, 0x0006,
-+      0x1128, 0x6290, 0x82ff, 0x1110, 0x080c, 0x1515, 0x000e, 0x00ce,
-+      0x012e, 0x0005, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6218, 0x2260,
-+      0x6204, 0x0006, 0xa086, 0x0006, 0x1178, 0x609c, 0xd0a4, 0x0160,
-+      0x2001, 0xb553, 0x2004, 0xd0ac, 0x1138, 0xa284, 0x00ff, 0xa086,
-+      0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0xa294, 0x00ff, 0x8007,
-+      0xa215, 0x6206, 0x00ce, 0x012e, 0x0005, 0x0026, 0xa182, 0x00ff,
-+      0x0218, 0xa085, 0x0001, 0x00b0, 0xa190, 0xb635, 0x2204, 0xa065,
-+      0x1180, 0x0016, 0x00d6, 0x080c, 0x15df, 0x2d60, 0x00de, 0x001e,
-+      0x0d80, 0x2c00, 0x2012, 0x60a7, 0x0000, 0x60ab, 0x0000, 0x080c,
-+      0x4c0b, 0xa006, 0x002e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0026,
-+      0xa182, 0x00ff, 0x0218, 0xa085, 0x0001, 0x0480, 0x00d6, 0xa190,
-+      0xb635, 0x2204, 0xa06d, 0x0540, 0x2013, 0x0000, 0x00d6, 0x00c6,
-+      0x2d60, 0x60a4, 0xa06d, 0x0110, 0x080c, 0x160f, 0x60a8, 0xa06d,
-+      0x0110, 0x080c, 0x160f, 0x00ce, 0x00de, 0x00d6, 0x00c6, 0x68ac,
-+      0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6010, 0x2068, 0x080c,
-+      0x9c5a, 0x0110, 0x080c, 0x161f, 0x080c, 0x861d, 0x00ce, 0x0c88,
-+      0x00ce, 0x00de, 0x080c, 0x160f, 0x00de, 0xa006, 0x002e, 0x012e,
-+      0x0005, 0x0016, 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001, 0x0030,
-+      0xa188, 0xb635, 0x2104, 0xa065, 0x0dc0, 0xa006, 0x001e, 0x0005,
-+      0x00d6, 0x0156, 0x0136, 0x0146, 0x600b, 0x0000, 0x600f, 0x0000,
-+      0x6000, 0xc08c, 0x6002, 0x080c, 0x5acf, 0x1558, 0x60a0, 0xa086,
-+      0x007e, 0x2069, 0xbb90, 0x0130, 0x2001, 0xb535, 0x2004, 0xd0ac,
-+      0x1500, 0x0098, 0x2d04, 0xd0e4, 0x01e0, 0x00d6, 0x2069, 0xbb8e,
-+      0x00c6, 0x2061, 0xb7b2, 0x6810, 0x2062, 0x6814, 0x6006, 0x6818,
-+      0x600a, 0x681c, 0x600e, 0x00ce, 0x00de, 0x8d69, 0x2d04, 0x2069,
-+      0x0140, 0xa005, 0x1110, 0x2001, 0x0001, 0x6886, 0x2069, 0xb500,
-+      0x68a6, 0x2069, 0xbb8e, 0x6808, 0x605e, 0x6810, 0x6062, 0x6138,
-+      0xa10a, 0x0208, 0x603a, 0x6814, 0x6066, 0x2099, 0xbb96, 0xac88,
-+      0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0xbb9a, 0xac88,
-+      0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0xbbae, 0x6808,
-+      0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076, 0x60a0,
-+      0xa086, 0x007e, 0x1120, 0x2069, 0xbb8e, 0x690c, 0x616e, 0xa182,
-+      0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0xa182, 0x0259, 0x1218,
-+      0x2009, 0x0007, 0x00d0, 0xa182, 0x02c1, 0x1218, 0x2009, 0x0006,
-+      0x00a0, 0xa182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0xa182,
-+      0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0xa182, 0x0581, 0x1218,
-+      0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0x6192, 0x014e, 0x013e,
-+      0x015e, 0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071, 0xbb8d,
-+      0x2e04, 0x6896, 0x2071, 0xbb8e, 0x7004, 0x689a, 0x701c, 0x689e,
-+      0x6a00, 0x2009, 0xb572, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110,
-+      0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0120, 0xd1e4, 0x0110, 0xc2bd,
-+      0x0008, 0xc2bc, 0x6a02, 0x00ee, 0x002e, 0x001e, 0x0005, 0x00d6,
-+      0x0126, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x01c0, 0x6900, 0x81ff,
-+      0x1540, 0x6a04, 0xa282, 0x0010, 0x1648, 0xad88, 0x0004, 0x20a9,
-+      0x0010, 0x2104, 0xa086, 0xffff, 0x0128, 0x8108, 0x1f04, 0x5081,
-+      0x080c, 0x1515, 0x260a, 0x8210, 0x6a06, 0x0098, 0x080c, 0x15f8,
-+      0x01a8, 0x2d00, 0x60a6, 0x6803, 0x0000, 0xad88, 0x0004, 0x20a9,
-+      0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x5099, 0x6807, 0x0001,
-+      0x6e12, 0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0xa006, 0x0cd8,
-+      0x0126, 0x2091, 0x8000, 0x00d6, 0x60a4, 0xa00d, 0x01a0, 0x2168,
-+      0x6800, 0xa005, 0x1160, 0x080c, 0x51d4, 0x1168, 0x200b, 0xffff,
-+      0x6804, 0xa08a, 0x0002, 0x0218, 0x8001, 0x6806, 0x0020, 0x080c,
-+      0x160f, 0x60a7, 0x0000, 0x00de, 0x012e, 0x0005, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x5232, 0x0010, 0x080c, 0x4e8d, 0x080c, 0x514c,
-+      0x1dd8, 0x080c, 0x5113, 0x012e, 0x0005, 0x00d6, 0x0126, 0x2091,
-+      0x8000, 0x60a8, 0xa06d, 0x01c0, 0x6950, 0x81ff, 0x1540, 0x6a54,
-+      0xa282, 0x0010, 0x1670, 0xad88, 0x0018, 0x20a9, 0x0010, 0x2104,
-+      0xa086, 0xffff, 0x0128, 0x8108, 0x1f04, 0x50e7, 0x080c, 0x1515,
-+      0x260a, 0x8210, 0x6a56, 0x0098, 0x080c, 0x15f8, 0x01d0, 0x2d00,
-+      0x60aa, 0x6853, 0x0000, 0xad88, 0x0018, 0x20a9, 0x0010, 0x200b,
-+      0xffff, 0x8108, 0x1f04, 0x50ff, 0x6857, 0x0001, 0x6e62, 0x0010,
-+      0x080c, 0x4ede, 0x0089, 0x1de0, 0xa085, 0x0001, 0x012e, 0x00de,
-+      0x0005, 0xa006, 0x0cd8, 0x0126, 0x2091, 0x8000, 0x080c, 0x6caa,
-+      0x012e, 0x0005, 0xa01e, 0x0010, 0x2019, 0x0001, 0xa00e, 0x0126,
-+      0x2091, 0x8000, 0x604c, 0x2068, 0x6000, 0xd0dc, 0x1170, 0x8dff,
-+      0x01f8, 0x83ff, 0x0120, 0x6848, 0xa606, 0x0158, 0x0030, 0x683c,
-+      0xa406, 0x1118, 0x6840, 0xa506, 0x0120, 0x2d08, 0x6800, 0x2068,
-+      0x0c70, 0x080c, 0x811e, 0x6a00, 0x604c, 0xad06, 0x1110, 0x624e,
-+      0x0018, 0xa180, 0x0000, 0x2202, 0x82ff, 0x1110, 0x6152, 0x8dff,
-+      0x012e, 0x0005, 0xa01e, 0x0010, 0x2019, 0x0001, 0xa00e, 0x6080,
-+      0x2068, 0x8dff, 0x01e8, 0x83ff, 0x0120, 0x6848, 0xa606, 0x0158,
-+      0x0030, 0x683c, 0xa406, 0x1118, 0x6840, 0xa506, 0x0120, 0x2d08,
-+      0x6800, 0x2068, 0x0c70, 0x6a00, 0x6080, 0xad06, 0x1110, 0x6282,
-+      0x0018, 0xa180, 0x0000, 0x2202, 0x82ff, 0x1110, 0x6186, 0x8dff,
-+      0x0005, 0xa016, 0x080c, 0x51ce, 0x1110, 0x2011, 0x0001, 0x080c,
-+      0x5219, 0x1110, 0xa295, 0x0002, 0x0005, 0x080c, 0x524a, 0x0118,
-+      0x080c, 0x9d0f, 0x0010, 0xa085, 0x0001, 0x0005, 0x080c, 0x524a,
-+      0x0118, 0x080c, 0x9c9f, 0x0010, 0xa085, 0x0001, 0x0005, 0x080c,
-+      0x524a, 0x0118, 0x080c, 0x9cf2, 0x0010, 0xa085, 0x0001, 0x0005,
-+      0x080c, 0x524a, 0x0118, 0x080c, 0x9cbb, 0x0010, 0xa085, 0x0001,
-+      0x0005, 0x080c, 0x524a, 0x0118, 0x080c, 0x9d2b, 0x0010, 0xa085,
-+      0x0001, 0x0005, 0x0126, 0x0006, 0x00d6, 0x2091, 0x8000, 0x6080,
-+      0xa06d, 0x01a0, 0x6800, 0x0006, 0x6837, 0x0103, 0x6b4a, 0x6847,
-+      0x0000, 0x080c, 0x9ecc, 0x0006, 0x6000, 0xd0fc, 0x0110, 0x080c,
-+      0xb389, 0x000e, 0x080c, 0x5408, 0x000e, 0x0c50, 0x6083, 0x0000,
-+      0x6087, 0x0000, 0x00de, 0x000e, 0x012e, 0x0005, 0x60a4, 0xa00d,
-+      0x1118, 0xa085, 0x0001, 0x0005, 0x00e6, 0x2170, 0x7000, 0xa005,
-+      0x1168, 0x20a9, 0x0010, 0xae88, 0x0004, 0x2104, 0xa606, 0x0130,
-+      0x8108, 0x1f04, 0x51dd, 0xa085, 0x0001, 0x0008, 0xa006, 0x00ee,
-+      0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x1128,
-+      0x080c, 0x15f8, 0x01a0, 0x2d00, 0x60a6, 0x6803, 0x0001, 0x6807,
-+      0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108,
-+      0x1f04, 0x51fd, 0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0xa006,
-+      0x0cd8, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x0130,
-+      0x60a7, 0x0000, 0x080c, 0x160f, 0xa085, 0x0001, 0x012e, 0x00de,
-+      0x0005, 0x60a8, 0xa00d, 0x1118, 0xa085, 0x0001, 0x0005, 0x00e6,
-+      0x2170, 0x7050, 0xa005, 0x1160, 0x20a9, 0x0010, 0xae88, 0x0018,
-+      0x2104, 0xa606, 0x0128, 0x8108, 0x1f04, 0x5228, 0xa085, 0x0001,
-+      0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x0c19, 0x1188, 0x200b,
-+      0xffff, 0x00d6, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002, 0x0218,
-+      0x8001, 0x6856, 0x0020, 0x080c, 0x160f, 0x60ab, 0x0000, 0x00de,
-+      0x012e, 0x0005, 0x609c, 0xd0a4, 0x0005, 0x00f6, 0x080c, 0x5acf,
-+      0x01b0, 0x71b8, 0x81ff, 0x1198, 0x71d4, 0xd19c, 0x0180, 0x2001,
-+      0x007e, 0xa080, 0xb635, 0x2004, 0xa07d, 0x0148, 0x7804, 0xa084,
-+      0x00ff, 0xa086, 0x0006, 0x1118, 0x7800, 0xc0ed, 0x7802, 0x2079,
-+      0xb552, 0x7804, 0xd0a4, 0x01e8, 0x0156, 0x00c6, 0x20a9, 0x007f,
-+      0x2009, 0x0000, 0x0016, 0x080c, 0x4fa9, 0x1168, 0x6004, 0xa084,
-+      0xff00, 0x8007, 0xa096, 0x0004, 0x0118, 0xa086, 0x0006, 0x1118,
-+      0x6000, 0xc0ed, 0x6002, 0x001e, 0x8108, 0x1f04, 0x5272, 0x00ce,
-+      0x015e, 0x080c, 0x5309, 0x0120, 0x2001, 0xb7b5, 0x200c, 0x0038,
-+      0x2079, 0xb552, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011,
-+      0x529d, 0x080c, 0x6a22, 0x00fe, 0x0005, 0x2011, 0x529d, 0x080c,
-+      0x699c, 0x080c, 0x5309, 0x01f0, 0x2001, 0xb6b3, 0x2004, 0xa080,
-+      0x0000, 0x200c, 0xc1ec, 0x2102, 0x2001, 0xb553, 0x2004, 0xd0a4,
-+      0x0130, 0x2009, 0x07d0, 0x2011, 0x529d, 0x080c, 0x6a22, 0x00e6,
-+      0x2071, 0xb500, 0x7073, 0x0000, 0x7077, 0x0000, 0x080c, 0x2ab8,
-+      0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x2009, 0x0000,
-+      0x0016, 0x080c, 0x4fa9, 0x1530, 0x6000, 0xd0ec, 0x0518, 0x0046,
-+      0x62a0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, 0x080c,
-+      0xb0e8, 0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x6004, 0xa084, 0x00ff,
-+      0xa085, 0x0700, 0x6006, 0x2019, 0x0029, 0x080c, 0x6df5, 0x0076,
-+      0x2039, 0x0000, 0x080c, 0x6d02, 0x2009, 0x0000, 0x080c, 0xae82,
-+      0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x52c8, 0x00ce, 0x015e,
-+      0x0005, 0x00c6, 0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x00ce,
-+      0x0005, 0x7818, 0x2004, 0xd0ac, 0x0005, 0x7818, 0x2004, 0xd0bc,
-+      0x0005, 0x00f6, 0x2001, 0xb6b3, 0x2004, 0xa07d, 0x0110, 0x7800,
-+      0xd0ec, 0x00fe, 0x0005, 0x0126, 0x0026, 0x2091, 0x8000, 0x0006,
-+      0x62a0, 0xa290, 0xb635, 0x2204, 0xac06, 0x190c, 0x1515, 0x000e,
-+      0x6200, 0xa005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0x6202, 0x002e,
-+      0x012e, 0x0005, 0x2011, 0xb535, 0x2204, 0xd0cc, 0x0138, 0x2001,
-+      0xb7b3, 0x200c, 0x2011, 0x5337, 0x080c, 0x6a22, 0x0005, 0x2011,
-+      0x5337, 0x080c, 0x699c, 0x2011, 0xb535, 0x2204, 0xc0cc, 0x2012,
-+      0x0005, 0x2071, 0xb614, 0x7003, 0x0001, 0x7007, 0x0000, 0x7013,
-+      0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x700b,
-+      0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b, 0x0020, 0x705f,
-+      0x0040, 0x707f, 0x0000, 0x2071, 0xb77d, 0x7003, 0xb614, 0x7007,
-+      0x0000, 0x700b, 0x0000, 0x700f, 0xb75d, 0x7013, 0x0020, 0x7017,
-+      0x0040, 0x7037, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0xb735,
-+      0xa00e, 0x7186, 0x718a, 0x7097, 0x0001, 0x2001, 0xb553, 0x2004,
-+      0xd0fc, 0x1150, 0x2001, 0xb553, 0x2004, 0xa00e, 0xd09c, 0x0108,
-+      0x8108, 0x7102, 0x0804, 0x53d2, 0x2001, 0xb572, 0x200c, 0xa184,
-+      0x000f, 0x2009, 0xb573, 0x210c, 0x0002, 0x537a, 0x53ad, 0x53b4,
-+      0x53be, 0x53c3, 0x537a, 0x537a, 0x537a, 0x539d, 0x537a, 0x537a,
-+      0x537a, 0x537a, 0x537a, 0x537a, 0x537a, 0x7003, 0x0004, 0x0136,
-+      0x0146, 0x0156, 0x2099, 0xb576, 0x20a1, 0xb786, 0x20a9, 0x0004,
-+      0x53a3, 0x015e, 0x014e, 0x013e, 0x0428, 0x708f, 0x0005, 0x7007,
-+      0x0122, 0x2001, 0x0002, 0x0030, 0x708f, 0x0002, 0x7007, 0x0121,
-+      0x2001, 0x0003, 0x7002, 0x7097, 0x0001, 0x0088, 0x7007, 0x0122,
-+      0x2001, 0x0002, 0x0020, 0x7007, 0x0121, 0x2001, 0x0003, 0x7002,
-+      0xa006, 0x7096, 0x708e, 0xa184, 0xff00, 0x8007, 0x709a, 0xa184,
-+      0x00ff, 0x7092, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071, 0xb614,
-+      0x684c, 0xa005, 0x1130, 0x7028, 0xc085, 0x702a, 0xa085, 0x0001,
-+      0x0428, 0x6a60, 0x7236, 0x6b64, 0x733a, 0x6868, 0x703e, 0x7076,
-+      0x686c, 0x7042, 0x707a, 0x684c, 0x702e, 0x6844, 0x7032, 0x2009,
-+      0x000d, 0x200a, 0x700b, 0x0000, 0x8007, 0x8006, 0x8006, 0xa08c,
-+      0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x726e, 0x7372,
-+      0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006, 0x00ee, 0x0005,
-+      0x0156, 0x00e6, 0x0026, 0x6838, 0xd0fc, 0x1904, 0x5461, 0x6804,
-+      0xa00d, 0x0188, 0x00d6, 0x2071, 0xb500, 0xa016, 0x702c, 0x2168,
-+      0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e, 0x70b4,
-+      0xa200, 0x70b6, 0x00de, 0x2071, 0xb614, 0x701c, 0xa005, 0x1904,
-+      0x5471, 0x20a9, 0x0032, 0x0f04, 0x546f, 0x0e04, 0x542b, 0x2071,
-+      0xb735, 0x7200, 0x82ff, 0x05d8, 0x6934, 0xa186, 0x0103, 0x1904,
-+      0x547f, 0x6948, 0x6844, 0xa105, 0x1540, 0x2009, 0x8020, 0x2200,
-+      0x0002, 0x546f, 0x5446, 0x5497, 0x54a3, 0x546f, 0x2071, 0x0000,
-+      0x20a9, 0x0032, 0x0f04, 0x546f, 0x7018, 0xd084, 0x1dd8, 0x7122,
-+      0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080,
-+      0x2071, 0xb500, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70b4, 0x8000,
-+      0x70b6, 0x002e, 0x00ee, 0x015e, 0x0005, 0x6844, 0xa086, 0x0100,
-+      0x1130, 0x6868, 0xa005, 0x1118, 0x2009, 0x8020, 0x0880, 0x2071,
-+      0xb614, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000, 0x7012, 0x7018,
-+      0xa06d, 0x711a, 0x0110, 0x6902, 0x0008, 0x711e, 0x0c10, 0xa18c,
-+      0x00ff, 0xa186, 0x0017, 0x0130, 0xa186, 0x001e, 0x0118, 0xa18e,
-+      0x001f, 0x1d28, 0x684c, 0xd0cc, 0x0d10, 0x6850, 0xa084, 0x00ff,
-+      0xa086, 0x0001, 0x19e0, 0x2009, 0x8021, 0x0804, 0x543f, 0x7084,
-+      0x8008, 0xa092, 0x001e, 0x1a98, 0x7186, 0xae90, 0x0003, 0xa210,
-+      0x683c, 0x2012, 0x0078, 0x7084, 0x8008, 0xa092, 0x000f, 0x1a38,
-+      0x7186, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012, 0x8210,
-+      0x6840, 0x2012, 0x7088, 0xa10a, 0x0a04, 0x5458, 0x718c, 0x7084,
-+      0xa10a, 0x0a04, 0x5458, 0x2071, 0x0000, 0x7018, 0xd084, 0x1904,
-+      0x5458, 0x2071, 0xb735, 0x7000, 0xa086, 0x0002, 0x1150, 0x080c,
-+      0x5722, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804,
-+      0x5458, 0x080c, 0x574c, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091,
-+      0x4080, 0x0804, 0x5458, 0x0006, 0x684c, 0x0006, 0x6837, 0x0103,
-+      0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4,
-+      0x000e, 0xa084, 0x00ff, 0x684e, 0x000e, 0x684a, 0x6952, 0x0005,
-+      0x2071, 0xb614, 0x7004, 0x0002, 0x54fe, 0x550f, 0x570d, 0x570e,
-+      0x571b, 0x5721, 0x54ff, 0x56fe, 0x5694, 0x56ea, 0x0005, 0x0126,
-+      0x2091, 0x8000, 0x0e04, 0x550e, 0x2009, 0x000d, 0x7030, 0x200a,
-+      0x2091, 0x4080, 0x7007, 0x0001, 0x700b, 0x0000, 0x012e, 0x2069,
-+      0xb7f3, 0x683c, 0xa005, 0x03f8, 0x11f0, 0x0126, 0x2091, 0x8000,
-+      0x2069, 0x0000, 0x6934, 0x2001, 0xb620, 0x2004, 0xa10a, 0x0170,
-+      0x0e04, 0x5532, 0x2069, 0x0000, 0x6818, 0xd084, 0x1158, 0x2009,
-+      0x8040, 0x6922, 0x681b, 0x0001, 0x2091, 0x4080, 0x2069, 0xb7f3,
-+      0x683f, 0xffff, 0x012e, 0x2069, 0xb500, 0x6848, 0x6968, 0xa102,
-+      0x2069, 0xb735, 0x688a, 0x6984, 0x701c, 0xa06d, 0x0120, 0x81ff,
-+      0x0904, 0x5588, 0x00a0, 0x81ff, 0x0904, 0x564e, 0x2071, 0xb735,
-+      0x7184, 0x7088, 0xa10a, 0x1258, 0x7190, 0x2071, 0xb7f3, 0x7038,
-+      0xa005, 0x0128, 0x1b04, 0x564e, 0x713a, 0x0804, 0x564e, 0x2071,
-+      0xb735, 0x718c, 0x0126, 0x2091, 0x8000, 0x7084, 0xa10a, 0x0a04,
-+      0x5669, 0x0e04, 0x560a, 0x2071, 0x0000, 0x7018, 0xd084, 0x1904,
-+      0x560a, 0x2001, 0xffff, 0x2071, 0xb7f3, 0x703a, 0x2071, 0xb735,
-+      0x7000, 0xa086, 0x0002, 0x1150, 0x080c, 0x5722, 0x2071, 0x0000,
-+      0x701b, 0x0001, 0x2091, 0x4080, 0x0804, 0x560a, 0x080c, 0x574c,
-+      0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804, 0x560a,
-+      0x2071, 0xb735, 0x7000, 0xa005, 0x0904, 0x5630, 0x6934, 0xa186,
-+      0x0103, 0x1904, 0x560d, 0x684c, 0xd0bc, 0x1904, 0x5630, 0x6948,
-+      0x6844, 0xa105, 0x1904, 0x5625, 0x2009, 0x8020, 0x2071, 0xb735,
-+      0x7000, 0x0002, 0x5630, 0x55f0, 0x55c8, 0x55da, 0x55a7, 0x0136,
-+      0x0146, 0x0156, 0x2099, 0xb576, 0x20a1, 0xb786, 0x20a9, 0x0004,
-+      0x53a3, 0x015e, 0x014e, 0x013e, 0x2071, 0xb77d, 0xad80, 0x000f,
-+      0x700e, 0x7013, 0x0002, 0x7007, 0x0002, 0x700b, 0x0000, 0x2e10,
-+      0x080c, 0x1643, 0x2071, 0xb614, 0x7007, 0x0009, 0x0804, 0x564e,
-+      0x7084, 0x8008, 0xa092, 0x001e, 0x1a04, 0x564e, 0xae90, 0x0003,
-+      0xa210, 0x683c, 0x2012, 0x7186, 0x2071, 0xb614, 0x080c, 0x57a3,
-+      0x0804, 0x564e, 0x7084, 0x8008, 0xa092, 0x000f, 0x1a04, 0x564e,
-+      0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012, 0x8210, 0x6840,
-+      0x2012, 0x7186, 0x2071, 0xb614, 0x080c, 0x57a3, 0x0804, 0x564e,
-+      0x0126, 0x2091, 0x8000, 0x0e04, 0x560a, 0x2071, 0x0000, 0x7018,
-+      0xd084, 0x1180, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b,
-+      0x0001, 0x2091, 0x4080, 0x012e, 0x2071, 0xb614, 0x080c, 0x57a3,
-+      0x0804, 0x564e, 0x012e, 0x0804, 0x564e, 0xa18c, 0x00ff, 0xa186,
-+      0x0017, 0x0130, 0xa186, 0x001e, 0x0118, 0xa18e, 0x001f, 0x11c0,
-+      0x684c, 0xd0cc, 0x01a8, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001,
-+      0x1178, 0x2009, 0x8021, 0x0804, 0x559e, 0x6844, 0xa086, 0x0100,
-+      0x1138, 0x6868, 0xa005, 0x1120, 0x2009, 0x8020, 0x0804, 0x559e,
-+      0x2071, 0xb614, 0x080c, 0x57b5, 0x01c8, 0x2071, 0xb614, 0x700f,
-+      0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003, 0x1130, 0x810f,
-+      0xa18c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x7007, 0x0003, 0x080c,
-+      0x57ce, 0x7050, 0xa086, 0x0100, 0x0904, 0x570e, 0x0126, 0x2091,
-+      0x8000, 0x2071, 0xb614, 0x7008, 0xa086, 0x0001, 0x1180, 0x0e04,
-+      0x5667, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091, 0x4080, 0x700b,
-+      0x0000, 0x7004, 0xa086, 0x0006, 0x1110, 0x7007, 0x0001, 0x012e,
-+      0x0005, 0x2071, 0xb614, 0x080c, 0x57b5, 0x0518, 0x2071, 0xb735,
-+      0x7084, 0x700a, 0x20a9, 0x0020, 0x2099, 0xb736, 0x20a1, 0xb75d,
-+      0x53a3, 0x7087, 0x0000, 0x2071, 0xb614, 0x2069, 0xb77d, 0x706c,
-+      0x6826, 0x7070, 0x682a, 0x7074, 0x682e, 0x7078, 0x6832, 0x2d10,
-+      0x080c, 0x1643, 0x7007, 0x0008, 0x2001, 0xffff, 0x2071, 0xb7f3,
-+      0x703a, 0x012e, 0x0804, 0x564e, 0x2069, 0xb77d, 0x6808, 0xa08e,
-+      0x0000, 0x0904, 0x56e9, 0xa08e, 0x0200, 0x0904, 0x56e7, 0xa08e,
-+      0x0100, 0x1904, 0x56e9, 0x0126, 0x2091, 0x8000, 0x0e04, 0x56e5,
-+      0x2069, 0x0000, 0x6818, 0xd084, 0x15c0, 0x702c, 0x7130, 0x8108,
-+      0xa102, 0x0230, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072, 0x0048,
-+      0x706c, 0xa080, 0x0040, 0x706e, 0x1220, 0x7070, 0xa081, 0x0000,
-+      0x7072, 0x7132, 0x6936, 0x700b, 0x0000, 0x2001, 0xb75a, 0x2004,
-+      0xa005, 0x1190, 0x6934, 0x2069, 0xb735, 0x689c, 0x699e, 0x2069,
-+      0xb7f3, 0xa102, 0x1118, 0x683c, 0xa005, 0x1368, 0x2001, 0xb75b,
-+      0x200c, 0x810d, 0x693e, 0x0038, 0x2009, 0x8040, 0x6922, 0x681b,
-+      0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x012e, 0x0010, 0x7007,
-+      0x0005, 0x0005, 0x2001, 0xb77f, 0x2004, 0xa08e, 0x0100, 0x1128,
-+      0x7007, 0x0001, 0x080c, 0x57a3, 0x0005, 0xa08e, 0x0000, 0x0de0,
-+      0xa08e, 0x0200, 0x1dc8, 0x7007, 0x0005, 0x0005, 0x701c, 0xa06d,
-+      0x0158, 0x080c, 0x57b5, 0x0140, 0x7007, 0x0003, 0x080c, 0x57ce,
-+      0x7050, 0xa086, 0x0100, 0x0110, 0x0005, 0x0005, 0x7050, 0xa09e,
-+      0x0100, 0x1118, 0x7007, 0x0004, 0x0030, 0xa086, 0x0200, 0x1110,
-+      0x7007, 0x0005, 0x0005, 0x080c, 0x5771, 0x7006, 0x080c, 0x57a3,
-+      0x0005, 0x0005, 0x00e6, 0x0156, 0x2071, 0xb735, 0x7184, 0x81ff,
-+      0x0500, 0xa006, 0x7086, 0xae80, 0x0003, 0x2071, 0x0000, 0x21a8,
-+      0x2014, 0x7226, 0x8000, 0x0f04, 0x5746, 0x2014, 0x722a, 0x8000,
-+      0x0f04, 0x5746, 0x2014, 0x722e, 0x8000, 0x0f04, 0x5746, 0x2014,
-+      0x723a, 0x8000, 0x0f04, 0x5746, 0x2014, 0x723e, 0xa180, 0x8030,
-+      0x7022, 0x015e, 0x00ee, 0x0005, 0x00e6, 0x0156, 0x2071, 0xb735,
-+      0x7184, 0x81ff, 0x01d8, 0xa006, 0x7086, 0xae80, 0x0003, 0x2071,
-+      0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x2014, 0x722a, 0x8000,
-+      0x0f04, 0x5768, 0x2014, 0x723a, 0x8000, 0x2014, 0x723e, 0x0018,
-+      0x2001, 0x8020, 0x0010, 0x2001, 0x8042, 0x7022, 0x015e, 0x00ee,
-+      0x0005, 0x702c, 0x7130, 0x8108, 0xa102, 0x0230, 0xa00e, 0x7034,
-+      0x706e, 0x7038, 0x7072, 0x0048, 0x706c, 0xa080, 0x0040, 0x706e,
-+      0x1220, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, 0x8001,
-+      0x700e, 0x1180, 0x0126, 0x2091, 0x8000, 0x0e04, 0x579d, 0x2001,
-+      0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x700b, 0x0000,
-+      0x012e, 0x0005, 0x2001, 0x0007, 0x0005, 0x2001, 0x0006, 0x700b,
-+      0x0001, 0x012e, 0x0005, 0x701c, 0xa06d, 0x0170, 0x0126, 0x2091,
-+      0x8000, 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0xa005, 0x1108,
-+      0x701a, 0x012e, 0x080c, 0x160f, 0x0005, 0x2019, 0x000d, 0x2304,
-+      0x230c, 0xa10e, 0x0130, 0x2304, 0x230c, 0xa10e, 0x0110, 0xa006,
-+      0x0060, 0x732c, 0x8319, 0x7130, 0xa102, 0x1118, 0x2300, 0xa005,
-+      0x0020, 0x0210, 0xa302, 0x0008, 0x8002, 0x0005, 0x2d00, 0x7026,
-+      0xa080, 0x000d, 0x7056, 0x7053, 0x0000, 0x0126, 0x2091, 0x8000,
-+      0x2009, 0xb812, 0x2104, 0xc08d, 0x200a, 0x012e, 0x080c, 0x165f,
-+      0x0005, 0x708c, 0xa08a, 0x0029, 0x1220, 0xa082, 0x001d, 0x0033,
-+      0x0010, 0x080c, 0x1515, 0x6027, 0x1e00, 0x0005, 0x58dc, 0x5857,
-+      0x586f, 0x58ac, 0x58cd, 0x5907, 0x5919, 0x586f, 0x58f3, 0x57fb,
-+      0x5829, 0x57fa, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0xa005,
-+      0x1180, 0x6808, 0xa005, 0x1518, 0x708f, 0x0028, 0x2069, 0xb7c5,
-+      0x2d04, 0x7002, 0x080c, 0x5bd1, 0x6028, 0xa085, 0x0600, 0x602a,
-+      0x00b0, 0x708f, 0x0028, 0x2069, 0xb7c5, 0x2d04, 0x7002, 0x6028,
-+      0xa085, 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071,
-+      0xb823, 0x080c, 0x1dfe, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de,
-+      0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0xa005, 0x1180, 0x6808,
-+      0xa005, 0x1518, 0x708f, 0x0028, 0x2069, 0xb7c5, 0x2d04, 0x7002,
-+      0x080c, 0x5c5e, 0x6028, 0xa085, 0x0600, 0x602a, 0x00b0, 0x708f,
-+      0x0028, 0x2069, 0xb7c5, 0x2d04, 0x7002, 0x6028, 0xa085, 0x0600,
-+      0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0xb823, 0x080c,
-+      0x1dfe, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x6803,
-+      0x0090, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x5984, 0xd1d4, 0x1160,
-+      0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x708f, 0x0020, 0x080c, 0x5984,
-+      0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x001f, 0x0005, 0x6803,
-+      0x0088, 0x6124, 0xd1cc, 0x1590, 0xd1dc, 0x1568, 0xd1e4, 0x1540,
-+      0xa184, 0x1e00, 0x1580, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e,
-+      0x080c, 0x5aff, 0x080c, 0x24b0, 0x0156, 0x6803, 0x0100, 0x20a9,
-+      0x0014, 0x6804, 0xd0dc, 0x1118, 0x1f04, 0x5889, 0x0048, 0x20a9,
-+      0x0014, 0x6803, 0x0080, 0x6804, 0xd0d4, 0x1130, 0x1f04, 0x5893,
-+      0x080c, 0x5b20, 0x015e, 0x0078, 0x015e, 0x708f, 0x0028, 0x0058,
-+      0x708f, 0x001e, 0x0040, 0x708f, 0x001d, 0x0028, 0x708f, 0x0020,
-+      0x0010, 0x708f, 0x001f, 0x0005, 0x60e3, 0x0001, 0x600c, 0xc0b4,
-+      0x600e, 0x080c, 0x5aff, 0x080c, 0x24b0, 0x6803, 0x0080, 0x6124,
-+      0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0xa184, 0x1e00,
-+      0x1158, 0x708f, 0x0028, 0x0040, 0x708f, 0x001e, 0x0028, 0x708f,
-+      0x001d, 0x0010, 0x708f, 0x001f, 0x0005, 0x6803, 0x00a0, 0x6124,
-+      0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1e47, 0x708f, 0x001e,
-+      0x0010, 0x708f, 0x001d, 0x0005, 0x080c, 0x59f6, 0x6124, 0xd1dc,
-+      0x1188, 0x080c, 0x5984, 0x0016, 0x080c, 0x1e47, 0x001e, 0xd1d4,
-+      0x1128, 0xd1e4, 0x0138, 0x708f, 0x001e, 0x0020, 0x708f, 0x001f,
-+      0x080c, 0x5984, 0x0005, 0x6803, 0x00a0, 0x6124, 0xd1d4, 0x1160,
-+      0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x708f, 0x001e,
-+      0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x0021, 0x0005, 0x080c,
-+      0x59f6, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140,
-+      0x708f, 0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x001f,
-+      0x0005, 0x6803, 0x0090, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150,
-+      0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x708f, 0x001e, 0x0040, 0x708f,
-+      0x001d, 0x0028, 0x708f, 0x0020, 0x0010, 0x708f, 0x001f, 0x0005,
-+      0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069,
-+      0x0140, 0x2071, 0xb500, 0x2091, 0x8000, 0x080c, 0x5acf, 0x11e8,
-+      0x2001, 0xb50c, 0x200c, 0xd1b4, 0x01c0, 0xc1b4, 0x2102, 0x6027,
-+      0x0200, 0xe000, 0xe000, 0x6024, 0xd0cc, 0x0158, 0x6803, 0x00a0,
-+      0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003, 0x0001,
-+      0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x5aeb, 0x0150,
-+      0x080c, 0x5ae1, 0x1138, 0x2001, 0x0001, 0x080c, 0x27c3, 0x080c,
-+      0x5aa6, 0x00a0, 0x080c, 0x59f3, 0x0178, 0x2001, 0x0001, 0x080c,
-+      0x27c3, 0x708c, 0xa086, 0x001e, 0x0120, 0x708c, 0xa086, 0x0022,
-+      0x1118, 0x708f, 0x0025, 0x0010, 0x708f, 0x0021, 0x012e, 0x00ee,
-+      0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x5995, 0x080c,
-+      0x6a5c, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x5995,
-+      0x080c, 0x6a53, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016,
-+      0x080c, 0x7d7a, 0x2071, 0xb500, 0x080c, 0x5930, 0x001e, 0x00fe,
-+      0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,
-+      0x00f6, 0x0126, 0x080c, 0x7d7a, 0x2061, 0x0100, 0x2069, 0x0140,
-+      0x2071, 0xb500, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x2011,
-+      0x0003, 0x080c, 0x8075, 0x2011, 0x0002, 0x080c, 0x807f, 0x080c,
-+      0x7f59, 0x080c, 0x6a10, 0x0036, 0x2019, 0x0000, 0x080c, 0x7fe4,
-+      0x003e, 0x60e3, 0x0000, 0x080c, 0xb42f, 0x080c, 0xb44a, 0x2001,
-+      0xb500, 0x2003, 0x0004, 0x6027, 0x0008, 0x080c, 0x12dd, 0x2001,
-+      0x0001, 0x080c, 0x27c3, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce,
-+      0x003e, 0x002e, 0x001e, 0x0005, 0x2001, 0xb500, 0x2004, 0xa086,
-+      0x0004, 0x0140, 0x2001, 0xb79e, 0x2003, 0xaaaa, 0x2001, 0xb79f,
-+      0x2003, 0x0000, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, 0xa086,
-+      0x00c0, 0x0160, 0x6803, 0x00c0, 0x0156, 0x20a9, 0x002d, 0x1d04,
-+      0x59ff, 0x2091, 0x6000, 0x1f04, 0x59ff, 0x015e, 0x0005, 0x00c6,
-       0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0xb500,
--      0x2001, 0xb79e, 0x2003, 0x0000, 0x2001, 0xb78f, 0x2003, 0x0000,
--      0x708f, 0x0000, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001, 0x0000,
--      0x080c, 0x2872, 0x6803, 0x0000, 0x6043, 0x0090, 0x6043, 0x0010,
--      0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005,
--      0x0006, 0x2001, 0xb79e, 0x2004, 0xa086, 0xaaaa, 0x000e, 0x0005,
--      0x0006, 0x2001, 0xb572, 0x2004, 0xa084, 0x0030, 0xa086, 0x0000,
--      0x000e, 0x0005, 0x0006, 0x2001, 0xb572, 0x2004, 0xa084, 0x0030,
--      0xa086, 0x0030, 0x000e, 0x0005, 0x0006, 0x2001, 0xb572, 0x2004,
--      0xa084, 0x0030, 0xa086, 0x0010, 0x000e, 0x0005, 0x0006, 0x2001,
--      0xb572, 0x2004, 0xa084, 0x0030, 0xa086, 0x0020, 0x000e, 0x0005,
--      0x2001, 0xb50c, 0x2004, 0xd0a4, 0x0170, 0x080c, 0x2892, 0x0036,
--      0x0016, 0x2009, 0x0000, 0x2019, 0x0028, 0x080c, 0x2c6f, 0x001e,
--      0x003e, 0xa006, 0x0009, 0x0005, 0x00e6, 0x2071, 0xb50c, 0x2e04,
--      0x0118, 0xa085, 0x0010, 0x0010, 0xa084, 0xffef, 0x2072, 0x00ee,
--      0x0005, 0x6050, 0x0006, 0x60f0, 0x0006, 0x60ec, 0x0006, 0x600c,
--      0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x602f, 0x0100, 0x602f,
--      0x0000, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e,
--      0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x000e, 0x60f2, 0x60e3,
--      0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x2872, 0x6800,
--      0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6803, 0x00a0, 0x000e, 0x6052,
--      0x6050, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
--      0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0xb500, 0x6020,
--      0xa084, 0x0080, 0x0138, 0x2001, 0xb50c, 0x200c, 0xc1bd, 0x2102,
--      0x0804, 0x5bca, 0x2001, 0xb50c, 0x200c, 0xc1bc, 0x2102, 0x6028,
--      0xa084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x6803, 0x0090, 0x20a9,
--      0x0384, 0x6024, 0xd0cc, 0x1508, 0x1d04, 0x5b79, 0x2091, 0x6000,
--      0x1f04, 0x5b79, 0x2011, 0x0003, 0x080c, 0x8076, 0x2011, 0x0002,
--      0x080c, 0x8080, 0x080c, 0x7f5a, 0x2019, 0x0000, 0x080c, 0x7fe5,
--      0x6803, 0x00a0, 0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500,
--      0x2003, 0x0001, 0xa085, 0x0001, 0x0468, 0x86ff, 0x1110, 0x080c,
--      0x1e47, 0x60e3, 0x0000, 0x2001, 0xb78f, 0x2004, 0x080c, 0x2872,
--      0x60e2, 0x080c, 0x24b0, 0x6803, 0x0080, 0x20a9, 0x0384, 0x6027,
--      0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c, 0x0138, 0x1d04,
--      0x5baf, 0x2091, 0x6000, 0x1f04, 0x5baf, 0x0820, 0x6028, 0xa085,
--      0x1e00, 0x602a, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001, 0x0008,
--      0x6886, 0xa006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
--      0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
--      0x00e6, 0x2061, 0x0100, 0x2071, 0xb500, 0x2069, 0x0140, 0x6020,
--      0xa084, 0x00c0, 0x0120, 0x6884, 0xa005, 0x1904, 0x5c26, 0x6803,
--      0x0088, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001, 0x0000, 0x080c,
--      0x2872, 0x2069, 0x0200, 0x6804, 0xa005, 0x1118, 0x6808, 0xa005,
--      0x01c0, 0x6028, 0xa084, 0xfbff, 0x602a, 0x6027, 0x0400, 0x2069,
--      0xb7c5, 0x7000, 0x206a, 0x708f, 0x0026, 0x7003, 0x0001, 0x20a9,
--      0x0002, 0x1d04, 0x5c09, 0x2091, 0x6000, 0x1f04, 0x5c09, 0x0804,
--      0x5c57, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00, 0x2009,
--      0x1e00, 0xe000, 0x6024, 0xa10c, 0x0520, 0xa084, 0x1a00, 0x1508,
--      0x1d04, 0x5c15, 0x2091, 0x6000, 0x1f04, 0x5c15, 0x2011, 0x0003,
--      0x080c, 0x8076, 0x2011, 0x0002, 0x080c, 0x8080, 0x080c, 0x7f5a,
--      0x2019, 0x0000, 0x080c, 0x7fe5, 0x6803, 0x00a0, 0x2001, 0xb79f,
--      0x2003, 0x0001, 0x2001, 0xb500, 0x2003, 0x0001, 0xa085, 0x0001,
--      0x00b0, 0x080c, 0x24b0, 0x6803, 0x0080, 0x2069, 0x0140, 0x60e3,
-+      0x2001, 0xb79f, 0x200c, 0xa186, 0x0000, 0x0158, 0xa186, 0x0001,
-+      0x0158, 0xa186, 0x0002, 0x0158, 0xa186, 0x0003, 0x0158, 0x0804,
-+      0x5a94, 0x708f, 0x0022, 0x0040, 0x708f, 0x0021, 0x0028, 0x708f,
-+      0x0023, 0x0020, 0x708f, 0x0024, 0x6043, 0x0000, 0x60e3, 0x0000,
-+      0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x2872, 0x0026, 0x2011,
-+      0x0003, 0x080c, 0x8075, 0x2011, 0x0002, 0x080c, 0x807f, 0x080c,
-+      0x7f59, 0x0036, 0x2019, 0x0000, 0x080c, 0x7fe4, 0x003e, 0x002e,
-+      0x7000, 0xa08e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b,
-+      0x0020, 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024,
-+      0xd0ac, 0x0120, 0x012e, 0x015e, 0x0804, 0x5aa2, 0x6800, 0xa084,
-+      0x00a0, 0xc0bd, 0x6802, 0x6904, 0xd1d4, 0x1130, 0x6803, 0x0100,
-+      0x1f04, 0x5a57, 0x080c, 0x5b20, 0x012e, 0x015e, 0x080c, 0x5ae1,
-+      0x01a8, 0x6044, 0xa005, 0x0168, 0x6050, 0x0006, 0xa085, 0x0020,
-+      0x6052, 0x080c, 0x5b20, 0xa006, 0x8001, 0x1df0, 0x000e, 0x6052,
-+      0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x5b20, 0x0016, 0x0026,
-+      0x2009, 0x00c8, 0x2011, 0x59a2, 0x080c, 0x6a22, 0x002e, 0x001e,
-+      0x2001, 0xb79f, 0x2003, 0x0004, 0x080c, 0x57e1, 0x080c, 0x5ae1,
-+      0x0148, 0x6804, 0xd0d4, 0x1130, 0xd0dc, 0x1100, 0x2001, 0xb79f,
-+      0x2003, 0x0000, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6,
-+      0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0xb500, 0x2001,
-+      0xb79e, 0x2003, 0x0000, 0x2001, 0xb78f, 0x2003, 0x0000, 0x708f,
-+      0x0000, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001, 0x0000, 0x080c,
-+      0x2872, 0x6803, 0x0000, 0x6043, 0x0090, 0x6043, 0x0010, 0x6027,
-+      0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006,
-+      0x2001, 0xb79e, 0x2004, 0xa086, 0xaaaa, 0x000e, 0x0005, 0x0006,
-+      0x2001, 0xb572, 0x2004, 0xa084, 0x0030, 0xa086, 0x0000, 0x000e,
-+      0x0005, 0x0006, 0x2001, 0xb572, 0x2004, 0xa084, 0x0030, 0xa086,
-+      0x0030, 0x000e, 0x0005, 0x0006, 0x2001, 0xb572, 0x2004, 0xa084,
-+      0x0030, 0xa086, 0x0010, 0x000e, 0x0005, 0x0006, 0x2001, 0xb572,
-+      0x2004, 0xa084, 0x0030, 0xa086, 0x0020, 0x000e, 0x0005, 0x2001,
-+      0xb50c, 0x2004, 0xd0a4, 0x0170, 0x080c, 0x2892, 0x0036, 0x0016,
-+      0x2009, 0x0000, 0x2019, 0x0028, 0x080c, 0x2c6f, 0x001e, 0x003e,
-+      0xa006, 0x0009, 0x0005, 0x00e6, 0x2071, 0xb50c, 0x2e04, 0x0118,
-+      0xa085, 0x0010, 0x0010, 0xa084, 0xffef, 0x2072, 0x00ee, 0x0005,
-+      0x6050, 0x0006, 0x60f0, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006,
-+      0x6004, 0x0006, 0x6028, 0x0006, 0x602f, 0x0100, 0x602f, 0x0000,
-+      0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e, 0x6006,
-+      0x000e, 0x600e, 0x000e, 0x60ee, 0x000e, 0x60f2, 0x60e3, 0x0000,
-+      0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x2872, 0x6800, 0xa084,
-+      0x00a0, 0xc0bd, 0x6802, 0x6803, 0x00a0, 0x000e, 0x6052, 0x6050,
-+      0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,
-+      0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0xb500, 0x6020, 0xa084,
-+      0x0080, 0x0138, 0x2001, 0xb50c, 0x200c, 0xc1bd, 0x2102, 0x0804,
-+      0x5bc9, 0x2001, 0xb50c, 0x200c, 0xc1bc, 0x2102, 0x6028, 0xa084,
-+      0xe1ff, 0x602a, 0x6027, 0x0200, 0x6803, 0x0090, 0x20a9, 0x0384,
-+      0x6024, 0xd0cc, 0x1508, 0x1d04, 0x5b78, 0x2091, 0x6000, 0x1f04,
-+      0x5b78, 0x2011, 0x0003, 0x080c, 0x8075, 0x2011, 0x0002, 0x080c,
-+      0x807f, 0x080c, 0x7f59, 0x2019, 0x0000, 0x080c, 0x7fe4, 0x6803,
-+      0x00a0, 0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003,
-+      0x0001, 0xa085, 0x0001, 0x0468, 0x86ff, 0x1120, 0x080c, 0x1e47,
-+      0x080c, 0x24b0, 0x60e3, 0x0000, 0x2001, 0xb78f, 0x2004, 0x080c,
-+      0x2872, 0x60e2, 0x6803, 0x0080, 0x20a9, 0x0384, 0x6027, 0x1e00,
-+      0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c, 0x0138, 0x1d04, 0x5bae,
-+      0x2091, 0x6000, 0x1f04, 0x5bae, 0x0820, 0x6028, 0xa085, 0x1e00,
-+      0x602a, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886,
-+      0xa006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,
-+      0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,
-+      0x2061, 0x0100, 0x2071, 0xb500, 0x2069, 0x0140, 0x6020, 0xa084,
-+      0x00c0, 0x0120, 0x6884, 0xa005, 0x1904, 0x5c25, 0x6803, 0x0088,
-+      0x60e3, 0x0000, 0x6887, 0x0000, 0x2001, 0x0000, 0x080c, 0x2872,
-+      0x2069, 0x0200, 0x6804, 0xa005, 0x1118, 0x6808, 0xa005, 0x01c0,
-+      0x6028, 0xa084, 0xfbff, 0x602a, 0x6027, 0x0400, 0x2069, 0xb7c5,
-+      0x7000, 0x206a, 0x708f, 0x0026, 0x7003, 0x0001, 0x20a9, 0x0002,
-+      0x1d04, 0x5c08, 0x2091, 0x6000, 0x1f04, 0x5c08, 0x0804, 0x5c56,
-+      0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00,
-+      0xe000, 0x6024, 0xa10c, 0x0520, 0xa084, 0x1a00, 0x1508, 0x1d04,
-+      0x5c14, 0x2091, 0x6000, 0x1f04, 0x5c14, 0x2011, 0x0003, 0x080c,
-+      0x8075, 0x2011, 0x0002, 0x080c, 0x807f, 0x080c, 0x7f59, 0x2019,
-+      0x0000, 0x080c, 0x7fe4, 0x6803, 0x00a0, 0x2001, 0xb79f, 0x2003,
-+      0x0001, 0x2001, 0xb500, 0x2003, 0x0001, 0xa085, 0x0001, 0x00b0,
-+      0x080c, 0x24b0, 0x6803, 0x0080, 0x2069, 0x0140, 0x60e3, 0x0000,
-+      0x70a4, 0xa005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001,
-+      0xb78f, 0x2004, 0x080c, 0x2872, 0x60e2, 0xa006, 0x00ee, 0x00de,
-+      0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016,
-+      0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071,
-+      0xb500, 0x6020, 0xa084, 0x00c0, 0x01e0, 0x2011, 0x0003, 0x080c,
-+      0x8075, 0x2011, 0x0002, 0x080c, 0x807f, 0x080c, 0x7f59, 0x2019,
-+      0x0000, 0x080c, 0x7fe4, 0x2069, 0x0140, 0x6803, 0x00a0, 0x2001,
-+      0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003, 0x0001, 0x0804,
-+      0x5cfb, 0x2001, 0xb50c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102,
-+      0x080c, 0x598a, 0x2069, 0x0140, 0x080c, 0x24b0, 0x6803, 0x0080,
-+      0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0xa005, 0x1118, 0x6808,
-+      0xa005, 0x01c0, 0x6028, 0xa084, 0xfdff, 0x602a, 0x6027, 0x0200,
-+      0x2069, 0xb7c5, 0x7000, 0x206a, 0x708f, 0x0027, 0x7003, 0x0001,
-+      0x20a9, 0x0002, 0x1d04, 0x5cb2, 0x2091, 0x6000, 0x1f04, 0x5cb2,
-+      0x0804, 0x5cfb, 0x6027, 0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024,
-+      0xa10c, 0x01c8, 0xa084, 0x1c00, 0x11b0, 0x1d04, 0x5cba, 0x0006,
-+      0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x68f9, 0x00ee, 0x00de,
-+      0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0xb7f3, 0x7018, 0x00ee,
-+      0xa005, 0x1d00, 0x0500, 0x0026, 0x2011, 0x59a2, 0x080c, 0x699c,
-+      0x2011, 0x5995, 0x080c, 0x6a5c, 0x002e, 0x2069, 0x0140, 0x60e3,
-       0x0000, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886,
--      0x2001, 0xb78f, 0x2004, 0x080c, 0x2872, 0x60e2, 0xa006, 0x00ee,
--      0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156,
--      0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
--      0x2071, 0xb500, 0x6020, 0xa084, 0x00c0, 0x01e0, 0x2011, 0x0003,
--      0x080c, 0x8076, 0x2011, 0x0002, 0x080c, 0x8080, 0x080c, 0x7f5a,
--      0x2019, 0x0000, 0x080c, 0x7fe5, 0x2069, 0x0140, 0x6803, 0x00a0,
--      0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003, 0x0001,
--      0x0804, 0x5cfc, 0x2001, 0xb50c, 0x200c, 0xd1b4, 0x1160, 0xc1b5,
--      0x2102, 0x080c, 0x598b, 0x2069, 0x0140, 0x080c, 0x24b0, 0x6803,
--      0x0080, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0xa005, 0x1118,
--      0x6808, 0xa005, 0x01c0, 0x6028, 0xa084, 0xfdff, 0x602a, 0x6027,
--      0x0200, 0x2069, 0xb7c5, 0x7000, 0x206a, 0x708f, 0x0027, 0x7003,
--      0x0001, 0x20a9, 0x0002, 0x1d04, 0x5cb3, 0x2091, 0x6000, 0x1f04,
--      0x5cb3, 0x0804, 0x5cfc, 0x6027, 0x1e00, 0x2009, 0x1e00, 0xe000,
--      0x6024, 0xa10c, 0x01c8, 0xa084, 0x1c00, 0x11b0, 0x1d04, 0x5cbb,
--      0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x68fa, 0x00ee,
--      0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0xb7f3, 0x7018,
--      0x00ee, 0xa005, 0x1d00, 0x0500, 0x0026, 0x2011, 0x59a3, 0x080c,
--      0x699d, 0x2011, 0x5996, 0x080c, 0x6a5d, 0x002e, 0x2069, 0x0140,
--      0x60e3, 0x0000, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001, 0x0008,
--      0x6886, 0x2001, 0xb78f, 0x2004, 0x080c, 0x2872, 0x60e2, 0x2001,
--      0xb50c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e,
--      0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
--      0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xb500, 0x7130,
--      0xd184, 0x1180, 0x2011, 0xb553, 0x2214, 0xd2ec, 0x0138, 0xc18d,
--      0x7132, 0x2011, 0xb553, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c,
--      0x0904, 0x5d69, 0x7130, 0xc185, 0x7132, 0x2011, 0xb553, 0x220c,
--      0xd1a4, 0x0530, 0x0016, 0x2019, 0x000e, 0x080c, 0xb059, 0x0156,
--      0x20a9, 0x007f, 0x2009, 0x0000, 0xa186, 0x007e, 0x01a0, 0xa186,
--      0x0080, 0x0188, 0x080c, 0x4faa, 0x1170, 0x8127, 0xa006, 0x0016,
--      0x2009, 0x000e, 0x080c, 0xb0dc, 0x2009, 0x0001, 0x2011, 0x0100,
--      0x080c, 0x6b1b, 0x001e, 0x8108, 0x1f04, 0x5d34, 0x015e, 0x001e,
--      0xd1ac, 0x1148, 0x0016, 0x2009, 0x0000, 0x2019, 0x0004, 0x080c,
--      0x2c6f, 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000,
--      0x080c, 0x4faa, 0x1110, 0x080c, 0x4c0c, 0x8108, 0x1f04, 0x5d60,
--      0x015e, 0x080c, 0x1e47, 0x2011, 0x0003, 0x080c, 0x8076, 0x2011,
--      0x0002, 0x080c, 0x8080, 0x080c, 0x7f5a, 0x0036, 0x2019, 0x0000,
--      0x080c, 0x7fe5, 0x003e, 0x60e3, 0x0000, 0x2001, 0xb500, 0x2003,
--      0x0001, 0x080c, 0x5a08, 0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e,
--      0x001e, 0x015e, 0x0005, 0x2071, 0xb5e2, 0x7003, 0x0000, 0x7007,
--      0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f, 0x0000, 0x7053,
--      0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083, 0x0000, 0x708b,
--      0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x0005, 0x00e6, 0x2071,
--      0xb5e2, 0x6848, 0xa005, 0x1130, 0x7028, 0xc085, 0x702a, 0xa085,
--      0x0001, 0x0428, 0x6a50, 0x7236, 0x6b54, 0x733a, 0x6858, 0x703e,
--      0x707a, 0x685c, 0x7042, 0x707e, 0x6848, 0x702e, 0x6840, 0x7032,
--      0x2009, 0x000c, 0x200a, 0x8007, 0x8006, 0x8006, 0xa08c, 0x003f,
--      0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272, 0x7376, 0x7028,
--      0xc084, 0x702a, 0x7007, 0x0001, 0x700f, 0x0000, 0xa006, 0x00ee,
--      0x0005, 0x2b78, 0x2071, 0xb5e2, 0x7004, 0x0043, 0x700c, 0x0002,
--      0x5de5, 0x5ddc, 0x5ddc, 0x5ddc, 0x5ddc, 0x0005, 0x5e3b, 0x5e3c,
--      0x5e6e, 0x5e6f, 0x5e39, 0x5ebd, 0x5ec2, 0x5ef3, 0x5ef4, 0x5f0f,
--      0x5f10, 0x5f11, 0x5f12, 0x5f13, 0x5f14, 0x5fca, 0x5ff1, 0x700c,
--      0x0002, 0x5dfe, 0x5e39, 0x5e39, 0x5e3a, 0x5e3a, 0x7830, 0x7930,
--      0xa106, 0x0120, 0x7830, 0x7930, 0xa106, 0x1510, 0x7030, 0xa10a,
--      0x01f8, 0x1210, 0x712c, 0xa10a, 0xa18a, 0x0002, 0x12d0, 0x080c,
--      0x15df, 0x01b0, 0x2d00, 0x705a, 0x7063, 0x0040, 0x2001, 0x0003,
--      0x7057, 0x0000, 0x0126, 0x0006, 0x2091, 0x8000, 0x2009, 0xb812,
--      0x2104, 0xc085, 0x200a, 0x000e, 0x700e, 0x012e, 0x080c, 0x165f,
--      0x0005, 0x080c, 0x15df, 0x0de0, 0x2d00, 0x705a, 0x080c, 0x15df,
--      0x1108, 0x0c10, 0x2d00, 0x7086, 0x7063, 0x0080, 0x2001, 0x0004,
--      0x08f8, 0x0005, 0x0005, 0x0005, 0x700c, 0x0002, 0x5e43, 0x5e46,
--      0x5e54, 0x5e6d, 0x5e6d, 0x080c, 0x5df7, 0x0005, 0x0126, 0x8001,
--      0x700e, 0x7058, 0x0006, 0x080c, 0x6344, 0x0120, 0x2091, 0x8000,
--      0x080c, 0x5df7, 0x00de, 0x0048, 0x0126, 0x8001, 0x700e, 0x080c,
--      0x6344, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807,
--      0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x003a, 0x1218, 0x00db,
--      0x012e, 0x0005, 0x012e, 0x080c, 0x5f15, 0x0005, 0x0005, 0x0005,
--      0x00e6, 0x2071, 0xb5e2, 0x700c, 0x0002, 0x5e7a, 0x5e7a, 0x5e7a,
--      0x5e7c, 0x5e7f, 0x00ee, 0x0005, 0x700f, 0x0001, 0x0010, 0x700f,
--      0x0002, 0x00ee, 0x0005, 0x5f15, 0x5f15, 0x5f31, 0x5f15, 0x60ae,
--      0x5f15, 0x5f15, 0x5f15, 0x5f15, 0x5f15, 0x5f31, 0x60f0, 0x6133,
--      0x617c, 0x6190, 0x5f15, 0x5f15, 0x5f4d, 0x5f31, 0x5f15, 0x5f15,
--      0x5fa7, 0x623c, 0x6257, 0x5f15, 0x5f4d, 0x5f15, 0x5f15, 0x5f15,
--      0x5f15, 0x5f9d, 0x6257, 0x5f15, 0x5f15, 0x5f15, 0x5f15, 0x5f15,
--      0x5f15, 0x5f15, 0x5f15, 0x5f15, 0x5f61, 0x5f15, 0x5f15, 0x5f15,
--      0x5f15, 0x5f15, 0x5f15, 0x5f15, 0x5f15, 0x5f15, 0x6362, 0x5f15,
--      0x5f15, 0x5f15, 0x5f15, 0x5f15, 0x5f76, 0x7020, 0x2068, 0x080c,
--      0x160f, 0x0005, 0x700c, 0x0002, 0x5ec9, 0x5ecc, 0x5eda, 0x5ef2,
--      0x5ef2, 0x080c, 0x5df7, 0x0005, 0x0126, 0x8001, 0x700e, 0x7058,
--      0x0006, 0x080c, 0x6344, 0x0120, 0x2091, 0x8000, 0x080c, 0x5df7,
--      0x00de, 0x0048, 0x0126, 0x8001, 0x700e, 0x080c, 0x6344, 0x7058,
--      0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834,
--      0xa084, 0x00ff, 0xa08a, 0x001a, 0x1218, 0x003b, 0x012e, 0x0005,
--      0x012e, 0x0419, 0x0005, 0x0005, 0x0005, 0x5f15, 0x5f31, 0x609a,
--      0x5f15, 0x5f31, 0x5f15, 0x5f31, 0x5f31, 0x5f15, 0x5f31, 0x609a,
--      0x5f31, 0x5f31, 0x5f31, 0x5f31, 0x5f31, 0x5f15, 0x5f31, 0x609a,
--      0x5f15, 0x5f15, 0x5f31, 0x5f15, 0x5f15, 0x5f15, 0x5f31, 0x0005,
--      0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x7007, 0x0001, 0x6838,
--      0xa084, 0x00ff, 0xc0d5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x5409, 0x012e, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff,
--      0xc0e5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x5409, 0x012e,
--      0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0ed, 0x683a,
--      0x0126, 0x2091, 0x8000, 0x080c, 0x5409, 0x012e, 0x0005, 0x7007,
--      0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a, 0x0126, 0x2091,
--      0x8000, 0x080c, 0x5409, 0x012e, 0x0005, 0x6834, 0x8007, 0xa084,
--      0x00ff, 0x0988, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x605a,
--      0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x605a,
--      0x0005, 0x6834, 0x8007, 0xa084, 0x00ff, 0x0904, 0x5f23, 0x8001,
--      0x1120, 0x7007, 0x0001, 0x0804, 0x6077, 0x7007, 0x0006, 0x7012,
--      0x2d00, 0x7016, 0x701a, 0x704b, 0x6077, 0x0005, 0x6834, 0x8007,
--      0xa084, 0x00ff, 0xa086, 0x0001, 0x1904, 0x5f23, 0x7007, 0x0001,
--      0x2009, 0xb531, 0x210c, 0x81ff, 0x11a8, 0x6838, 0xa084, 0x00ff,
--      0x683a, 0x6853, 0x0000, 0x080c, 0x4d83, 0x1108, 0x0005, 0x0126,
--      0x2091, 0x8000, 0x6837, 0x0139, 0x684a, 0x6952, 0x080c, 0x5409,
--      0x012e, 0x0ca0, 0x2001, 0x0028, 0x0c90, 0x684c, 0xa084, 0x00c0,
--      0xa086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x626f, 0x2d00,
--      0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098, 0x20a1,
--      0xb60d, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x1a04, 0x5f3f,
--      0x6a84, 0xa28a, 0x0002, 0x1a04, 0x5f3f, 0x82ff, 0x1138, 0x6888,
--      0x698c, 0xa105, 0x0118, 0x2001, 0x602d, 0x0018, 0xa280, 0x6023,
--      0x2005, 0x70c6, 0x7010, 0xa015, 0x0904, 0x600f, 0x080c, 0x15df,
--      0x1118, 0x7007, 0x000f, 0x0005, 0x2d00, 0x7022, 0x70c4, 0x2060,
--      0x2c05, 0x6836, 0xe004, 0xad00, 0x7096, 0xe008, 0xa20a, 0x1210,
--      0xa00e, 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0xa296, 0x0004,
--      0x0108, 0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x080c,
--      0x1643, 0x7090, 0xa08e, 0x0100, 0x0170, 0xa086, 0x0200, 0x0118,
--      0x7007, 0x0010, 0x0005, 0x7020, 0x2068, 0x080c, 0x160f, 0x7014,
--      0x2068, 0x0804, 0x5f3f, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807,
--      0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, 0x0804, 0x5fca, 0x7014,
--      0x2068, 0x7007, 0x0001, 0x6884, 0xa005, 0x1128, 0x6888, 0x698c,
--      0xa105, 0x0108, 0x00b1, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e,
--      0x0904, 0x626f, 0x04b8, 0x6025, 0x6029, 0x0002, 0x0011, 0x0007,
--      0x0004, 0x000a, 0x000f, 0x0005, 0x0006, 0x000a, 0x0011, 0x0005,
--      0x0004, 0x00f6, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x6f88, 0x6e8c,
--      0x6804, 0x2060, 0xacf0, 0x0021, 0xacf8, 0x0027, 0x2009, 0x0005,
--      0x700c, 0x7816, 0x7008, 0x7812, 0x7004, 0x7806, 0x7000, 0x7802,
--      0x7e0e, 0x7f0a, 0x8109, 0x0128, 0xaef2, 0x0004, 0xaffa, 0x0006,
--      0x0c78, 0x6004, 0xa065, 0x1d30, 0x006e, 0x007e, 0x00ce, 0x00ee,
--      0x00fe, 0x0005, 0x2009, 0xb531, 0x210c, 0x81ff, 0x1198, 0x6838,
--      0xa084, 0x00ff, 0x683a, 0x080c, 0x4c65, 0x1108, 0x0005, 0x080c,
--      0x54dc, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ec6, 0x080c, 0x5409,
--      0x012e, 0x0ca0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c80, 0x2009,
--      0xb531, 0x210c, 0x81ff, 0x11b0, 0x6858, 0xa005, 0x01c0, 0x6838,
--      0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x080c, 0x4d27, 0x1108,
--      0x0005, 0x0126, 0x2091, 0x8000, 0x684a, 0x6952, 0x080c, 0x5409,
--      0x012e, 0x0cb0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c90, 0x2001,
--      0x0000, 0x0c78, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, 0x711a,
--      0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0006, 0x0030, 0x7014,
--      0x2068, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x7007, 0x0001,
--      0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848, 0xa084, 0x00ff, 0x20a9,
--      0x0001, 0xa096, 0x0001, 0x01b0, 0x2009, 0x0000, 0x20a9, 0x00ff,
--      0xa096, 0x0002, 0x0178, 0xa005, 0x11f0, 0x6944, 0x810f, 0xa18c,
--      0x00ff, 0x080c, 0x4faa, 0x11b8, 0x0066, 0x6e50, 0x080c, 0x50a9,
--      0x006e, 0x0088, 0x0046, 0x2011, 0xb50c, 0x2224, 0xc484, 0x2412,
--      0x004e, 0x00c6, 0x080c, 0x4faa, 0x1110, 0x080c, 0x520a, 0x8108,
--      0x1f04, 0x60da, 0x00ce, 0x684c, 0xd084, 0x1118, 0x080c, 0x160f,
--      0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x5409, 0x012e, 0x0005,
--      0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xb553, 0x2004,
--      0xd0a4, 0x0580, 0x2061, 0xb874, 0x6100, 0xd184, 0x0178, 0x6858,
--      0xa084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0xa005,
--      0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001,
--      0x6860, 0xa005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0x6858,
--      0xa084, 0x00ff, 0x0178, 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff,
--      0x0148, 0x600a, 0x6858, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e,
--      0x0804, 0x6333, 0x012e, 0x0804, 0x632d, 0x012e, 0x0804, 0x6327,
--      0x012e, 0x0804, 0x632a, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001,
--      0x2001, 0xb553, 0x2004, 0xd0a4, 0x05e0, 0x2061, 0xb874, 0x6000,
--      0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0x6c48, 0xa484,
--      0x0003, 0x0170, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x1120, 0x2100,
--      0xa210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0xa212, 0x02f0,
--      0xa484, 0x000c, 0x0188, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082,
--      0x0004, 0x1120, 0x2100, 0xa318, 0x0288, 0x0030, 0xa082, 0x0004,
--      0x1168, 0x2100, 0xa31a, 0x0250, 0x6860, 0xa005, 0x0110, 0x8000,
--      0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x6333, 0x012e, 0x0804,
--      0x6330, 0x012e, 0x0804, 0x632d, 0x0126, 0x2091, 0x8000, 0x7007,
--      0x0001, 0x2061, 0xb874, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318,
--      0x0220, 0x630a, 0x012e, 0x0804, 0x6341, 0x012e, 0x0804, 0x6330,
--      0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac,
--      0x0148, 0x00c6, 0x2061, 0xb874, 0x6000, 0xa084, 0xfcff, 0x6002,
--      0x00ce, 0x0448, 0x6858, 0xa005, 0x05d0, 0x685c, 0xa065, 0x0598,
--      0x2001, 0xb531, 0x2004, 0xa005, 0x0118, 0x080c, 0x9e17, 0x0068,
--      0x6013, 0x0400, 0x6057, 0x0000, 0x694c, 0xd1a4, 0x0110, 0x6950,
--      0x6156, 0x2009, 0x0041, 0x080c, 0x8646, 0x6958, 0xa18c, 0xff00,
--      0xa186, 0x2000, 0x1140, 0x0026, 0x2009, 0x0000, 0x2011, 0xfdff,
--      0x080c, 0x6b1b, 0x002e, 0x684c, 0xd0c4, 0x0148, 0x2061, 0xb874,
--      0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce,
--      0x012e, 0x0804, 0x6333, 0x00ce, 0x012e, 0x0804, 0x632d, 0x6954,
--      0xa186, 0x002e, 0x0d40, 0xa186, 0x002d, 0x0d28, 0xa186, 0x0045,
--      0x0528, 0xa186, 0x002a, 0x1130, 0x2001, 0xb50c, 0x200c, 0xc194,
--      0x2102, 0x08c8, 0xa186, 0x0020, 0x0170, 0xa186, 0x0029, 0x1d18,
--      0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x4faa, 0x1960, 0x6000,
--      0xc0e4, 0x6002, 0x0840, 0x685c, 0xa065, 0x09a8, 0x6007, 0x0024,
--      0x2001, 0xb7b6, 0x2004, 0x6016, 0x0804, 0x61cb, 0x685c, 0xa065,
--      0x0950, 0x00e6, 0x6860, 0xa075, 0x2001, 0xb531, 0x2004, 0xa005,
--      0x0150, 0x080c, 0x9e17, 0x8eff, 0x0118, 0x2e60, 0x080c, 0x9e17,
--      0x00ee, 0x0804, 0x61cb, 0x6020, 0xc0dc, 0xc0d5, 0x6022, 0x2e60,
--      0x6007, 0x003a, 0x6870, 0xa005, 0x0130, 0x6007, 0x003b, 0x6874,
--      0x602a, 0x6878, 0x6012, 0x6003, 0x0001, 0x080c, 0x6c8e, 0x080c,
--      0x7174, 0x00ee, 0x0804, 0x61cb, 0x2061, 0xb874, 0x6000, 0xd084,
--      0x0190, 0xd08c, 0x1904, 0x6341, 0x0126, 0x2091, 0x8000, 0x6204,
--      0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x6341, 0x012e, 0x6853,
--      0x0016, 0x0804, 0x633a, 0x6853, 0x0007, 0x0804, 0x633a, 0x6834,
--      0x8007, 0xa084, 0x00ff, 0x1118, 0x080c, 0x5f23, 0x0078, 0x2030,
--      0x8001, 0x1120, 0x7007, 0x0001, 0x0051, 0x0040, 0x7007, 0x0006,
--      0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x626f, 0x0005, 0x00e6,
--      0x0126, 0x2091, 0x8000, 0xa03e, 0x2009, 0xb531, 0x210c, 0x81ff,
--      0x1904, 0x62ed, 0x2009, 0xb50c, 0x210c, 0xd194, 0x1904, 0x6317,
--      0x6848, 0x2070, 0xae82, 0xbd00, 0x0a04, 0x62e1, 0x2001, 0xb517,
--      0x2004, 0xae02, 0x1a04, 0x62e1, 0x711c, 0xa186, 0x0006, 0x1904,
--      0x62d0, 0x7018, 0xa005, 0x0904, 0x62ed, 0x2004, 0xd0e4, 0x1904,
--      0x6312, 0x2061, 0xb874, 0x6100, 0xa184, 0x0301, 0xa086, 0x0001,
--      0x1550, 0x7020, 0xd0dc, 0x1904, 0x631a, 0x6853, 0x0000, 0x6803,
--      0x0000, 0x2d08, 0x7010, 0xa005, 0x1158, 0x7112, 0x684c, 0xd0f4,
--      0x1904, 0x631d, 0x2e60, 0x080c, 0x6a77, 0x012e, 0x00ee, 0x0005,
--      0x2068, 0x6800, 0xa005, 0x1de0, 0x6902, 0x2168, 0x684c, 0xd0f4,
--      0x1904, 0x631d, 0x012e, 0x00ee, 0x0005, 0x012e, 0x00ee, 0x6853,
--      0x0006, 0x0804, 0x633a, 0xd184, 0x0dc0, 0xd1c4, 0x11a8, 0x00b8,
--      0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x4faa, 0x15d8, 0x6000,
--      0xd0e4, 0x15c0, 0x711c, 0xa186, 0x0007, 0x1118, 0x6853, 0x0002,
--      0x0498, 0x6853, 0x0008, 0x0480, 0x6853, 0x000e, 0x0468, 0x6853,
--      0x0017, 0x0450, 0x6853, 0x0035, 0x0438, 0x2001, 0xb572, 0x2004,
--      0xd0fc, 0x01e8, 0x6848, 0x2070, 0xae82, 0xbd00, 0x02c0, 0x605c,
--      0xae02, 0x12a8, 0x711c, 0xa186, 0x0006, 0x1188, 0x7018, 0xa005,
--      0x0170, 0x2004, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0xa086,
--      0x0007, 0x1904, 0x627a, 0x7003, 0x0002, 0x0804, 0x627a, 0x6853,
--      0x0028, 0x0010, 0x6853, 0x0029, 0x012e, 0x00ee, 0x0418, 0x6853,
--      0x002a, 0x0cd0, 0x6853, 0x0045, 0x0cb8, 0x2e60, 0x2019, 0x0002,
--      0x6017, 0x0014, 0x080c, 0xacd4, 0x012e, 0x00ee, 0x0005, 0x2009,
--      0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028,
--      0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00,
--      0xa105, 0x6856, 0x0126, 0x2091, 0x8000, 0x080c, 0x5409, 0x012e,
--      0x0005, 0x080c, 0x160f, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102,
--      0x0230, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0058, 0x7070,
--      0xa080, 0x0040, 0x7072, 0x1230, 0x7074, 0xa081, 0x0000, 0x7076,
--      0xa085, 0x0001, 0x7932, 0x7132, 0x0005, 0x00d6, 0x080c, 0x6a6e,
--      0x00de, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x7007,
--      0x0001, 0x6a44, 0xa282, 0x0004, 0x1a04, 0x63ad, 0xd284, 0x0170,
--      0x6a4c, 0xa290, 0xb635, 0x2204, 0xa065, 0x6004, 0x05e0, 0x8007,
--      0xa084, 0x00ff, 0xa084, 0x0006, 0x1108, 0x04a8, 0x2c10, 0x080c,
--      0x85c1, 0x1118, 0x080c, 0x9ed0, 0x05a0, 0x621a, 0x6844, 0x0002,
--      0x638c, 0x6391, 0x6394, 0x639a, 0x2019, 0x0002, 0x080c, 0xb059,
--      0x0060, 0x080c, 0xaff0, 0x0048, 0x2019, 0x0002, 0x6950, 0x080c,
--      0xb00b, 0x0018, 0x6950, 0x080c, 0xaff0, 0x080c, 0x8617, 0x6857,
--      0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x5409, 0x012e, 0x001e,
--      0x002e, 0x003e, 0x00ce, 0x00de, 0x0005, 0x6857, 0x0006, 0x0c88,
--      0x6857, 0x0002, 0x0c70, 0x6857, 0x0005, 0x0c58, 0x6857, 0x0004,
--      0x0c40, 0x6857, 0x0007, 0x0c28, 0x00d6, 0x2011, 0x0004, 0x2204,
--      0xa085, 0x8002, 0x2012, 0x00de, 0x0005, 0x20e1, 0x0002, 0x3d08,
--      0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0x0118, 0xa086, 0x1000,
--      0x1570, 0x20e1, 0x0000, 0x3d00, 0xa094, 0xff00, 0x8217, 0xa084,
--      0xf000, 0xa086, 0x3000, 0x1160, 0xa184, 0xff00, 0x8007, 0xa086,
--      0x0008, 0x11e8, 0x080c, 0x2dbf, 0x11d0, 0x080c, 0x6604, 0x0098,
--      0x20e1, 0x0004, 0x3d60, 0xd1bc, 0x1108, 0x3e60, 0xac84, 0x0007,
--      0x1170, 0xac82, 0xbd00, 0x0258, 0x685c, 0xac02, 0x1240, 0x2009,
--      0x0047, 0x080c, 0x8646, 0x7a1c, 0xd284, 0x1938, 0x0005, 0xa016,
--      0x080c, 0x185e, 0x0cc0, 0x0cd8, 0x781c, 0xd08c, 0x0500, 0x0156,
--      0x0136, 0x0146, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0076,
--      0x1538, 0xa484, 0x7000, 0xa086, 0x1000, 0x11a8, 0x080c, 0x647f,
--      0x01f8, 0x20e1, 0x3000, 0x7828, 0x7828, 0x080c, 0x649b, 0x014e,
--      0x013e, 0x015e, 0x2009, 0xb7e8, 0x2104, 0xa005, 0x1108, 0x0005,
--      0x080c, 0x7174, 0x0ce0, 0xa484, 0x7000, 0x1548, 0x080c, 0x647f,
--      0x01d8, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100, 0x0d10, 0x00a0,
--      0xd5a4, 0x0178, 0x0056, 0x0046, 0x080c, 0x1e6e, 0x080c, 0x24b0,
--      0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x004e, 0x005e,
--      0x0048, 0x04a9, 0x6887, 0x0000, 0x080c, 0xb3d3, 0x20e1, 0x3000,
--      0x7828, 0x7828, 0x00b9, 0x014e, 0x013e, 0x015e, 0x0880, 0x0439,
--      0x1130, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100, 0x1d68, 0x080c,
--      0xb3d3, 0x20e1, 0x3000, 0x7828, 0x7828, 0x0056, 0x080c, 0x6875,
--      0x005e, 0x0c40, 0x2001, 0xb50e, 0x2004, 0xd08c, 0x0178, 0x2001,
--      0xb500, 0x2004, 0xa086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011,
--      0x8048, 0x2518, 0x080c, 0x3ecd, 0x003e, 0x002e, 0x0005, 0xa484,
--      0x01ff, 0x6886, 0xa005, 0x0160, 0xa080, 0x001f, 0xa084, 0x03f8,
--      0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x0005,
--      0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5,
--      0xa085, 0x0001, 0x0ca0, 0x7000, 0xa084, 0xff00, 0xa08c, 0xf000,
--      0x8007, 0xa196, 0x0000, 0x1118, 0x0804, 0x6709, 0x0005, 0xa196,
--      0x2000, 0x1148, 0x6900, 0xa18e, 0x0001, 0x1118, 0x080c, 0x4490,
--      0x0ca8, 0x0039, 0x0c98, 0xa196, 0x8000, 0x1d80, 0x080c, 0x67b5,
--      0x0c68, 0x00c6, 0x6a84, 0x82ff, 0x0904, 0x65fe, 0x7110, 0xa18c,
--      0xff00, 0x810f, 0xa196, 0x0001, 0x0120, 0xa196, 0x0023, 0x1904,
--      0x65fe, 0xa08e, 0x0023, 0x1570, 0x080c, 0x6850, 0x0904, 0x65fe,
--      0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x1150, 0x7034, 0xa005,
--      0x1904, 0x65fe, 0x2009, 0x0015, 0x080c, 0x8646, 0x0804, 0x65fe,
--      0xa08e, 0x0214, 0x0118, 0xa08e, 0x0210, 0x1130, 0x2009, 0x0015,
--      0x080c, 0x8646, 0x0804, 0x65fe, 0xa08e, 0x0100, 0x1904, 0x65fe,
--      0x7034, 0xa005, 0x1904, 0x65fe, 0x2009, 0x0016, 0x080c, 0x8646,
--      0x0804, 0x65fe, 0xa08e, 0x0022, 0x1904, 0x65fe, 0x7030, 0xa08e,
--      0x0300, 0x1580, 0x68d4, 0xd0a4, 0x0528, 0xc0b5, 0x68d6, 0x7100,
--      0xa18c, 0x00ff, 0x6972, 0x7004, 0x6876, 0x00f6, 0x2079, 0x0100,
--      0x79e6, 0x78ea, 0x0006, 0xa084, 0x00ff, 0x0016, 0x2008, 0x080c,
--      0x2847, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x281d,
--      0x6952, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0xb500,
--      0x70a6, 0x00ee, 0x7034, 0xa005, 0x1904, 0x65fe, 0x2009, 0x0017,
--      0x0804, 0x65c4, 0xa08e, 0x0400, 0x1158, 0x7034, 0xa005, 0x1904,
--      0x65fe, 0x68d4, 0xc0a5, 0x68d6, 0x2009, 0x0030, 0x0804, 0x65c4,
--      0xa08e, 0x0500, 0x1140, 0x7034, 0xa005, 0x1904, 0x65fe, 0x2009,
--      0x0018, 0x0804, 0x65c4, 0xa08e, 0x2010, 0x1120, 0x2009, 0x0019,
--      0x0804, 0x65c4, 0xa08e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804,
--      0x65c4, 0xa08e, 0x5200, 0x1140, 0x7034, 0xa005, 0x1904, 0x65fe,
--      0x2009, 0x001b, 0x0804, 0x65c4, 0xa08e, 0x5000, 0x1140, 0x7034,
--      0xa005, 0x1904, 0x65fe, 0x2009, 0x001c, 0x0804, 0x65c4, 0xa08e,
--      0x1300, 0x1120, 0x2009, 0x0034, 0x0804, 0x65c4, 0xa08e, 0x1200,
--      0x1140, 0x7034, 0xa005, 0x1904, 0x65fe, 0x2009, 0x0024, 0x0804,
--      0x65c4, 0xa08c, 0xff00, 0xa18e, 0x2400, 0x1118, 0x2009, 0x002d,
--      0x04d8, 0xa08c, 0xff00, 0xa18e, 0x5300, 0x1118, 0x2009, 0x002a,
--      0x0498, 0xa08e, 0x0f00, 0x1118, 0x2009, 0x0020, 0x0468, 0xa08e,
--      0x5300, 0x1108, 0x00d8, 0xa08e, 0x6104, 0x11c0, 0x2011, 0xbb8d,
--      0x8208, 0x2204, 0xa082, 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011,
--      0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x3ecd, 0x004e,
--      0x8108, 0x1f04, 0x65a7, 0x2009, 0x0023, 0x0070, 0xa08e, 0x6000,
--      0x1118, 0x2009, 0x003f, 0x0040, 0xa08e, 0x7800, 0x1118, 0x2009,
--      0x0045, 0x0010, 0x2009, 0x001d, 0x0016, 0x2011, 0xbb83, 0x2204,
--      0x8211, 0x220c, 0x080c, 0x281d, 0x1598, 0x080c, 0x4f4e, 0x1580,
--      0x6612, 0x6516, 0x86ff, 0x01e8, 0x001e, 0x0016, 0xa186, 0x0017,
--      0x1158, 0x6870, 0xa606, 0x11a8, 0x6874, 0xa506, 0xa084, 0xff00,
--      0x1180, 0x6000, 0xc0f5, 0x6002, 0xa186, 0x0046, 0x1150, 0x6870,
--      0xa606, 0x1138, 0x6874, 0xa506, 0xa084, 0xff00, 0x1110, 0x001e,
--      0x0068, 0x00c6, 0x080c, 0x85c1, 0x0168, 0x001e, 0x611a, 0x601f,
--      0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x8646, 0x00ce, 0x0005,
--      0x001e, 0x0ce0, 0x00ce, 0x0ce0, 0x00c6, 0x0046, 0x080c, 0x6658,
--      0x1904, 0x6655, 0xa28e, 0x0033, 0x11e8, 0x080c, 0x6850, 0x0904,
--      0x6655, 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x1140, 0x7034,
--      0xa005, 0x15d8, 0x2009, 0x0015, 0x080c, 0x8646, 0x04b0, 0xa08e,
--      0x0100, 0x1598, 0x7034, 0xa005, 0x1580, 0x2009, 0x0016, 0x080c,
--      0x8646, 0x0458, 0xa28e, 0x0032, 0x1540, 0x7030, 0xa08e, 0x1400,
--      0x1520, 0x2009, 0x0038, 0x0016, 0x2011, 0xbb83, 0x2204, 0x8211,
--      0x220c, 0x080c, 0x281d, 0x11c0, 0x080c, 0x4f4e, 0x11a8, 0x6612,
--      0x6516, 0x00c6, 0x080c, 0x85c1, 0x0170, 0x001e, 0x611a, 0x080c,
--      0xa021, 0x601f, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x8646,
--      0x080c, 0x7174, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x0005,
--      0x00f6, 0x00d6, 0x0026, 0x0016, 0x0136, 0x0146, 0x0156, 0x3c00,
--      0x0006, 0x2079, 0x0030, 0x2069, 0x0200, 0x080c, 0x1f2d, 0x1590,
--      0x080c, 0x1dd2, 0x05e0, 0x04f1, 0x1130, 0x7908, 0xa18c, 0x1fff,
--      0xa182, 0x0011, 0x1688, 0x20a9, 0x000c, 0x20e1, 0x0000, 0x2ea0,
--      0x2099, 0x020a, 0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004,
--      0x7a0c, 0x7808, 0xa080, 0x0007, 0xa084, 0x1ff8, 0x0419, 0x1120,
--      0xa08a, 0x0140, 0x1a0c, 0x1515, 0x80ac, 0x20e1, 0x6000, 0x2099,
--      0x020a, 0x53a5, 0x20e1, 0x7000, 0x6828, 0x6828, 0x7803, 0x0004,
--      0xa294, 0x0070, 0x000e, 0x20e0, 0x015e, 0x014e, 0x013e, 0x001e,
--      0x002e, 0x00de, 0x00fe, 0x0005, 0xa016, 0x080c, 0x185e, 0xa085,
--      0x0001, 0x0c80, 0x0006, 0x2001, 0x0111, 0x2004, 0xa084, 0x0003,
--      0x000e, 0x0005, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0xa696,
--      0x00ff, 0x1198, 0xa596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804,
--      0x6704, 0xa596, 0xfffe, 0x1118, 0x2009, 0x007e, 0x04e8, 0xa596,
--      0xfffc, 0x1118, 0x2009, 0x0080, 0x04b8, 0x2011, 0x0000, 0x2019,
--      0xb535, 0x231c, 0xd3ac, 0x0138, 0x2021, 0x0000, 0x20a9, 0x00ff,
--      0x2071, 0xb635, 0x0030, 0x2021, 0x0081, 0x20a9, 0x007e, 0x2071,
--      0xb6b6, 0x2e1c, 0x83ff, 0x1128, 0x82ff, 0x1198, 0x2410, 0xc2fd,
--      0x0080, 0x2368, 0x6f10, 0x0006, 0x2100, 0xa706, 0x000e, 0x6b14,
--      0x1120, 0xa346, 0x1110, 0x2408, 0x0078, 0x87ff, 0x1110, 0x83ff,
--      0x0d58, 0x8420, 0x8e70, 0x1f04, 0x66e1, 0x82ff, 0x1118, 0xa085,
--      0x0001, 0x0018, 0xc2fc, 0x2208, 0xa006, 0x00de, 0x00ee, 0x004e,
--      0x0005, 0xa084, 0x0007, 0x000a, 0x0005, 0x6715, 0x6715, 0x6715,
--      0x6862, 0x6715, 0x6716, 0x672b, 0x67a0, 0x0005, 0x7110, 0xd1bc,
--      0x0188, 0x7120, 0x2160, 0xac8c, 0x0007, 0x1160, 0xac8a, 0xbd00,
--      0x0248, 0x685c, 0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0046,
--      0x080c, 0x8646, 0x0005, 0x00c6, 0xa484, 0x01ff, 0x0904, 0x677e,
--      0x7110, 0xd1bc, 0x1904, 0x677e, 0x2011, 0xbb83, 0x2204, 0x8211,
--      0x220c, 0x080c, 0x281d, 0x1904, 0x677e, 0x080c, 0x4f4e, 0x15f0,
--      0x6612, 0x6516, 0x6000, 0xd0ec, 0x15c8, 0x6204, 0xa294, 0xff00,
--      0x8217, 0xa286, 0x0006, 0x0148, 0x6204, 0xa294, 0x00ff, 0xa286,
--      0x0006, 0x11a0, 0xa295, 0x0600, 0x6206, 0x00c6, 0x080c, 0x85c1,
--      0x001e, 0x0530, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x7130,
--      0x6152, 0x2009, 0x0044, 0x080c, 0x8646, 0x00c0, 0x00c6, 0x080c,
--      0x85c1, 0x001e, 0x0198, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a,
--      0xa286, 0x0004, 0x1118, 0x6007, 0x0005, 0x0010, 0x6007, 0x0001,
--      0x6003, 0x0001, 0x080c, 0x6cd4, 0x080c, 0x7174, 0x00ce, 0x0005,
--      0x2001, 0xb50d, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c,
--      0x3ecd, 0x00c6, 0x080c, 0x9ed0, 0x001e, 0x0d80, 0x611a, 0x601f,
--      0x0006, 0x7120, 0x610a, 0x7130, 0x6152, 0x6013, 0x0300, 0x6003,
--      0x0001, 0x6007, 0x0041, 0x080c, 0x6c8e, 0x080c, 0x7174, 0x08f0,
--      0x7110, 0xd1bc, 0x0188, 0x7020, 0x2060, 0xac84, 0x0007, 0x1160,
--      0xac82, 0xbd00, 0x0248, 0x685c, 0xac02, 0x1230, 0x7124, 0x610a,
--      0x2009, 0x0045, 0x080c, 0x8646, 0x0005, 0x0006, 0x080c, 0x2dbf,
--      0x000e, 0x1168, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000,
--      0x1130, 0xa084, 0x000f, 0xa08a, 0x0006, 0x1208, 0x000b, 0x0005,
--      0x67ce, 0x67cf, 0x67ce, 0x67ce, 0x6838, 0x6844, 0x0005, 0x7110,
--      0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x6837, 0x700c, 0x7108,
--      0x080c, 0x281d, 0x1904, 0x6837, 0x080c, 0x4f4e, 0x1904, 0x6837,
--      0x6612, 0x6516, 0x6204, 0x7110, 0xd1bc, 0x01f8, 0xa28c, 0x00ff,
--      0xa186, 0x0004, 0x0118, 0xa186, 0x0006, 0x15c8, 0x00c6, 0x080c,
--      0x6850, 0x00ce, 0x0904, 0x6837, 0x00c6, 0x080c, 0x85c1, 0x001e,
--      0x05f0, 0x611a, 0x080c, 0xa021, 0x601f, 0x0002, 0x7120, 0x610a,
--      0x2009, 0x0088, 0x080c, 0x8646, 0x0490, 0xa28c, 0x00ff, 0xa186,
--      0x0006, 0x0160, 0xa186, 0x0004, 0x0148, 0xa294, 0xff00, 0x8217,
--      0xa286, 0x0004, 0x0118, 0xa286, 0x0006, 0x1188, 0x00c6, 0x080c,
--      0x85c1, 0x001e, 0x01e0, 0x611a, 0x080c, 0xa021, 0x601f, 0x0005,
--      0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x8646, 0x0080, 0x00c6,
--      0x080c, 0x85c1, 0x001e, 0x0158, 0x611a, 0x080c, 0xa021, 0x601f,
--      0x0004, 0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x8646, 0x0005,
--      0x7110, 0xd1bc, 0x0140, 0x00a1, 0x0130, 0x7124, 0x610a, 0x2009,
--      0x0089, 0x080c, 0x8646, 0x0005, 0x7110, 0xd1bc, 0x0140, 0x0041,
--      0x0130, 0x7124, 0x610a, 0x2009, 0x008a, 0x080c, 0x8646, 0x0005,
--      0x7020, 0x2060, 0xac84, 0x0007, 0x1158, 0xac82, 0xbd00, 0x0240,
--      0x2001, 0xb517, 0x2004, 0xac02, 0x1218, 0xa085, 0x0001, 0x0005,
--      0xa006, 0x0ce8, 0x7110, 0xd1bc, 0x1178, 0x7024, 0x2060, 0xac84,
--      0x0007, 0x1150, 0xac82, 0xbd00, 0x0238, 0x685c, 0xac02, 0x1220,
--      0x2009, 0x0051, 0x080c, 0x8646, 0x0005, 0x2031, 0x0105, 0x0069,
--      0x0005, 0x2031, 0x0206, 0x0049, 0x0005, 0x2031, 0x0207, 0x0029,
--      0x0005, 0x2031, 0x0213, 0x0009, 0x0005, 0x00c6, 0x00d6, 0x00f6,
--      0x7000, 0xa084, 0xf000, 0xa086, 0xc000, 0x05b0, 0x080c, 0x85c1,
--      0x0598, 0x0066, 0x00c6, 0x0046, 0x2011, 0xbb83, 0x2204, 0x8211,
--      0x220c, 0x080c, 0x281d, 0x1580, 0x080c, 0x4f4e, 0x1568, 0x6612,
--      0x6516, 0x2c00, 0x004e, 0x00ce, 0x601a, 0x080c, 0xa021, 0x080c,
--      0x15f8, 0x01f0, 0x2d00, 0x6056, 0x6803, 0x0000, 0x6837, 0x0000,
--      0x6c3a, 0xadf8, 0x000f, 0x20a9, 0x000e, 0x2fa0, 0x2e98, 0x53a3,
--      0x006e, 0x6612, 0x6007, 0x003e, 0x601f, 0x0001, 0x6003, 0x0001,
--      0x080c, 0x6cd4, 0x080c, 0x7174, 0x00fe, 0x00de, 0x00ce, 0x0005,
--      0x080c, 0x8617, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x2071,
--      0xb7f3, 0x7003, 0x0003, 0x700f, 0x0361, 0xa006, 0x701a, 0x7076,
--      0x7012, 0x7017, 0xbd00, 0x7007, 0x0000, 0x7026, 0x702b, 0x7d92,
--      0x7032, 0x7037, 0x7df2, 0x703b, 0xffff, 0x703f, 0xffff, 0x7042,
--      0x7047, 0x444c, 0x704a, 0x705b, 0x6a2c, 0x2001, 0xb7a1, 0x2003,
--      0x0003, 0x2001, 0xb7a3, 0x2003, 0x0100, 0x3a00, 0xa084, 0x0005,
--      0x706e, 0x0005, 0x2071, 0xb7f3, 0x1d04, 0x698c, 0x2091, 0x6000,
--      0x700c, 0x8001, 0x700e, 0x1518, 0x700f, 0x0361, 0x7007, 0x0001,
--      0x0126, 0x2091, 0x8000, 0x7040, 0xa00d, 0x0128, 0x8109, 0x7142,
--      0x1110, 0x7044, 0x080f, 0x00c6, 0x2061, 0xb500, 0x6034, 0x00ce,
--      0xd0cc, 0x0180, 0x3a00, 0xa084, 0x0005, 0x726c, 0xa216, 0x0150,
--      0x706e, 0x2011, 0x8043, 0x2018, 0x080c, 0x3ecd, 0x0018, 0x0126,
--      0x2091, 0x8000, 0x7024, 0xa00d, 0x0188, 0x7020, 0x8001, 0x7022,
--      0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0xa186, 0x03e8, 0x1110,
--      0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030, 0xa00d,
--      0x0180, 0x702c, 0x8001, 0x702e, 0x1160, 0x702f, 0x0009, 0x8109,
--      0x7132, 0x0128, 0xa184, 0x007f, 0x090c, 0x7e37, 0x0010, 0x7034,
--      0x080f, 0x7038, 0xa005, 0x0118, 0x0310, 0x8001, 0x703a, 0x703c,
--      0xa005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0xa00d, 0x0168,
--      0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109, 0x714e,
--      0x1120, 0x7150, 0x714e, 0x7058, 0x080f, 0x7018, 0xa00d, 0x01d8,
--      0x0016, 0x7074, 0xa00d, 0x0158, 0x7070, 0x8001, 0x7072, 0x1138,
--      0x7073, 0x0009, 0x8109, 0x7176, 0x1110, 0x7078, 0x080f, 0x001e,
--      0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a,
--      0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x69b2, 0x69b3,
--      0x69cb, 0x00e6, 0x2071, 0xb7f3, 0x7018, 0xa005, 0x1120, 0x711a,
--      0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071,
--      0xb7f3, 0x701c, 0xa206, 0x1110, 0x701a, 0x701e, 0x000e, 0x00ee,
--      0x0005, 0x00e6, 0x2071, 0xb7f3, 0x6088, 0xa102, 0x0208, 0x618a,
--      0x00ee, 0x0005, 0x0005, 0x7110, 0x080c, 0x4faa, 0x1158, 0x6088,
--      0x8001, 0x0240, 0x608a, 0x1130, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x7174, 0x012e, 0x8108, 0xa182, 0x00ff, 0x0218, 0xa00e, 0x7007,
--      0x0002, 0x7112, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000,
--      0x603c, 0xa005, 0x0128, 0x8001, 0x603e, 0x1110, 0x080c, 0x9f0f,
--      0x6014, 0xa005, 0x0500, 0x8001, 0x6016, 0x11e8, 0x611c, 0xa186,
--      0x0003, 0x0118, 0xa186, 0x0006, 0x11a0, 0x6010, 0x2068, 0x6854,
--      0xa08a, 0x199a, 0x0270, 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a,
--      0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116,
--      0x0010, 0x080c, 0x99df, 0x012e, 0xac88, 0x0018, 0x7116, 0x2001,
--      0xed00, 0xa102, 0x0220, 0x7017, 0xbd00, 0x7007, 0x0000, 0x0005,
--      0x00e6, 0x2071, 0xb7f3, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee,
--      0x0005, 0x2001, 0xb7fc, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071,
--      0xb7f3, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0xb7ff,
--      0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, 0xb7f3, 0x711a, 0x721e,
--      0x700b, 0x0009, 0x00ee, 0x0005, 0x00c6, 0x0026, 0x7054, 0x8000,
--      0x7056, 0x2061, 0xb7a1, 0x6008, 0xa086, 0x0000, 0x0158, 0x7068,
--      0x6032, 0x7064, 0x602e, 0x7060, 0x602a, 0x705c, 0x6026, 0x2c10,
--      0x080c, 0x1643, 0x002e, 0x00ce, 0x0005, 0x0006, 0x0016, 0x00c6,
--      0x00d6, 0x00e6, 0x00f6, 0x080c, 0x68fa, 0x00fe, 0x00ee, 0x00de,
--      0x00ce, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0xb7f3, 0x7176,
--      0x727a, 0x7073, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071,
--      0xb7f3, 0x7078, 0xa206, 0x1110, 0x7076, 0x707a, 0x000e, 0x00ee,
--      0x0005, 0x00c6, 0x2061, 0xb874, 0x00ce, 0x0005, 0xa184, 0x000f,
--      0x8003, 0x8003, 0x8003, 0xa080, 0xb874, 0x2060, 0x0005, 0x6854,
--      0xa08a, 0x199a, 0x0210, 0x2001, 0x1999, 0xa005, 0x1150, 0x00c6,
--      0x2061, 0xb874, 0x6014, 0x00ce, 0xa005, 0x1138, 0x2001, 0x001e,
--      0x0020, 0xa08e, 0xffff, 0x1108, 0xa006, 0x8003, 0x800b, 0x810b,
--      0xa108, 0x6116, 0x684c, 0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x05e8,
--      0xd0b4, 0x1138, 0xd0bc, 0x1550, 0x2009, 0x0006, 0x080c, 0x6af2,
--      0x0005, 0xd0fc, 0x0138, 0xa084, 0x0003, 0x0120, 0xa086, 0x0003,
--      0x1904, 0x6aec, 0x6020, 0xd0d4, 0x0130, 0xc0d4, 0x6022, 0x6860,
--      0x602a, 0x685c, 0x602e, 0x2009, 0xb574, 0x2104, 0xd084, 0x0138,
--      0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, 0x8646, 0x0005, 0x87ff,
--      0x1120, 0x2009, 0x0043, 0x080c, 0x8646, 0x0005, 0xd0fc, 0x0130,
--      0xa084, 0x0003, 0x0118, 0xa086, 0x0003, 0x11f0, 0x87ff, 0x1120,
--      0x2009, 0x0042, 0x080c, 0x8646, 0x0005, 0xd0fc, 0x0160, 0xa084,
--      0x0003, 0xa08e, 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041,
--      0x080c, 0x8646, 0x0005, 0x0061, 0x0ce8, 0x87ff, 0x1dd8, 0x2009,
--      0x0043, 0x080c, 0x8646, 0x0cb0, 0x2009, 0x0004, 0x0019, 0x0005,
--      0x2009, 0x0001, 0x00d6, 0x6010, 0xa0ec, 0xf000, 0x0510, 0x2068,
--      0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x1188, 0x694c, 0xa18c,
--      0x8100, 0xa18e, 0x8100, 0x1158, 0x00c6, 0x2061, 0xb874, 0x6200,
--      0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c,
--      0x5409, 0x6010, 0xa06d, 0x0076, 0x2039, 0x0000, 0x190c, 0x6a77,
--      0x007e, 0x00de, 0x0005, 0x0156, 0x00c6, 0x2061, 0xb874, 0x6000,
--      0x81ff, 0x0110, 0xa205, 0x0008, 0xa204, 0x6002, 0x00ce, 0x015e,
--      0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0xa005, 0x0120, 0x8001,
--      0x680a, 0xa085, 0x0001, 0x0005, 0x20a9, 0x0010, 0xa006, 0x8004,
--      0x8086, 0x818e, 0x1208, 0xa200, 0x1f04, 0x6b38, 0x8086, 0x818e,
--      0x0005, 0x0156, 0x20a9, 0x0010, 0xa005, 0x01b8, 0xa11a, 0x12a8,
--      0x8213, 0x818d, 0x0228, 0xa11a, 0x1220, 0x1f04, 0x6b48, 0x0028,
--      0xa11a, 0x2308, 0x8210, 0x1f04, 0x6b48, 0x0006, 0x3200, 0xa084,
--      0xefff, 0x2080, 0x000e, 0x015e, 0x0005, 0x0006, 0x3200, 0xa085,
--      0x1000, 0x0cb8, 0x0126, 0x2091, 0x2800, 0x2079, 0xb7e0, 0x012e,
--      0x00d6, 0x2069, 0xb7e0, 0x6803, 0x0005, 0x2069, 0x0004, 0x2d04,
--      0xa085, 0x8001, 0x206a, 0x00de, 0x0005, 0x00c6, 0x6027, 0x0001,
--      0x7804, 0xa084, 0x0007, 0x0002, 0x6b86, 0x6ba7, 0x6bfa, 0x6b8c,
--      0x6ba7, 0x6b86, 0x6b84, 0x6b84, 0x080c, 0x1515, 0x080c, 0x6a11,
--      0x080c, 0x7174, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce,
--      0x0005, 0x2011, 0x4add, 0x080c, 0x699d, 0x7828, 0xa092, 0x00c8,
--      0x1228, 0x8000, 0x782a, 0x080c, 0x4b17, 0x0c88, 0x080c, 0x4add,
--      0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c40, 0x080c,
--      0x6a11, 0x3c00, 0x0006, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214,
--      0x000e, 0x20e0, 0x82ff, 0x0178, 0x62c0, 0x82ff, 0x1160, 0x782b,
--      0x0000, 0x7824, 0xa065, 0x090c, 0x1515, 0x2009, 0x0013, 0x080c,
--      0x8646, 0x00ce, 0x0005, 0x3900, 0xa082, 0xb92c, 0x1210, 0x080c,
--      0x832c, 0x00c6, 0x7824, 0xa065, 0x090c, 0x1515, 0x7804, 0xa086,
--      0x0004, 0x0904, 0x6c3a, 0x7828, 0xa092, 0x2710, 0x1230, 0x8000,
--      0x782a, 0x00ce, 0x080c, 0x7d6e, 0x0c20, 0x6104, 0xa186, 0x0003,
--      0x1188, 0x00e6, 0x2071, 0xb500, 0x70e0, 0x00ee, 0xd08c, 0x0150,
--      0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xb500, 0x080c, 0x4b20,
--      0x00ee, 0x00ce, 0x080c, 0xb438, 0x2009, 0x0014, 0x080c, 0x8646,
--      0x00ce, 0x0838, 0x2001, 0xb7fc, 0x2003, 0x0000, 0x62c0, 0x82ff,
--      0x1160, 0x782b, 0x0000, 0x7824, 0xa065, 0x090c, 0x1515, 0x2009,
--      0x0013, 0x080c, 0x869a, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x3900,
--      0xa082, 0xb92c, 0x1210, 0x080c, 0x832c, 0x7824, 0xa005, 0x090c,
--      0x1515, 0x781c, 0xa06d, 0x090c, 0x1515, 0x6800, 0xc0dc, 0x6802,
--      0x7924, 0x2160, 0x080c, 0x8617, 0x693c, 0x81ff, 0x090c, 0x1515,
--      0x8109, 0x693e, 0x6854, 0xa015, 0x0110, 0x7a1e, 0x0010, 0x7918,
--      0x791e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce, 0x080c,
--      0x7174, 0x0888, 0x6104, 0xa186, 0x0002, 0x0128, 0xa186, 0x0004,
--      0x0110, 0x0804, 0x6bd3, 0x7808, 0xac06, 0x0904, 0x6bd3, 0x080c,
--      0x7091, 0x080c, 0x6cd4, 0x00ce, 0x080c, 0x7174, 0x0804, 0x6bc1,
--      0x00c6, 0x6027, 0x0002, 0x62c8, 0x60c4, 0xa205, 0x1178, 0x793c,
--      0xa1e5, 0x0000, 0x0130, 0x2009, 0x0049, 0x080c, 0x8646, 0x00ce,
--      0x0005, 0x2011, 0xb7ff, 0x2013, 0x0000, 0x0cc8, 0x3908, 0xa192,
--      0xb92c, 0x1210, 0x080c, 0x832c, 0x793c, 0x81ff, 0x0d90, 0x7944,
--      0xa192, 0x7530, 0x12b8, 0x8108, 0x7946, 0x793c, 0xa188, 0x0007,
--      0x210c, 0xa18e, 0x0006, 0x1138, 0x6014, 0xa084, 0x0184, 0xa085,
--      0x0012, 0x6016, 0x08e0, 0x6014, 0xa084, 0x0184, 0xa085, 0x0016,
--      0x6016, 0x08a8, 0x7848, 0xc085, 0x784a, 0x0888, 0x0006, 0x0016,
--      0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061,
--      0xb7e0, 0x6020, 0x8000, 0x6022, 0x6010, 0xa005, 0x0148, 0xa080,
--      0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e, 0x000e, 0x0005,
--      0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0xb7e0, 0x6000, 0xd0d4,
--      0x0168, 0x6820, 0x8000, 0x6822, 0xa086, 0x0001, 0x1110, 0x2c00,
--      0x681e, 0x6804, 0xa084, 0x0007, 0x0804, 0x717a, 0xc0d5, 0x6002,
--      0x6818, 0xa005, 0x0158, 0x6056, 0x605b, 0x0000, 0x0006, 0x2c00,
--      0x681a, 0x00de, 0x685a, 0x2069, 0xb7e0, 0x0c18, 0x6056, 0x605a,
--      0x2c00, 0x681a, 0x681e, 0x08e8, 0x0006, 0x0016, 0x00c6, 0x0126,
--      0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0xb7e0, 0x6020,
--      0x8000, 0x6022, 0x6008, 0xa005, 0x0148, 0xa080, 0x0003, 0x2102,
--      0x610a, 0x012e, 0x00ce, 0x001e, 0x000e, 0x0005, 0x610e, 0x610a,
--      0x0cc0, 0x00c6, 0x600f, 0x0000, 0x2c08, 0x2061, 0xb7e0, 0x6034,
--      0xa005, 0x0130, 0xa080, 0x0003, 0x2102, 0x6136, 0x00ce, 0x0005,
--      0x613a, 0x6136, 0x0cd8, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076,
--      0x0066, 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0xa02e,
--      0x2071, 0xb7e0, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff,
--      0x0904, 0x6d7c, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x1904,
--      0x6d77, 0x87ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x6d77, 0x703c,
--      0xac06, 0x1190, 0x0036, 0x2019, 0x0001, 0x080c, 0x7fe5, 0x7033,
--      0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b,
--      0x0000, 0x003e, 0x2029, 0x0001, 0x7038, 0xac36, 0x1110, 0x660c,
--      0x763a, 0x7034, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00,
--      0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06,
--      0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0x9c54,
--      0x01c8, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x1580, 0x6837,
--      0x0103, 0x6b4a, 0x6847, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c,
--      0x9ec6, 0x080c, 0xb374, 0x080c, 0x5409, 0x007e, 0x003e, 0x001e,
--      0x080c, 0x9e0b, 0x080c, 0x9e17, 0x00ce, 0x0804, 0x6d17, 0x2c78,
--      0x600c, 0x2060, 0x0804, 0x6d17, 0x85ff, 0x0120, 0x0036, 0x080c,
--      0x7231, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e,
--      0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601c,
--      0xa086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xb374,
--      0x080c, 0xb08d, 0x007e, 0x003e, 0x001e, 0x08a0, 0x601c, 0xa086,
--      0x000a, 0x0904, 0x6d61, 0x0804, 0x6d5f, 0x0006, 0x0066, 0x00c6,
--      0x00d6, 0x00f6, 0x2031, 0x0000, 0x0126, 0x2091, 0x8000, 0x2079,
--      0xb7e0, 0x7838, 0xa065, 0x0568, 0x600c, 0x0006, 0x600f, 0x0000,
--      0x783c, 0xac06, 0x1180, 0x0036, 0x2019, 0x0001, 0x080c, 0x7fe5,
--      0x7833, 0x0000, 0x783f, 0x0000, 0x7843, 0x0000, 0x7847, 0x0000,
--      0x784b, 0x0000, 0x003e, 0x080c, 0x9c54, 0x0178, 0x6010, 0x2068,
--      0x601c, 0xa086, 0x0003, 0x11b0, 0x6837, 0x0103, 0x6b4a, 0x6847,
--      0x0000, 0x080c, 0x5409, 0x080c, 0x9e0b, 0x080c, 0x9e17, 0x000e,
--      0x0888, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce, 0x006e,
--      0x000e, 0x0005, 0x601c, 0xa086, 0x0006, 0x1118, 0x080c, 0xb08d,
--      0x0c60, 0x601c, 0xa086, 0x000a, 0x0d08, 0x08f0, 0x0016, 0x0026,
--      0x0086, 0x2041, 0x0000, 0x0099, 0x080c, 0x6ec4, 0x008e, 0x002e,
--      0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, 0xb7e0, 0x2091, 0x8000,
--      0x080c, 0x6f51, 0x080c, 0x6fc3, 0x012e, 0x00fe, 0x0005, 0x00f6,
--      0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091,
--      0x8000, 0x2071, 0xb7e0, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904,
--      0x6e9a, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x1904, 0x6e95,
--      0x88ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x6e95, 0x7024, 0xac06,
--      0x1538, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c, 0x6a11,
--      0x080c, 0x7d7b, 0x68c3, 0x0000, 0x080c, 0x8247, 0x7027, 0x0000,
-+      0x2001, 0xb78f, 0x2004, 0x080c, 0x2872, 0x60e2, 0x2001, 0xb50c,
-+      0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e,
-+      0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x0046,
-+      0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xb500, 0x7130, 0xd184,
-+      0x1180, 0x2011, 0xb553, 0x2214, 0xd2ec, 0x0138, 0xc18d, 0x7132,
-+      0x2011, 0xb553, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, 0x0904,
-+      0x5d68, 0x7130, 0xc185, 0x7132, 0x2011, 0xb553, 0x220c, 0xd1a4,
-+      0x0530, 0x0016, 0x2019, 0x000e, 0x080c, 0xb065, 0x0156, 0x20a9,
-+      0x007f, 0x2009, 0x0000, 0xa186, 0x007e, 0x01a0, 0xa186, 0x0080,
-+      0x0188, 0x080c, 0x4fa9, 0x1170, 0x8127, 0xa006, 0x0016, 0x2009,
-+      0x000e, 0x080c, 0xb0e8, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c,
-+      0x6b1a, 0x001e, 0x8108, 0x1f04, 0x5d33, 0x015e, 0x001e, 0xd1ac,
-+      0x1148, 0x0016, 0x2009, 0x0000, 0x2019, 0x0004, 0x080c, 0x2c6f,
-+      0x001e, 0x0070, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000, 0x080c,
-+      0x4fa9, 0x1110, 0x080c, 0x4c0b, 0x8108, 0x1f04, 0x5d5f, 0x015e,
-+      0x080c, 0x1e47, 0x2011, 0x0003, 0x080c, 0x8075, 0x2011, 0x0002,
-+      0x080c, 0x807f, 0x080c, 0x7f59, 0x0036, 0x2019, 0x0000, 0x080c,
-+      0x7fe4, 0x003e, 0x60e3, 0x0000, 0x2001, 0xb500, 0x2003, 0x0001,
-+      0x080c, 0x5a07, 0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e, 0x001e,
-+      0x015e, 0x0005, 0x2071, 0xb5e2, 0x7003, 0x0000, 0x7007, 0x0000,
-+      0x700f, 0x0000, 0x702b, 0x0001, 0x704f, 0x0000, 0x7053, 0x0001,
-+      0x705f, 0x0020, 0x7063, 0x0040, 0x7083, 0x0000, 0x708b, 0x0000,
-+      0x708f, 0x0001, 0x70bf, 0x0000, 0x0005, 0x00e6, 0x2071, 0xb5e2,
-+      0x6848, 0xa005, 0x1130, 0x7028, 0xc085, 0x702a, 0xa085, 0x0001,
-+      0x0428, 0x6a50, 0x7236, 0x6b54, 0x733a, 0x6858, 0x703e, 0x707a,
-+      0x685c, 0x7042, 0x707e, 0x6848, 0x702e, 0x6840, 0x7032, 0x2009,
-+      0x000c, 0x200a, 0x8007, 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084,
-+      0xffc0, 0xa210, 0x2100, 0xa319, 0x7272, 0x7376, 0x7028, 0xc084,
-+      0x702a, 0x7007, 0x0001, 0x700f, 0x0000, 0xa006, 0x00ee, 0x0005,
-+      0x2b78, 0x2071, 0xb5e2, 0x7004, 0x0043, 0x700c, 0x0002, 0x5de4,
-+      0x5ddb, 0x5ddb, 0x5ddb, 0x5ddb, 0x0005, 0x5e3a, 0x5e3b, 0x5e6d,
-+      0x5e6e, 0x5e38, 0x5ebc, 0x5ec1, 0x5ef2, 0x5ef3, 0x5f0e, 0x5f0f,
-+      0x5f10, 0x5f11, 0x5f12, 0x5f13, 0x5fc9, 0x5ff0, 0x700c, 0x0002,
-+      0x5dfd, 0x5e38, 0x5e38, 0x5e39, 0x5e39, 0x7830, 0x7930, 0xa106,
-+      0x0120, 0x7830, 0x7930, 0xa106, 0x1510, 0x7030, 0xa10a, 0x01f8,
-+      0x1210, 0x712c, 0xa10a, 0xa18a, 0x0002, 0x12d0, 0x080c, 0x15df,
-+      0x01b0, 0x2d00, 0x705a, 0x7063, 0x0040, 0x2001, 0x0003, 0x7057,
-+      0x0000, 0x0126, 0x0006, 0x2091, 0x8000, 0x2009, 0xb812, 0x2104,
-+      0xc085, 0x200a, 0x000e, 0x700e, 0x012e, 0x080c, 0x165f, 0x0005,
-+      0x080c, 0x15df, 0x0de0, 0x2d00, 0x705a, 0x080c, 0x15df, 0x1108,
-+      0x0c10, 0x2d00, 0x7086, 0x7063, 0x0080, 0x2001, 0x0004, 0x08f8,
-+      0x0005, 0x0005, 0x0005, 0x700c, 0x0002, 0x5e42, 0x5e45, 0x5e53,
-+      0x5e6c, 0x5e6c, 0x080c, 0x5df6, 0x0005, 0x0126, 0x8001, 0x700e,
-+      0x7058, 0x0006, 0x080c, 0x6343, 0x0120, 0x2091, 0x8000, 0x080c,
-+      0x5df6, 0x00de, 0x0048, 0x0126, 0x8001, 0x700e, 0x080c, 0x6343,
-+      0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000,
-+      0x6834, 0xa084, 0x00ff, 0xa08a, 0x003a, 0x1218, 0x00db, 0x012e,
-+      0x0005, 0x012e, 0x080c, 0x5f14, 0x0005, 0x0005, 0x0005, 0x00e6,
-+      0x2071, 0xb5e2, 0x700c, 0x0002, 0x5e79, 0x5e79, 0x5e79, 0x5e7b,
-+      0x5e7e, 0x00ee, 0x0005, 0x700f, 0x0001, 0x0010, 0x700f, 0x0002,
-+      0x00ee, 0x0005, 0x5f14, 0x5f14, 0x5f30, 0x5f14, 0x60ad, 0x5f14,
-+      0x5f14, 0x5f14, 0x5f14, 0x5f14, 0x5f30, 0x60ef, 0x6132, 0x617b,
-+      0x618f, 0x5f14, 0x5f14, 0x5f4c, 0x5f30, 0x5f14, 0x5f14, 0x5fa6,
-+      0x623b, 0x6256, 0x5f14, 0x5f4c, 0x5f14, 0x5f14, 0x5f14, 0x5f14,
-+      0x5f9c, 0x6256, 0x5f14, 0x5f14, 0x5f14, 0x5f14, 0x5f14, 0x5f14,
-+      0x5f14, 0x5f14, 0x5f14, 0x5f60, 0x5f14, 0x5f14, 0x5f14, 0x5f14,
-+      0x5f14, 0x5f14, 0x5f14, 0x5f14, 0x5f14, 0x6361, 0x5f14, 0x5f14,
-+      0x5f14, 0x5f14, 0x5f14, 0x5f75, 0x7020, 0x2068, 0x080c, 0x160f,
-+      0x0005, 0x700c, 0x0002, 0x5ec8, 0x5ecb, 0x5ed9, 0x5ef1, 0x5ef1,
-+      0x080c, 0x5df6, 0x0005, 0x0126, 0x8001, 0x700e, 0x7058, 0x0006,
-+      0x080c, 0x6343, 0x0120, 0x2091, 0x8000, 0x080c, 0x5df6, 0x00de,
-+      0x0048, 0x0126, 0x8001, 0x700e, 0x080c, 0x6343, 0x7058, 0x2068,
-+      0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084,
-+      0x00ff, 0xa08a, 0x001a, 0x1218, 0x003b, 0x012e, 0x0005, 0x012e,
-+      0x0419, 0x0005, 0x0005, 0x0005, 0x5f14, 0x5f30, 0x6099, 0x5f14,
-+      0x5f30, 0x5f14, 0x5f30, 0x5f30, 0x5f14, 0x5f30, 0x6099, 0x5f30,
-+      0x5f30, 0x5f30, 0x5f30, 0x5f30, 0x5f14, 0x5f30, 0x6099, 0x5f14,
-+      0x5f14, 0x5f30, 0x5f14, 0x5f14, 0x5f14, 0x5f30, 0x0005, 0x0005,
-+      0x0005, 0x0005, 0x0005, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084,
-+      0x00ff, 0xc0d5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x5408,
-+      0x012e, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0e5,
-+      0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x5408, 0x012e, 0x0005,
-+      0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0ed, 0x683a, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x5408, 0x012e, 0x0005, 0x7007, 0x0001,
-+      0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a, 0x0126, 0x2091, 0x8000,
-+      0x080c, 0x5408, 0x012e, 0x0005, 0x6834, 0x8007, 0xa084, 0x00ff,
-+      0x0988, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x6059, 0x7007,
-+      0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x6059, 0x0005,
-+      0x6834, 0x8007, 0xa084, 0x00ff, 0x0904, 0x5f22, 0x8001, 0x1120,
-+      0x7007, 0x0001, 0x0804, 0x6076, 0x7007, 0x0006, 0x7012, 0x2d00,
-+      0x7016, 0x701a, 0x704b, 0x6076, 0x0005, 0x6834, 0x8007, 0xa084,
-+      0x00ff, 0xa086, 0x0001, 0x1904, 0x5f22, 0x7007, 0x0001, 0x2009,
-+      0xb531, 0x210c, 0x81ff, 0x11a8, 0x6838, 0xa084, 0x00ff, 0x683a,
-+      0x6853, 0x0000, 0x080c, 0x4d82, 0x1108, 0x0005, 0x0126, 0x2091,
-+      0x8000, 0x6837, 0x0139, 0x684a, 0x6952, 0x080c, 0x5408, 0x012e,
-+      0x0ca0, 0x2001, 0x0028, 0x0c90, 0x684c, 0xa084, 0x00c0, 0xa086,
-+      0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x626e, 0x2d00, 0x7016,
-+      0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098, 0x20a1, 0xb60d,
-+      0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x1a04, 0x5f3e, 0x6a84,
-+      0xa28a, 0x0002, 0x1a04, 0x5f3e, 0x82ff, 0x1138, 0x6888, 0x698c,
-+      0xa105, 0x0118, 0x2001, 0x602c, 0x0018, 0xa280, 0x6022, 0x2005,
-+      0x70c6, 0x7010, 0xa015, 0x0904, 0x600e, 0x080c, 0x15df, 0x1118,
-+      0x7007, 0x000f, 0x0005, 0x2d00, 0x7022, 0x70c4, 0x2060, 0x2c05,
-+      0x6836, 0xe004, 0xad00, 0x7096, 0xe008, 0xa20a, 0x1210, 0xa00e,
-+      0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0xa296, 0x0004, 0x0108,
-+      0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x080c, 0x1643,
-+      0x7090, 0xa08e, 0x0100, 0x0170, 0xa086, 0x0200, 0x0118, 0x7007,
-+      0x0010, 0x0005, 0x7020, 0x2068, 0x080c, 0x160f, 0x7014, 0x2068,
-+      0x0804, 0x5f3e, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807, 0x0000,
-+      0x2d08, 0x2068, 0x6906, 0x711a, 0x0804, 0x5fc9, 0x7014, 0x2068,
-+      0x7007, 0x0001, 0x6884, 0xa005, 0x1128, 0x6888, 0x698c, 0xa105,
-+      0x0108, 0x00b1, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x0904,
-+      0x626e, 0x04b8, 0x6024, 0x6028, 0x0002, 0x0011, 0x0007, 0x0004,
-+      0x000a, 0x000f, 0x0005, 0x0006, 0x000a, 0x0011, 0x0005, 0x0004,
-+      0x00f6, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x6f88, 0x6e8c, 0x6804,
-+      0x2060, 0xacf0, 0x0021, 0xacf8, 0x0027, 0x2009, 0x0005, 0x700c,
-+      0x7816, 0x7008, 0x7812, 0x7004, 0x7806, 0x7000, 0x7802, 0x7e0e,
-+      0x7f0a, 0x8109, 0x0128, 0xaef2, 0x0004, 0xaffa, 0x0006, 0x0c78,
-+      0x6004, 0xa065, 0x1d30, 0x006e, 0x007e, 0x00ce, 0x00ee, 0x00fe,
-+      0x0005, 0x2009, 0xb531, 0x210c, 0x81ff, 0x1198, 0x6838, 0xa084,
-+      0x00ff, 0x683a, 0x080c, 0x4c64, 0x1108, 0x0005, 0x080c, 0x54db,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x9ecc, 0x080c, 0x5408, 0x012e,
-+      0x0ca0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c80, 0x2009, 0xb531,
-+      0x210c, 0x81ff, 0x11b0, 0x6858, 0xa005, 0x01c0, 0x6838, 0xa084,
-+      0x00ff, 0x683a, 0x6853, 0x0000, 0x080c, 0x4d26, 0x1108, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x684a, 0x6952, 0x080c, 0x5408, 0x012e,
-+      0x0cb0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c90, 0x2001, 0x0000,
-+      0x0c78, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, 0x711a, 0x7010,
-+      0x8001, 0x7012, 0x0118, 0x7007, 0x0006, 0x0030, 0x7014, 0x2068,
-+      0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x7007, 0x0001, 0x6944,
-+      0x810f, 0xa18c, 0x00ff, 0x6848, 0xa084, 0x00ff, 0x20a9, 0x0001,
-+      0xa096, 0x0001, 0x01b0, 0x2009, 0x0000, 0x20a9, 0x00ff, 0xa096,
-+      0x0002, 0x0178, 0xa005, 0x11f0, 0x6944, 0x810f, 0xa18c, 0x00ff,
-+      0x080c, 0x4fa9, 0x11b8, 0x0066, 0x6e50, 0x080c, 0x50a8, 0x006e,
-+      0x0088, 0x0046, 0x2011, 0xb50c, 0x2224, 0xc484, 0x2412, 0x004e,
-+      0x00c6, 0x080c, 0x4fa9, 0x1110, 0x080c, 0x5209, 0x8108, 0x1f04,
-+      0x60d9, 0x00ce, 0x684c, 0xd084, 0x1118, 0x080c, 0x160f, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x5408, 0x012e, 0x0005, 0x0126,
-+      0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xb553, 0x2004, 0xd0a4,
-+      0x0580, 0x2061, 0xb874, 0x6100, 0xd184, 0x0178, 0x6858, 0xa084,
-+      0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0xa005, 0x1538,
-+      0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001, 0x6860,
-+      0xa005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0x6858, 0xa084,
-+      0x00ff, 0x0178, 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff, 0x0148,
-+      0x600a, 0x6858, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804,
-+      0x6332, 0x012e, 0x0804, 0x632c, 0x012e, 0x0804, 0x6326, 0x012e,
-+      0x0804, 0x6329, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001,
-+      0xb553, 0x2004, 0xd0a4, 0x05e0, 0x2061, 0xb874, 0x6000, 0xd084,
-+      0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0x6c48, 0xa484, 0x0003,
-+      0x0170, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x1120, 0x2100, 0xa210,
-+      0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0xa212, 0x02f0, 0xa484,
-+      0x000c, 0x0188, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004,
-+      0x1120, 0x2100, 0xa318, 0x0288, 0x0030, 0xa082, 0x0004, 0x1168,
-+      0x2100, 0xa31a, 0x0250, 0x6860, 0xa005, 0x0110, 0x8000, 0x6016,
-+      0x6206, 0x630a, 0x012e, 0x0804, 0x6332, 0x012e, 0x0804, 0x632f,
-+      0x012e, 0x0804, 0x632c, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001,
-+      0x2061, 0xb874, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318, 0x0220,
-+      0x630a, 0x012e, 0x0804, 0x6340, 0x012e, 0x0804, 0x632f, 0x0126,
-+      0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac, 0x0148,
-+      0x00c6, 0x2061, 0xb874, 0x6000, 0xa084, 0xfcff, 0x6002, 0x00ce,
-+      0x0448, 0x6858, 0xa005, 0x05d0, 0x685c, 0xa065, 0x0598, 0x2001,
-+      0xb531, 0x2004, 0xa005, 0x0118, 0x080c, 0x9e1d, 0x0068, 0x6013,
-+      0x0400, 0x6057, 0x0000, 0x694c, 0xd1a4, 0x0110, 0x6950, 0x6156,
-+      0x2009, 0x0041, 0x080c, 0x864c, 0x6958, 0xa18c, 0xff00, 0xa186,
-+      0x2000, 0x1140, 0x0026, 0x2009, 0x0000, 0x2011, 0xfdff, 0x080c,
-+      0x6b1a, 0x002e, 0x684c, 0xd0c4, 0x0148, 0x2061, 0xb874, 0x6000,
-+      0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce, 0x012e,
-+      0x0804, 0x6332, 0x00ce, 0x012e, 0x0804, 0x632c, 0x6954, 0xa186,
-+      0x002e, 0x0d40, 0xa186, 0x002d, 0x0d28, 0xa186, 0x0045, 0x0528,
-+      0xa186, 0x002a, 0x1130, 0x2001, 0xb50c, 0x200c, 0xc194, 0x2102,
-+      0x08c8, 0xa186, 0x0020, 0x0170, 0xa186, 0x0029, 0x1d18, 0x6944,
-+      0xa18c, 0xff00, 0x810f, 0x080c, 0x4fa9, 0x1960, 0x6000, 0xc0e4,
-+      0x6002, 0x0840, 0x685c, 0xa065, 0x09a8, 0x6007, 0x0024, 0x2001,
-+      0xb7b6, 0x2004, 0x6016, 0x0804, 0x61ca, 0x685c, 0xa065, 0x0950,
-+      0x00e6, 0x6860, 0xa075, 0x2001, 0xb531, 0x2004, 0xa005, 0x0150,
-+      0x080c, 0x9e1d, 0x8eff, 0x0118, 0x2e60, 0x080c, 0x9e1d, 0x00ee,
-+      0x0804, 0x61ca, 0x6020, 0xc0dc, 0xc0d5, 0x6022, 0x2e60, 0x6007,
-+      0x003a, 0x6870, 0xa005, 0x0130, 0x6007, 0x003b, 0x6874, 0x602a,
-+      0x6878, 0x6012, 0x6003, 0x0001, 0x080c, 0x6c8d, 0x080c, 0x7173,
-+      0x00ee, 0x0804, 0x61ca, 0x2061, 0xb874, 0x6000, 0xd084, 0x0190,
-+      0xd08c, 0x1904, 0x6340, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210,
-+      0x0220, 0x6206, 0x012e, 0x0804, 0x6340, 0x012e, 0x6853, 0x0016,
-+      0x0804, 0x6339, 0x6853, 0x0007, 0x0804, 0x6339, 0x6834, 0x8007,
-+      0xa084, 0x00ff, 0x1118, 0x080c, 0x5f22, 0x0078, 0x2030, 0x8001,
-+      0x1120, 0x7007, 0x0001, 0x0051, 0x0040, 0x7007, 0x0006, 0x7012,
-+      0x2d00, 0x7016, 0x701a, 0x704b, 0x626e, 0x0005, 0x00e6, 0x0126,
-+      0x2091, 0x8000, 0xa03e, 0x2009, 0xb531, 0x210c, 0x81ff, 0x1904,
-+      0x62ec, 0x2009, 0xb50c, 0x210c, 0xd194, 0x1904, 0x6316, 0x6848,
-+      0x2070, 0xae82, 0xbd00, 0x0a04, 0x62e0, 0x2001, 0xb517, 0x2004,
-+      0xae02, 0x1a04, 0x62e0, 0x711c, 0xa186, 0x0006, 0x1904, 0x62cf,
-+      0x7018, 0xa005, 0x0904, 0x62ec, 0x2004, 0xd0e4, 0x1904, 0x6311,
-+      0x2061, 0xb874, 0x6100, 0xa184, 0x0301, 0xa086, 0x0001, 0x1550,
-+      0x7020, 0xd0dc, 0x1904, 0x6319, 0x6853, 0x0000, 0x6803, 0x0000,
-+      0x2d08, 0x7010, 0xa005, 0x1158, 0x7112, 0x684c, 0xd0f4, 0x1904,
-+      0x631c, 0x2e60, 0x080c, 0x6a76, 0x012e, 0x00ee, 0x0005, 0x2068,
-+      0x6800, 0xa005, 0x1de0, 0x6902, 0x2168, 0x684c, 0xd0f4, 0x1904,
-+      0x631c, 0x012e, 0x00ee, 0x0005, 0x012e, 0x00ee, 0x6853, 0x0006,
-+      0x0804, 0x6339, 0xd184, 0x0dc0, 0xd1c4, 0x11a8, 0x00b8, 0x6944,
-+      0xa18c, 0xff00, 0x810f, 0x080c, 0x4fa9, 0x15d8, 0x6000, 0xd0e4,
-+      0x15c0, 0x711c, 0xa186, 0x0007, 0x1118, 0x6853, 0x0002, 0x0498,
-+      0x6853, 0x0008, 0x0480, 0x6853, 0x000e, 0x0468, 0x6853, 0x0017,
-+      0x0450, 0x6853, 0x0035, 0x0438, 0x2001, 0xb572, 0x2004, 0xd0fc,
-+      0x01e8, 0x6848, 0x2070, 0xae82, 0xbd00, 0x02c0, 0x605c, 0xae02,
-+      0x12a8, 0x711c, 0xa186, 0x0006, 0x1188, 0x7018, 0xa005, 0x0170,
-+      0x2004, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0xa086, 0x0007,
-+      0x1904, 0x6279, 0x7003, 0x0002, 0x0804, 0x6279, 0x6853, 0x0028,
-+      0x0010, 0x6853, 0x0029, 0x012e, 0x00ee, 0x0418, 0x6853, 0x002a,
-+      0x0cd0, 0x6853, 0x0045, 0x0cb8, 0x2e60, 0x2019, 0x0002, 0x6017,
-+      0x0014, 0x080c, 0xace0, 0x012e, 0x00ee, 0x0005, 0x2009, 0x003e,
-+      0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028, 0x2009,
-+      0x0016, 0x0010, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00, 0xa105,
-+      0x6856, 0x0126, 0x2091, 0x8000, 0x080c, 0x5408, 0x012e, 0x0005,
-+      0x080c, 0x160f, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102, 0x0230,
-+      0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0058, 0x7070, 0xa080,
-+      0x0040, 0x7072, 0x1230, 0x7074, 0xa081, 0x0000, 0x7076, 0xa085,
-+      0x0001, 0x7932, 0x7132, 0x0005, 0x00d6, 0x080c, 0x6a6d, 0x00de,
-+      0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x7007, 0x0001,
-+      0x6a44, 0xa282, 0x0004, 0x1a04, 0x63ac, 0xd284, 0x0170, 0x6a4c,
-+      0xa290, 0xb635, 0x2204, 0xa065, 0x6004, 0x05e0, 0x8007, 0xa084,
-+      0x00ff, 0xa084, 0x0006, 0x1108, 0x04a8, 0x2c10, 0x080c, 0x85c7,
-+      0x1118, 0x080c, 0x9ed6, 0x05a0, 0x621a, 0x6844, 0x0002, 0x638b,
-+      0x6390, 0x6393, 0x6399, 0x2019, 0x0002, 0x080c, 0xb065, 0x0060,
-+      0x080c, 0xaffc, 0x0048, 0x2019, 0x0002, 0x6950, 0x080c, 0xb017,
-+      0x0018, 0x6950, 0x080c, 0xaffc, 0x080c, 0x861d, 0x6857, 0x0000,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x5408, 0x012e, 0x001e, 0x002e,
-+      0x003e, 0x00ce, 0x00de, 0x0005, 0x6857, 0x0006, 0x0c88, 0x6857,
-+      0x0002, 0x0c70, 0x6857, 0x0005, 0x0c58, 0x6857, 0x0004, 0x0c40,
-+      0x6857, 0x0007, 0x0c28, 0x00d6, 0x2011, 0x0004, 0x2204, 0xa085,
-+      0x8002, 0x2012, 0x00de, 0x0005, 0x20e1, 0x0002, 0x3d08, 0x20e1,
-+      0x2000, 0x3d00, 0xa084, 0x7000, 0x0118, 0xa086, 0x1000, 0x1570,
-+      0x20e1, 0x0000, 0x3d00, 0xa094, 0xff00, 0x8217, 0xa084, 0xf000,
-+      0xa086, 0x3000, 0x1160, 0xa184, 0xff00, 0x8007, 0xa086, 0x0008,
-+      0x11e8, 0x080c, 0x2dbf, 0x11d0, 0x080c, 0x6603, 0x0098, 0x20e1,
-+      0x0004, 0x3d60, 0xd1bc, 0x1108, 0x3e60, 0xac84, 0x0007, 0x1170,
-+      0xac82, 0xbd00, 0x0258, 0x685c, 0xac02, 0x1240, 0x2009, 0x0047,
-+      0x080c, 0x864c, 0x7a1c, 0xd284, 0x1938, 0x0005, 0xa016, 0x080c,
-+      0x185e, 0x0cc0, 0x0cd8, 0x781c, 0xd08c, 0x0500, 0x0156, 0x0136,
-+      0x0146, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0076, 0x1538,
-+      0xa484, 0x7000, 0xa086, 0x1000, 0x11a8, 0x080c, 0x647e, 0x01f8,
-+      0x20e1, 0x3000, 0x7828, 0x7828, 0x080c, 0x649a, 0x014e, 0x013e,
-+      0x015e, 0x2009, 0xb7e8, 0x2104, 0xa005, 0x1108, 0x0005, 0x080c,
-+      0x7173, 0x0ce0, 0xa484, 0x7000, 0x1548, 0x080c, 0x647e, 0x01d8,
-+      0x7000, 0xa084, 0xff00, 0xa086, 0x8100, 0x0d10, 0x00a0, 0xd5a4,
-+      0x0178, 0x0056, 0x0046, 0x080c, 0x1e6e, 0x080c, 0x24b0, 0x2001,
-+      0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x004e, 0x005e, 0x0048,
-+      0x04a9, 0x6887, 0x0000, 0x080c, 0xb3df, 0x20e1, 0x3000, 0x7828,
-+      0x7828, 0x00b9, 0x014e, 0x013e, 0x015e, 0x0880, 0x0439, 0x1130,
-+      0x7000, 0xa084, 0xff00, 0xa086, 0x8100, 0x1d68, 0x080c, 0xb3df,
-+      0x20e1, 0x3000, 0x7828, 0x7828, 0x0056, 0x080c, 0x6874, 0x005e,
-+      0x0c40, 0x2001, 0xb50e, 0x2004, 0xd08c, 0x0178, 0x2001, 0xb500,
-+      0x2004, 0xa086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011, 0x8048,
-+      0x2518, 0x080c, 0x3ecc, 0x003e, 0x002e, 0x0005, 0xa484, 0x01ff,
-+      0x6886, 0xa005, 0x0160, 0xa080, 0x001f, 0xa084, 0x03f8, 0x80ac,
-+      0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x0005, 0x20a9,
-+      0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0xa085,
-+      0x0001, 0x0ca0, 0x7000, 0xa084, 0xff00, 0xa08c, 0xf000, 0x8007,
-+      0xa196, 0x0000, 0x1118, 0x0804, 0x6708, 0x0005, 0xa196, 0x2000,
-+      0x1148, 0x6900, 0xa18e, 0x0001, 0x1118, 0x080c, 0x448f, 0x0ca8,
-+      0x0039, 0x0c98, 0xa196, 0x8000, 0x1d80, 0x080c, 0x67b4, 0x0c68,
-+      0x00c6, 0x6a84, 0x82ff, 0x0904, 0x65fd, 0x7110, 0xa18c, 0xff00,
-+      0x810f, 0xa196, 0x0001, 0x0120, 0xa196, 0x0023, 0x1904, 0x65fd,
-+      0xa08e, 0x0023, 0x1570, 0x080c, 0x684f, 0x0904, 0x65fd, 0x7124,
-+      0x610a, 0x7030, 0xa08e, 0x0200, 0x1150, 0x7034, 0xa005, 0x1904,
-+      0x65fd, 0x2009, 0x0015, 0x080c, 0x864c, 0x0804, 0x65fd, 0xa08e,
-+      0x0214, 0x0118, 0xa08e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c,
-+      0x864c, 0x0804, 0x65fd, 0xa08e, 0x0100, 0x1904, 0x65fd, 0x7034,
-+      0xa005, 0x1904, 0x65fd, 0x2009, 0x0016, 0x080c, 0x864c, 0x0804,
-+      0x65fd, 0xa08e, 0x0022, 0x1904, 0x65fd, 0x7030, 0xa08e, 0x0300,
-+      0x1580, 0x68d4, 0xd0a4, 0x0528, 0xc0b5, 0x68d6, 0x7100, 0xa18c,
-+      0x00ff, 0x6972, 0x7004, 0x6876, 0x00f6, 0x2079, 0x0100, 0x79e6,
-+      0x78ea, 0x0006, 0xa084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x2847,
-+      0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x281d, 0x6952,
-+      0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0xb500, 0x70a6,
-+      0x00ee, 0x7034, 0xa005, 0x1904, 0x65fd, 0x2009, 0x0017, 0x0804,
-+      0x65c3, 0xa08e, 0x0400, 0x1158, 0x7034, 0xa005, 0x1904, 0x65fd,
-+      0x68d4, 0xc0a5, 0x68d6, 0x2009, 0x0030, 0x0804, 0x65c3, 0xa08e,
-+      0x0500, 0x1140, 0x7034, 0xa005, 0x1904, 0x65fd, 0x2009, 0x0018,
-+      0x0804, 0x65c3, 0xa08e, 0x2010, 0x1120, 0x2009, 0x0019, 0x0804,
-+      0x65c3, 0xa08e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804, 0x65c3,
-+      0xa08e, 0x5200, 0x1140, 0x7034, 0xa005, 0x1904, 0x65fd, 0x2009,
-+      0x001b, 0x0804, 0x65c3, 0xa08e, 0x5000, 0x1140, 0x7034, 0xa005,
-+      0x1904, 0x65fd, 0x2009, 0x001c, 0x0804, 0x65c3, 0xa08e, 0x1300,
-+      0x1120, 0x2009, 0x0034, 0x0804, 0x65c3, 0xa08e, 0x1200, 0x1140,
-+      0x7034, 0xa005, 0x1904, 0x65fd, 0x2009, 0x0024, 0x0804, 0x65c3,
-+      0xa08c, 0xff00, 0xa18e, 0x2400, 0x1118, 0x2009, 0x002d, 0x04d8,
-+      0xa08c, 0xff00, 0xa18e, 0x5300, 0x1118, 0x2009, 0x002a, 0x0498,
-+      0xa08e, 0x0f00, 0x1118, 0x2009, 0x0020, 0x0468, 0xa08e, 0x5300,
-+      0x1108, 0x00d8, 0xa08e, 0x6104, 0x11c0, 0x2011, 0xbb8d, 0x8208,
-+      0x2204, 0xa082, 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011, 0x8015,
-+      0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x3ecc, 0x004e, 0x8108,
-+      0x1f04, 0x65a6, 0x2009, 0x0023, 0x0070, 0xa08e, 0x6000, 0x1118,
-+      0x2009, 0x003f, 0x0040, 0xa08e, 0x7800, 0x1118, 0x2009, 0x0045,
-+      0x0010, 0x2009, 0x001d, 0x0016, 0x2011, 0xbb83, 0x2204, 0x8211,
-+      0x220c, 0x080c, 0x281d, 0x1598, 0x080c, 0x4f4d, 0x1580, 0x6612,
-+      0x6516, 0x86ff, 0x01e8, 0x001e, 0x0016, 0xa186, 0x0017, 0x1158,
-+      0x6870, 0xa606, 0x11a8, 0x6874, 0xa506, 0xa084, 0xff00, 0x1180,
-+      0x6000, 0xc0f5, 0x6002, 0xa186, 0x0046, 0x1150, 0x6870, 0xa606,
-+      0x1138, 0x6874, 0xa506, 0xa084, 0xff00, 0x1110, 0x001e, 0x0068,
-+      0x00c6, 0x080c, 0x85c7, 0x0168, 0x001e, 0x611a, 0x601f, 0x0004,
-+      0x7120, 0x610a, 0x001e, 0x080c, 0x864c, 0x00ce, 0x0005, 0x001e,
-+      0x0ce0, 0x00ce, 0x0ce0, 0x00c6, 0x0046, 0x080c, 0x6657, 0x1904,
-+      0x6654, 0xa28e, 0x0033, 0x11e8, 0x080c, 0x684f, 0x0904, 0x6654,
-+      0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x1140, 0x7034, 0xa005,
-+      0x15d8, 0x2009, 0x0015, 0x080c, 0x864c, 0x04b0, 0xa08e, 0x0100,
-+      0x1598, 0x7034, 0xa005, 0x1580, 0x2009, 0x0016, 0x080c, 0x864c,
-+      0x0458, 0xa28e, 0x0032, 0x1540, 0x7030, 0xa08e, 0x1400, 0x1520,
-+      0x2009, 0x0038, 0x0016, 0x2011, 0xbb83, 0x2204, 0x8211, 0x220c,
-+      0x080c, 0x281d, 0x11c0, 0x080c, 0x4f4d, 0x11a8, 0x6612, 0x6516,
-+      0x00c6, 0x080c, 0x85c7, 0x0170, 0x001e, 0x611a, 0x080c, 0xa027,
-+      0x601f, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x864c, 0x080c,
-+      0x7173, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x0005, 0x00f6,
-+      0x00d6, 0x0026, 0x0016, 0x0136, 0x0146, 0x0156, 0x3c00, 0x0006,
-+      0x2079, 0x0030, 0x2069, 0x0200, 0x080c, 0x1f2d, 0x1590, 0x080c,
-+      0x1dd2, 0x05e0, 0x04f1, 0x1130, 0x7908, 0xa18c, 0x1fff, 0xa182,
-+      0x0011, 0x1688, 0x20a9, 0x000c, 0x20e1, 0x0000, 0x2ea0, 0x2099,
-+      0x020a, 0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, 0x7a0c,
-+      0x7808, 0xa080, 0x0007, 0xa084, 0x1ff8, 0x0419, 0x1120, 0xa08a,
-+      0x0140, 0x1a0c, 0x1515, 0x80ac, 0x20e1, 0x6000, 0x2099, 0x020a,
-+      0x53a5, 0x20e1, 0x7000, 0x6828, 0x6828, 0x7803, 0x0004, 0xa294,
-+      0x0070, 0x000e, 0x20e0, 0x015e, 0x014e, 0x013e, 0x001e, 0x002e,
-+      0x00de, 0x00fe, 0x0005, 0xa016, 0x080c, 0x185e, 0xa085, 0x0001,
-+      0x0c80, 0x0006, 0x2001, 0x0111, 0x2004, 0xa084, 0x0003, 0x000e,
-+      0x0005, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0xa696, 0x00ff,
-+      0x1198, 0xa596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804, 0x6703,
-+      0xa596, 0xfffe, 0x1118, 0x2009, 0x007e, 0x04e8, 0xa596, 0xfffc,
-+      0x1118, 0x2009, 0x0080, 0x04b8, 0x2011, 0x0000, 0x2019, 0xb535,
-+      0x231c, 0xd3ac, 0x0138, 0x2021, 0x0000, 0x20a9, 0x00ff, 0x2071,
-+      0xb635, 0x0030, 0x2021, 0x0081, 0x20a9, 0x007e, 0x2071, 0xb6b6,
-+      0x2e1c, 0x83ff, 0x1128, 0x82ff, 0x1198, 0x2410, 0xc2fd, 0x0080,
-+      0x2368, 0x6f10, 0x0006, 0x2100, 0xa706, 0x000e, 0x6b14, 0x1120,
-+      0xa346, 0x1110, 0x2408, 0x0078, 0x87ff, 0x1110, 0x83ff, 0x0d58,
-+      0x8420, 0x8e70, 0x1f04, 0x66e0, 0x82ff, 0x1118, 0xa085, 0x0001,
-+      0x0018, 0xc2fc, 0x2208, 0xa006, 0x00de, 0x00ee, 0x004e, 0x0005,
-+      0xa084, 0x0007, 0x000a, 0x0005, 0x6714, 0x6714, 0x6714, 0x6861,
-+      0x6714, 0x6715, 0x672a, 0x679f, 0x0005, 0x7110, 0xd1bc, 0x0188,
-+      0x7120, 0x2160, 0xac8c, 0x0007, 0x1160, 0xac8a, 0xbd00, 0x0248,
-+      0x685c, 0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0046, 0x080c,
-+      0x864c, 0x0005, 0x00c6, 0xa484, 0x01ff, 0x0904, 0x677d, 0x7110,
-+      0xd1bc, 0x1904, 0x677d, 0x2011, 0xbb83, 0x2204, 0x8211, 0x220c,
-+      0x080c, 0x281d, 0x1904, 0x677d, 0x080c, 0x4f4d, 0x15f0, 0x6612,
-+      0x6516, 0x6000, 0xd0ec, 0x15c8, 0x6204, 0xa294, 0xff00, 0x8217,
-+      0xa286, 0x0006, 0x0148, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006,
-+      0x11a0, 0xa295, 0x0600, 0x6206, 0x00c6, 0x080c, 0x85c7, 0x001e,
-+      0x0530, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x7130, 0x6152,
-+      0x2009, 0x0044, 0x080c, 0x864c, 0x00c0, 0x00c6, 0x080c, 0x85c7,
-+      0x001e, 0x0198, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286,
-+      0x0004, 0x1118, 0x6007, 0x0005, 0x0010, 0x6007, 0x0001, 0x6003,
-+      0x0001, 0x080c, 0x6cd3, 0x080c, 0x7173, 0x00ce, 0x0005, 0x2001,
-+      0xb50d, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x3ecc,
-+      0x00c6, 0x080c, 0x9ed6, 0x001e, 0x0d80, 0x611a, 0x601f, 0x0006,
-+      0x7120, 0x610a, 0x7130, 0x6152, 0x6013, 0x0300, 0x6003, 0x0001,
-+      0x6007, 0x0041, 0x080c, 0x6c8d, 0x080c, 0x7173, 0x08f0, 0x7110,
-+      0xd1bc, 0x0188, 0x7020, 0x2060, 0xac84, 0x0007, 0x1160, 0xac82,
-+      0xbd00, 0x0248, 0x685c, 0xac02, 0x1230, 0x7124, 0x610a, 0x2009,
-+      0x0045, 0x080c, 0x864c, 0x0005, 0x0006, 0x080c, 0x2dbf, 0x000e,
-+      0x1168, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x1130,
-+      0xa084, 0x000f, 0xa08a, 0x0006, 0x1208, 0x000b, 0x0005, 0x67cd,
-+      0x67ce, 0x67cd, 0x67cd, 0x6837, 0x6843, 0x0005, 0x7110, 0xd1bc,
-+      0x0120, 0x702c, 0xd084, 0x0904, 0x6836, 0x700c, 0x7108, 0x080c,
-+      0x281d, 0x1904, 0x6836, 0x080c, 0x4f4d, 0x1904, 0x6836, 0x6612,
-+      0x6516, 0x6204, 0x7110, 0xd1bc, 0x01f8, 0xa28c, 0x00ff, 0xa186,
-+      0x0004, 0x0118, 0xa186, 0x0006, 0x15c8, 0x00c6, 0x080c, 0x684f,
-+      0x00ce, 0x0904, 0x6836, 0x00c6, 0x080c, 0x85c7, 0x001e, 0x05f0,
-+      0x611a, 0x080c, 0xa027, 0x601f, 0x0002, 0x7120, 0x610a, 0x2009,
-+      0x0088, 0x080c, 0x864c, 0x0490, 0xa28c, 0x00ff, 0xa186, 0x0006,
-+      0x0160, 0xa186, 0x0004, 0x0148, 0xa294, 0xff00, 0x8217, 0xa286,
-+      0x0004, 0x0118, 0xa286, 0x0006, 0x1188, 0x00c6, 0x080c, 0x85c7,
-+      0x001e, 0x01e0, 0x611a, 0x080c, 0xa027, 0x601f, 0x0005, 0x7120,
-+      0x610a, 0x2009, 0x0088, 0x080c, 0x864c, 0x0080, 0x00c6, 0x080c,
-+      0x85c7, 0x001e, 0x0158, 0x611a, 0x080c, 0xa027, 0x601f, 0x0004,
-+      0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x864c, 0x0005, 0x7110,
-+      0xd1bc, 0x0140, 0x00a1, 0x0130, 0x7124, 0x610a, 0x2009, 0x0089,
-+      0x080c, 0x864c, 0x0005, 0x7110, 0xd1bc, 0x0140, 0x0041, 0x0130,
-+      0x7124, 0x610a, 0x2009, 0x008a, 0x080c, 0x864c, 0x0005, 0x7020,
-+      0x2060, 0xac84, 0x0007, 0x1158, 0xac82, 0xbd00, 0x0240, 0x2001,
-+      0xb517, 0x2004, 0xac02, 0x1218, 0xa085, 0x0001, 0x0005, 0xa006,
-+      0x0ce8, 0x7110, 0xd1bc, 0x1178, 0x7024, 0x2060, 0xac84, 0x0007,
-+      0x1150, 0xac82, 0xbd00, 0x0238, 0x685c, 0xac02, 0x1220, 0x2009,
-+      0x0051, 0x080c, 0x864c, 0x0005, 0x2031, 0x0105, 0x0069, 0x0005,
-+      0x2031, 0x0206, 0x0049, 0x0005, 0x2031, 0x0207, 0x0029, 0x0005,
-+      0x2031, 0x0213, 0x0009, 0x0005, 0x00c6, 0x00d6, 0x00f6, 0x7000,
-+      0xa084, 0xf000, 0xa086, 0xc000, 0x05b0, 0x080c, 0x85c7, 0x0598,
-+      0x0066, 0x00c6, 0x0046, 0x2011, 0xbb83, 0x2204, 0x8211, 0x220c,
-+      0x080c, 0x281d, 0x1580, 0x080c, 0x4f4d, 0x1568, 0x6612, 0x6516,
-+      0x2c00, 0x004e, 0x00ce, 0x601a, 0x080c, 0xa027, 0x080c, 0x15f8,
-+      0x01f0, 0x2d00, 0x6056, 0x6803, 0x0000, 0x6837, 0x0000, 0x6c3a,
-+      0xadf8, 0x000f, 0x20a9, 0x000e, 0x2fa0, 0x2e98, 0x53a3, 0x006e,
-+      0x6612, 0x6007, 0x003e, 0x601f, 0x0001, 0x6003, 0x0001, 0x080c,
-+      0x6cd3, 0x080c, 0x7173, 0x00fe, 0x00de, 0x00ce, 0x0005, 0x080c,
-+      0x861d, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x2071, 0xb7f3,
-+      0x7003, 0x0003, 0x700f, 0x0361, 0xa006, 0x701a, 0x7076, 0x7012,
-+      0x7017, 0xbd00, 0x7007, 0x0000, 0x7026, 0x702b, 0x7d91, 0x7032,
-+      0x7037, 0x7df1, 0x703b, 0xffff, 0x703f, 0xffff, 0x7042, 0x7047,
-+      0x444b, 0x704a, 0x705b, 0x6a2b, 0x2001, 0xb7a1, 0x2003, 0x0003,
-+      0x2001, 0xb7a3, 0x2003, 0x0100, 0x3a00, 0xa084, 0x0005, 0x706e,
-+      0x0005, 0x2071, 0xb7f3, 0x1d04, 0x698b, 0x2091, 0x6000, 0x700c,
-+      0x8001, 0x700e, 0x1518, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126,
-+      0x2091, 0x8000, 0x7040, 0xa00d, 0x0128, 0x8109, 0x7142, 0x1110,
-+      0x7044, 0x080f, 0x00c6, 0x2061, 0xb500, 0x6034, 0x00ce, 0xd0cc,
-+      0x0180, 0x3a00, 0xa084, 0x0005, 0x726c, 0xa216, 0x0150, 0x706e,
-+      0x2011, 0x8043, 0x2018, 0x080c, 0x3ecc, 0x0018, 0x0126, 0x2091,
-+      0x8000, 0x7024, 0xa00d, 0x0188, 0x7020, 0x8001, 0x7022, 0x1168,
-+      0x7023, 0x0009, 0x8109, 0x7126, 0xa186, 0x03e8, 0x1110, 0x7028,
-+      0x080f, 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030, 0xa00d, 0x0180,
-+      0x702c, 0x8001, 0x702e, 0x1160, 0x702f, 0x0009, 0x8109, 0x7132,
-+      0x0128, 0xa184, 0x007f, 0x090c, 0x7e36, 0x0010, 0x7034, 0x080f,
-+      0x7038, 0xa005, 0x0118, 0x0310, 0x8001, 0x703a, 0x703c, 0xa005,
-+      0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0xa00d, 0x0168, 0x7048,
-+      0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109, 0x714e, 0x1120,
-+      0x7150, 0x714e, 0x7058, 0x080f, 0x7018, 0xa00d, 0x01d8, 0x0016,
-+      0x7074, 0xa00d, 0x0158, 0x7070, 0x8001, 0x7072, 0x1138, 0x7073,
-+      0x0009, 0x8109, 0x7176, 0x1110, 0x7078, 0x080f, 0x001e, 0x7008,
-+      0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110,
-+      0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x69b1, 0x69b2, 0x69ca,
-+      0x00e6, 0x2071, 0xb7f3, 0x7018, 0xa005, 0x1120, 0x711a, 0x721e,
-+      0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0xb7f3,
-+      0x701c, 0xa206, 0x1110, 0x701a, 0x701e, 0x000e, 0x00ee, 0x0005,
-+      0x00e6, 0x2071, 0xb7f3, 0x6088, 0xa102, 0x0208, 0x618a, 0x00ee,
-+      0x0005, 0x0005, 0x7110, 0x080c, 0x4fa9, 0x1158, 0x6088, 0x8001,
-+      0x0240, 0x608a, 0x1130, 0x0126, 0x2091, 0x8000, 0x080c, 0x7173,
-+      0x012e, 0x8108, 0xa182, 0x00ff, 0x0218, 0xa00e, 0x7007, 0x0002,
-+      0x7112, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x603c,
-+      0xa005, 0x0128, 0x8001, 0x603e, 0x1110, 0x080c, 0x9f15, 0x6014,
-+      0xa005, 0x0500, 0x8001, 0x6016, 0x11e8, 0x611c, 0xa186, 0x0003,
-+      0x0118, 0xa186, 0x0006, 0x11a0, 0x6010, 0x2068, 0x6854, 0xa08a,
-+      0x199a, 0x0270, 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, 0x0210,
-+      0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x0010,
-+      0x080c, 0x99e5, 0x012e, 0xac88, 0x0018, 0x7116, 0x2001, 0xed00,
-+      0xa102, 0x0220, 0x7017, 0xbd00, 0x7007, 0x0000, 0x0005, 0x00e6,
-+      0x2071, 0xb7f3, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005,
-+      0x2001, 0xb7fc, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0xb7f3,
-+      0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0xb7ff, 0x2013,
-+      0x0000, 0x0005, 0x00e6, 0x2071, 0xb7f3, 0x711a, 0x721e, 0x700b,
-+      0x0009, 0x00ee, 0x0005, 0x00c6, 0x0026, 0x7054, 0x8000, 0x7056,
-+      0x2061, 0xb7a1, 0x6008, 0xa086, 0x0000, 0x0158, 0x7068, 0x6032,
-+      0x7064, 0x602e, 0x7060, 0x602a, 0x705c, 0x6026, 0x2c10, 0x080c,
-+      0x1643, 0x002e, 0x00ce, 0x0005, 0x0006, 0x0016, 0x00c6, 0x00d6,
-+      0x00e6, 0x00f6, 0x080c, 0x68f9, 0x00fe, 0x00ee, 0x00de, 0x00ce,
-+      0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0xb7f3, 0x7176, 0x727a,
-+      0x7073, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0xb7f3,
-+      0x7078, 0xa206, 0x1110, 0x7076, 0x707a, 0x000e, 0x00ee, 0x0005,
-+      0x00c6, 0x2061, 0xb874, 0x00ce, 0x0005, 0xa184, 0x000f, 0x8003,
-+      0x8003, 0x8003, 0xa080, 0xb874, 0x2060, 0x0005, 0x6854, 0xa08a,
-+      0x199a, 0x0210, 0x2001, 0x1999, 0xa005, 0x1150, 0x00c6, 0x2061,
-+      0xb874, 0x6014, 0x00ce, 0xa005, 0x1138, 0x2001, 0x001e, 0x0020,
-+      0xa08e, 0xffff, 0x1108, 0xa006, 0x8003, 0x800b, 0x810b, 0xa108,
-+      0x6116, 0x684c, 0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x05e8, 0xd0b4,
-+      0x1138, 0xd0bc, 0x1550, 0x2009, 0x0006, 0x080c, 0x6af1, 0x0005,
-+      0xd0fc, 0x0138, 0xa084, 0x0003, 0x0120, 0xa086, 0x0003, 0x1904,
-+      0x6aeb, 0x6020, 0xd0d4, 0x0130, 0xc0d4, 0x6022, 0x6860, 0x602a,
-+      0x685c, 0x602e, 0x2009, 0xb574, 0x2104, 0xd084, 0x0138, 0x87ff,
-+      0x1120, 0x2009, 0x0042, 0x080c, 0x864c, 0x0005, 0x87ff, 0x1120,
-+      0x2009, 0x0043, 0x080c, 0x864c, 0x0005, 0xd0fc, 0x0130, 0xa084,
-+      0x0003, 0x0118, 0xa086, 0x0003, 0x11f0, 0x87ff, 0x1120, 0x2009,
-+      0x0042, 0x080c, 0x864c, 0x0005, 0xd0fc, 0x0160, 0xa084, 0x0003,
-+      0xa08e, 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c,
-+      0x864c, 0x0005, 0x0061, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043,
-+      0x080c, 0x864c, 0x0cb0, 0x2009, 0x0004, 0x0019, 0x0005, 0x2009,
-+      0x0001, 0x00d6, 0x6010, 0xa0ec, 0xf000, 0x0510, 0x2068, 0x6952,
-+      0x6800, 0x6012, 0xa186, 0x0001, 0x1188, 0x694c, 0xa18c, 0x8100,
-+      0xa18e, 0x8100, 0x1158, 0x00c6, 0x2061, 0xb874, 0x6200, 0xd28c,
-+      0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c, 0x5408,
-+      0x6010, 0xa06d, 0x0076, 0x2039, 0x0000, 0x190c, 0x6a76, 0x007e,
-+      0x00de, 0x0005, 0x0156, 0x00c6, 0x2061, 0xb874, 0x6000, 0x81ff,
-+      0x0110, 0xa205, 0x0008, 0xa204, 0x6002, 0x00ce, 0x015e, 0x0005,
-+      0x6800, 0xd08c, 0x1138, 0x6808, 0xa005, 0x0120, 0x8001, 0x680a,
-+      0xa085, 0x0001, 0x0005, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086,
-+      0x818e, 0x1208, 0xa200, 0x1f04, 0x6b37, 0x8086, 0x818e, 0x0005,
-+      0x0156, 0x20a9, 0x0010, 0xa005, 0x01b8, 0xa11a, 0x12a8, 0x8213,
-+      0x818d, 0x0228, 0xa11a, 0x1220, 0x1f04, 0x6b47, 0x0028, 0xa11a,
-+      0x2308, 0x8210, 0x1f04, 0x6b47, 0x0006, 0x3200, 0xa084, 0xefff,
-+      0x2080, 0x000e, 0x015e, 0x0005, 0x0006, 0x3200, 0xa085, 0x1000,
-+      0x0cb8, 0x0126, 0x2091, 0x2800, 0x2079, 0xb7e0, 0x012e, 0x00d6,
-+      0x2069, 0xb7e0, 0x6803, 0x0005, 0x2069, 0x0004, 0x2d04, 0xa085,
-+      0x8001, 0x206a, 0x00de, 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804,
-+      0xa084, 0x0007, 0x0002, 0x6b85, 0x6ba6, 0x6bf9, 0x6b8b, 0x6ba6,
-+      0x6b85, 0x6b83, 0x6b83, 0x080c, 0x1515, 0x080c, 0x6a10, 0x080c,
-+      0x7173, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005,
-+      0x2011, 0x4adc, 0x080c, 0x699c, 0x7828, 0xa092, 0x00c8, 0x1228,
-+      0x8000, 0x782a, 0x080c, 0x4b16, 0x0c88, 0x080c, 0x4adc, 0x7807,
-+      0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c40, 0x080c, 0x6a10,
-+      0x3c00, 0x0006, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214, 0x000e,
-+      0x20e0, 0x82ff, 0x0178, 0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000,
-+      0x7824, 0xa065, 0x090c, 0x1515, 0x2009, 0x0013, 0x080c, 0x864c,
-+      0x00ce, 0x0005, 0x3900, 0xa082, 0xb92c, 0x1210, 0x080c, 0x8332,
-+      0x00c6, 0x7824, 0xa065, 0x090c, 0x1515, 0x7804, 0xa086, 0x0004,
-+      0x0904, 0x6c39, 0x7828, 0xa092, 0x2710, 0x1230, 0x8000, 0x782a,
-+      0x00ce, 0x080c, 0x7d6d, 0x0c20, 0x6104, 0xa186, 0x0003, 0x1188,
-+      0x00e6, 0x2071, 0xb500, 0x70e0, 0x00ee, 0xd08c, 0x0150, 0x00c6,
-+      0x00e6, 0x2061, 0x0100, 0x2071, 0xb500, 0x080c, 0x4b1f, 0x00ee,
-+      0x00ce, 0x080c, 0xb444, 0x2009, 0x0014, 0x080c, 0x864c, 0x00ce,
-+      0x0838, 0x2001, 0xb7fc, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160,
-+      0x782b, 0x0000, 0x7824, 0xa065, 0x090c, 0x1515, 0x2009, 0x0013,
-+      0x080c, 0x86a0, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x3900, 0xa082,
-+      0xb92c, 0x1210, 0x080c, 0x8332, 0x7824, 0xa005, 0x090c, 0x1515,
-+      0x781c, 0xa06d, 0x090c, 0x1515, 0x6800, 0xc0dc, 0x6802, 0x7924,
-+      0x2160, 0x080c, 0x861d, 0x693c, 0x81ff, 0x090c, 0x1515, 0x8109,
-+      0x693e, 0x6854, 0xa015, 0x0110, 0x7a1e, 0x0010, 0x7918, 0x791e,
-+      0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce, 0x080c, 0x7173,
-+      0x0888, 0x6104, 0xa186, 0x0002, 0x0128, 0xa186, 0x0004, 0x0110,
-+      0x0804, 0x6bd2, 0x7808, 0xac06, 0x0904, 0x6bd2, 0x080c, 0x7090,
-+      0x080c, 0x6cd3, 0x00ce, 0x080c, 0x7173, 0x0804, 0x6bc0, 0x00c6,
-+      0x6027, 0x0002, 0x62c8, 0x60c4, 0xa205, 0x1178, 0x793c, 0xa1e5,
-+      0x0000, 0x0130, 0x2009, 0x0049, 0x080c, 0x864c, 0x00ce, 0x0005,
-+      0x2011, 0xb7ff, 0x2013, 0x0000, 0x0cc8, 0x3908, 0xa192, 0xb92c,
-+      0x1210, 0x080c, 0x8332, 0x793c, 0x81ff, 0x0d90, 0x7944, 0xa192,
-+      0x7530, 0x12b8, 0x8108, 0x7946, 0x793c, 0xa188, 0x0007, 0x210c,
-+      0xa18e, 0x0006, 0x1138, 0x6014, 0xa084, 0x0184, 0xa085, 0x0012,
-+      0x6016, 0x08e0, 0x6014, 0xa084, 0x0184, 0xa085, 0x0016, 0x6016,
-+      0x08a8, 0x7848, 0xc085, 0x784a, 0x0888, 0x0006, 0x0016, 0x00c6,
-+      0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0xb7e0,
-+      0x6020, 0x8000, 0x6022, 0x6010, 0xa005, 0x0148, 0xa080, 0x0003,
-+      0x2102, 0x6112, 0x012e, 0x00ce, 0x001e, 0x000e, 0x0005, 0x6116,
-+      0x6112, 0x0cc0, 0x00d6, 0x2069, 0xb7e0, 0x6000, 0xd0d4, 0x0168,
-+      0x6820, 0x8000, 0x6822, 0xa086, 0x0001, 0x1110, 0x2c00, 0x681e,
-+      0x6804, 0xa084, 0x0007, 0x0804, 0x7179, 0xc0d5, 0x6002, 0x6818,
-+      0xa005, 0x0158, 0x6056, 0x605b, 0x0000, 0x0006, 0x2c00, 0x681a,
-+      0x00de, 0x685a, 0x2069, 0xb7e0, 0x0c18, 0x6056, 0x605a, 0x2c00,
-+      0x681a, 0x681e, 0x08e8, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091,
-+      0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0xb7e0, 0x6020, 0x8000,
-+      0x6022, 0x6008, 0xa005, 0x0148, 0xa080, 0x0003, 0x2102, 0x610a,
-+      0x012e, 0x00ce, 0x001e, 0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0,
-+      0x00c6, 0x600f, 0x0000, 0x2c08, 0x2061, 0xb7e0, 0x6034, 0xa005,
-+      0x0130, 0xa080, 0x0003, 0x2102, 0x6136, 0x00ce, 0x0005, 0x613a,
-+      0x6136, 0x0cd8, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066,
-+      0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0xa02e, 0x2071,
-+      0xb7e0, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904,
-+      0x6d7b, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x1904, 0x6d76,
-+      0x87ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x6d76, 0x703c, 0xac06,
-+      0x1190, 0x0036, 0x2019, 0x0001, 0x080c, 0x7fe4, 0x7033, 0x0000,
-+      0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b, 0x0000,
-+      0x003e, 0x2029, 0x0001, 0x7038, 0xac36, 0x1110, 0x660c, 0x763a,
-+      0x7034, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036,
-+      0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110,
-+      0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0x9c5a, 0x01c8,
-+      0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x1580, 0x6837, 0x0103,
-+      0x6b4a, 0x6847, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c, 0x9ecc,
-+      0x080c, 0xb380, 0x080c, 0x5408, 0x007e, 0x003e, 0x001e, 0x080c,
-+      0x9e11, 0x080c, 0x9e1d, 0x00ce, 0x0804, 0x6d16, 0x2c78, 0x600c,
-+      0x2060, 0x0804, 0x6d16, 0x85ff, 0x0120, 0x0036, 0x080c, 0x7230,
-+      0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e, 0x006e,
-+      0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086,
-+      0x0006, 0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xb380, 0x080c,
-+      0xb099, 0x007e, 0x003e, 0x001e, 0x08a0, 0x601c, 0xa086, 0x000a,
-+      0x0904, 0x6d60, 0x0804, 0x6d5e, 0x0006, 0x0066, 0x00c6, 0x00d6,
-+      0x00f6, 0x2031, 0x0000, 0x0126, 0x2091, 0x8000, 0x2079, 0xb7e0,
-+      0x7838, 0xa065, 0x0568, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c,
-+      0xac06, 0x1180, 0x0036, 0x2019, 0x0001, 0x080c, 0x7fe4, 0x7833,
-+      0x0000, 0x783f, 0x0000, 0x7843, 0x0000, 0x7847, 0x0000, 0x784b,
-+      0x0000, 0x003e, 0x080c, 0x9c5a, 0x0178, 0x6010, 0x2068, 0x601c,
-+      0xa086, 0x0003, 0x11b0, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+      0x080c, 0x5408, 0x080c, 0x9e11, 0x080c, 0x9e1d, 0x000e, 0x0888,
-+      0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce, 0x006e, 0x000e,
-+      0x0005, 0x601c, 0xa086, 0x0006, 0x1118, 0x080c, 0xb099, 0x0c60,
-+      0x601c, 0xa086, 0x000a, 0x0d08, 0x08f0, 0x0016, 0x0026, 0x0086,
-+      0x2041, 0x0000, 0x0099, 0x080c, 0x6ec3, 0x008e, 0x002e, 0x001e,
-+      0x0005, 0x00f6, 0x0126, 0x2079, 0xb7e0, 0x2091, 0x8000, 0x080c,
-+      0x6f50, 0x080c, 0x6fc2, 0x012e, 0x00fe, 0x0005, 0x00f6, 0x00e6,
-+      0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000,
-+      0x2071, 0xb7e0, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x6e99,
-+      0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x1904, 0x6e94, 0x88ff,
-+      0x0120, 0x6050, 0xa106, 0x1904, 0x6e94, 0x7024, 0xac06, 0x1538,
-+      0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c, 0x6a10, 0x080c,
-+      0x7d7a, 0x68c3, 0x0000, 0x080c, 0x824d, 0x7027, 0x0000, 0x0036,
-+      0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, 0x0100,
-+      0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
-+      0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a, 0x04e8, 0x7014,
-+      0xac36, 0x1110, 0x660c, 0x7616, 0x7010, 0xac36, 0x1140, 0x2c00,
-+      0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c,
-+      0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
-+      0x0000, 0x6010, 0x2068, 0x080c, 0x9c5a, 0x01b8, 0x601c, 0xa086,
-+      0x0003, 0x1540, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x0016,
-+      0x0036, 0x0086, 0x080c, 0x9ecc, 0x080c, 0xb380, 0x080c, 0x5408,
-+      0x008e, 0x003e, 0x001e, 0x080c, 0x9e11, 0x080c, 0x9e1d, 0x080c,
-+      0x811e, 0x00ce, 0x0804, 0x6e1d, 0x2c78, 0x600c, 0x2060, 0x0804,
-+      0x6e1d, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee,
-+      0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x1158, 0x0016, 0x0036,
-+      0x0086, 0x080c, 0xb380, 0x080c, 0xb099, 0x008e, 0x003e, 0x001e,
-+      0x08e0, 0x601c, 0xa086, 0x0002, 0x1128, 0x6004, 0xa086, 0x0085,
-+      0x0908, 0x0898, 0x601c, 0xa086, 0x0005, 0x1978, 0x6004, 0xa086,
-+      0x0085, 0x0d20, 0x0850, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000,
-+      0xa280, 0xb635, 0x2004, 0xa065, 0x0904, 0x6f4c, 0x00f6, 0x00e6,
-+      0x00d6, 0x0066, 0x2071, 0xb7e0, 0x6654, 0x7018, 0xac06, 0x1108,
-+      0x761a, 0x701c, 0xac06, 0x1130, 0x86ff, 0x1118, 0x7018, 0x701e,
-+      0x0008, 0x761e, 0x6058, 0xa07d, 0x0108, 0x7e56, 0xa6ed, 0x0000,
-+      0x0110, 0x2f00, 0x685a, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000,
-+      0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x4ed4, 0x0904, 0x6f48, 0x7624,
-+      0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004, 0xad06, 0x15c0, 0x00d6,
-+      0x2069, 0x0100, 0x68c0, 0xa005, 0x0548, 0x080c, 0x6a10, 0x080c,
-+      0x7d7a, 0x68c3, 0x0000, 0x080c, 0x824d, 0x7027, 0x0000, 0x0036,
-+      0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, 0x0100,
-+      0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
-+      0x0001, 0x003e, 0x00de, 0x00c6, 0x603c, 0xa005, 0x0110, 0x8001,
-+      0x603e, 0x2660, 0x080c, 0x9e1d, 0x00ce, 0x0048, 0x00de, 0x00c6,
-+      0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x6ef3, 0x8dff,
-+      0x0158, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x9ecc,
-+      0x080c, 0xb380, 0x080c, 0x5408, 0x080c, 0x811e, 0x0804, 0x6ef3,
-+      0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce, 0x0005,
-+      0x0006, 0x0066, 0x00c6, 0x00d6, 0x2031, 0x0000, 0x7814, 0xa065,
-+      0x0904, 0x6fa2, 0x600c, 0x0006, 0x600f, 0x0000, 0x7824, 0xac06,
-+      0x1540, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c, 0x6a10,
-+      0x080c, 0x7d7a, 0x68c3, 0x0000, 0x080c, 0x824d, 0x7827, 0x0000,
-       0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803,
-       0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
--      0x6827, 0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a, 0x04e8,
--      0x7014, 0xac36, 0x1110, 0x660c, 0x7616, 0x7010, 0xac36, 0x1140,
--      0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000,
--      0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678,
--      0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0x9c54, 0x01b8, 0x601c,
--      0xa086, 0x0003, 0x1540, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
--      0x0016, 0x0036, 0x0086, 0x080c, 0x9ec6, 0x080c, 0xb374, 0x080c,
--      0x5409, 0x008e, 0x003e, 0x001e, 0x080c, 0x9e0b, 0x080c, 0x9e17,
--      0x080c, 0x811f, 0x00ce, 0x0804, 0x6e1e, 0x2c78, 0x600c, 0x2060,
--      0x0804, 0x6e1e, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de,
--      0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x1158, 0x0016,
--      0x0036, 0x0086, 0x080c, 0xb374, 0x080c, 0xb08d, 0x008e, 0x003e,
--      0x001e, 0x08e0, 0x601c, 0xa086, 0x0002, 0x1128, 0x6004, 0xa086,
--      0x0085, 0x0908, 0x0898, 0x601c, 0xa086, 0x0005, 0x1978, 0x6004,
--      0xa086, 0x0085, 0x0d20, 0x0850, 0x00c6, 0x0006, 0x0126, 0x2091,
--      0x8000, 0xa280, 0xb635, 0x2004, 0xa065, 0x0904, 0x6f4d, 0x00f6,
--      0x00e6, 0x00d6, 0x0066, 0x2071, 0xb7e0, 0x6654, 0x7018, 0xac06,
--      0x1108, 0x761a, 0x701c, 0xac06, 0x1130, 0x86ff, 0x1118, 0x7018,
--      0x701e, 0x0008, 0x761e, 0x6058, 0xa07d, 0x0108, 0x7e56, 0xa6ed,
--      0x0000, 0x0110, 0x2f00, 0x685a, 0x6057, 0x0000, 0x605b, 0x0000,
--      0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x4ed5, 0x0904, 0x6f49,
--      0x7624, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004, 0xad06, 0x15c0,
--      0x00d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0548, 0x080c, 0x6a11,
--      0x080c, 0x7d7b, 0x68c3, 0x0000, 0x080c, 0x8247, 0x7027, 0x0000,
-+      0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009, 0x630a, 0x2c30,
-+      0x00b0, 0x6010, 0x2068, 0x080c, 0x9c5a, 0x0168, 0x601c, 0xa086,
-+      0x0003, 0x11b8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c,
-+      0x5408, 0x080c, 0x9e11, 0x080c, 0x9e1d, 0x080c, 0x811e, 0x000e,
-+      0x0804, 0x6f57, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e,
-+      0x0005, 0x601c, 0xa086, 0x0006, 0x1118, 0x080c, 0xb099, 0x0c58,
-+      0x601c, 0xa086, 0x0002, 0x1128, 0x6004, 0xa086, 0x0085, 0x09d0,
-+      0x0c10, 0x601c, 0xa086, 0x0005, 0x19f0, 0x6004, 0xa086, 0x0085,
-+      0x0d60, 0x08c8, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x7818, 0xa065,
-+      0x0904, 0x7028, 0x6054, 0x0006, 0x6057, 0x0000, 0x605b, 0x0000,
-+      0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x4ed4, 0x0904, 0x7025,
-+      0x7e24, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004, 0xad06, 0x15c0,
-+      0x00d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0548, 0x080c, 0x6a10,
-+      0x080c, 0x7d7a, 0x68c3, 0x0000, 0x080c, 0x824d, 0x7827, 0x0000,
-       0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803,
-       0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
-       0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c, 0xa005, 0x0110,
--      0x8001, 0x603e, 0x2660, 0x080c, 0x9e17, 0x00ce, 0x0048, 0x00de,
--      0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x6ef4,
--      0x8dff, 0x0158, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c,
--      0x9ec6, 0x080c, 0xb374, 0x080c, 0x5409, 0x080c, 0x811f, 0x0804,
--      0x6ef4, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce,
--      0x0005, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x2031, 0x0000, 0x7814,
--      0xa065, 0x0904, 0x6fa3, 0x600c, 0x0006, 0x600f, 0x0000, 0x7824,
--      0xac06, 0x1540, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c,
--      0x6a11, 0x080c, 0x7d7b, 0x68c3, 0x0000, 0x080c, 0x8247, 0x7827,
--      0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120,
--      0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
--      0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009, 0x630a,
--      0x2c30, 0x00b0, 0x6010, 0x2068, 0x080c, 0x9c54, 0x0168, 0x601c,
--      0xa086, 0x0003, 0x11b8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
--      0x080c, 0x5409, 0x080c, 0x9e0b, 0x080c, 0x9e17, 0x080c, 0x811f,
--      0x000e, 0x0804, 0x6f58, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e,
--      0x000e, 0x0005, 0x601c, 0xa086, 0x0006, 0x1118, 0x080c, 0xb08d,
--      0x0c58, 0x601c, 0xa086, 0x0002, 0x1128, 0x6004, 0xa086, 0x0085,
--      0x09d0, 0x0c10, 0x601c, 0xa086, 0x0005, 0x19f0, 0x6004, 0xa086,
--      0x0085, 0x0d60, 0x08c8, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x7818,
--      0xa065, 0x0904, 0x7029, 0x6054, 0x0006, 0x6057, 0x0000, 0x605b,
--      0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x4ed5, 0x0904,
--      0x7026, 0x7e24, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004, 0xad06,
--      0x15c0, 0x00d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0548, 0x080c,
--      0x6a11, 0x080c, 0x7d7b, 0x68c3, 0x0000, 0x080c, 0x8247, 0x7827,
--      0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120,
--      0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
--      0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c, 0xa005,
--      0x0110, 0x8001, 0x603e, 0x2660, 0x080c, 0x9e17, 0x00ce, 0x0048,
--      0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804,
--      0x6fd5, 0x8dff, 0x0138, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
--      0x080c, 0x5409, 0x080c, 0x811f, 0x0804, 0x6fd5, 0x000e, 0x0804,
--      0x6fc8, 0x781e, 0x781a, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005,
--      0x00e6, 0x00d6, 0x0066, 0x6000, 0xd0dc, 0x01a0, 0x604c, 0xa06d,
--      0x0188, 0x6848, 0xa606, 0x1170, 0x2071, 0xb7e0, 0x7024, 0xa035,
--      0x0148, 0xa080, 0x0004, 0x2004, 0xad06, 0x1120, 0x6000, 0xc0dc,
--      0x6002, 0x0021, 0x006e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079,
--      0x0100, 0x78c0, 0xa005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009,
--      0x630a, 0x00ce, 0x04a0, 0x080c, 0x7d7b, 0x78c3, 0x0000, 0x080c,
--      0x8247, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0xa384,
--      0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000, 0x2079, 0x0100,
--      0x7824, 0xd084, 0x0110, 0x7827, 0x0001, 0x080c, 0x8247, 0x003e,
--      0x080c, 0x4ed5, 0x00c6, 0x603c, 0xa005, 0x0110, 0x8001, 0x603e,
--      0x2660, 0x080c, 0x8617, 0x00ce, 0x6837, 0x0103, 0x6b4a, 0x6847,
--      0x0000, 0x080c, 0x9ec6, 0x080c, 0x5409, 0x080c, 0x811f, 0x00fe,
--      0x0005, 0x00e6, 0x00c6, 0x2071, 0xb7e0, 0x7004, 0xa084, 0x0007,
--      0x0002, 0x70a3, 0x70a6, 0x70bc, 0x70d5, 0x7112, 0x70a3, 0x70a1,
--      0x70a1, 0x080c, 0x1515, 0x00ce, 0x00ee, 0x0005, 0x7024, 0xa065,
--      0x0148, 0x7020, 0x8001, 0x7022, 0x600c, 0xa015, 0x0150, 0x7216,
--      0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee,
--      0x0005, 0x7216, 0x7212, 0x0cb0, 0x6018, 0x2060, 0x080c, 0x4ed5,
--      0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0120, 0x6054,
--      0xa015, 0x0140, 0x721e, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce,
--      0x00ee, 0x0005, 0x7218, 0x721e, 0x0cb0, 0x7024, 0xa065, 0x05b8,
--      0x700c, 0xac06, 0x1160, 0x080c, 0x811f, 0x600c, 0xa015, 0x0120,
--      0x720e, 0x600f, 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014,
--      0xac06, 0x1160, 0x080c, 0x811f, 0x600c, 0xa015, 0x0120, 0x7216,
--      0x600f, 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, 0x601c, 0xa086,
--      0x0003, 0x1198, 0x6018, 0x2060, 0x080c, 0x4ed5, 0x6000, 0xc0dc,
--      0x6002, 0x080c, 0x811f, 0x701c, 0xa065, 0x0138, 0x6054, 0xa015,
--      0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce,
--      0x00ee, 0x0005, 0x7024, 0xa065, 0x0140, 0x080c, 0x811f, 0x600c,
--      0xa015, 0x0150, 0x720e, 0x600f, 0x0000, 0x080c, 0x8247, 0x7027,
--      0x0000, 0x00ce, 0x00ee, 0x0005, 0x720e, 0x720a, 0x0cb0, 0x00d6,
--      0x2069, 0xb7e0, 0x6830, 0xa084, 0x0003, 0x0002, 0x7134, 0x7136,
--      0x715a, 0x7132, 0x080c, 0x1515, 0x00de, 0x0005, 0x00c6, 0x6840,
--      0xa086, 0x0001, 0x01b8, 0x683c, 0xa065, 0x0130, 0x600c, 0xa015,
--      0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000,
--      0x2011, 0xb7ff, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a,
--      0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0xa065, 0x0d68, 0x6003,
--      0x0003, 0x0c50, 0x00c6, 0x6843, 0x0000, 0x6847, 0x0000, 0x684b,
--      0x0000, 0x683c, 0xa065, 0x0168, 0x600c, 0xa015, 0x0130, 0x6a3a,
--      0x600f, 0x0000, 0x683f, 0x0000, 0x0020, 0x683f, 0x0000, 0x683a,
--      0x6836, 0x00ce, 0x00de, 0x0005, 0x00d6, 0x2069, 0xb7e0, 0x6804,
--      0xa084, 0x0007, 0x0002, 0x7185, 0x7221, 0x7221, 0x7221, 0x7221,
--      0x7223, 0x7183, 0x7183, 0x080c, 0x1515, 0x6820, 0xa005, 0x1110,
--      0x00de, 0x0005, 0x00c6, 0x680c, 0xa065, 0x0150, 0x6807, 0x0004,
--      0x6826, 0x682b, 0x0000, 0x080c, 0x7273, 0x00ce, 0x00de, 0x0005,
--      0x6814, 0xa065, 0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000,
--      0x080c, 0x7273, 0x00ce, 0x00de, 0x0005, 0x00e6, 0x0036, 0x6a1c,
--      0xa2f5, 0x0000, 0x0904, 0x721d, 0x704c, 0xa00d, 0x0118, 0x7088,
--      0xa005, 0x01a0, 0x7054, 0xa075, 0x0120, 0xa20e, 0x0904, 0x721d,
--      0x0028, 0x6818, 0xa20e, 0x0904, 0x721d, 0x2070, 0x704c, 0xa00d,
--      0x0d88, 0x7088, 0xa005, 0x1d70, 0x2e00, 0x681e, 0x733c, 0x7038,
--      0xa302, 0x1e40, 0x080c, 0x85ee, 0x0904, 0x721d, 0x8318, 0x733e,
--      0x6112, 0x2e10, 0x621a, 0xa180, 0x0014, 0x2004, 0xa084, 0x00ff,
--      0x605a, 0xa180, 0x0014, 0x2003, 0x0000, 0xa180, 0x0015, 0x2004,
--      0xa08a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x801b, 0x831b,
--      0xa318, 0x6316, 0x003e, 0x00f6, 0x2c78, 0x71a0, 0x2001, 0xb535,
--      0x2004, 0xd0ac, 0x1110, 0xd1bc, 0x0150, 0x7100, 0xd1f4, 0x0120,
--      0x7114, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0,
--      0x2dc4, 0x2c0d, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x080c,
--      0x78a3, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26,
--      0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040,
--      0x00fe, 0x00ee, 0x00ce, 0x00de, 0x0005, 0x003e, 0x00ee, 0x00ce,
--      0x0cd0, 0x00de, 0x0005, 0x00c6, 0x680c, 0xa065, 0x0138, 0x6807,
--      0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x7273, 0x00ce, 0x00de,
--      0x0005, 0x00f6, 0x00d6, 0x2069, 0xb7e0, 0x6830, 0xa086, 0x0000,
--      0x11d0, 0x2001, 0xb50c, 0x200c, 0xd1bc, 0x1560, 0x6838, 0xa07d,
--      0x0190, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000,
--      0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, 0x2021, 0x1130,
--      0x012e, 0x080c, 0x7bec, 0x00de, 0x00fe, 0x0005, 0x012e, 0xe000,
--      0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0140, 0x6a3a,
--      0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0c60, 0x683a,
--      0x6836, 0x0cc0, 0xc1bc, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c,
--      0x5b52, 0x006e, 0x0858, 0x601c, 0xa084, 0x000f, 0x000b, 0x0005,
--      0x7281, 0x7286, 0x7744, 0x7860, 0x7286, 0x7744, 0x7860, 0x7281,
--      0x7286, 0x080c, 0x7091, 0x080c, 0x7174, 0x0005, 0x0156, 0x0136,
--      0x0146, 0x00c6, 0x00f6, 0x6004, 0xa08a, 0x0080, 0x1a0c, 0x1515,
--      0x6118, 0x2178, 0x79a0, 0x2011, 0xb535, 0x2214, 0xd2ac, 0x1110,
--      0xd1bc, 0x0150, 0x7900, 0xd1f4, 0x0120, 0x7914, 0xa18c, 0x00ff,
--      0x0040, 0x2009, 0x0000, 0x0028, 0xa1f8, 0x2dc4, 0x2f0d, 0xa18c,
--      0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa08a, 0x0040, 0x1a04,
--      0x72fa, 0x0033, 0x00fe, 0x00ce, 0x014e, 0x013e, 0x015e, 0x0005,
--      0x73a9, 0x73f4, 0x7421, 0x74ee, 0x751c, 0x7524, 0x754a, 0x755b,
--      0x756c, 0x7574, 0x758a, 0x7574, 0x75eb, 0x755b, 0x760c, 0x7614,
--      0x756c, 0x7614, 0x7625, 0x72f8, 0x72f8, 0x72f8, 0x72f8, 0x72f8,
--      0x72f8, 0x72f8, 0x72f8, 0x72f8, 0x72f8, 0x72f8, 0x7e86, 0x7eab,
--      0x7ec0, 0x7ee3, 0x7f04, 0x754a, 0x72f8, 0x754a, 0x7574, 0x72f8,
--      0x7421, 0x74ee, 0x72f8, 0x8349, 0x7574, 0x72f8, 0x8369, 0x7574,
--      0x72f8, 0x756c, 0x73a2, 0x730d, 0x72f8, 0x838e, 0x8403, 0x84da,
--      0x72f8, 0x84eb, 0x7545, 0x8507, 0x72f8, 0x7f19, 0x8562, 0x72f8,
--      0x080c, 0x1515, 0x2100, 0x0033, 0x00fe, 0x00ce, 0x014e, 0x013e,
--      0x015e, 0x0005, 0x730b, 0x730b, 0x730b, 0x7341, 0x735f, 0x7375,
--      0x730b, 0x730b, 0x730b, 0x080c, 0x1515, 0x00d6, 0x20a1, 0x020b,
--      0x080c, 0x7642, 0x7810, 0x2068, 0x20a3, 0x2414, 0x20a3, 0x0018,
--      0x20a3, 0x0800, 0x683c, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x20a3, 0x0000, 0x6850, 0x20a2, 0x6854, 0x20a2,
--      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018, 0x080c, 0x7d68,
--      0x00de, 0x0005, 0x00d6, 0x7818, 0x2068, 0x68a0, 0x2069, 0xb500,
--      0x6ad4, 0xd2ac, 0x1110, 0xd0bc, 0x0110, 0xa085, 0x0001, 0x00de,
--      0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x7642, 0x20a3, 0x0500,
--      0x20a3, 0x0000, 0x7810, 0xa0e8, 0x000f, 0x6808, 0x20a2, 0x680c,
--      0x20a2, 0x6810, 0x20a2, 0x6814, 0x20a2, 0x6818, 0x20a2, 0x681c,
--      0x20a2, 0x60c3, 0x0010, 0x080c, 0x7d68, 0x00de, 0x0005, 0x0156,
--      0x0146, 0x20a1, 0x020b, 0x080c, 0x7642, 0x20a3, 0x7800, 0x20a3,
--      0x0000, 0x7808, 0x8007, 0x20a2, 0x20a3, 0x0000, 0x60c3, 0x0008,
--      0x080c, 0x7d68, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1,
--      0x020b, 0x080c, 0x76de, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3,
--      0xdf10, 0x20a3, 0x0034, 0x2099, 0xb505, 0x20a9, 0x0004, 0x53a6,
--      0x2099, 0xb501, 0x20a9, 0x0004, 0x53a6, 0x2099, 0xb7c6, 0x20a9,
--      0x001a, 0x3304, 0x8007, 0x20a2, 0x9398, 0x1f04, 0x7391, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x60c3, 0x004c, 0x080c, 0x7d68, 0x014e,
--      0x015e, 0x0005, 0x2001, 0xb515, 0x2004, 0x609a, 0x080c, 0x7d68,
--      0x0005, 0x20a1, 0x020b, 0x080c, 0x7642, 0x20a3, 0x5200, 0x20a3,
--      0x0000, 0x00d6, 0x2069, 0xb552, 0x6804, 0xd084, 0x0150, 0x6828,
--      0x20a3, 0x0000, 0x0016, 0x080c, 0x2831, 0x21a2, 0x001e, 0x00de,
--      0x0028, 0x00de, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004,
--      0x2099, 0xb505, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb501, 0x53a6,
--      0x2001, 0xb535, 0x2004, 0xd0ac, 0x1138, 0x7818, 0xa080, 0x0028,
--      0x2004, 0xa082, 0x007f, 0x0238, 0x2001, 0xb51c, 0x20a6, 0x2001,
--      0xb51d, 0x20a6, 0x0040, 0x20a3, 0x0000, 0x2001, 0xb515, 0x2004,
--      0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
--      0x001c, 0x080c, 0x7d68, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7642,
--      0x20a3, 0x0500, 0x20a3, 0x0000, 0x2001, 0xb535, 0x2004, 0xd0ac,
--      0x1138, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007f, 0x0238,
--      0x2001, 0xb51c, 0x20a6, 0x2001, 0xb51d, 0x20a6, 0x0040, 0x20a3,
--      0x0000, 0x2001, 0xb515, 0x2004, 0xa084, 0x00ff, 0x20a2, 0x20a9,
--      0x0004, 0x2099, 0xb505, 0x53a6, 0x60c3, 0x0010, 0x080c, 0x7d68,
--      0x0005, 0x20a1, 0x020b, 0x080c, 0x7642, 0x00c6, 0x7818, 0x2060,
--      0x2001, 0x0000, 0x080c, 0x5314, 0x00ce, 0x7818, 0xa080, 0x0028,
--      0x2004, 0xa086, 0x007e, 0x1130, 0x20a3, 0x0400, 0x620c, 0xc2b4,
--      0x620e, 0x0010, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x7818, 0xa080,
--      0x0028, 0x2004, 0xa086, 0x007e, 0x1904, 0x74b0, 0x2001, 0xb535,
--      0x2004, 0xd0a4, 0x01c8, 0x2099, 0xb78e, 0x33a6, 0x9398, 0x20a3,
--      0x0000, 0x9398, 0x3304, 0xa084, 0x2000, 0x20a2, 0x9398, 0x33a6,
--      0x9398, 0x20a3, 0x0000, 0x9398, 0x2001, 0x2710, 0x20a2, 0x9398,
--      0x33a6, 0x9398, 0x33a6, 0x00d0, 0x2099, 0xb78e, 0x33a6, 0x9398,
--      0x33a6, 0x9398, 0x3304, 0x080c, 0x5ad0, 0x1118, 0xa084, 0x37ff,
--      0x0010, 0xa084, 0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004,
--      0x2099, 0xb505, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb501, 0x53a6,
--      0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x748a, 0x20a9, 0x0008,
--      0x20a3, 0x0000, 0x1f04, 0x7490, 0x2099, 0xb796, 0x3304, 0xc0dd,
--      0x20a2, 0x2001, 0xb572, 0x2004, 0xd0e4, 0x0158, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x9398, 0x9398, 0x9398, 0x33a6, 0x20a9, 0x0004,
--      0x0010, 0x20a9, 0x0007, 0x20a3, 0x0000, 0x1f04, 0x74ab, 0x0468,
--      0x2001, 0xb535, 0x2004, 0xd0a4, 0x0140, 0x2001, 0xb78f, 0x2004,
--      0x60e3, 0x0000, 0x080c, 0x2872, 0x60e2, 0x2099, 0xb78e, 0x20a9,
--      0x0008, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb505, 0x53a6, 0x20a9,
--      0x0004, 0x2099, 0xb501, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000,
--      0x1f04, 0x74ce, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x74d4,
--      0x2099, 0xb796, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3,
--      0x0000, 0x1f04, 0x74df, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04,
--      0x74e5, 0x60c3, 0x0074, 0x080c, 0x7d68, 0x0005, 0x20a1, 0x020b,
--      0x080c, 0x7642, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800,
--      0x20a3, 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
--      0x00f6, 0x2079, 0xb552, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0xa085,
--      0x0020, 0xd1a4, 0x0110, 0xa085, 0x0010, 0xa085, 0x0002, 0x00d6,
--      0x0804, 0x75cd, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
--      0x0014, 0x080c, 0x7d68, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7642,
--      0x20a3, 0x5000, 0x0804, 0x743c, 0x20a1, 0x020b, 0x080c, 0x7642,
--      0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x60c3, 0x0014, 0x080c, 0x7d68, 0x0005, 0x20a1, 0x020b, 0x080c,
--      0x76d6, 0x0020, 0x20a1, 0x020b, 0x080c, 0x76de, 0x20a3, 0x0200,
--      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004,
--      0x080c, 0x7d68, 0x0005, 0x20a1, 0x020b, 0x080c, 0x76de, 0x20a3,
--      0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3,
--      0x0008, 0x080c, 0x7d68, 0x0005, 0x20a1, 0x020b, 0x080c, 0x76de,
--      0x20a3, 0x0200, 0x0804, 0x743c, 0x20a1, 0x020b, 0x080c, 0x76de,
--      0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0xa005, 0x0110, 0x20a2,
--      0x0010, 0x20a3, 0x0003, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c,
--      0x7d68, 0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x76de, 0x20a3,
--      0x0210, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x7818, 0x2068, 0x6894,
--      0xa086, 0x0014, 0x1198, 0x699c, 0xa184, 0x0030, 0x0190, 0x6998,
--      0xa184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x20a3, 0x2100, 0x0058,
--      0x20a3, 0x0100, 0x0040, 0x20a3, 0x0400, 0x0028, 0x20a3, 0x0700,
--      0x0010, 0x700f, 0x0800, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
--      0x20a2, 0x00f6, 0x2079, 0xb552, 0x7904, 0x00fe, 0xd1ac, 0x1110,
--      0xa085, 0x0020, 0xd1a4, 0x0110, 0xa085, 0x0010, 0x2009, 0xb574,
--      0x210c, 0xd184, 0x1110, 0xa085, 0x0002, 0x0026, 0x2009, 0xb572,
--      0x210c, 0xd1e4, 0x0130, 0xc0c5, 0xa094, 0x0030, 0xa296, 0x0010,
--      0x0140, 0xd1ec, 0x0130, 0xa094, 0x0030, 0xa296, 0x0010, 0x0108,
--      0xc0bd, 0x002e, 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x080c,
--      0x7d68, 0x00de, 0x0005, 0x20a1, 0x020b, 0x080c, 0x76de, 0x20a3,
--      0x0210, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
--      0x0014, 0x080c, 0x7d68, 0x0005, 0x20a1, 0x020b, 0x080c, 0x76de,
--      0x20a3, 0x0200, 0x0804, 0x73af, 0x20a1, 0x020b, 0x080c, 0x76de,
--      0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00,
--      0x60c3, 0x0008, 0x080c, 0x7d68, 0x0005, 0x20e1, 0x9080, 0x20e1,
--      0x4000, 0x20a1, 0x020b, 0x080c, 0x76de, 0x20a3, 0x0100, 0x20a3,
--      0x0000, 0x20a3, 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x080c,
--      0x7d68, 0x0005, 0x0026, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021,
--      0x0800, 0x0038, 0x0026, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021,
--      0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
--      0x2014, 0xa286, 0x007e, 0x11a0, 0xa385, 0x00ff, 0x20a2, 0x20a3,
--      0xfffe, 0x20a3, 0x0000, 0x2011, 0xb515, 0x2214, 0x2001, 0xb79e,
--      0x2004, 0xa005, 0x0118, 0x2011, 0xb51d, 0x2214, 0x22a2, 0x04d0,
--      0xa286, 0x007f, 0x1138, 0x00d6, 0xa385, 0x00ff, 0x20a2, 0x20a3,
--      0xfffd, 0x00c8, 0x2001, 0xb535, 0x2004, 0xd0ac, 0x1110, 0xd2bc,
--      0x01c8, 0xa286, 0x0080, 0x00d6, 0x1130, 0xa385, 0x00ff, 0x20a2,
--      0x20a3, 0xfffc, 0x0040, 0xa2e8, 0xb635, 0x2d6c, 0x6810, 0xa305,
--      0x20a2, 0x6814, 0x20a2, 0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6,
--      0x00de, 0x0080, 0x00d6, 0xa2e8, 0xb635, 0x2d6c, 0x6810, 0xa305,
--      0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb515,
--      0x2214, 0x22a2, 0xa485, 0x0029, 0x20a2, 0x004e, 0x003e, 0x20a3,
--      0x0000, 0x080c, 0x7d57, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3,
--      0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x0026,
--      0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff, 0x2011, 0xfffc,
--      0x22a2, 0x00d6, 0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
--      0x20a3, 0x2029, 0x20a3, 0x0000, 0x08e0, 0x20a3, 0x0100, 0x20a3,
--      0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000, 0x0005, 0x0026, 0x0036,
--      0x0046, 0x2019, 0x3300, 0x2021, 0x0800, 0x0038, 0x0026, 0x0036,
--      0x0046, 0x2019, 0x2300, 0x2021, 0x0100, 0x20e1, 0x9080, 0x20e1,
--      0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb535, 0x2214,
--      0xd2ac, 0x1118, 0xa092, 0x007e, 0x02d8, 0x00d6, 0xa0e8, 0xb635,
--      0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x6810, 0xa005,
--      0x1140, 0x6814, 0xa005, 0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffe,
--      0x0028, 0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0080,
--      0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814,
--      0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb515, 0x2214, 0x22a2,
--      0xa485, 0x0098, 0x20a2, 0x20a3, 0x0000, 0x004e, 0x003e, 0x080c,
--      0x7d57, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x080c, 0x7d57, 0x22a2,
--      0x20a3, 0x0000, 0x7a08, 0x22a2, 0x7810, 0x20a2, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x002e, 0x0005, 0x00c6, 0x00f6, 0x6004, 0xa08a,
--      0x0085, 0x0a0c, 0x1515, 0xa08a, 0x008c, 0x1a0c, 0x1515, 0x6118,
-+      0x8001, 0x603e, 0x2660, 0x080c, 0x9e1d, 0x00ce, 0x0048, 0x00de,
-+      0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x6fd4,
-+      0x8dff, 0x0138, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c,
-+      0x5408, 0x080c, 0x811e, 0x0804, 0x6fd4, 0x000e, 0x0804, 0x6fc7,
-+      0x781e, 0x781a, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005, 0x00e6,
-+      0x00d6, 0x0066, 0x6000, 0xd0dc, 0x01a0, 0x604c, 0xa06d, 0x0188,
-+      0x6848, 0xa606, 0x1170, 0x2071, 0xb7e0, 0x7024, 0xa035, 0x0148,
-+      0xa080, 0x0004, 0x2004, 0xad06, 0x1120, 0x6000, 0xc0dc, 0x6002,
-+      0x0021, 0x006e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079, 0x0100,
-+      0x78c0, 0xa005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a,
-+      0x00ce, 0x04a0, 0x080c, 0x7d7a, 0x78c3, 0x0000, 0x080c, 0x824d,
-+      0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0xa384, 0x1000,
-+      0x0120, 0x7803, 0x0100, 0x7803, 0x0000, 0x2079, 0x0100, 0x7824,
-+      0xd084, 0x0110, 0x7827, 0x0001, 0x080c, 0x824d, 0x003e, 0x080c,
-+      0x4ed4, 0x00c6, 0x603c, 0xa005, 0x0110, 0x8001, 0x603e, 0x2660,
-+      0x080c, 0x861d, 0x00ce, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+      0x080c, 0x9ecc, 0x080c, 0x5408, 0x080c, 0x811e, 0x00fe, 0x0005,
-+      0x00e6, 0x00c6, 0x2071, 0xb7e0, 0x7004, 0xa084, 0x0007, 0x0002,
-+      0x70a2, 0x70a5, 0x70bb, 0x70d4, 0x7111, 0x70a2, 0x70a0, 0x70a0,
-+      0x080c, 0x1515, 0x00ce, 0x00ee, 0x0005, 0x7024, 0xa065, 0x0148,
-+      0x7020, 0x8001, 0x7022, 0x600c, 0xa015, 0x0150, 0x7216, 0x600f,
-+      0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005,
-+      0x7216, 0x7212, 0x0cb0, 0x6018, 0x2060, 0x080c, 0x4ed4, 0x6000,
-+      0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0120, 0x6054, 0xa015,
-+      0x0140, 0x721e, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee,
-+      0x0005, 0x7218, 0x721e, 0x0cb0, 0x7024, 0xa065, 0x05b8, 0x700c,
-+      0xac06, 0x1160, 0x080c, 0x811e, 0x600c, 0xa015, 0x0120, 0x720e,
-+      0x600f, 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014, 0xac06,
-+      0x1160, 0x080c, 0x811e, 0x600c, 0xa015, 0x0120, 0x7216, 0x600f,
-+      0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, 0x601c, 0xa086, 0x0003,
-+      0x1198, 0x6018, 0x2060, 0x080c, 0x4ed4, 0x6000, 0xc0dc, 0x6002,
-+      0x080c, 0x811e, 0x701c, 0xa065, 0x0138, 0x6054, 0xa015, 0x0110,
-+      0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee,
-+      0x0005, 0x7024, 0xa065, 0x0140, 0x080c, 0x811e, 0x600c, 0xa015,
-+      0x0150, 0x720e, 0x600f, 0x0000, 0x080c, 0x824d, 0x7027, 0x0000,
-+      0x00ce, 0x00ee, 0x0005, 0x720e, 0x720a, 0x0cb0, 0x00d6, 0x2069,
-+      0xb7e0, 0x6830, 0xa084, 0x0003, 0x0002, 0x7133, 0x7135, 0x7159,
-+      0x7131, 0x080c, 0x1515, 0x00de, 0x0005, 0x00c6, 0x6840, 0xa086,
-+      0x0001, 0x01b8, 0x683c, 0xa065, 0x0130, 0x600c, 0xa015, 0x0170,
-+      0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011,
-+      0xb7ff, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a, 0x6836,
-+      0x0c90, 0x6843, 0x0000, 0x6838, 0xa065, 0x0d68, 0x6003, 0x0003,
-+      0x0c50, 0x00c6, 0x6843, 0x0000, 0x6847, 0x0000, 0x684b, 0x0000,
-+      0x683c, 0xa065, 0x0168, 0x600c, 0xa015, 0x0130, 0x6a3a, 0x600f,
-+      0x0000, 0x683f, 0x0000, 0x0020, 0x683f, 0x0000, 0x683a, 0x6836,
-+      0x00ce, 0x00de, 0x0005, 0x00d6, 0x2069, 0xb7e0, 0x6804, 0xa084,
-+      0x0007, 0x0002, 0x7184, 0x7220, 0x7220, 0x7220, 0x7220, 0x7222,
-+      0x7182, 0x7182, 0x080c, 0x1515, 0x6820, 0xa005, 0x1110, 0x00de,
-+      0x0005, 0x00c6, 0x680c, 0xa065, 0x0150, 0x6807, 0x0004, 0x6826,
-+      0x682b, 0x0000, 0x080c, 0x7272, 0x00ce, 0x00de, 0x0005, 0x6814,
-+      0xa065, 0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c,
-+      0x7272, 0x00ce, 0x00de, 0x0005, 0x00e6, 0x0036, 0x6a1c, 0xa2f5,
-+      0x0000, 0x0904, 0x721c, 0x704c, 0xa00d, 0x0118, 0x7088, 0xa005,
-+      0x01a0, 0x7054, 0xa075, 0x0120, 0xa20e, 0x0904, 0x721c, 0x0028,
-+      0x6818, 0xa20e, 0x0904, 0x721c, 0x2070, 0x704c, 0xa00d, 0x0d88,
-+      0x7088, 0xa005, 0x1d70, 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302,
-+      0x1e40, 0x080c, 0x85f4, 0x0904, 0x721c, 0x8318, 0x733e, 0x6112,
-+      0x2e10, 0x621a, 0xa180, 0x0014, 0x2004, 0xa084, 0x00ff, 0x605a,
-+      0xa180, 0x0014, 0x2003, 0x0000, 0xa180, 0x0015, 0x2004, 0xa08a,
-+      0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x801b, 0x831b, 0xa318,
-+      0x6316, 0x003e, 0x00f6, 0x2c78, 0x71a0, 0x2001, 0xb535, 0x2004,
-+      0xd0ac, 0x1110, 0xd1bc, 0x0150, 0x7100, 0xd1f4, 0x0120, 0x7114,
-+      0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0, 0x2dc4,
-+      0x2c0d, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x080c, 0x78a2,
-+      0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b,
-+      0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040, 0x00fe,
-+      0x00ee, 0x00ce, 0x00de, 0x0005, 0x003e, 0x00ee, 0x00ce, 0x0cd0,
-+      0x00de, 0x0005, 0x00c6, 0x680c, 0xa065, 0x0138, 0x6807, 0x0004,
-+      0x6826, 0x682b, 0x0000, 0x080c, 0x7272, 0x00ce, 0x00de, 0x0005,
-+      0x00f6, 0x00d6, 0x2069, 0xb7e0, 0x6830, 0xa086, 0x0000, 0x11d0,
-+      0x2001, 0xb50c, 0x200c, 0xd1bc, 0x1560, 0x6838, 0xa07d, 0x0190,
-+      0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126,
-+      0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, 0x2021, 0x1130, 0x012e,
-+      0x080c, 0x7beb, 0x00de, 0x00fe, 0x0005, 0x012e, 0xe000, 0x6843,
-+      0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0140, 0x6a3a, 0x780f,
-+      0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0c60, 0x683a, 0x6836,
-+      0x0cc0, 0xc1bc, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c, 0x5b51,
-+      0x006e, 0x0858, 0x601c, 0xa084, 0x000f, 0x000b, 0x0005, 0x7280,
-+      0x7285, 0x7743, 0x785f, 0x7285, 0x7743, 0x785f, 0x7280, 0x7285,
-+      0x080c, 0x7090, 0x080c, 0x7173, 0x0005, 0x0156, 0x0136, 0x0146,
-+      0x00c6, 0x00f6, 0x6004, 0xa08a, 0x0080, 0x1a0c, 0x1515, 0x6118,
-       0x2178, 0x79a0, 0x2011, 0xb535, 0x2214, 0xd2ac, 0x1110, 0xd1bc,
-       0x0150, 0x7900, 0xd1f4, 0x0120, 0x7914, 0xa18c, 0x00ff, 0x0040,
-       0x2009, 0x0000, 0x0028, 0xa1f8, 0x2dc4, 0x2f0d, 0xa18c, 0x00ff,
--      0x2c78, 0x2061, 0x0100, 0x619a, 0xa082, 0x0085, 0x001b, 0x00fe,
--      0x00ce, 0x0005, 0x777b, 0x7785, 0x77a0, 0x7779, 0x7779, 0x7779,
--      0x777b, 0x080c, 0x1515, 0x0146, 0x20a1, 0x020b, 0x04a1, 0x60c3,
--      0x0000, 0x080c, 0x7d68, 0x014e, 0x0005, 0x0146, 0x20a1, 0x020b,
--      0x080c, 0x77ec, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2,
--      0x7810, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x60c3, 0x000c, 0x080c, 0x7d68, 0x014e, 0x0005,
--      0x0146, 0x20a1, 0x020b, 0x080c, 0x7826, 0x20a3, 0x0003, 0x20a3,
--      0x0300, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x080c,
--      0x7d68, 0x014e, 0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+      0x2c78, 0x2061, 0x0100, 0x619a, 0xa08a, 0x0040, 0x1a04, 0x72f9,
-+      0x0033, 0x00fe, 0x00ce, 0x014e, 0x013e, 0x015e, 0x0005, 0x73a8,
-+      0x73f3, 0x7420, 0x74ed, 0x751b, 0x7523, 0x7549, 0x755a, 0x756b,
-+      0x7573, 0x7589, 0x7573, 0x75ea, 0x755a, 0x760b, 0x7613, 0x756b,
-+      0x7613, 0x7624, 0x72f7, 0x72f7, 0x72f7, 0x72f7, 0x72f7, 0x72f7,
-+      0x72f7, 0x72f7, 0x72f7, 0x72f7, 0x72f7, 0x7e85, 0x7eaa, 0x7ebf,
-+      0x7ee2, 0x7f03, 0x7549, 0x72f7, 0x7549, 0x7573, 0x72f7, 0x7420,
-+      0x74ed, 0x72f7, 0x834f, 0x7573, 0x72f7, 0x836f, 0x7573, 0x72f7,
-+      0x756b, 0x73a1, 0x730c, 0x72f7, 0x8394, 0x8409, 0x84e0, 0x72f7,
-+      0x84f1, 0x7544, 0x850d, 0x72f7, 0x7f18, 0x8568, 0x72f7, 0x080c,
-+      0x1515, 0x2100, 0x0033, 0x00fe, 0x00ce, 0x014e, 0x013e, 0x015e,
-+      0x0005, 0x730a, 0x730a, 0x730a, 0x7340, 0x735e, 0x7374, 0x730a,
-+      0x730a, 0x730a, 0x080c, 0x1515, 0x00d6, 0x20a1, 0x020b, 0x080c,
-+      0x7641, 0x7810, 0x2068, 0x20a3, 0x2414, 0x20a3, 0x0018, 0x20a3,
-+      0x0800, 0x683c, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x6850, 0x20a2, 0x6854, 0x20a2, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018, 0x080c, 0x7d67, 0x00de,
-+      0x0005, 0x00d6, 0x7818, 0x2068, 0x68a0, 0x2069, 0xb500, 0x6ad4,
-+      0xd2ac, 0x1110, 0xd0bc, 0x0110, 0xa085, 0x0001, 0x00de, 0x0005,
-+      0x00d6, 0x20a1, 0x020b, 0x080c, 0x7641, 0x20a3, 0x0500, 0x20a3,
-+      0x0000, 0x7810, 0xa0e8, 0x000f, 0x6808, 0x20a2, 0x680c, 0x20a2,
-+      0x6810, 0x20a2, 0x6814, 0x20a2, 0x6818, 0x20a2, 0x681c, 0x20a2,
-+      0x60c3, 0x0010, 0x080c, 0x7d67, 0x00de, 0x0005, 0x0156, 0x0146,
-+      0x20a1, 0x020b, 0x080c, 0x7641, 0x20a3, 0x7800, 0x20a3, 0x0000,
-+      0x7808, 0x8007, 0x20a2, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x080c,
-+      0x7d67, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b,
-+      0x080c, 0x76dd, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0xdf10,
-+      0x20a3, 0x0034, 0x2099, 0xb505, 0x20a9, 0x0004, 0x53a6, 0x2099,
-+      0xb501, 0x20a9, 0x0004, 0x53a6, 0x2099, 0xb7c6, 0x20a9, 0x001a,
-+      0x3304, 0x8007, 0x20a2, 0x9398, 0x1f04, 0x7390, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x60c3, 0x004c, 0x080c, 0x7d67, 0x014e, 0x015e,
-+      0x0005, 0x2001, 0xb515, 0x2004, 0x609a, 0x080c, 0x7d67, 0x0005,
-+      0x20a1, 0x020b, 0x080c, 0x7641, 0x20a3, 0x5200, 0x20a3, 0x0000,
-+      0x00d6, 0x2069, 0xb552, 0x6804, 0xd084, 0x0150, 0x6828, 0x20a3,
-+      0x0000, 0x0016, 0x080c, 0x2831, 0x21a2, 0x001e, 0x00de, 0x0028,
-+      0x00de, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099,
-+      0xb505, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb501, 0x53a6, 0x2001,
-+      0xb535, 0x2004, 0xd0ac, 0x1138, 0x7818, 0xa080, 0x0028, 0x2004,
-+      0xa082, 0x007f, 0x0238, 0x2001, 0xb51c, 0x20a6, 0x2001, 0xb51d,
-+      0x20a6, 0x0040, 0x20a3, 0x0000, 0x2001, 0xb515, 0x2004, 0xa084,
-+      0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c,
-+      0x080c, 0x7d67, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7641, 0x20a3,
-+      0x0500, 0x20a3, 0x0000, 0x2001, 0xb535, 0x2004, 0xd0ac, 0x1138,
-+      0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007f, 0x0238, 0x2001,
-+      0xb51c, 0x20a6, 0x2001, 0xb51d, 0x20a6, 0x0040, 0x20a3, 0x0000,
-+      0x2001, 0xb515, 0x2004, 0xa084, 0x00ff, 0x20a2, 0x20a9, 0x0004,
-+      0x2099, 0xb505, 0x53a6, 0x60c3, 0x0010, 0x080c, 0x7d67, 0x0005,
-+      0x20a1, 0x020b, 0x080c, 0x7641, 0x00c6, 0x7818, 0x2060, 0x2001,
-+      0x0000, 0x080c, 0x5313, 0x00ce, 0x7818, 0xa080, 0x0028, 0x2004,
-+      0xa086, 0x007e, 0x1130, 0x20a3, 0x0400, 0x620c, 0xc2b4, 0x620e,
-+      0x0010, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0xa086, 0x007e, 0x1904, 0x74af, 0x2001, 0xb535, 0x2004,
-+      0xd0a4, 0x01c8, 0x2099, 0xb78e, 0x33a6, 0x9398, 0x20a3, 0x0000,
-+      0x9398, 0x3304, 0xa084, 0x2000, 0x20a2, 0x9398, 0x33a6, 0x9398,
-+      0x20a3, 0x0000, 0x9398, 0x2001, 0x2710, 0x20a2, 0x9398, 0x33a6,
-+      0x9398, 0x33a6, 0x00d0, 0x2099, 0xb78e, 0x33a6, 0x9398, 0x33a6,
-+      0x9398, 0x3304, 0x080c, 0x5acf, 0x1118, 0xa084, 0x37ff, 0x0010,
-+      0xa084, 0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099,
-+      0xb505, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb501, 0x53a6, 0x20a9,
-+      0x0008, 0x20a3, 0x0000, 0x1f04, 0x7489, 0x20a9, 0x0008, 0x20a3,
-+      0x0000, 0x1f04, 0x748f, 0x2099, 0xb796, 0x3304, 0xc0dd, 0x20a2,
-+      0x2001, 0xb572, 0x2004, 0xd0e4, 0x0158, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x9398, 0x9398, 0x9398, 0x33a6, 0x20a9, 0x0004, 0x0010,
-+      0x20a9, 0x0007, 0x20a3, 0x0000, 0x1f04, 0x74aa, 0x0468, 0x2001,
-+      0xb535, 0x2004, 0xd0a4, 0x0140, 0x2001, 0xb78f, 0x2004, 0x60e3,
-+      0x0000, 0x080c, 0x2872, 0x60e2, 0x2099, 0xb78e, 0x20a9, 0x0008,
-+      0x53a6, 0x20a9, 0x0004, 0x2099, 0xb505, 0x53a6, 0x20a9, 0x0004,
-+      0x2099, 0xb501, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04,
-+      0x74cd, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x74d3, 0x2099,
-+      0xb796, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000,
-+      0x1f04, 0x74de, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04, 0x74e4,
-+      0x60c3, 0x0074, 0x080c, 0x7d67, 0x0005, 0x20a1, 0x020b, 0x080c,
-+      0x7641, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3,
-+      0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x00f6,
-+      0x2079, 0xb552, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0xa085, 0x0020,
-+      0xd1a4, 0x0110, 0xa085, 0x0010, 0xa085, 0x0002, 0x00d6, 0x0804,
-+      0x75cc, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014,
-+      0x080c, 0x7d67, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7641, 0x20a3,
-+      0x5000, 0x0804, 0x743b, 0x20a1, 0x020b, 0x080c, 0x7641, 0x20a3,
-+      0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+      0x0014, 0x080c, 0x7d67, 0x0005, 0x20a1, 0x020b, 0x080c, 0x76d5,
-+      0x0020, 0x20a1, 0x020b, 0x080c, 0x76dd, 0x20a3, 0x0200, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x080c,
-+      0x7d67, 0x0005, 0x20a1, 0x020b, 0x080c, 0x76dd, 0x20a3, 0x0100,
-+      0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008,
-+      0x080c, 0x7d67, 0x0005, 0x20a1, 0x020b, 0x080c, 0x76dd, 0x20a3,
-+      0x0200, 0x0804, 0x743b, 0x20a1, 0x020b, 0x080c, 0x76dd, 0x20a3,
-+      0x0100, 0x20a3, 0x0000, 0x7828, 0xa005, 0x0110, 0x20a2, 0x0010,
-+      0x20a3, 0x0003, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x7d67,
-+      0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x76dd, 0x20a3, 0x0210,
-+      0x20a3, 0x0014, 0x20a3, 0x0800, 0x7818, 0x2068, 0x6894, 0xa086,
-+      0x0014, 0x1198, 0x699c, 0xa184, 0x0030, 0x0190, 0x6998, 0xa184,
-+      0xc000, 0x1140, 0xd1ec, 0x0118, 0x20a3, 0x2100, 0x0058, 0x20a3,
-+      0x0100, 0x0040, 0x20a3, 0x0400, 0x0028, 0x20a3, 0x0700, 0x0010,
-+      0x700f, 0x0800, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
-+      0x00f6, 0x2079, 0xb552, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0xa085,
-+      0x0020, 0xd1a4, 0x0110, 0xa085, 0x0010, 0x2009, 0xb574, 0x210c,
-+      0xd184, 0x1110, 0xa085, 0x0002, 0x0026, 0x2009, 0xb572, 0x210c,
-+      0xd1e4, 0x0130, 0xc0c5, 0xa094, 0x0030, 0xa296, 0x0010, 0x0140,
-+      0xd1ec, 0x0130, 0xa094, 0x0030, 0xa296, 0x0010, 0x0108, 0xc0bd,
-+      0x002e, 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x080c, 0x7d67,
-+      0x00de, 0x0005, 0x20a1, 0x020b, 0x080c, 0x76dd, 0x20a3, 0x0210,
-+      0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014,
-+      0x080c, 0x7d67, 0x0005, 0x20a1, 0x020b, 0x080c, 0x76dd, 0x20a3,
-+      0x0200, 0x0804, 0x73ae, 0x20a1, 0x020b, 0x080c, 0x76dd, 0x20a3,
-+      0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3,
-+      0x0008, 0x080c, 0x7d67, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+      0x20a1, 0x020b, 0x080c, 0x76dd, 0x20a3, 0x0100, 0x20a3, 0x0000,
-+      0x20a3, 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x080c, 0x7d67,
-+      0x0005, 0x0026, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800,
-+      0x0038, 0x0026, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100,
-+      0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2014,
-+      0xa286, 0x007e, 0x11a0, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffe,
-+      0x20a3, 0x0000, 0x2011, 0xb515, 0x2214, 0x2001, 0xb79e, 0x2004,
-+      0xa005, 0x0118, 0x2011, 0xb51d, 0x2214, 0x22a2, 0x04d0, 0xa286,
-+      0x007f, 0x1138, 0x00d6, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffd,
-+      0x00c8, 0x2001, 0xb535, 0x2004, 0xd0ac, 0x1110, 0xd2bc, 0x01c8,
-+      0xa286, 0x0080, 0x00d6, 0x1130, 0xa385, 0x00ff, 0x20a2, 0x20a3,
-+      0xfffc, 0x0040, 0xa2e8, 0xb635, 0x2d6c, 0x6810, 0xa305, 0x20a2,
-+      0x6814, 0x20a2, 0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
-+      0x0080, 0x00d6, 0xa2e8, 0xb635, 0x2d6c, 0x6810, 0xa305, 0x20a2,
-+      0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb515, 0x2214,
-+      0x22a2, 0xa485, 0x0029, 0x20a2, 0x004e, 0x003e, 0x20a3, 0x0000,
-+      0x080c, 0x7d56, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x0026, 0x20e1,
-+      0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff, 0x2011, 0xfffc, 0x22a2,
-+      0x00d6, 0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x20a3,
-+      0x2029, 0x20a3, 0x0000, 0x08e0, 0x20a3, 0x0100, 0x20a3, 0x0000,
-+      0x20a3, 0xfc02, 0x20a3, 0x0000, 0x0005, 0x0026, 0x0036, 0x0046,
-+      0x2019, 0x3300, 0x2021, 0x0800, 0x0038, 0x0026, 0x0036, 0x0046,
-+      0x2019, 0x2300, 0x2021, 0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+      0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb535, 0x2214, 0xd2ac,
-+      0x1118, 0xa092, 0x007e, 0x02d8, 0x00d6, 0xa0e8, 0xb635, 0x2d6c,
-+      0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x6810, 0xa005, 0x1140,
-+      0x6814, 0xa005, 0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x0028,
-+      0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0080, 0x00d6,
-+      0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2,
-+      0x00de, 0x20a3, 0x0000, 0x2011, 0xb515, 0x2214, 0x22a2, 0xa485,
-+      0x0098, 0x20a2, 0x20a3, 0x0000, 0x004e, 0x003e, 0x080c, 0x7d56,
-+      0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x002e, 0x0005, 0x080c, 0x7d56, 0x22a2, 0x20a3,
-+      0x0000, 0x7a08, 0x22a2, 0x7810, 0x20a2, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x002e, 0x0005, 0x00c6, 0x00f6, 0x6004, 0xa08a, 0x0085,
-+      0x0a0c, 0x1515, 0xa08a, 0x008c, 0x1a0c, 0x1515, 0x6118, 0x2178,
-+      0x79a0, 0x2011, 0xb535, 0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150,
-+      0x7900, 0xd1f4, 0x0120, 0x7914, 0xa18c, 0x00ff, 0x0040, 0x2009,
-+      0x0000, 0x0028, 0xa1f8, 0x2dc4, 0x2f0d, 0xa18c, 0x00ff, 0x2c78,
-+      0x2061, 0x0100, 0x619a, 0xa082, 0x0085, 0x001b, 0x00fe, 0x00ce,
-+      0x0005, 0x777a, 0x7784, 0x779f, 0x7778, 0x7778, 0x7778, 0x777a,
-+      0x080c, 0x1515, 0x0146, 0x20a1, 0x020b, 0x04a1, 0x60c3, 0x0000,
-+      0x080c, 0x7d67, 0x014e, 0x0005, 0x0146, 0x20a1, 0x020b, 0x080c,
-+      0x77eb, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x7810,
-+      0x20a2, 0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x60c3, 0x000c, 0x080c, 0x7d67, 0x014e, 0x0005, 0x0146,
-+      0x20a1, 0x020b, 0x080c, 0x7825, 0x20a3, 0x0003, 0x20a3, 0x0300,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x080c, 0x7d67,
-+      0x014e, 0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818,
-+      0xa080, 0x0028, 0x2004, 0x2011, 0xb535, 0x2214, 0xd2ac, 0x1118,
-+      0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810,
-+      0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb51c, 0x2da6,
-+      0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xb635, 0x2d6c,
-+      0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3,
-+      0x0000, 0x2011, 0xb515, 0x2214, 0x22a2, 0x20a3, 0x0009, 0x20a3,
-+      0x0000, 0x0804, 0x76a8, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000,
-       0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb535, 0x2214, 0xd2ac,
-       0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8, 0xb635, 0x2d6c,
--      0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb51c,
-+      0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb51c,
-       0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xb635,
--      0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, 0x00de,
--      0x20a3, 0x0000, 0x2011, 0xb515, 0x2214, 0x22a2, 0x20a3, 0x0009,
--      0x20a3, 0x0000, 0x0804, 0x76a9, 0x0026, 0x20e1, 0x9080, 0x20e1,
--      0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb535, 0x2214,
--      0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8, 0xb635,
--      0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x2069,
--      0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8,
--      0xb635, 0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2,
--      0x00de, 0x20a3, 0x0000, 0x2011, 0xb515, 0x2214, 0x22a2, 0x2001,
--      0x0099, 0x20a2, 0x20a3, 0x0000, 0x0804, 0x7735, 0x0026, 0x20e1,
--      0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011,
--      0xb535, 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6,
-+      0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x00de,
-+      0x20a3, 0x0000, 0x2011, 0xb515, 0x2214, 0x22a2, 0x2001, 0x0099,
-+      0x20a2, 0x20a3, 0x0000, 0x0804, 0x7734, 0x0026, 0x20e1, 0x9080,
-+      0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb535,
-+      0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8,
-+      0xb635, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2,
-+      0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6,
-       0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814,
--      0x20a2, 0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088,
--      0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2,
--      0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb515, 0x2214,
--      0x22a2, 0x2001, 0x0099, 0x20a2, 0x20a3, 0x0000, 0x0804, 0x7735,
--      0x00c6, 0x00f6, 0x2c78, 0x7804, 0xa08a, 0x0040, 0x0a0c, 0x1515,
--      0xa08a, 0x0053, 0x1a0c, 0x1515, 0x7918, 0x2160, 0x61a0, 0x2011,
--      0xb535, 0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x6100, 0xd1f4,
--      0x0120, 0x6114, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028,
--      0xa1e0, 0x2dc4, 0x2c0d, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a,
--      0xa082, 0x0040, 0x001b, 0x00fe, 0x00ce, 0x0005, 0x78a3, 0x79af,
--      0x794c, 0x7b61, 0x78a1, 0x78a1, 0x78a1, 0x78a1, 0x78a1, 0x78a1,
--      0x78a1, 0x80d8, 0x80e8, 0x80f8, 0x8108, 0x78a1, 0x8518, 0x78a1,
--      0x80c7, 0x080c, 0x1515, 0x00d6, 0x0156, 0x0146, 0x780b, 0xffff,
--      0x20a1, 0x020b, 0x080c, 0x7903, 0x7910, 0x2168, 0x6948, 0x7952,
--      0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184, 0x000f,
--      0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118, 0x2001, 0x0004,
--      0x0018, 0xa084, 0x0006, 0x8004, 0x0016, 0x2008, 0x7858, 0xa084,
--      0x00ff, 0x8007, 0xa105, 0x001e, 0x20a2, 0xd1ac, 0x0118, 0x20a3,
--      0x0002, 0x0048, 0xd1b4, 0x0118, 0x20a3, 0x0001, 0x0020, 0x20a3,
--      0x0000, 0x2230, 0x0010, 0x6a80, 0x6e7c, 0x20a9, 0x0008, 0x0136,
--      0xad88, 0x0017, 0x2198, 0x20a1, 0x021b, 0x53a6, 0x013e, 0x20a1,
--      0x020b, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014,
--      0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0xb7fc, 0x2003,
--      0x07d0, 0x2001, 0xb7fb, 0x2003, 0x0009, 0x080c, 0x17e2, 0x014e,
--      0x015e, 0x00de, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18,
--      0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217,
--      0x7818, 0xa080, 0x0028, 0x2004, 0x2019, 0xb535, 0x231c, 0xd3ac,
--      0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810,
--      0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb51c, 0x2da6,
--      0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xb635, 0x2d6c,
--      0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3,
--      0x0000, 0x2009, 0xb515, 0x210c, 0x21a2, 0x20a3, 0x0829, 0x20a3,
--      0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146,
--      0x20a1, 0x020b, 0x00c1, 0x7810, 0x2068, 0x6860, 0x20a2, 0x685c,
--      0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2, 0x20a2,
--      0x20a2, 0x20a2, 0x60c3, 0x000c, 0x080c, 0x7d68, 0x014e, 0x013e,
--      0x015e, 0x00de, 0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000,
--      0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb535, 0x2214, 0xd2ac,
--      0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810,
--      0xa085, 0x0500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb51c, 0x2da6,
--      0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xb635, 0x2d6c,
--      0x6810, 0xa085, 0x0500, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3,
--      0x0000, 0x2011, 0xb515, 0x2214, 0x22a2, 0x20a3, 0x0889, 0x20a3,
--      0x0000, 0x080c, 0x7d57, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2,
--      0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00d6,
--      0x0156, 0x0136, 0x0146, 0x7810, 0xa0ec, 0xf000, 0x0168, 0xa06d,
--      0x080c, 0x5302, 0x0148, 0x684c, 0xa084, 0x2020, 0xa086, 0x2020,
--      0x1118, 0x7820, 0xc0cd, 0x7822, 0x20a1, 0x020b, 0x080c, 0x7b17,
--      0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084,
--      0xf000, 0x1130, 0x7810, 0xa084, 0x0700, 0x8007, 0x0043, 0x0010,
--      0xa006, 0x002b, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x79e9,
--      0x7a7e, 0x7a8e, 0x7ac0, 0x7ad3, 0x7aee, 0x7af7, 0x79e7, 0x080c,
--      0x1515, 0x0016, 0x0036, 0x694c, 0xa18c, 0x0003, 0x0118, 0xa186,
--      0x0003, 0x1170, 0x6b78, 0x7820, 0xd0cc, 0x0108, 0xc3e5, 0x23a2,
--      0x6868, 0x20a2, 0x6864, 0x20a2, 0x003e, 0x001e, 0x0804, 0x7aca,
--      0xa186, 0x0001, 0x190c, 0x1515, 0x6b78, 0x7820, 0xd0cc, 0x0108,
--      0xc3e5, 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874,
--      0x20a2, 0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018, 0xa384, 0x0300,
--      0x0904, 0x7a78, 0xd3c4, 0x0110, 0x687c, 0xa108, 0xd3cc, 0x0110,
--      0x6874, 0xa108, 0x0156, 0x20a9, 0x000d, 0xad80, 0x0020, 0x201c,
--      0x831f, 0x23a2, 0x8000, 0x1f04, 0x7a27, 0x015e, 0x22a2, 0x22a2,
--      0x22a2, 0xa184, 0x0003, 0x0904, 0x7a78, 0x20a1, 0x020b, 0x20e1,
--      0x9080, 0x20e1, 0x4000, 0x0006, 0x7818, 0xa080, 0x0028, 0x2004,
--      0x2011, 0xb535, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6,
-+      0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb515, 0x2214, 0x22a2,
-+      0x2001, 0x0099, 0x20a2, 0x20a3, 0x0000, 0x0804, 0x7734, 0x00c6,
-+      0x00f6, 0x2c78, 0x7804, 0xa08a, 0x0040, 0x0a0c, 0x1515, 0xa08a,
-+      0x0053, 0x1a0c, 0x1515, 0x7918, 0x2160, 0x61a0, 0x2011, 0xb535,
-+      0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x6100, 0xd1f4, 0x0120,
-+      0x6114, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0,
-+      0x2dc4, 0x2c0d, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0xa082,
-+      0x0040, 0x001b, 0x00fe, 0x00ce, 0x0005, 0x78a2, 0x79ae, 0x794b,
-+      0x7b60, 0x78a0, 0x78a0, 0x78a0, 0x78a0, 0x78a0, 0x78a0, 0x78a0,
-+      0x80d7, 0x80e7, 0x80f7, 0x8107, 0x78a0, 0x851e, 0x78a0, 0x80c6,
-+      0x080c, 0x1515, 0x00d6, 0x0156, 0x0146, 0x780b, 0xffff, 0x20a1,
-+      0x020b, 0x080c, 0x7902, 0x7910, 0x2168, 0x6948, 0x7952, 0x21a2,
-+      0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184, 0x000f, 0x1118,
-+      0x2001, 0x0005, 0x0040, 0xd184, 0x0118, 0x2001, 0x0004, 0x0018,
-+      0xa084, 0x0006, 0x8004, 0x0016, 0x2008, 0x7858, 0xa084, 0x00ff,
-+      0x8007, 0xa105, 0x001e, 0x20a2, 0xd1ac, 0x0118, 0x20a3, 0x0002,
-+      0x0048, 0xd1b4, 0x0118, 0x20a3, 0x0001, 0x0020, 0x20a3, 0x0000,
-+      0x2230, 0x0010, 0x6a80, 0x6e7c, 0x20a9, 0x0008, 0x0136, 0xad88,
-+      0x0017, 0x2198, 0x20a1, 0x021b, 0x53a6, 0x013e, 0x20a1, 0x020b,
-+      0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014, 0xa084,
-+      0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0xb7fc, 0x2003, 0x07d0,
-+      0x2001, 0xb7fb, 0x2003, 0x0009, 0x080c, 0x17e2, 0x014e, 0x015e,
-+      0x00de, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280,
-+      0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818,
-+      0xa080, 0x0028, 0x2004, 0x2019, 0xb535, 0x231c, 0xd3ac, 0x1110,
-+      0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085,
-+      0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb51c, 0x2da6, 0x8d68,
-+      0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810,
-+      0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000,
-+      0x2009, 0xb515, 0x210c, 0x21a2, 0x20a3, 0x0829, 0x20a3, 0x0000,
-+      0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x20a1,
-+      0x020b, 0x00c1, 0x7810, 0x2068, 0x6860, 0x20a2, 0x685c, 0x20a2,
-+      0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2,
-+      0x20a2, 0x60c3, 0x000c, 0x080c, 0x7d67, 0x014e, 0x013e, 0x015e,
-+      0x00de, 0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818,
-+      0xa080, 0x0028, 0x2004, 0x2011, 0xb535, 0x2214, 0xd2ac, 0x1110,
-+      0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085,
-+      0x0500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb51c, 0x2da6, 0x8d68,
-+      0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810,
-+      0xa085, 0x0500, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000,
-+      0x2011, 0xb515, 0x2214, 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000,
-+      0x080c, 0x7d56, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00d6, 0x0156,
-+      0x0136, 0x0146, 0x7810, 0xa0ec, 0xf000, 0x0168, 0xa06d, 0x080c,
-+      0x5301, 0x0148, 0x684c, 0xa084, 0x2020, 0xa086, 0x2020, 0x1118,
-+      0x7820, 0xc0cd, 0x7822, 0x20a1, 0x020b, 0x080c, 0x7b16, 0xa016,
-+      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000,
-+      0x1130, 0x7810, 0xa084, 0x0700, 0x8007, 0x0043, 0x0010, 0xa006,
-+      0x002b, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x79e8, 0x7a7d,
-+      0x7a8d, 0x7abf, 0x7ad2, 0x7aed, 0x7af6, 0x79e6, 0x080c, 0x1515,
-+      0x0016, 0x0036, 0x694c, 0xa18c, 0x0003, 0x0118, 0xa186, 0x0003,
-+      0x1170, 0x6b78, 0x7820, 0xd0cc, 0x0108, 0xc3e5, 0x23a2, 0x6868,
-+      0x20a2, 0x6864, 0x20a2, 0x003e, 0x001e, 0x0804, 0x7ac9, 0xa186,
-+      0x0001, 0x190c, 0x1515, 0x6b78, 0x7820, 0xd0cc, 0x0108, 0xc3e5,
-+      0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2,
-+      0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018, 0xa384, 0x0300, 0x0904,
-+      0x7a77, 0xd3c4, 0x0110, 0x687c, 0xa108, 0xd3cc, 0x0110, 0x6874,
-+      0xa108, 0x0156, 0x20a9, 0x000d, 0xad80, 0x0020, 0x201c, 0x831f,
-+      0x23a2, 0x8000, 0x1f04, 0x7a26, 0x015e, 0x22a2, 0x22a2, 0x22a2,
-+      0xa184, 0x0003, 0x0904, 0x7a77, 0x20a1, 0x020b, 0x20e1, 0x9080,
-+      0x20e1, 0x4000, 0x0006, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011,
-+      0xb535, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8,
-+      0xb635, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
-+      0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6,
-       0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814,
--      0x20a2, 0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088,
--      0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2,
--      0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb515, 0x2214,
--      0x22a2, 0x000e, 0x7b20, 0xd3cc, 0x0118, 0x20a3, 0x0889, 0x0010,
--      0x20a3, 0x0898, 0x20a2, 0x080c, 0x7d57, 0x22a2, 0x20a3, 0x0000,
--      0x61c2, 0x003e, 0x001e, 0x080c, 0x7d68, 0x0005, 0x2011, 0x0008,
--      0x2001, 0xb50d, 0x2004, 0xd0f4, 0x0110, 0x2011, 0x0028, 0x7820,
--      0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x04d0, 0x2011, 0x0302,
--      0x0016, 0x0036, 0x7828, 0x792c, 0xa11d, 0x0108, 0xc2dd, 0x7b20,
--      0xd3cc, 0x0108, 0xc2e5, 0x22a2, 0x20a2, 0x21a2, 0x003e, 0x001e,
--      0xa016, 0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008, 0x22a2,
--      0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500, 0x22a2,
--      0x20a3, 0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2, 0x22a2,
--      0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0032, 0x080c, 0x7d68, 0x0005,
--      0x2011, 0x0028, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016,
--      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018,
--      0x080c, 0x7d68, 0x0005, 0x2011, 0x0100, 0x7820, 0xd0cc, 0x0108,
--      0xc2e5, 0x22a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
--      0x20a3, 0x0008, 0x22a2, 0x7854, 0xa084, 0x00ff, 0x20a2, 0x22a2,
--      0x22a2, 0x60c3, 0x0020, 0x080c, 0x7d68, 0x0005, 0x2011, 0x0008,
--      0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x0888, 0x0036,
--      0x7b10, 0xa384, 0xff00, 0x7812, 0xa384, 0x00ff, 0x8001, 0x1138,
--      0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0x003e, 0x0808, 0x0046,
--      0x2021, 0x0800, 0x0006, 0x7820, 0xd0cc, 0x000e, 0x0108, 0xc4e5,
--      0x24a2, 0x004e, 0x22a2, 0x20a2, 0x003e, 0x0804, 0x7aca, 0x0026,
--      0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004,
--      0x2011, 0xb535, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6,
-+      0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb515, 0x2214, 0x22a2,
-+      0x000e, 0x7b20, 0xd3cc, 0x0118, 0x20a3, 0x0889, 0x0010, 0x20a3,
-+      0x0898, 0x20a2, 0x080c, 0x7d56, 0x22a2, 0x20a3, 0x0000, 0x61c2,
-+      0x003e, 0x001e, 0x080c, 0x7d67, 0x0005, 0x2011, 0x0008, 0x2001,
-+      0xb50d, 0x2004, 0xd0f4, 0x0110, 0x2011, 0x0028, 0x7820, 0xd0cc,
-+      0x0108, 0xc2e5, 0x22a2, 0xa016, 0x04d0, 0x2011, 0x0302, 0x0016,
-+      0x0036, 0x7828, 0x792c, 0xa11d, 0x0108, 0xc2dd, 0x7b20, 0xd3cc,
-+      0x0108, 0xc2e5, 0x22a2, 0x20a2, 0x21a2, 0x003e, 0x001e, 0xa016,
-+      0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2,
-+      0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3,
-+      0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2,
-+      0x22a2, 0x22a2, 0x60c3, 0x0032, 0x080c, 0x7d67, 0x0005, 0x2011,
-+      0x0028, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x22a2,
-+      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, 0x080c,
-+      0x7d67, 0x0005, 0x2011, 0x0100, 0x7820, 0xd0cc, 0x0108, 0xc2e5,
-+      0x22a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3,
-+      0x0008, 0x22a2, 0x7854, 0xa084, 0x00ff, 0x20a2, 0x22a2, 0x22a2,
-+      0x60c3, 0x0020, 0x080c, 0x7d67, 0x0005, 0x2011, 0x0008, 0x7820,
-+      0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x0888, 0x0036, 0x7b10,
-+      0xa384, 0xff00, 0x7812, 0xa384, 0x00ff, 0x8001, 0x1138, 0x7820,
-+      0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0x003e, 0x0808, 0x0046, 0x2021,
-+      0x0800, 0x0006, 0x7820, 0xd0cc, 0x000e, 0x0108, 0xc4e5, 0x24a2,
-+      0x004e, 0x22a2, 0x20a2, 0x003e, 0x0804, 0x7ac9, 0x0026, 0x20e1,
-+      0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011,
-+      0xb535, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8,
-+      0xb635, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
-+      0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6,
-       0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814,
--      0x20a2, 0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088,
--      0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2,
--      0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb515, 0x2214,
--      0x22a2, 0x7820, 0xd0cc, 0x0118, 0x20a3, 0x0889, 0x0010, 0x20a3,
--      0x0898, 0x20a3, 0x0000, 0x080c, 0x7d57, 0x22a2, 0x20a3, 0x0000,
--      0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e,
--      0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x0016, 0x0036, 0x7810,
--      0xa084, 0x0700, 0x8007, 0x003b, 0x003e, 0x001e, 0x014e, 0x013e,
--      0x015e, 0x00de, 0x0005, 0x7b7b, 0x7b7b, 0x7b7d, 0x7b7b, 0x7b7b,
--      0x7b7b, 0x7b9f, 0x7b7b, 0x080c, 0x1515, 0x7910, 0xa18c, 0xf8ff,
--      0xa18d, 0x0600, 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x00f9,
--      0x00d6, 0x2069, 0xb552, 0x6804, 0xd0bc, 0x0130, 0x682c, 0xa084,
--      0x00ff, 0x8007, 0x20a2, 0x0010, 0x20a3, 0x3f00, 0x00de, 0x22a2,
--      0x22a2, 0x22a2, 0x60c3, 0x0001, 0x080c, 0x7d68, 0x0005, 0x20a1,
--      0x020b, 0x2009, 0x0003, 0x0019, 0x20a3, 0x7f00, 0x0c80, 0x0026,
-+      0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb515, 0x2214, 0x22a2,
-+      0x7820, 0xd0cc, 0x0118, 0x20a3, 0x0889, 0x0010, 0x20a3, 0x0898,
-+      0x20a3, 0x0000, 0x080c, 0x7d56, 0x22a2, 0x20a3, 0x0000, 0x7a08,
-+      0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005,
-+      0x00d6, 0x0156, 0x0136, 0x0146, 0x0016, 0x0036, 0x7810, 0xa084,
-+      0x0700, 0x8007, 0x003b, 0x003e, 0x001e, 0x014e, 0x013e, 0x015e,
-+      0x00de, 0x0005, 0x7b7a, 0x7b7a, 0x7b7c, 0x7b7a, 0x7b7a, 0x7b7a,
-+      0x7b9e, 0x7b7a, 0x080c, 0x1515, 0x7910, 0xa18c, 0xf8ff, 0xa18d,
-+      0x0600, 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x00f9, 0x00d6,
-+      0x2069, 0xb552, 0x6804, 0xd0bc, 0x0130, 0x682c, 0xa084, 0x00ff,
-+      0x8007, 0x20a2, 0x0010, 0x20a3, 0x3f00, 0x00de, 0x22a2, 0x22a2,
-+      0x22a2, 0x60c3, 0x0001, 0x080c, 0x7d67, 0x0005, 0x20a1, 0x020b,
-+      0x2009, 0x0003, 0x0019, 0x20a3, 0x7f00, 0x0c80, 0x0026, 0x20e1,
-+      0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011,
-+      0xb535, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8,
-+      0xb635, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2,
-+      0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6,
-+      0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814,
-+      0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb515, 0x2214, 0x22a2,
-+      0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x080c, 0x7d56, 0x22a2,
-+      0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046,
-+      0x0036, 0x2061, 0x0100, 0x2071, 0xb500, 0x7154, 0x7818, 0x2068,
-+      0x68a0, 0x2028, 0x76d4, 0xd6ac, 0x1130, 0xd0bc, 0x1120, 0x6910,
-+      0x6a14, 0x7454, 0x0020, 0x6910, 0x6a14, 0x7370, 0x7474, 0x781c,
-+      0xa0be, 0x0006, 0x0904, 0x7ca1, 0xa0be, 0x000a, 0x15e8, 0xa185,
-+      0x0200, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x2029, 0x6077,
-+      0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a,
-+      0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070,
-+      0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca,
-+      0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x609f, 0x0000,
-+      0x080c, 0x85b9, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005,
-+      0x0110, 0x2009, 0x1b58, 0x080c, 0x6a15, 0x003e, 0x004e, 0x005e,
-+      0x00ce, 0x00de, 0x00ee, 0x0005, 0x70d4, 0xd0ac, 0x1110, 0xd5bc,
-+      0x0138, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x0038,
-+      0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x6073,
-+      0x0809, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e,
-+      0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086,
-+      0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6,
-+      0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
-+      0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0xa294,
-+      0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x080c, 0x85b9, 0x2009,
-+      0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005, 0x0110, 0x2009, 0x1b58,
-+      0x080c, 0x6a15, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee,
-+      0x0005, 0x7810, 0x2070, 0x704c, 0xa084, 0x0003, 0xa086, 0x0002,
-+      0x0904, 0x7cf7, 0x2001, 0xb535, 0x2004, 0xd0ac, 0x1110, 0xd5bc,
-+      0x0138, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x0038,
-+      0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x6073,
-+      0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e,
-+      0x8007, 0x607a, 0x7834, 0x607e, 0x2f00, 0x6086, 0x7808, 0x6082,
-+      0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, 0x707c, 0x60ca,
-+      0x707c, 0x792c, 0xa108, 0x792e, 0x7080, 0x7928, 0xa109, 0x792a,
-+      0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080,
-+      0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0xa294, 0x00ff, 0x0010,
-+      0x2011, 0x0000, 0x629e, 0x080c, 0x85b6, 0x0804, 0x7c8f, 0x2001,
-+      0xb535, 0x2004, 0xd0ac, 0x1110, 0xd5bc, 0x0138, 0xa185, 0x0700,
-+      0x6062, 0x6266, 0x636a, 0x646e, 0x0038, 0xa185, 0x0700, 0x6062,
-+      0x6266, 0x606b, 0x0000, 0x646e, 0x080c, 0x5301, 0x0180, 0x00d6,
-+      0x7810, 0xa06d, 0x684c, 0x00de, 0xa084, 0x2020, 0xa086, 0x2020,
-+      0x1130, 0x7820, 0xc0cd, 0x7822, 0x6073, 0x0889, 0x0010, 0x6073,
-+      0x0898, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e,
-+      0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082,
-+      0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca,
-+      0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080,
-+      0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0xa294, 0x00ff, 0x0010,
-+      0x2011, 0x0000, 0x629e, 0x7820, 0xd0cc, 0x0120, 0x080c, 0x85b9,
-+      0x0804, 0x7c8f, 0x080c, 0x85b6, 0x0804, 0x7c8f, 0x7a18, 0xa280,
-+      0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x0005,
-+      0x00d6, 0x2069, 0xb7e0, 0x6843, 0x0001, 0x00de, 0x0005, 0x20e1,
-+      0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x0019, 0x080c, 0x6a07,
-+      0x0005, 0x0006, 0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016,
-+      0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, 0x61a4,
-+      0x60a7, 0x95f5, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008, 0x6016,
-+      0x000e, 0xe000, 0xe000, 0xe000, 0xe000, 0x61a6, 0x00ce, 0x001e,
-+      0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069,
-+      0x0140, 0x080c, 0x5acf, 0x1198, 0x2001, 0xb7fc, 0x2004, 0xa005,
-+      0x15b8, 0x0066, 0x2031, 0x0001, 0x080c, 0x5b51, 0x006e, 0x1118,
-+      0x080c, 0x6a07, 0x0468, 0x00c6, 0x2061, 0xb7e0, 0x00d8, 0x6904,
-+      0xa194, 0x4000, 0x0550, 0x0831, 0x6803, 0x1000, 0x6803, 0x0000,
-+      0x00c6, 0x2061, 0xb7e0, 0x6128, 0xa192, 0x00c8, 0x1258, 0x8108,
-+      0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x6a07, 0x080c,
-+      0x7d71, 0x0070, 0x6124, 0xa1e5, 0x0000, 0x0140, 0x080c, 0xb444,
-+      0x080c, 0x6a10, 0x2009, 0x0014, 0x080c, 0x864c, 0x00ce, 0x0000,
-+      0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0xb7fc, 0x2004,
-+      0xa005, 0x1db0, 0x00c6, 0x2061, 0xb7e0, 0x6128, 0xa192, 0x0003,
-+      0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x6a07, 0x080c, 0x4b1f,
-+      0x0c38, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x6a1d,
-+      0x2071, 0xb7e0, 0x713c, 0x81ff, 0x0590, 0x2061, 0x0100, 0x2069,
-+      0x0140, 0x080c, 0x5acf, 0x11a8, 0x0036, 0x2019, 0x0002, 0x080c,
-+      0x7fe4, 0x003e, 0x713c, 0x2160, 0x080c, 0xb444, 0x2009, 0x004a,
-+      0x080c, 0x864c, 0x0066, 0x2031, 0x0001, 0x080c, 0x5b51, 0x006e,
-+      0x00b0, 0x6904, 0xa194, 0x4000, 0x01c0, 0x6803, 0x1000, 0x6803,
-+      0x0000, 0x0036, 0x2019, 0x0001, 0x080c, 0x7fe4, 0x003e, 0x713c,
-+      0x2160, 0x080c, 0xb444, 0x2009, 0x004a, 0x080c, 0x864c, 0x002e,
-+      0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0c58, 0x0026, 0x00e6,
-+      0x2071, 0xb7e0, 0x7048, 0xd084, 0x01c0, 0x713c, 0x81ff, 0x01a8,
-+      0x2071, 0x0100, 0xa188, 0x0007, 0x2114, 0xa28e, 0x0006, 0x1138,
-+      0x7014, 0xa084, 0x0184, 0xa085, 0x0012, 0x7016, 0x0030, 0x7014,
-+      0xa084, 0x0184, 0xa085, 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005,
-+      0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126,
-+      0x2091, 0x8000, 0x6018, 0x2068, 0x6ca0, 0x2071, 0xb7e0, 0x7018,
-+      0x2068, 0x8dff, 0x0188, 0x68a0, 0xa406, 0x0118, 0x6854, 0x2068,
-+      0x0cc0, 0x6010, 0x2060, 0x643c, 0x6540, 0x6648, 0x2d60, 0x080c,
-+      0x511a, 0x0110, 0xa085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e,
-+      0x006e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x20a1, 0x020b, 0x080c,
-+      0x7641, 0x20a3, 0x1200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x781c,
-+      0xa086, 0x0004, 0x1110, 0x6098, 0x0018, 0x2001, 0xb515, 0x2004,
-+      0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a9, 0x0010, 0xa006,
-+      0x20a2, 0x1f04, 0x7ea0, 0x20a2, 0x20a2, 0x60c3, 0x002c, 0x080c,
-+      0x7d67, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x7641,
-+      0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2,
-+      0x60c3, 0x0008, 0x080c, 0x7d67, 0x014e, 0x015e, 0x0005, 0x0156,
-+      0x0146, 0x20a1, 0x020b, 0x080c, 0x76dd, 0x20a3, 0x0200, 0x20a3,
-+      0x0000, 0x20a9, 0x0006, 0x2011, 0xb540, 0x2019, 0xb541, 0x23a6,
-+      0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x1f04, 0x7ecf, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x080c, 0x7d67, 0x014e,
-+      0x015e, 0x0005, 0x0156, 0x0146, 0x0016, 0x0026, 0x20a1, 0x020b,
-+      0x080c, 0x76b6, 0x080c, 0x76cc, 0x7810, 0xa080, 0x0000, 0x2004,
-+      0xa080, 0x0015, 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6,
-+      0xa080, 0x0004, 0x8003, 0x60c2, 0x080c, 0x7d67, 0x002e, 0x001e,
-+      0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c,
-+      0x7641, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808,
-+      0x20a2, 0x60c3, 0x0008, 0x080c, 0x7d67, 0x014e, 0x015e, 0x0005,
-+      0x0156, 0x0146, 0x0016, 0x0026, 0x20a1, 0x020b, 0x080c, 0x7641,
-+      0x7810, 0xa080, 0x0000, 0x2004, 0xa080, 0x0017, 0x2098, 0x7808,
-+      0xa088, 0x0002, 0x21a8, 0x53a6, 0x8003, 0x60c2, 0x080c, 0x7d67,
-+      0x002e, 0x001e, 0x014e, 0x015e, 0x0005, 0x00e6, 0x00c6, 0x0006,
-+      0x0126, 0x2091, 0x8000, 0x2071, 0xb7e0, 0x700c, 0x2060, 0x8cff,
-+      0x0178, 0x080c, 0x9e58, 0x1110, 0x080c, 0x8c19, 0x600c, 0x0006,
-+      0x080c, 0xa01f, 0x080c, 0x861d, 0x080c, 0x811e, 0x00ce, 0x0c78,
-+      0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x000e, 0x00ce, 0x00ee,
-+      0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026,
-+      0x0016, 0x0006, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140,
-+      0x2071, 0xb7e0, 0x7024, 0x2060, 0x8cff, 0x05a0, 0x080c, 0x7d7a,
-+      0x68c3, 0x0000, 0x080c, 0x6a10, 0x2009, 0x0013, 0x080c, 0x864c,
-+      0x20a9, 0x01f4, 0x6824, 0xd094, 0x0158, 0x6827, 0x0004, 0x7804,
-+      0xa084, 0x4000, 0x01a0, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078,
-+      0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0x7f7a, 0x7804,
-+      0xa084, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824,
-+      0x000e, 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e,
-+      0x012e, 0x0005, 0x2001, 0xb500, 0x2004, 0xa096, 0x0001, 0x0590,
-+      0xa096, 0x0004, 0x0578, 0x080c, 0x6a10, 0x6814, 0xa084, 0x0001,
-+      0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011,
-+      0x4adc, 0x080c, 0x699c, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0158,
-+      0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803, 0x1000,
-+      0x7803, 0x0000, 0x0078, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010,
-+      0x1f04, 0x7fbd, 0x7804, 0xa084, 0x1000, 0x0120, 0x7803, 0x0100,
-+      0x7803, 0x0000, 0x000e, 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee,
-+      0x00fe, 0x015e, 0x012e, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6,
-+      0x00d6, 0x00c6, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2069,
-+      0x0100, 0x2079, 0x0140, 0x2071, 0xb7e0, 0x703c, 0x2060, 0x8cff,
-+      0x0904, 0x806b, 0xa386, 0x0002, 0x1128, 0x6814, 0xa084, 0x0002,
-+      0x0904, 0x806b, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa,
-+      0x8109, 0x1df0, 0x68c7, 0x0000, 0x68cb, 0x0008, 0x080c, 0x6a1d,
-+      0x080c, 0x220c, 0x0046, 0x2009, 0x017f, 0x200b, 0x00a5, 0x2021,
-+      0x0169, 0x2404, 0xa084, 0x000f, 0xa086, 0x0004, 0x1500, 0x68af,
-+      0x95f5, 0x68c7, 0x0000, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079,
-+      0x0020, 0x2071, 0xb84a, 0x6814, 0xa084, 0x0184, 0xa085, 0x0012,
-+      0x6816, 0x7803, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, 0xa386,
-+      0x0002, 0x1128, 0x7884, 0xa005, 0x1110, 0x7887, 0x0001, 0x2001,
-+      0xb7b1, 0x2004, 0x200a, 0x004e, 0xa39d, 0x0000, 0x1120, 0x2009,
-+      0x0049, 0x080c, 0x864c, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0158,
-+      0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803, 0x1000,
-+      0x7803, 0x0000, 0x0078, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010,
-+      0x1f04, 0x804d, 0x7804, 0xa084, 0x1000, 0x0120, 0x7803, 0x0100,
-+      0x7803, 0x0000, 0x6824, 0x000e, 0x001e, 0x002e, 0x00ce, 0x00de,
-+      0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126, 0x2091,
-+      0x8000, 0x2069, 0xb7e0, 0x6a06, 0x012e, 0x00de, 0x0005, 0x00d6,
-+      0x0126, 0x2091, 0x8000, 0x2069, 0xb7e0, 0x6a32, 0x012e, 0x00de,
-+      0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0006, 0x0126, 0x2071,
-+      0xb7e0, 0x7614, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0538,
-+      0x601c, 0xa206, 0x1500, 0x7014, 0xac36, 0x1110, 0x660c, 0x7616,
-+      0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7012,
-+      0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110,
-+      0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0x9e1d, 0x080c,
-+      0x811e, 0x00ce, 0x08d8, 0x2c78, 0x600c, 0x2060, 0x08b8, 0x012e,
-+      0x000e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0156, 0x0146,
-+      0x20a1, 0x020b, 0x080c, 0x7902, 0x7810, 0x20a2, 0xa006, 0x20a2,
-+      0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x1000, 0x0804, 0x8116, 0x0156,
-+      0x0146, 0x20a1, 0x020b, 0x080c, 0x7902, 0x7810, 0x20a2, 0xa006,
-+      0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x4000, 0x0478, 0x0156,
-+      0x0146, 0x20a1, 0x020b, 0x080c, 0x7902, 0x7810, 0x20a2, 0xa006,
-+      0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x00f8, 0x0156,
-+      0x0146, 0x20a1, 0x020b, 0x080c, 0x7902, 0x7810, 0x20a2, 0xa006,
-+      0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x0156,
-+      0x0146, 0x20a1, 0x020b, 0x080c, 0x7902, 0x7810, 0x20a2, 0xa006,
-+      0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x0089, 0x60c3,
-+      0x0020, 0x080c, 0x7d67, 0x014e, 0x015e, 0x0005, 0x00e6, 0x2071,
-+      0xb7e0, 0x7020, 0xa005, 0x0110, 0x8001, 0x7022, 0x00ee, 0x0005,
-+      0x20a9, 0x0008, 0x20a2, 0x1f04, 0x812a, 0x20a2, 0x20a2, 0x0005,
-+      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126,
-+      0x2091, 0x8000, 0x2071, 0xb7e0, 0x7614, 0x2660, 0x2678, 0x2039,
-+      0x0001, 0x87ff, 0x0904, 0x81c6, 0x8cff, 0x0904, 0x81c6, 0x601c,
-+      0xa086, 0x0006, 0x1904, 0x81c1, 0x88ff, 0x0138, 0x2800, 0xac06,
-+      0x1904, 0x81c1, 0x2039, 0x0000, 0x0050, 0x6018, 0xa206, 0x1904,
-+      0x81c1, 0x85ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x81c1, 0x7024,
-+      0xac06, 0x1598, 0x2069, 0x0100, 0x68c0, 0xa005, 0x1160, 0x6824,
-+      0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x6a10, 0x080c, 0x824d,
-+      0x7027, 0x0000, 0x0410, 0x080c, 0x6a10, 0x6820, 0xd0b4, 0x0110,
-+      0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, 0x824d,
-+      0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
-+      0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824,
-+      0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7014, 0xac36, 0x1110,
-+      0x660c, 0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118,
-+      0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00,
-+      0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1158, 0x600f,
-+      0x0000, 0x6010, 0x2068, 0x080c, 0x9c5a, 0x0110, 0x080c, 0xb099,
-+      0x080c, 0x9e1d, 0x080c, 0x811e, 0x88ff, 0x1190, 0x00ce, 0x0804,
-+      0x8141, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8141, 0xa006, 0x012e,
-+      0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
-+      0x6017, 0x0000, 0x00ce, 0xa8c5, 0x0001, 0x0c88, 0x00f6, 0x00e6,
-+      0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000,
-+      0x2071, 0xb7e0, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0x823d,
-+      0x601c, 0xa086, 0x0006, 0x1904, 0x8238, 0x87ff, 0x0128, 0x2700,
-+      0xac06, 0x1904, 0x8238, 0x0048, 0x6018, 0xa206, 0x1904, 0x8238,
-+      0x85ff, 0x0118, 0x6050, 0xa106, 0x15d8, 0x703c, 0xac06, 0x1180,
-+      0x0036, 0x2019, 0x0001, 0x080c, 0x7fe4, 0x7033, 0x0000, 0x703f,
-+      0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b, 0x0000, 0x003e,
-+      0x7038, 0xac36, 0x1110, 0x660c, 0x763a, 0x7034, 0xac36, 0x1140,
-+      0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,
-+      0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+      0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0x9c5a, 0x0110, 0x080c,
-+      0xb099, 0x080c, 0x9e1d, 0x87ff, 0x1190, 0x00ce, 0x0804, 0x81e5,
-+      0x2c78, 0x600c, 0x2060, 0x0804, 0x81e5, 0xa006, 0x012e, 0x000e,
-+      0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6017,
-+      0x0000, 0x00ce, 0xa7bd, 0x0001, 0x0c88, 0x00e6, 0x2071, 0xb7e0,
-+      0x2001, 0xb500, 0x2004, 0xa086, 0x0002, 0x1118, 0x7007, 0x0005,
-+      0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6,
-+      0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xb7e0,
-+      0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200, 0xac06,
-+      0x11e0, 0x7038, 0xac36, 0x1110, 0x660c, 0x763a, 0x7034, 0xac36,
-+      0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037,
-+      0x0000, 0x660c, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+      0x600f, 0x0000, 0xa085, 0x0001, 0x0020, 0x2c78, 0x600c, 0x2060,
-+      0x08d8, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe,
-+      0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0006, 0x0126,
-+      0x2091, 0x8000, 0x2071, 0xb7e0, 0x760c, 0x2660, 0x2678, 0x8cff,
-+      0x0904, 0x8323, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x1904,
-+      0x831e, 0x7024, 0xac06, 0x1508, 0x2069, 0x0100, 0x68c0, 0xa005,
-+      0x0904, 0x82fa, 0x080c, 0x7d7a, 0x68c3, 0x0000, 0x080c, 0x824d,
-+      0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
-+      0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824,
-+      0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0xac36, 0x1110,
-+      0x660c, 0x760e, 0x7008, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118,
-+      0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00,
-+      0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c,
-+      0x9e47, 0x1158, 0x080c, 0x2cc2, 0x080c, 0x9e58, 0x11f0, 0x080c,
-+      0x8c19, 0x00d8, 0x080c, 0x824d, 0x08c0, 0x080c, 0x9e58, 0x1118,
-+      0x080c, 0x8c19, 0x0090, 0x6010, 0x2068, 0x080c, 0x9c5a, 0x0168,
-+      0x601c, 0xa086, 0x0003, 0x11f8, 0x6837, 0x0103, 0x6b4a, 0x6847,
-+      0x0000, 0x080c, 0x5408, 0x080c, 0x9e11, 0x080c, 0xa01f, 0x080c,
-+      0x9e1d, 0x080c, 0x811e, 0x00ce, 0x0804, 0x82a7, 0x2c78, 0x600c,
-+      0x2060, 0x0804, 0x82a7, 0x012e, 0x000e, 0x006e, 0x00ce, 0x00de,
-+      0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x1d30, 0x080c,
-+      0xb099, 0x0c18, 0x0036, 0x0156, 0x0136, 0x0146, 0x3908, 0xa006,
-+      0xa190, 0x0020, 0x221c, 0xa39e, 0x2ab7, 0x1118, 0x8210, 0x8000,
-+      0x0cc8, 0xa005, 0x0138, 0x20a9, 0x0020, 0x2198, 0xa110, 0x22a0,
-+      0x22c8, 0x53a3, 0x014e, 0x013e, 0x015e, 0x003e, 0x0005, 0x00d6,
-+      0x20a1, 0x020b, 0x080c, 0x76dd, 0x20a3, 0x0200, 0x20a3, 0x0014,
-+      0x60c3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2099, 0xb7b9,
-+      0x20a9, 0x0004, 0x53a6, 0x20a3, 0x0004, 0x20a3, 0x7878, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x080c, 0x7d67, 0x00de, 0x0005, 0x20a1,
-+      0x020b, 0x080c, 0x76dd, 0x20a3, 0x0214, 0x20a3, 0x0018, 0x20a3,
-+      0x0800, 0x7810, 0xa084, 0xff00, 0x20a2, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7810, 0xa084, 0x00ff,
-+      0x20a2, 0x7828, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+      0x0018, 0x080c, 0x7d67, 0x0005, 0x00d6, 0x0016, 0x2f68, 0x2009,
-+      0x0035, 0x080c, 0xa10a, 0x1904, 0x8402, 0x20a1, 0x020b, 0x080c,
-+      0x7641, 0x20a3, 0x1300, 0x20a3, 0x0000, 0x7828, 0x2068, 0x681c,
-+      0xa086, 0x0003, 0x0580, 0x7818, 0xa080, 0x0028, 0x2014, 0x2001,
-+      0xb535, 0x2004, 0xd0ac, 0x11d0, 0xa286, 0x007e, 0x1128, 0x20a3,
-+      0x00ff, 0x20a3, 0xfffe, 0x04b8, 0xa286, 0x007f, 0x1128, 0x20a3,
-+      0x00ff, 0x20a3, 0xfffd, 0x0478, 0xd2bc, 0x0180, 0xa286, 0x0080,
-+      0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffc, 0x0428, 0xa2e8, 0xb635,
-+      0x2d6c, 0x6810, 0x20a2, 0x6814, 0x20a2, 0x00e8, 0x20a3, 0x0000,
-+      0x6098, 0x20a2, 0x00c0, 0x2001, 0xb535, 0x2004, 0xd0ac, 0x1138,
-+      0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007e, 0x0240, 0x00d6,
-+      0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0020, 0x20a3,
-+      0x0000, 0x6034, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c, 0x080c, 0x7d67, 0x001e,
-+      0x00de, 0x0005, 0x7817, 0x0001, 0x7803, 0x0006, 0x001e, 0x00de,
-+      0x0005, 0x00d6, 0x0026, 0x7928, 0x2168, 0x691c, 0xa186, 0x0006,
-+      0x01c0, 0xa186, 0x0003, 0x0904, 0x8478, 0xa186, 0x0005, 0x0904,
-+      0x8461, 0xa186, 0x0004, 0x05b8, 0xa186, 0x0008, 0x0904, 0x8469,
-+      0x7807, 0x0037, 0x7813, 0x1700, 0x080c, 0x84e0, 0x002e, 0x00de,
-+      0x0005, 0x080c, 0x849c, 0x2009, 0x4000, 0x6800, 0x0002, 0x8442,
-+      0x844d, 0x8444, 0x844d, 0x8449, 0x8442, 0x8442, 0x844d, 0x844d,
-+      0x844d, 0x844d, 0x8442, 0x8442, 0x8442, 0x8442, 0x8442, 0x844d,
-+      0x8442, 0x844d, 0x080c, 0x1515, 0x6820, 0xd0e4, 0x0110, 0xd0cc,
-+      0x0110, 0xa00e, 0x0010, 0x2009, 0x2000, 0x6828, 0x20a2, 0x682c,
-+      0x20a2, 0x0804, 0x8492, 0x080c, 0x849c, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x2009, 0x4000, 0x6a00, 0xa286, 0x0002, 0x1108, 0xa00e,
-+      0x0488, 0x04d1, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000,
-+      0x0448, 0x0491, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000,
-+      0xa286, 0x0005, 0x0118, 0xa286, 0x0002, 0x1108, 0xa00e, 0x00d0,
-+      0x0419, 0x6810, 0x2068, 0x697c, 0x6810, 0xa112, 0x6980, 0x6814,
-+      0xa103, 0x20a2, 0x22a2, 0x7928, 0xa180, 0x0000, 0x2004, 0xa08e,
-+      0x0002, 0x0130, 0xa08e, 0x0004, 0x0118, 0x2009, 0x4000, 0x0010,
-+      0x2009, 0x0000, 0x21a2, 0x20a3, 0x0000, 0x60c3, 0x0018, 0x080c,
-+      0x7d67, 0x002e, 0x00de, 0x0005, 0x0036, 0x0046, 0x0056, 0x0066,
-+      0x20a1, 0x020b, 0x080c, 0x76dd, 0xa006, 0x20a3, 0x0200, 0x20a2,
-+      0x7934, 0x21a2, 0x7938, 0x21a2, 0x7818, 0xa080, 0x0028, 0x2004,
-+      0x2011, 0xb535, 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0268,
-+      0x00d6, 0x2069, 0xb51c, 0x2d2c, 0x8d68, 0x2d34, 0xa0e8, 0xb635,
-+      0x2d6c, 0x6b10, 0x6c14, 0x00de, 0x0030, 0x2019, 0x0000, 0x6498,
-+      0x2029, 0x0000, 0x6634, 0x7828, 0xa080, 0x0007, 0x2004, 0xa086,
-+      0x0003, 0x1128, 0x25a2, 0x26a2, 0x23a2, 0x24a2, 0x0020, 0x23a2,
-+      0x24a2, 0x25a2, 0x26a2, 0x006e, 0x005e, 0x004e, 0x003e, 0x0005,
-+      0x20a1, 0x020b, 0x080c, 0x76dd, 0x20a3, 0x0100, 0x20a3, 0x0000,
-+      0x20a3, 0x0009, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x7d67,
-+      0x0005, 0x20a1, 0x020b, 0x080c, 0x7639, 0x20a3, 0x1400, 0x20a3,
-+      0x0000, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x7828, 0x20a2, 0x782c,
-+      0x20a2, 0x7830, 0xa084, 0x00ff, 0x8007, 0x20a2, 0x20a3, 0x0000,
-+      0x60c3, 0x0010, 0x080c, 0x7d67, 0x0005, 0x20a1, 0x020b, 0x080c,
-+      0x76d5, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0x20a2, 0x7810,
-+      0x20a2, 0x60c3, 0x0008, 0x080c, 0x7d67, 0x0005, 0x0146, 0x20a1,
-+      0x020b, 0x0031, 0x60c3, 0x0000, 0x080c, 0x7d67, 0x014e, 0x0005,
-       0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004,
-       0x2011, 0xb535, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6,
--      0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814,
--      0x20a2, 0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088,
--      0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2,
--      0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb515, 0x2214,
--      0x22a2, 0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x080c, 0x7d57,
--      0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0056,
--      0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0xb500, 0x7154, 0x7818,
--      0x2068, 0x68a0, 0x2028, 0x76d4, 0xd6ac, 0x1130, 0xd0bc, 0x1120,
--      0x6910, 0x6a14, 0x7454, 0x0020, 0x6910, 0x6a14, 0x7370, 0x7474,
--      0x781c, 0xa0be, 0x0006, 0x0904, 0x7ca2, 0xa0be, 0x000a, 0x15e8,
--      0xa185, 0x0200, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x2029,
--      0x6077, 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007,
--      0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810,
--      0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008,
--      0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x609f,
--      0x0000, 0x080c, 0x85b3, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0,
--      0xa005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x6a16, 0x003e, 0x004e,
--      0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x70d4, 0xd0ac, 0x1110,
--      0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e,
--      0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e,
--      0x6073, 0x0809, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff,
--      0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808,
--      0x6086, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c,
--      0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7,
--      0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14,
--      0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x080c, 0x85b3,
--      0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005, 0x0110, 0x2009,
--      0x1b58, 0x080c, 0x6a16, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de,
--      0x00ee, 0x0005, 0x7810, 0x2070, 0x704c, 0xa084, 0x0003, 0xa086,
--      0x0002, 0x0904, 0x7cf8, 0x2001, 0xb535, 0x2004, 0xd0ac, 0x1110,
--      0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e,
--      0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e,
--      0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff,
--      0x688e, 0x8007, 0x607a, 0x7834, 0x607e, 0x2f00, 0x6086, 0x7808,
--      0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, 0x707c,
--      0x60ca, 0x707c, 0x792c, 0xa108, 0x792e, 0x7080, 0x7928, 0xa109,
--      0x792a, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582,
--      0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0xa294, 0x00ff,
--      0x0010, 0x2011, 0x0000, 0x629e, 0x080c, 0x85b0, 0x0804, 0x7c90,
--      0x2001, 0xb535, 0x2004, 0xd0ac, 0x1110, 0xd5bc, 0x0138, 0xa185,
--      0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x0038, 0xa185, 0x0700,
--      0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x080c, 0x5302, 0x0180,
--      0x00d6, 0x7810, 0xa06d, 0x684c, 0x00de, 0xa084, 0x2020, 0xa086,
--      0x2020, 0x1130, 0x7820, 0xc0cd, 0x7822, 0x6073, 0x0889, 0x0010,
--      0x6073, 0x0898, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff,
--      0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808,
--      0x6082, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008,
--      0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582,
--      0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0xa294, 0x00ff,
--      0x0010, 0x2011, 0x0000, 0x629e, 0x7820, 0xd0cc, 0x0120, 0x080c,
--      0x85b3, 0x0804, 0x7c90, 0x080c, 0x85b0, 0x0804, 0x7c90, 0x7a18,
--      0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217,
--      0x0005, 0x00d6, 0x2069, 0xb7e0, 0x6843, 0x0001, 0x00de, 0x0005,
--      0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x0019, 0x080c,
--      0x6a08, 0x0005, 0x0006, 0x6014, 0xa084, 0x0004, 0xa085, 0x0009,
--      0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100,
--      0x61a4, 0x60a7, 0x95f5, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008,
--      0x6016, 0x000e, 0xe000, 0xe000, 0xe000, 0xe000, 0x61a6, 0x00ce,
--      0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100,
--      0x2069, 0x0140, 0x080c, 0x5ad0, 0x1198, 0x2001, 0xb7fc, 0x2004,
--      0xa005, 0x15b8, 0x0066, 0x2031, 0x0001, 0x080c, 0x5b52, 0x006e,
--      0x1118, 0x080c, 0x6a08, 0x0468, 0x00c6, 0x2061, 0xb7e0, 0x00d8,
--      0x6904, 0xa194, 0x4000, 0x0550, 0x0831, 0x6803, 0x1000, 0x6803,
--      0x0000, 0x00c6, 0x2061, 0xb7e0, 0x6128, 0xa192, 0x00c8, 0x1258,
--      0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x6a08,
--      0x080c, 0x7d72, 0x0070, 0x6124, 0xa1e5, 0x0000, 0x0140, 0x080c,
--      0xb438, 0x080c, 0x6a11, 0x2009, 0x0014, 0x080c, 0x8646, 0x00ce,
--      0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0xb7fc,
--      0x2004, 0xa005, 0x1db0, 0x00c6, 0x2061, 0xb7e0, 0x6128, 0xa192,
--      0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x6a08, 0x080c,
--      0x4b20, 0x0c38, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c,
--      0x6a1e, 0x2071, 0xb7e0, 0x713c, 0x81ff, 0x0590, 0x2061, 0x0100,
--      0x2069, 0x0140, 0x080c, 0x5ad0, 0x11a8, 0x0036, 0x2019, 0x0002,
--      0x080c, 0x7fe5, 0x003e, 0x713c, 0x2160, 0x080c, 0xb438, 0x2009,
--      0x004a, 0x080c, 0x8646, 0x0066, 0x2031, 0x0001, 0x080c, 0x5b52,
--      0x006e, 0x00b0, 0x6904, 0xa194, 0x4000, 0x01c0, 0x6803, 0x1000,
--      0x6803, 0x0000, 0x0036, 0x2019, 0x0001, 0x080c, 0x7fe5, 0x003e,
--      0x713c, 0x2160, 0x080c, 0xb438, 0x2009, 0x004a, 0x080c, 0x8646,
--      0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0c58, 0x0026,
--      0x00e6, 0x2071, 0xb7e0, 0x7048, 0xd084, 0x01c0, 0x713c, 0x81ff,
--      0x01a8, 0x2071, 0x0100, 0xa188, 0x0007, 0x2114, 0xa28e, 0x0006,
--      0x1138, 0x7014, 0xa084, 0x0184, 0xa085, 0x0012, 0x7016, 0x0030,
--      0x7014, 0xa084, 0x0184, 0xa085, 0x0016, 0x7016, 0x00ee, 0x002e,
--      0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006,
--      0x0126, 0x2091, 0x8000, 0x6018, 0x2068, 0x6ca0, 0x2071, 0xb7e0,
--      0x7018, 0x2068, 0x8dff, 0x0188, 0x68a0, 0xa406, 0x0118, 0x6854,
--      0x2068, 0x0cc0, 0x6010, 0x2060, 0x643c, 0x6540, 0x6648, 0x2d60,
--      0x080c, 0x511b, 0x0110, 0xa085, 0x0001, 0x012e, 0x000e, 0x004e,
--      0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x20a1, 0x020b,
--      0x080c, 0x7642, 0x20a3, 0x1200, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x781c, 0xa086, 0x0004, 0x1110, 0x6098, 0x0018, 0x2001, 0xb515,
--      0x2004, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a9, 0x0010,
--      0xa006, 0x20a2, 0x1f04, 0x7ea1, 0x20a2, 0x20a2, 0x60c3, 0x002c,
--      0x080c, 0x7d68, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c,
--      0x7642, 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808,
--      0x20a2, 0x60c3, 0x0008, 0x080c, 0x7d68, 0x014e, 0x015e, 0x0005,
--      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x76de, 0x20a3, 0x0200,
--      0x20a3, 0x0000, 0x20a9, 0x0006, 0x2011, 0xb540, 0x2019, 0xb541,
--      0x23a6, 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x1f04, 0x7ed0,
--      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x080c, 0x7d68,
--      0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x0016, 0x0026, 0x20a1,
--      0x020b, 0x080c, 0x76b7, 0x080c, 0x76cd, 0x7810, 0xa080, 0x0000,
--      0x2004, 0xa080, 0x0015, 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8,
--      0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2, 0x080c, 0x7d68, 0x002e,
--      0x001e, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b,
--      0x080c, 0x7642, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x7808, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x7d68, 0x014e, 0x015e,
--      0x0005, 0x0156, 0x0146, 0x0016, 0x0026, 0x20a1, 0x020b, 0x080c,
--      0x7642, 0x7810, 0xa080, 0x0000, 0x2004, 0xa080, 0x0017, 0x2098,
--      0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0x8003, 0x60c2, 0x080c,
--      0x7d68, 0x002e, 0x001e, 0x014e, 0x015e, 0x0005, 0x00e6, 0x00c6,
--      0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xb7e0, 0x700c, 0x2060,
--      0x8cff, 0x0178, 0x080c, 0x9e52, 0x1110, 0x080c, 0x8c13, 0x600c,
--      0x0006, 0x080c, 0xa019, 0x080c, 0x8617, 0x080c, 0x811f, 0x00ce,
--      0x0c78, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x000e, 0x00ce,
--      0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
--      0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079,
--      0x0140, 0x2071, 0xb7e0, 0x7024, 0x2060, 0x8cff, 0x05a0, 0x080c,
--      0x7d7b, 0x68c3, 0x0000, 0x080c, 0x6a11, 0x2009, 0x0013, 0x080c,
--      0x8646, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0158, 0x6827, 0x0004,
--      0x7804, 0xa084, 0x4000, 0x01a0, 0x7803, 0x1000, 0x7803, 0x0000,
--      0x0078, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0x7f7b,
--      0x7804, 0xa084, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000,
--      0x6824, 0x000e, 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
--      0x015e, 0x012e, 0x0005, 0x2001, 0xb500, 0x2004, 0xa096, 0x0001,
--      0x0590, 0xa096, 0x0004, 0x0578, 0x080c, 0x6a11, 0x6814, 0xa084,
--      0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,
--      0x2011, 0x4add, 0x080c, 0x699d, 0x20a9, 0x01f4, 0x6824, 0xd094,
--      0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803,
--      0x1000, 0x7803, 0x0000, 0x0078, 0xd084, 0x0118, 0x6827, 0x0001,
--      0x0010, 0x1f04, 0x7fbe, 0x7804, 0xa084, 0x1000, 0x0120, 0x7803,
--      0x0100, 0x7803, 0x0000, 0x000e, 0x001e, 0x002e, 0x00ce, 0x00de,
--      0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x0126, 0x0156, 0x00f6,
--      0x00e6, 0x00d6, 0x00c6, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000,
--      0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0xb7e0, 0x703c, 0x2060,
--      0x8cff, 0x0904, 0x806c, 0xa386, 0x0002, 0x1128, 0x6814, 0xa084,
--      0x0002, 0x0904, 0x806c, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009,
--      0x00fa, 0x8109, 0x1df0, 0x68c7, 0x0000, 0x68cb, 0x0008, 0x080c,
--      0x6a1e, 0x080c, 0x220c, 0x0046, 0x2009, 0x017f, 0x200b, 0x00a5,
--      0x2021, 0x0169, 0x2404, 0xa084, 0x000f, 0xa086, 0x0004, 0x1500,
--      0x68af, 0x95f5, 0x68c7, 0x0000, 0x68cb, 0x0008, 0x00e6, 0x00f6,
--      0x2079, 0x0020, 0x2071, 0xb84a, 0x6814, 0xa084, 0x0184, 0xa085,
--      0x0012, 0x6816, 0x7803, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee,
--      0xa386, 0x0002, 0x1128, 0x7884, 0xa005, 0x1110, 0x7887, 0x0001,
--      0x2001, 0xb7b1, 0x2004, 0x200a, 0x004e, 0xa39d, 0x0000, 0x1120,
--      0x2009, 0x0049, 0x080c, 0x8646, 0x20a9, 0x03e8, 0x6824, 0xd094,
--      0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803,
--      0x1000, 0x7803, 0x0000, 0x0078, 0xd08c, 0x0118, 0x6827, 0x0002,
--      0x0010, 0x1f04, 0x804e, 0x7804, 0xa084, 0x1000, 0x0120, 0x7803,
--      0x0100, 0x7803, 0x0000, 0x6824, 0x000e, 0x001e, 0x002e, 0x00ce,
--      0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126,
--      0x2091, 0x8000, 0x2069, 0xb7e0, 0x6a06, 0x012e, 0x00de, 0x0005,
--      0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0xb7e0, 0x6a32, 0x012e,
--      0x00de, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0006, 0x0126,
--      0x2071, 0xb7e0, 0x7614, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff,
--      0x0538, 0x601c, 0xa206, 0x1500, 0x7014, 0xac36, 0x1110, 0x660c,
--      0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00,
--      0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06,
--      0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0x9e17,
--      0x080c, 0x811f, 0x00ce, 0x08d8, 0x2c78, 0x600c, 0x2060, 0x08b8,
--      0x012e, 0x000e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0156,
--      0x0146, 0x20a1, 0x020b, 0x080c, 0x7903, 0x7810, 0x20a2, 0xa006,
--      0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x1000, 0x0804, 0x8117,
--      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x7903, 0x7810, 0x20a2,
--      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x4000, 0x0478,
--      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x7903, 0x7810, 0x20a2,
--      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x00f8,
--      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x7903, 0x7810, 0x20a2,
--      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078,
--      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x7903, 0x7810, 0x20a2,
--      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x0089,
--      0x60c3, 0x0020, 0x080c, 0x7d68, 0x014e, 0x015e, 0x0005, 0x00e6,
--      0x2071, 0xb7e0, 0x7020, 0xa005, 0x0110, 0x8001, 0x7022, 0x00ee,
--      0x0005, 0x20a9, 0x0008, 0x20a2, 0x1f04, 0x812b, 0x20a2, 0x20a2,
--      0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006,
--      0x0126, 0x2091, 0x8000, 0x2071, 0xb7e0, 0x7614, 0x2660, 0x2678,
--      0x2039, 0x0001, 0x87ff, 0x0904, 0x81c0, 0x8cff, 0x0904, 0x81c0,
--      0x601c, 0xa086, 0x0006, 0x1904, 0x81bb, 0x88ff, 0x0138, 0x2800,
--      0xac06, 0x1904, 0x81bb, 0x2039, 0x0000, 0x0050, 0x6018, 0xa206,
--      0x1904, 0x81bb, 0x85ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x81bb,
--      0x7024, 0xac06, 0x1560, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0518,
--      0x080c, 0x6a11, 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817,
--      0x0008, 0x68c3, 0x0000, 0x080c, 0x8247, 0x7027, 0x0000, 0x0036,
--      0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, 0x0100,
--      0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
--      0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a, 0x0460, 0x7014,
--      0xac36, 0x1110, 0x660c, 0x7616, 0x7010, 0xac36, 0x1140, 0x2c00,
--      0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c,
--      0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff,
--      0x1158, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0x9c54, 0x0110,
--      0x080c, 0xb08d, 0x080c, 0x9e17, 0x080c, 0x811f, 0x88ff, 0x1190,
--      0x00ce, 0x0804, 0x8142, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8142,
--      0xa006, 0x012e, 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee,
--      0x00fe, 0x0005, 0x6017, 0x0000, 0x00ce, 0xa8c5, 0x0001, 0x0c88,
--      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126,
--      0x2091, 0x8000, 0x2071, 0xb7e0, 0x7638, 0x2660, 0x2678, 0x8cff,
--      0x0904, 0x8237, 0x601c, 0xa086, 0x0006, 0x1904, 0x8232, 0x87ff,
--      0x0128, 0x2700, 0xac06, 0x1904, 0x8232, 0x0048, 0x6018, 0xa206,
--      0x1904, 0x8232, 0x85ff, 0x0118, 0x6050, 0xa106, 0x15d8, 0x703c,
--      0xac06, 0x1180, 0x0036, 0x2019, 0x0001, 0x080c, 0x7fe5, 0x7033,
--      0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b,
--      0x0000, 0x003e, 0x7038, 0xac36, 0x1110, 0x660c, 0x763a, 0x7034,
--      0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010,
--      0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e,
--      0x0008, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0x9c54,
--      0x0110, 0x080c, 0xb08d, 0x080c, 0x9e17, 0x87ff, 0x1190, 0x00ce,
--      0x0804, 0x81df, 0x2c78, 0x600c, 0x2060, 0x0804, 0x81df, 0xa006,
--      0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
--      0x0005, 0x6017, 0x0000, 0x00ce, 0xa7bd, 0x0001, 0x0c88, 0x00e6,
--      0x2071, 0xb7e0, 0x2001, 0xb500, 0x2004, 0xa086, 0x0002, 0x1118,
--      0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6,
--      0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000,
--      0x2071, 0xb7e0, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0518,
--      0x2200, 0xac06, 0x11e0, 0x7038, 0xac36, 0x1110, 0x660c, 0x763a,
--      0x7034, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036,
--      0x0010, 0x7037, 0x0000, 0x660c, 0x2c00, 0xaf06, 0x0110, 0x7e0e,
--      0x0008, 0x2678, 0x600f, 0x0000, 0xa085, 0x0001, 0x0020, 0x2c78,
--      0x600c, 0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce,
--      0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066,
--      0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xb7e0, 0x760c, 0x2660,
--      0x2678, 0x8cff, 0x0904, 0x831d, 0x6018, 0xa080, 0x0028, 0x2004,
--      0xa206, 0x1904, 0x8318, 0x7024, 0xac06, 0x1508, 0x2069, 0x0100,
--      0x68c0, 0xa005, 0x0904, 0x82f4, 0x080c, 0x7d7b, 0x68c3, 0x0000,
--      0x080c, 0x8247, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
--      0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069,
--      0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c,
--      0xac36, 0x1110, 0x660c, 0x760e, 0x7008, 0xac36, 0x1140, 0x2c00,
--      0xaf36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c,
--      0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
--      0x0000, 0x080c, 0x9e41, 0x1158, 0x080c, 0x2cc2, 0x080c, 0x9e52,
--      0x11f0, 0x080c, 0x8c13, 0x00d8, 0x080c, 0x8247, 0x08c0, 0x080c,
--      0x9e52, 0x1118, 0x080c, 0x8c13, 0x0090, 0x6010, 0x2068, 0x080c,
--      0x9c54, 0x0168, 0x601c, 0xa086, 0x0003, 0x11f8, 0x6837, 0x0103,
--      0x6b4a, 0x6847, 0x0000, 0x080c, 0x5409, 0x080c, 0x9e0b, 0x080c,
--      0xa019, 0x080c, 0x9e17, 0x080c, 0x811f, 0x00ce, 0x0804, 0x82a1,
--      0x2c78, 0x600c, 0x2060, 0x0804, 0x82a1, 0x012e, 0x000e, 0x006e,
--      0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006,
--      0x1d30, 0x080c, 0xb08d, 0x0c18, 0x0036, 0x0156, 0x0136, 0x0146,
--      0x3908, 0xa006, 0xa190, 0x0020, 0x221c, 0xa39e, 0x2ab7, 0x1118,
--      0x8210, 0x8000, 0x0cc8, 0xa005, 0x0138, 0x20a9, 0x0020, 0x2198,
--      0xa110, 0x22a0, 0x22c8, 0x53a3, 0x014e, 0x013e, 0x015e, 0x003e,
--      0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x76de, 0x20a3, 0x0200,
--      0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x2099, 0xb7b9, 0x20a9, 0x0004, 0x53a6, 0x20a3, 0x0004, 0x20a3,
--      0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x080c, 0x7d68, 0x00de,
--      0x0005, 0x20a1, 0x020b, 0x080c, 0x76de, 0x20a3, 0x0214, 0x20a3,
--      0x0018, 0x20a3, 0x0800, 0x7810, 0xa084, 0xff00, 0x20a2, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7810,
--      0xa084, 0x00ff, 0x20a2, 0x7828, 0x20a2, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x60c3, 0x0018, 0x080c, 0x7d68, 0x0005, 0x00d6, 0x0016,
--      0x2f68, 0x2009, 0x0035, 0x080c, 0xa104, 0x1904, 0x83fc, 0x20a1,
--      0x020b, 0x080c, 0x7642, 0x20a3, 0x1300, 0x20a3, 0x0000, 0x7828,
--      0x2068, 0x681c, 0xa086, 0x0003, 0x0580, 0x7818, 0xa080, 0x0028,
--      0x2014, 0x2001, 0xb535, 0x2004, 0xd0ac, 0x11d0, 0xa286, 0x007e,
--      0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x04b8, 0xa286, 0x007f,
--      0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffd, 0x0478, 0xd2bc, 0x0180,
--      0xa286, 0x0080, 0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffc, 0x0428,
--      0xa2e8, 0xb635, 0x2d6c, 0x6810, 0x20a2, 0x6814, 0x20a2, 0x00e8,
--      0x20a3, 0x0000, 0x6098, 0x20a2, 0x00c0, 0x2001, 0xb535, 0x2004,
--      0xd0ac, 0x1138, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007e,
--      0x0240, 0x00d6, 0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
--      0x0020, 0x20a3, 0x0000, 0x6034, 0x20a2, 0x7834, 0x20a2, 0x7838,
--      0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c, 0x080c,
--      0x7d68, 0x001e, 0x00de, 0x0005, 0x7817, 0x0001, 0x7803, 0x0006,
--      0x001e, 0x00de, 0x0005, 0x00d6, 0x0026, 0x7928, 0x2168, 0x691c,
--      0xa186, 0x0006, 0x01c0, 0xa186, 0x0003, 0x0904, 0x8472, 0xa186,
--      0x0005, 0x0904, 0x845b, 0xa186, 0x0004, 0x05b8, 0xa186, 0x0008,
--      0x0904, 0x8463, 0x7807, 0x0037, 0x7813, 0x1700, 0x080c, 0x84da,
--      0x002e, 0x00de, 0x0005, 0x080c, 0x8496, 0x2009, 0x4000, 0x6800,
--      0x0002, 0x843c, 0x8447, 0x843e, 0x8447, 0x8443, 0x843c, 0x843c,
--      0x8447, 0x8447, 0x8447, 0x8447, 0x843c, 0x843c, 0x843c, 0x843c,
--      0x843c, 0x8447, 0x843c, 0x8447, 0x080c, 0x1515, 0x6820, 0xd0e4,
--      0x0110, 0xd0cc, 0x0110, 0xa00e, 0x0010, 0x2009, 0x2000, 0x6828,
--      0x20a2, 0x682c, 0x20a2, 0x0804, 0x848c, 0x080c, 0x8496, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x2009, 0x4000, 0x6a00, 0xa286, 0x0002,
--      0x1108, 0xa00e, 0x0488, 0x04d1, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x2009, 0x4000, 0x0448, 0x0491, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x2009, 0x4000, 0xa286, 0x0005, 0x0118, 0xa286, 0x0002, 0x1108,
--      0xa00e, 0x00d0, 0x0419, 0x6810, 0x2068, 0x697c, 0x6810, 0xa112,
--      0x6980, 0x6814, 0xa103, 0x20a2, 0x22a2, 0x7928, 0xa180, 0x0000,
--      0x2004, 0xa08e, 0x0002, 0x0130, 0xa08e, 0x0004, 0x0118, 0x2009,
--      0x4000, 0x0010, 0x2009, 0x0000, 0x21a2, 0x20a3, 0x0000, 0x60c3,
--      0x0018, 0x080c, 0x7d68, 0x002e, 0x00de, 0x0005, 0x0036, 0x0046,
--      0x0056, 0x0066, 0x20a1, 0x020b, 0x080c, 0x76de, 0xa006, 0x20a3,
--      0x0200, 0x20a2, 0x7934, 0x21a2, 0x7938, 0x21a2, 0x7818, 0xa080,
--      0x0028, 0x2004, 0x2011, 0xb535, 0x2214, 0xd2ac, 0x1118, 0xa092,
--      0x007e, 0x0268, 0x00d6, 0x2069, 0xb51c, 0x2d2c, 0x8d68, 0x2d34,
--      0xa0e8, 0xb635, 0x2d6c, 0x6b10, 0x6c14, 0x00de, 0x0030, 0x2019,
--      0x0000, 0x6498, 0x2029, 0x0000, 0x6634, 0x7828, 0xa080, 0x0007,
--      0x2004, 0xa086, 0x0003, 0x1128, 0x25a2, 0x26a2, 0x23a2, 0x24a2,
--      0x0020, 0x23a2, 0x24a2, 0x25a2, 0x26a2, 0x006e, 0x005e, 0x004e,
--      0x003e, 0x0005, 0x20a1, 0x020b, 0x080c, 0x76de, 0x20a3, 0x0100,
--      0x20a3, 0x0000, 0x20a3, 0x0009, 0x7810, 0x20a2, 0x60c3, 0x0008,
--      0x080c, 0x7d68, 0x0005, 0x20a1, 0x020b, 0x080c, 0x763a, 0x20a3,
--      0x1400, 0x20a3, 0x0000, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x7828,
--      0x20a2, 0x782c, 0x20a2, 0x7830, 0xa084, 0x00ff, 0x8007, 0x20a2,
--      0x20a3, 0x0000, 0x60c3, 0x0010, 0x080c, 0x7d68, 0x0005, 0x20a1,
--      0x020b, 0x080c, 0x76d6, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828,
--      0x20a2, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x7d68, 0x0005,
--      0x0146, 0x20a1, 0x020b, 0x0031, 0x60c3, 0x0000, 0x080c, 0x7d68,
--      0x014e, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
--      0x0028, 0x2004, 0x2011, 0xb535, 0x2214, 0xd2ac, 0x1110, 0xd0bc,
--      0x0188, 0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085, 0x0300,
--      0x20a2, 0x6814, 0x20a2, 0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6,
--      0x00de, 0x0078, 0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085,
--      0x0300, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x6234,
--      0x22a2, 0x20a3, 0x0819, 0x20a3, 0x0000, 0x080c, 0x7d57, 0x22a2,
--      0x20a3, 0x0000, 0x2fa2, 0x7a08, 0x22a2, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x0005, 0x20a1, 0x020b, 0x0079, 0x7910, 0x21a2, 0x20a3,
--      0x0000, 0x60c3, 0x0000, 0x20e1, 0x9080, 0x60a7, 0x9575, 0x080c,
--      0x7d72, 0x080c, 0x6a08, 0x0005, 0x0156, 0x0136, 0x0036, 0x00d6,
--      0x00e6, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7854, 0x2068, 0xadf0,
--      0x000f, 0x7210, 0xa296, 0x00c0, 0xa294, 0xfffd, 0x7212, 0x7214,
--      0xa294, 0x0300, 0x7216, 0x7100, 0xa194, 0x00ff, 0x7308, 0xa384,
--      0x00ff, 0xa08d, 0xc200, 0x7102, 0xa384, 0xff00, 0xa215, 0x720a,
--      0x7004, 0x720c, 0x700e, 0x7206, 0x20a9, 0x000a, 0x2e98, 0x53a6,
--      0x60a3, 0x0035, 0x6a38, 0xa294, 0x7000, 0xa286, 0x3000, 0x0110,
--      0x60a3, 0x0037, 0x00ee, 0x00de, 0x003e, 0x013e, 0x015e, 0x0005,
--      0x2009, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116,
--      0x0005, 0x2061, 0xbd00, 0x2a70, 0x7068, 0x704a, 0x704f, 0xbd00,
--      0x0005, 0x00e6, 0x0126, 0x2071, 0xb500, 0x2091, 0x8000, 0x7548,
--      0xa582, 0x0010, 0x0608, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000,
-+      0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085, 0x0300, 0x20a2, 0x6814,
-+      0x20a2, 0x2069, 0xb51c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0078,
-+      0x00d6, 0xa0e8, 0xb635, 0x2d6c, 0x6810, 0xa085, 0x0300, 0x20a2,
-+      0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x6234, 0x22a2, 0x20a3,
-+      0x0819, 0x20a3, 0x0000, 0x080c, 0x7d56, 0x22a2, 0x20a3, 0x0000,
-+      0x2fa2, 0x7a08, 0x22a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x0005,
-+      0x20a1, 0x020b, 0x0079, 0x7910, 0x21a2, 0x20a3, 0x0000, 0x60c3,
-+      0x0000, 0x20e1, 0x9080, 0x60a7, 0x9575, 0x080c, 0x7d71, 0x080c,
-+      0x6a07, 0x0005, 0x0156, 0x0136, 0x0036, 0x00d6, 0x00e6, 0x20e1,
-+      0x9080, 0x20e1, 0x4000, 0x7854, 0x2068, 0xadf0, 0x000f, 0x7210,
-+      0xa296, 0x00c0, 0xa294, 0xfffd, 0x7212, 0x7214, 0xa294, 0x0300,
-+      0x7216, 0x7100, 0xa194, 0x00ff, 0x7308, 0xa384, 0x00ff, 0xa08d,
-+      0xc200, 0x7102, 0xa384, 0xff00, 0xa215, 0x720a, 0x7004, 0x720c,
-+      0x700e, 0x7206, 0x20a9, 0x000a, 0x2e98, 0x53a6, 0x60a3, 0x0035,
-+      0x6a38, 0xa294, 0x7000, 0xa286, 0x3000, 0x0110, 0x60a3, 0x0037,
-+      0x00ee, 0x00de, 0x003e, 0x013e, 0x015e, 0x0005, 0x2009, 0x0092,
-+      0x0010, 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, 0x0005, 0x2061,
-+      0xbd00, 0x2a70, 0x7068, 0x704a, 0x704f, 0xbd00, 0x0005, 0x00e6,
-+      0x0126, 0x2071, 0xb500, 0x2091, 0x8000, 0x7548, 0xa582, 0x0010,
-+      0x0608, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0148, 0xace0,
-+      0x0018, 0x705c, 0xac02, 0x1208, 0x0cb0, 0x2061, 0xbd00, 0x0c98,
-+      0x6003, 0x0008, 0x8529, 0x754a, 0xaca8, 0x0018, 0x705c, 0xa502,
-+      0x1230, 0x754e, 0xa085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x704f,
-+      0xbd00, 0x0cc0, 0xa006, 0x0cc0, 0x00e6, 0x2071, 0xb500, 0x7548,
-+      0xa582, 0x0010, 0x0600, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000,
-       0x0148, 0xace0, 0x0018, 0x705c, 0xac02, 0x1208, 0x0cb0, 0x2061,
-       0xbd00, 0x0c98, 0x6003, 0x0008, 0x8529, 0x754a, 0xaca8, 0x0018,
--      0x705c, 0xa502, 0x1230, 0x754e, 0xa085, 0x0001, 0x012e, 0x00ee,
--      0x0005, 0x704f, 0xbd00, 0x0cc0, 0xa006, 0x0cc0, 0x00e6, 0x2071,
--      0xb500, 0x7548, 0xa582, 0x0010, 0x0600, 0x704c, 0x2060, 0x6000,
--      0xa086, 0x0000, 0x0148, 0xace0, 0x0018, 0x705c, 0xac02, 0x1208,
--      0x0cb0, 0x2061, 0xbd00, 0x0c98, 0x6003, 0x0008, 0x8529, 0x754a,
--      0xaca8, 0x0018, 0x705c, 0xa502, 0x1228, 0x754e, 0xa085, 0x0001,
--      0x00ee, 0x0005, 0x704f, 0xbd00, 0x0cc8, 0xa006, 0x0cc8, 0xac82,
--      0xbd00, 0x0a0c, 0x1515, 0x2001, 0xb517, 0x2004, 0xac02, 0x1a0c,
--      0x1515, 0xa006, 0x6006, 0x600a, 0x600e, 0x6012, 0x6016, 0x601a,
--      0x601f, 0x0000, 0x6003, 0x0000, 0x6052, 0x6056, 0x6022, 0x6026,
--      0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e, 0x2061, 0xb500,
--      0x6048, 0x8000, 0x604a, 0xa086, 0x0001, 0x0108, 0x0005, 0x0126,
--      0x2091, 0x8000, 0x080c, 0x7174, 0x012e, 0x0cc0, 0x601c, 0xa084,
--      0x000f, 0x0002, 0x8655, 0x8664, 0x867f, 0x869a, 0xa148, 0xa163,
--      0xa17e, 0x8655, 0x8664, 0x8655, 0x86b5, 0xa186, 0x0013, 0x1128,
--      0x080c, 0x7091, 0x080c, 0x7174, 0x0005, 0xa18e, 0x0047, 0x1118,
--      0xa016, 0x080c, 0x185e, 0x0005, 0x0066, 0x6000, 0xa0b2, 0x0010,
--      0x1a0c, 0x1515, 0x0013, 0x006e, 0x0005, 0x867d, 0x8a95, 0x8c4d,
--      0x867d, 0x8cc2, 0x8773, 0x867d, 0x867d, 0x8a27, 0x90e9, 0x867d,
--      0x867d, 0x867d, 0x867d, 0x867d, 0x867d, 0x080c, 0x1515, 0x0066,
--      0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1515, 0x0013, 0x006e, 0x0005,
--      0x8698, 0x971c, 0x8698, 0x8698, 0x8698, 0x8698, 0x8698, 0x8698,
--      0x96c7, 0x9888, 0x8698, 0x9749, 0x97c0, 0x9749, 0x97c0, 0x8698,
--      0x080c, 0x1515, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1515,
--      0x0013, 0x006e, 0x0005, 0x86b3, 0x912a, 0x91f4, 0x932f, 0x948b,
--      0x86b3, 0x86b3, 0x86b3, 0x9104, 0x9677, 0x967a, 0x86b3, 0x86b3,
--      0x86b3, 0x86b3, 0x96a4, 0x080c, 0x1515, 0x0066, 0x6000, 0xa0b2,
--      0x0010, 0x1a0c, 0x1515, 0x0013, 0x006e, 0x0005, 0x86ce, 0x86ce,
--      0x86ce, 0x86fc, 0x8749, 0x86ce, 0x86ce, 0x86ce, 0x86d0, 0x86ce,
--      0x86ce, 0x86ce, 0x86ce, 0x86ce, 0x86ce, 0x86ce, 0x080c, 0x1515,
--      0xa186, 0x0003, 0x190c, 0x1515, 0x00d6, 0x6003, 0x0003, 0x6106,
--      0x6010, 0x2068, 0x684f, 0x0040, 0x687c, 0x680a, 0x6880, 0x680e,
--      0x6813, 0x0000, 0x6817, 0x0000, 0x6854, 0xa092, 0x199a, 0x0210,
--      0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0xa210, 0x6216, 0x00de,
--      0x2c10, 0x080c, 0x1fa9, 0x080c, 0x6cf1, 0x0126, 0x2091, 0x8000,
--      0x080c, 0x7231, 0x012e, 0x0005, 0xa182, 0x0047, 0x0002, 0x8708,
--      0x8708, 0x870a, 0x8723, 0x8708, 0x8708, 0x8708, 0x8708, 0x8735,
--      0x080c, 0x1515, 0x00d6, 0x0016, 0x080c, 0x7127, 0x080c, 0x7231,
--      0x6003, 0x0004, 0x6110, 0x2168, 0x684f, 0x0020, 0x685c, 0x685a,
--      0x6874, 0x687e, 0x6878, 0x6882, 0x6897, 0x0000, 0x689b, 0x0000,
--      0x001e, 0x00de, 0x0005, 0x080c, 0x7127, 0x00d6, 0x6110, 0x2168,
--      0x080c, 0x9c54, 0x0120, 0x684b, 0x0006, 0x080c, 0x5409, 0x00de,
--      0x080c, 0x8617, 0x080c, 0x7231, 0x0005, 0x080c, 0x7127, 0x080c,
--      0x2c9c, 0x00d6, 0x6110, 0x2168, 0x080c, 0x9c54, 0x0120, 0x684b,
--      0x0029, 0x080c, 0x5409, 0x00de, 0x080c, 0x8617, 0x080c, 0x7231,
--      0x0005, 0xa182, 0x0047, 0x0002, 0x8757, 0x8766, 0x8755, 0x8755,
--      0x8755, 0x8755, 0x8755, 0x8755, 0x8755, 0x080c, 0x1515, 0x00d6,
--      0x6010, 0x2068, 0x684c, 0xc0f4, 0x684e, 0x00de, 0x20e1, 0x0005,
--      0x3d18, 0x3e20, 0x2c10, 0x080c, 0x185e, 0x0005, 0x00d6, 0x6110,
--      0x2168, 0x684b, 0x0000, 0x6853, 0x0000, 0x080c, 0x5409, 0x00de,
--      0x080c, 0x8617, 0x0005, 0xa1b6, 0x0015, 0x1118, 0x080c, 0x8617,
--      0x0030, 0xa1b6, 0x0016, 0x190c, 0x1515, 0x080c, 0x8617, 0x0005,
--      0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006,
--      0x3310, 0x3420, 0x9398, 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326,
--      0xa290, 0x0002, 0xa5a8, 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002,
--      0x1f04, 0x878e, 0x00e6, 0x080c, 0x9c54, 0x0130, 0x6010, 0x2070,
--      0x7007, 0x0000, 0x7037, 0x0103, 0x00ee, 0x080c, 0x8617, 0x0005,
--      0x00d6, 0x0036, 0x7330, 0xa386, 0x0200, 0x1130, 0x6018, 0x2068,
--      0x6813, 0x00ff, 0x6817, 0xfffd, 0x6010, 0xa005, 0x0130, 0x2068,
--      0x6807, 0x0000, 0x6837, 0x0103, 0x6b32, 0x080c, 0x8617, 0x003e,
--      0x00de, 0x0005, 0x0016, 0x20a9, 0x002a, 0xae80, 0x000c, 0x2098,
--      0x6010, 0xa080, 0x0002, 0x20a0, 0x53a3, 0x20a9, 0x002a, 0x6010,
--      0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x20a0, 0x53a3, 0x00e6,
--      0x6010, 0x2004, 0x2070, 0x7037, 0x0103, 0x00ee, 0x080c, 0x8617,
--      0x001e, 0x0005, 0x0016, 0x2009, 0x0000, 0x7030, 0xa086, 0x0100,
--      0x0140, 0x7038, 0xa084, 0x00ff, 0x800c, 0x703c, 0xa084, 0x00ff,
--      0x8004, 0xa080, 0x0004, 0xa108, 0x21a8, 0xae80, 0x000c, 0x2098,
--      0x6010, 0xa080, 0x0002, 0x20a0, 0x080c, 0x4b90, 0x00e6, 0x080c,
--      0x9c54, 0x0140, 0x6010, 0x2070, 0x7007, 0x0000, 0x7034, 0x70b2,
--      0x7037, 0x0103, 0x00ee, 0x080c, 0x8617, 0x001e, 0x0005, 0x00e6,
--      0x00d6, 0x603f, 0x0000, 0x2c68, 0x0016, 0x2009, 0x0035, 0x080c,
--      0xa104, 0x001e, 0x1168, 0x0026, 0x6228, 0x2268, 0x002e, 0x2071,
--      0xbb8c, 0x6b1c, 0xa386, 0x0003, 0x0130, 0xa386, 0x0006, 0x0128,
--      0x080c, 0x8617, 0x0020, 0x0031, 0x0010, 0x080c, 0x88f0, 0x00de,
--      0x00ee, 0x0005, 0x00f6, 0x6810, 0x2078, 0xa186, 0x0015, 0x0904,
--      0x88d7, 0xa18e, 0x0016, 0x1904, 0x88ee, 0x700c, 0xa08c, 0xff00,
--      0xa186, 0x1700, 0x0120, 0xa186, 0x0300, 0x1904, 0x88b6, 0x8fff,
--      0x1138, 0x6800, 0xa086, 0x000f, 0x0904, 0x889a, 0x0804, 0x88ec,
--      0x6808, 0xa086, 0xffff, 0x1904, 0x88d9, 0x784c, 0xa084, 0x0060,
--      0xa086, 0x0020, 0x1150, 0x797c, 0x7810, 0xa106, 0x1904, 0x88d9,
--      0x7980, 0x7814, 0xa106, 0x1904, 0x88d9, 0x080c, 0x9e0b, 0x6858,
--      0x7852, 0x784c, 0xc0dc, 0xc0f4, 0xc0d4, 0x784e, 0x0026, 0xa00e,
--      0x6a14, 0x2001, 0x000a, 0x080c, 0x6b41, 0x7854, 0xa20a, 0x0208,
--      0x8011, 0x7a56, 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c,
--      0x9a03, 0x00ce, 0x0804, 0x88ec, 0x00c6, 0x00d6, 0x2f68, 0x6838,
--      0xd0fc, 0x1118, 0x080c, 0x4c65, 0x0010, 0x080c, 0x4e4a, 0x00de,
--      0x00ce, 0x1904, 0x88d9, 0x00c6, 0x2d60, 0x080c, 0x8617, 0x00ce,
--      0x0804, 0x88ec, 0x00c6, 0x080c, 0x9ed0, 0x0190, 0x6013, 0x0000,
--      0x6818, 0x601a, 0x080c, 0xa021, 0x601f, 0x0003, 0x6904, 0x00c6,
--      0x2d60, 0x080c, 0x8617, 0x00ce, 0x080c, 0x8646, 0x00ce, 0x04e0,
--      0x2001, 0xb7b8, 0x2004, 0x683e, 0x00ce, 0x04b0, 0x7008, 0xa086,
--      0x000b, 0x11a0, 0x6018, 0x200c, 0xc1bc, 0x2102, 0x00c6, 0x2d60,
--      0x7853, 0x0003, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002,
--      0x080c, 0x6c8e, 0x080c, 0x7174, 0x00ce, 0x00f0, 0x700c, 0xa086,
--      0x2a00, 0x1138, 0x2001, 0xb7b8, 0x2004, 0x683e, 0x00a8, 0x0481,
--      0x00a8, 0x8fff, 0x090c, 0x1515, 0x00c6, 0x00d6, 0x2d60, 0x2f68,
--      0x6837, 0x0103, 0x684b, 0x0003, 0x080c, 0x98f7, 0x080c, 0x9e0b,
--      0x080c, 0x9e17, 0x00de, 0x00ce, 0x080c, 0x8617, 0x00fe, 0x0005,
--      0xa186, 0x0015, 0x1128, 0x2001, 0xb7b8, 0x2004, 0x683e, 0x0068,
--      0xa18e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, 0xb32e,
--      0x080c, 0x6af0, 0x080c, 0x8617, 0x00ce, 0x080c, 0x8617, 0x0005,
--      0x0026, 0x0036, 0x0046, 0x7228, 0x7c80, 0x7b7c, 0xd2f4, 0x0130,
--      0x2001, 0xb7b8, 0x2004, 0x683e, 0x0804, 0x896a, 0x00c6, 0x2d60,
--      0x080c, 0x9917, 0x00ce, 0x6804, 0xa086, 0x0050, 0x1168, 0x00c6,
--      0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x6c8e,
--      0x080c, 0x7174, 0x00ce, 0x04f0, 0x6800, 0xa086, 0x000f, 0x01c8,
--      0x8fff, 0x090c, 0x1515, 0x6820, 0xd0dc, 0x1198, 0x6800, 0xa086,
--      0x0004, 0x1198, 0x784c, 0xd0ac, 0x0180, 0x784c, 0xc0dc, 0xc0f4,
--      0x784e, 0x7850, 0xc0f4, 0xc0fc, 0x7852, 0x2001, 0x0001, 0x682e,
--      0x00e0, 0x2001, 0x0007, 0x682e, 0x00c0, 0x784c, 0xd0b4, 0x1130,
--      0xd0ac, 0x0db8, 0x784c, 0xd0f4, 0x1da0, 0x0c38, 0xd2ec, 0x1d88,
--      0x7024, 0xa306, 0x1118, 0x7020, 0xa406, 0x0d58, 0x7020, 0x6836,
--      0x7024, 0x683a, 0x2001, 0x0005, 0x682e, 0x080c, 0x9f5d, 0x080c,
--      0x7174, 0x0010, 0x080c, 0x8617, 0x004e, 0x003e, 0x002e, 0x0005,
--      0x00e6, 0x00d6, 0x0026, 0x6034, 0x2068, 0x6a1c, 0xa286, 0x0007,
--      0x0904, 0x89ce, 0xa286, 0x0002, 0x0904, 0x89ce, 0xa286, 0x0000,
--      0x0904, 0x89ce, 0x6808, 0x6338, 0xa306, 0x1904, 0x89ce, 0x2071,
--      0xbb8c, 0xa186, 0x0015, 0x05e0, 0xa18e, 0x0016, 0x1190, 0x6030,
--      0xa084, 0x00ff, 0xa086, 0x0001, 0x1160, 0x700c, 0xa086, 0x2a00,
--      0x1140, 0x6034, 0xa080, 0x0008, 0x200c, 0xc1dd, 0xc1f5, 0x2102,
--      0x0438, 0x00c6, 0x6034, 0x2060, 0x6104, 0xa186, 0x004b, 0x01a0,
--      0xa186, 0x004c, 0x0188, 0xa186, 0x004d, 0x0170, 0xa186, 0x004e,
--      0x0158, 0xa186, 0x0052, 0x0140, 0x6010, 0x2068, 0x080c, 0x9c54,
--      0x090c, 0x1515, 0x6853, 0x0003, 0x6007, 0x0085, 0x6003, 0x000b,
--      0x601f, 0x0002, 0x080c, 0x6c8e, 0x080c, 0x7174, 0x00ce, 0x0030,
--      0x6034, 0x2070, 0x2001, 0xb7b8, 0x2004, 0x703e, 0x080c, 0x8617,
--      0x002e, 0x00de, 0x00ee, 0x0005, 0x00d6, 0x20a9, 0x000e, 0x2e98,
--      0x6010, 0x20a0, 0x53a3, 0xa1b6, 0x0015, 0x1558, 0x6018, 0x2068,
--      0x0156, 0x0036, 0x0026, 0xae90, 0x000c, 0xa290, 0x0004, 0x20a9,
--      0x0004, 0xad98, 0x000a, 0x080c, 0x90d4, 0x002e, 0x003e, 0x015e,
--      0x11d8, 0x0156, 0x0036, 0x0026, 0xae90, 0x000c, 0xa290, 0x0008,
--      0x20a9, 0x0004, 0xad98, 0x0006, 0x080c, 0x90d4, 0x002e, 0x003e,
--      0x015e, 0x1150, 0x7038, 0x680a, 0x703c, 0x680e, 0x6800, 0xc08d,
--      0x6802, 0x00de, 0x0804, 0x879a, 0x080c, 0x2c9c, 0x00c6, 0x080c,
--      0x85c1, 0x2f00, 0x601a, 0x6013, 0x0000, 0x601f, 0x0001, 0x6007,
--      0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x4efe, 0x080c,
--      0x4f2b, 0x080c, 0x6cd4, 0x080c, 0x7174, 0x00ce, 0x0c10, 0x2100,
--      0xa1b2, 0x0080, 0x1a0c, 0x1515, 0xa1b2, 0x0040, 0x1a04, 0x8a8b,
--      0x0002, 0x8a7f, 0x8a73, 0x8a7f, 0x8a7f, 0x8a7f, 0x8a7f, 0x8a71,
--      0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71,
--      0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71,
--      0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71,
--      0x8a7f, 0x8a71, 0x8a7f, 0x8a7f, 0x8a71, 0x8a71, 0x8a71, 0x8a71,
--      0x8a71, 0x8a7f, 0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71,
--      0x8a71, 0x8a71, 0x8a71, 0x8a7f, 0x8a7f, 0x8a71, 0x8a71, 0x8a71,
--      0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a71, 0x8a7f, 0x8a71,
--      0x8a71, 0x080c, 0x1515, 0x6003, 0x0001, 0x6106, 0x080c, 0x6cd4,
--      0x0126, 0x2091, 0x8000, 0x080c, 0x7174, 0x012e, 0x0005, 0x6003,
--      0x0001, 0x6106, 0x080c, 0x6cd4, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x7174, 0x012e, 0x0005, 0x2600, 0x0002, 0x8a7f, 0x8a7f, 0x8a93,
--      0x8a7f, 0x8a7f, 0x8a93, 0x080c, 0x1515, 0x6004, 0xa0b2, 0x0080,
--      0x1a0c, 0x1515, 0xa1b6, 0x0013, 0x0904, 0x8b45, 0xa1b6, 0x0027,
--      0x1904, 0x8b0b, 0x080c, 0x7091, 0x6004, 0x080c, 0x9e41, 0x0190,
--      0x080c, 0x9e52, 0x0904, 0x8b05, 0xa08e, 0x0021, 0x0904, 0x8b08,
--      0xa08e, 0x0022, 0x0904, 0x8b05, 0xa08e, 0x003d, 0x0904, 0x8b08,
--      0x0804, 0x8afe, 0x080c, 0x2cc2, 0x2001, 0x0007, 0x080c, 0x4efe,
--      0x6018, 0xa080, 0x0028, 0x200c, 0x080c, 0x8c13, 0xa186, 0x007e,
--      0x1148, 0x2001, 0xb535, 0x2014, 0xc285, 0x080c, 0x5ad0, 0x1108,
--      0xc2ad, 0x2202, 0x0016, 0x0026, 0x0036, 0x2110, 0x0026, 0x2019,
--      0x0028, 0x080c, 0x8293, 0x002e, 0x080c, 0xb381, 0x003e, 0x002e,
--      0x001e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, 0x080c,
--      0x6df6, 0x0076, 0x2039, 0x0000, 0x080c, 0x6d03, 0x00c6, 0x6018,
--      0xa065, 0x0110, 0x080c, 0x51ab, 0x00ce, 0x2c08, 0x080c, 0xae76,
--      0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0x4f6d, 0x080c, 0xa019,
--      0x080c, 0x8617, 0x080c, 0x7174, 0x0005, 0x080c, 0x8c13, 0x0cb0,
--      0x080c, 0x8c41, 0x0c98, 0xa186, 0x0014, 0x1db0, 0x080c, 0x7091,
--      0x080c, 0x2c9c, 0x080c, 0x9e41, 0x1188, 0x080c, 0x2cc2, 0x6018,
--      0xa080, 0x0028, 0x200c, 0x080c, 0x8c13, 0xa186, 0x007e, 0x1128,
--      0x2001, 0xb535, 0x200c, 0xc185, 0x2102, 0x08c0, 0x080c, 0x9e52,
--      0x1118, 0x080c, 0x8c13, 0x0890, 0x6004, 0xa08e, 0x0032, 0x1158,
--      0x00e6, 0x00f6, 0x2071, 0xb582, 0x2079, 0x0000, 0x080c, 0x2fcf,
--      0x00fe, 0x00ee, 0x0818, 0x6004, 0xa08e, 0x0021, 0x0d50, 0xa08e,
--      0x0022, 0x090c, 0x8c13, 0x0804, 0x8afe, 0xa0b2, 0x0040, 0x1a04,
--      0x8c08, 0x2008, 0x0002, 0x8b8d, 0x8b8e, 0x8b91, 0x8b94, 0x8b97,
--      0x8b9a, 0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b,
--      0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b,
--      0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b,
--      0x8b8b, 0x8b9d, 0x8bac, 0x8b8b, 0x8bae, 0x8bac, 0x8b8b, 0x8b8b,
--      0x8b8b, 0x8b8b, 0x8b8b, 0x8bac, 0x8bac, 0x8b8b, 0x8b8b, 0x8b8b,
--      0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b, 0x8b8b, 0x8be8, 0x8bac, 0x8b8b,
--      0x8ba8, 0x8b8b, 0x8b8b, 0x8b8b, 0x8ba9, 0x8b8b, 0x8b8b, 0x8b8b,
--      0x8bac, 0x8bdf, 0x8b8b, 0x080c, 0x1515, 0x00f0, 0x2001, 0x000b,
--      0x0460, 0x2001, 0x0003, 0x0448, 0x2001, 0x0005, 0x0430, 0x2001,
--      0x0001, 0x0418, 0x2001, 0x0009, 0x0400, 0x080c, 0x7091, 0x6003,
--      0x0005, 0x2001, 0xb7b8, 0x2004, 0x603e, 0x080c, 0x7174, 0x00a0,
--      0x0018, 0x0010, 0x080c, 0x4efe, 0x0804, 0x8bf9, 0x080c, 0x7091,
--      0x2001, 0xb7b6, 0x2004, 0x6016, 0x2001, 0xb7b8, 0x2004, 0x603e,
--      0x6003, 0x0004, 0x080c, 0x7174, 0x0005, 0x080c, 0x4efe, 0x080c,
--      0x7091, 0x6003, 0x0002, 0x2001, 0xb7b8, 0x2004, 0x603e, 0x0036,
--      0x2019, 0xb55d, 0x2304, 0xa084, 0xff00, 0x1120, 0x2001, 0xb7b6,
--      0x201c, 0x0040, 0x8007, 0xa09a, 0x0004, 0x0ec0, 0x8003, 0x801b,
--      0x831b, 0xa318, 0x6316, 0x003e, 0x080c, 0x7174, 0x08e8, 0x080c,
--      0x7091, 0x080c, 0xa019, 0x080c, 0x8617, 0x080c, 0x7174, 0x08a0,
--      0x00e6, 0x00f6, 0x2071, 0xb582, 0x2079, 0x0000, 0x080c, 0x2fcf,
--      0x00fe, 0x00ee, 0x080c, 0x7091, 0x080c, 0x8617, 0x080c, 0x7174,
--      0x0818, 0x080c, 0x7091, 0x2001, 0xb7b8, 0x2004, 0x603e, 0x6003,
--      0x0002, 0x2001, 0xb7b6, 0x2004, 0x6016, 0x080c, 0x7174, 0x0005,
--      0x2600, 0x2008, 0x0002, 0x8c11, 0x8c11, 0x8c11, 0x8bf9, 0x8bf9,
--      0x8c11, 0x080c, 0x1515, 0x00e6, 0x0026, 0x0016, 0x080c, 0x9c54,
--      0x0508, 0x6010, 0x2070, 0x7034, 0xa086, 0x0139, 0x1148, 0x2001,
--      0x0030, 0x2009, 0x0000, 0x2011, 0x4005, 0x080c, 0xa0d0, 0x0090,
--      0x7038, 0xd0fc, 0x0178, 0x7007, 0x0000, 0x0016, 0x6004, 0xa08e,
--      0x0021, 0x0160, 0xa08e, 0x003d, 0x0148, 0x001e, 0x7037, 0x0103,
--      0x7033, 0x0100, 0x001e, 0x002e, 0x00ee, 0x0005, 0x001e, 0x0009,
--      0x0cc8, 0x00e6, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037,
--      0x0103, 0x7023, 0x8001, 0x00ee, 0x0005, 0x00d6, 0x6618, 0x2668,
--      0x6804, 0xa084, 0x00ff, 0x00de, 0xa0b2, 0x000c, 0x1a0c, 0x1515,
--      0x6604, 0xa6b6, 0x0043, 0x1120, 0x080c, 0xa08c, 0x0804, 0x8cb2,
--      0x6604, 0xa6b6, 0x0033, 0x1120, 0x080c, 0xa03c, 0x0804, 0x8cb2,
--      0x6604, 0xa6b6, 0x0028, 0x1120, 0x080c, 0x9e82, 0x0804, 0x8cb2,
--      0x6604, 0xa6b6, 0x0029, 0x1118, 0x080c, 0x9e99, 0x04d8, 0x6604,
--      0xa6b6, 0x001f, 0x1118, 0x080c, 0x8780, 0x04a0, 0x6604, 0xa6b6,
--      0x0000, 0x1118, 0x080c, 0x89d4, 0x0468, 0x6604, 0xa6b6, 0x0022,
--      0x1118, 0x080c, 0x87a8, 0x0430, 0x6604, 0xa6b6, 0x0035, 0x1118,
--      0x080c, 0x880f, 0x00f8, 0x6604, 0xa6b6, 0x0039, 0x1118, 0x080c,
--      0x8970, 0x00c0, 0x6604, 0xa6b6, 0x003d, 0x1118, 0x080c, 0x87c2,
--      0x0088, 0x6604, 0xa6b6, 0x0044, 0x1118, 0x080c, 0x87e2, 0x0050,
--      0xa1b6, 0x0015, 0x1110, 0x0053, 0x0028, 0xa1b6, 0x0016, 0x1118,
--      0x0804, 0x8e76, 0x0005, 0x080c, 0x865d, 0x0ce0, 0x8cd9, 0x8cdc,
--      0x8cd9, 0x8d1e, 0x8cd9, 0x8e03, 0x8e84, 0x8cd9, 0x8cd9, 0x8e52,
--      0x8cd9, 0x8e66, 0xa1b6, 0x0048, 0x0140, 0x20e1, 0x0005, 0x3d18,
--      0x3e20, 0x2c10, 0x080c, 0x185e, 0x0005, 0x00e6, 0xacf0, 0x0004,
--      0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x00ee, 0x080c, 0x8617,
--      0x0005, 0xe000, 0xe000, 0x0005, 0x00e6, 0x2071, 0xb500, 0x7084,
--      0xa086, 0x0074, 0x1530, 0x080c, 0xae4d, 0x11b0, 0x00d6, 0x6018,
--      0x2068, 0x7030, 0xd08c, 0x0128, 0x6800, 0xd0bc, 0x0110, 0xc0c5,
--      0x6802, 0x00d9, 0x00de, 0x2001, 0x0006, 0x080c, 0x4efe, 0x080c,
--      0x2cc2, 0x080c, 0x8617, 0x0078, 0x2001, 0x000a, 0x080c, 0x4efe,
--      0x080c, 0x2cc2, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x6cd4,
--      0x0010, 0x080c, 0x8df0, 0x00ee, 0x0005, 0x6800, 0xd084, 0x0168,
--      0x2001, 0x0000, 0x080c, 0x4eec, 0x2069, 0xb552, 0x6804, 0xd0a4,
--      0x0120, 0x2001, 0x0006, 0x080c, 0x4f2b, 0x0005, 0x00d6, 0x2011,
--      0xb521, 0x2204, 0xa086, 0x0074, 0x1904, 0x8ded, 0x6018, 0x2068,
--      0x6aa0, 0xa286, 0x007e, 0x1120, 0x080c, 0x8f9c, 0x0804, 0x8d8c,
--      0x080c, 0x8f92, 0x6018, 0x2068, 0xa080, 0x0028, 0x2014, 0xa286,
--      0x0080, 0x11c0, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010, 0xa005,
--      0x0138, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6833, 0x0200,
--      0x2001, 0x0006, 0x080c, 0x4efe, 0x080c, 0x2cc2, 0x080c, 0x8617,
--      0x0804, 0x8dee, 0x00e6, 0x2071, 0xb535, 0x2e04, 0xd09c, 0x0188,
--      0x2071, 0xbb80, 0x7108, 0x720c, 0xa18c, 0x00ff, 0x1118, 0xa284,
--      0xff00, 0x0138, 0x6018, 0x2070, 0x70a0, 0xd0bc, 0x1110, 0x7112,
--      0x7216, 0x00ee, 0x6010, 0xa005, 0x0198, 0x2068, 0x6838, 0xd0f4,
--      0x0178, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0039, 0x1958, 0x2001,
--      0x0000, 0x2009, 0x0000, 0x2011, 0x4000, 0x080c, 0xa0d0, 0x0840,
--      0x2001, 0x0004, 0x080c, 0x4efe, 0x6003, 0x0001, 0x6007, 0x0003,
--      0x080c, 0x6cd4, 0x0804, 0x8dee, 0x685c, 0xd0e4, 0x01d8, 0x080c,
--      0x9fcc, 0x080c, 0x5ad0, 0x0118, 0xd0dc, 0x1904, 0x8d48, 0x2011,
--      0xb535, 0x2204, 0xc0ad, 0x2012, 0x2001, 0xb78f, 0x2004, 0x00f6,
--      0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x2872, 0x78e2, 0x00fe,
--      0x0804, 0x8d48, 0x080c, 0xa002, 0x2011, 0xb535, 0x2204, 0xc0a5,
--      0x2012, 0x0006, 0x080c, 0xaf6f, 0x000e, 0x1904, 0x8d48, 0xc0b5,
--      0x2012, 0x2001, 0x0006, 0x080c, 0x4efe, 0x2001, 0x0000, 0x080c,
--      0x4eec, 0x00c6, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea,
--      0x7932, 0x7936, 0x00fe, 0x080c, 0x2847, 0x00f6, 0x2079, 0xb500,
--      0x7976, 0x2100, 0x2009, 0x0000, 0x080c, 0x281d, 0x7952, 0x00fe,
--      0x8108, 0x080c, 0x4f4e, 0x2c00, 0x00ce, 0x1904, 0x8d48, 0x601a,
--      0x2001, 0x0002, 0x080c, 0x4efe, 0x601f, 0x0001, 0x6003, 0x0001,
--      0x6007, 0x0002, 0x080c, 0x6cd4, 0x0008, 0x0011, 0x00de, 0x0005,
--      0x2001, 0x0007, 0x080c, 0x4efe, 0x2001, 0xb500, 0x2004, 0xa086,
--      0x0003, 0x1120, 0x2001, 0x0007, 0x080c, 0x4f2b, 0x080c, 0x2cc2,
--      0x080c, 0x8617, 0x0005, 0x00e6, 0x0026, 0x0016, 0x2071, 0xb500,
--      0x7084, 0xa086, 0x0014, 0x15f0, 0x7000, 0xa086, 0x0003, 0x1128,
--      0x6010, 0xa005, 0x1110, 0x080c, 0x3f3f, 0x00d6, 0x6018, 0x2068,
--      0x080c, 0x504c, 0x080c, 0x8d0d, 0x00de, 0x080c, 0x904b, 0x1550,
--      0x00d6, 0x6018, 0x2068, 0x6890, 0x00de, 0xa005, 0x0518, 0x2001,
--      0x0006, 0x080c, 0x4efe, 0x00e6, 0x6010, 0xa075, 0x01a8, 0x7034,
--      0xa084, 0x00ff, 0xa086, 0x0039, 0x1148, 0x2001, 0x0000, 0x2009,
--      0x0000, 0x2011, 0x4000, 0x080c, 0xa0d0, 0x0030, 0x7007, 0x0000,
--      0x7037, 0x0103, 0x7033, 0x0200, 0x00ee, 0x080c, 0x2cc2, 0x080c,
--      0x8617, 0x0020, 0x080c, 0x8c13, 0x080c, 0x8df0, 0x001e, 0x002e,
--      0x00ee, 0x0005, 0x2011, 0xb521, 0x2204, 0xa086, 0x0014, 0x1158,
--      0x2001, 0x0002, 0x080c, 0x4efe, 0x6003, 0x0001, 0x6007, 0x0001,
--      0x080c, 0x6cd4, 0x0010, 0x080c, 0x8df0, 0x0005, 0x2011, 0xb521,
--      0x2204, 0xa086, 0x0004, 0x1138, 0x2001, 0x0007, 0x080c, 0x4efe,
--      0x080c, 0x8617, 0x0010, 0x080c, 0x8df0, 0x0005, 0x000b, 0x0005,
--      0x8cd9, 0x8e8f, 0x8cd9, 0x8ec3, 0x8cd9, 0x8f4e, 0x8e84, 0x8cd9,
--      0x8cd9, 0x8f61, 0x8cd9, 0x8f71, 0x6604, 0xa686, 0x0003, 0x0904,
--      0x8e03, 0xa6b6, 0x001e, 0x1110, 0x080c, 0x8617, 0x0005, 0x00d6,
--      0x00c6, 0x080c, 0x8f81, 0x1178, 0x2001, 0x0000, 0x080c, 0x4eec,
--      0x2001, 0x0002, 0x080c, 0x4efe, 0x6003, 0x0001, 0x6007, 0x0002,
--      0x080c, 0x6cd4, 0x00e8, 0x2009, 0xbb8e, 0x2104, 0xa086, 0x0009,
--      0x1160, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0170,
--      0x8001, 0x6842, 0x6017, 0x000a, 0x0058, 0x2009, 0xbb8f, 0x2104,
--      0xa084, 0xff00, 0xa086, 0x1900, 0x1108, 0x08d0, 0x080c, 0x8df0,
--      0x00ce, 0x00de, 0x0005, 0x0026, 0x2011, 0x0000, 0x080c, 0x8f8f,
--      0x00d6, 0x2069, 0xb79e, 0x2d04, 0xa005, 0x0168, 0x6018, 0x2068,
--      0x68a0, 0xa086, 0x007e, 0x1138, 0x2069, 0xb51d, 0x2d04, 0x8000,
--      0x206a, 0x00de, 0x0010, 0x00de, 0x0078, 0x2001, 0x0000, 0x080c,
--      0x4eec, 0x2001, 0x0002, 0x080c, 0x4efe, 0x6003, 0x0001, 0x6007,
--      0x0002, 0x080c, 0x6cd4, 0x0480, 0x00d6, 0x6010, 0x2068, 0x080c,
--      0x9c54, 0x00de, 0x0108, 0x6a34, 0x080c, 0x8c13, 0x2009, 0xbb8e,
--      0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0500, 0xa686, 0x000b,
--      0x01c8, 0x2009, 0xbb8f, 0x2104, 0xa084, 0xff00, 0x1118, 0xa686,
--      0x0009, 0x01a0, 0xa086, 0x1900, 0x1168, 0xa686, 0x0009, 0x0170,
--      0x2001, 0x0004, 0x080c, 0x4efe, 0x2001, 0x0028, 0x6016, 0x6007,
--      0x004b, 0x0010, 0x080c, 0x8df0, 0x002e, 0x0005, 0x00d6, 0xa286,
--      0x0139, 0x0160, 0x6010, 0x2068, 0x080c, 0x9c54, 0x0148, 0x6834,
--      0xa086, 0x0139, 0x0118, 0x6838, 0xd0fc, 0x0110, 0x00de, 0x0c50,
--      0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0140, 0x8001,
--      0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x00de, 0x08e8, 0x68a0,
--      0xa086, 0x007e, 0x1138, 0x00e6, 0x2071, 0xb500, 0x080c, 0x4bc7,
--      0x00ee, 0x0010, 0x080c, 0x2c9c, 0x00de, 0x0860, 0x080c, 0x8f8f,
--      0x1158, 0x2001, 0x0004, 0x080c, 0x4efe, 0x6003, 0x0001, 0x6007,
--      0x0003, 0x080c, 0x6cd4, 0x0020, 0x080c, 0x8c13, 0x080c, 0x8df0,
--      0x0005, 0x0469, 0x1158, 0x2001, 0x0008, 0x080c, 0x4efe, 0x6003,
--      0x0001, 0x6007, 0x0005, 0x080c, 0x6cd4, 0x0010, 0x080c, 0x8df0,
--      0x0005, 0x00e9, 0x1158, 0x2001, 0x000a, 0x080c, 0x4efe, 0x6003,
--      0x0001, 0x6007, 0x0001, 0x080c, 0x6cd4, 0x0010, 0x080c, 0x8df0,
--      0x0005, 0x2009, 0xbb8e, 0x2104, 0xa086, 0x0003, 0x1138, 0x2009,
--      0xbb8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x0005, 0xa085,
--      0x0001, 0x0005, 0x00c6, 0x0016, 0xac88, 0x0006, 0x2164, 0x080c,
--      0x4fb9, 0x001e, 0x00ce, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x0036,
--      0x0016, 0x6018, 0x2068, 0x2071, 0xb535, 0x2e04, 0xa085, 0x0003,
--      0x2072, 0x080c, 0x9020, 0x0560, 0x2009, 0xb535, 0x2104, 0xc0cd,
--      0x200a, 0x2001, 0xb553, 0x2004, 0xd0a4, 0x0158, 0xa006, 0x2020,
--      0x2009, 0x002a, 0x080c, 0xb0dc, 0x2001, 0xb50c, 0x200c, 0xc195,
--      0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x080c, 0x2c6f, 0x2071,
--      0xb500, 0x080c, 0x2ab8, 0x00c6, 0x0156, 0x20a9, 0x0081, 0x2009,
--      0x007f, 0x080c, 0x2d97, 0x8108, 0x1f04, 0x8fd1, 0x015e, 0x00ce,
--      0x080c, 0x8f92, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0xbb80,
--      0x2079, 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0xb51c, 0x206a,
--      0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0xb51d, 0x206a, 0x78ea,
--      0x7832, 0x7836, 0x2010, 0xa084, 0xff00, 0x001e, 0xa105, 0x2009,
--      0xb528, 0x200a, 0x2200, 0xa084, 0x00ff, 0x2008, 0x080c, 0x2847,
--      0x080c, 0x5ad0, 0x0170, 0x2069, 0xbb8e, 0x2071, 0xb7b2, 0x6810,
--      0x2072, 0x6814, 0x7006, 0x6818, 0x700a, 0x681c, 0x700e, 0x080c,
--      0x9fcc, 0x0040, 0x2001, 0x0006, 0x080c, 0x4efe, 0x080c, 0x2cc2,
--      0x080c, 0x8617, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x0005,
--      0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0xb528, 0x231c, 0x83ff,
--      0x01e8, 0x2071, 0xbb80, 0x2e14, 0xa294, 0x00ff, 0x7004, 0xa084,
--      0xff00, 0xa205, 0xa306, 0x1190, 0x2011, 0xbb96, 0xad98, 0x000a,
--      0x20a9, 0x0004, 0x080c, 0x90d4, 0x1148, 0x2011, 0xbb9a, 0xad98,
--      0x0006, 0x20a9, 0x0004, 0x080c, 0x90d4, 0x1100, 0x015e, 0x00ee,
--      0x003e, 0x002e, 0x0005, 0x00e6, 0x2071, 0xbb8c, 0x7004, 0xa086,
--      0x0014, 0x11a8, 0x7008, 0xa086, 0x0800, 0x1188, 0x700c, 0xd0ec,
--      0x0160, 0xa084, 0x0f00, 0xa086, 0x0100, 0x1138, 0x7024, 0xd0a4,
--      0x1110, 0xd0ac, 0x0110, 0xa006, 0x0010, 0xa085, 0x0001, 0x00ee,
--      0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026,
--      0x0006, 0x0126, 0x2091, 0x8000, 0x2029, 0xb7e9, 0x252c, 0x2021,
--      0xb7ef, 0x2424, 0x2061, 0xbd00, 0x2071, 0xb500, 0x7248, 0x7068,
--      0xa202, 0x16f0, 0x080c, 0xb104, 0x05a0, 0x671c, 0xa786, 0x0001,
--      0x0580, 0xa786, 0x0007, 0x0568, 0x2500, 0xac06, 0x0550, 0x2400,
--      0xac06, 0x0538, 0x00c6, 0x6000, 0xa086, 0x0004, 0x1110, 0x080c,
--      0x194d, 0xa786, 0x0008, 0x1148, 0x080c, 0x9e52, 0x1130, 0x00ce,
--      0x080c, 0x8c13, 0x080c, 0x9e17, 0x00a0, 0x6010, 0x2068, 0x080c,
--      0x9c54, 0x0160, 0xa786, 0x0003, 0x11e8, 0x6837, 0x0103, 0x6b4a,
--      0x6847, 0x0000, 0x080c, 0x5409, 0x080c, 0x9e0b, 0x080c, 0x9e17,
--      0x00ce, 0xace0, 0x0018, 0x705c, 0xac02, 0x1210, 0x0804, 0x907e,
--      0x012e, 0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x00de,
--      0x00ee, 0x0005, 0xa786, 0x0006, 0x1118, 0x080c, 0xb08d, 0x0c30,
--      0xa786, 0x000a, 0x09e0, 0x08c8, 0x220c, 0x2304, 0xa106, 0x1130,
--      0x8210, 0x8318, 0x1f04, 0x90d4, 0xa006, 0x0005, 0x2304, 0xa102,
--      0x0218, 0x2001, 0x0001, 0x0010, 0x2001, 0x0000, 0xa18d, 0x0001,
--      0x0005, 0x6004, 0xa08a, 0x0080, 0x1a0c, 0x1515, 0x080c, 0x9e41,
--      0x0120, 0x080c, 0x9e52, 0x0168, 0x0028, 0x080c, 0x2cc2, 0x080c,
--      0x9e52, 0x0138, 0x080c, 0x7091, 0x080c, 0x8617, 0x080c, 0x7174,
--      0x0005, 0x080c, 0x8c13, 0x0cb0, 0xa182, 0x0040, 0x0002, 0x911a,
--      0x911a, 0x911a, 0x911a, 0x911a, 0x911a, 0x911a, 0x911a, 0x911a,
--      0x911a, 0x911a, 0x911c, 0x911c, 0x911c, 0x911c, 0x911a, 0x911a,
--      0x911a, 0x911c, 0x080c, 0x1515, 0x600b, 0xffff, 0x6003, 0x0001,
--      0x6106, 0x080c, 0x6c8e, 0x0126, 0x2091, 0x8000, 0x080c, 0x7174,
--      0x012e, 0x0005, 0xa186, 0x0013, 0x1128, 0x6004, 0xa082, 0x0040,
--      0x0804, 0x91b6, 0xa186, 0x0027, 0x11e8, 0x080c, 0x7091, 0x080c,
--      0x2c9c, 0x00d6, 0x6110, 0x2168, 0x080c, 0x9c54, 0x0168, 0x6837,
--      0x0103, 0x684b, 0x0029, 0x6847, 0x0000, 0x694c, 0xc1c5, 0x694e,
--      0x080c, 0x5409, 0x080c, 0x9e0b, 0x00de, 0x080c, 0x8617, 0x080c,
--      0x7174, 0x0005, 0xa186, 0x0014, 0x1120, 0x6004, 0xa082, 0x0040,
--      0x0428, 0xa186, 0x0046, 0x0138, 0xa186, 0x0045, 0x0120, 0xa186,
--      0x0047, 0x190c, 0x1515, 0x2001, 0x0109, 0x2004, 0xd084, 0x0198,
--      0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x6b75,
--      0x002e, 0x001e, 0x000e, 0x012e, 0xe000, 0x6000, 0xa086, 0x0002,
--      0x1110, 0x0804, 0x91f4, 0x080c, 0x865d, 0x0005, 0x0002, 0x9194,
--      0x9192, 0x9192, 0x9192, 0x9192, 0x9192, 0x9192, 0x9192, 0x9192,
--      0x9192, 0x9192, 0x91af, 0x91af, 0x91af, 0x91af, 0x9192, 0x91af,
--      0x9192, 0x91af, 0x080c, 0x1515, 0x080c, 0x7091, 0x00d6, 0x6110,
--      0x2168, 0x080c, 0x9c54, 0x0168, 0x6837, 0x0103, 0x684b, 0x0006,
--      0x6847, 0x0000, 0x6850, 0xc0ec, 0x6852, 0x080c, 0x5409, 0x080c,
--      0x9e0b, 0x00de, 0x080c, 0x8617, 0x080c, 0x7174, 0x0005, 0x080c,
--      0x7091, 0x080c, 0x8617, 0x080c, 0x7174, 0x0005, 0x0002, 0x91cc,
--      0x91ca, 0x91ca, 0x91ca, 0x91ca, 0x91ca, 0x91ca, 0x91ca, 0x91ca,
--      0x91ca, 0x91ca, 0x91de, 0x91de, 0x91de, 0x91de, 0x91ca, 0x91ed,
--      0x91ca, 0x91de, 0x080c, 0x1515, 0x080c, 0x7091, 0x2001, 0xb7b8,
--      0x2004, 0x603e, 0x6003, 0x0002, 0x080c, 0x7174, 0x6010, 0xa088,
--      0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x0005, 0x080c, 0x7091,
--      0x2001, 0xb7b6, 0x2004, 0x6016, 0x2001, 0xb7b8, 0x2004, 0x603e,
--      0x6003, 0x000f, 0x080c, 0x7174, 0x0005, 0x080c, 0x7091, 0x080c,
--      0x8617, 0x080c, 0x7174, 0x0005, 0xa182, 0x0040, 0x0002, 0x920a,
--      0x920a, 0x920a, 0x920a, 0x920a, 0x920c, 0x92f1, 0x9320, 0x920a,
--      0x920a, 0x920a, 0x920a, 0x920a, 0x920a, 0x920a, 0x920a, 0x920a,
--      0x920a, 0x920a, 0x080c, 0x1515, 0x00e6, 0x00d6, 0x603f, 0x0000,
--      0x2071, 0xbb80, 0x7124, 0x610a, 0x2071, 0xbb8c, 0x6110, 0x2168,
--      0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0904, 0x92ba, 0xa68c, 0x0c00,
--      0x0518, 0x00f6, 0x2c78, 0x080c, 0x5306, 0x00fe, 0x01c8, 0x684c,
--      0xd0ac, 0x01b0, 0x6020, 0xd0dc, 0x1198, 0x6850, 0xd0bc, 0x1180,
--      0x7318, 0x6814, 0xa306, 0x1904, 0x92cd, 0x731c, 0x6810, 0xa31e,
--      0x0138, 0xd6d4, 0x0904, 0x92cd, 0x6b14, 0xa305, 0x1904, 0x92cd,
--      0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002,
--      0x0518, 0xa186, 0x0028, 0x1128, 0x080c, 0x9e30, 0x684b, 0x001c,
--      0x00e8, 0xd6dc, 0x01a0, 0x684b, 0x0015, 0x684c, 0xd0ac, 0x0170,
--      0x6914, 0x6a10, 0x2100, 0xa205, 0x0148, 0x7018, 0xa106, 0x1118,
--      0x701c, 0xa206, 0x0118, 0x6962, 0x6a5e, 0xc6dc, 0x0038, 0xd6d4,
--      0x0118, 0x684b, 0x0007, 0x0010, 0x684b, 0x0000, 0x6837, 0x0103,
--      0x6e46, 0xa01e, 0xd6c4, 0x01f0, 0xa686, 0x0100, 0x1140, 0x2001,
--      0xbb99, 0x2004, 0xa005, 0x1118, 0xc6c4, 0x0804, 0x921b, 0x7328,
--      0x732c, 0x6b56, 0x83ff, 0x0170, 0xa38a, 0x0009, 0x0210, 0x2019,
--      0x0008, 0x0036, 0x2308, 0x2019, 0xbb98, 0xad90, 0x0019, 0x080c,
--      0x9907, 0x003e, 0xd6cc, 0x0904, 0x92e0, 0x7124, 0x695a, 0x81ff,
--      0x0904, 0x92e0, 0xa192, 0x0021, 0x1260, 0x2071, 0xbb98, 0x831c,
--      0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0x9907, 0x080c, 0xa131,
--      0x04b8, 0x6838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c68,
--      0x00f6, 0x2d78, 0x080c, 0x98ac, 0x00fe, 0x080c, 0xa131, 0x080c,
--      0x98f7, 0x0440, 0x00f6, 0x2c78, 0x080c, 0x5306, 0x00fe, 0x0190,
--      0x684c, 0xd0ac, 0x0178, 0x6020, 0xd0dc, 0x1160, 0x6850, 0xd0bc,
--      0x1148, 0x6810, 0x6914, 0xa105, 0x0128, 0x080c, 0x9f2f, 0x00de,
--      0x00ee, 0x00f0, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0x684c,
--      0xd0ac, 0x0130, 0x6810, 0x6914, 0xa115, 0x0110, 0x080c, 0x947d,
--      0x080c, 0x5409, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211,
--      0x6a3e, 0x080c, 0x9efd, 0x00de, 0x00ee, 0x1110, 0x080c, 0x8617,
--      0x0005, 0x00f6, 0x6003, 0x0003, 0x2079, 0xbb8c, 0x7c04, 0x7b00,
--      0x7e0c, 0x7d08, 0x6010, 0x2078, 0x784c, 0xd0ac, 0x0138, 0x6003,
--      0x0002, 0x00fe, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0x797c,
--      0xa10a, 0x2300, 0x7a80, 0xa213, 0x2600, 0xa102, 0x2500, 0xa203,
--      0x0e90, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x00fe, 0x603f, 0x0000,
--      0x2c10, 0x080c, 0x1fa9, 0x080c, 0x6cf1, 0x080c, 0x7231, 0x0005,
--      0x2001, 0xb7b8, 0x2004, 0x603e, 0x6003, 0x0004, 0x6110, 0x20e1,
--      0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x185e, 0x0005, 0xa182,
--      0x0040, 0x0002, 0x9345, 0x9345, 0x9345, 0x9345, 0x9345, 0x9347,
--      0x93da, 0x9345, 0x9345, 0x93f0, 0x9454, 0x9345, 0x9345, 0x9345,
--      0x9345, 0x9463, 0x9345, 0x9345, 0x9345, 0x080c, 0x1515, 0x0076,
--      0x00f6, 0x00e6, 0x00d6, 0x2071, 0xbb8c, 0x6110, 0x2178, 0x7614,
--      0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268,
--      0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x86ff, 0x0904, 0x93d5,
--      0xa694, 0xff00, 0xa284, 0x0c00, 0x0120, 0x7018, 0x7862, 0x701c,
--      0x785e, 0xa284, 0x0300, 0x0904, 0x93d5, 0x080c, 0x15f8, 0x090c,
--      0x1515, 0x2d00, 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, 0x0103,
--      0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c,
--      0x0c00, 0x0120, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff,
--      0xa186, 0x0002, 0x0180, 0xa186, 0x0028, 0x1118, 0x684b, 0x001c,
--      0x0060, 0xd6dc, 0x0118, 0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118,
--      0x684b, 0x0007, 0x0010, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852,
--      0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56,
--      0x83ff, 0x0170, 0xa38a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036,
--      0x2308, 0x2019, 0xbb98, 0xad90, 0x0019, 0x080c, 0x9907, 0x003e,
--      0xd6cc, 0x01d8, 0x7124, 0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021,
--      0x1250, 0x2071, 0xbb98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d,
--      0x080c, 0x9907, 0x0050, 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020,
--      0x695a, 0x0c78, 0x2d78, 0x080c, 0x98ac, 0x00de, 0x00ee, 0x00fe,
--      0x007e, 0x0005, 0x00f6, 0x6003, 0x0003, 0x2079, 0xbb8c, 0x7c04,
--      0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a,
--      0x7d0e, 0x00fe, 0x2c10, 0x080c, 0x1fa9, 0x080c, 0x7d61, 0x0005,
--      0x00d6, 0x00f6, 0x2c78, 0x080c, 0x5306, 0x00fe, 0x0120, 0x2001,
--      0xb7b8, 0x2004, 0x603e, 0x6003, 0x0002, 0x080c, 0x7127, 0x080c,
--      0x7231, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0904, 0x9452, 0xd1cc,
--      0x0540, 0x6948, 0x6838, 0xd0fc, 0x01e8, 0x0016, 0x684c, 0x0006,
--      0x6850, 0x0006, 0xad90, 0x000d, 0xa198, 0x000d, 0x2009, 0x0020,
--      0x0156, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0x941a,
--      0x015e, 0x000e, 0x6852, 0x000e, 0x684e, 0x001e, 0x2168, 0x080c,
--      0x161f, 0x0418, 0x0016, 0x080c, 0x161f, 0x00de, 0x080c, 0x98f7,
--      0x00e0, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002,
--      0x0180, 0xa086, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060, 0xd1dc,
--      0x0118, 0x684b, 0x0015, 0x0038, 0xd1d4, 0x0118, 0x684b, 0x0007,
--      0x0010, 0x684b, 0x0000, 0x080c, 0x5409, 0x080c, 0x9efd, 0x1110,
--      0x080c, 0x8617, 0x00de, 0x0005, 0x2019, 0x0001, 0x080c, 0x7fe5,
--      0x6003, 0x0002, 0x2001, 0xb7b8, 0x2004, 0x603e, 0x080c, 0x7127,
--      0x080c, 0x7231, 0x0005, 0x080c, 0x7127, 0x080c, 0x2c9c, 0x00d6,
--      0x6110, 0x2168, 0x080c, 0x9c54, 0x0150, 0x6837, 0x0103, 0x684b,
--      0x0029, 0x6847, 0x0000, 0x080c, 0x5409, 0x080c, 0x9e0b, 0x00de,
--      0x080c, 0x8617, 0x080c, 0x7231, 0x0005, 0x684b, 0x0015, 0xd1fc,
--      0x0138, 0x684b, 0x0007, 0x8002, 0x8000, 0x810a, 0xa189, 0x0000,
--      0x6962, 0x685e, 0x0005, 0xa182, 0x0040, 0x0002, 0x94a1, 0x94a1,
--      0x94a1, 0x94a1, 0x94a1, 0x94a3, 0x94a1, 0x955e, 0x956a, 0x94a1,
--      0x94a1, 0x94a1, 0x94a1, 0x94a1, 0x94a1, 0x94a1, 0x94a1, 0x94a1,
--      0x94a1, 0x080c, 0x1515, 0x0076, 0x00f6, 0x00e6, 0x00d6, 0x2071,
--      0xbb8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x00f6, 0x2c78,
--      0x080c, 0x5306, 0x00fe, 0x0150, 0xa684, 0x00ff, 0x1138, 0x6020,
--      0xd0f4, 0x0120, 0x080c, 0x9f2f, 0x0804, 0x9559, 0x7e46, 0x7f4c,
--      0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211,
--      0x6a3e, 0x86ff, 0x0904, 0x954f, 0xa694, 0xff00, 0xa284, 0x0c00,
--      0x0120, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0904,
--      0x954d, 0xa686, 0x0100, 0x1140, 0x2001, 0xbb99, 0x2004, 0xa005,
--      0x1118, 0xc6c4, 0x7e46, 0x0c28, 0x080c, 0x15f8, 0x090c, 0x1515,
--      0x2d00, 0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103,
--      0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c,
--      0x0c00, 0x0120, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff,
--      0xa186, 0x0002, 0x0180, 0xa186, 0x0028, 0x1118, 0x684b, 0x001c,
--      0x0060, 0xd6dc, 0x0118, 0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118,
--      0x684b, 0x0007, 0x0010, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852,
--      0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56,
-+      0x705c, 0xa502, 0x1228, 0x754e, 0xa085, 0x0001, 0x00ee, 0x0005,
-+      0x704f, 0xbd00, 0x0cc8, 0xa006, 0x0cc8, 0xac82, 0xbd00, 0x0a0c,
-+      0x1515, 0x2001, 0xb517, 0x2004, 0xac02, 0x1a0c, 0x1515, 0xa006,
-+      0x6006, 0x600a, 0x600e, 0x6012, 0x6016, 0x601a, 0x601f, 0x0000,
-+      0x6003, 0x0000, 0x6052, 0x6056, 0x6022, 0x6026, 0x602a, 0x602e,
-+      0x6032, 0x6036, 0x603a, 0x603e, 0x2061, 0xb500, 0x6048, 0x8000,
-+      0x604a, 0xa086, 0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000,
-+      0x080c, 0x7173, 0x012e, 0x0cc0, 0x601c, 0xa084, 0x000f, 0x0002,
-+      0x865b, 0x866a, 0x8685, 0x86a0, 0xa152, 0xa16d, 0xa188, 0x865b,
-+      0x866a, 0x865b, 0x86bb, 0xa186, 0x0013, 0x1128, 0x080c, 0x7090,
-+      0x080c, 0x7173, 0x0005, 0xa18e, 0x0047, 0x1118, 0xa016, 0x080c,
-+      0x185e, 0x0005, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1515,
-+      0x0013, 0x006e, 0x0005, 0x8683, 0x8a9b, 0x8c53, 0x8683, 0x8cc8,
-+      0x8779, 0x8683, 0x8683, 0x8a2d, 0x90ef, 0x8683, 0x8683, 0x8683,
-+      0x8683, 0x8683, 0x8683, 0x080c, 0x1515, 0x0066, 0x6000, 0xa0b2,
-+      0x0010, 0x1a0c, 0x1515, 0x0013, 0x006e, 0x0005, 0x869e, 0x9722,
-+      0x869e, 0x869e, 0x869e, 0x869e, 0x869e, 0x869e, 0x96cd, 0x988e,
-+      0x869e, 0x974f, 0x97c6, 0x974f, 0x97c6, 0x869e, 0x080c, 0x1515,
-+      0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1515, 0x0013, 0x006e,
-+      0x0005, 0x86b9, 0x9130, 0x91fa, 0x9335, 0x9491, 0x86b9, 0x86b9,
-+      0x86b9, 0x910a, 0x967d, 0x9680, 0x86b9, 0x86b9, 0x86b9, 0x86b9,
-+      0x96aa, 0x080c, 0x1515, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c,
-+      0x1515, 0x0013, 0x006e, 0x0005, 0x86d4, 0x86d4, 0x86d4, 0x8702,
-+      0x874f, 0x86d4, 0x86d4, 0x86d4, 0x86d6, 0x86d4, 0x86d4, 0x86d4,
-+      0x86d4, 0x86d4, 0x86d4, 0x86d4, 0x080c, 0x1515, 0xa186, 0x0003,
-+      0x190c, 0x1515, 0x00d6, 0x6003, 0x0003, 0x6106, 0x6010, 0x2068,
-+      0x684f, 0x0040, 0x687c, 0x680a, 0x6880, 0x680e, 0x6813, 0x0000,
-+      0x6817, 0x0000, 0x6854, 0xa092, 0x199a, 0x0210, 0x2001, 0x1999,
-+      0x8003, 0x8013, 0x8213, 0xa210, 0x6216, 0x00de, 0x2c10, 0x080c,
-+      0x1fa9, 0x080c, 0x6cf0, 0x0126, 0x2091, 0x8000, 0x080c, 0x7230,
-+      0x012e, 0x0005, 0xa182, 0x0047, 0x0002, 0x870e, 0x870e, 0x8710,
-+      0x8729, 0x870e, 0x870e, 0x870e, 0x870e, 0x873b, 0x080c, 0x1515,
-+      0x00d6, 0x0016, 0x080c, 0x7126, 0x080c, 0x7230, 0x6003, 0x0004,
-+      0x6110, 0x2168, 0x684f, 0x0020, 0x685c, 0x685a, 0x6874, 0x687e,
-+      0x6878, 0x6882, 0x6897, 0x0000, 0x689b, 0x0000, 0x001e, 0x00de,
-+      0x0005, 0x080c, 0x7126, 0x00d6, 0x6110, 0x2168, 0x080c, 0x9c5a,
-+      0x0120, 0x684b, 0x0006, 0x080c, 0x5408, 0x00de, 0x080c, 0x861d,
-+      0x080c, 0x7230, 0x0005, 0x080c, 0x7126, 0x080c, 0x2c9c, 0x00d6,
-+      0x6110, 0x2168, 0x080c, 0x9c5a, 0x0120, 0x684b, 0x0029, 0x080c,
-+      0x5408, 0x00de, 0x080c, 0x861d, 0x080c, 0x7230, 0x0005, 0xa182,
-+      0x0047, 0x0002, 0x875d, 0x876c, 0x875b, 0x875b, 0x875b, 0x875b,
-+      0x875b, 0x875b, 0x875b, 0x080c, 0x1515, 0x00d6, 0x6010, 0x2068,
-+      0x684c, 0xc0f4, 0x684e, 0x00de, 0x20e1, 0x0005, 0x3d18, 0x3e20,
-+      0x2c10, 0x080c, 0x185e, 0x0005, 0x00d6, 0x6110, 0x2168, 0x684b,
-+      0x0000, 0x6853, 0x0000, 0x080c, 0x5408, 0x00de, 0x080c, 0x861d,
-+      0x0005, 0xa1b6, 0x0015, 0x1118, 0x080c, 0x861d, 0x0030, 0xa1b6,
-+      0x0016, 0x190c, 0x1515, 0x080c, 0x861d, 0x0005, 0x20a9, 0x000e,
-+      0x2e98, 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420,
-+      0x9398, 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002,
-+      0xa5a8, 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x1f04, 0x8794,
-+      0x00e6, 0x080c, 0x9c5a, 0x0130, 0x6010, 0x2070, 0x7007, 0x0000,
-+      0x7037, 0x0103, 0x00ee, 0x080c, 0x861d, 0x0005, 0x00d6, 0x0036,
-+      0x7330, 0xa386, 0x0200, 0x1130, 0x6018, 0x2068, 0x6813, 0x00ff,
-+      0x6817, 0xfffd, 0x6010, 0xa005, 0x0130, 0x2068, 0x6807, 0x0000,
-+      0x6837, 0x0103, 0x6b32, 0x080c, 0x861d, 0x003e, 0x00de, 0x0005,
-+      0x0016, 0x20a9, 0x002a, 0xae80, 0x000c, 0x2098, 0x6010, 0xa080,
-+      0x0002, 0x20a0, 0x53a3, 0x20a9, 0x002a, 0x6010, 0xa080, 0x0001,
-+      0x2004, 0xa080, 0x0002, 0x20a0, 0x53a3, 0x00e6, 0x6010, 0x2004,
-+      0x2070, 0x7037, 0x0103, 0x00ee, 0x080c, 0x861d, 0x001e, 0x0005,
-+      0x0016, 0x2009, 0x0000, 0x7030, 0xa086, 0x0100, 0x0140, 0x7038,
-+      0xa084, 0x00ff, 0x800c, 0x703c, 0xa084, 0x00ff, 0x8004, 0xa080,
-+      0x0004, 0xa108, 0x21a8, 0xae80, 0x000c, 0x2098, 0x6010, 0xa080,
-+      0x0002, 0x20a0, 0x080c, 0x4b8f, 0x00e6, 0x080c, 0x9c5a, 0x0140,
-+      0x6010, 0x2070, 0x7007, 0x0000, 0x7034, 0x70b2, 0x7037, 0x0103,
-+      0x00ee, 0x080c, 0x861d, 0x001e, 0x0005, 0x00e6, 0x00d6, 0x603f,
-+      0x0000, 0x2c68, 0x0016, 0x2009, 0x0035, 0x080c, 0xa10a, 0x001e,
-+      0x1168, 0x0026, 0x6228, 0x2268, 0x002e, 0x2071, 0xbb8c, 0x6b1c,
-+      0xa386, 0x0003, 0x0130, 0xa386, 0x0006, 0x0128, 0x080c, 0x861d,
-+      0x0020, 0x0031, 0x0010, 0x080c, 0x88f6, 0x00de, 0x00ee, 0x0005,
-+      0x00f6, 0x6810, 0x2078, 0xa186, 0x0015, 0x0904, 0x88dd, 0xa18e,
-+      0x0016, 0x1904, 0x88f4, 0x700c, 0xa08c, 0xff00, 0xa186, 0x1700,
-+      0x0120, 0xa186, 0x0300, 0x1904, 0x88bc, 0x8fff, 0x1138, 0x6800,
-+      0xa086, 0x000f, 0x0904, 0x88a0, 0x0804, 0x88f2, 0x6808, 0xa086,
-+      0xffff, 0x1904, 0x88df, 0x784c, 0xa084, 0x0060, 0xa086, 0x0020,
-+      0x1150, 0x797c, 0x7810, 0xa106, 0x1904, 0x88df, 0x7980, 0x7814,
-+      0xa106, 0x1904, 0x88df, 0x080c, 0x9e11, 0x6858, 0x7852, 0x784c,
-+      0xc0dc, 0xc0f4, 0xc0d4, 0x784e, 0x0026, 0xa00e, 0x6a14, 0x2001,
-+      0x000a, 0x080c, 0x6b40, 0x7854, 0xa20a, 0x0208, 0x8011, 0x7a56,
-+      0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, 0x9a09, 0x00ce,
-+      0x0804, 0x88f2, 0x00c6, 0x00d6, 0x2f68, 0x6838, 0xd0fc, 0x1118,
-+      0x080c, 0x4c64, 0x0010, 0x080c, 0x4e49, 0x00de, 0x00ce, 0x1904,
-+      0x88df, 0x00c6, 0x2d60, 0x080c, 0x861d, 0x00ce, 0x0804, 0x88f2,
-+      0x00c6, 0x080c, 0x9ed6, 0x0190, 0x6013, 0x0000, 0x6818, 0x601a,
-+      0x080c, 0xa027, 0x601f, 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c,
-+      0x861d, 0x00ce, 0x080c, 0x864c, 0x00ce, 0x04e0, 0x2001, 0xb7b8,
-+      0x2004, 0x683e, 0x00ce, 0x04b0, 0x7008, 0xa086, 0x000b, 0x11a0,
-+      0x6018, 0x200c, 0xc1bc, 0x2102, 0x00c6, 0x2d60, 0x7853, 0x0003,
-+      0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x6c8d,
-+      0x080c, 0x7173, 0x00ce, 0x00f0, 0x700c, 0xa086, 0x2a00, 0x1138,
-+      0x2001, 0xb7b8, 0x2004, 0x683e, 0x00a8, 0x0481, 0x00a8, 0x8fff,
-+      0x090c, 0x1515, 0x00c6, 0x00d6, 0x2d60, 0x2f68, 0x6837, 0x0103,
-+      0x684b, 0x0003, 0x080c, 0x98fd, 0x080c, 0x9e11, 0x080c, 0x9e1d,
-+      0x00de, 0x00ce, 0x080c, 0x861d, 0x00fe, 0x0005, 0xa186, 0x0015,
-+      0x1128, 0x2001, 0xb7b8, 0x2004, 0x683e, 0x0068, 0xa18e, 0x0016,
-+      0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, 0xb33a, 0x080c, 0x6aef,
-+      0x080c, 0x861d, 0x00ce, 0x080c, 0x861d, 0x0005, 0x0026, 0x0036,
-+      0x0046, 0x7228, 0x7c80, 0x7b7c, 0xd2f4, 0x0130, 0x2001, 0xb7b8,
-+      0x2004, 0x683e, 0x0804, 0x8970, 0x00c6, 0x2d60, 0x080c, 0x991d,
-+      0x00ce, 0x6804, 0xa086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060,
-+      0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x6c8d, 0x080c, 0x7173,
-+      0x00ce, 0x04f0, 0x6800, 0xa086, 0x000f, 0x01c8, 0x8fff, 0x090c,
-+      0x1515, 0x6820, 0xd0dc, 0x1198, 0x6800, 0xa086, 0x0004, 0x1198,
-+      0x784c, 0xd0ac, 0x0180, 0x784c, 0xc0dc, 0xc0f4, 0x784e, 0x7850,
-+      0xc0f4, 0xc0fc, 0x7852, 0x2001, 0x0001, 0x682e, 0x00e0, 0x2001,
-+      0x0007, 0x682e, 0x00c0, 0x784c, 0xd0b4, 0x1130, 0xd0ac, 0x0db8,
-+      0x784c, 0xd0f4, 0x1da0, 0x0c38, 0xd2ec, 0x1d88, 0x7024, 0xa306,
-+      0x1118, 0x7020, 0xa406, 0x0d58, 0x7020, 0x6836, 0x7024, 0x683a,
-+      0x2001, 0x0005, 0x682e, 0x080c, 0x9f63, 0x080c, 0x7173, 0x0010,
-+      0x080c, 0x861d, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6,
-+      0x0026, 0x6034, 0x2068, 0x6a1c, 0xa286, 0x0007, 0x0904, 0x89d4,
-+      0xa286, 0x0002, 0x0904, 0x89d4, 0xa286, 0x0000, 0x0904, 0x89d4,
-+      0x6808, 0x6338, 0xa306, 0x1904, 0x89d4, 0x2071, 0xbb8c, 0xa186,
-+      0x0015, 0x05e0, 0xa18e, 0x0016, 0x1190, 0x6030, 0xa084, 0x00ff,
-+      0xa086, 0x0001, 0x1160, 0x700c, 0xa086, 0x2a00, 0x1140, 0x6034,
-+      0xa080, 0x0008, 0x200c, 0xc1dd, 0xc1f5, 0x2102, 0x0438, 0x00c6,
-+      0x6034, 0x2060, 0x6104, 0xa186, 0x004b, 0x01a0, 0xa186, 0x004c,
-+      0x0188, 0xa186, 0x004d, 0x0170, 0xa186, 0x004e, 0x0158, 0xa186,
-+      0x0052, 0x0140, 0x6010, 0x2068, 0x080c, 0x9c5a, 0x090c, 0x1515,
-+      0x6853, 0x0003, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002,
-+      0x080c, 0x6c8d, 0x080c, 0x7173, 0x00ce, 0x0030, 0x6034, 0x2070,
-+      0x2001, 0xb7b8, 0x2004, 0x703e, 0x080c, 0x861d, 0x002e, 0x00de,
-+      0x00ee, 0x0005, 0x00d6, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0,
-+      0x53a3, 0xa1b6, 0x0015, 0x1558, 0x6018, 0x2068, 0x0156, 0x0036,
-+      0x0026, 0xae90, 0x000c, 0xa290, 0x0004, 0x20a9, 0x0004, 0xad98,
-+      0x000a, 0x080c, 0x90da, 0x002e, 0x003e, 0x015e, 0x11d8, 0x0156,
-+      0x0036, 0x0026, 0xae90, 0x000c, 0xa290, 0x0008, 0x20a9, 0x0004,
-+      0xad98, 0x0006, 0x080c, 0x90da, 0x002e, 0x003e, 0x015e, 0x1150,
-+      0x7038, 0x680a, 0x703c, 0x680e, 0x6800, 0xc08d, 0x6802, 0x00de,
-+      0x0804, 0x87a0, 0x080c, 0x2c9c, 0x00c6, 0x080c, 0x85c7, 0x2f00,
-+      0x601a, 0x6013, 0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003,
-+      0x0001, 0x2001, 0x0007, 0x080c, 0x4efd, 0x080c, 0x4f2a, 0x080c,
-+      0x6cd3, 0x080c, 0x7173, 0x00ce, 0x0c10, 0x2100, 0xa1b2, 0x0080,
-+      0x1a0c, 0x1515, 0xa1b2, 0x0040, 0x1a04, 0x8a91, 0x0002, 0x8a85,
-+      0x8a79, 0x8a85, 0x8a85, 0x8a85, 0x8a85, 0x8a77, 0x8a77, 0x8a77,
-+      0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77,
-+      0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77,
-+      0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a85, 0x8a77,
-+      0x8a85, 0x8a85, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a85,
-+      0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77,
-+      0x8a77, 0x8a85, 0x8a85, 0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a77,
-+      0x8a77, 0x8a77, 0x8a77, 0x8a77, 0x8a85, 0x8a77, 0x8a77, 0x080c,
-+      0x1515, 0x6003, 0x0001, 0x6106, 0x080c, 0x6cd3, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x7173, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106,
-+      0x080c, 0x6cd3, 0x0126, 0x2091, 0x8000, 0x080c, 0x7173, 0x012e,
-+      0x0005, 0x2600, 0x0002, 0x8a85, 0x8a85, 0x8a99, 0x8a85, 0x8a85,
-+      0x8a99, 0x080c, 0x1515, 0x6004, 0xa0b2, 0x0080, 0x1a0c, 0x1515,
-+      0xa1b6, 0x0013, 0x0904, 0x8b4b, 0xa1b6, 0x0027, 0x1904, 0x8b11,
-+      0x080c, 0x7090, 0x6004, 0x080c, 0x9e47, 0x0190, 0x080c, 0x9e58,
-+      0x0904, 0x8b0b, 0xa08e, 0x0021, 0x0904, 0x8b0e, 0xa08e, 0x0022,
-+      0x0904, 0x8b0b, 0xa08e, 0x003d, 0x0904, 0x8b0e, 0x0804, 0x8b04,
-+      0x080c, 0x2cc2, 0x2001, 0x0007, 0x080c, 0x4efd, 0x6018, 0xa080,
-+      0x0028, 0x200c, 0x080c, 0x8c19, 0xa186, 0x007e, 0x1148, 0x2001,
-+      0xb535, 0x2014, 0xc285, 0x080c, 0x5acf, 0x1108, 0xc2ad, 0x2202,
-+      0x0016, 0x0026, 0x0036, 0x2110, 0x0026, 0x2019, 0x0028, 0x080c,
-+      0x8299, 0x002e, 0x080c, 0xb38d, 0x003e, 0x002e, 0x001e, 0x0016,
-+      0x0026, 0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x6df5, 0x0076,
-+      0x2039, 0x0000, 0x080c, 0x6d02, 0x00c6, 0x6018, 0xa065, 0x0110,
-+      0x080c, 0x51aa, 0x00ce, 0x2c08, 0x080c, 0xae82, 0x007e, 0x003e,
-+      0x002e, 0x001e, 0x080c, 0x4f6c, 0x080c, 0xa01f, 0x080c, 0x861d,
-+      0x080c, 0x7173, 0x0005, 0x080c, 0x8c19, 0x0cb0, 0x080c, 0x8c47,
-+      0x0c98, 0xa186, 0x0014, 0x1db0, 0x080c, 0x7090, 0x080c, 0x2c9c,
-+      0x080c, 0x9e47, 0x1188, 0x080c, 0x2cc2, 0x6018, 0xa080, 0x0028,
-+      0x200c, 0x080c, 0x8c19, 0xa186, 0x007e, 0x1128, 0x2001, 0xb535,
-+      0x200c, 0xc185, 0x2102, 0x08c0, 0x080c, 0x9e58, 0x1118, 0x080c,
-+      0x8c19, 0x0890, 0x6004, 0xa08e, 0x0032, 0x1158, 0x00e6, 0x00f6,
-+      0x2071, 0xb582, 0x2079, 0x0000, 0x080c, 0x2fcf, 0x00fe, 0x00ee,
-+      0x0818, 0x6004, 0xa08e, 0x0021, 0x0d50, 0xa08e, 0x0022, 0x090c,
-+      0x8c19, 0x0804, 0x8b04, 0xa0b2, 0x0040, 0x1a04, 0x8c0e, 0x2008,
-+      0x0002, 0x8b93, 0x8b94, 0x8b97, 0x8b9a, 0x8b9d, 0x8ba0, 0x8b91,
-+      0x8b91, 0x8b91, 0x8b91, 0x8b91, 0x8b91, 0x8b91, 0x8b91, 0x8b91,
-+      0x8b91, 0x8b91, 0x8b91, 0x8b91, 0x8b91, 0x8b91, 0x8b91, 0x8b91,
-+      0x8b91, 0x8b91, 0x8b91, 0x8b91, 0x8b91, 0x8b91, 0x8b91, 0x8ba3,
-+      0x8bb2, 0x8b91, 0x8bb4, 0x8bb2, 0x8b91, 0x8b91, 0x8b91, 0x8b91,
-+      0x8b91, 0x8bb2, 0x8bb2, 0x8b91, 0x8b91, 0x8b91, 0x8b91, 0x8b91,
-+      0x8b91, 0x8b91, 0x8b91, 0x8bee, 0x8bb2, 0x8b91, 0x8bae, 0x8b91,
-+      0x8b91, 0x8b91, 0x8baf, 0x8b91, 0x8b91, 0x8b91, 0x8bb2, 0x8be5,
-+      0x8b91, 0x080c, 0x1515, 0x00f0, 0x2001, 0x000b, 0x0460, 0x2001,
-+      0x0003, 0x0448, 0x2001, 0x0005, 0x0430, 0x2001, 0x0001, 0x0418,
-+      0x2001, 0x0009, 0x0400, 0x080c, 0x7090, 0x6003, 0x0005, 0x2001,
-+      0xb7b8, 0x2004, 0x603e, 0x080c, 0x7173, 0x00a0, 0x0018, 0x0010,
-+      0x080c, 0x4efd, 0x0804, 0x8bff, 0x080c, 0x7090, 0x2001, 0xb7b6,
-+      0x2004, 0x6016, 0x2001, 0xb7b8, 0x2004, 0x603e, 0x6003, 0x0004,
-+      0x080c, 0x7173, 0x0005, 0x080c, 0x4efd, 0x080c, 0x7090, 0x6003,
-+      0x0002, 0x2001, 0xb7b8, 0x2004, 0x603e, 0x0036, 0x2019, 0xb55d,
-+      0x2304, 0xa084, 0xff00, 0x1120, 0x2001, 0xb7b6, 0x201c, 0x0040,
-+      0x8007, 0xa09a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0xa318,
-+      0x6316, 0x003e, 0x080c, 0x7173, 0x08e8, 0x080c, 0x7090, 0x080c,
-+      0xa01f, 0x080c, 0x861d, 0x080c, 0x7173, 0x08a0, 0x00e6, 0x00f6,
-+      0x2071, 0xb582, 0x2079, 0x0000, 0x080c, 0x2fcf, 0x00fe, 0x00ee,
-+      0x080c, 0x7090, 0x080c, 0x861d, 0x080c, 0x7173, 0x0818, 0x080c,
-+      0x7090, 0x2001, 0xb7b8, 0x2004, 0x603e, 0x6003, 0x0002, 0x2001,
-+      0xb7b6, 0x2004, 0x6016, 0x080c, 0x7173, 0x0005, 0x2600, 0x2008,
-+      0x0002, 0x8c17, 0x8c17, 0x8c17, 0x8bff, 0x8bff, 0x8c17, 0x080c,
-+      0x1515, 0x00e6, 0x0026, 0x0016, 0x080c, 0x9c5a, 0x0508, 0x6010,
-+      0x2070, 0x7034, 0xa086, 0x0139, 0x1148, 0x2001, 0x0030, 0x2009,
-+      0x0000, 0x2011, 0x4005, 0x080c, 0xa0d6, 0x0090, 0x7038, 0xd0fc,
-+      0x0178, 0x7007, 0x0000, 0x0016, 0x6004, 0xa08e, 0x0021, 0x0160,
-+      0xa08e, 0x003d, 0x0148, 0x001e, 0x7037, 0x0103, 0x7033, 0x0100,
-+      0x001e, 0x002e, 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc8, 0x00e6,
-+      0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x7023,
-+      0x8001, 0x00ee, 0x0005, 0x00d6, 0x6618, 0x2668, 0x6804, 0xa084,
-+      0x00ff, 0x00de, 0xa0b2, 0x000c, 0x1a0c, 0x1515, 0x6604, 0xa6b6,
-+      0x0043, 0x1120, 0x080c, 0xa092, 0x0804, 0x8cb8, 0x6604, 0xa6b6,
-+      0x0033, 0x1120, 0x080c, 0xa042, 0x0804, 0x8cb8, 0x6604, 0xa6b6,
-+      0x0028, 0x1120, 0x080c, 0x9e88, 0x0804, 0x8cb8, 0x6604, 0xa6b6,
-+      0x0029, 0x1118, 0x080c, 0x9e9f, 0x04d8, 0x6604, 0xa6b6, 0x001f,
-+      0x1118, 0x080c, 0x8786, 0x04a0, 0x6604, 0xa6b6, 0x0000, 0x1118,
-+      0x080c, 0x89da, 0x0468, 0x6604, 0xa6b6, 0x0022, 0x1118, 0x080c,
-+      0x87ae, 0x0430, 0x6604, 0xa6b6, 0x0035, 0x1118, 0x080c, 0x8815,
-+      0x00f8, 0x6604, 0xa6b6, 0x0039, 0x1118, 0x080c, 0x8976, 0x00c0,
-+      0x6604, 0xa6b6, 0x003d, 0x1118, 0x080c, 0x87c8, 0x0088, 0x6604,
-+      0xa6b6, 0x0044, 0x1118, 0x080c, 0x87e8, 0x0050, 0xa1b6, 0x0015,
-+      0x1110, 0x0053, 0x0028, 0xa1b6, 0x0016, 0x1118, 0x0804, 0x8e7c,
-+      0x0005, 0x080c, 0x8663, 0x0ce0, 0x8cdf, 0x8ce2, 0x8cdf, 0x8d24,
-+      0x8cdf, 0x8e09, 0x8e8a, 0x8cdf, 0x8cdf, 0x8e58, 0x8cdf, 0x8e6c,
-+      0xa1b6, 0x0048, 0x0140, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
-+      0x080c, 0x185e, 0x0005, 0x00e6, 0xacf0, 0x0004, 0x2e74, 0x7000,
-+      0x2070, 0x7037, 0x0103, 0x00ee, 0x080c, 0x861d, 0x0005, 0xe000,
-+      0xe000, 0x0005, 0x00e6, 0x2071, 0xb500, 0x7084, 0xa086, 0x0074,
-+      0x1530, 0x080c, 0xae59, 0x11b0, 0x00d6, 0x6018, 0x2068, 0x7030,
-+      0xd08c, 0x0128, 0x6800, 0xd0bc, 0x0110, 0xc0c5, 0x6802, 0x00d9,
-+      0x00de, 0x2001, 0x0006, 0x080c, 0x4efd, 0x080c, 0x2cc2, 0x080c,
-+      0x861d, 0x0078, 0x2001, 0x000a, 0x080c, 0x4efd, 0x080c, 0x2cc2,
-+      0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x6cd3, 0x0010, 0x080c,
-+      0x8df6, 0x00ee, 0x0005, 0x6800, 0xd084, 0x0168, 0x2001, 0x0000,
-+      0x080c, 0x4eeb, 0x2069, 0xb552, 0x6804, 0xd0a4, 0x0120, 0x2001,
-+      0x0006, 0x080c, 0x4f2a, 0x0005, 0x00d6, 0x2011, 0xb521, 0x2204,
-+      0xa086, 0x0074, 0x1904, 0x8df3, 0x6018, 0x2068, 0x6aa0, 0xa286,
-+      0x007e, 0x1120, 0x080c, 0x8fa2, 0x0804, 0x8d92, 0x080c, 0x8f98,
-+      0x6018, 0x2068, 0xa080, 0x0028, 0x2014, 0xa286, 0x0080, 0x11c0,
-+      0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010, 0xa005, 0x0138, 0x2068,
-+      0x6807, 0x0000, 0x6837, 0x0103, 0x6833, 0x0200, 0x2001, 0x0006,
-+      0x080c, 0x4efd, 0x080c, 0x2cc2, 0x080c, 0x861d, 0x0804, 0x8df4,
-+      0x00e6, 0x2071, 0xb535, 0x2e04, 0xd09c, 0x0188, 0x2071, 0xbb80,
-+      0x7108, 0x720c, 0xa18c, 0x00ff, 0x1118, 0xa284, 0xff00, 0x0138,
-+      0x6018, 0x2070, 0x70a0, 0xd0bc, 0x1110, 0x7112, 0x7216, 0x00ee,
-+      0x6010, 0xa005, 0x0198, 0x2068, 0x6838, 0xd0f4, 0x0178, 0x6834,
-+      0xa084, 0x00ff, 0xa086, 0x0039, 0x1958, 0x2001, 0x0000, 0x2009,
-+      0x0000, 0x2011, 0x4000, 0x080c, 0xa0d6, 0x0840, 0x2001, 0x0004,
-+      0x080c, 0x4efd, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x6cd3,
-+      0x0804, 0x8df4, 0x685c, 0xd0e4, 0x01d8, 0x080c, 0x9fd2, 0x080c,
-+      0x5acf, 0x0118, 0xd0dc, 0x1904, 0x8d4e, 0x2011, 0xb535, 0x2204,
-+      0xc0ad, 0x2012, 0x2001, 0xb78f, 0x2004, 0x00f6, 0x2079, 0x0100,
-+      0x78e3, 0x0000, 0x080c, 0x2872, 0x78e2, 0x00fe, 0x0804, 0x8d4e,
-+      0x080c, 0xa008, 0x2011, 0xb535, 0x2204, 0xc0a5, 0x2012, 0x0006,
-+      0x080c, 0xaf7b, 0x000e, 0x1904, 0x8d4e, 0xc0b5, 0x2012, 0x2001,
-+      0x0006, 0x080c, 0x4efd, 0x2001, 0x0000, 0x080c, 0x4eeb, 0x00c6,
-+      0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936,
-+      0x00fe, 0x080c, 0x2847, 0x00f6, 0x2079, 0xb500, 0x7976, 0x2100,
-+      0x2009, 0x0000, 0x080c, 0x281d, 0x7952, 0x00fe, 0x8108, 0x080c,
-+      0x4f4d, 0x2c00, 0x00ce, 0x1904, 0x8d4e, 0x601a, 0x2001, 0x0002,
-+      0x080c, 0x4efd, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
-+      0x080c, 0x6cd3, 0x0008, 0x0011, 0x00de, 0x0005, 0x2001, 0x0007,
-+      0x080c, 0x4efd, 0x2001, 0xb500, 0x2004, 0xa086, 0x0003, 0x1120,
-+      0x2001, 0x0007, 0x080c, 0x4f2a, 0x080c, 0x2cc2, 0x080c, 0x861d,
-+      0x0005, 0x00e6, 0x0026, 0x0016, 0x2071, 0xb500, 0x7084, 0xa086,
-+      0x0014, 0x15f0, 0x7000, 0xa086, 0x0003, 0x1128, 0x6010, 0xa005,
-+      0x1110, 0x080c, 0x3f3e, 0x00d6, 0x6018, 0x2068, 0x080c, 0x504b,
-+      0x080c, 0x8d13, 0x00de, 0x080c, 0x9051, 0x1550, 0x00d6, 0x6018,
-+      0x2068, 0x6890, 0x00de, 0xa005, 0x0518, 0x2001, 0x0006, 0x080c,
-+      0x4efd, 0x00e6, 0x6010, 0xa075, 0x01a8, 0x7034, 0xa084, 0x00ff,
-+      0xa086, 0x0039, 0x1148, 0x2001, 0x0000, 0x2009, 0x0000, 0x2011,
-+      0x4000, 0x080c, 0xa0d6, 0x0030, 0x7007, 0x0000, 0x7037, 0x0103,
-+      0x7033, 0x0200, 0x00ee, 0x080c, 0x2cc2, 0x080c, 0x861d, 0x0020,
-+      0x080c, 0x8c19, 0x080c, 0x8df6, 0x001e, 0x002e, 0x00ee, 0x0005,
-+      0x2011, 0xb521, 0x2204, 0xa086, 0x0014, 0x1158, 0x2001, 0x0002,
-+      0x080c, 0x4efd, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x6cd3,
-+      0x0010, 0x080c, 0x8df6, 0x0005, 0x2011, 0xb521, 0x2204, 0xa086,
-+      0x0004, 0x1138, 0x2001, 0x0007, 0x080c, 0x4efd, 0x080c, 0x861d,
-+      0x0010, 0x080c, 0x8df6, 0x0005, 0x000b, 0x0005, 0x8cdf, 0x8e95,
-+      0x8cdf, 0x8ec9, 0x8cdf, 0x8f54, 0x8e8a, 0x8cdf, 0x8cdf, 0x8f67,
-+      0x8cdf, 0x8f77, 0x6604, 0xa686, 0x0003, 0x0904, 0x8e09, 0xa6b6,
-+      0x001e, 0x1110, 0x080c, 0x861d, 0x0005, 0x00d6, 0x00c6, 0x080c,
-+      0x8f87, 0x1178, 0x2001, 0x0000, 0x080c, 0x4eeb, 0x2001, 0x0002,
-+      0x080c, 0x4efd, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x6cd3,
-+      0x00e8, 0x2009, 0xbb8e, 0x2104, 0xa086, 0x0009, 0x1160, 0x6018,
-+      0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0170, 0x8001, 0x6842,
-+      0x6017, 0x000a, 0x0058, 0x2009, 0xbb8f, 0x2104, 0xa084, 0xff00,
-+      0xa086, 0x1900, 0x1108, 0x08d0, 0x080c, 0x8df6, 0x00ce, 0x00de,
-+      0x0005, 0x0026, 0x2011, 0x0000, 0x080c, 0x8f95, 0x00d6, 0x2069,
-+      0xb79e, 0x2d04, 0xa005, 0x0168, 0x6018, 0x2068, 0x68a0, 0xa086,
-+      0x007e, 0x1138, 0x2069, 0xb51d, 0x2d04, 0x8000, 0x206a, 0x00de,
-+      0x0010, 0x00de, 0x0078, 0x2001, 0x0000, 0x080c, 0x4eeb, 0x2001,
-+      0x0002, 0x080c, 0x4efd, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
-+      0x6cd3, 0x0480, 0x00d6, 0x6010, 0x2068, 0x080c, 0x9c5a, 0x00de,
-+      0x0108, 0x6a34, 0x080c, 0x8c19, 0x2009, 0xbb8e, 0x2134, 0xa6b4,
-+      0x00ff, 0xa686, 0x0005, 0x0500, 0xa686, 0x000b, 0x01c8, 0x2009,
-+      0xbb8f, 0x2104, 0xa084, 0xff00, 0x1118, 0xa686, 0x0009, 0x01a0,
-+      0xa086, 0x1900, 0x1168, 0xa686, 0x0009, 0x0170, 0x2001, 0x0004,
-+      0x080c, 0x4efd, 0x2001, 0x0028, 0x6016, 0x6007, 0x004b, 0x0010,
-+      0x080c, 0x8df6, 0x002e, 0x0005, 0x00d6, 0xa286, 0x0139, 0x0160,
-+      0x6010, 0x2068, 0x080c, 0x9c5a, 0x0148, 0x6834, 0xa086, 0x0139,
-+      0x0118, 0x6838, 0xd0fc, 0x0110, 0x00de, 0x0c50, 0x6018, 0x2068,
-+      0x6840, 0xa084, 0x00ff, 0xa005, 0x0140, 0x8001, 0x6842, 0x6017,
-+      0x000a, 0x6007, 0x0016, 0x00de, 0x08e8, 0x68a0, 0xa086, 0x007e,
-+      0x1138, 0x00e6, 0x2071, 0xb500, 0x080c, 0x4bc6, 0x00ee, 0x0010,
-+      0x080c, 0x2c9c, 0x00de, 0x0860, 0x080c, 0x8f95, 0x1158, 0x2001,
-+      0x0004, 0x080c, 0x4efd, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c,
-+      0x6cd3, 0x0020, 0x080c, 0x8c19, 0x080c, 0x8df6, 0x0005, 0x0469,
-+      0x1158, 0x2001, 0x0008, 0x080c, 0x4efd, 0x6003, 0x0001, 0x6007,
-+      0x0005, 0x080c, 0x6cd3, 0x0010, 0x080c, 0x8df6, 0x0005, 0x00e9,
-+      0x1158, 0x2001, 0x000a, 0x080c, 0x4efd, 0x6003, 0x0001, 0x6007,
-+      0x0001, 0x080c, 0x6cd3, 0x0010, 0x080c, 0x8df6, 0x0005, 0x2009,
-+      0xbb8e, 0x2104, 0xa086, 0x0003, 0x1138, 0x2009, 0xbb8f, 0x2104,
-+      0xa084, 0xff00, 0xa086, 0x2a00, 0x0005, 0xa085, 0x0001, 0x0005,
-+      0x00c6, 0x0016, 0xac88, 0x0006, 0x2164, 0x080c, 0x4fb8, 0x001e,
-+      0x00ce, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6018,
-+      0x2068, 0x2071, 0xb535, 0x2e04, 0xa085, 0x0003, 0x2072, 0x080c,
-+      0x9026, 0x0560, 0x2009, 0xb535, 0x2104, 0xc0cd, 0x200a, 0x2001,
-+      0xb553, 0x2004, 0xd0a4, 0x0158, 0xa006, 0x2020, 0x2009, 0x002a,
-+      0x080c, 0xb0e8, 0x2001, 0xb50c, 0x200c, 0xc195, 0x2102, 0x2019,
-+      0x002a, 0x2009, 0x0001, 0x080c, 0x2c6f, 0x2071, 0xb500, 0x080c,
-+      0x2ab8, 0x00c6, 0x0156, 0x20a9, 0x0081, 0x2009, 0x007f, 0x080c,
-+      0x2d97, 0x8108, 0x1f04, 0x8fd7, 0x015e, 0x00ce, 0x080c, 0x8f98,
-+      0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0xbb80, 0x2079, 0x0100,
-+      0x2e04, 0xa084, 0x00ff, 0x2069, 0xb51c, 0x206a, 0x78e6, 0x0006,
-+      0x8e70, 0x2e04, 0x2069, 0xb51d, 0x206a, 0x78ea, 0x7832, 0x7836,
-+      0x2010, 0xa084, 0xff00, 0x001e, 0xa105, 0x2009, 0xb528, 0x200a,
-+      0x2200, 0xa084, 0x00ff, 0x2008, 0x080c, 0x2847, 0x080c, 0x5acf,
-+      0x0170, 0x2069, 0xbb8e, 0x2071, 0xb7b2, 0x6810, 0x2072, 0x6814,
-+      0x7006, 0x6818, 0x700a, 0x681c, 0x700e, 0x080c, 0x9fd2, 0x0040,
-+      0x2001, 0x0006, 0x080c, 0x4efd, 0x080c, 0x2cc2, 0x080c, 0x861d,
-+      0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x0026, 0x0036,
-+      0x00e6, 0x0156, 0x2019, 0xb528, 0x231c, 0x83ff, 0x01e8, 0x2071,
-+      0xbb80, 0x2e14, 0xa294, 0x00ff, 0x7004, 0xa084, 0xff00, 0xa205,
-+      0xa306, 0x1190, 0x2011, 0xbb96, 0xad98, 0x000a, 0x20a9, 0x0004,
-+      0x080c, 0x90da, 0x1148, 0x2011, 0xbb9a, 0xad98, 0x0006, 0x20a9,
-+      0x0004, 0x080c, 0x90da, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e,
-+      0x0005, 0x00e6, 0x2071, 0xbb8c, 0x7004, 0xa086, 0x0014, 0x11a8,
-+      0x7008, 0xa086, 0x0800, 0x1188, 0x700c, 0xd0ec, 0x0160, 0xa084,
-+      0x0f00, 0xa086, 0x0100, 0x1138, 0x7024, 0xd0a4, 0x1110, 0xd0ac,
-+      0x0110, 0xa006, 0x0010, 0xa085, 0x0001, 0x00ee, 0x0005, 0x00e6,
-+      0x00d6, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126,
-+      0x2091, 0x8000, 0x2029, 0xb7e9, 0x252c, 0x2021, 0xb7ef, 0x2424,
-+      0x2061, 0xbd00, 0x2071, 0xb500, 0x7248, 0x7068, 0xa202, 0x16f0,
-+      0x080c, 0xb110, 0x05a0, 0x671c, 0xa786, 0x0001, 0x0580, 0xa786,
-+      0x0007, 0x0568, 0x2500, 0xac06, 0x0550, 0x2400, 0xac06, 0x0538,
-+      0x00c6, 0x6000, 0xa086, 0x0004, 0x1110, 0x080c, 0x194d, 0xa786,
-+      0x0008, 0x1148, 0x080c, 0x9e58, 0x1130, 0x00ce, 0x080c, 0x8c19,
-+      0x080c, 0x9e1d, 0x00a0, 0x6010, 0x2068, 0x080c, 0x9c5a, 0x0160,
-+      0xa786, 0x0003, 0x11e8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+      0x080c, 0x5408, 0x080c, 0x9e11, 0x080c, 0x9e1d, 0x00ce, 0xace0,
-+      0x0018, 0x705c, 0xac02, 0x1210, 0x0804, 0x9084, 0x012e, 0x000e,
-+      0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005,
-+      0xa786, 0x0006, 0x1118, 0x080c, 0xb099, 0x0c30, 0xa786, 0x000a,
-+      0x09e0, 0x08c8, 0x220c, 0x2304, 0xa106, 0x1130, 0x8210, 0x8318,
-+      0x1f04, 0x90da, 0xa006, 0x0005, 0x2304, 0xa102, 0x0218, 0x2001,
-+      0x0001, 0x0010, 0x2001, 0x0000, 0xa18d, 0x0001, 0x0005, 0x6004,
-+      0xa08a, 0x0080, 0x1a0c, 0x1515, 0x080c, 0x9e47, 0x0120, 0x080c,
-+      0x9e58, 0x0168, 0x0028, 0x080c, 0x2cc2, 0x080c, 0x9e58, 0x0138,
-+      0x080c, 0x7090, 0x080c, 0x861d, 0x080c, 0x7173, 0x0005, 0x080c,
-+      0x8c19, 0x0cb0, 0xa182, 0x0040, 0x0002, 0x9120, 0x9120, 0x9120,
-+      0x9120, 0x9120, 0x9120, 0x9120, 0x9120, 0x9120, 0x9120, 0x9120,
-+      0x9122, 0x9122, 0x9122, 0x9122, 0x9120, 0x9120, 0x9120, 0x9122,
-+      0x080c, 0x1515, 0x600b, 0xffff, 0x6003, 0x0001, 0x6106, 0x080c,
-+      0x6c8d, 0x0126, 0x2091, 0x8000, 0x080c, 0x7173, 0x012e, 0x0005,
-+      0xa186, 0x0013, 0x1128, 0x6004, 0xa082, 0x0040, 0x0804, 0x91bc,
-+      0xa186, 0x0027, 0x11e8, 0x080c, 0x7090, 0x080c, 0x2c9c, 0x00d6,
-+      0x6110, 0x2168, 0x080c, 0x9c5a, 0x0168, 0x6837, 0x0103, 0x684b,
-+      0x0029, 0x6847, 0x0000, 0x694c, 0xc1c5, 0x694e, 0x080c, 0x5408,
-+      0x080c, 0x9e11, 0x00de, 0x080c, 0x861d, 0x080c, 0x7173, 0x0005,
-+      0xa186, 0x0014, 0x1120, 0x6004, 0xa082, 0x0040, 0x0428, 0xa186,
-+      0x0046, 0x0138, 0xa186, 0x0045, 0x0120, 0xa186, 0x0047, 0x190c,
-+      0x1515, 0x2001, 0x0109, 0x2004, 0xd084, 0x0198, 0x0126, 0x2091,
-+      0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x6b74, 0x002e, 0x001e,
-+      0x000e, 0x012e, 0xe000, 0x6000, 0xa086, 0x0002, 0x1110, 0x0804,
-+      0x91fa, 0x080c, 0x8663, 0x0005, 0x0002, 0x919a, 0x9198, 0x9198,
-+      0x9198, 0x9198, 0x9198, 0x9198, 0x9198, 0x9198, 0x9198, 0x9198,
-+      0x91b5, 0x91b5, 0x91b5, 0x91b5, 0x9198, 0x91b5, 0x9198, 0x91b5,
-+      0x080c, 0x1515, 0x080c, 0x7090, 0x00d6, 0x6110, 0x2168, 0x080c,
-+      0x9c5a, 0x0168, 0x6837, 0x0103, 0x684b, 0x0006, 0x6847, 0x0000,
-+      0x6850, 0xc0ec, 0x6852, 0x080c, 0x5408, 0x080c, 0x9e11, 0x00de,
-+      0x080c, 0x861d, 0x080c, 0x7173, 0x0005, 0x080c, 0x7090, 0x080c,
-+      0x861d, 0x080c, 0x7173, 0x0005, 0x0002, 0x91d2, 0x91d0, 0x91d0,
-+      0x91d0, 0x91d0, 0x91d0, 0x91d0, 0x91d0, 0x91d0, 0x91d0, 0x91d0,
-+      0x91e4, 0x91e4, 0x91e4, 0x91e4, 0x91d0, 0x91f3, 0x91d0, 0x91e4,
-+      0x080c, 0x1515, 0x080c, 0x7090, 0x2001, 0xb7b8, 0x2004, 0x603e,
-+      0x6003, 0x0002, 0x080c, 0x7173, 0x6010, 0xa088, 0x0013, 0x2104,
-+      0xa085, 0x0400, 0x200a, 0x0005, 0x080c, 0x7090, 0x2001, 0xb7b6,
-+      0x2004, 0x6016, 0x2001, 0xb7b8, 0x2004, 0x603e, 0x6003, 0x000f,
-+      0x080c, 0x7173, 0x0005, 0x080c, 0x7090, 0x080c, 0x861d, 0x080c,
-+      0x7173, 0x0005, 0xa182, 0x0040, 0x0002, 0x9210, 0x9210, 0x9210,
-+      0x9210, 0x9210, 0x9212, 0x92f7, 0x9326, 0x9210, 0x9210, 0x9210,
-+      0x9210, 0x9210, 0x9210, 0x9210, 0x9210, 0x9210, 0x9210, 0x9210,
-+      0x080c, 0x1515, 0x00e6, 0x00d6, 0x603f, 0x0000, 0x2071, 0xbb80,
-+      0x7124, 0x610a, 0x2071, 0xbb8c, 0x6110, 0x2168, 0x7614, 0xa6b4,
-+      0x0fff, 0x86ff, 0x0904, 0x92c0, 0xa68c, 0x0c00, 0x0518, 0x00f6,
-+      0x2c78, 0x080c, 0x5305, 0x00fe, 0x01c8, 0x684c, 0xd0ac, 0x01b0,
-+      0x6020, 0xd0dc, 0x1198, 0x6850, 0xd0bc, 0x1180, 0x7318, 0x6814,
-+      0xa306, 0x1904, 0x92d3, 0x731c, 0x6810, 0xa31e, 0x0138, 0xd6d4,
-+      0x0904, 0x92d3, 0x6b14, 0xa305, 0x1904, 0x92d3, 0x7318, 0x6b62,
-+      0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0518, 0xa186,
-+      0x0028, 0x1128, 0x080c, 0x9e36, 0x684b, 0x001c, 0x00e8, 0xd6dc,
-+      0x01a0, 0x684b, 0x0015, 0x684c, 0xd0ac, 0x0170, 0x6914, 0x6a10,
-+      0x2100, 0xa205, 0x0148, 0x7018, 0xa106, 0x1118, 0x701c, 0xa206,
-+      0x0118, 0x6962, 0x6a5e, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0x684b,
-+      0x0007, 0x0010, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0xa01e,
-+      0xd6c4, 0x01f0, 0xa686, 0x0100, 0x1140, 0x2001, 0xbb99, 0x2004,
-+      0xa005, 0x1118, 0xc6c4, 0x0804, 0x9221, 0x7328, 0x732c, 0x6b56,
-       0x83ff, 0x0170, 0xa38a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036,
--      0x2308, 0x2019, 0xbb98, 0xad90, 0x0019, 0x080c, 0x9907, 0x003e,
--      0xd6cc, 0x01d8, 0x7124, 0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021,
--      0x1250, 0x2071, 0xbb98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d,
--      0x080c, 0x9907, 0x0050, 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020,
--      0x695a, 0x0c78, 0x2d78, 0x080c, 0x98ac, 0xd6dc, 0x1110, 0xa006,
--      0x0030, 0x2001, 0x0001, 0x2071, 0xbb8c, 0x7218, 0x731c, 0x080c,
--      0x18b1, 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005, 0x2001, 0xb7b8,
--      0x2004, 0x603e, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c,
--      0x185e, 0x0005, 0x2001, 0xb7b8, 0x2004, 0x603e, 0x00d6, 0x6003,
--      0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0904, 0x9675, 0x603f,
--      0x0000, 0x00f6, 0x2c78, 0x080c, 0x5306, 0x00fe, 0x0560, 0x6814,
--      0x6910, 0xa115, 0x0540, 0x6a60, 0xa206, 0x1118, 0x685c, 0xa106,
--      0x0510, 0x684c, 0xc0e4, 0x684e, 0x6847, 0x0000, 0x6863, 0x0000,
--      0x685f, 0x0000, 0x6020, 0xd0f4, 0x1158, 0x697c, 0x6810, 0xa102,
--      0x603a, 0x6980, 0x6814, 0xa103, 0x6036, 0x6020, 0xc0f5, 0x6022,
--      0x00d6, 0x6018, 0x2068, 0x683c, 0x8000, 0x683e, 0x00de, 0x080c,
--      0x9f2f, 0x0804, 0x9675, 0x694c, 0xd1cc, 0x0904, 0x9645, 0x6948,
--      0x6838, 0xd0fc, 0x0904, 0x9608, 0x0016, 0x684c, 0x0006, 0x6850,
--      0x0006, 0x00f6, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002,
--      0x01e0, 0xa086, 0x0028, 0x1128, 0x684b, 0x001c, 0x784b, 0x001c,
--      0x00e8, 0xd1dc, 0x0158, 0x684b, 0x0015, 0x784b, 0x0015, 0x080c,
--      0xa0b9, 0x0118, 0x7944, 0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128,
--      0x684b, 0x0007, 0x784b, 0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130,
--      0x6810, 0x6914, 0xa115, 0x0110, 0x080c, 0x947d, 0x6848, 0x784a,
--      0x6860, 0x7862, 0x685c, 0x785e, 0xad90, 0x000d, 0xaf98, 0x000d,
--      0x2009, 0x0020, 0x0156, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210,
--      0x1f04, 0x95f4, 0x015e, 0x00fe, 0x000e, 0x6852, 0x000e, 0x684e,
--      0x080c, 0xa131, 0x001e, 0x2168, 0x080c, 0x161f, 0x0804, 0x9670,
--      0x0016, 0x00f6, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002,
--      0x01e0, 0xa086, 0x0028, 0x1128, 0x684b, 0x001c, 0x784b, 0x001c,
--      0x00e8, 0xd1dc, 0x0158, 0x684b, 0x0015, 0x784b, 0x0015, 0x080c,
--      0xa0b9, 0x0118, 0x7944, 0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128,
--      0x684b, 0x0007, 0x784b, 0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130,
--      0x6810, 0x6914, 0xa115, 0x0110, 0x080c, 0x947d, 0x6860, 0x7862,
--      0x685c, 0x785e, 0x684c, 0x784e, 0x00fe, 0x080c, 0x161f, 0x00de,
--      0x080c, 0xa131, 0x080c, 0x98f7, 0x0458, 0x6837, 0x0103, 0x6944,
--      0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01b0, 0xa086, 0x0028, 0x1118,
--      0x684b, 0x001c, 0x00d8, 0xd1dc, 0x0148, 0x684b, 0x0015, 0x080c,
--      0xa0b9, 0x0118, 0x6944, 0xc1dc, 0x6946, 0x0080, 0xd1d4, 0x0118,
--      0x684b, 0x0007, 0x0058, 0x684b, 0x0000, 0x684c, 0xd0ac, 0x0130,
--      0x6810, 0x6914, 0xa115, 0x0110, 0x080c, 0x947d, 0x080c, 0x5409,
--      0x080c, 0x9efd, 0x1110, 0x080c, 0x8617, 0x00de, 0x0005, 0x080c,
--      0x7091, 0x0010, 0x080c, 0x7127, 0x080c, 0x9c54, 0x01c0, 0x00d6,
--      0x6110, 0x2168, 0x6837, 0x0103, 0x2009, 0xb50c, 0x210c, 0xd18c,
--      0x11c0, 0xd184, 0x1198, 0x6108, 0x694a, 0xa18e, 0x0029, 0x1110,
--      0x080c, 0xb374, 0x6847, 0x0000, 0x080c, 0x5409, 0x00de, 0x080c,
--      0x8617, 0x080c, 0x7174, 0x080c, 0x7231, 0x0005, 0x684b, 0x0004,
--      0x0c88, 0x684b, 0x0004, 0x0c70, 0xa182, 0x0040, 0x0002, 0x96ba,
--      0x96ba, 0x96ba, 0x96ba, 0x96ba, 0x96bc, 0x96ba, 0x96bf, 0x96ba,
--      0x96ba, 0x96ba, 0x96ba, 0x96ba, 0x96ba, 0x96ba, 0x96ba, 0x96ba,
--      0x96ba, 0x96ba, 0x080c, 0x1515, 0x080c, 0x8617, 0x0005, 0x0006,
--      0x0026, 0xa016, 0x080c, 0x185e, 0x002e, 0x000e, 0x0005, 0xa182,
--      0x0085, 0x0002, 0x96d3, 0x96d1, 0x96d1, 0x96df, 0x96d1, 0x96d1,
--      0x96d1, 0x080c, 0x1515, 0x6003, 0x0001, 0x6106, 0x080c, 0x6c8e,
--      0x0126, 0x2091, 0x8000, 0x080c, 0x7174, 0x012e, 0x0005, 0x0026,
--      0x0056, 0x00d6, 0x00e6, 0x2071, 0xbb80, 0x7224, 0x6212, 0x7220,
--      0x080c, 0x9c44, 0x01a0, 0x2268, 0x6800, 0xa086, 0x0000, 0x0178,
--      0x6018, 0x6d18, 0xa52e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0x9917,
--      0x00ce, 0x0128, 0x6803, 0x0002, 0x6007, 0x0086, 0x0010, 0x6007,
--      0x0087, 0x6003, 0x0001, 0x080c, 0x6c8e, 0x080c, 0x7174, 0x00f6,
--      0x2278, 0x080c, 0x5306, 0x00fe, 0x0150, 0x6820, 0xd0ec, 0x0138,
--      0x00c6, 0x2260, 0x603f, 0x0000, 0x080c, 0x9f2f, 0x00ce, 0x00ee,
--      0x00de, 0x005e, 0x002e, 0x0005, 0xa186, 0x0013, 0x1160, 0x6004,
--      0xa08a, 0x0085, 0x0a0c, 0x1515, 0xa08a, 0x008c, 0x1a0c, 0x1515,
--      0xa082, 0x0085, 0x0072, 0xa186, 0x0027, 0x0120, 0xa186, 0x0014,
--      0x190c, 0x1515, 0x080c, 0x7091, 0x080c, 0x9e17, 0x080c, 0x7174,
--      0x0005, 0x9740, 0x9742, 0x9742, 0x9740, 0x9740, 0x9740, 0x9740,
--      0x080c, 0x1515, 0x080c, 0x7091, 0x080c, 0x9e17, 0x080c, 0x7174,
--      0x0005, 0xa186, 0x0013, 0x1128, 0x6004, 0xa082, 0x0085, 0x2008,
--      0x04a8, 0xa186, 0x0027, 0x11e8, 0x080c, 0x7091, 0x080c, 0x2c9c,
--      0x00d6, 0x6010, 0x2068, 0x080c, 0x9c54, 0x0150, 0x6837, 0x0103,
--      0x6847, 0x0000, 0x684b, 0x0029, 0x080c, 0x5409, 0x080c, 0x9e0b,
--      0x00de, 0x080c, 0x8617, 0x080c, 0x7174, 0x0005, 0x080c, 0x865d,
--      0x0ce0, 0xa186, 0x0014, 0x1dd0, 0x080c, 0x7091, 0x00d6, 0x6010,
--      0x2068, 0x080c, 0x9c54, 0x0d60, 0x6837, 0x0103, 0x6847, 0x0000,
--      0x684b, 0x0006, 0x6850, 0xc0ec, 0x6852, 0x08f0, 0x0002, 0x9790,
--      0x978e, 0x978e, 0x978e, 0x978e, 0x978e, 0x97a8, 0x080c, 0x1515,
--      0x080c, 0x7091, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039,
--      0x0118, 0xa186, 0x0035, 0x1118, 0x2001, 0xb7b6, 0x0010, 0x2001,
--      0xb7b7, 0x2004, 0x6016, 0x6003, 0x000c, 0x080c, 0x7174, 0x0005,
--      0x080c, 0x7091, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039,
--      0x0118, 0xa186, 0x0035, 0x1118, 0x2001, 0xb7b6, 0x0010, 0x2001,
--      0xb7b7, 0x2004, 0x6016, 0x6003, 0x000e, 0x080c, 0x7174, 0x0005,
--      0xa182, 0x008c, 0x1220, 0xa182, 0x0085, 0x0208, 0x001a, 0x080c,
--      0x865d, 0x0005, 0x97d1, 0x97d1, 0x97d1, 0x97d1, 0x97d3, 0x982c,
--      0x97d1, 0x080c, 0x1515, 0x00d6, 0x00f6, 0x2c78, 0x080c, 0x5306,
--      0x00fe, 0x0168, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039,
--      0x0118, 0xa186, 0x0035, 0x1118, 0x00de, 0x0804, 0x983f, 0x080c,
--      0x9c54, 0x1118, 0x080c, 0x9e0b, 0x00f0, 0x6010, 0x2068, 0x684c,
--      0xd0e4, 0x1110, 0x080c, 0x9e0b, 0x6837, 0x0103, 0x6850, 0xd0b4,
--      0x0128, 0x684b, 0x0006, 0xc0ec, 0x6852, 0x0048, 0xd0bc, 0x0118,
--      0x684b, 0x0002, 0x0020, 0x684b, 0x0005, 0x080c, 0x9ecc, 0x6847,
--      0x0000, 0x080c, 0x5409, 0x2c68, 0x080c, 0x85c1, 0x01c0, 0x6003,
--      0x0001, 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0xbb8e, 0x210c,
--      0x6136, 0x2009, 0xbb8f, 0x210c, 0x613a, 0x6918, 0x611a, 0x080c,
--      0xa021, 0x6950, 0x6152, 0x601f, 0x0001, 0x080c, 0x6c8e, 0x2d60,
--      0x080c, 0x8617, 0x00de, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x5306,
--      0x00fe, 0x0598, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0035,
--      0x0130, 0xa186, 0x001e, 0x0118, 0xa186, 0x0039, 0x1530, 0x00d6,
--      0x2c68, 0x080c, 0xa104, 0x1904, 0x9884, 0x080c, 0x85c1, 0x01d8,
--      0x6106, 0x6003, 0x0001, 0x601f, 0x0001, 0x6918, 0x611a, 0x6928,
--      0x612a, 0x692c, 0x612e, 0x6930, 0xa18c, 0x00ff, 0x6132, 0x6934,
--      0x6136, 0x6938, 0x613a, 0x6950, 0x6152, 0x080c, 0xa021, 0x080c,
--      0x6c8e, 0x080c, 0x7174, 0x2d60, 0x00f8, 0x00d6, 0x6010, 0x2068,
--      0x080c, 0x9c54, 0x01c8, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128,
--      0xc0ec, 0x6852, 0x684b, 0x0006, 0x0048, 0xd0bc, 0x0118, 0x684b,
--      0x0002, 0x0020, 0x684b, 0x0005, 0x080c, 0x9ecc, 0x6847, 0x0000,
--      0x080c, 0x5409, 0x080c, 0x9e0b, 0x00de, 0x080c, 0x8617, 0x0005,
--      0x0016, 0x00d6, 0x6010, 0x2068, 0x080c, 0x9c54, 0x0140, 0x6837,
--      0x0103, 0x684b, 0x0028, 0x6847, 0x0000, 0x080c, 0x5409, 0x00de,
--      0x001e, 0xa186, 0x0013, 0x0148, 0xa186, 0x0014, 0x0130, 0xa186,
--      0x0027, 0x0118, 0x080c, 0x865d, 0x0030, 0x080c, 0x7091, 0x080c,
--      0x9e17, 0x080c, 0x7174, 0x0005, 0x0056, 0x0066, 0x00d6, 0x00f6,
--      0x2029, 0x0001, 0xa182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100,
--      0x2130, 0x2069, 0xbb98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020,
--      0xaf90, 0x001d, 0x080c, 0x9907, 0xa6b2, 0x0020, 0x7804, 0xa06d,
--      0x0110, 0x080c, 0x161f, 0x080c, 0x15f8, 0x0500, 0x8528, 0x6837,
--      0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a, 0x003d, 0x1228,
--      0x2608, 0xad90, 0x000f, 0x0459, 0x0088, 0xa6b2, 0x003c, 0x2009,
--      0x003c, 0x2d78, 0xad90, 0x000f, 0x0411, 0x0c28, 0x00fe, 0x852f,
--      0xa5ad, 0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0028, 0x00fe, 0x852f,
--      0xa5ad, 0x0003, 0x7d36, 0x00de, 0x006e, 0x005e, 0x0005, 0x00f6,
--      0x8dff, 0x0158, 0x6804, 0xa07d, 0x0130, 0x6807, 0x0000, 0x080c,
--      0x5409, 0x2f68, 0x0cb8, 0x080c, 0x5409, 0x00fe, 0x0005, 0x0156,
--      0xa184, 0x0001, 0x0108, 0x8108, 0x810c, 0x21a8, 0x2304, 0x8007,
--      0x2012, 0x8318, 0x8210, 0x1f04, 0x990e, 0x015e, 0x0005, 0x0066,
--      0x0126, 0x2091, 0x8000, 0x2031, 0x0001, 0x601c, 0xa084, 0x000f,
--      0x0083, 0x012e, 0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066,
--      0x2031, 0x0000, 0x601c, 0xa084, 0x000f, 0x001b, 0x006e, 0x012e,
--      0x0005, 0x994e, 0x994e, 0x9949, 0x9970, 0x993c, 0x9949, 0x9970,
--      0x9949, 0x9949, 0x993c, 0x9949, 0x080c, 0x1515, 0x0036, 0x2019,
--      0x0010, 0x080c, 0xacd4, 0x601f, 0x0006, 0x6003, 0x0007, 0x003e,
--      0x0005, 0xa006, 0x0005, 0xa085, 0x0001, 0x0005, 0x00d6, 0x86ff,
--      0x11d8, 0x6010, 0x2068, 0x080c, 0x9c54, 0x01c0, 0x6834, 0xa086,
--      0x0139, 0x1128, 0x684b, 0x0005, 0x6853, 0x0000, 0x0028, 0xa00e,
--      0x2001, 0x0005, 0x080c, 0x54dc, 0x080c, 0x9ecc, 0x080c, 0x5409,
--      0x080c, 0x8617, 0xa085, 0x0001, 0x00de, 0x0005, 0xa006, 0x0ce0,
--      0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1515, 0x000b, 0x0005, 0x9987,
--      0x99a8, 0x9989, 0x99c7, 0x99a5, 0x9987, 0x9949, 0x994e, 0x994e,
--      0x9949, 0x9949, 0x9949, 0x9949, 0x9949, 0x9949, 0x9949, 0x080c,
--      0x1515, 0x86ff, 0x11b8, 0x601c, 0xa086, 0x0006, 0x0198, 0x00d6,
--      0x6010, 0x2068, 0x080c, 0x9c54, 0x0110, 0x080c, 0x9ecc, 0x00de,
--      0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x6c8e,
--      0x080c, 0x7174, 0xa085, 0x0001, 0x0005, 0x080c, 0x194d, 0x0c08,
--      0x00e6, 0x2071, 0xb7e0, 0x7024, 0xac06, 0x1110, 0x080c, 0x7f5a,
--      0x601c, 0xa084, 0x000f, 0xa086, 0x0006, 0x1150, 0x0086, 0x0096,
--      0x2049, 0x0001, 0x2c40, 0x080c, 0x8131, 0x009e, 0x008e, 0x0010,
--      0x080c, 0x7e59, 0x00ee, 0x1928, 0x080c, 0x9949, 0x0005, 0x0036,
--      0x00e6, 0x2071, 0xb7e0, 0x703c, 0xac06, 0x1140, 0x2019, 0x0000,
--      0x080c, 0x7fe5, 0x00ee, 0x003e, 0x0804, 0x9989, 0x080c, 0x8257,
--      0x00ee, 0x003e, 0x1904, 0x9989, 0x080c, 0x9949, 0x0005, 0x00c6,
--      0x601c, 0xa084, 0x000f, 0x0013, 0x00ce, 0x0005, 0x99f8, 0x9a65,
--      0x9bb3, 0x9a03, 0x9e17, 0x99f8, 0xacc6, 0x8617, 0x9a65, 0x99f1,
--      0x9c1e, 0x080c, 0x1515, 0x080c, 0x9e52, 0x1110, 0x080c, 0x8c13,
--      0x0005, 0x080c, 0x7091, 0x080c, 0x7174, 0x080c, 0x8617, 0x0005,
--      0x6017, 0x0001, 0x0005, 0x080c, 0x9c54, 0x0120, 0x6010, 0xa080,
--      0x0019, 0x2c02, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1515, 0x000b,
--      0x0005, 0x9a21, 0x9a23, 0x9a43, 0x9a55, 0x9a62, 0x9a21, 0x99f8,
--      0x99f8, 0x99f8, 0x9a55, 0x9a55, 0x9a21, 0x9a21, 0x9a21, 0x9a21,
--      0x9a5f, 0x080c, 0x1515, 0x00e6, 0x6010, 0x2070, 0x7050, 0xc0b5,
--      0x7052, 0x2071, 0xb7e0, 0x7024, 0xac06, 0x0190, 0x080c, 0x7e59,
--      0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x2001, 0xb7b7,
--      0x2004, 0x6016, 0x080c, 0x6c8e, 0x080c, 0x7174, 0x00ee, 0x0005,
--      0x6017, 0x0001, 0x0cd8, 0x00d6, 0x6010, 0x2068, 0x6850, 0xc0b5,
--      0x6852, 0x00de, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002,
--      0x080c, 0x6c8e, 0x080c, 0x7174, 0x0005, 0x00d6, 0x6017, 0x0001,
--      0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x00de, 0x0005, 0x080c,
--      0x8617, 0x0005, 0x080c, 0x194d, 0x08f0, 0x6000, 0xa08a, 0x0010,
--      0x1a0c, 0x1515, 0x000b, 0x0005, 0x9a7c, 0x9a00, 0x9a7e, 0x9a7c,
--      0x9a7e, 0x9a7e, 0x99f9, 0x9a7c, 0x99f3, 0x99f3, 0x9a7c, 0x9a7c,
--      0x9a7c, 0x9a7c, 0x9a7c, 0x9a7c, 0x080c, 0x1515, 0x00d6, 0x6018,
--      0x2068, 0x6804, 0xa084, 0x00ff, 0x00de, 0xa08a, 0x000c, 0x1a0c,
--      0x1515, 0x000b, 0x0005, 0x9a97, 0x9b59, 0x9a99, 0x9ad7, 0x9a99,
--      0x9ad7, 0x9a99, 0x9aa7, 0x9a97, 0x9ad7, 0x9a97, 0x9ac3, 0x080c,
--      0x1515, 0x6004, 0xa08e, 0x0016, 0x05a8, 0xa08e, 0x0004, 0x0590,
--      0xa08e, 0x0002, 0x0578, 0xa08e, 0x004b, 0x0904, 0x9b55, 0x6004,
--      0x080c, 0x9e52, 0x0904, 0x9b72, 0xa08e, 0x0021, 0x0904, 0x9b76,
--      0xa08e, 0x0022, 0x0904, 0x9b72, 0xa08e, 0x003d, 0x0904, 0x9b76,
--      0xa08e, 0x0039, 0x0904, 0x9b7a, 0xa08e, 0x0035, 0x0904, 0x9b7a,
--      0xa08e, 0x001e, 0x0188, 0xa08e, 0x0001, 0x1150, 0x00d6, 0x6018,
--      0x2068, 0x6804, 0xa084, 0x00ff, 0x00de, 0xa086, 0x0006, 0x0110,
--      0x080c, 0x2c9c, 0x080c, 0x8c13, 0x080c, 0x9e17, 0x0005, 0x00c6,
--      0x00d6, 0x6104, 0xa186, 0x0016, 0x0904, 0x9b46, 0xa186, 0x0002,
--      0x15d8, 0x2001, 0xb535, 0x2004, 0xd08c, 0x1198, 0x080c, 0x5ad0,
--      0x1180, 0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003,
--      0x0001, 0xa085, 0x0001, 0x080c, 0x5b14, 0x080c, 0x5a08, 0x0804,
--      0x9b9c, 0x6018, 0x2068, 0x2001, 0xb535, 0x2004, 0xd0ac, 0x1904,
--      0x9b9c, 0x68a0, 0xd0bc, 0x1904, 0x9b9c, 0x6840, 0xa084, 0x00ff,
--      0xa005, 0x0190, 0x8001, 0x6842, 0x6013, 0x0000, 0x601f, 0x0007,
--      0x6017, 0x0398, 0x603f, 0x0000, 0x080c, 0x85c1, 0x0128, 0x2d00,
--      0x601a, 0x601f, 0x0001, 0x0450, 0x00de, 0x00ce, 0x6004, 0xa08e,
--      0x0002, 0x11a8, 0x6018, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e,
--      0x1170, 0x2009, 0xb535, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071,
--      0xb500, 0x080c, 0x4bc7, 0x00ee, 0x080c, 0x8c13, 0x0020, 0x080c,
--      0x8c13, 0x080c, 0x2c9c, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x2cc2, 0x012e, 0x00ee, 0x080c, 0x9e17, 0x0005, 0x2001, 0x0002,
--      0x080c, 0x4efe, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x6cd4,
--      0x080c, 0x7174, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x2cc2, 0x0804,
--      0x9ad2, 0x00c6, 0x00d6, 0x6104, 0xa186, 0x0016, 0x0d38, 0x6018,
--      0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0904, 0x9b1c, 0x8001,
--      0x6842, 0x6003, 0x0001, 0x080c, 0x6cd4, 0x080c, 0x7174, 0x00de,
--      0x00ce, 0x0898, 0x080c, 0x8c13, 0x0804, 0x9ad4, 0x080c, 0x8c41,
--      0x0804, 0x9ad4, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xa104, 0x00de,
--      0x0118, 0x080c, 0x8617, 0x00b8, 0x6004, 0x8007, 0x6130, 0xa18c,
--      0x00ff, 0xa105, 0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f,
--      0x0002, 0x6038, 0x600a, 0x2001, 0xb7b7, 0x2004, 0x6016, 0x080c,
--      0x6c8e, 0x080c, 0x7174, 0x0005, 0x00de, 0x00ce, 0x080c, 0x8c13,
--      0x080c, 0x2c9c, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2cc2,
--      0x6013, 0x0000, 0x601f, 0x0007, 0x6017, 0x0398, 0x603f, 0x0000,
--      0x012e, 0x00ee, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1515,
--      0x000b, 0x0005, 0x9bca, 0x9bca, 0x9bca, 0x9bca, 0x9bca, 0x9bca,
--      0x9bca, 0x9bca, 0x9bca, 0x99f8, 0x9bca, 0x9a00, 0x9bcc, 0x9a00,
--      0x9bd9, 0x9bca, 0x080c, 0x1515, 0x6004, 0xa086, 0x008b, 0x0148,
--      0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x6c8e, 0x080c, 0x7174,
--      0x0005, 0x080c, 0x9e0b, 0x080c, 0x9c54, 0x0580, 0x080c, 0x2c9c,
--      0x00d6, 0x080c, 0x9c54, 0x0168, 0x6010, 0x2068, 0x6837, 0x0103,
--      0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ed, 0x6852, 0x080c,
--      0x5409, 0x2c68, 0x080c, 0x85c1, 0x0150, 0x6818, 0x601a, 0x080c,
--      0xa021, 0x00c6, 0x2d60, 0x080c, 0x9e17, 0x00ce, 0x0008, 0x2d60,
--      0x00de, 0x6013, 0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003,
--      0x0001, 0x080c, 0x6cd4, 0x080c, 0x7174, 0x0078, 0x6030, 0xa08c,
--      0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186, 0x0035, 0x1118,
--      0x080c, 0x2c9c, 0x08b0, 0x080c, 0x9e17, 0x0005, 0x6000, 0xa08a,
--      0x0010, 0x1a0c, 0x1515, 0x000b, 0x0005, 0x9c35, 0x9c35, 0x9c35,
--      0x9c37, 0x9c37, 0x9c35, 0x9c35, 0x9c35, 0x9c35, 0x9c35, 0x9c35,
--      0x9c35, 0x9c35, 0x9c35, 0x9c35, 0x9c35, 0x080c, 0x1515, 0x080c,
--      0x8257, 0x190c, 0x1515, 0x6110, 0x2168, 0x684b, 0x0006, 0x080c,
--      0x5409, 0x080c, 0x8617, 0x0005, 0xa284, 0x0007, 0x1158, 0xa282,
--      0xbd00, 0x0240, 0x2001, 0xb517, 0x2004, 0xa202, 0x1218, 0xa085,
--      0x0001, 0x0005, 0xa006, 0x0ce8, 0x0026, 0x6210, 0xa294, 0xf000,
--      0x002e, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091,
--      0x8000, 0x2061, 0xbd00, 0x2071, 0xb500, 0x7348, 0x7068, 0xa302,
--      0x12a8, 0x601c, 0xa206, 0x1160, 0x080c, 0x9fac, 0x0148, 0x080c,
--      0x9e52, 0x1110, 0x080c, 0x8c13, 0x00c6, 0x080c, 0x8617, 0x00ce,
--      0xace0, 0x0018, 0x705c, 0xac02, 0x1208, 0x0c38, 0x012e, 0x000e,
--      0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0xa188,
--      0xb635, 0x210c, 0x81ff, 0x0128, 0x2061, 0xb8f4, 0x611a, 0x080c,
--      0x2c9c, 0xa006, 0x0010, 0xa085, 0x0001, 0x001e, 0x00ce, 0x00ee,
--      0x0005, 0x00c6, 0x0056, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c,
--      0x85c1, 0x005e, 0x0180, 0x6612, 0x651a, 0x080c, 0xa021, 0x601f,
--      0x0003, 0x2009, 0x004b, 0x080c, 0x8646, 0xa085, 0x0001, 0x012e,
--      0x005e, 0x00ce, 0x0005, 0xa006, 0x0cd0, 0x00c6, 0x0056, 0x0126,
--      0x2091, 0x8000, 0x62a0, 0x00c6, 0x080c, 0x9ed0, 0x005e, 0x0550,
--      0x6013, 0x0000, 0x651a, 0x080c, 0xa021, 0x601f, 0x0003, 0x0016,
--      0x00c6, 0x2560, 0x080c, 0x51ab, 0x00ce, 0x080c, 0x6df6, 0x0076,
--      0x2039, 0x0000, 0x080c, 0x6d03, 0x2c08, 0x080c, 0xae76, 0x007e,
--      0x001e, 0xd184, 0x0128, 0x080c, 0x8617, 0xa085, 0x0001, 0x0030,
--      0x2009, 0x004c, 0x080c, 0x8646, 0xa085, 0x0001, 0x012e, 0x005e,
--      0x00ce, 0x0005, 0xa006, 0x0cd0, 0x00f6, 0x00c6, 0x0046, 0x00c6,
--      0x080c, 0x85c1, 0x2c78, 0x00ce, 0x0180, 0x7e12, 0x2c00, 0x781a,
--      0x781f, 0x0003, 0x2021, 0x0005, 0x080c, 0x9d4a, 0x2f60, 0x2009,
--      0x004d, 0x080c, 0x8646, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe,
--      0x0005, 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c, 0x85c1, 0x2c78,
--      0x00ce, 0x0178, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021,
--      0x0005, 0x0481, 0x2f60, 0x2009, 0x004e, 0x080c, 0x8646, 0xa085,
--      0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046,
--      0x00c6, 0x080c, 0x85c1, 0x2c78, 0x00ce, 0x01c0, 0x7e12, 0x2c00,
--      0x781a, 0x781f, 0x0003, 0x2021, 0x0004, 0x00a1, 0x2001, 0xb7a0,
--      0x2004, 0xd0fc, 0x0120, 0x2f60, 0x080c, 0x8617, 0x0028, 0x2f60,
--      0x2009, 0x0052, 0x080c, 0x8646, 0xa085, 0x0001, 0x004e, 0x00ce,
--      0x00fe, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x514d, 0x0118, 0x2001, 0x9d4f, 0x0028, 0x080c, 0x511d, 0x0158,
--      0x2001, 0x9d55, 0x0006, 0xa00e, 0x2400, 0x080c, 0x54dc, 0x080c,
--      0x5409, 0x000e, 0x0807, 0x2418, 0x080c, 0x7030, 0x62a0, 0x0086,
--      0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c, 0x6e0f, 0x008e,
--      0x080c, 0x6d03, 0x2f08, 0x2648, 0x080c, 0xae76, 0x613c, 0x81ff,
--      0x090c, 0x6ec4, 0x080c, 0x7174, 0x012e, 0x007e, 0x009e, 0x0005,
--      0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x85c1, 0x001e,
--      0x0188, 0x660a, 0x611a, 0x080c, 0xa021, 0x601f, 0x0001, 0x2d00,
--      0x6012, 0x2009, 0x001f, 0x080c, 0x8646, 0xa085, 0x0001, 0x012e,
--      0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
--      0x00c6, 0x080c, 0x85c1, 0x001e, 0x0188, 0x660a, 0x611a, 0x080c,
--      0xa021, 0x601f, 0x0008, 0x2d00, 0x6012, 0x2009, 0x0021, 0x080c,
--      0x8646, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8,
--      0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x85c1, 0x001e,
--      0x0188, 0x660a, 0x611a, 0x080c, 0xa021, 0x601f, 0x0001, 0x2d00,
--      0x6012, 0x2009, 0x003d, 0x080c, 0x8646, 0xa085, 0x0001, 0x012e,
--      0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
--      0x00c6, 0x080c, 0x9ed0, 0x001e, 0x0180, 0x611a, 0x080c, 0xa021,
--      0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x080c, 0x8646,
--      0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6,
--      0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x85c1, 0x001e, 0x0188,
--      0x660a, 0x611a, 0x080c, 0xa021, 0x601f, 0x0001, 0x2d00, 0x6012,
--      0x2009, 0x0044, 0x080c, 0x8646, 0xa085, 0x0001, 0x012e, 0x00ce,
--      0x0005, 0xa006, 0x0cd8, 0x0026, 0x00d6, 0x6218, 0x2268, 0x6a3c,
--      0x82ff, 0x0110, 0x8211, 0x6a3e, 0x00de, 0x002e, 0x0005, 0x0006,
--      0x6000, 0xa086, 0x0000, 0x0190, 0x6013, 0x0000, 0x601f, 0x0007,
--      0x2001, 0xb7b6, 0x2004, 0x0006, 0xa082, 0x0051, 0x000e, 0x0208,
--      0x8004, 0x6016, 0x080c, 0xb32e, 0x603f, 0x0000, 0x000e, 0x0005,
--      0x0066, 0x00c6, 0x00d6, 0x2031, 0xb553, 0x2634, 0xd6e4, 0x0128,
--      0x6618, 0x2660, 0x6e48, 0x080c, 0x50d6, 0x00de, 0x00ce, 0x006e,
--      0x0005, 0x0006, 0x0016, 0x6004, 0xa08e, 0x0002, 0x0140, 0xa08e,
--      0x0003, 0x0128, 0xa08e, 0x0004, 0x0110, 0xa085, 0x0001, 0x001e,
--      0x000e, 0x0005, 0x0006, 0x00d6, 0x6010, 0xa06d, 0x0148, 0x6834,
--      0xa086, 0x0139, 0x0138, 0x6838, 0xd0fc, 0x0110, 0xa006, 0x0010,
--      0xa085, 0x0001, 0x00de, 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091,
--      0x8000, 0x00c6, 0x080c, 0x85c1, 0x001e, 0x0190, 0x611a, 0x080c,
--      0xa021, 0x601f, 0x0001, 0x2d00, 0x6012, 0x080c, 0x2c9c, 0x2009,
--      0x0028, 0x080c, 0x8646, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
--      0xa006, 0x0cd8, 0xa186, 0x0015, 0x1178, 0x2011, 0xb521, 0x2204,
--      0xa086, 0x0074, 0x1148, 0x080c, 0x8f92, 0x6003, 0x0001, 0x6007,
--      0x0029, 0x080c, 0x6cd4, 0x0020, 0x080c, 0x8c13, 0x080c, 0x8617,
--      0x0005, 0xa186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x4efe,
--      0x00e8, 0xa186, 0x0015, 0x11e8, 0x2011, 0xb521, 0x2204, 0xa086,
--      0x0014, 0x11b8, 0x00d6, 0x6018, 0x2068, 0x080c, 0x504c, 0x00de,
--      0x080c, 0x904b, 0x1170, 0x00d6, 0x6018, 0x2068, 0x6890, 0x00de,
--      0xa005, 0x0138, 0x2001, 0x0006, 0x080c, 0x4efe, 0x080c, 0x879a,
--      0x0020, 0x080c, 0x8c13, 0x080c, 0x8617, 0x0005, 0x6848, 0xa086,
--      0x0005, 0x1108, 0x0009, 0x0005, 0x6850, 0xc0ad, 0x6852, 0x0005,
--      0x00e6, 0x0126, 0x2071, 0xb500, 0x2091, 0x8000, 0x7548, 0xa582,
--      0x0001, 0x0608, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0148,
--      0xace0, 0x0018, 0x705c, 0xac02, 0x1208, 0x0cb0, 0x2061, 0xbd00,
--      0x0c98, 0x6003, 0x0008, 0x8529, 0x754a, 0xaca8, 0x0018, 0x705c,
--      0xa502, 0x1230, 0x754e, 0xa085, 0x0001, 0x012e, 0x00ee, 0x0005,
--      0x704f, 0xbd00, 0x0cc0, 0xa006, 0x0cc0, 0x00e6, 0x2071, 0xbb8c,
--      0x7014, 0xd0e4, 0x0150, 0x6013, 0x0000, 0x6003, 0x0001, 0x6007,
--      0x0050, 0x080c, 0x6c8e, 0x080c, 0x7174, 0x00ee, 0x0005, 0x00c6,
--      0x00f6, 0x2c78, 0x080c, 0x5306, 0x00fe, 0x0120, 0x601c, 0xa084,
--      0x000f, 0x0013, 0x00ce, 0x0005, 0x99f8, 0x9f27, 0x9f2a, 0x9f2d,
--      0xb11b, 0xb136, 0xb139, 0x99f8, 0x99f8, 0x080c, 0x1515, 0xe000,
--      0xe000, 0x0005, 0xe000, 0xe000, 0x0005, 0x0009, 0x0005, 0x00f6,
--      0x2c78, 0x080c, 0x5306, 0x0538, 0x080c, 0x85c1, 0x1128, 0x2001,
--      0xb7b8, 0x2004, 0x783e, 0x00f8, 0x7818, 0x601a, 0x080c, 0xa021,
--      0x781c, 0xa086, 0x0003, 0x0128, 0x7808, 0x6036, 0x2f00, 0x603a,
--      0x0020, 0x7808, 0x603a, 0x2f00, 0x6036, 0x602a, 0x601f, 0x0001,
--      0x6007, 0x0035, 0x6003, 0x0001, 0x7950, 0x6152, 0x080c, 0x6c8e,
--      0x080c, 0x7174, 0x2f60, 0x00fe, 0x0005, 0x0016, 0x00f6, 0x682c,
--      0x6032, 0xa08e, 0x0001, 0x0138, 0xa086, 0x0005, 0x0140, 0xa006,
--      0x602a, 0x602e, 0x00a0, 0x6820, 0xc0f4, 0xc0d5, 0x6822, 0x6810,
--      0x2078, 0x787c, 0x6938, 0xa102, 0x7880, 0x6934, 0xa103, 0x1e78,
--      0x6834, 0x602a, 0x6838, 0xa084, 0xfffc, 0x683a, 0x602e, 0x2d00,
--      0x6036, 0x6808, 0x603a, 0x6918, 0x611a, 0x6950, 0x6152, 0x601f,
--      0x0001, 0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x6c8e, 0x6803,
--      0x0002, 0x00fe, 0x001e, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x5306,
--      0x1118, 0xa085, 0x0001, 0x0070, 0x6020, 0xd0f4, 0x1150, 0xc0f5,
--      0x6022, 0x6010, 0x2078, 0x7828, 0x603a, 0x782c, 0x6036, 0x080c,
--      0x194d, 0xa006, 0x00fe, 0x0005, 0x0006, 0x0016, 0x6004, 0xa08e,
--      0x0034, 0x01b8, 0xa08e, 0x0035, 0x01a0, 0xa08e, 0x0036, 0x0188,
--      0xa08e, 0x0037, 0x0170, 0xa08e, 0x0038, 0x0158, 0xa08e, 0x0039,
--      0x0140, 0xa08e, 0x003a, 0x0128, 0xa08e, 0x003b, 0x0110, 0xa085,
--      0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,
--      0x00e6, 0x2001, 0xb7b2, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032,
--      0x080c, 0x6b41, 0x2001, 0xb7b6, 0x82ff, 0x1110, 0x2011, 0x0014,
--      0x2202, 0x2001, 0xb7b4, 0x200c, 0x8000, 0x2014, 0x2071, 0xb78e,
--      0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x6b41, 0x2001, 0xb7b7,
--      0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2009, 0xb7b8, 0xa280,
--      0x000a, 0x200a, 0x080c, 0x532b, 0x00ee, 0x003e, 0x002e, 0x001e,
--      0x000e, 0x0005, 0x0006, 0x00e6, 0x2001, 0xb7b6, 0x2003, 0x0028,
--      0x2001, 0xb7b7, 0x2003, 0x0014, 0x2071, 0xb78e, 0x701b, 0x0000,
--      0x701f, 0x07d0, 0x2001, 0xb7b8, 0x2003, 0x001e, 0x00ee, 0x000e,
--      0x0005, 0x00d6, 0x6054, 0xa06d, 0x0110, 0x080c, 0x160f, 0x00de,
--      0x0005, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c,
--      0x85c1, 0x001e, 0x0178, 0x611a, 0x0ca1, 0x601f, 0x0001, 0x2d00,
--      0x6012, 0x2009, 0x0033, 0x080c, 0x8646, 0xa085, 0x0001, 0x012e,
--      0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071,
--      0xb500, 0xa186, 0x0015, 0x1500, 0x7084, 0xa086, 0x0018, 0x11e0,
--      0x6010, 0x2068, 0x6a3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x7332,
--      0x01d8, 0x7070, 0x6a50, 0xa206, 0x1160, 0x7074, 0x6a54, 0xa206,
--      0x1140, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x080c,
--      0x2ce1, 0x080c, 0x879a, 0x0020, 0x080c, 0x8c13, 0x080c, 0x8617,
--      0x00fe, 0x00ee, 0x00de, 0x0005, 0x7054, 0x6a54, 0xa206, 0x0d48,
--      0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x85c1,
--      0x001e, 0x0180, 0x611a, 0x080c, 0xa021, 0x601f, 0x0001, 0x2d00,
--      0x6012, 0x2009, 0x0043, 0x080c, 0x8646, 0xa085, 0x0001, 0x012e,
--      0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071,
--      0xb500, 0xa186, 0x0015, 0x11c0, 0x7084, 0xa086, 0x0004, 0x11a0,
--      0x6010, 0xa0e8, 0x000f, 0x2c78, 0x080c, 0x7332, 0x01a8, 0x7070,
--      0x6a08, 0xa206, 0x1130, 0x7074, 0x6a0c, 0xa206, 0x1110, 0x080c,
--      0x2c9c, 0x080c, 0x879a, 0x0020, 0x080c, 0x8c13, 0x080c, 0x8617,
--      0x00fe, 0x00ee, 0x00de, 0x0005, 0x7054, 0x6a0c, 0xa206, 0x0d78,
--      0x0c80, 0x0016, 0x0026, 0x684c, 0xd0ac, 0x0178, 0x6914, 0x6a10,
--      0x2100, 0xa205, 0x0150, 0x6860, 0xa106, 0x1118, 0x685c, 0xa206,
--      0x0120, 0x6962, 0x6a5e, 0xa085, 0x0001, 0x002e, 0x001e, 0x0005,
--      0x00d6, 0x0036, 0x6310, 0x2368, 0x684a, 0x6952, 0xa29e, 0x4000,
--      0x11a0, 0x00c6, 0x6318, 0x2360, 0x2009, 0x0000, 0x6838, 0xd0f4,
--      0x1140, 0x080c, 0x524b, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108,
--      0xc18d, 0x6a66, 0x696a, 0x00ce, 0x0080, 0x6a66, 0x3918, 0xa398,
--      0x0006, 0x231c, 0x686b, 0x0004, 0x6b72, 0x00c6, 0x6318, 0x2360,
--      0x6004, 0xa084, 0x00ff, 0x686e, 0x00ce, 0x080c, 0x5409, 0x6013,
--      0x0000, 0x003e, 0x00de, 0x0005, 0x00c6, 0x0026, 0x0016, 0xa186,
--      0x0035, 0x0110, 0x6a34, 0x0008, 0x6a28, 0x080c, 0x9c44, 0x01f0,
--      0x2260, 0x611c, 0xa186, 0x0003, 0x0118, 0xa186, 0x0006, 0x1190,
--      0x6834, 0xa206, 0x0140, 0x6838, 0xa206, 0x1160, 0x6108, 0x6834,
--      0xa106, 0x1140, 0x0020, 0x6008, 0x6938, 0xa106, 0x1118, 0x6018,
--      0x6918, 0xa106, 0x001e, 0x002e, 0x00ce, 0x0005, 0xa085, 0x0001,
--      0x0cc8, 0x6944, 0xd1cc, 0x0198, 0xa18c, 0x00ff, 0xa18e, 0x0002,
--      0x1170, 0xad88, 0x001e, 0x210c, 0xa18c, 0x0f00, 0x810f, 0xa18e,
--      0x0001, 0x1128, 0x6810, 0x6914, 0xa115, 0x190c, 0x947d, 0x0005,
-+      0x2308, 0x2019, 0xbb98, 0xad90, 0x0019, 0x080c, 0x990d, 0x003e,
-+      0xd6cc, 0x0904, 0x92e6, 0x7124, 0x695a, 0x81ff, 0x0904, 0x92e6,
-+      0xa192, 0x0021, 0x1260, 0x2071, 0xbb98, 0x831c, 0x2300, 0xae18,
-+      0xad90, 0x001d, 0x080c, 0x990d, 0x080c, 0xa137, 0x04b8, 0x6838,
-+      0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c68, 0x00f6, 0x2d78,
-+      0x080c, 0x98b2, 0x00fe, 0x080c, 0xa137, 0x080c, 0x98fd, 0x0440,
-+      0x00f6, 0x2c78, 0x080c, 0x5305, 0x00fe, 0x0190, 0x684c, 0xd0ac,
-+      0x0178, 0x6020, 0xd0dc, 0x1160, 0x6850, 0xd0bc, 0x1148, 0x6810,
-+      0x6914, 0xa105, 0x0128, 0x080c, 0x9f35, 0x00de, 0x00ee, 0x00f0,
-+      0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0130,
-+      0x6810, 0x6914, 0xa115, 0x0110, 0x080c, 0x9483, 0x080c, 0x5408,
-+      0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x080c,
-+      0x9f03, 0x00de, 0x00ee, 0x1110, 0x080c, 0x861d, 0x0005, 0x00f6,
-+      0x6003, 0x0003, 0x2079, 0xbb8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
-+      0x6010, 0x2078, 0x784c, 0xd0ac, 0x0138, 0x6003, 0x0002, 0x00fe,
-+      0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0x797c, 0xa10a, 0x2300,
-+      0x7a80, 0xa213, 0x2600, 0xa102, 0x2500, 0xa203, 0x0e90, 0x7c12,
-+      0x7b16, 0x7e0a, 0x7d0e, 0x00fe, 0x603f, 0x0000, 0x2c10, 0x080c,
-+      0x1fa9, 0x080c, 0x6cf0, 0x080c, 0x7230, 0x0005, 0x2001, 0xb7b8,
-+      0x2004, 0x603e, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18,
-+      0x3e20, 0x2c10, 0x080c, 0x185e, 0x0005, 0xa182, 0x0040, 0x0002,
-+      0x934b, 0x934b, 0x934b, 0x934b, 0x934b, 0x934d, 0x93e0, 0x934b,
-+      0x934b, 0x93f6, 0x945a, 0x934b, 0x934b, 0x934b, 0x934b, 0x9469,
-+      0x934b, 0x934b, 0x934b, 0x080c, 0x1515, 0x0076, 0x00f6, 0x00e6,
-+      0x00d6, 0x2071, 0xbb8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff,
-+      0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x82ff,
-+      0x0110, 0x8211, 0x6a3e, 0x86ff, 0x0904, 0x93db, 0xa694, 0xff00,
-+      0xa284, 0x0c00, 0x0120, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284,
-+      0x0300, 0x0904, 0x93db, 0x080c, 0x15f8, 0x090c, 0x1515, 0x2d00,
-+      0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a,
-+      0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00, 0x0120,
-+      0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002,
-+      0x0180, 0xa186, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060, 0xd6dc,
-+      0x0118, 0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0x684b, 0x0007,
-+      0x0010, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856,
-+      0xa01e, 0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56, 0x83ff, 0x0170,
-+      0xa38a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019,
-+      0xbb98, 0xad90, 0x0019, 0x080c, 0x990d, 0x003e, 0xd6cc, 0x01d8,
-+      0x7124, 0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021, 0x1250, 0x2071,
-+      0xbb98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0x990d,
-+      0x0050, 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c78,
-+      0x2d78, 0x080c, 0x98b2, 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005,
-+      0x00f6, 0x6003, 0x0003, 0x2079, 0xbb8c, 0x7c04, 0x7b00, 0x7e0c,
-+      0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x00fe,
-+      0x2c10, 0x080c, 0x1fa9, 0x080c, 0x7d60, 0x0005, 0x00d6, 0x00f6,
-+      0x2c78, 0x080c, 0x5305, 0x00fe, 0x0120, 0x2001, 0xb7b8, 0x2004,
-+      0x603e, 0x6003, 0x0002, 0x080c, 0x7126, 0x080c, 0x7230, 0x6110,
-+      0x2168, 0x694c, 0xd1e4, 0x0904, 0x9458, 0xd1cc, 0x0540, 0x6948,
-+      0x6838, 0xd0fc, 0x01e8, 0x0016, 0x684c, 0x0006, 0x6850, 0x0006,
-+      0xad90, 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x0156, 0x21a8,
-+      0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0x9420, 0x015e, 0x000e,
-+      0x6852, 0x000e, 0x684e, 0x001e, 0x2168, 0x080c, 0x161f, 0x0418,
-+      0x0016, 0x080c, 0x161f, 0x00de, 0x080c, 0x98fd, 0x00e0, 0x6837,
-+      0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0180, 0xa086,
-+      0x0028, 0x1118, 0x684b, 0x001c, 0x0060, 0xd1dc, 0x0118, 0x684b,
-+      0x0015, 0x0038, 0xd1d4, 0x0118, 0x684b, 0x0007, 0x0010, 0x684b,
-+      0x0000, 0x080c, 0x5408, 0x080c, 0x9f03, 0x1110, 0x080c, 0x861d,
-+      0x00de, 0x0005, 0x2019, 0x0001, 0x080c, 0x7fe4, 0x6003, 0x0002,
-+      0x2001, 0xb7b8, 0x2004, 0x603e, 0x080c, 0x7126, 0x080c, 0x7230,
-+      0x0005, 0x080c, 0x7126, 0x080c, 0x2c9c, 0x00d6, 0x6110, 0x2168,
-+      0x080c, 0x9c5a, 0x0150, 0x6837, 0x0103, 0x684b, 0x0029, 0x6847,
-+      0x0000, 0x080c, 0x5408, 0x080c, 0x9e11, 0x00de, 0x080c, 0x861d,
-+      0x080c, 0x7230, 0x0005, 0x684b, 0x0015, 0xd1fc, 0x0138, 0x684b,
-+      0x0007, 0x8002, 0x8000, 0x810a, 0xa189, 0x0000, 0x6962, 0x685e,
-+      0x0005, 0xa182, 0x0040, 0x0002, 0x94a7, 0x94a7, 0x94a7, 0x94a7,
-+      0x94a7, 0x94a9, 0x94a7, 0x9564, 0x9570, 0x94a7, 0x94a7, 0x94a7,
-+      0x94a7, 0x94a7, 0x94a7, 0x94a7, 0x94a7, 0x94a7, 0x94a7, 0x080c,
-+      0x1515, 0x0076, 0x00f6, 0x00e6, 0x00d6, 0x2071, 0xbb8c, 0x6110,
-+      0x2178, 0x7614, 0xa6b4, 0x0fff, 0x00f6, 0x2c78, 0x080c, 0x5305,
-+      0x00fe, 0x0150, 0xa684, 0x00ff, 0x1138, 0x6020, 0xd0f4, 0x0120,
-+      0x080c, 0x9f35, 0x0804, 0x955f, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e,
-+      0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x86ff,
-+      0x0904, 0x9555, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0120, 0x7018,
-+      0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0904, 0x9553, 0xa686,
-+      0x0100, 0x1140, 0x2001, 0xbb99, 0x2004, 0xa005, 0x1118, 0xc6c4,
-+      0x7e46, 0x0c28, 0x080c, 0x15f8, 0x090c, 0x1515, 0x2d00, 0x784a,
-+      0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a,
-+      0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00, 0x0120,
-+      0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002,
-+      0x0180, 0xa186, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060, 0xd6dc,
-+      0x0118, 0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0x684b, 0x0007,
-+      0x0010, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856,
-+      0xa01e, 0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56, 0x83ff, 0x0170,
-+      0xa38a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019,
-+      0xbb98, 0xad90, 0x0019, 0x080c, 0x990d, 0x003e, 0xd6cc, 0x01d8,
-+      0x7124, 0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021, 0x1250, 0x2071,
-+      0xbb98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0x990d,
-+      0x0050, 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c78,
-+      0x2d78, 0x080c, 0x98b2, 0xd6dc, 0x1110, 0xa006, 0x0030, 0x2001,
-+      0x0001, 0x2071, 0xbb8c, 0x7218, 0x731c, 0x080c, 0x18b1, 0x00de,
-+      0x00ee, 0x00fe, 0x007e, 0x0005, 0x2001, 0xb7b8, 0x2004, 0x603e,
-+      0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x185e, 0x0005,
-+      0x2001, 0xb7b8, 0x2004, 0x603e, 0x00d6, 0x6003, 0x0002, 0x6110,
-+      0x2168, 0x694c, 0xd1e4, 0x0904, 0x967b, 0x603f, 0x0000, 0x00f6,
-+      0x2c78, 0x080c, 0x5305, 0x00fe, 0x0560, 0x6814, 0x6910, 0xa115,
-+      0x0540, 0x6a60, 0xa206, 0x1118, 0x685c, 0xa106, 0x0510, 0x684c,
-+      0xc0e4, 0x684e, 0x6847, 0x0000, 0x6863, 0x0000, 0x685f, 0x0000,
-+      0x6020, 0xd0f4, 0x1158, 0x697c, 0x6810, 0xa102, 0x603a, 0x6980,
-+      0x6814, 0xa103, 0x6036, 0x6020, 0xc0f5, 0x6022, 0x00d6, 0x6018,
-+      0x2068, 0x683c, 0x8000, 0x683e, 0x00de, 0x080c, 0x9f35, 0x0804,
-+      0x967b, 0x694c, 0xd1cc, 0x0904, 0x964b, 0x6948, 0x6838, 0xd0fc,
-+      0x0904, 0x960e, 0x0016, 0x684c, 0x0006, 0x6850, 0x0006, 0x00f6,
-+      0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01e0, 0xa086,
-+      0x0028, 0x1128, 0x684b, 0x001c, 0x784b, 0x001c, 0x00e8, 0xd1dc,
-+      0x0158, 0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xa0bf, 0x0118,
-+      0x7944, 0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128, 0x684b, 0x0007,
-+      0x784b, 0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914,
-+      0xa115, 0x0110, 0x080c, 0x9483, 0x6848, 0x784a, 0x6860, 0x7862,
-+      0x685c, 0x785e, 0xad90, 0x000d, 0xaf98, 0x000d, 0x2009, 0x0020,
-+      0x0156, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0x95fa,
-+      0x015e, 0x00fe, 0x000e, 0x6852, 0x000e, 0x684e, 0x080c, 0xa137,
-+      0x001e, 0x2168, 0x080c, 0x161f, 0x0804, 0x9676, 0x0016, 0x00f6,
-+      0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01e0, 0xa086,
-+      0x0028, 0x1128, 0x684b, 0x001c, 0x784b, 0x001c, 0x00e8, 0xd1dc,
-+      0x0158, 0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xa0bf, 0x0118,
-+      0x7944, 0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128, 0x684b, 0x0007,
-+      0x784b, 0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914,
-+      0xa115, 0x0110, 0x080c, 0x9483, 0x6860, 0x7862, 0x685c, 0x785e,
-+      0x684c, 0x784e, 0x00fe, 0x080c, 0x161f, 0x00de, 0x080c, 0xa137,
-+      0x080c, 0x98fd, 0x0458, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff,
-+      0xa0b6, 0x0002, 0x01b0, 0xa086, 0x0028, 0x1118, 0x684b, 0x001c,
-+      0x00d8, 0xd1dc, 0x0148, 0x684b, 0x0015, 0x080c, 0xa0bf, 0x0118,
-+      0x6944, 0xc1dc, 0x6946, 0x0080, 0xd1d4, 0x0118, 0x684b, 0x0007,
-+      0x0058, 0x684b, 0x0000, 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914,
-+      0xa115, 0x0110, 0x080c, 0x9483, 0x080c, 0x5408, 0x080c, 0x9f03,
-+      0x1110, 0x080c, 0x861d, 0x00de, 0x0005, 0x080c, 0x7090, 0x0010,
-+      0x080c, 0x7126, 0x080c, 0x9c5a, 0x01c0, 0x00d6, 0x6110, 0x2168,
-+      0x6837, 0x0103, 0x2009, 0xb50c, 0x210c, 0xd18c, 0x11c0, 0xd184,
-+      0x1198, 0x6108, 0x694a, 0xa18e, 0x0029, 0x1110, 0x080c, 0xb380,
-+      0x6847, 0x0000, 0x080c, 0x5408, 0x00de, 0x080c, 0x861d, 0x080c,
-+      0x7173, 0x080c, 0x7230, 0x0005, 0x684b, 0x0004, 0x0c88, 0x684b,
-+      0x0004, 0x0c70, 0xa182, 0x0040, 0x0002, 0x96c0, 0x96c0, 0x96c0,
-+      0x96c0, 0x96c0, 0x96c2, 0x96c0, 0x96c5, 0x96c0, 0x96c0, 0x96c0,
-+      0x96c0, 0x96c0, 0x96c0, 0x96c0, 0x96c0, 0x96c0, 0x96c0, 0x96c0,
-+      0x080c, 0x1515, 0x080c, 0x861d, 0x0005, 0x0006, 0x0026, 0xa016,
-+      0x080c, 0x185e, 0x002e, 0x000e, 0x0005, 0xa182, 0x0085, 0x0002,
-+      0x96d9, 0x96d7, 0x96d7, 0x96e5, 0x96d7, 0x96d7, 0x96d7, 0x080c,
-+      0x1515, 0x6003, 0x0001, 0x6106, 0x080c, 0x6c8d, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x7173, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6,
-+      0x00e6, 0x2071, 0xbb80, 0x7224, 0x6212, 0x7220, 0x080c, 0x9c4a,
-+      0x01a0, 0x2268, 0x6800, 0xa086, 0x0000, 0x0178, 0x6018, 0x6d18,
-+      0xa52e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0x991d, 0x00ce, 0x0128,
-+      0x6803, 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003,
-+      0x0001, 0x080c, 0x6c8d, 0x080c, 0x7173, 0x00f6, 0x2278, 0x080c,
-+      0x5305, 0x00fe, 0x0150, 0x6820, 0xd0ec, 0x0138, 0x00c6, 0x2260,
-+      0x603f, 0x0000, 0x080c, 0x9f35, 0x00ce, 0x00ee, 0x00de, 0x005e,
-+      0x002e, 0x0005, 0xa186, 0x0013, 0x1160, 0x6004, 0xa08a, 0x0085,
-+      0x0a0c, 0x1515, 0xa08a, 0x008c, 0x1a0c, 0x1515, 0xa082, 0x0085,
-+      0x0072, 0xa186, 0x0027, 0x0120, 0xa186, 0x0014, 0x190c, 0x1515,
-+      0x080c, 0x7090, 0x080c, 0x9e1d, 0x080c, 0x7173, 0x0005, 0x9746,
-+      0x9748, 0x9748, 0x9746, 0x9746, 0x9746, 0x9746, 0x080c, 0x1515,
-+      0x080c, 0x7090, 0x080c, 0x9e1d, 0x080c, 0x7173, 0x0005, 0xa186,
-+      0x0013, 0x1128, 0x6004, 0xa082, 0x0085, 0x2008, 0x04a8, 0xa186,
-+      0x0027, 0x11e8, 0x080c, 0x7090, 0x080c, 0x2c9c, 0x00d6, 0x6010,
-+      0x2068, 0x080c, 0x9c5a, 0x0150, 0x6837, 0x0103, 0x6847, 0x0000,
-+      0x684b, 0x0029, 0x080c, 0x5408, 0x080c, 0x9e11, 0x00de, 0x080c,
-+      0x861d, 0x080c, 0x7173, 0x0005, 0x080c, 0x8663, 0x0ce0, 0xa186,
-+      0x0014, 0x1dd0, 0x080c, 0x7090, 0x00d6, 0x6010, 0x2068, 0x080c,
-+      0x9c5a, 0x0d60, 0x6837, 0x0103, 0x6847, 0x0000, 0x684b, 0x0006,
-+      0x6850, 0xc0ec, 0x6852, 0x08f0, 0x0002, 0x9796, 0x9794, 0x9794,
-+      0x9794, 0x9794, 0x9794, 0x97ae, 0x080c, 0x1515, 0x080c, 0x7090,
-+      0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186,
-+      0x0035, 0x1118, 0x2001, 0xb7b6, 0x0010, 0x2001, 0xb7b7, 0x2004,
-+      0x6016, 0x6003, 0x000c, 0x080c, 0x7173, 0x0005, 0x080c, 0x7090,
-+      0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186,
-+      0x0035, 0x1118, 0x2001, 0xb7b6, 0x0010, 0x2001, 0xb7b7, 0x2004,
-+      0x6016, 0x6003, 0x000e, 0x080c, 0x7173, 0x0005, 0xa182, 0x008c,
-+      0x1220, 0xa182, 0x0085, 0x0208, 0x001a, 0x080c, 0x8663, 0x0005,
-+      0x97d7, 0x97d7, 0x97d7, 0x97d7, 0x97d9, 0x9832, 0x97d7, 0x080c,
-+      0x1515, 0x00d6, 0x00f6, 0x2c78, 0x080c, 0x5305, 0x00fe, 0x0168,
-+      0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186,
-+      0x0035, 0x1118, 0x00de, 0x0804, 0x9845, 0x080c, 0x9c5a, 0x1118,
-+      0x080c, 0x9e11, 0x00f0, 0x6010, 0x2068, 0x684c, 0xd0e4, 0x1110,
-+      0x080c, 0x9e11, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128, 0x684b,
-+      0x0006, 0xc0ec, 0x6852, 0x0048, 0xd0bc, 0x0118, 0x684b, 0x0002,
-+      0x0020, 0x684b, 0x0005, 0x080c, 0x9ed2, 0x6847, 0x0000, 0x080c,
-+      0x5408, 0x2c68, 0x080c, 0x85c7, 0x01c0, 0x6003, 0x0001, 0x6007,
-+      0x001e, 0x600b, 0xffff, 0x2009, 0xbb8e, 0x210c, 0x6136, 0x2009,
-+      0xbb8f, 0x210c, 0x613a, 0x6918, 0x611a, 0x080c, 0xa027, 0x6950,
-+      0x6152, 0x601f, 0x0001, 0x080c, 0x6c8d, 0x2d60, 0x080c, 0x861d,
-+      0x00de, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x5305, 0x00fe, 0x0598,
-+      0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0035, 0x0130, 0xa186,
-+      0x001e, 0x0118, 0xa186, 0x0039, 0x1530, 0x00d6, 0x2c68, 0x080c,
-+      0xa10a, 0x1904, 0x988a, 0x080c, 0x85c7, 0x01d8, 0x6106, 0x6003,
-+      0x0001, 0x601f, 0x0001, 0x6918, 0x611a, 0x6928, 0x612a, 0x692c,
-+      0x612e, 0x6930, 0xa18c, 0x00ff, 0x6132, 0x6934, 0x6136, 0x6938,
-+      0x613a, 0x6950, 0x6152, 0x080c, 0xa027, 0x080c, 0x6c8d, 0x080c,
-+      0x7173, 0x2d60, 0x00f8, 0x00d6, 0x6010, 0x2068, 0x080c, 0x9c5a,
-+      0x01c8, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128, 0xc0ec, 0x6852,
-+      0x684b, 0x0006, 0x0048, 0xd0bc, 0x0118, 0x684b, 0x0002, 0x0020,
-+      0x684b, 0x0005, 0x080c, 0x9ed2, 0x6847, 0x0000, 0x080c, 0x5408,
-+      0x080c, 0x9e11, 0x00de, 0x080c, 0x861d, 0x0005, 0x0016, 0x00d6,
-+      0x6010, 0x2068, 0x080c, 0x9c5a, 0x0140, 0x6837, 0x0103, 0x684b,
-+      0x0028, 0x6847, 0x0000, 0x080c, 0x5408, 0x00de, 0x001e, 0xa186,
-+      0x0013, 0x0148, 0xa186, 0x0014, 0x0130, 0xa186, 0x0027, 0x0118,
-+      0x080c, 0x8663, 0x0030, 0x080c, 0x7090, 0x080c, 0x9e1d, 0x080c,
-+      0x7173, 0x0005, 0x0056, 0x0066, 0x00d6, 0x00f6, 0x2029, 0x0001,
-+      0xa182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x2069,
-+      0xbb98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, 0xaf90, 0x001d,
-+      0x080c, 0x990d, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0110, 0x080c,
-+      0x161f, 0x080c, 0x15f8, 0x0500, 0x8528, 0x6837, 0x0110, 0x683b,
-+      0x0000, 0x2d20, 0x7c06, 0xa68a, 0x003d, 0x1228, 0x2608, 0xad90,
-+      0x000f, 0x0459, 0x0088, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78,
-+      0xad90, 0x000f, 0x0411, 0x0c28, 0x00fe, 0x852f, 0xa5ad, 0x0003,
-+      0x7d36, 0xa5ac, 0x0000, 0x0028, 0x00fe, 0x852f, 0xa5ad, 0x0003,
-+      0x7d36, 0x00de, 0x006e, 0x005e, 0x0005, 0x00f6, 0x8dff, 0x0158,
-+      0x6804, 0xa07d, 0x0130, 0x6807, 0x0000, 0x080c, 0x5408, 0x2f68,
-+      0x0cb8, 0x080c, 0x5408, 0x00fe, 0x0005, 0x0156, 0xa184, 0x0001,
-+      0x0108, 0x8108, 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318,
-+      0x8210, 0x1f04, 0x9914, 0x015e, 0x0005, 0x0066, 0x0126, 0x2091,
-+      0x8000, 0x2031, 0x0001, 0x601c, 0xa084, 0x000f, 0x0083, 0x012e,
-+      0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031, 0x0000,
-+      0x601c, 0xa084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005, 0x9954,
-+      0x9954, 0x994f, 0x9976, 0x9942, 0x994f, 0x9976, 0x994f, 0x994f,
-+      0x9942, 0x994f, 0x080c, 0x1515, 0x0036, 0x2019, 0x0010, 0x080c,
-+      0xace0, 0x601f, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0xa006,
-+      0x0005, 0xa085, 0x0001, 0x0005, 0x00d6, 0x86ff, 0x11d8, 0x6010,
-+      0x2068, 0x080c, 0x9c5a, 0x01c0, 0x6834, 0xa086, 0x0139, 0x1128,
-+      0x684b, 0x0005, 0x6853, 0x0000, 0x0028, 0xa00e, 0x2001, 0x0005,
-+      0x080c, 0x54db, 0x080c, 0x9ed2, 0x080c, 0x5408, 0x080c, 0x861d,
-+      0xa085, 0x0001, 0x00de, 0x0005, 0xa006, 0x0ce0, 0x6000, 0xa08a,
-+      0x0010, 0x1a0c, 0x1515, 0x000b, 0x0005, 0x998d, 0x99ae, 0x998f,
-+      0x99cd, 0x99ab, 0x998d, 0x994f, 0x9954, 0x9954, 0x994f, 0x994f,
-+      0x994f, 0x994f, 0x994f, 0x994f, 0x994f, 0x080c, 0x1515, 0x86ff,
-+      0x11b8, 0x601c, 0xa086, 0x0006, 0x0198, 0x00d6, 0x6010, 0x2068,
-+      0x080c, 0x9c5a, 0x0110, 0x080c, 0x9ed2, 0x00de, 0x6007, 0x0085,
-+      0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x6c8d, 0x080c, 0x7173,
-+      0xa085, 0x0001, 0x0005, 0x080c, 0x194d, 0x0c08, 0x00e6, 0x2071,
-+      0xb7e0, 0x7024, 0xac06, 0x1110, 0x080c, 0x7f59, 0x601c, 0xa084,
-+      0x000f, 0xa086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049, 0x0001,
-+      0x2c40, 0x080c, 0x8130, 0x009e, 0x008e, 0x0010, 0x080c, 0x7e58,
-+      0x00ee, 0x1928, 0x080c, 0x994f, 0x0005, 0x0036, 0x00e6, 0x2071,
-+      0xb7e0, 0x703c, 0xac06, 0x1140, 0x2019, 0x0000, 0x080c, 0x7fe4,
-+      0x00ee, 0x003e, 0x0804, 0x998f, 0x080c, 0x825d, 0x00ee, 0x003e,
-+      0x1904, 0x998f, 0x080c, 0x994f, 0x0005, 0x00c6, 0x601c, 0xa084,
-+      0x000f, 0x0013, 0x00ce, 0x0005, 0x99fe, 0x9a6b, 0x9bb9, 0x9a09,
-+      0x9e1d, 0x99fe, 0xacd2, 0xa14e, 0x9a6b, 0x99f7, 0x9c24, 0x080c,
-+      0x1515, 0x080c, 0x9e58, 0x1110, 0x080c, 0x8c19, 0x0005, 0x080c,
-+      0x7090, 0x080c, 0x7173, 0x080c, 0x861d, 0x0005, 0x6017, 0x0001,
-+      0x0005, 0x080c, 0x9c5a, 0x0120, 0x6010, 0xa080, 0x0019, 0x2c02,
-+      0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1515, 0x000b, 0x0005, 0x9a27,
-+      0x9a29, 0x9a49, 0x9a5b, 0x9a68, 0x9a27, 0x99fe, 0x99fe, 0x99fe,
-+      0x9a5b, 0x9a5b, 0x9a27, 0x9a27, 0x9a27, 0x9a27, 0x9a65, 0x080c,
-+      0x1515, 0x00e6, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052, 0x2071,
-+      0xb7e0, 0x7024, 0xac06, 0x0190, 0x080c, 0x7e58, 0x6007, 0x0085,
-+      0x6003, 0x000b, 0x601f, 0x0002, 0x2001, 0xb7b7, 0x2004, 0x6016,
-+      0x080c, 0x6c8d, 0x080c, 0x7173, 0x00ee, 0x0005, 0x6017, 0x0001,
-+      0x0cd8, 0x00d6, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x00de,
-+      0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x6c8d,
-+      0x080c, 0x7173, 0x0005, 0x00d6, 0x6017, 0x0001, 0x6010, 0x2068,
-+      0x6850, 0xc0b5, 0x6852, 0x00de, 0x0005, 0x080c, 0x861d, 0x0005,
-+      0x080c, 0x194d, 0x08f0, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1515,
-+      0x000b, 0x0005, 0x9a82, 0x9a06, 0x9a84, 0x9a82, 0x9a84, 0x9a84,
-+      0x99ff, 0x9a82, 0x99f9, 0x99f9, 0x9a82, 0x9a82, 0x9a82, 0x9a82,
-+      0x9a82, 0x9a82, 0x080c, 0x1515, 0x00d6, 0x6018, 0x2068, 0x6804,
-+      0xa084, 0x00ff, 0x00de, 0xa08a, 0x000c, 0x1a0c, 0x1515, 0x000b,
-+      0x0005, 0x9a9d, 0x9b5f, 0x9a9f, 0x9add, 0x9a9f, 0x9add, 0x9a9f,
-+      0x9aad, 0x9a9d, 0x9add, 0x9a9d, 0x9ac9, 0x080c, 0x1515, 0x6004,
-+      0xa08e, 0x0016, 0x05a8, 0xa08e, 0x0004, 0x0590, 0xa08e, 0x0002,
-+      0x0578, 0xa08e, 0x004b, 0x0904, 0x9b5b, 0x6004, 0x080c, 0x9e58,
-+      0x0904, 0x9b78, 0xa08e, 0x0021, 0x0904, 0x9b7c, 0xa08e, 0x0022,
-+      0x0904, 0x9b78, 0xa08e, 0x003d, 0x0904, 0x9b7c, 0xa08e, 0x0039,
-+      0x0904, 0x9b80, 0xa08e, 0x0035, 0x0904, 0x9b80, 0xa08e, 0x001e,
-+      0x0188, 0xa08e, 0x0001, 0x1150, 0x00d6, 0x6018, 0x2068, 0x6804,
-+      0xa084, 0x00ff, 0x00de, 0xa086, 0x0006, 0x0110, 0x080c, 0x2c9c,
-+      0x080c, 0x8c19, 0x080c, 0x9e1d, 0x0005, 0x00c6, 0x00d6, 0x6104,
-+      0xa186, 0x0016, 0x0904, 0x9b4c, 0xa186, 0x0002, 0x15d8, 0x2001,
-+      0xb535, 0x2004, 0xd08c, 0x1198, 0x080c, 0x5acf, 0x1180, 0x2001,
-+      0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003, 0x0001, 0xa085,
-+      0x0001, 0x080c, 0x5b13, 0x080c, 0x5a07, 0x0804, 0x9ba2, 0x6018,
-+      0x2068, 0x2001, 0xb535, 0x2004, 0xd0ac, 0x1904, 0x9ba2, 0x68a0,
-+      0xd0bc, 0x1904, 0x9ba2, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0190,
-+      0x8001, 0x6842, 0x6013, 0x0000, 0x601f, 0x0007, 0x6017, 0x0398,
-+      0x603f, 0x0000, 0x080c, 0x85c7, 0x0128, 0x2d00, 0x601a, 0x601f,
-+      0x0001, 0x0450, 0x00de, 0x00ce, 0x6004, 0xa08e, 0x0002, 0x11a8,
-+      0x6018, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x1170, 0x2009,
-+      0xb535, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0xb500, 0x080c,
-+      0x4bc6, 0x00ee, 0x080c, 0x8c19, 0x0020, 0x080c, 0x8c19, 0x080c,
-+      0x2c9c, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2cc2, 0x012e,
-+      0x00ee, 0x080c, 0x9e1d, 0x0005, 0x2001, 0x0002, 0x080c, 0x4efd,
-+      0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x6cd3, 0x080c, 0x7173,
-+      0x00de, 0x00ce, 0x0c80, 0x080c, 0x2cc2, 0x0804, 0x9ad8, 0x00c6,
-+      0x00d6, 0x6104, 0xa186, 0x0016, 0x0d38, 0x6018, 0x2068, 0x6840,
-+      0xa084, 0x00ff, 0xa005, 0x0904, 0x9b22, 0x8001, 0x6842, 0x6003,
-+      0x0001, 0x080c, 0x6cd3, 0x080c, 0x7173, 0x00de, 0x00ce, 0x0898,
-+      0x080c, 0x8c19, 0x0804, 0x9ada, 0x080c, 0x8c47, 0x0804, 0x9ada,
-+      0x00d6, 0x2c68, 0x6104, 0x080c, 0xa10a, 0x00de, 0x0118, 0x080c,
-+      0x861d, 0x00b8, 0x6004, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105,
-+      0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x6038,
-+      0x600a, 0x2001, 0xb7b7, 0x2004, 0x6016, 0x080c, 0x6c8d, 0x080c,
-+      0x7173, 0x0005, 0x00de, 0x00ce, 0x080c, 0x8c19, 0x080c, 0x2c9c,
-+      0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2cc2, 0x6013, 0x0000,
-+      0x601f, 0x0007, 0x6017, 0x0398, 0x603f, 0x0000, 0x012e, 0x00ee,
-+      0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1515, 0x000b, 0x0005,
-+      0x9bd0, 0x9bd0, 0x9bd0, 0x9bd0, 0x9bd0, 0x9bd0, 0x9bd0, 0x9bd0,
-+      0x9bd0, 0x99fe, 0x9bd0, 0x9a06, 0x9bd2, 0x9a06, 0x9bdf, 0x9bd0,
-+      0x080c, 0x1515, 0x6004, 0xa086, 0x008b, 0x0148, 0x6007, 0x008b,
-+      0x6003, 0x000d, 0x080c, 0x6c8d, 0x080c, 0x7173, 0x0005, 0x080c,
-+      0x9e11, 0x080c, 0x9c5a, 0x0580, 0x080c, 0x2c9c, 0x00d6, 0x080c,
-+      0x9c5a, 0x0168, 0x6010, 0x2068, 0x6837, 0x0103, 0x684b, 0x0006,
-+      0x6847, 0x0000, 0x6850, 0xc0ed, 0x6852, 0x080c, 0x5408, 0x2c68,
-+      0x080c, 0x85c7, 0x0150, 0x6818, 0x601a, 0x080c, 0xa027, 0x00c6,
-+      0x2d60, 0x080c, 0x9e1d, 0x00ce, 0x0008, 0x2d60, 0x00de, 0x6013,
-+      0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c,
-+      0x6cd3, 0x080c, 0x7173, 0x0078, 0x6030, 0xa08c, 0xff00, 0x810f,
-+      0xa186, 0x0039, 0x0118, 0xa186, 0x0035, 0x1118, 0x080c, 0x2c9c,
-+      0x08b0, 0x080c, 0x9e1d, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c,
-+      0x1515, 0x000b, 0x0005, 0x9c3b, 0x9c3b, 0x9c3b, 0x9c3d, 0x9c3d,
-+      0x9c3b, 0x9c3b, 0x9c3b, 0x9c3b, 0x9c3b, 0x9c3b, 0x9c3b, 0x9c3b,
-+      0x9c3b, 0x9c3b, 0x9c3b, 0x080c, 0x1515, 0x080c, 0x825d, 0x190c,
-+      0x1515, 0x6110, 0x2168, 0x684b, 0x0006, 0x080c, 0x5408, 0x080c,
-+      0x861d, 0x0005, 0xa284, 0x0007, 0x1158, 0xa282, 0xbd00, 0x0240,
-+      0x2001, 0xb517, 0x2004, 0xa202, 0x1218, 0xa085, 0x0001, 0x0005,
-+      0xa006, 0x0ce8, 0x0026, 0x6210, 0xa294, 0xf000, 0x002e, 0x0005,
-+      0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061,
-+      0xbd00, 0x2071, 0xb500, 0x7348, 0x7068, 0xa302, 0x12a8, 0x601c,
-+      0xa206, 0x1160, 0x080c, 0x9fb2, 0x0148, 0x080c, 0x9e58, 0x1110,
-+      0x080c, 0x8c19, 0x00c6, 0x080c, 0x861d, 0x00ce, 0xace0, 0x0018,
-+      0x705c, 0xac02, 0x1208, 0x0c38, 0x012e, 0x000e, 0x003e, 0x00ce,
-+      0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0xa188, 0xb635, 0x210c,
-+      0x81ff, 0x0128, 0x2061, 0xb8f4, 0x611a, 0x080c, 0x2c9c, 0xa006,
-+      0x0010, 0xa085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6,
-+      0x0056, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x85c7, 0x005e,
-+      0x0180, 0x6612, 0x651a, 0x080c, 0xa027, 0x601f, 0x0003, 0x2009,
-+      0x004b, 0x080c, 0x864c, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce,
-+      0x0005, 0xa006, 0x0cd0, 0x00c6, 0x0056, 0x0126, 0x2091, 0x8000,
-+      0x62a0, 0x00c6, 0x080c, 0x9ed6, 0x005e, 0x0550, 0x6013, 0x0000,
-+      0x651a, 0x080c, 0xa027, 0x601f, 0x0003, 0x0016, 0x00c6, 0x2560,
-+      0x080c, 0x51aa, 0x00ce, 0x080c, 0x6df5, 0x0076, 0x2039, 0x0000,
-+      0x080c, 0x6d02, 0x2c08, 0x080c, 0xae82, 0x007e, 0x001e, 0xd184,
-+      0x0128, 0x080c, 0x861d, 0xa085, 0x0001, 0x0030, 0x2009, 0x004c,
-+      0x080c, 0x864c, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce, 0x0005,
-+      0xa006, 0x0cd0, 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c, 0x85c7,
-+      0x2c78, 0x00ce, 0x0180, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003,
-+      0x2021, 0x0005, 0x080c, 0x9d50, 0x2f60, 0x2009, 0x004d, 0x080c,
-+      0x864c, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6,
-+      0x00c6, 0x0046, 0x00c6, 0x080c, 0x85c7, 0x2c78, 0x00ce, 0x0178,
-+      0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021, 0x0005, 0x0481,
-+      0x2f60, 0x2009, 0x004e, 0x080c, 0x864c, 0xa085, 0x0001, 0x004e,
-+      0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c,
-+      0x85c7, 0x2c78, 0x00ce, 0x01c0, 0x7e12, 0x2c00, 0x781a, 0x781f,
-+      0x0003, 0x2021, 0x0004, 0x00a1, 0x2001, 0xb7a0, 0x2004, 0xd0fc,
-+      0x0120, 0x2f60, 0x080c, 0x861d, 0x0028, 0x2f60, 0x2009, 0x0052,
-+      0x080c, 0x864c, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005,
-+      0x0096, 0x0076, 0x0126, 0x2091, 0x8000, 0x080c, 0x514c, 0x0118,
-+      0x2001, 0x9d55, 0x0028, 0x080c, 0x511c, 0x0158, 0x2001, 0x9d5b,
-+      0x0006, 0xa00e, 0x2400, 0x080c, 0x54db, 0x080c, 0x5408, 0x000e,
-+      0x0807, 0x2418, 0x080c, 0x702f, 0x62a0, 0x0086, 0x2041, 0x0001,
-+      0x2039, 0x0001, 0x2608, 0x080c, 0x6e0e, 0x008e, 0x080c, 0x6d02,
-+      0x2f08, 0x2648, 0x080c, 0xae82, 0x613c, 0x81ff, 0x090c, 0x6ec3,
-+      0x080c, 0x7173, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126,
-+      0x2091, 0x8000, 0x00c6, 0x080c, 0x85c7, 0x001e, 0x0188, 0x660a,
-+      0x611a, 0x080c, 0xa027, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009,
-+      0x001f, 0x080c, 0x864c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+      0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c,
-+      0x85c7, 0x001e, 0x0188, 0x660a, 0x611a, 0x080c, 0xa027, 0x601f,
-+      0x0008, 0x2d00, 0x6012, 0x2009, 0x0021, 0x080c, 0x864c, 0xa085,
-+      0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126,
-+      0x2091, 0x8000, 0x00c6, 0x080c, 0x85c7, 0x001e, 0x0188, 0x660a,
-+      0x611a, 0x080c, 0xa027, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009,
-+      0x003d, 0x080c, 0x864c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+      0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c,
-+      0x9ed6, 0x001e, 0x0180, 0x611a, 0x080c, 0xa027, 0x601f, 0x0001,
-+      0x2d00, 0x6012, 0x2009, 0x0000, 0x080c, 0x864c, 0xa085, 0x0001,
-+      0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
-+      0x8000, 0x00c6, 0x080c, 0x85c7, 0x001e, 0x0188, 0x660a, 0x611a,
-+      0x080c, 0xa027, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0044,
-+      0x080c, 0x864c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
-+      0x0cd8, 0x0026, 0x00d6, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110,
-+      0x8211, 0x6a3e, 0x00de, 0x002e, 0x0005, 0x0006, 0x6000, 0xa086,
-+      0x0000, 0x0190, 0x6013, 0x0000, 0x601f, 0x0007, 0x2001, 0xb7b6,
-+      0x2004, 0x0006, 0xa082, 0x0051, 0x000e, 0x0208, 0x8004, 0x6016,
-+      0x080c, 0xb33a, 0x603f, 0x0000, 0x000e, 0x0005, 0x0066, 0x00c6,
-+      0x00d6, 0x2031, 0xb553, 0x2634, 0xd6e4, 0x0128, 0x6618, 0x2660,
-+      0x6e48, 0x080c, 0x50d5, 0x00de, 0x00ce, 0x006e, 0x0005, 0x0006,
-+      0x0016, 0x6004, 0xa08e, 0x0002, 0x0140, 0xa08e, 0x0003, 0x0128,
-+      0xa08e, 0x0004, 0x0110, 0xa085, 0x0001, 0x001e, 0x000e, 0x0005,
-+      0x0006, 0x00d6, 0x6010, 0xa06d, 0x0148, 0x6834, 0xa086, 0x0139,
-+      0x0138, 0x6838, 0xd0fc, 0x0110, 0xa006, 0x0010, 0xa085, 0x0001,
-+      0x00de, 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6,
-+      0x080c, 0x85c7, 0x001e, 0x0190, 0x611a, 0x080c, 0xa027, 0x601f,
-+      0x0001, 0x2d00, 0x6012, 0x080c, 0x2c9c, 0x2009, 0x0028, 0x080c,
-+      0x864c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8,
-+      0xa186, 0x0015, 0x1178, 0x2011, 0xb521, 0x2204, 0xa086, 0x0074,
-+      0x1148, 0x080c, 0x8f98, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c,
-+      0x6cd3, 0x0020, 0x080c, 0x8c19, 0x080c, 0x861d, 0x0005, 0xa186,
-+      0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x4efd, 0x00e8, 0xa186,
-+      0x0015, 0x11e8, 0x2011, 0xb521, 0x2204, 0xa086, 0x0014, 0x11b8,
-+      0x00d6, 0x6018, 0x2068, 0x080c, 0x504b, 0x00de, 0x080c, 0x9051,
-+      0x1170, 0x00d6, 0x6018, 0x2068, 0x6890, 0x00de, 0xa005, 0x0138,
-+      0x2001, 0x0006, 0x080c, 0x4efd, 0x080c, 0x87a0, 0x0020, 0x080c,
-+      0x8c19, 0x080c, 0x861d, 0x0005, 0x6848, 0xa086, 0x0005, 0x1108,
-+      0x0009, 0x0005, 0x6850, 0xc0ad, 0x6852, 0x0005, 0x00e6, 0x0126,
-+      0x2071, 0xb500, 0x2091, 0x8000, 0x7548, 0xa582, 0x0001, 0x0608,
-+      0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0148, 0xace0, 0x0018,
-+      0x705c, 0xac02, 0x1208, 0x0cb0, 0x2061, 0xbd00, 0x0c98, 0x6003,
-+      0x0008, 0x8529, 0x754a, 0xaca8, 0x0018, 0x705c, 0xa502, 0x1230,
-+      0x754e, 0xa085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x704f, 0xbd00,
-+      0x0cc0, 0xa006, 0x0cc0, 0x00e6, 0x2071, 0xbb8c, 0x7014, 0xd0e4,
-+      0x0150, 0x6013, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c,
-+      0x6c8d, 0x080c, 0x7173, 0x00ee, 0x0005, 0x00c6, 0x00f6, 0x2c78,
-+      0x080c, 0x5305, 0x00fe, 0x0120, 0x601c, 0xa084, 0x000f, 0x0013,
-+      0x00ce, 0x0005, 0x99fe, 0x9f2d, 0x9f30, 0x9f33, 0xb127, 0xb142,
-+      0xb145, 0x99fe, 0x99fe, 0x080c, 0x1515, 0xe000, 0xe000, 0x0005,
-+      0xe000, 0xe000, 0x0005, 0x0009, 0x0005, 0x00f6, 0x2c78, 0x080c,
-+      0x5305, 0x0538, 0x080c, 0x85c7, 0x1128, 0x2001, 0xb7b8, 0x2004,
-+      0x783e, 0x00f8, 0x7818, 0x601a, 0x080c, 0xa027, 0x781c, 0xa086,
-+      0x0003, 0x0128, 0x7808, 0x6036, 0x2f00, 0x603a, 0x0020, 0x7808,
-+      0x603a, 0x2f00, 0x6036, 0x602a, 0x601f, 0x0001, 0x6007, 0x0035,
-+      0x6003, 0x0001, 0x7950, 0x6152, 0x080c, 0x6c8d, 0x080c, 0x7173,
-+      0x2f60, 0x00fe, 0x0005, 0x0016, 0x00f6, 0x682c, 0x6032, 0xa08e,
-+      0x0001, 0x0138, 0xa086, 0x0005, 0x0140, 0xa006, 0x602a, 0x602e,
-+      0x00a0, 0x6820, 0xc0f4, 0xc0d5, 0x6822, 0x6810, 0x2078, 0x787c,
-+      0x6938, 0xa102, 0x7880, 0x6934, 0xa103, 0x1e78, 0x6834, 0x602a,
-+      0x6838, 0xa084, 0xfffc, 0x683a, 0x602e, 0x2d00, 0x6036, 0x6808,
-+      0x603a, 0x6918, 0x611a, 0x6950, 0x6152, 0x601f, 0x0001, 0x6007,
-+      0x0039, 0x6003, 0x0001, 0x080c, 0x6c8d, 0x6803, 0x0002, 0x00fe,
-+      0x001e, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x5305, 0x1118, 0xa085,
-+      0x0001, 0x0070, 0x6020, 0xd0f4, 0x1150, 0xc0f5, 0x6022, 0x6010,
-+      0x2078, 0x7828, 0x603a, 0x782c, 0x6036, 0x080c, 0x194d, 0xa006,
-+      0x00fe, 0x0005, 0x0006, 0x0016, 0x6004, 0xa08e, 0x0034, 0x01b8,
-+      0xa08e, 0x0035, 0x01a0, 0xa08e, 0x0036, 0x0188, 0xa08e, 0x0037,
-+      0x0170, 0xa08e, 0x0038, 0x0158, 0xa08e, 0x0039, 0x0140, 0xa08e,
-+      0x003a, 0x0128, 0xa08e, 0x003b, 0x0110, 0xa085, 0x0001, 0x001e,
-+      0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001,
-+      0xb7b2, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x6b40,
-+      0x2001, 0xb7b6, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,
-+      0xb7b4, 0x200c, 0x8000, 0x2014, 0x2071, 0xb78e, 0x711a, 0x721e,
-+      0x2001, 0x0064, 0x080c, 0x6b40, 0x2001, 0xb7b7, 0x82ff, 0x1110,
-+      0x2011, 0x0014, 0x2202, 0x2009, 0xb7b8, 0xa280, 0x000a, 0x200a,
-+      0x080c, 0x532a, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
-+      0x0006, 0x00e6, 0x2001, 0xb7b6, 0x2003, 0x0028, 0x2001, 0xb7b7,
-+      0x2003, 0x0014, 0x2071, 0xb78e, 0x701b, 0x0000, 0x701f, 0x07d0,
-+      0x2001, 0xb7b8, 0x2003, 0x001e, 0x00ee, 0x000e, 0x0005, 0x00d6,
-+      0x6054, 0xa06d, 0x0110, 0x080c, 0x160f, 0x00de, 0x0005, 0x0005,
-+      0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x85c7, 0x001e,
-+      0x0178, 0x611a, 0x0ca1, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009,
-+      0x0033, 0x080c, 0x864c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+      0xa006, 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0xb500, 0xa186,
-+      0x0015, 0x1500, 0x7084, 0xa086, 0x0018, 0x11e0, 0x6010, 0x2068,
-+      0x6a3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x7331, 0x01d8, 0x7070,
-+      0x6a50, 0xa206, 0x1160, 0x7074, 0x6a54, 0xa206, 0x1140, 0x6218,
-+      0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x2ce1, 0x080c,
-+      0x87a0, 0x0020, 0x080c, 0x8c19, 0x080c, 0x861d, 0x00fe, 0x00ee,
-+      0x00de, 0x0005, 0x7054, 0x6a54, 0xa206, 0x0d48, 0x0c80, 0x00c6,
-+      0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x85c7, 0x001e, 0x0180,
-+      0x611a, 0x080c, 0xa027, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009,
-+      0x0043, 0x080c, 0x864c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+      0xa006, 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0xb500, 0xa186,
-+      0x0015, 0x11c0, 0x7084, 0xa086, 0x0004, 0x11a0, 0x6010, 0xa0e8,
-+      0x000f, 0x2c78, 0x080c, 0x7331, 0x01a8, 0x7070, 0x6a08, 0xa206,
-+      0x1130, 0x7074, 0x6a0c, 0xa206, 0x1110, 0x080c, 0x2c9c, 0x080c,
-+      0x87a0, 0x0020, 0x080c, 0x8c19, 0x080c, 0x861d, 0x00fe, 0x00ee,
-+      0x00de, 0x0005, 0x7054, 0x6a0c, 0xa206, 0x0d78, 0x0c80, 0x0016,
-+      0x0026, 0x684c, 0xd0ac, 0x0178, 0x6914, 0x6a10, 0x2100, 0xa205,
-+      0x0150, 0x6860, 0xa106, 0x1118, 0x685c, 0xa206, 0x0120, 0x6962,
-+      0x6a5e, 0xa085, 0x0001, 0x002e, 0x001e, 0x0005, 0x00d6, 0x0036,
-+      0x6310, 0x2368, 0x684a, 0x6952, 0xa29e, 0x4000, 0x11a0, 0x00c6,
-+      0x6318, 0x2360, 0x2009, 0x0000, 0x6838, 0xd0f4, 0x1140, 0x080c,
-+      0x524a, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x6a66,
-+      0x696a, 0x00ce, 0x0080, 0x6a66, 0x3918, 0xa398, 0x0006, 0x231c,
-+      0x686b, 0x0004, 0x6b72, 0x00c6, 0x6318, 0x2360, 0x6004, 0xa084,
-+      0x00ff, 0x686e, 0x00ce, 0x080c, 0x5408, 0x6013, 0x0000, 0x003e,
-+      0x00de, 0x0005, 0x00c6, 0x0026, 0x0016, 0xa186, 0x0035, 0x0110,
-+      0x6a34, 0x0008, 0x6a28, 0x080c, 0x9c4a, 0x01f0, 0x2260, 0x611c,
-+      0xa186, 0x0003, 0x0118, 0xa186, 0x0006, 0x1190, 0x6834, 0xa206,
-+      0x0140, 0x6838, 0xa206, 0x1160, 0x6108, 0x6834, 0xa106, 0x1140,
-+      0x0020, 0x6008, 0x6938, 0xa106, 0x1118, 0x6018, 0x6918, 0xa106,
-+      0x001e, 0x002e, 0x00ce, 0x0005, 0xa085, 0x0001, 0x0cc8, 0x6944,
-+      0xd1cc, 0x0198, 0xa18c, 0x00ff, 0xa18e, 0x0002, 0x1170, 0xad88,
-+      0x001e, 0x210c, 0xa18c, 0x0f00, 0x810f, 0xa18e, 0x0001, 0x1128,
-+      0x6810, 0x6914, 0xa115, 0x190c, 0x9483, 0x0005, 0x080c, 0x861d,
-+      0x0804, 0x7173, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1515,
-+      0x0013, 0x006e, 0x0005, 0xa16b, 0xa646, 0xa76c, 0xa16b, 0xa16b,
-+      0xa16b, 0xa16b, 0xa16b, 0xa1a3, 0xa7f0, 0xa16b, 0xa16b, 0xa16b,
-+      0xa16b, 0xa16b, 0xa16b, 0x080c, 0x1515, 0x0066, 0x6000, 0xa0b2,
-+      0x0010, 0x1a0c, 0x1515, 0x0013, 0x006e, 0x0005, 0xa186, 0xac77,
-+      0xa186, 0xa186, 0xa186, 0xa186, 0xa186, 0xa186, 0xac39, 0xacbf,
-+      0xa186, 0xb26c, 0xb29c, 0xb26c, 0xb29c, 0xa186, 0x080c, 0x1515,
-       0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1515, 0x0013, 0x006e,
--      0x0005, 0xa161, 0xa63c, 0xa762, 0xa161, 0xa161, 0xa161, 0xa161,
--      0xa161, 0xa199, 0xa7e6, 0xa161, 0xa161, 0xa161, 0xa161, 0xa161,
--      0xa161, 0x080c, 0x1515, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c,
--      0x1515, 0x0013, 0x006e, 0x0005, 0xa17c, 0xac6b, 0xa17c, 0xa17c,
--      0xa17c, 0xa17c, 0xa17c, 0xa17c, 0xac2f, 0xacb3, 0xa17c, 0xb260,
--      0xb290, 0xb260, 0xb290, 0xa17c, 0x080c, 0x1515, 0x0066, 0x6000,
--      0xa0b2, 0x0010, 0x1a0c, 0x1515, 0x0013, 0x006e, 0x0005, 0xa197,
--      0xa936, 0xaa03, 0xaa30, 0xaab4, 0xa197, 0xaba1, 0xab4c, 0xa7f2,
--      0xac05, 0xac1a, 0xa197, 0xa197, 0xa197, 0xa197, 0xa197, 0x080c,
--      0x1515, 0xa1b2, 0x0080, 0x1a0c, 0x1515, 0x2100, 0xa1b2, 0x0040,
--      0x1a04, 0xa5b0, 0x0002, 0xa1e3, 0xa3ae, 0xa1e3, 0xa1e3, 0xa1e3,
--      0xa3b5, 0xa1e3, 0xa1e3, 0xa1e3, 0xa1e3, 0xa1e3, 0xa1e3, 0xa1e3,
--      0xa1e3, 0xa1e3, 0xa1e3, 0xa1e3, 0xa1e3, 0xa1e3, 0xa1e3, 0xa1e3,
--      0xa1e3, 0xa1e3, 0xa1e5, 0xa243, 0xa252, 0xa2a0, 0xa2be, 0xa33c,
--      0xa39b, 0xa1e3, 0xa1e3, 0xa3b8, 0xa1e3, 0xa1e3, 0xa3cb, 0xa3d6,
--      0xa1e3, 0xa1e3, 0xa1e3, 0xa1e3, 0xa1e3, 0xa461, 0xa1e3, 0xa1e3,
--      0xa474, 0xa1e3, 0xa1e3, 0xa42c, 0xa1e3, 0xa1e3, 0xa1e3, 0xa48c,
--      0xa1e3, 0xa1e3, 0xa1e3, 0xa506, 0xa1e3, 0xa1e3, 0xa1e3, 0xa1e3,
--      0xa1e3, 0xa1e3, 0xa577, 0x080c, 0x1515, 0x080c, 0x530a, 0x1150,
--      0x2001, 0xb535, 0x2004, 0xd0cc, 0x1128, 0xa084, 0x0009, 0xa086,
--      0x0008, 0x1140, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013, 0x0000,
--      0x0804, 0xa3a9, 0x080c, 0x52fa, 0x00e6, 0x00c6, 0x0036, 0x0026,
--      0x0016, 0x6218, 0x2270, 0x72a0, 0x0026, 0x2019, 0x0029, 0x080c,
--      0x6df6, 0x0076, 0x2039, 0x0000, 0x080c, 0x6d03, 0x2c08, 0x080c,
--      0xae76, 0x007e, 0x001e, 0x2e60, 0x080c, 0x51ab, 0x001e, 0x002e,
--      0x003e, 0x00ce, 0x00ee, 0x6618, 0x00c6, 0x2660, 0x080c, 0x4fb9,
--      0x00ce, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006,
--      0x0278, 0x080c, 0xadba, 0x1904, 0xa29a, 0x080c, 0xad5a, 0x1120,
--      0x6007, 0x0008, 0x0804, 0xa3a9, 0x6007, 0x0009, 0x0804, 0xa3a9,
--      0x080c, 0xaf6f, 0x0128, 0x080c, 0xadba, 0x0d78, 0x0804, 0xa29a,
--      0x6013, 0x1900, 0x0c88, 0x080c, 0x2dbf, 0x1904, 0xa5ad, 0x6106,
--      0x080c, 0xad14, 0x6007, 0x0006, 0x0804, 0xa3a9, 0x6007, 0x0007,
--      0x0804, 0xa3a9, 0x080c, 0xb2c4, 0x1904, 0xa5ad, 0x080c, 0x2dbf,
--      0x1904, 0xa5ad, 0x00d6, 0x6618, 0x2668, 0x6e04, 0xa684, 0x00ff,
--      0xa082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c, 0x4eec, 0xa6b4,
--      0xff00, 0x8637, 0xa686, 0x0006, 0x0188, 0xa686, 0x0004, 0x0170,
--      0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0140, 0xa686, 0x0004,
--      0x0128, 0xa686, 0x0005, 0x0110, 0x00de, 0x00e0, 0x080c, 0xae18,
--      0x11a0, 0xa686, 0x0006, 0x1150, 0x0026, 0x6218, 0xa290, 0x0028,
--      0x2214, 0x2009, 0x0000, 0x080c, 0x2ce1, 0x002e, 0x080c, 0x504c,
--      0x6007, 0x000a, 0x00de, 0x0804, 0xa3a9, 0x6007, 0x000b, 0x00de,
--      0x0804, 0xa3a9, 0x080c, 0x2c9c, 0x6007, 0x0001, 0x0804, 0xa3a9,
--      0x080c, 0xb2c4, 0x1904, 0xa5ad, 0x080c, 0x2dbf, 0x1904, 0xa5ad,
--      0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa686, 0x0707, 0x0d50,
--      0x0026, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x080c,
--      0x2ce1, 0x002e, 0x6007, 0x000c, 0x0804, 0xa3a9, 0x080c, 0x530a,
-+      0x0005, 0xa1a1, 0xa940, 0xaa0d, 0xaa3a, 0xaabe, 0xa1a1, 0xabab,
-+      0xab56, 0xa7fc, 0xac0f, 0xac24, 0xa1a1, 0xa1a1, 0xa1a1, 0xa1a1,
-+      0xa1a1, 0x080c, 0x1515, 0xa1b2, 0x0080, 0x1a0c, 0x1515, 0x2100,
-+      0xa1b2, 0x0040, 0x1a04, 0xa5ba, 0x0002, 0xa1ed, 0xa3b8, 0xa1ed,
-+      0xa1ed, 0xa1ed, 0xa3bf, 0xa1ed, 0xa1ed, 0xa1ed, 0xa1ed, 0xa1ed,
-+      0xa1ed, 0xa1ed, 0xa1ed, 0xa1ed, 0xa1ed, 0xa1ed, 0xa1ed, 0xa1ed,
-+      0xa1ed, 0xa1ed, 0xa1ed, 0xa1ed, 0xa1ef, 0xa24d, 0xa25c, 0xa2aa,
-+      0xa2c8, 0xa346, 0xa3a5, 0xa1ed, 0xa1ed, 0xa3c2, 0xa1ed, 0xa1ed,
-+      0xa3d5, 0xa3e0, 0xa1ed, 0xa1ed, 0xa1ed, 0xa1ed, 0xa1ed, 0xa46b,
-+      0xa1ed, 0xa1ed, 0xa47e, 0xa1ed, 0xa1ed, 0xa436, 0xa1ed, 0xa1ed,
-+      0xa1ed, 0xa496, 0xa1ed, 0xa1ed, 0xa1ed, 0xa510, 0xa1ed, 0xa1ed,
-+      0xa1ed, 0xa1ed, 0xa1ed, 0xa1ed, 0xa581, 0x080c, 0x1515, 0x080c,
-+      0x5309, 0x1150, 0x2001, 0xb535, 0x2004, 0xd0cc, 0x1128, 0xa084,
-+      0x0009, 0xa086, 0x0008, 0x1140, 0x6007, 0x0009, 0x602b, 0x0009,
-+      0x6013, 0x0000, 0x0804, 0xa3b3, 0x080c, 0x52f9, 0x00e6, 0x00c6,
-+      0x0036, 0x0026, 0x0016, 0x6218, 0x2270, 0x72a0, 0x0026, 0x2019,
-+      0x0029, 0x080c, 0x6df5, 0x0076, 0x2039, 0x0000, 0x080c, 0x6d02,
-+      0x2c08, 0x080c, 0xae82, 0x007e, 0x001e, 0x2e60, 0x080c, 0x51aa,
-+      0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6618, 0x00c6, 0x2660,
-+      0x080c, 0x4fb8, 0x00ce, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff,
-+      0xa082, 0x0006, 0x0278, 0x080c, 0xadc6, 0x1904, 0xa2a4, 0x080c,
-+      0xad66, 0x1120, 0x6007, 0x0008, 0x0804, 0xa3b3, 0x6007, 0x0009,
-+      0x0804, 0xa3b3, 0x080c, 0xaf7b, 0x0128, 0x080c, 0xadc6, 0x0d78,
-+      0x0804, 0xa2a4, 0x6013, 0x1900, 0x0c88, 0x080c, 0x2dbf, 0x1904,
-+      0xa5b7, 0x6106, 0x080c, 0xad20, 0x6007, 0x0006, 0x0804, 0xa3b3,
-+      0x6007, 0x0007, 0x0804, 0xa3b3, 0x080c, 0xb2d0, 0x1904, 0xa5b7,
-+      0x080c, 0x2dbf, 0x1904, 0xa5b7, 0x00d6, 0x6618, 0x2668, 0x6e04,
-+      0xa684, 0x00ff, 0xa082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c,
-+      0x4eeb, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0188, 0xa686,
-+      0x0004, 0x0170, 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0140,
-+      0xa686, 0x0004, 0x0128, 0xa686, 0x0005, 0x0110, 0x00de, 0x00e0,
-+      0x080c, 0xae24, 0x11a0, 0xa686, 0x0006, 0x1150, 0x0026, 0x6218,
-+      0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x2ce1, 0x002e,
-+      0x080c, 0x504b, 0x6007, 0x000a, 0x00de, 0x0804, 0xa3b3, 0x6007,
-+      0x000b, 0x00de, 0x0804, 0xa3b3, 0x080c, 0x2c9c, 0x6007, 0x0001,
-+      0x0804, 0xa3b3, 0x080c, 0xb2d0, 0x1904, 0xa5b7, 0x080c, 0x2dbf,
-+      0x1904, 0xa5b7, 0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa686,
-+      0x0707, 0x0d50, 0x0026, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009,
-+      0x0000, 0x080c, 0x2ce1, 0x002e, 0x6007, 0x000c, 0x0804, 0xa3b3,
-+      0x080c, 0x5309, 0x1140, 0x2001, 0xb535, 0x2004, 0xa084, 0x0009,
-+      0xa086, 0x0008, 0x1110, 0x0804, 0xa1fc, 0x080c, 0x52f9, 0x6618,
-+      0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x06e8,
-+      0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x4f2a, 0x002e, 0x0050,
-+      0xa6b4, 0xff00, 0x8637, 0xa686, 0x0004, 0x0120, 0xa686, 0x0006,
-+      0x1904, 0xa2a4, 0x080c, 0xae31, 0x1120, 0x6007, 0x000e, 0x0804,
-+      0xa3b3, 0x0046, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff,
-+      0x8427, 0x0046, 0x080c, 0x2c9c, 0x004e, 0x0016, 0xa006, 0x2009,
-+      0xb553, 0x210c, 0xd1a4, 0x0158, 0x2009, 0x0029, 0x080c, 0xb0e8,
-+      0x6018, 0x00d6, 0x2068, 0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e,
-+      0x004e, 0x6007, 0x0001, 0x0804, 0xa3b3, 0x2001, 0x0001, 0x080c,
-+      0x4eeb, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,
-+      0xb505, 0x2011, 0xbb90, 0x080c, 0x90da, 0x003e, 0x002e, 0x001e,
-+      0x015e, 0xa005, 0x0168, 0xa6b4, 0xff00, 0x8637, 0xa682, 0x0004,
-+      0x0a04, 0xa2a4, 0xa682, 0x0007, 0x0a04, 0xa2f2, 0x0804, 0xa2a4,
-+      0x6013, 0x1900, 0x6007, 0x0009, 0x0804, 0xa3b3, 0x080c, 0x5309,
-       0x1140, 0x2001, 0xb535, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008,
--      0x1110, 0x0804, 0xa1f2, 0x080c, 0x52fa, 0x6618, 0xa6b0, 0x0001,
--      0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x06e8, 0x1138, 0x0026,
--      0x2001, 0x0006, 0x080c, 0x4f2b, 0x002e, 0x0050, 0xa6b4, 0xff00,
--      0x8637, 0xa686, 0x0004, 0x0120, 0xa686, 0x0006, 0x1904, 0xa29a,
--      0x080c, 0xae25, 0x1120, 0x6007, 0x000e, 0x0804, 0xa3a9, 0x0046,
--      0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x0046,
--      0x080c, 0x2c9c, 0x004e, 0x0016, 0xa006, 0x2009, 0xb553, 0x210c,
--      0xd1a4, 0x0158, 0x2009, 0x0029, 0x080c, 0xb0dc, 0x6018, 0x00d6,
--      0x2068, 0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e, 0x004e, 0x6007,
--      0x0001, 0x0804, 0xa3a9, 0x2001, 0x0001, 0x080c, 0x4eec, 0x0156,
-+      0x1110, 0x0804, 0xa1fc, 0x080c, 0x52f9, 0x6618, 0xa6b0, 0x0001,
-+      0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x06b8, 0xa6b4, 0xff00,
-+      0x8637, 0xa686, 0x0004, 0x0120, 0xa686, 0x0006, 0x1904, 0xa2a4,
-+      0x080c, 0xae59, 0x1138, 0x080c, 0xad66, 0x1120, 0x6007, 0x0010,
-+      0x0804, 0xa3b3, 0x0046, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4,
-+      0x00ff, 0x8427, 0x0046, 0x080c, 0x2c9c, 0x004e, 0x0016, 0xa006,
-+      0x2009, 0xb553, 0x210c, 0xd1a4, 0x0158, 0x2009, 0x0029, 0x080c,
-+      0xb0e8, 0x6018, 0x00d6, 0x2068, 0x6800, 0xc0e5, 0x6802, 0x00de,
-+      0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c, 0xaf7b, 0x0140,
-+      0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0950, 0x0804, 0xa2a4,
-+      0x6013, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, 0x2dbf, 0x1904,
-+      0xa5b7, 0x080c, 0xb2d0, 0x1904, 0xa5b7, 0x080c, 0xa5df, 0x1904,
-+      0xa2a4, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x6cd3, 0x0005,
-+      0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x6cd3, 0x0cc0, 0x6007,
-+      0x0005, 0x0cc0, 0x080c, 0xb2d0, 0x1904, 0xa5b7, 0x080c, 0x2dbf,
-+      0x1904, 0xa5b7, 0x080c, 0xa5df, 0x1904, 0xa2a4, 0x6007, 0x0020,
-+      0x6003, 0x0001, 0x080c, 0x6cd3, 0x0005, 0x080c, 0x2dbf, 0x1904,
-+      0xa5b7, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x6cd3, 0x0005,
-+      0x080c, 0xb2d0, 0x1904, 0xa5b7, 0x080c, 0x2dbf, 0x1904, 0xa5b7,
-+      0x080c, 0xa5df, 0x1904, 0xa2a4, 0x0016, 0x0026, 0x2011, 0xbb91,
-+      0x2214, 0xa286, 0xffff, 0x0190, 0x2c08, 0x080c, 0x9c4a, 0x01e0,
-+      0x2260, 0x2011, 0xbb90, 0x2214, 0x6008, 0xa206, 0x11a8, 0x6018,
-+      0xa190, 0x0006, 0x2214, 0xa206, 0x01e8, 0x0070, 0x2011, 0xbb90,
-+      0x2214, 0x2c08, 0xa006, 0x080c, 0xb0ba, 0x11a0, 0x2011, 0xbb91,
-+      0x2214, 0xa286, 0xffff, 0x01c0, 0x2160, 0x6007, 0x0026, 0x6013,
-+      0x1700, 0x2011, 0xbb89, 0x2214, 0xa296, 0xffff, 0x1180, 0x6007,
-+      0x0025, 0x0068, 0x601c, 0xa086, 0x0007, 0x1d70, 0x6004, 0xa086,
-+      0x0024, 0x1110, 0x080c, 0x861d, 0x2160, 0x6007, 0x0025, 0x6003,
-+      0x0001, 0x080c, 0x6cd3, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001,
-+      0x080c, 0x4eeb, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,
-+      0x2019, 0xb505, 0x2011, 0xbb96, 0x080c, 0x90da, 0x003e, 0x002e,
-+      0x001e, 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xa3b3, 0x080c,
-+      0x8df6, 0x080c, 0x5acf, 0x11b0, 0x0006, 0x0026, 0x0036, 0x080c,
-+      0x5aeb, 0x1158, 0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500,
-+      0x2003, 0x0001, 0x080c, 0x5a07, 0x0010, 0x080c, 0x5aa6, 0x003e,
-+      0x002e, 0x000e, 0x0005, 0x080c, 0x2dbf, 0x1904, 0xa5b7, 0x080c,
-+      0xa5df, 0x1904, 0xa2a4, 0x6106, 0x080c, 0xa5fb, 0x6007, 0x002b,
-+      0x0804, 0xa3b3, 0x6007, 0x002c, 0x0804, 0xa3b3, 0x080c, 0xb2d0,
-+      0x1904, 0xa5b7, 0x080c, 0x2dbf, 0x1904, 0xa5b7, 0x080c, 0xa5df,
-+      0x1904, 0xa2a4, 0x6106, 0x080c, 0xa5ff, 0x1120, 0x6007, 0x002e,
-+      0x0804, 0xa3b3, 0x6007, 0x002f, 0x0804, 0xa3b3, 0x080c, 0x2dbf,
-+      0x1904, 0xa5b7, 0x00e6, 0x00d6, 0x00c6, 0x6018, 0xa080, 0x0001,
-+      0x200c, 0xa184, 0x00ff, 0xa086, 0x0006, 0x0158, 0xa184, 0xff00,
-+      0x8007, 0xa086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804,
-+      0xa3b8, 0x2001, 0xb572, 0x2004, 0xd0e4, 0x0904, 0xa50d, 0x2071,
-+      0xbb8c, 0x7010, 0x6036, 0x7014, 0x603a, 0x7108, 0x720c, 0x2001,
-+      0xb553, 0x2004, 0xd0a4, 0x0140, 0x6018, 0x2068, 0x6810, 0xa106,
-+      0x1118, 0x6814, 0xa206, 0x01f8, 0x2001, 0xb553, 0x2004, 0xd0ac,
-+      0x1590, 0x2069, 0xb500, 0x6874, 0xa206, 0x1568, 0x6870, 0xa106,
-+      0x1550, 0x7210, 0x080c, 0x9c4a, 0x0558, 0x080c, 0xb154, 0x0540,
-+      0x622a, 0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x6c8d, 0x00ce,
-+      0x00de, 0x00ee, 0x0005, 0x7214, 0xa286, 0xffff, 0x0150, 0x080c,
-+      0x9c4a, 0x01b0, 0xa280, 0x0002, 0x2004, 0x7110, 0xa106, 0x1180,
-+      0x0c08, 0x7210, 0x2c08, 0xa085, 0x0001, 0x080c, 0xb0ba, 0x2c10,
-+      0x2160, 0x0130, 0x08b8, 0x6007, 0x0037, 0x6013, 0x1500, 0x08d8,
-+      0x6007, 0x0037, 0x6013, 0x1700, 0x08b0, 0x6007, 0x0012, 0x0898,
-+      0x080c, 0x2dbf, 0x1904, 0xa5b7, 0x6018, 0xa080, 0x0001, 0x2004,
-+      0xa084, 0xff00, 0x8007, 0xa086, 0x0006, 0x1904, 0xa3b8, 0x00e6,
-+      0x00d6, 0x00c6, 0x2001, 0xb572, 0x2004, 0xd0e4, 0x0904, 0xa579,
-+      0x2069, 0xb500, 0x2071, 0xbb8c, 0x7008, 0x6036, 0x720c, 0x623a,
-+      0xa286, 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0xa085, 0x0001,
-+      0x080c, 0xb0ba, 0x2c10, 0x00ce, 0x0588, 0x080c, 0x9c4a, 0x0570,
-+      0x00c6, 0x0026, 0x2260, 0x080c, 0x991d, 0x002e, 0x00ce, 0x7118,
-+      0xa18c, 0xff00, 0x810f, 0xa186, 0x0001, 0x0158, 0xa186, 0x0005,
-+      0x0118, 0xa186, 0x0007, 0x1178, 0xa280, 0x0004, 0x2004, 0xa005,
-+      0x0150, 0x0056, 0x7510, 0x7614, 0x080c, 0xb16b, 0x005e, 0x00ce,
-+      0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013,
-+      0x2a00, 0x6003, 0x0001, 0x080c, 0x6c8d, 0x0c88, 0x6007, 0x003b,
-+      0x602b, 0x0009, 0x6013, 0x1700, 0x6003, 0x0001, 0x080c, 0x6c8d,
-+      0x0c30, 0x6007, 0x003b, 0x602b, 0x000b, 0x6013, 0x0000, 0x0804,
-+      0xa4e3, 0x00e6, 0x0026, 0x080c, 0x5309, 0x0558, 0x080c, 0x52f9,
-+      0x080c, 0xb34b, 0x1520, 0x2071, 0xb500, 0x70d4, 0xc085, 0x70d6,
-+      0x00f6, 0x2079, 0x0100, 0x72a0, 0xa284, 0x00ff, 0x7072, 0x78e6,
-+      0xa284, 0xff00, 0x7274, 0xa205, 0x7076, 0x78ea, 0x00fe, 0x70df,
-+      0x0000, 0x2001, 0xb553, 0x2004, 0xd0a4, 0x0120, 0x2011, 0xb7f9,
-+      0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2ab8, 0x0010, 0x080c,
-+      0xb377, 0x002e, 0x00ee, 0x080c, 0x861d, 0x0804, 0xa3b7, 0x080c,
-+      0x861d, 0x0005, 0x2600, 0x0002, 0xa5c5, 0xa5c5, 0xa5c5, 0xa5c5,
-+      0xa5c5, 0xa5c7, 0xa5c5, 0xa5c5, 0xa5c5, 0x080c, 0x1515, 0x080c,
-+      0xb2d0, 0x1d68, 0x080c, 0x2dbf, 0x1d50, 0x0089, 0x1138, 0x6007,
-+      0x0045, 0x6003, 0x0001, 0x080c, 0x6cd3, 0x0005, 0x080c, 0x2c9c,
-+      0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x6cd3, 0x0005, 0x00d6,
-+      0x0066, 0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686,
-+      0x0006, 0x0170, 0xa686, 0x0004, 0x0158, 0x6e04, 0xa6b4, 0x00ff,
-+      0xa686, 0x0006, 0x0128, 0xa686, 0x0004, 0x0110, 0xa085, 0x0001,
-+      0x006e, 0x00de, 0x0005, 0x00d6, 0x0449, 0x00de, 0x0005, 0x00d6,
-+      0x0491, 0x11f0, 0x680c, 0xa08c, 0xff00, 0x6820, 0xa084, 0x00ff,
-+      0xa115, 0x6212, 0x6824, 0x602a, 0xd1e4, 0x0118, 0x2009, 0x0001,
-+      0x0060, 0xd1ec, 0x0168, 0x6920, 0xa18c, 0x00ff, 0x6824, 0x080c,
-+      0x281d, 0x1130, 0x2110, 0x2009, 0x0000, 0x080c, 0x2ce1, 0x0018,
-+      0xa085, 0x0001, 0x0008, 0xa006, 0x00de, 0x0005, 0x2069, 0xbb8d,
-+      0x6800, 0xa082, 0x0010, 0x1228, 0x6013, 0x0000, 0xa085, 0x0001,
-+      0x0008, 0xa006, 0x0005, 0x6013, 0x0000, 0x2069, 0xbb8c, 0x6808,
-+      0xa084, 0xff00, 0xa086, 0x0800, 0x1140, 0x6800, 0xa084, 0x00ff,
-+      0xa08e, 0x0014, 0x0110, 0xa08e, 0x0010, 0x0005, 0x6004, 0xa0b2,
-+      0x0080, 0x1a0c, 0x1515, 0xa1b6, 0x0013, 0x1130, 0x2008, 0xa1b2,
-+      0x0040, 0x1a04, 0xa746, 0x0092, 0xa1b6, 0x0027, 0x0120, 0xa1b6,
-+      0x0014, 0x190c, 0x1515, 0x2001, 0x0007, 0x080c, 0x4f2a, 0x080c,
-+      0x7090, 0x080c, 0x9e1d, 0x080c, 0x7173, 0x0005, 0xa6a6, 0xa6a8,
-+      0xa6a6, 0xa6a6, 0xa6a6, 0xa6a8, 0xa6ba, 0xa73f, 0xa70a, 0xa73f,
-+      0xa71b, 0xa73f, 0xa6ba, 0xa73f, 0xa737, 0xa73f, 0xa737, 0xa73f,
-+      0xa73f, 0xa6a6, 0xa6a6, 0xa6a6, 0xa6a6, 0xa6a6, 0xa6a6, 0xa6a6,
-+      0xa6a6, 0xa6a6, 0xa6a6, 0xa6a6, 0xa6a8, 0xa6a6, 0xa73f, 0xa6a6,
-+      0xa6a6, 0xa73f, 0xa6a6, 0xa73c, 0xa73f, 0xa6a6, 0xa6a6, 0xa6a6,
-+      0xa6a6, 0xa73f, 0xa73f, 0xa6a6, 0xa73f, 0xa73f, 0xa6a6, 0xa6b4,
-+      0xa6a6, 0xa6a6, 0xa6a6, 0xa6a6, 0xa73b, 0xa73f, 0xa6a6, 0xa6a6,
-+      0xa73f, 0xa73f, 0xa6a6, 0xa6a6, 0xa6a6, 0xa6a6, 0x080c, 0x1515,
-+      0x080c, 0x7090, 0x2001, 0xb7b6, 0x2004, 0x6016, 0x6003, 0x0002,
-+      0x080c, 0x7173, 0x0804, 0xa745, 0x2001, 0x0000, 0x080c, 0x4eeb,
-+      0x0804, 0xa73f, 0x00f6, 0x2079, 0xb552, 0x7804, 0x00fe, 0xd0ac,
-+      0x1904, 0xa73f, 0x2001, 0x0000, 0x080c, 0x4eeb, 0x6018, 0xa080,
-+      0x0004, 0x2004, 0xa086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0xb500,
-+      0x7898, 0x8000, 0x789a, 0x00fe, 0x00e0, 0x00c6, 0x6018, 0x2060,
-+      0x6000, 0xd0f4, 0x1140, 0x6010, 0xa005, 0x0128, 0x00ce, 0x080c,
-+      0x3f3e, 0x0804, 0xa73f, 0x00ce, 0x2001, 0xb500, 0x2004, 0xa086,
-+      0x0002, 0x1138, 0x00f6, 0x2079, 0xb500, 0x7898, 0x8000, 0x789a,
-+      0x00fe, 0x2001, 0x0002, 0x080c, 0x4efd, 0x080c, 0x7090, 0x601f,
-+      0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x6cd3, 0x080c,
-+      0x7173, 0x00c6, 0x6118, 0x2160, 0x2009, 0x0001, 0x080c, 0x69a8,
-+      0x00ce, 0x04d8, 0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa6b4,
-+      0xff00, 0x8637, 0xa686, 0x0006, 0x0550, 0xa686, 0x0004, 0x0538,
-+      0x2001, 0x0004, 0x0410, 0x2001, 0xb500, 0x2004, 0xa086, 0x0003,
-+      0x1110, 0x080c, 0x3f3e, 0x2001, 0x0006, 0x04a1, 0x6618, 0x00d6,
-+      0x2668, 0x6e04, 0x00de, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006,
-+      0x0170, 0x2001, 0x0006, 0x0048, 0x2001, 0x0004, 0x0030, 0x2001,
-+      0x0006, 0x0401, 0x0020, 0x0018, 0x0010, 0x080c, 0x4f2a, 0x080c,
-+      0x7090, 0x080c, 0x861d, 0x080c, 0x7173, 0x0005, 0x2600, 0x0002,
-+      0xa751, 0xa751, 0xa751, 0xa751, 0xa751, 0xa753, 0xa751, 0xa751,
-+      0xa751, 0x080c, 0x1515, 0x080c, 0x7090, 0x080c, 0x861d, 0x080c,
-+      0x7173, 0x0005, 0x0016, 0x00d6, 0x6118, 0x2168, 0x6900, 0xd184,
-+      0x0140, 0x080c, 0x4efd, 0x2001, 0x0000, 0x080c, 0x4eeb, 0x080c,
-+      0x2cc2, 0x00de, 0x001e, 0x0005, 0x00d6, 0x6618, 0x2668, 0x6804,
-+      0xa084, 0xff00, 0x8007, 0x00de, 0xa0b2, 0x000c, 0x1a0c, 0x1515,
-+      0xa1b6, 0x0015, 0x1110, 0x003b, 0x0028, 0xa1b6, 0x0016, 0x190c,
-+      0x1515, 0x006b, 0x0005, 0x8cdf, 0x8cdf, 0x8cdf, 0x8cdf, 0x8cdf,
-+      0x8cdf, 0xa7dc, 0xa79b, 0x8cdf, 0x8cdf, 0x8cdf, 0x8cdf, 0x8cdf,
-+      0x8cdf, 0x8cdf, 0x8cdf, 0x8cdf, 0x8cdf, 0xa7dc, 0xa7e3, 0x8cdf,
-+      0x8cdf, 0x8cdf, 0x8cdf, 0x00f6, 0x2079, 0xb552, 0x7804, 0xd0ac,
-+      0x11e0, 0x6018, 0xa07d, 0x01c8, 0x7800, 0xd0f4, 0x1118, 0x7810,
-+      0xa005, 0x1198, 0x2001, 0x0000, 0x080c, 0x4eeb, 0x2001, 0x0002,
-+      0x080c, 0x4efd, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
-+      0x080c, 0x6cd3, 0x080c, 0x7173, 0x00e8, 0x2011, 0xbb83, 0x2204,
-+      0x8211, 0x220c, 0x080c, 0x281d, 0x11a8, 0x00c6, 0x080c, 0x4fa9,
-+      0x0120, 0x00ce, 0x080c, 0x861d, 0x0068, 0x6010, 0x0006, 0x6014,
-+      0x0006, 0x080c, 0x4c0b, 0x000e, 0x6016, 0x000e, 0x6012, 0x00ce,
-+      0x080c, 0x861d, 0x00fe, 0x0005, 0x6604, 0xa6b6, 0x001e, 0x1110,
-+      0x080c, 0x861d, 0x0005, 0x080c, 0x8f95, 0x1138, 0x6003, 0x0001,
-+      0x6007, 0x0001, 0x080c, 0x6cd3, 0x0010, 0x080c, 0x861d, 0x0005,
-+      0x6004, 0xa08a, 0x0080, 0x1a0c, 0x1515, 0x080c, 0x7090, 0x080c,
-+      0x9e1d, 0x080c, 0x7173, 0x0005, 0xa182, 0x0040, 0x0002, 0xa812,
-+      0xa812, 0xa812, 0xa812, 0xa814, 0xa812, 0xa812, 0xa812, 0xa812,
-+      0xa812, 0xa812, 0xa812, 0xa812, 0xa812, 0xa812, 0xa812, 0xa812,
-+      0xa812, 0xa812, 0x080c, 0x1515, 0x00d6, 0x00e6, 0x00f6, 0x0156,
-+      0x0046, 0x0026, 0x6218, 0xa280, 0x002b, 0x2004, 0xa005, 0x0120,
-+      0x2021, 0x0000, 0x080c, 0xb31c, 0x6106, 0x2071, 0xbb80, 0x7444,
-+      0xa4a4, 0xff00, 0x0904, 0xa878, 0xa486, 0x2000, 0x1130, 0x2009,
-+      0x0001, 0x2011, 0x0200, 0x080c, 0x6b1a, 0x080c, 0x15f8, 0x090c,
-+      0x1515, 0x6003, 0x0007, 0x2d00, 0x6837, 0x010d, 0x6803, 0x0000,
-+      0x683b, 0x0000, 0x6c5a, 0x2c00, 0x685e, 0x6008, 0x68b2, 0x6018,
-+      0x2078, 0x78a0, 0x8007, 0x7130, 0x694a, 0x0016, 0xa084, 0xff00,
-+      0x6846, 0x684f, 0x0000, 0x6853, 0x0000, 0x6857, 0x0036, 0x080c,
-+      0x5408, 0x001e, 0xa486, 0x2000, 0x1130, 0x2019, 0x0017, 0x080c,
-+      0xb065, 0x0804, 0xa8d5, 0xa486, 0x0400, 0x1130, 0x2019, 0x0002,
-+      0x080c, 0xb017, 0x0804, 0xa8d5, 0xa486, 0x0200, 0x1110, 0x080c,
-+      0xaffc, 0xa486, 0x1000, 0x1110, 0x080c, 0xb04a, 0x0804, 0xa8d5,
-+      0x2069, 0xb874, 0x6a00, 0xd284, 0x0904, 0xa93c, 0xa284, 0x0300,
-+      0x1904, 0xa935, 0x6804, 0xa005, 0x0904, 0xa91d, 0x2d78, 0x6003,
-+      0x0007, 0x080c, 0x15df, 0x0904, 0xa8dc, 0x7800, 0xd08c, 0x1118,
-+      0x7804, 0x8001, 0x7806, 0x6013, 0x0000, 0x6803, 0x0000, 0x6837,
-+      0x0116, 0x683b, 0x0000, 0x6008, 0x68b2, 0x2c00, 0x684a, 0x6018,
-+      0x2078, 0x78a0, 0x8007, 0x7130, 0x6986, 0x6846, 0x7928, 0x698a,
-+      0x792c, 0x698e, 0x7930, 0x6992, 0x7934, 0x6996, 0x6853, 0x003d,
-+      0x7244, 0xa294, 0x0003, 0xa286, 0x0002, 0x1118, 0x684f, 0x0040,
-+      0x0040, 0xa286, 0x0001, 0x1118, 0x684f, 0x0080, 0x0010, 0x684f,
-+      0x0000, 0x20a9, 0x000a, 0x2001, 0xbb90, 0xad90, 0x0015, 0x200c,
-+      0x810f, 0x2112, 0x8000, 0x8210, 0x1f04, 0xa8c7, 0x200c, 0x6982,
-+      0x8000, 0x200c, 0x697e, 0x080c, 0x5408, 0x002e, 0x004e, 0x015e,
-+      0x00fe, 0x00ee, 0x00de, 0x0005, 0x2001, 0xb50e, 0x2004, 0xd084,
-+      0x0120, 0x080c, 0x15f8, 0x1904, 0xa88d, 0x6013, 0x0100, 0x6003,
-+      0x0001, 0x6007, 0x0041, 0x080c, 0x6c8d, 0x080c, 0x7173, 0x0c28,
-+      0x2069, 0xbb92, 0x2d04, 0xa084, 0xff00, 0xa086, 0x1200, 0x11a8,
-+      0x2069, 0xbb80, 0x686c, 0xa084, 0x00ff, 0x0016, 0x6110, 0xa18c,
-+      0x0700, 0xa10d, 0x6112, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043,
-+      0x080c, 0x6c8d, 0x080c, 0x7173, 0x0840, 0x6868, 0x602a, 0x686c,
-+      0x602e, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
-+      0x6c8d, 0x080c, 0x7173, 0x0804, 0xa8d5, 0x2001, 0xb50d, 0x2004,
-+      0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x3ecc, 0x6013, 0x0300,
-+      0x0010, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
-+      0x6c8d, 0x080c, 0x7173, 0x0804, 0xa8d5, 0x6013, 0x0500, 0x0c98,
-+      0x6013, 0x0600, 0x0804, 0xa8f0, 0x6013, 0x0200, 0x0804, 0xa8f0,
-+      0xa186, 0x0013, 0x1170, 0x6004, 0xa08a, 0x0040, 0x0a0c, 0x1515,
-+      0xa08a, 0x0053, 0x1a0c, 0x1515, 0xa082, 0x0040, 0x2008, 0x0804,
-+      0xa9ca, 0xa186, 0x0051, 0x0138, 0xa186, 0x0047, 0x11d8, 0x6004,
-+      0xa086, 0x0041, 0x0518, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0,
-+      0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x6b74,
-+      0x002e, 0x001e, 0x000e, 0x012e, 0x6000, 0xa086, 0x0002, 0x1170,
-+      0x0804, 0xaa0d, 0xa186, 0x0027, 0x0120, 0xa186, 0x0014, 0x190c,
-+      0x1515, 0x6004, 0xa082, 0x0040, 0x2008, 0x001a, 0x080c, 0x8663,
-+      0x0005, 0xa994, 0xa996, 0xa996, 0xa9ba, 0xa994, 0xa994, 0xa994,
-+      0xa994, 0xa994, 0xa994, 0xa994, 0xa994, 0xa994, 0xa994, 0xa994,
-+      0xa994, 0xa994, 0xa994, 0xa994, 0x080c, 0x1515, 0x080c, 0x7090,
-+      0x080c, 0x7173, 0x0036, 0x00d6, 0x6010, 0xa06d, 0x01c0, 0xad84,
-+      0xf000, 0x01a8, 0x6003, 0x0002, 0x6018, 0x2004, 0xd0bc, 0x1178,
-+      0x2019, 0x0004, 0x080c, 0xb099, 0x6013, 0x0000, 0x6014, 0xa005,
-+      0x1120, 0x2001, 0xb7b7, 0x2004, 0x6016, 0x6003, 0x0007, 0x00de,
-+      0x003e, 0x0005, 0x00d6, 0x080c, 0x7090, 0x080c, 0x7173, 0x080c,
-+      0x9c5a, 0x0120, 0x6010, 0x2068, 0x080c, 0x160f, 0x080c, 0x9e1d,
-+      0x00de, 0x0005, 0x0002, 0xa9de, 0xa9fb, 0xa9e7, 0xaa07, 0xa9de,
-+      0xa9de, 0xa9de, 0xa9de, 0xa9de, 0xa9de, 0xa9de, 0xa9de, 0xa9de,
-+      0xa9de, 0xa9de, 0xa9de, 0xa9de, 0xa9de, 0xa9de, 0x080c, 0x1515,
-+      0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x080c,
-+      0x7090, 0x6010, 0xa080, 0x0013, 0x2004, 0xd0b4, 0x0138, 0x6003,
-+      0x0007, 0x2009, 0x0043, 0x080c, 0x864c, 0x0010, 0x6003, 0x0002,
-+      0x080c, 0x7173, 0x0005, 0x080c, 0x7090, 0x080c, 0xb2d7, 0x1120,
-+      0x080c, 0x6aef, 0x080c, 0x861d, 0x080c, 0x7173, 0x0005, 0x080c,
-+      0x7090, 0x2009, 0x0041, 0x0804, 0xab56, 0xa182, 0x0040, 0x0002,
-+      0xaa23, 0xaa25, 0xaa23, 0xaa23, 0xaa23, 0xaa23, 0xaa23, 0xaa26,
-+      0xaa23, 0xaa23, 0xaa23, 0xaa23, 0xaa23, 0xaa23, 0xaa23, 0xaa23,
-+      0xaa23, 0xaa31, 0xaa23, 0x080c, 0x1515, 0x0005, 0x6003, 0x0004,
-+      0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x185e,
-+      0x0005, 0x00d6, 0x080c, 0x6aef, 0x00de, 0x080c, 0xb33a, 0x080c,
-+      0x861d, 0x0005, 0xa182, 0x0040, 0x0002, 0xaa50, 0xaa50, 0xaa50,
-+      0xaa50, 0xaa50, 0xaa50, 0xaa50, 0xaa52, 0xaa50, 0xaa55, 0xaa8e,
-+      0xaa50, 0xaa50, 0xaa50, 0xaa50, 0xaa8e, 0xaa50, 0xaa50, 0xaa50,
-+      0x080c, 0x1515, 0x080c, 0x8663, 0x0005, 0x2001, 0xb572, 0x2004,
-+      0xd0e4, 0x0158, 0x2001, 0x0100, 0x2004, 0xa082, 0x0005, 0x0228,
-+      0x2001, 0x011f, 0x2004, 0x6036, 0x0010, 0x6037, 0x0000, 0x080c,
-+      0x7126, 0x080c, 0x7230, 0x6010, 0x00d6, 0x2068, 0x684c, 0xd0fc,
-+      0x0150, 0xa08c, 0x0003, 0xa18e, 0x0002, 0x0168, 0x2009, 0x0041,
-+      0x00de, 0x0804, 0xab56, 0x6003, 0x0007, 0x6017, 0x0000, 0x080c,
-+      0x6aef, 0x00de, 0x0005, 0x080c, 0xb2d7, 0x0110, 0x00de, 0x0005,
-+      0x080c, 0x6aef, 0x080c, 0x861d, 0x00de, 0x0ca0, 0x0036, 0x080c,
-+      0x7126, 0x080c, 0x7230, 0x6010, 0x00d6, 0x2068, 0x6018, 0x2004,
-+      0xd0bc, 0x0188, 0x684c, 0xa084, 0x0003, 0xa086, 0x0002, 0x0140,
-+      0x687c, 0x632c, 0xa31a, 0x632e, 0x6880, 0x6328, 0xa31b, 0x632a,
-+      0x6003, 0x0002, 0x0080, 0x2019, 0x0004, 0x080c, 0xb099, 0x6014,
-+      0xa005, 0x1128, 0x2001, 0xb7b7, 0x2004, 0x8003, 0x6016, 0x6013,
-+      0x0000, 0x6003, 0x0007, 0x00de, 0x003e, 0x0005, 0xa186, 0x0013,
-+      0x1150, 0x6004, 0xa086, 0x0042, 0x190c, 0x1515, 0x080c, 0x7090,
-+      0x080c, 0x7173, 0x0005, 0xa186, 0x0027, 0x0118, 0xa186, 0x0014,
-+      0x1180, 0x6004, 0xa086, 0x0042, 0x190c, 0x1515, 0x2001, 0x0007,
-+      0x080c, 0x4f2a, 0x080c, 0x7090, 0x080c, 0x9e1d, 0x080c, 0x7173,
-+      0x0005, 0xa182, 0x0040, 0x0002, 0xaaf7, 0xaaf7, 0xaaf7, 0xaaf7,
-+      0xaaf7, 0xaaf7, 0xaaf7, 0xaaf9, 0xab05, 0xaaf7, 0xaaf7, 0xaaf7,
-+      0xaaf7, 0xaaf7, 0xaaf7, 0xaaf7, 0xaaf7, 0xaaf7, 0xaaf7, 0x080c,
-+      0x1515, 0x0036, 0x0046, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
-+      0x080c, 0x185e, 0x004e, 0x003e, 0x0005, 0x6010, 0x00d6, 0x2068,
-+      0x6810, 0x6a14, 0x0006, 0x0046, 0x0056, 0x6c7c, 0xa422, 0x6d80,
-+      0x2200, 0xa52b, 0x602c, 0xa420, 0x642e, 0x6028, 0xa529, 0x652a,
-+      0x005e, 0x004e, 0x000e, 0xa20d, 0x1178, 0x684c, 0xd0fc, 0x0120,
-+      0x2009, 0x0041, 0x00de, 0x0490, 0x6003, 0x0007, 0x6017, 0x0000,
-+      0x080c, 0x6aef, 0x00de, 0x0005, 0x0006, 0x00f6, 0x2c78, 0x080c,
-+      0x5305, 0x00fe, 0x000e, 0x0120, 0x6003, 0x0002, 0x00de, 0x0005,
-+      0x2009, 0xb50d, 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010,
-+      0x6003, 0x0006, 0x0021, 0x080c, 0x6af1, 0x00de, 0x0005, 0xd2fc,
-+      0x0140, 0x8002, 0x8000, 0x8212, 0xa291, 0x0000, 0x2009, 0x0009,
-+      0x0010, 0x2009, 0x0015, 0x6a6a, 0x6866, 0x0005, 0xa182, 0x0040,
-+      0x0208, 0x0062, 0xa186, 0x0013, 0x0120, 0xa186, 0x0014, 0x190c,
-+      0x1515, 0x6020, 0xd0dc, 0x090c, 0x1515, 0x0005, 0xab79, 0xab80,
-+      0xab8c, 0xab98, 0xab79, 0xab79, 0xab79, 0xaba7, 0xab79, 0xab7b,
-+      0xab7b, 0xab79, 0xab79, 0xab79, 0xab79, 0xab7b, 0xab79, 0xab7b,
-+      0xab79, 0x080c, 0x1515, 0x6020, 0xd0dc, 0x090c, 0x1515, 0x0005,
-+      0x6003, 0x0001, 0x6106, 0x080c, 0x6c8d, 0x0126, 0x2091, 0x8000,
-+      0x080c, 0x7173, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c,
-+      0x6c8d, 0x0126, 0x2091, 0x8000, 0x080c, 0x7173, 0x012e, 0x0005,
-+      0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1fa9, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x6cf0, 0x080c, 0x7230, 0x012e, 0x0005, 0xa016,
-+      0x080c, 0x185e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0036, 0x00d6,
-+      0xa182, 0x0040, 0x0023, 0x00de, 0x003e, 0x012e, 0x0005, 0xabc7,
-+      0xabc9, 0xabdb, 0xabf6, 0xabc7, 0xabc7, 0xabc7, 0xac0b, 0xabc7,
-+      0xabc7, 0xabc7, 0xabc7, 0xabc7, 0xabc7, 0xabc7, 0xabc7, 0x080c,
-+      0x1515, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x01f8, 0xa09c, 0x0003,
-+      0xa39e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, 0x6c8d,
-+      0x080c, 0x7173, 0x0498, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0168,
-+      0xa09c, 0x0003, 0xa39e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106,
-+      0x080c, 0x6c8d, 0x080c, 0x7173, 0x0408, 0x6013, 0x0000, 0x6017,
-+      0x0000, 0x2019, 0x0004, 0x080c, 0xb099, 0x00c0, 0x6010, 0x2068,
-+      0x684c, 0xd0fc, 0x0d90, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0d68,
-+      0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1fa9, 0x080c, 0x6cf0,
-+      0x080c, 0x7230, 0x0018, 0xa016, 0x080c, 0x185e, 0x0005, 0x080c,
-+      0x7090, 0x6110, 0x81ff, 0x0158, 0x00d6, 0x2168, 0x080c, 0xb380,
-+      0x0036, 0x2019, 0x0029, 0x080c, 0xb099, 0x003e, 0x00de, 0x080c,
-+      0x9e1d, 0x080c, 0x7173, 0x0005, 0x080c, 0x7126, 0x6110, 0x81ff,
-+      0x0158, 0x00d6, 0x2168, 0x080c, 0xb380, 0x0036, 0x2019, 0x0029,
-+      0x080c, 0xb099, 0x003e, 0x00de, 0x080c, 0x9e1d, 0x080c, 0x7230,
-+      0x0005, 0xa182, 0x0085, 0x0002, 0xac45, 0xac43, 0xac43, 0xac51,
-+      0xac43, 0xac43, 0xac43, 0x080c, 0x1515, 0x6003, 0x000b, 0x6106,
-+      0x080c, 0x6c8d, 0x0126, 0x2091, 0x8000, 0x080c, 0x7173, 0x012e,
-+      0x0005, 0x0026, 0x00e6, 0x080c, 0xb2d0, 0x0118, 0x080c, 0x861d,
-+      0x00d8, 0x2071, 0xbb80, 0x7224, 0x6212, 0x7220, 0x080c, 0xaf47,
-+      0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0xa296,
-+      0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c, 0x6c8d,
-+      0x080c, 0x7173, 0x080c, 0x7230, 0x00ee, 0x002e, 0x0005, 0xa186,
-+      0x0013, 0x1160, 0x6004, 0xa08a, 0x0085, 0x0a0c, 0x1515, 0xa08a,
-+      0x008c, 0x1a0c, 0x1515, 0xa082, 0x0085, 0x00a2, 0xa186, 0x0027,
-+      0x0130, 0xa186, 0x0014, 0x0118, 0x080c, 0x8663, 0x0050, 0x2001,
-+      0x0007, 0x080c, 0x4f2a, 0x080c, 0x7090, 0x080c, 0x9e1d, 0x080c,
-+      0x7173, 0x0005, 0xaca1, 0xaca3, 0xaca3, 0xaca1, 0xaca1, 0xaca1,
-+      0xaca1, 0x080c, 0x1515, 0x080c, 0x7090, 0x080c, 0x9e1d, 0x080c,
-+      0x7173, 0x0005, 0xa182, 0x0085, 0x0a0c, 0x1515, 0xa182, 0x008c,
-+      0x1a0c, 0x1515, 0xa182, 0x0085, 0x0002, 0xacbc, 0xacbc, 0xacbc,
-+      0xacbe, 0xacbc, 0xacbc, 0xacbc, 0x080c, 0x1515, 0x0005, 0xa186,
-+      0x0013, 0x0148, 0xa186, 0x0014, 0x0130, 0xa186, 0x0027, 0x0118,
-+      0x080c, 0x8663, 0x0030, 0x080c, 0x7090, 0x080c, 0x9e1d, 0x080c,
-+      0x7173, 0x0005, 0x0036, 0x080c, 0xb33a, 0x603f, 0x0000, 0x2019,
-+      0x000b, 0x0031, 0x601f, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005,
-+      0x0126, 0x0036, 0x2091, 0x8000, 0x0086, 0x2c40, 0x0096, 0x2049,
-+      0x0000, 0x080c, 0x8130, 0x009e, 0x008e, 0x1578, 0x0076, 0x2c38,
-+      0x080c, 0x81d6, 0x007e, 0x1548, 0x6000, 0xa086, 0x0000, 0x0528,
-+      0x601c, 0xa086, 0x0007, 0x0508, 0x00d6, 0x6000, 0xa086, 0x0004,
-+      0x1150, 0x080c, 0xb33a, 0x601f, 0x0007, 0x2001, 0xb7b6, 0x2004,
-+      0x6016, 0x080c, 0x194d, 0x6010, 0x2068, 0x080c, 0x9c5a, 0x0110,
-+      0x080c, 0xb099, 0x00de, 0x6013, 0x0000, 0x080c, 0xb33a, 0x601f,
-+      0x0007, 0x2001, 0xb7b6, 0x2004, 0x6016, 0x003e, 0x012e, 0x0005,
-+      0x00f6, 0x00c6, 0x0036, 0x0156, 0x2079, 0xbb80, 0x7938, 0x783c,
-+      0x080c, 0x281d, 0x15b0, 0x0016, 0x00c6, 0x080c, 0x4fa9, 0x1578,
-+      0x001e, 0x002e, 0x0026, 0x0016, 0x2019, 0x0029, 0x080c, 0x8299,
-+      0x080c, 0x6df5, 0x0076, 0x2039, 0x0000, 0x080c, 0x6d02, 0x007e,
-+      0x001e, 0x0076, 0x2039, 0x0000, 0x080c, 0xae82, 0x007e, 0x080c,
-+      0x51aa, 0x0026, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006,
-+      0x0118, 0xa286, 0x0004, 0x1118, 0x62a0, 0x080c, 0x2d55, 0x002e,
-+      0x001e, 0x080c, 0x4c0b, 0x6612, 0x6516, 0xa006, 0x0010, 0x00ce,
-+      0x001e, 0x015e, 0x003e, 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6,
-+      0x00e6, 0x0016, 0x2009, 0xb521, 0x2104, 0xa086, 0x0074, 0x1904,
-+      0xadbb, 0x2069, 0xbb8e, 0x690c, 0xa182, 0x0100, 0x06c0, 0x6908,
-+      0xa184, 0x8000, 0x05e8, 0x2001, 0xb79e, 0x2004, 0xa005, 0x1160,
-+      0x6018, 0x2070, 0x7010, 0xa084, 0x00ff, 0x0118, 0x7000, 0xd0f4,
-+      0x0118, 0xa184, 0x0800, 0x0560, 0x6910, 0xa18a, 0x0001, 0x0610,
-+      0x6914, 0x2069, 0xbbae, 0x6904, 0x81ff, 0x1198, 0x690c, 0xa182,
-+      0x0100, 0x02a8, 0x6908, 0x81ff, 0x1178, 0x6910, 0xa18a, 0x0001,
-+      0x0288, 0x6918, 0xa18a, 0x0001, 0x0298, 0x00d0, 0x6013, 0x0100,
-+      0x00a0, 0x6013, 0x0300, 0x0088, 0x6013, 0x0500, 0x0070, 0x6013,
-+      0x0700, 0x0058, 0x6013, 0x0900, 0x0040, 0x6013, 0x0b00, 0x0028,
-+      0x6013, 0x0f00, 0x0010, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0008,
-+      0xa006, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6,
-+      0x0026, 0x0036, 0x0156, 0x6218, 0x2268, 0x6b04, 0xa394, 0x00ff,
-+      0xa286, 0x0006, 0x0190, 0xa286, 0x0004, 0x0178, 0xa394, 0xff00,
-+      0x8217, 0xa286, 0x0006, 0x0148, 0xa286, 0x0004, 0x0130, 0x00c6,
-+      0x2d60, 0x080c, 0x4fb8, 0x00ce, 0x04c0, 0x2011, 0xbb96, 0xad98,
-+      0x000a, 0x20a9, 0x0004, 0x080c, 0x90da, 0x1580, 0x2011, 0xbb9a,
-+      0xad98, 0x0006, 0x20a9, 0x0004, 0x080c, 0x90da, 0x1538, 0x0046,
-+      0x0016, 0x6aa0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0xb553,
-+      0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xb0e8, 0x6800,
-+      0xc0e5, 0x6802, 0x2019, 0x0029, 0x080c, 0x6df5, 0x0076, 0x2039,
-+      0x0000, 0x080c, 0x6d02, 0x2c08, 0x080c, 0xae82, 0x007e, 0x2001,
-+      0x0007, 0x080c, 0x4f2a, 0x001e, 0x004e, 0xa006, 0x015e, 0x003e,
-+      0x002e, 0x00de, 0x00ce, 0x0005, 0x00d6, 0x2069, 0xbb8e, 0x6800,
-+      0xa086, 0x0800, 0x0118, 0x6013, 0x0000, 0x0008, 0xa006, 0x00de,
-+      0x0005, 0x00c6, 0x00f6, 0x0016, 0x0026, 0x0036, 0x0156, 0x2079,
-+      0xbb8c, 0x7930, 0x7834, 0x080c, 0x281d, 0x11a0, 0x080c, 0x4fa9,
-+      0x1188, 0x2011, 0xbb90, 0xac98, 0x000a, 0x20a9, 0x0004, 0x080c,
-+      0x90da, 0x1140, 0x2011, 0xbb94, 0xac98, 0x0006, 0x20a9, 0x0004,
-+      0x080c, 0x90da, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00ce,
-+      0x0005, 0x00c6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011,
-+      0xbb83, 0x2204, 0x8211, 0x220c, 0x080c, 0x281d, 0x11a0, 0x080c,
-+      0x4fa9, 0x1188, 0x2011, 0xbb96, 0xac98, 0x000a, 0x20a9, 0x0004,
-+      0x080c, 0x90da, 0x1140, 0x2011, 0xbb9a, 0xac98, 0x0006, 0x20a9,
-+      0x0004, 0x080c, 0x90da, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e,
-+      0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056,
-+      0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029, 0xb7e9,
-+      0x252c, 0x2021, 0xb7ef, 0x2424, 0x2061, 0xbd00, 0x2071, 0xb500,
-+      0x7648, 0x7068, 0x81ff, 0x0150, 0x0006, 0xa186, 0xb8f4, 0x000e,
-+      0x0128, 0x8001, 0xa602, 0x1a04, 0xaf03, 0x0018, 0xa606, 0x0904,
-+      0xaf03, 0x2100, 0xac06, 0x0904, 0xaefa, 0x080c, 0xb110, 0x0904,
-+      0xaefa, 0x671c, 0xa786, 0x0001, 0x0904, 0xaf1e, 0xa786, 0x0004,
-+      0x0904, 0xaf1e, 0xa786, 0x0007, 0x05e8, 0x2500, 0xac06, 0x05d0,
-+      0x2400, 0xac06, 0x05b8, 0x080c, 0xb120, 0x15a0, 0x88ff, 0x0118,
-+      0x6050, 0xa906, 0x1578, 0x00d6, 0x6000, 0xa086, 0x0004, 0x1120,
-+      0x0016, 0x080c, 0x194d, 0x001e, 0xa786, 0x0008, 0x1148, 0x080c,
-+      0x9e58, 0x1130, 0x080c, 0x8c19, 0x00de, 0x080c, 0x9e1d, 0x00d0,
-+      0x6010, 0x2068, 0x080c, 0x9c5a, 0x0190, 0xa786, 0x0003, 0x1528,
-+      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0xb380, 0x0016,
-+      0x080c, 0x9ecc, 0x080c, 0x5408, 0x001e, 0x080c, 0x9e11, 0x00de,
-+      0x080c, 0x9e1d, 0xace0, 0x0018, 0x2001, 0xb517, 0x2004, 0xac02,
-+      0x1210, 0x0804, 0xae96, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e,
-+      0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0xa786, 0x0006, 0x1150,
-+      0xa386, 0x0005, 0x0128, 0x080c, 0xb380, 0x080c, 0xb099, 0x08f8,
-+      0x00de, 0x0c00, 0xa786, 0x000a, 0x0968, 0x0850, 0x080c, 0xb120,
-+      0x19c8, 0x81ff, 0x09b8, 0xa180, 0x0001, 0x2004, 0xa086, 0x0018,
-+      0x0130, 0xa180, 0x0001, 0x2004, 0xa086, 0x002d, 0x1958, 0x6000,
-+      0xa086, 0x0002, 0x1938, 0x080c, 0x9e47, 0x0130, 0x080c, 0x9e58,
-+      0x1908, 0x080c, 0x8c19, 0x0038, 0x080c, 0x2cc2, 0x080c, 0x9e58,
-+      0x1110, 0x080c, 0x8c19, 0x080c, 0x9e1d, 0x0804, 0xaefa, 0x00c6,
-+      0x00e6, 0x0016, 0x2c08, 0x2170, 0xa006, 0x080c, 0xb0ba, 0x001e,
-+      0x0120, 0x601c, 0xa084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005,
-+      0xaf60, 0xaf60, 0xaf60, 0xaf60, 0xaf60, 0xaf60, 0xaf62, 0xaf60,
-+      0xa006, 0x0005, 0x0046, 0x0016, 0x7018, 0xa080, 0x0028, 0x2024,
-+      0xa4a4, 0x00ff, 0x8427, 0x2c00, 0x2009, 0x0020, 0x080c, 0xb0e8,
-+      0x001e, 0x004e, 0x0036, 0x2019, 0x0002, 0x080c, 0xace0, 0x003e,
-+      0xa085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c, 0x4eeb, 0x0156,
-       0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0xb505, 0x2011,
--      0xbb90, 0x080c, 0x90d4, 0x003e, 0x002e, 0x001e, 0x015e, 0xa005,
--      0x0168, 0xa6b4, 0xff00, 0x8637, 0xa682, 0x0004, 0x0a04, 0xa29a,
--      0xa682, 0x0007, 0x0a04, 0xa2e8, 0x0804, 0xa29a, 0x6013, 0x1900,
--      0x6007, 0x0009, 0x0804, 0xa3a9, 0x080c, 0x530a, 0x1140, 0x2001,
--      0xb535, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008, 0x1110, 0x0804,
--      0xa1f2, 0x080c, 0x52fa, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684,
--      0x00ff, 0xa082, 0x0006, 0x06b8, 0xa6b4, 0xff00, 0x8637, 0xa686,
--      0x0004, 0x0120, 0xa686, 0x0006, 0x1904, 0xa29a, 0x080c, 0xae4d,
--      0x1138, 0x080c, 0xad5a, 0x1120, 0x6007, 0x0010, 0x0804, 0xa3a9,
--      0x0046, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427,
--      0x0046, 0x080c, 0x2c9c, 0x004e, 0x0016, 0xa006, 0x2009, 0xb553,
--      0x210c, 0xd1a4, 0x0158, 0x2009, 0x0029, 0x080c, 0xb0dc, 0x6018,
--      0x00d6, 0x2068, 0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e, 0x004e,
--      0x6007, 0x0001, 0x00f0, 0x080c, 0xaf6f, 0x0140, 0xa6b4, 0xff00,
--      0x8637, 0xa686, 0x0006, 0x0950, 0x0804, 0xa29a, 0x6013, 0x1900,
--      0x6007, 0x0009, 0x0070, 0x080c, 0x2dbf, 0x1904, 0xa5ad, 0x080c,
--      0xb2c4, 0x1904, 0xa5ad, 0x080c, 0xa5d5, 0x1904, 0xa29a, 0x6007,
--      0x0012, 0x6003, 0x0001, 0x080c, 0x6cd4, 0x0005, 0x6007, 0x0001,
--      0x6003, 0x0001, 0x080c, 0x6cd4, 0x0cc0, 0x6007, 0x0005, 0x0cc0,
--      0x080c, 0xb2c4, 0x1904, 0xa5ad, 0x080c, 0x2dbf, 0x1904, 0xa5ad,
--      0x080c, 0xa5d5, 0x1904, 0xa29a, 0x6007, 0x0020, 0x6003, 0x0001,
--      0x080c, 0x6cd4, 0x0005, 0x080c, 0x2dbf, 0x1904, 0xa5ad, 0x6007,
--      0x0023, 0x6003, 0x0001, 0x080c, 0x6cd4, 0x0005, 0x080c, 0xb2c4,
--      0x1904, 0xa5ad, 0x080c, 0x2dbf, 0x1904, 0xa5ad, 0x080c, 0xa5d5,
--      0x1904, 0xa29a, 0x0016, 0x0026, 0x2011, 0xbb91, 0x2214, 0xa286,
--      0xffff, 0x0190, 0x2c08, 0x080c, 0x9c44, 0x01e0, 0x2260, 0x2011,
--      0xbb90, 0x2214, 0x6008, 0xa206, 0x11a8, 0x6018, 0xa190, 0x0006,
--      0x2214, 0xa206, 0x01e8, 0x0070, 0x2011, 0xbb90, 0x2214, 0x2c08,
--      0xa006, 0x080c, 0xb0ae, 0x11a0, 0x2011, 0xbb91, 0x2214, 0xa286,
--      0xffff, 0x01c0, 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x2011,
--      0xbb89, 0x2214, 0xa296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068,
--      0x601c, 0xa086, 0x0007, 0x1d70, 0x6004, 0xa086, 0x0024, 0x1110,
--      0x080c, 0x8617, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c,
--      0x6cd4, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x4eec,
--      0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0xb505,
--      0x2011, 0xbb96, 0x080c, 0x90d4, 0x003e, 0x002e, 0x001e, 0x015e,
--      0x0120, 0x6007, 0x0031, 0x0804, 0xa3a9, 0x080c, 0x8df0, 0x080c,
--      0x5ad0, 0x11b0, 0x0006, 0x0026, 0x0036, 0x080c, 0x5aec, 0x1158,
--      0x2001, 0xb79f, 0x2003, 0x0001, 0x2001, 0xb500, 0x2003, 0x0001,
--      0x080c, 0x5a08, 0x0010, 0x080c, 0x5aa7, 0x003e, 0x002e, 0x000e,
--      0x0005, 0x080c, 0x2dbf, 0x1904, 0xa5ad, 0x080c, 0xa5d5, 0x1904,
--      0xa29a, 0x6106, 0x080c, 0xa5f1, 0x6007, 0x002b, 0x0804, 0xa3a9,
--      0x6007, 0x002c, 0x0804, 0xa3a9, 0x080c, 0xb2c4, 0x1904, 0xa5ad,
--      0x080c, 0x2dbf, 0x1904, 0xa5ad, 0x080c, 0xa5d5, 0x1904, 0xa29a,
--      0x6106, 0x080c, 0xa5f5, 0x1120, 0x6007, 0x002e, 0x0804, 0xa3a9,
--      0x6007, 0x002f, 0x0804, 0xa3a9, 0x080c, 0x2dbf, 0x1904, 0xa5ad,
--      0x00e6, 0x00d6, 0x00c6, 0x6018, 0xa080, 0x0001, 0x200c, 0xa184,
--      0x00ff, 0xa086, 0x0006, 0x0158, 0xa184, 0xff00, 0x8007, 0xa086,
--      0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804, 0xa3ae, 0x2001,
--      0xb572, 0x2004, 0xd0e4, 0x0904, 0xa503, 0x2071, 0xbb8c, 0x7010,
--      0x6036, 0x7014, 0x603a, 0x7108, 0x720c, 0x2001, 0xb553, 0x2004,
--      0xd0a4, 0x0140, 0x6018, 0x2068, 0x6810, 0xa106, 0x1118, 0x6814,
--      0xa206, 0x01f8, 0x2001, 0xb553, 0x2004, 0xd0ac, 0x1590, 0x2069,
--      0xb500, 0x6874, 0xa206, 0x1568, 0x6870, 0xa106, 0x1550, 0x7210,
--      0x080c, 0x9c44, 0x0558, 0x080c, 0xb148, 0x0540, 0x622a, 0x6007,
--      0x0036, 0x6003, 0x0001, 0x080c, 0x6c8e, 0x00ce, 0x00de, 0x00ee,
--      0x0005, 0x7214, 0xa286, 0xffff, 0x0150, 0x080c, 0x9c44, 0x01b0,
--      0xa280, 0x0002, 0x2004, 0x7110, 0xa106, 0x1180, 0x0c08, 0x7210,
--      0x2c08, 0xa085, 0x0001, 0x080c, 0xb0ae, 0x2c10, 0x2160, 0x0130,
--      0x08b8, 0x6007, 0x0037, 0x6013, 0x1500, 0x08d8, 0x6007, 0x0037,
--      0x6013, 0x1700, 0x08b0, 0x6007, 0x0012, 0x0898, 0x080c, 0x2dbf,
--      0x1904, 0xa5ad, 0x6018, 0xa080, 0x0001, 0x2004, 0xa084, 0xff00,
--      0x8007, 0xa086, 0x0006, 0x1904, 0xa3ae, 0x00e6, 0x00d6, 0x00c6,
--      0x2001, 0xb572, 0x2004, 0xd0e4, 0x0904, 0xa56f, 0x2069, 0xb500,
--      0x2071, 0xbb8c, 0x7008, 0x6036, 0x720c, 0x623a, 0xa286, 0xffff,
--      0x1150, 0x7208, 0x00c6, 0x2c08, 0xa085, 0x0001, 0x080c, 0xb0ae,
--      0x2c10, 0x00ce, 0x0588, 0x080c, 0x9c44, 0x0570, 0x00c6, 0x0026,
--      0x2260, 0x080c, 0x9917, 0x002e, 0x00ce, 0x7118, 0xa18c, 0xff00,
--      0x810f, 0xa186, 0x0001, 0x0158, 0xa186, 0x0005, 0x0118, 0xa186,
--      0x0007, 0x1178, 0xa280, 0x0004, 0x2004, 0xa005, 0x0150, 0x0056,
--      0x7510, 0x7614, 0x080c, 0xb15f, 0x005e, 0x00ce, 0x00de, 0x00ee,
--      0x0005, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013, 0x2a00, 0x6003,
--      0x0001, 0x080c, 0x6c8e, 0x0c88, 0x6007, 0x003b, 0x602b, 0x0009,
--      0x6013, 0x1700, 0x6003, 0x0001, 0x080c, 0x6c8e, 0x0c30, 0x6007,
--      0x003b, 0x602b, 0x000b, 0x6013, 0x0000, 0x0804, 0xa4d9, 0x00e6,
--      0x0026, 0x080c, 0x530a, 0x0558, 0x080c, 0x52fa, 0x080c, 0xb33f,
--      0x1520, 0x2071, 0xb500, 0x70d4, 0xc085, 0x70d6, 0x00f6, 0x2079,
--      0x0100, 0x72a0, 0xa284, 0x00ff, 0x7072, 0x78e6, 0xa284, 0xff00,
--      0x7274, 0xa205, 0x7076, 0x78ea, 0x00fe, 0x70df, 0x0000, 0x2001,
--      0xb553, 0x2004, 0xd0a4, 0x0120, 0x2011, 0xb7f9, 0x2013, 0x07d0,
--      0xd0ac, 0x1128, 0x080c, 0x2ab8, 0x0010, 0x080c, 0xb36b, 0x002e,
--      0x00ee, 0x080c, 0x8617, 0x0804, 0xa3ad, 0x080c, 0x8617, 0x0005,
--      0x2600, 0x0002, 0xa5bb, 0xa5bb, 0xa5bb, 0xa5bb, 0xa5bb, 0xa5bd,
--      0xa5bb, 0xa5bb, 0xa5bb, 0x080c, 0x1515, 0x080c, 0xb2c4, 0x1d68,
--      0x080c, 0x2dbf, 0x1d50, 0x0089, 0x1138, 0x6007, 0x0045, 0x6003,
--      0x0001, 0x080c, 0x6cd4, 0x0005, 0x080c, 0x2c9c, 0x6007, 0x0001,
--      0x6003, 0x0001, 0x080c, 0x6cd4, 0x0005, 0x00d6, 0x0066, 0x6618,
--      0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0170,
--      0xa686, 0x0004, 0x0158, 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006,
--      0x0128, 0xa686, 0x0004, 0x0110, 0xa085, 0x0001, 0x006e, 0x00de,
--      0x0005, 0x00d6, 0x0449, 0x00de, 0x0005, 0x00d6, 0x0491, 0x11f0,
--      0x680c, 0xa08c, 0xff00, 0x6820, 0xa084, 0x00ff, 0xa115, 0x6212,
--      0x6824, 0x602a, 0xd1e4, 0x0118, 0x2009, 0x0001, 0x0060, 0xd1ec,
--      0x0168, 0x6920, 0xa18c, 0x00ff, 0x6824, 0x080c, 0x281d, 0x1130,
--      0x2110, 0x2009, 0x0000, 0x080c, 0x2ce1, 0x0018, 0xa085, 0x0001,
--      0x0008, 0xa006, 0x00de, 0x0005, 0x2069, 0xbb8d, 0x6800, 0xa082,
--      0x0010, 0x1228, 0x6013, 0x0000, 0xa085, 0x0001, 0x0008, 0xa006,
--      0x0005, 0x6013, 0x0000, 0x2069, 0xbb8c, 0x6808, 0xa084, 0xff00,
--      0xa086, 0x0800, 0x1140, 0x6800, 0xa084, 0x00ff, 0xa08e, 0x0014,
--      0x0110, 0xa08e, 0x0010, 0x0005, 0x6004, 0xa0b2, 0x0080, 0x1a0c,
--      0x1515, 0xa1b6, 0x0013, 0x1130, 0x2008, 0xa1b2, 0x0040, 0x1a04,
--      0xa73c, 0x0092, 0xa1b6, 0x0027, 0x0120, 0xa1b6, 0x0014, 0x190c,
--      0x1515, 0x2001, 0x0007, 0x080c, 0x4f2b, 0x080c, 0x7091, 0x080c,
--      0x9e17, 0x080c, 0x7174, 0x0005, 0xa69c, 0xa69e, 0xa69c, 0xa69c,
--      0xa69c, 0xa69e, 0xa6b0, 0xa735, 0xa700, 0xa735, 0xa711, 0xa735,
--      0xa6b0, 0xa735, 0xa72d, 0xa735, 0xa72d, 0xa735, 0xa735, 0xa69c,
--      0xa69c, 0xa69c, 0xa69c, 0xa69c, 0xa69c, 0xa69c, 0xa69c, 0xa69c,
--      0xa69c, 0xa69c, 0xa69e, 0xa69c, 0xa735, 0xa69c, 0xa69c, 0xa735,
--      0xa69c, 0xa732, 0xa735, 0xa69c, 0xa69c, 0xa69c, 0xa69c, 0xa735,
--      0xa735, 0xa69c, 0xa735, 0xa735, 0xa69c, 0xa6aa, 0xa69c, 0xa69c,
--      0xa69c, 0xa69c, 0xa731, 0xa735, 0xa69c, 0xa69c, 0xa735, 0xa735,
--      0xa69c, 0xa69c, 0xa69c, 0xa69c, 0x080c, 0x1515, 0x080c, 0x7091,
--      0x2001, 0xb7b6, 0x2004, 0x6016, 0x6003, 0x0002, 0x080c, 0x7174,
--      0x0804, 0xa73b, 0x2001, 0x0000, 0x080c, 0x4eec, 0x0804, 0xa735,
--      0x00f6, 0x2079, 0xb552, 0x7804, 0x00fe, 0xd0ac, 0x1904, 0xa735,
--      0x2001, 0x0000, 0x080c, 0x4eec, 0x6018, 0xa080, 0x0004, 0x2004,
--      0xa086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0xb500, 0x7898, 0x8000,
--      0x789a, 0x00fe, 0x00e0, 0x00c6, 0x6018, 0x2060, 0x6000, 0xd0f4,
--      0x1140, 0x6010, 0xa005, 0x0128, 0x00ce, 0x080c, 0x3f3f, 0x0804,
--      0xa735, 0x00ce, 0x2001, 0xb500, 0x2004, 0xa086, 0x0002, 0x1138,
--      0x00f6, 0x2079, 0xb500, 0x7898, 0x8000, 0x789a, 0x00fe, 0x2001,
--      0x0002, 0x080c, 0x4efe, 0x080c, 0x7091, 0x601f, 0x0001, 0x6003,
--      0x0001, 0x6007, 0x0002, 0x080c, 0x6cd4, 0x080c, 0x7174, 0x00c6,
--      0x6118, 0x2160, 0x2009, 0x0001, 0x080c, 0x69a9, 0x00ce, 0x04d8,
--      0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa6b4, 0xff00, 0x8637,
--      0xa686, 0x0006, 0x0550, 0xa686, 0x0004, 0x0538, 0x2001, 0x0004,
--      0x0410, 0x2001, 0xb500, 0x2004, 0xa086, 0x0003, 0x1110, 0x080c,
--      0x3f3f, 0x2001, 0x0006, 0x04a1, 0x6618, 0x00d6, 0x2668, 0x6e04,
--      0x00de, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0170, 0x2001,
--      0x0006, 0x0048, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0401,
--      0x0020, 0x0018, 0x0010, 0x080c, 0x4f2b, 0x080c, 0x7091, 0x080c,
--      0x8617, 0x080c, 0x7174, 0x0005, 0x2600, 0x0002, 0xa747, 0xa747,
--      0xa747, 0xa747, 0xa747, 0xa749, 0xa747, 0xa747, 0xa747, 0x080c,
--      0x1515, 0x080c, 0x7091, 0x080c, 0x8617, 0x080c, 0x7174, 0x0005,
--      0x0016, 0x00d6, 0x6118, 0x2168, 0x6900, 0xd184, 0x0140, 0x080c,
--      0x4efe, 0x2001, 0x0000, 0x080c, 0x4eec, 0x080c, 0x2cc2, 0x00de,
--      0x001e, 0x0005, 0x00d6, 0x6618, 0x2668, 0x6804, 0xa084, 0xff00,
--      0x8007, 0x00de, 0xa0b2, 0x000c, 0x1a0c, 0x1515, 0xa1b6, 0x0015,
--      0x1110, 0x003b, 0x0028, 0xa1b6, 0x0016, 0x190c, 0x1515, 0x006b,
--      0x0005, 0x8cd9, 0x8cd9, 0x8cd9, 0x8cd9, 0x8cd9, 0x8cd9, 0xa7d2,
--      0xa791, 0x8cd9, 0x8cd9, 0x8cd9, 0x8cd9, 0x8cd9, 0x8cd9, 0x8cd9,
--      0x8cd9, 0x8cd9, 0x8cd9, 0xa7d2, 0xa7d9, 0x8cd9, 0x8cd9, 0x8cd9,
--      0x8cd9, 0x00f6, 0x2079, 0xb552, 0x7804, 0xd0ac, 0x11e0, 0x6018,
--      0xa07d, 0x01c8, 0x7800, 0xd0f4, 0x1118, 0x7810, 0xa005, 0x1198,
--      0x2001, 0x0000, 0x080c, 0x4eec, 0x2001, 0x0002, 0x080c, 0x4efe,
--      0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x6cd4,
--      0x080c, 0x7174, 0x00e8, 0x2011, 0xbb83, 0x2204, 0x8211, 0x220c,
--      0x080c, 0x281d, 0x11a8, 0x00c6, 0x080c, 0x4faa, 0x0120, 0x00ce,
--      0x080c, 0x8617, 0x0068, 0x6010, 0x0006, 0x6014, 0x0006, 0x080c,
--      0x4c0c, 0x000e, 0x6016, 0x000e, 0x6012, 0x00ce, 0x080c, 0x8617,
--      0x00fe, 0x0005, 0x6604, 0xa6b6, 0x001e, 0x1110, 0x080c, 0x8617,
--      0x0005, 0x080c, 0x8f8f, 0x1138, 0x6003, 0x0001, 0x6007, 0x0001,
--      0x080c, 0x6cd4, 0x0010, 0x080c, 0x8617, 0x0005, 0x6004, 0xa08a,
--      0x0080, 0x1a0c, 0x1515, 0x080c, 0x7091, 0x080c, 0x9e17, 0x080c,
--      0x7174, 0x0005, 0xa182, 0x0040, 0x0002, 0xa808, 0xa808, 0xa808,
--      0xa808, 0xa80a, 0xa808, 0xa808, 0xa808, 0xa808, 0xa808, 0xa808,
--      0xa808, 0xa808, 0xa808, 0xa808, 0xa808, 0xa808, 0xa808, 0xa808,
--      0x080c, 0x1515, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0046, 0x0026,
--      0x6218, 0xa280, 0x002b, 0x2004, 0xa005, 0x0120, 0x2021, 0x0000,
--      0x080c, 0xb310, 0x6106, 0x2071, 0xbb80, 0x7444, 0xa4a4, 0xff00,
--      0x0904, 0xa86e, 0xa486, 0x2000, 0x1130, 0x2009, 0x0001, 0x2011,
--      0x0200, 0x080c, 0x6b1b, 0x080c, 0x15f8, 0x090c, 0x1515, 0x6003,
--      0x0007, 0x2d00, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000,
--      0x6c5a, 0x2c00, 0x685e, 0x6008, 0x68b2, 0x6018, 0x2078, 0x78a0,
--      0x8007, 0x7130, 0x694a, 0x0016, 0xa084, 0xff00, 0x6846, 0x684f,
--      0x0000, 0x6853, 0x0000, 0x6857, 0x0036, 0x080c, 0x5409, 0x001e,
--      0xa486, 0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xb059, 0x0804,
--      0xa8cb, 0xa486, 0x0400, 0x1130, 0x2019, 0x0002, 0x080c, 0xb00b,
--      0x0804, 0xa8cb, 0xa486, 0x0200, 0x1110, 0x080c, 0xaff0, 0xa486,
--      0x1000, 0x1110, 0x080c, 0xb03e, 0x0804, 0xa8cb, 0x2069, 0xb874,
--      0x6a00, 0xd284, 0x0904, 0xa932, 0xa284, 0x0300, 0x1904, 0xa92b,
--      0x6804, 0xa005, 0x0904, 0xa913, 0x2d78, 0x6003, 0x0007, 0x080c,
--      0x15df, 0x0904, 0xa8d2, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001,
--      0x7806, 0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b,
--      0x0000, 0x6008, 0x68b2, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0,
--      0x8007, 0x7130, 0x6986, 0x6846, 0x7928, 0x698a, 0x792c, 0x698e,
--      0x7930, 0x6992, 0x7934, 0x6996, 0x6853, 0x003d, 0x7244, 0xa294,
--      0x0003, 0xa286, 0x0002, 0x1118, 0x684f, 0x0040, 0x0040, 0xa286,
--      0x0001, 0x1118, 0x684f, 0x0080, 0x0010, 0x684f, 0x0000, 0x20a9,
--      0x000a, 0x2001, 0xbb90, 0xad90, 0x0015, 0x200c, 0x810f, 0x2112,
--      0x8000, 0x8210, 0x1f04, 0xa8bd, 0x200c, 0x6982, 0x8000, 0x200c,
--      0x697e, 0x080c, 0x5409, 0x002e, 0x004e, 0x015e, 0x00fe, 0x00ee,
--      0x00de, 0x0005, 0x2001, 0xb50e, 0x2004, 0xd084, 0x0120, 0x080c,
--      0x15f8, 0x1904, 0xa883, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007,
--      0x0041, 0x080c, 0x6c8e, 0x080c, 0x7174, 0x0c28, 0x2069, 0xbb92,
--      0x2d04, 0xa084, 0xff00, 0xa086, 0x1200, 0x11a8, 0x2069, 0xbb80,
--      0x686c, 0xa084, 0x00ff, 0x0016, 0x6110, 0xa18c, 0x0700, 0xa10d,
--      0x6112, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043, 0x080c, 0x6c8e,
--      0x080c, 0x7174, 0x0840, 0x6868, 0x602a, 0x686c, 0x602e, 0x6013,
--      0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x6c8e, 0x080c,
--      0x7174, 0x0804, 0xa8cb, 0x2001, 0xb50d, 0x2004, 0xd0ec, 0x0120,
--      0x2011, 0x8049, 0x080c, 0x3ecd, 0x6013, 0x0300, 0x0010, 0x6013,
--      0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x6c8e, 0x080c,
--      0x7174, 0x0804, 0xa8cb, 0x6013, 0x0500, 0x0c98, 0x6013, 0x0600,
--      0x0804, 0xa8e6, 0x6013, 0x0200, 0x0804, 0xa8e6, 0xa186, 0x0013,
--      0x1170, 0x6004, 0xa08a, 0x0040, 0x0a0c, 0x1515, 0xa08a, 0x0053,
--      0x1a0c, 0x1515, 0xa082, 0x0040, 0x2008, 0x0804, 0xa9c0, 0xa186,
--      0x0051, 0x0138, 0xa186, 0x0047, 0x11d8, 0x6004, 0xa086, 0x0041,
--      0x0518, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0, 0x0126, 0x2091,
--      0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x6b75, 0x002e, 0x001e,
--      0x000e, 0x012e, 0x6000, 0xa086, 0x0002, 0x1170, 0x0804, 0xaa03,
--      0xa186, 0x0027, 0x0120, 0xa186, 0x0014, 0x190c, 0x1515, 0x6004,
--      0xa082, 0x0040, 0x2008, 0x001a, 0x080c, 0x865d, 0x0005, 0xa98a,
--      0xa98c, 0xa98c, 0xa9b0, 0xa98a, 0xa98a, 0xa98a, 0xa98a, 0xa98a,
--      0xa98a, 0xa98a, 0xa98a, 0xa98a, 0xa98a, 0xa98a, 0xa98a, 0xa98a,
--      0xa98a, 0xa98a, 0x080c, 0x1515, 0x080c, 0x7091, 0x080c, 0x7174,
--      0x0036, 0x00d6, 0x6010, 0xa06d, 0x01c0, 0xad84, 0xf000, 0x01a8,
--      0x6003, 0x0002, 0x6018, 0x2004, 0xd0bc, 0x1178, 0x2019, 0x0004,
--      0x080c, 0xb08d, 0x6013, 0x0000, 0x6014, 0xa005, 0x1120, 0x2001,
--      0xb7b7, 0x2004, 0x6016, 0x6003, 0x0007, 0x00de, 0x003e, 0x0005,
--      0x00d6, 0x080c, 0x7091, 0x080c, 0x7174, 0x080c, 0x9c54, 0x0120,
--      0x6010, 0x2068, 0x080c, 0x160f, 0x080c, 0x9e17, 0x00de, 0x0005,
--      0x0002, 0xa9d4, 0xa9f1, 0xa9dd, 0xa9fd, 0xa9d4, 0xa9d4, 0xa9d4,
--      0xa9d4, 0xa9d4, 0xa9d4, 0xa9d4, 0xa9d4, 0xa9d4, 0xa9d4, 0xa9d4,
--      0xa9d4, 0xa9d4, 0xa9d4, 0xa9d4, 0x080c, 0x1515, 0x6010, 0xa088,
--      0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x080c, 0x7091, 0x6010,
--      0xa080, 0x0013, 0x2004, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009,
--      0x0043, 0x080c, 0x8646, 0x0010, 0x6003, 0x0002, 0x080c, 0x7174,
--      0x0005, 0x080c, 0x7091, 0x080c, 0xb2cb, 0x1120, 0x080c, 0x6af0,
--      0x080c, 0x8617, 0x080c, 0x7174, 0x0005, 0x080c, 0x7091, 0x2009,
--      0x0041, 0x0804, 0xab4c, 0xa182, 0x0040, 0x0002, 0xaa19, 0xaa1b,
--      0xaa19, 0xaa19, 0xaa19, 0xaa19, 0xaa19, 0xaa1c, 0xaa19, 0xaa19,
--      0xaa19, 0xaa19, 0xaa19, 0xaa19, 0xaa19, 0xaa19, 0xaa19, 0xaa27,
--      0xaa19, 0x080c, 0x1515, 0x0005, 0x6003, 0x0004, 0x6110, 0x20e1,
--      0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x185e, 0x0005, 0x00d6,
--      0x080c, 0x6af0, 0x00de, 0x080c, 0xb32e, 0x080c, 0x8617, 0x0005,
--      0xa182, 0x0040, 0x0002, 0xaa46, 0xaa46, 0xaa46, 0xaa46, 0xaa46,
--      0xaa46, 0xaa46, 0xaa48, 0xaa46, 0xaa4b, 0xaa84, 0xaa46, 0xaa46,
--      0xaa46, 0xaa46, 0xaa84, 0xaa46, 0xaa46, 0xaa46, 0x080c, 0x1515,
--      0x080c, 0x865d, 0x0005, 0x2001, 0xb572, 0x2004, 0xd0e4, 0x0158,
--      0x2001, 0x0100, 0x2004, 0xa082, 0x0005, 0x0228, 0x2001, 0x011f,
--      0x2004, 0x6036, 0x0010, 0x6037, 0x0000, 0x080c, 0x7127, 0x080c,
--      0x7231, 0x6010, 0x00d6, 0x2068, 0x684c, 0xd0fc, 0x0150, 0xa08c,
--      0x0003, 0xa18e, 0x0002, 0x0168, 0x2009, 0x0041, 0x00de, 0x0804,
--      0xab4c, 0x6003, 0x0007, 0x6017, 0x0000, 0x080c, 0x6af0, 0x00de,
--      0x0005, 0x080c, 0xb2cb, 0x0110, 0x00de, 0x0005, 0x080c, 0x6af0,
--      0x080c, 0x8617, 0x00de, 0x0ca0, 0x0036, 0x080c, 0x7127, 0x080c,
--      0x7231, 0x6010, 0x00d6, 0x2068, 0x6018, 0x2004, 0xd0bc, 0x0188,
--      0x684c, 0xa084, 0x0003, 0xa086, 0x0002, 0x0140, 0x687c, 0x632c,
--      0xa31a, 0x632e, 0x6880, 0x6328, 0xa31b, 0x632a, 0x6003, 0x0002,
--      0x0080, 0x2019, 0x0004, 0x080c, 0xb08d, 0x6014, 0xa005, 0x1128,
--      0x2001, 0xb7b7, 0x2004, 0x8003, 0x6016, 0x6013, 0x0000, 0x6003,
--      0x0007, 0x00de, 0x003e, 0x0005, 0xa186, 0x0013, 0x1150, 0x6004,
--      0xa086, 0x0042, 0x190c, 0x1515, 0x080c, 0x7091, 0x080c, 0x7174,
--      0x0005, 0xa186, 0x0027, 0x0118, 0xa186, 0x0014, 0x1180, 0x6004,
--      0xa086, 0x0042, 0x190c, 0x1515, 0x2001, 0x0007, 0x080c, 0x4f2b,
--      0x080c, 0x7091, 0x080c, 0x9e17, 0x080c, 0x7174, 0x0005, 0xa182,
--      0x0040, 0x0002, 0xaaed, 0xaaed, 0xaaed, 0xaaed, 0xaaed, 0xaaed,
--      0xaaed, 0xaaef, 0xaafb, 0xaaed, 0xaaed, 0xaaed, 0xaaed, 0xaaed,
--      0xaaed, 0xaaed, 0xaaed, 0xaaed, 0xaaed, 0x080c, 0x1515, 0x0036,
--      0x0046, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x185e,
--      0x004e, 0x003e, 0x0005, 0x6010, 0x00d6, 0x2068, 0x6810, 0x6a14,
--      0x0006, 0x0046, 0x0056, 0x6c7c, 0xa422, 0x6d80, 0x2200, 0xa52b,
--      0x602c, 0xa420, 0x642e, 0x6028, 0xa529, 0x652a, 0x005e, 0x004e,
--      0x000e, 0xa20d, 0x1178, 0x684c, 0xd0fc, 0x0120, 0x2009, 0x0041,
--      0x00de, 0x0490, 0x6003, 0x0007, 0x6017, 0x0000, 0x080c, 0x6af0,
--      0x00de, 0x0005, 0x0006, 0x00f6, 0x2c78, 0x080c, 0x5306, 0x00fe,
--      0x000e, 0x0120, 0x6003, 0x0002, 0x00de, 0x0005, 0x2009, 0xb50d,
--      0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006,
--      0x0021, 0x080c, 0x6af2, 0x00de, 0x0005, 0xd2fc, 0x0140, 0x8002,
--      0x8000, 0x8212, 0xa291, 0x0000, 0x2009, 0x0009, 0x0010, 0x2009,
--      0x0015, 0x6a6a, 0x6866, 0x0005, 0xa182, 0x0040, 0x0208, 0x0062,
--      0xa186, 0x0013, 0x0120, 0xa186, 0x0014, 0x190c, 0x1515, 0x6020,
--      0xd0dc, 0x090c, 0x1515, 0x0005, 0xab6f, 0xab76, 0xab82, 0xab8e,
--      0xab6f, 0xab6f, 0xab6f, 0xab9d, 0xab6f, 0xab71, 0xab71, 0xab6f,
--      0xab6f, 0xab6f, 0xab6f, 0xab71, 0xab6f, 0xab71, 0xab6f, 0x080c,
--      0x1515, 0x6020, 0xd0dc, 0x090c, 0x1515, 0x0005, 0x6003, 0x0001,
--      0x6106, 0x080c, 0x6c8e, 0x0126, 0x2091, 0x8000, 0x080c, 0x7174,
--      0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x6c8e, 0x0126,
--      0x2091, 0x8000, 0x080c, 0x7174, 0x012e, 0x0005, 0x6003, 0x0003,
--      0x6106, 0x2c10, 0x080c, 0x1fa9, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x6cf1, 0x080c, 0x7231, 0x012e, 0x0005, 0xa016, 0x080c, 0x185e,
--      0x0005, 0x0126, 0x2091, 0x8000, 0x0036, 0x00d6, 0xa182, 0x0040,
--      0x0023, 0x00de, 0x003e, 0x012e, 0x0005, 0xabbd, 0xabbf, 0xabd1,
--      0xabec, 0xabbd, 0xabbd, 0xabbd, 0xac01, 0xabbd, 0xabbd, 0xabbd,
--      0xabbd, 0xabbd, 0xabbd, 0xabbd, 0xabbd, 0x080c, 0x1515, 0x6010,
--      0x2068, 0x684c, 0xd0fc, 0x01f8, 0xa09c, 0x0003, 0xa39e, 0x0003,
--      0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, 0x6c8e, 0x080c, 0x7174,
--      0x0498, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0168, 0xa09c, 0x0003,
--      0xa39e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x080c, 0x6c8e,
--      0x080c, 0x7174, 0x0408, 0x6013, 0x0000, 0x6017, 0x0000, 0x2019,
--      0x0004, 0x080c, 0xb08d, 0x00c0, 0x6010, 0x2068, 0x684c, 0xd0fc,
--      0x0d90, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0d68, 0x6003, 0x0003,
--      0x6106, 0x2c10, 0x080c, 0x1fa9, 0x080c, 0x6cf1, 0x080c, 0x7231,
--      0x0018, 0xa016, 0x080c, 0x185e, 0x0005, 0x080c, 0x7091, 0x6110,
--      0x81ff, 0x0158, 0x00d6, 0x2168, 0x080c, 0xb374, 0x0036, 0x2019,
--      0x0029, 0x080c, 0xb08d, 0x003e, 0x00de, 0x080c, 0x9e17, 0x080c,
--      0x7174, 0x0005, 0x080c, 0x7127, 0x6110, 0x81ff, 0x0158, 0x00d6,
--      0x2168, 0x080c, 0xb374, 0x0036, 0x2019, 0x0029, 0x080c, 0xb08d,
--      0x003e, 0x00de, 0x080c, 0x9e17, 0x080c, 0x7231, 0x0005, 0xa182,
--      0x0085, 0x0002, 0xac3b, 0xac39, 0xac39, 0xac47, 0xac39, 0xac39,
--      0xac39, 0x080c, 0x1515, 0x6003, 0x000b, 0x6106, 0x080c, 0x6c8e,
--      0x0126, 0x2091, 0x8000, 0x080c, 0x7174, 0x012e, 0x0005, 0x0026,
--      0x00e6, 0x080c, 0xb2c4, 0x0118, 0x080c, 0x8617, 0x00c8, 0x2071,
--      0xbb80, 0x7224, 0x6212, 0x7220, 0x080c, 0xaf3b, 0x0118, 0x6007,
--      0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, 0x1110,
--      0x6007, 0x0086, 0x6003, 0x0001, 0x080c, 0x6c8e, 0x080c, 0x7174,
--      0x00ee, 0x002e, 0x0005, 0xa186, 0x0013, 0x1160, 0x6004, 0xa08a,
--      0x0085, 0x0a0c, 0x1515, 0xa08a, 0x008c, 0x1a0c, 0x1515, 0xa082,
--      0x0085, 0x00a2, 0xa186, 0x0027, 0x0130, 0xa186, 0x0014, 0x0118,
--      0x080c, 0x865d, 0x0050, 0x2001, 0x0007, 0x080c, 0x4f2b, 0x080c,
--      0x7091, 0x080c, 0x9e17, 0x080c, 0x7174, 0x0005, 0xac95, 0xac97,
--      0xac97, 0xac95, 0xac95, 0xac95, 0xac95, 0x080c, 0x1515, 0x080c,
--      0x7091, 0x080c, 0x9e17, 0x080c, 0x7174, 0x0005, 0xa182, 0x0085,
--      0x0a0c, 0x1515, 0xa182, 0x008c, 0x1a0c, 0x1515, 0xa182, 0x0085,
--      0x0002, 0xacb0, 0xacb0, 0xacb0, 0xacb2, 0xacb0, 0xacb0, 0xacb0,
--      0x080c, 0x1515, 0x0005, 0xa186, 0x0013, 0x0148, 0xa186, 0x0014,
--      0x0130, 0xa186, 0x0027, 0x0118, 0x080c, 0x865d, 0x0030, 0x080c,
--      0x7091, 0x080c, 0x9e17, 0x080c, 0x7174, 0x0005, 0x0036, 0x080c,
--      0xb32e, 0x603f, 0x0000, 0x2019, 0x000b, 0x0031, 0x601f, 0x0006,
--      0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000,
--      0x0086, 0x2c40, 0x0096, 0x2049, 0x0000, 0x080c, 0x8131, 0x009e,
--      0x008e, 0x1578, 0x0076, 0x2c38, 0x080c, 0x81d0, 0x007e, 0x1548,
--      0x6000, 0xa086, 0x0000, 0x0528, 0x601c, 0xa086, 0x0007, 0x0508,
--      0x00d6, 0x6000, 0xa086, 0x0004, 0x1150, 0x080c, 0xb32e, 0x601f,
--      0x0007, 0x2001, 0xb7b6, 0x2004, 0x6016, 0x080c, 0x194d, 0x6010,
--      0x2068, 0x080c, 0x9c54, 0x0110, 0x080c, 0xb08d, 0x00de, 0x6013,
--      0x0000, 0x080c, 0xb32e, 0x601f, 0x0007, 0x2001, 0xb7b6, 0x2004,
--      0x6016, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x0036, 0x0156,
--      0x2079, 0xbb80, 0x7938, 0x783c, 0x080c, 0x281d, 0x15b0, 0x0016,
--      0x00c6, 0x080c, 0x4faa, 0x1578, 0x001e, 0x002e, 0x0026, 0x0016,
--      0x2019, 0x0029, 0x080c, 0x8293, 0x080c, 0x6df6, 0x0076, 0x2039,
--      0x0000, 0x080c, 0x6d03, 0x007e, 0x001e, 0x0076, 0x2039, 0x0000,
--      0x080c, 0xae76, 0x007e, 0x080c, 0x51ab, 0x0026, 0x6204, 0xa294,
--      0xff00, 0x8217, 0xa286, 0x0006, 0x0118, 0xa286, 0x0004, 0x1118,
--      0x62a0, 0x080c, 0x2d55, 0x002e, 0x001e, 0x080c, 0x4c0c, 0x6612,
--      0x6516, 0xa006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00ce,
--      0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x2009, 0xb521,
--      0x2104, 0xa086, 0x0074, 0x1904, 0xadaf, 0x2069, 0xbb8e, 0x690c,
--      0xa182, 0x0100, 0x06c0, 0x6908, 0xa184, 0x8000, 0x05e8, 0x2001,
--      0xb79e, 0x2004, 0xa005, 0x1160, 0x6018, 0x2070, 0x7010, 0xa084,
--      0x00ff, 0x0118, 0x7000, 0xd0f4, 0x0118, 0xa184, 0x0800, 0x0560,
--      0x6910, 0xa18a, 0x0001, 0x0610, 0x6914, 0x2069, 0xbbae, 0x6904,
--      0x81ff, 0x1198, 0x690c, 0xa182, 0x0100, 0x02a8, 0x6908, 0x81ff,
--      0x1178, 0x6910, 0xa18a, 0x0001, 0x0288, 0x6918, 0xa18a, 0x0001,
--      0x0298, 0x00d0, 0x6013, 0x0100, 0x00a0, 0x6013, 0x0300, 0x0088,
--      0x6013, 0x0500, 0x0070, 0x6013, 0x0700, 0x0058, 0x6013, 0x0900,
--      0x0040, 0x6013, 0x0b00, 0x0028, 0x6013, 0x0f00, 0x0010, 0x6013,
--      0x2d00, 0xa085, 0x0001, 0x0008, 0xa006, 0x001e, 0x00ee, 0x00de,
--      0x00ce, 0x0005, 0x00c6, 0x00d6, 0x0026, 0x0036, 0x0156, 0x6218,
--      0x2268, 0x6b04, 0xa394, 0x00ff, 0xa286, 0x0006, 0x0190, 0xa286,
--      0x0004, 0x0178, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0148,
--      0xa286, 0x0004, 0x0130, 0x00c6, 0x2d60, 0x080c, 0x4fb9, 0x00ce,
--      0x04c0, 0x2011, 0xbb96, 0xad98, 0x000a, 0x20a9, 0x0004, 0x080c,
--      0x90d4, 0x1580, 0x2011, 0xbb9a, 0xad98, 0x0006, 0x20a9, 0x0004,
--      0x080c, 0x90d4, 0x1538, 0x0046, 0x0016, 0x6aa0, 0xa294, 0x00ff,
--      0x8227, 0xa006, 0x2009, 0xb553, 0x210c, 0xd1a4, 0x0138, 0x2009,
--      0x0029, 0x080c, 0xb0dc, 0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029,
--      0x080c, 0x6df6, 0x0076, 0x2039, 0x0000, 0x080c, 0x6d03, 0x2c08,
--      0x080c, 0xae76, 0x007e, 0x2001, 0x0007, 0x080c, 0x4f2b, 0x001e,
--      0x004e, 0xa006, 0x015e, 0x003e, 0x002e, 0x00de, 0x00ce, 0x0005,
--      0x00d6, 0x2069, 0xbb8e, 0x6800, 0xa086, 0x0800, 0x0118, 0x6013,
--      0x0000, 0x0008, 0xa006, 0x00de, 0x0005, 0x00c6, 0x00f6, 0x0016,
--      0x0026, 0x0036, 0x0156, 0x2079, 0xbb8c, 0x7930, 0x7834, 0x080c,
--      0x281d, 0x11a0, 0x080c, 0x4faa, 0x1188, 0x2011, 0xbb90, 0xac98,
--      0x000a, 0x20a9, 0x0004, 0x080c, 0x90d4, 0x1140, 0x2011, 0xbb94,
--      0xac98, 0x0006, 0x20a9, 0x0004, 0x080c, 0x90d4, 0x015e, 0x003e,
--      0x002e, 0x001e, 0x00fe, 0x00ce, 0x0005, 0x00c6, 0x0006, 0x0016,
--      0x0026, 0x0036, 0x0156, 0x2011, 0xbb83, 0x2204, 0x8211, 0x220c,
--      0x080c, 0x281d, 0x11a0, 0x080c, 0x4faa, 0x1188, 0x2011, 0xbb96,
--      0xac98, 0x000a, 0x20a9, 0x0004, 0x080c, 0x90d4, 0x1140, 0x2011,
--      0xbb9a, 0xac98, 0x0006, 0x20a9, 0x0004, 0x080c, 0x90d4, 0x015e,
--      0x003e, 0x002e, 0x001e, 0x000e, 0x00ce, 0x0005, 0x00e6, 0x00c6,
--      0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126, 0x2091,
--      0x8000, 0x2740, 0x2029, 0xb7e9, 0x252c, 0x2021, 0xb7ef, 0x2424,
--      0x2061, 0xbd00, 0x2071, 0xb500, 0x7648, 0x7068, 0x81ff, 0x0150,
--      0x0006, 0xa186, 0xb8f4, 0x000e, 0x0128, 0x8001, 0xa602, 0x1a04,
--      0xaef7, 0x0018, 0xa606, 0x0904, 0xaef7, 0x2100, 0xac06, 0x0904,
--      0xaeee, 0x080c, 0xb104, 0x0904, 0xaeee, 0x671c, 0xa786, 0x0001,
--      0x0904, 0xaf12, 0xa786, 0x0004, 0x0904, 0xaf12, 0xa786, 0x0007,
--      0x05e8, 0x2500, 0xac06, 0x05d0, 0x2400, 0xac06, 0x05b8, 0x080c,
--      0xb114, 0x15a0, 0x88ff, 0x0118, 0x6050, 0xa906, 0x1578, 0x00d6,
--      0x6000, 0xa086, 0x0004, 0x1120, 0x0016, 0x080c, 0x194d, 0x001e,
--      0xa786, 0x0008, 0x1148, 0x080c, 0x9e52, 0x1130, 0x080c, 0x8c13,
--      0x00de, 0x080c, 0x9e17, 0x00d0, 0x6010, 0x2068, 0x080c, 0x9c54,
--      0x0190, 0xa786, 0x0003, 0x1528, 0x6837, 0x0103, 0x6b4a, 0x6847,
--      0x0000, 0x080c, 0xb374, 0x0016, 0x080c, 0x9ec6, 0x080c, 0x5409,
--      0x001e, 0x080c, 0x9e0b, 0x00de, 0x080c, 0x9e17, 0xace0, 0x0018,
--      0x2001, 0xb517, 0x2004, 0xac02, 0x1210, 0x0804, 0xae8a, 0x012e,
--      0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee,
--      0x0005, 0xa786, 0x0006, 0x1150, 0xa386, 0x0005, 0x0128, 0x080c,
--      0xb374, 0x080c, 0xb08d, 0x08f8, 0x00de, 0x0c00, 0xa786, 0x000a,
--      0x0968, 0x0850, 0x080c, 0xb114, 0x19c8, 0x81ff, 0x09b8, 0xa180,
--      0x0001, 0x2004, 0xa086, 0x0018, 0x0130, 0xa180, 0x0001, 0x2004,
--      0xa086, 0x002d, 0x1958, 0x6000, 0xa086, 0x0002, 0x1938, 0x080c,
--      0x9e41, 0x0130, 0x080c, 0x9e52, 0x1908, 0x080c, 0x8c13, 0x0038,
--      0x080c, 0x2cc2, 0x080c, 0x9e52, 0x1110, 0x080c, 0x8c13, 0x080c,
--      0x9e17, 0x0804, 0xaeee, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170,
--      0xa006, 0x080c, 0xb0ae, 0x001e, 0x0120, 0x601c, 0xa084, 0x000f,
--      0x001b, 0x00ee, 0x00ce, 0x0005, 0xaf54, 0xaf54, 0xaf54, 0xaf54,
--      0xaf54, 0xaf54, 0xaf56, 0xaf54, 0xa006, 0x0005, 0x0046, 0x0016,
--      0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00,
--      0x2009, 0x0020, 0x080c, 0xb0dc, 0x001e, 0x004e, 0x0036, 0x2019,
--      0x0002, 0x080c, 0xacd4, 0x003e, 0xa085, 0x0001, 0x0005, 0x2001,
--      0x0001, 0x080c, 0x4eec, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9,
--      0x0004, 0x2019, 0xb505, 0x2011, 0xbb96, 0x080c, 0x90d4, 0x003e,
--      0x002e, 0x001e, 0x015e, 0xa005, 0x0005, 0x00f6, 0x00e6, 0x00c6,
--      0x0086, 0x0076, 0x0066, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740,
--      0x2061, 0xbd00, 0x2079, 0x0001, 0x8fff, 0x0904, 0xafe3, 0x2071,
--      0xb500, 0x7648, 0x7068, 0x8001, 0xa602, 0x1a04, 0xafe3, 0x88ff,
--      0x0128, 0x2800, 0xac06, 0x15b0, 0x2079, 0x0000, 0x080c, 0xb104,
--      0x0588, 0x2400, 0xac06, 0x0570, 0x671c, 0xa786, 0x0006, 0x1550,
--      0xa786, 0x0007, 0x0538, 0x88ff, 0x1140, 0x6018, 0xa206, 0x1510,
--      0x85ff, 0x0118, 0x6050, 0xa106, 0x11e8, 0x00d6, 0x6000, 0xa086,
--      0x0004, 0x1150, 0x080c, 0xb32e, 0x601f, 0x0007, 0x2001, 0xb7b6,
--      0x2004, 0x6016, 0x080c, 0x194d, 0x6010, 0x2068, 0x080c, 0x9c54,
--      0x0120, 0x0046, 0x080c, 0xb08d, 0x004e, 0x00de, 0x080c, 0x9e17,
--      0x88ff, 0x1198, 0xace0, 0x0018, 0x2001, 0xb517, 0x2004, 0xac02,
--      0x1210, 0x0804, 0xaf94, 0xa006, 0x012e, 0x002e, 0x006e, 0x007e,
--      0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0xa8c5, 0x0001, 0x0ca0,
--      0x0076, 0x0056, 0x0086, 0x2041, 0x0000, 0x2029, 0x0001, 0x2c20,
--      0x2019, 0x0002, 0x6218, 0x0096, 0x2049, 0x0000, 0x080c, 0x8131,
--      0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x81d0, 0x080c, 0xaf85,
--      0x005e, 0x007e, 0x0005, 0x0026, 0x0046, 0x0056, 0x0076, 0x00c6,
--      0x0156, 0x2c20, 0x2128, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016,
--      0x0036, 0x080c, 0x4faa, 0x11b0, 0x2c10, 0x0056, 0x0086, 0x2041,
--      0x0000, 0x2508, 0x2029, 0x0001, 0x0096, 0x2049, 0x0000, 0x080c,
--      0x8131, 0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x81d0, 0x080c,
--      0xaf85, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xb017, 0x015e,
--      0x00ce, 0x007e, 0x005e, 0x004e, 0x002e, 0x0005, 0x0076, 0x0056,
--      0x6218, 0x0086, 0x2041, 0x0000, 0x2029, 0x0001, 0x2019, 0x0048,
--      0x0096, 0x2049, 0x0000, 0x080c, 0x8131, 0x009e, 0x008e, 0x2039,
--      0x0000, 0x080c, 0x81d0, 0x2c20, 0x080c, 0xaf85, 0x005e, 0x007e,
--      0x0005, 0x0026, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20,
--      0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x0036, 0x080c, 0x4faa,
--      0x11c0, 0x2c10, 0x0086, 0x2041, 0x0000, 0x2828, 0x0046, 0x2021,
--      0x0001, 0x080c, 0xb310, 0x004e, 0x0096, 0x2049, 0x0000, 0x080c,
--      0x8131, 0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x81d0, 0x080c,
--      0xaf85, 0x003e, 0x001e, 0x8108, 0x1f04, 0xb064, 0x015e, 0x00ce,
--      0x007e, 0x005e, 0x004e, 0x002e, 0x0005, 0x0016, 0x00f6, 0x3800,
--      0xd08c, 0x0130, 0xad82, 0x1000, 0x02b0, 0xad82, 0xb500, 0x0230,
--      0xad82, 0xed00, 0x0280, 0xad82, 0xffff, 0x1268, 0x6800, 0xa07d,
--      0x0138, 0x6803, 0x0000, 0x6b52, 0x080c, 0x5409, 0x2f68, 0x0cb0,
--      0x6b52, 0x080c, 0x5409, 0x00fe, 0x001e, 0x0005, 0x00e6, 0x0046,
--      0x0036, 0x2061, 0xbd00, 0xa005, 0x1138, 0x2071, 0xb500, 0x7448,
--      0x7068, 0x8001, 0xa402, 0x12d8, 0x2100, 0xac06, 0x0168, 0x6000,
--      0xa086, 0x0000, 0x0148, 0x6008, 0xa206, 0x1130, 0x6018, 0xa1a0,
--      0x0006, 0x2424, 0xa406, 0x0140, 0xace0, 0x0018, 0x2001, 0xb517,
--      0x2004, 0xac02, 0x1220, 0x0c40, 0xa085, 0x0001, 0x0008, 0xa006,
--      0x003e, 0x004e, 0x00ee, 0x0005, 0x00d6, 0x0006, 0x080c, 0x15f8,
--      0x000e, 0x090c, 0x1515, 0x6837, 0x010d, 0x685e, 0x0026, 0x2010,
--      0x080c, 0x9c44, 0x2001, 0x0000, 0x0120, 0x2200, 0xa080, 0x0014,
--      0x2004, 0x002e, 0x684a, 0x6956, 0x6c46, 0x684f, 0x0000, 0x2001,
--      0xb7be, 0x2004, 0x6852, 0xa006, 0x68b2, 0x6802, 0x683a, 0x685a,
--      0x080c, 0x5409, 0x00de, 0x0005, 0x6700, 0xa786, 0x0000, 0x0158,
--      0xa786, 0x0001, 0x0140, 0xa786, 0x000a, 0x0128, 0xa786, 0x0009,
--      0x0110, 0xa085, 0x0001, 0x0005, 0x00e6, 0x6018, 0x2070, 0x70a0,
--      0xa206, 0x00ee, 0x0005, 0x0016, 0x6004, 0xa08e, 0x001e, 0x11a0,
--      0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105, 0x6032, 0x6007, 0x0085,
--      0x6003, 0x000b, 0x601f, 0x0005, 0x2001, 0xb7b7, 0x2004, 0x6016,
--      0x080c, 0x6c8e, 0x080c, 0x7174, 0x001e, 0x0005, 0xe000, 0xe000,
--      0x0005, 0x6020, 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0x9f2f,
--      0x0030, 0x080c, 0xb32e, 0x080c, 0x6af0, 0x080c, 0x8617, 0x0005,
--      0xa280, 0x0007, 0x2004, 0xa084, 0x000f, 0x0002, 0xb157, 0xb157,
--      0xb157, 0xb15c, 0xb157, 0xb159, 0xb159, 0xb157, 0xb159, 0xa006,
--      0x0005, 0x00c6, 0x2260, 0x00ce, 0xa085, 0x0001, 0x0005, 0xa280,
--      0x0007, 0x2004, 0xa084, 0x000f, 0x0002, 0xb16e, 0xb16e, 0xb16e,
--      0xb16e, 0xb16e, 0xb16e, 0xb179, 0xb16e, 0xb16e, 0x6007, 0x003b,
--      0x602b, 0x0009, 0x6013, 0x2a00, 0x6003, 0x0001, 0x080c, 0x6c8e,
--      0x0005, 0x00c6, 0x2260, 0x080c, 0xb32e, 0x603f, 0x0000, 0x6020,
--      0xc0f4, 0xc0cc, 0x6022, 0x6037, 0x0000, 0x00ce, 0x00d6, 0x2268,
--      0xa186, 0x0007, 0x1904, 0xb1d4, 0x6810, 0xa005, 0x0138, 0xa080,
--      0x0013, 0x2004, 0xd0fc, 0x1110, 0x00de, 0x08c0, 0x6007, 0x003a,
--      0x6003, 0x0001, 0x080c, 0x6c8e, 0x080c, 0x7174, 0x00c6, 0x2d60,
--      0x6100, 0xa186, 0x0002, 0x1904, 0xb25d, 0x6010, 0xa005, 0x1138,
--      0x6000, 0xa086, 0x0007, 0x190c, 0x1515, 0x0804, 0xb25d, 0xa08c,
--      0xf000, 0x1130, 0x0028, 0x2068, 0x6800, 0xa005, 0x1de0, 0x2d00,
--      0xa080, 0x0013, 0x2004, 0xa084, 0x0003, 0xa086, 0x0002, 0x1180,
--      0x6010, 0x2068, 0x684c, 0xc0dc, 0xc0f4, 0x684e, 0x6850, 0xc0f4,
--      0xc0fc, 0x6852, 0x2009, 0x0043, 0x080c, 0xab4c, 0x0804, 0xb25d,
--      0x2009, 0x0041, 0x0804, 0xb257, 0xa186, 0x0005, 0x15f0, 0x6810,
--      0xa080, 0x0013, 0x2004, 0xd0bc, 0x1118, 0x00de, 0x0804, 0xb16e,
--      0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x1515, 0x0804, 0xb18c, 0x6007,
--      0x003a, 0x6003, 0x0001, 0x080c, 0x6c8e, 0x080c, 0x7174, 0x00c6,
--      0x2d60, 0x6100, 0xa186, 0x0002, 0x0120, 0xa186, 0x0004, 0x1904,
--      0xb25d, 0x2071, 0xb823, 0x7000, 0xa086, 0x0003, 0x1128, 0x7004,
--      0xac06, 0x1110, 0x7003, 0x0000, 0x6810, 0xa080, 0x0013, 0x200c,
--      0xc1f4, 0xc1dc, 0x2102, 0x8000, 0x200c, 0xc1f4, 0xc1fc, 0xc1bc,
--      0x2102, 0x2009, 0x0042, 0x0804, 0xb257, 0x0036, 0x00d6, 0x00d6,
--      0x080c, 0x15f8, 0x003e, 0x090c, 0x1515, 0x6837, 0x010d, 0x6803,
--      0x0000, 0x683b, 0x0000, 0x685b, 0x0000, 0x6b5e, 0x6857, 0x0045,
--      0x2c00, 0x6862, 0x6034, 0x6872, 0x2360, 0x6020, 0xc0dd, 0x6022,
--      0x6018, 0xa080, 0x0028, 0x2004, 0xa084, 0x00ff, 0x8007, 0x6350,
--      0x6b4a, 0x6846, 0x684f, 0x0000, 0x6853, 0x0000, 0x6d6a, 0x6e66,
--      0x686f, 0x0001, 0x080c, 0x5409, 0x2019, 0x0045, 0x6008, 0x2068,
--      0x080c, 0xacd4, 0x2d00, 0x600a, 0x601f, 0x0006, 0x6003, 0x0007,
--      0x6017, 0x0000, 0x603f, 0x0000, 0x00de, 0x003e, 0x0038, 0x603f,
--      0x0000, 0x6003, 0x0007, 0x080c, 0xab4c, 0x00ce, 0x00de, 0x0005,
--      0xa186, 0x0013, 0x1128, 0x6004, 0xa082, 0x0085, 0x2008, 0x00c2,
--      0xa186, 0x0027, 0x1178, 0x080c, 0x7091, 0x0036, 0x00d6, 0x6010,
--      0x2068, 0x2019, 0x0004, 0x080c, 0xb08d, 0x00de, 0x003e, 0x080c,
--      0x7174, 0x0005, 0xa186, 0x0014, 0x0d70, 0x080c, 0x865d, 0x0005,
--      0xb289, 0xb287, 0xb287, 0xb287, 0xb287, 0xb287, 0xb289, 0x080c,
--      0x1515, 0x080c, 0x7091, 0x6003, 0x000c, 0x080c, 0x7174, 0x0005,
--      0xa182, 0x008c, 0x1220, 0xa182, 0x0085, 0x0208, 0x001a, 0x080c,
--      0x865d, 0x0005, 0xb2a1, 0xb2a1, 0xb2a1, 0xb2a1, 0xb2a3, 0xb2c1,
--      0xb2a1, 0x080c, 0x1515, 0x00d6, 0x2c68, 0x080c, 0x85c1, 0x01a0,
--      0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0xbb8e, 0x210c, 0x6136,
--      0x2009, 0xbb8f, 0x210c, 0x613a, 0x600b, 0xffff, 0x6918, 0x611a,
--      0x601f, 0x0004, 0x080c, 0x6c8e, 0x2d60, 0x080c, 0x8617, 0x00de,
--      0x0005, 0x080c, 0x8617, 0x0005, 0x00e6, 0x6018, 0x2070, 0x7000,
--      0xd0ec, 0x00ee, 0x0005, 0x6010, 0xa08c, 0xf000, 0x0904, 0xb30f,
--      0xa080, 0x0013, 0x200c, 0xd1ec, 0x05d0, 0x2001, 0xb572, 0x2004,
--      0xd0ec, 0x05a8, 0x6003, 0x0002, 0x6020, 0xc0e5, 0x6022, 0xd1ac,
--      0x0180, 0x00f6, 0x2c78, 0x080c, 0x5302, 0x00fe, 0x0150, 0x2001,
--      0xb7b8, 0x2004, 0x603e, 0x2009, 0xb572, 0x210c, 0xd1f4, 0x11e8,
--      0x0080, 0x2009, 0xb572, 0x210c, 0xd1f4, 0x0128, 0x6020, 0xc0e4,
--      0x6022, 0xa006, 0x00a0, 0x2001, 0xb7b8, 0x200c, 0x8103, 0xa100,
--      0x603e, 0x6018, 0xa088, 0x002b, 0x2104, 0xa005, 0x0118, 0xa088,
--      0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000, 0xa085, 0x0001, 0x0005,
--      0x0016, 0x00c6, 0x00e6, 0x6150, 0xa2f0, 0x002b, 0x2e04, 0x2060,
--      0x8cff, 0x0180, 0x84ff, 0x1118, 0x6050, 0xa106, 0x1138, 0x600c,
--      0x2072, 0x080c, 0x6af0, 0x080c, 0x8617, 0x0010, 0xacf0, 0x0003,
--      0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x6018,
--      0xa0e8, 0x002b, 0x2d04, 0xa005, 0x0140, 0xac06, 0x0120, 0x2d04,
--      0xa0e8, 0x0003, 0x0cb8, 0x600c, 0x206a, 0x00de, 0x0005, 0x0026,
--      0x0036, 0x0156, 0x2011, 0xb528, 0x2204, 0xa084, 0x00ff, 0x2019,
--      0xbb8e, 0x2334, 0xa636, 0x11d8, 0x8318, 0x2334, 0x2204, 0xa084,
--      0xff00, 0xa636, 0x11a0, 0x2011, 0xbb90, 0x6018, 0xa098, 0x000a,
--      0x20a9, 0x0004, 0x080c, 0x90d4, 0x1150, 0x2011, 0xbb94, 0x6018,
--      0xa098, 0x0006, 0x20a9, 0x0004, 0x080c, 0x90d4, 0x1100, 0x015e,
--      0x003e, 0x002e, 0x0005, 0x00e6, 0x2071, 0xb500, 0x080c, 0x4bc7,
--      0x080c, 0x2ab8, 0x00ee, 0x0005, 0x00e6, 0x6018, 0x2070, 0x7000,
--      0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0x6850, 0xc0e5, 0x6852,
--      0x0005, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026,
--      0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0xb7e9, 0x252c, 0x2021,
--      0xb7ef, 0x2424, 0x2061, 0xbd00, 0x2071, 0xb500, 0x7648, 0x7068,
--      0xa606, 0x0578, 0x671c, 0xa786, 0x0001, 0x0118, 0xa786, 0x0008,
--      0x1500, 0x2500, 0xac06, 0x01e8, 0x2400, 0xac06, 0x01d0, 0x080c,
--      0xb104, 0x01b8, 0x080c, 0xb114, 0x11a0, 0x6000, 0xa086, 0x0004,
--      0x1120, 0x0016, 0x080c, 0x194d, 0x001e, 0x080c, 0x9e41, 0x1110,
--      0x080c, 0x2cc2, 0x080c, 0x9e52, 0x1110, 0x080c, 0x8c13, 0x080c,
--      0x9e17, 0xace0, 0x0018, 0x2001, 0xb517, 0x2004, 0xac02, 0x1208,
--      0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e,
--      0x00ce, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091,
--      0x8000, 0x2071, 0xb540, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036,
--      0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500,
--      0xa084, 0x0007, 0xa08e, 0x0003, 0x0148, 0xa08e, 0x0004, 0x0130,
--      0xa08e, 0x0005, 0x0118, 0x2071, 0xb54a, 0x04c9, 0x001e, 0x00ee,
--      0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091,
--      0x8000, 0x2071, 0xb540, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036,
--      0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500,
--      0xa084, 0x0007, 0xa08e, 0x0003, 0x0148, 0xa08e, 0x0004, 0x0130,
--      0xa08e, 0x0005, 0x0118, 0x2071, 0xb54a, 0x0089, 0x001e, 0x00ee,
--      0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000,
--      0x2071, 0xb542, 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04,
--      0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005,
--      0x00e6, 0x2071, 0xb540, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071,
--      0xb544, 0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091,
--      0x8000, 0x2071, 0xb540, 0x7044, 0x8000, 0x7046, 0x00ee, 0x000e,
--      0x012e, 0x0005, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020,
--      0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000,
--      0x4000, 0x8000, 0xada0
-+      0xbb96, 0x080c, 0x90da, 0x003e, 0x002e, 0x001e, 0x015e, 0xa005,
-+      0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0026,
-+      0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0xbd00, 0x2079, 0x0001,
-+      0x8fff, 0x0904, 0xafef, 0x2071, 0xb500, 0x7648, 0x7068, 0x8001,
-+      0xa602, 0x1a04, 0xafef, 0x88ff, 0x0128, 0x2800, 0xac06, 0x15b0,
-+      0x2079, 0x0000, 0x080c, 0xb110, 0x0588, 0x2400, 0xac06, 0x0570,
-+      0x671c, 0xa786, 0x0006, 0x1550, 0xa786, 0x0007, 0x0538, 0x88ff,
-+      0x1140, 0x6018, 0xa206, 0x1510, 0x85ff, 0x0118, 0x6050, 0xa106,
-+      0x11e8, 0x00d6, 0x6000, 0xa086, 0x0004, 0x1150, 0x080c, 0xb33a,
-+      0x601f, 0x0007, 0x2001, 0xb7b6, 0x2004, 0x6016, 0x080c, 0x194d,
-+      0x6010, 0x2068, 0x080c, 0x9c5a, 0x0120, 0x0046, 0x080c, 0xb099,
-+      0x004e, 0x00de, 0x080c, 0x9e1d, 0x88ff, 0x1198, 0xace0, 0x0018,
-+      0x2001, 0xb517, 0x2004, 0xac02, 0x1210, 0x0804, 0xafa0, 0xa006,
-+      0x012e, 0x002e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe,
-+      0x0005, 0xa8c5, 0x0001, 0x0ca0, 0x0076, 0x0056, 0x0086, 0x2041,
-+      0x0000, 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6218, 0x0096,
-+      0x2049, 0x0000, 0x080c, 0x8130, 0x009e, 0x008e, 0x2039, 0x0000,
-+      0x080c, 0x81d6, 0x080c, 0xaf91, 0x005e, 0x007e, 0x0005, 0x0026,
-+      0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9,
-+      0x007f, 0x2009, 0x0000, 0x0016, 0x0036, 0x080c, 0x4fa9, 0x11b0,
-+      0x2c10, 0x0056, 0x0086, 0x2041, 0x0000, 0x2508, 0x2029, 0x0001,
-+      0x0096, 0x2049, 0x0000, 0x080c, 0x8130, 0x009e, 0x008e, 0x2039,
-+      0x0000, 0x080c, 0x81d6, 0x080c, 0xaf91, 0x005e, 0x003e, 0x001e,
-+      0x8108, 0x1f04, 0xb023, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e,
-+      0x002e, 0x0005, 0x0076, 0x0056, 0x6218, 0x0086, 0x2041, 0x0000,
-+      0x2029, 0x0001, 0x2019, 0x0048, 0x0096, 0x2049, 0x0000, 0x080c,
-+      0x8130, 0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x81d6, 0x2c20,
-+      0x080c, 0xaf91, 0x005e, 0x007e, 0x0005, 0x0026, 0x0046, 0x0056,
-+      0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x007f, 0x2009, 0x0000,
-+      0x0016, 0x0036, 0x080c, 0x4fa9, 0x11c0, 0x2c10, 0x0086, 0x2041,
-+      0x0000, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xb31c, 0x004e,
-+      0x0096, 0x2049, 0x0000, 0x080c, 0x8130, 0x009e, 0x008e, 0x2039,
-+      0x0000, 0x080c, 0x81d6, 0x080c, 0xaf91, 0x003e, 0x001e, 0x8108,
-+      0x1f04, 0xb070, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x002e,
-+      0x0005, 0x0016, 0x00f6, 0x3800, 0xd08c, 0x0130, 0xad82, 0x1000,
-+      0x02b0, 0xad82, 0xb500, 0x0230, 0xad82, 0xed00, 0x0280, 0xad82,
-+      0xffff, 0x1268, 0x6800, 0xa07d, 0x0138, 0x6803, 0x0000, 0x6b52,
-+      0x080c, 0x5408, 0x2f68, 0x0cb0, 0x6b52, 0x080c, 0x5408, 0x00fe,
-+      0x001e, 0x0005, 0x00e6, 0x0046, 0x0036, 0x2061, 0xbd00, 0xa005,
-+      0x1138, 0x2071, 0xb500, 0x7448, 0x7068, 0x8001, 0xa402, 0x12d8,
-+      0x2100, 0xac06, 0x0168, 0x6000, 0xa086, 0x0000, 0x0148, 0x6008,
-+      0xa206, 0x1130, 0x6018, 0xa1a0, 0x0006, 0x2424, 0xa406, 0x0140,
-+      0xace0, 0x0018, 0x2001, 0xb517, 0x2004, 0xac02, 0x1220, 0x0c40,
-+      0xa085, 0x0001, 0x0008, 0xa006, 0x003e, 0x004e, 0x00ee, 0x0005,
-+      0x00d6, 0x0006, 0x080c, 0x15f8, 0x000e, 0x090c, 0x1515, 0x6837,
-+      0x010d, 0x685e, 0x0026, 0x2010, 0x080c, 0x9c4a, 0x2001, 0x0000,
-+      0x0120, 0x2200, 0xa080, 0x0014, 0x2004, 0x002e, 0x684a, 0x6956,
-+      0x6c46, 0x684f, 0x0000, 0x2001, 0xb7be, 0x2004, 0x6852, 0xa006,
-+      0x68b2, 0x6802, 0x683a, 0x685a, 0x080c, 0x5408, 0x00de, 0x0005,
-+      0x6700, 0xa786, 0x0000, 0x0158, 0xa786, 0x0001, 0x0140, 0xa786,
-+      0x000a, 0x0128, 0xa786, 0x0009, 0x0110, 0xa085, 0x0001, 0x0005,
-+      0x00e6, 0x6018, 0x2070, 0x70a0, 0xa206, 0x00ee, 0x0005, 0x0016,
-+      0x6004, 0xa08e, 0x001e, 0x11a0, 0x8007, 0x6130, 0xa18c, 0x00ff,
-+      0xa105, 0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0005,
-+      0x2001, 0xb7b7, 0x2004, 0x6016, 0x080c, 0x6c8d, 0x080c, 0x7173,
-+      0x001e, 0x0005, 0xe000, 0xe000, 0x0005, 0x6020, 0xd0e4, 0x0158,
-+      0xd0cc, 0x0118, 0x080c, 0x9f35, 0x0030, 0x080c, 0xb33a, 0x080c,
-+      0x6aef, 0x080c, 0x861d, 0x0005, 0xa280, 0x0007, 0x2004, 0xa084,
-+      0x000f, 0x0002, 0xb163, 0xb163, 0xb163, 0xb168, 0xb163, 0xb165,
-+      0xb165, 0xb163, 0xb165, 0xa006, 0x0005, 0x00c6, 0x2260, 0x00ce,
-+      0xa085, 0x0001, 0x0005, 0xa280, 0x0007, 0x2004, 0xa084, 0x000f,
-+      0x0002, 0xb17a, 0xb17a, 0xb17a, 0xb17a, 0xb17a, 0xb17a, 0xb185,
-+      0xb17a, 0xb17a, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013, 0x2a00,
-+      0x6003, 0x0001, 0x080c, 0x6c8d, 0x0005, 0x00c6, 0x2260, 0x080c,
-+      0xb33a, 0x603f, 0x0000, 0x6020, 0xc0f4, 0xc0cc, 0x6022, 0x6037,
-+      0x0000, 0x00ce, 0x00d6, 0x2268, 0xa186, 0x0007, 0x1904, 0xb1e0,
-+      0x6810, 0xa005, 0x0138, 0xa080, 0x0013, 0x2004, 0xd0fc, 0x1110,
-+      0x00de, 0x08c0, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x6c8d,
-+      0x080c, 0x7173, 0x00c6, 0x2d60, 0x6100, 0xa186, 0x0002, 0x1904,
-+      0xb269, 0x6010, 0xa005, 0x1138, 0x6000, 0xa086, 0x0007, 0x190c,
-+      0x1515, 0x0804, 0xb269, 0xa08c, 0xf000, 0x1130, 0x0028, 0x2068,
-+      0x6800, 0xa005, 0x1de0, 0x2d00, 0xa080, 0x0013, 0x2004, 0xa084,
-+      0x0003, 0xa086, 0x0002, 0x1180, 0x6010, 0x2068, 0x684c, 0xc0dc,
-+      0xc0f4, 0x684e, 0x6850, 0xc0f4, 0xc0fc, 0x6852, 0x2009, 0x0043,
-+      0x080c, 0xab56, 0x0804, 0xb269, 0x2009, 0x0041, 0x0804, 0xb263,
-+      0xa186, 0x0005, 0x15f0, 0x6810, 0xa080, 0x0013, 0x2004, 0xd0bc,
-+      0x1118, 0x00de, 0x0804, 0xb17a, 0xd0b4, 0x0128, 0xd0fc, 0x090c,
-+      0x1515, 0x0804, 0xb198, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c,
-+      0x6c8d, 0x080c, 0x7173, 0x00c6, 0x2d60, 0x6100, 0xa186, 0x0002,
-+      0x0120, 0xa186, 0x0004, 0x1904, 0xb269, 0x2071, 0xb823, 0x7000,
-+      0xa086, 0x0003, 0x1128, 0x7004, 0xac06, 0x1110, 0x7003, 0x0000,
-+      0x6810, 0xa080, 0x0013, 0x200c, 0xc1f4, 0xc1dc, 0x2102, 0x8000,
-+      0x200c, 0xc1f4, 0xc1fc, 0xc1bc, 0x2102, 0x2009, 0x0042, 0x0804,
-+      0xb263, 0x0036, 0x00d6, 0x00d6, 0x080c, 0x15f8, 0x003e, 0x090c,
-+      0x1515, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x685b,
-+      0x0000, 0x6b5e, 0x6857, 0x0045, 0x2c00, 0x6862, 0x6034, 0x6872,
-+      0x2360, 0x6020, 0xc0dd, 0x6022, 0x6018, 0xa080, 0x0028, 0x2004,
-+      0xa084, 0x00ff, 0x8007, 0x6350, 0x6b4a, 0x6846, 0x684f, 0x0000,
-+      0x6853, 0x0000, 0x6d6a, 0x6e66, 0x686f, 0x0001, 0x080c, 0x5408,
-+      0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xace0, 0x2d00, 0x600a,
-+      0x601f, 0x0006, 0x6003, 0x0007, 0x6017, 0x0000, 0x603f, 0x0000,
-+      0x00de, 0x003e, 0x0038, 0x603f, 0x0000, 0x6003, 0x0007, 0x080c,
-+      0xab56, 0x00ce, 0x00de, 0x0005, 0xa186, 0x0013, 0x1128, 0x6004,
-+      0xa082, 0x0085, 0x2008, 0x00c2, 0xa186, 0x0027, 0x1178, 0x080c,
-+      0x7090, 0x0036, 0x00d6, 0x6010, 0x2068, 0x2019, 0x0004, 0x080c,
-+      0xb099, 0x00de, 0x003e, 0x080c, 0x7173, 0x0005, 0xa186, 0x0014,
-+      0x0d70, 0x080c, 0x8663, 0x0005, 0xb295, 0xb293, 0xb293, 0xb293,
-+      0xb293, 0xb293, 0xb295, 0x080c, 0x1515, 0x080c, 0x7090, 0x6003,
-+      0x000c, 0x080c, 0x7173, 0x0005, 0xa182, 0x008c, 0x1220, 0xa182,
-+      0x0085, 0x0208, 0x001a, 0x080c, 0x8663, 0x0005, 0xb2ad, 0xb2ad,
-+      0xb2ad, 0xb2ad, 0xb2af, 0xb2cd, 0xb2ad, 0x080c, 0x1515, 0x00d6,
-+      0x2c68, 0x080c, 0x85c7, 0x01a0, 0x6003, 0x0001, 0x6007, 0x001e,
-+      0x2009, 0xbb8e, 0x210c, 0x6136, 0x2009, 0xbb8f, 0x210c, 0x613a,
-+      0x600b, 0xffff, 0x6918, 0x611a, 0x601f, 0x0004, 0x080c, 0x6c8d,
-+      0x2d60, 0x080c, 0x861d, 0x00de, 0x0005, 0x080c, 0x861d, 0x0005,
-+      0x00e6, 0x6018, 0x2070, 0x7000, 0xd0ec, 0x00ee, 0x0005, 0x6010,
-+      0xa08c, 0xf000, 0x0904, 0xb31b, 0xa080, 0x0013, 0x200c, 0xd1ec,
-+      0x05d0, 0x2001, 0xb572, 0x2004, 0xd0ec, 0x05a8, 0x6003, 0x0002,
-+      0x6020, 0xc0e5, 0x6022, 0xd1ac, 0x0180, 0x00f6, 0x2c78, 0x080c,
-+      0x5301, 0x00fe, 0x0150, 0x2001, 0xb7b8, 0x2004, 0x603e, 0x2009,
-+      0xb572, 0x210c, 0xd1f4, 0x11e8, 0x0080, 0x2009, 0xb572, 0x210c,
-+      0xd1f4, 0x0128, 0x6020, 0xc0e4, 0x6022, 0xa006, 0x00a0, 0x2001,
-+      0xb7b8, 0x200c, 0x8103, 0xa100, 0x603e, 0x6018, 0xa088, 0x002b,
-+      0x2104, 0xa005, 0x0118, 0xa088, 0x0003, 0x0cd0, 0x2c0a, 0x600f,
-+      0x0000, 0xa085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, 0x6150,
-+      0xa2f0, 0x002b, 0x2e04, 0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118,
-+      0x6050, 0xa106, 0x1138, 0x600c, 0x2072, 0x080c, 0x6aef, 0x080c,
-+      0x861d, 0x0010, 0xacf0, 0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce,
-+      0x001e, 0x0005, 0x00d6, 0x6018, 0xa0e8, 0x002b, 0x2d04, 0xa005,
-+      0x0140, 0xac06, 0x0120, 0x2d04, 0xa0e8, 0x0003, 0x0cb8, 0x600c,
-+      0x206a, 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0xb528,
-+      0x2204, 0xa084, 0x00ff, 0x2019, 0xbb8e, 0x2334, 0xa636, 0x11d8,
-+      0x8318, 0x2334, 0x2204, 0xa084, 0xff00, 0xa636, 0x11a0, 0x2011,
-+      0xbb90, 0x6018, 0xa098, 0x000a, 0x20a9, 0x0004, 0x080c, 0x90da,
-+      0x1150, 0x2011, 0xbb94, 0x6018, 0xa098, 0x0006, 0x20a9, 0x0004,
-+      0x080c, 0x90da, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6,
-+      0x2071, 0xb500, 0x080c, 0x4bc6, 0x080c, 0x2ab8, 0x00ee, 0x0005,
-+      0x00e6, 0x6018, 0x2070, 0x7000, 0xd0fc, 0x0108, 0x0011, 0x00ee,
-+      0x0005, 0x6850, 0xc0e5, 0x6852, 0x0005, 0x00e6, 0x00c6, 0x0076,
-+      0x0066, 0x0056, 0x0046, 0x0026, 0x0016, 0x0126, 0x2091, 0x8000,
-+      0x2029, 0xb7e9, 0x252c, 0x2021, 0xb7ef, 0x2424, 0x2061, 0xbd00,
-+      0x2071, 0xb500, 0x7648, 0x7068, 0xa606, 0x0578, 0x671c, 0xa786,
-+      0x0001, 0x0118, 0xa786, 0x0008, 0x1500, 0x2500, 0xac06, 0x01e8,
-+      0x2400, 0xac06, 0x01d0, 0x080c, 0xb110, 0x01b8, 0x080c, 0xb120,
-+      0x11a0, 0x6000, 0xa086, 0x0004, 0x1120, 0x0016, 0x080c, 0x194d,
-+      0x001e, 0x080c, 0x9e47, 0x1110, 0x080c, 0x2cc2, 0x080c, 0x9e58,
-+      0x1110, 0x080c, 0x8c19, 0x080c, 0x9e1d, 0xace0, 0x0018, 0x2001,
-+      0xb517, 0x2004, 0xac02, 0x1208, 0x0858, 0x012e, 0x001e, 0x002e,
-+      0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00ee, 0x0005, 0x0126,
-+      0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0xb540, 0xd5a4,
-+      0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118, 0x7030, 0x8000,
-+      0x7032, 0xd5ac, 0x0178, 0x2500, 0xa084, 0x0007, 0xa08e, 0x0003,
-+      0x0148, 0xa08e, 0x0004, 0x0130, 0xa08e, 0x0005, 0x0118, 0x2071,
-+      0xb54a, 0x04c9, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126,
-+      0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0xb540, 0xd5a4,
-+      0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118, 0x7030, 0x8000,
-+      0x7032, 0xd5ac, 0x0178, 0x2500, 0xa084, 0x0007, 0xa08e, 0x0003,
-+      0x0148, 0xa08e, 0x0004, 0x0130, 0xa08e, 0x0005, 0x0118, 0x2071,
-+      0xb54a, 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126,
-+      0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xb542, 0x0021, 0x00ee,
-+      0x000e, 0x012e, 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220, 0x8e70,
-+      0x2e04, 0x8000, 0x2072, 0x0005, 0x00e6, 0x2071, 0xb540, 0x0c99,
-+      0x00ee, 0x0005, 0x00e6, 0x2071, 0xb544, 0x0c69, 0x00ee, 0x0005,
-+      0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xb540, 0x7044,
-+      0x8000, 0x7046, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0001, 0x0002,
-+      0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200,
-+      0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x2440
- };
- #ifdef UNIQUE_FW_NAME
--unsigned short fw2200tp_length01 = 0xa463;
-+unsigned short fw2200tp_length01 = 0xa46f;
- #else
--unsigned short risc_code_length01 = 0xa463;
-+unsigned short risc_code_length01 = 0xa46f;
- #endif
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2200ip_fw.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2200ip_fw.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2200ip_fw.h        2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2200ip_fw.h     2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -24,8 +24,9 @@
-  *             expanded LUN addressing for FCTAPE                     *
-  *                                                                    *
-  ************************************************************************/
-+
- /*
-- *    Firmware Version 2.02.04 (08:22 Feb 28, 2003)
-+ *    Firmware Version 2.02.06 (08:44 Jun 26, 2003)
-  */
- #ifdef UNIQUE_FW_NAME
-@@ -35,15 +36,15 @@ unsigned short risc_code_version = 2*102
- #endif
- #ifdef UNIQUE_FW_NAME
--unsigned char fw2200ip_version_str[] = {2,2,4};
-+unsigned char fw2200ip_version_str[] = {2,2,6};
- #else
--unsigned char firmware_version[] = {2,2,4};
-+unsigned char firmware_version[] = {2,2,6};
- #endif
- #ifdef UNIQUE_FW_NAME
--#define fw2200ip_VERSION_STRING "2.02.04"
-+#define fw2200ip_VERSION_STRING "2.02.06"
- #else
--#define FW_VERSION_STRING "2.02.04"
-+#define FW_VERSION_STRING "2.02.06"
- #endif
- #ifdef UNIQUE_FW_NAME
-@@ -57,17 +58,17 @@ unsigned short fw2200ip_code01[] = { 
- #else
- unsigned short risc_code01[] = { 
- #endif
--      0x0470, 0x0000, 0x0000, 0xb5b9, 0x0000, 0x0002, 0x0002, 0x0004,
-+      0x0470, 0x0000, 0x0000, 0xb5df, 0x0000, 0x0002, 0x0002, 0x0006,
-       0x0037, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
-       0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
-       0x5449, 0x4f4e, 0x2049, 0x5350, 0x3232, 0x3030, 0x2046, 0x6972,
-       0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
--      0x322e, 0x3032, 0x2e30, 0x3420, 0x2020, 0x2020, 0x2400, 0x20c1,
-+      0x322e, 0x3032, 0x2e30, 0x3620, 0x2020, 0x2020, 0x2400, 0x20c1,
-       0x0005, 0x2001, 0x017f, 0x2003, 0x0000, 0x20c9, 0xcbff, 0x2091,
-       0x2000, 0x2059, 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x2b14,
-       0x2051, 0xc600, 0x2a70, 0x2029, 0xfe00, 0x2031, 0xffff, 0x2039,
--      0xfde9, 0x2021, 0x0200, 0x0804, 0x146c, 0x20a1, 0xc5b9, 0xa00e,
--      0x20a9, 0x0847, 0x41a4, 0x3400, 0x7562, 0x7666, 0x775e, 0x746a,
-+      0xfde9, 0x2021, 0x0200, 0x0804, 0x146c, 0x20a1, 0xc5df, 0xa00e,
-+      0x20a9, 0x0821, 0x41a4, 0x3400, 0x7562, 0x7666, 0x775e, 0x746a,
-       0x746e, 0x20a1, 0xce00, 0x7164, 0x810d, 0x810d, 0x810d, 0x810d,
-       0xa18c, 0x000f, 0x2001, 0x000c, 0xa112, 0xa00e, 0x21a8, 0x41a4,
-       0x3400, 0x8211, 0x1dd8, 0x7164, 0x3400, 0xa102, 0x0120, 0x0218,
-@@ -76,65 +77,65 @@ unsigned short risc_code01[] = { 
-       0xa112, 0x20a1, 0x1000, 0xa00e, 0x21a8, 0x41a4, 0x8211, 0x1de0,
-       0x2009, 0xc600, 0x3400, 0xa102, 0x0120, 0x0218, 0x20a8, 0xa00e,
-       0x41a4, 0x080c, 0x1415, 0x080c, 0x163c, 0x080c, 0x17de, 0x080c,
--      0x2061, 0x080c, 0x4f3b, 0x080c, 0x957e, 0x080c, 0x15bf, 0x080c,
--      0x306e, 0x080c, 0x61dd, 0x080c, 0x5743, 0x080c, 0x7147, 0x080c,
--      0x6edf, 0x080c, 0x265b, 0x080c, 0x7860, 0x080c, 0x68c0, 0x080c,
-+      0x2061, 0x080c, 0x4f54, 0x080c, 0x959e, 0x080c, 0x15bf, 0x080c,
-+      0x306e, 0x080c, 0x61f6, 0x080c, 0x575c, 0x080c, 0x7160, 0x080c,
-+      0x6ef8, 0x080c, 0x265b, 0x080c, 0x7879, 0x080c, 0x68d9, 0x080c,
-       0x2515, 0x080c, 0x2629, 0x2091, 0x3009, 0x7823, 0x0000, 0x1004,
-       0x10c7, 0x7820, 0xa086, 0x0002, 0x1150, 0x7823, 0x4000, 0x0e04,
-       0x10bf, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70,
-       0x7003, 0x0000, 0x2a70, 0x7000, 0xa08e, 0x0003, 0x1168, 0x080c,
--      0x40b9, 0x080c, 0x3095, 0x080c, 0x622b, 0x080c, 0x5943, 0x080c,
--      0x7184, 0x080c, 0x6f0a, 0x0c70, 0x000b, 0x0c88, 0x10e8, 0x10e9,
-+      0x40d2, 0x080c, 0x3095, 0x080c, 0x6244, 0x080c, 0x595c, 0x080c,
-+      0x719d, 0x080c, 0x6f23, 0x0c70, 0x000b, 0x0c88, 0x10e8, 0x10e9,
-       0x1214, 0x10e6, 0x12e1, 0x1412, 0x1413, 0x1414, 0x080c, 0x1519,
-       0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0xa086, 0x0001,
--      0x1904, 0x11f1, 0x080c, 0x158c, 0x080c, 0x5f22, 0x0150, 0x080c,
--      0x5f48, 0x15c0, 0x2079, 0x0100, 0x7828, 0xa085, 0x1800, 0x782a,
--      0x0488, 0x080c, 0x5e5a, 0x7000, 0xa086, 0x0001, 0x1904, 0x11f1,
-+      0x1904, 0x11f1, 0x080c, 0x158c, 0x080c, 0x5f3b, 0x0150, 0x080c,
-+      0x5f61, 0x15c0, 0x2079, 0x0100, 0x7828, 0xa085, 0x1800, 0x782a,
-+      0x0488, 0x080c, 0x5e73, 0x7000, 0xa086, 0x0001, 0x1904, 0x11f1,
-       0x708c, 0xa086, 0x0028, 0x1904, 0x11f1, 0x2001, 0x0161, 0x2003,
-       0x0001, 0x2079, 0x0100, 0x7827, 0xffff, 0x7a28, 0xa295, 0x1e2f,
--      0x7a2a, 0x2011, 0x5df5, 0x080c, 0x6fad, 0x2011, 0x5de8, 0x080c,
--      0x7070, 0x2011, 0x5e37, 0x080c, 0x6fad, 0x2011, 0x4e18, 0x080c,
--      0x6fad, 0x2011, 0x8030, 0x2019, 0x0000, 0x708b, 0x0000, 0x080c,
--      0x1eae, 0x00e8, 0x080c, 0x47cb, 0x2079, 0x0100, 0x7844, 0xa005,
--      0x1904, 0x11f1, 0x2011, 0x4e18, 0x080c, 0x6fad, 0x2011, 0x5e37,
--      0x080c, 0x6fad, 0x080c, 0x1eae, 0x2001, 0xc8d4, 0x2004, 0x780e,
-+      0x7a2a, 0x2011, 0x5e0e, 0x080c, 0x6fc6, 0x2011, 0x5e01, 0x080c,
-+      0x7089, 0x2011, 0x5e50, 0x080c, 0x6fc6, 0x2011, 0x4e31, 0x080c,
-+      0x6fc6, 0x2011, 0x8030, 0x2019, 0x0000, 0x708b, 0x0000, 0x080c,
-+      0x1eae, 0x00e8, 0x080c, 0x47e4, 0x2079, 0x0100, 0x7844, 0xa005,
-+      0x1904, 0x11f1, 0x2011, 0x4e31, 0x080c, 0x6fc6, 0x2011, 0x5e50,
-+      0x080c, 0x6fc6, 0x080c, 0x1eae, 0x2001, 0xc8d4, 0x2004, 0x780e,
-       0x7840, 0xa084, 0xfffb, 0x7842, 0x2011, 0x8010, 0x73cc, 0x080c,
--      0x407d, 0x723c, 0xc284, 0x723e, 0x2001, 0xc60c, 0x200c, 0xc1ac,
--      0x2102, 0x080c, 0x8dca, 0x2011, 0x0004, 0x080c, 0xac90, 0x080c,
--      0x55e1, 0x080c, 0x5f22, 0x0158, 0x080c, 0x4f24, 0x0140, 0x708b,
--      0x0001, 0x70c7, 0x0000, 0x080c, 0x4968, 0x0804, 0x11f1, 0x080c,
--      0x570b, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x0060, 0x7073, 0x0000,
--      0x080c, 0xb038, 0x70d4, 0xd09c, 0x1128, 0x70a0, 0xa005, 0x0110,
--      0x080c, 0x4f02, 0x70df, 0x0000, 0x70db, 0x0000, 0x72d4, 0x080c,
--      0x5f22, 0x1178, 0x2011, 0x0000, 0x0016, 0x080c, 0x2a95, 0x2019,
-+      0x4096, 0x723c, 0xc284, 0x723e, 0x2001, 0xc60c, 0x200c, 0xc1ac,
-+      0x2102, 0x080c, 0x8de3, 0x2011, 0x0004, 0x080c, 0xacb0, 0x080c,
-+      0x55fa, 0x080c, 0x5f3b, 0x0158, 0x080c, 0x4f3d, 0x0140, 0x708b,
-+      0x0001, 0x70c7, 0x0000, 0x080c, 0x4981, 0x0804, 0x11f1, 0x080c,
-+      0x5724, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x0060, 0x7073, 0x0000,
-+      0x080c, 0xb058, 0x70d4, 0xd09c, 0x1128, 0x70a0, 0xa005, 0x0110,
-+      0x080c, 0x4f1b, 0x70df, 0x0000, 0x70db, 0x0000, 0x72d4, 0x080c,
-+      0x5f3b, 0x1178, 0x2011, 0x0000, 0x0016, 0x080c, 0x2a95, 0x2019,
-       0xc8d6, 0x211a, 0x001e, 0x7053, 0xffff, 0x7057, 0x00ef, 0x7077,
-       0x0000, 0x2079, 0xc652, 0x7804, 0xd0ac, 0x0108, 0xc295, 0x72d6,
--      0x080c, 0x5f22, 0x0118, 0xa296, 0x0004, 0x0548, 0x2011, 0x0001,
--      0x080c, 0xac90, 0x709b, 0x0000, 0x709f, 0xffff, 0x7003, 0x0002,
-+      0x080c, 0x5f3b, 0x0118, 0xa296, 0x0004, 0x0548, 0x2011, 0x0001,
-+      0x080c, 0xacb0, 0x709b, 0x0000, 0x709f, 0xffff, 0x7003, 0x0002,
-       0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0xa085, 0x0003, 0x782a,
--      0x00fe, 0x080c, 0x2c62, 0x2011, 0x0005, 0x080c, 0x8f0e, 0x080c,
--      0x7e94, 0x080c, 0x5f22, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
-+      0x00fe, 0x080c, 0x2c62, 0x2011, 0x0005, 0x080c, 0x8f27, 0x080c,
-+      0x7ead, 0x080c, 0x5f3b, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
-       0x080c, 0x2a95, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x709b,
-       0x0000, 0x709f, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079, 0x0100,
-       0x7827, 0x0003, 0x7828, 0xa085, 0x0003, 0x782a, 0x00fe, 0x2011,
--      0x0005, 0x080c, 0x8f0e, 0x080c, 0x7e94, 0x080c, 0x5f22, 0x0148,
-+      0x0005, 0x080c, 0x8f27, 0x080c, 0x7ead, 0x080c, 0x5f3b, 0x0148,
-       0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2a95, 0x61e2, 0x001e,
--      0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x080c, 0x5f22, 0x1118,
--      0x20a9, 0x0100, 0x0010, 0x20a9, 0x0082, 0x080c, 0x5f22, 0x1118,
-+      0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x080c, 0x5f3b, 0x1118,
-+      0x20a9, 0x0100, 0x0010, 0x20a9, 0x0082, 0x080c, 0x5f3b, 0x1118,
-       0x2009, 0x0000, 0x0010, 0x2009, 0x007e, 0x080c, 0x2f41, 0x8108,
-       0x1f04, 0x1205, 0x00ce, 0x7073, 0x0000, 0x7074, 0xa084, 0x00ff,
-       0x7076, 0x70a3, 0x0000, 0x0005, 0x0126, 0x2091, 0x8000, 0x7000,
-       0xa086, 0x0002, 0x1904, 0x12df, 0x709c, 0xa086, 0xffff, 0x0130,
--      0x080c, 0x2c62, 0x080c, 0x7e94, 0x0804, 0x12df, 0x70d4, 0xd0ac,
-+      0x080c, 0x2c62, 0x080c, 0x7ead, 0x0804, 0x12df, 0x70d4, 0xd0ac,
-       0x1110, 0xd09c, 0x0540, 0xd084, 0x0530, 0x0006, 0x0016, 0x2001,
-       0x0103, 0x2009, 0xc8d4, 0x210c, 0x2102, 0x001e, 0x000e, 0xd08c,
-       0x01d0, 0x70d8, 0xa086, 0xffff, 0x0190, 0x080c, 0x2dc1, 0x080c,
--      0x7e94, 0x70d4, 0xd094, 0x1904, 0x12df, 0x2011, 0x0001, 0x2019,
--      0x0000, 0x080c, 0x2df9, 0x080c, 0x7e94, 0x0804, 0x12df, 0x70dc,
-+      0x7ead, 0x70d4, 0xd094, 0x1904, 0x12df, 0x2011, 0x0001, 0x2019,
-+      0x0000, 0x080c, 0x2df9, 0x080c, 0x7ead, 0x0804, 0x12df, 0x70dc,
-       0xa005, 0x1904, 0x12df, 0x7098, 0xa005, 0x1904, 0x12df, 0x70d4,
--      0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x12df, 0x080c, 0x570b, 0x1904,
-+      0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x12df, 0x080c, 0x5724, 0x1904,
-       0x12df, 0x2001, 0xc653, 0x2004, 0xd0ac, 0x01c8, 0x0156, 0x00c6,
--      0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x533d, 0x1118,
-+      0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x5356, 0x1118,
-       0x6000, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x126c, 0x00ce,
-       0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x12df, 0x0006,
-       0x0016, 0x2001, 0x0103, 0x2009, 0xc8d4, 0x210c, 0x2102, 0x001e,
-@@ -144,55 +145,55 @@ unsigned short risc_code01[] = { 
-       0x0002, 0x40a1, 0x20a1, 0xc919, 0x2009, 0x0000, 0x080c, 0x14ff,
-       0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x40a1, 0x7030, 0xc08c,
-       0x7032, 0x7003, 0x0003, 0x709f, 0xffff, 0x080c, 0x1585, 0xa006,
--      0x080c, 0x296d, 0x080c, 0x40ef, 0x00f6, 0x2079, 0x0100, 0x080c,
--      0x5f48, 0x0150, 0x080c, 0x5f22, 0x7828, 0x0118, 0xa084, 0xe1ff,
-+      0x080c, 0x296d, 0x080c, 0x4108, 0x00f6, 0x2079, 0x0100, 0x080c,
-+      0x5f61, 0x0150, 0x080c, 0x5f3b, 0x7828, 0x0118, 0xa084, 0xe1ff,
-       0x0010, 0xa084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0xc928, 0x2004,
--      0xa086, 0x0005, 0x1120, 0x2011, 0x0000, 0x080c, 0x8f0e, 0x2011,
--      0x0000, 0x080c, 0x8f18, 0x080c, 0x7e94, 0x080c, 0x7f6e, 0x012e,
-+      0xa086, 0x0005, 0x1120, 0x2011, 0x0000, 0x080c, 0x8f27, 0x2011,
-+      0x0000, 0x080c, 0x8f31, 0x080c, 0x7ead, 0x080c, 0x7f87, 0x012e,
-       0x0005, 0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079,
-       0x0100, 0x2009, 0xc634, 0x2104, 0xa005, 0x1110, 0x080c, 0x2ac1,
--      0x2009, 0x00f7, 0x080c, 0x4eeb, 0x7940, 0xa18c, 0x0010, 0x7942,
-+      0x2009, 0x00f7, 0x080c, 0x4f04, 0x7940, 0xa18c, 0x0010, 0x7942,
-       0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c, 0x0110, 0x7827,
-       0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac, 0x1904, 0x134f,
--      0x080c, 0x5f34, 0x0158, 0x080c, 0x5f48, 0x1128, 0x2001, 0xc8e5,
--      0x2003, 0x0000, 0x0070, 0x080c, 0x5f2a, 0x0dc0, 0x2001, 0xc8e5,
--      0x2003, 0xaaaa, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x080c, 0x5e5a,
--      0x0058, 0x080c, 0x5f22, 0x0140, 0x2009, 0x00f8, 0x080c, 0x4eeb,
-+      0x080c, 0x5f4d, 0x0158, 0x080c, 0x5f61, 0x1128, 0x2001, 0xc8e5,
-+      0x2003, 0x0000, 0x0070, 0x080c, 0x5f43, 0x0dc0, 0x2001, 0xc8e5,
-+      0x2003, 0xaaaa, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x080c, 0x5e73,
-+      0x0058, 0x080c, 0x5f3b, 0x0140, 0x2009, 0x00f8, 0x080c, 0x4f04,
-       0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c,
--      0x1138, 0x080c, 0x5f22, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x13f9,
--      0x1f04, 0x132e, 0x0070, 0x7824, 0x080c, 0x5f3e, 0x0118, 0xd0ac,
-+      0x1138, 0x080c, 0x5f3b, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x13f9,
-+      0x1f04, 0x132e, 0x0070, 0x7824, 0x080c, 0x5f57, 0x0118, 0xd0ac,
-       0x1904, 0x13f9, 0xa084, 0x1800, 0x0d98, 0x7003, 0x0001, 0x0804,
-       0x13f9, 0x2001, 0x0001, 0x080c, 0x296d, 0x0804, 0x1408, 0x7850,
-       0xa084, 0x0180, 0x7852, 0x782f, 0x0020, 0x20a9, 0x0046, 0x1d04,
--      0x1357, 0x080c, 0x7058, 0x1f04, 0x1357, 0x7850, 0xa084, 0x0180,
--      0xa085, 0x0400, 0x7852, 0x782f, 0x0000, 0x080c, 0x5f34, 0x0158,
--      0x080c, 0x5f48, 0x1128, 0x2001, 0xc8e5, 0x2003, 0x0000, 0x0070,
--      0x080c, 0x5f2a, 0x0dc0, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x2001,
--      0xc8e6, 0x2003, 0x0001, 0x080c, 0x5e5a, 0x0020, 0x2009, 0x00f8,
--      0x080c, 0x4eeb, 0x20a9, 0x000e, 0xe000, 0x1f04, 0x1384, 0x7850,
--      0xa084, 0x0180, 0xa085, 0x1400, 0x7852, 0x080c, 0x5f22, 0x0120,
-+      0x1357, 0x080c, 0x7071, 0x1f04, 0x1357, 0x7850, 0xa084, 0x0180,
-+      0xa085, 0x0400, 0x7852, 0x782f, 0x0000, 0x080c, 0x5f4d, 0x0158,
-+      0x080c, 0x5f61, 0x1128, 0x2001, 0xc8e5, 0x2003, 0x0000, 0x0070,
-+      0x080c, 0x5f43, 0x0dc0, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x2001,
-+      0xc8e6, 0x2003, 0x0001, 0x080c, 0x5e73, 0x0020, 0x2009, 0x00f8,
-+      0x080c, 0x4f04, 0x20a9, 0x000e, 0xe000, 0x1f04, 0x1384, 0x7850,
-+      0xa084, 0x0180, 0xa085, 0x1400, 0x7852, 0x080c, 0x5f3b, 0x0120,
-       0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678, 0x2019, 0xea60,
--      0x7820, 0xd09c, 0x1558, 0x080c, 0x5f22, 0x05d8, 0x7824, 0xd0ac,
--      0x1904, 0x13f9, 0x080c, 0x5f48, 0x1508, 0x0046, 0x2021, 0x0190,
-+      0x7820, 0xd09c, 0x1558, 0x080c, 0x5f3b, 0x05d8, 0x7824, 0xd0ac,
-+      0x1904, 0x13f9, 0x080c, 0x5f61, 0x1508, 0x0046, 0x2021, 0x0190,
-       0x8421, 0x1df0, 0x004e, 0x8421, 0x11c8, 0x7827, 0x0048, 0x20a9,
--      0x01f4, 0x1d04, 0x13b1, 0x080c, 0x7058, 0x1f04, 0x13b1, 0x7824,
-+      0x01f4, 0x1d04, 0x13b1, 0x080c, 0x7071, 0x1f04, 0x13b1, 0x7824,
-       0xa084, 0x0068, 0x15c8, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x2001,
-       0xc8e6, 0x2003, 0x0001, 0x7003, 0x0001, 0x0498, 0x1d04, 0x13ca,
--      0x080c, 0x7058, 0x8319, 0x1960, 0x2009, 0xc634, 0x2104, 0x8000,
-+      0x080c, 0x7071, 0x8319, 0x1960, 0x2009, 0xc634, 0x2104, 0x8000,
-       0x200a, 0xa084, 0xfff0, 0x0120, 0x200b, 0x0000, 0x080c, 0x2ac1,
--      0x00d8, 0x080c, 0x5f34, 0x1140, 0xa4a2, 0x0064, 0x1128, 0x080c,
--      0x5ef9, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0xe000, 0xe000,
--      0x7824, 0x080c, 0x5f3e, 0x0110, 0xd0ac, 0x1158, 0xa084, 0x1800,
-+      0x00d8, 0x080c, 0x5f4d, 0x1140, 0xa4a2, 0x0064, 0x1128, 0x080c,
-+      0x5f12, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0xe000, 0xe000,
-+      0x7824, 0x080c, 0x5f57, 0x0110, 0xd0ac, 0x1158, 0xa084, 0x1800,
-       0x09a8, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x296d,
-       0x0048, 0x2001, 0xc634, 0x2003, 0x0000, 0x7827, 0x0048, 0x7828,
-       0xc09d, 0x782a, 0x7850, 0xa084, 0x0180, 0xa085, 0x0400, 0x7852,
-       0x015e, 0x003e, 0x000e, 0x080c, 0x155c, 0x012e, 0x00fe, 0x004e,
-       0x001e, 0x0005, 0x0005, 0x0005, 0x0005, 0x2a70, 0x2061, 0xc908,
--      0x2063, 0x0002, 0x6007, 0x0002, 0x600b, 0x0004, 0x600f, 0x0037,
-+      0x2063, 0x0002, 0x6007, 0x0002, 0x600b, 0x0006, 0x600f, 0x0037,
-       0x2001, 0xc8e5, 0x2003, 0x0000, 0x708b, 0x0000, 0x2009, 0x0100,
-       0x2104, 0xa082, 0x0002, 0x0218, 0x7053, 0xffff, 0x0010, 0x7053,
-       0x0000, 0x705b, 0xffff, 0x7073, 0x0000, 0x7077, 0x0000, 0x080c,
--      0xb038, 0x2061, 0xc8d5, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b,
-+      0xb058, 0x2061, 0xc8d5, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b,
-       0x8800, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x001f, 0x601b,
-       0x0000, 0x601f, 0x07d0, 0x2061, 0xc8dd, 0x6003, 0x8000, 0x6007,
-       0x0000, 0x600b, 0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017,
-@@ -217,7 +218,7 @@ unsigned short risc_code01[] = { 
-       0x7fff, 0x2c04, 0x2061, 0xffff, 0x2262, 0xa306, 0x1110, 0xc195,
-       0x0008, 0xc19d, 0x2011, 0x0001, 0x2019, 0x14f7, 0x0010, 0x0804,
-       0x146d, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x0837, 0x2011,
--      0x0000, 0x080c, 0x533d, 0x1178, 0x6004, 0xa0c4, 0x00ff, 0xa8c6,
-+      0x0000, 0x080c, 0x5356, 0x1178, 0x6004, 0xa0c4, 0x00ff, 0xa8c6,
-       0x0006, 0x0128, 0xa0c4, 0xff00, 0xa8c6, 0x0600, 0x1120, 0xa186,
-       0x0080, 0x0108, 0x8210, 0x8108, 0xa186, 0x0100, 0x1d50, 0x2208,
-       0x0005, 0x2091, 0x8000, 0x0e04, 0x151b, 0x0006, 0x0016, 0x2079,
-@@ -305,15 +306,15 @@ unsigned short risc_code01[] = { 
-       0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020, 0x53a5,
-       0x2001, 0xc71a, 0x2004, 0xd0bc, 0x0148, 0x2001, 0xc723, 0x2004,
-       0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5, 0x015e, 0x014e,
--      0x013e, 0x7007, 0x0000, 0x080c, 0x62c2, 0x080c, 0x1676, 0x0005,
--      0x2011, 0x8003, 0x080c, 0x407d, 0x0cf8, 0xa18c, 0x0700, 0x1148,
-+      0x013e, 0x7007, 0x0000, 0x080c, 0x62db, 0x080c, 0x1676, 0x0005,
-+      0x2011, 0x8003, 0x080c, 0x4096, 0x0cf8, 0xa18c, 0x0700, 0x1148,
-       0x2001, 0xc748, 0x2003, 0x0100, 0x7007, 0x0000, 0x080c, 0x1676,
--      0x0005, 0x2011, 0x8004, 0x080c, 0x407d, 0x0cf8, 0x0126, 0x2091,
-+      0x0005, 0x2011, 0x8004, 0x080c, 0x4096, 0x0cf8, 0x0126, 0x2091,
-       0x2200, 0x2079, 0x0030, 0x2071, 0xc96a, 0x7003, 0x0000, 0x700f,
-       0xc977, 0x7013, 0xc977, 0x780f, 0x00f6, 0x7803, 0x0004, 0x012e,
-       0x0005, 0x6934, 0xa184, 0x0007, 0x0002, 0x17fd, 0x183e, 0x17fd,
-       0x17fd, 0x1801, 0x1826, 0x180d, 0x1804, 0xa085, 0x0001, 0x0804,
--      0x1858, 0x080c, 0x7684, 0x05d0, 0x684c, 0xd0bc, 0x0db0, 0x6860,
-+      0x1858, 0x080c, 0x769d, 0x05d0, 0x684c, 0xd0bc, 0x0db0, 0x6860,
-       0x682e, 0x685c, 0x682a, 0x6858, 0x04c8, 0xa18c, 0x00ff, 0xa186,
-       0x001e, 0x1d58, 0x684c, 0xd0bc, 0x0d40, 0x6860, 0x682e, 0x685c,
-       0x682a, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f,
-@@ -346,7 +347,7 @@ unsigned short risc_code01[] = { 
-       0x0207, 0x2004, 0xd09c, 0x1d48, 0x7804, 0xa084, 0x6000, 0x0120,
-       0xa086, 0x6000, 0x0108, 0x0c08, 0x7818, 0x6812, 0x781c, 0x6816,
-       0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6100, 0xa18e,
--      0x0004, 0x1904, 0x194f, 0x2009, 0x0048, 0x080c, 0x960c, 0x04f8,
-+      0x0004, 0x1904, 0x194f, 0x2009, 0x0048, 0x080c, 0x962c, 0x04f8,
-       0x6808, 0xa005, 0x05a0, 0x7000, 0xa005, 0x0588, 0x700c, 0x7110,
-       0xa106, 0x1118, 0x7004, 0xa406, 0x1550, 0x2001, 0x0005, 0x2004,
-       0xd08c, 0x0160, 0x0046, 0x080c, 0x1b83, 0x004e, 0x2460, 0x6010,
-@@ -354,7 +355,7 @@ unsigned short risc_code01[] = { 
-       0x2004, 0xd09c, 0x1d50, 0x2001, 0x0005, 0x2004, 0xd08c, 0x1d50,
-       0x7804, 0xa084, 0x6000, 0x0118, 0xa086, 0x6000, 0x19f0, 0x7818,
-       0x6812, 0x781c, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000, 0x6100,
--      0xa18e, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x960c, 0x00ce,
-+      0xa18e, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x962c, 0x00ce,
-       0x00de, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x0026, 0x0036, 0x0046,
-       0x0056, 0x2071, 0xc96a, 0x7000, 0xa086, 0x0000, 0x0904, 0x19b9,
-       0x7004, 0xac06, 0x1904, 0x19ab, 0x2079, 0x0030, 0x7000, 0xa086,
-@@ -363,8 +364,8 @@ unsigned short risc_code01[] = { 
-       0xa106, 0x1d88, 0x8211, 0x1db0, 0x7804, 0xd0fc, 0x1540, 0x080c,
-       0x1f2d, 0x0026, 0x0056, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x1de8,
-       0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007, 0x0000,
--      0x005e, 0x002e, 0x2001, 0x015d, 0x2003, 0x0000, 0x080c, 0x5f22,
--      0x1138, 0x0066, 0x2031, 0x0001, 0x080c, 0x5fa4, 0x006e, 0x0058,
-+      0x005e, 0x002e, 0x2001, 0x015d, 0x2003, 0x0000, 0x080c, 0x5f3b,
-+      0x1138, 0x0066, 0x2031, 0x0001, 0x080c, 0x5fbd, 0x006e, 0x0058,
-       0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0020, 0x080c,
-       0x1b83, 0x0804, 0x195b, 0x0156, 0x20a9, 0x0009, 0x2009, 0xc977,
-       0x2104, 0xac06, 0x1108, 0x200a, 0xa188, 0x0003, 0x1f04, 0x19b0,
-@@ -372,19 +373,19 @@ unsigned short risc_code01[] = { 
-       0x700c, 0x7110, 0xa106, 0x0904, 0x1a5c, 0x2104, 0x7006, 0x2060,
-       0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0xc992, 0x0210,
-       0x2009, 0xc977, 0x7112, 0x8cff, 0x05e8, 0x6010, 0x2068, 0x2d58,
--      0x080c, 0x7824, 0x6828, 0xa406, 0x15e0, 0x682c, 0xa306, 0x15c8,
-+      0x080c, 0x783d, 0x6828, 0xa406, 0x15e0, 0x682c, 0xa306, 0x15c8,
-       0x7004, 0x2060, 0x6020, 0xc0d4, 0x6022, 0x684c, 0xd0f4, 0x0128,
-       0x6817, 0xffff, 0x6813, 0xffff, 0x0428, 0x6850, 0xd0f4, 0x1130,
-       0x7803, 0x0004, 0x6810, 0x781a, 0x6814, 0x781e, 0x6824, 0x2050,
-       0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x080c,
--      0x7684, 0x1128, 0x2009, 0x0011, 0x080c, 0x1a5f, 0x0048, 0x2009,
-+      0x769d, 0x1128, 0x2009, 0x0011, 0x080c, 0x1a5f, 0x0048, 0x2009,
-       0x0011, 0x080c, 0x1a5f, 0x0120, 0x2009, 0x0001, 0x080c, 0x1a5f,
-       0x2d58, 0x0005, 0x7803, 0x0004, 0x080c, 0x1ea2, 0x0904, 0x19c0,
--      0x0cc0, 0x080c, 0x7684, 0x1128, 0x080c, 0x1953, 0x080c, 0x761a,
-+      0x0cc0, 0x080c, 0x769d, 0x1128, 0x080c, 0x1953, 0x080c, 0x7633,
-       0x0c88, 0x6020, 0xd0f4, 0x11e0, 0xd0d4, 0x01b8, 0x6038, 0xa402,
-       0x6034, 0xa303, 0x0108, 0x1288, 0x643a, 0x6336, 0x6c2a, 0x6b2e,
-       0x0046, 0x0036, 0x2400, 0x6c7c, 0xa402, 0x6812, 0x2300, 0x6b80,
--      0xa303, 0x6816, 0x003e, 0x004e, 0x0018, 0x080c, 0xafca, 0x0990,
-+      0xa303, 0x6816, 0x003e, 0x004e, 0x0018, 0x080c, 0xafea, 0x0990,
-       0x601c, 0xa08e, 0x0008, 0x0904, 0x19e0, 0xa08e, 0x000a, 0x0904,
-       0x19e0, 0x2001, 0xc674, 0x2004, 0xd0b4, 0x1140, 0x6018, 0x2004,
-       0xd0bc, 0x1120, 0x6817, 0x7fff, 0x6813, 0xffff, 0x080c, 0x241b,
-@@ -405,11 +406,11 @@ unsigned short risc_code01[] = { 
-       0xa00e, 0x0804, 0x1b5d, 0x00de, 0x080c, 0x1519, 0x2d10, 0x00de,
-       0x00d6, 0x6834, 0x2268, 0xa084, 0x00ff, 0xa096, 0x0024, 0x0530,
-       0xa096, 0x002c, 0x1d80, 0x6b10, 0xa3a6, 0xffff, 0x1130, 0x2d10,
--      0x00de, 0x00d6, 0x080c, 0x72fa, 0x2268, 0x2d10, 0x00de, 0x00d6,
-+      0x00de, 0x00d6, 0x080c, 0x7313, 0x2268, 0x2d10, 0x00de, 0x00d6,
-       0x7314, 0x685c, 0xa086, 0x0001, 0x1120, 0x6868, 0xa005, 0x0108,
-       0x2018, 0x2268, 0x2011, 0x0000, 0x6d00, 0x6c04, 0x6f08, 0x6e0c,
-       0x780f, 0x00f0, 0xe000, 0xe000, 0xe000, 0x0408, 0x6b08, 0xa3a6,
--      0xffff, 0x1130, 0x2d10, 0x00de, 0x00d6, 0x080c, 0x72fa, 0x2268,
-+      0xffff, 0x1130, 0x2d10, 0x00de, 0x00d6, 0x080c, 0x7313, 0x2268,
-       0x2d10, 0x00de, 0x00d6, 0x7314, 0x685c, 0xa086, 0x0001, 0x1120,
-       0x6868, 0xa005, 0x0108, 0x2018, 0x2268, 0x2011, 0x0000, 0x6d00,
-       0x6c04, 0x780f, 0x00f0, 0xe000, 0xe000, 0xe000, 0xc9fd, 0x7b22,
-@@ -422,38 +423,38 @@ unsigned short risc_code01[] = { 
-       0x6804, 0xa406, 0x1148, 0x6808, 0xa706, 0x1130, 0x680c, 0xa606,
-       0x0018, 0xc9fc, 0x080c, 0x2389, 0x2168, 0x0005, 0x080c, 0x1519,
-       0x080c, 0x2014, 0x7004, 0x2060, 0x00d6, 0x6010, 0x2068, 0x7003,
--      0x0000, 0x080c, 0x1ec3, 0x080c, 0xac8a, 0x0170, 0x6808, 0x8001,
-+      0x0000, 0x080c, 0x1ec3, 0x080c, 0xacaa, 0x0170, 0x6808, 0x8001,
-       0x680a, 0x697c, 0x6912, 0x6980, 0x6916, 0x682b, 0xffff, 0x682f,
--      0xffff, 0x6850, 0xc0bd, 0x6852, 0x00de, 0x080c, 0xa95a, 0x0804,
-+      0xffff, 0x6850, 0xc0bd, 0x6852, 0x00de, 0x080c, 0xa97a, 0x0804,
-       0x1dec, 0x080c, 0x1519, 0x0126, 0x2091, 0x2200, 0x0006, 0x0016,
-       0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700,
-       0x1978, 0xa184, 0x0003, 0xa086, 0x0003, 0x0d58, 0x7000, 0x0002,
-       0x1ba0, 0x1ba6, 0x1cf5, 0x1dc1, 0x1ddb, 0x1ba0, 0x1ba0, 0x1ba0,
-       0x7804, 0xd09c, 0x1904, 0x1dec, 0x080c, 0x1519, 0x8001, 0x7002,
--      0xd1bc, 0x15c0, 0x080c, 0x7684, 0x1508, 0xd1dc, 0x1598, 0x6864,
-+      0xd1bc, 0x15c0, 0x080c, 0x769d, 0x1508, 0xd1dc, 0x1598, 0x6864,
-       0x8000, 0x6866, 0xd19c, 0x0140, 0x7004, 0x2060, 0x2009, 0x0102,
--      0x080c, 0x960c, 0x0804, 0x1cbc, 0x8aff, 0x0130, 0x2009, 0x0001,
-+      0x080c, 0x962c, 0x0804, 0x1cbc, 0x8aff, 0x0130, 0x2009, 0x0001,
-       0x080c, 0x1a5f, 0x0804, 0x1dec, 0x7004, 0x2060, 0x080c, 0x24e0,
--      0x080c, 0x761a, 0x7007, 0x0000, 0x0804, 0x1c45, 0xd19c, 0x1904,
-+      0x080c, 0x7633, 0x7007, 0x0000, 0x0804, 0x1c45, 0xd19c, 0x1904,
-       0x1c79, 0xd1dc, 0x1178, 0x8aff, 0x0904, 0x1c79, 0x2009, 0x0001,
-       0x080c, 0x1a5f, 0x0904, 0x1dec, 0x2009, 0x0001, 0x080c, 0x1a5f,
-       0x0804, 0x1dec, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc, 0x1904,
--      0x1c4b, 0x080c, 0x7684, 0x1130, 0xd19c, 0x0120, 0x6864, 0x8000,
-+      0x1c4b, 0x080c, 0x769d, 0x1130, 0xd19c, 0x0120, 0x6864, 0x8000,
-       0x6866, 0x0810, 0x0026, 0x0036, 0x7c20, 0x7d24, 0x7e30, 0x7f34,
-       0x7818, 0x6812, 0x781c, 0x6816, 0x2001, 0x0201, 0x2004, 0xa005,
-       0x0140, 0x7808, 0xd0ec, 0x1128, 0x7803, 0x0009, 0x7003, 0x0004,
--      0x0028, 0x080c, 0x7684, 0x0110, 0x080c, 0x1df0, 0x6b28, 0x6a2c,
-+      0x0028, 0x080c, 0x769d, 0x0110, 0x080c, 0x1df0, 0x6b28, 0x6a2c,
-       0x2400, 0x686e, 0xa31a, 0x2500, 0x6872, 0xa213, 0x6b2a, 0x6a2e,
-       0x00c6, 0x7004, 0x2060, 0x6020, 0xd0f4, 0x1110, 0x633a, 0x6236,
-       0x00ce, 0x003e, 0x002e, 0x6e1e, 0x6f22, 0x2500, 0xa405, 0x0128,
-       0x080c, 0x239f, 0x6850, 0xc0fd, 0x6852, 0x2a00, 0x6826, 0x2c00,
-       0x681a, 0x2800, 0x6832, 0x6808, 0x8001, 0x680a, 0x1148, 0x684c,
--      0xd0e4, 0x0130, 0x7004, 0x2060, 0x2009, 0x0048, 0x080c, 0x960c,
-+      0xd0e4, 0x0130, 0x7004, 0x2060, 0x2009, 0x0048, 0x080c, 0x962c,
-       0x7000, 0xa086, 0x0004, 0x0904, 0x1dec, 0x7003, 0x0000, 0x080c,
-       0x19c0, 0x0804, 0x1dec, 0x0056, 0x7d0c, 0xd5bc, 0x1110, 0x080c,
--      0xc551, 0x005e, 0x080c, 0x1ec3, 0x7004, 0x2060, 0x601c, 0xa086,
--      0x0009, 0x1140, 0x2009, 0x0106, 0x080c, 0x960c, 0x7007, 0x0000,
--      0x0804, 0x1dec, 0x00f6, 0x7004, 0x2078, 0x080c, 0x56c3, 0x0118,
-+      0xc577, 0x005e, 0x080c, 0x1ec3, 0x7004, 0x2060, 0x601c, 0xa086,
-+      0x0009, 0x1140, 0x2009, 0x0106, 0x080c, 0x962c, 0x7007, 0x0000,
-+      0x0804, 0x1dec, 0x00f6, 0x7004, 0x2078, 0x080c, 0x56dc, 0x0118,
-       0x7820, 0xc0f5, 0x7822, 0x00fe, 0x682b, 0xffff, 0x682f, 0xffff,
-       0x6808, 0x8001, 0x680a, 0x697c, 0x791a, 0x6980, 0x791e, 0x0804,
-       0x1dec, 0x7004, 0x00c6, 0x2060, 0x6020, 0x00ce, 0xd0f4, 0x0120,
-@@ -464,14 +465,14 @@ unsigned short risc_code01[] = { 
-       0x680a, 0x01a0, 0x7004, 0x2060, 0x601c, 0xa086, 0x000a, 0x11a0,
-       0x0156, 0x20a9, 0x0009, 0x2009, 0xc977, 0x2104, 0xac06, 0x1108,
-       0x200a, 0xa188, 0x0003, 0x1f04, 0x1cad, 0x015e, 0x7004, 0x2060,
--      0x2009, 0x0048, 0x080c, 0x960c, 0x080c, 0x19c0, 0x0804, 0x1dec,
-+      0x2009, 0x0048, 0x080c, 0x962c, 0x080c, 0x19c0, 0x0804, 0x1dec,
-       0x7818, 0x6812, 0x781c, 0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff,
-       0xa192, 0x0841, 0x1a04, 0x1b60, 0xa188, 0x0007, 0x8114, 0x8214,
-       0x8214, 0xa10a, 0x8104, 0x8004, 0x8004, 0xa20a, 0x810b, 0x810b,
-       0x810b, 0x080c, 0x1f58, 0x7803, 0x0004, 0x780f, 0xffff, 0x7803,
-       0x0001, 0x7804, 0xd0fc, 0x0de8, 0x7803, 0x0002, 0x7803, 0x0004,
-       0x780f, 0x00f6, 0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048,
--      0x080c, 0x960c, 0x080c, 0x1fae, 0x0838, 0x8001, 0x7002, 0xd194,
-+      0x080c, 0x962c, 0x080c, 0x1fae, 0x0838, 0x8001, 0x7002, 0xd194,
-       0x01b0, 0x7804, 0xd0fc, 0x1904, 0x1d91, 0xd09c, 0x0138, 0x7804,
-       0xd0fc, 0x1904, 0x1d91, 0xd09c, 0x1904, 0x1d95, 0x8aff, 0x0904,
-       0x1dec, 0x2009, 0x0001, 0x080c, 0x1a5f, 0x0804, 0x1dec, 0xa184,
-@@ -487,8 +488,8 @@ unsigned short risc_code01[] = { 
-       0xa31a, 0x680c, 0xa213, 0x0020, 0x6810, 0xa31a, 0x6814, 0xa213,
-       0x00de, 0xd194, 0x0904, 0x1c10, 0x2a00, 0x6826, 0x2c00, 0x681a,
-       0x2800, 0x6832, 0x6808, 0x8001, 0x680a, 0x6b2a, 0x6a2e, 0x003e,
--      0x002e, 0x0804, 0x1cbc, 0x0056, 0x7d0c, 0x080c, 0xc551, 0x005e,
--      0x080c, 0x1ec3, 0x00f6, 0x7004, 0x2078, 0x080c, 0x56c3, 0x0118,
-+      0x002e, 0x0804, 0x1cbc, 0x0056, 0x7d0c, 0x080c, 0xc577, 0x005e,
-+      0x080c, 0x1ec3, 0x00f6, 0x7004, 0x2078, 0x080c, 0x56dc, 0x0118,
-       0x7820, 0xc0f5, 0x7822, 0x00fe, 0x682b, 0xffff, 0x682f, 0xffff,
-       0x6808, 0x8001, 0x680a, 0x697c, 0x791a, 0x6980, 0x791e, 0x0804,
-       0x1dec, 0x7804, 0xd09c, 0x0904, 0x1b8b, 0x7c20, 0x7824, 0xa405,
-@@ -499,14 +500,14 @@ unsigned short risc_code01[] = { 
-       0x1120, 0x783c, 0xa606, 0x0904, 0x1b8b, 0x7803, 0x0002, 0x0804,
-       0x1d22, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d, 0x0180,
-       0x6808, 0x8001, 0x680a, 0x1160, 0x7004, 0x2060, 0x2009, 0x0048,
--      0x601c, 0xa086, 0x0009, 0x1110, 0x080c, 0x1519, 0x080c, 0x960c,
-+      0x601c, 0xa086, 0x0009, 0x1110, 0x080c, 0x1519, 0x080c, 0x962c,
-       0x080c, 0x19c0, 0x0088, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004,
-       0x2060, 0x6010, 0xa005, 0x0da0, 0x2068, 0x6808, 0x8000, 0x680a,
-       0x6c28, 0x6b2c, 0x080c, 0x19d3, 0x001e, 0x000e, 0x012e, 0x0005,
-       0x700c, 0x7110, 0xa106, 0x0904, 0x1e96, 0x7004, 0x0016, 0x210c,
-       0xa106, 0x001e, 0x0904, 0x1e96, 0x00d6, 0x00c6, 0x216c, 0x2d00,
-       0xa005, 0x0904, 0x1e94, 0x681c, 0xa086, 0x0008, 0x0904, 0x1e94,
--      0x6820, 0xd0d4, 0x1904, 0x1e94, 0x6810, 0x2068, 0x080c, 0x7684,
-+      0x6820, 0xd0d4, 0x1904, 0x1e94, 0x6810, 0x2068, 0x080c, 0x769d,
-       0x0904, 0x1e94, 0x6850, 0xd0fc, 0x05a8, 0x8108, 0x2104, 0x6b2c,
-       0xa306, 0x1904, 0x1e94, 0x8108, 0x2104, 0x6a28, 0xa206, 0x1904,
-       0x1e94, 0x6850, 0xc0fc, 0xc0f5, 0x6852, 0x686c, 0x7822, 0x701a,
-@@ -529,10 +530,10 @@ unsigned short risc_code01[] = { 
-       0xa085, 0x0001, 0x0010, 0x080c, 0x1fae, 0x0005, 0x0126, 0x2091,
-       0x2200, 0x7000, 0xa086, 0x0003, 0x1160, 0x700c, 0x7110, 0xa106,
-       0x0140, 0x080c, 0x2b06, 0x20e1, 0x9028, 0x700f, 0xc977, 0x7013,
--      0xc977, 0x012e, 0x0005, 0x00c6, 0x080c, 0x5f22, 0x11b8, 0x2001,
-+      0xc977, 0x012e, 0x0005, 0x00c6, 0x080c, 0x5f3b, 0x11b8, 0x2001,
-       0x0160, 0x2003, 0x0000, 0x2001, 0x0138, 0x2003, 0x0000, 0x2011,
-       0x00c8, 0xe000, 0xe000, 0x8211, 0x1de0, 0x0481, 0x0066, 0x2031,
--      0x0000, 0x080c, 0x5fa4, 0x006e, 0x00ce, 0x0005, 0x080c, 0x1f2d,
-+      0x0000, 0x080c, 0x5fbd, 0x006e, 0x00ce, 0x0005, 0x080c, 0x1f2d,
-       0x080c, 0x2b06, 0x20e1, 0x9028, 0x700c, 0x7110, 0xa106, 0x0190,
-       0x2104, 0xa005, 0x0130, 0x2060, 0x6010, 0x2060, 0x6008, 0x8001,
-       0x600a, 0xa188, 0x0003, 0xa182, 0xc992, 0x0210, 0x2009, 0xc977,
-@@ -544,7 +545,7 @@ unsigned short risc_code01[] = { 
-       0xa188, 0x0003, 0xa182, 0xc992, 0x0210, 0x2009, 0xc977, 0x7112,
-       0x0c50, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x2001, 0x0138, 0x2014,
-       0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, 0x0000, 0x080c,
--      0x5f22, 0x1148, 0x2021, 0x0002, 0x1d04, 0x1f3c, 0x2091, 0x6000,
-+      0x5f3b, 0x1148, 0x2021, 0x0002, 0x1d04, 0x1f3c, 0x2091, 0x6000,
-       0x8421, 0x1dd0, 0x0005, 0x2021, 0xb015, 0x2001, 0x0141, 0x201c,
-       0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0xa39c, 0x0048, 0x1138,
-       0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421, 0x1d70, 0x0005,
-@@ -580,7 +581,7 @@ unsigned short risc_code01[] = { 
-       0xe000, 0x2079, 0x0030, 0x7804, 0xd0ac, 0x190c, 0x1519, 0x2079,
-       0x0010, 0x000e, 0x783e, 0x000e, 0x783a, 0x000e, 0x7836, 0x000e,
-       0x7832, 0x000e, 0x7822, 0x000e, 0x7802, 0x00fe, 0x00ee, 0x0030,
--      0x00fe, 0x00ee, 0x7804, 0xd0ac, 0x190c, 0x1519, 0x080c, 0x7f6e,
-+      0x00fe, 0x00ee, 0x7804, 0xd0ac, 0x190c, 0x1519, 0x080c, 0x7f87,
-       0x0005, 0x00e6, 0x2071, 0xc992, 0x7003, 0x0000, 0x00ee, 0x0005,
-       0x00d6, 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x1904, 0x20ed,
-       0x6934, 0xa184, 0x0007, 0x0002, 0x207c, 0x20d8, 0x207c, 0x207e,
-@@ -632,13 +633,13 @@ unsigned short risc_code01[] = { 
-       0x0008, 0xa006, 0x002e, 0x003e, 0x004e, 0x005e, 0x006e, 0x007e,
-       0x0005, 0x080c, 0x1519, 0x0026, 0x2001, 0x0105, 0x2003, 0x0010,
-       0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060,
--      0x00d6, 0x6010, 0x2068, 0x080c, 0xac8a, 0x0118, 0x6850, 0xc0bd,
-+      0x00d6, 0x6010, 0x2068, 0x080c, 0xacaa, 0x0118, 0x6850, 0xc0bd,
-       0x6852, 0x601c, 0xa086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8,
-       0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0xa206, 0x1dc0, 0x60c4,
-       0x686a, 0x60c8, 0x6866, 0x7004, 0x2060, 0x00de, 0x00c6, 0x080c,
--      0xa95a, 0x00ce, 0x2001, 0xc936, 0x2004, 0xac06, 0x1150, 0x20e1,
--      0x9040, 0x080c, 0x90ef, 0x2011, 0x0000, 0x080c, 0x8f18, 0x080c,
--      0x7f6e, 0x002e, 0x0804, 0x22e6, 0x0126, 0x2091, 0x2400, 0x0006,
-+      0xa97a, 0x00ce, 0x2001, 0xc936, 0x2004, 0xac06, 0x1150, 0x20e1,
-+      0x9040, 0x080c, 0x910f, 0x2011, 0x0000, 0x080c, 0x8f31, 0x080c,
-+      0x7f87, 0x002e, 0x0804, 0x22e6, 0x0126, 0x2091, 0x2400, 0x0006,
-       0x0016, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x2079, 0x0020, 0x2071,
-       0xc992, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184,
-       0x0700, 0x1904, 0x21eb, 0x7000, 0x0002, 0x22e6, 0x2249, 0x22b9,
-@@ -665,7 +666,7 @@ unsigned short risc_code01[] = { 
-       0x00ee, 0x00fe, 0x001e, 0x000e, 0x012e, 0x0005, 0x00f6, 0x00e6,
-       0x2071, 0xc992, 0x7000, 0xa086, 0x0000, 0x05d0, 0x2079, 0x0020,
-       0x0016, 0x2009, 0x0207, 0x210c, 0xd194, 0x0198, 0x2009, 0x020c,
--      0x210c, 0xa184, 0x0003, 0x0168, 0x080c, 0xc59a, 0x2001, 0x0133,
-+      0x210c, 0xa184, 0x0003, 0x0168, 0x080c, 0xc5c0, 0x2001, 0x0133,
-       0x2004, 0xa005, 0x090c, 0x1519, 0x20e1, 0x9040, 0x2001, 0x020c,
-       0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0xa106,
-       0x1110, 0x20e1, 0x9040, 0x7804, 0xd0fc, 0x09d8, 0x080c, 0x222c,
-@@ -673,11 +674,11 @@ unsigned short risc_code01[] = { 
-       0xd0ac, 0x1de8, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000,
-       0x00ee, 0x00fe, 0x0005, 0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
-       0x2071, 0xc992, 0x2079, 0x0020, 0x7000, 0xa086, 0x0000, 0x0540,
--      0x7004, 0x2060, 0x6010, 0x2068, 0x080c, 0xac8a, 0x0158, 0x6850,
-+      0x7004, 0x2060, 0x6010, 0x2068, 0x080c, 0xacaa, 0x0158, 0x6850,
-       0xc0b5, 0x6852, 0x680c, 0x7a1c, 0xa206, 0x1120, 0x6808, 0x7a18,
-       0xa206, 0x01e0, 0x2001, 0x0105, 0x2003, 0x0010, 0x20e1, 0x9040,
--      0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x080c, 0xa95a,
--      0x20e1, 0x9040, 0x080c, 0x90ef, 0x2011, 0x0000, 0x080c, 0x8f18,
-+      0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x080c, 0xa97a,
-+      0x20e1, 0x9040, 0x080c, 0x910f, 0x2011, 0x0000, 0x080c, 0x8f31,
-       0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x0005, 0x6810, 0x6a14,
-       0xa205, 0x1d00, 0x684c, 0xc0dc, 0x684e, 0x2c10, 0x080c, 0x2068,
-       0x2001, 0x0105, 0x2003, 0x0010, 0x20e1, 0x9040, 0x7803, 0x0004,
-@@ -698,8 +699,8 @@ unsigned short risc_code01[] = { 
-       0x53a3, 0x7803, 0x0020, 0x0126, 0x2091, 0x8000, 0x7803, 0x0041,
-       0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x700b, 0xc760, 0x012e,
-       0x015e, 0x014e, 0x013e, 0x0005, 0x2099, 0x0014, 0x7803, 0x0040,
--      0x2001, 0xc765, 0x2004, 0x2010, 0x080c, 0x72ad, 0x2009, 0xc699,
--      0x2104, 0xa084, 0xfffc, 0x200a, 0x080c, 0x721f, 0x7007, 0x0000,
-+      0x2001, 0xc765, 0x2004, 0x2010, 0x080c, 0x72c6, 0x2009, 0xc699,
-+      0x2104, 0xa084, 0xfffc, 0x200a, 0x080c, 0x7238, 0x7007, 0x0000,
-       0x080c, 0x1676, 0x0005, 0x00a6, 0x0096, 0x0086, 0x6b2e, 0x6c2a,
-       0x6858, 0xa055, 0x0904, 0x24ac, 0x2d60, 0x6034, 0xa0cc, 0x000f,
-       0xa9c0, 0x23c7, 0xa986, 0x0007, 0x0130, 0xa986, 0x000e, 0x0118,
-@@ -729,7 +730,7 @@ unsigned short risc_code01[] = { 
-       0xac06, 0x1108, 0x200a, 0xa188, 0x0003, 0x1f04, 0x24e7, 0x015e,
-       0x001e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x2071, 0xc96a, 0x700c,
-       0x7110, 0xa106, 0x01b8, 0x2104, 0xa005, 0x0138, 0xa080, 0x0004,
--      0x2004, 0x2068, 0x080c, 0x7684, 0x0158, 0xa188, 0x0003, 0xa182,
-+      0x2004, 0x2068, 0x080c, 0x769d, 0x0158, 0xa188, 0x0003, 0xa182,
-       0xc992, 0x0210, 0x2009, 0xc977, 0x700c, 0xa106, 0x1d60, 0x0010,
-       0xa085, 0x0001, 0x00de, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2600,
-       0x2079, 0x0200, 0x2071, 0xcc80, 0x2069, 0xc600, 0x080c, 0x260b,
-@@ -739,16 +740,16 @@ unsigned short risc_code01[] = { 
-       0x001f, 0x20e1, 0x8700, 0x012e, 0x0005, 0x0126, 0x2091, 0x2600,
-       0x781c, 0xd0a4, 0x190c, 0x25f8, 0xa084, 0x0007, 0x0002, 0x2561,
-       0x254f, 0x2552, 0x2555, 0x255a, 0x255c, 0x255e, 0x2560, 0x080c,
--      0x68c9, 0x0078, 0x080c, 0x6916, 0x0060, 0x080c, 0x68c9, 0x080c,
--      0x6916, 0x0038, 0x0041, 0x0028, 0x0031, 0x0018, 0x0021, 0x0008,
--      0x0011, 0x012e, 0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xc59a,
-+      0x68e2, 0x0078, 0x080c, 0x692f, 0x0060, 0x080c, 0x68e2, 0x080c,
-+      0x692f, 0x0038, 0x0041, 0x0028, 0x0031, 0x0018, 0x0021, 0x0008,
-+      0x0011, 0x012e, 0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xc5c0,
-       0x7930, 0xa184, 0x0003, 0x01b0, 0x2001, 0xc936, 0x2004, 0xa005,
-       0x0170, 0x2001, 0x0133, 0x2004, 0xa005, 0x090c, 0x1519, 0x00c6,
--      0x2001, 0xc936, 0x2064, 0x080c, 0xa95a, 0x00ce, 0x04b8, 0x20e1,
-+      0x2001, 0xc936, 0x2064, 0x080c, 0xa97a, 0x00ce, 0x04b8, 0x20e1,
-       0x9040, 0x04a0, 0xa184, 0x0030, 0x01e0, 0x6a00, 0xa286, 0x0003,
--      0x1108, 0x00a0, 0x080c, 0x5f22, 0x1178, 0x2001, 0xc8e6, 0x2003,
-+      0x1108, 0x00a0, 0x080c, 0x5f3b, 0x1178, 0x2001, 0xc8e6, 0x2003,
-       0x0001, 0x2001, 0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c,
--      0x5f66, 0x080c, 0x5e5a, 0x0010, 0x080c, 0x4e5b, 0x080c, 0x25fb,
-+      0x5f7f, 0x080c, 0x5e73, 0x0010, 0x080c, 0x4e74, 0x080c, 0x25fb,
-       0x00a8, 0xa184, 0x00c0, 0x0168, 0x00e6, 0x0036, 0x0046, 0x0056,
-       0x2071, 0xc96a, 0x080c, 0x1ec3, 0x005e, 0x004e, 0x003e, 0x00ee,
-       0x0028, 0xa184, 0x0300, 0x0110, 0x20e1, 0x9020, 0x7932, 0x002e,
-@@ -780,85 +781,85 @@ unsigned short risc_code01[] = { 
-       0x0009, 0x000e, 0x00ee, 0x1138, 0x00e6, 0x783c, 0x2070, 0x7008,
-       0xd0fc, 0x00ee, 0x1130, 0xa184, 0x1e2c, 0x1118, 0xa184, 0x0007,
-       0x002a, 0xa195, 0x0004, 0xa284, 0x0007, 0x0002, 0x26b8, 0x269e,
--      0x26a1, 0x26a4, 0x26a9, 0x26ab, 0x26af, 0x26b3, 0x080c, 0x7873,
--      0x00b8, 0x080c, 0x794e, 0x00a0, 0x080c, 0x794e, 0x080c, 0x7873,
--      0x0078, 0x0099, 0x0068, 0x080c, 0x7873, 0x0079, 0x0048, 0x080c,
--      0x794e, 0x0059, 0x0028, 0x080c, 0x794e, 0x080c, 0x7873, 0x0029,
-+      0x26a1, 0x26a4, 0x26a9, 0x26ab, 0x26af, 0x26b3, 0x080c, 0x788c,
-+      0x00b8, 0x080c, 0x7967, 0x00a0, 0x080c, 0x7967, 0x080c, 0x788c,
-+      0x0078, 0x0099, 0x0068, 0x080c, 0x788c, 0x0079, 0x0048, 0x080c,
-+      0x7967, 0x0059, 0x0028, 0x080c, 0x7967, 0x080c, 0x788c, 0x0029,
-       0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x6124, 0x6028, 0xd09c,
--      0x0118, 0xd19c, 0x1904, 0x2910, 0x080c, 0x5f22, 0x0578, 0x7000,
-+      0x0118, 0xd19c, 0x1904, 0x2910, 0x080c, 0x5f3b, 0x0578, 0x7000,
-       0xa086, 0x0003, 0x0198, 0x6024, 0xa084, 0x1800, 0x0178, 0x080c,
--      0x5f48, 0x0118, 0x080c, 0x5f34, 0x1148, 0x6027, 0x0020, 0x6043,
--      0x0000, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x0458, 0x080c, 0x5f48,
-+      0x5f61, 0x0118, 0x080c, 0x5f4d, 0x1148, 0x6027, 0x0020, 0x6043,
-+      0x0000, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x0458, 0x080c, 0x5f61,
-       0x15d0, 0x6024, 0xa084, 0x1800, 0x1108, 0x04a8, 0x2001, 0xc8e5,
-       0x2003, 0xaaaa, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600,
--      0x2003, 0x0001, 0x080c, 0x5e5a, 0x0804, 0x2910, 0xd1ac, 0x1518,
-+      0x2003, 0x0001, 0x080c, 0x5e73, 0x0804, 0x2910, 0xd1ac, 0x1518,
-       0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1188, 0xd0d4, 0x11a0, 0xd0cc,
--      0x0130, 0x708c, 0xa086, 0x0028, 0x1110, 0x080c, 0x60b1, 0x0804,
-+      0x0130, 0x708c, 0xa086, 0x0028, 0x1110, 0x080c, 0x60ca, 0x0804,
-       0x2910, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x0048, 0x2001, 0xc8e6,
--      0x2003, 0x0002, 0x0020, 0x080c, 0x6024, 0x0804, 0x2910, 0x080c,
--      0x6156, 0x0804, 0x2910, 0x6220, 0xd1bc, 0x0568, 0xd2bc, 0x0558,
-+      0x2003, 0x0002, 0x0020, 0x080c, 0x603d, 0x0804, 0x2910, 0x080c,
-+      0x616f, 0x0804, 0x2910, 0x6220, 0xd1bc, 0x0568, 0xd2bc, 0x0558,
-       0x783c, 0xa005, 0x0540, 0x00e6, 0x2070, 0x7008, 0xd0fc, 0x00ee,
-       0x0510, 0x6028, 0xc0bc, 0x602a, 0x0026, 0x0036, 0x6288, 0x638c,
-       0x608b, 0xbc91, 0x608f, 0xffff, 0x6043, 0x0001, 0xe000, 0xe000,
-       0x6027, 0x0080, 0x6017, 0x0000, 0x6043, 0x0000, 0x628a, 0x638e,
-       0x003e, 0x002e, 0x0016, 0x2001, 0xc696, 0x200c, 0xc184, 0x2102,
-       0x001e, 0x0804, 0x2969, 0xd1ac, 0x0904, 0x284c, 0x0036, 0x6328,
--      0xc3bc, 0x632a, 0x003e, 0x080c, 0x5f22, 0x11d8, 0x6027, 0x0020,
--      0x0006, 0x0026, 0x0036, 0x080c, 0x5f3e, 0x1170, 0x2001, 0xc8e6,
--      0x2003, 0x0001, 0x2001, 0xc600, 0x2003, 0x0001, 0x080c, 0x5e5a,
-+      0xc3bc, 0x632a, 0x003e, 0x080c, 0x5f3b, 0x11d8, 0x6027, 0x0020,
-+      0x0006, 0x0026, 0x0036, 0x080c, 0x5f57, 0x1170, 0x2001, 0xc8e6,
-+      0x2003, 0x0001, 0x2001, 0xc600, 0x2003, 0x0001, 0x080c, 0x5e73,
-       0x003e, 0x002e, 0x000e, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c,
--      0x5ef9, 0x0016, 0x0046, 0x00c6, 0x644c, 0xa486, 0xf0f0, 0x1138,
-+      0x5f12, 0x0016, 0x0046, 0x00c6, 0x644c, 0xa486, 0xf0f0, 0x1138,
-       0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74ce,
-       0xa48c, 0xff00, 0x7034, 0xd084, 0x0178, 0xa186, 0xf800, 0x1160,
-       0x703c, 0xd084, 0x1148, 0xc085, 0x703e, 0x0036, 0x2418, 0x2011,
--      0x8016, 0x080c, 0x407d, 0x003e, 0xa196, 0xff00, 0x05b8, 0x7054,
-+      0x8016, 0x080c, 0x4096, 0x003e, 0xa196, 0xff00, 0x05b8, 0x7054,
-       0xa084, 0x00ff, 0x810f, 0xa116, 0x0588, 0x7130, 0xd184, 0x1570,
-       0x2011, 0xc653, 0x2214, 0xd2ec, 0x0138, 0xc18d, 0x7132, 0x2011,
-       0xc653, 0x2214, 0xd2ac, 0x1510, 0x6240, 0xa294, 0x0010, 0x0130,
-       0x6248, 0xa294, 0xff00, 0xa296, 0xff00, 0x01c0, 0x7030, 0xd08c,
-       0x0904, 0x2819, 0x7034, 0xd08c, 0x1140, 0x2001, 0xc60c, 0x200c,
-       0xd1ac, 0x1904, 0x2819, 0xc1ad, 0x2102, 0x0036, 0x73cc, 0x2011,
--      0x8013, 0x080c, 0x407d, 0x003e, 0x0804, 0x2819, 0x7034, 0xd08c,
-+      0x8013, 0x080c, 0x4096, 0x003e, 0x0804, 0x2819, 0x7034, 0xd08c,
-       0x1140, 0x2001, 0xc60c, 0x200c, 0xd1ac, 0x1904, 0x2819, 0xc1ad,
--      0x2102, 0x0036, 0x73cc, 0x2011, 0x8013, 0x080c, 0x407d, 0x003e,
-+      0x2102, 0x0036, 0x73cc, 0x2011, 0x8013, 0x080c, 0x4096, 0x003e,
-       0x7130, 0xc185, 0x7132, 0x2011, 0xc653, 0x220c, 0xd1a4, 0x01d0,
--      0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x712e, 0x2019,
--      0x000e, 0x080c, 0xc100, 0xa484, 0x00ff, 0xa080, 0x2f6e, 0x200d,
-+      0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x7147, 0x2019,
-+      0x000e, 0x080c, 0xc126, 0xa484, 0x00ff, 0xa080, 0x2f6e, 0x200d,
-       0xa18c, 0xff00, 0x810f, 0x8127, 0xa006, 0x2009, 0x000e, 0x080c,
--      0xc183, 0x001e, 0x0016, 0x2009, 0x0000, 0x2019, 0x0004, 0x080c,
-+      0xc1a9, 0x001e, 0x0016, 0x2009, 0x0000, 0x2019, 0x0004, 0x080c,
-       0x2e19, 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000,
--      0x080c, 0x533d, 0x1110, 0x080c, 0x4f47, 0x8108, 0x1f04, 0x2810,
--      0x015e, 0x00ce, 0x004e, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011,
--      0x0002, 0x080c, 0x8f18, 0x080c, 0x8dee, 0x0036, 0x2019, 0x0000,
--      0x080c, 0x8e79, 0x003e, 0x60e3, 0x0000, 0x001e, 0x2001, 0xc600,
-+      0x080c, 0x5356, 0x1110, 0x080c, 0x4f60, 0x8108, 0x1f04, 0x2810,
-+      0x015e, 0x00ce, 0x004e, 0x2011, 0x0003, 0x080c, 0x8f27, 0x2011,
-+      0x0002, 0x080c, 0x8f31, 0x080c, 0x8e07, 0x0036, 0x2019, 0x0000,
-+      0x080c, 0x8e92, 0x003e, 0x60e3, 0x0000, 0x001e, 0x2001, 0xc600,
-       0x2014, 0xa296, 0x0004, 0x1128, 0xd19c, 0x11b0, 0x6228, 0xc29d,
-       0x622a, 0x2003, 0x0001, 0x2001, 0xc623, 0x2003, 0x0000, 0x6027,
--      0x0020, 0x080c, 0x5f48, 0x1140, 0x0016, 0x2009, 0x07d0, 0x2011,
--      0x5e37, 0x080c, 0x7036, 0x001e, 0xd194, 0x0904, 0x2910, 0x0016,
--      0x6220, 0xd2b4, 0x0904, 0x28b5, 0x080c, 0x7024, 0x080c, 0x8bf5,
-+      0x0020, 0x080c, 0x5f61, 0x1140, 0x0016, 0x2009, 0x07d0, 0x2011,
-+      0x5e50, 0x080c, 0x704f, 0x001e, 0xd194, 0x0904, 0x2910, 0x0016,
-+      0x6220, 0xd2b4, 0x0904, 0x28b5, 0x080c, 0x703d, 0x080c, 0x8c0e,
-       0x6027, 0x0004, 0x00f6, 0x2019, 0xc930, 0x2304, 0xa07d, 0x0570,
-       0x7804, 0xa086, 0x0032, 0x1550, 0x00d6, 0x00c6, 0x00e6, 0x2069,
-       0x0140, 0x618c, 0x6288, 0x7818, 0x608e, 0x7808, 0x608a, 0x6043,
-       0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x6803,
--      0x1000, 0x6803, 0x0000, 0x618e, 0x628a, 0x080c, 0x7db1, 0x080c,
--      0x7e94, 0x7810, 0x2070, 0x7037, 0x0103, 0x2f60, 0x080c, 0x95dc,
-+      0x1000, 0x6803, 0x0000, 0x618e, 0x628a, 0x080c, 0x7dca, 0x080c,
-+      0x7ead, 0x7810, 0x2070, 0x7037, 0x0103, 0x2f60, 0x080c, 0x95fc,
-       0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x0005, 0x00fe, 0x00d6,
-       0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0120, 0x6803, 0x1000,
-       0x6803, 0x0000, 0x00de, 0x00c6, 0x2061, 0xc927, 0x6028, 0xa09a,
--      0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0x8be8, 0x0804,
-+      0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0x8c01, 0x0804,
-       0x290f, 0x2019, 0xc930, 0x2304, 0xa065, 0x0120, 0x2009, 0x0027,
--      0x080c, 0x960c, 0x00ce, 0x0804, 0x290f, 0xd2bc, 0x0904, 0x290f,
--      0x080c, 0x7031, 0x6014, 0xa084, 0x0184, 0xa085, 0x0010, 0x6016,
-+      0x080c, 0x962c, 0x00ce, 0x0804, 0x290f, 0xd2bc, 0x0904, 0x290f,
-+      0x080c, 0x704a, 0x6014, 0xa084, 0x0184, 0xa085, 0x0010, 0x6016,
-       0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000,
-       0x0120, 0x6803, 0x1000, 0x6803, 0x0000, 0x00de, 0x00c6, 0x2061,
-       0xc927, 0x6044, 0xa09a, 0x00c8, 0x1620, 0x8000, 0x6046, 0x603c,
--      0x00ce, 0xa005, 0x05a0, 0x2009, 0x07d0, 0x080c, 0x7029, 0xa080,
-+      0x00ce, 0xa005, 0x05a0, 0x2009, 0x07d0, 0x080c, 0x7042, 0xa080,
-       0x0007, 0x2004, 0xa086, 0x0006, 0x1138, 0x6114, 0xa18c, 0x0184,
-       0xa18d, 0x0012, 0x6116, 0x0418, 0xa080, 0x0007, 0x2004, 0xa086,
-       0x0009, 0x0d98, 0x6114, 0xa18c, 0x0184, 0xa18d, 0x0016, 0x6116,
--      0x00b0, 0x0036, 0x2019, 0x0001, 0x080c, 0x8e79, 0x003e, 0x2019,
-+      0x00b0, 0x0036, 0x2019, 0x0001, 0x080c, 0x8e92, 0x003e, 0x2019,
-       0xc936, 0x2304, 0xa065, 0x0150, 0x2009, 0x004f, 0x601c, 0xa086,
--      0x0009, 0x1110, 0x2009, 0x0105, 0x080c, 0x960c, 0x00ce, 0x001e,
-+      0x0009, 0x1110, 0x2009, 0x0105, 0x080c, 0x962c, 0x00ce, 0x001e,
-       0xd19c, 0x0904, 0x2969, 0x7034, 0xd0ac, 0x1560, 0x0016, 0x0156,
-       0x6027, 0x0008, 0x602f, 0x0020, 0x20a9, 0x0006, 0x1d04, 0x291e,
-       0x2091, 0x6000, 0x1f04, 0x291e, 0x602f, 0x0000, 0x6150, 0xa185,
-@@ -866,16 +867,16 @@ unsigned short risc_code01[] = { 
-       0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008,
-       0x0480, 0x080c, 0x2ab1, 0x1f04, 0x292c, 0x015e, 0x6152, 0x001e,
-       0x6027, 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003,
--      0x080c, 0x8f0e, 0x2011, 0x0002, 0x080c, 0x8f18, 0x080c, 0x8dee,
--      0x0036, 0x2019, 0x0000, 0x080c, 0x8e79, 0x003e, 0x60e3, 0x0000,
--      0x080c, 0xc579, 0x080c, 0xc594, 0xa085, 0x0001, 0x080c, 0x5f66,
-+      0x080c, 0x8f27, 0x2011, 0x0002, 0x080c, 0x8f31, 0x080c, 0x8e07,
-+      0x0036, 0x2019, 0x0000, 0x080c, 0x8e92, 0x003e, 0x60e3, 0x0000,
-+      0x080c, 0xc59f, 0x080c, 0xc5ba, 0xa085, 0x0001, 0x080c, 0x5f7f,
-       0x2001, 0xc600, 0x2003, 0x0004, 0x6027, 0x0008, 0x080c, 0x12e1,
-       0x001e, 0xa18c, 0xffd0, 0x6126, 0x0005, 0x0006, 0x0016, 0x0026,
-       0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2071, 0xc600, 0x71c4,
-       0x70c6, 0xa116, 0x0500, 0x81ff, 0x0128, 0x2011, 0x8011, 0x080c,
--      0x407d, 0x00c8, 0x2011, 0x8012, 0x080c, 0x407d, 0x2001, 0xc672,
-+      0x4096, 0x00c8, 0x2011, 0x8012, 0x080c, 0x4096, 0x2001, 0xc672,
-       0x2004, 0xd0fc, 0x1180, 0x0036, 0x00c6, 0x080c, 0x2a3c, 0x080c,
--      0x8dca, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0000, 0x080c,
-+      0x8de3, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0000, 0x080c,
-       0x2e19, 0x00ce, 0x003e, 0x012e, 0x00fe, 0x00ee, 0x002e, 0x001e,
-       0x000e, 0x0005, 0x00c6, 0x00f6, 0x0006, 0x0026, 0x2061, 0x0100,
-       0xa190, 0x29b5, 0x2205, 0x60f2, 0x2011, 0x29c2, 0x2205, 0x60ee,
-@@ -883,13 +884,13 @@ unsigned short risc_code01[] = { 
-       0x0580, 0x0420, 0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8,
-       0x01a8, 0x01a8, 0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0x2028,
-       0xa18c, 0x00ff, 0x2130, 0xa094, 0xff00, 0x1110, 0x81ff, 0x0118,
--      0x080c, 0x6be0, 0x0038, 0xa080, 0x2f6e, 0x200d, 0xa18c, 0xff00,
-+      0x080c, 0x6bf9, 0x0038, 0xa080, 0x2f6e, 0x200d, 0xa18c, 0xff00,
-       0x810f, 0xa006, 0x0005, 0xa080, 0x2f6e, 0x200d, 0xa18c, 0x00ff,
-       0x0005, 0x00d6, 0x2069, 0x0140, 0x2001, 0xc615, 0x2003, 0x00ef,
-       0x20a9, 0x0010, 0xa006, 0x6852, 0x6856, 0x1f04, 0x29ec, 0x00de,
-       0x0005, 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0xc615,
-       0x2102, 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853,
--      0x0000, 0xa006, 0x82ff, 0x1128, 0xa184, 0x000f, 0xa080, 0xc5a8,
-+      0x0000, 0xa006, 0x82ff, 0x1128, 0xa184, 0x000f, 0xa080, 0xc5ce,
-       0x2005, 0x6856, 0x8211, 0x1f04, 0x2a01, 0x002e, 0x00de, 0x000e,
-       0x0005, 0x00c6, 0x2061, 0xc600, 0x6030, 0x0110, 0xc09d, 0x0008,
-       0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016,
-@@ -898,12 +899,12 @@ unsigned short risc_code01[] = { 
-       0x0404, 0x680e, 0x1f04, 0x2a31, 0x680f, 0x0000, 0x000e, 0x001e,
-       0x002e, 0x00de, 0x015e, 0x0005, 0x2001, 0xc653, 0x2004, 0xd0c4,
-       0x0150, 0xd0a4, 0x0140, 0xa006, 0x0046, 0x2020, 0x2009, 0x002e,
--      0x080c, 0xc183, 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079,
-+      0x080c, 0xc1a9, 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079,
-       0x0140, 0x78c4, 0xd0dc, 0x0548, 0xa084, 0x0700, 0xa08e, 0x0300,
-       0x1520, 0x2011, 0x0000, 0x2009, 0x0002, 0x2300, 0xa080, 0x0020,
--      0x2018, 0x2300, 0x080c, 0x783f, 0x2011, 0x0030, 0x2200, 0x8007,
-+      0x2018, 0x2300, 0x080c, 0x7858, 0x2011, 0x0030, 0x2200, 0x8007,
-       0xa085, 0x004c, 0x78c2, 0x2009, 0x0204, 0x210c, 0x2200, 0xa100,
--      0x2009, 0x0138, 0x200a, 0x080c, 0x5f22, 0x1118, 0x2009, 0xc8d6,
-+      0x2009, 0x0138, 0x200a, 0x080c, 0x5f3b, 0x1118, 0x2009, 0xc8d6,
-       0x200a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8,
-       0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170,
-       0x200c, 0x8000, 0x2014, 0xa184, 0x0003, 0x0110, 0x0804, 0x1b81,
-@@ -966,10 +967,10 @@ unsigned short risc_code01[] = { 
-       0x080c, 0x2664, 0x080c, 0x24b2, 0x080c, 0x253d, 0x0040, 0x20d1,
-       0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c, 0x1519, 0x000e,
-       0x010e, 0x000d, 0x00c6, 0x0026, 0x0046, 0x2021, 0x0000, 0x080c,
--      0x570b, 0x1904, 0x2d3f, 0x72d4, 0x2001, 0xc8e5, 0x2004, 0xa005,
-+      0x5724, 0x1904, 0x2d3f, 0x72d4, 0x2001, 0xc8e5, 0x2004, 0xa005,
-       0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, 0x2d3f,
-       0x080c, 0x2d43, 0x0804, 0x2d3f, 0xd2cc, 0x1904, 0x2d3f, 0x080c,
--      0x5f22, 0x1120, 0x709f, 0xffff, 0x0804, 0x2d3f, 0xd294, 0x0120,
-+      0x5f3b, 0x1120, 0x709f, 0xffff, 0x0804, 0x2d3f, 0xd294, 0x0120,
-       0x709f, 0xffff, 0x0804, 0x2d3f, 0x2001, 0xc615, 0x203c, 0x7288,
-       0xd284, 0x0904, 0x2ce1, 0xd28c, 0x1904, 0x2ce1, 0x0036, 0x739c,
-       0xa38e, 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0xa2e0, 0xcdc0,
-@@ -977,7 +978,7 @@ unsigned short risc_code01[] = { 
-       0xa084, 0x00ff, 0xa70e, 0x0560, 0xa08e, 0x0000, 0x0548, 0xa08e,
-       0x00ff, 0x1150, 0x7230, 0xd284, 0x1538, 0x7288, 0xc28d, 0x728a,
-       0x709f, 0xffff, 0x003e, 0x0428, 0x2009, 0x0000, 0x080c, 0x29c7,
--      0x080c, 0x52e1, 0x11b8, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-+      0x080c, 0x52fa, 0x11b8, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-       0x1150, 0x7030, 0xd08c, 0x0118, 0x6000, 0xd0bc, 0x0120, 0x080c,
-       0x2d56, 0x0140, 0x0028, 0x080c, 0x2e87, 0x080c, 0x2d84, 0x0110,
-       0x8318, 0x0818, 0x739e, 0x0010, 0x709f, 0xffff, 0x003e, 0x0804,
-@@ -985,51 +986,51 @@ unsigned short risc_code01[] = { 
-       0x007e, 0x709c, 0xa096, 0xffff, 0x1120, 0x2009, 0x0000, 0x28a8,
-       0x0050, 0xa812, 0x0220, 0x2008, 0xa802, 0x20a8, 0x0020, 0x709f,
-       0xffff, 0x0804, 0x2d3f, 0x2700, 0x0156, 0x0016, 0xa106, 0x05a0,
--      0xc484, 0x080c, 0x533d, 0x0120, 0x080c, 0x52e1, 0x15a8, 0x0008,
-+      0xc484, 0x080c, 0x5356, 0x0120, 0x080c, 0x52fa, 0x15a8, 0x0008,
-       0xc485, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1130, 0x7030,
-       0xd08c, 0x01e8, 0x6000, 0xd0bc, 0x11d0, 0x7288, 0xd28c, 0x0188,
-       0x6004, 0xa084, 0x00ff, 0xa082, 0x0006, 0x02b0, 0xd484, 0x1118,
--      0x080c, 0x5300, 0x0028, 0x080c, 0x2f14, 0x0170, 0x080c, 0x2f41,
-+      0x080c, 0x5319, 0x0028, 0x080c, 0x2f14, 0x0170, 0x080c, 0x2f41,
-       0x0058, 0x080c, 0x2e87, 0x080c, 0x2d84, 0x0170, 0x0028, 0x080c,
-       0x2f14, 0x0110, 0x0419, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04,
-       0x2cfb, 0x709f, 0xffff, 0x0018, 0x001e, 0x015e, 0x719e, 0x004e,
-       0x002e, 0x00ce, 0x0005, 0x00c6, 0x0016, 0x709f, 0x0001, 0x2009,
--      0x007e, 0x080c, 0x52e1, 0x1138, 0x080c, 0x2e87, 0x04a9, 0x0118,
-+      0x007e, 0x080c, 0x52fa, 0x1138, 0x080c, 0x2e87, 0x04a9, 0x0118,
-       0x70d4, 0xc0bd, 0x70d6, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076,
-       0x00d6, 0x00c6, 0x2c68, 0x2001, 0xc657, 0x2004, 0xa084, 0x00ff,
--      0x6842, 0x080c, 0xaf06, 0x01d8, 0x2d00, 0x601a, 0x080c, 0xb057,
--      0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x527f, 0x2001, 0x0000,
--      0x080c, 0x5291, 0x0126, 0x2091, 0x8000, 0x7098, 0x8000, 0x709a,
--      0x012e, 0x2009, 0x0004, 0x080c, 0x960c, 0xa085, 0x0001, 0x00ce,
-+      0x6842, 0x080c, 0xaf26, 0x01d8, 0x2d00, 0x601a, 0x080c, 0xb077,
-+      0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x5298, 0x2001, 0x0000,
-+      0x080c, 0x52aa, 0x0126, 0x2091, 0x8000, 0x7098, 0x8000, 0x709a,
-+      0x012e, 0x2009, 0x0004, 0x080c, 0x962c, 0xa085, 0x0001, 0x00ce,
-       0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
-       0x2c68, 0x2001, 0xc657, 0x2004, 0xa084, 0x00ff, 0x6842, 0x080c,
--      0xaf06, 0x0550, 0x2d00, 0x601a, 0x6800, 0xc0c4, 0x6802, 0x68a0,
-+      0xaf26, 0x0550, 0x2d00, 0x601a, 0x6800, 0xc0c4, 0x6802, 0x68a0,
-       0xa086, 0x007e, 0x0140, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006,
--      0x1110, 0x080c, 0x2e46, 0x080c, 0xb057, 0x601f, 0x0001, 0x2001,
--      0x0000, 0x080c, 0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x0126,
-+      0x1110, 0x080c, 0x2e46, 0x080c, 0xb077, 0x601f, 0x0001, 0x2001,
-+      0x0000, 0x080c, 0x5298, 0x2001, 0x0002, 0x080c, 0x52aa, 0x0126,
-       0x2091, 0x8000, 0x7098, 0x8000, 0x709a, 0x012e, 0x2009, 0x0002,
--      0x080c, 0x960c, 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,
--      0x0005, 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x52e1, 0x1120,
-+      0x080c, 0x962c, 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,
-+      0x0005, 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x52fa, 0x1120,
-       0x0031, 0x0110, 0x70db, 0xffff, 0x002e, 0x00ce, 0x0005, 0x0016,
--      0x0076, 0x00d6, 0x00c6, 0x2c68, 0x080c, 0x9586, 0x01e8, 0x2d00,
--      0x601a, 0x080c, 0xb057, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c,
--      0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x0126, 0x2091, 0x8000,
-+      0x0076, 0x00d6, 0x00c6, 0x2c68, 0x080c, 0x95a6, 0x01e8, 0x2d00,
-+      0x601a, 0x080c, 0xb077, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c,
-+      0x5298, 0x2001, 0x0002, 0x080c, 0x52aa, 0x0126, 0x2091, 0x8000,
-       0x080c, 0x2e46, 0x70dc, 0x8000, 0x70de, 0x012e, 0x2009, 0x0002,
--      0x080c, 0x960c, 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,
-+      0x080c, 0x962c, 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,
-       0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f,
--      0x080c, 0x52e1, 0x1190, 0x2c68, 0x080c, 0x9586, 0x0170, 0x2d00,
--      0x601a, 0x6312, 0x601f, 0x0001, 0x620a, 0x080c, 0xb057, 0x2009,
--      0x0022, 0x080c, 0x960c, 0xa085, 0x0001, 0x012e, 0x00de, 0x00ce,
--      0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x080c, 0x7b22,
--      0x080c, 0x7abb, 0x080c, 0xa089, 0x2130, 0x81ff, 0x0128, 0x20a9,
-+      0x080c, 0x52fa, 0x1190, 0x2c68, 0x080c, 0x95a6, 0x0170, 0x2d00,
-+      0x601a, 0x6312, 0x601f, 0x0001, 0x620a, 0x080c, 0xb077, 0x2009,
-+      0x0022, 0x080c, 0x962c, 0xa085, 0x0001, 0x012e, 0x00de, 0x00ce,
-+      0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x080c, 0x7b3b,
-+      0x080c, 0x7ad4, 0x080c, 0xa0a9, 0x2130, 0x81ff, 0x0128, 0x20a9,
-       0x007e, 0x2009, 0x0000, 0x0020, 0x20a9, 0x007f, 0x2009, 0x0000,
--      0x0016, 0x080c, 0x533d, 0x1120, 0x080c, 0x553e, 0x080c, 0x4f47,
-+      0x0016, 0x080c, 0x5356, 0x1120, 0x080c, 0x5557, 0x080c, 0x4f60,
-       0x001e, 0x8108, 0x1f04, 0x2e30, 0x86ff, 0x1110, 0x080c, 0x11f4,
-       0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6,
-       0x0036, 0x0026, 0x0016, 0x6218, 0x2270, 0x72a0, 0x0026, 0x2019,
--      0x0029, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e,
--      0x2c08, 0x080c, 0xbeea, 0x007e, 0x001e, 0x2e60, 0x080c, 0x553e,
--      0x6210, 0x6314, 0x080c, 0x4f47, 0x6212, 0x6316, 0x001e, 0x002e,
-+      0x0029, 0x080c, 0x7b2f, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a27,
-+      0x2c08, 0x080c, 0xbf10, 0x007e, 0x001e, 0x2e60, 0x080c, 0x5557,
-+      0x6210, 0x6314, 0x080c, 0x4f60, 0x6212, 0x6316, 0x001e, 0x002e,
-       0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x6018, 0xa080,
-       0x0028, 0x2004, 0xa086, 0x0080, 0x0150, 0x2071, 0xc600, 0x7098,
-       0xa005, 0x0110, 0x8001, 0x709a, 0x000e, 0x00ee, 0x0005, 0x2071,
-@@ -1037,20 +1038,20 @@ unsigned short risc_code01[] = { 
-       0xc08c, 0x6002, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0036, 0x0026,
-       0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0098,
-       0x2001, 0xc653, 0x2004, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0xa006,
--      0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xc183, 0x004e, 0x20a9,
-+      0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xc1a9, 0x004e, 0x20a9,
-       0x00ff, 0x2011, 0x0000, 0x0026, 0xa28e, 0x007e, 0x0904, 0x2ef3,
-       0xa28e, 0x007f, 0x0904, 0x2ef3, 0xa28e, 0x0080, 0x05e0, 0xa288,
-       0xc77b, 0x210c, 0x81ff, 0x05b8, 0x8fff, 0x1148, 0x2001, 0xc905,
-       0x0006, 0x2003, 0x0001, 0x04d9, 0x000e, 0x2003, 0x0000, 0x00c6,
--      0x2160, 0x2001, 0x0001, 0x080c, 0x5715, 0x00ce, 0x2019, 0x0029,
--      0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e, 0x00c6,
-+      0x2160, 0x2001, 0x0001, 0x080c, 0x572e, 0x00ce, 0x2019, 0x0029,
-+      0x080c, 0x7b2f, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a27, 0x00c6,
-       0x0026, 0x2160, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006, 0x1118,
-       0x6007, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0xa215, 0x6206,
--      0x002e, 0x00ce, 0x0016, 0x2c08, 0x080c, 0xbeea, 0x001e, 0x007e,
--      0x2160, 0x080c, 0x553e, 0x002e, 0x8210, 0x1f04, 0x2eab, 0x015e,
-+      0x002e, 0x00ce, 0x0016, 0x2c08, 0x080c, 0xbf10, 0x001e, 0x007e,
-+      0x2160, 0x080c, 0x5557, 0x002e, 0x8210, 0x1f04, 0x2eab, 0x015e,
-       0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046,
-       0x0026, 0x0016, 0x2001, 0xc653, 0x2004, 0xd0c4, 0x0148, 0xd0a4,
--      0x0138, 0xa006, 0x2220, 0x8427, 0x2009, 0x0029, 0x080c, 0xc183,
-+      0x0138, 0xa006, 0x2220, 0x8427, 0x2009, 0x0029, 0x080c, 0xc1a9,
-       0x001e, 0x002e, 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6,
-       0x7288, 0x82ff, 0x01f8, 0x2011, 0xc653, 0x2214, 0xd2ac, 0x11d0,
-       0x2100, 0x080c, 0x29db, 0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314,
-@@ -1058,10 +1059,10 @@ unsigned short risc_code01[] = { 
-       0x0010, 0xa084, 0x00ff, 0xa116, 0x0138, 0xa096, 0x00ff, 0x0110,
-       0x8318, 0x0c68, 0xa085, 0x0001, 0x00ce, 0x003e, 0x002e, 0x001e,
-       0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, 0x0026,
--      0x0036, 0x2110, 0x0026, 0x2019, 0x0029, 0x080c, 0x912b, 0x002e,
--      0x080c, 0xc4d7, 0x003e, 0x002e, 0x001e, 0xa180, 0xc77b, 0x2004,
-+      0x0036, 0x2110, 0x0026, 0x2019, 0x0029, 0x080c, 0x914b, 0x002e,
-+      0x080c, 0xc4fd, 0x003e, 0x002e, 0x001e, 0xa180, 0xc77b, 0x2004,
-       0xa065, 0x0158, 0x0016, 0x00c6, 0x2061, 0xca3c, 0x001e, 0x611a,
--      0x080c, 0x2e46, 0x001e, 0x080c, 0x5300, 0x012e, 0x00ce, 0x001e,
-+      0x080c, 0x2e46, 0x001e, 0x080c, 0x5319, 0x012e, 0x00ce, 0x001e,
-       0x0005, 0x2001, 0xc635, 0x2004, 0xd0cc, 0x0005, 0x7eef, 0x7de8,
-       0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6,
-       0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc,
-@@ -1116,89 +1117,89 @@ unsigned short risc_code01[] = { 
-       0x3170, 0x3170, 0x3170, 0x3170, 0x342c, 0x3170, 0x3170, 0x3170,
-       0x3170, 0x3170, 0x343e, 0x3448, 0x3170, 0x3170, 0x3170, 0x3170,
-       0x3170, 0x3170, 0x0002, 0x3472, 0x34c6, 0x3521, 0x353b, 0x3170,
--      0x356c, 0x399f, 0x456f, 0x3170, 0x3170, 0x3170, 0x3170, 0x3170,
-+      0x356c, 0x399f, 0x4588, 0x3170, 0x3170, 0x3170, 0x3170, 0x3170,
-       0x3170, 0x3170, 0x3170, 0x31b6, 0x31b9, 0x39a1, 0x3170, 0x39ae,
--      0x4608, 0x4663, 0x46c7, 0x3170, 0x472a, 0x4754, 0x4773, 0x47a5,
-+      0x4621, 0x467c, 0x46e0, 0x3170, 0x4743, 0x476d, 0x478c, 0x47be,
-       0x3170, 0x3170, 0x3170, 0x39b2, 0x3b57, 0x3b71, 0x3b8f, 0x3bf0,
--      0x3c50, 0x3c5b, 0x3c93, 0x3ca2, 0x3cb1, 0x3cb4, 0x3cd7, 0x3d21,
--      0x3d97, 0x3da4, 0x3ea5, 0x3fd4, 0x3ffd, 0x40fb, 0x411d, 0x4129,
--      0x4162, 0x4232, 0x428c, 0x4352, 0x43a4, 0x4404, 0x4419, 0x4434,
--      0x44a6, 0x4558, 0x713c, 0x0000, 0x2021, 0x4000, 0x080c, 0x405a,
-+      0x3c50, 0x3c5b, 0x3c93, 0x3ca2, 0x3cb1, 0x3cb4, 0x3cd7, 0x3d23,
-+      0x3d99, 0x3da6, 0x3ea7, 0x3fed, 0x4016, 0x4114, 0x4136, 0x4142,
-+      0x417b, 0x424b, 0x42a5, 0x436b, 0x43bd, 0x441d, 0x4432, 0x444d,
-+      0x44bf, 0x4571, 0x713c, 0x0000, 0x2021, 0x4000, 0x080c, 0x4073,
-       0x0126, 0x2091, 0x8000, 0x0e04, 0x3160, 0x7818, 0xd084, 0x0110,
-       0x012e, 0x0cb0, 0x7c22, 0x7926, 0x7a2a, 0x7b2e, 0x781b, 0x0001,
-       0x2091, 0x4080, 0x7007, 0x0001, 0x2091, 0x5000, 0x012e, 0x0005,
-       0x2021, 0x4001, 0x0c18, 0x2021, 0x4002, 0x0c00, 0x2021, 0x4003,
-       0x08e8, 0x2021, 0x4005, 0x08d0, 0x2021, 0x4006, 0x08b8, 0xa02e,
--      0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0804, 0x4067, 0x7823,
-+      0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0804, 0x4080, 0x7823,
-       0x0004, 0x7824, 0x0807, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824,
--      0x7930, 0x0804, 0x406a, 0x7924, 0x7828, 0x2114, 0x200a, 0x0804,
-+      0x7930, 0x0804, 0x4083, 0x7924, 0x7828, 0x2114, 0x200a, 0x0804,
-       0x3154, 0x7924, 0x2114, 0x0804, 0x3154, 0x2099, 0x0009, 0x20a1,
-       0x0009, 0x20a9, 0x0007, 0x53a3, 0x7924, 0x7a28, 0x7b2c, 0x0804,
-       0x3154, 0x7824, 0x2060, 0x0090, 0x2009, 0x0002, 0x2011, 0x0002,
--      0x2019, 0x0004, 0x783b, 0x0037, 0x0804, 0x3154, 0x7d38, 0x7c3c,
-+      0x2019, 0x0006, 0x783b, 0x0037, 0x0804, 0x3154, 0x7d38, 0x7c3c,
-       0x0840, 0x7d38, 0x7c3c, 0x0888, 0x2061, 0x1000, 0xe10c, 0xa006,
-       0x2c15, 0xa200, 0x8c60, 0x8109, 0x1dd8, 0x2010, 0xa005, 0x0904,
-       0x3154, 0x0804, 0x3176, 0x2069, 0xc652, 0x7824, 0x7930, 0xa11a,
-       0x1a04, 0x317c, 0x8019, 0x0904, 0x317c, 0x684a, 0x6942, 0x782c,
--      0x6852, 0x7828, 0x6856, 0xa006, 0x685a, 0x685e, 0x080c, 0x61f8,
-+      0x6852, 0x7828, 0x6856, 0xa006, 0x685a, 0x685e, 0x080c, 0x6211,
-       0x0804, 0x3154, 0x2069, 0xc652, 0x7824, 0x7934, 0xa11a, 0x1a04,
-       0x317c, 0x8019, 0x0904, 0x317c, 0x684e, 0x6946, 0x782c, 0x6862,
--      0x7828, 0x6866, 0xa006, 0x686a, 0x686e, 0x080c, 0x57d7, 0x0804,
-+      0x7828, 0x6866, 0xa006, 0x686a, 0x686e, 0x080c, 0x57f0, 0x0804,
-       0x3154, 0xa02e, 0x2520, 0x81ff, 0x1904, 0x3179, 0x7924, 0x7b28,
--      0x7a2c, 0x20a9, 0x0005, 0x20a1, 0xc6a9, 0x41a1, 0x080c, 0x4026,
--      0x0904, 0x3179, 0x2009, 0x0020, 0x080c, 0x4067, 0x701b, 0x3211,
-+      0x7a2c, 0x20a9, 0x0005, 0x20a1, 0xc6a9, 0x41a1, 0x080c, 0x403f,
-+      0x0904, 0x3179, 0x2009, 0x0020, 0x080c, 0x4080, 0x701b, 0x3211,
-       0x0005, 0x6834, 0x2008, 0xa084, 0x00ff, 0xa096, 0x0011, 0x0138,
-       0xa096, 0x0019, 0x0120, 0xa096, 0x0015, 0x1904, 0x3179, 0x810f,
-       0xa18c, 0x00ff, 0x0904, 0x3179, 0x710e, 0x700c, 0x8001, 0x0528,
--      0x700e, 0x080c, 0x4026, 0x0904, 0x3179, 0x2009, 0x0020, 0x2061,
-+      0x700e, 0x080c, 0x403f, 0x0904, 0x3179, 0x2009, 0x0020, 0x2061,
-       0xc6f2, 0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399,
--      0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x080c, 0x4067, 0x701b,
-+      0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x080c, 0x4080, 0x701b,
-       0x3242, 0x0005, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0120,
-       0xa096, 0x000a, 0x1904, 0x3179, 0x08c0, 0x7010, 0x2068, 0x6838,
--      0xc0fd, 0x683a, 0x080c, 0x51dd, 0x1128, 0x7007, 0x0003, 0x701b,
--      0x325c, 0x0005, 0x080c, 0x592e, 0x0126, 0x2091, 0x8000, 0x20a9,
-+      0xc0fd, 0x683a, 0x080c, 0x51f6, 0x1128, 0x7007, 0x0003, 0x701b,
-+      0x325c, 0x0005, 0x080c, 0x5947, 0x0126, 0x2091, 0x8000, 0x20a9,
-       0x0005, 0x2099, 0xc6a9, 0x530a, 0x2100, 0xa210, 0xa399, 0x0000,
-       0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d, 0x2009, 0x0020,
--      0x012e, 0x0804, 0x406a, 0x61ac, 0x7824, 0x60ae, 0x0804, 0x3154,
-+      0x012e, 0x0804, 0x4083, 0x61ac, 0x7824, 0x60ae, 0x0804, 0x3154,
-       0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953, 0x782b, 0x5020,
-       0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832, 0x3f00, 0x7836,
-       0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0xa205,
-       0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b, 0x0001, 0x2091,
-       0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1, 0x00f0, 0x0804,
-       0x0427, 0x81ff, 0x1904, 0x3179, 0x7924, 0x810f, 0xa18c, 0x00ff,
--      0x080c, 0x533d, 0x1904, 0x317c, 0x7e38, 0xa684, 0x3fff, 0xa082,
--      0x4000, 0x0210, 0x0804, 0x317c, 0x7c28, 0x7d2c, 0x080c, 0x5505,
--      0xd28c, 0x1118, 0x080c, 0x54ae, 0x0010, 0x080c, 0x54de, 0x1518,
-+      0x080c, 0x5356, 0x1904, 0x317c, 0x7e38, 0xa684, 0x3fff, 0xa082,
-+      0x4000, 0x0210, 0x0804, 0x317c, 0x7c28, 0x7d2c, 0x080c, 0x551e,
-+      0xd28c, 0x1118, 0x080c, 0x54c7, 0x0010, 0x080c, 0x54f7, 0x1518,
-       0x2061, 0xce00, 0x0126, 0x2091, 0x8000, 0x6000, 0xa086, 0x0000,
-       0x0148, 0x6010, 0xa06d, 0x0130, 0x683c, 0xa406, 0x1118, 0x6840,
-       0xa506, 0x0150, 0x012e, 0xace0, 0x0018, 0x2001, 0xc617, 0x2004,
--      0xac02, 0x1a04, 0x3179, 0x0c30, 0x080c, 0xa95a, 0x012e, 0x0904,
--      0x3179, 0x0804, 0x3154, 0xa00e, 0x2001, 0x0005, 0x080c, 0x592e,
--      0x0126, 0x2091, 0x8000, 0x080c, 0xaf02, 0x080c, 0x580a, 0x012e,
--      0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x403b, 0x0904,
--      0x317c, 0x080c, 0x5403, 0x0904, 0x3179, 0x080c, 0x5511, 0x0904,
--      0x3179, 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x404b,
--      0x0904, 0x317c, 0x080c, 0x557d, 0x0904, 0x3179, 0x2019, 0x0005,
--      0x7924, 0x080c, 0x552c, 0x0904, 0x3179, 0x7828, 0xa08a, 0x1000,
--      0x1a04, 0x317c, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x6fb9,
-+      0xac02, 0x1a04, 0x3179, 0x0c30, 0x080c, 0xa97a, 0x012e, 0x0904,
-+      0x3179, 0x0804, 0x3154, 0xa00e, 0x2001, 0x0005, 0x080c, 0x5947,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0xaf22, 0x080c, 0x5823, 0x012e,
-+      0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x4054, 0x0904,
-+      0x317c, 0x080c, 0x541c, 0x0904, 0x3179, 0x080c, 0x552a, 0x0904,
-+      0x3179, 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x4064,
-+      0x0904, 0x317c, 0x080c, 0x5596, 0x0904, 0x3179, 0x2019, 0x0005,
-+      0x7924, 0x080c, 0x5545, 0x0904, 0x3179, 0x7828, 0xa08a, 0x1000,
-+      0x1a04, 0x317c, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x6fd2,
-       0x0804, 0x3154, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009,
-       0x0001, 0x0450, 0x2029, 0x00ff, 0x6450, 0x2400, 0xa506, 0x01f8,
--      0x2508, 0x080c, 0x533d, 0x11d8, 0x080c, 0x557d, 0x1128, 0x2009,
-+      0x2508, 0x080c, 0x5356, 0x11d8, 0x080c, 0x5596, 0x1128, 0x2009,
-       0x0002, 0x62b4, 0x2518, 0x00c0, 0x2019, 0x0004, 0xa00e, 0x080c,
--      0x552c, 0x1118, 0x2009, 0x0006, 0x0078, 0x7824, 0xa08a, 0x1000,
--      0x1270, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x6fb9, 0x8529,
-+      0x5545, 0x1118, 0x2009, 0x0006, 0x0078, 0x7824, 0xa08a, 0x1000,
-+      0x1270, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x6fd2, 0x8529,
-       0x1ae0, 0x012e, 0x0804, 0x3154, 0x012e, 0x0804, 0x3179, 0x012e,
--      0x0804, 0x317c, 0x080c, 0x403b, 0x0904, 0x317c, 0x080c, 0x5469,
--      0x080c, 0x5505, 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c,
--      0x403b, 0x0904, 0x317c, 0x080c, 0x545a, 0x080c, 0x5505, 0x0804,
--      0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x403b, 0x0904, 0x317c,
--      0x080c, 0x54e0, 0x0904, 0x3179, 0x080c, 0x5221, 0x080c, 0x54a7,
--      0x080c, 0x5505, 0x0804, 0x3154, 0x080c, 0x403b, 0x0904, 0x317c,
--      0x080c, 0x5403, 0x0904, 0x3179, 0x62a0, 0x2019, 0x0005, 0x00c6,
--      0x080c, 0x553e, 0x2061, 0x0000, 0x080c, 0x7b16, 0x0076, 0x2039,
--      0x0000, 0x080c, 0x7a0e, 0x2009, 0x0000, 0x080c, 0xbeea, 0x007e,
--      0x00ce, 0x080c, 0x5505, 0x0804, 0x3154, 0x080c, 0x403b, 0x0904,
--      0x317c, 0x080c, 0x5505, 0x2208, 0x0804, 0x3154, 0x0156, 0x00d6,
-+      0x0804, 0x317c, 0x080c, 0x4054, 0x0904, 0x317c, 0x080c, 0x5482,
-+      0x080c, 0x551e, 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c,
-+      0x4054, 0x0904, 0x317c, 0x080c, 0x5473, 0x080c, 0x551e, 0x0804,
-+      0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x4054, 0x0904, 0x317c,
-+      0x080c, 0x54f9, 0x0904, 0x3179, 0x080c, 0x523a, 0x080c, 0x54c0,
-+      0x080c, 0x551e, 0x0804, 0x3154, 0x080c, 0x4054, 0x0904, 0x317c,
-+      0x080c, 0x541c, 0x0904, 0x3179, 0x62a0, 0x2019, 0x0005, 0x00c6,
-+      0x080c, 0x5557, 0x2061, 0x0000, 0x080c, 0x7b2f, 0x0076, 0x2039,
-+      0x0000, 0x080c, 0x7a27, 0x2009, 0x0000, 0x080c, 0xbf10, 0x007e,
-+      0x00ce, 0x080c, 0x551e, 0x0804, 0x3154, 0x080c, 0x4054, 0x0904,
-+      0x317c, 0x080c, 0x551e, 0x2208, 0x0804, 0x3154, 0x0156, 0x00d6,
-       0x00e6, 0x2069, 0xc734, 0x6810, 0x6914, 0xa10a, 0x1210, 0x2009,
-       0x0000, 0x6816, 0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x007e,
-       0x2069, 0xc77b, 0x2d04, 0xa075, 0x0130, 0x704c, 0x0071, 0xa210,
-@@ -1210,50 +1211,50 @@ unsigned short risc_code01[] = { 
-       0x2215, 0xa294, 0x00ff, 0x6370, 0x83ff, 0x0108, 0x6274, 0x67d4,
-       0xd79c, 0x0118, 0x2031, 0x0001, 0x0090, 0xd7ac, 0x0118, 0x2031,
-       0x0003, 0x0068, 0xd7a4, 0x0118, 0x2031, 0x0002, 0x0040, 0x080c,
--      0x5f22, 0x1118, 0x2031, 0x0004, 0x0010, 0x2031, 0x0000, 0x7e3a,
-+      0x5f3b, 0x1118, 0x2031, 0x0004, 0x0010, 0x2031, 0x0000, 0x7e3a,
-       0x7f3e, 0x0804, 0x3154, 0x6140, 0x6244, 0x2019, 0xc8fd, 0x231c,
-       0x0804, 0x3154, 0x0126, 0x2091, 0x8000, 0x6134, 0xa006, 0x2010,
--      0x6338, 0x012e, 0x0804, 0x3154, 0x080c, 0x404b, 0x0904, 0x317c,
-+      0x6338, 0x012e, 0x0804, 0x3154, 0x080c, 0x4064, 0x0904, 0x317c,
-       0x6244, 0x6338, 0x0804, 0x3154, 0x6140, 0x6244, 0x7824, 0x6042,
-       0x7b28, 0x6346, 0x2069, 0xc652, 0x831f, 0xa305, 0x6816, 0x782c,
-       0x2069, 0xc8fd, 0x2d1c, 0x206a, 0x0804, 0x3154, 0x0126, 0x2091,
-       0x8000, 0x7824, 0x6036, 0x782c, 0x603a, 0x012e, 0x0804, 0x3154,
-       0x7838, 0xa005, 0x01a8, 0x7828, 0xa025, 0x0904, 0x317c, 0x782c,
--      0xa02d, 0x0904, 0x317c, 0xa00e, 0x080c, 0x533d, 0x1120, 0x6244,
-+      0xa02d, 0x0904, 0x317c, 0xa00e, 0x080c, 0x5356, 0x1120, 0x6244,
-       0x6338, 0x6446, 0x653a, 0xa186, 0x00ff, 0x0190, 0x8108, 0x0ca0,
--      0x080c, 0x404b, 0x0904, 0x317c, 0x7828, 0xa00d, 0x0904, 0x317c,
-+      0x080c, 0x4064, 0x0904, 0x317c, 0x7828, 0xa00d, 0x0904, 0x317c,
-       0x782c, 0xa005, 0x0904, 0x317c, 0x6244, 0x6146, 0x6338, 0x603a,
-       0x0804, 0x3154, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1904,
-       0x3179, 0x00c6, 0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff,
-       0xa196, 0x00ff, 0x1130, 0x2001, 0xc615, 0x2004, 0xa085, 0xff00,
-       0x0078, 0xa182, 0x007f, 0x16a0, 0xa188, 0x2f6e, 0x210d, 0xa18c,
-       0x00ff, 0x2001, 0xc615, 0x2004, 0xa116, 0x0550, 0x810f, 0xa105,
--      0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x9586, 0x000e, 0x01e0,
--      0x601a, 0x600b, 0xbc09, 0x601f, 0x0001, 0x080c, 0x4026, 0x01d8,
-+      0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x95a6, 0x000e, 0x01e0,
-+      0x601a, 0x600b, 0xbc09, 0x601f, 0x0001, 0x080c, 0x403f, 0x01d8,
-       0x6837, 0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd,
-       0x683a, 0x701b, 0x351a, 0x2d00, 0x6012, 0x2009, 0x0032, 0x080c,
--      0x960c, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x3179,
--      0x00ce, 0x0804, 0x317c, 0x080c, 0x95dc, 0x0cb0, 0x2001, 0xc600,
-+      0x962c, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x3179,
-+      0x00ce, 0x0804, 0x317c, 0x080c, 0x95fc, 0x0cb0, 0x2001, 0xc600,
-       0x2004, 0xa086, 0x0003, 0x1904, 0x3179, 0x00c6, 0x2061, 0x0100,
-       0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff, 0x1130, 0x2001,
-       0xc615, 0x2004, 0xa085, 0xff00, 0x0078, 0xa182, 0x007f, 0x16a0,
-       0xa188, 0x2f6e, 0x210d, 0xa18c, 0x00ff, 0x2001, 0xc615, 0x2004,
-       0xa116, 0x0550, 0x810f, 0xa105, 0x0126, 0x2091, 0x8000, 0x0006,
--      0x080c, 0x9586, 0x000e, 0x01e0, 0x601a, 0x600b, 0xbc05, 0x601f,
--      0x0001, 0x080c, 0x4026, 0x01d8, 0x6837, 0x0000, 0x7007, 0x0003,
-+      0x080c, 0x95a6, 0x000e, 0x01e0, 0x601a, 0x600b, 0xbc05, 0x601f,
-+      0x0001, 0x080c, 0x403f, 0x01d8, 0x6837, 0x0000, 0x7007, 0x0003,
-       0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x701b, 0x351a, 0x2d00,
--      0x6012, 0x2009, 0x0032, 0x080c, 0x960c, 0x012e, 0x00ce, 0x0005,
-+      0x6012, 0x2009, 0x0032, 0x080c, 0x962c, 0x012e, 0x00ce, 0x0005,
-       0x012e, 0x00ce, 0x0804, 0x3179, 0x00ce, 0x0804, 0x317c, 0x080c,
--      0x95dc, 0x0cb0, 0x6830, 0xa086, 0x0100, 0x0904, 0x3179, 0x0804,
-+      0x95fc, 0x0cb0, 0x6830, 0xa086, 0x0100, 0x0904, 0x3179, 0x0804,
-       0x3154, 0x2061, 0xc9bc, 0x0126, 0x2091, 0x8000, 0x6000, 0xd084,
-       0x0178, 0x6104, 0x6208, 0x2a60, 0x6068, 0x783a, 0x60b4, 0x783e,
-       0x60b0, 0x2019, 0x0072, 0x201a, 0x6348, 0x012e, 0x0804, 0x3154,
--      0xa00e, 0x2110, 0x0c80, 0x81ff, 0x1904, 0x3179, 0x080c, 0x5f22,
-+      0xa00e, 0x2110, 0x0c80, 0x81ff, 0x1904, 0x3179, 0x080c, 0x5f3b,
-       0x0904, 0x3179, 0x0126, 0x2091, 0x8000, 0x6248, 0x6068, 0xa202,
--      0x0248, 0xa085, 0x0001, 0x080c, 0x2a11, 0x080c, 0x4968, 0x012e,
-+      0x0248, 0xa085, 0x0001, 0x080c, 0x2a11, 0x080c, 0x4981, 0x012e,
-       0x0804, 0x3154, 0x012e, 0x0804, 0x317c, 0x0006, 0x0016, 0x00c6,
-       0x00e6, 0x2001, 0xc906, 0x2070, 0x2061, 0xc652, 0x6008, 0x2072,
--      0x2009, 0x0000, 0x2011, 0x1000, 0x080c, 0x783f, 0x7206, 0x00ee,
-+      0x2009, 0x0000, 0x2011, 0x1000, 0x080c, 0x7858, 0x7206, 0x00ee,
-       0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7824,
-       0xa084, 0x0007, 0x0002, 0x357e, 0x3587, 0x358e, 0x357b, 0x357b,
-       0x357b, 0x357b, 0x357b, 0x012e, 0x0804, 0x317c, 0x2009, 0x0114,
-@@ -1362,10 +1363,10 @@ unsigned short risc_code01[] = { 
-       0x601a, 0x2061, 0x0100, 0x2001, 0xc906, 0x2004, 0x60ce, 0x6004,
-       0xc0ac, 0xa085, 0x0200, 0x6006, 0x2001, 0x0074, 0x2004, 0xa005,
-       0x01f8, 0x2038, 0x2001, 0x0076, 0x2024, 0x2001, 0x0077, 0x201c,
--      0x080c, 0x4026, 0x6833, 0x000d, 0x6f26, 0x2d00, 0x681a, 0xa78a,
-+      0x080c, 0x403f, 0x6833, 0x000d, 0x6f26, 0x2d00, 0x681a, 0xa78a,
-       0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0xa03e,
-       0x6818, 0xa080, 0x000d, 0x04b1, 0x1d90, 0x2d00, 0x681a, 0x0088,
--      0x080c, 0x4026, 0x6833, 0x000d, 0x2070, 0x6827, 0x0001, 0x2d00,
-+      0x080c, 0x403f, 0x6833, 0x000d, 0x2070, 0x6827, 0x0001, 0x2d00,
-       0x681a, 0x2001, 0x0076, 0x2004, 0x2072, 0x2001, 0x0077, 0x2004,
-       0x7006, 0x2061, 0x0020, 0x2079, 0x0100, 0x2001, 0xc906, 0x2004,
-       0x6012, 0x20e1, 0x9040, 0x2001, 0x0072, 0x2004, 0xa084, 0xfff8,
-@@ -1375,14 +1376,14 @@ unsigned short risc_code01[] = { 
-       0x7003, 0x0026, 0x7432, 0x7336, 0xa006, 0x703a, 0x703e, 0x810b,
-       0x810b, 0x21a8, 0x810b, 0x7122, 0x7003, 0x0041, 0x7004, 0xd0fc,
-       0x0de8, 0x7003, 0x0002, 0x7003, 0x0040, 0x53a5, 0x7430, 0x7334,
--      0x87ff, 0x0180, 0x00c6, 0x00d6, 0x2d60, 0x00c6, 0x080c, 0x4026,
-+      0x87ff, 0x0180, 0x00c6, 0x00d6, 0x2d60, 0x00c6, 0x080c, 0x403f,
-       0x00ce, 0x6018, 0x2070, 0x2d00, 0x7006, 0x601a, 0x00de, 0x00ce,
-       0xa085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x2001, 0x0075, 0x2004,
-       0xa005, 0x0508, 0x2038, 0x2001, 0x0078, 0x2024, 0x2001, 0x0079,
--      0x201c, 0x080c, 0x4026, 0x2d60, 0x6833, 0x000d, 0x6f26, 0x2d00,
-+      0x201c, 0x080c, 0x403f, 0x2d60, 0x6833, 0x000d, 0x6f26, 0x2d00,
-       0x681a, 0xa78a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010,
-       0x2708, 0xa03e, 0x6818, 0xa080, 0x000d, 0x080c, 0x3912, 0x1d88,
--      0x2d00, 0x681a, 0x00e0, 0x080c, 0x4026, 0x2d60, 0x6033, 0x000d,
-+      0x2d00, 0x681a, 0x00e0, 0x080c, 0x403f, 0x2d60, 0x6033, 0x000d,
-       0x2070, 0x6027, 0x0001, 0x2c00, 0x601a, 0x2001, 0x0078, 0x2004,
-       0x2072, 0x2001, 0x0079, 0x2004, 0x7006, 0x2001, 0x0072, 0x2004,
-       0xa084, 0xfff8, 0x700a, 0x2001, 0x0073, 0x2004, 0x700e, 0x2001,
-@@ -1391,9 +1392,9 @@ unsigned short risc_code01[] = { 
-       0x0003, 0x2001, 0x0030, 0x2003, 0x0009, 0x00ee, 0x0005, 0x0804,
-       0x3154, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0012, 0x2001, 0xc640,
-       0x20a0, 0xa006, 0x40a4, 0x012e, 0x0804, 0x3154, 0x7d38, 0x7c3c,
--      0x0804, 0x31fb, 0x080c, 0x4026, 0x0904, 0x3179, 0x080c, 0x5f22,
--      0x0110, 0x080c, 0x4f2c, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c,
--      0x7d38, 0x080c, 0x4067, 0x701b, 0x39c6, 0x0005, 0xade8, 0x000d,
-+      0x0804, 0x31fb, 0x080c, 0x403f, 0x0904, 0x3179, 0x080c, 0x5f3b,
-+      0x0110, 0x080c, 0x4f45, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c,
-+      0x7d38, 0x080c, 0x4080, 0x701b, 0x39c6, 0x0005, 0xade8, 0x000d,
-       0x6800, 0xa005, 0x0904, 0x317c, 0x6804, 0xd0ac, 0x0118, 0xd0a4,
-       0x0904, 0x317c, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138,
-       0x6200, 0xa292, 0x0005, 0x0218, 0xa18c, 0xffdf, 0x0010, 0xa18d,
-@@ -1407,9 +1408,9 @@ unsigned short risc_code01[] = { 
-       0x680c, 0xa005, 0x0904, 0x317c, 0x6810, 0xa005, 0x0904, 0x317c,
-       0x6848, 0x6940, 0xa10a, 0x1a04, 0x317c, 0x8001, 0x0904, 0x317c,
-       0x684c, 0x6944, 0xa10a, 0x1a04, 0x317c, 0x8001, 0x0904, 0x317c,
--      0x6804, 0xd0fc, 0x0560, 0x080c, 0x4026, 0x0904, 0x3179, 0x2009,
-+      0x6804, 0xd0fc, 0x0560, 0x080c, 0x403f, 0x0904, 0x3179, 0x2009,
-       0x0014, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0xa290, 0x0038, 0xa399,
--      0x0000, 0x080c, 0x4067, 0x701b, 0x3a46, 0x0005, 0xade8, 0x000d,
-+      0x0000, 0x080c, 0x4080, 0x701b, 0x3a46, 0x0005, 0xade8, 0x000d,
-       0x20a9, 0x0014, 0x2d98, 0x2069, 0xc66e, 0x2da0, 0x53a3, 0x7010,
-       0xa0e8, 0x000d, 0x2001, 0xc672, 0x200c, 0xd1e4, 0x0140, 0x00c6,
-       0x2061, 0x0100, 0x6004, 0xa085, 0x0b00, 0x6006, 0x00ce, 0x2009,
-@@ -1417,7 +1418,7 @@ unsigned short risc_code01[] = { 
-       0x7824, 0x200a, 0x2009, 0x017f, 0x200a, 0x3200, 0xa084, 0x003f,
-       0xa085, 0x3020, 0x2090, 0x20a9, 0x001c, 0x2d98, 0x2069, 0xc652,
-       0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x6142, 0x8007, 0xa084,
--      0x00ff, 0x6046, 0x080c, 0x61f8, 0x080c, 0x576e, 0x080c, 0x57d7,
-+      0x00ff, 0x6046, 0x080c, 0x6211, 0x080c, 0x5787, 0x080c, 0x57f0,
-       0x6000, 0xa086, 0x0000, 0x1904, 0x3b41, 0x6808, 0x602a, 0x080c,
-       0x25bb, 0x0006, 0x2001, 0x0100, 0x2004, 0xa082, 0x0005, 0x000e,
-       0x0268, 0x2009, 0x0170, 0x200b, 0x0080, 0xe000, 0xe000, 0x200b,
-@@ -1426,2759 +1427,2763 @@ unsigned short risc_code01[] = { 
-       0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38,
-       0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0xa084, 0xf0ff,
-       0x6006, 0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f,
--      0x20a9, 0x0004, 0x20a1, 0xc90d, 0x40a1, 0x080c, 0x707c, 0x6904,
-+      0x20a9, 0x0004, 0x20a1, 0xc90d, 0x40a1, 0x080c, 0x7095, 0x6904,
-       0xd1fc, 0x0520, 0x00c6, 0x2009, 0x0000, 0x20a9, 0x0001, 0x6b70,
-       0xd384, 0x01c8, 0x0020, 0x839d, 0x12b0, 0x3508, 0x8109, 0x080c,
--      0x67ed, 0x6878, 0x6016, 0x6874, 0x2008, 0xa084, 0xff00, 0x8007,
-+      0x6806, 0x6878, 0x6016, 0x6874, 0x2008, 0xa084, 0xff00, 0x8007,
-       0x600a, 0xa184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003,
-       0x0010, 0x6003, 0x0001, 0x1f04, 0x3adb, 0x00ce, 0x2069, 0xc652,
-       0x2001, 0xc8e5, 0x6a80, 0xa294, 0x0030, 0xa28e, 0x0000, 0x0170,
-       0xa28e, 0x0010, 0x0118, 0xa28e, 0x0020, 0x0140, 0x2003, 0xaaaa,
-       0x080c, 0x2a95, 0x2001, 0xc8d6, 0x2102, 0x0008, 0x2102, 0x00c6,
-       0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c,
--      0x5f22, 0x0128, 0x080c, 0x440b, 0x0110, 0x080c, 0x2a11, 0x60c8,
-+      0x5f3b, 0x0128, 0x080c, 0x4424, 0x0110, 0x080c, 0x2a11, 0x60c8,
-       0xa005, 0x01d0, 0x6003, 0x0001, 0x2009, 0x3b27, 0x00e0, 0x080c,
--      0x5f22, 0x1178, 0x2011, 0x5df5, 0x080c, 0x6fad, 0x2011, 0x5de8,
--      0x080c, 0x7070, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x080c, 0x5e5a,
--      0x0040, 0x080c, 0x4e5b, 0x0028, 0x6003, 0x0004, 0x2009, 0x3b41,
-+      0x5f3b, 0x1178, 0x2011, 0x5e0e, 0x080c, 0x6fc6, 0x2011, 0x5e01,
-+      0x080c, 0x7089, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x080c, 0x5e73,
-+      0x0040, 0x080c, 0x4e74, 0x0028, 0x6003, 0x0004, 0x2009, 0x3b41,
-       0x0010, 0x0804, 0x3154, 0x2001, 0x0100, 0x2004, 0xa082, 0x0005,
-       0x0258, 0x2001, 0x0170, 0x2004, 0xa084, 0x00ff, 0xa086, 0x004c,
-       0x1118, 0x2091, 0x309d, 0x0817, 0x2091, 0x301d, 0x0817, 0x6000,
-       0xa086, 0x0000, 0x0904, 0x3179, 0x2069, 0xc652, 0x7830, 0x6842,
-       0x7834, 0x6846, 0x6804, 0xd0fc, 0x0118, 0x2009, 0x0030, 0x0010,
-       0x2009, 0x001c, 0x2d00, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804,
--      0x406a, 0xa006, 0x080c, 0x2a11, 0x81ff, 0x1904, 0x3179, 0x080c,
--      0x5f22, 0x1178, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600,
--      0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5f66, 0x080c, 0x5e5a,
--      0x0020, 0x080c, 0x4f2c, 0x080c, 0x4e5b, 0x0804, 0x3154, 0x81ff,
--      0x1904, 0x3179, 0x080c, 0x5f22, 0x1110, 0x0804, 0x3179, 0x6188,
-+      0x4083, 0xa006, 0x080c, 0x2a11, 0x81ff, 0x1904, 0x3179, 0x080c,
-+      0x5f3b, 0x1178, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600,
-+      0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5f7f, 0x080c, 0x5e73,
-+      0x0020, 0x080c, 0x4f45, 0x080c, 0x4e74, 0x0804, 0x3154, 0x81ff,
-+      0x1904, 0x3179, 0x080c, 0x5f3b, 0x1110, 0x0804, 0x3179, 0x6188,
-       0x81ff, 0x0198, 0x703f, 0x0000, 0x2001, 0xcdc0, 0x2009, 0x0040,
-       0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x406a, 0x701b, 0x3152, 0x012e, 0x0005, 0x703f, 0x0001, 0x00d6,
-+      0x4083, 0x701b, 0x3152, 0x012e, 0x0005, 0x703f, 0x0001, 0x00d6,
-       0x2069, 0xcdc0, 0x20a9, 0x0040, 0x20a1, 0xcdc0, 0x2019, 0xffff,
-       0x43a4, 0x6550, 0xa588, 0x2f6e, 0x210d, 0xa18c, 0x00ff, 0x216a,
--      0xa00e, 0x2011, 0x0002, 0x2100, 0xa506, 0x01a8, 0x080c, 0x533d,
-+      0xa00e, 0x2011, 0x0002, 0x2100, 0xa506, 0x01a8, 0x080c, 0x5356,
-       0x1190, 0x6014, 0x821c, 0x0238, 0xa398, 0xcdc0, 0xa085, 0xff00,
-       0x8007, 0x201a, 0x0038, 0xa398, 0xcdc0, 0x2324, 0xa4a4, 0xff00,
-       0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x1208, 0x0c18,
-       0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x00de, 0x20a9, 0x0040,
--      0x20a1, 0xcdc0, 0x2099, 0xcdc0, 0x080c, 0x4ecb, 0x0804, 0x3b9c,
--      0x080c, 0x404b, 0x0904, 0x317c, 0x00c6, 0x080c, 0x4026, 0x00ce,
-+      0x20a1, 0xcdc0, 0x2099, 0xcdc0, 0x080c, 0x4ee4, 0x0804, 0x3b9c,
-+      0x080c, 0x4064, 0x0904, 0x317c, 0x00c6, 0x080c, 0x403f, 0x00ce,
-       0x1120, 0x2009, 0x0002, 0x0804, 0x3179, 0x2001, 0xc653, 0x2004,
-       0xd0b4, 0x0550, 0x7824, 0xa084, 0xff00, 0xa08e, 0x7e00, 0x0520,
-       0xa08e, 0x7f00, 0x0508, 0xa08e, 0x8000, 0x01f0, 0x6000, 0xd08c,
-       0x11d8, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x11a8, 0x6837,
--      0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0xae0a, 0x1120, 0x2009,
-+      0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0xae2a, 0x1120, 0x2009,
-       0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b, 0x3c28, 0x0005,
--      0x080c, 0x404b, 0x0904, 0x317c, 0x20a9, 0x002b, 0x2c98, 0xade8,
-+      0x080c, 0x4064, 0x0904, 0x317c, 0x20a9, 0x002b, 0x2c98, 0xade8,
-       0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004, 0xac80, 0x0006, 0x2098,
--      0xad80, 0x0006, 0x20a0, 0x080c, 0x4ecb, 0x20a9, 0x0004, 0xac80,
--      0x000a, 0x2098, 0xad80, 0x000a, 0x20a0, 0x080c, 0x4ecb, 0x2d00,
--      0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x406a,
--      0x81ff, 0x1904, 0x3179, 0x080c, 0x403b, 0x0904, 0x317c, 0x080c,
--      0x551a, 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x7828, 0xa08a,
--      0x1000, 0x1a04, 0x317c, 0x080c, 0x404b, 0x0904, 0x317c, 0x080c,
--      0x557d, 0x0904, 0x3179, 0x2019, 0x0004, 0xa00e, 0x080c, 0x552c,
-+      0xad80, 0x0006, 0x20a0, 0x080c, 0x4ee4, 0x20a9, 0x0004, 0xac80,
-+      0x000a, 0x2098, 0xad80, 0x000a, 0x20a0, 0x080c, 0x4ee4, 0x2d00,
-+      0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x4083,
-+      0x81ff, 0x1904, 0x3179, 0x080c, 0x4054, 0x0904, 0x317c, 0x080c,
-+      0x5533, 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x7828, 0xa08a,
-+      0x1000, 0x1a04, 0x317c, 0x080c, 0x4064, 0x0904, 0x317c, 0x080c,
-+      0x5596, 0x0904, 0x3179, 0x2019, 0x0004, 0xa00e, 0x080c, 0x5545,
-       0x7924, 0x810f, 0x7a28, 0x0011, 0x0804, 0x3154, 0xa186, 0x00ff,
-       0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0xc600, 0x6450,
-       0x2400, 0xa506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005,
--      0x080c, 0x533d, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0xa108,
--      0x080c, 0x6fb9, 0x0005, 0x81ff, 0x1904, 0x3179, 0x080c, 0x403b,
--      0x0904, 0x317c, 0x080c, 0x5403, 0x0904, 0x3179, 0x080c, 0x5523,
--      0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x403b, 0x0904,
--      0x317c, 0x080c, 0x5403, 0x0904, 0x3179, 0x080c, 0x5511, 0x0804,
--      0x3154, 0x6100, 0x0804, 0x3154, 0x080c, 0x404b, 0x0904, 0x317c,
-+      0x080c, 0x5356, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0xa108,
-+      0x080c, 0x6fd2, 0x0005, 0x81ff, 0x1904, 0x3179, 0x080c, 0x4054,
-+      0x0904, 0x317c, 0x080c, 0x541c, 0x0904, 0x3179, 0x080c, 0x553c,
-+      0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x4054, 0x0904,
-+      0x317c, 0x080c, 0x541c, 0x0904, 0x3179, 0x080c, 0x552a, 0x0804,
-+      0x3154, 0x6100, 0x0804, 0x3154, 0x080c, 0x4064, 0x0904, 0x317c,
-       0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1904, 0x3179, 0x00d6,
-       0xace8, 0x000a, 0x7924, 0xd184, 0x0110, 0xace8, 0x0006, 0x680c,
-       0x8007, 0x783e, 0x6808, 0x8007, 0x783a, 0x6b04, 0x831f, 0x6a00,
-       0x8217, 0x00de, 0x6100, 0xa18c, 0x0200, 0x0804, 0x3154, 0x7824,
--      0xa09c, 0x00ff, 0xa39a, 0x0003, 0x1a04, 0x3179, 0x6250, 0xa294,
--      0x00ff, 0xa084, 0xff00, 0x8007, 0xa206, 0x1150, 0x2001, 0xc640,
--      0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x406a,
--      0x81ff, 0x1904, 0x3179, 0x080c, 0x404b, 0x0904, 0x317c, 0x6004,
--      0xa084, 0x00ff, 0xa086, 0x0006, 0x1904, 0x3179, 0x00c6, 0x080c,
--      0x4026, 0x00ce, 0x0904, 0x3179, 0x6837, 0x0000, 0x6838, 0xc0fd,
--      0x683a, 0x080c, 0xadb6, 0x0904, 0x3179, 0x7007, 0x0003, 0x701b,
--      0x3d12, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, 0x3179, 0xad80,
--      0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804,
--      0x406a, 0xa006, 0x080c, 0x2a11, 0x7824, 0xa084, 0x00ff, 0xa086,
--      0x00ff, 0x0118, 0x81ff, 0x1904, 0x3179, 0x080c, 0x5f22, 0x0110,
--      0x080c, 0x4f2c, 0x7828, 0xa08a, 0x1000, 0x1a04, 0x317c, 0x7924,
--      0xa18c, 0xff00, 0x810f, 0xa186, 0x00ff, 0x0138, 0xa182, 0x007f,
--      0x1a04, 0x317c, 0x2100, 0x080c, 0x29db, 0x0026, 0x00c6, 0x0126,
--      0x2091, 0x8000, 0x2061, 0xc93a, 0x601b, 0x0000, 0x601f, 0x0000,
--      0x080c, 0x5f22, 0x1178, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001,
--      0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5f66, 0x080c,
--      0x5e5a, 0x0420, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002,
--      0x080c, 0x8f18, 0x080c, 0x8dee, 0x0036, 0x2019, 0x0000, 0x080c,
--      0x8e79, 0x003e, 0x2061, 0x0100, 0x2001, 0xc615, 0x2004, 0xa084,
--      0x00ff, 0x810f, 0xa105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010,
--      0x2009, 0x002d, 0x2011, 0x4e90, 0x080c, 0x7036, 0x7924, 0xa18c,
--      0xff00, 0x810f, 0x080c, 0x5f22, 0x1110, 0x2009, 0x00ff, 0x7a28,
--      0x080c, 0x3c76, 0x012e, 0x00ce, 0x002e, 0x0804, 0x3154, 0x7924,
--      0xa18c, 0xff00, 0x810f, 0x00c6, 0x080c, 0x52e1, 0x2c08, 0x00ce,
--      0x1904, 0x317c, 0x0804, 0x3154, 0x81ff, 0x0120, 0x2009, 0x0001,
--      0x0804, 0x3179, 0x60d4, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009,
--      0x0005, 0x0804, 0x3179, 0x080c, 0x4026, 0x1120, 0x2009, 0x0002,
--      0x0804, 0x3179, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c,
--      0x4067, 0x701b, 0x3dc4, 0x0005, 0x2009, 0x0080, 0x080c, 0x533d,
--      0x1130, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0120, 0x2021,
--      0x400a, 0x0804, 0x3156, 0x00d6, 0xade8, 0x000d, 0x6900, 0x6a08,
--      0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be, 0x0100, 0x0904,
--      0x3e3b, 0xa0be, 0x0112, 0x0904, 0x3e3b, 0xa0be, 0x0113, 0x0904,
--      0x3e3b, 0xa0be, 0x0114, 0x0904, 0x3e3b, 0xa0be, 0x0117, 0x0904,
--      0x3e3b, 0xa0be, 0x011a, 0x0904, 0x3e3b, 0xa0be, 0x011c, 0x0904,
--      0x3e3b, 0xa0be, 0x0121, 0x05b0, 0xa0be, 0x0131, 0x0598, 0xa0be,
--      0x0171, 0x05c8, 0xa0be, 0x0173, 0x05b0, 0xa0be, 0x01a1, 0x1120,
--      0x6830, 0x8007, 0x6832, 0x04a8, 0xa0be, 0x0212, 0x0540, 0xa0be,
--      0x0213, 0x0528, 0xa0be, 0x0214, 0x01b0, 0xa0be, 0x0217, 0x0168,
--      0xa0be, 0x021a, 0x1120, 0x6838, 0x8007, 0x683a, 0x00e0, 0xa0be,
--      0x0300, 0x01c8, 0x00de, 0x0804, 0x317c, 0xad80, 0x0010, 0x20a9,
--      0x0007, 0x080c, 0x3e81, 0xad80, 0x000e, 0x20a9, 0x0001, 0x080c,
--      0x3e81, 0x0048, 0xad80, 0x000c, 0x080c, 0x3e8f, 0x0050, 0xad80,
--      0x000e, 0x080c, 0x3e8f, 0xad80, 0x000c, 0x20a9, 0x0001, 0x080c,
--      0x3e81, 0x00c6, 0x080c, 0x4026, 0x0568, 0x6838, 0xc0fd, 0x683a,
--      0x6837, 0x0119, 0x6853, 0x0000, 0x684f, 0x0020, 0x685b, 0x0001,
--      0x810b, 0x697e, 0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92,
--      0x6996, 0x689b, 0x0000, 0x00ce, 0x00de, 0x6837, 0x0000, 0x6838,
--      0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804, 0x2068, 0x080c, 0xadd2,
--      0x1120, 0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b,
--      0x3e78, 0x0005, 0x00ce, 0x00de, 0x2009, 0x0002, 0x0804, 0x3179,
--      0x6820, 0xa086, 0x8001, 0x1904, 0x3154, 0x2009, 0x0004, 0x0804,
--      0x3179, 0x0016, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a,
--      0x8108, 0x280a, 0x8108, 0x1f04, 0x3e83, 0x001e, 0x0005, 0x0016,
--      0x00a6, 0x00b6, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054,
--      0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108,
--      0x280a, 0x00be, 0x00ae, 0x001e, 0x0005, 0x81ff, 0x0120, 0x2009,
--      0x0001, 0x0804, 0x3179, 0x60d4, 0xd0ac, 0x1130, 0xd09c, 0x1120,
--      0x2009, 0x0005, 0x0804, 0x3179, 0x7924, 0x2140, 0xa18c, 0xff00,
--      0x810f, 0x60d4, 0xd0ac, 0x1120, 0xa182, 0x0080, 0x0a04, 0x317c,
--      0xa182, 0x00ff, 0x1a04, 0x317c, 0x7a2c, 0x7b28, 0x6070, 0xa306,
--      0x1140, 0x6074, 0xa24e, 0x0904, 0x317c, 0xa9cc, 0xff00, 0x0904,
--      0x317c, 0x00c6, 0x080c, 0x3f6e, 0x2c68, 0x00ce, 0x0538, 0xa0c6,
--      0x4000, 0x1180, 0x00c6, 0x0006, 0x2d60, 0x2009, 0x0000, 0x080c,
--      0x55de, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x000e,
--      0x00ce, 0x0088, 0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060, 0xa0c6,
--      0x4008, 0x1118, 0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009, 0x1108,
--      0x0010, 0x2001, 0x4006, 0x2020, 0x0804, 0x3156, 0x2d00, 0x7022,
--      0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9586, 0x05d8,
--      0x2d00, 0x601a, 0x080c, 0xb057, 0x2e58, 0x00ee, 0x00e6, 0x00c6,
--      0x080c, 0x4026, 0x00ce, 0x2b70, 0x1150, 0x080c, 0x95dc, 0x00ee,
-+      0xa09c, 0x0003, 0xd0b4, 0x1160, 0xa39a, 0x0003, 0x1a04, 0x3179,
-+      0x6250, 0xa294, 0x00ff, 0xa084, 0xff00, 0x8007, 0xa206, 0x1150,
-+      0x2001, 0xc640, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-+      0x0804, 0x4083, 0x81ff, 0x1904, 0x3179, 0x080c, 0x4064, 0x0904,
-+      0x317c, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1904, 0x3179,
-+      0x00c6, 0x080c, 0x403f, 0x00ce, 0x0904, 0x3179, 0x6837, 0x0000,
-+      0x6838, 0xc0fd, 0x683a, 0x080c, 0xadd6, 0x0904, 0x3179, 0x7007,
-+      0x0003, 0x701b, 0x3d14, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904,
-+      0x3179, 0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c,
-+      0x7d38, 0x0804, 0x4083, 0xa006, 0x080c, 0x2a11, 0x7824, 0xa084,
-+      0x00ff, 0xa086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x3179, 0x080c,
-+      0x5f3b, 0x0110, 0x080c, 0x4f45, 0x7828, 0xa08a, 0x1000, 0x1a04,
-+      0x317c, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa186, 0x00ff, 0x0138,
-+      0xa182, 0x007f, 0x1a04, 0x317c, 0x2100, 0x080c, 0x29db, 0x0026,
-+      0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, 0xc93a, 0x601b, 0x0000,
-+      0x601f, 0x0000, 0x080c, 0x5f3b, 0x1178, 0x2001, 0xc8e6, 0x2003,
-+      0x0001, 0x2001, 0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c,
-+      0x5f7f, 0x080c, 0x5e73, 0x0420, 0x2011, 0x0003, 0x080c, 0x8f27,
-+      0x2011, 0x0002, 0x080c, 0x8f31, 0x080c, 0x8e07, 0x0036, 0x2019,
-+      0x0000, 0x080c, 0x8e92, 0x003e, 0x2061, 0x0100, 0x2001, 0xc615,
-+      0x2004, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a, 0x6043, 0x0090,
-+      0x6043, 0x0010, 0x2009, 0x002d, 0x2011, 0x4ea9, 0x080c, 0x704f,
-+      0x7924, 0xa18c, 0xff00, 0x810f, 0x080c, 0x5f3b, 0x1110, 0x2009,
-+      0x00ff, 0x7a28, 0x080c, 0x3c76, 0x012e, 0x00ce, 0x002e, 0x0804,
-+      0x3154, 0x7924, 0xa18c, 0xff00, 0x810f, 0x00c6, 0x080c, 0x52fa,
-+      0x2c08, 0x00ce, 0x1904, 0x317c, 0x0804, 0x3154, 0x81ff, 0x0120,
-+      0x2009, 0x0001, 0x0804, 0x3179, 0x60d4, 0xd0ac, 0x1130, 0xd09c,
-+      0x1120, 0x2009, 0x0005, 0x0804, 0x3179, 0x080c, 0x403f, 0x1120,
-+      0x2009, 0x0002, 0x0804, 0x3179, 0x7924, 0x7a2c, 0x7b28, 0x7c3c,
-+      0x7d38, 0x080c, 0x4080, 0x701b, 0x3dc6, 0x0005, 0x2009, 0x0080,
-+      0x080c, 0x5356, 0x1130, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-+      0x0120, 0x2021, 0x400a, 0x0804, 0x3156, 0x00d6, 0xade8, 0x000d,
-+      0x6900, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be,
-+      0x0100, 0x0904, 0x3e3d, 0xa0be, 0x0112, 0x0904, 0x3e3d, 0xa0be,
-+      0x0113, 0x0904, 0x3e3d, 0xa0be, 0x0114, 0x0904, 0x3e3d, 0xa0be,
-+      0x0117, 0x0904, 0x3e3d, 0xa0be, 0x011a, 0x0904, 0x3e3d, 0xa0be,
-+      0x011c, 0x0904, 0x3e3d, 0xa0be, 0x0121, 0x05b0, 0xa0be, 0x0131,
-+      0x0598, 0xa0be, 0x0171, 0x05c8, 0xa0be, 0x0173, 0x05b0, 0xa0be,
-+      0x01a1, 0x1120, 0x6830, 0x8007, 0x6832, 0x04a8, 0xa0be, 0x0212,
-+      0x0540, 0xa0be, 0x0213, 0x0528, 0xa0be, 0x0214, 0x01b0, 0xa0be,
-+      0x0217, 0x0168, 0xa0be, 0x021a, 0x1120, 0x6838, 0x8007, 0x683a,
-+      0x00e0, 0xa0be, 0x0300, 0x01c8, 0x00de, 0x0804, 0x317c, 0xad80,
-+      0x0010, 0x20a9, 0x0007, 0x080c, 0x3e83, 0xad80, 0x000e, 0x20a9,
-+      0x0001, 0x080c, 0x3e83, 0x0048, 0xad80, 0x000c, 0x080c, 0x3e91,
-+      0x0050, 0xad80, 0x000e, 0x080c, 0x3e91, 0xad80, 0x000c, 0x20a9,
-+      0x0001, 0x080c, 0x3e83, 0x00c6, 0x080c, 0x403f, 0x0568, 0x6838,
-+      0xc0fd, 0x683a, 0x6837, 0x0119, 0x6853, 0x0000, 0x684f, 0x0020,
-+      0x685b, 0x0001, 0x810b, 0x697e, 0x6883, 0x0000, 0x6a86, 0x6b8a,
-+      0x6c8e, 0x6d92, 0x6996, 0x689b, 0x0000, 0x00ce, 0x00de, 0x6837,
-+      0x0000, 0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804, 0x2068,
-+      0x080c, 0xadf2, 0x1120, 0x2009, 0x0003, 0x0804, 0x3179, 0x7007,
-+      0x0003, 0x701b, 0x3e7a, 0x0005, 0x00ce, 0x00de, 0x2009, 0x0002,
-+      0x0804, 0x3179, 0x6820, 0xa086, 0x8001, 0x1904, 0x3154, 0x2009,
-+      0x0004, 0x0804, 0x3179, 0x0016, 0x2008, 0x2044, 0x8000, 0x204c,
-+      0x8000, 0x290a, 0x8108, 0x280a, 0x8108, 0x1f04, 0x3e85, 0x001e,
-+      0x0005, 0x0016, 0x00a6, 0x00b6, 0x2008, 0x2044, 0x8000, 0x204c,
-+      0x8000, 0x2054, 0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108,
-+      0x290a, 0x8108, 0x280a, 0x00be, 0x00ae, 0x001e, 0x0005, 0x81ff,
-+      0x0120, 0x2009, 0x0001, 0x0804, 0x3179, 0x60d4, 0xd0ac, 0x1130,
-+      0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3179, 0x7924, 0x2140,
-+      0xa18c, 0xff00, 0x810f, 0x60d4, 0xd0ac, 0x1120, 0xa182, 0x0080,
-+      0x0a04, 0x317c, 0xa182, 0x00ff, 0x1a04, 0x317c, 0x7a2c, 0x7b28,
-+      0x6070, 0xa306, 0x1140, 0x6074, 0xa24e, 0x0904, 0x317c, 0xa9cc,
-+      0xff00, 0x0904, 0x317c, 0x00c6, 0x080c, 0x3f89, 0x2c68, 0x00ce,
-+      0x05a0, 0x0086, 0xa0c6, 0x4000, 0x008e, 0x11c8, 0x00c6, 0x0006,
-+      0x2d60, 0xd88c, 0x1140, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-+      0x0110, 0xc89d, 0x0400, 0xa00e, 0x080c, 0x55f7, 0x1108, 0xc185,
-+      0x6000, 0xd0bc, 0x0108, 0xc18d, 0x000e, 0x00ce, 0x0088, 0xa0c6,
-+      0x4007, 0x1110, 0x2408, 0x0060, 0xa0c6, 0x4008, 0x1118, 0x2708,
-+      0x2610, 0x0030, 0xa0c6, 0x4009, 0x1108, 0x0010, 0x2001, 0x4006,
-+      0x2020, 0x0804, 0x3156, 0x000e, 0x00ce, 0x2d00, 0x7022, 0x0016,
-+      0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x95a6, 0x0904, 0x3f5e,
-+      0x2d00, 0x601a, 0x080c, 0xb077, 0x2e58, 0x00ee, 0x00e6, 0x00c6,
-+      0x080c, 0x403f, 0x00ce, 0x2b70, 0x1150, 0x080c, 0x95fc, 0x00ee,
-       0x00ce, 0x00be, 0x001e, 0x2009, 0x0002, 0x0804, 0x3179, 0x6837,
-       0x0000, 0x683b, 0x0000, 0x2d00, 0x6012, 0x6833, 0x0000, 0x6838,
--      0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0x683a, 0x0126, 0x2091, 0x8000,
--      0x080c, 0x2e46, 0x012e, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c,
--      0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x2009, 0x0002, 0x080c,
--      0x960c, 0xa085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x1120,
--      0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b, 0x3f51,
--      0x0005, 0x6830, 0xa086, 0x0100, 0x7020, 0x2060, 0x1138, 0x2009,
--      0x0004, 0x6204, 0xa294, 0x00ff, 0x0804, 0x3179, 0x2009, 0x0000,
--      0x6838, 0xd0f4, 0x1904, 0x3154, 0x080c, 0x55de, 0x1108, 0xc185,
--      0x6000, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3154, 0x00e6, 0x00d6,
--      0x2029, 0x0000, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x0138, 0x2021,
--      0x0000, 0x20a9, 0x00ff, 0x2071, 0xc77b, 0x0030, 0x2021, 0x0080,
--      0x20a9, 0x007f, 0x2071, 0xc7fb, 0x2e04, 0xa005, 0x1130, 0x2100,
--      0xa406, 0x15a0, 0x2428, 0xc5fd, 0x0488, 0x2068, 0x6f10, 0x2700,
--      0xa306, 0x11e0, 0x6e14, 0x2600, 0xa206, 0x11c0, 0x2400, 0xa106,
--      0x1190, 0x2d60, 0xd884, 0x0598, 0x080c, 0x56ed, 0x1580, 0x2001,
--      0x4000, 0x0470, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1538,
--      0x2001, 0x4000, 0x0428, 0x2001, 0x4007, 0x0410, 0x2400, 0xa106,
--      0x1168, 0x6e14, 0x87ff, 0x1138, 0x86ff, 0x09a0, 0x2001, 0xc635,
--      0x2004, 0xd0ac, 0x1978, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70,
--      0x1f04, 0x3f84, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001,
--      0x0001, 0x0030, 0x080c, 0x52e1, 0x1dd0, 0x6312, 0x6216, 0xa006,
--      0xa005, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x1904, 0x3179, 0x080c,
--      0x4026, 0x0904, 0x3179, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a,
--      0x7824, 0xa005, 0x0904, 0x317c, 0xa096, 0x00ff, 0x0120, 0xa092,
--      0x0004, 0x1a04, 0x317c, 0x2010, 0x2d18, 0x080c, 0x2df9, 0x0904,
--      0x3179, 0x7007, 0x0003, 0x701b, 0x3ff6, 0x0005, 0x6830, 0xa086,
--      0x0100, 0x0904, 0x3179, 0x0804, 0x3154, 0x7924, 0xa18c, 0xff00,
--      0x810f, 0x60d4, 0xd0ac, 0x1120, 0xa182, 0x0080, 0x0a04, 0x317c,
--      0xa182, 0x00ff, 0x1a04, 0x317c, 0x0126, 0x2091, 0x8000, 0x080c,
--      0xacba, 0x1188, 0xa190, 0xc77b, 0x2204, 0xa065, 0x0160, 0x080c,
--      0x4f47, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x0110, 0x6017, 0x0000,
--      0x012e, 0x0804, 0x3154, 0x012e, 0x0804, 0x3179, 0x080c, 0x1602,
--      0x0188, 0xa006, 0x6802, 0x7010, 0xa005, 0x1120, 0x2d00, 0x7012,
--      0x7016, 0x0030, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016,
--      0xad80, 0x000d, 0x0005, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x080c,
--      0x533d, 0x1130, 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0208,
--      0xa066, 0x8cff, 0x0005, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x080c,
--      0x533d, 0x1128, 0xa6b4, 0x00ff, 0xa682, 0x4000, 0x0208, 0xa066,
--      0x8cff, 0x0005, 0x0016, 0x7110, 0x81ff, 0x0128, 0x2168, 0x6904,
--      0x080c, 0x1619, 0x0cc8, 0x7112, 0x7116, 0x001e, 0x0005, 0x2031,
--      0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0xc6f2, 0x6606, 0x6112,
--      0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c, 0x164d,
--      0x7007, 0x0002, 0x701b, 0x3154, 0x0005, 0x00f6, 0x0126, 0x2091,
--      0x8000, 0x2079, 0x0000, 0x2001, 0xc6b0, 0x2004, 0xa005, 0x1168,
--      0x0e04, 0x4095, 0x7818, 0xd084, 0x1140, 0x7a22, 0x7b26, 0x7c2a,
--      0x781b, 0x0001, 0x2091, 0x4080, 0x0408, 0x0016, 0x00c6, 0x00e6,
--      0x2071, 0xc6a2, 0x7138, 0xa182, 0x0010, 0x0218, 0x7030, 0x2060,
--      0x0078, 0x7030, 0xa0e0, 0x0004, 0xac82, 0xc6f2, 0x0210, 0x2061,
--      0xc6b2, 0x2c00, 0x7032, 0x81ff, 0x1108, 0x7036, 0x8108, 0x713a,
--      0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x001e, 0x012e, 0x00fe,
--      0x0005, 0x00e6, 0x2071, 0xc6a2, 0x7038, 0xa005, 0x0570, 0x0126,
--      0x2091, 0x8000, 0x0e04, 0x40ec, 0x00f6, 0x2079, 0x0000, 0x7818,
--      0xd084, 0x1508, 0x00c6, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004,
--      0x7826, 0x6008, 0x782a, 0x781b, 0x0001, 0x2091, 0x4080, 0x7038,
--      0x8001, 0x703a, 0xa005, 0x1130, 0x7033, 0xc6b2, 0x7037, 0xc6b2,
--      0x00ce, 0x0048, 0xac80, 0x0004, 0xa0fa, 0xc6f2, 0x0210, 0x2001,
--      0xc6b2, 0x7036, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x0026,
--      0x2001, 0xc653, 0x2004, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c,
--      0x407d, 0x002e, 0x0005, 0x81ff, 0x1904, 0x3179, 0x0126, 0x2091,
--      0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x5f22,
--      0x1178, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600, 0x2003,
--      0x0001, 0xa085, 0x0001, 0x080c, 0x5f66, 0x080c, 0x5e5a, 0x0010,
--      0x080c, 0x4e5b, 0x012e, 0x0804, 0x3154, 0x7824, 0x2008, 0xa18c,
--      0xfffd, 0x1128, 0x61e0, 0xa10d, 0x61e2, 0x0804, 0x3154, 0x0804,
--      0x317c, 0x81ff, 0x1904, 0x3179, 0x6000, 0xa086, 0x0003, 0x1904,
--      0x3179, 0x2001, 0xc653, 0x2004, 0xd0ac, 0x1904, 0x3179, 0x080c,
--      0x404b, 0x0904, 0x317c, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
--      0x1120, 0x7828, 0xa005, 0x0904, 0x3154, 0x00c6, 0x080c, 0x4026,
--      0x00ce, 0x0904, 0x3179, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838,
--      0xc0fd, 0x683a, 0x080c, 0xae9b, 0x0904, 0x3179, 0x7007, 0x0003,
--      0x701b, 0x415b, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, 0x3179,
--      0x0804, 0x3154, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1904,
--      0x3179, 0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x4026,
--      0x0904, 0x3179, 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000,
--      0x702f, 0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, 0x080c, 0x533d,
--      0x1904, 0x41e1, 0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0148,
--      0xa0c4, 0xff00, 0xa8c6, 0x0600, 0x0120, 0x080c, 0x56ed, 0x1904,
--      0x41e1, 0xd794, 0x1110, 0xd784, 0x0158, 0xac80, 0x0006, 0x2098,
--      0x3400, 0x20a9, 0x0004, 0x53a3, 0x080c, 0x3e8f, 0xd794, 0x0148,
--      0xac80, 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x080c,
--      0x3e8f, 0xa186, 0x007e, 0x0178, 0xa186, 0x0080, 0x0160, 0x6004,
--      0xa084, 0x00ff, 0xa0c2, 0x0006, 0x1210, 0xc1fd, 0x0020, 0x080c,
--      0x55de, 0x1108, 0xc1fd, 0x21a2, 0xc1fc, 0xd794, 0x01d8, 0xac80,
--      0x0000, 0x2098, 0x94a0, 0x20a9, 0x0002, 0x53a3, 0xac80, 0x0003,
--      0x20a6, 0x94a0, 0xac80, 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002,
--      0x53a3, 0x080c, 0x3e81, 0xac80, 0x0026, 0x2098, 0x20a9, 0x0002,
--      0x53a3, 0x0008, 0x94a0, 0xd794, 0x0110, 0xa6b0, 0x000b, 0xa6b0,
--      0x0005, 0x8108, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x0118, 0xa186,
--      0x0100, 0x0040, 0xd78c, 0x0120, 0xa186, 0x0100, 0x0170, 0x0018,
--      0xa186, 0x007e, 0x0150, 0xd794, 0x0118, 0xa686, 0x0020, 0x0010,
--      0xa686, 0x0028, 0x0150, 0x0804, 0x417e, 0x86ff, 0x1120, 0x7120,
--      0x810b, 0x0804, 0x3154, 0x702f, 0x0001, 0x711e, 0x7020, 0xa600,
--      0x7022, 0x772a, 0x2061, 0xc6f2, 0x6007, 0x0000, 0x6612, 0x7024,
--      0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c, 0x164d,
--      0x7007, 0x0002, 0x701b, 0x421d, 0x0005, 0x702c, 0xa005, 0x1170,
--      0x711c, 0x7024, 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061, 0xc6f2,
--      0x6224, 0x6328, 0x642c, 0x6530, 0x0804, 0x417e, 0x7120, 0x810b,
--      0x0804, 0x3154, 0x2029, 0x007e, 0x7924, 0x7a28, 0x7b2c, 0x7c38,
--      0xa184, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x317c, 0xa502,
--      0x0a04, 0x317c, 0xa184, 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x317c,
--      0xa502, 0x0a04, 0x317c, 0xa284, 0xff00, 0x8007, 0xa0e2, 0x0020,
--      0x0a04, 0x317c, 0xa502, 0x0a04, 0x317c, 0xa284, 0x00ff, 0xa0e2,
--      0x0020, 0x0a04, 0x317c, 0xa502, 0x0a04, 0x317c, 0xa384, 0xff00,
--      0x8007, 0xa0e2, 0x0020, 0x0a04, 0x317c, 0xa502, 0x0a04, 0x317c,
--      0xa384, 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x317c, 0xa502, 0x0a04,
--      0x317c, 0xa484, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x317c,
--      0xa502, 0x0a04, 0x317c, 0xa484, 0x00ff, 0xa0e2, 0x0020, 0x0a04,
--      0x317c, 0xa502, 0x0a04, 0x317c, 0x2061, 0xc900, 0x6102, 0x6206,
--      0x630a, 0x640e, 0x0804, 0x3154, 0x080c, 0x4026, 0x0904, 0x3179,
--      0x2009, 0x0020, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x4067,
--      0x701b, 0x429b, 0x0005, 0x0126, 0xade8, 0x000d, 0x2001, 0x0138,
--      0x2003, 0x0000, 0x00e6, 0x2071, 0xc96a, 0x700c, 0x7110, 0xa106,
--      0x1de0, 0x00ee, 0x2091, 0x8000, 0x6800, 0xa005, 0x0904, 0x432f,
--      0x6804, 0x2008, 0xa18c, 0xffe0, 0x1904, 0x432f, 0x680c, 0xa005,
--      0x0904, 0x432f, 0xa082, 0xff01, 0x1a04, 0x432f, 0x6810, 0xa082,
--      0x005c, 0x0a04, 0x432f, 0x6824, 0x2008, 0xa082, 0x0008, 0x0a04,
--      0x432f, 0xa182, 0x0400, 0x1a04, 0x432f, 0x080c, 0x7394, 0x6820,
--      0x8000, 0x6822, 0x6944, 0x6820, 0xa102, 0x0a04, 0x432f, 0x6828,
--      0x6944, 0x810c, 0xa102, 0x0a04, 0x432f, 0x6840, 0xa082, 0x000f,
--      0x1a04, 0x432f, 0x00d6, 0x6848, 0xa005, 0x0148, 0x2008, 0x2069,
--      0xc600, 0x68e8, 0xa108, 0x68b0, 0xa102, 0x1208, 0x69ea, 0x00de,
--      0x20a9, 0x0020, 0x2d98, 0x2069, 0xc682, 0x2da0, 0x53a3, 0x00d6,
--      0x080c, 0x15e5, 0x2d00, 0x00de, 0x0904, 0x4346, 0x684e, 0x080c,
--      0x725b, 0x05d8, 0x080c, 0x7158, 0x080c, 0x5695, 0x0580, 0x00c6,
--      0x2061, 0x0100, 0x6104, 0xa18d, 0x8000, 0x6106, 0x610c, 0xa18d,
--      0x0300, 0xa18c, 0xffbf, 0x610e, 0x2001, 0xc8d4, 0x200c, 0xa18d,
--      0x0300, 0xa18c, 0xffbf, 0x2102, 0x6b10, 0x2061, 0xc96a, 0x6316,
--      0x00ce, 0x685f, 0x0000, 0x2001, 0xc696, 0x2003, 0x0000, 0x080c,
--      0x2a95, 0x2001, 0x0138, 0x2102, 0x012e, 0x0804, 0x3154, 0x080c,
--      0x2a95, 0x2001, 0x0138, 0x2102, 0x012e, 0x0804, 0x317c, 0x080c,
--      0x7475, 0x080c, 0x7484, 0x080c, 0x7147, 0x2001, 0xc695, 0x206c,
--      0x080c, 0x1619, 0x2001, 0xc695, 0x2003, 0x0000, 0x2001, 0xc63a,
--      0x2003, 0x0010, 0x080c, 0x2a95, 0x2001, 0x0138, 0x2102, 0x012e,
--      0x0804, 0x3179, 0x2001, 0xc756, 0x2004, 0xa086, 0x0000, 0x0904,
--      0x3179, 0x080c, 0x768f, 0x1904, 0x3179, 0x2001, 0xc8e5, 0x2004,
--      0xa086, 0xaaaa, 0x0138, 0x2001, 0xc635, 0x2004, 0xa084, 0x0028,
--      0x0904, 0x3170, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1904,
--      0x3179, 0x7924, 0x810c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c,
--      0x4026, 0x0904, 0x3179, 0x080c, 0x4067, 0x701b, 0x4380, 0x0005,
--      0x080c, 0x9586, 0x0904, 0x3179, 0x2001, 0xc8d3, 0x2004, 0x601a,
--      0x0016, 0x0026, 0x2001, 0xc61c, 0x2004, 0x8007, 0x6934, 0xa105,
--      0x6836, 0x2001, 0xc61d, 0x2004, 0x8007, 0x683a, 0x002e, 0x001e,
--      0x2d00, 0x6012, 0x601f, 0x0001, 0x2009, 0x0040, 0x080c, 0x960c,
--      0x0804, 0x3154, 0x0804, 0x3179, 0x2001, 0xc756, 0x200c, 0xa18e,
--      0x0000, 0x0904, 0x4402, 0x2001, 0x0101, 0x200c, 0xa18c, 0x7fff,
--      0x2102, 0x2001, 0x0103, 0x200c, 0xa18c, 0xfeff, 0xa18c, 0xfdff,
--      0xa18d, 0x0040, 0x2102, 0x2001, 0xc8d4, 0x200c, 0xa18c, 0xfeff,
--      0xa18c, 0xfdff, 0xa18d, 0x0040, 0x2102, 0x2001, 0x0138, 0x2003,
--      0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x24f3, 0x012e, 0x0128,
--      0x20a9, 0x006e, 0x1f04, 0x43d2, 0x0ca0, 0x2001, 0xc756, 0x2003,
--      0x0000, 0x080c, 0x2a95, 0x2001, 0x0138, 0x2102, 0x0126, 0x2091,
--      0x8000, 0x2001, 0xc695, 0x200c, 0x81ff, 0x0138, 0x2168, 0x080c,
--      0x1619, 0x2001, 0xc695, 0x2003, 0x0000, 0x2001, 0xc8d3, 0x200c,
--      0x81ff, 0x0138, 0x2168, 0x080c, 0x1619, 0x2001, 0xc8d3, 0x2003,
--      0x0000, 0x2001, 0xc63a, 0x2003, 0x0010, 0x080c, 0x7475, 0x080c,
--      0x7484, 0x012e, 0x0804, 0x3154, 0x7824, 0x00e6, 0x2071, 0xc682,
--      0x00ee, 0x0804, 0x3154, 0x0006, 0x2001, 0xc653, 0x2004, 0xd0cc,
--      0x000e, 0x0005, 0x0006, 0x2001, 0xc672, 0x2004, 0xd0bc, 0x000e,
--      0x0005, 0x6168, 0x7a24, 0x6300, 0x82ff, 0x1118, 0x7926, 0x0804,
--      0x3154, 0x83ff, 0x1904, 0x317c, 0x2001, 0xfff0, 0xa200, 0x1a04,
--      0x317c, 0x2019, 0xffff, 0x606c, 0xa302, 0xa200, 0x0a04, 0x317c,
--      0x7926, 0x626a, 0x0804, 0x3154, 0x2001, 0xc600, 0x2004, 0xa086,
--      0x0003, 0x1904, 0x3179, 0x7c28, 0x7d24, 0x7e38, 0x7f2c, 0x080c,
--      0x4026, 0x0904, 0x3179, 0x2009, 0x0000, 0x2019, 0x0000, 0x7023,
--      0x0000, 0x702f, 0x0000, 0xad80, 0x0003, 0x7026, 0x20a0, 0xa1e0,
--      0xc77b, 0x2c64, 0x8cff, 0x01b8, 0x6004, 0xa084, 0x00ff, 0xa086,
--      0x0006, 0x0130, 0x6004, 0xa084, 0xff00, 0xa086, 0x0600, 0x1158,
--      0x6014, 0x20a2, 0x94a0, 0x6010, 0x8007, 0xa105, 0x8007, 0x20a2,
--      0x94a0, 0xa398, 0x0002, 0x8108, 0xa182, 0x00ff, 0x0120, 0xa386,
--      0x002a, 0x0148, 0x08e0, 0x83ff, 0x1120, 0x7120, 0x810c, 0x0804,
--      0x3154, 0x702f, 0x0001, 0x711e, 0x7020, 0xa300, 0x7022, 0x2061,
--      0xc6f2, 0x6007, 0x0000, 0x6312, 0x7024, 0x600e, 0x6426, 0x652a,
--      0x662e, 0x6732, 0x2c10, 0x080c, 0x164d, 0x7007, 0x0002, 0x701b,
--      0x4492, 0x0005, 0x702c, 0xa005, 0x1168, 0x711c, 0x7024, 0x20a0,
--      0x2019, 0x0000, 0x2061, 0xc6f2, 0x6424, 0x6528, 0x662c, 0x6730,
--      0x0804, 0x444f, 0x7120, 0x810c, 0x0804, 0x3154, 0x81ff, 0x1904,
--      0x3179, 0x60d4, 0xd0ac, 0x1118, 0xd09c, 0x0904, 0x3179, 0x080c,
--      0x4026, 0x0904, 0x3179, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
--      0x080c, 0x4067, 0x701b, 0x44bd, 0x0005, 0x00d6, 0xade8, 0x000d,
--      0x6828, 0xa0be, 0x7000, 0x0148, 0xa0be, 0x7100, 0x0130, 0xa0be,
--      0x7200, 0x0118, 0x00de, 0x0804, 0x317c, 0x6820, 0x6924, 0x080c,
--      0x29c7, 0x1510, 0x080c, 0x52e1, 0x11f8, 0x7122, 0x6612, 0x6516,
--      0x6e18, 0x00c6, 0x080c, 0x4026, 0x01b8, 0x080c, 0x4026, 0x01a0,
--      0x00ce, 0x00de, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x6823,
--      0x0000, 0x6804, 0x2068, 0x080c, 0xadee, 0x0904, 0x3179, 0x7007,
--      0x0003, 0x701b, 0x44f7, 0x0005, 0x00de, 0x0804, 0x3179, 0x7120,
--      0x080c, 0x2f41, 0x6820, 0xa086, 0x8001, 0x0904, 0x3179, 0x2d00,
--      0x701e, 0x6804, 0xa080, 0x0002, 0x0006, 0x20a9, 0x002a, 0x2098,
--      0x20a0, 0x080c, 0x4ecb, 0x000e, 0xade8, 0x000d, 0x6a08, 0x6b0c,
--      0x6c10, 0x6d14, 0x2061, 0xc6f2, 0x6007, 0x0000, 0x6e00, 0x6f28,
--      0xa7c6, 0x7000, 0x1108, 0x0018, 0xa7c6, 0x7100, 0x1140, 0xa6c2,
--      0x0004, 0x0a04, 0x317c, 0x2009, 0x0004, 0x0804, 0x406a, 0xa7c6,
--      0x7200, 0x1904, 0x317c, 0xa6c2, 0x0054, 0x0a04, 0x317c, 0x600e,
--      0x6013, 0x002a, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c,
--      0x164d, 0x7007, 0x0002, 0x701b, 0x453e, 0x0005, 0x701c, 0x2068,
--      0x6804, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x0006, 0x20a9,
--      0x002a, 0x2098, 0x20a0, 0x080c, 0x4ecb, 0x000e, 0x2009, 0x002a,
--      0x2061, 0xc6f2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0804, 0x406a,
--      0x81ff, 0x1904, 0x3179, 0x792c, 0x2001, 0xc8e7, 0x2102, 0x080c,
--      0x403b, 0x0904, 0x317c, 0x080c, 0x5403, 0x0904, 0x3179, 0x0126,
--      0x2091, 0x8000, 0x080c, 0x5535, 0x012e, 0x0804, 0x3154, 0x7824,
--      0xd08c, 0x1118, 0xd084, 0x0904, 0x3bf0, 0x080c, 0x404b, 0x0904,
--      0x317c, 0x00c6, 0x080c, 0x4026, 0x00ce, 0x1120, 0x2009, 0x0002,
--      0x0804, 0x3179, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0128,
--      0xa08e, 0x0004, 0x0110, 0xa08e, 0x0005, 0x15b8, 0x7824, 0xd08c,
--      0x0120, 0x6000, 0xc08c, 0x6002, 0x0030, 0x2001, 0xc653, 0x2004,
--      0xd0b4, 0x0904, 0x3c2c, 0x7824, 0xa084, 0xff00, 0xa08e, 0x7e00,
--      0x0904, 0x3c2c, 0xa08e, 0x7f00, 0x0904, 0x3c2c, 0xa08e, 0x8000,
--      0x0904, 0x3c2c, 0x6000, 0xd08c, 0x1904, 0x3c2c, 0x6837, 0x0000,
--      0x6838, 0xc0fd, 0x683a, 0x080c, 0xae0a, 0x1120, 0x2009, 0x0003,
--      0x0804, 0x3179, 0x7007, 0x0003, 0x701b, 0x45bf, 0x0005, 0x080c,
--      0x404b, 0x0904, 0x317c, 0x0804, 0x3c2c, 0x2009, 0xc631, 0x210c,
--      0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3179, 0x2001, 0xc600,
--      0x2004, 0xa086, 0x0003, 0x0120, 0x2009, 0x0007, 0x0804, 0x3179,
--      0x2001, 0xc653, 0x2004, 0xd0ac, 0x0120, 0x2009, 0x0008, 0x0804,
--      0x3179, 0x609c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x3c2c, 0x6837,
--      0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0xae9b,
--      0x1120, 0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b,
--      0x45fa, 0x0005, 0x6830, 0xa086, 0x0100, 0x1120, 0x2009, 0x0004,
--      0x0804, 0x3179, 0x080c, 0x404b, 0x0904, 0x317c, 0x0804, 0x458e,
--      0x81ff, 0x2009, 0x0001, 0x1904, 0x3179, 0x6000, 0xa086, 0x0003,
--      0x2009, 0x0007, 0x1904, 0x3179, 0x2001, 0xc653, 0x2004, 0xd0ac,
--      0x2009, 0x0008, 0x1904, 0x3179, 0x080c, 0x404b, 0x0904, 0x317c,
--      0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x2009, 0x0009, 0x1904,
--      0x3179, 0x00c6, 0x080c, 0x4026, 0x00ce, 0x2009, 0x0002, 0x0904,
--      0x3179, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
--      0x7928, 0xa194, 0xff00, 0xa18c, 0x00ff, 0xa006, 0x82ff, 0x1128,
--      0xc0ed, 0x6952, 0x792c, 0x6956, 0x0048, 0xa28e, 0x0100, 0x1904,
--      0x317c, 0xc0e5, 0x6853, 0x0000, 0x6857, 0x0000, 0x683e, 0x080c,
--      0xb058, 0x2009, 0x0003, 0x0904, 0x3179, 0x7007, 0x0003, 0x701b,
--      0x465a, 0x0005, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004, 0x0904,
--      0x3179, 0x0804, 0x3154, 0x81ff, 0x2009, 0x0001, 0x1904, 0x3179,
--      0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x1904, 0x3179, 0x080c,
--      0x404b, 0x0904, 0x317c, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
--      0x2009, 0x0009, 0x1904, 0x3179, 0x00c6, 0x080c, 0x4026, 0x00ce,
--      0x2009, 0x0002, 0x0904, 0x3179, 0xad80, 0x000f, 0x2009, 0x0008,
--      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x4067, 0x701b, 0x4691,
--      0x0005, 0x00d6, 0xade8, 0x000f, 0x6800, 0xa086, 0x0500, 0x1140,
--      0x6804, 0xa005, 0x1128, 0x6808, 0xa084, 0xff00, 0x1108, 0x0018,
--      0x00de, 0x1904, 0x317c, 0x00de, 0x6837, 0x0000, 0x6833, 0x0000,
--      0x6838, 0xc0fd, 0x683a, 0x00c6, 0x080c, 0x404b, 0x1118, 0x00ce,
--      0x0804, 0x317c, 0x080c, 0xb0a7, 0x2009, 0x0003, 0x00ce, 0x0904,
--      0x3179, 0x7007, 0x0003, 0x701b, 0x46be, 0x0005, 0x6830, 0xa086,
--      0x0100, 0x2009, 0x0004, 0x0904, 0x3179, 0x0804, 0x3154, 0x81ff,
--      0x0120, 0x2009, 0x0001, 0x0804, 0x3179, 0x6000, 0xa086, 0x0003,
--      0x0120, 0x2009, 0x0007, 0x0804, 0x3179, 0x7e24, 0x860f, 0xa18c,
--      0x00ff, 0xa6b4, 0x00ff, 0x080c, 0x533d, 0x1904, 0x317c, 0xa186,
--      0x007f, 0x0150, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0120,
--      0x2009, 0x0009, 0x0804, 0x3179, 0x00c6, 0x080c, 0x4026, 0x00ce,
--      0x1120, 0x2009, 0x0002, 0x0804, 0x3179, 0x6837, 0x0000, 0x6838,
--      0xc0fd, 0x683a, 0x2001, 0x0100, 0x8007, 0x680a, 0x080c, 0xae25,
--      0x1120, 0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b,
--      0x470a, 0x0005, 0x6808, 0x8007, 0xa086, 0x0100, 0x1120, 0x2009,
--      0x0004, 0x0804, 0x3179, 0x68b0, 0x6836, 0x6810, 0x8007, 0xa084,
--      0x00ff, 0x800c, 0x6814, 0x8007, 0xa084, 0x00ff, 0x8004, 0xa080,
--      0x0002, 0xa108, 0xad80, 0x0004, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
--      0x0804, 0x406a, 0x080c, 0x4026, 0x1120, 0x2009, 0x0002, 0x0804,
--      0x3179, 0x7924, 0xa194, 0xff00, 0xa18c, 0x00ff, 0x8217, 0x82ff,
--      0x0110, 0x0804, 0x317c, 0x2009, 0x001a, 0x7a2c, 0x7b28, 0x7c3c,
--      0x7d38, 0x080c, 0x4067, 0x701b, 0x4746, 0x0005, 0x2001, 0xc62a,
--      0x2003, 0x0001, 0xad80, 0x000d, 0x2098, 0x20a9, 0x001a, 0x20a1,
--      0xc90d, 0x53a3, 0x0804, 0x3154, 0x080c, 0x4026, 0x1120, 0x2009,
--      0x0002, 0x0804, 0x3179, 0x7924, 0xa194, 0xff00, 0xa18c, 0x00ff,
--      0x8217, 0x82ff, 0x0110, 0x0804, 0x317c, 0x2099, 0xc90d, 0x20a0,
--      0x20a9, 0x001a, 0x53a3, 0x2009, 0x001a, 0x7a2c, 0x7b28, 0x7c3c,
--      0x7d38, 0x0804, 0x406a, 0x7824, 0xa08a, 0x1000, 0x1a04, 0x317c,
--      0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b, 0xa108, 0x00c6,
--      0x2061, 0xc93a, 0x6142, 0x00ce, 0x012e, 0x0804, 0x3154, 0x00c6,
--      0x080c, 0x5f22, 0x1188, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001,
--      0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5f66, 0x080c,
--      0x5e5a, 0x080c, 0x1519, 0x0038, 0x2061, 0xc600, 0x6030, 0xc09d,
--      0x6032, 0x080c, 0x4e5b, 0x00ce, 0x0005, 0x0126, 0x2091, 0x8000,
--      0x00c6, 0x2061, 0xc93a, 0x7924, 0x6152, 0x614e, 0x6057, 0x0000,
--      0x604b, 0x0009, 0x7838, 0x606a, 0x783c, 0x6066, 0x7828, 0x6062,
--      0x782c, 0x605e, 0x2061, 0xc8e8, 0x2001, 0xc94f, 0x600e, 0x6013,
--      0x0001, 0x6017, 0x0002, 0x6007, 0x0000, 0x6037, 0x0000, 0x00ce,
--      0x012e, 0x0804, 0x3154, 0x0126, 0x00c6, 0x00e6, 0x2061, 0x0100,
--      0x2071, 0xc600, 0x6044, 0xd0a4, 0x11b0, 0xd084, 0x0118, 0x080c,
--      0x4942, 0x0068, 0xd08c, 0x0118, 0x080c, 0x4863, 0x0040, 0xd094,
--      0x0118, 0x080c, 0x4834, 0x0018, 0xd09c, 0x0108, 0x0061, 0x00ee,
--      0x00ce, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d,
--      0x612a, 0x001e, 0x0ca0, 0x624c, 0xa286, 0xf0f0, 0x1150, 0x6048,
--      0xa086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010,
--      0x0490, 0xa294, 0xff00, 0xa296, 0xf700, 0x0178, 0x7134, 0xd1a4,
--      0x1160, 0x6240, 0xa295, 0x0100, 0x6242, 0xa294, 0x0010, 0x0128,
--      0x2009, 0x00f7, 0x080c, 0x4eeb, 0x00f0, 0x6040, 0xa084, 0x0010,
--      0xa085, 0x0140, 0x6042, 0x6043, 0x0000, 0x707b, 0x0000, 0x7097,
--      0x0001, 0x70bb, 0x0000, 0x70d7, 0x0000, 0x2009, 0xcdc0, 0x200b,
--      0x0000, 0x708b, 0x0000, 0x707f, 0x000a, 0x2009, 0x000a, 0x2011,
--      0x4e11, 0x080c, 0x7036, 0x0005, 0x0156, 0x2001, 0xc674, 0x2004,
--      0xd08c, 0x0110, 0x7053, 0xffff, 0x707c, 0xa005, 0x1510, 0x2011,
--      0x4e11, 0x080c, 0x6fad, 0x6040, 0xa094, 0x0010, 0xa285, 0x0020,
--      0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x484b,
--      0x6242, 0x708f, 0x0000, 0x6040, 0xa094, 0x0010, 0xa285, 0x0080,
--      0x6042, 0x6242, 0x0030, 0x6242, 0x708f, 0x0000, 0x7083, 0x0000,
--      0x0000, 0x015e, 0x0005, 0x7080, 0xa08a, 0x0003, 0x1210, 0x0023,
--      0x0010, 0x080c, 0x1519, 0x0005, 0x486f, 0x48bf, 0x4941, 0x00f6,
--      0x7083, 0x0001, 0x20e1, 0xa000, 0xe000, 0x20e1, 0x8700, 0x080c,
--      0x25bb, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2079, 0xcc00, 0x207b,
--      0x2200, 0x7807, 0x00ef, 0x780b, 0x0000, 0x780f, 0x00ef, 0x7813,
--      0x0138, 0x7817, 0x0000, 0x781b, 0x0000, 0x781f, 0x0000, 0x7823,
--      0xffff, 0x7827, 0xffff, 0x782b, 0x0000, 0x782f, 0x0000, 0x2079,
--      0xcc0c, 0x207b, 0x1101, 0x7807, 0x0000, 0x2099, 0xc605, 0x20a1,
--      0xcc0e, 0x20a9, 0x0004, 0x53a3, 0x2079, 0xcc12, 0x207b, 0x0000,
--      0x7807, 0x0000, 0x2099, 0xcc00, 0x20a1, 0x020b, 0x20a9, 0x0014,
--      0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x4e42, 0x00fe,
--      0x7087, 0x0000, 0x6043, 0x0008, 0x6043, 0x0000, 0x0005, 0x00d6,
--      0x7084, 0x7087, 0x0000, 0xa025, 0x0904, 0x4929, 0x6020, 0xd0b4,
--      0x1904, 0x4927, 0x7194, 0x81ff, 0x0904, 0x4917, 0xa486, 0x000c,
--      0x1904, 0x4922, 0xa480, 0x0018, 0x8004, 0x20a8, 0x2011, 0xcc80,
--      0x2019, 0xcc00, 0x220c, 0x2304, 0xa106, 0x11b8, 0x8210, 0x8318,
--      0x1f04, 0x48da, 0x6043, 0x0004, 0x608b, 0xbc94, 0x608f, 0xf0f0,
--      0x6043, 0x0006, 0x7083, 0x0002, 0x708f, 0x0002, 0x2009, 0x07d0,
--      0x2011, 0x4e18, 0x080c, 0x7036, 0x0490, 0x2069, 0xcc80, 0x6930,
--      0xa18e, 0x1101, 0x1538, 0x6834, 0xa005, 0x1520, 0x6900, 0xa18c,
--      0x00ff, 0x1118, 0x6804, 0xa005, 0x0190, 0x2011, 0xcc8e, 0x2019,
--      0xc605, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, 0x0230, 0x1190,
--      0x8210, 0x8318, 0x1f04, 0x490b, 0x0068, 0x7097, 0x0000, 0x20e1,
--      0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b, 0x20a9,
--      0x0014, 0x53a6, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00de,
--      0x0005, 0x6040, 0xa085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8,
--      0x60c3, 0x000c, 0x2011, 0xc931, 0x2013, 0x0000, 0x7087, 0x0000,
--      0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x8bec,
--      0x0c30, 0x0005, 0x708c, 0xa08a, 0x001d, 0x1210, 0x0023, 0x0010,
--      0x080c, 0x1519, 0x0005, 0x4975, 0x4984, 0x49ac, 0x49c5, 0x49e9,
--      0x4a11, 0x4a35, 0x4a66, 0x4a8a, 0x4ab2, 0x4ae9, 0x4b11, 0x4b2d,
--      0x4b43, 0x4b63, 0x4b76, 0x4b7e, 0x4bae, 0x4bd2, 0x4bfa, 0x4c1e,
--      0x4c4f, 0x4c8c, 0x4cbb, 0x4cd7, 0x4d16, 0x4d36, 0x4d4f, 0x4d50,
--      0x00c6, 0x2061, 0xc600, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004,
--      0xa084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x608b, 0xbc94, 0x608f,
--      0xf0f0, 0x6043, 0x0002, 0x708f, 0x0001, 0x2009, 0x07d0, 0x2011,
--      0x4e18, 0x080c, 0x7036, 0x0005, 0x00f6, 0x7084, 0xa086, 0x0014,
--      0x1508, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x11e0, 0x2079, 0xcc80,
--      0x7a30, 0xa296, 0x1102, 0x11a0, 0x7834, 0xa005, 0x1188, 0x7a38,
--      0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x2011,
--      0x4e18, 0x080c, 0x6fad, 0x708f, 0x0010, 0x080c, 0x4b7e, 0x0010,
--      0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x0003, 0x6043, 0x0004,
--      0x2011, 0x4e18, 0x080c, 0x6fad, 0x080c, 0x4ed3, 0x20a3, 0x1102,
--      0x20a3, 0x0000, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04, 0x49bc,
--      0x60c3, 0x0014, 0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084, 0xa005,
--      0x01f0, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0014, 0x11a8,
--      0x2079, 0xcc80, 0x7a30, 0xa296, 0x1102, 0x1178, 0x7834, 0xa005,
--      0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb,
--      0x0001, 0x708f, 0x0004, 0x0029, 0x0010, 0x080c, 0x4e5b, 0x00fe,
--      0x0005, 0x708f, 0x0005, 0x080c, 0x4ed3, 0x20a3, 0x1103, 0x20a3,
--      0x0000, 0x3430, 0x2011, 0xcc8e, 0x080c, 0x4f24, 0x1160, 0x7078,
--      0xa005, 0x1148, 0x7150, 0xa186, 0xffff, 0x0128, 0x080c, 0x4ddc,
--      0x0110, 0x080c, 0x4f02, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6,
--      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42,
--      0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4e18, 0x080c,
--      0x6fad, 0xa086, 0x0014, 0x11a8, 0x2079, 0xcc80, 0x7a30, 0xa296,
--      0x1103, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
--      0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0006, 0x0029,
--      0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x0007, 0x080c,
--      0x4ed3, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0xcc8e,
--      0x080c, 0x4f24, 0x11a8, 0x7078, 0xa005, 0x1190, 0x7158, 0xa186,
--      0xffff, 0x0170, 0xa180, 0x2f6e, 0x200d, 0xa18c, 0xff00, 0x810f,
--      0x080c, 0x4ddc, 0x0128, 0x080c, 0x4412, 0x0110, 0x080c, 0x2a11,
--      0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084,
--      0xa005, 0x01f0, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0014,
--      0x11a8, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1104, 0x1178, 0x7834,
--      0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110,
--      0x70bb, 0x0001, 0x708f, 0x0008, 0x0029, 0x0010, 0x080c, 0x4e5b,
--      0x00fe, 0x0005, 0x708f, 0x0009, 0x080c, 0x4ed3, 0x20a3, 0x1105,
--      0x20a3, 0x0100, 0x3430, 0x080c, 0x4f24, 0x1150, 0x7078, 0xa005,
--      0x1138, 0x080c, 0x4d51, 0x1170, 0xa085, 0x0001, 0x080c, 0x2a11,
--      0x20a9, 0x0008, 0x2099, 0xcc8e, 0x26a0, 0x53a6, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0010, 0x080c,
--      0x4968, 0x0005, 0x00f6, 0x7084, 0xa005, 0x0588, 0x2011, 0x4e18,
--      0x080c, 0x6fad, 0xa086, 0x0014, 0x1540, 0x2079, 0xcc80, 0x7a30,
--      0xa296, 0x1105, 0x1510, 0x7834, 0x2011, 0x0100, 0xa21e, 0x1160,
-+      0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0x683a, 0xd89c, 0x1130, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x2e46, 0x012e, 0x601f, 0x0001, 0x2001,
-+      0x0000, 0x080c, 0x5298, 0xd89c, 0x0138, 0x2001, 0x0004, 0x080c,
-+      0x52aa, 0x2009, 0x0003, 0x0030, 0x2001, 0x0002, 0x080c, 0x52aa,
-+      0x2009, 0x0002, 0x080c, 0x962c, 0xa085, 0x0001, 0x00ee, 0x00ce,
-+      0x00be, 0x001e, 0x1120, 0x2009, 0x0003, 0x0804, 0x3179, 0x7007,
-+      0x0003, 0x701b, 0x3f6c, 0x0005, 0x6830, 0xa086, 0x0100, 0x7020,
-+      0x2060, 0x1138, 0x2009, 0x0004, 0x6204, 0xa294, 0x00ff, 0x0804,
-+      0x3179, 0x2009, 0x0000, 0x6838, 0xd0f4, 0x1904, 0x3154, 0x080c,
-+      0x55f7, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x0804,
-+      0x3154, 0x00e6, 0x00d6, 0xa02e, 0x2001, 0xc635, 0x2004, 0xd0ac,
-+      0x0130, 0xa026, 0x20a9, 0x00ff, 0x2071, 0xc77b, 0x0030, 0x2021,
-+      0x0080, 0x20a9, 0x007f, 0x2071, 0xc7fb, 0x2e04, 0xa005, 0x1130,
-+      0x2100, 0xa406, 0x15a0, 0x2428, 0xc5fd, 0x0488, 0x2068, 0x6f10,
-+      0x2700, 0xa306, 0x11e0, 0x6e14, 0x2600, 0xa206, 0x11c0, 0x2400,
-+      0xa106, 0x1190, 0x2d60, 0xd884, 0x0598, 0x080c, 0x5706, 0x1580,
-+      0x2001, 0x4000, 0x0470, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-+      0x1538, 0x2001, 0x4000, 0x0428, 0x2001, 0x4007, 0x0410, 0x2400,
-+      0xa106, 0x1168, 0x6e14, 0x87ff, 0x1138, 0x86ff, 0x09a0, 0x2001,
-+      0xc635, 0x2004, 0xd0ac, 0x1978, 0x2001, 0x4008, 0x0090, 0x8420,
-+      0x8e70, 0x1f04, 0x3f9d, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048,
-+      0x2001, 0x0001, 0x0030, 0x080c, 0x52fa, 0x1dd0, 0x6312, 0x6216,
-+      0xa006, 0xa005, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x1904, 0x3179,
-+      0x080c, 0x403f, 0x0904, 0x3179, 0x6837, 0x0000, 0x6838, 0xc0fd,
-+      0x683a, 0x7824, 0xa005, 0x0904, 0x317c, 0xa096, 0x00ff, 0x0120,
-+      0xa092, 0x0004, 0x1a04, 0x317c, 0x2010, 0x2d18, 0x080c, 0x2df9,
-+      0x0904, 0x3179, 0x7007, 0x0003, 0x701b, 0x400f, 0x0005, 0x6830,
-+      0xa086, 0x0100, 0x0904, 0x3179, 0x0804, 0x3154, 0x7924, 0xa18c,
-+      0xff00, 0x810f, 0x60d4, 0xd0ac, 0x1120, 0xa182, 0x0080, 0x0a04,
-+      0x317c, 0xa182, 0x00ff, 0x1a04, 0x317c, 0x0126, 0x2091, 0x8000,
-+      0x080c, 0xacda, 0x1188, 0xa190, 0xc77b, 0x2204, 0xa065, 0x0160,
-+      0x080c, 0x4f60, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x0110, 0x6017,
-+      0x0000, 0x012e, 0x0804, 0x3154, 0x012e, 0x0804, 0x3179, 0x080c,
-+      0x1602, 0x0188, 0xa006, 0x6802, 0x7010, 0xa005, 0x1120, 0x2d00,
-+      0x7012, 0x7016, 0x0030, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006,
-+      0x7016, 0xad80, 0x000d, 0x0005, 0x7924, 0x810f, 0xa18c, 0x00ff,
-+      0x080c, 0x5356, 0x1130, 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000,
-+      0x0208, 0xa066, 0x8cff, 0x0005, 0x7e24, 0x860f, 0xa18c, 0x00ff,
-+      0x080c, 0x5356, 0x1128, 0xa6b4, 0x00ff, 0xa682, 0x4000, 0x0208,
-+      0xa066, 0x8cff, 0x0005, 0x0016, 0x7110, 0x81ff, 0x0128, 0x2168,
-+      0x6904, 0x080c, 0x1619, 0x0cc8, 0x7112, 0x7116, 0x001e, 0x0005,
-+      0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0xc6f2, 0x6606,
-+      0x6112, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c,
-+      0x164d, 0x7007, 0x0002, 0x701b, 0x3154, 0x0005, 0x00f6, 0x0126,
-+      0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0xc6b0, 0x2004, 0xa005,
-+      0x1168, 0x0e04, 0x40ae, 0x7818, 0xd084, 0x1140, 0x7a22, 0x7b26,
-+      0x7c2a, 0x781b, 0x0001, 0x2091, 0x4080, 0x0408, 0x0016, 0x00c6,
-+      0x00e6, 0x2071, 0xc6a2, 0x7138, 0xa182, 0x0010, 0x0218, 0x7030,
-+      0x2060, 0x0078, 0x7030, 0xa0e0, 0x0004, 0xac82, 0xc6f2, 0x0210,
-+      0x2061, 0xc6b2, 0x2c00, 0x7032, 0x81ff, 0x1108, 0x7036, 0x8108,
-+      0x713a, 0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x001e, 0x012e,
-+      0x00fe, 0x0005, 0x00e6, 0x2071, 0xc6a2, 0x7038, 0xa005, 0x0570,
-+      0x0126, 0x2091, 0x8000, 0x0e04, 0x4105, 0x00f6, 0x2079, 0x0000,
-+      0x7818, 0xd084, 0x1508, 0x00c6, 0x7034, 0x2060, 0x2c04, 0x7822,
-+      0x6004, 0x7826, 0x6008, 0x782a, 0x781b, 0x0001, 0x2091, 0x4080,
-+      0x7038, 0x8001, 0x703a, 0xa005, 0x1130, 0x7033, 0xc6b2, 0x7037,
-+      0xc6b2, 0x00ce, 0x0048, 0xac80, 0x0004, 0xa0fa, 0xc6f2, 0x0210,
-+      0x2001, 0xc6b2, 0x7036, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005,
-+      0x0026, 0x2001, 0xc653, 0x2004, 0xd0c4, 0x0120, 0x2011, 0x8014,
-+      0x080c, 0x4096, 0x002e, 0x0005, 0x81ff, 0x1904, 0x3179, 0x0126,
-+      0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c,
-+      0x5f3b, 0x1178, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600,
-+      0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5f7f, 0x080c, 0x5e73,
-+      0x0010, 0x080c, 0x4e74, 0x012e, 0x0804, 0x3154, 0x7824, 0x2008,
-+      0xa18c, 0xfffd, 0x1128, 0x61e0, 0xa10d, 0x61e2, 0x0804, 0x3154,
-+      0x0804, 0x317c, 0x81ff, 0x1904, 0x3179, 0x6000, 0xa086, 0x0003,
-+      0x1904, 0x3179, 0x2001, 0xc653, 0x2004, 0xd0ac, 0x1904, 0x3179,
-+      0x080c, 0x4064, 0x0904, 0x317c, 0x6004, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x1120, 0x7828, 0xa005, 0x0904, 0x3154, 0x00c6, 0x080c,
-+      0x403f, 0x00ce, 0x0904, 0x3179, 0x6837, 0x0000, 0x6833, 0x0000,
-+      0x6838, 0xc0fd, 0x683a, 0x080c, 0xaebb, 0x0904, 0x3179, 0x7007,
-+      0x0003, 0x701b, 0x4174, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904,
-+      0x3179, 0x0804, 0x3154, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003,
-+      0x1904, 0x3179, 0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c,
-+      0x403f, 0x0904, 0x3179, 0x2009, 0x0000, 0x2031, 0x0000, 0x7023,
-+      0x0000, 0x702f, 0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, 0x080c,
-+      0x5356, 0x1904, 0x41fa, 0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006,
-+      0x0148, 0xa0c4, 0xff00, 0xa8c6, 0x0600, 0x0120, 0x080c, 0x5706,
-+      0x1904, 0x41fa, 0xd794, 0x1110, 0xd784, 0x0158, 0xac80, 0x0006,
-+      0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x080c, 0x3e91, 0xd794,
-+      0x0148, 0xac80, 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3,
-+      0x080c, 0x3e91, 0xa186, 0x007e, 0x0178, 0xa186, 0x0080, 0x0160,
-+      0x6004, 0xa084, 0x00ff, 0xa0c2, 0x0006, 0x1210, 0xc1fd, 0x0020,
-+      0x080c, 0x55f7, 0x1108, 0xc1fd, 0x21a2, 0xc1fc, 0xd794, 0x01d8,
-+      0xac80, 0x0000, 0x2098, 0x94a0, 0x20a9, 0x0002, 0x53a3, 0xac80,
-+      0x0003, 0x20a6, 0x94a0, 0xac80, 0x0004, 0x2098, 0x3400, 0x20a9,
-+      0x0002, 0x53a3, 0x080c, 0x3e83, 0xac80, 0x0026, 0x2098, 0x20a9,
-+      0x0002, 0x53a3, 0x0008, 0x94a0, 0xd794, 0x0110, 0xa6b0, 0x000b,
-+      0xa6b0, 0x0005, 0x8108, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x0118,
-+      0xa186, 0x0100, 0x0040, 0xd78c, 0x0120, 0xa186, 0x0100, 0x0170,
-+      0x0018, 0xa186, 0x007e, 0x0150, 0xd794, 0x0118, 0xa686, 0x0020,
-+      0x0010, 0xa686, 0x0028, 0x0150, 0x0804, 0x4197, 0x86ff, 0x1120,
-+      0x7120, 0x810b, 0x0804, 0x3154, 0x702f, 0x0001, 0x711e, 0x7020,
-+      0xa600, 0x7022, 0x772a, 0x2061, 0xc6f2, 0x6007, 0x0000, 0x6612,
-+      0x7024, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c,
-+      0x164d, 0x7007, 0x0002, 0x701b, 0x4236, 0x0005, 0x702c, 0xa005,
-+      0x1170, 0x711c, 0x7024, 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061,
-+      0xc6f2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0804, 0x4197, 0x7120,
-+      0x810b, 0x0804, 0x3154, 0x2029, 0x007e, 0x7924, 0x7a28, 0x7b2c,
-+      0x7c38, 0xa184, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x317c,
-+      0xa502, 0x0a04, 0x317c, 0xa184, 0x00ff, 0xa0e2, 0x0020, 0x0a04,
-+      0x317c, 0xa502, 0x0a04, 0x317c, 0xa284, 0xff00, 0x8007, 0xa0e2,
-+      0x0020, 0x0a04, 0x317c, 0xa502, 0x0a04, 0x317c, 0xa284, 0x00ff,
-+      0xa0e2, 0x0020, 0x0a04, 0x317c, 0xa502, 0x0a04, 0x317c, 0xa384,
-+      0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x317c, 0xa502, 0x0a04,
-+      0x317c, 0xa384, 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x317c, 0xa502,
-+      0x0a04, 0x317c, 0xa484, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04,
-+      0x317c, 0xa502, 0x0a04, 0x317c, 0xa484, 0x00ff, 0xa0e2, 0x0020,
-+      0x0a04, 0x317c, 0xa502, 0x0a04, 0x317c, 0x2061, 0xc900, 0x6102,
-+      0x6206, 0x630a, 0x640e, 0x0804, 0x3154, 0x080c, 0x403f, 0x0904,
-+      0x3179, 0x2009, 0x0020, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c,
-+      0x4080, 0x701b, 0x42b4, 0x0005, 0x0126, 0xade8, 0x000d, 0x2001,
-+      0x0138, 0x2003, 0x0000, 0x00e6, 0x2071, 0xc96a, 0x700c, 0x7110,
-+      0xa106, 0x1de0, 0x00ee, 0x2091, 0x8000, 0x6800, 0xa005, 0x0904,
-+      0x4348, 0x6804, 0x2008, 0xa18c, 0xffe0, 0x1904, 0x4348, 0x680c,
-+      0xa005, 0x0904, 0x4348, 0xa082, 0xff01, 0x1a04, 0x4348, 0x6810,
-+      0xa082, 0x005c, 0x0a04, 0x4348, 0x6824, 0x2008, 0xa082, 0x0008,
-+      0x0a04, 0x4348, 0xa182, 0x0400, 0x1a04, 0x4348, 0x080c, 0x73ad,
-+      0x6820, 0x8000, 0x6822, 0x6944, 0x6820, 0xa102, 0x0a04, 0x4348,
-+      0x6828, 0x6944, 0x810c, 0xa102, 0x0a04, 0x4348, 0x6840, 0xa082,
-+      0x000f, 0x1a04, 0x4348, 0x00d6, 0x6848, 0xa005, 0x0148, 0x2008,
-+      0x2069, 0xc600, 0x68e8, 0xa108, 0x68b0, 0xa102, 0x1208, 0x69ea,
-+      0x00de, 0x20a9, 0x0020, 0x2d98, 0x2069, 0xc682, 0x2da0, 0x53a3,
-+      0x00d6, 0x080c, 0x15e5, 0x2d00, 0x00de, 0x0904, 0x435f, 0x684e,
-+      0x080c, 0x7274, 0x05d8, 0x080c, 0x7171, 0x080c, 0x56ae, 0x0580,
-+      0x00c6, 0x2061, 0x0100, 0x6104, 0xa18d, 0x8000, 0x6106, 0x610c,
-+      0xa18d, 0x0300, 0xa18c, 0xffbf, 0x610e, 0x2001, 0xc8d4, 0x200c,
-+      0xa18d, 0x0300, 0xa18c, 0xffbf, 0x2102, 0x6b10, 0x2061, 0xc96a,
-+      0x6316, 0x00ce, 0x685f, 0x0000, 0x2001, 0xc696, 0x2003, 0x0000,
-+      0x080c, 0x2a95, 0x2001, 0x0138, 0x2102, 0x012e, 0x0804, 0x3154,
-+      0x080c, 0x2a95, 0x2001, 0x0138, 0x2102, 0x012e, 0x0804, 0x317c,
-+      0x080c, 0x748e, 0x080c, 0x749d, 0x080c, 0x7160, 0x2001, 0xc695,
-+      0x206c, 0x080c, 0x1619, 0x2001, 0xc695, 0x2003, 0x0000, 0x2001,
-+      0xc63a, 0x2003, 0x0010, 0x080c, 0x2a95, 0x2001, 0x0138, 0x2102,
-+      0x012e, 0x0804, 0x3179, 0x2001, 0xc756, 0x2004, 0xa086, 0x0000,
-+      0x0904, 0x3179, 0x080c, 0x76a8, 0x1904, 0x3179, 0x2001, 0xc8e5,
-+      0x2004, 0xa086, 0xaaaa, 0x0138, 0x2001, 0xc635, 0x2004, 0xa084,
-+      0x0028, 0x0904, 0x3170, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003,
-+      0x1904, 0x3179, 0x7924, 0x810c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-+      0x080c, 0x403f, 0x0904, 0x3179, 0x080c, 0x4080, 0x701b, 0x4399,
-+      0x0005, 0x080c, 0x95a6, 0x0904, 0x3179, 0x2001, 0xc8d3, 0x2004,
-+      0x601a, 0x0016, 0x0026, 0x2001, 0xc61c, 0x2004, 0x8007, 0x6934,
-+      0xa105, 0x6836, 0x2001, 0xc61d, 0x2004, 0x8007, 0x683a, 0x002e,
-+      0x001e, 0x2d00, 0x6012, 0x601f, 0x0001, 0x2009, 0x0040, 0x080c,
-+      0x962c, 0x0804, 0x3154, 0x0804, 0x3179, 0x2001, 0xc756, 0x200c,
-+      0xa18e, 0x0000, 0x0904, 0x441b, 0x2001, 0x0101, 0x200c, 0xa18c,
-+      0x7fff, 0x2102, 0x2001, 0x0103, 0x200c, 0xa18c, 0xfeff, 0xa18c,
-+      0xfdff, 0xa18d, 0x0040, 0x2102, 0x2001, 0xc8d4, 0x200c, 0xa18c,
-+      0xfeff, 0xa18c, 0xfdff, 0xa18d, 0x0040, 0x2102, 0x2001, 0x0138,
-+      0x2003, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x24f3, 0x012e,
-+      0x0128, 0x20a9, 0x006e, 0x1f04, 0x43eb, 0x0ca0, 0x2001, 0xc756,
-+      0x2003, 0x0000, 0x080c, 0x2a95, 0x2001, 0x0138, 0x2102, 0x0126,
-+      0x2091, 0x8000, 0x2001, 0xc695, 0x200c, 0x81ff, 0x0138, 0x2168,
-+      0x080c, 0x1619, 0x2001, 0xc695, 0x2003, 0x0000, 0x2001, 0xc8d3,
-+      0x200c, 0x81ff, 0x0138, 0x2168, 0x080c, 0x1619, 0x2001, 0xc8d3,
-+      0x2003, 0x0000, 0x2001, 0xc63a, 0x2003, 0x0010, 0x080c, 0x748e,
-+      0x080c, 0x749d, 0x012e, 0x0804, 0x3154, 0x7824, 0x00e6, 0x2071,
-+      0xc682, 0x00ee, 0x0804, 0x3154, 0x0006, 0x2001, 0xc653, 0x2004,
-+      0xd0cc, 0x000e, 0x0005, 0x0006, 0x2001, 0xc672, 0x2004, 0xd0bc,
-+      0x000e, 0x0005, 0x6168, 0x7a24, 0x6300, 0x82ff, 0x1118, 0x7926,
-+      0x0804, 0x3154, 0x83ff, 0x1904, 0x317c, 0x2001, 0xfff0, 0xa200,
-+      0x1a04, 0x317c, 0x2019, 0xffff, 0x606c, 0xa302, 0xa200, 0x0a04,
-+      0x317c, 0x7926, 0x626a, 0x0804, 0x3154, 0x2001, 0xc600, 0x2004,
-+      0xa086, 0x0003, 0x1904, 0x3179, 0x7c28, 0x7d24, 0x7e38, 0x7f2c,
-+      0x080c, 0x403f, 0x0904, 0x3179, 0x2009, 0x0000, 0x2019, 0x0000,
-+      0x7023, 0x0000, 0x702f, 0x0000, 0xad80, 0x0003, 0x7026, 0x20a0,
-+      0xa1e0, 0xc77b, 0x2c64, 0x8cff, 0x01b8, 0x6004, 0xa084, 0x00ff,
-+      0xa086, 0x0006, 0x0130, 0x6004, 0xa084, 0xff00, 0xa086, 0x0600,
-+      0x1158, 0x6014, 0x20a2, 0x94a0, 0x6010, 0x8007, 0xa105, 0x8007,
-+      0x20a2, 0x94a0, 0xa398, 0x0002, 0x8108, 0xa182, 0x00ff, 0x0120,
-+      0xa386, 0x002a, 0x0148, 0x08e0, 0x83ff, 0x1120, 0x7120, 0x810c,
-+      0x0804, 0x3154, 0x702f, 0x0001, 0x711e, 0x7020, 0xa300, 0x7022,
-+      0x2061, 0xc6f2, 0x6007, 0x0000, 0x6312, 0x7024, 0x600e, 0x6426,
-+      0x652a, 0x662e, 0x6732, 0x2c10, 0x080c, 0x164d, 0x7007, 0x0002,
-+      0x701b, 0x44ab, 0x0005, 0x702c, 0xa005, 0x1168, 0x711c, 0x7024,
-+      0x20a0, 0x2019, 0x0000, 0x2061, 0xc6f2, 0x6424, 0x6528, 0x662c,
-+      0x6730, 0x0804, 0x4468, 0x7120, 0x810c, 0x0804, 0x3154, 0x81ff,
-+      0x1904, 0x3179, 0x60d4, 0xd0ac, 0x1118, 0xd09c, 0x0904, 0x3179,
-+      0x080c, 0x403f, 0x0904, 0x3179, 0x7924, 0x7a2c, 0x7b28, 0x7c3c,
-+      0x7d38, 0x080c, 0x4080, 0x701b, 0x44d6, 0x0005, 0x00d6, 0xade8,
-+      0x000d, 0x6828, 0xa0be, 0x7000, 0x0148, 0xa0be, 0x7100, 0x0130,
-+      0xa0be, 0x7200, 0x0118, 0x00de, 0x0804, 0x317c, 0x6820, 0x6924,
-+      0x080c, 0x29c7, 0x1510, 0x080c, 0x52fa, 0x11f8, 0x7122, 0x6612,
-+      0x6516, 0x6e18, 0x00c6, 0x080c, 0x403f, 0x01b8, 0x080c, 0x403f,
-+      0x01a0, 0x00ce, 0x00de, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a,
-+      0x6823, 0x0000, 0x6804, 0x2068, 0x080c, 0xae0e, 0x0904, 0x3179,
-+      0x7007, 0x0003, 0x701b, 0x4510, 0x0005, 0x00de, 0x0804, 0x3179,
-+      0x7120, 0x080c, 0x2f41, 0x6820, 0xa086, 0x8001, 0x0904, 0x3179,
-+      0x2d00, 0x701e, 0x6804, 0xa080, 0x0002, 0x0006, 0x20a9, 0x002a,
-+      0x2098, 0x20a0, 0x080c, 0x4ee4, 0x000e, 0xade8, 0x000d, 0x6a08,
-+      0x6b0c, 0x6c10, 0x6d14, 0x2061, 0xc6f2, 0x6007, 0x0000, 0x6e00,
-+      0x6f28, 0xa7c6, 0x7000, 0x1108, 0x0018, 0xa7c6, 0x7100, 0x1140,
-+      0xa6c2, 0x0004, 0x0a04, 0x317c, 0x2009, 0x0004, 0x0804, 0x4083,
-+      0xa7c6, 0x7200, 0x1904, 0x317c, 0xa6c2, 0x0054, 0x0a04, 0x317c,
-+      0x600e, 0x6013, 0x002a, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10,
-+      0x080c, 0x164d, 0x7007, 0x0002, 0x701b, 0x4557, 0x0005, 0x701c,
-+      0x2068, 0x6804, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x0006,
-+      0x20a9, 0x002a, 0x2098, 0x20a0, 0x080c, 0x4ee4, 0x000e, 0x2009,
-+      0x002a, 0x2061, 0xc6f2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0804,
-+      0x4083, 0x81ff, 0x1904, 0x3179, 0x792c, 0x2001, 0xc8e7, 0x2102,
-+      0x080c, 0x4054, 0x0904, 0x317c, 0x080c, 0x541c, 0x0904, 0x3179,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x554e, 0x012e, 0x0804, 0x3154,
-+      0x7824, 0xd08c, 0x1118, 0xd084, 0x0904, 0x3bf0, 0x080c, 0x4064,
-+      0x0904, 0x317c, 0x00c6, 0x080c, 0x403f, 0x00ce, 0x1120, 0x2009,
-+      0x0002, 0x0804, 0x3179, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-+      0x0128, 0xa08e, 0x0004, 0x0110, 0xa08e, 0x0005, 0x15b8, 0x7824,
-+      0xd08c, 0x0120, 0x6000, 0xc08c, 0x6002, 0x0030, 0x2001, 0xc653,
-+      0x2004, 0xd0b4, 0x0904, 0x3c2c, 0x7824, 0xa084, 0xff00, 0xa08e,
-+      0x7e00, 0x0904, 0x3c2c, 0xa08e, 0x7f00, 0x0904, 0x3c2c, 0xa08e,
-+      0x8000, 0x0904, 0x3c2c, 0x6000, 0xd08c, 0x1904, 0x3c2c, 0x6837,
-+      0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0xae2a, 0x1120, 0x2009,
-+      0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b, 0x45d8, 0x0005,
-+      0x080c, 0x4064, 0x0904, 0x317c, 0x0804, 0x3c2c, 0x2009, 0xc631,
-+      0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3179, 0x2001,
-+      0xc600, 0x2004, 0xa086, 0x0003, 0x0120, 0x2009, 0x0007, 0x0804,
-+      0x3179, 0x2001, 0xc653, 0x2004, 0xd0ac, 0x0120, 0x2009, 0x0008,
-+      0x0804, 0x3179, 0x609c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x3c2c,
-+      0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c,
-+      0xaebb, 0x1120, 0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003,
-+      0x701b, 0x4613, 0x0005, 0x6830, 0xa086, 0x0100, 0x1120, 0x2009,
-+      0x0004, 0x0804, 0x3179, 0x080c, 0x4064, 0x0904, 0x317c, 0x0804,
-+      0x45a7, 0x81ff, 0x2009, 0x0001, 0x1904, 0x3179, 0x6000, 0xa086,
-+      0x0003, 0x2009, 0x0007, 0x1904, 0x3179, 0x2001, 0xc653, 0x2004,
-+      0xd0ac, 0x2009, 0x0008, 0x1904, 0x3179, 0x080c, 0x4064, 0x0904,
-+      0x317c, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x2009, 0x0009,
-+      0x1904, 0x3179, 0x00c6, 0x080c, 0x403f, 0x00ce, 0x2009, 0x0002,
-+      0x0904, 0x3179, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd,
-+      0x683a, 0x7928, 0xa194, 0xff00, 0xa18c, 0x00ff, 0xa006, 0x82ff,
-+      0x1128, 0xc0ed, 0x6952, 0x792c, 0x6956, 0x0048, 0xa28e, 0x0100,
-+      0x1904, 0x317c, 0xc0e5, 0x6853, 0x0000, 0x6857, 0x0000, 0x683e,
-+      0x080c, 0xb078, 0x2009, 0x0003, 0x0904, 0x3179, 0x7007, 0x0003,
-+      0x701b, 0x4673, 0x0005, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004,
-+      0x0904, 0x3179, 0x0804, 0x3154, 0x81ff, 0x2009, 0x0001, 0x1904,
-+      0x3179, 0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x1904, 0x3179,
-+      0x080c, 0x4064, 0x0904, 0x317c, 0x6004, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x2009, 0x0009, 0x1904, 0x3179, 0x00c6, 0x080c, 0x403f,
-+      0x00ce, 0x2009, 0x0002, 0x0904, 0x3179, 0xad80, 0x000f, 0x2009,
-+      0x0008, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x4080, 0x701b,
-+      0x46aa, 0x0005, 0x00d6, 0xade8, 0x000f, 0x6800, 0xa086, 0x0500,
-+      0x1140, 0x6804, 0xa005, 0x1128, 0x6808, 0xa084, 0xff00, 0x1108,
-+      0x0018, 0x00de, 0x1904, 0x317c, 0x00de, 0x6837, 0x0000, 0x6833,
-+      0x0000, 0x6838, 0xc0fd, 0x683a, 0x00c6, 0x080c, 0x4064, 0x1118,
-+      0x00ce, 0x0804, 0x317c, 0x080c, 0xb0c7, 0x2009, 0x0003, 0x00ce,
-+      0x0904, 0x3179, 0x7007, 0x0003, 0x701b, 0x46d7, 0x0005, 0x6830,
-+      0xa086, 0x0100, 0x2009, 0x0004, 0x0904, 0x3179, 0x0804, 0x3154,
-+      0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3179, 0x6000, 0xa086,
-+      0x0003, 0x0120, 0x2009, 0x0007, 0x0804, 0x3179, 0x7e24, 0x860f,
-+      0xa18c, 0x00ff, 0xa6b4, 0x00ff, 0x080c, 0x5356, 0x1904, 0x317c,
-+      0xa186, 0x007f, 0x0150, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-+      0x0120, 0x2009, 0x0009, 0x0804, 0x3179, 0x00c6, 0x080c, 0x403f,
-+      0x00ce, 0x1120, 0x2009, 0x0002, 0x0804, 0x3179, 0x6837, 0x0000,
-+      0x6838, 0xc0fd, 0x683a, 0x2001, 0x0100, 0x8007, 0x680a, 0x080c,
-+      0xae45, 0x1120, 0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003,
-+      0x701b, 0x4723, 0x0005, 0x6808, 0x8007, 0xa086, 0x0100, 0x1120,
-+      0x2009, 0x0004, 0x0804, 0x3179, 0x68b0, 0x6836, 0x6810, 0x8007,
-+      0xa084, 0x00ff, 0x800c, 0x6814, 0x8007, 0xa084, 0x00ff, 0x8004,
-+      0xa080, 0x0002, 0xa108, 0xad80, 0x0004, 0x7a2c, 0x7b28, 0x7c3c,
-+      0x7d38, 0x0804, 0x4083, 0x080c, 0x403f, 0x1120, 0x2009, 0x0002,
-+      0x0804, 0x3179, 0x7924, 0xa194, 0xff00, 0xa18c, 0x00ff, 0x8217,
-+      0x82ff, 0x0110, 0x0804, 0x317c, 0x2009, 0x001a, 0x7a2c, 0x7b28,
-+      0x7c3c, 0x7d38, 0x080c, 0x4080, 0x701b, 0x475f, 0x0005, 0x2001,
-+      0xc62a, 0x2003, 0x0001, 0xad80, 0x000d, 0x2098, 0x20a9, 0x001a,
-+      0x20a1, 0xc90d, 0x53a3, 0x0804, 0x3154, 0x080c, 0x403f, 0x1120,
-+      0x2009, 0x0002, 0x0804, 0x3179, 0x7924, 0xa194, 0xff00, 0xa18c,
-+      0x00ff, 0x8217, 0x82ff, 0x0110, 0x0804, 0x317c, 0x2099, 0xc90d,
-+      0x20a0, 0x20a9, 0x001a, 0x53a3, 0x2009, 0x001a, 0x7a2c, 0x7b28,
-+      0x7c3c, 0x7d38, 0x0804, 0x4083, 0x7824, 0xa08a, 0x1000, 0x1a04,
-+      0x317c, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b, 0xa108,
-+      0x00c6, 0x2061, 0xc93a, 0x6142, 0x00ce, 0x012e, 0x0804, 0x3154,
-+      0x00c6, 0x080c, 0x5f3b, 0x1188, 0x2001, 0xc8e6, 0x2003, 0x0001,
-+      0x2001, 0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5f7f,
-+      0x080c, 0x5e73, 0x080c, 0x1519, 0x0038, 0x2061, 0xc600, 0x6030,
-+      0xc09d, 0x6032, 0x080c, 0x4e74, 0x00ce, 0x0005, 0x0126, 0x2091,
-+      0x8000, 0x00c6, 0x2061, 0xc93a, 0x7924, 0x6152, 0x614e, 0x6057,
-+      0x0000, 0x604b, 0x0009, 0x7838, 0x606a, 0x783c, 0x6066, 0x7828,
-+      0x6062, 0x782c, 0x605e, 0x2061, 0xc8e8, 0x2001, 0xc94f, 0x600e,
-+      0x6013, 0x0001, 0x6017, 0x0002, 0x6007, 0x0000, 0x6037, 0x0000,
-+      0x00ce, 0x012e, 0x0804, 0x3154, 0x0126, 0x00c6, 0x00e6, 0x2061,
-+      0x0100, 0x2071, 0xc600, 0x6044, 0xd0a4, 0x11b0, 0xd084, 0x0118,
-+      0x080c, 0x495b, 0x0068, 0xd08c, 0x0118, 0x080c, 0x487c, 0x0040,
-+      0xd094, 0x0118, 0x080c, 0x484d, 0x0018, 0xd09c, 0x0108, 0x0061,
-+      0x00ee, 0x00ce, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110,
-+      0xc19d, 0x612a, 0x001e, 0x0ca0, 0x624c, 0xa286, 0xf0f0, 0x1150,
-+      0x6048, 0xa086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043,
-+      0x0010, 0x0490, 0xa294, 0xff00, 0xa296, 0xf700, 0x0178, 0x7134,
-+      0xd1a4, 0x1160, 0x6240, 0xa295, 0x0100, 0x6242, 0xa294, 0x0010,
-+      0x0128, 0x2009, 0x00f7, 0x080c, 0x4f04, 0x00f0, 0x6040, 0xa084,
-+      0x0010, 0xa085, 0x0140, 0x6042, 0x6043, 0x0000, 0x707b, 0x0000,
-+      0x7097, 0x0001, 0x70bb, 0x0000, 0x70d7, 0x0000, 0x2009, 0xcdc0,
-+      0x200b, 0x0000, 0x708b, 0x0000, 0x707f, 0x000a, 0x2009, 0x000a,
-+      0x2011, 0x4e2a, 0x080c, 0x704f, 0x0005, 0x0156, 0x2001, 0xc674,
-+      0x2004, 0xd08c, 0x0110, 0x7053, 0xffff, 0x707c, 0xa005, 0x1510,
-+      0x2011, 0x4e2a, 0x080c, 0x6fc6, 0x6040, 0xa094, 0x0010, 0xa285,
-+      0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04,
-+      0x4864, 0x6242, 0x708f, 0x0000, 0x6040, 0xa094, 0x0010, 0xa285,
-+      0x0080, 0x6042, 0x6242, 0x0030, 0x6242, 0x708f, 0x0000, 0x7083,
-+      0x0000, 0x0000, 0x015e, 0x0005, 0x7080, 0xa08a, 0x0003, 0x1210,
-+      0x0023, 0x0010, 0x080c, 0x1519, 0x0005, 0x4888, 0x48d8, 0x495a,
-+      0x00f6, 0x7083, 0x0001, 0x20e1, 0xa000, 0xe000, 0x20e1, 0x8700,
-+      0x080c, 0x25bb, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2079, 0xcc00,
-+      0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000, 0x780f, 0x00ef,
-+      0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000, 0x781f, 0x0000,
-+      0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000, 0x782f, 0x0000,
-+      0x2079, 0xcc0c, 0x207b, 0x1101, 0x7807, 0x0000, 0x2099, 0xc605,
-+      0x20a1, 0xcc0e, 0x20a9, 0x0004, 0x53a3, 0x2079, 0xcc12, 0x207b,
-+      0x0000, 0x7807, 0x0000, 0x2099, 0xcc00, 0x20a1, 0x020b, 0x20a9,
-+      0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x4e5b,
-+      0x00fe, 0x7087, 0x0000, 0x6043, 0x0008, 0x6043, 0x0000, 0x0005,
-+      0x00d6, 0x7084, 0x7087, 0x0000, 0xa025, 0x0904, 0x4942, 0x6020,
-+      0xd0b4, 0x1904, 0x4940, 0x7194, 0x81ff, 0x0904, 0x4930, 0xa486,
-+      0x000c, 0x1904, 0x493b, 0xa480, 0x0018, 0x8004, 0x20a8, 0x2011,
-+      0xcc80, 0x2019, 0xcc00, 0x220c, 0x2304, 0xa106, 0x11b8, 0x8210,
-+      0x8318, 0x1f04, 0x48f3, 0x6043, 0x0004, 0x608b, 0xbc94, 0x608f,
-+      0xf0f0, 0x6043, 0x0006, 0x7083, 0x0002, 0x708f, 0x0002, 0x2009,
-+      0x07d0, 0x2011, 0x4e31, 0x080c, 0x704f, 0x0490, 0x2069, 0xcc80,
-+      0x6930, 0xa18e, 0x1101, 0x1538, 0x6834, 0xa005, 0x1520, 0x6900,
-+      0xa18c, 0x00ff, 0x1118, 0x6804, 0xa005, 0x0190, 0x2011, 0xcc8e,
-+      0x2019, 0xc605, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, 0x0230,
-+      0x1190, 0x8210, 0x8318, 0x1f04, 0x4924, 0x0068, 0x7097, 0x0000,
-+      0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b,
-+      0x20a9, 0x0014, 0x53a6, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010,
-+      0x00de, 0x0005, 0x6040, 0xa085, 0x0100, 0x6042, 0x6020, 0xd0b4,
-+      0x1db8, 0x60c3, 0x000c, 0x2011, 0xc931, 0x2013, 0x0000, 0x7087,
-+      0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c,
-+      0x8c05, 0x0c30, 0x0005, 0x708c, 0xa08a, 0x001d, 0x1210, 0x0023,
-+      0x0010, 0x080c, 0x1519, 0x0005, 0x498e, 0x499d, 0x49c5, 0x49de,
-+      0x4a02, 0x4a2a, 0x4a4e, 0x4a7f, 0x4aa3, 0x4acb, 0x4b02, 0x4b2a,
-+      0x4b46, 0x4b5c, 0x4b7c, 0x4b8f, 0x4b97, 0x4bc7, 0x4beb, 0x4c13,
-+      0x4c37, 0x4c68, 0x4ca5, 0x4cd4, 0x4cf0, 0x4d2f, 0x4d4f, 0x4d68,
-+      0x4d69, 0x00c6, 0x2061, 0xc600, 0x6003, 0x0007, 0x2061, 0x0100,
-+      0x6004, 0xa084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x608b, 0xbc94,
-+      0x608f, 0xf0f0, 0x6043, 0x0002, 0x708f, 0x0001, 0x2009, 0x07d0,
-+      0x2011, 0x4e31, 0x080c, 0x704f, 0x0005, 0x00f6, 0x7084, 0xa086,
-+      0x0014, 0x1508, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x11e0, 0x2079,
-+      0xcc80, 0x7a30, 0xa296, 0x1102, 0x11a0, 0x7834, 0xa005, 0x1188,
-       0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001,
--      0x708f, 0x000a, 0x00b1, 0x0098, 0xa005, 0x1178, 0x7a38, 0xd2fc,
--      0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708b, 0x0000,
--      0x708f, 0x000e, 0x080c, 0x4b63, 0x0010, 0x080c, 0x4e5b, 0x00fe,
--      0x0005, 0x708f, 0x000b, 0x2011, 0xcc0e, 0x22a0, 0x20a9, 0x0040,
--      0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009, 0x0000, 0x41a4,
--      0x080c, 0x4ed3, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x080c, 0x4f24,
--      0x0118, 0x2013, 0x0000, 0x0020, 0x7054, 0xa085, 0x0100, 0x2012,
--      0x2298, 0x20a9, 0x0042, 0x53a6, 0x60c3, 0x0084, 0x080c, 0x4e42,
--      0x0005, 0x00f6, 0x7084, 0xa005, 0x01b0, 0x2011, 0x4e18, 0x080c,
--      0x6fad, 0xa086, 0x0084, 0x1168, 0x2079, 0xcc80, 0x7a30, 0xa296,
--      0x1106, 0x1138, 0x7834, 0xa005, 0x1120, 0x708f, 0x000c, 0x0029,
--      0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x000d, 0x080c,
--      0x4ed3, 0x20a3, 0x1107, 0x20a3, 0x0000, 0x2099, 0xcc8e, 0x20a9,
--      0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084,
--      0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01d0, 0x2011,
--      0x4e18, 0x080c, 0x6fad, 0xa086, 0x0084, 0x1188, 0x2079, 0xcc80,
--      0x7a30, 0xa296, 0x1107, 0x1158, 0x7834, 0xa005, 0x1140, 0x708b,
--      0x0001, 0x080c, 0x4ec5, 0x708f, 0x000e, 0x0029, 0x0010, 0x080c,
--      0x4e5b, 0x00fe, 0x0005, 0x708f, 0x000f, 0x7087, 0x0000, 0x608b,
--      0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009,
--      0x07d0, 0x2011, 0x4e18, 0x080c, 0x6fa1, 0x0005, 0x7084, 0xa005,
--      0x0120, 0x2011, 0x4e18, 0x080c, 0x6fad, 0x0005, 0x708f, 0x0011,
--      0x080c, 0x4f24, 0x11a0, 0x7170, 0x81ff, 0x0188, 0x2009, 0x0000,
--      0x7074, 0xa084, 0x00ff, 0x080c, 0x29c7, 0xa186, 0x007e, 0x0138,
--      0xa186, 0x0080, 0x0120, 0x2011, 0xcc8e, 0x080c, 0x4ddc, 0x20e1,
--      0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b, 0x7484,
--      0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8,
--      0x53a6, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084,
--      0xa005, 0x01f0, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0014,
--      0x11a8, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1103, 0x1178, 0x7834,
-+      0x2011, 0x4e31, 0x080c, 0x6fc6, 0x708f, 0x0010, 0x080c, 0x4b97,
-+      0x0010, 0x080c, 0x4e74, 0x00fe, 0x0005, 0x708f, 0x0003, 0x6043,
-+      0x0004, 0x2011, 0x4e31, 0x080c, 0x6fc6, 0x080c, 0x4eec, 0x20a3,
-+      0x1102, 0x20a3, 0x0000, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04,
-+      0x49d5, 0x60c3, 0x0014, 0x080c, 0x4e5b, 0x0005, 0x00f6, 0x7084,
-+      0xa005, 0x01f0, 0x2011, 0x4e31, 0x080c, 0x6fc6, 0xa086, 0x0014,
-+      0x11a8, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1102, 0x1178, 0x7834,
-       0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110,
--      0x70bb, 0x0001, 0x708f, 0x0012, 0x0029, 0x0010, 0x080c, 0x4e5b,
--      0x00fe, 0x0005, 0x708f, 0x0013, 0x080c, 0x4edf, 0x20a3, 0x1103,
--      0x20a3, 0x0000, 0x3430, 0x2011, 0xcc8e, 0x080c, 0x4f24, 0x1160,
-+      0x70bb, 0x0001, 0x708f, 0x0004, 0x0029, 0x0010, 0x080c, 0x4e74,
-+      0x00fe, 0x0005, 0x708f, 0x0005, 0x080c, 0x4eec, 0x20a3, 0x1103,
-+      0x20a3, 0x0000, 0x3430, 0x2011, 0xcc8e, 0x080c, 0x4f3d, 0x1160,
-       0x7078, 0xa005, 0x1148, 0x7150, 0xa186, 0xffff, 0x0128, 0x080c,
--      0x4ddc, 0x0110, 0x080c, 0x4f02, 0x20a9, 0x0008, 0x2298, 0x26a0,
-+      0x4df5, 0x0110, 0x080c, 0x4f1b, 0x20a9, 0x0008, 0x2298, 0x26a0,
-       0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c,
--      0x4e42, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4e18,
--      0x080c, 0x6fad, 0xa086, 0x0014, 0x11a8, 0x2079, 0xcc80, 0x7a30,
--      0xa296, 0x1104, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc,
--      0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0014,
--      0x0029, 0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x0015,
--      0x080c, 0x4edf, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011,
--      0xcc8e, 0x080c, 0x4f24, 0x11a8, 0x7078, 0xa005, 0x1190, 0x7158,
-+      0x4e5b, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4e31,
-+      0x080c, 0x6fc6, 0xa086, 0x0014, 0x11a8, 0x2079, 0xcc80, 0x7a30,
-+      0xa296, 0x1103, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc,
-+      0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0006,
-+      0x0029, 0x0010, 0x080c, 0x4e74, 0x00fe, 0x0005, 0x708f, 0x0007,
-+      0x080c, 0x4eec, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011,
-+      0xcc8e, 0x080c, 0x4f3d, 0x11a8, 0x7078, 0xa005, 0x1190, 0x7158,
-       0xa186, 0xffff, 0x0170, 0xa180, 0x2f6e, 0x200d, 0xa18c, 0xff00,
--      0x810f, 0x080c, 0x4ddc, 0x0128, 0x080c, 0x4412, 0x0110, 0x080c,
-+      0x810f, 0x080c, 0x4df5, 0x0128, 0x080c, 0x442b, 0x0110, 0x080c,
-       0x2a11, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0005, 0x00f6,
--      0x7084, 0xa005, 0x05b8, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086,
--      0x0014, 0x1570, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1105, 0x1540,
--      0x7834, 0x2011, 0x0100, 0xa21e, 0x1148, 0x7a38, 0xd2fc, 0x0128,
--      0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x0060, 0xa005, 0x11c0,
--      0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001,
--      0x708b, 0x0000, 0x7a38, 0xd2f4, 0x0138, 0x2001, 0xc674, 0x2004,
--      0xd0a4, 0x1110, 0x70d7, 0x0008, 0x708f, 0x0016, 0x0029, 0x0010,
--      0x080c, 0x4e5b, 0x00fe, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000,
--      0x2099, 0xcc80, 0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430,
--      0x2011, 0xcc8e, 0x708f, 0x0017, 0x080c, 0x4f24, 0x1150, 0x7078,
--      0xa005, 0x1138, 0x080c, 0x4d51, 0x1170, 0xa085, 0x0001, 0x080c,
-+      0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e5b, 0x0005, 0x00f6,
-+      0x7084, 0xa005, 0x01f0, 0x2011, 0x4e31, 0x080c, 0x6fc6, 0xa086,
-+      0x0014, 0x11a8, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1104, 0x1178,
-+      0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005,
-+      0x1110, 0x70bb, 0x0001, 0x708f, 0x0008, 0x0029, 0x0010, 0x080c,
-+      0x4e74, 0x00fe, 0x0005, 0x708f, 0x0009, 0x080c, 0x4eec, 0x20a3,
-+      0x1105, 0x20a3, 0x0100, 0x3430, 0x080c, 0x4f3d, 0x1150, 0x7078,
-+      0xa005, 0x1138, 0x080c, 0x4d6a, 0x1170, 0xa085, 0x0001, 0x080c,
-       0x2a11, 0x20a9, 0x0008, 0x2099, 0xcc8e, 0x26a0, 0x53a6, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0010,
--      0x080c, 0x4968, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01b0, 0x2011,
--      0x4e18, 0x080c, 0x6fad, 0xa086, 0x0084, 0x1168, 0x2079, 0xcc80,
--      0x7a30, 0xa296, 0x1106, 0x1138, 0x7834, 0xa005, 0x1120, 0x708f,
--      0x0018, 0x0029, 0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f,
--      0x0019, 0x080c, 0x4edf, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430,
--      0x2099, 0xcc8e, 0x2039, 0xcc0e, 0x27a0, 0x20a9, 0x0040, 0x53a3,
--      0x080c, 0x4f24, 0x11e8, 0x2728, 0x2514, 0x8207, 0xa084, 0x00ff,
--      0x8000, 0x2018, 0xa294, 0x00ff, 0x8007, 0xa205, 0x202a, 0x7054,
--      0x2310, 0x8214, 0xa2a0, 0xcc0e, 0x2414, 0xa38c, 0x0001, 0x0118,
--      0xa294, 0xff00, 0x0018, 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222,
--      0x2798, 0x26a0, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x60c3, 0x0084, 0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084,
--      0xa005, 0x01d0, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0084,
--      0x1188, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1107, 0x1158, 0x7834,
--      0xa005, 0x1140, 0x708b, 0x0001, 0x080c, 0x4ec5, 0x708f, 0x001a,
--      0x0029, 0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x001b,
-+      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e5b, 0x0010,
-+      0x080c, 0x4981, 0x0005, 0x00f6, 0x7084, 0xa005, 0x0588, 0x2011,
-+      0x4e31, 0x080c, 0x6fc6, 0xa086, 0x0014, 0x1540, 0x2079, 0xcc80,
-+      0x7a30, 0xa296, 0x1105, 0x1510, 0x7834, 0x2011, 0x0100, 0xa21e,
-+      0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb,
-+      0x0001, 0x708f, 0x000a, 0x00b1, 0x0098, 0xa005, 0x1178, 0x7a38,
-+      0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708b,
-+      0x0000, 0x708f, 0x000e, 0x080c, 0x4b7c, 0x0010, 0x080c, 0x4e74,
-+      0x00fe, 0x0005, 0x708f, 0x000b, 0x2011, 0xcc0e, 0x22a0, 0x20a9,
-+      0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009, 0x0000,
-+      0x41a4, 0x080c, 0x4eec, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x080c,
-+      0x4f3d, 0x0118, 0x2013, 0x0000, 0x0020, 0x7054, 0xa085, 0x0100,
-+      0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6, 0x60c3, 0x0084, 0x080c,
-+      0x4e5b, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01b0, 0x2011, 0x4e31,
-+      0x080c, 0x6fc6, 0xa086, 0x0084, 0x1168, 0x2079, 0xcc80, 0x7a30,
-+      0xa296, 0x1106, 0x1138, 0x7834, 0xa005, 0x1120, 0x708f, 0x000c,
-+      0x0029, 0x0010, 0x080c, 0x4e74, 0x00fe, 0x0005, 0x708f, 0x000d,
-+      0x080c, 0x4eec, 0x20a3, 0x1107, 0x20a3, 0x0000, 0x2099, 0xcc8e,
-+      0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+      0x0084, 0x080c, 0x4e5b, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01d0,
-+      0x2011, 0x4e31, 0x080c, 0x6fc6, 0xa086, 0x0084, 0x1188, 0x2079,
-+      0xcc80, 0x7a30, 0xa296, 0x1107, 0x1158, 0x7834, 0xa005, 0x1140,
-+      0x708b, 0x0001, 0x080c, 0x4ede, 0x708f, 0x000e, 0x0029, 0x0010,
-+      0x080c, 0x4e74, 0x00fe, 0x0005, 0x708f, 0x000f, 0x7087, 0x0000,
-+      0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004,
-+      0x2009, 0x07d0, 0x2011, 0x4e31, 0x080c, 0x6fba, 0x0005, 0x7084,
-+      0xa005, 0x0120, 0x2011, 0x4e31, 0x080c, 0x6fc6, 0x0005, 0x708f,
-+      0x0011, 0x080c, 0x4f3d, 0x11a0, 0x7170, 0x81ff, 0x0188, 0x2009,
-+      0x0000, 0x7074, 0xa084, 0x00ff, 0x080c, 0x29c7, 0xa186, 0x007e,
-+      0x0138, 0xa186, 0x0080, 0x0120, 0x2011, 0xcc8e, 0x080c, 0x4df5,
-       0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b,
-       0x7484, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004,
--      0x20a8, 0x53a6, 0x60c3, 0x0084, 0x080c, 0x4e42, 0x0005, 0x0005,
--      0x0005, 0x0086, 0x0096, 0x2029, 0xc653, 0x252c, 0x20a9, 0x0008,
--      0x2041, 0xcc0e, 0x28a0, 0x2099, 0xcc8e, 0x53a3, 0x20a9, 0x0008,
--      0x2011, 0x0007, 0xd5d4, 0x0110, 0x2011, 0x0000, 0x2800, 0xa200,
--      0x200c, 0xa1a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008,
--      0x8211, 0x1f04, 0x4d66, 0x0804, 0x4dd4, 0x82ff, 0x1160, 0xd5d4,
--      0x0120, 0xa1a6, 0x3fff, 0x0d90, 0x0020, 0xa1a6, 0x3fff, 0x0904,
--      0x4dd4, 0xa18d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4,
--      0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008,
--      0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04,
--      0x4d8c, 0x04d0, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04,
--      0x4d9e, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0158, 0x0006, 0x2039,
--      0x0007, 0x2200, 0xa73a, 0x000e, 0x27a8, 0xa5a8, 0x0010, 0x1f04,
--      0x4dad, 0x7552, 0xa5c8, 0x2f6e, 0x292d, 0xa5ac, 0x00ff, 0x7576,
--      0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x29f1, 0x001e, 0x60e7,
--      0x0000, 0x65ea, 0x2018, 0x2304, 0xa405, 0x201a, 0x707b, 0x0001,
--      0x26a0, 0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0xa085, 0x0001, 0x0028, 0xa006, 0x0018, 0xa006, 0x080c,
--      0x1519, 0x009e, 0x008e, 0x0005, 0x2118, 0x2021, 0x0000, 0x2001,
--      0x0007, 0xa39a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118,
--      0x84ff, 0x0120, 0xa39a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001,
--      0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0xa238, 0x2704, 0xa42c,
--      0x11b8, 0xa405, 0x203a, 0x7152, 0xa1a0, 0x2f6e, 0x242d, 0xa5ac,
--      0x00ff, 0x7576, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x29f1,
--      0x001e, 0x60e7, 0x0000, 0x65ea, 0x707b, 0x0001, 0xa084, 0x0000,
--      0x0005, 0x00e6, 0x2071, 0xc600, 0x707f, 0x0000, 0x00ee, 0x0005,
--      0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x8bf5,
--      0x7004, 0xa084, 0x4000, 0x0120, 0x7003, 0x1000, 0x7003, 0x0000,
--      0x0126, 0x2091, 0x8000, 0x2071, 0xc623, 0x2073, 0x0000, 0x7840,
--      0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x4eeb, 0x001e, 0xa094,
--      0x0010, 0xa285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe,
--      0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x2011, 0xc931, 0x2013,
--      0x0000, 0x7087, 0x0000, 0x012e, 0x20e1, 0x9080, 0x60a3, 0x0056,
--      0x60a7, 0x9575, 0x080c, 0x8bec, 0x2009, 0x07d0, 0x2011, 0x4e18,
--      0x080c, 0x7036, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091,
--      0x8000, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002, 0x080c,
--      0x8f18, 0x080c, 0x8dee, 0x0036, 0x2019, 0x0000, 0x080c, 0x8e79,
--      0x003e, 0x2009, 0x00f7, 0x080c, 0x4eeb, 0x2061, 0xc93a, 0x601b,
--      0x0000, 0x601f, 0x0000, 0x2061, 0xc600, 0x6003, 0x0001, 0x2061,
--      0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d, 0x2011,
--      0x4e90, 0x080c, 0x6fa1, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005,
--      0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x0100, 0x080c,
--      0x8bf5, 0x2071, 0x0140, 0x7004, 0xa084, 0x4000, 0x0120, 0x7003,
--      0x1000, 0x7003, 0x0000, 0x080c, 0x5f2a, 0x01a8, 0x080c, 0x5f48,
--      0x1190, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x0016, 0x080c, 0x2a95,
--      0x2001, 0xc8d6, 0x2102, 0x001e, 0x2001, 0xc8e6, 0x2003, 0x0000,
--      0x080c, 0x5e5a, 0x0030, 0x2001, 0x0001, 0x080c, 0x296d, 0x080c,
--      0x4e5b, 0x012e, 0x000e, 0x00ee, 0x0005, 0x20a9, 0x0040, 0x20a1,
--      0xcdc0, 0x2099, 0xcc8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0,
--      0x1f04, 0x4ecb, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
--      0xcc00, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x0005, 0x20e1,
--      0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b, 0x20a9,
--      0x000c, 0x53a6, 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f,
--      0x2001, 0xc631, 0x2004, 0xa005, 0x1138, 0x2001, 0xc615, 0x2004,
--      0xa084, 0x00ff, 0xa105, 0x0010, 0xa185, 0x00f7, 0x604a, 0x000e,
--      0x00ce, 0x0005, 0x0016, 0x0046, 0x2001, 0xc653, 0x2004, 0xd0a4,
--      0x0158, 0xa006, 0x2020, 0x2009, 0x002a, 0x080c, 0xc183, 0x2001,
--      0xc60c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0000,
--      0x080c, 0x2e19, 0x004e, 0x001e, 0x0005, 0x080c, 0x4e5b, 0x708f,
--      0x0000, 0x7087, 0x0000, 0x0005, 0x0006, 0x2001, 0xc60c, 0x2004,
--      0xd09c, 0x0100, 0x000e, 0x0005, 0x0006, 0x0016, 0x0126, 0x2091,
--      0x8000, 0x2001, 0x0101, 0x200c, 0xa18d, 0x0006, 0x2102, 0x012e,
--      0x001e, 0x000e, 0x0005, 0x0156, 0x20a9, 0x00ff, 0x2009, 0xc77b,
--      0xa006, 0x200a, 0x8108, 0x1f04, 0x4f41, 0x015e, 0x0005, 0x00d6,
--      0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0xc652, 0xa006, 0x6002,
--      0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x2f6e, 0x231d,
--      0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0,
--      0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e,
--      0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066,
--      0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082, 0x6086,
--      0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x60be, 0x61a2,
--      0x00d6, 0x60a4, 0xa06d, 0x0110, 0x080c, 0x1619, 0x60a7, 0x0000,
--      0x60a8, 0xa06d, 0x0110, 0x080c, 0x1619, 0x60ab, 0x0000, 0x00de,
--      0xa006, 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0xa006, 0x60b2,
--      0x60ae, 0x60b6, 0x60bb, 0x0520, 0x6814, 0xa084, 0x00ff, 0x6042,
--      0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091,
--      0x8000, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, 0x1a04,
--      0x505c, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x1a04, 0x5061,
--      0x2001, 0xc60c, 0x2004, 0xa084, 0x0003, 0x01c0, 0x2001, 0xc60c,
--      0x2004, 0xd084, 0x1904, 0x5044, 0xa188, 0xc77b, 0x2104, 0xa065,
--      0x0904, 0x5044, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x1904,
--      0x5044, 0x6000, 0xd0c4, 0x0904, 0x5044, 0x0068, 0xa188, 0xc77b,
--      0x2104, 0xa065, 0x0904, 0x5028, 0x6004, 0xa084, 0x00ff, 0xa08e,
--      0x0006, 0x1904, 0x502d, 0x60a4, 0xa00d, 0x0118, 0x080c, 0x5568,
--      0x05d0, 0x60a8, 0xa00d, 0x0188, 0x080c, 0x55b3, 0x1170, 0x694c,
--      0xd1fc, 0x1118, 0x080c, 0x5272, 0x0448, 0x080c, 0x5221, 0x694c,
--      0xd1ec, 0x1520, 0x080c, 0x545a, 0x0408, 0x694c, 0xa184, 0xa000,
--      0x0178, 0xd1ec, 0x0140, 0xd1fc, 0x0118, 0x080c, 0x5469, 0x0028,
--      0x080c, 0x5469, 0x0028, 0xd1fc, 0x0118, 0x080c, 0x5221, 0x0070,
--      0x6050, 0xa00d, 0x0130, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052,
--      0x0028, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x080c, 0x79b6,
--      0xa006, 0x012e, 0x0005, 0x2001, 0x0005, 0x2009, 0x0000, 0x04e8,
--      0x2001, 0x0028, 0x2009, 0x0000, 0x04c0, 0xa082, 0x0006, 0x12a0,
--      0x2001, 0xc635, 0x2004, 0xd0ac, 0x1160, 0x60a0, 0xd0bc, 0x1148,
--      0x6100, 0xd1fc, 0x0904, 0x4fe3, 0x2001, 0x0029, 0x2009, 0x1000,
--      0x0420, 0x2001, 0x0028, 0x00a8, 0x2009, 0xc60c, 0x210c, 0xd18c,
--      0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004,
--      0x0040, 0x2001, 0x0029, 0x6100, 0xd1fc, 0x0118, 0x2009, 0x1000,
--      0x0060, 0x2009, 0x0000, 0x0048, 0x2001, 0x0029, 0x2009, 0x0000,
--      0x0020, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x012e, 0x0005,
--      0x00e6, 0x0126, 0x2091, 0x8000, 0x6844, 0xa084, 0xff00, 0xa08e,
--      0xff00, 0x1120, 0x2001, 0xc8d3, 0x2064, 0x0080, 0x6844, 0x8007,
--      0xa084, 0x00ff, 0x2008, 0xa182, 0x00ff, 0x1698, 0xa188, 0xc77b,
--      0x2104, 0xa065, 0x01d8, 0x080c, 0x56ed, 0x11d8, 0x2c70, 0x080c,
--      0x9586, 0x0568, 0x2e00, 0x601a, 0x2d00, 0x6012, 0x601f, 0x0009,
--      0x600b, 0x0000, 0x6844, 0xa08e, 0xff00, 0x1110, 0x600b, 0x8000,
--      0x2009, 0x0100, 0x080c, 0x960c, 0xa006, 0x00b0, 0x2001, 0x0028,
--      0x0090, 0x2009, 0xc60c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
--      0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029,
--      0x0010, 0x2001, 0x0029, 0xa005, 0x012e, 0x00ee, 0x0005, 0x2001,
--      0x002c, 0x0cc8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x6844, 0x8007,
--      0xa084, 0x00ff, 0x2008, 0xa182, 0x00ff, 0x1a04, 0x510d, 0xa188,
--      0xc77b, 0x2104, 0xa065, 0x01c0, 0x6004, 0xa084, 0x00ff, 0xa08e,
--      0x0006, 0x11a8, 0x2c70, 0x080c, 0x9586, 0x05e8, 0x2e00, 0x601a,
--      0x2d00, 0x6012, 0x600b, 0xffff, 0x601f, 0x000a, 0x2009, 0x0003,
--      0x080c, 0x960c, 0xa006, 0x0460, 0x2001, 0x0028, 0x0440, 0xa082,
--      0x0006, 0x1298, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1158, 0x60a0,
--      0xd0bc, 0x1140, 0x6100, 0xd1fc, 0x09e8, 0x2001, 0x0029, 0x2009,
--      0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009, 0xc60c, 0x210c,
--      0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184, 0x0118, 0x2001,
--      0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0xa005,
--      0x012e, 0x00ee, 0x0005, 0x2001, 0x002c, 0x0cc8, 0x00f6, 0x00e6,
--      0x0126, 0x2091, 0x8000, 0x2011, 0x0000, 0x2079, 0xc600, 0x6944,
--      0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x1a04, 0x51d8, 0x080c,
--      0x533d, 0x11a0, 0x6004, 0xa084, 0x00ff, 0xa082, 0x0006, 0x1270,
--      0x6864, 0xa0c6, 0x006f, 0x0150, 0x2001, 0xc635, 0x2004, 0xd0ac,
--      0x1904, 0x51c1, 0x60a0, 0xd0bc, 0x1904, 0x51c1, 0x6864, 0xa0c6,
--      0x006f, 0x0118, 0x2008, 0x0804, 0x518a, 0x6968, 0x2140, 0xa18c,
--      0xff00, 0x810f, 0x78d4, 0xd0ac, 0x1118, 0xa182, 0x0080, 0x06d0,
--      0xa182, 0x00ff, 0x16b8, 0x6a70, 0x6b6c, 0x7870, 0xa306, 0x1160,
--      0x7874, 0xa24e, 0x1118, 0x2208, 0x2310, 0x0460, 0xa9cc, 0xff00,
--      0x1118, 0x2208, 0x2310, 0x0430, 0x080c, 0x3f6e, 0x2c70, 0x0550,
--      0x2009, 0x0000, 0x2011, 0x0000, 0xa0c6, 0x4000, 0x1160, 0x0006,
--      0x2e60, 0x080c, 0x55de, 0x1108, 0xc185, 0x7000, 0xd0bc, 0x0108,
--      0xc18d, 0x000e, 0x0088, 0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060,
--      0xa0c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009,
--      0x1108, 0x0010, 0x2001, 0x4006, 0x6866, 0x696a, 0x6a6e, 0x2001,
--      0x0030, 0x0450, 0x080c, 0x9586, 0x1138, 0x2001, 0x4005, 0x2009,
--      0x0003, 0x2011, 0x0000, 0x0c80, 0x2e00, 0x601a, 0x080c, 0xb057,
--      0x2d00, 0x6012, 0x601f, 0x0001, 0x6838, 0xd88c, 0x0108, 0xc0f5,
--      0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2e46, 0x012e, 0x2001,
--      0x0000, 0x080c, 0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x2009,
--      0x0002, 0x080c, 0x960c, 0xa006, 0xa005, 0x012e, 0x00ee, 0x00fe,
--      0x0005, 0x2001, 0x0028, 0x2009, 0x0000, 0x0cb0, 0x2009, 0xc60c,
--      0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118,
--      0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x2009, 0x0000, 0x0c20,
--      0x2001, 0x0029, 0x2009, 0x0000, 0x08f8, 0x6944, 0x6e48, 0xa684,
--      0x3fff, 0xa082, 0x4000, 0x16b8, 0xa18c, 0xff00, 0x810f, 0xa182,
--      0x00ff, 0x12e0, 0xa188, 0xc77b, 0x2104, 0xa065, 0x01b8, 0x6004,
--      0xa084, 0x00ff, 0xa08e, 0x0006, 0x11b0, 0x684c, 0xd0ec, 0x0120,
--      0x080c, 0x5469, 0x0431, 0x0030, 0x0421, 0x684c, 0xd0fc, 0x0110,
--      0x080c, 0x545a, 0x080c, 0x54a7, 0xa006, 0x00c8, 0x2001, 0x0028,
--      0x2009, 0x0000, 0x00a0, 0xa082, 0x0006, 0x1240, 0x6100, 0xd1fc,
--      0x0d20, 0x2001, 0x0029, 0x2009, 0x1000, 0x0048, 0x2001, 0x0029,
--      0x2009, 0x0000, 0x0020, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005,
--      0x0005, 0x0126, 0x2091, 0x8000, 0x6050, 0xa00d, 0x0138, 0x2d00,
--      0x200a, 0x6803, 0x0000, 0x6052, 0x012e, 0x0005, 0x2d00, 0x6052,
--      0x604e, 0x6803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x604c,
--      0xa005, 0x0170, 0x00e6, 0x2071, 0xc927, 0x7004, 0xa086, 0x0002,
--      0x0168, 0x00ee, 0x604c, 0x6802, 0x2d00, 0x604e, 0x012e, 0x0005,
--      0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0cc0, 0x701c, 0xac06,
--      0x1d80, 0x604c, 0x2070, 0x7000, 0x6802, 0x2d00, 0x7002, 0x00ee,
--      0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x604c, 0xa06d, 0x0130,
--      0x6800, 0xa005, 0x1108, 0x6052, 0x604e, 0xad05, 0x012e, 0x0005,
--      0x604c, 0xa06d, 0x0130, 0x6800, 0xa005, 0x1108, 0x6052, 0x604e,
--      0xad05, 0x0005, 0x6803, 0x0000, 0x6084, 0xa00d, 0x0120, 0x2d00,
--      0x200a, 0x6086, 0x0005, 0x2d00, 0x6086, 0x6082, 0x0cd8, 0x0126,
--      0x00c6, 0x0026, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005,
--      0x0110, 0xc285, 0x0008, 0xc284, 0x6202, 0x002e, 0x00ce, 0x012e,
--      0x0005, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204,
--      0x0006, 0xa086, 0x0006, 0x1180, 0x609c, 0xd0ac, 0x0168, 0x2001,
--      0xc653, 0x2004, 0xd0a4, 0x0140, 0xa284, 0xff00, 0x8007, 0xa086,
--      0x0007, 0x1110, 0x2011, 0x0600, 0x000e, 0xa294, 0xff00, 0xa215,
--      0x6206, 0x0006, 0xa086, 0x0006, 0x1128, 0x6290, 0x82ff, 0x1110,
--      0x080c, 0x1519, 0x000e, 0x00ce, 0x012e, 0x0005, 0x0126, 0x00c6,
--      0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0x0006, 0xa086, 0x0006,
--      0x1178, 0x609c, 0xd0a4, 0x0160, 0x2001, 0xc653, 0x2004, 0xd0ac,
--      0x1138, 0xa284, 0x00ff, 0xa086, 0x0007, 0x1110, 0x2011, 0x0006,
--      0x000e, 0xa294, 0x00ff, 0x8007, 0xa215, 0x6206, 0x00ce, 0x012e,
--      0x0005, 0x0026, 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001, 0x00b0,
--      0xa190, 0xc77b, 0x2204, 0xa065, 0x1180, 0x0016, 0x00d6, 0x080c,
--      0x15e5, 0x2d60, 0x00de, 0x001e, 0x0d80, 0x2c00, 0x2012, 0x60a7,
--      0x0000, 0x60ab, 0x0000, 0x080c, 0x4f47, 0xa006, 0x002e, 0x0005,
--      0x0126, 0x2091, 0x8000, 0x0026, 0xa182, 0x00ff, 0x0218, 0xa085,
--      0x0001, 0x0480, 0x00d6, 0xa190, 0xc77b, 0x2204, 0xa06d, 0x0540,
--      0x2013, 0x0000, 0x00d6, 0x00c6, 0x2d60, 0x60a4, 0xa06d, 0x0110,
--      0x080c, 0x1619, 0x60a8, 0xa06d, 0x0110, 0x080c, 0x1619, 0x00ce,
--      0x00de, 0x00d6, 0x00c6, 0x68bc, 0x2060, 0x8cff, 0x0168, 0x600c,
--      0x0006, 0x6010, 0x2068, 0x080c, 0xac8a, 0x0110, 0x080c, 0x1629,
--      0x080c, 0x95dc, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x080c, 0x1619,
--      0x00de, 0xa006, 0x002e, 0x012e, 0x0005, 0x0016, 0xa182, 0x00ff,
--      0x0218, 0xa085, 0x0001, 0x0030, 0xa188, 0xc77b, 0x2104, 0xa065,
--      0x0dc0, 0xa006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146,
--      0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c, 0x6002, 0x080c,
--      0x5f22, 0x1558, 0x60a0, 0xa086, 0x007e, 0x2069, 0xcc90, 0x0130,
--      0x2001, 0xc635, 0x2004, 0xd0ac, 0x1500, 0x0098, 0x2d04, 0xd0e4,
--      0x01e0, 0x00d6, 0x2069, 0xcc8e, 0x00c6, 0x2061, 0xc8f9, 0x6810,
--      0x2062, 0x6814, 0x6006, 0x6818, 0x600a, 0x681c, 0x600e, 0x00ce,
--      0x00de, 0x8d69, 0x2d04, 0x2069, 0x0140, 0xa005, 0x1110, 0x2001,
--      0x0001, 0x6886, 0x2069, 0xc600, 0x68a6, 0x2069, 0xcc8e, 0x6808,
--      0x605e, 0x6810, 0x6062, 0x6138, 0xa10a, 0x0208, 0x603a, 0x6814,
--      0x6066, 0x2099, 0xcc96, 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004,
--      0x53a3, 0x2099, 0xcc9a, 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004,
--      0x53a3, 0x2069, 0xccae, 0x6808, 0x606a, 0x690c, 0x616e, 0x6810,
--      0x6072, 0x6818, 0x6076, 0x60a0, 0xa086, 0x007e, 0x1120, 0x2069,
--      0xcc8e, 0x690c, 0x616e, 0xa182, 0x0211, 0x1218, 0x2009, 0x0008,
--      0x0400, 0xa182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, 0xa182,
--      0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0xa182, 0x0349, 0x1218,
--      0x2009, 0x0005, 0x0070, 0xa182, 0x0421, 0x1218, 0x2009, 0x0004,
--      0x0040, 0xa182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, 0x2009,
--      0x0002, 0x6192, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x0016,
--      0x0026, 0x00e6, 0x2071, 0xcc8d, 0x2e04, 0x6896, 0x2071, 0xcc8e,
--      0x7004, 0x689a, 0x701c, 0x689e, 0x6a00, 0x2009, 0xc672, 0x210c,
--      0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4,
--      0x0120, 0xd1e4, 0x0110, 0xc2bd, 0x0008, 0xc2bc, 0x6a02, 0x00ee,
--      0x002e, 0x001e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4,
--      0xa06d, 0x01c0, 0x6900, 0x81ff, 0x1540, 0x6a04, 0xa282, 0x0010,
--      0x1648, 0xad88, 0x0004, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff,
--      0x0128, 0x8108, 0x1f04, 0x5415, 0x080c, 0x1519, 0x260a, 0x8210,
--      0x6a06, 0x0098, 0x080c, 0x1602, 0x01a8, 0x2d00, 0x60a6, 0x6803,
--      0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108,
--      0x1f04, 0x542d, 0x6807, 0x0001, 0x6e12, 0xa085, 0x0001, 0x012e,
--      0x00de, 0x0005, 0xa006, 0x0cd8, 0x0126, 0x2091, 0x8000, 0x00d6,
--      0x60a4, 0xa00d, 0x01a0, 0x2168, 0x6800, 0xa005, 0x1160, 0x080c,
--      0x5568, 0x1168, 0x200b, 0xffff, 0x6804, 0xa08a, 0x0002, 0x0218,
--      0x8001, 0x6806, 0x0020, 0x080c, 0x1619, 0x60a7, 0x0000, 0x00de,
--      0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x55c6, 0x0010,
--      0x080c, 0x5221, 0x080c, 0x54e0, 0x1dd8, 0x080c, 0x54a7, 0x012e,
--      0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a8, 0xa06d, 0x01c0,
--      0x6950, 0x81ff, 0x1540, 0x6a54, 0xa282, 0x0010, 0x1670, 0xad88,
--      0x0018, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0128, 0x8108,
--      0x1f04, 0x547b, 0x080c, 0x1519, 0x260a, 0x8210, 0x6a56, 0x0098,
--      0x080c, 0x1602, 0x01d0, 0x2d00, 0x60aa, 0x6853, 0x0000, 0xad88,
--      0x0018, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x5493,
--      0x6857, 0x0001, 0x6e62, 0x0010, 0x080c, 0x5272, 0x0089, 0x1de0,
--      0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0xa006, 0x0cd8, 0x0126,
--      0x2091, 0x8000, 0x080c, 0x79b6, 0x012e, 0x0005, 0xa01e, 0x0010,
--      0x2019, 0x0001, 0xa00e, 0x0126, 0x2091, 0x8000, 0x604c, 0x2068,
--      0x6000, 0xd0dc, 0x1170, 0x8dff, 0x01f8, 0x83ff, 0x0120, 0x6848,
--      0xa606, 0x0158, 0x0030, 0x683c, 0xa406, 0x1118, 0x6840, 0xa506,
--      0x0120, 0x2d08, 0x6800, 0x2068, 0x0c70, 0x080c, 0x8fb7, 0x6a00,
--      0x604c, 0xad06, 0x1110, 0x624e, 0x0018, 0xa180, 0x0000, 0x2202,
--      0x82ff, 0x1110, 0x6152, 0x8dff, 0x012e, 0x0005, 0xa01e, 0x0010,
--      0x2019, 0x0001, 0xa00e, 0x6080, 0x2068, 0x8dff, 0x01e8, 0x83ff,
--      0x0120, 0x6848, 0xa606, 0x0158, 0x0030, 0x683c, 0xa406, 0x1118,
--      0x6840, 0xa506, 0x0120, 0x2d08, 0x6800, 0x2068, 0x0c70, 0x6a00,
--      0x6080, 0xad06, 0x1110, 0x6282, 0x0018, 0xa180, 0x0000, 0x2202,
--      0x82ff, 0x1110, 0x6186, 0x8dff, 0x0005, 0xa016, 0x080c, 0x5562,
--      0x1110, 0x2011, 0x0001, 0x080c, 0x55ad, 0x1110, 0xa295, 0x0002,
--      0x0005, 0x080c, 0x55de, 0x0118, 0x080c, 0xad3f, 0x0010, 0xa085,
--      0x0001, 0x0005, 0x080c, 0x55de, 0x0118, 0x080c, 0xaccf, 0x0010,
--      0xa085, 0x0001, 0x0005, 0x080c, 0x55de, 0x0118, 0x080c, 0xad22,
--      0x0010, 0xa085, 0x0001, 0x0005, 0x080c, 0x55de, 0x0118, 0x080c,
--      0xaceb, 0x0010, 0xa085, 0x0001, 0x0005, 0x080c, 0x55de, 0x0118,
--      0x080c, 0xad5b, 0x0010, 0xa085, 0x0001, 0x0005, 0x0126, 0x0006,
--      0x00d6, 0x2091, 0x8000, 0x6080, 0xa06d, 0x01a0, 0x6800, 0x0006,
--      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0xaefc, 0x0006,
--      0x6000, 0xd0fc, 0x0110, 0x080c, 0xc4d3, 0x000e, 0x080c, 0x580a,
--      0x000e, 0x0c50, 0x6083, 0x0000, 0x6087, 0x0000, 0x00de, 0x000e,
--      0x012e, 0x0005, 0x60a4, 0xa00d, 0x1118, 0xa085, 0x0001, 0x0005,
--      0x00e6, 0x2170, 0x7000, 0xa005, 0x1168, 0x20a9, 0x0010, 0xae88,
--      0x0004, 0x2104, 0xa606, 0x0130, 0x8108, 0x1f04, 0x5571, 0xa085,
--      0x0001, 0x0008, 0xa006, 0x00ee, 0x0005, 0x00d6, 0x0126, 0x2091,
--      0x8000, 0x60a4, 0xa06d, 0x1128, 0x080c, 0x1602, 0x01a0, 0x2d00,
--      0x60a6, 0x6803, 0x0001, 0x6807, 0x0000, 0xad88, 0x0004, 0x20a9,
--      0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x5591, 0xa085, 0x0001,
--      0x012e, 0x00de, 0x0005, 0xa006, 0x0cd8, 0x00d6, 0x0126, 0x2091,
--      0x8000, 0x60a4, 0xa06d, 0x0130, 0x60a7, 0x0000, 0x080c, 0x1619,
--      0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0x60a8, 0xa00d, 0x1118,
--      0xa085, 0x0001, 0x0005, 0x00e6, 0x2170, 0x7050, 0xa005, 0x1160,
--      0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606, 0x0128, 0x8108,
--      0x1f04, 0x55bc, 0xa085, 0x0001, 0x00ee, 0x0005, 0x0126, 0x2091,
--      0x8000, 0x0c19, 0x1188, 0x200b, 0xffff, 0x00d6, 0x60a8, 0x2068,
--      0x6854, 0xa08a, 0x0002, 0x0218, 0x8001, 0x6856, 0x0020, 0x080c,
--      0x1619, 0x60ab, 0x0000, 0x00de, 0x012e, 0x0005, 0x609c, 0xd0a4,
--      0x0005, 0x00f6, 0x080c, 0x5f22, 0x01b0, 0x71b8, 0x81ff, 0x1198,
--      0x71d4, 0xd19c, 0x0180, 0x2001, 0x007e, 0xa080, 0xc77b, 0x2004,
--      0xa07d, 0x0148, 0x7804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1118,
--      0x7800, 0xc0ed, 0x7802, 0x2079, 0xc652, 0x7804, 0xd0a4, 0x01e8,
--      0x0156, 0x00c6, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c,
--      0x533d, 0x1168, 0x6004, 0xa084, 0xff00, 0x8007, 0xa096, 0x0004,
--      0x0118, 0xa086, 0x0006, 0x1118, 0x6000, 0xc0ed, 0x6002, 0x001e,
--      0x8108, 0x1f04, 0x5606, 0x00ce, 0x015e, 0x080c, 0x570b, 0x0120,
--      0x2001, 0xc8fc, 0x200c, 0x0038, 0x2079, 0xc652, 0x7804, 0xd0a4,
--      0x0130, 0x2009, 0x07d0, 0x2011, 0x5631, 0x080c, 0x7036, 0x00fe,
--      0x0005, 0x2011, 0x5631, 0x080c, 0x6fad, 0x080c, 0x570b, 0x01f0,
--      0x2001, 0xc7f9, 0x2004, 0xa080, 0x0000, 0x200c, 0xc1ec, 0x2102,
--      0x2001, 0xc653, 0x2004, 0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011,
--      0x5631, 0x080c, 0x7036, 0x00e6, 0x2071, 0xc600, 0x7073, 0x0000,
--      0x7077, 0x0000, 0x080c, 0x2c62, 0x00ee, 0x04b0, 0x0156, 0x00c6,
--      0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x533d, 0x1530,
--      0x6000, 0xd0ec, 0x0518, 0x0046, 0x62a0, 0xa294, 0x00ff, 0x8227,
--      0xa006, 0x2009, 0x0029, 0x080c, 0xc183, 0x6000, 0xc0e5, 0xc0ec,
--      0x6002, 0x6004, 0xa084, 0x00ff, 0xa085, 0x0700, 0x6006, 0x2019,
--      0x0029, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e,
--      0x2009, 0x0000, 0x080c, 0xbeea, 0x007e, 0x004e, 0x001e, 0x8108,
--      0x1f04, 0x565c, 0x00ce, 0x015e, 0x0005, 0x00c6, 0x6018, 0x2060,
--      0x6000, 0xc0ec, 0x6002, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x080c,
--      0x15e5, 0x2d60, 0x0508, 0x2009, 0x00ff, 0x60a7, 0x0000, 0x60ab,
--      0x0000, 0x080c, 0x4f47, 0x6007, 0x0006, 0x6013, 0x00ff, 0x6017,
--      0xffff, 0x606f, 0x0200, 0x606c, 0x6093, 0x0002, 0x60bb, 0x0520,
--      0x60a3, 0x00ff, 0x60b7, 0x0000, 0x60af, 0x0000, 0x2c08, 0x2001,
--      0xc8d3, 0x2102, 0xa085, 0x0001, 0x00de, 0x00ce, 0x0005, 0x7818,
--      0x2004, 0xd0ac, 0x0005, 0x7818, 0x2004, 0xd0bc, 0x0005, 0x0156,
--      0x00e6, 0x00d6, 0x00c6, 0x0026, 0x20a9, 0x00ff, 0x2009, 0x0000,
--      0x0016, 0x080c, 0x533d, 0x1178, 0x2c70, 0x70ac, 0xa005, 0x0158,
--      0x2060, 0x620c, 0x0026, 0x6010, 0x2068, 0x080c, 0x761a, 0x002e,
--      0x2260, 0x82ff, 0x1db0, 0x001e, 0x8108, 0x1f04, 0x56d0, 0x002e,
--      0x00ce, 0x00de, 0x00ee, 0x015e, 0x0005, 0x0006, 0x0016, 0x0026,
--      0x6004, 0xa08c, 0x00ff, 0xa196, 0x0006, 0x0188, 0xa196, 0x0004,
--      0x0170, 0xa196, 0x0005, 0x0158, 0xa08c, 0xff00, 0x810f, 0xa196,
--      0x0006, 0x0128, 0xa196, 0x0004, 0x0110, 0xa196, 0x0005, 0x002e,
--      0x001e, 0x000e, 0x0005, 0x00f6, 0x2001, 0xc7f9, 0x2004, 0xa07d,
--      0x0110, 0x7800, 0xd0ec, 0x00fe, 0x0005, 0x0126, 0x0026, 0x2091,
--      0x8000, 0x0006, 0x62a0, 0xa290, 0xc77b, 0x2204, 0xac06, 0x190c,
--      0x1519, 0x000e, 0x6200, 0xa005, 0x0110, 0xc2fd, 0x0008, 0xc2fc,
--      0x6202, 0x002e, 0x012e, 0x0005, 0x2011, 0xc635, 0x2204, 0xd0cc,
--      0x0138, 0x2001, 0xc8fa, 0x200c, 0x2011, 0x5739, 0x080c, 0x7036,
--      0x0005, 0x2011, 0x5739, 0x080c, 0x6fad, 0x2011, 0xc635, 0x2204,
--      0xc0cc, 0x2012, 0x0005, 0x2071, 0xc734, 0x7003, 0x0001, 0x7007,
--      0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f,
--      0x0000, 0x700b, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b,
--      0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x2071, 0xc8c3, 0x7003,
--      0xc734, 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0xc8a3, 0x7013,
--      0x0020, 0x7017, 0x0040, 0x7037, 0x0000, 0x0005, 0x0016, 0x00e6,
--      0x2071, 0xc87b, 0xa00e, 0x7186, 0x718a, 0x7097, 0x0001, 0x2001,
--      0xc653, 0x2004, 0xd0fc, 0x1150, 0x2001, 0xc653, 0x2004, 0xa00e,
--      0xd09c, 0x0108, 0x8108, 0x7102, 0x0804, 0x57d4, 0x2001, 0xc672,
--      0x200c, 0xa184, 0x000f, 0x2009, 0xc673, 0x210c, 0x0002, 0x577c,
--      0x57af, 0x57b6, 0x57c0, 0x57c5, 0x577c, 0x577c, 0x577c, 0x579f,
--      0x577c, 0x577c, 0x577c, 0x577c, 0x577c, 0x577c, 0x577c, 0x7003,
--      0x0004, 0x0136, 0x0146, 0x0156, 0x2099, 0xc676, 0x20a1, 0xc8cc,
--      0x20a9, 0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x0428, 0x708f,
--      0x0005, 0x7007, 0x0122, 0x2001, 0x0002, 0x0030, 0x708f, 0x0002,
--      0x7007, 0x0121, 0x2001, 0x0003, 0x7002, 0x7097, 0x0001, 0x0088,
--      0x7007, 0x0122, 0x2001, 0x0002, 0x0020, 0x7007, 0x0121, 0x2001,
--      0x0003, 0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00, 0x8007,
--      0x709a, 0xa184, 0x00ff, 0x7092, 0x00ee, 0x001e, 0x0005, 0x00e6,
--      0x2071, 0xc734, 0x684c, 0xa005, 0x1130, 0x7028, 0xc085, 0x702a,
--      0xa085, 0x0001, 0x0428, 0x6a60, 0x7236, 0x6b64, 0x733a, 0x6868,
--      0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e, 0x6844,
--      0x7032, 0x2009, 0x000d, 0x200a, 0x700b, 0x0000, 0x8007, 0x8006,
--      0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319,
--      0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006,
--      0x00ee, 0x0005, 0x0156, 0x00e6, 0x0026, 0x6838, 0xd0fc, 0x1904,
--      0x5863, 0x6804, 0xa00d, 0x0188, 0x00d6, 0x2071, 0xc600, 0xa016,
--      0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8,
--      0x702e, 0x70b4, 0xa200, 0x70b6, 0x00de, 0x2071, 0xc734, 0x701c,
--      0xa005, 0x1904, 0x5873, 0x20a9, 0x0032, 0x0f04, 0x5871, 0x0e04,
--      0x582d, 0x2071, 0xc87b, 0x7200, 0x82ff, 0x05d8, 0x6934, 0xa186,
--      0x0103, 0x1904, 0x5881, 0x6948, 0x6844, 0xa105, 0x1540, 0x2009,
--      0x8020, 0x2200, 0x0002, 0x5871, 0x5848, 0x58e8, 0x58f5, 0x5871,
--      0x2071, 0x0000, 0x20a9, 0x0032, 0x0f04, 0x5871, 0x7018, 0xd084,
--      0x1dd8, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001,
--      0x2091, 0x4080, 0x2071, 0xc600, 0x702c, 0x206a, 0x2d00, 0x702e,
--      0x70b4, 0x8000, 0x70b6, 0x002e, 0x00ee, 0x015e, 0x0005, 0x6844,
--      0xa086, 0x0100, 0x1130, 0x6868, 0xa005, 0x1118, 0x2009, 0x8020,
--      0x0880, 0x2071, 0xc734, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000,
--      0x7012, 0x7018, 0xa06d, 0x711a, 0x0110, 0x6902, 0x0008, 0x711e,
--      0x0c10, 0xa18c, 0x00ff, 0xa186, 0x0013, 0x01e0, 0xa186, 0x001b,
--      0x01c8, 0xa186, 0x0023, 0x01e8, 0xa186, 0x0017, 0x0130, 0xa186,
--      0x001e, 0x0118, 0xa18e, 0x001f, 0x19e0, 0x684c, 0xd0cc, 0x09c8,
--      0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x1998, 0x2009, 0x8021,
--      0x0804, 0x5841, 0x6848, 0xa005, 0x1960, 0x2009, 0x8022, 0x0804,
--      0x5841, 0x2071, 0x0000, 0x7018, 0xd084, 0x1918, 0x00e6, 0x2071,
--      0xc682, 0x7140, 0x00ee, 0x6838, 0xa102, 0x0a04, 0x5871, 0x684c,
--      0xa005, 0x1158, 0x00e6, 0x2071, 0xc682, 0x7004, 0x00ee, 0xd08c,
--      0x1904, 0x5871, 0x2001, 0x8024, 0x0040, 0x6848, 0xd084, 0x1118,
--      0x2001, 0x8023, 0x0010, 0x2001, 0x8027, 0x7022, 0x6840, 0x7026,
--      0x683c, 0x702a, 0x6850, 0x702e, 0x0026, 0x0036, 0x6b38, 0x2e10,
--      0xa290, 0x0072, 0x2d00, 0xa080, 0x0015, 0x200c, 0x2112, 0x8000,
--      0x200c, 0x8210, 0x8319, 0x1dd0, 0x003e, 0x002e, 0x0804, 0x5856,
--      0x7084, 0x8008, 0xa092, 0x001e, 0x1a04, 0x5871, 0x7186, 0xae90,
--      0x0003, 0xa210, 0x683c, 0x2012, 0x0080, 0x7084, 0x8008, 0xa092,
--      0x000f, 0x1a04, 0x5871, 0x7186, 0xae90, 0x0003, 0x8003, 0xa210,
--      0x683c, 0x2012, 0x8210, 0x6840, 0x2012, 0x7088, 0xa10a, 0x0a04,
--      0x585a, 0x718c, 0x7084, 0xa10a, 0x0a04, 0x585a, 0x2071, 0x0000,
--      0x7018, 0xd084, 0x1904, 0x585a, 0x2071, 0xc87b, 0x7000, 0xa086,
--      0x0002, 0x1150, 0x080c, 0x5b75, 0x2071, 0x0000, 0x701b, 0x0001,
--      0x2091, 0x4080, 0x0804, 0x585a, 0x080c, 0x5b9f, 0x2071, 0x0000,
--      0x701b, 0x0001, 0x2091, 0x4080, 0x0804, 0x585a, 0x0006, 0x684c,
--      0x0006, 0x6837, 0x0103, 0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0,
--      0x2001, 0x0000, 0x40a4, 0x000e, 0xa084, 0x00ff, 0x684e, 0x000e,
--      0x684a, 0x6952, 0x0005, 0x2071, 0xc734, 0x7004, 0x0002, 0x5951,
--      0x5962, 0x5b60, 0x5b61, 0x5b6e, 0x5b74, 0x5952, 0x5b51, 0x5ae7,
--      0x5b3d, 0x0005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x5961, 0x2009,
--      0x000d, 0x7030, 0x200a, 0x2091, 0x4080, 0x7007, 0x0001, 0x700b,
--      0x0000, 0x012e, 0x2069, 0xc93a, 0x683c, 0xa005, 0x03f8, 0x11f0,
--      0x0126, 0x2091, 0x8000, 0x2069, 0x0000, 0x6934, 0x2001, 0xc740,
--      0x2004, 0xa10a, 0x0170, 0x0e04, 0x5985, 0x2069, 0x0000, 0x6818,
--      0xd084, 0x1158, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001, 0x2091,
--      0x4080, 0x2069, 0xc93a, 0x683f, 0xffff, 0x012e, 0x2069, 0xc600,
--      0x6848, 0x6968, 0xa102, 0x2069, 0xc87b, 0x688a, 0x6984, 0x701c,
--      0xa06d, 0x0120, 0x81ff, 0x0904, 0x59db, 0x00a0, 0x81ff, 0x0904,
--      0x5aa1, 0x2071, 0xc87b, 0x7184, 0x7088, 0xa10a, 0x1258, 0x7190,
--      0x2071, 0xc93a, 0x7038, 0xa005, 0x0128, 0x1b04, 0x5aa1, 0x713a,
--      0x0804, 0x5aa1, 0x2071, 0xc87b, 0x718c, 0x0126, 0x2091, 0x8000,
--      0x7084, 0xa10a, 0x0a04, 0x5abc, 0x0e04, 0x5a5d, 0x2071, 0x0000,
--      0x7018, 0xd084, 0x1904, 0x5a5d, 0x2001, 0xffff, 0x2071, 0xc93a,
--      0x703a, 0x2071, 0xc87b, 0x7000, 0xa086, 0x0002, 0x1150, 0x080c,
--      0x5b75, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804,
--      0x5a5d, 0x080c, 0x5b9f, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091,
--      0x4080, 0x0804, 0x5a5d, 0x2071, 0xc87b, 0x7000, 0xa005, 0x0904,
--      0x5a83, 0x6934, 0xa186, 0x0103, 0x1904, 0x5a60, 0x684c, 0xd0bc,
--      0x1904, 0x5a83, 0x6948, 0x6844, 0xa105, 0x1904, 0x5a78, 0x2009,
--      0x8020, 0x2071, 0xc87b, 0x7000, 0x0002, 0x5a83, 0x5a43, 0x5a1b,
--      0x5a2d, 0x59fa, 0x0136, 0x0146, 0x0156, 0x2099, 0xc676, 0x20a1,
--      0xc8cc, 0x20a9, 0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x2071,
--      0xc8c3, 0xad80, 0x000f, 0x700e, 0x7013, 0x0002, 0x7007, 0x0002,
--      0x700b, 0x0000, 0x2e10, 0x080c, 0x164d, 0x2071, 0xc734, 0x7007,
--      0x0009, 0x0804, 0x5aa1, 0x7084, 0x8008, 0xa092, 0x001e, 0x1a04,
--      0x5aa1, 0xae90, 0x0003, 0xa210, 0x683c, 0x2012, 0x7186, 0x2071,
--      0xc734, 0x080c, 0x5bf6, 0x0804, 0x5aa1, 0x7084, 0x8008, 0xa092,
--      0x000f, 0x1a04, 0x5aa1, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c,
--      0x2012, 0x8210, 0x6840, 0x2012, 0x7186, 0x2071, 0xc734, 0x080c,
--      0x5bf6, 0x0804, 0x5aa1, 0x0126, 0x2091, 0x8000, 0x0e04, 0x5a5d,
--      0x2071, 0x0000, 0x7018, 0xd084, 0x1180, 0x7122, 0x683c, 0x7026,
--      0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, 0x012e, 0x2071,
--      0xc734, 0x080c, 0x5bf6, 0x0804, 0x5aa1, 0x012e, 0x0804, 0x5aa1,
--      0xa18c, 0x00ff, 0xa186, 0x0017, 0x0130, 0xa186, 0x001e, 0x0118,
--      0xa18e, 0x001f, 0x11c0, 0x684c, 0xd0cc, 0x01a8, 0x6850, 0xa084,
--      0x00ff, 0xa086, 0x0001, 0x1178, 0x2009, 0x8021, 0x0804, 0x59f1,
--      0x6844, 0xa086, 0x0100, 0x1138, 0x6868, 0xa005, 0x1120, 0x2009,
--      0x8020, 0x0804, 0x59f1, 0x2071, 0xc734, 0x080c, 0x5c08, 0x01c8,
--      0x2071, 0xc734, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086,
--      0x0003, 0x1130, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0108, 0x710e,
--      0x7007, 0x0003, 0x080c, 0x5c21, 0x7050, 0xa086, 0x0100, 0x0904,
--      0x5b61, 0x0126, 0x2091, 0x8000, 0x2071, 0xc734, 0x7008, 0xa086,
--      0x0001, 0x1180, 0x0e04, 0x5aba, 0x2009, 0x000d, 0x7030, 0x200a,
--      0x2091, 0x4080, 0x700b, 0x0000, 0x7004, 0xa086, 0x0006, 0x1110,
--      0x7007, 0x0001, 0x012e, 0x0005, 0x2071, 0xc734, 0x080c, 0x5c08,
--      0x0518, 0x2071, 0xc87b, 0x7084, 0x700a, 0x20a9, 0x0020, 0x2099,
--      0xc87c, 0x20a1, 0xc8a3, 0x53a3, 0x7087, 0x0000, 0x2071, 0xc734,
--      0x2069, 0xc8c3, 0x706c, 0x6826, 0x7070, 0x682a, 0x7074, 0x682e,
--      0x7078, 0x6832, 0x2d10, 0x080c, 0x164d, 0x7007, 0x0008, 0x2001,
--      0xffff, 0x2071, 0xc93a, 0x703a, 0x012e, 0x0804, 0x5aa1, 0x2069,
--      0xc8c3, 0x6808, 0xa08e, 0x0000, 0x0904, 0x5b3c, 0xa08e, 0x0200,
--      0x0904, 0x5b3a, 0xa08e, 0x0100, 0x1904, 0x5b3c, 0x0126, 0x2091,
--      0x8000, 0x0e04, 0x5b38, 0x2069, 0x0000, 0x6818, 0xd084, 0x15c0,
--      0x702c, 0x7130, 0x8108, 0xa102, 0x0230, 0xa00e, 0x7034, 0x706e,
--      0x7038, 0x7072, 0x0048, 0x706c, 0xa080, 0x0040, 0x706e, 0x1220,
--      0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x6936, 0x700b, 0x0000,
--      0x2001, 0xc8a0, 0x2004, 0xa005, 0x1190, 0x6934, 0x2069, 0xc87b,
--      0x689c, 0x699e, 0x2069, 0xc93a, 0xa102, 0x1118, 0x683c, 0xa005,
--      0x1368, 0x2001, 0xc8a1, 0x200c, 0x810d, 0x693e, 0x0038, 0x2009,
--      0x8040, 0x6922, 0x681b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001,
--      0x012e, 0x0010, 0x7007, 0x0005, 0x0005, 0x2001, 0xc8c5, 0x2004,
--      0xa08e, 0x0100, 0x1128, 0x7007, 0x0001, 0x080c, 0x5bf6, 0x0005,
--      0xa08e, 0x0000, 0x0de0, 0xa08e, 0x0200, 0x1dc8, 0x7007, 0x0005,
--      0x0005, 0x701c, 0xa06d, 0x0158, 0x080c, 0x5c08, 0x0140, 0x7007,
--      0x0003, 0x080c, 0x5c21, 0x7050, 0xa086, 0x0100, 0x0110, 0x0005,
--      0x0005, 0x7050, 0xa09e, 0x0100, 0x1118, 0x7007, 0x0004, 0x0030,
--      0xa086, 0x0200, 0x1110, 0x7007, 0x0005, 0x0005, 0x080c, 0x5bc4,
--      0x7006, 0x080c, 0x5bf6, 0x0005, 0x0005, 0x00e6, 0x0156, 0x2071,
--      0xc87b, 0x7184, 0x81ff, 0x0500, 0xa006, 0x7086, 0xae80, 0x0003,
--      0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x0f04, 0x5b99,
--      0x2014, 0x722a, 0x8000, 0x0f04, 0x5b99, 0x2014, 0x722e, 0x8000,
--      0x0f04, 0x5b99, 0x2014, 0x723a, 0x8000, 0x0f04, 0x5b99, 0x2014,
--      0x723e, 0xa180, 0x8030, 0x7022, 0x015e, 0x00ee, 0x0005, 0x00e6,
--      0x0156, 0x2071, 0xc87b, 0x7184, 0x81ff, 0x01d8, 0xa006, 0x7086,
--      0xae80, 0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000,
--      0x2014, 0x722a, 0x8000, 0x0f04, 0x5bbb, 0x2014, 0x723a, 0x8000,
--      0x2014, 0x723e, 0x0018, 0x2001, 0x8020, 0x0010, 0x2001, 0x8042,
--      0x7022, 0x015e, 0x00ee, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102,
--      0x0230, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072, 0x0048, 0x706c,
--      0xa080, 0x0040, 0x706e, 0x1220, 0x7070, 0xa081, 0x0000, 0x7072,
--      0x7132, 0x700c, 0x8001, 0x700e, 0x1180, 0x0126, 0x2091, 0x8000,
--      0x0e04, 0x5bf0, 0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001,
--      0x0001, 0x700b, 0x0000, 0x012e, 0x0005, 0x2001, 0x0007, 0x0005,
--      0x2001, 0x0006, 0x700b, 0x0001, 0x012e, 0x0005, 0x701c, 0xa06d,
--      0x0170, 0x0126, 0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04,
--      0x701e, 0xa005, 0x1108, 0x701a, 0x012e, 0x080c, 0x1619, 0x0005,
--      0x2019, 0x000d, 0x2304, 0x230c, 0xa10e, 0x0130, 0x2304, 0x230c,
--      0xa10e, 0x0110, 0xa006, 0x0060, 0x732c, 0x8319, 0x7130, 0xa102,
--      0x1118, 0x2300, 0xa005, 0x0020, 0x0210, 0xa302, 0x0008, 0x8002,
--      0x0005, 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000,
--      0x0126, 0x2091, 0x8000, 0x2009, 0xc959, 0x2104, 0xc08d, 0x200a,
--      0x012e, 0x080c, 0x1669, 0x0005, 0x708c, 0xa08a, 0x0029, 0x1220,
--      0xa082, 0x001d, 0x0033, 0x0010, 0x080c, 0x1519, 0x6027, 0x1e00,
--      0x0005, 0x5d2f, 0x5caa, 0x5cc2, 0x5cff, 0x5d20, 0x5d5a, 0x5d6c,
--      0x5cc2, 0x5d46, 0x5c4e, 0x5c7c, 0x5c4d, 0x0005, 0x00d6, 0x2069,
--      0x0200, 0x6804, 0xa005, 0x1180, 0x6808, 0xa005, 0x1518, 0x708f,
--      0x0028, 0x2069, 0xc90c, 0x2d04, 0x7002, 0x080c, 0x6024, 0x6028,
--      0xa085, 0x0600, 0x602a, 0x00b0, 0x708f, 0x0028, 0x2069, 0xc90c,
--      0x2d04, 0x7002, 0x6028, 0xa085, 0x0600, 0x602a, 0x00e6, 0x0036,
--      0x0046, 0x0056, 0x2071, 0xc96a, 0x080c, 0x1ec3, 0x005e, 0x004e,
--      0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804,
--      0xa005, 0x1180, 0x6808, 0xa005, 0x1518, 0x708f, 0x0028, 0x2069,
--      0xc90c, 0x2d04, 0x7002, 0x080c, 0x60b1, 0x6028, 0xa085, 0x0600,
--      0x602a, 0x00b0, 0x708f, 0x0028, 0x2069, 0xc90c, 0x2d04, 0x7002,
--      0x6028, 0xa085, 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056,
--      0x2071, 0xc96a, 0x080c, 0x1ec3, 0x005e, 0x004e, 0x003e, 0x00ee,
--      0x00de, 0x0005, 0x6803, 0x0090, 0x6124, 0xd1e4, 0x1190, 0x080c,
--      0x5dd7, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x708f,
--      0x0020, 0x080c, 0x5dd7, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f,
--      0x001f, 0x0005, 0x6803, 0x0088, 0x6124, 0xd1cc, 0x1590, 0xd1dc,
--      0x1568, 0xd1e4, 0x1540, 0xa184, 0x1e00, 0x1580, 0x60e3, 0x0001,
--      0x600c, 0xc0b4, 0x600e, 0x080c, 0x5f52, 0x080c, 0x25fb, 0x0156,
--      0x6803, 0x0100, 0x20a9, 0x0014, 0x6804, 0xd0dc, 0x1118, 0x1f04,
--      0x5cdc, 0x0048, 0x20a9, 0x0014, 0x6803, 0x0080, 0x6804, 0xd0d4,
--      0x1130, 0x1f04, 0x5ce6, 0x080c, 0x5f73, 0x015e, 0x0078, 0x015e,
--      0x708f, 0x0028, 0x0058, 0x708f, 0x001e, 0x0040, 0x708f, 0x001d,
--      0x0028, 0x708f, 0x0020, 0x0010, 0x708f, 0x001f, 0x0005, 0x60e3,
--      0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x5f52, 0x080c, 0x25fb,
--      0x6803, 0x0080, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4,
--      0x1130, 0xa184, 0x1e00, 0x1158, 0x708f, 0x0028, 0x0040, 0x708f,
--      0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x001f, 0x0005,
--      0x6803, 0x00a0, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c,
--      0x1f06, 0x708f, 0x001e, 0x0010, 0x708f, 0x001d, 0x0005, 0x080c,
--      0x5e49, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x5dd7, 0x0016, 0x080c,
--      0x1f06, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x708f, 0x001e,
--      0x0020, 0x708f, 0x001f, 0x080c, 0x5dd7, 0x0005, 0x6803, 0x00a0,
--      0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4,
--      0x0140, 0x708f, 0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f,
--      0x0021, 0x0005, 0x080c, 0x5e49, 0x6124, 0xd1d4, 0x1150, 0xd1dc,
--      0x1128, 0xd1e4, 0x0140, 0x708f, 0x001e, 0x0028, 0x708f, 0x001d,
--      0x0010, 0x708f, 0x001f, 0x0005, 0x6803, 0x0090, 0x6124, 0xd1d4,
--      0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x708f,
--      0x001e, 0x0040, 0x708f, 0x001d, 0x0028, 0x708f, 0x0020, 0x0010,
--      0x708f, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126,
-+      0x20a8, 0x53a6, 0x60c3, 0x0014, 0x080c, 0x4e5b, 0x0005, 0x00f6,
-+      0x7084, 0xa005, 0x01f0, 0x2011, 0x4e31, 0x080c, 0x6fc6, 0xa086,
-+      0x0014, 0x11a8, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1103, 0x1178,
-+      0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005,
-+      0x1110, 0x70bb, 0x0001, 0x708f, 0x0012, 0x0029, 0x0010, 0x080c,
-+      0x4e74, 0x00fe, 0x0005, 0x708f, 0x0013, 0x080c, 0x4ef8, 0x20a3,
-+      0x1103, 0x20a3, 0x0000, 0x3430, 0x2011, 0xcc8e, 0x080c, 0x4f3d,
-+      0x1160, 0x7078, 0xa005, 0x1148, 0x7150, 0xa186, 0xffff, 0x0128,
-+      0x080c, 0x4df5, 0x0110, 0x080c, 0x4f1b, 0x20a9, 0x0008, 0x2298,
-+      0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014,
-+      0x080c, 0x4e5b, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011,
-+      0x4e31, 0x080c, 0x6fc6, 0xa086, 0x0014, 0x11a8, 0x2079, 0xcc80,
-+      0x7a30, 0xa296, 0x1104, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38,
-+      0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f,
-+      0x0014, 0x0029, 0x0010, 0x080c, 0x4e74, 0x00fe, 0x0005, 0x708f,
-+      0x0015, 0x080c, 0x4ef8, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430,
-+      0x2011, 0xcc8e, 0x080c, 0x4f3d, 0x11a8, 0x7078, 0xa005, 0x1190,
-+      0x7158, 0xa186, 0xffff, 0x0170, 0xa180, 0x2f6e, 0x200d, 0xa18c,
-+      0xff00, 0x810f, 0x080c, 0x4df5, 0x0128, 0x080c, 0x442b, 0x0110,
-+      0x080c, 0x2a11, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e5b, 0x0005,
-+      0x00f6, 0x7084, 0xa005, 0x05b8, 0x2011, 0x4e31, 0x080c, 0x6fc6,
-+      0xa086, 0x0014, 0x1570, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1105,
-+      0x1540, 0x7834, 0x2011, 0x0100, 0xa21e, 0x1148, 0x7a38, 0xd2fc,
-+      0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x0060, 0xa005,
-+      0x11c0, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb,
-+      0x0001, 0x708b, 0x0000, 0x7a38, 0xd2f4, 0x0138, 0x2001, 0xc674,
-+      0x2004, 0xd0a4, 0x1110, 0x70d7, 0x0008, 0x708f, 0x0016, 0x0029,
-+      0x0010, 0x080c, 0x4e74, 0x00fe, 0x0005, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6,
-+      0x3430, 0x2011, 0xcc8e, 0x708f, 0x0017, 0x080c, 0x4f3d, 0x1150,
-+      0x7078, 0xa005, 0x1138, 0x080c, 0x4d6a, 0x1170, 0xa085, 0x0001,
-+      0x080c, 0x2a11, 0x20a9, 0x0008, 0x2099, 0xcc8e, 0x26a0, 0x53a6,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e5b,
-+      0x0010, 0x080c, 0x4981, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01b0,
-+      0x2011, 0x4e31, 0x080c, 0x6fc6, 0xa086, 0x0084, 0x1168, 0x2079,
-+      0xcc80, 0x7a30, 0xa296, 0x1106, 0x1138, 0x7834, 0xa005, 0x1120,
-+      0x708f, 0x0018, 0x0029, 0x0010, 0x080c, 0x4e74, 0x00fe, 0x0005,
-+      0x708f, 0x0019, 0x080c, 0x4ef8, 0x20a3, 0x1106, 0x20a3, 0x0000,
-+      0x3430, 0x2099, 0xcc8e, 0x2039, 0xcc0e, 0x27a0, 0x20a9, 0x0040,
-+      0x53a3, 0x080c, 0x4f3d, 0x11e8, 0x2728, 0x2514, 0x8207, 0xa084,
-+      0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007, 0xa205, 0x202a,
-+      0x7054, 0x2310, 0x8214, 0xa2a0, 0xcc0e, 0x2414, 0xa38c, 0x0001,
-+      0x0118, 0xa294, 0xff00, 0x0018, 0xa294, 0x00ff, 0x8007, 0xa215,
-+      0x2222, 0x2798, 0x26a0, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x60c3, 0x0084, 0x080c, 0x4e5b, 0x0005, 0x00f6,
-+      0x7084, 0xa005, 0x01d0, 0x2011, 0x4e31, 0x080c, 0x6fc6, 0xa086,
-+      0x0084, 0x1188, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1107, 0x1158,
-+      0x7834, 0xa005, 0x1140, 0x708b, 0x0001, 0x080c, 0x4ede, 0x708f,
-+      0x001a, 0x0029, 0x0010, 0x080c, 0x4e74, 0x00fe, 0x0005, 0x708f,
-+      0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1,
-+      0x020b, 0x7484, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8,
-+      0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x080c, 0x4e5b, 0x0005,
-+      0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0xc653, 0x252c, 0x20a9,
-+      0x0008, 0x2041, 0xcc0e, 0x28a0, 0x2099, 0xcc8e, 0x53a3, 0x20a9,
-+      0x0008, 0x2011, 0x0007, 0xd5d4, 0x0110, 0x2011, 0x0000, 0x2800,
-+      0xa200, 0x200c, 0xa1a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210,
-+      0x0008, 0x8211, 0x1f04, 0x4d7f, 0x0804, 0x4ded, 0x82ff, 0x1160,
-+      0xd5d4, 0x0120, 0xa1a6, 0x3fff, 0x0d90, 0x0020, 0xa1a6, 0x3fff,
-+      0x0904, 0x4ded, 0xa18d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001,
-+      0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423,
-+      0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318,
-+      0x1f04, 0x4da5, 0x04d0, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425,
-+      0x1f04, 0x4db7, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0158, 0x0006,
-+      0x2039, 0x0007, 0x2200, 0xa73a, 0x000e, 0x27a8, 0xa5a8, 0x0010,
-+      0x1f04, 0x4dc6, 0x7552, 0xa5c8, 0x2f6e, 0x292d, 0xa5ac, 0x00ff,
-+      0x7576, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x29f1, 0x001e,
-+      0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0xa405, 0x201a, 0x707b,
-+      0x0001, 0x26a0, 0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0xa085, 0x0001, 0x0028, 0xa006, 0x0018, 0xa006,
-+      0x080c, 0x1519, 0x009e, 0x008e, 0x0005, 0x2118, 0x2021, 0x0000,
-+      0x2001, 0x0007, 0xa39a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0,
-+      0x2118, 0x84ff, 0x0120, 0xa39a, 0x0010, 0x8421, 0x1de0, 0x2021,
-+      0x0001, 0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0xa238, 0x2704,
-+      0xa42c, 0x11b8, 0xa405, 0x203a, 0x7152, 0xa1a0, 0x2f6e, 0x242d,
-+      0xa5ac, 0x00ff, 0x7576, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c,
-+      0x29f1, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x707b, 0x0001, 0xa084,
-+      0x0000, 0x0005, 0x00e6, 0x2071, 0xc600, 0x707f, 0x0000, 0x00ee,
-+      0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c,
-+      0x8c0e, 0x7004, 0xa084, 0x4000, 0x0120, 0x7003, 0x1000, 0x7003,
-+      0x0000, 0x0126, 0x2091, 0x8000, 0x2071, 0xc623, 0x2073, 0x0000,
-+      0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x4f04, 0x001e,
-+      0xa094, 0x0010, 0xa285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e,
-+      0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x2011, 0xc931,
-+      0x2013, 0x0000, 0x7087, 0x0000, 0x012e, 0x20e1, 0x9080, 0x60a3,
-+      0x0056, 0x60a7, 0x9575, 0x080c, 0x8c05, 0x2009, 0x07d0, 0x2011,
-+      0x4e31, 0x080c, 0x704f, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126,
-+      0x2091, 0x8000, 0x2011, 0x0003, 0x080c, 0x8f27, 0x2011, 0x0002,
-+      0x080c, 0x8f31, 0x080c, 0x8e07, 0x0036, 0x2019, 0x0000, 0x080c,
-+      0x8e92, 0x003e, 0x2009, 0x00f7, 0x080c, 0x4f04, 0x2061, 0xc93a,
-+      0x601b, 0x0000, 0x601f, 0x0000, 0x2061, 0xc600, 0x6003, 0x0001,
-+      0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d,
-+      0x2011, 0x4ea9, 0x080c, 0x6fba, 0x012e, 0x00ce, 0x002e, 0x001e,
-+      0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x0100,
-+      0x080c, 0x8c0e, 0x2071, 0x0140, 0x7004, 0xa084, 0x4000, 0x0120,
-+      0x7003, 0x1000, 0x7003, 0x0000, 0x080c, 0x5f43, 0x01a8, 0x080c,
-+      0x5f61, 0x1190, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x0016, 0x080c,
-+      0x2a95, 0x2001, 0xc8d6, 0x2102, 0x001e, 0x2001, 0xc8e6, 0x2003,
-+      0x0000, 0x080c, 0x5e73, 0x0030, 0x2001, 0x0001, 0x080c, 0x296d,
-+      0x080c, 0x4e74, 0x012e, 0x000e, 0x00ee, 0x0005, 0x20a9, 0x0040,
-+      0x20a1, 0xcdc0, 0x2099, 0xcc8e, 0x3304, 0x8007, 0x20a2, 0x9398,
-+      0x94a0, 0x1f04, 0x4ee4, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+      0x2099, 0xcc00, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x0005,
-+      0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b,
-+      0x20a9, 0x000c, 0x53a6, 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100,
-+      0x810f, 0x2001, 0xc631, 0x2004, 0xa005, 0x1138, 0x2001, 0xc615,
-+      0x2004, 0xa084, 0x00ff, 0xa105, 0x0010, 0xa185, 0x00f7, 0x604a,
-+      0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x2001, 0xc653, 0x2004,
-+      0xd0a4, 0x0158, 0xa006, 0x2020, 0x2009, 0x002a, 0x080c, 0xc1a9,
-+      0x2001, 0xc60c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009,
-+      0x0000, 0x080c, 0x2e19, 0x004e, 0x001e, 0x0005, 0x080c, 0x4e74,
-+      0x708f, 0x0000, 0x7087, 0x0000, 0x0005, 0x0006, 0x2001, 0xc60c,
-+      0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006, 0x0016, 0x0126,
-+      0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0xa18d, 0x0006, 0x2102,
-+      0x012e, 0x001e, 0x000e, 0x0005, 0x0156, 0x20a9, 0x00ff, 0x2009,
-+      0xc77b, 0xa006, 0x200a, 0x8108, 0x1f04, 0x4f5a, 0x015e, 0x0005,
-+      0x00d6, 0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0xc652, 0xa006,
-+      0x6002, 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x2f6e,
-+      0x231d, 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006,
-+      0x23a0, 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4,
-+      0x603e, 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062,
-+      0x6066, 0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082,
-+      0x6086, 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x60be,
-+      0x61a2, 0x00d6, 0x60a4, 0xa06d, 0x0110, 0x080c, 0x1619, 0x60a7,
-+      0x0000, 0x60a8, 0xa06d, 0x0110, 0x080c, 0x1619, 0x60ab, 0x0000,
-+      0x00de, 0xa006, 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0xa006,
-+      0x60b2, 0x60ae, 0x60b6, 0x60bb, 0x0520, 0x6814, 0xa084, 0x00ff,
-+      0x6042, 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126,
-+      0x2091, 0x8000, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000,
-+      0x1a04, 0x5075, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x1a04,
-+      0x507a, 0x2001, 0xc60c, 0x2004, 0xa084, 0x0003, 0x01c0, 0x2001,
-+      0xc60c, 0x2004, 0xd084, 0x1904, 0x505d, 0xa188, 0xc77b, 0x2104,
-+      0xa065, 0x0904, 0x505d, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006,
-+      0x1904, 0x505d, 0x6000, 0xd0c4, 0x0904, 0x505d, 0x0068, 0xa188,
-+      0xc77b, 0x2104, 0xa065, 0x0904, 0x5041, 0x6004, 0xa084, 0x00ff,
-+      0xa08e, 0x0006, 0x1904, 0x5046, 0x60a4, 0xa00d, 0x0118, 0x080c,
-+      0x5581, 0x05d0, 0x60a8, 0xa00d, 0x0188, 0x080c, 0x55cc, 0x1170,
-+      0x694c, 0xd1fc, 0x1118, 0x080c, 0x528b, 0x0448, 0x080c, 0x523a,
-+      0x694c, 0xd1ec, 0x1520, 0x080c, 0x5473, 0x0408, 0x694c, 0xa184,
-+      0xa000, 0x0178, 0xd1ec, 0x0140, 0xd1fc, 0x0118, 0x080c, 0x5482,
-+      0x0028, 0x080c, 0x5482, 0x0028, 0xd1fc, 0x0118, 0x080c, 0x523a,
-+      0x0070, 0x6050, 0xa00d, 0x0130, 0x2d00, 0x200a, 0x6803, 0x0000,
-+      0x6052, 0x0028, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x080c,
-+      0x79cf, 0xa006, 0x012e, 0x0005, 0x2001, 0x0005, 0x2009, 0x0000,
-+      0x04e8, 0x2001, 0x0028, 0x2009, 0x0000, 0x04c0, 0xa082, 0x0006,
-+      0x12a0, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1160, 0x60a0, 0xd0bc,
-+      0x1148, 0x6100, 0xd1fc, 0x0904, 0x4ffc, 0x2001, 0x0029, 0x2009,
-+      0x1000, 0x0420, 0x2001, 0x0028, 0x00a8, 0x2009, 0xc60c, 0x210c,
-+      0xd18c, 0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001,
-+      0x0004, 0x0040, 0x2001, 0x0029, 0x6100, 0xd1fc, 0x0118, 0x2009,
-+      0x1000, 0x0060, 0x2009, 0x0000, 0x0048, 0x2001, 0x0029, 0x2009,
-+      0x0000, 0x0020, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x012e,
-+      0x0005, 0x00e6, 0x0126, 0x2091, 0x8000, 0x6844, 0xa084, 0xff00,
-+      0xa08e, 0xff00, 0x1120, 0x2001, 0xc8d3, 0x2064, 0x0080, 0x6844,
-+      0x8007, 0xa084, 0x00ff, 0x2008, 0xa182, 0x00ff, 0x1698, 0xa188,
-+      0xc77b, 0x2104, 0xa065, 0x01d8, 0x080c, 0x5706, 0x11d8, 0x2c70,
-+      0x080c, 0x95a6, 0x0568, 0x2e00, 0x601a, 0x2d00, 0x6012, 0x601f,
-+      0x0009, 0x600b, 0x0000, 0x6844, 0xa08e, 0xff00, 0x1110, 0x600b,
-+      0x8000, 0x2009, 0x0100, 0x080c, 0x962c, 0xa006, 0x00b0, 0x2001,
-+      0x0028, 0x0090, 0x2009, 0xc60c, 0x210c, 0xd18c, 0x0118, 0x2001,
-+      0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001,
-+      0x0029, 0x0010, 0x2001, 0x0029, 0xa005, 0x012e, 0x00ee, 0x0005,
-+      0x2001, 0x002c, 0x0cc8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x6844,
-+      0x8007, 0xa084, 0x00ff, 0x2008, 0xa182, 0x00ff, 0x1a04, 0x5126,
-+      0xa188, 0xc77b, 0x2104, 0xa065, 0x01c0, 0x6004, 0xa084, 0x00ff,
-+      0xa08e, 0x0006, 0x11a8, 0x2c70, 0x080c, 0x95a6, 0x05e8, 0x2e00,
-+      0x601a, 0x2d00, 0x6012, 0x600b, 0xffff, 0x601f, 0x000a, 0x2009,
-+      0x0003, 0x080c, 0x962c, 0xa006, 0x0460, 0x2001, 0x0028, 0x0440,
-+      0xa082, 0x0006, 0x1298, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1158,
-+      0x60a0, 0xd0bc, 0x1140, 0x6100, 0xd1fc, 0x09e8, 0x2001, 0x0029,
-+      0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009, 0xc60c,
-+      0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184, 0x0118,
-+      0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029,
-+      0xa005, 0x012e, 0x00ee, 0x0005, 0x2001, 0x002c, 0x0cc8, 0x00f6,
-+      0x00e6, 0x0126, 0x2091, 0x8000, 0x2011, 0x0000, 0x2079, 0xc600,
-+      0x6944, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x1a04, 0x51f1,
-+      0x080c, 0x5356, 0x11a0, 0x6004, 0xa084, 0x00ff, 0xa082, 0x0006,
-+      0x1270, 0x6864, 0xa0c6, 0x006f, 0x0150, 0x2001, 0xc635, 0x2004,
-+      0xd0ac, 0x1904, 0x51da, 0x60a0, 0xd0bc, 0x1904, 0x51da, 0x6864,
-+      0xa0c6, 0x006f, 0x0118, 0x2008, 0x0804, 0x51a3, 0x6968, 0x2140,
-+      0xa18c, 0xff00, 0x810f, 0x78d4, 0xd0ac, 0x1118, 0xa182, 0x0080,
-+      0x06d0, 0xa182, 0x00ff, 0x16b8, 0x6a70, 0x6b6c, 0x7870, 0xa306,
-+      0x1160, 0x7874, 0xa24e, 0x1118, 0x2208, 0x2310, 0x0460, 0xa9cc,
-+      0xff00, 0x1118, 0x2208, 0x2310, 0x0430, 0x080c, 0x3f89, 0x2c70,
-+      0x0550, 0x2009, 0x0000, 0x2011, 0x0000, 0xa0c6, 0x4000, 0x1160,
-+      0x0006, 0x2e60, 0x080c, 0x55f7, 0x1108, 0xc185, 0x7000, 0xd0bc,
-+      0x0108, 0xc18d, 0x000e, 0x0088, 0xa0c6, 0x4007, 0x1110, 0x2408,
-+      0x0060, 0xa0c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0030, 0xa0c6,
-+      0x4009, 0x1108, 0x0010, 0x2001, 0x4006, 0x6866, 0x696a, 0x6a6e,
-+      0x2001, 0x0030, 0x0450, 0x080c, 0x95a6, 0x1138, 0x2001, 0x4005,
-+      0x2009, 0x0003, 0x2011, 0x0000, 0x0c80, 0x2e00, 0x601a, 0x080c,
-+      0xb077, 0x2d00, 0x6012, 0x601f, 0x0001, 0x6838, 0xd88c, 0x0108,
-+      0xc0f5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2e46, 0x012e,
-+      0x2001, 0x0000, 0x080c, 0x5298, 0x2001, 0x0002, 0x080c, 0x52aa,
-+      0x2009, 0x0002, 0x080c, 0x962c, 0xa006, 0xa005, 0x012e, 0x00ee,
-+      0x00fe, 0x0005, 0x2001, 0x0028, 0x2009, 0x0000, 0x0cb0, 0x2009,
-+      0xc60c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184,
-+      0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x2009, 0x0000,
-+      0x0c20, 0x2001, 0x0029, 0x2009, 0x0000, 0x08f8, 0x6944, 0x6e48,
-+      0xa684, 0x3fff, 0xa082, 0x4000, 0x16b8, 0xa18c, 0xff00, 0x810f,
-+      0xa182, 0x00ff, 0x12e0, 0xa188, 0xc77b, 0x2104, 0xa065, 0x01b8,
-+      0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x11b0, 0x684c, 0xd0ec,
-+      0x0120, 0x080c, 0x5482, 0x0431, 0x0030, 0x0421, 0x684c, 0xd0fc,
-+      0x0110, 0x080c, 0x5473, 0x080c, 0x54c0, 0xa006, 0x00c8, 0x2001,
-+      0x0028, 0x2009, 0x0000, 0x00a0, 0xa082, 0x0006, 0x1240, 0x6100,
-+      0xd1fc, 0x0d20, 0x2001, 0x0029, 0x2009, 0x1000, 0x0048, 0x2001,
-+      0x0029, 0x2009, 0x0000, 0x0020, 0x2001, 0x0029, 0x2009, 0x0000,
-+      0xa005, 0x0005, 0x0126, 0x2091, 0x8000, 0x6050, 0xa00d, 0x0138,
-+      0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x012e, 0x0005, 0x2d00,
-+      0x6052, 0x604e, 0x6803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000,
-+      0x604c, 0xa005, 0x0170, 0x00e6, 0x2071, 0xc927, 0x7004, 0xa086,
-+      0x0002, 0x0168, 0x00ee, 0x604c, 0x6802, 0x2d00, 0x604e, 0x012e,
-+      0x0005, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0cc0, 0x701c,
-+      0xac06, 0x1d80, 0x604c, 0x2070, 0x7000, 0x6802, 0x2d00, 0x7002,
-+      0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x604c, 0xa06d,
-+      0x0130, 0x6800, 0xa005, 0x1108, 0x6052, 0x604e, 0xad05, 0x012e,
-+      0x0005, 0x604c, 0xa06d, 0x0130, 0x6800, 0xa005, 0x1108, 0x6052,
-+      0x604e, 0xad05, 0x0005, 0x6803, 0x0000, 0x6084, 0xa00d, 0x0120,
-+      0x2d00, 0x200a, 0x6086, 0x0005, 0x2d00, 0x6086, 0x6082, 0x0cd8,
-+      0x0126, 0x00c6, 0x0026, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200,
-+      0xa005, 0x0110, 0xc285, 0x0008, 0xc284, 0x6202, 0x002e, 0x00ce,
-+      0x012e, 0x0005, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6218, 0x2260,
-+      0x6204, 0x0006, 0xa086, 0x0006, 0x1180, 0x609c, 0xd0ac, 0x0168,
-+      0x2001, 0xc653, 0x2004, 0xd0a4, 0x0140, 0xa284, 0xff00, 0x8007,
-+      0xa086, 0x0007, 0x1110, 0x2011, 0x0600, 0x000e, 0xa294, 0xff00,
-+      0xa215, 0x6206, 0x0006, 0xa086, 0x0006, 0x1128, 0x6290, 0x82ff,
-+      0x1110, 0x080c, 0x1519, 0x000e, 0x00ce, 0x012e, 0x0005, 0x0126,
-+      0x00c6, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0x0006, 0xa086,
-+      0x0006, 0x1178, 0x609c, 0xd0a4, 0x0160, 0x2001, 0xc653, 0x2004,
-+      0xd0ac, 0x1138, 0xa284, 0x00ff, 0xa086, 0x0007, 0x1110, 0x2011,
-+      0x0006, 0x000e, 0xa294, 0x00ff, 0x8007, 0xa215, 0x6206, 0x00ce,
-+      0x012e, 0x0005, 0x0026, 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001,
-+      0x00b0, 0xa190, 0xc77b, 0x2204, 0xa065, 0x1180, 0x0016, 0x00d6,
-+      0x080c, 0x15e5, 0x2d60, 0x00de, 0x001e, 0x0d80, 0x2c00, 0x2012,
-+      0x60a7, 0x0000, 0x60ab, 0x0000, 0x080c, 0x4f60, 0xa006, 0x002e,
-+      0x0005, 0x0126, 0x2091, 0x8000, 0x0026, 0xa182, 0x00ff, 0x0218,
-+      0xa085, 0x0001, 0x0480, 0x00d6, 0xa190, 0xc77b, 0x2204, 0xa06d,
-+      0x0540, 0x2013, 0x0000, 0x00d6, 0x00c6, 0x2d60, 0x60a4, 0xa06d,
-+      0x0110, 0x080c, 0x1619, 0x60a8, 0xa06d, 0x0110, 0x080c, 0x1619,
-+      0x00ce, 0x00de, 0x00d6, 0x00c6, 0x68bc, 0x2060, 0x8cff, 0x0168,
-+      0x600c, 0x0006, 0x6010, 0x2068, 0x080c, 0xacaa, 0x0110, 0x080c,
-+      0x1629, 0x080c, 0x95fc, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x080c,
-+      0x1619, 0x00de, 0xa006, 0x002e, 0x012e, 0x0005, 0x0016, 0xa182,
-+      0x00ff, 0x0218, 0xa085, 0x0001, 0x0030, 0xa188, 0xc77b, 0x2104,
-+      0xa065, 0x0dc0, 0xa006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136,
-+      0x0146, 0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c, 0x6002,
-+      0x080c, 0x5f3b, 0x1558, 0x60a0, 0xa086, 0x007e, 0x2069, 0xcc90,
-+      0x0130, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1500, 0x0098, 0x2d04,
-+      0xd0e4, 0x01e0, 0x00d6, 0x2069, 0xcc8e, 0x00c6, 0x2061, 0xc8f9,
-+      0x6810, 0x2062, 0x6814, 0x6006, 0x6818, 0x600a, 0x681c, 0x600e,
-+      0x00ce, 0x00de, 0x8d69, 0x2d04, 0x2069, 0x0140, 0xa005, 0x1110,
-+      0x2001, 0x0001, 0x6886, 0x2069, 0xc600, 0x68a6, 0x2069, 0xcc8e,
-+      0x6808, 0x605e, 0x6810, 0x6062, 0x6138, 0xa10a, 0x0208, 0x603a,
-+      0x6814, 0x6066, 0x2099, 0xcc96, 0xac88, 0x000a, 0x21a0, 0x20a9,
-+      0x0004, 0x53a3, 0x2099, 0xcc9a, 0xac88, 0x0006, 0x21a0, 0x20a9,
-+      0x0004, 0x53a3, 0x2069, 0xccae, 0x6808, 0x606a, 0x690c, 0x616e,
-+      0x6810, 0x6072, 0x6818, 0x6076, 0x60a0, 0xa086, 0x007e, 0x1120,
-+      0x2069, 0xcc8e, 0x690c, 0x616e, 0xa182, 0x0211, 0x1218, 0x2009,
-+      0x0008, 0x0400, 0xa182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0,
-+      0xa182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0xa182, 0x0349,
-+      0x1218, 0x2009, 0x0005, 0x0070, 0xa182, 0x0421, 0x1218, 0x2009,
-+      0x0004, 0x0040, 0xa182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010,
-+      0x2009, 0x0002, 0x6192, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
-+      0x0016, 0x0026, 0x00e6, 0x2071, 0xcc8d, 0x2e04, 0x6896, 0x2071,
-+      0xcc8e, 0x7004, 0x689a, 0x701c, 0x689e, 0x6a00, 0x2009, 0xc672,
-+      0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac,
-+      0xd0c4, 0x0120, 0xd1e4, 0x0110, 0xc2bd, 0x0008, 0xc2bc, 0x6a02,
-+      0x00ee, 0x002e, 0x001e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000,
-+      0x60a4, 0xa06d, 0x01c0, 0x6900, 0x81ff, 0x1540, 0x6a04, 0xa282,
-+      0x0010, 0x1648, 0xad88, 0x0004, 0x20a9, 0x0010, 0x2104, 0xa086,
-+      0xffff, 0x0128, 0x8108, 0x1f04, 0x542e, 0x080c, 0x1519, 0x260a,
-+      0x8210, 0x6a06, 0x0098, 0x080c, 0x1602, 0x01a8, 0x2d00, 0x60a6,
-+      0x6803, 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff,
-+      0x8108, 0x1f04, 0x5446, 0x6807, 0x0001, 0x6e12, 0xa085, 0x0001,
-+      0x012e, 0x00de, 0x0005, 0xa006, 0x0cd8, 0x0126, 0x2091, 0x8000,
-+      0x00d6, 0x60a4, 0xa00d, 0x01a0, 0x2168, 0x6800, 0xa005, 0x1160,
-+      0x080c, 0x5581, 0x1168, 0x200b, 0xffff, 0x6804, 0xa08a, 0x0002,
-+      0x0218, 0x8001, 0x6806, 0x0020, 0x080c, 0x1619, 0x60a7, 0x0000,
-+      0x00de, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x55df,
-+      0x0010, 0x080c, 0x523a, 0x080c, 0x54f9, 0x1dd8, 0x080c, 0x54c0,
-+      0x012e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a8, 0xa06d,
-+      0x01c0, 0x6950, 0x81ff, 0x1540, 0x6a54, 0xa282, 0x0010, 0x1670,
-+      0xad88, 0x0018, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0128,
-+      0x8108, 0x1f04, 0x5494, 0x080c, 0x1519, 0x260a, 0x8210, 0x6a56,
-+      0x0098, 0x080c, 0x1602, 0x01d0, 0x2d00, 0x60aa, 0x6853, 0x0000,
-+      0xad88, 0x0018, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04,
-+      0x54ac, 0x6857, 0x0001, 0x6e62, 0x0010, 0x080c, 0x528b, 0x0089,
-+      0x1de0, 0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0xa006, 0x0cd8,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x79cf, 0x012e, 0x0005, 0xa01e,
-+      0x0010, 0x2019, 0x0001, 0xa00e, 0x0126, 0x2091, 0x8000, 0x604c,
-+      0x2068, 0x6000, 0xd0dc, 0x1170, 0x8dff, 0x01f8, 0x83ff, 0x0120,
-+      0x6848, 0xa606, 0x0158, 0x0030, 0x683c, 0xa406, 0x1118, 0x6840,
-+      0xa506, 0x0120, 0x2d08, 0x6800, 0x2068, 0x0c70, 0x080c, 0x8fd0,
-+      0x6a00, 0x604c, 0xad06, 0x1110, 0x624e, 0x0018, 0xa180, 0x0000,
-+      0x2202, 0x82ff, 0x1110, 0x6152, 0x8dff, 0x012e, 0x0005, 0xa01e,
-+      0x0010, 0x2019, 0x0001, 0xa00e, 0x6080, 0x2068, 0x8dff, 0x01e8,
-+      0x83ff, 0x0120, 0x6848, 0xa606, 0x0158, 0x0030, 0x683c, 0xa406,
-+      0x1118, 0x6840, 0xa506, 0x0120, 0x2d08, 0x6800, 0x2068, 0x0c70,
-+      0x6a00, 0x6080, 0xad06, 0x1110, 0x6282, 0x0018, 0xa180, 0x0000,
-+      0x2202, 0x82ff, 0x1110, 0x6186, 0x8dff, 0x0005, 0xa016, 0x080c,
-+      0x557b, 0x1110, 0x2011, 0x0001, 0x080c, 0x55c6, 0x1110, 0xa295,
-+      0x0002, 0x0005, 0x080c, 0x55f7, 0x0118, 0x080c, 0xad5f, 0x0010,
-+      0xa085, 0x0001, 0x0005, 0x080c, 0x55f7, 0x0118, 0x080c, 0xacef,
-+      0x0010, 0xa085, 0x0001, 0x0005, 0x080c, 0x55f7, 0x0118, 0x080c,
-+      0xad42, 0x0010, 0xa085, 0x0001, 0x0005, 0x080c, 0x55f7, 0x0118,
-+      0x080c, 0xad0b, 0x0010, 0xa085, 0x0001, 0x0005, 0x080c, 0x55f7,
-+      0x0118, 0x080c, 0xad7b, 0x0010, 0xa085, 0x0001, 0x0005, 0x0126,
-+      0x0006, 0x00d6, 0x2091, 0x8000, 0x6080, 0xa06d, 0x01a0, 0x6800,
-+      0x0006, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0xaf1c,
-+      0x0006, 0x6000, 0xd0fc, 0x0110, 0x080c, 0xc4f9, 0x000e, 0x080c,
-+      0x5823, 0x000e, 0x0c50, 0x6083, 0x0000, 0x6087, 0x0000, 0x00de,
-+      0x000e, 0x012e, 0x0005, 0x60a4, 0xa00d, 0x1118, 0xa085, 0x0001,
-+      0x0005, 0x00e6, 0x2170, 0x7000, 0xa005, 0x1168, 0x20a9, 0x0010,
-+      0xae88, 0x0004, 0x2104, 0xa606, 0x0130, 0x8108, 0x1f04, 0x558a,
-+      0xa085, 0x0001, 0x0008, 0xa006, 0x00ee, 0x0005, 0x00d6, 0x0126,
-+      0x2091, 0x8000, 0x60a4, 0xa06d, 0x1128, 0x080c, 0x1602, 0x01a0,
-+      0x2d00, 0x60a6, 0x6803, 0x0001, 0x6807, 0x0000, 0xad88, 0x0004,
-+      0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x55aa, 0xa085,
-+      0x0001, 0x012e, 0x00de, 0x0005, 0xa006, 0x0cd8, 0x00d6, 0x0126,
-+      0x2091, 0x8000, 0x60a4, 0xa06d, 0x0130, 0x60a7, 0x0000, 0x080c,
-+      0x1619, 0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0x60a8, 0xa00d,
-+      0x1118, 0xa085, 0x0001, 0x0005, 0x00e6, 0x2170, 0x7050, 0xa005,
-+      0x1160, 0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606, 0x0128,
-+      0x8108, 0x1f04, 0x55d5, 0xa085, 0x0001, 0x00ee, 0x0005, 0x0126,
-+      0x2091, 0x8000, 0x0c19, 0x1188, 0x200b, 0xffff, 0x00d6, 0x60a8,
-+      0x2068, 0x6854, 0xa08a, 0x0002, 0x0218, 0x8001, 0x6856, 0x0020,
-+      0x080c, 0x1619, 0x60ab, 0x0000, 0x00de, 0x012e, 0x0005, 0x609c,
-+      0xd0a4, 0x0005, 0x00f6, 0x080c, 0x5f3b, 0x01b0, 0x71b8, 0x81ff,
-+      0x1198, 0x71d4, 0xd19c, 0x0180, 0x2001, 0x007e, 0xa080, 0xc77b,
-+      0x2004, 0xa07d, 0x0148, 0x7804, 0xa084, 0x00ff, 0xa086, 0x0006,
-+      0x1118, 0x7800, 0xc0ed, 0x7802, 0x2079, 0xc652, 0x7804, 0xd0a4,
-+      0x01e8, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016,
-+      0x080c, 0x5356, 0x1168, 0x6004, 0xa084, 0xff00, 0x8007, 0xa096,
-+      0x0004, 0x0118, 0xa086, 0x0006, 0x1118, 0x6000, 0xc0ed, 0x6002,
-+      0x001e, 0x8108, 0x1f04, 0x561f, 0x00ce, 0x015e, 0x080c, 0x5724,
-+      0x0120, 0x2001, 0xc8fc, 0x200c, 0x0038, 0x2079, 0xc652, 0x7804,
-+      0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011, 0x564a, 0x080c, 0x704f,
-+      0x00fe, 0x0005, 0x2011, 0x564a, 0x080c, 0x6fc6, 0x080c, 0x5724,
-+      0x01f0, 0x2001, 0xc7f9, 0x2004, 0xa080, 0x0000, 0x200c, 0xc1ec,
-+      0x2102, 0x2001, 0xc653, 0x2004, 0xd0a4, 0x0130, 0x2009, 0x07d0,
-+      0x2011, 0x564a, 0x080c, 0x704f, 0x00e6, 0x2071, 0xc600, 0x7073,
-+      0x0000, 0x7077, 0x0000, 0x080c, 0x2c62, 0x00ee, 0x04b0, 0x0156,
-+      0x00c6, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x5356,
-+      0x1530, 0x6000, 0xd0ec, 0x0518, 0x0046, 0x62a0, 0xa294, 0x00ff,
-+      0x8227, 0xa006, 0x2009, 0x0029, 0x080c, 0xc1a9, 0x6000, 0xc0e5,
-+      0xc0ec, 0x6002, 0x6004, 0xa084, 0x00ff, 0xa085, 0x0700, 0x6006,
-+      0x2019, 0x0029, 0x080c, 0x7b2f, 0x0076, 0x2039, 0x0000, 0x080c,
-+      0x7a27, 0x2009, 0x0000, 0x080c, 0xbf10, 0x007e, 0x004e, 0x001e,
-+      0x8108, 0x1f04, 0x5675, 0x00ce, 0x015e, 0x0005, 0x00c6, 0x6018,
-+      0x2060, 0x6000, 0xc0ec, 0x6002, 0x00ce, 0x0005, 0x00c6, 0x00d6,
-+      0x080c, 0x15e5, 0x2d60, 0x0508, 0x2009, 0x00ff, 0x60a7, 0x0000,
-+      0x60ab, 0x0000, 0x080c, 0x4f60, 0x6007, 0x0006, 0x6013, 0x00ff,
-+      0x6017, 0xffff, 0x606f, 0x0200, 0x606c, 0x6093, 0x0002, 0x60bb,
-+      0x0520, 0x60a3, 0x00ff, 0x60b7, 0x0000, 0x60af, 0x0000, 0x2c08,
-+      0x2001, 0xc8d3, 0x2102, 0xa085, 0x0001, 0x00de, 0x00ce, 0x0005,
-+      0x7818, 0x2004, 0xd0ac, 0x0005, 0x7818, 0x2004, 0xd0bc, 0x0005,
-+      0x0156, 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x20a9, 0x00ff, 0x2009,
-+      0x0000, 0x0016, 0x080c, 0x5356, 0x1178, 0x2c70, 0x70ac, 0xa005,
-+      0x0158, 0x2060, 0x620c, 0x0026, 0x6010, 0x2068, 0x080c, 0x7633,
-+      0x002e, 0x2260, 0x82ff, 0x1db0, 0x001e, 0x8108, 0x1f04, 0x56e9,
-+      0x002e, 0x00ce, 0x00de, 0x00ee, 0x015e, 0x0005, 0x0006, 0x0016,
-+      0x0026, 0x6004, 0xa08c, 0x00ff, 0xa196, 0x0006, 0x0188, 0xa196,
-+      0x0004, 0x0170, 0xa196, 0x0005, 0x0158, 0xa08c, 0xff00, 0x810f,
-+      0xa196, 0x0006, 0x0128, 0xa196, 0x0004, 0x0110, 0xa196, 0x0005,
-+      0x002e, 0x001e, 0x000e, 0x0005, 0x00f6, 0x2001, 0xc7f9, 0x2004,
-+      0xa07d, 0x0110, 0x7800, 0xd0ec, 0x00fe, 0x0005, 0x0126, 0x0026,
-+      0x2091, 0x8000, 0x0006, 0x62a0, 0xa290, 0xc77b, 0x2204, 0xac06,
-+      0x190c, 0x1519, 0x000e, 0x6200, 0xa005, 0x0110, 0xc2fd, 0x0008,
-+      0xc2fc, 0x6202, 0x002e, 0x012e, 0x0005, 0x2011, 0xc635, 0x2204,
-+      0xd0cc, 0x0138, 0x2001, 0xc8fa, 0x200c, 0x2011, 0x5752, 0x080c,
-+      0x704f, 0x0005, 0x2011, 0x5752, 0x080c, 0x6fc6, 0x2011, 0xc635,
-+      0x2204, 0xc0cc, 0x2012, 0x0005, 0x2071, 0xc734, 0x7003, 0x0001,
-+      0x7007, 0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000,
-+      0x701f, 0x0000, 0x700b, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000,
-+      0x705b, 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x2071, 0xc8c3,
-+      0x7003, 0xc734, 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0xc8a3,
-+      0x7013, 0x0020, 0x7017, 0x0040, 0x7037, 0x0000, 0x0005, 0x0016,
-+      0x00e6, 0x2071, 0xc87b, 0xa00e, 0x7186, 0x718a, 0x7097, 0x0001,
-+      0x2001, 0xc653, 0x2004, 0xd0fc, 0x1150, 0x2001, 0xc653, 0x2004,
-+      0xa00e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x0804, 0x57ed, 0x2001,
-+      0xc672, 0x200c, 0xa184, 0x000f, 0x2009, 0xc673, 0x210c, 0x0002,
-+      0x5795, 0x57c8, 0x57cf, 0x57d9, 0x57de, 0x5795, 0x5795, 0x5795,
-+      0x57b8, 0x5795, 0x5795, 0x5795, 0x5795, 0x5795, 0x5795, 0x5795,
-+      0x7003, 0x0004, 0x0136, 0x0146, 0x0156, 0x2099, 0xc676, 0x20a1,
-+      0xc8cc, 0x20a9, 0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x0428,
-+      0x708f, 0x0005, 0x7007, 0x0122, 0x2001, 0x0002, 0x0030, 0x708f,
-+      0x0002, 0x7007, 0x0121, 0x2001, 0x0003, 0x7002, 0x7097, 0x0001,
-+      0x0088, 0x7007, 0x0122, 0x2001, 0x0002, 0x0020, 0x7007, 0x0121,
-+      0x2001, 0x0003, 0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00,
-+      0x8007, 0x709a, 0xa184, 0x00ff, 0x7092, 0x00ee, 0x001e, 0x0005,
-+      0x00e6, 0x2071, 0xc734, 0x684c, 0xa005, 0x1130, 0x7028, 0xc085,
-+      0x702a, 0xa085, 0x0001, 0x0428, 0x6a60, 0x7236, 0x6b64, 0x733a,
-+      0x6868, 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e,
-+      0x6844, 0x7032, 0x2009, 0x000d, 0x200a, 0x700b, 0x0000, 0x8007,
-+      0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100,
-+      0xa319, 0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001,
-+      0xa006, 0x00ee, 0x0005, 0x0156, 0x00e6, 0x0026, 0x6838, 0xd0fc,
-+      0x1904, 0x587c, 0x6804, 0xa00d, 0x0188, 0x00d6, 0x2071, 0xc600,
-+      0xa016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff,
-+      0x1dc8, 0x702e, 0x70b4, 0xa200, 0x70b6, 0x00de, 0x2071, 0xc734,
-+      0x701c, 0xa005, 0x1904, 0x588c, 0x20a9, 0x0032, 0x0f04, 0x588a,
-+      0x0e04, 0x5846, 0x2071, 0xc87b, 0x7200, 0x82ff, 0x05d8, 0x6934,
-+      0xa186, 0x0103, 0x1904, 0x589a, 0x6948, 0x6844, 0xa105, 0x1540,
-+      0x2009, 0x8020, 0x2200, 0x0002, 0x588a, 0x5861, 0x5901, 0x590e,
-+      0x588a, 0x2071, 0x0000, 0x20a9, 0x0032, 0x0f04, 0x588a, 0x7018,
-+      0xd084, 0x1dd8, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b,
-+      0x0001, 0x2091, 0x4080, 0x2071, 0xc600, 0x702c, 0x206a, 0x2d00,
-+      0x702e, 0x70b4, 0x8000, 0x70b6, 0x002e, 0x00ee, 0x015e, 0x0005,
-+      0x6844, 0xa086, 0x0100, 0x1130, 0x6868, 0xa005, 0x1118, 0x2009,
-+      0x8020, 0x0880, 0x2071, 0xc734, 0x2d08, 0x206b, 0x0000, 0x7010,
-+      0x8000, 0x7012, 0x7018, 0xa06d, 0x711a, 0x0110, 0x6902, 0x0008,
-+      0x711e, 0x0c10, 0xa18c, 0x00ff, 0xa186, 0x0013, 0x01e0, 0xa186,
-+      0x001b, 0x01c8, 0xa186, 0x0023, 0x01e8, 0xa186, 0x0017, 0x0130,
-+      0xa186, 0x001e, 0x0118, 0xa18e, 0x001f, 0x19e0, 0x684c, 0xd0cc,
-+      0x09c8, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x1998, 0x2009,
-+      0x8021, 0x0804, 0x585a, 0x6848, 0xa005, 0x1960, 0x2009, 0x8022,
-+      0x0804, 0x585a, 0x2071, 0x0000, 0x7018, 0xd084, 0x1918, 0x00e6,
-+      0x2071, 0xc682, 0x7140, 0x00ee, 0x6838, 0xa102, 0x0a04, 0x588a,
-+      0x684c, 0xa005, 0x1158, 0x00e6, 0x2071, 0xc682, 0x7004, 0x00ee,
-+      0xd08c, 0x1904, 0x588a, 0x2001, 0x8024, 0x0040, 0x6848, 0xd084,
-+      0x1118, 0x2001, 0x8023, 0x0010, 0x2001, 0x8027, 0x7022, 0x6840,
-+      0x7026, 0x683c, 0x702a, 0x6850, 0x702e, 0x0026, 0x0036, 0x6b38,
-+      0x2e10, 0xa290, 0x0072, 0x2d00, 0xa080, 0x0015, 0x200c, 0x2112,
-+      0x8000, 0x200c, 0x8210, 0x8319, 0x1dd0, 0x003e, 0x002e, 0x0804,
-+      0x586f, 0x7084, 0x8008, 0xa092, 0x001e, 0x1a04, 0x588a, 0x7186,
-+      0xae90, 0x0003, 0xa210, 0x683c, 0x2012, 0x0080, 0x7084, 0x8008,
-+      0xa092, 0x000f, 0x1a04, 0x588a, 0x7186, 0xae90, 0x0003, 0x8003,
-+      0xa210, 0x683c, 0x2012, 0x8210, 0x6840, 0x2012, 0x7088, 0xa10a,
-+      0x0a04, 0x5873, 0x718c, 0x7084, 0xa10a, 0x0a04, 0x5873, 0x2071,
-+      0x0000, 0x7018, 0xd084, 0x1904, 0x5873, 0x2071, 0xc87b, 0x7000,
-+      0xa086, 0x0002, 0x1150, 0x080c, 0x5b8e, 0x2071, 0x0000, 0x701b,
-+      0x0001, 0x2091, 0x4080, 0x0804, 0x5873, 0x080c, 0x5bb8, 0x2071,
-+      0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804, 0x5873, 0x0006,
-+      0x684c, 0x0006, 0x6837, 0x0103, 0x20a9, 0x001c, 0xad80, 0x0011,
-+      0x20a0, 0x2001, 0x0000, 0x40a4, 0x000e, 0xa084, 0x00ff, 0x684e,
-+      0x000e, 0x684a, 0x6952, 0x0005, 0x2071, 0xc734, 0x7004, 0x0002,
-+      0x596a, 0x597b, 0x5b79, 0x5b7a, 0x5b87, 0x5b8d, 0x596b, 0x5b6a,
-+      0x5b00, 0x5b56, 0x0005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x597a,
-+      0x2009, 0x000d, 0x7030, 0x200a, 0x2091, 0x4080, 0x7007, 0x0001,
-+      0x700b, 0x0000, 0x012e, 0x2069, 0xc93a, 0x683c, 0xa005, 0x03f8,
-+      0x11f0, 0x0126, 0x2091, 0x8000, 0x2069, 0x0000, 0x6934, 0x2001,
-+      0xc740, 0x2004, 0xa10a, 0x0170, 0x0e04, 0x599e, 0x2069, 0x0000,
-+      0x6818, 0xd084, 0x1158, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001,
-+      0x2091, 0x4080, 0x2069, 0xc93a, 0x683f, 0xffff, 0x012e, 0x2069,
-+      0xc600, 0x6848, 0x6968, 0xa102, 0x2069, 0xc87b, 0x688a, 0x6984,
-+      0x701c, 0xa06d, 0x0120, 0x81ff, 0x0904, 0x59f4, 0x00a0, 0x81ff,
-+      0x0904, 0x5aba, 0x2071, 0xc87b, 0x7184, 0x7088, 0xa10a, 0x1258,
-+      0x7190, 0x2071, 0xc93a, 0x7038, 0xa005, 0x0128, 0x1b04, 0x5aba,
-+      0x713a, 0x0804, 0x5aba, 0x2071, 0xc87b, 0x718c, 0x0126, 0x2091,
-+      0x8000, 0x7084, 0xa10a, 0x0a04, 0x5ad5, 0x0e04, 0x5a76, 0x2071,
-+      0x0000, 0x7018, 0xd084, 0x1904, 0x5a76, 0x2001, 0xffff, 0x2071,
-+      0xc93a, 0x703a, 0x2071, 0xc87b, 0x7000, 0xa086, 0x0002, 0x1150,
-+      0x080c, 0x5b8e, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080,
-+      0x0804, 0x5a76, 0x080c, 0x5bb8, 0x2071, 0x0000, 0x701b, 0x0001,
-+      0x2091, 0x4080, 0x0804, 0x5a76, 0x2071, 0xc87b, 0x7000, 0xa005,
-+      0x0904, 0x5a9c, 0x6934, 0xa186, 0x0103, 0x1904, 0x5a79, 0x684c,
-+      0xd0bc, 0x1904, 0x5a9c, 0x6948, 0x6844, 0xa105, 0x1904, 0x5a91,
-+      0x2009, 0x8020, 0x2071, 0xc87b, 0x7000, 0x0002, 0x5a9c, 0x5a5c,
-+      0x5a34, 0x5a46, 0x5a13, 0x0136, 0x0146, 0x0156, 0x2099, 0xc676,
-+      0x20a1, 0xc8cc, 0x20a9, 0x0004, 0x53a3, 0x015e, 0x014e, 0x013e,
-+      0x2071, 0xc8c3, 0xad80, 0x000f, 0x700e, 0x7013, 0x0002, 0x7007,
-+      0x0002, 0x700b, 0x0000, 0x2e10, 0x080c, 0x164d, 0x2071, 0xc734,
-+      0x7007, 0x0009, 0x0804, 0x5aba, 0x7084, 0x8008, 0xa092, 0x001e,
-+      0x1a04, 0x5aba, 0xae90, 0x0003, 0xa210, 0x683c, 0x2012, 0x7186,
-+      0x2071, 0xc734, 0x080c, 0x5c0f, 0x0804, 0x5aba, 0x7084, 0x8008,
-+      0xa092, 0x000f, 0x1a04, 0x5aba, 0xae90, 0x0003, 0x8003, 0xa210,
-+      0x683c, 0x2012, 0x8210, 0x6840, 0x2012, 0x7186, 0x2071, 0xc734,
-+      0x080c, 0x5c0f, 0x0804, 0x5aba, 0x0126, 0x2091, 0x8000, 0x0e04,
-+      0x5a76, 0x2071, 0x0000, 0x7018, 0xd084, 0x1180, 0x7122, 0x683c,
-+      0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, 0x012e,
-+      0x2071, 0xc734, 0x080c, 0x5c0f, 0x0804, 0x5aba, 0x012e, 0x0804,
-+      0x5aba, 0xa18c, 0x00ff, 0xa186, 0x0017, 0x0130, 0xa186, 0x001e,
-+      0x0118, 0xa18e, 0x001f, 0x11c0, 0x684c, 0xd0cc, 0x01a8, 0x6850,
-+      0xa084, 0x00ff, 0xa086, 0x0001, 0x1178, 0x2009, 0x8021, 0x0804,
-+      0x5a0a, 0x6844, 0xa086, 0x0100, 0x1138, 0x6868, 0xa005, 0x1120,
-+      0x2009, 0x8020, 0x0804, 0x5a0a, 0x2071, 0xc734, 0x080c, 0x5c21,
-+      0x01c8, 0x2071, 0xc734, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff,
-+      0xa086, 0x0003, 0x1130, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0108,
-+      0x710e, 0x7007, 0x0003, 0x080c, 0x5c3a, 0x7050, 0xa086, 0x0100,
-+      0x0904, 0x5b7a, 0x0126, 0x2091, 0x8000, 0x2071, 0xc734, 0x7008,
-+      0xa086, 0x0001, 0x1180, 0x0e04, 0x5ad3, 0x2009, 0x000d, 0x7030,
-+      0x200a, 0x2091, 0x4080, 0x700b, 0x0000, 0x7004, 0xa086, 0x0006,
-+      0x1110, 0x7007, 0x0001, 0x012e, 0x0005, 0x2071, 0xc734, 0x080c,
-+      0x5c21, 0x0518, 0x2071, 0xc87b, 0x7084, 0x700a, 0x20a9, 0x0020,
-+      0x2099, 0xc87c, 0x20a1, 0xc8a3, 0x53a3, 0x7087, 0x0000, 0x2071,
-+      0xc734, 0x2069, 0xc8c3, 0x706c, 0x6826, 0x7070, 0x682a, 0x7074,
-+      0x682e, 0x7078, 0x6832, 0x2d10, 0x080c, 0x164d, 0x7007, 0x0008,
-+      0x2001, 0xffff, 0x2071, 0xc93a, 0x703a, 0x012e, 0x0804, 0x5aba,
-+      0x2069, 0xc8c3, 0x6808, 0xa08e, 0x0000, 0x0904, 0x5b55, 0xa08e,
-+      0x0200, 0x0904, 0x5b53, 0xa08e, 0x0100, 0x1904, 0x5b55, 0x0126,
-+      0x2091, 0x8000, 0x0e04, 0x5b51, 0x2069, 0x0000, 0x6818, 0xd084,
-+      0x15c0, 0x702c, 0x7130, 0x8108, 0xa102, 0x0230, 0xa00e, 0x7034,
-+      0x706e, 0x7038, 0x7072, 0x0048, 0x706c, 0xa080, 0x0040, 0x706e,
-+      0x1220, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x6936, 0x700b,
-+      0x0000, 0x2001, 0xc8a0, 0x2004, 0xa005, 0x1190, 0x6934, 0x2069,
-+      0xc87b, 0x689c, 0x699e, 0x2069, 0xc93a, 0xa102, 0x1118, 0x683c,
-+      0xa005, 0x1368, 0x2001, 0xc8a1, 0x200c, 0x810d, 0x693e, 0x0038,
-+      0x2009, 0x8040, 0x6922, 0x681b, 0x0001, 0x2091, 0x4080, 0x7007,
-+      0x0001, 0x012e, 0x0010, 0x7007, 0x0005, 0x0005, 0x2001, 0xc8c5,
-+      0x2004, 0xa08e, 0x0100, 0x1128, 0x7007, 0x0001, 0x080c, 0x5c0f,
-+      0x0005, 0xa08e, 0x0000, 0x0de0, 0xa08e, 0x0200, 0x1dc8, 0x7007,
-+      0x0005, 0x0005, 0x701c, 0xa06d, 0x0158, 0x080c, 0x5c21, 0x0140,
-+      0x7007, 0x0003, 0x080c, 0x5c3a, 0x7050, 0xa086, 0x0100, 0x0110,
-+      0x0005, 0x0005, 0x7050, 0xa09e, 0x0100, 0x1118, 0x7007, 0x0004,
-+      0x0030, 0xa086, 0x0200, 0x1110, 0x7007, 0x0005, 0x0005, 0x080c,
-+      0x5bdd, 0x7006, 0x080c, 0x5c0f, 0x0005, 0x0005, 0x00e6, 0x0156,
-+      0x2071, 0xc87b, 0x7184, 0x81ff, 0x0500, 0xa006, 0x7086, 0xae80,
-+      0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x0f04,
-+      0x5bb2, 0x2014, 0x722a, 0x8000, 0x0f04, 0x5bb2, 0x2014, 0x722e,
-+      0x8000, 0x0f04, 0x5bb2, 0x2014, 0x723a, 0x8000, 0x0f04, 0x5bb2,
-+      0x2014, 0x723e, 0xa180, 0x8030, 0x7022, 0x015e, 0x00ee, 0x0005,
-+      0x00e6, 0x0156, 0x2071, 0xc87b, 0x7184, 0x81ff, 0x01d8, 0xa006,
-+      0x7086, 0xae80, 0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226,
-+      0x8000, 0x2014, 0x722a, 0x8000, 0x0f04, 0x5bd4, 0x2014, 0x723a,
-+      0x8000, 0x2014, 0x723e, 0x0018, 0x2001, 0x8020, 0x0010, 0x2001,
-+      0x8042, 0x7022, 0x015e, 0x00ee, 0x0005, 0x702c, 0x7130, 0x8108,
-+      0xa102, 0x0230, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072, 0x0048,
-+      0x706c, 0xa080, 0x0040, 0x706e, 0x1220, 0x7070, 0xa081, 0x0000,
-+      0x7072, 0x7132, 0x700c, 0x8001, 0x700e, 0x1180, 0x0126, 0x2091,
-+      0x8000, 0x0e04, 0x5c09, 0x2001, 0x000d, 0x2102, 0x2091, 0x4080,
-+      0x2001, 0x0001, 0x700b, 0x0000, 0x012e, 0x0005, 0x2001, 0x0007,
-+      0x0005, 0x2001, 0x0006, 0x700b, 0x0001, 0x012e, 0x0005, 0x701c,
-+      0xa06d, 0x0170, 0x0126, 0x2091, 0x8000, 0x7010, 0x8001, 0x7012,
-+      0x2d04, 0x701e, 0xa005, 0x1108, 0x701a, 0x012e, 0x080c, 0x1619,
-+      0x0005, 0x2019, 0x000d, 0x2304, 0x230c, 0xa10e, 0x0130, 0x2304,
-+      0x230c, 0xa10e, 0x0110, 0xa006, 0x0060, 0x732c, 0x8319, 0x7130,
-+      0xa102, 0x1118, 0x2300, 0xa005, 0x0020, 0x0210, 0xa302, 0x0008,
-+      0x8002, 0x0005, 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053,
-+      0x0000, 0x0126, 0x2091, 0x8000, 0x2009, 0xc959, 0x2104, 0xc08d,
-+      0x200a, 0x012e, 0x080c, 0x1669, 0x0005, 0x708c, 0xa08a, 0x0029,
-+      0x1220, 0xa082, 0x001d, 0x0033, 0x0010, 0x080c, 0x1519, 0x6027,
-+      0x1e00, 0x0005, 0x5d48, 0x5cc3, 0x5cdb, 0x5d18, 0x5d39, 0x5d73,
-+      0x5d85, 0x5cdb, 0x5d5f, 0x5c67, 0x5c95, 0x5c66, 0x0005, 0x00d6,
-+      0x2069, 0x0200, 0x6804, 0xa005, 0x1180, 0x6808, 0xa005, 0x1518,
-+      0x708f, 0x0028, 0x2069, 0xc90c, 0x2d04, 0x7002, 0x080c, 0x603d,
-+      0x6028, 0xa085, 0x0600, 0x602a, 0x00b0, 0x708f, 0x0028, 0x2069,
-+      0xc90c, 0x2d04, 0x7002, 0x6028, 0xa085, 0x0600, 0x602a, 0x00e6,
-+      0x0036, 0x0046, 0x0056, 0x2071, 0xc96a, 0x080c, 0x1ec3, 0x005e,
-+      0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200,
-+      0x6804, 0xa005, 0x1180, 0x6808, 0xa005, 0x1518, 0x708f, 0x0028,
-+      0x2069, 0xc90c, 0x2d04, 0x7002, 0x080c, 0x60ca, 0x6028, 0xa085,
-+      0x0600, 0x602a, 0x00b0, 0x708f, 0x0028, 0x2069, 0xc90c, 0x2d04,
-+      0x7002, 0x6028, 0xa085, 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046,
-+      0x0056, 0x2071, 0xc96a, 0x080c, 0x1ec3, 0x005e, 0x004e, 0x003e,
-+      0x00ee, 0x00de, 0x0005, 0x6803, 0x0090, 0x6124, 0xd1e4, 0x1190,
-+      0x080c, 0x5df0, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150,
-+      0x708f, 0x0020, 0x080c, 0x5df0, 0x0028, 0x708f, 0x001d, 0x0010,
-+      0x708f, 0x001f, 0x0005, 0x6803, 0x0088, 0x6124, 0xd1cc, 0x1590,
-+      0xd1dc, 0x1568, 0xd1e4, 0x1540, 0xa184, 0x1e00, 0x1580, 0x60e3,
-+      0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x5f6b, 0x080c, 0x25fb,
-+      0x0156, 0x6803, 0x0100, 0x20a9, 0x0014, 0x6804, 0xd0dc, 0x1118,
-+      0x1f04, 0x5cf5, 0x0048, 0x20a9, 0x0014, 0x6803, 0x0080, 0x6804,
-+      0xd0d4, 0x1130, 0x1f04, 0x5cff, 0x080c, 0x5f8c, 0x015e, 0x0078,
-+      0x015e, 0x708f, 0x0028, 0x0058, 0x708f, 0x001e, 0x0040, 0x708f,
-+      0x001d, 0x0028, 0x708f, 0x0020, 0x0010, 0x708f, 0x001f, 0x0005,
-+      0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x5f6b, 0x080c,
-+      0x25fb, 0x6803, 0x0080, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158,
-+      0xd1e4, 0x1130, 0xa184, 0x1e00, 0x1158, 0x708f, 0x0028, 0x0040,
-+      0x708f, 0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x001f,
-+      0x0005, 0x6803, 0x00a0, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138,
-+      0x080c, 0x1f06, 0x708f, 0x001e, 0x0010, 0x708f, 0x001d, 0x0005,
-+      0x080c, 0x5e62, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x5df0, 0x0016,
-+      0x080c, 0x1f06, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x708f,
-+      0x001e, 0x0020, 0x708f, 0x001f, 0x080c, 0x5df0, 0x0005, 0x6803,
-+      0x00a0, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128,
-+      0xd1e4, 0x0140, 0x708f, 0x001e, 0x0028, 0x708f, 0x001d, 0x0010,
-+      0x708f, 0x0021, 0x0005, 0x080c, 0x5e62, 0x6124, 0xd1d4, 0x1150,
-+      0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x708f, 0x001e, 0x0028, 0x708f,
-+      0x001d, 0x0010, 0x708f, 0x001f, 0x0005, 0x6803, 0x0090, 0x6124,
-+      0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158,
-+      0x708f, 0x001e, 0x0040, 0x708f, 0x001d, 0x0028, 0x708f, 0x0020,
-+      0x0010, 0x708f, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6,
-+      0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0xc600, 0x2091,
-+      0x8000, 0x080c, 0x5f3b, 0x11e8, 0x2001, 0xc60c, 0x200c, 0xd1b4,
-+      0x01c0, 0xc1b4, 0x2102, 0x6027, 0x0200, 0xe000, 0xe000, 0x6024,
-+      0xd0cc, 0x0158, 0x6803, 0x00a0, 0x2001, 0xc8e6, 0x2003, 0x0001,
-+      0x2001, 0xc600, 0x2003, 0x0001, 0x0428, 0x6028, 0xc0cd, 0x602a,
-+      0x0408, 0x080c, 0x5f57, 0x0150, 0x080c, 0x5f4d, 0x1138, 0x2001,
-+      0x0001, 0x080c, 0x296d, 0x080c, 0x5f12, 0x00a0, 0x080c, 0x5e5f,
-+      0x0178, 0x2001, 0x0001, 0x080c, 0x296d, 0x708c, 0xa086, 0x001e,
-+      0x0120, 0x708c, 0xa086, 0x0022, 0x1118, 0x708f, 0x0025, 0x0010,
-+      0x708f, 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005,
-+      0x0026, 0x2011, 0x5e01, 0x080c, 0x7089, 0x002e, 0x0016, 0x0026,
-+      0x2009, 0x0064, 0x2011, 0x5e01, 0x080c, 0x7080, 0x002e, 0x001e,
-+      0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c, 0x8c0e, 0x2071, 0xc600,
-+      0x080c, 0x5d9c, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026,
-+      0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x080c, 0x8c0e,
-       0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0xc600, 0x2091, 0x8000,
--      0x080c, 0x5f22, 0x11e8, 0x2001, 0xc60c, 0x200c, 0xd1b4, 0x01c0,
--      0xc1b4, 0x2102, 0x6027, 0x0200, 0xe000, 0xe000, 0x6024, 0xd0cc,
--      0x0158, 0x6803, 0x00a0, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001,
--      0xc600, 0x2003, 0x0001, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408,
--      0x080c, 0x5f3e, 0x0150, 0x080c, 0x5f34, 0x1138, 0x2001, 0x0001,
--      0x080c, 0x296d, 0x080c, 0x5ef9, 0x00a0, 0x080c, 0x5e46, 0x0178,
--      0x2001, 0x0001, 0x080c, 0x296d, 0x708c, 0xa086, 0x001e, 0x0120,
--      0x708c, 0xa086, 0x0022, 0x1118, 0x708f, 0x0025, 0x0010, 0x708f,
--      0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026,
--      0x2011, 0x5de8, 0x080c, 0x7070, 0x002e, 0x0016, 0x0026, 0x2009,
--      0x0064, 0x2011, 0x5de8, 0x080c, 0x7067, 0x002e, 0x001e, 0x0005,
--      0x00e6, 0x00f6, 0x0016, 0x080c, 0x8bf5, 0x2071, 0xc600, 0x080c,
--      0x5d83, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036,
--      0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x080c, 0x8bf5, 0x2061,
--      0x0100, 0x2069, 0x0140, 0x2071, 0xc600, 0x2091, 0x8000, 0x6028,
--      0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002,
--      0x080c, 0x8f18, 0x080c, 0x8dee, 0x080c, 0x7024, 0x0036, 0x2019,
--      0x0000, 0x080c, 0x8e79, 0x003e, 0x60e3, 0x0000, 0x080c, 0xc579,
--      0x080c, 0xc594, 0x2001, 0xc600, 0x2003, 0x0004, 0x6027, 0x0008,
--      0x080c, 0x12e1, 0x2001, 0x0001, 0x080c, 0x296d, 0x012e, 0x00fe,
--      0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x2001,
--      0xc600, 0x2004, 0xa086, 0x0004, 0x0140, 0x2001, 0xc8e5, 0x2003,
--      0xaaaa, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x0005, 0x6020, 0xd09c,
--      0x0005, 0x6800, 0xa086, 0x00c0, 0x0160, 0x6803, 0x00c0, 0x0156,
--      0x20a9, 0x002d, 0x1d04, 0x5e52, 0x2091, 0x6000, 0x1f04, 0x5e52,
--      0x015e, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
--      0x0140, 0x2071, 0xc600, 0x2001, 0xc8e6, 0x200c, 0xa186, 0x0000,
--      0x0158, 0xa186, 0x0001, 0x0158, 0xa186, 0x0002, 0x0158, 0xa186,
--      0x0003, 0x0158, 0x0804, 0x5ee7, 0x708f, 0x0022, 0x0040, 0x708f,
--      0x0021, 0x0028, 0x708f, 0x0023, 0x0020, 0x708f, 0x0024, 0x6043,
--      0x0000, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c,
--      0x2a1c, 0x0026, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002,
--      0x080c, 0x8f18, 0x080c, 0x8dee, 0x0036, 0x2019, 0x0000, 0x080c,
--      0x8e79, 0x003e, 0x002e, 0x7000, 0xa08e, 0x0004, 0x0118, 0x602b,
--      0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000,
--      0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0120, 0x012e, 0x015e, 0x0804,
--      0x5ef5, 0x6800, 0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6904, 0xd1d4,
--      0x1130, 0x6803, 0x0100, 0x1f04, 0x5eaa, 0x080c, 0x5f73, 0x012e,
--      0x015e, 0x080c, 0x5f34, 0x01a8, 0x6044, 0xa005, 0x0168, 0x6050,
--      0x0006, 0xa085, 0x0020, 0x6052, 0x080c, 0x5f73, 0xa006, 0x8001,
--      0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c,
--      0x5f73, 0x0016, 0x0026, 0x2009, 0x00c8, 0x2011, 0x5df5, 0x080c,
--      0x7036, 0x002e, 0x001e, 0x2001, 0xc8e6, 0x2003, 0x0004, 0x080c,
--      0x5c34, 0x080c, 0x5f34, 0x0148, 0x6804, 0xd0d4, 0x1130, 0xd0dc,
--      0x1100, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x00ee, 0x00de, 0x00ce,
--      0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140,
--      0x2071, 0xc600, 0x2001, 0xc8e5, 0x2003, 0x0000, 0x2001, 0xc8d6,
--      0x2003, 0x0000, 0x708f, 0x0000, 0x60e3, 0x0000, 0x6887, 0x0000,
--      0x2001, 0x0000, 0x080c, 0x2a1c, 0x6803, 0x0000, 0x6043, 0x0090,
--      0x6043, 0x0010, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de,
--      0x00ce, 0x0005, 0x0006, 0x2001, 0xc8e5, 0x2004, 0xa086, 0xaaaa,
--      0x000e, 0x0005, 0x0006, 0x2001, 0xc672, 0x2004, 0xa084, 0x0030,
--      0xa086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0xc672, 0x2004,
--      0xa084, 0x0030, 0xa086, 0x0030, 0x000e, 0x0005, 0x0006, 0x2001,
--      0xc672, 0x2004, 0xa084, 0x0030, 0xa086, 0x0010, 0x000e, 0x0005,
--      0x0006, 0x2001, 0xc672, 0x2004, 0xa084, 0x0030, 0xa086, 0x0020,
--      0x000e, 0x0005, 0x2001, 0xc60c, 0x2004, 0xd0a4, 0x0170, 0x080c,
--      0x2a3c, 0x0036, 0x0016, 0x2009, 0x0000, 0x2019, 0x0028, 0x080c,
--      0x2e19, 0x001e, 0x003e, 0xa006, 0x0009, 0x0005, 0x00e6, 0x2071,
--      0xc60c, 0x2e04, 0x0118, 0xa085, 0x0010, 0x0010, 0xa084, 0xffef,
--      0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60f0, 0x0006, 0x60ec,
--      0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x602f,
--      0x0100, 0x602f, 0x0000, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e,
--      0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x000e,
--      0x60f2, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c,
--      0x2a1c, 0x6800, 0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6803, 0x00a0,
--      0x000e, 0x6052, 0x6050, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
--      0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
--      0xc600, 0x6020, 0xa084, 0x0080, 0x0138, 0x2001, 0xc60c, 0x200c,
--      0xc1bd, 0x2102, 0x0804, 0x601c, 0x2001, 0xc60c, 0x200c, 0xc1bc,
--      0x2102, 0x6028, 0xa084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x6803,
--      0x0090, 0x20a9, 0x0384, 0x6024, 0xd0cc, 0x1508, 0x1d04, 0x5fcb,
--      0x2091, 0x6000, 0x1f04, 0x5fcb, 0x2011, 0x0003, 0x080c, 0x8f0e,
--      0x2011, 0x0002, 0x080c, 0x8f18, 0x080c, 0x8dee, 0x2019, 0x0000,
--      0x080c, 0x8e79, 0x6803, 0x00a0, 0x2001, 0xc8e6, 0x2003, 0x0001,
--      0x2001, 0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x0468, 0x86ff,
--      0x1110, 0x080c, 0x1f06, 0x60e3, 0x0000, 0x2001, 0xc8d6, 0x2004,
--      0x080c, 0x2a1c, 0x60e2, 0x080c, 0x25fb, 0x6803, 0x0080, 0x20a9,
--      0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c,
--      0x0138, 0x1d04, 0x6001, 0x2091, 0x6000, 0x1f04, 0x6001, 0x0820,
--      0x6028, 0xa085, 0x1e00, 0x602a, 0x70a4, 0xa005, 0x1118, 0x6887,
--      0x0001, 0x0008, 0x6886, 0xa006, 0x00ee, 0x00de, 0x00ce, 0x003e,
--      0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
--      0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xc600, 0x2069,
--      0x0140, 0x6020, 0xa084, 0x00c0, 0x0120, 0x6884, 0xa005, 0x1904,
--      0x6078, 0x6803, 0x0088, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001,
--      0x0000, 0x080c, 0x2a1c, 0x2069, 0x0200, 0x6804, 0xa005, 0x1118,
--      0x6808, 0xa005, 0x01c0, 0x6028, 0xa084, 0xfbff, 0x602a, 0x6027,
--      0x0400, 0x2069, 0xc90c, 0x7000, 0x206a, 0x708f, 0x0026, 0x7003,
--      0x0001, 0x20a9, 0x0002, 0x1d04, 0x605b, 0x2091, 0x6000, 0x1f04,
--      0x605b, 0x0804, 0x60a9, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027,
--      0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c, 0x0520, 0xa084,
--      0x1a00, 0x1508, 0x1d04, 0x6067, 0x2091, 0x6000, 0x1f04, 0x6067,
--      0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002, 0x080c, 0x8f18,
--      0x080c, 0x8dee, 0x2019, 0x0000, 0x080c, 0x8e79, 0x6803, 0x00a0,
--      0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600, 0x2003, 0x0001,
--      0xa085, 0x0001, 0x00b0, 0x080c, 0x25fb, 0x6803, 0x0080, 0x2069,
--      0x0140, 0x60e3, 0x0000, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001,
--      0x0008, 0x6886, 0x2001, 0xc8d6, 0x2004, 0x080c, 0x2a1c, 0x60e2,
--      0xa006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,
--      0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,
--      0x2061, 0x0100, 0x2071, 0xc600, 0x6020, 0xa084, 0x00c0, 0x01e0,
--      0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002, 0x080c, 0x8f18,
--      0x080c, 0x8dee, 0x2019, 0x0000, 0x080c, 0x8e79, 0x2069, 0x0140,
--      0x6803, 0x00a0, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600,
--      0x2003, 0x0001, 0x0804, 0x614e, 0x2001, 0xc60c, 0x200c, 0xd1b4,
--      0x1160, 0xc1b5, 0x2102, 0x080c, 0x5ddd, 0x2069, 0x0140, 0x080c,
--      0x25fb, 0x6803, 0x0080, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804,
--      0xa005, 0x1118, 0x6808, 0xa005, 0x01c0, 0x6028, 0xa084, 0xfdff,
--      0x602a, 0x6027, 0x0200, 0x2069, 0xc90c, 0x7000, 0x206a, 0x708f,
--      0x0027, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x6105, 0x2091,
--      0x6000, 0x1f04, 0x6105, 0x0804, 0x614e, 0x6027, 0x1e00, 0x2009,
--      0x1e00, 0xe000, 0x6024, 0xa10c, 0x01c8, 0xa084, 0x1c00, 0x11b0,
--      0x1d04, 0x610d, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c,
--      0x6f0a, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071,
--      0xc93a, 0x7018, 0x00ee, 0xa005, 0x1d00, 0x0500, 0x0026, 0x2011,
--      0x5df5, 0x080c, 0x6fad, 0x2011, 0x5de8, 0x080c, 0x7070, 0x002e,
-+      0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x8f27, 0x2011,
-+      0x0002, 0x080c, 0x8f31, 0x080c, 0x8e07, 0x080c, 0x703d, 0x0036,
-+      0x2019, 0x0000, 0x080c, 0x8e92, 0x003e, 0x60e3, 0x0000, 0x080c,
-+      0xc59f, 0x080c, 0xc5ba, 0x2001, 0xc600, 0x2003, 0x0004, 0x6027,
-+      0x0008, 0x080c, 0x12e1, 0x2001, 0x0001, 0x080c, 0x296d, 0x012e,
-+      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005,
-+      0x2001, 0xc600, 0x2004, 0xa086, 0x0004, 0x0140, 0x2001, 0xc8e5,
-+      0x2003, 0xaaaa, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x0005, 0x6020,
-+      0xd09c, 0x0005, 0x6800, 0xa086, 0x00c0, 0x0160, 0x6803, 0x00c0,
-+      0x0156, 0x20a9, 0x002d, 0x1d04, 0x5e6b, 0x2091, 0x6000, 0x1f04,
-+      0x5e6b, 0x015e, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
-+      0x2069, 0x0140, 0x2071, 0xc600, 0x2001, 0xc8e6, 0x200c, 0xa186,
-+      0x0000, 0x0158, 0xa186, 0x0001, 0x0158, 0xa186, 0x0002, 0x0158,
-+      0xa186, 0x0003, 0x0158, 0x0804, 0x5f00, 0x708f, 0x0022, 0x0040,
-+      0x708f, 0x0021, 0x0028, 0x708f, 0x0023, 0x0020, 0x708f, 0x0024,
-+      0x6043, 0x0000, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001,
-+      0x080c, 0x2a1c, 0x0026, 0x2011, 0x0003, 0x080c, 0x8f27, 0x2011,
-+      0x0002, 0x080c, 0x8f31, 0x080c, 0x8e07, 0x0036, 0x2019, 0x0000,
-+      0x080c, 0x8e92, 0x003e, 0x002e, 0x7000, 0xa08e, 0x0004, 0x0118,
-+      0x602b, 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091,
-+      0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0120, 0x012e, 0x015e,
-+      0x0804, 0x5f0e, 0x6800, 0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6904,
-+      0xd1d4, 0x1130, 0x6803, 0x0100, 0x1f04, 0x5ec3, 0x080c, 0x5f8c,
-+      0x012e, 0x015e, 0x080c, 0x5f4d, 0x01a8, 0x6044, 0xa005, 0x0168,
-+      0x6050, 0x0006, 0xa085, 0x0020, 0x6052, 0x080c, 0x5f8c, 0xa006,
-+      0x8001, 0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110,
-+      0x080c, 0x5f8c, 0x0016, 0x0026, 0x2009, 0x00c8, 0x2011, 0x5e0e,
-+      0x080c, 0x704f, 0x002e, 0x001e, 0x2001, 0xc8e6, 0x2003, 0x0004,
-+      0x080c, 0x5c4d, 0x080c, 0x5f4d, 0x0148, 0x6804, 0xd0d4, 0x1130,
-+      0xd0dc, 0x1100, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x00ee, 0x00de,
-+      0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
-+      0x0140, 0x2071, 0xc600, 0x2001, 0xc8e5, 0x2003, 0x0000, 0x2001,
-+      0xc8d6, 0x2003, 0x0000, 0x708f, 0x0000, 0x60e3, 0x0000, 0x6887,
-+      0x0000, 0x2001, 0x0000, 0x080c, 0x2a1c, 0x6803, 0x0000, 0x6043,
-+      0x0090, 0x6043, 0x0010, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee,
-+      0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0xc8e5, 0x2004, 0xa086,
-+      0xaaaa, 0x000e, 0x0005, 0x0006, 0x2001, 0xc672, 0x2004, 0xa084,
-+      0x0030, 0xa086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0xc672,
-+      0x2004, 0xa084, 0x0030, 0xa086, 0x0030, 0x000e, 0x0005, 0x0006,
-+      0x2001, 0xc672, 0x2004, 0xa084, 0x0030, 0xa086, 0x0010, 0x000e,
-+      0x0005, 0x0006, 0x2001, 0xc672, 0x2004, 0xa084, 0x0030, 0xa086,
-+      0x0020, 0x000e, 0x0005, 0x2001, 0xc60c, 0x2004, 0xd0a4, 0x0170,
-+      0x080c, 0x2a3c, 0x0036, 0x0016, 0x2009, 0x0000, 0x2019, 0x0028,
-+      0x080c, 0x2e19, 0x001e, 0x003e, 0xa006, 0x0009, 0x0005, 0x00e6,
-+      0x2071, 0xc60c, 0x2e04, 0x0118, 0xa085, 0x0010, 0x0010, 0xa084,
-+      0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60f0, 0x0006,
-+      0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006,
-+      0x602f, 0x0100, 0x602f, 0x0000, 0x602f, 0x0040, 0x602f, 0x0000,
-+      0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee,
-+      0x000e, 0x60f2, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001,
-+      0x080c, 0x2a1c, 0x6800, 0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6803,
-+      0x00a0, 0x000e, 0x6052, 0x6050, 0x0005, 0x0156, 0x0016, 0x0026,
-+      0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140,
-+      0x2071, 0xc600, 0x6020, 0xa084, 0x0080, 0x0138, 0x2001, 0xc60c,
-+      0x200c, 0xc1bd, 0x2102, 0x0804, 0x6035, 0x2001, 0xc60c, 0x200c,
-+      0xc1bc, 0x2102, 0x6028, 0xa084, 0xe1ff, 0x602a, 0x6027, 0x0200,
-+      0x6803, 0x0090, 0x20a9, 0x0384, 0x6024, 0xd0cc, 0x1508, 0x1d04,
-+      0x5fe4, 0x2091, 0x6000, 0x1f04, 0x5fe4, 0x2011, 0x0003, 0x080c,
-+      0x8f27, 0x2011, 0x0002, 0x080c, 0x8f31, 0x080c, 0x8e07, 0x2019,
-+      0x0000, 0x080c, 0x8e92, 0x6803, 0x00a0, 0x2001, 0xc8e6, 0x2003,
-+      0x0001, 0x2001, 0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x0468,
-+      0x86ff, 0x1120, 0x080c, 0x1f06, 0x080c, 0x25fb, 0x60e3, 0x0000,
-+      0x2001, 0xc8d6, 0x2004, 0x080c, 0x2a1c, 0x60e2, 0x6803, 0x0080,
-+      0x20a9, 0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024,
-+      0xa10c, 0x0138, 0x1d04, 0x601a, 0x2091, 0x6000, 0x1f04, 0x601a,
-+      0x0820, 0x6028, 0xa085, 0x1e00, 0x602a, 0x70a4, 0xa005, 0x1118,
-+      0x6887, 0x0001, 0x0008, 0x6886, 0xa006, 0x00ee, 0x00de, 0x00ce,
-+      0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026,
-+      0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xc600,
-+      0x2069, 0x0140, 0x6020, 0xa084, 0x00c0, 0x0120, 0x6884, 0xa005,
-+      0x1904, 0x6091, 0x6803, 0x0088, 0x60e3, 0x0000, 0x6887, 0x0000,
-+      0x2001, 0x0000, 0x080c, 0x2a1c, 0x2069, 0x0200, 0x6804, 0xa005,
-+      0x1118, 0x6808, 0xa005, 0x01c0, 0x6028, 0xa084, 0xfbff, 0x602a,
-+      0x6027, 0x0400, 0x2069, 0xc90c, 0x7000, 0x206a, 0x708f, 0x0026,
-+      0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x6074, 0x2091, 0x6000,
-+      0x1f04, 0x6074, 0x0804, 0x60c2, 0x2069, 0x0140, 0x20a9, 0x0384,
-+      0x6027, 0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c, 0x0520,
-+      0xa084, 0x1a00, 0x1508, 0x1d04, 0x6080, 0x2091, 0x6000, 0x1f04,
-+      0x6080, 0x2011, 0x0003, 0x080c, 0x8f27, 0x2011, 0x0002, 0x080c,
-+      0x8f31, 0x080c, 0x8e07, 0x2019, 0x0000, 0x080c, 0x8e92, 0x6803,
-+      0x00a0, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600, 0x2003,
-+      0x0001, 0xa085, 0x0001, 0x00b0, 0x080c, 0x25fb, 0x6803, 0x0080,
-       0x2069, 0x0140, 0x60e3, 0x0000, 0x70a4, 0xa005, 0x1118, 0x6887,
-       0x0001, 0x0008, 0x6886, 0x2001, 0xc8d6, 0x2004, 0x080c, 0x2a1c,
--      0x60e2, 0x2001, 0xc60c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de,
--      0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016,
--      0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071,
--      0xc600, 0x7130, 0xd184, 0x1180, 0x2011, 0xc653, 0x2214, 0xd2ec,
--      0x0138, 0xc18d, 0x7132, 0x2011, 0xc653, 0x2214, 0xd2ac, 0x1120,
--      0x7030, 0xd08c, 0x0904, 0x61bb, 0x7130, 0xc185, 0x7132, 0x2011,
--      0xc653, 0x220c, 0xd1a4, 0x0530, 0x0016, 0x2019, 0x000e, 0x080c,
--      0xc100, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000, 0xa186, 0x007e,
--      0x01a0, 0xa186, 0x0080, 0x0188, 0x080c, 0x533d, 0x1170, 0x8127,
--      0xa006, 0x0016, 0x2009, 0x000e, 0x080c, 0xc183, 0x2009, 0x0001,
--      0x2011, 0x0100, 0x080c, 0x712e, 0x001e, 0x8108, 0x1f04, 0x6186,
--      0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0000, 0x2019,
--      0x0004, 0x080c, 0x2e19, 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f,
--      0x2009, 0x0000, 0x080c, 0x533d, 0x1110, 0x080c, 0x4f47, 0x8108,
--      0x1f04, 0x61b2, 0x015e, 0x080c, 0x1f06, 0x2011, 0x0003, 0x080c,
--      0x8f0e, 0x2011, 0x0002, 0x080c, 0x8f18, 0x080c, 0x8dee, 0x0036,
--      0x2019, 0x0000, 0x080c, 0x8e79, 0x003e, 0x60e3, 0x0000, 0x2001,
--      0xc600, 0x2003, 0x0001, 0x080c, 0x5e5a, 0x00ee, 0x00ce, 0x004e,
--      0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2071, 0xc702, 0x7003,
--      0x0000, 0x7007, 0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f,
--      0x0000, 0x7053, 0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083,
--      0x0000, 0x708b, 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x0005,
--      0x00e6, 0x2071, 0xc702, 0x6848, 0xa005, 0x1130, 0x7028, 0xc085,
--      0x702a, 0xa085, 0x0001, 0x0428, 0x6a50, 0x7236, 0x6b54, 0x733a,
--      0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, 0x702e,
--      0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, 0x8006,
--      0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272,
--      0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, 0x0000,
--      0xa006, 0x00ee, 0x0005, 0x2b78, 0x2071, 0xc702, 0x7004, 0x0043,
--      0x700c, 0x0002, 0x6237, 0x622e, 0x622e, 0x622e, 0x622e, 0x0005,
--      0x628d, 0x628e, 0x62c0, 0x62c1, 0x628b, 0x630f, 0x6314, 0x6345,
--      0x6346, 0x6361, 0x6362, 0x6363, 0x6364, 0x6365, 0x6366, 0x6431,
--      0x6458, 0x700c, 0x0002, 0x6250, 0x628b, 0x628b, 0x628c, 0x628c,
--      0x7830, 0x7930, 0xa106, 0x0120, 0x7830, 0x7930, 0xa106, 0x1510,
--      0x7030, 0xa10a, 0x01f8, 0x1210, 0x712c, 0xa10a, 0xa18a, 0x0002,
--      0x12d0, 0x080c, 0x15e5, 0x01b0, 0x2d00, 0x705a, 0x7063, 0x0040,
--      0x2001, 0x0003, 0x7057, 0x0000, 0x0126, 0x0006, 0x2091, 0x8000,
--      0x2009, 0xc959, 0x2104, 0xc085, 0x200a, 0x000e, 0x700e, 0x012e,
--      0x080c, 0x1669, 0x0005, 0x080c, 0x15e5, 0x0de0, 0x2d00, 0x705a,
--      0x080c, 0x15e5, 0x1108, 0x0c10, 0x2d00, 0x7086, 0x7063, 0x0080,
--      0x2001, 0x0004, 0x08f8, 0x0005, 0x0005, 0x0005, 0x700c, 0x0002,
--      0x6295, 0x6298, 0x62a6, 0x62bf, 0x62bf, 0x080c, 0x6249, 0x0005,
--      0x0126, 0x8001, 0x700e, 0x7058, 0x0006, 0x080c, 0x67d4, 0x0120,
--      0x2091, 0x8000, 0x080c, 0x6249, 0x00de, 0x0048, 0x0126, 0x8001,
--      0x700e, 0x080c, 0x67d4, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803,
--      0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x003a,
--      0x1218, 0x00db, 0x012e, 0x0005, 0x012e, 0x080c, 0x6367, 0x0005,
--      0x0005, 0x0005, 0x00e6, 0x2071, 0xc702, 0x700c, 0x0002, 0x62cc,
--      0x62cc, 0x62cc, 0x62ce, 0x62d1, 0x00ee, 0x0005, 0x700f, 0x0001,
--      0x0010, 0x700f, 0x0002, 0x00ee, 0x0005, 0x6367, 0x6367, 0x6383,
--      0x6367, 0x653e, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6383,
--      0x6580, 0x65c3, 0x660c, 0x6620, 0x6367, 0x6367, 0x639f, 0x6383,
--      0x63b3, 0x6367, 0x640e, 0x66cc, 0x66e7, 0x6367, 0x639f, 0x6367,
--      0x63b3, 0x6367, 0x6367, 0x6404, 0x66e7, 0x6367, 0x6367, 0x6367,
--      0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x63c8, 0x6367,
--      0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367,
--      0x6866, 0x6367, 0x67f2, 0x6367, 0x67f2, 0x6367, 0x63dd, 0x7020,
--      0x2068, 0x080c, 0x1619, 0x0005, 0x700c, 0x0002, 0x631b, 0x631e,
--      0x632c, 0x6344, 0x6344, 0x080c, 0x6249, 0x0005, 0x0126, 0x8001,
--      0x700e, 0x7058, 0x0006, 0x080c, 0x67d4, 0x0120, 0x2091, 0x8000,
--      0x080c, 0x6249, 0x00de, 0x0048, 0x0126, 0x8001, 0x700e, 0x080c,
--      0x67d4, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807,
--      0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, 0x1218, 0x003b,
--      0x012e, 0x0005, 0x012e, 0x0419, 0x0005, 0x0005, 0x0005, 0x6367,
--      0x6383, 0x652a, 0x6367, 0x6383, 0x6367, 0x6383, 0x6383, 0x6367,
--      0x6383, 0x652a, 0x6383, 0x6383, 0x6383, 0x6383, 0x6383, 0x6367,
--      0x6383, 0x652a, 0x6367, 0x6367, 0x6383, 0x6367, 0x6367, 0x6367,
--      0x6383, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x7007,
--      0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x0126, 0x2091,
--      0x8000, 0x080c, 0x580a, 0x012e, 0x0005, 0x7007, 0x0001, 0x6838,
--      0xa084, 0x00ff, 0xc0e5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x580a, 0x012e, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff,
--      0xc0ed, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x580a, 0x012e,
--      0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a,
--      0x0126, 0x2091, 0x8000, 0x080c, 0x580a, 0x012e, 0x0005, 0x6834,
--      0x8007, 0xa084, 0x00ff, 0x0988, 0x8001, 0x1120, 0x7007, 0x0001,
--      0x0804, 0x64c1, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a,
--      0x704b, 0x64c1, 0x0005, 0x6834, 0x8007, 0xa084, 0x00ff, 0x0904,
--      0x6375, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x64de, 0x7007,
--      0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x64de, 0x0005,
--      0x6834, 0x8007, 0xa084, 0x00ff, 0x0904, 0x6375, 0x8001, 0x1120,
--      0x7007, 0x0001, 0x0804, 0x6507, 0x7007, 0x0006, 0x7012, 0x2d00,
--      0x7016, 0x701a, 0x704b, 0x6507, 0x0005, 0x6834, 0x8007, 0xa084,
--      0x00ff, 0xa086, 0x0001, 0x1904, 0x6375, 0x7007, 0x0001, 0x2009,
--      0xc631, 0x210c, 0x81ff, 0x11a8, 0x6838, 0xa084, 0x00ff, 0x683a,
--      0x6853, 0x0000, 0x080c, 0x5116, 0x1108, 0x0005, 0x0126, 0x2091,
--      0x8000, 0x6837, 0x0139, 0x684a, 0x6952, 0x080c, 0x580a, 0x012e,
--      0x0ca0, 0x2001, 0x0028, 0x0c90, 0x684c, 0xa084, 0x00c0, 0xa086,
--      0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x66ff, 0x2d00, 0x7016,
--      0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098, 0x20a1, 0xc72d,
--      0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x1a04, 0x6391, 0x6a84,
--      0xa28a, 0x0002, 0x1a04, 0x6391, 0x82ff, 0x1138, 0x6888, 0x698c,
--      0xa105, 0x0118, 0x2001, 0x6494, 0x0018, 0xa280, 0x648a, 0x2005,
--      0x70c6, 0x7010, 0xa015, 0x0904, 0x6476, 0x080c, 0x15e5, 0x1118,
--      0x7007, 0x000f, 0x0005, 0x2d00, 0x7022, 0x70c4, 0x2060, 0x2c05,
--      0x6836, 0xe004, 0xad00, 0x7096, 0xe008, 0xa20a, 0x1210, 0xa00e,
--      0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0xa296, 0x0004, 0x0108,
--      0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x080c, 0x164d,
--      0x7090, 0xa08e, 0x0100, 0x0170, 0xa086, 0x0200, 0x0118, 0x7007,
--      0x0010, 0x0005, 0x7020, 0x2068, 0x080c, 0x1619, 0x7014, 0x2068,
--      0x0804, 0x6391, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807, 0x0000,
--      0x2d08, 0x2068, 0x6906, 0x711a, 0x0804, 0x6431, 0x7014, 0x2068,
--      0x7007, 0x0001, 0x6884, 0xa005, 0x1128, 0x6888, 0x698c, 0xa105,
--      0x0108, 0x00b1, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x0904,
--      0x66ff, 0x04b8, 0x648c, 0x6490, 0x0002, 0x0011, 0x0007, 0x0004,
--      0x000a, 0x000f, 0x0005, 0x0006, 0x000a, 0x0011, 0x0005, 0x0004,
--      0x00f6, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x6f88, 0x6e8c, 0x6804,
--      0x2060, 0xacf0, 0x0021, 0xacf8, 0x0027, 0x2009, 0x0005, 0x700c,
--      0x7816, 0x7008, 0x7812, 0x7004, 0x7806, 0x7000, 0x7802, 0x7e0e,
--      0x7f0a, 0x8109, 0x0128, 0xaef2, 0x0004, 0xaffa, 0x0006, 0x0c78,
--      0x6004, 0xa065, 0x1d30, 0x006e, 0x007e, 0x00ce, 0x00ee, 0x00fe,
--      0x0005, 0x2009, 0xc631, 0x210c, 0x81ff, 0x1198, 0x6838, 0xa084,
--      0x00ff, 0x683a, 0x080c, 0x4fa6, 0x1108, 0x0005, 0x080c, 0x592e,
--      0x0126, 0x2091, 0x8000, 0x080c, 0xaefc, 0x080c, 0x580a, 0x012e,
--      0x0ca0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c80, 0x2009, 0xc631,
--      0x210c, 0x81ff, 0x11d8, 0x6858, 0xa005, 0x01d8, 0x2001, 0xc756,
--      0x2004, 0xa086, 0x0000, 0x01c0, 0x6838, 0xa084, 0x00ff, 0x683a,
--      0x6853, 0x0000, 0x080c, 0x5068, 0x1108, 0x0005, 0x684a, 0x0126,
--      0x2091, 0x8000, 0x080c, 0x580a, 0x012e, 0x0cb8, 0x2001, 0x0028,
--      0x0ca8, 0x2001, 0x0000, 0x0c90, 0x2001, 0x002c, 0x0c78, 0x2009,
--      0xc631, 0x210c, 0x81ff, 0x11b0, 0x6858, 0xa005, 0x01c0, 0x6838,
--      0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x080c, 0x50ba, 0x1108,
--      0x0005, 0x0126, 0x2091, 0x8000, 0x684a, 0x6952, 0x080c, 0x580a,
--      0x012e, 0x0cb0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c90, 0x2001,
--      0x0000, 0x0c78, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, 0x711a,
--      0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0006, 0x0030, 0x7014,
--      0x2068, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x7007, 0x0001,
--      0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848, 0xa084, 0x00ff, 0x20a9,
--      0x0001, 0xa096, 0x0001, 0x01b0, 0x2009, 0x0000, 0x20a9, 0x00ff,
--      0xa096, 0x0002, 0x0178, 0xa005, 0x11f0, 0x6944, 0x810f, 0xa18c,
--      0x00ff, 0x080c, 0x533d, 0x11b8, 0x0066, 0x6e50, 0x080c, 0x543c,
--      0x006e, 0x0088, 0x0046, 0x2011, 0xc60c, 0x2224, 0xc484, 0x2412,
--      0x004e, 0x00c6, 0x080c, 0x533d, 0x1110, 0x080c, 0x559d, 0x8108,
--      0x1f04, 0x656a, 0x00ce, 0x684c, 0xd084, 0x1118, 0x080c, 0x1619,
--      0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x580a, 0x012e, 0x0005,
--      0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xc653, 0x2004,
--      0xd0a4, 0x0580, 0x2061, 0xc9bc, 0x6100, 0xd184, 0x0178, 0x6858,
--      0xa084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0xa005,
--      0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001,
--      0x6860, 0xa005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0x6858,
--      0xa084, 0x00ff, 0x0178, 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff,
--      0x0148, 0x600a, 0x6858, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e,
--      0x0804, 0x67c3, 0x012e, 0x0804, 0x67bd, 0x012e, 0x0804, 0x67b7,
--      0x012e, 0x0804, 0x67ba, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001,
--      0x2001, 0xc653, 0x2004, 0xd0a4, 0x05e0, 0x2061, 0xc9bc, 0x6000,
--      0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0x6c48, 0xa484,
--      0x0003, 0x0170, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x1120, 0x2100,
--      0xa210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0xa212, 0x02f0,
--      0xa484, 0x000c, 0x0188, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082,
--      0x0004, 0x1120, 0x2100, 0xa318, 0x0288, 0x0030, 0xa082, 0x0004,
--      0x1168, 0x2100, 0xa31a, 0x0250, 0x6860, 0xa005, 0x0110, 0x8000,
--      0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x67c3, 0x012e, 0x0804,
--      0x67c0, 0x012e, 0x0804, 0x67bd, 0x0126, 0x2091, 0x8000, 0x7007,
--      0x0001, 0x2061, 0xc9bc, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318,
--      0x0220, 0x630a, 0x012e, 0x0804, 0x67d1, 0x012e, 0x0804, 0x67c0,
--      0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac,
--      0x0148, 0x00c6, 0x2061, 0xc9bc, 0x6000, 0xa084, 0xfcff, 0x6002,
--      0x00ce, 0x0448, 0x6858, 0xa005, 0x05d0, 0x685c, 0xa065, 0x0598,
--      0x2001, 0xc631, 0x2004, 0xa005, 0x0118, 0x080c, 0xae4d, 0x0068,
--      0x6013, 0x0400, 0x6057, 0x0000, 0x694c, 0xd1a4, 0x0110, 0x6950,
--      0x6156, 0x2009, 0x0041, 0x080c, 0x960c, 0x6958, 0xa18c, 0xff00,
--      0xa186, 0x2000, 0x1140, 0x0026, 0x2009, 0x0000, 0x2011, 0xfdff,
--      0x080c, 0x712e, 0x002e, 0x684c, 0xd0c4, 0x0148, 0x2061, 0xc9bc,
--      0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce,
--      0x012e, 0x0804, 0x67c3, 0x00ce, 0x012e, 0x0804, 0x67bd, 0x6954,
--      0xa186, 0x002e, 0x0d40, 0xa186, 0x002d, 0x0d28, 0xa186, 0x0045,
--      0x0528, 0xa186, 0x002a, 0x1130, 0x2001, 0xc60c, 0x200c, 0xc194,
--      0x2102, 0x08c8, 0xa186, 0x0020, 0x0170, 0xa186, 0x0029, 0x1d18,
--      0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x533d, 0x1960, 0x6000,
--      0xc0e4, 0x6002, 0x0840, 0x685c, 0xa065, 0x09a8, 0x6007, 0x0024,
--      0x2001, 0xc8fd, 0x2004, 0x6016, 0x0804, 0x665b, 0x685c, 0xa065,
--      0x0950, 0x00e6, 0x6860, 0xa075, 0x2001, 0xc631, 0x2004, 0xa005,
--      0x0150, 0x080c, 0xae4d, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xae4d,
--      0x00ee, 0x0804, 0x665b, 0x6020, 0xc0dc, 0xc0d5, 0x6022, 0x2e60,
--      0x6007, 0x003a, 0x6870, 0xa005, 0x0130, 0x6007, 0x003b, 0x6874,
--      0x602a, 0x6878, 0x6012, 0x6003, 0x0001, 0x080c, 0x7999, 0x080c,
--      0x7e94, 0x00ee, 0x0804, 0x665b, 0x2061, 0xc9bc, 0x6000, 0xd084,
--      0x0190, 0xd08c, 0x1904, 0x67d1, 0x0126, 0x2091, 0x8000, 0x6204,
--      0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x67d1, 0x012e, 0x6853,
--      0x0016, 0x0804, 0x67ca, 0x6853, 0x0007, 0x0804, 0x67ca, 0x6834,
--      0x8007, 0xa084, 0x00ff, 0x1118, 0x080c, 0x6375, 0x0078, 0x2030,
--      0x8001, 0x1120, 0x7007, 0x0001, 0x0051, 0x0040, 0x7007, 0x0006,
--      0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x66ff, 0x0005, 0x00e6,
--      0x0126, 0x2091, 0x8000, 0xa03e, 0x2009, 0xc631, 0x210c, 0x81ff,
--      0x1904, 0x677d, 0x2009, 0xc60c, 0x210c, 0xd194, 0x1904, 0x67a7,
--      0x6848, 0x2070, 0xae82, 0xce00, 0x0a04, 0x6771, 0x2001, 0xc617,
--      0x2004, 0xae02, 0x1a04, 0x6771, 0x711c, 0xa186, 0x0006, 0x1904,
--      0x6760, 0x7018, 0xa005, 0x0904, 0x677d, 0x2004, 0xd0e4, 0x1904,
--      0x67a2, 0x2061, 0xc9bc, 0x6100, 0xa184, 0x0301, 0xa086, 0x0001,
--      0x1550, 0x7020, 0xd0dc, 0x1904, 0x67aa, 0x6853, 0x0000, 0x6803,
--      0x0000, 0x2d08, 0x7010, 0xa005, 0x1158, 0x7112, 0x684c, 0xd0f4,
--      0x1904, 0x67ad, 0x2e60, 0x080c, 0x708a, 0x012e, 0x00ee, 0x0005,
--      0x2068, 0x6800, 0xa005, 0x1de0, 0x6902, 0x2168, 0x684c, 0xd0f4,
--      0x1904, 0x67ad, 0x012e, 0x00ee, 0x0005, 0x012e, 0x00ee, 0x6853,
--      0x0006, 0x0804, 0x67ca, 0xd184, 0x0dc0, 0xd1c4, 0x11a8, 0x00b8,
--      0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x533d, 0x15d8, 0x6000,
--      0xd0e4, 0x15c0, 0x711c, 0xa186, 0x0007, 0x1118, 0x6853, 0x0002,
--      0x0498, 0x6853, 0x0008, 0x0480, 0x6853, 0x000e, 0x0468, 0x6853,
--      0x0017, 0x0450, 0x6853, 0x0035, 0x0438, 0x2001, 0xc672, 0x2004,
--      0xd0fc, 0x01e8, 0x6848, 0x2070, 0xae82, 0xce00, 0x02c0, 0x605c,
--      0xae02, 0x12a8, 0x711c, 0xa186, 0x0006, 0x1188, 0x7018, 0xa005,
--      0x0170, 0x2004, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0xa086,
--      0x0007, 0x1904, 0x670a, 0x7003, 0x0002, 0x0804, 0x670a, 0x6853,
--      0x0028, 0x0010, 0x6853, 0x0029, 0x012e, 0x00ee, 0x0418, 0x6853,
--      0x002a, 0x0cd0, 0x6853, 0x0045, 0x0cb8, 0x2e60, 0x2019, 0x0002,
--      0x6017, 0x0014, 0x080c, 0xbd48, 0x012e, 0x00ee, 0x0005, 0x2009,
--      0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028,
--      0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00,
--      0xa105, 0x6856, 0x0126, 0x2091, 0x8000, 0x080c, 0x580a, 0x012e,
--      0x0005, 0x080c, 0x1619, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102,
--      0x0230, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0058, 0x7070,
--      0xa080, 0x0040, 0x7072, 0x1230, 0x7074, 0xa081, 0x0000, 0x7076,
--      0xa085, 0x0001, 0x7932, 0x7132, 0x0005, 0x00d6, 0x080c, 0x7081,
--      0x00de, 0x0005, 0x2001, 0xc756, 0x2004, 0xa086, 0x0000, 0x0904,
--      0x684d, 0x080c, 0x768f, 0x0904, 0x6850, 0x6868, 0xa084, 0x0007,
--      0x0904, 0x6844, 0x080c, 0x9586, 0x0904, 0x6847, 0x2d00, 0x6012,
--      0x6834, 0xa084, 0x00ff, 0xa086, 0x0035, 0x1198, 0x2001, 0xc8e5,
--      0x2004, 0xa086, 0xaaaa, 0x0130, 0x2001, 0xc635, 0x2004, 0xa084,
--      0x0028, 0x05c8, 0x6008, 0xc0fd, 0x600a, 0x2001, 0xc8d3, 0x2004,
--      0x0098, 0x6870, 0xa084, 0x00ff, 0x696c, 0xa18c, 0xff00, 0xa105,
--      0x696c, 0xa18c, 0x00ff, 0x080c, 0x29c7, 0x11e0, 0x00c6, 0x080c,
--      0x533d, 0x2c00, 0x00ce, 0x11b0, 0x601a, 0x601f, 0x0001, 0x2009,
--      0x0040, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0035, 0x0110, 0x2009,
--      0x0041, 0x080c, 0x960c, 0x0005, 0x684b, 0x0101, 0x0078, 0x684b,
--      0x002c, 0x0060, 0x684b, 0x0028, 0x0080, 0x684b, 0x0104, 0x0030,
--      0x684b, 0x0105, 0x0018, 0x684b, 0x0106, 0x0038, 0x0126, 0x2091,
--      0x8000, 0x080c, 0x580a, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
--      0x080c, 0x580a, 0x012e, 0x080c, 0x95dc, 0x0005, 0x00d6, 0x00c6,
--      0x0036, 0x0026, 0x0016, 0x7007, 0x0001, 0x6a44, 0xa282, 0x0004,
--      0x1a04, 0x68b1, 0xd284, 0x0170, 0x6a4c, 0xa290, 0xc77b, 0x2204,
--      0xa065, 0x6004, 0x05e0, 0x8007, 0xa084, 0x00ff, 0xa084, 0x0006,
--      0x1108, 0x04a8, 0x2c10, 0x080c, 0x9586, 0x1118, 0x080c, 0xaf06,
--      0x05a0, 0x621a, 0x6844, 0x0002, 0x6890, 0x6895, 0x6898, 0x689e,
--      0x2019, 0x0002, 0x080c, 0xc100, 0x0060, 0x080c, 0xc097, 0x0048,
--      0x2019, 0x0002, 0x6950, 0x080c, 0xc0b2, 0x0018, 0x6950, 0x080c,
--      0xc097, 0x080c, 0x95dc, 0x6857, 0x0000, 0x0126, 0x2091, 0x8000,
--      0x080c, 0x580a, 0x012e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de,
--      0x0005, 0x6857, 0x0006, 0x0c88, 0x6857, 0x0002, 0x0c70, 0x6857,
--      0x0005, 0x0c58, 0x6857, 0x0004, 0x0c40, 0x6857, 0x0007, 0x0c28,
--      0x00d6, 0x2011, 0x0004, 0x2204, 0xa085, 0x8002, 0x2012, 0x00de,
--      0x0005, 0x20e1, 0x0002, 0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084,
--      0x7000, 0x0118, 0xa086, 0x1000, 0x15e0, 0x20e1, 0x0000, 0x3d00,
--      0xa094, 0xff00, 0x8217, 0xa084, 0xf000, 0xa086, 0x3000, 0x1160,
--      0xa184, 0xff00, 0x8007, 0xa086, 0x0008, 0x1558, 0x080c, 0x2f69,
--      0x1540, 0x080c, 0x6b32, 0x0400, 0x20e1, 0x0004, 0x3d60, 0xd1bc,
--      0x1170, 0x2100, 0xa084, 0xff00, 0xa086, 0x0500, 0x1138, 0x0026,
--      0x2c10, 0x080c, 0x6d90, 0x002e, 0x01a0, 0x0070, 0x3e60, 0xac84,
--      0x0007, 0x1178, 0xac82, 0xce00, 0x0260, 0x685c, 0xac02, 0x1248,
--      0x2009, 0x0047, 0x080c, 0x960c, 0x7a1c, 0xd284, 0x1904, 0x68c9,
--      0x0005, 0xa016, 0x080c, 0x1870, 0x0cb8, 0x0cd8, 0x781c, 0xd08c,
--      0x0500, 0x0156, 0x0136, 0x0146, 0x20e1, 0x3000, 0x3d20, 0x3e28,
--      0xa584, 0x0076, 0x1538, 0xa484, 0x7000, 0xa086, 0x1000, 0x11a8,
--      0x080c, 0x6991, 0x01f8, 0x20e1, 0x3000, 0x7828, 0x7828, 0x080c,
--      0x69ad, 0x014e, 0x013e, 0x015e, 0x2009, 0xc92f, 0x2104, 0xa005,
--      0x1108, 0x0005, 0x080c, 0x7e94, 0x0ce0, 0xa484, 0x7000, 0x1548,
--      0x080c, 0x6991, 0x01d8, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100,
--      0x0d10, 0x00a0, 0xd5a4, 0x0178, 0x0056, 0x0046, 0x080c, 0x1f2d,
--      0x080c, 0x25fb, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,
--      0x004e, 0x005e, 0x0048, 0x04a9, 0x6887, 0x0000, 0x080c, 0xc529,
--      0x20e1, 0x3000, 0x7828, 0x7828, 0x00b9, 0x014e, 0x013e, 0x015e,
--      0x0880, 0x0439, 0x1130, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100,
--      0x1d68, 0x080c, 0xc529, 0x20e1, 0x3000, 0x7828, 0x7828, 0x0056,
--      0x080c, 0x6e1f, 0x005e, 0x0c40, 0x2001, 0xc60e, 0x2004, 0xd08c,
--      0x0178, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1148, 0x0026,
--      0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x407d, 0x003e, 0x002e,
--      0x0005, 0xa484, 0x01ff, 0x6886, 0xa005, 0x0160, 0xa080, 0x001f,
--      0xa084, 0x03f8, 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a,
--      0x53a5, 0x0005, 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099,
--      0x020a, 0x53a5, 0xa085, 0x0001, 0x0ca0, 0x7000, 0xa084, 0xff00,
--      0xa08c, 0xf000, 0x8007, 0xa196, 0x0000, 0x1118, 0x0804, 0x6c37,
--      0x0005, 0xa196, 0x2000, 0x1148, 0x6900, 0xa18e, 0x0001, 0x1118,
--      0x080c, 0x47cb, 0x0ca8, 0x0039, 0x0c98, 0xa196, 0x8000, 0x1d80,
--      0x080c, 0x6ce3, 0x0c68, 0x00c6, 0x6a84, 0x82ff, 0x0904, 0x6b2c,
--      0x7110, 0xa18c, 0xff00, 0x810f, 0xa196, 0x0001, 0x0120, 0xa196,
--      0x0023, 0x1904, 0x6b2c, 0xa08e, 0x0023, 0x1570, 0x080c, 0x6d7e,
--      0x0904, 0x6b2c, 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x1150,
--      0x7034, 0xa005, 0x1904, 0x6b2c, 0x2009, 0x0015, 0x080c, 0x960c,
--      0x0804, 0x6b2c, 0xa08e, 0x0214, 0x0118, 0xa08e, 0x0210, 0x1130,
--      0x2009, 0x0015, 0x080c, 0x960c, 0x0804, 0x6b2c, 0xa08e, 0x0100,
--      0x1904, 0x6b2c, 0x7034, 0xa005, 0x1904, 0x6b2c, 0x2009, 0x0016,
--      0x080c, 0x960c, 0x0804, 0x6b2c, 0xa08e, 0x0022, 0x1904, 0x6b2c,
--      0x7030, 0xa08e, 0x0300, 0x1580, 0x68d4, 0xd0a4, 0x0528, 0xc0b5,
--      0x68d6, 0x7100, 0xa18c, 0x00ff, 0x6972, 0x7004, 0x6876, 0x00f6,
--      0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0xa084, 0x00ff, 0x0016,
--      0x2008, 0x080c, 0x29f1, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe,
--      0x080c, 0x29c7, 0x6952, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086,
--      0x2071, 0xc600, 0x70a6, 0x00ee, 0x7034, 0xa005, 0x1904, 0x6b2c,
--      0x2009, 0x0017, 0x0804, 0x6af2, 0xa08e, 0x0400, 0x1158, 0x7034,
--      0xa005, 0x1904, 0x6b2c, 0x68d4, 0xc0a5, 0x68d6, 0x2009, 0x0030,
--      0x0804, 0x6af2, 0xa08e, 0x0500, 0x1140, 0x7034, 0xa005, 0x1904,
--      0x6b2c, 0x2009, 0x0018, 0x0804, 0x6af2, 0xa08e, 0x2010, 0x1120,
--      0x2009, 0x0019, 0x0804, 0x6af2, 0xa08e, 0x2110, 0x1120, 0x2009,
--      0x001a, 0x0804, 0x6af2, 0xa08e, 0x5200, 0x1140, 0x7034, 0xa005,
--      0x1904, 0x6b2c, 0x2009, 0x001b, 0x0804, 0x6af2, 0xa08e, 0x5000,
--      0x1140, 0x7034, 0xa005, 0x1904, 0x6b2c, 0x2009, 0x001c, 0x0804,
--      0x6af2, 0xa08e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804, 0x6af2,
--      0xa08e, 0x1200, 0x1140, 0x7034, 0xa005, 0x1904, 0x6b2c, 0x2009,
--      0x0024, 0x0804, 0x6af2, 0xa08c, 0xff00, 0xa18e, 0x2400, 0x1120,
--      0x2009, 0x002d, 0x0804, 0x6af2, 0xa08c, 0xff00, 0xa18e, 0x5300,
--      0x1120, 0x2009, 0x002a, 0x0804, 0x6af2, 0xa08e, 0x0f00, 0x1120,
--      0x2009, 0x0020, 0x0804, 0x6af2, 0xa08e, 0x5300, 0x1108, 0x00d8,
--      0xa08e, 0x6104, 0x11c0, 0x2011, 0xcc8d, 0x8208, 0x2204, 0xa082,
--      0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011, 0x8015, 0x211c, 0x8108,
--      0x0046, 0x2124, 0x080c, 0x407d, 0x004e, 0x8108, 0x1f04, 0x6abc,
--      0x2009, 0x0023, 0x0438, 0xa08e, 0x6000, 0x1118, 0x2009, 0x003f,
--      0x0408, 0xa08e, 0x5400, 0x1158, 0x080c, 0x6e79, 0x1904, 0x6b2c,
--      0x2009, 0x0046, 0x0016, 0x2001, 0xc8d3, 0x2064, 0x0498, 0xa08e,
--      0x5500, 0x1140, 0x080c, 0x6eac, 0x2009, 0x0041, 0x0158, 0x2009,
--      0x0042, 0x0040, 0xa08e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0010,
--      0x2009, 0x001d, 0x0016, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c,
--      0x080c, 0x29c7, 0x1598, 0x080c, 0x52e1, 0x1580, 0x6612, 0x6516,
--      0x86ff, 0x01e8, 0x001e, 0x0016, 0xa186, 0x0017, 0x1158, 0x6870,
--      0xa606, 0x11a8, 0x6874, 0xa506, 0xa084, 0xff00, 0x1180, 0x6000,
--      0xc0f5, 0x6002, 0xa186, 0x0046, 0x1150, 0x6870, 0xa606, 0x1138,
--      0x6874, 0xa506, 0xa084, 0xff00, 0x1110, 0x001e, 0x0068, 0x00c6,
--      0x080c, 0x9586, 0x0168, 0x001e, 0x611a, 0x601f, 0x0004, 0x7120,
--      0x610a, 0x001e, 0x080c, 0x960c, 0x00ce, 0x0005, 0x001e, 0x0ce0,
--      0x00ce, 0x0ce0, 0x00c6, 0x0046, 0x080c, 0x6b86, 0x1904, 0x6b83,
--      0xa28e, 0x0033, 0x11e8, 0x080c, 0x6d7e, 0x0904, 0x6b83, 0x7124,
--      0x610a, 0x7030, 0xa08e, 0x0200, 0x1140, 0x7034, 0xa005, 0x15d8,
--      0x2009, 0x0015, 0x080c, 0x960c, 0x04b0, 0xa08e, 0x0100, 0x1598,
--      0x7034, 0xa005, 0x1580, 0x2009, 0x0016, 0x080c, 0x960c, 0x0458,
--      0xa28e, 0x0032, 0x1540, 0x7030, 0xa08e, 0x1400, 0x1520, 0x2009,
--      0x0038, 0x0016, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c, 0x080c,
--      0x29c7, 0x11c0, 0x080c, 0x52e1, 0x11a8, 0x6612, 0x6516, 0x00c6,
--      0x080c, 0x9586, 0x0170, 0x001e, 0x611a, 0x080c, 0xb057, 0x601f,
--      0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x960c, 0x080c, 0x7e94,
--      0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x0005, 0x00f6, 0x00d6,
--      0x0026, 0x0016, 0x0136, 0x0146, 0x0156, 0x3c00, 0x0006, 0x2079,
--      0x0030, 0x2069, 0x0200, 0x080c, 0x1fec, 0x1590, 0x080c, 0x1e97,
--      0x05e0, 0x04f1, 0x1130, 0x7908, 0xa18c, 0x1fff, 0xa182, 0x0011,
--      0x1688, 0x20a9, 0x000c, 0x20e1, 0x0000, 0x2ea0, 0x2099, 0x020a,
--      0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, 0x7a0c, 0x7808,
--      0xa080, 0x0007, 0xa084, 0x1ff8, 0x0419, 0x1120, 0xa08a, 0x0140,
--      0x1a0c, 0x1519, 0x80ac, 0x20e1, 0x6000, 0x2099, 0x020a, 0x53a5,
--      0x20e1, 0x7000, 0x6828, 0x6828, 0x7803, 0x0004, 0xa294, 0x0070,
--      0x000e, 0x20e0, 0x015e, 0x014e, 0x013e, 0x001e, 0x002e, 0x00de,
--      0x00fe, 0x0005, 0xa016, 0x080c, 0x1870, 0xa085, 0x0001, 0x0c80,
--      0x0006, 0x2001, 0x0111, 0x2004, 0xa084, 0x0003, 0x000e, 0x0005,
--      0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0xa696, 0x00ff, 0x1198,
--      0xa596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804, 0x6c32, 0xa596,
--      0xfffe, 0x1118, 0x2009, 0x007e, 0x04e8, 0xa596, 0xfffc, 0x1118,
--      0x2009, 0x0080, 0x04b8, 0x2011, 0x0000, 0x2019, 0xc635, 0x231c,
--      0xd3ac, 0x0138, 0x2021, 0x0000, 0x20a9, 0x00ff, 0x2071, 0xc77b,
--      0x0030, 0x2021, 0x0081, 0x20a9, 0x007e, 0x2071, 0xc7fc, 0x2e1c,
--      0x83ff, 0x1128, 0x82ff, 0x1198, 0x2410, 0xc2fd, 0x0080, 0x2368,
--      0x6f10, 0x0006, 0x2100, 0xa706, 0x000e, 0x6b14, 0x1120, 0xa346,
--      0x1110, 0x2408, 0x0078, 0x87ff, 0x1110, 0x83ff, 0x0d58, 0x8420,
--      0x8e70, 0x1f04, 0x6c0f, 0x82ff, 0x1118, 0xa085, 0x0001, 0x0018,
--      0xc2fc, 0x2208, 0xa006, 0x00de, 0x00ee, 0x004e, 0x0005, 0xa084,
--      0x0007, 0x000a, 0x0005, 0x6c43, 0x6c43, 0x6c43, 0x6e0c, 0x6c43,
--      0x6c44, 0x6c59, 0x6cce, 0x0005, 0x7110, 0xd1bc, 0x0188, 0x7120,
--      0x2160, 0xac8c, 0x0007, 0x1160, 0xac8a, 0xce00, 0x0248, 0x685c,
--      0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0x960c,
--      0x0005, 0x00c6, 0xa484, 0x01ff, 0x0904, 0x6cac, 0x7110, 0xd1bc,
--      0x1904, 0x6cac, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c, 0x080c,
--      0x29c7, 0x1904, 0x6cac, 0x080c, 0x52e1, 0x15f0, 0x6612, 0x6516,
--      0x6000, 0xd0ec, 0x15c8, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286,
--      0x0006, 0x0148, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006, 0x11a0,
--      0xa295, 0x0600, 0x6206, 0x00c6, 0x080c, 0x9586, 0x001e, 0x0530,
--      0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x7130, 0x6152, 0x2009,
--      0x0044, 0x080c, 0x960c, 0x00c0, 0x00c6, 0x080c, 0x9586, 0x001e,
--      0x0198, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004,
--      0x1118, 0x6007, 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001,
--      0x080c, 0x79df, 0x080c, 0x7e94, 0x00ce, 0x0005, 0x2001, 0xc60d,
--      0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x407d, 0x00c6,
--      0x080c, 0xaf06, 0x001e, 0x0d80, 0x611a, 0x601f, 0x0006, 0x7120,
--      0x610a, 0x7130, 0x6152, 0x6013, 0x0300, 0x6003, 0x0001, 0x6007,
--      0x0041, 0x080c, 0x7999, 0x080c, 0x7e94, 0x08f0, 0x7110, 0xd1bc,
--      0x0188, 0x7020, 0x2060, 0xac84, 0x0007, 0x1160, 0xac82, 0xce00,
--      0x0248, 0x685c, 0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0045,
--      0x080c, 0x960c, 0x0005, 0x0006, 0x080c, 0x2f69, 0x000e, 0x1168,
--      0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x1130, 0xa084,
--      0x000f, 0xa08a, 0x0006, 0x1208, 0x000b, 0x0005, 0x6cfc, 0x6cfd,
--      0x6cfc, 0x6cfc, 0x6d66, 0x6d72, 0x0005, 0x7110, 0xd1bc, 0x0120,
--      0x702c, 0xd084, 0x0904, 0x6d65, 0x700c, 0x7108, 0x080c, 0x29c7,
--      0x1904, 0x6d65, 0x080c, 0x52e1, 0x1904, 0x6d65, 0x6612, 0x6516,
--      0x6204, 0x7110, 0xd1bc, 0x01f8, 0xa28c, 0x00ff, 0xa186, 0x0004,
--      0x0118, 0xa186, 0x0006, 0x15c8, 0x00c6, 0x080c, 0x6d7e, 0x00ce,
--      0x0904, 0x6d65, 0x00c6, 0x080c, 0x9586, 0x001e, 0x05f0, 0x611a,
--      0x080c, 0xb057, 0x601f, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088,
--      0x080c, 0x960c, 0x0490, 0xa28c, 0x00ff, 0xa186, 0x0006, 0x0160,
--      0xa186, 0x0004, 0x0148, 0xa294, 0xff00, 0x8217, 0xa286, 0x0004,
--      0x0118, 0xa286, 0x0006, 0x1188, 0x00c6, 0x080c, 0x9586, 0x001e,
--      0x01e0, 0x611a, 0x080c, 0xb057, 0x601f, 0x0005, 0x7120, 0x610a,
--      0x2009, 0x0088, 0x080c, 0x960c, 0x0080, 0x00c6, 0x080c, 0x9586,
--      0x001e, 0x0158, 0x611a, 0x080c, 0xb057, 0x601f, 0x0004, 0x7120,
--      0x610a, 0x2009, 0x0001, 0x080c, 0x960c, 0x0005, 0x7110, 0xd1bc,
--      0x0140, 0x00a1, 0x0130, 0x7124, 0x610a, 0x2009, 0x0089, 0x080c,
--      0x960c, 0x0005, 0x7110, 0xd1bc, 0x0140, 0x0041, 0x0130, 0x7124,
--      0x610a, 0x2009, 0x008a, 0x080c, 0x960c, 0x0005, 0x7020, 0x2060,
--      0xac84, 0x0007, 0x1158, 0xac82, 0xce00, 0x0240, 0x2001, 0xc617,
--      0x2004, 0xac02, 0x1218, 0xa085, 0x0001, 0x0005, 0xa006, 0x0ce8,
--      0x00c6, 0x00d6, 0x00e6, 0x080c, 0x2f69, 0x1904, 0x6e07, 0x2001,
--      0xc756, 0x2004, 0xa086, 0x0000, 0x0904, 0x6e07, 0x20e1, 0x0000,
--      0x3d08, 0xa18c, 0x00ff, 0xa18e, 0x00ff, 0x1500, 0x3e00, 0xa086,
--      0xffff, 0x11e0, 0x2001, 0xc8d3, 0x2064, 0x2009, 0x00ff, 0x0006,
--      0x0016, 0x2001, 0xc61d, 0x2004, 0x20e1, 0x0001, 0x3e08, 0xa106,
--      0x1130, 0x2001, 0xc61c, 0x2004, 0x3d08, 0xa106, 0x0118, 0x001e,
--      0x000e, 0x00a8, 0x001e, 0x000e, 0x0804, 0x6e07, 0x20e1, 0x0001,
--      0x3d08, 0x3e00, 0x0156, 0x080c, 0x29c7, 0x015e, 0x15c0, 0x080c,
--      0x533d, 0x0128, 0x2001, 0xc8d3, 0x2064, 0x2009, 0x00ff, 0x2138,
--      0x873f, 0x2c00, 0x2070, 0x20e1, 0x0003, 0x3d18, 0x831f, 0xa39c,
--      0x00ff, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0xa086, 0x1000,
--      0x0120, 0x080c, 0x75ea, 0x11d8, 0x0080, 0x080c, 0x9586, 0x01b8,
--      0x20e1, 0x0002, 0x3e08, 0xd19c, 0x0118, 0x6124, 0xc19d, 0x6126,
--      0x2e00, 0x601a, 0x620a, 0x601f, 0x0009, 0x2009, 0x0101, 0x080c,
--      0x960c, 0xa085, 0x0001, 0x00ee, 0x00de, 0x00ce, 0x0005, 0xa006,
--      0x00ee, 0x00de, 0x00ce, 0x0005, 0x7110, 0xd1bc, 0x1178, 0x7024,
--      0x2060, 0xac84, 0x0007, 0x1150, 0xac82, 0xce00, 0x0238, 0x685c,
--      0xac02, 0x1220, 0x2009, 0x0051, 0x080c, 0x960c, 0x0005, 0x2031,
--      0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049, 0x0005, 0x2031,
--      0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009, 0x0005, 0x00c6,
--      0x00d6, 0x00f6, 0x7000, 0xa084, 0xf000, 0xa086, 0xc000, 0x05b0,
--      0x080c, 0x9586, 0x0598, 0x0066, 0x00c6, 0x0046, 0x2011, 0xcc83,
--      0x2204, 0x8211, 0x220c, 0x080c, 0x29c7, 0x1580, 0x080c, 0x52e1,
--      0x1568, 0x6612, 0x6516, 0x2c00, 0x004e, 0x00ce, 0x601a, 0x080c,
--      0xb057, 0x080c, 0x1602, 0x01f0, 0x2d00, 0x6056, 0x6803, 0x0000,
--      0x6837, 0x0000, 0x6c3a, 0xadf8, 0x000f, 0x20a9, 0x000e, 0x2fa0,
--      0x2e98, 0x53a3, 0x006e, 0x6612, 0x6007, 0x003e, 0x601f, 0x0001,
--      0x6003, 0x0001, 0x080c, 0x79df, 0x080c, 0x7e94, 0x00fe, 0x00de,
--      0x00ce, 0x0005, 0x080c, 0x95dc, 0x006e, 0x0cc0, 0x004e, 0x00ce,
--      0x0cc8, 0x0156, 0x0046, 0x2e00, 0xa0a0, 0x000e, 0x2404, 0x2020,
--      0x8427, 0xa4a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0003, 0x2019,
--      0xc606, 0x2011, 0xcc9b, 0x080c, 0xa0fc, 0x11d8, 0xd48c, 0x0148,
--      0x20a9, 0x0003, 0x2019, 0xc602, 0x2011, 0xcc9f, 0x080c, 0xa0fc,
--      0x1180, 0xd494, 0x0170, 0x080c, 0x7694, 0x0148, 0x20a9, 0x0008,
--      0x2019, 0xc69a, 0x2011, 0xccaa, 0x080c, 0xa111, 0x0010, 0xa085,
--      0x0001, 0x004e, 0x015e, 0x0005, 0x0156, 0x0046, 0x2e00, 0xa0a0,
--      0x000e, 0x2404, 0x2020, 0x8427, 0xa4a4, 0x0007, 0xd484, 0x0148,
--      0x20a9, 0x0003, 0x2019, 0xc606, 0x2011, 0xcc93, 0x080c, 0xa0fc,
--      0x11d8, 0xd48c, 0x0148, 0x20a9, 0x0003, 0x2019, 0xc602, 0x2011,
--      0xcc97, 0x080c, 0xa0fc, 0x1180, 0xd494, 0x0170, 0x080c, 0x7694,
--      0x0148, 0x20a9, 0x0008, 0x2019, 0xc69a, 0x2011, 0xcca2, 0x080c,
--      0xa111, 0x0010, 0xa085, 0x0001, 0x004e, 0x015e, 0x0005, 0x2071,
--      0xc93a, 0x7003, 0x0003, 0x700f, 0x0361, 0xa006, 0x701a, 0x7076,
--      0x7012, 0x7017, 0xce00, 0x7007, 0x0000, 0x7026, 0x702b, 0x8c0c,
--      0x7032, 0x7037, 0x8c6c, 0x703b, 0xffff, 0x703f, 0xffff, 0x7042,
--      0x7047, 0x4787, 0x704a, 0x705b, 0x703f, 0x2001, 0xc8e8, 0x2003,
--      0x0003, 0x2001, 0xc8ea, 0x2003, 0x0100, 0x3a00, 0xa084, 0x0005,
--      0x706e, 0x0005, 0x2071, 0xc93a, 0x1d04, 0x6f9c, 0x2091, 0x6000,
--      0x700c, 0x8001, 0x700e, 0x1518, 0x700f, 0x0361, 0x7007, 0x0001,
--      0x0126, 0x2091, 0x8000, 0x7040, 0xa00d, 0x0128, 0x8109, 0x7142,
--      0x1110, 0x7044, 0x080f, 0x00c6, 0x2061, 0xc600, 0x6034, 0x00ce,
--      0xd0cc, 0x0180, 0x3a00, 0xa084, 0x0005, 0x726c, 0xa216, 0x0150,
--      0x706e, 0x2011, 0x8043, 0x2018, 0x080c, 0x407d, 0x0018, 0x0126,
--      0x2091, 0x8000, 0x7024, 0xa00d, 0x0188, 0x7020, 0x8001, 0x7022,
--      0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0xa186, 0x03e8, 0x1110,
--      0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030, 0xa00d,
--      0x0180, 0x702c, 0x8001, 0x702e, 0x1160, 0x702f, 0x0009, 0x8109,
--      0x7132, 0x0128, 0xa184, 0x007f, 0x090c, 0x8cc8, 0x0010, 0x7034,
--      0x080f, 0x7038, 0xa005, 0x0118, 0x0310, 0x8001, 0x703a, 0x703c,
--      0xa005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0xa00d, 0x0168,
--      0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109, 0x714e,
--      0x1120, 0x7150, 0x714e, 0x7058, 0x080f, 0x7018, 0xa00d, 0x01d8,
--      0x0016, 0x7074, 0xa00d, 0x0158, 0x7070, 0x8001, 0x7072, 0x1138,
--      0x7073, 0x0009, 0x8109, 0x7176, 0x1110, 0x7078, 0x080f, 0x001e,
--      0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a,
--      0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x6fc2, 0x6fc3,
--      0x6fdb, 0x00e6, 0x2071, 0xc93a, 0x7018, 0xa005, 0x1120, 0x711a,
--      0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071,
--      0xc93a, 0x701c, 0xa206, 0x1110, 0x701a, 0x701e, 0x000e, 0x00ee,
--      0x0005, 0x00e6, 0x2071, 0xc93a, 0x6088, 0xa102, 0x0208, 0x618a,
--      0x00ee, 0x0005, 0x0005, 0x7110, 0x080c, 0x533d, 0x1158, 0x6088,
--      0x8001, 0x0240, 0x608a, 0x1130, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x7e94, 0x012e, 0x8108, 0xa182, 0x00ff, 0x0218, 0xa00e, 0x7007,
--      0x0002, 0x7112, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000,
--      0x603c, 0xa005, 0x0128, 0x8001, 0x603e, 0x1110, 0x080c, 0xaf45,
--      0x6014, 0xa005, 0x0518, 0x8001, 0x6016, 0x1500, 0x611c, 0xa186,
--      0x0003, 0x0130, 0xa186, 0x0006, 0x0118, 0xa186, 0x0009, 0x11a0,
--      0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0270, 0xa082, 0x1999,
--      0x6856, 0xa08a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b,
--      0x810b, 0xa108, 0x6116, 0x0010, 0x080c, 0xaa15, 0x012e, 0xac88,
--      0x0018, 0x7116, 0x2001, 0xfe00, 0xa102, 0x0220, 0x7017, 0xce00,
--      0x7007, 0x0000, 0x0005, 0x00e6, 0x2071, 0xc93a, 0x7027, 0x07d0,
--      0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0xc943, 0x2003, 0x0000,
--      0x0005, 0x00e6, 0x2071, 0xc93a, 0x7132, 0x702f, 0x0009, 0x00ee,
--      0x0005, 0x2011, 0xc946, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071,
--      0xc93a, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00c6,
--      0x0026, 0x7054, 0x8000, 0x7056, 0x2061, 0xc8e8, 0x6008, 0xa086,
--      0x0000, 0x0158, 0x7068, 0x6032, 0x7064, 0x602e, 0x7060, 0x602a,
--      0x705c, 0x6026, 0x2c10, 0x080c, 0x164d, 0x002e, 0x00ce, 0x0005,
--      0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x6f0a,
--      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x0005, 0x00e6,
--      0x2071, 0xc93a, 0x7176, 0x727a, 0x7073, 0x0009, 0x00ee, 0x0005,
--      0x00e6, 0x0006, 0x2071, 0xc93a, 0x7078, 0xa206, 0x1110, 0x7076,
--      0x707a, 0x000e, 0x00ee, 0x0005, 0x00c6, 0x2061, 0xc9bc, 0x00ce,
--      0x0005, 0xa184, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0xc9bc,
--      0x2060, 0x0005, 0x6854, 0xa08a, 0x199a, 0x0210, 0x2001, 0x1999,
--      0xa005, 0x1150, 0x00c6, 0x2061, 0xc9bc, 0x6014, 0x00ce, 0xa005,
--      0x1138, 0x2001, 0x001e, 0x0020, 0xa08e, 0xffff, 0x1108, 0xa006,
--      0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c, 0xa08c, 0x00c0,
--      0xa18e, 0x00c0, 0x05e8, 0xd0b4, 0x1138, 0xd0bc, 0x1550, 0x2009,
--      0x0006, 0x080c, 0x7105, 0x0005, 0xd0fc, 0x0138, 0xa084, 0x0003,
--      0x0120, 0xa086, 0x0003, 0x1904, 0x70ff, 0x6020, 0xd0d4, 0x0130,
--      0xc0d4, 0x6022, 0x6860, 0x602a, 0x685c, 0x602e, 0x2009, 0xc674,
--      0x2104, 0xd084, 0x0138, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c,
--      0x960c, 0x0005, 0x87ff, 0x1120, 0x2009, 0x0043, 0x080c, 0x960c,
--      0x0005, 0xd0fc, 0x0130, 0xa084, 0x0003, 0x0118, 0xa086, 0x0003,
--      0x11f0, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, 0x960c, 0x0005,
--      0xd0fc, 0x0160, 0xa084, 0x0003, 0xa08e, 0x0002, 0x0148, 0x87ff,
--      0x1120, 0x2009, 0x0041, 0x080c, 0x960c, 0x0005, 0x0061, 0x0ce8,
--      0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x960c, 0x0cb0, 0x2009,
--      0x0004, 0x0019, 0x0005, 0x2009, 0x0001, 0x00d6, 0x6010, 0xa0ec,
--      0xf000, 0x0510, 0x2068, 0x6952, 0x6800, 0x6012, 0xa186, 0x0001,
--      0x1188, 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x1158, 0x00c6,
--      0x2061, 0xc9bc, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208,
--      0x6206, 0x00ce, 0x080c, 0x580a, 0x6010, 0xa06d, 0x0076, 0x2039,
--      0x0000, 0x190c, 0x708a, 0x007e, 0x00de, 0x0005, 0x0156, 0x00c6,
--      0x2061, 0xc9bc, 0x6000, 0x81ff, 0x0110, 0xa205, 0x0008, 0xa204,
--      0x6002, 0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808,
--      0xa005, 0x0120, 0x8001, 0x680a, 0xa085, 0x0001, 0x0005, 0x2071,
--      0xc755, 0x7003, 0x0006, 0x7007, 0x0000, 0x700f, 0x0000, 0x7013,
--      0x0001, 0x702f, 0x0006, 0x7033, 0x0001, 0x7063, 0x0000, 0x0005,
--      0x00e6, 0x2071, 0xc755, 0x6a2c, 0x721e, 0x6b30, 0x7322, 0x6834,
--      0x7026, 0x705a, 0x6838, 0x702a, 0x705e, 0x6824, 0x7016, 0x683c,
--      0x701a, 0x2009, 0x0070, 0x200a, 0xa005, 0x0150, 0x2009, 0x0000,
--      0xa188, 0x000c, 0x8001, 0x1de0, 0x2100, 0xa210, 0x1208, 0x8318,
--      0x7252, 0x7356, 0x7010, 0xc084, 0x7012, 0x7007, 0x0001, 0x700f,
--      0x0000, 0xa006, 0x00ee, 0x0005, 0x2b78, 0x2071, 0xc755, 0x7004,
--      0x004b, 0x700c, 0x0002, 0x718e, 0x7187, 0x7187, 0x0005, 0x7198,
--      0x71e9, 0x71ea, 0x71eb, 0x71ec, 0x71ff, 0x7200, 0x700c, 0x0cba,
--      0x2f00, 0xa080, 0x0070, 0x2004, 0x2f08, 0xa188, 0x0070, 0x210c,
--      0xa106, 0x0150, 0x2f00, 0xa080, 0x0070, 0x2004, 0x2f08, 0xa188,
--      0x0070, 0x210c, 0xa106, 0x15e0, 0x7018, 0xa10a, 0x1118, 0x080c,
--      0x722d, 0x04b0, 0x1210, 0x7114, 0xa10a, 0xa192, 0x000a, 0x0210,
--      0x2009, 0x000a, 0x00d6, 0x0016, 0x2001, 0xc682, 0xa080, 0x0011,
--      0x2014, 0x2001, 0xc76f, 0xa080, 0x0005, 0x2004, 0xa100, 0xa202,
--      0x001e, 0x00de, 0x0e20, 0x080c, 0x727c, 0x2200, 0xa102, 0x0208,
--      0x2208, 0x713a, 0x080c, 0x7377, 0x2100, 0x7042, 0x2001, 0x0002,
--      0x7037, 0x0000, 0x0126, 0x0006, 0x2091, 0x8000, 0x2009, 0xc959,
--      0x2104, 0xc095, 0x200a, 0x000e, 0x700e, 0x012e, 0x080c, 0x1669,
--      0x0005, 0x0005, 0x0005, 0x0005, 0x700c, 0x0002, 0x71f1, 0x71f4,
--      0x71fe, 0x080c, 0x7196, 0x0005, 0x0126, 0x8001, 0x700e, 0x7138,
--      0x0041, 0x2091, 0x8000, 0x080c, 0x7196, 0x012e, 0x0005, 0x0005,
--      0x0005, 0x7018, 0xa100, 0x7214, 0xa21a, 0x1130, 0x701c, 0x7052,
--      0x7020, 0x7056, 0xa006, 0x0068, 0x0006, 0x080c, 0x7377, 0x2100,
--      0x7250, 0xa210, 0x7252, 0x1220, 0x7054, 0xa081, 0x0000, 0x7056,
--      0x000e, 0x2f08, 0xa188, 0x0070, 0x200a, 0x701a, 0x0005, 0x00e6,
--      0x2071, 0xc755, 0x700c, 0x0002, 0x7227, 0x7227, 0x7229, 0x00ee,
--      0x0005, 0x700f, 0x0001, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,
--      0x00d6, 0x00e6, 0x2071, 0xc76f, 0x702c, 0xa005, 0x0178, 0x2068,
--      0x6964, 0x080c, 0x727c, 0x2100, 0x2208, 0xa102, 0x0238, 0x6800,
--      0x702e, 0x080c, 0x75b9, 0x080c, 0x1629, 0x0c70, 0x00ee, 0x00de,
--      0x012e, 0x0005, 0x00e6, 0x2071, 0xc76f, 0x702c, 0x6802, 0x2d00,
--      0x702e, 0x6858, 0x7120, 0xa102, 0x0a0c, 0x1519, 0x7022, 0x685b,
--      0x0000, 0x00ee, 0x0005, 0x00d6, 0x00e6, 0x2071, 0xc76f, 0xa006,
--      0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, 0x702a, 0x7026,
--      0x702f, 0x0000, 0x080c, 0x742b, 0x0168, 0x080c, 0x745d, 0x2d00,
--      0x7002, 0x700a, 0x701a, 0x7013, 0x0001, 0x701f, 0x0007, 0x00ee,
--      0x00de, 0x0005, 0xa00e, 0x0cd8, 0x00e6, 0x00d6, 0x00c6, 0x2071,
--      0xc76f, 0x721c, 0x2100, 0xa202, 0x1618, 0x080c, 0x745d, 0x090c,
--      0x1519, 0x7018, 0xa005, 0x1160, 0x2d00, 0x7002, 0x700a, 0x701a,
--      0xa006, 0x7006, 0x700e, 0x6806, 0x6802, 0x7012, 0x701e, 0x0038,
--      0x2060, 0x6806, 0x2d00, 0x6002, 0x701a, 0x6803, 0x0000, 0x7010,
--      0x8000, 0x7012, 0x701c, 0xa080, 0x0007, 0x701e, 0x721c, 0x08d0,
--      0x721c, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x0156, 0x0136, 0x0146,
--      0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0xc76f, 0x7300, 0xa398,
--      0x0003, 0x7104, 0x080c, 0x7377, 0x810c, 0x2100, 0xa318, 0x8003,
--      0x2228, 0x2021, 0x0054, 0xa402, 0xa532, 0x0208, 0x2028, 0x2500,
--      0x8004, 0x20a8, 0x23a0, 0xe000, 0xe000, 0xe000, 0x53a5, 0x2508,
--      0x080c, 0x7380, 0x2130, 0x7014, 0xa600, 0x7016, 0x2600, 0x711c,
--      0xa102, 0x701e, 0x7004, 0xa600, 0x2008, 0xa082, 0x0007, 0x1180,
--      0x7000, 0x2004, 0xa005, 0x1140, 0x2009, 0x0001, 0x0026, 0x080c,
--      0x727c, 0x002e, 0x7000, 0x2004, 0x7002, 0x7007, 0x0000, 0x0008,
--      0x7106, 0x2500, 0xa212, 0x1910, 0x012e, 0x00ee, 0x014e, 0x013e,
--      0x015e, 0x0005, 0x0016, 0x0026, 0x00e6, 0x00d6, 0x080c, 0x7340,
--      0x15e0, 0x2170, 0x2805, 0xac68, 0x2900, 0x0002, 0x7316, 0x7316,
--      0x731a, 0x7316, 0x731a, 0x7316, 0x7316, 0x7316, 0x7316, 0x7316,
--      0x7323, 0x7316, 0x7323, 0x7316, 0x7316, 0x7316, 0x080c, 0x1519,
--      0xa005, 0x00f0, 0x7000, 0x6802, 0x7004, 0x6806, 0x7010, 0x680a,
--      0x680f, 0x0000, 0x0060, 0x7010, 0x6812, 0x6817, 0x0000, 0x7000,
--      0x6802, 0x7004, 0x6806, 0x7008, 0x680a, 0x700c, 0x680e, 0x00de,
--      0x685c, 0x8000, 0x685e, 0x6858, 0x8001, 0x685a, 0x00d6, 0xa006,
--      0x00de, 0x00ee, 0x002e, 0x001e, 0x0005, 0xa085, 0x0001, 0x0cc0,
--      0x00e6, 0x0036, 0x2071, 0xc76f, 0x7014, 0xa005, 0x0568, 0x8001,
--      0x7016, 0x7020, 0x8001, 0x7022, 0x7008, 0xa080, 0x0003, 0x710c,
--      0x2110, 0x0429, 0x810c, 0xa118, 0x8210, 0xa282, 0x0007, 0x11b0,
--      0x7008, 0x2004, 0xa005, 0x0178, 0x00d6, 0x0006, 0x7008, 0x2068,
--      0x080c, 0x746c, 0x000e, 0x2068, 0x6807, 0x0000, 0x700a, 0x00de,
--      0x7010, 0x8001, 0x7012, 0x700f, 0x0000, 0x0008, 0x720e, 0x2308,
--      0xa006, 0x003e, 0x00ee, 0x0005, 0xa085, 0x0001, 0x0cd0, 0x0006,
--      0x810b, 0x810b, 0x2100, 0x810b, 0xa100, 0x2008, 0x000e, 0x0005,
--      0x0006, 0x0026, 0x2100, 0xa005, 0x0160, 0xa092, 0x000c, 0x0248,
--      0x2009, 0x0000, 0x8108, 0xa082, 0x000c, 0x1de0, 0x002e, 0x000e,
--      0x0005, 0x2009, 0x0000, 0x0cd0, 0x2d00, 0xa0b8, 0x0008, 0x690c,
--      0x6810, 0x2019, 0x0001, 0x2031, 0x73c2, 0xa112, 0x0220, 0x0118,
--      0x8318, 0x2208, 0x0cd0, 0x6808, 0xa005, 0x0108, 0x8318, 0x233a,
--      0x6804, 0xd084, 0x2300, 0x2021, 0x0001, 0x1150, 0xa082, 0x0003,
--      0x0967, 0x0a67, 0x8420, 0xa082, 0x0007, 0x0967, 0x0a67, 0x0cd0,
--      0xa082, 0x0002, 0x0967, 0x0a67, 0x8420, 0xa082, 0x0005, 0x0967,
--      0x0a67, 0x0cd0, 0x6c1a, 0x2d00, 0xa0b8, 0x0007, 0x00e6, 0x2071,
--      0xc600, 0x7128, 0x6810, 0x2019, 0x0001, 0xa10a, 0x0118, 0x0210,
--      0x8318, 0x0cd8, 0x2031, 0x73d5, 0x0870, 0x6c16, 0x00ee, 0x0005,
--      0x00e6, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2e00, 0x2060, 0x2071,
--      0xc76f, 0x2009, 0x0001, 0x0026, 0x080c, 0x727c, 0x002e, 0x7300,
--      0xa398, 0x0003, 0x7104, 0x080c, 0x7377, 0x810c, 0x2100, 0xa318,
--      0x6834, 0xa084, 0x00ff, 0xa086, 0x0024, 0x00d6, 0x2368, 0x1138,
--      0x6000, 0x6802, 0x6004, 0x6806, 0x6008, 0x6812, 0x0050, 0x6000,
--      0x6802, 0x6004, 0x6806, 0x6008, 0x680a, 0x600c, 0x680e, 0x6010,
--      0x6812, 0x00de, 0x7014, 0x8000, 0x7016, 0x711c, 0x8109, 0x711e,
--      0x7004, 0x8000, 0x2008, 0xa082, 0x0007, 0x1180, 0x7000, 0x2004,
--      0xa005, 0x1140, 0x2009, 0x0001, 0x0026, 0x080c, 0x727c, 0x002e,
--      0x7000, 0x2004, 0x7002, 0x7007, 0x0000, 0x0008, 0x7106, 0x012e,
--      0x00ce, 0x00ee, 0x0005, 0x00d6, 0x0046, 0x0126, 0x2091, 0x8000,
--      0x2001, 0xc682, 0xa080, 0x0011, 0x2004, 0x8003, 0x2020, 0x080c,
--      0x15e5, 0x01d0, 0x2d00, 0x7026, 0x6803, 0x0000, 0x6807, 0x0000,
--      0x080c, 0x15e5, 0x0188, 0x7024, 0x6802, 0x6807, 0x0000, 0x2d00,
--      0x7026, 0xa4a2, 0x0007, 0x0110, 0x0208, 0x0c90, 0xa085, 0x0001,
--      0x012e, 0x004e, 0x00de, 0x0005, 0x7024, 0xa005, 0x0dc8, 0x2068,
--      0x2024, 0x080c, 0x1619, 0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000,
--      0x7024, 0x2068, 0xa005, 0x0130, 0x2004, 0x7026, 0x6803, 0x0000,
--      0x6807, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7024,
--      0x6802, 0x2d00, 0x7026, 0x012e, 0x0005, 0x00d6, 0x2001, 0xc778,
--      0x2004, 0xa005, 0x0138, 0x2068, 0x6800, 0x0006, 0x080c, 0x1619,
--      0x000e, 0x0cb8, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x2071, 0xc76f,
--      0x7008, 0xa005, 0x0138, 0x2068, 0x6800, 0x0006, 0x080c, 0x1619,
--      0x000e, 0x0cb8, 0xa006, 0x7002, 0x700a, 0x7006, 0x700e, 0x701a,
--      0x701e, 0x7022, 0x702a, 0x7026, 0x702e, 0x00ee, 0x00de, 0x0005,
--      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0086, 0x0046, 0x0056, 0x0026,
--      0x2031, 0x0000, 0x2001, 0xc756, 0x2004, 0xa005, 0x0904, 0x7532,
--      0x2071, 0xc682, 0x20e1, 0x0002, 0x3d08, 0xd19c, 0x0140, 0x2069,
--      0xc600, 0x6a28, 0x761c, 0x7114, 0x2041, 0x0000, 0x0028, 0x7118,
--      0x720c, 0x7620, 0x7008, 0x2040, 0x080c, 0x7627, 0x0904, 0x7532,
--      0x7004, 0xd084, 0x1128, 0x2021, 0x0024, 0x2029, 0x0002, 0x0020,
--      0x2021, 0x002c, 0x2029, 0x000a, 0x080c, 0x1602, 0x0904, 0x752a,
--      0x2d00, 0x2060, 0x6436, 0x0016, 0x20e1, 0x0001, 0x3d08, 0x3e00,
--      0xa18c, 0x00ff, 0x6142, 0x603e, 0x001e, 0x6746, 0x2700, 0xa086,
--      0xff00, 0x1118, 0x6063, 0x0000, 0x0010, 0x6063, 0x0003, 0xa006,
--      0x6002, 0x602a, 0x602e, 0x6006, 0x603a, 0x604a, 0x6052, 0x6057,
--      0x0005, 0x605e, 0x6066, 0x604e, 0x2800, 0x606a, 0x604c, 0xc0ad,
--      0x604e, 0x665a, 0x2c00, 0x2078, 0x0479, 0x607f, 0xffff, 0x6083,
--      0x0000, 0x8109, 0x0180, 0x080c, 0x1602, 0x01c0, 0x2d00, 0x7806,
--      0x2f00, 0x6802, 0x6d36, 0xa006, 0x2d00, 0x2520, 0x00e9, 0x2d00,
--      0x2078, 0x8109, 0x1d80, 0x2c00, 0xa005, 0x002e, 0x005e, 0x004e,
--      0x008e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x2c00, 0x2068,
--      0x080c, 0x1629, 0x2600, 0x2071, 0xc76f, 0x7120, 0xa102, 0x0a0c,
--      0x1519, 0x7022, 0xa006, 0x0c48, 0x00d6, 0x00c6, 0x0136, 0x0146,
--      0x0156, 0x0016, 0x2068, 0x2400, 0xa084, 0x000f, 0xa080, 0x23c7,
--      0x2005, 0x2005, 0xad60, 0x2c00, 0x2d08, 0xa188, 0x0030, 0xa102,
--      0x20a8, 0x2c00, 0x20a0, 0x2001, 0xffff, 0x40a4, 0x001e, 0x015e,
--      0x014e, 0x013e, 0x00ce, 0x00de, 0x0005, 0x00c6, 0x00e6, 0x00f6,
--      0x6858, 0x2071, 0xc76f, 0x7120, 0xa102, 0x0a0c, 0x1519, 0x7022,
--      0x6960, 0x694e, 0x697c, 0x2009, 0xffff, 0x7818, 0xa102, 0xe000,
--      0x6852, 0x684b, 0x0000, 0x6868, 0xa005, 0x0118, 0x6848, 0xc085,
--      0x684a, 0x2d00, 0xa080, 0x0015, 0x2038, 0x2031, 0x0018, 0x6864,
--      0x2020, 0x683a, 0x685c, 0xa08a, 0x00ff, 0x1a0c, 0x1519, 0x2028,
--      0x2d00, 0x2060, 0x2078, 0x6934, 0xa18c, 0x000f, 0xa188, 0x23c7,
--      0x2145, 0x685c, 0x2050, 0xa005, 0x0530, 0x2805, 0xac70, 0x6834,
--      0xa084, 0x00ff, 0xa086, 0x0024, 0x1110, 0x7008, 0x0040, 0x6834,
--      0xa084, 0x00ff, 0xa086, 0x002c, 0x190c, 0x1519, 0x7010, 0x0006,
--      0x2400, 0xa005, 0x000e, 0x0168, 0x203a, 0x8738, 0x8631, 0x090c,
--      0x1519, 0x8421, 0x8529, 0x0138, 0x080c, 0x2389, 0x090c, 0x1519,
--      0x08e0, 0x080c, 0x73d8, 0x6837, 0x0023, 0x00fe, 0x00ee, 0x00ce,
--      0x0005, 0x00e6, 0x00c6, 0x00a6, 0x0086, 0x0056, 0x2d00, 0x2060,
--      0x6934, 0xa18c, 0x000f, 0xa188, 0x23c7, 0x2145, 0x685c, 0x2050,
--      0xa005, 0x01d0, 0x2028, 0x2805, 0xac70, 0x6834, 0xa084, 0x00ff,
--      0xa086, 0x0024, 0x1110, 0x7008, 0x0008, 0x7010, 0x0006, 0xa086,
--      0xffff, 0x000e, 0x0110, 0x080c, 0x73d8, 0x8529, 0x0128, 0x080c,
--      0x2389, 0x090c, 0x1519, 0x0c38, 0x005e, 0x008e, 0x00ae, 0x00ce,
--      0x00ee, 0x0005, 0x70ac, 0xa005, 0x0120, 0x2060, 0x6008, 0xa306,
--      0x0005, 0xa085, 0x0001, 0x0ce0, 0x70ac, 0x600e, 0x2c00, 0x70ae,
--      0x0005, 0x00f6, 0x00d6, 0x0036, 0x70ac, 0xa005, 0x01b8, 0x2068,
--      0x2079, 0x0000, 0x2c08, 0xa11e, 0x1118, 0x680c, 0x70ae, 0x0060,
--      0xa106, 0x0140, 0x2d00, 0x2078, 0x680c, 0xa005, 0x090c, 0x1519,
--      0x2068, 0x0cb0, 0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x003e, 0x00de,
--      0x00fe, 0x0005, 0x00e6, 0x080c, 0x724a, 0x6018, 0x2070, 0xa006,
--      0x70b2, 0x70b6, 0x08b1, 0x080c, 0x95dc, 0x00ee, 0x0005, 0x00d6,
--      0x0026, 0x0016, 0x2061, 0xc76f, 0x6020, 0x6414, 0xa600, 0xa42a,
--      0x02f0, 0x6022, 0x2069, 0xc682, 0x6828, 0x6114, 0xa102, 0x1288,
--      0x685c, 0xd08c, 0x1130, 0xc08d, 0x685e, 0x2011, 0x8025, 0x080c,
--      0x407d, 0x2001, 0xc695, 0x2004, 0xa080, 0x0000, 0x200c, 0x8108,
--      0x2102, 0xa085, 0x0001, 0x001e, 0x002e, 0x00de, 0x0005, 0x2069,
--      0xc682, 0x6804, 0xd094, 0x0148, 0x685c, 0xd084, 0x1130, 0xc085,
--      0x685e, 0x2011, 0x8026, 0x080c, 0x407d, 0x2001, 0xc695, 0x2004,
--      0xa080, 0x0001, 0x200c, 0x8108, 0x2102, 0xa006, 0x2031, 0x0000,
--      0x0c10, 0x0006, 0x0016, 0x00c6, 0x6018, 0x2060, 0x6010, 0xa005,
--      0x0178, 0x2001, 0xc756, 0x2004, 0xa005, 0x0150, 0x2001, 0xc600,
--      0x2004, 0xa086, 0x0003, 0x1120, 0x2011, 0x8014, 0x080c, 0x407d,
--      0x00ce, 0x001e, 0x000e, 0x0005, 0x0016, 0x6834, 0xa08c, 0x00ff,
--      0xa186, 0x0024, 0x0110, 0xa186, 0x002c, 0x001e, 0x0005, 0x2001,
--      0xc683, 0x2004, 0xd09c, 0x0005, 0x2001, 0xc683, 0x2004, 0xd0a4,
--      0x0005, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013,
--      0x006e, 0x0005, 0x76b2, 0x76b2, 0x76b2, 0x76b4, 0x770f, 0x76b2,
--      0x76b2, 0x76b2, 0x774d, 0x76b2, 0x77aa, 0x76b2, 0x76b2, 0x76b2,
--      0x76b2, 0x76b2, 0x080c, 0x1519, 0xa182, 0x0100, 0x0002, 0x76c6,
--      0x76c6, 0x76c6, 0x76c8, 0x76e1, 0x76fb, 0x76c6, 0x76c6, 0x76c6,
--      0x76c6, 0x76c6, 0x76c6, 0x76c6, 0x76c6, 0x76c6, 0x080c, 0x1519,
--      0x00d6, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6110, 0x2168, 0x684b,
--      0x0000, 0x00d6, 0x6018, 0x2068, 0x6008, 0x68b6, 0x68bb, 0x0500,
--      0xa006, 0x68b2, 0x00de, 0x080c, 0x580a, 0x080c, 0x95dc, 0x00de,
--      0x0005, 0x080c, 0x7e47, 0x00f6, 0x00d6, 0x6110, 0x2178, 0x080c,
--      0xac8a, 0x0150, 0x00e6, 0x6018, 0x2070, 0xa006, 0x70b2, 0x70b6,
--      0x00ee, 0x2f68, 0x080c, 0x580a, 0x00de, 0x00fe, 0x080c, 0x95dc,
--      0x080c, 0x7f6e, 0x0005, 0x080c, 0x7e47, 0x080c, 0x2e46, 0x00d6,
--      0x6110, 0x2168, 0x080c, 0xac8a, 0x0120, 0x684b, 0x0029, 0x080c,
--      0x580a, 0x00de, 0x080c, 0x95dc, 0x080c, 0x7f6e, 0x0005, 0xa182,
--      0x0100, 0x0002, 0x7721, 0x7723, 0x772b, 0x7721, 0x7721, 0x7721,
--      0x7748, 0x7721, 0x7721, 0x7721, 0x7721, 0x7721, 0x7721, 0x7721,
--      0x7721, 0x080c, 0x1519, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
--      0x080c, 0x1870, 0x0005, 0x00d6, 0x00e6, 0x2001, 0xc756, 0x2004,
--      0xa086, 0x0000, 0x6110, 0x1118, 0x080c, 0x1629, 0x0028, 0x2168,
--      0x080c, 0x7555, 0x080c, 0x580a, 0x6018, 0x2070, 0xa006, 0x70b2,
--      0x70b6, 0x080c, 0x75f9, 0x00ee, 0x00de, 0x080c, 0x95dc, 0x0005,
--      0x080c, 0x761a, 0x080c, 0x56c7, 0x0005, 0xa182, 0x0100, 0x0002,
--      0x7762, 0x7788, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760,
--      0x7760, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760,
--      0x080c, 0x1519, 0x00d6, 0x6003, 0x0003, 0x6106, 0x6010, 0x2068,
--      0x687c, 0x680a, 0x6880, 0x680e, 0x6813, 0x0000, 0x6817, 0x0000,
--      0x6854, 0xa092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013,
--      0x8213, 0xa210, 0x6216, 0x00de, 0x2c10, 0x080c, 0x2068, 0x080c,
--      0x79fc, 0x0126, 0x2091, 0x8000, 0x080c, 0x7f6e, 0x012e, 0x0005,
--      0x6003, 0x0004, 0x630a, 0x080c, 0x74a0, 0x0168, 0x6012, 0x600f,
--      0x0000, 0x080c, 0x75f4, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
--      0x080c, 0x1870, 0x0005, 0x2011, 0x0000, 0x080c, 0x1870, 0x00e6,
--      0x6018, 0x2070, 0x70b3, 0x0000, 0x70b7, 0x0000, 0x00ee, 0x080c,
--      0x95dc, 0x0005, 0x00d6, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6110,
--      0x2168, 0x684b, 0x0000, 0x00d6, 0x6018, 0x2068, 0x6008, 0x68b6,
--      0x68bb, 0x0500, 0xa006, 0x68b2, 0x00de, 0x080c, 0x580a, 0x080c,
--      0x95dc, 0x00de, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1519,
--      0x000b, 0x0005, 0x77da, 0x77da, 0x77da, 0x77dc, 0x77f1, 0x77da,
--      0x77da, 0x77da, 0x77da, 0x77da, 0x77da, 0x77da, 0x77da, 0x77da,
--      0x77da, 0x77da, 0x080c, 0x1519, 0x080c, 0x90ef, 0x6110, 0x2168,
--      0x684b, 0x0006, 0x00d6, 0x6018, 0x2068, 0x6008, 0x68b6, 0x68bb,
--      0x0500, 0xa006, 0x68b2, 0x00de, 0x080c, 0x580a, 0x080c, 0x95dc,
--      0x0005, 0x080c, 0x761a, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c,
--      0x1519, 0x000b, 0x0005, 0x780b, 0x780b, 0x780b, 0x780d, 0x781d,
--      0x780b, 0x780b, 0x780b, 0x780b, 0x780b, 0x780b, 0x780b, 0x780b,
--      0x780b, 0x780b, 0x780b, 0x080c, 0x1519, 0x0036, 0x00e6, 0x2071,
--      0xc927, 0x703c, 0xac06, 0x1120, 0x2019, 0x0000, 0x080c, 0x8e79,
--      0x080c, 0x90ef, 0x00ee, 0x003e, 0x0005, 0x00d6, 0x6010, 0x2068,
--      0x080c, 0x761a, 0x00de, 0x0005, 0x080c, 0x7684, 0x1150, 0x6024,
--      0xd09c, 0x1138, 0x6810, 0x2009, 0xffff, 0xa102, 0x2020, 0x2019,
--      0x0000, 0x0005, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e,
--      0x1208, 0xa200, 0x1f04, 0x7836, 0x8086, 0x818e, 0x0005, 0x0156,
--      0x20a9, 0x0010, 0xa005, 0x01b8, 0xa11a, 0x12a8, 0x8213, 0x818d,
--      0x0228, 0xa11a, 0x1220, 0x1f04, 0x7846, 0x0028, 0xa11a, 0x2308,
--      0x8210, 0x1f04, 0x7846, 0x0006, 0x3200, 0xa084, 0xefff, 0x2080,
--      0x000e, 0x015e, 0x0005, 0x0006, 0x3200, 0xa085, 0x1000, 0x0cb8,
--      0x0126, 0x2091, 0x2800, 0x2079, 0xc927, 0x012e, 0x00d6, 0x2069,
--      0xc927, 0x6803, 0x0005, 0x2069, 0x0004, 0x2d04, 0xa085, 0x8001,
--      0x206a, 0x00de, 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804, 0xa084,
--      0x0007, 0x0002, 0x7884, 0x78a5, 0x78f8, 0x788a, 0x78a5, 0x7884,
--      0x7882, 0x7882, 0x080c, 0x1519, 0x080c, 0x7024, 0x080c, 0x7e94,
--      0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011,
--      0x4e18, 0x080c, 0x6fad, 0x7828, 0xa092, 0x00c8, 0x1228, 0x8000,
--      0x782a, 0x080c, 0x4e52, 0x0c88, 0x080c, 0x4e18, 0x7807, 0x0003,
--      0x7827, 0x0000, 0x782b, 0x0000, 0x0c40, 0x080c, 0x7024, 0x3c00,
--      0x0006, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214, 0x000e, 0x20e0,
--      0x82ff, 0x0178, 0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824,
--      0xa065, 0x090c, 0x1519, 0x2009, 0x0013, 0x080c, 0x960c, 0x00ce,
--      0x0005, 0x3900, 0xa082, 0xca74, 0x1210, 0x080c, 0x91c4, 0x00c6,
--      0x7824, 0xa065, 0x090c, 0x1519, 0x7804, 0xa086, 0x0004, 0x0904,
--      0x7938, 0x7828, 0xa092, 0x2710, 0x1230, 0x8000, 0x782a, 0x00ce,
--      0x080c, 0x8be8, 0x0c20, 0x6104, 0xa186, 0x0003, 0x1188, 0x00e6,
--      0x2071, 0xc600, 0x70e0, 0x00ee, 0xd08c, 0x0150, 0x00c6, 0x00e6,
--      0x2061, 0x0100, 0x2071, 0xc600, 0x080c, 0x4e5b, 0x00ee, 0x00ce,
--      0x080c, 0xc58e, 0x2009, 0x0014, 0x080c, 0x960c, 0x00ce, 0x0838,
--      0x2001, 0xc943, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b,
--      0x0000, 0x7824, 0xa065, 0x090c, 0x1519, 0x2009, 0x0013, 0x080c,
--      0x9660, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x3900, 0xa082, 0xca74,
--      0x1210, 0x080c, 0x91c4, 0x7824, 0xa005, 0x090c, 0x1519, 0x781c,
--      0xa06d, 0x090c, 0x1519, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160,
--      0x080c, 0x95dc, 0x693c, 0x81ff, 0x090c, 0x1519, 0x8109, 0x693e,
--      0x6854, 0xa015, 0x0110, 0x7a1e, 0x0010, 0x7918, 0x791e, 0x7807,
--      0x0000, 0x7827, 0x0000, 0x00de, 0x00ce, 0x080c, 0x7e94, 0x0888,
--      0x6104, 0xa186, 0x0002, 0x0128, 0xa186, 0x0004, 0x0110, 0x0804,
--      0x78d1, 0x7808, 0xac06, 0x0904, 0x78d1, 0x080c, 0x7db1, 0x080c,
--      0x79df, 0x00ce, 0x080c, 0x7e94, 0x0804, 0x78bf, 0x00c6, 0x6027,
--      0x0002, 0x62c8, 0x60c4, 0xa205, 0x11a8, 0x793c, 0xa1e5, 0x0000,
--      0x0160, 0x2009, 0x0049, 0x601c, 0xa086, 0x0009, 0x1110, 0x2009,
--      0x0103, 0x080c, 0x960c, 0x00ce, 0x0005, 0x2011, 0xc946, 0x2013,
--      0x0000, 0x0cc8, 0x3908, 0xa192, 0xca74, 0x1210, 0x080c, 0x91c4,
--      0x793c, 0x81ff, 0x0d90, 0x7944, 0xa192, 0x7530, 0x12f0, 0x8108,
--      0x7946, 0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x1138,
--      0x6014, 0xa084, 0x0184, 0xa085, 0x0012, 0x6016, 0x08e0, 0x793c,
--      0xa188, 0x0007, 0x210c, 0xa18e, 0x0009, 0x0d90, 0x6014, 0xa084,
--      0x0184, 0xa085, 0x0016, 0x6016, 0x0870, 0x7848, 0xc085, 0x784a,
--      0x0850, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f,
--      0x0000, 0x2c08, 0x2061, 0xc927, 0x6020, 0x8000, 0x6022, 0x6010,
--      0xa005, 0x0148, 0xa080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce,
--      0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069,
--      0xc927, 0x6000, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0xa086,
--      0x0001, 0x1110, 0x2c00, 0x681e, 0x6804, 0xa084, 0x0007, 0x0804,
--      0x7e9a, 0xc0d5, 0x6002, 0x6818, 0xa005, 0x0158, 0x6056, 0x605b,
--      0x0000, 0x0006, 0x2c00, 0x681a, 0x00de, 0x685a, 0x2069, 0xc927,
--      0x0c18, 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x08e8, 0x0006,
--      0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08,
--      0x2061, 0xc927, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0148,
--      0xa080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, 0x000e,
--      0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, 0x2c08,
--      0x2061, 0xc927, 0x6034, 0xa005, 0x0130, 0xa080, 0x0003, 0x2102,
--      0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x0cd8, 0x00f6, 0x00e6,
--      0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0036, 0x0026, 0x0016,
--      0x0006, 0x0126, 0xa02e, 0x2071, 0xc927, 0x7638, 0x2660, 0x2678,
--      0x2091, 0x8000, 0x8cff, 0x0904, 0x7a87, 0x6018, 0xa080, 0x0028,
--      0x2004, 0xa206, 0x1904, 0x7a82, 0x87ff, 0x0120, 0x6050, 0xa106,
--      0x1904, 0x7a82, 0x703c, 0xac06, 0x1190, 0x0036, 0x2019, 0x0001,
--      0x080c, 0x8e79, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043, 0x0000,
--      0x7047, 0x0000, 0x704b, 0x0000, 0x003e, 0x2029, 0x0001, 0x7038,
--      0xac36, 0x1110, 0x660c, 0x763a, 0x7034, 0xac36, 0x1140, 0x2c00,
--      0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c,
--      0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
--      0x0000, 0x080c, 0xac8a, 0x01c8, 0x6010, 0x2068, 0x601c, 0xa086,
--      0x0003, 0x1580, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x0016,
--      0x0036, 0x0076, 0x080c, 0xaefc, 0x080c, 0xc4ca, 0x080c, 0x580a,
--      0x007e, 0x003e, 0x001e, 0x080c, 0xae41, 0x080c, 0xae4d, 0x00ce,
--      0x0804, 0x7a22, 0x2c78, 0x600c, 0x2060, 0x0804, 0x7a22, 0x85ff,
--      0x0120, 0x0036, 0x080c, 0x7f6e, 0x003e, 0x012e, 0x000e, 0x001e,
--      0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee,
--      0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x0158, 0x601c, 0xa086,
--      0x0009, 0x1190, 0x684b, 0x0006, 0x080c, 0x580a, 0x080c, 0x95dc,
--      0x08b0, 0x0016, 0x0036, 0x0076, 0x080c, 0xc4ca, 0x080c, 0xc134,
--      0x007e, 0x003e, 0x001e, 0x0848, 0x601c, 0xa086, 0x000a, 0x0904,
--      0x7a6c, 0x0804, 0x7a6a, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x00f6,
--      0x2031, 0x0000, 0x0126, 0x2091, 0x8000, 0x2079, 0xc927, 0x7838,
--      0xa065, 0x0568, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0xac06,
--      0x1180, 0x0036, 0x2019, 0x0001, 0x080c, 0x8e79, 0x7833, 0x0000,
--      0x783f, 0x0000, 0x7843, 0x0000, 0x7847, 0x0000, 0x784b, 0x0000,
--      0x003e, 0x080c, 0xac8a, 0x0178, 0x6010, 0x2068, 0x601c, 0xa086,
--      0x0003, 0x11b0, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c,
--      0x580a, 0x080c, 0xae41, 0x080c, 0xae4d, 0x000e, 0x0888, 0x7e3a,
--      0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005,
--      0x601c, 0xa086, 0x0006, 0x0150, 0x601c, 0xa086, 0x0009, 0x1148,
--      0x6b4a, 0x080c, 0x580a, 0x080c, 0x95dc, 0x0c38, 0x080c, 0xc134,
--      0x0c10, 0x601c, 0xa086, 0x000a, 0x09b8, 0x08a0, 0x0016, 0x0026,
--      0x0086, 0x2041, 0x0000, 0x0099, 0x080c, 0x7be4, 0x008e, 0x002e,
--      0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, 0xc927, 0x2091, 0x8000,
--      0x080c, 0x7c71, 0x080c, 0x7ce3, 0x012e, 0x00fe, 0x0005, 0x00f6,
--      0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091,
--      0x8000, 0x2071, 0xc927, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904,
--      0x7bba, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x1904, 0x7bb5,
--      0x88ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x7bb5, 0x7024, 0xac06,
--      0x1538, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c, 0x7024,
--      0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c, 0x90df, 0x7027, 0x0000,
--      0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803,
--      0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
--      0x6827, 0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a, 0x04e8,
--      0x7014, 0xac36, 0x1110, 0x660c, 0x7616, 0x7010, 0xac36, 0x1140,
--      0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000,
-+      0x60e2, 0xa006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
-+      0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
-+      0x00e6, 0x2061, 0x0100, 0x2071, 0xc600, 0x6020, 0xa084, 0x00c0,
-+      0x01e0, 0x2011, 0x0003, 0x080c, 0x8f27, 0x2011, 0x0002, 0x080c,
-+      0x8f31, 0x080c, 0x8e07, 0x2019, 0x0000, 0x080c, 0x8e92, 0x2069,
-+      0x0140, 0x6803, 0x00a0, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001,
-+      0xc600, 0x2003, 0x0001, 0x0804, 0x6167, 0x2001, 0xc60c, 0x200c,
-+      0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x5df6, 0x2069, 0x0140,
-+      0x080c, 0x25fb, 0x6803, 0x0080, 0x60e3, 0x0000, 0x2069, 0x0200,
-+      0x6804, 0xa005, 0x1118, 0x6808, 0xa005, 0x01c0, 0x6028, 0xa084,
-+      0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0xc90c, 0x7000, 0x206a,
-+      0x708f, 0x0027, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x611e,
-+      0x2091, 0x6000, 0x1f04, 0x611e, 0x0804, 0x6167, 0x6027, 0x1e00,
-+      0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c, 0x01c8, 0xa084, 0x1c00,
-+      0x11b0, 0x1d04, 0x6126, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6,
-+      0x080c, 0x6f23, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6,
-+      0x2071, 0xc93a, 0x7018, 0x00ee, 0xa005, 0x1d00, 0x0500, 0x0026,
-+      0x2011, 0x5e0e, 0x080c, 0x6fc6, 0x2011, 0x5e01, 0x080c, 0x7089,
-+      0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70a4, 0xa005, 0x1118,
-+      0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0xc8d6, 0x2004, 0x080c,
-+      0x2a1c, 0x60e2, 0x2001, 0xc60c, 0x200c, 0xc1b4, 0x2102, 0x00ee,
-+      0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156,
-+      0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100,
-+      0x2071, 0xc600, 0x7130, 0xd184, 0x1180, 0x2011, 0xc653, 0x2214,
-+      0xd2ec, 0x0138, 0xc18d, 0x7132, 0x2011, 0xc653, 0x2214, 0xd2ac,
-+      0x1120, 0x7030, 0xd08c, 0x0904, 0x61d4, 0x7130, 0xc185, 0x7132,
-+      0x2011, 0xc653, 0x220c, 0xd1a4, 0x0530, 0x0016, 0x2019, 0x000e,
-+      0x080c, 0xc126, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000, 0xa186,
-+      0x007e, 0x01a0, 0xa186, 0x0080, 0x0188, 0x080c, 0x5356, 0x1170,
-+      0x8127, 0xa006, 0x0016, 0x2009, 0x000e, 0x080c, 0xc1a9, 0x2009,
-+      0x0001, 0x2011, 0x0100, 0x080c, 0x7147, 0x001e, 0x8108, 0x1f04,
-+      0x619f, 0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0000,
-+      0x2019, 0x0004, 0x080c, 0x2e19, 0x001e, 0x0070, 0x0156, 0x20a9,
-+      0x007f, 0x2009, 0x0000, 0x080c, 0x5356, 0x1110, 0x080c, 0x4f60,
-+      0x8108, 0x1f04, 0x61cb, 0x015e, 0x080c, 0x1f06, 0x2011, 0x0003,
-+      0x080c, 0x8f27, 0x2011, 0x0002, 0x080c, 0x8f31, 0x080c, 0x8e07,
-+      0x0036, 0x2019, 0x0000, 0x080c, 0x8e92, 0x003e, 0x60e3, 0x0000,
-+      0x2001, 0xc600, 0x2003, 0x0001, 0x080c, 0x5e73, 0x00ee, 0x00ce,
-+      0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2071, 0xc702,
-+      0x7003, 0x0000, 0x7007, 0x0000, 0x700f, 0x0000, 0x702b, 0x0001,
-+      0x704f, 0x0000, 0x7053, 0x0001, 0x705f, 0x0020, 0x7063, 0x0040,
-+      0x7083, 0x0000, 0x708b, 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000,
-+      0x0005, 0x00e6, 0x2071, 0xc702, 0x6848, 0xa005, 0x1130, 0x7028,
-+      0xc085, 0x702a, 0xa085, 0x0001, 0x0428, 0x6a50, 0x7236, 0x6b54,
-+      0x733a, 0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848,
-+      0x702e, 0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006,
-+      0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319,
-+      0x7272, 0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f,
-+      0x0000, 0xa006, 0x00ee, 0x0005, 0x2b78, 0x2071, 0xc702, 0x7004,
-+      0x0043, 0x700c, 0x0002, 0x6250, 0x6247, 0x6247, 0x6247, 0x6247,
-+      0x0005, 0x62a6, 0x62a7, 0x62d9, 0x62da, 0x62a4, 0x6328, 0x632d,
-+      0x635e, 0x635f, 0x637a, 0x637b, 0x637c, 0x637d, 0x637e, 0x637f,
-+      0x644a, 0x6471, 0x700c, 0x0002, 0x6269, 0x62a4, 0x62a4, 0x62a5,
-+      0x62a5, 0x7830, 0x7930, 0xa106, 0x0120, 0x7830, 0x7930, 0xa106,
-+      0x1510, 0x7030, 0xa10a, 0x01f8, 0x1210, 0x712c, 0xa10a, 0xa18a,
-+      0x0002, 0x12d0, 0x080c, 0x15e5, 0x01b0, 0x2d00, 0x705a, 0x7063,
-+      0x0040, 0x2001, 0x0003, 0x7057, 0x0000, 0x0126, 0x0006, 0x2091,
-+      0x8000, 0x2009, 0xc959, 0x2104, 0xc085, 0x200a, 0x000e, 0x700e,
-+      0x012e, 0x080c, 0x1669, 0x0005, 0x080c, 0x15e5, 0x0de0, 0x2d00,
-+      0x705a, 0x080c, 0x15e5, 0x1108, 0x0c10, 0x2d00, 0x7086, 0x7063,
-+      0x0080, 0x2001, 0x0004, 0x08f8, 0x0005, 0x0005, 0x0005, 0x700c,
-+      0x0002, 0x62ae, 0x62b1, 0x62bf, 0x62d8, 0x62d8, 0x080c, 0x6262,
-+      0x0005, 0x0126, 0x8001, 0x700e, 0x7058, 0x0006, 0x080c, 0x67ed,
-+      0x0120, 0x2091, 0x8000, 0x080c, 0x6262, 0x00de, 0x0048, 0x0126,
-+      0x8001, 0x700e, 0x080c, 0x67ed, 0x7058, 0x2068, 0x7084, 0x705a,
-+      0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a,
-+      0x003a, 0x1218, 0x00db, 0x012e, 0x0005, 0x012e, 0x080c, 0x6380,
-+      0x0005, 0x0005, 0x0005, 0x00e6, 0x2071, 0xc702, 0x700c, 0x0002,
-+      0x62e5, 0x62e5, 0x62e5, 0x62e7, 0x62ea, 0x00ee, 0x0005, 0x700f,
-+      0x0001, 0x0010, 0x700f, 0x0002, 0x00ee, 0x0005, 0x6380, 0x6380,
-+      0x639c, 0x6380, 0x6557, 0x6380, 0x6380, 0x6380, 0x6380, 0x6380,
-+      0x639c, 0x6599, 0x65dc, 0x6625, 0x6639, 0x6380, 0x6380, 0x63b8,
-+      0x639c, 0x63cc, 0x6380, 0x6427, 0x66e5, 0x6700, 0x6380, 0x63b8,
-+      0x6380, 0x63cc, 0x6380, 0x6380, 0x641d, 0x6700, 0x6380, 0x6380,
-+      0x6380, 0x6380, 0x6380, 0x6380, 0x6380, 0x6380, 0x6380, 0x63e1,
-+      0x6380, 0x6380, 0x6380, 0x6380, 0x6380, 0x6380, 0x6380, 0x6380,
-+      0x6380, 0x687f, 0x6380, 0x680b, 0x6380, 0x680b, 0x6380, 0x63f6,
-+      0x7020, 0x2068, 0x080c, 0x1619, 0x0005, 0x700c, 0x0002, 0x6334,
-+      0x6337, 0x6345, 0x635d, 0x635d, 0x080c, 0x6262, 0x0005, 0x0126,
-+      0x8001, 0x700e, 0x7058, 0x0006, 0x080c, 0x67ed, 0x0120, 0x2091,
-+      0x8000, 0x080c, 0x6262, 0x00de, 0x0048, 0x0126, 0x8001, 0x700e,
-+      0x080c, 0x67ed, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000,
-+      0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, 0x1218,
-+      0x003b, 0x012e, 0x0005, 0x012e, 0x0419, 0x0005, 0x0005, 0x0005,
-+      0x6380, 0x639c, 0x6543, 0x6380, 0x639c, 0x6380, 0x639c, 0x639c,
-+      0x6380, 0x639c, 0x6543, 0x639c, 0x639c, 0x639c, 0x639c, 0x639c,
-+      0x6380, 0x639c, 0x6543, 0x6380, 0x6380, 0x639c, 0x6380, 0x6380,
-+      0x6380, 0x639c, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
-+      0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x5823, 0x012e, 0x0005, 0x7007, 0x0001,
-+      0x6838, 0xa084, 0x00ff, 0xc0e5, 0x683a, 0x0126, 0x2091, 0x8000,
-+      0x080c, 0x5823, 0x012e, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084,
-+      0x00ff, 0xc0ed, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x5823,
-+      0x012e, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd,
-+      0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x5823, 0x012e, 0x0005,
-+      0x6834, 0x8007, 0xa084, 0x00ff, 0x0988, 0x8001, 0x1120, 0x7007,
-+      0x0001, 0x0804, 0x64da, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016,
-+      0x701a, 0x704b, 0x64da, 0x0005, 0x6834, 0x8007, 0xa084, 0x00ff,
-+      0x0904, 0x638e, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x64f7,
-+      0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x64f7,
-+      0x0005, 0x6834, 0x8007, 0xa084, 0x00ff, 0x0904, 0x638e, 0x8001,
-+      0x1120, 0x7007, 0x0001, 0x0804, 0x6520, 0x7007, 0x0006, 0x7012,
-+      0x2d00, 0x7016, 0x701a, 0x704b, 0x6520, 0x0005, 0x6834, 0x8007,
-+      0xa084, 0x00ff, 0xa086, 0x0001, 0x1904, 0x638e, 0x7007, 0x0001,
-+      0x2009, 0xc631, 0x210c, 0x81ff, 0x11a8, 0x6838, 0xa084, 0x00ff,
-+      0x683a, 0x6853, 0x0000, 0x080c, 0x512f, 0x1108, 0x0005, 0x0126,
-+      0x2091, 0x8000, 0x6837, 0x0139, 0x684a, 0x6952, 0x080c, 0x5823,
-+      0x012e, 0x0ca0, 0x2001, 0x0028, 0x0c90, 0x684c, 0xa084, 0x00c0,
-+      0xa086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x6718, 0x2d00,
-+      0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098, 0x20a1,
-+      0xc72d, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x1a04, 0x63aa,
-+      0x6a84, 0xa28a, 0x0002, 0x1a04, 0x63aa, 0x82ff, 0x1138, 0x6888,
-+      0x698c, 0xa105, 0x0118, 0x2001, 0x64ad, 0x0018, 0xa280, 0x64a3,
-+      0x2005, 0x70c6, 0x7010, 0xa015, 0x0904, 0x648f, 0x080c, 0x15e5,
-+      0x1118, 0x7007, 0x000f, 0x0005, 0x2d00, 0x7022, 0x70c4, 0x2060,
-+      0x2c05, 0x6836, 0xe004, 0xad00, 0x7096, 0xe008, 0xa20a, 0x1210,
-+      0xa00e, 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0xa296, 0x0004,
-+      0x0108, 0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x080c,
-+      0x164d, 0x7090, 0xa08e, 0x0100, 0x0170, 0xa086, 0x0200, 0x0118,
-+      0x7007, 0x0010, 0x0005, 0x7020, 0x2068, 0x080c, 0x1619, 0x7014,
-+      0x2068, 0x0804, 0x63aa, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807,
-+      0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, 0x0804, 0x644a, 0x7014,
-+      0x2068, 0x7007, 0x0001, 0x6884, 0xa005, 0x1128, 0x6888, 0x698c,
-+      0xa105, 0x0108, 0x00b1, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e,
-+      0x0904, 0x6718, 0x04b8, 0x64a5, 0x64a9, 0x0002, 0x0011, 0x0007,
-+      0x0004, 0x000a, 0x000f, 0x0005, 0x0006, 0x000a, 0x0011, 0x0005,
-+      0x0004, 0x00f6, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x6f88, 0x6e8c,
-+      0x6804, 0x2060, 0xacf0, 0x0021, 0xacf8, 0x0027, 0x2009, 0x0005,
-+      0x700c, 0x7816, 0x7008, 0x7812, 0x7004, 0x7806, 0x7000, 0x7802,
-+      0x7e0e, 0x7f0a, 0x8109, 0x0128, 0xaef2, 0x0004, 0xaffa, 0x0006,
-+      0x0c78, 0x6004, 0xa065, 0x1d30, 0x006e, 0x007e, 0x00ce, 0x00ee,
-+      0x00fe, 0x0005, 0x2009, 0xc631, 0x210c, 0x81ff, 0x1198, 0x6838,
-+      0xa084, 0x00ff, 0x683a, 0x080c, 0x4fbf, 0x1108, 0x0005, 0x080c,
-+      0x5947, 0x0126, 0x2091, 0x8000, 0x080c, 0xaf1c, 0x080c, 0x5823,
-+      0x012e, 0x0ca0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c80, 0x2009,
-+      0xc631, 0x210c, 0x81ff, 0x11d8, 0x6858, 0xa005, 0x01d8, 0x2001,
-+      0xc756, 0x2004, 0xa086, 0x0000, 0x01c0, 0x6838, 0xa084, 0x00ff,
-+      0x683a, 0x6853, 0x0000, 0x080c, 0x5081, 0x1108, 0x0005, 0x684a,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x5823, 0x012e, 0x0cb8, 0x2001,
-+      0x0028, 0x0ca8, 0x2001, 0x0000, 0x0c90, 0x2001, 0x002c, 0x0c78,
-+      0x2009, 0xc631, 0x210c, 0x81ff, 0x11b0, 0x6858, 0xa005, 0x01c0,
-+      0x6838, 0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x080c, 0x50d3,
-+      0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0x684a, 0x6952, 0x080c,
-+      0x5823, 0x012e, 0x0cb0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c90,
-+      0x2001, 0x0000, 0x0c78, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906,
-+      0x711a, 0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0006, 0x0030,
-+      0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x7007,
-+      0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848, 0xa084, 0x00ff,
-+      0x20a9, 0x0001, 0xa096, 0x0001, 0x01b0, 0x2009, 0x0000, 0x20a9,
-+      0x00ff, 0xa096, 0x0002, 0x0178, 0xa005, 0x11f0, 0x6944, 0x810f,
-+      0xa18c, 0x00ff, 0x080c, 0x5356, 0x11b8, 0x0066, 0x6e50, 0x080c,
-+      0x5455, 0x006e, 0x0088, 0x0046, 0x2011, 0xc60c, 0x2224, 0xc484,
-+      0x2412, 0x004e, 0x00c6, 0x080c, 0x5356, 0x1110, 0x080c, 0x55b6,
-+      0x8108, 0x1f04, 0x6583, 0x00ce, 0x684c, 0xd084, 0x1118, 0x080c,
-+      0x1619, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x5823, 0x012e,
-+      0x0005, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xc653,
-+      0x2004, 0xd0a4, 0x0580, 0x2061, 0xc9bc, 0x6100, 0xd184, 0x0178,
-+      0x6858, 0xa084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004,
-+      0xa005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011,
-+      0x0001, 0x6860, 0xa005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016,
-+      0x6858, 0xa084, 0x00ff, 0x0178, 0x6006, 0x6858, 0x8007, 0xa084,
-+      0x00ff, 0x0148, 0x600a, 0x6858, 0x8000, 0x1108, 0xc28d, 0x6202,
-+      0x012e, 0x0804, 0x67dc, 0x012e, 0x0804, 0x67d6, 0x012e, 0x0804,
-+      0x67d0, 0x012e, 0x0804, 0x67d3, 0x0126, 0x2091, 0x8000, 0x7007,
-+      0x0001, 0x2001, 0xc653, 0x2004, 0xd0a4, 0x05e0, 0x2061, 0xc9bc,
-+      0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0x6c48,
-+      0xa484, 0x0003, 0x0170, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x1120,
-+      0x2100, 0xa210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0xa212,
-+      0x02f0, 0xa484, 0x000c, 0x0188, 0x6958, 0x810f, 0xa18c, 0x00ff,
-+      0xa082, 0x0004, 0x1120, 0x2100, 0xa318, 0x0288, 0x0030, 0xa082,
-+      0x0004, 0x1168, 0x2100, 0xa31a, 0x0250, 0x6860, 0xa005, 0x0110,
-+      0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x67dc, 0x012e,
-+      0x0804, 0x67d9, 0x012e, 0x0804, 0x67d6, 0x0126, 0x2091, 0x8000,
-+      0x7007, 0x0001, 0x2061, 0xc9bc, 0x6300, 0xd38c, 0x1120, 0x6308,
-+      0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x67ea, 0x012e, 0x0804,
-+      0x67d9, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c,
-+      0xd0ac, 0x0148, 0x00c6, 0x2061, 0xc9bc, 0x6000, 0xa084, 0xfcff,
-+      0x6002, 0x00ce, 0x0448, 0x6858, 0xa005, 0x05d0, 0x685c, 0xa065,
-+      0x0598, 0x2001, 0xc631, 0x2004, 0xa005, 0x0118, 0x080c, 0xae6d,
-+      0x0068, 0x6013, 0x0400, 0x6057, 0x0000, 0x694c, 0xd1a4, 0x0110,
-+      0x6950, 0x6156, 0x2009, 0x0041, 0x080c, 0x962c, 0x6958, 0xa18c,
-+      0xff00, 0xa186, 0x2000, 0x1140, 0x0026, 0x2009, 0x0000, 0x2011,
-+      0xfdff, 0x080c, 0x7147, 0x002e, 0x684c, 0xd0c4, 0x0148, 0x2061,
-+      0xc9bc, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a,
-+      0x00ce, 0x012e, 0x0804, 0x67dc, 0x00ce, 0x012e, 0x0804, 0x67d6,
-+      0x6954, 0xa186, 0x002e, 0x0d40, 0xa186, 0x002d, 0x0d28, 0xa186,
-+      0x0045, 0x0528, 0xa186, 0x002a, 0x1130, 0x2001, 0xc60c, 0x200c,
-+      0xc194, 0x2102, 0x08c8, 0xa186, 0x0020, 0x0170, 0xa186, 0x0029,
-+      0x1d18, 0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x5356, 0x1960,
-+      0x6000, 0xc0e4, 0x6002, 0x0840, 0x685c, 0xa065, 0x09a8, 0x6007,
-+      0x0024, 0x2001, 0xc8fd, 0x2004, 0x6016, 0x0804, 0x6674, 0x685c,
-+      0xa065, 0x0950, 0x00e6, 0x6860, 0xa075, 0x2001, 0xc631, 0x2004,
-+      0xa005, 0x0150, 0x080c, 0xae6d, 0x8eff, 0x0118, 0x2e60, 0x080c,
-+      0xae6d, 0x00ee, 0x0804, 0x6674, 0x6020, 0xc0dc, 0xc0d5, 0x6022,
-+      0x2e60, 0x6007, 0x003a, 0x6870, 0xa005, 0x0130, 0x6007, 0x003b,
-+      0x6874, 0x602a, 0x6878, 0x6012, 0x6003, 0x0001, 0x080c, 0x79b2,
-+      0x080c, 0x7ead, 0x00ee, 0x0804, 0x6674, 0x2061, 0xc9bc, 0x6000,
-+      0xd084, 0x0190, 0xd08c, 0x1904, 0x67ea, 0x0126, 0x2091, 0x8000,
-+      0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x67ea, 0x012e,
-+      0x6853, 0x0016, 0x0804, 0x67e3, 0x6853, 0x0007, 0x0804, 0x67e3,
-+      0x6834, 0x8007, 0xa084, 0x00ff, 0x1118, 0x080c, 0x638e, 0x0078,
-+      0x2030, 0x8001, 0x1120, 0x7007, 0x0001, 0x0051, 0x0040, 0x7007,
-+      0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x6718, 0x0005,
-+      0x00e6, 0x0126, 0x2091, 0x8000, 0xa03e, 0x2009, 0xc631, 0x210c,
-+      0x81ff, 0x1904, 0x6796, 0x2009, 0xc60c, 0x210c, 0xd194, 0x1904,
-+      0x67c0, 0x6848, 0x2070, 0xae82, 0xce00, 0x0a04, 0x678a, 0x2001,
-+      0xc617, 0x2004, 0xae02, 0x1a04, 0x678a, 0x711c, 0xa186, 0x0006,
-+      0x1904, 0x6779, 0x7018, 0xa005, 0x0904, 0x6796, 0x2004, 0xd0e4,
-+      0x1904, 0x67bb, 0x2061, 0xc9bc, 0x6100, 0xa184, 0x0301, 0xa086,
-+      0x0001, 0x1550, 0x7020, 0xd0dc, 0x1904, 0x67c3, 0x6853, 0x0000,
-+      0x6803, 0x0000, 0x2d08, 0x7010, 0xa005, 0x1158, 0x7112, 0x684c,
-+      0xd0f4, 0x1904, 0x67c6, 0x2e60, 0x080c, 0x70a3, 0x012e, 0x00ee,
-+      0x0005, 0x2068, 0x6800, 0xa005, 0x1de0, 0x6902, 0x2168, 0x684c,
-+      0xd0f4, 0x1904, 0x67c6, 0x012e, 0x00ee, 0x0005, 0x012e, 0x00ee,
-+      0x6853, 0x0006, 0x0804, 0x67e3, 0xd184, 0x0dc0, 0xd1c4, 0x11a8,
-+      0x00b8, 0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x5356, 0x15d8,
-+      0x6000, 0xd0e4, 0x15c0, 0x711c, 0xa186, 0x0007, 0x1118, 0x6853,
-+      0x0002, 0x0498, 0x6853, 0x0008, 0x0480, 0x6853, 0x000e, 0x0468,
-+      0x6853, 0x0017, 0x0450, 0x6853, 0x0035, 0x0438, 0x2001, 0xc672,
-+      0x2004, 0xd0fc, 0x01e8, 0x6848, 0x2070, 0xae82, 0xce00, 0x02c0,
-+      0x605c, 0xae02, 0x12a8, 0x711c, 0xa186, 0x0006, 0x1188, 0x7018,
-+      0xa005, 0x0170, 0x2004, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000,
-+      0xa086, 0x0007, 0x1904, 0x6723, 0x7003, 0x0002, 0x0804, 0x6723,
-+      0x6853, 0x0028, 0x0010, 0x6853, 0x0029, 0x012e, 0x00ee, 0x0418,
-+      0x6853, 0x002a, 0x0cd0, 0x6853, 0x0045, 0x0cb8, 0x2e60, 0x2019,
-+      0x0002, 0x6017, 0x0014, 0x080c, 0xbd6e, 0x012e, 0x00ee, 0x0005,
-+      0x2009, 0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006,
-+      0x0028, 0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0x6854, 0xa084,
-+      0xff00, 0xa105, 0x6856, 0x0126, 0x2091, 0x8000, 0x080c, 0x5823,
-+      0x012e, 0x0005, 0x080c, 0x1619, 0x0005, 0x702c, 0x7130, 0x8108,
-+      0xa102, 0x0230, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0058,
-+      0x7070, 0xa080, 0x0040, 0x7072, 0x1230, 0x7074, 0xa081, 0x0000,
-+      0x7076, 0xa085, 0x0001, 0x7932, 0x7132, 0x0005, 0x00d6, 0x080c,
-+      0x709a, 0x00de, 0x0005, 0x2001, 0xc756, 0x2004, 0xa086, 0x0000,
-+      0x0904, 0x6866, 0x080c, 0x76a8, 0x0904, 0x6869, 0x6868, 0xa084,
-+      0x0007, 0x0904, 0x685d, 0x080c, 0x95a6, 0x0904, 0x6860, 0x2d00,
-+      0x6012, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0035, 0x1198, 0x2001,
-+      0xc8e5, 0x2004, 0xa086, 0xaaaa, 0x0130, 0x2001, 0xc635, 0x2004,
-+      0xa084, 0x0028, 0x05c8, 0x6008, 0xc0fd, 0x600a, 0x2001, 0xc8d3,
-+      0x2004, 0x0098, 0x6870, 0xa084, 0x00ff, 0x696c, 0xa18c, 0xff00,
-+      0xa105, 0x696c, 0xa18c, 0x00ff, 0x080c, 0x29c7, 0x11e0, 0x00c6,
-+      0x080c, 0x5356, 0x2c00, 0x00ce, 0x11b0, 0x601a, 0x601f, 0x0001,
-+      0x2009, 0x0040, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0035, 0x0110,
-+      0x2009, 0x0041, 0x080c, 0x962c, 0x0005, 0x684b, 0x0101, 0x0078,
-+      0x684b, 0x002c, 0x0060, 0x684b, 0x0028, 0x0080, 0x684b, 0x0104,
-+      0x0030, 0x684b, 0x0105, 0x0018, 0x684b, 0x0106, 0x0038, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x5823, 0x012e, 0x0005, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x5823, 0x012e, 0x080c, 0x95fc, 0x0005, 0x00d6,
-+      0x00c6, 0x0036, 0x0026, 0x0016, 0x7007, 0x0001, 0x6a44, 0xa282,
-+      0x0004, 0x1a04, 0x68ca, 0xd284, 0x0170, 0x6a4c, 0xa290, 0xc77b,
-+      0x2204, 0xa065, 0x6004, 0x05e0, 0x8007, 0xa084, 0x00ff, 0xa084,
-+      0x0006, 0x1108, 0x04a8, 0x2c10, 0x080c, 0x95a6, 0x1118, 0x080c,
-+      0xaf26, 0x05a0, 0x621a, 0x6844, 0x0002, 0x68a9, 0x68ae, 0x68b1,
-+      0x68b7, 0x2019, 0x0002, 0x080c, 0xc126, 0x0060, 0x080c, 0xc0bd,
-+      0x0048, 0x2019, 0x0002, 0x6950, 0x080c, 0xc0d8, 0x0018, 0x6950,
-+      0x080c, 0xc0bd, 0x080c, 0x95fc, 0x6857, 0x0000, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x5823, 0x012e, 0x001e, 0x002e, 0x003e, 0x00ce,
-+      0x00de, 0x0005, 0x6857, 0x0006, 0x0c88, 0x6857, 0x0002, 0x0c70,
-+      0x6857, 0x0005, 0x0c58, 0x6857, 0x0004, 0x0c40, 0x6857, 0x0007,
-+      0x0c28, 0x00d6, 0x2011, 0x0004, 0x2204, 0xa085, 0x8002, 0x2012,
-+      0x00de, 0x0005, 0x20e1, 0x0002, 0x3d08, 0x20e1, 0x2000, 0x3d00,
-+      0xa084, 0x7000, 0x0118, 0xa086, 0x1000, 0x15e0, 0x20e1, 0x0000,
-+      0x3d00, 0xa094, 0xff00, 0x8217, 0xa084, 0xf000, 0xa086, 0x3000,
-+      0x1160, 0xa184, 0xff00, 0x8007, 0xa086, 0x0008, 0x1558, 0x080c,
-+      0x2f69, 0x1540, 0x080c, 0x6b4b, 0x0400, 0x20e1, 0x0004, 0x3d60,
-+      0xd1bc, 0x1170, 0x2100, 0xa084, 0xff00, 0xa086, 0x0500, 0x1138,
-+      0x0026, 0x2c10, 0x080c, 0x6da9, 0x002e, 0x01a0, 0x0070, 0x3e60,
-+      0xac84, 0x0007, 0x1178, 0xac82, 0xce00, 0x0260, 0x685c, 0xac02,
-+      0x1248, 0x2009, 0x0047, 0x080c, 0x962c, 0x7a1c, 0xd284, 0x1904,
-+      0x68e2, 0x0005, 0xa016, 0x080c, 0x1870, 0x0cb8, 0x0cd8, 0x781c,
-+      0xd08c, 0x0500, 0x0156, 0x0136, 0x0146, 0x20e1, 0x3000, 0x3d20,
-+      0x3e28, 0xa584, 0x0076, 0x1538, 0xa484, 0x7000, 0xa086, 0x1000,
-+      0x11a8, 0x080c, 0x69aa, 0x01f8, 0x20e1, 0x3000, 0x7828, 0x7828,
-+      0x080c, 0x69c6, 0x014e, 0x013e, 0x015e, 0x2009, 0xc92f, 0x2104,
-+      0xa005, 0x1108, 0x0005, 0x080c, 0x7ead, 0x0ce0, 0xa484, 0x7000,
-+      0x1548, 0x080c, 0x69aa, 0x01d8, 0x7000, 0xa084, 0xff00, 0xa086,
-+      0x8100, 0x0d10, 0x00a0, 0xd5a4, 0x0178, 0x0056, 0x0046, 0x080c,
-+      0x1f2d, 0x080c, 0x25fb, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138,
-+      0x2202, 0x004e, 0x005e, 0x0048, 0x04a9, 0x6887, 0x0000, 0x080c,
-+      0xc54f, 0x20e1, 0x3000, 0x7828, 0x7828, 0x00b9, 0x014e, 0x013e,
-+      0x015e, 0x0880, 0x0439, 0x1130, 0x7000, 0xa084, 0xff00, 0xa086,
-+      0x8100, 0x1d68, 0x080c, 0xc54f, 0x20e1, 0x3000, 0x7828, 0x7828,
-+      0x0056, 0x080c, 0x6e38, 0x005e, 0x0c40, 0x2001, 0xc60e, 0x2004,
-+      0xd08c, 0x0178, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1148,
-+      0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x4096, 0x003e,
-+      0x002e, 0x0005, 0xa484, 0x01ff, 0x6886, 0xa005, 0x0160, 0xa080,
-+      0x001f, 0xa084, 0x03f8, 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099,
-+      0x020a, 0x53a5, 0x0005, 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0,
-+      0x2099, 0x020a, 0x53a5, 0xa085, 0x0001, 0x0ca0, 0x7000, 0xa084,
-+      0xff00, 0xa08c, 0xf000, 0x8007, 0xa196, 0x0000, 0x1118, 0x0804,
-+      0x6c50, 0x0005, 0xa196, 0x2000, 0x1148, 0x6900, 0xa18e, 0x0001,
-+      0x1118, 0x080c, 0x47e4, 0x0ca8, 0x0039, 0x0c98, 0xa196, 0x8000,
-+      0x1d80, 0x080c, 0x6cfc, 0x0c68, 0x00c6, 0x6a84, 0x82ff, 0x0904,
-+      0x6b45, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa196, 0x0001, 0x0120,
-+      0xa196, 0x0023, 0x1904, 0x6b45, 0xa08e, 0x0023, 0x1570, 0x080c,
-+      0x6d97, 0x0904, 0x6b45, 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200,
-+      0x1150, 0x7034, 0xa005, 0x1904, 0x6b45, 0x2009, 0x0015, 0x080c,
-+      0x962c, 0x0804, 0x6b45, 0xa08e, 0x0214, 0x0118, 0xa08e, 0x0210,
-+      0x1130, 0x2009, 0x0015, 0x080c, 0x962c, 0x0804, 0x6b45, 0xa08e,
-+      0x0100, 0x1904, 0x6b45, 0x7034, 0xa005, 0x1904, 0x6b45, 0x2009,
-+      0x0016, 0x080c, 0x962c, 0x0804, 0x6b45, 0xa08e, 0x0022, 0x1904,
-+      0x6b45, 0x7030, 0xa08e, 0x0300, 0x1580, 0x68d4, 0xd0a4, 0x0528,
-+      0xc0b5, 0x68d6, 0x7100, 0xa18c, 0x00ff, 0x6972, 0x7004, 0x6876,
-+      0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0xa084, 0x00ff,
-+      0x0016, 0x2008, 0x080c, 0x29f1, 0x7932, 0x7936, 0x001e, 0x000e,
-+      0x00fe, 0x080c, 0x29c7, 0x6952, 0x703c, 0x00e6, 0x2071, 0x0140,
-+      0x7086, 0x2071, 0xc600, 0x70a6, 0x00ee, 0x7034, 0xa005, 0x1904,
-+      0x6b45, 0x2009, 0x0017, 0x0804, 0x6b0b, 0xa08e, 0x0400, 0x1158,
-+      0x7034, 0xa005, 0x1904, 0x6b45, 0x68d4, 0xc0a5, 0x68d6, 0x2009,
-+      0x0030, 0x0804, 0x6b0b, 0xa08e, 0x0500, 0x1140, 0x7034, 0xa005,
-+      0x1904, 0x6b45, 0x2009, 0x0018, 0x0804, 0x6b0b, 0xa08e, 0x2010,
-+      0x1120, 0x2009, 0x0019, 0x0804, 0x6b0b, 0xa08e, 0x2110, 0x1120,
-+      0x2009, 0x001a, 0x0804, 0x6b0b, 0xa08e, 0x5200, 0x1140, 0x7034,
-+      0xa005, 0x1904, 0x6b45, 0x2009, 0x001b, 0x0804, 0x6b0b, 0xa08e,
-+      0x5000, 0x1140, 0x7034, 0xa005, 0x1904, 0x6b45, 0x2009, 0x001c,
-+      0x0804, 0x6b0b, 0xa08e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804,
-+      0x6b0b, 0xa08e, 0x1200, 0x1140, 0x7034, 0xa005, 0x1904, 0x6b45,
-+      0x2009, 0x0024, 0x0804, 0x6b0b, 0xa08c, 0xff00, 0xa18e, 0x2400,
-+      0x1120, 0x2009, 0x002d, 0x0804, 0x6b0b, 0xa08c, 0xff00, 0xa18e,
-+      0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x6b0b, 0xa08e, 0x0f00,
-+      0x1120, 0x2009, 0x0020, 0x0804, 0x6b0b, 0xa08e, 0x5300, 0x1108,
-+      0x00d8, 0xa08e, 0x6104, 0x11c0, 0x2011, 0xcc8d, 0x8208, 0x2204,
-+      0xa082, 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011, 0x8015, 0x211c,
-+      0x8108, 0x0046, 0x2124, 0x080c, 0x4096, 0x004e, 0x8108, 0x1f04,
-+      0x6ad5, 0x2009, 0x0023, 0x0438, 0xa08e, 0x6000, 0x1118, 0x2009,
-+      0x003f, 0x0408, 0xa08e, 0x5400, 0x1158, 0x080c, 0x6e92, 0x1904,
-+      0x6b45, 0x2009, 0x0046, 0x0016, 0x2001, 0xc8d3, 0x2064, 0x0498,
-+      0xa08e, 0x5500, 0x1140, 0x080c, 0x6ec5, 0x2009, 0x0041, 0x0158,
-+      0x2009, 0x0042, 0x0040, 0xa08e, 0x7800, 0x1118, 0x2009, 0x0045,
-+      0x0010, 0x2009, 0x001d, 0x0016, 0x2011, 0xcc83, 0x2204, 0x8211,
-+      0x220c, 0x080c, 0x29c7, 0x1598, 0x080c, 0x52fa, 0x1580, 0x6612,
-+      0x6516, 0x86ff, 0x01e8, 0x001e, 0x0016, 0xa186, 0x0017, 0x1158,
-+      0x6870, 0xa606, 0x11a8, 0x6874, 0xa506, 0xa084, 0xff00, 0x1180,
-+      0x6000, 0xc0f5, 0x6002, 0xa186, 0x0046, 0x1150, 0x6870, 0xa606,
-+      0x1138, 0x6874, 0xa506, 0xa084, 0xff00, 0x1110, 0x001e, 0x0068,
-+      0x00c6, 0x080c, 0x95a6, 0x0168, 0x001e, 0x611a, 0x601f, 0x0004,
-+      0x7120, 0x610a, 0x001e, 0x080c, 0x962c, 0x00ce, 0x0005, 0x001e,
-+      0x0ce0, 0x00ce, 0x0ce0, 0x00c6, 0x0046, 0x080c, 0x6b9f, 0x1904,
-+      0x6b9c, 0xa28e, 0x0033, 0x11e8, 0x080c, 0x6d97, 0x0904, 0x6b9c,
-+      0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x1140, 0x7034, 0xa005,
-+      0x15d8, 0x2009, 0x0015, 0x080c, 0x962c, 0x04b0, 0xa08e, 0x0100,
-+      0x1598, 0x7034, 0xa005, 0x1580, 0x2009, 0x0016, 0x080c, 0x962c,
-+      0x0458, 0xa28e, 0x0032, 0x1540, 0x7030, 0xa08e, 0x1400, 0x1520,
-+      0x2009, 0x0038, 0x0016, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c,
-+      0x080c, 0x29c7, 0x11c0, 0x080c, 0x52fa, 0x11a8, 0x6612, 0x6516,
-+      0x00c6, 0x080c, 0x95a6, 0x0170, 0x001e, 0x611a, 0x080c, 0xb077,
-+      0x601f, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x962c, 0x080c,
-+      0x7ead, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x0005, 0x00f6,
-+      0x00d6, 0x0026, 0x0016, 0x0136, 0x0146, 0x0156, 0x3c00, 0x0006,
-+      0x2079, 0x0030, 0x2069, 0x0200, 0x080c, 0x1fec, 0x1590, 0x080c,
-+      0x1e97, 0x05e0, 0x04f1, 0x1130, 0x7908, 0xa18c, 0x1fff, 0xa182,
-+      0x0011, 0x1688, 0x20a9, 0x000c, 0x20e1, 0x0000, 0x2ea0, 0x2099,
-+      0x020a, 0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, 0x7a0c,
-+      0x7808, 0xa080, 0x0007, 0xa084, 0x1ff8, 0x0419, 0x1120, 0xa08a,
-+      0x0140, 0x1a0c, 0x1519, 0x80ac, 0x20e1, 0x6000, 0x2099, 0x020a,
-+      0x53a5, 0x20e1, 0x7000, 0x6828, 0x6828, 0x7803, 0x0004, 0xa294,
-+      0x0070, 0x000e, 0x20e0, 0x015e, 0x014e, 0x013e, 0x001e, 0x002e,
-+      0x00de, 0x00fe, 0x0005, 0xa016, 0x080c, 0x1870, 0xa085, 0x0001,
-+      0x0c80, 0x0006, 0x2001, 0x0111, 0x2004, 0xa084, 0x0003, 0x000e,
-+      0x0005, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0xa696, 0x00ff,
-+      0x1198, 0xa596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804, 0x6c4b,
-+      0xa596, 0xfffe, 0x1118, 0x2009, 0x007e, 0x04e8, 0xa596, 0xfffc,
-+      0x1118, 0x2009, 0x0080, 0x04b8, 0x2011, 0x0000, 0x2019, 0xc635,
-+      0x231c, 0xd3ac, 0x0138, 0x2021, 0x0000, 0x20a9, 0x00ff, 0x2071,
-+      0xc77b, 0x0030, 0x2021, 0x0081, 0x20a9, 0x007e, 0x2071, 0xc7fc,
-+      0x2e1c, 0x83ff, 0x1128, 0x82ff, 0x1198, 0x2410, 0xc2fd, 0x0080,
-+      0x2368, 0x6f10, 0x0006, 0x2100, 0xa706, 0x000e, 0x6b14, 0x1120,
-+      0xa346, 0x1110, 0x2408, 0x0078, 0x87ff, 0x1110, 0x83ff, 0x0d58,
-+      0x8420, 0x8e70, 0x1f04, 0x6c28, 0x82ff, 0x1118, 0xa085, 0x0001,
-+      0x0018, 0xc2fc, 0x2208, 0xa006, 0x00de, 0x00ee, 0x004e, 0x0005,
-+      0xa084, 0x0007, 0x000a, 0x0005, 0x6c5c, 0x6c5c, 0x6c5c, 0x6e25,
-+      0x6c5c, 0x6c5d, 0x6c72, 0x6ce7, 0x0005, 0x7110, 0xd1bc, 0x0188,
-+      0x7120, 0x2160, 0xac8c, 0x0007, 0x1160, 0xac8a, 0xce00, 0x0248,
-+      0x685c, 0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0046, 0x080c,
-+      0x962c, 0x0005, 0x00c6, 0xa484, 0x01ff, 0x0904, 0x6cc5, 0x7110,
-+      0xd1bc, 0x1904, 0x6cc5, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c,
-+      0x080c, 0x29c7, 0x1904, 0x6cc5, 0x080c, 0x52fa, 0x15f0, 0x6612,
-+      0x6516, 0x6000, 0xd0ec, 0x15c8, 0x6204, 0xa294, 0xff00, 0x8217,
-+      0xa286, 0x0006, 0x0148, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006,
-+      0x11a0, 0xa295, 0x0600, 0x6206, 0x00c6, 0x080c, 0x95a6, 0x001e,
-+      0x0530, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x7130, 0x6152,
-+      0x2009, 0x0044, 0x080c, 0x962c, 0x00c0, 0x00c6, 0x080c, 0x95a6,
-+      0x001e, 0x0198, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286,
-+      0x0004, 0x1118, 0x6007, 0x0005, 0x0010, 0x6007, 0x0001, 0x6003,
-+      0x0001, 0x080c, 0x79f8, 0x080c, 0x7ead, 0x00ce, 0x0005, 0x2001,
-+      0xc60d, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4096,
-+      0x00c6, 0x080c, 0xaf26, 0x001e, 0x0d80, 0x611a, 0x601f, 0x0006,
-+      0x7120, 0x610a, 0x7130, 0x6152, 0x6013, 0x0300, 0x6003, 0x0001,
-+      0x6007, 0x0041, 0x080c, 0x79b2, 0x080c, 0x7ead, 0x08f0, 0x7110,
-+      0xd1bc, 0x0188, 0x7020, 0x2060, 0xac84, 0x0007, 0x1160, 0xac82,
-+      0xce00, 0x0248, 0x685c, 0xac02, 0x1230, 0x7124, 0x610a, 0x2009,
-+      0x0045, 0x080c, 0x962c, 0x0005, 0x0006, 0x080c, 0x2f69, 0x000e,
-+      0x1168, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x1130,
-+      0xa084, 0x000f, 0xa08a, 0x0006, 0x1208, 0x000b, 0x0005, 0x6d15,
-+      0x6d16, 0x6d15, 0x6d15, 0x6d7f, 0x6d8b, 0x0005, 0x7110, 0xd1bc,
-+      0x0120, 0x702c, 0xd084, 0x0904, 0x6d7e, 0x700c, 0x7108, 0x080c,
-+      0x29c7, 0x1904, 0x6d7e, 0x080c, 0x52fa, 0x1904, 0x6d7e, 0x6612,
-+      0x6516, 0x6204, 0x7110, 0xd1bc, 0x01f8, 0xa28c, 0x00ff, 0xa186,
-+      0x0004, 0x0118, 0xa186, 0x0006, 0x15c8, 0x00c6, 0x080c, 0x6d97,
-+      0x00ce, 0x0904, 0x6d7e, 0x00c6, 0x080c, 0x95a6, 0x001e, 0x05f0,
-+      0x611a, 0x080c, 0xb077, 0x601f, 0x0002, 0x7120, 0x610a, 0x2009,
-+      0x0088, 0x080c, 0x962c, 0x0490, 0xa28c, 0x00ff, 0xa186, 0x0006,
-+      0x0160, 0xa186, 0x0004, 0x0148, 0xa294, 0xff00, 0x8217, 0xa286,
-+      0x0004, 0x0118, 0xa286, 0x0006, 0x1188, 0x00c6, 0x080c, 0x95a6,
-+      0x001e, 0x01e0, 0x611a, 0x080c, 0xb077, 0x601f, 0x0005, 0x7120,
-+      0x610a, 0x2009, 0x0088, 0x080c, 0x962c, 0x0080, 0x00c6, 0x080c,
-+      0x95a6, 0x001e, 0x0158, 0x611a, 0x080c, 0xb077, 0x601f, 0x0004,
-+      0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x962c, 0x0005, 0x7110,
-+      0xd1bc, 0x0140, 0x00a1, 0x0130, 0x7124, 0x610a, 0x2009, 0x0089,
-+      0x080c, 0x962c, 0x0005, 0x7110, 0xd1bc, 0x0140, 0x0041, 0x0130,
-+      0x7124, 0x610a, 0x2009, 0x008a, 0x080c, 0x962c, 0x0005, 0x7020,
-+      0x2060, 0xac84, 0x0007, 0x1158, 0xac82, 0xce00, 0x0240, 0x2001,
-+      0xc617, 0x2004, 0xac02, 0x1218, 0xa085, 0x0001, 0x0005, 0xa006,
-+      0x0ce8, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x2f69, 0x1904, 0x6e20,
-+      0x2001, 0xc756, 0x2004, 0xa086, 0x0000, 0x0904, 0x6e20, 0x20e1,
-+      0x0000, 0x3d08, 0xa18c, 0x00ff, 0xa18e, 0x00ff, 0x1500, 0x3e00,
-+      0xa086, 0xffff, 0x11e0, 0x2001, 0xc8d3, 0x2064, 0x2009, 0x00ff,
-+      0x0006, 0x0016, 0x2001, 0xc61d, 0x2004, 0x20e1, 0x0001, 0x3e08,
-+      0xa106, 0x1130, 0x2001, 0xc61c, 0x2004, 0x3d08, 0xa106, 0x0118,
-+      0x001e, 0x000e, 0x00a8, 0x001e, 0x000e, 0x0804, 0x6e20, 0x20e1,
-+      0x0001, 0x3d08, 0x3e00, 0x0156, 0x080c, 0x29c7, 0x015e, 0x15c0,
-+      0x080c, 0x5356, 0x0128, 0x2001, 0xc8d3, 0x2064, 0x2009, 0x00ff,
-+      0x2138, 0x873f, 0x2c00, 0x2070, 0x20e1, 0x0003, 0x3d18, 0x831f,
-+      0xa39c, 0x00ff, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0xa086,
-+      0x1000, 0x0120, 0x080c, 0x7603, 0x11d8, 0x0080, 0x080c, 0x95a6,
-+      0x01b8, 0x20e1, 0x0002, 0x3e08, 0xd19c, 0x0118, 0x6124, 0xc19d,
-+      0x6126, 0x2e00, 0x601a, 0x620a, 0x601f, 0x0009, 0x2009, 0x0101,
-+      0x080c, 0x962c, 0xa085, 0x0001, 0x00ee, 0x00de, 0x00ce, 0x0005,
-+      0xa006, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x7110, 0xd1bc, 0x1178,
-+      0x7024, 0x2060, 0xac84, 0x0007, 0x1150, 0xac82, 0xce00, 0x0238,
-+      0x685c, 0xac02, 0x1220, 0x2009, 0x0051, 0x080c, 0x962c, 0x0005,
-+      0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049, 0x0005,
-+      0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009, 0x0005,
-+      0x00c6, 0x00d6, 0x00f6, 0x7000, 0xa084, 0xf000, 0xa086, 0xc000,
-+      0x05b0, 0x080c, 0x95a6, 0x0598, 0x0066, 0x00c6, 0x0046, 0x2011,
-+      0xcc83, 0x2204, 0x8211, 0x220c, 0x080c, 0x29c7, 0x1580, 0x080c,
-+      0x52fa, 0x1568, 0x6612, 0x6516, 0x2c00, 0x004e, 0x00ce, 0x601a,
-+      0x080c, 0xb077, 0x080c, 0x1602, 0x01f0, 0x2d00, 0x6056, 0x6803,
-+      0x0000, 0x6837, 0x0000, 0x6c3a, 0xadf8, 0x000f, 0x20a9, 0x000e,
-+      0x2fa0, 0x2e98, 0x53a3, 0x006e, 0x6612, 0x6007, 0x003e, 0x601f,
-+      0x0001, 0x6003, 0x0001, 0x080c, 0x79f8, 0x080c, 0x7ead, 0x00fe,
-+      0x00de, 0x00ce, 0x0005, 0x080c, 0x95fc, 0x006e, 0x0cc0, 0x004e,
-+      0x00ce, 0x0cc8, 0x0156, 0x0046, 0x2e00, 0xa0a0, 0x000e, 0x2404,
-+      0x2020, 0x8427, 0xa4a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0003,
-+      0x2019, 0xc606, 0x2011, 0xcc9b, 0x080c, 0xa11c, 0x11d8, 0xd48c,
-+      0x0148, 0x20a9, 0x0003, 0x2019, 0xc602, 0x2011, 0xcc9f, 0x080c,
-+      0xa11c, 0x1180, 0xd494, 0x0170, 0x080c, 0x76ad, 0x0148, 0x20a9,
-+      0x0008, 0x2019, 0xc69a, 0x2011, 0xccaa, 0x080c, 0xa131, 0x0010,
-+      0xa085, 0x0001, 0x004e, 0x015e, 0x0005, 0x0156, 0x0046, 0x2e00,
-+      0xa0a0, 0x000e, 0x2404, 0x2020, 0x8427, 0xa4a4, 0x0007, 0xd484,
-+      0x0148, 0x20a9, 0x0003, 0x2019, 0xc606, 0x2011, 0xcc93, 0x080c,
-+      0xa11c, 0x11d8, 0xd48c, 0x0148, 0x20a9, 0x0003, 0x2019, 0xc602,
-+      0x2011, 0xcc97, 0x080c, 0xa11c, 0x1180, 0xd494, 0x0170, 0x080c,
-+      0x76ad, 0x0148, 0x20a9, 0x0008, 0x2019, 0xc69a, 0x2011, 0xcca2,
-+      0x080c, 0xa131, 0x0010, 0xa085, 0x0001, 0x004e, 0x015e, 0x0005,
-+      0x2071, 0xc93a, 0x7003, 0x0003, 0x700f, 0x0361, 0xa006, 0x701a,
-+      0x7076, 0x7012, 0x7017, 0xce00, 0x7007, 0x0000, 0x7026, 0x702b,
-+      0x8c25, 0x7032, 0x7037, 0x8c85, 0x703b, 0xffff, 0x703f, 0xffff,
-+      0x7042, 0x7047, 0x47a0, 0x704a, 0x705b, 0x7058, 0x2001, 0xc8e8,
-+      0x2003, 0x0003, 0x2001, 0xc8ea, 0x2003, 0x0100, 0x3a00, 0xa084,
-+      0x0005, 0x706e, 0x0005, 0x2071, 0xc93a, 0x1d04, 0x6fb5, 0x2091,
-+      0x6000, 0x700c, 0x8001, 0x700e, 0x1518, 0x700f, 0x0361, 0x7007,
-+      0x0001, 0x0126, 0x2091, 0x8000, 0x7040, 0xa00d, 0x0128, 0x8109,
-+      0x7142, 0x1110, 0x7044, 0x080f, 0x00c6, 0x2061, 0xc600, 0x6034,
-+      0x00ce, 0xd0cc, 0x0180, 0x3a00, 0xa084, 0x0005, 0x726c, 0xa216,
-+      0x0150, 0x706e, 0x2011, 0x8043, 0x2018, 0x080c, 0x4096, 0x0018,
-+      0x0126, 0x2091, 0x8000, 0x7024, 0xa00d, 0x0188, 0x7020, 0x8001,
-+      0x7022, 0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0xa186, 0x03e8,
-+      0x1110, 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030,
-+      0xa00d, 0x0180, 0x702c, 0x8001, 0x702e, 0x1160, 0x702f, 0x0009,
-+      0x8109, 0x7132, 0x0128, 0xa184, 0x007f, 0x090c, 0x8ce1, 0x0010,
-+      0x7034, 0x080f, 0x7038, 0xa005, 0x0118, 0x0310, 0x8001, 0x703a,
-+      0x703c, 0xa005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0xa00d,
-+      0x0168, 0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109,
-+      0x714e, 0x1120, 0x7150, 0x714e, 0x7058, 0x080f, 0x7018, 0xa00d,
-+      0x01d8, 0x0016, 0x7074, 0xa00d, 0x0158, 0x7070, 0x8001, 0x7072,
-+      0x1138, 0x7073, 0x0009, 0x8109, 0x7176, 0x1110, 0x7078, 0x080f,
-+      0x001e, 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109,
-+      0x711a, 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x6fdb,
-+      0x6fdc, 0x6ff4, 0x00e6, 0x2071, 0xc93a, 0x7018, 0xa005, 0x1120,
-+      0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006,
-+      0x2071, 0xc93a, 0x701c, 0xa206, 0x1110, 0x701a, 0x701e, 0x000e,
-+      0x00ee, 0x0005, 0x00e6, 0x2071, 0xc93a, 0x6088, 0xa102, 0x0208,
-+      0x618a, 0x00ee, 0x0005, 0x0005, 0x7110, 0x080c, 0x5356, 0x1158,
-+      0x6088, 0x8001, 0x0240, 0x608a, 0x1130, 0x0126, 0x2091, 0x8000,
-+      0x080c, 0x7ead, 0x012e, 0x8108, 0xa182, 0x00ff, 0x0218, 0xa00e,
-+      0x7007, 0x0002, 0x7112, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091,
-+      0x8000, 0x603c, 0xa005, 0x0128, 0x8001, 0x603e, 0x1110, 0x080c,
-+      0xaf65, 0x6014, 0xa005, 0x0518, 0x8001, 0x6016, 0x1500, 0x611c,
-+      0xa186, 0x0003, 0x0130, 0xa186, 0x0006, 0x0118, 0xa186, 0x0009,
-+      0x11a0, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0270, 0xa082,
-+      0x1999, 0x6856, 0xa08a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
-+      0x800b, 0x810b, 0xa108, 0x6116, 0x0010, 0x080c, 0xaa35, 0x012e,
-+      0xac88, 0x0018, 0x7116, 0x2001, 0xfe00, 0xa102, 0x0220, 0x7017,
-+      0xce00, 0x7007, 0x0000, 0x0005, 0x00e6, 0x2071, 0xc93a, 0x7027,
-+      0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0xc943, 0x2003,
-+      0x0000, 0x0005, 0x00e6, 0x2071, 0xc93a, 0x7132, 0x702f, 0x0009,
-+      0x00ee, 0x0005, 0x2011, 0xc946, 0x2013, 0x0000, 0x0005, 0x00e6,
-+      0x2071, 0xc93a, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005,
-+      0x00c6, 0x0026, 0x7054, 0x8000, 0x7056, 0x2061, 0xc8e8, 0x6008,
-+      0xa086, 0x0000, 0x0158, 0x7068, 0x6032, 0x7064, 0x602e, 0x7060,
-+      0x602a, 0x705c, 0x6026, 0x2c10, 0x080c, 0x164d, 0x002e, 0x00ce,
-+      0x0005, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c,
-+      0x6f23, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x0005,
-+      0x00e6, 0x2071, 0xc93a, 0x7176, 0x727a, 0x7073, 0x0009, 0x00ee,
-+      0x0005, 0x00e6, 0x0006, 0x2071, 0xc93a, 0x7078, 0xa206, 0x1110,
-+      0x7076, 0x707a, 0x000e, 0x00ee, 0x0005, 0x00c6, 0x2061, 0xc9bc,
-+      0x00ce, 0x0005, 0xa184, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080,
-+      0xc9bc, 0x2060, 0x0005, 0x6854, 0xa08a, 0x199a, 0x0210, 0x2001,
-+      0x1999, 0xa005, 0x1150, 0x00c6, 0x2061, 0xc9bc, 0x6014, 0x00ce,
-+      0xa005, 0x1138, 0x2001, 0x001e, 0x0020, 0xa08e, 0xffff, 0x1108,
-+      0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c, 0xa08c,
-+      0x00c0, 0xa18e, 0x00c0, 0x05e8, 0xd0b4, 0x1138, 0xd0bc, 0x1550,
-+      0x2009, 0x0006, 0x080c, 0x711e, 0x0005, 0xd0fc, 0x0138, 0xa084,
-+      0x0003, 0x0120, 0xa086, 0x0003, 0x1904, 0x7118, 0x6020, 0xd0d4,
-+      0x0130, 0xc0d4, 0x6022, 0x6860, 0x602a, 0x685c, 0x602e, 0x2009,
-+      0xc674, 0x2104, 0xd084, 0x0138, 0x87ff, 0x1120, 0x2009, 0x0042,
-+      0x080c, 0x962c, 0x0005, 0x87ff, 0x1120, 0x2009, 0x0043, 0x080c,
-+      0x962c, 0x0005, 0xd0fc, 0x0130, 0xa084, 0x0003, 0x0118, 0xa086,
-+      0x0003, 0x11f0, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, 0x962c,
-+      0x0005, 0xd0fc, 0x0160, 0xa084, 0x0003, 0xa08e, 0x0002, 0x0148,
-+      0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0x962c, 0x0005, 0x0061,
-+      0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x962c, 0x0cb0,
-+      0x2009, 0x0004, 0x0019, 0x0005, 0x2009, 0x0001, 0x00d6, 0x6010,
-+      0xa0ec, 0xf000, 0x0510, 0x2068, 0x6952, 0x6800, 0x6012, 0xa186,
-+      0x0001, 0x1188, 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x1158,
-+      0x00c6, 0x2061, 0xc9bc, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210,
-+      0x0208, 0x6206, 0x00ce, 0x080c, 0x5823, 0x6010, 0xa06d, 0x0076,
-+      0x2039, 0x0000, 0x190c, 0x70a3, 0x007e, 0x00de, 0x0005, 0x0156,
-+      0x00c6, 0x2061, 0xc9bc, 0x6000, 0x81ff, 0x0110, 0xa205, 0x0008,
-+      0xa204, 0x6002, 0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138,
-+      0x6808, 0xa005, 0x0120, 0x8001, 0x680a, 0xa085, 0x0001, 0x0005,
-+      0x2071, 0xc755, 0x7003, 0x0006, 0x7007, 0x0000, 0x700f, 0x0000,
-+      0x7013, 0x0001, 0x702f, 0x0006, 0x7033, 0x0001, 0x7063, 0x0000,
-+      0x0005, 0x00e6, 0x2071, 0xc755, 0x6a2c, 0x721e, 0x6b30, 0x7322,
-+      0x6834, 0x7026, 0x705a, 0x6838, 0x702a, 0x705e, 0x6824, 0x7016,
-+      0x683c, 0x701a, 0x2009, 0x0070, 0x200a, 0xa005, 0x0150, 0x2009,
-+      0x0000, 0xa188, 0x000c, 0x8001, 0x1de0, 0x2100, 0xa210, 0x1208,
-+      0x8318, 0x7252, 0x7356, 0x7010, 0xc084, 0x7012, 0x7007, 0x0001,
-+      0x700f, 0x0000, 0xa006, 0x00ee, 0x0005, 0x2b78, 0x2071, 0xc755,
-+      0x7004, 0x004b, 0x700c, 0x0002, 0x71a7, 0x71a0, 0x71a0, 0x0005,
-+      0x71b1, 0x7202, 0x7203, 0x7204, 0x7205, 0x7218, 0x7219, 0x700c,
-+      0x0cba, 0x2f00, 0xa080, 0x0070, 0x2004, 0x2f08, 0xa188, 0x0070,
-+      0x210c, 0xa106, 0x0150, 0x2f00, 0xa080, 0x0070, 0x2004, 0x2f08,
-+      0xa188, 0x0070, 0x210c, 0xa106, 0x15e0, 0x7018, 0xa10a, 0x1118,
-+      0x080c, 0x7246, 0x04b0, 0x1210, 0x7114, 0xa10a, 0xa192, 0x000a,
-+      0x0210, 0x2009, 0x000a, 0x00d6, 0x0016, 0x2001, 0xc682, 0xa080,
-+      0x0011, 0x2014, 0x2001, 0xc76f, 0xa080, 0x0005, 0x2004, 0xa100,
-+      0xa202, 0x001e, 0x00de, 0x0e20, 0x080c, 0x7295, 0x2200, 0xa102,
-+      0x0208, 0x2208, 0x713a, 0x080c, 0x7390, 0x2100, 0x7042, 0x2001,
-+      0x0002, 0x7037, 0x0000, 0x0126, 0x0006, 0x2091, 0x8000, 0x2009,
-+      0xc959, 0x2104, 0xc095, 0x200a, 0x000e, 0x700e, 0x012e, 0x080c,
-+      0x1669, 0x0005, 0x0005, 0x0005, 0x0005, 0x700c, 0x0002, 0x720a,
-+      0x720d, 0x7217, 0x080c, 0x71af, 0x0005, 0x0126, 0x8001, 0x700e,
-+      0x7138, 0x0041, 0x2091, 0x8000, 0x080c, 0x71af, 0x012e, 0x0005,
-+      0x0005, 0x0005, 0x7018, 0xa100, 0x7214, 0xa21a, 0x1130, 0x701c,
-+      0x7052, 0x7020, 0x7056, 0xa006, 0x0068, 0x0006, 0x080c, 0x7390,
-+      0x2100, 0x7250, 0xa210, 0x7252, 0x1220, 0x7054, 0xa081, 0x0000,
-+      0x7056, 0x000e, 0x2f08, 0xa188, 0x0070, 0x200a, 0x701a, 0x0005,
-+      0x00e6, 0x2071, 0xc755, 0x700c, 0x0002, 0x7240, 0x7240, 0x7242,
-+      0x00ee, 0x0005, 0x700f, 0x0001, 0x00ee, 0x0005, 0x0126, 0x2091,
-+      0x8000, 0x00d6, 0x00e6, 0x2071, 0xc76f, 0x702c, 0xa005, 0x0178,
-+      0x2068, 0x6964, 0x080c, 0x7295, 0x2100, 0x2208, 0xa102, 0x0238,
-+      0x6800, 0x702e, 0x080c, 0x75d2, 0x080c, 0x1629, 0x0c70, 0x00ee,
-+      0x00de, 0x012e, 0x0005, 0x00e6, 0x2071, 0xc76f, 0x702c, 0x6802,
-+      0x2d00, 0x702e, 0x6858, 0x7120, 0xa102, 0x0a0c, 0x1519, 0x7022,
-+      0x685b, 0x0000, 0x00ee, 0x0005, 0x00d6, 0x00e6, 0x2071, 0xc76f,
-+      0xa006, 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, 0x702a,
-+      0x7026, 0x702f, 0x0000, 0x080c, 0x7444, 0x0168, 0x080c, 0x7476,
-+      0x2d00, 0x7002, 0x700a, 0x701a, 0x7013, 0x0001, 0x701f, 0x0007,
-+      0x00ee, 0x00de, 0x0005, 0xa00e, 0x0cd8, 0x00e6, 0x00d6, 0x00c6,
-+      0x2071, 0xc76f, 0x721c, 0x2100, 0xa202, 0x1618, 0x080c, 0x7476,
-+      0x090c, 0x1519, 0x7018, 0xa005, 0x1160, 0x2d00, 0x7002, 0x700a,
-+      0x701a, 0xa006, 0x7006, 0x700e, 0x6806, 0x6802, 0x7012, 0x701e,
-+      0x0038, 0x2060, 0x6806, 0x2d00, 0x6002, 0x701a, 0x6803, 0x0000,
-+      0x7010, 0x8000, 0x7012, 0x701c, 0xa080, 0x0007, 0x701e, 0x721c,
-+      0x08d0, 0x721c, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x0156, 0x0136,
-+      0x0146, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0xc76f, 0x7300,
-+      0xa398, 0x0003, 0x7104, 0x080c, 0x7390, 0x810c, 0x2100, 0xa318,
-+      0x8003, 0x2228, 0x2021, 0x0054, 0xa402, 0xa532, 0x0208, 0x2028,
-+      0x2500, 0x8004, 0x20a8, 0x23a0, 0xe000, 0xe000, 0xe000, 0x53a5,
-+      0x2508, 0x080c, 0x7399, 0x2130, 0x7014, 0xa600, 0x7016, 0x2600,
-+      0x711c, 0xa102, 0x701e, 0x7004, 0xa600, 0x2008, 0xa082, 0x0007,
-+      0x1180, 0x7000, 0x2004, 0xa005, 0x1140, 0x2009, 0x0001, 0x0026,
-+      0x080c, 0x7295, 0x002e, 0x7000, 0x2004, 0x7002, 0x7007, 0x0000,
-+      0x0008, 0x7106, 0x2500, 0xa212, 0x1910, 0x012e, 0x00ee, 0x014e,
-+      0x013e, 0x015e, 0x0005, 0x0016, 0x0026, 0x00e6, 0x00d6, 0x080c,
-+      0x7359, 0x15e0, 0x2170, 0x2805, 0xac68, 0x2900, 0x0002, 0x732f,
-+      0x732f, 0x7333, 0x732f, 0x7333, 0x732f, 0x732f, 0x732f, 0x732f,
-+      0x732f, 0x733c, 0x732f, 0x733c, 0x732f, 0x732f, 0x732f, 0x080c,
-+      0x1519, 0xa005, 0x00f0, 0x7000, 0x6802, 0x7004, 0x6806, 0x7010,
-+      0x680a, 0x680f, 0x0000, 0x0060, 0x7010, 0x6812, 0x6817, 0x0000,
-+      0x7000, 0x6802, 0x7004, 0x6806, 0x7008, 0x680a, 0x700c, 0x680e,
-+      0x00de, 0x685c, 0x8000, 0x685e, 0x6858, 0x8001, 0x685a, 0x00d6,
-+      0xa006, 0x00de, 0x00ee, 0x002e, 0x001e, 0x0005, 0xa085, 0x0001,
-+      0x0cc0, 0x00e6, 0x0036, 0x2071, 0xc76f, 0x7014, 0xa005, 0x0568,
-+      0x8001, 0x7016, 0x7020, 0x8001, 0x7022, 0x7008, 0xa080, 0x0003,
-+      0x710c, 0x2110, 0x0429, 0x810c, 0xa118, 0x8210, 0xa282, 0x0007,
-+      0x11b0, 0x7008, 0x2004, 0xa005, 0x0178, 0x00d6, 0x0006, 0x7008,
-+      0x2068, 0x080c, 0x7485, 0x000e, 0x2068, 0x6807, 0x0000, 0x700a,
-+      0x00de, 0x7010, 0x8001, 0x7012, 0x700f, 0x0000, 0x0008, 0x720e,
-+      0x2308, 0xa006, 0x003e, 0x00ee, 0x0005, 0xa085, 0x0001, 0x0cd0,
-+      0x0006, 0x810b, 0x810b, 0x2100, 0x810b, 0xa100, 0x2008, 0x000e,
-+      0x0005, 0x0006, 0x0026, 0x2100, 0xa005, 0x0160, 0xa092, 0x000c,
-+      0x0248, 0x2009, 0x0000, 0x8108, 0xa082, 0x000c, 0x1de0, 0x002e,
-+      0x000e, 0x0005, 0x2009, 0x0000, 0x0cd0, 0x2d00, 0xa0b8, 0x0008,
-+      0x690c, 0x6810, 0x2019, 0x0001, 0x2031, 0x73db, 0xa112, 0x0220,
-+      0x0118, 0x8318, 0x2208, 0x0cd0, 0x6808, 0xa005, 0x0108, 0x8318,
-+      0x233a, 0x6804, 0xd084, 0x2300, 0x2021, 0x0001, 0x1150, 0xa082,
-+      0x0003, 0x0967, 0x0a67, 0x8420, 0xa082, 0x0007, 0x0967, 0x0a67,
-+      0x0cd0, 0xa082, 0x0002, 0x0967, 0x0a67, 0x8420, 0xa082, 0x0005,
-+      0x0967, 0x0a67, 0x0cd0, 0x6c1a, 0x2d00, 0xa0b8, 0x0007, 0x00e6,
-+      0x2071, 0xc600, 0x7128, 0x6810, 0x2019, 0x0001, 0xa10a, 0x0118,
-+      0x0210, 0x8318, 0x0cd8, 0x2031, 0x73ee, 0x0870, 0x6c16, 0x00ee,
-+      0x0005, 0x00e6, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2e00, 0x2060,
-+      0x2071, 0xc76f, 0x2009, 0x0001, 0x0026, 0x080c, 0x7295, 0x002e,
-+      0x7300, 0xa398, 0x0003, 0x7104, 0x080c, 0x7390, 0x810c, 0x2100,
-+      0xa318, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0024, 0x00d6, 0x2368,
-+      0x1138, 0x6000, 0x6802, 0x6004, 0x6806, 0x6008, 0x6812, 0x0050,
-+      0x6000, 0x6802, 0x6004, 0x6806, 0x6008, 0x680a, 0x600c, 0x680e,
-+      0x6010, 0x6812, 0x00de, 0x7014, 0x8000, 0x7016, 0x711c, 0x8109,
-+      0x711e, 0x7004, 0x8000, 0x2008, 0xa082, 0x0007, 0x1180, 0x7000,
-+      0x2004, 0xa005, 0x1140, 0x2009, 0x0001, 0x0026, 0x080c, 0x7295,
-+      0x002e, 0x7000, 0x2004, 0x7002, 0x7007, 0x0000, 0x0008, 0x7106,
-+      0x012e, 0x00ce, 0x00ee, 0x0005, 0x00d6, 0x0046, 0x0126, 0x2091,
-+      0x8000, 0x2001, 0xc682, 0xa080, 0x0011, 0x2004, 0x8003, 0x2020,
-+      0x080c, 0x15e5, 0x01d0, 0x2d00, 0x7026, 0x6803, 0x0000, 0x6807,
-+      0x0000, 0x080c, 0x15e5, 0x0188, 0x7024, 0x6802, 0x6807, 0x0000,
-+      0x2d00, 0x7026, 0xa4a2, 0x0007, 0x0110, 0x0208, 0x0c90, 0xa085,
-+      0x0001, 0x012e, 0x004e, 0x00de, 0x0005, 0x7024, 0xa005, 0x0dc8,
-+      0x2068, 0x2024, 0x080c, 0x1619, 0x2400, 0x0cc0, 0x0126, 0x2091,
-+      0x8000, 0x7024, 0x2068, 0xa005, 0x0130, 0x2004, 0x7026, 0x6803,
-+      0x0000, 0x6807, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
-+      0x7024, 0x6802, 0x2d00, 0x7026, 0x012e, 0x0005, 0x00d6, 0x2001,
-+      0xc778, 0x2004, 0xa005, 0x0138, 0x2068, 0x6800, 0x0006, 0x080c,
-+      0x1619, 0x000e, 0x0cb8, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x2071,
-+      0xc76f, 0x7008, 0xa005, 0x0138, 0x2068, 0x6800, 0x0006, 0x080c,
-+      0x1619, 0x000e, 0x0cb8, 0xa006, 0x7002, 0x700a, 0x7006, 0x700e,
-+      0x701a, 0x701e, 0x7022, 0x702a, 0x7026, 0x702e, 0x00ee, 0x00de,
-+      0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0086, 0x0046, 0x0056,
-+      0x0026, 0x2031, 0x0000, 0x2001, 0xc756, 0x2004, 0xa005, 0x0904,
-+      0x754b, 0x2071, 0xc682, 0x20e1, 0x0002, 0x3d08, 0xd19c, 0x0140,
-+      0x2069, 0xc600, 0x6a28, 0x761c, 0x7114, 0x2041, 0x0000, 0x0028,
-+      0x7118, 0x720c, 0x7620, 0x7008, 0x2040, 0x080c, 0x7640, 0x0904,
-+      0x754b, 0x7004, 0xd084, 0x1128, 0x2021, 0x0024, 0x2029, 0x0002,
-+      0x0020, 0x2021, 0x002c, 0x2029, 0x000a, 0x080c, 0x1602, 0x0904,
-+      0x7543, 0x2d00, 0x2060, 0x6436, 0x0016, 0x20e1, 0x0001, 0x3d08,
-+      0x3e00, 0xa18c, 0x00ff, 0x6142, 0x603e, 0x001e, 0x6746, 0x2700,
-+      0xa086, 0xff00, 0x1118, 0x6063, 0x0000, 0x0010, 0x6063, 0x0003,
-+      0xa006, 0x6002, 0x602a, 0x602e, 0x6006, 0x603a, 0x604a, 0x6052,
-+      0x6057, 0x0005, 0x605e, 0x6066, 0x604e, 0x2800, 0x606a, 0x604c,
-+      0xc0ad, 0x604e, 0x665a, 0x2c00, 0x2078, 0x0479, 0x607f, 0xffff,
-+      0x6083, 0x0000, 0x8109, 0x0180, 0x080c, 0x1602, 0x01c0, 0x2d00,
-+      0x7806, 0x2f00, 0x6802, 0x6d36, 0xa006, 0x2d00, 0x2520, 0x00e9,
-+      0x2d00, 0x2078, 0x8109, 0x1d80, 0x2c00, 0xa005, 0x002e, 0x005e,
-+      0x004e, 0x008e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x2c00,
-+      0x2068, 0x080c, 0x1629, 0x2600, 0x2071, 0xc76f, 0x7120, 0xa102,
-+      0x0a0c, 0x1519, 0x7022, 0xa006, 0x0c48, 0x00d6, 0x00c6, 0x0136,
-+      0x0146, 0x0156, 0x0016, 0x2068, 0x2400, 0xa084, 0x000f, 0xa080,
-+      0x23c7, 0x2005, 0x2005, 0xad60, 0x2c00, 0x2d08, 0xa188, 0x0030,
-+      0xa102, 0x20a8, 0x2c00, 0x20a0, 0x2001, 0xffff, 0x40a4, 0x001e,
-+      0x015e, 0x014e, 0x013e, 0x00ce, 0x00de, 0x0005, 0x00c6, 0x00e6,
-+      0x00f6, 0x6858, 0x2071, 0xc76f, 0x7120, 0xa102, 0x0a0c, 0x1519,
-+      0x7022, 0x6960, 0x694e, 0x697c, 0x2009, 0xffff, 0x7818, 0xa102,
-+      0xe000, 0x6852, 0x684b, 0x0000, 0x6868, 0xa005, 0x0118, 0x6848,
-+      0xc085, 0x684a, 0x2d00, 0xa080, 0x0015, 0x2038, 0x2031, 0x0018,
-+      0x6864, 0x2020, 0x683a, 0x685c, 0xa08a, 0x00ff, 0x1a0c, 0x1519,
-+      0x2028, 0x2d00, 0x2060, 0x2078, 0x6934, 0xa18c, 0x000f, 0xa188,
-+      0x23c7, 0x2145, 0x685c, 0x2050, 0xa005, 0x0530, 0x2805, 0xac70,
-+      0x6834, 0xa084, 0x00ff, 0xa086, 0x0024, 0x1110, 0x7008, 0x0040,
-+      0x6834, 0xa084, 0x00ff, 0xa086, 0x002c, 0x190c, 0x1519, 0x7010,
-+      0x0006, 0x2400, 0xa005, 0x000e, 0x0168, 0x203a, 0x8738, 0x8631,
-+      0x090c, 0x1519, 0x8421, 0x8529, 0x0138, 0x080c, 0x2389, 0x090c,
-+      0x1519, 0x08e0, 0x080c, 0x73f1, 0x6837, 0x0023, 0x00fe, 0x00ee,
-+      0x00ce, 0x0005, 0x00e6, 0x00c6, 0x00a6, 0x0086, 0x0056, 0x2d00,
-+      0x2060, 0x6934, 0xa18c, 0x000f, 0xa188, 0x23c7, 0x2145, 0x685c,
-+      0x2050, 0xa005, 0x01d0, 0x2028, 0x2805, 0xac70, 0x6834, 0xa084,
-+      0x00ff, 0xa086, 0x0024, 0x1110, 0x7008, 0x0008, 0x7010, 0x0006,
-+      0xa086, 0xffff, 0x000e, 0x0110, 0x080c, 0x73f1, 0x8529, 0x0128,
-+      0x080c, 0x2389, 0x090c, 0x1519, 0x0c38, 0x005e, 0x008e, 0x00ae,
-+      0x00ce, 0x00ee, 0x0005, 0x70ac, 0xa005, 0x0120, 0x2060, 0x6008,
-+      0xa306, 0x0005, 0xa085, 0x0001, 0x0ce0, 0x70ac, 0x600e, 0x2c00,
-+      0x70ae, 0x0005, 0x00f6, 0x00d6, 0x0036, 0x70ac, 0xa005, 0x01b8,
-+      0x2068, 0x2079, 0x0000, 0x2c08, 0xa11e, 0x1118, 0x680c, 0x70ae,
-+      0x0060, 0xa106, 0x0140, 0x2d00, 0x2078, 0x680c, 0xa005, 0x090c,
-+      0x1519, 0x2068, 0x0cb0, 0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x003e,
-+      0x00de, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x7263, 0x6018, 0x2070,
-+      0xa006, 0x70b2, 0x70b6, 0x08b1, 0x080c, 0x95fc, 0x00ee, 0x0005,
-+      0x00d6, 0x0026, 0x0016, 0x2061, 0xc76f, 0x6020, 0x6414, 0xa600,
-+      0xa42a, 0x02f0, 0x6022, 0x2069, 0xc682, 0x6828, 0x6114, 0xa102,
-+      0x1288, 0x685c, 0xd08c, 0x1130, 0xc08d, 0x685e, 0x2011, 0x8025,
-+      0x080c, 0x4096, 0x2001, 0xc695, 0x2004, 0xa080, 0x0000, 0x200c,
-+      0x8108, 0x2102, 0xa085, 0x0001, 0x001e, 0x002e, 0x00de, 0x0005,
-+      0x2069, 0xc682, 0x6804, 0xd094, 0x0148, 0x685c, 0xd084, 0x1130,
-+      0xc085, 0x685e, 0x2011, 0x8026, 0x080c, 0x4096, 0x2001, 0xc695,
-+      0x2004, 0xa080, 0x0001, 0x200c, 0x8108, 0x2102, 0xa006, 0x2031,
-+      0x0000, 0x0c10, 0x0006, 0x0016, 0x00c6, 0x6018, 0x2060, 0x6010,
-+      0xa005, 0x0178, 0x2001, 0xc756, 0x2004, 0xa005, 0x0150, 0x2001,
-+      0xc600, 0x2004, 0xa086, 0x0003, 0x1120, 0x2011, 0x8014, 0x080c,
-+      0x4096, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0016, 0x6834, 0xa08c,
-+      0x00ff, 0xa186, 0x0024, 0x0110, 0xa186, 0x002c, 0x001e, 0x0005,
-+      0x2001, 0xc683, 0x2004, 0xd09c, 0x0005, 0x2001, 0xc683, 0x2004,
-+      0xd0a4, 0x0005, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519,
-+      0x0013, 0x006e, 0x0005, 0x76cb, 0x76cb, 0x76cb, 0x76cd, 0x7728,
-+      0x76cb, 0x76cb, 0x76cb, 0x7766, 0x76cb, 0x77c3, 0x76cb, 0x76cb,
-+      0x76cb, 0x76cb, 0x76cb, 0x080c, 0x1519, 0xa182, 0x0100, 0x0002,
-+      0x76df, 0x76df, 0x76df, 0x76e1, 0x76fa, 0x7714, 0x76df, 0x76df,
-+      0x76df, 0x76df, 0x76df, 0x76df, 0x76df, 0x76df, 0x76df, 0x080c,
-+      0x1519, 0x00d6, 0x080c, 0x7e60, 0x080c, 0x7f87, 0x6110, 0x2168,
-+      0x684b, 0x0000, 0x00d6, 0x6018, 0x2068, 0x6008, 0x68b6, 0x68bb,
-+      0x0500, 0xa006, 0x68b2, 0x00de, 0x080c, 0x5823, 0x080c, 0x95fc,
-+      0x00de, 0x0005, 0x080c, 0x7e60, 0x00f6, 0x00d6, 0x6110, 0x2178,
-+      0x080c, 0xacaa, 0x0150, 0x00e6, 0x6018, 0x2070, 0xa006, 0x70b2,
-+      0x70b6, 0x00ee, 0x2f68, 0x080c, 0x5823, 0x00de, 0x00fe, 0x080c,
-+      0x95fc, 0x080c, 0x7f87, 0x0005, 0x080c, 0x7e60, 0x080c, 0x2e46,
-+      0x00d6, 0x6110, 0x2168, 0x080c, 0xacaa, 0x0120, 0x684b, 0x0029,
-+      0x080c, 0x5823, 0x00de, 0x080c, 0x95fc, 0x080c, 0x7f87, 0x0005,
-+      0xa182, 0x0100, 0x0002, 0x773a, 0x773c, 0x7744, 0x773a, 0x773a,
-+      0x773a, 0x7761, 0x773a, 0x773a, 0x773a, 0x773a, 0x773a, 0x773a,
-+      0x773a, 0x773a, 0x080c, 0x1519, 0x20e1, 0x0005, 0x3d18, 0x3e20,
-+      0x2c10, 0x080c, 0x1870, 0x0005, 0x00d6, 0x00e6, 0x2001, 0xc756,
-+      0x2004, 0xa086, 0x0000, 0x6110, 0x1118, 0x080c, 0x1629, 0x0028,
-+      0x2168, 0x080c, 0x756e, 0x080c, 0x5823, 0x6018, 0x2070, 0xa006,
-+      0x70b2, 0x70b6, 0x080c, 0x7612, 0x00ee, 0x00de, 0x080c, 0x95fc,
-+      0x0005, 0x080c, 0x7633, 0x080c, 0x56e0, 0x0005, 0xa182, 0x0100,
-+      0x0002, 0x777b, 0x77a1, 0x7779, 0x7779, 0x7779, 0x7779, 0x7779,
-+      0x7779, 0x7779, 0x7779, 0x7779, 0x7779, 0x7779, 0x7779, 0x7779,
-+      0x7779, 0x080c, 0x1519, 0x00d6, 0x6003, 0x0003, 0x6106, 0x6010,
-+      0x2068, 0x687c, 0x680a, 0x6880, 0x680e, 0x6813, 0x0000, 0x6817,
-+      0x0000, 0x6854, 0xa092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
-+      0x8013, 0x8213, 0xa210, 0x6216, 0x00de, 0x2c10, 0x080c, 0x2068,
-+      0x080c, 0x7a15, 0x0126, 0x2091, 0x8000, 0x080c, 0x7f87, 0x012e,
-+      0x0005, 0x6003, 0x0004, 0x630a, 0x080c, 0x74b9, 0x0168, 0x6012,
-+      0x600f, 0x0000, 0x080c, 0x760d, 0x20e1, 0x0005, 0x3d18, 0x3e20,
-+      0x2c10, 0x080c, 0x1870, 0x0005, 0x2011, 0x0000, 0x080c, 0x1870,
-+      0x00e6, 0x6018, 0x2070, 0x70b3, 0x0000, 0x70b7, 0x0000, 0x00ee,
-+      0x080c, 0x95fc, 0x0005, 0x00d6, 0x080c, 0x7e60, 0x080c, 0x7f87,
-+      0x6110, 0x2168, 0x684b, 0x0000, 0x00d6, 0x6018, 0x2068, 0x6008,
-+      0x68b6, 0x68bb, 0x0500, 0xa006, 0x68b2, 0x00de, 0x080c, 0x5823,
-+      0x080c, 0x95fc, 0x00de, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c,
-+      0x1519, 0x000b, 0x0005, 0x77f3, 0x77f3, 0x77f3, 0x77f5, 0x780a,
-+      0x77f3, 0x77f3, 0x77f3, 0x77f3, 0x77f3, 0x77f3, 0x77f3, 0x77f3,
-+      0x77f3, 0x77f3, 0x77f3, 0x080c, 0x1519, 0x080c, 0x910f, 0x6110,
-+      0x2168, 0x684b, 0x0006, 0x00d6, 0x6018, 0x2068, 0x6008, 0x68b6,
-+      0x68bb, 0x0500, 0xa006, 0x68b2, 0x00de, 0x080c, 0x5823, 0x080c,
-+      0x95fc, 0x0005, 0x080c, 0x7633, 0x0005, 0x6000, 0xa08a, 0x0010,
-+      0x1a0c, 0x1519, 0x000b, 0x0005, 0x7824, 0x7824, 0x7824, 0x7826,
-+      0x7836, 0x7824, 0x7824, 0x7824, 0x7824, 0x7824, 0x7824, 0x7824,
-+      0x7824, 0x7824, 0x7824, 0x7824, 0x080c, 0x1519, 0x0036, 0x00e6,
-+      0x2071, 0xc927, 0x703c, 0xac06, 0x1120, 0x2019, 0x0000, 0x080c,
-+      0x8e92, 0x080c, 0x910f, 0x00ee, 0x003e, 0x0005, 0x00d6, 0x6010,
-+      0x2068, 0x080c, 0x7633, 0x00de, 0x0005, 0x080c, 0x769d, 0x1150,
-+      0x6024, 0xd09c, 0x1138, 0x6810, 0x2009, 0xffff, 0xa102, 0x2020,
-+      0x2019, 0x0000, 0x0005, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086,
-+      0x818e, 0x1208, 0xa200, 0x1f04, 0x784f, 0x8086, 0x818e, 0x0005,
-+      0x0156, 0x20a9, 0x0010, 0xa005, 0x01b8, 0xa11a, 0x12a8, 0x8213,
-+      0x818d, 0x0228, 0xa11a, 0x1220, 0x1f04, 0x785f, 0x0028, 0xa11a,
-+      0x2308, 0x8210, 0x1f04, 0x785f, 0x0006, 0x3200, 0xa084, 0xefff,
-+      0x2080, 0x000e, 0x015e, 0x0005, 0x0006, 0x3200, 0xa085, 0x1000,
-+      0x0cb8, 0x0126, 0x2091, 0x2800, 0x2079, 0xc927, 0x012e, 0x00d6,
-+      0x2069, 0xc927, 0x6803, 0x0005, 0x2069, 0x0004, 0x2d04, 0xa085,
-+      0x8001, 0x206a, 0x00de, 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804,
-+      0xa084, 0x0007, 0x0002, 0x789d, 0x78be, 0x7911, 0x78a3, 0x78be,
-+      0x789d, 0x789b, 0x789b, 0x080c, 0x1519, 0x080c, 0x703d, 0x080c,
-+      0x7ead, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005,
-+      0x2011, 0x4e31, 0x080c, 0x6fc6, 0x7828, 0xa092, 0x00c8, 0x1228,
-+      0x8000, 0x782a, 0x080c, 0x4e6b, 0x0c88, 0x080c, 0x4e31, 0x7807,
-+      0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c40, 0x080c, 0x703d,
-+      0x3c00, 0x0006, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214, 0x000e,
-+      0x20e0, 0x82ff, 0x0178, 0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000,
-+      0x7824, 0xa065, 0x090c, 0x1519, 0x2009, 0x0013, 0x080c, 0x962c,
-+      0x00ce, 0x0005, 0x3900, 0xa082, 0xca74, 0x1210, 0x080c, 0x91e4,
-+      0x00c6, 0x7824, 0xa065, 0x090c, 0x1519, 0x7804, 0xa086, 0x0004,
-+      0x0904, 0x7951, 0x7828, 0xa092, 0x2710, 0x1230, 0x8000, 0x782a,
-+      0x00ce, 0x080c, 0x8c01, 0x0c20, 0x6104, 0xa186, 0x0003, 0x1188,
-+      0x00e6, 0x2071, 0xc600, 0x70e0, 0x00ee, 0xd08c, 0x0150, 0x00c6,
-+      0x00e6, 0x2061, 0x0100, 0x2071, 0xc600, 0x080c, 0x4e74, 0x00ee,
-+      0x00ce, 0x080c, 0xc5b4, 0x2009, 0x0014, 0x080c, 0x962c, 0x00ce,
-+      0x0838, 0x2001, 0xc943, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160,
-+      0x782b, 0x0000, 0x7824, 0xa065, 0x090c, 0x1519, 0x2009, 0x0013,
-+      0x080c, 0x9680, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x3900, 0xa082,
-+      0xca74, 0x1210, 0x080c, 0x91e4, 0x7824, 0xa005, 0x090c, 0x1519,
-+      0x781c, 0xa06d, 0x090c, 0x1519, 0x6800, 0xc0dc, 0x6802, 0x7924,
-+      0x2160, 0x080c, 0x95fc, 0x693c, 0x81ff, 0x090c, 0x1519, 0x8109,
-+      0x693e, 0x6854, 0xa015, 0x0110, 0x7a1e, 0x0010, 0x7918, 0x791e,
-+      0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce, 0x080c, 0x7ead,
-+      0x0888, 0x6104, 0xa186, 0x0002, 0x0128, 0xa186, 0x0004, 0x0110,
-+      0x0804, 0x78ea, 0x7808, 0xac06, 0x0904, 0x78ea, 0x080c, 0x7dca,
-+      0x080c, 0x79f8, 0x00ce, 0x080c, 0x7ead, 0x0804, 0x78d8, 0x00c6,
-+      0x6027, 0x0002, 0x62c8, 0x60c4, 0xa205, 0x11a8, 0x793c, 0xa1e5,
-+      0x0000, 0x0160, 0x2009, 0x0049, 0x601c, 0xa086, 0x0009, 0x1110,
-+      0x2009, 0x0103, 0x080c, 0x962c, 0x00ce, 0x0005, 0x2011, 0xc946,
-+      0x2013, 0x0000, 0x0cc8, 0x3908, 0xa192, 0xca74, 0x1210, 0x080c,
-+      0x91e4, 0x793c, 0x81ff, 0x0d90, 0x7944, 0xa192, 0x7530, 0x12f0,
-+      0x8108, 0x7946, 0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006,
-+      0x1138, 0x6014, 0xa084, 0x0184, 0xa085, 0x0012, 0x6016, 0x08e0,
-+      0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0009, 0x0d90, 0x6014,
-+      0xa084, 0x0184, 0xa085, 0x0016, 0x6016, 0x0870, 0x7848, 0xc085,
-+      0x784a, 0x0850, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000,
-+      0x600f, 0x0000, 0x2c08, 0x2061, 0xc927, 0x6020, 0x8000, 0x6022,
-+      0x6010, 0xa005, 0x0148, 0xa080, 0x0003, 0x2102, 0x6112, 0x012e,
-+      0x00ce, 0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6,
-+      0x2069, 0xc927, 0x6000, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822,
-+      0xa086, 0x0001, 0x1110, 0x2c00, 0x681e, 0x6804, 0xa084, 0x0007,
-+      0x0804, 0x7eb3, 0xc0d5, 0x6002, 0x6818, 0xa005, 0x0158, 0x6056,
-+      0x605b, 0x0000, 0x0006, 0x2c00, 0x681a, 0x00de, 0x685a, 0x2069,
-+      0xc927, 0x0c18, 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x08e8,
-+      0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000,
-+      0x2c08, 0x2061, 0xc927, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005,
-+      0x0148, 0xa080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e,
-+      0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000,
-+      0x2c08, 0x2061, 0xc927, 0x6034, 0xa005, 0x0130, 0xa080, 0x0003,
-+      0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x0cd8, 0x00f6,
-+      0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0036, 0x0026,
-+      0x0016, 0x0006, 0x0126, 0xa02e, 0x2071, 0xc927, 0x7638, 0x2660,
-+      0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x7aa0, 0x6018, 0xa080,
-+      0x0028, 0x2004, 0xa206, 0x1904, 0x7a9b, 0x87ff, 0x0120, 0x6050,
-+      0xa106, 0x1904, 0x7a9b, 0x703c, 0xac06, 0x1190, 0x0036, 0x2019,
-+      0x0001, 0x080c, 0x8e92, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043,
-+      0x0000, 0x7047, 0x0000, 0x704b, 0x0000, 0x003e, 0x2029, 0x0001,
-+      0x7038, 0xac36, 0x1110, 0x660c, 0x763a, 0x7034, 0xac36, 0x1140,
-+      0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,
-       0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678,
--      0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0xac8a, 0x01b8, 0x601c,
--      0xa086, 0x0003, 0x1540, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
--      0x0016, 0x0036, 0x0086, 0x080c, 0xaefc, 0x080c, 0xc4ca, 0x080c,
--      0x580a, 0x008e, 0x003e, 0x001e, 0x080c, 0xae41, 0x080c, 0xae4d,
--      0x080c, 0x8fb7, 0x00ce, 0x0804, 0x7b3e, 0x2c78, 0x600c, 0x2060,
--      0x0804, 0x7b3e, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de,
--      0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x1158, 0x0016,
--      0x0036, 0x0086, 0x080c, 0xc4ca, 0x080c, 0xc134, 0x008e, 0x003e,
--      0x001e, 0x08e0, 0x601c, 0xa086, 0x0002, 0x1128, 0x6004, 0xa086,
--      0x0085, 0x0908, 0x0898, 0x601c, 0xa086, 0x0005, 0x1978, 0x6004,
--      0xa086, 0x0085, 0x0d20, 0x0850, 0x00c6, 0x0006, 0x0126, 0x2091,
--      0x8000, 0xa280, 0xc77b, 0x2004, 0xa065, 0x0904, 0x7c6d, 0x00f6,
--      0x00e6, 0x00d6, 0x0066, 0x2071, 0xc927, 0x6654, 0x7018, 0xac06,
--      0x1108, 0x761a, 0x701c, 0xac06, 0x1130, 0x86ff, 0x1118, 0x7018,
--      0x701e, 0x0008, 0x761e, 0x6058, 0xa07d, 0x0108, 0x7e56, 0xa6ed,
--      0x0000, 0x0110, 0x2f00, 0x685a, 0x6057, 0x0000, 0x605b, 0x0000,
--      0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x5268, 0x0904, 0x7c69,
--      0x7624, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004, 0xad06, 0x15c0,
--      0x00d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0548, 0x080c, 0x7024,
--      0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c, 0x90df, 0x7027, 0x0000,
--      0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803,
--      0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
--      0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c, 0xa005, 0x0110,
--      0x8001, 0x603e, 0x2660, 0x080c, 0xae4d, 0x00ce, 0x0048, 0x00de,
--      0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x7c14,
--      0x8dff, 0x0158, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c,
--      0xaefc, 0x080c, 0xc4ca, 0x080c, 0x580a, 0x080c, 0x8fb7, 0x0804,
--      0x7c14, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce,
--      0x0005, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x2031, 0x0000, 0x7814,
--      0xa065, 0x0904, 0x7cc3, 0x600c, 0x0006, 0x600f, 0x0000, 0x7824,
--      0xac06, 0x1540, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c,
--      0x7024, 0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c, 0x90df, 0x7827,
-+      0x600f, 0x0000, 0x080c, 0xacaa, 0x01c8, 0x6010, 0x2068, 0x601c,
-+      0xa086, 0x0003, 0x1580, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+      0x0016, 0x0036, 0x0076, 0x080c, 0xaf1c, 0x080c, 0xc4f0, 0x080c,
-+      0x5823, 0x007e, 0x003e, 0x001e, 0x080c, 0xae61, 0x080c, 0xae6d,
-+      0x00ce, 0x0804, 0x7a3b, 0x2c78, 0x600c, 0x2060, 0x0804, 0x7a3b,
-+      0x85ff, 0x0120, 0x0036, 0x080c, 0x7f87, 0x003e, 0x012e, 0x000e,
-+      0x001e, 0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de,
-+      0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x0158, 0x601c,
-+      0xa086, 0x0009, 0x1190, 0x684b, 0x0006, 0x080c, 0x5823, 0x080c,
-+      0x95fc, 0x08b0, 0x0016, 0x0036, 0x0076, 0x080c, 0xc4f0, 0x080c,
-+      0xc15a, 0x007e, 0x003e, 0x001e, 0x0848, 0x601c, 0xa086, 0x000a,
-+      0x0904, 0x7a85, 0x0804, 0x7a83, 0x0006, 0x0066, 0x00c6, 0x00d6,
-+      0x00f6, 0x2031, 0x0000, 0x0126, 0x2091, 0x8000, 0x2079, 0xc927,
-+      0x7838, 0xa065, 0x0568, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c,
-+      0xac06, 0x1180, 0x0036, 0x2019, 0x0001, 0x080c, 0x8e92, 0x7833,
-+      0x0000, 0x783f, 0x0000, 0x7843, 0x0000, 0x7847, 0x0000, 0x784b,
-+      0x0000, 0x003e, 0x080c, 0xacaa, 0x0178, 0x6010, 0x2068, 0x601c,
-+      0xa086, 0x0003, 0x11b0, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+      0x080c, 0x5823, 0x080c, 0xae61, 0x080c, 0xae6d, 0x000e, 0x0888,
-+      0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce, 0x006e, 0x000e,
-+      0x0005, 0x601c, 0xa086, 0x0006, 0x0150, 0x601c, 0xa086, 0x0009,
-+      0x1148, 0x6b4a, 0x080c, 0x5823, 0x080c, 0x95fc, 0x0c38, 0x080c,
-+      0xc15a, 0x0c10, 0x601c, 0xa086, 0x000a, 0x09b8, 0x08a0, 0x0016,
-+      0x0026, 0x0086, 0x2041, 0x0000, 0x0099, 0x080c, 0x7bfd, 0x008e,
-+      0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, 0xc927, 0x2091,
-+      0x8000, 0x080c, 0x7c8a, 0x080c, 0x7cfc, 0x012e, 0x00fe, 0x0005,
-+      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126,
-+      0x2091, 0x8000, 0x2071, 0xc927, 0x7614, 0x2660, 0x2678, 0x8cff,
-+      0x0904, 0x7bd3, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x1904,
-+      0x7bce, 0x88ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x7bce, 0x7024,
-+      0xac06, 0x1538, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c,
-+      0x703d, 0x080c, 0x8c0e, 0x68c3, 0x0000, 0x080c, 0x90ff, 0x7027,
-       0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120,
-       0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
--      0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009, 0x630a,
--      0x2c30, 0x00b0, 0x6010, 0x2068, 0x080c, 0xac8a, 0x0168, 0x601c,
--      0xa086, 0x0003, 0x11b8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
--      0x080c, 0x580a, 0x080c, 0xae41, 0x080c, 0xae4d, 0x080c, 0x8fb7,
--      0x000e, 0x0804, 0x7c78, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e,
--      0x000e, 0x0005, 0x601c, 0xa086, 0x0006, 0x1118, 0x080c, 0xc134,
--      0x0c58, 0x601c, 0xa086, 0x0002, 0x1128, 0x6004, 0xa086, 0x0085,
--      0x09d0, 0x0c10, 0x601c, 0xa086, 0x0005, 0x19f0, 0x6004, 0xa086,
--      0x0085, 0x0d60, 0x08c8, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x7818,
--      0xa065, 0x0904, 0x7d49, 0x6054, 0x0006, 0x6057, 0x0000, 0x605b,
--      0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x5268, 0x0904,
--      0x7d46, 0x7e24, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004, 0xad06,
-+      0x0110, 0x6827, 0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a,
-+      0x04e8, 0x7014, 0xac36, 0x1110, 0x660c, 0x7616, 0x7010, 0xac36,
-+      0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013,
-+      0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008,
-+      0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0xacaa, 0x01b8,
-+      0x601c, 0xa086, 0x0003, 0x1540, 0x6837, 0x0103, 0x6b4a, 0x6847,
-+      0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xaf1c, 0x080c, 0xc4f0,
-+      0x080c, 0x5823, 0x008e, 0x003e, 0x001e, 0x080c, 0xae61, 0x080c,
-+      0xae6d, 0x080c, 0x8fd0, 0x00ce, 0x0804, 0x7b57, 0x2c78, 0x600c,
-+      0x2060, 0x0804, 0x7b57, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce,
-+      0x00de, 0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x1158,
-+      0x0016, 0x0036, 0x0086, 0x080c, 0xc4f0, 0x080c, 0xc15a, 0x008e,
-+      0x003e, 0x001e, 0x08e0, 0x601c, 0xa086, 0x0002, 0x1128, 0x6004,
-+      0xa086, 0x0085, 0x0908, 0x0898, 0x601c, 0xa086, 0x0005, 0x1978,
-+      0x6004, 0xa086, 0x0085, 0x0d20, 0x0850, 0x00c6, 0x0006, 0x0126,
-+      0x2091, 0x8000, 0xa280, 0xc77b, 0x2004, 0xa065, 0x0904, 0x7c86,
-+      0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0xc927, 0x6654, 0x7018,
-+      0xac06, 0x1108, 0x761a, 0x701c, 0xac06, 0x1130, 0x86ff, 0x1118,
-+      0x7018, 0x701e, 0x0008, 0x761e, 0x6058, 0xa07d, 0x0108, 0x7e56,
-+      0xa6ed, 0x0000, 0x0110, 0x2f00, 0x685a, 0x6057, 0x0000, 0x605b,
-+      0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x5281, 0x0904,
-+      0x7c82, 0x7624, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004, 0xad06,
-       0x15c0, 0x00d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0548, 0x080c,
--      0x7024, 0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c, 0x90df, 0x7827,
-+      0x703d, 0x080c, 0x8c0e, 0x68c3, 0x0000, 0x080c, 0x90ff, 0x7027,
-       0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120,
-       0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
-       0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c, 0xa005,
--      0x0110, 0x8001, 0x603e, 0x2660, 0x080c, 0xae4d, 0x00ce, 0x0048,
-+      0x0110, 0x8001, 0x603e, 0x2660, 0x080c, 0xae6d, 0x00ce, 0x0048,
-       0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804,
--      0x7cf5, 0x8dff, 0x0138, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
--      0x080c, 0x580a, 0x080c, 0x8fb7, 0x0804, 0x7cf5, 0x000e, 0x0804,
--      0x7ce8, 0x781e, 0x781a, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005,
--      0x00e6, 0x00d6, 0x0066, 0x6000, 0xd0dc, 0x01a0, 0x604c, 0xa06d,
--      0x0188, 0x6848, 0xa606, 0x1170, 0x2071, 0xc927, 0x7024, 0xa035,
--      0x0148, 0xa080, 0x0004, 0x2004, 0xad06, 0x1120, 0x6000, 0xc0dc,
--      0x6002, 0x0021, 0x006e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079,
--      0x0100, 0x78c0, 0xa005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009,
--      0x630a, 0x00ce, 0x04a0, 0x080c, 0x8bf5, 0x78c3, 0x0000, 0x080c,
--      0x90df, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0xa384,
--      0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000, 0x2079, 0x0100,
--      0x7824, 0xd084, 0x0110, 0x7827, 0x0001, 0x080c, 0x90df, 0x003e,
--      0x080c, 0x5268, 0x00c6, 0x603c, 0xa005, 0x0110, 0x8001, 0x603e,
--      0x2660, 0x080c, 0x95dc, 0x00ce, 0x6837, 0x0103, 0x6b4a, 0x6847,
--      0x0000, 0x080c, 0xaefc, 0x080c, 0x580a, 0x080c, 0x8fb7, 0x00fe,
--      0x0005, 0x00e6, 0x00c6, 0x2071, 0xc927, 0x7004, 0xa084, 0x0007,
--      0x0002, 0x7dc3, 0x7dc6, 0x7ddc, 0x7df5, 0x7e32, 0x7dc3, 0x7dc1,
--      0x7dc1, 0x080c, 0x1519, 0x00ce, 0x00ee, 0x0005, 0x7024, 0xa065,
--      0x0148, 0x7020, 0x8001, 0x7022, 0x600c, 0xa015, 0x0150, 0x7216,
--      0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee,
--      0x0005, 0x7216, 0x7212, 0x0cb0, 0x6018, 0x2060, 0x080c, 0x5268,
--      0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0120, 0x6054,
--      0xa015, 0x0140, 0x721e, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce,
--      0x00ee, 0x0005, 0x7218, 0x721e, 0x0cb0, 0x7024, 0xa065, 0x05b8,
--      0x700c, 0xac06, 0x1160, 0x080c, 0x8fb7, 0x600c, 0xa015, 0x0120,
--      0x720e, 0x600f, 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014,
--      0xac06, 0x1160, 0x080c, 0x8fb7, 0x600c, 0xa015, 0x0120, 0x7216,
--      0x600f, 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, 0x601c, 0xa086,
--      0x0003, 0x1198, 0x6018, 0x2060, 0x080c, 0x5268, 0x6000, 0xc0dc,
--      0x6002, 0x080c, 0x8fb7, 0x701c, 0xa065, 0x0138, 0x6054, 0xa015,
--      0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce,
--      0x00ee, 0x0005, 0x7024, 0xa065, 0x0140, 0x080c, 0x8fb7, 0x600c,
--      0xa015, 0x0150, 0x720e, 0x600f, 0x0000, 0x080c, 0x90df, 0x7027,
--      0x0000, 0x00ce, 0x00ee, 0x0005, 0x720e, 0x720a, 0x0cb0, 0x00d6,
--      0x2069, 0xc927, 0x6830, 0xa084, 0x0003, 0x0002, 0x7e54, 0x7e56,
--      0x7e7a, 0x7e52, 0x080c, 0x1519, 0x00de, 0x0005, 0x00c6, 0x6840,
--      0xa086, 0x0001, 0x01b8, 0x683c, 0xa065, 0x0130, 0x600c, 0xa015,
--      0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000,
--      0x2011, 0xc946, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a,
--      0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0xa065, 0x0d68, 0x6003,
--      0x0003, 0x0c50, 0x00c6, 0x6843, 0x0000, 0x6847, 0x0000, 0x684b,
--      0x0000, 0x683c, 0xa065, 0x0168, 0x600c, 0xa015, 0x0130, 0x6a3a,
--      0x600f, 0x0000, 0x683f, 0x0000, 0x0020, 0x683f, 0x0000, 0x683a,
--      0x6836, 0x00ce, 0x00de, 0x0005, 0x00d6, 0x2069, 0xc927, 0x6804,
--      0xa084, 0x0007, 0x0006, 0xa005, 0x11c8, 0x2001, 0xc635, 0x2004,
--      0xa084, 0x0028, 0x1198, 0x2001, 0xc8e5, 0x2004, 0xa086, 0xaaaa,
--      0x0168, 0x2001, 0xc696, 0x2004, 0xd08c, 0x1118, 0xd084, 0x1118,
--      0x0028, 0x080c, 0x7f6e, 0x000e, 0x00de, 0x0005, 0x000e, 0x0002,
--      0x7ec2, 0x7f5e, 0x7f5e, 0x7f5e, 0x7f5e, 0x7f60, 0x7ec0, 0x7ec0,
--      0x080c, 0x1519, 0x6820, 0xa005, 0x1110, 0x00de, 0x0005, 0x00c6,
--      0x680c, 0xa065, 0x0150, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000,
--      0x080c, 0x7ff0, 0x00ce, 0x00de, 0x0005, 0x6814, 0xa065, 0x0150,
--      0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x7ff0, 0x00ce,
--      0x00de, 0x0005, 0x00e6, 0x0036, 0x6a1c, 0xa2f5, 0x0000, 0x0904,
--      0x7f5a, 0x704c, 0xa00d, 0x0118, 0x7088, 0xa005, 0x01a0, 0x7054,
--      0xa075, 0x0120, 0xa20e, 0x0904, 0x7f5a, 0x0028, 0x6818, 0xa20e,
--      0x0904, 0x7f5a, 0x2070, 0x704c, 0xa00d, 0x0d88, 0x7088, 0xa005,
--      0x1d70, 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302, 0x1e40, 0x080c,
--      0x95b3, 0x0904, 0x7f5a, 0x8318, 0x733e, 0x6112, 0x2e10, 0x621a,
--      0xa180, 0x0014, 0x2004, 0xa084, 0x00ff, 0x605a, 0xa180, 0x0014,
--      0x2003, 0x0000, 0xa180, 0x0015, 0x2004, 0xa08a, 0x199a, 0x0210,
--      0x2001, 0x1999, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x003e,
--      0x00f6, 0x2c78, 0x71a0, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1110,
--      0xd1bc, 0x0150, 0x7100, 0xd1f4, 0x0120, 0x7114, 0xa18c, 0x00ff,
--      0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0, 0x2f6e, 0x2c0d, 0xa18c,
--      0x00ff, 0x2061, 0x0100, 0x619a, 0x080c, 0x8620, 0x7300, 0xc3dd,
--      0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x781f,
--      0x0003, 0x7803, 0x0001, 0x7807, 0x0040, 0x00fe, 0x00ee, 0x00ce,
--      0x00de, 0x0005, 0x003e, 0x00ee, 0x00ce, 0x0cd0, 0x00de, 0x0005,
--      0x00c6, 0x680c, 0xa065, 0x0138, 0x6807, 0x0004, 0x6826, 0x682b,
--      0x0000, 0x080c, 0x7ff0, 0x00ce, 0x00de, 0x0005, 0x00f6, 0x00d6,
--      0x2069, 0xc927, 0x6830, 0xa086, 0x0000, 0x1904, 0x7fcb, 0x2001,
--      0xc60c, 0x200c, 0xd1bc, 0x1904, 0x7fe6, 0x6838, 0xa07d, 0x0904,
--      0x7fcb, 0x2001, 0xc635, 0x2004, 0xa084, 0x0028, 0x11f8, 0x2001,
--      0xc8e5, 0x2004, 0xa086, 0xaaaa, 0x01c8, 0x781c, 0xa086, 0x0009,
--      0x11a8, 0x7808, 0xd0fc, 0x0190, 0x2001, 0xc928, 0x2004, 0xa005,
--      0x1138, 0x2001, 0xc696, 0x200c, 0xc185, 0xc18c, 0x2102, 0x0030,
--      0x2011, 0xc696, 0x2204, 0xc08d, 0x2012, 0x0428, 0x2f00, 0x6833,
--      0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6,
--      0x2091, 0x2400, 0x002e, 0x080c, 0x20ef, 0x11c0, 0x012e, 0xe000,
--      0xe000, 0xe000, 0x6a3c, 0x2278, 0x781c, 0xa086, 0x0009, 0x1148,
--      0x7808, 0xd0fc, 0x0118, 0x080c, 0x8969, 0x0028, 0x080c, 0x89e2,
--      0x0010, 0x080c, 0x8a66, 0x00de, 0x00fe, 0x0005, 0x012e, 0xe000,
--      0x6843, 0x0000, 0x781c, 0xa086, 0x0009, 0x0110, 0x7803, 0x0002,
--      0x780c, 0xa015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000,
--      0x683f, 0x0000, 0x0c40, 0x683a, 0x6836, 0x0cc0, 0xc1bc, 0x2102,
--      0x0066, 0x2031, 0x0001, 0x080c, 0x5fa4, 0x006e, 0x0804, 0x7f7d,
--      0x601c, 0xa084, 0x000f, 0x000b, 0x0005, 0x7ffe, 0x8003, 0x84c1,
--      0x85dd, 0x8003, 0x84c1, 0x85dd, 0x7ffe, 0x8003, 0x080c, 0x7db1,
--      0x080c, 0x7e94, 0x0005, 0x0156, 0x0136, 0x0146, 0x00c6, 0x00f6,
--      0x6004, 0xa08a, 0x0080, 0x1a0c, 0x1519, 0x6118, 0x2178, 0x79a0,
--      0x2011, 0xc635, 0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x7900,
--      0xd1f4, 0x0120, 0x7914, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000,
--      0x0028, 0xa1f8, 0x2f6e, 0x2f0d, 0xa18c, 0x00ff, 0x2c78, 0x2061,
--      0x0100, 0x619a, 0xa08a, 0x0040, 0x1a04, 0x8077, 0x0033, 0x00fe,
--      0x00ce, 0x014e, 0x013e, 0x015e, 0x0005, 0x8126, 0x8171, 0x819e,
--      0x826b, 0x8299, 0x82a1, 0x82c7, 0x82d8, 0x82e9, 0x82f1, 0x8307,
--      0x82f1, 0x8368, 0x82d8, 0x8389, 0x8391, 0x82e9, 0x8391, 0x83a2,
--      0x8075, 0x8075, 0x8075, 0x8075, 0x8075, 0x8075, 0x8075, 0x8075,
--      0x8075, 0x8075, 0x8075, 0x8d1a, 0x8d3f, 0x8d54, 0x8d77, 0x8d98,
--      0x82c7, 0x8075, 0x82c7, 0x82f1, 0x8075, 0x819e, 0x826b, 0x8075,
--      0x91e1, 0x82f1, 0x8075, 0x9201, 0x82f1, 0x8075, 0x82e9, 0x811f,
--      0x808a, 0x8075, 0x9226, 0x929b, 0x9372, 0x8075, 0x9383, 0x82c2,
--      0x939f, 0x8075, 0x8dad, 0x93fa, 0x8075, 0x080c, 0x1519, 0x2100,
--      0x0033, 0x00fe, 0x00ce, 0x014e, 0x013e, 0x015e, 0x0005, 0x9451,
--      0x9500, 0x8088, 0x80be, 0x80dc, 0x80f2, 0x8088, 0x82c7, 0x8088,
--      0x080c, 0x1519, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x7810,
--      0x2068, 0x20a3, 0x2414, 0x20a3, 0x0018, 0x20a3, 0x0800, 0x683c,
--      0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x6850, 0x20a2, 0x6854, 0x20a2, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x60c3, 0x0018, 0x080c, 0x8be2, 0x00de, 0x0005, 0x00d6,
--      0x7818, 0x2068, 0x68a0, 0x2069, 0xc600, 0x6ad4, 0xd2ac, 0x1110,
--      0xd0bc, 0x0110, 0xa085, 0x0001, 0x00de, 0x0005, 0x00d6, 0x20a1,
--      0x020b, 0x080c, 0x83bf, 0x20a3, 0x0500, 0x20a3, 0x0000, 0x7810,
--      0xa0e8, 0x000f, 0x6808, 0x20a2, 0x680c, 0x20a2, 0x6810, 0x20a2,
--      0x6814, 0x20a2, 0x6818, 0x20a2, 0x681c, 0x20a2, 0x60c3, 0x0010,
--      0x080c, 0x8be2, 0x00de, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b,
--      0x080c, 0x83bf, 0x20a3, 0x7800, 0x20a3, 0x0000, 0x7808, 0x8007,
--      0x20a2, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x080c, 0x8be2, 0x014e,
--      0x015e, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x845b,
--      0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0xdf10, 0x20a3, 0x0034,
--      0x2099, 0xc605, 0x20a9, 0x0004, 0x53a6, 0x2099, 0xc601, 0x20a9,
--      0x0004, 0x53a6, 0x2099, 0xc90d, 0x20a9, 0x001a, 0x3304, 0x8007,
--      0x20a2, 0x9398, 0x1f04, 0x810e, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x60c3, 0x004c, 0x080c, 0x8be2, 0x014e, 0x015e, 0x0005, 0x2001,
--      0xc615, 0x2004, 0x609a, 0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b,
--      0x080c, 0x83bf, 0x20a3, 0x5200, 0x20a3, 0x0000, 0x00d6, 0x2069,
--      0xc652, 0x6804, 0xd084, 0x0150, 0x6828, 0x20a3, 0x0000, 0x0016,
--      0x080c, 0x29db, 0x21a2, 0x001e, 0x00de, 0x0028, 0x00de, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0xc605, 0x53a6,
--      0x20a9, 0x0004, 0x2099, 0xc601, 0x53a6, 0x2001, 0xc635, 0x2004,
--      0xd0ac, 0x1138, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007f,
--      0x0238, 0x2001, 0xc61c, 0x20a6, 0x2001, 0xc61d, 0x20a6, 0x0040,
--      0x20a3, 0x0000, 0x2001, 0xc615, 0x2004, 0xa084, 0x00ff, 0x20a2,
--      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x080c, 0x8be2,
--      0x0005, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x0500, 0x20a3,
--      0x0000, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1138, 0x7818, 0xa080,
--      0x0028, 0x2004, 0xa082, 0x007f, 0x0238, 0x2001, 0xc61c, 0x20a6,
--      0x2001, 0xc61d, 0x20a6, 0x0040, 0x20a3, 0x0000, 0x2001, 0xc615,
--      0x2004, 0xa084, 0x00ff, 0x20a2, 0x20a9, 0x0004, 0x2099, 0xc605,
--      0x53a6, 0x60c3, 0x0010, 0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b,
--      0x080c, 0x83bf, 0x00c6, 0x7818, 0x2060, 0x2001, 0x0000, 0x080c,
--      0x5715, 0x00ce, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e,
--      0x1130, 0x20a3, 0x0400, 0x620c, 0xc2b4, 0x620e, 0x0010, 0x20a3,
--      0x0300, 0x20a3, 0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086,
--      0x007e, 0x1904, 0x822d, 0x2001, 0xc635, 0x2004, 0xd0a4, 0x01c8,
--      0x2099, 0xc8d5, 0x33a6, 0x9398, 0x20a3, 0x0000, 0x9398, 0x3304,
--      0xa084, 0x2000, 0x20a2, 0x9398, 0x33a6, 0x9398, 0x20a3, 0x0000,
--      0x9398, 0x2001, 0x2710, 0x20a2, 0x9398, 0x33a6, 0x9398, 0x33a6,
--      0x00d0, 0x2099, 0xc8d5, 0x33a6, 0x9398, 0x33a6, 0x9398, 0x3304,
--      0x080c, 0x5f22, 0x1118, 0xa084, 0x37ff, 0x0010, 0xa084, 0x3fff,
--      0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0xc605, 0x53a6,
--      0x20a9, 0x0004, 0x2099, 0xc601, 0x53a6, 0x20a9, 0x0008, 0x20a3,
--      0x0000, 0x1f04, 0x8207, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04,
--      0x820d, 0x2099, 0xc8dd, 0x3304, 0xc0dd, 0x20a2, 0x2001, 0xc672,
--      0x2004, 0xd0e4, 0x0158, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x9398,
--      0x9398, 0x9398, 0x33a6, 0x20a9, 0x0004, 0x0010, 0x20a9, 0x0007,
--      0x20a3, 0x0000, 0x1f04, 0x8228, 0x0468, 0x2001, 0xc635, 0x2004,
--      0xd0a4, 0x0140, 0x2001, 0xc8d6, 0x2004, 0x60e3, 0x0000, 0x080c,
--      0x2a1c, 0x60e2, 0x2099, 0xc8d5, 0x20a9, 0x0008, 0x53a6, 0x20a9,
--      0x0004, 0x2099, 0xc605, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xc601,
--      0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x824b, 0x20a9,
--      0x0008, 0x20a3, 0x0000, 0x1f04, 0x8251, 0x2099, 0xc8dd, 0x20a9,
--      0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x825c,
--      0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04, 0x8262, 0x60c3, 0x0074,
--      0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3,
--      0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3, 0x2000, 0xa006,
--      0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x00f6, 0x2079, 0xc652,
--      0x7904, 0x00fe, 0xd1ac, 0x1110, 0xa085, 0x0020, 0xd1a4, 0x0110,
--      0xa085, 0x0010, 0xa085, 0x0002, 0x00d6, 0x0804, 0x834a, 0x20a2,
--      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x8be2,
--      0x0005, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x5000, 0x0804,
--      0x81b9, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x2110, 0x20a3,
--      0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c,
--      0x8be2, 0x0005, 0x20a1, 0x020b, 0x080c, 0x8453, 0x0020, 0x20a1,
--      0x020b, 0x080c, 0x845b, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x080c, 0x8be2, 0x0005,
--      0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3, 0x0000,
--      0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x080c, 0x8be2,
--      0x0005, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0200, 0x0804,
--      0x81b9, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3,
--      0x0000, 0x7828, 0xa005, 0x0110, 0x20a2, 0x0010, 0x20a3, 0x0003,
--      0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x8be2, 0x0005, 0x00d6,
--      0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0210, 0x20a3, 0x0014,
--      0x20a3, 0x0800, 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x1198,
--      0x699c, 0xa184, 0x0030, 0x0190, 0x6998, 0xa184, 0xc000, 0x1140,
--      0xd1ec, 0x0118, 0x20a3, 0x2100, 0x0058, 0x20a3, 0x0100, 0x0040,
--      0x20a3, 0x0400, 0x0028, 0x20a3, 0x0700, 0x0010, 0x700f, 0x0800,
-+      0x7c2d, 0x8dff, 0x0158, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+      0x080c, 0xaf1c, 0x080c, 0xc4f0, 0x080c, 0x5823, 0x080c, 0x8fd0,
-+      0x0804, 0x7c2d, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e,
-+      0x00ce, 0x0005, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x2031, 0x0000,
-+      0x7814, 0xa065, 0x0904, 0x7cdc, 0x600c, 0x0006, 0x600f, 0x0000,
-+      0x7824, 0xac06, 0x1540, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0,
-+      0x080c, 0x703d, 0x080c, 0x8c0e, 0x68c3, 0x0000, 0x080c, 0x90ff,
-+      0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
-+      0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824,
-+      0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009,
-+      0x630a, 0x2c30, 0x00b0, 0x6010, 0x2068, 0x080c, 0xacaa, 0x0168,
-+      0x601c, 0xa086, 0x0003, 0x11b8, 0x6837, 0x0103, 0x6b4a, 0x6847,
-+      0x0000, 0x080c, 0x5823, 0x080c, 0xae61, 0x080c, 0xae6d, 0x080c,
-+      0x8fd0, 0x000e, 0x0804, 0x7c91, 0x7e16, 0x7e12, 0x00de, 0x00ce,
-+      0x006e, 0x000e, 0x0005, 0x601c, 0xa086, 0x0006, 0x1118, 0x080c,
-+      0xc15a, 0x0c58, 0x601c, 0xa086, 0x0002, 0x1128, 0x6004, 0xa086,
-+      0x0085, 0x09d0, 0x0c10, 0x601c, 0xa086, 0x0005, 0x19f0, 0x6004,
-+      0xa086, 0x0085, 0x0d60, 0x08c8, 0x0006, 0x0066, 0x00c6, 0x00d6,
-+      0x7818, 0xa065, 0x0904, 0x7d62, 0x6054, 0x0006, 0x6057, 0x0000,
-+      0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x5281,
-+      0x0904, 0x7d5f, 0x7e24, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004,
-+      0xad06, 0x15c0, 0x00d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0548,
-+      0x080c, 0x703d, 0x080c, 0x8c0e, 0x68c3, 0x0000, 0x080c, 0x90ff,
-+      0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
-+      0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824,
-+      0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c,
-+      0xa005, 0x0110, 0x8001, 0x603e, 0x2660, 0x080c, 0xae6d, 0x00ce,
-+      0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce,
-+      0x0804, 0x7d0e, 0x8dff, 0x0138, 0x6837, 0x0103, 0x6b4a, 0x6847,
-+      0x0000, 0x080c, 0x5823, 0x080c, 0x8fd0, 0x0804, 0x7d0e, 0x000e,
-+      0x0804, 0x7d01, 0x781e, 0x781a, 0x00de, 0x00ce, 0x006e, 0x000e,
-+      0x0005, 0x00e6, 0x00d6, 0x0066, 0x6000, 0xd0dc, 0x01a0, 0x604c,
-+      0xa06d, 0x0188, 0x6848, 0xa606, 0x1170, 0x2071, 0xc927, 0x7024,
-+      0xa035, 0x0148, 0xa080, 0x0004, 0x2004, 0xad06, 0x1120, 0x6000,
-+      0xc0dc, 0x6002, 0x0021, 0x006e, 0x00de, 0x00ee, 0x0005, 0x00f6,
-+      0x2079, 0x0100, 0x78c0, 0xa005, 0x1138, 0x00c6, 0x2660, 0x6003,
-+      0x0009, 0x630a, 0x00ce, 0x04a0, 0x080c, 0x8c0e, 0x78c3, 0x0000,
-+      0x080c, 0x90ff, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04,
-+      0xa384, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000, 0x2079,
-+      0x0100, 0x7824, 0xd084, 0x0110, 0x7827, 0x0001, 0x080c, 0x90ff,
-+      0x003e, 0x080c, 0x5281, 0x00c6, 0x603c, 0xa005, 0x0110, 0x8001,
-+      0x603e, 0x2660, 0x080c, 0x95fc, 0x00ce, 0x6837, 0x0103, 0x6b4a,
-+      0x6847, 0x0000, 0x080c, 0xaf1c, 0x080c, 0x5823, 0x080c, 0x8fd0,
-+      0x00fe, 0x0005, 0x00e6, 0x00c6, 0x2071, 0xc927, 0x7004, 0xa084,
-+      0x0007, 0x0002, 0x7ddc, 0x7ddf, 0x7df5, 0x7e0e, 0x7e4b, 0x7ddc,
-+      0x7dda, 0x7dda, 0x080c, 0x1519, 0x00ce, 0x00ee, 0x0005, 0x7024,
-+      0xa065, 0x0148, 0x7020, 0x8001, 0x7022, 0x600c, 0xa015, 0x0150,
-+      0x7216, 0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce,
-+      0x00ee, 0x0005, 0x7216, 0x7212, 0x0cb0, 0x6018, 0x2060, 0x080c,
-+      0x5281, 0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0120,
-+      0x6054, 0xa015, 0x0140, 0x721e, 0x7007, 0x0000, 0x7027, 0x0000,
-+      0x00ce, 0x00ee, 0x0005, 0x7218, 0x721e, 0x0cb0, 0x7024, 0xa065,
-+      0x05b8, 0x700c, 0xac06, 0x1160, 0x080c, 0x8fd0, 0x600c, 0xa015,
-+      0x0120, 0x720e, 0x600f, 0x0000, 0x0448, 0x720e, 0x720a, 0x0430,
-+      0x7014, 0xac06, 0x1160, 0x080c, 0x8fd0, 0x600c, 0xa015, 0x0120,
-+      0x7216, 0x600f, 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, 0x601c,
-+      0xa086, 0x0003, 0x1198, 0x6018, 0x2060, 0x080c, 0x5281, 0x6000,
-+      0xc0dc, 0x6002, 0x080c, 0x8fd0, 0x701c, 0xa065, 0x0138, 0x6054,
-+      0xa015, 0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000,
-+      0x00ce, 0x00ee, 0x0005, 0x7024, 0xa065, 0x0140, 0x080c, 0x8fd0,
-+      0x600c, 0xa015, 0x0150, 0x720e, 0x600f, 0x0000, 0x080c, 0x90ff,
-+      0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005, 0x720e, 0x720a, 0x0cb0,
-+      0x00d6, 0x2069, 0xc927, 0x6830, 0xa084, 0x0003, 0x0002, 0x7e6d,
-+      0x7e6f, 0x7e93, 0x7e6b, 0x080c, 0x1519, 0x00de, 0x0005, 0x00c6,
-+      0x6840, 0xa086, 0x0001, 0x01b8, 0x683c, 0xa065, 0x0130, 0x600c,
-+      0xa015, 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f,
-+      0x0000, 0x2011, 0xc946, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005,
-+      0x683a, 0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0xa065, 0x0d68,
-+      0x6003, 0x0003, 0x0c50, 0x00c6, 0x6843, 0x0000, 0x6847, 0x0000,
-+      0x684b, 0x0000, 0x683c, 0xa065, 0x0168, 0x600c, 0xa015, 0x0130,
-+      0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0020, 0x683f, 0x0000,
-+      0x683a, 0x6836, 0x00ce, 0x00de, 0x0005, 0x00d6, 0x2069, 0xc927,
-+      0x6804, 0xa084, 0x0007, 0x0006, 0xa005, 0x11c8, 0x2001, 0xc635,
-+      0x2004, 0xa084, 0x0028, 0x1198, 0x2001, 0xc8e5, 0x2004, 0xa086,
-+      0xaaaa, 0x0168, 0x2001, 0xc696, 0x2004, 0xd08c, 0x1118, 0xd084,
-+      0x1118, 0x0028, 0x080c, 0x7f87, 0x000e, 0x00de, 0x0005, 0x000e,
-+      0x0002, 0x7edb, 0x7f77, 0x7f77, 0x7f77, 0x7f77, 0x7f79, 0x7ed9,
-+      0x7ed9, 0x080c, 0x1519, 0x6820, 0xa005, 0x1110, 0x00de, 0x0005,
-+      0x00c6, 0x680c, 0xa065, 0x0150, 0x6807, 0x0004, 0x6826, 0x682b,
-+      0x0000, 0x080c, 0x8009, 0x00ce, 0x00de, 0x0005, 0x6814, 0xa065,
-+      0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x8009,
-+      0x00ce, 0x00de, 0x0005, 0x00e6, 0x0036, 0x6a1c, 0xa2f5, 0x0000,
-+      0x0904, 0x7f73, 0x704c, 0xa00d, 0x0118, 0x7088, 0xa005, 0x01a0,
-+      0x7054, 0xa075, 0x0120, 0xa20e, 0x0904, 0x7f73, 0x0028, 0x6818,
-+      0xa20e, 0x0904, 0x7f73, 0x2070, 0x704c, 0xa00d, 0x0d88, 0x7088,
-+      0xa005, 0x1d70, 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302, 0x1e40,
-+      0x080c, 0x95d3, 0x0904, 0x7f73, 0x8318, 0x733e, 0x6112, 0x2e10,
-+      0x621a, 0xa180, 0x0014, 0x2004, 0xa084, 0x00ff, 0x605a, 0xa180,
-+      0x0014, 0x2003, 0x0000, 0xa180, 0x0015, 0x2004, 0xa08a, 0x199a,
-+      0x0210, 0x2001, 0x1999, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316,
-+      0x003e, 0x00f6, 0x2c78, 0x71a0, 0x2001, 0xc635, 0x2004, 0xd0ac,
-+      0x1110, 0xd1bc, 0x0150, 0x7100, 0xd1f4, 0x0120, 0x7114, 0xa18c,
-+      0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0, 0x2f6e, 0x2c0d,
-+      0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x080c, 0x8639, 0x7300,
-+      0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000,
-+      0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040, 0x00fe, 0x00ee,
-+      0x00ce, 0x00de, 0x0005, 0x003e, 0x00ee, 0x00ce, 0x0cd0, 0x00de,
-+      0x0005, 0x00c6, 0x680c, 0xa065, 0x0138, 0x6807, 0x0004, 0x6826,
-+      0x682b, 0x0000, 0x080c, 0x8009, 0x00ce, 0x00de, 0x0005, 0x00f6,
-+      0x00d6, 0x2069, 0xc927, 0x6830, 0xa086, 0x0000, 0x1904, 0x7fe4,
-+      0x2001, 0xc60c, 0x200c, 0xd1bc, 0x1904, 0x7fff, 0x6838, 0xa07d,
-+      0x0904, 0x7fe4, 0x2001, 0xc635, 0x2004, 0xa084, 0x0028, 0x11f8,
-+      0x2001, 0xc8e5, 0x2004, 0xa086, 0xaaaa, 0x01c8, 0x781c, 0xa086,
-+      0x0009, 0x11a8, 0x7808, 0xd0fc, 0x0190, 0x2001, 0xc928, 0x2004,
-+      0xa005, 0x1138, 0x2001, 0xc696, 0x200c, 0xc185, 0xc18c, 0x2102,
-+      0x0030, 0x2011, 0xc696, 0x2204, 0xc08d, 0x2012, 0x0428, 0x2f00,
-+      0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126,
-+      0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, 0x20ef, 0x11c0, 0x012e,
-+      0xe000, 0xe000, 0xe000, 0x6a3c, 0x2278, 0x781c, 0xa086, 0x0009,
-+      0x1148, 0x7808, 0xd0fc, 0x0118, 0x080c, 0x8982, 0x0028, 0x080c,
-+      0x89fb, 0x0010, 0x080c, 0x8a7f, 0x00de, 0x00fe, 0x0005, 0x012e,
-+      0xe000, 0x6843, 0x0000, 0x781c, 0xa086, 0x0009, 0x0110, 0x7803,
-+      0x0002, 0x780c, 0xa015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833,
-+      0x0000, 0x683f, 0x0000, 0x0c40, 0x683a, 0x6836, 0x0cc0, 0xc1bc,
-+      0x2102, 0x0066, 0x2031, 0x0001, 0x080c, 0x5fbd, 0x006e, 0x0804,
-+      0x7f96, 0x601c, 0xa084, 0x000f, 0x000b, 0x0005, 0x8017, 0x801c,
-+      0x84da, 0x85f6, 0x801c, 0x84da, 0x85f6, 0x8017, 0x801c, 0x080c,
-+      0x7dca, 0x080c, 0x7ead, 0x0005, 0x0156, 0x0136, 0x0146, 0x00c6,
-+      0x00f6, 0x6004, 0xa08a, 0x0080, 0x1a0c, 0x1519, 0x6118, 0x2178,
-+      0x79a0, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150,
-+      0x7900, 0xd1f4, 0x0120, 0x7914, 0xa18c, 0x00ff, 0x0040, 0x2009,
-+      0x0000, 0x0028, 0xa1f8, 0x2f6e, 0x2f0d, 0xa18c, 0x00ff, 0x2c78,
-+      0x2061, 0x0100, 0x619a, 0xa08a, 0x0040, 0x1a04, 0x8090, 0x0033,
-+      0x00fe, 0x00ce, 0x014e, 0x013e, 0x015e, 0x0005, 0x813f, 0x818a,
-+      0x81b7, 0x8284, 0x82b2, 0x82ba, 0x82e0, 0x82f1, 0x8302, 0x830a,
-+      0x8320, 0x830a, 0x8381, 0x82f1, 0x83a2, 0x83aa, 0x8302, 0x83aa,
-+      0x83bb, 0x808e, 0x808e, 0x808e, 0x808e, 0x808e, 0x808e, 0x808e,
-+      0x808e, 0x808e, 0x808e, 0x808e, 0x8d33, 0x8d58, 0x8d6d, 0x8d90,
-+      0x8db1, 0x82e0, 0x808e, 0x82e0, 0x830a, 0x808e, 0x81b7, 0x8284,
-+      0x808e, 0x9201, 0x830a, 0x808e, 0x9221, 0x830a, 0x808e, 0x8302,
-+      0x8138, 0x80a3, 0x808e, 0x9246, 0x92bb, 0x9392, 0x808e, 0x93a3,
-+      0x82db, 0x93bf, 0x808e, 0x8dc6, 0x941a, 0x808e, 0x080c, 0x1519,
-+      0x2100, 0x0033, 0x00fe, 0x00ce, 0x014e, 0x013e, 0x015e, 0x0005,
-+      0x9471, 0x9520, 0x80a1, 0x80d7, 0x80f5, 0x810b, 0x80a1, 0x82e0,
-+      0x80a1, 0x080c, 0x1519, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x83d8,
-+      0x7810, 0x2068, 0x20a3, 0x2414, 0x20a3, 0x0018, 0x20a3, 0x0800,
-+      0x683c, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x6850, 0x20a2, 0x6854, 0x20a2, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x60c3, 0x0018, 0x080c, 0x8bfb, 0x00de, 0x0005,
-+      0x00d6, 0x7818, 0x2068, 0x68a0, 0x2069, 0xc600, 0x6ad4, 0xd2ac,
-+      0x1110, 0xd0bc, 0x0110, 0xa085, 0x0001, 0x00de, 0x0005, 0x00d6,
-+      0x20a1, 0x020b, 0x080c, 0x83d8, 0x20a3, 0x0500, 0x20a3, 0x0000,
-+      0x7810, 0xa0e8, 0x000f, 0x6808, 0x20a2, 0x680c, 0x20a2, 0x6810,
-+      0x20a2, 0x6814, 0x20a2, 0x6818, 0x20a2, 0x681c, 0x20a2, 0x60c3,
-+      0x0010, 0x080c, 0x8bfb, 0x00de, 0x0005, 0x0156, 0x0146, 0x20a1,
-+      0x020b, 0x080c, 0x83d8, 0x20a3, 0x7800, 0x20a3, 0x0000, 0x7808,
-+      0x8007, 0x20a2, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x080c, 0x8bfb,
-+      0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c,
-+      0x8474, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0xdf10, 0x20a3,
-+      0x0034, 0x2099, 0xc605, 0x20a9, 0x0004, 0x53a6, 0x2099, 0xc601,
-+      0x20a9, 0x0004, 0x53a6, 0x2099, 0xc90d, 0x20a9, 0x001a, 0x3304,
-+      0x8007, 0x20a2, 0x9398, 0x1f04, 0x8127, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x60c3, 0x004c, 0x080c, 0x8bfb, 0x014e, 0x015e, 0x0005,
-+      0x2001, 0xc615, 0x2004, 0x609a, 0x080c, 0x8bfb, 0x0005, 0x20a1,
-+      0x020b, 0x080c, 0x83d8, 0x20a3, 0x5200, 0x20a3, 0x0000, 0x00d6,
-+      0x2069, 0xc652, 0x6804, 0xd084, 0x0150, 0x6828, 0x20a3, 0x0000,
-+      0x0016, 0x080c, 0x29db, 0x21a2, 0x001e, 0x00de, 0x0028, 0x00de,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0xc605,
-+      0x53a6, 0x20a9, 0x0004, 0x2099, 0xc601, 0x53a6, 0x2001, 0xc635,
-+      0x2004, 0xd0ac, 0x1138, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082,
-+      0x007f, 0x0238, 0x2001, 0xc61c, 0x20a6, 0x2001, 0xc61d, 0x20a6,
-+      0x0040, 0x20a3, 0x0000, 0x2001, 0xc615, 0x2004, 0xa084, 0x00ff,
-+      0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x080c,
-+      0x8bfb, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83d8, 0x20a3, 0x0500,
-+      0x20a3, 0x0000, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1138, 0x7818,
-+      0xa080, 0x0028, 0x2004, 0xa082, 0x007f, 0x0238, 0x2001, 0xc61c,
-+      0x20a6, 0x2001, 0xc61d, 0x20a6, 0x0040, 0x20a3, 0x0000, 0x2001,
-+      0xc615, 0x2004, 0xa084, 0x00ff, 0x20a2, 0x20a9, 0x0004, 0x2099,
-+      0xc605, 0x53a6, 0x60c3, 0x0010, 0x080c, 0x8bfb, 0x0005, 0x20a1,
-+      0x020b, 0x080c, 0x83d8, 0x00c6, 0x7818, 0x2060, 0x2001, 0x0000,
-+      0x080c, 0x572e, 0x00ce, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086,
-+      0x007e, 0x1130, 0x20a3, 0x0400, 0x620c, 0xc2b4, 0x620e, 0x0010,
-+      0x20a3, 0x0300, 0x20a3, 0x0000, 0x7818, 0xa080, 0x0028, 0x2004,
-+      0xa086, 0x007e, 0x1904, 0x8246, 0x2001, 0xc635, 0x2004, 0xd0a4,
-+      0x01c8, 0x2099, 0xc8d5, 0x33a6, 0x9398, 0x20a3, 0x0000, 0x9398,
-+      0x3304, 0xa084, 0x2000, 0x20a2, 0x9398, 0x33a6, 0x9398, 0x20a3,
-+      0x0000, 0x9398, 0x2001, 0x2710, 0x20a2, 0x9398, 0x33a6, 0x9398,
-+      0x33a6, 0x00d0, 0x2099, 0xc8d5, 0x33a6, 0x9398, 0x33a6, 0x9398,
-+      0x3304, 0x080c, 0x5f3b, 0x1118, 0xa084, 0x37ff, 0x0010, 0xa084,
-+      0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0xc605,
-+      0x53a6, 0x20a9, 0x0004, 0x2099, 0xc601, 0x53a6, 0x20a9, 0x0008,
-+      0x20a3, 0x0000, 0x1f04, 0x8220, 0x20a9, 0x0008, 0x20a3, 0x0000,
-+      0x1f04, 0x8226, 0x2099, 0xc8dd, 0x3304, 0xc0dd, 0x20a2, 0x2001,
-+      0xc672, 0x2004, 0xd0e4, 0x0158, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x9398, 0x9398, 0x9398, 0x33a6, 0x20a9, 0x0004, 0x0010, 0x20a9,
-+      0x0007, 0x20a3, 0x0000, 0x1f04, 0x8241, 0x0468, 0x2001, 0xc635,
-+      0x2004, 0xd0a4, 0x0140, 0x2001, 0xc8d6, 0x2004, 0x60e3, 0x0000,
-+      0x080c, 0x2a1c, 0x60e2, 0x2099, 0xc8d5, 0x20a9, 0x0008, 0x53a6,
-+      0x20a9, 0x0004, 0x2099, 0xc605, 0x53a6, 0x20a9, 0x0004, 0x2099,
-+      0xc601, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x8264,
-+      0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x826a, 0x2099, 0xc8dd,
-+      0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04,
-+      0x8275, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04, 0x827b, 0x60c3,
-+      0x0074, 0x080c, 0x8bfb, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83d8,
-+      0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3, 0x2000,
-       0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x00f6, 0x2079,
-       0xc652, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0xa085, 0x0020, 0xd1a4,
--      0x0110, 0xa085, 0x0010, 0x2009, 0xc674, 0x210c, 0xd184, 0x1110,
--      0xa085, 0x0002, 0x0026, 0x2009, 0xc672, 0x210c, 0xd1e4, 0x0130,
--      0xc0c5, 0xa094, 0x0030, 0xa296, 0x0010, 0x0140, 0xd1ec, 0x0130,
--      0xa094, 0x0030, 0xa296, 0x0010, 0x0108, 0xc0bd, 0x002e, 0x20a2,
--      0x20a2, 0x20a2, 0x60c3, 0x0014, 0x080c, 0x8be2, 0x00de, 0x0005,
--      0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0210, 0x20a3, 0x0014,
--      0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x0110, 0xa085, 0x0010, 0xa085, 0x0002, 0x00d6, 0x0804, 0x8363,
-+      0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c,
-+      0x8bfb, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83d8, 0x20a3, 0x5000,
-+      0x0804, 0x81d2, 0x20a1, 0x020b, 0x080c, 0x83d8, 0x20a3, 0x2110,
-+      0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-       0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x8be2,
--      0x0005, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0200, 0x0804,
--      0x812c, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014,
-+      0x080c, 0x8bfb, 0x0005, 0x20a1, 0x020b, 0x080c, 0x846c, 0x0020,
-+      0x20a1, 0x020b, 0x080c, 0x8474, 0x20a3, 0x0200, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x080c, 0x8bfb,
-+      0x0005, 0x20a1, 0x020b, 0x080c, 0x8474, 0x20a3, 0x0100, 0x20a3,
-       0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x080c,
--      0x8be2, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1, 0x020b,
--      0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x000b,
--      0x20a3, 0x0000, 0x60c3, 0x0008, 0x080c, 0x8be2, 0x0005, 0x0026,
--      0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0038, 0x0026,
--      0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x20e1, 0x9080,
--      0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2014, 0xa286, 0x007e,
--      0x11a0, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffe, 0x20a3, 0x0000,
--      0x2011, 0xc615, 0x2214, 0x2001, 0xc8e5, 0x2004, 0xa005, 0x0118,
--      0x2011, 0xc61d, 0x2214, 0x22a2, 0x04d0, 0xa286, 0x007f, 0x1138,
--      0x00d6, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffd, 0x00c8, 0x2001,
--      0xc635, 0x2004, 0xd0ac, 0x1110, 0xd2bc, 0x01c8, 0xa286, 0x0080,
--      0x00d6, 0x1130, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffc, 0x0040,
--      0xa2e8, 0xc77b, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2,
--      0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0080, 0x00d6,
--      0xa2e8, 0xc77b, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2,
--      0x00de, 0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0xa485,
--      0x0029, 0x20a2, 0x004e, 0x003e, 0x20a3, 0x0000, 0x080c, 0x8bd1,
--      0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x002e, 0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1,
--      0x4000, 0x20a3, 0x02ff, 0x2011, 0xfffc, 0x22a2, 0x00d6, 0x2069,
--      0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x20a3, 0x2029, 0x20a3,
--      0x0000, 0x08e0, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0xfc02,
--      0x20a3, 0x0000, 0x0005, 0x0026, 0x0036, 0x0046, 0x2019, 0x3300,
--      0x2021, 0x0800, 0x0038, 0x0026, 0x0036, 0x0046, 0x2019, 0x2300,
--      0x2021, 0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
--      0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118, 0xa092,
--      0x007e, 0x02d8, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa305,
--      0x20a2, 0x6814, 0x20a2, 0x6810, 0xa005, 0x1140, 0x6814, 0xa005,
--      0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x0028, 0x2069, 0xc61c,
--      0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0080, 0x00d6, 0xa0e8, 0xc77b,
--      0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3,
--      0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0xa485, 0x0098, 0x20a2,
--      0x20a3, 0x0000, 0x004e, 0x003e, 0x080c, 0x8bd1, 0x22a2, 0x20a3,
--      0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x002e, 0x0005, 0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000, 0x7a08,
--      0x22a2, 0x7810, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e,
--      0x0005, 0x00c6, 0x00f6, 0x6004, 0xa08a, 0x0085, 0x0a0c, 0x1519,
--      0xa08a, 0x008c, 0x1a0c, 0x1519, 0x6118, 0x2178, 0x79a0, 0x2011,
--      0xc635, 0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x7900, 0xd1f4,
--      0x0120, 0x7914, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028,
--      0xa1f8, 0x2f6e, 0x2f0d, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100,
--      0x619a, 0xa082, 0x0085, 0x001b, 0x00fe, 0x00ce, 0x0005, 0x84f8,
--      0x8502, 0x851d, 0x84f6, 0x84f6, 0x84f6, 0x84f8, 0x080c, 0x1519,
--      0x0146, 0x20a1, 0x020b, 0x04a1, 0x60c3, 0x0000, 0x080c, 0x8be2,
--      0x014e, 0x0005, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8569, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x7810, 0x20a2, 0x20a3,
--      0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
--      0x000c, 0x080c, 0x8be2, 0x014e, 0x0005, 0x0146, 0x20a1, 0x020b,
--      0x080c, 0x85a3, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x60c3, 0x0004, 0x080c, 0x8be2, 0x014e, 0x0005,
--      0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
--      0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e,
--      0x0288, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x8100,
--      0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6,
--      0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085,
--      0x8100, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011,
--      0xc615, 0x2214, 0x22a2, 0x20a3, 0x0009, 0x20a3, 0x0000, 0x0804,
--      0x8426, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
-+      0x8bfb, 0x0005, 0x20a1, 0x020b, 0x080c, 0x8474, 0x20a3, 0x0200,
-+      0x0804, 0x81d2, 0x20a1, 0x020b, 0x080c, 0x8474, 0x20a3, 0x0100,
-+      0x20a3, 0x0000, 0x7828, 0xa005, 0x0110, 0x20a2, 0x0010, 0x20a3,
-+      0x0003, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x8bfb, 0x0005,
-+      0x00d6, 0x20a1, 0x020b, 0x080c, 0x8474, 0x20a3, 0x0210, 0x20a3,
-+      0x0014, 0x20a3, 0x0800, 0x7818, 0x2068, 0x6894, 0xa086, 0x0014,
-+      0x1198, 0x699c, 0xa184, 0x0030, 0x0190, 0x6998, 0xa184, 0xc000,
-+      0x1140, 0xd1ec, 0x0118, 0x20a3, 0x2100, 0x0058, 0x20a3, 0x0100,
-+      0x0040, 0x20a3, 0x0400, 0x0028, 0x20a3, 0x0700, 0x0010, 0x700f,
-+      0x0800, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x00f6,
-+      0x2079, 0xc652, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0xa085, 0x0020,
-+      0xd1a4, 0x0110, 0xa085, 0x0010, 0x2009, 0xc674, 0x210c, 0xd184,
-+      0x1110, 0xa085, 0x0002, 0x0026, 0x2009, 0xc672, 0x210c, 0xd1e4,
-+      0x0130, 0xc0c5, 0xa094, 0x0030, 0xa296, 0x0010, 0x0140, 0xd1ec,
-+      0x0130, 0xa094, 0x0030, 0xa296, 0x0010, 0x0108, 0xc0bd, 0x002e,
-+      0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x080c, 0x8bfb, 0x00de,
-+      0x0005, 0x20a1, 0x020b, 0x080c, 0x8474, 0x20a3, 0x0210, 0x20a3,
-+      0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c,
-+      0x8bfb, 0x0005, 0x20a1, 0x020b, 0x080c, 0x8474, 0x20a3, 0x0200,
-+      0x0804, 0x8145, 0x20a1, 0x020b, 0x080c, 0x8474, 0x20a3, 0x0100,
-+      0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008,
-+      0x080c, 0x8bfb, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1,
-+      0x020b, 0x080c, 0x8474, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
-+      0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x080c, 0x8bfb, 0x0005,
-+      0x0026, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0038,
-+      0x0026, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x20e1,
-+      0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2014, 0xa286,
-+      0x007e, 0x11a0, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffe, 0x20a3,
-+      0x0000, 0x2011, 0xc615, 0x2214, 0x2001, 0xc8e5, 0x2004, 0xa005,
-+      0x0118, 0x2011, 0xc61d, 0x2214, 0x22a2, 0x04d0, 0xa286, 0x007f,
-+      0x1138, 0x00d6, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffd, 0x00c8,
-+      0x2001, 0xc635, 0x2004, 0xd0ac, 0x1110, 0xd2bc, 0x01c8, 0xa286,
-+      0x0080, 0x00d6, 0x1130, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffc,
-+      0x0040, 0xa2e8, 0xc77b, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814,
-+      0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0080,
-+      0x00d6, 0xa2e8, 0xc77b, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814,
-+      0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2,
-+      0xa485, 0x0029, 0x20a2, 0x004e, 0x003e, 0x20a3, 0x0000, 0x080c,
-+      0x8bea, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x0026, 0x20e1, 0x9080,
-+      0x20e1, 0x4000, 0x20a3, 0x02ff, 0x2011, 0xfffc, 0x22a2, 0x00d6,
-+      0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x20a3, 0x2029,
-+      0x20a3, 0x0000, 0x08e0, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
-+      0xfc02, 0x20a3, 0x0000, 0x0005, 0x0026, 0x0036, 0x0046, 0x2019,
-+      0x3300, 0x2021, 0x0800, 0x0038, 0x0026, 0x0036, 0x0046, 0x2019,
-+      0x2300, 0x2021, 0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818,
-+      0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118,
-+      0xa092, 0x007e, 0x02d8, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810,
-+      0xa305, 0x20a2, 0x6814, 0x20a2, 0x6810, 0xa005, 0x1140, 0x6814,
-+      0xa005, 0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x0028, 0x2069,
-+      0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0080, 0x00d6, 0xa0e8,
-+      0xc77b, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x00de,
-+      0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0xa485, 0x0098,
-+      0x20a2, 0x20a3, 0x0000, 0x004e, 0x003e, 0x080c, 0x8bea, 0x22a2,
-+      0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x002e, 0x0005, 0x080c, 0x8bea, 0x22a2, 0x20a3, 0x0000,
-+      0x7a08, 0x22a2, 0x7810, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x002e, 0x0005, 0x00c6, 0x00f6, 0x6004, 0xa08a, 0x0085, 0x0a0c,
-+      0x1519, 0xa08a, 0x008c, 0x1a0c, 0x1519, 0x6118, 0x2178, 0x79a0,
-+      0x2011, 0xc635, 0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x7900,
-+      0xd1f4, 0x0120, 0x7914, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000,
-+      0x0028, 0xa1f8, 0x2f6e, 0x2f0d, 0xa18c, 0x00ff, 0x2c78, 0x2061,
-+      0x0100, 0x619a, 0xa082, 0x0085, 0x001b, 0x00fe, 0x00ce, 0x0005,
-+      0x8511, 0x851b, 0x8536, 0x850f, 0x850f, 0x850f, 0x8511, 0x080c,
-+      0x1519, 0x0146, 0x20a1, 0x020b, 0x04a1, 0x60c3, 0x0000, 0x080c,
-+      0x8bfb, 0x014e, 0x0005, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8582,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x7810, 0x20a2,
-+      0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x60c3, 0x000c, 0x080c, 0x8bfb, 0x014e, 0x0005, 0x0146, 0x20a1,
-+      0x020b, 0x080c, 0x85bc, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x080c, 0x8bfb, 0x014e,
-+      0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
-       0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118, 0xa092,
-       0x007e, 0x0288, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085,
--      0x8400, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68,
-+      0x8100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68,
-       0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810,
--      0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000,
--      0x2011, 0xc615, 0x2214, 0x22a2, 0x2001, 0x0099, 0x20a2, 0x20a3,
--      0x0000, 0x0804, 0x84b2, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000,
--      0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac,
--      0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c,
--      0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c,
--      0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b,
--      0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x00de,
--      0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x2001, 0x0099,
--      0x20a2, 0x20a3, 0x0000, 0x0804, 0x84b2, 0x00c6, 0x00f6, 0x2c78,
--      0x7804, 0xa08a, 0x0040, 0x0a0c, 0x1519, 0xa08a, 0x0053, 0x1a0c,
--      0x1519, 0x7918, 0x2160, 0x61a0, 0x2011, 0xc635, 0x2214, 0xd2ac,
--      0x1110, 0xd1bc, 0x0150, 0x6100, 0xd1f4, 0x0120, 0x6114, 0xa18c,
--      0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0, 0x2f6e, 0x2c0d,
--      0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0xa082, 0x0040, 0x001b,
--      0x00fe, 0x00ce, 0x0005, 0x8620, 0x872c, 0x86c9, 0x88de, 0x861e,
--      0x861e, 0x861e, 0x861e, 0x861e, 0x861e, 0x861e, 0x8f70, 0x8f80,
--      0x8f90, 0x8fa0, 0x861e, 0x93b0, 0x861e, 0x8f5f, 0x080c, 0x1519,
--      0x00d6, 0x0156, 0x0146, 0x780b, 0xffff, 0x20a1, 0x020b, 0x080c,
--      0x8680, 0x7910, 0x2168, 0x6948, 0x7952, 0x21a2, 0xa016, 0x22a2,
--      0x22a2, 0x22a2, 0x694c, 0xa184, 0x000f, 0x1118, 0x2001, 0x0005,
--      0x0040, 0xd184, 0x0118, 0x2001, 0x0004, 0x0018, 0xa084, 0x0006,
--      0x8004, 0x0016, 0x2008, 0x7858, 0xa084, 0x00ff, 0x8007, 0xa105,
--      0x001e, 0x20a2, 0xd1ac, 0x0118, 0x20a3, 0x0002, 0x0048, 0xd1b4,
--      0x0118, 0x20a3, 0x0001, 0x0020, 0x20a3, 0x0000, 0x2230, 0x0010,
--      0x6a80, 0x6e7c, 0x20a9, 0x0008, 0x0136, 0xad88, 0x0017, 0x2198,
--      0x20a1, 0x021b, 0x53a6, 0x013e, 0x20a1, 0x020b, 0x22a2, 0x26a2,
--      0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014, 0xa084, 0x0004, 0xa085,
--      0x0009, 0x6016, 0x2001, 0xc943, 0x2003, 0x07d0, 0x2001, 0xc942,
--      0x2003, 0x0009, 0x080c, 0x17f1, 0x014e, 0x015e, 0x00de, 0x0005,
--      0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014,
--      0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028,
--      0x2004, 0x2019, 0xc635, 0x231c, 0xd3ac, 0x1110, 0xd0bc, 0x0188,
--      0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2,
--      0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
--      0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0600,
--      0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2009, 0xc615,
--      0x210c, 0x21a2, 0x20a3, 0x0829, 0x20a3, 0x0000, 0x22a2, 0x20a3,
--      0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x20a1, 0x020b, 0x00c1,
--      0x7810, 0x2068, 0x6860, 0x20a2, 0x685c, 0x20a2, 0x6880, 0x20a2,
--      0x687c, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x60c3,
--      0x000c, 0x080c, 0x8be2, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
--      0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
--      0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
--      0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2,
--      0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
--      0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0500,
--      0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xc615,
--      0x2214, 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x080c, 0x8bd1,
--      0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000,
--      0x20a3, 0x0000, 0x002e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146,
--      0x7810, 0xa0ec, 0xf000, 0x0168, 0xa06d, 0x080c, 0x56bf, 0x0148,
--      0x684c, 0xa084, 0x2020, 0xa086, 0x2020, 0x1118, 0x7820, 0xc0cd,
--      0x7822, 0x20a1, 0x020b, 0x080c, 0x8894, 0xa016, 0x22a2, 0x22a2,
--      0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000, 0x1130, 0x7810,
--      0xa084, 0x0700, 0x8007, 0x0043, 0x0010, 0xa006, 0x002b, 0x014e,
--      0x013e, 0x015e, 0x00de, 0x0005, 0x8766, 0x87fb, 0x880b, 0x883d,
--      0x8850, 0x886b, 0x8874, 0x8764, 0x080c, 0x1519, 0x0016, 0x0036,
--      0x694c, 0xa18c, 0x0003, 0x0118, 0xa186, 0x0003, 0x1170, 0x6b78,
--      0x7820, 0xd0cc, 0x0108, 0xc3e5, 0x23a2, 0x6868, 0x20a2, 0x6864,
--      0x20a2, 0x003e, 0x001e, 0x0804, 0x8847, 0xa186, 0x0001, 0x190c,
--      0x1519, 0x6b78, 0x7820, 0xd0cc, 0x0108, 0xc3e5, 0x23a2, 0x6868,
--      0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2, 0x22a2, 0x687c,
--      0x20a2, 0x2009, 0x0018, 0xa384, 0x0300, 0x0904, 0x87f5, 0xd3c4,
--      0x0110, 0x687c, 0xa108, 0xd3cc, 0x0110, 0x6874, 0xa108, 0x0156,
--      0x20a9, 0x000d, 0xad80, 0x0020, 0x201c, 0x831f, 0x23a2, 0x8000,
--      0x1f04, 0x87a4, 0x015e, 0x22a2, 0x22a2, 0x22a2, 0xa184, 0x0003,
--      0x0904, 0x87f5, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000,
--      0x0006, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214,
--      0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c,
--      0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c,
--      0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b,
--      0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x00de,
--      0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x000e, 0x7b20,
--      0xd3cc, 0x0118, 0x20a3, 0x0889, 0x0010, 0x20a3, 0x0898, 0x20a2,
--      0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000, 0x61c2, 0x003e, 0x001e,
--      0x080c, 0x8be2, 0x0005, 0x2011, 0x0008, 0x2001, 0xc60d, 0x2004,
--      0xd0f4, 0x0110, 0x2011, 0x0028, 0x7820, 0xd0cc, 0x0108, 0xc2e5,
--      0x22a2, 0xa016, 0x04d0, 0x2011, 0x0302, 0x0016, 0x0036, 0x7828,
--      0x792c, 0xa11d, 0x0108, 0xc2dd, 0x7b20, 0xd3cc, 0x0108, 0xc2e5,
--      0x22a2, 0x20a2, 0x21a2, 0x003e, 0x001e, 0xa016, 0x22a2, 0x20a3,
--      0x0012, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
--      0x20a3, 0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, 0x000a, 0x22a2,
--      0x22a2, 0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
--      0x60c3, 0x0032, 0x080c, 0x8be2, 0x0005, 0x2011, 0x0028, 0x7820,
--      0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x22a2, 0x22a2, 0x22a2,
--      0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, 0x080c, 0x8be2, 0x0005,
--      0x2011, 0x0100, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016,
--      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2,
--      0x7854, 0xa084, 0x00ff, 0x20a2, 0x22a2, 0x22a2, 0x60c3, 0x0020,
--      0x080c, 0x8be2, 0x0005, 0x2011, 0x0008, 0x7820, 0xd0cc, 0x0108,
--      0xc2e5, 0x22a2, 0xa016, 0x0888, 0x0036, 0x7b10, 0xa384, 0xff00,
--      0x7812, 0xa384, 0x00ff, 0x8001, 0x1138, 0x7820, 0xd0cc, 0x0108,
--      0xc2e5, 0x22a2, 0x003e, 0x0808, 0x0046, 0x2021, 0x0800, 0x0006,
--      0x7820, 0xd0cc, 0x000e, 0x0108, 0xc4e5, 0x24a2, 0x004e, 0x22a2,
--      0x20a2, 0x003e, 0x0804, 0x8847, 0x0026, 0x20e1, 0x9080, 0x20e1,
--      0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214,
--      0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c,
--      0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c,
--      0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b,
--      0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x00de,
--      0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x7820, 0xd0cc,
--      0x0118, 0x20a3, 0x0889, 0x0010, 0x20a3, 0x0898, 0x20a3, 0x0000,
--      0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2,
--      0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00d6, 0x0156,
--      0x0136, 0x0146, 0x0016, 0x0036, 0x7810, 0xa084, 0x0700, 0x8007,
--      0x003b, 0x003e, 0x001e, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
--      0x88f8, 0x88f8, 0x88fa, 0x88f8, 0x88f8, 0x88f8, 0x891c, 0x88f8,
--      0x080c, 0x1519, 0x7910, 0xa18c, 0xf8ff, 0xa18d, 0x0600, 0x7912,
--      0x20a1, 0x020b, 0x2009, 0x0003, 0x00f9, 0x00d6, 0x2069, 0xc652,
--      0x6804, 0xd0bc, 0x0130, 0x682c, 0xa084, 0x00ff, 0x8007, 0x20a2,
--      0x0010, 0x20a3, 0x3f00, 0x00de, 0x22a2, 0x22a2, 0x22a2, 0x60c3,
--      0x0001, 0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b, 0x2009, 0x0003,
--      0x0019, 0x20a3, 0x7f00, 0x0c80, 0x0026, 0x20e1, 0x9080, 0x20e1,
-+      0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000,
-+      0x2011, 0xc615, 0x2214, 0x22a2, 0x20a3, 0x0009, 0x20a3, 0x0000,
-+      0x0804, 0x843f, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818,
-+      0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118,
-+      0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810,
-+      0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6,
-+      0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c,
-+      0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3,
-+      0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x2001, 0x0099, 0x20a2,
-+      0x20a3, 0x0000, 0x0804, 0x84cb, 0x0026, 0x20e1, 0x9080, 0x20e1,
-       0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214,
--      0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c,
--      0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c,
--      0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b,
--      0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, 0x00de,
--      0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x20a3, 0x0888,
--      0xa18d, 0x0008, 0x21a2, 0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000,
--      0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e,
--      0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0036,
--      0x2061, 0x0100, 0x2071, 0xc600, 0x2009, 0xc615, 0x210c, 0x7818,
--      0x2068, 0x2031, 0xc635, 0x2634, 0xa6b4, 0x0028, 0x0110, 0x7370,
--      0x7474, 0x2500, 0x2031, 0xc635, 0x2634, 0xa6b4, 0x0028, 0x0140,
--      0x2001, 0x04ff, 0x6062, 0x6067, 0xffff, 0x636a, 0x646e, 0x0050,
--      0x2001, 0x00ff, 0xa085, 0x0400, 0x6062, 0x6067, 0xffff, 0x606b,
--      0x0000, 0x616e, 0x68b8, 0x6073, 0x0530, 0x6077, 0x0008, 0x688c,
--      0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0xa085, 0x0020, 0x607a,
--      0x68b4, 0x607f, 0x0000, 0x2d00, 0x6082, 0x6087, 0xffff, 0x7810,
--      0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008,
--      0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7,
--      0x0000, 0x2001, 0xc635, 0x2004, 0xa084, 0x0028, 0x0128, 0x609f,
--      0x0000, 0x2001, 0x0092, 0x0048, 0x6028, 0xc0bd, 0x602a, 0x609f,
--      0x00ff, 0x6027, 0xffff, 0x2001, 0x00b2, 0x6016, 0x2009, 0x07d0,
--      0x080c, 0x7029, 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de,
--      0x00ee, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046,
-+      0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8, 0xc77b,
-+      0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x2069,
-+      0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8,
-+      0xc77b, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2,
-+      0x00de, 0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x2001,
-+      0x0099, 0x20a2, 0x20a3, 0x0000, 0x0804, 0x84cb, 0x00c6, 0x00f6,
-+      0x2c78, 0x7804, 0xa08a, 0x0040, 0x0a0c, 0x1519, 0xa08a, 0x0053,
-+      0x1a0c, 0x1519, 0x7918, 0x2160, 0x61a0, 0x2011, 0xc635, 0x2214,
-+      0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x6100, 0xd1f4, 0x0120, 0x6114,
-+      0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0, 0x2f6e,
-+      0x2c0d, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0xa082, 0x0040,
-+      0x001b, 0x00fe, 0x00ce, 0x0005, 0x8639, 0x8745, 0x86e2, 0x88f7,
-+      0x8637, 0x8637, 0x8637, 0x8637, 0x8637, 0x8637, 0x8637, 0x8f89,
-+      0x8f99, 0x8fa9, 0x8fb9, 0x8637, 0x93d0, 0x8637, 0x8f78, 0x080c,
-+      0x1519, 0x00d6, 0x0156, 0x0146, 0x780b, 0xffff, 0x20a1, 0x020b,
-+      0x080c, 0x8699, 0x7910, 0x2168, 0x6948, 0x7952, 0x21a2, 0xa016,
-+      0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184, 0x000f, 0x1118, 0x2001,
-+      0x0005, 0x0040, 0xd184, 0x0118, 0x2001, 0x0004, 0x0018, 0xa084,
-+      0x0006, 0x8004, 0x0016, 0x2008, 0x7858, 0xa084, 0x00ff, 0x8007,
-+      0xa105, 0x001e, 0x20a2, 0xd1ac, 0x0118, 0x20a3, 0x0002, 0x0048,
-+      0xd1b4, 0x0118, 0x20a3, 0x0001, 0x0020, 0x20a3, 0x0000, 0x2230,
-+      0x0010, 0x6a80, 0x6e7c, 0x20a9, 0x0008, 0x0136, 0xad88, 0x0017,
-+      0x2198, 0x20a1, 0x021b, 0x53a6, 0x013e, 0x20a1, 0x020b, 0x22a2,
-+      0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014, 0xa084, 0x0004,
-+      0xa085, 0x0009, 0x6016, 0x2001, 0xc943, 0x2003, 0x07d0, 0x2001,
-+      0xc942, 0x2003, 0x0009, 0x080c, 0x17f1, 0x014e, 0x015e, 0x00de,
-+      0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023,
-+      0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080,
-+      0x0028, 0x2004, 0x2019, 0xc635, 0x231c, 0xd3ac, 0x1110, 0xd0bc,
-+      0x0188, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0600,
-+      0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6,
-+      0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085,
-+      0x0600, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2009,
-+      0xc615, 0x210c, 0x21a2, 0x20a3, 0x0829, 0x20a3, 0x0000, 0x22a2,
-+      0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x20a1, 0x020b,
-+      0x00c1, 0x7810, 0x2068, 0x6860, 0x20a2, 0x685c, 0x20a2, 0x6880,
-+      0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
-+      0x60c3, 0x000c, 0x080c, 0x8bfb, 0x014e, 0x013e, 0x015e, 0x00de,
-+      0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
-+      0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1110, 0xd0bc,
-+      0x0188, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0500,
-+      0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6,
-+      0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085,
-+      0x0500, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011,
-+      0xc615, 0x2214, 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x080c,
-+      0x8bea, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00d6, 0x0156, 0x0136,
-+      0x0146, 0x7810, 0xa0ec, 0xf000, 0x0168, 0xa06d, 0x080c, 0x56d8,
-+      0x0148, 0x684c, 0xa084, 0x2020, 0xa086, 0x2020, 0x1118, 0x7820,
-+      0xc0cd, 0x7822, 0x20a1, 0x020b, 0x080c, 0x88ad, 0xa016, 0x22a2,
-+      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000, 0x1130,
-+      0x7810, 0xa084, 0x0700, 0x8007, 0x0043, 0x0010, 0xa006, 0x002b,
-+      0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x877f, 0x8814, 0x8824,
-+      0x8856, 0x8869, 0x8884, 0x888d, 0x877d, 0x080c, 0x1519, 0x0016,
-+      0x0036, 0x694c, 0xa18c, 0x0003, 0x0118, 0xa186, 0x0003, 0x1170,
-+      0x6b78, 0x7820, 0xd0cc, 0x0108, 0xc3e5, 0x23a2, 0x6868, 0x20a2,
-+      0x6864, 0x20a2, 0x003e, 0x001e, 0x0804, 0x8860, 0xa186, 0x0001,
-+      0x190c, 0x1519, 0x6b78, 0x7820, 0xd0cc, 0x0108, 0xc3e5, 0x23a2,
-+      0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2, 0x22a2,
-+      0x687c, 0x20a2, 0x2009, 0x0018, 0xa384, 0x0300, 0x0904, 0x880e,
-+      0xd3c4, 0x0110, 0x687c, 0xa108, 0xd3cc, 0x0110, 0x6874, 0xa108,
-+      0x0156, 0x20a9, 0x000d, 0xad80, 0x0020, 0x201c, 0x831f, 0x23a2,
-+      0x8000, 0x1f04, 0x87bd, 0x015e, 0x22a2, 0x22a2, 0x22a2, 0xa184,
-+      0x0003, 0x0904, 0x880e, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x0006, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635,
-+      0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xc77b,
-+      0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069,
-+      0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8,
-+      0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
-+      0x00de, 0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x000e,
-+      0x7b20, 0xd3cc, 0x0118, 0x20a3, 0x0889, 0x0010, 0x20a3, 0x0898,
-+      0x20a2, 0x080c, 0x8bea, 0x22a2, 0x20a3, 0x0000, 0x61c2, 0x003e,
-+      0x001e, 0x080c, 0x8bfb, 0x0005, 0x2011, 0x0008, 0x2001, 0xc60d,
-+      0x2004, 0xd0f4, 0x0110, 0x2011, 0x0028, 0x7820, 0xd0cc, 0x0108,
-+      0xc2e5, 0x22a2, 0xa016, 0x04d0, 0x2011, 0x0302, 0x0016, 0x0036,
-+      0x7828, 0x792c, 0xa11d, 0x0108, 0xc2dd, 0x7b20, 0xd3cc, 0x0108,
-+      0xc2e5, 0x22a2, 0x20a2, 0x21a2, 0x003e, 0x001e, 0xa016, 0x22a2,
-+      0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2,
-+      0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, 0x000a,
-+      0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
-+      0x22a2, 0x60c3, 0x0032, 0x080c, 0x8bfb, 0x0005, 0x2011, 0x0028,
-+      0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x22a2, 0x22a2,
-+      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, 0x080c, 0x8bfb,
-+      0x0005, 0x2011, 0x0100, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2,
-+      0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0008,
-+      0x22a2, 0x7854, 0xa084, 0x00ff, 0x20a2, 0x22a2, 0x22a2, 0x60c3,
-+      0x0020, 0x080c, 0x8bfb, 0x0005, 0x2011, 0x0008, 0x7820, 0xd0cc,
-+      0x0108, 0xc2e5, 0x22a2, 0xa016, 0x0888, 0x0036, 0x7b10, 0xa384,
-+      0xff00, 0x7812, 0xa384, 0x00ff, 0x8001, 0x1138, 0x7820, 0xd0cc,
-+      0x0108, 0xc2e5, 0x22a2, 0x003e, 0x0808, 0x0046, 0x2021, 0x0800,
-+      0x0006, 0x7820, 0xd0cc, 0x000e, 0x0108, 0xc4e5, 0x24a2, 0x004e,
-+      0x22a2, 0x20a2, 0x003e, 0x0804, 0x8860, 0x0026, 0x20e1, 0x9080,
-+      0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635,
-+      0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xc77b,
-+      0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069,
-+      0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8,
-+      0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
-+      0x00de, 0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x7820,
-+      0xd0cc, 0x0118, 0x20a3, 0x0889, 0x0010, 0x20a3, 0x0898, 0x20a3,
-+      0x0000, 0x080c, 0x8bea, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2,
-+      0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00d6,
-+      0x0156, 0x0136, 0x0146, 0x0016, 0x0036, 0x7810, 0xa084, 0x0700,
-+      0x8007, 0x003b, 0x003e, 0x001e, 0x014e, 0x013e, 0x015e, 0x00de,
-+      0x0005, 0x8911, 0x8911, 0x8913, 0x8911, 0x8911, 0x8911, 0x8935,
-+      0x8911, 0x080c, 0x1519, 0x7910, 0xa18c, 0xf8ff, 0xa18d, 0x0600,
-+      0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x00f9, 0x00d6, 0x2069,
-+      0xc652, 0x6804, 0xd0bc, 0x0130, 0x682c, 0xa084, 0x00ff, 0x8007,
-+      0x20a2, 0x0010, 0x20a3, 0x3f00, 0x00de, 0x22a2, 0x22a2, 0x22a2,
-+      0x60c3, 0x0001, 0x080c, 0x8bfb, 0x0005, 0x20a1, 0x020b, 0x2009,
-+      0x0003, 0x0019, 0x20a3, 0x7f00, 0x0c80, 0x0026, 0x20e1, 0x9080,
-+      0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635,
-+      0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xc77b,
-+      0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, 0x2069,
-+      0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8,
-+      0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2,
-+      0x00de, 0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x20a3,
-+      0x0888, 0xa18d, 0x0008, 0x21a2, 0x080c, 0x8bea, 0x22a2, 0x20a3,
-+      0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x002e, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046,
-       0x0036, 0x2061, 0x0100, 0x2071, 0xc600, 0x2009, 0xc615, 0x210c,
--      0x7818, 0x2068, 0x68a0, 0x2028, 0x2031, 0xc635, 0x2634, 0xd6ac,
--      0x1160, 0xa582, 0x007e, 0x1248, 0x2500, 0xd0bc, 0x1130, 0xa080,
--      0x2f6e, 0x2015, 0xa294, 0x00ff, 0x0020, 0x6910, 0x6a14, 0x7370,
--      0x7474, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1128, 0xa582, 0x007e,
--      0x1210, 0xd5bc, 0x0138, 0xa185, 0x0400, 0x6062, 0x6266, 0x636a,
--      0x646e, 0x0030, 0x6063, 0x0400, 0x6266, 0x606b, 0x0000, 0x616e,
--      0x68b8, 0x6072, 0x6077, 0x0000, 0x6864, 0xd0a4, 0x0110, 0x6077,
--      0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0xa085,
--      0x0020, 0x607a, 0x68b4, 0x607f, 0x0000, 0x2d00, 0x6082, 0x6087,
--      0xffff, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c,
--      0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af,
--      0x95d5, 0x60d7, 0x0000, 0xa582, 0x007e, 0x0210, 0x2011, 0x0000,
--      0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, 0x0000, 0x00fe, 0x2009,
--      0x0092, 0x6116, 0x2009, 0x07d0, 0x080c, 0x7029, 0x003e, 0x004e,
--      0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x00e6, 0x00d6,
--      0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0xc600,
--      0x7154, 0x7818, 0x2068, 0x68a0, 0x2028, 0x76d4, 0xd6ac, 0x1130,
--      0xd0bc, 0x1120, 0x6910, 0x6a14, 0x7454, 0x0020, 0x6910, 0x6a14,
--      0x7370, 0x7474, 0x781c, 0xa0be, 0x0006, 0x0904, 0x8b1c, 0xa0be,
--      0x000a, 0x15e8, 0xa185, 0x0200, 0x6062, 0x6266, 0x636a, 0x646e,
--      0x6073, 0x2029, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff,
--      0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808,
--      0x6086, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c,
--      0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7,
--      0x0000, 0x609f, 0x0000, 0x080c, 0x944b, 0x2009, 0x07d0, 0x60c4,
--      0xa084, 0xfff0, 0xa005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x7029,
--      0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x70d4,
--      0xd0ac, 0x1110, 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266,
--      0x636a, 0x646e, 0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b,
--      0x0000, 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x688c, 0x8000,
--      0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
--      0x6082, 0x7808, 0x6086, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010,
--      0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af,
--      0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4,
--      0x0120, 0x6a14, 0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e,
--      0x080c, 0x944b, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005,
--      0x0110, 0x2009, 0x1b58, 0x080c, 0x7029, 0x003e, 0x004e, 0x005e,
--      0x00ce, 0x00de, 0x00ee, 0x0005, 0x7810, 0x2070, 0x704c, 0xa084,
--      0x0003, 0xa086, 0x0002, 0x0904, 0x8b72, 0x2001, 0xc635, 0x2004,
--      0xd0ac, 0x1110, 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266,
--      0x636a, 0x646e, 0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b,
--      0x0000, 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000,
--      0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x7834, 0x607e, 0x2f00,
--      0x6086, 0x7808, 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080,
--      0x60c6, 0x707c, 0x60ca, 0x707c, 0x792c, 0xa108, 0x792e, 0x7080,
--      0x7928, 0xa109, 0x792a, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7,
--      0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14,
--      0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x080c, 0x9448,
--      0x0804, 0x8b0a, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1110, 0xd5bc,
--      0x0138, 0xa185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x0038,
--      0xa185, 0x0700, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x080c,
--      0x56bf, 0x0180, 0x00d6, 0x7810, 0xa06d, 0x684c, 0x00de, 0xa084,
--      0x2020, 0xa086, 0x2020, 0x1130, 0x7820, 0xc0cd, 0x7822, 0x6073,
--      0x0889, 0x0010, 0x6073, 0x0898, 0x6077, 0x0000, 0x688c, 0x8000,
--      0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
--      0x6086, 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c,
--      0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7,
--      0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14,
--      0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x7820, 0xd0cc,
--      0x0120, 0x080c, 0x944b, 0x0804, 0x8b0a, 0x080c, 0x9448, 0x0804,
--      0x8b0a, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff,
--      0x2202, 0x8217, 0x0005, 0x00d6, 0x2069, 0xc927, 0x6843, 0x0001,
--      0x00de, 0x0005, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
--      0x0019, 0x080c, 0x701b, 0x0005, 0x0006, 0x6014, 0xa084, 0x0004,
--      0xa085, 0x0009, 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006,
--      0x2061, 0x0100, 0x61a4, 0x60a7, 0x95f5, 0x6014, 0xa084, 0x0004,
--      0xa085, 0x0008, 0x6016, 0x000e, 0xe000, 0xe000, 0xe000, 0xe000,
--      0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026,
--      0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x5f22, 0x1198, 0x2001,
--      0xc943, 0x2004, 0xa005, 0x15b8, 0x0066, 0x2031, 0x0001, 0x080c,
--      0x5fa4, 0x006e, 0x1118, 0x080c, 0x701b, 0x0468, 0x00c6, 0x2061,
--      0xc927, 0x00d8, 0x6904, 0xa194, 0x4000, 0x0550, 0x0831, 0x6803,
--      0x1000, 0x6803, 0x0000, 0x00c6, 0x2061, 0xc927, 0x6128, 0xa192,
--      0x00c8, 0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198,
--      0x080c, 0x701b, 0x080c, 0x8bec, 0x0070, 0x6124, 0xa1e5, 0x0000,
--      0x0140, 0x080c, 0xc58e, 0x080c, 0x7024, 0x2009, 0x0014, 0x080c,
--      0x960c, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005,
--      0x2001, 0xc943, 0x2004, 0xa005, 0x1db0, 0x00c6, 0x2061, 0xc927,
--      0x6128, 0xa192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c,
--      0x701b, 0x080c, 0x4e5b, 0x0c38, 0x00c6, 0x00d6, 0x00e6, 0x0016,
--      0x0026, 0x080c, 0x7031, 0x2071, 0xc927, 0x713c, 0x81ff, 0x0904,
--      0x8cc1, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x5f22, 0x1500,
--      0x0036, 0x2019, 0x0002, 0x080c, 0x8e79, 0x003e, 0x713c, 0x2160,
--      0x080c, 0xc58e, 0x2009, 0x004a, 0x621c, 0xa296, 0x0009, 0x1138,
--      0x6110, 0xa188, 0x0012, 0x200b, 0x0006, 0x2009, 0x0104, 0x080c,
--      0x960c, 0x0066, 0x2031, 0x0001, 0x080c, 0x5fa4, 0x006e, 0x0408,
--      0x6904, 0xa194, 0x4000, 0x0518, 0x6803, 0x1000, 0x6803, 0x0000,
--      0x0036, 0x2019, 0x0001, 0x080c, 0x8e79, 0x003e, 0x713c, 0x2160,
--      0x080c, 0xc58e, 0x2009, 0x004a, 0x621c, 0xa296, 0x0009, 0x1138,
--      0x6110, 0xa188, 0x0012, 0x200b, 0x0006, 0x2009, 0x0104, 0x080c,
--      0x960c, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0c00,
--      0x0026, 0x00e6, 0x2071, 0xc927, 0x7048, 0xd084, 0x01d8, 0x713c,
--      0x81ff, 0x01c0, 0x2071, 0x0100, 0xa188, 0x0007, 0x2114, 0xa28e,
--      0x0006, 0x1138, 0x7014, 0xa084, 0x0184, 0xa085, 0x0012, 0x7016,
--      0x0048, 0xa28e, 0x0009, 0x0db0, 0x7014, 0xa084, 0x0184, 0xa085,
--      0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x00c6,
--      0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000, 0x6018,
--      0x2068, 0x6ca0, 0x2071, 0xc927, 0x7018, 0x2068, 0x8dff, 0x0188,
--      0x68a0, 0xa406, 0x0118, 0x6854, 0x2068, 0x0cc0, 0x6010, 0x2060,
--      0x643c, 0x6540, 0x6648, 0x2d60, 0x080c, 0x54ae, 0x0110, 0xa085,
--      0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de,
--      0x00ee, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x1200,
--      0x20a3, 0x0000, 0x20a3, 0x0000, 0x781c, 0xa086, 0x0004, 0x1110,
--      0x6098, 0x0018, 0x2001, 0xc615, 0x2004, 0x20a2, 0x7834, 0x20a2,
--      0x7838, 0x20a2, 0x20a9, 0x0010, 0xa006, 0x20a2, 0x1f04, 0x8d35,
--      0x20a2, 0x20a2, 0x60c3, 0x002c, 0x080c, 0x8be2, 0x0005, 0x0156,
--      0x0146, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x0f00, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x080c,
--      0x8be2, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b,
--      0x080c, 0x845b, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006,
--      0x2011, 0xc640, 0x2019, 0xc641, 0x23a6, 0x22a6, 0xa398, 0x0002,
--      0xa290, 0x0002, 0x1f04, 0x8d64, 0x20a3, 0x0000, 0x20a3, 0x0000,
--      0x60c3, 0x001c, 0x080c, 0x8be2, 0x014e, 0x015e, 0x0005, 0x0156,
--      0x0146, 0x0016, 0x0026, 0x20a1, 0x020b, 0x080c, 0x8434, 0x080c,
--      0x844a, 0x7810, 0xa080, 0x0000, 0x2004, 0xa080, 0x0015, 0x2098,
--      0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003,
--      0x60c2, 0x080c, 0x8be2, 0x002e, 0x001e, 0x014e, 0x015e, 0x0005,
--      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x6200,
-+      0x7818, 0x2068, 0x2031, 0xc635, 0x2634, 0xa6b4, 0x0028, 0x0110,
-+      0x7370, 0x7474, 0x2500, 0x2031, 0xc635, 0x2634, 0xa6b4, 0x0028,
-+      0x0140, 0x2001, 0x04ff, 0x6062, 0x6067, 0xffff, 0x636a, 0x646e,
-+      0x0050, 0x2001, 0x00ff, 0xa085, 0x0400, 0x6062, 0x6067, 0xffff,
-+      0x606b, 0x0000, 0x616e, 0x68b8, 0x6073, 0x0530, 0x6077, 0x0008,
-+      0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0xa085, 0x0020,
-+      0x607a, 0x68b4, 0x607f, 0x0000, 0x2d00, 0x6082, 0x6087, 0xffff,
-+      0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6,
-+      0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5,
-+      0x60d7, 0x0000, 0x2001, 0xc635, 0x2004, 0xa084, 0x0028, 0x0128,
-+      0x609f, 0x0000, 0x2001, 0x0092, 0x0048, 0x6028, 0xc0bd, 0x602a,
-+      0x609f, 0x00ff, 0x6027, 0xffff, 0x2001, 0x00b2, 0x6016, 0x2009,
-+      0x07d0, 0x080c, 0x7042, 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce,
-+      0x00de, 0x00ee, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056,
-+      0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0xc600, 0x2009, 0xc615,
-+      0x210c, 0x7818, 0x2068, 0x68a0, 0x2028, 0x2031, 0xc635, 0x2634,
-+      0xd6ac, 0x1160, 0xa582, 0x007e, 0x1248, 0x2500, 0xd0bc, 0x1130,
-+      0xa080, 0x2f6e, 0x2015, 0xa294, 0x00ff, 0x0020, 0x6910, 0x6a14,
-+      0x7370, 0x7474, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1128, 0xa582,
-+      0x007e, 0x1210, 0xd5bc, 0x0138, 0xa185, 0x0400, 0x6062, 0x6266,
-+      0x636a, 0x646e, 0x0030, 0x6063, 0x0400, 0x6266, 0x606b, 0x0000,
-+      0x616e, 0x68b8, 0x6072, 0x6077, 0x0000, 0x6864, 0xd0a4, 0x0110,
-+      0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007,
-+      0xa085, 0x0020, 0x607a, 0x68b4, 0x607f, 0x0000, 0x2d00, 0x6082,
-+      0x6087, 0xffff, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e,
-+      0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036,
-+      0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x007e, 0x0210, 0x2011,
-+      0x0000, 0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, 0x0000, 0x00fe,
-+      0x2009, 0x0092, 0x6116, 0x2009, 0x07d0, 0x080c, 0x7042, 0x003e,
-+      0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x00e6,
-+      0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071,
-+      0xc600, 0x7154, 0x7818, 0x2068, 0x68a0, 0x2028, 0x76d4, 0xd6ac,
-+      0x1130, 0xd0bc, 0x1120, 0x6910, 0x6a14, 0x7454, 0x0020, 0x6910,
-+      0x6a14, 0x7370, 0x7474, 0x781c, 0xa0be, 0x0006, 0x0904, 0x8b35,
-+      0xa0be, 0x000a, 0x15e8, 0xa185, 0x0200, 0x6062, 0x6266, 0x636a,
-+      0x646e, 0x6073, 0x2029, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084,
-+      0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082,
-+      0x7808, 0x6086, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e,
-+      0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5,
-+      0x60d7, 0x0000, 0x609f, 0x0000, 0x080c, 0x946b, 0x2009, 0x07d0,
-+      0x60c4, 0xa084, 0xfff0, 0xa005, 0x0110, 0x2009, 0x1b58, 0x080c,
-+      0x7042, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005,
-+      0x70d4, 0xd0ac, 0x1110, 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062,
-+      0x6266, 0x636a, 0x646e, 0x0038, 0xa185, 0x0100, 0x6062, 0x6266,
-+      0x606b, 0x0000, 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x688c,
-+      0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000,
-+      0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070, 0x7014, 0x608a,
-+      0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce,
-+      0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0248, 0x6a00,
-+      0xd2f4, 0x0120, 0x6a14, 0xa294, 0x00ff, 0x0010, 0x2011, 0x0000,
-+      0x629e, 0x080c, 0x946b, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0,
-+      0xa005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x7042, 0x003e, 0x004e,
-+      0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7810, 0x2070, 0x704c,
-+      0xa084, 0x0003, 0xa086, 0x0002, 0x0904, 0x8b8b, 0x2001, 0xc635,
-+      0x2004, 0xd0ac, 0x1110, 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062,
-+      0x6266, 0x636a, 0x646e, 0x0038, 0xa185, 0x0100, 0x6062, 0x6266,
-+      0x606b, 0x0000, 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0x688c,
-+      0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x7834, 0x607e,
-+      0x2f00, 0x6086, 0x7808, 0x6082, 0x7060, 0x608a, 0x705c, 0x608e,
-+      0x7080, 0x60c6, 0x707c, 0x60ca, 0x707c, 0x792c, 0xa108, 0x792e,
-+      0x7080, 0x7928, 0xa109, 0x792a, 0x686c, 0x60ce, 0x60af, 0x95d5,
-+      0x60d7, 0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120,
-+      0x6a14, 0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x080c,
-+      0x9468, 0x0804, 0x8b23, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1110,
-+      0xd5bc, 0x0138, 0xa185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e,
-+      0x0038, 0xa185, 0x0700, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e,
-+      0x080c, 0x56d8, 0x0180, 0x00d6, 0x7810, 0xa06d, 0x684c, 0x00de,
-+      0xa084, 0x2020, 0xa086, 0x2020, 0x1130, 0x7820, 0xc0cd, 0x7822,
-+      0x6073, 0x0889, 0x0010, 0x6073, 0x0898, 0x6077, 0x0000, 0x688c,
-+      0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000,
-+      0x2f00, 0x6086, 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, 0x608e,
-+      0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5,
-+      0x60d7, 0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120,
-+      0x6a14, 0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x7820,
-+      0xd0cc, 0x0120, 0x080c, 0x946b, 0x0804, 0x8b23, 0x080c, 0x9468,
-+      0x0804, 0x8b23, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294,
-+      0x00ff, 0x2202, 0x8217, 0x0005, 0x00d6, 0x2069, 0xc927, 0x6843,
-+      0x0001, 0x00de, 0x0005, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7,
-+      0x9575, 0x0019, 0x080c, 0x7034, 0x0005, 0x0006, 0x6014, 0xa084,
-+      0x0004, 0xa085, 0x0009, 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6,
-+      0x0006, 0x2061, 0x0100, 0x61a4, 0x60a7, 0x95f5, 0x6014, 0xa084,
-+      0x0004, 0xa085, 0x0008, 0x6016, 0x000e, 0xe000, 0xe000, 0xe000,
-+      0xe000, 0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016,
-+      0x0026, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x5f3b, 0x1198,
-+      0x2001, 0xc943, 0x2004, 0xa005, 0x15b8, 0x0066, 0x2031, 0x0001,
-+      0x080c, 0x5fbd, 0x006e, 0x1118, 0x080c, 0x7034, 0x0468, 0x00c6,
-+      0x2061, 0xc927, 0x00d8, 0x6904, 0xa194, 0x4000, 0x0550, 0x0831,
-+      0x6803, 0x1000, 0x6803, 0x0000, 0x00c6, 0x2061, 0xc927, 0x6128,
-+      0xa192, 0x00c8, 0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff,
-+      0x0198, 0x080c, 0x7034, 0x080c, 0x8c05, 0x0070, 0x6124, 0xa1e5,
-+      0x0000, 0x0140, 0x080c, 0xc5b4, 0x080c, 0x703d, 0x2009, 0x0014,
-+      0x080c, 0x962c, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce,
-+      0x0005, 0x2001, 0xc943, 0x2004, 0xa005, 0x1db0, 0x00c6, 0x2061,
-+      0xc927, 0x6128, 0xa192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce,
-+      0x080c, 0x7034, 0x080c, 0x4e74, 0x0c38, 0x00c6, 0x00d6, 0x00e6,
-+      0x0016, 0x0026, 0x080c, 0x704a, 0x2071, 0xc927, 0x713c, 0x81ff,
-+      0x0904, 0x8cda, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x5f3b,
-+      0x1500, 0x0036, 0x2019, 0x0002, 0x080c, 0x8e92, 0x003e, 0x713c,
-+      0x2160, 0x080c, 0xc5b4, 0x2009, 0x004a, 0x621c, 0xa296, 0x0009,
-+      0x1138, 0x6110, 0xa188, 0x0012, 0x200b, 0x0006, 0x2009, 0x0104,
-+      0x080c, 0x962c, 0x0066, 0x2031, 0x0001, 0x080c, 0x5fbd, 0x006e,
-+      0x0408, 0x6904, 0xa194, 0x4000, 0x0518, 0x6803, 0x1000, 0x6803,
-+      0x0000, 0x0036, 0x2019, 0x0001, 0x080c, 0x8e92, 0x003e, 0x713c,
-+      0x2160, 0x080c, 0xc5b4, 0x2009, 0x004a, 0x621c, 0xa296, 0x0009,
-+      0x1138, 0x6110, 0xa188, 0x0012, 0x200b, 0x0006, 0x2009, 0x0104,
-+      0x080c, 0x962c, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005,
-+      0x0c00, 0x0026, 0x00e6, 0x2071, 0xc927, 0x7048, 0xd084, 0x01d8,
-+      0x713c, 0x81ff, 0x01c0, 0x2071, 0x0100, 0xa188, 0x0007, 0x2114,
-+      0xa28e, 0x0006, 0x1138, 0x7014, 0xa084, 0x0184, 0xa085, 0x0012,
-+      0x7016, 0x0048, 0xa28e, 0x0009, 0x0db0, 0x7014, 0xa084, 0x0184,
-+      0xa085, 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00e6, 0x00d6,
-+      0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000,
-+      0x6018, 0x2068, 0x6ca0, 0x2071, 0xc927, 0x7018, 0x2068, 0x8dff,
-+      0x0188, 0x68a0, 0xa406, 0x0118, 0x6854, 0x2068, 0x0cc0, 0x6010,
-+      0x2060, 0x643c, 0x6540, 0x6648, 0x2d60, 0x080c, 0x54c7, 0x0110,
-+      0xa085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e, 0x00ce,
-+      0x00de, 0x00ee, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83d8, 0x20a3,
-+      0x1200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x781c, 0xa086, 0x0004,
-+      0x1110, 0x6098, 0x0018, 0x2001, 0xc615, 0x2004, 0x20a2, 0x7834,
-+      0x20a2, 0x7838, 0x20a2, 0x20a9, 0x0010, 0xa006, 0x20a2, 0x1f04,
-+      0x8d4e, 0x20a2, 0x20a2, 0x60c3, 0x002c, 0x080c, 0x8bfb, 0x0005,
-+      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x83d8, 0x20a3, 0x0f00,
-       0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008,
--      0x080c, 0x8be2, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x0016,
--      0x0026, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x7810, 0xa080, 0x0000,
--      0x2004, 0xa080, 0x0017, 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8,
--      0x53a6, 0x8003, 0x60c2, 0x080c, 0x8be2, 0x002e, 0x001e, 0x014e,
--      0x015e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000,
--      0x2071, 0xc927, 0x700c, 0x2060, 0x8cff, 0x0178, 0x080c, 0xae88,
--      0x1110, 0x080c, 0x9c02, 0x600c, 0x0006, 0x080c, 0xb04f, 0x080c,
--      0x95dc, 0x080c, 0x8fb7, 0x00ce, 0x0c78, 0x700f, 0x0000, 0x700b,
--      0x0000, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156,
--      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x0016, 0x0006, 0x2091,
--      0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0xc927, 0x7024,
--      0x2060, 0x8cff, 0x05a0, 0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c,
--      0x7024, 0x2009, 0x0013, 0x080c, 0x960c, 0x20a9, 0x01f4, 0x6824,
-+      0x080c, 0x8bfb, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1,
-+      0x020b, 0x080c, 0x8474, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a9,
-+      0x0006, 0x2011, 0xc640, 0x2019, 0xc641, 0x23a6, 0x22a6, 0xa398,
-+      0x0002, 0xa290, 0x0002, 0x1f04, 0x8d7d, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x60c3, 0x001c, 0x080c, 0x8bfb, 0x014e, 0x015e, 0x0005,
-+      0x0156, 0x0146, 0x0016, 0x0026, 0x20a1, 0x020b, 0x080c, 0x844d,
-+      0x080c, 0x8463, 0x7810, 0xa080, 0x0000, 0x2004, 0xa080, 0x0015,
-+      0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0xa080, 0x0004,
-+      0x8003, 0x60c2, 0x080c, 0x8bfb, 0x002e, 0x001e, 0x014e, 0x015e,
-+      0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x83d8, 0x20a3,
-+      0x6200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3,
-+      0x0008, 0x080c, 0x8bfb, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146,
-+      0x0016, 0x0026, 0x20a1, 0x020b, 0x080c, 0x83d8, 0x7810, 0xa080,
-+      0x0000, 0x2004, 0xa080, 0x0017, 0x2098, 0x7808, 0xa088, 0x0002,
-+      0x21a8, 0x53a6, 0x8003, 0x60c2, 0x080c, 0x8bfb, 0x002e, 0x001e,
-+      0x014e, 0x015e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091,
-+      0x8000, 0x2071, 0xc927, 0x700c, 0x2060, 0x8cff, 0x0178, 0x080c,
-+      0xaea8, 0x1110, 0x080c, 0x9c22, 0x600c, 0x0006, 0x080c, 0xb06f,
-+      0x080c, 0x95fc, 0x080c, 0x8fd0, 0x00ce, 0x0c78, 0x700f, 0x0000,
-+      0x700b, 0x0000, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126,
-+      0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x0016, 0x0006,
-+      0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0xc927,
-+      0x7024, 0x2060, 0x8cff, 0x05a0, 0x080c, 0x8c0e, 0x68c3, 0x0000,
-+      0x080c, 0x703d, 0x2009, 0x0013, 0x080c, 0x962c, 0x20a9, 0x01f4,
-+      0x6824, 0xd094, 0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000,
-+      0x01a0, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0xd084, 0x0118,
-+      0x6827, 0x0001, 0x0010, 0x1f04, 0x8e28, 0x7804, 0xa084, 0x1000,
-+      0x0120, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x000e, 0x001e,
-+      0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005,
-+      0x2001, 0xc600, 0x2004, 0xa096, 0x0001, 0x0590, 0xa096, 0x0004,
-+      0x0578, 0x080c, 0x703d, 0x6814, 0xa084, 0x0001, 0x0110, 0x68a7,
-+      0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x4e31, 0x080c,
-+      0x6fc6, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0158, 0x6827, 0x0004,
-+      0x7804, 0xa084, 0x4000, 0x01a0, 0x7803, 0x1000, 0x7803, 0x0000,
-+      0x0078, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0x8e6b,
-+      0x7804, 0xa084, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000,
-+      0x000e, 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e,
-+      0x012e, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
-+      0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079,
-+      0x0140, 0x2071, 0xc927, 0x703c, 0x2060, 0x8cff, 0x0904, 0x8f1d,
-+      0xa386, 0x0002, 0x1128, 0x6814, 0xa084, 0x0002, 0x0904, 0x8f1d,
-+      0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x1df0,
-+      0x68c7, 0x0000, 0x68cb, 0x0008, 0x080c, 0x704a, 0x080c, 0x22ee,
-+      0x0046, 0x2009, 0x017f, 0x200b, 0x00a5, 0x2021, 0x0169, 0x2404,
-+      0xa084, 0x000f, 0xa086, 0x0004, 0x1500, 0x68af, 0x95f5, 0x68c7,
-+      0x0000, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0020, 0x2071,
-+      0xc992, 0x6814, 0xa084, 0x0184, 0xa085, 0x0012, 0x6816, 0x7803,
-+      0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, 0xa386, 0x0002, 0x1128,
-+      0x7884, 0xa005, 0x1110, 0x7887, 0x0001, 0x2001, 0xc8f8, 0x2004,
-+      0x200a, 0x004e, 0xa39d, 0x0000, 0x1140, 0x2009, 0x0049, 0x601c,
-+      0xa086, 0x0009, 0x0110, 0x080c, 0x962c, 0x20a9, 0x03e8, 0x6824,
-       0xd094, 0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0,
--      0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0xd084, 0x0118, 0x6827,
--      0x0001, 0x0010, 0x1f04, 0x8e0f, 0x7804, 0xa084, 0x1000, 0x0120,
-+      0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0xd08c, 0x0118, 0x6827,
-+      0x0002, 0x0010, 0x1f04, 0x8eff, 0x7804, 0xa084, 0x1000, 0x0120,
-       0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x000e, 0x001e, 0x002e,
--      0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001,
--      0xc600, 0x2004, 0xa096, 0x0001, 0x0590, 0xa096, 0x0004, 0x0578,
--      0x080c, 0x7024, 0x6814, 0xa084, 0x0001, 0x0110, 0x68a7, 0x95f5,
--      0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x4e18, 0x080c, 0x6fad,
--      0x20a9, 0x01f4, 0x6824, 0xd094, 0x0158, 0x6827, 0x0004, 0x7804,
--      0xa084, 0x4000, 0x01a0, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078,
--      0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0x8e52, 0x7804,
--      0xa084, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000, 0x000e,
--      0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
--      0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026,
--      0x0016, 0x0006, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140,
--      0x2071, 0xc927, 0x703c, 0x2060, 0x8cff, 0x0904, 0x8f04, 0xa386,
--      0x0002, 0x1128, 0x6814, 0xa084, 0x0002, 0x0904, 0x8f04, 0x68af,
--      0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x1df0, 0x68c7,
--      0x0000, 0x68cb, 0x0008, 0x080c, 0x7031, 0x080c, 0x22ee, 0x0046,
--      0x2009, 0x017f, 0x200b, 0x00a5, 0x2021, 0x0169, 0x2404, 0xa084,
--      0x000f, 0xa086, 0x0004, 0x1500, 0x68af, 0x95f5, 0x68c7, 0x0000,
--      0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0020, 0x2071, 0xc992,
--      0x6814, 0xa084, 0x0184, 0xa085, 0x0012, 0x6816, 0x7803, 0x0008,
--      0x7003, 0x0000, 0x00fe, 0x00ee, 0xa386, 0x0002, 0x1128, 0x7884,
--      0xa005, 0x1110, 0x7887, 0x0001, 0x2001, 0xc8f8, 0x2004, 0x200a,
--      0x004e, 0xa39d, 0x0000, 0x1140, 0x2009, 0x0049, 0x601c, 0xa086,
--      0x0009, 0x0110, 0x080c, 0x960c, 0x20a9, 0x03e8, 0x6824, 0xd094,
--      0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803,
--      0x1000, 0x7803, 0x0000, 0x0078, 0xd08c, 0x0118, 0x6827, 0x0002,
--      0x0010, 0x1f04, 0x8ee6, 0x7804, 0xa084, 0x1000, 0x0120, 0x7803,
--      0x0100, 0x7803, 0x0000, 0x6824, 0x000e, 0x001e, 0x002e, 0x00ce,
--      0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126,
--      0x2091, 0x8000, 0x2069, 0xc927, 0x6a06, 0x012e, 0x00de, 0x0005,
--      0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0xc927, 0x6a32, 0x012e,
--      0x00de, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0006, 0x0126,
--      0x2071, 0xc927, 0x7614, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff,
--      0x0538, 0x601c, 0xa206, 0x1500, 0x7014, 0xac36, 0x1110, 0x660c,
--      0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00,
--      0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06,
--      0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xae4d,
--      0x080c, 0x8fb7, 0x00ce, 0x08d8, 0x2c78, 0x600c, 0x2060, 0x08b8,
--      0x012e, 0x000e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0156,
--      0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2, 0xa006,
--      0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x1000, 0x0804, 0x8faf,
--      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2,
--      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x4000, 0x0478,
--      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2,
--      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x00f8,
--      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2,
--      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078,
--      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2,
--      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x0089,
--      0x60c3, 0x0020, 0x080c, 0x8be2, 0x014e, 0x015e, 0x0005, 0x00e6,
--      0x2071, 0xc927, 0x7020, 0xa005, 0x0110, 0x8001, 0x7022, 0x00ee,
--      0x0005, 0x20a9, 0x0008, 0x20a2, 0x1f04, 0x8fc3, 0x20a2, 0x20a2,
--      0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006,
--      0x0126, 0x2091, 0x8000, 0x2071, 0xc927, 0x7614, 0x2660, 0x2678,
--      0x2039, 0x0001, 0x87ff, 0x0904, 0x9058, 0x8cff, 0x0904, 0x9058,
--      0x601c, 0xa086, 0x0006, 0x1904, 0x9053, 0x88ff, 0x0138, 0x2800,
--      0xac06, 0x1904, 0x9053, 0x2039, 0x0000, 0x0050, 0x6018, 0xa206,
--      0x1904, 0x9053, 0x85ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x9053,
--      0x7024, 0xac06, 0x1560, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0518,
--      0x080c, 0x7024, 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817,
--      0x0008, 0x68c3, 0x0000, 0x080c, 0x90df, 0x7027, 0x0000, 0x0036,
--      0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, 0x0100,
--      0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
--      0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a, 0x0460, 0x7014,
-+      0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6,
-+      0x0126, 0x2091, 0x8000, 0x2069, 0xc927, 0x6a06, 0x012e, 0x00de,
-+      0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0xc927, 0x6a32,
-+      0x012e, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0006,
-+      0x0126, 0x2071, 0xc927, 0x7614, 0x2660, 0x2678, 0x2091, 0x8000,
-+      0x8cff, 0x0538, 0x601c, 0xa206, 0x1500, 0x7014, 0xac36, 0x1110,
-+      0x660c, 0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118,
-+      0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00,
-+      0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c,
-+      0xae6d, 0x080c, 0x8fd0, 0x00ce, 0x08d8, 0x2c78, 0x600c, 0x2060,
-+      0x08b8, 0x012e, 0x000e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005,
-+      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8699, 0x7810, 0x20a2,
-+      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x1000, 0x0804,
-+      0x8fc8, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8699, 0x7810,
-+      0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x4000,
-+      0x0478, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8699, 0x7810,
-+      0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000,
-+      0x00f8, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8699, 0x7810,
-+      0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400,
-+      0x0078, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8699, 0x7810,
-+      0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200,
-+      0x0089, 0x60c3, 0x0020, 0x080c, 0x8bfb, 0x014e, 0x015e, 0x0005,
-+      0x00e6, 0x2071, 0xc927, 0x7020, 0xa005, 0x0110, 0x8001, 0x7022,
-+      0x00ee, 0x0005, 0x20a9, 0x0008, 0x20a2, 0x1f04, 0x8fdc, 0x20a2,
-+      0x20a2, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066,
-+      0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xc927, 0x7614, 0x2660,
-+      0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x9078, 0x8cff, 0x0904,
-+      0x9078, 0x601c, 0xa086, 0x0006, 0x1904, 0x9073, 0x88ff, 0x0138,
-+      0x2800, 0xac06, 0x1904, 0x9073, 0x2039, 0x0000, 0x0050, 0x6018,
-+      0xa206, 0x1904, 0x9073, 0x85ff, 0x0120, 0x6050, 0xa106, 0x1904,
-+      0x9073, 0x7024, 0xac06, 0x1598, 0x2069, 0x0100, 0x68c0, 0xa005,
-+      0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x703d,
-+      0x080c, 0x90ff, 0x7027, 0x0000, 0x0410, 0x080c, 0x703d, 0x6820,
-+      0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,
-+      0x080c, 0x90ff, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
-+      0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069,
-+      0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7014,
-       0xac36, 0x1110, 0x660c, 0x7616, 0x7010, 0xac36, 0x1140, 0x2c00,
-       0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c,
-       0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff,
--      0x1158, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0xac8a, 0x0110,
--      0x080c, 0xc134, 0x080c, 0xae4d, 0x080c, 0x8fb7, 0x88ff, 0x1190,
--      0x00ce, 0x0804, 0x8fda, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8fda,
-+      0x1158, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0xacaa, 0x0110,
-+      0x080c, 0xc15a, 0x080c, 0xae6d, 0x080c, 0x8fd0, 0x88ff, 0x1190,
-+      0x00ce, 0x0804, 0x8ff3, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8ff3,
-       0xa006, 0x012e, 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee,
-       0x00fe, 0x0005, 0x6017, 0x0000, 0x00ce, 0xa8c5, 0x0001, 0x0c88,
-       0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126,
-       0x2091, 0x8000, 0x2071, 0xc927, 0x7638, 0x2660, 0x2678, 0x8cff,
--      0x0904, 0x90cf, 0x601c, 0xa086, 0x0006, 0x1904, 0x90ca, 0x87ff,
--      0x0128, 0x2700, 0xac06, 0x1904, 0x90ca, 0x0048, 0x6018, 0xa206,
--      0x1904, 0x90ca, 0x85ff, 0x0118, 0x6050, 0xa106, 0x15d8, 0x703c,
--      0xac06, 0x1180, 0x0036, 0x2019, 0x0001, 0x080c, 0x8e79, 0x7033,
-+      0x0904, 0x90ef, 0x601c, 0xa086, 0x0006, 0x1904, 0x90ea, 0x87ff,
-+      0x0128, 0x2700, 0xac06, 0x1904, 0x90ea, 0x0048, 0x6018, 0xa206,
-+      0x1904, 0x90ea, 0x85ff, 0x0118, 0x6050, 0xa106, 0x15d8, 0x703c,
-+      0xac06, 0x1180, 0x0036, 0x2019, 0x0001, 0x080c, 0x8e92, 0x7033,
-       0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b,
-       0x0000, 0x003e, 0x7038, 0xac36, 0x1110, 0x660c, 0x763a, 0x7034,
-       0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010,
-       0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e,
--      0x0008, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0xac8a,
--      0x0110, 0x080c, 0xc134, 0x080c, 0xae4d, 0x87ff, 0x1190, 0x00ce,
--      0x0804, 0x9077, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9077, 0xa006,
-+      0x0008, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0xacaa,
-+      0x0110, 0x080c, 0xc15a, 0x080c, 0xae6d, 0x87ff, 0x1190, 0x00ce,
-+      0x0804, 0x9097, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9097, 0xa006,
-       0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
-       0x0005, 0x6017, 0x0000, 0x00ce, 0xa7bd, 0x0001, 0x0c88, 0x00e6,
-       0x2071, 0xc927, 0x2001, 0xc600, 0x2004, 0xa086, 0x0002, 0x1118,
-@@ -4192,38 +4197,38 @@ unsigned short risc_code01[] = { 
-       0x600c, 0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce,
-       0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066,
-       0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xc927, 0x760c, 0x2660,
--      0x2678, 0x8cff, 0x0904, 0x91b5, 0x6018, 0xa080, 0x0028, 0x2004,
--      0xa206, 0x1904, 0x91b0, 0x7024, 0xac06, 0x1508, 0x2069, 0x0100,
--      0x68c0, 0xa005, 0x0904, 0x918c, 0x080c, 0x8bf5, 0x68c3, 0x0000,
--      0x080c, 0x90df, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
-+      0x2678, 0x8cff, 0x0904, 0x91d5, 0x6018, 0xa080, 0x0028, 0x2004,
-+      0xa206, 0x1904, 0x91d0, 0x7024, 0xac06, 0x1508, 0x2069, 0x0100,
-+      0x68c0, 0xa005, 0x0904, 0x91ac, 0x080c, 0x8c0e, 0x68c3, 0x0000,
-+      0x080c, 0x90ff, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
-       0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069,
-       0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c,
-       0xac36, 0x1110, 0x660c, 0x760e, 0x7008, 0xac36, 0x1140, 0x2c00,
-       0xaf36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c,
-       0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
--      0x0000, 0x080c, 0xae77, 0x1158, 0x080c, 0x2e6c, 0x080c, 0xae88,
--      0x11f0, 0x080c, 0x9c02, 0x00d8, 0x080c, 0x90df, 0x08c0, 0x080c,
--      0xae88, 0x1118, 0x080c, 0x9c02, 0x0090, 0x6010, 0x2068, 0x080c,
--      0xac8a, 0x0168, 0x601c, 0xa086, 0x0003, 0x11f8, 0x6837, 0x0103,
--      0x6b4a, 0x6847, 0x0000, 0x080c, 0x580a, 0x080c, 0xae41, 0x080c,
--      0xb04f, 0x080c, 0xae4d, 0x080c, 0x8fb7, 0x00ce, 0x0804, 0x9139,
--      0x2c78, 0x600c, 0x2060, 0x0804, 0x9139, 0x012e, 0x000e, 0x006e,
-+      0x0000, 0x080c, 0xae97, 0x1158, 0x080c, 0x2e6c, 0x080c, 0xaea8,
-+      0x11f0, 0x080c, 0x9c22, 0x00d8, 0x080c, 0x90ff, 0x08c0, 0x080c,
-+      0xaea8, 0x1118, 0x080c, 0x9c22, 0x0090, 0x6010, 0x2068, 0x080c,
-+      0xacaa, 0x0168, 0x601c, 0xa086, 0x0003, 0x11f8, 0x6837, 0x0103,
-+      0x6b4a, 0x6847, 0x0000, 0x080c, 0x5823, 0x080c, 0xae61, 0x080c,
-+      0xb06f, 0x080c, 0xae6d, 0x080c, 0x8fd0, 0x00ce, 0x0804, 0x9159,
-+      0x2c78, 0x600c, 0x2060, 0x0804, 0x9159, 0x012e, 0x000e, 0x006e,
-       0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006,
--      0x1d30, 0x080c, 0xc134, 0x0c18, 0x0036, 0x0156, 0x0136, 0x0146,
-+      0x1d30, 0x080c, 0xc15a, 0x0c18, 0x0036, 0x0156, 0x0136, 0x0146,
-       0x3908, 0xa006, 0xa190, 0x0020, 0x221c, 0xa39e, 0x2c61, 0x1118,
-       0x8210, 0x8000, 0x0cc8, 0xa005, 0x0138, 0x20a9, 0x0020, 0x2198,
-       0xa110, 0x22a0, 0x22c8, 0x53a3, 0x014e, 0x013e, 0x015e, 0x003e,
--      0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0200,
-+      0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x8474, 0x20a3, 0x0200,
-       0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000,
-       0x2099, 0xc900, 0x20a9, 0x0004, 0x53a6, 0x20a3, 0x0004, 0x20a3,
--      0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x080c, 0x8be2, 0x00de,
--      0x0005, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0214, 0x20a3,
-+      0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x080c, 0x8bfb, 0x00de,
-+      0x0005, 0x20a1, 0x020b, 0x080c, 0x8474, 0x20a3, 0x0214, 0x20a3,
-       0x0018, 0x20a3, 0x0800, 0x7810, 0xa084, 0xff00, 0x20a2, 0x20a3,
-       0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7810,
-       0xa084, 0x00ff, 0x20a2, 0x7828, 0x20a2, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x60c3, 0x0018, 0x080c, 0x8be2, 0x0005, 0x00d6, 0x0016,
--      0x2f68, 0x2009, 0x0035, 0x080c, 0xb13a, 0x1904, 0x9294, 0x20a1,
--      0x020b, 0x080c, 0x83bf, 0x20a3, 0x1300, 0x20a3, 0x0000, 0x7828,
-+      0x0000, 0x60c3, 0x0018, 0x080c, 0x8bfb, 0x0005, 0x00d6, 0x0016,
-+      0x2f68, 0x2009, 0x0035, 0x080c, 0xb15a, 0x1904, 0x92b4, 0x20a1,
-+      0x020b, 0x080c, 0x83d8, 0x20a3, 0x1300, 0x20a3, 0x0000, 0x7828,
-       0x2068, 0x681c, 0xa086, 0x0003, 0x0580, 0x7818, 0xa080, 0x0028,
-       0x2014, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x11d0, 0xa286, 0x007e,
-       0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x04b8, 0xa286, 0x007f,
-@@ -4235,17 +4240,17 @@ unsigned short risc_code01[] = { 
-       0x0240, 0x00d6, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
-       0x0020, 0x20a3, 0x0000, 0x6034, 0x20a2, 0x7834, 0x20a2, 0x7838,
-       0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c, 0x080c,
--      0x8be2, 0x001e, 0x00de, 0x0005, 0x7817, 0x0001, 0x7803, 0x0006,
-+      0x8bfb, 0x001e, 0x00de, 0x0005, 0x7817, 0x0001, 0x7803, 0x0006,
-       0x001e, 0x00de, 0x0005, 0x00d6, 0x0026, 0x7928, 0x2168, 0x691c,
--      0xa186, 0x0006, 0x01c0, 0xa186, 0x0003, 0x0904, 0x930a, 0xa186,
--      0x0005, 0x0904, 0x92f3, 0xa186, 0x0004, 0x05b8, 0xa186, 0x0008,
--      0x0904, 0x92fb, 0x7807, 0x0037, 0x7813, 0x1700, 0x080c, 0x9372,
--      0x002e, 0x00de, 0x0005, 0x080c, 0x932e, 0x2009, 0x4000, 0x6800,
--      0x0002, 0x92d4, 0x92df, 0x92d6, 0x92df, 0x92db, 0x92d4, 0x92d4,
--      0x92df, 0x92df, 0x92df, 0x92df, 0x92d4, 0x92d4, 0x92d4, 0x92d4,
--      0x92d4, 0x92df, 0x92d4, 0x92df, 0x080c, 0x1519, 0x6820, 0xd0e4,
-+      0xa186, 0x0006, 0x01c0, 0xa186, 0x0003, 0x0904, 0x932a, 0xa186,
-+      0x0005, 0x0904, 0x9313, 0xa186, 0x0004, 0x05b8, 0xa186, 0x0008,
-+      0x0904, 0x931b, 0x7807, 0x0037, 0x7813, 0x1700, 0x080c, 0x9392,
-+      0x002e, 0x00de, 0x0005, 0x080c, 0x934e, 0x2009, 0x4000, 0x6800,
-+      0x0002, 0x92f4, 0x92ff, 0x92f6, 0x92ff, 0x92fb, 0x92f4, 0x92f4,
-+      0x92ff, 0x92ff, 0x92ff, 0x92ff, 0x92f4, 0x92f4, 0x92f4, 0x92f4,
-+      0x92f4, 0x92ff, 0x92f4, 0x92ff, 0x080c, 0x1519, 0x6820, 0xd0e4,
-       0x0110, 0xd0cc, 0x0110, 0xa00e, 0x0010, 0x2009, 0x2000, 0x6828,
--      0x20a2, 0x682c, 0x20a2, 0x0804, 0x9324, 0x080c, 0x932e, 0x20a3,
-+      0x20a2, 0x682c, 0x20a2, 0x0804, 0x9344, 0x080c, 0x934e, 0x20a3,
-       0x0000, 0x20a3, 0x0000, 0x2009, 0x4000, 0x6a00, 0xa286, 0x0002,
-       0x1108, 0xa00e, 0x0488, 0x04d1, 0x20a3, 0x0000, 0x20a3, 0x0000,
-       0x2009, 0x4000, 0x0448, 0x0491, 0x20a3, 0x0000, 0x20a3, 0x0000,
-@@ -4254,8 +4259,8 @@ unsigned short risc_code01[] = { 
-       0x6980, 0x6814, 0xa103, 0x20a2, 0x22a2, 0x7928, 0xa180, 0x0000,
-       0x2004, 0xa08e, 0x0002, 0x0130, 0xa08e, 0x0004, 0x0118, 0x2009,
-       0x4000, 0x0010, 0x2009, 0x0000, 0x21a2, 0x20a3, 0x0000, 0x60c3,
--      0x0018, 0x080c, 0x8be2, 0x002e, 0x00de, 0x0005, 0x0036, 0x0046,
--      0x0056, 0x0066, 0x20a1, 0x020b, 0x080c, 0x845b, 0xa006, 0x20a3,
-+      0x0018, 0x080c, 0x8bfb, 0x002e, 0x00de, 0x0005, 0x0036, 0x0046,
-+      0x0056, 0x0066, 0x20a1, 0x020b, 0x080c, 0x8474, 0xa006, 0x20a3,
-       0x0200, 0x20a2, 0x7934, 0x21a2, 0x7938, 0x21a2, 0x7818, 0xa080,
-       0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118, 0xa092,
-       0x007e, 0x0268, 0x00d6, 0x2069, 0xc61c, 0x2d2c, 0x8d68, 0x2d34,
-@@ -4263,26 +4268,26 @@ unsigned short risc_code01[] = { 
-       0x0000, 0x6498, 0x2029, 0x0000, 0x6634, 0x7828, 0xa080, 0x0007,
-       0x2004, 0xa086, 0x0003, 0x1128, 0x25a2, 0x26a2, 0x23a2, 0x24a2,
-       0x0020, 0x23a2, 0x24a2, 0x25a2, 0x26a2, 0x006e, 0x005e, 0x004e,
--      0x003e, 0x0005, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0100,
-+      0x003e, 0x0005, 0x20a1, 0x020b, 0x080c, 0x8474, 0x20a3, 0x0100,
-       0x20a3, 0x0000, 0x20a3, 0x0009, 0x7810, 0x20a2, 0x60c3, 0x0008,
--      0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83b7, 0x20a3,
-+      0x080c, 0x8bfb, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83d0, 0x20a3,
-       0x1400, 0x20a3, 0x0000, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x7828,
-       0x20a2, 0x782c, 0x20a2, 0x7830, 0xa084, 0x00ff, 0x8007, 0x20a2,
--      0x20a3, 0x0000, 0x60c3, 0x0010, 0x080c, 0x8be2, 0x0005, 0x20a1,
--      0x020b, 0x080c, 0x8453, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828,
--      0x20a2, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x8be2, 0x0005,
--      0x0146, 0x20a1, 0x020b, 0x0031, 0x60c3, 0x0000, 0x080c, 0x8be2,
-+      0x20a3, 0x0000, 0x60c3, 0x0010, 0x080c, 0x8bfb, 0x0005, 0x20a1,
-+      0x020b, 0x080c, 0x846c, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828,
-+      0x20a2, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x8bfb, 0x0005,
-+      0x0146, 0x20a1, 0x020b, 0x0031, 0x60c3, 0x0000, 0x080c, 0x8bfb,
-       0x014e, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
-       0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1110, 0xd0bc,
-       0x0188, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0300,
-       0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6,
-       0x00de, 0x0078, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085,
-       0x0300, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x6234,
--      0x22a2, 0x20a3, 0x0819, 0x20a3, 0x0000, 0x080c, 0x8bd1, 0x22a2,
-+      0x22a2, 0x20a3, 0x0819, 0x20a3, 0x0000, 0x080c, 0x8bea, 0x22a2,
-       0x20a3, 0x0000, 0x2fa2, 0x7a08, 0x22a2, 0x20a3, 0x0000, 0x20a3,
-       0x0000, 0x0005, 0x20a1, 0x020b, 0x0079, 0x7910, 0x21a2, 0x20a3,
-       0x0000, 0x60c3, 0x0000, 0x20e1, 0x9080, 0x60a7, 0x9575, 0x080c,
--      0x8bec, 0x080c, 0x701b, 0x0005, 0x0156, 0x0136, 0x0036, 0x00d6,
-+      0x8c05, 0x080c, 0x7034, 0x0005, 0x0156, 0x0136, 0x0036, 0x00d6,
-       0x00e6, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7854, 0x2068, 0xadf0,
-       0x000f, 0x7210, 0xa296, 0x00c0, 0xa294, 0xfffd, 0x7212, 0x7214,
-       0xa294, 0x0300, 0x7216, 0x7100, 0xa194, 0x00ff, 0x7308, 0xa384,
-@@ -4294,41 +4299,41 @@ unsigned short risc_code01[] = { 
-       0x0005, 0x609b, 0x0000, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1,
-       0x4000, 0x20a3, 0x22ff, 0x20a3, 0xffff, 0x00d6, 0x2069, 0xc61c,
-       0x2da6, 0x8d68, 0x2da6, 0x00de, 0x20a3, 0x0138, 0x20a3, 0x0000,
--      0x0026, 0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3,
-+      0x0026, 0x080c, 0x8bea, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3,
-       0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x20a3, 0x5400,
--      0x20a3, 0x0000, 0x080c, 0x768f, 0x11b8, 0x0016, 0x7810, 0xa080,
-+      0x20a3, 0x0000, 0x080c, 0x76a8, 0x11b8, 0x0016, 0x7810, 0xa080,
-       0x000d, 0x20a9, 0x0014, 0x200c, 0x810f, 0x21a2, 0x8000, 0x1f04,
--      0x9483, 0x20a9, 0x0012, 0x2001, 0x0000, 0x20a3, 0x0000, 0x1f04,
--      0x948d, 0x001e, 0x0804, 0x94fb, 0x7810, 0x0016, 0x00c6, 0x00d6,
-+      0x94a3, 0x20a9, 0x0012, 0x2001, 0x0000, 0x20a3, 0x0000, 0x1f04,
-+      0x94ad, 0x001e, 0x0804, 0x951b, 0x7810, 0x0016, 0x00c6, 0x00d6,
-       0x7810, 0x2068, 0x2061, 0xc600, 0x6070, 0xa084, 0x00ff, 0x6968,
-       0x810f, 0xa18c, 0xff00, 0xa105, 0x20a2, 0x6074, 0x20a2, 0x6968,
-       0xa18c, 0xff00, 0x21a2, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2009,
--      0xc605, 0x2104, 0x20a2, 0x8108, 0x1f04, 0x94b1, 0x20a9, 0x0004,
--      0x2009, 0xc601, 0x2104, 0x20a2, 0x8108, 0x1f04, 0x94ba, 0x20a9,
-+      0xc605, 0x2104, 0x20a2, 0x8108, 0x1f04, 0x94d1, 0x20a9, 0x0004,
-+      0x2009, 0xc601, 0x2104, 0x20a2, 0x8108, 0x1f04, 0x94da, 0x20a9,
-       0x0004, 0x2d08, 0xa188, 0x001d, 0x2104, 0x8007, 0x20a2, 0x8108,
--      0x1f04, 0x94c4, 0x20a9, 0x0004, 0x2d08, 0xa188, 0x0021, 0x2104,
--      0x8007, 0x20a2, 0x8108, 0x1f04, 0x94cf, 0x080c, 0x7694, 0x1138,
--      0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x94da, 0x0050, 0x20a9,
-+      0x1f04, 0x94e4, 0x20a9, 0x0004, 0x2d08, 0xa188, 0x0021, 0x2104,
-+      0x8007, 0x20a2, 0x8108, 0x1f04, 0x94ef, 0x080c, 0x76ad, 0x1138,
-+      0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x94fa, 0x0050, 0x20a9,
-       0x0008, 0x2009, 0xc69a, 0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04,
--      0x94e3, 0x20a9, 0x0008, 0x2d08, 0xa188, 0x0025, 0x2104, 0x8007,
--      0x20a2, 0x8108, 0x1f04, 0x94ee, 0x00de, 0x00ce, 0x001e, 0x20a3,
--      0x0000, 0x20a3, 0x0000, 0x60c3, 0x004c, 0x080c, 0x8be2, 0x0005,
--      0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x5500, 0x20a3, 0x0000,
-+      0x9503, 0x20a9, 0x0008, 0x2d08, 0xa188, 0x0025, 0x2104, 0x8007,
-+      0x20a2, 0x8108, 0x1f04, 0x950e, 0x00de, 0x00ce, 0x001e, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x60c3, 0x004c, 0x080c, 0x8bfb, 0x0005,
-+      0x20a1, 0x020b, 0x080c, 0x83d8, 0x20a3, 0x5500, 0x20a3, 0x0000,
-       0x7810, 0x0016, 0x00c6, 0x00d6, 0x7810, 0x2068, 0x686c, 0xa084,
-       0x00ff, 0x6968, 0x810f, 0xa18c, 0xff00, 0xa105, 0x20a2, 0x696c,
-       0xa18c, 0xff00, 0x6870, 0xa084, 0x00ff, 0xa105, 0x20a2, 0x6968,
-       0xa18c, 0xff00, 0x2061, 0xc600, 0x6070, 0xa084, 0x00ff, 0xa10d,
-       0x21a2, 0x6174, 0x21a2, 0x20a9, 0x0004, 0x2d08, 0xa188, 0x001d,
--      0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04, 0x9530, 0x20a9, 0x0004,
-+      0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04, 0x9550, 0x20a9, 0x0004,
-       0x2d08, 0xa188, 0x0021, 0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04,
--      0x953b, 0x20a9, 0x0004, 0x2009, 0xc605, 0x2104, 0x20a2, 0x8108,
--      0x1f04, 0x9545, 0x20a9, 0x0004, 0x2009, 0xc601, 0x2104, 0x20a2,
--      0x8108, 0x1f04, 0x954e, 0x20a9, 0x0008, 0x2d08, 0xa188, 0x0025,
--      0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04, 0x9558, 0x080c, 0x7694,
--      0x1138, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x9563, 0x0050,
-+      0x955b, 0x20a9, 0x0004, 0x2009, 0xc605, 0x2104, 0x20a2, 0x8108,
-+      0x1f04, 0x9565, 0x20a9, 0x0004, 0x2009, 0xc601, 0x2104, 0x20a2,
-+      0x8108, 0x1f04, 0x956e, 0x20a9, 0x0008, 0x2d08, 0xa188, 0x0025,
-+      0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04, 0x9578, 0x080c, 0x76ad,
-+      0x1138, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x9583, 0x0050,
-       0x20a9, 0x0008, 0x2009, 0xc69a, 0x2104, 0x8007, 0x20a2, 0x8108,
--      0x1f04, 0x956c, 0x00de, 0x00ce, 0x001e, 0x20a3, 0x0000, 0x20a3,
--      0x0000, 0x60c3, 0x004c, 0x080c, 0x8be2, 0x0005, 0x2061, 0xce00,
-+      0x1f04, 0x958c, 0x00de, 0x00ce, 0x001e, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x60c3, 0x004c, 0x080c, 0x8bfb, 0x0005, 0x2061, 0xce00,
-       0x2a70, 0x7068, 0x704a, 0x704f, 0xce00, 0x0005, 0x00e6, 0x0126,
-       0x2071, 0xc600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0010, 0x0608,
-       0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0148, 0xace0, 0x0018,
-@@ -4346,102 +4351,102 @@ unsigned short risc_code01[] = { 
-       0x0000, 0x6052, 0x6056, 0x6022, 0x6026, 0x602a, 0x602e, 0x6032,
-       0x6036, 0x603a, 0x603e, 0x6026, 0x2061, 0xc600, 0x6048, 0x8000,
-       0x604a, 0xa086, 0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000,
--      0x080c, 0x7e94, 0x012e, 0x0cc0, 0x601c, 0xa084, 0x000f, 0x0002,
--      0x961b, 0x962a, 0x9645, 0x9660, 0xb17e, 0xb199, 0xb1b4, 0x961b,
--      0x962a, 0x7699, 0x967b, 0xa186, 0x0013, 0x1128, 0x080c, 0x7db1,
--      0x080c, 0x7e94, 0x0005, 0xa18e, 0x0047, 0x1118, 0xa016, 0x080c,
-+      0x080c, 0x7ead, 0x012e, 0x0cc0, 0x601c, 0xa084, 0x000f, 0x0002,
-+      0x963b, 0x964a, 0x9665, 0x9680, 0xb1a2, 0xb1bd, 0xb1d8, 0x963b,
-+      0x964a, 0x76b2, 0x969b, 0xa186, 0x0013, 0x1128, 0x080c, 0x7dca,
-+      0x080c, 0x7ead, 0x0005, 0xa18e, 0x0047, 0x1118, 0xa016, 0x080c,
-       0x1870, 0x0005, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519,
--      0x0013, 0x006e, 0x0005, 0x9643, 0x9a71, 0x9c3c, 0x9643, 0x9cb9,
--      0x9739, 0x9643, 0x9643, 0x9a03, 0xa11f, 0x9643, 0x9643, 0x9643,
--      0x9643, 0x9643, 0x9643, 0x080c, 0x1519, 0x0066, 0x6000, 0xa0b2,
--      0x0010, 0x1a0c, 0x1519, 0x0013, 0x006e, 0x0005, 0x965e, 0xa752,
--      0x965e, 0x965e, 0x965e, 0x965e, 0x965e, 0x965e, 0xa6fd, 0xa8be,
--      0x965e, 0xa77f, 0xa7f6, 0xa77f, 0xa7f6, 0x965e, 0x080c, 0x1519,
-+      0x0013, 0x006e, 0x0005, 0x9663, 0x9a91, 0x9c5c, 0x9663, 0x9cd9,
-+      0x9759, 0x9663, 0x9663, 0x9a23, 0xa13f, 0x9663, 0x9663, 0x9663,
-+      0x9663, 0x9663, 0x9663, 0x080c, 0x1519, 0x0066, 0x6000, 0xa0b2,
-+      0x0010, 0x1a0c, 0x1519, 0x0013, 0x006e, 0x0005, 0x967e, 0xa772,
-+      0x967e, 0x967e, 0x967e, 0x967e, 0x967e, 0x967e, 0xa71d, 0xa8de,
-+      0x967e, 0xa79f, 0xa816, 0xa79f, 0xa816, 0x967e, 0x080c, 0x1519,
-       0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013, 0x006e,
--      0x0005, 0x9679, 0xa160, 0xa22a, 0xa365, 0xa4c1, 0x9679, 0x9679,
--      0x9679, 0xa13a, 0xa6ad, 0xa6b0, 0x9679, 0x9679, 0x9679, 0x9679,
--      0xa6da, 0x080c, 0x1519, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c,
--      0x1519, 0x0013, 0x006e, 0x0005, 0x9694, 0x9694, 0x9694, 0x96c2,
--      0x970f, 0x9694, 0x9694, 0x9694, 0x9696, 0x9694, 0x9694, 0x9694,
--      0x9694, 0x9694, 0x9694, 0x9694, 0x080c, 0x1519, 0xa186, 0x0003,
-+      0x0005, 0x9699, 0xa180, 0xa24a, 0xa385, 0xa4e1, 0x9699, 0x9699,
-+      0x9699, 0xa15a, 0xa6cd, 0xa6d0, 0x9699, 0x9699, 0x9699, 0x9699,
-+      0xa6fa, 0x080c, 0x1519, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c,
-+      0x1519, 0x0013, 0x006e, 0x0005, 0x96b4, 0x96b4, 0x96b4, 0x96e2,
-+      0x972f, 0x96b4, 0x96b4, 0x96b4, 0x96b6, 0x96b4, 0x96b4, 0x96b4,
-+      0x96b4, 0x96b4, 0x96b4, 0x96b4, 0x080c, 0x1519, 0xa186, 0x0003,
-       0x190c, 0x1519, 0x00d6, 0x6003, 0x0003, 0x6106, 0x6010, 0x2068,
-       0x684f, 0x0040, 0x687c, 0x680a, 0x6880, 0x680e, 0x6813, 0x0000,
-       0x6817, 0x0000, 0x6854, 0xa092, 0x199a, 0x0210, 0x2001, 0x1999,
-       0x8003, 0x8013, 0x8213, 0xa210, 0x6216, 0x00de, 0x2c10, 0x080c,
--      0x2068, 0x080c, 0x79fc, 0x0126, 0x2091, 0x8000, 0x080c, 0x7f6e,
--      0x012e, 0x0005, 0xa182, 0x0047, 0x0002, 0x96ce, 0x96ce, 0x96d0,
--      0x96e9, 0x96ce, 0x96ce, 0x96ce, 0x96ce, 0x96fb, 0x080c, 0x1519,
--      0x00d6, 0x0016, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6003, 0x0004,
-+      0x2068, 0x080c, 0x7a15, 0x0126, 0x2091, 0x8000, 0x080c, 0x7f87,
-+      0x012e, 0x0005, 0xa182, 0x0047, 0x0002, 0x96ee, 0x96ee, 0x96f0,
-+      0x9709, 0x96ee, 0x96ee, 0x96ee, 0x96ee, 0x971b, 0x080c, 0x1519,
-+      0x00d6, 0x0016, 0x080c, 0x7e60, 0x080c, 0x7f87, 0x6003, 0x0004,
-       0x6110, 0x2168, 0x684f, 0x0020, 0x685c, 0x685a, 0x6874, 0x687e,
-       0x6878, 0x6882, 0x6897, 0x0000, 0x689b, 0x0000, 0x001e, 0x00de,
--      0x0005, 0x080c, 0x7e47, 0x00d6, 0x6110, 0x2168, 0x080c, 0xac8a,
--      0x0120, 0x684b, 0x0006, 0x080c, 0x580a, 0x00de, 0x080c, 0x95dc,
--      0x080c, 0x7f6e, 0x0005, 0x080c, 0x7e47, 0x080c, 0x2e46, 0x00d6,
--      0x6110, 0x2168, 0x080c, 0xac8a, 0x0120, 0x684b, 0x0029, 0x080c,
--      0x580a, 0x00de, 0x080c, 0x95dc, 0x080c, 0x7f6e, 0x0005, 0xa182,
--      0x0047, 0x0002, 0x971d, 0x972c, 0x971b, 0x971b, 0x971b, 0x971b,
--      0x971b, 0x971b, 0x971b, 0x080c, 0x1519, 0x00d6, 0x6010, 0x2068,
-+      0x0005, 0x080c, 0x7e60, 0x00d6, 0x6110, 0x2168, 0x080c, 0xacaa,
-+      0x0120, 0x684b, 0x0006, 0x080c, 0x5823, 0x00de, 0x080c, 0x95fc,
-+      0x080c, 0x7f87, 0x0005, 0x080c, 0x7e60, 0x080c, 0x2e46, 0x00d6,
-+      0x6110, 0x2168, 0x080c, 0xacaa, 0x0120, 0x684b, 0x0029, 0x080c,
-+      0x5823, 0x00de, 0x080c, 0x95fc, 0x080c, 0x7f87, 0x0005, 0xa182,
-+      0x0047, 0x0002, 0x973d, 0x974c, 0x973b, 0x973b, 0x973b, 0x973b,
-+      0x973b, 0x973b, 0x973b, 0x080c, 0x1519, 0x00d6, 0x6010, 0x2068,
-       0x684c, 0xc0f4, 0x684e, 0x00de, 0x20e1, 0x0005, 0x3d18, 0x3e20,
-       0x2c10, 0x080c, 0x1870, 0x0005, 0x00d6, 0x6110, 0x2168, 0x684b,
--      0x0000, 0x6853, 0x0000, 0x080c, 0x580a, 0x00de, 0x080c, 0x95dc,
--      0x0005, 0xa1b6, 0x0015, 0x1118, 0x080c, 0x95dc, 0x0030, 0xa1b6,
--      0x0016, 0x190c, 0x1519, 0x080c, 0x95dc, 0x0005, 0x20a9, 0x000e,
-+      0x0000, 0x6853, 0x0000, 0x080c, 0x5823, 0x00de, 0x080c, 0x95fc,
-+      0x0005, 0xa1b6, 0x0015, 0x1118, 0x080c, 0x95fc, 0x0030, 0xa1b6,
-+      0x0016, 0x190c, 0x1519, 0x080c, 0x95fc, 0x0005, 0x20a9, 0x000e,
-       0x2e98, 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420,
-       0x9398, 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002,
--      0xa5a8, 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x1f04, 0x9754,
--      0x00e6, 0x080c, 0xac8a, 0x0130, 0x6010, 0x2070, 0x7007, 0x0000,
--      0x7037, 0x0103, 0x00ee, 0x080c, 0x95dc, 0x0005, 0x00d6, 0x0036,
-+      0xa5a8, 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x1f04, 0x9774,
-+      0x00e6, 0x080c, 0xacaa, 0x0130, 0x6010, 0x2070, 0x7007, 0x0000,
-+      0x7037, 0x0103, 0x00ee, 0x080c, 0x95fc, 0x0005, 0x00d6, 0x0036,
-       0x7330, 0xa386, 0x0200, 0x1130, 0x6018, 0x2068, 0x6813, 0x00ff,
-       0x6817, 0xfffd, 0x6010, 0xa005, 0x0130, 0x2068, 0x6807, 0x0000,
--      0x6837, 0x0103, 0x6b32, 0x080c, 0x95dc, 0x003e, 0x00de, 0x0005,
-+      0x6837, 0x0103, 0x6b32, 0x080c, 0x95fc, 0x003e, 0x00de, 0x0005,
-       0x0016, 0x20a9, 0x002a, 0xae80, 0x000c, 0x2098, 0x6010, 0xa080,
-       0x0002, 0x20a0, 0x53a3, 0x20a9, 0x002a, 0x6010, 0xa080, 0x0001,
-       0x2004, 0xa080, 0x0002, 0x20a0, 0x53a3, 0x00e6, 0x6010, 0x2004,
--      0x2070, 0x7037, 0x0103, 0x00ee, 0x080c, 0x95dc, 0x001e, 0x0005,
-+      0x2070, 0x7037, 0x0103, 0x00ee, 0x080c, 0x95fc, 0x001e, 0x0005,
-       0x0016, 0x2009, 0x0000, 0x7030, 0xa086, 0x0100, 0x0140, 0x7038,
-       0xa084, 0x00ff, 0x800c, 0x703c, 0xa084, 0x00ff, 0x8004, 0xa080,
-       0x0004, 0xa108, 0x21a8, 0xae80, 0x000c, 0x2098, 0x6010, 0xa080,
--      0x0002, 0x20a0, 0x080c, 0x4ecb, 0x00e6, 0x080c, 0xac8a, 0x0140,
-+      0x0002, 0x20a0, 0x080c, 0x4ee4, 0x00e6, 0x080c, 0xacaa, 0x0140,
-       0x6010, 0x2070, 0x7007, 0x0000, 0x7034, 0x70b2, 0x7037, 0x0103,
--      0x00ee, 0x080c, 0x95dc, 0x001e, 0x0005, 0x0016, 0x2009, 0x0000,
-+      0x00ee, 0x080c, 0x95fc, 0x001e, 0x0005, 0x0016, 0x2009, 0x0000,
-       0x7030, 0xa086, 0x0200, 0x0110, 0x2009, 0x0001, 0x00d6, 0x6010,
--      0xa06d, 0x090c, 0x1519, 0x694a, 0x080c, 0x580a, 0x00de, 0x080c,
--      0x95dc, 0x001e, 0x0005, 0x00e6, 0x00d6, 0x603f, 0x0000, 0x2c68,
--      0x0016, 0x2009, 0x0035, 0x080c, 0xb13a, 0x001e, 0x1168, 0x0026,
-+      0xa06d, 0x090c, 0x1519, 0x694a, 0x080c, 0x5823, 0x00de, 0x080c,
-+      0x95fc, 0x001e, 0x0005, 0x00e6, 0x00d6, 0x603f, 0x0000, 0x2c68,
-+      0x0016, 0x2009, 0x0035, 0x080c, 0xb15a, 0x001e, 0x1168, 0x0026,
-       0x6228, 0x2268, 0x002e, 0x2071, 0xcc8c, 0x6b1c, 0xa386, 0x0003,
--      0x0130, 0xa386, 0x0006, 0x0128, 0x080c, 0x95dc, 0x0020, 0x0031,
--      0x0010, 0x080c, 0x98cc, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x6810,
--      0x2078, 0xa186, 0x0015, 0x0904, 0x98b3, 0xa18e, 0x0016, 0x1904,
--      0x98ca, 0x700c, 0xa08c, 0xff00, 0xa186, 0x1700, 0x0120, 0xa186,
--      0x0300, 0x1904, 0x9892, 0x8fff, 0x1138, 0x6800, 0xa086, 0x000f,
--      0x0904, 0x9876, 0x0804, 0x98c8, 0x6808, 0xa086, 0xffff, 0x1904,
--      0x98b5, 0x784c, 0xa084, 0x0060, 0xa086, 0x0020, 0x1150, 0x797c,
--      0x7810, 0xa106, 0x1904, 0x98b5, 0x7980, 0x7814, 0xa106, 0x1904,
--      0x98b5, 0x080c, 0xae41, 0x6858, 0x7852, 0x784c, 0xc0dc, 0xc0f4,
-+      0x0130, 0xa386, 0x0006, 0x0128, 0x080c, 0x95fc, 0x0020, 0x0031,
-+      0x0010, 0x080c, 0x98ec, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x6810,
-+      0x2078, 0xa186, 0x0015, 0x0904, 0x98d3, 0xa18e, 0x0016, 0x1904,
-+      0x98ea, 0x700c, 0xa08c, 0xff00, 0xa186, 0x1700, 0x0120, 0xa186,
-+      0x0300, 0x1904, 0x98b2, 0x8fff, 0x1138, 0x6800, 0xa086, 0x000f,
-+      0x0904, 0x9896, 0x0804, 0x98e8, 0x6808, 0xa086, 0xffff, 0x1904,
-+      0x98d5, 0x784c, 0xa084, 0x0060, 0xa086, 0x0020, 0x1150, 0x797c,
-+      0x7810, 0xa106, 0x1904, 0x98d5, 0x7980, 0x7814, 0xa106, 0x1904,
-+      0x98d5, 0x080c, 0xae61, 0x6858, 0x7852, 0x784c, 0xc0dc, 0xc0f4,
-       0xc0d4, 0x784e, 0x0026, 0xa00e, 0x6a14, 0x2001, 0x000a, 0x080c,
--      0x783f, 0x7854, 0xa20a, 0x0208, 0x8011, 0x7a56, 0x82ff, 0x002e,
--      0x1138, 0x00c6, 0x2d60, 0x080c, 0xaa39, 0x00ce, 0x0804, 0x98c8,
--      0x00c6, 0x00d6, 0x2f68, 0x6838, 0xd0fc, 0x1118, 0x080c, 0x4fa6,
--      0x0010, 0x080c, 0x51dd, 0x00de, 0x00ce, 0x1904, 0x98b5, 0x00c6,
--      0x2d60, 0x080c, 0x95dc, 0x00ce, 0x0804, 0x98c8, 0x00c6, 0x080c,
--      0xaf06, 0x0190, 0x6013, 0x0000, 0x6818, 0x601a, 0x080c, 0xb057,
--      0x601f, 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0x95dc, 0x00ce,
--      0x080c, 0x960c, 0x00ce, 0x04e0, 0x2001, 0xc8ff, 0x2004, 0x683e,
-+      0x7858, 0x7854, 0xa20a, 0x0208, 0x8011, 0x7a56, 0x82ff, 0x002e,
-+      0x1138, 0x00c6, 0x2d60, 0x080c, 0xaa59, 0x00ce, 0x0804, 0x98e8,
-+      0x00c6, 0x00d6, 0x2f68, 0x6838, 0xd0fc, 0x1118, 0x080c, 0x4fbf,
-+      0x0010, 0x080c, 0x51f6, 0x00de, 0x00ce, 0x1904, 0x98d5, 0x00c6,
-+      0x2d60, 0x080c, 0x95fc, 0x00ce, 0x0804, 0x98e8, 0x00c6, 0x080c,
-+      0xaf26, 0x0190, 0x6013, 0x0000, 0x6818, 0x601a, 0x080c, 0xb077,
-+      0x601f, 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0x95fc, 0x00ce,
-+      0x080c, 0x962c, 0x00ce, 0x04e0, 0x2001, 0xc8ff, 0x2004, 0x683e,
-       0x00ce, 0x04b0, 0x7008, 0xa086, 0x000b, 0x11a0, 0x6018, 0x200c,
-       0xc1bc, 0x2102, 0x00c6, 0x2d60, 0x7853, 0x0003, 0x6007, 0x0085,
--      0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x7999, 0x080c, 0x7e94,
-+      0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x79b2, 0x080c, 0x7ead,
-       0x00ce, 0x00f0, 0x700c, 0xa086, 0x2a00, 0x1138, 0x2001, 0xc8ff,
-       0x2004, 0x683e, 0x00a8, 0x0481, 0x00a8, 0x8fff, 0x090c, 0x1519,
-       0x00c6, 0x00d6, 0x2d60, 0x2f68, 0x6837, 0x0103, 0x684b, 0x0003,
--      0x080c, 0xa92d, 0x080c, 0xae41, 0x080c, 0xae4d, 0x00de, 0x00ce,
--      0x080c, 0x95dc, 0x00fe, 0x0005, 0xa186, 0x0015, 0x1128, 0x2001,
-+      0x080c, 0xa94d, 0x080c, 0xae61, 0x080c, 0xae6d, 0x00de, 0x00ce,
-+      0x080c, 0x95fc, 0x00fe, 0x0005, 0xa186, 0x0015, 0x1128, 0x2001,
-       0xc8ff, 0x2004, 0x683e, 0x0068, 0xa18e, 0x0016, 0x1160, 0x00c6,
--      0x2d00, 0x2060, 0x080c, 0xc3d5, 0x080c, 0x7103, 0x080c, 0x95dc,
--      0x00ce, 0x080c, 0x95dc, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228,
-+      0x2d00, 0x2060, 0x080c, 0xc3fb, 0x080c, 0x711c, 0x080c, 0x95fc,
-+      0x00ce, 0x080c, 0x95fc, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228,
-       0x7c80, 0x7b7c, 0xd2f4, 0x0130, 0x2001, 0xc8ff, 0x2004, 0x683e,
--      0x0804, 0x9946, 0x00c6, 0x2d60, 0x080c, 0xa94d, 0x00ce, 0x6804,
-+      0x0804, 0x9966, 0x00c6, 0x2d60, 0x080c, 0xa96d, 0x00ce, 0x6804,
-       0xa086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001,
--      0x6007, 0x0050, 0x080c, 0x7999, 0x080c, 0x7e94, 0x00ce, 0x04f0,
-+      0x6007, 0x0050, 0x080c, 0x79b2, 0x080c, 0x7ead, 0x00ce, 0x04f0,
-       0x6800, 0xa086, 0x000f, 0x01c8, 0x8fff, 0x090c, 0x1519, 0x6820,
-       0xd0dc, 0x1198, 0x6800, 0xa086, 0x0004, 0x1198, 0x784c, 0xd0ac,
-       0x0180, 0x784c, 0xc0dc, 0xc0f4, 0x784e, 0x7850, 0xc0f4, 0xc0fc,
-@@ -4449,235 +4454,235 @@ unsigned short risc_code01[] = { 
-       0x00c0, 0x784c, 0xd0b4, 0x1130, 0xd0ac, 0x0db8, 0x784c, 0xd0f4,
-       0x1da0, 0x0c38, 0xd2ec, 0x1d88, 0x7024, 0xa306, 0x1118, 0x7020,
-       0xa406, 0x0d58, 0x7020, 0x6836, 0x7024, 0x683a, 0x2001, 0x0005,
--      0x682e, 0x080c, 0xaf93, 0x080c, 0x7e94, 0x0010, 0x080c, 0x95dc,
-+      0x682e, 0x080c, 0xafb3, 0x080c, 0x7ead, 0x0010, 0x080c, 0x95fc,
-       0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x6034,
--      0x2068, 0x6a1c, 0xa286, 0x0007, 0x0904, 0x99aa, 0xa286, 0x0002,
--      0x0904, 0x99aa, 0xa286, 0x0000, 0x0904, 0x99aa, 0x6808, 0x6338,
--      0xa306, 0x1904, 0x99aa, 0x2071, 0xcc8c, 0xa186, 0x0015, 0x05e0,
-+      0x2068, 0x6a1c, 0xa286, 0x0007, 0x0904, 0x99ca, 0xa286, 0x0002,
-+      0x0904, 0x99ca, 0xa286, 0x0000, 0x0904, 0x99ca, 0x6808, 0x6338,
-+      0xa306, 0x1904, 0x99ca, 0x2071, 0xcc8c, 0xa186, 0x0015, 0x05e0,
-       0xa18e, 0x0016, 0x1190, 0x6030, 0xa084, 0x00ff, 0xa086, 0x0001,
-       0x1160, 0x700c, 0xa086, 0x2a00, 0x1140, 0x6034, 0xa080, 0x0008,
-       0x200c, 0xc1dd, 0xc1f5, 0x2102, 0x0438, 0x00c6, 0x6034, 0x2060,
-       0x6104, 0xa186, 0x004b, 0x01a0, 0xa186, 0x004c, 0x0188, 0xa186,
-       0x004d, 0x0170, 0xa186, 0x004e, 0x0158, 0xa186, 0x0052, 0x0140,
--      0x6010, 0x2068, 0x080c, 0xac8a, 0x090c, 0x1519, 0x6853, 0x0003,
--      0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x7999,
--      0x080c, 0x7e94, 0x00ce, 0x0030, 0x6034, 0x2070, 0x2001, 0xc8ff,
--      0x2004, 0x703e, 0x080c, 0x95dc, 0x002e, 0x00de, 0x00ee, 0x0005,
-+      0x6010, 0x2068, 0x080c, 0xacaa, 0x090c, 0x1519, 0x6853, 0x0003,
-+      0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x79b2,
-+      0x080c, 0x7ead, 0x00ce, 0x0030, 0x6034, 0x2070, 0x2001, 0xc8ff,
-+      0x2004, 0x703e, 0x080c, 0x95fc, 0x002e, 0x00de, 0x00ee, 0x0005,
-       0x00d6, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0xa1b6,
-       0x0015, 0x1558, 0x6018, 0x2068, 0x0156, 0x0036, 0x0026, 0xae90,
-       0x000c, 0xa290, 0x0004, 0x20a9, 0x0004, 0xad98, 0x000a, 0x080c,
--      0xa0fc, 0x002e, 0x003e, 0x015e, 0x11d8, 0x0156, 0x0036, 0x0026,
-+      0xa11c, 0x002e, 0x003e, 0x015e, 0x11d8, 0x0156, 0x0036, 0x0026,
-       0xae90, 0x000c, 0xa290, 0x0008, 0x20a9, 0x0004, 0xad98, 0x0006,
--      0x080c, 0xa0fc, 0x002e, 0x003e, 0x015e, 0x1150, 0x7038, 0x680a,
--      0x703c, 0x680e, 0x6800, 0xc08d, 0x6802, 0x00de, 0x0804, 0x9760,
--      0x080c, 0x2e46, 0x00c6, 0x080c, 0x9586, 0x2f00, 0x601a, 0x6013,
-+      0x080c, 0xa11c, 0x002e, 0x003e, 0x015e, 0x1150, 0x7038, 0x680a,
-+      0x703c, 0x680e, 0x6800, 0xc08d, 0x6802, 0x00de, 0x0804, 0x9780,
-+      0x080c, 0x2e46, 0x00c6, 0x080c, 0x95a6, 0x2f00, 0x601a, 0x6013,
-       0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001,
--      0x0007, 0x080c, 0x5291, 0x080c, 0x52be, 0x080c, 0x79df, 0x080c,
--      0x7e94, 0x00ce, 0x0c10, 0x2100, 0xa1b2, 0x0080, 0x1a0c, 0x1519,
--      0xa1b2, 0x0040, 0x1a04, 0x9a67, 0x0002, 0x9a5b, 0x9a4f, 0x9a5b,
--      0x9a5b, 0x9a5b, 0x9a5b, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d,
--      0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d,
--      0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d,
--      0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a5b, 0x9a4d, 0x9a5b, 0x9a5b,
--      0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a5b, 0x9a4d, 0x9a4d,
--      0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a5b,
--      0x9a5b, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d, 0x9a4d,
--      0x9a4d, 0x9a4d, 0x9a5b, 0x9a4d, 0x9a4d, 0x080c, 0x1519, 0x6003,
--      0x0001, 0x6106, 0x080c, 0x79df, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x7e94, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x79df,
--      0x0126, 0x2091, 0x8000, 0x080c, 0x7e94, 0x012e, 0x0005, 0x2600,
--      0x0002, 0x9a5b, 0x9a5b, 0x9a6f, 0x9a5b, 0x9a5b, 0x9a6f, 0x080c,
-+      0x0007, 0x080c, 0x52aa, 0x080c, 0x52d7, 0x080c, 0x79f8, 0x080c,
-+      0x7ead, 0x00ce, 0x0c10, 0x2100, 0xa1b2, 0x0080, 0x1a0c, 0x1519,
-+      0xa1b2, 0x0040, 0x1a04, 0x9a87, 0x0002, 0x9a7b, 0x9a6f, 0x9a7b,
-+      0x9a7b, 0x9a7b, 0x9a7b, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d,
-+      0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d,
-+      0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d,
-+      0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a7b, 0x9a6d, 0x9a7b, 0x9a7b,
-+      0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a7b, 0x9a6d, 0x9a6d,
-+      0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a7b,
-+      0x9a7b, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d, 0x9a6d,
-+      0x9a6d, 0x9a6d, 0x9a7b, 0x9a6d, 0x9a6d, 0x080c, 0x1519, 0x6003,
-+      0x0001, 0x6106, 0x080c, 0x79f8, 0x0126, 0x2091, 0x8000, 0x080c,
-+      0x7ead, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x79f8,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x7ead, 0x012e, 0x0005, 0x2600,
-+      0x0002, 0x9a7b, 0x9a7b, 0x9a8f, 0x9a7b, 0x9a7b, 0x9a8f, 0x080c,
-       0x1519, 0x6004, 0xa0b2, 0x0080, 0x1a0c, 0x1519, 0xa1b6, 0x0013,
--      0x0904, 0x9b21, 0xa1b6, 0x0027, 0x1904, 0x9ae7, 0x080c, 0x7db1,
--      0x6004, 0x080c, 0xae77, 0x0190, 0x080c, 0xae88, 0x0904, 0x9ae1,
--      0xa08e, 0x0021, 0x0904, 0x9ae4, 0xa08e, 0x0022, 0x0904, 0x9ae1,
--      0xa08e, 0x003d, 0x0904, 0x9ae4, 0x0804, 0x9ada, 0x080c, 0x2e6c,
--      0x2001, 0x0007, 0x080c, 0x5291, 0x6018, 0xa080, 0x0028, 0x200c,
--      0x080c, 0x9c02, 0xa186, 0x007e, 0x1148, 0x2001, 0xc635, 0x2014,
--      0xc285, 0x080c, 0x5f22, 0x1108, 0xc2ad, 0x2202, 0x0016, 0x0026,
--      0x0036, 0x2110, 0x0026, 0x2019, 0x0028, 0x080c, 0x912b, 0x002e,
--      0x080c, 0xc4d7, 0x003e, 0x002e, 0x001e, 0x0016, 0x0026, 0x0036,
--      0x2110, 0x2019, 0x0028, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000,
--      0x080c, 0x7a0e, 0x00c6, 0x6018, 0xa065, 0x0110, 0x080c, 0x553e,
--      0x00ce, 0x2c08, 0x080c, 0xbeea, 0x007e, 0x003e, 0x002e, 0x001e,
--      0x080c, 0x5300, 0x080c, 0xb04f, 0x080c, 0x95dc, 0x080c, 0x7e94,
--      0x0005, 0x080c, 0x9c02, 0x0cb0, 0x080c, 0x9c30, 0x0c98, 0xa186,
--      0x0014, 0x1db0, 0x080c, 0x7db1, 0x080c, 0x2e46, 0x080c, 0xae77,
-+      0x0904, 0x9b41, 0xa1b6, 0x0027, 0x1904, 0x9b07, 0x080c, 0x7dca,
-+      0x6004, 0x080c, 0xae97, 0x0190, 0x080c, 0xaea8, 0x0904, 0x9b01,
-+      0xa08e, 0x0021, 0x0904, 0x9b04, 0xa08e, 0x0022, 0x0904, 0x9b01,
-+      0xa08e, 0x003d, 0x0904, 0x9b04, 0x0804, 0x9afa, 0x080c, 0x2e6c,
-+      0x2001, 0x0007, 0x080c, 0x52aa, 0x6018, 0xa080, 0x0028, 0x200c,
-+      0x080c, 0x9c22, 0xa186, 0x007e, 0x1148, 0x2001, 0xc635, 0x2014,
-+      0xc285, 0x080c, 0x5f3b, 0x1108, 0xc2ad, 0x2202, 0x0016, 0x0026,
-+      0x0036, 0x2110, 0x0026, 0x2019, 0x0028, 0x080c, 0x914b, 0x002e,
-+      0x080c, 0xc4fd, 0x003e, 0x002e, 0x001e, 0x0016, 0x0026, 0x0036,
-+      0x2110, 0x2019, 0x0028, 0x080c, 0x7b2f, 0x0076, 0x2039, 0x0000,
-+      0x080c, 0x7a27, 0x00c6, 0x6018, 0xa065, 0x0110, 0x080c, 0x5557,
-+      0x00ce, 0x2c08, 0x080c, 0xbf10, 0x007e, 0x003e, 0x002e, 0x001e,
-+      0x080c, 0x5319, 0x080c, 0xb06f, 0x080c, 0x95fc, 0x080c, 0x7ead,
-+      0x0005, 0x080c, 0x9c22, 0x0cb0, 0x080c, 0x9c50, 0x0c98, 0xa186,
-+      0x0014, 0x1db0, 0x080c, 0x7dca, 0x080c, 0x2e46, 0x080c, 0xae97,
-       0x1188, 0x080c, 0x2e6c, 0x6018, 0xa080, 0x0028, 0x200c, 0x080c,
--      0x9c02, 0xa186, 0x007e, 0x1128, 0x2001, 0xc635, 0x200c, 0xc185,
--      0x2102, 0x08c0, 0x080c, 0xae88, 0x1118, 0x080c, 0x9c02, 0x0890,
-+      0x9c22, 0xa186, 0x007e, 0x1128, 0x2001, 0xc635, 0x200c, 0xc185,
-+      0x2102, 0x08c0, 0x080c, 0xaea8, 0x1118, 0x080c, 0x9c22, 0x0890,
-       0x6004, 0xa08e, 0x0032, 0x1158, 0x00e6, 0x00f6, 0x2071, 0xc6a2,
-       0x2079, 0x0000, 0x080c, 0x3179, 0x00fe, 0x00ee, 0x0818, 0x6004,
--      0xa08e, 0x0021, 0x0d50, 0xa08e, 0x0022, 0x090c, 0x9c02, 0x0804,
--      0x9ada, 0xa0b2, 0x0040, 0x1a04, 0x9be4, 0x2008, 0x0002, 0x9b69,
--      0x9b6a, 0x9b6d, 0x9b70, 0x9b73, 0x9b76, 0x9b67, 0x9b67, 0x9b67,
--      0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b67,
--      0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b67,
--      0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b79, 0x9b88, 0x9b67,
--      0x9b8a, 0x9b88, 0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b88,
--      0x9b88, 0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b67, 0x9b67,
--      0x9b67, 0x9bc4, 0x9b88, 0x9b67, 0x9b84, 0x9b67, 0x9b67, 0x9b67,
--      0x9b85, 0x9b67, 0x9b67, 0x9b67, 0x9b88, 0x9bbb, 0x9b67, 0x080c,
-+      0xa08e, 0x0021, 0x0d50, 0xa08e, 0x0022, 0x090c, 0x9c22, 0x0804,
-+      0x9afa, 0xa0b2, 0x0040, 0x1a04, 0x9c04, 0x2008, 0x0002, 0x9b89,
-+      0x9b8a, 0x9b8d, 0x9b90, 0x9b93, 0x9b96, 0x9b87, 0x9b87, 0x9b87,
-+      0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b87,
-+      0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b87,
-+      0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b99, 0x9ba8, 0x9b87,
-+      0x9baa, 0x9ba8, 0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9ba8,
-+      0x9ba8, 0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b87, 0x9b87,
-+      0x9b87, 0x9be4, 0x9ba8, 0x9b87, 0x9ba4, 0x9b87, 0x9b87, 0x9b87,
-+      0x9ba5, 0x9b87, 0x9b87, 0x9b87, 0x9ba8, 0x9bdb, 0x9b87, 0x080c,
-       0x1519, 0x00f0, 0x2001, 0x000b, 0x0460, 0x2001, 0x0003, 0x0448,
-       0x2001, 0x0005, 0x0430, 0x2001, 0x0001, 0x0418, 0x2001, 0x0009,
--      0x0400, 0x080c, 0x7db1, 0x6003, 0x0005, 0x2001, 0xc8ff, 0x2004,
--      0x603e, 0x080c, 0x7e94, 0x00a0, 0x0018, 0x0010, 0x080c, 0x5291,
--      0x0804, 0x9bd5, 0x080c, 0x7db1, 0x2001, 0xc8fd, 0x2004, 0x6016,
--      0x2001, 0xc8ff, 0x2004, 0x603e, 0x6003, 0x0004, 0x080c, 0x7e94,
--      0x0005, 0x080c, 0x5291, 0x080c, 0x7db1, 0x6003, 0x0002, 0x2001,
-+      0x0400, 0x080c, 0x7dca, 0x6003, 0x0005, 0x2001, 0xc8ff, 0x2004,
-+      0x603e, 0x080c, 0x7ead, 0x00a0, 0x0018, 0x0010, 0x080c, 0x52aa,
-+      0x0804, 0x9bf5, 0x080c, 0x7dca, 0x2001, 0xc8fd, 0x2004, 0x6016,
-+      0x2001, 0xc8ff, 0x2004, 0x603e, 0x6003, 0x0004, 0x080c, 0x7ead,
-+      0x0005, 0x080c, 0x52aa, 0x080c, 0x7dca, 0x6003, 0x0002, 0x2001,
-       0xc8ff, 0x2004, 0x603e, 0x0036, 0x2019, 0xc65d, 0x2304, 0xa084,
-       0xff00, 0x1120, 0x2001, 0xc8fd, 0x201c, 0x0040, 0x8007, 0xa09a,
-       0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x003e,
--      0x080c, 0x7e94, 0x08e8, 0x080c, 0x7db1, 0x080c, 0xb04f, 0x080c,
--      0x95dc, 0x080c, 0x7e94, 0x08a0, 0x00e6, 0x00f6, 0x2071, 0xc6a2,
--      0x2079, 0x0000, 0x080c, 0x3179, 0x00fe, 0x00ee, 0x080c, 0x7db1,
--      0x080c, 0x95dc, 0x080c, 0x7e94, 0x0818, 0x080c, 0x7db1, 0x2001,
-+      0x080c, 0x7ead, 0x08e8, 0x080c, 0x7dca, 0x080c, 0xb06f, 0x080c,
-+      0x95fc, 0x080c, 0x7ead, 0x08a0, 0x00e6, 0x00f6, 0x2071, 0xc6a2,
-+      0x2079, 0x0000, 0x080c, 0x3179, 0x00fe, 0x00ee, 0x080c, 0x7dca,
-+      0x080c, 0x95fc, 0x080c, 0x7ead, 0x0818, 0x080c, 0x7dca, 0x2001,
-       0xc8ff, 0x2004, 0x603e, 0x6003, 0x0002, 0x2001, 0xc8fd, 0x2004,
--      0x6016, 0x080c, 0x7e94, 0x0005, 0x2600, 0x2008, 0x0002, 0x9bef,
--      0x9bd5, 0x9bed, 0x9bd5, 0x9bd5, 0x9bed, 0x080c, 0x1519, 0x080c,
--      0x7db1, 0x00d6, 0x6010, 0x2068, 0x080c, 0x768f, 0x1118, 0x080c,
--      0x1619, 0x0010, 0x080c, 0x580a, 0x00de, 0x080c, 0x95dc, 0x080c,
--      0x7e94, 0x0005, 0x00e6, 0x0026, 0x0016, 0x080c, 0xac8a, 0x0508,
-+      0x6016, 0x080c, 0x7ead, 0x0005, 0x2600, 0x2008, 0x0002, 0x9c0f,
-+      0x9bf5, 0x9c0d, 0x9bf5, 0x9bf5, 0x9c0d, 0x080c, 0x1519, 0x080c,
-+      0x7dca, 0x00d6, 0x6010, 0x2068, 0x080c, 0x76a8, 0x1118, 0x080c,
-+      0x1619, 0x0010, 0x080c, 0x5823, 0x00de, 0x080c, 0x95fc, 0x080c,
-+      0x7ead, 0x0005, 0x00e6, 0x0026, 0x0016, 0x080c, 0xacaa, 0x0508,
-       0x6010, 0x2070, 0x7034, 0xa086, 0x0139, 0x1148, 0x2001, 0x0030,
--      0x2009, 0x0000, 0x2011, 0x4005, 0x080c, 0xb106, 0x0090, 0x7038,
-+      0x2009, 0x0000, 0x2011, 0x4005, 0x080c, 0xb126, 0x0090, 0x7038,
-       0xd0fc, 0x0178, 0x7007, 0x0000, 0x0016, 0x6004, 0xa08e, 0x0021,
-       0x0160, 0xa08e, 0x003d, 0x0148, 0x001e, 0x7037, 0x0103, 0x7033,
-       0x0100, 0x001e, 0x002e, 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc8,
-       0x00e6, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103,
-       0x7023, 0x8001, 0x00ee, 0x0005, 0x00d6, 0x6618, 0x2668, 0x6804,
-       0xa084, 0x00ff, 0x00de, 0xa0b2, 0x000c, 0x1a0c, 0x1519, 0x6604,
--      0xa6b6, 0x0043, 0x1120, 0x080c, 0xb0c2, 0x0804, 0x9ca9, 0x6604,
--      0xa6b6, 0x0033, 0x1120, 0x080c, 0xb072, 0x0804, 0x9ca9, 0x6604,
--      0xa6b6, 0x0028, 0x1120, 0x080c, 0xaeb8, 0x0804, 0x9ca9, 0x6604,
--      0xa6b6, 0x0029, 0x1120, 0x080c, 0xaecf, 0x0804, 0x9ca9, 0x6604,
--      0xa6b6, 0x001f, 0x1118, 0x080c, 0x9746, 0x04d8, 0x6604, 0xa6b6,
--      0x0000, 0x1118, 0x080c, 0x99b0, 0x04a0, 0x6604, 0xa6b6, 0x0022,
--      0x1118, 0x080c, 0x976e, 0x0468, 0x6604, 0xa6b6, 0x0035, 0x1118,
--      0x080c, 0x97eb, 0x0430, 0x6604, 0xa6b6, 0x0039, 0x1118, 0x080c,
--      0x994c, 0x00f8, 0x6604, 0xa6b6, 0x003d, 0x1118, 0x080c, 0x9788,
--      0x00c0, 0x6604, 0xa6b6, 0x0044, 0x1118, 0x080c, 0x97a8, 0x0088,
--      0x6604, 0xa6b6, 0x0041, 0x1118, 0x080c, 0x97d5, 0x0050, 0xa1b6,
-+      0xa6b6, 0x0043, 0x1120, 0x080c, 0xb0e2, 0x0804, 0x9cc9, 0x6604,
-+      0xa6b6, 0x0033, 0x1120, 0x080c, 0xb092, 0x0804, 0x9cc9, 0x6604,
-+      0xa6b6, 0x0028, 0x1120, 0x080c, 0xaed8, 0x0804, 0x9cc9, 0x6604,
-+      0xa6b6, 0x0029, 0x1120, 0x080c, 0xaeef, 0x0804, 0x9cc9, 0x6604,
-+      0xa6b6, 0x001f, 0x1118, 0x080c, 0x9766, 0x04d8, 0x6604, 0xa6b6,
-+      0x0000, 0x1118, 0x080c, 0x99d0, 0x04a0, 0x6604, 0xa6b6, 0x0022,
-+      0x1118, 0x080c, 0x978e, 0x0468, 0x6604, 0xa6b6, 0x0035, 0x1118,
-+      0x080c, 0x980b, 0x0430, 0x6604, 0xa6b6, 0x0039, 0x1118, 0x080c,
-+      0x996c, 0x00f8, 0x6604, 0xa6b6, 0x003d, 0x1118, 0x080c, 0x97a8,
-+      0x00c0, 0x6604, 0xa6b6, 0x0044, 0x1118, 0x080c, 0x97c8, 0x0088,
-+      0x6604, 0xa6b6, 0x0041, 0x1118, 0x080c, 0x97f5, 0x0050, 0xa1b6,
-       0x0015, 0x1110, 0x0053, 0x0028, 0xa1b6, 0x0016, 0x1118, 0x0804,
--      0x9e8c, 0x0005, 0x080c, 0x9623, 0x0ce0, 0x9cd3, 0x9cd6, 0x9cd3,
--      0x9d1a, 0x9cd3, 0x9e13, 0x9e9a, 0x9cd3, 0x9cd3, 0x9e64, 0x9cd3,
--      0x9e7a, 0xa1b6, 0x0048, 0x0140, 0x20e1, 0x0005, 0x3d18, 0x3e20,
-+      0x9eac, 0x0005, 0x080c, 0x9643, 0x0ce0, 0x9cf3, 0x9cf6, 0x9cf3,
-+      0x9d3a, 0x9cf3, 0x9e33, 0x9eba, 0x9cf3, 0x9cf3, 0x9e84, 0x9cf3,
-+      0x9e9a, 0xa1b6, 0x0048, 0x0140, 0x20e1, 0x0005, 0x3d18, 0x3e20,
-       0x2c10, 0x080c, 0x1870, 0x0005, 0x00e6, 0xacf0, 0x0004, 0x2e74,
--      0x7000, 0x2070, 0x7037, 0x0103, 0x00ee, 0x080c, 0x95dc, 0x0005,
--      0x080c, 0x95dc, 0x0005, 0xe000, 0xe000, 0x0005, 0x00e6, 0x2071,
--      0xc600, 0x7084, 0xa086, 0x0074, 0x1530, 0x080c, 0xbec1, 0x11b0,
-+      0x7000, 0x2070, 0x7037, 0x0103, 0x00ee, 0x080c, 0x95fc, 0x0005,
-+      0x080c, 0x95fc, 0x0005, 0xe000, 0xe000, 0x0005, 0x00e6, 0x2071,
-+      0xc600, 0x7084, 0xa086, 0x0074, 0x1530, 0x080c, 0xbee7, 0x11b0,
-       0x00d6, 0x6018, 0x2068, 0x7030, 0xd08c, 0x0128, 0x6800, 0xd0bc,
-       0x0110, 0xc0c5, 0x6802, 0x00e9, 0x00de, 0x2001, 0x0006, 0x080c,
--      0x5291, 0x080c, 0x2e6c, 0x080c, 0x95dc, 0x0088, 0x2001, 0x000a,
--      0x080c, 0x5291, 0x080c, 0x2e6c, 0x6003, 0x0001, 0x6007, 0x0001,
--      0x080c, 0x79df, 0x0020, 0x2001, 0x0001, 0x080c, 0x9dee, 0x00ee,
--      0x0005, 0x6800, 0xd084, 0x0168, 0x2001, 0x0000, 0x080c, 0x527f,
-+      0x52aa, 0x080c, 0x2e6c, 0x080c, 0x95fc, 0x0088, 0x2001, 0x000a,
-+      0x080c, 0x52aa, 0x080c, 0x2e6c, 0x6003, 0x0001, 0x6007, 0x0001,
-+      0x080c, 0x79f8, 0x0020, 0x2001, 0x0001, 0x080c, 0x9e0e, 0x00ee,
-+      0x0005, 0x6800, 0xd084, 0x0168, 0x2001, 0x0000, 0x080c, 0x5298,
-       0x2069, 0xc652, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c,
--      0x52be, 0x0005, 0x00d6, 0x2011, 0xc621, 0x2204, 0xa086, 0x0074,
--      0x1904, 0x9de9, 0x6018, 0x2068, 0x6aa0, 0xa286, 0x007e, 0x1120,
--      0x080c, 0x9fbc, 0x0804, 0x9d88, 0x080c, 0x9fb2, 0x6018, 0x2068,
-+      0x52d7, 0x0005, 0x00d6, 0x2011, 0xc621, 0x2204, 0xa086, 0x0074,
-+      0x1904, 0x9e09, 0x6018, 0x2068, 0x6aa0, 0xa286, 0x007e, 0x1120,
-+      0x080c, 0x9fdc, 0x0804, 0x9da8, 0x080c, 0x9fd2, 0x6018, 0x2068,
-       0xa080, 0x0028, 0x2014, 0xa286, 0x0080, 0x11c0, 0x6813, 0x00ff,
-       0x6817, 0xfffc, 0x6010, 0xa005, 0x0138, 0x2068, 0x6807, 0x0000,
--      0x6837, 0x0103, 0x6833, 0x0200, 0x2001, 0x0006, 0x080c, 0x5291,
--      0x080c, 0x2e6c, 0x080c, 0x95dc, 0x0804, 0x9dec, 0x00e6, 0x2071,
-+      0x6837, 0x0103, 0x6833, 0x0200, 0x2001, 0x0006, 0x080c, 0x52aa,
-+      0x080c, 0x2e6c, 0x080c, 0x95fc, 0x0804, 0x9e0c, 0x00e6, 0x2071,
-       0xc635, 0x2e04, 0xd09c, 0x0188, 0x2071, 0xcc80, 0x7108, 0x720c,
-       0xa18c, 0x00ff, 0x1118, 0xa284, 0xff00, 0x0138, 0x6018, 0x2070,
-       0x70a0, 0xd0bc, 0x1110, 0x7112, 0x7216, 0x00ee, 0x6010, 0xa005,
-       0x0198, 0x2068, 0x6838, 0xd0f4, 0x0178, 0x6834, 0xa084, 0x00ff,
-       0xa086, 0x0039, 0x1958, 0x2001, 0x0000, 0x2009, 0x0000, 0x2011,
--      0x4000, 0x080c, 0xb106, 0x0840, 0x2001, 0x0004, 0x080c, 0x5291,
--      0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x79df, 0x0804, 0x9dec,
--      0x685c, 0xd0e4, 0x01d8, 0x080c, 0xb002, 0x080c, 0x5f22, 0x0118,
--      0xd0dc, 0x1904, 0x9d44, 0x2011, 0xc635, 0x2204, 0xc0ad, 0x2012,
-+      0x4000, 0x080c, 0xb126, 0x0840, 0x2001, 0x0004, 0x080c, 0x52aa,
-+      0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x79f8, 0x0804, 0x9e0c,
-+      0x685c, 0xd0e4, 0x01d8, 0x080c, 0xb022, 0x080c, 0x5f3b, 0x0118,
-+      0xd0dc, 0x1904, 0x9d64, 0x2011, 0xc635, 0x2204, 0xc0ad, 0x2012,
-       0x2001, 0xc8d6, 0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000,
--      0x080c, 0x2a1c, 0x78e2, 0x00fe, 0x0804, 0x9d44, 0x080c, 0xb038,
--      0x2011, 0xc635, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xc016,
--      0x000e, 0x1904, 0x9d44, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c,
--      0x5291, 0x2001, 0x0000, 0x080c, 0x527f, 0x00c6, 0x2009, 0x00ef,
-+      0x080c, 0x2a1c, 0x78e2, 0x00fe, 0x0804, 0x9d64, 0x080c, 0xb058,
-+      0x2011, 0xc635, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xc03c,
-+      0x000e, 0x1904, 0x9d64, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c,
-+      0x52aa, 0x2001, 0x0000, 0x080c, 0x5298, 0x00c6, 0x2009, 0x00ef,
-       0x00f6, 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936, 0x00fe, 0x080c,
-       0x29f1, 0x00f6, 0x2079, 0xc600, 0x7976, 0x2100, 0x2009, 0x0000,
--      0x080c, 0x29c7, 0x7952, 0x00fe, 0x8108, 0x080c, 0x52e1, 0x2c00,
--      0x00ce, 0x1904, 0x9d44, 0x601a, 0x2001, 0x0002, 0x080c, 0x5291,
--      0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79df,
-+      0x080c, 0x29c7, 0x7952, 0x00fe, 0x8108, 0x080c, 0x52fa, 0x2c00,
-+      0x00ce, 0x1904, 0x9d64, 0x601a, 0x2001, 0x0002, 0x080c, 0x52aa,
-+      0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79f8,
-       0x0018, 0x2001, 0x0001, 0x0011, 0x00de, 0x0005, 0x0066, 0x2030,
--      0xa005, 0x0170, 0x2001, 0x0007, 0x080c, 0x5291, 0x2001, 0xc600,
--      0x2004, 0xa086, 0x0003, 0x1120, 0x2001, 0x0007, 0x080c, 0x52be,
-+      0xa005, 0x0170, 0x2001, 0x0007, 0x080c, 0x52aa, 0x2001, 0xc600,
-+      0x2004, 0xa086, 0x0003, 0x1120, 0x2001, 0x0007, 0x080c, 0x52d7,
-       0x2600, 0xa005, 0x1150, 0x6010, 0xa080, 0x000e, 0x2004, 0xd0fc,
--      0x1120, 0x2011, 0x8014, 0x080c, 0x407d, 0x080c, 0x2e6c, 0x080c,
--      0x95dc, 0x006e, 0x0005, 0x00e6, 0x0026, 0x0016, 0x2071, 0xc600,
-+      0x1120, 0x2011, 0x8014, 0x080c, 0x4096, 0x080c, 0x2e6c, 0x080c,
-+      0x95fc, 0x006e, 0x0005, 0x00e6, 0x0026, 0x0016, 0x2071, 0xc600,
-       0x7084, 0xa086, 0x0014, 0x15f0, 0x7000, 0xa086, 0x0003, 0x1128,
--      0x6010, 0xa005, 0x1110, 0x080c, 0x40ef, 0x00d6, 0x6018, 0x2068,
--      0x080c, 0x53df, 0x080c, 0x9d09, 0x00de, 0x080c, 0xa06b, 0x1550,
-+      0x6010, 0xa005, 0x1110, 0x080c, 0x4108, 0x00d6, 0x6018, 0x2068,
-+      0x080c, 0x53f8, 0x080c, 0x9d29, 0x00de, 0x080c, 0xa08b, 0x1550,
-       0x00d6, 0x6018, 0x2068, 0x6890, 0x00de, 0xa005, 0x0518, 0x2001,
--      0x0006, 0x080c, 0x5291, 0x00e6, 0x6010, 0xa075, 0x01a8, 0x7034,
-+      0x0006, 0x080c, 0x52aa, 0x00e6, 0x6010, 0xa075, 0x01a8, 0x7034,
-       0xa084, 0x00ff, 0xa086, 0x0039, 0x1148, 0x2001, 0x0000, 0x2009,
--      0x0000, 0x2011, 0x4000, 0x080c, 0xb106, 0x0030, 0x7007, 0x0000,
-+      0x0000, 0x2011, 0x4000, 0x080c, 0xb126, 0x0030, 0x7007, 0x0000,
-       0x7037, 0x0103, 0x7033, 0x0200, 0x00ee, 0x080c, 0x2e6c, 0x080c,
--      0x95dc, 0x0030, 0x080c, 0x9c02, 0x2001, 0x0000, 0x080c, 0x9dee,
-+      0x95fc, 0x0030, 0x080c, 0x9c22, 0x2001, 0x0000, 0x080c, 0x9e0e,
-       0x001e, 0x002e, 0x00ee, 0x0005, 0x2011, 0xc621, 0x2204, 0xa086,
--      0x0014, 0x1158, 0x2001, 0x0002, 0x080c, 0x5291, 0x6003, 0x0001,
--      0x6007, 0x0001, 0x080c, 0x79df, 0x0020, 0x2001, 0x0001, 0x080c,
--      0x9dee, 0x0005, 0x2011, 0xc621, 0x2204, 0xa086, 0x0004, 0x1138,
--      0x2001, 0x0007, 0x080c, 0x5291, 0x080c, 0x95dc, 0x0020, 0x2001,
--      0x0001, 0x080c, 0x9dee, 0x0005, 0x000b, 0x0005, 0x9cd3, 0x9ea5,
--      0x9cd3, 0x9edb, 0x9cd3, 0x9f68, 0x9e9a, 0x9cd0, 0x9cd3, 0x9f7d,
--      0x9cd3, 0x9f8f, 0x6604, 0xa686, 0x0003, 0x0904, 0x9e13, 0xa6b6,
--      0x001e, 0x1110, 0x080c, 0x95dc, 0x0005, 0x00d6, 0x00c6, 0x080c,
--      0x9fa1, 0x1178, 0x2001, 0x0000, 0x080c, 0x527f, 0x2001, 0x0002,
--      0x080c, 0x5291, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79df,
-+      0x0014, 0x1158, 0x2001, 0x0002, 0x080c, 0x52aa, 0x6003, 0x0001,
-+      0x6007, 0x0001, 0x080c, 0x79f8, 0x0020, 0x2001, 0x0001, 0x080c,
-+      0x9e0e, 0x0005, 0x2011, 0xc621, 0x2204, 0xa086, 0x0004, 0x1138,
-+      0x2001, 0x0007, 0x080c, 0x52aa, 0x080c, 0x95fc, 0x0020, 0x2001,
-+      0x0001, 0x080c, 0x9e0e, 0x0005, 0x000b, 0x0005, 0x9cf3, 0x9ec5,
-+      0x9cf3, 0x9efb, 0x9cf3, 0x9f88, 0x9eba, 0x9cf0, 0x9cf3, 0x9f9d,
-+      0x9cf3, 0x9faf, 0x6604, 0xa686, 0x0003, 0x0904, 0x9e33, 0xa6b6,
-+      0x001e, 0x1110, 0x080c, 0x95fc, 0x0005, 0x00d6, 0x00c6, 0x080c,
-+      0x9fc1, 0x1178, 0x2001, 0x0000, 0x080c, 0x5298, 0x2001, 0x0002,
-+      0x080c, 0x52aa, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79f8,
-       0x00f8, 0x2009, 0xcc8e, 0x2104, 0xa086, 0x0009, 0x1160, 0x6018,
-       0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0170, 0x8001, 0x6842,
-       0x6017, 0x000a, 0x0068, 0x2009, 0xcc8f, 0x2104, 0xa084, 0xff00,
--      0xa086, 0x1900, 0x1108, 0x08d0, 0x2001, 0x0001, 0x080c, 0x9dee,
--      0x00ce, 0x00de, 0x0005, 0x0026, 0x2011, 0x0000, 0x080c, 0x9faf,
-+      0xa086, 0x1900, 0x1108, 0x08d0, 0x2001, 0x0001, 0x080c, 0x9e0e,
-+      0x00ce, 0x00de, 0x0005, 0x0026, 0x2011, 0x0000, 0x080c, 0x9fcf,
-       0x00d6, 0x2069, 0xc8e5, 0x2d04, 0xa005, 0x0168, 0x6018, 0x2068,
-       0x68a0, 0xa086, 0x007e, 0x1138, 0x2069, 0xc61d, 0x2d04, 0x8000,
-       0x206a, 0x00de, 0x0010, 0x00de, 0x0078, 0x2001, 0x0000, 0x080c,
--      0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x6003, 0x0001, 0x6007,
--      0x0002, 0x080c, 0x79df, 0x0490, 0x00d6, 0x6010, 0x2068, 0x080c,
--      0xac8a, 0x00de, 0x0108, 0x6a34, 0x080c, 0x9c02, 0x2009, 0xcc8e,
-+      0x5298, 0x2001, 0x0002, 0x080c, 0x52aa, 0x6003, 0x0001, 0x6007,
-+      0x0002, 0x080c, 0x79f8, 0x0490, 0x00d6, 0x6010, 0x2068, 0x080c,
-+      0xacaa, 0x00de, 0x0108, 0x6a34, 0x080c, 0x9c22, 0x2009, 0xcc8e,
-       0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0510, 0xa686, 0x000b,
-       0x01c8, 0x2009, 0xcc8f, 0x2104, 0xa084, 0xff00, 0x1118, 0xa686,
-       0x0009, 0x01b0, 0xa086, 0x1900, 0x1168, 0xa686, 0x0009, 0x0180,
--      0x2001, 0x0004, 0x080c, 0x5291, 0x2001, 0x0028, 0x6016, 0x6007,
--      0x004b, 0x0020, 0x2001, 0x0001, 0x080c, 0x9dee, 0x002e, 0x0005,
--      0x00d6, 0xa286, 0x0139, 0x0160, 0x6010, 0x2068, 0x080c, 0xac8a,
-+      0x2001, 0x0004, 0x080c, 0x52aa, 0x2001, 0x0028, 0x6016, 0x6007,
-+      0x004b, 0x0020, 0x2001, 0x0001, 0x080c, 0x9e0e, 0x002e, 0x0005,
-+      0x00d6, 0xa286, 0x0139, 0x0160, 0x6010, 0x2068, 0x080c, 0xacaa,
-       0x0148, 0x6834, 0xa086, 0x0139, 0x0118, 0x6838, 0xd0fc, 0x0110,
-       0x00de, 0x0c40, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005,
-       0x0140, 0x8001, 0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x00de,
-       0x08e8, 0x68a0, 0xa086, 0x007e, 0x1138, 0x00e6, 0x2071, 0xc600,
--      0x080c, 0x4f02, 0x00ee, 0x0010, 0x080c, 0x2e46, 0x00de, 0x0850,
--      0x080c, 0x9faf, 0x1158, 0x2001, 0x0004, 0x080c, 0x5291, 0x6003,
--      0x0001, 0x6007, 0x0003, 0x080c, 0x79df, 0x0030, 0x080c, 0x9c02,
--      0x2001, 0x0000, 0x080c, 0x9dee, 0x0005, 0x0489, 0x1158, 0x2001,
--      0x0008, 0x080c, 0x5291, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c,
--      0x79df, 0x0020, 0x2001, 0x0001, 0x080c, 0x9dee, 0x0005, 0x00f9,
--      0x1158, 0x2001, 0x000a, 0x080c, 0x5291, 0x6003, 0x0001, 0x6007,
--      0x0001, 0x080c, 0x79df, 0x0020, 0x2001, 0x0001, 0x080c, 0x9dee,
-+      0x080c, 0x4f1b, 0x00ee, 0x0010, 0x080c, 0x2e46, 0x00de, 0x0850,
-+      0x080c, 0x9fcf, 0x1158, 0x2001, 0x0004, 0x080c, 0x52aa, 0x6003,
-+      0x0001, 0x6007, 0x0003, 0x080c, 0x79f8, 0x0030, 0x080c, 0x9c22,
-+      0x2001, 0x0000, 0x080c, 0x9e0e, 0x0005, 0x0489, 0x1158, 0x2001,
-+      0x0008, 0x080c, 0x52aa, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c,
-+      0x79f8, 0x0020, 0x2001, 0x0001, 0x080c, 0x9e0e, 0x0005, 0x00f9,
-+      0x1158, 0x2001, 0x000a, 0x080c, 0x52aa, 0x6003, 0x0001, 0x6007,
-+      0x0001, 0x080c, 0x79f8, 0x0020, 0x2001, 0x0001, 0x080c, 0x9e0e,
-       0x0005, 0x2009, 0xcc8e, 0x2104, 0xa086, 0x0003, 0x1138, 0x2009,
-       0xcc8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x0005, 0xa085,
-       0x0001, 0x0005, 0x00c6, 0x0016, 0xac88, 0x0006, 0x2164, 0x080c,
--      0x534c, 0x001e, 0x00ce, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x0036,
-+      0x5365, 0x001e, 0x00ce, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x0036,
-       0x0016, 0x6018, 0x2068, 0x2071, 0xc635, 0x2e04, 0xa085, 0x0003,
--      0x2072, 0x080c, 0xa040, 0x0560, 0x2009, 0xc635, 0x2104, 0xc0cd,
-+      0x2072, 0x080c, 0xa060, 0x0560, 0x2009, 0xc635, 0x2104, 0xc0cd,
-       0x200a, 0x2001, 0xc653, 0x2004, 0xd0a4, 0x0158, 0xa006, 0x2020,
--      0x2009, 0x002a, 0x080c, 0xc183, 0x2001, 0xc60c, 0x200c, 0xc195,
-+      0x2009, 0x002a, 0x080c, 0xc1a9, 0x2001, 0xc60c, 0x200c, 0xc195,
-       0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x080c, 0x2e19, 0x2071,
-       0xc600, 0x080c, 0x2c62, 0x00c6, 0x0156, 0x20a9, 0x0081, 0x2009,
--      0x007f, 0x080c, 0x2f41, 0x8108, 0x1f04, 0x9ff1, 0x015e, 0x00ce,
--      0x080c, 0x9fb2, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0xcc80,
-+      0x007f, 0x080c, 0x2f41, 0x8108, 0x1f04, 0xa011, 0x015e, 0x00ce,
-+      0x080c, 0x9fd2, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0xcc80,
-       0x2079, 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0xc61c, 0x206a,
-       0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0xc61d, 0x206a, 0x78ea,
-       0x7832, 0x7836, 0x2010, 0xa084, 0xff00, 0x001e, 0xa105, 0x2009,
-       0xc628, 0x200a, 0x2200, 0xa084, 0x00ff, 0x2008, 0x080c, 0x29f1,
--      0x080c, 0x5f22, 0x0170, 0x2069, 0xcc8e, 0x2071, 0xc8f9, 0x6810,
-+      0x080c, 0x5f3b, 0x0170, 0x2069, 0xcc8e, 0x2071, 0xc8f9, 0x6810,
-       0x2072, 0x6814, 0x7006, 0x6818, 0x700a, 0x681c, 0x700e, 0x080c,
--      0xb002, 0x0040, 0x2001, 0x0006, 0x080c, 0x5291, 0x080c, 0x2e6c,
--      0x080c, 0x95dc, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x0005,
-+      0xb022, 0x0040, 0x2001, 0x0006, 0x080c, 0x52aa, 0x080c, 0x2e6c,
-+      0x080c, 0x95fc, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x0005,
-       0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0xc628, 0x231c, 0x83ff,
-       0x01e8, 0x2071, 0xcc80, 0x2e14, 0xa294, 0x00ff, 0x7004, 0xa084,
-       0xff00, 0xa205, 0xa306, 0x1190, 0x2011, 0xcc96, 0xad98, 0x000a,
--      0x20a9, 0x0004, 0x080c, 0xa0fc, 0x1148, 0x2011, 0xcc9a, 0xad98,
--      0x0006, 0x20a9, 0x0004, 0x080c, 0xa0fc, 0x1100, 0x015e, 0x00ee,
-+      0x20a9, 0x0004, 0x080c, 0xa11c, 0x1148, 0x2011, 0xcc9a, 0xad98,
-+      0x0006, 0x20a9, 0x0004, 0x080c, 0xa11c, 0x1100, 0x015e, 0x00ee,
-       0x003e, 0x002e, 0x0005, 0x00e6, 0x2071, 0xcc8c, 0x7004, 0xa086,
-       0x0014, 0x11a8, 0x7008, 0xa086, 0x0800, 0x1188, 0x700c, 0xd0ec,
-       0x0160, 0xa084, 0x0f00, 0xa086, 0x0100, 0x1138, 0x7024, 0xd0a4,
-@@ -4685,103 +4690,103 @@ unsigned short risc_code01[] = { 
-       0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026,
-       0x0006, 0x0126, 0x2091, 0x8000, 0x2029, 0xc930, 0x252c, 0x2021,
-       0xc936, 0x2424, 0x2061, 0xce00, 0x2071, 0xc600, 0x7248, 0x7068,
--      0xa202, 0x16f0, 0x080c, 0xc1ab, 0x05a0, 0x671c, 0xa786, 0x0001,
-+      0xa202, 0x16f0, 0x080c, 0xc1d1, 0x05a0, 0x671c, 0xa786, 0x0001,
-       0x0580, 0xa786, 0x0007, 0x0568, 0x2500, 0xac06, 0x0550, 0x2400,
-       0xac06, 0x0538, 0x00c6, 0x6000, 0xa086, 0x0004, 0x1110, 0x080c,
--      0x1953, 0xa786, 0x0008, 0x1148, 0x080c, 0xae88, 0x1130, 0x00ce,
--      0x080c, 0x9c02, 0x080c, 0xae4d, 0x00a0, 0x6010, 0x2068, 0x080c,
--      0xac8a, 0x0160, 0xa786, 0x0003, 0x11e8, 0x6837, 0x0103, 0x6b4a,
--      0x6847, 0x0000, 0x080c, 0x580a, 0x080c, 0xae41, 0x080c, 0xae4d,
--      0x00ce, 0xace0, 0x0018, 0x705c, 0xac02, 0x1210, 0x0804, 0xa09e,
-+      0x1953, 0xa786, 0x0008, 0x1148, 0x080c, 0xaea8, 0x1130, 0x00ce,
-+      0x080c, 0x9c22, 0x080c, 0xae6d, 0x00a0, 0x6010, 0x2068, 0x080c,
-+      0xacaa, 0x0160, 0xa786, 0x0003, 0x11e8, 0x6837, 0x0103, 0x6b4a,
-+      0x6847, 0x0000, 0x080c, 0x5823, 0x080c, 0xae61, 0x080c, 0xae6d,
-+      0x00ce, 0xace0, 0x0018, 0x705c, 0xac02, 0x1210, 0x0804, 0xa0be,
-       0x012e, 0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x00de,
--      0x00ee, 0x0005, 0xa786, 0x0006, 0x1118, 0x080c, 0xc134, 0x0c30,
--      0xa786, 0x0009, 0x1128, 0x2009, 0x0106, 0x080c, 0x960c, 0x0c00,
-+      0x00ee, 0x0005, 0xa786, 0x0006, 0x1118, 0x080c, 0xc15a, 0x0c30,
-+      0xa786, 0x0009, 0x1128, 0x2009, 0x0106, 0x080c, 0x962c, 0x0c00,
-       0xa786, 0x000a, 0x09a0, 0x0888, 0x220c, 0x2304, 0xa106, 0x1130,
--      0x8210, 0x8318, 0x1f04, 0xa0fc, 0xa006, 0x0005, 0x2304, 0xa102,
-+      0x8210, 0x8318, 0x1f04, 0xa11c, 0xa006, 0x0005, 0x2304, 0xa102,
-       0x0218, 0x2001, 0x0001, 0x0010, 0x2001, 0x0000, 0xa18d, 0x0001,
-       0x0005, 0x220c, 0x810f, 0x2304, 0xa106, 0x1130, 0x8210, 0x8318,
--      0x1f04, 0xa111, 0xa006, 0x0005, 0xa18d, 0x0001, 0x0005, 0x6004,
--      0xa08a, 0x0080, 0x1a0c, 0x1519, 0x080c, 0xae77, 0x0120, 0x080c,
--      0xae88, 0x0168, 0x0028, 0x080c, 0x2e6c, 0x080c, 0xae88, 0x0138,
--      0x080c, 0x7db1, 0x080c, 0x95dc, 0x080c, 0x7e94, 0x0005, 0x080c,
--      0x9c02, 0x0cb0, 0xa182, 0x0040, 0x0002, 0xa150, 0xa150, 0xa150,
--      0xa150, 0xa150, 0xa150, 0xa150, 0xa150, 0xa150, 0xa150, 0xa150,
--      0xa152, 0xa152, 0xa152, 0xa152, 0xa150, 0xa150, 0xa150, 0xa152,
-+      0x1f04, 0xa131, 0xa006, 0x0005, 0xa18d, 0x0001, 0x0005, 0x6004,
-+      0xa08a, 0x0080, 0x1a0c, 0x1519, 0x080c, 0xae97, 0x0120, 0x080c,
-+      0xaea8, 0x0168, 0x0028, 0x080c, 0x2e6c, 0x080c, 0xaea8, 0x0138,
-+      0x080c, 0x7dca, 0x080c, 0x95fc, 0x080c, 0x7ead, 0x0005, 0x080c,
-+      0x9c22, 0x0cb0, 0xa182, 0x0040, 0x0002, 0xa170, 0xa170, 0xa170,
-+      0xa170, 0xa170, 0xa170, 0xa170, 0xa170, 0xa170, 0xa170, 0xa170,
-+      0xa172, 0xa172, 0xa172, 0xa172, 0xa170, 0xa170, 0xa170, 0xa172,
-       0x080c, 0x1519, 0x600b, 0xffff, 0x6003, 0x0001, 0x6106, 0x080c,
--      0x7999, 0x0126, 0x2091, 0x8000, 0x080c, 0x7e94, 0x012e, 0x0005,
--      0xa186, 0x0013, 0x1128, 0x6004, 0xa082, 0x0040, 0x0804, 0xa1ec,
--      0xa186, 0x0027, 0x11e8, 0x080c, 0x7db1, 0x080c, 0x2e46, 0x00d6,
--      0x6110, 0x2168, 0x080c, 0xac8a, 0x0168, 0x6837, 0x0103, 0x684b,
--      0x0029, 0x6847, 0x0000, 0x694c, 0xc1c5, 0x694e, 0x080c, 0x580a,
--      0x080c, 0xae41, 0x00de, 0x080c, 0x95dc, 0x080c, 0x7e94, 0x0005,
-+      0x79b2, 0x0126, 0x2091, 0x8000, 0x080c, 0x7ead, 0x012e, 0x0005,
-+      0xa186, 0x0013, 0x1128, 0x6004, 0xa082, 0x0040, 0x0804, 0xa20c,
-+      0xa186, 0x0027, 0x11e8, 0x080c, 0x7dca, 0x080c, 0x2e46, 0x00d6,
-+      0x6110, 0x2168, 0x080c, 0xacaa, 0x0168, 0x6837, 0x0103, 0x684b,
-+      0x0029, 0x6847, 0x0000, 0x694c, 0xc1c5, 0x694e, 0x080c, 0x5823,
-+      0x080c, 0xae61, 0x00de, 0x080c, 0x95fc, 0x080c, 0x7ead, 0x0005,
-       0xa186, 0x0014, 0x1120, 0x6004, 0xa082, 0x0040, 0x0428, 0xa186,
-       0x0046, 0x0138, 0xa186, 0x0045, 0x0120, 0xa186, 0x0047, 0x190c,
-       0x1519, 0x2001, 0x0109, 0x2004, 0xd084, 0x0198, 0x0126, 0x2091,
--      0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x7873, 0x002e, 0x001e,
-+      0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x788c, 0x002e, 0x001e,
-       0x000e, 0x012e, 0xe000, 0x6000, 0xa086, 0x0002, 0x1110, 0x0804,
--      0xa22a, 0x080c, 0x9623, 0x0005, 0x0002, 0xa1ca, 0xa1c8, 0xa1c8,
--      0xa1c8, 0xa1c8, 0xa1c8, 0xa1c8, 0xa1c8, 0xa1c8, 0xa1c8, 0xa1c8,
--      0xa1e5, 0xa1e5, 0xa1e5, 0xa1e5, 0xa1c8, 0xa1e5, 0xa1c8, 0xa1e5,
--      0x080c, 0x1519, 0x080c, 0x7db1, 0x00d6, 0x6110, 0x2168, 0x080c,
--      0xac8a, 0x0168, 0x6837, 0x0103, 0x684b, 0x0006, 0x6847, 0x0000,
--      0x6850, 0xc0ec, 0x6852, 0x080c, 0x580a, 0x080c, 0xae41, 0x00de,
--      0x080c, 0x95dc, 0x080c, 0x7e94, 0x0005, 0x080c, 0x7db1, 0x080c,
--      0x95dc, 0x080c, 0x7e94, 0x0005, 0x0002, 0xa202, 0xa200, 0xa200,
--      0xa200, 0xa200, 0xa200, 0xa200, 0xa200, 0xa200, 0xa200, 0xa200,
--      0xa214, 0xa214, 0xa214, 0xa214, 0xa200, 0xa223, 0xa200, 0xa214,
--      0x080c, 0x1519, 0x080c, 0x7db1, 0x2001, 0xc8ff, 0x2004, 0x603e,
--      0x6003, 0x0002, 0x080c, 0x7e94, 0x6010, 0xa088, 0x0013, 0x2104,
--      0xa085, 0x0400, 0x200a, 0x0005, 0x080c, 0x7db1, 0x2001, 0xc8fd,
-+      0xa24a, 0x080c, 0x9643, 0x0005, 0x0002, 0xa1ea, 0xa1e8, 0xa1e8,
-+      0xa1e8, 0xa1e8, 0xa1e8, 0xa1e8, 0xa1e8, 0xa1e8, 0xa1e8, 0xa1e8,
-+      0xa205, 0xa205, 0xa205, 0xa205, 0xa1e8, 0xa205, 0xa1e8, 0xa205,
-+      0x080c, 0x1519, 0x080c, 0x7dca, 0x00d6, 0x6110, 0x2168, 0x080c,
-+      0xacaa, 0x0168, 0x6837, 0x0103, 0x684b, 0x0006, 0x6847, 0x0000,
-+      0x6850, 0xc0ec, 0x6852, 0x080c, 0x5823, 0x080c, 0xae61, 0x00de,
-+      0x080c, 0x95fc, 0x080c, 0x7ead, 0x0005, 0x080c, 0x7dca, 0x080c,
-+      0x95fc, 0x080c, 0x7ead, 0x0005, 0x0002, 0xa222, 0xa220, 0xa220,
-+      0xa220, 0xa220, 0xa220, 0xa220, 0xa220, 0xa220, 0xa220, 0xa220,
-+      0xa234, 0xa234, 0xa234, 0xa234, 0xa220, 0xa243, 0xa220, 0xa234,
-+      0x080c, 0x1519, 0x080c, 0x7dca, 0x2001, 0xc8ff, 0x2004, 0x603e,
-+      0x6003, 0x0002, 0x080c, 0x7ead, 0x6010, 0xa088, 0x0013, 0x2104,
-+      0xa085, 0x0400, 0x200a, 0x0005, 0x080c, 0x7dca, 0x2001, 0xc8fd,
-       0x2004, 0x6016, 0x2001, 0xc8ff, 0x2004, 0x603e, 0x6003, 0x000f,
--      0x080c, 0x7e94, 0x0005, 0x080c, 0x7db1, 0x080c, 0x95dc, 0x080c,
--      0x7e94, 0x0005, 0xa182, 0x0040, 0x0002, 0xa240, 0xa240, 0xa240,
--      0xa240, 0xa240, 0xa242, 0xa327, 0xa356, 0xa240, 0xa240, 0xa240,
--      0xa240, 0xa240, 0xa240, 0xa240, 0xa240, 0xa240, 0xa240, 0xa240,
-+      0x080c, 0x7ead, 0x0005, 0x080c, 0x7dca, 0x080c, 0x95fc, 0x080c,
-+      0x7ead, 0x0005, 0xa182, 0x0040, 0x0002, 0xa260, 0xa260, 0xa260,
-+      0xa260, 0xa260, 0xa262, 0xa347, 0xa376, 0xa260, 0xa260, 0xa260,
-+      0xa260, 0xa260, 0xa260, 0xa260, 0xa260, 0xa260, 0xa260, 0xa260,
-       0x080c, 0x1519, 0x00e6, 0x00d6, 0x603f, 0x0000, 0x2071, 0xcc80,
-       0x7124, 0x610a, 0x2071, 0xcc8c, 0x6110, 0x2168, 0x7614, 0xa6b4,
--      0x0fff, 0x86ff, 0x0904, 0xa2f0, 0xa68c, 0x0c00, 0x0518, 0x00f6,
--      0x2c78, 0x080c, 0x56c3, 0x00fe, 0x01c8, 0x684c, 0xd0ac, 0x01b0,
-+      0x0fff, 0x86ff, 0x0904, 0xa310, 0xa68c, 0x0c00, 0x0518, 0x00f6,
-+      0x2c78, 0x080c, 0x56dc, 0x00fe, 0x01c8, 0x684c, 0xd0ac, 0x01b0,
-       0x6020, 0xd0dc, 0x1198, 0x6850, 0xd0bc, 0x1180, 0x7318, 0x6814,
--      0xa306, 0x1904, 0xa303, 0x731c, 0x6810, 0xa31e, 0x0138, 0xd6d4,
--      0x0904, 0xa303, 0x6b14, 0xa305, 0x1904, 0xa303, 0x7318, 0x6b62,
-+      0xa306, 0x1904, 0xa323, 0x731c, 0x6810, 0xa31e, 0x0138, 0xd6d4,
-+      0x0904, 0xa323, 0x6b14, 0xa305, 0x1904, 0xa323, 0x7318, 0x6b62,
-       0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0518, 0xa186,
--      0x0028, 0x1128, 0x080c, 0xae66, 0x684b, 0x001c, 0x00e8, 0xd6dc,
-+      0x0028, 0x1128, 0x080c, 0xae86, 0x684b, 0x001c, 0x00e8, 0xd6dc,
-       0x01a0, 0x684b, 0x0015, 0x684c, 0xd0ac, 0x0170, 0x6914, 0x6a10,
-       0x2100, 0xa205, 0x0148, 0x7018, 0xa106, 0x1118, 0x701c, 0xa206,
-       0x0118, 0x6962, 0x6a5e, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0x684b,
-       0x0007, 0x0010, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0xa01e,
-       0xd6c4, 0x01f0, 0xa686, 0x0100, 0x1140, 0x2001, 0xcc99, 0x2004,
--      0xa005, 0x1118, 0xc6c4, 0x0804, 0xa251, 0x7328, 0x732c, 0x6b56,
-+      0xa005, 0x1118, 0xc6c4, 0x0804, 0xa271, 0x7328, 0x732c, 0x6b56,
-       0x83ff, 0x0170, 0xa38a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036,
--      0x2308, 0x2019, 0xcc98, 0xad90, 0x0019, 0x080c, 0xa93d, 0x003e,
--      0xd6cc, 0x0904, 0xa316, 0x7124, 0x695a, 0x81ff, 0x0904, 0xa316,
-+      0x2308, 0x2019, 0xcc98, 0xad90, 0x0019, 0x080c, 0xa95d, 0x003e,
-+      0xd6cc, 0x0904, 0xa336, 0x7124, 0x695a, 0x81ff, 0x0904, 0xa336,
-       0xa192, 0x0021, 0x1260, 0x2071, 0xcc98, 0x831c, 0x2300, 0xae18,
--      0xad90, 0x001d, 0x080c, 0xa93d, 0x080c, 0xb167, 0x04b8, 0x6838,
-+      0xad90, 0x001d, 0x080c, 0xa95d, 0x080c, 0xb187, 0x04b8, 0x6838,
-       0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c68, 0x00f6, 0x2d78,
--      0x080c, 0xa8e2, 0x00fe, 0x080c, 0xb167, 0x080c, 0xa92d, 0x0440,
--      0x00f6, 0x2c78, 0x080c, 0x56c3, 0x00fe, 0x0190, 0x684c, 0xd0ac,
-+      0x080c, 0xa902, 0x00fe, 0x080c, 0xb187, 0x080c, 0xa94d, 0x0440,
-+      0x00f6, 0x2c78, 0x080c, 0x56dc, 0x00fe, 0x0190, 0x684c, 0xd0ac,
-       0x0178, 0x6020, 0xd0dc, 0x1160, 0x6850, 0xd0bc, 0x1148, 0x6810,
--      0x6914, 0xa105, 0x0128, 0x080c, 0xaf65, 0x00de, 0x00ee, 0x00f0,
-+      0x6914, 0xa105, 0x0128, 0x080c, 0xaf85, 0x00de, 0x00ee, 0x00f0,
-       0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0130,
--      0x6810, 0x6914, 0xa115, 0x0110, 0x080c, 0xa4b3, 0x080c, 0x580a,
-+      0x6810, 0x6914, 0xa115, 0x0110, 0x080c, 0xa4d3, 0x080c, 0x5823,
-       0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x080c,
--      0xaf33, 0x00de, 0x00ee, 0x1110, 0x080c, 0x95dc, 0x0005, 0x00f6,
-+      0xaf53, 0x00de, 0x00ee, 0x1110, 0x080c, 0x95fc, 0x0005, 0x00f6,
-       0x6003, 0x0003, 0x2079, 0xcc8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
-       0x6010, 0x2078, 0x784c, 0xd0ac, 0x0138, 0x6003, 0x0002, 0x00fe,
-       0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0x797c, 0xa10a, 0x2300,
-       0x7a80, 0xa213, 0x2600, 0xa102, 0x2500, 0xa203, 0x0e90, 0x7c12,
-       0x7b16, 0x7e0a, 0x7d0e, 0x00fe, 0x603f, 0x0000, 0x2c10, 0x080c,
--      0x2068, 0x080c, 0x79fc, 0x080c, 0x7f6e, 0x0005, 0x2001, 0xc8ff,
-+      0x2068, 0x080c, 0x7a15, 0x080c, 0x7f87, 0x0005, 0x2001, 0xc8ff,
-       0x2004, 0x603e, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18,
-       0x3e20, 0x2c10, 0x080c, 0x1870, 0x0005, 0xa182, 0x0040, 0x0002,
--      0xa37b, 0xa37b, 0xa37b, 0xa37b, 0xa37b, 0xa37d, 0xa410, 0xa37b,
--      0xa37b, 0xa426, 0xa48a, 0xa37b, 0xa37b, 0xa37b, 0xa37b, 0xa499,
--      0xa37b, 0xa37b, 0xa37b, 0x080c, 0x1519, 0x0076, 0x00f6, 0x00e6,
-+      0xa39b, 0xa39b, 0xa39b, 0xa39b, 0xa39b, 0xa39d, 0xa430, 0xa39b,
-+      0xa39b, 0xa446, 0xa4aa, 0xa39b, 0xa39b, 0xa39b, 0xa39b, 0xa4b9,
-+      0xa39b, 0xa39b, 0xa39b, 0x080c, 0x1519, 0x0076, 0x00f6, 0x00e6,
-       0x00d6, 0x2071, 0xcc8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff,
-       0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x82ff,
--      0x0110, 0x8211, 0x6a3e, 0x86ff, 0x0904, 0xa40b, 0xa694, 0xff00,
-+      0x0110, 0x8211, 0x6a3e, 0x86ff, 0x0904, 0xa42b, 0xa694, 0xff00,
-       0xa284, 0x0c00, 0x0120, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284,
--      0x0300, 0x0904, 0xa40b, 0x080c, 0x1602, 0x090c, 0x1519, 0x2d00,
-+      0x0300, 0x0904, 0xa42b, 0x080c, 0x1602, 0x090c, 0x1519, 0x2d00,
-       0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a,
-       0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00, 0x0120,
-       0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002,
-@@ -4790,43 +4795,43 @@ unsigned short risc_code01[] = { 
-       0x0010, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856,
-       0xa01e, 0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56, 0x83ff, 0x0170,
-       0xa38a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019,
--      0xcc98, 0xad90, 0x0019, 0x080c, 0xa93d, 0x003e, 0xd6cc, 0x01d8,
-+      0xcc98, 0xad90, 0x0019, 0x080c, 0xa95d, 0x003e, 0xd6cc, 0x01d8,
-       0x7124, 0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021, 0x1250, 0x2071,
--      0xcc98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0xa93d,
-+      0xcc98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0xa95d,
-       0x0050, 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c78,
--      0x2d78, 0x080c, 0xa8e2, 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005,
-+      0x2d78, 0x080c, 0xa902, 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005,
-       0x00f6, 0x6003, 0x0003, 0x2079, 0xcc8c, 0x7c04, 0x7b00, 0x7e0c,
-       0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x00fe,
--      0x2c10, 0x080c, 0x2068, 0x080c, 0x8bdb, 0x0005, 0x00d6, 0x00f6,
--      0x2c78, 0x080c, 0x56c3, 0x00fe, 0x0120, 0x2001, 0xc8ff, 0x2004,
--      0x603e, 0x6003, 0x0002, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6110,
--      0x2168, 0x694c, 0xd1e4, 0x0904, 0xa488, 0xd1cc, 0x0540, 0x6948,
-+      0x2c10, 0x080c, 0x2068, 0x080c, 0x8bf4, 0x0005, 0x00d6, 0x00f6,
-+      0x2c78, 0x080c, 0x56dc, 0x00fe, 0x0120, 0x2001, 0xc8ff, 0x2004,
-+      0x603e, 0x6003, 0x0002, 0x080c, 0x7e60, 0x080c, 0x7f87, 0x6110,
-+      0x2168, 0x694c, 0xd1e4, 0x0904, 0xa4a8, 0xd1cc, 0x0540, 0x6948,
-       0x6838, 0xd0fc, 0x01e8, 0x0016, 0x684c, 0x0006, 0x6850, 0x0006,
-       0xad90, 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x0156, 0x21a8,
--      0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0xa450, 0x015e, 0x000e,
-+      0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0xa470, 0x015e, 0x000e,
-       0x6852, 0x000e, 0x684e, 0x001e, 0x2168, 0x080c, 0x1629, 0x0418,
--      0x0016, 0x080c, 0x1629, 0x00de, 0x080c, 0xa92d, 0x00e0, 0x6837,
-+      0x0016, 0x080c, 0x1629, 0x00de, 0x080c, 0xa94d, 0x00e0, 0x6837,
-       0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0180, 0xa086,
-       0x0028, 0x1118, 0x684b, 0x001c, 0x0060, 0xd1dc, 0x0118, 0x684b,
-       0x0015, 0x0038, 0xd1d4, 0x0118, 0x684b, 0x0007, 0x0010, 0x684b,
--      0x0000, 0x080c, 0x580a, 0x080c, 0xaf33, 0x1110, 0x080c, 0x95dc,
--      0x00de, 0x0005, 0x2019, 0x0001, 0x080c, 0x8e79, 0x6003, 0x0002,
--      0x2001, 0xc8ff, 0x2004, 0x603e, 0x080c, 0x7e47, 0x080c, 0x7f6e,
--      0x0005, 0x080c, 0x7e47, 0x080c, 0x2e46, 0x00d6, 0x6110, 0x2168,
--      0x080c, 0xac8a, 0x0150, 0x6837, 0x0103, 0x684b, 0x0029, 0x6847,
--      0x0000, 0x080c, 0x580a, 0x080c, 0xae41, 0x00de, 0x080c, 0x95dc,
--      0x080c, 0x7f6e, 0x0005, 0x684b, 0x0015, 0xd1fc, 0x0138, 0x684b,
-+      0x0000, 0x080c, 0x5823, 0x080c, 0xaf53, 0x1110, 0x080c, 0x95fc,
-+      0x00de, 0x0005, 0x2019, 0x0001, 0x080c, 0x8e92, 0x6003, 0x0002,
-+      0x2001, 0xc8ff, 0x2004, 0x603e, 0x080c, 0x7e60, 0x080c, 0x7f87,
-+      0x0005, 0x080c, 0x7e60, 0x080c, 0x2e46, 0x00d6, 0x6110, 0x2168,
-+      0x080c, 0xacaa, 0x0150, 0x6837, 0x0103, 0x684b, 0x0029, 0x6847,
-+      0x0000, 0x080c, 0x5823, 0x080c, 0xae61, 0x00de, 0x080c, 0x95fc,
-+      0x080c, 0x7f87, 0x0005, 0x684b, 0x0015, 0xd1fc, 0x0138, 0x684b,
-       0x0007, 0x8002, 0x8000, 0x810a, 0xa189, 0x0000, 0x6962, 0x685e,
--      0x0005, 0xa182, 0x0040, 0x0002, 0xa4d7, 0xa4d7, 0xa4d7, 0xa4d7,
--      0xa4d7, 0xa4d9, 0xa4d7, 0xa594, 0xa5a0, 0xa4d7, 0xa4d7, 0xa4d7,
--      0xa4d7, 0xa4d7, 0xa4d7, 0xa4d7, 0xa4d7, 0xa4d7, 0xa4d7, 0x080c,
-+      0x0005, 0xa182, 0x0040, 0x0002, 0xa4f7, 0xa4f7, 0xa4f7, 0xa4f7,
-+      0xa4f7, 0xa4f9, 0xa4f7, 0xa5b4, 0xa5c0, 0xa4f7, 0xa4f7, 0xa4f7,
-+      0xa4f7, 0xa4f7, 0xa4f7, 0xa4f7, 0xa4f7, 0xa4f7, 0xa4f7, 0x080c,
-       0x1519, 0x0076, 0x00f6, 0x00e6, 0x00d6, 0x2071, 0xcc8c, 0x6110,
--      0x2178, 0x7614, 0xa6b4, 0x0fff, 0x00f6, 0x2c78, 0x080c, 0x56c3,
-+      0x2178, 0x7614, 0xa6b4, 0x0fff, 0x00f6, 0x2c78, 0x080c, 0x56dc,
-       0x00fe, 0x0150, 0xa684, 0x00ff, 0x1138, 0x6020, 0xd0f4, 0x0120,
--      0x080c, 0xaf65, 0x0804, 0xa58f, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e,
-+      0x080c, 0xaf85, 0x0804, 0xa5af, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e,
-       0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x86ff,
--      0x0904, 0xa585, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0120, 0x7018,
--      0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0904, 0xa583, 0xa686,
-+      0x0904, 0xa5a5, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0120, 0x7018,
-+      0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0904, 0xa5a3, 0xa686,
-       0x0100, 0x1140, 0x2001, 0xcc99, 0x2004, 0xa005, 0x1118, 0xc6c4,
-       0x7e46, 0x0c28, 0x080c, 0x1602, 0x090c, 0x1519, 0x2d00, 0x784a,
-       0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a,
-@@ -4837,314 +4842,314 @@ unsigned short risc_code01[] = { 
-       0x0010, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856,
-       0xa01e, 0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56, 0x83ff, 0x0170,
-       0xa38a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019,
--      0xcc98, 0xad90, 0x0019, 0x080c, 0xa93d, 0x003e, 0xd6cc, 0x01d8,
-+      0xcc98, 0xad90, 0x0019, 0x080c, 0xa95d, 0x003e, 0xd6cc, 0x01d8,
-       0x7124, 0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021, 0x1250, 0x2071,
--      0xcc98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0xa93d,
-+      0xcc98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0xa95d,
-       0x0050, 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c78,
--      0x2d78, 0x080c, 0xa8e2, 0xd6dc, 0x1110, 0xa006, 0x0030, 0x2001,
-+      0x2d78, 0x080c, 0xa902, 0xd6dc, 0x1110, 0xa006, 0x0030, 0x2001,
-       0x0001, 0x2071, 0xcc8c, 0x7218, 0x731c, 0x080c, 0x18b8, 0x00de,
-       0x00ee, 0x00fe, 0x007e, 0x0005, 0x2001, 0xc8ff, 0x2004, 0x603e,
-       0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1870, 0x0005,
-       0x2001, 0xc8ff, 0x2004, 0x603e, 0x00d6, 0x6003, 0x0002, 0x6110,
--      0x2168, 0x694c, 0xd1e4, 0x0904, 0xa6ab, 0x603f, 0x0000, 0x00f6,
--      0x2c78, 0x080c, 0x56c3, 0x00fe, 0x0560, 0x6814, 0x6910, 0xa115,
-+      0x2168, 0x694c, 0xd1e4, 0x0904, 0xa6cb, 0x603f, 0x0000, 0x00f6,
-+      0x2c78, 0x080c, 0x56dc, 0x00fe, 0x0560, 0x6814, 0x6910, 0xa115,
-       0x0540, 0x6a60, 0xa206, 0x1118, 0x685c, 0xa106, 0x0510, 0x684c,
-       0xc0e4, 0x684e, 0x6847, 0x0000, 0x6863, 0x0000, 0x685f, 0x0000,
-       0x6020, 0xd0f4, 0x1158, 0x697c, 0x6810, 0xa102, 0x603a, 0x6980,
-       0x6814, 0xa103, 0x6036, 0x6020, 0xc0f5, 0x6022, 0x00d6, 0x6018,
--      0x2068, 0x683c, 0x8000, 0x683e, 0x00de, 0x080c, 0xaf65, 0x0804,
--      0xa6ab, 0x694c, 0xd1cc, 0x0904, 0xa67b, 0x6948, 0x6838, 0xd0fc,
--      0x0904, 0xa63e, 0x0016, 0x684c, 0x0006, 0x6850, 0x0006, 0x00f6,
-+      0x2068, 0x683c, 0x8000, 0x683e, 0x00de, 0x080c, 0xaf85, 0x0804,
-+      0xa6cb, 0x694c, 0xd1cc, 0x0904, 0xa69b, 0x6948, 0x6838, 0xd0fc,
-+      0x0904, 0xa65e, 0x0016, 0x684c, 0x0006, 0x6850, 0x0006, 0x00f6,
-       0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01e0, 0xa086,
-       0x0028, 0x1128, 0x684b, 0x001c, 0x784b, 0x001c, 0x00e8, 0xd1dc,
--      0x0158, 0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xb0ef, 0x0118,
-+      0x0158, 0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xb10f, 0x0118,
-       0x7944, 0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128, 0x684b, 0x0007,
-       0x784b, 0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914,
--      0xa115, 0x0110, 0x080c, 0xa4b3, 0x6848, 0x784a, 0x6860, 0x7862,
-+      0xa115, 0x0110, 0x080c, 0xa4d3, 0x6848, 0x784a, 0x6860, 0x7862,
-       0x685c, 0x785e, 0xad90, 0x000d, 0xaf98, 0x000d, 0x2009, 0x0020,
--      0x0156, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0xa62a,
--      0x015e, 0x00fe, 0x000e, 0x6852, 0x000e, 0x684e, 0x080c, 0xb167,
--      0x001e, 0x2168, 0x080c, 0x1629, 0x0804, 0xa6a6, 0x0016, 0x00f6,
-+      0x0156, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0xa64a,
-+      0x015e, 0x00fe, 0x000e, 0x6852, 0x000e, 0x684e, 0x080c, 0xb187,
-+      0x001e, 0x2168, 0x080c, 0x1629, 0x0804, 0xa6c6, 0x0016, 0x00f6,
-       0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01e0, 0xa086,
-       0x0028, 0x1128, 0x684b, 0x001c, 0x784b, 0x001c, 0x00e8, 0xd1dc,
--      0x0158, 0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xb0ef, 0x0118,
-+      0x0158, 0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xb10f, 0x0118,
-       0x7944, 0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128, 0x684b, 0x0007,
-       0x784b, 0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914,
--      0xa115, 0x0110, 0x080c, 0xa4b3, 0x6860, 0x7862, 0x685c, 0x785e,
--      0x684c, 0x784e, 0x00fe, 0x080c, 0x1629, 0x00de, 0x080c, 0xb167,
--      0x080c, 0xa92d, 0x0458, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff,
-+      0xa115, 0x0110, 0x080c, 0xa4d3, 0x6860, 0x7862, 0x685c, 0x785e,
-+      0x684c, 0x784e, 0x00fe, 0x080c, 0x1629, 0x00de, 0x080c, 0xb187,
-+      0x080c, 0xa94d, 0x0458, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff,
-       0xa0b6, 0x0002, 0x01b0, 0xa086, 0x0028, 0x1118, 0x684b, 0x001c,
--      0x00d8, 0xd1dc, 0x0148, 0x684b, 0x0015, 0x080c, 0xb0ef, 0x0118,
-+      0x00d8, 0xd1dc, 0x0148, 0x684b, 0x0015, 0x080c, 0xb10f, 0x0118,
-       0x6944, 0xc1dc, 0x6946, 0x0080, 0xd1d4, 0x0118, 0x684b, 0x0007,
-       0x0058, 0x684b, 0x0000, 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914,
--      0xa115, 0x0110, 0x080c, 0xa4b3, 0x080c, 0x580a, 0x080c, 0xaf33,
--      0x1110, 0x080c, 0x95dc, 0x00de, 0x0005, 0x080c, 0x7db1, 0x0010,
--      0x080c, 0x7e47, 0x080c, 0xac8a, 0x01c0, 0x00d6, 0x6110, 0x2168,
-+      0xa115, 0x0110, 0x080c, 0xa4d3, 0x080c, 0x5823, 0x080c, 0xaf53,
-+      0x1110, 0x080c, 0x95fc, 0x00de, 0x0005, 0x080c, 0x7dca, 0x0010,
-+      0x080c, 0x7e60, 0x080c, 0xacaa, 0x01c0, 0x00d6, 0x6110, 0x2168,
-       0x6837, 0x0103, 0x2009, 0xc60c, 0x210c, 0xd18c, 0x11c0, 0xd184,
--      0x1198, 0x6108, 0x694a, 0xa18e, 0x0029, 0x1110, 0x080c, 0xc4ca,
--      0x6847, 0x0000, 0x080c, 0x580a, 0x00de, 0x080c, 0x95dc, 0x080c,
--      0x7e94, 0x080c, 0x7f6e, 0x0005, 0x684b, 0x0004, 0x0c88, 0x684b,
--      0x0004, 0x0c70, 0xa182, 0x0040, 0x0002, 0xa6f0, 0xa6f0, 0xa6f0,
--      0xa6f0, 0xa6f0, 0xa6f2, 0xa6f0, 0xa6f5, 0xa6f0, 0xa6f0, 0xa6f0,
--      0xa6f0, 0xa6f0, 0xa6f0, 0xa6f0, 0xa6f0, 0xa6f0, 0xa6f0, 0xa6f0,
--      0x080c, 0x1519, 0x080c, 0x95dc, 0x0005, 0x0006, 0x0026, 0xa016,
-+      0x1198, 0x6108, 0x694a, 0xa18e, 0x0029, 0x1110, 0x080c, 0xc4f0,
-+      0x6847, 0x0000, 0x080c, 0x5823, 0x00de, 0x080c, 0x95fc, 0x080c,
-+      0x7ead, 0x080c, 0x7f87, 0x0005, 0x684b, 0x0004, 0x0c88, 0x684b,
-+      0x0004, 0x0c70, 0xa182, 0x0040, 0x0002, 0xa710, 0xa710, 0xa710,
-+      0xa710, 0xa710, 0xa712, 0xa710, 0xa715, 0xa710, 0xa710, 0xa710,
-+      0xa710, 0xa710, 0xa710, 0xa710, 0xa710, 0xa710, 0xa710, 0xa710,
-+      0x080c, 0x1519, 0x080c, 0x95fc, 0x0005, 0x0006, 0x0026, 0xa016,
-       0x080c, 0x1870, 0x002e, 0x000e, 0x0005, 0xa182, 0x0085, 0x0002,
--      0xa709, 0xa707, 0xa707, 0xa715, 0xa707, 0xa707, 0xa707, 0x080c,
--      0x1519, 0x6003, 0x0001, 0x6106, 0x080c, 0x7999, 0x0126, 0x2091,
--      0x8000, 0x080c, 0x7e94, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6,
--      0x00e6, 0x2071, 0xcc80, 0x7224, 0x6212, 0x7220, 0x080c, 0xac7a,
-+      0xa729, 0xa727, 0xa727, 0xa735, 0xa727, 0xa727, 0xa727, 0x080c,
-+      0x1519, 0x6003, 0x0001, 0x6106, 0x080c, 0x79b2, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x7ead, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6,
-+      0x00e6, 0x2071, 0xcc80, 0x7224, 0x6212, 0x7220, 0x080c, 0xac9a,
-       0x01a0, 0x2268, 0x6800, 0xa086, 0x0000, 0x0178, 0x6018, 0x6d18,
--      0xa52e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0xa94d, 0x00ce, 0x0128,
-+      0xa52e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0xa96d, 0x00ce, 0x0128,
-       0x6803, 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003,
--      0x0001, 0x080c, 0x7999, 0x080c, 0x7e94, 0x00f6, 0x2278, 0x080c,
--      0x56c3, 0x00fe, 0x0150, 0x6820, 0xd0ec, 0x0138, 0x00c6, 0x2260,
--      0x603f, 0x0000, 0x080c, 0xaf65, 0x00ce, 0x00ee, 0x00de, 0x005e,
-+      0x0001, 0x080c, 0x79b2, 0x080c, 0x7ead, 0x00f6, 0x2278, 0x080c,
-+      0x56dc, 0x00fe, 0x0150, 0x6820, 0xd0ec, 0x0138, 0x00c6, 0x2260,
-+      0x603f, 0x0000, 0x080c, 0xaf85, 0x00ce, 0x00ee, 0x00de, 0x005e,
-       0x002e, 0x0005, 0xa186, 0x0013, 0x1160, 0x6004, 0xa08a, 0x0085,
-       0x0a0c, 0x1519, 0xa08a, 0x008c, 0x1a0c, 0x1519, 0xa082, 0x0085,
-       0x0072, 0xa186, 0x0027, 0x0120, 0xa186, 0x0014, 0x190c, 0x1519,
--      0x080c, 0x7db1, 0x080c, 0xae4d, 0x080c, 0x7e94, 0x0005, 0xa776,
--      0xa778, 0xa778, 0xa776, 0xa776, 0xa776, 0xa776, 0x080c, 0x1519,
--      0x080c, 0x7db1, 0x080c, 0xae4d, 0x080c, 0x7e94, 0x0005, 0xa186,
-+      0x080c, 0x7dca, 0x080c, 0xae6d, 0x080c, 0x7ead, 0x0005, 0xa796,
-+      0xa798, 0xa798, 0xa796, 0xa796, 0xa796, 0xa796, 0x080c, 0x1519,
-+      0x080c, 0x7dca, 0x080c, 0xae6d, 0x080c, 0x7ead, 0x0005, 0xa186,
-       0x0013, 0x1128, 0x6004, 0xa082, 0x0085, 0x2008, 0x04a8, 0xa186,
--      0x0027, 0x11e8, 0x080c, 0x7db1, 0x080c, 0x2e46, 0x00d6, 0x6010,
--      0x2068, 0x080c, 0xac8a, 0x0150, 0x6837, 0x0103, 0x6847, 0x0000,
--      0x684b, 0x0029, 0x080c, 0x580a, 0x080c, 0xae41, 0x00de, 0x080c,
--      0x95dc, 0x080c, 0x7e94, 0x0005, 0x080c, 0x9623, 0x0ce0, 0xa186,
--      0x0014, 0x1dd0, 0x080c, 0x7db1, 0x00d6, 0x6010, 0x2068, 0x080c,
--      0xac8a, 0x0d60, 0x6837, 0x0103, 0x6847, 0x0000, 0x684b, 0x0006,
--      0x6850, 0xc0ec, 0x6852, 0x08f0, 0x0002, 0xa7c6, 0xa7c4, 0xa7c4,
--      0xa7c4, 0xa7c4, 0xa7c4, 0xa7de, 0x080c, 0x1519, 0x080c, 0x7db1,
-+      0x0027, 0x11e8, 0x080c, 0x7dca, 0x080c, 0x2e46, 0x00d6, 0x6010,
-+      0x2068, 0x080c, 0xacaa, 0x0150, 0x6837, 0x0103, 0x6847, 0x0000,
-+      0x684b, 0x0029, 0x080c, 0x5823, 0x080c, 0xae61, 0x00de, 0x080c,
-+      0x95fc, 0x080c, 0x7ead, 0x0005, 0x080c, 0x9643, 0x0ce0, 0xa186,
-+      0x0014, 0x1dd0, 0x080c, 0x7dca, 0x00d6, 0x6010, 0x2068, 0x080c,
-+      0xacaa, 0x0d60, 0x6837, 0x0103, 0x6847, 0x0000, 0x684b, 0x0006,
-+      0x6850, 0xc0ec, 0x6852, 0x08f0, 0x0002, 0xa7e6, 0xa7e4, 0xa7e4,
-+      0xa7e4, 0xa7e4, 0xa7e4, 0xa7fe, 0x080c, 0x1519, 0x080c, 0x7dca,
-       0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186,
-       0x0035, 0x1118, 0x2001, 0xc8fd, 0x0010, 0x2001, 0xc8fe, 0x2004,
--      0x6016, 0x6003, 0x000c, 0x080c, 0x7e94, 0x0005, 0x080c, 0x7db1,
-+      0x6016, 0x6003, 0x000c, 0x080c, 0x7ead, 0x0005, 0x080c, 0x7dca,
-       0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186,
-       0x0035, 0x1118, 0x2001, 0xc8fd, 0x0010, 0x2001, 0xc8fe, 0x2004,
--      0x6016, 0x6003, 0x000e, 0x080c, 0x7e94, 0x0005, 0xa182, 0x008c,
--      0x1220, 0xa182, 0x0085, 0x0208, 0x001a, 0x080c, 0x9623, 0x0005,
--      0xa807, 0xa807, 0xa807, 0xa807, 0xa809, 0xa862, 0xa807, 0x080c,
--      0x1519, 0x00d6, 0x00f6, 0x2c78, 0x080c, 0x56c3, 0x00fe, 0x0168,
-+      0x6016, 0x6003, 0x000e, 0x080c, 0x7ead, 0x0005, 0xa182, 0x008c,
-+      0x1220, 0xa182, 0x0085, 0x0208, 0x001a, 0x080c, 0x9643, 0x0005,
-+      0xa827, 0xa827, 0xa827, 0xa827, 0xa829, 0xa882, 0xa827, 0x080c,
-+      0x1519, 0x00d6, 0x00f6, 0x2c78, 0x080c, 0x56dc, 0x00fe, 0x0168,
-       0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186,
--      0x0035, 0x1118, 0x00de, 0x0804, 0xa875, 0x080c, 0xac8a, 0x1118,
--      0x080c, 0xae41, 0x00f0, 0x6010, 0x2068, 0x684c, 0xd0e4, 0x1110,
--      0x080c, 0xae41, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128, 0x684b,
-+      0x0035, 0x1118, 0x00de, 0x0804, 0xa895, 0x080c, 0xacaa, 0x1118,
-+      0x080c, 0xae61, 0x00f0, 0x6010, 0x2068, 0x684c, 0xd0e4, 0x1110,
-+      0x080c, 0xae61, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128, 0x684b,
-       0x0006, 0xc0ec, 0x6852, 0x0048, 0xd0bc, 0x0118, 0x684b, 0x0002,
--      0x0020, 0x684b, 0x0005, 0x080c, 0xaf02, 0x6847, 0x0000, 0x080c,
--      0x580a, 0x2c68, 0x080c, 0x9586, 0x01c0, 0x6003, 0x0001, 0x6007,
-+      0x0020, 0x684b, 0x0005, 0x080c, 0xaf22, 0x6847, 0x0000, 0x080c,
-+      0x5823, 0x2c68, 0x080c, 0x95a6, 0x01c0, 0x6003, 0x0001, 0x6007,
-       0x001e, 0x600b, 0xffff, 0x2009, 0xcc8e, 0x210c, 0x6136, 0x2009,
--      0xcc8f, 0x210c, 0x613a, 0x6918, 0x611a, 0x080c, 0xb057, 0x6950,
--      0x6152, 0x601f, 0x0001, 0x080c, 0x7999, 0x2d60, 0x080c, 0x95dc,
--      0x00de, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x56c3, 0x00fe, 0x0598,
-+      0xcc8f, 0x210c, 0x613a, 0x6918, 0x611a, 0x080c, 0xb077, 0x6950,
-+      0x6152, 0x601f, 0x0001, 0x080c, 0x79b2, 0x2d60, 0x080c, 0x95fc,
-+      0x00de, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x56dc, 0x00fe, 0x0598,
-       0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0035, 0x0130, 0xa186,
-       0x001e, 0x0118, 0xa186, 0x0039, 0x1530, 0x00d6, 0x2c68, 0x080c,
--      0xb13a, 0x1904, 0xa8ba, 0x080c, 0x9586, 0x01d8, 0x6106, 0x6003,
-+      0xb15a, 0x1904, 0xa8da, 0x080c, 0x95a6, 0x01d8, 0x6106, 0x6003,
-       0x0001, 0x601f, 0x0001, 0x6918, 0x611a, 0x6928, 0x612a, 0x692c,
-       0x612e, 0x6930, 0xa18c, 0x00ff, 0x6132, 0x6934, 0x6136, 0x6938,
--      0x613a, 0x6950, 0x6152, 0x080c, 0xb057, 0x080c, 0x7999, 0x080c,
--      0x7e94, 0x2d60, 0x00f8, 0x00d6, 0x6010, 0x2068, 0x080c, 0xac8a,
-+      0x613a, 0x6950, 0x6152, 0x080c, 0xb077, 0x080c, 0x79b2, 0x080c,
-+      0x7ead, 0x2d60, 0x00f8, 0x00d6, 0x6010, 0x2068, 0x080c, 0xacaa,
-       0x01c8, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128, 0xc0ec, 0x6852,
-       0x684b, 0x0006, 0x0048, 0xd0bc, 0x0118, 0x684b, 0x0002, 0x0020,
--      0x684b, 0x0005, 0x080c, 0xaf02, 0x6847, 0x0000, 0x080c, 0x580a,
--      0x080c, 0xae41, 0x00de, 0x080c, 0x95dc, 0x0005, 0x0016, 0x00d6,
--      0x6010, 0x2068, 0x080c, 0xac8a, 0x0140, 0x6837, 0x0103, 0x684b,
--      0x0028, 0x6847, 0x0000, 0x080c, 0x580a, 0x00de, 0x001e, 0xa186,
-+      0x684b, 0x0005, 0x080c, 0xaf22, 0x6847, 0x0000, 0x080c, 0x5823,
-+      0x080c, 0xae61, 0x00de, 0x080c, 0x95fc, 0x0005, 0x0016, 0x00d6,
-+      0x6010, 0x2068, 0x080c, 0xacaa, 0x0140, 0x6837, 0x0103, 0x684b,
-+      0x0028, 0x6847, 0x0000, 0x080c, 0x5823, 0x00de, 0x001e, 0xa186,
-       0x0013, 0x0148, 0xa186, 0x0014, 0x0130, 0xa186, 0x0027, 0x0118,
--      0x080c, 0x9623, 0x0030, 0x080c, 0x7db1, 0x080c, 0xae4d, 0x080c,
--      0x7e94, 0x0005, 0x0056, 0x0066, 0x00d6, 0x00f6, 0x2029, 0x0001,
-+      0x080c, 0x9643, 0x0030, 0x080c, 0x7dca, 0x080c, 0xae6d, 0x080c,
-+      0x7ead, 0x0005, 0x0056, 0x0066, 0x00d6, 0x00f6, 0x2029, 0x0001,
-       0xa182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x2069,
-       0xcc98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, 0xaf90, 0x001d,
--      0x080c, 0xa93d, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0110, 0x080c,
-+      0x080c, 0xa95d, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0110, 0x080c,
-       0x1629, 0x080c, 0x1602, 0x0500, 0x8528, 0x6837, 0x0110, 0x683b,
-       0x0000, 0x2d20, 0x7c06, 0xa68a, 0x003d, 0x1228, 0x2608, 0xad90,
-       0x000f, 0x0459, 0x0088, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78,
-       0xad90, 0x000f, 0x0411, 0x0c28, 0x00fe, 0x852f, 0xa5ad, 0x0003,
-       0x7d36, 0xa5ac, 0x0000, 0x0028, 0x00fe, 0x852f, 0xa5ad, 0x0003,
-       0x7d36, 0x00de, 0x006e, 0x005e, 0x0005, 0x00f6, 0x8dff, 0x0158,
--      0x6804, 0xa07d, 0x0130, 0x6807, 0x0000, 0x080c, 0x580a, 0x2f68,
--      0x0cb8, 0x080c, 0x580a, 0x00fe, 0x0005, 0x0156, 0xa184, 0x0001,
-+      0x6804, 0xa07d, 0x0130, 0x6807, 0x0000, 0x080c, 0x5823, 0x2f68,
-+      0x0cb8, 0x080c, 0x5823, 0x00fe, 0x0005, 0x0156, 0xa184, 0x0001,
-       0x0108, 0x8108, 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318,
--      0x8210, 0x1f04, 0xa944, 0x015e, 0x0005, 0x0066, 0x0126, 0x2091,
-+      0x8210, 0x1f04, 0xa964, 0x015e, 0x0005, 0x0066, 0x0126, 0x2091,
-       0x8000, 0x2031, 0x0001, 0x601c, 0xa084, 0x000f, 0x0083, 0x012e,
-       0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031, 0x0000,
--      0x601c, 0xa084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005, 0xa984,
--      0xa984, 0xa97f, 0xa9a6, 0xa972, 0xa97f, 0xa9a6, 0xa97f, 0xa972,
--      0x77f4, 0xa97f, 0x080c, 0x1519, 0x0036, 0x2019, 0x0010, 0x080c,
--      0xbd48, 0x601f, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0xa006,
-+      0x601c, 0xa084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005, 0xa9a4,
-+      0xa9a4, 0xa99f, 0xa9c6, 0xa992, 0xa99f, 0xa9c6, 0xa99f, 0xa992,
-+      0x780d, 0xa99f, 0x080c, 0x1519, 0x0036, 0x2019, 0x0010, 0x080c,
-+      0xbd6e, 0x601f, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0xa006,
-       0x0005, 0xa085, 0x0001, 0x0005, 0x00d6, 0x86ff, 0x11d8, 0x6010,
--      0x2068, 0x080c, 0xac8a, 0x01c0, 0x6834, 0xa086, 0x0139, 0x1128,
-+      0x2068, 0x080c, 0xacaa, 0x01c0, 0x6834, 0xa086, 0x0139, 0x1128,
-       0x684b, 0x0005, 0x6853, 0x0000, 0x0028, 0xa00e, 0x2001, 0x0005,
--      0x080c, 0x592e, 0x080c, 0xaf02, 0x080c, 0x580a, 0x080c, 0x95dc,
-+      0x080c, 0x5947, 0x080c, 0xaf22, 0x080c, 0x5823, 0x080c, 0x95fc,
-       0xa085, 0x0001, 0x00de, 0x0005, 0xa006, 0x0ce0, 0x6000, 0xa08a,
--      0x0010, 0x1a0c, 0x1519, 0x000b, 0x0005, 0xa9bd, 0xa9de, 0xa9bf,
--      0xa9fd, 0xa9db, 0xa9bd, 0xa97f, 0xa984, 0xa984, 0xa97f, 0xa97f,
--      0xa97f, 0xa97f, 0xa97f, 0xa97f, 0xa97f, 0x080c, 0x1519, 0x86ff,
-+      0x0010, 0x1a0c, 0x1519, 0x000b, 0x0005, 0xa9dd, 0xa9fe, 0xa9df,
-+      0xaa1d, 0xa9fb, 0xa9dd, 0xa99f, 0xa9a4, 0xa9a4, 0xa99f, 0xa99f,
-+      0xa99f, 0xa99f, 0xa99f, 0xa99f, 0xa99f, 0x080c, 0x1519, 0x86ff,
-       0x11b8, 0x601c, 0xa086, 0x0006, 0x0198, 0x00d6, 0x6010, 0x2068,
--      0x080c, 0xac8a, 0x0110, 0x080c, 0xaf02, 0x00de, 0x6007, 0x0085,
--      0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x7999, 0x080c, 0x7e94,
-+      0x080c, 0xacaa, 0x0110, 0x080c, 0xaf22, 0x00de, 0x6007, 0x0085,
-+      0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x79b2, 0x080c, 0x7ead,
-       0xa085, 0x0001, 0x0005, 0x080c, 0x1953, 0x0c08, 0x00e6, 0x2071,
--      0xc927, 0x7024, 0xac06, 0x1110, 0x080c, 0x8dee, 0x601c, 0xa084,
-+      0xc927, 0x7024, 0xac06, 0x1110, 0x080c, 0x8e07, 0x601c, 0xa084,
-       0x000f, 0xa086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049, 0x0001,
--      0x2c40, 0x080c, 0x8fc9, 0x009e, 0x008e, 0x0010, 0x080c, 0x8ced,
--      0x00ee, 0x1928, 0x080c, 0xa97f, 0x0005, 0x0036, 0x00e6, 0x2071,
--      0xc927, 0x703c, 0xac06, 0x1140, 0x2019, 0x0000, 0x080c, 0x8e79,
--      0x00ee, 0x003e, 0x0804, 0xa9bf, 0x080c, 0x90ef, 0x00ee, 0x003e,
--      0x1904, 0xa9bf, 0x080c, 0xa97f, 0x0005, 0x00c6, 0x601c, 0xa084,
--      0x000f, 0x0013, 0x00ce, 0x0005, 0xaa2e, 0xaa9b, 0xabe9, 0xaa39,
--      0xae4d, 0xaa2e, 0xbd3a, 0x95dc, 0xaa9b, 0x77c3, 0xac54, 0x080c,
--      0x1519, 0x080c, 0xae88, 0x1110, 0x080c, 0x9c02, 0x0005, 0x080c,
--      0x7db1, 0x080c, 0x7e94, 0x080c, 0x95dc, 0x0005, 0x6017, 0x0001,
--      0x0005, 0x080c, 0xac8a, 0x0120, 0x6010, 0xa080, 0x0019, 0x2c02,
--      0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1519, 0x000b, 0x0005, 0xaa57,
--      0xaa59, 0xaa79, 0xaa8b, 0xaa98, 0xaa57, 0xaa2e, 0xaa2e, 0xaa2e,
--      0xaa8b, 0xaa8b, 0xaa57, 0xaa57, 0xaa57, 0xaa57, 0xaa95, 0x080c,
-+      0x2c40, 0x080c, 0x8fe2, 0x009e, 0x008e, 0x0010, 0x080c, 0x8d06,
-+      0x00ee, 0x1928, 0x080c, 0xa99f, 0x0005, 0x0036, 0x00e6, 0x2071,
-+      0xc927, 0x703c, 0xac06, 0x1140, 0x2019, 0x0000, 0x080c, 0x8e92,
-+      0x00ee, 0x003e, 0x0804, 0xa9df, 0x080c, 0x910f, 0x00ee, 0x003e,
-+      0x1904, 0xa9df, 0x080c, 0xa99f, 0x0005, 0x00c6, 0x601c, 0xa084,
-+      0x000f, 0x0013, 0x00ce, 0x0005, 0xaa4e, 0xaabb, 0xac09, 0xaa59,
-+      0xae6d, 0xaa4e, 0xbd60, 0xb19e, 0xaabb, 0x77dc, 0xac74, 0x080c,
-+      0x1519, 0x080c, 0xaea8, 0x1110, 0x080c, 0x9c22, 0x0005, 0x080c,
-+      0x7dca, 0x080c, 0x7ead, 0x080c, 0x95fc, 0x0005, 0x6017, 0x0001,
-+      0x0005, 0x080c, 0xacaa, 0x0120, 0x6010, 0xa080, 0x0019, 0x2c02,
-+      0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1519, 0x000b, 0x0005, 0xaa77,
-+      0xaa79, 0xaa99, 0xaaab, 0xaab8, 0xaa77, 0xaa4e, 0xaa4e, 0xaa4e,
-+      0xaaab, 0xaaab, 0xaa77, 0xaa77, 0xaa77, 0xaa77, 0xaab5, 0x080c,
-       0x1519, 0x00e6, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052, 0x2071,
--      0xc927, 0x7024, 0xac06, 0x0190, 0x080c, 0x8ced, 0x6007, 0x0085,
-+      0xc927, 0x7024, 0xac06, 0x0190, 0x080c, 0x8d06, 0x6007, 0x0085,
-       0x6003, 0x000b, 0x601f, 0x0002, 0x2001, 0xc8fe, 0x2004, 0x6016,
--      0x080c, 0x7999, 0x080c, 0x7e94, 0x00ee, 0x0005, 0x6017, 0x0001,
-+      0x080c, 0x79b2, 0x080c, 0x7ead, 0x00ee, 0x0005, 0x6017, 0x0001,
-       0x0cd8, 0x00d6, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x00de,
--      0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x7999,
--      0x080c, 0x7e94, 0x0005, 0x00d6, 0x6017, 0x0001, 0x6010, 0x2068,
--      0x6850, 0xc0b5, 0x6852, 0x00de, 0x0005, 0x080c, 0x95dc, 0x0005,
-+      0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x79b2,
-+      0x080c, 0x7ead, 0x0005, 0x00d6, 0x6017, 0x0001, 0x6010, 0x2068,
-+      0x6850, 0xc0b5, 0x6852, 0x00de, 0x0005, 0x080c, 0x95fc, 0x0005,
-       0x080c, 0x1953, 0x08f0, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1519,
--      0x000b, 0x0005, 0xaab2, 0xaa36, 0xaab4, 0xaab2, 0xaab4, 0xaab4,
--      0xaa2f, 0xaab2, 0xaa29, 0xaa29, 0xaab2, 0xaab2, 0xaab2, 0xaab2,
--      0xaab2, 0xaab2, 0x080c, 0x1519, 0x00d6, 0x6018, 0x2068, 0x6804,
-+      0x000b, 0x0005, 0xaad2, 0xaa56, 0xaad4, 0xaad2, 0xaad4, 0xaad4,
-+      0xaa4f, 0xaad2, 0xaa49, 0xaa49, 0xaad2, 0xaad2, 0xaad2, 0xaad2,
-+      0xaad2, 0xaad2, 0x080c, 0x1519, 0x00d6, 0x6018, 0x2068, 0x6804,
-       0xa084, 0x00ff, 0x00de, 0xa08a, 0x000c, 0x1a0c, 0x1519, 0x000b,
--      0x0005, 0xaacd, 0xab8f, 0xaacf, 0xab0d, 0xaacf, 0xab0d, 0xaacf,
--      0xaadd, 0xaacd, 0xab0d, 0xaacd, 0xaaf9, 0x080c, 0x1519, 0x6004,
-+      0x0005, 0xaaed, 0xabaf, 0xaaef, 0xab2d, 0xaaef, 0xab2d, 0xaaef,
-+      0xaafd, 0xaaed, 0xab2d, 0xaaed, 0xab19, 0x080c, 0x1519, 0x6004,
-       0xa08e, 0x0016, 0x05a8, 0xa08e, 0x0004, 0x0590, 0xa08e, 0x0002,
--      0x0578, 0xa08e, 0x004b, 0x0904, 0xab8b, 0x6004, 0x080c, 0xae88,
--      0x0904, 0xaba8, 0xa08e, 0x0021, 0x0904, 0xabac, 0xa08e, 0x0022,
--      0x0904, 0xaba8, 0xa08e, 0x003d, 0x0904, 0xabac, 0xa08e, 0x0039,
--      0x0904, 0xabb0, 0xa08e, 0x0035, 0x0904, 0xabb0, 0xa08e, 0x001e,
-+      0x0578, 0xa08e, 0x004b, 0x0904, 0xabab, 0x6004, 0x080c, 0xaea8,
-+      0x0904, 0xabc8, 0xa08e, 0x0021, 0x0904, 0xabcc, 0xa08e, 0x0022,
-+      0x0904, 0xabc8, 0xa08e, 0x003d, 0x0904, 0xabcc, 0xa08e, 0x0039,
-+      0x0904, 0xabd0, 0xa08e, 0x0035, 0x0904, 0xabd0, 0xa08e, 0x001e,
-       0x0188, 0xa08e, 0x0001, 0x1150, 0x00d6, 0x6018, 0x2068, 0x6804,
-       0xa084, 0x00ff, 0x00de, 0xa086, 0x0006, 0x0110, 0x080c, 0x2e46,
--      0x080c, 0x9c02, 0x080c, 0xae4d, 0x0005, 0x00c6, 0x00d6, 0x6104,
--      0xa186, 0x0016, 0x0904, 0xab7c, 0xa186, 0x0002, 0x15d8, 0x2001,
--      0xc635, 0x2004, 0xd08c, 0x1198, 0x080c, 0x5f22, 0x1180, 0x2001,
-+      0x080c, 0x9c22, 0x080c, 0xae6d, 0x0005, 0x00c6, 0x00d6, 0x6104,
-+      0xa186, 0x0016, 0x0904, 0xab9c, 0xa186, 0x0002, 0x15d8, 0x2001,
-+      0xc635, 0x2004, 0xd08c, 0x1198, 0x080c, 0x5f3b, 0x1180, 0x2001,
-       0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600, 0x2003, 0x0001, 0xa085,
--      0x0001, 0x080c, 0x5f66, 0x080c, 0x5e5a, 0x0804, 0xabd2, 0x6018,
--      0x2068, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1904, 0xabd2, 0x68a0,
--      0xd0bc, 0x1904, 0xabd2, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0190,
-+      0x0001, 0x080c, 0x5f7f, 0x080c, 0x5e73, 0x0804, 0xabf2, 0x6018,
-+      0x2068, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1904, 0xabf2, 0x68a0,
-+      0xd0bc, 0x1904, 0xabf2, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0190,
-       0x8001, 0x6842, 0x6013, 0x0000, 0x601f, 0x0007, 0x6017, 0x0398,
--      0x603f, 0x0000, 0x080c, 0x9586, 0x0128, 0x2d00, 0x601a, 0x601f,
-+      0x603f, 0x0000, 0x080c, 0x95a6, 0x0128, 0x2d00, 0x601a, 0x601f,
-       0x0001, 0x0450, 0x00de, 0x00ce, 0x6004, 0xa08e, 0x0002, 0x11a8,
-       0x6018, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x1170, 0x2009,
-       0xc635, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0xc600, 0x080c,
--      0x4f02, 0x00ee, 0x080c, 0x9c02, 0x0020, 0x080c, 0x9c02, 0x080c,
-+      0x4f1b, 0x00ee, 0x080c, 0x9c22, 0x0020, 0x080c, 0x9c22, 0x080c,
-       0x2e46, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2e6c, 0x012e,
--      0x00ee, 0x080c, 0xae4d, 0x0005, 0x2001, 0x0002, 0x080c, 0x5291,
--      0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79df, 0x080c, 0x7e94,
--      0x00de, 0x00ce, 0x0c80, 0x080c, 0x2e6c, 0x0804, 0xab08, 0x00c6,
-+      0x00ee, 0x080c, 0xae6d, 0x0005, 0x2001, 0x0002, 0x080c, 0x52aa,
-+      0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79f8, 0x080c, 0x7ead,
-+      0x00de, 0x00ce, 0x0c80, 0x080c, 0x2e6c, 0x0804, 0xab28, 0x00c6,
-       0x00d6, 0x6104, 0xa186, 0x0016, 0x0d38, 0x6018, 0x2068, 0x6840,
--      0xa084, 0x00ff, 0xa005, 0x0904, 0xab52, 0x8001, 0x6842, 0x6003,
--      0x0001, 0x080c, 0x79df, 0x080c, 0x7e94, 0x00de, 0x00ce, 0x0898,
--      0x080c, 0x9c02, 0x0804, 0xab0a, 0x080c, 0x9c30, 0x0804, 0xab0a,
--      0x00d6, 0x2c68, 0x6104, 0x080c, 0xb13a, 0x00de, 0x0118, 0x080c,
--      0x95dc, 0x00b8, 0x6004, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105,
-+      0xa084, 0x00ff, 0xa005, 0x0904, 0xab72, 0x8001, 0x6842, 0x6003,
-+      0x0001, 0x080c, 0x79f8, 0x080c, 0x7ead, 0x00de, 0x00ce, 0x0898,
-+      0x080c, 0x9c22, 0x0804, 0xab2a, 0x080c, 0x9c50, 0x0804, 0xab2a,
-+      0x00d6, 0x2c68, 0x6104, 0x080c, 0xb15a, 0x00de, 0x0118, 0x080c,
-+      0x95fc, 0x00b8, 0x6004, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105,
-       0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x6038,
--      0x600a, 0x2001, 0xc8fe, 0x2004, 0x6016, 0x080c, 0x7999, 0x080c,
--      0x7e94, 0x0005, 0x00de, 0x00ce, 0x080c, 0x9c02, 0x080c, 0x2e46,
-+      0x600a, 0x2001, 0xc8fe, 0x2004, 0x6016, 0x080c, 0x79b2, 0x080c,
-+      0x7ead, 0x0005, 0x00de, 0x00ce, 0x080c, 0x9c22, 0x080c, 0x2e46,
-       0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2e6c, 0x6013, 0x0000,
-       0x601f, 0x0007, 0x6017, 0x0398, 0x603f, 0x0000, 0x012e, 0x00ee,
-       0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1519, 0x000b, 0x0005,
--      0xac00, 0xac00, 0xac00, 0xac00, 0xac00, 0xac00, 0xac00, 0xac00,
--      0xac00, 0xaa2e, 0xac00, 0xaa36, 0xac02, 0xaa36, 0xac0f, 0xac00,
-+      0xac20, 0xac20, 0xac20, 0xac20, 0xac20, 0xac20, 0xac20, 0xac20,
-+      0xac20, 0xaa4e, 0xac20, 0xaa56, 0xac22, 0xaa56, 0xac2f, 0xac20,
-       0x080c, 0x1519, 0x6004, 0xa086, 0x008b, 0x0148, 0x6007, 0x008b,
--      0x6003, 0x000d, 0x080c, 0x7999, 0x080c, 0x7e94, 0x0005, 0x080c,
--      0xae41, 0x080c, 0xac8a, 0x0580, 0x080c, 0x2e46, 0x00d6, 0x080c,
--      0xac8a, 0x0168, 0x6010, 0x2068, 0x6837, 0x0103, 0x684b, 0x0006,
--      0x6847, 0x0000, 0x6850, 0xc0ed, 0x6852, 0x080c, 0x580a, 0x2c68,
--      0x080c, 0x9586, 0x0150, 0x6818, 0x601a, 0x080c, 0xb057, 0x00c6,
--      0x2d60, 0x080c, 0xae4d, 0x00ce, 0x0008, 0x2d60, 0x00de, 0x6013,
-+      0x6003, 0x000d, 0x080c, 0x79b2, 0x080c, 0x7ead, 0x0005, 0x080c,
-+      0xae61, 0x080c, 0xacaa, 0x0580, 0x080c, 0x2e46, 0x00d6, 0x080c,
-+      0xacaa, 0x0168, 0x6010, 0x2068, 0x6837, 0x0103, 0x684b, 0x0006,
-+      0x6847, 0x0000, 0x6850, 0xc0ed, 0x6852, 0x080c, 0x5823, 0x2c68,
-+      0x080c, 0x95a6, 0x0150, 0x6818, 0x601a, 0x080c, 0xb077, 0x00c6,
-+      0x2d60, 0x080c, 0xae6d, 0x00ce, 0x0008, 0x2d60, 0x00de, 0x6013,
-       0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c,
--      0x79df, 0x080c, 0x7e94, 0x0078, 0x6030, 0xa08c, 0xff00, 0x810f,
-+      0x79f8, 0x080c, 0x7ead, 0x0078, 0x6030, 0xa08c, 0xff00, 0x810f,
-       0xa186, 0x0039, 0x0118, 0xa186, 0x0035, 0x1118, 0x080c, 0x2e46,
--      0x08b0, 0x080c, 0xae4d, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c,
--      0x1519, 0x000b, 0x0005, 0xac6b, 0xac6b, 0xac6b, 0xac6d, 0xac6d,
--      0xac6b, 0xac6b, 0xac6b, 0xac6b, 0xac6b, 0xac6b, 0xac6b, 0xac6b,
--      0xac6b, 0xac6b, 0xac6b, 0x080c, 0x1519, 0x080c, 0x90ef, 0x190c,
--      0x1519, 0x6110, 0x2168, 0x684b, 0x0006, 0x080c, 0x580a, 0x080c,
--      0x95dc, 0x0005, 0xa284, 0x0007, 0x1158, 0xa282, 0xce00, 0x0240,
-+      0x08b0, 0x080c, 0xae6d, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c,
-+      0x1519, 0x000b, 0x0005, 0xac8b, 0xac8b, 0xac8b, 0xac8d, 0xac8d,
-+      0xac8b, 0xac8b, 0xac8b, 0xac8b, 0xac8b, 0xac8b, 0xac8b, 0xac8b,
-+      0xac8b, 0xac8b, 0xac8b, 0x080c, 0x1519, 0x080c, 0x910f, 0x190c,
-+      0x1519, 0x6110, 0x2168, 0x684b, 0x0006, 0x080c, 0x5823, 0x080c,
-+      0x95fc, 0x0005, 0xa284, 0x0007, 0x1158, 0xa282, 0xce00, 0x0240,
-       0x2001, 0xc617, 0x2004, 0xa202, 0x1218, 0xa085, 0x0001, 0x0005,
-       0xa006, 0x0ce8, 0x0026, 0x6210, 0xa294, 0xf000, 0x002e, 0x0005,
-       0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061,
-       0xce00, 0x2071, 0xc600, 0x7348, 0x7068, 0xa302, 0x12a8, 0x601c,
--      0xa206, 0x1160, 0x080c, 0xafe2, 0x0148, 0x080c, 0xae88, 0x1110,
--      0x080c, 0x9c02, 0x00c6, 0x080c, 0x95dc, 0x00ce, 0xace0, 0x0018,
-+      0xa206, 0x1160, 0x080c, 0xb002, 0x0148, 0x080c, 0xaea8, 0x1110,
-+      0x080c, 0x9c22, 0x00c6, 0x080c, 0x95fc, 0x00ce, 0xace0, 0x0018,
-       0x705c, 0xac02, 0x1208, 0x0c38, 0x012e, 0x000e, 0x003e, 0x00ce,
-       0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0xa188, 0xc77b, 0x210c,
-       0x81ff, 0x0128, 0x2061, 0xca3c, 0x611a, 0x080c, 0x2e46, 0xa006,
-       0x0010, 0xa085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6,
--      0x0056, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x9586, 0x005e,
--      0x0180, 0x6612, 0x651a, 0x080c, 0xb057, 0x601f, 0x0003, 0x2009,
--      0x004b, 0x080c, 0x960c, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce,
-+      0x0056, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x95a6, 0x005e,
-+      0x0180, 0x6612, 0x651a, 0x080c, 0xb077, 0x601f, 0x0003, 0x2009,
-+      0x004b, 0x080c, 0x962c, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce,
-       0x0005, 0xa006, 0x0cd0, 0x00c6, 0x0056, 0x0126, 0x2091, 0x8000,
--      0x62a0, 0x00c6, 0x080c, 0xaf06, 0x005e, 0x0550, 0x6013, 0x0000,
--      0x651a, 0x080c, 0xb057, 0x601f, 0x0003, 0x0016, 0x00c6, 0x2560,
--      0x080c, 0x553e, 0x00ce, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000,
--      0x080c, 0x7a0e, 0x2c08, 0x080c, 0xbeea, 0x007e, 0x001e, 0xd184,
--      0x0128, 0x080c, 0x95dc, 0xa085, 0x0001, 0x0030, 0x2009, 0x004c,
--      0x080c, 0x960c, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce, 0x0005,
--      0xa006, 0x0cd0, 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c, 0x9586,
-+      0x62a0, 0x00c6, 0x080c, 0xaf26, 0x005e, 0x0550, 0x6013, 0x0000,
-+      0x651a, 0x080c, 0xb077, 0x601f, 0x0003, 0x0016, 0x00c6, 0x2560,
-+      0x080c, 0x5557, 0x00ce, 0x080c, 0x7b2f, 0x0076, 0x2039, 0x0000,
-+      0x080c, 0x7a27, 0x2c08, 0x080c, 0xbf10, 0x007e, 0x001e, 0xd184,
-+      0x0128, 0x080c, 0x95fc, 0xa085, 0x0001, 0x0030, 0x2009, 0x004c,
-+      0x080c, 0x962c, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce, 0x0005,
-+      0xa006, 0x0cd0, 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c, 0x95a6,
-       0x2c78, 0x00ce, 0x0180, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003,
--      0x2021, 0x0005, 0x080c, 0xad80, 0x2f60, 0x2009, 0x004d, 0x080c,
--      0x960c, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6,
--      0x00c6, 0x0046, 0x00c6, 0x080c, 0x9586, 0x2c78, 0x00ce, 0x0178,
-+      0x2021, 0x0005, 0x080c, 0xada0, 0x2f60, 0x2009, 0x004d, 0x080c,
-+      0x962c, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6,
-+      0x00c6, 0x0046, 0x00c6, 0x080c, 0x95a6, 0x2c78, 0x00ce, 0x0178,
-       0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021, 0x0005, 0x0481,
--      0x2f60, 0x2009, 0x004e, 0x080c, 0x960c, 0xa085, 0x0001, 0x004e,
-+      0x2f60, 0x2009, 0x004e, 0x080c, 0x962c, 0xa085, 0x0001, 0x004e,
-       0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c,
--      0x9586, 0x2c78, 0x00ce, 0x01c0, 0x7e12, 0x2c00, 0x781a, 0x781f,
-+      0x95a6, 0x2c78, 0x00ce, 0x01c0, 0x7e12, 0x2c00, 0x781a, 0x781f,
-       0x0003, 0x2021, 0x0004, 0x00a1, 0x2001, 0xc8e7, 0x2004, 0xd0fc,
--      0x0120, 0x2f60, 0x080c, 0x95dc, 0x0028, 0x2f60, 0x2009, 0x0052,
--      0x080c, 0x960c, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005,
--      0x0096, 0x0076, 0x0126, 0x2091, 0x8000, 0x080c, 0x54e0, 0x0118,
--      0x2001, 0xad85, 0x0028, 0x080c, 0x54b0, 0x0158, 0x2001, 0xad8b,
--      0x0006, 0xa00e, 0x2400, 0x080c, 0x592e, 0x080c, 0x580a, 0x000e,
--      0x0807, 0x2418, 0x080c, 0x7d50, 0x62a0, 0x0086, 0x2041, 0x0001,
--      0x2039, 0x0001, 0x2608, 0x080c, 0x7b2f, 0x008e, 0x080c, 0x7a0e,
--      0x2f08, 0x2648, 0x080c, 0xbeea, 0x613c, 0x81ff, 0x090c, 0x7be4,
--      0x080c, 0x7e94, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126,
--      0x2091, 0x8000, 0x00c6, 0x080c, 0x9586, 0x001e, 0x0188, 0x660a,
--      0x611a, 0x080c, 0xb057, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009,
--      0x001f, 0x080c, 0x960c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+      0x0120, 0x2f60, 0x080c, 0x95fc, 0x0028, 0x2f60, 0x2009, 0x0052,
-+      0x080c, 0x962c, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005,
-+      0x0096, 0x0076, 0x0126, 0x2091, 0x8000, 0x080c, 0x54f9, 0x0118,
-+      0x2001, 0xada5, 0x0028, 0x080c, 0x54c9, 0x0158, 0x2001, 0xadab,
-+      0x0006, 0xa00e, 0x2400, 0x080c, 0x5947, 0x080c, 0x5823, 0x000e,
-+      0x0807, 0x2418, 0x080c, 0x7d69, 0x62a0, 0x0086, 0x2041, 0x0001,
-+      0x2039, 0x0001, 0x2608, 0x080c, 0x7b48, 0x008e, 0x080c, 0x7a27,
-+      0x2f08, 0x2648, 0x080c, 0xbf10, 0x613c, 0x81ff, 0x090c, 0x7bfd,
-+      0x080c, 0x7ead, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126,
-+      0x2091, 0x8000, 0x00c6, 0x080c, 0x95a6, 0x001e, 0x0188, 0x660a,
-+      0x611a, 0x080c, 0xb077, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009,
-+      0x001f, 0x080c, 0x962c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-       0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c,
--      0x9586, 0x001e, 0x0188, 0x660a, 0x611a, 0x080c, 0xb057, 0x601f,
--      0x0008, 0x2d00, 0x6012, 0x2009, 0x0021, 0x080c, 0x960c, 0xa085,
-+      0x95a6, 0x001e, 0x0188, 0x660a, 0x611a, 0x080c, 0xb077, 0x601f,
-+      0x0008, 0x2d00, 0x6012, 0x2009, 0x0021, 0x080c, 0x962c, 0xa085,
-       0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126,
--      0x2091, 0x8000, 0x00c6, 0x080c, 0x9586, 0x001e, 0x0188, 0x660a,
--      0x611a, 0x080c, 0xb057, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009,
--      0x003d, 0x080c, 0x960c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+      0x2091, 0x8000, 0x00c6, 0x080c, 0x95a6, 0x001e, 0x0188, 0x660a,
-+      0x611a, 0x080c, 0xb077, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009,
-+      0x003d, 0x080c, 0x962c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-       0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c,
--      0xaf06, 0x001e, 0x0180, 0x611a, 0x080c, 0xb057, 0x601f, 0x0001,
--      0x2d00, 0x6012, 0x2009, 0x0000, 0x080c, 0x960c, 0xa085, 0x0001,
-+      0xaf26, 0x001e, 0x0180, 0x611a, 0x080c, 0xb077, 0x601f, 0x0001,
-+      0x2d00, 0x6012, 0x2009, 0x0000, 0x080c, 0x962c, 0xa085, 0x0001,
-       0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
--      0x8000, 0x00c6, 0x080c, 0x9586, 0x001e, 0x0188, 0x660a, 0x611a,
--      0x080c, 0xb057, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0044,
--      0x080c, 0x960c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
-+      0x8000, 0x00c6, 0x080c, 0x95a6, 0x001e, 0x0188, 0x660a, 0x611a,
-+      0x080c, 0xb077, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0044,
-+      0x080c, 0x962c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
-       0x0cd8, 0x0026, 0x00d6, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110,
-       0x8211, 0x6a3e, 0x00de, 0x002e, 0x0005, 0x0006, 0x6000, 0xa086,
-       0x0000, 0x0190, 0x6013, 0x0000, 0x601f, 0x0007, 0x2001, 0xc8fd,
-       0x2004, 0x0006, 0xa082, 0x0051, 0x000e, 0x0208, 0x8004, 0x6016,
--      0x080c, 0xc3d5, 0x603f, 0x0000, 0x000e, 0x0005, 0x0066, 0x00c6,
-+      0x080c, 0xc3fb, 0x603f, 0x0000, 0x000e, 0x0005, 0x0066, 0x00c6,
-       0x00d6, 0x2031, 0xc653, 0x2634, 0xd6e4, 0x0128, 0x6618, 0x2660,
--      0x6e48, 0x080c, 0x5469, 0x00de, 0x00ce, 0x006e, 0x0005, 0x0006,
-+      0x6e48, 0x080c, 0x5482, 0x00de, 0x00ce, 0x006e, 0x0005, 0x0006,
-       0x0016, 0x6004, 0xa08e, 0x0002, 0x0140, 0xa08e, 0x0003, 0x0128,
-       0xa08e, 0x0004, 0x0110, 0xa085, 0x0001, 0x001e, 0x000e, 0x0005,
-       0x0006, 0x00d6, 0x6010, 0xa06d, 0x0148, 0x6834, 0xa086, 0x0139,
-       0x0138, 0x6838, 0xd0fc, 0x0110, 0xa006, 0x0010, 0xa085, 0x0001,
-       0x00de, 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6,
--      0x080c, 0x9586, 0x001e, 0x0190, 0x611a, 0x080c, 0xb057, 0x601f,
-+      0x080c, 0x95a6, 0x001e, 0x0190, 0x611a, 0x080c, 0xb077, 0x601f,
-       0x0001, 0x2d00, 0x6012, 0x080c, 0x2e46, 0x2009, 0x0028, 0x080c,
--      0x960c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8,
-+      0x962c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8,
-       0xa186, 0x0015, 0x1178, 0x2011, 0xc621, 0x2204, 0xa086, 0x0074,
--      0x1148, 0x080c, 0x9fb2, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c,
--      0x79df, 0x0020, 0x080c, 0x9c02, 0x080c, 0x95dc, 0x0005, 0xa186,
--      0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x5291, 0x00e8, 0xa186,
-+      0x1148, 0x080c, 0x9fd2, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c,
-+      0x79f8, 0x0020, 0x080c, 0x9c22, 0x080c, 0x95fc, 0x0005, 0xa186,
-+      0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x52aa, 0x00e8, 0xa186,
-       0x0015, 0x11e8, 0x2011, 0xc621, 0x2204, 0xa086, 0x0014, 0x11b8,
--      0x00d6, 0x6018, 0x2068, 0x080c, 0x53df, 0x00de, 0x080c, 0xa06b,
-+      0x00d6, 0x6018, 0x2068, 0x080c, 0x53f8, 0x00de, 0x080c, 0xa08b,
-       0x1170, 0x00d6, 0x6018, 0x2068, 0x6890, 0x00de, 0xa005, 0x0138,
--      0x2001, 0x0006, 0x080c, 0x5291, 0x080c, 0x9760, 0x0020, 0x080c,
--      0x9c02, 0x080c, 0x95dc, 0x0005, 0x6848, 0xa086, 0x0005, 0x1108,
-+      0x2001, 0x0006, 0x080c, 0x52aa, 0x080c, 0x9780, 0x0020, 0x080c,
-+      0x9c22, 0x080c, 0x95fc, 0x0005, 0x6848, 0xa086, 0x0005, 0x1108,
-       0x0009, 0x0005, 0x6850, 0xc0ad, 0x6852, 0x0005, 0x00e6, 0x0126,
-       0x2071, 0xc600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0001, 0x0608,
-       0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0148, 0xace0, 0x0018,
-@@ -5153,24 +5158,24 @@ unsigned short risc_code01[] = { 
-       0x754e, 0xa085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x704f, 0xce00,
-       0x0cc0, 0xa006, 0x0cc0, 0x00e6, 0x2071, 0xcc8c, 0x7014, 0xd0e4,
-       0x0150, 0x6013, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c,
--      0x7999, 0x080c, 0x7e94, 0x00ee, 0x0005, 0x00c6, 0x00f6, 0x2c78,
--      0x080c, 0x56c3, 0x00fe, 0x0120, 0x601c, 0xa084, 0x000f, 0x0013,
--      0x00ce, 0x0005, 0xaa2e, 0xaf5d, 0xaf60, 0xaf63, 0xc1c2, 0xc1dd,
--      0xc1e0, 0xaa2e, 0xaa2e, 0x080c, 0x1519, 0xe000, 0xe000, 0x0005,
-+      0x79b2, 0x080c, 0x7ead, 0x00ee, 0x0005, 0x00c6, 0x00f6, 0x2c78,
-+      0x080c, 0x56dc, 0x00fe, 0x0120, 0x601c, 0xa084, 0x000f, 0x0013,
-+      0x00ce, 0x0005, 0xaa4e, 0xaf7d, 0xaf80, 0xaf83, 0xc1e8, 0xc203,
-+      0xc206, 0xaa4e, 0xaa4e, 0x080c, 0x1519, 0xe000, 0xe000, 0x0005,
-       0xe000, 0xe000, 0x0005, 0x0009, 0x0005, 0x00f6, 0x2c78, 0x080c,
--      0x56c3, 0x0538, 0x080c, 0x9586, 0x1128, 0x2001, 0xc8ff, 0x2004,
--      0x783e, 0x00f8, 0x7818, 0x601a, 0x080c, 0xb057, 0x781c, 0xa086,
-+      0x56dc, 0x0538, 0x080c, 0x95a6, 0x1128, 0x2001, 0xc8ff, 0x2004,
-+      0x783e, 0x00f8, 0x7818, 0x601a, 0x080c, 0xb077, 0x781c, 0xa086,
-       0x0003, 0x0128, 0x7808, 0x6036, 0x2f00, 0x603a, 0x0020, 0x7808,
-       0x603a, 0x2f00, 0x6036, 0x602a, 0x601f, 0x0001, 0x6007, 0x0035,
--      0x6003, 0x0001, 0x7950, 0x6152, 0x080c, 0x7999, 0x080c, 0x7e94,
-+      0x6003, 0x0001, 0x7950, 0x6152, 0x080c, 0x79b2, 0x080c, 0x7ead,
-       0x2f60, 0x00fe, 0x0005, 0x0016, 0x00f6, 0x682c, 0x6032, 0xa08e,
-       0x0001, 0x0138, 0xa086, 0x0005, 0x0140, 0xa006, 0x602a, 0x602e,
-       0x00a0, 0x6820, 0xc0f4, 0xc0d5, 0x6822, 0x6810, 0x2078, 0x787c,
-       0x6938, 0xa102, 0x7880, 0x6934, 0xa103, 0x1e78, 0x6834, 0x602a,
-       0x6838, 0xa084, 0xfffc, 0x683a, 0x602e, 0x2d00, 0x6036, 0x6808,
-       0x603a, 0x6918, 0x611a, 0x6950, 0x6152, 0x601f, 0x0001, 0x6007,
--      0x0039, 0x6003, 0x0001, 0x080c, 0x7999, 0x6803, 0x0002, 0x00fe,
--      0x001e, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x56c3, 0x1118, 0xa085,
-+      0x0039, 0x6003, 0x0001, 0x080c, 0x79b2, 0x6803, 0x0002, 0x00fe,
-+      0x001e, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x56dc, 0x1118, 0xa085,
-       0x0001, 0x0070, 0x6020, 0xd0f4, 0x1150, 0xc0f5, 0x6022, 0x6010,
-       0x2078, 0x7828, 0x603a, 0x782c, 0x6036, 0x080c, 0x1953, 0xa006,
-       0x00fe, 0x0005, 0x0006, 0x0016, 0x6004, 0xa08e, 0x0034, 0x01b8,
-@@ -5178,705 +5183,705 @@ unsigned short risc_code01[] = { 
-       0x0170, 0xa08e, 0x0038, 0x0158, 0xa08e, 0x0039, 0x0140, 0xa08e,
-       0x003a, 0x0128, 0xa08e, 0x003b, 0x0110, 0xa085, 0x0001, 0x001e,
-       0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001,
--      0xc8f9, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x783f,
-+      0xc8f9, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x7858,
-       0x2001, 0xc8fd, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,
-       0xc8fb, 0x200c, 0x8000, 0x2014, 0x2071, 0xc8d5, 0x711a, 0x721e,
--      0x2001, 0x0064, 0x080c, 0x783f, 0x2001, 0xc8fe, 0x82ff, 0x1110,
-+      0x2001, 0x0064, 0x080c, 0x7858, 0x2001, 0xc8fe, 0x82ff, 0x1110,
-       0x2011, 0x0014, 0x2202, 0x2009, 0xc8ff, 0xa280, 0x000a, 0x200a,
--      0x080c, 0x572c, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
-+      0x080c, 0x5745, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
-       0x0006, 0x00e6, 0x2001, 0xc8fd, 0x2003, 0x0028, 0x2001, 0xc8fe,
-       0x2003, 0x0014, 0x2071, 0xc8d5, 0x701b, 0x0000, 0x701f, 0x07d0,
-       0x2001, 0xc8ff, 0x2003, 0x001e, 0x00ee, 0x000e, 0x0005, 0x00d6,
-       0x6054, 0xa06d, 0x0110, 0x080c, 0x1619, 0x00de, 0x0005, 0x0005,
--      0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x9586, 0x001e,
-+      0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x95a6, 0x001e,
-       0x0178, 0x611a, 0x0ca1, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009,
--      0x0033, 0x080c, 0x960c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+      0x0033, 0x080c, 0x962c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-       0xa006, 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0xc600, 0xa186,
-       0x0015, 0x1500, 0x7084, 0xa086, 0x0018, 0x11e0, 0x6010, 0x2068,
--      0x6a3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x80af, 0x01d8, 0x7070,
-+      0x6a3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x80c8, 0x01d8, 0x7070,
-       0x6a50, 0xa206, 0x1160, 0x7074, 0x6a54, 0xa206, 0x1140, 0x6218,
-       0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x2e8b, 0x080c,
--      0x9760, 0x0020, 0x080c, 0x9c02, 0x080c, 0x95dc, 0x00fe, 0x00ee,
-+      0x9780, 0x0020, 0x080c, 0x9c22, 0x080c, 0x95fc, 0x00fe, 0x00ee,
-       0x00de, 0x0005, 0x7054, 0x6a54, 0xa206, 0x0d48, 0x0c80, 0x00c6,
--      0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x9586, 0x001e, 0x0180,
--      0x611a, 0x080c, 0xb057, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009,
--      0x0043, 0x080c, 0x960c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x95a6, 0x001e, 0x0180,
-+      0x611a, 0x080c, 0xb077, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009,
-+      0x0043, 0x080c, 0x962c, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-       0xa006, 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0xc600, 0xa186,
-       0x0015, 0x11c0, 0x7084, 0xa086, 0x0004, 0x11a0, 0x6010, 0xa0e8,
--      0x000f, 0x2c78, 0x080c, 0x80af, 0x01a8, 0x7070, 0x6a08, 0xa206,
-+      0x000f, 0x2c78, 0x080c, 0x80c8, 0x01a8, 0x7070, 0x6a08, 0xa206,
-       0x1130, 0x7074, 0x6a0c, 0xa206, 0x1110, 0x080c, 0x2e46, 0x080c,
--      0x9760, 0x0020, 0x080c, 0x9c02, 0x080c, 0x95dc, 0x00fe, 0x00ee,
-+      0x9780, 0x0020, 0x080c, 0x9c22, 0x080c, 0x95fc, 0x00fe, 0x00ee,
-       0x00de, 0x0005, 0x7054, 0x6a0c, 0xa206, 0x0d78, 0x0c80, 0x0016,
-       0x0026, 0x684c, 0xd0ac, 0x0178, 0x6914, 0x6a10, 0x2100, 0xa205,
-       0x0150, 0x6860, 0xa106, 0x1118, 0x685c, 0xa206, 0x0120, 0x6962,
-       0x6a5e, 0xa085, 0x0001, 0x002e, 0x001e, 0x0005, 0x00d6, 0x0036,
-       0x6310, 0x2368, 0x684a, 0x6952, 0xa29e, 0x4000, 0x11a0, 0x00c6,
-       0x6318, 0x2360, 0x2009, 0x0000, 0x6838, 0xd0f4, 0x1140, 0x080c,
--      0x55de, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x6a66,
-+      0x55f7, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x6a66,
-       0x696a, 0x00ce, 0x0080, 0x6a66, 0x3918, 0xa398, 0x0006, 0x231c,
-       0x686b, 0x0004, 0x6b72, 0x00c6, 0x6318, 0x2360, 0x6004, 0xa084,
--      0x00ff, 0x686e, 0x00ce, 0x080c, 0x580a, 0x6013, 0x0000, 0x003e,
-+      0x00ff, 0x686e, 0x00ce, 0x080c, 0x5823, 0x6013, 0x0000, 0x003e,
-       0x00de, 0x0005, 0x00c6, 0x0026, 0x0016, 0xa186, 0x0035, 0x0110,
--      0x6a34, 0x0008, 0x6a28, 0x080c, 0xac7a, 0x01f0, 0x2260, 0x611c,
-+      0x6a34, 0x0008, 0x6a28, 0x080c, 0xac9a, 0x01f0, 0x2260, 0x611c,
-       0xa186, 0x0003, 0x0118, 0xa186, 0x0006, 0x1190, 0x6834, 0xa206,
-       0x0140, 0x6838, 0xa206, 0x1160, 0x6108, 0x6834, 0xa106, 0x1140,
-       0x0020, 0x6008, 0x6938, 0xa106, 0x1118, 0x6018, 0x6918, 0xa106,
-       0x001e, 0x002e, 0x00ce, 0x0005, 0xa085, 0x0001, 0x0cc8, 0x6944,
-       0xd1cc, 0x0198, 0xa18c, 0x00ff, 0xa18e, 0x0002, 0x1170, 0xad88,
-       0x001e, 0x210c, 0xa18c, 0x0f00, 0x810f, 0xa18e, 0x0001, 0x1128,
--      0x6810, 0x6914, 0xa115, 0x190c, 0xa4b3, 0x0005, 0x0066, 0x6000,
--      0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013, 0x006e, 0x0005, 0xb197,
--      0xb6ae, 0xb7d6, 0xb197, 0xb197, 0xb197, 0xb197, 0xb197, 0xb1cf,
--      0xb85a, 0xb197, 0xb197, 0xb197, 0xb197, 0xb197, 0xb197, 0x080c,
--      0x1519, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013,
--      0x006e, 0x0005, 0xb1b2, 0xbcdf, 0xb1b2, 0xb1b2, 0xb1b2, 0xb1b2,
--      0xb1b2, 0xb1b2, 0xbca3, 0xbd27, 0xb1b2, 0xc307, 0xc337, 0xc307,
--      0xc337, 0xb1b2, 0x080c, 0x1519, 0x0066, 0x6000, 0xa0b2, 0x0010,
--      0x1a0c, 0x1519, 0x0013, 0x006e, 0x0005, 0xb1cd, 0xb9aa, 0xba77,
--      0xbaa4, 0xbb28, 0xb1cd, 0xbc15, 0xbbc0, 0xb866, 0xbc79, 0xbc8e,
--      0xb1cd, 0xb1cd, 0xb1cd, 0xb1cd, 0xb1cd, 0x080c, 0x1519, 0xa1b2,
--      0x0080, 0x1a0c, 0x1519, 0x2100, 0xa1b2, 0x0040, 0x1a04, 0xb5e6,
--      0x0002, 0xb219, 0xb3e4, 0xb219, 0xb219, 0xb219, 0xb3eb, 0xb219,
--      0xb219, 0xb219, 0xb219, 0xb219, 0xb219, 0xb219, 0xb219, 0xb219,
--      0xb219, 0xb219, 0xb219, 0xb219, 0xb219, 0xb219, 0xb219, 0xb219,
--      0xb21b, 0xb279, 0xb288, 0xb2d6, 0xb2f4, 0xb372, 0xb3d1, 0xb219,
--      0xb219, 0xb3ee, 0xb219, 0xb219, 0xb401, 0xb40c, 0xb219, 0xb219,
--      0xb219, 0xb219, 0xb219, 0xb497, 0xb219, 0xb219, 0xb4aa, 0xb219,
--      0xb219, 0xb462, 0xb219, 0xb219, 0xb219, 0xb4c2, 0xb219, 0xb219,
--      0xb219, 0xb53c, 0xb219, 0xb219, 0xb219, 0xb219, 0xb219, 0xb219,
--      0xb5ad, 0x080c, 0x1519, 0x080c, 0x570b, 0x1150, 0x2001, 0xc635,
--      0x2004, 0xd0cc, 0x1128, 0xa084, 0x0009, 0xa086, 0x0008, 0x1140,
--      0x6007, 0x0009, 0x602b, 0x0009, 0x6013, 0x0000, 0x0804, 0xb3df,
--      0x080c, 0x568d, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6218,
--      0x2270, 0x72a0, 0x0026, 0x2019, 0x0029, 0x080c, 0x7b16, 0x0076,
--      0x2039, 0x0000, 0x080c, 0x7a0e, 0x2c08, 0x080c, 0xbeea, 0x007e,
--      0x001e, 0x2e60, 0x080c, 0x553e, 0x001e, 0x002e, 0x003e, 0x00ce,
--      0x00ee, 0x6618, 0x00c6, 0x2660, 0x080c, 0x534c, 0x00ce, 0xa6b0,
--      0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0278, 0x080c,
--      0xbe2e, 0x1904, 0xb2d0, 0x080c, 0xbdce, 0x1120, 0x6007, 0x0008,
--      0x0804, 0xb3df, 0x6007, 0x0009, 0x0804, 0xb3df, 0x080c, 0xc016,
--      0x0128, 0x080c, 0xbe2e, 0x0d78, 0x0804, 0xb2d0, 0x6013, 0x1900,
--      0x0c88, 0x080c, 0x2f69, 0x1904, 0xb5e3, 0x6106, 0x080c, 0xbd88,
--      0x6007, 0x0006, 0x0804, 0xb3df, 0x6007, 0x0007, 0x0804, 0xb3df,
--      0x080c, 0xc36b, 0x1904, 0xb5e3, 0x080c, 0x2f69, 0x1904, 0xb5e3,
--      0x00d6, 0x6618, 0x2668, 0x6e04, 0xa684, 0x00ff, 0xa082, 0x0006,
--      0x1220, 0x2001, 0x0001, 0x080c, 0x527f, 0xa6b4, 0xff00, 0x8637,
--      0xa686, 0x0006, 0x0188, 0xa686, 0x0004, 0x0170, 0x6e04, 0xa6b4,
--      0x00ff, 0xa686, 0x0006, 0x0140, 0xa686, 0x0004, 0x0128, 0xa686,
--      0x0005, 0x0110, 0x00de, 0x00e0, 0x080c, 0xbe8c, 0x11a0, 0xa686,
--      0x0006, 0x1150, 0x0026, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009,
--      0x0000, 0x080c, 0x2e8b, 0x002e, 0x080c, 0x53df, 0x6007, 0x000a,
--      0x00de, 0x0804, 0xb3df, 0x6007, 0x000b, 0x00de, 0x0804, 0xb3df,
--      0x080c, 0x2e46, 0x6007, 0x0001, 0x0804, 0xb3df, 0x080c, 0xc36b,
--      0x1904, 0xb5e3, 0x080c, 0x2f69, 0x1904, 0xb5e3, 0x6618, 0x00d6,
--      0x2668, 0x6e04, 0x00de, 0xa686, 0x0707, 0x0d50, 0x0026, 0x6218,
-+      0x6810, 0x6914, 0xa115, 0x190c, 0xa4d3, 0x0005, 0x080c, 0x95fc,
-+      0x0804, 0x7ead, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519,
-+      0x0013, 0x006e, 0x0005, 0xb1bb, 0xb6d2, 0xb7fa, 0xb1bb, 0xb1bb,
-+      0xb1bb, 0xb1bb, 0xb1bb, 0xb1f3, 0xb87e, 0xb1bb, 0xb1bb, 0xb1bb,
-+      0xb1bb, 0xb1bb, 0xb1bb, 0x080c, 0x1519, 0x0066, 0x6000, 0xa0b2,
-+      0x0010, 0x1a0c, 0x1519, 0x0013, 0x006e, 0x0005, 0xb1d6, 0xbd05,
-+      0xb1d6, 0xb1d6, 0xb1d6, 0xb1d6, 0xb1d6, 0xb1d6, 0xbcc7, 0xbd4d,
-+      0xb1d6, 0xc32d, 0xc35d, 0xc32d, 0xc35d, 0xb1d6, 0x080c, 0x1519,
-+      0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013, 0x006e,
-+      0x0005, 0xb1f1, 0xb9ce, 0xba9b, 0xbac8, 0xbb4c, 0xb1f1, 0xbc39,
-+      0xbbe4, 0xb88a, 0xbc9d, 0xbcb2, 0xb1f1, 0xb1f1, 0xb1f1, 0xb1f1,
-+      0xb1f1, 0x080c, 0x1519, 0xa1b2, 0x0080, 0x1a0c, 0x1519, 0x2100,
-+      0xa1b2, 0x0040, 0x1a04, 0xb60a, 0x0002, 0xb23d, 0xb408, 0xb23d,
-+      0xb23d, 0xb23d, 0xb40f, 0xb23d, 0xb23d, 0xb23d, 0xb23d, 0xb23d,
-+      0xb23d, 0xb23d, 0xb23d, 0xb23d, 0xb23d, 0xb23d, 0xb23d, 0xb23d,
-+      0xb23d, 0xb23d, 0xb23d, 0xb23d, 0xb23f, 0xb29d, 0xb2ac, 0xb2fa,
-+      0xb318, 0xb396, 0xb3f5, 0xb23d, 0xb23d, 0xb412, 0xb23d, 0xb23d,
-+      0xb425, 0xb430, 0xb23d, 0xb23d, 0xb23d, 0xb23d, 0xb23d, 0xb4bb,
-+      0xb23d, 0xb23d, 0xb4ce, 0xb23d, 0xb23d, 0xb486, 0xb23d, 0xb23d,
-+      0xb23d, 0xb4e6, 0xb23d, 0xb23d, 0xb23d, 0xb560, 0xb23d, 0xb23d,
-+      0xb23d, 0xb23d, 0xb23d, 0xb23d, 0xb5d1, 0x080c, 0x1519, 0x080c,
-+      0x5724, 0x1150, 0x2001, 0xc635, 0x2004, 0xd0cc, 0x1128, 0xa084,
-+      0x0009, 0xa086, 0x0008, 0x1140, 0x6007, 0x0009, 0x602b, 0x0009,
-+      0x6013, 0x0000, 0x0804, 0xb403, 0x080c, 0x56a6, 0x00e6, 0x00c6,
-+      0x0036, 0x0026, 0x0016, 0x6218, 0x2270, 0x72a0, 0x0026, 0x2019,
-+      0x0029, 0x080c, 0x7b2f, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a27,
-+      0x2c08, 0x080c, 0xbf10, 0x007e, 0x001e, 0x2e60, 0x080c, 0x5557,
-+      0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6618, 0x00c6, 0x2660,
-+      0x080c, 0x5365, 0x00ce, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff,
-+      0xa082, 0x0006, 0x0278, 0x080c, 0xbe54, 0x1904, 0xb2f4, 0x080c,
-+      0xbdf4, 0x1120, 0x6007, 0x0008, 0x0804, 0xb403, 0x6007, 0x0009,
-+      0x0804, 0xb403, 0x080c, 0xc03c, 0x0128, 0x080c, 0xbe54, 0x0d78,
-+      0x0804, 0xb2f4, 0x6013, 0x1900, 0x0c88, 0x080c, 0x2f69, 0x1904,
-+      0xb607, 0x6106, 0x080c, 0xbdae, 0x6007, 0x0006, 0x0804, 0xb403,
-+      0x6007, 0x0007, 0x0804, 0xb403, 0x080c, 0xc391, 0x1904, 0xb607,
-+      0x080c, 0x2f69, 0x1904, 0xb607, 0x00d6, 0x6618, 0x2668, 0x6e04,
-+      0xa684, 0x00ff, 0xa082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c,
-+      0x5298, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0188, 0xa686,
-+      0x0004, 0x0170, 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0140,
-+      0xa686, 0x0004, 0x0128, 0xa686, 0x0005, 0x0110, 0x00de, 0x00e0,
-+      0x080c, 0xbeb2, 0x11a0, 0xa686, 0x0006, 0x1150, 0x0026, 0x6218,
-       0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x2e8b, 0x002e,
--      0x6007, 0x000c, 0x0804, 0xb3df, 0x080c, 0x570b, 0x1140, 0x2001,
--      0xc635, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008, 0x1110, 0x0804,
--      0xb228, 0x080c, 0x568d, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684,
--      0x00ff, 0xa082, 0x0006, 0x06e8, 0x1138, 0x0026, 0x2001, 0x0006,
--      0x080c, 0x52be, 0x002e, 0x0050, 0xa6b4, 0xff00, 0x8637, 0xa686,
--      0x0004, 0x0120, 0xa686, 0x0006, 0x1904, 0xb2d0, 0x080c, 0xbe99,
--      0x1120, 0x6007, 0x000e, 0x0804, 0xb3df, 0x0046, 0x6418, 0xa4a0,
--      0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x0046, 0x080c, 0x2e46,
--      0x004e, 0x0016, 0xa006, 0x2009, 0xc653, 0x210c, 0xd1a4, 0x0158,
--      0x2009, 0x0029, 0x080c, 0xc183, 0x6018, 0x00d6, 0x2068, 0x6800,
--      0xc0e5, 0x6802, 0x00de, 0x001e, 0x004e, 0x6007, 0x0001, 0x0804,
--      0xb3df, 0x2001, 0x0001, 0x080c, 0x527f, 0x0156, 0x0016, 0x0026,
--      0x0036, 0x20a9, 0x0004, 0x2019, 0xc605, 0x2011, 0xcc90, 0x080c,
--      0xa0fc, 0x003e, 0x002e, 0x001e, 0x015e, 0xa005, 0x0168, 0xa6b4,
--      0xff00, 0x8637, 0xa682, 0x0004, 0x0a04, 0xb2d0, 0xa682, 0x0007,
--      0x0a04, 0xb31e, 0x0804, 0xb2d0, 0x6013, 0x1900, 0x6007, 0x0009,
--      0x0804, 0xb3df, 0x080c, 0x570b, 0x1140, 0x2001, 0xc635, 0x2004,
--      0xa084, 0x0009, 0xa086, 0x0008, 0x1110, 0x0804, 0xb228, 0x080c,
--      0x568d, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082,
--      0x0006, 0x06b8, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0004, 0x0120,
--      0xa686, 0x0006, 0x1904, 0xb2d0, 0x080c, 0xbec1, 0x1138, 0x080c,
--      0xbdce, 0x1120, 0x6007, 0x0010, 0x0804, 0xb3df, 0x0046, 0x6418,
--      0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x0046, 0x080c,
--      0x2e46, 0x004e, 0x0016, 0xa006, 0x2009, 0xc653, 0x210c, 0xd1a4,
--      0x0158, 0x2009, 0x0029, 0x080c, 0xc183, 0x6018, 0x00d6, 0x2068,
--      0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e, 0x004e, 0x6007, 0x0001,
--      0x00f0, 0x080c, 0xc016, 0x0140, 0xa6b4, 0xff00, 0x8637, 0xa686,
--      0x0006, 0x0950, 0x0804, 0xb2d0, 0x6013, 0x1900, 0x6007, 0x0009,
--      0x0070, 0x080c, 0x2f69, 0x1904, 0xb5e3, 0x080c, 0xc36b, 0x1904,
--      0xb5e3, 0x080c, 0xb647, 0x1904, 0xb2d0, 0x6007, 0x0012, 0x6003,
--      0x0001, 0x080c, 0x79df, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001,
--      0x080c, 0x79df, 0x0cc0, 0x6007, 0x0005, 0x0cc0, 0x080c, 0xc36b,
--      0x1904, 0xb5e3, 0x080c, 0x2f69, 0x1904, 0xb5e3, 0x080c, 0xb647,
--      0x1904, 0xb2d0, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c, 0x79df,
--      0x0005, 0x080c, 0x2f69, 0x1904, 0xb5e3, 0x6007, 0x0023, 0x6003,
--      0x0001, 0x080c, 0x79df, 0x0005, 0x080c, 0xc36b, 0x1904, 0xb5e3,
--      0x080c, 0x2f69, 0x1904, 0xb5e3, 0x080c, 0xb647, 0x1904, 0xb2d0,
--      0x0016, 0x0026, 0x2011, 0xcc91, 0x2214, 0xa286, 0xffff, 0x0190,
--      0x2c08, 0x080c, 0xac7a, 0x01e0, 0x2260, 0x2011, 0xcc90, 0x2214,
--      0x6008, 0xa206, 0x11a8, 0x6018, 0xa190, 0x0006, 0x2214, 0xa206,
--      0x01e8, 0x0070, 0x2011, 0xcc90, 0x2214, 0x2c08, 0xa006, 0x080c,
--      0xc155, 0x11a0, 0x2011, 0xcc91, 0x2214, 0xa286, 0xffff, 0x01c0,
--      0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x2011, 0xcc89, 0x2214,
--      0xa296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068, 0x601c, 0xa086,
--      0x0007, 0x1d70, 0x6004, 0xa086, 0x0024, 0x1110, 0x080c, 0x95dc,
--      0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x79df, 0x002e,
--      0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x527f, 0x0156, 0x0016,
--      0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0xc605, 0x2011, 0xcc96,
--      0x080c, 0xa0fc, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120, 0x6007,
--      0x0031, 0x0804, 0xb3df, 0x080c, 0x9dee, 0x080c, 0x5f22, 0x11b0,
--      0x0006, 0x0026, 0x0036, 0x080c, 0x5f3e, 0x1158, 0x2001, 0xc8e6,
--      0x2003, 0x0001, 0x2001, 0xc600, 0x2003, 0x0001, 0x080c, 0x5e5a,
--      0x0010, 0x080c, 0x5ef9, 0x003e, 0x002e, 0x000e, 0x0005, 0x080c,
--      0x2f69, 0x1904, 0xb5e3, 0x080c, 0xb647, 0x1904, 0xb2d0, 0x6106,
--      0x080c, 0xb663, 0x6007, 0x002b, 0x0804, 0xb3df, 0x6007, 0x002c,
--      0x0804, 0xb3df, 0x080c, 0xc36b, 0x1904, 0xb5e3, 0x080c, 0x2f69,
--      0x1904, 0xb5e3, 0x080c, 0xb647, 0x1904, 0xb2d0, 0x6106, 0x080c,
--      0xb667, 0x1120, 0x6007, 0x002e, 0x0804, 0xb3df, 0x6007, 0x002f,
--      0x0804, 0xb3df, 0x080c, 0x2f69, 0x1904, 0xb5e3, 0x00e6, 0x00d6,
--      0x00c6, 0x6018, 0xa080, 0x0001, 0x200c, 0xa184, 0x00ff, 0xa086,
--      0x0006, 0x0158, 0xa184, 0xff00, 0x8007, 0xa086, 0x0006, 0x0128,
--      0x00ce, 0x00de, 0x00ee, 0x0804, 0xb3e4, 0x2001, 0xc672, 0x2004,
--      0xd0e4, 0x0904, 0xb539, 0x2071, 0xcc8c, 0x7010, 0x6036, 0x7014,
--      0x603a, 0x7108, 0x720c, 0x2001, 0xc653, 0x2004, 0xd0a4, 0x0140,
--      0x6018, 0x2068, 0x6810, 0xa106, 0x1118, 0x6814, 0xa206, 0x01f8,
--      0x2001, 0xc653, 0x2004, 0xd0ac, 0x1590, 0x2069, 0xc600, 0x6874,
--      0xa206, 0x1568, 0x6870, 0xa106, 0x1550, 0x7210, 0x080c, 0xac7a,
--      0x0558, 0x080c, 0xc1ef, 0x0540, 0x622a, 0x6007, 0x0036, 0x6003,
--      0x0001, 0x080c, 0x7999, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214,
--      0xa286, 0xffff, 0x0150, 0x080c, 0xac7a, 0x01b0, 0xa280, 0x0002,
--      0x2004, 0x7110, 0xa106, 0x1180, 0x0c08, 0x7210, 0x2c08, 0xa085,
--      0x0001, 0x080c, 0xc155, 0x2c10, 0x2160, 0x0130, 0x08b8, 0x6007,
--      0x0037, 0x6013, 0x1500, 0x08d8, 0x6007, 0x0037, 0x6013, 0x1700,
--      0x08b0, 0x6007, 0x0012, 0x0898, 0x080c, 0x2f69, 0x1904, 0xb5e3,
--      0x6018, 0xa080, 0x0001, 0x2004, 0xa084, 0xff00, 0x8007, 0xa086,
--      0x0006, 0x1904, 0xb3e4, 0x00e6, 0x00d6, 0x00c6, 0x2001, 0xc672,
--      0x2004, 0xd0e4, 0x0904, 0xb5a5, 0x2069, 0xc600, 0x2071, 0xcc8c,
--      0x7008, 0x6036, 0x720c, 0x623a, 0xa286, 0xffff, 0x1150, 0x7208,
--      0x00c6, 0x2c08, 0xa085, 0x0001, 0x080c, 0xc155, 0x2c10, 0x00ce,
--      0x0588, 0x080c, 0xac7a, 0x0570, 0x00c6, 0x0026, 0x2260, 0x080c,
--      0xa94d, 0x002e, 0x00ce, 0x7118, 0xa18c, 0xff00, 0x810f, 0xa186,
--      0x0001, 0x0158, 0xa186, 0x0005, 0x0118, 0xa186, 0x0007, 0x1178,
--      0xa280, 0x0004, 0x2004, 0xa005, 0x0150, 0x0056, 0x7510, 0x7614,
--      0x080c, 0xc206, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007,
--      0x003b, 0x602b, 0x0009, 0x6013, 0x2a00, 0x6003, 0x0001, 0x080c,
--      0x7999, 0x0c88, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013, 0x1700,
--      0x6003, 0x0001, 0x080c, 0x7999, 0x0c30, 0x6007, 0x003b, 0x602b,
--      0x000b, 0x6013, 0x0000, 0x0804, 0xb50f, 0x00e6, 0x0026, 0x080c,
--      0x570b, 0x0558, 0x080c, 0x568d, 0x080c, 0xc3e6, 0x1520, 0x2071,
--      0xc600, 0x70d4, 0xc085, 0x70d6, 0x00f6, 0x2079, 0x0100, 0x72a0,
--      0xa284, 0x00ff, 0x7072, 0x78e6, 0xa284, 0xff00, 0x7274, 0xa205,
--      0x7076, 0x78ea, 0x00fe, 0x70df, 0x0000, 0x2001, 0xc653, 0x2004,
--      0xd0a4, 0x0120, 0x2011, 0xc940, 0x2013, 0x07d0, 0xd0ac, 0x1128,
--      0x080c, 0x2c62, 0x0010, 0x080c, 0xc412, 0x002e, 0x00ee, 0x080c,
--      0x95dc, 0x0804, 0xb3e3, 0x080c, 0x95dc, 0x0005, 0x2600, 0x0002,
--      0xb5f1, 0xb625, 0xb636, 0xb5f1, 0xb5f1, 0xb5f3, 0xb60c, 0xb5f1,
--      0xb5f1, 0x080c, 0x1519, 0x080c, 0xc36b, 0x1d68, 0x080c, 0x2f69,
--      0x1d50, 0x080c, 0xb647, 0x1138, 0x6007, 0x0045, 0x6003, 0x0001,
--      0x080c, 0x79df, 0x0005, 0x080c, 0x2e46, 0x6007, 0x0001, 0x6003,
--      0x0001, 0x080c, 0x79df, 0x0005, 0x080c, 0x2f69, 0x19a0, 0x080c,
--      0x768f, 0x1160, 0x2e00, 0xa080, 0x0010, 0x2004, 0x8007, 0xd084,
--      0x0110, 0x080c, 0xc41b, 0x080c, 0x95dc, 0x0005, 0x2009, 0x0046,
--      0x080c, 0xc441, 0x080c, 0x95dc, 0x0005, 0x080c, 0x2f69, 0x1904,
--      0xb5e3, 0x2009, 0x0041, 0x080c, 0xc441, 0x6007, 0x0047, 0x6003,
--      0x0001, 0x080c, 0x79df, 0x080c, 0x7e94, 0x0005, 0x080c, 0x2f69,
--      0x1904, 0xb5e3, 0x2009, 0x0042, 0x080c, 0xc441, 0x6007, 0x0047,
--      0x6003, 0x0001, 0x080c, 0x79df, 0x080c, 0x7e94, 0x0005, 0x00d6,
--      0x0066, 0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686,
--      0x0006, 0x0170, 0xa686, 0x0004, 0x0158, 0x6e04, 0xa6b4, 0x00ff,
--      0xa686, 0x0006, 0x0128, 0xa686, 0x0004, 0x0110, 0xa085, 0x0001,
--      0x006e, 0x00de, 0x0005, 0x00d6, 0x0449, 0x00de, 0x0005, 0x00d6,
--      0x0491, 0x11f0, 0x680c, 0xa08c, 0xff00, 0x6820, 0xa084, 0x00ff,
--      0xa115, 0x6212, 0x6824, 0x602a, 0xd1e4, 0x0118, 0x2009, 0x0001,
--      0x0060, 0xd1ec, 0x0168, 0x6920, 0xa18c, 0x00ff, 0x6824, 0x080c,
--      0x29c7, 0x1130, 0x2110, 0x2009, 0x0000, 0x080c, 0x2e8b, 0x0018,
--      0xa085, 0x0001, 0x0008, 0xa006, 0x00de, 0x0005, 0x2069, 0xcc8d,
--      0x6800, 0xa082, 0x0010, 0x1228, 0x6013, 0x0000, 0xa085, 0x0001,
--      0x0008, 0xa006, 0x0005, 0x6013, 0x0000, 0x2069, 0xcc8c, 0x6808,
--      0xa084, 0xff00, 0xa086, 0x0800, 0x1140, 0x6800, 0xa084, 0x00ff,
--      0xa08e, 0x0014, 0x0110, 0xa08e, 0x0010, 0x0005, 0x6004, 0xa0b2,
--      0x0080, 0x1a0c, 0x1519, 0xa1b6, 0x0013, 0x1130, 0x2008, 0xa1b2,
--      0x0040, 0x1a04, 0xb7b0, 0x0092, 0xa1b6, 0x0027, 0x0120, 0xa1b6,
--      0x0014, 0x190c, 0x1519, 0x2001, 0x0007, 0x080c, 0x52be, 0x080c,
--      0x7db1, 0x080c, 0xae4d, 0x080c, 0x7e94, 0x0005, 0xb70e, 0xb710,
--      0xb70e, 0xb70e, 0xb70e, 0xb710, 0xb722, 0xb7a9, 0xb772, 0xb7a9,
--      0xb785, 0xb7a9, 0xb722, 0xb7a9, 0xb7a1, 0xb7a9, 0xb7a1, 0xb7a9,
--      0xb7a9, 0xb70e, 0xb70e, 0xb70e, 0xb70e, 0xb70e, 0xb70e, 0xb70e,
--      0xb70e, 0xb70e, 0xb70e, 0xb70e, 0xb710, 0xb70e, 0xb7a9, 0xb70e,
--      0xb70e, 0xb7a9, 0xb70e, 0xb7a6, 0xb7a9, 0xb70e, 0xb70e, 0xb70e,
--      0xb70e, 0xb7a9, 0xb7a9, 0xb70e, 0xb7a9, 0xb7a9, 0xb70e, 0xb71c,
--      0xb70e, 0xb70e, 0xb70e, 0xb70e, 0xb7a5, 0xb7a9, 0xb70e, 0xb70e,
--      0xb7a9, 0xb7a9, 0xb70e, 0xb70e, 0xb70e, 0xb70e, 0x080c, 0x1519,
--      0x080c, 0x7db1, 0x2001, 0xc8fd, 0x2004, 0x6016, 0x6003, 0x0002,
--      0x080c, 0x7e94, 0x0804, 0xb7af, 0x2001, 0x0000, 0x080c, 0x527f,
--      0x0804, 0xb7a9, 0x00f6, 0x2079, 0xc652, 0x7804, 0x00fe, 0xd0ac,
--      0x1904, 0xb7a9, 0x2001, 0x0000, 0x080c, 0x527f, 0x6018, 0xa080,
--      0x0004, 0x2004, 0xa086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0xc600,
--      0x7898, 0x8000, 0x789a, 0x00fe, 0x00e0, 0x00c6, 0x6018, 0x2060,
--      0x6000, 0xd0f4, 0x1140, 0x6010, 0xa005, 0x0128, 0x00ce, 0x080c,
--      0x40ef, 0x0804, 0xb7a9, 0x00ce, 0x2001, 0xc600, 0x2004, 0xa086,
--      0x0002, 0x1138, 0x00f6, 0x2079, 0xc600, 0x7898, 0x8000, 0x789a,
--      0x00fe, 0x2001, 0x0002, 0x080c, 0x5291, 0x080c, 0x7db1, 0x601f,
--      0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79df, 0x080c,
--      0x7e94, 0x00c6, 0x6118, 0x2160, 0x2009, 0x0001, 0x080c, 0x6fb9,
--      0x00ce, 0x04e8, 0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa6b4,
--      0xff00, 0x8637, 0xa686, 0x0006, 0x0560, 0xa686, 0x0004, 0x0548,
--      0x080c, 0x7669, 0x2001, 0x0004, 0x0410, 0x2001, 0xc600, 0x2004,
--      0xa086, 0x0003, 0x1110, 0x080c, 0x40ef, 0x2001, 0x0006, 0x04a1,
--      0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa6b4, 0xff00, 0x8637,
--      0xa686, 0x0006, 0x0170, 0x2001, 0x0006, 0x0048, 0x2001, 0x0004,
--      0x0030, 0x2001, 0x0006, 0x0401, 0x0020, 0x0018, 0x0010, 0x080c,
--      0x52be, 0x080c, 0x7db1, 0x080c, 0x95dc, 0x080c, 0x7e94, 0x0005,
--      0x2600, 0x0002, 0xb7bb, 0xb7bb, 0xb7bb, 0xb7bb, 0xb7bb, 0xb7bd,
--      0xb7bb, 0xb7bd, 0xb7bb, 0x080c, 0x1519, 0x080c, 0x7db1, 0x080c,
--      0x95dc, 0x080c, 0x7e94, 0x0005, 0x0016, 0x00d6, 0x6118, 0x2168,
--      0x6900, 0xd184, 0x0140, 0x080c, 0x5291, 0x2001, 0x0000, 0x080c,
--      0x527f, 0x080c, 0x2e6c, 0x00de, 0x001e, 0x0005, 0x00d6, 0x6618,
--      0x2668, 0x6804, 0xa084, 0xff00, 0x8007, 0x00de, 0xa0b2, 0x000c,
--      0x1a0c, 0x1519, 0xa1b6, 0x0015, 0x1110, 0x003b, 0x0028, 0xa1b6,
--      0x0016, 0x190c, 0x1519, 0x006b, 0x0005, 0x9cd3, 0x9cd3, 0x9cd3,
--      0x9cd3, 0x9cd3, 0x9cd3, 0xb846, 0xb805, 0x9cd3, 0x9cd3, 0x9cd3,
--      0x9cd3, 0x9cd3, 0x9cd3, 0x9cd3, 0x9cd3, 0x9cd3, 0x9cd3, 0xb846,
--      0xb84d, 0x9cd3, 0x9cd3, 0x9cd3, 0x9cd3, 0x00f6, 0x2079, 0xc652,
--      0x7804, 0xd0ac, 0x11e0, 0x6018, 0xa07d, 0x01c8, 0x7800, 0xd0f4,
--      0x1118, 0x7810, 0xa005, 0x1198, 0x2001, 0x0000, 0x080c, 0x527f,
--      0x2001, 0x0002, 0x080c, 0x5291, 0x601f, 0x0001, 0x6003, 0x0001,
--      0x6007, 0x0002, 0x080c, 0x79df, 0x080c, 0x7e94, 0x00e8, 0x2011,
--      0xcc83, 0x2204, 0x8211, 0x220c, 0x080c, 0x29c7, 0x11a8, 0x00c6,
--      0x080c, 0x533d, 0x0120, 0x00ce, 0x080c, 0x95dc, 0x0068, 0x6010,
--      0x0006, 0x6014, 0x0006, 0x080c, 0x4f47, 0x000e, 0x6016, 0x000e,
--      0x6012, 0x00ce, 0x080c, 0x95dc, 0x00fe, 0x0005, 0x6604, 0xa6b6,
--      0x001e, 0x1110, 0x080c, 0x95dc, 0x0005, 0x080c, 0x9faf, 0x1138,
--      0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x79df, 0x0010, 0x080c,
--      0x95dc, 0x0005, 0x6004, 0xa08a, 0x0080, 0x1a0c, 0x1519, 0x080c,
--      0x7db1, 0x080c, 0xae4d, 0x080c, 0x7e94, 0x0005, 0xa182, 0x0040,
--      0x0002, 0xb87c, 0xb87c, 0xb87c, 0xb87c, 0xb87e, 0xb87c, 0xb87c,
--      0xb87c, 0xb87c, 0xb87c, 0xb87c, 0xb87c, 0xb87c, 0xb87c, 0xb87c,
--      0xb87c, 0xb87c, 0xb87c, 0xb87c, 0x080c, 0x1519, 0x00d6, 0x00e6,
--      0x00f6, 0x0156, 0x0046, 0x0026, 0x6218, 0xa280, 0x002f, 0x2004,
--      0xa005, 0x0120, 0x2021, 0x0000, 0x080c, 0xc3b7, 0x6106, 0x2071,
--      0xcc80, 0x7444, 0xa4a4, 0xff00, 0x0904, 0xb8e2, 0xa486, 0x2000,
--      0x1130, 0x2009, 0x0001, 0x2011, 0x0200, 0x080c, 0x712e, 0x080c,
--      0x1602, 0x090c, 0x1519, 0x6003, 0x0007, 0x2d00, 0x6837, 0x010d,
--      0x6803, 0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00, 0x685e, 0x6008,
--      0x68b2, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0x694a, 0x0016,
--      0xa084, 0xff00, 0x6846, 0x684f, 0x0000, 0x6853, 0x0000, 0x6857,
--      0x0036, 0x080c, 0x580a, 0x001e, 0xa486, 0x2000, 0x1130, 0x2019,
--      0x0017, 0x080c, 0xc100, 0x0804, 0xb93f, 0xa486, 0x0400, 0x1130,
--      0x2019, 0x0002, 0x080c, 0xc0b2, 0x0804, 0xb93f, 0xa486, 0x0200,
--      0x1110, 0x080c, 0xc097, 0xa486, 0x1000, 0x1110, 0x080c, 0xc0e5,
--      0x0804, 0xb93f, 0x2069, 0xc9bc, 0x6a00, 0xd284, 0x0904, 0xb9a6,
--      0xa284, 0x0300, 0x1904, 0xb99f, 0x6804, 0xa005, 0x0904, 0xb987,
--      0x2d78, 0x6003, 0x0007, 0x080c, 0x15e5, 0x0904, 0xb946, 0x7800,
--      0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6013, 0x0000, 0x6803,
--      0x0000, 0x6837, 0x0116, 0x683b, 0x0000, 0x6008, 0x68b2, 0x2c00,
--      0x684a, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0x6986, 0x6846,
--      0x7928, 0x698a, 0x792c, 0x698e, 0x7930, 0x6992, 0x7934, 0x6996,
--      0x6853, 0x003d, 0x7244, 0xa294, 0x0003, 0xa286, 0x0002, 0x1118,
--      0x684f, 0x0040, 0x0040, 0xa286, 0x0001, 0x1118, 0x684f, 0x0080,
--      0x0010, 0x684f, 0x0000, 0x20a9, 0x000a, 0x2001, 0xcc90, 0xad90,
--      0x0015, 0x200c, 0x810f, 0x2112, 0x8000, 0x8210, 0x1f04, 0xb931,
--      0x200c, 0x6982, 0x8000, 0x200c, 0x697e, 0x080c, 0x580a, 0x002e,
--      0x004e, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x0005, 0x2001, 0xc60e,
--      0x2004, 0xd084, 0x0120, 0x080c, 0x1602, 0x1904, 0xb8f7, 0x6013,
--      0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x7999, 0x080c,
--      0x7e94, 0x0c28, 0x2069, 0xcc92, 0x2d04, 0xa084, 0xff00, 0xa086,
--      0x1200, 0x11a8, 0x2069, 0xcc80, 0x686c, 0xa084, 0x00ff, 0x0016,
--      0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x001e, 0x6003, 0x0001,
--      0x6007, 0x0043, 0x080c, 0x7999, 0x080c, 0x7e94, 0x0840, 0x6868,
--      0x602a, 0x686c, 0x602e, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007,
--      0x0041, 0x080c, 0x7999, 0x080c, 0x7e94, 0x0804, 0xb93f, 0x2001,
--      0xc60d, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x407d,
--      0x6013, 0x0300, 0x0010, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007,
--      0x0041, 0x080c, 0x7999, 0x080c, 0x7e94, 0x0804, 0xb93f, 0x6013,
--      0x0500, 0x0c98, 0x6013, 0x0600, 0x0804, 0xb95a, 0x6013, 0x0200,
--      0x0804, 0xb95a, 0xa186, 0x0013, 0x1170, 0x6004, 0xa08a, 0x0040,
--      0x0a0c, 0x1519, 0xa08a, 0x0053, 0x1a0c, 0x1519, 0xa082, 0x0040,
--      0x2008, 0x0804, 0xba34, 0xa186, 0x0051, 0x0138, 0xa186, 0x0047,
--      0x11d8, 0x6004, 0xa086, 0x0041, 0x0518, 0x2001, 0x0109, 0x2004,
--      0xd084, 0x01f0, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026,
--      0x080c, 0x7873, 0x002e, 0x001e, 0x000e, 0x012e, 0x6000, 0xa086,
--      0x0002, 0x1170, 0x0804, 0xba77, 0xa186, 0x0027, 0x0120, 0xa186,
--      0x0014, 0x190c, 0x1519, 0x6004, 0xa082, 0x0040, 0x2008, 0x001a,
--      0x080c, 0x9623, 0x0005, 0xb9fe, 0xba00, 0xba00, 0xba24, 0xb9fe,
--      0xb9fe, 0xb9fe, 0xb9fe, 0xb9fe, 0xb9fe, 0xb9fe, 0xb9fe, 0xb9fe,
--      0xb9fe, 0xb9fe, 0xb9fe, 0xb9fe, 0xb9fe, 0xb9fe, 0x080c, 0x1519,
--      0x080c, 0x7db1, 0x080c, 0x7e94, 0x0036, 0x00d6, 0x6010, 0xa06d,
--      0x01c0, 0xad84, 0xf000, 0x01a8, 0x6003, 0x0002, 0x6018, 0x2004,
--      0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xc134, 0x6013, 0x0000,
--      0x6014, 0xa005, 0x1120, 0x2001, 0xc8fe, 0x2004, 0x6016, 0x6003,
--      0x0007, 0x00de, 0x003e, 0x0005, 0x00d6, 0x080c, 0x7db1, 0x080c,
--      0x7e94, 0x080c, 0xac8a, 0x0120, 0x6010, 0x2068, 0x080c, 0x1619,
--      0x080c, 0xae4d, 0x00de, 0x0005, 0x0002, 0xba48, 0xba65, 0xba51,
--      0xba71, 0xba48, 0xba48, 0xba48, 0xba48, 0xba48, 0xba48, 0xba48,
--      0xba48, 0xba48, 0xba48, 0xba48, 0xba48, 0xba48, 0xba48, 0xba48,
--      0x080c, 0x1519, 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400,
--      0x200a, 0x080c, 0x7db1, 0x6010, 0xa080, 0x0013, 0x2004, 0xd0b4,
--      0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c, 0x960c, 0x0010,
--      0x6003, 0x0002, 0x080c, 0x7e94, 0x0005, 0x080c, 0x7db1, 0x080c,
--      0xc372, 0x1120, 0x080c, 0x7103, 0x080c, 0x95dc, 0x080c, 0x7e94,
--      0x0005, 0x080c, 0x7db1, 0x2009, 0x0041, 0x0804, 0xbbc0, 0xa182,
--      0x0040, 0x0002, 0xba8d, 0xba8f, 0xba8d, 0xba8d, 0xba8d, 0xba8d,
--      0xba8d, 0xba90, 0xba8d, 0xba8d, 0xba8d, 0xba8d, 0xba8d, 0xba8d,
--      0xba8d, 0xba8d, 0xba8d, 0xba9b, 0xba8d, 0x080c, 0x1519, 0x0005,
--      0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
--      0x080c, 0x1870, 0x0005, 0x00d6, 0x080c, 0x7103, 0x00de, 0x080c,
--      0xc3d5, 0x080c, 0x95dc, 0x0005, 0xa182, 0x0040, 0x0002, 0xbaba,
--      0xbaba, 0xbaba, 0xbaba, 0xbaba, 0xbaba, 0xbaba, 0xbabc, 0xbaba,
--      0xbabf, 0xbaf8, 0xbaba, 0xbaba, 0xbaba, 0xbaba, 0xbaf8, 0xbaba,
--      0xbaba, 0xbaba, 0x080c, 0x1519, 0x080c, 0x9623, 0x0005, 0x2001,
--      0xc672, 0x2004, 0xd0e4, 0x0158, 0x2001, 0x0100, 0x2004, 0xa082,
--      0x0005, 0x0228, 0x2001, 0x011f, 0x2004, 0x6036, 0x0010, 0x6037,
--      0x0000, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6010, 0x00d6, 0x2068,
--      0x684c, 0xd0fc, 0x0150, 0xa08c, 0x0003, 0xa18e, 0x0002, 0x0168,
--      0x2009, 0x0041, 0x00de, 0x0804, 0xbbc0, 0x6003, 0x0007, 0x6017,
--      0x0000, 0x080c, 0x7103, 0x00de, 0x0005, 0x080c, 0xc372, 0x0110,
--      0x00de, 0x0005, 0x080c, 0x7103, 0x080c, 0x95dc, 0x00de, 0x0ca0,
--      0x0036, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6010, 0x00d6, 0x2068,
--      0x6018, 0x2004, 0xd0bc, 0x0188, 0x684c, 0xa084, 0x0003, 0xa086,
--      0x0002, 0x0140, 0x687c, 0x632c, 0xa31a, 0x632e, 0x6880, 0x6328,
--      0xa31b, 0x632a, 0x6003, 0x0002, 0x0080, 0x2019, 0x0004, 0x080c,
--      0xc134, 0x6014, 0xa005, 0x1128, 0x2001, 0xc8fe, 0x2004, 0x8003,
--      0x6016, 0x6013, 0x0000, 0x6003, 0x0007, 0x00de, 0x003e, 0x0005,
--      0xa186, 0x0013, 0x1150, 0x6004, 0xa086, 0x0042, 0x190c, 0x1519,
--      0x080c, 0x7db1, 0x080c, 0x7e94, 0x0005, 0xa186, 0x0027, 0x0118,
--      0xa186, 0x0014, 0x1180, 0x6004, 0xa086, 0x0042, 0x190c, 0x1519,
--      0x2001, 0x0007, 0x080c, 0x52be, 0x080c, 0x7db1, 0x080c, 0xae4d,
--      0x080c, 0x7e94, 0x0005, 0xa182, 0x0040, 0x0002, 0xbb61, 0xbb61,
--      0xbb61, 0xbb61, 0xbb61, 0xbb61, 0xbb61, 0xbb63, 0xbb6f, 0xbb61,
--      0xbb61, 0xbb61, 0xbb61, 0xbb61, 0xbb61, 0xbb61, 0xbb61, 0xbb61,
--      0xbb61, 0x080c, 0x1519, 0x0036, 0x0046, 0x20e1, 0x0005, 0x3d18,
--      0x3e20, 0x2c10, 0x080c, 0x1870, 0x004e, 0x003e, 0x0005, 0x6010,
--      0x00d6, 0x2068, 0x6810, 0x6a14, 0x0006, 0x0046, 0x0056, 0x6c7c,
--      0xa422, 0x6d80, 0x2200, 0xa52b, 0x602c, 0xa420, 0x642e, 0x6028,
--      0xa529, 0x652a, 0x005e, 0x004e, 0x000e, 0xa20d, 0x1178, 0x684c,
--      0xd0fc, 0x0120, 0x2009, 0x0041, 0x00de, 0x0490, 0x6003, 0x0007,
--      0x6017, 0x0000, 0x080c, 0x7103, 0x00de, 0x0005, 0x0006, 0x00f6,
--      0x2c78, 0x080c, 0x56c3, 0x00fe, 0x000e, 0x0120, 0x6003, 0x0002,
--      0x00de, 0x0005, 0x2009, 0xc60d, 0x210c, 0xd19c, 0x0118, 0x6003,
--      0x0007, 0x0010, 0x6003, 0x0006, 0x0021, 0x080c, 0x7105, 0x00de,
--      0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000, 0x8212, 0xa291, 0x0000,
--      0x2009, 0x0009, 0x0010, 0x2009, 0x0015, 0x6a6a, 0x6866, 0x0005,
--      0xa182, 0x0040, 0x0208, 0x0062, 0xa186, 0x0013, 0x0120, 0xa186,
--      0x0014, 0x190c, 0x1519, 0x6020, 0xd0dc, 0x090c, 0x1519, 0x0005,
--      0xbbe3, 0xbbea, 0xbbf6, 0xbc02, 0xbbe3, 0xbbe3, 0xbbe3, 0xbc11,
--      0xbbe3, 0xbbe5, 0xbbe5, 0xbbe3, 0xbbe3, 0xbbe3, 0xbbe3, 0xbbe5,
--      0xbbe3, 0xbbe5, 0xbbe3, 0x080c, 0x1519, 0x6020, 0xd0dc, 0x090c,
--      0x1519, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x7999, 0x0126,
--      0x2091, 0x8000, 0x080c, 0x7e94, 0x012e, 0x0005, 0x6003, 0x0001,
--      0x6106, 0x080c, 0x7999, 0x0126, 0x2091, 0x8000, 0x080c, 0x7e94,
--      0x012e, 0x0005, 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x2068,
--      0x0126, 0x2091, 0x8000, 0x080c, 0x79fc, 0x080c, 0x7f6e, 0x012e,
--      0x0005, 0xa016, 0x080c, 0x1870, 0x0005, 0x0126, 0x2091, 0x8000,
--      0x0036, 0x00d6, 0xa182, 0x0040, 0x0023, 0x00de, 0x003e, 0x012e,
--      0x0005, 0xbc31, 0xbc33, 0xbc45, 0xbc60, 0xbc31, 0xbc31, 0xbc31,
--      0xbc75, 0xbc31, 0xbc31, 0xbc31, 0xbc31, 0xbc31, 0xbc31, 0xbc31,
--      0xbc31, 0x080c, 0x1519, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x01f8,
--      0xa09c, 0x0003, 0xa39e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106,
--      0x080c, 0x7999, 0x080c, 0x7e94, 0x0498, 0x6010, 0x2068, 0x684c,
--      0xd0fc, 0x0168, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0140, 0x6003,
--      0x0001, 0x6106, 0x080c, 0x7999, 0x080c, 0x7e94, 0x0408, 0x6013,
--      0x0000, 0x6017, 0x0000, 0x2019, 0x0004, 0x080c, 0xc134, 0x00c0,
--      0x6010, 0x2068, 0x684c, 0xd0fc, 0x0d90, 0xa09c, 0x0003, 0xa39e,
--      0x0003, 0x0d68, 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x2068,
--      0x080c, 0x79fc, 0x080c, 0x7f6e, 0x0018, 0xa016, 0x080c, 0x1870,
--      0x0005, 0x080c, 0x7db1, 0x6110, 0x81ff, 0x0158, 0x00d6, 0x2168,
--      0x080c, 0xc4ca, 0x0036, 0x2019, 0x0029, 0x080c, 0xc134, 0x003e,
--      0x00de, 0x080c, 0xae4d, 0x080c, 0x7e94, 0x0005, 0x080c, 0x7e47,
--      0x6110, 0x81ff, 0x0158, 0x00d6, 0x2168, 0x080c, 0xc4ca, 0x0036,
--      0x2019, 0x0029, 0x080c, 0xc134, 0x003e, 0x00de, 0x080c, 0xae4d,
--      0x080c, 0x7f6e, 0x0005, 0xa182, 0x0085, 0x0002, 0xbcaf, 0xbcad,
--      0xbcad, 0xbcbb, 0xbcad, 0xbcad, 0xbcad, 0x080c, 0x1519, 0x6003,
--      0x000b, 0x6106, 0x080c, 0x7999, 0x0126, 0x2091, 0x8000, 0x080c,
--      0x7e94, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xc36b, 0x0118,
--      0x080c, 0x95dc, 0x00c8, 0x2071, 0xcc80, 0x7224, 0x6212, 0x7220,
--      0x080c, 0xbfe2, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087,
--      0x7224, 0xa296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001,
--      0x080c, 0x7999, 0x080c, 0x7e94, 0x00ee, 0x002e, 0x0005, 0xa186,
--      0x0013, 0x1160, 0x6004, 0xa08a, 0x0085, 0x0a0c, 0x1519, 0xa08a,
--      0x008c, 0x1a0c, 0x1519, 0xa082, 0x0085, 0x00a2, 0xa186, 0x0027,
--      0x0130, 0xa186, 0x0014, 0x0118, 0x080c, 0x9623, 0x0050, 0x2001,
--      0x0007, 0x080c, 0x52be, 0x080c, 0x7db1, 0x080c, 0xae4d, 0x080c,
--      0x7e94, 0x0005, 0xbd09, 0xbd0b, 0xbd0b, 0xbd09, 0xbd09, 0xbd09,
--      0xbd09, 0x080c, 0x1519, 0x080c, 0x7db1, 0x080c, 0xae4d, 0x080c,
--      0x7e94, 0x0005, 0xa182, 0x0085, 0x0a0c, 0x1519, 0xa182, 0x008c,
--      0x1a0c, 0x1519, 0xa182, 0x0085, 0x0002, 0xbd24, 0xbd24, 0xbd24,
--      0xbd26, 0xbd24, 0xbd24, 0xbd24, 0x080c, 0x1519, 0x0005, 0xa186,
--      0x0013, 0x0148, 0xa186, 0x0014, 0x0130, 0xa186, 0x0027, 0x0118,
--      0x080c, 0x9623, 0x0030, 0x080c, 0x7db1, 0x080c, 0xae4d, 0x080c,
--      0x7e94, 0x0005, 0x0036, 0x080c, 0xc3d5, 0x603f, 0x0000, 0x2019,
--      0x000b, 0x0031, 0x601f, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005,
--      0x0126, 0x0036, 0x2091, 0x8000, 0x0086, 0x2c40, 0x0096, 0x2049,
--      0x0000, 0x080c, 0x8fc9, 0x009e, 0x008e, 0x1578, 0x0076, 0x2c38,
--      0x080c, 0x9068, 0x007e, 0x1548, 0x6000, 0xa086, 0x0000, 0x0528,
--      0x601c, 0xa086, 0x0007, 0x0508, 0x00d6, 0x6000, 0xa086, 0x0004,
--      0x1150, 0x080c, 0xc3d5, 0x601f, 0x0007, 0x2001, 0xc8fd, 0x2004,
--      0x6016, 0x080c, 0x1953, 0x6010, 0x2068, 0x080c, 0xac8a, 0x0110,
--      0x080c, 0xc134, 0x00de, 0x6013, 0x0000, 0x080c, 0xc3d5, 0x601f,
--      0x0007, 0x2001, 0xc8fd, 0x2004, 0x6016, 0x003e, 0x012e, 0x0005,
--      0x00f6, 0x00c6, 0x0036, 0x0156, 0x2079, 0xcc80, 0x7938, 0x783c,
--      0x080c, 0x29c7, 0x15b0, 0x0016, 0x00c6, 0x080c, 0x533d, 0x1578,
--      0x001e, 0x002e, 0x0026, 0x0016, 0x2019, 0x0029, 0x080c, 0x912b,
--      0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e, 0x007e,
--      0x001e, 0x0076, 0x2039, 0x0000, 0x080c, 0xbeea, 0x007e, 0x080c,
--      0x553e, 0x0026, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006,
--      0x0118, 0xa286, 0x0004, 0x1118, 0x62a0, 0x080c, 0x2eff, 0x002e,
--      0x001e, 0x080c, 0x4f47, 0x6612, 0x6516, 0xa006, 0x0010, 0x00ce,
--      0x001e, 0x015e, 0x003e, 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6,
--      0x00e6, 0x0016, 0x2009, 0xc621, 0x2104, 0xa086, 0x0074, 0x1904,
--      0xbe23, 0x2069, 0xcc8e, 0x690c, 0xa182, 0x0100, 0x06c0, 0x6908,
--      0xa184, 0x8000, 0x05e8, 0x2001, 0xc8e5, 0x2004, 0xa005, 0x1160,
--      0x6018, 0x2070, 0x7010, 0xa084, 0x00ff, 0x0118, 0x7000, 0xd0f4,
--      0x0118, 0xa184, 0x0800, 0x0560, 0x6910, 0xa18a, 0x0001, 0x0610,
--      0x6914, 0x2069, 0xccae, 0x6904, 0x81ff, 0x1198, 0x690c, 0xa182,
--      0x0100, 0x02a8, 0x6908, 0x81ff, 0x1178, 0x6910, 0xa18a, 0x0001,
--      0x0288, 0x6918, 0xa18a, 0x0001, 0x0298, 0x00d0, 0x6013, 0x0100,
--      0x00a0, 0x6013, 0x0300, 0x0088, 0x6013, 0x0500, 0x0070, 0x6013,
--      0x0700, 0x0058, 0x6013, 0x0900, 0x0040, 0x6013, 0x0b00, 0x0028,
--      0x6013, 0x0f00, 0x0010, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0008,
--      0xa006, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6,
--      0x0026, 0x0036, 0x0156, 0x6218, 0x2268, 0x6b04, 0xa394, 0x00ff,
--      0xa286, 0x0006, 0x0190, 0xa286, 0x0004, 0x0178, 0xa394, 0xff00,
--      0x8217, 0xa286, 0x0006, 0x0148, 0xa286, 0x0004, 0x0130, 0x00c6,
--      0x2d60, 0x080c, 0x534c, 0x00ce, 0x04c0, 0x2011, 0xcc96, 0xad98,
--      0x000a, 0x20a9, 0x0004, 0x080c, 0xa0fc, 0x1580, 0x2011, 0xcc9a,
--      0xad98, 0x0006, 0x20a9, 0x0004, 0x080c, 0xa0fc, 0x1538, 0x0046,
--      0x0016, 0x6aa0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0xc653,
--      0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xc183, 0x6800,
--      0xc0e5, 0x6802, 0x2019, 0x0029, 0x080c, 0x7b16, 0x0076, 0x2039,
--      0x0000, 0x080c, 0x7a0e, 0x2c08, 0x080c, 0xbeea, 0x007e, 0x2001,
--      0x0007, 0x080c, 0x52be, 0x001e, 0x004e, 0xa006, 0x015e, 0x003e,
--      0x002e, 0x00de, 0x00ce, 0x0005, 0x00d6, 0x2069, 0xcc8e, 0x6800,
--      0xa086, 0x0800, 0x0118, 0x6013, 0x0000, 0x0008, 0xa006, 0x00de,
--      0x0005, 0x00c6, 0x00f6, 0x0016, 0x0026, 0x0036, 0x0156, 0x2079,
--      0xcc8c, 0x7930, 0x7834, 0x080c, 0x29c7, 0x11a0, 0x080c, 0x533d,
--      0x1188, 0x2011, 0xcc90, 0xac98, 0x000a, 0x20a9, 0x0004, 0x080c,
--      0xa0fc, 0x1140, 0x2011, 0xcc94, 0xac98, 0x0006, 0x20a9, 0x0004,
--      0x080c, 0xa0fc, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00ce,
--      0x0005, 0x00c6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011,
--      0xcc83, 0x2204, 0x8211, 0x220c, 0x080c, 0x29c7, 0x11a0, 0x080c,
--      0x533d, 0x1188, 0x2011, 0xcc96, 0xac98, 0x000a, 0x20a9, 0x0004,
--      0x080c, 0xa0fc, 0x1140, 0x2011, 0xcc9a, 0xac98, 0x0006, 0x20a9,
--      0x0004, 0x080c, 0xa0fc, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e,
--      0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056,
--      0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029, 0xc930,
--      0x252c, 0x2021, 0xc936, 0x2424, 0x2061, 0xce00, 0x2071, 0xc600,
--      0x7648, 0x7068, 0x81ff, 0x0150, 0x0006, 0xa186, 0xca3c, 0x000e,
--      0x0128, 0x8001, 0xa602, 0x1a04, 0xbf6b, 0x0018, 0xa606, 0x0904,
--      0xbf6b, 0x2100, 0xac06, 0x0904, 0xbf62, 0x080c, 0xc1ab, 0x0904,
--      0xbf62, 0x671c, 0xa786, 0x0001, 0x0904, 0xbfb4, 0xa786, 0x0004,
--      0x0904, 0xbfb4, 0xa786, 0x0007, 0x05e8, 0x2500, 0xac06, 0x05d0,
--      0x2400, 0xac06, 0x05b8, 0x080c, 0xc1bb, 0x15a0, 0x88ff, 0x0118,
--      0x6050, 0xa906, 0x1578, 0x00d6, 0x6000, 0xa086, 0x0004, 0x1120,
--      0x0016, 0x080c, 0x1953, 0x001e, 0xa786, 0x0008, 0x1148, 0x080c,
--      0xae88, 0x1130, 0x080c, 0x9c02, 0x00de, 0x080c, 0xae4d, 0x00d0,
--      0x6010, 0x2068, 0x080c, 0xac8a, 0x0190, 0xa786, 0x0003, 0x1528,
--      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0xc4ca, 0x0016,
--      0x080c, 0xaefc, 0x080c, 0x580a, 0x001e, 0x080c, 0xae41, 0x00de,
--      0x080c, 0xae4d, 0xace0, 0x0018, 0x2001, 0xc617, 0x2004, 0xac02,
--      0x1210, 0x0804, 0xbefe, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e,
--      0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0xa786, 0x0006, 0x1150,
--      0xa386, 0x0005, 0x0128, 0x080c, 0xc4ca, 0x080c, 0xc134, 0x08f8,
--      0x00de, 0x0c00, 0xa786, 0x0009, 0x1548, 0x6000, 0xa086, 0x0004,
--      0x1128, 0x00c6, 0x080c, 0x761a, 0x00ce, 0x00e8, 0x6000, 0xa086,
--      0x0003, 0x11c8, 0x080c, 0x7e47, 0x00e6, 0x00d6, 0x6110, 0x2168,
--      0x080c, 0xac8a, 0x0140, 0x6018, 0x2070, 0x70b3, 0x0000, 0x70b7,
--      0x0000, 0x080c, 0x580a, 0x00de, 0x00ee, 0x00c6, 0x080c, 0x95dc,
--      0x00ce, 0x080c, 0x7f6e, 0x00de, 0x0804, 0xbf62, 0xa786, 0x000a,
--      0x0904, 0xbf52, 0x0804, 0xbf50, 0x080c, 0xc1bb, 0x1904, 0xbf62,
--      0x81ff, 0x0904, 0xbf62, 0xa180, 0x0001, 0x2004, 0xa086, 0x0018,
--      0x0138, 0xa180, 0x0001, 0x2004, 0xa086, 0x002d, 0x1904, 0xbf62,
--      0x6000, 0xa086, 0x0002, 0x1904, 0xbf62, 0x080c, 0xae77, 0x0138,
--      0x080c, 0xae88, 0x1904, 0xbf62, 0x080c, 0x9c02, 0x0038, 0x080c,
--      0x2e6c, 0x080c, 0xae88, 0x1110, 0x080c, 0x9c02, 0x080c, 0xae4d,
--      0x0804, 0xbf62, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0xa006,
--      0x080c, 0xc155, 0x001e, 0x0120, 0x601c, 0xa084, 0x000f, 0x001b,
--      0x00ee, 0x00ce, 0x0005, 0xbffb, 0xbffb, 0xbffb, 0xbffb, 0xbffb,
--      0xbffb, 0xbffd, 0xbffb, 0xa006, 0x0005, 0x0046, 0x0016, 0x7018,
--      0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00, 0x2009,
--      0x0020, 0x080c, 0xc183, 0x001e, 0x004e, 0x0036, 0x2019, 0x0002,
--      0x080c, 0xbd48, 0x003e, 0xa085, 0x0001, 0x0005, 0x2001, 0x0001,
--      0x080c, 0x527f, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,
--      0x2019, 0xc605, 0x2011, 0xcc96, 0x080c, 0xa0fc, 0x003e, 0x002e,
--      0x001e, 0x015e, 0xa005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086,
--      0x0076, 0x0066, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061,
--      0xce00, 0x2079, 0x0001, 0x8fff, 0x0904, 0xc08a, 0x2071, 0xc600,
--      0x7648, 0x7068, 0x8001, 0xa602, 0x1a04, 0xc08a, 0x88ff, 0x0128,
--      0x2800, 0xac06, 0x15b0, 0x2079, 0x0000, 0x080c, 0xc1ab, 0x0588,
--      0x2400, 0xac06, 0x0570, 0x671c, 0xa786, 0x0006, 0x1550, 0xa786,
--      0x0007, 0x0538, 0x88ff, 0x1140, 0x6018, 0xa206, 0x1510, 0x85ff,
--      0x0118, 0x6050, 0xa106, 0x11e8, 0x00d6, 0x6000, 0xa086, 0x0004,
--      0x1150, 0x080c, 0xc3d5, 0x601f, 0x0007, 0x2001, 0xc8fd, 0x2004,
--      0x6016, 0x080c, 0x1953, 0x6010, 0x2068, 0x080c, 0xac8a, 0x0120,
--      0x0046, 0x080c, 0xc134, 0x004e, 0x00de, 0x080c, 0xae4d, 0x88ff,
--      0x1198, 0xace0, 0x0018, 0x2001, 0xc617, 0x2004, 0xac02, 0x1210,
--      0x0804, 0xc03b, 0xa006, 0x012e, 0x002e, 0x006e, 0x007e, 0x008e,
--      0x00ce, 0x00ee, 0x00fe, 0x0005, 0xa8c5, 0x0001, 0x0ca0, 0x0076,
--      0x0056, 0x0086, 0x2041, 0x0000, 0x2029, 0x0001, 0x2c20, 0x2019,
--      0x0002, 0x6218, 0x0096, 0x2049, 0x0000, 0x080c, 0x8fc9, 0x009e,
--      0x008e, 0x2039, 0x0000, 0x080c, 0x9068, 0x080c, 0xc02c, 0x005e,
--      0x007e, 0x0005, 0x0026, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156,
--      0x2c20, 0x2128, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x0036,
--      0x080c, 0x533d, 0x11b0, 0x2c10, 0x0056, 0x0086, 0x2041, 0x0000,
--      0x2508, 0x2029, 0x0001, 0x0096, 0x2049, 0x0000, 0x080c, 0x8fc9,
--      0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x9068, 0x080c, 0xc02c,
--      0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xc0be, 0x015e, 0x00ce,
--      0x007e, 0x005e, 0x004e, 0x002e, 0x0005, 0x0076, 0x0056, 0x6218,
--      0x0086, 0x2041, 0x0000, 0x2029, 0x0001, 0x2019, 0x0048, 0x0096,
--      0x2049, 0x0000, 0x080c, 0x8fc9, 0x009e, 0x008e, 0x2039, 0x0000,
--      0x080c, 0x9068, 0x2c20, 0x080c, 0xc02c, 0x005e, 0x007e, 0x0005,
--      0x0026, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9,
--      0x007f, 0x2009, 0x0000, 0x0016, 0x0036, 0x080c, 0x533d, 0x11c0,
--      0x2c10, 0x0086, 0x2041, 0x0000, 0x2828, 0x0046, 0x2021, 0x0001,
--      0x080c, 0xc3b7, 0x004e, 0x0096, 0x2049, 0x0000, 0x080c, 0x8fc9,
--      0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x9068, 0x080c, 0xc02c,
--      0x003e, 0x001e, 0x8108, 0x1f04, 0xc10b, 0x015e, 0x00ce, 0x007e,
--      0x005e, 0x004e, 0x002e, 0x0005, 0x0016, 0x00f6, 0x3800, 0xd08c,
--      0x0130, 0xad82, 0x1000, 0x02b0, 0xad82, 0xc600, 0x0230, 0xad82,
--      0xfe00, 0x0280, 0xad82, 0xffff, 0x1268, 0x6800, 0xa07d, 0x0138,
--      0x6803, 0x0000, 0x6b52, 0x080c, 0x580a, 0x2f68, 0x0cb0, 0x6b52,
--      0x080c, 0x580a, 0x00fe, 0x001e, 0x0005, 0x00e6, 0x0046, 0x0036,
--      0x2061, 0xce00, 0xa005, 0x1138, 0x2071, 0xc600, 0x7448, 0x7068,
--      0x8001, 0xa402, 0x12d8, 0x2100, 0xac06, 0x0168, 0x6000, 0xa086,
--      0x0000, 0x0148, 0x6008, 0xa206, 0x1130, 0x6018, 0xa1a0, 0x0006,
--      0x2424, 0xa406, 0x0140, 0xace0, 0x0018, 0x2001, 0xc617, 0x2004,
--      0xac02, 0x1220, 0x0c40, 0xa085, 0x0001, 0x0008, 0xa006, 0x003e,
--      0x004e, 0x00ee, 0x0005, 0x00d6, 0x0006, 0x080c, 0x1602, 0x000e,
--      0x090c, 0x1519, 0x6837, 0x010d, 0x685e, 0x0026, 0x2010, 0x080c,
--      0xac7a, 0x2001, 0x0000, 0x0120, 0x2200, 0xa080, 0x0014, 0x2004,
--      0x002e, 0x684a, 0x6956, 0x6c46, 0x684f, 0x0000, 0x2001, 0xc905,
--      0x2004, 0x6852, 0xa006, 0x68b2, 0x6802, 0x683a, 0x685a, 0x080c,
--      0x580a, 0x00de, 0x0005, 0x6700, 0xa786, 0x0000, 0x0158, 0xa786,
--      0x0001, 0x0140, 0xa786, 0x000a, 0x0128, 0xa786, 0x0009, 0x0110,
--      0xa085, 0x0001, 0x0005, 0x00e6, 0x6018, 0x2070, 0x70a0, 0xa206,
--      0x00ee, 0x0005, 0x0016, 0x6004, 0xa08e, 0x001e, 0x11a0, 0x8007,
--      0x6130, 0xa18c, 0x00ff, 0xa105, 0x6032, 0x6007, 0x0085, 0x6003,
--      0x000b, 0x601f, 0x0005, 0x2001, 0xc8fe, 0x2004, 0x6016, 0x080c,
--      0x7999, 0x080c, 0x7e94, 0x001e, 0x0005, 0xe000, 0xe000, 0x0005,
--      0x6020, 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0xaf65, 0x0030,
--      0x080c, 0xc3d5, 0x080c, 0x7103, 0x080c, 0x95dc, 0x0005, 0xa280,
--      0x0007, 0x2004, 0xa084, 0x000f, 0x0002, 0xc1fe, 0xc1fe, 0xc1fe,
--      0xc203, 0xc1fe, 0xc200, 0xc200, 0xc1fe, 0xc200, 0xa006, 0x0005,
--      0x00c6, 0x2260, 0x00ce, 0xa085, 0x0001, 0x0005, 0xa280, 0x0007,
--      0x2004, 0xa084, 0x000f, 0x0002, 0xc215, 0xc215, 0xc215, 0xc215,
--      0xc215, 0xc215, 0xc220, 0xc215, 0xc215, 0x6007, 0x003b, 0x602b,
--      0x0009, 0x6013, 0x2a00, 0x6003, 0x0001, 0x080c, 0x7999, 0x0005,
--      0x00c6, 0x2260, 0x080c, 0xc3d5, 0x603f, 0x0000, 0x6020, 0xc0f4,
--      0xc0cc, 0x6022, 0x6037, 0x0000, 0x00ce, 0x00d6, 0x2268, 0xa186,
--      0x0007, 0x1904, 0xc27b, 0x6810, 0xa005, 0x0138, 0xa080, 0x0013,
--      0x2004, 0xd0fc, 0x1110, 0x00de, 0x08c0, 0x6007, 0x003a, 0x6003,
--      0x0001, 0x080c, 0x7999, 0x080c, 0x7e94, 0x00c6, 0x2d60, 0x6100,
--      0xa186, 0x0002, 0x1904, 0xc304, 0x6010, 0xa005, 0x1138, 0x6000,
--      0xa086, 0x0007, 0x190c, 0x1519, 0x0804, 0xc304, 0xa08c, 0xf000,
--      0x1130, 0x0028, 0x2068, 0x6800, 0xa005, 0x1de0, 0x2d00, 0xa080,
--      0x0013, 0x2004, 0xa084, 0x0003, 0xa086, 0x0002, 0x1180, 0x6010,
--      0x2068, 0x684c, 0xc0dc, 0xc0f4, 0x684e, 0x6850, 0xc0f4, 0xc0fc,
--      0x6852, 0x2009, 0x0043, 0x080c, 0xbbc0, 0x0804, 0xc304, 0x2009,
--      0x0041, 0x0804, 0xc2fe, 0xa186, 0x0005, 0x15f0, 0x6810, 0xa080,
--      0x0013, 0x2004, 0xd0bc, 0x1118, 0x00de, 0x0804, 0xc215, 0xd0b4,
--      0x0128, 0xd0fc, 0x090c, 0x1519, 0x0804, 0xc233, 0x6007, 0x003a,
--      0x6003, 0x0001, 0x080c, 0x7999, 0x080c, 0x7e94, 0x00c6, 0x2d60,
--      0x6100, 0xa186, 0x0002, 0x0120, 0xa186, 0x0004, 0x1904, 0xc304,
--      0x2071, 0xc96a, 0x7000, 0xa086, 0x0003, 0x1128, 0x7004, 0xac06,
--      0x1110, 0x7003, 0x0000, 0x6810, 0xa080, 0x0013, 0x200c, 0xc1f4,
--      0xc1dc, 0x2102, 0x8000, 0x200c, 0xc1f4, 0xc1fc, 0xc1bc, 0x2102,
--      0x2009, 0x0042, 0x0804, 0xc2fe, 0x0036, 0x00d6, 0x00d6, 0x080c,
--      0x1602, 0x003e, 0x090c, 0x1519, 0x6837, 0x010d, 0x6803, 0x0000,
--      0x683b, 0x0000, 0x685b, 0x0000, 0x6b5e, 0x6857, 0x0045, 0x2c00,
--      0x6862, 0x6034, 0x6872, 0x2360, 0x6020, 0xc0dd, 0x6022, 0x6018,
--      0xa080, 0x0028, 0x2004, 0xa084, 0x00ff, 0x8007, 0x6350, 0x6b4a,
--      0x6846, 0x684f, 0x0000, 0x6853, 0x0000, 0x6d6a, 0x6e66, 0x686f,
--      0x0001, 0x080c, 0x580a, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c,
--      0xbd48, 0x2d00, 0x600a, 0x601f, 0x0006, 0x6003, 0x0007, 0x6017,
--      0x0000, 0x603f, 0x0000, 0x00de, 0x003e, 0x0038, 0x603f, 0x0000,
--      0x6003, 0x0007, 0x080c, 0xbbc0, 0x00ce, 0x00de, 0x0005, 0xa186,
--      0x0013, 0x1128, 0x6004, 0xa082, 0x0085, 0x2008, 0x00c2, 0xa186,
--      0x0027, 0x1178, 0x080c, 0x7db1, 0x0036, 0x00d6, 0x6010, 0x2068,
--      0x2019, 0x0004, 0x080c, 0xc134, 0x00de, 0x003e, 0x080c, 0x7e94,
--      0x0005, 0xa186, 0x0014, 0x0d70, 0x080c, 0x9623, 0x0005, 0xc330,
--      0xc32e, 0xc32e, 0xc32e, 0xc32e, 0xc32e, 0xc330, 0x080c, 0x1519,
--      0x080c, 0x7db1, 0x6003, 0x000c, 0x080c, 0x7e94, 0x0005, 0xa182,
--      0x008c, 0x1220, 0xa182, 0x0085, 0x0208, 0x001a, 0x080c, 0x9623,
--      0x0005, 0xc348, 0xc348, 0xc348, 0xc348, 0xc34a, 0xc368, 0xc348,
--      0x080c, 0x1519, 0x00d6, 0x2c68, 0x080c, 0x9586, 0x01a0, 0x6003,
--      0x0001, 0x6007, 0x001e, 0x2009, 0xcc8e, 0x210c, 0x6136, 0x2009,
--      0xcc8f, 0x210c, 0x613a, 0x600b, 0xffff, 0x6918, 0x611a, 0x601f,
--      0x0004, 0x080c, 0x7999, 0x2d60, 0x080c, 0x95dc, 0x00de, 0x0005,
--      0x080c, 0x95dc, 0x0005, 0x00e6, 0x6018, 0x2070, 0x7000, 0xd0ec,
--      0x00ee, 0x0005, 0x6010, 0xa08c, 0xf000, 0x0904, 0xc3b6, 0xa080,
--      0x0013, 0x200c, 0xd1ec, 0x05d0, 0x2001, 0xc672, 0x2004, 0xd0ec,
--      0x05a8, 0x6003, 0x0002, 0x6020, 0xc0e5, 0x6022, 0xd1ac, 0x0180,
--      0x00f6, 0x2c78, 0x080c, 0x56bf, 0x00fe, 0x0150, 0x2001, 0xc8ff,
--      0x2004, 0x603e, 0x2009, 0xc672, 0x210c, 0xd1f4, 0x11e8, 0x0080,
--      0x2009, 0xc672, 0x210c, 0xd1f4, 0x0128, 0x6020, 0xc0e4, 0x6022,
--      0xa006, 0x00a0, 0x2001, 0xc8ff, 0x200c, 0x8103, 0xa100, 0x603e,
--      0x6018, 0xa088, 0x002f, 0x2104, 0xa005, 0x0118, 0xa088, 0x0003,
--      0x0cd0, 0x2c0a, 0x600f, 0x0000, 0xa085, 0x0001, 0x0005, 0x0016,
--      0x00c6, 0x00e6, 0x6150, 0xa2f0, 0x002f, 0x2e04, 0x2060, 0x8cff,
--      0x0180, 0x84ff, 0x1118, 0x6050, 0xa106, 0x1138, 0x600c, 0x2072,
--      0x080c, 0x7103, 0x080c, 0x95dc, 0x0010, 0xacf0, 0x0003, 0x2e64,
--      0x0c70, 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x6018, 0xa0e8,
--      0x002f, 0x2d04, 0xa005, 0x0140, 0xac06, 0x0120, 0x2d04, 0xa0e8,
--      0x0003, 0x0cb8, 0x600c, 0x206a, 0x00de, 0x0005, 0x0026, 0x0036,
--      0x0156, 0x2011, 0xc628, 0x2204, 0xa084, 0x00ff, 0x2019, 0xcc8e,
--      0x2334, 0xa636, 0x11d8, 0x8318, 0x2334, 0x2204, 0xa084, 0xff00,
--      0xa636, 0x11a0, 0x2011, 0xcc90, 0x6018, 0xa098, 0x000a, 0x20a9,
--      0x0004, 0x080c, 0xa0fc, 0x1150, 0x2011, 0xcc94, 0x6018, 0xa098,
--      0x0006, 0x20a9, 0x0004, 0x080c, 0xa0fc, 0x1100, 0x015e, 0x003e,
--      0x002e, 0x0005, 0x00e6, 0x2071, 0xc600, 0x080c, 0x4f02, 0x080c,
--      0x2c62, 0x00ee, 0x0005, 0x00d6, 0x080c, 0x15e5, 0x0500, 0x2d10,
--      0xa290, 0x000d, 0x2013, 0x0134, 0x8210, 0x2013, 0x0000, 0x8210,
--      0x703c, 0x2012, 0x8210, 0x7038, 0x2012, 0x8210, 0x2218, 0x7048,
--      0x2012, 0x8210, 0x704c, 0x2012, 0x8210, 0x7050, 0x2012, 0x8210,
--      0x7054, 0x2012, 0x2300, 0x080c, 0x3e8f, 0x080c, 0x580a, 0x00de,
--      0x0005, 0x00d6, 0x0026, 0x080c, 0x1602, 0x090c, 0x1519, 0xad90,
--      0x000e, 0x20a9, 0x000c, 0x22a0, 0xa016, 0x42a4, 0xa186, 0x0046,
--      0x1118, 0x6837, 0x0136, 0x0038, 0x6837, 0x0138, 0xa186, 0x0041,
--      0x0110, 0x684b, 0x0001, 0x7038, 0xa084, 0xff00, 0x7240, 0xa294,
--      0xff00, 0x8007, 0xa215, 0x6a6a, 0xa186, 0x0046, 0x1168, 0x7038,
--      0xa084, 0x00ff, 0x723c, 0xa294, 0xff00, 0xa215, 0x6a6e, 0x723c,
--      0xa294, 0x00ff, 0x6a72, 0x0060, 0x7040, 0xa084, 0x00ff, 0x7244,
--      0xa294, 0xff00, 0xa215, 0x6a6e, 0x7244, 0xa294, 0x00ff, 0x6a72,
--      0xa186, 0x0046, 0x1118, 0xae90, 0x0012, 0x0010, 0xae90, 0x001a,
--      0x2204, 0x8007, 0x6876, 0x8210, 0x2204, 0x8007, 0x687a, 0x8210,
--      0x2204, 0x8007, 0x687e, 0x8210, 0x2204, 0x8007, 0x6882, 0x8210,
--      0xa186, 0x0046, 0x1118, 0xae90, 0x0016, 0x0010, 0xae90, 0x001e,
--      0x2204, 0x8007, 0x6886, 0x8210, 0x2204, 0x8007, 0x688a, 0x8210,
--      0x2204, 0x8007, 0x688e, 0x8210, 0x2204, 0x8007, 0x6892, 0x8210,
--      0xa186, 0x0046, 0x1118, 0xae90, 0x0022, 0x0010, 0xae90, 0x002a,
--      0x00d6, 0xade8, 0x0025, 0x20a9, 0x0008, 0x2204, 0x8007, 0x206a,
--      0x8210, 0x8d68, 0x1f04, 0xc4bd, 0x00de, 0x002e, 0x080c, 0x580a,
--      0x00de, 0x0005, 0x00e6, 0x6018, 0x2070, 0x7000, 0xd0fc, 0x0108,
--      0x0011, 0x00ee, 0x0005, 0x6850, 0xc0e5, 0x6852, 0x0005, 0x00e6,
--      0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016, 0x0126,
--      0x2091, 0x8000, 0x2029, 0xc930, 0x252c, 0x2021, 0xc936, 0x2424,
--      0x2061, 0xce00, 0x2071, 0xc600, 0x7648, 0x7068, 0xa606, 0x0578,
--      0x671c, 0xa786, 0x0001, 0x0118, 0xa786, 0x0008, 0x1500, 0x2500,
--      0xac06, 0x01e8, 0x2400, 0xac06, 0x01d0, 0x080c, 0xc1ab, 0x01b8,
--      0x080c, 0xc1bb, 0x11a0, 0x6000, 0xa086, 0x0004, 0x1120, 0x0016,
--      0x080c, 0x1953, 0x001e, 0x080c, 0xae77, 0x1110, 0x080c, 0x2e6c,
--      0x080c, 0xae88, 0x1110, 0x080c, 0x9c02, 0x080c, 0xae4d, 0xace0,
--      0x0018, 0x2001, 0xc617, 0x2004, 0xac02, 0x1208, 0x0858, 0x012e,
--      0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00ee,
--      0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071,
--      0xc640, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118,
--      0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500, 0xa084, 0x0007,
--      0xa08e, 0x0003, 0x0148, 0xa08e, 0x0004, 0x0130, 0xa08e, 0x0005,
--      0x0118, 0x2071, 0xc64a, 0x04c9, 0x001e, 0x00ee, 0x000e, 0x012e,
--      0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071,
--      0xc640, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118,
--      0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500, 0xa084, 0x0007,
--      0xa08e, 0x0003, 0x0148, 0xa08e, 0x0004, 0x0130, 0xa08e, 0x0005,
--      0x0118, 0x2071, 0xc64a, 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e,
--      0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xc642,
--      0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04, 0x8000, 0x2072,
--      0x1220, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005, 0x00e6, 0x2071,
--      0xc640, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xc644, 0x0c69,
--      0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071,
--      0xc640, 0x7044, 0x8000, 0x7046, 0x00ee, 0x000e, 0x012e, 0x0005,
--      0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
--      0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
--      0x28b5
-+      0x080c, 0x53f8, 0x6007, 0x000a, 0x00de, 0x0804, 0xb403, 0x6007,
-+      0x000b, 0x00de, 0x0804, 0xb403, 0x080c, 0x2e46, 0x6007, 0x0001,
-+      0x0804, 0xb403, 0x080c, 0xc391, 0x1904, 0xb607, 0x080c, 0x2f69,
-+      0x1904, 0xb607, 0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa686,
-+      0x0707, 0x0d50, 0x0026, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009,
-+      0x0000, 0x080c, 0x2e8b, 0x002e, 0x6007, 0x000c, 0x0804, 0xb403,
-+      0x080c, 0x5724, 0x1140, 0x2001, 0xc635, 0x2004, 0xa084, 0x0009,
-+      0xa086, 0x0008, 0x1110, 0x0804, 0xb24c, 0x080c, 0x56a6, 0x6618,
-+      0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x06e8,
-+      0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x52d7, 0x002e, 0x0050,
-+      0xa6b4, 0xff00, 0x8637, 0xa686, 0x0004, 0x0120, 0xa686, 0x0006,
-+      0x1904, 0xb2f4, 0x080c, 0xbebf, 0x1120, 0x6007, 0x000e, 0x0804,
-+      0xb403, 0x0046, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff,
-+      0x8427, 0x0046, 0x080c, 0x2e46, 0x004e, 0x0016, 0xa006, 0x2009,
-+      0xc653, 0x210c, 0xd1a4, 0x0158, 0x2009, 0x0029, 0x080c, 0xc1a9,
-+      0x6018, 0x00d6, 0x2068, 0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e,
-+      0x004e, 0x6007, 0x0001, 0x0804, 0xb403, 0x2001, 0x0001, 0x080c,
-+      0x5298, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,
-+      0xc605, 0x2011, 0xcc90, 0x080c, 0xa11c, 0x003e, 0x002e, 0x001e,
-+      0x015e, 0xa005, 0x0168, 0xa6b4, 0xff00, 0x8637, 0xa682, 0x0004,
-+      0x0a04, 0xb2f4, 0xa682, 0x0007, 0x0a04, 0xb342, 0x0804, 0xb2f4,
-+      0x6013, 0x1900, 0x6007, 0x0009, 0x0804, 0xb403, 0x080c, 0x5724,
-+      0x1140, 0x2001, 0xc635, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008,
-+      0x1110, 0x0804, 0xb24c, 0x080c, 0x56a6, 0x6618, 0xa6b0, 0x0001,
-+      0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x06b8, 0xa6b4, 0xff00,
-+      0x8637, 0xa686, 0x0004, 0x0120, 0xa686, 0x0006, 0x1904, 0xb2f4,
-+      0x080c, 0xbee7, 0x1138, 0x080c, 0xbdf4, 0x1120, 0x6007, 0x0010,
-+      0x0804, 0xb403, 0x0046, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4,
-+      0x00ff, 0x8427, 0x0046, 0x080c, 0x2e46, 0x004e, 0x0016, 0xa006,
-+      0x2009, 0xc653, 0x210c, 0xd1a4, 0x0158, 0x2009, 0x0029, 0x080c,
-+      0xc1a9, 0x6018, 0x00d6, 0x2068, 0x6800, 0xc0e5, 0x6802, 0x00de,
-+      0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c, 0xc03c, 0x0140,
-+      0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0950, 0x0804, 0xb2f4,
-+      0x6013, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, 0x2f69, 0x1904,
-+      0xb607, 0x080c, 0xc391, 0x1904, 0xb607, 0x080c, 0xb66b, 0x1904,
-+      0xb2f4, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x79f8, 0x0005,
-+      0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x79f8, 0x0cc0, 0x6007,
-+      0x0005, 0x0cc0, 0x080c, 0xc391, 0x1904, 0xb607, 0x080c, 0x2f69,
-+      0x1904, 0xb607, 0x080c, 0xb66b, 0x1904, 0xb2f4, 0x6007, 0x0020,
-+      0x6003, 0x0001, 0x080c, 0x79f8, 0x0005, 0x080c, 0x2f69, 0x1904,
-+      0xb607, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x79f8, 0x0005,
-+      0x080c, 0xc391, 0x1904, 0xb607, 0x080c, 0x2f69, 0x1904, 0xb607,
-+      0x080c, 0xb66b, 0x1904, 0xb2f4, 0x0016, 0x0026, 0x2011, 0xcc91,
-+      0x2214, 0xa286, 0xffff, 0x0190, 0x2c08, 0x080c, 0xac9a, 0x01e0,
-+      0x2260, 0x2011, 0xcc90, 0x2214, 0x6008, 0xa206, 0x11a8, 0x6018,
-+      0xa190, 0x0006, 0x2214, 0xa206, 0x01e8, 0x0070, 0x2011, 0xcc90,
-+      0x2214, 0x2c08, 0xa006, 0x080c, 0xc17b, 0x11a0, 0x2011, 0xcc91,
-+      0x2214, 0xa286, 0xffff, 0x01c0, 0x2160, 0x6007, 0x0026, 0x6013,
-+      0x1700, 0x2011, 0xcc89, 0x2214, 0xa296, 0xffff, 0x1180, 0x6007,
-+      0x0025, 0x0068, 0x601c, 0xa086, 0x0007, 0x1d70, 0x6004, 0xa086,
-+      0x0024, 0x1110, 0x080c, 0x95fc, 0x2160, 0x6007, 0x0025, 0x6003,
-+      0x0001, 0x080c, 0x79f8, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001,
-+      0x080c, 0x5298, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,
-+      0x2019, 0xc605, 0x2011, 0xcc96, 0x080c, 0xa11c, 0x003e, 0x002e,
-+      0x001e, 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xb403, 0x080c,
-+      0x9e0e, 0x080c, 0x5f3b, 0x11b0, 0x0006, 0x0026, 0x0036, 0x080c,
-+      0x5f57, 0x1158, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600,
-+      0x2003, 0x0001, 0x080c, 0x5e73, 0x0010, 0x080c, 0x5f12, 0x003e,
-+      0x002e, 0x000e, 0x0005, 0x080c, 0x2f69, 0x1904, 0xb607, 0x080c,
-+      0xb66b, 0x1904, 0xb2f4, 0x6106, 0x080c, 0xb687, 0x6007, 0x002b,
-+      0x0804, 0xb403, 0x6007, 0x002c, 0x0804, 0xb403, 0x080c, 0xc391,
-+      0x1904, 0xb607, 0x080c, 0x2f69, 0x1904, 0xb607, 0x080c, 0xb66b,
-+      0x1904, 0xb2f4, 0x6106, 0x080c, 0xb68b, 0x1120, 0x6007, 0x002e,
-+      0x0804, 0xb403, 0x6007, 0x002f, 0x0804, 0xb403, 0x080c, 0x2f69,
-+      0x1904, 0xb607, 0x00e6, 0x00d6, 0x00c6, 0x6018, 0xa080, 0x0001,
-+      0x200c, 0xa184, 0x00ff, 0xa086, 0x0006, 0x0158, 0xa184, 0xff00,
-+      0x8007, 0xa086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804,
-+      0xb408, 0x2001, 0xc672, 0x2004, 0xd0e4, 0x0904, 0xb55d, 0x2071,
-+      0xcc8c, 0x7010, 0x6036, 0x7014, 0x603a, 0x7108, 0x720c, 0x2001,
-+      0xc653, 0x2004, 0xd0a4, 0x0140, 0x6018, 0x2068, 0x6810, 0xa106,
-+      0x1118, 0x6814, 0xa206, 0x01f8, 0x2001, 0xc653, 0x2004, 0xd0ac,
-+      0x1590, 0x2069, 0xc600, 0x6874, 0xa206, 0x1568, 0x6870, 0xa106,
-+      0x1550, 0x7210, 0x080c, 0xac9a, 0x0558, 0x080c, 0xc215, 0x0540,
-+      0x622a, 0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x79b2, 0x00ce,
-+      0x00de, 0x00ee, 0x0005, 0x7214, 0xa286, 0xffff, 0x0150, 0x080c,
-+      0xac9a, 0x01b0, 0xa280, 0x0002, 0x2004, 0x7110, 0xa106, 0x1180,
-+      0x0c08, 0x7210, 0x2c08, 0xa085, 0x0001, 0x080c, 0xc17b, 0x2c10,
-+      0x2160, 0x0130, 0x08b8, 0x6007, 0x0037, 0x6013, 0x1500, 0x08d8,
-+      0x6007, 0x0037, 0x6013, 0x1700, 0x08b0, 0x6007, 0x0012, 0x0898,
-+      0x080c, 0x2f69, 0x1904, 0xb607, 0x6018, 0xa080, 0x0001, 0x2004,
-+      0xa084, 0xff00, 0x8007, 0xa086, 0x0006, 0x1904, 0xb408, 0x00e6,
-+      0x00d6, 0x00c6, 0x2001, 0xc672, 0x2004, 0xd0e4, 0x0904, 0xb5c9,
-+      0x2069, 0xc600, 0x2071, 0xcc8c, 0x7008, 0x6036, 0x720c, 0x623a,
-+      0xa286, 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0xa085, 0x0001,
-+      0x080c, 0xc17b, 0x2c10, 0x00ce, 0x0588, 0x080c, 0xac9a, 0x0570,
-+      0x00c6, 0x0026, 0x2260, 0x080c, 0xa96d, 0x002e, 0x00ce, 0x7118,
-+      0xa18c, 0xff00, 0x810f, 0xa186, 0x0001, 0x0158, 0xa186, 0x0005,
-+      0x0118, 0xa186, 0x0007, 0x1178, 0xa280, 0x0004, 0x2004, 0xa005,
-+      0x0150, 0x0056, 0x7510, 0x7614, 0x080c, 0xc22c, 0x005e, 0x00ce,
-+      0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013,
-+      0x2a00, 0x6003, 0x0001, 0x080c, 0x79b2, 0x0c88, 0x6007, 0x003b,
-+      0x602b, 0x0009, 0x6013, 0x1700, 0x6003, 0x0001, 0x080c, 0x79b2,
-+      0x0c30, 0x6007, 0x003b, 0x602b, 0x000b, 0x6013, 0x0000, 0x0804,
-+      0xb533, 0x00e6, 0x0026, 0x080c, 0x5724, 0x0558, 0x080c, 0x56a6,
-+      0x080c, 0xc40c, 0x1520, 0x2071, 0xc600, 0x70d4, 0xc085, 0x70d6,
-+      0x00f6, 0x2079, 0x0100, 0x72a0, 0xa284, 0x00ff, 0x7072, 0x78e6,
-+      0xa284, 0xff00, 0x7274, 0xa205, 0x7076, 0x78ea, 0x00fe, 0x70df,
-+      0x0000, 0x2001, 0xc653, 0x2004, 0xd0a4, 0x0120, 0x2011, 0xc940,
-+      0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2c62, 0x0010, 0x080c,
-+      0xc438, 0x002e, 0x00ee, 0x080c, 0x95fc, 0x0804, 0xb407, 0x080c,
-+      0x95fc, 0x0005, 0x2600, 0x0002, 0xb615, 0xb649, 0xb65a, 0xb615,
-+      0xb615, 0xb617, 0xb630, 0xb615, 0xb615, 0x080c, 0x1519, 0x080c,
-+      0xc391, 0x1d68, 0x080c, 0x2f69, 0x1d50, 0x080c, 0xb66b, 0x1138,
-+      0x6007, 0x0045, 0x6003, 0x0001, 0x080c, 0x79f8, 0x0005, 0x080c,
-+      0x2e46, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x79f8, 0x0005,
-+      0x080c, 0x2f69, 0x19a0, 0x080c, 0x76a8, 0x1160, 0x2e00, 0xa080,
-+      0x0010, 0x2004, 0x8007, 0xd084, 0x0110, 0x080c, 0xc441, 0x080c,
-+      0x95fc, 0x0005, 0x2009, 0x0046, 0x080c, 0xc467, 0x080c, 0x95fc,
-+      0x0005, 0x080c, 0x2f69, 0x1904, 0xb607, 0x2009, 0x0041, 0x080c,
-+      0xc467, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x79f8, 0x080c,
-+      0x7ead, 0x0005, 0x080c, 0x2f69, 0x1904, 0xb607, 0x2009, 0x0042,
-+      0x080c, 0xc467, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x79f8,
-+      0x080c, 0x7ead, 0x0005, 0x00d6, 0x0066, 0x6618, 0x2668, 0x6e04,
-+      0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0170, 0xa686, 0x0004,
-+      0x0158, 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0128, 0xa686,
-+      0x0004, 0x0110, 0xa085, 0x0001, 0x006e, 0x00de, 0x0005, 0x00d6,
-+      0x0449, 0x00de, 0x0005, 0x00d6, 0x0491, 0x11f0, 0x680c, 0xa08c,
-+      0xff00, 0x6820, 0xa084, 0x00ff, 0xa115, 0x6212, 0x6824, 0x602a,
-+      0xd1e4, 0x0118, 0x2009, 0x0001, 0x0060, 0xd1ec, 0x0168, 0x6920,
-+      0xa18c, 0x00ff, 0x6824, 0x080c, 0x29c7, 0x1130, 0x2110, 0x2009,
-+      0x0000, 0x080c, 0x2e8b, 0x0018, 0xa085, 0x0001, 0x0008, 0xa006,
-+      0x00de, 0x0005, 0x2069, 0xcc8d, 0x6800, 0xa082, 0x0010, 0x1228,
-+      0x6013, 0x0000, 0xa085, 0x0001, 0x0008, 0xa006, 0x0005, 0x6013,
-+      0x0000, 0x2069, 0xcc8c, 0x6808, 0xa084, 0xff00, 0xa086, 0x0800,
-+      0x1140, 0x6800, 0xa084, 0x00ff, 0xa08e, 0x0014, 0x0110, 0xa08e,
-+      0x0010, 0x0005, 0x6004, 0xa0b2, 0x0080, 0x1a0c, 0x1519, 0xa1b6,
-+      0x0013, 0x1130, 0x2008, 0xa1b2, 0x0040, 0x1a04, 0xb7d4, 0x0092,
-+      0xa1b6, 0x0027, 0x0120, 0xa1b6, 0x0014, 0x190c, 0x1519, 0x2001,
-+      0x0007, 0x080c, 0x52d7, 0x080c, 0x7dca, 0x080c, 0xae6d, 0x080c,
-+      0x7ead, 0x0005, 0xb732, 0xb734, 0xb732, 0xb732, 0xb732, 0xb734,
-+      0xb746, 0xb7cd, 0xb796, 0xb7cd, 0xb7a9, 0xb7cd, 0xb746, 0xb7cd,
-+      0xb7c5, 0xb7cd, 0xb7c5, 0xb7cd, 0xb7cd, 0xb732, 0xb732, 0xb732,
-+      0xb732, 0xb732, 0xb732, 0xb732, 0xb732, 0xb732, 0xb732, 0xb732,
-+      0xb734, 0xb732, 0xb7cd, 0xb732, 0xb732, 0xb7cd, 0xb732, 0xb7ca,
-+      0xb7cd, 0xb732, 0xb732, 0xb732, 0xb732, 0xb7cd, 0xb7cd, 0xb732,
-+      0xb7cd, 0xb7cd, 0xb732, 0xb740, 0xb732, 0xb732, 0xb732, 0xb732,
-+      0xb7c9, 0xb7cd, 0xb732, 0xb732, 0xb7cd, 0xb7cd, 0xb732, 0xb732,
-+      0xb732, 0xb732, 0x080c, 0x1519, 0x080c, 0x7dca, 0x2001, 0xc8fd,
-+      0x2004, 0x6016, 0x6003, 0x0002, 0x080c, 0x7ead, 0x0804, 0xb7d3,
-+      0x2001, 0x0000, 0x080c, 0x5298, 0x0804, 0xb7cd, 0x00f6, 0x2079,
-+      0xc652, 0x7804, 0x00fe, 0xd0ac, 0x1904, 0xb7cd, 0x2001, 0x0000,
-+      0x080c, 0x5298, 0x6018, 0xa080, 0x0004, 0x2004, 0xa086, 0x00ff,
-+      0x1140, 0x00f6, 0x2079, 0xc600, 0x7898, 0x8000, 0x789a, 0x00fe,
-+      0x00e0, 0x00c6, 0x6018, 0x2060, 0x6000, 0xd0f4, 0x1140, 0x6010,
-+      0xa005, 0x0128, 0x00ce, 0x080c, 0x4108, 0x0804, 0xb7cd, 0x00ce,
-+      0x2001, 0xc600, 0x2004, 0xa086, 0x0002, 0x1138, 0x00f6, 0x2079,
-+      0xc600, 0x7898, 0x8000, 0x789a, 0x00fe, 0x2001, 0x0002, 0x080c,
-+      0x52aa, 0x080c, 0x7dca, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007,
-+      0x0002, 0x080c, 0x79f8, 0x080c, 0x7ead, 0x00c6, 0x6118, 0x2160,
-+      0x2009, 0x0001, 0x080c, 0x6fd2, 0x00ce, 0x04e8, 0x6618, 0x00d6,
-+      0x2668, 0x6e04, 0x00de, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006,
-+      0x0560, 0xa686, 0x0004, 0x0548, 0x080c, 0x7682, 0x2001, 0x0004,
-+      0x0410, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1110, 0x080c,
-+      0x4108, 0x2001, 0x0006, 0x04a1, 0x6618, 0x00d6, 0x2668, 0x6e04,
-+      0x00de, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0170, 0x2001,
-+      0x0006, 0x0048, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0401,
-+      0x0020, 0x0018, 0x0010, 0x080c, 0x52d7, 0x080c, 0x7dca, 0x080c,
-+      0x95fc, 0x080c, 0x7ead, 0x0005, 0x2600, 0x0002, 0xb7df, 0xb7df,
-+      0xb7df, 0xb7df, 0xb7df, 0xb7e1, 0xb7df, 0xb7e1, 0xb7df, 0x080c,
-+      0x1519, 0x080c, 0x7dca, 0x080c, 0x95fc, 0x080c, 0x7ead, 0x0005,
-+      0x0016, 0x00d6, 0x6118, 0x2168, 0x6900, 0xd184, 0x0140, 0x080c,
-+      0x52aa, 0x2001, 0x0000, 0x080c, 0x5298, 0x080c, 0x2e6c, 0x00de,
-+      0x001e, 0x0005, 0x00d6, 0x6618, 0x2668, 0x6804, 0xa084, 0xff00,
-+      0x8007, 0x00de, 0xa0b2, 0x000c, 0x1a0c, 0x1519, 0xa1b6, 0x0015,
-+      0x1110, 0x003b, 0x0028, 0xa1b6, 0x0016, 0x190c, 0x1519, 0x006b,
-+      0x0005, 0x9cf3, 0x9cf3, 0x9cf3, 0x9cf3, 0x9cf3, 0x9cf3, 0xb86a,
-+      0xb829, 0x9cf3, 0x9cf3, 0x9cf3, 0x9cf3, 0x9cf3, 0x9cf3, 0x9cf3,
-+      0x9cf3, 0x9cf3, 0x9cf3, 0xb86a, 0xb871, 0x9cf3, 0x9cf3, 0x9cf3,
-+      0x9cf3, 0x00f6, 0x2079, 0xc652, 0x7804, 0xd0ac, 0x11e0, 0x6018,
-+      0xa07d, 0x01c8, 0x7800, 0xd0f4, 0x1118, 0x7810, 0xa005, 0x1198,
-+      0x2001, 0x0000, 0x080c, 0x5298, 0x2001, 0x0002, 0x080c, 0x52aa,
-+      0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79f8,
-+      0x080c, 0x7ead, 0x00e8, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c,
-+      0x080c, 0x29c7, 0x11a8, 0x00c6, 0x080c, 0x5356, 0x0120, 0x00ce,
-+      0x080c, 0x95fc, 0x0068, 0x6010, 0x0006, 0x6014, 0x0006, 0x080c,
-+      0x4f60, 0x000e, 0x6016, 0x000e, 0x6012, 0x00ce, 0x080c, 0x95fc,
-+      0x00fe, 0x0005, 0x6604, 0xa6b6, 0x001e, 0x1110, 0x080c, 0x95fc,
-+      0x0005, 0x080c, 0x9fcf, 0x1138, 0x6003, 0x0001, 0x6007, 0x0001,
-+      0x080c, 0x79f8, 0x0010, 0x080c, 0x95fc, 0x0005, 0x6004, 0xa08a,
-+      0x0080, 0x1a0c, 0x1519, 0x080c, 0x7dca, 0x080c, 0xae6d, 0x080c,
-+      0x7ead, 0x0005, 0xa182, 0x0040, 0x0002, 0xb8a0, 0xb8a0, 0xb8a0,
-+      0xb8a0, 0xb8a2, 0xb8a0, 0xb8a0, 0xb8a0, 0xb8a0, 0xb8a0, 0xb8a0,
-+      0xb8a0, 0xb8a0, 0xb8a0, 0xb8a0, 0xb8a0, 0xb8a0, 0xb8a0, 0xb8a0,
-+      0x080c, 0x1519, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0046, 0x0026,
-+      0x6218, 0xa280, 0x002f, 0x2004, 0xa005, 0x0120, 0x2021, 0x0000,
-+      0x080c, 0xc3dd, 0x6106, 0x2071, 0xcc80, 0x7444, 0xa4a4, 0xff00,
-+      0x0904, 0xb906, 0xa486, 0x2000, 0x1130, 0x2009, 0x0001, 0x2011,
-+      0x0200, 0x080c, 0x7147, 0x080c, 0x1602, 0x090c, 0x1519, 0x6003,
-+      0x0007, 0x2d00, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000,
-+      0x6c5a, 0x2c00, 0x685e, 0x6008, 0x68b2, 0x6018, 0x2078, 0x78a0,
-+      0x8007, 0x7130, 0x694a, 0x0016, 0xa084, 0xff00, 0x6846, 0x684f,
-+      0x0000, 0x6853, 0x0000, 0x6857, 0x0036, 0x080c, 0x5823, 0x001e,
-+      0xa486, 0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xc126, 0x0804,
-+      0xb963, 0xa486, 0x0400, 0x1130, 0x2019, 0x0002, 0x080c, 0xc0d8,
-+      0x0804, 0xb963, 0xa486, 0x0200, 0x1110, 0x080c, 0xc0bd, 0xa486,
-+      0x1000, 0x1110, 0x080c, 0xc10b, 0x0804, 0xb963, 0x2069, 0xc9bc,
-+      0x6a00, 0xd284, 0x0904, 0xb9ca, 0xa284, 0x0300, 0x1904, 0xb9c3,
-+      0x6804, 0xa005, 0x0904, 0xb9ab, 0x2d78, 0x6003, 0x0007, 0x080c,
-+      0x15e5, 0x0904, 0xb96a, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001,
-+      0x7806, 0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b,
-+      0x0000, 0x6008, 0x68b2, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0,
-+      0x8007, 0x7130, 0x6986, 0x6846, 0x7928, 0x698a, 0x792c, 0x698e,
-+      0x7930, 0x6992, 0x7934, 0x6996, 0x6853, 0x003d, 0x7244, 0xa294,
-+      0x0003, 0xa286, 0x0002, 0x1118, 0x684f, 0x0040, 0x0040, 0xa286,
-+      0x0001, 0x1118, 0x684f, 0x0080, 0x0010, 0x684f, 0x0000, 0x20a9,
-+      0x000a, 0x2001, 0xcc90, 0xad90, 0x0015, 0x200c, 0x810f, 0x2112,
-+      0x8000, 0x8210, 0x1f04, 0xb955, 0x200c, 0x6982, 0x8000, 0x200c,
-+      0x697e, 0x080c, 0x5823, 0x002e, 0x004e, 0x015e, 0x00fe, 0x00ee,
-+      0x00de, 0x0005, 0x2001, 0xc60e, 0x2004, 0xd084, 0x0120, 0x080c,
-+      0x1602, 0x1904, 0xb91b, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007,
-+      0x0041, 0x080c, 0x79b2, 0x080c, 0x7ead, 0x0c28, 0x2069, 0xcc92,
-+      0x2d04, 0xa084, 0xff00, 0xa086, 0x1200, 0x11a8, 0x2069, 0xcc80,
-+      0x686c, 0xa084, 0x00ff, 0x0016, 0x6110, 0xa18c, 0x0700, 0xa10d,
-+      0x6112, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043, 0x080c, 0x79b2,
-+      0x080c, 0x7ead, 0x0840, 0x6868, 0x602a, 0x686c, 0x602e, 0x6013,
-+      0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x79b2, 0x080c,
-+      0x7ead, 0x0804, 0xb963, 0x2001, 0xc60d, 0x2004, 0xd0ec, 0x0120,
-+      0x2011, 0x8049, 0x080c, 0x4096, 0x6013, 0x0300, 0x0010, 0x6013,
-+      0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x79b2, 0x080c,
-+      0x7ead, 0x0804, 0xb963, 0x6013, 0x0500, 0x0c98, 0x6013, 0x0600,
-+      0x0804, 0xb97e, 0x6013, 0x0200, 0x0804, 0xb97e, 0xa186, 0x0013,
-+      0x1170, 0x6004, 0xa08a, 0x0040, 0x0a0c, 0x1519, 0xa08a, 0x0053,
-+      0x1a0c, 0x1519, 0xa082, 0x0040, 0x2008, 0x0804, 0xba58, 0xa186,
-+      0x0051, 0x0138, 0xa186, 0x0047, 0x11d8, 0x6004, 0xa086, 0x0041,
-+      0x0518, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0, 0x0126, 0x2091,
-+      0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x788c, 0x002e, 0x001e,
-+      0x000e, 0x012e, 0x6000, 0xa086, 0x0002, 0x1170, 0x0804, 0xba9b,
-+      0xa186, 0x0027, 0x0120, 0xa186, 0x0014, 0x190c, 0x1519, 0x6004,
-+      0xa082, 0x0040, 0x2008, 0x001a, 0x080c, 0x9643, 0x0005, 0xba22,
-+      0xba24, 0xba24, 0xba48, 0xba22, 0xba22, 0xba22, 0xba22, 0xba22,
-+      0xba22, 0xba22, 0xba22, 0xba22, 0xba22, 0xba22, 0xba22, 0xba22,
-+      0xba22, 0xba22, 0x080c, 0x1519, 0x080c, 0x7dca, 0x080c, 0x7ead,
-+      0x0036, 0x00d6, 0x6010, 0xa06d, 0x01c0, 0xad84, 0xf000, 0x01a8,
-+      0x6003, 0x0002, 0x6018, 0x2004, 0xd0bc, 0x1178, 0x2019, 0x0004,
-+      0x080c, 0xc15a, 0x6013, 0x0000, 0x6014, 0xa005, 0x1120, 0x2001,
-+      0xc8fe, 0x2004, 0x6016, 0x6003, 0x0007, 0x00de, 0x003e, 0x0005,
-+      0x00d6, 0x080c, 0x7dca, 0x080c, 0x7ead, 0x080c, 0xacaa, 0x0120,
-+      0x6010, 0x2068, 0x080c, 0x1619, 0x080c, 0xae6d, 0x00de, 0x0005,
-+      0x0002, 0xba6c, 0xba89, 0xba75, 0xba95, 0xba6c, 0xba6c, 0xba6c,
-+      0xba6c, 0xba6c, 0xba6c, 0xba6c, 0xba6c, 0xba6c, 0xba6c, 0xba6c,
-+      0xba6c, 0xba6c, 0xba6c, 0xba6c, 0x080c, 0x1519, 0x6010, 0xa088,
-+      0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x080c, 0x7dca, 0x6010,
-+      0xa080, 0x0013, 0x2004, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009,
-+      0x0043, 0x080c, 0x962c, 0x0010, 0x6003, 0x0002, 0x080c, 0x7ead,
-+      0x0005, 0x080c, 0x7dca, 0x080c, 0xc398, 0x1120, 0x080c, 0x711c,
-+      0x080c, 0x95fc, 0x080c, 0x7ead, 0x0005, 0x080c, 0x7dca, 0x2009,
-+      0x0041, 0x0804, 0xbbe4, 0xa182, 0x0040, 0x0002, 0xbab1, 0xbab3,
-+      0xbab1, 0xbab1, 0xbab1, 0xbab1, 0xbab1, 0xbab4, 0xbab1, 0xbab1,
-+      0xbab1, 0xbab1, 0xbab1, 0xbab1, 0xbab1, 0xbab1, 0xbab1, 0xbabf,
-+      0xbab1, 0x080c, 0x1519, 0x0005, 0x6003, 0x0004, 0x6110, 0x20e1,
-+      0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1870, 0x0005, 0x00d6,
-+      0x080c, 0x711c, 0x00de, 0x080c, 0xc3fb, 0x080c, 0x95fc, 0x0005,
-+      0xa182, 0x0040, 0x0002, 0xbade, 0xbade, 0xbade, 0xbade, 0xbade,
-+      0xbade, 0xbade, 0xbae0, 0xbade, 0xbae3, 0xbb1c, 0xbade, 0xbade,
-+      0xbade, 0xbade, 0xbb1c, 0xbade, 0xbade, 0xbade, 0x080c, 0x1519,
-+      0x080c, 0x9643, 0x0005, 0x2001, 0xc672, 0x2004, 0xd0e4, 0x0158,
-+      0x2001, 0x0100, 0x2004, 0xa082, 0x0005, 0x0228, 0x2001, 0x011f,
-+      0x2004, 0x6036, 0x0010, 0x6037, 0x0000, 0x080c, 0x7e60, 0x080c,
-+      0x7f87, 0x6010, 0x00d6, 0x2068, 0x684c, 0xd0fc, 0x0150, 0xa08c,
-+      0x0003, 0xa18e, 0x0002, 0x0168, 0x2009, 0x0041, 0x00de, 0x0804,
-+      0xbbe4, 0x6003, 0x0007, 0x6017, 0x0000, 0x080c, 0x711c, 0x00de,
-+      0x0005, 0x080c, 0xc398, 0x0110, 0x00de, 0x0005, 0x080c, 0x711c,
-+      0x080c, 0x95fc, 0x00de, 0x0ca0, 0x0036, 0x080c, 0x7e60, 0x080c,
-+      0x7f87, 0x6010, 0x00d6, 0x2068, 0x6018, 0x2004, 0xd0bc, 0x0188,
-+      0x684c, 0xa084, 0x0003, 0xa086, 0x0002, 0x0140, 0x687c, 0x632c,
-+      0xa31a, 0x632e, 0x6880, 0x6328, 0xa31b, 0x632a, 0x6003, 0x0002,
-+      0x0080, 0x2019, 0x0004, 0x080c, 0xc15a, 0x6014, 0xa005, 0x1128,
-+      0x2001, 0xc8fe, 0x2004, 0x8003, 0x6016, 0x6013, 0x0000, 0x6003,
-+      0x0007, 0x00de, 0x003e, 0x0005, 0xa186, 0x0013, 0x1150, 0x6004,
-+      0xa086, 0x0042, 0x190c, 0x1519, 0x080c, 0x7dca, 0x080c, 0x7ead,
-+      0x0005, 0xa186, 0x0027, 0x0118, 0xa186, 0x0014, 0x1180, 0x6004,
-+      0xa086, 0x0042, 0x190c, 0x1519, 0x2001, 0x0007, 0x080c, 0x52d7,
-+      0x080c, 0x7dca, 0x080c, 0xae6d, 0x080c, 0x7ead, 0x0005, 0xa182,
-+      0x0040, 0x0002, 0xbb85, 0xbb85, 0xbb85, 0xbb85, 0xbb85, 0xbb85,
-+      0xbb85, 0xbb87, 0xbb93, 0xbb85, 0xbb85, 0xbb85, 0xbb85, 0xbb85,
-+      0xbb85, 0xbb85, 0xbb85, 0xbb85, 0xbb85, 0x080c, 0x1519, 0x0036,
-+      0x0046, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1870,
-+      0x004e, 0x003e, 0x0005, 0x6010, 0x00d6, 0x2068, 0x6810, 0x6a14,
-+      0x0006, 0x0046, 0x0056, 0x6c7c, 0xa422, 0x6d80, 0x2200, 0xa52b,
-+      0x602c, 0xa420, 0x642e, 0x6028, 0xa529, 0x652a, 0x005e, 0x004e,
-+      0x000e, 0xa20d, 0x1178, 0x684c, 0xd0fc, 0x0120, 0x2009, 0x0041,
-+      0x00de, 0x0490, 0x6003, 0x0007, 0x6017, 0x0000, 0x080c, 0x711c,
-+      0x00de, 0x0005, 0x0006, 0x00f6, 0x2c78, 0x080c, 0x56dc, 0x00fe,
-+      0x000e, 0x0120, 0x6003, 0x0002, 0x00de, 0x0005, 0x2009, 0xc60d,
-+      0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006,
-+      0x0021, 0x080c, 0x711e, 0x00de, 0x0005, 0xd2fc, 0x0140, 0x8002,
-+      0x8000, 0x8212, 0xa291, 0x0000, 0x2009, 0x0009, 0x0010, 0x2009,
-+      0x0015, 0x6a6a, 0x6866, 0x0005, 0xa182, 0x0040, 0x0208, 0x0062,
-+      0xa186, 0x0013, 0x0120, 0xa186, 0x0014, 0x190c, 0x1519, 0x6020,
-+      0xd0dc, 0x090c, 0x1519, 0x0005, 0xbc07, 0xbc0e, 0xbc1a, 0xbc26,
-+      0xbc07, 0xbc07, 0xbc07, 0xbc35, 0xbc07, 0xbc09, 0xbc09, 0xbc07,
-+      0xbc07, 0xbc07, 0xbc07, 0xbc09, 0xbc07, 0xbc09, 0xbc07, 0x080c,
-+      0x1519, 0x6020, 0xd0dc, 0x090c, 0x1519, 0x0005, 0x6003, 0x0001,
-+      0x6106, 0x080c, 0x79b2, 0x0126, 0x2091, 0x8000, 0x080c, 0x7ead,
-+      0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x79b2, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x7ead, 0x012e, 0x0005, 0x6003, 0x0003,
-+      0x6106, 0x2c10, 0x080c, 0x2068, 0x0126, 0x2091, 0x8000, 0x080c,
-+      0x7a15, 0x080c, 0x7f87, 0x012e, 0x0005, 0xa016, 0x080c, 0x1870,
-+      0x0005, 0x0126, 0x2091, 0x8000, 0x0036, 0x00d6, 0xa182, 0x0040,
-+      0x0023, 0x00de, 0x003e, 0x012e, 0x0005, 0xbc55, 0xbc57, 0xbc69,
-+      0xbc84, 0xbc55, 0xbc55, 0xbc55, 0xbc99, 0xbc55, 0xbc55, 0xbc55,
-+      0xbc55, 0xbc55, 0xbc55, 0xbc55, 0xbc55, 0x080c, 0x1519, 0x6010,
-+      0x2068, 0x684c, 0xd0fc, 0x01f8, 0xa09c, 0x0003, 0xa39e, 0x0003,
-+      0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, 0x79b2, 0x080c, 0x7ead,
-+      0x0498, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0168, 0xa09c, 0x0003,
-+      0xa39e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x080c, 0x79b2,
-+      0x080c, 0x7ead, 0x0408, 0x6013, 0x0000, 0x6017, 0x0000, 0x2019,
-+      0x0004, 0x080c, 0xc15a, 0x00c0, 0x6010, 0x2068, 0x684c, 0xd0fc,
-+      0x0d90, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0d68, 0x6003, 0x0003,
-+      0x6106, 0x2c10, 0x080c, 0x2068, 0x080c, 0x7a15, 0x080c, 0x7f87,
-+      0x0018, 0xa016, 0x080c, 0x1870, 0x0005, 0x080c, 0x7dca, 0x6110,
-+      0x81ff, 0x0158, 0x00d6, 0x2168, 0x080c, 0xc4f0, 0x0036, 0x2019,
-+      0x0029, 0x080c, 0xc15a, 0x003e, 0x00de, 0x080c, 0xae6d, 0x080c,
-+      0x7ead, 0x0005, 0x080c, 0x7e60, 0x6110, 0x81ff, 0x0158, 0x00d6,
-+      0x2168, 0x080c, 0xc4f0, 0x0036, 0x2019, 0x0029, 0x080c, 0xc15a,
-+      0x003e, 0x00de, 0x080c, 0xae6d, 0x080c, 0x7f87, 0x0005, 0xa182,
-+      0x0085, 0x0002, 0xbcd3, 0xbcd1, 0xbcd1, 0xbcdf, 0xbcd1, 0xbcd1,
-+      0xbcd1, 0x080c, 0x1519, 0x6003, 0x000b, 0x6106, 0x080c, 0x79b2,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x7ead, 0x012e, 0x0005, 0x0026,
-+      0x00e6, 0x080c, 0xc391, 0x0118, 0x080c, 0x95fc, 0x00d8, 0x2071,
-+      0xcc80, 0x7224, 0x6212, 0x7220, 0x080c, 0xc008, 0x0118, 0x6007,
-+      0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, 0x1110,
-+      0x6007, 0x0086, 0x6003, 0x0001, 0x080c, 0x79b2, 0x080c, 0x7ead,
-+      0x080c, 0x7f87, 0x00ee, 0x002e, 0x0005, 0xa186, 0x0013, 0x1160,
-+      0x6004, 0xa08a, 0x0085, 0x0a0c, 0x1519, 0xa08a, 0x008c, 0x1a0c,
-+      0x1519, 0xa082, 0x0085, 0x00a2, 0xa186, 0x0027, 0x0130, 0xa186,
-+      0x0014, 0x0118, 0x080c, 0x9643, 0x0050, 0x2001, 0x0007, 0x080c,
-+      0x52d7, 0x080c, 0x7dca, 0x080c, 0xae6d, 0x080c, 0x7ead, 0x0005,
-+      0xbd2f, 0xbd31, 0xbd31, 0xbd2f, 0xbd2f, 0xbd2f, 0xbd2f, 0x080c,
-+      0x1519, 0x080c, 0x7dca, 0x080c, 0xae6d, 0x080c, 0x7ead, 0x0005,
-+      0xa182, 0x0085, 0x0a0c, 0x1519, 0xa182, 0x008c, 0x1a0c, 0x1519,
-+      0xa182, 0x0085, 0x0002, 0xbd4a, 0xbd4a, 0xbd4a, 0xbd4c, 0xbd4a,
-+      0xbd4a, 0xbd4a, 0x080c, 0x1519, 0x0005, 0xa186, 0x0013, 0x0148,
-+      0xa186, 0x0014, 0x0130, 0xa186, 0x0027, 0x0118, 0x080c, 0x9643,
-+      0x0030, 0x080c, 0x7dca, 0x080c, 0xae6d, 0x080c, 0x7ead, 0x0005,
-+      0x0036, 0x080c, 0xc3fb, 0x603f, 0x0000, 0x2019, 0x000b, 0x0031,
-+      0x601f, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036,
-+      0x2091, 0x8000, 0x0086, 0x2c40, 0x0096, 0x2049, 0x0000, 0x080c,
-+      0x8fe2, 0x009e, 0x008e, 0x1578, 0x0076, 0x2c38, 0x080c, 0x9088,
-+      0x007e, 0x1548, 0x6000, 0xa086, 0x0000, 0x0528, 0x601c, 0xa086,
-+      0x0007, 0x0508, 0x00d6, 0x6000, 0xa086, 0x0004, 0x1150, 0x080c,
-+      0xc3fb, 0x601f, 0x0007, 0x2001, 0xc8fd, 0x2004, 0x6016, 0x080c,
-+      0x1953, 0x6010, 0x2068, 0x080c, 0xacaa, 0x0110, 0x080c, 0xc15a,
-+      0x00de, 0x6013, 0x0000, 0x080c, 0xc3fb, 0x601f, 0x0007, 0x2001,
-+      0xc8fd, 0x2004, 0x6016, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6,
-+      0x0036, 0x0156, 0x2079, 0xcc80, 0x7938, 0x783c, 0x080c, 0x29c7,
-+      0x15b0, 0x0016, 0x00c6, 0x080c, 0x5356, 0x1578, 0x001e, 0x002e,
-+      0x0026, 0x0016, 0x2019, 0x0029, 0x080c, 0x914b, 0x080c, 0x7b2f,
-+      0x0076, 0x2039, 0x0000, 0x080c, 0x7a27, 0x007e, 0x001e, 0x0076,
-+      0x2039, 0x0000, 0x080c, 0xbf10, 0x007e, 0x080c, 0x5557, 0x0026,
-+      0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x0118, 0xa286,
-+      0x0004, 0x1118, 0x62a0, 0x080c, 0x2eff, 0x002e, 0x001e, 0x080c,
-+      0x4f60, 0x6612, 0x6516, 0xa006, 0x0010, 0x00ce, 0x001e, 0x015e,
-+      0x003e, 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x0016,
-+      0x2009, 0xc621, 0x2104, 0xa086, 0x0074, 0x1904, 0xbe49, 0x2069,
-+      0xcc8e, 0x690c, 0xa182, 0x0100, 0x06c0, 0x6908, 0xa184, 0x8000,
-+      0x05e8, 0x2001, 0xc8e5, 0x2004, 0xa005, 0x1160, 0x6018, 0x2070,
-+      0x7010, 0xa084, 0x00ff, 0x0118, 0x7000, 0xd0f4, 0x0118, 0xa184,
-+      0x0800, 0x0560, 0x6910, 0xa18a, 0x0001, 0x0610, 0x6914, 0x2069,
-+      0xccae, 0x6904, 0x81ff, 0x1198, 0x690c, 0xa182, 0x0100, 0x02a8,
-+      0x6908, 0x81ff, 0x1178, 0x6910, 0xa18a, 0x0001, 0x0288, 0x6918,
-+      0xa18a, 0x0001, 0x0298, 0x00d0, 0x6013, 0x0100, 0x00a0, 0x6013,
-+      0x0300, 0x0088, 0x6013, 0x0500, 0x0070, 0x6013, 0x0700, 0x0058,
-+      0x6013, 0x0900, 0x0040, 0x6013, 0x0b00, 0x0028, 0x6013, 0x0f00,
-+      0x0010, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0008, 0xa006, 0x001e,
-+      0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x0026, 0x0036,
-+      0x0156, 0x6218, 0x2268, 0x6b04, 0xa394, 0x00ff, 0xa286, 0x0006,
-+      0x0190, 0xa286, 0x0004, 0x0178, 0xa394, 0xff00, 0x8217, 0xa286,
-+      0x0006, 0x0148, 0xa286, 0x0004, 0x0130, 0x00c6, 0x2d60, 0x080c,
-+      0x5365, 0x00ce, 0x04c0, 0x2011, 0xcc96, 0xad98, 0x000a, 0x20a9,
-+      0x0004, 0x080c, 0xa11c, 0x1580, 0x2011, 0xcc9a, 0xad98, 0x0006,
-+      0x20a9, 0x0004, 0x080c, 0xa11c, 0x1538, 0x0046, 0x0016, 0x6aa0,
-+      0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0xc653, 0x210c, 0xd1a4,
-+      0x0138, 0x2009, 0x0029, 0x080c, 0xc1a9, 0x6800, 0xc0e5, 0x6802,
-+      0x2019, 0x0029, 0x080c, 0x7b2f, 0x0076, 0x2039, 0x0000, 0x080c,
-+      0x7a27, 0x2c08, 0x080c, 0xbf10, 0x007e, 0x2001, 0x0007, 0x080c,
-+      0x52d7, 0x001e, 0x004e, 0xa006, 0x015e, 0x003e, 0x002e, 0x00de,
-+      0x00ce, 0x0005, 0x00d6, 0x2069, 0xcc8e, 0x6800, 0xa086, 0x0800,
-+      0x0118, 0x6013, 0x0000, 0x0008, 0xa006, 0x00de, 0x0005, 0x00c6,
-+      0x00f6, 0x0016, 0x0026, 0x0036, 0x0156, 0x2079, 0xcc8c, 0x7930,
-+      0x7834, 0x080c, 0x29c7, 0x11a0, 0x080c, 0x5356, 0x1188, 0x2011,
-+      0xcc90, 0xac98, 0x000a, 0x20a9, 0x0004, 0x080c, 0xa11c, 0x1140,
-+      0x2011, 0xcc94, 0xac98, 0x0006, 0x20a9, 0x0004, 0x080c, 0xa11c,
-+      0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00ce, 0x0005, 0x00c6,
-+      0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0xcc83, 0x2204,
-+      0x8211, 0x220c, 0x080c, 0x29c7, 0x11a0, 0x080c, 0x5356, 0x1188,
-+      0x2011, 0xcc96, 0xac98, 0x000a, 0x20a9, 0x0004, 0x080c, 0xa11c,
-+      0x1140, 0x2011, 0xcc9a, 0xac98, 0x0006, 0x20a9, 0x0004, 0x080c,
-+      0xa11c, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00ce, 0x0005,
-+      0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026,
-+      0x0126, 0x2091, 0x8000, 0x2740, 0x2029, 0xc930, 0x252c, 0x2021,
-+      0xc936, 0x2424, 0x2061, 0xce00, 0x2071, 0xc600, 0x7648, 0x7068,
-+      0x81ff, 0x0150, 0x0006, 0xa186, 0xca3c, 0x000e, 0x0128, 0x8001,
-+      0xa602, 0x1a04, 0xbf91, 0x0018, 0xa606, 0x0904, 0xbf91, 0x2100,
-+      0xac06, 0x0904, 0xbf88, 0x080c, 0xc1d1, 0x0904, 0xbf88, 0x671c,
-+      0xa786, 0x0001, 0x0904, 0xbfda, 0xa786, 0x0004, 0x0904, 0xbfda,
-+      0xa786, 0x0007, 0x05e8, 0x2500, 0xac06, 0x05d0, 0x2400, 0xac06,
-+      0x05b8, 0x080c, 0xc1e1, 0x15a0, 0x88ff, 0x0118, 0x6050, 0xa906,
-+      0x1578, 0x00d6, 0x6000, 0xa086, 0x0004, 0x1120, 0x0016, 0x080c,
-+      0x1953, 0x001e, 0xa786, 0x0008, 0x1148, 0x080c, 0xaea8, 0x1130,
-+      0x080c, 0x9c22, 0x00de, 0x080c, 0xae6d, 0x00d0, 0x6010, 0x2068,
-+      0x080c, 0xacaa, 0x0190, 0xa786, 0x0003, 0x1528, 0x6837, 0x0103,
-+      0x6b4a, 0x6847, 0x0000, 0x080c, 0xc4f0, 0x0016, 0x080c, 0xaf1c,
-+      0x080c, 0x5823, 0x001e, 0x080c, 0xae61, 0x00de, 0x080c, 0xae6d,
-+      0xace0, 0x0018, 0x2001, 0xc617, 0x2004, 0xac02, 0x1210, 0x0804,
-+      0xbf24, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e,
-+      0x00ce, 0x00ee, 0x0005, 0xa786, 0x0006, 0x1150, 0xa386, 0x0005,
-+      0x0128, 0x080c, 0xc4f0, 0x080c, 0xc15a, 0x08f8, 0x00de, 0x0c00,
-+      0xa786, 0x0009, 0x1548, 0x6000, 0xa086, 0x0004, 0x1128, 0x00c6,
-+      0x080c, 0x7633, 0x00ce, 0x00e8, 0x6000, 0xa086, 0x0003, 0x11c8,
-+      0x080c, 0x7e60, 0x00e6, 0x00d6, 0x6110, 0x2168, 0x080c, 0xacaa,
-+      0x0140, 0x6018, 0x2070, 0x70b3, 0x0000, 0x70b7, 0x0000, 0x080c,
-+      0x5823, 0x00de, 0x00ee, 0x00c6, 0x080c, 0x95fc, 0x00ce, 0x080c,
-+      0x7f87, 0x00de, 0x0804, 0xbf88, 0xa786, 0x000a, 0x0904, 0xbf78,
-+      0x0804, 0xbf76, 0x080c, 0xc1e1, 0x1904, 0xbf88, 0x81ff, 0x0904,
-+      0xbf88, 0xa180, 0x0001, 0x2004, 0xa086, 0x0018, 0x0138, 0xa180,
-+      0x0001, 0x2004, 0xa086, 0x002d, 0x1904, 0xbf88, 0x6000, 0xa086,
-+      0x0002, 0x1904, 0xbf88, 0x080c, 0xae97, 0x0138, 0x080c, 0xaea8,
-+      0x1904, 0xbf88, 0x080c, 0x9c22, 0x0038, 0x080c, 0x2e6c, 0x080c,
-+      0xaea8, 0x1110, 0x080c, 0x9c22, 0x080c, 0xae6d, 0x0804, 0xbf88,
-+      0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0xa006, 0x080c, 0xc17b,
-+      0x001e, 0x0120, 0x601c, 0xa084, 0x000f, 0x001b, 0x00ee, 0x00ce,
-+      0x0005, 0xc021, 0xc021, 0xc021, 0xc021, 0xc021, 0xc021, 0xc023,
-+      0xc021, 0xa006, 0x0005, 0x0046, 0x0016, 0x7018, 0xa080, 0x0028,
-+      0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00, 0x2009, 0x0020, 0x080c,
-+      0xc1a9, 0x001e, 0x004e, 0x0036, 0x2019, 0x0002, 0x080c, 0xbd6e,
-+      0x003e, 0xa085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c, 0x5298,
-+      0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0xc605,
-+      0x2011, 0xcc96, 0x080c, 0xa11c, 0x003e, 0x002e, 0x001e, 0x015e,
-+      0xa005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066,
-+      0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0xce00, 0x2079,
-+      0x0001, 0x8fff, 0x0904, 0xc0b0, 0x2071, 0xc600, 0x7648, 0x7068,
-+      0x8001, 0xa602, 0x1a04, 0xc0b0, 0x88ff, 0x0128, 0x2800, 0xac06,
-+      0x15b0, 0x2079, 0x0000, 0x080c, 0xc1d1, 0x0588, 0x2400, 0xac06,
-+      0x0570, 0x671c, 0xa786, 0x0006, 0x1550, 0xa786, 0x0007, 0x0538,
-+      0x88ff, 0x1140, 0x6018, 0xa206, 0x1510, 0x85ff, 0x0118, 0x6050,
-+      0xa106, 0x11e8, 0x00d6, 0x6000, 0xa086, 0x0004, 0x1150, 0x080c,
-+      0xc3fb, 0x601f, 0x0007, 0x2001, 0xc8fd, 0x2004, 0x6016, 0x080c,
-+      0x1953, 0x6010, 0x2068, 0x080c, 0xacaa, 0x0120, 0x0046, 0x080c,
-+      0xc15a, 0x004e, 0x00de, 0x080c, 0xae6d, 0x88ff, 0x1198, 0xace0,
-+      0x0018, 0x2001, 0xc617, 0x2004, 0xac02, 0x1210, 0x0804, 0xc061,
-+      0xa006, 0x012e, 0x002e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee,
-+      0x00fe, 0x0005, 0xa8c5, 0x0001, 0x0ca0, 0x0076, 0x0056, 0x0086,
-+      0x2041, 0x0000, 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6218,
-+      0x0096, 0x2049, 0x0000, 0x080c, 0x8fe2, 0x009e, 0x008e, 0x2039,
-+      0x0000, 0x080c, 0x9088, 0x080c, 0xc052, 0x005e, 0x007e, 0x0005,
-+      0x0026, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128,
-+      0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x0036, 0x080c, 0x5356,
-+      0x11b0, 0x2c10, 0x0056, 0x0086, 0x2041, 0x0000, 0x2508, 0x2029,
-+      0x0001, 0x0096, 0x2049, 0x0000, 0x080c, 0x8fe2, 0x009e, 0x008e,
-+      0x2039, 0x0000, 0x080c, 0x9088, 0x080c, 0xc052, 0x005e, 0x003e,
-+      0x001e, 0x8108, 0x1f04, 0xc0e4, 0x015e, 0x00ce, 0x007e, 0x005e,
-+      0x004e, 0x002e, 0x0005, 0x0076, 0x0056, 0x6218, 0x0086, 0x2041,
-+      0x0000, 0x2029, 0x0001, 0x2019, 0x0048, 0x0096, 0x2049, 0x0000,
-+      0x080c, 0x8fe2, 0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x9088,
-+      0x2c20, 0x080c, 0xc052, 0x005e, 0x007e, 0x0005, 0x0026, 0x0046,
-+      0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x007f, 0x2009,
-+      0x0000, 0x0016, 0x0036, 0x080c, 0x5356, 0x11c0, 0x2c10, 0x0086,
-+      0x2041, 0x0000, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xc3dd,
-+      0x004e, 0x0096, 0x2049, 0x0000, 0x080c, 0x8fe2, 0x009e, 0x008e,
-+      0x2039, 0x0000, 0x080c, 0x9088, 0x080c, 0xc052, 0x003e, 0x001e,
-+      0x8108, 0x1f04, 0xc131, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e,
-+      0x002e, 0x0005, 0x0016, 0x00f6, 0x3800, 0xd08c, 0x0130, 0xad82,
-+      0x1000, 0x02b0, 0xad82, 0xc600, 0x0230, 0xad82, 0xfe00, 0x0280,
-+      0xad82, 0xffff, 0x1268, 0x6800, 0xa07d, 0x0138, 0x6803, 0x0000,
-+      0x6b52, 0x080c, 0x5823, 0x2f68, 0x0cb0, 0x6b52, 0x080c, 0x5823,
-+      0x00fe, 0x001e, 0x0005, 0x00e6, 0x0046, 0x0036, 0x2061, 0xce00,
-+      0xa005, 0x1138, 0x2071, 0xc600, 0x7448, 0x7068, 0x8001, 0xa402,
-+      0x12d8, 0x2100, 0xac06, 0x0168, 0x6000, 0xa086, 0x0000, 0x0148,
-+      0x6008, 0xa206, 0x1130, 0x6018, 0xa1a0, 0x0006, 0x2424, 0xa406,
-+      0x0140, 0xace0, 0x0018, 0x2001, 0xc617, 0x2004, 0xac02, 0x1220,
-+      0x0c40, 0xa085, 0x0001, 0x0008, 0xa006, 0x003e, 0x004e, 0x00ee,
-+      0x0005, 0x00d6, 0x0006, 0x080c, 0x1602, 0x000e, 0x090c, 0x1519,
-+      0x6837, 0x010d, 0x685e, 0x0026, 0x2010, 0x080c, 0xac9a, 0x2001,
-+      0x0000, 0x0120, 0x2200, 0xa080, 0x0014, 0x2004, 0x002e, 0x684a,
-+      0x6956, 0x6c46, 0x684f, 0x0000, 0x2001, 0xc905, 0x2004, 0x6852,
-+      0xa006, 0x68b2, 0x6802, 0x683a, 0x685a, 0x080c, 0x5823, 0x00de,
-+      0x0005, 0x6700, 0xa786, 0x0000, 0x0158, 0xa786, 0x0001, 0x0140,
-+      0xa786, 0x000a, 0x0128, 0xa786, 0x0009, 0x0110, 0xa085, 0x0001,
-+      0x0005, 0x00e6, 0x6018, 0x2070, 0x70a0, 0xa206, 0x00ee, 0x0005,
-+      0x0016, 0x6004, 0xa08e, 0x001e, 0x11a0, 0x8007, 0x6130, 0xa18c,
-+      0x00ff, 0xa105, 0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f,
-+      0x0005, 0x2001, 0xc8fe, 0x2004, 0x6016, 0x080c, 0x79b2, 0x080c,
-+      0x7ead, 0x001e, 0x0005, 0xe000, 0xe000, 0x0005, 0x6020, 0xd0e4,
-+      0x0158, 0xd0cc, 0x0118, 0x080c, 0xaf85, 0x0030, 0x080c, 0xc3fb,
-+      0x080c, 0x711c, 0x080c, 0x95fc, 0x0005, 0xa280, 0x0007, 0x2004,
-+      0xa084, 0x000f, 0x0002, 0xc224, 0xc224, 0xc224, 0xc229, 0xc224,
-+      0xc226, 0xc226, 0xc224, 0xc226, 0xa006, 0x0005, 0x00c6, 0x2260,
-+      0x00ce, 0xa085, 0x0001, 0x0005, 0xa280, 0x0007, 0x2004, 0xa084,
-+      0x000f, 0x0002, 0xc23b, 0xc23b, 0xc23b, 0xc23b, 0xc23b, 0xc23b,
-+      0xc246, 0xc23b, 0xc23b, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013,
-+      0x2a00, 0x6003, 0x0001, 0x080c, 0x79b2, 0x0005, 0x00c6, 0x2260,
-+      0x080c, 0xc3fb, 0x603f, 0x0000, 0x6020, 0xc0f4, 0xc0cc, 0x6022,
-+      0x6037, 0x0000, 0x00ce, 0x00d6, 0x2268, 0xa186, 0x0007, 0x1904,
-+      0xc2a1, 0x6810, 0xa005, 0x0138, 0xa080, 0x0013, 0x2004, 0xd0fc,
-+      0x1110, 0x00de, 0x08c0, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c,
-+      0x79b2, 0x080c, 0x7ead, 0x00c6, 0x2d60, 0x6100, 0xa186, 0x0002,
-+      0x1904, 0xc32a, 0x6010, 0xa005, 0x1138, 0x6000, 0xa086, 0x0007,
-+      0x190c, 0x1519, 0x0804, 0xc32a, 0xa08c, 0xf000, 0x1130, 0x0028,
-+      0x2068, 0x6800, 0xa005, 0x1de0, 0x2d00, 0xa080, 0x0013, 0x2004,
-+      0xa084, 0x0003, 0xa086, 0x0002, 0x1180, 0x6010, 0x2068, 0x684c,
-+      0xc0dc, 0xc0f4, 0x684e, 0x6850, 0xc0f4, 0xc0fc, 0x6852, 0x2009,
-+      0x0043, 0x080c, 0xbbe4, 0x0804, 0xc32a, 0x2009, 0x0041, 0x0804,
-+      0xc324, 0xa186, 0x0005, 0x15f0, 0x6810, 0xa080, 0x0013, 0x2004,
-+      0xd0bc, 0x1118, 0x00de, 0x0804, 0xc23b, 0xd0b4, 0x0128, 0xd0fc,
-+      0x090c, 0x1519, 0x0804, 0xc259, 0x6007, 0x003a, 0x6003, 0x0001,
-+      0x080c, 0x79b2, 0x080c, 0x7ead, 0x00c6, 0x2d60, 0x6100, 0xa186,
-+      0x0002, 0x0120, 0xa186, 0x0004, 0x1904, 0xc32a, 0x2071, 0xc96a,
-+      0x7000, 0xa086, 0x0003, 0x1128, 0x7004, 0xac06, 0x1110, 0x7003,
-+      0x0000, 0x6810, 0xa080, 0x0013, 0x200c, 0xc1f4, 0xc1dc, 0x2102,
-+      0x8000, 0x200c, 0xc1f4, 0xc1fc, 0xc1bc, 0x2102, 0x2009, 0x0042,
-+      0x0804, 0xc324, 0x0036, 0x00d6, 0x00d6, 0x080c, 0x1602, 0x003e,
-+      0x090c, 0x1519, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000,
-+      0x685b, 0x0000, 0x6b5e, 0x6857, 0x0045, 0x2c00, 0x6862, 0x6034,
-+      0x6872, 0x2360, 0x6020, 0xc0dd, 0x6022, 0x6018, 0xa080, 0x0028,
-+      0x2004, 0xa084, 0x00ff, 0x8007, 0x6350, 0x6b4a, 0x6846, 0x684f,
-+      0x0000, 0x6853, 0x0000, 0x6d6a, 0x6e66, 0x686f, 0x0001, 0x080c,
-+      0x5823, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xbd6e, 0x2d00,
-+      0x600a, 0x601f, 0x0006, 0x6003, 0x0007, 0x6017, 0x0000, 0x603f,
-+      0x0000, 0x00de, 0x003e, 0x0038, 0x603f, 0x0000, 0x6003, 0x0007,
-+      0x080c, 0xbbe4, 0x00ce, 0x00de, 0x0005, 0xa186, 0x0013, 0x1128,
-+      0x6004, 0xa082, 0x0085, 0x2008, 0x00c2, 0xa186, 0x0027, 0x1178,
-+      0x080c, 0x7dca, 0x0036, 0x00d6, 0x6010, 0x2068, 0x2019, 0x0004,
-+      0x080c, 0xc15a, 0x00de, 0x003e, 0x080c, 0x7ead, 0x0005, 0xa186,
-+      0x0014, 0x0d70, 0x080c, 0x9643, 0x0005, 0xc356, 0xc354, 0xc354,
-+      0xc354, 0xc354, 0xc354, 0xc356, 0x080c, 0x1519, 0x080c, 0x7dca,
-+      0x6003, 0x000c, 0x080c, 0x7ead, 0x0005, 0xa182, 0x008c, 0x1220,
-+      0xa182, 0x0085, 0x0208, 0x001a, 0x080c, 0x9643, 0x0005, 0xc36e,
-+      0xc36e, 0xc36e, 0xc36e, 0xc370, 0xc38e, 0xc36e, 0x080c, 0x1519,
-+      0x00d6, 0x2c68, 0x080c, 0x95a6, 0x01a0, 0x6003, 0x0001, 0x6007,
-+      0x001e, 0x2009, 0xcc8e, 0x210c, 0x6136, 0x2009, 0xcc8f, 0x210c,
-+      0x613a, 0x600b, 0xffff, 0x6918, 0x611a, 0x601f, 0x0004, 0x080c,
-+      0x79b2, 0x2d60, 0x080c, 0x95fc, 0x00de, 0x0005, 0x080c, 0x95fc,
-+      0x0005, 0x00e6, 0x6018, 0x2070, 0x7000, 0xd0ec, 0x00ee, 0x0005,
-+      0x6010, 0xa08c, 0xf000, 0x0904, 0xc3dc, 0xa080, 0x0013, 0x200c,
-+      0xd1ec, 0x05d0, 0x2001, 0xc672, 0x2004, 0xd0ec, 0x05a8, 0x6003,
-+      0x0002, 0x6020, 0xc0e5, 0x6022, 0xd1ac, 0x0180, 0x00f6, 0x2c78,
-+      0x080c, 0x56d8, 0x00fe, 0x0150, 0x2001, 0xc8ff, 0x2004, 0x603e,
-+      0x2009, 0xc672, 0x210c, 0xd1f4, 0x11e8, 0x0080, 0x2009, 0xc672,
-+      0x210c, 0xd1f4, 0x0128, 0x6020, 0xc0e4, 0x6022, 0xa006, 0x00a0,
-+      0x2001, 0xc8ff, 0x200c, 0x8103, 0xa100, 0x603e, 0x6018, 0xa088,
-+      0x002f, 0x2104, 0xa005, 0x0118, 0xa088, 0x0003, 0x0cd0, 0x2c0a,
-+      0x600f, 0x0000, 0xa085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6,
-+      0x6150, 0xa2f0, 0x002f, 0x2e04, 0x2060, 0x8cff, 0x0180, 0x84ff,
-+      0x1118, 0x6050, 0xa106, 0x1138, 0x600c, 0x2072, 0x080c, 0x711c,
-+      0x080c, 0x95fc, 0x0010, 0xacf0, 0x0003, 0x2e64, 0x0c70, 0x00ee,
-+      0x00ce, 0x001e, 0x0005, 0x00d6, 0x6018, 0xa0e8, 0x002f, 0x2d04,
-+      0xa005, 0x0140, 0xac06, 0x0120, 0x2d04, 0xa0e8, 0x0003, 0x0cb8,
-+      0x600c, 0x206a, 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011,
-+      0xc628, 0x2204, 0xa084, 0x00ff, 0x2019, 0xcc8e, 0x2334, 0xa636,
-+      0x11d8, 0x8318, 0x2334, 0x2204, 0xa084, 0xff00, 0xa636, 0x11a0,
-+      0x2011, 0xcc90, 0x6018, 0xa098, 0x000a, 0x20a9, 0x0004, 0x080c,
-+      0xa11c, 0x1150, 0x2011, 0xcc94, 0x6018, 0xa098, 0x0006, 0x20a9,
-+      0x0004, 0x080c, 0xa11c, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005,
-+      0x00e6, 0x2071, 0xc600, 0x080c, 0x4f1b, 0x080c, 0x2c62, 0x00ee,
-+      0x0005, 0x00d6, 0x080c, 0x15e5, 0x0500, 0x2d10, 0xa290, 0x000d,
-+      0x2013, 0x0134, 0x8210, 0x2013, 0x0000, 0x8210, 0x703c, 0x2012,
-+      0x8210, 0x7038, 0x2012, 0x8210, 0x2218, 0x7048, 0x2012, 0x8210,
-+      0x704c, 0x2012, 0x8210, 0x7050, 0x2012, 0x8210, 0x7054, 0x2012,
-+      0x2300, 0x080c, 0x3e91, 0x080c, 0x5823, 0x00de, 0x0005, 0x00d6,
-+      0x0026, 0x080c, 0x1602, 0x090c, 0x1519, 0xad90, 0x000e, 0x20a9,
-+      0x000c, 0x22a0, 0xa016, 0x42a4, 0xa186, 0x0046, 0x1118, 0x6837,
-+      0x0136, 0x0038, 0x6837, 0x0138, 0xa186, 0x0041, 0x0110, 0x684b,
-+      0x0001, 0x7038, 0xa084, 0xff00, 0x7240, 0xa294, 0xff00, 0x8007,
-+      0xa215, 0x6a6a, 0xa186, 0x0046, 0x1168, 0x7038, 0xa084, 0x00ff,
-+      0x723c, 0xa294, 0xff00, 0xa215, 0x6a6e, 0x723c, 0xa294, 0x00ff,
-+      0x6a72, 0x0060, 0x7040, 0xa084, 0x00ff, 0x7244, 0xa294, 0xff00,
-+      0xa215, 0x6a6e, 0x7244, 0xa294, 0x00ff, 0x6a72, 0xa186, 0x0046,
-+      0x1118, 0xae90, 0x0012, 0x0010, 0xae90, 0x001a, 0x2204, 0x8007,
-+      0x6876, 0x8210, 0x2204, 0x8007, 0x687a, 0x8210, 0x2204, 0x8007,
-+      0x687e, 0x8210, 0x2204, 0x8007, 0x6882, 0x8210, 0xa186, 0x0046,
-+      0x1118, 0xae90, 0x0016, 0x0010, 0xae90, 0x001e, 0x2204, 0x8007,
-+      0x6886, 0x8210, 0x2204, 0x8007, 0x688a, 0x8210, 0x2204, 0x8007,
-+      0x688e, 0x8210, 0x2204, 0x8007, 0x6892, 0x8210, 0xa186, 0x0046,
-+      0x1118, 0xae90, 0x0022, 0x0010, 0xae90, 0x002a, 0x00d6, 0xade8,
-+      0x0025, 0x20a9, 0x0008, 0x2204, 0x8007, 0x206a, 0x8210, 0x8d68,
-+      0x1f04, 0xc4e3, 0x00de, 0x002e, 0x080c, 0x5823, 0x00de, 0x0005,
-+      0x00e6, 0x6018, 0x2070, 0x7000, 0xd0fc, 0x0108, 0x0011, 0x00ee,
-+      0x0005, 0x6850, 0xc0e5, 0x6852, 0x0005, 0x00e6, 0x00c6, 0x0076,
-+      0x0066, 0x0056, 0x0046, 0x0026, 0x0016, 0x0126, 0x2091, 0x8000,
-+      0x2029, 0xc930, 0x252c, 0x2021, 0xc936, 0x2424, 0x2061, 0xce00,
-+      0x2071, 0xc600, 0x7648, 0x7068, 0xa606, 0x0578, 0x671c, 0xa786,
-+      0x0001, 0x0118, 0xa786, 0x0008, 0x1500, 0x2500, 0xac06, 0x01e8,
-+      0x2400, 0xac06, 0x01d0, 0x080c, 0xc1d1, 0x01b8, 0x080c, 0xc1e1,
-+      0x11a0, 0x6000, 0xa086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1953,
-+      0x001e, 0x080c, 0xae97, 0x1110, 0x080c, 0x2e6c, 0x080c, 0xaea8,
-+      0x1110, 0x080c, 0x9c22, 0x080c, 0xae6d, 0xace0, 0x0018, 0x2001,
-+      0xc617, 0x2004, 0xac02, 0x1208, 0x0858, 0x012e, 0x001e, 0x002e,
-+      0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00ee, 0x0005, 0x0126,
-+      0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0xc640, 0xd5a4,
-+      0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118, 0x7030, 0x8000,
-+      0x7032, 0xd5ac, 0x0178, 0x2500, 0xa084, 0x0007, 0xa08e, 0x0003,
-+      0x0148, 0xa08e, 0x0004, 0x0130, 0xa08e, 0x0005, 0x0118, 0x2071,
-+      0xc64a, 0x04c9, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126,
-+      0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0xc640, 0xd5a4,
-+      0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118, 0x7030, 0x8000,
-+      0x7032, 0xd5ac, 0x0178, 0x2500, 0xa084, 0x0007, 0xa08e, 0x0003,
-+      0x0148, 0xa08e, 0x0004, 0x0130, 0xa08e, 0x0005, 0x0118, 0x2071,
-+      0xc64a, 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126,
-+      0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xc642, 0x0021, 0x00ee,
-+      0x000e, 0x012e, 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220, 0x8e70,
-+      0x2e04, 0x8000, 0x2072, 0x0005, 0x00e6, 0x2071, 0xc640, 0x0c99,
-+      0x00ee, 0x0005, 0x00e6, 0x2071, 0xc644, 0x0c69, 0x00ee, 0x0005,
-+      0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xc640, 0x7044,
-+      0x8000, 0x7046, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0001, 0x0002,
-+      0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200,
-+      0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0xaedc
- };
- #ifdef UNIQUE_FW_NAME
--unsigned short fw2200ip_length01 = 0xb5b9;
-+unsigned short fw2200ip_length01 = 0xb5df;
- #else
--unsigned short risc_code_length01 = 0xb5b9;
-+unsigned short risc_code_length01 = 0xb5df;
- #endif
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2300flx_fw.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2300flx_fw.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2300flx_fw.h       1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2300flx_fw.h    2004-04-22 19:42:21.000000000 -0700
-@@ -0,0 +1,6903 @@
-+/******************************************************************************\r
-+ *                  QLOGIC LINUX SOFTWARE\r
-+ *\r
-+ * QLogic ISP2x00 device driver for Linux 2.4.x\r
-+ * Copyright (C) 2003 QLogic Corporation\r
-+ * (www.qlogic.com)\r
-+ *\r
-+ * This program is free software; you can redistribute it and/or modify it\r
-+ * under the terms of the GNU General Public License as published by the\r
-+ * Free Software Foundation; either version 2, or (at your option) any\r
-+ * later version.\r
-+ *\r
-+ * This program is distributed in the hope that it will be useful, but\r
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of\r
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
-+ * General Public License for more details.\r
-+ *\r
-+ ******************************************************************************/\r
-+\r
-+/************************************************************************\r
-+ *                                                                    *\r
-+ *               --- ISP2300 Initiator/Target Firmware ---              *\r
-+ *             with Fabric (Public Loop), Point-point,                *\r
-+ *             expanded LUN addressing for FCTAPE, and 2K port logins   *\r
-+ *                                            FibreLite enabled       *\r
-+ *                                                                    *\r
-+ ********************************************************************** */\r
-+/*\r
-+ *    Firmware Version 3.02.28 (13:56 Apr 03, 2004)\r
-+ */\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2300flx_version = 3*1024+2;\r
-+#else\r
-+unsigned short risc_code_version = 3*1024+2;\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned char fw2300flx_version_str[] = {3, 2,28};\r
-+#else\r
-+unsigned char firmware_version[] = {3, 2,28};\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+#define fw2300flx_VERSION_STRING "3.02.28"\r
-+#else\r
-+#define FW_VERSION_STRING "3.02.28"\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2300flx_addr01 = 0x0800 ;\r
-+#else\r
-+unsigned short risc_code_addr01 = 0x0800 ;\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2300flx_code01[] = { \r
-+#else\r
-+unsigned short risc_code01[] = { \r
-+#endif\r
-+      0x0470, 0x0000, 0x0000, 0xd59a, 0x0000, 0x0003, 0x0002, 0x001c,\r
-+      0x0317, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,\r
-+      0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,\r
-+      0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,\r
-+      0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,\r
-+      0x332e, 0x3032, 0x2e32, 0x3820, 0x2020, 0x2020, 0x2400, 0x20a9,\r
-+      0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,\r
-+      0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,\r
-+      0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,\r
-+      0x400f, 0x2091, 0x2800, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f,\r
-+      0x2091, 0x2a00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091,\r
-+      0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00,\r
-+      0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001,\r
-+      0x0000, 0x20c1, 0x0004, 0x20c9, 0x1bff, 0x2059, 0x0000, 0x2b78,\r
-+      0x7883, 0x0004, 0x2089, 0x2b4e, 0x2051, 0x1800, 0x2a70, 0x20e1,\r
-+      0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e2f, 0x2029,\r
-+      0x2480, 0x2031, 0xffff, 0x2039, 0x2450, 0x2021, 0x0050, 0x20e9,\r
-+      0x0001, 0x20a1, 0x0000, 0x20a9, 0x0800, 0x900e, 0x4104, 0x20e9,\r
-+      0x0001, 0x20a1, 0x1000, 0x900e, 0x2001, 0x0cc0, 0x9084, 0x0fff,\r
-+      0x20a8, 0x4104, 0x2001, 0x0000, 0x9086, 0x0000, 0x0120, 0x21a8,\r
-+      0x4104, 0x8001, 0x1de0, 0x756a, 0x766e, 0x7766, 0x7472, 0x7476,\r
-+      0x00e6, 0x2071, 0x1a98, 0x2472, 0x00ee, 0x20a1, 0x1cd0, 0x716c,\r
-+      0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x000f, 0x2001, 0x0001,\r
-+      0x9112, 0x900e, 0x21a8, 0x4104, 0x8211, 0x1de0, 0x716c, 0x3400,\r
-+      0x8001, 0x9102, 0x0120, 0x0218, 0x20a8, 0x900e, 0x4104, 0x2009,\r
-+      0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f,\r
-+      0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e,\r
-+      0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f03, 0x080c,\r
-+      0x5cdf, 0x080c, 0x9dc8, 0x080c, 0x10ba, 0x080c, 0x129f, 0x080c,\r
-+      0x1a53, 0x080c, 0x0d46, 0x080c, 0x103f, 0x080c, 0x3238, 0x080c,\r
-+      0x72aa, 0x080c, 0x661d, 0x080c, 0x7f73, 0x080c, 0x230a, 0x080c,\r
-+      0x82a0, 0x080c, 0x7933, 0x080c, 0x2147, 0x080c, 0x227b, 0x080c,\r
-+      0x22ff, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091d, 0x7880,\r
-+      0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833,\r
-+      0x0010, 0x0e04, 0x0911, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001,\r
-+      0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2071, 0x1800, 0x7003,\r
-+      0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003, 0x1168, 0x080c,\r
-+      0x499e, 0x080c, 0x325f, 0x080c, 0x731b, 0x080c, 0x6add, 0x080c,\r
-+      0x7f9c, 0x080c, 0x2ab8, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941,\r
-+      0x0ad8, 0x093e, 0x0b8f, 0x0d45, 0x0d45, 0x0d45, 0x080c, 0x0db4,\r
-+      0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086, 0x0001,\r
-+      0x1904, 0x0aab, 0x080c, 0x0e71, 0x080c, 0x6fb2, 0x0150, 0x080c,\r
-+      0x6fd5, 0x15a0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a,\r
-+      0x0468, 0x080c, 0x6ee4, 0x7000, 0x9086, 0x0001, 0x1904, 0x0aab,\r
-+      0x7094, 0x9086, 0x0028, 0x1904, 0x0aab, 0x080c, 0x7f6b, 0x080c,\r
-+      0x7f5d, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, 0x0100, 0x7827,\r
-+      0xffff, 0x7a28, 0x9295, 0x5e2f, 0x7a2a, 0x2011, 0x6e33, 0x080c,\r
-+      0x8038, 0x2011, 0x6e26, 0x080c, 0x810c, 0x2011, 0x5b3a, 0x080c,\r
-+      0x8038, 0x2011, 0x8030, 0x901e, 0x7392, 0x04d0, 0x080c, 0x53e7,\r
-+      0x2079, 0x0100, 0x7844, 0x9005, 0x1904, 0x0aab, 0x2011, 0x5b3a,\r
-+      0x080c, 0x8038, 0x2011, 0x6e33, 0x080c, 0x8038, 0x2011, 0x6e26,\r
-+      0x080c, 0x810c, 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000,\r
-+      0x7840, 0x9084, 0xfffb, 0x7842, 0x2001, 0x1977, 0x2004, 0x9005,\r
-+      0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, 0x5c87, 0x00ce, 0x0804,\r
-+      0x0aab, 0x780f, 0x006b, 0x7a28, 0x080c, 0x6fba, 0x0118, 0x9295,\r
-+      0x5e2f, 0x0010, 0x9295, 0x402f, 0x7a2a, 0x2011, 0x8010, 0x73d4,\r
-+      0x2001, 0x1978, 0x2003, 0x0001, 0x080c, 0x297e, 0x080c, 0x48d9,\r
-+      0x7244, 0xc284, 0x7246, 0x2001, 0x180c, 0x200c, 0xc1ac, 0xc1cc,\r
-+      0x2102, 0x080c, 0x963f, 0x2011, 0x0004, 0x080c, 0xbb27, 0x080c,\r
-+      0x6461, 0x080c, 0x6fb2, 0x1120, 0x080c, 0x29c2, 0x02e0, 0x0400,\r
-+      0x080c, 0x5c8e, 0x0140, 0x7093, 0x0001, 0x70cf, 0x0000, 0x080c,\r
-+      0x55b4, 0x0804, 0x0aab, 0x080c, 0x5386, 0xd094, 0x0188, 0x2011,\r
-+      0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x538a, 0xd0d4, 0x1118,\r
-+      0x080c, 0x29c2, 0x1270, 0x2011, 0x180c, 0x2204, 0xc0bc, 0x0088,\r
-+      0x080c, 0x538a, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd,\r
-+      0x0040, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x655a,\r
-+      0x0008, 0x2012, 0x080c, 0x6520, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e,\r
-+      0x00a8, 0x707b, 0x0000, 0x080c, 0x6fb2, 0x1130, 0x70ac, 0x9005,\r
-+      0x1168, 0x080c, 0xbf63, 0x0050, 0x080c, 0xbf63, 0x70d8, 0xd09c,\r
-+      0x1128, 0x70ac, 0x9005, 0x0110, 0x080c, 0x5c64, 0x70e3, 0x0000,\r
-+      0x70df, 0x0000, 0x70a3, 0x0000, 0x080c, 0x29ca, 0x0228, 0x2011,\r
-+      0x0101, 0x2204, 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x6fb2, 0x1178,\r
-+      0x9016, 0x0016, 0x2009, 0x0002, 0x2019, 0x193e, 0x211a, 0x001e,\r
-+      0x705b, 0xffff, 0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019,\r
-+      0x193e, 0x201b, 0x0000, 0x2079, 0x1853, 0x7804, 0xd0ac, 0x0108,\r
-+      0xc295, 0x72da, 0x080c, 0x6fb2, 0x0118, 0x9296, 0x0004, 0x0548,\r
-+      0x2011, 0x0001, 0x080c, 0xbb27, 0x70a7, 0x0000, 0x70ab, 0xffff,\r
-+      0x7003, 0x0002, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085,\r
-+      0x0003, 0x782a, 0x00fe, 0x080c, 0x2dbb, 0x2011, 0x0005, 0x080c,\r
-+      0x9771, 0x080c, 0x8973, 0x080c, 0x6fb2, 0x0148, 0x00c6, 0x2061,\r
-+      0x0100, 0x0016, 0x2009, 0x0002, 0x61e2, 0x001e, 0x00ce, 0x012e,\r
-+      0x0420, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, 0x0002, 0x00f6,\r
-+      0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a,\r
-+      0x00fe, 0x2011, 0x0005, 0x080c, 0x9771, 0x080c, 0x8973, 0x080c,\r
-+      0x6fb2, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x2009, 0x0002,\r
-+      0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6,\r
-+      0x080c, 0x6fb2, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782,\r
-+      0x080c, 0x6fb2, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff,\r
-+      0x0138, 0x9180, 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc,\r
-+      0x090c, 0x30d5, 0x8108, 0x1f04, 0x0abf, 0x707b, 0x0000, 0x707c,\r
-+      0x9084, 0x00ff, 0x707e, 0x70af, 0x0000, 0x00be, 0x00ce, 0x0005,\r
-+      0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904,\r
-+      0x0b8c, 0x70a8, 0x9086, 0xffff, 0x0130, 0x080c, 0x2dbb, 0x080c,\r
-+      0x8973, 0x0804, 0x0b8c, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0540,\r
-+      0xd084, 0x0530, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e,\r
-+      0xd08c, 0x01f0, 0x70dc, 0x9086, 0xffff, 0x01b0, 0x080c, 0x2f46,\r
-+      0x080c, 0x8973, 0x70d8, 0xd094, 0x1904, 0x0b8c, 0x2011, 0x0001,\r
-+      0x080c, 0xc212, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x2f80,\r
-+      0x080c, 0x8973, 0x0804, 0x0b8c, 0x70e0, 0x9005, 0x1904, 0x0b8c,\r
-+      0x70a4, 0x9005, 0x1904, 0x0b8c, 0x70d8, 0xd0a4, 0x0118, 0xd0b4,\r
-+      0x0904, 0x0b8c, 0x080c, 0x6520, 0x1904, 0x0b8c, 0x080c, 0x6573,\r
-+      0x1904, 0x0b8c, 0x080c, 0x655a, 0x01c0, 0x0156, 0x00c6, 0x20a9,\r
-+      0x007f, 0x900e, 0x0016, 0x080c, 0x623e, 0x1118, 0xb800, 0xd0ec,\r
-+      0x1138, 0x001e, 0x8108, 0x1f04, 0x0b32, 0x00ce, 0x015e, 0x0028,\r
-+      0x001e, 0x00ce, 0x015e, 0x0804, 0x0b8c, 0x0006, 0x2001, 0x0103,\r
-+      0x2003, 0x006b, 0x000e, 0x2011, 0x1984, 0x080c, 0x0f73, 0x2011,\r
-+      0x199e, 0x080c, 0x0f73, 0x7030, 0xc08c, 0x7032, 0x7003, 0x0003,\r
-+      0x70ab, 0xffff, 0x080c, 0x0e53, 0x9006, 0x080c, 0x260c, 0x0036,\r
-+      0x0046, 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4a76, 0x004e,\r
-+      0x003e, 0x00f6, 0x2079, 0x0100, 0x080c, 0x6fd5, 0x0150, 0x080c,\r
-+      0x6fb2, 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf,\r
-+      0x782a, 0x00fe, 0x2001, 0x19b9, 0x2004, 0x9086, 0x0005, 0x1120,\r
-+      0x2011, 0x0000, 0x080c, 0x9771, 0x2011, 0x0000, 0x080c, 0x977b,\r
-+      0x080c, 0x8973, 0x080c, 0x8a4e, 0x012e, 0x00be, 0x0005, 0x0016,\r
-+      0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x7904,\r
-+      0x918c, 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5c4d, 0x7940,\r
-+      0x918c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040,\r
-+      0xd19c, 0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156, 0x7954,\r
-+      0xd1ac, 0x1904, 0x0c1c, 0x2001, 0x1978, 0x2004, 0x9005, 0x1518,\r
-+      0x080c, 0x2a45, 0x1148, 0x2001, 0x0001, 0x080c, 0x29ad, 0x2001,\r
-+      0x0001, 0x080c, 0x2990, 0x00b8, 0x080c, 0x2a4d, 0x1138, 0x9006,\r
-+      0x080c, 0x29ad, 0x9006, 0x080c, 0x2990, 0x0068, 0x080c, 0x2a55,\r
-+      0x1d50, 0x2001, 0x1969, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c,\r
-+      0x27a7, 0x0804, 0x0cfc, 0x080c, 0x6fc3, 0x0148, 0x080c, 0x6fd5,\r
-+      0x1118, 0x080c, 0x72a5, 0x0050, 0x080c, 0x6fba, 0x0dd0, 0x080c,\r
-+      0x72a0, 0x080c, 0x7296, 0x080c, 0x6ee4, 0x0058, 0x080c, 0x6fb2,\r
-+      0x0140, 0x2009, 0x00f8, 0x080c, 0x5c4d, 0x7843, 0x0090, 0x7843,\r
-+      0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x6fb2,\r
-+      0x0138, 0x7824, 0xd0ac, 0x1904, 0x0d01, 0x1f04, 0x0bfb, 0x0070,\r
-+      0x7824, 0x080c, 0x6fcc, 0x0118, 0xd0ac, 0x1904, 0x0d01, 0x9084,\r
-+      0x1800, 0x0d98, 0x7003, 0x0001, 0x0804, 0x0d01, 0x2001, 0x0001,\r
-+      0x080c, 0x260c, 0x0804, 0x0d14, 0x2001, 0x1978, 0x2004, 0x9005,\r
-+      0x1518, 0x080c, 0x2a45, 0x1148, 0x2001, 0x0001, 0x080c, 0x29ad,\r
-+      0x2001, 0x0001, 0x080c, 0x2990, 0x00b8, 0x080c, 0x2a4d, 0x1138,\r
-+      0x9006, 0x080c, 0x29ad, 0x9006, 0x080c, 0x2990, 0x0068, 0x080c,\r
-+      0x2a55, 0x1d50, 0x2001, 0x1969, 0x2004, 0xd0fc, 0x0108, 0x0020,\r
-+      0x080c, 0x27a7, 0x0804, 0x0cfc, 0x7850, 0x9085, 0x0040, 0x7852,\r
-+      0x7938, 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2a5d, 0x9085,\r
-+      0x2000, 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c55, 0x080c,\r
-+      0x80ec, 0x1f04, 0x0c55, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf,\r
-+      0x7852, 0x793a, 0x080c, 0x6fc3, 0x0148, 0x080c, 0x6fd5, 0x1118,\r
-+      0x080c, 0x72a5, 0x0050, 0x080c, 0x6fba, 0x0dd0, 0x080c, 0x72a0,\r
-+      0x080c, 0x7296, 0x080c, 0x6ee4, 0x0020, 0x2009, 0x00f8, 0x080c,\r
-+      0x5c4d, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c7b, 0x7850, 0x9085,\r
-+      0x1400, 0x7852, 0x080c, 0x6fb2, 0x0120, 0x7843, 0x0090, 0x7843,\r
-+      0x0010, 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x80ec, 0x7820,\r
-+      0xd09c, 0x1588, 0x080c, 0x6fb2, 0x0904, 0x0ce1, 0x7824, 0xd0ac,\r
-+      0x1904, 0x0d01, 0x080c, 0x6fd5, 0x1530, 0x0046, 0x2021, 0x0320,\r
-+      0x8421, 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2a5d, 0x7824,\r
-+      0x9084, 0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810,\r
-+      0x2004, 0x9084, 0x9000, 0x0110, 0x080c, 0x0d22, 0x8421, 0x1158,\r
-+      0x1d04, 0x0cbc, 0x080c, 0x80ec, 0x080c, 0x72a0, 0x080c, 0x7296,\r
-+      0x7003, 0x0001, 0x04f0, 0x8319, 0x1940, 0x1d04, 0x0cc9, 0x080c,\r
-+      0x80ec, 0x2009, 0x196c, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a,\r
-+      0x1178, 0x200b, 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c,\r
-+      0x2a3e, 0x7924, 0x080c, 0x2a5d, 0xd19c, 0x0110, 0x080c, 0x297e,\r
-+      0x00d8, 0x080c, 0x6fc3, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c,\r
-+      0x6f8a, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2a5d,\r
-+      0x7824, 0x080c, 0x6fcc, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800,\r
-+      0x0950, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x260c,\r
-+      0x0078, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d,\r
-+      0x0002, 0x7906, 0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a,\r
-+      0x7850, 0x9085, 0x0400, 0x7852, 0x2001, 0x1978, 0x2003, 0x0000,\r
-+      0x9006, 0x78f2, 0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e,\r
-+      0x001e, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x00b6, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c, 0x80ec, 0x015e,\r
-+      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x001e,\r
-+      0x000e, 0x0005, 0x00e6, 0x2071, 0x1894, 0x7004, 0x9086, 0x0001,\r
-+      0x1110, 0x080c, 0x325f, 0x00ee, 0x0005, 0x0005, 0x2a70, 0x2061,\r
-+      0x197c, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001c, 0x600f,\r
-+      0x0317, 0x2001, 0x194d, 0x900e, 0x2102, 0x7192, 0x2001, 0x0100,\r
-+      0x2004, 0x9082, 0x0002, 0x0218, 0x705b, 0xffff, 0x0008, 0x715a,\r
-+      0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbf63, 0x70e7, 0x00c0,\r
-+      0x2061, 0x193d, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f,\r
-+      0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0,\r
-+      0x2061, 0x1945, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200,\r
-+      0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x195a,\r
-+      0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020,\r
-+      0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x623e, 0x1178,\r
-+      0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00,\r
-+      0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108,\r
-+      0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x2079,\r
-+      0x0000, 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04, 0x0db6,\r
-+      0x0006, 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000, 0x000e,\r
-+      0x7882, 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e, 0x7886,\r
-+      0x3900, 0x789a, 0x7833, 0x0012, 0x2091, 0x5000, 0x0156, 0x00d6,\r
-+      0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1a72, 0x7a08, 0x226a,\r
-+      0x2069, 0x1a73, 0x7a18, 0x226a, 0x8d68, 0x7a1c, 0x226a, 0x782c,\r
-+      0x2019, 0x1a80, 0x201a, 0x2019, 0x1a83, 0x9016, 0x7808, 0xd09c,\r
-+      0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386, 0x1a98, 0x0108,\r
-+      0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead, 0x2019, 0x1a81,\r
-+      0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000, 0x2069, 0x1a52,\r
-+      0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a, 0x8d68, 0x8318,\r
-+      0x1f04, 0x0e03, 0x002e, 0x003e, 0x00de, 0x015e, 0x2079, 0x1800,\r
-+      0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,\r
-+      0x0180, 0x2001, 0x19ea, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b,\r
-+      0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, 0x2003,\r
-+      0x1001, 0x080c, 0x5395, 0x1108, 0x0099, 0x0cd8, 0x0005, 0x918c,\r
-+      0x03ff, 0x2001, 0x0003, 0x2004, 0x9084, 0x0600, 0x1118, 0x918d,\r
-+      0x2800, 0x0010, 0x918d, 0x2000, 0x2001, 0x017f, 0x2102, 0x0005,\r
-+      0x0026, 0x0126, 0x2011, 0x0080, 0x080c, 0x0ecb, 0x20a9, 0x0900,\r
-+      0x080c, 0x0eec, 0x2011, 0x0040, 0x080c, 0x0ecb, 0x20a9, 0x0900,\r
-+      0x080c, 0x0eec, 0x0c78, 0x0026, 0x080c, 0x0ed8, 0x1118, 0x2011,\r
-+      0x0040, 0x0098, 0x2011, 0x010e, 0x2214, 0x9294, 0x0007, 0x9296,\r
-+      0x0007, 0x0118, 0x2011, 0xa880, 0x0010, 0x2011, 0x6840, 0xd0e4,\r
-+      0x70eb, 0x0000, 0x1128, 0x70eb, 0x0fa0, 0x080c, 0x0edd, 0x002e,\r
-+      0x0005, 0x0026, 0x080c, 0x0ed8, 0x0128, 0xd0a4, 0x1138, 0x2011,\r
-+      0xcdd5, 0x0010, 0x2011, 0x0080, 0x080c, 0x0edd, 0x002e, 0x0005,\r
-+      0x0026, 0x70eb, 0x0000, 0x080c, 0x0ed8, 0x1148, 0x080c, 0x2a55,\r
-+      0x1118, 0x2011, 0x8484, 0x0058, 0x2011, 0x8282, 0x0040, 0x080c,\r
-+      0x2a55, 0x1118, 0x2011, 0xcdc5, 0x0010, 0x2011, 0xcac2, 0x080c,\r
-+      0x0edd, 0x002e, 0x0005, 0x00e6, 0x0006, 0x2071, 0x1800, 0xd0b4,\r
-+      0x70e4, 0x1110, 0xc0e4, 0x0048, 0x0006, 0x3b00, 0x9084, 0xff3f,\r
-+      0x20d8, 0x000e, 0x70eb, 0x0000, 0xc0e5, 0x0079, 0x000e, 0x00ee,\r
-+      0x0005, 0x00e6, 0x2071, 0x1800, 0xd0e4, 0x70e4, 0x1110, 0xc0dc,\r
-+      0x0008, 0xc0dd, 0x0011, 0x00ee, 0x0005, 0x70e6, 0x7000, 0x9084,\r
-+      0x0007, 0x000b, 0x0005, 0x0e9a, 0x0e71, 0x0e71, 0x0e53, 0x0e80,\r
-+      0x0e71, 0x0e71, 0x0e80, 0x0016, 0x3b08, 0x3a00, 0x9104, 0x918d,\r
-+      0x00c0, 0x21d8, 0x9084, 0xff3f, 0x9205, 0x20d0, 0x001e, 0x0005,\r
-+      0x2001, 0x1839, 0x2004, 0xd0dc, 0x0005, 0x9e86, 0x1800, 0x190c,\r
-+      0x0db4, 0x70e4, 0xd0e4, 0x0108, 0xc2e5, 0x72e6, 0xd0e4, 0x1118,\r
-+      0x9294, 0x00c0, 0x0c01, 0x0005, 0x1d04, 0x0eec, 0x2091, 0x6000,\r
-+      0x1f04, 0x0eec, 0x0005, 0x890e, 0x810e, 0x810f, 0x9194, 0x003f,\r
-+      0x918c, 0xffc0, 0x0005, 0x0006, 0x2200, 0x914d, 0x894f, 0x894d,\r
-+      0x894d, 0x000e, 0x0005, 0x01d6, 0x0146, 0x0036, 0x0096, 0x2061,\r
-+      0x1883, 0x600b, 0x0000, 0x600f, 0x0000, 0x6003, 0x0000, 0x6007,\r
-+      0x0000, 0x2009, 0xffc0, 0x2105, 0x0006, 0x2001, 0xaaaa, 0x200f,\r
-+      0x2019, 0x5555, 0x9016, 0x2049, 0x0bff, 0xab02, 0xa001, 0xa001,\r
-+      0xa800, 0x9306, 0x1138, 0x2105, 0x9306, 0x0120, 0x8210, 0x99c8,\r
-+      0x0400, 0x0c98, 0x000e, 0x200f, 0x2001, 0x1893, 0x928a, 0x000e,\r
-+      0x1638, 0x928a, 0x0006, 0x2011, 0x0006, 0x1210, 0x2011, 0x0000,\r
-+      0x2202, 0x9006, 0x2008, 0x82ff, 0x01b0, 0x8200, 0x600a, 0x600f,\r
-+      0xffff, 0x6003, 0x0002, 0x6007, 0x0000, 0x0026, 0x2019, 0x0010,\r
-+      0x9280, 0x0001, 0x20e8, 0x21a0, 0x21a8, 0x4104, 0x8319, 0x1de0,\r
-+      0x8211, 0x1da0, 0x002e, 0x009e, 0x003e, 0x014e, 0x01de, 0x0005,\r
-+      0x2011, 0x000e, 0x08e8, 0x0016, 0x0026, 0x0096, 0x3348, 0x080c,\r
-+      0x0ef3, 0x2100, 0x9300, 0x2098, 0x22e0, 0x009e, 0x002e, 0x001e,\r
-+      0x0036, 0x3518, 0x20a9, 0x0001, 0x4002, 0x8007, 0x4004, 0x8319,\r
-+      0x1dd8, 0x003e, 0x0005, 0x20e9, 0x0001, 0x71b4, 0x81ff, 0x11c0,\r
-+      0x9006, 0x2009, 0x0200, 0x20a9, 0x0002, 0x9298, 0x0018, 0x23a0,\r
-+      0x4001, 0x2009, 0x0700, 0x20a9, 0x0002, 0x9298, 0x0008, 0x23a0,\r
-+      0x4001, 0x7078, 0x8007, 0x717c, 0x810f, 0x20a9, 0x0002, 0x4001,\r
-+      0x9298, 0x000c, 0x23a0, 0x900e, 0x080c, 0x0d94, 0x2001, 0x0000,\r
-+      0x810f, 0x20a9, 0x0002, 0x4001, 0x0005, 0x89ff, 0x0140, 0xa804,\r
-+      0xa807, 0x0000, 0x0006, 0x080c, 0x101d, 0x009e, 0x0cb0, 0x0005,\r
-+      0x00e6, 0x2071, 0x1800, 0x080c, 0x1096, 0x090c, 0x0db4, 0x00ee,\r
-+      0x0005, 0x0086, 0x00e6, 0x0006, 0x0026, 0x0036, 0x0126, 0x2091,\r
-+      0x8000, 0x00c9, 0x2071, 0x1800, 0x73bc, 0x702c, 0x9016, 0x9045,\r
-+      0x0158, 0x8210, 0x9906, 0x090c, 0x0db4, 0x2300, 0x9202, 0x0120,\r
-+      0x1a0c, 0x0db4, 0xa000, 0x0c98, 0x012e, 0x003e, 0x002e, 0x000e,\r
-+      0x00ee, 0x008e, 0x0005, 0x0086, 0x00e6, 0x0006, 0x0126, 0x2091,\r
-+      0x8000, 0x2071, 0x1906, 0x7010, 0x9005, 0x0140, 0x7018, 0x9045,\r
-+      0x0128, 0x9906, 0x090c, 0x0db4, 0xa000, 0x0cc8, 0x012e, 0x000e,\r
-+      0x00ee, 0x008e, 0x0005, 0x00e6, 0x2071, 0x1800, 0x0126, 0x2091,\r
-+      0x8000, 0x70bc, 0x8001, 0x0270, 0x70be, 0x702c, 0x2048, 0x9085,\r
-+      0x0001, 0xa800, 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e,\r
-+      0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000,\r
-+      0x2071, 0x1800, 0x70bc, 0x90ca, 0x0040, 0x0268, 0x8001, 0x70be,\r
-+      0x702c, 0x2048, 0xa800, 0x702e, 0xa803, 0x0000, 0xa807, 0x0000,\r
-+      0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091,\r
-+      0x8000, 0x0016, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0xa862,\r
-+      0x9184, 0xffc0, 0xa85e, 0x001e, 0x0020, 0x00e6, 0x0126, 0x2091,\r
-+      0x8000, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,\r
-+      0x8000, 0x70be, 0x080c, 0x7f5d, 0x012e, 0x00ee, 0x0005, 0x2071,\r
-+      0x1800, 0x9026, 0x2009, 0x0000, 0x2049, 0x0400, 0x2900, 0x702e,\r
-+      0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886,\r
-+      0x0440, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x1883,\r
-+      0x7000, 0x9005, 0x11a0, 0x2001, 0x0492, 0xa802, 0x2048, 0x2009,\r
-+      0x2480, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420,\r
-+      0x9886, 0x0800, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071,\r
-+      0x1883, 0x7104, 0x7200, 0x82ff, 0x01d0, 0x7308, 0x8318, 0x831f,\r
-+      0x831b, 0x831b, 0x7312, 0x8319, 0x2001, 0x0800, 0xa802, 0x2048,\r
-+      0x8900, 0xa802, 0x2040, 0xa95e, 0xaa62, 0x8420, 0x2300, 0x9906,\r
-+      0x0130, 0x2848, 0x9188, 0x0040, 0x9291, 0x0000, 0x0c88, 0xa803,\r
-+      0x0000, 0x2071, 0x1800, 0x74ba, 0x74be, 0x0005, 0x00e6, 0x0016,\r
-+      0x9984, 0xfc00, 0x01e8, 0x908c, 0xf800, 0x1168, 0x9982, 0x0400,\r
-+      0x02b8, 0x9982, 0x0440, 0x0278, 0x9982, 0x0492, 0x0288, 0x9982,\r
-+      0x0800, 0x1270, 0x0040, 0x9982, 0x0800, 0x0250, 0x2071, 0x1883,\r
-+      0x7010, 0x9902, 0x1228, 0x9085, 0x0001, 0x001e, 0x00ee, 0x0005,\r
-+      0x9006, 0x0cd8, 0x00e6, 0x2071, 0x19e9, 0x7007, 0x0000, 0x9006,\r
-+      0x701e, 0x7022, 0x7002, 0x2071, 0x0000, 0x7010, 0x9085, 0x8044,\r
-+      0x7012, 0x2071, 0x0080, 0x9006, 0x20a9, 0x0040, 0x7022, 0x1f04,\r
-+      0x10ce, 0x702b, 0x0020, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,\r
-+      0x00e6, 0xa06f, 0x0000, 0x2071, 0x19e9, 0x701c, 0x9088, 0x19f3,\r
-+      0x280a, 0x8000, 0x9084, 0x003f, 0x701e, 0x7120, 0x9106, 0x090c,\r
-+      0x0db4, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x00a9,\r
-+      0x00fe, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6,\r
-+      0x2071, 0x19e9, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080,\r
-+      0x0021, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x7004, 0x9086, 0x0000,\r
-+      0x1110, 0x7007, 0x0006, 0x7000, 0x0002, 0x1117, 0x1115, 0x1115,\r
-+      0x1115, 0x128e, 0x128e, 0x128e, 0x128e, 0x080c, 0x0db4, 0x701c,\r
-+      0x7120, 0x9106, 0x1148, 0x792c, 0x9184, 0x0001, 0x1120, 0xd1fc,\r
-+      0x1110, 0x7007, 0x0000, 0x0005, 0x0096, 0x9180, 0x19f3, 0x2004,\r
-+      0x700a, 0x2048, 0x8108, 0x918c, 0x003f, 0x7122, 0x782b, 0x0026,\r
-+      0xa88c, 0x7802, 0xa890, 0x7806, 0xa894, 0x780a, 0xa898, 0x780e,\r
-+      0xa878, 0x700e, 0xa870, 0x7016, 0xa874, 0x701a, 0xa868, 0x009e,\r
-+      0xd084, 0x0120, 0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002,\r
-+      0x00b1, 0x0005, 0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182,\r
-+      0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x7212, 0x8203, 0x7812,\r
-+      0x782b, 0x0020, 0x782b, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016,\r
-+      0x0026, 0x0136, 0x0146, 0x0156, 0x7014, 0x20e0, 0x7018, 0x2098,\r
-+      0x20e9, 0x0000, 0x20a1, 0x0088, 0x782b, 0x0026, 0x710c, 0x2011,\r
-+      0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x22a8,\r
-+      0x4006, 0x8203, 0x7812, 0x782b, 0x0020, 0x3300, 0x701a, 0x782b,\r
-+      0x0001, 0x015e, 0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x2009,\r
-+      0x19e9, 0x2104, 0xc095, 0x200a, 0x080c, 0x10f4, 0x0005, 0x0016,\r
-+      0x00e6, 0x2071, 0x19e9, 0x00f6, 0x2079, 0x0080, 0x792c, 0xd1bc,\r
-+      0x190c, 0x0dad, 0x782b, 0x0002, 0xd1fc, 0x0120, 0x918c, 0x0700,\r
-+      0x7004, 0x0023, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x1105, 0x11ad,\r
-+      0x11e1, 0x0db4, 0x0db4, 0x129a, 0x0db4, 0x918c, 0x0700, 0x1550,\r
-+      0x0136, 0x0146, 0x0156, 0x7014, 0x20e8, 0x7018, 0x20a0, 0x20e1,\r
-+      0x0000, 0x2099, 0x0088, 0x782b, 0x0040, 0x7010, 0x20a8, 0x4005,\r
-+      0x3400, 0x701a, 0x015e, 0x014e, 0x013e, 0x700c, 0x9005, 0x0578,\r
-+      0x7800, 0x7802, 0x7804, 0x7806, 0x080c, 0x114a, 0x0005, 0x7008,\r
-+      0x0096, 0x2048, 0xa86f, 0x0100, 0x009e, 0x7007, 0x0000, 0x080c,\r
-+      0x1105, 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0200, 0x009e,\r
-+      0x0ca0, 0x918c, 0x0700, 0x1150, 0x700c, 0x9005, 0x0180, 0x7800,\r
-+      0x7802, 0x7804, 0x7806, 0x080c, 0x115f, 0x0005, 0x7008, 0x0096,\r
-+      0x2048, 0xa86f, 0x0200, 0x009e, 0x7007, 0x0000, 0x0080, 0x0096,\r
-+      0x7008, 0x2048, 0x7800, 0xa88e, 0x7804, 0xa892, 0x7808, 0xa896,\r
-+      0x780c, 0xa89a, 0xa86f, 0x0100, 0x009e, 0x7007, 0x0000, 0x0096,\r
-+      0x00d6, 0x7008, 0x2048, 0x2001, 0x18af, 0x2004, 0x9906, 0x1128,\r
-+      0xa89c, 0x080f, 0x00de, 0x009e, 0x00a0, 0x00de, 0x009e, 0x0096,\r
-+      0x00d6, 0x7008, 0x2048, 0x0081, 0x0150, 0xa89c, 0x0086, 0x2940,\r
-+      0x080f, 0x008e, 0x00de, 0x009e, 0x080c, 0x10f4, 0x0005, 0x00de,\r
-+      0x009e, 0x080c, 0x10f4, 0x0005, 0xa8a8, 0xd08c, 0x0005, 0x0096,\r
-+      0xa0a0, 0x904d, 0x090c, 0x0db4, 0xa06c, 0x908e, 0x0100, 0x0130,\r
-+      0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x687f,\r
-+      0xa09f, 0x0000, 0xa0a3, 0x0000, 0x2848, 0x080c, 0x101d, 0x009e,\r
-+      0x0005, 0x00a6, 0xa0a0, 0x904d, 0x090c, 0x0db4, 0xa06c, 0x908e,\r
-+      0x0100, 0x0128, 0xa87b, 0x0001, 0xa883, 0x0000, 0x00c0, 0xa80c,\r
-+      0x2050, 0xb004, 0x9005, 0x0198, 0xa80e, 0x2050, 0x8006, 0x8006,\r
-+      0x8007, 0x908c, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xa076,\r
-+      0xa172, 0xb000, 0xa07a, 0x2810, 0x080c, 0x10d5, 0x00e8, 0xa97c,\r
-+      0xa894, 0x0016, 0x0006, 0x080c, 0x687f, 0x000e, 0x001e, 0xd1fc,\r
-+      0x1138, 0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0x9e32, 0x00ce,\r
-+      0x7008, 0x2048, 0xa89f, 0x0000, 0xa8a3, 0x0000, 0x080c, 0x101d,\r
-+      0x7007, 0x0000, 0x080c, 0x10f4, 0x00ae, 0x0005, 0x0126, 0x2091,\r
-+      0x8000, 0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002,\r
-+      0x012e, 0x0005, 0x7007, 0x0000, 0x080c, 0x1105, 0x0005, 0x0126,\r
-+      0x2091, 0x2200, 0x2079, 0x0300, 0x2071, 0x1a33, 0x7003, 0x0000,\r
-+      0x78bf, 0x00f6, 0x781b, 0x4800, 0x00c1, 0x7803, 0x0003, 0x780f,\r
-+      0x0000, 0x20a9, 0x0254, 0x2061, 0xd8e3, 0x2c0d, 0x7912, 0xe104,\r
-+      0x9ce0, 0x0002, 0x7916, 0x1f04, 0x12b5, 0x7807, 0x0007, 0x7803,\r
-+      0x0000, 0x7803, 0x0001, 0x012e, 0x0005, 0x00c6, 0x7803, 0x0000,\r
-+      0x7808, 0xd09c, 0x0110, 0x7820, 0x0cd8, 0x2001, 0x1a34, 0x2003,\r
-+      0x0000, 0x78ab, 0x0004, 0x78ac, 0xd0ac, 0x1de8, 0x78ab, 0x0002,\r
-+      0x7807, 0x0007, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827, 0x0031,\r
-+      0x782b, 0x1a52, 0x781f, 0xff00, 0x781b, 0xb700, 0x2001, 0x0200,\r
-+      0x2004, 0xd0dc, 0x0110, 0x781f, 0x0303, 0x2061, 0x1a52, 0x602f,\r
-+      0x1cd0, 0x2001, 0x1819, 0x2004, 0x9082, 0x1cd0, 0x6032, 0x603b,\r
-+      0x1f26, 0x2001, 0x3138, 0xd0fc, 0x190c, 0x0db4, 0x2001, 0x0003,\r
-+      0x2004, 0xd0d4, 0x1118, 0x783f, 0x3138, 0x0020, 0x9084, 0xc000,\r
-+      0x783f, 0xb138, 0x00ce, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908,\r
-+      0x9184, 0x0070, 0x190c, 0x0dad, 0xd19c, 0x0158, 0x7820, 0x908c,\r
-+      0xf000, 0x15e8, 0x908a, 0x0024, 0x1a0c, 0x0db4, 0x0023, 0x012e,\r
-+      0x0005, 0x012e, 0x0005, 0x1347, 0x1347, 0x135e, 0x1363, 0x1367,\r
-+      0x136c, 0x1394, 0x1398, 0x13a6, 0x13aa, 0x1347, 0x1434, 0x1438,\r
-+      0x149b, 0x1347, 0x1347, 0x1347, 0x1347, 0x1347, 0x1347, 0x1347,\r
-+      0x1347, 0x1347, 0x1347, 0x1347, 0x1347, 0x1347, 0x136e, 0x1347,\r
-+      0x1347, 0x1347, 0x1347, 0x1347, 0x1347, 0x134b, 0x1349, 0x080c,\r
-+      0x0db4, 0x080c, 0x0dad, 0x080c, 0x14a2, 0x2009, 0x1a4b, 0x2104,\r
-+      0x8000, 0x200a, 0x080c, 0x7a07, 0x080c, 0x1958, 0x0005, 0x2009,\r
-+      0x0048, 0x2060, 0x080c, 0x9eac, 0x012e, 0x0005, 0x7004, 0xc085,\r
-+      0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c,\r
-+      0x14a2, 0x080c, 0x15de, 0x0005, 0x080c, 0x0db4, 0x080c, 0x14a2,\r
-+      0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009,\r
-+      0x0048, 0x080c, 0x9eac, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009,\r
-+      0x03e8, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8,\r
-+      0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x14a7, 0x2001,\r
-+      0x0307, 0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005,\r
-+      0x080c, 0x14a2, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff,\r
-+      0x009e, 0x2009, 0x0048, 0x080c, 0x9eac, 0x0005, 0x080c, 0x14a2,\r
-+      0x080c, 0x0db4, 0x080c, 0x14a2, 0x080c, 0x141f, 0x7827, 0x0018,\r
-+      0x79ac, 0xd1dc, 0x0540, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000,\r
-+      0x9065, 0x0138, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020,\r
-+      0x0400, 0x7004, 0x9005, 0x1180, 0x78ab, 0x0004, 0x7827, 0x0018,\r
-+      0x782b, 0x0000, 0xd1bc, 0x090c, 0x0db4, 0x2001, 0x020d, 0x2003,\r
-+      0x0050, 0x2003, 0x0020, 0x0480, 0x78ab, 0x0004, 0x7803, 0x0001,\r
-+      0x080c, 0x1438, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c,\r
-+      0x0db4, 0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x0198,\r
-+      0x080c, 0x7a07, 0x080c, 0x1958, 0x080c, 0xbb17, 0x0158, 0xa9ac,\r
-+      0xa936, 0xa9b0, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa880,\r
-+      0xc0bd, 0xa882, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,\r
-+      0xd0bc, 0x6024, 0x190c, 0xbefc, 0x2029, 0x00c8, 0x8529, 0x0128,\r
-+      0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd88c,\r
-+      0xd5a4, 0x1118, 0x080c, 0x14a7, 0x0005, 0x080c, 0x7a07, 0x080c,\r
-+      0x1958, 0x0005, 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016,\r
-+      0x0066, 0x0076, 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007,\r
-+      0x9186, 0x0003, 0x0120, 0x2001, 0x0016, 0x080c, 0x1518, 0x00fe,\r
-+      0x007e, 0x006e, 0x001e, 0x0005, 0x7004, 0xc09d, 0x7006, 0x0005,\r
-+      0x7104, 0x9184, 0x0004, 0x190c, 0x0db4, 0xd184, 0x1189, 0xd19c,\r
-+      0x0158, 0xc19c, 0x7106, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,\r
-+      0x0020, 0x080c, 0x14a7, 0x0005, 0x81ff, 0x190c, 0x0db4, 0x0005,\r
-+      0xc184, 0xd1b4, 0xc1b4, 0x7106, 0x0016, 0x00e6, 0x15e0, 0x2071,\r
-+      0x0200, 0x080c, 0x15d2, 0x6014, 0x9005, 0x05a8, 0x0096, 0x2048,\r
-+      0xa864, 0x009e, 0x9084, 0x00ff, 0x908e, 0x0029, 0x0160, 0x908e,\r
-+      0x0048, 0x1548, 0x601c, 0xd084, 0x11d8, 0x00f6, 0x2c78, 0x080c,\r
-+      0x1648, 0x00fe, 0x00a8, 0x00f6, 0x2c78, 0x080c, 0x1790, 0x00fe,\r
-+      0x2009, 0x01f4, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005,\r
-+      0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x0401, 0x0040,\r
-+      0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x12c5, 0x7803, 0x0001,\r
-+      0x00ee, 0x001e, 0x0005, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,\r
-+      0x0020, 0x0069, 0x0ca8, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c,\r
-+      0x9eac, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c,\r
-+      0x141f, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0510,\r
-+      0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, 0x79bc,\r
-+      0xd1a4, 0x1528, 0x79b8, 0x918c, 0x0fff, 0x0180, 0x9182, 0x0841,\r
-+      0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, 0x810c,\r
-+      0x080c, 0x150a, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9, 0x6827,\r
-+      0x0002, 0x04c1, 0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4, 0x1500,\r
-+      0x6804, 0x9005, 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, 0x080c,\r
-+      0x7a07, 0x080c, 0x1958, 0x0090, 0x7827, 0x0015, 0x782b, 0x0000,\r
-+      0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d, 0x2003, 0x0020,\r
-+      0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001, 0x00de, 0x0005,\r
-+      0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30, 0x7827, 0x0015,\r
-+      0x782b, 0x0000, 0x7803, 0x0001, 0x6800, 0x9085, 0x1800, 0x6802,\r
-+      0x00de, 0x0005, 0x6824, 0x9084, 0x0003, 0x1de0, 0x0005, 0x2001,\r
-+      0x0030, 0x2c08, 0x621c, 0x0021, 0x7830, 0x9086, 0x0041, 0x0005,\r
-+      0x00f6, 0x2079, 0x0300, 0x0006, 0x7808, 0xd09c, 0x0140, 0x0016,\r
-+      0x0026, 0x00c6, 0x080c, 0x130c, 0x00ce, 0x002e, 0x001e, 0x000e,\r
-+      0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x0059, 0x1118,\r
-+      0x000e, 0x00fe, 0x0005, 0x000e, 0x792c, 0x3900, 0x8000, 0x2004,\r
-+      0x080c, 0x0db4, 0x2009, 0x180c, 0x2104, 0xc0f4, 0x200a, 0x2009,\r
-+      0xff00, 0x8109, 0x0904, 0x1596, 0x7a18, 0x9284, 0x0030, 0x0904,\r
-+      0x1591, 0x9284, 0x0048, 0x9086, 0x0008, 0x1904, 0x1591, 0x2001,\r
-+      0x0109, 0x2004, 0xd08c, 0x01f0, 0x0006, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x0126, 0x2091, 0x2800, 0x00f6, 0x0026, 0x0016,\r
-+      0x2009, 0x1a4d, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x83aa,\r
-+      0x001e, 0x002e, 0x00fe, 0x012e, 0x015e, 0x014e, 0x013e, 0x01de,\r
-+      0x01ce, 0x000e, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x01d0, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x00f6, 0x0016,\r
-+      0x2009, 0x1a4e, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x1d4a,\r
-+      0x001e, 0x00fe, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e,\r
-+      0x000e, 0x7818, 0xd0bc, 0x1904, 0x1541, 0x0005, 0x2001, 0x180c,\r
-+      0x2004, 0xd0f4, 0x1528, 0x7a18, 0x9284, 0x0030, 0x0508, 0x9284,\r
-+      0x0048, 0x9086, 0x0008, 0x11e0, 0x2001, 0x19c7, 0x2004, 0x9005,\r
-+      0x01b8, 0x2001, 0x1a36, 0x2004, 0x9086, 0x0000, 0x0188, 0x2009,\r
-+      0x1a4c, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x9430, 0x2009,\r
-+      0x180c, 0x2104, 0xc0f5, 0x200a, 0x2009, 0xff00, 0x0804, 0x1541,\r
-+      0x9085, 0x0001, 0x0005, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080,\r
-+      0x080c, 0x153a, 0x1108, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004,\r
-+      0x080c, 0x0db4, 0x7037, 0x0001, 0x7150, 0x7037, 0x0002, 0x7050,\r
-+      0x2060, 0xd1bc, 0x1110, 0x7054, 0x2060, 0x0005, 0x00e6, 0x0016,\r
-+      0x2071, 0x0200, 0x0c79, 0x6124, 0xd1dc, 0x01f8, 0x701c, 0xd08c,\r
-+      0x0904, 0x163d, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004, 0xd0bc,\r
-+      0x0904, 0x163d, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104, 0x6038,\r
-+      0x00ce, 0x918e, 0x0039, 0x1904, 0x163d, 0x9c06, 0x15f0, 0x0126,\r
-+      0x2091, 0x2600, 0x080c, 0x794e, 0x012e, 0x7358, 0x745c, 0x6014,\r
-+      0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,\r
-+      0xd0bc, 0x190c, 0xbed7, 0xab42, 0xac3e, 0x2001, 0x1875, 0x2004,\r
-+      0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058,\r
-+      0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff,\r
-+      0x080c, 0x1f46, 0x1190, 0x080c, 0x17eb, 0x2a00, 0xa816, 0x0130,\r
-+      0x2800, 0xa80e, 0x2c05, 0xa80a, 0x2c00, 0xa812, 0x7037, 0x0020,\r
-+      0x781f, 0x0300, 0x001e, 0x00ee, 0x0005, 0x7037, 0x0050, 0x7037,\r
-+      0x0020, 0x001e, 0x00ee, 0x080c, 0x14a7, 0x0005, 0x080c, 0x0db4,\r
-+      0x0016, 0x2009, 0x00a0, 0x8109, 0xa001, 0xa001, 0xa001, 0x1dd8,\r
-+      0x001e, 0x2ff0, 0x0126, 0x2091, 0x2200, 0x00c6, 0x3e60, 0x6014,\r
-+      0x2048, 0x2940, 0x903e, 0x2730, 0xa864, 0x2068, 0xa81a, 0x9d84,\r
-+      0x000f, 0x9088, 0x1f26, 0x2165, 0x0002, 0x167c, 0x16c9, 0x167c,\r
-+      0x167c, 0x167c, 0x16ab, 0x167c, 0x1680, 0x1675, 0x16c0, 0x167c,\r
-+      0x167c, 0x167c, 0x1785, 0x1694, 0x168a, 0xa964, 0x918c, 0x00ff,\r
-+      0x918e, 0x0048, 0x0904, 0x16c0, 0x9085, 0x0001, 0x0804, 0x177c,\r
-+      0xa87c, 0xd0bc, 0x0dc8, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888,\r
-+      0x0804, 0x16d0, 0xa87c, 0xd0bc, 0x0d78, 0xa890, 0xa842, 0xa88c,\r
-+      0xa83e, 0xa888, 0x0804, 0x171f, 0xa87c, 0xd0bc, 0x0d28, 0xa890,\r
-+      0xa842, 0xa88c, 0xa83e, 0xa804, 0x9045, 0x090c, 0x0db4, 0xa164,\r
-+      0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1f26, 0x2065, 0xa888, 0xd19c,\r
-+      0x1904, 0x171f, 0x0428, 0xa87c, 0xd0ac, 0x0970, 0xa804, 0x9045,\r
-+      0x090c, 0x0db4, 0xa164, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1f26,\r
-+      0x2065, 0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x171f, 0x0080,\r
-+      0xa87c, 0xd0ac, 0x0904, 0x167c, 0x9006, 0xa842, 0xa83e, 0x0804,\r
-+      0x171f, 0xa87c, 0xd0ac, 0x0904, 0x167c, 0x9006, 0xa842, 0xa83e,\r
-+      0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0db4, 0x9082, 0x001b, 0x0002,\r
-+      0x16f3, 0x16f3, 0x16f5, 0x16f3, 0x16f3, 0x16f3, 0x16fb, 0x16f3,\r
-+      0x16f3, 0x16f3, 0x1701, 0x16f3, 0x16f3, 0x16f3, 0x1707, 0x16f3,\r
-+      0x16f3, 0x16f3, 0x170d, 0x16f3, 0x16f3, 0x16f3, 0x1713, 0x16f3,\r
-+      0x16f3, 0x16f3, 0x1719, 0x080c, 0x0db4, 0xa574, 0xa478, 0xa37c,\r
-+      0xa280, 0x0804, 0x1764, 0xa584, 0xa488, 0xa38c, 0xa290, 0x0804,\r
-+      0x1764, 0xa594, 0xa498, 0xa39c, 0xa2a0, 0x0804, 0x1764, 0xa5a4,\r
-+      0xa4a8, 0xa3ac, 0xa2b0, 0x0804, 0x1764, 0xa5b4, 0xa4b8, 0xa3bc,\r
-+      0xa2c0, 0x0804, 0x1764, 0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0, 0x0804,\r
-+      0x1764, 0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0, 0x0804, 0x1764, 0x2c05,\r
-+      0x908a, 0x0034, 0x1a0c, 0x0db4, 0x9082, 0x001b, 0x0002, 0x1742,\r
-+      0x1740, 0x1740, 0x1740, 0x1740, 0x1740, 0x1749, 0x1740, 0x1740,\r
-+      0x1740, 0x1740, 0x1740, 0x1750, 0x1740, 0x1740, 0x1740, 0x1740,\r
-+      0x1740, 0x1757, 0x1740, 0x1740, 0x1740, 0x1740, 0x1740, 0x175e,\r
-+      0x080c, 0x0db4, 0xa56c, 0xa470, 0xa774, 0xa678, 0xa37c, 0xa280,\r
-+      0x00d8, 0xa584, 0xa488, 0xa78c, 0xa690, 0xa394, 0xa298, 0x00a0,\r
-+      0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac, 0xa2b0, 0x0068, 0xa5b4,\r
-+      0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4, 0xa2c8, 0x0030, 0xa5cc, 0xa4d0,\r
-+      0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0, 0xab2e, 0xaa32, 0xad1e, 0xac22,\r
-+      0xaf26, 0xae2a, 0xa988, 0x8c60, 0x2c1d, 0xa8ac, 0xaab0, 0xa836,\r
-+      0xaa3a, 0x8109, 0xa916, 0x1158, 0x3e60, 0x601c, 0xc085, 0x601e,\r
-+      0xa87c, 0xc0dd, 0xa87e, 0x9006, 0x00ce, 0x012e, 0x0005, 0x2800,\r
-+      0xa80e, 0xab0a, 0x2c00, 0xa812, 0x0c78, 0x0804, 0x167c, 0x0016,\r
-+      0x2009, 0x00a0, 0x8109, 0xa001, 0xa001, 0xa001, 0x1dd8, 0x001e,\r
-+      0x2ff0, 0x0126, 0x2091, 0x2200, 0x00c6, 0x3e60, 0x6014, 0x2048,\r
-+      0x2940, 0xa80e, 0x2061, 0x1f21, 0xa813, 0x1f21, 0x2c05, 0xa80a,\r
-+      0xa964, 0xa91a, 0xa87c, 0xd0ac, 0x090c, 0x0db4, 0x9006, 0xa842,\r
-+      0xa83e, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0db4, 0xadcc, 0xacd0,\r
-+      0xafd4, 0xaed8, 0xabdc, 0xaae0, 0xab2e, 0xaa32, 0xad1e, 0xac22,\r
-+      0xaf26, 0xae2a, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0xa988, 0xa864,\r
-+      0x9084, 0x00ff, 0x9086, 0x0008, 0x1120, 0x8109, 0xa916, 0x0128,\r
-+      0x0078, 0x918a, 0x0002, 0xa916, 0x1158, 0x3e60, 0x601c, 0xc085,\r
-+      0x601e, 0xa87c, 0xc0dd, 0xa87e, 0x9006, 0x00ce, 0x012e, 0x0005,\r
-+      0xa804, 0x9045, 0x090c, 0x0db4, 0xa80e, 0xa064, 0xa81a, 0x9084,\r
-+      0x000f, 0x9080, 0x1f26, 0x2015, 0x82ff, 0x090c, 0x0db4, 0xaa12,\r
-+      0x2205, 0xa80a, 0x0c10, 0x903e, 0x2730, 0xa880, 0xd0fc, 0x1190,\r
-+      0x2d00, 0x0002, 0x18e0, 0x1842, 0x1842, 0x18e0, 0x18e0, 0x18da,\r
-+      0x18e0, 0x1842, 0x1891, 0x1891, 0x1891, 0x18e0, 0x18e0, 0x18e0,\r
-+      0x18d7, 0x1891, 0xc0fc, 0xa882, 0xab2c, 0xaa30, 0xad1c, 0xac20,\r
-+      0xdd9c, 0x0904, 0x18e2, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0db4,\r
-+      0x9082, 0x001b, 0x0002, 0x182e, 0x182c, 0x182c, 0x182c, 0x182c,\r
-+      0x182c, 0x1832, 0x182c, 0x182c, 0x182c, 0x182c, 0x182c, 0x1836,\r
-+      0x182c, 0x182c, 0x182c, 0x182c, 0x182c, 0x183a, 0x182c, 0x182c,\r
-+      0x182c, 0x182c, 0x182c, 0x183e, 0x080c, 0x0db4, 0xa774, 0xa678,\r
-+      0x0804, 0x18e2, 0xa78c, 0xa690, 0x0804, 0x18e2, 0xa7a4, 0xa6a8,\r
-+      0x0804, 0x18e2, 0xa7bc, 0xa6c0, 0x0804, 0x18e2, 0xa7d4, 0xa6d8,\r
-+      0x0804, 0x18e2, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0db4, 0x9082,\r
-+      0x001b, 0x0002, 0x1865, 0x1865, 0x1867, 0x1865, 0x1865, 0x1865,\r
-+      0x186d, 0x1865, 0x1865, 0x1865, 0x1873, 0x1865, 0x1865, 0x1865,\r
-+      0x1879, 0x1865, 0x1865, 0x1865, 0x187f, 0x1865, 0x1865, 0x1865,\r
-+      0x1885, 0x1865, 0x1865, 0x1865, 0x188b, 0x080c, 0x0db4, 0xa574,\r
-+      0xa478, 0xa37c, 0xa280, 0x0804, 0x18e2, 0xa584, 0xa488, 0xa38c,\r
-+      0xa290, 0x0804, 0x18e2, 0xa594, 0xa498, 0xa39c, 0xa2a0, 0x0804,\r
-+      0x18e2, 0xa5a4, 0xa4a8, 0xa3ac, 0xa2b0, 0x0804, 0x18e2, 0xa5b4,\r
-+      0xa4b8, 0xa3bc, 0xa2c0, 0x0804, 0x18e2, 0xa5c4, 0xa4c8, 0xa3cc,\r
-+      0xa2d0, 0x0804, 0x18e2, 0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0, 0x0804,\r
-+      0x18e2, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0db4, 0x9082, 0x001b,\r
-+      0x0002, 0x18b4, 0x18b2, 0x18b2, 0x18b2, 0x18b2, 0x18b2, 0x18bb,\r
-+      0x18b2, 0x18b2, 0x18b2, 0x18b2, 0x18b2, 0x18c2, 0x18b2, 0x18b2,\r
-+      0x18b2, 0x18b2, 0x18b2, 0x18c9, 0x18b2, 0x18b2, 0x18b2, 0x18b2,\r
-+      0x18b2, 0x18d0, 0x080c, 0x0db4, 0xa56c, 0xa470, 0xa774, 0xa678,\r
-+      0xa37c, 0xa280, 0x0438, 0xa584, 0xa488, 0xa78c, 0xa690, 0xa394,\r
-+      0xa298, 0x0400, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac, 0xa2b0,\r
-+      0x00c8, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4, 0xa2c8, 0x0090,\r
-+      0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0, 0x0058, 0x9d86,\r
-+      0x000e, 0x1130, 0x080c, 0x1ede, 0x1904, 0x17eb, 0x900e, 0x0050,\r
-+      0x080c, 0x0db4, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a,\r
-+      0x080c, 0x1ede, 0x0005, 0x6014, 0x2048, 0x6118, 0x810c, 0x810c,\r
-+      0x810c, 0x81ff, 0x1118, 0xa887, 0x0001, 0x0008, 0xa986, 0x601b,\r
-+      0x0002, 0xa974, 0xd1dc, 0x1108, 0x0005, 0xa934, 0xa88c, 0x9106,\r
-+      0x1158, 0xa938, 0xa890, 0x9106, 0x1138, 0x601c, 0xc084, 0x601e,\r
-+      0x2009, 0x0048, 0x0804, 0x9eac, 0x0005, 0x0126, 0x00c6, 0x2091,\r
-+      0x2200, 0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, 0x0000, 0x05b0,\r
-+      0x9186, 0x0003, 0x0598, 0x6020, 0x6023, 0x0000, 0x0006, 0x2031,\r
-+      0x0008, 0x00c6, 0x781f, 0x0808, 0x7808, 0xd09c, 0x0120, 0x080c,\r
-+      0x130c, 0x8631, 0x1db8, 0x00ce, 0x781f, 0x0800, 0x2031, 0x0168,\r
-+      0x00c6, 0x7808, 0xd09c, 0x190c, 0x130c, 0x00ce, 0x2001, 0x0038,\r
-+      0x080c, 0x19e5, 0x7930, 0x9186, 0x0040, 0x0160, 0x9186, 0x0042,\r
-+      0x190c, 0x0db4, 0x2001, 0x001e, 0x8001, 0x1df0, 0x8631, 0x1d40,\r
-+      0x080c, 0x19f4, 0x000e, 0x6022, 0x012e, 0x0005, 0x080c, 0x19e1,\r
-+      0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000, 0x0ca0,\r
-+      0x00f6, 0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe,\r
-+      0x080c, 0x6fb2, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001,\r
-+      0x0160, 0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, 0x8211,\r
-+      0x1de0, 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x7062, 0x006e,\r
-+      0x0005, 0x0479, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138,\r
-+      0x2202, 0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x2a69, 0x2009,\r
-+      0x003c, 0x080c, 0x2268, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000,\r
-+      0x9084, 0x003c, 0x1de0, 0x080c, 0x7f5d, 0x70a0, 0x70a2, 0x7098,\r
-+      0x709a, 0x709c, 0x709e, 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6,\r
-+      0x2079, 0x0300, 0x080c, 0x12c5, 0x7803, 0x0001, 0x00fe, 0x00ee,\r
-+      0x0005, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160,\r
-+      0x202c, 0x2003, 0x0000, 0x080c, 0x6fb2, 0x1108, 0x0005, 0x2021,\r
-+      0x0260, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109,\r
-+      0x201c, 0x939c, 0x0048, 0x1160, 0x2001, 0x0111, 0x201c, 0x83ff,\r
-+      0x1110, 0x8421, 0x1d70, 0x2001, 0x015d, 0x2003, 0x0000, 0x0005,\r
-+      0x0046, 0x2021, 0x0019, 0x2003, 0x0048, 0xa001, 0xa001, 0x201c,\r
-+      0x939c, 0x0048, 0x0120, 0x8421, 0x1db0, 0x004e, 0x0c60, 0x004e,\r
-+      0x0c40, 0x601c, 0xc084, 0x601e, 0x0005, 0x2c08, 0x621c, 0x080c,\r
-+      0x1518, 0x7930, 0x0005, 0x2c08, 0x621c, 0x080c, 0x15c3, 0x7930,\r
-+      0x0005, 0x8001, 0x1df0, 0x0005, 0x2031, 0x0005, 0x781c, 0x9084,\r
-+      0x0007, 0x0170, 0x2001, 0x0038, 0x0c41, 0x9186, 0x0040, 0x0904,\r
-+      0x1a52, 0x2001, 0x001e, 0x0c69, 0x8631, 0x1d80, 0x080c, 0x0db4,\r
-+      0x781f, 0x0202, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0b10,\r
-+      0x0c01, 0x781c, 0xd084, 0x0110, 0x0861, 0x04e0, 0x2001, 0x0030,\r
-+      0x0891, 0x9186, 0x0040, 0x0568, 0x781c, 0xd084, 0x1da8, 0x781f,\r
-+      0x0101, 0x2001, 0x0014, 0x0869, 0x2001, 0x0037, 0x0821, 0x9186,\r
-+      0x0040, 0x0140, 0x2001, 0x0030, 0x080c, 0x19eb, 0x9186, 0x0040,\r
-+      0x190c, 0x0db4, 0x00d6, 0x2069, 0x0200, 0x692c, 0xd1f4, 0x1170,\r
-+      0xd1c4, 0x0160, 0xd19c, 0x0130, 0x6800, 0x9085, 0x1800, 0x6802,\r
-+      0x00de, 0x0080, 0x6908, 0x9184, 0x0007, 0x1db0, 0x00de, 0x781f,\r
-+      0x0100, 0x791c, 0x9184, 0x0007, 0x090c, 0x0db4, 0xa001, 0xa001,\r
-+      0x781f, 0x0200, 0x0005, 0x0126, 0x2091, 0x2400, 0x2071, 0x1a36,\r
-+      0x2079, 0x0090, 0x012e, 0x0005, 0x9280, 0x0005, 0x2004, 0x2048,\r
-+      0xa97c, 0xd1dc, 0x1904, 0x1ae7, 0xa964, 0x9184, 0x0007, 0x0002,\r
-+      0x1a70, 0x1ad2, 0x1a87, 0x1a87, 0x1a87, 0x1aba, 0x1a9a, 0x1a89,\r
-+      0x918c, 0x00ff, 0x9186, 0x0008, 0x1170, 0xa87c, 0xd0b4, 0x0904,\r
-+      0x1d05, 0x9006, 0xa842, 0xa83e, 0xa988, 0x2900, 0xa85a, 0xa813,\r
-+      0x1f21, 0x0804, 0x1ae3, 0x9186, 0x0048, 0x0904, 0x1ad2, 0x080c,\r
-+      0x0db4, 0xa87c, 0xd0b4, 0x0904, 0x1d05, 0xa890, 0xa842, 0xa83a,\r
-+      0xa88c, 0xa83e, 0xa836, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0xa988,\r
-+      0x0804, 0x1ada, 0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x1d38,\r
-+      0xa87c, 0xd0b4, 0x0904, 0x1d05, 0xa890, 0xa842, 0xa83a, 0xa88c,\r
-+      0xa83e, 0xa836, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0xa804, 0xa85a,\r
-+      0x2040, 0xa064, 0x9084, 0x000f, 0x9080, 0x1f26, 0x2005, 0xa812,\r
-+      0xa988, 0x0448, 0x918c, 0x00ff, 0x9186, 0x0015, 0x1540, 0xa87c,\r
-+      0xd0b4, 0x0904, 0x1d05, 0xa804, 0xa85a, 0x2040, 0xa064, 0x9084,\r
-+      0x000f, 0x9080, 0x1f26, 0x2005, 0xa812, 0xa988, 0x9006, 0xa842,\r
-+      0xa83e, 0x0088, 0xa87c, 0xd0b4, 0x0904, 0x1d05, 0xa988, 0x9006,\r
-+      0xa842, 0xa83e, 0x2900, 0xa85a, 0xa864, 0x9084, 0x000f, 0x9080,\r
-+      0x1f26, 0x2005, 0xa812, 0xa916, 0xa87c, 0xc0dd, 0xa87e, 0x0005,\r
-+      0x00f6, 0x2079, 0x0090, 0x782c, 0xd0fc, 0x190c, 0x1d4a, 0x00e6,\r
-+      0x2071, 0x1a36, 0x7000, 0x9005, 0x1904, 0x1b50, 0x7206, 0x9280,\r
-+      0x0005, 0x204c, 0x9280, 0x0004, 0x2004, 0x782b, 0x0004, 0x00f6,\r
-+      0x2079, 0x0200, 0x7803, 0x0040, 0x00fe, 0x00b6, 0x2058, 0xb86c,\r
-+      0x7836, 0xb890, 0x00be, 0x00f6, 0x2079, 0x0200, 0x7803, 0x0040,\r
-+      0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x781a, 0x2079,\r
-+      0x0100, 0x8004, 0x78d6, 0x00fe, 0xa814, 0x2050, 0xa858, 0x2040,\r
-+      0xa810, 0x2060, 0xa064, 0x90ec, 0x000f, 0xa944, 0x791a, 0x7116,\r
-+      0xa848, 0x781e, 0x701a, 0x9006, 0x700e, 0x7012, 0x7004, 0xa940,\r
-+      0xa838, 0x9106, 0x1500, 0xa93c, 0xa834, 0x9106, 0x11e0, 0x0006,\r
-+      0x0016, 0xa938, 0xa834, 0x9105, 0x0118, 0x001e, 0x000e, 0x0098,\r
-+      0x001e, 0x000e, 0x8aff, 0x01c8, 0x0126, 0x2091, 0x8000, 0x2009,\r
-+      0x0306, 0x200b, 0x0808, 0x00d9, 0x0108, 0x00c9, 0x012e, 0x9006,\r
-+      0x00ee, 0x00fe, 0x0005, 0x0036, 0x0046, 0xab38, 0xac34, 0x080c,\r
-+      0x1f46, 0x004e, 0x003e, 0x0d30, 0x0c98, 0x9085, 0x0001, 0x0c80,\r
-+      0x2009, 0x0306, 0x200b, 0x4800, 0x7027, 0x0000, 0x0005, 0x0076,\r
-+      0x0066, 0x0056, 0x0046, 0x0036, 0x0026, 0x8aff, 0x0904, 0x1cfe,\r
-+      0x700c, 0x7214, 0x923a, 0x7010, 0x7218, 0x9203, 0x0a04, 0x1cfd,\r
-+      0x9705, 0x0904, 0x1cfd, 0x903e, 0x2730, 0xa880, 0xd0fc, 0x1190,\r
-+      0x2d00, 0x0002, 0x1c92, 0x1bd2, 0x1bd2, 0x1c92, 0x1c92, 0x1c6f,\r
-+      0x1c92, 0x1bd2, 0x1c76, 0x1c21, 0x1c21, 0x1c92, 0x1c92, 0x1c92,\r
-+      0x1c69, 0x1c21, 0xc0fc, 0xa882, 0xab2c, 0xaa30, 0xad1c, 0xac20,\r
-+      0xdd9c, 0x0904, 0x1c94, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0db4,\r
-+      0x9082, 0x001b, 0x0002, 0x1bbe, 0x1bbc, 0x1bbc, 0x1bbc, 0x1bbc,\r
-+      0x1bbc, 0x1bc2, 0x1bbc, 0x1bbc, 0x1bbc, 0x1bbc, 0x1bbc, 0x1bc6,\r
-+      0x1bbc, 0x1bbc, 0x1bbc, 0x1bbc, 0x1bbc, 0x1bca, 0x1bbc, 0x1bbc,\r
-+      0x1bbc, 0x1bbc, 0x1bbc, 0x1bce, 0x080c, 0x0db4, 0xa774, 0xa678,\r
-+      0x0804, 0x1c94, 0xa78c, 0xa690, 0x0804, 0x1c94, 0xa7a4, 0xa6a8,\r
-+      0x0804, 0x1c94, 0xa7bc, 0xa6c0, 0x0804, 0x1c94, 0xa7d4, 0xa6d8,\r
-+      0x0804, 0x1c94, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0db4, 0x9082,\r
-+      0x001b, 0x0002, 0x1bf5, 0x1bf5, 0x1bf7, 0x1bf5, 0x1bf5, 0x1bf5,\r
-+      0x1bfd, 0x1bf5, 0x1bf5, 0x1bf5, 0x1c03, 0x1bf5, 0x1bf5, 0x1bf5,\r
-+      0x1c09, 0x1bf5, 0x1bf5, 0x1bf5, 0x1c0f, 0x1bf5, 0x1bf5, 0x1bf5,\r
-+      0x1c15, 0x1bf5, 0x1bf5, 0x1bf5, 0x1c1b, 0x080c, 0x0db4, 0xa574,\r
-+      0xa478, 0xa37c, 0xa280, 0x0804, 0x1c94, 0xa584, 0xa488, 0xa38c,\r
-+      0xa290, 0x0804, 0x1c94, 0xa594, 0xa498, 0xa39c, 0xa2a0, 0x0804,\r
-+      0x1c94, 0xa5a4, 0xa4a8, 0xa3ac, 0xa2b0, 0x0804, 0x1c94, 0xa5b4,\r
-+      0xa4b8, 0xa3bc, 0xa2c0, 0x0804, 0x1c94, 0xa5c4, 0xa4c8, 0xa3cc,\r
-+      0xa2d0, 0x0804, 0x1c94, 0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0, 0x0804,\r
-+      0x1c94, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0db4, 0x9082, 0x001b,\r
-+      0x0002, 0x1c44, 0x1c42, 0x1c42, 0x1c42, 0x1c42, 0x1c42, 0x1c4c,\r
-+      0x1c42, 0x1c42, 0x1c42, 0x1c42, 0x1c42, 0x1c54, 0x1c42, 0x1c42,\r
-+      0x1c42, 0x1c42, 0x1c42, 0x1c5b, 0x1c42, 0x1c42, 0x1c42, 0x1c42,\r
-+      0x1c42, 0x1c62, 0x080c, 0x0db4, 0xa56c, 0xa470, 0xa774, 0xa678,\r
-+      0xa37c, 0xa280, 0x0804, 0x1c94, 0xa584, 0xa488, 0xa78c, 0xa690,\r
-+      0xa394, 0xa298, 0x0804, 0x1c94, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8,\r
-+      0xa3ac, 0xa2b0, 0x04c8, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4,\r
-+      0xa2c8, 0x0490, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0,\r
-+      0x0458, 0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x1518, 0x080c,\r
-+      0x1ede, 0x1904, 0x1b6d, 0x900e, 0x0804, 0x1cfe, 0xab64, 0x939c,\r
-+      0x00ff, 0x9386, 0x0048, 0x1180, 0x00c6, 0x7004, 0x2060, 0x6004,\r
-+      0x9086, 0x0043, 0x00ce, 0x0904, 0x1c21, 0xab9c, 0x9016, 0xad8c,\r
-+      0xac90, 0xaf94, 0xae98, 0x0040, 0x9386, 0x0008, 0x0904, 0x1c21,\r
-+      0x080c, 0x0db4, 0x080c, 0x0db4, 0x2009, 0x030f, 0x2104, 0xd0fc,\r
-+      0x0530, 0x0066, 0x2009, 0x0306, 0x2104, 0x9084, 0x0030, 0x15c8,\r
-+      0x2031, 0x1000, 0x200b, 0x4000, 0x2600, 0x9302, 0x928b, 0x0000,\r
-+      0xa82e, 0xa932, 0x0278, 0x9105, 0x0168, 0x2011, 0x0000, 0x2618,\r
-+      0x2600, 0x9500, 0xa81e, 0x9481, 0x0000, 0xa822, 0xa880, 0xc0fd,\r
-+      0xa882, 0x0020, 0xa82f, 0x0000, 0xa833, 0x0000, 0x006e, 0x7b12,\r
-+      0x7a16, 0x7d02, 0x7c06, 0x7f0a, 0x7e0e, 0x782b, 0x0001, 0x7000,\r
-+      0x8000, 0x7002, 0xa83c, 0x9300, 0xa83e, 0xa840, 0x9201, 0xa842,\r
-+      0x700c, 0x9300, 0x700e, 0x7010, 0x9201, 0x7012, 0x080c, 0x1ede,\r
-+      0x0428, 0x2031, 0x0080, 0x9584, 0x007f, 0x0108, 0x9632, 0x7124,\r
-+      0x7000, 0x9086, 0x0000, 0x1198, 0xc185, 0x7126, 0x2009, 0x0306,\r
-+      0x2104, 0xd0b4, 0x1904, 0x1ca4, 0x200b, 0x4040, 0x2009, 0x1a4f,\r
-+      0x2104, 0x8000, 0x0a04, 0x1ca4, 0x200a, 0x0804, 0x1ca4, 0xc18d,\r
-+      0x7126, 0xd184, 0x1d58, 0x0804, 0x1ca4, 0x9006, 0x002e, 0x003e,\r
-+      0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0db4, 0x0026,\r
-+      0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003, 0x0000,\r
-+      0x7004, 0x0016, 0x080c, 0x1b60, 0x001e, 0x2060, 0x6014, 0x2048,\r
-+      0x080c, 0xbb17, 0x0118, 0xa880, 0xc0bd, 0xa882, 0x6020, 0x9086,\r
-+      0x0006, 0x1180, 0x2061, 0x0100, 0x62c8, 0x2001, 0x00fa, 0x8001,\r
-+      0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89a, 0x60c8, 0xa896,\r
-+      0x7004, 0x2060, 0x00c6, 0x080c, 0xb74a, 0x00ce, 0x2001, 0x19c7,\r
-+      0x2004, 0x9c06, 0x1160, 0x2009, 0x0040, 0x080c, 0x2268, 0x080c,\r
-+      0x98ea, 0x2011, 0x0000, 0x080c, 0x977b, 0x080c, 0x8a4e, 0x002e,\r
-+      0x0804, 0x1e8e, 0x0126, 0x2091, 0x2400, 0xa858, 0x2040, 0x792c,\r
-+      0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1d07, 0x7000, 0x0002,\r
-+      0x1e8e, 0x1d5c, 0x1ddc, 0x1e8c, 0x8001, 0x7002, 0x7027, 0x0000,\r
-+      0xd19c, 0x1158, 0x8aff, 0x0904, 0x1da9, 0x080c, 0x1b67, 0x0904,\r
-+      0x1e8e, 0x080c, 0x1b67, 0x0804, 0x1e8e, 0x782b, 0x0004, 0xd194,\r
-+      0x0148, 0xa880, 0xc0fc, 0xa882, 0x8aff, 0x1518, 0xa87c, 0xc0f5,\r
-+      0xa87e, 0x00f8, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x0016, 0x7910,\r
-+      0xa82c, 0x9100, 0xa82e, 0x7914, 0xa830, 0x9101, 0xa832, 0x001e,\r
-+      0x7810, 0x931a, 0x7814, 0x9213, 0x7800, 0xa81e, 0x7804, 0xa822,\r
-+      0xab3e, 0xaa42, 0x003e, 0x002e, 0x080c, 0x1ef9, 0xa880, 0xc0fd,\r
-+      0xa882, 0x2a00, 0xa816, 0x2800, 0xa85a, 0x2c00, 0xa812, 0x7003,\r
-+      0x0000, 0x2009, 0x0306, 0x200b, 0x4800, 0x7027, 0x0000, 0x0804,\r
-+      0x1e8e, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079,\r
-+      0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816, 0x0036,\r
-+      0x2019, 0x1000, 0x8319, 0x090c, 0x0db4, 0x7820, 0xd0bc, 0x1dd0,\r
-+      0x003e, 0x79c8, 0x000e, 0x9102, 0x001e, 0x0006, 0x0016, 0x79c4,\r
-+      0x000e, 0x9103, 0x78c6, 0x000e, 0x78ca, 0x9284, 0x1984, 0x9085,\r
-+      0x0012, 0x7816, 0x002e, 0x00fe, 0x782b, 0x0008, 0x7003, 0x0000,\r
-+      0x080c, 0x1b60, 0x0804, 0x1e8e, 0x8001, 0x7002, 0x7024, 0x8004,\r
-+      0x7026, 0xd194, 0x0170, 0x782c, 0xd0fc, 0x1904, 0x1d4f, 0xd19c,\r
-+      0x1904, 0x1e8a, 0x8aff, 0x0904, 0x1e8e, 0x080c, 0x1b67, 0x0804,\r
-+      0x1e8e, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x080c, 0x1ef9, 0xdd9c,\r
-+      0x1904, 0x1e49, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0db4, 0x9082,\r
-+      0x001b, 0x0002, 0x1e1d, 0x1e1d, 0x1e1f, 0x1e1d, 0x1e1d, 0x1e1d,\r
-+      0x1e25, 0x1e1d, 0x1e1d, 0x1e1d, 0x1e2b, 0x1e1d, 0x1e1d, 0x1e1d,\r
-+      0x1e31, 0x1e1d, 0x1e1d, 0x1e1d, 0x1e37, 0x1e1d, 0x1e1d, 0x1e1d,\r
-+      0x1e3d, 0x1e1d, 0x1e1d, 0x1e1d, 0x1e43, 0x080c, 0x0db4, 0xa07c,\r
-+      0x931a, 0xa080, 0x9213, 0x0804, 0x1d7e, 0xa08c, 0x931a, 0xa090,\r
-+      0x9213, 0x0804, 0x1d7e, 0xa09c, 0x931a, 0xa0a0, 0x9213, 0x0804,\r
-+      0x1d7e, 0xa0ac, 0x931a, 0xa0b0, 0x9213, 0x0804, 0x1d7e, 0xa0bc,\r
-+      0x931a, 0xa0c0, 0x9213, 0x0804, 0x1d7e, 0xa0cc, 0x931a, 0xa0d0,\r
-+      0x9213, 0x0804, 0x1d7e, 0xa0dc, 0x931a, 0xa0e0, 0x9213, 0x0804,\r
-+      0x1d7e, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0db4, 0x9082, 0x001b,\r
-+      0x0002, 0x1e6c, 0x1e6a, 0x1e6a, 0x1e6a, 0x1e6a, 0x1e6a, 0x1e72,\r
-+      0x1e6a, 0x1e6a, 0x1e6a, 0x1e6a, 0x1e6a, 0x1e78, 0x1e6a, 0x1e6a,\r
-+      0x1e6a, 0x1e6a, 0x1e6a, 0x1e7e, 0x1e6a, 0x1e6a, 0x1e6a, 0x1e6a,\r
-+      0x1e6a, 0x1e84, 0x080c, 0x0db4, 0xa07c, 0x931a, 0xa080, 0x9213,\r
-+      0x0804, 0x1d7e, 0xa094, 0x931a, 0xa098, 0x9213, 0x0804, 0x1d7e,\r
-+      0xa0ac, 0x931a, 0xa0b0, 0x9213, 0x0804, 0x1d7e, 0xa0c4, 0x931a,\r
-+      0xa0c8, 0x9213, 0x0804, 0x1d7e, 0xa0dc, 0x931a, 0xa0e0, 0x9213,\r
-+      0x0804, 0x1d7e, 0x0804, 0x1d7a, 0x080c, 0x0db4, 0x012e, 0x0005,\r
-+      0x00f6, 0x00e6, 0x2071, 0x1a36, 0x7000, 0x9086, 0x0000, 0x0904,\r
-+      0x1ed9, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c, 0xd194, 0x01b8,\r
-+      0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, 0x080c, 0xd8d5,\r
-+      0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0db4, 0x0016, 0x2009,\r
-+      0x0040, 0x080c, 0x2268, 0x001e, 0x2001, 0x020c, 0x2102, 0x2009,\r
-+      0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009,\r
-+      0x0040, 0x080c, 0x2268, 0x782c, 0xd0fc, 0x09a8, 0x080c, 0x1d4a,\r
-+      0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004, 0x782c, 0xd0ac,\r
-+      0x1de8, 0x2009, 0x0040, 0x080c, 0x2268, 0x782b, 0x0002, 0x7003,\r
-+      0x0000, 0x080c, 0x1b60, 0x00ee, 0x00fe, 0x0005, 0xa880, 0xd0fc,\r
-+      0x11a8, 0x8c60, 0x2c05, 0x9005, 0x0110, 0x8a51, 0x0005, 0xa004,\r
-+      0x9005, 0x0168, 0xa85a, 0x2040, 0xa064, 0x9084, 0x000f, 0x9080,\r
-+      0x1f26, 0x2065, 0x8cff, 0x090c, 0x0db4, 0x8a51, 0x0005, 0x2050,\r
-+      0x0005, 0xa880, 0xd0fc, 0x11b8, 0x8a50, 0x8c61, 0x2c05, 0x9005,\r
-+      0x1190, 0x2800, 0x9906, 0x0120, 0xa000, 0x9005, 0x1108, 0x2900,\r
-+      0x2040, 0xa85a, 0xa064, 0x9084, 0x000f, 0x9080, 0x1f36, 0x2065,\r
-+      0x8cff, 0x090c, 0x0db4, 0x0005, 0x0000, 0x001d, 0x0021, 0x0025,\r
-+      0x0029, 0x002d, 0x0031, 0x0035, 0x0000, 0x001b, 0x0021, 0x0027,\r
-+      0x002d, 0x0033, 0x0000, 0x0000, 0x0023, 0x0000, 0x0000, 0x1f19,\r
-+      0x1f15, 0x0000, 0x0000, 0x1f23, 0x0000, 0x1f19, 0x1f20, 0x1f20,\r
-+      0x1f1d, 0x0000, 0x0000, 0x0000, 0x1f23, 0x1f20, 0x0000, 0x1f1b,\r
-+      0x1f1b, 0x0000, 0x0000, 0x1f23, 0x0000, 0x1f1b, 0x1f21, 0x1f21,\r
-+      0x1f21, 0x0000, 0x0000, 0x0000, 0x1f23, 0x1f21, 0x00c6, 0x00d6,\r
-+      0x0086, 0xab42, 0xac3e, 0xa888, 0x9055, 0x0904, 0x2125, 0x2940,\r
-+      0xa064, 0x90ec, 0x000f, 0x9084, 0x00ff, 0x9086, 0x0008, 0x1118,\r
-+      0x2061, 0x1f21, 0x00d0, 0x9de0, 0x1f26, 0x9d86, 0x0007, 0x0130,\r
-+      0x9d86, 0x000e, 0x0118, 0x9d86, 0x000f, 0x1120, 0xa08c, 0x9422,\r
-+      0xa090, 0x931b, 0x2c05, 0x9065, 0x1140, 0x0310, 0x0804, 0x2125,\r
-+      0xa004, 0x9045, 0x0904, 0x2125, 0x08d8, 0x2c05, 0x9005, 0x0904,\r
-+      0x200d, 0xdd9c, 0x1904, 0x1fc9, 0x908a, 0x0036, 0x1a0c, 0x0db4,\r
-+      0x9082, 0x001b, 0x0002, 0x1f9e, 0x1f9e, 0x1fa0, 0x1f9e, 0x1f9e,\r
-+      0x1f9e, 0x1fa6, 0x1f9e, 0x1f9e, 0x1f9e, 0x1fac, 0x1f9e, 0x1f9e,\r
-+      0x1f9e, 0x1fb2, 0x1f9e, 0x1f9e, 0x1f9e, 0x1fb8, 0x1f9e, 0x1f9e,\r
-+      0x1f9e, 0x1fbe, 0x1f9e, 0x1f9e, 0x1f9e, 0x1fc4, 0x080c, 0x0db4,\r
-+      0xa07c, 0x9422, 0xa080, 0x931b, 0x0804, 0x2003, 0xa08c, 0x9422,\r
-+      0xa090, 0x931b, 0x0804, 0x2003, 0xa09c, 0x9422, 0xa0a0, 0x931b,\r
-+      0x0804, 0x2003, 0xa0ac, 0x9422, 0xa0b0, 0x931b, 0x0804, 0x2003,\r
-+      0xa0bc, 0x9422, 0xa0c0, 0x931b, 0x0804, 0x2003, 0xa0cc, 0x9422,\r
-+      0xa0d0, 0x931b, 0x0804, 0x2003, 0xa0dc, 0x9422, 0xa0e0, 0x931b,\r
-+      0x04d0, 0x908a, 0x0034, 0x1a0c, 0x0db4, 0x9082, 0x001b, 0x0002,\r
-+      0x1feb, 0x1fe9, 0x1fe9, 0x1fe9, 0x1fe9, 0x1fe9, 0x1ff0, 0x1fe9,\r
-+      0x1fe9, 0x1fe9, 0x1fe9, 0x1fe9, 0x1ff5, 0x1fe9, 0x1fe9, 0x1fe9,\r
-+      0x1fe9, 0x1fe9, 0x1ffa, 0x1fe9, 0x1fe9, 0x1fe9, 0x1fe9, 0x1fe9,\r
-+      0x1fff, 0x080c, 0x0db4, 0xa07c, 0x9422, 0xa080, 0x931b, 0x0098,\r
-+      0xa094, 0x9422, 0xa098, 0x931b, 0x0070, 0xa0ac, 0x9422, 0xa0b0,\r
-+      0x931b, 0x0048, 0xa0c4, 0x9422, 0xa0c8, 0x931b, 0x0020, 0xa0dc,\r
-+      0x9422, 0xa0e0, 0x931b, 0x0630, 0x2300, 0x9405, 0x0160, 0x8a51,\r
-+      0x0904, 0x2125, 0x8c60, 0x0804, 0x1f75, 0xa004, 0x9045, 0x0904,\r
-+      0x2125, 0x0804, 0x1f50, 0x8a51, 0x0904, 0x2125, 0x8c60, 0x2c05,\r
-+      0x9005, 0x1158, 0xa004, 0x9045, 0x0904, 0x2125, 0xa064, 0x90ec,\r
-+      0x000f, 0x9de0, 0x1f26, 0x2c05, 0x2060, 0xa880, 0xc0fc, 0xa882,\r
-+      0x0804, 0x211a, 0x2c05, 0x8422, 0x8420, 0x831a, 0x9399, 0x0000,\r
-+      0xac2e, 0xab32, 0xdd9c, 0x1904, 0x20b7, 0x9082, 0x001b, 0x0002,\r
-+      0x2053, 0x2053, 0x2055, 0x2053, 0x2053, 0x2053, 0x2063, 0x2053,\r
-+      0x2053, 0x2053, 0x2071, 0x2053, 0x2053, 0x2053, 0x207f, 0x2053,\r
-+      0x2053, 0x2053, 0x208d, 0x2053, 0x2053, 0x2053, 0x209b, 0x2053,\r
-+      0x2053, 0x2053, 0x20a9, 0x080c, 0x0db4, 0xa17c, 0x2400, 0x9122,\r
-+      0xa180, 0x2300, 0x911b, 0x0a0c, 0x0db4, 0xa074, 0x9420, 0xa078,\r
-+      0x9319, 0x0804, 0x2115, 0xa18c, 0x2400, 0x9122, 0xa190, 0x2300,\r
-+      0x911b, 0x0a0c, 0x0db4, 0xa084, 0x9420, 0xa088, 0x9319, 0x0804,\r
-+      0x2115, 0xa19c, 0x2400, 0x9122, 0xa1a0, 0x2300, 0x911b, 0x0a0c,\r
-+      0x0db4, 0xa094, 0x9420, 0xa098, 0x9319, 0x0804, 0x2115, 0xa1ac,\r
-+      0x2400, 0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c, 0x0db4, 0xa0a4,\r
-+      0x9420, 0xa0a8, 0x9319, 0x0804, 0x2115, 0xa1bc, 0x2400, 0x9122,\r
-+      0xa1c0, 0x2300, 0x911b, 0x0a0c, 0x0db4, 0xa0b4, 0x9420, 0xa0b8,\r
-+      0x9319, 0x0804, 0x2115, 0xa1cc, 0x2400, 0x9122, 0xa1d0, 0x2300,\r
-+      0x911b, 0x0a0c, 0x0db4, 0xa0c4, 0x9420, 0xa0c8, 0x9319, 0x0804,\r
-+      0x2115, 0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300, 0x911b, 0x0a0c,\r
-+      0x0db4, 0xa0d4, 0x9420, 0xa0d8, 0x9319, 0x0804, 0x2115, 0x9082,\r
-+      0x001b, 0x0002, 0x20d5, 0x20d3, 0x20d3, 0x20d3, 0x20d3, 0x20d3,\r
-+      0x20e2, 0x20d3, 0x20d3, 0x20d3, 0x20d3, 0x20d3, 0x20ef, 0x20d3,\r
-+      0x20d3, 0x20d3, 0x20d3, 0x20d3, 0x20fc, 0x20d3, 0x20d3, 0x20d3,\r
-+      0x20d3, 0x20d3, 0x2109, 0x080c, 0x0db4, 0xa17c, 0x2400, 0x9122,\r
-+      0xa180, 0x2300, 0x911b, 0x0a0c, 0x0db4, 0xa06c, 0x9420, 0xa070,\r
-+      0x9319, 0x0498, 0xa194, 0x2400, 0x9122, 0xa198, 0x2300, 0x911b,\r
-+      0x0a0c, 0x0db4, 0xa084, 0x9420, 0xa088, 0x9319, 0x0430, 0xa1ac,\r
-+      0x2400, 0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c, 0x0db4, 0xa09c,\r
-+      0x9420, 0xa0a0, 0x9319, 0x00c8, 0xa1c4, 0x2400, 0x9122, 0xa1c8,\r
-+      0x2300, 0x911b, 0x0a0c, 0x0db4, 0xa0b4, 0x9420, 0xa0b8, 0x9319,\r
-+      0x0060, 0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300, 0x911b, 0x0a0c,\r
-+      0x0db4, 0xa0cc, 0x9420, 0xa0d0, 0x9319, 0xac1e, 0xab22, 0xa880,\r
-+      0xc0fd, 0xa882, 0x2800, 0xa85a, 0x2c00, 0xa812, 0x2a00, 0xa816,\r
-+      0x000e, 0x000e, 0x000e, 0x9006, 0x0028, 0x008e, 0x00de, 0x00ce,\r
-+      0x9085, 0x0001, 0x0005, 0x2001, 0x0005, 0x2004, 0xd0bc, 0x190c,\r
-+      0x0dad, 0x9084, 0x0007, 0x0002, 0x2146, 0x1d4a, 0x2146, 0x213c,\r
-+      0x213f, 0x2142, 0x213f, 0x2142, 0x080c, 0x1d4a, 0x0005, 0x080c,\r
-+      0x118f, 0x0005, 0x080c, 0x1d4a, 0x080c, 0x118f, 0x0005, 0x0126,\r
-+      0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x0260, 0x2069, 0x1800,\r
-+      0x7817, 0x0000, 0x789b, 0x0814, 0x78a3, 0x0406, 0x789f, 0x0410,\r
-+      0x2009, 0x013b, 0x200b, 0x0400, 0x781b, 0x0002, 0x783b, 0x001f,\r
-+      0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005, 0x2091, 0x2600,\r
-+      0x781c, 0xd0a4, 0x190c, 0x2265, 0x7900, 0xd1dc, 0x1118, 0x9084,\r
-+      0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x218d, 0x2185, 0x794e,\r
-+      0x2185, 0x2187, 0x2187, 0x2187, 0x2187, 0x7934, 0x2185, 0x2189,\r
-+      0x2185, 0x2187, 0x2185, 0x2187, 0x2185, 0x080c, 0x0db4, 0x0031,\r
-+      0x0020, 0x080c, 0x7934, 0x080c, 0x794e, 0x0005, 0x0006, 0x0016,\r
-+      0x0026, 0x080c, 0xd8d5, 0x7930, 0x9184, 0x0003, 0x01c0, 0x2001,\r
-+      0x19c7, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133, 0x2004, 0x9005,\r
-+      0x090c, 0x0db4, 0x00c6, 0x2001, 0x19c7, 0x2064, 0x080c, 0xb74a,\r
-+      0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x2268, 0x00d0, 0x9184,\r
-+      0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, 0x080c, 0x6fb2,\r
-+      0x1138, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x080c, 0x6ee4, 0x0010,\r
-+      0x080c, 0x5b90, 0x080c, 0x79fd, 0x0041, 0x0018, 0x9184, 0x9540,\r
-+      0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x0036, 0x0046,\r
-+      0x0056, 0x2071, 0x1a33, 0x080c, 0x1958, 0x005e, 0x004e, 0x003e,\r
-+      0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, 0x1800, 0x7128,\r
-+      0x2001, 0x1940, 0x2102, 0x2001, 0x1948, 0x2102, 0x2001, 0x013b,\r
-+      0x2102, 0x2079, 0x0200, 0x2001, 0x0201, 0x789e, 0x78a3, 0x0200,\r
-+      0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x9398, 0x0005, 0x2320,\r
-+      0x9182, 0x0204, 0x1230, 0x2011, 0x0008, 0x8423, 0x8423, 0x8423,\r
-+      0x0488, 0x9182, 0x024c, 0x1240, 0x2011, 0x0007, 0x8403, 0x8003,\r
-+      0x9400, 0x9400, 0x9420, 0x0430, 0x9182, 0x02bc, 0x1238, 0x2011,\r
-+      0x0006, 0x8403, 0x8003, 0x9400, 0x9420, 0x00e0, 0x9182, 0x034c,\r
-+      0x1230, 0x2011, 0x0005, 0x8403, 0x8003, 0x9420, 0x0098, 0x9182,\r
-+      0x042c, 0x1228, 0x2011, 0x0004, 0x8423, 0x8423, 0x0058, 0x9182,\r
-+      0x059c, 0x1228, 0x2011, 0x0003, 0x8403, 0x9420, 0x0018, 0x2011,\r
-+      0x0002, 0x8423, 0x9482, 0x0228, 0x8002, 0x8020, 0x8301, 0x9402,\r
-+      0x0110, 0x0208, 0x8321, 0x8217, 0x8203, 0x9405, 0x789a, 0x012e,\r
-+      0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6814, 0x9084, 0xffc0,\r
-+      0x910d, 0x6916, 0x00de, 0x000e, 0x0005, 0x00d6, 0x2069, 0x0200,\r
-+      0x9005, 0x6810, 0x0110, 0xc0a5, 0x0008, 0xc0a4, 0x6812, 0x00de,\r
-+      0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6810, 0x9084, 0xfff8,\r
-+      0x910d, 0x6912, 0x00de, 0x000e, 0x0005, 0x7938, 0x080c, 0x0dad,\r
-+      0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001,\r
-+      0xa001, 0xa001, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001,\r
-+      0xa001, 0x00fe, 0x0005, 0x0126, 0x2091, 0x2800, 0x2061, 0x0100,\r
-+      0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x2a63, 0x080c, 0x297e,\r
-+      0x6054, 0x8004, 0x8004, 0x8004, 0x8004, 0x9084, 0x000c, 0x6150,\r
-+      0x918c, 0xfff3, 0x9105, 0x6052, 0x6050, 0x9084, 0xb17f, 0x9085,\r
-+      0x2000, 0x6052, 0x2009, 0x196e, 0x2011, 0x196f, 0x6358, 0x939c,\r
-+      0x38f0, 0x2320, 0x080c, 0x29c2, 0x1238, 0x939d, 0x4003, 0x94a5,\r
-+      0x8603, 0x230a, 0x2412, 0x0030, 0x939d, 0x0203, 0x94a5, 0x8603,\r
-+      0x230a, 0x2412, 0x9006, 0x080c, 0x29ad, 0x9006, 0x080c, 0x2990,\r
-+      0x20a9, 0x0012, 0x1d04, 0x22ba, 0x2091, 0x6000, 0x1f04, 0x22ba,\r
-+      0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400, 0x9084,\r
-+      0xdfff, 0x6052, 0x6024, 0x6026, 0x080c, 0x269c, 0x2009, 0x00ef,\r
-+      0x6132, 0x6136, 0x080c, 0x26ac, 0x60e7, 0x0000, 0x61ea, 0x60e3,\r
-+      0x0002, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f, 0x0080, 0x602f,\r
-+      0x0000, 0x6007, 0x149f, 0x60bb, 0x0000, 0x20a9, 0x0018, 0x60bf,\r
-+      0x0000, 0x1f04, 0x22e7, 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf,\r
-+      0x0012, 0x60bf, 0x0320, 0x60bf, 0x0018, 0x601b, 0x00f0, 0x601f,\r
-+      0x001e, 0x600f, 0x006b, 0x602b, 0x402f, 0x012e, 0x0005, 0x00f6,\r
-+      0x2079, 0x0140, 0x78c3, 0x0080, 0x78c3, 0x0083, 0x78c3, 0x0000,\r
-+      0x00fe, 0x0005, 0x2001, 0x1834, 0x2003, 0x0000, 0x2001, 0x1833,\r
-+      0x2003, 0x0001, 0x0005, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016,\r
-+      0x0026, 0x6124, 0x9184, 0x5e2c, 0x1118, 0x9184, 0x0007, 0x002a,\r
-+      0x9195, 0x0004, 0x9284, 0x0007, 0x0002, 0x2347, 0x232d, 0x2330,\r
-+      0x2333, 0x2338, 0x233a, 0x233e, 0x2342, 0x080c, 0x82dd, 0x00b8,\r
-+      0x080c, 0x83aa, 0x00a0, 0x080c, 0x83aa, 0x080c, 0x82dd, 0x0078,\r
-+      0x0099, 0x0068, 0x080c, 0x82dd, 0x0079, 0x0048, 0x080c, 0x83aa,\r
-+      0x0059, 0x0028, 0x080c, 0x83aa, 0x080c, 0x82dd, 0x0029, 0x002e,\r
-+      0x001e, 0x000e, 0x012e, 0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c,\r
-+      0x0118, 0xd19c, 0x1904, 0x2595, 0xd1f4, 0x190c, 0x0dad, 0x080c,\r
-+      0x6fb2, 0x0904, 0x23a2, 0x080c, 0xc212, 0x1120, 0x7000, 0x9086,\r
-+      0x0003, 0x0570, 0x6024, 0x9084, 0x1800, 0x0550, 0x080c, 0x6fd5,\r
-+      0x0118, 0x080c, 0x6fc3, 0x1520, 0x6027, 0x0020, 0x6043, 0x0000,\r
-+      0x080c, 0xc212, 0x0168, 0x080c, 0x6fd5, 0x1150, 0x2001, 0x1978,\r
-+      0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x6e33, 0x0804, 0x2598,\r
-+      0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6, 0x2069, 0x0140,\r
-+      0x080c, 0x7009, 0x00de, 0x1904, 0x2598, 0x080c, 0x72a0, 0x0428,\r
-+      0x080c, 0x6fd5, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108, 0x0468,\r
-+      0x080c, 0x72a0, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x080c, 0x6ee4,\r
-+      0x0804, 0x2595, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170, 0xd0e4,\r
-+      0x1178, 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7094, 0x9086, 0x0028,\r
-+      0x1110, 0x080c, 0x7185, 0x0804, 0x2595, 0x080c, 0x729b, 0x0048,\r
-+      0x2001, 0x194e, 0x2003, 0x0002, 0x0020, 0x080c, 0x70eb, 0x0804,\r
-+      0x2595, 0x080c, 0x721f, 0x0804, 0x2595, 0xd1ac, 0x0904, 0x24b6,\r
-+      0x080c, 0x6fb2, 0x11c0, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036,\r
-+      0x080c, 0x6fcc, 0x1158, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x080c,\r
-+      0x6ee4, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e,\r
-+      0x000e, 0x080c, 0x6f8a, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486,\r
-+      0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043,\r
-+      0x0010, 0x74d6, 0x948c, 0xff00, 0x7038, 0xd084, 0x0178, 0x9186,\r
-+      0xf800, 0x1160, 0x7044, 0xd084, 0x1148, 0xc085, 0x7046, 0x0036,\r
-+      0x2418, 0x2011, 0x8016, 0x080c, 0x48d9, 0x003e, 0x080c, 0xc20b,\r
-+      0x1904, 0x2493, 0x9196, 0xff00, 0x05a8, 0x705c, 0x9084, 0x00ff,\r
-+      0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130, 0xd184, 0x1550,\r
-+      0x080c, 0x3133, 0x0128, 0xc18d, 0x7132, 0x080c, 0x655a, 0x1510,\r
-+      0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, 0xff00, 0x9296,\r
-+      0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x2493, 0x7038, 0xd08c,\r
-+      0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x2493, 0xc1ad,\r
-+      0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c, 0x48d9, 0x003e,\r
-+      0x0804, 0x2493, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c,\r
-+      0xd1ac, 0x1904, 0x2493, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011,\r
-+      0x8013, 0x080c, 0x48d9, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011,\r
-+      0x1854, 0x220c, 0x00f0, 0x0016, 0x2009, 0x0001, 0x2011, 0x0100,\r
-+      0x080c, 0x822f, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000, 0x080c,\r
-+      0xd4a6, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x3138, 0x200d, 0x918c,\r
-+      0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e, 0x080c, 0xd52a,\r
-+      0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004,\r
-+      0x080c, 0x2fa5, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f,\r
-+      0x900e, 0x080c, 0x623e, 0x1110, 0x080c, 0x5ceb, 0x8108, 0x1f04,\r
-+      0x2489, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0x9db8, 0x60e3,\r
-+      0x0000, 0x001e, 0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170,\r
-+      0xd19c, 0x11a0, 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204,\r
-+      0x9295, 0x0002, 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001,\r
-+      0x2001, 0x1825, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0904,\r
-+      0x2595, 0x0016, 0x6220, 0xd2b4, 0x0904, 0x253e, 0x080c, 0x80b8,\r
-+      0x080c, 0x93ac, 0x6027, 0x0004, 0x00f6, 0x2019, 0x19c1, 0x2304,\r
-+      0x907d, 0x0904, 0x250d, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6,\r
-+      0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808,\r
-+      0x685a, 0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043,\r
-+      0x0000, 0x2001, 0x003c, 0x8001, 0x1df0, 0x080c, 0x2b24, 0x2001,\r
-+      0x001e, 0x8001, 0x0240, 0x20a9, 0x0009, 0x080c, 0x2a3e, 0x6904,\r
-+      0xd1dc, 0x1140, 0x0cb0, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006,\r
-+      0x080c, 0x2b14, 0x080c, 0x886e, 0x080c, 0x8973, 0x7814, 0x2048,\r
-+      0xa867, 0x0103, 0x2f60, 0x080c, 0x9e32, 0x009e, 0x00ee, 0x00ce,\r
-+      0x00de, 0x00fe, 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069,\r
-+      0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2b24, 0x00de,\r
-+      0x00c6, 0x2061, 0x19b8, 0x6028, 0x080c, 0xc212, 0x0120, 0x909a,\r
-+      0x0003, 0x1258, 0x0018, 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a,\r
-+      0x00ce, 0x080c, 0x9388, 0x0804, 0x2594, 0x2061, 0x0100, 0x62c0,\r
-+      0x080c, 0x9c43, 0x2019, 0x19c1, 0x2304, 0x9065, 0x0120, 0x2009,\r
-+      0x0027, 0x080c, 0x9eac, 0x00ce, 0x0804, 0x2594, 0xd2bc, 0x0904,\r
-+      0x2581, 0x080c, 0x80c5, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010,\r
-+      0x6016, 0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084,\r
-+      0x4000, 0x0110, 0x080c, 0x2b24, 0x00de, 0x00c6, 0x2061, 0x19b8,\r
-+      0x6044, 0x080c, 0xc212, 0x0120, 0x909a, 0x0003, 0x1628, 0x0018,\r
-+      0x909a, 0x00c8, 0x1608, 0x8000, 0x6046, 0x603c, 0x00ce, 0x9005,\r
-+      0x0558, 0x2009, 0x07d0, 0x080c, 0x80bd, 0x9080, 0x0008, 0x2004,\r
-+      0x9086, 0x0006, 0x1138, 0x6114, 0x918c, 0x1984, 0x918d, 0x0012,\r
-+      0x6116, 0x00d0, 0x6114, 0x918c, 0x1984, 0x918d, 0x0016, 0x6116,\r
-+      0x0098, 0x6027, 0x0004, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c,\r
-+      0x96d8, 0x003e, 0x2019, 0x19c7, 0x2304, 0x9065, 0x0120, 0x2009,\r
-+      0x004f, 0x080c, 0x9eac, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x2607,\r
-+      0x7038, 0xd0ac, 0x1904, 0x25dc, 0x0016, 0x0156, 0x6027, 0x0008,\r
-+      0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084, 0xfbcf, 0x6052,\r
-+      0x080c, 0x2a5d, 0x9085, 0x2000, 0x6052, 0x20a9, 0x0012, 0x1d04,\r
-+      0x25af, 0x080c, 0x80ec, 0x1f04, 0x25af, 0x6050, 0x9085, 0x0400,\r
-+      0x9084, 0xdfbf, 0x6052, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x25bd,\r
-+      0x6150, 0x9185, 0x1400, 0x6052, 0x20a9, 0x0366, 0x1d04, 0x25c6,\r
-+      0x080c, 0x80ec, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e,\r
-+      0x6027, 0x0008, 0x04a0, 0x080c, 0x2a25, 0x1f04, 0x25c6, 0x015e,\r
-+      0x6152, 0x001e, 0x6027, 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a,\r
-+      0x080c, 0x9db8, 0x60e3, 0x0000, 0x080c, 0xd8b4, 0x080c, 0xd8cf,\r
-+      0x080c, 0x538a, 0xd0fc, 0x1138, 0x080c, 0xc20b, 0x1120, 0x9085,\r
-+      0x0001, 0x080c, 0x6ff9, 0x9006, 0x080c, 0x2b14, 0x2009, 0x0002,\r
-+      0x080c, 0x2a63, 0x00e6, 0x2071, 0x1800, 0x7003, 0x0004, 0x080c,\r
-+      0x0e80, 0x00ee, 0x6027, 0x0008, 0x080c, 0x0b8f, 0x001e, 0x918c,\r
-+      0xffd0, 0x6126, 0x00ae, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,\r
-+      0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x71cc,\r
-+      0x70ce, 0x9116, 0x0904, 0x265b, 0x81ff, 0x01a0, 0x2009, 0x0000,\r
-+      0x080c, 0x2a63, 0x2011, 0x8011, 0x2019, 0x010e, 0x231c, 0x939e,\r
-+      0x0007, 0x1118, 0x2019, 0x0001, 0x0010, 0x2019, 0x0000, 0x080c,\r
-+      0x48d9, 0x0448, 0x2001, 0x1979, 0x200c, 0x81ff, 0x1140, 0x2001,\r
-+      0x0109, 0x2004, 0xd0b4, 0x0118, 0x2019, 0x0003, 0x0008, 0x2118,\r
-+      0x2011, 0x8012, 0x080c, 0x48d9, 0x080c, 0x0e80, 0x080c, 0x538a,\r
-+      0xd0fc, 0x1188, 0x080c, 0xc20b, 0x1170, 0x00c6, 0x080c, 0x26f7,\r
-+      0x080c, 0x963f, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0002,\r
-+      0x080c, 0x2fa5, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e,\r
-+      0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,\r
-+      0xff00, 0x11f0, 0x2011, 0x1836, 0x2214, 0xd2ac, 0x11c8, 0x81ff,\r
-+      0x01e8, 0x2011, 0x181e, 0x2204, 0x9106, 0x1190, 0x2011, 0x181f,\r
-+      0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206, 0x1148, 0x2011,\r
-+      0x181f, 0x2214, 0x9294, 0x00ff, 0x9584, 0x00ff, 0x9206, 0x1120,\r
-+      0x2500, 0x080c, 0x7c57, 0x0048, 0x9584, 0x00ff, 0x9080, 0x3138,\r
-+      0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080, 0x3138,\r
-+      0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001,\r
-+      0x1817, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852, 0x6856,\r
-+      0x1f04, 0x26a7, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069,\r
-+      0x0140, 0x2001, 0x1817, 0x2102, 0x8114, 0x8214, 0x8214, 0x8214,\r
-+      0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff, 0x1128, 0x9184,\r
-+      0x000f, 0x9080, 0xdd89, 0x2005, 0x6856, 0x8211, 0x1f04, 0x26bc,\r
-+      0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0x1800, 0x6030,\r
-+      0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156,\r
-+      0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980, 0x9116,\r
-+      0x0180, 0x9112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001, 0x0402,\r
-+      0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x26ec, 0x680f,\r
-+      0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005, 0x080c,\r
-+      0x5386, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020,\r
-+      0x2009, 0x002e, 0x080c, 0xd52a, 0x004e, 0x0005, 0x00f6, 0x0016,\r
-+      0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904, 0x2763, 0x080c,\r
-+      0x29c2, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600, 0x1120, 0x2011,\r
-+      0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120, 0x2011, 0x8000,\r
-+      0x900e, 0x0420, 0x908e, 0x0400, 0x1120, 0x9016, 0x2009, 0x0001,\r
-+      0x00e8, 0x908e, 0x0300, 0x1120, 0x9016, 0x2009, 0x0002, 0x00b0,\r
-+      0x908e, 0x0200, 0x1120, 0x9016, 0x2009, 0x0004, 0x0078, 0x908e,\r
-+      0x0100, 0x1548, 0x9016, 0x2009, 0x0008, 0x0040, 0x9084, 0x0700,\r
-+      0x908e, 0x0300, 0x1500, 0x2011, 0x0030, 0x0058, 0x2300, 0x9080,\r
-+      0x0020, 0x2018, 0x080c, 0x8270, 0x928c, 0xff00, 0x0110, 0x2011,\r
-+      0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2, 0x2009, 0x0138,\r
-+      0x220a, 0x080c, 0x6fb2, 0x1118, 0x2009, 0x193e, 0x220a, 0x002e,\r
-+      0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091,\r
-+      0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170, 0x200c, 0x8000,\r
-+      0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0dad, 0x002e, 0x001e,\r
-+      0x000e, 0x012e, 0x0005, 0x2001, 0x0171, 0x2004, 0xd0dc, 0x0168,\r
-+      0x2001, 0x0170, 0x200c, 0x918c, 0x00ff, 0x918e, 0x004c, 0x1128,\r
-+      0x200c, 0x918c, 0xff00, 0x810f, 0x0005, 0x900e, 0x2001, 0x0227,\r
-+      0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108, 0x2001, 0x0226,\r
-+      0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108, 0x0005, 0x0018,\r
-+      0x000c, 0x0018, 0x0020, 0x1000, 0x0800, 0x1000, 0x1800, 0x0156,\r
-+      0x0006, 0x0016, 0x0026, 0x00e6, 0x2001, 0x1961, 0x2004, 0x908a,\r
-+      0x0007, 0x1a0c, 0x0db4, 0x0033, 0x00ee, 0x002e, 0x001e, 0x000e,\r
-+      0x015e, 0x0005, 0x27c1, 0x27df, 0x2803, 0x2805, 0x282e, 0x2830,\r
-+      0x2832, 0x2001, 0x0001, 0x080c, 0x260c, 0x080c, 0x2a20, 0x2001,\r
-+      0x1963, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006,\r
-+      0x20a9, 0x0009, 0x080c, 0x29de, 0x2001, 0x1961, 0x2003, 0x0006,\r
-+      0x2009, 0x001e, 0x2011, 0x2833, 0x080c, 0x80ca, 0x0005, 0x2009,\r
-+      0x1966, 0x200b, 0x0000, 0x2001, 0x196b, 0x2003, 0x0036, 0x2001,\r
-+      0x196a, 0x2003, 0x002a, 0x2001, 0x1963, 0x2003, 0x0001, 0x9006,\r
-+      0x080c, 0x2990, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x29de,\r
-+      0x2001, 0x1961, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2833,\r
-+      0x080c, 0x80ca, 0x0005, 0x080c, 0x0db4, 0x2001, 0x196b, 0x2003,\r
-+      0x0036, 0x2001, 0x1963, 0x2003, 0x0003, 0x7a38, 0x9294, 0x0005,\r
-+      0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,\r
-+      0x2990, 0x2001, 0x1967, 0x2003, 0x0000, 0x2001, 0xffff, 0x20a9,\r
-+      0x0009, 0x080c, 0x29de, 0x2001, 0x1961, 0x2003, 0x0006, 0x2009,\r
-+      0x001e, 0x2011, 0x2833, 0x080c, 0x80ca, 0x0005, 0x080c, 0x0db4,\r
-+      0x080c, 0x0db4, 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6,\r
-+      0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x2001, 0x1963,\r
-+      0x2004, 0x908a, 0x0007, 0x1a0c, 0x0db4, 0x0043, 0x012e, 0x015e,\r
-+      0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e, 0x0005, 0x2855, 0x2875,\r
-+      0x28b5, 0x28e5, 0x2909, 0x2919, 0x291b, 0x080c, 0x29d2, 0x11b0,\r
-+      0x7850, 0x9084, 0xefff, 0x7852, 0x2009, 0x1969, 0x2104, 0x7a38,\r
-+      0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d, 0x0008, 0xc085,\r
-+      0x200a, 0x2001, 0x1961, 0x2003, 0x0001, 0x0030, 0x080c, 0x293f,\r
-+      0x2001, 0xffff, 0x080c, 0x27d0, 0x0005, 0x080c, 0x291d, 0x05e0,\r
-+      0x2009, 0x196a, 0x2104, 0x8001, 0x200a, 0x080c, 0x29d2, 0x1178,\r
-+      0x7850, 0x9084, 0xefff, 0x7852, 0x7a38, 0x9294, 0x0005, 0x9296,\r
-+      0x0005, 0x0518, 0x2009, 0x1969, 0x2104, 0xc085, 0x200a, 0x2009,\r
-+      0x1966, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0118, 0x080c,\r
-+      0x2925, 0x00c0, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296,\r
-+      0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x29ad,\r
-+      0x2001, 0x1963, 0x2003, 0x0002, 0x0028, 0x2001, 0x1961, 0x2003,\r
-+      0x0003, 0x0010, 0x080c, 0x27f2, 0x0005, 0x080c, 0x291d, 0x0560,\r
-+      0x2009, 0x196a, 0x2104, 0x8001, 0x200a, 0x080c, 0x29d2, 0x1168,\r
-+      0x7850, 0x9084, 0xefff, 0x7852, 0x2001, 0x1961, 0x2003, 0x0003,\r
-+      0x2001, 0x1962, 0x2003, 0x0000, 0x00b8, 0x2009, 0x196a, 0x2104,\r
-+      0x9005, 0x1118, 0x080c, 0x2962, 0x0010, 0x080c, 0x2932, 0x080c,\r
-+      0x2925, 0x2009, 0x1966, 0x200b, 0x0000, 0x2001, 0x1963, 0x2003,\r
-+      0x0001, 0x080c, 0x27f2, 0x0000, 0x0005, 0x04b9, 0x0508, 0x080c,\r
-+      0x29d2, 0x11b8, 0x7850, 0x9084, 0xefff, 0x7852, 0x2009, 0x1967,\r
-+      0x2104, 0x8000, 0x200a, 0x9086, 0x0007, 0x0108, 0x0078, 0x2001,\r
-+      0x196c, 0x2003, 0x000a, 0x2009, 0x1969, 0x2104, 0xc0fd, 0x200a,\r
-+      0x0038, 0x0419, 0x2001, 0x1963, 0x2003, 0x0004, 0x080c, 0x281d,\r
-+      0x0005, 0x0099, 0x0168, 0x080c, 0x29d2, 0x1138, 0x7850, 0x9084,\r
-+      0xefff, 0x7852, 0x080c, 0x2809, 0x0018, 0x0079, 0x080c, 0x281d,\r
-+      0x0005, 0x080c, 0x0db4, 0x080c, 0x0db4, 0x2009, 0x196b, 0x2104,\r
-+      0x8001, 0x200a, 0x090c, 0x297e, 0x0005, 0x7a38, 0x9294, 0x0005,\r
-+      0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,\r
-+      0x29ad, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, 0x0110,\r
-+      0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2990, 0x0005, 0x2009,\r
-+      0x1966, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0108, 0x0068,\r
-+      0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, 0x0110,\r
-+      0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, 0x7a38, 0x9294, 0x0005,\r
-+      0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,\r
-+      0x29ad, 0x0005, 0x0086, 0x2001, 0x1969, 0x2004, 0x9084, 0x7fff,\r
-+      0x090c, 0x0db4, 0x2009, 0x1968, 0x2144, 0x8846, 0x280a, 0x9844,\r
-+      0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, 0x080c, 0x0db4, 0x9006,\r
-+      0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, 0x0005, 0x0006, 0x0156,\r
-+      0x2001, 0x1961, 0x20a9, 0x0009, 0x2003, 0x0000, 0x8000, 0x1f04,\r
-+      0x2984, 0x2001, 0x1968, 0x2003, 0x8000, 0x015e, 0x000e, 0x0005,\r
-+      0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158, 0x7838, 0x9084,\r
-+      0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, 0x196e, 0x210c, 0x795a,\r
-+      0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0006, 0x783a, 0x2009,\r
-+      0x196f, 0x210c, 0x795a, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100,\r
-+      0x9085, 0x0000, 0x0138, 0x7838, 0x9084, 0xfffa, 0x9085, 0x0004,\r
-+      0x783a, 0x0030, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0005, 0x783a,\r
-+      0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0007,\r
-+      0x000e, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0009,\r
-+      0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, 0x7820, 0x080c, 0x2a5d,\r
-+      0xd09c, 0x1110, 0x1f04, 0x29d5, 0x015e, 0x0005, 0x0126, 0x0016,\r
-+      0x0006, 0x2091, 0x8000, 0x7850, 0x9085, 0x0040, 0x7852, 0x7850,\r
-+      0x9084, 0xfbcf, 0x7852, 0x080c, 0x2a5d, 0x9085, 0x2000, 0x7852,\r
-+      0x000e, 0x2008, 0x9186, 0x0000, 0x1118, 0x783b, 0x0007, 0x0090,\r
-+      0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060, 0x9186, 0x0002,\r
-+      0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003, 0x1118, 0x783b,\r
-+      0x0004, 0x0000, 0x0006, 0x1d04, 0x2a0b, 0x080c, 0x80ec, 0x1f04,\r
-+      0x2a0b, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852, 0x080c,\r
-+      0x2a5d, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e, 0x012e, 0x0005,\r
-+      0x7850, 0x9084, 0xffcf, 0x7852, 0x0005, 0x0006, 0x0156, 0x00f6,\r
-+      0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1130, 0x7820,\r
-+      0xd0e4, 0x1140, 0x1f04, 0x2a2f, 0x0028, 0x7854, 0xd08c, 0x1110,\r
-+      0x1f04, 0x2a35, 0x00fe, 0x015e, 0x000e, 0x0005, 0x1d04, 0x2a3e,\r
-+      0x080c, 0x80ec, 0x1f04, 0x2a3e, 0x0005, 0x0006, 0x2001, 0x196d,\r
-+      0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0x196d,\r
-+      0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001, 0x196d,\r
-+      0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001, 0xa001, 0xa001,\r
-+      0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x1979, 0x2102, 0x000e,\r
-+      0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009, 0x0170,\r
-+      0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a, 0x0005, 0x0036,\r
-+      0x0046, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186, 0x2000,\r
-+      0x0118, 0x9186, 0x0100, 0x1588, 0x2009, 0x00a2, 0x080c, 0x0e2f,\r
-+      0x2019, 0x0160, 0x2324, 0x2011, 0x0003, 0x2009, 0x0169, 0x2104,\r
-+      0x9084, 0x0007, 0x210c, 0x918c, 0x0007, 0x910e, 0x1db0, 0x9086,\r
-+      0x0003, 0x11b8, 0x2304, 0x9402, 0x02a0, 0x1d60, 0x8211, 0x1d68,\r
-+      0x84ff, 0x0170, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186,\r
-+      0x0100, 0x0130, 0x2009, 0x180c, 0x2104, 0xc0dd, 0x200a, 0x0008,\r
-+      0x0419, 0x2009, 0x0000, 0x080c, 0x0e2f, 0x004e, 0x003e, 0x0005,\r
-+      0x2001, 0x180c, 0x2004, 0xd0dc, 0x01b0, 0x2001, 0x0160, 0x2004,\r
-+      0x9005, 0x0140, 0x2001, 0x0141, 0x2004, 0x9084, 0xff00, 0x9086,\r
-+      0x0100, 0x1148, 0x0126, 0x2091, 0x8000, 0x0016, 0x0026, 0x0021,\r
-+      0x002e, 0x001e, 0x012e, 0x0005, 0x00c6, 0x2061, 0x0100, 0x6014,\r
-+      0x0006, 0x2001, 0x0161, 0x2003, 0x0000, 0x6017, 0x0018, 0xa001,\r
-+      0xa001, 0x602f, 0x0008, 0x6104, 0x918e, 0x0010, 0x6106, 0x918e,\r
-+      0x0010, 0x6106, 0x6017, 0x0040, 0x04b9, 0x001e, 0x9184, 0x0003,\r
-+      0x01e0, 0x0036, 0x0016, 0x2019, 0x0141, 0x6124, 0x918c, 0x0028,\r
-+      0x1120, 0x2304, 0x9084, 0x2800, 0x0dc0, 0x001e, 0x919c, 0xffe4,\r
-+      0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016, 0x9184, 0x0002,\r
-+      0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001, 0x180c, 0x200c,\r
-+      0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026, 0x080c, 0x6fcc,\r
-+      0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215,\r
-+      0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140,\r
-+      0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a, 0x220a, 0x002e,\r
-+      0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294,\r
-+      0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0006, 0x0016,\r
-+      0x2009, 0x0140, 0x2104, 0x1128, 0x080c, 0x6fcc, 0x0110, 0xc0bc,\r
-+      0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, 0x2dba, 0x2dba,\r
-+      0x2bde, 0x2bde, 0x2bea, 0x2bea, 0x2bf6, 0x2bf6, 0x2c04, 0x2c04,\r
-+      0x2c10, 0x2c10, 0x2c1e, 0x2c1e, 0x2c2c, 0x2c2c, 0x2c3e, 0x2c3e,\r
-+      0x2c4a, 0x2c4a, 0x2c58, 0x2c58, 0x2c76, 0x2c76, 0x2c96, 0x2c96,\r
-+      0x2c66, 0x2c66, 0x2c86, 0x2c86, 0x2ca4, 0x2ca4, 0x2c3c, 0x2c3c,\r
-+      0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c,\r
-+      0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c,\r
-+      0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c,\r
-+      0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2cb6, 0x2cb6,\r
-+      0x2cc2, 0x2cc2, 0x2cd0, 0x2cd0, 0x2cde, 0x2cde, 0x2cee, 0x2cee,\r
-+      0x2cfc, 0x2cfc, 0x2d0c, 0x2d0c, 0x2d1c, 0x2d1c, 0x2d2e, 0x2d2e,\r
-+      0x2d3c, 0x2d3c, 0x2d4c, 0x2d4c, 0x2d6e, 0x2d6e, 0x2d90, 0x2d90,\r
-+      0x2d5c, 0x2d5c, 0x2d7f, 0x2d7f, 0x2d9f, 0x2d9f, 0x2c3c, 0x2c3c,\r
-+      0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c,\r
-+      0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c,\r
-+      0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c,\r
-+      0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c,\r
-+      0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c,\r
-+      0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x2c3c, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2313,\r
-+      0x0804, 0x2db2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x212b, 0x0804, 0x2db2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x212b,\r
-+      0x080c, 0x2313, 0x0804, 0x2db2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2166, 0x0804, 0x2db2,\r
-+      0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,\r
-+      0x080c, 0x2313, 0x080c, 0x2166, 0x0804, 0x2db2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x212b,\r
-+      0x080c, 0x2166, 0x0804, 0x2db2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x212b, 0x080c, 0x2313,\r
-+      0x080c, 0x2166, 0x0804, 0x2db2, 0xa001, 0x0cf0, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x130c,\r
-+      0x0804, 0x2db2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x2313, 0x080c, 0x130c, 0x0804, 0x2db2,\r
-+      0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,\r
-+      0x080c, 0x212b, 0x080c, 0x130c, 0x0804, 0x2db2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2313,\r
-+      0x080c, 0x130c, 0x080c, 0x2166, 0x0804, 0x2db2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x212b,\r
-+      0x080c, 0x2313, 0x080c, 0x130c, 0x0804, 0x2db2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x212b,\r
-+      0x080c, 0x130c, 0x080c, 0x2166, 0x0804, 0x2db2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x130c,\r
-+      0x080c, 0x2166, 0x0804, 0x2db2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x212b, 0x080c, 0x2313,\r
-+      0x080c, 0x130c, 0x080c, 0x2166, 0x0804, 0x2db2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2766,\r
-+      0x0804, 0x2db2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x2766, 0x080c, 0x2313, 0x0804, 0x2db2,\r
-+      0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,\r
-+      0x080c, 0x2766, 0x080c, 0x212b, 0x0804, 0x2db2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2766,\r
-+      0x080c, 0x212b, 0x080c, 0x2313, 0x0804, 0x2db2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2766,\r
-+      0x080c, 0x2166, 0x0804, 0x2db2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2766, 0x080c, 0x2313,\r
-+      0x080c, 0x2166, 0x0804, 0x2db2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2766, 0x080c, 0x212b,\r
-+      0x080c, 0x2166, 0x0804, 0x2db2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2766, 0x080c, 0x212b,\r
-+      0x080c, 0x2313, 0x080c, 0x2166, 0x0804, 0x2db2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2766,\r
-+      0x080c, 0x130c, 0x0804, 0x2db2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2766, 0x080c, 0x2313,\r
-+      0x080c, 0x130c, 0x0804, 0x2db2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2766, 0x080c, 0x212b,\r
-+      0x080c, 0x130c, 0x0804, 0x2db2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2766, 0x080c, 0x2313,\r
-+      0x080c, 0x130c, 0x080c, 0x2166, 0x0804, 0x2db2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2766,\r
-+      0x080c, 0x212b, 0x080c, 0x2313, 0x080c, 0x130c, 0x0498, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x2766, 0x080c, 0x212b, 0x080c, 0x130c, 0x080c, 0x2166, 0x0410,\r
-+      0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,\r
-+      0x080c, 0x2766, 0x080c, 0x130c, 0x080c, 0x2166, 0x0098, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x2766, 0x080c, 0x212b, 0x080c, 0x2313, 0x080c, 0x130c, 0x080c,\r
-+      0x2166, 0x0000, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e,\r
-+      0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6, 0x0026, 0x0046, 0x9026,\r
-+      0x080c, 0x6520, 0x1904, 0x2ec1, 0x72d8, 0x2001, 0x194d, 0x2004,\r
-+      0x9005, 0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904,\r
-+      0x2ec1, 0x080c, 0x2ec6, 0x0804, 0x2ec1, 0xd2cc, 0x1904, 0x2ec1,\r
-+      0x080c, 0x6fb2, 0x1120, 0x70ab, 0xffff, 0x0804, 0x2ec1, 0xd294,\r
-+      0x0120, 0x70ab, 0xffff, 0x0804, 0x2ec1, 0x080c, 0x312e, 0x0160,\r
-+      0x080c, 0xc212, 0x0128, 0x2001, 0x1817, 0x203c, 0x0804, 0x2e53,\r
-+      0x70ab, 0xffff, 0x0804, 0x2ec1, 0x2001, 0x1817, 0x203c, 0x7290,\r
-+      0xd284, 0x0904, 0x2e53, 0xd28c, 0x1904, 0x2e53, 0x0036, 0x73a8,\r
-+      0x938e, 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80,\r
-+      0x2c04, 0x938c, 0x0001, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010,\r
-+      0x9084, 0x00ff, 0x970e, 0x05a8, 0x908e, 0x0000, 0x0590, 0x908e,\r
-+      0x00ff, 0x1150, 0x7230, 0xd284, 0x1588, 0x7290, 0xc28d, 0x7292,\r
-+      0x70ab, 0xffff, 0x003e, 0x0478, 0x0026, 0x2011, 0x0010, 0x080c,\r
-+      0x6586, 0x002e, 0x0118, 0x70ab, 0xffff, 0x0410, 0x900e, 0x080c,\r
-+      0x2663, 0x080c, 0x61de, 0x11c0, 0x080c, 0x6562, 0x1168, 0x7030,\r
-+      0xd08c, 0x0130, 0xb800, 0xd0bc, 0x0138, 0x080c, 0x645e, 0x0120,\r
-+      0x080c, 0x2edf, 0x0148, 0x0028, 0x080c, 0x301f, 0x080c, 0x2f0b,\r
-+      0x0118, 0x8318, 0x0804, 0x2e05, 0x73aa, 0x0010, 0x70ab, 0xffff,\r
-+      0x003e, 0x0804, 0x2ec1, 0x9780, 0x3138, 0x203d, 0x97bc, 0xff00,\r
-+      0x873f, 0x2041, 0x007e, 0x70a8, 0x9096, 0xffff, 0x1118, 0x900e,\r
-+      0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020,\r
-+      0x70ab, 0xffff, 0x0804, 0x2ec1, 0x2700, 0x0156, 0x0016, 0x9106,\r
-+      0x0904, 0x2eb6, 0x0026, 0x2011, 0x0010, 0x080c, 0x6586, 0x002e,\r
-+      0x0120, 0x2009, 0xffff, 0x0804, 0x2ebe, 0xc484, 0x080c, 0x623e,\r
-+      0x0138, 0x080c, 0xc212, 0x1590, 0x080c, 0x61de, 0x15b8, 0x0008,\r
-+      0xc485, 0x080c, 0x6562, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800,\r
-+      0xd0bc, 0x11e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x6562, 0x9082,\r
-+      0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x6202, 0x0028, 0x080c,\r
-+      0x30aa, 0x01a0, 0x080c, 0x30d5, 0x0088, 0x080c, 0x301f, 0x080c,\r
-+      0xc212, 0x1160, 0x080c, 0x2f0b, 0x0188, 0x0040, 0x080c, 0xc212,\r
-+      0x1118, 0x080c, 0x30aa, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108,\r
-+      0x015e, 0x1f04, 0x2e6c, 0x70ab, 0xffff, 0x0018, 0x001e, 0x015e,\r
-+      0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016,\r
-+      0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x61de, 0x1168, 0xb813,\r
-+      0x00ff, 0xb817, 0xfffe, 0x080c, 0x301f, 0x04a9, 0x0128, 0x70d8,\r
-+      0xc0bd, 0x70da, 0x080c, 0xbf63, 0x001e, 0x00ce, 0x0005, 0x0016,\r
-+      0x0076, 0x00d6, 0x00c6, 0x2001, 0x1858, 0x2004, 0x9084, 0x00ff,\r
-+      0xb842, 0x080c, 0x9e7f, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbf8c,\r
-+      0x6023, 0x0001, 0x9006, 0x080c, 0x617b, 0x2001, 0x0000, 0x080c,\r
-+      0x618f, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e,\r
-+      0x2009, 0x0004, 0x080c, 0x9eac, 0x9085, 0x0001, 0x00ce, 0x00de,\r
-+      0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001,\r
-+      0x1858, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9e7f, 0x0548,\r
-+      0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e,\r
-+      0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c,\r
-+      0x2fda, 0x080c, 0xbf8c, 0x6023, 0x0001, 0x9006, 0x080c, 0x617b,\r
-+      0x2001, 0x0002, 0x080c, 0x618f, 0x0126, 0x2091, 0x8000, 0x70a4,\r
-+      0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c, 0x9eac, 0x9085,\r
-+      0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6,\r
-+      0x0026, 0x2009, 0x0080, 0x080c, 0x61de, 0x1140, 0xb813, 0x00ff,\r
-+      0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce,\r
-+      0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0x9ddc,\r
-+      0x01d0, 0x2b00, 0x6012, 0x080c, 0xbf8c, 0x6023, 0x0001, 0x9006,\r
-+      0x080c, 0x617b, 0x2001, 0x0002, 0x080c, 0x618f, 0x0126, 0x2091,\r
-+      0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c,\r
-+      0x9eac, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,\r
-+      0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c,\r
-+      0x61de, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8bf, 0x0004,\r
-+      0x080c, 0x9ddc, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001,\r
-+      0x620a, 0x080c, 0xbf8c, 0x2009, 0x0022, 0x080c, 0x9eac, 0x9085,\r
-+      0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066,\r
-+      0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x857c, 0x080c, 0x850b,\r
-+      0x080c, 0x9c8a, 0x080c, 0xad77, 0x3e08, 0x2130, 0x81ff, 0x0120,\r
-+      0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016,\r
-+      0x080c, 0x623e, 0x1140, 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc,\r
-+      0x1110, 0x080c, 0x5ceb, 0x001e, 0x8108, 0x1f04, 0x2fbf, 0x9686,\r
-+      0x0001, 0x190c, 0x3102, 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce,\r
-+      0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0046, 0x0036, 0x0026, 0x0016,\r
-+      0x00b6, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c,\r
-+      0x8571, 0x0076, 0x2039, 0x0000, 0x080c, 0x8469, 0x2c08, 0x080c,\r
-+      0xd29b, 0x007e, 0x001e, 0xba10, 0xbb14, 0xbcb0, 0x080c, 0x5ceb,\r
-+      0xba12, 0xbb16, 0xbcb2, 0x00be, 0x001e, 0x002e, 0x003e, 0x004e,\r
-+      0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058,\r
-+      0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a4,\r
-+      0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005, 0x2071,\r
-+      0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8, 0xb800,\r
-+      0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046,\r
-+      0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9,\r
-+      0x0001, 0x0070, 0x080c, 0x5386, 0xd0c4, 0x0138, 0x0030, 0x9006,\r
-+      0x2020, 0x2009, 0x002d, 0x080c, 0xd52a, 0x20a9, 0x0800, 0x9016,\r
-+      0x0026, 0x928e, 0x007e, 0x0904, 0x3089, 0x928e, 0x007f, 0x0904,\r
-+      0x3089, 0x928e, 0x0080, 0x05e8, 0x9288, 0x1000, 0x210c, 0x81ff,\r
-+      0x05c0, 0x8fff, 0x1148, 0x2001, 0x195f, 0x0006, 0x2003, 0x0001,\r
-+      0x04f1, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001,\r
-+      0x0001, 0x080c, 0x652c, 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c,\r
-+      0x8571, 0x0076, 0x2039, 0x0000, 0x080c, 0x8469, 0x00b6, 0x00c6,\r
-+      0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118,\r
-+      0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0xba06,\r
-+      0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, 0xd29b, 0x001e,\r
-+      0x007e, 0x002e, 0x8210, 0x1f04, 0x3040, 0x015e, 0x001e, 0x002e,\r
-+      0x003e, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046,\r
-+      0x0026, 0x0016, 0x080c, 0x5386, 0xd0c4, 0x0140, 0xd0a4, 0x0130,\r
-+      0x9006, 0x2220, 0x2009, 0x0029, 0x080c, 0xd52a, 0x001e, 0x002e,\r
-+      0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7290, 0x82ff,\r
-+      0x01e8, 0x080c, 0x655a, 0x11d0, 0x2100, 0x080c, 0x2696, 0x81ff,\r
-+      0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0xd384,\r
-+      0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116,\r
-+      0x0138, 0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001,\r
-+      0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126,\r
-+      0x2091, 0x8000, 0x0036, 0x2019, 0x0029, 0x00a9, 0x003e, 0x9180,\r
-+      0x1000, 0x2004, 0x9065, 0x0158, 0x0016, 0x00c6, 0x2061, 0x1a80,\r
-+      0x001e, 0x6112, 0x080c, 0x2fda, 0x001e, 0x080c, 0x6202, 0x012e,\r
-+      0x00ce, 0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c, 0x9926,\r
-+      0x080c, 0xd7e2, 0x002e, 0x001e, 0x0005, 0x2001, 0x1836, 0x2004,\r
-+      0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x6fb2, 0x1118, 0x20a9,\r
-+      0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x6fb2, 0x1110, 0x900e,\r
-+      0x0010, 0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d, 0x0130,\r
-+      0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x6202, 0x8108, 0x1f04,\r
-+      0x3113, 0x2061, 0x1800, 0x607b, 0x0000, 0x607c, 0x9084, 0x00ff,\r
-+      0x607e, 0x60af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, 0x1875,\r
-+      0x2004, 0xd0bc, 0x0005, 0x2011, 0x1854, 0x2214, 0xd2ec, 0x0005,\r
-+      0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da,\r
-+      0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce,\r
-+      0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5,\r
-+      0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3,\r
-+      0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9,\r
-+      0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b,\r
-+      0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081,\r
-+      0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073,\r
-+      0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69,\r
-+      0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056,\r
-+      0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c,\r
-+      0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c,\r
-+      0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831,\r
-+      0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026,\r
-+      0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017,\r
-+      0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000,\r
-+      0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000,\r
-+      0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300,\r
-+      0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100,\r
-+      0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00,\r
-+      0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800,\r
-+      0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000,\r
-+      0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000,\r
-+      0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500,\r
-+      0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000,\r
-+      0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000,\r
-+      0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000,\r
-+      0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000,\r
-+      0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000,\r
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,\r
-+      0x2071, 0x1894, 0x7003, 0x0002, 0x9006, 0x7016, 0x701a, 0x704a,\r
-+      0x704e, 0x700e, 0x7042, 0x7046, 0x703b, 0x18b0, 0x703f, 0x18b0,\r
-+      0x7007, 0x0001, 0x080c, 0x1004, 0x090c, 0x0db4, 0x2900, 0x706a,\r
-+      0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x080c, 0x1004, 0x090c, 0x0db4,\r
-+      0x2900, 0x706e, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x0005, 0x2071,\r
-+      0x1894, 0x7004, 0x0002, 0x3267, 0x3268, 0x327b, 0x328f, 0x0005,\r
-+      0x1004, 0x3278, 0x0e04, 0x3278, 0x2079, 0x0000, 0x0126, 0x2091,\r
-+      0x8000, 0x700c, 0x9005, 0x1128, 0x700f, 0x0001, 0x012e, 0x0468,\r
-+      0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000, 0x2061, 0x18ae, 0x2c4c,\r
-+      0xa86c, 0x908e, 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x3363,\r
-+      0x0005, 0x7018, 0x2048, 0x2061, 0x1800, 0x701c, 0x0807, 0x7014,\r
-+      0x2048, 0xa864, 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78,\r
-+      0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079,\r
-+      0x0000, 0x2061, 0x1800, 0x701c, 0x0807, 0x2061, 0x1800, 0x7880,\r
-+      0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, 0x2100, 0x908a, 0x003f,\r
-+      0x1a04, 0x3360, 0x61cc, 0x0804, 0x32f5, 0x3337, 0x336f, 0x3379,\r
-+      0x337d, 0x3387, 0x338d, 0x3391, 0x33a1, 0x33a4, 0x33ae, 0x33b3,\r
-+      0x33b8, 0x33c3, 0x33ce, 0x33dd, 0x33ec, 0x33fa, 0x3411, 0x342c,\r
-+      0x3360, 0x34d5, 0x3513, 0x35b9, 0x35ca, 0x35ed, 0x3360, 0x3360,\r
-+      0x3360, 0x3625, 0x3641, 0x364a, 0x3679, 0x367f, 0x3360, 0x36c5,\r
-+      0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x36d0, 0x36d9, 0x36e1,\r
-+      0x36e3, 0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x370f,\r
-+      0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x372c, 0x3787, 0x3360,\r
-+      0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x0002, 0x37b1, 0x37b4,\r
-+      0x3813, 0x382c, 0x385c, 0x3afa, 0x3360, 0x4f5f, 0x3360, 0x3360,\r
-+      0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x33ae, 0x33b3,\r
-+      0x401b, 0x53aa, 0x4031, 0x4fee, 0x503f, 0x5142, 0x3360, 0x51a4,\r
-+      0x51e0, 0x5211, 0x5315, 0x523e, 0x5295, 0x3360, 0x4035, 0x41d6,\r
-+      0x41ec, 0x4211, 0x4276, 0x42ea, 0x430a, 0x4381, 0x43dd, 0x4439,\r
-+      0x443c, 0x4461, 0x4501, 0x4567, 0x456f, 0x46a1, 0x4803, 0x4837,\r
-+      0x4a81, 0x3360, 0x4a9f, 0x4b62, 0x4c38, 0x3360, 0x3360, 0x3360,\r
-+      0x3360, 0x4c9e, 0x4cb9, 0x456f, 0x4eff, 0x714c, 0x0000, 0x2021,\r
-+      0x4000, 0x080c, 0x48b5, 0x0126, 0x2091, 0x8000, 0x0e04, 0x3341,\r
-+      0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833,\r
-+      0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e,\r
-+      0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187,\r
-+      0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005,\r
-+      0x2021, 0x4001, 0x08b0, 0x2021, 0x4002, 0x0898, 0x2021, 0x4003,\r
-+      0x0880, 0x2021, 0x4005, 0x0868, 0x2021, 0x4006, 0x0850, 0x2039,\r
-+      0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804,\r
-+      0x48c2, 0x7883, 0x0004, 0x7884, 0x0807, 0x2039, 0x0001, 0x902e,\r
-+      0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x48c5, 0x7984,\r
-+      0x7888, 0x2114, 0x200a, 0x0804, 0x3337, 0x7984, 0x2114, 0x0804,\r
-+      0x3337, 0x20e1, 0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1,\r
-+      0x0021, 0x20a9, 0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804,\r
-+      0x3337, 0x7884, 0x2060, 0x04d8, 0x2009, 0x0003, 0x2011, 0x0002,\r
-+      0x2019, 0x001c, 0x789b, 0x0317, 0x0804, 0x3337, 0x2039, 0x0001,\r
-+      0x7d98, 0x7c9c, 0x0800, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848,\r
-+      0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x336c, 0x2138, 0x7d98,\r
-+      0x7c9c, 0x0804, 0x3373, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,\r
-+      0x336c, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x3381, 0x79a0, 0x9182,\r
-+      0x0040, 0x0210, 0x0804, 0x336c, 0x21e8, 0x7984, 0x7888, 0x20a9,\r
-+      0x0001, 0x21a0, 0x4004, 0x0804, 0x3337, 0x2061, 0x0800, 0xe10c,\r
-+      0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005,\r
-+      0x0904, 0x3337, 0x0804, 0x3366, 0x79a0, 0x9182, 0x0040, 0x0210,\r
-+      0x0804, 0x336c, 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012,\r
-+      0x0804, 0x3337, 0x2069, 0x1853, 0x7884, 0x7990, 0x911a, 0x1a04,\r
-+      0x336c, 0x8019, 0x0904, 0x336c, 0x684a, 0x6942, 0x788c, 0x6852,\r
-+      0x7888, 0x6856, 0x9006, 0x685a, 0x685e, 0x080c, 0x72c7, 0x0804,\r
-+      0x3337, 0x2069, 0x1853, 0x7884, 0x7994, 0x911a, 0x1a04, 0x336c,\r
-+      0x8019, 0x0904, 0x336c, 0x684e, 0x6946, 0x788c, 0x6862, 0x7888,\r
-+      0x6866, 0x9006, 0x686a, 0x686e, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x6664, 0x012e, 0x0804, 0x3337, 0x902e, 0x2520, 0x81ff, 0x0120,\r
-+      0x2009, 0x0001, 0x0804, 0x3369, 0x7984, 0x7b88, 0x7a8c, 0x20a9,\r
-+      0x0005, 0x20e9, 0x0001, 0x20a1, 0x189c, 0x4101, 0x080c, 0x4879,\r
-+      0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x2009, 0x0020, 0xa85c,\r
-+      0x9080, 0x0019, 0xaf60, 0x080c, 0x48c2, 0x701f, 0x3450, 0x0005,\r
-+      0xa864, 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0168, 0x9096,\r
-+      0x0019, 0x0150, 0x9096, 0x0015, 0x0138, 0x9096, 0x0048, 0x0120,\r
-+      0x9096, 0x0029, 0x1904, 0x3369, 0x810f, 0x918c, 0x00ff, 0x0904,\r
-+      0x3369, 0x7112, 0x7010, 0x8001, 0x0560, 0x7012, 0x080c, 0x4879,\r
-+      0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x2009, 0x0020, 0x7068,\r
-+      0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, 0x9290, 0x0040, 0x9399,\r
-+      0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019,\r
-+      0xaf60, 0x080c, 0x48c2, 0x701f, 0x348e, 0x0005, 0xa864, 0x9084,\r
-+      0x00ff, 0x9096, 0x0002, 0x0120, 0x9096, 0x000a, 0x1904, 0x3369,\r
-+      0x0888, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084,\r
-+      0x00ff, 0x9096, 0x0029, 0x1160, 0xc2fd, 0xaa7a, 0x080c, 0x5ddd,\r
-+      0x0150, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, 0x012e, 0x0050,\r
-+      0x080c, 0x60f4, 0x1128, 0x7007, 0x0003, 0x701f, 0x34ba, 0x0005,\r
-+      0x080c, 0x6ac6, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1,\r
-+      0x0001, 0x2099, 0x189c, 0x400a, 0x2100, 0x9210, 0x9399, 0x0000,\r
-+      0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0x2009,\r
-+      0x0020, 0x012e, 0xaf60, 0x0804, 0x48c5, 0x2091, 0x8000, 0x7837,\r
-+      0x4000, 0x7833, 0x0010, 0x7883, 0x4000, 0x7887, 0x4953, 0x788b,\r
-+      0x5020, 0x788f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7892, 0x3f00,\r
-+      0x7896, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007,\r
-+      0x9205, 0x789a, 0x2009, 0x04fd, 0x2104, 0x789e, 0x2091, 0x5000,\r
-+      0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001,\r
-+      0x19ea, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc,\r
-+      0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x2071,\r
-+      0x0080, 0x0804, 0x0427, 0x81ff, 0x1904, 0x3369, 0x7984, 0x080c,\r
-+      0x623e, 0x1904, 0x336c, 0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000,\r
-+      0x1a04, 0x336c, 0x7c88, 0x7d8c, 0x080c, 0x63a1, 0x080c, 0x6370,\r
-+      0x0000, 0x1518, 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000,\r
-+      0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406,\r
-+      0x1118, 0xa870, 0x9506, 0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001,\r
-+      0x1819, 0x2004, 0x9c02, 0x1a04, 0x3369, 0x0c30, 0x080c, 0xb74a,\r
-+      0x012e, 0x0904, 0x3369, 0x0804, 0x3337, 0x900e, 0x2001, 0x0005,\r
-+      0x080c, 0x6ac6, 0x0126, 0x2091, 0x8000, 0x080c, 0xbe0c, 0x080c,\r
-+      0x688c, 0x012e, 0x0804, 0x3337, 0x00a6, 0x2950, 0xb198, 0x080c,\r
-+      0x623e, 0x1904, 0x35a6, 0xb6a4, 0x9684, 0x3fff, 0x9082, 0x4000,\r
-+      0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x63a1, 0x080c, 0x6370, 0x1520,\r
-+      0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000,\r
-+      0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870,\r
-+      0x9506, 0x0158, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004,\r
-+      0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c, 0xb74a, 0x012e,\r
-+      0x2009, 0x0003, 0x0178, 0x00e0, 0x900e, 0x2001, 0x0005, 0x080c,\r
-+      0x6ac6, 0x0126, 0x2091, 0x8000, 0x080c, 0xbe0c, 0x080c, 0x687f,\r
-+      0x012e, 0x0070, 0xb097, 0x4005, 0xb19a, 0x0010, 0xb097, 0x4006,\r
-+      0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x2a48, 0x00ae, 0x0005,\r
-+      0xb097, 0x4000, 0x9006, 0x918d, 0x0001, 0x2008, 0x2a48, 0x00ae,\r
-+      0x0005, 0x81ff, 0x1904, 0x3369, 0x080c, 0x4890, 0x0904, 0x336c,\r
-+      0x080c, 0x6305, 0x0904, 0x3369, 0x080c, 0x63a7, 0x0904, 0x3369,\r
-+      0x0804, 0x4301, 0x81ff, 0x1904, 0x3369, 0x080c, 0x48ac, 0x0904,\r
-+      0x336c, 0x080c, 0x6435, 0x0904, 0x3369, 0x2019, 0x0005, 0x79a8,\r
-+      0x080c, 0x63c2, 0x0904, 0x3369, 0x7888, 0x908a, 0x1000, 0x1a04,\r
-+      0x336c, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8046, 0x7984,\r
-+      0xd184, 0x1904, 0x3337, 0x0804, 0x4301, 0x0126, 0x2091, 0x8000,\r
-+      0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x07ff, 0x6458,\r
-+      0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, 0x623e, 0x11d8, 0x080c,\r
-+      0x6435, 0x1128, 0x2009, 0x0002, 0x62bc, 0x2518, 0x00c0, 0x2019,\r
-+      0x0004, 0x900e, 0x080c, 0x63c2, 0x1118, 0x2009, 0x0006, 0x0078,\r
-+      0x7884, 0x908a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0x9108,\r
-+      0x080c, 0x8046, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x3337, 0x012e,\r
-+      0x0804, 0x3369, 0x012e, 0x0804, 0x336c, 0x080c, 0x4890, 0x0904,\r
-+      0x336c, 0x080c, 0x6305, 0x0904, 0x3369, 0xbaa0, 0x2019, 0x0005,\r
-+      0x00c6, 0x9066, 0x080c, 0x8571, 0x0076, 0x903e, 0x080c, 0x8469,\r
-+      0x900e, 0x080c, 0xd29b, 0x007e, 0x00ce, 0x080c, 0x63a1, 0x0804,\r
-+      0x3337, 0x080c, 0x4890, 0x0904, 0x336c, 0x080c, 0x63a1, 0x2208,\r
-+      0x0804, 0x3337, 0x0156, 0x00d6, 0x00e6, 0x2069, 0x1906, 0x6810,\r
-+      0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9,\r
-+      0x007e, 0x2069, 0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059,\r
-+      0x9210, 0x8d68, 0x1f04, 0x365b, 0x2300, 0x9218, 0x00ee, 0x00de,\r
-+      0x015e, 0x0804, 0x3337, 0x00f6, 0x0016, 0x907d, 0x0138, 0x9006,\r
-+      0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe,\r
-+      0x0005, 0x2069, 0x1906, 0x6910, 0x62b8, 0x0804, 0x3337, 0x81ff,\r
-+      0x0120, 0x2009, 0x0001, 0x0804, 0x3369, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x539a, 0x0128, 0x2009, 0x0007, 0x012e, 0x0804, 0x3369,\r
-+      0x012e, 0x6158, 0x9190, 0x3138, 0x2215, 0x9294, 0x00ff, 0x6378,\r
-+      0x83ff, 0x0108, 0x627c, 0x67d8, 0x97c4, 0x000a, 0x98c6, 0x000a,\r
-+      0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022,\r
-+      0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012,\r
-+      0x1118, 0x2031, 0x0002, 0x0068, 0x080c, 0x6fb2, 0x1118, 0x2031,\r
-+      0x0004, 0x0038, 0xd79c, 0x0120, 0x2009, 0x0005, 0x0804, 0x3369,\r
-+      0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x3337, 0x6148, 0x624c, 0x2019,\r
-+      0x1957, 0x231c, 0x2001, 0x1958, 0x2004, 0x789a, 0x0804, 0x3337,\r
-+      0x0126, 0x2091, 0x8000, 0x6138, 0x623c, 0x6340, 0x012e, 0x0804,\r
-+      0x3337, 0x080c, 0x48ac, 0x0904, 0x336c, 0xba44, 0xbb38, 0x0804,\r
-+      0x3337, 0x080c, 0x0db4, 0x080c, 0x48ac, 0x2110, 0x0904, 0x336c,\r
-+      0xb804, 0x908c, 0x00ff, 0x918e, 0x0006, 0x0140, 0x9084, 0xff00,\r
-+      0x9086, 0x0600, 0x2009, 0x0009, 0x1904, 0x3369, 0x0126, 0x2091,\r
-+      0x8000, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0x9926, 0x080c,\r
-+      0x8571, 0x0076, 0x903e, 0x080c, 0x8469, 0x900e, 0x080c, 0xd29b,\r
-+      0x007e, 0x00ce, 0xb807, 0x0407, 0x012e, 0x0804, 0x3337, 0x6148,\r
-+      0x624c, 0x7884, 0x604a, 0x7b88, 0x634e, 0x2069, 0x1853, 0x831f,\r
-+      0x9305, 0x6816, 0x788c, 0x2069, 0x1957, 0x2d1c, 0x206a, 0x7e98,\r
-+      0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1958, 0x2d04,\r
-+      0x266a, 0x789a, 0x0804, 0x3337, 0x0126, 0x2091, 0x8000, 0x6138,\r
-+      0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0e9b, 0xd0c4, 0x01a8,\r
-+      0x00d6, 0x78a8, 0x2009, 0x196e, 0x200a, 0x78ac, 0x2011, 0x196f,\r
-+      0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214,\r
-+      0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e, 0x2011,\r
-+      0x0114, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0080, 0x0010,\r
-+      0x918c, 0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e, 0xd1e4,\r
-+      0x190c, 0x0eb1, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114,\r
-+      0x2012, 0x012e, 0x0804, 0x3337, 0x00f6, 0x2079, 0x1800, 0x7a38,\r
-+      0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf, 0x8002,\r
-+      0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897, 0x4000,\r
-+      0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898,\r
-+      0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x336c, 0x788c, 0x902d,\r
-+      0x0904, 0x336c, 0x900e, 0x080c, 0x623e, 0x1120, 0xba44, 0xbb38,\r
-+      0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c,\r
-+      0x48ac, 0x0904, 0x336c, 0x7888, 0x900d, 0x0904, 0x336c, 0x788c,\r
-+      0x9005, 0x0904, 0x336c, 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804,\r
-+      0x3337, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c, 0x539a,\r
-+      0x1904, 0x3369, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff,\r
-+      0x1130, 0x2001, 0x1817, 0x2004, 0x9085, 0xff00, 0x0088, 0x9182,\r
-+      0x007f, 0x16e0, 0x9188, 0x3138, 0x210d, 0x918c, 0x00ff, 0x2001,\r
-+      0x1817, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f, 0x9105,\r
-+      0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x9ddc, 0x000e, 0x0510,\r
-+      0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x61e4, 0x2b08, 0x00be,\r
-+      0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4879, 0x01d0, 0x9006,\r
-+      0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x701f,\r
-+      0x380c, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0x9eac, 0x012e,\r
-+      0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x3369, 0x00ce, 0x0804,\r
-+      0x336c, 0x080c, 0x9e32, 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904,\r
-+      0x3369, 0x0804, 0x3337, 0x2061, 0x1a41, 0x0126, 0x2091, 0x8000,\r
-+      0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800, 0x6350,\r
-+      0x6070, 0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804,\r
-+      0x3337, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x3369, 0x080c,\r
-+      0x6fb2, 0x0904, 0x3369, 0x0126, 0x2091, 0x8000, 0x6250, 0x6070,\r
-+      0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x26cc, 0x080c, 0x55b4,\r
-+      0x012e, 0x0804, 0x3337, 0x012e, 0x0804, 0x336c, 0x0006, 0x0016,\r
-+      0x00c6, 0x00e6, 0x2001, 0x197a, 0x2070, 0x2061, 0x1853, 0x6008,\r
-+      0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x8270, 0x7206, 0x00ee,\r
-+      0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff,\r
-+      0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3339, 0x7884, 0xd0fc,\r
-+      0x0148, 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288, 0x012e,\r
-+      0x0804, 0x336c, 0x2001, 0x002a, 0x2004, 0x2069, 0x1853, 0x6908,\r
-+      0x9102, 0x1230, 0x012e, 0x0804, 0x336c, 0x012e, 0x0804, 0x3369,\r
-+      0x080c, 0x9db1, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x38d7, 0x00c6,\r
-+      0x080c, 0x4879, 0x00ce, 0x0d88, 0xa867, 0x0000, 0x7884, 0xa80a,\r
-+      0x7898, 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004, 0xa81a,\r
-+      0x2001, 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004, 0xa822,\r
-+      0x2001, 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004, 0xa82a,\r
-+      0x2001, 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004, 0x9080,\r
-+      0x0003, 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3a5d, 0x0928,\r
-+      0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808,\r
-+      0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006,\r
-+      0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c,\r
-+      0x48c2, 0x701f, 0x399a, 0x7023, 0x0001, 0x012e, 0x0005, 0x0046,\r
-+      0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,\r
-+      0x080c, 0x3846, 0x2001, 0x1970, 0x2003, 0x0000, 0x2021, 0x000a,\r
-+      0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, 0x32e1,\r
-+      0x60bf, 0x0012, 0x080c, 0x3acc, 0x080c, 0x3a8b, 0x00f6, 0x00e6,\r
-+      0x0086, 0x2940, 0x2071, 0x1a36, 0x2079, 0x0090, 0x00d6, 0x2069,\r
-+      0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, 0x780e,\r
-+      0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c,\r
-+      0x3e5f, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3d8c, 0x080c, 0x3c91,\r
-+      0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, 0x080c,\r
-+      0x3ed3, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070,\r
-+      0x1560, 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084, 0xff00,\r
-+      0x9086, 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084, 0xff00,\r
-+      0x9086, 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037, 0x0000,\r
-+      0x715c, 0x9106, 0x1190, 0x2001, 0x181f, 0x2004, 0x9106, 0x1168,\r
-+      0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, 0x0138,\r
-+      0x080c, 0x3c9b, 0x080c, 0x3a86, 0x0058, 0x080c, 0x3a86, 0x080c,\r
-+      0x3df7, 0x080c, 0x3d82, 0x2001, 0x020b, 0x2004, 0xd0e4, 0x0dd8,\r
-+      0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002,\r
-+      0x001e, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb, 0x0000,\r
-+      0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c, 0x918c,\r
-+      0xfffd, 0x2102, 0x080c, 0x129f, 0x2009, 0x0028, 0x080c, 0x2268,\r
-+      0x2001, 0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de, 0x00ce,\r
-+      0x00be, 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, 0x1970, 0x2004,\r
-+      0x9005, 0x1118, 0x012e, 0x0804, 0x3337, 0x012e, 0x2021, 0x400c,\r
-+      0x0804, 0x3339, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076,\r
-+      0x0086, 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020, 0x20a8,\r
-+      0x8000, 0x7022, 0xa804, 0x9005, 0x0904, 0x39f6, 0x2048, 0x1f04,\r
-+      0x39aa, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, 0xa930,\r
-+      0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x0096,\r
-+      0x7014, 0x2048, 0xa864, 0x009e, 0x9086, 0x0103, 0x0170, 0x8906,\r
-+      0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b,\r
-+      0x080c, 0x48c2, 0x701f, 0x399a, 0x00b0, 0x8906, 0x8006, 0x8007,\r
-+      0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0,\r
-+      0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f68, 0x000e, 0x080c,\r
-+      0x48c5, 0x701f, 0x399a, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e,\r
-+      0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x7014, 0x2048,\r
-+      0xa864, 0x9086, 0x0103, 0x1118, 0x701f, 0x3a5b, 0x0450, 0x7014,\r
-+      0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009, 0x007f, 0x080c, 0x61de,\r
-+      0x0110, 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c,\r
-+      0xbfdb, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e,\r
-+      0x003e, 0x002e, 0x001e, 0x0904, 0x3369, 0x0016, 0x0026, 0x0036,\r
-+      0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x701f,\r
-+      0x3a2d, 0x7007, 0x0003, 0x0804, 0x39eb, 0xa830, 0x9086, 0x0100,\r
-+      0x2021, 0x400c, 0x0904, 0x3339, 0x0076, 0xad10, 0xac0c, 0xab24,\r
-+      0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021,\r
-+      0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,\r
-+      0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006,\r
-+      0x080c, 0x0f68, 0x000e, 0x080c, 0x48c5, 0x007e, 0x701f, 0x399a,\r
-+      0x7023, 0x0001, 0x0005, 0x0804, 0x3337, 0x0156, 0x00c6, 0xa814,\r
-+      0x908a, 0x001e, 0x0218, 0xa833, 0x001e, 0x0010, 0xa832, 0x0078,\r
-+      0x81ff, 0x0168, 0x0016, 0x080c, 0x4879, 0x001e, 0x0130, 0xa800,\r
-+      0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58, 0x9006, 0x0010, 0x9085,\r
-+      0x0001, 0x00ce, 0x015e, 0x0005, 0x0006, 0x00f6, 0x2079, 0x0000,\r
-+      0x7880, 0x9086, 0x0044, 0x00fe, 0x000e, 0x0005, 0x2001, 0x1970,\r
-+      0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200,\r
-+      0x2001, 0x197b, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x197a,\r
-+      0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4879, 0xa813,\r
-+      0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004,\r
-+      0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2061, 0x0090, 0x2079,\r
-+      0x0100, 0x2001, 0x197a, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c,\r
-+      0x2268, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0x601a,\r
-+      0xa873, 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e,\r
-+      0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4879, 0x2940,\r
-+      0xa013, 0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030,\r
-+      0x2004, 0xa866, 0x2001, 0x0031, 0x2004, 0xa86a, 0x2001, 0x002a,\r
-+      0x2004, 0x9084, 0xfff8, 0xa86e, 0xa873, 0x0000, 0x2001, 0x032a,\r
-+      0x2003, 0x0004, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d,\r
-+      0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102,\r
-+      0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148, 0x080c,\r
-+      0x2a55, 0x1130, 0x9006, 0x080c, 0x29ad, 0x9006, 0x080c, 0x2990,\r
-+      0x7884, 0x9084, 0x0007, 0x0002, 0x3b17, 0x3b20, 0x3b29, 0x3b14,\r
-+      0x3b14, 0x3b14, 0x3b14, 0x3b14, 0x012e, 0x0804, 0x336c, 0x2009,\r
-+      0x0114, 0x2104, 0x9085, 0x0800, 0x200a, 0x080c, 0x3ce5, 0x00c0,\r
-+      0x2009, 0x0114, 0x2104, 0x9085, 0x4000, 0x200a, 0x080c, 0x3ce5,\r
-+      0x0078, 0x080c, 0x6fb2, 0x1128, 0x012e, 0x2009, 0x0016, 0x0804,\r
-+      0x3369, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3339,\r
-+      0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,\r
-+      0x080c, 0x3846, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc,\r
-+      0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x3fae, 0x080c, 0x3efe,\r
-+      0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a36,\r
-+      0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120,\r
-+      0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c,\r
-+      0x3e5f, 0x080c, 0x2a5d, 0x080c, 0x2a5d, 0x080c, 0x2a5d, 0x080c,\r
-+      0x2a5d, 0x080c, 0x3e5f, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3d8c,\r
-+      0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3c9b, 0x2001, 0x0004,\r
-+      0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de,\r
-+      0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c,\r
-+      0x3369, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10,\r
-+      0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001,\r
-+      0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3d6a, 0x2d00, 0x9c05,\r
-+      0x9b05, 0x0120, 0x080c, 0x3c9b, 0x0804, 0x3c48, 0x080c, 0x3ed3,\r
-+      0x080c, 0x3df7, 0x080c, 0x3d4d, 0x080c, 0x3d82, 0x00f6, 0x2079,\r
-+      0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3c9b, 0x00fe,\r
-+      0x0804, 0x3c48, 0x00fe, 0x080c, 0x3c91, 0x1150, 0x8d68, 0x2001,\r
-+      0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3c9b, 0x0080,\r
-+      0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739,\r
-+      0x0038, 0x2001, 0x1a33, 0x2004, 0x9086, 0x0000, 0x1904, 0x3b98,\r
-+      0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500,\r
-+      0x9605, 0x0904, 0x3c48, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05,\r
-+      0x9b05, 0x1904, 0x3c48, 0xa013, 0x0019, 0x2001, 0x032a, 0x2003,\r
-+      0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a33, 0x2003, 0x0003,\r
-+      0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4,\r
-+      0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c,\r
-+      0x2268, 0x2900, 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180,\r
-+      0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b,\r
-+      0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3c1f, 0x00ce, 0x0030,\r
-+      0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6,\r
-+      0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002, 0x2001, 0x002a,\r
-+      0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004,\r
-+      0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3b52,\r
-+      0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100,\r
-+      0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001,\r
-+      0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x129f, 0x7884,\r
-+      0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009, 0x0028, 0x080c,\r
-+      0x2268, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ef,\r
-+      0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043,\r
-+      0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05, 0x9d05,\r
-+      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e,\r
-+      0x1118, 0x012e, 0x0804, 0x3337, 0x012e, 0x2021, 0x400c, 0x0804,\r
-+      0x3339, 0x9085, 0x0001, 0x1d04, 0x3c9a, 0x2091, 0x6000, 0x8420,\r
-+      0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010, 0x2001,\r
-+      0x032a, 0x2003, 0x0004, 0x2001, 0x1a33, 0x2003, 0x0000, 0x0071,\r
-+      0x2009, 0x0048, 0x080c, 0x2268, 0x2001, 0x0227, 0x2024, 0x2402,\r
-+      0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6, 0x00e6,\r
-+      0x2071, 0x1a36, 0x7000, 0x9086, 0x0000, 0x0520, 0x2079, 0x0090,\r
-+      0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120,\r
-+      0x2009, 0x0040, 0x080c, 0x2268, 0x782c, 0xd0fc, 0x0d88, 0x080c,\r
-+      0x3ed3, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004, 0x782c,\r
-+      0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2268, 0x782b, 0x0002,\r
-+      0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100,\r
-+      0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, 0x26ac, 0x7850,\r
-+      0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319,\r
-+      0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852, 0x20a9, 0x0046,\r
-+      0x1d04, 0x3d00, 0x2091, 0x6000, 0x1f04, 0x3d00, 0x7850, 0x9085,\r
-+      0x0400, 0x9084, 0xdfff, 0x7852, 0x2001, 0x0021, 0x2004, 0x9084,\r
-+      0x0003, 0x9086, 0x0001, 0x1120, 0x7850, 0x9084, 0xdfff, 0x7852,\r
-+      0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x0028,\r
-+      0xa001, 0x1f04, 0x3d20, 0x7850, 0x9085, 0x1400, 0x7852, 0x2019,\r
-+      0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c, 0x1110, 0x8319, 0x1dc8,\r
-+      0x7827, 0x0048, 0x7850, 0x9085, 0x0400, 0x7852, 0x7843, 0x0040,\r
-+      0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100,\r
-+      0x080c, 0x2b14, 0x7827, 0x0020, 0x7843, 0x0000, 0x9006, 0x080c,\r
-+      0x2b14, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884, 0xd0ac, 0x11c8,\r
-+      0x00f6, 0x00e6, 0x2071, 0x1a33, 0x2079, 0x0320, 0x2001, 0x0201,\r
-+      0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000, 0x1140, 0x0051,\r
-+      0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b, 0x0019, 0x00ee,\r
-+      0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c,\r
-+      0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009, 0x0033, 0x250a,\r
-+      0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68, 0xd0a4, 0x0108,\r
-+      0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0110,\r
-+      0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001,\r
-+      0x197b, 0x2004, 0x70e2, 0x080c, 0x3a7c, 0x1188, 0x2001, 0x181f,\r
-+      0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, 0x706e, 0x716a,\r
-+      0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, 0x0080, 0x702c,\r
-+      0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c, 0x716e, 0x7063,\r
-+      0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073, 0x0809, 0x7077,\r
-+      0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080, 0x8000, 0x7082,\r
-+      0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab,\r
-+      0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984, 0x9085, 0x0092,\r
-+      0x7016, 0x080c, 0x3ed3, 0x00f6, 0x2071, 0x1a33, 0x2079, 0x0320,\r
-+      0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c, 0x780e,\r
-+      0x6898, 0x780a, 0x00de, 0x2009, 0x03e8, 0x8109, 0x1df0, 0x792c,\r
-+      0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, 0x0011, 0x080c, 0x3e5f,\r
-+      0x2011, 0x0001, 0x080c, 0x3e5f, 0x00fe, 0x00ee, 0x0005, 0x00f6,\r
-+      0x00e6, 0x2071, 0x1a33, 0x2079, 0x0320, 0x792c, 0xd1fc, 0x0904,\r
-+      0x3e5c, 0x782b, 0x0002, 0x9026, 0xd19c, 0x1904, 0x3e58, 0x7000,\r
-+      0x0002, 0x3e5c, 0x3e0d, 0x3e3d, 0x3e58, 0xd1bc, 0x1170, 0xd1dc,\r
-+      0x1190, 0x8001, 0x7002, 0x2011, 0x0001, 0x080c, 0x3e5f, 0x0904,\r
-+      0x3e5c, 0x080c, 0x3e5f, 0x0804, 0x3e5c, 0x00f6, 0x2079, 0x0300,\r
-+      0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, 0x782b, 0x0004, 0x7812,\r
-+      0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8, 0x080c, 0x3d6a,\r
-+      0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, 0x78b8, 0x00fe, 0xd0ec,\r
-+      0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, 0x8001, 0x7002, 0x9184,\r
-+      0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, 0x3e01, 0x2011, 0x0001,\r
-+      0x00b1, 0x0090, 0xa010, 0x9092, 0x0004, 0x9086, 0x0015, 0x1120,\r
-+      0xa000, 0xa05a, 0x2011, 0x0031, 0xa212, 0xd1dc, 0x1960, 0x0828,\r
-+      0x782b, 0x0004, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0xa014,\r
-+      0x9005, 0x0550, 0x8001, 0x0036, 0x0096, 0xa016, 0xa058, 0x2048,\r
-+      0xa010, 0x2009, 0x0031, 0x911a, 0x831c, 0x831c, 0x938a, 0x0007,\r
-+      0x1a0c, 0x0db4, 0x9398, 0x3e8d, 0x231d, 0x083f, 0x9080, 0x0004,\r
-+      0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, 0x003e, 0x908a, 0x0035,\r
-+      0x1140, 0x0096, 0xa058, 0x2048, 0xa804, 0xa05a, 0x2001, 0x0019,\r
-+      0x009e, 0xa012, 0x9085, 0x0001, 0x0005, 0x3eca, 0x3ec1, 0x3eb8,\r
-+      0x3eaf, 0x3ea6, 0x3e9d, 0x3e94, 0xa964, 0x7902, 0xa968, 0x7906,\r
-+      0xa96c, 0x7912, 0xa970, 0x7916, 0x0005, 0xa974, 0x7902, 0xa978,\r
-+      0x7906, 0xa97c, 0x7912, 0xa980, 0x7916, 0x0005, 0xa984, 0x7902,\r
-+      0xa988, 0x7906, 0xa98c, 0x7912, 0xa990, 0x7916, 0x0005, 0xa994,\r
-+      0x7902, 0xa998, 0x7906, 0xa99c, 0x7912, 0xa9a0, 0x7916, 0x0005,\r
-+      0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, 0x7912, 0xa9b0, 0x7916,\r
-+      0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, 0xa9bc, 0x7912, 0xa9c0,\r
-+      0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, 0x7906, 0xa9cc, 0x7912,\r
-+      0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, 0x0086, 0x2071, 0x1a36,\r
-+      0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, 0x782b, 0x0002, 0x2940,\r
-+      0x9026, 0x7000, 0x0002, 0x3efa, 0x3ee6, 0x3ef1, 0x8001, 0x7002,\r
-+      0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, 0x3e5f, 0x190c, 0x3e5f,\r
-+      0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc, 0x1d38, 0x2011, 0x0001,\r
-+      0x080c, 0x3e5f, 0x008e, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6,\r
-+      0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, 0x197b, 0x2004, 0x601a,\r
-+      0x2061, 0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, 0x6104, 0xc1ac,\r
-+      0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x0520, 0x2038, 0x2001,\r
-+      0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c, 0x4879, 0xa813,\r
-+      0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138,\r
-+      0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, 0x2048,\r
-+      0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3f76, 0x1d68, 0x2900,\r
-+      0xa85a, 0x00d0, 0x080c, 0x4879, 0xa813, 0x0019, 0xa817, 0x0001,\r
-+      0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f,\r
-+      0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e,\r
-+      0x2001, 0x002b, 0x2004, 0xa872, 0x2061, 0x0090, 0x2079, 0x0100,\r
-+      0x2001, 0x197a, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x2268,\r
-+      0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001,\r
-+      0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x9006, 0x600a,\r
-+      0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x2071,\r
-+      0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088,\r
-+      0x702b, 0x0026, 0x7402, 0x7306, 0x9006, 0x700a, 0x700e, 0x810b,\r
-+      0x810b, 0x21a8, 0x810b, 0x7112, 0x702b, 0x0041, 0x702c, 0xd0fc,\r
-+      0x0de8, 0x702b, 0x0002, 0x702b, 0x0040, 0x4005, 0x7400, 0x7304,\r
-+      0x87ff, 0x0190, 0x0086, 0x0096, 0x2940, 0x0086, 0x080c, 0x4879,\r
-+      0x008e, 0xa058, 0x00a6, 0x2050, 0x2900, 0xb006, 0xa05a, 0x00ae,\r
-+      0x009e, 0x008e, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x2001,\r
-+      0x002d, 0x2004, 0x9005, 0x0528, 0x2038, 0x2001, 0x0030, 0x2024,\r
-+      0x2001, 0x0031, 0x201c, 0x080c, 0x4879, 0x2940, 0xa813, 0x0019,\r
-+      0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, 0x2009,\r
-+      0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c,\r
-+      0x9080, 0x0019, 0x009e, 0x080c, 0x3f76, 0x1d68, 0x2900, 0xa85a,\r
-+      0x00d8, 0x080c, 0x4879, 0x2940, 0xa013, 0x0019, 0xa017, 0x0001,\r
-+      0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa066, 0x2001, 0x0031,\r
-+      0x2004, 0xa06a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa06e,\r
-+      0x2001, 0x002b, 0x2004, 0xa072, 0x2001, 0x032a, 0x2003, 0x0004,\r
-+      0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101, 0x200c, 0x918d, 0x0200,\r
-+      0x2102, 0xa017, 0x0000, 0x2001, 0x1a33, 0x2003, 0x0003, 0x2001,\r
-+      0x032a, 0x2003, 0x0009, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001,\r
-+      0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002,\r
-+      0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0013,\r
-+      0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, 0x2009, 0x013c,\r
-+      0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108, 0x0005, 0x0804,\r
-+      0x3337, 0x7d98, 0x7c9c, 0x0804, 0x342e, 0x080c, 0x6fb2, 0x190c,\r
-+      0x5c96, 0x2069, 0x1853, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88,\r
-+      0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x48c2, 0x701f, 0x4049,\r
-+      0x0005, 0x080c, 0x5395, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095,\r
-+      0x20d8, 0x21d0, 0x2069, 0x1853, 0x6800, 0x9005, 0x0904, 0x336c,\r
-+      0x6804, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138, 0x6200,\r
-+      0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010, 0x918d, 0x0020,\r
-+      0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0118,\r
-+      0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106, 0x00ce, 0xd084,\r
-+      0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x336c, 0x9288, 0x3138,\r
-+      0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, 0x6828, 0x908a,\r
-+      0x007f, 0x1a04, 0x336c, 0x605a, 0x6888, 0x9084, 0x0030, 0x8004,\r
-+      0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x1982, 0x9080, 0x279f,\r
-+      0x2005, 0x200a, 0x000e, 0x2009, 0x1983, 0x9080, 0x27a3, 0x2005,\r
-+      0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x336c, 0x908a, 0x0841,\r
-+      0x1a04, 0x336c, 0x9084, 0x0007, 0x1904, 0x336c, 0x680c, 0x9005,\r
-+      0x0904, 0x336c, 0x6810, 0x9005, 0x0904, 0x336c, 0x6848, 0x6940,\r
-+      0x910a, 0x1a04, 0x336c, 0x8001, 0x0904, 0x336c, 0x684c, 0x6944,\r
-+      0x910a, 0x1a04, 0x336c, 0x8001, 0x0904, 0x336c, 0x2009, 0x1952,\r
-+      0x200b, 0x0000, 0x2001, 0x1875, 0x2004, 0xd0c4, 0x0140, 0x7884,\r
-+      0x200a, 0x2009, 0x017f, 0x200a, 0x3b00, 0xc085, 0x20d8, 0x6814,\r
-+      0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, 0x604e, 0x080c,\r
-+      0x72c7, 0x080c, 0x662f, 0x080c, 0x6664, 0x6808, 0x602a, 0x080c,\r
-+      0x21da, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, 0xa001, 0x200b,\r
-+      0x0000, 0x0036, 0x6b08, 0x080c, 0x2706, 0x003e, 0x6000, 0x9086,\r
-+      0x0000, 0x1904, 0x41c6, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007,\r
-+      0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04,\r
-+      0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f,\r
-+      0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006, 0x610a, 0x620e,\r
-+      0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1,\r
-+      0x1984, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1, 0x199e,\r
-+      0x20e9, 0x0001, 0x4001, 0x080c, 0x8141, 0x00c6, 0x900e, 0x20a9,\r
-+      0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009, 0x0100, 0x210c,\r
-+      0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5, 0x3e18, 0x12b0,\r
-+      0x3508, 0x8109, 0x080c, 0x7892, 0x6878, 0x6016, 0x6874, 0x2008,\r
-+      0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108,\r
-+      0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x4135,\r
-+      0x00ce, 0x00c6, 0x2061, 0x196d, 0x2063, 0x0001, 0x9006, 0x080c,\r
-+      0x29ad, 0x9006, 0x080c, 0x2990, 0x0000, 0x00ce, 0x00e6, 0x2c70,\r
-+      0x080c, 0x0e80, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114,\r
-+      0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086,\r
-+      0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001,\r
-+      0x194d, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e,\r
-+      0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c,\r
-+      0x277b, 0x2001, 0x193e, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061,\r
-+      0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x6fb2,\r
-+      0x0128, 0x080c, 0x4c92, 0x0110, 0x080c, 0x26cc, 0x60d0, 0x9005,\r
-+      0x01c0, 0x6003, 0x0001, 0x2009, 0x41ae, 0x00d0, 0x080c, 0x6fb2,\r
-+      0x1168, 0x2011, 0x6e33, 0x080c, 0x8038, 0x2011, 0x6e26, 0x080c,\r
-+      0x810c, 0x080c, 0x729b, 0x080c, 0x6ee4, 0x0040, 0x080c, 0x5b90,\r
-+      0x0028, 0x6003, 0x0004, 0x2009, 0x41c6, 0x0010, 0x0804, 0x3337,\r
-+      0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118,\r
-+      0x2091, 0x30bd, 0x0817, 0x2091, 0x303d, 0x0817, 0x6000, 0x9086,\r
-+      0x0000, 0x0904, 0x3369, 0x2069, 0x1853, 0x7890, 0x6842, 0x7894,\r
-+      0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,\r
-+      0x2039, 0x0001, 0x0804, 0x48c5, 0x9006, 0x080c, 0x26cc, 0x81ff,\r
-+      0x1904, 0x3369, 0x080c, 0x6fb2, 0x11b0, 0x080c, 0x7296, 0x080c,\r
-+      0x5cd1, 0x080c, 0x3133, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c,\r
-+      0xc212, 0x0130, 0x080c, 0x6fd5, 0x1118, 0x080c, 0x6f8a, 0x0038,\r
-+      0x080c, 0x6ee4, 0x0020, 0x080c, 0x5c96, 0x080c, 0x5b90, 0x0804,\r
-+      0x3337, 0x81ff, 0x1904, 0x3369, 0x080c, 0x6fb2, 0x1110, 0x0804,\r
-+      0x3369, 0x6190, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, 0x1c80,\r
-+      0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091,\r
-+      0x8000, 0x2039, 0x0001, 0x080c, 0x48c5, 0x701f, 0x3335, 0x012e,\r
-+      0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1c80, 0x20a9, 0x0040,\r
-+      0x20e9, 0x0001, 0x20a1, 0x1c80, 0x2019, 0xffff, 0x4304, 0x6558,\r
-+      0x9588, 0x3138, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011,\r
-+      0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x623e, 0x1190, 0xb814,\r
-+      0x821c, 0x0238, 0x9398, 0x1c80, 0x9085, 0xff00, 0x8007, 0x201a,\r
-+      0x0038, 0x9398, 0x1c80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a,\r
-+      0x8210, 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007,\r
-+      0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1c80,\r
-+      0x2099, 0x1c80, 0x080c, 0x5c21, 0x0804, 0x421e, 0x080c, 0x48ac,\r
-+      0x0904, 0x336c, 0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804,\r
-+      0x3369, 0x080c, 0x5386, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e,\r
-+      0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c,\r
-+      0x312e, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff,\r
-+      0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,\r
-+      0x080c, 0xbce0, 0x1120, 0x2009, 0x0003, 0x0804, 0x3369, 0x7007,\r
-+      0x0003, 0x701f, 0x42ac, 0x0005, 0x080c, 0x48ac, 0x0904, 0x336c,\r
-+      0x20a9, 0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8,\r
-+      0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080,\r
-+      0x0006, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098,\r
-+      0x080c, 0x0f68, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a,\r
-+      0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c,\r
-+      0x0f68, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,\r
-+      0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,\r
-+      0x0804, 0x48c5, 0x81ff, 0x1904, 0x3369, 0x080c, 0x4890, 0x0904,\r
-+      0x336c, 0x080c, 0x63b0, 0x0904, 0x3369, 0x0058, 0xa878, 0x9005,\r
-+      0x0120, 0x2009, 0x0004, 0x0804, 0x3369, 0xa974, 0xaa94, 0x0804,\r
-+      0x3337, 0x080c, 0x538e, 0x0904, 0x3337, 0x701f, 0x42f6, 0x7007,\r
-+      0x0003, 0x0005, 0x81ff, 0x1904, 0x3369, 0x7888, 0x908a, 0x1000,\r
-+      0x1a04, 0x336c, 0x080c, 0x48ac, 0x0904, 0x336c, 0x080c, 0x6562,\r
-+      0x0120, 0x080c, 0x656a, 0x1904, 0x336c, 0x080c, 0x6435, 0x0904,\r
-+      0x3369, 0x2019, 0x0004, 0x900e, 0x080c, 0x63c2, 0x0904, 0x3369,\r
-+      0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, 0x12f8,\r
-+      0x080c, 0x48aa, 0x01e0, 0x080c, 0x6562, 0x0118, 0x080c, 0x656a,\r
-+      0x11b0, 0x080c, 0x6435, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002,\r
-+      0x2019, 0x0004, 0x080c, 0x63c2, 0x2009, 0x0003, 0x0120, 0xa998,\r
-+      0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,\r
-+      0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897,\r
-+      0x4000, 0x080c, 0x538e, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,\r
-+      0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071,\r
-+      0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400, 0x9506,\r
-+      0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x623e,\r
-+      0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8046,\r
-+      0x0005, 0x81ff, 0x1904, 0x3369, 0x798c, 0x2001, 0x1951, 0x918c,\r
-+      0x8000, 0x2102, 0x080c, 0x4890, 0x0904, 0x336c, 0x080c, 0x6562,\r
-+      0x0120, 0x080c, 0x656a, 0x1904, 0x336c, 0x080c, 0x6305, 0x0904,\r
-+      0x3369, 0x080c, 0x63b9, 0x0904, 0x3369, 0x2001, 0x1951, 0x2004,\r
-+      0xd0fc, 0x1904, 0x3337, 0x0804, 0x4301, 0xa9a0, 0x2001, 0x1951,\r
-+      0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x489d, 0x01a0, 0x080c,\r
-+      0x6562, 0x0118, 0x080c, 0x656a, 0x1170, 0x080c, 0x6305, 0x2009,\r
-+      0x0002, 0x0128, 0x080c, 0x63b9, 0x1170, 0x2009, 0x0003, 0xa897,\r
-+      0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,\r
-+      0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1951, 0x2004,\r
-+      0xd0fc, 0x1128, 0x080c, 0x538e, 0x0110, 0x9006, 0x0018, 0x900e,\r
-+      0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x3369,\r
-+      0x798c, 0x2001, 0x1950, 0x918c, 0x8000, 0x2102, 0x080c, 0x4890,\r
-+      0x0904, 0x336c, 0x080c, 0x6562, 0x0120, 0x080c, 0x656a, 0x1904,\r
-+      0x336c, 0x080c, 0x6305, 0x0904, 0x3369, 0x080c, 0x63a7, 0x0904,\r
-+      0x3369, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1904, 0x3337, 0x0804,\r
-+      0x4301, 0xa9a0, 0x2001, 0x1950, 0x918c, 0x8000, 0xc18d, 0x2102,\r
-+      0x080c, 0x489d, 0x01a0, 0x080c, 0x6562, 0x0118, 0x080c, 0x656a,\r
-+      0x1170, 0x080c, 0x6305, 0x2009, 0x0002, 0x0128, 0x080c, 0x63a7,\r
-+      0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,\r
-+      0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897,\r
-+      0x4000, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x538e,\r
-+      0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,\r
-+      0x0005, 0x6100, 0x0804, 0x3337, 0x080c, 0x48ac, 0x0904, 0x336c,\r
-+      0x080c, 0x539a, 0x1904, 0x3369, 0x79a8, 0xd184, 0x1158, 0xb834,\r
-+      0x8007, 0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f, 0xba28,\r
-+      0x8217, 0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007, 0x789a,\r
-+      0xbb1c, 0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0200, 0x0804,\r
-+      0x3337, 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1148, 0x939a, 0x0003,\r
-+      0x1a04, 0x3369, 0x6258, 0x7884, 0x9206, 0x1904, 0x44b1, 0x2031,\r
-+      0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c,\r
-+      0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006, 0x78a8,\r
-+      0x9084, 0x0080, 0x11c8, 0x0006, 0x0036, 0x2001, 0x1a4f, 0x201c,\r
-+      0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a50, 0x201c, 0x7b9e, 0x2003,\r
-+      0x0000, 0x2001, 0x1a51, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x003e,\r
-+      0x000e, 0x000e, 0x0804, 0x48c5, 0x000e, 0x2031, 0x0000, 0x2061,\r
-+      0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392,\r
-+      0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x44d1,\r
-+      0x0005, 0x81ff, 0x1904, 0x3369, 0x080c, 0x48ac, 0x0904, 0x336c,\r
-+      0x080c, 0x6562, 0x1904, 0x3369, 0x00c6, 0x080c, 0x4879, 0x00ce,\r
-+      0x0904, 0x3369, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7ea8,\r
-+      0x080c, 0xbc86, 0x0904, 0x3369, 0x7007, 0x0003, 0x701f, 0x44eb,\r
-+      0x0005, 0x080c, 0x401b, 0x0006, 0x0036, 0x2001, 0x1a4f, 0x201c,\r
-+      0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a50, 0x201c, 0x7b9e, 0x2003,\r
-+      0x0000, 0x2001, 0x1a51, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x003e,\r
-+      0x000e, 0x0804, 0x3337, 0xa830, 0x9086, 0x0100, 0x0904, 0x3369,\r
-+      0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,\r
-+      0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,\r
-+      0x48c5, 0x9006, 0x080c, 0x26cc, 0x78a8, 0x9084, 0x00ff, 0x9086,\r
-+      0x00ff, 0x0118, 0x81ff, 0x1904, 0x3369, 0x080c, 0x6fb2, 0x0110,\r
-+      0x080c, 0x5c96, 0x7888, 0x908a, 0x1000, 0x1a04, 0x336c, 0x7984,\r
-+      0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x336c, 0x2100,\r
-+      0x080c, 0x2696, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061,\r
-+      0x19cb, 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, 0x6077,\r
-+      0x0000, 0x080c, 0x6fb2, 0x1158, 0x080c, 0x7296, 0x080c, 0x5cd1,\r
-+      0x9085, 0x0001, 0x080c, 0x6ff9, 0x080c, 0x6ee4, 0x00d0, 0x080c,\r
-+      0x9db8, 0x2061, 0x0100, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff,\r
-+      0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009,\r
-+      0x196a, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bbc, 0x080c,\r
-+      0x80ca, 0x7984, 0x080c, 0x6fb2, 0x1110, 0x2009, 0x00ff, 0x7a88,\r
-+      0x080c, 0x4364, 0x012e, 0x00ce, 0x002e, 0x0804, 0x3337, 0x7984,\r
-+      0x080c, 0x61de, 0x2b08, 0x1904, 0x336c, 0x0804, 0x3337, 0x81ff,\r
-+      0x0120, 0x2009, 0x0001, 0x0804, 0x3369, 0x60d8, 0xd0ac, 0x1130,\r
-+      0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3369, 0x080c, 0x4879,\r
-+      0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x7984, 0x9192, 0x0021,\r
-+      0x1a04, 0x336c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,\r
-+      0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, 0x48c2, 0x701f, 0x459f,\r
-+      0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x4e44, 0x0005, 0x2009,\r
-+      0x0080, 0x080c, 0x623e, 0x1118, 0x080c, 0x6562, 0x0120, 0x2021,\r
-+      0x400a, 0x0804, 0x3339, 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70,\r
-+      0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, 0x4638,\r
-+      0x90be, 0x0112, 0x0904, 0x4638, 0x90be, 0x0113, 0x0904, 0x4638,\r
-+      0x90be, 0x0114, 0x0904, 0x4638, 0x90be, 0x0117, 0x0904, 0x4638,\r
-+      0x90be, 0x011a, 0x0904, 0x4638, 0x90be, 0x011c, 0x0904, 0x4638,\r
-+      0x90be, 0x0121, 0x0904, 0x461f, 0x90be, 0x0131, 0x0904, 0x461f,\r
-+      0x90be, 0x0171, 0x0904, 0x4638, 0x90be, 0x0173, 0x0904, 0x4638,\r
-+      0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, 0x4643,\r
-+      0x90be, 0x0212, 0x0904, 0x462c, 0x90be, 0x0213, 0x05e8, 0x90be,\r
-+      0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a, 0x1120,\r
-+      0xa89c, 0x8007, 0xa89e, 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be,\r
-+      0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x336c, 0x7028, 0x9080,\r
-+      0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007,\r
-+      0x080c, 0x4681, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034,\r
-+      0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4681, 0x00c8, 0x7028,\r
-+      0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,\r
-+      0x0001, 0x080c, 0x468e, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098,\r
-+      0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x468e,\r
-+      0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8,\r
-+      0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4879, 0x0550, 0xa868,\r
-+      0xc0fd, 0xa86a, 0xa867, 0x0119, 0x9006, 0xa882, 0xa87f, 0x0020,\r
-+      0xa88b, 0x0001, 0x810b, 0xa9ae, 0xa8b2, 0xaab6, 0xabba, 0xacbe,\r
-+      0xadc2, 0xa9c6, 0xa8ca, 0x00ce, 0x009e, 0x00de, 0xa866, 0xa822,\r
-+      0xa868, 0xc0fd, 0xa86a, 0xa804, 0x2048, 0x080c, 0xbca1, 0x1120,\r
-+      0x2009, 0x0003, 0x0804, 0x3369, 0x7007, 0x0003, 0x701f, 0x4678,\r
-+      0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x3369,\r
-+      0xa820, 0x9086, 0x8001, 0x1904, 0x3337, 0x2009, 0x0004, 0x0804,\r
-+      0x3369, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104,\r
-+      0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,\r
-+      0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204,\r
-+      0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e,\r
-+      0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3369, 0x60d8,\r
-+      0xd0ac, 0x1160, 0xd09c, 0x0120, 0x2009, 0x0016, 0x0804, 0x3369,\r
-+      0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3369, 0x7984, 0x78a8,\r
-+      0x2040, 0x080c, 0x9db1, 0x1120, 0x9182, 0x007f, 0x0a04, 0x336c,\r
-+      0x9186, 0x00ff, 0x0904, 0x336c, 0x9182, 0x0800, 0x1a04, 0x336c,\r
-+      0x7a8c, 0x7b88, 0x6078, 0x9306, 0x1140, 0x607c, 0x924e, 0x0904,\r
-+      0x336c, 0x99cc, 0xff00, 0x0904, 0x336c, 0x0126, 0x2091, 0x8000,\r
-+      0x0026, 0x2011, 0x8008, 0x080c, 0x6586, 0x002e, 0x0140, 0x918d,\r
-+      0x8000, 0x080c, 0x65d0, 0x1118, 0x2001, 0x4009, 0x0458, 0x080c,\r
-+      0x4793, 0x0560, 0x90c6, 0x4000, 0x1170, 0x00c6, 0x0006, 0x900e,\r
-+      0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,\r
-+      0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090,\r
-+      0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009,\r
-+      0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005,\r
-+      0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3339, 0x2b00, 0x7026,\r
-+      0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9e7f, 0x0904,\r
-+      0x4760, 0x2b00, 0x6012, 0x080c, 0xbf8c, 0x2e58, 0x00ee, 0x00e6,\r
-+      0x00c6, 0x080c, 0x4879, 0x00ce, 0x2b70, 0x1158, 0x080c, 0x9e32,\r
-+      0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, 0x0804,\r
-+      0x3369, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932, 0xa868,\r
-+      0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x080c, 0x2fda, 0x6023,\r
-+      0x0001, 0x9006, 0x080c, 0x617b, 0x2001, 0x0002, 0x080c, 0x618f,\r
-+      0x2009, 0x0002, 0x080c, 0x9eac, 0x78a8, 0xd094, 0x0138, 0x00ee,\r
-+      0x7024, 0x00e6, 0x2058, 0xb8bc, 0xc08d, 0xb8be, 0x9085, 0x0001,\r
-+      0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003,\r
-+      0x0804, 0x3369, 0x7007, 0x0003, 0x701f, 0x476f, 0x0005, 0xa830,\r
-+      0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3339,\r
-+      0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04,\r
-+      0x9294, 0x00ff, 0x0804, 0x52e3, 0x900e, 0xa868, 0xd0f4, 0x1904,\r
-+      0x3337, 0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,\r
-+      0xc18d, 0x0804, 0x3337, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904,\r
-+      0x47db, 0x902e, 0x080c, 0x9db1, 0x0130, 0x9026, 0x20a9, 0x0800,\r
-+      0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071,\r
-+      0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, 0x2428,\r
-+      0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, 0x94ce,\r
-+      0x0080, 0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, 0x11d8,\r
-+      0xc5fd, 0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, 0xbe14,\r
-+      0x2600, 0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, 0x0568,\r
-+      0xd894, 0x1558, 0x080c, 0x6562, 0x1540, 0x2001, 0x4000, 0x0430,\r
-+      0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106,\r
-+      0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, 0x9db1,\r
-+      0x1930, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x47a9,\r
-+      0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030,\r
-+      0x080c, 0x61de, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e,\r
-+      0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,\r
-+      0x3369, 0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804, 0x3369,\r
-+      0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904,\r
-+      0x336c, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x336c,\r
-+      0x2010, 0x2918, 0x080c, 0x2f80, 0x1120, 0x2009, 0x0003, 0x0804,\r
-+      0x3369, 0x7007, 0x0003, 0x701f, 0x482e, 0x0005, 0xa830, 0x9086,\r
-+      0x0100, 0x1904, 0x3337, 0x2009, 0x0004, 0x0804, 0x3369, 0x7984,\r
-+      0x080c, 0x9db1, 0x1120, 0x9182, 0x007f, 0x0a04, 0x336c, 0x9186,\r
-+      0x00ff, 0x0904, 0x336c, 0x9182, 0x0800, 0x1a04, 0x336c, 0x2001,\r
-+      0x9000, 0x080c, 0x533e, 0x1904, 0x3369, 0x0804, 0x3337, 0xa998,\r
-+      0x080c, 0x9db1, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff,\r
-+      0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x533e,\r
-+      0x11a8, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,\r
-+      0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,\r
-+      0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a,\r
-+      0x0c48, 0x080c, 0x0feb, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005,\r
-+      0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086,\r
-+      0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005,\r
-+      0x7984, 0x080c, 0x623e, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082,\r
-+      0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x623e,\r
-+      0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e,\r
-+      0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x623e,\r
-+      0x1108, 0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff,\r
-+      0x0128, 0x2148, 0xa904, 0x080c, 0x101d, 0x0cc8, 0x7116, 0x711a,\r
-+      0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061,\r
-+      0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392,\r
-+      0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x3337,\r
-+      0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001,\r
-+      0x18a6, 0x2004, 0x9005, 0x1190, 0x0e04, 0x48f6, 0x7a36, 0x7833,\r
-+      0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089,\r
-+      0x2004, 0xd084, 0x190c, 0x1187, 0x0804, 0x495c, 0x0016, 0x0086,\r
-+      0x0096, 0x00c6, 0x00e6, 0x2071, 0x1894, 0x7044, 0x9005, 0x1540,\r
-+      0x7148, 0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x0feb,\r
-+      0x0904, 0x4954, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002,\r
-+      0x9080, 0x1f26, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004,\r
-+      0x2001, 0x18b0, 0x9c82, 0x18f0, 0x0210, 0x2061, 0x18b0, 0x2c00,\r
-+      0x703a, 0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460,\r
-+      0x7148, 0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016,\r
-+      0x908a, 0x0036, 0x1a0c, 0x0db4, 0x2060, 0x001e, 0x8108, 0x2105,\r
-+      0x9005, 0xa146, 0x1520, 0x080c, 0x0feb, 0x1130, 0x8109, 0xa946,\r
-+      0x7148, 0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046,\r
-+      0x2800, 0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080,\r
-+      0x1f26, 0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee,\r
-+      0x00ce, 0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00,\r
-+      0x9082, 0x001b, 0x0002, 0x497e, 0x497e, 0x4980, 0x497e, 0x497e,\r
-+      0x497e, 0x4984, 0x497e, 0x497e, 0x497e, 0x4988, 0x497e, 0x497e,\r
-+      0x497e, 0x498c, 0x497e, 0x497e, 0x497e, 0x4990, 0x497e, 0x497e,\r
-+      0x497e, 0x4994, 0x497e, 0x497e, 0x497e, 0x4999, 0x080c, 0x0db4,\r
-+      0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878,\r
-+      0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838,\r
-+      0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804,\r
-+      0x4957, 0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x4957, 0x00e6, 0x2071,\r
-+      0x1894, 0x7048, 0x9005, 0x0904, 0x4a30, 0x0126, 0x2091, 0x8000,\r
-+      0x0e04, 0x4a2f, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086,\r
-+      0x0076, 0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948,\r
-+      0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0db4, 0x2060, 0x001e,\r
-+      0x8108, 0x2105, 0x9005, 0xa94a, 0x1904, 0x4a32, 0xa804, 0x9005,\r
-+      0x090c, 0x0db4, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001,\r
-+      0x0002, 0x9080, 0x1f26, 0x2005, 0xa04a, 0x0804, 0x4a32, 0x703c,\r
-+      0x2060, 0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833,\r
-+      0x0012, 0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080,\r
-+      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x87ff, 0x0118,\r
-+      0x2748, 0x080c, 0x101d, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170,\r
-+      0x7040, 0x2048, 0x9005, 0x0128, 0x080c, 0x101d, 0x9006, 0x7042,\r
-+      0x7046, 0x703b, 0x18b0, 0x703f, 0x18b0, 0x0420, 0x7040, 0x9005,\r
-+      0x1508, 0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa,\r
-+      0x18f0, 0x0210, 0x2001, 0x18b0, 0x703e, 0x00a0, 0x9006, 0x703e,\r
-+      0x703a, 0x7044, 0x9005, 0x090c, 0x0db4, 0x2048, 0xa800, 0x9005,\r
-+      0x1de0, 0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1f26, 0x2005,\r
-+      0xa84a, 0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e,\r
-+      0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4a51, 0x4a51,\r
-+      0x4a53, 0x4a51, 0x4a51, 0x4a51, 0x4a58, 0x4a51, 0x4a51, 0x4a51,\r
-+      0x4a5d, 0x4a51, 0x4a51, 0x4a51, 0x4a62, 0x4a51, 0x4a51, 0x4a51,\r
-+      0x4a67, 0x4a51, 0x4a51, 0x4a51, 0x4a6c, 0x4a51, 0x4a51, 0x4a51,\r
-+      0x4a71, 0x080c, 0x0db4, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x49dd,\r
-+      0xaa84, 0xab88, 0xac8c, 0x0804, 0x49dd, 0xaa94, 0xab98, 0xac9c,\r
-+      0x0804, 0x49dd, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x49dd, 0xaab4,\r
-+      0xabb8, 0xacbc, 0x0804, 0x49dd, 0xaac4, 0xabc8, 0xaccc, 0x0804,\r
-+      0x49dd, 0xaad4, 0xabd8, 0xacdc, 0x0804, 0x49dd, 0x0026, 0x080c,\r
-+      0x5386, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x48d9, 0x002e,\r
-+      0x0005, 0x81ff, 0x1904, 0x3369, 0x0126, 0x2091, 0x8000, 0x6030,\r
-+      0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x6fb2, 0x1158, 0x080c,\r
-+      0x7296, 0x080c, 0x5cd1, 0x9085, 0x0001, 0x080c, 0x6ff9, 0x080c,\r
-+      0x6ee4, 0x0010, 0x080c, 0x5b90, 0x012e, 0x0804, 0x3337, 0x81ff,\r
-+      0x0120, 0x2009, 0x0001, 0x0804, 0x3369, 0x080c, 0x539a, 0x0120,\r
-+      0x2009, 0x0007, 0x0804, 0x3369, 0x080c, 0x655a, 0x0120, 0x2009,\r
-+      0x0008, 0x0804, 0x3369, 0x0026, 0x2011, 0x0010, 0x080c, 0x6586,\r
-+      0x002e, 0x0140, 0x7984, 0x080c, 0x65d0, 0x1120, 0x2009, 0x4009,\r
-+      0x0804, 0x3369, 0x080c, 0x312e, 0x0128, 0x7984, 0x080c, 0x61de,\r
-+      0x1904, 0x336c, 0x080c, 0x48ac, 0x0904, 0x336c, 0x2b00, 0x7026,\r
-+      0x080c, 0x6562, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e,\r
-+      0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,\r
-+      0x0804, 0x3337, 0x080c, 0x4879, 0x0904, 0x3369, 0x9006, 0xa866,\r
-+      0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbd3a, 0x0904, 0x3369,\r
-+      0x7888, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x7007, 0x0003,\r
-+      0x701f, 0x4b47, 0x0005, 0x2061, 0x1800, 0x080c, 0x539a, 0x2009,\r
-+      0x0007, 0x1578, 0x080c, 0x655a, 0x0118, 0x2009, 0x0008, 0x0448,\r
-+      0x080c, 0x312e, 0x0120, 0xa998, 0x080c, 0x61de, 0x1530, 0x080c,\r
-+      0x48aa, 0x0518, 0x080c, 0x6562, 0xa89c, 0x1168, 0x9084, 0x0005,\r
-+      0x1150, 0x900e, 0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc,\r
-+      0x0108, 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xbd3a,\r
-+      0x11e0, 0xa89c, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x2009,\r
-+      0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e,\r
-+      0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0xa99a,\r
-+      0x9006, 0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0xa830,\r
-+      0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3339,\r
-+      0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x52e3, 0x900e,\r
-+      0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,\r
-+      0x0804, 0x3337, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804,\r
-+      0x3369, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4879,\r
-+      0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x900e, 0x2130, 0x7126,\r
-+      0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a,\r
-+      0x20a0, 0x080c, 0x623e, 0x1904, 0x4be5, 0x080c, 0x6562, 0x0120,\r
-+      0x080c, 0x656a, 0x1904, 0x4be5, 0x080c, 0x655a, 0x1130, 0x080c,\r
-+      0x645e, 0x1118, 0xd79c, 0x0904, 0x4be5, 0xd794, 0x1110, 0xd784,\r
-+      0x01a8, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x3400,\r
-+      0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00,\r
-+      0x20e0, 0x20a9, 0x0002, 0x080c, 0x468e, 0x0048, 0x20a9, 0x0004,\r
-+      0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x468e, 0x4104,\r
-+      0xd794, 0x0528, 0xb8b4, 0x20e0, 0xb8b8, 0x2060, 0x9c80, 0x0000,\r
-+      0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9,\r
-+      0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002,\r
-+      0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4681, 0x9c80,\r
-+      0x0026, 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794,\r
-+      0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, 0x9db1,\r
-+      0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800,\r
-+      0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686,\r
-+      0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x4b81, 0x86ff,\r
-+      0x1120, 0x7124, 0x810b, 0x0804, 0x3337, 0x7033, 0x0001, 0x7122,\r
-+      0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18ae, 0x2c44, 0xa06b,\r
-+      0x0000, 0xa67a, 0x7034, 0xa072, 0x7028, 0xa076, 0xa28e, 0xa392,\r
-+      0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x4c21,\r
-+      0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c,\r
-+      0x9036, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa28c, 0xa390,\r
-+      0xa494, 0xa598, 0x0804, 0x4b81, 0x7124, 0x810b, 0x0804, 0x3337,\r
-+      0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00,\r
-+      0x8007, 0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04, 0x336c,\r
-+      0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04,\r
-+      0x336c, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x336c,\r
-+      0x9502, 0x0a04, 0x336c, 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04,\r
-+      0x336c, 0x9502, 0x0a04, 0x336c, 0x9384, 0xff00, 0x8007, 0x90e2,\r
-+      0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04, 0x336c, 0x9384, 0x00ff,\r
-+      0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04, 0x336c, 0x9484,\r
-+      0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04,\r
-+      0x336c, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502,\r
-+      0x0a04, 0x336c, 0x2061, 0x195a, 0x6102, 0x6206, 0x630a, 0x640e,\r
-+      0x0804, 0x3337, 0x0006, 0x080c, 0x5386, 0xd0cc, 0x000e, 0x0005,\r
-+      0x0006, 0x080c, 0x538a, 0xd0bc, 0x000e, 0x0005, 0x6170, 0x7a84,\r
-+      0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3337, 0x83ff, 0x1904,\r
-+      0x336c, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x336c, 0x2019, 0xffff,\r
-+      0x6074, 0x9302, 0x9200, 0x0a04, 0x336c, 0x7986, 0x6272, 0x0804,\r
-+      0x3337, 0x080c, 0x539a, 0x1904, 0x3369, 0x7c88, 0x7d84, 0x7e98,\r
-+      0x7f8c, 0x080c, 0x4879, 0x0904, 0x3369, 0x900e, 0x901e, 0x7326,\r
-+      0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a,\r
-+      0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6562,\r
-+      0x0118, 0x080c, 0x656a, 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004,\r
-+      0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800,\r
-+      0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224,\r
-+      0x900e, 0x2001, 0x0003, 0x080c, 0x8270, 0x2208, 0x0804, 0x3337,\r
-+      0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061, 0x18ae,\r
-+      0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034, 0xa072,\r
-+      0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x10d5, 0x7007, 0x0002,\r
-+      0x701f, 0x4d13, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120, 0x7028,\r
-+      0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa48c,\r
-+      0xa590, 0xa694, 0xa798, 0x0804, 0x4cd1, 0x7224, 0x900e, 0x2001,\r
-+      0x0003, 0x080c, 0x8270, 0x2208, 0x0804, 0x3337, 0x00f6, 0x00e6,\r
-+      0x080c, 0x539a, 0x2009, 0x0007, 0x1904, 0x4da6, 0x2071, 0x1894,\r
-+      0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x4da6, 0xac9c, 0xad98,\r
-+      0xaea4, 0xafa0, 0x0096, 0x080c, 0x1004, 0x2009, 0x0002, 0x0904,\r
-+      0x4da6, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362, 0xa860,\r
-+      0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000,\r
-+      0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6562, 0x0118, 0x080c, 0x656a,\r
-+      0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104,\r
-+      0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c,\r
-+      0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003,\r
-+      0x080c, 0x8270, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, 0x715c,\r
-+      0x81ff, 0x090c, 0x0db4, 0x2148, 0x080c, 0x101d, 0x9006, 0x705e,\r
-+      0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152, 0x7054,\r
-+      0x9300, 0x7056, 0x2061, 0x18af, 0x2c44, 0xa37a, 0x7058, 0xa076,\r
-+      0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, 0x4db2,\r
-+      0x000e, 0xa0a2, 0x080c, 0x10d5, 0x9006, 0x0048, 0x009e, 0xa897,\r
-+      0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee,\r
-+      0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0db4, 0x00e6,\r
-+      0x2071, 0x1894, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, 0x0030,\r
-+      0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158,\r
-+      0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c, 0xa590,\r
-+      0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897,\r
-+      0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x8270, 0xaa9a,\r
-+      0x715c, 0x81ff, 0x090c, 0x0db4, 0x2148, 0x080c, 0x101d, 0x705f,\r
-+      0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x688c,\r
-+      0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005,\r
-+      0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6562, 0x0118,\r
-+      0x080c, 0x656a, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810,\r
-+      0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120,\r
-+      0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c,\r
-+      0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0db4, 0x2148,\r
-+      0x080c, 0x101d, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a0,\r
-+      0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x688c, 0x012e, 0xa09f,\r
-+      0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152, 0x7054,\r
-+      0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c,\r
-+      0x10d5, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be, 0x7000,\r
-+      0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, 0x009e,\r
-+      0x0804, 0x336c, 0xa884, 0xa988, 0x080c, 0x2663, 0x1518, 0x080c,\r
-+      0x61de, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c, 0x4879,\r
-+      0x01c8, 0x080c, 0x4879, 0x01b0, 0x009e, 0xa867, 0x0000, 0xa868,\r
-+      0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c, 0xbcc1,\r
-+      0x1120, 0x2009, 0x0003, 0x0804, 0x3369, 0x7007, 0x0003, 0x701f,\r
-+      0x4e7f, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x3369, 0x7124,\r
-+      0x080c, 0x30d5, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004,\r
-+      0x0804, 0x3369, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906,\r
-+      0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080,\r
-+      0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9,\r
-+      0x002a, 0x080c, 0x0f68, 0xaa6c, 0xab70, 0xac74, 0xad78, 0x2061,\r
-+      0x18ae, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6, 0x7000,\r
-+      0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009,\r
-+      0x0004, 0x000e, 0x007e, 0x0804, 0x48c5, 0x97c6, 0x7200, 0x11b8,\r
-+      0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18ae, 0x2c44,\r
-+      0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a,\r
-+      0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x4edb, 0x0005, 0x000e,\r
-+      0x007e, 0x0804, 0x336c, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804,\r
-+      0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,\r
-+      0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a,\r
-+      0x080c, 0x0f68, 0x2100, 0x2238, 0x2061, 0x18ae, 0x2c44, 0xa28c,\r
-+      0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x48c5, 0x81ff,\r
-+      0x1904, 0x3369, 0x798c, 0x2001, 0x194f, 0x918c, 0x8000, 0x2102,\r
-+      0x080c, 0x4890, 0x0904, 0x336c, 0x080c, 0x6562, 0x0120, 0x080c,\r
-+      0x656a, 0x1904, 0x336c, 0x080c, 0x6305, 0x0904, 0x3369, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x63cb, 0x012e, 0x0904, 0x3369, 0x2001,\r
-+      0x194f, 0x2004, 0xd0fc, 0x1904, 0x3337, 0x0804, 0x4301, 0xa9a0,\r
-+      0x2001, 0x194f, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x489d,\r
-+      0x01a0, 0x080c, 0x6562, 0x0118, 0x080c, 0x656a, 0x1170, 0x080c,\r
-+      0x6305, 0x2009, 0x0002, 0x0128, 0x080c, 0x63cb, 0x1170, 0x2009,\r
-+      0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e,\r
-+      0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001,\r
-+      0x194f, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x538e, 0x0110, 0x9006,\r
-+      0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8,\r
-+      0xd08c, 0x1118, 0xd084, 0x0904, 0x4276, 0x080c, 0x48ac, 0x0904,\r
-+      0x336c, 0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804, 0x3369,\r
-+      0x080c, 0x6562, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005,\r
-+      0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028,\r
-+      0x080c, 0x5386, 0xd0b4, 0x0904, 0x42b0, 0x7884, 0x908e, 0x007e,\r
-+      0x0904, 0x42b0, 0x908e, 0x007f, 0x0904, 0x42b0, 0x908e, 0x0080,\r
-+      0x0904, 0x42b0, 0xb800, 0xd08c, 0x1904, 0x42b0, 0xa867, 0x0000,\r
-+      0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbce0, 0x1120, 0x2009, 0x0003,\r
-+      0x0804, 0x3369, 0x7007, 0x0003, 0x701f, 0x4fa7, 0x0005, 0x080c,\r
-+      0x48ac, 0x0904, 0x336c, 0x0804, 0x42b0, 0x080c, 0x312e, 0x0108,\r
-+      0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001,\r
-+      0x0804, 0x3369, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804,\r
-+      0x3369, 0x080c, 0x655a, 0x0120, 0x2009, 0x0008, 0x0804, 0x3369,\r
-+      0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x42b0, 0x9006, 0xa866,\r
-+      0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbd3a, 0x1120, 0x2009,\r
-+      0x0003, 0x0804, 0x3369, 0x7007, 0x0003, 0x701f, 0x4fe0, 0x0005,\r
-+      0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x52e3,\r
-+      0x080c, 0x48ac, 0x0904, 0x336c, 0x0804, 0x4f79, 0x81ff, 0x2009,\r
-+      0x0001, 0x1904, 0x3369, 0x080c, 0x539a, 0x2009, 0x0007, 0x1904,\r
-+      0x3369, 0x080c, 0x655a, 0x0120, 0x2009, 0x0008, 0x0804, 0x3369,\r
-+      0x080c, 0x48ac, 0x0904, 0x336c, 0x080c, 0x6562, 0x2009, 0x0009,\r
-+      0x1904, 0x3369, 0x080c, 0x4879, 0x2009, 0x0002, 0x0904, 0x3369,\r
-+      0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, 0x9194,\r
-+      0xff00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952,\r
-+      0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x336c, 0xc0e5,\r
-+      0xa952, 0xa956, 0xa83e, 0x080c, 0xbf8d, 0x2009, 0x0003, 0x0904,\r
-+      0x3369, 0x7007, 0x0003, 0x701f, 0x5036, 0x0005, 0xa830, 0x9086,\r
-+      0x0100, 0x2009, 0x0004, 0x0904, 0x3369, 0x0804, 0x3337, 0x7aa8,\r
-+      0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x539a, 0x1188,\r
-+      0x2009, 0x0014, 0x0804, 0x3369, 0xd2dc, 0x1568, 0x81ff, 0x2009,\r
-+      0x0001, 0x1904, 0x3369, 0x080c, 0x539a, 0x2009, 0x0007, 0x1904,\r
-+      0x3369, 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x5361, 0x0804,\r
-+      0x3337, 0xd2fc, 0x0158, 0x080c, 0x48ac, 0x0904, 0x336c, 0x7984,\r
-+      0x9284, 0x9000, 0x080c, 0x533e, 0x0804, 0x3337, 0x080c, 0x48ac,\r
-+      0x0904, 0x336c, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009,\r
-+      0x0009, 0x1904, 0x511f, 0x080c, 0x4879, 0x2009, 0x0002, 0x0904,\r
-+      0x511f, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008, 0x7a8c,\r
-+      0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x48c2, 0x701f, 0x5090, 0x0005,\r
-+      0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120, 0xa874,\r
-+      0x9084, 0xff00, 0x0110, 0x1904, 0x336c, 0xa866, 0xa832, 0xa868,\r
-+      0xc0fd, 0xa86a, 0x080c, 0x48ac, 0x1110, 0x0804, 0x336c, 0x2009,\r
-+      0x0043, 0x080c, 0xbff5, 0x2009, 0x0003, 0x0904, 0x511f, 0x7007,\r
-+      0x0003, 0x701f, 0x50b4, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009,\r
-+      0x0004, 0x0904, 0x511f, 0x7984, 0x7aa8, 0x9284, 0x1000, 0x080c,\r
-+      0x533e, 0x0804, 0x3337, 0x00c6, 0xaab0, 0x9284, 0xc000, 0x0140,\r
-+      0xd2ec, 0x0168, 0x080c, 0x539a, 0x1150, 0x2009, 0x0014, 0x04f0,\r
-+      0x2061, 0x1800, 0x080c, 0x539a, 0x2009, 0x0007, 0x15b8, 0xd2f4,\r
-+      0x0128, 0x9284, 0x5000, 0x080c, 0x5361, 0x0050, 0xd2fc, 0x0178,\r
-+      0x080c, 0x48aa, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c, 0x533e,\r
-+      0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438, 0x080c,\r
-+      0x48aa, 0x0510, 0x080c, 0x6562, 0x2009, 0x0009, 0x11b8, 0xa8c4,\r
-+      0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084,\r
-+      0xff00, 0x1190, 0x080c, 0x48aa, 0x1108, 0x0070, 0x2009, 0x004b,\r
-+      0x080c, 0xbff5, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429, 0x19c0,\r
-+      0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,\r
-+      0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8,\r
-+      0xd2dc, 0x0904, 0x3369, 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd,\r
-+      0x080c, 0x533e, 0x001e, 0x1904, 0x3369, 0x0804, 0x3337, 0x00f6,\r
-+      0x2d78, 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150, 0x0016,\r
-+      0xa998, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x533e, 0x001e, 0x9085,\r
-+      0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3369,\r
-+      0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804, 0x3369, 0x7984,\r
-+      0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x623e, 0x1904, 0x336c, 0x9186,\r
-+      0x007f, 0x0138, 0x080c, 0x6562, 0x0120, 0x2009, 0x0009, 0x0804,\r
-+      0x3369, 0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804, 0x3369,\r
-+      0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007,\r
-+      0xa80a, 0x080c, 0xbcfa, 0x1120, 0x2009, 0x0003, 0x0804, 0x3369,\r
-+      0x7007, 0x0003, 0x701f, 0x517d, 0x0005, 0xa808, 0x8007, 0x9086,\r
-+      0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x3369, 0xa8e0, 0xa866,\r
-+      0xa810, 0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007, 0x9084,\r
-+      0x00ff, 0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006, 0x8007,\r
-+      0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88,\r
-+      0x7c9c, 0x7d98, 0x0804, 0x48c5, 0x080c, 0x4879, 0x1120, 0x2009,\r
-+      0x0002, 0x0804, 0x3369, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff,\r
-+      0x8217, 0x82ff, 0x1118, 0x7023, 0x1984, 0x0040, 0x92c6, 0x0001,\r
-+      0x1118, 0x7023, 0x199e, 0x0010, 0x0804, 0x336c, 0x2009, 0x001a,\r
-+      0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60,\r
-+      0x080c, 0x48c2, 0x701f, 0x51cd, 0x0005, 0x2001, 0x182d, 0x2003,\r
-+      0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9,\r
-+      0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x3337,\r
-+      0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x7984,\r
-+      0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099,\r
-+      0x1984, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x199e, 0x0010,\r
-+      0x0804, 0x336c, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8,\r
-+      0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c,\r
-+      0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804,\r
-+      0x48c5, 0x7884, 0x908a, 0x1000, 0x1a04, 0x336c, 0x0126, 0x2091,\r
-+      0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19cb,\r
-+      0x6142, 0x00ce, 0x012e, 0x0804, 0x3337, 0x00c6, 0x080c, 0x6fb2,\r
-+      0x1160, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x9085, 0x0001, 0x080c,\r
-+      0x6ff9, 0x080c, 0x6ee4, 0x080c, 0x0db4, 0x2061, 0x1800, 0x6030,\r
-+      0xc09d, 0x6032, 0x080c, 0x5b90, 0x00ce, 0x0005, 0x00c6, 0x2001,\r
-+      0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x3369, 0x7884, 0x9005,\r
-+      0x0188, 0x7888, 0x2061, 0x196d, 0x2c0c, 0x2062, 0x080c, 0x2a45,\r
-+      0x01a0, 0x080c, 0x2a4d, 0x0188, 0x080c, 0x2a55, 0x0170, 0x2162,\r
-+      0x0804, 0x336c, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118,\r
-+      0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002,\r
-+      0x1548, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011,\r
-+      0x0003, 0x080c, 0x9771, 0x2011, 0x0002, 0x080c, 0x977b, 0x002e,\r
-+      0x080c, 0x9662, 0x0036, 0x901e, 0x080c, 0x96d8, 0x003e, 0x60e3,\r
-+      0x0000, 0x080c, 0xd8b4, 0x080c, 0xd8cf, 0x9085, 0x0001, 0x080c,\r
-+      0x6ff9, 0x9006, 0x080c, 0x2b14, 0x2001, 0x1800, 0x2003, 0x0004,\r
-+      0x6027, 0x0008, 0x00ce, 0x0804, 0x3337, 0x81ff, 0x0120, 0x2009,\r
-+      0x0001, 0x0804, 0x3369, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007,\r
-+      0x0804, 0x3369, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x623e,\r
-+      0x1904, 0x336c, 0x9186, 0x007f, 0x0138, 0x080c, 0x6562, 0x0120,\r
-+      0x2009, 0x0009, 0x0804, 0x3369, 0x080c, 0x4879, 0x1120, 0x2009,\r
-+      0x0002, 0x0804, 0x3369, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,\r
-+      0x080c, 0xbcfd, 0x1120, 0x2009, 0x0003, 0x0804, 0x3369, 0x7007,\r
-+      0x0003, 0x701f, 0x52cc, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120,\r
-+      0x2009, 0x0004, 0x0804, 0x3369, 0xa8e0, 0xa866, 0xa834, 0x8007,\r
-+      0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,\r
-+      0xaf60, 0x0804, 0x48c5, 0xa898, 0x9086, 0x000d, 0x1904, 0x3369,\r
-+      0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x52f0, 0x0010,\r
-+      0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011,\r
-+      0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4,\r
-+      0x799a, 0xa9a8, 0x799e, 0x080c, 0x48b5, 0x2091, 0x4080, 0x2001,\r
-+      0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x7007, 0x0001, 0x2091,\r
-+      0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,\r
-+      0x00c6, 0x2061, 0x19cb, 0x7984, 0x6152, 0x614e, 0x6057, 0x0000,\r
-+      0x604b, 0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888, 0x6062,\r
-+      0x788c, 0x605e, 0x2001, 0x19d9, 0x2044, 0x2001, 0x19e0, 0xa076,\r
-+      0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b, 0x0000,\r
-+      0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3337, 0x0126, 0x2091,\r
-+      0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006, 0x080c,\r
-+      0xbb64, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000, 0x2004,\r
-+      0x905d, 0x0160, 0x080c, 0x5ceb, 0x080c, 0x9db1, 0x0110, 0xb817,\r
-+      0x0000, 0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085, 0x0001,\r
-+      0x0cc8, 0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e, 0x20a9,\r
-+      0x0800, 0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0180, 0x9186,\r
-+      0x007e, 0x0168, 0x9186, 0x007f, 0x0150, 0x9186, 0x0080, 0x0138,\r
-+      0x9186, 0x00ff, 0x0120, 0x0026, 0x2200, 0x0801, 0x002e, 0x001e,\r
-+      0x8108, 0x1f04, 0x5369, 0x015e, 0x012e, 0x0005, 0x2001, 0x1854,\r
-+      0x2004, 0x0005, 0x2001, 0x1873, 0x2004, 0x0005, 0x0006, 0x2001,\r
-+      0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, 0x2004,\r
-+      0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x0005,\r
-+      0x0016, 0x00e6, 0x2071, 0x1894, 0x7108, 0x910d, 0x710a, 0x00ee,\r
-+      0x001e, 0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, 0x336c, 0x810c,\r
-+      0x0016, 0x080c, 0x4879, 0x080c, 0x0ef3, 0x2100, 0x2238, 0x7d84,\r
-+      0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x48c2, 0x701f, 0x53c1,\r
-+      0x0005, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4,\r
-+      0x810c, 0x2061, 0x18ae, 0x2c44, 0xa770, 0xa074, 0x2071, 0x1894,\r
-+      0x080c, 0x48c5, 0x701f, 0x53d5, 0x0005, 0x2061, 0x18ae, 0x2c44,\r
-+      0x0016, 0x0026, 0xa270, 0xa174, 0x080c, 0x0efb, 0x002e, 0x001e,\r
-+      0x080c, 0x0fa8, 0x9006, 0xa802, 0xa806, 0x0804, 0x3337, 0x0126,\r
-+      0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6,\r
-+      0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044,\r
-+      0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x5590, 0x0068, 0xd08c,\r
-+      0x0118, 0x080c, 0x5499, 0x0040, 0xd094, 0x0118, 0x080c, 0x5469,\r
-+      0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce,\r
-+      0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016,\r
-+      0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006,\r
-+      0x7094, 0x9005, 0x000e, 0x0120, 0x7097, 0x0000, 0x708f, 0x0000,\r
-+      0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130,\r
-+      0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294, 0xff00,\r
-+      0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295,\r
-+      0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c,\r
-+      0x5c4d, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140, 0x6042,\r
-+      0x6043, 0x0000, 0x7083, 0x0000, 0x709f, 0x0001, 0x70c3, 0x0000,\r
-+      0x70db, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000, 0x7093, 0x0000,\r
-+      0x7087, 0x000f, 0x2009, 0x000f, 0x2011, 0x5b33, 0x080c, 0x80ca,\r
-+      0x0005, 0x2001, 0x1875, 0x2004, 0xd08c, 0x0110, 0x705b, 0xffff,\r
-+      0x7084, 0x9005, 0x1528, 0x2011, 0x5b33, 0x080c, 0x8038, 0x6040,\r
-+      0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044,\r
-+      0xd08c, 0x1168, 0x1f04, 0x547f, 0x6242, 0x7097, 0x0000, 0x6040,\r
-+      0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048, 0x6242,\r
-+      0x7097, 0x0000, 0x708b, 0x0000, 0x9006, 0x080c, 0x5cd6, 0x0000,\r
-+      0x0005, 0x7088, 0x908a, 0x0003, 0x1a0c, 0x0db4, 0x000b, 0x0005,\r
-+      0x54a3, 0x54f4, 0x558f, 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800,\r
-+      0x708b, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc,\r
-+      0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, 0x54b2,\r
-+      0x080c, 0x0db4, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a,\r
-+      0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020, 0x080c,\r
-+      0x5cb2, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1,\r
-+      0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1c0e, 0x20a9,\r
-+      0x0004, 0x4003, 0x080c, 0x9c3f, 0x20e1, 0x0001, 0x2099, 0x1c00,\r
-+      0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3,\r
-+      0x000c, 0x600f, 0x0000, 0x080c, 0x5b64, 0x00fe, 0x9006, 0x708e,\r
-+      0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x708c, 0x708f, 0x0000,\r
-+      0x9025, 0x0904, 0x556c, 0x6020, 0xd0b4, 0x1904, 0x556a, 0x719c,\r
-+      0x81ff, 0x0904, 0x5558, 0x9486, 0x000c, 0x1904, 0x5565, 0x9480,\r
-+      0x0018, 0x8004, 0x20a8, 0x080c, 0x5cab, 0x2011, 0x0260, 0x2019,\r
-+      0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04,\r
-+      0x5511, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f,\r
-+      0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708b, 0x0002, 0x7097,\r
-+      0x0002, 0x2009, 0x07d0, 0x2011, 0x5b3a, 0x080c, 0x80ca, 0x080c,\r
-+      0x5cb2, 0x04c0, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7930, 0x918e,\r
-+      0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff,\r
-+      0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5cab, 0x2011, 0x026e,\r
-+      0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, 0x0230,\r
-+      0x11a0, 0x8210, 0x8318, 0x1f04, 0x554c, 0x0078, 0x709f, 0x0000,\r
-+      0x080c, 0x5cab, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001,\r
-+      0x20a1, 0x1c00, 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008, 0x6043,\r
-+      0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100, 0x6042,\r
-+      0x6020, 0xd0b4, 0x1db8, 0x080c, 0x9c3f, 0x20e1, 0x0001, 0x2099,\r
-+      0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003,\r
-+      0x60c3, 0x000c, 0x2011, 0x19c2, 0x2013, 0x0000, 0x708f, 0x0000,\r
-+      0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x93a3, 0x08d8, 0x0005,\r
-+      0x7094, 0x908a, 0x001d, 0x1a0c, 0x0db4, 0x000b, 0x0005, 0x55c1,\r
-+      0x55d4, 0x55fd, 0x561d, 0x5643, 0x5672, 0x5698, 0x56d0, 0x56f6,\r
-+      0x5724, 0x575f, 0x5797, 0x57b5, 0x57e0, 0x5802, 0x581d, 0x5827,\r
-+      0x585b, 0x5881, 0x58b0, 0x58d6, 0x590e, 0x5952, 0x598f, 0x59b0,\r
-+      0x5a09, 0x5a2b, 0x5a59, 0x5a59, 0x00c6, 0x2061, 0x1800, 0x6003,\r
-+      0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce,\r
-+      0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061,\r
-+      0x0100, 0x6043, 0x0002, 0x7097, 0x0001, 0x2009, 0x07d0, 0x2011,\r
-+      0x5b3a, 0x080c, 0x80ca, 0x0005, 0x00f6, 0x708c, 0x9086, 0x0014,\r
-+      0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5cab, 0x2079,\r
-+      0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188,\r
-+      0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,\r
-+      0x2011, 0x5b3a, 0x080c, 0x8038, 0x7097, 0x0010, 0x080c, 0x5827,\r
-+      0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0003,\r
-+      0x6043, 0x0004, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x080c, 0x5c2f,\r
-+      0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008,\r
-+      0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x5612, 0x60c3,\r
-+      0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,\r
-+      0x0500, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086, 0x0014, 0x11b8,\r
-+      0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178,\r
-+      0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,\r
-+      0x1110, 0x70c3, 0x0001, 0x7097, 0x0004, 0x0029, 0x0010, 0x080c,\r
-+      0x5c87, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005, 0x080c, 0x5c2f,\r
-+      0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5cab,\r
-+      0x080c, 0x5c8e, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186,\r
-+      0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x0168, 0x080c,\r
-+      0x5c64, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,\r
-+      0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64,\r
-+      0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a,\r
-+      0x080c, 0x8038, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cab, 0x2079,\r
-+      0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160,\r
-+      0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,\r
-+      0x7097, 0x0006, 0x0029, 0x0010, 0x080c, 0x5c87, 0x00fe, 0x0005,\r
-+      0x00f6, 0x7097, 0x0007, 0x080c, 0x5c2f, 0x2079, 0x0240, 0x7833,\r
-+      0x1104, 0x7837, 0x0000, 0x080c, 0x5cab, 0x080c, 0x5c8e, 0x11b8,\r
-+      0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180,\r
-+      0x3138, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c,\r
-+      0x5ae7, 0x0180, 0x080c, 0x4c98, 0x0110, 0x080c, 0x26cc, 0x20a9,\r
-+      0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,\r
-+      0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005,\r
-+      0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a, 0x080c, 0x8038,\r
-+      0x9086, 0x0014, 0x11b8, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30,\r
-+      0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,\r
-+      0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0008,\r
-+      0x0029, 0x0010, 0x080c, 0x5c87, 0x00fe, 0x0005, 0x00f6, 0x7097,\r
-+      0x0009, 0x080c, 0x5c2f, 0x2079, 0x0240, 0x7833, 0x1105, 0x7837,\r
-+      0x0100, 0x080c, 0x5c8e, 0x1150, 0x7080, 0x9005, 0x1138, 0x080c,\r
-+      0x5a5a, 0x1188, 0x9085, 0x0001, 0x080c, 0x26cc, 0x20a9, 0x0008,\r
-+      0x080c, 0x5cab, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,\r
-+      0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x0010,\r
-+      0x080c, 0x55b4, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x05a8,\r
-+      0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086, 0x0014, 0x1560, 0x080c,\r
-+      0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834,\r
-+      0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc,\r
-+      0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x000a,\r
-+      0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c0,\r
-+      0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0000, 0x7097, 0x000e,\r
-+      0x080c, 0x5802, 0x0010, 0x080c, 0x5c87, 0x00fe, 0x0005, 0x00f6,\r
-+      0x7097, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001, 0x22a0, 0x20a9,\r
-+      0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5c2f, 0x2079, 0x0240,\r
-+      0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5c8e, 0x0118, 0x2013,\r
-+      0x0000, 0x0020, 0x705c, 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040,\r
-+      0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210, 0x8108, 0x9186,\r
-+      0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04,\r
-+      0x5784, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6,\r
-+      0x708c, 0x9005, 0x01c0, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086,\r
-+      0x0084, 0x1178, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296,\r
-+      0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x7097, 0x000c, 0x0029,\r
-+      0x0010, 0x080c, 0x5c87, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000d,\r
-+      0x080c, 0x5c2f, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837, 0x0000,\r
-+      0x080c, 0x5cab, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009, 0x024e,\r
-+      0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000,\r
-+      0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260,\r
-+      0x1f04, 0x57c8, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe, 0x0005,\r
-+      0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b3a, 0x080c, 0x8038,\r
-+      0x9086, 0x0084, 0x1198, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30,\r
-+      0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001,\r
-+      0x080c, 0x5c01, 0x7097, 0x000e, 0x0029, 0x0010, 0x080c, 0x5c87,\r
-+      0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x5cd6, 0x7097, 0x000f,\r
-+      0x708f, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5,\r
-+      0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0,\r
-+      0x2011, 0x5b3a, 0x080c, 0x802c, 0x0005, 0x708c, 0x9005, 0x0130,\r
-+      0x2011, 0x5b3a, 0x080c, 0x8038, 0x7097, 0x0000, 0x0005, 0x7097,\r
-+      0x0011, 0x080c, 0x9c3f, 0x080c, 0x5cab, 0x20e1, 0x0000, 0x2099,\r
-+      0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c, 0x9480, 0x0018,\r
-+      0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c,\r
-+      0x5c8e, 0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e, 0x707c, 0x9084,\r
-+      0x00ff, 0x0160, 0x080c, 0x2663, 0x9186, 0x007e, 0x0138, 0x9186,\r
-+      0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x60c3, 0x0014,\r
-+      0x080c, 0x5b64, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011,\r
-+      0x5b3a, 0x080c, 0x8038, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cab,\r
-+      0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005,\r
-+      0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,\r
-+      0x0001, 0x7097, 0x0012, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe,\r
-+      0x0005, 0x00f6, 0x7097, 0x0013, 0x080c, 0x5c3d, 0x2079, 0x0240,\r
-+      0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5cab, 0x080c, 0x5c8e,\r
-+      0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, 0x0138,\r
-+      0x2011, 0x0008, 0x080c, 0x5ae7, 0x0168, 0x080c, 0x5c64, 0x20a9,\r
-+      0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,\r
-+      0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005,\r
-+      0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a, 0x080c, 0x8038,\r
-+      0x9086, 0x0014, 0x11b8, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30,\r
-+      0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,\r
-+      0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0014,\r
-+      0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097,\r
-+      0x0015, 0x080c, 0x5c3d, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837,\r
-+      0x0000, 0x080c, 0x5cab, 0x080c, 0x5c8e, 0x11b8, 0x7080, 0x9005,\r
-+      0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x3138, 0x200d,\r
-+      0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x0180,\r
-+      0x080c, 0x4c98, 0x0110, 0x080c, 0x26cc, 0x20a9, 0x0008, 0x20e1,\r
-+      0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,\r
-+      0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6, 0x708c,\r
-+      0x9005, 0x05f0, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086, 0x0014,\r
-+      0x15a8, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105,\r
-+      0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1168,\r
-+      0x9085, 0x0001, 0x080c, 0x5cd6, 0x7a38, 0xd2fc, 0x0128, 0x70c0,\r
-+      0x9005, 0x1110, 0x70c3, 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38,\r
-+      0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x9085,\r
-+      0x0001, 0x080c, 0x5cd6, 0x7093, 0x0000, 0x7a38, 0xd2f4, 0x0110,\r
-+      0x70db, 0x0008, 0x7097, 0x0016, 0x0029, 0x0010, 0x708f, 0x0000,\r
-+      0x00fe, 0x0005, 0x080c, 0x9c3f, 0x080c, 0x5cab, 0x20e1, 0x0000,\r
-+      0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e,\r
-+      0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011, 0x024d,\r
-+      0x2012, 0x2011, 0x026e, 0x7097, 0x0017, 0x080c, 0x5c8e, 0x1150,\r
-+      0x7080, 0x9005, 0x1138, 0x080c, 0x5a5a, 0x1188, 0x9085, 0x0001,\r
-+      0x080c, 0x26cc, 0x20a9, 0x0008, 0x080c, 0x5cab, 0x20e1, 0x0000,\r
-+      0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,\r
-+      0x0014, 0x080c, 0x5b64, 0x0010, 0x080c, 0x55b4, 0x0005, 0x00f6,\r
-+      0x708c, 0x9005, 0x01d8, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086,\r
-+      0x0084, 0x1190, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296,\r
-+      0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c, 0x5cd6,\r
-+      0x7097, 0x0018, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005,\r
-+      0x00f6, 0x7097, 0x0019, 0x080c, 0x5c3d, 0x2079, 0x0240, 0x7833,\r
-+      0x1106, 0x7837, 0x0000, 0x080c, 0x5cab, 0x2009, 0x026e, 0x2039,\r
-+      0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186, 0x0280,\r
-+      0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04, 0x59c3,\r
-+      0x2039, 0x1c0e, 0x080c, 0x5c8e, 0x11e8, 0x2728, 0x2514, 0x8207,\r
-+      0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205,\r
-+      0x202a, 0x705c, 0x2310, 0x8214, 0x92a0, 0x1c0e, 0x2414, 0x938c,\r
-+      0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294, 0x00ff, 0x8007,\r
-+      0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, 0x270e, 0x8738,\r
-+      0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009,\r
-+      0x0240, 0x1f04, 0x59f6, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe,\r
-+      0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b3a, 0x080c,\r
-+      0x8038, 0x9086, 0x0084, 0x1198, 0x080c, 0x5cab, 0x2079, 0x0260,\r
-+      0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093,\r
-+      0x0001, 0x080c, 0x5c01, 0x7097, 0x001a, 0x0029, 0x0010, 0x708f,\r
-+      0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x5cd6, 0x7097,\r
-+      0x001b, 0x080c, 0x9c3f, 0x080c, 0x5cab, 0x2011, 0x0260, 0x2009,\r
-+      0x0240, 0x748c, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8,\r
-+      0x8004, 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150,\r
-+      0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816,\r
-+      0x2011, 0x0260, 0x1f04, 0x5a42, 0x60c3, 0x0084, 0x080c, 0x5b64,\r
-+      0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1854, 0x252c, 0x20a9,\r
-+      0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0, 0x080c, 0x5cab,\r
-+      0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011,\r
-+      0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6,\r
-+      0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04,\r
-+      0x5a74, 0x0804, 0x5ae3, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6,\r
-+      0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5ae3, 0x918d,\r
-+      0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019,\r
-+      0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240,\r
-+      0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5a9a, 0x04d8,\r
-+      0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5aac, 0x2328,\r
-+      0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200,\r
-+      0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5abb, 0x755a,\r
-+      0x95c8, 0x3138, 0x292d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536,\r
-+      0x0016, 0x2508, 0x080c, 0x26ac, 0x001e, 0x60e7, 0x0000, 0x65ea,\r
-+      0x2018, 0x2304, 0x9405, 0x201a, 0x7083, 0x0001, 0x20e9, 0x0000,\r
-+      0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9, 0x0008, 0x4003,\r
-+      0x9085, 0x0001, 0x0008, 0x9006, 0x009e, 0x008e, 0x0005, 0x0156,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099,\r
-+      0x026e, 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0, 0x4003, 0x014e,\r
-+      0x013e, 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026, 0x2001, 0x0007,\r
-+      0x939a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff,\r
-+      0x0120, 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff,\r
-+      0x0118, 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029, 0x026e, 0x9528,\r
-+      0x2504, 0x942c, 0x11b8, 0x9405, 0x203a, 0x715a, 0x91a0, 0x3138,\r
-+      0x242d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, 0x2508,\r
-+      0x080c, 0x26ac, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7083, 0x0001,\r
-+      0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7087, 0x0000,\r
-+      0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140,\r
-+      0x080c, 0x5bf0, 0x080c, 0x93ac, 0x7004, 0x9084, 0x4000, 0x0110,\r
-+      0x080c, 0x2b24, 0x0126, 0x2091, 0x8000, 0x2071, 0x1825, 0x2073,\r
-+      0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x5c4d,\r
-+      0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e,\r
-+      0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x29ca, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011,\r
-+      0x19c2, 0x2013, 0x0000, 0x708f, 0x0000, 0x012e, 0x60a3, 0x0056,\r
-+      0x60a7, 0x9575, 0x080c, 0x93a3, 0x6144, 0xd184, 0x0120, 0x7194,\r
-+      0x918d, 0x2000, 0x0018, 0x7188, 0x918d, 0x1000, 0x2011, 0x196a,\r
-+      0x2112, 0x2009, 0x07d0, 0x2011, 0x5b3a, 0x080c, 0x80ca, 0x0005,\r
-+      0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9db8,\r
-+      0x2009, 0x00f7, 0x080c, 0x5c4d, 0x2061, 0x19cb, 0x900e, 0x611a,\r
-+      0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001, 0x2061,\r
-+      0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x196a, 0x200b,\r
-+      0x0000, 0x2009, 0x002d, 0x2011, 0x5bbc, 0x080c, 0x802c, 0x012e,\r
-+      0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091,\r
-+      0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x93ac, 0x2071, 0x0140,\r
-+      0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2b24, 0x080c, 0x6fba,\r
-+      0x0188, 0x080c, 0x6fd5, 0x1170, 0x080c, 0x72a0, 0x0016, 0x080c,\r
-+      0x277b, 0x2001, 0x193e, 0x2102, 0x001e, 0x080c, 0x729b, 0x080c,\r
-+      0x6ee4, 0x0050, 0x2009, 0x0001, 0x080c, 0x2a63, 0x2001, 0x0001,\r
-+      0x080c, 0x260c, 0x080c, 0x5b90, 0x012e, 0x000e, 0x00ee, 0x0005,\r
-+      0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011,\r
-+      0x8017, 0x2001, 0x196a, 0x201c, 0x080c, 0x48d9, 0x003e, 0x002e,\r
-+      0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x080c,\r
-+      0x5cab, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020,\r
-+      0x080c, 0x5ca5, 0x2099, 0x0260, 0x20a1, 0x1c92, 0x0051, 0x20a9,\r
-+      0x000e, 0x080c, 0x5ca8, 0x2099, 0x0260, 0x20a1, 0x1cb2, 0x0009,\r
-+      0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007, 0x2012,\r
-+      0x8108, 0x8210, 0x1f04, 0x5c25, 0x002e, 0x001e, 0x0005, 0x080c,\r
-+      0x9c3f, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1,\r
-+      0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0x9c3f, 0x080c,\r
-+      0x5cab, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1,\r
-+      0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061,\r
-+      0x0100, 0x810f, 0x2001, 0x1833, 0x2004, 0x9005, 0x1138, 0x2001,\r
-+      0x1817, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7,\r
-+      0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c, 0x655e,\r
-+      0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xd52a, 0x2001,\r
-+      0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e, 0x080c,\r
-+      0x2fa5, 0x080c, 0xc212, 0x0140, 0x0036, 0x2019, 0xffff, 0x2021,\r
-+      0x0007, 0x080c, 0x4a76, 0x003e, 0x004e, 0x001e, 0x0005, 0x080c,\r
-+      0x5b90, 0x7097, 0x0000, 0x708f, 0x0000, 0x0005, 0x0006, 0x2001,\r
-+      0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006, 0x0016,\r
-+      0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0x918d, 0x0006,\r
-+      0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009, 0x0001, 0x0020,\r
-+      0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084, 0xffc0, 0x910d,\r
-+      0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6, 0x9006, 0x20a9,\r
-+      0x0080, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004, 0x2079, 0x1c00,\r
-+      0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138,\r
-+      0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e, 0x00fe,\r
-+      0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001, 0x1977,\r
-+      0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005, 0x0156,\r
-+      0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04,\r
-+      0x5ce5, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146,\r
-+      0x2069, 0x1853, 0x9006, 0xb802, 0xb8be, 0xb807, 0x0707, 0xb80a,\r
-+      0xb80e, 0xb812, 0x9198, 0x3138, 0x231d, 0x939c, 0x00ff, 0xbb16,\r
-+      0x0016, 0x0026, 0xb8b2, 0x080c, 0x9db1, 0x1120, 0x9192, 0x007e,\r
-+      0x1208, 0xbbb2, 0x20a9, 0x0004, 0xb8b4, 0x20e8, 0xb9b8, 0x9198,\r
-+      0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198, 0x000a,\r
-+      0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb84e, 0xb852,\r
-+      0xb856, 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100,\r
-+      0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896,\r
-+      0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4, 0x904d, 0x0110,\r
-+      0x080c, 0x101d, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a, 0x6810,\r
-+      0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, 0x00ff, 0xb842, 0x014e,\r
-+      0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091, 0x8000,\r
-+      0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x5dbb,\r
-+      0x9182, 0x0800, 0x1a04, 0x5dbf, 0x2001, 0x180c, 0x2004, 0x9084,\r
-+      0x0003, 0x1904, 0x5dc5, 0x9188, 0x1000, 0x2104, 0x905d, 0x0518,\r
-+      0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508, 0xb8a4, 0x900d,\r
-+      0x1904, 0x5dd7, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900, 0xb852,\r
-+      0xb84e, 0x080c, 0x840e, 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150,\r
-+      0x2900, 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001,\r
-+      0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082,\r
-+      0x0006, 0x1290, 0x080c, 0x9db1, 0x1160, 0xb8a0, 0x9084, 0xff80,\r
-+      0x1140, 0xb900, 0xd1fc, 0x0990, 0x2001, 0x0029, 0x2009, 0x1000,\r
-+      0x0408, 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c,\r
-+      0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004,\r
-+      0x0040, 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000,\r
-+      0x0048, 0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001,\r
-+      0x0029, 0x900e, 0x9005, 0x012e, 0x0005, 0x2001, 0x180c, 0x2004,\r
-+      0xd084, 0x19d0, 0x9188, 0x1000, 0x2104, 0x905d, 0x09a8, 0x080c,\r
-+      0x6562, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x5d6e, 0x080c,\r
-+      0x63da, 0x0904, 0x5d87, 0x0804, 0x5d72, 0x00b6, 0x00e6, 0x0126,\r
-+      0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x5e58, 0x9188,\r
-+      0x1000, 0x2104, 0x905d, 0x0904, 0x5e30, 0xb8a0, 0x9086, 0x007f,\r
-+      0x0178, 0x080c, 0x656a, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e,\r
-+      0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x6562, 0x1598,\r
-+      0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026,\r
-+      0x2010, 0x080c, 0xbb05, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804,\r
-+      0x5e5a, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804,\r
-+      0x5e5a, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c,\r
-+      0x9ddc, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff,\r
-+      0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0x9eac, 0x9006, 0x0458,\r
-+      0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0x9db1,\r
-+      0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900,\r
-+      0x2001, 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090,\r
-+      0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050,\r
-+      0xd184, 0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010,\r
-+      0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001,\r
-+      0x002c, 0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000, 0xa8e0,\r
-+      0x9005, 0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8, 0x9005,\r
-+      0x1518, 0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974, 0x2079, 0x1800,\r
-+      0x9182, 0x0800, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130, 0xaa98,\r
-+      0xab94, 0xa878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c, 0x0118,\r
-+      0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010,\r
-+      0x2001, 0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018,\r
-+      0x2001, 0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e, 0x00be,\r
-+      0x00fe, 0x0005, 0x5eef, 0x5eaa, 0x5ec1, 0x5eef, 0x5eef, 0x5eef,\r
-+      0x5eef, 0x5eef, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x61de,\r
-+      0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x5ef7, 0xb814, 0x9206,\r
-+      0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x4793, 0x0150,\r
-+      0x04b0, 0x080c, 0x623e, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814,\r
-+      0x9206, 0x1568, 0x080c, 0x9ddc, 0x0530, 0x2b00, 0x6012, 0x080c,\r
-+      0xbf8c, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878,\r
-+      0x9086, 0x0001, 0x1170, 0x080c, 0x2fda, 0x9006, 0x080c, 0x617b,\r
-+      0x2001, 0x0002, 0x080c, 0x618f, 0x2001, 0x0200, 0xb86e, 0xb893,\r
-+      0x0002, 0x2009, 0x0003, 0x080c, 0x9eac, 0x9006, 0x0068, 0x2001,\r
-+      0x0001, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001,\r
-+      0x0028, 0x900e, 0x9005, 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005,\r
-+      0x00b6, 0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa894, 0x90c6,\r
-+      0x0015, 0x0904, 0x60cc, 0x90c6, 0x0056, 0x0904, 0x60d0, 0x90c6,\r
-+      0x0066, 0x0904, 0x60d4, 0x90c6, 0x0067, 0x0904, 0x60d8, 0x90c6,\r
-+      0x0068, 0x0904, 0x60dc, 0x90c6, 0x0071, 0x0904, 0x60e0, 0x90c6,\r
-+      0x0074, 0x0904, 0x60e4, 0x90c6, 0x007c, 0x0904, 0x60e8, 0x90c6,\r
-+      0x007e, 0x0904, 0x60ec, 0x90c6, 0x0037, 0x0904, 0x60f0, 0x9016,\r
-+      0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x60c7, 0x9182,\r
-+      0x0800, 0x1a04, 0x60c7, 0x080c, 0x623e, 0x1198, 0xb804, 0x9084,\r
-+      0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148,\r
-+      0x080c, 0x9db1, 0x1904, 0x60b0, 0xb8a0, 0x9084, 0xff80, 0x1904,\r
-+      0x60b0, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904,\r
-+      0x6010, 0x90c6, 0x0064, 0x0904, 0x6039, 0x2008, 0x0804, 0x5fd3,\r
-+      0xa998, 0xa8b0, 0x2040, 0x080c, 0x9db1, 0x1120, 0x9182, 0x007f,\r
-+      0x0a04, 0x5fd3, 0x9186, 0x00ff, 0x0904, 0x5fd3, 0x9182, 0x0800,\r
-+      0x1a04, 0x5fd3, 0xaaa0, 0xab9c, 0x7878, 0x9306, 0x1188, 0x787c,\r
-+      0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x5fd3,\r
-+      0x99cc, 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x5fd3,\r
-+      0x080c, 0x4793, 0x0904, 0x5fdc, 0x900e, 0x9016, 0x90c6, 0x4000,\r
-+      0x1558, 0x0006, 0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc,\r
-+      0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080,\r
-+      0x0031, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098,\r
-+      0x080c, 0x0f68, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080,\r
-+      0x0035, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098,\r
-+      0x080c, 0x0f68, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408,\r
-+      0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6,\r
-+      0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005,\r
-+      0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e,\r
-+      0x2001, 0x0030, 0x900e, 0x0470, 0x080c, 0x9ddc, 0x1130, 0x2001,\r
-+      0x4005, 0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012, 0x080c,\r
-+      0xbf8c, 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108,\r
-+      0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2fda, 0x012e,\r
-+      0x9006, 0x080c, 0x617b, 0x2001, 0x0002, 0x080c, 0x618f, 0x2009,\r
-+      0x0002, 0x080c, 0x9eac, 0xa8b0, 0xd094, 0x0118, 0xb8bc, 0xc08d,\r
-+      0xb8be, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005,\r
-+      0x080c, 0x539a, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0,\r
-+      0x080c, 0x623e, 0x1904, 0x5fce, 0x9186, 0x007f, 0x0130, 0x080c,\r
-+      0x6562, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x0feb,\r
-+      0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806,\r
-+      0x080c, 0xbcfd, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804,\r
-+      0x5fd5, 0xa998, 0xaeb0, 0x080c, 0x623e, 0x1904, 0x5fce, 0x0096,\r
-+      0x080c, 0x0feb, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x608d,\r
-+      0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b, 0xb8b4,\r
-+      0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002,\r
-+      0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xbbb8,\r
-+      0x9398, 0x0006, 0x2398, 0x080c, 0x0f68, 0x009e, 0xa87b, 0x0000,\r
-+      0xa883, 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x5386,\r
-+      0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118,\r
-+      0xa89b, 0x000c, 0x00b0, 0x080c, 0x6562, 0x0118, 0xa89b, 0x0009,\r
-+      0x0080, 0x080c, 0x539a, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c,\r
-+      0xbce0, 0x1904, 0x6009, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804,\r
-+      0x5fd5, 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006,\r
-+      0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009,\r
-+      0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041,\r
-+      0x122f, 0x080c, 0xa334, 0x1904, 0x6009, 0x2009, 0x0002, 0x08e8,\r
-+      0x2001, 0x0028, 0x900e, 0x0804, 0x600a, 0x2009, 0x180c, 0x210c,\r
-+      0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001,\r
-+      0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x600a, 0x2001,\r
-+      0x0029, 0x900e, 0x0804, 0x600a, 0x080c, 0x355c, 0x0804, 0x600b,\r
-+      0x080c, 0x50c3, 0x0804, 0x600b, 0x080c, 0x432c, 0x0804, 0x600b,\r
-+      0x080c, 0x43a5, 0x0804, 0x600b, 0x080c, 0x4401, 0x0804, 0x600b,\r
-+      0x080c, 0x484f, 0x0804, 0x600b, 0x080c, 0x4afb, 0x0804, 0x600b,\r
-+      0x080c, 0x4d2e, 0x0804, 0x600b, 0x080c, 0x4f27, 0x0804, 0x600b,\r
-+      0x080c, 0x376c, 0x0804, 0x600b, 0x00b6, 0xa974, 0xae78, 0x9684,\r
-+      0x3fff, 0x9082, 0x4000, 0x1618, 0x9182, 0x0800, 0x1268, 0x9188,\r
-+      0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x6562, 0x1148, 0x00e9,\r
-+      0x080c, 0x6369, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, 0x0090,\r
-+      0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001, 0x0029,\r
-+      0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001,\r
-+      0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000,\r
-+      0xb850, 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802, 0x009e,\r
-+      0xa803, 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852, 0xb84e,\r
-+      0xa803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000, 0xb84c, 0x9005,\r
-+      0x0170, 0x00e6, 0x2071, 0x19b8, 0x7004, 0x9086, 0x0002, 0x0168,\r
-+      0x00ee, 0xb84c, 0xa802, 0x2900, 0xb84e, 0x012e, 0x0005, 0x2900,\r
-+      0xb852, 0xb84e, 0xa803, 0x0000, 0x0cc0, 0x701c, 0x9b06, 0x1d80,\r
-+      0xb84c, 0x00a6, 0x2050, 0xb000, 0xa802, 0x2900, 0xb002, 0x00ae,\r
-+      0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0xb84c, 0x904d,\r
-+      0x0130, 0xa800, 0x9005, 0x1108, 0xb852, 0xb84e, 0x9905, 0x012e,\r
-+      0x0005, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108, 0xb852,\r
-+      0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026, 0x2091,\r
-+      0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110, 0xc285, 0x0008,\r
-+      0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6,\r
-+      0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006,\r
-+      0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c, 0x655e,\r
-+      0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011,\r
-+      0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, 0x9086,\r
-+      0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0db4, 0x000e, 0x00ce,\r
-+      0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000,\r
-+      0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, 0xb89c,\r
-+      0xd0a4, 0x0150, 0x080c, 0x655a, 0x1138, 0x9284, 0x00ff, 0x9086,\r
-+      0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007,\r
-+      0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, 0x0800,\r
-+      0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, 0x1000,\r
-+      0x2204, 0x905d, 0x1180, 0x0096, 0x080c, 0x0feb, 0x2958, 0x009e,\r
-+      0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860, 0xb8b6, 0x9006,\r
-+      0xb8a6, 0x080c, 0x5ceb, 0x9006, 0x0010, 0x9085, 0x0001, 0x002e,\r
-+      0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, 0x0026,\r
-+      0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0458, 0x00d6, 0x9190,\r
-+      0x1000, 0x2204, 0x905d, 0x0518, 0x2013, 0x0000, 0xb8a4, 0x904d,\r
-+      0x0110, 0x080c, 0x101d, 0x00d6, 0x00c6, 0xb8ac, 0x2060, 0x8cff,\r
-+      0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xbb17, 0x0110,\r
-+      0x080c, 0x0f9d, 0x080c, 0x9e32, 0x00ce, 0x0c88, 0x00ce, 0x00de,\r
-+      0x2b48, 0xb8b8, 0xb85e, 0xb8b4, 0xb862, 0x080c, 0x102d, 0x00de,\r
-+      0x9006, 0x002e, 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182,\r
-+      0x0800, 0x0218, 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104,\r
-+      0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136,\r
-+      0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c,\r
-+      0x6fb2, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0x9db1,\r
-+      0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x1953,\r
-+      0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e,\r
-+      0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001,\r
-+      0x6886, 0x2069, 0x1800, 0x68b2, 0x7040, 0xb85e, 0x7048, 0xb862,\r
-+      0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8b4, 0x20e8,\r
-+      0xb8b8, 0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099,\r
-+      0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069,\r
-+      0x0200, 0x6817, 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048,\r
-+      0xb872, 0x7050, 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0,\r
-+      0x9086, 0x007e, 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218,\r
-+      0x2009, 0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007,\r
-+      0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182,\r
-+      0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218,\r
-+      0x2009, 0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003,\r
-+      0x0010, 0x2009, 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de,\r
-+      0x0005, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896,\r
-+      0x703c, 0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbbc, 0xc384, 0xba00,\r
-+      0x2009, 0x1873, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad,\r
-+      0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc,\r
-+      0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbbe,\r
-+      0x003e, 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096, 0x0126, 0x2091,\r
-+      0x8000, 0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0, 0xaa04,\r
-+      0x9282, 0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x8906,\r
-+      0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9080,\r
-+      0x0004, 0x2098, 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002, 0x9086,\r
-+      0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0db4, 0x3c00, 0x20e8,\r
-+      0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce,\r
-+      0x014e, 0x013e, 0x0060, 0x080c, 0x0feb, 0x0170, 0x2900, 0xb8a6,\r
-+      0xa803, 0x0000, 0x080c, 0x63fa, 0xa807, 0x0001, 0xae12, 0x9085,\r
-+      0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091,\r
-+      0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150,\r
-+      0x080c, 0x6409, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001,\r
-+      0xa806, 0x0020, 0x080c, 0x101d, 0xb8a7, 0x0000, 0x009e, 0x012e,\r
-+      0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x840e, 0x012e, 0x0005,\r
-+      0x901e, 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091, 0x8000,\r
-+      0xb84c, 0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500, 0x83ff,\r
-+      0x0120, 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118,\r
-+      0xa870, 0x9506, 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70, 0x080c,\r
-+      0x97b0, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6,\r
-+      0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, 0x012e,\r
-+      0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c,\r
-+      0x645e, 0x0128, 0x080c, 0xbbd4, 0x0010, 0x9085, 0x0001, 0x0005,\r
-+      0x080c, 0x645e, 0x0128, 0x080c, 0xbb79, 0x0010, 0x9085, 0x0001,\r
-+      0x0005, 0x080c, 0x645e, 0x0128, 0x080c, 0xbbd1, 0x0010, 0x9085,\r
-+      0x0001, 0x0005, 0x080c, 0x645e, 0x0128, 0x080c, 0xbb98, 0x0010,\r
-+      0x9085, 0x0001, 0x0005, 0x080c, 0x645e, 0x0128, 0x080c, 0xbc15,\r
-+      0x0010, 0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085,\r
-+      0x0001, 0x0005, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e,\r
-+      0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080,\r
-+      0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606,\r
-+      0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006, 0x01ce,\r
-+      0x013e, 0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c, 0x9080,\r
-+      0x0004, 0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104, 0x01de,\r
-+      0x014e, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e,\r
-+      0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004,\r
-+      0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128,\r
-+      0x8109, 0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6, 0x3300,\r
-+      0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004, 0x01de,\r
-+      0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126, 0x2091,\r
-+      0x8000, 0xb8a4, 0x904d, 0x1128, 0x080c, 0x0feb, 0x0168, 0x2900,\r
-+      0xb8a6, 0x080c, 0x63fa, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085,\r
-+      0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126,\r
-+      0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c,\r
-+      0x101d, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4,\r
-+      0x0005, 0x00b6, 0x00f6, 0x080c, 0x6fb2, 0x01b0, 0x71c0, 0x81ff,\r
-+      0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000,\r
-+      0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,\r
-+      0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1853, 0x7804, 0x00d0,\r
-+      0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x623e, 0x1168,\r
-+      0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086,\r
-+      0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04,\r
-+      0x6484, 0x015e, 0x080c, 0x6520, 0x0120, 0x2001, 0x1956, 0x200c,\r
-+      0x0030, 0x2079, 0x1853, 0x7804, 0x0030, 0x2009, 0x07d0, 0x2011,\r
-+      0x64ae, 0x080c, 0x80ca, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011,\r
-+      0x64ae, 0x080c, 0x8038, 0x080c, 0x6520, 0x01d8, 0x2001, 0x107e,\r
-+      0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x655e, 0x0130,\r
-+      0x2009, 0x07d0, 0x2011, 0x64ae, 0x080c, 0x80ca, 0x00e6, 0x2071,\r
-+      0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2dbb, 0x00ee,\r
-+      0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c,\r
-+      0x623e, 0x1538, 0xb800, 0xd0ec, 0x0520, 0x0046, 0xbaa0, 0x2220,\r
-+      0x9006, 0x2009, 0x0029, 0x080c, 0xd52a, 0xb800, 0xc0e5, 0xc0ec,\r
-+      0xb802, 0x080c, 0x655a, 0x2001, 0x0707, 0x1128, 0xb804, 0x9084,\r
-+      0x00ff, 0x9085, 0x0700, 0xb806, 0x2019, 0x0029, 0x080c, 0x8571,\r
-+      0x0076, 0x903e, 0x080c, 0x8469, 0x900e, 0x080c, 0xd29b, 0x007e,\r
-+      0x004e, 0x001e, 0x8108, 0x1f04, 0x64d6, 0x00ce, 0x015e, 0x00be,\r
-+      0x0005, 0x00b6, 0x6010, 0x2058, 0xb800, 0xc0ec, 0xb802, 0x00be,\r
-+      0x0005, 0x7810, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ac, 0x0005,\r
-+      0x6010, 0x00b6, 0x905d, 0x0108, 0xb800, 0x00be, 0xd0bc, 0x0005,\r
-+      0x00b6, 0x00f6, 0x2001, 0x107e, 0x2004, 0x905d, 0x0110, 0xb800,\r
-+      0xd0ec, 0x00fe, 0x00be, 0x0005, 0x0126, 0x0026, 0x2091, 0x8000,\r
-+      0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204, 0x9b06, 0x190c, 0x0db4,\r
-+      0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02,\r
-+      0x002e, 0x012e, 0x0005, 0x2011, 0x1836, 0x2204, 0xd0cc, 0x0138,\r
-+      0x2001, 0x1954, 0x200c, 0x2011, 0x6550, 0x080c, 0x80ca, 0x0005,\r
-+      0x2011, 0x6550, 0x080c, 0x8038, 0x2011, 0x1836, 0x2204, 0xc0cc,\r
-+      0x2012, 0x0005, 0x080c, 0x5386, 0xd0ac, 0x0005, 0x080c, 0x5386,\r
-+      0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e, 0x0006,\r
-+      0x001e, 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, 0x8007, 0x908e,\r
-+      0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xc212, 0x0158,\r
-+      0x70d8, 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, 0x2004, 0x905d,\r
-+      0x0110, 0xb8bc, 0xd094, 0x00fe, 0x00be, 0x0005, 0x0006, 0x0016,\r
-+      0x0036, 0x0046, 0x0076, 0x00b6, 0x2001, 0x1817, 0x203c, 0x9780,\r
-+      0x3138, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, 0x2018, 0x2008,\r
-+      0x9284, 0x8000, 0x0110, 0x2019, 0x0001, 0x9294, 0x7fff, 0x2100,\r
-+      0x9706, 0x0190, 0x91a0, 0x1000, 0x2404, 0x905d, 0x0168, 0xb804,\r
-+      0x9084, 0x00ff, 0x9086, 0x0006, 0x1138, 0x83ff, 0x0118, 0xb89c,\r
-+      0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108, 0x83ff, 0x0120, 0x9182,\r
-+      0x0800, 0x0e28, 0x0068, 0x9182, 0x007e, 0x0e08, 0x0048, 0x00be,\r
-+      0x007e, 0x004e, 0x003e, 0x001e, 0x9085, 0x0001, 0x000e, 0x0005,\r
-+      0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9006, 0x000e, 0x0005,\r
-+      0x0046, 0x0056, 0x0076, 0x00b6, 0x2100, 0x9084, 0x7fff, 0x9080,\r
-+      0x1000, 0x2004, 0x905d, 0x0130, 0xb804, 0x9084, 0x00ff, 0x9086,\r
-+      0x0006, 0x0550, 0x9184, 0x8000, 0x0580, 0x2001, 0x1817, 0x203c,\r
-+      0x9780, 0x3138, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, 0x2020,\r
-+      0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000, 0x2504, 0x905d, 0x0178,\r
-+      0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1148, 0xb89c, 0xd0a4,\r
-+      0x0130, 0xb814, 0x9206, 0x1118, 0xb810, 0x9306, 0x0128, 0x8420,\r
-+      0x9482, 0x0800, 0x0e28, 0x0048, 0x918c, 0x7fff, 0x00be, 0x007e,\r
-+      0x005e, 0x004e, 0x9085, 0x0001, 0x0005, 0x918c, 0x7fff, 0x00be,\r
-+      0x007e, 0x005e, 0x004e, 0x9006, 0x0005, 0x2071, 0x1906, 0x7003,\r
-+      0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, 0x701e,\r
-+      0x700a, 0x7046, 0x2001, 0x1919, 0x2003, 0x0000, 0x0005, 0x0016,\r
-+      0x00e6, 0x2071, 0x191a, 0x900e, 0x710a, 0x080c, 0x5386, 0xd0fc,\r
-+      0x1140, 0x080c, 0x5386, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102,\r
-+      0x0400, 0x2001, 0x1873, 0x200c, 0x9184, 0x0007, 0x9006, 0x0002,\r
-+      0x6639, 0x6639, 0x6639, 0x6639, 0x6639, 0x6650, 0x665e, 0x6639,\r
-+      0x7003, 0x0003, 0x2009, 0x1874, 0x210c, 0x9184, 0xff00, 0x8007,\r
-+      0x9005, 0x1110, 0x2001, 0x0002, 0x7006, 0x0018, 0x7003, 0x0005,\r
-+      0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0050, 0x684c,\r
-+      0x9005, 0x1150, 0x00e6, 0x2071, 0x1906, 0x7028, 0xc085, 0x702a,\r
-+      0x00ee, 0x9085, 0x0001, 0x0488, 0x6844, 0x9005, 0x0158, 0x080c,\r
-+      0x7308, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101, 0x7006, 0x9006,\r
-+      0x7012, 0x7016, 0x6860, 0x7002, 0x6864, 0x7006, 0x6868, 0x700a,\r
-+      0x686c, 0x700e, 0x6844, 0x9005, 0x1110, 0x7012, 0x7016, 0x684c,\r
-+      0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x7037, 0x0019, 0x702b,\r
-+      0x0001, 0x00e6, 0x2071, 0x1906, 0x7028, 0xc084, 0x702a, 0x7007,\r
-+      0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005, 0xa868,\r
-+      0xd0fc, 0x11d8, 0x00e6, 0x0026, 0x2001, 0x191a, 0x2004, 0x9005,\r
-+      0x0904, 0x6891, 0xa87c, 0xd0bc, 0x1904, 0x6891, 0xa978, 0xa874,\r
-+      0x9105, 0x1904, 0x6891, 0x2001, 0x191a, 0x2004, 0x0002, 0x6891,\r
-+      0x66ea, 0x6726, 0x6726, 0x6891, 0x6726, 0x0005, 0xa868, 0xd0fc,\r
-+      0x1500, 0x00e6, 0x0026, 0x2009, 0x191a, 0x210c, 0x81ff, 0x0904,\r
-+      0x6891, 0xa87c, 0xd0cc, 0x0904, 0x6891, 0xa880, 0x9084, 0x00ff,\r
-+      0x9086, 0x0001, 0x1904, 0x6891, 0x9186, 0x0003, 0x0904, 0x6726,\r
-+      0x9186, 0x0005, 0x0904, 0x6726, 0xa84f, 0x8021, 0xa853, 0x0017,\r
-+      0x0028, 0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1906,\r
-+      0x701c, 0x9005, 0x1904, 0x6a51, 0x0e04, 0x6a9c, 0x2071, 0x0000,\r
-+      0xa84c, 0x7082, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870,\r
-+      0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,\r
-+      0x1187, 0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c,\r
-+      0x1158, 0xa802, 0x2900, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,\r
-+      0x7f5d, 0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802,\r
-+      0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000,\r
-+      0x00f6, 0x2079, 0x0050, 0x2071, 0x1906, 0xa803, 0x0000, 0x7010,\r
-+      0x9005, 0x1904, 0x6815, 0x782c, 0x908c, 0x0780, 0x190c, 0x6bc3,\r
-+      0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6744, 0x6815,\r
-+      0x6769, 0x67b0, 0x080c, 0x0db4, 0x2071, 0x1800, 0x2900, 0x7822,\r
-+      0xa804, 0x900d, 0x1170, 0x2071, 0x19cb, 0x703c, 0x9005, 0x1328,\r
-+      0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee,\r
-+      0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,\r
-+      0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d,\r
-+      0x0c10, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1580,\r
-+      0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009,\r
-+      0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058,\r
-+      0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,\r
-+      0x70be, 0x080c, 0x7f5d, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3,\r
-+      0xd0a4, 0x19f0, 0x2071, 0x19cb, 0x703c, 0x9005, 0x1328, 0x2001,\r
-+      0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005,\r
-+      0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,\r
-+      0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d, 0x0800,\r
-+      0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802,\r
-+      0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c,\r
-+      0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x1d60, 0x00ee, 0x782c,\r
-+      0x9094, 0x0780, 0x190c, 0x6bc3, 0xd09c, 0x11a0, 0x009e, 0x2900,\r
-+      0x7822, 0xa804, 0x900d, 0x1560, 0x2071, 0x19cb, 0x703c, 0x9005,\r
-+      0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e,\r
-+      0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018,\r
-+      0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,\r
-+      0x900d, 0x1170, 0x2071, 0x19cb, 0x703c, 0x9005, 0x1328, 0x2001,\r
-+      0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005,\r
-+      0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,\r
-+      0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,\r
-+      0x7f5d, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000,\r
-+      0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e,\r
-+      0x2148, 0xa804, 0x900d, 0x1904, 0x686a, 0x782c, 0x9094, 0x0780,\r
-+      0x190c, 0x6bc3, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180, 0x7010,\r
-+      0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822,\r
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd09c, 0x0d68, 0x782c,\r
-+      0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x01b0, 0x00e6, 0x7824,\r
-+      0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,\r
-+      0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c, 0x9094, 0x0780, 0x190c,\r
-+      0x6bc3, 0xd0a4, 0x1d60, 0x00ee, 0x2071, 0x19cb, 0x703c, 0x9005,\r
-+      0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e,\r
-+      0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,\r
-+      0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,\r
-+      0x9200, 0x70be, 0x080c, 0x7f5d, 0x00ee, 0x0804, 0x6825, 0xa868,\r
-+      0xd0fc, 0x1904, 0x68cd, 0x0096, 0xa804, 0xa807, 0x0000, 0x904d,\r
-+      0x190c, 0x0f9d, 0x009e, 0x0018, 0xa868, 0xd0fc, 0x15f0, 0x00e6,\r
-+      0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1800,\r
-+      0x70e8, 0x8001, 0x01d0, 0x1678, 0x2071, 0x1906, 0xa803, 0x0000,\r
-+      0x7010, 0x9005, 0x1904, 0x69cb, 0x782c, 0x908c, 0x0780, 0x190c,\r
-+      0x6bc3, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x68ce,\r
-+      0x69cb, 0x68e9, 0x695a, 0x080c, 0x0db4, 0x70eb, 0x0fa0, 0x71e4,\r
-+      0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205, 0x70e6,\r
-+      0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f,\r
-+      0x9205, 0x20d0, 0x0888, 0x70ea, 0x0878, 0x0005, 0x2071, 0x1800,\r
-+      0x2900, 0x7822, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee,\r
-+      0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,\r
-+      0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d,\r
-+      0x0c60, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904,\r
-+      0x6949, 0x7830, 0x8007, 0x9084, 0x001f, 0x9082, 0x0005, 0x1220,\r
-+      0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, 0x0040,\r
-+      0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040,\r
-+      0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802,\r
-+      0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c,\r
-+      0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x19f0, 0x0e04, 0x6940,\r
-+      0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,\r
-+      0x6833, 0x0013, 0x00de, 0x2001, 0x1917, 0x200c, 0xc184, 0x2102,\r
-+      0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187,\r
-+      0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005,\r
-+      0x2001, 0x1917, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee,\r
-+      0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,\r
-+      0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d,\r
-+      0x0804, 0x68fc, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800,\r
-+      0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c,\r
-+      0x7f5d, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x1d60,\r
-+      0x00ee, 0x0e04, 0x699e, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,\r
-+      0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084,\r
-+      0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,\r
-+      0x1187, 0x2009, 0x1919, 0x200b, 0x0000, 0x782c, 0x9094, 0x0780,\r
-+      0x190c, 0x6bc3, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804,\r
-+      0x900d, 0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085,\r
-+      0x7046, 0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018,\r
-+      0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,\r
-+      0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800,\r
-+      0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,\r
-+      0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d, 0x00fe,\r
-+      0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018,\r
-+      0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,\r
-+      0x900d, 0x1904, 0x6a3c, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3,\r
-+      0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180,\r
-+      0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900,\r
-+      0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd09c, 0x0d50,\r
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x05c8, 0x00e6,\r
-+      0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e,\r
-+      0x70bc, 0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c, 0x9094, 0x0780,\r
-+      0x190c, 0x6bc3, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6a35, 0x7838,\r
-+      0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,\r
-+      0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001,\r
-+      0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2009, 0x1919, 0x200b,\r
-+      0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046,\r
-+      0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016,\r
-+      0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,\r
-+      0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d, 0x00ee, 0x0804,\r
-+      0x69db, 0x2071, 0x1906, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000,\r
-+      0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e,\r
-+      0x2148, 0xa804, 0x900d, 0x1128, 0x1e04, 0x6a7c, 0x002e, 0x00ee,\r
-+      0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,\r
-+      0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,\r
-+      0x080c, 0x7f5d, 0x0e04, 0x6a66, 0x2071, 0x1906, 0x701c, 0x2048,\r
-+      0xa84c, 0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032,\r
-+      0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001,\r
-+      0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2071, 0x1906, 0x080c,\r
-+      0x6baf, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1906, 0xa803, 0x0000,\r
-+      0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,\r
-+      0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1118, 0x002e,\r
-+      0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904,\r
-+      0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,\r
-+      0x70be, 0x080c, 0x7f5d, 0x002e, 0x00ee, 0x0005, 0x0006, 0xa87c,\r
-+      0x0006, 0xa867, 0x0103, 0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x001d, 0x20a0, 0x9006, 0x4004, 0x000e, 0x9084, 0x00ff,\r
-+      0xa87e, 0x000e, 0xa87a, 0xa982, 0x0005, 0x2071, 0x1906, 0x7004,\r
-+      0x0002, 0x6ae7, 0x6ae8, 0x6bae, 0x6ae8, 0x0db4, 0x6bae, 0x0005,\r
-+      0x2001, 0x191a, 0x2004, 0x0002, 0x6af2, 0x6af2, 0x6b47, 0x6b48,\r
-+      0x6af2, 0x6b48, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6bce, 0x701c,\r
-+      0x904d, 0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6b16, 0xa94c,\r
-+      0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036,\r
-+      0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,\r
-+      0x190c, 0x1187, 0x2071, 0x1906, 0x080c, 0x6baf, 0x012e, 0x0470,\r
-+      0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd09c,\r
-+      0x2071, 0x1906, 0x1510, 0x2071, 0x1906, 0x700f, 0x0001, 0xa964,\r
-+      0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,\r
-+      0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822,\r
-+      0x00de, 0x2071, 0x1906, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012,\r
-+      0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005,\r
-+      0x00d6, 0x2008, 0x2069, 0x19cb, 0x683c, 0x9005, 0x0760, 0x0158,\r
-+      0x9186, 0x0003, 0x0540, 0x2001, 0x1814, 0x2004, 0x2009, 0x1a98,\r
-+      0x210c, 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050,\r
-+      0x693c, 0x6838, 0x9106, 0x0190, 0x0e04, 0x6b7a, 0x2069, 0x0000,\r
-+      0x6837, 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080,\r
-+      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2069, 0x19cb,\r
-+      0x683f, 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c,\r
-+      0x6c3f, 0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094,\r
-+      0x0780, 0x15c9, 0xd09c, 0x1500, 0x2071, 0x1906, 0x700f, 0x0001,\r
-+      0xa964, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c,\r
-+      0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050,\r
-+      0x6822, 0x00de, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800,\r
-+      0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126,\r
-+      0x2091, 0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012,\r
-+      0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x101d,\r
-+      0x0005, 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6bc5, 0x0006,\r
-+      0x0016, 0x2001, 0x8004, 0x0006, 0x0804, 0x0dbd, 0x0096, 0x00f6,\r
-+      0x2079, 0x0050, 0x7044, 0xd084, 0x01e0, 0xc084, 0x7046, 0x7838,\r
-+      0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,\r
-+      0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,\r
-+      0x190c, 0x1187, 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, 0x009e,\r
-+      0x0005, 0x782c, 0x9094, 0x0780, 0x1971, 0xd0a4, 0x0db8, 0x2009,\r
-+      0x1919, 0x2104, 0x8000, 0x200a, 0x9082, 0x000f, 0x0e78, 0x00e6,\r
-+      0x2071, 0x1800, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c,\r
-+      0x1148, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022,\r
-+      0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,\r
-+      0x70bc, 0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c, 0x9094, 0x0780,\r
-+      0x190c, 0x6bc3, 0xd0a4, 0x19f0, 0x7838, 0x7938, 0x910e, 0x1de0,\r
-+      0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091,\r
-+      0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2009,\r
-+      0x1919, 0x200b, 0x0000, 0x00ee, 0x00fe, 0x009e, 0x0005, 0x00f6,\r
-+      0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084, 0x7046, 0x7838,\r
-+      0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,\r
-+      0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,\r
-+      0x190c, 0x1187, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, 0x190c,\r
-+      0x6bc3, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824, 0x2048,\r
-+      0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c,\r
-+      0x7f5d, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x1d70,\r
-+      0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x191a, 0x6808, 0x690a,\r
-+      0x2069, 0x19cb, 0x9102, 0x1118, 0x683c, 0x9005, 0x1328, 0x2001,\r
-+      0x191b, 0x200c, 0x810d, 0x693e, 0x00de, 0x00ee, 0x00fe, 0x0005,\r
-+      0x7094, 0x908a, 0x0029, 0x1a0c, 0x0db4, 0x9082, 0x001d, 0x001b,\r
-+      0x6027, 0x1e00, 0x0005, 0x6d67, 0x6ced, 0x6d09, 0x6d33, 0x6d56,\r
-+      0x6d96, 0x6da8, 0x6d09, 0x6d7e, 0x6ca8, 0x6cd6, 0x6ca7, 0x0005,\r
-+      0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005,\r
-+      0x1518, 0x7097, 0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c,\r
-+      0x70eb, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x7097, 0x0028,\r
-+      0x2069, 0x1960, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a,\r
-+      0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a33, 0x080c, 0x1958,\r
-+      0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069,\r
-+      0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x7097,\r
-+      0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c, 0x7185, 0x6028,\r
-+      0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090,\r
-+      0x080c, 0x2b14, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x6e15,\r
-+      0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097, 0x0020,\r
-+      0x080c, 0x6e15, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f,\r
-+      0x0005, 0x2001, 0x0088, 0x080c, 0x2b14, 0x6124, 0xd1cc, 0x11e8,\r
-+      0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, 0x080c,\r
-+      0x1982, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x6fde,\r
-+      0x2001, 0x0080, 0x080c, 0x2b14, 0x7097, 0x0028, 0x0058, 0x7097,\r
-+      0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010,\r
-+      0x7097, 0x001f, 0x0005, 0x080c, 0x1982, 0x60e3, 0x0001, 0x600c,\r
-+      0xc0b4, 0x600e, 0x080c, 0x6fde, 0x2001, 0x0080, 0x080c, 0x2b14,\r
-+      0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184,\r
-+      0x1e00, 0x1158, 0x7097, 0x0028, 0x0040, 0x7097, 0x001e, 0x0028,\r
-+      0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005, 0x2001, 0x00a0,\r
-+      0x080c, 0x2b14, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c,\r
-+      0x1982, 0x7097, 0x001e, 0x0010, 0x7097, 0x001d, 0x0005, 0x080c,\r
-+      0x6e98, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x6e15, 0x0016, 0x080c,\r
-+      0x1982, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x7097, 0x001e,\r
-+      0x0020, 0x7097, 0x001f, 0x080c, 0x6e15, 0x0005, 0x0006, 0x2001,\r
-+      0x00a0, 0x080c, 0x2b14, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc,\r
-+      0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028,\r
-+      0x7097, 0x001d, 0x0010, 0x7097, 0x0021, 0x0005, 0x080c, 0x6e98,\r
-+      0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097,\r
-+      0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005,\r
-+      0x0006, 0x2001, 0x0090, 0x080c, 0x2b14, 0x000e, 0x6124, 0xd1d4,\r
-+      0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x7097,\r
-+      0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010,\r
-+      0x7097, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126,\r
-+      0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000,\r
-+      0x080c, 0x6fb2, 0x11d8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01b0,\r
-+      0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c, 0x2a5d, 0x6024, 0xd0cc,\r
-+      0x0148, 0x2001, 0x00a0, 0x080c, 0x2b14, 0x080c, 0x7296, 0x080c,\r
-+      0x5cd1, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x6fcc,\r
-+      0x0150, 0x080c, 0x6fc3, 0x1138, 0x2001, 0x0001, 0x080c, 0x260c,\r
-+      0x080c, 0x6f8a, 0x00a0, 0x080c, 0x6e95, 0x0178, 0x2001, 0x0001,\r
-+      0x080c, 0x260c, 0x7094, 0x9086, 0x001e, 0x0120, 0x7094, 0x9086,\r
-+      0x0022, 0x1118, 0x7097, 0x0025, 0x0010, 0x7097, 0x0021, 0x012e,\r
-+      0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x6e26,\r
-+      0x080c, 0x810c, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011,\r
-+      0x6e26, 0x080c, 0x8103, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6,\r
-+      0x0016, 0x080c, 0x93ac, 0x2071, 0x1800, 0x080c, 0x6dc3, 0x001e,\r
-+      0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,\r
-+      0x00e6, 0x00f6, 0x0126, 0x080c, 0x93ac, 0x2061, 0x0100, 0x2069,\r
-+      0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a,\r
-+      0x2011, 0x0003, 0x080c, 0x9771, 0x2011, 0x0002, 0x080c, 0x977b,\r
-+      0x080c, 0x9662, 0x080c, 0x80b8, 0x0036, 0x901e, 0x080c, 0x96d8,\r
-+      0x003e, 0x60e3, 0x0000, 0x080c, 0xd8b4, 0x080c, 0xd8cf, 0x2009,\r
-+      0x0004, 0x080c, 0x2a63, 0x080c, 0x297e, 0x2001, 0x1800, 0x2003,\r
-+      0x0004, 0x6027, 0x0008, 0x2011, 0x6e26, 0x080c, 0x810c, 0x080c,\r
-+      0x6fcc, 0x0118, 0x9006, 0x080c, 0x2b14, 0x080c, 0x0b8f, 0x2001,\r
-+      0x0001, 0x080c, 0x260c, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce,\r
-+      0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x6e33,\r
-+      0x2071, 0x19cb, 0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110,\r
-+      0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005,\r
-+      0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0,\r
-+      0x080c, 0x2b14, 0x0156, 0x20a9, 0x002d, 0x1d04, 0x6ea5, 0x2091,\r
-+      0x6000, 0x1f04, 0x6ea5, 0x015e, 0x00d6, 0x2069, 0x1800, 0x6898,\r
-+      0x8001, 0x0220, 0x0118, 0x689a, 0x00de, 0x0005, 0x689b, 0x0014,\r
-+      0x68e4, 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001, 0x1da8, 0x080c,\r
-+      0x8118, 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,\r
-+      0x0140, 0x2071, 0x1800, 0x080c, 0x72a5, 0x2001, 0x193e, 0x2003,\r
-+      0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, 0x26d7, 0x9006,\r
-+      0x080c, 0x2b14, 0x080c, 0x5b90, 0x6027, 0xffff, 0x602b, 0x182f,\r
-+      0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061,\r
-+      0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001, 0x194e, 0x200c,\r
-+      0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002,\r
-+      0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x6f7a, 0x7097, 0x0022,\r
-+      0x0040, 0x7097, 0x0021, 0x0028, 0x7097, 0x0023, 0x0010, 0x7097,\r
-+      0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c,\r
-+      0x26d7, 0x0026, 0x080c, 0x9db8, 0x002e, 0x7000, 0x908e, 0x0004,\r
-+      0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126,\r
-+      0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e,\r
-+      0x015e, 0x080c, 0xc212, 0x0118, 0x9006, 0x080c, 0x2b3e, 0x0804,\r
-+      0x6f86, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2a5d,\r
-+      0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c, 0x2b14, 0x1f04,\r
-+      0x6f24, 0x080c, 0x7009, 0x012e, 0x015e, 0x080c, 0x6fc3, 0x01a8,\r
-+      0x6044, 0x9005, 0x0168, 0x6050, 0x0006, 0x9085, 0x0020, 0x6052,\r
-+      0x080c, 0x7009, 0x9006, 0x8001, 0x1df0, 0x000e, 0x6052, 0x0028,\r
-+      0x6804, 0xd0d4, 0x1110, 0x080c, 0x7009, 0x080c, 0xc212, 0x0118,\r
-+      0x9006, 0x080c, 0x2b3e, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004,\r
-+      0x0130, 0x2009, 0x00c8, 0x2011, 0x6e33, 0x080c, 0x80ca, 0x002e,\r
-+      0x001e, 0x080c, 0x7f54, 0x7034, 0xc085, 0x7036, 0x2001, 0x194e,\r
-+      0x2003, 0x0004, 0x080c, 0x6c90, 0x080c, 0x6fc3, 0x0138, 0x6804,\r
-+      0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, 0x729b, 0x00ee, 0x00de,\r
-+      0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,\r
-+      0x0140, 0x2071, 0x1800, 0x080c, 0x7f6b, 0x080c, 0x7f5d, 0x080c,\r
-+      0x72a5, 0x2001, 0x193e, 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2,\r
-+      0x6886, 0x080c, 0x26d7, 0x9006, 0x080c, 0x2b14, 0x6043, 0x0090,\r
-+      0x6043, 0x0010, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de,\r
-+      0x00ce, 0x0005, 0x0006, 0x2001, 0x194d, 0x2004, 0x9086, 0xaaaa,\r
-+      0x000e, 0x0005, 0x0006, 0x080c, 0x538a, 0x9084, 0x0030, 0x9086,\r
-+      0x0000, 0x000e, 0x0005, 0x0006, 0x080c, 0x538a, 0x9084, 0x0030,\r
-+      0x9086, 0x0030, 0x000e, 0x0005, 0x0006, 0x080c, 0x538a, 0x9084,\r
-+      0x0030, 0x9086, 0x0010, 0x000e, 0x0005, 0x0006, 0x080c, 0x538a,\r
-+      0x9084, 0x0030, 0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016,\r
-+      0x2001, 0x180c, 0x2004, 0x908c, 0x0013, 0x0180, 0x0020, 0x080c,\r
-+      0x26f7, 0x900e, 0x0028, 0x080c, 0x655a, 0x1dc8, 0x2009, 0x0002,\r
-+      0x2019, 0x0028, 0x080c, 0x2fa5, 0x9006, 0x0019, 0x001e, 0x003e,\r
-+      0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c, 0xc20b,\r
-+      0x1128, 0x9085, 0x0010, 0x0010, 0x9084, 0xffef, 0x2072, 0x00ee,\r
-+      0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006, 0x6004,\r
-+      0x0006, 0x6028, 0x0006, 0x0016, 0x6138, 0x6050, 0x9084, 0xfbff,\r
-+      0x9085, 0x2000, 0x6052, 0x613a, 0x20a9, 0x0012, 0x1d04, 0x701e,\r
-+      0x2091, 0x6000, 0x1f04, 0x701e, 0x602f, 0x0100, 0x602f, 0x0000,\r
-+      0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052, 0x613a, 0x001e,\r
-+      0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e, 0x6006,\r
-+      0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001,\r
-+      0x2001, 0x0001, 0x080c, 0x26d7, 0x2001, 0x00a0, 0x0006, 0x080c,\r
-+      0xc212, 0x000e, 0x0130, 0x080c, 0x2b32, 0x9006, 0x080c, 0x2b3e,\r
-+      0x0010, 0x080c, 0x2b14, 0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5,\r
-+      0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x29d2, 0x00fe, 0x000e,\r
-+      0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,\r
-+      0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x6020,\r
-+      0x9084, 0x0080, 0x0138, 0x2001, 0x180c, 0x200c, 0xc1c5, 0x2102,\r
-+      0x0804, 0x70dd, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102, 0x6028,\r
-+      0x9084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x2001, 0x0090, 0x080c,\r
-+      0x2b14, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1518, 0x1d04, 0x708b,\r
-+      0x2091, 0x6000, 0x1f04, 0x708b, 0x2011, 0x0003, 0x080c, 0x9771,\r
-+      0x2011, 0x0002, 0x080c, 0x977b, 0x080c, 0x9662, 0x901e, 0x080c,\r
-+      0x96d8, 0x2001, 0x00a0, 0x080c, 0x2b14, 0x080c, 0x7296, 0x080c,\r
-+      0x5cd1, 0x080c, 0xc212, 0x0110, 0x080c, 0x0d22, 0x9085, 0x0001,\r
-+      0x0490, 0x86ff, 0x1110, 0x080c, 0x1982, 0x60e3, 0x0000, 0x2001,\r
-+      0x0002, 0x080c, 0x26d7, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2b14,\r
-+      0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2a5d,\r
-+      0x6024, 0x910c, 0x0138, 0x1d04, 0x70c2, 0x2091, 0x6000, 0x1f04,\r
-+      0x70c2, 0x0810, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b0, 0x9005,\r
-+      0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xc212, 0x0110,\r
-+      0x080c, 0x0d22, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e,\r
-+      0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000, 0x9086,\r
-+      0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540, 0x9086,\r
-+      0x5540, 0x1128, 0x2069, 0x1a49, 0x2d04, 0x8000, 0x206a, 0x2069,\r
-+      0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904,\r
-+      0x7150, 0x2001, 0x0088, 0x080c, 0x2b14, 0x9006, 0x60e2, 0x6886,\r
-+      0x080c, 0x26d7, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808,\r
-+      0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400,\r
-+      0x2069, 0x1960, 0x7000, 0x206a, 0x7097, 0x0026, 0x7003, 0x0001,\r
-+      0x20a9, 0x0002, 0x1d04, 0x7132, 0x2091, 0x6000, 0x1f04, 0x7132,\r
-+      0x0804, 0x717d, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00,\r
-+      0x2009, 0x1e00, 0x080c, 0x2a5d, 0x6024, 0x910c, 0x0508, 0x9084,\r
-+      0x1a00, 0x11f0, 0x1d04, 0x713e, 0x2091, 0x6000, 0x1f04, 0x713e,\r
-+      0x2011, 0x0003, 0x080c, 0x9771, 0x2011, 0x0002, 0x080c, 0x977b,\r
-+      0x080c, 0x9662, 0x901e, 0x080c, 0x96d8, 0x2001, 0x00a0, 0x080c,\r
-+      0x2b14, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x9085, 0x0001, 0x00a8,\r
-+      0x2001, 0x0080, 0x080c, 0x2b14, 0x2069, 0x0140, 0x60e3, 0x0000,\r
-+      0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001,\r
-+      0x0002, 0x080c, 0x26d7, 0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce,\r
-+      0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026,\r
-+      0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800,\r
-+      0x6020, 0x9084, 0x00c0, 0x01c8, 0x2011, 0x0003, 0x080c, 0x9771,\r
-+      0x2011, 0x0002, 0x080c, 0x977b, 0x080c, 0x9662, 0x901e, 0x080c,\r
-+      0x96d8, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, 0x2b14, 0x080c,\r
-+      0x7296, 0x080c, 0x5cd1, 0x0804, 0x7217, 0x2001, 0x180c, 0x200c,\r
-+      0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x6e1b, 0x2069, 0x0140,\r
-+      0x2001, 0x0080, 0x080c, 0x2b14, 0x60e3, 0x0000, 0x2069, 0x0200,\r
-+      0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180, 0x6028, 0x9084,\r
-+      0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x1960, 0x7000, 0x206a,\r
-+      0x7097, 0x0027, 0x7003, 0x0001, 0x0804, 0x7217, 0x6027, 0x1e00,\r
-+      0x2009, 0x1e00, 0x080c, 0x2a5d, 0x6024, 0x910c, 0x01c8, 0x9084,\r
-+      0x1c00, 0x11b0, 0x1d04, 0x71d6, 0x0006, 0x0016, 0x00c6, 0x00d6,\r
-+      0x00e6, 0x080c, 0x7f9c, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e,\r
-+      0x00e6, 0x2071, 0x19cb, 0x7018, 0x00ee, 0x9005, 0x19f8, 0x01f8,\r
-+      0x0026, 0x2011, 0x6e33, 0x080c, 0x8038, 0x2011, 0x6e26, 0x080c,\r
-+      0x810c, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005,\r
-+      0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x0002, 0x080c,\r
-+      0x26d7, 0x60e2, 0x2001, 0x180c, 0x200c, 0xc1b4, 0x2102, 0x00ee,\r
-+      0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156,\r
-+      0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100,\r
-+      0x2071, 0x1800, 0x080c, 0xc20b, 0x1904, 0x7284, 0x7130, 0xd184,\r
-+      0x1170, 0x080c, 0x3133, 0x0138, 0xc18d, 0x7132, 0x2011, 0x1854,\r
-+      0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, 0x0904, 0x7284, 0x2011,\r
-+      0x1854, 0x220c, 0x0438, 0x0016, 0x2019, 0x000e, 0x080c, 0xd4a6,\r
-+      0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0,\r
-+      0x9186, 0x0080, 0x0188, 0x080c, 0x623e, 0x1170, 0x2120, 0x9006,\r
-+      0x0016, 0x2009, 0x000e, 0x080c, 0xd52a, 0x2009, 0x0001, 0x2011,\r
-+      0x0100, 0x080c, 0x822f, 0x001e, 0x8108, 0x1f04, 0x724d, 0x00be,\r
-+      0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019,\r
-+      0x0004, 0x080c, 0x2fa5, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9,\r
-+      0x007f, 0x900e, 0x080c, 0x623e, 0x1110, 0x080c, 0x5ceb, 0x8108,\r
-+      0x1f04, 0x727a, 0x00be, 0x015e, 0x080c, 0x1982, 0x080c, 0x9db8,\r
-+      0x60e3, 0x0000, 0x080c, 0x5cd1, 0x080c, 0x6ee4, 0x00ee, 0x00ce,\r
-+      0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x194e,\r
-+      0x2003, 0x0001, 0x0005, 0x2001, 0x194e, 0x2003, 0x0000, 0x0005,\r
-+      0x2001, 0x194d, 0x2003, 0xaaaa, 0x0005, 0x2001, 0x194d, 0x2003,\r
-+      0x0000, 0x0005, 0x2071, 0x18f0, 0x7003, 0x0000, 0x7007, 0x0000,\r
-+      0x080c, 0x1004, 0x090c, 0x0db4, 0xa8ab, 0xdcb0, 0x2900, 0x704e,\r
-+      0x080c, 0x1004, 0x090c, 0x0db4, 0xa8ab, 0xdcb0, 0x2900, 0x7052,\r
-+      0xa867, 0x0000, 0xa86b, 0x0001, 0xa89f, 0x0000, 0x0005, 0x00e6,\r
-+      0x2071, 0x0040, 0x6848, 0x9005, 0x1118, 0x9085, 0x0001, 0x04b0,\r
-+      0x6840, 0x9005, 0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854,\r
-+      0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6850, 0x7002, 0x6854,\r
-+      0x7006, 0x6858, 0x700a, 0x685c, 0x700e, 0x6840, 0x9005, 0x1110,\r
-+      0x7012, 0x7016, 0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e,\r
-+      0x2001, 0x0019, 0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c,\r
-+      0x918c, 0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x18f0,\r
-+      0x6807, 0x0001, 0x00de, 0x080c, 0x7897, 0x9006, 0x00ee, 0x0005,\r
-+      0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x2011, 0x0100, 0x2214,\r
-+      0x9296, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04,\r
-+      0x730c, 0x015e, 0x0005, 0x2079, 0x0040, 0x2071, 0x18f0, 0x7004,\r
-+      0x0002, 0x732b, 0x732c, 0x7363, 0x73be, 0x74ff, 0x7329, 0x7329,\r
-+      0x7529, 0x080c, 0x0db4, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c,\r
-+      0x0780, 0x190c, 0x7923, 0xd0a4, 0x01f0, 0x7824, 0x2048, 0x9006,\r
-+      0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x0040, 0x0608,\r
-+      0x00b8, 0x2001, 0x1800, 0x200c, 0x9186, 0x0003, 0x1160, 0x7104,\r
-+      0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128, 0x9186, 0x0003,\r
-+      0x19e8, 0x080c, 0x73be, 0x782c, 0xd09c, 0x090c, 0x7897, 0x0005,\r
-+      0x9082, 0x005a, 0x1218, 0x2100, 0x003b, 0x0c18, 0x080c, 0x73f4,\r
-+      0x0c90, 0x00e3, 0x08f0, 0x0005, 0x73f4, 0x73f4, 0x73f4, 0x73f4,\r
-+      0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x7416, 0x73f4, 0x73f4, 0x73f4,\r
-+      0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4,\r
-+      0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4,\r
-+      0x7400, 0x73f4, 0x75fe, 0x73f4, 0x73f4, 0x73f4, 0x7416, 0x73f4,\r
-+      0x7400, 0x763f, 0x7680, 0x76c7, 0x76db, 0x73f4, 0x73f4, 0x7416,\r
-+      0x7400, 0x73f4, 0x73f4, 0x74d3, 0x7786, 0x77a1, 0x73f4, 0x7416,\r
-+      0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x74c9, 0x77a1, 0x73f4, 0x73f4,\r
-+      0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x742a,\r
-+      0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4,\r
-+      0x73f4, 0x78c7, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x743e,\r
-+      0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x2079, 0x0040,\r
-+      0x7004, 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x78c0, 0xd0a4,\r
-+      0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084,\r
-+      0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c,\r
-+      0x7897, 0x0005, 0x73f4, 0x7400, 0x75ea, 0x73f4, 0x7400, 0x73f4,\r
-+      0x7400, 0x7400, 0x73f4, 0x7400, 0x75ea, 0x7400, 0x7400, 0x7400,\r
-+      0x7400, 0x7400, 0x73f4, 0x7400, 0x75ea, 0x73f4, 0x73f4, 0x7400,\r
-+      0x73f4, 0x73f4, 0x73f4, 0x7400, 0x00e6, 0x2071, 0x18f0, 0x2009,\r
-+      0x0400, 0x0071, 0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005,\r
-+      0x2009, 0x2000, 0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005,\r
-+      0x7007, 0x0001, 0xa868, 0x9084, 0x00ff, 0x9105, 0xa86a, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x688c, 0x012e, 0x0005, 0xa864, 0x8007,\r
-+      0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804,\r
-+      0x75a8, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b,\r
-+      0x75a8, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001,\r
-+      0x1120, 0x7007, 0x0001, 0x0804, 0x75c3, 0x7007, 0x0003, 0x7012,\r
-+      0x2900, 0x7016, 0x701a, 0x704b, 0x75c3, 0x0005, 0xa864, 0x8007,\r
-+      0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x73fc, 0x7007, 0x0001,\r
-+      0x2009, 0x1833, 0x210c, 0x81ff, 0x1904, 0x74a0, 0xa994, 0x9186,\r
-+      0x006f, 0x0188, 0x9186, 0x0074, 0x15b0, 0x0026, 0x2011, 0x0010,\r
-+      0x080c, 0x6586, 0x002e, 0x0578, 0x0016, 0xa998, 0x080c, 0x65d0,\r
-+      0x001e, 0x1548, 0x0400, 0x080c, 0x6fb2, 0x0140, 0xa897, 0x4005,\r
-+      0xa89b, 0x0016, 0x2001, 0x0030, 0x900e, 0x0438, 0x0026, 0x2011,\r
-+      0x8008, 0x080c, 0x6586, 0x002e, 0x01b0, 0x0016, 0x0026, 0x0036,\r
-+      0xa998, 0xaaa0, 0xab9c, 0x918d, 0x8000, 0x080c, 0x65d0, 0x003e,\r
-+      0x002e, 0x001e, 0x1140, 0xa897, 0x4005, 0xa89b, 0x4009, 0x2001,\r
-+      0x0030, 0x900e, 0x0050, 0xa868, 0x9084, 0x00ff, 0xa86a, 0xa883,\r
-+      0x0000, 0x080c, 0x5f00, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000,\r
-+      0xa867, 0x0139, 0xa87a, 0xa982, 0x080c, 0x688c, 0x012e, 0x0ca0,\r
-+      0xa994, 0x9186, 0x0071, 0x0904, 0x744e, 0x9186, 0x0064, 0x0904,\r
-+      0x744e, 0x9186, 0x007c, 0x0904, 0x744e, 0x9186, 0x0028, 0x0904,\r
-+      0x744e, 0x9186, 0x0038, 0x0904, 0x744e, 0x9186, 0x0078, 0x0904,\r
-+      0x744e, 0x9186, 0x005f, 0x0904, 0x744e, 0x9186, 0x0056, 0x0904,\r
-+      0x744e, 0xa897, 0x4005, 0xa89b, 0x0001, 0x2001, 0x0030, 0x900e,\r
-+      0x0860, 0xa87c, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120, 0x7007,\r
-+      0x0001, 0x0804, 0x77b8, 0x2900, 0x7016, 0x701a, 0x20a9, 0x0004,\r
-+      0xa860, 0x20e0, 0xa85c, 0x9080, 0x0030, 0x2098, 0x7050, 0x2040,\r
-+      0xa060, 0x20e8, 0xa05c, 0x9080, 0x0023, 0x20a0, 0x4003, 0xa888,\r
-+      0x7012, 0x9082, 0x0401, 0x1a04, 0x7404, 0xaab4, 0x928a, 0x0002,\r
-+      0x1a04, 0x7404, 0x82ff, 0x1138, 0xa8b8, 0xa9bc, 0x9105, 0x0118,\r
-+      0x2001, 0x7566, 0x0018, 0x9280, 0x755c, 0x2005, 0x7056, 0x7010,\r
-+      0x9015, 0x0904, 0x7547, 0x080c, 0x1004, 0x1118, 0x7007, 0x0004,\r
-+      0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa866, 0x7050,\r
-+      0x2040, 0xa95c, 0xe004, 0x9100, 0xa076, 0xa860, 0xa072, 0xe008,\r
-+      0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b,\r
-+      0x9296, 0x0004, 0x0108, 0x9108, 0xa17a, 0x810b, 0xa17e, 0x080c,\r
-+      0x10d5, 0xa06c, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200, 0x0118,\r
-+      0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x101d, 0x7014,\r
-+      0x2048, 0x0804, 0x7404, 0x7020, 0x2048, 0x7018, 0xa802, 0xa807,\r
-+      0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x74ff, 0x7014,\r
-+      0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005, 0x1128, 0xa8b8, 0xa9bc,\r
-+      0x9105, 0x0108, 0x00b9, 0xa864, 0x9084, 0x00ff, 0x9086, 0x001e,\r
-+      0x0904, 0x77b8, 0x0804, 0x75a8, 0x755e, 0x7562, 0x0002, 0x001d,\r
-+      0x0007, 0x0004, 0x000a, 0x001b, 0x0005, 0x0006, 0x000a, 0x001d,\r
-+      0x0005, 0x0004, 0x0076, 0x0066, 0xafb8, 0xaebc, 0xa804, 0x2050,\r
-+      0xb0c0, 0xb0e2, 0xb0bc, 0xb0de, 0xb0b8, 0xb0d2, 0xb0b4, 0xb0ce,\r
-+      0xb6da, 0xb7d6, 0xb0b0, 0xb0ca, 0xb0ac, 0xb0c6, 0xb0a8, 0xb0ba,\r
-+      0xb0a4, 0xb0b6, 0xb6c2, 0xb7be, 0xb0a0, 0xb0b2, 0xb09c, 0xb0ae,\r
-+      0xb098, 0xb0a2, 0xb094, 0xb09e, 0xb6aa, 0xb7a6, 0xb090, 0xb09a,\r
-+      0xb08c, 0xb096, 0xb088, 0xb08a, 0xb084, 0xb086, 0xb692, 0xb78e,\r
-+      0xb080, 0xb082, 0xb07c, 0xb07e, 0xb078, 0xb072, 0xb074, 0xb06e,\r
-+      0xb67a, 0xb776, 0xb004, 0x9055, 0x1958, 0x006e, 0x007e, 0x0005,\r
-+      0x2009, 0x1833, 0x210c, 0x81ff, 0x1178, 0x080c, 0x5d4d, 0x1108,\r
-+      0x0005, 0x080c, 0x6ac6, 0x0126, 0x2091, 0x8000, 0x080c, 0xbe06,\r
-+      0x080c, 0x688c, 0x012e, 0x0ca0, 0x080c, 0xc20b, 0x1d70, 0x2001,\r
-+      0x0028, 0x900e, 0x0c70, 0x2009, 0x1833, 0x210c, 0x81ff, 0x11d8,\r
-+      0xa888, 0x9005, 0x01e0, 0xa883, 0x0000, 0xa87c, 0xd0f4, 0x0120,\r
-+      0x080c, 0x5e62, 0x1138, 0x0005, 0x9006, 0xa87a, 0x080c, 0x5ddd,\r
-+      0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, 0x080c,\r
-+      0x688c, 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001,\r
-+      0x0000, 0x0c80, 0x7018, 0xa802, 0x2908, 0x2048, 0xa906, 0x711a,\r
-+      0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0003, 0x0030, 0x7014,\r
-+      0x2048, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6, 0x7007,\r
-+      0x0001, 0xa974, 0xa878, 0x9084, 0x00ff, 0x9096, 0x0004, 0x0540,\r
-+      0x20a9, 0x0001, 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9, 0x0800,\r
-+      0x9096, 0x0002, 0x0160, 0x9005, 0x11d8, 0xa974, 0x080c, 0x623e,\r
-+      0x11b8, 0x0066, 0xae80, 0x080c, 0x634e, 0x006e, 0x0088, 0x0046,\r
-+      0x2011, 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c,\r
-+      0x623e, 0x1110, 0x080c, 0x644e, 0x8108, 0x1f04, 0x7627, 0x00ce,\r
-+      0xa87c, 0xd084, 0x1120, 0x080c, 0x101d, 0x00be, 0x0005, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x688c, 0x012e, 0x00be, 0x0005, 0x0126,\r
-+      0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x655e, 0x0580, 0x2061,\r
-+      0x1a41, 0x6100, 0xd184, 0x0178, 0xa888, 0x9084, 0x00ff, 0x1550,\r
-+      0x6000, 0xd084, 0x0520, 0x6004, 0x9005, 0x1538, 0x6003, 0x0000,\r
-+      0x600b, 0x0000, 0x00c8, 0x2011, 0x0001, 0xa890, 0x9005, 0x1110,\r
-+      0x2001, 0x001e, 0x8000, 0x6016, 0xa888, 0x9084, 0x00ff, 0x0178,\r
-+      0x6006, 0xa888, 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a, 0xa888,\r
-+      0x8000, 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, 0x7881, 0x012e,\r
-+      0x0804, 0x787b, 0x012e, 0x0804, 0x7875, 0x012e, 0x0804, 0x7878,\r
-+      0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x655e, 0x05e0,\r
-+      0x2061, 0x1a41, 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c,\r
-+      0x1530, 0xac78, 0x9484, 0x0003, 0x0170, 0xa988, 0x918c, 0x00ff,\r
-+      0x8001, 0x1120, 0x2100, 0x9210, 0x0620, 0x0028, 0x8001, 0x1508,\r
-+      0x2100, 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188, 0xa988, 0x810f,\r
-+      0x918c, 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100, 0x9318, 0x0288,\r
-+      0x0030, 0x9082, 0x0004, 0x1168, 0x2100, 0x931a, 0x0250, 0xa890,\r
-+      0x9005, 0x0110, 0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804,\r
-+      0x7881, 0x012e, 0x0804, 0x787e, 0x012e, 0x0804, 0x787b, 0x0126,\r
-+      0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1a41, 0x6300, 0xd38c,\r
-+      0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x788f,\r
-+      0x012e, 0x0804, 0x787e, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000,\r
-+      0x7007, 0x0001, 0xa87c, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a41,\r
-+      0x6000, 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa888, 0x9005,\r
-+      0x05d8, 0xa88c, 0x9065, 0x0598, 0x2001, 0x1833, 0x2004, 0x9005,\r
-+      0x0118, 0x080c, 0x9e62, 0x0068, 0x6017, 0xf400, 0x605b, 0x0000,\r
-+      0xa97c, 0xd1a4, 0x0110, 0xa980, 0x615a, 0x2009, 0x0041, 0x080c,\r
-+      0x9eac, 0xa988, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026,\r
-+      0x900e, 0x2011, 0xfdff, 0x080c, 0x822f, 0x002e, 0xa87c, 0xd0c4,\r
-+      0x0148, 0x2061, 0x1a41, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000,\r
-+      0x0208, 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x7881, 0x00ce,\r
-+      0x012e, 0x00be, 0x0804, 0x787b, 0xa984, 0x9186, 0x002e, 0x0d30,\r
-+      0x9186, 0x002d, 0x0d18, 0x9186, 0x0045, 0x0510, 0x9186, 0x002a,\r
-+      0x1130, 0x2001, 0x180c, 0x200c, 0xc194, 0x2102, 0x08b8, 0x9186,\r
-+      0x0020, 0x0158, 0x9186, 0x0029, 0x1d10, 0xa974, 0x080c, 0x623e,\r
-+      0x1968, 0xb800, 0xc0e4, 0xb802, 0x0848, 0xa88c, 0x9065, 0x09b8,\r
-+      0x6007, 0x0024, 0x2001, 0x1957, 0x2004, 0x601a, 0x0804, 0x7716,\r
-+      0xa88c, 0x9065, 0x0960, 0x00e6, 0xa890, 0x9075, 0x2001, 0x1833,\r
-+      0x2004, 0x9005, 0x0150, 0x080c, 0x9e62, 0x8eff, 0x0118, 0x2e60,\r
-+      0x080c, 0x9e62, 0x00ee, 0x0804, 0x7716, 0x6024, 0xc0dc, 0xc0d5,\r
-+      0x6026, 0x2e60, 0x6007, 0x003a, 0xa8a0, 0x9005, 0x0130, 0x6007,\r
-+      0x003b, 0xa8a4, 0x602e, 0xa8a8, 0x6016, 0x6003, 0x0001, 0x080c,\r
-+      0x83f1, 0x080c, 0x8973, 0x00ee, 0x0804, 0x7716, 0x2061, 0x1a41,\r
-+      0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x788f, 0x0126, 0x2091,\r
-+      0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x788f,\r
-+      0x012e, 0xa883, 0x0016, 0x0804, 0x7888, 0xa883, 0x0007, 0x0804,\r
-+      0x7888, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138,\r
-+      0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x73fc, 0x0040, 0x7007,\r
-+      0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x77b8, 0x0005,\r
-+      0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e, 0x2061, 0x1800,\r
-+      0x61cc, 0x81ff, 0x1904, 0x783a, 0x6130, 0xd194, 0x1904, 0x7864,\r
-+      0xa878, 0x2070, 0x9e82, 0x1cd0, 0x0a04, 0x782e, 0x6064, 0x9e02,\r
-+      0x1a04, 0x782e, 0x7120, 0x9186, 0x0006, 0x1904, 0x7820, 0x7010,\r
-+      0x905d, 0x0904, 0x783a, 0xb800, 0xd0e4, 0x1904, 0x785e, 0x2061,\r
-+      0x1a41, 0x6100, 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0, 0x7024,\r
-+      0xd0dc, 0x1904, 0x7867, 0xa883, 0x0000, 0xa803, 0x0000, 0x2908,\r
-+      0x7014, 0x9005, 0x1198, 0x7116, 0xa87c, 0xd0f4, 0x1904, 0x786a,\r
-+      0x080c, 0x5386, 0xd09c, 0x1118, 0xa87c, 0xc0cc, 0xa87e, 0x2e60,\r
-+      0x080c, 0x814f, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048, 0xa800,\r
-+      0x9005, 0x1de0, 0xa902, 0x2148, 0xa87c, 0xd0f4, 0x1904, 0x786a,\r
-+      0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa883, 0x0006,\r
-+      0x00be, 0x0804, 0x7888, 0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0,\r
-+      0xa974, 0x080c, 0x623e, 0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120,\r
-+      0x9186, 0x0007, 0x1118, 0xa883, 0x0002, 0x0490, 0xa883, 0x0008,\r
-+      0x0478, 0xa883, 0x000e, 0x0460, 0xa883, 0x0017, 0x0448, 0xa883,\r
-+      0x0035, 0x0430, 0x080c, 0x538a, 0xd0fc, 0x01e8, 0xa878, 0x2070,\r
-+      0x9e82, 0x1cd0, 0x02c0, 0x6064, 0x9e02, 0x12a8, 0x7120, 0x9186,\r
-+      0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158,\r
-+      0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x77c4, 0x7003,\r
-+      0x0002, 0x0804, 0x77c4, 0xa883, 0x0028, 0x0010, 0xa883, 0x0029,\r
-+      0x012e, 0x00ee, 0x00be, 0x0420, 0xa883, 0x002a, 0x0cc8, 0xa883,\r
-+      0x0045, 0x0cb0, 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c,\r
-+      0xd0e5, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2009, 0x003e, 0x0058,\r
-+      0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028, 0x2009, 0x0016,\r
-+      0x0010, 0x2009, 0x0001, 0xa884, 0x9084, 0xff00, 0x9105, 0xa886,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x688c, 0x012e, 0x0005, 0x080c,\r
-+      0x101d, 0x0005, 0x00d6, 0x080c, 0x8146, 0x00de, 0x0005, 0x00d6,\r
-+      0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040, 0x702c, 0xd084,\r
-+      0x01d8, 0x908c, 0x0780, 0x190c, 0x7923, 0xd09c, 0x11a8, 0x2071,\r
-+      0x1800, 0x70bc, 0x90ea, 0x0040, 0x0278, 0x8001, 0x70be, 0x702c,\r
-+      0x2048, 0xa800, 0x702e, 0x9006, 0xa802, 0xa806, 0x2071, 0x0040,\r
-+      0x2900, 0x7022, 0x702c, 0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005,\r
-+      0x0006, 0x9084, 0x0780, 0x190c, 0x7923, 0x000e, 0x0005, 0x00d6,\r
-+      0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa74,\r
-+      0x9282, 0x0004, 0x1a04, 0x7914, 0xa97c, 0x9188, 0x1000, 0x2104,\r
-+      0x905d, 0xb804, 0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff,\r
-+      0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c, 0x9ddc, 0x1118,\r
-+      0x080c, 0x9e7f, 0x05a8, 0x6212, 0xa874, 0x0002, 0x78f2, 0x78f7,\r
-+      0x78fa, 0x7900, 0x2019, 0x0002, 0x080c, 0xd4a6, 0x0060, 0x080c,\r
-+      0xd442, 0x0048, 0x2019, 0x0002, 0xa980, 0x080c, 0xd45d, 0x0018,\r
-+      0xa980, 0x080c, 0xd442, 0x080c, 0x9e32, 0xa887, 0x0000, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x688c, 0x012e, 0x00be, 0x001e, 0x002e,\r
-+      0x003e, 0x00ce, 0x00de, 0x0005, 0xa887, 0x0006, 0x0c80, 0xa887,\r
-+      0x0002, 0x0c68, 0xa887, 0x0005, 0x0c50, 0xa887, 0x0004, 0x0c38,\r
-+      0xa887, 0x0007, 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7925, 0x0006,\r
-+      0x0016, 0x2001, 0x8003, 0x0006, 0x0804, 0x0dbd, 0x2001, 0x1833,\r
-+      0x2004, 0x9005, 0x0005, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001,\r
-+      0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c,\r
-+      0xd1ec, 0x1120, 0x080c, 0x14a7, 0x00fe, 0x0005, 0x2001, 0x020d,\r
-+      0x2003, 0x0020, 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c,\r
-+      0x0904, 0x79a5, 0x68bc, 0x90aa, 0x0005, 0x0a04, 0x7f54, 0x7d44,\r
-+      0x7c40, 0x9584, 0x00f6, 0x1510, 0x9484, 0x7000, 0x0140, 0x908a,\r
-+      0x2000, 0x1260, 0x9584, 0x0700, 0x8007, 0x0804, 0x79ac, 0x7000,\r
-+      0x9084, 0xff00, 0x9086, 0x8100, 0x0da8, 0x00b0, 0x9484, 0x0fff,\r
-+      0x1130, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c,\r
-+      0xd88c, 0x080c, 0x7e99, 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076,\r
-+      0x1118, 0x080c, 0x7ef7, 0x19c0, 0xd5a4, 0x0148, 0x0046, 0x0056,\r
-+      0x080c, 0x7a07, 0x080c, 0x21cd, 0x005e, 0x004e, 0x0020, 0x080c,\r
-+      0xd88c, 0x7817, 0x0140, 0x080c, 0x6fb2, 0x0168, 0x2001, 0x0111,\r
-+      0x2004, 0xd08c, 0x0140, 0x688f, 0x0000, 0x2001, 0x0110, 0x2003,\r
-+      0x0008, 0x2003, 0x0000, 0x080c, 0x79e8, 0x2001, 0x19c1, 0x2004,\r
-+      0x9005, 0x090c, 0x8973, 0x0005, 0x0002, 0x79be, 0x7cbb, 0x79b5,\r
-+      0x79b5, 0x79b5, 0x79b5, 0x79b5, 0x79b5, 0x7817, 0x0140, 0x2001,\r
-+      0x19c1, 0x2004, 0x9005, 0x090c, 0x8973, 0x0005, 0x7000, 0x908c,\r
-+      0xff00, 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x688e, 0x9286,\r
-+      0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x53e7,\r
-+      0x0070, 0x080c, 0x7a27, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c,\r
-+      0x7bf6, 0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x7dc9, 0x7817,\r
-+      0x0140, 0x2001, 0x19c1, 0x2004, 0x9005, 0x090c, 0x8973, 0x0005,\r
-+      0x2001, 0x1810, 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004,\r
-+      0x9086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518,\r
-+      0x080c, 0x48d9, 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056,\r
-+      0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036,\r
-+      0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019,\r
-+      0xffff, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800,\r
-+      0x2004, 0x9086, 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c,\r
-+      0x48d9, 0x002e, 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6,\r
-+      0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120,\r
-+      0x9096, 0x0023, 0x1904, 0x7bc7, 0x9186, 0x0023, 0x15c0, 0x080c,\r
-+      0x7e5e, 0x0904, 0x7bc7, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186,\r
-+      0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904,\r
-+      0x7bc7, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009,\r
-+      0x0015, 0x080c, 0x9eac, 0x0804, 0x7bc7, 0x908e, 0x0214, 0x0118,\r
-+      0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0x9eac, 0x0804,\r
-+      0x7bc7, 0x908e, 0x0100, 0x1904, 0x7bc7, 0x7034, 0x9005, 0x1904,\r
-+      0x7bc7, 0x2009, 0x0016, 0x080c, 0x9eac, 0x0804, 0x7bc7, 0x9186,\r
-+      0x0022, 0x1904, 0x7bc7, 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8,\r
-+      0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100, 0x918c, 0x00ff, 0x697a,\r
-+      0x7004, 0x687e, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006,\r
-+      0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x26ac, 0x7932, 0x7936,\r
-+      0x001e, 0x000e, 0x00fe, 0x080c, 0x2663, 0x695a, 0x703c, 0x00e6,\r
-+      0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034,\r
-+      0x9005, 0x1904, 0x7bc7, 0x2009, 0x0017, 0x0804, 0x7b77, 0x908e,\r
-+      0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x7bc7, 0x080c, 0x6fb2,\r
-+      0x0120, 0x2009, 0x001d, 0x0804, 0x7b77, 0x68d8, 0xc0a5, 0x68da,\r
-+      0x2009, 0x0030, 0x0804, 0x7b77, 0x908e, 0x0500, 0x1140, 0x7034,\r
-+      0x9005, 0x1904, 0x7bc7, 0x2009, 0x0018, 0x0804, 0x7b77, 0x908e,\r
-+      0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x7b77, 0x908e, 0x2110,\r
-+      0x1120, 0x2009, 0x001a, 0x0804, 0x7b77, 0x908e, 0x5200, 0x1140,\r
-+      0x7034, 0x9005, 0x1904, 0x7bc7, 0x2009, 0x001b, 0x0804, 0x7b77,\r
-+      0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x7bc7, 0x2009,\r
-+      0x001c, 0x0804, 0x7b77, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034,\r
-+      0x0804, 0x7b77, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904,\r
-+      0x7bc7, 0x2009, 0x0024, 0x0804, 0x7b77, 0x908c, 0xff00, 0x918e,\r
-+      0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c,\r
-+      0x0904, 0x7b77, 0x080c, 0xc8b8, 0x1904, 0x7bc7, 0x0804, 0x7b75,\r
-+      0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804,\r
-+      0x7b77, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7b77,\r
-+      0x908e, 0x6104, 0x1528, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208,\r
-+      0x2204, 0x9082, 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015,\r
-+      0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x48d9, 0x004e, 0x8108,\r
-+      0x0f04, 0x7b43, 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a,\r
-+      0x2009, 0x0260, 0x0c58, 0x202b, 0x0000, 0x2009, 0x0023, 0x0478,\r
-+      0x908e, 0x6000, 0x1118, 0x2009, 0x003f, 0x0448, 0x908e, 0x7800,\r
-+      0x1118, 0x2009, 0x0045, 0x0418, 0x908e, 0x1000, 0x1118, 0x2009,\r
-+      0x004e, 0x00e8, 0x908e, 0x6300, 0x1118, 0x2009, 0x004a, 0x00b8,\r
-+      0x908c, 0xff00, 0x918e, 0x5600, 0x1118, 0x2009, 0x004f, 0x0078,\r
-+      0x908c, 0xff00, 0x918e, 0x5700, 0x1118, 0x2009, 0x0050, 0x0038,\r
-+      0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016,\r
-+      0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2663, 0x1904,\r
-+      0x7bca, 0x080c, 0x61de, 0x1904, 0x7bca, 0xbe12, 0xbd16, 0x001e,\r
-+      0x0016, 0x080c, 0x6fb2, 0x01c0, 0x68d8, 0xd08c, 0x1148, 0x7000,\r
-+      0x9084, 0x00ff, 0x1188, 0x7004, 0x9084, 0xff00, 0x1168, 0x0040,\r
-+      0x6878, 0x9606, 0x1148, 0x687c, 0x9506, 0x9084, 0xff00, 0x1120,\r
-+      0x9584, 0x00ff, 0xb8b2, 0x0080, 0xb8b0, 0x9005, 0x1168, 0x9186,\r
-+      0x0046, 0x1150, 0x6878, 0x9606, 0x1138, 0x687c, 0x9506, 0x9084,\r
-+      0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0x9ddc, 0x01a8, 0x2b08,\r
-+      0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c,\r
-+      0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0x9eac, 0x00ce,\r
-+      0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180e, 0x2004, 0xd0ec,\r
-+      0x0120, 0x2011, 0x8049, 0x080c, 0x48d9, 0x080c, 0x9e7f, 0x0d90,\r
-+      0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x0016,\r
-+      0x9186, 0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007, 0x0009,\r
-+      0x6017, 0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000, 0x602f,\r
-+      0x0009, 0x6003, 0x0001, 0x080c, 0x8439, 0x08a0, 0x080c, 0x30fd,\r
-+      0x1140, 0x7010, 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, 0x1108,\r
-+      0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, 0xff00,\r
-+      0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, 0x7e5e, 0x0904, 0x7c53,\r
-+      0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1140, 0x7034, 0x9005,\r
-+      0x15d0, 0x2009, 0x0015, 0x080c, 0x9eac, 0x04a8, 0x908e, 0x0100,\r
-+      0x1590, 0x7034, 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0x9eac,\r
-+      0x0450, 0x9186, 0x0032, 0x1538, 0x7030, 0x908e, 0x1400, 0x1518,\r
-+      0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,\r
-+      0x080c, 0x2663, 0x11b8, 0x080c, 0x61de, 0x11a0, 0xbe12, 0xbd16,\r
-+      0x080c, 0x9ddc, 0x0178, 0x2b08, 0x6112, 0x080c, 0xbf8c, 0x6023,\r
-+      0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x9eac, 0x080c, 0x8973,\r
-+      0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, 0x00b6,\r
-+      0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, 0x11b8,\r
-+      0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, 0x007f,\r
-+      0x0804, 0x7cb5, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804,\r
-+      0x7cb5, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011,\r
-+      0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9,\r
-+      0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x077f,\r
-+      0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, 0x11d0,\r
-+      0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, 0x2600,\r
-+      0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, 0x9745,\r
-+      0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, 0x94c6,\r
-+      0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7c8a, 0x82ff, 0x1118,\r
-+      0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee,\r
-+      0x004e, 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184,\r
-+      0x000f, 0x0002, 0x7cd2, 0x7cd2, 0x7cd2, 0x7e70, 0x7cd2, 0x7cdb,\r
-+      0x7d06, 0x7d94, 0x7cd2, 0x7cd2, 0x7cd2, 0x7cd2, 0x7cd2, 0x7cd2,\r
-+      0x7cd2, 0x7cd2, 0x7817, 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005,\r
-+      0x090c, 0x8973, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120,\r
-+      0x2160, 0x9c8c, 0x0007, 0x11c0, 0x9c8a, 0x1cd0, 0x02a8, 0x6864,\r
-+      0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910,\r
-+      0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a,\r
-+      0x2009, 0x0046, 0x080c, 0x9eac, 0x7817, 0x0140, 0x2001, 0x19c1,\r
-+      0x2004, 0x9005, 0x090c, 0x8973, 0x00be, 0x0005, 0x00b6, 0x00c6,\r
-+      0x9484, 0x0fff, 0x0904, 0x7d6a, 0x7110, 0xd1bc, 0x1904, 0x7d6a,\r
-+      0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00,\r
-+      0x15b0, 0x81ff, 0x15a0, 0x9080, 0x3138, 0x200d, 0x918c, 0xff00,\r
-+      0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x7d6a, 0x080c, 0x61de,\r
-+      0x1904, 0x7d6a, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15d8, 0xba04,\r
-+      0x9294, 0xff00, 0x9286, 0x0600, 0x11a0, 0x080c, 0x9ddc, 0x05e8,\r
-+      0x2b08, 0x7028, 0x604a, 0x702c, 0x6046, 0x6112, 0x6023, 0x0006,\r
-+      0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xcb14,\r
-+      0x0408, 0x080c, 0x6562, 0x1138, 0xb807, 0x0606, 0x0c30, 0x190c,\r
-+      0x7c57, 0x11c0, 0x0898, 0x080c, 0x9ddc, 0x2b08, 0x0198, 0x6112,\r
-+      0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007,\r
-+      0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x8439,\r
-+      0x080c, 0x8973, 0x7817, 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005,\r
-+      0x090c, 0x8973, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004,\r
-+      0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d9, 0x080c, 0x9e7f,\r
-+      0x0d48, 0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130,\r
-+      0x6156, 0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,\r
-+      0x83f1, 0x080c, 0x8973, 0x08b0, 0x00b6, 0x7110, 0xd1bc, 0x01e8,\r
-+      0x7020, 0x2060, 0x9c84, 0x0007, 0x11c0, 0x9c82, 0x1cd0, 0x02a8,\r
-+      0x6864, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158,\r
-+      0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124,\r
-+      0x610a, 0x2009, 0x0045, 0x080c, 0x9eac, 0x7817, 0x0140, 0x2001,\r
-+      0x19c1, 0x2004, 0x9005, 0x090c, 0x8973, 0x00be, 0x0005, 0x6120,\r
-+      0x9186, 0x0002, 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001,\r
-+      0x0005, 0x080c, 0x30fd, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007,\r
-+      0x9086, 0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208,\r
-+      0x000b, 0x0005, 0x7de0, 0x7de1, 0x7de0, 0x7de0, 0x7e40, 0x7e4f,\r
-+      0x0005, 0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904,\r
-+      0x7e3e, 0x700c, 0x7108, 0x080c, 0x2663, 0x1904, 0x7e3e, 0x080c,\r
-+      0x61de, 0x1904, 0x7e3e, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8,\r
-+      0x080c, 0x6562, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c,\r
-+      0x7e5e, 0x00ce, 0x05d8, 0x080c, 0x9ddc, 0x2b08, 0x05b8, 0x6112,\r
-+      0x080c, 0xbf8c, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088,\r
-+      0x080c, 0x9eac, 0x0458, 0x080c, 0x6562, 0x0148, 0x9086, 0x0004,\r
-+      0x0130, 0x080c, 0x656a, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c,\r
-+      0x9ddc, 0x2b08, 0x01d8, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0005,\r
-+      0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x9eac, 0x0078, 0x080c,\r
-+      0x9ddc, 0x2b08, 0x0158, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0004,\r
-+      0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x9eac, 0x00be, 0x0005,\r
-+      0x7110, 0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x7dbf, 0x1130,\r
-+      0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0x9eac, 0x0005, 0x7110,\r
-+      0xd1bc, 0x0158, 0x0059, 0x0148, 0x080c, 0x7dbf, 0x1130, 0x7124,\r
-+      0x610a, 0x2009, 0x008a, 0x080c, 0x9eac, 0x0005, 0x7020, 0x2060,\r
-+      0x9c84, 0x0007, 0x1158, 0x9c82, 0x1cd0, 0x0240, 0x2001, 0x1819,\r
-+      0x2004, 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8,\r
-+      0x00b6, 0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0007,\r
-+      0x11b0, 0x9c82, 0x1cd0, 0x0298, 0x6864, 0x9c02, 0x1280, 0x7008,\r
-+      0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c,\r
-+      0xb914, 0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0x9eac, 0x7817,\r
-+      0x0140, 0x2001, 0x19c1, 0x2004, 0x9005, 0x090c, 0x8973, 0x00be,\r
-+      0x0005, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049,\r
-+      0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009,\r
-+      0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086,\r
-+      0xc000, 0x05d0, 0x080c, 0x9ddc, 0x05b8, 0x0066, 0x00c6, 0x0046,\r
-+      0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2663, 0x15a0,\r
-+      0x080c, 0x61de, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce,\r
-+      0x6012, 0x080c, 0xbf8c, 0x080c, 0x0feb, 0x0510, 0x2900, 0x605a,\r
-+      0x9006, 0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b, 0x20a9,\r
-+      0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003,\r
-+      0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001,\r
-+      0x080c, 0x8439, 0x080c, 0x8973, 0x00fe, 0x009e, 0x00ce, 0x0005,\r
-+      0x080c, 0x9e32, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6,\r
-+      0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000,\r
-+      0x1904, 0x7f4e, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004,\r
-+      0x9005, 0x1904, 0x7f50, 0x7030, 0x908e, 0x0400, 0x0904, 0x7f50,\r
-+      0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300,\r
-+      0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580,\r
-+      0x080c, 0x6520, 0x0558, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c,\r
-+      0x00ff, 0x9106, 0x1518, 0x687c, 0x69ac, 0x918c, 0xff00, 0x9105,\r
-+      0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4,\r
-+      0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e,\r
-+      0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x7e5e,\r
-+      0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010,\r
-+      0x9085, 0x0001, 0x00ce, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800,\r
-+      0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800,\r
-+      0x7834, 0xd084, 0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200,\r
-+      0x7802, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084,\r
-+      0x7036, 0x00ee, 0x0005, 0x2071, 0x19cb, 0x7003, 0x0003, 0x700f,\r
-+      0x0361, 0x9006, 0x701a, 0x7072, 0x7012, 0x7017, 0x1cd0, 0x7007,\r
-+      0x0000, 0x7026, 0x702b, 0x93c2, 0x7032, 0x7037, 0x9430, 0x703f,\r
-+      0xffff, 0x7042, 0x7047, 0x5225, 0x704a, 0x705b, 0x80d3, 0x080c,\r
-+      0x1004, 0x090c, 0x0db4, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f,\r
-+      0x0100, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19cb, 0x1d04, 0x8027,\r
-+      0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x1510, 0x2001, 0x1875,\r
-+      0x2004, 0xd0c4, 0x0158, 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000,\r
-+      0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c, 0x0db4, 0x700f, 0x0361,\r
-+      0x7007, 0x0001, 0x0126, 0x2091, 0x8000, 0x080c, 0x8118, 0x7040,\r
-+      0x900d, 0x0148, 0x8109, 0x7142, 0x1130, 0x7044, 0x080f, 0x0018,\r
-+      0x0126, 0x2091, 0x8000, 0x7024, 0x900d, 0x0188, 0x7020, 0x8001,\r
-+      0x7022, 0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0x9186, 0x03e8,\r
-+      0x1110, 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030,\r
-+      0x900d, 0x0180, 0x702c, 0x8001, 0x702e, 0x1160, 0x702f, 0x0009,\r
-+      0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c, 0x953d, 0x0010,\r
-+      0x7034, 0x080f, 0x703c, 0x9005, 0x0118, 0x0310, 0x8001, 0x703e,\r
-+      0x704c, 0x900d, 0x0168, 0x7048, 0x8001, 0x704a, 0x1148, 0x704b,\r
-+      0x0009, 0x8109, 0x714e, 0x1120, 0x7150, 0x714e, 0x7058, 0x080f,\r
-+      0x7018, 0x900d, 0x01d8, 0x0016, 0x7070, 0x900d, 0x0158, 0x706c,\r
-+      0x8001, 0x706e, 0x1138, 0x706f, 0x0009, 0x8109, 0x7172, 0x1110,\r
-+      0x7074, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a, 0x1138, 0x700b,\r
-+      0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f, 0x012e, 0x7004,\r
-+      0x0002, 0x804f, 0x8050, 0x806c, 0x00e6, 0x2071, 0x19cb, 0x7018,\r
-+      0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005,\r
-+      0x00e6, 0x0006, 0x2071, 0x19cb, 0x701c, 0x9206, 0x1120, 0x701a,\r
-+      0x701e, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071,\r
-+      0x19cb, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005,\r
-+      0x00b6, 0x7110, 0x080c, 0x623e, 0x1168, 0xb888, 0x8001, 0x0250,\r
-+      0xb88a, 0x1140, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0x8973,\r
-+      0x001e, 0x012e, 0x8108, 0x9182, 0x0800, 0x0218, 0x900e, 0x7007,\r
-+      0x0002, 0x7112, 0x00be, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091,\r
-+      0x8000, 0x6040, 0x9005, 0x0128, 0x8001, 0x6042, 0x1110, 0x080c,\r
-+      0xbe1d, 0x6018, 0x9005, 0x0528, 0x8001, 0x601a, 0x1510, 0x6120,\r
-+      0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x11c8, 0x080c, 0xbb17,\r
-+      0x01b0, 0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280, 0x9082,\r
-+      0x1999, 0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,\r
-+      0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0xd0e4, 0x0110, 0x080c,\r
-+      0xb815, 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001, 0x1819, 0x2004,\r
-+      0x9102, 0x0220, 0x7017, 0x1cd0, 0x7007, 0x0000, 0x0005, 0x00e6,\r
-+      0x2071, 0x19cb, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005,\r
-+      0x2001, 0x19d4, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19cb,\r
-+      0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x19d7, 0x2013,\r
-+      0x0000, 0x0005, 0x00e6, 0x2071, 0x19cb, 0x711a, 0x721e, 0x700b,\r
-+      0x0009, 0x00ee, 0x0005, 0x0086, 0x0026, 0x7054, 0x8000, 0x7056,\r
-+      0x2001, 0x19d9, 0x2044, 0xa06c, 0x9086, 0x0000, 0x0150, 0x7068,\r
-+      0xa09a, 0x7064, 0xa096, 0x7060, 0xa092, 0x705c, 0xa08e, 0x080c,\r
-+      0x10d5, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6,\r
-+      0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x7f9c,\r
-+      0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,\r
-+      0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19cb, 0x7172, 0x7276,\r
-+      0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19cb,\r
-+      0x7074, 0x9206, 0x1110, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005,\r
-+      0x2069, 0x1800, 0x69e4, 0xd1e4, 0x1518, 0x0026, 0xd1ec, 0x0140,\r
-+      0x6a50, 0x6870, 0x9202, 0x0288, 0x8117, 0x9294, 0x00c0, 0x0088,\r
-+      0x9184, 0x0007, 0x01a0, 0x8109, 0x9184, 0x0007, 0x0110, 0x69e6,\r
-+      0x0070, 0x8107, 0x9084, 0x0007, 0x910d, 0x8107, 0x9106, 0x9094,\r
-+      0x00c0, 0x9184, 0xff3f, 0x9205, 0x68e6, 0x080c, 0x0ecb, 0x002e,\r
-+      0x0005, 0x00c6, 0x2061, 0x1a41, 0x00ce, 0x0005, 0x9184, 0x000f,\r
-+      0x8003, 0x8003, 0x8003, 0x9080, 0x1a41, 0x2060, 0x0005, 0xa884,\r
-+      0x908a, 0x199a, 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a41,\r
-+      0x6014, 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e,\r
-+      0xffff, 0x01b0, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c,\r
-+      0x908c, 0x00c0, 0x918e, 0x00c0, 0x0904, 0x81d9, 0xd0b4, 0x1168,\r
-+      0xd0bc, 0x1904, 0x81b2, 0x2009, 0x0006, 0x080c, 0x8206, 0x0005,\r
-+      0x900e, 0x0c60, 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x0160, 0x908c,\r
-+      0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x8200, 0x908c, 0x2020,\r
-+      0x918e, 0x2020, 0x01a8, 0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1875,\r
-+      0x2104, 0xd084, 0x1138, 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804,\r
-+      0x9eac, 0x0005, 0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804, 0x9eac,\r
-+      0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6024,\r
-+      0xc0cd, 0x6026, 0x0c00, 0xc0d4, 0x6026, 0xa890, 0x602e, 0xa88c,\r
-+      0x6032, 0x08e0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e,\r
-+      0x0003, 0x1904, 0x8200, 0x908c, 0x2020, 0x918e, 0x2020, 0x0170,\r
-+      0x0076, 0x00f6, 0x2c78, 0x080c, 0x1648, 0x00fe, 0x007e, 0x87ff,\r
-+      0x1120, 0x2009, 0x0042, 0x080c, 0x9eac, 0x0005, 0x6110, 0x00b6,\r
-+      0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d58, 0x6124, 0xc1cd, 0x6126,\r
-+      0x0c38, 0xd0fc, 0x0188, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8,\r
-+      0x9084, 0x0003, 0x908e, 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009,\r
-+      0x0041, 0x080c, 0x9eac, 0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8,\r
-+      0x2009, 0x0043, 0x080c, 0x9eac, 0x0cb0, 0x6110, 0x00b6, 0x2158,\r
-+      0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00,\r
-+      0x2009, 0x0004, 0x0019, 0x0005, 0x2009, 0x0001, 0x0096, 0x080c,\r
-+      0xbb17, 0x0518, 0x6014, 0x2048, 0xa982, 0xa800, 0x6016, 0x9186,\r
-+      0x0001, 0x1188, 0xa97c, 0x918c, 0x8100, 0x918e, 0x8100, 0x1158,\r
-+      0x00c6, 0x2061, 0x1a41, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210,\r
-+      0x0208, 0x6206, 0x00ce, 0x080c, 0x66c6, 0x6014, 0x904d, 0x0076,\r
-+      0x2039, 0x0000, 0x190c, 0x814f, 0x007e, 0x009e, 0x0005, 0x0156,\r
-+      0x00c6, 0x2061, 0x1a41, 0x6000, 0x81ff, 0x0110, 0x9205, 0x0008,\r
-+      0x9204, 0x6002, 0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138,\r
-+      0x6808, 0x9005, 0x0120, 0x8001, 0x680a, 0x9085, 0x0001, 0x0005,\r
-+      0x0126, 0x2091, 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010, 0x9006,\r
-+      0x8004, 0x2019, 0x0100, 0x231c, 0x93a6, 0x0008, 0x1118, 0x8086,\r
-+      0x818e, 0x0020, 0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x1208, 0x9200,\r
-+      0x1f04, 0x8251, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e, 0x0020,\r
-+      0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x004e, 0x003e, 0x012e, 0x0005,\r
-+      0x0126, 0x2091, 0x8000, 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005,\r
-+      0x0510, 0x911a, 0x1600, 0x8213, 0x2039, 0x0100, 0x273c, 0x97be,\r
-+      0x0008, 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x0228, 0x911a,\r
-+      0x1220, 0x1f04, 0x827b, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04,\r
-+      0x827b, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e,\r
-+      0x007e, 0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8,\r
-+      0x0126, 0x2091, 0x2800, 0x2079, 0x19b8, 0x012e, 0x00d6, 0x2069,\r
-+      0x19b8, 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000,\r
-+      0x2069, 0x0200, 0x080c, 0x9c3f, 0x0401, 0x080c, 0x9c2a, 0x00e9,\r
-+      0x080c, 0x9c2d, 0x00d1, 0x080c, 0x9c30, 0x00b9, 0x080c, 0x9c33,\r
-+      0x00a1, 0x080c, 0x9c36, 0x0089, 0x080c, 0x9c39, 0x0071, 0x080c,\r
-+      0x9c3c, 0x0059, 0x01de, 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04,\r
-+      0x9085, 0x8001, 0x206a, 0x00de, 0x0005, 0x20a9, 0x0020, 0x20a1,\r
-+      0x0240, 0x2001, 0x0000, 0x4004, 0x0005, 0x00c6, 0x6027, 0x0001,\r
-+      0x7804, 0x9084, 0x0007, 0x0002, 0x82ee, 0x8312, 0x8351, 0x82f4,\r
-+      0x8312, 0x82ee, 0x82ec, 0x82ec, 0x080c, 0x0db4, 0x080c, 0x80b8,\r
-+      0x080c, 0x8973, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce,\r
-+      0x0005, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x7828, 0x9092, 0x00c8,\r
-+      0x1228, 0x8000, 0x782a, 0x080c, 0x5b7a, 0x0c88, 0x62c0, 0x080c,\r
-+      0x9c43, 0x080c, 0x5b3a, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b,\r
-+      0x0000, 0x0c28, 0x080c, 0x80b8, 0x6220, 0xd2a4, 0x0160, 0x782b,\r
-+      0x0000, 0x7824, 0x9065, 0x090c, 0x0db4, 0x2009, 0x0013, 0x080c,\r
-+      0x9eac, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0db4,\r
-+      0x7828, 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c,\r
-+      0x29ca, 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c,\r
-+      0x0db4, 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x8973,\r
-+      0x0c00, 0x080c, 0x9388, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c,\r
-+      0x9c43, 0x080c, 0xd8c9, 0x2009, 0x0014, 0x080c, 0x9eac, 0x00ce,\r
-+      0x0880, 0x2001, 0x19d4, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160,\r
-+      0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0db4, 0x2009, 0x0013,\r
-+      0x080c, 0x9efe, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824,\r
-+      0x9005, 0x090c, 0x0db4, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000,\r
-+      0x782a, 0x00de, 0x00ce, 0x00be, 0x080c, 0x29ca, 0x02f0, 0x00b6,\r
-+      0x00c6, 0x00d6, 0x781c, 0x905d, 0x090c, 0x0db4, 0xb800, 0xc0dc,\r
-+      0xb802, 0x7924, 0x2160, 0x080c, 0x9e32, 0xb93c, 0x81ff, 0x090c,\r
-+      0x0db4, 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de,\r
-+      0x00ce, 0x00be, 0x080c, 0x8973, 0x0868, 0x080c, 0x9388, 0x0850,\r
-+      0x2011, 0x0130, 0x2214, 0x080c, 0x9c43, 0x080c, 0xd8c9, 0x7824,\r
-+      0x9065, 0x2009, 0x0014, 0x080c, 0x9eac, 0x00de, 0x00ce, 0x00be,\r
-+      0x0804, 0x8362, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c,\r
-+      0x1d4a, 0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4,\r
-+      0x9205, 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c,\r
-+      0x9eac, 0x00ce, 0x0005, 0x2011, 0x19d7, 0x2013, 0x0000, 0x0cc8,\r
-+      0x793c, 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x12f0, 0x8108,\r
-+      0x7946, 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138,\r
-+      0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x6014,\r
-+      0x9084, 0x1984, 0x9085, 0x0016, 0x6016, 0x08d8, 0x793c, 0x2160,\r
-+      0x2009, 0x004a, 0x080c, 0x9eac, 0x08a0, 0x7848, 0xc085, 0x784a,\r
-+      0x0880, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f,\r
-+      0x0000, 0x2c08, 0x2061, 0x19b8, 0x6020, 0x8000, 0x6022, 0x6010,\r
-+      0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce,\r
-+      0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069,\r
-+      0x19b8, 0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086,\r
-+      0x0001, 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x8973, 0x00de,\r
-+      0x0005, 0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b,\r
-+      0x0000, 0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e,\r
-+      0x2069, 0x19b8, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e,\r
-+      0x08d8, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f,\r
-+      0x0000, 0x2c08, 0x2061, 0x19b8, 0x6020, 0x8000, 0x6022, 0x6008,\r
-+      0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce,\r
-+      0x001e, 0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f,\r
-+      0x0000, 0x2c08, 0x2061, 0x19b8, 0x6034, 0x9005, 0x0130, 0x9080,\r
-+      0x0003, 0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce,\r
-+      0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076,\r
-+      0x0066, 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e,\r
-+      0x2071, 0x19b8, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff,\r
-+      0x0904, 0x84e0, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x84db,\r
-+      0x87ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x84db, 0x703c, 0x9c06,\r
-+      0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x96d8, 0x7033, 0x0000,\r
-+      0x9006, 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001,\r
-+      0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140,\r
-+      0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,\r
-+      0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,\r
-+      0x600f, 0x0000, 0x080c, 0xbb17, 0x01c8, 0x6014, 0x2048, 0x6020,\r
-+      0x9086, 0x0003, 0x1590, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,\r
-+      0x0016, 0x0036, 0x0076, 0x080c, 0xbe06, 0x080c, 0xd7d3, 0x080c,\r
-+      0x688c, 0x007e, 0x003e, 0x001e, 0x080c, 0xbd00, 0x080c, 0x9e62,\r
-+      0x00ce, 0x0804, 0x847f, 0x2c78, 0x600c, 0x2060, 0x0804, 0x847f,\r
-+      0x85ff, 0x0120, 0x0036, 0x080c, 0x8a4e, 0x003e, 0x012e, 0x000e,\r
-+      0x001e, 0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x009e, 0x00be,\r
-+      0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006,\r
-+      0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xd7d3, 0x080c, 0xd4d5,\r
-+      0x007e, 0x003e, 0x001e, 0x0890, 0x6020, 0x9086, 0x000a, 0x0904,\r
-+      0x84c5, 0x0804, 0x84c3, 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6,\r
-+      0x00f6, 0x9036, 0x0126, 0x2091, 0x8000, 0x2079, 0x19b8, 0x7838,\r
-+      0x9065, 0x0904, 0x855b, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c,\r
-+      0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0x96d8, 0x7833,\r
-+      0x0000, 0x901e, 0x7b3e, 0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c,\r
-+      0xbb17, 0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1568,\r
-+      0x3e08, 0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6,\r
-+      0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6040, 0x9005, 0x1180,\r
-+      0x2001, 0x1959, 0x2004, 0x6042, 0x0058, 0xa867, 0x0103, 0xab7a,\r
-+      0xa877, 0x0000, 0x080c, 0x687f, 0x080c, 0xbd00, 0x080c, 0x9e62,\r
-+      0x000e, 0x0804, 0x8518, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de,\r
-+      0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, 0x0006,\r
-+      0x1118, 0x080c, 0xd4d5, 0x0c50, 0x6020, 0x9086, 0x000a, 0x09f8,\r
-+      0x08e0, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099, 0x080c, 0x865a,\r
-+      0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, 0x19b8,\r
-+      0x2091, 0x8000, 0x080c, 0x86f1, 0x080c, 0x877f, 0x012e, 0x00fe,\r
-+      0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066,\r
-+      0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7614,\r
-+      0x2660, 0x2678, 0x8cff, 0x0904, 0x861f, 0x6010, 0x2058, 0xb8a0,\r
-+      0x9206, 0x1904, 0x861a, 0x88ff, 0x0120, 0x6054, 0x9106, 0x1904,\r
-+      0x861a, 0x7024, 0x9c06, 0x1558, 0x2069, 0x0100, 0x6820, 0xd0a4,\r
-+      0x1508, 0x080c, 0x80b8, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c,\r
-+      0x98da, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,\r
-+      0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c,\r
-+      0x2b14, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001,\r
-+      0x003e, 0x0028, 0x6003, 0x0009, 0x630a, 0x0804, 0x861a, 0x7014,\r
-+      0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36, 0x1140, 0x2c00,\r
-+      0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c,\r
-+      0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,\r
-+      0x0000, 0x6014, 0x2048, 0x080c, 0xbb17, 0x01e8, 0x6020, 0x9086,\r
-+      0x0003, 0x1580, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x0098,\r
-+      0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0086,\r
-+      0x080c, 0xbe06, 0x080c, 0xd7d3, 0x080c, 0x688c, 0x008e, 0x003e,\r
-+      0x001e, 0x080c, 0xbd00, 0x080c, 0x9e62, 0x080c, 0x97b0, 0x00ce,\r
-+      0x0804, 0x859a, 0x2c78, 0x600c, 0x2060, 0x0804, 0x859a, 0x012e,\r
-+      0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e,\r
-+      0x00be, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036,\r
-+      0x0086, 0x080c, 0xd7d3, 0x080c, 0xd4d5, 0x008e, 0x003e, 0x001e,\r
-+      0x08d0, 0x080c, 0xa7c0, 0x6020, 0x9086, 0x0002, 0x1160, 0x6004,\r
-+      0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x8600, 0x9086, 0x008b,\r
-+      0x0904, 0x8600, 0x0840, 0x6020, 0x9086, 0x0005, 0x1920, 0x6004,\r
-+      0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086, 0x008b, 0x09b0,\r
-+      0x0804, 0x8613, 0x00b6, 0x00a6, 0x0096, 0x00c6, 0x0006, 0x0126,\r
-+      0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x0904, 0x86ea,\r
-+      0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0x19b8, 0xbe54, 0x7018,\r
-+      0x9b06, 0x1108, 0x761a, 0x701c, 0x9b06, 0x1130, 0x86ff, 0x1118,\r
-+      0x7018, 0x701e, 0x0008, 0x761e, 0xb858, 0x904d, 0x0108, 0xae56,\r
-+      0x96d5, 0x0000, 0x0110, 0x2900, 0xb05a, 0xb857, 0x0000, 0xb85b,\r
-+      0x0000, 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x6171, 0x0904,\r
-+      0x86e6, 0x7624, 0x86ff, 0x0904, 0x86d5, 0x9680, 0x0005, 0x2004,\r
-+      0x9906, 0x15d8, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0560,\r
-+      0x080c, 0x80b8, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c, 0x98da,\r
-+      0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,\r
-+      0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14,\r
-+      0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,\r
-+      0x00de, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660,\r
-+      0x080c, 0x9e62, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003,\r
-+      0x0009, 0x630a, 0x00ce, 0x0804, 0x868d, 0x89ff, 0x0158, 0xa867,\r
-+      0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbe06, 0x080c, 0xd7d3,\r
-+      0x080c, 0x688c, 0x080c, 0x97b0, 0x0804, 0x868d, 0x006e, 0x00de,\r
-+      0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce, 0x009e, 0x00ae, 0x00be,\r
-+      0x0005, 0x0096, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036, 0x7814,\r
-+      0x9065, 0x0904, 0x8752, 0x600c, 0x0006, 0x600f, 0x0000, 0x7824,\r
-+      0x9c06, 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c,\r
-+      0x80b8, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c, 0x98da, 0x7827,\r
-+      0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,\r
-+      0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x2069,\r
-+      0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040,\r
-+      0x080c, 0x6518, 0x1520, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00f8,\r
-+      0x6014, 0x2048, 0x080c, 0xbb15, 0x01b0, 0x6020, 0x9086, 0x0003,\r
-+      0x1508, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x0060, 0x080c,\r
-+      0x6518, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c,\r
-+      0x688c, 0x080c, 0xbd00, 0x080c, 0x9e62, 0x080c, 0x97b0, 0x000e,\r
-+      0x0804, 0x86f8, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e,\r
-+      0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xd4d5,\r
-+      0x0c50, 0x080c, 0xa7c0, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004,\r
-+      0x0006, 0x9086, 0x0085, 0x000e, 0x0990, 0x9086, 0x008b, 0x0978,\r
-+      0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086,\r
-+      0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006,\r
-+      0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, 0x0904,\r
-+      0x87ff, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4,\r
-+      0xc0dc, 0xb802, 0x080c, 0x6171, 0x0904, 0x87fc, 0x7e24, 0x86ff,\r
-+      0x0904, 0x87ef, 0x9680, 0x0005, 0x2004, 0x9906, 0x1904, 0x87ef,\r
-+      0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x87e6, 0x080c,\r
-+      0x80b8, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c, 0x98da, 0x7827,\r
-+      0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,\r
-+      0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x2069,\r
-+      0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de,\r
-+      0x00c6, 0x3e08, 0x918e, 0x0002, 0x1168, 0xb800, 0xd0bc, 0x0150,\r
-+      0x9680, 0x0010, 0x200c, 0x81ff, 0x1518, 0x2009, 0x1959, 0x210c,\r
-+      0x2102, 0x00f0, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660,\r
-+      0x600f, 0x0000, 0x080c, 0x9e62, 0x00ce, 0x0048, 0x00de, 0x00c6,\r
-+      0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x8792, 0x89ff,\r
-+      0x0138, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x688c,\r
-+      0x080c, 0x97b0, 0x0804, 0x8792, 0x000e, 0x0804, 0x8786, 0x781e,\r
-+      0x781a, 0x00de, 0x00ce, 0x00be, 0x009e, 0x006e, 0x000e, 0x0005,\r
-+      0x00e6, 0x00d6, 0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c,\r
-+      0x904d, 0x0188, 0xa878, 0x9606, 0x1170, 0x2071, 0x19b8, 0x7024,\r
-+      0x9035, 0x0148, 0x9080, 0x0005, 0x2004, 0x9906, 0x1120, 0xb800,\r
-+      0xc0dc, 0xb802, 0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005,\r
-+      0x00f6, 0x2079, 0x0100, 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660,\r
-+      0x6003, 0x0009, 0x630a, 0x00ce, 0x04b8, 0x080c, 0x93ac, 0x78c3,\r
-+      0x0000, 0x080c, 0x98da, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140,\r
-+      0x7b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14,\r
-+      0x9006, 0x080c, 0x2b14, 0x2079, 0x0100, 0x7824, 0xd084, 0x0110,\r
-+      0x7827, 0x0001, 0x080c, 0x98da, 0x003e, 0x080c, 0x6171, 0x00c6,\r
-+      0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0x9e32,\r
-+      0x00ce, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbe06,\r
-+      0x080c, 0x688c, 0x080c, 0x97b0, 0x00fe, 0x0005, 0x00b6, 0x00e6,\r
-+      0x00c6, 0x2011, 0x0101, 0x2204, 0xc0c4, 0x2012, 0x2001, 0x180c,\r
-+      0x2014, 0xc2e4, 0x2202, 0x2071, 0x19b8, 0x7004, 0x9084, 0x0007,\r
-+      0x0002, 0x888b, 0x888f, 0x88a6, 0x88cf, 0x890d, 0x888b, 0x88a6,\r
-+      0x8889, 0x080c, 0x0db4, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024,\r
-+      0x9065, 0x0148, 0x7020, 0x8001, 0x7022, 0x600c, 0x9015, 0x0158,\r
-+      0x7216, 0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce,\r
-+      0x00ee, 0x00be, 0x0005, 0x7216, 0x7212, 0x0ca8, 0x6010, 0x2058,\r
-+      0x080c, 0x6171, 0xb800, 0xc0dc, 0xb802, 0x7007, 0x0000, 0x7027,\r
-+      0x0000, 0x7020, 0x8001, 0x7022, 0x1148, 0x2001, 0x180c, 0x2014,\r
-+      0xd2ec, 0x1180, 0x00ce, 0x00ee, 0x00be, 0x0005, 0xb854, 0x9015,\r
-+      0x0120, 0x721e, 0x080c, 0x8973, 0x0ca8, 0x7218, 0x721e, 0x080c,\r
-+      0x8973, 0x0c80, 0xc2ec, 0x2202, 0x080c, 0x8a4e, 0x0c58, 0x7024,\r
-+      0x9065, 0x05b8, 0x700c, 0x9c06, 0x1160, 0x080c, 0x97b0, 0x600c,\r
-+      0x9015, 0x0120, 0x720e, 0x600f, 0x0000, 0x0448, 0x720e, 0x720a,\r
-+      0x0430, 0x7014, 0x9c06, 0x1160, 0x080c, 0x97b0, 0x600c, 0x9015,\r
-+      0x0120, 0x7216, 0x600f, 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8,\r
-+      0x6020, 0x9086, 0x0003, 0x1198, 0x6010, 0x2058, 0x080c, 0x6171,\r
-+      0xb800, 0xc0dc, 0xb802, 0x080c, 0x97b0, 0x701c, 0x9065, 0x0138,\r
-+      0xb854, 0x9015, 0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027,\r
-+      0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, 0x0140,\r
-+      0x080c, 0x97b0, 0x600c, 0x9015, 0x0158, 0x720e, 0x600f, 0x0000,\r
-+      0x080c, 0x98da, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005,\r
-+      0x720e, 0x720a, 0x0ca8, 0x00d6, 0x2069, 0x19b8, 0x6830, 0x9084,\r
-+      0x0003, 0x0002, 0x8930, 0x8932, 0x8956, 0x892e, 0x080c, 0x0db4,\r
-+      0x00de, 0x0005, 0x00c6, 0x6840, 0x9086, 0x0001, 0x01b8, 0x683c,\r
-+      0x9065, 0x0130, 0x600c, 0x9015, 0x0170, 0x6a3a, 0x600f, 0x0000,\r
-+      0x6833, 0x0000, 0x683f, 0x0000, 0x2011, 0x19d7, 0x2013, 0x0000,\r
-+      0x00ce, 0x00de, 0x0005, 0x683a, 0x6836, 0x0c90, 0x6843, 0x0000,\r
-+      0x6838, 0x9065, 0x0d68, 0x6003, 0x0003, 0x0c50, 0x00c6, 0x9006,\r
-+      0x6842, 0x6846, 0x684a, 0x683c, 0x9065, 0x0160, 0x600c, 0x9015,\r
-+      0x0130, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0018, 0x683e,\r
-+      0x683a, 0x6836, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c, 0x200c,\r
-+      0xc1e5, 0x2102, 0x0005, 0x2001, 0x180c, 0x200c, 0xd1ec, 0x0120,\r
-+      0xc1ec, 0x2102, 0x080c, 0x8a4e, 0x2001, 0x19c4, 0x2004, 0x9086,\r
-+      0x0001, 0x0d58, 0x00d6, 0x2069, 0x19b8, 0x6804, 0x9084, 0x0007,\r
-+      0x0002, 0x8993, 0x8a36, 0x8a36, 0x8a36, 0x8a36, 0x8a38, 0x8a36,\r
-+      0x8991, 0x080c, 0x0db4, 0x6820, 0x9005, 0x1110, 0x00de, 0x0005,\r
-+      0x00c6, 0x680c, 0x9065, 0x0150, 0x6807, 0x0004, 0x6826, 0x682b,\r
-+      0x0000, 0x080c, 0x8aa4, 0x00ce, 0x00de, 0x0005, 0x6814, 0x9065,\r
-+      0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x8aa4,\r
-+      0x00ce, 0x00de, 0x0005, 0x00b6, 0x00e6, 0x6a1c, 0x92dd, 0x0000,\r
-+      0x0904, 0x8a22, 0xb84c, 0x900d, 0x0118, 0xb888, 0x9005, 0x01a0,\r
-+      0xb854, 0x905d, 0x0120, 0x920e, 0x0904, 0x8a22, 0x0028, 0x6818,\r
-+      0x920e, 0x0904, 0x8a22, 0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888,\r
-+      0x9005, 0x1d70, 0x2b00, 0x681e, 0xbb3c, 0xb838, 0x9302, 0x1e40,\r
-+      0x080c, 0x9e09, 0x0904, 0x8a22, 0x8318, 0xbb3e, 0x6116, 0x2b10,\r
-+      0x6212, 0x0096, 0x2148, 0xa880, 0x9084, 0x00ff, 0x605e, 0xa883,\r
-+      0x0000, 0xa884, 0x009e, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999,\r
-+      0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x6114, 0x0096, 0x2148,\r
-+      0xa964, 0x009e, 0x918c, 0x00ff, 0x918e, 0x0048, 0x0538, 0x00f6,\r
-+      0x2c78, 0x2061, 0x0100, 0xbab0, 0x629a, 0x2069, 0x0200, 0x2071,\r
-+      0x0240, 0x080c, 0x8fdc, 0x2069, 0x19b8, 0xbb00, 0xc3dd, 0xbb02,\r
-+      0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x7823, 0x0003,\r
-+      0x7803, 0x0001, 0x7807, 0x0040, 0x00fe, 0x00ee, 0x00be, 0x00ce,\r
-+      0x00de, 0x0005, 0x00ee, 0x00be, 0x00ce, 0x0cd0, 0xbb00, 0xc3dd,\r
-+      0xbb02, 0x6807, 0x0006, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x080c,\r
-+      0x9c63, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005,\r
-+      0x00c6, 0x680c, 0x9065, 0x0138, 0x6807, 0x0004, 0x6826, 0x682b,\r
-+      0x0000, 0x080c, 0x8aa4, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c,\r
-+      0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe, 0x0005, 0x00f6, 0x00d6,\r
-+      0x2069, 0x19b8, 0x6830, 0x9086, 0x0000, 0x1548, 0x2001, 0x180c,\r
-+      0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x8982, 0x2069,\r
-+      0x19b8, 0x2001, 0x180c, 0x200c, 0xd1c4, 0x11e0, 0x6838, 0x907d,\r
-+      0x01b0, 0x6a04, 0x9296, 0x0000, 0x1588, 0x6833, 0x0001, 0x683e,\r
-+      0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400,\r
-+      0x002e, 0x080c, 0x1ae8, 0x1178, 0x012e, 0x080c, 0x9209, 0x00de,\r
-+      0x00fe, 0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c,\r
-+      0x7062, 0x006e, 0x08d8, 0x012e, 0x6843, 0x0000, 0x7803, 0x0002,\r
-+      0x780c, 0x9015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000,\r
-+      0x683f, 0x0000, 0x0c20, 0x683a, 0x6836, 0x0cc0, 0x6a04, 0x9296,\r
-+      0x0006, 0x0958, 0x0804, 0x8a46, 0x6020, 0x9084, 0x000f, 0x000b,\r
-+      0x0005, 0x8ab8, 0x8abd, 0x8f16, 0x8fa5, 0x8abd, 0x8f16, 0x8fa5,\r
-+      0x8ab8, 0x8abd, 0x8ab8, 0x8ab8, 0x8ab8, 0x8ab8, 0x8ab8, 0x8ab8,\r
-+      0x080c, 0x886e, 0x080c, 0x8973, 0x0005, 0x00b6, 0x0156, 0x0136,\r
-+      0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069,\r
-+      0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0db4,\r
-+      0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a, 0x908a,\r
-+      0x0040, 0x1a04, 0x8b29, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce,\r
-+      0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8ca0,\r
-+      0x8cdb, 0x8d04, 0x8da7, 0x8dc8, 0x8dce, 0x8ddb, 0x8de3, 0x8def,\r
-+      0x8df5, 0x8e06, 0x8df5, 0x8e5d, 0x8de3, 0x8e69, 0x8e6f, 0x8def,\r
-+      0x8e6f, 0x8e7b, 0x8b27, 0x8b27, 0x8b27, 0x8b27, 0x8b27, 0x8b27,\r
-+      0x8b27, 0x8b27, 0x8b27, 0x8b27, 0x8b27, 0x958f, 0x95b2, 0x95c3,\r
-+      0x95e3, 0x9615, 0x8ddb, 0x8b27, 0x8ddb, 0x8df5, 0x8b27, 0x8d04,\r
-+      0x8da7, 0x8b27, 0x99c7, 0x8df5, 0x8b27, 0x99e3, 0x8df5, 0x8b27,\r
-+      0x8def, 0x8c9a, 0x8b4a, 0x8b27, 0x99ff, 0x9a6c, 0x9b43, 0x8b27,\r
-+      0x9b50, 0x8dd8, 0x9b7b, 0x8b27, 0x961f, 0x9ba8, 0x8b27, 0x080c,\r
-+      0x0db4, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de,\r
-+      0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8b48, 0x8b48,\r
-+      0x8b48, 0x8b71, 0x8c1d, 0x8c28, 0x8b48, 0x8b48, 0x8b48, 0x8c6f,\r
-+      0x8c7b, 0x8b8c, 0x8b48, 0x8ba7, 0x8bdb, 0x9d25, 0x9d6a, 0x8df5,\r
-+      0x080c, 0x0db4, 0x00d6, 0x0096, 0x080c, 0x8e8e, 0x7003, 0x2414,\r
-+      0x7007, 0x0018, 0x700b, 0x0800, 0x7814, 0x2048, 0xa83c, 0x700e,\r
-+      0xa850, 0x7022, 0xa854, 0x7026, 0x60c3, 0x0018, 0x080c, 0x9380,\r
-+      0x009e, 0x00de, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb8a0, 0x00be,\r
-+      0x080c, 0x9db1, 0x1118, 0x9084, 0xff80, 0x0110, 0x9085, 0x0001,\r
-+      0x0005, 0x00d6, 0x0096, 0x080c, 0x8e8e, 0x7003, 0x0500, 0x7814,\r
-+      0x2048, 0xa874, 0x700a, 0xa878, 0x700e, 0xa87c, 0x7012, 0xa880,\r
-+      0x7016, 0xa884, 0x701a, 0xa888, 0x701e, 0x60c3, 0x0010, 0x080c,\r
-+      0x9380, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x080c, 0x8e8e,\r
-+      0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc, 0x700a, 0xa8d0, 0x700e,\r
-+      0xa8d4, 0x7012, 0xa8d8, 0x7016, 0xa8dc, 0x701a, 0xa8e0, 0x701e,\r
-+      0x60c3, 0x0010, 0x080c, 0x9380, 0x009e, 0x00de, 0x0005, 0x00d6,\r
-+      0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x8e8e, 0x20e9, 0x0000,\r
-+      0x2001, 0x1974, 0x2003, 0x0000, 0x7814, 0x2048, 0xa814, 0x8003,\r
-+      0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b,\r
-+      0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x2001, 0x0001, 0x080c,\r
-+      0x224d, 0x080c, 0xc81a, 0x9006, 0x080c, 0x224d, 0x001e, 0xa804,\r
-+      0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9, 0x080c, 0x9380, 0x012e,\r
-+      0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x8ed9, 0x20e9, 0x0000, 0x2001, 0x1974, 0x2003, 0x0000,\r
-+      0x7814, 0x2048, 0xa86f, 0x0200, 0xa873, 0x0000, 0xa814, 0x8003,\r
-+      0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b,\r
-+      0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x080c, 0xc81a, 0x001e,\r
-+      0xa804, 0x9005, 0x0110, 0x2048, 0x0c60, 0x0051, 0x7814, 0x2048,\r
-+      0x080c, 0x0f9d, 0x080c, 0x9380, 0x012e, 0x009e, 0x00de, 0x0005,\r
-+      0x60c0, 0x8004, 0x9084, 0x0003, 0x9005, 0x0130, 0x9082, 0x0004,\r
-+      0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005, 0x080c, 0x8e8e, 0x7003,\r
-+      0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008, 0x0804, 0x9380,\r
-+      0x00d6, 0x00e6, 0x080c, 0x8ed9, 0x7814, 0x9084, 0xff00, 0x2073,\r
-+      0x0200, 0x8e70, 0x8e70, 0x9095, 0x0010, 0x2272, 0x8e70, 0x2073,\r
-+      0x0034, 0x8e70, 0x2069, 0x1805, 0x20a9, 0x0004, 0x2d76, 0x8d68,\r
-+      0x8e70, 0x1f04, 0x8c3e, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76,\r
-+      0x8d68, 0x8e70, 0x1f04, 0x8c47, 0x2069, 0x1984, 0x9086, 0xdf00,\r
-+      0x0110, 0x2069, 0x199e, 0x20a9, 0x001a, 0x9e86, 0x0260, 0x1148,\r
-+      0x00c6, 0x2061, 0x0200, 0x6010, 0x8000, 0x6012, 0x00ce, 0x2071,\r
-+      0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x8c55,\r
-+      0x60c3, 0x004c, 0x080c, 0x9380, 0x00ee, 0x00de, 0x0005, 0x080c,\r
-+      0x8e8e, 0x7003, 0x6300, 0x7007, 0x0028, 0x7808, 0x700e, 0x60c3,\r
-+      0x0008, 0x0804, 0x9380, 0x00d6, 0x0026, 0x0016, 0x080c, 0x8ed9,\r
-+      0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0, 0x0004, 0x2009,\r
-+      0x0001, 0x2011, 0x000c, 0x2073, 0x0800, 0x8e70, 0x2073, 0x0000,\r
-+      0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x9380, 0x001e, 0x002e,\r
-+      0x00de, 0x0005, 0x2001, 0x1817, 0x2004, 0x609a, 0x0804, 0x9380,\r
-+      0x080c, 0x8e8e, 0x7003, 0x5200, 0x2069, 0x1853, 0x6804, 0xd084,\r
-+      0x0130, 0x6828, 0x0016, 0x080c, 0x2696, 0x710e, 0x001e, 0x20a9,\r
-+      0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1,\r
-+      0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x0254,\r
-+      0x4003, 0x080c, 0x9db1, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,\r
-+      0x2001, 0x181e, 0x2004, 0x7032, 0x2001, 0x181f, 0x2004, 0x7036,\r
-+      0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7036, 0x60c3,\r
-+      0x001c, 0x0804, 0x9380, 0x080c, 0x8e8e, 0x7003, 0x0500, 0x080c,\r
-+      0x9db1, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e,\r
-+      0x2004, 0x700a, 0x2001, 0x181f, 0x2004, 0x700e, 0x0030, 0x2001,\r
-+      0x1817, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004, 0x20e1,\r
-+      0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003,\r
-+      0x60c3, 0x0010, 0x0804, 0x9380, 0x080c, 0x8e8e, 0x9006, 0x080c,\r
-+      0x652c, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003, 0x0400, 0x620c,\r
-+      0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d, 0x0120, 0x9006,\r
-+      0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300, 0xb8a0, 0x9086,\r
-+      0x007e, 0x1904, 0x8d6f, 0x00d6, 0x2069, 0x193d, 0x2001, 0x1836,\r
-+      0x2004, 0xd0a4, 0x0178, 0x6800, 0x700a, 0x6808, 0x9084, 0x2000,\r
-+      0x7012, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818, 0x7022, 0x681c,\r
-+      0x7026, 0x0080, 0x6800, 0x700a, 0x6804, 0x700e, 0x6808, 0x080c,\r
-+      0x6fb2, 0x1118, 0x9084, 0x37ff, 0x0010, 0x9084, 0x3fff, 0x7012,\r
-+      0x680c, 0x7016, 0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099,\r
-+      0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004,\r
-+      0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0x9c2a,\r
-+      0x2069, 0x1945, 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c,\r
-+      0x538a, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, 0x04a0, 0x2001,\r
-+      0x1836, 0x2004, 0xd0a4, 0x0168, 0x0016, 0x2009, 0x0002, 0x60e0,\r
-+      0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x26d7, 0x61e2,\r
-+      0x001e, 0x20e1, 0x0001, 0x2099, 0x193d, 0x20e9, 0x0000, 0x20a1,\r
-+      0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805,\r
-+      0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1,\r
-+      0x025a, 0x4003, 0x080c, 0x9c2a, 0x20a1, 0x024e, 0x20a9, 0x0008,\r
-+      0x2099, 0x1945, 0x4003, 0x60c3, 0x0074, 0x0804, 0x9380, 0x080c,\r
-+      0x8e8e, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f,\r
-+      0x2000, 0x9006, 0x00f6, 0x2079, 0x1853, 0x7904, 0x00fe, 0xd1ac,\r
-+      0x1110, 0x9085, 0x0020, 0x0010, 0x9085, 0x0010, 0x9085, 0x0002,\r
-+      0x00d6, 0x0804, 0x8e3e, 0x7026, 0x60c3, 0x0014, 0x0804, 0x9380,\r
-+      0x080c, 0x8e8e, 0x7003, 0x5000, 0x0804, 0x8d1e, 0x080c, 0x8e8e,\r
-+      0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x9380,\r
-+      0x080c, 0x8ed0, 0x0010, 0x080c, 0x8ed9, 0x7003, 0x0200, 0x60c3,\r
-+      0x0004, 0x0804, 0x9380, 0x080c, 0x8ed9, 0x7003, 0x0100, 0x700b,\r
-+      0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x9380, 0x080c,\r
-+      0x8ed9, 0x7003, 0x0200, 0x0804, 0x8d1e, 0x080c, 0x8ed9, 0x7003,\r
-+      0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003,\r
-+      0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9380, 0x00d6, 0x080c,\r
-+      0x8ed9, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800, 0xb894,\r
-+      0x9086, 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190, 0xb998,\r
-+      0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058,\r
-+      0x700f, 0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f, 0x0700,\r
-+      0x0010, 0x700f, 0x0800, 0x00f6, 0x2079, 0x1853, 0x7904, 0x00fe,\r
-+      0xd1ac, 0x1110, 0x9085, 0x0020, 0x0010, 0x9085, 0x0010, 0x2009,\r
-+      0x1875, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026, 0x2009,\r
-+      0x1873, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbabc, 0xd28c, 0x1108,\r
-+      0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec, 0x0130,\r
-+      0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e, 0x7026,\r
-+      0x60c3, 0x0014, 0x00de, 0x0804, 0x9380, 0x080c, 0x8ed9, 0x7003,\r
-+      0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014, 0x0804,\r
-+      0x9380, 0x080c, 0x8ed9, 0x7003, 0x0200, 0x0804, 0x8ca4, 0x080c,\r
-+      0x8ed9, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3,\r
-+      0x0008, 0x0804, 0x9380, 0x080c, 0x8ed9, 0x7003, 0x0100, 0x700b,\r
-+      0x000b, 0x60c3, 0x0008, 0x0804, 0x9380, 0x0026, 0x00d6, 0x0036,\r
-+      0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6,\r
-+      0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0x9c3f,\r
-+      0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878,\r
-+      0x700a, 0x687c, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e, 0x003e,\r
-+      0x00de, 0x080c, 0x936e, 0x721a, 0x9f95, 0x0000, 0x7222, 0x7027,\r
-+      0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, 0x9c3f,\r
-+      0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, 0x6878,\r
-+      0x700a, 0x687c, 0x700e, 0x00de, 0x7013, 0x2029, 0x0c10, 0x7003,\r
-+      0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f, 0x0000, 0x0005,\r
-+      0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300, 0x2021, 0x0800,\r
-+      0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2300, 0x2021,\r
-+      0x0100, 0x080c, 0x9c3f, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006,\r
-+      0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, 0x1128,\r
-+      0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x6878, 0x700a, 0x687c,\r
-+      0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e, 0x00de,\r
-+      0x080c, 0x936e, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071,\r
-+      0x024c, 0x002e, 0x0005, 0x080c, 0x936e, 0x721a, 0x7a08, 0x7222,\r
-+      0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004,\r
-+      0x908a, 0x0085, 0x0a0c, 0x0db4, 0x908a, 0x0092, 0x1a0c, 0x0db4,\r
-+      0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a, 0x9082,\r
-+      0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005,\r
-+      0x8f47, 0x8f56, 0x8f61, 0x8f45, 0x8f45, 0x8f45, 0x8f47, 0x8f45,\r
-+      0x8f45, 0x8f45, 0x8f45, 0x8f45, 0x8f45, 0x080c, 0x0db4, 0x0411,\r
-+      0x60c3, 0x0000, 0x0026, 0x080c, 0x29ca, 0x0228, 0x2011, 0x0101,\r
-+      0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x9380, 0x0431, 0x7808,\r
-+      0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c, 0x0804,\r
-+      0x9380, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, 0x0004,\r
-+      0x0804, 0x9380, 0x0026, 0x080c, 0x9c3f, 0xb810, 0x9085, 0x8100,\r
-+      0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c,\r
-+      0x700e, 0x7013, 0x0009, 0x0804, 0x8ea9, 0x0026, 0x080c, 0x9c3f,\r
-+      0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,\r
-+      0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804,\r
-+      0x8f0b, 0x0026, 0x080c, 0x9c3f, 0xb810, 0x9085, 0x8500, 0x7002,\r
-+      0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e,\r
-+      0x2001, 0x0099, 0x7012, 0x0804, 0x8f0b, 0x00b6, 0x00c6, 0x00d6,\r
-+      0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240, 0x7804,\r
-+      0x908a, 0x0040, 0x0a0c, 0x0db4, 0x908a, 0x0054, 0x1a0c, 0x0db4,\r
-+      0x7910, 0x2158, 0xb9b0, 0x2061, 0x0100, 0x619a, 0x9082, 0x0040,\r
-+      0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, 0x8fdc,\r
-+      0x9098, 0x906b, 0x91ba, 0x8fda, 0x8fda, 0x8fda, 0x8fda, 0x8fda,\r
-+      0x8fda, 0x8fda, 0x978d, 0x9795, 0x979d, 0x97a5, 0x8fda, 0x9b87,\r
-+      0x8fda, 0x9785, 0x080c, 0x0db4, 0x0096, 0x780b, 0xffff, 0x080c,\r
-+      0x9047, 0x7914, 0x2148, 0xa978, 0x7956, 0xae64, 0x96b4, 0x00ff,\r
-+      0x9686, 0x0008, 0x1148, 0xa8b4, 0x7032, 0xa8b8, 0x7036, 0xa8bc,\r
-+      0x703a, 0xa8c0, 0x703e, 0x0008, 0x7132, 0xa97c, 0x9184, 0x000f,\r
-+      0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118, 0x2001, 0x0004,\r
-+      0x0018, 0x9084, 0x0006, 0x8004, 0x2010, 0x785c, 0x9084, 0x00ff,\r
-+      0x8007, 0x9205, 0x7042, 0xd1ac, 0x0158, 0x7047, 0x0002, 0x9686,\r
-+      0x0008, 0x1118, 0x080c, 0x1787, 0x0010, 0x080c, 0x1648, 0x0050,\r
-+      0xd1b4, 0x0118, 0x7047, 0x0001, 0x0028, 0x7047, 0x0000, 0x9016,\r
-+      0x2230, 0x0010, 0xaab0, 0xaeac, 0x726a, 0x766e, 0x20a9, 0x0008,\r
-+      0x20e9, 0x0000, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023, 0x2098,\r
-+      0x20a1, 0x0252, 0x2069, 0x0200, 0x6813, 0x0018, 0x4003, 0x6813,\r
-+      0x0008, 0x60c3, 0x0020, 0x6017, 0x0009, 0x2001, 0x19d4, 0x2003,\r
-+      0x07d0, 0x2001, 0x19d3, 0x2003, 0x0009, 0x009e, 0x0005, 0x6813,\r
-+      0x0008, 0xba8c, 0x8210, 0xb8bc, 0xd084, 0x0128, 0x7a46, 0x7b14,\r
-+      0x7b4a, 0x722e, 0x732a, 0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a,\r
-+      0xba10, 0x9295, 0x0600, 0x7202, 0xba14, 0x7206, 0x2069, 0x1800,\r
-+      0x6a78, 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0829, 0x2f10, 0x7222,\r
-+      0x7027, 0xffff, 0x0005, 0x00d6, 0x0096, 0x0081, 0x7814, 0x2048,\r
-+      0xa890, 0x7002, 0xa88c, 0x7006, 0xa8b0, 0x700a, 0xa8ac, 0x700e,\r
-+      0x60c3, 0x000c, 0x009e, 0x00de, 0x0804, 0x9380, 0x6813, 0x0008,\r
-+      0xb810, 0x9085, 0x0500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,\r
-+      0x6878, 0x700a, 0x687c, 0x700e, 0x7013, 0x0889, 0x080c, 0x936e,\r
-+      0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x0005,\r
-+      0x00d6, 0x0096, 0x080c, 0x9198, 0x7814, 0x2048, 0x080c, 0xbb15,\r
-+      0x1130, 0x7814, 0x9084, 0x0700, 0x8007, 0x0033, 0x0010, 0x9006,\r
-+      0x001b, 0x009e, 0x00de, 0x0005, 0x90b6, 0x911f, 0x912f, 0x9155,\r
-+      0x9161, 0x9172, 0x917a, 0x90b4, 0x080c, 0x0db4, 0x0016, 0x0036,\r
-+      0xa97c, 0x918c, 0x0003, 0x0118, 0x9186, 0x0003, 0x1198, 0xaba8,\r
-+      0x7824, 0xd0cc, 0x1168, 0x7316, 0xa898, 0x701a, 0xa894, 0x701e,\r
-+      0x003e, 0x001e, 0x2001, 0x1982, 0x2004, 0x60c2, 0x0804, 0x9380,\r
-+      0xc3e5, 0x0c88, 0x9186, 0x0001, 0x190c, 0x0db4, 0xaba8, 0x7824,\r
-+      0xd0cc, 0x1904, 0x911c, 0x7316, 0xa898, 0x701a, 0xa894, 0x701e,\r
-+      0xa8a4, 0x7026, 0xa8ac, 0x702e, 0x2009, 0x0018, 0x9384, 0x0300,\r
-+      0x0570, 0xd3c4, 0x0110, 0xa8ac, 0x9108, 0xd3cc, 0x0110, 0xa8a4,\r
-+      0x9108, 0x6810, 0x9085, 0x0010, 0x6812, 0x2011, 0x0258, 0x20e9,\r
-+      0x0000, 0x22a0, 0x0156, 0x20a9, 0x0008, 0xa860, 0x20e0, 0xa85c,\r
-+      0x9080, 0x002c, 0x2098, 0x4003, 0x6810, 0x8000, 0x6812, 0x2011,\r
-+      0x0240, 0x22a0, 0x20a9, 0x0005, 0x4003, 0x6810, 0xc084, 0x6812,\r
-+      0x015e, 0x9184, 0x0003, 0x0118, 0x2019, 0x0245, 0x201a, 0x61c2,\r
-+      0x003e, 0x001e, 0x0804, 0x9380, 0xc3e5, 0x0804, 0x90db, 0x2011,\r
-+      0x0008, 0x2001, 0x180f, 0x2004, 0xd0a4, 0x0110, 0x2011, 0x0028,\r
-+      0x7824, 0xd0cc, 0x1110, 0x7216, 0x0470, 0x0ce8, 0xc2e5, 0x2011,\r
-+      0x0302, 0x0016, 0x782c, 0x701a, 0x7930, 0x711e, 0x9105, 0x0108,\r
-+      0xc2dd, 0x001e, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x7027,\r
-+      0x0012, 0x702f, 0x0008, 0x7043, 0x7000, 0x7047, 0x0500, 0x704f,\r
-+      0x000a, 0x2069, 0x0200, 0x6813, 0x0009, 0x2071, 0x0240, 0x700b,\r
-+      0x2500, 0x60c3, 0x0032, 0x0804, 0x9380, 0x2011, 0x0028, 0x7824,\r
-+      0xd0cc, 0x1128, 0x7216, 0x60c3, 0x0018, 0x0804, 0x9380, 0x0cd0,\r
-+      0xc2e5, 0x2011, 0x0100, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216,\r
-+      0x702f, 0x0008, 0x7858, 0x9084, 0x00ff, 0x7036, 0x60c3, 0x0020,\r
-+      0x0804, 0x9380, 0x2011, 0x0008, 0x7824, 0xd0cc, 0x0108, 0xc2e5,\r
-+      0x7216, 0x0c08, 0x0036, 0x7b14, 0x9384, 0xff00, 0x7816, 0x9384,\r
-+      0x00ff, 0x8001, 0x1138, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216,\r
-+      0x003e, 0x0888, 0x0046, 0x2021, 0x0800, 0x0006, 0x7824, 0xd0cc,\r
-+      0x000e, 0x0108, 0xc4e5, 0x7416, 0x004e, 0x701e, 0x003e, 0x0818,\r
-+      0x00d6, 0x6813, 0x0008, 0xb810, 0x9085, 0x0700, 0x7002, 0xb814,\r
-+      0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x7824,\r
-+      0xd0cc, 0x1168, 0x7013, 0x0898, 0x080c, 0x936e, 0x721a, 0x7a08,\r
-+      0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x7013,\r
-+      0x0889, 0x0c90, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013,\r
-+      0x001e, 0x0005, 0x91ca, 0x91ca, 0x91cc, 0x91ca, 0x91ca, 0x91ca,\r
-+      0x91e6, 0x91ca, 0x080c, 0x0db4, 0x7914, 0x918c, 0x08ff, 0x918d,\r
-+      0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, 0x1853, 0x6804,\r
-+      0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010,\r
-+      0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0x9380, 0x2009, 0x0003,\r
-+      0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0x9c3f, 0x001e,\r
-+      0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,\r
-+      0x6a78, 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0888, 0x918d, 0x0008,\r
-+      0x7116, 0x080c, 0x936e, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,\r
-+      0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046,\r
-+      0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0,\r
-+      0x2028, 0xb910, 0xba14, 0x7378, 0x747c, 0x7820, 0x90be, 0x0006,\r
-+      0x0904, 0x92dd, 0x90be, 0x000a, 0x1904, 0x9299, 0xb8b0, 0x609e,\r
-+      0x7814, 0x2048, 0xa87c, 0xd0fc, 0x0558, 0xaf90, 0x9784, 0xff00,\r
-+      0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x2048,\r
-+      0xa878, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0198,\r
-+      0x2039, 0x0098, 0x9705, 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086,\r
-+      0x0038, 0x9185, 0x2200, 0x6062, 0x6073, 0x0129, 0x6077, 0x0000,\r
-+      0xb8b0, 0x609e, 0x0050, 0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0,\r
-+      0x9185, 0x0200, 0x6062, 0x6073, 0x2029, 0xa87c, 0xd0fc, 0x0118,\r
-+      0xaf94, 0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266,\r
-+      0x636a, 0x646e, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff,\r
-+      0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0xa838, 0x608a, 0xa834,\r
-+      0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af,\r
-+      0x95d5, 0x60d7, 0x0000, 0x080c, 0x9c24, 0x2009, 0x07d0, 0x60c4,\r
-+      0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x80bd,\r
-+      0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be,\r
-+      0x0005, 0x7804, 0x9086, 0x0040, 0x0904, 0x9319, 0x9185, 0x0100,\r
-+      0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0809, 0x6077, 0x0008,\r
-+      0x60af, 0x95d5, 0x60d7, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff,\r
-+      0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808,\r
-+      0x6086, 0x7814, 0x2048, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848,\r
-+      0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0xbab0, 0x629e, 0x080c,\r
-+      0x9c24, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110,\r
-+      0x2009, 0x1b58, 0x080c, 0x80bd, 0x003e, 0x004e, 0x005e, 0x00ce,\r
-+      0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7814, 0x2048, 0xa87c,\r
-+      0x9084, 0x0003, 0x9086, 0x0002, 0x0904, 0x9335, 0x9185, 0x0100,\r
-+      0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0880, 0x6077, 0x0008,\r
-+      0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x7838,\r
-+      0x607e, 0x2f00, 0x6086, 0x7808, 0x6082, 0xa890, 0x608a, 0xa88c,\r
-+      0x608e, 0xa8b0, 0x60c6, 0xa8ac, 0x60ca, 0xa8ac, 0x7930, 0x9108,\r
-+      0x7932, 0xa8b0, 0x792c, 0x9109, 0x792e, 0xb86c, 0x60ce, 0x60af,\r
-+      0x95d5, 0x60d7, 0x0000, 0xbab0, 0x629e, 0x080c, 0x9c01, 0x0804,\r
-+      0x92c9, 0xb8bc, 0xd084, 0x0148, 0xb88c, 0x7814, 0x2048, 0xb88c,\r
-+      0x7846, 0xa836, 0x2900, 0xa83a, 0xb04a, 0x9185, 0x0600, 0x6062,\r
-+      0x6266, 0x636a, 0x646e, 0x6073, 0x0829, 0x6077, 0x0000, 0x60af,\r
-+      0x9575, 0x60d7, 0x0000, 0x0804, 0x92ac, 0x9185, 0x0700, 0x6062,\r
-+      0x6266, 0x636a, 0x646e, 0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073,\r
-+      0x0889, 0x0010, 0x6073, 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000,\r
-+      0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,\r
-+      0x6086, 0x7808, 0x6082, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848,\r
-+      0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7,\r
-+      0x0000, 0xbab0, 0x629e, 0x7824, 0xd0cc, 0x0120, 0x080c, 0x9c24,\r
-+      0x0804, 0x92c9, 0x080c, 0x9c01, 0x0804, 0x92c9, 0x7a10, 0x00b6,\r
-+      0x2258, 0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217,\r
-+      0x0005, 0x00d6, 0x2069, 0x19b8, 0x6843, 0x0001, 0x00de, 0x0005,\r
-+      0x60a3, 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x80af, 0x0005,\r
-+      0x0016, 0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600,\r
-+      0x0128, 0x0089, 0x080c, 0x80af, 0x001e, 0x0005, 0xc1e5, 0x2001,\r
-+      0x180c, 0x2102, 0x2001, 0x19b9, 0x2003, 0x0000, 0x2001, 0x19c1,\r
-+      0x2003, 0x0000, 0x0c88, 0x0006, 0x6014, 0x9084, 0x1804, 0x9085,\r
-+      0x0009, 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061,\r
-+      0x0100, 0x61a4, 0x60a7, 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085,\r
-+      0x0008, 0x6016, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce,\r
-+      0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100,\r
-+      0x2069, 0x0140, 0x080c, 0x6fb2, 0x11e8, 0x2001, 0x19d4, 0x2004,\r
-+      0x9005, 0x1904, 0x9412, 0x0066, 0x2031, 0x0001, 0x080c, 0x7062,\r
-+      0x006e, 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024,\r
-+      0xd084, 0x090c, 0x0db4, 0x080c, 0x80af, 0x0460, 0x00c6, 0x2061,\r
-+      0x19b8, 0x00d0, 0x6904, 0x9194, 0x4000, 0x0548, 0x080c, 0x93ac,\r
-+      0x080c, 0x2b24, 0x00c6, 0x2061, 0x19b8, 0x6128, 0x9192, 0x0008,\r
-+      0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c,\r
-+      0x80af, 0x080c, 0x93a3, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140,\r
-+      0x080c, 0xd8c9, 0x080c, 0x80b8, 0x2009, 0x0014, 0x080c, 0x9eac,\r
-+      0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001,\r
-+      0x19d4, 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19b8, 0x6128,\r
-+      0x9192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x80af,\r
-+      0x080c, 0x5b90, 0x2009, 0x1852, 0x2114, 0x8210, 0x220a, 0x0c10,\r
-+      0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x80c5,\r
-+      0x2071, 0x19b8, 0x713c, 0x81ff, 0x0904, 0x94a2, 0x2061, 0x0100,\r
-+      0x2069, 0x0140, 0x080c, 0x6fb2, 0x11b0, 0x0036, 0x2019, 0x0002,\r
-+      0x080c, 0x96d8, 0x003e, 0x713c, 0x2160, 0x080c, 0xd8c9, 0x2009,\r
-+      0x004a, 0x080c, 0x9eac, 0x0066, 0x2031, 0x0001, 0x080c, 0x7062,\r
-+      0x006e, 0x0804, 0x94a2, 0x080c, 0x94ae, 0x0904, 0x94a2, 0x6904,\r
-+      0xd1f4, 0x0904, 0x94a9, 0x080c, 0x2b24, 0x00c6, 0x703c, 0x9065,\r
-+      0x090c, 0x0db4, 0x6020, 0x00ce, 0x9086, 0x0006, 0x1528, 0x61c8,\r
-+      0x60c4, 0x9105, 0x1508, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01e0,\r
-+      0x6214, 0x9294, 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1510,\r
-+      0x0030, 0xc0d4, 0x200a, 0xd0cc, 0x0110, 0x080c, 0x2a77, 0x6014,\r
-+      0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016, 0x703c, 0x2060, 0x2009,\r
-+      0x0049, 0x080c, 0x9eac, 0x0070, 0x0036, 0x2019, 0x0001, 0x080c,\r
-+      0x96d8, 0x003e, 0x713c, 0x2160, 0x080c, 0xd8c9, 0x2009, 0x004a,\r
-+      0x080c, 0x9eac, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e,\r
-+      0x0005, 0xd1ec, 0x1904, 0x9463, 0x0804, 0x9465, 0x00d6, 0x00c6,\r
-+      0x0096, 0x703c, 0x9065, 0x090c, 0x0db4, 0x2001, 0x1836, 0x2004,\r
-+      0xd09c, 0x1904, 0x953a, 0x2001, 0x0306, 0x200c, 0x9184, 0x0030,\r
-+      0x0904, 0x953a, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904, 0x953a,\r
-+      0x2001, 0x020b, 0x2004, 0xd0fc, 0x0904, 0x953a, 0xd08c, 0x0904,\r
-+      0x953a, 0x2009, 0x1a50, 0x2104, 0x8000, 0x0208, 0x200a, 0x2069,\r
-+      0x0100, 0x6914, 0x918c, 0x0184, 0x918d, 0x0010, 0x6916, 0x69c8,\r
-+      0x2011, 0x0020, 0x68c8, 0x9106, 0x1570, 0x8211, 0x1dd8, 0x2001,\r
-+      0x0306, 0x2003, 0x4800, 0x2001, 0x009a, 0x2003, 0x0004, 0x2001,\r
-+      0x1a36, 0x2003, 0x0000, 0x2001, 0x1a3f, 0x2003, 0x0000, 0x6a88,\r
-+      0x698c, 0x2200, 0x9105, 0x1120, 0x2c10, 0x080c, 0x1a5c, 0x0040,\r
-+      0x6014, 0x2048, 0xaa3a, 0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a,\r
-+      0x0126, 0x00c6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1ae8, 0x190c,\r
-+      0x0db4, 0x012e, 0x0090, 0x2009, 0x1a51, 0x2104, 0x8000, 0x0208,\r
-+      0x200a, 0x69c8, 0x2011, 0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106,\r
-+      0x1dc0, 0x69c4, 0x68c8, 0x9105, 0x0160, 0x6824, 0xd08c, 0x0110,\r
-+      0x6827, 0x0002, 0x7048, 0xc085, 0x704a, 0x0079, 0x7048, 0xc084,\r
-+      0x704a, 0x2009, 0x07d0, 0x080c, 0x80bd, 0x9006, 0x009e, 0x00ce,\r
-+      0x00de, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071,\r
-+      0x19b8, 0x7048, 0xd084, 0x01c0, 0x713c, 0x81ff, 0x01a8, 0x2071,\r
-+      0x0100, 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, 0x7014,\r
-+      0x9084, 0x1984, 0x9085, 0x0012, 0x7016, 0x0030, 0x7014, 0x9084,\r
-+      0x1984, 0x9085, 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6,\r
-+      0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126,\r
-+      0x2091, 0x8000, 0x6010, 0x2058, 0xbca0, 0x2071, 0x19b8, 0x7018,\r
-+      0x2058, 0x8bff, 0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058,\r
-+      0x0cc0, 0x6014, 0x0096, 0x2048, 0xac6c, 0xad70, 0xae78, 0x009e,\r
-+      0x080c, 0x6370, 0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e,\r
-+      0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c,\r
-+      0x8e8e, 0x7003, 0x1200, 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6,\r
-+      0x7820, 0x9086, 0x0004, 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6,\r
-+      0x2058, 0xb810, 0xb914, 0x00be, 0x0020, 0x2061, 0x1800, 0x6078,\r
-+      0x617c, 0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c,\r
-+      0x0804, 0x9380, 0x080c, 0x8e8e, 0x7003, 0x0f00, 0x7808, 0xd09c,\r
-+      0x0128, 0xb810, 0x9084, 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3,\r
-+      0x0008, 0x0804, 0x9380, 0x0156, 0x080c, 0x8ed9, 0x7003, 0x0200,\r
-+      0x2011, 0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840,\r
-+      0x2019, 0x1841, 0x9ef0, 0x0002, 0x2376, 0x8e70, 0x2276, 0x8e70,\r
-+      0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0x95d4, 0x60c3, 0x001c,\r
-+      0x015e, 0x0804, 0x9380, 0x0016, 0x0026, 0x080c, 0x8eb5, 0x080c,\r
-+      0x8ec7, 0x9e80, 0x0004, 0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096,\r
-+      0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021,\r
-+      0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x9192, 0x0010,\r
-+      0x1250, 0x4003, 0x9080, 0x0004, 0x8003, 0x60c2, 0x080c, 0x9380,\r
-+      0x002e, 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0x9c2a,\r
-+      0x20a1, 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c, 0x8e8e, 0x7003,\r
-+      0x6200, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9380, 0x0016,\r
-+      0x0026, 0x080c, 0x8e8e, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814,\r
-+      0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080,\r
-+      0x0023, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003,\r
-+      0x8003, 0x60c2, 0x080c, 0x9380, 0x002e, 0x001e, 0x0005, 0x00e6,\r
-+      0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x700c,\r
-+      0x2060, 0x8cff, 0x0178, 0x080c, 0xbd1d, 0x1110, 0x080c, 0xa7c0,\r
-+      0x600c, 0x0006, 0x080c, 0xbf84, 0x080c, 0x9e32, 0x080c, 0x97b0,\r
-+      0x00ce, 0x0c78, 0x2c00, 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce,\r
-+      0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6,\r
-+      0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c,\r
-+      0x200c, 0x918c, 0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140,\r
-+      0x2071, 0x19b8, 0x7024, 0x2060, 0x8cff, 0x01f8, 0x080c, 0x93ac,\r
-+      0x6ac0, 0x68c3, 0x0000, 0x080c, 0x80b8, 0x00c6, 0x2061, 0x0100,\r
-+      0x080c, 0x9c43, 0x00ce, 0x20a9, 0x01f4, 0x0461, 0x2009, 0x0013,\r
-+      0x080c, 0x9eac, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de,\r
-+      0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004,\r
-+      0x9096, 0x0001, 0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x80b8,\r
-+      0x6814, 0x9084, 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008,\r
-+      0x68c3, 0x0000, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x20a9, 0x01f4,\r
-+      0x0009, 0x08c0, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804,\r
-+      0x9084, 0x4000, 0x190c, 0x2b24, 0x0090, 0xd084, 0x0118, 0x6827,\r
-+      0x0001, 0x0010, 0x1f04, 0x96ba, 0x7804, 0x9084, 0x1000, 0x0138,\r
-+      0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x0005,\r
-+      0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,\r
-+      0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c,\r
-+      0xdbff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19b8,\r
-+      0x703c, 0x2060, 0x8cff, 0x0904, 0x9766, 0x9386, 0x0002, 0x1128,\r
-+      0x6814, 0x9084, 0x0002, 0x0904, 0x9766, 0x68af, 0x95f5, 0x6817,\r
-+      0x0010, 0x2009, 0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008,\r
-+      0x080c, 0x80c5, 0x080c, 0x1e90, 0x0046, 0x2009, 0x00a5, 0x080c,\r
-+      0x0e2f, 0x2021, 0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004,\r
-+      0x11f8, 0x68af, 0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6,\r
-+      0x2079, 0x0090, 0x2071, 0x1a36, 0x6814, 0x9084, 0x1984, 0x9085,\r
-+      0x0012, 0x6816, 0x782b, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee,\r
-+      0x9386, 0x0002, 0x1128, 0x7884, 0x9005, 0x1110, 0x7887, 0x0001,\r
-+      0x2001, 0x1952, 0x200c, 0x080c, 0x0e2f, 0x004e, 0x20a9, 0x03e8,\r
-+      0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000,\r
-+      0x190c, 0x2b24, 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010,\r
-+      0x1f04, 0x9740, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100,\r
-+      0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x6827, 0x4000, 0x6824,\r
-+      0x83ff, 0x1120, 0x2009, 0x0049, 0x080c, 0x9eac, 0x000e, 0x001e,\r
-+      0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,\r
-+      0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b8, 0x6a06,\r
-+      0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069,\r
-+      0x19b8, 0x6a32, 0x012e, 0x00de, 0x0005, 0x080c, 0x9047, 0x7854,\r
-+      0x7032, 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c, 0x9047, 0x7854,\r
-+      0x7032, 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c, 0x9047, 0x7854,\r
-+      0x7032, 0x7042, 0x7047, 0x2000, 0x0078, 0x080c, 0x9047, 0x7854,\r
-+      0x7032, 0x7042, 0x7047, 0x0400, 0x0038, 0x080c, 0x9047, 0x7854,\r
-+      0x7032, 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0x9380,\r
-+      0x00e6, 0x2071, 0x19b8, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022,\r
-+      0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066,\r
-+      0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7614, 0x2660,\r
-+      0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x9855, 0x8cff, 0x0904,\r
-+      0x9855, 0x6020, 0x9086, 0x0006, 0x1904, 0x9850, 0x88ff, 0x0138,\r
-+      0x2800, 0x9c06, 0x1904, 0x9850, 0x2039, 0x0000, 0x0050, 0x6010,\r
-+      0x9b06, 0x1904, 0x9850, 0x85ff, 0x0120, 0x6054, 0x9106, 0x1904,\r
-+      0x9850, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005,\r
-+      0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x80b8,\r
-+      0x080c, 0x98da, 0x7027, 0x0000, 0x0428, 0x080c, 0x80b8, 0x6820,\r
-+      0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,\r
-+      0x080c, 0x98da, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,\r
-+      0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006,\r
-+      0x080c, 0x2b14, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,\r
-+      0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010,\r
-+      0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010,\r
-+      0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,\r
-+      0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014, 0x0096,\r
-+      0x2048, 0x080c, 0xbb15, 0x0110, 0x080c, 0xd4d5, 0x009e, 0x080c,\r
-+      0x9e62, 0x080c, 0x97b0, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x97cb,\r
-+      0x2c78, 0x600c, 0x2060, 0x0804, 0x97cb, 0x9006, 0x012e, 0x000e,\r
-+      0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b,\r
-+      0x0000, 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6,\r
-+      0x0096, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000,\r
-+      0x2071, 0x19b8, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0x98c9,\r
-+      0x6020, 0x9086, 0x0006, 0x1904, 0x98c4, 0x87ff, 0x0128, 0x2700,\r
-+      0x9c06, 0x1904, 0x98c4, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff,\r
-+      0x0118, 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036,\r
-+      0x2019, 0x0001, 0x080c, 0x96d8, 0x7033, 0x0000, 0x9006, 0x703e,\r
-+      0x7042, 0x7046, 0x704a, 0x003e, 0x7038, 0x9c36, 0x1110, 0x660c,\r
-+      0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,\r
-+      0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,\r
-+      0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048,\r
-+      0x080c, 0xbb15, 0x0110, 0x080c, 0xd4d5, 0x080c, 0x9e62, 0x87ff,\r
-+      0x1198, 0x00ce, 0x0804, 0x9875, 0x2c78, 0x600c, 0x2060, 0x0804,\r
-+      0x9875, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e,\r
-+      0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd,\r
-+      0x0001, 0x0c80, 0x00e6, 0x2071, 0x19b8, 0x2001, 0x1800, 0x2004,\r
-+      0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000,\r
-+      0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006,\r
-+      0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x2c10, 0x7638, 0x2660,\r
-+      0x2678, 0x8cff, 0x0518, 0x2200, 0x9c06, 0x11e0, 0x7038, 0x9c36,\r
-+      0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36,\r
-+      0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x2c00,\r
-+      0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x9085,\r
-+      0x0001, 0x0020, 0x2c78, 0x600c, 0x2060, 0x08d8, 0x012e, 0x000e,\r
-+      0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6,\r
-+      0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,\r
-+      0x8000, 0x2071, 0x19b8, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904,\r
-+      0x99b6, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904,\r
-+      0x99b1, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005,\r
-+      0x0904, 0x998d, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c, 0x98da,\r
-+      0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,\r
-+      0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14,\r
-+      0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,\r
-+      0x700c, 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140,\r
-+      0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000,\r
-+      0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,\r
-+      0x600f, 0x0000, 0x080c, 0xbd0c, 0x1158, 0x080c, 0x3003, 0x080c,\r
-+      0xbd1d, 0x11f0, 0x080c, 0xa7c0, 0x00d8, 0x080c, 0x98da, 0x08c0,\r
-+      0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x0090, 0x6014, 0x2048,\r
-+      0x080c, 0xbb15, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa867,\r
-+      0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x687f, 0x080c, 0xbd00,\r
-+      0x080c, 0xbf84, 0x080c, 0x9e62, 0x080c, 0x97b0, 0x00ce, 0x0804,\r
-+      0x9936, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9936, 0x012e, 0x000e,\r
-+      0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005,\r
-+      0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xd4d5, 0x0c08, 0x00d6,\r
-+      0x080c, 0x8ed9, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014,\r
-+      0x20e1, 0x0001, 0x2099, 0x195a, 0x20e9, 0x0000, 0x20a1, 0x0250,\r
-+      0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c,\r
-+      0x9380, 0x00de, 0x0005, 0x080c, 0x8ed9, 0x700b, 0x0800, 0x7814,\r
-+      0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c,\r
-+      0x7026, 0x7858, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7858,\r
-+      0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0x9380, 0x00b6,\r
-+      0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xc18a,\r
-+      0x00de, 0x1904, 0x9a64, 0x080c, 0x8e8e, 0x7003, 0x1300, 0x782c,\r
-+      0x080c, 0x9b66, 0x2068, 0x6820, 0x9086, 0x0003, 0x0560, 0x7810,\r
-+      0x2058, 0xbaa0, 0x080c, 0x9db1, 0x11d8, 0x9286, 0x007e, 0x1128,\r
-+      0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286, 0x007f, 0x1128,\r
-+      0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284, 0xff80, 0x0180,\r
-+      0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400,\r
-+      0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0,\r
-+      0x6098, 0x700e, 0x00a8, 0x080c, 0x9db1, 0x1130, 0x7810, 0x2058,\r
-+      0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6, 0x2069, 0x181e, 0x2d04,\r
-+      0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e,\r
-+      0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de,\r
-+      0x080c, 0x9380, 0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006,\r
-+      0x001e, 0x00de, 0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c,\r
-+      0x9186, 0x0006, 0x01c0, 0x9186, 0x0003, 0x0904, 0x9ade, 0x9186,\r
-+      0x0005, 0x0904, 0x9ac7, 0x9186, 0x0004, 0x05d8, 0x9186, 0x0008,\r
-+      0x0904, 0x9acf, 0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700,\r
-+      0x080c, 0x9b43, 0x0005, 0x080c, 0x9b04, 0x00d6, 0x0026, 0x792c,\r
-+      0x2168, 0x2009, 0x4000, 0x6800, 0x0002, 0x9aa8, 0x9ab3, 0x9aaa,\r
-+      0x9ab3, 0x9aaf, 0x9aa8, 0x9aa8, 0x9ab3, 0x9ab3, 0x9ab3, 0x9ab3,\r
-+      0x9aa8, 0x9aa8, 0x9aa8, 0x9aa8, 0x9aa8, 0x9ab3, 0x9aa8, 0x9ab3,\r
-+      0x080c, 0x0db4, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e,\r
-+      0x0010, 0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804,\r
-+      0x9afd, 0x080c, 0x9b04, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009,\r
-+      0x4000, 0x6a00, 0x9286, 0x0002, 0x1108, 0x900e, 0x04b0, 0x04e1,\r
-+      0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x0470, 0x04a1,\r
-+      0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005,\r
-+      0x0118, 0x9286, 0x0002, 0x1108, 0x900e, 0x00f8, 0x0429, 0x00d6,\r
-+      0x0026, 0x792c, 0x2168, 0x6814, 0x0096, 0x2048, 0xa9ac, 0xa834,\r
-+      0x9112, 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c,\r
-+      0x9180, 0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004,\r
-+      0x0118, 0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018,\r
-+      0x002e, 0x00de, 0x0804, 0x9380, 0x00b6, 0x0036, 0x0046, 0x0056,\r
-+      0x0066, 0x080c, 0x8ed9, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a,\r
-+      0x793c, 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0x9db1, 0x1118,\r
-+      0x9092, 0x007e, 0x0268, 0x00d6, 0x2069, 0x181e, 0x2d2c, 0x8d68,\r
-+      0x2d34, 0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028,\r
-+      0x901e, 0x6498, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008,\r
-+      0x2004, 0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e,\r
-+      0x0020, 0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e,\r
-+      0x003e, 0x00be, 0x0005, 0x080c, 0x8ed9, 0x7003, 0x0100, 0x782c,\r
-+      0x700a, 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9380,\r
-+      0x080c, 0x8e85, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c,\r
-+      0x700e, 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff,\r
-+      0x8007, 0x701a, 0x60c3, 0x0010, 0x0804, 0x9380, 0x00e6, 0x2071,\r
-+      0x0240, 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8bc,\r
-+      0xd084, 0x0120, 0x7848, 0x702a, 0x7844, 0x702e, 0x00be, 0x00fe,\r
-+      0x000e, 0x00ee, 0x0005, 0x080c, 0x8ed0, 0x7003, 0x0100, 0x782c,\r
-+      0x700a, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9380, 0x0021,\r
-+      0x60c3, 0x0000, 0x0804, 0x9380, 0x00d6, 0x080c, 0x9c3f, 0xb810,\r
-+      0x9085, 0x0300, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878,\r
-+      0x700a, 0x687c, 0x700e, 0x7013, 0x0819, 0x080c, 0x936e, 0x721a,\r
-+      0x2f10, 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005,\r
-+      0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026,\r
-+      0x080c, 0x29ca, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012,\r
-+      0x002e, 0x080c, 0x93a3, 0x080c, 0x80af, 0x0005, 0x0036, 0x0096,\r
-+      0x00d6, 0x00e6, 0x7858, 0x2048, 0xaa7c, 0x9296, 0x00c0, 0x9294,\r
-+      0xfffd, 0xaa7e, 0xaa80, 0x9294, 0x0300, 0xaa82, 0xa96c, 0x9194,\r
-+      0x00ff, 0xab74, 0x9384, 0x00ff, 0x908d, 0xc200, 0xa96e, 0x9384,\r
-+      0xff00, 0x9215, 0xaa76, 0xa870, 0xaa78, 0xa87a, 0xaa72, 0x00d6,\r
-+      0x2069, 0x0200, 0x080c, 0x9c3f, 0x00de, 0x20e9, 0x0000, 0x20a1,\r
-+      0x0240, 0x20a9, 0x000a, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b,\r
-+      0x2098, 0x4003, 0x60a3, 0x0035, 0xaa68, 0x9294, 0x7000, 0x9286,\r
-+      0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x009e, 0x003e,\r
-+      0x0005, 0x900e, 0x7814, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x01c0,\r
-+      0x9084, 0x0003, 0x11a8, 0x2001, 0x180c, 0x2004, 0xd0bc, 0x0180,\r
-+      0x7824, 0xd0cc, 0x1168, 0xd0c4, 0x1158, 0xa8a8, 0x9005, 0x1140,\r
-+      0x2001, 0x180c, 0x200c, 0xc1d5, 0x2102, 0x2009, 0x1983, 0x210c,\r
-+      0x009e, 0x918d, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036,\r
-+      0x6116, 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009, 0x000a, 0x0088,\r
-+      0x2009, 0x000b, 0x0070, 0x2009, 0x000c, 0x0058, 0x2009, 0x000d,\r
-+      0x0040, 0x2009, 0x000e, 0x0028, 0x2009, 0x000f, 0x0010, 0x2009,\r
-+      0x0008, 0x6912, 0x0005, 0x00d6, 0x9290, 0x0018, 0x8214, 0x20e9,\r
-+      0x0000, 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8, 0x9284, 0x00e0,\r
-+      0x0128, 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008, 0x9016, 0x20a1,\r
-+      0x0240, 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810, 0x8000, 0x6812,\r
-+      0x0c60, 0x00de, 0x0005, 0x00d6, 0x0096, 0x6014, 0x2048, 0xa878,\r
-+      0x6056, 0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946, 0xa84a, 0x6023,\r
-+      0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b, 0xffff, 0xa817,\r
-+      0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, 0x1f24, 0x080c,\r
-+      0x8456, 0x0126, 0x2091, 0x8000, 0x080c, 0x8a4e, 0x012e, 0x009e,\r
-+      0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6, 0x0096,\r
-+      0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x760c, 0x2660,\r
-+      0x2678, 0x8cff, 0x0904, 0x9d11, 0x7024, 0x9c06, 0x1520, 0x2069,\r
-+      0x0100, 0x68c0, 0x9005, 0x0904, 0x9ce8, 0x080c, 0x93ac, 0x68c3,\r
-+      0x0000, 0x080c, 0x98da, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,\r
-+      0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14,\r
-+      0x9006, 0x080c, 0x2b14, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,\r
-+      0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e,\r
-+      0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a,\r
-+      0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,\r
-+      0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xbd0c, 0x1158,\r
-+      0x080c, 0x3003, 0x080c, 0xbd1d, 0x11f0, 0x080c, 0xa7c0, 0x00d8,\r
-+      0x080c, 0x98da, 0x08c0, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0,\r
-+      0x0090, 0x6014, 0x2048, 0x080c, 0xbb15, 0x0168, 0x6020, 0x9086,\r
-+      0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c,\r
-+      0x688c, 0x080c, 0xbd00, 0x080c, 0xbf84, 0x080c, 0x9e62, 0x080c,\r
-+      0x97b0, 0x00ce, 0x0804, 0x9c99, 0x2c78, 0x600c, 0x2060, 0x0804,\r
-+      0x9c99, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x006e, 0x009e,\r
-+      0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086,\r
-+      0x0006, 0x1d08, 0x080c, 0xd4d5, 0x08f0, 0x00d6, 0x0156, 0x080c,\r
-+      0x8ed9, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003,\r
-+      0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069,\r
-+      0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060,\r
-+      0x080c, 0x6fb2, 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6ad8, 0xd29c,\r
-+      0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x2011, 0x1848, 0x63f0,\r
-+      0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x2071,\r
-+      0x0250, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290,\r
-+      0x0002, 0x1f04, 0x9d59, 0x60c3, 0x0020, 0x080c, 0x9380, 0x015e,\r
-+      0x00de, 0x0005, 0x0156, 0x080c, 0x8ed9, 0x7a14, 0x82ff, 0x0168,\r
-+      0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100,\r
-+      0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007,\r
-+      0x001c, 0x700f, 0x0001, 0x2011, 0x198e, 0x2204, 0x8007, 0x701a,\r
-+      0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082,\r
-+      0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7022, 0x2001, 0x181f,\r
-+      0x2004, 0x7026, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff,\r
-+      0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,\r
-+      0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804,\r
-+      0x9380, 0x0006, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x000e, 0x0005,\r
-+      0x2011, 0x0003, 0x080c, 0x9771, 0x2011, 0x0002, 0x080c, 0x977b,\r
-+      0x080c, 0x9662, 0x0036, 0x901e, 0x080c, 0x96d8, 0x003e, 0x0005,\r
-+      0x2071, 0x1883, 0x7000, 0x9005, 0x0140, 0x2001, 0x0976, 0x2071,\r
-+      0x1800, 0x7072, 0x7076, 0x7067, 0xffe0, 0x2071, 0x1800, 0x7070,\r
-+      0x7052, 0x7057, 0x1cd0, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800,\r
-+      0x2091, 0x8000, 0x7550, 0x9582, 0x0010, 0x0608, 0x7054, 0x2060,\r
-+      0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02,\r
-+      0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529,\r
-+      0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085,\r
-+      0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc0, 0x9006,\r
-+      0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7550, 0x9582, 0x0010, 0x0600,\r
-+      0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018,\r
-+      0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003,\r
-+      0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1228,\r
-+      0x7556, 0x9085, 0x0001, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc8,\r
-+      0x9006, 0x0cc8, 0x9c82, 0x1cd0, 0x0a0c, 0x0db4, 0x2001, 0x1819,\r
-+      0x2004, 0x9c02, 0x1a0c, 0x0db4, 0x9006, 0x6006, 0x600a, 0x600e,\r
-+      0x6016, 0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e,\r
-+      0x6056, 0x605a, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a,\r
-+      0x603e, 0x6042, 0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x9086,\r
-+      0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x8973,\r
-+      0x012e, 0x0cc0, 0x0006, 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c,\r
-+      0xd084, 0x190c, 0x190d, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001,\r
-+      0x1957, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004,\r
-+      0x601a, 0x080c, 0xd787, 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6,\r
-+      0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582, 0x0001,\r
-+      0x0608, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0,\r
-+      0x0018, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98,\r
-+      0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502,\r
-+      0x1230, 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057,\r
-+      0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002,\r
-+      0x9ebf, 0x9ec8, 0x9ee3, 0x9efe, 0xc238, 0xc255, 0xc270, 0x9ebf,\r
-+      0x9ec8, 0x9ebf, 0x9f1a, 0x9ebf, 0x9ebf, 0x9ebf, 0x9ebf, 0x9186,\r
-+      0x0013, 0x1128, 0x080c, 0x886e, 0x080c, 0x8973, 0x0005, 0x0005,\r
-+      0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4, 0x0013, 0x006e,\r
-+      0x0005, 0x9ee1, 0xa639, 0xa807, 0x9ee1, 0xa895, 0xa1fd, 0x9ee1,\r
-+      0x9ee1, 0xa5bb, 0xae37, 0x9ee1, 0x9ee1, 0x9ee1, 0x9ee1, 0x9ee1,\r
-+      0x9ee1, 0x080c, 0x0db4, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c,\r
-+      0x0db4, 0x0013, 0x006e, 0x0005, 0x9efc, 0xb50b, 0x9efc, 0x9efc,\r
-+      0x9efc, 0x9efc, 0x9efc, 0x9efc, 0xb4b0, 0xb68d, 0x9efc, 0xb54c,\r
-+      0xb5cb, 0xb54c, 0xb5cb, 0x9efc, 0x080c, 0x0db4, 0x6000, 0x9082,\r
-+      0x0016, 0x1a0c, 0x0db4, 0x6000, 0x0002, 0x9f18, 0xae7e, 0xaf63,\r
-+      0xb093, 0xb23e, 0x9f18, 0x9f18, 0x9f18, 0xae52, 0xb43c, 0xb43f,\r
-+      0x9f18, 0x9f18, 0x9f18, 0x9f18, 0xb46e, 0x9f18, 0x9f18, 0x9f18,\r
-+      0x080c, 0x0db4, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4,\r
-+      0x0013, 0x006e, 0x0005, 0x9f33, 0x9f33, 0x9f76, 0xa015, 0xa0aa,\r
-+      0x9f33, 0x9f33, 0x9f33, 0x9f35, 0x9f33, 0x9f33, 0x9f33, 0x9f33,\r
-+      0x9f33, 0x9f33, 0x9f33, 0x080c, 0x0db4, 0x9186, 0x004c, 0x0588,\r
-+      0x9186, 0x0003, 0x190c, 0x0db4, 0x0096, 0x601c, 0xc0ed, 0x601e,\r
-+      0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000,\r
-+      0xc0b5, 0xa87e, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0x9006, 0xa836,\r
-+      0xa83a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,\r
-+      0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, 0x080c, 0x1a5c,\r
-+      0x080c, 0x8456, 0x0126, 0x2091, 0x8000, 0x080c, 0x8a4e, 0x012e,\r
-+      0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c,\r
-+      0xa0cc, 0x080c, 0xc22a, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096,\r
-+      0x00f6, 0x2079, 0x1800, 0x7a8c, 0x6014, 0x2048, 0xa87c, 0xd0ec,\r
-+      0x1110, 0x9290, 0x0018, 0xac78, 0xc4fc, 0x0046, 0xa8e0, 0x9005,\r
-+      0x1140, 0xa8dc, 0x921a, 0x0140, 0x0220, 0xa87b, 0x0007, 0x2010,\r
-+      0x0028, 0xa87b, 0x0015, 0x0010, 0xa87b, 0x0000, 0x8214, 0xa883,\r
-+      0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6, 0x00e6,\r
-+      0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100, 0x9086, 0x0015,\r
-+      0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086, 0x0016, 0x0118,\r
-+      0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423, 0x9405, 0x0002,\r
-+      0x9fdd, 0x9fdd, 0x9fd8, 0x9fdb, 0x9fdd, 0x9fd5, 0x9fc8, 0x9fc8,\r
-+      0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8,\r
-+      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e,\r
-+      0x00fe, 0x009e, 0x00de, 0x080c, 0x0db4, 0x080c, 0xaa76, 0x0028,\r
-+      0x080c, 0xab99, 0x0010, 0x080c, 0xac88, 0x00fe, 0x00ee, 0x00de,\r
-+      0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0xa18a,\r
-+      0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006,\r
-+      0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,\r
-+      0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x1249,\r
-+      0x080c, 0xa334, 0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e,\r
-+      0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804, 0x9e32, 0x2001,\r
-+      0x002c, 0x900e, 0x080c, 0xa1f0, 0x0c70, 0x91b6, 0x0015, 0x0170,\r
-+      0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0db4, 0x91b2,\r
-+      0x0050, 0x1a0c, 0x0db4, 0x9182, 0x0047, 0x00ca, 0x2001, 0x0109,\r
-+      0x2004, 0xd08c, 0x0198, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016,\r
-+      0x0026, 0x080c, 0x83aa, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001,\r
-+      0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0x9f76, 0x0005, 0xa048,\r
-+      0xa048, 0xa04a, 0xa080, 0xa048, 0xa048, 0xa048, 0xa048, 0xa093,\r
-+      0x080c, 0x0db4, 0x00d6, 0x0016, 0x0096, 0x080c, 0x8923, 0x080c,\r
-+      0x8a4e, 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0,\r
-+      0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001,\r
-+      0x0000, 0x900e, 0x080c, 0xa1f0, 0x080c, 0x9e32, 0x00a8, 0x6003,\r
-+      0x0002, 0xa8a4, 0xa9a8, 0x9105, 0x1178, 0xa8ae, 0xa8b2, 0x0c78,\r
-+      0xa87f, 0x0020, 0xa88c, 0xa88a, 0xa8a4, 0xa8ae, 0xa8a8, 0xa8b2,\r
-+      0xa8c7, 0x0000, 0xa8cb, 0x0000, 0x009e, 0x001e, 0x00de, 0x0005,\r
-+      0x080c, 0x8923, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xbb17,\r
-+      0x0120, 0xa87b, 0x0006, 0x080c, 0x688c, 0x009e, 0x00de, 0x080c,\r
-+      0x9e32, 0x0804, 0x8a4e, 0x080c, 0x8923, 0x080c, 0x2fda, 0x080c,\r
-+      0xc227, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xbb17, 0x0120,\r
-+      0xa87b, 0x0029, 0x080c, 0x688c, 0x009e, 0x00de, 0x080c, 0x9e32,\r
-+      0x0804, 0x8a4e, 0x9182, 0x0047, 0x0002, 0xa0ba, 0xa0bc, 0xa0ba,\r
-+      0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba,\r
-+      0xa0ba, 0xa0bc, 0x080c, 0x0db4, 0x00d6, 0x0096, 0x080c, 0x150f,\r
-+      0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x688c,\r
-+      0x009e, 0x00de, 0x0804, 0x9e32, 0x0026, 0x0036, 0x0056, 0x0066,\r
-+      0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x0feb, 0x000e, 0x090c,\r
-+      0x0db4, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e,\r
-+      0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x798c, 0x9188,\r
-+      0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001,\r
-+      0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034,\r
-+      0x1228, 0x2011, 0x001f, 0x080c, 0xb712, 0x04c0, 0x2130, 0x2009,\r
-+      0x0034, 0x2011, 0x001f, 0x080c, 0xb712, 0x96b2, 0x0034, 0xb004,\r
-+      0x904d, 0x0110, 0x080c, 0x0f9d, 0x080c, 0x0feb, 0x01d0, 0x8528,\r
-+      0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d,\r
-+      0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xb712, 0x00b8, 0x96b2,\r
-+      0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xb712,\r
-+      0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,\r
-+      0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072, 0x0048, 0x2001, 0x0205,\r
-+      0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566, 0x2a48,\r
-+      0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x688c, 0x000e, 0x2048,\r
-+      0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e,\r
-+      0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x0feb,\r
-+      0x000e, 0x090c, 0x0db4, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019,\r
-+      0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079,\r
-+      0x1800, 0x798c, 0x810c, 0x9188, 0x000c, 0x9182, 0x001a, 0x0210,\r
-+      0x2009, 0x001a, 0x21a8, 0x810b, 0xa972, 0xac76, 0x2e98, 0xa85c,\r
-+      0x9080, 0x001f, 0x20a0, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080,\r
-+      0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x688c, 0x009e, 0x00fe,\r
-+      0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001,\r
-+      0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200,\r
-+      0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021,\r
-+      0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018,\r
-+      0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x0feb, 0x2900, 0x009e,\r
-+      0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002,\r
-+      0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102,\r
-+      0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228,\r
-+      0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800,\r
-+      0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300,\r
-+      0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816,\r
-+      0x2e98, 0x2310, 0x84ff, 0x0904, 0xa19f, 0x0804, 0xa1a1, 0x9085,\r
-+      0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005,\r
-+      0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c,\r
-+      0x687f, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118,\r
-+      0x080c, 0x9e32, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0db4, 0x080c,\r
-+      0x9e32, 0x0005, 0x20a9, 0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014,\r
-+      0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0, 0x009e, 0x4003,\r
-+      0x0136, 0x9080, 0x001b, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418,\r
-+      0x8318, 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8,\r
-+      0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003,\r
-+      0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xbb17,\r
-+      0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e,\r
-+      0x0804, 0x9e32, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200,\r
-+      0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8bf, 0x0000, 0x00be, 0x6014,\r
-+      0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32,\r
-+      0x080c, 0x9e32, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48,\r
-+      0x0cc8, 0x0006, 0x0016, 0x080c, 0xc212, 0x0188, 0x6014, 0x9005,\r
-+      0x1170, 0x600b, 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009,\r
-+      0x0022, 0x080c, 0xa611, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085,\r
-+      0x0001, 0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c,\r
-+      0x20e1, 0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001,\r
-+      0x2099, 0x0260, 0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a, 0xa804,\r
-+      0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003,\r
-+      0x2001, 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020,\r
-+      0x4003, 0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867,\r
-+      0x0103, 0x080c, 0x9e32, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016,\r
-+      0x900e, 0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff,\r
-+      0x800c, 0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108,\r
-+      0x810b, 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c,\r
-+      0xb712, 0x080c, 0xbb17, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000,\r
-+      0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0x9e32, 0x001e, 0x009e,\r
-+      0x0005, 0x0016, 0x0096, 0x7030, 0x9086, 0x0100, 0x1118, 0x2009,\r
-+      0x0004, 0x0010, 0x7034, 0x800c, 0x810b, 0x2011, 0x000c, 0x2019,\r
-+      0x000c, 0x6014, 0x2048, 0xa804, 0x0096, 0x9005, 0x0108, 0x2048,\r
-+      0x080c, 0xb712, 0x009e, 0x080c, 0xbb17, 0x0148, 0xa804, 0x9005,\r
-+      0x1158, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c,\r
-+      0x9e32, 0x009e, 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007,\r
-+      0x9086, 0x0100, 0x1118, 0x080c, 0xa7c0, 0x00e0, 0xa034, 0x8007,\r
-+      0x800c, 0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,\r
-+      0x9080, 0x000c, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000,\r
-+      0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x122f,\r
-+      0x0019, 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x0feb,\r
-+      0x000e, 0x01b0, 0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006,\r
-+      0xae6a, 0x2800, 0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96,\r
-+      0xad9a, 0x0086, 0x2940, 0x080c, 0x10d5, 0x008e, 0x9085, 0x0001,\r
-+      0x009e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff,\r
-+      0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1520, 0x700c,\r
-+      0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x11e0, 0x6043,\r
-+      0x0000, 0x2c68, 0x0016, 0x2009, 0x0035, 0x080c, 0xc18a, 0x001e,\r
-+      0x1158, 0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003,\r
-+      0x0130, 0x9386, 0x0006, 0x0128, 0x080c, 0x9e32, 0x0020, 0x0039,\r
-+      0x0010, 0x080c, 0xa446, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096,\r
-+      0x6814, 0x2048, 0x9186, 0x0015, 0x0904, 0xa42e, 0x918e, 0x0016,\r
-+      0x1904, 0xa444, 0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120,\r
-+      0x9186, 0x0300, 0x1904, 0xa408, 0x89ff, 0x1138, 0x6800, 0x9086,\r
-+      0x000f, 0x0904, 0xa3eb, 0x0804, 0xa442, 0x6808, 0x9086, 0xffff,\r
-+      0x1904, 0xa430, 0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128,\r
-+      0xa83c, 0xa940, 0x9105, 0x1904, 0xa430, 0x6824, 0xd0b4, 0x1904,\r
-+      0xa430, 0x080c, 0xbd00, 0x685c, 0xa882, 0xa87c, 0xc0dc, 0xc0f4,\r
-+      0xc0d4, 0xa87e, 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c,\r
-+      0x8270, 0xa884, 0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e,\r
-+      0x1138, 0x00c6, 0x2d60, 0x080c, 0xb83c, 0x00ce, 0x0804, 0xa442,\r
-+      0x00c6, 0xa868, 0xd0fc, 0x1118, 0x080c, 0x5d4d, 0x0010, 0x080c,\r
-+      0x60f4, 0x00ce, 0x1904, 0xa430, 0x00c6, 0x2d60, 0x080c, 0x9e32,\r
-+      0x00ce, 0x0804, 0xa442, 0x00c6, 0x080c, 0x9e7f, 0x0198, 0x6017,\r
-+      0x0000, 0x6810, 0x6012, 0x080c, 0xbf8c, 0x6023, 0x0003, 0x6904,\r
-+      0x00c6, 0x2d60, 0x080c, 0x9e32, 0x00ce, 0x080c, 0x9eac, 0x00ce,\r
-+      0x0804, 0xa442, 0x2001, 0x1959, 0x2004, 0x6842, 0x00ce, 0x04d0,\r
-+      0x7008, 0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900,\r
-+      0xc1bc, 0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c,\r
-+      0xc1cc, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c,\r
-+      0x83f1, 0x080c, 0x8973, 0x00ce, 0x00e8, 0x700c, 0x9086, 0x2a00,\r
-+      0x1138, 0x2001, 0x1959, 0x2004, 0x6842, 0x00a0, 0x0479, 0x00a0,\r
-+      0x89ff, 0x090c, 0x0db4, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103,\r
-+      0xa87b, 0x0003, 0x080c, 0x66a7, 0x080c, 0xbd00, 0x080c, 0x9e62,\r
-+      0x00de, 0x00ce, 0x080c, 0x9e32, 0x009e, 0x0005, 0x9186, 0x0015,\r
-+      0x1128, 0x2001, 0x1959, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016,\r
-+      0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, 0xd787, 0x080c, 0x8204,\r
-+      0x080c, 0x9e32, 0x00ce, 0x080c, 0x9e32, 0x0005, 0x0026, 0x0036,\r
-+      0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001, 0x1959,\r
-+      0x2004, 0x6842, 0x0804, 0xa4c0, 0x00c6, 0x2d60, 0x080c, 0xb73d,\r
-+      0x00ce, 0x6804, 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060,\r
-+      0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x83f1, 0x080c, 0x8973,\r
-+      0x00ce, 0x04f0, 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c,\r
-+      0x0db4, 0x6800, 0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac, 0x0178,\r
-+      0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882, 0x2001,\r
-+      0x0001, 0x6832, 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa87c,\r
-+      0xd0b4, 0x1150, 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838,\r
-+      0xa934, 0x9105, 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306,\r
-+      0x1118, 0x7020, 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a,\r
-+      0x2001, 0x0005, 0x6832, 0x080c, 0xbe83, 0x080c, 0x8973, 0x0010,\r
-+      0x080c, 0x9e32, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6,\r
-+      0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10,\r
-+      0x00be, 0x9206, 0x1904, 0xa52b, 0x700c, 0x6210, 0x00b6, 0x2258,\r
-+      0xba14, 0x00be, 0x9206, 0x1904, 0xa52b, 0x6038, 0x2068, 0x6824,\r
-+      0xc0dc, 0x6826, 0x6a20, 0x9286, 0x0007, 0x0904, 0xa52b, 0x9286,\r
-+      0x0002, 0x0904, 0xa52b, 0x9286, 0x0000, 0x05e8, 0x6808, 0x633c,\r
-+      0x9306, 0x15c8, 0x2071, 0x026c, 0x9186, 0x0015, 0x0570, 0x918e,\r
-+      0x0016, 0x1100, 0x00c6, 0x6038, 0x2060, 0x6104, 0x9186, 0x004b,\r
-+      0x01c0, 0x9186, 0x004c, 0x01a8, 0x9186, 0x004d, 0x0190, 0x9186,\r
-+      0x004e, 0x0178, 0x9186, 0x0052, 0x0160, 0x6014, 0x0096, 0x2048,\r
-+      0x080c, 0xbb17, 0x090c, 0x0db4, 0xa87b, 0x0003, 0x009e, 0x080c,\r
-+      0xc1cc, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c,\r
-+      0x83f1, 0x080c, 0x8973, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001,\r
-+      0x1959, 0x2004, 0x7042, 0x080c, 0x9e32, 0x002e, 0x00de, 0x00ee,\r
-+      0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058,\r
-+      0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02,\r
-+      0x0460, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010,\r
-+      0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xae0d, 0x002e, 0x003e,\r
-+      0x015e, 0x009e, 0x1904, 0xa59a, 0x0096, 0x0156, 0x0036, 0x0026,\r
-+      0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c,\r
-+      0xae0d, 0x002e, 0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a,\r
-+      0x733c, 0xbb0e, 0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128,\r
-+      0x00fe, 0x009e, 0x00be, 0x0804, 0xa235, 0x0096, 0x2048, 0xaa12,\r
-+      0xab16, 0xac0a, 0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f,\r
-+      0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c,\r
-+      0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x122f, 0x080c, 0xa334,\r
-+      0x0130, 0x00fe, 0x009e, 0x080c, 0x9e32, 0x00be, 0x0005, 0x080c,\r
-+      0xa7c0, 0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x2fda, 0x080c, 0xc227,\r
-+      0x00fe, 0x00c6, 0x080c, 0x9ddc, 0x2f00, 0x6012, 0x6017, 0x0000,\r
-+      0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007,\r
-+      0x080c, 0x618f, 0x080c, 0x61bb, 0x080c, 0x8439, 0x080c, 0x8973,\r
-+      0x00ce, 0x0804, 0xa56d, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0db4,\r
-+      0x91b2, 0x0040, 0x1a04, 0xa623, 0x0002, 0xa611, 0xa611, 0xa607,\r
-+      0xa611, 0xa611, 0xa611, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605,\r
-+      0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605,\r
-+      0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605,\r
-+      0xa605, 0xa605, 0xa605, 0xa605, 0xa611, 0xa605, 0xa611, 0xa611,\r
-+      0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa607, 0xa605, 0xa605,\r
-+      0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa611,\r
-+      0xa611, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605,\r
-+      0xa605, 0xa605, 0xa611, 0xa605, 0xa605, 0x080c, 0x0db4, 0x0066,\r
-+      0x00b6, 0x6610, 0x2658, 0xb8bc, 0xc08c, 0xb8be, 0x00be, 0x006e,\r
-+      0x0000, 0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c,\r
-+      0x8439, 0x0010, 0x080c, 0x83f1, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x8973, 0x012e, 0x0005, 0x2600, 0x0002, 0xa637, 0xa637, 0xa637,\r
-+      0xa611, 0xa611, 0xa637, 0xa637, 0xa637, 0xa637, 0xa611, 0xa637,\r
-+      0xa611, 0xa637, 0xa611, 0xa637, 0xa637, 0xa637, 0xa637, 0x080c,\r
-+      0x0db4, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0db4, 0x91b6, 0x0013,\r
-+      0x0904, 0xa6fb, 0x91b6, 0x0027, 0x1904, 0xa6b6, 0x080c, 0x886e,\r
-+      0x6004, 0x080c, 0xbd0c, 0x01b0, 0x080c, 0xbd1d, 0x01a8, 0x908e,\r
-+      0x0021, 0x0904, 0xa6b3, 0x908e, 0x0022, 0x1130, 0x080c, 0xa261,\r
-+      0x0904, 0xa6af, 0x0804, 0xa6b0, 0x908e, 0x003d, 0x0904, 0xa6b3,\r
-+      0x0804, 0xa6a9, 0x080c, 0x3003, 0x2001, 0x0007, 0x080c, 0x618f,\r
-+      0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xa7c0, 0x9186,\r
-+      0x007e, 0x1148, 0x2001, 0x1836, 0x2014, 0xc285, 0x080c, 0x6fb2,\r
-+      0x1108, 0xc2ad, 0x2202, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110,\r
-+      0x080c, 0xd7e2, 0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110,\r
-+      0x2019, 0x0028, 0x080c, 0x8571, 0x0076, 0x903e, 0x080c, 0x8469,\r
-+      0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xd29b,\r
-+      0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0xc227, 0x0016, 0x080c,\r
-+      0xbf84, 0x080c, 0x9e32, 0x001e, 0x080c, 0x30d5, 0x080c, 0x8973,\r
-+      0x0030, 0x080c, 0xbf84, 0x080c, 0x9e32, 0x080c, 0x8973, 0x0005,\r
-+      0x080c, 0xa7c0, 0x0cb0, 0x080c, 0xa7fc, 0x0c98, 0x9186, 0x0014,\r
-+      0x1db0, 0x080c, 0x886e, 0x6004, 0x908e, 0x0022, 0x1118, 0x080c,\r
-+      0xa261, 0x0d68, 0x080c, 0x2fda, 0x080c, 0xc227, 0x080c, 0xbd0c,\r
-+      0x1190, 0x080c, 0x3003, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be,\r
-+      0x080c, 0xa7c0, 0x9186, 0x007e, 0x1128, 0x2001, 0x1836, 0x200c,\r
-+      0xc185, 0x2102, 0x0870, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0,\r
-+      0x0840, 0x6004, 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071,\r
-+      0x1894, 0x2079, 0x0000, 0x080c, 0x3369, 0x00fe, 0x00ee, 0x0804,\r
-+      0xa6a9, 0x6004, 0x908e, 0x0021, 0x0d48, 0x908e, 0x0022, 0x090c,\r
-+      0xa7c0, 0x0804, 0xa6a9, 0x90b2, 0x0040, 0x1a04, 0xa7a9, 0x2008,\r
-+      0x0002, 0xa743, 0xa744, 0xa747, 0xa74a, 0xa74d, 0xa750, 0xa741,\r
-+      0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741,\r
-+      0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741,\r
-+      0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa753,\r
-+      0xa75e, 0xa741, 0xa760, 0xa75e, 0xa741, 0xa741, 0xa741, 0xa741,\r
-+      0xa741, 0xa75e, 0xa75e, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741,\r
-+      0xa741, 0xa741, 0xa741, 0xa790, 0xa75e, 0xa741, 0xa75a, 0xa741,\r
-+      0xa741, 0xa741, 0xa75b, 0xa741, 0xa741, 0xa741, 0xa75e, 0xa787,\r
-+      0xa741, 0x080c, 0x0db4, 0x00d0, 0x2001, 0x000b, 0x0410, 0x2001,\r
-+      0x0003, 0x00f8, 0x2001, 0x0005, 0x00e0, 0x2001, 0x0001, 0x00c8,\r
-+      0x2001, 0x0009, 0x00b0, 0x080c, 0x886e, 0x6003, 0x0005, 0x080c,\r
-+      0x8973, 0x0070, 0x0018, 0x0010, 0x080c, 0x618f, 0x0804, 0xa7a1,\r
-+      0x080c, 0x886e, 0x080c, 0xc22a, 0x6003, 0x0004, 0x080c, 0x8973,\r
-+      0x0005, 0x080c, 0x618f, 0x080c, 0x886e, 0x6003, 0x0002, 0x0036,\r
-+      0x2019, 0x185e, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001, 0x1957,\r
-+      0x201c, 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b,\r
-+      0x831b, 0x9318, 0x631a, 0x003e, 0x080c, 0x8973, 0x0c08, 0x080c,\r
-+      0x886e, 0x080c, 0xbf84, 0x080c, 0x9e32, 0x080c, 0x8973, 0x08c0,\r
-+      0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079, 0x0000, 0x080c, 0x3369,\r
-+      0x00fe, 0x00ee, 0x080c, 0x886e, 0x080c, 0x9e32, 0x080c, 0x8973,\r
-+      0x0838, 0x080c, 0x886e, 0x6003, 0x0002, 0x080c, 0xc22a, 0x0804,\r
-+      0x8973, 0x2600, 0x2008, 0x0002, 0xa7be, 0xa7be, 0xa7be, 0xa7a1,\r
-+      0xa7a1, 0xa7be, 0xa7be, 0xa7be, 0xa7be, 0xa7a1, 0xa7be, 0xa7a1,\r
-+      0xa7be, 0xa7a1, 0xa7be, 0xa7be, 0xa7be, 0xa7be, 0x080c, 0x0db4,\r
-+      0x00e6, 0x0096, 0x0026, 0x0016, 0x080c, 0xbb17, 0x0568, 0x6014,\r
-+      0x2048, 0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086, 0x0056,\r
-+      0x1148, 0x080c, 0x512f, 0x0130, 0x2001, 0x0000, 0x900e, 0x2011,\r
-+      0x4000, 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c,\r
-+      0xc0f1, 0x0090, 0xa868, 0xd0fc, 0x0178, 0xa807, 0x0000, 0x0016,\r
-+      0x6004, 0x908e, 0x0021, 0x0168, 0x908e, 0x003d, 0x0150, 0x001e,\r
-+      0xa867, 0x0103, 0xa833, 0x0100, 0x001e, 0x002e, 0x009e, 0x00ee,\r
-+      0x0005, 0x001e, 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048, 0xa800,\r
-+      0x2048, 0xa867, 0x0103, 0xa823, 0x8001, 0x009e, 0x0005, 0x00b6,\r
-+      0x6610, 0x2658, 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c, 0x1a0c,\r
-+      0x0db4, 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xc010, 0x0804,\r
-+      0xa884, 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xc059, 0x0804,\r
-+      0xa884, 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xc085, 0x0804,\r
-+      0xa884, 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xbfa6, 0x0804,\r
-+      0xa884, 0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xbd56, 0x0804,\r
-+      0xa884, 0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xbd97, 0x0804,\r
-+      0xa884, 0x6604, 0x96b6, 0x001f, 0x1118, 0x080c, 0xa20a, 0x04e0,\r
-+      0x6604, 0x96b6, 0x0000, 0x1118, 0x080c, 0xa531, 0x04a8, 0x6604,\r
-+      0x96b6, 0x0022, 0x1118, 0x080c, 0xa242, 0x0470, 0x6604, 0x96b6,\r
-+      0x0035, 0x1118, 0x080c, 0xa352, 0x0438, 0x6604, 0x96b6, 0x0039,\r
-+      0x1118, 0x080c, 0xa4c6, 0x0400, 0x6604, 0x96b6, 0x003d, 0x1118,\r
-+      0x080c, 0xa27a, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c,\r
-+      0xa2b6, 0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xa2e1,\r
-+      0x0058, 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016,\r
-+      0x1128, 0x00be, 0x0804, 0xab42, 0x00be, 0x0005, 0x080c, 0x9ec7,\r
-+      0x0cd8, 0xa8a1, 0xa8a4, 0xa8a1, 0xa8e8, 0xa8a1, 0xaa76, 0xab4f,\r
-+      0xa8a1, 0xa8a1, 0xab1c, 0xa8a1, 0xab30, 0x0096, 0x080c, 0x150f,\r
-+      0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e, 0x0804,\r
-+      0x9e32, 0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708c,\r
-+      0x9086, 0x0074, 0x1540, 0x080c, 0xd26c, 0x11b0, 0x6010, 0x00b6,\r
-+      0x2058, 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5,\r
-+      0xb802, 0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x618f, 0x080c,\r
-+      0x3003, 0x080c, 0x9e32, 0x0088, 0x2001, 0x000a, 0x080c, 0x618f,\r
-+      0x080c, 0x3003, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x8439,\r
-+      0x080c, 0x8973, 0x0010, 0x080c, 0xaa61, 0x00ee, 0x0005, 0x00d6,\r
-+      0xb800, 0xd084, 0x0158, 0x9006, 0x080c, 0x617b, 0x2069, 0x1853,\r
-+      0x6804, 0x0020, 0x2001, 0x0006, 0x080c, 0x61bb, 0x00de, 0x0005,\r
-+      0x00b6, 0x0096, 0x00d6, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074,\r
-+      0x1904, 0xaa3a, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120,\r
-+      0x080c, 0xac93, 0x0804, 0xa99f, 0x00d6, 0x080c, 0x6fb2, 0x0198,\r
-+      0x0026, 0x2011, 0x0010, 0x080c, 0x6586, 0x002e, 0x05c8, 0x080c,\r
-+      0x539a, 0x1540, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103,\r
-+      0xa833, 0xdead, 0x00f8, 0x0026, 0x2011, 0x8008, 0x080c, 0x6586,\r
-+      0x002e, 0x0530, 0x6014, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086,\r
-+      0x0039, 0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c,\r
-+      0xc0f1, 0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103,\r
-+      0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x3003,\r
-+      0x080c, 0x9e32, 0x001e, 0x080c, 0x30d5, 0x00de, 0x0804, 0xaa3b,\r
-+      0x00de, 0x080c, 0xac88, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080,\r
-+      0x1510, 0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff,\r
-+      0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,\r
-+      0x080c, 0xc0f1, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833,\r
-+      0x0200, 0x2001, 0x0006, 0x080c, 0x618f, 0x080c, 0x3003, 0x080c,\r
-+      0x9e32, 0x0804, 0xaa3b, 0x080c, 0xaa49, 0x6014, 0x9005, 0x0190,\r
-+      0x2048, 0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086,\r
-+      0x0039, 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c,\r
-+      0xc0f1, 0x08f8, 0x080c, 0xaa3f, 0x0160, 0x9006, 0x080c, 0x617b,\r
-+      0x2001, 0x0004, 0x080c, 0x61bb, 0x2001, 0x0007, 0x080c, 0x618f,\r
-+      0x08a0, 0x2001, 0x0004, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007,\r
-+      0x0003, 0x080c, 0x8439, 0x080c, 0x8973, 0x0804, 0xaa3b, 0xb85c,\r
-+      0xd0e4, 0x01d0, 0x080c, 0xbf26, 0x080c, 0x6fb2, 0x0118, 0xd0dc,\r
-+      0x1904, 0xa961, 0x2011, 0x1836, 0x2204, 0xc0ad, 0x2012, 0x2001,\r
-+      0x0002, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x26d7,\r
-+      0x78e2, 0x00fe, 0x0804, 0xa961, 0x080c, 0xbf63, 0x2011, 0x1836,\r
-+      0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xd3c5, 0x000e, 0x1904,\r
-+      0xa961, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x618f, 0x9006,\r
-+      0x080c, 0x617b, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520,\r
-+      0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084,\r
-+      0x00ff, 0x78e6, 0x707a, 0x7010, 0x78ea, 0x707e, 0x908c, 0x00ff,\r
-+      0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x26ac, 0x00f6,\r
-+      0x2100, 0x900e, 0x080c, 0x2663, 0x795a, 0x00fe, 0x9186, 0x0081,\r
-+      0x01d8, 0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079,\r
-+      0x0100, 0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe,\r
-+      0x080c, 0x26ac, 0x00f6, 0x2079, 0x1800, 0x797e, 0x2100, 0x900e,\r
-+      0x080c, 0x2663, 0x795a, 0x00fe, 0x8108, 0x080c, 0x61de, 0x2b00,\r
-+      0x00ce, 0x1904, 0xa961, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c,\r
-+      0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009,\r
-+      0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c, 0x618f, 0x6023,\r
-+      0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8439, 0x080c,\r
-+      0x8973, 0x0008, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001,\r
-+      0x1810, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x1854, 0x2004, 0xd0ac,\r
-+      0x0005, 0x00e6, 0x080c, 0xd83b, 0x0190, 0x2071, 0x0260, 0x7108,\r
-+      0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010,\r
-+      0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee,\r
-+      0x0005, 0x2030, 0x2001, 0x0007, 0x080c, 0x618f, 0x080c, 0x539a,\r
-+      0x1120, 0x2001, 0x0007, 0x080c, 0x61bb, 0x080c, 0x3003, 0x6020,\r
-+      0x9086, 0x000a, 0x1108, 0x0005, 0x0804, 0x9e32, 0x00b6, 0x00e6,\r
-+      0x0026, 0x0016, 0x2071, 0x1800, 0x708c, 0x9086, 0x0014, 0x1904,\r
-+      0xab13, 0x00d6, 0x080c, 0x6fb2, 0x0198, 0x0026, 0x2011, 0x0010,\r
-+      0x080c, 0x6586, 0x002e, 0x05c8, 0x080c, 0x539a, 0x1540, 0x6014,\r
-+      0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x00f8,\r
-+      0x0026, 0x2011, 0x8008, 0x080c, 0x6586, 0x002e, 0x0530, 0x6014,\r
-+      0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001,\r
-+      0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xc0f1, 0x0040, 0x6014,\r
-+      0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x6010,\r
-+      0x2058, 0xb9a0, 0x0016, 0x080c, 0x3003, 0x080c, 0x9e32, 0x001e,\r
-+      0x080c, 0x30d5, 0x00de, 0x0804, 0xab17, 0x00de, 0x080c, 0x539a,\r
-+      0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058,\r
-+      0xbba0, 0x2021, 0x0006, 0x080c, 0x4a76, 0x004e, 0x003e, 0x00d6,\r
-+      0x6010, 0x2058, 0x080c, 0x62d9, 0x080c, 0xa8d7, 0x00de, 0x080c,\r
-+      0xad59, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001,\r
-+      0x0006, 0x080c, 0x618f, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864,\r
-+      0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e,\r
-+      0x2011, 0x4000, 0x080c, 0xc0f1, 0x0060, 0xa864, 0x9084, 0x00ff,\r
-+      0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833,\r
-+      0x0200, 0x009e, 0x080c, 0x3003, 0x6020, 0x9086, 0x000a, 0x0138,\r
-+      0x080c, 0x9e32, 0x0020, 0x080c, 0xa7c0, 0x080c, 0xaa61, 0x001e,\r
-+      0x002e, 0x00ee, 0x00be, 0x0005, 0x2011, 0x1823, 0x2204, 0x9086,\r
-+      0x0014, 0x1160, 0x2001, 0x0002, 0x080c, 0x618f, 0x6003, 0x0001,\r
-+      0x6007, 0x0001, 0x080c, 0x8439, 0x0804, 0x8973, 0x0804, 0xaa61,\r
-+      0x2030, 0x2011, 0x1823, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6,\r
-+      0x000b, 0x1120, 0x2001, 0x0007, 0x080c, 0x618f, 0x0804, 0x9e32,\r
-+      0x0804, 0xaa61, 0x0002, 0xa8a1, 0xab5a, 0xa8a1, 0xab99, 0xa8a1,\r
-+      0xac44, 0xab4f, 0xa8a1, 0xa8a1, 0xac57, 0xa8a1, 0xac67, 0x6604,\r
-+      0x9686, 0x0003, 0x0904, 0xaa76, 0x96b6, 0x001e, 0x1110, 0x080c,\r
-+      0x9e32, 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xac77, 0x11a0,\r
-+      0x9006, 0x080c, 0x617b, 0x080c, 0x2fda, 0x080c, 0xc227, 0x2001,\r
-+      0x0002, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,\r
-+      0x8439, 0x080c, 0x8973, 0x0408, 0x2009, 0x026e, 0x2104, 0x9086,\r
-+      0x0009, 0x1160, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005,\r
-+      0x0170, 0x8001, 0xb842, 0x601b, 0x000a, 0x0078, 0x2009, 0x026f,\r
-+      0x2104, 0x9084, 0xff00, 0x9086, 0x1900, 0x1108, 0x08a0, 0x080c,\r
-+      0x2fda, 0x080c, 0xc227, 0x080c, 0xaa61, 0x00ce, 0x00de, 0x00be,\r
-+      0x0005, 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xac85, 0x00d6,\r
-+      0x2069, 0x194d, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0,\r
-+      0x9086, 0x007e, 0x1138, 0x2069, 0x181f, 0x2d04, 0x8000, 0x206a,\r
-+      0x00de, 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x617b, 0x2001,\r
-+      0x0002, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,\r
-+      0x8439, 0x080c, 0x8973, 0x0804, 0xac14, 0x080c, 0xbb17, 0x01b0,\r
-+      0x6014, 0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007,\r
-+      0x0016, 0x2001, 0x0002, 0x080c, 0xc14b, 0x00b0, 0x6014, 0x2048,\r
-+      0xa864, 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e,\r
-+      0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,\r
-+      0x9005, 0x1110, 0x9006, 0x0c38, 0x080c, 0xa7c0, 0x2009, 0x026e,\r
-+      0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0510, 0x9686, 0x000b,\r
-+      0x01c8, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686,\r
-+      0x0009, 0x01b0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0180,\r
-+      0x2001, 0x0004, 0x080c, 0x618f, 0x2001, 0x0028, 0x601a, 0x6007,\r
-+      0x0052, 0x0010, 0x080c, 0xaa61, 0x002e, 0x00be, 0x009e, 0x0005,\r
-+      0x9286, 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xbb17, 0x0140,\r
-+      0xa864, 0x9086, 0x0139, 0x0118, 0xa868, 0xd0fc, 0x0108, 0x0c50,\r
-+      0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138, 0x8001,\r
-+      0xb842, 0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0, 0x9086,\r
-+      0x007e, 0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c64, 0x00ee,\r
-+      0x0010, 0x080c, 0x2fda, 0x0870, 0x080c, 0xac85, 0x1160, 0x2001,\r
-+      0x0004, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c,\r
-+      0x8439, 0x0804, 0x8973, 0x080c, 0xa7c0, 0x0804, 0xaa61, 0x0469,\r
-+      0x1160, 0x2001, 0x0008, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007,\r
-+      0x0005, 0x080c, 0x8439, 0x0804, 0x8973, 0x0804, 0xaa61, 0x00e9,\r
-+      0x1160, 0x2001, 0x000a, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007,\r
-+      0x0001, 0x080c, 0x8439, 0x0804, 0x8973, 0x0804, 0xaa61, 0x2009,\r
-+      0x026e, 0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104,\r
-+      0x9084, 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005,\r
-+      0x00b6, 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x624d, 0x001e,\r
-+      0x00ce, 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036,\r
-+      0x0016, 0x6010, 0x2058, 0x2009, 0x1836, 0x2104, 0x9085, 0x0003,\r
-+      0x200a, 0x080c, 0xad2b, 0x0560, 0x2009, 0x1836, 0x2104, 0xc0cd,\r
-+      0x200a, 0x080c, 0x655e, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a,\r
-+      0x080c, 0xd52a, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019,\r
-+      0x002a, 0x2009, 0x0001, 0x080c, 0x2fa5, 0x00e6, 0x2071, 0x1800,\r
-+      0x080c, 0x2dbb, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009,\r
-+      0x007f, 0x080c, 0x30d5, 0x8108, 0x1f04, 0xacc9, 0x015e, 0x00ce,\r
-+      0x080c, 0xac88, 0x2071, 0x0260, 0x2079, 0x0200, 0x7817, 0x0001,\r
-+      0x2001, 0x1836, 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc,\r
-+      0x0118, 0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001,\r
-+      0x1836, 0x2102, 0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069,\r
-+      0x181e, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x181f,\r
-+      0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e,\r
-+      0x9105, 0x2009, 0x182b, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008,\r
-+      0x080c, 0x26ac, 0x080c, 0x6fb2, 0x0170, 0x2071, 0x0260, 0x2069,\r
-+      0x1953, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054,\r
-+      0x680e, 0x080c, 0xbf26, 0x0040, 0x2001, 0x0006, 0x080c, 0x618f,\r
-+      0x080c, 0x3003, 0x080c, 0x9e32, 0x001e, 0x003e, 0x00de, 0x00ee,\r
-+      0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156,\r
-+      0x2019, 0x182b, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200,\r
-+      0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198,\r
-+      0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c,\r
-+      0xae0d, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006,\r
-+      0x080c, 0xae0d, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e, 0x009e,\r
-+      0x0005, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8,\r
-+      0x7038, 0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084,\r
-+      0x0f00, 0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac,\r
-+      0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6,\r
-+      0x0096, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126,\r
-+      0x2091, 0x8000, 0x2029, 0x19c1, 0x252c, 0x2021, 0x19c7, 0x2424,\r
-+      0x2061, 0x1cd0, 0x2071, 0x1800, 0x7250, 0x7070, 0x9202, 0x1a04,\r
-+      0xade5, 0x080c, 0xd55b, 0x0904, 0xadde, 0x6720, 0x9786, 0x0007,\r
-+      0x0904, 0xadde, 0x2500, 0x9c06, 0x0904, 0xadde, 0x2400, 0x9c06,\r
-+      0x05e8, 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, 0x9005, 0x0130,\r
-+      0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1580, 0x00c6, 0x6000,\r
-+      0x9086, 0x0004, 0x1110, 0x080c, 0x190d, 0x9786, 0x000a, 0x0148,\r
-+      0x080c, 0xbd1d, 0x1130, 0x00ce, 0x080c, 0xa7c0, 0x080c, 0x9e62,\r
-+      0x00e8, 0x6014, 0x2048, 0x080c, 0xbb17, 0x01a8, 0x9786, 0x0003,\r
-+      0x1530, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878,\r
-+      0x2048, 0x080c, 0x0f9d, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c,\r
-+      0x687f, 0x080c, 0xbd00, 0x080c, 0x9e62, 0x00ce, 0x9ce0, 0x0018,\r
-+      0x7064, 0x9c02, 0x1210, 0x0804, 0xad8c, 0x012e, 0x000e, 0x002e,\r
-+      0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786,\r
-+      0x0006, 0x1118, 0x080c, 0xd4d5, 0x0c30, 0x9786, 0x000a, 0x0998,\r
-+      0x0880, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04,\r
-+      0xadf9, 0x9006, 0x0005, 0x2304, 0x9102, 0x0218, 0x2001, 0x0001,\r
-+      0x0008, 0x9006, 0x918d, 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016,\r
-+      0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0,\r
-+      0x9300, 0x2098, 0x3518, 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e,\r
-+      0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e,\r
-+      0x0005, 0x220c, 0x9102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001,\r
-+      0x0000, 0x918d, 0x0001, 0x001e, 0x01ce, 0x013e, 0x0005, 0x6004,\r
-+      0x908a, 0x0053, 0x1a0c, 0x0db4, 0x080c, 0xbd0c, 0x0120, 0x080c,\r
-+      0xbd1d, 0x0168, 0x0028, 0x080c, 0x3003, 0x080c, 0xbd1d, 0x0138,\r
-+      0x080c, 0x886e, 0x080c, 0x9e32, 0x080c, 0x8973, 0x0005, 0x080c,\r
-+      0xa7c0, 0x0cb0, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208,\r
-+      0x000a, 0x0005, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e,\r
-+      0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae70, 0xae70, 0xae70,\r
-+      0xae70, 0xae6e, 0xae6e, 0xae6e, 0xae70, 0xae6e, 0x080c, 0x0db4,\r
-+      0x600b, 0xffff, 0x6003, 0x0001, 0x6106, 0x080c, 0x83f1, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x8973, 0x012e, 0x0005, 0x9186, 0x0013,\r
-+      0x1128, 0x6004, 0x9082, 0x0040, 0x0804, 0xaf25, 0x9186, 0x0027,\r
-+      0x1520, 0x080c, 0x886e, 0x080c, 0x2fda, 0x080c, 0xc227, 0x0096,\r
-+      0x6114, 0x2148, 0x080c, 0xbb17, 0x0198, 0x080c, 0xbd1d, 0x1118,\r
-+      0x080c, 0xa7c0, 0x0068, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877,\r
-+      0x0000, 0xa97c, 0xc1c5, 0xa97e, 0x080c, 0x688c, 0x080c, 0xbd00,\r
-+      0x009e, 0x080c, 0x9e32, 0x0804, 0x8973, 0x9186, 0x0014, 0x1120,\r
-+      0x6004, 0x9082, 0x0040, 0x04a0, 0x9186, 0x0046, 0x0150, 0x9186,\r
-+      0x0045, 0x0138, 0x9186, 0x0053, 0x0120, 0x9186, 0x0048, 0x190c,\r
-+      0x0db4, 0x2001, 0x0109, 0x2004, 0xd084, 0x0508, 0x0126, 0x2091,\r
-+      0x2800, 0x0006, 0x0016, 0x0026, 0x0036, 0x00f6, 0x00e6, 0x00c6,\r
-+      0x2079, 0x19b8, 0x2071, 0x1800, 0x2061, 0x0100, 0x080c, 0x82dd,\r
-+      0x00ce, 0x00ee, 0x00fe, 0x003e, 0x002e, 0x001e, 0x000e, 0x012e,\r
-+      0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xaf63, 0x0005,\r
-+      0x0002, 0xaeff, 0xaefd, 0xaefd, 0xaefd, 0xaefd, 0xaefd, 0xaefd,\r
-+      0xaefd, 0xaefd, 0xaefd, 0xaefd, 0xaf1a, 0xaf1a, 0xaf1a, 0xaf1a,\r
-+      0xaefd, 0xaf1a, 0xaefd, 0xaf1a, 0xaefd, 0x080c, 0x0db4, 0x080c,\r
-+      0x886e, 0x0096, 0x6114, 0x2148, 0x080c, 0xbb17, 0x0168, 0xa867,\r
-+      0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882,\r
-+      0x080c, 0x688c, 0x080c, 0xbd00, 0x009e, 0x080c, 0x9e32, 0x080c,\r
-+      0x8973, 0x0005, 0x080c, 0x886e, 0x080c, 0xbd1d, 0x090c, 0xa7c0,\r
-+      0x080c, 0x9e32, 0x080c, 0x8973, 0x0005, 0x0002, 0xaf3c, 0xaf3a,\r
-+      0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a,\r
-+      0xaf3a, 0xaf53, 0xaf53, 0xaf53, 0xaf53, 0xaf3a, 0xaf5d, 0xaf3a,\r
-+      0xaf53, 0xaf3a, 0x080c, 0x0db4, 0x0096, 0x080c, 0x886e, 0x6014,\r
-+      0x2048, 0x2001, 0x1959, 0x2004, 0x6042, 0xa97c, 0xd1ac, 0x0140,\r
-+      0x6003, 0x0004, 0xa87c, 0x9085, 0x0400, 0xa87e, 0x009e, 0x0005,\r
-+      0x6003, 0x0002, 0x0cb8, 0x080c, 0x886e, 0x080c, 0xc22a, 0x080c,\r
-+      0xc22f, 0x6003, 0x000f, 0x0804, 0x8973, 0x080c, 0x886e, 0x080c,\r
-+      0x9e32, 0x0804, 0x8973, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040,\r
-+      0x0208, 0x000a, 0x0005, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f,\r
-+      0xaf81, 0xb05e, 0xaf7f, 0xb092, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f,\r
-+      0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, 0xb092, 0x080c,\r
-+      0x0db4, 0x00b6, 0x0096, 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff,\r
-+      0x86ff, 0x1528, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb04d,\r
-+      0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128,\r
-+      0xa834, 0xa938, 0x9115, 0x190c, 0xb227, 0x080c, 0x66a7, 0x6210,\r
-+      0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x7044, 0xd0e4,\r
-+      0x1904, 0xb031, 0x080c, 0x9e32, 0x009e, 0x00be, 0x0005, 0x968c,\r
-+      0x0c00, 0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb035,\r
-+      0x7348, 0xab92, 0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002,\r
-+      0x0508, 0x9186, 0x0028, 0x1118, 0xa87b, 0x001c, 0x00e8, 0xd6dc,\r
-+      0x01a0, 0xa87b, 0x0015, 0xa87c, 0xd0ac, 0x0170, 0xa938, 0xaa34,\r
-+      0x2100, 0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c, 0x9206,\r
-+      0x0118, 0xa992, 0xaa8e, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0xa87b,\r
-+      0x0007, 0x0010, 0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, 0x901e,\r
-+      0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118,\r
-+      0xc6c4, 0x0804, 0xaf88, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a,\r
-+      0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018,\r
-+      0x2011, 0x0025, 0x080c, 0xb712, 0x003e, 0xd6cc, 0x0904, 0xaf9d,\r
-+      0x7154, 0xa98a, 0x81ff, 0x0904, 0xaf9d, 0x9192, 0x0021, 0x1278,\r
-+      0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xb712, 0x2011,\r
-+      0x0205, 0x2013, 0x0000, 0x080c, 0xc1b7, 0x0804, 0xaf9d, 0xa868,\r
-+      0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950,\r
-+      0x080c, 0xb6b1, 0x00ae, 0x080c, 0xc1b7, 0x080c, 0xb702, 0x0804,\r
-+      0xaf9f, 0x080c, 0xbe10, 0x0804, 0xafac, 0xa87c, 0xd0ac, 0x0904,\r
-+      0xafb8, 0xa880, 0xd0bc, 0x1904, 0xafb8, 0x7348, 0xa838, 0x9306,\r
-+      0x11c8, 0x734c, 0xa834, 0x931e, 0x0904, 0xafb8, 0xd6d4, 0x0190,\r
-+      0xab38, 0x9305, 0x0904, 0xafb8, 0x0068, 0xa87c, 0xd0ac, 0x0904,\r
-+      0xaf90, 0xa838, 0xa934, 0x9105, 0x0904, 0xaf90, 0xa880, 0xd0bc,\r
-+      0x1904, 0xaf90, 0x080c, 0xbe4a, 0x0804, 0xafac, 0x0096, 0x00f6,\r
-+      0x6003, 0x0003, 0x6007, 0x0043, 0x2079, 0x026c, 0x7c04, 0x7b00,\r
-+      0x7e0c, 0x7d08, 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0140, 0x6003,\r
-+      0x0002, 0x00fe, 0x009e, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400,\r
-+      0xa9ac, 0x910a, 0x2300, 0xaab0, 0x9213, 0x2600, 0x9102, 0x2500,\r
-+      0x9203, 0x0e90, 0xac36, 0xab3a, 0xae46, 0xad4a, 0x00fe, 0x6043,\r
-+      0x0000, 0x2c10, 0x080c, 0x1a5c, 0x080c, 0x8456, 0x080c, 0x8a4e,\r
-+      0x009e, 0x0005, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040,\r
-+      0x0208, 0x000a, 0x0005, 0xb0af, 0xb0af, 0xb0af, 0xb0af, 0xb0af,\r
-+      0xb0b1, 0xb147, 0xb0af, 0xb0af, 0xb15e, 0xb1ea, 0xb0af, 0xb0af,\r
-+      0xb0af, 0xb0af, 0xb1ff, 0xb0af, 0xb0af, 0xb0af, 0xb0af, 0x080c,\r
-+      0x0db4, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114,\r
-+      0x2150, 0x7644, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e,\r
-+      0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e,\r
-+      0x00be, 0x86ff, 0x0904, 0xb142, 0x9694, 0xff00, 0x9284, 0x0c00,\r
-+      0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904,\r
-+      0xb142, 0x080c, 0x0feb, 0x090c, 0x0db4, 0x2900, 0xb07a, 0xb77c,\r
-+      0xc7cd, 0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a, 0xb06c, 0xa86e,\r
-+      0xb070, 0xa872, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92,\r
-+      0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186,\r
-+      0x0028, 0x1118, 0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b,\r
-+      0x0015, 0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b,\r
-+      0x0000, 0xaf7e, 0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4,\r
-+      0x0190, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210,\r
-+      0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025,\r
-+      0x080c, 0xb712, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff,\r
-+      0x01c8, 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011,\r
-+      0x0029, 0x080c, 0xb712, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050,\r
-+      0xb068, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950,\r
-+      0x080c, 0xb6b1, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x00f6,\r
-+      0x00a6, 0x6003, 0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c,\r
-+      0x7d08, 0x6014, 0x2050, 0xb436, 0xb33a, 0xb646, 0xb54a, 0x00ae,\r
-+      0x00fe, 0x2c10, 0x080c, 0x1a5c, 0x0804, 0x9379, 0x6003, 0x0002,\r
-+      0x6004, 0x9086, 0x0040, 0x11c8, 0x0096, 0x6014, 0x2048, 0xa87c,\r
-+      0xd0ac, 0x0160, 0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00, 0x2078,\r
-+      0x080c, 0x1648, 0x00fe, 0x6003, 0x0004, 0x0010, 0x6003, 0x0002,\r
-+      0x009e, 0x080c, 0x886e, 0x080c, 0x8973, 0x0096, 0x2001, 0x1959,\r
-+      0x2004, 0x6042, 0x080c, 0x8923, 0x080c, 0x8a4e, 0x6114, 0x2148,\r
-+      0xa97c, 0xd1e4, 0x0904, 0xb1e5, 0xd1cc, 0x05a8, 0xa978, 0xa868,\r
-+      0xd0fc, 0x0538, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0xa860,\r
-+      0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0, 0x810e, 0x810e, 0x810f,\r
-+      0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0019, 0x2098,\r
-+      0x0156, 0x20a9, 0x0020, 0x4003, 0x015e, 0x000e, 0xa882, 0x000e,\r
-+      0xa87e, 0x001e, 0xa874, 0x0006, 0x2148, 0x080c, 0x0f9d, 0x001e,\r
-+      0x0440, 0x0016, 0x080c, 0x0f9d, 0x009e, 0xa974, 0x0016, 0x080c,\r
-+      0xb702, 0x001e, 0x00f0, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff,\r
-+      0x90b6, 0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c,\r
-+      0x0060, 0xd1dc, 0x0118, 0xa87b, 0x0015, 0x0038, 0xd1d4, 0x0118,\r
-+      0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0x0016, 0x080c, 0x66a7,\r
-+      0x001e, 0xd1e4, 0x1120, 0x080c, 0x9e32, 0x009e, 0x0005, 0x080c,\r
-+      0xbe10, 0x0cd8, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x886e,\r
-+      0x080c, 0x8973, 0x2019, 0x0001, 0x080c, 0x96d8, 0x6003, 0x0002,\r
-+      0x080c, 0xc22f, 0x080c, 0x8923, 0x080c, 0x8a4e, 0x0005, 0x6004,\r
-+      0x9086, 0x0040, 0x1120, 0x080c, 0x886e, 0x080c, 0x8973, 0x2019,\r
-+      0x0001, 0x080c, 0x96d8, 0x080c, 0x8923, 0x080c, 0x2fda, 0x080c,\r
-+      0xc227, 0x0096, 0x6114, 0x2148, 0x080c, 0xbb17, 0x0150, 0xa867,\r
-+      0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0x080c, 0x688c, 0x080c,\r
-+      0xbd00, 0x009e, 0x080c, 0x9e32, 0x080c, 0x8a4e, 0x0005, 0xa87b,\r
-+      0x0015, 0xd1fc, 0x0180, 0xa87b, 0x0007, 0x8002, 0x8000, 0x810a,\r
-+      0x9189, 0x0000, 0x0006, 0x0016, 0x2009, 0x1a4a, 0x2104, 0x8000,\r
-+      0x200a, 0x001e, 0x000e, 0xa992, 0xa88e, 0x0005, 0x9182, 0x0054,\r
-+      0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb25a, 0xb25a,\r
-+      0xb25a, 0xb25a, 0xb25a, 0xb25c, 0xb25a, 0xb25a, 0xb302, 0xb25a,\r
-+      0xb25a, 0xb25a, 0xb25a, 0xb25a, 0xb25a, 0xb25a, 0xb25a, 0xb25a,\r
-+      0xb25a, 0xb433, 0x080c, 0x0db4, 0x0076, 0x00a6, 0x00e6, 0x0096,\r
-+      0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0xb676, 0x96b4, 0x0fff,\r
-+      0xb77c, 0xc7e5, 0xb77e, 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff,\r
-+      0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff, 0x0904, 0xb2fb, 0x9694,\r
-+      0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e,\r
-+      0x9284, 0x0300, 0x0904, 0xb2fb, 0x9686, 0x0100, 0x1130, 0x7064,\r
-+      0x9005, 0x1118, 0xc6c4, 0xb676, 0x0c38, 0x080c, 0x0feb, 0x090c,\r
-+      0x0db4, 0x2900, 0xb07a, 0xb77c, 0x97bd, 0x0200, 0xb77e, 0xa867,\r
-+      0x0103, 0xb068, 0xa86a, 0xb06c, 0xa86e, 0xb070, 0xa872, 0x7044,\r
-+      0x9084, 0xf000, 0x9635, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348,\r
-+      0xab92, 0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180,\r
-+      0x9186, 0x0028, 0x1118, 0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118,\r
-+      0xa87b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010,\r
-+      0xa87b, 0x0000, 0xaf7e, 0xb080, 0xa882, 0xb084, 0xa886, 0x901e,\r
-+      0xd6c4, 0x0190, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009,\r
-+      0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011,\r
-+      0x0025, 0x080c, 0xb712, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a,\r
-+      0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018,\r
-+      0x2011, 0x0029, 0x080c, 0xb712, 0x2011, 0x0205, 0x2013, 0x0000,\r
-+      0x0050, 0xb068, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68,\r
-+      0x2950, 0x080c, 0xb6b1, 0x080c, 0x18eb, 0x009e, 0x00ee, 0x00ae,\r
-+      0x007e, 0x0005, 0x2001, 0x1959, 0x2004, 0x6042, 0x0096, 0x6114,\r
-+      0x2148, 0xa83c, 0xa940, 0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e,\r
-+      0x6003, 0x0002, 0xa97c, 0xd1e4, 0x0904, 0xb42e, 0x6043, 0x0000,\r
-+      0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc,\r
-+      0x0904, 0xb3fd, 0xa978, 0xa868, 0xd0fc, 0x0904, 0xb3be, 0x0016,\r
-+      0xa87c, 0x0006, 0xa880, 0x0006, 0x00a6, 0x2150, 0xb174, 0x9184,\r
-+      0x00ff, 0x90b6, 0x0002, 0x0904, 0xb38c, 0x9086, 0x0028, 0x1904,\r
-+      0xb378, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x0804, 0xb394, 0x6024,\r
-+      0xd0f4, 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90,\r
-+      0x9206, 0x1120, 0xa88c, 0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4,\r
-+      0x1148, 0xa9ac, 0xa834, 0x9102, 0x603a, 0xa9b0, 0xa838, 0x9103,\r
-+      0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c,\r
-+      0x8000, 0xb83e, 0x00be, 0x9006, 0xa876, 0xa892, 0xa88e, 0xa87c,\r
-+      0xc0e4, 0xa87e, 0xd0cc, 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878,\r
-+      0x2048, 0x080c, 0x0f9d, 0x009e, 0x080c, 0xbe4a, 0x0804, 0xb42e,\r
-+      0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xc0da,\r
-+      0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b,\r
-+      0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834,\r
-+      0xa938, 0x9115, 0x190c, 0xb227, 0xa87c, 0xb07e, 0xa890, 0xb092,\r
-+      0xa88c, 0xb08e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0,\r
-+      0x20a9, 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0,\r
-+      0x9084, 0xffc0, 0x9080, 0x0019, 0x2098, 0x4003, 0x00ae, 0x000e,\r
-+      0xa882, 0x000e, 0xa87e, 0x080c, 0xc1b7, 0x001e, 0xa874, 0x0006,\r
-+      0x2148, 0x080c, 0x0f9d, 0x001e, 0x0804, 0xb42a, 0x0016, 0x00a6,\r
-+      0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086,\r
-+      0x0028, 0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc,\r
-+      0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xc0da, 0x0118,\r
-+      0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007,\r
-+      0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,\r
-+      0x9115, 0x190c, 0xb227, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c,\r
-+      0xb07e, 0x00ae, 0x080c, 0x0f9d, 0x009e, 0x080c, 0xc1b7, 0xa974,\r
-+      0x0016, 0x080c, 0xb702, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974,\r
-+      0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118,\r
-+      0xa87b, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c,\r
-+      0xc0da, 0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118,\r
-+      0xa87b, 0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128,\r
-+      0xa834, 0xa938, 0x9115, 0x190c, 0xb227, 0xa974, 0x0016, 0x080c,\r
-+      0x66a7, 0x001e, 0xd1e4, 0x1120, 0x080c, 0x9e32, 0x009e, 0x0005,\r
-+      0x080c, 0xbe10, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, 0xd1e4,\r
-+      0x190c, 0x18f9, 0x009e, 0x0005, 0x080c, 0x886e, 0x0010, 0x080c,\r
-+      0x8923, 0x080c, 0xbb17, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c,\r
-+      0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x00a0, 0xa867, 0x0103, 0x2009,\r
-+      0x180c, 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108, 0xa97a,\r
-+      0x918e, 0x0029, 0x1110, 0x080c, 0xd7d3, 0xa877, 0x0000, 0x080c,\r
-+      0x688c, 0x009e, 0x080c, 0x9e32, 0x080c, 0x8973, 0x0804, 0x8a4e,\r
-+      0xa87b, 0x0004, 0x0c90, 0xa87b, 0x0004, 0x0c78, 0x9182, 0x0054,\r
-+      0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb48a, 0xb48a,\r
-+      0xb48a, 0xb48a, 0xb48a, 0xb48c, 0xb48a, 0xb48a, 0xb48a, 0xb48a,\r
-+      0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a,\r
-+      0xb48a, 0xb48a, 0x080c, 0x0db4, 0x080c, 0x538e, 0x01f8, 0x6014,\r
-+      0x7144, 0x918c, 0x0fff, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294,\r
-+      0x00ff, 0x0096, 0x904d, 0x0188, 0xa87b, 0x0000, 0xa864, 0x9086,\r
-+      0x0139, 0x0128, 0xa867, 0x0103, 0xa976, 0xaa96, 0x0030, 0xa897,\r
-+      0x4000, 0xa99a, 0xaa9e, 0x080c, 0x688c, 0x009e, 0x0804, 0x9e32,\r
-+      0x9182, 0x0085, 0x0002, 0xb4c2, 0xb4c0, 0xb4c0, 0xb4ce, 0xb4c0,\r
-+      0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0,\r
-+      0x080c, 0x0db4, 0x6003, 0x0001, 0x6106, 0x080c, 0x83f1, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x8973, 0x012e, 0x0005, 0x0026, 0x0056,\r
-+      0x00d6, 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c,\r
-+      0xbb05, 0x01a0, 0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010,\r
-+      0x6d10, 0x952e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0xb73d, 0x00ce,\r
-+      0x0128, 0x6803, 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087,\r
-+      0x6003, 0x0001, 0x080c, 0x83f1, 0x080c, 0x8973, 0x9280, 0x0004,\r
-+      0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec,\r
-+      0x0128, 0x00c6, 0x2260, 0x080c, 0xbe4a, 0x00ce, 0x00ee, 0x00de,\r
-+      0x005e, 0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a,\r
-+      0x0085, 0x0a0c, 0x0db4, 0x908a, 0x0092, 0x1a0c, 0x0db4, 0x9082,\r
-+      0x0085, 0x00e2, 0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x190c,\r
-+      0x0db4, 0x080c, 0x886e, 0x0096, 0x6014, 0x2048, 0x080c, 0xbb17,\r
-+      0x0140, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c,\r
-+      0x688c, 0x009e, 0x080c, 0x9e62, 0x0804, 0x8973, 0xb543, 0xb545,\r
-+      0xb545, 0xb543, 0xb543, 0xb543, 0xb543, 0xb543, 0xb543, 0xb543,\r
-+      0xb543, 0xb543, 0xb543, 0x080c, 0x0db4, 0x080c, 0x886e, 0x080c,\r
-+      0x9e62, 0x080c, 0x8973, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,\r
-+      0x9082, 0x0085, 0x2008, 0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c,\r
-+      0x886e, 0x080c, 0x2fda, 0x080c, 0xc227, 0x0096, 0x6014, 0x2048,\r
-+      0x080c, 0xbb17, 0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b,\r
-+      0x0029, 0x080c, 0x688c, 0x080c, 0xbd00, 0x009e, 0x080c, 0x9e32,\r
-+      0x080c, 0x8973, 0x0005, 0x080c, 0x9ec7, 0x0ce0, 0x9186, 0x0014,\r
-+      0x1dd0, 0x080c, 0x886e, 0x0096, 0x6014, 0x2048, 0x080c, 0xbb17,\r
-+      0x0d60, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0006, 0xa880,\r
-+      0xc0ec, 0xa882, 0x08f0, 0x0002, 0xb59b, 0xb599, 0xb599, 0xb599,\r
-+      0xb599, 0xb599, 0xb5b3, 0xb599, 0xb599, 0xb599, 0xb599, 0xb599,\r
-+      0xb599, 0x080c, 0x0db4, 0x080c, 0x886e, 0x6034, 0x908c, 0xff00,\r
-+      0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001,\r
-+      0x1957, 0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x000c,\r
-+      0x080c, 0x8973, 0x0005, 0x080c, 0x886e, 0x6034, 0x908c, 0xff00,\r
-+      0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001,\r
-+      0x1957, 0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x000e,\r
-+      0x080c, 0x8973, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085,\r
-+      0x0208, 0x0012, 0x0804, 0x9ec7, 0xb5e1, 0xb5e1, 0xb5e1, 0xb5e1,\r
-+      0xb5e3, 0xb630, 0xb5e1, 0xb5e1, 0xb5e1, 0xb5e1, 0xb5e1, 0xb5e1,\r
-+      0xb5e1, 0x080c, 0x0db4, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800,\r
-+      0x00be, 0xd0bc, 0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186,\r
-+      0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xb644,\r
-+      0x080c, 0xbb17, 0x1118, 0x080c, 0xbd00, 0x0068, 0x6014, 0x2048,\r
-+      0xa87c, 0xd0e4, 0x1110, 0x080c, 0xbd00, 0xa867, 0x0103, 0x080c,\r
-+      0xc1f2, 0x080c, 0x688c, 0x00d6, 0x2c68, 0x080c, 0x9ddc, 0x01d0,\r
-+      0x6003, 0x0001, 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e,\r
-+      0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112,\r
-+      0x080c, 0xbf8c, 0x6954, 0x6156, 0x6023, 0x0001, 0x080c, 0x83f1,\r
-+      0x080c, 0x8973, 0x2d60, 0x00de, 0x080c, 0x9e32, 0x009e, 0x0005,\r
-+      0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034,\r
-+      0x908c, 0xff00, 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e,\r
-+      0x0118, 0x9186, 0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xc18a,\r
-+      0x11f0, 0x080c, 0x9ddc, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023,\r
-+      0x0001, 0x6910, 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934,\r
-+      0x918c, 0x00ff, 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954,\r
-+      0x6156, 0x080c, 0xbf8c, 0x080c, 0x83f1, 0x080c, 0x8973, 0x2d60,\r
-+      0x00de, 0x0804, 0x9e32, 0x0096, 0x6014, 0x2048, 0x080c, 0xbb17,\r
-+      0x01c8, 0xa867, 0x0103, 0xa880, 0xd0b4, 0x0128, 0xc0ec, 0xa882,\r
-+      0xa87b, 0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020,\r
-+      0xa87b, 0x0005, 0x080c, 0xbe0c, 0xa877, 0x0000, 0x080c, 0x688c,\r
-+      0x080c, 0xbd00, 0x009e, 0x0804, 0x9e32, 0x0016, 0x0096, 0x6014,\r
-+      0x2048, 0x080c, 0xbb17, 0x0140, 0xa867, 0x0103, 0xa87b, 0x0028,\r
-+      0xa877, 0x0000, 0x080c, 0x688c, 0x009e, 0x001e, 0x9186, 0x0013,\r
-+      0x0148, 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c,\r
-+      0x9ec7, 0x0030, 0x080c, 0x886e, 0x080c, 0x9e62, 0x080c, 0x8973,\r
-+      0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182,\r
-+      0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098,\r
-+      0x0018, 0x2009, 0x0020, 0x2011, 0x0029, 0x080c, 0xb712, 0x96b2,\r
-+      0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x0f9d, 0x080c, 0x0feb,\r
-+      0x0520, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406,\r
-+      0x968a, 0x003d, 0x1228, 0x2608, 0x2011, 0x001b, 0x0499, 0x00a8,\r
-+      0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x0451,\r
-+      0x0c28, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,\r
-+      0x0003, 0xb566, 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205, 0x2003,\r
-+      0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x009e, 0x006e,\r
-+      0x005e, 0x0005, 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055, 0x0130,\r
-+      0xa807, 0x0000, 0x080c, 0x688c, 0x2a48, 0x0cb8, 0x080c, 0x688c,\r
-+      0x00ae, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085, 0x0080,\r
-+      0x7816, 0xd184, 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001, 0xa860,\r
-+      0x20e8, 0xa85c, 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300, 0x9e00,\r
-+      0x2098, 0x4003, 0x8318, 0x9386, 0x0020, 0x1148, 0x2018, 0x2300,\r
-+      0x9e00, 0x2098, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x8109,\r
-+      0x1d80, 0x7817, 0x0000, 0x00fe, 0x0005, 0x0066, 0x0126, 0x2091,\r
-+      0x8000, 0x2031, 0x0001, 0x6020, 0x9084, 0x000f, 0x0083, 0x012e,\r
-+      0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031, 0x0000,\r
-+      0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005, 0xb778,\r
-+      0xb778, 0xb773, 0xb79a, 0xb766, 0xb773, 0xb79a, 0xb773, 0xb766,\r
-+      0xb766, 0xb773, 0xb773, 0xb773, 0xb766, 0xb766, 0x080c, 0x0db4,\r
-+      0x0036, 0x2019, 0x0010, 0x080c, 0xd0e5, 0x6023, 0x0006, 0x6003,\r
-+      0x0007, 0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005,\r
-+      0x0096, 0x86ff, 0x11d8, 0x6014, 0x2048, 0x080c, 0xbb17, 0x01c0,\r
-+      0xa864, 0x9086, 0x0139, 0x1128, 0xa87b, 0x0005, 0xa883, 0x0000,\r
-+      0x0028, 0x900e, 0x2001, 0x0005, 0x080c, 0x6ac6, 0x080c, 0xbe0c,\r
-+      0x080c, 0x687f, 0x080c, 0x9e62, 0x9085, 0x0001, 0x009e, 0x0005,\r
-+      0x9006, 0x0ce0, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0002,\r
-+      0xb7b0, 0xb7de, 0xb7b2, 0xb7ff, 0xb7d9, 0xb7b0, 0xb773, 0xb778,\r
-+      0xb778, 0xb773, 0xb773, 0xb773, 0xb773, 0xb773, 0xb773, 0xb773,\r
-+      0x080c, 0x0db4, 0x86ff, 0x1510, 0x6020, 0x9086, 0x0006, 0x01f0,\r
-+      0x0096, 0x6014, 0x2048, 0x080c, 0xbb17, 0x0158, 0xa87c, 0xd0cc,\r
-+      0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0f9d, 0x009e, 0x080c,\r
-+      0xbe0c, 0x009e, 0x080c, 0xc1cc, 0x6007, 0x0085, 0x6003, 0x000b,\r
-+      0x6023, 0x0002, 0x080c, 0x83f1, 0x080c, 0x8973, 0x9085, 0x0001,\r
-+      0x0005, 0x0066, 0x080c, 0x190d, 0x006e, 0x08a0, 0x00e6, 0x2071,\r
-+      0x19b8, 0x7024, 0x9c06, 0x1120, 0x080c, 0x9662, 0x00ee, 0x0850,\r
-+      0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096,\r
-+      0x2049, 0x0001, 0x2c40, 0x080c, 0x97ba, 0x009e, 0x008e, 0x0010,\r
-+      0x080c, 0x955f, 0x00ee, 0x1904, 0xb7b2, 0x0804, 0xb773, 0x0036,\r
-+      0x00e6, 0x2071, 0x19b8, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c,\r
-+      0x96d8, 0x00ee, 0x003e, 0x0804, 0xb7b2, 0x080c, 0x98ea, 0x00ee,\r
-+      0x003e, 0x1904, 0xb7b2, 0x0804, 0xb773, 0x00c6, 0x6020, 0x9084,\r
-+      0x000f, 0x0013, 0x00ce, 0x0005, 0xb832, 0xb8fb, 0xba62, 0xb83c,\r
-+      0x9e62, 0xb832, 0xd0d7, 0xc234, 0xb8fb, 0xb82b, 0xbae1, 0xb82b,\r
-+      0xb82b, 0xb82b, 0xb82b, 0x080c, 0x0db4, 0x080c, 0xbd1d, 0x1110,\r
-+      0x080c, 0xa7c0, 0x0005, 0x080c, 0x886e, 0x080c, 0x8973, 0x0804,\r
-+      0x9e32, 0x601b, 0x0001, 0x0005, 0x080c, 0xbb17, 0x0130, 0x6014,\r
-+      0x0096, 0x2048, 0x2c00, 0xa896, 0x009e, 0x6000, 0x908a, 0x0016,\r
-+      0x1a0c, 0x0db4, 0x0002, 0xb85b, 0xb85d, 0xb881, 0xb895, 0xb8b9,\r
-+      0xb85b, 0xb832, 0xb832, 0xb832, 0xb895, 0xb895, 0xb85b, 0xb85b,\r
-+      0xb85b, 0xb85b, 0xb89f, 0x080c, 0x0db4, 0x00e6, 0x6014, 0x0096,\r
-+      0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19b8, 0x7024,\r
-+      0x9c06, 0x01a0, 0x080c, 0x955f, 0x080c, 0xc1cc, 0x6007, 0x0085,\r
-+      0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1958, 0x2004, 0x601a,\r
-+      0x080c, 0x83f1, 0x080c, 0x8973, 0x00ee, 0x0005, 0x601b, 0x0001,\r
-+      0x0cd8, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e,\r
-+      0x080c, 0xc1cc, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,\r
-+      0x080c, 0x83f1, 0x080c, 0x8973, 0x0005, 0x0096, 0x601b, 0x0001,\r
-+      0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c,\r
-+      0x538e, 0x01a8, 0x6014, 0x0096, 0x904d, 0x0180, 0xa864, 0xa867,\r
-+      0x0103, 0xa87b, 0x0006, 0x9086, 0x0139, 0x1140, 0xa867, 0x0139,\r
-+      0xa897, 0x4005, 0xa89b, 0x0004, 0x080c, 0x688c, 0x009e, 0x0804,\r
-+      0x9e32, 0x6014, 0x0096, 0x904d, 0x05c8, 0xa97c, 0xd1e4, 0x05b0,\r
-+      0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884,\r
-+      0x009e, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0030,\r
-+      0x2c08, 0x080c, 0x1518, 0x2001, 0x030c, 0x2004, 0x9086, 0x0041,\r
-+      0x11a0, 0x6014, 0x0096, 0x904d, 0x090c, 0x0db4, 0xa880, 0xd0f4,\r
-+      0x1130, 0xc0f5, 0xa882, 0x009e, 0x601b, 0x0002, 0x0070, 0x009e,\r
-+      0x2001, 0x0037, 0x2c08, 0x080c, 0x1518, 0x6000, 0x9086, 0x0004,\r
-+      0x1120, 0x2009, 0x0048, 0x080c, 0x9eac, 0x0005, 0x009e, 0x080c,\r
-+      0x190d, 0x0804, 0xb881, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4,\r
-+      0x000b, 0x0005, 0xb912, 0xb839, 0xb914, 0xb912, 0xb914, 0xb914,\r
-+      0xb833, 0xb912, 0xb82d, 0xb82d, 0xb912, 0xb912, 0xb912, 0xb912,\r
-+      0xb912, 0xb912, 0x080c, 0x0db4, 0x6010, 0x00b6, 0x2058, 0xb804,\r
-+      0x9084, 0x00ff, 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0db4, 0x00b6,\r
-+      0x0013, 0x00be, 0x0005, 0xb92f, 0xb9fc, 0xb931, 0xb971, 0xb931,\r
-+      0xb971, 0xb931, 0xb93f, 0xb92f, 0xb971, 0xb92f, 0xb960, 0x080c,\r
-+      0x0db4, 0x6004, 0x908e, 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8,\r
-+      0x908e, 0x0002, 0x0590, 0x908e, 0x0052, 0x0904, 0xb9f8, 0x6004,\r
-+      0x080c, 0xbd1d, 0x0904, 0xba15, 0x908e, 0x0004, 0x1110, 0x080c,\r
-+      0x3003, 0x908e, 0x0021, 0x0904, 0xba19, 0x908e, 0x0022, 0x0904,\r
-+      0xba5d, 0x908e, 0x003d, 0x0904, 0xba19, 0x908e, 0x0039, 0x0904,\r
-+      0xba1d, 0x908e, 0x0035, 0x0904, 0xba1d, 0x908e, 0x001e, 0x0178,\r
-+      0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff,\r
-+      0x9086, 0x0006, 0x0110, 0x080c, 0x2fda, 0x080c, 0xa7c0, 0x0804,\r
-+      0x9e62, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xb9e9,\r
-+      0x9186, 0x0002, 0x1904, 0xb9be, 0x2001, 0x1836, 0x2004, 0xd08c,\r
-+      0x11c8, 0x080c, 0x6fb2, 0x11b0, 0x080c, 0xc212, 0x0138, 0x080c,\r
-+      0x6fd5, 0x1120, 0x080c, 0x6ec2, 0x0804, 0xba46, 0x2001, 0x194e,\r
-+      0x2003, 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x6ee4,\r
-+      0x0804, 0xba46, 0x6010, 0x2058, 0x2001, 0x1836, 0x2004, 0xd0ac,\r
-+      0x1904, 0xba46, 0xb8a0, 0x9084, 0xff80, 0x1904, 0xba46, 0xb840,\r
-+      0x9084, 0x00ff, 0x9005, 0x0190, 0x8001, 0xb842, 0x6017, 0x0000,\r
-+      0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x080c, 0x9ddc,\r
-+      0x0128, 0x2b00, 0x6012, 0x6023, 0x0001, 0x0458, 0x00de, 0x00ce,\r
-+      0x6004, 0x908e, 0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0, 0x9086,\r
-+      0x007e, 0x1170, 0x2009, 0x1836, 0x2104, 0xc085, 0x200a, 0x00e6,\r
-+      0x2071, 0x1800, 0x080c, 0x5c64, 0x00ee, 0x080c, 0xa7c0, 0x0030,\r
-+      0x080c, 0xa7c0, 0x080c, 0x2fda, 0x080c, 0xc227, 0x00e6, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x3003, 0x012e, 0x00ee, 0x080c, 0x9e62,\r
-+      0x0005, 0x2001, 0x0002, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007,\r
-+      0x0002, 0x080c, 0x8439, 0x080c, 0x8973, 0x00de, 0x00ce, 0x0c80,\r
-+      0x080c, 0x3003, 0x0804, 0xb96d, 0x00c6, 0x00d6, 0x6104, 0x9186,\r
-+      0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005,\r
-+      0x0904, 0xb9be, 0x8001, 0xb842, 0x6003, 0x0001, 0x080c, 0x8439,\r
-+      0x080c, 0x8973, 0x00de, 0x00ce, 0x0898, 0x080c, 0xa7c0, 0x0804,\r
-+      0xb96f, 0x080c, 0xa7fc, 0x0804, 0xb96f, 0x00d6, 0x2c68, 0x6104,\r
-+      0x080c, 0xc18a, 0x00de, 0x0118, 0x080c, 0x9e32, 0x00f0, 0x6004,\r
-+      0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085,\r
-+      0x6003, 0x000b, 0x6023, 0x0002, 0x603c, 0x600a, 0x2001, 0x1958,\r
-+      0x2004, 0x601a, 0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5, 0x6026,\r
-+      0x2160, 0x080c, 0x83f1, 0x080c, 0x8973, 0x0005, 0x00de, 0x00ce,\r
-+      0x080c, 0xa7c0, 0x080c, 0x2fda, 0x00e6, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x3003, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398,\r
-+      0x6043, 0x0000, 0x012e, 0x00ee, 0x0005, 0x080c, 0xa261, 0x1904,\r
-+      0xba15, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0096,\r
-+      0x00d6, 0x001b, 0x00de, 0x009e, 0x0005, 0xba7d, 0xba7d, 0xba7d,\r
-+      0xba7d, 0xba7d, 0xba7d, 0xba7d, 0xba7d, 0xba7d, 0xb832, 0xba7d,\r
-+      0xb839, 0xba7f, 0xb839, 0xba8c, 0xba7d, 0x080c, 0x0db4, 0x6004,\r
-+      0x9086, 0x008b, 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c,\r
-+      0x83f1, 0x080c, 0x8973, 0x0005, 0x080c, 0xc206, 0x0118, 0x080c,\r
-+      0xc219, 0x0010, 0x080c, 0xc227, 0x080c, 0xbd00, 0x080c, 0xbb17,\r
-+      0x0570, 0x080c, 0x2fda, 0x080c, 0xbb17, 0x0168, 0x6014, 0x2048,\r
-+      0xa867, 0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ed,\r
-+      0xa882, 0x080c, 0x688c, 0x2c68, 0x080c, 0x9ddc, 0x0150, 0x6810,\r
-+      0x6012, 0x080c, 0xbf8c, 0x00c6, 0x2d60, 0x080c, 0x9e62, 0x00ce,\r
-+      0x0008, 0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,\r
-+      0x6003, 0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x00c8, 0x080c,\r
-+      0xc206, 0x0138, 0x6034, 0x9086, 0x4000, 0x1118, 0x080c, 0x2fda,\r
-+      0x08d0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118,\r
-+      0x9186, 0x0035, 0x1118, 0x080c, 0x2fda, 0x0868, 0x080c, 0x9e62,\r
-+      0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0002, 0xbaf7,\r
-+      0xbaf7, 0xbaf9, 0xbaf9, 0xbaf9, 0xbaf7, 0xbaf7, 0x9e62, 0xbaf7,\r
-+      0xbaf7, 0xbaf7, 0xbaf7, 0xbaf7, 0xbaf7, 0xbaf7, 0xbaf7, 0x080c,\r
-+      0x0db4, 0x080c, 0x98ea, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006,\r
-+      0x080c, 0x688c, 0x009e, 0x0804, 0x9e32, 0x9284, 0x0007, 0x1158,\r
-+      0x9282, 0x1cd0, 0x0240, 0x2001, 0x1819, 0x2004, 0x9202, 0x1218,\r
-+      0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096,\r
-+      0x0006, 0x6014, 0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086,\r
-+      0xf000, 0x0110, 0x080c, 0x1096, 0x000e, 0x009e, 0x0005, 0x00e6,\r
-+      0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cd0,\r
-+      0x2071, 0x1800, 0x7350, 0x7070, 0x9302, 0x1640, 0x6020, 0x9206,\r
-+      0x11f8, 0x080c, 0xc212, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004,\r
-+      0x9086, 0x0004, 0x1148, 0x080c, 0x2fda, 0x080c, 0xc227, 0x00c6,\r
-+      0x080c, 0x9e62, 0x00ce, 0x0060, 0x080c, 0xbf06, 0x0148, 0x080c,\r
-+      0xbd1d, 0x1110, 0x080c, 0xa7c0, 0x00c6, 0x080c, 0x9e32, 0x00ce,\r
-+      0x9ce0, 0x0018, 0x7064, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e,\r
-+      0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188,\r
-+      0x1000, 0x210c, 0x81ff, 0x0128, 0x2061, 0x1a80, 0x6112, 0x080c,\r
-+      0x2fda, 0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee,\r
-+      0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ddc, 0x01b0,\r
-+      0x6656, 0x2b00, 0x6012, 0x080c, 0x538e, 0x0118, 0x080c, 0xbc44,\r
-+      0x0168, 0x080c, 0xbf8c, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c,\r
-+      0x9eac, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,\r
-+      0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0, 0x080c, 0x9e7f, 0x0560,\r
-+      0x6057, 0x0000, 0x2b00, 0x6012, 0x080c, 0xbf8c, 0x6023, 0x0003,\r
-+      0x0016, 0x080c, 0x8571, 0x0076, 0x903e, 0x080c, 0x8469, 0x2c08,\r
-+      0x080c, 0xd29b, 0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0x9e32,\r
-+      0x9085, 0x0001, 0x0070, 0x080c, 0x538e, 0x0128, 0xd18c, 0x1170,\r
-+      0x080c, 0xbc44, 0x0148, 0x2009, 0x004c, 0x080c, 0x9eac, 0x9085,\r
-+      0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016,\r
-+      0x0c90, 0x2009, 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6,\r
-+      0x0046, 0x0016, 0x080c, 0x9ddc, 0x2c78, 0x0590, 0x7e56, 0x2b00,\r
-+      0x7812, 0x7823, 0x0003, 0x2021, 0x0005, 0x080c, 0xbc56, 0x9186,\r
-+      0x004d, 0x0118, 0x9186, 0x004e, 0x0148, 0x2001, 0x1951, 0x200c,\r
-+      0xd1fc, 0x0168, 0x2f60, 0x080c, 0x9e32, 0x00d0, 0x2001, 0x1950,\r
-+      0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9e32, 0x0088, 0x2f60,\r
-+      0x080c, 0x538e, 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010,\r
-+      0x2900, 0x7816, 0x001e, 0x0016, 0x080c, 0x9eac, 0x9085, 0x0001,\r
-+      0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046,\r
-+      0x080c, 0x9ddc, 0x2c78, 0x0508, 0x7e56, 0x2b00, 0x7812, 0x7823,\r
-+      0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x194f,\r
-+      0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9e32, 0x0060, 0x2f60,\r
-+      0x080c, 0x538e, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009,\r
-+      0x0052, 0x080c, 0x9eac, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe,\r
-+      0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4879, 0x00ce,\r
-+      0x1120, 0x080c, 0x9e32, 0x9006, 0x0005, 0xa867, 0x0000, 0xa86b,\r
-+      0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x6372, 0x0158, 0x2001, 0xbc5b,\r
-+      0x0006, 0x900e, 0x2400, 0x080c, 0x6ac6, 0x080c, 0x688c, 0x000e,\r
-+      0x0807, 0x2418, 0x080c, 0x8808, 0xbaa0, 0x0086, 0x2041, 0x0001,\r
-+      0x2039, 0x0001, 0x2608, 0x080c, 0x8589, 0x008e, 0x080c, 0x8469,\r
-+      0x2f08, 0x2648, 0x080c, 0xd29b, 0xb93c, 0x81ff, 0x090c, 0x865a,\r
-+      0x080c, 0x8973, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x9ddc, 0x0190, 0x660a, 0x2b08, 0x6112,\r
-+      0x080c, 0xbf8c, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f,\r
-+      0x080c, 0x9eac, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,\r
-+      0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e7f, 0x01b8,\r
-+      0x660a, 0x2b08, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0008, 0x2900,\r
-+      0x6016, 0x00f6, 0x2c78, 0x080c, 0x1648, 0x00fe, 0x2009, 0x0021,\r
-+      0x080c, 0x9eac, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,\r
-+      0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000,\r
-+      0x080c, 0x9ddc, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbf8c,\r
-+      0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0x9eac,\r
-+      0x9085, 0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0,\r
-+      0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e7f, 0x0188, 0x2b08,\r
-+      0x6112, 0x080c, 0xbf8c, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009,\r
-+      0x0000, 0x080c, 0x9eac, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,\r
-+      0x9006, 0x0cd8, 0x2009, 0x0044, 0x0830, 0x2009, 0x0049, 0x0818,\r
-+      0x0026, 0x00b6, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211,\r
-+      0xba3e, 0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e,\r
-+      0x0002, 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004, 0x0110,\r
-+      0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0096, 0x6020,\r
-+      0x9086, 0x0004, 0x0190, 0x6014, 0x904d, 0x080c, 0xbb17, 0x0168,\r
-+      0xa864, 0x9086, 0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128,\r
-+      0xa868, 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e,\r
-+      0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e7f,\r
-+      0x0198, 0x2b08, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0001, 0x2900,\r
-+      0x6016, 0x080c, 0x2fda, 0x2009, 0x0028, 0x080c, 0x9eac, 0x9085,\r
-+      0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015,\r
-+      0x11a8, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6,\r
-+      0x080c, 0xaa49, 0x00be, 0x080c, 0xac88, 0x6003, 0x0001, 0x6007,\r
-+      0x0029, 0x080c, 0x8439, 0x080c, 0x8973, 0x0078, 0x6014, 0x0096,\r
-+      0x2048, 0xa868, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c,\r
-+      0xc14b, 0x080c, 0xa7c0, 0x080c, 0x9e32, 0x0005, 0x0096, 0x6014,\r
-+      0x904d, 0x090c, 0x0db4, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,\r
-+      0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x688c, 0x012e, 0x009e, 0x080c, 0x9e32, 0x0c30, 0x0096,\r
-+      0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x618f, 0x00e8,\r
-+      0x9186, 0x0015, 0x1510, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014,\r
-+      0x11e0, 0x6010, 0x00b6, 0x2058, 0x080c, 0x62d9, 0x00be, 0x080c,\r
-+      0xad59, 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005,\r
-+      0x0160, 0x2001, 0x0006, 0x080c, 0x618f, 0x6014, 0x2048, 0xa868,\r
-+      0xd0fc, 0x0170, 0x080c, 0xa235, 0x0048, 0x6014, 0x2048, 0xa868,\r
-+      0xd0fc, 0x0528, 0x080c, 0xa7c0, 0x080c, 0x9e32, 0x009e, 0x0005,\r
-+      0x6014, 0x6310, 0x2358, 0x904d, 0x090c, 0x0db4, 0xa87b, 0x0000,\r
-+      0xa883, 0x0000, 0xa897, 0x4000, 0x900e, 0x080c, 0x645e, 0x1108,\r
-+      0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091,\r
-+      0x8000, 0x080c, 0x688c, 0x012e, 0x080c, 0x9e32, 0x08f8, 0x6014,\r
-+      0x904d, 0x090c, 0x0db4, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,\r
-+      0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x688c, 0x012e, 0x080c, 0x9e32, 0x0840, 0xa878, 0x9086,\r
-+      0x0005, 0x1108, 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005,\r
-+      0x6043, 0x0000, 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050,\r
-+      0x080c, 0x83f1, 0x080c, 0x8973, 0x0005, 0x00c6, 0x6010, 0x00b6,\r
-+      0x2058, 0xb800, 0x00be, 0xd0bc, 0x0120, 0x6020, 0x9084, 0x000f,\r
-+      0x0013, 0x00ce, 0x0005, 0xb832, 0xbe3c, 0xbe3c, 0xbe3f, 0xd579,\r
-+      0xd594, 0xd597, 0xb832, 0xb832, 0xb832, 0xb832, 0xb832, 0xb832,\r
-+      0xb832, 0xb832, 0x080c, 0x0db4, 0xa001, 0xa001, 0x0005, 0x0096,\r
-+      0x6014, 0x904d, 0x0118, 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010,\r
-+      0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,\r
-+      0x0550, 0x2001, 0x1833, 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78,\r
-+      0x080c, 0x9ddc, 0x0508, 0x7810, 0x6012, 0x080c, 0xbf8c, 0x7820,\r
-+      0x9086, 0x0003, 0x0128, 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020,\r
-+      0x7808, 0x603e, 0x2f00, 0x603a, 0x602e, 0x6023, 0x0001, 0x6007,\r
-+      0x0035, 0x6003, 0x0001, 0x7954, 0x6156, 0x080c, 0x83f1, 0x080c,\r
-+      0x8973, 0x2f60, 0x00fe, 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1959,\r
-+      0x2004, 0x6042, 0x0005, 0x0016, 0x0096, 0x6814, 0x2048, 0xa87c,\r
-+      0xd0e4, 0x0180, 0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000,\r
-+      0xa88f, 0x0000, 0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048,\r
-+      0x080c, 0x0f9d, 0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803,\r
-+      0x0002, 0x9086, 0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0,\r
-+      0x681c, 0xc085, 0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085,\r
-+      0x0c00, 0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0,\r
-+      0x693c, 0x9103, 0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc,\r
-+      0x683a, 0x6032, 0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112,\r
-+      0x6954, 0x6156, 0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001,\r
-+      0x080c, 0x83f1, 0x080c, 0x8973, 0x009e, 0x001e, 0x0005, 0x6024,\r
-+      0xd0d4, 0x0510, 0xd0f4, 0x11f8, 0x6038, 0x940a, 0x603c, 0x9303,\r
-+      0x0230, 0x9105, 0x0120, 0x6024, 0xc0d4, 0xc0f5, 0x0098, 0x643a,\r
-+      0x633e, 0xac3e, 0xab42, 0x0046, 0x0036, 0x2400, 0xacac, 0x9402,\r
-+      0xa836, 0x2300, 0xabb0, 0x9303, 0xa83a, 0x003e, 0x004e, 0x6024,\r
-+      0xc0d4, 0x0000, 0x6026, 0x0005, 0xd0f4, 0x1138, 0xa83c, 0x603a,\r
-+      0xa840, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x0005, 0x0006, 0x0016,\r
-+      0x6004, 0x908e, 0x0034, 0x01b8, 0x908e, 0x0035, 0x01a0, 0x908e,\r
-+      0x0036, 0x0188, 0x908e, 0x0037, 0x0170, 0x908e, 0x0038, 0x0158,\r
-+      0x908e, 0x0039, 0x0140, 0x908e, 0x003a, 0x0128, 0x908e, 0x003b,\r
-+      0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016,\r
-+      0x0026, 0x0036, 0x00e6, 0x2001, 0x1953, 0x200c, 0x8000, 0x2014,\r
-+      0x2001, 0x0032, 0x080c, 0x8270, 0x2001, 0x1957, 0x82ff, 0x1110,\r
-+      0x2011, 0x0014, 0x2202, 0x2001, 0x1955, 0x200c, 0x8000, 0x2014,\r
-+      0x2071, 0x193d, 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x8270,\r
-+      0x2001, 0x1958, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,\r
-+      0x1959, 0x9288, 0x000a, 0x2102, 0x2001, 0x1a61, 0x2102, 0x2001,\r
-+      0x0032, 0x080c, 0x1518, 0x080c, 0x6543, 0x00ee, 0x003e, 0x002e,\r
-+      0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1957,\r
-+      0x2003, 0x0028, 0x2001, 0x1958, 0x2003, 0x0014, 0x2071, 0x193d,\r
-+      0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0x1959, 0x2009, 0x001e,\r
-+      0x2102, 0x2001, 0x1a61, 0x2102, 0x2001, 0x0032, 0x080c, 0x1518,\r
-+      0x00ee, 0x001e, 0x000e, 0x0005, 0x0096, 0x6058, 0x904d, 0x0110,\r
-+      0x080c, 0x101d, 0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091,\r
-+      0x8000, 0x080c, 0x9ddc, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023,\r
-+      0x0001, 0x2900, 0x6016, 0x2009, 0x0033, 0x080c, 0x9eac, 0x9085,\r
-+      0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6,\r
-+      0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1500, 0x708c, 0x9086,\r
-+      0x0018, 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78,\r
-+      0x080c, 0x8b63, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c,\r
-+      0xaa54, 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be,\r
-+      0x900e, 0x080c, 0x3023, 0x080c, 0xa235, 0x0020, 0x080c, 0xa7c0,\r
-+      0x080c, 0x9e32, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54,\r
-+      0x9206, 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x9ddc, 0x0188, 0x2b08, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0001,\r
-+      0x2900, 0x6016, 0x2009, 0x004d, 0x080c, 0x9eac, 0x9085, 0x0001,\r
-+      0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,\r
-+      0x8000, 0x0016, 0x080c, 0x9ddc, 0x0180, 0x2b08, 0x6112, 0x080c,\r
-+      0xbf8c, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0x9eac,\r
-+      0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0,\r
-+      0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6,\r
-+      0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014,\r
-+      0x2048, 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001,\r
-+      0x1971, 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906,\r
-+      0x8006, 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080,\r
-+      0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x080c, 0xc7ce,\r
-+      0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048,\r
-+      0xa867, 0x0103, 0x0010, 0x080c, 0xa7c0, 0x080c, 0x9e32, 0x00fe,\r
-+      0x00ee, 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,\r
-+      0x0005, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,\r
-+      0x11b8, 0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78,\r
-+      0x080c, 0x8b63, 0x01a8, 0x7078, 0xaa74, 0x9206, 0x1130, 0x707c,\r
-+      0xaa78, 0x9206, 0x1110, 0x080c, 0x2fda, 0x080c, 0xa235, 0x0020,\r
-+      0x080c, 0xa7c0, 0x080c, 0x9e32, 0x00fe, 0x00ee, 0x009e, 0x0005,\r
-+      0x705c, 0xaa78, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6,\r
-+      0x2071, 0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004,\r
-+      0x1530, 0x6014, 0x2048, 0x2c78, 0x080c, 0x8b63, 0x05f0, 0x7078,\r
-+      0xaacc, 0x9206, 0x1180, 0x707c, 0xaad0, 0x9206, 0x1160, 0x080c,\r
-+      0x2fda, 0x0016, 0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c,\r
-+      0x533e, 0x001e, 0x0010, 0x080c, 0x512f, 0x080c, 0xbb17, 0x0508,\r
-+      0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c,\r
-+      0xbb17, 0x01b8, 0x6014, 0x2048, 0x080c, 0x512f, 0x1d70, 0xa87b,\r
-+      0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126,\r
-+      0x2091, 0x8000, 0xa867, 0x0139, 0x080c, 0x688c, 0x012e, 0x080c,\r
-+      0x9e32, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad0, 0x9206,\r
-+      0x0930, 0x0888, 0x0016, 0x0026, 0xa87c, 0xd0ac, 0x0178, 0xa938,\r
-+      0xaa34, 0x2100, 0x9205, 0x0150, 0xa890, 0x9106, 0x1118, 0xa88c,\r
-+      0x9206, 0x0120, 0xa992, 0xaa8e, 0x9085, 0x0001, 0x002e, 0x001e,\r
-+      0x0005, 0x00b6, 0x00d6, 0x0036, 0x080c, 0xbb17, 0x0904, 0xc147,\r
-+      0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580,\r
-+      0x6310, 0x00c6, 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140,\r
-+      0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,\r
-+      0xaa96, 0xa99a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080,\r
-+      0x0031, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098,\r
-+      0x080c, 0x0f68, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0,\r
-+      0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f68, 0x00ce, 0x0090,\r
-+      0xaa96, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016,\r
-+      0x0110, 0xa89b, 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084,\r
-+      0x00ff, 0xa89e, 0x080c, 0x687f, 0x6017, 0x0000, 0x009e, 0x003e,\r
-+      0x00de, 0x00be, 0x0005, 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096,\r
-+      0x00f6, 0x6214, 0x2248, 0x6210, 0x2258, 0x2079, 0x0260, 0x9096,\r
-+      0x0000, 0x11a0, 0xb814, 0x9084, 0x00ff, 0x900e, 0x080c, 0x2663,\r
-+      0x2118, 0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d,\r
-+      0x7c3c, 0x2011, 0x8018, 0x080c, 0x48d9, 0x00a8, 0x9096, 0x0001,\r
-+      0x1148, 0x89ff, 0x0180, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c,\r
-+      0xa8aa, 0x0048, 0x9096, 0x0002, 0x1130, 0xa89b, 0x000d, 0x7838,\r
-+      0xa8a6, 0x783c, 0xa8aa, 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e,\r
-+      0x002e, 0x0005, 0x00c6, 0x0026, 0x0016, 0x9186, 0x0035, 0x0110,\r
-+      0x6a38, 0x0008, 0x6a2c, 0x080c, 0xbb05, 0x01f0, 0x2260, 0x6120,\r
-+      0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x1190, 0x6838, 0x9206,\r
-+      0x0140, 0x683c, 0x9206, 0x1160, 0x6108, 0x6838, 0x9106, 0x1140,\r
-+      0x0020, 0x6008, 0x693c, 0x9106, 0x1118, 0x6010, 0x6910, 0x9106,\r
-+      0x001e, 0x002e, 0x00ce, 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa974,\r
-+      0xd1cc, 0x0188, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1160, 0xa9a8,\r
-+      0x918c, 0x0f00, 0x810f, 0x918e, 0x0001, 0x1128, 0xa834, 0xa938,\r
-+      0x9115, 0x190c, 0xb227, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010,\r
-+      0x0036, 0x901e, 0x0499, 0x01e0, 0x080c, 0xbb17, 0x01c8, 0x080c,\r
-+      0xbd00, 0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048,\r
-+      0xa87c, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x0040, 0xa867,\r
-+      0x0103, 0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x688c, 0x009e,\r
-+      0x003e, 0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec,\r
-+      0xa882, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b,\r
-+      0x0005, 0x080c, 0xbe0c, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810,\r
-+      0x2004, 0xd0ec, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4,\r
-+      0x000e, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e,\r
-+      0x0005, 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be,\r
-+      0x2021, 0x0007, 0x080c, 0x4a76, 0x004e, 0x003e, 0x0005, 0x0c51,\r
-+      0x1d81, 0x0005, 0x2001, 0x1957, 0x2004, 0x601a, 0x0005, 0x2001,\r
-+      0x1959, 0x2004, 0x6042, 0x0005, 0x080c, 0x9e32, 0x0804, 0x8973,\r
-+      0x00b6, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4, 0x001b,\r
-+      0x006e, 0x00be, 0x0005, 0xc253, 0xc92b, 0xca86, 0xc253, 0xc253,\r
-+      0xc253, 0xc253, 0xc253, 0xc28a, 0xcb08, 0xc253, 0xc253, 0xc253,\r
-+      0xc253, 0xc253, 0xc253, 0x080c, 0x0db4, 0x0066, 0x6000, 0x90b2,\r
-+      0x0016, 0x1a0c, 0x0db4, 0x0013, 0x006e, 0x0005, 0xc26e, 0xd070,\r
-+      0xc26e, 0xc26e, 0xc26e, 0xc26e, 0xc26e, 0xc26e, 0xd01d, 0xd0c4,\r
-+      0xc26e, 0xd6b4, 0xd6ea, 0xd6b4, 0xd6ea, 0xc26e, 0x080c, 0x0db4,\r
-+      0x6000, 0x9082, 0x0016, 0x1a0c, 0x0db4, 0x6000, 0x000a, 0x0005,\r
-+      0xc288, 0xcce5, 0xcdd5, 0xcdf7, 0xceb6, 0xc288, 0xcf94, 0xcf3e,\r
-+      0xcb14, 0xcff3, 0xd008, 0xc288, 0xc288, 0xc288, 0xc288, 0xc288,\r
-+      0x080c, 0x0db4, 0x91b2, 0x0053, 0x1a0c, 0x0db4, 0x2100, 0x91b2,\r
-+      0x0040, 0x1a04, 0xc6cc, 0x0002, 0xc2d4, 0xc4bd, 0xc2d4, 0xc2d4,\r
-+      0xc2d4, 0xc4c6, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4,\r
-+      0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4,\r
-+      0xc2d4, 0xc2d4, 0xc2d4, 0xc2d6, 0xc339, 0xc348, 0xc3ac, 0xc3d7,\r
-+      0xc44f, 0xc4a8, 0xc2d4, 0xc2d4, 0xc4c9, 0xc2d4, 0xc2d4, 0xc4de,\r
-+      0xc4eb, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc56e, 0xc2d4,\r
-+      0xc2d4, 0xc582, 0xc2d4, 0xc2d4, 0xc53d, 0xc2d4, 0xc2d4, 0xc2d4,\r
-+      0xc59a, 0xc2d4, 0xc2d4, 0xc2d4, 0xc617, 0xc2d4, 0xc2d4, 0xc2d4,\r
-+      0xc2d4, 0xc2d4, 0xc2d4, 0xc694, 0x080c, 0x0db4, 0x080c, 0x6520,\r
-+      0x1150, 0x2001, 0x1836, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009,\r
-+      0x9086, 0x0008, 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017,\r
-+      0x0000, 0x0804, 0xc4b6, 0x080c, 0x6509, 0x00e6, 0x00c6, 0x0036,\r
-+      0x0026, 0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029,\r
-+      0x080c, 0x8571, 0x0076, 0x903e, 0x080c, 0x8469, 0x2c08, 0x080c,\r
-+      0xd29b, 0x007e, 0x001e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee,\r
-+      0x6610, 0x2658, 0x080c, 0x624d, 0xbe04, 0x9684, 0x00ff, 0x9082,\r
-+      0x0006, 0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0,\r
-+      0x00be, 0x2c08, 0x080c, 0xd862, 0x002e, 0x001e, 0x1178, 0x080c,\r
-+      0xd1ce, 0x1904, 0xc3a4, 0x080c, 0xd16a, 0x1120, 0x6007, 0x0008,\r
-+      0x0804, 0xc4b6, 0x6007, 0x0009, 0x0804, 0xc4b6, 0x080c, 0xd3c5,\r
-+      0x0128, 0x080c, 0xd1ce, 0x0d78, 0x0804, 0xc3a4, 0x6017, 0x1900,\r
-+      0x0c88, 0x080c, 0x30fd, 0x1904, 0xc6c9, 0x6106, 0x080c, 0xd11f,\r
-+      0x6007, 0x0006, 0x0804, 0xc4b6, 0x6007, 0x0007, 0x0804, 0xc4b6,\r
-+      0x080c, 0xd726, 0x1904, 0xc6c9, 0x080c, 0x30fd, 0x1904, 0xc6c9,\r
-+      0x00d6, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006,\r
-+      0x1220, 0x2001, 0x0001, 0x080c, 0x617b, 0x96b4, 0xff00, 0x8637,\r
-+      0x9686, 0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4,\r
-+      0x00ff, 0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686,\r
-+      0x0005, 0x0110, 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034,\r
-+      0x9084, 0x0003, 0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030,\r
-+      0x9084, 0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007,\r
-+      0x00b0, 0x00ee, 0x080c, 0xd231, 0x1190, 0x9686, 0x0006, 0x1140,\r
-+      0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x3023, 0x002e,\r
-+      0x080c, 0x62d9, 0x6007, 0x000a, 0x00de, 0x0804, 0xc4b6, 0x6007,\r
-+      0x000b, 0x00de, 0x0804, 0xc4b6, 0x080c, 0x2fda, 0x080c, 0xc227,\r
-+      0x6007, 0x0001, 0x0804, 0xc4b6, 0x080c, 0xd726, 0x1904, 0xc6c9,\r
-+      0x080c, 0x30fd, 0x1904, 0xc6c9, 0x2071, 0x0260, 0x7034, 0x90b4,\r
-+      0x0003, 0x1948, 0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003,\r
-+      0x1910, 0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026,\r
-+      0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x3023, 0x002e, 0x6007,\r
-+      0x000c, 0x2001, 0x0001, 0x080c, 0xd842, 0x0804, 0xc4b6, 0x080c,\r
-+      0x6520, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086,\r
-+      0x0008, 0x1110, 0x0804, 0xc2e3, 0x080c, 0x6509, 0x6610, 0x2658,\r
-+      0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x06c0, 0x1138, 0x0026,\r
-+      0x2001, 0x0006, 0x080c, 0x61bb, 0x002e, 0x0050, 0x96b4, 0xff00,\r
-+      0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xc3a4,\r
-+      0x080c, 0xd23e, 0x1120, 0x6007, 0x000e, 0x0804, 0xc4b6, 0x0046,\r
-+      0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x2fda, 0x080c, 0xc227,\r
-+      0x004e, 0x0016, 0x9006, 0x2009, 0x1854, 0x210c, 0x0048, 0x2009,\r
-+      0x0029, 0x080c, 0xd52a, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802,\r
-+      0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xc4b6, 0x2001, 0x0001,\r
-+      0x080c, 0x617b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,\r
-+      0x2019, 0x1805, 0x2011, 0x0270, 0x080c, 0xadf9, 0x003e, 0x002e,\r
-+      0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682,\r
-+      0x0004, 0x0a04, 0xc3a4, 0x9682, 0x0007, 0x0a04, 0xc400, 0x0804,\r
-+      0xc3a4, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xc4b6, 0x080c,\r
-+      0x6520, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086,\r
-+      0x0008, 0x1110, 0x0804, 0xc2e3, 0x080c, 0x6509, 0x6610, 0x2658,\r
-+      0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x0690, 0x0150, 0x96b4,\r
-+      0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904,\r
-+      0xc3a4, 0x080c, 0xd26c, 0x1130, 0x080c, 0xd16a, 0x1118, 0x6007,\r
-+      0x0010, 0x04e0, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c,\r
-+      0x2fda, 0x080c, 0xc227, 0x004e, 0x0016, 0x9006, 0x2009, 0x1854,\r
-+      0x210c, 0x0048, 0x2009, 0x0029, 0x080c, 0xd52a, 0x6010, 0x2058,\r
-+      0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0,\r
-+      0x080c, 0xd3c5, 0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,\r
-+      0x0980, 0x0804, 0xc3a4, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070,\r
-+      0x080c, 0x30fd, 0x1904, 0xc6c9, 0x080c, 0xd726, 0x1904, 0xc6c9,\r
-+      0x080c, 0xc869, 0x1904, 0xc3a4, 0x6007, 0x0012, 0x6003, 0x0001,\r
-+      0x080c, 0x8439, 0x080c, 0x8973, 0x0005, 0x6007, 0x0001, 0x6003,\r
-+      0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0cb0, 0x6007, 0x0005,\r
-+      0x0c68, 0x080c, 0xd726, 0x1904, 0xc6c9, 0x080c, 0x30fd, 0x1904,\r
-+      0xc6c9, 0x080c, 0xc869, 0x1904, 0xc3a4, 0x6007, 0x0020, 0x6003,\r
-+      0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0005, 0x080c, 0x30fd,\r
-+      0x1904, 0xc6c9, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x8439,\r
-+      0x080c, 0x8973, 0x0005, 0x080c, 0xd726, 0x1904, 0xc6c9, 0x080c,\r
-+      0x30fd, 0x1904, 0xc6c9, 0x080c, 0xc869, 0x1904, 0xc3a4, 0x0016,\r
-+      0x0026, 0x00e6, 0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180,\r
-+      0x2c08, 0x080c, 0xbb05, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206,\r
-+      0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050,\r
-+      0x7240, 0x2c08, 0x9006, 0x080c, 0xd4fc, 0x1180, 0x7244, 0x9286,\r
-+      0xffff, 0x01b0, 0x2160, 0x6007, 0x0026, 0x6017, 0x1700, 0x7214,\r
-+      0x9296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068, 0x6020, 0x9086,\r
-+      0x0007, 0x1d80, 0x6004, 0x9086, 0x0024, 0x1110, 0x080c, 0x9e32,\r
-+      0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x8439, 0x080c,\r
-+      0x8973, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c,\r
-+      0x617b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,\r
-+      0x1805, 0x2011, 0x0276, 0x080c, 0xadf9, 0x003e, 0x002e, 0x001e,\r
-+      0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xc4b6, 0x080c, 0xaa61,\r
-+      0x080c, 0x6fb2, 0x1190, 0x0006, 0x0026, 0x0036, 0x080c, 0x6fcc,\r
-+      0x1138, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x080c, 0x6ee4, 0x0010,\r
-+      0x080c, 0x6f8a, 0x003e, 0x002e, 0x000e, 0x0005, 0x080c, 0x30fd,\r
-+      0x1904, 0xc6c9, 0x080c, 0xc869, 0x1904, 0xc3a4, 0x6106, 0x080c,\r
-+      0xc885, 0x1120, 0x6007, 0x002b, 0x0804, 0xc4b6, 0x6007, 0x002c,\r
-+      0x0804, 0xc4b6, 0x080c, 0xd726, 0x1904, 0xc6c9, 0x080c, 0x30fd,\r
-+      0x1904, 0xc6c9, 0x080c, 0xc869, 0x1904, 0xc3a4, 0x6106, 0x080c,\r
-+      0xc88a, 0x1120, 0x6007, 0x002e, 0x0804, 0xc4b6, 0x6007, 0x002f,\r
-+      0x0804, 0xc4b6, 0x080c, 0x30fd, 0x1904, 0xc6c9, 0x00e6, 0x00d6,\r
-+      0x00c6, 0x6010, 0x2058, 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006,\r
-+      0x0158, 0x9184, 0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce,\r
-+      0x00de, 0x00ee, 0x0804, 0xc4bd, 0x080c, 0x538a, 0xd0e4, 0x0904,\r
-+      0xc614, 0x2071, 0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108,\r
-+      0x720c, 0x080c, 0x655e, 0x0140, 0x6010, 0x2058, 0xb810, 0x9106,\r
-+      0x1118, 0xb814, 0x9206, 0x0510, 0x080c, 0x655a, 0x15b8, 0x2069,\r
-+      0x1800, 0x687c, 0x9206, 0x1590, 0x6878, 0x9106, 0x1578, 0x7210,\r
-+      0x080c, 0xbb05, 0x0590, 0x080c, 0xc754, 0x0578, 0x080c, 0xd5a6,\r
-+      0x0560, 0x622e, 0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x83f1,\r
-+      0x080c, 0x8973, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286,\r
-+      0xffff, 0x0150, 0x080c, 0xbb05, 0x01c0, 0x9280, 0x0002, 0x2004,\r
-+      0x7110, 0x9106, 0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001,\r
-+      0x080c, 0xd4fc, 0x2c10, 0x2160, 0x0140, 0x0890, 0x6007, 0x0037,\r
-+      0x602f, 0x0009, 0x6017, 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f,\r
-+      0x0003, 0x6017, 0x1700, 0x0880, 0x6007, 0x0012, 0x0868, 0x080c,\r
-+      0x30fd, 0x1904, 0xc6c9, 0x6010, 0x2058, 0xb804, 0x9084, 0xff00,\r
-+      0x8007, 0x9086, 0x0006, 0x1904, 0xc4bd, 0x00e6, 0x00d6, 0x00c6,\r
-+      0x080c, 0x538a, 0xd0e4, 0x0904, 0xc68c, 0x2069, 0x1800, 0x2071,\r
-+      0x026c, 0x7008, 0x603a, 0x720c, 0x623e, 0x9286, 0xffff, 0x1150,\r
-+      0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001, 0x080c, 0xd4fc, 0x2c10,\r
-+      0x00ce, 0x05e8, 0x080c, 0xbb05, 0x05d0, 0x7108, 0x9280, 0x0002,\r
-+      0x2004, 0x9106, 0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c, 0xb73d,\r
-+      0x002e, 0x00ce, 0x7118, 0x918c, 0xff00, 0x810f, 0x9186, 0x0001,\r
-+      0x0178, 0x9186, 0x0005, 0x0118, 0x9186, 0x0007, 0x1198, 0x9280,\r
-+      0x0005, 0x2004, 0x9005, 0x0170, 0x080c, 0xc754, 0x0904, 0xc60d,\r
-+      0x0056, 0x7510, 0x7614, 0x080c, 0xd5bf, 0x005e, 0x00ce, 0x00de,\r
-+      0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00,\r
-+      0x6003, 0x0001, 0x080c, 0x83f1, 0x080c, 0x8973, 0x0c78, 0x6007,\r
-+      0x003b, 0x602f, 0x0003, 0x6017, 0x0300, 0x6003, 0x0001, 0x080c,\r
-+      0x83f1, 0x080c, 0x8973, 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b,\r
-+      0x6017, 0x0000, 0x0804, 0xc5e4, 0x00e6, 0x0026, 0x080c, 0x6520,\r
-+      0x0550, 0x080c, 0x6509, 0x080c, 0xd798, 0x1518, 0x2071, 0x1800,\r
-+      0x70d8, 0x9085, 0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72ac,\r
-+      0x9284, 0x00ff, 0x707a, 0x78e6, 0x9284, 0xff00, 0x727c, 0x9205,\r
-+      0x707e, 0x78ea, 0x00fe, 0x70e3, 0x0000, 0x080c, 0x655e, 0x0120,\r
-+      0x2011, 0x19d1, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2dbb,\r
-+      0x0010, 0x080c, 0xd7ca, 0x002e, 0x00ee, 0x080c, 0x9e32, 0x0804,\r
-+      0xc4bc, 0x080c, 0x9e32, 0x0005, 0x2600, 0x0002, 0xc6e0, 0xc6e0,\r
-+      0xc6e0, 0xc6e0, 0xc6e0, 0xc6e2, 0xc6e0, 0xc6e0, 0xc6e0, 0xc6e0,\r
-+      0xc6ff, 0xc6e0, 0xc6e0, 0xc6e0, 0xc711, 0xc71e, 0xc74f, 0xc6e0,\r
-+      0x080c, 0x0db4, 0x080c, 0xd726, 0x1d20, 0x080c, 0x30fd, 0x1d08,\r
-+      0x080c, 0xc869, 0x1148, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003,\r
-+      0x0001, 0x080c, 0x8439, 0x0005, 0x080c, 0x2fda, 0x080c, 0xc227,\r
-+      0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x8439, 0x0005, 0x080c,\r
-+      0xd726, 0x1938, 0x080c, 0x30fd, 0x1920, 0x080c, 0xc869, 0x1d60,\r
-+      0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x8439,\r
-+      0x0005, 0x080c, 0xc771, 0x0904, 0xc6c9, 0x6007, 0x004e, 0x6003,\r
-+      0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0005, 0x6007, 0x004f,\r
-+      0x6017, 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186,\r
-+      0x0001, 0x1160, 0x7140, 0x2001, 0x198e, 0x2004, 0x9106, 0x11b0,\r
-+      0x7144, 0x2001, 0x198f, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002,\r
-+      0x1168, 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048,\r
-+      0x2019, 0x000a, 0x080c, 0xae0d, 0x009e, 0x0110, 0x6017, 0x0001,\r
-+      0x6003, 0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0005, 0x6007,\r
-+      0x0050, 0x703c, 0x6016, 0x0ca0, 0x0016, 0x00e6, 0x2071, 0x0260,\r
-+      0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058, 0xb8bc, 0xd084, 0x0150,\r
-+      0x7128, 0x6048, 0x9106, 0x1120, 0x712c, 0x6044, 0x9106, 0x0110,\r
-+      0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee, 0x001e,\r
-+      0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126,\r
-+      0x2091, 0x8000, 0x2071, 0x1800, 0x708c, 0x908a, 0x00f9, 0x16e8,\r
-+      0x20e1, 0x0000, 0x2001, 0x1971, 0x2003, 0x0000, 0x080c, 0x1004,\r
-+      0x05a0, 0x2900, 0x6016, 0x708c, 0x8004, 0xa816, 0x908a, 0x001e,\r
-+      0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x0471,\r
-+      0x001e, 0x2940, 0x080c, 0x1004, 0x01c0, 0x2900, 0xa006, 0x2100,\r
-+      0x81ff, 0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x00b1,\r
-+      0x001e, 0x0000, 0x9085, 0x0001, 0x0048, 0x2071, 0x1800, 0x708f,\r
-+      0x0000, 0x6014, 0x2048, 0x080c, 0x0f9d, 0x9006, 0x012e, 0x01de,\r
-+      0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e, 0x0005, 0x0006, 0x0016,\r
-+      0x0026, 0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8, 0x080c, 0x2241,\r
-+      0x2099, 0x026c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8,\r
-+      0x4003, 0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x2241,\r
-+      0x2099, 0x0260, 0x0ca8, 0x080c, 0x2241, 0x2061, 0x1971, 0x6004,\r
-+      0x2098, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048,\r
-+      0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x2241, 0x2099, 0x0260,\r
-+      0x0ca8, 0x2061, 0x1971, 0x2019, 0x0280, 0x3300, 0x931e, 0x0110,\r
-+      0x6006, 0x0020, 0x2001, 0x0260, 0x6006, 0x8108, 0x2162, 0x9292,\r
-+      0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e,\r
-+      0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff,\r
-+      0x11b8, 0x080c, 0x2259, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518,\r
-+      0x9312, 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff,\r
-+      0x01f8, 0x22a8, 0x8108, 0x080c, 0x2259, 0x20a1, 0x0240, 0x0c98,\r
-+      0x080c, 0x2259, 0x2061, 0x1974, 0x6004, 0x20a0, 0x6008, 0x3518,\r
-+      0x9312, 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff,\r
-+      0x0138, 0x22a8, 0x8108, 0x080c, 0x2259, 0x20a1, 0x0240, 0x0c98,\r
-+      0x2061, 0x1974, 0x2019, 0x0260, 0x3400, 0x931e, 0x0110, 0x6006,\r
-+      0x0020, 0x2001, 0x0240, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021,\r
-+      0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e,\r
-+      0x0005, 0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00,\r
-+      0x8637, 0x9686, 0x0006, 0x0170, 0x9686, 0x0004, 0x0158, 0xbe04,\r
-+      0x96b4, 0x00ff, 0x9686, 0x0006, 0x0128, 0x9686, 0x0004, 0x0110,\r
-+      0x9085, 0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xc901,\r
-+      0x00de, 0x0005, 0x00d6, 0x080c, 0xc90e, 0x1520, 0x680c, 0x908c,\r
-+      0xff00, 0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e,\r
-+      0xd1e4, 0x0130, 0x9006, 0x080c, 0xd842, 0x2009, 0x0001, 0x0078,\r
-+      0xd1ec, 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x2663,\r
-+      0x1148, 0x2001, 0x0001, 0x080c, 0xd842, 0x2110, 0x900e, 0x080c,\r
-+      0x3023, 0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005,\r
-+      0x00b6, 0x00c6, 0x080c, 0x9e7f, 0x05a8, 0x0016, 0x0026, 0x00c6,\r
-+      0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2663, 0x1578,\r
-+      0x080c, 0x61de, 0x1560, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e,\r
-+      0x2b00, 0x6012, 0x080c, 0xd726, 0x11d8, 0x080c, 0x30fd, 0x11c0,\r
-+      0x080c, 0xc869, 0x0510, 0x2001, 0x0007, 0x080c, 0x618f, 0x2001,\r
-+      0x0007, 0x080c, 0x61bb, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007,\r
-+      0x0001, 0x6003, 0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0010,\r
-+      0x080c, 0x9e32, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c,\r
-+      0x9e32, 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0x9e32, 0x9006,\r
-+      0x0c98, 0x2069, 0x026d, 0x6800, 0x9082, 0x0010, 0x1228, 0x6017,\r
-+      0x0000, 0x9085, 0x0001, 0x0008, 0x9006, 0x0005, 0x6017, 0x0000,\r
-+      0x2069, 0x026c, 0x6808, 0x9084, 0xff00, 0x9086, 0x0800, 0x1190,\r
-+      0x6904, 0x9186, 0x0018, 0x0118, 0x9186, 0x0014, 0x1158, 0x810f,\r
-+      0x6800, 0x9084, 0x00ff, 0x910d, 0x615a, 0x908e, 0x0014, 0x0110,\r
-+      0x908e, 0x0010, 0x0005, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0db4,\r
-+      0x91b6, 0x0013, 0x1130, 0x2008, 0x91b2, 0x0040, 0x1a04, 0xca56,\r
-+      0x0092, 0x91b6, 0x0027, 0x0120, 0x91b6, 0x0014, 0x190c, 0x0db4,\r
-+      0x2001, 0x0007, 0x080c, 0x61bb, 0x080c, 0x886e, 0x080c, 0x9e62,\r
-+      0x080c, 0x8973, 0x0005, 0xc98b, 0xc98d, 0xc98b, 0xc98b, 0xc98b,\r
-+      0xc98d, 0xc99c, 0xca4f, 0xc9ee, 0xca4f, 0xca00, 0xca4f, 0xc99c,\r
-+      0xca4f, 0xca47, 0xca4f, 0xca47, 0xca4f, 0xca4f, 0xc98b, 0xc98b,\r
-+      0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xc98b,\r
-+      0xc98b, 0xc98d, 0xc98b, 0xca4f, 0xc98b, 0xc98b, 0xca4f, 0xc98b,\r
-+      0xca4c, 0xca4f, 0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xca4f, 0xca4f,\r
-+      0xc98b, 0xca4f, 0xca4f, 0xc98b, 0xc997, 0xc98b, 0xc98b, 0xc98b,\r
-+      0xc98b, 0xca4b, 0xca4f, 0xc98b, 0xc98b, 0xca4f, 0xca4f, 0xc98b,\r
-+      0xc98b, 0xc98b, 0xc98b, 0x080c, 0x0db4, 0x080c, 0x886e, 0x080c,\r
-+      0xc22a, 0x6003, 0x0002, 0x080c, 0x8973, 0x0804, 0xca55, 0x9006,\r
-+      0x080c, 0x617b, 0x0804, 0xca4f, 0x080c, 0x655a, 0x1904, 0xca4f,\r
-+      0x9006, 0x080c, 0x617b, 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff,\r
-+      0x1140, 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe,\r
-+      0x0428, 0x6010, 0x2058, 0xb8b0, 0x9005, 0x1178, 0x080c, 0xc212,\r
-+      0x1904, 0xca4f, 0x0036, 0x0046, 0xbba0, 0x2021, 0x0007, 0x080c,\r
-+      0x4a76, 0x004e, 0x003e, 0x0804, 0xca4f, 0x080c, 0x312e, 0x1904,\r
-+      0xca4f, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6,\r
-+      0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002,\r
-+      0x080c, 0x618f, 0x080c, 0x886e, 0x6023, 0x0001, 0x6003, 0x0001,\r
-+      0x6007, 0x0002, 0x080c, 0x8439, 0x080c, 0x8973, 0x6110, 0x2158,\r
-+      0x2009, 0x0001, 0x080c, 0x8046, 0x0804, 0xca55, 0x6610, 0x2658,\r
-+      0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0904, 0xca4f,\r
-+      0x9686, 0x0004, 0x0904, 0xca4f, 0x2001, 0x0004, 0x0804, 0xca4d,\r
-+      0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046,\r
-+      0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4a76, 0x004e,\r
-+      0x003e, 0x2001, 0x0006, 0x080c, 0xca73, 0x6610, 0x2658, 0xbe04,\r
-+      0x0066, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0168,\r
-+      0x2001, 0x0006, 0x080c, 0x61bb, 0x9284, 0x00ff, 0x908e, 0x0007,\r
-+      0x1120, 0x2001, 0x0006, 0x080c, 0x618f, 0x080c, 0x655a, 0x11f8,\r
-+      0x2001, 0x1836, 0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff,\r
-+      0x9686, 0x0006, 0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000,\r
-+      0x78a6, 0x00fe, 0x0804, 0xc9d6, 0x2001, 0x0004, 0x0030, 0x2001,\r
-+      0x0006, 0x0449, 0x0020, 0x0018, 0x0010, 0x080c, 0x61bb, 0x080c,\r
-+      0x886e, 0x080c, 0x9e32, 0x080c, 0x8973, 0x0005, 0x2600, 0x0002,\r
-+      0xca6a, 0xca6a, 0xca6a, 0xca6a, 0xca6a, 0xca6c, 0xca6a, 0xca6a,\r
-+      0xca6a, 0xca6a, 0xca6c, 0xca6a, 0xca6a, 0xca6a, 0xca6c, 0xca6c,\r
-+      0xca6c, 0xca6c, 0x080c, 0x0db4, 0x080c, 0x886e, 0x080c, 0x9e32,\r
-+      0x080c, 0x8973, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158,\r
-+      0xb900, 0xd184, 0x0138, 0x080c, 0x618f, 0x9006, 0x080c, 0x617b,\r
-+      0x080c, 0x3003, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658,\r
-+      0xb804, 0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0db4,\r
-+      0x91b6, 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c,\r
-+      0x0db4, 0x006b, 0x0005, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1,\r
-+      0xa8a1, 0xcaf2, 0xcab3, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1,\r
-+      0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, 0xcaf2, 0xcaf9, 0xa8a1,\r
-+      0xa8a1, 0xa8a1, 0xa8a1, 0x00f6, 0x080c, 0x655a, 0x11d8, 0x080c,\r
-+      0xc212, 0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8b0, 0x9005, 0x0190,\r
-+      0x9006, 0x080c, 0x617b, 0x2001, 0x0002, 0x080c, 0x618f, 0x6023,\r
-+      0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8439, 0x080c,\r
-+      0x8973, 0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,\r
-+      0x2663, 0x11b0, 0x080c, 0x623e, 0x0118, 0x080c, 0x9e32, 0x0080,\r
-+      0xb810, 0x0006, 0xb814, 0x0006, 0xb8b0, 0x0006, 0x080c, 0x5ceb,\r
-+      0x000e, 0xb8b2, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0x9e32,\r
-+      0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0x9e32,\r
-+      0x0005, 0x080c, 0xac85, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001,\r
-+      0x080c, 0x8439, 0x080c, 0x8973, 0x0010, 0x080c, 0x9e32, 0x0005,\r
-+      0x6004, 0x908a, 0x0053, 0x1a0c, 0x0db4, 0x080c, 0x886e, 0x080c,\r
-+      0x9e62, 0x080c, 0x8973, 0x0005, 0x9182, 0x0040, 0x0002, 0xcb2a,\r
-+      0xcb2a, 0xcb2a, 0xcb2a, 0xcb2c, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a,\r
-+      0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a,\r
-+      0xcb2a, 0xcb2a, 0x080c, 0x0db4, 0x0096, 0x00b6, 0x00d6, 0x00e6,\r
-+      0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac, 0x9005, 0x11a8,\r
-+      0x6106, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xcb92,\r
-+      0x080c, 0xd836, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001,\r
-+      0x2011, 0x0200, 0x080c, 0x822f, 0x0020, 0x9026, 0x080c, 0xd76b,\r
-+      0x0c38, 0x080c, 0x0feb, 0x090c, 0x0db4, 0x6003, 0x0007, 0xa867,\r
-+      0x010d, 0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00, 0xa88e, 0x6008,\r
-+      0xa8e2, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a, 0x0016, 0xa876,\r
-+      0xa87f, 0x0000, 0xa883, 0x0000, 0xa887, 0x0036, 0x080c, 0x688c,\r
-+      0x001e, 0x080c, 0xd836, 0x1904, 0xcbf2, 0x9486, 0x2000, 0x1130,\r
-+      0x2019, 0x0017, 0x080c, 0xd4a6, 0x0804, 0xcbf2, 0x9486, 0x0200,\r
-+      0x1120, 0x080c, 0xd442, 0x0804, 0xcbf2, 0x9486, 0x0400, 0x0120,\r
-+      0x9486, 0x1000, 0x1904, 0xcbf2, 0x2019, 0x0002, 0x080c, 0xd45d,\r
-+      0x0804, 0xcbf2, 0x2069, 0x1a41, 0x6a00, 0xd284, 0x0904, 0xcc5c,\r
-+      0x9284, 0x0300, 0x1904, 0xcc55, 0x6804, 0x9005, 0x0904, 0xcc3d,\r
-+      0x2d78, 0x6003, 0x0007, 0x080c, 0x1004, 0x0904, 0xcbfe, 0x7800,\r
-+      0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001,\r
-+      0x180f, 0x2004, 0xd084, 0x1904, 0xcc60, 0x9006, 0xa802, 0xa867,\r
-+      0x0116, 0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a, 0x6010, 0x2058,\r
-+      0xb8a0, 0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba, 0xb92c, 0xa9be,\r
-+      0xb930, 0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d, 0x7044, 0x9084,\r
-+      0x0003, 0x9080, 0xcbfa, 0x2005, 0xa87e, 0x20a9, 0x000a, 0x2001,\r
-+      0x0270, 0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205, 0x200b, 0x0080,\r
-+      0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0, 0x4003, 0x200b,\r
-+      0x0000, 0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000, 0x200c, 0xa9ae,\r
-+      0x080c, 0x688c, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be,\r
-+      0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x1810,\r
-+      0x2004, 0xd084, 0x0120, 0x080c, 0x0feb, 0x1904, 0xcba7, 0x6017,\r
-+      0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x83f1, 0x080c,\r
-+      0x8973, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086,\r
-+      0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c,\r
-+      0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043,\r
-+      0x080c, 0x83f1, 0x080c, 0x8973, 0x0828, 0x6868, 0x602e, 0x686c,\r
-+      0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,\r
-+      0x83f1, 0x080c, 0x8973, 0x0804, 0xcbf2, 0x2001, 0x180e, 0x2004,\r
-+      0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d9, 0x6017, 0xf300,\r
-+      0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,\r
-+      0x83f1, 0x080c, 0x8973, 0x0804, 0xcbf2, 0x6017, 0xf500, 0x0c98,\r
-+      0x6017, 0xf600, 0x0804, 0xcc12, 0x6017, 0xf200, 0x0804, 0xcc12,\r
-+      0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a,\r
-+      0x7044, 0x9084, 0x0003, 0x9080, 0xcbfa, 0x2005, 0xa87e, 0x2928,\r
-+      0x6010, 0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a, 0xb82c, 0xa88e,\r
-+      0xb830, 0xa892, 0xb834, 0xa896, 0xa883, 0x003d, 0x2009, 0x0205,\r
-+      0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210,\r
-+      0x2214, 0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111, 0x1a0c, 0x0db4,\r
-+      0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x0029, 0x20a0, 0x2011, 0xccdc, 0x2041, 0x0001, 0x223d,\r
-+      0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a,\r
-+      0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260,\r
-+      0x2098, 0x0c68, 0x2950, 0x080c, 0x1004, 0x0170, 0x2900, 0xb002,\r
-+      0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080,\r
-+      0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118,\r
-+      0x080c, 0x101d, 0x0cc8, 0x080c, 0x101d, 0x0804, 0xcbfe, 0x2548,\r
-+      0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000,\r
-+      0x080c, 0xd4d5, 0x0804, 0xcbf2, 0x8010, 0x0004, 0x801a, 0x0006,\r
-+      0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160,\r
-+      0x6004, 0x908a, 0x0054, 0x1a0c, 0x0db4, 0x9082, 0x0040, 0x0a0c,\r
-+      0x0db4, 0x2008, 0x0804, 0xcd8d, 0x9186, 0x0051, 0x0108, 0x00c0,\r
-+      0x2001, 0x0109, 0x2004, 0xd084, 0x0904, 0xcd3e, 0x0126, 0x2091,\r
-+      0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x82dd, 0x002e, 0x001e,\r
-+      0x000e, 0x012e, 0x6000, 0x9086, 0x0002, 0x1580, 0x0804, 0xcdd5,\r
-+      0x9186, 0x0027, 0x0530, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014,\r
-+      0x0500, 0x190c, 0x0db4, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0,\r
-+      0x00c6, 0x0126, 0x2091, 0x2800, 0x00c6, 0x2061, 0x0100, 0x0006,\r
-+      0x0016, 0x0026, 0x080c, 0x82dd, 0x002e, 0x001e, 0x000e, 0x00ce,\r
-+      0x012e, 0x00ce, 0x6000, 0x9086, 0x0004, 0x190c, 0x0db4, 0x0804,\r
-+      0xceb6, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0x9ec7,\r
-+      0x0005, 0xcd54, 0xcd56, 0xcd56, 0xcd7d, 0xcd54, 0xcd54, 0xcd54,\r
-+      0xcd54, 0xcd54, 0xcd54, 0xcd54, 0xcd54, 0xcd54, 0xcd54, 0xcd54,\r
-+      0xcd54, 0xcd54, 0xcd54, 0xcd54, 0x080c, 0x0db4, 0x080c, 0x886e,\r
-+      0x080c, 0x8973, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c,\r
-+      0xbb17, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800,\r
-+      0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xd4d5, 0x6017,\r
-+      0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1958, 0x2004, 0x601a,\r
-+      0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x886e,\r
-+      0x080c, 0x8973, 0x080c, 0xbb17, 0x0120, 0x6014, 0x2048, 0x080c,\r
-+      0x101d, 0x080c, 0x9e62, 0x009e, 0x0005, 0x0002, 0xcda1, 0xcdb8,\r
-+      0xcda3, 0xcdcf, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1,\r
-+      0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1,\r
-+      0xcda1, 0x080c, 0x0db4, 0x0096, 0x080c, 0x886e, 0x6014, 0x2048,\r
-+      0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c,\r
-+      0x9eac, 0x0010, 0x6003, 0x0004, 0x080c, 0x8973, 0x009e, 0x0005,\r
-+      0x080c, 0x886e, 0x080c, 0xbb17, 0x0138, 0x6114, 0x0096, 0x2148,\r
-+      0xa97c, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x8204, 0x080c, 0x9e32,\r
-+      0x080c, 0x8973, 0x0005, 0x080c, 0xd72f, 0x0db0, 0x0cc8, 0x080c,\r
-+      0x886e, 0x2009, 0x0041, 0x0804, 0xcf3e, 0x9182, 0x0040, 0x0002,\r
-+      0xcdeb, 0xcded, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb,\r
-+      0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb,\r
-+      0xcdeb, 0xcdee, 0xcdeb, 0x080c, 0x0db4, 0x0005, 0x00d6, 0x080c,\r
-+      0x8204, 0x00de, 0x080c, 0xd787, 0x080c, 0x9e32, 0x0005, 0x9182,\r
-+      0x0040, 0x0002, 0xce0d, 0xce0d, 0xce0d, 0xce0d, 0xce0d, 0xce0d,\r
-+      0xce0d, 0xce0d, 0xce0d, 0xce0f, 0xce7e, 0xce0d, 0xce0d, 0xce0d,\r
-+      0xce0d, 0xce7e, 0xce0d, 0xce0d, 0xce0d, 0x080c, 0x0db4, 0x2001,\r
-+      0x0105, 0x2004, 0x9084, 0x1800, 0x01c8, 0x2001, 0x0132, 0x200c,\r
-+      0x2001, 0x0131, 0x2004, 0x9105, 0x1904, 0xce7e, 0x2009, 0x180c,\r
-+      0x2104, 0xd0d4, 0x0904, 0xce7e, 0xc0d4, 0x200a, 0x2009, 0x0105,\r
-+      0x2104, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x200a, 0x2001, 0x1873,\r
-+      0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000, 0x080c, 0x8923, 0x6014,\r
-+      0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e,\r
-+      0x0002, 0x0508, 0x2001, 0x180c, 0x2004, 0xd0d4, 0x11e0, 0x080c,\r
-+      0x8a4e, 0x2009, 0x0041, 0x009e, 0x0804, 0xcf3e, 0x080c, 0x8a4e,\r
-+      0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x8204, 0x009e, 0x0005,\r
-+      0x2001, 0x0100, 0x2004, 0x9082, 0x0005, 0x0aa8, 0x2001, 0x011f,\r
-+      0x2004, 0x603a, 0x0890, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102,\r
-+      0xd1cc, 0x0110, 0x080c, 0x2a77, 0x080c, 0x8a4e, 0x6014, 0x2048,\r
-+      0xa97c, 0xd1ec, 0x1130, 0x080c, 0x8204, 0x080c, 0x9e32, 0x009e,\r
-+      0x0005, 0x080c, 0xd72f, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c,\r
-+      0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x8923, 0x080c, 0x8a4e,\r
-+      0x6014, 0x0096, 0x2048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,\r
-+      0xd0bc, 0x0188, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x0140,\r
-+      0xa8ac, 0x6330, 0x931a, 0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e,\r
-+      0x6003, 0x0002, 0x0080, 0x2019, 0x0004, 0x080c, 0xd4d5, 0x6018,\r
-+      0x9005, 0x1128, 0x2001, 0x1958, 0x2004, 0x8003, 0x601a, 0x6017,\r
-+      0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040,\r
-+      0x0002, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd,\r
-+      0xcecd, 0xcecf, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd,\r
-+      0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcf1a, 0x080c, 0x0db4, 0x6014,\r
-+      0x0096, 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900,\r
-+      0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128,\r
-+      0x2009, 0x0041, 0x009e, 0x0804, 0xcf3e, 0x6003, 0x0007, 0x601b,\r
-+      0x0000, 0x080c, 0x8204, 0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58,\r
-+      0x0006, 0x0046, 0xacac, 0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030,\r
-+      0x9420, 0x6432, 0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8,\r
-+      0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009,\r
-+      0x180e, 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003,\r
-+      0x0006, 0x00e9, 0x080c, 0x8206, 0x009e, 0x0005, 0x6003, 0x0002,\r
-+      0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x150f, 0x1904,\r
-+      0xcecf, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e,\r
-+      0x9105, 0x1120, 0x080c, 0x150f, 0x1904, 0xcecf, 0x0005, 0xd2fc,\r
-+      0x0140, 0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009, 0x0009,\r
-+      0x0010, 0x2009, 0x0015, 0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040,\r
-+      0x0208, 0x0062, 0x9186, 0x0013, 0x0120, 0x9186, 0x0014, 0x190c,\r
-+      0x0db4, 0x6024, 0xd0dc, 0x090c, 0x0db4, 0x0005, 0xcf61, 0xcf6d,\r
-+      0xcf79, 0xcf85, 0xcf61, 0xcf61, 0xcf61, 0xcf61, 0xcf68, 0xcf63,\r
-+      0xcf63, 0xcf61, 0xcf61, 0xcf61, 0xcf61, 0xcf63, 0xcf61, 0xcf63,\r
-+      0xcf61, 0x080c, 0x0db4, 0x6024, 0xd0dc, 0x090c, 0x0db4, 0x0005,\r
-+      0x6014, 0x9005, 0x190c, 0x0db4, 0x0005, 0x6003, 0x0001, 0x6106,\r
-+      0x080c, 0x83f1, 0x0126, 0x2091, 0x8000, 0x080c, 0x8973, 0x012e,\r
-+      0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x83f1, 0x0126, 0x2091,\r
-+      0x8000, 0x080c, 0x8973, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106,\r
-+      0x2c10, 0x080c, 0x1a5c, 0x0126, 0x2091, 0x8000, 0x080c, 0x8456,\r
-+      0x080c, 0x8a4e, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0036,\r
-+      0x0096, 0x9182, 0x0040, 0x0023, 0x009e, 0x003e, 0x012e, 0x0005,\r
-+      0xcfb0, 0xcfb2, 0xcfc4, 0xcfde, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0,\r
-+      0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0,\r
-+      0x080c, 0x0db4, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x01f8, 0x909c,\r
-+      0x0003, 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c,\r
-+      0x83f1, 0x080c, 0x8973, 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc,\r
-+      0x0168, 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001,\r
-+      0x6106, 0x080c, 0x83f1, 0x080c, 0x8973, 0x00e0, 0x901e, 0x6316,\r
-+      0x631a, 0x2019, 0x0004, 0x080c, 0xd4d5, 0x00a0, 0x6014, 0x2048,\r
-+      0xa87c, 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70,\r
-+      0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1a5c, 0x080c, 0x8456,\r
-+      0x080c, 0x8a4e, 0x0005, 0x080c, 0x886e, 0x6114, 0x81ff, 0x0158,\r
-+      0x0096, 0x2148, 0x080c, 0xd7d3, 0x0036, 0x2019, 0x0029, 0x080c,\r
-+      0xd4d5, 0x003e, 0x009e, 0x080c, 0x9e62, 0x080c, 0x8973, 0x0005,\r
-+      0x080c, 0x8923, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c,\r
-+      0xd7d3, 0x0036, 0x2019, 0x0029, 0x080c, 0xd4d5, 0x003e, 0x009e,\r
-+      0x080c, 0x9e62, 0x080c, 0x8a4e, 0x0005, 0x9182, 0x0085, 0x0002,\r
-+      0xd02f, 0xd02d, 0xd02d, 0xd03b, 0xd02d, 0xd02d, 0xd02d, 0xd02d,\r
-+      0xd02d, 0xd02d, 0xd02d, 0xd02d, 0xd02d, 0x080c, 0x0db4, 0x6003,\r
-+      0x000b, 0x6106, 0x080c, 0x83f1, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x8973, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xd726, 0x0118,\r
-+      0x080c, 0x9e32, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001,\r
-+      0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0,\r
-+      0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0xa152, 0x7220, 0x080c,\r
-+      0xd37b, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224,\r
-+      0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c,\r
-+      0x83f1, 0x080c, 0x8973, 0x080c, 0x8a4e, 0x00ee, 0x002e, 0x0005,\r
-+      0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0db4,\r
-+      0x908a, 0x0092, 0x1a0c, 0x0db4, 0x9082, 0x0085, 0x00a2, 0x9186,\r
-+      0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x9ec7, 0x0050,\r
-+      0x2001, 0x0007, 0x080c, 0x61bb, 0x080c, 0x886e, 0x080c, 0x9e62,\r
-+      0x080c, 0x8973, 0x0005, 0xd0a0, 0xd0a2, 0xd0a2, 0xd0a0, 0xd0a0,\r
-+      0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0,\r
-+      0x080c, 0x0db4, 0x080c, 0x886e, 0x080c, 0x9e62, 0x080c, 0x8973,\r
-+      0x0005, 0x9182, 0x0085, 0x0a0c, 0x0db4, 0x9182, 0x0092, 0x1a0c,\r
-+      0x0db4, 0x9182, 0x0085, 0x0002, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c3,\r
-+      0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1,\r
-+      0xd0c1, 0x080c, 0x0db4, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186,\r
-+      0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x9ec7, 0x0030,\r
-+      0x080c, 0x886e, 0x080c, 0x9e62, 0x080c, 0x8973, 0x0005, 0x0036,\r
-+      0x080c, 0xd787, 0x6043, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023,\r
-+      0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091,\r
-+      0x8000, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0x97ba, 0x009e,\r
-+      0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0x9865, 0x007e, 0x1520,\r
-+      0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0,\r
-+      0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xd787, 0x080c, 0xc22a,\r
-+      0x080c, 0x190d, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xbb17,\r
-+      0x0110, 0x080c, 0xd4d5, 0x009e, 0x6017, 0x0000, 0x080c, 0xd787,\r
-+      0x6023, 0x0007, 0x080c, 0xc22a, 0x003e, 0x012e, 0x0005, 0x00f6,\r
-+      0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c,\r
-+      0x080c, 0x2663, 0x15c8, 0x0016, 0x00c6, 0x080c, 0x623e, 0x1590,\r
-+      0x001e, 0x00c6, 0x2160, 0x080c, 0xc227, 0x00ce, 0x002e, 0x0026,\r
-+      0x0016, 0x2019, 0x0029, 0x080c, 0x9926, 0x080c, 0x8571, 0x0076,\r
-+      0x903e, 0x080c, 0x8469, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c,\r
-+      0xd29b, 0x007e, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217, 0x9286,\r
-+      0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c, 0x3097,\r
-+      0x002e, 0xbcb0, 0x001e, 0x080c, 0x5ceb, 0xbe12, 0xbd16, 0xbcb2,\r
-+      0x9006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce,\r
-+      0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1823,\r
-+      0x2104, 0x9086, 0x0074, 0x1904, 0xd1c3, 0x2069, 0x0260, 0x6944,\r
-+      0x9182, 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xd1c0,\r
-+      0x2001, 0x194d, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb8b0,\r
-+      0x9005, 0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001,\r
-+      0x0648, 0x080c, 0xd83b, 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009,\r
-+      0x0205, 0x200b, 0x0001, 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182,\r
-+      0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001,\r
-+      0x0288, 0x6950, 0x918a, 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100,\r
-+      0x00a0, 0x6017, 0x0300, 0x0088, 0x6017, 0x0500, 0x0070, 0x6017,\r
-+      0x0700, 0x0058, 0x6017, 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028,\r
-+      0x6017, 0x0f00, 0x0010, 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008,\r
-+      0x9006, 0x001e, 0x00be, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6,\r
-+      0x0026, 0x0036, 0x0156, 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff,\r
-+      0x9286, 0x0006, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394, 0xff00,\r
-+      0x8217, 0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120, 0x080c,\r
-+      0x624d, 0x0804, 0xd22a, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096,\r
-+      0x2b48, 0x2019, 0x000a, 0x080c, 0xae0d, 0x009e, 0x15a0, 0x2011,\r
-+      0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c,\r
-+      0xae0d, 0x009e, 0x1540, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006,\r
-+      0x2009, 0x1854, 0x210c, 0x0038, 0x2009, 0x0029, 0x080c, 0xd52a,\r
-+      0xb800, 0xc0e5, 0xb802, 0x2019, 0x0029, 0x080c, 0x8571, 0x0076,\r
-+      0x2039, 0x0000, 0x080c, 0x8469, 0x2c08, 0x080c, 0xd29b, 0x007e,\r
-+      0x2001, 0x0007, 0x080c, 0x61bb, 0x2001, 0x0007, 0x080c, 0x618f,\r
-+      0x001e, 0x004e, 0x9006, 0x015e, 0x003e, 0x002e, 0x00be, 0x00ce,\r
-+      0x0005, 0x00d6, 0x2069, 0x026e, 0x6800, 0x9086, 0x0800, 0x0118,\r
-+      0x6017, 0x0000, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6,\r
-+      0x0016, 0x0026, 0x0036, 0x0156, 0x2079, 0x026c, 0x7930, 0x7834,\r
-+      0x080c, 0x2663, 0x11d0, 0x080c, 0x623e, 0x11b8, 0x2011, 0x0270,\r
-+      0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xae0d,\r
-+      0x009e, 0x1158, 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48,\r
-+      0x2019, 0x0006, 0x080c, 0xae0d, 0x009e, 0x015e, 0x003e, 0x002e,\r
-+      0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026,\r
-+      0x0036, 0x0156, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,\r
-+      0x2663, 0x11d0, 0x080c, 0x623e, 0x11b8, 0x2011, 0x0276, 0x20a9,\r
-+      0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xae0d, 0x009e,\r
-+      0x1158, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,\r
-+      0x0006, 0x080c, 0xae0d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e,\r
-+      0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066,\r
-+      0x0056, 0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029,\r
-+      0x19c1, 0x252c, 0x2021, 0x19c7, 0x2424, 0x2061, 0x1cd0, 0x2071,\r
-+      0x1800, 0x7650, 0x7070, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1a80,\r
-+      0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xd334, 0x0018, 0x9606,\r
-+      0x0904, 0xd334, 0x2100, 0x9c06, 0x0904, 0xd32b, 0x080c, 0xd56b,\r
-+      0x1904, 0xd32b, 0x080c, 0xd858, 0x0904, 0xd32b, 0x080c, 0xd55b,\r
-+      0x0904, 0xd32b, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c, 0x312e,\r
-+      0x0904, 0xd34f, 0x6004, 0x9086, 0x0000, 0x1904, 0xd34f, 0x9786,\r
-+      0x0004, 0x0904, 0xd34f, 0x9786, 0x0007, 0x0904, 0xd32b, 0x2500,\r
-+      0x9c06, 0x0904, 0xd32b, 0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118,\r
-+      0x6054, 0x9906, 0x15c0, 0x0096, 0x6000, 0x9086, 0x0004, 0x1120,\r
-+      0x0016, 0x080c, 0x190d, 0x001e, 0x9786, 0x000a, 0x0148, 0x080c,\r
-+      0xbd1d, 0x1130, 0x080c, 0xa7c0, 0x009e, 0x080c, 0x9e62, 0x0418,\r
-+      0x6014, 0x2048, 0x080c, 0xbb17, 0x01d8, 0x9786, 0x0003, 0x1570,\r
-+      0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048,\r
-+      0x080c, 0x0f9d, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, 0xd7d3,\r
-+      0x0016, 0x080c, 0xbe06, 0x080c, 0x687f, 0x001e, 0x080c, 0xbd00,\r
-+      0x009e, 0x080c, 0x9e62, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004,\r
-+      0x9c02, 0x1210, 0x0804, 0xd2af, 0x012e, 0x002e, 0x004e, 0x005e,\r
-+      0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006,\r
-+      0x1150, 0x9386, 0x0005, 0x0128, 0x080c, 0xd7d3, 0x080c, 0xd4d5,\r
-+      0x08f8, 0x009e, 0x0c00, 0x9786, 0x000a, 0x0920, 0x0808, 0x81ff,\r
-+      0x09d0, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0130, 0x9180,\r
-+      0x0001, 0x2004, 0x9086, 0x002d, 0x1970, 0x6000, 0x9086, 0x0002,\r
-+      0x1950, 0x080c, 0xbd0c, 0x0130, 0x080c, 0xbd1d, 0x1920, 0x080c,\r
-+      0xa7c0, 0x0038, 0x080c, 0x3003, 0x080c, 0xbd1d, 0x1110, 0x080c,\r
-+      0xa7c0, 0x080c, 0x9e62, 0x0804, 0xd32b, 0xa864, 0x9084, 0x00ff,\r
-+      0x9086, 0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170,\r
-+      0x9006, 0x080c, 0xd4fc, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f,\r
-+      0x001b, 0x00ee, 0x00ce, 0x0005, 0xd39a, 0xd39a, 0xd39a, 0xd39a,\r
-+      0xd39a, 0xd39a, 0xd39c, 0xd39a, 0xd39a, 0xd39a, 0xd39a, 0x9e62,\r
-+      0x9e62, 0xd39a, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010,\r
-+      0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c,\r
-+      0xd52a, 0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xd0e5, 0x003e,\r
-+      0x9085, 0x0001, 0x0005, 0x0096, 0x080c, 0xbb17, 0x0140, 0x6014,\r
-+      0x904d, 0x080c, 0xb74a, 0x687b, 0x0005, 0x080c, 0x688c, 0x009e,\r
-+      0x080c, 0x9e62, 0x9085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c,\r
-+      0x617b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,\r
-+      0x1805, 0x2011, 0x0276, 0x080c, 0xadf9, 0x003e, 0x002e, 0x001e,\r
-+      0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076,\r
-+      0x0066, 0x00b6, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0x1cd0,\r
-+      0x2079, 0x0001, 0x8fff, 0x0904, 0xd435, 0x2071, 0x1800, 0x7650,\r
-+      0x7070, 0x8001, 0x9602, 0x1a04, 0xd435, 0x88ff, 0x0120, 0x2800,\r
-+      0x9c06, 0x1590, 0x2078, 0x080c, 0xd55b, 0x0570, 0x2400, 0x9c06,\r
-+      0x0558, 0x6720, 0x9786, 0x0006, 0x1538, 0x9786, 0x0007, 0x0520,\r
-+      0x88ff, 0x1140, 0x6010, 0x9b06, 0x11f8, 0x85ff, 0x0118, 0x6054,\r
-+      0x9106, 0x11d0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xd787,\r
-+      0x080c, 0xc22a, 0x080c, 0x190d, 0x6023, 0x0007, 0x6014, 0x2048,\r
-+      0x080c, 0xbb17, 0x0120, 0x0046, 0x080c, 0xd4d5, 0x004e, 0x009e,\r
-+      0x080c, 0x9e62, 0x88ff, 0x1198, 0x9ce0, 0x0018, 0x2001, 0x1819,\r
-+      0x2004, 0x9c02, 0x1210, 0x0804, 0xd3ea, 0x9006, 0x012e, 0x00be,\r
-+      0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5,\r
-+      0x0001, 0x0ca0, 0x00b6, 0x0076, 0x0056, 0x0086, 0x9046, 0x2029,\r
-+      0x0001, 0x2c20, 0x2019, 0x0002, 0x6210, 0x2258, 0x0096, 0x904e,\r
-+      0x080c, 0x97ba, 0x009e, 0x008e, 0x903e, 0x080c, 0x9865, 0x080c,\r
-+      0xd3db, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6, 0x0046, 0x0056,\r
-+      0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e,\r
-+      0x0016, 0x0036, 0x080c, 0x623e, 0x1190, 0x0056, 0x0086, 0x9046,\r
-+      0x2508, 0x2029, 0x0001, 0x0096, 0x904e, 0x080c, 0x97ba, 0x009e,\r
-+      0x008e, 0x903e, 0x080c, 0x9865, 0x080c, 0xd3db, 0x005e, 0x003e,\r
-+      0x001e, 0x8108, 0x1f04, 0xd468, 0x015e, 0x00ce, 0x007e, 0x005e,\r
-+      0x004e, 0x00be, 0x0005, 0x00b6, 0x0076, 0x0056, 0x6210, 0x2258,\r
-+      0x0086, 0x9046, 0x2029, 0x0001, 0x2019, 0x0048, 0x0096, 0x904e,\r
-+      0x080c, 0x97ba, 0x009e, 0x008e, 0x903e, 0x080c, 0x9865, 0x2c20,\r
-+      0x080c, 0xd3db, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6, 0x0046,\r
-+      0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x0800, 0x900e,\r
-+      0x0016, 0x0036, 0x080c, 0x623e, 0x11a0, 0x0086, 0x9046, 0x2828,\r
-+      0x0046, 0x2021, 0x0001, 0x080c, 0xd76b, 0x004e, 0x0096, 0x904e,\r
-+      0x080c, 0x97ba, 0x009e, 0x008e, 0x903e, 0x080c, 0x9865, 0x080c,\r
-+      0xd3db, 0x003e, 0x001e, 0x8108, 0x1f04, 0xd4b0, 0x015e, 0x00ce,\r
-+      0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x0016, 0x00f6, 0x080c,\r
-+      0xbb15, 0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180,\r
-+      0xa800, 0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c, 0x688c,\r
-+      0x2f48, 0x0cb0, 0xab82, 0x080c, 0x688c, 0x00fe, 0x001e, 0x0005,\r
-+      0xa800, 0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x688c, 0x2f48,\r
-+      0x0cb8, 0x080c, 0x688c, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061,\r
-+      0x1cd0, 0x9005, 0x1138, 0x2071, 0x1800, 0x7450, 0x7070, 0x8001,\r
-+      0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000,\r
-+      0x0148, 0x6008, 0x9206, 0x1130, 0x6010, 0x91a0, 0x0004, 0x2424,\r
-+      0x9406, 0x0140, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02,\r
-+      0x1220, 0x0c40, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e,\r
-+      0x00ee, 0x0005, 0x0096, 0x0006, 0x080c, 0x0feb, 0x000e, 0x090c,\r
-+      0x0db4, 0xaae2, 0xa867, 0x010d, 0xa88e, 0x0026, 0x2010, 0x080c,\r
-+      0xbb05, 0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0015, 0x2004,\r
-+      0x002e, 0xa87a, 0x9186, 0x0020, 0x0110, 0xa8e3, 0xffff, 0xa986,\r
-+      0xac76, 0xa87f, 0x0000, 0x2001, 0x195f, 0x2004, 0xa882, 0x9006,\r
-+      0xa802, 0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, 0x688c,\r
-+      0x012e, 0x009e, 0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786,\r
-+      0x0001, 0x0140, 0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110,\r
-+      0x9085, 0x0001, 0x0005, 0x00e6, 0x6010, 0x9075, 0x0138, 0x00b6,\r
-+      0x2058, 0xb8a0, 0x00be, 0x9206, 0x00ee, 0x0005, 0x9085, 0x0001,\r
-+      0x0cd8, 0x0016, 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007, 0x6134,\r
-+      0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b,\r
-+      0x6023, 0x0005, 0x2001, 0x1958, 0x2004, 0x601a, 0x080c, 0x83f1,\r
-+      0x080c, 0x8973, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024,\r
-+      0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0xbe4a, 0x0030, 0x080c,\r
-+      0xd787, 0x080c, 0x8204, 0x080c, 0x9e32, 0x0005, 0x9280, 0x0008,\r
-+      0x2004, 0x9084, 0x000f, 0x0002, 0xd5ba, 0xd5ba, 0xd5ba, 0xd5bc,\r
-+      0xd5ba, 0xd5bc, 0xd5bc, 0xd5ba, 0xd5bc, 0xd5ba, 0xd5ba, 0xd5ba,\r
-+      0xd5ba, 0xd5ba, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280,\r
-+      0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xd5d3, 0xd5d3, 0xd5d3,\r
-+      0xd5d3, 0xd5d3, 0xd5d3, 0xd5e0, 0xd5d3, 0xd5d3, 0xd5d3, 0xd5d3,\r
-+      0xd5d3, 0xd5d3, 0xd5d3, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017,\r
-+      0x2a00, 0x6003, 0x0001, 0x080c, 0x83f1, 0x080c, 0x8973, 0x0005,\r
-+      0x0096, 0x00c6, 0x2260, 0x080c, 0xd787, 0x6043, 0x0000, 0x6024,\r
-+      0xc0f4, 0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268,\r
-+      0x9186, 0x0007, 0x1904, 0xd639, 0x6814, 0x9005, 0x0138, 0x2048,\r
-+      0xa87c, 0xd0fc, 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a,\r
-+      0x6003, 0x0001, 0x080c, 0x83f1, 0x080c, 0x8973, 0x00c6, 0x2d60,\r
-+      0x6100, 0x9186, 0x0002, 0x1904, 0xd6b0, 0x6014, 0x9005, 0x1138,\r
-+      0x6000, 0x9086, 0x0007, 0x190c, 0x0db4, 0x0804, 0xd6b0, 0x2048,\r
-+      0x080c, 0xbb17, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0,\r
-+      0x2900, 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x1168,\r
-+      0xa87c, 0xc0dc, 0xc0f4, 0xa87e, 0xa880, 0xc0fc, 0xa882, 0x2009,\r
-+      0x0043, 0x080c, 0xcf3e, 0x0804, 0xd6b0, 0x2009, 0x0041, 0x0804,\r
-+      0xd6aa, 0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c, 0xd0bc,\r
-+      0x1120, 0x00de, 0x009e, 0x0804, 0xd5d3, 0xd0b4, 0x0128, 0xd0fc,\r
-+      0x090c, 0x0db4, 0x0804, 0xd5f4, 0x6007, 0x003a, 0x6003, 0x0001,\r
-+      0x080c, 0x83f1, 0x080c, 0x8973, 0x00c6, 0x2d60, 0x6100, 0x9186,\r
-+      0x0002, 0x0120, 0x9186, 0x0004, 0x1904, 0xd6b0, 0x6814, 0x2048,\r
-+      0xa97c, 0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1fc, 0xc1bc, 0xa982,\r
-+      0x00f6, 0x2c78, 0x080c, 0x1648, 0x00fe, 0x2009, 0x0042, 0x04d0,\r
-+      0x0036, 0x080c, 0x0feb, 0x090c, 0x0db4, 0xa867, 0x010d, 0x9006,\r
-+      0xa802, 0xa86a, 0xa88a, 0x2d18, 0xab8e, 0xa887, 0x0045, 0x2c00,\r
-+      0xa892, 0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010,\r
-+      0x00b6, 0x2058, 0xb8a0, 0x00be, 0x2004, 0x6354, 0xab7a, 0xa876,\r
-+      0x9006, 0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001, 0x080c,\r
-+      0x688c, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xd0e5, 0x2d00,\r
-+      0x600a, 0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a, 0x6342,\r
-+      0x003e, 0x0038, 0x6043, 0x0000, 0x6003, 0x0007, 0x080c, 0xcf3e,\r
-+      0x00ce, 0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,\r
-+      0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c,\r
-+      0x886e, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c,\r
-+      0xd4d5, 0x009e, 0x003e, 0x080c, 0x8973, 0x0005, 0x9186, 0x0014,\r
-+      0x0d70, 0x080c, 0x9ec7, 0x0005, 0xd6e3, 0xd6e1, 0xd6e1, 0xd6e1,\r
-+      0xd6e1, 0xd6e1, 0xd6e3, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1,\r
-+      0xd6e1, 0x080c, 0x0db4, 0x080c, 0x886e, 0x6003, 0x000c, 0x080c,\r
-+      0x8973, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208,\r
-+      0x001a, 0x080c, 0x9ec7, 0x0005, 0xd701, 0xd701, 0xd701, 0xd701,\r
-+      0xd703, 0xd723, 0xd701, 0xd701, 0xd701, 0xd701, 0xd701, 0xd701,\r
-+      0xd701, 0x080c, 0x0db4, 0x00d6, 0x2c68, 0x080c, 0x9ddc, 0x01b0,\r
-+      0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0x026e, 0x210c, 0x613a,\r
-+      0x2009, 0x026f, 0x210c, 0x613e, 0x600b, 0xffff, 0x6910, 0x6112,\r
-+      0x6023, 0x0004, 0x080c, 0x83f1, 0x080c, 0x8973, 0x2d60, 0x080c,\r
-+      0x9e32, 0x00de, 0x0005, 0x080c, 0x9e32, 0x0005, 0x00e6, 0x6010,\r
-+      0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009,\r
-+      0x1873, 0x210c, 0xd1ec, 0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5,\r
-+      0x6026, 0xd0cc, 0x0150, 0x2001, 0x1959, 0x2004, 0x6042, 0x2009,\r
-+      0x1873, 0x210c, 0xd1f4, 0x1520, 0x00a0, 0x2009, 0x1873, 0x210c,\r
-+      0xd1f4, 0x0128, 0x6024, 0xc0e4, 0x6026, 0x9006, 0x00d8, 0x2001,\r
-+      0x1959, 0x200c, 0x2001, 0x1957, 0x2004, 0x9100, 0x9080, 0x000a,\r
-+      0x6042, 0x6010, 0x00b6, 0x2058, 0xb8ac, 0x00be, 0x0008, 0x2104,\r
-+      0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000,\r
-+      0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, 0x6154, 0xb8ac,\r
-+      0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118, 0x6054, 0x9106, 0x1138,\r
-+      0x600c, 0x2072, 0x080c, 0x8204, 0x080c, 0x9e32, 0x0010, 0x9cf0,\r
-+      0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6,\r
-+      0x00b6, 0x6010, 0x2058, 0xb8ac, 0x2068, 0x9005, 0x0130, 0x9c06,\r
-+      0x0110, 0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be, 0x00de, 0x0005,\r
-+      0x0026, 0x0036, 0x0156, 0x2011, 0x182b, 0x2204, 0x9084, 0x00ff,\r
-+      0x2019, 0x026e, 0x2334, 0x9636, 0x1508, 0x8318, 0x2334, 0x2204,\r
-+      0x9084, 0xff00, 0x9636, 0x11d0, 0x2011, 0x0270, 0x20a9, 0x0004,\r
-+      0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xae0d, 0x009e,\r
-+      0x1168, 0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048,\r
-+      0x2019, 0x0006, 0x080c, 0xae0d, 0x009e, 0x1100, 0x015e, 0x003e,\r
-+      0x002e, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c64, 0x080c,\r
-+      0x2dbb, 0x00ee, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800,\r
-+      0x00be, 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5,\r
-+      0xa882, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056,\r
-+      0x0046, 0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0x19c1,\r
-+      0x252c, 0x2021, 0x19c7, 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800,\r
-+      0x7650, 0x7070, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118,\r
-+      0x9786, 0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06,\r
-+      0x01d0, 0x080c, 0xd55b, 0x01b8, 0x080c, 0xd56b, 0x11a0, 0x6000,\r
-+      0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x190d, 0x001e, 0x080c,\r
-+      0xbd0c, 0x1110, 0x080c, 0x3003, 0x080c, 0xbd1d, 0x1110, 0x080c,\r
-+      0xa7c0, 0x080c, 0x9e62, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004,\r
-+      0x9c02, 0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e,\r
-+      0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810,\r
-+      0x2004, 0xd0dc, 0x0005, 0x0006, 0x2001, 0x1836, 0x2004, 0xd09c,\r
-+      0x000e, 0x0005, 0x0006, 0x0036, 0x0046, 0x080c, 0xc212, 0x0168,\r
-+      0x2019, 0xffff, 0x9005, 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0,\r
-+      0x00be, 0x2021, 0x0004, 0x080c, 0x4a76, 0x004e, 0x003e, 0x000e,\r
-+      0x6004, 0x9086, 0x0001, 0x1128, 0x080c, 0x9926, 0x080c, 0x9e62,\r
-+      0x9006, 0x0005, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cd0,\r
-+      0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12b8, 0x2100,\r
-+      0x9c06, 0x0148, 0x6000, 0x9086, 0x0000, 0x0128, 0x6010, 0x2058,\r
-+      0xb8a0, 0x9206, 0x0140, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004,\r
-+      0x9c02, 0x1220, 0x0c60, 0x9085, 0x0001, 0x0008, 0x9006, 0x004e,\r
-+      0x00be, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016,\r
-+      0x2091, 0x8000, 0x2071, 0x1840, 0xd5a4, 0x0118, 0x7034, 0x8000,\r
-+      0x7036, 0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178,\r
-+      0x2500, 0x9084, 0x0007, 0x908e, 0x0003, 0x0148, 0x908e, 0x0004,\r
-+      0x0130, 0x908e, 0x0005, 0x0118, 0x2071, 0x184a, 0x0089, 0x001e,\r
-+      0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091,\r
-+      0x8000, 0x2071, 0x1842, 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005,\r
-+      0x2e04, 0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04, 0x8000, 0x2072,\r
-+      0x0005, 0x00e6, 0x2071, 0x1840, 0x0c99, 0x00ee, 0x0005, 0x00e6,\r
-+      0x2071, 0x1844, 0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6,\r
-+      0x2091, 0x8000, 0x2071, 0x1840, 0x7044, 0x8000, 0x7046, 0x00ee,\r
-+      0x000e, 0x012e, 0x0005, 0x0003, 0x000b, 0x04a6, 0x0000, 0xc000,\r
-+      0x0001, 0x8064, 0x0008, 0x0010, 0x0000, 0x8066, 0x0000, 0x0101,\r
-+      0x0008, 0x4407, 0x0003, 0x8060, 0x0000, 0x0400, 0x0000, 0x580d,\r
-+      0x000b, 0x798e, 0x0003, 0x50db, 0x000b, 0x4c0a, 0x0003, 0xbac0,\r
-+      0x0009, 0x008a, 0x0000, 0x0c0a, 0x000b, 0x15fe, 0x0008, 0x340a,\r
-+      0x0003, 0xc4c0, 0x0009, 0x7000, 0x0000, 0xffa0, 0x0001, 0x2000,\r
-+      0x0000, 0x1627, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x0000,\r
-+      0x0007, 0x4047, 0x000a, 0x808c, 0x0008, 0x0002, 0x0000, 0x0821,\r
-+      0x0003, 0x4022, 0x0000, 0x0022, 0x000b, 0x4122, 0x0008, 0x4447,\r
-+      0x0002, 0x0e4f, 0x000b, 0x0bfe, 0x0008, 0x11a0, 0x0001, 0x122d,\r
-+      0x000b, 0x0ca0, 0x0001, 0x122d, 0x000b, 0x9180, 0x0001, 0x0004,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066,\r
-+      0x0000, 0x0009, 0x0008, 0x4430, 0x000b, 0x808c, 0x0008, 0x0000,\r
-+      0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x0004, 0x0000, 0x8066,\r
-+      0x0000, 0x0411, 0x0000, 0x4438, 0x0003, 0x03fe, 0x0000, 0x43e0,\r
-+      0x0001, 0x0e2a, 0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008, 0x02e0,\r
-+      0x0001, 0x0e2a, 0x000b, 0x9180, 0x0001, 0x0005, 0x0008, 0x8060,\r
-+      0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0019,\r
-+      0x0000, 0x4447, 0x000b, 0x0240, 0x0002, 0x0a27, 0x000b, 0x00fe,\r
-+      0x0000, 0x322a, 0x000b, 0x112a, 0x0000, 0x002e, 0x0008, 0x022c,\r
-+      0x0008, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x808c, 0x0008, 0x0002,\r
-+      0x0000, 0x1760, 0x0008, 0x8062, 0x0008, 0x000f, 0x0008, 0x8066,\r
-+      0x0000, 0x0011, 0x0008, 0x4458, 0x0003, 0x01fe, 0x0008, 0x42e0,\r
-+      0x0009, 0x0e1d, 0x0003, 0x00fe, 0x0000, 0x43e0, 0x0001, 0x0e1d,\r
-+      0x0003, 0x1734, 0x0000, 0x1530, 0x0000, 0x1632, 0x0008, 0x0d2a,\r
-+      0x0008, 0x9880, 0x0001, 0x0010, 0x0000, 0x8060, 0x0000, 0x0400,\r
-+      0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x1e0a, 0x0008, 0x446a,\r
-+      0x000b, 0x808a, 0x0008, 0x0003, 0x0008, 0x1a60, 0x0000, 0x8062,\r
-+      0x0008, 0x0002, 0x0000, 0x5870, 0x000b, 0x8066, 0x0000, 0x3679,\r
-+      0x0000, 0x4473, 0x0003, 0x5874, 0x0003, 0x3efe, 0x0008, 0x7f4f,\r
-+      0x0002, 0x087a, 0x000b, 0x0d00, 0x0000, 0x0082, 0x0004, 0x8054,\r
-+      0x0008, 0x0011, 0x0008, 0x8074, 0x0000, 0x1010, 0x0008, 0x1efe,\r
-+      0x0000, 0x300a, 0x000b, 0x00b8, 0x0004, 0x000a, 0x000b, 0x00fe,\r
-+      0x0000, 0x348a, 0x000b, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0007,\r
-+      0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x4489, 0x0003, 0x03fe,\r
-+      0x0000, 0x04d0, 0x0001, 0x0cb0, 0x0003, 0x82c0, 0x0001, 0x1f00,\r
-+      0x0000, 0xffa0, 0x0001, 0x0400, 0x0000, 0x089f, 0x0003, 0x14b0,\r
-+      0x0003, 0x01fe, 0x0008, 0x0580, 0x0009, 0x7f06, 0x0000, 0x02fe,\r
-+      0x0008, 0xffc0, 0x0001, 0x00ff, 0x0008, 0x0690, 0x0001, 0x109f,\r
-+      0x0003, 0x7f08, 0x0008, 0x84c0, 0x0001, 0xff00, 0x0008, 0x08b0,\r
-+      0x000b, 0x00fe, 0x0000, 0x34a6, 0x0003, 0x8072, 0x0000, 0x1010,\r
-+      0x0008, 0x3944, 0x0002, 0x08a1, 0x000b, 0x00aa, 0x000b, 0x8072,\r
-+      0x0000, 0x2020, 0x0008, 0x3945, 0x000a, 0x08a6, 0x0003, 0x3946,\r
-+      0x000a, 0x0cb7, 0x000b, 0x0000, 0x0007, 0x3943, 0x000a, 0x08b7,\r
-+      0x0003, 0x00aa, 0x000b, 0x00fe, 0x0000, 0x34b5, 0x000b, 0x8072,\r
-+      0x0000, 0x1000, 0x0000, 0x00b7, 0x000b, 0x8072, 0x0000, 0x2000,\r
-+      0x0000, 0x4000, 0x000f, 0x1c60, 0x0000, 0x1b62, 0x0000, 0x8066,\r
-+      0x0000, 0x0231, 0x0008, 0x44bc, 0x0003, 0x58bd, 0x0003, 0x0140,\r
-+      0x0008, 0x0242, 0x0000, 0x1f43, 0x0002, 0x0ccb, 0x0003, 0x0d44,\r
-+      0x0000, 0x0d46, 0x0008, 0x0348, 0x0008, 0x044a, 0x0008, 0x030a,\r
-+      0x0008, 0x040c, 0x0000, 0x0d06, 0x0000, 0x0d08, 0x0008, 0x00cf,\r
-+      0x000b, 0x0344, 0x0008, 0x0446, 0x0008, 0x0548, 0x0008, 0x064a,\r
-+      0x0000, 0x58cf, 0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002, 0x08d6,\r
-+      0x000b, 0x8000, 0x0000, 0x0001, 0x0000, 0x0082, 0x0004, 0x8054,\r
-+      0x0008, 0x0001, 0x0000, 0x8074, 0x0000, 0x2020, 0x0008, 0x4000,\r
-+      0x000f, 0x3a40, 0x000a, 0x0c0d, 0x0003, 0x2b24, 0x0008, 0x2b24,\r
-+      0x0008, 0x58df, 0x000b, 0x8054, 0x0008, 0x0002, 0x0000, 0x1242,\r
-+      0x0002, 0x092d, 0x000b, 0x3a45, 0x000a, 0x091c, 0x0003, 0x8072,\r
-+      0x0000, 0x1000, 0x0000, 0x3945, 0x000a, 0x08ec, 0x000b, 0x8072,\r
-+      0x0000, 0x3010, 0x0000, 0x1e10, 0x000a, 0x7f3c, 0x0000, 0x0917,\r
-+      0x000b, 0x1d00, 0x0002, 0x7f3a, 0x0000, 0x0d60, 0x0000, 0x7f62,\r
-+      0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x44f5, 0x000b, 0x00fe,\r
-+      0x0000, 0x3514, 0x000b, 0x1c60, 0x0000, 0x8062, 0x0008, 0x0001,\r
-+      0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x44fd, 0x0003, 0x00fe,\r
-+      0x0000, 0x3204, 0x000b, 0x0038, 0x0000, 0x0060, 0x0008, 0x8062,\r
-+      0x0008, 0x0019, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x4506,\r
-+      0x0003, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f3e, 0x0008, 0x0d60,\r
-+      0x0000, 0x0efe, 0x0008, 0x1f80, 0x0001, 0x7f62, 0x0008, 0x8066,\r
-+      0x0000, 0x0009, 0x0008, 0x4510, 0x000b, 0x003a, 0x0008, 0x1dfe,\r
-+      0x0000, 0x00f1, 0x0003, 0x0036, 0x0008, 0x00b8, 0x0004, 0x012d,\r
-+      0x0003, 0x8074, 0x0000, 0x2000, 0x0000, 0x8072, 0x0000, 0x2000,\r
-+      0x0000, 0x012d, 0x0003, 0x3a44, 0x0002, 0x0a30, 0x000b, 0x8074,\r
-+      0x0000, 0x1000, 0x0000, 0x8072, 0x0000, 0x1000, 0x0000, 0x2d0e,\r
-+      0x0000, 0x2d0e, 0x0000, 0x3601, 0x0003, 0x26fe, 0x0008, 0x26fe,\r
-+      0x0008, 0x2700, 0x0008, 0x2700, 0x0008, 0x00d0, 0x0009, 0x0d3f,\r
-+      0x0003, 0x8074, 0x0000, 0x4040, 0x0008, 0x592d, 0x000b, 0x50db,\r
-+      0x000b, 0x3a46, 0x000a, 0x0d3f, 0x0003, 0x3a47, 0x0002, 0x093a,\r
-+      0x000b, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0x8000,\r
-+      0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x0182, 0x0003, 0x92c0,\r
-+      0x0009, 0x0fc8, 0x0000, 0x080a, 0x0003, 0x1246, 0x000a, 0x0dfb,\r
-+      0x000b, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000, 0x8066,\r
-+      0x0000, 0x362a, 0x0000, 0x4544, 0x0003, 0x2000, 0x0000, 0x2000,\r
-+      0x0000, 0x2102, 0x0000, 0x2102, 0x0000, 0x2204, 0x0000, 0x2204,\r
-+      0x0000, 0x2306, 0x0000, 0x2306, 0x0000, 0x2408, 0x0000, 0x2408,\r
-+      0x0000, 0x250a, 0x0000, 0x250a, 0x0000, 0x260c, 0x0000, 0x260c,\r
-+      0x0000, 0x270e, 0x0000, 0x270e, 0x0000, 0x2810, 0x0000, 0x2810,\r
-+      0x0000, 0x2912, 0x0000, 0x2912, 0x0000, 0x1a60, 0x0000, 0x8062,\r
-+      0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0052, 0x0000, 0x455e,\r
-+      0x000b, 0x92c0, 0x0009, 0x0780, 0x0008, 0x0e17, 0x0003, 0x124b,\r
-+      0x0002, 0x0967, 0x0003, 0x2e4d, 0x0002, 0x2e4d, 0x0002, 0x0a01,\r
-+      0x0003, 0x3a46, 0x000a, 0x0d74, 0x0003, 0x5969, 0x000b, 0x8054,\r
-+      0x0008, 0x0004, 0x0000, 0x1243, 0x000a, 0x097e, 0x000b, 0x8010,\r
-+      0x0008, 0x000d, 0x0000, 0x01ef, 0x0004, 0x1810, 0x0000, 0x01ef,\r
-+      0x0004, 0x017e, 0x0003, 0x194d, 0x000a, 0x0978, 0x000b, 0x1243,\r
-+      0x000a, 0x0a0b, 0x0003, 0x5978, 0x000b, 0x8054, 0x0008, 0x0004,\r
-+      0x0000, 0x01e4, 0x000c, 0x1810, 0x0000, 0x01ef, 0x0004, 0x8074,\r
-+      0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0x3000, 0x0008, 0x0d30,\r
-+      0x0000, 0x3a42, 0x0002, 0x0d88, 0x0003, 0x15fe, 0x0008, 0x3451,\r
-+      0x000b, 0x000a, 0x000b, 0x8074, 0x0000, 0x0501, 0x0000, 0x8010,\r
-+      0x0008, 0x000c, 0x0008, 0x01ef, 0x0004, 0x000a, 0x000b, 0xbbe0,\r
-+      0x0009, 0x0030, 0x0008, 0x0d9e, 0x000b, 0x18fe, 0x0000, 0x3ce0,\r
-+      0x0009, 0x099b, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x099b,\r
-+      0x0003, 0x01df, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x01dc,\r
-+      0x000b, 0x8076, 0x0008, 0x0041, 0x0008, 0x01dc, 0x000b, 0xbbe0,\r
-+      0x0009, 0x0032, 0x0000, 0x0da3, 0x0003, 0x3c1e, 0x0008, 0x01dc,\r
-+      0x000b, 0xbbe0, 0x0009, 0x0037, 0x0000, 0x0dc1, 0x000b, 0x18fe,\r
-+      0x0000, 0x3ce0, 0x0009, 0x0d9b, 0x000b, 0x8076, 0x0008, 0x0040,\r
-+      0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x000d, 0x0000, 0x2604,\r
-+      0x0008, 0x2604, 0x0008, 0x2706, 0x0008, 0x2706, 0x0008, 0x2808,\r
-+      0x0000, 0x2808, 0x0000, 0x290a, 0x0000, 0x290a, 0x0000, 0x8066,\r
-+      0x0000, 0x0422, 0x0000, 0x45b8, 0x0003, 0x01e4, 0x000c, 0x8054,\r
-+      0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072,\r
-+      0x0000, 0xb000, 0x0000, 0x0182, 0x0003, 0xbbe0, 0x0009, 0x0038,\r
-+      0x0000, 0x0dd3, 0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x09d0,\r
-+      0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0d97, 0x000b, 0x01df,\r
-+      0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x8072, 0x0000, 0x8000,\r
-+      0x0000, 0x0227, 0x0003, 0x8076, 0x0008, 0x0042, 0x0008, 0x01dc,\r
-+      0x000b, 0xbbe0, 0x0009, 0x0016, 0x0000, 0x0ddc, 0x000b, 0x3a44,\r
-+      0x0002, 0x0c0c, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000, 0x8000,\r
-+      0x000f, 0x000a, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000, 0x000a,\r
-+      0x000b, 0x3d30, 0x000a, 0x7f00, 0x0000, 0xbc80, 0x0001, 0x0007,\r
-+      0x0000, 0x01e8, 0x0003, 0x1930, 0x000a, 0x7f00, 0x0000, 0x9880,\r
-+      0x0001, 0x0007, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62,\r
-+      0x0008, 0x8066, 0x0000, 0x000a, 0x0008, 0x45ed, 0x0003, 0x4000,\r
-+      0x000f, 0x21ef, 0x0003, 0x0870, 0x0008, 0x4000, 0x000f, 0xbac0,\r
-+      0x0009, 0x0090, 0x0008, 0x09f8, 0x0003, 0x8074, 0x0000, 0x0706,\r
-+      0x0000, 0x01fa, 0x0003, 0x8074, 0x0000, 0x0703, 0x0000, 0x4000,\r
-+      0x000f, 0x8010, 0x0008, 0x0023, 0x0000, 0x0235, 0x0003, 0x8010,\r
-+      0x0008, 0x0008, 0x0000, 0x0235, 0x0003, 0x8010, 0x0008, 0x0022,\r
-+      0x0008, 0x0235, 0x0003, 0x01e4, 0x000c, 0x8010, 0x0008, 0x0007,\r
-+      0x0000, 0x01ef, 0x0004, 0x1810, 0x0000, 0x01ef, 0x0004, 0x0241,\r
-+      0x0003, 0x01e4, 0x000c, 0x8010, 0x0008, 0x001b, 0x0008, 0x01ef,\r
-+      0x0004, 0x1810, 0x0000, 0x01ef, 0x0004, 0x8074, 0x0000, 0xf080,\r
-+      0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x000a,\r
-+      0x000b, 0x8010, 0x0008, 0x0009, 0x0008, 0x0235, 0x0003, 0x8010,\r
-+      0x0008, 0x0005, 0x0008, 0x0235, 0x0003, 0x808c, 0x0008, 0x0001,\r
-+      0x0000, 0x8010, 0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x085f,\r
-+      0x0003, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x0235,\r
-+      0x0003, 0x8010, 0x0008, 0x0003, 0x0008, 0x0239, 0x0003, 0x8010,\r
-+      0x0008, 0x000b, 0x0000, 0x0239, 0x0003, 0x8010, 0x0008, 0x0002,\r
-+      0x0000, 0x0239, 0x0003, 0x3a47, 0x0002, 0x0d2d, 0x0003, 0x8010,\r
-+      0x0008, 0x0006, 0x0008, 0x0239, 0x0003, 0x8074, 0x0000, 0xf000,\r
-+      0x0008, 0x8072, 0x0000, 0x3000, 0x0008, 0x01ef, 0x0004, 0x01f2,\r
-+      0x0004, 0x3a40, 0x000a, 0x080a, 0x0003, 0x8010, 0x0008, 0x000c,\r
-+      0x0008, 0x01ef, 0x0004, 0x000a, 0x000b, 0x8074, 0x0000, 0xf080,\r
-+      0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d,\r
-+      0x0002, 0x2e4d, 0x0002, 0x0a4c, 0x0003, 0x8054, 0x0008, 0x0019,\r
-+      0x0000, 0x000a, 0x000b, 0x8054, 0x0008, 0x0009, 0x0008, 0x000a,\r
-+      0x000b, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x022a, 0x000b, 0x15b6,\r
-+      0xf4ac, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040,\r
-+      0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000,\r
-+      0x8000, 0x89e3\r
-+};\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2300flx_length01 = 0xd59a;\r
-+#else\r
-+unsigned short risc_code_length01 = 0xd59a;\r
-+#endif\r
-+\r
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2300ipx_fw.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2300ipx_fw.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2300ipx_fw.h       1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2300ipx_fw.h    2004-04-22 19:42:21.000000000 -0700
-@@ -0,0 +1,7548 @@
-+/******************************************************************************\r
-+ *                  QLOGIC LINUX SOFTWARE\r
-+ *\r
-+ * QLogic ISP2x00 device driver for Linux 2.4.x\r
-+ * Copyright (C) 2003 QLogic Corporation\r
-+ * (www.qlogic.com)\r
-+ *\r
-+ * This program is free software; you can redistribute it and/or modify it\r
-+ * under the terms of the GNU General Public License as published by the\r
-+ * Free Software Foundation; either version 2, or (at your option) any\r
-+ * later version.\r
-+ *\r
-+ * This program is distributed in the hope that it will be useful, but\r
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of\r
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
-+ * General Public License for more details.\r
-+ *\r
-+ ******************************************************************************/\r
-+\r
-+/************************************************************************\r
-+ *                                                                    *\r
-+ *          --- ISP2300 Initiator/Target Firmware ---                 *\r
-+ *            with support for Internet Protocol                      *\r
-+ *            and 2K port logins.                                     *\r
-+ *                                                                    *\r
-+ ************************************************************************\r
-+ */\r
-+/*\r
-+ *    Firmware Version 3.02.28 (13:56 Apr 03, 2004)\r
-+ */\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2300ipx_version = 3*1024+2;\r
-+#else\r
-+unsigned short risc_code_version = 3*1024+2;\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned char fw2300ipx_version_str[] = {3, 2,28};\r
-+#else\r
-+unsigned char firmware_version[] = {3, 2,28};\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+#define fw2300ipx_VERSION_STRING "3.02.28"\r
-+#else\r
-+#define FW_VERSION_STRING "3.02.28"\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2300ipx_addr01 = 0x0800 ;\r
-+#else\r
-+unsigned short risc_code_addr01 = 0x0800 ;\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2300ipx_code01[] = { \r
-+#else\r
-+unsigned short risc_code01[] = { \r
-+#endif\r
-+      0x0470, 0x0000, 0x0000, 0xe9c7, 0x0000, 0x0003, 0x0002, 0x001c,\r
-+      0x0137, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,\r
-+      0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,\r
-+      0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,\r
-+      0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,\r
-+      0x332e, 0x3032, 0x2e32, 0x3820, 0x2020, 0x2020, 0x2400, 0x20a9,\r
-+      0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,\r
-+      0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,\r
-+      0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,\r
-+      0x400f, 0x2091, 0x2800, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f,\r
-+      0x2091, 0x2a00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091,\r
-+      0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00,\r
-+      0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001,\r
-+      0x0000, 0x20c1, 0x0004, 0x20c9, 0x1bff, 0x2059, 0x0000, 0x2b78,\r
-+      0x7883, 0x0004, 0x2089, 0x2d29, 0x2051, 0x1800, 0x2a70, 0x20e1,\r
-+      0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e51, 0x2029,\r
-+      0x4d00, 0x2031, 0xffff, 0x2039, 0x4cd0, 0x2021, 0x0200, 0x20e9,\r
-+      0x0001, 0x20a1, 0x0000, 0x20a9, 0x0800, 0x900e, 0x4104, 0x20e9,\r
-+      0x0001, 0x20a1, 0x1000, 0x900e, 0x2001, 0x0cc0, 0x9084, 0x0fff,\r
-+      0x20a8, 0x4104, 0x2001, 0x0000, 0x9086, 0x0000, 0x0120, 0x21a8,\r
-+      0x4104, 0x8001, 0x1de0, 0x756e, 0x7672, 0x776a, 0x7476, 0x747a,\r
-+      0x00e6, 0x2071, 0x1ac8, 0x2472, 0x00ee, 0x20a1, 0x1cd0, 0x7170,\r
-+      0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x000f, 0x2001, 0x0001,\r
-+      0x9112, 0x900e, 0x21a8, 0x4104, 0x8211, 0x1de0, 0x7170, 0x3400,\r
-+      0x8001, 0x9102, 0x0120, 0x0218, 0x20a8, 0x900e, 0x4104, 0x2009,\r
-+      0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f,\r
-+      0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e,\r
-+      0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f17, 0x080c,\r
-+      0x6028, 0x080c, 0xadf7, 0x080c, 0x10ce, 0x080c, 0x12ed, 0x080c,\r
-+      0x1ba4, 0x080c, 0x0d69, 0x080c, 0x1053, 0x080c, 0x3425, 0x080c,\r
-+      0x76b8, 0x080c, 0x6996, 0x080c, 0x86f6, 0x080c, 0x842a, 0x080c,\r
-+      0x2478, 0x080c, 0x8f98, 0x080c, 0x7d82, 0x080c, 0x22b1, 0x080c,\r
-+      0x23e5, 0x080c, 0x246d, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004,\r
-+      0x091f, 0x7880, 0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837,\r
-+      0x4000, 0x7833, 0x0010, 0x0e04, 0x0913, 0x2091, 0x5000, 0x2091,\r
-+      0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2071,\r
-+      0x1800, 0x7003, 0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003,\r
-+      0x1178, 0x080c, 0x4bc9, 0x080c, 0x344c, 0x080c, 0x7729, 0x080c,\r
-+      0x6ed7, 0x080c, 0x87d4, 0x080c, 0x8453, 0x080c, 0x2c93, 0x0c58,\r
-+      0x000b, 0x0c78, 0x0944, 0x0945, 0x0ae7, 0x0942, 0x0bae, 0x0d68,\r
-+      0x0d68, 0x0d68, 0x080c, 0x0dd5, 0x0005, 0x0126, 0x00f6, 0x2091,\r
-+      0x8000, 0x7000, 0x9086, 0x0001, 0x1904, 0x0aba, 0x080c, 0x56de,\r
-+      0x1130, 0x0026, 0x2011, 0x0080, 0x080c, 0x0edf, 0x002e, 0x080c,\r
-+      0x73bc, 0x0150, 0x080c, 0x73df, 0x15a0, 0x2079, 0x0100, 0x7828,\r
-+      0x9085, 0x1800, 0x782a, 0x0468, 0x080c, 0x72ee, 0x7000, 0x9086,\r
-+      0x0001, 0x1904, 0x0aba, 0x7098, 0x9086, 0x0028, 0x1904, 0x0aba,\r
-+      0x080c, 0x8422, 0x080c, 0x8414, 0x2001, 0x0161, 0x2003, 0x0001,\r
-+      0x2079, 0x0100, 0x7827, 0xffff, 0x7a28, 0x9295, 0x5e2f, 0x7a2a,\r
-+      0x2011, 0x7252, 0x080c, 0x84f3, 0x2011, 0x7245, 0x080c, 0x85cd,\r
-+      0x2011, 0x5e83, 0x080c, 0x84f3, 0x2011, 0x8030, 0x901e, 0x7396,\r
-+      0x04d0, 0x080c, 0x5730, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904,\r
-+      0x0aba, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x2011, 0x7252, 0x080c,\r
-+      0x84f3, 0x2011, 0x7245, 0x080c, 0x85cd, 0x2001, 0x0265, 0x2001,\r
-+      0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842, 0x2001,\r
-+      0x19a6, 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c,\r
-+      0x5fd0, 0x00ce, 0x0804, 0x0aba, 0x780f, 0x006b, 0x7a28, 0x080c,\r
-+      0x73c4, 0x0118, 0x9295, 0x5e2f, 0x0010, 0x9295, 0x402f, 0x7a2a,\r
-+      0x2011, 0x8010, 0x73d8, 0x2001, 0x19a7, 0x2003, 0x0001, 0x080c,\r
-+      0x2b59, 0x080c, 0x4b04, 0x7248, 0xc284, 0x724a, 0x2001, 0x180c,\r
-+      0x200c, 0xc1ac, 0xc1cc, 0x2102, 0x080c, 0xa51d, 0x2011, 0x0004,\r
-+      0x080c, 0xcb45, 0x080c, 0x6822, 0x080c, 0x73bc, 0x1120, 0x080c,\r
-+      0x2b9d, 0x02e0, 0x0400, 0x080c, 0x5fd7, 0x0140, 0x7097, 0x0001,\r
-+      0x70d3, 0x0000, 0x080c, 0x58fd, 0x0804, 0x0aba, 0x080c, 0x56cf,\r
-+      0xd094, 0x0188, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c,\r
-+      0x56d3, 0xd0d4, 0x1118, 0x080c, 0x2b9d, 0x1270, 0x2011, 0x180c,\r
-+      0x2204, 0xc0bc, 0x00a8, 0x080c, 0x56d3, 0xd0d4, 0x1db8, 0x2011,\r
-+      0x180c, 0x2204, 0xc0bd, 0x0060, 0x2011, 0x180c, 0x2204, 0xc0bd,\r
-+      0x2012, 0x080c, 0x696a, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd,\r
-+      0x2012, 0x080c, 0x6930, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8,\r
-+      0x707f, 0x0000, 0x080c, 0x73bc, 0x1130, 0x70b0, 0x9005, 0x1168,\r
-+      0x080c, 0xcf81, 0x0050, 0x080c, 0xcf81, 0x70dc, 0xd09c, 0x1128,\r
-+      0x70b0, 0x9005, 0x0110, 0x080c, 0x5fad, 0x70e7, 0x0000, 0x70e3,\r
-+      0x0000, 0x70a7, 0x0000, 0x080c, 0x2ba5, 0x0228, 0x2011, 0x0101,\r
-+      0x2204, 0xc0c4, 0x2012, 0x72dc, 0x080c, 0x73bc, 0x1178, 0x9016,\r
-+      0x0016, 0x080c, 0x2956, 0x2019, 0x196d, 0x211a, 0x001e, 0x705f,\r
-+      0xffff, 0x7063, 0x00ef, 0x7083, 0x0000, 0x0020, 0x2019, 0x196d,\r
-+      0x201b, 0x0000, 0x2079, 0x1847, 0x7804, 0xd0ac, 0x0108, 0xc295,\r
-+      0x72de, 0x080c, 0x73bc, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011,\r
-+      0x0001, 0x080c, 0xcb45, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003,\r
-+      0x0002, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003,\r
-+      0x782a, 0x00fe, 0x080c, 0x2f96, 0x2011, 0x0005, 0x080c, 0xa653,\r
-+      0x080c, 0x968d, 0x080c, 0x73bc, 0x0148, 0x00c6, 0x2061, 0x0100,\r
-+      0x0016, 0x080c, 0x2956, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420,\r
-+      0x70ab, 0x0000, 0x70af, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079,\r
-+      0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe,\r
-+      0x2011, 0x0005, 0x080c, 0xa653, 0x080c, 0x968d, 0x080c, 0x73bc,\r
-+      0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2956, 0x61e2,\r
-+      0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c,\r
-+      0x73bc, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c,\r
-+      0x73bc, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138,\r
-+      0x9180, 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c,\r
-+      0x32bb, 0x8108, 0x1f04, 0x0ace, 0x707f, 0x0000, 0x7080, 0x9084,\r
-+      0x00ff, 0x7082, 0x70b3, 0x0000, 0x00be, 0x00ce, 0x0005, 0x00b6,\r
-+      0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0bab,\r
-+      0x70ac, 0x9086, 0xffff, 0x0130, 0x080c, 0x2f96, 0x080c, 0x968d,\r
-+      0x0804, 0x0bab, 0x70dc, 0xd0ac, 0x1110, 0xd09c, 0x0558, 0xd084,\r
-+      0x0548, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c,\r
-+      0x0508, 0x080c, 0x331e, 0x11d0, 0x70e0, 0x9086, 0xffff, 0x01b0,\r
-+      0x080c, 0x312b, 0x080c, 0x968d, 0x70dc, 0xd094, 0x1904, 0x0bab,\r
-+      0x2011, 0x0001, 0x080c, 0xd230, 0x0110, 0x2011, 0x0003, 0x901e,\r
-+      0x080c, 0x3165, 0x080c, 0x968d, 0x0804, 0x0bab, 0x70e4, 0x9005,\r
-+      0x1904, 0x0bab, 0x70a8, 0x9005, 0x1904, 0x0bab, 0x70dc, 0xd0a4,\r
-+      0x0118, 0xd0b4, 0x0904, 0x0bab, 0x080c, 0x6930, 0x1904, 0x0bab,\r
-+      0x080c, 0x6983, 0x1904, 0x0bab, 0x080c, 0x696a, 0x01c0, 0x0156,\r
-+      0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x65ff, 0x1118,\r
-+      0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b44, 0x00ce,\r
-+      0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0bab, 0x0006,\r
-+      0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0x2011, 0x19b3, 0x080c,\r
-+      0x0f87, 0x2011, 0x19cd, 0x080c, 0x0f87, 0x7030, 0xc08c, 0x7032,\r
-+      0x7003, 0x0003, 0x70af, 0xffff, 0x080c, 0x56de, 0x1130, 0x0026,\r
-+      0x2011, 0x0040, 0x080c, 0x0edf, 0x002e, 0x9006, 0x080c, 0x27ea,\r
-+      0x080c, 0x331e, 0x0118, 0x080c, 0x4ca1, 0x0050, 0x0036, 0x0046,\r
-+      0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4cbb, 0x004e, 0x003e,\r
-+      0x00f6, 0x2079, 0x0100, 0x080c, 0x73df, 0x0150, 0x080c, 0x73bc,\r
-+      0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a,\r
-+      0x00fe, 0x2001, 0x19e8, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011,\r
-+      0x0000, 0x080c, 0xa653, 0x2011, 0x0000, 0x080c, 0xa65d, 0x080c,\r
-+      0x968d, 0x080c, 0x97b9, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046,\r
-+      0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c,\r
-+      0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5f96, 0x7940, 0x918c,\r
-+      0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c,\r
-+      0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac,\r
-+      0x1904, 0x0c3b, 0x2001, 0x19a7, 0x2004, 0x9005, 0x1518, 0x080c,\r
-+      0x2c20, 0x1148, 0x2001, 0x0001, 0x080c, 0x2b88, 0x2001, 0x0001,\r
-+      0x080c, 0x2b6b, 0x00b8, 0x080c, 0x2c28, 0x1138, 0x9006, 0x080c,\r
-+      0x2b88, 0x9006, 0x080c, 0x2b6b, 0x0068, 0x080c, 0x2c30, 0x1d50,\r
-+      0x2001, 0x1998, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2982,\r
-+      0x0804, 0x0d1a, 0x080c, 0x73cd, 0x0148, 0x080c, 0x73df, 0x1118,\r
-+      0x080c, 0x76b3, 0x0050, 0x080c, 0x73c4, 0x0dd0, 0x080c, 0x76ae,\r
-+      0x080c, 0x76a4, 0x080c, 0x72ee, 0x0058, 0x080c, 0x73bc, 0x0140,\r
-+      0x2009, 0x00f8, 0x080c, 0x5f96, 0x7843, 0x0090, 0x7843, 0x0010,\r
-+      0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x73bc, 0x0138,\r
-+      0x7824, 0xd0ac, 0x1904, 0x0d1f, 0x1f04, 0x0c1a, 0x0070, 0x7824,\r
-+      0x080c, 0x73d6, 0x0118, 0xd0ac, 0x1904, 0x0d1f, 0x9084, 0x1800,\r
-+      0x0d98, 0x7003, 0x0001, 0x0804, 0x0d1f, 0x2001, 0x0001, 0x080c,\r
-+      0x27ea, 0x0804, 0x0d32, 0x2001, 0x19a7, 0x2004, 0x9005, 0x1518,\r
-+      0x080c, 0x2c20, 0x1148, 0x2001, 0x0001, 0x080c, 0x2b88, 0x2001,\r
-+      0x0001, 0x080c, 0x2b6b, 0x00b8, 0x080c, 0x2c28, 0x1138, 0x9006,\r
-+      0x080c, 0x2b88, 0x9006, 0x080c, 0x2b6b, 0x0068, 0x080c, 0x2c30,\r
-+      0x1d50, 0x2001, 0x1998, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c,\r
-+      0x2982, 0x0804, 0x0d1a, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938,\r
-+      0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2c38, 0x9085, 0x2000,\r
-+      0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c74, 0x080c, 0x85ad,\r
-+      0x1f04, 0x0c74, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852,\r
-+      0x793a, 0x080c, 0x73cd, 0x0148, 0x080c, 0x73df, 0x1118, 0x080c,\r
-+      0x76b3, 0x0050, 0x080c, 0x73c4, 0x0dd0, 0x080c, 0x76ae, 0x080c,\r
-+      0x76a4, 0x080c, 0x72ee, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5f96,\r
-+      0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c9a, 0x7850, 0x9085, 0x1400,\r
-+      0x7852, 0x080c, 0x73bc, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010,\r
-+      0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x85ad, 0x7820, 0xd09c,\r
-+      0x1580, 0x080c, 0x73bc, 0x0904, 0x0cff, 0x7824, 0xd0ac, 0x1904,\r
-+      0x0d1f, 0x080c, 0x73df, 0x1528, 0x0046, 0x2021, 0x0320, 0x8421,\r
-+      0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2c38, 0x7824, 0x9084,\r
-+      0x1800, 0x1160, 0x9484, 0x0fff, 0x1138, 0x2001, 0x1810, 0x2004,\r
-+      0xd0fc, 0x0110, 0x080c, 0x0d45, 0x8421, 0x1158, 0x1d04, 0x0cda,\r
-+      0x080c, 0x85ad, 0x080c, 0x76ae, 0x080c, 0x76a4, 0x7003, 0x0001,\r
-+      0x04f0, 0x8319, 0x1948, 0x1d04, 0x0ce7, 0x080c, 0x85ad, 0x2009,\r
-+      0x199b, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178, 0x200b,\r
-+      0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2c19, 0x7924,\r
-+      0x080c, 0x2c38, 0xd19c, 0x0110, 0x080c, 0x2b59, 0x00d8, 0x080c,\r
-+      0x73cd, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x7394, 0x7003,\r
-+      0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2c38, 0x7824, 0x080c,\r
-+      0x73d6, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003,\r
-+      0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x27ea, 0x0078, 0x2009,\r
-+      0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002, 0x7906,\r
-+      0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850, 0x9085,\r
-+      0x0400, 0x7852, 0x2001, 0x19a7, 0x2003, 0x0000, 0x9006, 0x78f2,\r
-+      0x015e, 0x003e, 0x000e, 0x080c, 0x56de, 0x1110, 0x080c, 0x0e62,\r
-+      0x012e, 0x00fe, 0x004e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0036,\r
-+      0x0046, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069,\r
-+      0x0d0c, 0x85ad, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,\r
-+      0x004e, 0x003e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x189e,\r
-+      0x7004, 0x9086, 0x0001, 0x1110, 0x080c, 0x344c, 0x00ee, 0x0005,\r
-+      0x0005, 0x2a70, 0x2061, 0x19ab, 0x2063, 0x0003, 0x6007, 0x0002,\r
-+      0x600b, 0x001c, 0x600f, 0x0137, 0x2001, 0x197c, 0x900e, 0x2102,\r
-+      0x7196, 0x2001, 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705f,\r
-+      0xffff, 0x0008, 0x715e, 0x7067, 0xffff, 0x717e, 0x7182, 0x080c,\r
-+      0xcf81, 0x2061, 0x196c, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800,\r
-+      0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x001f, 0x611a, 0x601f,\r
-+      0x07d0, 0x2061, 0x1974, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f,\r
-+      0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061,\r
-+      0x1989, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f,\r
-+      0x2020, 0x2001, 0x182c, 0x2102, 0x0005, 0x9016, 0x080c, 0x65ff,\r
-+      0x1178, 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4,\r
-+      0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210,\r
-+      0x8108, 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000,\r
-+      0x2079, 0x0000, 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04,\r
-+      0x0dd7, 0x0006, 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000,\r
-+      0x000e, 0x7882, 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e,\r
-+      0x7886, 0x3900, 0x789a, 0x7833, 0x0012, 0x2091, 0x5000, 0x0156,\r
-+      0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1aa2, 0x7a08,\r
-+      0x226a, 0x2069, 0x1aa3, 0x7a18, 0x226a, 0x8d68, 0x7a1c, 0x226a,\r
-+      0x782c, 0x2019, 0x1ab0, 0x201a, 0x2019, 0x1ab3, 0x9016, 0x7808,\r
-+      0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386, 0x1ac8,\r
-+      0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead, 0x2019,\r
-+      0x1ab1, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000, 0x2069,\r
-+      0x1a82, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a, 0x8d68,\r
-+      0x8318, 0x1f04, 0x0e24, 0x002e, 0x003e, 0x00de, 0x015e, 0x2079,\r
-+      0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,\r
-+      0xd084, 0x0180, 0x2001, 0x1a19, 0x2004, 0x9005, 0x0128, 0x2001,\r
-+      0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002,\r
-+      0x2003, 0x1001, 0x080c, 0x56de, 0x1110, 0x080c, 0x0e99, 0x0cd0,\r
-+      0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004, 0x9084, 0x0600,\r
-+      0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000, 0x2001, 0x017f,\r
-+      0x2102, 0x0005, 0x00f6, 0x0006, 0x2079, 0x1827, 0x2f04, 0x8000,\r
-+      0x207a, 0x080c, 0x2c30, 0x1150, 0x0006, 0x2001, 0x1998, 0x2004,\r
-+      0xd0fc, 0x000e, 0x1118, 0x9082, 0x7530, 0x0010, 0x9082, 0x000f,\r
-+      0x0258, 0x9006, 0x207a, 0x2079, 0x182a, 0x2f04, 0x9084, 0x0001,\r
-+      0x9086, 0x0001, 0x207a, 0x0090, 0x2079, 0x182a, 0x2f7c, 0x8fff,\r
-+      0x1138, 0x0026, 0x2011, 0x0080, 0x080c, 0x0edf, 0x002e, 0x0030,\r
-+      0x0026, 0x2011, 0x0000, 0x080c, 0x0edf, 0x002e, 0x000e, 0x00fe,\r
-+      0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c, 0x0edf, 0x20a9,\r
-+      0x0fff, 0x080c, 0x0f00, 0x2011, 0x0040, 0x04c9, 0x20a9, 0x0fff,\r
-+      0x080c, 0x0f00, 0x0c80, 0x7038, 0xd0b4, 0x1128, 0x0026, 0x2011,\r
-+      0x0040, 0x0469, 0x002e, 0x0005, 0x7038, 0xd0b4, 0x1128, 0x0026,\r
-+      0x2011, 0x0080, 0x0421, 0x002e, 0x0005, 0x0026, 0x70ef, 0x0000,\r
-+      0x0459, 0x1148, 0x080c, 0x2c30, 0x1118, 0x2011, 0x8484, 0x0058,\r
-+      0x2011, 0x8282, 0x0040, 0x080c, 0x2c30, 0x1118, 0x2011, 0xcdc5,\r
-+      0x0010, 0x2011, 0xcac2, 0x00e9, 0x002e, 0x0005, 0xd0b4, 0x0130,\r
-+      0x0006, 0x3b00, 0x9084, 0xff3f, 0x20d8, 0x000e, 0x0005, 0x0016,\r
-+      0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f,\r
-+      0x9205, 0x20d0, 0x001e, 0x0005, 0x2001, 0x183a, 0x2004, 0xd0dc,\r
-+      0x0005, 0x9e86, 0x1800, 0x190c, 0x0dd5, 0x70e8, 0xd0e4, 0x0108,\r
-+      0xc2e5, 0x72ea, 0xd0e4, 0x1118, 0x9294, 0x00c0, 0x0c01, 0x0005,\r
-+      0x1d04, 0x0f00, 0x2091, 0x6000, 0x1f04, 0x0f00, 0x0005, 0x890e,\r
-+      0x810e, 0x810f, 0x9194, 0x003f, 0x918c, 0xffc0, 0x0005, 0x0006,\r
-+      0x2200, 0x914d, 0x894f, 0x894d, 0x894d, 0x000e, 0x0005, 0x01d6,\r
-+      0x0146, 0x0036, 0x0096, 0x2061, 0x188d, 0x600b, 0x0000, 0x600f,\r
-+      0x0000, 0x6003, 0x0000, 0x6007, 0x0000, 0x2009, 0xffc0, 0x2105,\r
-+      0x0006, 0x2001, 0xaaaa, 0x200f, 0x2019, 0x5555, 0x9016, 0x2049,\r
-+      0x0bff, 0xab02, 0xa001, 0xa001, 0xa800, 0x9306, 0x1138, 0x2105,\r
-+      0x9306, 0x0120, 0x8210, 0x99c8, 0x0400, 0x0c98, 0x000e, 0x200f,\r
-+      0x2001, 0x189d, 0x928a, 0x000e, 0x1638, 0x928a, 0x0006, 0x2011,\r
-+      0x0006, 0x1210, 0x2011, 0x0000, 0x2202, 0x9006, 0x2008, 0x82ff,\r
-+      0x01b0, 0x8200, 0x600a, 0x600f, 0xffff, 0x6003, 0x0002, 0x6007,\r
-+      0x0000, 0x0026, 0x2019, 0x0010, 0x9280, 0x0001, 0x20e8, 0x21a0,\r
-+      0x21a8, 0x4104, 0x8319, 0x1de0, 0x8211, 0x1da0, 0x002e, 0x009e,\r
-+      0x003e, 0x014e, 0x01de, 0x0005, 0x2011, 0x000e, 0x08e8, 0x0016,\r
-+      0x0026, 0x0096, 0x3348, 0x080c, 0x0f07, 0x2100, 0x9300, 0x2098,\r
-+      0x22e0, 0x009e, 0x002e, 0x001e, 0x0036, 0x3518, 0x20a9, 0x0001,\r
-+      0x4002, 0x8007, 0x4004, 0x8319, 0x1dd8, 0x003e, 0x0005, 0x20e9,\r
-+      0x0001, 0x71b8, 0x81ff, 0x11c0, 0x9006, 0x2009, 0x0200, 0x20a9,\r
-+      0x0002, 0x9298, 0x0018, 0x23a0, 0x4001, 0x2009, 0x0700, 0x20a9,\r
-+      0x0002, 0x9298, 0x0008, 0x23a0, 0x4001, 0x707c, 0x8007, 0x7180,\r
-+      0x810f, 0x20a9, 0x0002, 0x4001, 0x9298, 0x000c, 0x23a0, 0x900e,\r
-+      0x080c, 0x0db5, 0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x4001,\r
-+      0x0005, 0x89ff, 0x0140, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c,\r
-+      0x1031, 0x009e, 0x0cb0, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c,\r
-+      0x10aa, 0x090c, 0x0dd5, 0x00ee, 0x0005, 0x0086, 0x00e6, 0x0006,\r
-+      0x0026, 0x0036, 0x0126, 0x2091, 0x8000, 0x00c9, 0x2071, 0x1800,\r
-+      0x73c0, 0x702c, 0x9016, 0x9045, 0x0158, 0x8210, 0x9906, 0x090c,\r
-+      0x0dd5, 0x2300, 0x9202, 0x0120, 0x1a0c, 0x0dd5, 0xa000, 0x0c98,\r
-+      0x012e, 0x003e, 0x002e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x0086,\r
-+      0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x1910, 0x7010,\r
-+      0x9005, 0x0140, 0x7018, 0x9045, 0x0128, 0x9906, 0x090c, 0x0dd5,\r
-+      0xa000, 0x0cc8, 0x012e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x00e6,\r
-+      0x2071, 0x1800, 0x0126, 0x2091, 0x8000, 0x70c0, 0x8001, 0x0270,\r
-+      0x70c2, 0x702c, 0x2048, 0x9085, 0x0001, 0xa800, 0x702e, 0xa803,\r
-+      0x0000, 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8,\r
-+      0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x70c0, 0x90ca,\r
-+      0x0020, 0x0268, 0x8001, 0x70c2, 0x702c, 0x2048, 0xa800, 0x702e,\r
-+      0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e,\r
-+      0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x0016, 0x890e, 0x810e,\r
-+      0x810f, 0x9184, 0x003f, 0xa862, 0x9184, 0xffc0, 0xa85e, 0x001e,\r
-+      0x0020, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x702c,\r
-+      0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414,\r
-+      0x012e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9026, 0x2009, 0x0000,\r
-+      0x2049, 0x0400, 0x2900, 0x702e, 0x8940, 0x2800, 0xa802, 0xa95e,\r
-+      0xa863, 0x0001, 0x8420, 0x9886, 0x0440, 0x0120, 0x2848, 0x9188,\r
-+      0x0040, 0x0c90, 0x2071, 0x188d, 0x7000, 0x9005, 0x11a0, 0x2001,\r
-+      0x0534, 0xa802, 0x2048, 0x2009, 0x4d00, 0x8940, 0x2800, 0xa802,\r
-+      0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0800, 0x0120, 0x2848,\r
-+      0x9188, 0x0040, 0x0c90, 0x2071, 0x188d, 0x7104, 0x7200, 0x82ff,\r
-+      0x01d0, 0x7308, 0x8318, 0x831f, 0x831b, 0x831b, 0x7312, 0x8319,\r
-+      0x2001, 0x0800, 0xa802, 0x2048, 0x8900, 0xa802, 0x2040, 0xa95e,\r
-+      0xaa62, 0x8420, 0x2300, 0x9906, 0x0130, 0x2848, 0x9188, 0x0040,\r
-+      0x9291, 0x0000, 0x0c88, 0xa803, 0x0000, 0x2071, 0x1800, 0x74be,\r
-+      0x74c2, 0x0005, 0x00e6, 0x0016, 0x9984, 0xfc00, 0x01e8, 0x908c,\r
-+      0xf800, 0x1168, 0x9982, 0x0400, 0x02b8, 0x9982, 0x0440, 0x0278,\r
-+      0x9982, 0x0534, 0x0288, 0x9982, 0x0800, 0x1270, 0x0040, 0x9982,\r
-+      0x0800, 0x0250, 0x2071, 0x188d, 0x7010, 0x9902, 0x1228, 0x9085,\r
-+      0x0001, 0x001e, 0x00ee, 0x0005, 0x9006, 0x0cd8, 0x00e6, 0x2071,\r
-+      0x1a18, 0x7007, 0x0000, 0x9006, 0x701e, 0x7022, 0x7002, 0x2071,\r
-+      0x0000, 0x7010, 0x9085, 0x8044, 0x7012, 0x2071, 0x0080, 0x9006,\r
-+      0x20a9, 0x0040, 0x7022, 0x1f04, 0x10e2, 0x702b, 0x0020, 0x00ee,\r
-+      0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0xa06f, 0x0000, 0x2071,\r
-+      0x1a18, 0x701c, 0x9088, 0x1a22, 0x280a, 0x8000, 0x9084, 0x003f,\r
-+      0x701e, 0x7120, 0x9106, 0x090c, 0x0dd5, 0x7004, 0x9005, 0x1128,\r
-+      0x00f6, 0x2079, 0x0080, 0x00a9, 0x00fe, 0x00ee, 0x012e, 0x0005,\r
-+      0x0126, 0x2091, 0x8000, 0x00e6, 0x2071, 0x1a18, 0x7004, 0x9005,\r
-+      0x1128, 0x00f6, 0x2079, 0x0080, 0x0021, 0x00fe, 0x00ee, 0x012e,\r
-+      0x0005, 0x7004, 0x9086, 0x0000, 0x1110, 0x7007, 0x0006, 0x7000,\r
-+      0x0002, 0x112b, 0x12ae, 0x1129, 0x1129, 0x12a2, 0x12a2, 0x12a2,\r
-+      0x12a2, 0x080c, 0x0dd5, 0x701c, 0x7120, 0x9106, 0x1148, 0x792c,\r
-+      0x9184, 0x0001, 0x1120, 0xd1fc, 0x1110, 0x7007, 0x0000, 0x0005,\r
-+      0x0096, 0x9180, 0x1a22, 0x2004, 0x700a, 0x2048, 0x8108, 0x918c,\r
-+      0x003f, 0x7122, 0x782b, 0x0026, 0xa88c, 0x7802, 0xa890, 0x7806,\r
-+      0xa894, 0x780a, 0xa898, 0x780e, 0xa878, 0x700e, 0xa870, 0x7016,\r
-+      0xa874, 0x701a, 0xa868, 0x009e, 0xd084, 0x0120, 0x7007, 0x0001,\r
-+      0x0029, 0x0005, 0x7007, 0x0002, 0x00b1, 0x0005, 0x0016, 0x0026,\r
-+      0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006,\r
-+      0x700e, 0x7212, 0x8203, 0x7812, 0x782b, 0x0020, 0x782b, 0x0041,\r
-+      0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0136, 0x0146, 0x0156,\r
-+      0x7014, 0x20e0, 0x7018, 0x2098, 0x20e9, 0x0000, 0x20a1, 0x0088,\r
-+      0x782b, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210,\r
-+      0x2110, 0x9006, 0x700e, 0x22a8, 0x4006, 0x8203, 0x7812, 0x782b,\r
-+      0x0020, 0x3300, 0x701a, 0x782b, 0x0001, 0x015e, 0x014e, 0x013e,\r
-+      0x002e, 0x001e, 0x0005, 0x2009, 0x1a18, 0x2104, 0xc095, 0x200a,\r
-+      0x080c, 0x1108, 0x0005, 0x0016, 0x00e6, 0x2071, 0x1a18, 0x00f6,\r
-+      0x2079, 0x0080, 0x792c, 0xd1bc, 0x190c, 0x0dce, 0x782b, 0x0002,\r
-+      0xd1fc, 0x0120, 0x918c, 0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee,\r
-+      0x001e, 0x0005, 0x1119, 0x11c1, 0x11f5, 0x12cd, 0x0dd5, 0x12e8,\r
-+      0x0dd5, 0x918c, 0x0700, 0x1550, 0x0136, 0x0146, 0x0156, 0x7014,\r
-+      0x20e8, 0x7018, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x782b,\r
-+      0x0040, 0x7010, 0x20a8, 0x4005, 0x3400, 0x701a, 0x015e, 0x014e,\r
-+      0x013e, 0x700c, 0x9005, 0x0578, 0x7800, 0x7802, 0x7804, 0x7806,\r
-+      0x080c, 0x115e, 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0100,\r
-+      0x009e, 0x7007, 0x0000, 0x080c, 0x1119, 0x0005, 0x7008, 0x0096,\r
-+      0x2048, 0xa86f, 0x0200, 0x009e, 0x0ca0, 0x918c, 0x0700, 0x1150,\r
-+      0x700c, 0x9005, 0x0180, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c,\r
-+      0x1173, 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0200, 0x009e,\r
-+      0x7007, 0x0000, 0x0080, 0x0096, 0x7008, 0x2048, 0x7800, 0xa88e,\r
-+      0x7804, 0xa892, 0x7808, 0xa896, 0x780c, 0xa89a, 0xa86f, 0x0100,\r
-+      0x009e, 0x7007, 0x0000, 0x0096, 0x00d6, 0x7008, 0x2048, 0x2001,\r
-+      0x18b9, 0x2004, 0x9906, 0x1128, 0xa89c, 0x080f, 0x00de, 0x009e,\r
-+      0x00a0, 0x00de, 0x009e, 0x0096, 0x00d6, 0x7008, 0x2048, 0x0081,\r
-+      0x0150, 0xa89c, 0x0086, 0x2940, 0x080f, 0x008e, 0x00de, 0x009e,\r
-+      0x080c, 0x1108, 0x0005, 0x00de, 0x009e, 0x080c, 0x1108, 0x0005,\r
-+      0xa8a8, 0xd08c, 0x0005, 0x0096, 0xa0a0, 0x904d, 0x090c, 0x0dd5,\r
-+      0xa06c, 0x908e, 0x0100, 0x0130, 0xa87b, 0x0030, 0xa883, 0x0000,\r
-+      0xa897, 0x4002, 0x080c, 0x6c75, 0xa09f, 0x0000, 0xa0a3, 0x0000,\r
-+      0x2848, 0x080c, 0x1031, 0x009e, 0x0005, 0x00a6, 0xa0a0, 0x904d,\r
-+      0x090c, 0x0dd5, 0xa06c, 0x908e, 0x0100, 0x0128, 0xa87b, 0x0001,\r
-+      0xa883, 0x0000, 0x00c0, 0xa80c, 0x2050, 0xb004, 0x9005, 0x0198,\r
-+      0xa80e, 0x2050, 0x8006, 0x8006, 0x8007, 0x908c, 0x003f, 0x9084,\r
-+      0xffc0, 0x9080, 0x0002, 0xa076, 0xa172, 0xb000, 0xa07a, 0x2810,\r
-+      0x080c, 0x10e9, 0x00e8, 0xa97c, 0xa894, 0x0016, 0x0006, 0x080c,\r
-+      0x6c75, 0x000e, 0x001e, 0xd1fc, 0x1138, 0xd1f4, 0x0128, 0x00c6,\r
-+      0x2060, 0x080c, 0xae61, 0x00ce, 0x7008, 0x2048, 0xa89f, 0x0000,\r
-+      0xa8a3, 0x0000, 0x080c, 0x1031, 0x7007, 0x0000, 0x080c, 0x1108,\r
-+      0x00ae, 0x0005, 0x0126, 0x2091, 0x8000, 0x782b, 0x1001, 0x7007,\r
-+      0x0005, 0x7000, 0xc094, 0x7002, 0x012e, 0x0005, 0x0096, 0x2001,\r
-+      0x192e, 0x204c, 0xa87c, 0x7812, 0xa88c, 0x7802, 0xa890, 0x7806,\r
-+      0xa894, 0x780a, 0xa898, 0x780e, 0x782b, 0x0020, 0x0126, 0x2091,\r
-+      0x8000, 0x782b, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002,\r
-+      0x2900, 0x700a, 0x012e, 0x009e, 0x0005, 0x20e1, 0x0000, 0x2099,\r
-+      0x0088, 0x782b, 0x0040, 0x0096, 0x2001, 0x192e, 0x204c, 0xaa7c,\r
-+      0x009e, 0x080c, 0x8a0c, 0x2009, 0x188c, 0x2104, 0x9084, 0xfffc,\r
-+      0x200a, 0x080c, 0x887f, 0x7007, 0x0000, 0x080c, 0x1119, 0x0005,\r
-+      0x7007, 0x0000, 0x080c, 0x1119, 0x0005, 0x0126, 0x2091, 0x2200,\r
-+      0x2079, 0x0300, 0x2071, 0x1a62, 0x7003, 0x0000, 0x78bf, 0x00f6,\r
-+      0x781b, 0x4800, 0x00c1, 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9,\r
-+      0x03d0, 0x2061, 0xea18, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002,\r
-+      0x7916, 0x1f04, 0x1303, 0x7807, 0x0007, 0x7803, 0x0000, 0x7803,\r
-+      0x0001, 0x012e, 0x0005, 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c,\r
-+      0x0120, 0x7820, 0x080c, 0x1362, 0x0cc8, 0x2001, 0x1a63, 0x2003,\r
-+      0x0000, 0x78ab, 0x0004, 0x78ac, 0xd0ac, 0x1de8, 0x78ab, 0x0002,\r
-+      0x7807, 0x0007, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827, 0x0031,\r
-+      0x782b, 0x1a82, 0x781f, 0xff00, 0x781b, 0xb700, 0x2001, 0x0200,\r
-+      0x2004, 0xd0dc, 0x0110, 0x781f, 0x0303, 0x2061, 0x1a82, 0x602f,\r
-+      0x1cd0, 0x2001, 0x181a, 0x2004, 0x9082, 0x1cd0, 0x6032, 0x603b,\r
-+      0x2090, 0x2001, 0x3325, 0xd0fc, 0x190c, 0x0dd5, 0x2001, 0x0003,\r
-+      0x2004, 0xd0d4, 0x1118, 0x783f, 0x3325, 0x0020, 0x9084, 0xc000,\r
-+      0x783f, 0xb325, 0x604f, 0x193c, 0x2001, 0x1927, 0x2004, 0x6042,\r
-+      0x00ce, 0x0005, 0x9086, 0x000d, 0x11d0, 0x7808, 0xd09c, 0x01b8,\r
-+      0x7820, 0x0026, 0x2010, 0x080c, 0xcb23, 0x0180, 0x2260, 0x6000,\r
-+      0x9086, 0x0004, 0x1158, 0x0016, 0x6120, 0x9186, 0x0009, 0x0108,\r
-+      0x0020, 0x2009, 0x004c, 0x080c, 0xaedc, 0x001e, 0x002e, 0x0005,\r
-+      0x0126, 0x2091, 0x2200, 0x7908, 0x9184, 0x0070, 0x190c, 0x0dce,\r
-+      0xd19c, 0x0158, 0x7820, 0x908c, 0xf000, 0x15e8, 0x908a, 0x0024,\r
-+      0x1a0c, 0x0dd5, 0x0023, 0x012e, 0x0005, 0x012e, 0x0005, 0x13bb,\r
-+      0x13bb, 0x13d2, 0x13d7, 0x13db, 0x13e0, 0x1408, 0x140c, 0x141a,\r
-+      0x141e, 0x13bb, 0x14e9, 0x14ed, 0x1552, 0x1559, 0x13bb, 0x155a,\r
-+      0x155b, 0x1566, 0x156d, 0x13bb, 0x13bb, 0x13bb, 0x13bb, 0x13bb,\r
-+      0x13bb, 0x13bb, 0x13e2, 0x13bb, 0x13bb, 0x13bb, 0x13bb, 0x13bb,\r
-+      0x13bb, 0x13bf, 0x13bd, 0x080c, 0x0dd5, 0x080c, 0x0dce, 0x080c,\r
-+      0x1578, 0x2009, 0x1a7b, 0x2104, 0x8000, 0x200a, 0x080c, 0x7e56,\r
-+      0x080c, 0x1aa9, 0x0005, 0x2009, 0x0048, 0x2060, 0x080c, 0xaedc,\r
-+      0x012e, 0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006, 0x0005, 0x7004,\r
-+      0xc085, 0x7006, 0x0005, 0x080c, 0x1578, 0x080c, 0x16bb, 0x0005,\r
-+      0x080c, 0x0dd5, 0x080c, 0x1578, 0x2060, 0x6014, 0x0096, 0x2048,\r
-+      0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0xaedc, 0x2001,\r
-+      0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109, 0x0160, 0x2001,\r
-+      0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec,\r
-+      0x1110, 0x080c, 0x157d, 0x2001, 0x0307, 0x2003, 0x8000, 0x0005,\r
-+      0x7004, 0xc095, 0x7006, 0x0005, 0x080c, 0x1578, 0x2060, 0x6014,\r
-+      0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c,\r
-+      0xaedc, 0x0005, 0x080c, 0x1578, 0x080c, 0x0dd5, 0x080c, 0x1578,\r
-+      0x080c, 0x14d4, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0904, 0x1487,\r
-+      0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065, 0x0140, 0x2001,\r
-+      0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0804, 0x148d, 0x7004,\r
-+      0x9005, 0x01c8, 0x1188, 0x78ab, 0x0004, 0x7827, 0x0018, 0x782b,\r
-+      0x0000, 0xd1bc, 0x090c, 0x0dd5, 0x2001, 0x020d, 0x2003, 0x0050,\r
-+      0x2003, 0x0020, 0x0804, 0x14b9, 0x78ab, 0x0004, 0x7803, 0x0001,\r
-+      0x080c, 0x14ed, 0x0005, 0x7827, 0x0018, 0xa001, 0x7828, 0x7827,\r
-+      0x0011, 0xa001, 0x7928, 0x9106, 0x0110, 0x79ac, 0x08e0, 0x00e6,\r
-+      0x2071, 0x0200, 0x702c, 0xd0c4, 0x0140, 0x00ee, 0x080c, 0x1aa9,\r
-+      0x080c, 0x1313, 0x7803, 0x0001, 0x0005, 0x7037, 0x0001, 0xa001,\r
-+      0x7150, 0x00ee, 0x918c, 0xff00, 0x9186, 0x0500, 0x0110, 0x79ac,\r
-+      0x0810, 0x7004, 0xc09d, 0x7006, 0x78ab, 0x0004, 0x7803, 0x0001,\r
-+      0x080c, 0x14ed, 0x2001, 0x020d, 0x2003, 0x0020, 0x0005, 0x7828,\r
-+      0x782b, 0x0000, 0x9065, 0x090c, 0x0dd5, 0x6014, 0x2048, 0x78ab,\r
-+      0x0004, 0x918c, 0x0700, 0x0198, 0x080c, 0x7e56, 0x080c, 0x1aa9,\r
-+      0x080c, 0xcb35, 0x0158, 0xa9ac, 0xa936, 0xa9b0, 0xa93a, 0xa83f,\r
-+      0xffff, 0xa843, 0xffff, 0xa880, 0xc0bd, 0xa882, 0x0005, 0x6020,\r
-+      0x9086, 0x0009, 0x1128, 0x2009, 0x004c, 0x080c, 0xaedc, 0x0048,\r
-+      0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x6024, 0x190c,\r
-+      0xcf1a, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, 0x2004,\r
-+      0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xe9c1, 0xd5a4, 0x1118, 0x080c,\r
-+      0x157d, 0x0005, 0x080c, 0x7e56, 0x080c, 0x1aa9, 0x0005, 0x781f,\r
-+      0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6,\r
-+      0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186, 0x0003, 0x0120,\r
-+      0x2001, 0x0016, 0x080c, 0x15ee, 0x00fe, 0x007e, 0x006e, 0x001e,\r
-+      0x0005, 0x7004, 0xc09d, 0x7006, 0x0005, 0x7104, 0x9184, 0x0004,\r
-+      0x190c, 0x0dd5, 0xd184, 0x1189, 0xd19c, 0x0158, 0xc19c, 0x7106,\r
-+      0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x080c, 0x157d,\r
-+      0x0005, 0x81ff, 0x190c, 0x0dd5, 0x0005, 0xc184, 0xd1b4, 0xc1b4,\r
-+      0x7106, 0x0016, 0x00e6, 0x15f0, 0x2071, 0x0200, 0x080c, 0x16a8,\r
-+      0x05c8, 0x6014, 0x9005, 0x05b0, 0x0096, 0x2048, 0xa864, 0x009e,\r
-+      0x9084, 0x00ff, 0x908e, 0x0029, 0x0160, 0x908e, 0x0048, 0x1550,\r
-+      0x601c, 0xd084, 0x11e0, 0x00f6, 0x2c78, 0x080c, 0x1725, 0x00fe,\r
-+      0x00b0, 0x00f6, 0x2c78, 0x080c, 0x18ac, 0x00fe, 0x2009, 0x01f4,\r
-+      0x8109, 0x0168, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001,\r
-+      0x0218, 0x2004, 0xd0ec, 0x1118, 0x080c, 0x157d, 0x0040, 0x2001,\r
-+      0x020d, 0x2003, 0x0020, 0x080c, 0x1313, 0x7803, 0x0001, 0x00ee,\r
-+      0x001e, 0x0005, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020,\r
-+      0x0461, 0x0ca8, 0x0429, 0x2060, 0x2009, 0x0053, 0x080c, 0xaedc,\r
-+      0x0005, 0x0005, 0x0005, 0x00e1, 0x2008, 0x00d1, 0x0006, 0x7004,\r
-+      0xc09d, 0x7006, 0x000e, 0x080c, 0x8d69, 0x0005, 0x0089, 0x9005,\r
-+      0x0118, 0x080c, 0x896c, 0x0cd0, 0x0005, 0x2001, 0x0036, 0x2009,\r
-+      0x1820, 0x210c, 0x2011, 0x181f, 0x2214, 0x080c, 0x15ee, 0x0005,\r
-+      0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c, 0x14d4, 0x00d6,\r
-+      0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0510, 0x6804, 0x9005,\r
-+      0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, 0x79bc, 0xd1a4, 0x1528,\r
-+      0x79b8, 0x918c, 0x0fff, 0x0180, 0x9182, 0x0841, 0x1268, 0x9188,\r
-+      0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, 0x810c, 0x080c, 0x15e0,\r
-+      0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9, 0x6827, 0x0002, 0x04c1,\r
-+      0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4, 0x1500, 0x6804, 0x9005,\r
-+      0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, 0x080c, 0x7e56, 0x080c,\r
-+      0x1aa9, 0x0090, 0x7827, 0x0015, 0x782b, 0x0000, 0x7827, 0x0018,\r
-+      0x782b, 0x0000, 0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307,\r
-+      0x2003, 0x0300, 0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084,\r
-+      0x5400, 0x9086, 0x5400, 0x0d30, 0x7827, 0x0015, 0x782b, 0x0000,\r
-+      0x7803, 0x0001, 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0005,\r
-+      0x6824, 0x9084, 0x0003, 0x1de0, 0x0005, 0x2001, 0x0030, 0x2c08,\r
-+      0x621c, 0x0021, 0x7830, 0x9086, 0x0041, 0x0005, 0x00f6, 0x2079,\r
-+      0x0300, 0x0006, 0x7808, 0xd09c, 0x0140, 0x0016, 0x0026, 0x00c6,\r
-+      0x080c, 0x1380, 0x00ce, 0x002e, 0x001e, 0x000e, 0x0006, 0x7832,\r
-+      0x7936, 0x7a3a, 0x781b, 0x8080, 0x0059, 0x1118, 0x000e, 0x00fe,\r
-+      0x0005, 0x000e, 0x792c, 0x3900, 0x8000, 0x2004, 0x080c, 0x0dd5,\r
-+      0x2009, 0x180c, 0x2104, 0xc0f4, 0x200a, 0x2009, 0xff00, 0x8109,\r
-+      0x0904, 0x166c, 0x7a18, 0x9284, 0x0030, 0x0904, 0x1667, 0x9284,\r
-+      0x0048, 0x9086, 0x0008, 0x1904, 0x1667, 0x2001, 0x0109, 0x2004,\r
-+      0xd08c, 0x01f0, 0x0006, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,\r
-+      0x0126, 0x2091, 0x2800, 0x00f6, 0x0026, 0x0016, 0x2009, 0x1a7d,\r
-+      0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x90a2, 0x001e, 0x002e,\r
-+      0x00fe, 0x012e, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x000e,\r
-+      0x2001, 0x009b, 0x2004, 0xd0fc, 0x01d0, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x00f6, 0x0016, 0x2009, 0x1a7e,\r
-+      0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x1eb4, 0x001e, 0x00fe,\r
-+      0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x7818,\r
-+      0xd0bc, 0x1904, 0x1617, 0x0005, 0x2001, 0x180c, 0x2004, 0xd0f4,\r
-+      0x1528, 0x7a18, 0x9284, 0x0030, 0x0508, 0x9284, 0x0048, 0x9086,\r
-+      0x0008, 0x11e0, 0x2001, 0x19f6, 0x2004, 0x9005, 0x01b8, 0x2001,\r
-+      0x1a66, 0x2004, 0x9086, 0x0000, 0x0188, 0x2009, 0x1a7c, 0x2104,\r
-+      0x8000, 0x0208, 0x200a, 0x080c, 0xa2f7, 0x2009, 0x180c, 0x2104,\r
-+      0xc0f5, 0x200a, 0x2009, 0xff00, 0x0804, 0x1617, 0x9085, 0x0001,\r
-+      0x0005, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x080c, 0x1610,\r
-+      0x1108, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004, 0x080c, 0x0dd5,\r
-+      0x7037, 0x0001, 0x7150, 0x7037, 0x0002, 0x7050, 0x2060, 0xd1bc,\r
-+      0x1110, 0x7054, 0x2060, 0x918c, 0xff00, 0x9186, 0x0500, 0x0110,\r
-+      0x9085, 0x0001, 0x0005, 0x00e6, 0x0016, 0x2071, 0x0200, 0x0c41,\r
-+      0x6124, 0xd1dc, 0x01f8, 0x701c, 0xd08c, 0x0904, 0x171a, 0x7017,\r
-+      0x0000, 0x2001, 0x0264, 0x2004, 0xd0bc, 0x0904, 0x171a, 0x2001,\r
-+      0x0268, 0x00c6, 0x2064, 0x6104, 0x6038, 0x00ce, 0x918e, 0x0039,\r
-+      0x1904, 0x171a, 0x9c06, 0x15f0, 0x0126, 0x2091, 0x2600, 0x080c,\r
-+      0x7d9d, 0x012e, 0x7358, 0x745c, 0x6014, 0x905d, 0x0598, 0x2b48,\r
-+      0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x190c, 0xcef5,\r
-+      0xab42, 0xac3e, 0x2001, 0x1869, 0x2004, 0xd0b4, 0x1170, 0x601c,\r
-+      0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,\r
-+      0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff, 0x080c, 0x20b0, 0x1190,\r
-+      0x080c, 0x1907, 0x2a00, 0xa816, 0x0130, 0x2800, 0xa80e, 0x2c05,\r
-+      0xa80a, 0x2c00, 0xa812, 0x7037, 0x0020, 0x781f, 0x0300, 0x001e,\r
-+      0x00ee, 0x0005, 0x7037, 0x0050, 0x7037, 0x0020, 0x001e, 0x00ee,\r
-+      0x080c, 0x157d, 0x0005, 0x080c, 0x0dd5, 0x2ff0, 0x0126, 0x2091,\r
-+      0x2200, 0x00c6, 0x3e60, 0x6014, 0x2048, 0x2940, 0x903e, 0x2730,\r
-+      0xa864, 0x2068, 0xa81a, 0x9d84, 0x000f, 0x9088, 0x2090, 0x2165,\r
-+      0x0002, 0x1750, 0x17be, 0x1750, 0x1750, 0x1754, 0x179f, 0x1750,\r
-+      0x1774, 0x1749, 0x17b5, 0x1750, 0x1750, 0x1759, 0x18aa, 0x1788,\r
-+      0x177e, 0xa964, 0x918c, 0x00ff, 0x918e, 0x0048, 0x0904, 0x17b5,\r
-+      0x9085, 0x0001, 0x0804, 0x18a1, 0xa87c, 0xd0ac, 0x0dc8, 0x0804,\r
-+      0x17c5, 0xa87c, 0xd0ac, 0x0da0, 0x0804, 0x1830, 0xa898, 0x901d,\r
-+      0x1108, 0xab9c, 0x9016, 0xaab2, 0xaa3e, 0xaa42, 0x3e00, 0x9080,\r
-+      0x0008, 0x2004, 0x9080, 0x8f30, 0x2005, 0x9005, 0x090c, 0x0dd5,\r
-+      0x2004, 0xa8ae, 0x0804, 0x1889, 0xa87c, 0xd0bc, 0x09c8, 0xa890,\r
-+      0xa842, 0xa88c, 0xa83e, 0xa888, 0x0804, 0x17c5, 0xa87c, 0xd0bc,\r
-+      0x0978, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888, 0x0804, 0x1830,\r
-+      0xa87c, 0xd0bc, 0x0928, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa804,\r
-+      0x9045, 0x090c, 0x0dd5, 0xa164, 0xa91a, 0x91ec, 0x000f, 0x9d80,\r
-+      0x2090, 0x2065, 0xa888, 0xd19c, 0x1904, 0x1830, 0x0430, 0xa87c,\r
-+      0xd0ac, 0x0904, 0x1750, 0xa804, 0x9045, 0x090c, 0x0dd5, 0xa164,\r
-+      0xa91a, 0x91ec, 0x000f, 0x9d80, 0x2090, 0x2065, 0x9006, 0xa842,\r
-+      0xa83e, 0xd19c, 0x1904, 0x1830, 0x0080, 0xa87c, 0xd0ac, 0x0904,\r
-+      0x1750, 0x9006, 0xa842, 0xa83e, 0x0804, 0x1830, 0xa87c, 0xd0ac,\r
-+      0x0904, 0x1750, 0x9006, 0xa842, 0xa83e, 0x2c05, 0x908a, 0x0036,\r
-+      0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x17e8, 0x17e8, 0x17ea,\r
-+      0x17e8, 0x17e8, 0x17e8, 0x17f4, 0x17e8, 0x17e8, 0x17e8, 0x17fe,\r
-+      0x17e8, 0x17e8, 0x17e8, 0x1808, 0x17e8, 0x17e8, 0x17e8, 0x1812,\r
-+      0x17e8, 0x17e8, 0x17e8, 0x181c, 0x17e8, 0x17e8, 0x17e8, 0x1826,\r
-+      0x080c, 0x0dd5, 0xa574, 0xa478, 0x9d86, 0x0024, 0x0904, 0x175e,\r
-+      0xa37c, 0xa280, 0x0804, 0x1889, 0xa584, 0xa488, 0x9d86, 0x0024,\r
-+      0x0904, 0x175e, 0xa38c, 0xa290, 0x0804, 0x1889, 0xa594, 0xa498,\r
-+      0x9d86, 0x0024, 0x0904, 0x175e, 0xa39c, 0xa2a0, 0x0804, 0x1889,\r
-+      0xa5a4, 0xa4a8, 0x9d86, 0x0024, 0x0904, 0x175e, 0xa3ac, 0xa2b0,\r
-+      0x0804, 0x1889, 0xa5b4, 0xa4b8, 0x9d86, 0x0024, 0x0904, 0x175e,\r
-+      0xa3bc, 0xa2c0, 0x0804, 0x1889, 0xa5c4, 0xa4c8, 0x9d86, 0x0024,\r
-+      0x0904, 0x175e, 0xa3cc, 0xa2d0, 0x0804, 0x1889, 0xa5d4, 0xa4d8,\r
-+      0x9d86, 0x0024, 0x0904, 0x175e, 0xa3dc, 0xa2e0, 0x0804, 0x1889,\r
-+      0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002,\r
-+      0x1853, 0x1851, 0x1851, 0x1851, 0x1851, 0x1851, 0x185e, 0x1851,\r
-+      0x1851, 0x1851, 0x1851, 0x1851, 0x1869, 0x1851, 0x1851, 0x1851,\r
-+      0x1851, 0x1851, 0x1874, 0x1851, 0x1851, 0x1851, 0x1851, 0x1851,\r
-+      0x187f, 0x080c, 0x0dd5, 0xa56c, 0xa470, 0xa774, 0xa678, 0x9d86,\r
-+      0x002c, 0x0904, 0x175e, 0xa37c, 0xa280, 0x0458, 0xa584, 0xa488,\r
-+      0xa78c, 0xa690, 0x9d86, 0x002c, 0x0904, 0x175e, 0xa394, 0xa298,\r
-+      0x0400, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0x9d86, 0x002c, 0x0904,\r
-+      0x175e, 0xa3ac, 0xa2b0, 0x00a8, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0,\r
-+      0x9d86, 0x002c, 0x0904, 0x175e, 0xa3c4, 0xa2c8, 0x0050, 0xa5cc,\r
-+      0xa4d0, 0xa7d4, 0xa6d8, 0x9d86, 0x002c, 0x0904, 0x175e, 0xa3dc,\r
-+      0xa2e0, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0xa988,\r
-+      0x8c60, 0x2c1d, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x8109, 0xa916,\r
-+      0x1158, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa87c, 0xc0dd, 0xa87e,\r
-+      0x9006, 0x00ce, 0x012e, 0x0005, 0x2800, 0xa80e, 0xab0a, 0x2c00,\r
-+      0xa812, 0x0c78, 0x0804, 0x1750, 0x2ff0, 0x0126, 0x2091, 0x2200,\r
-+      0x00c6, 0x3e60, 0x6014, 0x2048, 0x2940, 0xa80e, 0x2061, 0x208b,\r
-+      0xa813, 0x208b, 0x2c05, 0xa80a, 0xa964, 0xa91a, 0xa87c, 0xd0ac,\r
-+      0x090c, 0x0dd5, 0x9006, 0xa842, 0xa83e, 0x2c05, 0x908a, 0x0034,\r
-+      0x1a0c, 0x0dd5, 0xadcc, 0xacd0, 0xafd4, 0xaed8, 0xabdc, 0xaae0,\r
-+      0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0xa8ac, 0xaab0,\r
-+      0xa836, 0xaa3a, 0xa988, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0008,\r
-+      0x1120, 0x8109, 0xa916, 0x0128, 0x0078, 0x918a, 0x0002, 0xa916,\r
-+      0x1158, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa87c, 0xc0dd, 0xa87e,\r
-+      0x9006, 0x00ce, 0x012e, 0x0005, 0xa804, 0x9045, 0x090c, 0x0dd5,\r
-+      0xa80e, 0xa064, 0xa81a, 0x9084, 0x000f, 0x9080, 0x2090, 0x2015,\r
-+      0x82ff, 0x090c, 0x0dd5, 0xaa12, 0x2205, 0xa80a, 0x0c10, 0x903e,\r
-+      0x2730, 0xa880, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1a31, 0x195e,\r
-+      0x195e, 0x1a31, 0x195e, 0x1a2b, 0x1a31, 0x195e, 0x19ce, 0x19ce,\r
-+      0x19ce, 0x1a31, 0x19ce, 0x1a31, 0x1a28, 0x19ce, 0xc0fc, 0xa882,\r
-+      0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1a33, 0x2c05,\r
-+      0x908a, 0x0034, 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x194a,\r
-+      0x1948, 0x1948, 0x1948, 0x1948, 0x1948, 0x194e, 0x1948, 0x1948,\r
-+      0x1948, 0x1948, 0x1948, 0x1952, 0x1948, 0x1948, 0x1948, 0x1948,\r
-+      0x1948, 0x1956, 0x1948, 0x1948, 0x1948, 0x1948, 0x1948, 0x195a,\r
-+      0x080c, 0x0dd5, 0xa774, 0xa678, 0x0804, 0x1a33, 0xa78c, 0xa690,\r
-+      0x0804, 0x1a33, 0xa7a4, 0xa6a8, 0x0804, 0x1a33, 0xa7bc, 0xa6c0,\r
-+      0x0804, 0x1a33, 0xa7d4, 0xa6d8, 0x0804, 0x1a33, 0xa898, 0x901d,\r
-+      0x1108, 0xab9c, 0x9016, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0dd5,\r
-+      0x9082, 0x001b, 0x0002, 0x1986, 0x1986, 0x1988, 0x1986, 0x1986,\r
-+      0x1986, 0x1992, 0x1986, 0x1986, 0x1986, 0x199c, 0x1986, 0x1986,\r
-+      0x1986, 0x19a6, 0x1986, 0x1986, 0x1986, 0x19b0, 0x1986, 0x1986,\r
-+      0x1986, 0x19ba, 0x1986, 0x1986, 0x1986, 0x19c4, 0x080c, 0x0dd5,\r
-+      0xa574, 0xa478, 0x9d86, 0x0004, 0x0904, 0x1a33, 0xa37c, 0xa280,\r
-+      0x0804, 0x1a33, 0xa584, 0xa488, 0x9d86, 0x0004, 0x0904, 0x1a33,\r
-+      0xa38c, 0xa290, 0x0804, 0x1a33, 0xa594, 0xa498, 0x9d86, 0x0004,\r
-+      0x0904, 0x1a33, 0xa39c, 0xa2a0, 0x0804, 0x1a33, 0xa5a4, 0xa4a8,\r
-+      0x9d86, 0x0004, 0x0904, 0x1a33, 0xa3ac, 0xa2b0, 0x0804, 0x1a33,\r
-+      0xa5b4, 0xa4b8, 0x9d86, 0x0004, 0x0904, 0x1a33, 0xa3bc, 0xa2c0,\r
-+      0x0804, 0x1a33, 0xa5c4, 0xa4c8, 0x9d86, 0x0004, 0x0904, 0x1a33,\r
-+      0xa3cc, 0xa2d0, 0x0804, 0x1a33, 0xa5d4, 0xa4d8, 0x9d86, 0x0004,\r
-+      0x0904, 0x1a33, 0xa3dc, 0xa2e0, 0x0804, 0x1a33, 0xa898, 0x901d,\r
-+      0x1108, 0xab9c, 0x9016, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0dd5,\r
-+      0x9082, 0x001b, 0x0002, 0x19f6, 0x19f4, 0x19f4, 0x19f4, 0x19f4,\r
-+      0x19f4, 0x1a00, 0x19f4, 0x19f4, 0x19f4, 0x19f4, 0x19f4, 0x1a0a,\r
-+      0x19f4, 0x19f4, 0x19f4, 0x19f4, 0x19f4, 0x1a14, 0x19f4, 0x19f4,\r
-+      0x19f4, 0x19f4, 0x19f4, 0x1a1e, 0x080c, 0x0dd5, 0xa56c, 0xa470,\r
-+      0xa774, 0xa678, 0x9d86, 0x000c, 0x05b0, 0xa37c, 0xa280, 0x0498,\r
-+      0xa584, 0xa488, 0xa78c, 0xa690, 0x9d86, 0x000c, 0x0560, 0xa394,\r
-+      0xa298, 0x0448, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0x9d86, 0x000c,\r
-+      0x0510, 0xa3ac, 0xa2b0, 0x00f8, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0,\r
-+      0x9d86, 0x000c, 0x01c0, 0xa3c4, 0xa2c8, 0x00a8, 0xa5cc, 0xa4d0,\r
-+      0xa7d4, 0xa6d8, 0x9d86, 0x000c, 0x0170, 0xa3dc, 0xa2e0, 0x0058,\r
-+      0x9d86, 0x000e, 0x1130, 0x080c, 0x2048, 0x1904, 0x1907, 0x900e,\r
-+      0x0050, 0x080c, 0x0dd5, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26,\r
-+      0xae2a, 0x080c, 0x2048, 0x0005, 0x6014, 0x2048, 0x6118, 0x810c,\r
-+      0x810c, 0x810c, 0x81ff, 0x1118, 0xa887, 0x0001, 0x0008, 0xa986,\r
-+      0x601b, 0x0002, 0xa974, 0xd1dc, 0x1108, 0x0005, 0xa934, 0xa88c,\r
-+      0x9106, 0x1158, 0xa938, 0xa890, 0x9106, 0x1138, 0x601c, 0xc084,\r
-+      0x601e, 0x2009, 0x0048, 0x0804, 0xaedc, 0x0005, 0x0126, 0x00c6,\r
-+      0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, 0x0000,\r
-+      0x05b0, 0x9186, 0x0003, 0x0598, 0x6020, 0x6023, 0x0000, 0x0006,\r
-+      0x2031, 0x0008, 0x00c6, 0x781f, 0x0808, 0x7808, 0xd09c, 0x0120,\r
-+      0x080c, 0x1380, 0x8631, 0x1db8, 0x00ce, 0x781f, 0x0800, 0x2031,\r
-+      0x0168, 0x00c6, 0x7808, 0xd09c, 0x190c, 0x1380, 0x00ce, 0x2001,\r
-+      0x0038, 0x080c, 0x1b36, 0x7930, 0x9186, 0x0040, 0x0160, 0x9186,\r
-+      0x0042, 0x190c, 0x0dd5, 0x2001, 0x001e, 0x8001, 0x1df0, 0x8631,\r
-+      0x1d40, 0x080c, 0x1b45, 0x000e, 0x6022, 0x012e, 0x0005, 0x080c,\r
-+      0x1b32, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000,\r
-+      0x0ca0, 0x00f6, 0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004,\r
-+      0x00fe, 0x080c, 0x73bc, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000,\r
-+      0x2001, 0x0160, 0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001,\r
-+      0x8211, 0x1de0, 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x746c,\r
-+      0x006e, 0x0005, 0x0479, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001,\r
-+      0x0138, 0x2202, 0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x2c44,\r
-+      0x2009, 0x003c, 0x080c, 0x23d2, 0x2001, 0x015d, 0x2003, 0x0000,\r
-+      0x7000, 0x9084, 0x003c, 0x1de0, 0x080c, 0x8414, 0x70a0, 0x70a2,\r
-+      0x7098, 0x709a, 0x709c, 0x709e, 0x2001, 0x020d, 0x2003, 0x0020,\r
-+      0x00f6, 0x2079, 0x0300, 0x080c, 0x1313, 0x7803, 0x0001, 0x00fe,\r
-+      0x00ee, 0x0005, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001,\r
-+      0x0160, 0x202c, 0x2003, 0x0000, 0x080c, 0x73bc, 0x1108, 0x0005,\r
-+      0x2021, 0x0260, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001,\r
-+      0x0109, 0x201c, 0x939c, 0x0048, 0x1160, 0x2001, 0x0111, 0x201c,\r
-+      0x83ff, 0x1110, 0x8421, 0x1d70, 0x2001, 0x015d, 0x2003, 0x0000,\r
-+      0x0005, 0x0046, 0x2021, 0x0019, 0x2003, 0x0048, 0xa001, 0xa001,\r
-+      0x201c, 0x939c, 0x0048, 0x0120, 0x8421, 0x1db0, 0x004e, 0x0c60,\r
-+      0x004e, 0x0c40, 0x601c, 0xc084, 0x601e, 0x0005, 0x2c08, 0x621c,\r
-+      0x080c, 0x15ee, 0x7930, 0x0005, 0x2c08, 0x621c, 0x080c, 0x1699,\r
-+      0x7930, 0x0005, 0x8001, 0x1df0, 0x0005, 0x2031, 0x0005, 0x781c,\r
-+      0x9084, 0x0007, 0x0170, 0x2001, 0x0038, 0x0c41, 0x9186, 0x0040,\r
-+      0x0904, 0x1ba3, 0x2001, 0x001e, 0x0c69, 0x8631, 0x1d80, 0x080c,\r
-+      0x0dd5, 0x781f, 0x0202, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001,\r
-+      0x0b10, 0x0c01, 0x781c, 0xd084, 0x0110, 0x0861, 0x04e0, 0x2001,\r
-+      0x0030, 0x0891, 0x9186, 0x0040, 0x0568, 0x781c, 0xd084, 0x1da8,\r
-+      0x781f, 0x0101, 0x2001, 0x0014, 0x0869, 0x2001, 0x0037, 0x0821,\r
-+      0x9186, 0x0040, 0x0140, 0x2001, 0x0030, 0x080c, 0x1b3c, 0x9186,\r
-+      0x0040, 0x190c, 0x0dd5, 0x00d6, 0x2069, 0x0200, 0x692c, 0xd1f4,\r
-+      0x1170, 0xd1c4, 0x0160, 0xd19c, 0x0130, 0x6800, 0x9085, 0x1800,\r
-+      0x6802, 0x00de, 0x0080, 0x6908, 0x9184, 0x0007, 0x1db0, 0x00de,\r
-+      0x781f, 0x0100, 0x791c, 0x9184, 0x0007, 0x090c, 0x0dd5, 0xa001,\r
-+      0xa001, 0x781f, 0x0200, 0x0005, 0x0126, 0x2091, 0x2400, 0x2071,\r
-+      0x1a66, 0x2079, 0x0090, 0x012e, 0x0005, 0x9280, 0x0005, 0x2004,\r
-+      0x2048, 0xa97c, 0xd1dc, 0x1904, 0x1c45, 0xa964, 0x9184, 0x0007,\r
-+      0x0002, 0x1bc1, 0x1c30, 0x1bd8, 0x1bda, 0x1bd8, 0x1c18, 0x1bf8,\r
-+      0x1be7, 0x918c, 0x00ff, 0x9186, 0x0008, 0x1170, 0xa87c, 0xd0b4,\r
-+      0x0904, 0x1e6f, 0x9006, 0xa842, 0xa83e, 0xa988, 0x2900, 0xa85a,\r
-+      0xa813, 0x208b, 0x0804, 0x1c41, 0x9186, 0x0048, 0x0904, 0x1c30,\r
-+      0x080c, 0x0dd5, 0x9184, 0x00ff, 0x9086, 0x0013, 0x0904, 0x1c30,\r
-+      0x9184, 0x00ff, 0x9086, 0x001b, 0x0904, 0x1c30, 0x0c88, 0xa87c,\r
-+      0xd0b4, 0x0904, 0x1e6f, 0xa890, 0xa842, 0xa83a, 0xa88c, 0xa83e,\r
-+      0xa836, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0xa988, 0x0804, 0x1c38,\r
-+      0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x19d0, 0xa87c, 0xd0b4,\r
-+      0x0904, 0x1e6f, 0xa890, 0xa842, 0xa83a, 0xa88c, 0xa83e, 0xa836,\r
-+      0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0xa804, 0xa85a, 0x2040, 0xa064,\r
-+      0x9084, 0x000f, 0x9080, 0x2090, 0x2005, 0xa812, 0xa988, 0x0448,\r
-+      0x918c, 0x00ff, 0x9186, 0x0015, 0x1540, 0xa87c, 0xd0b4, 0x0904,\r
-+      0x1e6f, 0xa804, 0xa85a, 0x2040, 0xa064, 0x9084, 0x000f, 0x9080,\r
-+      0x2090, 0x2005, 0xa812, 0xa988, 0x9006, 0xa842, 0xa83e, 0x0088,\r
-+      0xa87c, 0xd0b4, 0x0904, 0x1e6f, 0xa988, 0x9006, 0xa842, 0xa83e,\r
-+      0x2900, 0xa85a, 0xa864, 0x9084, 0x000f, 0x9080, 0x2090, 0x2005,\r
-+      0xa812, 0xa916, 0xa87c, 0xc0dd, 0xa87e, 0x0005, 0x00f6, 0x2079,\r
-+      0x0090, 0x782c, 0xd0fc, 0x190c, 0x1eb4, 0x00e6, 0x2071, 0x1a66,\r
-+      0x7000, 0x9005, 0x1904, 0x1cae, 0x7206, 0x9280, 0x0005, 0x204c,\r
-+      0x9280, 0x0004, 0x2004, 0x782b, 0x0004, 0x00f6, 0x2079, 0x0200,\r
-+      0x7803, 0x0040, 0x00fe, 0x00b6, 0x2058, 0xb86c, 0x7836, 0xb890,\r
-+      0x00be, 0x00f6, 0x2079, 0x0200, 0x7803, 0x0040, 0xa001, 0xa001,\r
-+      0xa001, 0xa001, 0xa001, 0xa001, 0x781a, 0x2079, 0x0100, 0x8004,\r
-+      0x78d6, 0x00fe, 0xa814, 0x2050, 0xa858, 0x2040, 0xa810, 0x2060,\r
-+      0xa064, 0x90ec, 0x000f, 0xa944, 0x791a, 0x7116, 0xa848, 0x781e,\r
-+      0x701a, 0x9006, 0x700e, 0x7012, 0x7004, 0xa940, 0xa838, 0x9106,\r
-+      0x1500, 0xa93c, 0xa834, 0x9106, 0x11e0, 0x0006, 0x0016, 0xa938,\r
-+      0xa834, 0x9105, 0x0118, 0x001e, 0x000e, 0x0098, 0x001e, 0x000e,\r
-+      0x8aff, 0x01c8, 0x0126, 0x2091, 0x8000, 0x2009, 0x0306, 0x200b,\r
-+      0x0808, 0x00d9, 0x0108, 0x00c9, 0x012e, 0x9006, 0x00ee, 0x00fe,\r
-+      0x0005, 0x0036, 0x0046, 0xab38, 0xac34, 0x080c, 0x20b0, 0x004e,\r
-+      0x003e, 0x0d30, 0x0c98, 0x9085, 0x0001, 0x0c80, 0x2009, 0x0306,\r
-+      0x200b, 0x4800, 0x7027, 0x0000, 0x0005, 0x0076, 0x0066, 0x0056,\r
-+      0x0046, 0x0036, 0x0026, 0x8aff, 0x0904, 0x1e68, 0x700c, 0x7214,\r
-+      0x923a, 0x7010, 0x7218, 0x9203, 0x0a04, 0x1e67, 0x9705, 0x0904,\r
-+      0x1e67, 0x903e, 0x2730, 0xa880, 0xd0fc, 0x1190, 0x2d00, 0x0002,\r
-+      0x1df1, 0x1d30, 0x1d30, 0x1df1, 0x1df1, 0x1dce, 0x1df1, 0x1d30,\r
-+      0x1dd5, 0x1d7f, 0x1d7f, 0x1df1, 0x1df1, 0x1df1, 0x1dc8, 0x1d7f,\r
-+      0xc0fc, 0xa882, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904,\r
-+      0x1dfe, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0dd5, 0x9082, 0x001b,\r
-+      0x0002, 0x1d1c, 0x1d1a, 0x1d1a, 0x1d1a, 0x1d1a, 0x1d1a, 0x1d20,\r
-+      0x1d1a, 0x1d1a, 0x1d1a, 0x1d1a, 0x1d1a, 0x1d24, 0x1d1a, 0x1d1a,\r
-+      0x1d1a, 0x1d1a, 0x1d1a, 0x1d28, 0x1d1a, 0x1d1a, 0x1d1a, 0x1d1a,\r
-+      0x1d1a, 0x1d2c, 0x080c, 0x0dd5, 0xa774, 0xa678, 0x0804, 0x1dfe,\r
-+      0xa78c, 0xa690, 0x0804, 0x1dfe, 0xa7a4, 0xa6a8, 0x0804, 0x1dfe,\r
-+      0xa7bc, 0xa6c0, 0x0804, 0x1dfe, 0xa7d4, 0xa6d8, 0x0804, 0x1dfe,\r
-+      0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002,\r
-+      0x1d53, 0x1d53, 0x1d55, 0x1d53, 0x1d53, 0x1d53, 0x1d5b, 0x1d53,\r
-+      0x1d53, 0x1d53, 0x1d61, 0x1d53, 0x1d53, 0x1d53, 0x1d67, 0x1d53,\r
-+      0x1d53, 0x1d53, 0x1d6d, 0x1d53, 0x1d53, 0x1d53, 0x1d73, 0x1d53,\r
-+      0x1d53, 0x1d53, 0x1d79, 0x080c, 0x0dd5, 0xa574, 0xa478, 0xa37c,\r
-+      0xa280, 0x0804, 0x1dfe, 0xa584, 0xa488, 0xa38c, 0xa290, 0x0804,\r
-+      0x1dfe, 0xa594, 0xa498, 0xa39c, 0xa2a0, 0x0804, 0x1dfe, 0xa5a4,\r
-+      0xa4a8, 0xa3ac, 0xa2b0, 0x0804, 0x1dfe, 0xa5b4, 0xa4b8, 0xa3bc,\r
-+      0xa2c0, 0x0804, 0x1dfe, 0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0, 0x0804,\r
-+      0x1dfe, 0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0, 0x0804, 0x1dfe, 0x2c05,\r
-+      0x908a, 0x0034, 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x1da2,\r
-+      0x1da0, 0x1da0, 0x1da0, 0x1da0, 0x1da0, 0x1daa, 0x1da0, 0x1da0,\r
-+      0x1da0, 0x1da0, 0x1da0, 0x1db2, 0x1da0, 0x1da0, 0x1da0, 0x1da0,\r
-+      0x1da0, 0x1dba, 0x1da0, 0x1da0, 0x1da0, 0x1da0, 0x1da0, 0x1dc1,\r
-+      0x080c, 0x0dd5, 0xa56c, 0xa470, 0xa774, 0xa678, 0xa37c, 0xa280,\r
-+      0x0804, 0x1dfe, 0xa584, 0xa488, 0xa78c, 0xa690, 0xa394, 0xa298,\r
-+      0x0804, 0x1dfe, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac, 0xa2b0,\r
-+      0x0804, 0x1dfe, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4, 0xa2c8,\r
-+      0x04e8, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0, 0x04b0,\r
-+      0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x1518, 0x080c, 0x2048,\r
-+      0x1904, 0x1ccb, 0x900e, 0x0804, 0x1e68, 0xab64, 0x939c, 0x00ff,\r
-+      0x9386, 0x0048, 0x1180, 0x00c6, 0x7004, 0x2060, 0x6004, 0x9086,\r
-+      0x0043, 0x00ce, 0x0904, 0x1d7f, 0xab9c, 0x9016, 0xad8c, 0xac90,\r
-+      0xaf94, 0xae98, 0x0098, 0x9386, 0x0008, 0x0904, 0x1d7f, 0x080c,\r
-+      0x0dd5, 0xa964, 0x918c, 0x00ff, 0x9186, 0x0013, 0x0904, 0x1d30,\r
-+      0x9186, 0x001b, 0x0904, 0x1d7f, 0x080c, 0x0dd5, 0x2009, 0x030f,\r
-+      0x2104, 0xd0fc, 0x0530, 0x0066, 0x2009, 0x0306, 0x2104, 0x9084,\r
-+      0x0030, 0x15c8, 0x2031, 0x1000, 0x200b, 0x4000, 0x2600, 0x9302,\r
-+      0x928b, 0x0000, 0xa82e, 0xa932, 0x0278, 0x9105, 0x0168, 0x2011,\r
-+      0x0000, 0x2618, 0x2600, 0x9500, 0xa81e, 0x9481, 0x0000, 0xa822,\r
-+      0xa880, 0xc0fd, 0xa882, 0x0020, 0xa82f, 0x0000, 0xa833, 0x0000,\r
-+      0x006e, 0x7b12, 0x7a16, 0x7d02, 0x7c06, 0x7f0a, 0x7e0e, 0x782b,\r
-+      0x0001, 0x7000, 0x8000, 0x7002, 0xa83c, 0x9300, 0xa83e, 0xa840,\r
-+      0x9201, 0xa842, 0x700c, 0x9300, 0x700e, 0x7010, 0x9201, 0x7012,\r
-+      0x080c, 0x2048, 0x0428, 0x2031, 0x0080, 0x9584, 0x007f, 0x0108,\r
-+      0x9632, 0x7124, 0x7000, 0x9086, 0x0000, 0x1198, 0xc185, 0x7126,\r
-+      0x2009, 0x0306, 0x2104, 0xd0b4, 0x1904, 0x1e0e, 0x200b, 0x4040,\r
-+      0x2009, 0x1a7f, 0x2104, 0x8000, 0x0a04, 0x1e0e, 0x200a, 0x0804,\r
-+      0x1e0e, 0xc18d, 0x7126, 0xd184, 0x1d58, 0x0804, 0x1e0e, 0x9006,\r
-+      0x002e, 0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c,\r
-+      0x0dd5, 0x0026, 0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004,\r
-+      0x7003, 0x0000, 0x7004, 0x0016, 0x080c, 0x1cbe, 0x001e, 0x2060,\r
-+      0x6014, 0x2048, 0x080c, 0xcb35, 0x0118, 0xa880, 0xc0bd, 0xa882,\r
-+      0x6020, 0x9086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8, 0x2001,\r
-+      0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89a,\r
-+      0x60c8, 0xa896, 0x7004, 0x2060, 0x00c6, 0x080c, 0xc768, 0x00ce,\r
-+      0x2001, 0x19f6, 0x2004, 0x9c06, 0x1160, 0x2009, 0x0040, 0x080c,\r
-+      0x23d2, 0x080c, 0xa7cc, 0x2011, 0x0000, 0x080c, 0xa65d, 0x080c,\r
-+      0x97b9, 0x002e, 0x0804, 0x1ff8, 0x0126, 0x2091, 0x2400, 0xa858,\r
-+      0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1e71,\r
-+      0x7000, 0x0002, 0x1ff8, 0x1ec6, 0x1f46, 0x1ff6, 0x8001, 0x7002,\r
-+      0x7027, 0x0000, 0xd19c, 0x1158, 0x8aff, 0x0904, 0x1f13, 0x080c,\r
-+      0x1cc5, 0x0904, 0x1ff8, 0x080c, 0x1cc5, 0x0804, 0x1ff8, 0x782b,\r
-+      0x0004, 0xd194, 0x0148, 0xa880, 0xc0fc, 0xa882, 0x8aff, 0x1518,\r
-+      0xa87c, 0xc0f5, 0xa87e, 0x00f8, 0x0026, 0x0036, 0xab3c, 0xaa40,\r
-+      0x0016, 0x7910, 0xa82c, 0x9100, 0xa82e, 0x7914, 0xa830, 0x9101,\r
-+      0xa832, 0x001e, 0x7810, 0x931a, 0x7814, 0x9213, 0x7800, 0xa81e,\r
-+      0x7804, 0xa822, 0xab3e, 0xaa42, 0x003e, 0x002e, 0x080c, 0x2063,\r
-+      0xa880, 0xc0fd, 0xa882, 0x2a00, 0xa816, 0x2800, 0xa85a, 0x2c00,\r
-+      0xa812, 0x7003, 0x0000, 0x2009, 0x0306, 0x200b, 0x4800, 0x7027,\r
-+      0x0000, 0x0804, 0x1ff8, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818,\r
-+      0x0006, 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012,\r
-+      0x7816, 0x0036, 0x2019, 0x1000, 0x8319, 0x090c, 0x0dd5, 0x7820,\r
-+      0xd0bc, 0x1dd0, 0x003e, 0x79c8, 0x000e, 0x9102, 0x001e, 0x0006,\r
-+      0x0016, 0x79c4, 0x000e, 0x9103, 0x78c6, 0x000e, 0x78ca, 0x9284,\r
-+      0x1984, 0x9085, 0x0012, 0x7816, 0x002e, 0x00fe, 0x782b, 0x0008,\r
-+      0x7003, 0x0000, 0x080c, 0x1cbe, 0x0804, 0x1ff8, 0x8001, 0x7002,\r
-+      0x7024, 0x8004, 0x7026, 0xd194, 0x0170, 0x782c, 0xd0fc, 0x1904,\r
-+      0x1eb9, 0xd19c, 0x1904, 0x1ff4, 0x8aff, 0x0904, 0x1ff8, 0x080c,\r
-+      0x1cc5, 0x0804, 0x1ff8, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x080c,\r
-+      0x2063, 0xdd9c, 0x1904, 0x1fb3, 0x2c05, 0x908a, 0x0036, 0x1a0c,\r
-+      0x0dd5, 0x9082, 0x001b, 0x0002, 0x1f87, 0x1f87, 0x1f89, 0x1f87,\r
-+      0x1f87, 0x1f87, 0x1f8f, 0x1f87, 0x1f87, 0x1f87, 0x1f95, 0x1f87,\r
-+      0x1f87, 0x1f87, 0x1f9b, 0x1f87, 0x1f87, 0x1f87, 0x1fa1, 0x1f87,\r
-+      0x1f87, 0x1f87, 0x1fa7, 0x1f87, 0x1f87, 0x1f87, 0x1fad, 0x080c,\r
-+      0x0dd5, 0xa07c, 0x931a, 0xa080, 0x9213, 0x0804, 0x1ee8, 0xa08c,\r
-+      0x931a, 0xa090, 0x9213, 0x0804, 0x1ee8, 0xa09c, 0x931a, 0xa0a0,\r
-+      0x9213, 0x0804, 0x1ee8, 0xa0ac, 0x931a, 0xa0b0, 0x9213, 0x0804,\r
-+      0x1ee8, 0xa0bc, 0x931a, 0xa0c0, 0x9213, 0x0804, 0x1ee8, 0xa0cc,\r
-+      0x931a, 0xa0d0, 0x9213, 0x0804, 0x1ee8, 0xa0dc, 0x931a, 0xa0e0,\r
-+      0x9213, 0x0804, 0x1ee8, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0dd5,\r
-+      0x9082, 0x001b, 0x0002, 0x1fd6, 0x1fd4, 0x1fd4, 0x1fd4, 0x1fd4,\r
-+      0x1fd4, 0x1fdc, 0x1fd4, 0x1fd4, 0x1fd4, 0x1fd4, 0x1fd4, 0x1fe2,\r
-+      0x1fd4, 0x1fd4, 0x1fd4, 0x1fd4, 0x1fd4, 0x1fe8, 0x1fd4, 0x1fd4,\r
-+      0x1fd4, 0x1fd4, 0x1fd4, 0x1fee, 0x080c, 0x0dd5, 0xa07c, 0x931a,\r
-+      0xa080, 0x9213, 0x0804, 0x1ee8, 0xa094, 0x931a, 0xa098, 0x9213,\r
-+      0x0804, 0x1ee8, 0xa0ac, 0x931a, 0xa0b0, 0x9213, 0x0804, 0x1ee8,\r
-+      0xa0c4, 0x931a, 0xa0c8, 0x9213, 0x0804, 0x1ee8, 0xa0dc, 0x931a,\r
-+      0xa0e0, 0x9213, 0x0804, 0x1ee8, 0x0804, 0x1ee4, 0x080c, 0x0dd5,\r
-+      0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a66, 0x7000, 0x9086,\r
-+      0x0000, 0x0904, 0x2043, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c,\r
-+      0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188,\r
-+      0x080c, 0xea0a, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dd5,\r
-+      0x0016, 0x2009, 0x0040, 0x080c, 0x23d2, 0x001e, 0x2001, 0x020c,\r
-+      0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,\r
-+      0x1120, 0x2009, 0x0040, 0x080c, 0x23d2, 0x782c, 0xd0fc, 0x09a8,\r
-+      0x080c, 0x1eb4, 0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004,\r
-+      0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x23d2, 0x782b,\r
-+      0x0002, 0x7003, 0x0000, 0x080c, 0x1cbe, 0x00ee, 0x00fe, 0x0005,\r
-+      0xa880, 0xd0fc, 0x11a8, 0x8c60, 0x2c05, 0x9005, 0x0110, 0x8a51,\r
-+      0x0005, 0xa004, 0x9005, 0x0168, 0xa85a, 0x2040, 0xa064, 0x9084,\r
-+      0x000f, 0x9080, 0x2090, 0x2065, 0x8cff, 0x090c, 0x0dd5, 0x8a51,\r
-+      0x0005, 0x2050, 0x0005, 0xa880, 0xd0fc, 0x11b8, 0x8a50, 0x8c61,\r
-+      0x2c05, 0x9005, 0x1190, 0x2800, 0x9906, 0x0120, 0xa000, 0x9005,\r
-+      0x1108, 0x2900, 0x2040, 0xa85a, 0xa064, 0x9084, 0x000f, 0x9080,\r
-+      0x20a0, 0x2065, 0x8cff, 0x090c, 0x0dd5, 0x0005, 0x0000, 0x001d,\r
-+      0x0021, 0x0025, 0x0029, 0x002d, 0x0031, 0x0035, 0x0000, 0x001b,\r
-+      0x0021, 0x0027, 0x002d, 0x0033, 0x0000, 0x0000, 0x0023, 0x0000,\r
-+      0x0000, 0x2083, 0x207f, 0x2083, 0x2083, 0x208d, 0x0000, 0x2083,\r
-+      0x208a, 0x208a, 0x2087, 0x208a, 0x208a, 0x0000, 0x208d, 0x208a,\r
-+      0x0000, 0x2085, 0x2085, 0x0000, 0x2085, 0x208d, 0x0000, 0x2085,\r
-+      0x208b, 0x208b, 0x208b, 0x0000, 0x208b, 0x0000, 0x208d, 0x208b,\r
-+      0x00c6, 0x00d6, 0x0086, 0xab42, 0xac3e, 0xa888, 0x9055, 0x0904,\r
-+      0x228f, 0x2940, 0xa064, 0x90ec, 0x000f, 0x9084, 0x00ff, 0x9086,\r
-+      0x0008, 0x1118, 0x2061, 0x208b, 0x00d0, 0x9de0, 0x2090, 0x9d86,\r
-+      0x0007, 0x0130, 0x9d86, 0x000e, 0x0118, 0x9d86, 0x000f, 0x1120,\r
-+      0xa08c, 0x9422, 0xa090, 0x931b, 0x2c05, 0x9065, 0x1140, 0x0310,\r
-+      0x0804, 0x228f, 0xa004, 0x9045, 0x0904, 0x228f, 0x08d8, 0x2c05,\r
-+      0x9005, 0x0904, 0x2177, 0xdd9c, 0x1904, 0x2133, 0x908a, 0x0036,\r
-+      0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x2108, 0x2108, 0x210a,\r
-+      0x2108, 0x2108, 0x2108, 0x2110, 0x2108, 0x2108, 0x2108, 0x2116,\r
-+      0x2108, 0x2108, 0x2108, 0x211c, 0x2108, 0x2108, 0x2108, 0x2122,\r
-+      0x2108, 0x2108, 0x2108, 0x2128, 0x2108, 0x2108, 0x2108, 0x212e,\r
-+      0x080c, 0x0dd5, 0xa07c, 0x9422, 0xa080, 0x931b, 0x0804, 0x216d,\r
-+      0xa08c, 0x9422, 0xa090, 0x931b, 0x0804, 0x216d, 0xa09c, 0x9422,\r
-+      0xa0a0, 0x931b, 0x0804, 0x216d, 0xa0ac, 0x9422, 0xa0b0, 0x931b,\r
-+      0x0804, 0x216d, 0xa0bc, 0x9422, 0xa0c0, 0x931b, 0x0804, 0x216d,\r
-+      0xa0cc, 0x9422, 0xa0d0, 0x931b, 0x0804, 0x216d, 0xa0dc, 0x9422,\r
-+      0xa0e0, 0x931b, 0x04d0, 0x908a, 0x0034, 0x1a0c, 0x0dd5, 0x9082,\r
-+      0x001b, 0x0002, 0x2155, 0x2153, 0x2153, 0x2153, 0x2153, 0x2153,\r
-+      0x215a, 0x2153, 0x2153, 0x2153, 0x2153, 0x2153, 0x215f, 0x2153,\r
-+      0x2153, 0x2153, 0x2153, 0x2153, 0x2164, 0x2153, 0x2153, 0x2153,\r
-+      0x2153, 0x2153, 0x2169, 0x080c, 0x0dd5, 0xa07c, 0x9422, 0xa080,\r
-+      0x931b, 0x0098, 0xa094, 0x9422, 0xa098, 0x931b, 0x0070, 0xa0ac,\r
-+      0x9422, 0xa0b0, 0x931b, 0x0048, 0xa0c4, 0x9422, 0xa0c8, 0x931b,\r
-+      0x0020, 0xa0dc, 0x9422, 0xa0e0, 0x931b, 0x0630, 0x2300, 0x9405,\r
-+      0x0160, 0x8a51, 0x0904, 0x228f, 0x8c60, 0x0804, 0x20df, 0xa004,\r
-+      0x9045, 0x0904, 0x228f, 0x0804, 0x20ba, 0x8a51, 0x0904, 0x228f,\r
-+      0x8c60, 0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, 0x0904, 0x228f,\r
-+      0xa064, 0x90ec, 0x000f, 0x9de0, 0x2090, 0x2c05, 0x2060, 0xa880,\r
-+      0xc0fc, 0xa882, 0x0804, 0x2284, 0x2c05, 0x8422, 0x8420, 0x831a,\r
-+      0x9399, 0x0000, 0xac2e, 0xab32, 0xdd9c, 0x1904, 0x2221, 0x9082,\r
-+      0x001b, 0x0002, 0x21bd, 0x21bd, 0x21bf, 0x21bd, 0x21bd, 0x21bd,\r
-+      0x21cd, 0x21bd, 0x21bd, 0x21bd, 0x21db, 0x21bd, 0x21bd, 0x21bd,\r
-+      0x21e9, 0x21bd, 0x21bd, 0x21bd, 0x21f7, 0x21bd, 0x21bd, 0x21bd,\r
-+      0x2205, 0x21bd, 0x21bd, 0x21bd, 0x2213, 0x080c, 0x0dd5, 0xa17c,\r
-+      0x2400, 0x9122, 0xa180, 0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa074,\r
-+      0x9420, 0xa078, 0x9319, 0x0804, 0x227f, 0xa18c, 0x2400, 0x9122,\r
-+      0xa190, 0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa084, 0x9420, 0xa088,\r
-+      0x9319, 0x0804, 0x227f, 0xa19c, 0x2400, 0x9122, 0xa1a0, 0x2300,\r
-+      0x911b, 0x0a0c, 0x0dd5, 0xa094, 0x9420, 0xa098, 0x9319, 0x0804,\r
-+      0x227f, 0xa1ac, 0x2400, 0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c,\r
-+      0x0dd5, 0xa0a4, 0x9420, 0xa0a8, 0x9319, 0x0804, 0x227f, 0xa1bc,\r
-+      0x2400, 0x9122, 0xa1c0, 0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa0b4,\r
-+      0x9420, 0xa0b8, 0x9319, 0x0804, 0x227f, 0xa1cc, 0x2400, 0x9122,\r
-+      0xa1d0, 0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa0c4, 0x9420, 0xa0c8,\r
-+      0x9319, 0x0804, 0x227f, 0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300,\r
-+      0x911b, 0x0a0c, 0x0dd5, 0xa0d4, 0x9420, 0xa0d8, 0x9319, 0x0804,\r
-+      0x227f, 0x9082, 0x001b, 0x0002, 0x223f, 0x223d, 0x223d, 0x223d,\r
-+      0x223d, 0x223d, 0x224c, 0x223d, 0x223d, 0x223d, 0x223d, 0x223d,\r
-+      0x2259, 0x223d, 0x223d, 0x223d, 0x223d, 0x223d, 0x2266, 0x223d,\r
-+      0x223d, 0x223d, 0x223d, 0x223d, 0x2273, 0x080c, 0x0dd5, 0xa17c,\r
-+      0x2400, 0x9122, 0xa180, 0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa06c,\r
-+      0x9420, 0xa070, 0x9319, 0x0498, 0xa194, 0x2400, 0x9122, 0xa198,\r
-+      0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa084, 0x9420, 0xa088, 0x9319,\r
-+      0x0430, 0xa1ac, 0x2400, 0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c,\r
-+      0x0dd5, 0xa09c, 0x9420, 0xa0a0, 0x9319, 0x00c8, 0xa1c4, 0x2400,\r
-+      0x9122, 0xa1c8, 0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa0b4, 0x9420,\r
-+      0xa0b8, 0x9319, 0x0060, 0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300,\r
-+      0x911b, 0x0a0c, 0x0dd5, 0xa0cc, 0x9420, 0xa0d0, 0x9319, 0xac1e,\r
-+      0xab22, 0xa880, 0xc0fd, 0xa882, 0x2800, 0xa85a, 0x2c00, 0xa812,\r
-+      0x2a00, 0xa816, 0x000e, 0x000e, 0x000e, 0x9006, 0x0028, 0x008e,\r
-+      0x00de, 0x00ce, 0x9085, 0x0001, 0x0005, 0x2001, 0x0005, 0x2004,\r
-+      0xd0bc, 0x190c, 0x0dce, 0x9084, 0x0007, 0x0002, 0x22b0, 0x1eb4,\r
-+      0x22b0, 0x22a6, 0x22a9, 0x22ac, 0x22a9, 0x22ac, 0x080c, 0x1eb4,\r
-+      0x0005, 0x080c, 0x11a3, 0x0005, 0x080c, 0x1eb4, 0x080c, 0x11a3,\r
-+      0x0005, 0x0126, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x0260,\r
-+      0x2069, 0x1800, 0x7817, 0x0000, 0x789b, 0x0814, 0x78a3, 0x0406,\r
-+      0x789f, 0x0410, 0x2009, 0x013b, 0x200b, 0x0400, 0x781b, 0x0002,\r
-+      0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005,\r
-+      0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x23cf, 0x7900, 0xd1dc,\r
-+      0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x22f7,\r
-+      0x22ef, 0x7d9d, 0x22ef, 0x22f1, 0x22f1, 0x22f1, 0x22f1, 0x7d83,\r
-+      0x22ef, 0x22f3, 0x22ef, 0x22f1, 0x22ef, 0x22f1, 0x22ef, 0x080c,\r
-+      0x0dd5, 0x0031, 0x0020, 0x080c, 0x7d83, 0x080c, 0x7d9d, 0x0005,\r
-+      0x0006, 0x0016, 0x0026, 0x080c, 0xea0a, 0x7930, 0x9184, 0x0003,\r
-+      0x01c0, 0x2001, 0x19f6, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133,\r
-+      0x2004, 0x9005, 0x090c, 0x0dd5, 0x00c6, 0x2001, 0x19f6, 0x2064,\r
-+      0x080c, 0xc768, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x23d2,\r
-+      0x00d0, 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160,\r
-+      0x080c, 0x73bc, 0x1138, 0x080c, 0x76a4, 0x080c, 0x601a, 0x080c,\r
-+      0x72ee, 0x0010, 0x080c, 0x5ed9, 0x080c, 0x7e4c, 0x0041, 0x0018,\r
-+      0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6,\r
-+      0x0036, 0x0046, 0x0056, 0x2071, 0x1a62, 0x080c, 0x1aa9, 0x005e,\r
-+      0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071,\r
-+      0x1800, 0x7128, 0x2001, 0x196f, 0x2102, 0x2001, 0x1977, 0x2102,\r
-+      0x2001, 0x013b, 0x2102, 0x2079, 0x0200, 0x2001, 0x0201, 0x789e,\r
-+      0x78a3, 0x0200, 0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x9398,\r
-+      0x0005, 0x2320, 0x9182, 0x0204, 0x1230, 0x2011, 0x0008, 0x8423,\r
-+      0x8423, 0x8423, 0x0488, 0x9182, 0x024c, 0x1240, 0x2011, 0x0007,\r
-+      0x8403, 0x8003, 0x9400, 0x9400, 0x9420, 0x0430, 0x9182, 0x02bc,\r
-+      0x1238, 0x2011, 0x0006, 0x8403, 0x8003, 0x9400, 0x9420, 0x00e0,\r
-+      0x9182, 0x034c, 0x1230, 0x2011, 0x0005, 0x8403, 0x8003, 0x9420,\r
-+      0x0098, 0x9182, 0x042c, 0x1228, 0x2011, 0x0004, 0x8423, 0x8423,\r
-+      0x0058, 0x9182, 0x059c, 0x1228, 0x2011, 0x0003, 0x8403, 0x9420,\r
-+      0x0018, 0x2011, 0x0002, 0x8423, 0x9482, 0x0228, 0x8002, 0x8020,\r
-+      0x8301, 0x9402, 0x0110, 0x0208, 0x8321, 0x8217, 0x8203, 0x9405,\r
-+      0x789a, 0x012e, 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6814,\r
-+      0x9084, 0xffc0, 0x910d, 0x6916, 0x00de, 0x000e, 0x0005, 0x00d6,\r
-+      0x2069, 0x0200, 0x9005, 0x6810, 0x0110, 0xc0a5, 0x0008, 0xc0a4,\r
-+      0x6812, 0x00de, 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6810,\r
-+      0x9084, 0xfff8, 0x910d, 0x6912, 0x00de, 0x000e, 0x0005, 0x7938,\r
-+      0x080c, 0x0dce, 0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001,\r
-+      0xa001, 0xa001, 0xa001, 0xa001, 0x7902, 0xa001, 0xa001, 0xa001,\r
-+      0xa001, 0xa001, 0xa001, 0x00fe, 0x0005, 0x0126, 0x2091, 0x2800,\r
-+      0x2061, 0x0100, 0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x2c3e,\r
-+      0x080c, 0x2b59, 0x6054, 0x8004, 0x8004, 0x8004, 0x8004, 0x9084,\r
-+      0x000c, 0x6150, 0x918c, 0xfff3, 0x9105, 0x6052, 0x6050, 0x9084,\r
-+      0xb17f, 0x9085, 0x2000, 0x6052, 0x2009, 0x199d, 0x2011, 0x199e,\r
-+      0x6358, 0x939c, 0x38f0, 0x2320, 0x080c, 0x2b9d, 0x1238, 0x939d,\r
-+      0x4003, 0x94a5, 0x8603, 0x230a, 0x2412, 0x0030, 0x939d, 0x0203,\r
-+      0x94a5, 0x8603, 0x230a, 0x2412, 0x9006, 0x080c, 0x2b88, 0x9006,\r
-+      0x080c, 0x2b6b, 0x20a9, 0x0012, 0x1d04, 0x2424, 0x2091, 0x6000,\r
-+      0x1f04, 0x2424, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085,\r
-+      0x0400, 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026, 0x080c, 0x2877,\r
-+      0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x2887, 0x60e7, 0x0000,\r
-+      0x61ea, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f,\r
-+      0x0080, 0x602f, 0x0000, 0x6007, 0x349f, 0x60bb, 0x0000, 0x20a9,\r
-+      0x0018, 0x60bf, 0x0000, 0x1f04, 0x2451, 0x60bb, 0x0000, 0x60bf,\r
-+      0x0108, 0x60bf, 0x0012, 0x60bf, 0x0405, 0x60bf, 0x0014, 0x60bf,\r
-+      0x0320, 0x60bf, 0x0018, 0x601b, 0x00f0, 0x601f, 0x001e, 0x600f,\r
-+      0x006b, 0x602b, 0x402f, 0x012e, 0x0005, 0x00f6, 0x2079, 0x0140,\r
-+      0x78c3, 0x0080, 0x78c3, 0x0083, 0x78c3, 0x0000, 0x00fe, 0x0005,\r
-+      0x2001, 0x1835, 0x2003, 0x0000, 0x2001, 0x1834, 0x2003, 0x0001,\r
-+      0x0005, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x6124,\r
-+      0x0066, 0x2031, 0x1837, 0x2634, 0x96b4, 0x0028, 0x006e, 0x1138,\r
-+      0x6020, 0xd1bc, 0x0120, 0xd0bc, 0x1168, 0xd0b4, 0x1198, 0x9184,\r
-+      0x5e2c, 0x1118, 0x9184, 0x0007, 0x00aa, 0x9195, 0x0004, 0x9284,\r
-+      0x0007, 0x0082, 0x0016, 0x2001, 0x188b, 0x200c, 0xd184, 0x001e,\r
-+      0x0d70, 0x0c98, 0x0016, 0x2001, 0x188b, 0x200c, 0xd194, 0x001e,\r
-+      0x0d30, 0x0c58, 0x24d4, 0x24ba, 0x24bd, 0x24c0, 0x24c5, 0x24c7,\r
-+      0x24cb, 0x24cf, 0x080c, 0x8fd5, 0x00b8, 0x080c, 0x90a2, 0x00a0,\r
-+      0x080c, 0x90a2, 0x080c, 0x8fd5, 0x0078, 0x0099, 0x0068, 0x080c,\r
-+      0x8fd5, 0x0079, 0x0048, 0x080c, 0x90a2, 0x0059, 0x0028, 0x080c,\r
-+      0x90a2, 0x080c, 0x8fd5, 0x0029, 0x002e, 0x001e, 0x000e, 0x012e,\r
-+      0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904,\r
-+      0x273c, 0xd1f4, 0x190c, 0x0dce, 0x080c, 0x73bc, 0x0904, 0x252f,\r
-+      0x080c, 0xd230, 0x1120, 0x7000, 0x9086, 0x0003, 0x0570, 0x6024,\r
-+      0x9084, 0x1800, 0x0550, 0x080c, 0x73df, 0x0118, 0x080c, 0x73cd,\r
-+      0x1520, 0x6027, 0x0020, 0x6043, 0x0000, 0x080c, 0xd230, 0x0168,\r
-+      0x080c, 0x73df, 0x1150, 0x2001, 0x19a7, 0x2003, 0x0001, 0x6027,\r
-+      0x1800, 0x080c, 0x7252, 0x0804, 0x273f, 0x70a4, 0x9005, 0x1150,\r
-+      0x70a7, 0x0001, 0x00d6, 0x2069, 0x0140, 0x080c, 0x7413, 0x00de,\r
-+      0x1904, 0x273f, 0x080c, 0x76ae, 0x0428, 0x080c, 0x73df, 0x1590,\r
-+      0x6024, 0x9084, 0x1800, 0x1108, 0x0468, 0x080c, 0x76ae, 0x080c,\r
-+      0x76a4, 0x080c, 0x601a, 0x080c, 0x72ee, 0x0804, 0x273c, 0xd1ac,\r
-+      0x1508, 0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1178, 0xd0d4, 0x1190,\r
-+      0xd0cc, 0x0130, 0x7098, 0x9086, 0x0028, 0x1110, 0x080c, 0x7591,\r
-+      0x0804, 0x273c, 0x080c, 0x76a9, 0x0048, 0x2001, 0x197d, 0x2003,\r
-+      0x0002, 0x0020, 0x080c, 0x74f6, 0x0804, 0x273c, 0x080c, 0x762c,\r
-+      0x0804, 0x273c, 0x6220, 0xd1bc, 0x0138, 0xd2bc, 0x1904, 0x27af,\r
-+      0xd2b4, 0x1904, 0x27c2, 0x0000, 0xd1ac, 0x0904, 0x2651, 0x0036,\r
-+      0x6328, 0xc3bc, 0x632a, 0x003e, 0x080c, 0x73bc, 0x11c0, 0x6027,\r
-+      0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0x73d6, 0x1158, 0x080c,\r
-+      0x76a4, 0x080c, 0x601a, 0x080c, 0x72ee, 0x003e, 0x002e, 0x000e,\r
-+      0x00ae, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c, 0x7394, 0x0016,\r
-+      0x0046, 0x00c6, 0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100,\r
-+      0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74da, 0x948c, 0xff00,\r
-+      0x7038, 0xd084, 0x0178, 0x9186, 0xf800, 0x1160, 0x7048, 0xd084,\r
-+      0x1148, 0xc085, 0x704a, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c,\r
-+      0x4b04, 0x003e, 0x080c, 0xd229, 0x1904, 0x262e, 0x9196, 0xff00,\r
-+      0x05a8, 0x7060, 0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116,\r
-+      0x0568, 0x7130, 0xd184, 0x1550, 0x080c, 0x3319, 0x0128, 0xc18d,\r
-+      0x7132, 0x080c, 0x696a, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130,\r
-+      0x6248, 0x9294, 0xff00, 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c,\r
-+      0x0904, 0x262e, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c,\r
-+      0xd1ac, 0x1904, 0x262e, 0xc1ad, 0x2102, 0x0036, 0x73d8, 0x2011,\r
-+      0x8013, 0x080c, 0x4b04, 0x003e, 0x0804, 0x262e, 0x7038, 0xd08c,\r
-+      0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x262e, 0xc1ad,\r
-+      0x2102, 0x0036, 0x73d8, 0x2011, 0x8013, 0x080c, 0x4b04, 0x003e,\r
-+      0x7130, 0xc185, 0x7132, 0x2011, 0x1848, 0x220c, 0xd1a4, 0x01f0,\r
-+      0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x86dd, 0x2019,\r
-+      0x000e, 0x00c6, 0x2061, 0x0000, 0x080c, 0xe522, 0x00ce, 0x9484,\r
-+      0x00ff, 0x9080, 0x3325, 0x200d, 0x918c, 0xff00, 0x810f, 0x2120,\r
-+      0x9006, 0x2009, 0x000e, 0x080c, 0xe5ae, 0x001e, 0x0016, 0x2009,\r
-+      0x0002, 0x2019, 0x0004, 0x080c, 0x318a, 0x001e, 0x0078, 0x0156,\r
-+      0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x65ff, 0x1110, 0x080c,\r
-+      0x6034, 0x8108, 0x1f04, 0x2624, 0x00be, 0x015e, 0x00ce, 0x004e,\r
-+      0x080c, 0xadd2, 0x60e3, 0x0000, 0x001e, 0x2001, 0x1800, 0x2014,\r
-+      0x9296, 0x0004, 0x1170, 0xd19c, 0x11a0, 0x2011, 0x180c, 0x2214,\r
-+      0xd29c, 0x1120, 0x6204, 0x9295, 0x0002, 0x6206, 0x6228, 0xc29d,\r
-+      0x622a, 0x2003, 0x0001, 0x2001, 0x1826, 0x2003, 0x0000, 0x6027,\r
-+      0x0020, 0xd194, 0x0904, 0x273c, 0x0016, 0x6220, 0xd2b4, 0x0904,\r
-+      0x26d9, 0x080c, 0x8579, 0x080c, 0xa273, 0x6027, 0x0004, 0x00f6,\r
-+      0x2019, 0x19f0, 0x2304, 0x907d, 0x0904, 0x26a8, 0x7804, 0x9086,\r
-+      0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140,\r
-+      0x782c, 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001, 0x0003,\r
-+      0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001, 0x1df0,\r
-+      0x080c, 0x2cff, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9, 0x0009,\r
-+      0x080c, 0x2c19, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001, 0x0100,\r
-+      0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x080c, 0x9588, 0x080c,\r
-+      0x968d, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, 0xae61,\r
-+      0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae, 0x0005,\r
-+      0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110,\r
-+      0x080c, 0x2cff, 0x00de, 0x00c6, 0x2061, 0x19e7, 0x6028, 0x080c,\r
-+      0xd230, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, 0x00c8,\r
-+      0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0xa24f, 0x0804, 0x273b,\r
-+      0x2061, 0x0100, 0x62c0, 0x080c, 0xac5d, 0x2019, 0x19f0, 0x2304,\r
-+      0x9065, 0x0120, 0x2009, 0x0027, 0x080c, 0xaedc, 0x00ce, 0x0804,\r
-+      0x273b, 0xd2bc, 0x0904, 0x2722, 0x080c, 0x8586, 0x6014, 0x9084,\r
-+      0x1984, 0x9085, 0x0010, 0x6016, 0x6027, 0x0004, 0x00d6, 0x2069,\r
-+      0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2cff, 0x00de,\r
-+      0x00c6, 0x2061, 0x19e7, 0x6044, 0x080c, 0xd230, 0x0120, 0x909a,\r
-+      0x0003, 0x1658, 0x0018, 0x909a, 0x00c8, 0x1638, 0x8000, 0x6046,\r
-+      0x603c, 0x00ce, 0x9005, 0x05b8, 0x2009, 0x07d0, 0x080c, 0x857e,\r
-+      0x9080, 0x0008, 0x2004, 0x9086, 0x0006, 0x1138, 0x6114, 0x918c,\r
-+      0x1984, 0x918d, 0x0012, 0x6116, 0x0430, 0x9080, 0x0008, 0x2004,\r
-+      0x9086, 0x0009, 0x0d98, 0x6114, 0x918c, 0x1984, 0x918d, 0x0016,\r
-+      0x6116, 0x00c8, 0x6027, 0x0004, 0x00b0, 0x0036, 0x2019, 0x0001,\r
-+      0x080c, 0xa5b6, 0x003e, 0x2019, 0x19f6, 0x2304, 0x9065, 0x0150,\r
-+      0x2009, 0x004f, 0x6020, 0x9086, 0x0009, 0x1110, 0x2009, 0x004f,\r
-+      0x080c, 0xaedc, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x27aa, 0x7038,\r
-+      0xd0ac, 0x1904, 0x2783, 0x0016, 0x0156, 0x6027, 0x0008, 0x6050,\r
-+      0x9085, 0x0040, 0x6052, 0x6050, 0x9084, 0xfbcf, 0x6052, 0x080c,\r
-+      0x2c38, 0x9085, 0x2000, 0x6052, 0x20a9, 0x0012, 0x1d04, 0x2756,\r
-+      0x080c, 0x85ad, 0x1f04, 0x2756, 0x6050, 0x9085, 0x0400, 0x9084,\r
-+      0xdfbf, 0x6052, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x2764, 0x6150,\r
-+      0x9185, 0x1400, 0x6052, 0x20a9, 0x0366, 0x1d04, 0x276d, 0x080c,\r
-+      0x85ad, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027,\r
-+      0x0008, 0x0480, 0x080c, 0x2c00, 0x1f04, 0x276d, 0x015e, 0x6152,\r
-+      0x001e, 0x6027, 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c,\r
-+      0xadd2, 0x60e3, 0x0000, 0x080c, 0xe9e9, 0x080c, 0xea04, 0x080c,\r
-+      0x56d3, 0xd0fc, 0x1138, 0x080c, 0xd229, 0x1120, 0x9085, 0x0001,\r
-+      0x080c, 0x7403, 0x9006, 0x080c, 0x2cef, 0x2009, 0x0002, 0x080c,\r
-+      0x2c3e, 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x080c,\r
-+      0x0bae, 0x001e, 0x918c, 0xffd0, 0x6126, 0x00ae, 0x0005, 0x0016,\r
-+      0x2001, 0x188b, 0x200c, 0xd184, 0x001e, 0x0904, 0x255c, 0x0016,\r
-+      0x2009, 0x27bb, 0x00d0, 0x2001, 0x188b, 0x200c, 0xc184, 0x2102,\r
-+      0x001e, 0x0c40, 0x0016, 0x2001, 0x188b, 0x200c, 0xd194, 0x001e,\r
-+      0x0904, 0x255c, 0x0016, 0x2009, 0x27ce, 0x0038, 0x2001, 0x188b,\r
-+      0x200c, 0xc194, 0x2102, 0x001e, 0x08a8, 0x6028, 0xc0bc, 0x602a,\r
-+      0x2001, 0x0156, 0x2003, 0xbc91, 0x8000, 0x2003, 0xffff, 0x6043,\r
-+      0x0001, 0x080c, 0x2c38, 0x6027, 0x0080, 0x6017, 0x0000, 0x6043,\r
-+      0x0000, 0x0817, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x00f6,\r
-+      0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x71d0, 0x70d2, 0x9116,\r
-+      0x05e8, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x2c3e, 0x2011,\r
-+      0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019,\r
-+      0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4b04, 0x0438, 0x2001,\r
-+      0x19a8, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4,\r
-+      0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c,\r
-+      0x4b04, 0x080c, 0x56d3, 0xd0fc, 0x1188, 0x080c, 0xd229, 0x1170,\r
-+      0x00c6, 0x080c, 0x28d2, 0x080c, 0xa51d, 0x2061, 0x0100, 0x2019,\r
-+      0x0028, 0x2009, 0x0002, 0x080c, 0x318a, 0x00ce, 0x012e, 0x00fe,\r
-+      0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x2028, 0x918c,\r
-+      0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, 0x1837, 0x2214,\r
-+      0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181f, 0x2204, 0x9106,\r
-+      0x1190, 0x2011, 0x1820, 0x2214, 0x9294, 0xff00, 0x9584, 0xff00,\r
-+      0x9206, 0x1148, 0x2011, 0x1820, 0x2214, 0x9294, 0x00ff, 0x9584,\r
-+      0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x80be, 0x0048, 0x9584,\r
-+      0x00ff, 0x9080, 0x3325, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006,\r
-+      0x0005, 0x9080, 0x3325, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6,\r
-+      0x2069, 0x0140, 0x2001, 0x1818, 0x2003, 0x00ef, 0x20a9, 0x0010,\r
-+      0x9006, 0x6852, 0x6856, 0x1f04, 0x2882, 0x00de, 0x0005, 0x0006,\r
-+      0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1818, 0x2102, 0x8114,\r
-+      0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006,\r
-+      0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xf1b6, 0x2005, 0x6856,\r
-+      0x8211, 0x1f04, 0x2897, 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6,\r
-+      0x2061, 0x1800, 0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032,\r
-+      0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069,\r
-+      0x0140, 0x6980, 0x9116, 0x0180, 0x9112, 0x1230, 0x8212, 0x8210,\r
-+      0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e,\r
-+      0x1f04, 0x28c7, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de,\r
-+      0x015e, 0x0005, 0x080c, 0x56cf, 0xd0c4, 0x0150, 0xd0a4, 0x0140,\r
-+      0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xe5ae, 0x004e,\r
-+      0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc,\r
-+      0x0904, 0x293e, 0x080c, 0x2b9d, 0x0660, 0x9084, 0x0700, 0x908e,\r
-+      0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500,\r
-+      0x1120, 0x2011, 0x8000, 0x900e, 0x0420, 0x908e, 0x0400, 0x1120,\r
-+      0x9016, 0x2009, 0x0001, 0x00e8, 0x908e, 0x0300, 0x1120, 0x9016,\r
-+      0x2009, 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120, 0x9016, 0x2009,\r
-+      0x0004, 0x0078, 0x908e, 0x0100, 0x1548, 0x9016, 0x2009, 0x0008,\r
-+      0x0040, 0x9084, 0x0700, 0x908e, 0x0300, 0x1500, 0x2011, 0x0030,\r
-+      0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c, 0x8f68, 0x928c,\r
-+      0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c,\r
-+      0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x73bc, 0x1118, 0x2009,\r
-+      0x196d, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000,\r
-+      0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001,\r
-+      0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c,\r
-+      0x0dce, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x2001, 0x0171,\r
-+      0x2004, 0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c, 0x918c, 0x00ff,\r
-+      0x918e, 0x004c, 0x1128, 0x200c, 0x918c, 0xff00, 0x810f, 0x0005,\r
-+      0x900e, 0x2001, 0x0227, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004,\r
-+      0x9108, 0x2001, 0x0226, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004,\r
-+      0x9108, 0x0005, 0x0018, 0x000c, 0x0018, 0x0020, 0x1000, 0x0800,\r
-+      0x1000, 0x1800, 0x0156, 0x0006, 0x0016, 0x0026, 0x00e6, 0x2001,\r
-+      0x1990, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dd5, 0x0033, 0x00ee,\r
-+      0x002e, 0x001e, 0x000e, 0x015e, 0x0005, 0x299c, 0x29ba, 0x29de,\r
-+      0x29e0, 0x2a09, 0x2a0b, 0x2a0d, 0x2001, 0x0001, 0x080c, 0x27ea,\r
-+      0x080c, 0x2bfb, 0x2001, 0x1992, 0x2003, 0x0000, 0x7828, 0x9084,\r
-+      0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x2bb9, 0x2001,\r
-+      0x1990, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2a0e, 0x080c,\r
-+      0x858b, 0x0005, 0x2009, 0x1995, 0x200b, 0x0000, 0x2001, 0x199a,\r
-+      0x2003, 0x0036, 0x2001, 0x1999, 0x2003, 0x002a, 0x2001, 0x1992,\r
-+      0x2003, 0x0001, 0x9006, 0x080c, 0x2b6b, 0x2001, 0xffff, 0x20a9,\r
-+      0x0009, 0x080c, 0x2bb9, 0x2001, 0x1990, 0x2003, 0x0006, 0x2009,\r
-+      0x001e, 0x2011, 0x2a0e, 0x080c, 0x858b, 0x0005, 0x080c, 0x0dd5,\r
-+      0x2001, 0x199a, 0x2003, 0x0036, 0x2001, 0x1992, 0x2003, 0x0003,\r
-+      0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010,\r
-+      0x2001, 0x0001, 0x080c, 0x2b6b, 0x2001, 0x1996, 0x2003, 0x0000,\r
-+      0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2bb9, 0x2001, 0x1990,\r
-+      0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2a0e, 0x080c, 0x858b,\r
-+      0x0005, 0x080c, 0x0dd5, 0x080c, 0x0dd5, 0x0005, 0x0006, 0x0016,\r
-+      0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079,\r
-+      0x0100, 0x2001, 0x1992, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dd5,\r
-+      0x0043, 0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e,\r
-+      0x0005, 0x2a30, 0x2a50, 0x2a90, 0x2ac0, 0x2ae4, 0x2af4, 0x2af6,\r
-+      0x080c, 0x2bad, 0x11b0, 0x7850, 0x9084, 0xefff, 0x7852, 0x2009,\r
-+      0x1998, 0x2104, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110,\r
-+      0xc08d, 0x0008, 0xc085, 0x200a, 0x2001, 0x1990, 0x2003, 0x0001,\r
-+      0x0030, 0x080c, 0x2b1a, 0x2001, 0xffff, 0x080c, 0x29ab, 0x0005,\r
-+      0x080c, 0x2af8, 0x05e0, 0x2009, 0x1999, 0x2104, 0x8001, 0x200a,\r
-+      0x080c, 0x2bad, 0x1178, 0x7850, 0x9084, 0xefff, 0x7852, 0x7a38,\r
-+      0x9294, 0x0005, 0x9296, 0x0005, 0x0518, 0x2009, 0x1998, 0x2104,\r
-+      0xc085, 0x200a, 0x2009, 0x1995, 0x2104, 0x8000, 0x200a, 0x9086,\r
-+      0x0005, 0x0118, 0x080c, 0x2b00, 0x00c0, 0x200b, 0x0000, 0x7a38,\r
-+      0x9294, 0x0006, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001,\r
-+      0x0001, 0x080c, 0x2b88, 0x2001, 0x1992, 0x2003, 0x0002, 0x0028,\r
-+      0x2001, 0x1990, 0x2003, 0x0003, 0x0010, 0x080c, 0x29cd, 0x0005,\r
-+      0x080c, 0x2af8, 0x0560, 0x2009, 0x1999, 0x2104, 0x8001, 0x200a,\r
-+      0x080c, 0x2bad, 0x1168, 0x7850, 0x9084, 0xefff, 0x7852, 0x2001,\r
-+      0x1990, 0x2003, 0x0003, 0x2001, 0x1991, 0x2003, 0x0000, 0x00b8,\r
-+      0x2009, 0x1999, 0x2104, 0x9005, 0x1118, 0x080c, 0x2b3d, 0x0010,\r
-+      0x080c, 0x2b0d, 0x080c, 0x2b00, 0x2009, 0x1995, 0x200b, 0x0000,\r
-+      0x2001, 0x1992, 0x2003, 0x0001, 0x080c, 0x29cd, 0x0000, 0x0005,\r
-+      0x04b9, 0x0508, 0x080c, 0x2bad, 0x11b8, 0x7850, 0x9084, 0xefff,\r
-+      0x7852, 0x2009, 0x1996, 0x2104, 0x8000, 0x200a, 0x9086, 0x0007,\r
-+      0x0108, 0x0078, 0x2001, 0x199b, 0x2003, 0x000a, 0x2009, 0x1998,\r
-+      0x2104, 0xc0fd, 0x200a, 0x0038, 0x0419, 0x2001, 0x1992, 0x2003,\r
-+      0x0004, 0x080c, 0x29f8, 0x0005, 0x0099, 0x0168, 0x080c, 0x2bad,\r
-+      0x1138, 0x7850, 0x9084, 0xefff, 0x7852, 0x080c, 0x29e4, 0x0018,\r
-+      0x0079, 0x080c, 0x29f8, 0x0005, 0x080c, 0x0dd5, 0x080c, 0x0dd5,\r
-+      0x2009, 0x199a, 0x2104, 0x8001, 0x200a, 0x090c, 0x2b59, 0x0005,\r
-+      0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010,\r
-+      0x2001, 0x0001, 0x080c, 0x2b88, 0x0005, 0x7a38, 0x9294, 0x0006,\r
-+      0x9296, 0x0006, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,\r
-+      0x2b6b, 0x0005, 0x2009, 0x1995, 0x2104, 0x8000, 0x200a, 0x9086,\r
-+      0x0005, 0x0108, 0x0068, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006,\r
-+      0x9296, 0x0006, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x04d9,\r
-+      0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010,\r
-+      0x2001, 0x0001, 0x080c, 0x2b88, 0x0005, 0x0086, 0x2001, 0x1998,\r
-+      0x2004, 0x9084, 0x7fff, 0x090c, 0x0dd5, 0x2009, 0x1997, 0x2144,\r
-+      0x8846, 0x280a, 0x9844, 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120,\r
-+      0x080c, 0x0dd5, 0x9006, 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e,\r
-+      0x0005, 0x0006, 0x0156, 0x2001, 0x1990, 0x20a9, 0x0009, 0x2003,\r
-+      0x0000, 0x8000, 0x1f04, 0x2b5f, 0x2001, 0x1997, 0x2003, 0x8000,\r
-+      0x015e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000,\r
-+      0x0158, 0x7838, 0x9084, 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009,\r
-+      0x199d, 0x210c, 0x795a, 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085,\r
-+      0x0006, 0x783a, 0x2009, 0x199e, 0x210c, 0x795a, 0x00fe, 0x0005,\r
-+      0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0138, 0x7838, 0x9084,\r
-+      0xfffa, 0x9085, 0x0004, 0x783a, 0x0030, 0x7838, 0x9084, 0xfffb,\r
-+      0x9085, 0x0005, 0x783a, 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100,\r
-+      0x2004, 0x9082, 0x0007, 0x000e, 0x0005, 0x0006, 0x2001, 0x0100,\r
-+      0x2004, 0x9082, 0x0009, 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064,\r
-+      0x7820, 0x080c, 0x2c38, 0xd09c, 0x1110, 0x1f04, 0x2bb0, 0x015e,\r
-+      0x0005, 0x0126, 0x0016, 0x0006, 0x2091, 0x8000, 0x7850, 0x9085,\r
-+      0x0040, 0x7852, 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2c38,\r
-+      0x9085, 0x2000, 0x7852, 0x000e, 0x2008, 0x9186, 0x0000, 0x1118,\r
-+      0x783b, 0x0007, 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006,\r
-+      0x0060, 0x9186, 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186,\r
-+      0x0003, 0x1118, 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x2be6,\r
-+      0x080c, 0x85ad, 0x1f04, 0x2be6, 0x7850, 0x9085, 0x0400, 0x9084,\r
-+      0xdfbf, 0x7852, 0x080c, 0x2c38, 0x9085, 0x1000, 0x7852, 0x000e,\r
-+      0x001e, 0x012e, 0x0005, 0x7850, 0x9084, 0xffcf, 0x7852, 0x0005,\r
-+      0x0006, 0x0156, 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854,\r
-+      0xd0ac, 0x1130, 0x7820, 0xd0e4, 0x1140, 0x1f04, 0x2c0a, 0x0028,\r
-+      0x7854, 0xd08c, 0x1110, 0x1f04, 0x2c10, 0x00fe, 0x015e, 0x000e,\r
-+      0x0005, 0x1d04, 0x2c19, 0x080c, 0x85ad, 0x1f04, 0x2c19, 0x0005,\r
-+      0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005,\r
-+      0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005,\r
-+      0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005,\r
-+      0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x2001,\r
-+      0x19a8, 0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc,\r
-+      0x0140, 0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001,\r
-+      0x200a, 0x0005, 0x0036, 0x0046, 0x2001, 0x0141, 0x200c, 0x918c,\r
-+      0xff00, 0x9186, 0x2000, 0x0118, 0x9186, 0x0100, 0x1588, 0x2009,\r
-+      0x00a2, 0x080c, 0x0e51, 0x2019, 0x0160, 0x2324, 0x2011, 0x0003,\r
-+      0x2009, 0x0169, 0x2104, 0x9084, 0x0007, 0x210c, 0x918c, 0x0007,\r
-+      0x910e, 0x1db0, 0x9086, 0x0003, 0x11b8, 0x2304, 0x9402, 0x02a0,\r
-+      0x1d60, 0x8211, 0x1d68, 0x84ff, 0x0170, 0x2001, 0x0141, 0x200c,\r
-+      0x918c, 0xff00, 0x9186, 0x0100, 0x0130, 0x2009, 0x180c, 0x2104,\r
-+      0xc0dd, 0x200a, 0x0008, 0x0419, 0x2009, 0x0000, 0x080c, 0x0e51,\r
-+      0x004e, 0x003e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd0dc, 0x01b0,\r
-+      0x2001, 0x0160, 0x2004, 0x9005, 0x0140, 0x2001, 0x0141, 0x2004,\r
-+      0x9084, 0xff00, 0x9086, 0x0100, 0x1148, 0x0126, 0x2091, 0x8000,\r
-+      0x0016, 0x0026, 0x0021, 0x002e, 0x001e, 0x012e, 0x0005, 0x00c6,\r
-+      0x2061, 0x0100, 0x6014, 0x0006, 0x2001, 0x0161, 0x2003, 0x0000,\r
-+      0x6017, 0x0018, 0xa001, 0xa001, 0x602f, 0x0008, 0x6104, 0x918e,\r
-+      0x0010, 0x6106, 0x918e, 0x0010, 0x6106, 0x6017, 0x0040, 0x04b9,\r
-+      0x001e, 0x9184, 0x0003, 0x01e0, 0x0036, 0x0016, 0x2019, 0x0141,\r
-+      0x6124, 0x918c, 0x0028, 0x1120, 0x2304, 0x9084, 0x2800, 0x0dc0,\r
-+      0x001e, 0x919c, 0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009,\r
-+      0x6016, 0x9184, 0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e,\r
-+      0x2001, 0x180c, 0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016,\r
-+      0x0026, 0x080c, 0x73d6, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114,\r
-+      0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016,\r
-+      0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000,\r
-+      0x200a, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009,\r
-+      0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e,\r
-+      0x0005, 0x0006, 0x0016, 0x2009, 0x0140, 0x2104, 0x1128, 0x080c,\r
-+      0x73d6, 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e,\r
-+      0x0005, 0x2f95, 0x2f95, 0x2db9, 0x2db9, 0x2dc5, 0x2dc5, 0x2dd1,\r
-+      0x2dd1, 0x2ddf, 0x2ddf, 0x2deb, 0x2deb, 0x2df9, 0x2df9, 0x2e07,\r
-+      0x2e07, 0x2e19, 0x2e19, 0x2e25, 0x2e25, 0x2e33, 0x2e33, 0x2e51,\r
-+      0x2e51, 0x2e71, 0x2e71, 0x2e41, 0x2e41, 0x2e61, 0x2e61, 0x2e7f,\r
-+      0x2e7f, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17,\r
-+      0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17,\r
-+      0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17,\r
-+      0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17,\r
-+      0x2e17, 0x2e91, 0x2e91, 0x2e9d, 0x2e9d, 0x2eab, 0x2eab, 0x2eb9,\r
-+      0x2eb9, 0x2ec9, 0x2ec9, 0x2ed7, 0x2ed7, 0x2ee7, 0x2ee7, 0x2ef7,\r
-+      0x2ef7, 0x2f09, 0x2f09, 0x2f17, 0x2f17, 0x2f27, 0x2f27, 0x2f49,\r
-+      0x2f49, 0x2f6b, 0x2f6b, 0x2f37, 0x2f37, 0x2f5a, 0x2f5a, 0x2f7a,\r
-+      0x2f7a, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17,\r
-+      0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17,\r
-+      0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17,\r
-+      0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17,\r
-+      0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17,\r
-+      0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17, 0x2e17,\r
-+      0x2e17, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x2481, 0x0804, 0x2f8d, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2295, 0x0804,\r
-+      0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x2295, 0x080c, 0x2481, 0x0804, 0x2f8d, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x22d0, 0x0804, 0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x2481, 0x080c, 0x22d0, 0x0804,\r
-+      0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x2295, 0x080c, 0x22d0, 0x0804, 0x2f8d, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x2295, 0x080c, 0x2481, 0x080c, 0x22d0, 0x0804, 0x2f8d, 0xa001,\r
-+      0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x1380, 0x0804, 0x2f8d, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2481, 0x080c,\r
-+      0x1380, 0x0804, 0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x2295, 0x080c, 0x1380, 0x0804,\r
-+      0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x2481, 0x080c, 0x1380, 0x080c, 0x22d0, 0x0804,\r
-+      0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x2295, 0x080c, 0x2481, 0x080c, 0x1380, 0x0804,\r
-+      0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x2295, 0x080c, 0x1380, 0x080c, 0x22d0, 0x0804,\r
-+      0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x1380, 0x080c, 0x22d0, 0x0804, 0x2f8d, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x2295, 0x080c, 0x2481, 0x080c, 0x1380, 0x080c, 0x22d0, 0x0804,\r
-+      0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x2941, 0x0804, 0x2f8d, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2941, 0x080c,\r
-+      0x2481, 0x0804, 0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x2941, 0x080c, 0x2295, 0x0804,\r
-+      0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x2941, 0x080c, 0x2295, 0x080c, 0x2481, 0x0804,\r
-+      0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x2941, 0x080c, 0x22d0, 0x0804, 0x2f8d, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x2941, 0x080c, 0x2481, 0x080c, 0x22d0, 0x0804, 0x2f8d, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x2941, 0x080c, 0x2295, 0x080c, 0x22d0, 0x0804, 0x2f8d, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x2941, 0x080c, 0x2295, 0x080c, 0x2481, 0x080c, 0x22d0, 0x0804,\r
-+      0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x2941, 0x080c, 0x1380, 0x0804, 0x2f8d, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x2941, 0x080c, 0x2481, 0x080c, 0x1380, 0x0804, 0x2f8d, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x2941, 0x080c, 0x2295, 0x080c, 0x1380, 0x0804, 0x2f8d, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x2941, 0x080c, 0x2481, 0x080c, 0x1380, 0x080c, 0x22d0, 0x0804,\r
-+      0x2f8d, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x2941, 0x080c, 0x2295, 0x080c, 0x2481, 0x080c,\r
-+      0x1380, 0x0498, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x2941, 0x080c, 0x2295, 0x080c, 0x1380,\r
-+      0x080c, 0x22d0, 0x0410, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x2941, 0x080c, 0x1380, 0x080c,\r
-+      0x22d0, 0x0098, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x2941, 0x080c, 0x2295, 0x080c, 0x2481,\r
-+      0x080c, 0x1380, 0x080c, 0x22d0, 0x0000, 0x015e, 0x014e, 0x013e,\r
-+      0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6,\r
-+      0x0026, 0x0046, 0x9026, 0x080c, 0x6930, 0x1904, 0x30a6, 0x72dc,\r
-+      0x2001, 0x197c, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148, 0xd284,\r
-+      0x1138, 0xd2bc, 0x1904, 0x30a6, 0x080c, 0x30ab, 0x0804, 0x30a6,\r
-+      0xd2cc, 0x1904, 0x30a6, 0x080c, 0x73bc, 0x1120, 0x70af, 0xffff,\r
-+      0x0804, 0x30a6, 0xd294, 0x0120, 0x70af, 0xffff, 0x0804, 0x30a6,\r
-+      0x080c, 0x3314, 0x0160, 0x080c, 0xd230, 0x0128, 0x2001, 0x1818,\r
-+      0x203c, 0x0804, 0x3033, 0x70af, 0xffff, 0x0804, 0x30a6, 0x2001,\r
-+      0x1818, 0x203c, 0x7294, 0xd284, 0x0904, 0x3033, 0xd28c, 0x1904,\r
-+      0x3033, 0x0036, 0x73ac, 0x938e, 0xffff, 0x1110, 0x2019, 0x0001,\r
-+      0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001, 0x0120, 0x9084,\r
-+      0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x05d0, 0x908e,\r
-+      0x0000, 0x05b8, 0x908e, 0x00ff, 0x1150, 0x7230, 0xd284, 0x15b0,\r
-+      0x7294, 0xc28d, 0x7296, 0x70af, 0xffff, 0x003e, 0x04a0, 0x900e,\r
-+      0x080c, 0x283e, 0x080c, 0x659e, 0x1538, 0x9006, 0xb8bb, 0x0520,\r
-+      0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060, 0x080c, 0x8981, 0x00ce,\r
-+      0x090c, 0x8d25, 0xb8af, 0x0000, 0x080c, 0x6972, 0x1168, 0x7030,\r
-+      0xd08c, 0x0130, 0xb800, 0xd0bc, 0x0138, 0x080c, 0x681f, 0x0120,\r
-+      0x080c, 0x30c4, 0x0148, 0x0028, 0x080c, 0x3204, 0x080c, 0x30f0,\r
-+      0x0118, 0x8318, 0x0804, 0x2fe0, 0x73ae, 0x0010, 0x70af, 0xffff,\r
-+      0x003e, 0x0804, 0x30a6, 0x9780, 0x3325, 0x203d, 0x97bc, 0xff00,\r
-+      0x873f, 0x2041, 0x007e, 0x70ac, 0x9096, 0xffff, 0x1118, 0x900e,\r
-+      0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020,\r
-+      0x70af, 0xffff, 0x0804, 0x30a6, 0x2700, 0x0156, 0x0016, 0x9106,\r
-+      0x0904, 0x309b, 0xc484, 0x080c, 0x65ff, 0x0148, 0x080c, 0xd230,\r
-+      0x1904, 0x309b, 0x080c, 0x659e, 0x1904, 0x30a3, 0x0008, 0xc485,\r
-+      0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060, 0x080c,\r
-+      0x8981, 0x00ce, 0x090c, 0x8d25, 0xb8af, 0x0000, 0x080c, 0x6972,\r
-+      0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0, 0x7294,\r
-+      0xd28c, 0x0180, 0x080c, 0x6972, 0x9082, 0x0006, 0x02e0, 0xd484,\r
-+      0x1118, 0x080c, 0x65c3, 0x0028, 0x080c, 0x3290, 0x01a0, 0x080c,\r
-+      0x32bb, 0x0088, 0x080c, 0x3204, 0x080c, 0xd230, 0x1160, 0x080c,\r
-+      0x30f0, 0x0188, 0x0040, 0x080c, 0xd230, 0x1118, 0x080c, 0x3290,\r
-+      0x0110, 0x0451, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04, 0x304c,\r
-+      0x70af, 0xffff, 0x0018, 0x001e, 0x015e, 0x71ae, 0x004e, 0x002e,\r
-+      0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, 0x70af, 0x0001, 0x2009,\r
-+      0x007e, 0x080c, 0x659e, 0x1168, 0xb813, 0x00ff, 0xb817, 0xfffe,\r
-+      0x080c, 0x3204, 0x04a9, 0x0128, 0x70dc, 0xc0bd, 0x70de, 0x080c,\r
-+      0xcf81, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,\r
-+      0x2001, 0x184c, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0xaeaf,\r
-+      0x01d0, 0x2b00, 0x6012, 0x080c, 0xcfaa, 0x6023, 0x0001, 0x9006,\r
-+      0x080c, 0x653b, 0x2001, 0x0000, 0x080c, 0x654f, 0x0126, 0x2091,\r
-+      0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, 0x0004, 0x080c,\r
-+      0xaedc, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,\r
-+      0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x184c, 0x2004, 0x9084,\r
-+      0x00ff, 0xb842, 0x080c, 0xaeaf, 0x0548, 0x2b00, 0x6012, 0xb800,\r
-+      0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, 0x0140, 0xb804, 0x9084,\r
-+      0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, 0x31bf, 0x080c, 0xcfaa,\r
-+      0x6023, 0x0001, 0x9006, 0x080c, 0x653b, 0x2001, 0x0002, 0x080c,\r
-+      0x654f, 0x0126, 0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e,\r
-+      0x2009, 0x0002, 0x080c, 0xaedc, 0x9085, 0x0001, 0x00ce, 0x00de,\r
-+      0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080,\r
-+      0x080c, 0x659e, 0x1140, 0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039,\r
-+      0x0110, 0x70e3, 0xffff, 0x002e, 0x00ce, 0x00be, 0x0005, 0x0016,\r
-+      0x0076, 0x00d6, 0x00c6, 0x080c, 0xae0b, 0x01d0, 0x2b00, 0x6012,\r
-+      0x080c, 0xcfaa, 0x6023, 0x0001, 0x9006, 0x080c, 0x653b, 0x2001,\r
-+      0x0002, 0x080c, 0x654f, 0x0126, 0x2091, 0x8000, 0x70e4, 0x8000,\r
-+      0x70e6, 0x012e, 0x2009, 0x0002, 0x080c, 0xaedc, 0x9085, 0x0001,\r
-+      0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126,\r
-+      0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x659e, 0x11b8, 0xb813,\r
-+      0x00ff, 0xb817, 0xfffd, 0xb8cf, 0x0004, 0x080c, 0xae0b, 0x0170,\r
-+      0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c, 0xcfaa,\r
-+      0x2009, 0x0022, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e, 0x00de,\r
-+      0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6,\r
-+      0x21f0, 0x080c, 0x9296, 0x080c, 0x921b, 0x080c, 0xaca4, 0x080c,\r
-+      0xbd77, 0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e,\r
-+      0x0018, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x65ff, 0x1140,\r
-+      0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x6034,\r
-+      0x001e, 0x8108, 0x1f04, 0x31a4, 0x9686, 0x0001, 0x190c, 0x32e8,\r
-+      0x00be, 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6,\r
-+      0x00c6, 0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x6210, 0x2258,\r
-+      0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x928b, 0x0076, 0x2039,\r
-+      0x0000, 0x080c, 0x9168, 0x2c08, 0x080c, 0xe2eb, 0x007e, 0x001e,\r
-+      0xba10, 0xbb14, 0xbcc0, 0x080c, 0x6034, 0xba12, 0xbb16, 0xbcc2,\r
-+      0x00be, 0x001e, 0x002e, 0x003e, 0x004e, 0x00ce, 0x00ee, 0x0005,\r
-+      0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058, 0xb8a0, 0x00be, 0x9086,\r
-+      0x0080, 0x0150, 0x2071, 0x1800, 0x70a8, 0x9005, 0x0110, 0x8001,\r
-+      0x70aa, 0x000e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x70e4, 0x9005,\r
-+      0x0dc0, 0x8001, 0x70e6, 0x0ca8, 0xb800, 0xc08c, 0xb802, 0x0005,\r
-+      0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x0036, 0x0026, 0x0016,\r
-+      0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0078, 0x080c,\r
-+      0x56cf, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2020, 0x2009,\r
-+      0x002d, 0x080c, 0xe5ae, 0x20a9, 0x0800, 0x9016, 0x0026, 0x928e,\r
-+      0x007e, 0x0904, 0x326f, 0x928e, 0x007f, 0x0904, 0x326f, 0x928e,\r
-+      0x0080, 0x05e8, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c0, 0x8fff,\r
-+      0x1148, 0x2001, 0x198e, 0x0006, 0x2003, 0x0001, 0x04f1, 0x000e,\r
-+      0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001, 0x080c,\r
-+      0x693c, 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, 0x928b, 0x0076,\r
-+      0x2039, 0x0000, 0x080c, 0x9168, 0x00b6, 0x00c6, 0x0026, 0x2158,\r
-+      0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, 0xb807, 0x0404,\r
-+      0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0xba06, 0x002e, 0x00ce,\r
-+      0x00be, 0x0016, 0x2c08, 0x080c, 0xe2eb, 0x001e, 0x007e, 0x002e,\r
-+      0x8210, 0x1f04, 0x3226, 0x015e, 0x001e, 0x002e, 0x003e, 0x004e,\r
-+      0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016,\r
-+      0x080c, 0x56cf, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220,\r
-+      0x2009, 0x0029, 0x080c, 0xe5ae, 0x001e, 0x002e, 0x004e, 0x0005,\r
-+      0x0016, 0x0026, 0x0036, 0x00c6, 0x7294, 0x82ff, 0x01e8, 0x080c,\r
-+      0x696a, 0x11d0, 0x2100, 0x080c, 0x2871, 0x81ff, 0x01b8, 0x2019,\r
-+      0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0xd384, 0x0120, 0x9084,\r
-+      0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138, 0x9096,\r
-+      0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce, 0x003e,\r
-+      0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000,\r
-+      0x0036, 0x2019, 0x0029, 0x00a9, 0x003e, 0x9180, 0x1000, 0x2004,\r
-+      0x9065, 0x0158, 0x0016, 0x00c6, 0x2061, 0x1ab0, 0x001e, 0x6112,\r
-+      0x080c, 0x31bf, 0x001e, 0x080c, 0x65c3, 0x012e, 0x00ce, 0x001e,\r
-+      0x0005, 0x0016, 0x0026, 0x2110, 0x080c, 0xa808, 0x080c, 0xe917,\r
-+      0x002e, 0x001e, 0x0005, 0x2001, 0x1837, 0x2004, 0xd0cc, 0x0005,\r
-+      0x00c6, 0x00b6, 0x080c, 0x73bc, 0x1118, 0x20a9, 0x0800, 0x0010,\r
-+      0x20a9, 0x0782, 0x080c, 0x73bc, 0x1110, 0x900e, 0x0010, 0x2009,\r
-+      0x007e, 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110,\r
-+      0xb800, 0xd0bc, 0x090c, 0x65c3, 0x8108, 0x1f04, 0x32f9, 0x2061,\r
-+      0x1800, 0x607f, 0x0000, 0x6080, 0x9084, 0x00ff, 0x6082, 0x60b3,\r
-+      0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, 0x1869, 0x2004, 0xd0bc,\r
-+      0x0005, 0x2011, 0x1848, 0x2214, 0xd2ec, 0x0005, 0x0026, 0x2011,\r
-+      0x1867, 0x2214, 0xd2dc, 0x002e, 0x0005, 0x7eef, 0x7de8, 0x7ce4,\r
-+      0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5,\r
-+      0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb,\r
-+      0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba,\r
-+      0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae,\r
-+      0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5,\r
-+      0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690,\r
-+      0x658f, 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a,\r
-+      0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e,\r
-+      0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965,\r
-+      0x5863, 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353,\r
-+      0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49,\r
-+      0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036,\r
-+      0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c,\r
-+      0x452b, 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f,\r
-+      0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08,\r
-+      0x8004, 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600,\r
-+      0x8000, 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000,\r
-+      0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000,\r
-+      0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600,\r
-+      0x2500, 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000,\r
-+      0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00,\r
-+      0x8000, 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,\r
-+      0x1800, 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300,\r
-+      0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00,\r
-+      0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700,\r
-+      0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300,\r
-+      0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189e, 0x7003,\r
-+      0x0002, 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042,\r
-+      0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba, 0x7007, 0x0001, 0x080c,\r
-+      0x1018, 0x090c, 0x0dd5, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab,\r
-+      0xdcb0, 0x080c, 0x1018, 0x090c, 0x0dd5, 0x2900, 0x706e, 0xa867,\r
-+      0x0002, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x189e, 0x7004, 0x0002,\r
-+      0x3454, 0x3455, 0x3468, 0x347c, 0x0005, 0x1004, 0x3465, 0x0e04,\r
-+      0x3465, 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005,\r
-+      0x1128, 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8,\r
-+      0x2079, 0x0000, 0x2061, 0x18b8, 0x2c4c, 0xa86c, 0x908e, 0x0100,\r
-+      0x0128, 0x9086, 0x0200, 0x0904, 0x3550, 0x0005, 0x7018, 0x2048,\r
-+      0x2061, 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864, 0x9094,\r
-+      0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005,\r
-+      0x9086, 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800,\r
-+      0x701c, 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210,\r
-+      0x61d0, 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x354d, 0x61d0,\r
-+      0x0804, 0x34e2, 0x3524, 0x355c, 0x3566, 0x356a, 0x3574, 0x357a,\r
-+      0x357e, 0x358e, 0x3591, 0x359b, 0x35a0, 0x35a5, 0x35b0, 0x35bb,\r
-+      0x35ca, 0x35d9, 0x35e7, 0x35fe, 0x3619, 0x354d, 0x36c2, 0x3700,\r
-+      0x37a6, 0x37b7, 0x37da, 0x354d, 0x354d, 0x354d, 0x3812, 0x382e,\r
-+      0x3837, 0x3866, 0x386c, 0x354d, 0x38b2, 0x354d, 0x354d, 0x354d,\r
-+      0x354d, 0x354d, 0x38bd, 0x38c6, 0x38ce, 0x38d0, 0x354d, 0x354d,\r
-+      0x354d, 0x354d, 0x354d, 0x354d, 0x38fc, 0x354d, 0x354d, 0x354d,\r
-+      0x354d, 0x354d, 0x3919, 0x397a, 0x354d, 0x354d, 0x354d, 0x354d,\r
-+      0x354d, 0x354d, 0x0002, 0x39a4, 0x39a7, 0x3a06, 0x3a1f, 0x3a4f,\r
-+      0x3ced, 0x354d, 0x52a8, 0x354d, 0x354d, 0x354d, 0x354d, 0x354d,\r
-+      0x354d, 0x354d, 0x354d, 0x359b, 0x35a0, 0x420e, 0x56f3, 0x422c,\r
-+      0x5337, 0x5388, 0x548b, 0x354d, 0x54ed, 0x5529, 0x555a, 0x565e,\r
-+      0x5587, 0x55de, 0x354d, 0x4230, 0x43f1, 0x4407, 0x442c, 0x4491,\r
-+      0x4505, 0x4525, 0x459c, 0x45f8, 0x4654, 0x4657, 0x467c, 0x4719,\r
-+      0x477f, 0x4787, 0x48b9, 0x4a2e, 0x4a62, 0x4cc6, 0x354d, 0x4ce4,\r
-+      0x4d90, 0x4e72, 0x4ecc, 0x354d, 0x4f81, 0x354d, 0x4fe7, 0x5002,\r
-+      0x4787, 0x5248, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x4ae0,\r
-+      0x0126, 0x2091, 0x8000, 0x0e04, 0x352e, 0x0010, 0x012e, 0x0cc0,\r
-+      0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833,\r
-+      0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001,\r
-+      0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x7007, 0x0001, 0x2091,\r
-+      0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0,\r
-+      0x2021, 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005,\r
-+      0x0868, 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520,\r
-+      0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4aed, 0x7883, 0x0004,\r
-+      0x7884, 0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c,\r
-+      0x7884, 0x7990, 0x0804, 0x4af0, 0x7984, 0x7888, 0x2114, 0x200a,\r
-+      0x0804, 0x3524, 0x7984, 0x2114, 0x0804, 0x3524, 0x20e1, 0x0000,\r
-+      0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f,\r
-+      0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x3524, 0x7884, 0x2060,\r
-+      0x04d8, 0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x001c, 0x789b,\r
-+      0x0137, 0x0804, 0x3524, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800,\r
-+      0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040,\r
-+      0x0210, 0x0804, 0x3559, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x3560,\r
-+      0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3559, 0x2138, 0x7d98,\r
-+      0x7c9c, 0x0804, 0x356e, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,\r
-+      0x3559, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004,\r
-+      0x0804, 0x3524, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200,\r
-+      0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x3524, 0x0804,\r
-+      0x3553, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3559, 0x21e0,\r
-+      0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x3524, 0x2069,\r
-+      0x1847, 0x7884, 0x7990, 0x911a, 0x1a04, 0x3559, 0x8019, 0x0904,\r
-+      0x3559, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006,\r
-+      0x685a, 0x685e, 0x080c, 0x76d5, 0x0804, 0x3524, 0x2069, 0x1847,\r
-+      0x7884, 0x7994, 0x911a, 0x1a04, 0x3559, 0x8019, 0x0904, 0x3559,\r
-+      0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a,\r
-+      0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x69dc, 0x012e, 0x0804,\r
-+      0x3524, 0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,\r
-+      0x3556, 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001,\r
-+      0x20a1, 0x18a6, 0x4101, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002,\r
-+      0x0804, 0x3556, 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60,\r
-+      0x080c, 0x4aed, 0x701f, 0x363d, 0x0005, 0xa864, 0x2008, 0x9084,\r
-+      0x00ff, 0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096,\r
-+      0x0015, 0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904,\r
-+      0x3556, 0x810f, 0x918c, 0x00ff, 0x0904, 0x3556, 0x7112, 0x7010,\r
-+      0x8001, 0x0560, 0x7012, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002,\r
-+      0x0804, 0x3556, 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390,\r
-+      0xa494, 0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000,\r
-+      0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4aed,\r
-+      0x701f, 0x367b, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002,\r
-+      0x0120, 0x9096, 0x000a, 0x1904, 0x3556, 0x0888, 0x7014, 0x2048,\r
-+      0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029,\r
-+      0x1160, 0xc2fd, 0xaa7a, 0x080c, 0x618b, 0x0150, 0x0126, 0x2091,\r
-+      0x8000, 0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x64b4, 0x1128,\r
-+      0x7007, 0x0003, 0x701f, 0x36a7, 0x0005, 0x080c, 0x6ec0, 0x0126,\r
-+      0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a6,\r
-+      0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9,\r
-+      0x0000, 0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60,\r
-+      0x0804, 0x4af0, 0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010,\r
-+      0x7883, 0x4000, 0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020,\r
-+      0x2009, 0x017f, 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100,\r
-+      0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009,\r
-+      0x04fd, 0x2104, 0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001,\r
-+      0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x1a19, 0x2004, 0x9005,\r
-+      0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a,\r
-+      0x2003, 0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427,\r
-+      0x81ff, 0x1904, 0x3556, 0x7984, 0x080c, 0x65ff, 0x1904, 0x3559,\r
-+      0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x3559, 0x7c88,\r
-+      0x7d8c, 0x080c, 0x6762, 0x080c, 0x6731, 0x0000, 0x1518, 0x2061,\r
-+      0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148,\r
-+      0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506,\r
-+      0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02,\r
-+      0x1a04, 0x3556, 0x0c30, 0x080c, 0xc768, 0x012e, 0x0904, 0x3556,\r
-+      0x0804, 0x3524, 0x900e, 0x2001, 0x0005, 0x080c, 0x6ec0, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0xce2a, 0x080c, 0x6c81, 0x012e, 0x0804,\r
-+      0x3524, 0x00a6, 0x2950, 0xb198, 0x080c, 0x65ff, 0x1904, 0x3793,\r
-+      0xb6a4, 0x9684, 0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0,\r
-+      0x080c, 0x6762, 0x080c, 0x6731, 0x1520, 0x2061, 0x1cd0, 0x0126,\r
-+      0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d,\r
-+      0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e,\r
-+      0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x2009, 0x000d,\r
-+      0x12b0, 0x0c28, 0x080c, 0xc768, 0x012e, 0x2009, 0x0003, 0x0178,\r
-+      0x00e0, 0x900e, 0x2001, 0x0005, 0x080c, 0x6ec0, 0x0126, 0x2091,\r
-+      0x8000, 0x080c, 0xce2a, 0x080c, 0x6c75, 0x012e, 0x0070, 0xb097,\r
-+      0x4005, 0xb19a, 0x0010, 0xb097, 0x4006, 0x900e, 0x9085, 0x0001,\r
-+      0x2001, 0x0030, 0x2a48, 0x00ae, 0x0005, 0xb097, 0x4000, 0x9006,\r
-+      0x918d, 0x0001, 0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904,\r
-+      0x3556, 0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x66c6, 0x0904,\r
-+      0x3556, 0x080c, 0x6768, 0x0904, 0x3556, 0x0804, 0x451c, 0x81ff,\r
-+      0x1904, 0x3556, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x080c, 0x67f6,\r
-+      0x0904, 0x3556, 0x2019, 0x0005, 0x79a8, 0x080c, 0x6783, 0x0904,\r
-+      0x3556, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3559, 0x8003, 0x800b,\r
-+      0x810b, 0x9108, 0x080c, 0x8501, 0x7984, 0xd184, 0x1904, 0x3524,\r
-+      0x0804, 0x451c, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009,\r
-+      0x0001, 0x0450, 0x2029, 0x07ff, 0x645c, 0x2400, 0x9506, 0x01f8,\r
-+      0x2508, 0x080c, 0x65ff, 0x11d8, 0x080c, 0x67f6, 0x1128, 0x2009,\r
-+      0x0002, 0x62c0, 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c,\r
-+      0x6783, 0x1118, 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000,\r
-+      0x1270, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8501, 0x8529,\r
-+      0x1ae0, 0x012e, 0x0804, 0x3524, 0x012e, 0x0804, 0x3556, 0x012e,\r
-+      0x0804, 0x3559, 0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x66c6,\r
-+      0x0904, 0x3556, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c,\r
-+      0x928b, 0x0076, 0x903e, 0x080c, 0x9168, 0x900e, 0x080c, 0xe2eb,\r
-+      0x007e, 0x00ce, 0x080c, 0x6762, 0x0804, 0x3524, 0x080c, 0x4abb,\r
-+      0x0904, 0x3559, 0x080c, 0x6762, 0x2208, 0x0804, 0x3524, 0x0156,\r
-+      0x00d6, 0x00e6, 0x2069, 0x1910, 0x6810, 0x6914, 0x910a, 0x1208,\r
-+      0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, 0x007e, 0x2069, 0x1000,\r
-+      0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, 0x9210, 0x8d68, 0x1f04,\r
-+      0x3848, 0x2300, 0x9218, 0x00ee, 0x00de, 0x015e, 0x0804, 0x3524,\r
-+      0x00f6, 0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff,\r
-+      0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1910,\r
-+      0x6910, 0x62bc, 0x0804, 0x3524, 0x81ff, 0x0120, 0x2009, 0x0001,\r
-+      0x0804, 0x3556, 0x0126, 0x2091, 0x8000, 0x080c, 0x56e3, 0x0128,\r
-+      0x2009, 0x0007, 0x012e, 0x0804, 0x3556, 0x012e, 0x615c, 0x9190,\r
-+      0x3325, 0x2215, 0x9294, 0x00ff, 0x637c, 0x83ff, 0x0108, 0x6280,\r
-+      0x67dc, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001,\r
-+      0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003,\r
-+      0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002,\r
-+      0x0068, 0x080c, 0x73bc, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c,\r
-+      0x0120, 0x2009, 0x0005, 0x0804, 0x3556, 0x9036, 0x7e9a, 0x7f9e,\r
-+      0x0804, 0x3524, 0x614c, 0x6250, 0x2019, 0x1986, 0x231c, 0x2001,\r
-+      0x1987, 0x2004, 0x789a, 0x0804, 0x3524, 0x0126, 0x2091, 0x8000,\r
-+      0x6138, 0x623c, 0x6340, 0x012e, 0x0804, 0x3524, 0x080c, 0x4ad7,\r
-+      0x0904, 0x3559, 0xba44, 0xbb38, 0x0804, 0x3524, 0x080c, 0x0dd5,\r
-+      0x080c, 0x4ad7, 0x2110, 0x0904, 0x3559, 0xb804, 0x908c, 0x00ff,\r
-+      0x918e, 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009,\r
-+      0x0009, 0x1904, 0x3556, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005,\r
-+      0x00c6, 0x9066, 0x080c, 0xa808, 0x080c, 0x928b, 0x0076, 0x903e,\r
-+      0x080c, 0x9168, 0x900e, 0x080c, 0xe2eb, 0x007e, 0x00ce, 0xb807,\r
-+      0x0407, 0x012e, 0x0804, 0x3524, 0x614c, 0x6250, 0x7884, 0x604e,\r
-+      0x7b88, 0x6352, 0x2069, 0x1847, 0x831f, 0x9305, 0x6816, 0x788c,\r
-+      0x2069, 0x1986, 0x2d1c, 0x206a, 0x7e98, 0x9682, 0x0014, 0x1210,\r
-+      0x2031, 0x07d0, 0x2069, 0x1987, 0x2d04, 0x266a, 0x789a, 0x0804,\r
-+      0x3524, 0x0126, 0x2091, 0x8000, 0x7884, 0x603a, 0xd0c4, 0x01a8,\r
-+      0x00d6, 0x78a8, 0x2009, 0x199d, 0x200a, 0x78ac, 0x2011, 0x199e,\r
-+      0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214,\r
-+      0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7884, 0xd0b4, 0x0120,\r
-+      0x3b00, 0x9084, 0xff3f, 0x20d8, 0x7888, 0x603e, 0x2011, 0x0114,\r
-+      0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0080, 0x0010, 0x918c,\r
-+      0xff7f, 0x2112, 0x788c, 0x6042, 0x9084, 0x0020, 0x0130, 0x78b4,\r
-+      0x6046, 0x9084, 0x0001, 0x090c, 0x420e, 0x6040, 0xd0cc, 0x0120,\r
-+      0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804, 0x3524, 0x00f6,\r
-+      0x2079, 0x1800, 0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c,\r
-+      0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215,\r
-+      0x7a3a, 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,\r
-+      0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904,\r
-+      0x3559, 0x788c, 0x902d, 0x0904, 0x3559, 0x900e, 0x080c, 0x65ff,\r
-+      0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190,\r
-+      0x8108, 0x0ca0, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x7888, 0x900d,\r
-+      0x0904, 0x3559, 0x788c, 0x9005, 0x0904, 0x3559, 0xba44, 0xb946,\r
-+      0xbb38, 0xb83a, 0x0804, 0x3524, 0x2011, 0xbc09, 0x0010, 0x2011,\r
-+      0xbc05, 0x080c, 0x56e3, 0x1904, 0x3556, 0x00c6, 0x2061, 0x0100,\r
-+      0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, 0x1818, 0x2004, 0x9085,\r
-+      0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, 0x3325, 0x210d,\r
-+      0x918c, 0x00ff, 0x2001, 0x1818, 0x2004, 0x0026, 0x9116, 0x002e,\r
-+      0x0580, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c,\r
-+      0xae0b, 0x000e, 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c,\r
-+      0x65a4, 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c,\r
-+      0x4aa4, 0x01d0, 0x9006, 0xa866, 0x7007, 0x0003, 0xa832, 0xa868,\r
-+      0xc0fd, 0xa86a, 0x701f, 0x39ff, 0x2900, 0x6016, 0x2009, 0x0032,\r
-+      0x080c, 0xaedc, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804,\r
-+      0x3556, 0x00ce, 0x0804, 0x3559, 0x080c, 0xae61, 0x0cb0, 0xa830,\r
-+      0x9086, 0x0100, 0x0904, 0x3556, 0x0804, 0x3524, 0x2061, 0x1a71,\r
-+      0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208,\r
-+      0x2061, 0x1800, 0x6354, 0x6074, 0x789a, 0x60c0, 0x789e, 0x60bc,\r
-+      0x78aa, 0x012e, 0x0804, 0x3524, 0x900e, 0x2110, 0x0c88, 0x81ff,\r
-+      0x1904, 0x3556, 0x080c, 0x73bc, 0x0904, 0x3556, 0x0126, 0x2091,\r
-+      0x8000, 0x6254, 0x6074, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c,\r
-+      0x28a7, 0x080c, 0x58fd, 0x012e, 0x0804, 0x3524, 0x012e, 0x0804,\r
-+      0x3559, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0x19a9, 0x2070,\r
-+      0x2061, 0x1847, 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c,\r
-+      0x8f68, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126,\r
-+      0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804,\r
-+      0x3526, 0x7884, 0xd0fc, 0x0148, 0x2001, 0x002a, 0x2004, 0x9082,\r
-+      0x00e1, 0x0288, 0x012e, 0x0804, 0x3559, 0x2001, 0x002a, 0x2004,\r
-+      0x2069, 0x1847, 0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x3559,\r
-+      0x012e, 0x0804, 0x3556, 0x080c, 0xadcb, 0x0dd0, 0x7884, 0xd0fc,\r
-+      0x0904, 0x3aca, 0x00c6, 0x080c, 0x4aa4, 0x00ce, 0x0d88, 0xa867,\r
-+      0x0000, 0x7884, 0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812, 0x2001,\r
-+      0x002e, 0x2004, 0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e, 0x2001,\r
-+      0x0030, 0x2004, 0xa822, 0x2001, 0x0031, 0x2004, 0xa826, 0x2001,\r
-+      0x0034, 0x2004, 0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e, 0x2001,\r
-+      0x002a, 0x2004, 0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0xa816,\r
-+      0x080c, 0x3c50, 0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c,\r
-+      0xaa18, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021,\r
-+      0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,\r
-+      0x9080, 0x001b, 0x080c, 0x4aed, 0x701f, 0x3b8d, 0x7023, 0x0001,\r
-+      0x012e, 0x0005, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a39, 0x2001, 0x199f, 0x2003,\r
-+      0x0000, 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb,\r
-+      0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3cbf, 0x080c,\r
-+      0x3c7e, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a66, 0x2079,\r
-+      0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001,\r
-+      0x0035, 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de,\r
-+      0x2011, 0x0001, 0x080c, 0x4052, 0x008e, 0x00ee, 0x00fe, 0x080c,\r
-+      0x3f7f, 0x080c, 0x3e84, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084,\r
-+      0x0140, 0x1db8, 0x080c, 0x40c6, 0x00f6, 0x2079, 0x0300, 0x78bc,\r
-+      0x00fe, 0x908c, 0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000,\r
-+      0x7050, 0x9084, 0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001,\r
-+      0x7050, 0x9084, 0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000,\r
-+      0x7054, 0x7037, 0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x1820,\r
-+      0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084,\r
-+      0x1e00, 0x00ce, 0x0138, 0x080c, 0x3e8e, 0x080c, 0x3c79, 0x0058,\r
-+      0x080c, 0x3c79, 0x080c, 0x3fea, 0x080c, 0x3f75, 0x2001, 0x020b,\r
-+      0x2004, 0xd0e4, 0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061,\r
-+      0x0100, 0x6027, 0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013,\r
-+      0x0020, 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001,\r
-+      0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x12ed, 0x2009,\r
-+      0x0028, 0x080c, 0x23d2, 0x2001, 0x0227, 0x200c, 0x2102, 0x00fe,\r
-+      0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e,\r
-+      0x2001, 0x199f, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x3524,\r
-+      0x012e, 0x2021, 0x400c, 0x0804, 0x3526, 0x0016, 0x0026, 0x0036,\r
-+      0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014,\r
-+      0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904,\r
-+      0x3be9, 0x2048, 0x1f04, 0x3b9d, 0x7068, 0x2040, 0xa28c, 0xa390,\r
-+      0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000,\r
-+      0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864, 0x009e, 0x9086,\r
-+      0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,\r
-+      0xffc0, 0x9080, 0x001b, 0x080c, 0x4aed, 0x701f, 0x3b8d, 0x00b0,\r
-+      0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,\r
-+      0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c,\r
-+      0x0f7c, 0x000e, 0x080c, 0x4af0, 0x701f, 0x3b8d, 0x015e, 0x00de,\r
-+      0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,\r
-+      0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118, 0x701f,\r
-+      0x3c4e, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009,\r
-+      0x007f, 0x080c, 0x659e, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff,\r
-+      0xb817, 0xfffd, 0x080c, 0xcff9, 0x015e, 0x00de, 0x009e, 0x008e,\r
-+      0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x3556,\r
-+      0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096,\r
-+      0x00d6, 0x0156, 0x701f, 0x3c20, 0x7007, 0x0003, 0x0804, 0x3bde,\r
-+      0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x3526, 0x0076,\r
-+      0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120,\r
-+      0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc,\r
-+      0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098,\r
-+      0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f7c, 0x000e, 0x080c, 0x4af0,\r
-+      0x007e, 0x701f, 0x3b8d, 0x7023, 0x0001, 0x0005, 0x0804, 0x3524,\r
-+      0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e,\r
-+      0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4aa4,\r
-+      0x001e, 0x0130, 0xa800, 0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58,\r
-+      0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e, 0x0005, 0x0006,\r
-+      0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, 0x0044, 0x00fe, 0x000e,\r
-+      0x0005, 0x2001, 0x199f, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6,\r
-+      0x00c6, 0x2061, 0x0200, 0x2001, 0x19aa, 0x2004, 0x601a, 0x2061,\r
-+      0x0100, 0x2001, 0x19a9, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106,\r
-+      0x080c, 0x4aa4, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a,\r
-+      0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a,\r
-+      0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, 0x2004, 0x6036,\r
-+      0x2009, 0x0040, 0x080c, 0x23d2, 0x2001, 0x002a, 0x2004, 0x9084,\r
-+      0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000, 0x78ca,\r
-+      0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6,\r
-+      0x080c, 0x4aa4, 0x2940, 0xa013, 0x0019, 0xa017, 0x0001, 0x2800,\r
-+      0xa05a, 0x2001, 0x0030, 0x2004, 0xa866, 0x2001, 0x0031, 0x2004,\r
-+      0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0xa873,\r
-+      0x0000, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x0300, 0x2003,\r
-+      0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c,\r
-+      0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,\r
-+      0x81ff, 0x0148, 0x080c, 0x2c30, 0x1130, 0x9006, 0x080c, 0x2b88,\r
-+      0x9006, 0x080c, 0x2b6b, 0x7884, 0x9084, 0x0007, 0x0002, 0x3d0a,\r
-+      0x3d13, 0x3d1c, 0x3d07, 0x3d07, 0x3d07, 0x3d07, 0x3d07, 0x012e,\r
-+      0x0804, 0x3559, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a,\r
-+      0x080c, 0x3ed8, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000,\r
-+      0x200a, 0x080c, 0x3ed8, 0x0078, 0x080c, 0x73bc, 0x1128, 0x012e,\r
-+      0x2009, 0x0016, 0x0804, 0x3556, 0x81ff, 0x0128, 0x012e, 0x2021,\r
-+      0x400b, 0x0804, 0x3526, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a39, 0x2009, 0x0101, 0x210c,\r
-+      0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058, 0x080c,\r
-+      0x41a1, 0x080c, 0x40f1, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086,\r
-+      0x2940, 0x2071, 0x1a66, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000,\r
-+      0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de,\r
-+      0x2011, 0x0001, 0x080c, 0x4052, 0x080c, 0x2c38, 0x080c, 0x2c38,\r
-+      0x080c, 0x2c38, 0x080c, 0x2c38, 0x080c, 0x4052, 0x008e, 0x00ee,\r
-+      0x00fe, 0x080c, 0x3f7f, 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c,\r
-+      0x3e8e, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e,\r
-+      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e,\r
-+      0x2009, 0x0017, 0x080c, 0x3556, 0x0cf8, 0x2001, 0x020b, 0x2004,\r
-+      0x9084, 0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe,\r
-+      0xd0bc, 0x0178, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c,\r
-+      0x3f5d, 0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c, 0x3e8e, 0x0804,\r
-+      0x3e3b, 0x080c, 0x40c6, 0x080c, 0x3fea, 0x080c, 0x3f40, 0x080c,\r
-+      0x3f75, 0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58,\r
-+      0x080c, 0x3e8e, 0x00fe, 0x0804, 0x3e3b, 0x00fe, 0x080c, 0x3e84,\r
-+      0x1150, 0x8d68, 0x2001, 0x0032, 0x2602, 0x2001, 0x0033, 0x2502,\r
-+      0x080c, 0x3e8e, 0x0080, 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004,\r
-+      0x9005, 0x1908, 0x8739, 0x0038, 0x2001, 0x1a62, 0x2004, 0x9086,\r
-+      0x0000, 0x1904, 0x3d8b, 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631,\r
-+      0x1208, 0x8529, 0x2500, 0x9605, 0x0904, 0x3e3b, 0x7884, 0xd0bc,\r
-+      0x0128, 0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3e3b, 0xa013, 0x0019,\r
-+      0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001,\r
-+      0x1a62, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x0030,\r
-+      0xa017, 0x0001, 0x78b4, 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a,\r
-+      0x2009, 0x0040, 0x080c, 0x23d2, 0x2900, 0xa85a, 0xa813, 0x0019,\r
-+      0x7884, 0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004,\r
-+      0x2061, 0x0090, 0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04,\r
-+      0x3e12, 0x00ce, 0x0030, 0xa817, 0x0001, 0x78b0, 0x9005, 0x0108,\r
-+      0xa816, 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0090, 0x7827,\r
-+      0x0002, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006,\r
-+      0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce,\r
-+      0x00fe, 0x0804, 0x3d45, 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003,\r
-+      0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d,\r
-+      0x2013, 0x0020, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102,\r
-+      0x080c, 0x12ed, 0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0,\r
-+      0x2009, 0x0028, 0x080c, 0x23d2, 0x2001, 0x0227, 0x200c, 0x2102,\r
-+      0x6050, 0x9084, 0xb7ef, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7,\r
-+      0x6043, 0x0090, 0x6043, 0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18,\r
-+      0x2b00, 0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,\r
-+      0x00ae, 0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x3524, 0x012e,\r
-+      0x2021, 0x400c, 0x0804, 0x3526, 0x9085, 0x0001, 0x1d04, 0x3e8d,\r
-+      0x2091, 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105,\r
-+      0x2003, 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a62,\r
-+      0x2003, 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x23d2, 0x2001,\r
-+      0x0227, 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026,\r
-+      0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a66, 0x7000, 0x9086, 0x0000,\r
-+      0x0520, 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203,\r
-+      0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x23d2, 0x782c,\r
-+      0xd0fc, 0x0d88, 0x080c, 0x40c6, 0x7000, 0x9086, 0x0000, 0x1d58,\r
-+      0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c,\r
-+      0x23d2, 0x782b, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005,\r
-+      0x00f6, 0x2079, 0x0100, 0x2001, 0x1818, 0x200c, 0x7932, 0x7936,\r
-+      0x080c, 0x2887, 0x7850, 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852,\r
-+      0x2019, 0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000,\r
-+      0x7852, 0x20a9, 0x0046, 0x1d04, 0x3ef3, 0x2091, 0x6000, 0x1f04,\r
-+      0x3ef3, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfff, 0x7852, 0x2001,\r
-+      0x0021, 0x2004, 0x9084, 0x0003, 0x9086, 0x0001, 0x1120, 0x7850,\r
-+      0x9084, 0xdfff, 0x7852, 0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843,\r
-+      0x0010, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x3f13, 0x7850, 0x9085,\r
-+      0x1400, 0x7852, 0x2019, 0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c,\r
-+      0x1110, 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850, 0x9085, 0x0400,\r
-+      0x7852, 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001, 0xa001, 0x8319,\r
-+      0x1de0, 0x2001, 0x0100, 0x080c, 0x2cef, 0x7827, 0x0020, 0x7843,\r
-+      0x0000, 0x9006, 0x080c, 0x2cef, 0x7827, 0x0048, 0x00fe, 0x0005,\r
-+      0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a62, 0x2079,\r
-+      0x0320, 0x2001, 0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086,\r
-+      0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003,\r
-+      0x782b, 0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300,\r
-+      0x78bc, 0x00fe, 0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a,\r
-+      0x2009, 0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108,\r
-+      0x8d68, 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200,\r
-+      0x781c, 0xd084, 0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6,\r
-+      0x2071, 0x0100, 0x2001, 0x19aa, 0x2004, 0x70e2, 0x080c, 0x3c6f,\r
-+      0x1188, 0x2001, 0x1820, 0x2004, 0x2009, 0x181f, 0x210c, 0x918c,\r
-+      0x00ff, 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073,\r
-+      0xe109, 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1818,\r
-+      0x210c, 0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000,\r
-+      0x7073, 0x0809, 0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a,\r
-+      0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e,\r
-+      0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084,\r
-+      0x1984, 0x9085, 0x0092, 0x7016, 0x080c, 0x40c6, 0x00f6, 0x2071,\r
-+      0x1a62, 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4,\r
-+      0x0120, 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8,\r
-+      0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011,\r
-+      0x0011, 0x080c, 0x4052, 0x2011, 0x0001, 0x080c, 0x4052, 0x00fe,\r
-+      0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a62, 0x2079, 0x0320,\r
-+      0x792c, 0xd1fc, 0x0904, 0x404f, 0x782b, 0x0002, 0x9026, 0xd19c,\r
-+      0x1904, 0x404b, 0x7000, 0x0002, 0x404f, 0x4000, 0x4030, 0x404b,\r
-+      0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001,\r
-+      0x080c, 0x4052, 0x0904, 0x404f, 0x080c, 0x4052, 0x0804, 0x404f,\r
-+      0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914,\r
-+      0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff,\r
-+      0x0de8, 0x080c, 0x3f5d, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300,\r
-+      0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8,\r
-+      0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904,\r
-+      0x3ff4, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004,\r
-+      0x9086, 0x0015, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0031, 0xa212,\r
-+      0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee,\r
-+      0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096,\r
-+      0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c,\r
-+      0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dd5, 0x9398, 0x4080, 0x231d,\r
-+      0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e,\r
-+      0x003e, 0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804,\r
-+      0xa05a, 0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005,\r
-+      0x40bd, 0x40b4, 0x40ab, 0x40a2, 0x4099, 0x4090, 0x4087, 0xa964,\r
-+      0x7902, 0xa968, 0x7906, 0xa96c, 0x7912, 0xa970, 0x7916, 0x0005,\r
-+      0xa974, 0x7902, 0xa978, 0x7906, 0xa97c, 0x7912, 0xa980, 0x7916,\r
-+      0x0005, 0xa984, 0x7902, 0xa988, 0x7906, 0xa98c, 0x7912, 0xa990,\r
-+      0x7916, 0x0005, 0xa994, 0x7902, 0xa998, 0x7906, 0xa99c, 0x7912,\r
-+      0xa9a0, 0x7916, 0x0005, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac,\r
-+      0x7912, 0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906,\r
-+      0xa9bc, 0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8,\r
-+      0x7906, 0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6,\r
-+      0x0086, 0x2071, 0x1a66, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8,\r
-+      0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002, 0x40ed, 0x40d9,\r
-+      0x40e4, 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c,\r
-+      0x4052, 0x190c, 0x4052, 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc,\r
-+      0x1d38, 0x2011, 0x0001, 0x080c, 0x4052, 0x008e, 0x00ee, 0x00fe,\r
-+      0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001,\r
-+      0x19aa, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19a9, 0x2004,\r
-+      0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005,\r
-+      0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c,\r
-+      0x080c, 0x4aa4, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a,\r
-+      0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e,\r
-+      0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c,\r
-+      0x4169, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4aa4, 0xa813,\r
-+      0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004,\r
-+      0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004,\r
-+      0x9084, 0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061,\r
-+      0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, 0x2004, 0x6036, 0x2009,\r
-+      0x0040, 0x080c, 0x23d2, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,\r
-+      0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e,\r
-+      0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe,\r
-+      0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1,\r
-+      0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006,\r
-+      0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b,\r
-+      0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040,\r
-+      0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940,\r
-+      0x0086, 0x080c, 0x4aa4, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900,\r
-+      0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee,\r
-+      0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038,\r
-+      0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4aa4,\r
-+      0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007,\r
-+      0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096,\r
-+      0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x4169,\r
-+      0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4aa4, 0x2940, 0xa013,\r
-+      0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004,\r
-+      0xa066, 0x2001, 0x0031, 0x2004, 0xa06a, 0x2001, 0x002a, 0x2004,\r
-+      0x9084, 0xfff8, 0xa06e, 0x2001, 0x002b, 0x2004, 0xa072, 0x2001,\r
-+      0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101,\r
-+      0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a62,\r
-+      0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300,\r
-+      0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004,\r
-+      0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091,\r
-+      0x8000, 0x20a9, 0x0007, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006,\r
-+      0x4004, 0x20a9, 0x000c, 0x20a1, 0xfff4, 0x20e9, 0x0000, 0x9006,\r
-+      0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052,\r
-+      0x0108, 0x0005, 0x0804, 0x3524, 0x7d98, 0x7c9c, 0x0804, 0x361b,\r
-+      0x080c, 0x73bc, 0x190c, 0x5fdf, 0x6040, 0x9084, 0x0020, 0x09b1,\r
-+      0x2069, 0x1847, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c,\r
-+      0x7d98, 0x2039, 0x0001, 0x080c, 0x4aed, 0x701f, 0x4248, 0x0005,\r
-+      0x080c, 0x56de, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, 0x20d8,\r
-+      0x21d0, 0x2069, 0x1847, 0x6800, 0x9005, 0x0904, 0x3559, 0x6804,\r
-+      0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x3559, 0xd094, 0x00c6, 0x2061,\r
-+      0x0100, 0x6104, 0x0138, 0x6200, 0x9292, 0x0005, 0x0218, 0x918c,\r
-+      0xffdf, 0x0010, 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6,\r
-+      0x2061, 0x0100, 0x6104, 0x0118, 0x918d, 0x0010, 0x0010, 0x918c,\r
-+      0xffef, 0x6106, 0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a, 0x007f,\r
-+      0x1a04, 0x3559, 0x9288, 0x3325, 0x210d, 0x918c, 0x00ff, 0x6166,\r
-+      0xd0dc, 0x0130, 0x6828, 0x908a, 0x007f, 0x1a04, 0x3559, 0x605e,\r
-+      0x6888, 0x9084, 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006,\r
-+      0x2009, 0x19b1, 0x9080, 0x297a, 0x2005, 0x200a, 0x000e, 0x2009,\r
-+      0x19b2, 0x9080, 0x297e, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100,\r
-+      0x0a04, 0x3559, 0x908a, 0x0841, 0x1a04, 0x3559, 0x9084, 0x0007,\r
-+      0x1904, 0x3559, 0x680c, 0x9005, 0x0904, 0x3559, 0x6810, 0x9005,\r
-+      0x0904, 0x3559, 0x6848, 0x6940, 0x910a, 0x1a04, 0x3559, 0x8001,\r
-+      0x0904, 0x3559, 0x684c, 0x6944, 0x910a, 0x1a04, 0x3559, 0x8001,\r
-+      0x0904, 0x3559, 0x2009, 0x1981, 0x200b, 0x0000, 0x2001, 0x1869,\r
-+      0x2004, 0xd0c4, 0x0140, 0x7884, 0x200a, 0x2009, 0x017f, 0x200a,\r
-+      0x3b00, 0xc085, 0x20d8, 0x6814, 0x908c, 0x00ff, 0x614e, 0x8007,\r
-+      0x9084, 0x00ff, 0x6052, 0x080c, 0x76d5, 0x080c, 0x69a8, 0x080c,\r
-+      0x69dc, 0x6808, 0x602a, 0x080c, 0x2344, 0x2009, 0x0170, 0x200b,\r
-+      0x0080, 0xa001, 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c,\r
-+      0x28e1, 0x003e, 0x6000, 0x9086, 0x0000, 0x1904, 0x43df, 0x6818,\r
-+      0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016,\r
-+      0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934,\r
-+      0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0x9084,\r
-+      0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217,\r
-+      0x831f, 0x20a9, 0x0004, 0x20a1, 0x19b3, 0x20e9, 0x0001, 0x4001,\r
-+      0x20a9, 0x0004, 0x20a1, 0x19cd, 0x20e9, 0x0001, 0x4001, 0x080c,\r
-+      0x85ef, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0510,\r
-+      0x0068, 0x2009, 0x0100, 0x210c, 0x918e, 0x0008, 0x1110, 0x839d,\r
-+      0x0010, 0x83f5, 0x3e18, 0x12b0, 0x3508, 0x8109, 0x080c, 0x7c8b,\r
-+      0x6878, 0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a,\r
-+      0x9184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010,\r
-+      0x6003, 0x0001, 0x1f04, 0x4339, 0x00ce, 0x00c6, 0x2061, 0x199c,\r
-+      0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158, 0x2063,\r
-+      0x0000, 0x2001, 0x0001, 0x080c, 0x2b88, 0x2001, 0x0001, 0x080c,\r
-+      0x2b6b, 0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001, 0x9006,\r
-+      0x080c, 0x2b88, 0x9006, 0x080c, 0x2b6b, 0x0028, 0x9286, 0x8000,\r
-+      0x1d30, 0x2063, 0x0002, 0x00ce, 0x6888, 0xd0ec, 0x0130, 0x2011,\r
-+      0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030,\r
-+      0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82,\r
-+      0x2001, 0x197c, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170,\r
-+      0x928e, 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa,\r
-+      0x080c, 0x2956, 0x2001, 0x196d, 0x2102, 0x0008, 0x2102, 0x00c6,\r
-+      0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c,\r
-+      0x73bc, 0x0128, 0x080c, 0x4fdb, 0x0110, 0x080c, 0x28a7, 0x60d4,\r
-+      0x9005, 0x01c0, 0x6003, 0x0001, 0x2009, 0x43c7, 0x00e0, 0x080c,\r
-+      0x73bc, 0x1168, 0x2011, 0x7252, 0x080c, 0x84f3, 0x2011, 0x7245,\r
-+      0x080c, 0x85cd, 0x080c, 0x76a9, 0x080c, 0x72ee, 0x0040, 0x080c,\r
-+      0x5ed9, 0x0028, 0x6003, 0x0004, 0x2009, 0x43df, 0x0020, 0x080c,\r
-+      0x68d4, 0x0804, 0x3524, 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff,\r
-+      0x9086, 0x004c, 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091, 0x303d,\r
-+      0x0817, 0x6000, 0x9086, 0x0000, 0x0904, 0x3556, 0x2069, 0x1847,\r
-+      0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c,\r
-+      0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x4af0, 0x9006,\r
-+      0x080c, 0x28a7, 0x81ff, 0x1904, 0x3556, 0x080c, 0x73bc, 0x11b0,\r
-+      0x080c, 0x76a4, 0x080c, 0x601a, 0x080c, 0x3319, 0x0118, 0x6130,\r
-+      0xc18d, 0x6132, 0x080c, 0xd230, 0x0130, 0x080c, 0x73df, 0x1118,\r
-+      0x080c, 0x7394, 0x0038, 0x080c, 0x72ee, 0x0020, 0x080c, 0x5fdf,\r
-+      0x080c, 0x5ed9, 0x0804, 0x3524, 0x81ff, 0x1904, 0x3556, 0x080c,\r
-+      0x73bc, 0x1110, 0x0804, 0x3556, 0x6194, 0x81ff, 0x01a8, 0x704f,\r
-+      0x0000, 0x2001, 0x1c80, 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c,\r
-+      0x7d98, 0x0126, 0x2091, 0x8000, 0x2039, 0x0001, 0x080c, 0x4af0,\r
-+      0x701f, 0x3522, 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6, 0x2069,\r
-+      0x1c80, 0x20a9, 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x2019,\r
-+      0xffff, 0x4304, 0x655c, 0x9588, 0x3325, 0x210d, 0x918c, 0x00ff,\r
-+      0x216a, 0x900e, 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8, 0x080c,\r
-+      0x65ff, 0x1190, 0xb814, 0x821c, 0x0238, 0x9398, 0x1c80, 0x9085,\r
-+      0xff00, 0x8007, 0x201a, 0x0038, 0x9398, 0x1c80, 0x2324, 0x94a4,\r
-+      0xff00, 0x9405, 0x201a, 0x8210, 0x8108, 0x9182, 0x0080, 0x1208,\r
-+      0x0c18, 0x8201, 0x8007, 0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9,\r
-+      0x0040, 0x20a1, 0x1c80, 0x2099, 0x1c80, 0x080c, 0x5f6a, 0x0804,\r
-+      0x4439, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x080c, 0x4aa4, 0x1120,\r
-+      0x2009, 0x0002, 0x0804, 0x3556, 0x080c, 0x56cf, 0xd0b4, 0x0558,\r
-+      0x7884, 0x908e, 0x007e, 0x0538, 0x908e, 0x007f, 0x0520, 0x908e,\r
-+      0x0080, 0x0508, 0x080c, 0x3314, 0x1148, 0xb800, 0xd08c, 0x11d8,\r
-+      0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa867, 0x0000,\r
-+      0xa868, 0xc0fd, 0xa86a, 0x080c, 0xccfe, 0x1120, 0x2009, 0x0003,\r
-+      0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x44c7, 0x0005, 0x080c,\r
-+      0x4ad7, 0x0904, 0x3559, 0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8,\r
-+      0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003,\r
-+      0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8,\r
-+      0x9080, 0x0006, 0x2098, 0x080c, 0x0f7c, 0x0070, 0x20a9, 0x0004,\r
-+      0xa85c, 0x9080, 0x000a, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080,\r
-+      0x000a, 0x2098, 0x080c, 0x0f7c, 0x8906, 0x8006, 0x8007, 0x90bc,\r
-+      0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c,\r
-+      0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4af0, 0x81ff, 0x1904, 0x3556,\r
-+      0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x6771, 0x0904, 0x3556,\r
-+      0x0058, 0xa878, 0x9005, 0x0120, 0x2009, 0x0004, 0x0804, 0x3556,\r
-+      0xa974, 0xaa94, 0x0804, 0x3524, 0x080c, 0x56d7, 0x0904, 0x3524,\r
-+      0x701f, 0x4511, 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904, 0x3556,\r
-+      0x7888, 0x908a, 0x1000, 0x1a04, 0x3559, 0x080c, 0x4ad7, 0x0904,\r
-+      0x3559, 0x080c, 0x6972, 0x0120, 0x080c, 0x697a, 0x1904, 0x3559,\r
-+      0x080c, 0x67f6, 0x0904, 0x3556, 0x2019, 0x0004, 0x900e, 0x080c,\r
-+      0x6783, 0x0904, 0x3556, 0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c,\r
-+      0x908a, 0x1000, 0x12f8, 0x080c, 0x4ad5, 0x01e0, 0x080c, 0x6972,\r
-+      0x0118, 0x080c, 0x697a, 0x11b0, 0x080c, 0x67f6, 0x2009, 0x0002,\r
-+      0x0168, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x6783, 0x2009,\r
-+      0x0003, 0x0120, 0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005,\r
-+      0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,\r
-+      0x0030, 0x0005, 0xa897, 0x4000, 0x080c, 0x56d7, 0x0110, 0x9006,\r
-+      0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x9186,\r
-+      0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0x1800,\r
-+      0x645c, 0x2400, 0x9506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8,\r
-+      0x0005, 0x080c, 0x65ff, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b,\r
-+      0x9108, 0x080c, 0x8501, 0x0005, 0x81ff, 0x1904, 0x3556, 0x798c,\r
-+      0x2001, 0x1980, 0x918c, 0x8000, 0x2102, 0x080c, 0x4abb, 0x0904,\r
-+      0x3559, 0x080c, 0x6972, 0x0120, 0x080c, 0x697a, 0x1904, 0x3559,\r
-+      0x080c, 0x66c6, 0x0904, 0x3556, 0x080c, 0x677a, 0x0904, 0x3556,\r
-+      0x2001, 0x1980, 0x2004, 0xd0fc, 0x1904, 0x3524, 0x0804, 0x451c,\r
-+      0xa9a0, 0x2001, 0x1980, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c,\r
-+      0x4ac8, 0x01a0, 0x080c, 0x6972, 0x0118, 0x080c, 0x697a, 0x1170,\r
-+      0x080c, 0x66c6, 0x2009, 0x0002, 0x0128, 0x080c, 0x677a, 0x1170,\r
-+      0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,\r
-+      0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,\r
-+      0x2001, 0x1980, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56d7, 0x0110,\r
-+      0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,\r
-+      0x81ff, 0x1904, 0x3556, 0x798c, 0x2001, 0x197f, 0x918c, 0x8000,\r
-+      0x2102, 0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x6972, 0x0120,\r
-+      0x080c, 0x697a, 0x1904, 0x3559, 0x080c, 0x66c6, 0x0904, 0x3556,\r
-+      0x080c, 0x6768, 0x0904, 0x3556, 0x2001, 0x197f, 0x2004, 0xd0fc,\r
-+      0x1904, 0x3524, 0x0804, 0x451c, 0xa9a0, 0x2001, 0x197f, 0x918c,\r
-+      0x8000, 0xc18d, 0x2102, 0x080c, 0x4ac8, 0x01a0, 0x080c, 0x6972,\r
-+      0x0118, 0x080c, 0x697a, 0x1170, 0x080c, 0x66c6, 0x2009, 0x0002,\r
-+      0x0128, 0x080c, 0x6768, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005,\r
-+      0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,\r
-+      0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x197f, 0x2004, 0xd0fc,\r
-+      0x1128, 0x080c, 0x56d7, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,\r
-+      0x0001, 0x2001, 0x0000, 0x0005, 0x6100, 0x0804, 0x3524, 0x080c,\r
-+      0x4ad7, 0x0904, 0x3559, 0x080c, 0x56e3, 0x1904, 0x3556, 0x79a8,\r
-+      0xd184, 0x1158, 0xb834, 0x8007, 0x789e, 0xb830, 0x8007, 0x789a,\r
-+      0xbb2c, 0x831f, 0xba28, 0x8217, 0x0050, 0xb824, 0x8007, 0x789e,\r
-+      0xb820, 0x8007, 0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217, 0xb900,\r
-+      0x918c, 0x0200, 0x0804, 0x3524, 0x78a8, 0x909c, 0x0003, 0xd0b4,\r
-+      0x1148, 0x939a, 0x0003, 0x1a04, 0x3556, 0x625c, 0x7884, 0x9206,\r
-+      0x1904, 0x46c9, 0x080c, 0x85d9, 0x2001, 0xfff4, 0x2009, 0x000c,\r
-+      0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0000, 0x0006, 0x78a8,\r
-+      0x9084, 0x0080, 0x11c8, 0x0006, 0x0036, 0x2001, 0x1a7f, 0x201c,\r
-+      0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a80, 0x201c, 0x7b9e, 0x2003,\r
-+      0x0000, 0x2001, 0x1a81, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x003e,\r
-+      0x000e, 0x000e, 0x0804, 0x4af0, 0x000e, 0x2031, 0x0000, 0x2061,\r
-+      0x18b8, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392,\r
-+      0xa496, 0xa59a, 0x080c, 0x10e9, 0x7007, 0x0002, 0x701f, 0x46e9,\r
-+      0x0005, 0x81ff, 0x1904, 0x3556, 0x080c, 0x4ad7, 0x0904, 0x3559,\r
-+      0x080c, 0x6972, 0x1904, 0x3556, 0x00c6, 0x080c, 0x4aa4, 0x00ce,\r
-+      0x0904, 0x3556, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7ea8,\r
-+      0x080c, 0xcca4, 0x0904, 0x3556, 0x7007, 0x0003, 0x701f, 0x4703,\r
-+      0x0005, 0x080c, 0x420e, 0x0006, 0x0036, 0x2001, 0x1a7f, 0x201c,\r
-+      0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a80, 0x201c, 0x7b9e, 0x2003,\r
-+      0x0000, 0x2001, 0x1a81, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x003e,\r
-+      0x000e, 0x0804, 0x3524, 0xa830, 0x9086, 0x0100, 0x0904, 0x3556,\r
-+      0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,\r
-+      0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,\r
-+      0x4af0, 0x9006, 0x080c, 0x28a7, 0x78a8, 0x9084, 0x00ff, 0x9086,\r
-+      0x00ff, 0x0118, 0x81ff, 0x1904, 0x3556, 0x080c, 0x73bc, 0x0110,\r
-+      0x080c, 0x5fdf, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3559, 0x7984,\r
-+      0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x3559, 0x2100,\r
-+      0x080c, 0x2871, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061,\r
-+      0x19fa, 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, 0x6077,\r
-+      0x0000, 0x080c, 0x73bc, 0x1158, 0x080c, 0x76a4, 0x080c, 0x601a,\r
-+      0x9085, 0x0001, 0x080c, 0x7403, 0x080c, 0x72ee, 0x00d0, 0x080c,\r
-+      0xadd2, 0x2061, 0x0100, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff,\r
-+      0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009,\r
-+      0x1999, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5f05, 0x080c,\r
-+      0x858b, 0x7984, 0x080c, 0x73bc, 0x1110, 0x2009, 0x00ff, 0x7a88,\r
-+      0x080c, 0x457f, 0x012e, 0x00ce, 0x002e, 0x0804, 0x3524, 0x7984,\r
-+      0x080c, 0x659e, 0x2b08, 0x1904, 0x3559, 0x0804, 0x3524, 0x81ff,\r
-+      0x0120, 0x2009, 0x0001, 0x0804, 0x3556, 0x60dc, 0xd0ac, 0x1130,\r
-+      0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3556, 0x080c, 0x4aa4,\r
-+      0x1120, 0x2009, 0x0002, 0x0804, 0x3556, 0x7984, 0x9192, 0x0021,\r
-+      0x1a04, 0x3559, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,\r
-+      0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, 0x4aed, 0x701f, 0x47b7,\r
-+      0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x518d, 0x0005, 0x2009,\r
-+      0x0080, 0x080c, 0x65ff, 0x1118, 0x080c, 0x6972, 0x0120, 0x2021,\r
-+      0x400a, 0x0804, 0x3526, 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70,\r
-+      0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, 0x4850,\r
-+      0x90be, 0x0112, 0x0904, 0x4850, 0x90be, 0x0113, 0x0904, 0x4850,\r
-+      0x90be, 0x0114, 0x0904, 0x4850, 0x90be, 0x0117, 0x0904, 0x4850,\r
-+      0x90be, 0x011a, 0x0904, 0x4850, 0x90be, 0x011c, 0x0904, 0x4850,\r
-+      0x90be, 0x0121, 0x0904, 0x4837, 0x90be, 0x0131, 0x0904, 0x4837,\r
-+      0x90be, 0x0171, 0x0904, 0x4850, 0x90be, 0x0173, 0x0904, 0x4850,\r
-+      0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, 0x485b,\r
-+      0x90be, 0x0212, 0x0904, 0x4844, 0x90be, 0x0213, 0x05e8, 0x90be,\r
-+      0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a, 0x1120,\r
-+      0xa89c, 0x8007, 0xa89e, 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be,\r
-+      0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x3559, 0x7028, 0x9080,\r
-+      0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007,\r
-+      0x080c, 0x4899, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034,\r
-+      0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4899, 0x00c8, 0x7028,\r
-+      0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,\r
-+      0x0001, 0x080c, 0x48a6, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098,\r
-+      0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x48a6,\r
-+      0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8,\r
-+      0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4aa4, 0x0550, 0xa868,\r
-+      0xc0fd, 0xa86a, 0xa867, 0x0119, 0x9006, 0xa882, 0xa87f, 0x0020,\r
-+      0xa88b, 0x0001, 0x810b, 0xa9ae, 0xa8b2, 0xaab6, 0xabba, 0xacbe,\r
-+      0xadc2, 0xa9c6, 0xa8ca, 0x00ce, 0x009e, 0x00de, 0xa866, 0xa822,\r
-+      0xa868, 0xc0fd, 0xa86a, 0xa804, 0x2048, 0x080c, 0xccbf, 0x1120,\r
-+      0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x4890,\r
-+      0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x3556,\r
-+      0xa820, 0x9086, 0x8001, 0x1904, 0x3524, 0x2009, 0x0004, 0x0804,\r
-+      0x3556, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104,\r
-+      0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,\r
-+      0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204,\r
-+      0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e,\r
-+      0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3556, 0x60dc,\r
-+      0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3556,\r
-+      0x7984, 0x78a8, 0x2040, 0x080c, 0xadcb, 0x1120, 0x9182, 0x007f,\r
-+      0x0a04, 0x3559, 0x9186, 0x00ff, 0x0904, 0x3559, 0x9182, 0x0800,\r
-+      0x1a04, 0x3559, 0x7a8c, 0x7b88, 0x607c, 0x9306, 0x1140, 0x6080,\r
-+      0x924e, 0x0904, 0x3559, 0x99cc, 0xff00, 0x0904, 0x3559, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x49b7, 0x0904, 0x4937, 0x0086, 0x90c6,\r
-+      0x4000, 0x008e, 0x1538, 0x00c6, 0x0006, 0x0036, 0xb818, 0xbb1c,\r
-+      0x9305, 0xbb20, 0x9305, 0xbb24, 0x9305, 0xbb28, 0x9305, 0xbb2c,\r
-+      0x9305, 0xbb30, 0x9305, 0xbb34, 0x9305, 0x003e, 0x0570, 0xd88c,\r
-+      0x1128, 0x080c, 0x6972, 0x0110, 0xc89d, 0x0438, 0x900e, 0x080c,\r
-+      0x681f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x000e,\r
-+      0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, 0x90c6,\r
-+      0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, 0x1108,\r
-+      0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009,\r
-+      0x000a, 0x2020, 0x012e, 0x0804, 0x3526, 0x000e, 0x00ce, 0x2b00,\r
-+      0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0xaeaf,\r
-+      0x0904, 0x498c, 0x2b00, 0x6012, 0x080c, 0xcfaa, 0x2e58, 0x00ee,\r
-+      0x00e6, 0x00c6, 0x080c, 0x4aa4, 0x00ce, 0x2b70, 0x1158, 0x080c,\r
-+      0xae61, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002,\r
-+      0x0804, 0x3556, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932,\r
-+      0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0xd89c, 0x1110,\r
-+      0x080c, 0x31bf, 0x6023, 0x0001, 0x9006, 0x080c, 0x653b, 0xd89c,\r
-+      0x0138, 0x2001, 0x0004, 0x080c, 0x654f, 0x2009, 0x0003, 0x0030,\r
-+      0x2001, 0x0002, 0x080c, 0x654f, 0x2009, 0x0002, 0x080c, 0xaedc,\r
-+      0x78a8, 0xd094, 0x0138, 0x00ee, 0x7024, 0x00e6, 0x2058, 0xb8cc,\r
-+      0xc08d, 0xb8ce, 0x9085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e,\r
-+      0x012e, 0x1120, 0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003,\r
-+      0x701f, 0x499b, 0x0005, 0xa830, 0x9086, 0x0100, 0x7024, 0x2058,\r
-+      0x1138, 0x2009, 0x0004, 0xba04, 0x9294, 0x00ff, 0x0804, 0x562c,\r
-+      0x900e, 0xa868, 0xd0f4, 0x1904, 0x3524, 0x080c, 0x681f, 0x1108,\r
-+      0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3524, 0x00e6,\r
-+      0x00d6, 0x0096, 0x83ff, 0x0904, 0x4a06, 0x902e, 0x080c, 0xadcb,\r
-+      0x0130, 0x9026, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021,\r
-+      0x007f, 0x20a9, 0x0781, 0x2071, 0x107f, 0x2e04, 0x9005, 0x11b8,\r
-+      0x2100, 0x9406, 0x1904, 0x4a17, 0x2428, 0x94ce, 0x007f, 0x1120,\r
-+      0x92ce, 0xfffd, 0x1558, 0x0030, 0x94ce, 0x0080, 0x1130, 0x92ce,\r
-+      0xfffc, 0x1520, 0x93ce, 0x00ff, 0x1508, 0xc5fd, 0x0480, 0x2058,\r
-+      0xbf10, 0x2700, 0x9306, 0x11e8, 0xbe14, 0x2600, 0x9206, 0x11c8,\r
-+      0x2400, 0x9106, 0x1180, 0xd884, 0x0598, 0xd894, 0x1588, 0x080c,\r
-+      0x6912, 0x1570, 0x2001, 0x4000, 0x0460, 0x080c, 0x6972, 0x1540,\r
-+      0x2001, 0x4000, 0x0430, 0x2001, 0x4007, 0x0418, 0x2001, 0x4006,\r
-+      0x0400, 0x2400, 0x9106, 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff,\r
-+      0x0918, 0x080c, 0xadcb, 0x1900, 0x2001, 0x4008, 0x0090, 0x8420,\r
-+      0x8e70, 0x1f04, 0x49cd, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048,\r
-+      0x2001, 0x0001, 0x0030, 0x080c, 0x659e, 0x1dd0, 0xbb12, 0xba16,\r
-+      0x9006, 0x9005, 0x009e, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120,\r
-+      0x2009, 0x0001, 0x0804, 0x3556, 0x080c, 0x4aa4, 0x1120, 0x2009,\r
-+      0x0002, 0x0804, 0x3556, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,\r
-+      0x7884, 0x9005, 0x0904, 0x3559, 0x9096, 0x00ff, 0x0120, 0x9092,\r
-+      0x0004, 0x1a04, 0x3559, 0x2010, 0x2918, 0x080c, 0x3165, 0x1120,\r
-+      0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x4a59,\r
-+      0x0005, 0xa830, 0x9086, 0x0100, 0x1904, 0x3524, 0x2009, 0x0004,\r
-+      0x0804, 0x3556, 0x7984, 0x080c, 0xadcb, 0x1120, 0x9182, 0x007f,\r
-+      0x0a04, 0x3559, 0x9186, 0x00ff, 0x0904, 0x3559, 0x9182, 0x0800,\r
-+      0x1a04, 0x3559, 0x2001, 0x9000, 0x080c, 0x5687, 0x1904, 0x3556,\r
-+      0x0804, 0x3524, 0xa998, 0x080c, 0xadcb, 0x1118, 0x9182, 0x007f,\r
-+      0x0280, 0x9186, 0x00ff, 0x0168, 0x9182, 0x0800, 0x1250, 0x2001,\r
-+      0x9000, 0x080c, 0x5687, 0x11a8, 0x0060, 0xa897, 0x4005, 0xa99a,\r
-+      0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,\r
-+      0x0005, 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,\r
-+      0x0005, 0x2009, 0x000a, 0x0c48, 0x080c, 0x0fff, 0x0198, 0x9006,\r
-+      0xa802, 0x7014, 0x9005, 0x1120, 0x2900, 0x7016, 0x701a, 0x0040,\r
-+      0x7018, 0xa802, 0x0086, 0x2040, 0x2900, 0xa006, 0x701a, 0x008e,\r
-+      0x9085, 0x0001, 0x0005, 0x7984, 0x080c, 0x65ff, 0x1130, 0x7e88,\r
-+      0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005,\r
-+      0xa998, 0x080c, 0x65ff, 0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082,\r
-+      0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84,\r
-+      0x2608, 0x080c, 0x65ff, 0x1108, 0x0008, 0x905e, 0x8bff, 0x0005,\r
-+      0x0016, 0x7114, 0x81ff, 0x0128, 0x2148, 0xa904, 0x080c, 0x1031,\r
-+      0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010,\r
-+      0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44, 0xa66a, 0xa17a, 0xa772,\r
-+      0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10e9, 0x7007,\r
-+      0x0002, 0x701f, 0x3524, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000,\r
-+      0x2079, 0x0000, 0x2001, 0x18b0, 0x2004, 0x9005, 0x1190, 0x0e04,\r
-+      0x4b21, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091,\r
-+      0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x0804,\r
-+      0x4b87, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071, 0x189e,\r
-+      0x7044, 0x9005, 0x1540, 0x7148, 0x9182, 0x0010, 0x0288, 0x7038,\r
-+      0x2060, 0x080c, 0x0fff, 0x0904, 0x4b7f, 0xa84b, 0x0000, 0x2900,\r
-+      0x7046, 0x2001, 0x0002, 0x9080, 0x2090, 0x2005, 0xa846, 0x0098,\r
-+      0x7038, 0x90e0, 0x0004, 0x2001, 0x18ba, 0x9c82, 0x18fa, 0x0210,\r
-+      0x2061, 0x18ba, 0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108, 0x703e,\r
-+      0x8108, 0x714a, 0x0460, 0x7148, 0x8108, 0x714a, 0x7044, 0x2040,\r
-+      0xa144, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0dd5, 0x2060,\r
-+      0x001e, 0x8108, 0x2105, 0x9005, 0xa146, 0x1520, 0x080c, 0x0fff,\r
-+      0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8, 0x9006,\r
-+      0xa806, 0xa84a, 0xa046, 0x2800, 0xa802, 0x2900, 0xa006, 0x7046,\r
-+      0x2001, 0x0002, 0x9080, 0x2090, 0x2005, 0xa846, 0x0058, 0x2262,\r
-+      0x6306, 0x640a, 0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e, 0x012e,\r
-+      0x00fe, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4ba9, 0x4ba9,\r
-+      0x4bab, 0x4ba9, 0x4ba9, 0x4ba9, 0x4baf, 0x4ba9, 0x4ba9, 0x4ba9,\r
-+      0x4bb3, 0x4ba9, 0x4ba9, 0x4ba9, 0x4bb7, 0x4ba9, 0x4ba9, 0x4ba9,\r
-+      0x4bbb, 0x4ba9, 0x4ba9, 0x4ba9, 0x4bbf, 0x4ba9, 0x4ba9, 0x4ba9,\r
-+      0x4bc4, 0x080c, 0x0dd5, 0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286,\r
-+      0xa38a, 0xa48e, 0x0878, 0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6,\r
-+      0xa3aa, 0xa4ae, 0x0838, 0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6,\r
-+      0xa3ca, 0xa4ce, 0x0804, 0x4b82, 0xa2d6, 0xa3da, 0xa4de, 0x0804,\r
-+      0x4b82, 0x00e6, 0x2071, 0x189e, 0x7048, 0x9005, 0x0904, 0x4c5b,\r
-+      0x0126, 0x2091, 0x8000, 0x0e04, 0x4c5a, 0x00f6, 0x2079, 0x0000,\r
-+      0x00c6, 0x0096, 0x0086, 0x0076, 0x9006, 0x2038, 0x7040, 0x2048,\r
-+      0x9005, 0x0500, 0xa948, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c,\r
-+      0x0dd5, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a, 0x1904,\r
-+      0x4c5d, 0xa804, 0x9005, 0x090c, 0x0dd5, 0x7042, 0x2938, 0x2040,\r
-+      0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x2090, 0x2005, 0xa04a,\r
-+      0x0804, 0x4c5d, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408, 0x650c,\r
-+      0x2200, 0x7836, 0x7833, 0x0012, 0x7882, 0x2300, 0x7886, 0x2400,\r
-+      0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,\r
-+      0x119b, 0x87ff, 0x0118, 0x2748, 0x080c, 0x1031, 0x7048, 0x8001,\r
-+      0x704a, 0x9005, 0x1170, 0x7040, 0x2048, 0x9005, 0x0128, 0x080c,\r
-+      0x1031, 0x9006, 0x7042, 0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba,\r
-+      0x0420, 0x7040, 0x9005, 0x1508, 0x7238, 0x2c00, 0x9206, 0x0148,\r
-+      0x9c80, 0x0004, 0x90fa, 0x18fa, 0x0210, 0x2001, 0x18ba, 0x703e,\r
-+      0x00a0, 0x9006, 0x703e, 0x703a, 0x7044, 0x9005, 0x090c, 0x0dd5,\r
-+      0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001, 0x0002,\r
-+      0x9080, 0x2090, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e, 0x009e,\r
-+      0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b,\r
-+      0x0002, 0x4c7c, 0x4c7c, 0x4c7e, 0x4c7c, 0x4c7c, 0x4c7c, 0x4c83,\r
-+      0x4c7c, 0x4c7c, 0x4c7c, 0x4c88, 0x4c7c, 0x4c7c, 0x4c7c, 0x4c8d,\r
-+      0x4c7c, 0x4c7c, 0x4c7c, 0x4c92, 0x4c7c, 0x4c7c, 0x4c7c, 0x4c97,\r
-+      0x4c7c, 0x4c7c, 0x4c7c, 0x4c9c, 0x080c, 0x0dd5, 0xaa74, 0xab78,\r
-+      0xac7c, 0x0804, 0x4c08, 0xaa84, 0xab88, 0xac8c, 0x0804, 0x4c08,\r
-+      0xaa94, 0xab98, 0xac9c, 0x0804, 0x4c08, 0xaaa4, 0xaba8, 0xacac,\r
-+      0x0804, 0x4c08, 0xaab4, 0xabb8, 0xacbc, 0x0804, 0x4c08, 0xaac4,\r
-+      0xabc8, 0xaccc, 0x0804, 0x4c08, 0xaad4, 0xabd8, 0xacdc, 0x0804,\r
-+      0x4c08, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009, 0x007e,\r
-+      0x080c, 0x65ff, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110, 0x2019,\r
-+      0x0000, 0x2011, 0x801b, 0x080c, 0x4b04, 0x00ce, 0x00be, 0x003e,\r
-+      0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x56cf, 0xd0c4, 0x0120,\r
-+      0x2011, 0x8014, 0x080c, 0x4b04, 0x002e, 0x0005, 0x81ff, 0x1904,\r
-+      0x3556, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac,\r
-+      0x6032, 0x080c, 0x73bc, 0x1158, 0x080c, 0x76a4, 0x080c, 0x601a,\r
-+      0x9085, 0x0001, 0x080c, 0x7403, 0x080c, 0x72ee, 0x0010, 0x080c,\r
-+      0x5ed9, 0x012e, 0x0804, 0x3524, 0x81ff, 0x0120, 0x2009, 0x0001,\r
-+      0x0804, 0x3556, 0x080c, 0x56e3, 0x0120, 0x2009, 0x0007, 0x0804,\r
-+      0x3556, 0x080c, 0x696a, 0x0120, 0x2009, 0x0008, 0x0804, 0x3556,\r
-+      0x080c, 0x3314, 0x0128, 0x7984, 0x080c, 0x659e, 0x1904, 0x3559,\r
-+      0x080c, 0x4ad7, 0x0904, 0x3559, 0x2b00, 0x7026, 0x080c, 0x6972,\r
-+      0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, 0x080c, 0x681f,\r
-+      0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3524,\r
-+      0x080c, 0x4aa4, 0x0904, 0x3556, 0x9006, 0xa866, 0xa832, 0xa868,\r
-+      0xc0fd, 0xa86a, 0x080c, 0xcd58, 0x0904, 0x3556, 0x7888, 0xd094,\r
-+      0x0118, 0xb8cc, 0xc08d, 0xb8ce, 0x7007, 0x0003, 0x701f, 0x4d7d,\r
-+      0x0005, 0x2061, 0x1800, 0x080c, 0x56e3, 0x2009, 0x0007, 0x1578,\r
-+      0x080c, 0x696a, 0x0118, 0x2009, 0x0008, 0x0448, 0x080c, 0x3314,\r
-+      0x0120, 0xa998, 0x080c, 0x659e, 0x1530, 0x080c, 0x4ad5, 0x0518,\r
-+      0x080c, 0x6972, 0xa89c, 0x1168, 0x9084, 0x0005, 0x1150, 0x900e,\r
-+      0x080c, 0x681f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,\r
-+      0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xcd58, 0x11e0, 0xa89c,\r
-+      0xd094, 0x0118, 0xb8cc, 0xc08d, 0xb8ce, 0x2009, 0x0003, 0xa897,\r
-+      0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,\r
-+      0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0xa99a, 0x9006, 0x918d,\r
-+      0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0xa830, 0x9086, 0x0100,\r
-+      0x7024, 0x2058, 0x1110, 0x0804, 0x562c, 0x900e, 0x080c, 0x681f,\r
-+      0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3524,\r
-+      0x080c, 0x56e3, 0x0120, 0x2009, 0x0007, 0x0804, 0x3556, 0x7f84,\r
-+      0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aa4, 0x1120, 0x2009,\r
-+      0x0002, 0x0804, 0x3556, 0x900e, 0x2130, 0x7126, 0x7132, 0xa860,\r
-+      0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0, 0x080c,\r
-+      0x65ff, 0x1904, 0x4e1f, 0x080c, 0x6972, 0x0138, 0x080c, 0x697a,\r
-+      0x0120, 0x080c, 0x6912, 0x1904, 0x4e1f, 0xd794, 0x1110, 0xd784,\r
-+      0x01a8, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x3400,\r
-+      0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00,\r
-+      0x20e0, 0x20a9, 0x0002, 0x080c, 0x48a6, 0x0048, 0x20a9, 0x0004,\r
-+      0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x48a6, 0x9186,\r
-+      0x007e, 0x0170, 0x9186, 0x0080, 0x0158, 0x080c, 0x6972, 0x90c2,\r
-+      0x0006, 0x1210, 0xc1fd, 0x0020, 0x080c, 0x681f, 0x1108, 0xc1fd,\r
-+      0x4104, 0xc1fc, 0xd794, 0x0528, 0xb8c4, 0x20e0, 0xb8c8, 0x2060,\r
-+      0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003,\r
-+      0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400,\r
-+      0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c,\r
-+      0x4899, 0x9c80, 0x0026, 0x2098, 0xb8c4, 0x20e0, 0x20a9, 0x0002,\r
-+      0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108,\r
-+      0x080c, 0xadcb, 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120,\r
-+      0x9186, 0x0800, 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794,\r
-+      0x0118, 0x9686, 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804,\r
-+      0x4daf, 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, 0x3524, 0x7033,\r
-+      0x0001, 0x7122, 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18b8,\r
-+      0x2c44, 0xa06b, 0x0000, 0xa67a, 0x7034, 0xa072, 0x7028, 0xa076,\r
-+      0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10e9, 0x7007, 0x0002,\r
-+      0x701f, 0x4e5b, 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028,\r
-+      0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, 0x18b8, 0x2c44,\r
-+      0xa28c, 0xa390, 0xa494, 0xa598, 0x0804, 0x4daf, 0x7124, 0x810b,\r
-+      0x0804, 0x3524, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98,\r
-+      0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3559, 0x9502,\r
-+      0x0a04, 0x3559, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3559,\r
-+      0x9502, 0x0a04, 0x3559, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020,\r
-+      0x0a04, 0x3559, 0x9502, 0x0a04, 0x3559, 0x9284, 0x00ff, 0x90e2,\r
-+      0x0020, 0x0a04, 0x3559, 0x9502, 0x0a04, 0x3559, 0x9384, 0xff00,\r
-+      0x8007, 0x90e2, 0x0020, 0x0a04, 0x3559, 0x9502, 0x0a04, 0x3559,\r
-+      0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3559, 0x9502, 0x0a04,\r
-+      0x3559, 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3559,\r
-+      0x9502, 0x0a04, 0x3559, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04,\r
-+      0x3559, 0x9502, 0x0a04, 0x3559, 0x2061, 0x1989, 0x6102, 0x6206,\r
-+      0x630a, 0x640e, 0x0804, 0x3524, 0x080c, 0x4aa4, 0x0904, 0x3556,\r
-+      0x2009, 0x0016, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,\r
-+      0x0019, 0xaf60, 0x080c, 0x4aed, 0x701f, 0x4edf, 0x0005, 0x2001,\r
-+      0x0138, 0x2003, 0x0000, 0x00e6, 0x2071, 0x0300, 0x701c, 0xd0a4,\r
-+      0x1de8, 0x00ee, 0x20a9, 0x0016, 0x896e, 0x8d6e, 0x8d6f, 0x9d84,\r
-+      0xffc0, 0x9080, 0x0019, 0x2098, 0x9d84, 0x003f, 0x20e0, 0x2069,\r
-+      0x1877, 0x20e9, 0x0001, 0x2da0, 0x4003, 0x6800, 0x9005, 0x0904,\r
-+      0x4f60, 0x6804, 0x2008, 0x918c, 0xfff8, 0x1904, 0x4f60, 0x680c,\r
-+      0x9005, 0x0904, 0x4f60, 0x9082, 0xff01, 0x1a04, 0x4f60, 0x6810,\r
-+      0x9082, 0x005c, 0x0a04, 0x4f60, 0x6824, 0x2008, 0x9082, 0x0008,\r
-+      0x0a04, 0x4f60, 0x9182, 0x0400, 0x1a04, 0x4f60, 0x0056, 0x2029,\r
-+      0x0000, 0x080c, 0x8afb, 0x005e, 0x6944, 0x6820, 0x9102, 0x06c0,\r
-+      0x6820, 0x9082, 0x0019, 0x16a0, 0x6828, 0x6944, 0x810c, 0x9102,\r
-+      0x0678, 0x6840, 0x9082, 0x000f, 0x1658, 0x080c, 0x1018, 0x2900,\r
-+      0x0904, 0x4f7a, 0x684e, 0x00e6, 0x2071, 0x1930, 0x00b6, 0x2059,\r
-+      0x0000, 0x080c, 0x89b7, 0x00be, 0x00ee, 0x0558, 0x080c, 0x8711,\r
-+      0x080c, 0x8757, 0x11e0, 0x6857, 0x0000, 0x00c6, 0x2061, 0x0100,\r
-+      0x6104, 0x918d, 0x2000, 0x6106, 0x6b10, 0x2061, 0x1a62, 0x630a,\r
-+      0x00ce, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102, 0x0804, 0x3524,\r
-+      0x080c, 0x2956, 0x2001, 0x0138, 0x2102, 0x0804, 0x3559, 0x00e6,\r
-+      0x2071, 0x1930, 0x080c, 0x8b8c, 0x080c, 0x8b9b, 0x080c, 0x89a6,\r
-+      0x00ee, 0x2001, 0x188a, 0x204c, 0x080c, 0x1031, 0x2001, 0x188a,\r
-+      0x2003, 0x0000, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102, 0x0804,\r
-+      0x3556, 0x2001, 0x1924, 0x200c, 0x918e, 0x0000, 0x0904, 0x4fd9,\r
-+      0x080c, 0x89a1, 0x0904, 0x4fd9, 0x2001, 0x0101, 0x200c, 0x918c,\r
-+      0xdfff, 0x2102, 0x2001, 0x0138, 0x2003, 0x0000, 0x00e6, 0x2071,\r
-+      0x0300, 0x701c, 0xd0a4, 0x1de8, 0x00ee, 0x080c, 0x89a6, 0x2001,\r
-+      0x0035, 0x080c, 0x15ee, 0x00c6, 0x2061, 0x193c, 0x6004, 0x6100,\r
-+      0x9106, 0x1de0, 0x00ce, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102,\r
-+      0x00e6, 0x00f6, 0x2071, 0x1923, 0x080c, 0x88e2, 0x0120, 0x2f00,\r
-+      0x080c, 0x896c, 0x0cc8, 0x00fe, 0x00ee, 0x0126, 0x2091, 0x8000,\r
-+      0x2001, 0x188a, 0x200c, 0x81ff, 0x0138, 0x2148, 0x080c, 0x1031,\r
-+      0x2001, 0x188a, 0x2003, 0x0000, 0x2001, 0x183c, 0x2003, 0x0020,\r
-+      0x00e6, 0x2071, 0x1930, 0x080c, 0x8b8c, 0x080c, 0x8b9b, 0x00ee,\r
-+      0x012e, 0x0804, 0x3524, 0x0006, 0x080c, 0x56cf, 0xd0cc, 0x000e,\r
-+      0x0005, 0x0006, 0x080c, 0x56d3, 0xd0bc, 0x000e, 0x0005, 0x6174,\r
-+      0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3524, 0x83ff,\r
-+      0x1904, 0x3559, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x3559, 0x2019,\r
-+      0xffff, 0x6078, 0x9302, 0x9200, 0x0a04, 0x3559, 0x7986, 0x6276,\r
-+      0x0804, 0x3524, 0x080c, 0x56e3, 0x1904, 0x3556, 0x7c88, 0x7d84,\r
-+      0x7e98, 0x7f8c, 0x080c, 0x4aa4, 0x0904, 0x3556, 0x900e, 0x901e,\r
-+      0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003,\r
-+      0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c,\r
-+      0x6972, 0x0118, 0x080c, 0x697a, 0x1148, 0x20a9, 0x0001, 0xb814,\r
-+      0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182,\r
-+      0x0800, 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148,\r
-+      0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x8f68, 0x2208, 0x0804,\r
-+      0x3524, 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061,\r
-+      0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034,\r
-+      0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x10e9, 0x7007,\r
-+      0x0002, 0x701f, 0x505c, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120,\r
-+      0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18b8, 0x2c44,\r
-+      0xa48c, 0xa590, 0xa694, 0xa798, 0x0804, 0x501a, 0x7224, 0x900e,\r
-+      0x2001, 0x0003, 0x080c, 0x8f68, 0x2208, 0x0804, 0x3524, 0x00f6,\r
-+      0x00e6, 0x080c, 0x56e3, 0x2009, 0x0007, 0x1904, 0x50ef, 0x2071,\r
-+      0x189e, 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x50ef, 0xac9c,\r
-+      0xad98, 0xaea4, 0xafa0, 0x0096, 0x080c, 0x1018, 0x2009, 0x0002,\r
-+      0x0904, 0x50ef, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362,\r
-+      0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8,\r
-+      0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6972, 0x0118, 0x080c,\r
-+      0x697a, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004,\r
-+      0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386,\r
-+      0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001,\r
-+      0x0003, 0x080c, 0x8f68, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a,\r
-+      0x715c, 0x81ff, 0x090c, 0x0dd5, 0x2148, 0x080c, 0x1031, 0x9006,\r
-+      0x705e, 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152,\r
-+      0x7054, 0x9300, 0x7056, 0x2061, 0x18b9, 0x2c44, 0xa37a, 0x7058,\r
-+      0xa076, 0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f,\r
-+      0x50fb, 0x000e, 0xa0a2, 0x080c, 0x10e9, 0x9006, 0x0048, 0x009e,\r
-+      0xa897, 0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,\r
-+      0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0dd5,\r
-+      0x00e6, 0x2071, 0x189e, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b,\r
-+      0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005,\r
-+      0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c,\r
-+      0xa590, 0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000,\r
-+      0xa897, 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x8f68,\r
-+      0xaa9a, 0x715c, 0x81ff, 0x090c, 0x0dd5, 0x2148, 0x080c, 0x1031,\r
-+      0x705f, 0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x6c81, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe,\r
-+      0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6972,\r
-+      0x0118, 0x080c, 0x697a, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004,\r
-+      0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800,\r
-+      0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154,\r
-+      0x810c, 0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0dd5,\r
-+      0x2148, 0x080c, 0x1031, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008,\r
-+      0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81, 0x012e,\r
-+      0xa09f, 0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152,\r
-+      0x7054, 0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a,\r
-+      0x080c, 0x10e9, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be,\r
-+      0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118,\r
-+      0x009e, 0x0804, 0x3559, 0xa884, 0xa988, 0x080c, 0x283e, 0x1518,\r
-+      0x080c, 0x659e, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c,\r
-+      0x4aa4, 0x01c8, 0x080c, 0x4aa4, 0x01b0, 0x009e, 0xa867, 0x0000,\r
-+      0xa868, 0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c,\r
-+      0xccdf, 0x1120, 0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003,\r
-+      0x701f, 0x51c8, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x3556,\r
-+      0x7124, 0x080c, 0x32bb, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009,\r
-+      0x0004, 0x0804, 0x3556, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048,\r
-+      0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e,\r
-+      0x9080, 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8,\r
-+      0x20a9, 0x002a, 0x080c, 0x0f7c, 0xaa6c, 0xab70, 0xac74, 0xad78,\r
-+      0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6,\r
-+      0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600,\r
-+      0x2009, 0x0004, 0x000e, 0x007e, 0x0804, 0x4af0, 0x97c6, 0x7200,\r
-+      0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18b8,\r
-+      0x2c44, 0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496,\r
-+      0xa59a, 0x080c, 0x10e9, 0x7007, 0x0002, 0x701f, 0x5224, 0x0005,\r
-+      0x000e, 0x007e, 0x0804, 0x3559, 0x7020, 0x2048, 0xa804, 0x2048,\r
-+      0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,\r
-+      0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9,\r
-+      0x002a, 0x080c, 0x0f7c, 0x2100, 0x2238, 0x2061, 0x18b8, 0x2c44,\r
-+      0xa28c, 0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x4af0,\r
-+      0x81ff, 0x1904, 0x3556, 0x798c, 0x2001, 0x197e, 0x918c, 0x8000,\r
-+      0x2102, 0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x6972, 0x0120,\r
-+      0x080c, 0x697a, 0x1904, 0x3559, 0x080c, 0x66c6, 0x0904, 0x3556,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x678c, 0x012e, 0x0904, 0x3556,\r
-+      0x2001, 0x197e, 0x2004, 0xd0fc, 0x1904, 0x3524, 0x0804, 0x451c,\r
-+      0xa9a0, 0x2001, 0x197e, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c,\r
-+      0x4ac8, 0x01a0, 0x080c, 0x6972, 0x0118, 0x080c, 0x697a, 0x1170,\r
-+      0x080c, 0x66c6, 0x2009, 0x0002, 0x0128, 0x080c, 0x678c, 0x1170,\r
-+      0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,\r
-+      0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,\r
-+      0x2001, 0x197e, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56d7, 0x0110,\r
-+      0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,\r
-+      0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, 0x4491, 0x080c, 0x4ad7,\r
-+      0x0904, 0x3559, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002, 0x0804,\r
-+      0x3556, 0x080c, 0x6972, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e,\r
-+      0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802,\r
-+      0x0028, 0x080c, 0x56cf, 0xd0b4, 0x0904, 0x44cb, 0x7884, 0x908e,\r
-+      0x007e, 0x0904, 0x44cb, 0x908e, 0x007f, 0x0904, 0x44cb, 0x908e,\r
-+      0x0080, 0x0904, 0x44cb, 0xb800, 0xd08c, 0x1904, 0x44cb, 0xa867,\r
-+      0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xccfe, 0x1120, 0x2009,\r
-+      0x0003, 0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x52f0, 0x0005,\r
-+      0x080c, 0x4ad7, 0x0904, 0x3559, 0x0804, 0x44cb, 0x080c, 0x3314,\r
-+      0x0108, 0x0005, 0x2009, 0x1834, 0x210c, 0x81ff, 0x0120, 0x2009,\r
-+      0x0001, 0x0804, 0x3556, 0x080c, 0x56e3, 0x0120, 0x2009, 0x0007,\r
-+      0x0804, 0x3556, 0x080c, 0x696a, 0x0120, 0x2009, 0x0008, 0x0804,\r
-+      0x3556, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x44cb, 0x9006,\r
-+      0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xcd58, 0x1120,\r
-+      0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x5329,\r
-+      0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804,\r
-+      0x562c, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x0804, 0x52c2, 0x81ff,\r
-+      0x2009, 0x0001, 0x1904, 0x3556, 0x080c, 0x56e3, 0x2009, 0x0007,\r
-+      0x1904, 0x3556, 0x080c, 0x696a, 0x0120, 0x2009, 0x0008, 0x0804,\r
-+      0x3556, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x080c, 0x6972, 0x2009,\r
-+      0x0009, 0x1904, 0x3556, 0x080c, 0x4aa4, 0x2009, 0x0002, 0x0904,\r
-+      0x3556, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988,\r
-+      0x9194, 0xff00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed,\r
-+      0xa952, 0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x3559,\r
-+      0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c, 0xcfab, 0x2009, 0x0003,\r
-+      0x0904, 0x3556, 0x7007, 0x0003, 0x701f, 0x537f, 0x0005, 0xa830,\r
-+      0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x3556, 0x0804, 0x3524,\r
-+      0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x56e3,\r
-+      0x1188, 0x2009, 0x0014, 0x0804, 0x3556, 0xd2dc, 0x1568, 0x81ff,\r
-+      0x2009, 0x0001, 0x1904, 0x3556, 0x080c, 0x56e3, 0x2009, 0x0007,\r
-+      0x1904, 0x3556, 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x56aa,\r
-+      0x0804, 0x3524, 0xd2fc, 0x0158, 0x080c, 0x4ad7, 0x0904, 0x3559,\r
-+      0x7984, 0x9284, 0x9000, 0x080c, 0x5687, 0x0804, 0x3524, 0x080c,\r
-+      0x4ad7, 0x0904, 0x3559, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,\r
-+      0x2009, 0x0009, 0x1904, 0x5468, 0x080c, 0x4aa4, 0x2009, 0x0002,\r
-+      0x0904, 0x5468, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008,\r
-+      0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aed, 0x701f, 0x53d9,\r
-+      0x0005, 0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120,\r
-+      0xa874, 0x9084, 0xff00, 0x0110, 0x1904, 0x3559, 0xa866, 0xa832,\r
-+      0xa868, 0xc0fd, 0xa86a, 0x080c, 0x4ad7, 0x1110, 0x0804, 0x3559,\r
-+      0x2009, 0x0043, 0x080c, 0xd013, 0x2009, 0x0003, 0x0904, 0x5468,\r
-+      0x7007, 0x0003, 0x701f, 0x53fd, 0x0005, 0xa830, 0x9086, 0x0100,\r
-+      0x2009, 0x0004, 0x0904, 0x5468, 0x7984, 0x7aa8, 0x9284, 0x1000,\r
-+      0x080c, 0x5687, 0x0804, 0x3524, 0x00c6, 0xaab0, 0x9284, 0xc000,\r
-+      0x0140, 0xd2ec, 0x0168, 0x080c, 0x56e3, 0x1150, 0x2009, 0x0014,\r
-+      0x04f0, 0x2061, 0x1800, 0x080c, 0x56e3, 0x2009, 0x0007, 0x15b8,\r
-+      0xd2f4, 0x0128, 0x9284, 0x5000, 0x080c, 0x56aa, 0x0050, 0xd2fc,\r
-+      0x0178, 0x080c, 0x4ad5, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c,\r
-+      0x5687, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438,\r
-+      0x080c, 0x4ad5, 0x0510, 0x080c, 0x6972, 0x2009, 0x0009, 0x11b8,\r
-+      0xa8c4, 0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc,\r
-+      0x9084, 0xff00, 0x1190, 0x080c, 0x4ad5, 0x1108, 0x0070, 0x2009,\r
-+      0x004b, 0x080c, 0xd013, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429,\r
-+      0x19c0, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e,\r
-+      0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0,\r
-+      0x7aa8, 0xd2dc, 0x0904, 0x3556, 0x0016, 0x7984, 0x9284, 0x1000,\r
-+      0xc0fd, 0x080c, 0x5687, 0x001e, 0x1904, 0x3556, 0x0804, 0x3524,\r
-+      0x00f6, 0x2d78, 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150,\r
-+      0x0016, 0xa998, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5687, 0x001e,\r
-+      0x9085, 0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,\r
-+      0x3556, 0x080c, 0x56e3, 0x0120, 0x2009, 0x0007, 0x0804, 0x3556,\r
-+      0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x65ff, 0x1904, 0x3559,\r
-+      0x9186, 0x007f, 0x0138, 0x080c, 0x6972, 0x0120, 0x2009, 0x0009,\r
-+      0x0804, 0x3556, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002, 0x0804,\r
-+      0x3556, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100,\r
-+      0x8007, 0xa80a, 0x080c, 0xcd18, 0x1120, 0x2009, 0x0003, 0x0804,\r
-+      0x3556, 0x7007, 0x0003, 0x701f, 0x54c6, 0x0005, 0xa808, 0x8007,\r
-+      0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x3556, 0xa8e0,\r
-+      0xa866, 0xa810, 0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007,\r
-+      0x9084, 0x00ff, 0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006,\r
-+      0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c,\r
-+      0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4af0, 0x080c, 0x4aa4, 0x1120,\r
-+      0x2009, 0x0002, 0x0804, 0x3556, 0x7984, 0x9194, 0xff00, 0x918c,\r
-+      0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023, 0x19b3, 0x0040, 0x92c6,\r
-+      0x0001, 0x1118, 0x7023, 0x19cd, 0x0010, 0x0804, 0x3559, 0x2009,\r
-+      0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019,\r
-+      0xaf60, 0x080c, 0x4aed, 0x701f, 0x5516, 0x0005, 0x2001, 0x182e,\r
-+      0x2003, 0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0,\r
-+      0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804,\r
-+      0x3524, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002, 0x0804, 0x3556,\r
-+      0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118,\r
-+      0x2099, 0x19b3, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x19cd,\r
-+      0x0010, 0x0804, 0x3559, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860,\r
-+      0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a,\r
-+      0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60,\r
-+      0x0804, 0x4af0, 0x7884, 0x908a, 0x1000, 0x1a04, 0x3559, 0x0126,\r
-+      0x2091, 0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061,\r
-+      0x19fa, 0x6142, 0x00ce, 0x012e, 0x0804, 0x3524, 0x00c6, 0x080c,\r
-+      0x73bc, 0x1160, 0x080c, 0x76a4, 0x080c, 0x601a, 0x9085, 0x0001,\r
-+      0x080c, 0x7403, 0x080c, 0x72ee, 0x080c, 0x0dd5, 0x2061, 0x1800,\r
-+      0x6030, 0xc09d, 0x6032, 0x080c, 0x5ed9, 0x00ce, 0x0005, 0x00c6,\r
-+      0x2001, 0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x3556, 0x7884,\r
-+      0x9005, 0x0188, 0x7888, 0x2061, 0x199c, 0x2c0c, 0x2062, 0x080c,\r
-+      0x2c20, 0x01a0, 0x080c, 0x2c28, 0x0188, 0x080c, 0x2c30, 0x0170,\r
-+      0x2162, 0x0804, 0x3559, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007,\r
-+      0x1118, 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086,\r
-+      0x0002, 0x1548, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026,\r
-+      0x2011, 0x0003, 0x080c, 0xa653, 0x2011, 0x0002, 0x080c, 0xa65d,\r
-+      0x002e, 0x080c, 0xa540, 0x0036, 0x901e, 0x080c, 0xa5b6, 0x003e,\r
-+      0x60e3, 0x0000, 0x080c, 0xe9e9, 0x080c, 0xea04, 0x9085, 0x0001,\r
-+      0x080c, 0x7403, 0x9006, 0x080c, 0x2cef, 0x2001, 0x1800, 0x2003,\r
-+      0x0004, 0x6027, 0x0008, 0x00ce, 0x0804, 0x3524, 0x81ff, 0x0120,\r
-+      0x2009, 0x0001, 0x0804, 0x3556, 0x080c, 0x56e3, 0x0120, 0x2009,\r
-+      0x0007, 0x0804, 0x3556, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c,\r
-+      0x65ff, 0x1904, 0x3559, 0x9186, 0x007f, 0x0138, 0x080c, 0x6972,\r
-+      0x0120, 0x2009, 0x0009, 0x0804, 0x3556, 0x080c, 0x4aa4, 0x1120,\r
-+      0x2009, 0x0002, 0x0804, 0x3556, 0xa867, 0x0000, 0xa868, 0xc0fd,\r
-+      0xa86a, 0x080c, 0xcd1b, 0x1120, 0x2009, 0x0003, 0x0804, 0x3556,\r
-+      0x7007, 0x0003, 0x701f, 0x5615, 0x0005, 0xa830, 0x9086, 0x0100,\r
-+      0x1120, 0x2009, 0x0004, 0x0804, 0x3556, 0xa8e0, 0xa866, 0xa834,\r
-+      0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c,\r
-+      0x7d98, 0xaf60, 0x0804, 0x4af0, 0xa898, 0x9086, 0x000d, 0x1904,\r
-+      0x3556, 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x5639,\r
-+      0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833,\r
-+      0x0011, 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986,\r
-+      0xa9a4, 0x799a, 0xa9a8, 0x799e, 0x080c, 0x4ae0, 0x2091, 0x4080,\r
-+      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x7007, 0x0001,\r
-+      0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091,\r
-+      0x8000, 0x00c6, 0x2061, 0x19fa, 0x7984, 0x6152, 0x614e, 0x6057,\r
-+      0x0000, 0x604b, 0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888,\r
-+      0x6062, 0x788c, 0x605e, 0x2001, 0x1a08, 0x2044, 0x2001, 0x1a0f,\r
-+      0xa076, 0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b,\r
-+      0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3524, 0x0126,\r
-+      0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006,\r
-+      0x080c, 0xcb82, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000,\r
-+      0x2004, 0x905d, 0x0160, 0x080c, 0x6034, 0x080c, 0xadcb, 0x0110,\r
-+      0xb817, 0x0000, 0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085,\r
-+      0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e,\r
-+      0x20a9, 0x0800, 0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0180,\r
-+      0x9186, 0x007e, 0x0168, 0x9186, 0x007f, 0x0150, 0x9186, 0x0080,\r
-+      0x0138, 0x9186, 0x00ff, 0x0120, 0x0026, 0x2200, 0x0801, 0x002e,\r
-+      0x001e, 0x8108, 0x1f04, 0x56b2, 0x015e, 0x012e, 0x0005, 0x2001,\r
-+      0x1848, 0x2004, 0x0005, 0x2001, 0x1867, 0x2004, 0x0005, 0x0006,\r
-+      0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e,\r
-+      0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,\r
-+      0x0005, 0x0016, 0x00e6, 0x2071, 0x189e, 0x7108, 0x910d, 0x710a,\r
-+      0x00ee, 0x001e, 0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, 0x3559,\r
-+      0x810c, 0x0016, 0x080c, 0x4aa4, 0x080c, 0x0f07, 0x2100, 0x2238,\r
-+      0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x4aed, 0x701f,\r
-+      0x570a, 0x0005, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac,\r
-+      0x79a4, 0x810c, 0x2061, 0x18b8, 0x2c44, 0xa770, 0xa074, 0x2071,\r
-+      0x189e, 0x080c, 0x4af0, 0x701f, 0x571e, 0x0005, 0x2061, 0x18b8,\r
-+      0x2c44, 0x0016, 0x0026, 0xa270, 0xa174, 0x080c, 0x0f0f, 0x002e,\r
-+      0x001e, 0x080c, 0x0fbc, 0x9006, 0xa802, 0xa806, 0x0804, 0x3524,\r
-+      0x0126, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6,\r
-+      0x00e6, 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800,\r
-+      0x6044, 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x58d9, 0x0068,\r
-+      0xd08c, 0x0118, 0x080c, 0x57e2, 0x0040, 0xd094, 0x0118, 0x080c,\r
-+      0x57b2, 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de,\r
-+      0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005,\r
-+      0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68,\r
-+      0x0006, 0x7098, 0x9005, 0x000e, 0x0120, 0x709b, 0x0000, 0x7093,\r
-+      0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0,\r
-+      0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294,\r
-+      0xff00, 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240,\r
-+      0x9295, 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7,\r
-+      0x080c, 0x5f96, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140,\r
-+      0x6042, 0x6043, 0x0000, 0x7087, 0x0000, 0x70a3, 0x0001, 0x70c7,\r
-+      0x0000, 0x70df, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000, 0x7097,\r
-+      0x0000, 0x708b, 0x000f, 0x2009, 0x000f, 0x2011, 0x5e7c, 0x080c,\r
-+      0x858b, 0x0005, 0x2001, 0x1869, 0x2004, 0xd08c, 0x0110, 0x705f,\r
-+      0xffff, 0x7088, 0x9005, 0x1528, 0x2011, 0x5e7c, 0x080c, 0x84f3,\r
-+      0x6040, 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8,\r
-+      0x6044, 0xd08c, 0x1168, 0x1f04, 0x57c8, 0x6242, 0x709b, 0x0000,\r
-+      0x6040, 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048,\r
-+      0x6242, 0x709b, 0x0000, 0x708f, 0x0000, 0x9006, 0x080c, 0x601f,\r
-+      0x0000, 0x0005, 0x708c, 0x908a, 0x0003, 0x1a0c, 0x0dd5, 0x000b,\r
-+      0x0005, 0x57ec, 0x583d, 0x58d8, 0x00f6, 0x0016, 0x6900, 0x918c,\r
-+      0x0800, 0x708f, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803,\r
-+      0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04,\r
-+      0x57fb, 0x080c, 0x0dd5, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898,\r
-+      0x689a, 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020,\r
-+      0x080c, 0x5ffb, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837, 0x0000,\r
-+      0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1c0e,\r
-+      0x20a9, 0x0004, 0x4003, 0x080c, 0xab21, 0x20e1, 0x0001, 0x2099,\r
-+      0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003,\r
-+      0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x5ead, 0x00fe, 0x9006,\r
-+      0x7092, 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x7090, 0x7093,\r
-+      0x0000, 0x9025, 0x0904, 0x58b5, 0x6020, 0xd0b4, 0x1904, 0x58b3,\r
-+      0x71a0, 0x81ff, 0x0904, 0x58a1, 0x9486, 0x000c, 0x1904, 0x58ae,\r
-+      0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, 0x5ff4, 0x2011, 0x0260,\r
-+      0x2019, 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318,\r
-+      0x1f04, 0x585a, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94,\r
-+      0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708f, 0x0002,\r
-+      0x709b, 0x0002, 0x2009, 0x07d0, 0x2011, 0x5e83, 0x080c, 0x858b,\r
-+      0x080c, 0x5ffb, 0x04c0, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7930,\r
-+      0x918e, 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c,\r
-+      0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5ff4, 0x2011,\r
-+      0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102,\r
-+      0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, 0x5895, 0x0078, 0x70a3,\r
-+      0x0000, 0x080c, 0x5ff4, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,\r
-+      0x0001, 0x20a1, 0x1c00, 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008,\r
-+      0x6043, 0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100,\r
-+      0x6042, 0x6020, 0xd0b4, 0x1db8, 0x080c, 0xab21, 0x20e1, 0x0001,\r
-+      0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014,\r
-+      0x4003, 0x60c3, 0x000c, 0x2011, 0x19f1, 0x2013, 0x0000, 0x7093,\r
-+      0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0xa26a, 0x08d8,\r
-+      0x0005, 0x7098, 0x908a, 0x001d, 0x1a0c, 0x0dd5, 0x000b, 0x0005,\r
-+      0x590a, 0x591d, 0x5946, 0x5966, 0x598c, 0x59bb, 0x59e1, 0x5a19,\r
-+      0x5a3f, 0x5a6d, 0x5aa8, 0x5ae0, 0x5afe, 0x5b29, 0x5b4b, 0x5b66,\r
-+      0x5b70, 0x5ba4, 0x5bca, 0x5bf9, 0x5c1f, 0x5c57, 0x5c9b, 0x5cd8,\r
-+      0x5cf9, 0x5d52, 0x5d74, 0x5da2, 0x5da2, 0x00c6, 0x2061, 0x1800,\r
-+      0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006,\r
-+      0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0,\r
-+      0x2061, 0x0100, 0x6043, 0x0002, 0x709b, 0x0001, 0x2009, 0x07d0,\r
-+      0x2011, 0x5e83, 0x080c, 0x858b, 0x0005, 0x00f6, 0x7090, 0x9086,\r
-+      0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5ff4,\r
-+      0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005,\r
-+      0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7,\r
-+      0x0001, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x709b, 0x0010, 0x080c,\r
-+      0x5b70, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b,\r
-+      0x0003, 0x6043, 0x0004, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x080c,\r
-+      0x5f78, 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9,\r
-+      0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x595b,\r
-+      0x60c3, 0x0014, 0x080c, 0x5ead, 0x00fe, 0x0005, 0x00f6, 0x7090,\r
-+      0x9005, 0x0500, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x9086, 0x0014,\r
-+      0x11b8, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102,\r
-+      0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4,\r
-+      0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0004, 0x0029, 0x0010,\r
-+      0x080c, 0x5fd0, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0005, 0x080c,\r
-+      0x5f78, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c,\r
-+      0x5ff4, 0x080c, 0x5fd7, 0x1170, 0x7084, 0x9005, 0x1158, 0x715c,\r
-+      0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5e30, 0x0168,\r
-+      0x080c, 0x5fad, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e,\r
-+      0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,\r
-+      0x5ead, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011,\r
-+      0x5e83, 0x080c, 0x84f3, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ff4,\r
-+      0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005,\r
-+      0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7,\r
-+      0x0001, 0x709b, 0x0006, 0x0029, 0x0010, 0x080c, 0x5fd0, 0x00fe,\r
-+      0x0005, 0x00f6, 0x709b, 0x0007, 0x080c, 0x5f78, 0x2079, 0x0240,\r
-+      0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5ff4, 0x080c, 0x5fd7,\r
-+      0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164, 0x9186, 0xffff, 0x0180,\r
-+      0x9180, 0x3325, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008,\r
-+      0x080c, 0x5e30, 0x0180, 0x080c, 0x4fe1, 0x0110, 0x080c, 0x28a7,\r
-+      0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,\r
-+      0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5ead, 0x00fe,\r
-+      0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e83, 0x080c,\r
-+      0x84f3, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ff4, 0x2079, 0x0260,\r
-+      0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38,\r
-+      0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b,\r
-+      0x0008, 0x0029, 0x0010, 0x080c, 0x5fd0, 0x00fe, 0x0005, 0x00f6,\r
-+      0x709b, 0x0009, 0x080c, 0x5f78, 0x2079, 0x0240, 0x7833, 0x1105,\r
-+      0x7837, 0x0100, 0x080c, 0x5fd7, 0x1150, 0x7084, 0x9005, 0x1138,\r
-+      0x080c, 0x5da3, 0x1188, 0x9085, 0x0001, 0x080c, 0x28a7, 0x20a9,\r
-+      0x0008, 0x080c, 0x5ff4, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,\r
-+      0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5ead,\r
-+      0x0010, 0x080c, 0x58fd, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005,\r
-+      0x05a8, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x9086, 0x0014, 0x1560,\r
-+      0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520,\r
-+      0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38,\r
-+      0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b,\r
-+      0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128,\r
-+      0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x7097, 0x0000, 0x709b,\r
-+      0x000e, 0x080c, 0x5b4b, 0x0010, 0x080c, 0x5fd0, 0x00fe, 0x0005,\r
-+      0x00f6, 0x709b, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001, 0x22a0,\r
-+      0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5f78, 0x2079,\r
-+      0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5fd7, 0x0118,\r
-+      0x2013, 0x0000, 0x0020, 0x7060, 0x9085, 0x0100, 0x2012, 0x20a9,\r
-+      0x0040, 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210, 0x8108,\r
-+      0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240,\r
-+      0x1f04, 0x5acd, 0x60c3, 0x0084, 0x080c, 0x5ead, 0x00fe, 0x0005,\r
-+      0x00f6, 0x7090, 0x9005, 0x01c0, 0x2011, 0x5e83, 0x080c, 0x84f3,\r
-+      0x9086, 0x0084, 0x1178, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30,\r
-+      0x9296, 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x709b, 0x000c,\r
-+      0x0029, 0x0010, 0x080c, 0x5fd0, 0x00fe, 0x0005, 0x00f6, 0x709b,\r
-+      0x000d, 0x080c, 0x5f78, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837,\r
-+      0x0000, 0x080c, 0x5ff4, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009,\r
-+      0x024e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810,\r
-+      0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011,\r
-+      0x0260, 0x1f04, 0x5b11, 0x60c3, 0x0084, 0x080c, 0x5ead, 0x00fe,\r
-+      0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0, 0x2011, 0x5e83, 0x080c,\r
-+      0x84f3, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ff4, 0x2079, 0x0260,\r
-+      0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7097,\r
-+      0x0001, 0x080c, 0x5f4a, 0x709b, 0x000e, 0x0029, 0x0010, 0x080c,\r
-+      0x5fd0, 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x601f, 0x709b,\r
-+      0x000f, 0x7093, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f,\r
-+      0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009,\r
-+      0x07d0, 0x2011, 0x5e83, 0x080c, 0x84e7, 0x0005, 0x7090, 0x9005,\r
-+      0x0130, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x709b, 0x0000, 0x0005,\r
-+      0x709b, 0x0011, 0x080c, 0xab21, 0x080c, 0x5ff4, 0x20e1, 0x0000,\r
-+      0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x7490, 0x9480,\r
-+      0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003,\r
-+      0x080c, 0x5fd7, 0x11a0, 0x717c, 0x81ff, 0x0188, 0x900e, 0x7080,\r
-+      0x9084, 0x00ff, 0x0160, 0x080c, 0x283e, 0x9186, 0x007e, 0x0138,\r
-+      0x9186, 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5e30, 0x60c3,\r
-+      0x0014, 0x080c, 0x5ead, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500,\r
-+      0x2011, 0x5e83, 0x080c, 0x84f3, 0x9086, 0x0014, 0x11b8, 0x080c,\r
-+      0x5ff4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834,\r
-+      0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110,\r
-+      0x70c7, 0x0001, 0x709b, 0x0012, 0x0029, 0x0010, 0x7093, 0x0000,\r
-+      0x00fe, 0x0005, 0x00f6, 0x709b, 0x0013, 0x080c, 0x5f86, 0x2079,\r
-+      0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5ff4, 0x080c,\r
-+      0x5fd7, 0x1170, 0x7084, 0x9005, 0x1158, 0x715c, 0x9186, 0xffff,\r
-+      0x0138, 0x2011, 0x0008, 0x080c, 0x5e30, 0x0168, 0x080c, 0x5fad,\r
-+      0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,\r
-+      0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5ead, 0x00fe,\r
-+      0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e83, 0x080c,\r
-+      0x84f3, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ff4, 0x2079, 0x0260,\r
-+      0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38,\r
-+      0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b,\r
-+      0x0014, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6,\r
-+      0x709b, 0x0015, 0x080c, 0x5f86, 0x2079, 0x0240, 0x7833, 0x1104,\r
-+      0x7837, 0x0000, 0x080c, 0x5ff4, 0x080c, 0x5fd7, 0x11b8, 0x7084,\r
-+      0x9005, 0x11a0, 0x7164, 0x9186, 0xffff, 0x0180, 0x9180, 0x3325,\r
-+      0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5e30,\r
-+      0x0180, 0x080c, 0x4fe1, 0x0110, 0x080c, 0x28a7, 0x20a9, 0x0008,\r
-+      0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,\r
-+      0x4003, 0x60c3, 0x0014, 0x080c, 0x5ead, 0x00fe, 0x0005, 0x00f6,\r
-+      0x7090, 0x9005, 0x05f0, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x9086,\r
-+      0x0014, 0x15a8, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30, 0x9296,\r
-+      0x1105, 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e,\r
-+      0x1168, 0x9085, 0x0001, 0x080c, 0x601f, 0x7a38, 0xd2fc, 0x0128,\r
-+      0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x0080, 0x9005, 0x11b8,\r
-+      0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001,\r
-+      0x9085, 0x0001, 0x080c, 0x601f, 0x7097, 0x0000, 0x7a38, 0xd2f4,\r
-+      0x0110, 0x70df, 0x0008, 0x709b, 0x0016, 0x0029, 0x0010, 0x7093,\r
-+      0x0000, 0x00fe, 0x0005, 0x080c, 0xab21, 0x080c, 0x5ff4, 0x20e1,\r
-+      0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,\r
-+      0x000e, 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011,\r
-+      0x024d, 0x2012, 0x2011, 0x026e, 0x709b, 0x0017, 0x080c, 0x5fd7,\r
-+      0x1150, 0x7084, 0x9005, 0x1138, 0x080c, 0x5da3, 0x1188, 0x9085,\r
-+      0x0001, 0x080c, 0x28a7, 0x20a9, 0x0008, 0x080c, 0x5ff4, 0x20e1,\r
-+      0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,\r
-+      0x60c3, 0x0014, 0x080c, 0x5ead, 0x0010, 0x080c, 0x58fd, 0x0005,\r
-+      0x00f6, 0x7090, 0x9005, 0x01d8, 0x2011, 0x5e83, 0x080c, 0x84f3,\r
-+      0x9086, 0x0084, 0x1190, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30,\r
-+      0x9296, 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c,\r
-+      0x601f, 0x709b, 0x0018, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe,\r
-+      0x0005, 0x00f6, 0x709b, 0x0019, 0x080c, 0x5f86, 0x2079, 0x0240,\r
-+      0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5ff4, 0x2009, 0x026e,\r
-+      0x2039, 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186,\r
-+      0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04,\r
-+      0x5d0c, 0x2039, 0x1c0e, 0x080c, 0x5fd7, 0x11e8, 0x2728, 0x2514,\r
-+      0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007,\r
-+      0x9205, 0x202a, 0x7060, 0x2310, 0x8214, 0x92a0, 0x1c0e, 0x2414,\r
-+      0x938c, 0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294, 0x00ff,\r
-+      0x8007, 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, 0x270e,\r
-+      0x8738, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812,\r
-+      0x2009, 0x0240, 0x1f04, 0x5d3f, 0x60c3, 0x0084, 0x080c, 0x5ead,\r
-+      0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0, 0x2011, 0x5e83,\r
-+      0x080c, 0x84f3, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ff4, 0x2079,\r
-+      0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140,\r
-+      0x7097, 0x0001, 0x080c, 0x5f4a, 0x709b, 0x001a, 0x0029, 0x0010,\r
-+      0x7093, 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x601f,\r
-+      0x709b, 0x001b, 0x080c, 0xab21, 0x080c, 0x5ff4, 0x2011, 0x0260,\r
-+      0x2009, 0x0240, 0x7490, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084,\r
-+      0x03f8, 0x8004, 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260,\r
-+      0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000,\r
-+      0x6816, 0x2011, 0x0260, 0x1f04, 0x5d8b, 0x60c3, 0x0084, 0x080c,\r
-+      0x5ead, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1848, 0x252c,\r
-+      0x20a9, 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0, 0x080c,\r
-+      0x5ff4, 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008,\r
-+      0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c,\r
-+      0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211,\r
-+      0x1f04, 0x5dbd, 0x0804, 0x5e2c, 0x82ff, 0x1160, 0xd5d4, 0x0120,\r
-+      0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5e2c,\r
-+      0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110,\r
-+      0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424,\r
-+      0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5de3,\r
-+      0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5df5,\r
-+      0x2328, 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007,\r
-+      0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5e04,\r
-+      0x755e, 0x95c8, 0x3325, 0x292d, 0x95ac, 0x00ff, 0x7582, 0x6532,\r
-+      0x6536, 0x0016, 0x2508, 0x080c, 0x2887, 0x001e, 0x60e7, 0x0000,\r
-+      0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, 0x7087, 0x0001, 0x20e9,\r
-+      0x0000, 0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9, 0x0008,\r
-+      0x4003, 0x9085, 0x0001, 0x0008, 0x9006, 0x009e, 0x008e, 0x0005,\r
-+      0x0156, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1, 0x0000,\r
-+      0x2099, 0x026e, 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0, 0x4003,\r
-+      0x014e, 0x013e, 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026, 0x2001,\r
-+      0x0007, 0x939a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118,\r
-+      0x84ff, 0x0120, 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001,\r
-+      0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029, 0x026e,\r
-+      0x9528, 0x2504, 0x942c, 0x11b8, 0x9405, 0x203a, 0x715e, 0x91a0,\r
-+      0x3325, 0x242d, 0x95ac, 0x00ff, 0x7582, 0x6532, 0x6536, 0x0016,\r
-+      0x2508, 0x080c, 0x2887, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7087,\r
-+      0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708b,\r
-+      0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071,\r
-+      0x0140, 0x080c, 0x5f39, 0x080c, 0xa273, 0x7004, 0x9084, 0x4000,\r
-+      0x0110, 0x080c, 0x2cff, 0x0126, 0x2091, 0x8000, 0x2071, 0x1826,\r
-+      0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c,\r
-+      0x5f96, 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42,\r
-+      0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x2ba5, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012,\r
-+      0x2011, 0x19f1, 0x2013, 0x0000, 0x7093, 0x0000, 0x012e, 0x60a3,\r
-+      0x0056, 0x60a7, 0x9575, 0x080c, 0xa26a, 0x6144, 0xd184, 0x0120,\r
-+      0x7198, 0x918d, 0x2000, 0x0018, 0x718c, 0x918d, 0x1000, 0x2011,\r
-+      0x1999, 0x2112, 0x2009, 0x07d0, 0x2011, 0x5e83, 0x080c, 0x858b,\r
-+      0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0xadd2, 0x2009, 0x00f7, 0x080c, 0x5f96, 0x2061, 0x19fa, 0x900e,\r
-+      0x611a, 0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001,\r
-+      0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1999,\r
-+      0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5f05, 0x080c, 0x84e7,\r
-+      0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126,\r
-+      0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0xa273, 0x2071,\r
-+      0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2cff, 0x080c,\r
-+      0x73c4, 0x0188, 0x080c, 0x73df, 0x1170, 0x080c, 0x76ae, 0x0016,\r
-+      0x080c, 0x2956, 0x2001, 0x196d, 0x2102, 0x001e, 0x080c, 0x76a9,\r
-+      0x080c, 0x72ee, 0x0050, 0x2009, 0x0001, 0x080c, 0x2c3e, 0x2001,\r
-+      0x0001, 0x080c, 0x27ea, 0x080c, 0x5ed9, 0x012e, 0x000e, 0x00ee,\r
-+      0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036,\r
-+      0x2011, 0x8017, 0x2001, 0x1999, 0x201c, 0x080c, 0x4b04, 0x003e,\r
-+      0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1c80,\r
-+      0x080c, 0x5ff4, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9,\r
-+      0x0020, 0x080c, 0x5fee, 0x2099, 0x0260, 0x20a1, 0x1c92, 0x0051,\r
-+      0x20a9, 0x000e, 0x080c, 0x5ff1, 0x2099, 0x0260, 0x20a1, 0x1cb2,\r
-+      0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007,\r
-+      0x2012, 0x8108, 0x8210, 0x1f04, 0x5f6e, 0x002e, 0x001e, 0x0005,\r
-+      0x080c, 0xab21, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000,\r
-+      0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0xab21,\r
-+      0x080c, 0x5ff4, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000,\r
-+      0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006,\r
-+      0x2061, 0x0100, 0x810f, 0x2001, 0x1834, 0x2004, 0x9005, 0x1138,\r
-+      0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185,\r
-+      0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c,\r
-+      0x696e, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xe5ae,\r
-+      0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e,\r
-+      0x080c, 0x318a, 0x080c, 0xd230, 0x0140, 0x0036, 0x2019, 0xffff,\r
-+      0x2021, 0x0007, 0x080c, 0x4cbb, 0x003e, 0x004e, 0x001e, 0x0005,\r
-+      0x080c, 0x5ed9, 0x709b, 0x0000, 0x7093, 0x0000, 0x0005, 0x0006,\r
-+      0x2001, 0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006,\r
-+      0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0x918d,\r
-+      0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009, 0x0001,\r
-+      0x0020, 0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084, 0xffc0,\r
-+      0x910d, 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6, 0x9006,\r
-+      0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004, 0x2079,\r
-+      0x1c00, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813,\r
-+      0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e,\r
-+      0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001,\r
-+      0x19a6, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005,\r
-+      0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108,\r
-+      0x1f04, 0x602e, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136,\r
-+      0x0146, 0x2069, 0x1847, 0x9006, 0xb802, 0xb8ce, 0xb807, 0x0707,\r
-+      0xb80a, 0xb80e, 0xb812, 0x9198, 0x3325, 0x231d, 0x939c, 0x00ff,\r
-+      0xbb16, 0x0016, 0x0026, 0xb8c2, 0x080c, 0xadcb, 0x1120, 0x9192,\r
-+      0x007e, 0x1208, 0xbbc2, 0x20a9, 0x0004, 0xb8c4, 0x20e8, 0xb9c8,\r
-+      0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198,\r
-+      0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb84e,\r
-+      0xb852, 0xb856, 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f,\r
-+      0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008,\r
-+      0xb896, 0xb89a, 0xb89e, 0xb8be, 0xb9a2, 0x0096, 0xb8a4, 0x904d,\r
-+      0x0110, 0x080c, 0x1031, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a,\r
-+      0x6810, 0xb83a, 0x680c, 0xb846, 0xb8bb, 0x0520, 0xb8ac, 0x9005,\r
-+      0x0198, 0x00c6, 0x2060, 0x9c82, 0x1cd0, 0x0a0c, 0x0dd5, 0x2001,\r
-+      0x181a, 0x2004, 0x9c02, 0x1a0c, 0x0dd5, 0x080c, 0x8981, 0x00ce,\r
-+      0x090c, 0x8d25, 0xb8af, 0x0000, 0x6814, 0x9084, 0x00ff, 0xb842,\r
-+      0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091,\r
-+      0x8000, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04,\r
-+      0x611c, 0x9182, 0x0800, 0x1a04, 0x6120, 0x2001, 0x180c, 0x2004,\r
-+      0x9084, 0x0003, 0x1904, 0x6126, 0x9188, 0x1000, 0x2104, 0x905d,\r
-+      0x0518, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508, 0xb8a4,\r
-+      0x900d, 0x1904, 0x6138, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900,\r
-+      0xb852, 0xb84e, 0x080c, 0x910d, 0x9006, 0x012e, 0x0005, 0x00a6,\r
-+      0x2150, 0x2900, 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90,\r
-+      0x2001, 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498,\r
-+      0x9082, 0x0006, 0x1290, 0x080c, 0xadcb, 0x1160, 0xb8a0, 0x9084,\r
-+      0xff80, 0x1140, 0xb900, 0xd1fc, 0x0990, 0x2001, 0x0029, 0x2009,\r
-+      0x1000, 0x0408, 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c,\r
-+      0xd18c, 0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001,\r
-+      0x0004, 0x0040, 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009,\r
-+      0x1000, 0x0048, 0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,\r
-+      0x2001, 0x0029, 0x900e, 0x9005, 0x012e, 0x0005, 0x2001, 0x180c,\r
-+      0x2004, 0xd084, 0x19d0, 0x9188, 0x1000, 0x2104, 0x905d, 0x09a8,\r
-+      0x080c, 0x6972, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x60cf,\r
-+      0x080c, 0x679b, 0x0904, 0x60e8, 0x0804, 0x60d3, 0x00b6, 0x00e6,\r
-+      0x0126, 0x2091, 0x8000, 0xa874, 0x908e, 0x00ff, 0x1120, 0x2001,\r
-+      0x196b, 0x205c, 0x0060, 0xa974, 0x9182, 0x0800, 0x1690, 0x9188,\r
-+      0x1000, 0x2104, 0x905d, 0x01d0, 0x080c, 0x6912, 0x11d0, 0x080c,\r
-+      0xae0b, 0x0570, 0x2b00, 0x6012, 0x2900, 0x6016, 0x6023, 0x0009,\r
-+      0x600b, 0x0000, 0xa874, 0x908e, 0x00ff, 0x1110, 0x600b, 0x8000,\r
-+      0x2009, 0x0043, 0x080c, 0xaedc, 0x9006, 0x00b0, 0x2001, 0x0028,\r
-+      0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,\r
-+      0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029,\r
-+      0x0010, 0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005,\r
-+      0x2001, 0x002c, 0x0cc0, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000,\r
-+      0xa974, 0x9182, 0x0800, 0x1a04, 0x6206, 0x9188, 0x1000, 0x2104,\r
-+      0x905d, 0x0904, 0x61de, 0xb8a0, 0x9086, 0x007f, 0x0178, 0x080c,\r
-+      0x697a, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e, 0x0004, 0x0130,\r
-+      0x908e, 0x0005, 0x0118, 0x080c, 0x6972, 0x1598, 0xa87c, 0xd0fc,\r
-+      0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026, 0x2010, 0x080c,\r
-+      0xcb23, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804, 0x6208, 0x6020,\r
-+      0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804, 0x6208, 0x601a,\r
-+      0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c, 0xae0b, 0x05e8,\r
-+      0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a,\r
-+      0x2009, 0x0003, 0x080c, 0xaedc, 0x9006, 0x0458, 0x2001, 0x0028,\r
-+      0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0xadcb, 0x1160, 0xb8a0,\r
-+      0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900, 0x2001, 0x0029,\r
-+      0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009, 0x180c,\r
-+      0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184, 0x0118,\r
-+      0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029,\r
-+      0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c, 0x0cc0,\r
-+      0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000, 0xa8e0, 0x9005, 0x1550,\r
-+      0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8, 0x9005, 0x1518, 0xa8c4,\r
-+      0x9082, 0x0101, 0x12f8, 0xa974, 0x2079, 0x1800, 0x9182, 0x0800,\r
-+      0x12e8, 0x7830, 0x9084, 0x0003, 0x1130, 0xaa98, 0xab94, 0xa878,\r
-+      0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c, 0x0118, 0x2001, 0x0004,\r
-+      0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029,\r
-+      0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0029,\r
-+      0x900e, 0x9006, 0x0008, 0x9005, 0x012e, 0x00be, 0x00fe, 0x0005,\r
-+      0x629d, 0x6258, 0x626f, 0x629d, 0x629d, 0x629d, 0x629d, 0x629d,\r
-+      0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x659e, 0x0148, 0x9046,\r
-+      0xb810, 0x9306, 0x1904, 0x62a5, 0xb814, 0x9206, 0x15f0, 0x0028,\r
-+      0xbb12, 0xba16, 0x0010, 0x080c, 0x49b7, 0x0150, 0x04b0, 0x080c,\r
-+      0x65ff, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, 0x9206, 0x1568,\r
-+      0x080c, 0xae0b, 0x0530, 0x2b00, 0x6012, 0x080c, 0xcfaa, 0x2900,\r
-+      0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, 0x9086, 0x0001,\r
-+      0x1170, 0x080c, 0x31bf, 0x9006, 0x080c, 0x653b, 0x2001, 0x0002,\r
-+      0x080c, 0x654f, 0x2001, 0x0200, 0xb86e, 0xb893, 0x0002, 0x2009,\r
-+      0x0003, 0x080c, 0xaedc, 0x9006, 0x0068, 0x2001, 0x0001, 0x900e,\r
-+      0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0028, 0x900e,\r
-+      0x9005, 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005, 0x00b6, 0x00f6,\r
-+      0x00e6, 0x0126, 0x2091, 0x8000, 0xa894, 0x90c6, 0x0015, 0x0904,\r
-+      0x648c, 0x90c6, 0x0056, 0x0904, 0x6490, 0x90c6, 0x0066, 0x0904,\r
-+      0x6494, 0x90c6, 0x0067, 0x0904, 0x6498, 0x90c6, 0x0068, 0x0904,\r
-+      0x649c, 0x90c6, 0x0071, 0x0904, 0x64a0, 0x90c6, 0x0074, 0x0904,\r
-+      0x64a4, 0x90c6, 0x007c, 0x0904, 0x64a8, 0x90c6, 0x007e, 0x0904,\r
-+      0x64ac, 0x90c6, 0x0037, 0x0904, 0x64b0, 0x9016, 0x2079, 0x1800,\r
-+      0xa974, 0x9186, 0x00ff, 0x0904, 0x6487, 0x9182, 0x0800, 0x1a04,\r
-+      0x6487, 0x080c, 0x65ff, 0x1198, 0xb804, 0x9084, 0x00ff, 0x9082,\r
-+      0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148, 0x080c, 0xadcb,\r
-+      0x1904, 0x6470, 0xb8a0, 0x9084, 0xff80, 0x1904, 0x6470, 0xa894,\r
-+      0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, 0x63d0, 0x90c6,\r
-+      0x0064, 0x0904, 0x63f9, 0x2008, 0x0804, 0x6392, 0xa998, 0xa8b0,\r
-+      0x2040, 0x080c, 0xadcb, 0x1120, 0x9182, 0x007f, 0x0a04, 0x6392,\r
-+      0x9186, 0x00ff, 0x0904, 0x6392, 0x9182, 0x0800, 0x1a04, 0x6392,\r
-+      0xaaa0, 0xab9c, 0x787c, 0x9306, 0x1188, 0x7880, 0x0096, 0x924e,\r
-+      0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x6392, 0x99cc, 0xff00,\r
-+      0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x6392, 0x080c, 0x49b7,\r
-+      0x0904, 0x639c, 0x900e, 0x9016, 0x90c6, 0x4000, 0x15e0, 0x0006,\r
-+      0x080c, 0x681f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,\r
-+      0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0,\r
-+      0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7c,\r
-+      0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0035, 0x20a0,\r
-+      0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7c,\r
-+      0xa8c4, 0xabc8, 0x9305, 0xabcc, 0x9305, 0xabd0, 0x9305, 0xabd4,\r
-+      0x9305, 0xabd8, 0x9305, 0xabdc, 0x9305, 0xabe0, 0x9305, 0x9005,\r
-+      0x0510, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x00a0,\r
-+      0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6, 0x4009,\r
-+      0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005, 0x2009,\r
-+      0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e, 0x2001,\r
-+      0x0030, 0x900e, 0x0478, 0x000e, 0x080c, 0xae0b, 0x1130, 0x2001,\r
-+      0x4005, 0x2009, 0x0003, 0x9016, 0x0c78, 0x2b00, 0x6012, 0x080c,\r
-+      0xcfaa, 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108,\r
-+      0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x31bf, 0x012e,\r
-+      0x9006, 0x080c, 0x653b, 0x2001, 0x0002, 0x080c, 0x654f, 0x2009,\r
-+      0x0002, 0x080c, 0xaedc, 0xa8b0, 0xd094, 0x0118, 0xb8cc, 0xc08d,\r
-+      0xb8ce, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005,\r
-+      0x080c, 0x56e3, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0,\r
-+      0x080c, 0x65ff, 0x1904, 0x638d, 0x9186, 0x007f, 0x0130, 0x080c,\r
-+      0x6972, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x0fff,\r
-+      0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806,\r
-+      0x080c, 0xcd1b, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804,\r
-+      0x6394, 0xa998, 0xaeb0, 0x080c, 0x65ff, 0x1904, 0x638d, 0x0096,\r
-+      0x080c, 0x0fff, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x644d,\r
-+      0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b, 0xb8c4,\r
-+      0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002,\r
-+      0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xbbc8,\r
-+      0x9398, 0x0006, 0x2398, 0x080c, 0x0f7c, 0x009e, 0xa87b, 0x0000,\r
-+      0xa883, 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x56cf,\r
-+      0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118,\r
-+      0xa89b, 0x000c, 0x00b0, 0x080c, 0x6972, 0x0118, 0xa89b, 0x0009,\r
-+      0x0080, 0x080c, 0x56e3, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c,\r
-+      0xccfe, 0x1904, 0x63c9, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804,\r
-+      0x6394, 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006,\r
-+      0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009,\r
-+      0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041,\r
-+      0x1243, 0x080c, 0xb37a, 0x1904, 0x63c9, 0x2009, 0x0002, 0x08e8,\r
-+      0x2001, 0x0028, 0x900e, 0x0804, 0x63ca, 0x2009, 0x180c, 0x210c,\r
-+      0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001,\r
-+      0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x63ca, 0x2001,\r
-+      0x0029, 0x900e, 0x0804, 0x63ca, 0x080c, 0x3749, 0x0804, 0x63cb,\r
-+      0x080c, 0x540c, 0x0804, 0x63cb, 0x080c, 0x4547, 0x0804, 0x63cb,\r
-+      0x080c, 0x45c0, 0x0804, 0x63cb, 0x080c, 0x461c, 0x0804, 0x63cb,\r
-+      0x080c, 0x4a7a, 0x0804, 0x63cb, 0x080c, 0x4d31, 0x0804, 0x63cb,\r
-+      0x080c, 0x5077, 0x0804, 0x63cb, 0x080c, 0x5270, 0x0804, 0x63cb,\r
-+      0x080c, 0x395f, 0x0804, 0x63cb, 0x00b6, 0xa974, 0xae78, 0x9684,\r
-+      0x3fff, 0x9082, 0x4000, 0x1618, 0x9182, 0x0800, 0x1268, 0x9188,\r
-+      0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x6972, 0x1148, 0x00e9,\r
-+      0x080c, 0x672a, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, 0x0090,\r
-+      0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001, 0x0029,\r
-+      0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001,\r
-+      0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000,\r
-+      0xb850, 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802, 0x009e,\r
-+      0xa803, 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852, 0xb84e,\r
-+      0xa803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000, 0xb84c, 0x9005,\r
-+      0x0170, 0x00e6, 0x2071, 0x19e7, 0x7004, 0x9086, 0x0002, 0x0168,\r
-+      0x00ee, 0xb84c, 0xa802, 0x2900, 0xb84e, 0x012e, 0x0005, 0x2900,\r
-+      0xb852, 0xb84e, 0xa803, 0x0000, 0x0cc0, 0x701c, 0x9b06, 0x1d80,\r
-+      0xb84c, 0x00a6, 0x2050, 0xb000, 0xa802, 0x2900, 0xb002, 0x00ae,\r
-+      0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0xb84c, 0x904d,\r
-+      0x0130, 0xa800, 0x9005, 0x1108, 0xb852, 0xb84e, 0x9905, 0x012e,\r
-+      0x0005, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108, 0xb852,\r
-+      0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026, 0x2091,\r
-+      0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110, 0xc285, 0x0008,\r
-+      0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6,\r
-+      0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006,\r
-+      0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c, 0x696e,\r
-+      0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011,\r
-+      0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, 0x9086,\r
-+      0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0dd5, 0x000e, 0x00ce,\r
-+      0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000,\r
-+      0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, 0xb89c,\r
-+      0xd0a4, 0x0150, 0x080c, 0x696a, 0x1138, 0x9284, 0x00ff, 0x9086,\r
-+      0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007,\r
-+      0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, 0x0800,\r
-+      0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, 0x1000,\r
-+      0x2204, 0x905d, 0x1188, 0x0096, 0x080c, 0x0fff, 0x2958, 0x009e,\r
-+      0x0168, 0x2b00, 0x2012, 0xb85c, 0xb8ca, 0xb860, 0xb8c6, 0x9006,\r
-+      0xb8a6, 0xb8ae, 0x080c, 0x6034, 0x9006, 0x0010, 0x9085, 0x0001,\r
-+      0x002e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000,\r
-+      0x0026, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0458, 0x00d6,\r
-+      0x9190, 0x1000, 0x2204, 0x905d, 0x0518, 0x2013, 0x0000, 0xb8a4,\r
-+      0x904d, 0x0110, 0x080c, 0x1031, 0x00d6, 0x00c6, 0xb8bc, 0x2060,\r
-+      0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xcb35,\r
-+      0x0110, 0x080c, 0x0fb1, 0x080c, 0xae61, 0x00ce, 0x0c88, 0x00ce,\r
-+      0x00de, 0x2b48, 0xb8c8, 0xb85e, 0xb8c4, 0xb862, 0x080c, 0x1041,\r
-+      0x00de, 0x9006, 0x002e, 0x012e, 0x009e, 0x00be, 0x0005, 0x0016,\r
-+      0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0030, 0x9188, 0x1000,\r
-+      0x2104, 0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156,\r
-+      0x0136, 0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802,\r
-+      0x080c, 0x73bc, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c,\r
-+      0xadcb, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061,\r
-+      0x1982, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054,\r
-+      0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001,\r
-+      0x0001, 0x6886, 0x2069, 0x1800, 0x68b6, 0x7040, 0xb85e, 0x7048,\r
-+      0xb862, 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8c4,\r
-+      0x20e8, 0xb8c8, 0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003,\r
-+      0x2099, 0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003,\r
-+      0x2069, 0x0200, 0x6817, 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e,\r
-+      0x7048, 0xb872, 0x7050, 0xb876, 0x2069, 0x0200, 0x6817, 0x0000,\r
-+      0xb8a0, 0x9086, 0x007e, 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211,\r
-+      0x1218, 0x2009, 0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009,\r
-+      0x0007, 0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0,\r
-+      0x9182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421,\r
-+      0x1218, 0x2009, 0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009,\r
-+      0x0003, 0x0010, 0x2009, 0x0002, 0xb992, 0x014e, 0x013e, 0x015e,\r
-+      0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034,\r
-+      0xb896, 0x703c, 0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbcc, 0xc384,\r
-+      0xba00, 0x2009, 0x1867, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110,\r
-+      0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd,\r
-+      0xd0cc, 0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02,\r
-+      0xbbce, 0x003e, 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096, 0x0126,\r
-+      0x2091, 0x8000, 0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0,\r
-+      0xaa04, 0x9282, 0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6,\r
-+      0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0,\r
-+      0x9080, 0x0004, 0x2098, 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002,\r
-+      0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0dd5, 0x3c00,\r
-+      0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de,\r
-+      0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x0fff, 0x0170, 0x2900,\r
-+      0xb8a6, 0xa803, 0x0000, 0x080c, 0x67bb, 0xa807, 0x0001, 0xae12,\r
-+      0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126,\r
-+      0x2091, 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005,\r
-+      0x1150, 0x080c, 0x67ca, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218,\r
-+      0x8001, 0xa806, 0x0020, 0x080c, 0x1031, 0xb8a7, 0x0000, 0x009e,\r
-+      0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x910d, 0x012e,\r
-+      0x0005, 0x901e, 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091,\r
-+      0x8000, 0xb84c, 0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500,\r
-+      0x83ff, 0x0120, 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406,\r
-+      0x1118, 0xa870, 0x9506, 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70,\r
-+      0x080c, 0xa692, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020,\r
-+      0x00a6, 0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff,\r
-+      0x012e, 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005,\r
-+      0x080c, 0x681f, 0x0128, 0x080c, 0xcbf2, 0x0010, 0x9085, 0x0001,\r
-+      0x0005, 0x080c, 0x681f, 0x0128, 0x080c, 0xcb97, 0x0010, 0x9085,\r
-+      0x0001, 0x0005, 0x080c, 0x681f, 0x0128, 0x080c, 0xcbef, 0x0010,\r
-+      0x9085, 0x0001, 0x0005, 0x080c, 0x681f, 0x0128, 0x080c, 0xcbb6,\r
-+      0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x681f, 0x0128, 0x080c,\r
-+      0xcc33, 0x0010, 0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118,\r
-+      0x9085, 0x0001, 0x0005, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8,\r
-+      0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0,\r
-+      0x9080, 0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002,\r
-+      0x9606, 0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006,\r
-+      0x01ce, 0x013e, 0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x0004, 0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104,\r
-+      0x01de, 0x014e, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e,\r
-+      0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080,\r
-+      0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606,\r
-+      0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6,\r
-+      0x3300, 0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004,\r
-+      0x01de, 0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126,\r
-+      0x2091, 0x8000, 0xb8a4, 0x904d, 0x1128, 0x080c, 0x0fff, 0x0168,\r
-+      0x2900, 0xb8a6, 0x080c, 0x67bb, 0xa803, 0x0001, 0xa807, 0x0000,\r
-+      0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096,\r
-+      0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000,\r
-+      0x080c, 0x1031, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c,\r
-+      0xd0a4, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x73bc, 0x01b0, 0x71c4,\r
-+      0x81ff, 0x1198, 0x71dc, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080,\r
-+      0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086,\r
-+      0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1847, 0x7804,\r
-+      0xd0a4, 0x01d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c,\r
-+      0x65ff, 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004,\r
-+      0x0118, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e,\r
-+      0x8108, 0x1f04, 0x6846, 0x015e, 0x080c, 0x6930, 0x0120, 0x2001,\r
-+      0x1985, 0x200c, 0x0038, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x0130,\r
-+      0x2009, 0x07d0, 0x2011, 0x6871, 0x080c, 0x858b, 0x00fe, 0x00be,\r
-+      0x0005, 0x00b6, 0x2011, 0x6871, 0x080c, 0x84f3, 0x080c, 0x6930,\r
-+      0x01d8, 0x2001, 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902,\r
-+      0x080c, 0x696e, 0x0130, 0x2009, 0x07d0, 0x2011, 0x6871, 0x080c,\r
-+      0x858b, 0x00e6, 0x2071, 0x1800, 0x9006, 0x707e, 0x7060, 0x7082,\r
-+      0x080c, 0x2f96, 0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f,\r
-+      0x900e, 0x0016, 0x080c, 0x65ff, 0x1538, 0xb800, 0xd0ec, 0x0520,\r
-+      0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xe5ae,\r
-+      0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x696a, 0x2001, 0x0707,\r
-+      0x1128, 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x2019,\r
-+      0x0029, 0x080c, 0x928b, 0x0076, 0x903e, 0x080c, 0x9168, 0x900e,\r
-+      0x080c, 0xe2eb, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x6899,\r
-+      0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, 0xb800,\r
-+      0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x0096, 0x080c,\r
-+      0x1018, 0x090c, 0x0dd5, 0x2958, 0x009e, 0x2001, 0x196b, 0x2b02,\r
-+      0x8b07, 0x8006, 0x8006, 0x908c, 0x003f, 0xb9c6, 0x908c, 0xffc0,\r
-+      0xb9ca, 0xb8af, 0x0000, 0x2009, 0x00ff, 0x080c, 0x6034, 0xb807,\r
-+      0x0006, 0xb813, 0x00ff, 0xb817, 0xffff, 0xb86f, 0x0200, 0xb86c,\r
-+      0xb893, 0x0002, 0xb8bb, 0x0520, 0xb8a3, 0x00ff, 0xb8af, 0x0000,\r
-+      0x00ce, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800, 0x00be,\r
-+      0xd0ac, 0x0005, 0x6010, 0x00b6, 0x905d, 0x0108, 0xb800, 0x00be,\r
-+      0xd0bc, 0x0005, 0x0006, 0x0016, 0x0026, 0xb804, 0x908c, 0x00ff,\r
-+      0x9196, 0x0006, 0x0188, 0x9196, 0x0004, 0x0170, 0x9196, 0x0005,\r
-+      0x0158, 0x908c, 0xff00, 0x810f, 0x9196, 0x0006, 0x0128, 0x9196,\r
-+      0x0004, 0x0110, 0x9196, 0x0005, 0x002e, 0x001e, 0x000e, 0x0005,\r
-+      0x00b6, 0x00f6, 0x2001, 0x107e, 0x2004, 0x905d, 0x0110, 0xb800,\r
-+      0xd0ec, 0x00fe, 0x00be, 0x0005, 0x0126, 0x0026, 0x2091, 0x8000,\r
-+      0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204, 0x9b06, 0x190c, 0x0dd5,\r
-+      0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02,\r
-+      0x002e, 0x012e, 0x0005, 0x2011, 0x1837, 0x2204, 0xd0cc, 0x0138,\r
-+      0x2001, 0x1983, 0x200c, 0x2011, 0x6960, 0x080c, 0x858b, 0x0005,\r
-+      0x2011, 0x6960, 0x080c, 0x84f3, 0x2011, 0x1837, 0x2204, 0xc0cc,\r
-+      0x2012, 0x0005, 0x080c, 0x56cf, 0xd0ac, 0x0005, 0x080c, 0x56cf,\r
-+      0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e, 0x0006,\r
-+      0x001e, 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, 0x8007, 0x908e,\r
-+      0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xd230, 0x0158,\r
-+      0x70dc, 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, 0x2004, 0x905d,\r
-+      0x0110, 0xb8cc, 0xd094, 0x00fe, 0x00be, 0x0005, 0x2071, 0x1910,\r
-+      0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a,\r
-+      0x701e, 0x700a, 0x7046, 0x2001, 0x1947, 0x2003, 0x0000, 0x0005,\r
-+      0x0016, 0x00e6, 0x2071, 0x1948, 0x900e, 0x710a, 0x080c, 0x56cf,\r
-+      0xd0fc, 0x1140, 0x080c, 0x56cf, 0x900e, 0xd09c, 0x0108, 0x8108,\r
-+      0x7102, 0x00f8, 0x2001, 0x1867, 0x200c, 0x9184, 0x0007, 0x0002,\r
-+      0x69b2, 0x69b2, 0x69b2, 0x69b2, 0x69b2, 0x69c8, 0x69d6, 0x69b2,\r
-+      0x7003, 0x0003, 0x2009, 0x1868, 0x210c, 0x9184, 0xff00, 0x8007,\r
-+      0x9005, 0x1110, 0x2001, 0x0002, 0x7006, 0x0018, 0x7003, 0x0005,\r
-+      0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0050, 0x684c,\r
-+      0x9005, 0x1150, 0x00e6, 0x2071, 0x1910, 0x7028, 0xc085, 0x702a,\r
-+      0x00ee, 0x9085, 0x0001, 0x0488, 0x6844, 0x9005, 0x0158, 0x080c,\r
-+      0x7716, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101, 0x7006, 0x9006,\r
-+      0x7012, 0x7016, 0x6860, 0x7002, 0x6864, 0x7006, 0x6868, 0x700a,\r
-+      0x686c, 0x700e, 0x6844, 0x9005, 0x1110, 0x7012, 0x7016, 0x684c,\r
-+      0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x7037, 0x0019, 0x702b,\r
-+      0x0001, 0x00e6, 0x2071, 0x1910, 0x7028, 0xc084, 0x702a, 0x7007,\r
-+      0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005, 0x00e6,\r
-+      0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6c86, 0x9286,\r
-+      0x0003, 0x0904, 0x6b1c, 0x9286, 0x0005, 0x0904, 0x6b1c, 0x2071,\r
-+      0x1877, 0xa87c, 0x9005, 0x0904, 0x6a7d, 0x7140, 0xa868, 0x9102,\r
-+      0x0a04, 0x6c86, 0xa878, 0xd084, 0x15d8, 0xa853, 0x0019, 0x2001,\r
-+      0x8023, 0xa84e, 0x2071, 0x1910, 0x701c, 0x9005, 0x1904, 0x6e28,\r
-+      0x0e04, 0x6e96, 0x2071, 0x0000, 0xa850, 0x7032, 0xa84c, 0x7082,\r
-+      0xa870, 0x7086, 0xa86c, 0x708a, 0xa880, 0x708e, 0x7036, 0x0146,\r
-+      0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a,\r
-+      0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098,\r
-+      0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x2091, 0x4080,\r
-+      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x0804, 0x6aff,\r
-+      0xa853, 0x001b, 0x2001, 0x8027, 0x0820, 0x7004, 0xd08c, 0x1904,\r
-+      0x6c86, 0xa853, 0x001a, 0x2001, 0x8024, 0x0804, 0x6a41, 0x00e6,\r
-+      0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6c86, 0x9286,\r
-+      0x0003, 0x0904, 0x6b1c, 0x9286, 0x0005, 0x0904, 0x6b1c, 0xa84f,\r
-+      0x8022, 0xa853, 0x0018, 0x0804, 0x6ae4, 0xa868, 0xd0fc, 0x11d8,\r
-+      0x00e6, 0x0026, 0x2001, 0x1948, 0x2004, 0x9005, 0x0904, 0x6c86,\r
-+      0xa87c, 0xd0bc, 0x1904, 0x6c86, 0xa978, 0xa874, 0x9105, 0x1904,\r
-+      0x6c86, 0x2001, 0x1948, 0x2004, 0x0002, 0x6c86, 0x6ae0, 0x6b1c,\r
-+      0x6b1c, 0x6c86, 0x6b1c, 0x0005, 0xa868, 0xd0fc, 0x1500, 0x00e6,\r
-+      0x0026, 0x2009, 0x1948, 0x210c, 0x81ff, 0x0904, 0x6c86, 0xa87c,\r
-+      0xd0cc, 0x0904, 0x6c86, 0xa880, 0x9084, 0x00ff, 0x9086, 0x0001,\r
-+      0x1904, 0x6c86, 0x9186, 0x0003, 0x0904, 0x6b1c, 0x9186, 0x0005,\r
-+      0x0904, 0x6b1c, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005,\r
-+      0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1910, 0x701c, 0x9005,\r
-+      0x1904, 0x6e28, 0x0e04, 0x6e96, 0x2071, 0x0000, 0xa84c, 0x7082,\r
-+      0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091,\r
-+      0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2071,\r
-+      0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158, 0xa802,\r
-+      0x2900, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x002e,\r
-+      0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,\r
-+      0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079,\r
-+      0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904,\r
-+      0x6c0b, 0x782c, 0x908c, 0x0780, 0x190c, 0x6fe2, 0x8004, 0x8004,\r
-+      0x8004, 0x9084, 0x0003, 0x0002, 0x6b3a, 0x6c0b, 0x6b5f, 0x6ba6,\r
-+      0x080c, 0x0dd5, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d,\r
-+      0x1170, 0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949,\r
-+      0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016,\r
-+      0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,\r
-+      0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x0c10, 0x2071,\r
-+      0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1580, 0x7824, 0x00e6,\r
-+      0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x1830, 0x210c,\r
-+      0x918a, 0x0020, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048,\r
-+      0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c,\r
-+      0x8414, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x19f0,\r
-+      0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004,\r
-+      0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c,\r
-+      0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,\r
-+      0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x0800, 0x0096, 0x00e6,\r
-+      0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e,\r
-+      0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414, 0x782c, 0x9094, 0x0780,\r
-+      0x190c, 0x6fe2, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780,\r
-+      0x190c, 0x6fe2, 0xd09c, 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804,\r
-+      0x900d, 0x1560, 0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001,\r
-+      0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005,\r
-+      0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a,\r
-+      0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1170,\r
-+      0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004,\r
-+      0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800,\r
-+      0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,\r
-+      0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x00fe,\r
-+      0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018,\r
-+      0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,\r
-+      0x900d, 0x1904, 0x6c60, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2,\r
-+      0xd09c, 0x1198, 0x701c, 0x904d, 0x0180, 0x7010, 0x8001, 0x7012,\r
-+      0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094,\r
-+      0x0780, 0x190c, 0x6fe2, 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780,\r
-+      0x190c, 0x6fe2, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071,\r
-+      0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2,\r
-+      0x080c, 0x8414, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4,\r
-+      0x1d60, 0x00ee, 0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001,\r
-+      0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005,\r
-+      0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,\r
-+      0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2,\r
-+      0x080c, 0x8414, 0x00ee, 0x0804, 0x6c1b, 0xa868, 0xd0fc, 0x1560,\r
-+      0x0096, 0xa804, 0xa807, 0x0000, 0x904d, 0x190c, 0x0fb1, 0x009e,\r
-+      0x0018, 0xa868, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0xa84f, 0x0000,\r
-+      0x00f6, 0x2079, 0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010,\r
-+      0x9005, 0x1904, 0x6da2, 0x782c, 0x908c, 0x0780, 0x190c, 0x6fe2,\r
-+      0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6ca5, 0x6da2,\r
-+      0x6cc0, 0x6d31, 0x080c, 0x0dd5, 0x0005, 0x2071, 0x1800, 0x2900,\r
-+      0x7822, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005,\r
-+      0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,\r
-+      0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x0c60,\r
-+      0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904, 0x6d20,\r
-+      0x7830, 0x8007, 0x9084, 0x001f, 0x9082, 0x0005, 0x1220, 0x00fe,\r
-+      0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c,\r
-+      0xd19c, 0x1148, 0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0218,\r
-+      0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900,\r
-+      0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414, 0x782c, 0x9094,\r
-+      0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x19f0, 0x0e04, 0x6d17, 0x7838,\r
-+      0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,\r
-+      0x0013, 0x00de, 0x2001, 0x1921, 0x200c, 0xc184, 0x2102, 0x2091,\r
-+      0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2009,\r
-+      0x1947, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2001,\r
-+      0x1921, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee, 0x0005,\r
-+      0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,\r
-+      0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x0804,\r
-+      0x6cd3, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,\r
-+      0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414,\r
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x1d60, 0x00ee,\r
-+      0x0e04, 0x6d75, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069,\r
-+      0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046,\r
-+      0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b,\r
-+      0x2009, 0x1947, 0x200b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c,\r
-+      0x6fe2, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,\r
-+      0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046,\r
-+      0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,\r
-+      0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,\r
-+      0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016,\r
-+      0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,\r
-+      0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x00fe, 0x002e,\r
-+      0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,\r
-+      0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,\r
-+      0x1904, 0x6e13, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd09c,\r
-+      0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010,\r
-+      0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822,\r
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd09c, 0x0d50, 0x782c,\r
-+      0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x05c8, 0x00e6, 0x7824,\r
-+      0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0,\r
-+      0x8000, 0x70c2, 0x080c, 0x8414, 0x782c, 0x9094, 0x0780, 0x190c,\r
-+      0x6fe2, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6e0c, 0x7838, 0x7938,\r
-+      0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,\r
-+      0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089,\r
-+      0x2004, 0xd084, 0x190c, 0x119b, 0x2009, 0x1947, 0x200b, 0x0000,\r
-+      0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe,\r
-+      0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c,\r
-+      0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,\r
-+      0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x00ee, 0x0804, 0x6db2,\r
-+      0x2071, 0x1910, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012,\r
-+      0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,\r
-+      0xa804, 0x900d, 0x1128, 0x1e04, 0x6e53, 0x002e, 0x00ee, 0x0005,\r
-+      0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,\r
-+      0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c,\r
-+      0x8414, 0x0e04, 0x6e3d, 0x2071, 0x1910, 0x701c, 0x2048, 0xa84c,\r
-+      0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c,\r
-+      0x7086, 0x7036, 0xa870, 0x708a, 0xa850, 0x9082, 0x0019, 0x1278,\r
-+      0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b,\r
-+      0x2071, 0x1910, 0x080c, 0x6fce, 0x002e, 0x00ee, 0x0005, 0xa850,\r
-+      0x9082, 0x001c, 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6,\r
-+      0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868,\r
-+      0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003,\r
-+      0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x0890, 0x2071, 0x1910,\r
-+      0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,\r
-+      0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,\r
-+      0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c,\r
-+      0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,\r
-+      0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x002e, 0x00ee, 0x0005,\r
-+      0x0006, 0xa87c, 0x0006, 0xa867, 0x0103, 0x20a9, 0x001c, 0xa860,\r
-+      0x20e8, 0xa85c, 0x9080, 0x001d, 0x20a0, 0x9006, 0x4004, 0x000e,\r
-+      0x9084, 0x00ff, 0xa87e, 0x000e, 0xa87a, 0xa982, 0x0005, 0x2071,\r
-+      0x1910, 0x7004, 0x0002, 0x6ee1, 0x6ee2, 0x6fcd, 0x6ee2, 0x0dd5,\r
-+      0x6fcd, 0x0005, 0x2001, 0x1948, 0x2004, 0x0002, 0x6eec, 0x6eec,\r
-+      0x6f66, 0x6f67, 0x6eec, 0x6f67, 0x0126, 0x2091, 0x8000, 0x1e0c,\r
-+      0x6fed, 0x701c, 0x904d, 0x0508, 0xa84c, 0x9005, 0x0904, 0x6f37,\r
-+      0x0e04, 0x6f15, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032,\r
-+      0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0xa850, 0x9082, 0x0019,\r
-+      0x1278, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,\r
-+      0x119b, 0x2071, 0x1910, 0x080c, 0x6fce, 0x012e, 0x0804, 0x6f65,\r
-+      0xa850, 0x9082, 0x001c, 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146,\r
-+      0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a,\r
-+      0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098,\r
-+      0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x0890, 0x2001,\r
-+      0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd09c, 0x2071,\r
-+      0x1910, 0x1510, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964, 0x9184,\r
-+      0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101,\r
-+      0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de,\r
-+      0x2071, 0x1910, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800,\r
-+      0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6,\r
-+      0x2008, 0x2069, 0x19fa, 0x683c, 0x9005, 0x0760, 0x0158, 0x9186,\r
-+      0x0003, 0x0540, 0x2001, 0x1815, 0x2004, 0x2009, 0x1ac8, 0x210c,\r
-+      0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c,\r
-+      0x6838, 0x9106, 0x0190, 0x0e04, 0x6f99, 0x2069, 0x0000, 0x6837,\r
-+      0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001,\r
-+      0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2069, 0x19fa, 0x683f,\r
-+      0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x705e,\r
-+      0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780,\r
-+      0x15c9, 0xd09c, 0x1500, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964,\r
-+      0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,\r
-+      0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822,\r
-+      0x00de, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e,\r
-+      0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091,\r
-+      0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800,\r
-+      0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x1031, 0x0005,\r
-+      0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6fe4, 0x0006, 0x0016,\r
-+      0x2001, 0x8004, 0x0006, 0x0804, 0x0dde, 0x0096, 0x00f6, 0x2079,\r
-+      0x0050, 0x7044, 0xd084, 0x01e0, 0xc084, 0x7046, 0x7838, 0x7938,\r
-+      0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,\r
-+      0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,\r
-+      0x119b, 0x2009, 0x1947, 0x200b, 0x0000, 0x00fe, 0x009e, 0x0005,\r
-+      0x782c, 0x9094, 0x0780, 0x1971, 0xd0a4, 0x0db8, 0x2009, 0x1947,\r
-+      0x2104, 0x8000, 0x200a, 0x9082, 0x000f, 0x0e78, 0x00e6, 0x2071,\r
-+      0x1800, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148,\r
-+      0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0218, 0x7022, 0x00ee,\r
-+      0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0,\r
-+      0x8000, 0x70c2, 0x080c, 0x8414, 0x782c, 0x9094, 0x0780, 0x190c,\r
-+      0x6fe2, 0xd0a4, 0x19f0, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,\r
-+      0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080,\r
-+      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2009, 0x1947,\r
-+      0x200b, 0x0000, 0x00ee, 0x00fe, 0x009e, 0x0005, 0x00f6, 0x2079,\r
-+      0x0050, 0x7044, 0xd084, 0x01b8, 0xc084, 0x7046, 0x7838, 0x7938,\r
-+      0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,\r
-+      0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,\r
-+      0x119b, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2,\r
-+      0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824, 0x2048, 0x702c,\r
-+      0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414,\r
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x1d70, 0x00d6,\r
-+      0x2069, 0x0050, 0x693c, 0x2069, 0x1948, 0x6808, 0x690a, 0x2069,\r
-+      0x19fa, 0x9102, 0x1118, 0x683c, 0x9005, 0x1328, 0x2001, 0x1949,\r
-+      0x200c, 0x810d, 0x693e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x7098,\r
-+      0x908a, 0x0029, 0x1a0c, 0x0dd5, 0x9082, 0x001d, 0x001b, 0x6027,\r
-+      0x1e00, 0x0005, 0x7186, 0x710c, 0x7128, 0x7152, 0x7175, 0x71b5,\r
-+      0x71c7, 0x7128, 0x719d, 0x70c7, 0x70f5, 0x70c6, 0x0005, 0x00d6,\r
-+      0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005, 0x1518,\r
-+      0x709b, 0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x74f6,\r
-+      0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x709b, 0x0028, 0x2069,\r
-+      0x198f, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a, 0x00e6,\r
-+      0x0036, 0x0046, 0x0056, 0x2071, 0x1a62, 0x080c, 0x1aa9, 0x005e,\r
-+      0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200,\r
-+      0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x709b, 0x0028,\r
-+      0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x7591, 0x6028, 0x9085,\r
-+      0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c,\r
-+      0x2cef, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x7234, 0xd1d4,\r
-+      0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x709b, 0x0020, 0x080c,\r
-+      0x7234, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005,\r
-+      0x2001, 0x0088, 0x080c, 0x2cef, 0x6124, 0xd1cc, 0x11e8, 0xd1dc,\r
-+      0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, 0x080c, 0x1ad3,\r
-+      0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x73e8, 0x2001,\r
-+      0x0080, 0x080c, 0x2cef, 0x709b, 0x0028, 0x0058, 0x709b, 0x001e,\r
-+      0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, 0x709b,\r
-+      0x001f, 0x0005, 0x080c, 0x1ad3, 0x60e3, 0x0001, 0x600c, 0xc0b4,\r
-+      0x600e, 0x080c, 0x73e8, 0x2001, 0x0080, 0x080c, 0x2cef, 0x6124,\r
-+      0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00,\r
-+      0x1158, 0x709b, 0x0028, 0x0040, 0x709b, 0x001e, 0x0028, 0x709b,\r
-+      0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x2001, 0x00a0, 0x080c,\r
-+      0x2cef, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1ad3,\r
-+      0x709b, 0x001e, 0x0010, 0x709b, 0x001d, 0x0005, 0x080c, 0x72b7,\r
-+      0x6124, 0xd1dc, 0x1188, 0x080c, 0x7234, 0x0016, 0x080c, 0x1ad3,\r
-+      0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x709b, 0x001e, 0x0020,\r
-+      0x709b, 0x001f, 0x080c, 0x7234, 0x0005, 0x0006, 0x2001, 0x00a0,\r
-+      0x080c, 0x2cef, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150,\r
-+      0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e, 0x0028, 0x709b,\r
-+      0x001d, 0x0010, 0x709b, 0x0021, 0x0005, 0x080c, 0x72b7, 0x6124,\r
-+      0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e,\r
-+      0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x0006,\r
-+      0x2001, 0x0090, 0x080c, 0x2cef, 0x000e, 0x6124, 0xd1d4, 0x1178,\r
-+      0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x709b, 0x001e,\r
-+      0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, 0x709b,\r
-+      0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061,\r
-+      0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x080c,\r
-+      0x73bc, 0x11d8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01b0, 0xc1b4,\r
-+      0x2102, 0x6027, 0x0200, 0x080c, 0x2c38, 0x6024, 0xd0cc, 0x0148,\r
-+      0x2001, 0x00a0, 0x080c, 0x2cef, 0x080c, 0x76a4, 0x080c, 0x601a,\r
-+      0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x73d6, 0x0150,\r
-+      0x080c, 0x73cd, 0x1138, 0x2001, 0x0001, 0x080c, 0x27ea, 0x080c,\r
-+      0x7394, 0x00a0, 0x080c, 0x72b4, 0x0178, 0x2001, 0x0001, 0x080c,\r
-+      0x27ea, 0x7098, 0x9086, 0x001e, 0x0120, 0x7098, 0x9086, 0x0022,\r
-+      0x1118, 0x709b, 0x0025, 0x0010, 0x709b, 0x0021, 0x012e, 0x00ee,\r
-+      0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x7245, 0x080c,\r
-+      0x85cd, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x7245,\r
-+      0x080c, 0x85c4, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016,\r
-+      0x080c, 0xa273, 0x2071, 0x1800, 0x080c, 0x71e2, 0x001e, 0x00fe,\r
-+      0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,\r
-+      0x00f6, 0x0126, 0x080c, 0xa273, 0x2061, 0x0100, 0x2069, 0x0140,\r
-+      0x2071, 0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x2011,\r
-+      0x0003, 0x080c, 0xa653, 0x2011, 0x0002, 0x080c, 0xa65d, 0x080c,\r
-+      0xa540, 0x080c, 0x8579, 0x0036, 0x901e, 0x080c, 0xa5b6, 0x003e,\r
-+      0x60e3, 0x0000, 0x080c, 0xe9e9, 0x080c, 0xea04, 0x2009, 0x0004,\r
-+      0x080c, 0x2c3e, 0x080c, 0x2b59, 0x2001, 0x1800, 0x2003, 0x0004,\r
-+      0x6027, 0x0008, 0x2011, 0x7245, 0x080c, 0x85cd, 0x080c, 0x73d6,\r
-+      0x0118, 0x9006, 0x080c, 0x2cef, 0x080c, 0x0bae, 0x2001, 0x0001,\r
-+      0x080c, 0x27ea, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e,\r
-+      0x002e, 0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x7252, 0x2071,\r
-+      0x19fa, 0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085,\r
-+      0x0001, 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800,\r
-+      0x9084, 0xfffe, 0x9086, 0x00c0, 0x0170, 0x2001, 0x00c0, 0x080c,\r
-+      0x2cef, 0x0156, 0x20a9, 0x002d, 0x1d04, 0x72c4, 0x2091, 0x6000,\r
-+      0x1f04, 0x72c4, 0x015e, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061,\r
-+      0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x76b3, 0x2001,\r
-+      0x196d, 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2, 0x6886, 0x080c,\r
-+      0x28b2, 0x9006, 0x080c, 0x2cef, 0x080c, 0x5ed9, 0x6027, 0xffff,\r
-+      0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6,\r
-+      0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001,\r
-+      0x197d, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158,\r
-+      0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x7384,\r
-+      0x709b, 0x0022, 0x0040, 0x709b, 0x0021, 0x0028, 0x709b, 0x0023,\r
-+      0x0010, 0x709b, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001,\r
-+      0x0001, 0x080c, 0x28b2, 0x0026, 0x080c, 0xadd2, 0x002e, 0x7000,\r
-+      0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020,\r
-+      0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac,\r
-+      0x0150, 0x012e, 0x015e, 0x080c, 0xd230, 0x0118, 0x9006, 0x080c,\r
-+      0x2d19, 0x0804, 0x7390, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802,\r
-+      0x080c, 0x2c38, 0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c,\r
-+      0x2cef, 0x1f04, 0x732e, 0x080c, 0x7413, 0x012e, 0x015e, 0x080c,\r
-+      0x73cd, 0x01a8, 0x6044, 0x9005, 0x0168, 0x6050, 0x0006, 0x9085,\r
-+      0x0020, 0x6052, 0x080c, 0x7413, 0x9006, 0x8001, 0x1df0, 0x000e,\r
-+      0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x7413, 0x080c,\r
-+      0xd230, 0x0118, 0x9006, 0x080c, 0x2d19, 0x0016, 0x0026, 0x7000,\r
-+      0x908e, 0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x7252, 0x080c,\r
-+      0x858b, 0x002e, 0x001e, 0x080c, 0x840b, 0x7034, 0xc085, 0x7036,\r
-+      0x2001, 0x197d, 0x2003, 0x0004, 0x080c, 0x70af, 0x080c, 0x73cd,\r
-+      0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, 0x76a9,\r
-+      0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061,\r
-+      0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x8422, 0x080c,\r
-+      0x8414, 0x080c, 0x76b3, 0x2001, 0x196d, 0x2003, 0x0000, 0x9006,\r
-+      0x709a, 0x60e2, 0x6886, 0x080c, 0x28b2, 0x9006, 0x080c, 0x2cef,\r
-+      0x6043, 0x0090, 0x6043, 0x0010, 0x6027, 0xffff, 0x602b, 0x182f,\r
-+      0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x197c, 0x2004,\r
-+      0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c, 0x56d3, 0x9084,\r
-+      0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x080c, 0x56d3,\r
-+      0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005, 0x0006, 0x080c,\r
-+      0x56d3, 0x9084, 0x0030, 0x9086, 0x0010, 0x000e, 0x0005, 0x0006,\r
-+      0x080c, 0x56d3, 0x9084, 0x0030, 0x9086, 0x0020, 0x000e, 0x0005,\r
-+      0x0036, 0x0016, 0x2001, 0x180c, 0x2004, 0x908c, 0x0013, 0x0180,\r
-+      0x0020, 0x080c, 0x28d2, 0x900e, 0x0028, 0x080c, 0x696a, 0x1dc8,\r
-+      0x2009, 0x0002, 0x2019, 0x0028, 0x080c, 0x318a, 0x9006, 0x0019,\r
-+      0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130,\r
-+      0x080c, 0xd229, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084, 0xffef,\r
-+      0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c,\r
-+      0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x0016, 0x6138, 0x6050,\r
-+      0x9084, 0xfbff, 0x9085, 0x2000, 0x6052, 0x613a, 0x20a9, 0x0012,\r
-+      0x1d04, 0x7428, 0x2091, 0x6000, 0x1f04, 0x7428, 0x602f, 0x0100,\r
-+      0x602f, 0x0000, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052,\r
-+      0x613a, 0x001e, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a,\r
-+      0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000,\r
-+      0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x28b2, 0x2001, 0x00a0,\r
-+      0x0006, 0x080c, 0xd230, 0x000e, 0x0130, 0x080c, 0x2d0d, 0x9006,\r
-+      0x080c, 0x2d19, 0x0010, 0x080c, 0x2cef, 0x000e, 0x6052, 0x6050,\r
-+      0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2bad,\r
-+      0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,\r
-+      0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,\r
-+      0x1800, 0x6020, 0x9084, 0x0080, 0x0138, 0x2001, 0x180c, 0x200c,\r
-+      0xc1c5, 0x2102, 0x0804, 0x74e8, 0x2001, 0x180c, 0x200c, 0xc1c4,\r
-+      0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x2001,\r
-+      0x0090, 0x080c, 0x2cef, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1518,\r
-+      0x1d04, 0x7495, 0x2091, 0x6000, 0x1f04, 0x7495, 0x2011, 0x0003,\r
-+      0x080c, 0xa653, 0x2011, 0x0002, 0x080c, 0xa65d, 0x080c, 0xa540,\r
-+      0x901e, 0x080c, 0xa5b6, 0x2001, 0x00a0, 0x080c, 0x2cef, 0x080c,\r
-+      0x76a4, 0x080c, 0x601a, 0x080c, 0xd230, 0x0110, 0x080c, 0x0d45,\r
-+      0x9085, 0x0001, 0x0498, 0x86ff, 0x1110, 0x080c, 0x1ad3, 0x60e3,\r
-+      0x0000, 0x2001, 0x196d, 0x2004, 0x080c, 0x28b2, 0x60e2, 0x2001,\r
-+      0x0080, 0x080c, 0x2cef, 0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009,\r
-+      0x1e00, 0x080c, 0x2c38, 0x6024, 0x910c, 0x0138, 0x1d04, 0x74cd,\r
-+      0x2091, 0x6000, 0x1f04, 0x74cd, 0x0808, 0x6028, 0x9085, 0x1e00,\r
-+      0x602a, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886,\r
-+      0x080c, 0xd230, 0x0110, 0x080c, 0x0d45, 0x9006, 0x00ee, 0x00de,\r
-+      0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016,\r
-+      0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071,\r
-+      0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001, 0x020b, 0x2004,\r
-+      0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069, 0x1a79, 0x2d04,\r
-+      0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120,\r
-+      0x6884, 0x9005, 0x1904, 0x755b, 0x2001, 0x0088, 0x080c, 0x2cef,\r
-+      0x9006, 0x60e2, 0x6886, 0x080c, 0x28b2, 0x2069, 0x0200, 0x6804,\r
-+      0x9005, 0x1118, 0x6808, 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff,\r
-+      0x602a, 0x6027, 0x0400, 0x2069, 0x198f, 0x7000, 0x206a, 0x709b,\r
-+      0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x753d, 0x2091,\r
-+      0x6000, 0x1f04, 0x753d, 0x0804, 0x7589, 0x2069, 0x0140, 0x20a9,\r
-+      0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2c38, 0x6024,\r
-+      0x910c, 0x0508, 0x9084, 0x1a00, 0x11f0, 0x1d04, 0x7549, 0x2091,\r
-+      0x6000, 0x1f04, 0x7549, 0x2011, 0x0003, 0x080c, 0xa653, 0x2011,\r
-+      0x0002, 0x080c, 0xa65d, 0x080c, 0xa540, 0x901e, 0x080c, 0xa5b6,\r
-+      0x2001, 0x00a0, 0x080c, 0x2cef, 0x080c, 0x76a4, 0x080c, 0x601a,\r
-+      0x9085, 0x0001, 0x00b0, 0x2001, 0x0080, 0x080c, 0x2cef, 0x2069,\r
-+      0x0140, 0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001,\r
-+      0x0008, 0x6886, 0x2001, 0x196d, 0x2004, 0x080c, 0x28b2, 0x60e2,\r
-+      0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,\r
-+      0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,\r
-+      0x2061, 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, 0x01c8,\r
-+      0x2011, 0x0003, 0x080c, 0xa653, 0x2011, 0x0002, 0x080c, 0xa65d,\r
-+      0x080c, 0xa540, 0x901e, 0x080c, 0xa5b6, 0x2069, 0x0140, 0x2001,\r
-+      0x00a0, 0x080c, 0x2cef, 0x080c, 0x76a4, 0x080c, 0x601a, 0x0804,\r
-+      0x7624, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102,\r
-+      0x080c, 0x723a, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c, 0x2cef,\r
-+      0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808,\r
-+      0x9005, 0x0180, 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027, 0x0200,\r
-+      0x2069, 0x198f, 0x7000, 0x206a, 0x709b, 0x0027, 0x7003, 0x0001,\r
-+      0x0804, 0x7624, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2c38,\r
-+      0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x75e2,\r
-+      0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x8453, 0x00ee,\r
-+      0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19fa, 0x7018,\r
-+      0x00ee, 0x9005, 0x19f8, 0x0500, 0x0026, 0x2011, 0x7252, 0x080c,\r
-+      0x84f3, 0x2011, 0x7245, 0x080c, 0x85cd, 0x002e, 0x2069, 0x0140,\r
-+      0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008,\r
-+      0x6886, 0x2001, 0x196d, 0x2004, 0x080c, 0x28b2, 0x60e2, 0x2001,\r
-+      0x180c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e,\r
-+      0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,\r
-+      0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x080c,\r
-+      0xd229, 0x1904, 0x7692, 0x7130, 0xd184, 0x1170, 0x080c, 0x3319,\r
-+      0x0138, 0xc18d, 0x7132, 0x2011, 0x1848, 0x2214, 0xd2ac, 0x1120,\r
-+      0x7030, 0xd08c, 0x0904, 0x7692, 0x2011, 0x1848, 0x220c, 0xd1a4,\r
-+      0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xe522, 0x0156, 0x00b6,\r
-+      0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080,\r
-+      0x0188, 0x080c, 0x65ff, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009,\r
-+      0x000e, 0x080c, 0xe5ae, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c,\r
-+      0x86dd, 0x001e, 0x8108, 0x1f04, 0x765b, 0x00be, 0x015e, 0x001e,\r
-+      0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c,\r
-+      0x318a, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e,\r
-+      0x080c, 0x65ff, 0x1110, 0x080c, 0x6034, 0x8108, 0x1f04, 0x7688,\r
-+      0x00be, 0x015e, 0x080c, 0x1ad3, 0x080c, 0xadd2, 0x60e3, 0x0000,\r
-+      0x080c, 0x601a, 0x080c, 0x72ee, 0x00ee, 0x00ce, 0x004e, 0x003e,\r
-+      0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x197d, 0x2003, 0x0001,\r
-+      0x0005, 0x2001, 0x197d, 0x2003, 0x0000, 0x0005, 0x2001, 0x197c,\r
-+      0x2003, 0xaaaa, 0x0005, 0x2001, 0x197c, 0x2003, 0x0000, 0x0005,\r
-+      0x2071, 0x18fa, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x1018,\r
-+      0x090c, 0x0dd5, 0xa8ab, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x1018,\r
-+      0x090c, 0x0dd5, 0xa8ab, 0xdcb0, 0x2900, 0x7052, 0xa867, 0x0000,\r
-+      0xa86b, 0x0001, 0xa89f, 0x0000, 0x0005, 0x00e6, 0x2071, 0x0040,\r
-+      0x6848, 0x9005, 0x1118, 0x9085, 0x0001, 0x04b0, 0x6840, 0x9005,\r
-+      0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854, 0x9101, 0x7006,\r
-+      0x9006, 0x7012, 0x7016, 0x6850, 0x7002, 0x6854, 0x7006, 0x6858,\r
-+      0x700a, 0x685c, 0x700e, 0x6840, 0x9005, 0x1110, 0x7012, 0x7016,\r
-+      0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x2001, 0x0019,\r
-+      0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c, 0x918c, 0xfff7,\r
-+      0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x18fa, 0x6807, 0x0001,\r
-+      0x00de, 0x080c, 0x7c90, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156,\r
-+      0x20a9, 0x0006, 0x8003, 0x2011, 0x0100, 0x2214, 0x9296, 0x0008,\r
-+      0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x771a, 0x015e,\r
-+      0x0005, 0x2079, 0x0040, 0x2071, 0x18fa, 0x7004, 0x0002, 0x7739,\r
-+      0x773a, 0x7771, 0x77cc, 0x78dc, 0x7737, 0x7737, 0x7906, 0x080c,\r
-+      0x0dd5, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c,\r
-+      0x7d72, 0xd0a4, 0x01f0, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806,\r
-+      0xa864, 0x9084, 0x00ff, 0x908a, 0x0040, 0x0608, 0x00b8, 0x2001,\r
-+      0x1800, 0x200c, 0x9186, 0x0003, 0x1160, 0x7104, 0x9186, 0x0004,\r
-+      0x0140, 0x9186, 0x0007, 0x0128, 0x9186, 0x0003, 0x19e8, 0x080c,\r
-+      0x77cc, 0x782c, 0xd09c, 0x090c, 0x7c90, 0x0005, 0x9082, 0x005a,\r
-+      0x1218, 0x2100, 0x003b, 0x0c18, 0x080c, 0x7802, 0x0c90, 0x00e3,\r
-+      0x08f0, 0x0005, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802,\r
-+      0x7802, 0x7802, 0x7824, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802,\r
-+      0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802,\r
-+      0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x780e, 0x7802,\r
-+      0x79f7, 0x7802, 0x7802, 0x7802, 0x7824, 0x7802, 0x780e, 0x7a38,\r
-+      0x7a79, 0x7ac0, 0x7ad4, 0x7802, 0x7802, 0x7824, 0x780e, 0x7838,\r
-+      0x7802, 0x78b0, 0x7b7f, 0x7b9a, 0x7802, 0x7824, 0x7802, 0x7838,\r
-+      0x7802, 0x7802, 0x78a6, 0x7b9a, 0x7802, 0x7802, 0x7802, 0x7802,\r
-+      0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x784c, 0x7802, 0x7802,\r
-+      0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7d16,\r
-+      0x7802, 0x7cc0, 0x7802, 0x7cc0, 0x7802, 0x7861, 0x7802, 0x7802,\r
-+      0x7802, 0x7802, 0x7802, 0x7802, 0x2079, 0x0040, 0x7004, 0x9086,\r
-+      0x0003, 0x1198, 0x782c, 0x080c, 0x7cb9, 0xd0a4, 0x0170, 0x7824,\r
-+      0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a,\r
-+      0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7c90, 0x0005,\r
-+      0x7802, 0x780e, 0x79e3, 0x7802, 0x780e, 0x7802, 0x780e, 0x780e,\r
-+      0x7802, 0x780e, 0x79e3, 0x780e, 0x780e, 0x780e, 0x780e, 0x780e,\r
-+      0x7802, 0x780e, 0x79e3, 0x7802, 0x7802, 0x780e, 0x7802, 0x7802,\r
-+      0x7802, 0x780e, 0x00e6, 0x2071, 0x18fa, 0x2009, 0x0400, 0x0071,\r
-+      0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005, 0x2009, 0x2000,\r
-+      0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005, 0x7007, 0x0001,\r
-+      0xa868, 0x9084, 0x00ff, 0x9105, 0xa86a, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x6c81, 0x012e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff,\r
-+      0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7985, 0x7007,\r
-+      0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7985, 0x0005,\r
-+      0xa864, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, 0x7007,\r
-+      0x0001, 0x0804, 0x79a0, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016,\r
-+      0x701a, 0x704b, 0x79a0, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff,\r
-+      0x0904, 0x780a, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x79bc,\r
-+      0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x79bc,\r
-+      0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904,\r
-+      0x780a, 0x7007, 0x0001, 0x2009, 0x1834, 0x210c, 0x81ff, 0x11a8,\r
-+      0xa868, 0x9084, 0x00ff, 0xa86a, 0xa883, 0x0000, 0x080c, 0x62ae,\r
-+      0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0xa87a,\r
-+      0xa982, 0x080c, 0x6c81, 0x012e, 0x0ca0, 0xa994, 0x9186, 0x0071,\r
-+      0x0d38, 0x9186, 0x0064, 0x0d20, 0x9186, 0x007c, 0x0d08, 0x9186,\r
-+      0x0028, 0x09f0, 0x9186, 0x0038, 0x09d8, 0x9186, 0x0078, 0x09c0,\r
-+      0x9186, 0x005f, 0x09a8, 0x9186, 0x0056, 0x0990, 0xa897, 0x4005,\r
-+      0xa89b, 0x0001, 0x2001, 0x0030, 0x900e, 0x08a0, 0xa87c, 0x9084,\r
-+      0x00c0, 0x9086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x7bb1,\r
-+      0x2900, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa860, 0x20e0, 0xa85c,\r
-+      0x9080, 0x0030, 0x2098, 0x7050, 0x2040, 0xa060, 0x20e8, 0xa05c,\r
-+      0x9080, 0x0023, 0x20a0, 0x4003, 0xa888, 0x7012, 0x9082, 0x0401,\r
-+      0x1a04, 0x7812, 0xaab4, 0x928a, 0x0002, 0x1a04, 0x7812, 0x82ff,\r
-+      0x1138, 0xa8b8, 0xa9bc, 0x9105, 0x0118, 0x2001, 0x7943, 0x0018,\r
-+      0x9280, 0x7939, 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, 0x7924,\r
-+      0x080c, 0x1018, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022,\r
-+      0x7054, 0x2060, 0xe000, 0xa866, 0x7050, 0x2040, 0xa95c, 0xe004,\r
-+      0x9100, 0xa076, 0xa860, 0xa072, 0xe008, 0x920a, 0x1210, 0x900e,\r
-+      0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, 0x0108,\r
-+      0x9108, 0xa17a, 0x810b, 0xa17e, 0x080c, 0x10e9, 0xa06c, 0x908e,\r
-+      0x0100, 0x0170, 0x9086, 0x0200, 0x0118, 0x7007, 0x0007, 0x0005,\r
-+      0x7020, 0x2048, 0x080c, 0x1031, 0x7014, 0x2048, 0x0804, 0x7812,\r
-+      0x7020, 0x2048, 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, 0x2048,\r
-+      0xa906, 0x711a, 0x0804, 0x78dc, 0x7014, 0x2048, 0x7007, 0x0001,\r
-+      0xa8b4, 0x9005, 0x1128, 0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9,\r
-+      0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x0904, 0x7bb1, 0x0804,\r
-+      0x7985, 0x793b, 0x793f, 0x0002, 0x001d, 0x0007, 0x0004, 0x000a,\r
-+      0x001b, 0x0005, 0x0006, 0x000a, 0x001d, 0x0005, 0x0004, 0x0076,\r
-+      0x0066, 0xafb8, 0xaebc, 0xa804, 0x2050, 0xb0c0, 0xb0e2, 0xb0bc,\r
-+      0xb0de, 0xb0b8, 0xb0d2, 0xb0b4, 0xb0ce, 0xb6da, 0xb7d6, 0xb0b0,\r
-+      0xb0ca, 0xb0ac, 0xb0c6, 0xb0a8, 0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2,\r
-+      0xb7be, 0xb0a0, 0xb0b2, 0xb09c, 0xb0ae, 0xb098, 0xb0a2, 0xb094,\r
-+      0xb09e, 0xb6aa, 0xb7a6, 0xb090, 0xb09a, 0xb08c, 0xb096, 0xb088,\r
-+      0xb08a, 0xb084, 0xb086, 0xb692, 0xb78e, 0xb080, 0xb082, 0xb07c,\r
-+      0xb07e, 0xb078, 0xb072, 0xb074, 0xb06e, 0xb67a, 0xb776, 0xb004,\r
-+      0x9055, 0x1958, 0x006e, 0x007e, 0x0005, 0x2009, 0x1834, 0x210c,\r
-+      0x81ff, 0x1178, 0x080c, 0x60ae, 0x1108, 0x0005, 0x080c, 0x6ec0,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0xce24, 0x080c, 0x6c81, 0x012e,\r
-+      0x0ca0, 0x080c, 0xd229, 0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70,\r
-+      0x2009, 0x1834, 0x210c, 0x81ff, 0x1188, 0xa888, 0x9005, 0x0188,\r
-+      0xa883, 0x0000, 0x080c, 0x613e, 0x1108, 0x0005, 0xa87a, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x6c81, 0x012e, 0x0cb8, 0x2001, 0x0028,\r
-+      0x0ca8, 0x2001, 0x0000, 0x0c90, 0x2009, 0x1834, 0x210c, 0x81ff,\r
-+      0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883, 0x0000, 0xa87c, 0xd0f4,\r
-+      0x0120, 0x080c, 0x6210, 0x1138, 0x0005, 0x9006, 0xa87a, 0x080c,\r
-+      0x618b, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982,\r
-+      0x080c, 0x6c81, 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98,\r
-+      0x2001, 0x0000, 0x0c80, 0x7018, 0xa802, 0x2908, 0x2048, 0xa906,\r
-+      0x711a, 0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0003, 0x0030,\r
-+      0x7014, 0x2048, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6,\r
-+      0x7007, 0x0001, 0xa974, 0xa878, 0x9084, 0x00ff, 0x9096, 0x0004,\r
-+      0x0540, 0x20a9, 0x0001, 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9,\r
-+      0x0800, 0x9096, 0x0002, 0x0160, 0x9005, 0x11d8, 0xa974, 0x080c,\r
-+      0x65ff, 0x11b8, 0x0066, 0xae80, 0x080c, 0x670f, 0x006e, 0x0088,\r
-+      0x0046, 0x2011, 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6,\r
-+      0x080c, 0x65ff, 0x1110, 0x080c, 0x680f, 0x8108, 0x1f04, 0x7a20,\r
-+      0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c, 0x1031, 0x00be, 0x0005,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x6c81, 0x012e, 0x00be, 0x0005,\r
-+      0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x696e, 0x0580,\r
-+      0x2061, 0x1a71, 0x6100, 0xd184, 0x0178, 0xa888, 0x9084, 0x00ff,\r
-+      0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0x9005, 0x1538, 0x6003,\r
-+      0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001, 0xa890, 0x9005,\r
-+      0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0xa888, 0x9084, 0x00ff,\r
-+      0x0178, 0x6006, 0xa888, 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a,\r
-+      0xa888, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, 0x7c7a,\r
-+      0x012e, 0x0804, 0x7c74, 0x012e, 0x0804, 0x7c6e, 0x012e, 0x0804,\r
-+      0x7c71, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x696e,\r
-+      0x05e0, 0x2061, 0x1a71, 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308,\r
-+      0xd08c, 0x1530, 0xac78, 0x9484, 0x0003, 0x0170, 0xa988, 0x918c,\r
-+      0x00ff, 0x8001, 0x1120, 0x2100, 0x9210, 0x0620, 0x0028, 0x8001,\r
-+      0x1508, 0x2100, 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188, 0xa988,\r
-+      0x810f, 0x918c, 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100, 0x9318,\r
-+      0x0288, 0x0030, 0x9082, 0x0004, 0x1168, 0x2100, 0x931a, 0x0250,\r
-+      0xa890, 0x9005, 0x0110, 0x8000, 0x6016, 0x6206, 0x630a, 0x012e,\r
-+      0x0804, 0x7c7a, 0x012e, 0x0804, 0x7c77, 0x012e, 0x0804, 0x7c74,\r
-+      0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1a71, 0x6300,\r
-+      0xd38c, 0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804,\r
-+      0x7c88, 0x012e, 0x0804, 0x7c77, 0x00b6, 0x0126, 0x00c6, 0x2091,\r
-+      0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac, 0x0148, 0x00c6, 0x2061,\r
-+      0x1a71, 0x6000, 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa888,\r
-+      0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598, 0x2001, 0x1834, 0x2004,\r
-+      0x9005, 0x0118, 0x080c, 0xae92, 0x0068, 0x6017, 0xf400, 0x605b,\r
-+      0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980, 0x615a, 0x2009, 0x0041,\r
-+      0x080c, 0xaedc, 0xa988, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138,\r
-+      0x0026, 0x900e, 0x2011, 0xfdff, 0x080c, 0x86dd, 0x002e, 0xa87c,\r
-+      0xd0c4, 0x0148, 0x2061, 0x1a71, 0x6000, 0xd08c, 0x1120, 0x6008,\r
-+      0x8000, 0x0208, 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x7c7a,\r
-+      0x00ce, 0x012e, 0x00be, 0x0804, 0x7c74, 0xa984, 0x9186, 0x002e,\r
-+      0x0d30, 0x9186, 0x002d, 0x0d18, 0x9186, 0x0045, 0x0510, 0x9186,\r
-+      0x002a, 0x1130, 0x2001, 0x180c, 0x200c, 0xc194, 0x2102, 0x08b8,\r
-+      0x9186, 0x0020, 0x0158, 0x9186, 0x0029, 0x1d10, 0xa974, 0x080c,\r
-+      0x65ff, 0x1968, 0xb800, 0xc0e4, 0xb802, 0x0848, 0xa88c, 0x9065,\r
-+      0x09b8, 0x6007, 0x0024, 0x2001, 0x1986, 0x2004, 0x601a, 0x0804,\r
-+      0x7b0f, 0xa88c, 0x9065, 0x0960, 0x00e6, 0xa890, 0x9075, 0x2001,\r
-+      0x1834, 0x2004, 0x9005, 0x0150, 0x080c, 0xae92, 0x8eff, 0x0118,\r
-+      0x2e60, 0x080c, 0xae92, 0x00ee, 0x0804, 0x7b0f, 0x6024, 0xc0dc,\r
-+      0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0xa8a0, 0x9005, 0x0130,\r
-+      0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8, 0x6016, 0x6003, 0x0001,\r
-+      0x080c, 0x90f0, 0x080c, 0x968d, 0x00ee, 0x0804, 0x7b0f, 0x2061,\r
-+      0x1a71, 0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x7c88, 0x0126,\r
-+      0x2091, 0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804,\r
-+      0x7c88, 0x012e, 0xa883, 0x0016, 0x0804, 0x7c81, 0xa883, 0x0007,\r
-+      0x0804, 0x7c81, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001,\r
-+      0x1138, 0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x780a, 0x0040,\r
-+      0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7bb1,\r
-+      0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e, 0x2061,\r
-+      0x1800, 0x61d0, 0x81ff, 0x1904, 0x7c33, 0x6130, 0xd194, 0x1904,\r
-+      0x7c5d, 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x0a04, 0x7c27, 0x6068,\r
-+      0x9e02, 0x1a04, 0x7c27, 0x7120, 0x9186, 0x0006, 0x1904, 0x7c19,\r
-+      0x7010, 0x905d, 0x0904, 0x7c33, 0xb800, 0xd0e4, 0x1904, 0x7c57,\r
-+      0x2061, 0x1a71, 0x6100, 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0,\r
-+      0x7024, 0xd0dc, 0x1904, 0x7c60, 0xa883, 0x0000, 0xa803, 0x0000,\r
-+      0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa87c, 0xd0f4, 0x1904,\r
-+      0x7c63, 0x080c, 0x56cf, 0xd09c, 0x1118, 0xa87c, 0xc0cc, 0xa87e,\r
-+      0x2e60, 0x080c, 0x85fd, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048,\r
-+      0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa87c, 0xd0f4, 0x1904,\r
-+      0x7c63, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa883,\r
-+      0x0006, 0x00be, 0x0804, 0x7c81, 0xd184, 0x0db8, 0xd1c4, 0x1190,\r
-+      0x00a0, 0xa974, 0x080c, 0x65ff, 0x15d0, 0xb800, 0xd0e4, 0x15b8,\r
-+      0x7120, 0x9186, 0x0007, 0x1118, 0xa883, 0x0002, 0x0490, 0xa883,\r
-+      0x0008, 0x0478, 0xa883, 0x000e, 0x0460, 0xa883, 0x0017, 0x0448,\r
-+      0xa883, 0x0035, 0x0430, 0x080c, 0x56d3, 0xd0fc, 0x01e8, 0xa878,\r
-+      0x2070, 0x9e82, 0x1cd0, 0x02c0, 0x6068, 0x9e02, 0x12a8, 0x7120,\r
-+      0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc,\r
-+      0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x7bbd,\r
-+      0x7003, 0x0002, 0x0804, 0x7bbd, 0xa883, 0x0028, 0x0010, 0xa883,\r
-+      0x0029, 0x012e, 0x00ee, 0x00be, 0x0420, 0xa883, 0x002a, 0x0cc8,\r
-+      0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014,\r
-+      0x080c, 0xe134, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2009, 0x003e,\r
-+      0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028, 0x2009,\r
-+      0x0016, 0x0010, 0x2009, 0x0001, 0xa884, 0x9084, 0xff00, 0x9105,\r
-+      0xa886, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81, 0x012e, 0x0005,\r
-+      0x080c, 0x1031, 0x0005, 0x00d6, 0x080c, 0x85f4, 0x00de, 0x0005,\r
-+      0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040, 0x702c,\r
-+      0xd084, 0x01d8, 0x908c, 0x0780, 0x190c, 0x7d72, 0xd09c, 0x11a8,\r
-+      0x2071, 0x1800, 0x70c0, 0x90ea, 0x0020, 0x0278, 0x8001, 0x70c2,\r
-+      0x702c, 0x2048, 0xa800, 0x702e, 0x9006, 0xa802, 0xa806, 0x2071,\r
-+      0x0040, 0x2900, 0x7022, 0x702c, 0x0c28, 0x012e, 0x00ee, 0x00de,\r
-+      0x0005, 0x0006, 0x9084, 0x0780, 0x190c, 0x7d72, 0x000e, 0x0005,\r
-+      0xa898, 0x9084, 0x0003, 0x05a8, 0x080c, 0xae0b, 0x05d8, 0x2900,\r
-+      0x6016, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0035, 0x1138, 0x6008,\r
-+      0xc0fd, 0x600a, 0x2001, 0x196b, 0x2004, 0x0098, 0xa8a0, 0x9084,\r
-+      0x00ff, 0xa99c, 0x918c, 0xff00, 0x9105, 0xa99c, 0x918c, 0x00ff,\r
-+      0x080c, 0x283e, 0x1540, 0x00b6, 0x080c, 0x65ff, 0x2b00, 0x00be,\r
-+      0x1510, 0x6012, 0x6023, 0x0001, 0x2009, 0x0040, 0xa864, 0x9084,\r
-+      0x00ff, 0x9086, 0x0035, 0x0110, 0x2009, 0x0041, 0x080c, 0xaedc,\r
-+      0x0005, 0xa87b, 0x0101, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81,\r
-+      0x012e, 0x0005, 0xa87b, 0x002c, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x6c81, 0x012e, 0x0005, 0xa87b, 0x0028, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x6c81, 0x012e, 0x080c, 0xae61, 0x0005, 0x00d6, 0x00c6,\r
-+      0x0036, 0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa74, 0x9282,\r
-+      0x0004, 0x1a04, 0x7d63, 0xa97c, 0x9188, 0x1000, 0x2104, 0x905d,\r
-+      0xb804, 0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084,\r
-+      0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c, 0xae0b, 0x1118, 0x080c,\r
-+      0xaeaf, 0x05a8, 0x6212, 0xa874, 0x0002, 0x7d41, 0x7d46, 0x7d49,\r
-+      0x7d4f, 0x2019, 0x0002, 0x080c, 0xe522, 0x0060, 0x080c, 0xe4be,\r
-+      0x0048, 0x2019, 0x0002, 0xa980, 0x080c, 0xe4d9, 0x0018, 0xa980,\r
-+      0x080c, 0xe4be, 0x080c, 0xae61, 0xa887, 0x0000, 0x0126, 0x2091,\r
-+      0x8000, 0x080c, 0x6c81, 0x012e, 0x00be, 0x001e, 0x002e, 0x003e,\r
-+      0x00ce, 0x00de, 0x0005, 0xa887, 0x0006, 0x0c80, 0xa887, 0x0002,\r
-+      0x0c68, 0xa887, 0x0005, 0x0c50, 0xa887, 0x0004, 0x0c38, 0xa887,\r
-+      0x0007, 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7d74, 0x0006, 0x0016,\r
-+      0x2001, 0x8003, 0x0006, 0x0804, 0x0dde, 0x2001, 0x1834, 0x2004,\r
-+      0x9005, 0x0005, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200,\r
-+      0x200c, 0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec,\r
-+      0x1120, 0x080c, 0x157d, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003,\r
-+      0x0020, 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904,\r
-+      0x7df4, 0x68c0, 0x90aa, 0x0005, 0x0a04, 0x840b, 0x7d44, 0x7c40,\r
-+      0x9584, 0x00f6, 0x1510, 0x9484, 0x7000, 0x0140, 0x908a, 0x2000,\r
-+      0x1260, 0x9584, 0x0700, 0x8007, 0x0804, 0x7dfb, 0x7000, 0x9084,\r
-+      0xff00, 0x9086, 0x8100, 0x0da8, 0x00b0, 0x9484, 0x0fff, 0x1130,\r
-+      0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xe9c1,\r
-+      0x080c, 0x8300, 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118,\r
-+      0x080c, 0x835e, 0x19c0, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c,\r
-+      0x7e56, 0x080c, 0x2337, 0x005e, 0x004e, 0x0020, 0x080c, 0xe9c1,\r
-+      0x7817, 0x0140, 0x080c, 0x73bc, 0x0168, 0x2001, 0x0111, 0x2004,\r
-+      0xd08c, 0x0140, 0x6893, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008,\r
-+      0x2003, 0x0000, 0x080c, 0x7e37, 0x2001, 0x19f0, 0x2004, 0x9005,\r
-+      0x090c, 0x968d, 0x0005, 0x0002, 0x7e0d, 0x8122, 0x7e04, 0x7e04,\r
-+      0x7e04, 0x7e04, 0x7e04, 0x7e04, 0x7817, 0x0140, 0x2001, 0x19f0,\r
-+      0x2004, 0x9005, 0x090c, 0x968d, 0x0005, 0x7000, 0x908c, 0xff00,\r
-+      0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x6892, 0x9286, 0x2000,\r
-+      0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x5730, 0x0070,\r
-+      0x080c, 0x7e76, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x805d,\r
-+      0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x8230, 0x7817, 0x0140,\r
-+      0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x968d, 0x0005, 0x2001,\r
-+      0x1810, 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, 0x9086,\r
-+      0x0003, 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c,\r
-+      0x4b04, 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, 0x00f6,\r
-+      0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, 0x0046,\r
-+      0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, 0xffff,\r
-+      0x2001, 0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, 0x2004,\r
-+      0x9086, 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, 0x4b04,\r
-+      0x002e, 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, 0x00c6,\r
-+      0x7010, 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, 0x9096,\r
-+      0x0023, 0x1904, 0x802e, 0x9186, 0x0023, 0x15c0, 0x080c, 0x82c5,\r
-+      0x0904, 0x802e, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186, 0x0004,\r
-+      0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904, 0x802e,\r
-+      0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009, 0x0015,\r
-+      0x080c, 0xaedc, 0x0804, 0x802e, 0x908e, 0x0214, 0x0118, 0x908e,\r
-+      0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0xaedc, 0x0804, 0x802e,\r
-+      0x908e, 0x0100, 0x1904, 0x802e, 0x7034, 0x9005, 0x1904, 0x802e,\r
-+      0x2009, 0x0016, 0x080c, 0xaedc, 0x0804, 0x802e, 0x9186, 0x0022,\r
-+      0x1904, 0x802e, 0x7030, 0x908e, 0x0300, 0x1580, 0x68dc, 0xd0a4,\r
-+      0x0528, 0xc0b5, 0x68de, 0x7100, 0x918c, 0x00ff, 0x697e, 0x7004,\r
-+      0x6882, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0x9084,\r
-+      0x00ff, 0x0016, 0x2008, 0x080c, 0x2887, 0x7932, 0x7936, 0x001e,\r
-+      0x000e, 0x00fe, 0x080c, 0x283e, 0x695e, 0x703c, 0x00e6, 0x2071,\r
-+      0x0140, 0x7086, 0x2071, 0x1800, 0x70b6, 0x00ee, 0x7034, 0x9005,\r
-+      0x1904, 0x802e, 0x2009, 0x0017, 0x0804, 0x7fde, 0x908e, 0x0400,\r
-+      0x1190, 0x7034, 0x9005, 0x1904, 0x802e, 0x080c, 0x73bc, 0x0120,\r
-+      0x2009, 0x001d, 0x0804, 0x7fde, 0x68dc, 0xc0a5, 0x68de, 0x2009,\r
-+      0x0030, 0x0804, 0x7fde, 0x908e, 0x0500, 0x1140, 0x7034, 0x9005,\r
-+      0x1904, 0x802e, 0x2009, 0x0018, 0x0804, 0x7fde, 0x908e, 0x2010,\r
-+      0x1120, 0x2009, 0x0019, 0x0804, 0x7fde, 0x908e, 0x2110, 0x1120,\r
-+      0x2009, 0x001a, 0x0804, 0x7fde, 0x908e, 0x5200, 0x1140, 0x7034,\r
-+      0x9005, 0x1904, 0x802e, 0x2009, 0x001b, 0x0804, 0x7fde, 0x908e,\r
-+      0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x802e, 0x2009, 0x001c,\r
-+      0x0804, 0x7fde, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804,\r
-+      0x7fde, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, 0x802e,\r
-+      0x2009, 0x0024, 0x0804, 0x7fde, 0x908c, 0xff00, 0x918e, 0x2400,\r
-+      0x1170, 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, 0x0904,\r
-+      0x7fde, 0x080c, 0xd905, 0x1904, 0x802e, 0x0804, 0x7fdc, 0x908c,\r
-+      0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x7fde,\r
-+      0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7fde, 0x908e,\r
-+      0x6104, 0x1530, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, 0x2204,\r
-+      0x9082, 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c,\r
-+      0x8108, 0x0046, 0x2124, 0x080c, 0x4b04, 0x004e, 0x8108, 0x0f04,\r
-+      0x7f92, 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, 0x2009,\r
-+      0x0260, 0x0c58, 0x202b, 0x0000, 0x2009, 0x0023, 0x0804, 0x7fde,\r
-+      0x908e, 0x6000, 0x1120, 0x2009, 0x003f, 0x0804, 0x7fde, 0x908e,\r
-+      0x5400, 0x1138, 0x080c, 0x83bb, 0x1904, 0x802e, 0x2009, 0x0046,\r
-+      0x04a8, 0x908e, 0x5500, 0x1148, 0x080c, 0x83e3, 0x1118, 0x2009,\r
-+      0x0041, 0x0460, 0x2009, 0x0042, 0x0448, 0x908e, 0x7800, 0x1118,\r
-+      0x2009, 0x0045, 0x0418, 0x908e, 0x1000, 0x1118, 0x2009, 0x004e,\r
-+      0x00e8, 0x908e, 0x6300, 0x1118, 0x2009, 0x004a, 0x00b8, 0x908c,\r
-+      0xff00, 0x918e, 0x5600, 0x1118, 0x2009, 0x004f, 0x0078, 0x908c,\r
-+      0xff00, 0x918e, 0x5700, 0x1118, 0x2009, 0x0050, 0x0038, 0x2009,\r
-+      0x001d, 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016, 0x2011,\r
-+      0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x283e, 0x1904, 0x8031,\r
-+      0x080c, 0x659e, 0x1904, 0x8031, 0xbe12, 0xbd16, 0x001e, 0x0016,\r
-+      0x080c, 0x73bc, 0x01c0, 0x68dc, 0xd08c, 0x1148, 0x7000, 0x9084,\r
-+      0x00ff, 0x1188, 0x7004, 0x9084, 0xff00, 0x1168, 0x0040, 0x687c,\r
-+      0x9606, 0x1148, 0x6880, 0x9506, 0x9084, 0xff00, 0x1120, 0x9584,\r
-+      0x00ff, 0xb8c2, 0x0080, 0xb8c0, 0x9005, 0x1168, 0x9186, 0x0046,\r
-+      0x1150, 0x687c, 0x9606, 0x1138, 0x6880, 0x9506, 0x9084, 0xff00,\r
-+      0x1110, 0x001e, 0x0098, 0x080c, 0xae0b, 0x01a8, 0x2b08, 0x6112,\r
-+      0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c, 0x1110,\r
-+      0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0xaedc, 0x00ce, 0x00be,\r
-+      0x0005, 0x001e, 0x0cd8, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120,\r
-+      0x2011, 0x8049, 0x080c, 0x4b04, 0x080c, 0xaeaf, 0x0d90, 0x2b08,\r
-+      0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x0016, 0x9186,\r
-+      0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007, 0x0009, 0x6017,\r
-+      0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000, 0x602f, 0x0009,\r
-+      0x6003, 0x0001, 0x080c, 0x9138, 0x08a0, 0x080c, 0x32e3, 0x1140,\r
-+      0x7010, 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, 0x1108, 0x0009,\r
-+      0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, 0xff00, 0x810f,\r
-+      0x9186, 0x0033, 0x11e8, 0x080c, 0x82c5, 0x0904, 0x80ba, 0x7124,\r
-+      0x610a, 0x7030, 0x908e, 0x0200, 0x1140, 0x7034, 0x9005, 0x15d0,\r
-+      0x2009, 0x0015, 0x080c, 0xaedc, 0x04a8, 0x908e, 0x0100, 0x1590,\r
-+      0x7034, 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0xaedc, 0x0450,\r
-+      0x9186, 0x0032, 0x1538, 0x7030, 0x908e, 0x1400, 0x1518, 0x2009,\r
-+      0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,\r
-+      0x283e, 0x11b8, 0x080c, 0x659e, 0x11a0, 0xbe12, 0xbd16, 0x080c,\r
-+      0xae0b, 0x0178, 0x2b08, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0004,\r
-+      0x7120, 0x610a, 0x001e, 0x080c, 0xaedc, 0x080c, 0x968d, 0x0010,\r
-+      0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, 0x00b6, 0x0046,\r
-+      0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, 0x11b8, 0x9592,\r
-+      0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804,\r
-+      0x811c, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804, 0x811c,\r
-+      0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011, 0x0000,\r
-+      0x2019, 0x1837, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9, 0x0800,\r
-+      0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x077f, 0x2071,\r
-+      0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, 0x11d0, 0x9496,\r
-+      0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, 0x2600, 0x9706,\r
-+      0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, 0x9745, 0x1148,\r
-+      0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, 0x94c6, 0x0080,\r
-+      0x1d20, 0x8420, 0x8e70, 0x1f04, 0x80f1, 0x82ff, 0x1118, 0x9085,\r
-+      0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee, 0x004e,\r
-+      0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184, 0x000f,\r
-+      0x0002, 0x8139, 0x8139, 0x8139, 0x82d7, 0x8139, 0x8142, 0x816d,\r
-+      0x81fb, 0x8139, 0x8139, 0x8139, 0x8139, 0x8139, 0x8139, 0x8139,\r
-+      0x8139, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c,\r
-+      0x968d, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120, 0x2160,\r
-+      0x9c8c, 0x0007, 0x11c0, 0x9c8a, 0x1cd0, 0x02a8, 0x6868, 0x9c02,\r
-+      0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106,\r
-+      0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a, 0x2009,\r
-+      0x0046, 0x080c, 0xaedc, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004,\r
-+      0x9005, 0x090c, 0x968d, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x9484,\r
-+      0x0fff, 0x0904, 0x81d1, 0x7110, 0xd1bc, 0x1904, 0x81d1, 0x7108,\r
-+      0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x15b0,\r
-+      0x81ff, 0x15a0, 0x9080, 0x3325, 0x200d, 0x918c, 0xff00, 0x810f,\r
-+      0x2001, 0x0080, 0x9106, 0x0904, 0x81d1, 0x080c, 0x659e, 0x1904,\r
-+      0x81d1, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15d8, 0xba04, 0x9294,\r
-+      0xff00, 0x9286, 0x0600, 0x11a0, 0x080c, 0xae0b, 0x05e8, 0x2b08,\r
-+      0x7028, 0x604a, 0x702c, 0x6046, 0x6112, 0x6023, 0x0006, 0x7120,\r
-+      0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xdb63, 0x0408,\r
-+      0x080c, 0x6972, 0x1138, 0xb807, 0x0606, 0x0c30, 0x190c, 0x80be,\r
-+      0x11c0, 0x0898, 0x080c, 0xae0b, 0x2b08, 0x0198, 0x6112, 0x6023,\r
-+      0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, 0x0005,\r
-+      0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9138, 0x080c,\r
-+      0x968d, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c,\r
-+      0x968d, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0ec,\r
-+      0x0120, 0x2011, 0x8049, 0x080c, 0x4b04, 0x080c, 0xaeaf, 0x0d48,\r
-+      0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6156,\r
-+      0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90f0,\r
-+      0x080c, 0x968d, 0x08b0, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7020,\r
-+      0x2060, 0x9c84, 0x0007, 0x11c0, 0x9c82, 0x1cd0, 0x02a8, 0x6868,\r
-+      0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910,\r
-+      0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a,\r
-+      0x2009, 0x0045, 0x080c, 0xaedc, 0x7817, 0x0140, 0x2001, 0x19f0,\r
-+      0x2004, 0x9005, 0x090c, 0x968d, 0x00be, 0x0005, 0x6120, 0x9186,\r
-+      0x0002, 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005,\r
-+      0x080c, 0x32e3, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086,\r
-+      0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b,\r
-+      0x0005, 0x8247, 0x8248, 0x8247, 0x8247, 0x82a7, 0x82b6, 0x0005,\r
-+      0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x82a5,\r
-+      0x700c, 0x7108, 0x080c, 0x283e, 0x1904, 0x82a5, 0x080c, 0x659e,\r
-+      0x1904, 0x82a5, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c,\r
-+      0x6972, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x82c5,\r
-+      0x00ce, 0x05d8, 0x080c, 0xae0b, 0x2b08, 0x05b8, 0x6112, 0x080c,\r
-+      0xcfaa, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c,\r
-+      0xaedc, 0x0458, 0x080c, 0x6972, 0x0148, 0x9086, 0x0004, 0x0130,\r
-+      0x080c, 0x697a, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0xae0b,\r
-+      0x2b08, 0x01d8, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0005, 0x7120,\r
-+      0x610a, 0x2009, 0x0088, 0x080c, 0xaedc, 0x0078, 0x080c, 0xae0b,\r
-+      0x2b08, 0x0158, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0004, 0x7120,\r
-+      0x610a, 0x2009, 0x0001, 0x080c, 0xaedc, 0x00be, 0x0005, 0x7110,\r
-+      0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x8226, 0x1130, 0x7124,\r
-+      0x610a, 0x2009, 0x0089, 0x080c, 0xaedc, 0x0005, 0x7110, 0xd1bc,\r
-+      0x0158, 0x0059, 0x0148, 0x080c, 0x8226, 0x1130, 0x7124, 0x610a,\r
-+      0x2009, 0x008a, 0x080c, 0xaedc, 0x0005, 0x7020, 0x2060, 0x9c84,\r
-+      0x0007, 0x1158, 0x9c82, 0x1cd0, 0x0240, 0x2001, 0x181a, 0x2004,\r
-+      0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6,\r
-+      0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0007, 0x11b0,\r
-+      0x9c82, 0x1cd0, 0x0298, 0x6868, 0x9c02, 0x1280, 0x7008, 0x9084,\r
-+      0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914,\r
-+      0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0xaedc, 0x7817, 0x0140,\r
-+      0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x968d, 0x00be, 0x0005,\r
-+      0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049, 0x0005,\r
-+      0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009, 0x0005,\r
-+      0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086, 0xc000,\r
-+      0x05d0, 0x080c, 0xae0b, 0x05b8, 0x0066, 0x00c6, 0x0046, 0x2011,\r
-+      0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x283e, 0x15a0, 0x080c,\r
-+      0x659e, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce, 0x6012,\r
-+      0x080c, 0xcfaa, 0x080c, 0x0fff, 0x0510, 0x2900, 0x605a, 0x9006,\r
-+      0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b, 0x20a9, 0x000e,\r
-+      0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003, 0x006e,\r
-+      0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001, 0x080c,\r
-+      0x9138, 0x080c, 0x968d, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c,\r
-+      0xae61, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000,\r
-+      0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904,\r
-+      0x83b5, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005,\r
-+      0x1904, 0x83b7, 0x7030, 0x908e, 0x0400, 0x0904, 0x83b7, 0x908e,\r
-+      0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8,\r
-+      0x2009, 0x1837, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c,\r
-+      0x6930, 0x0558, 0x68b0, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff,\r
-+      0x9106, 0x1518, 0x6880, 0x69b0, 0x918c, 0xff00, 0x9105, 0x7104,\r
-+      0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4, 0x11a8,\r
-+      0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e, 0x5000,\r
-+      0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x82c5, 0x0128,\r
-+      0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085,\r
-+      0x0001, 0x00ce, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038,\r
-+      0x2020, 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004,\r
-+      0x2019, 0x1805, 0x2011, 0x027a, 0x080c, 0xbe09, 0x1178, 0xd48c,\r
-+      0x0148, 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x027e, 0x080c,\r
-+      0xbe09, 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e,\r
-+      0x004e, 0x015e, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038,\r
-+      0x2020, 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004,\r
-+      0x2019, 0x1805, 0x2011, 0x0272, 0x080c, 0xbe09, 0x1178, 0xd48c,\r
-+      0x0148, 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x0276, 0x080c,\r
-+      0xbe09, 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e,\r
-+      0x004e, 0x015e, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5,\r
-+      0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834,\r
-+      0xd084, 0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200, 0x7802,\r
-+      0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036,\r
-+      0x00ee, 0x0005, 0x2071, 0x19fa, 0x7003, 0x0003, 0x700f, 0x0361,\r
-+      0x9006, 0x701a, 0x7072, 0x7012, 0x7017, 0x1cd0, 0x7007, 0x0000,\r
-+      0x7026, 0x702b, 0xa289, 0x7032, 0x7037, 0xa2f7, 0x703f, 0xffff,\r
-+      0x7042, 0x7047, 0x556e, 0x704a, 0x705b, 0x8594, 0x080c, 0x1018,\r
-+      0x090c, 0x0dd5, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100,\r
-+      0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19fa, 0x1d04, 0x84e2, 0x2091,\r
-+      0x6000, 0x700c, 0x8001, 0x700e, 0x1530, 0x2001, 0x013c, 0x2004,\r
-+      0x9005, 0x190c, 0x85d9, 0x2001, 0x1869, 0x2004, 0xd0c4, 0x0158,\r
-+      0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1,\r
-+      0x0000, 0x080c, 0x0dd5, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126,\r
-+      0x2091, 0x8000, 0x7040, 0x900d, 0x0148, 0x8109, 0x7142, 0x1130,\r
-+      0x7044, 0x080f, 0x0018, 0x0126, 0x2091, 0x8000, 0x7024, 0x900d,\r
-+      0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023, 0x0009, 0x8109,\r
-+      0x7126, 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110,\r
-+      0x7028, 0x080f, 0x7030, 0x900d, 0x0180, 0x702c, 0x8001, 0x702e,\r
-+      0x1160, 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0x9184, 0x007f,\r
-+      0x090c, 0xa418, 0x0010, 0x7034, 0x080f, 0x703c, 0x9005, 0x0118,\r
-+      0x0310, 0x8001, 0x703e, 0x704c, 0x900d, 0x0168, 0x7048, 0x8001,\r
-+      0x704a, 0x1148, 0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150,\r
-+      0x714e, 0x7058, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7070,\r
-+      0x900d, 0x0158, 0x706c, 0x8001, 0x706e, 0x1138, 0x706f, 0x0009,\r
-+      0x8109, 0x7172, 0x1110, 0x7074, 0x080f, 0x001e, 0x7008, 0x8001,\r
-+      0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c,\r
-+      0x080f, 0x012e, 0x7004, 0x0002, 0x850a, 0x850b, 0x8527, 0x00e6,\r
-+      0x2071, 0x19fa, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b,\r
-+      0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19fa, 0x701c,\r
-+      0x9206, 0x1120, 0x701a, 0x701e, 0x7072, 0x7076, 0x000e, 0x00ee,\r
-+      0x0005, 0x00e6, 0x2071, 0x19fa, 0xb888, 0x9102, 0x0208, 0xb98a,\r
-+      0x00ee, 0x0005, 0x0005, 0x00b6, 0x7110, 0x080c, 0x65ff, 0x1168,\r
-+      0xb888, 0x8001, 0x0250, 0xb88a, 0x1140, 0x0126, 0x2091, 0x8000,\r
-+      0x0016, 0x080c, 0x968d, 0x001e, 0x012e, 0x8108, 0x9182, 0x0800,\r
-+      0x0218, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005, 0x7014,\r
-+      0x2060, 0x0126, 0x2091, 0x8000, 0x6040, 0x9005, 0x0128, 0x8001,\r
-+      0x6042, 0x1110, 0x080c, 0xce3b, 0x6018, 0x9005, 0x0558, 0x8001,\r
-+      0x601a, 0x1540, 0x6120, 0x9186, 0x0003, 0x0148, 0x9186, 0x0006,\r
-+      0x0130, 0x9186, 0x0009, 0x11e0, 0x611c, 0xd1c4, 0x1100, 0x080c,\r
-+      0xcb35, 0x01b0, 0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280,\r
-+      0x9082, 0x1999, 0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999,\r
-+      0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0xd0e4, 0x0110,\r
-+      0x080c, 0xc833, 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001, 0x181a,\r
-+      0x2004, 0x9102, 0x0220, 0x7017, 0x1cd0, 0x7007, 0x0000, 0x0005,\r
-+      0x00e6, 0x2071, 0x19fa, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee,\r
-+      0x0005, 0x2001, 0x1a03, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071,\r
-+      0x19fa, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x1a06,\r
-+      0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19fa, 0x711a, 0x721e,\r
-+      0x700b, 0x0009, 0x00ee, 0x0005, 0x0086, 0x0026, 0x7054, 0x8000,\r
-+      0x7056, 0x2001, 0x1a08, 0x2044, 0xa06c, 0x9086, 0x0000, 0x0150,\r
-+      0x7068, 0xa09a, 0x7064, 0xa096, 0x7060, 0xa092, 0x705c, 0xa08e,\r
-+      0x080c, 0x10e9, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096,\r
-+      0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c,\r
-+      0x8453, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae,\r
-+      0x009e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19fa, 0x7172,\r
-+      0x7276, 0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071,\r
-+      0x19fa, 0x7074, 0x9206, 0x1110, 0x7072, 0x7076, 0x000e, 0x00ee,\r
-+      0x0005, 0x0016, 0x00c6, 0x2009, 0xfffc, 0x210d, 0x2061, 0x0100,\r
-+      0x60f0, 0x9100, 0x60f3, 0x0000, 0x2009, 0xfffc, 0x200f, 0x1220,\r
-+      0x8108, 0x2105, 0x8000, 0x200f, 0x00ce, 0x001e, 0x0005, 0x00c6,\r
-+      0x2061, 0x1a71, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, 0x8003,\r
-+      0x8003, 0x9080, 0x1a71, 0x2060, 0x0005, 0xa884, 0x908a, 0x199a,\r
-+      0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a71, 0x6014, 0x00ce,\r
-+      0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0,\r
-+      0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0x908c, 0x00c0,\r
-+      0x918e, 0x00c0, 0x0904, 0x8687, 0xd0b4, 0x1168, 0xd0bc, 0x1904,\r
-+      0x8660, 0x2009, 0x0006, 0x080c, 0x86b4, 0x0005, 0x900e, 0x0c60,\r
-+      0x2001, 0x1999, 0x08b0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120,\r
-+      0x918e, 0x0003, 0x1904, 0x86ae, 0x908c, 0x2020, 0x918e, 0x2020,\r
-+      0x01a8, 0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1869, 0x2104, 0xd084,\r
-+      0x1138, 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0xaedc, 0x0005,\r
-+      0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804, 0xaedc, 0x6110, 0x00b6,\r
-+      0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026,\r
-+      0x0c00, 0xc0d4, 0x6026, 0xa890, 0x602e, 0xa88c, 0x6032, 0x08e0,\r
-+      0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904,\r
-+      0x86ae, 0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6,\r
-+      0x2c78, 0x080c, 0x1725, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009,\r
-+      0x0042, 0x080c, 0xaedc, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900,\r
-+      0x00be, 0xd1ac, 0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc,\r
-+      0x0188, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003,\r
-+      0x908e, 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c,\r
-+      0xaedc, 0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043,\r
-+      0x080c, 0xaedc, 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,\r
-+      0xd1ac, 0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004,\r
-+      0x0019, 0x0005, 0x2009, 0x0001, 0x0096, 0x080c, 0xcb35, 0x0518,\r
-+      0x6014, 0x2048, 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188,\r
-+      0xa97c, 0x918c, 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061,\r
-+      0x1a71, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206,\r
-+      0x00ce, 0x080c, 0x6abc, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000,\r
-+      0x190c, 0x85fd, 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061,\r
-+      0x1a71, 0x6000, 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002,\r
-+      0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005,\r
-+      0x0120, 0x8001, 0x680a, 0x9085, 0x0001, 0x0005, 0x2071, 0x1923,\r
-+      0x7003, 0x0006, 0x7007, 0x0000, 0x700f, 0x0000, 0x7013, 0x0001,\r
-+      0x080c, 0x1018, 0x090c, 0x0dd5, 0xa867, 0x0006, 0xa86b, 0x0001,\r
-+      0xa8ab, 0xdcb0, 0xa89f, 0x0000, 0x2900, 0x702e, 0x7033, 0x0000,\r
-+      0x0005, 0x0096, 0x00e6, 0x2071, 0x1923, 0x702c, 0x2048, 0x6a2c,\r
-+      0x721e, 0x6b30, 0x7322, 0x6834, 0x7026, 0xa896, 0x6838, 0x702a,\r
-+      0xa89a, 0x6824, 0x7016, 0x683c, 0x701a, 0x2009, 0x0028, 0x200a,\r
-+      0x9005, 0x0148, 0x900e, 0x9188, 0x000c, 0x8001, 0x1de0, 0x2100,\r
-+      0x9210, 0x1208, 0x8318, 0xaa8e, 0xab92, 0x7010, 0xd084, 0x0178,\r
-+      0xc084, 0x7007, 0x0001, 0x700f, 0x0000, 0x0006, 0x2009, 0x181d,\r
-+      0x2104, 0x9082, 0x0007, 0x2009, 0x1ac8, 0x200a, 0x000e, 0xc095,\r
-+      0x7012, 0x2008, 0x2001, 0x003b, 0x080c, 0x15ee, 0x9006, 0x2071,\r
-+      0x193c, 0x7002, 0x7006, 0x702a, 0x00ee, 0x009e, 0x0005, 0x00e6,\r
-+      0x0126, 0x0156, 0x2091, 0x8000, 0x2071, 0x1800, 0x7154, 0x2001,\r
-+      0x0008, 0x910a, 0x0638, 0x2001, 0x187d, 0x20ac, 0x9006, 0x9080,\r
-+      0x0008, 0x1f04, 0x8767, 0x71c0, 0x9102, 0x02e0, 0x2071, 0x1877,\r
-+      0x20a9, 0x0007, 0x00c6, 0x080c, 0xae0b, 0x6023, 0x0009, 0x6003,\r
-+      0x0004, 0x601f, 0x0101, 0x0089, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x88ed, 0x012e, 0x1f04, 0x8773, 0x9006, 0x00ce, 0x015e, 0x012e,\r
-+      0x00ee, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x00e6, 0x00b6, 0x0096,\r
-+      0x0086, 0x0056, 0x0046, 0x0026, 0x7118, 0x720c, 0x7620, 0x7004,\r
-+      0xd084, 0x1128, 0x2021, 0x0024, 0x2029, 0x0002, 0x0020, 0x2021,\r
-+      0x002c, 0x2029, 0x000a, 0x080c, 0x0fff, 0x090c, 0x0dd5, 0x2900,\r
-+      0x6016, 0x2058, 0xac66, 0x9006, 0xa802, 0xa806, 0xa86a, 0xa87a,\r
-+      0xa8aa, 0xa887, 0x0005, 0xa87f, 0x0020, 0x7008, 0xa89a, 0x7010,\r
-+      0xa89e, 0xae8a, 0xa8af, 0xffff, 0xa8b3, 0x0000, 0x8109, 0x0160,\r
-+      0x080c, 0x0fff, 0x090c, 0x0dd5, 0xad66, 0x2b00, 0xa802, 0x2900,\r
-+      0xb806, 0x2058, 0x8109, 0x1da0, 0x002e, 0x004e, 0x005e, 0x008e,\r
-+      0x009e, 0x00be, 0x00ee, 0x0005, 0x2079, 0x0000, 0x2071, 0x1923,\r
-+      0x7004, 0x004b, 0x700c, 0x0002, 0x87df, 0x87d8, 0x87d8, 0x0005,\r
-+      0x87e9, 0x884a, 0x884a, 0x884a, 0x884b, 0x885c, 0x885c, 0x700c,\r
-+      0x0cba, 0x0126, 0x2091, 0x8000, 0x78a0, 0x79a0, 0x9106, 0x0128,\r
-+      0x78a0, 0x79a0, 0x9106, 0x1904, 0x883d, 0x2001, 0x0005, 0x2004,\r
-+      0xd0bc, 0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8,\r
-+      0x012e, 0x7018, 0x910a, 0x1130, 0x7030, 0x9005, 0x05a8, 0x080c,\r
-+      0x888b, 0x0490, 0x1210, 0x7114, 0x910a, 0x9192, 0x000a, 0x0210,\r
-+      0x2009, 0x000a, 0x2001, 0x1888, 0x2014, 0x2001, 0x1935, 0x2004,\r
-+      0x9100, 0x9202, 0x0e48, 0x080c, 0x89d7, 0x2200, 0x9102, 0x0208,\r
-+      0x2208, 0x0096, 0x702c, 0x2048, 0xa873, 0x0001, 0xa976, 0x080c,\r
-+      0x8ae0, 0x2100, 0xa87e, 0xa86f, 0x0000, 0x009e, 0x0126, 0x2091,\r
-+      0x8000, 0x2009, 0x1a18, 0x2104, 0xc085, 0x200a, 0x700f, 0x0002,\r
-+      0x012e, 0x080c, 0x1108, 0x1de8, 0x0005, 0x2001, 0x0005, 0x2004,\r
-+      0xd0bc, 0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8,\r
-+      0x012e, 0x0005, 0x0005, 0x700c, 0x0002, 0x8850, 0x8853, 0x8852,\r
-+      0x080c, 0x87e7, 0x0005, 0x8001, 0x700e, 0x0096, 0x702c, 0x2048,\r
-+      0xa974, 0x009e, 0x0011, 0x0ca0, 0x0005, 0x0096, 0x702c, 0x2048,\r
-+      0x7018, 0x9100, 0x7214, 0x921a, 0x1130, 0x701c, 0xa88e, 0x7020,\r
-+      0xa892, 0x9006, 0x0068, 0x0006, 0x080c, 0x8ae0, 0x2100, 0xaa8c,\r
-+      0x9210, 0xaa8e, 0x1220, 0xa890, 0x9081, 0x0000, 0xa892, 0x000e,\r
-+      0x009e, 0x2f08, 0x9188, 0x0028, 0x200a, 0x701a, 0x0005, 0x00e6,\r
-+      0x2071, 0x1923, 0x700c, 0x0002, 0x8889, 0x8889, 0x8887, 0x700f,\r
-+      0x0001, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x7030, 0x9005,\r
-+      0x0508, 0x2078, 0x7814, 0x2048, 0xae88, 0x00b6, 0x2059, 0x0000,\r
-+      0x080c, 0x88f6, 0x00be, 0x01b0, 0x00e6, 0x2071, 0x193c, 0x080c,\r
-+      0x893d, 0x00ee, 0x0178, 0x0096, 0x080c, 0x1018, 0x2900, 0x009e,\r
-+      0x0148, 0xa8aa, 0x04b9, 0x0041, 0x2001, 0x1946, 0x2003, 0x0000,\r
-+      0x012e, 0x08c8, 0x012e, 0x0005, 0x00d6, 0x00c6, 0x0086, 0x00a6,\r
-+      0x2940, 0x2650, 0x2600, 0x9005, 0x0180, 0xa864, 0x9084, 0x000f,\r
-+      0x2068, 0x9d88, 0x2090, 0x2165, 0x0056, 0x2029, 0x0000, 0x080c,\r
-+      0x8a65, 0x080c, 0x2048, 0x1dd8, 0x005e, 0x00ae, 0x2001, 0x187f,\r
-+      0x2004, 0xa88a, 0x080c, 0x1725, 0x781f, 0x0101, 0x7813, 0x0000,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x894c, 0x012e, 0x008e, 0x00ce,\r
-+      0x00de, 0x0005, 0x7030, 0x9005, 0x0138, 0x2078, 0x780c, 0x7032,\r
-+      0x2001, 0x1946, 0x2003, 0x0001, 0x0005, 0x00e6, 0x2071, 0x1923,\r
-+      0x7030, 0x600e, 0x2c00, 0x7032, 0x00ee, 0x0005, 0x00d6, 0x00c6,\r
-+      0x0026, 0x9b80, 0x8bbf, 0x2005, 0x906d, 0x090c, 0x0dd5, 0x9b80,\r
-+      0x8bb7, 0x2005, 0x9065, 0x090c, 0x0dd5, 0x6114, 0x2600, 0x9102,\r
-+      0x0248, 0x6828, 0x9102, 0x02f0, 0x9085, 0x0001, 0x002e, 0x00ce,\r
-+      0x00de, 0x0005, 0x6804, 0xd094, 0x0148, 0x6854, 0xd084, 0x1178,\r
-+      0xc085, 0x6856, 0x2011, 0x8026, 0x080c, 0x4b04, 0x684c, 0x0096,\r
-+      0x904d, 0x090c, 0x0dd5, 0xa804, 0x8000, 0xa806, 0x009e, 0x9006,\r
-+      0x2030, 0x0c20, 0x6854, 0xd08c, 0x1d08, 0xc08d, 0x6856, 0x2011,\r
-+      0x8025, 0x080c, 0x4b04, 0x684c, 0x0096, 0x904d, 0x090c, 0x0dd5,\r
-+      0xa800, 0x8000, 0xa802, 0x009e, 0x0888, 0x7000, 0x2019, 0x0008,\r
-+      0x8319, 0x7104, 0x9102, 0x1118, 0x2300, 0x9005, 0x0020, 0x0210,\r
-+      0x9302, 0x0008, 0x8002, 0x0005, 0x00d6, 0x7814, 0x9005, 0x090c,\r
-+      0x0dd5, 0x781c, 0x9084, 0x0101, 0x9086, 0x0101, 0x190c, 0x0dd5,\r
-+      0x2069, 0x193c, 0x6804, 0x9080, 0x193e, 0x2f08, 0x2102, 0x6904,\r
-+      0x8108, 0x9182, 0x0008, 0x0208, 0x900e, 0x6906, 0x9180, 0x193e,\r
-+      0x2003, 0x0000, 0x00de, 0x0005, 0x0096, 0x00c6, 0x2060, 0x6014,\r
-+      0x2048, 0xa8a8, 0x0096, 0x2048, 0x9005, 0x190c, 0x1031, 0x009e,\r
-+      0xa8ab, 0x0000, 0x080c, 0x0fb1, 0x080c, 0xae61, 0x00ce, 0x009e,\r
-+      0x0005, 0x6020, 0x9086, 0x0009, 0x1128, 0x601c, 0xd0c4, 0x0110,\r
-+      0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x6000, 0x9086, 0x0000,\r
-+      0x0178, 0x6010, 0x9005, 0x0150, 0x00b6, 0x2058, 0x080c, 0x8cf2,\r
-+      0x00be, 0x6013, 0x0000, 0x601b, 0x0000, 0x0010, 0x2c00, 0x0861,\r
-+      0x0005, 0x2009, 0x1927, 0x210c, 0xd194, 0x0005, 0x00e6, 0x2071,\r
-+      0x1923, 0x7110, 0xc194, 0xd19c, 0x1118, 0xc185, 0x7007, 0x0000,\r
-+      0x7112, 0x2001, 0x003b, 0x080c, 0x15ee, 0x00ee, 0x0005, 0x0096,\r
-+      0x00d6, 0x9006, 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016,\r
-+      0x702a, 0x7026, 0x702f, 0x0000, 0x080c, 0x8b3f, 0x0170, 0x080c,\r
-+      0x8b74, 0x0158, 0x2900, 0x7002, 0x700a, 0x701a, 0x7013, 0x0001,\r
-+      0x701f, 0x000a, 0x00de, 0x009e, 0x0005, 0x900e, 0x0cd8, 0x00e6,\r
-+      0x0096, 0x0086, 0x00d6, 0x00c6, 0x2071, 0x1930, 0x721c, 0x2100,\r
-+      0x9202, 0x1618, 0x080c, 0x8b74, 0x090c, 0x0dd5, 0x7018, 0x9005,\r
-+      0x1160, 0x2900, 0x7002, 0x700a, 0x701a, 0x9006, 0x7006, 0x700e,\r
-+      0xa806, 0xa802, 0x7012, 0x701e, 0x0038, 0x2040, 0xa806, 0x2900,\r
-+      0xa002, 0x701a, 0xa803, 0x0000, 0x7010, 0x8000, 0x7012, 0x701c,\r
-+      0x9080, 0x000a, 0x701e, 0x721c, 0x08d0, 0x721c, 0x00ce, 0x00de,\r
-+      0x008e, 0x009e, 0x00ee, 0x0005, 0x0096, 0x0156, 0x0136, 0x0146,\r
-+      0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1930, 0x7300, 0x831f,\r
-+      0x831e, 0x831e, 0x9384, 0x003f, 0x20e8, 0x939c, 0xffc0, 0x9398,\r
-+      0x0003, 0x7104, 0x080c, 0x8ae0, 0x810c, 0x2100, 0x9318, 0x8003,\r
-+      0x2228, 0x2021, 0x0078, 0x9402, 0x9532, 0x0208, 0x2028, 0x2500,\r
-+      0x8004, 0x20a8, 0x23a0, 0xa001, 0xa001, 0x4005, 0x2508, 0x080c,\r
-+      0x8ae9, 0x2130, 0x7014, 0x9600, 0x7016, 0x2600, 0x711c, 0x9102,\r
-+      0x701e, 0x7004, 0x9600, 0x2008, 0x9082, 0x000a, 0x1190, 0x7000,\r
-+      0x2048, 0xa800, 0x9005, 0x1148, 0x2009, 0x0001, 0x0026, 0x080c,\r
-+      0x89d7, 0x002e, 0x7000, 0x2048, 0xa800, 0x7002, 0x7007, 0x0000,\r
-+      0x0008, 0x7106, 0x2500, 0x9212, 0x1904, 0x8a16, 0x012e, 0x00ee,\r
-+      0x014e, 0x013e, 0x015e, 0x009e, 0x0005, 0x0016, 0x0026, 0x00e6,\r
-+      0x0126, 0x2091, 0x8000, 0x9580, 0x8bb7, 0x2005, 0x9075, 0x090c,\r
-+      0x0dd5, 0x080c, 0x8abb, 0x012e, 0x9580, 0x8bb3, 0x2005, 0x9075,\r
-+      0x090c, 0x0dd5, 0x0156, 0x0136, 0x01c6, 0x0146, 0x01d6, 0x831f,\r
-+      0x831e, 0x831e, 0x9384, 0x003f, 0x20e0, 0x9384, 0xffc0, 0x9100,\r
-+      0x2098, 0xa860, 0x20e8, 0xa95c, 0x2c05, 0x9100, 0x20a0, 0x20a9,\r
-+      0x0002, 0x4003, 0x2e0c, 0x2d00, 0x0002, 0x8aa5, 0x8aa5, 0x8aa7,\r
-+      0x8aa5, 0x8aa7, 0x8aa5, 0x8aa5, 0x8aa5, 0x8aa5, 0x8aa5, 0x8aad,\r
-+      0x8aa5, 0x8aad, 0x8aa5, 0x8aa5, 0x8aa5, 0x080c, 0x0dd5, 0x4104,\r
-+      0x20a9, 0x0002, 0x4002, 0x4003, 0x0028, 0x20a9, 0x0002, 0x4003,\r
-+      0x4104, 0x4003, 0x01de, 0x014e, 0x01ce, 0x013e, 0x015e, 0x00ee,\r
-+      0x002e, 0x001e, 0x0005, 0x0096, 0x7014, 0x8001, 0x7016, 0x710c,\r
-+      0x2110, 0x00f1, 0x810c, 0x9188, 0x0003, 0x7308, 0x8210, 0x9282,\r
-+      0x000a, 0x1198, 0x7008, 0x2048, 0xa800, 0x9005, 0x0158, 0x0006,\r
-+      0x080c, 0x8b83, 0x009e, 0xa807, 0x0000, 0x2900, 0x700a, 0x7010,\r
-+      0x8001, 0x7012, 0x700f, 0x0000, 0x0008, 0x720e, 0x009e, 0x0005,\r
-+      0x0006, 0x810b, 0x810b, 0x2100, 0x810b, 0x9100, 0x2008, 0x000e,\r
-+      0x0005, 0x0006, 0x0026, 0x2100, 0x9005, 0x0158, 0x9092, 0x000c,\r
-+      0x0240, 0x900e, 0x8108, 0x9082, 0x000c, 0x1de0, 0x002e, 0x000e,\r
-+      0x0005, 0x900e, 0x0cd8, 0x2d00, 0x90b8, 0x0008, 0x690c, 0x6810,\r
-+      0x2019, 0x0001, 0x2031, 0x8b29, 0x9112, 0x0220, 0x0118, 0x8318,\r
-+      0x2208, 0x0cd0, 0x6808, 0x9005, 0x0108, 0x8318, 0x233a, 0x6804,\r
-+      0xd084, 0x2300, 0x2021, 0x0001, 0x1150, 0x9082, 0x0003, 0x0967,\r
-+      0x0a67, 0x8420, 0x9082, 0x0007, 0x0967, 0x0a67, 0x0cd0, 0x9082,\r
-+      0x0002, 0x0967, 0x0a67, 0x8420, 0x9082, 0x0005, 0x0967, 0x0a67,\r
-+      0x0cd0, 0x6c1a, 0x2d00, 0x90b8, 0x0007, 0x00e6, 0x2071, 0x1800,\r
-+      0x7128, 0x6810, 0x2019, 0x0001, 0x910a, 0x0118, 0x0210, 0x8318,\r
-+      0x0cd8, 0x2031, 0x8b3c, 0x0870, 0x6c16, 0x00ee, 0x0005, 0x0096,\r
-+      0x0046, 0x0126, 0x2091, 0x8000, 0x2b00, 0x9080, 0x8bbb, 0x2005,\r
-+      0x9005, 0x090c, 0x0dd5, 0x2004, 0x90a0, 0x000a, 0x080c, 0x1018,\r
-+      0x01d0, 0x2900, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x080c,\r
-+      0x1018, 0x0188, 0x7024, 0xa802, 0xa807, 0x0000, 0x2900, 0x7026,\r
-+      0x94a2, 0x000a, 0x0110, 0x0208, 0x0c90, 0x9085, 0x0001, 0x012e,\r
-+      0x004e, 0x009e, 0x0005, 0x7024, 0x9005, 0x0dc8, 0x2048, 0xac00,\r
-+      0x080c, 0x1031, 0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x7024,\r
-+      0x2048, 0x9005, 0x0130, 0xa800, 0x7026, 0xa803, 0x0000, 0xa807,\r
-+      0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7024, 0xa802,\r
-+      0x2900, 0x7026, 0x012e, 0x0005, 0x0096, 0x9e80, 0x0009, 0x2004,\r
-+      0x9005, 0x0138, 0x2048, 0xa800, 0x0006, 0x080c, 0x1031, 0x000e,\r
-+      0x0cb8, 0x009e, 0x0005, 0x0096, 0x7008, 0x9005, 0x0138, 0x2048,\r
-+      0xa800, 0x0006, 0x080c, 0x1031, 0x000e, 0x0cb8, 0x9006, 0x7002,\r
-+      0x700a, 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x702a, 0x7026,\r
-+      0x702e, 0x009e, 0x0005, 0x1a64, 0x0000, 0x0000, 0x0000, 0x1930,\r
-+      0x0000, 0x0000, 0x0000, 0x1888, 0x0000, 0x0000, 0x0000, 0x1877,\r
-+      0x0000, 0x0000, 0x0000, 0x00e6, 0x00c6, 0x00b6, 0x00a6, 0xa8a8,\r
-+      0x2040, 0x2071, 0x1877, 0x080c, 0x8cdd, 0xa067, 0x0023, 0x6010,\r
-+      0x905d, 0x0904, 0x8cb2, 0xb814, 0xa06e, 0xb910, 0xa172, 0xb9a0,\r
-+      0xa176, 0x2001, 0x0003, 0xa07e, 0xa834, 0xa082, 0xa07b, 0x0000,\r
-+      0xa898, 0x9005, 0x0118, 0xa078, 0xc085, 0xa07a, 0x2858, 0x2031,\r
-+      0x0018, 0xa068, 0x908a, 0x0019, 0x1a0c, 0x0dd5, 0x2020, 0x2050,\r
-+      0x2940, 0xa864, 0x90bc, 0x00ff, 0x908c, 0x000f, 0x91e0, 0x2090,\r
-+      0x2c65, 0x9786, 0x0024, 0x2c05, 0x1590, 0x908a, 0x0036, 0x1a0c,\r
-+      0x0dd5, 0x9082, 0x001b, 0x0002, 0x8c1f, 0x8c1f, 0x8c21, 0x8c1f,\r
-+      0x8c1f, 0x8c1f, 0x8c23, 0x8c1f, 0x8c1f, 0x8c1f, 0x8c25, 0x8c1f,\r
-+      0x8c1f, 0x8c1f, 0x8c27, 0x8c1f, 0x8c1f, 0x8c1f, 0x8c29, 0x8c1f,\r
-+      0x8c1f, 0x8c1f, 0x8c2b, 0x8c1f, 0x8c1f, 0x8c1f, 0x8c2d, 0x080c,\r
-+      0x0dd5, 0xa180, 0x04b8, 0xa190, 0x04a8, 0xa1a0, 0x0498, 0xa1b0,\r
-+      0x0488, 0xa1c0, 0x0478, 0xa1d0, 0x0468, 0xa1e0, 0x0458, 0x908a,\r
-+      0x0034, 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x8c51, 0x8c4f,\r
-+      0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c53, 0x8c4f, 0x8c4f, 0x8c4f,\r
-+      0x8c4f, 0x8c4f, 0x8c55, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f,\r
-+      0x8c57, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c59, 0x080c,\r
-+      0x0dd5, 0xa180, 0x0038, 0xa198, 0x0028, 0xa1b0, 0x0018, 0xa1c8,\r
-+      0x0008, 0xa1e0, 0x2600, 0x0002, 0x8c75, 0x8c77, 0x8c79, 0x8c7b,\r
-+      0x8c7d, 0x8c7f, 0x8c81, 0x8c83, 0x8c85, 0x8c87, 0x8c89, 0x8c8b,\r
-+      0x8c8d, 0x8c8f, 0x8c91, 0x8c93, 0x8c95, 0x8c97, 0x8c99, 0x8c9b,\r
-+      0x8c9d, 0x8c9f, 0x8ca1, 0x8ca3, 0x8ca5, 0x080c, 0x0dd5, 0xb9e2,\r
-+      0x0468, 0xb9de, 0x0458, 0xb9da, 0x0448, 0xb9d6, 0x0438, 0xb9d2,\r
-+      0x0428, 0xb9ce, 0x0418, 0xb9ca, 0x0408, 0xb9c6, 0x00f8, 0xb9c2,\r
-+      0x00e8, 0xb9be, 0x00d8, 0xb9ba, 0x00c8, 0xb9b6, 0x00b8, 0xb9b2,\r
-+      0x00a8, 0xb9ae, 0x0098, 0xb9aa, 0x0088, 0xb9a6, 0x0078, 0xb9a2,\r
-+      0x0068, 0xb99e, 0x0058, 0xb99a, 0x0048, 0xb996, 0x0038, 0xb992,\r
-+      0x0028, 0xb98e, 0x0018, 0xb98a, 0x0008, 0xb986, 0x8631, 0x8421,\r
-+      0x0120, 0x080c, 0x2048, 0x0804, 0x8bf9, 0x00ae, 0x00be, 0x00ce,\r
-+      0x00ee, 0x0005, 0xa86c, 0xa06e, 0xa870, 0xa072, 0xa077, 0x00ff,\r
-+      0x9006, 0x0804, 0x8bdb, 0x0006, 0x0016, 0x00b6, 0x6010, 0x2058,\r
-+      0xb810, 0x9005, 0x01b0, 0x2001, 0x1924, 0x2004, 0x9005, 0x0188,\r
-+      0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046,\r
-+      0xbba0, 0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4b04, 0x004e,\r
-+      0x003e, 0x00be, 0x001e, 0x000e, 0x0005, 0x9016, 0x710c, 0xa834,\r
-+      0x910a, 0xa936, 0x7008, 0x9005, 0x0120, 0x8210, 0x910a, 0x0238,\r
-+      0x0130, 0x7010, 0x8210, 0x910a, 0x0210, 0x0108, 0x0cd8, 0xaa8a,\r
-+      0xa26a, 0x0005, 0x00f6, 0x00d6, 0x0036, 0x2079, 0x0300, 0x781b,\r
-+      0x0200, 0x7818, 0xd094, 0x1dd8, 0x781b, 0x0202, 0xa001, 0xa001,\r
-+      0x7818, 0xd094, 0x1da0, 0xb8ac, 0x9005, 0x01b8, 0x2068, 0x2079,\r
-+      0x0000, 0x2c08, 0x911e, 0x1118, 0x680c, 0xb8ae, 0x0060, 0x9106,\r
-+      0x0140, 0x2d00, 0x2078, 0x680c, 0x9005, 0x090c, 0x0dd5, 0x2068,\r
-+      0x0cb0, 0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x2079, 0x0300, 0x781b,\r
-+      0x0200, 0x003e, 0x00de, 0x00fe, 0x0005, 0x00e6, 0x00d6, 0x0096,\r
-+      0x00c6, 0x0036, 0x0126, 0x2091, 0x8000, 0x0156, 0x20a9, 0x01ff,\r
-+      0x2071, 0x0300, 0x701b, 0x0200, 0x7018, 0xd094, 0x0110, 0x1f04,\r
-+      0x8d32, 0x701b, 0x0202, 0xa001, 0xa001, 0x7018, 0xd094, 0x1d90,\r
-+      0xb8ac, 0x9005, 0x01d0, 0x2060, 0x600c, 0xb8ae, 0x6003, 0x0004,\r
-+      0x601b, 0x0000, 0x6013, 0x0000, 0x601f, 0x0101, 0x6014, 0x2048,\r
-+      0xa88b, 0x0000, 0xa8a8, 0xa8ab, 0x0000, 0x904d, 0x090c, 0x0dd5,\r
-+      0x080c, 0x1031, 0x080c, 0x88ed, 0x0c18, 0x2071, 0x0300, 0x701b,\r
-+      0x0200, 0x015e, 0x012e, 0x003e, 0x00ce, 0x009e, 0x00de, 0x00ee,\r
-+      0x0005, 0x00c6, 0x00b6, 0x0016, 0x0006, 0x0156, 0x080c, 0x283e,\r
-+      0x015e, 0x11b0, 0x080c, 0x659e, 0x190c, 0x0dd5, 0x000e, 0x001e,\r
-+      0xb912, 0xb816, 0x080c, 0xae0b, 0x0140, 0x2b00, 0x6012, 0x6023,\r
-+      0x0001, 0x2009, 0x0001, 0x080c, 0xaedc, 0x00be, 0x00ce, 0x0005,\r
-+      0x000e, 0x001e, 0x0cd0, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c,\r
-+      0x0dd5, 0x0013, 0x006e, 0x0005, 0x8da4, 0x8da4, 0x8da4, 0x8da6,\r
-+      0x8df7, 0x8da4, 0x8da4, 0x8da4, 0x8e5a, 0x8da4, 0x8e97, 0x8da4,\r
-+      0x8da4, 0x8da4, 0x8da4, 0x8da4, 0x080c, 0x0dd5, 0x9182, 0x0040,\r
-+      0x0002, 0x8db9, 0x8db9, 0x8db9, 0x8db9, 0x8db9, 0x8db9, 0x8db9,\r
-+      0x8db9, 0x8db9, 0x8dbb, 0x8dd0, 0x8db9, 0x8db9, 0x8db9, 0x8db9,\r
-+      0x8de3, 0x080c, 0x0dd5, 0x0096, 0x080c, 0x963d, 0x080c, 0x97b9,\r
-+      0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb8bb,\r
-+      0x0500, 0x00be, 0x080c, 0x6a87, 0x080c, 0xae61, 0x009e, 0x0005,\r
-+      0x080c, 0x963d, 0x00d6, 0x6114, 0x080c, 0xcb35, 0x0130, 0x0096,\r
-+      0x6114, 0x2148, 0x080c, 0x6c81, 0x009e, 0x00de, 0x080c, 0xae61,\r
-+      0x080c, 0x97b9, 0x0005, 0x080c, 0x963d, 0x080c, 0x31bf, 0x6114,\r
-+      0x0096, 0x2148, 0x080c, 0xcb35, 0x0120, 0xa87b, 0x0029, 0x080c,\r
-+      0x6c81, 0x009e, 0x080c, 0xae61, 0x080c, 0x97b9, 0x0005, 0x601b,\r
-+      0x0000, 0x9182, 0x0040, 0x0096, 0x0002, 0x8e12, 0x8e12, 0x8e12,\r
-+      0x8e12, 0x8e12, 0x8e12, 0x8e12, 0x8e12, 0x8e14, 0x8e12, 0x8e12,\r
-+      0x8e12, 0x8e56, 0x8e12, 0x8e12, 0x8e12, 0x8e12, 0x8e12, 0x8e12,\r
-+      0x8e1a, 0x8e12, 0x080c, 0x0dd5, 0x6114, 0x2148, 0xa938, 0x918e,\r
-+      0xffff, 0x05e0, 0x00e6, 0x6114, 0x2148, 0x080c, 0x8bc3, 0x0096,\r
-+      0xa8a8, 0x2048, 0x080c, 0x6a1f, 0x009e, 0xa8ab, 0x0000, 0x6010,\r
-+      0x9005, 0x0128, 0x00b6, 0x2058, 0x080c, 0x8cf2, 0x00be, 0xae88,\r
-+      0x00b6, 0x2059, 0x0000, 0x080c, 0x88f6, 0x00be, 0x01e0, 0x2071,\r
-+      0x193c, 0x080c, 0x893d, 0x01b8, 0x9086, 0x0001, 0x1128, 0x2001,\r
-+      0x1946, 0x2004, 0x9005, 0x1178, 0x0096, 0x080c, 0x0fff, 0x2900,\r
-+      0x009e, 0x0148, 0xa8aa, 0x00f6, 0x2c78, 0x080c, 0x88b4, 0x00fe,\r
-+      0x00ee, 0x009e, 0x0005, 0x080c, 0x88ed, 0x0cd0, 0x080c, 0x8f04,\r
-+      0x009e, 0x0005, 0x9182, 0x0040, 0x0096, 0x0002, 0x8e6e, 0x8e6e,\r
-+      0x8e6e, 0x8e70, 0x8e6e, 0x8e6e, 0x8e6e, 0x8e95, 0x8e6e, 0x8e6e,\r
-+      0x8e6e, 0x8e6e, 0x8e6e, 0x8e6e, 0x8e6e, 0x8e6e, 0x080c, 0x0dd5,\r
-+      0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa8ac, 0xa846, 0xa8b0,\r
-+      0xa84a, 0xa837, 0x0000, 0xa83b, 0x0000, 0xa884, 0x9092, 0x199a,\r
-+      0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a,\r
-+      0x2c10, 0x080c, 0x1bad, 0x080c, 0x9155, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x97b9, 0x012e, 0x009e, 0x0005, 0x080c, 0x0dd5, 0x080c,\r
-+      0x963d, 0x080c, 0x97b9, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010,\r
-+      0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6c81, 0x080c,\r
-+      0xae61, 0x009e, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5,\r
-+      0x0096, 0x0013, 0x009e, 0x0005, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec6,\r
-+      0x8ed7, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4,\r
-+      0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4, 0x080c, 0x0dd5, 0x080c, 0xa7cc,\r
-+      0x6114, 0x2148, 0xa87b, 0x0006, 0x6010, 0x00b6, 0x2058, 0xb8bb,\r
-+      0x0500, 0x00be, 0x080c, 0x6c81, 0x080c, 0xae61, 0x0005, 0x0461,\r
-+      0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0096, 0x0013,\r
-+      0x009e, 0x0005, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef4, 0x8f04, 0x8ef2,\r
-+      0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2,\r
-+      0x8ef2, 0x8ef2, 0x080c, 0x0dd5, 0x0036, 0x00e6, 0x2071, 0x19e7,\r
-+      0x703c, 0x9c06, 0x1120, 0x2019, 0x0000, 0x080c, 0xa5b6, 0x080c,\r
-+      0xa7cc, 0x00ee, 0x003e, 0x0005, 0x00f6, 0x00e6, 0x601b, 0x0000,\r
-+      0x6014, 0x2048, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058, 0x080c,\r
-+      0x8cf2, 0x00be, 0x2071, 0x193c, 0x080c, 0x893d, 0x0160, 0x2001,\r
-+      0x187f, 0x2004, 0xa88a, 0x2031, 0x0000, 0x2c78, 0x080c, 0x88b4,\r
-+      0x00ee, 0x00fe, 0x0005, 0x0096, 0xa88b, 0x0000, 0xa8a8, 0x2048,\r
-+      0x080c, 0x1031, 0x009e, 0xa8ab, 0x0000, 0x080c, 0x88ed, 0x0c80,\r
-+      0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
-+      0x0000, 0x187a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
-+      0x0126, 0x2091, 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010, 0x9006,\r
-+      0x8004, 0x2019, 0x0100, 0x231c, 0x93a6, 0x0008, 0x1118, 0x8086,\r
-+      0x818e, 0x0020, 0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x1208, 0x9200,\r
-+      0x1f04, 0x8f49, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e, 0x0020,\r
-+      0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x004e, 0x003e, 0x012e, 0x0005,\r
-+      0x0126, 0x2091, 0x8000, 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005,\r
-+      0x0510, 0x911a, 0x1600, 0x8213, 0x2039, 0x0100, 0x273c, 0x97be,\r
-+      0x0008, 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x0228, 0x911a,\r
-+      0x1220, 0x1f04, 0x8f73, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04,\r
-+      0x8f73, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e,\r
-+      0x007e, 0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8,\r
-+      0x0126, 0x2091, 0x2800, 0x2079, 0x19e7, 0x012e, 0x00d6, 0x2069,\r
-+      0x19e7, 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000,\r
-+      0x2069, 0x0200, 0x080c, 0xab21, 0x0401, 0x080c, 0xab0c, 0x00e9,\r
-+      0x080c, 0xab0f, 0x00d1, 0x080c, 0xab12, 0x00b9, 0x080c, 0xab15,\r
-+      0x00a1, 0x080c, 0xab18, 0x0089, 0x080c, 0xab1b, 0x0071, 0x080c,\r
-+      0xab1e, 0x0059, 0x01de, 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04,\r
-+      0x9085, 0x8001, 0x206a, 0x00de, 0x0005, 0x20a9, 0x0020, 0x20a1,\r
-+      0x0240, 0x2001, 0x0000, 0x4004, 0x0005, 0x00c6, 0x6027, 0x0001,\r
-+      0x7804, 0x9084, 0x0007, 0x0002, 0x8fe6, 0x900a, 0x9049, 0x8fec,\r
-+      0x900a, 0x8fe6, 0x8fe4, 0x8fe4, 0x080c, 0x0dd5, 0x080c, 0x8579,\r
-+      0x080c, 0x968d, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce,\r
-+      0x0005, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x7828, 0x9092, 0x00c8,\r
-+      0x1228, 0x8000, 0x782a, 0x080c, 0x5ec3, 0x0c88, 0x62c0, 0x080c,\r
-+      0xac5d, 0x080c, 0x5e83, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b,\r
-+      0x0000, 0x0c28, 0x080c, 0x8579, 0x6220, 0xd2a4, 0x0160, 0x782b,\r
-+      0x0000, 0x7824, 0x9065, 0x090c, 0x0dd5, 0x2009, 0x0013, 0x080c,\r
-+      0xaedc, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dd5,\r
-+      0x7828, 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c,\r
-+      0x2ba5, 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c,\r
-+      0x0dd5, 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x968d,\r
-+      0x0c00, 0x080c, 0xa24f, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c,\r
-+      0xac5d, 0x080c, 0xe9fe, 0x2009, 0x0014, 0x080c, 0xaedc, 0x00ce,\r
-+      0x0880, 0x2001, 0x1a03, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160,\r
-+      0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0dd5, 0x2009, 0x0013,\r
-+      0x080c, 0xaf2e, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824,\r
-+      0x9005, 0x090c, 0x0dd5, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000,\r
-+      0x782a, 0x00de, 0x00ce, 0x00be, 0x080c, 0x2ba5, 0x02f0, 0x00b6,\r
-+      0x00c6, 0x00d6, 0x781c, 0x905d, 0x090c, 0x0dd5, 0xb800, 0xc0dc,\r
-+      0xb802, 0x7924, 0x2160, 0x080c, 0xae61, 0xb93c, 0x81ff, 0x090c,\r
-+      0x0dd5, 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de,\r
-+      0x00ce, 0x00be, 0x080c, 0x968d, 0x0868, 0x080c, 0xa24f, 0x0850,\r
-+      0x2011, 0x0130, 0x2214, 0x080c, 0xac5d, 0x080c, 0xe9fe, 0x7824,\r
-+      0x9065, 0x2009, 0x0014, 0x080c, 0xaedc, 0x00de, 0x00ce, 0x00be,\r
-+      0x0804, 0x905a, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c,\r
-+      0x1eb4, 0x6024, 0x6027, 0x0002, 0xd0f4, 0x15b8, 0x62c8, 0x60c4,\r
-+      0x9205, 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c,\r
-+      0xaedc, 0x00ce, 0x0005, 0x2011, 0x1a06, 0x2013, 0x0000, 0x0cc8,\r
-+      0x793c, 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x1628, 0x8108,\r
-+      0x7946, 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138,\r
-+      0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x793c,\r
-+      0x9188, 0x0008, 0x210c, 0x918e, 0x0009, 0x0d90, 0x6014, 0x9084,\r
-+      0x1984, 0x9085, 0x0016, 0x6016, 0x08a0, 0x793c, 0x2160, 0x2009,\r
-+      0x004a, 0x080c, 0xaedc, 0x0868, 0x7848, 0xc085, 0x784a, 0x0848,\r
-+      0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000,\r
-+      0x2c08, 0x2061, 0x19e7, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005,\r
-+      0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e,\r
-+      0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x19e7,\r
-+      0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001,\r
-+      0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x968d, 0x00de, 0x0005,\r
-+      0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000,\r
-+      0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069,\r
-+      0x19e7, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, 0x08d8,\r
-+      0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000,\r
-+      0x2c08, 0x2061, 0x19e7, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005,\r
-+      0x0148, 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e,\r
-+      0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000,\r
-+      0x2c08, 0x2061, 0x19e7, 0x6034, 0x9005, 0x0130, 0x9080, 0x0003,\r
-+      0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce, 0x0005,\r
-+      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066,\r
-+      0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071,\r
-+      0x19e7, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904,\r
-+      0x91df, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x91da, 0x87ff,\r
-+      0x0120, 0x6054, 0x9106, 0x1904, 0x91da, 0x703c, 0x9c06, 0x1178,\r
-+      0x0036, 0x2019, 0x0001, 0x080c, 0xa5b6, 0x7033, 0x0000, 0x9006,\r
-+      0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001, 0x7038,\r
-+      0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00,\r
-+      0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c,\r
-+      0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,\r
-+      0x0000, 0x080c, 0xcb35, 0x01c8, 0x6014, 0x2048, 0x6020, 0x9086,\r
-+      0x0003, 0x1590, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016,\r
-+      0x0036, 0x0076, 0x080c, 0xce24, 0x080c, 0xe908, 0x080c, 0x6c81,\r
-+      0x007e, 0x003e, 0x001e, 0x080c, 0xcd1e, 0x080c, 0xae92, 0x00ce,\r
-+      0x0804, 0x917e, 0x2c78, 0x600c, 0x2060, 0x0804, 0x917e, 0x85ff,\r
-+      0x0120, 0x0036, 0x080c, 0x97b9, 0x003e, 0x012e, 0x000e, 0x001e,\r
-+      0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce,\r
-+      0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158,\r
-+      0x0016, 0x0036, 0x0076, 0x080c, 0xe908, 0x080c, 0xe551, 0x007e,\r
-+      0x003e, 0x001e, 0x0890, 0x6020, 0x9086, 0x0009, 0x1168, 0xa87b,\r
-+      0x0006, 0x0016, 0x0036, 0x0076, 0x080c, 0x6c81, 0x080c, 0xae61,\r
-+      0x007e, 0x003e, 0x001e, 0x0818, 0x6020, 0x9086, 0x000a, 0x0904,\r
-+      0x91c4, 0x0804, 0x91c2, 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6,\r
-+      0x00f6, 0x9036, 0x0126, 0x2091, 0x8000, 0x2079, 0x19e7, 0x7838,\r
-+      0x9065, 0x0904, 0x926b, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c,\r
-+      0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0xa5b6, 0x7833,\r
-+      0x0000, 0x901e, 0x7b3e, 0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c,\r
-+      0xcb35, 0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1568,\r
-+      0x3e08, 0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6,\r
-+      0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6040, 0x9005, 0x1180,\r
-+      0x2001, 0x1988, 0x2004, 0x6042, 0x0058, 0xa867, 0x0103, 0xab7a,\r
-+      0xa877, 0x0000, 0x080c, 0x6c75, 0x080c, 0xcd1e, 0x080c, 0xae92,\r
-+      0x000e, 0x0804, 0x9228, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de,\r
-+      0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, 0x0006,\r
-+      0x1118, 0x080c, 0xe551, 0x0c50, 0x6020, 0x9086, 0x0009, 0x1130,\r
-+      0xab7a, 0x080c, 0x6c81, 0x080c, 0xae61, 0x0c10, 0x6020, 0x9086,\r
-+      0x000a, 0x09a8, 0x0890, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099,\r
-+      0x080c, 0x9374, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126,\r
-+      0x2079, 0x19e7, 0x2091, 0x8000, 0x080c, 0x940b, 0x080c, 0x9499,\r
-+      0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6,\r
-+      0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,\r
-+      0x19e7, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9339, 0x6010,\r
-+      0x2058, 0xb8a0, 0x9206, 0x1904, 0x9334, 0x88ff, 0x0120, 0x6054,\r
-+      0x9106, 0x1904, 0x9334, 0x7024, 0x9c06, 0x1558, 0x2069, 0x0100,\r
-+      0x6820, 0xd0a4, 0x1508, 0x080c, 0x8579, 0x080c, 0xa273, 0x68c3,\r
-+      0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,\r
-+      0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef,\r
-+      0x9006, 0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,\r
-+      0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009, 0x630a, 0x0804,\r
-+      0x9334, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36,\r
-+      0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013,\r
-+      0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008,\r
-+      0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xcb35, 0x01e8,\r
-+      0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xcd3b, 0x1118, 0x080c,\r
-+      0xb813, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016,\r
-+      0x0036, 0x0086, 0x080c, 0xce24, 0x080c, 0xe908, 0x080c, 0x6c81,\r
-+      0x008e, 0x003e, 0x001e, 0x080c, 0xcd1e, 0x080c, 0xae92, 0x080c,\r
-+      0xa692, 0x00ce, 0x0804, 0x92b4, 0x2c78, 0x600c, 0x2060, 0x0804,\r
-+      0x92b4, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee,\r
-+      0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158,\r
-+      0x0016, 0x0036, 0x0086, 0x080c, 0xe908, 0x080c, 0xe551, 0x008e,\r
-+      0x003e, 0x001e, 0x08d0, 0x080c, 0xb813, 0x6020, 0x9086, 0x0002,\r
-+      0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x931a,\r
-+      0x9086, 0x008b, 0x0904, 0x931a, 0x0840, 0x6020, 0x9086, 0x0005,\r
-+      0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086,\r
-+      0x008b, 0x09b0, 0x0804, 0x932d, 0x00b6, 0x00a6, 0x0096, 0x00c6,\r
-+      0x0006, 0x0126, 0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d,\r
-+      0x0904, 0x9404, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0x19e7,\r
-+      0xbe54, 0x7018, 0x9b06, 0x1108, 0x761a, 0x701c, 0x9b06, 0x1130,\r
-+      0x86ff, 0x1118, 0x7018, 0x701e, 0x0008, 0x761e, 0xb858, 0x904d,\r
-+      0x0108, 0xae56, 0x96d5, 0x0000, 0x0110, 0x2900, 0xb05a, 0xb857,\r
-+      0x0000, 0xb85b, 0x0000, 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c,\r
-+      0x6531, 0x0904, 0x9400, 0x7624, 0x86ff, 0x0904, 0x93ef, 0x9680,\r
-+      0x0005, 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069, 0x0100, 0x68c0,\r
-+      0x9005, 0x0560, 0x080c, 0x8579, 0x080c, 0xa273, 0x68c3, 0x0000,\r
-+      0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,\r
-+      0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006,\r
-+      0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,\r
-+      0x0001, 0x003e, 0x00de, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001,\r
-+      0xb83e, 0x2660, 0x080c, 0xae92, 0x00ce, 0x0048, 0x00de, 0x00c6,\r
-+      0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x93a7, 0x89ff,\r
-+      0x0158, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xce24,\r
-+      0x080c, 0xe908, 0x080c, 0x6c81, 0x080c, 0xa692, 0x0804, 0x93a7,\r
-+      0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce, 0x009e,\r
-+      0x00ae, 0x00be, 0x0005, 0x0096, 0x0006, 0x0066, 0x00c6, 0x00d6,\r
-+      0x9036, 0x7814, 0x9065, 0x0904, 0x946c, 0x600c, 0x0006, 0x600f,\r
-+      0x0000, 0x7824, 0x9c06, 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4,\r
-+      0x1508, 0x080c, 0x8579, 0x080c, 0xa273, 0x68c3, 0x0000, 0x080c,\r
-+      0xa7bc, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,\r
-+      0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c,\r
-+      0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001,\r
-+      0x003e, 0x0040, 0x080c, 0x690a, 0x1520, 0x6003, 0x0009, 0x630a,\r
-+      0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xcb33, 0x01b0, 0x6020,\r
-+      0x9086, 0x0003, 0x1508, 0x080c, 0xcd3b, 0x1118, 0x080c, 0xb813,\r
-+      0x0060, 0x080c, 0x690a, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877,\r
-+      0x0000, 0x080c, 0x6c81, 0x080c, 0xcd1e, 0x080c, 0xae92, 0x080c,\r
-+      0xa692, 0x000e, 0x0804, 0x9412, 0x7e16, 0x7e12, 0x00de, 0x00ce,\r
-+      0x006e, 0x000e, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118,\r
-+      0x080c, 0xe551, 0x0c50, 0x080c, 0xb813, 0x6020, 0x9086, 0x0002,\r
-+      0x1150, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0990, 0x9086,\r
-+      0x008b, 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004,\r
-+      0x0006, 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00,\r
-+      0x0860, 0x0006, 0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818,\r
-+      0x905d, 0x0904, 0x9519, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a,\r
-+      0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x6531, 0x0904, 0x9516,\r
-+      0x7e24, 0x86ff, 0x0904, 0x9509, 0x9680, 0x0005, 0x2004, 0x9906,\r
-+      0x1904, 0x9509, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904,\r
-+      0x9500, 0x080c, 0x8579, 0x080c, 0xa273, 0x68c3, 0x0000, 0x080c,\r
-+      0xa7bc, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,\r
-+      0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c,\r
-+      0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001,\r
-+      0x003e, 0x00de, 0x00c6, 0x3e08, 0x918e, 0x0002, 0x1168, 0xb800,\r
-+      0xd0bc, 0x0150, 0x9680, 0x0010, 0x200c, 0x81ff, 0x1518, 0x2009,\r
-+      0x1988, 0x210c, 0x2102, 0x00f0, 0xb83c, 0x9005, 0x0110, 0x8001,\r
-+      0xb83e, 0x2660, 0x600f, 0x0000, 0x080c, 0xae92, 0x00ce, 0x0048,\r
-+      0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804,\r
-+      0x94ac, 0x89ff, 0x0138, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,\r
-+      0x080c, 0x6c81, 0x080c, 0xa692, 0x0804, 0x94ac, 0x000e, 0x0804,\r
-+      0x94a0, 0x781e, 0x781a, 0x00de, 0x00ce, 0x00be, 0x009e, 0x006e,\r
-+      0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0xb800, 0xd0dc,\r
-+      0x01a0, 0xb84c, 0x904d, 0x0188, 0xa878, 0x9606, 0x1170, 0x2071,\r
-+      0x19e7, 0x7024, 0x9035, 0x0148, 0x9080, 0x0005, 0x2004, 0x9906,\r
-+      0x1120, 0xb800, 0xc0dc, 0xb802, 0x0029, 0x006e, 0x009e, 0x00de,\r
-+      0x00ee, 0x0005, 0x00f6, 0x2079, 0x0100, 0x78c0, 0x9005, 0x1138,\r
-+      0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x04b8, 0x080c,\r
-+      0xa273, 0x78c3, 0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036,\r
-+      0x2079, 0x0140, 0x7b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,\r
-+      0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x2079, 0x0100, 0x7824,\r
-+      0xd084, 0x0110, 0x7827, 0x0001, 0x080c, 0xa7bc, 0x003e, 0x080c,\r
-+      0x6531, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660,\r
-+      0x080c, 0xae61, 0x00ce, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,\r
-+      0x080c, 0xce24, 0x080c, 0x6c81, 0x080c, 0xa692, 0x00fe, 0x0005,\r
-+      0x00b6, 0x00e6, 0x00c6, 0x2011, 0x0101, 0x2204, 0xc0c4, 0x2012,\r
-+      0x2001, 0x180c, 0x2014, 0xc2e4, 0x2202, 0x2071, 0x19e7, 0x7004,\r
-+      0x9084, 0x0007, 0x0002, 0x95a5, 0x95a9, 0x95c0, 0x95e9, 0x9627,\r
-+      0x95a5, 0x95c0, 0x95a3, 0x080c, 0x0dd5, 0x00ce, 0x00ee, 0x00be,\r
-+      0x0005, 0x7024, 0x9065, 0x0148, 0x7020, 0x8001, 0x7022, 0x600c,\r
-+      0x9015, 0x0158, 0x7216, 0x600f, 0x0000, 0x7007, 0x0000, 0x7027,\r
-+      0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7216, 0x7212, 0x0ca8,\r
-+      0x6010, 0x2058, 0x080c, 0x6531, 0xb800, 0xc0dc, 0xb802, 0x7007,\r
-+      0x0000, 0x7027, 0x0000, 0x7020, 0x8001, 0x7022, 0x1148, 0x2001,\r
-+      0x180c, 0x2014, 0xd2ec, 0x1180, 0x00ce, 0x00ee, 0x00be, 0x0005,\r
-+      0xb854, 0x9015, 0x0120, 0x721e, 0x080c, 0x968d, 0x0ca8, 0x7218,\r
-+      0x721e, 0x080c, 0x968d, 0x0c80, 0xc2ec, 0x2202, 0x080c, 0x97b9,\r
-+      0x0c58, 0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06, 0x1160, 0x080c,\r
-+      0xa692, 0x600c, 0x9015, 0x0120, 0x720e, 0x600f, 0x0000, 0x0448,\r
-+      0x720e, 0x720a, 0x0430, 0x7014, 0x9c06, 0x1160, 0x080c, 0xa692,\r
-+      0x600c, 0x9015, 0x0120, 0x7216, 0x600f, 0x0000, 0x00d0, 0x7216,\r
-+      0x7212, 0x00b8, 0x6020, 0x9086, 0x0003, 0x1198, 0x6010, 0x2058,\r
-+      0x080c, 0x6531, 0xb800, 0xc0dc, 0xb802, 0x080c, 0xa692, 0x701c,\r
-+      0x9065, 0x0138, 0xb854, 0x9015, 0x0110, 0x721e, 0x0010, 0x7218,\r
-+      0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024,\r
-+      0x9065, 0x0140, 0x080c, 0xa692, 0x600c, 0x9015, 0x0158, 0x720e,\r
-+      0x600f, 0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x00ce, 0x00ee,\r
-+      0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8, 0x00d6, 0x2069, 0x19e7,\r
-+      0x6830, 0x9084, 0x0003, 0x0002, 0x964a, 0x964c, 0x9670, 0x9648,\r
-+      0x080c, 0x0dd5, 0x00de, 0x0005, 0x00c6, 0x6840, 0x9086, 0x0001,\r
-+      0x01b8, 0x683c, 0x9065, 0x0130, 0x600c, 0x9015, 0x0170, 0x6a3a,\r
-+      0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011, 0x1a06,\r
-+      0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a, 0x6836, 0x0c90,\r
-+      0x6843, 0x0000, 0x6838, 0x9065, 0x0d68, 0x6003, 0x0003, 0x0c50,\r
-+      0x00c6, 0x9006, 0x6842, 0x6846, 0x684a, 0x683c, 0x9065, 0x0160,\r
-+      0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000,\r
-+      0x0018, 0x683e, 0x683a, 0x6836, 0x00ce, 0x00de, 0x0005, 0x2001,\r
-+      0x180c, 0x200c, 0xc1e5, 0x2102, 0x0005, 0x2001, 0x180c, 0x200c,\r
-+      0xd1ec, 0x0120, 0xc1ec, 0x2102, 0x080c, 0x97b9, 0x2001, 0x19f3,\r
-+      0x2004, 0x9086, 0x0001, 0x0d58, 0x00d6, 0x2069, 0x19e7, 0x6804,\r
-+      0x9084, 0x0007, 0x0006, 0x9005, 0x11c8, 0x2001, 0x1837, 0x2004,\r
-+      0x9084, 0x0028, 0x1198, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa,\r
-+      0x0168, 0x2001, 0x188b, 0x2004, 0xd08c, 0x1118, 0xd084, 0x1118,\r
-+      0x0028, 0x080c, 0x97b9, 0x000e, 0x00de, 0x0005, 0x000e, 0x0002,\r
-+      0x96ca, 0x9787, 0x9787, 0x9787, 0x9787, 0x9789, 0x9787, 0x96c8,\r
-+      0x080c, 0x0dd5, 0x6820, 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6,\r
-+      0x680c, 0x9065, 0x0520, 0x6114, 0x0096, 0x2148, 0xa964, 0x009e,\r
-+      0x918c, 0x00ff, 0x918e, 0x0035, 0x1180, 0x2009, 0x1837, 0x210c,\r
-+      0x918c, 0x0028, 0x1150, 0x080c, 0x73bc, 0x0138, 0x0006, 0x2009,\r
-+      0x188b, 0x2104, 0xc095, 0x200a, 0x000e, 0x6807, 0x0004, 0x6826,\r
-+      0x682b, 0x0000, 0x080c, 0x9861, 0x00ce, 0x00de, 0x0005, 0x6814,\r
-+      0x9065, 0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c,\r
-+      0x9861, 0x00ce, 0x00de, 0x0005, 0x00b6, 0x00e6, 0x6a1c, 0x92dd,\r
-+      0x0000, 0x0904, 0x9773, 0xb84c, 0x900d, 0x0118, 0xb888, 0x9005,\r
-+      0x01a0, 0xb854, 0x905d, 0x0120, 0x920e, 0x0904, 0x9773, 0x0028,\r
-+      0x6818, 0x920e, 0x0904, 0x9773, 0x2058, 0xb84c, 0x900d, 0x0d88,\r
-+      0xb888, 0x9005, 0x1d70, 0x2b00, 0x681e, 0xbb3c, 0xb838, 0x9302,\r
-+      0x1e40, 0x080c, 0xae38, 0x0904, 0x9773, 0x8318, 0xbb3e, 0x6116,\r
-+      0x2b10, 0x6212, 0x0096, 0x2148, 0xa880, 0x9084, 0x00ff, 0x605e,\r
-+      0xa883, 0x0000, 0xa884, 0x009e, 0x908a, 0x199a, 0x0210, 0x2001,\r
-+      0x1999, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x6114, 0x0096,\r
-+      0x2148, 0xa964, 0x009e, 0x918c, 0x00ff, 0x918e, 0x0048, 0x0538,\r
-+      0x00f6, 0x2c78, 0x2061, 0x0100, 0xbac0, 0x629a, 0x2069, 0x0200,\r
-+      0x2071, 0x0240, 0x080c, 0x9dae, 0x2069, 0x19e7, 0xbb00, 0xc3dd,\r
-+      0xbb02, 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x7823,\r
-+      0x0003, 0x7803, 0x0001, 0x7807, 0x0040, 0x00fe, 0x00ee, 0x00be,\r
-+      0x00ce, 0x00de, 0x0005, 0x00ee, 0x00be, 0x00ce, 0x0cd0, 0xbb00,\r
-+      0xc3dd, 0xbb02, 0x6807, 0x0006, 0x2f18, 0x6b26, 0x682b, 0x0000,\r
-+      0x080c, 0xac7d, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de,\r
-+      0x0005, 0x00c6, 0x680c, 0x9065, 0x0508, 0x6114, 0x0096, 0x2148,\r
-+      0xa964, 0x009e, 0x918c, 0x00ff, 0x918e, 0x0035, 0x1180, 0x2009,\r
-+      0x1837, 0x210c, 0x918c, 0x0028, 0x1150, 0x080c, 0x73bc, 0x0138,\r
-+      0x0006, 0x2009, 0x188b, 0x2104, 0xc095, 0x200a, 0x000e, 0x6807,\r
-+      0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x9861, 0x00ce, 0x00de,\r
-+      0x0005, 0x2001, 0x180c, 0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe,\r
-+      0x0005, 0x00f6, 0x00d6, 0x2069, 0x19e7, 0x6830, 0x9086, 0x0000,\r
-+      0x1570, 0x2001, 0x180c, 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202,\r
-+      0x080c, 0x969c, 0x2069, 0x19e7, 0x2001, 0x180c, 0x200c, 0xd1c4,\r
-+      0x1508, 0x6838, 0x907d, 0x01d8, 0x6a04, 0x9296, 0x0000, 0x1904,\r
-+      0x985a, 0x7920, 0x918e, 0x0009, 0x0588, 0x6833, 0x0001, 0x683e,\r
-+      0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400,\r
-+      0x002e, 0x080c, 0x1c46, 0x1178, 0x012e, 0x080c, 0xa0d0, 0x00de,\r
-+      0x00fe, 0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c,\r
-+      0x746c, 0x006e, 0x08b0, 0x012e, 0x6843, 0x0000, 0x7803, 0x0002,\r
-+      0x780c, 0x9015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000,\r
-+      0x683f, 0x0000, 0x0c20, 0x683a, 0x6836, 0x0cc0, 0x7908, 0xd1fc,\r
-+      0x1198, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000,\r
-+      0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1c46, 0x19d8,\r
-+      0x012e, 0x080c, 0xa051, 0x0858, 0x2001, 0x1837, 0x2004, 0x9084,\r
-+      0x0028, 0x1188, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x0158,\r
-+      0x2001, 0x19e8, 0x2004, 0x9005, 0x11f0, 0x2001, 0x188b, 0x200c,\r
-+      0xc185, 0xc18c, 0x2102, 0x2f00, 0x6833, 0x0001, 0x683e, 0x6847,\r
-+      0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400, 0x002e,\r
-+      0x080c, 0x1c46, 0x1904, 0x97fb, 0x012e, 0x6a3c, 0x2278, 0x080c,\r
-+      0x9fdb, 0x0804, 0x97ef, 0x2011, 0x188b, 0x2204, 0xc08d, 0x2012,\r
-+      0x0804, 0x97ef, 0x6a04, 0x9296, 0x0006, 0x0904, 0x97d9, 0x0804,\r
-+      0x97b1, 0x6020, 0x9084, 0x000f, 0x000b, 0x0005, 0x9875, 0x987a,\r
-+      0x9ce8, 0x9d77, 0x987a, 0x9ce8, 0x9d77, 0x9875, 0x987a, 0x9875,\r
-+      0x9875, 0x9875, 0x9875, 0x9875, 0x9875, 0x080c, 0x9588, 0x080c,\r
-+      0x968d, 0x0005, 0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6,\r
-+      0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240,\r
-+      0x6004, 0x908a, 0x0053, 0x1a0c, 0x0dd5, 0x6110, 0x2158, 0xb9c0,\r
-+      0x2c78, 0x2061, 0x0100, 0x619a, 0x908a, 0x0040, 0x1a04, 0x98e6,\r
-+      0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e,\r
-+      0x013e, 0x015e, 0x00be, 0x0005, 0x9a6b, 0x9aa6, 0x9acf, 0x9b77,\r
-+      0x9b99, 0x9b9f, 0x9bac, 0x9bb4, 0x9bc0, 0x9bc6, 0x9bd7, 0x9bc6,\r
-+      0x9c2f, 0x9bb4, 0x9c3b, 0x9c41, 0x9bc0, 0x9c41, 0x9c4d, 0x98e4,\r
-+      0x98e4, 0x98e4, 0x98e4, 0x98e4, 0x98e4, 0x98e4, 0x98e4, 0x98e4,\r
-+      0x98e4, 0x98e4, 0xa46d, 0xa490, 0xa4a1, 0xa4c1, 0xa4f3, 0x9bac,\r
-+      0x98e4, 0x9bac, 0x9bc6, 0x98e4, 0x9acf, 0x9b77, 0x98e4, 0xa8a9,\r
-+      0x9bc6, 0x98e4, 0xa8c5, 0x9bc6, 0x98e4, 0x9bc0, 0x9a65, 0x9907,\r
-+      0x98e4, 0xa8e1, 0xa94e, 0xaa25, 0x98e4, 0xaa32, 0x9ba9, 0xaa5d,\r
-+      0x98e4, 0xa4fd, 0xaa8a, 0x98e4, 0x080c, 0x0dd5, 0x2100, 0x005b,\r
-+      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e,\r
-+      0x015e, 0x00be, 0x0005, 0xab25, 0xabd7, 0x9905, 0x992e, 0x99da,\r
-+      0x99e5, 0x9905, 0x9bac, 0x9905, 0x9a2c, 0x9a38, 0x9949, 0x9905,\r
-+      0x9964, 0x9998, 0xad3f, 0xad84, 0x9bc6, 0x080c, 0x0dd5, 0x00d6,\r
-+      0x0096, 0x080c, 0x9c60, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b,\r
-+      0x0800, 0x7814, 0x2048, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854,\r
-+      0x7026, 0x60c3, 0x0018, 0x080c, 0xa247, 0x009e, 0x00de, 0x0005,\r
-+      0x7810, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0xadcb, 0x1118,\r
-+      0x9084, 0xff80, 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096,\r
-+      0x080c, 0x9c60, 0x7003, 0x0500, 0x7814, 0x2048, 0xa874, 0x700a,\r
-+      0xa878, 0x700e, 0xa87c, 0x7012, 0xa880, 0x7016, 0xa884, 0x701a,\r
-+      0xa888, 0x701e, 0x60c3, 0x0010, 0x080c, 0xa247, 0x009e, 0x00de,\r
-+      0x0005, 0x00d6, 0x0096, 0x080c, 0x9c60, 0x7003, 0x0500, 0x7814,\r
-+      0x2048, 0xa8cc, 0x700a, 0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8,\r
-+      0x7016, 0xa8dc, 0x701a, 0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c,\r
-+      0xa247, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091,\r
-+      0x8000, 0x080c, 0x9c60, 0x20e9, 0x0000, 0x2001, 0x19a3, 0x2003,\r
-+      0x0000, 0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8,\r
-+      0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3,\r
-+      0x0016, 0x200c, 0x2001, 0x0001, 0x080c, 0x23b7, 0x080c, 0xd867,\r
-+      0x9006, 0x080c, 0x23b7, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048,\r
-+      0x0c28, 0x04d9, 0x080c, 0xa247, 0x012e, 0x009e, 0x00de, 0x0005,\r
-+      0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x9cab, 0x20e9,\r
-+      0x0000, 0x2001, 0x19a3, 0x2003, 0x0000, 0x7814, 0x2048, 0xa86f,\r
-+      0x0200, 0xa873, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8,\r
-+      0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3,\r
-+      0x0016, 0x200c, 0x080c, 0xd867, 0x001e, 0xa804, 0x9005, 0x0110,\r
-+      0x2048, 0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fb1, 0x080c,\r
-+      0xa247, 0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084,\r
-+      0x0003, 0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000,\r
-+      0x1de0, 0x0005, 0x080c, 0x9c60, 0x7003, 0x7800, 0x7808, 0x8007,\r
-+      0x700a, 0x60c3, 0x0008, 0x0804, 0xa247, 0x00d6, 0x00e6, 0x080c,\r
-+      0x9cab, 0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70,\r
-+      0x9095, 0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069,\r
-+      0x1805, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x99fb,\r
-+      0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04,\r
-+      0x9a04, 0x2069, 0x19b3, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19cd,\r
-+      0x20a9, 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200,\r
-+      0x6010, 0x8000, 0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007,\r
-+      0x2072, 0x8d68, 0x8e70, 0x1f04, 0x9a12, 0x60c3, 0x004c, 0x080c,\r
-+      0xa247, 0x00ee, 0x00de, 0x0005, 0x080c, 0x9c60, 0x7003, 0x6300,\r
-+      0x7007, 0x0028, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa247,\r
-+      0x00d6, 0x0026, 0x0016, 0x080c, 0x9cab, 0x7003, 0x0200, 0x7814,\r
-+      0x700e, 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c,\r
-+      0x2069, 0x1923, 0x6810, 0xd084, 0x1148, 0x2073, 0x0500, 0x8e70,\r
-+      0x2073, 0x0000, 0x8e70, 0x8108, 0x9290, 0x0004, 0x2073, 0x0800,\r
-+      0x8e70, 0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c,\r
-+      0xa247, 0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1818, 0x2004,\r
-+      0x609a, 0x0804, 0xa247, 0x080c, 0x9c60, 0x7003, 0x5200, 0x2069,\r
-+      0x1847, 0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x2871,\r
-+      0x710e, 0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805,\r
-+      0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099,\r
-+      0x1801, 0x20a1, 0x0254, 0x4003, 0x080c, 0xadcb, 0x1120, 0xb8a0,\r
-+      0x9082, 0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7032, 0x2001,\r
-+      0x1820, 0x2004, 0x7036, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084,\r
-+      0x00ff, 0x7036, 0x60c3, 0x001c, 0x0804, 0xa247, 0x080c, 0x9c60,\r
-+      0x7003, 0x0500, 0x080c, 0xadcb, 0x1120, 0xb8a0, 0x9082, 0x007f,\r
-+      0x0248, 0x2001, 0x181f, 0x2004, 0x700a, 0x2001, 0x1820, 0x2004,\r
-+      0x700e, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x700e,\r
-+      0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000,\r
-+      0x20a1, 0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0xa247, 0x080c,\r
-+      0x9c60, 0x9006, 0x080c, 0x693c, 0xb8a0, 0x9086, 0x007e, 0x1130,\r
-+      0x7003, 0x0400, 0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096,\r
-+      0x904d, 0x0120, 0x9006, 0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003,\r
-+      0x0300, 0xb8a0, 0x9086, 0x007e, 0x1904, 0x9b3e, 0x00d6, 0x2069,\r
-+      0x196c, 0x2001, 0x1837, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a,\r
-+      0x6808, 0x9084, 0x2000, 0x7012, 0x080c, 0xade2, 0x680c, 0x7016,\r
-+      0x701f, 0x2710, 0x6818, 0x7022, 0x681c, 0x7026, 0x0090, 0x6800,\r
-+      0x700a, 0x6804, 0x700e, 0x6808, 0x080c, 0x73bc, 0x1118, 0x9084,\r
-+      0x37ff, 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xade2, 0x680c,\r
-+      0x7016, 0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805,\r
-+      0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099,\r
-+      0x1801, 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xab0c, 0x2069,\r
-+      0x1974, 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x56d3,\r
-+      0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, 0x04a8, 0x2001, 0x1837,\r
-+      0x2004, 0xd0a4, 0x0170, 0x0016, 0x2001, 0x196d, 0x200c, 0x60e0,\r
-+      0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x28b2, 0x61e2,\r
-+      0x001e, 0x20e1, 0x0001, 0x2099, 0x196c, 0x20e9, 0x0000, 0x20a1,\r
-+      0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805,\r
-+      0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1,\r
-+      0x025a, 0x4003, 0x080c, 0xab0c, 0x20a1, 0x024e, 0x20a9, 0x0008,\r
-+      0x2099, 0x1974, 0x4003, 0x60c3, 0x0074, 0x0804, 0xa247, 0x080c,\r
-+      0x9c60, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f,\r
-+      0x2000, 0x9006, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, 0xd1ac,\r
-+      0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085,\r
-+      0x0002, 0x00d6, 0x0804, 0x9c10, 0x7026, 0x60c3, 0x0014, 0x0804,\r
-+      0xa247, 0x080c, 0x9c60, 0x7003, 0x5000, 0x0804, 0x9ae9, 0x080c,\r
-+      0x9c60, 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804,\r
-+      0xa247, 0x080c, 0x9ca2, 0x0010, 0x080c, 0x9cab, 0x7003, 0x0200,\r
-+      0x60c3, 0x0004, 0x0804, 0xa247, 0x080c, 0x9cab, 0x7003, 0x0100,\r
-+      0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0xa247,\r
-+      0x080c, 0x9cab, 0x7003, 0x0200, 0x0804, 0x9ae9, 0x080c, 0x9cab,\r
-+      0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b,\r
-+      0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa247, 0x00d6,\r
-+      0x080c, 0x9cab, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800,\r
-+      0xb894, 0x9086, 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190,\r
-+      0xb998, 0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100,\r
-+      0x0058, 0x700f, 0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f,\r
-+      0x0700, 0x0010, 0x700f, 0x0800, 0x00f6, 0x2079, 0x1847, 0x7904,\r
-+      0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085,\r
-+      0x0010, 0x2009, 0x1869, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002,\r
-+      0x0026, 0x2009, 0x1867, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbacc,\r
-+      0xd28c, 0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140,\r
-+      0xd1ec, 0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd,\r
-+      0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0xa247, 0x080c,\r
-+      0x9cab, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3,\r
-+      0x0014, 0x0804, 0xa247, 0x080c, 0x9cab, 0x7003, 0x0200, 0x0804,\r
-+      0x9a6f, 0x080c, 0x9cab, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f,\r
-+      0x2a00, 0x60c3, 0x0008, 0x0804, 0xa247, 0x080c, 0x9cab, 0x7003,\r
-+      0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0xa247, 0x0026,\r
-+      0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040,\r
-+      0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100,\r
-+      0x080c, 0xab21, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069,\r
-+      0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x9485, 0x0029, 0x7012,\r
-+      0x004e, 0x003e, 0x00de, 0x080c, 0xa235, 0x721a, 0x9f95, 0x0000,\r
-+      0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026,\r
-+      0x080c, 0xab21, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069,\r
-+      0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x00de, 0x7013, 0x2029,\r
-+      0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f,\r
-+      0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300,\r
-+      0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019,\r
-+      0x2300, 0x2021, 0x0100, 0x080c, 0xab21, 0xb810, 0x9305, 0x7002,\r
-+      0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814,\r
-+      0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x687c,\r
-+      0x700a, 0x6880, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e,\r
-+      0x003e, 0x00de, 0x080c, 0xa235, 0x721a, 0x7a08, 0x7222, 0x2f10,\r
-+      0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0xa235, 0x721a,\r
-+      0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005,\r
-+      0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071,\r
-+      0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dd5, 0x908a, 0x0092,\r
-+      0x1a0c, 0x0dd5, 0x6110, 0x2158, 0xb9c0, 0x2c78, 0x2061, 0x0100,\r
-+      0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce,\r
-+      0x00be, 0x0005, 0x9d19, 0x9d28, 0x9d33, 0x9d17, 0x9d17, 0x9d17,\r
-+      0x9d19, 0x9d17, 0x9d17, 0x9d17, 0x9d17, 0x9d17, 0x9d17, 0x080c,\r
-+      0x0dd5, 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x2ba5, 0x0228,\r
-+      0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0xa247,\r
-+      0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3,\r
-+      0x000c, 0x0804, 0xa247, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300,\r
-+      0x60c3, 0x0004, 0x0804, 0xa247, 0x0026, 0x080c, 0xab21, 0xb810,\r
-+      0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c,\r
-+      0x700a, 0x6880, 0x700e, 0x7013, 0x0009, 0x0804, 0x9c7b, 0x0026,\r
-+      0x080c, 0xab21, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006,\r
-+      0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x2001, 0x0099,\r
-+      0x7012, 0x0804, 0x9cdd, 0x0026, 0x080c, 0xab21, 0xb810, 0x9085,\r
-+      0x8500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a,\r
-+      0x6880, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x9cdd, 0x00b6,\r
-+      0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071,\r
-+      0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0dd5, 0x908a, 0x0054,\r
-+      0x1a0c, 0x0dd5, 0x7910, 0x2158, 0xb9c0, 0x2061, 0x0100, 0x619a,\r
-+      0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,\r
-+      0x0005, 0x9dae, 0x9e6a, 0x9e3d, 0x9f8c, 0x9dac, 0x9dac, 0x9dac,\r
-+      0x9dac, 0x9dac, 0x9dac, 0x9dac, 0xa66f, 0xa677, 0xa67f, 0xa687,\r
-+      0x9dac, 0xaa69, 0x9dac, 0xa667, 0x080c, 0x0dd5, 0x0096, 0x780b,\r
-+      0xffff, 0x080c, 0x9e19, 0x7914, 0x2148, 0xa978, 0x7956, 0xae64,\r
-+      0x96b4, 0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b4, 0x7032, 0xa8b8,\r
-+      0x7036, 0xa8bc, 0x703a, 0xa8c0, 0x703e, 0x0008, 0x7132, 0xa97c,\r
-+      0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118,\r
-+      0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x2010, 0x785c,\r
-+      0x9084, 0x00ff, 0x8007, 0x9205, 0x7042, 0xd1ac, 0x0158, 0x7047,\r
-+      0x0002, 0x9686, 0x0008, 0x1118, 0x080c, 0x18ac, 0x0010, 0x080c,\r
-+      0x1725, 0x0050, 0xd1b4, 0x0118, 0x7047, 0x0001, 0x0028, 0x7047,\r
-+      0x0000, 0x9016, 0x2230, 0x0010, 0xaab0, 0xaeac, 0x726a, 0x766e,\r
-+      0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860, 0x20e0, 0xa85c, 0x9080,\r
-+      0x0023, 0x2098, 0x20a1, 0x0252, 0x2069, 0x0200, 0x6813, 0x0018,\r
-+      0x4003, 0x6813, 0x0008, 0x60c3, 0x0020, 0x6017, 0x0009, 0x2001,\r
-+      0x1a03, 0x2003, 0x07d0, 0x2001, 0x1a02, 0x2003, 0x0009, 0x009e,\r
-+      0x0005, 0x6813, 0x0008, 0xba8c, 0x8210, 0xb8cc, 0xd084, 0x0128,\r
-+      0x7a46, 0x7b14, 0x7b4a, 0x722e, 0x732a, 0x9294, 0x00ff, 0xba8e,\r
-+      0x8217, 0x721a, 0xba10, 0x9295, 0x0600, 0x7202, 0xba14, 0x7206,\r
-+      0x2069, 0x1800, 0x6a7c, 0x720a, 0x6a80, 0x720e, 0x7013, 0x0829,\r
-+      0x2f10, 0x7222, 0x7027, 0xffff, 0x0005, 0x00d6, 0x0096, 0x0081,\r
-+      0x7814, 0x2048, 0xa890, 0x7002, 0xa88c, 0x7006, 0xa8b0, 0x700a,\r
-+      0xa8ac, 0x700e, 0x60c3, 0x000c, 0x009e, 0x00de, 0x0804, 0xa247,\r
-+      0x6813, 0x0008, 0xb810, 0x9085, 0x0500, 0x7002, 0xb814, 0x7006,\r
-+      0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x7013, 0x0889,\r
-+      0x080c, 0xa235, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071,\r
-+      0x024c, 0x0005, 0x00d6, 0x0096, 0x080c, 0x9f6a, 0x7814, 0x2048,\r
-+      0x080c, 0xcb33, 0x1130, 0x7814, 0x9084, 0x0700, 0x8007, 0x0033,\r
-+      0x0010, 0x9006, 0x001b, 0x009e, 0x00de, 0x0005, 0x9e88, 0x9ef1,\r
-+      0x9f01, 0x9f27, 0x9f33, 0x9f44, 0x9f4c, 0x9e86, 0x080c, 0x0dd5,\r
-+      0x0016, 0x0036, 0xa97c, 0x918c, 0x0003, 0x0118, 0x9186, 0x0003,\r
-+      0x1198, 0xaba8, 0x7824, 0xd0cc, 0x1168, 0x7316, 0xa898, 0x701a,\r
-+      0xa894, 0x701e, 0x003e, 0x001e, 0x2001, 0x19b1, 0x2004, 0x60c2,\r
-+      0x0804, 0xa247, 0xc3e5, 0x0c88, 0x9186, 0x0001, 0x190c, 0x0dd5,\r
-+      0xaba8, 0x7824, 0xd0cc, 0x1904, 0x9eee, 0x7316, 0xa898, 0x701a,\r
-+      0xa894, 0x701e, 0xa8a4, 0x7026, 0xa8ac, 0x702e, 0x2009, 0x0018,\r
-+      0x9384, 0x0300, 0x0570, 0xd3c4, 0x0110, 0xa8ac, 0x9108, 0xd3cc,\r
-+      0x0110, 0xa8a4, 0x9108, 0x6810, 0x9085, 0x0010, 0x6812, 0x2011,\r
-+      0x0258, 0x20e9, 0x0000, 0x22a0, 0x0156, 0x20a9, 0x0008, 0xa860,\r
-+      0x20e0, 0xa85c, 0x9080, 0x002c, 0x2098, 0x4003, 0x6810, 0x8000,\r
-+      0x6812, 0x2011, 0x0240, 0x22a0, 0x20a9, 0x0005, 0x4003, 0x6810,\r
-+      0xc084, 0x6812, 0x015e, 0x9184, 0x0003, 0x0118, 0x2019, 0x0245,\r
-+      0x201a, 0x61c2, 0x003e, 0x001e, 0x0804, 0xa247, 0xc3e5, 0x0804,\r
-+      0x9ead, 0x2011, 0x0008, 0x2001, 0x180f, 0x2004, 0xd0a4, 0x0110,\r
-+      0x2011, 0x0028, 0x7824, 0xd0cc, 0x1110, 0x7216, 0x0470, 0x0ce8,\r
-+      0xc2e5, 0x2011, 0x0302, 0x0016, 0x782c, 0x701a, 0x7930, 0x711e,\r
-+      0x9105, 0x0108, 0xc2dd, 0x001e, 0x7824, 0xd0cc, 0x0108, 0xc2e5,\r
-+      0x7216, 0x7027, 0x0012, 0x702f, 0x0008, 0x7043, 0x7000, 0x7047,\r
-+      0x0500, 0x704f, 0x000a, 0x2069, 0x0200, 0x6813, 0x0009, 0x2071,\r
-+      0x0240, 0x700b, 0x2500, 0x60c3, 0x0032, 0x0804, 0xa247, 0x2011,\r
-+      0x0028, 0x7824, 0xd0cc, 0x1128, 0x7216, 0x60c3, 0x0018, 0x0804,\r
-+      0xa247, 0x0cd0, 0xc2e5, 0x2011, 0x0100, 0x7824, 0xd0cc, 0x0108,\r
-+      0xc2e5, 0x7216, 0x702f, 0x0008, 0x7858, 0x9084, 0x00ff, 0x7036,\r
-+      0x60c3, 0x0020, 0x0804, 0xa247, 0x2011, 0x0008, 0x7824, 0xd0cc,\r
-+      0x0108, 0xc2e5, 0x7216, 0x0c08, 0x0036, 0x7b14, 0x9384, 0xff00,\r
-+      0x7816, 0x9384, 0x00ff, 0x8001, 0x1138, 0x7824, 0xd0cc, 0x0108,\r
-+      0xc2e5, 0x7216, 0x003e, 0x0888, 0x0046, 0x2021, 0x0800, 0x0006,\r
-+      0x7824, 0xd0cc, 0x000e, 0x0108, 0xc4e5, 0x7416, 0x004e, 0x701e,\r
-+      0x003e, 0x0818, 0x00d6, 0x6813, 0x0008, 0xb810, 0x9085, 0x0700,\r
-+      0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880,\r
-+      0x700e, 0x7824, 0xd0cc, 0x1168, 0x7013, 0x0898, 0x080c, 0xa235,\r
-+      0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x00de,\r
-+      0x0005, 0x7013, 0x0889, 0x0c90, 0x0016, 0x7814, 0x9084, 0x0700,\r
-+      0x8007, 0x0013, 0x001e, 0x0005, 0x9f9c, 0x9f9c, 0x9f9e, 0x9f9c,\r
-+      0x9f9c, 0x9f9c, 0x9fb8, 0x9f9c, 0x080c, 0x0dd5, 0x7914, 0x918c,\r
-+      0x08ff, 0x918d, 0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069,\r
-+      0x1847, 0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007,\r
-+      0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0xa247,\r
-+      0x2009, 0x0003, 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c,\r
-+      0xab21, 0x001e, 0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006,\r
-+      0x2069, 0x1800, 0x6a7c, 0x720a, 0x6a80, 0x720e, 0x7013, 0x0888,\r
-+      0x918d, 0x0008, 0x7116, 0x080c, 0xa235, 0x721a, 0x7a08, 0x7222,\r
-+      0x2f10, 0x7226, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066,\r
-+      0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160,\r
-+      0x7810, 0x2058, 0x76dc, 0x96b4, 0x0028, 0x0110, 0x737c, 0x7480,\r
-+      0x2500, 0x76dc, 0x96b4, 0x0028, 0x0140, 0x2001, 0x04ff, 0x6062,\r
-+      0x6067, 0xffff, 0x636a, 0x646e, 0x0050, 0x2001, 0x00ff, 0x9085,\r
-+      0x0400, 0x6062, 0x6067, 0xffff, 0x606b, 0x0000, 0x616e, 0xb8b8,\r
-+      0x6073, 0x0530, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff,\r
-+      0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, 0x607f, 0x0000, 0x2b00,\r
-+      0x6082, 0x6087, 0xffff, 0x7814, 0x0096, 0x2048, 0xa838, 0x608a,\r
-+      0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0x009e, 0xb86c,\r
-+      0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x2001,\r
-+      0x1837, 0x2004, 0x9084, 0x0028, 0x0128, 0x609f, 0x0000, 0x2001,\r
-+      0x0092, 0x0048, 0x6028, 0xc0bd, 0x602a, 0x609f, 0x00ff, 0x6027,\r
-+      0xffff, 0x2001, 0x00b2, 0x6016, 0x2009, 0x07d0, 0x080c, 0x857e,\r
-+      0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be,\r
-+      0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046,\r
-+      0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, 0x2058,\r
-+      0xb8a0, 0x2028, 0x76dc, 0xd6ac, 0x1168, 0x9582, 0x007e, 0x1250,\r
-+      0x2500, 0x9094, 0xff80, 0x1130, 0x9080, 0x3325, 0x2015, 0x9294,\r
-+      0x00ff, 0x0020, 0xb910, 0xba14, 0x737c, 0x7480, 0x70dc, 0xd0ac,\r
-+      0x1130, 0x9582, 0x007e, 0x1218, 0x9584, 0xff80, 0x0138, 0x9185,\r
-+      0x0400, 0x6062, 0x6266, 0x636a, 0x646e, 0x0030, 0x6063, 0x0400,\r
-+      0x6266, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6072, 0x6077, 0x0000,\r
-+      0xb864, 0xd0a4, 0x0110, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084,\r
-+      0x00ff, 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, 0x607f, 0x0000,\r
-+      0x2b00, 0x6082, 0x6087, 0xffff, 0x7814, 0x0096, 0x2048, 0xa838,\r
-+      0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0x009e,\r
-+      0xb86c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000,\r
-+      0xbac0, 0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, 0x0000, 0x00fe,\r
-+      0x2009, 0x0092, 0x6116, 0x2009, 0x07d0, 0x080c, 0x857e, 0x003e,\r
-+      0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005,\r
-+      0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036,\r
-+      0x2061, 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, 0x2028,\r
-+      0xb910, 0xba14, 0x737c, 0x7480, 0x7820, 0x90be, 0x0006, 0x0904,\r
-+      0xa1a4, 0x90be, 0x000a, 0x1904, 0xa160, 0xb8c0, 0x609e, 0x7814,\r
-+      0x2048, 0xa87c, 0xd0fc, 0x0558, 0xaf90, 0x9784, 0xff00, 0x9105,\r
-+      0x6062, 0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa878,\r
-+      0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0198, 0x2039,\r
-+      0x0098, 0x9705, 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038,\r
-+      0x9185, 0x2200, 0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0xb8c0,\r
-+      0x609e, 0x0050, 0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0, 0x9185,\r
-+      0x0200, 0x6062, 0x6073, 0x2029, 0xa87c, 0xd0fc, 0x0118, 0xaf94,\r
-+      0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a,\r
-+      0x646e, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,\r
-+      0x8007, 0x607a, 0x607f, 0x0000, 0xa838, 0x608a, 0xa834, 0x608e,\r
-+      0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5,\r
-+      0x60d7, 0x0000, 0x080c, 0xab06, 0x2009, 0x07d0, 0x60c4, 0x9084,\r
-+      0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x857e, 0x003e,\r
-+      0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005,\r
-+      0x7804, 0x9086, 0x0040, 0x0904, 0xa1e0, 0x9185, 0x0100, 0x6062,\r
-+      0x6266, 0x636a, 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x60af,\r
-+      0x95d5, 0x60d7, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,\r
-+      0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086,\r
-+      0x7814, 0x2048, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6,\r
-+      0xa844, 0x60ca, 0xb86c, 0x60ce, 0xbac0, 0x629e, 0x080c, 0xab06,\r
-+      0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009,\r
-+      0x1b58, 0x080c, 0x857e, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de,\r
-+      0x00ee, 0x009e, 0x00be, 0x0005, 0x7814, 0x2048, 0xa87c, 0x9084,\r
-+      0x0003, 0x9086, 0x0002, 0x0904, 0xa1fc, 0x9185, 0x0100, 0x6062,\r
-+      0x6266, 0x636a, 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0xb88c,\r
-+      0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x7838, 0x607e,\r
-+      0x2f00, 0x6086, 0x7808, 0x6082, 0xa890, 0x608a, 0xa88c, 0x608e,\r
-+      0xa8b0, 0x60c6, 0xa8ac, 0x60ca, 0xa8ac, 0x7930, 0x9108, 0x7932,\r
-+      0xa8b0, 0x792c, 0x9109, 0x792e, 0xb86c, 0x60ce, 0x60af, 0x95d5,\r
-+      0x60d7, 0x0000, 0xbac0, 0x629e, 0x080c, 0xaae3, 0x0804, 0xa190,\r
-+      0xb8cc, 0xd084, 0x0148, 0xb88c, 0x7814, 0x2048, 0xb88c, 0x7846,\r
-+      0xa836, 0x2900, 0xa83a, 0xb04a, 0x9185, 0x0600, 0x6062, 0x6266,\r
-+      0x636a, 0x646e, 0x6073, 0x0829, 0x6077, 0x0000, 0x60af, 0x9575,\r
-+      0x60d7, 0x0000, 0x0804, 0xa173, 0x9185, 0x0700, 0x6062, 0x6266,\r
-+      0x636a, 0x646e, 0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889,\r
-+      0x0010, 0x6073, 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084,\r
-+      0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086,\r
-+      0x7808, 0x6082, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6,\r
-+      0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,\r
-+      0xbac0, 0x629e, 0x7824, 0xd0cc, 0x0120, 0x080c, 0xab06, 0x0804,\r
-+      0xa190, 0x080c, 0xaae3, 0x0804, 0xa190, 0x7a10, 0x00b6, 0x2258,\r
-+      0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005,\r
-+      0x00d6, 0x2069, 0x19e7, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3,\r
-+      0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x8570, 0x0005, 0x0016,\r
-+      0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128,\r
-+      0x0089, 0x080c, 0x8570, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c,\r
-+      0x2102, 0x2001, 0x19e8, 0x2003, 0x0000, 0x2001, 0x19f0, 0x2003,\r
-+      0x0000, 0x0c88, 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009,\r
-+      0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100,\r
-+      0x61a4, 0x60a7, 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008,\r
-+      0x6016, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e,\r
-+      0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069,\r
-+      0x0140, 0x080c, 0x73bc, 0x11e8, 0x2001, 0x1a03, 0x2004, 0x9005,\r
-+      0x1904, 0xa2d9, 0x0066, 0x2031, 0x0001, 0x080c, 0x746c, 0x006e,\r
-+      0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, 0xd084,\r
-+      0x090c, 0x0dd5, 0x080c, 0x8570, 0x0460, 0x00c6, 0x2061, 0x19e7,\r
-+      0x00d0, 0x6904, 0x9194, 0x4000, 0x0548, 0x080c, 0xa273, 0x080c,\r
-+      0x2cff, 0x00c6, 0x2061, 0x19e7, 0x6128, 0x9192, 0x0008, 0x1258,\r
-+      0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x8570,\r
-+      0x080c, 0xa26a, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c,\r
-+      0xe9fe, 0x080c, 0x8579, 0x2009, 0x0014, 0x080c, 0xaedc, 0x00ce,\r
-+      0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x1a03,\r
-+      0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19e7, 0x6128, 0x9192,\r
-+      0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x8570, 0x080c,\r
-+      0x5ed9, 0x2009, 0x1846, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096,\r
-+      0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x8586, 0x2071,\r
-+      0x19e7, 0x713c, 0x81ff, 0x0904, 0xa37d, 0x2061, 0x0100, 0x2069,\r
-+      0x0140, 0x080c, 0x73bc, 0x1500, 0x0036, 0x2019, 0x0002, 0x080c,\r
-+      0xa5b6, 0x003e, 0x713c, 0x2160, 0x080c, 0xe9fe, 0x2009, 0x004a,\r
-+      0x6220, 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006,\r
-+      0x2009, 0x004a, 0x080c, 0xaedc, 0x0066, 0x2031, 0x0001, 0x080c,\r
-+      0x746c, 0x006e, 0x0804, 0xa37d, 0x080c, 0xa389, 0x0904, 0xa37d,\r
-+      0x6904, 0xd1f4, 0x0904, 0xa384, 0x080c, 0x2cff, 0x00c6, 0x703c,\r
-+      0x9065, 0x090c, 0x0dd5, 0x6020, 0x00ce, 0x9086, 0x0006, 0x1528,\r
-+      0x61c8, 0x60c4, 0x9105, 0x1508, 0x2009, 0x180c, 0x2104, 0xd0d4,\r
-+      0x01e0, 0x6214, 0x9294, 0x1800, 0x1128, 0x6224, 0x9294, 0x0002,\r
-+      0x1560, 0x0030, 0xc0d4, 0x200a, 0xd0cc, 0x0110, 0x080c, 0x2c52,\r
-+      0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016, 0x703c, 0x2060,\r
-+      0x2009, 0x0049, 0x080c, 0xaedc, 0x00c0, 0x0036, 0x2019, 0x0001,\r
-+      0x080c, 0xa5b6, 0x003e, 0x713c, 0x2160, 0x080c, 0xe9fe, 0x2009,\r
-+      0x004a, 0x6220, 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b,\r
-+      0x0006, 0x2009, 0x004a, 0x080c, 0xaedc, 0x002e, 0x001e, 0x00ee,\r
-+      0x00de, 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904, 0xa334, 0x0804,\r
-+      0xa336, 0x00d6, 0x00c6, 0x0096, 0x703c, 0x9065, 0x090c, 0x0dd5,\r
-+      0x2001, 0x1837, 0x2004, 0xd09c, 0x1904, 0xa415, 0x2001, 0x0306,\r
-+      0x200c, 0x9184, 0x0030, 0x0904, 0xa415, 0x9184, 0x0048, 0x9086,\r
-+      0x0008, 0x1904, 0xa415, 0x2001, 0x020b, 0x2004, 0xd0fc, 0x0904,\r
-+      0xa415, 0xd08c, 0x0904, 0xa415, 0x2009, 0x1a80, 0x2104, 0x8000,\r
-+      0x0208, 0x200a, 0x2069, 0x0100, 0x6914, 0x918c, 0x0184, 0x918d,\r
-+      0x0010, 0x6916, 0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106, 0x1570,\r
-+      0x8211, 0x1dd8, 0x2001, 0x0306, 0x2003, 0x4800, 0x2001, 0x009a,\r
-+      0x2003, 0x0004, 0x2001, 0x1a66, 0x2003, 0x0000, 0x2001, 0x1a6f,\r
-+      0x2003, 0x0000, 0x6a88, 0x698c, 0x2200, 0x9105, 0x1120, 0x2c10,\r
-+      0x080c, 0x1bad, 0x0040, 0x6014, 0x2048, 0xaa3a, 0xa936, 0x6ac4,\r
-+      0x69c8, 0xa946, 0xaa4a, 0x0126, 0x00c6, 0x2091, 0x2400, 0x002e,\r
-+      0x080c, 0x1c46, 0x190c, 0x0dd5, 0x012e, 0x0090, 0x2009, 0x1a81,\r
-+      0x2104, 0x8000, 0x0208, 0x200a, 0x69c8, 0x2011, 0x0020, 0x8211,\r
-+      0x1df0, 0x68c8, 0x9106, 0x1dc0, 0x69c4, 0x68c8, 0x9105, 0x0160,\r
-+      0x6824, 0xd08c, 0x0110, 0x6827, 0x0002, 0x7048, 0xc085, 0x704a,\r
-+      0x0079, 0x7048, 0xc084, 0x704a, 0x2009, 0x07d0, 0x080c, 0x857e,\r
-+      0x9006, 0x009e, 0x00ce, 0x00de, 0x0005, 0x9085, 0x0001, 0x0cc8,\r
-+      0x0026, 0x00e6, 0x2071, 0x19e7, 0x7048, 0xd084, 0x01d8, 0x713c,\r
-+      0x81ff, 0x01c0, 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e,\r
-+      0x0006, 0x1138, 0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016,\r
-+      0x0048, 0x928e, 0x0009, 0x0db0, 0x7014, 0x9084, 0x1984, 0x9085,\r
-+      0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6, 0x00d6,\r
-+      0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000,\r
-+      0x6010, 0x2058, 0xbca0, 0x2071, 0x19e7, 0x7018, 0x2058, 0x8bff,\r
-+      0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0, 0x6014,\r
-+      0x0096, 0x2048, 0xac6c, 0xad70, 0xae78, 0x009e, 0x080c, 0x6731,\r
-+      0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e,\r
-+      0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, 0x9c60, 0x7003,\r
-+      0x1200, 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, 0x9086,\r
-+      0x0004, 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb810,\r
-+      0xb914, 0x00be, 0x0020, 0x2061, 0x1800, 0x607c, 0x6180, 0x9084,\r
-+      0x00ff, 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0xa247,\r
-+      0x080c, 0x9c60, 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810,\r
-+      0x9084, 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804,\r
-+      0xa247, 0x0156, 0x080c, 0x9cab, 0x7003, 0x0200, 0x080c, 0x85d9,\r
-+      0x20a9, 0x0006, 0x2011, 0xfff4, 0x2019, 0xfff5, 0x9ef0, 0x0002,\r
-+      0x2305, 0x2072, 0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398, 0x0002,\r
-+      0x9290, 0x0002, 0x1f04, 0xa4b0, 0x60c3, 0x001c, 0x015e, 0x0804,\r
-+      0xa247, 0x0016, 0x0026, 0x080c, 0x9c87, 0x080c, 0x9c99, 0x9e80,\r
-+      0x0004, 0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800,\r
-+      0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x009e,\r
-+      0x7808, 0x9088, 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003,\r
-+      0x9080, 0x0004, 0x8003, 0x60c2, 0x080c, 0xa247, 0x002e, 0x001e,\r
-+      0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0xab0c, 0x20a1, 0x0240,\r
-+      0x22a8, 0x4003, 0x0c68, 0x080c, 0x9c60, 0x7003, 0x6200, 0x7808,\r
-+      0x700e, 0x60c3, 0x0008, 0x0804, 0xa247, 0x0016, 0x0026, 0x080c,\r
-+      0x9c60, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048,\r
-+      0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023, 0x2098,\r
-+      0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2,\r
-+      0x080c, 0xa247, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006,\r
-+      0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x700c, 0x2060, 0x8cff,\r
-+      0x0178, 0x080c, 0xcd3b, 0x1110, 0x080c, 0xb813, 0x600c, 0x0006,\r
-+      0x080c, 0xcfa2, 0x080c, 0xae61, 0x080c, 0xa692, 0x00ce, 0x0c78,\r
-+      0x2c00, 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005,\r
-+      0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,\r
-+      0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c,\r
-+      0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19e7,\r
-+      0x7024, 0x2060, 0x8cff, 0x01f8, 0x080c, 0xa273, 0x6ac0, 0x68c3,\r
-+      0x0000, 0x080c, 0x8579, 0x00c6, 0x2061, 0x0100, 0x080c, 0xac5d,\r
-+      0x00ce, 0x20a9, 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0xaedc,\r
-+      0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,\r
-+      0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001,\r
-+      0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x8579, 0x6814, 0x9084,\r
-+      0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,\r
-+      0x2011, 0x5e83, 0x080c, 0x84f3, 0x20a9, 0x01f4, 0x0009, 0x08c0,\r
-+      0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000,\r
-+      0x190c, 0x2cff, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010,\r
-+      0x1f04, 0xa598, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100,\r
-+      0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x0005, 0x0126, 0x0156,\r
-+      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006,\r
-+      0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102,\r
-+      0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19e7, 0x703c, 0x2060,\r
-+      0x8cff, 0x0904, 0xa648, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084,\r
-+      0x0002, 0x0904, 0xa648, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009,\r
-+      0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8586,\r
-+      0x080c, 0x1ffa, 0x0046, 0x2009, 0x00a5, 0x080c, 0x0e51, 0x2021,\r
-+      0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af,\r
-+      0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090,\r
-+      0x2071, 0x1a66, 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816,\r
-+      0x782b, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002,\r
-+      0x1128, 0x7884, 0x9005, 0x1110, 0x7887, 0x0001, 0x2001, 0x1981,\r
-+      0x200c, 0x080c, 0x0e51, 0x004e, 0x20a9, 0x03e8, 0x6824, 0xd094,\r
-+      0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2cff,\r
-+      0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0xa61e,\r
-+      0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef,\r
-+      0x9006, 0x080c, 0x2cef, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1140,\r
-+      0x2009, 0x0049, 0x6020, 0x9086, 0x0009, 0x0110, 0x080c, 0xaedc,\r
-+      0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,\r
-+      0x015e, 0x012e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069,\r
-+      0x19e7, 0x6a06, 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091,\r
-+      0x8000, 0x2069, 0x19e7, 0x6a32, 0x012e, 0x00de, 0x0005, 0x080c,\r
-+      0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c,\r
-+      0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c,\r
-+      0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x2000, 0x0078, 0x080c,\r
-+      0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x0400, 0x0038, 0x080c,\r
-+      0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020,\r
-+      0x0804, 0xa247, 0x00e6, 0x2071, 0x19e7, 0x7020, 0x9005, 0x0110,\r
-+      0x8001, 0x7022, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6,\r
-+      0x0076, 0x0066, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7,\r
-+      0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0xa737,\r
-+      0x8cff, 0x0904, 0xa737, 0x6020, 0x9086, 0x0006, 0x1904, 0xa732,\r
-+      0x88ff, 0x0138, 0x2800, 0x9c06, 0x1904, 0xa732, 0x2039, 0x0000,\r
-+      0x0050, 0x6010, 0x9b06, 0x1904, 0xa732, 0x85ff, 0x0120, 0x6054,\r
-+      0x9106, 0x1904, 0xa732, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100,\r
-+      0x68c0, 0x9005, 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001,\r
-+      0x080c, 0x8579, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0428, 0x080c,\r
-+      0x8579, 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008,\r
-+      0x68c3, 0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, 0x2069,\r
-+      0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,\r
-+      0x2cef, 0x9006, 0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084,\r
-+      0x0110, 0x6827, 0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c,\r
-+      0x7616, 0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,\r
-+      0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,\r
-+      0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000,\r
-+      0x6014, 0x0096, 0x2048, 0x080c, 0xcb33, 0x0110, 0x080c, 0xe551,\r
-+      0x009e, 0x080c, 0xae92, 0x080c, 0xa692, 0x88ff, 0x1190, 0x00ce,\r
-+      0x0804, 0xa6ad, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa6ad, 0x9006,\r
-+      0x012e, 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe,\r
-+      0x0005, 0x601b, 0x0000, 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6,\r
-+      0x00e6, 0x00d6, 0x0096, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126,\r
-+      0x2091, 0x8000, 0x2071, 0x19e7, 0x7638, 0x2660, 0x2678, 0x8cff,\r
-+      0x0904, 0xa7ab, 0x6020, 0x9086, 0x0006, 0x1904, 0xa7a6, 0x87ff,\r
-+      0x0128, 0x2700, 0x9c06, 0x1904, 0xa7a6, 0x0040, 0x6010, 0x9b06,\r
-+      0x15e8, 0x85ff, 0x0118, 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06,\r
-+      0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0xa5b6, 0x7033, 0x0000,\r
-+      0x9006, 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x7038, 0x9c36,\r
-+      0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36,\r
-+      0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066,\r
-+      0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,\r
-+      0x6014, 0x2048, 0x080c, 0xcb33, 0x0110, 0x080c, 0xe551, 0x080c,\r
-+      0xae92, 0x87ff, 0x1198, 0x00ce, 0x0804, 0xa757, 0x2c78, 0x600c,\r
-+      0x2060, 0x0804, 0xa757, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e,\r
-+      0x00ce, 0x009e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000,\r
-+      0x00ce, 0x97bd, 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19e7, 0x2001,\r
-+      0x1800, 0x2004, 0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010,\r
-+      0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066,\r
-+      0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x2c10,\r
-+      0x7638, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200, 0x9c06, 0x11e0,\r
-+      0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140,\r
-+      0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,\r
-+      0x660c, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,\r
-+      0x0000, 0x9085, 0x0001, 0x0020, 0x2c78, 0x600c, 0x2060, 0x08d8,\r
-+      0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005,\r
-+      0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006,\r
-+      0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x760c, 0x2660, 0x2678,\r
-+      0x8cff, 0x0904, 0xa898, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be,\r
-+      0x9206, 0x1904, 0xa893, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100,\r
-+      0x68c0, 0x9005, 0x0904, 0xa86f, 0x080c, 0xa273, 0x68c3, 0x0000,\r
-+      0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,\r
-+      0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006,\r
-+      0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,\r
-+      0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008,\r
-+      0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010,\r
-+      0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,\r
-+      0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xcd2a, 0x1158, 0x080c,\r
-+      0x31e8, 0x080c, 0xcd3b, 0x11f0, 0x080c, 0xb813, 0x00d8, 0x080c,\r
-+      0xa7bc, 0x08c0, 0x080c, 0xcd3b, 0x1118, 0x080c, 0xb813, 0x0090,\r
-+      0x6014, 0x2048, 0x080c, 0xcb33, 0x0168, 0x6020, 0x9086, 0x0003,\r
-+      0x1508, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6c75,\r
-+      0x080c, 0xcd1e, 0x080c, 0xcfa2, 0x080c, 0xae92, 0x080c, 0xa692,\r
-+      0x00ce, 0x0804, 0xa818, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa818,\r
-+      0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,\r
-+      0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xe551,\r
-+      0x0c08, 0x00d6, 0x080c, 0x9cab, 0x7003, 0x0200, 0x7007, 0x0014,\r
-+      0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x1989, 0x20e9, 0x0000,\r
-+      0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027,\r
-+      0x7878, 0x080c, 0xa247, 0x00de, 0x0005, 0x080c, 0x9cab, 0x700b,\r
-+      0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff,\r
-+      0x7022, 0x782c, 0x7026, 0x7858, 0x9084, 0x00ff, 0x9085, 0x0200,\r
-+      0x7002, 0x7858, 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804,\r
-+      0xa247, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035,\r
-+      0x080c, 0xd1a8, 0x00de, 0x1904, 0xa946, 0x080c, 0x9c60, 0x7003,\r
-+      0x1300, 0x782c, 0x080c, 0xaa48, 0x2068, 0x6820, 0x9086, 0x0003,\r
-+      0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0xadcb, 0x11d8, 0x9286,\r
-+      0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286,\r
-+      0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284,\r
-+      0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f,\r
-+      0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814,\r
-+      0x700e, 0x00c0, 0x6098, 0x700e, 0x00a8, 0x080c, 0xadcb, 0x1130,\r
-+      0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6, 0x2069,\r
-+      0x181f, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010,\r
-+      0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, 0x000c,\r
-+      0x001e, 0x00de, 0x080c, 0xa247, 0x00be, 0x0005, 0x781b, 0x0001,\r
-+      0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005, 0x792c, 0x9180,\r
-+      0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003, 0x0904,\r
-+      0xa9c0, 0x9186, 0x0005, 0x0904, 0xa9a9, 0x9186, 0x0004, 0x05d8,\r
-+      0x9186, 0x0008, 0x0904, 0xa9b1, 0x7807, 0x0037, 0x782f, 0x0003,\r
-+      0x7817, 0x1700, 0x080c, 0xaa25, 0x0005, 0x080c, 0xa9e6, 0x00d6,\r
-+      0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800, 0x0002, 0xa98a,\r
-+      0xa995, 0xa98c, 0xa995, 0xa991, 0xa98a, 0xa98a, 0xa995, 0xa995,\r
-+      0xa995, 0xa995, 0xa98a, 0xa98a, 0xa98a, 0xa98a, 0xa98a, 0xa995,\r
-+      0xa98a, 0xa995, 0x080c, 0x0dd5, 0x6824, 0xd0e4, 0x0110, 0xd0cc,\r
-+      0x0110, 0x900e, 0x0010, 0x2009, 0x2000, 0x682c, 0x7022, 0x6830,\r
-+      0x7026, 0x0804, 0xa9df, 0x080c, 0xa9e6, 0x00d6, 0x0026, 0x792c,\r
-+      0x2168, 0x2009, 0x4000, 0x6a00, 0x9286, 0x0002, 0x1108, 0x900e,\r
-+      0x04b0, 0x04e1, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000,\r
-+      0x0470, 0x04a1, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000,\r
-+      0x9286, 0x0005, 0x0118, 0x9286, 0x0002, 0x1108, 0x900e, 0x00f8,\r
-+      0x0429, 0x00d6, 0x0026, 0x792c, 0x2168, 0x6814, 0x0096, 0x2048,\r
-+      0xa9ac, 0xa834, 0x9112, 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022,\r
-+      0x7226, 0x792c, 0x9180, 0x0000, 0x2004, 0x908e, 0x0002, 0x0130,\r
-+      0x908e, 0x0004, 0x0118, 0x2009, 0x4000, 0x0008, 0x900e, 0x712a,\r
-+      0x60c3, 0x0018, 0x002e, 0x00de, 0x0804, 0xa247, 0x00b6, 0x0036,\r
-+      0x0046, 0x0056, 0x0066, 0x080c, 0x9cab, 0x9006, 0x7003, 0x0200,\r
-+      0x7938, 0x710a, 0x793c, 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c,\r
-+      0xadcb, 0x1118, 0x9092, 0x007e, 0x0268, 0x00d6, 0x2069, 0x181f,\r
-+      0x2d2c, 0x8d68, 0x2d34, 0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14,\r
-+      0x00de, 0x0028, 0x901e, 0x6498, 0x2029, 0x0000, 0x6634, 0x782c,\r
-+      0x9080, 0x0008, 0x2004, 0x9086, 0x0003, 0x1128, 0x7512, 0x7616,\r
-+      0x731a, 0x741e, 0x0020, 0x7312, 0x7416, 0x751a, 0x761e, 0x006e,\r
-+      0x005e, 0x004e, 0x003e, 0x00be, 0x0005, 0x080c, 0x9cab, 0x7003,\r
-+      0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008,\r
-+      0x0804, 0xa247, 0x080c, 0x9c57, 0x7003, 0x1400, 0x7838, 0x700a,\r
-+      0x0079, 0x783c, 0x700e, 0x782c, 0x7012, 0x7830, 0x7016, 0x7834,\r
-+      0x9084, 0x00ff, 0x8007, 0x701a, 0x60c3, 0x0010, 0x0804, 0xa247,\r
-+      0x00e6, 0x2071, 0x0240, 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6,\r
-+      0x2058, 0xb8cc, 0xd084, 0x0120, 0x7848, 0x702a, 0x7844, 0x702e,\r
-+      0x00be, 0x00fe, 0x000e, 0x00ee, 0x0005, 0x080c, 0x9ca2, 0x7003,\r
-+      0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804,\r
-+      0xa247, 0x0021, 0x60c3, 0x0000, 0x0804, 0xa247, 0x00d6, 0x080c,\r
-+      0xab21, 0xb810, 0x9085, 0x0300, 0x7002, 0xb814, 0x7006, 0x2069,\r
-+      0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x7013, 0x0819, 0x080c,\r
-+      0xa235, 0x721a, 0x2f10, 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c,\r
-+      0x00de, 0x0005, 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7,\r
-+      0x9575, 0x0026, 0x080c, 0x2ba5, 0x0228, 0x2011, 0x0101, 0x2204,\r
-+      0xc0c5, 0x2012, 0x002e, 0x080c, 0xa26a, 0x080c, 0x8570, 0x0005,\r
-+      0x0036, 0x0096, 0x00d6, 0x00e6, 0x7858, 0x2048, 0xaa7c, 0x9296,\r
-+      0x00c0, 0x9294, 0xfffd, 0xaa7e, 0xaa80, 0x9294, 0x0300, 0xaa82,\r
-+      0xa96c, 0x9194, 0x00ff, 0xab74, 0x9384, 0x00ff, 0x908d, 0xc200,\r
-+      0xa96e, 0x9384, 0xff00, 0x9215, 0xaa76, 0xa870, 0xaa78, 0xa87a,\r
-+      0xaa72, 0x00d6, 0x2069, 0x0200, 0x080c, 0xab21, 0x00de, 0x20e9,\r
-+      0x0000, 0x20a1, 0x0240, 0x20a9, 0x000a, 0xa860, 0x20e0, 0xa85c,\r
-+      0x9080, 0x001b, 0x2098, 0x4003, 0x60a3, 0x0035, 0xaa68, 0x9294,\r
-+      0x7000, 0x9286, 0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de,\r
-+      0x009e, 0x003e, 0x0005, 0x900e, 0x7814, 0x0096, 0x2048, 0xa87c,\r
-+      0xd0fc, 0x01c0, 0x9084, 0x0003, 0x11a8, 0x2001, 0x180c, 0x2004,\r
-+      0xd0bc, 0x0180, 0x7824, 0xd0cc, 0x1168, 0xd0c4, 0x1158, 0xa8a8,\r
-+      0x9005, 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5, 0x2102, 0x2009,\r
-+      0x19b2, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010, 0x2009, 0x0096,\r
-+      0x60ab, 0x0036, 0x6116, 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009,\r
-+      0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009, 0x000c, 0x0058,\r
-+      0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028, 0x2009, 0x000f,\r
-+      0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x080c, 0x9c60, 0x0016,\r
-+      0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138, 0x2001,\r
-+      0x1837, 0x2004, 0x9084, 0x0028, 0x1138, 0x2001, 0x197c, 0x2004,\r
-+      0x9086, 0xaaaa, 0x1904, 0xabc6, 0x7003, 0x5400, 0x00c6, 0x2061,\r
-+      0x1800, 0x607c, 0x9084, 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00,\r
-+      0x9105, 0x700a, 0x6080, 0x700e, 0xa998, 0x918c, 0xff00, 0x7112,\r
-+      0x20a9, 0x0004, 0x2009, 0x1805, 0x2e10, 0x9290, 0x0006, 0x2104,\r
-+      0x2012, 0x8108, 0x8210, 0x1f04, 0xab57, 0x20a9, 0x0004, 0x2009,\r
-+      0x1801, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xab61, 0xa860,\r
-+      0x20e0, 0xa85c, 0x9080, 0x0029, 0x2098, 0x2009, 0x0006, 0x20a9,\r
-+      0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x00d6,\r
-+      0x2069, 0x0200, 0x080c, 0xab0c, 0x00de, 0x2071, 0x0240, 0x2011,\r
-+      0x0240, 0x2009, 0x0002, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012,\r
-+      0x8210, 0x8109, 0x1dc0, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002,\r
-+      0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0xa85c, 0x9080, 0x0031,\r
-+      0x2098, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012,\r
-+      0x8210, 0x8109, 0x1dc0, 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056,\r
-+      0x60a7, 0x9575, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1168,\r
-+      0x080c, 0x73bc, 0x0150, 0x6028, 0xc0bd, 0x602a, 0x6014, 0x9084,\r
-+      0x1804, 0x9085, 0x0029, 0x6016, 0x0010, 0x080c, 0xa247, 0x080c,\r
-+      0x8570, 0x00de, 0x009e, 0x002e, 0x001e, 0x0005, 0x00e6, 0x2071,\r
-+      0x0240, 0x2001, 0x2200, 0x9085, 0x00ff, 0x7002, 0x7007, 0xffff,\r
-+      0x2071, 0x0100, 0x709b, 0x00ff, 0x00ee, 0x0804, 0xab3c, 0x080c,\r
-+      0x9c60, 0x0016, 0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013,\r
-+      0x0138, 0x7003, 0x5500, 0x00c6, 0xa89c, 0x9084, 0x00ff, 0xa998,\r
-+      0x810f, 0x918c, 0xff00, 0x9105, 0x700a, 0xa99c, 0x918c, 0xff00,\r
-+      0xa8a0, 0x9084, 0x00ff, 0x9105, 0x700e, 0xa998, 0x918c, 0xff00,\r
-+      0x2061, 0x1800, 0x607c, 0x9084, 0x00ff, 0x910d, 0x7112, 0x6180,\r
-+      0x7116, 0x2009, 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0029,\r
-+      0x2098, 0x2e10, 0x9290, 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007,\r
-+      0x2012, 0x8210, 0x8109, 0x1dc0, 0x20a9, 0x0004, 0x2009, 0x1805,\r
-+      0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xac18, 0x20a9, 0x0002,\r
-+      0x2009, 0x1801, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xac22,\r
-+      0x00d6, 0x0016, 0x2069, 0x0200, 0x080c, 0xab0c, 0x001e, 0x00de,\r
-+      0x2071, 0x0240, 0x20a9, 0x0002, 0x2009, 0x1803, 0x2011, 0x0240,\r
-+      0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xac38, 0x2009, 0x0008,\r
-+      0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dd0, 0x9006, 0x20a9,\r
-+      0x0008, 0x2012, 0x8210, 0x1f04, 0xac49, 0x00ce, 0x60c3, 0x004c,\r
-+      0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0xa247, 0x080c, 0x8570,\r
-+      0x00de, 0x009e, 0x002e, 0x001e, 0x0005, 0x00d6, 0x9290, 0x0018,\r
-+      0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8,\r
-+      0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008,\r
-+      0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810,\r
-+      0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6, 0x0096, 0x6014,\r
-+      0x2048, 0xa878, 0x6056, 0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946,\r
-+      0xa84a, 0x6023, 0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b,\r
-+      0xffff, 0xa817, 0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813,\r
-+      0x208e, 0x080c, 0x9155, 0x0126, 0x2091, 0x8000, 0x080c, 0x97b9,\r
-+      0x012e, 0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6,\r
-+      0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7,\r
-+      0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0xad2b, 0x7024, 0x9c06,\r
-+      0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xad02, 0x080c,\r
-+      0xa273, 0x68c3, 0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036,\r
-+      0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,\r
-+      0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x2069, 0x0100, 0x6824,\r
-+      0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110,\r
-+      0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,\r
-+      0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00,\r
-+      0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c,\r
-+      0xcd2a, 0x1158, 0x080c, 0x31e8, 0x080c, 0xcd3b, 0x11f0, 0x080c,\r
-+      0xb813, 0x00d8, 0x080c, 0xa7bc, 0x08c0, 0x080c, 0xcd3b, 0x1118,\r
-+      0x080c, 0xb813, 0x0090, 0x6014, 0x2048, 0x080c, 0xcb33, 0x0168,\r
-+      0x6020, 0x9086, 0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877,\r
-+      0x0000, 0x080c, 0x6c81, 0x080c, 0xcd1e, 0x080c, 0xcfa2, 0x080c,\r
-+      0xae92, 0x080c, 0xa692, 0x00ce, 0x0804, 0xacb3, 0x2c78, 0x600c,\r
-+      0x2060, 0x0804, 0xacb3, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e,\r
-+      0x006e, 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,\r
-+      0x6020, 0x9086, 0x0006, 0x1d08, 0x080c, 0xe551, 0x08f0, 0x00d6,\r
-+      0x0156, 0x080c, 0x9cab, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100,\r
-+      0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007,\r
-+      0x0000, 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110,\r
-+      0xc38d, 0x0060, 0x080c, 0x73bc, 0x1110, 0xc3ad, 0x0008, 0xc3a5,\r
-+      0x6adc, 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x080c,\r
-+      0x85d9, 0x20a9, 0x0006, 0x2011, 0xfff4, 0x2019, 0xfff5, 0x2071,\r
-+      0x0250, 0x2305, 0x2072, 0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398,\r
-+      0x0002, 0x9290, 0x0002, 0x1f04, 0xad71, 0x60c3, 0x0020, 0x080c,\r
-+      0xa247, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x9cab, 0x7a14,\r
-+      0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238,\r
-+      0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003,\r
-+      0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x19bd, 0x2204,\r
-+      0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120,\r
-+      0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7022,\r
-+      0x2001, 0x1820, 0x2004, 0x7026, 0x0030, 0x2001, 0x1818, 0x2004,\r
-+      0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099,\r
-+      0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c,\r
-+      0x015e, 0x0804, 0xa247, 0x0006, 0x2001, 0x1837, 0x2004, 0xd0ac,\r
-+      0x000e, 0x0005, 0x2011, 0x0003, 0x080c, 0xa653, 0x2011, 0x0002,\r
-+      0x080c, 0xa65d, 0x080c, 0xa540, 0x0036, 0x901e, 0x080c, 0xa5b6,\r
-+      0x003e, 0x0005, 0x080c, 0x331e, 0x0188, 0x0016, 0x00b6, 0x00c6,\r
-+      0x7010, 0x9085, 0x0020, 0x7012, 0x2009, 0x007e, 0x080c, 0x65ff,\r
-+      0xb85c, 0xc0ac, 0xb85e, 0x00ce, 0x00be, 0x001e, 0x0005, 0x2071,\r
-+      0x188d, 0x7000, 0x9005, 0x0140, 0x2001, 0x0976, 0x2071, 0x1800,\r
-+      0x7076, 0x707a, 0x706b, 0xffe0, 0x2071, 0x1800, 0x7074, 0x7056,\r
-+      0x705b, 0x1cd0, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091,\r
-+      0x8000, 0x7554, 0x9582, 0x0010, 0x0608, 0x7058, 0x2060, 0x6000,\r
-+      0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7068, 0x9c02, 0x1208,\r
-+      0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556,\r
-+      0x9ca8, 0x0018, 0x7068, 0x9502, 0x1230, 0x755a, 0x9085, 0x0001,\r
-+      0x012e, 0x00ee, 0x0005, 0x705b, 0x1cd0, 0x0cc0, 0x9006, 0x0cc0,\r
-+      0x00e6, 0x2071, 0x1800, 0x7554, 0x9582, 0x0010, 0x0600, 0x7058,\r
-+      0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7068,\r
-+      0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008,\r
-+      0x8529, 0x7556, 0x9ca8, 0x0018, 0x7068, 0x9502, 0x1228, 0x755a,\r
-+      0x9085, 0x0001, 0x00ee, 0x0005, 0x705b, 0x1cd0, 0x0cc8, 0x9006,\r
-+      0x0cc8, 0x9c82, 0x1cd0, 0x0a0c, 0x0dd5, 0x2001, 0x181a, 0x2004,\r
-+      0x9c02, 0x1a0c, 0x0dd5, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016,\r
-+      0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x6056,\r
-+      0x605a, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e,\r
-+      0x6042, 0x602a, 0x2061, 0x1800, 0x6054, 0x8000, 0x6056, 0x9086,\r
-+      0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x968d,\r
-+      0x012e, 0x0cc0, 0x0006, 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c,\r
-+      0xd084, 0x190c, 0x1a5e, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001,\r
-+      0x1986, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004,\r
-+      0x601a, 0x080c, 0xe80b, 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6,\r
-+      0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0001,\r
-+      0x0608, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0,\r
-+      0x0018, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98,\r
-+      0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x0018, 0x7068, 0x9502,\r
-+      0x1230, 0x755a, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b,\r
-+      0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002,\r
-+      0xaeef, 0xaef8, 0xaf13, 0xaf2e, 0xd256, 0xd273, 0xd28e, 0xaeef,\r
-+      0xaef8, 0x8d8b, 0xaf4a, 0xaeef, 0xaeef, 0xaeef, 0xaeef, 0x9186,\r
-+      0x0013, 0x1128, 0x080c, 0x9588, 0x080c, 0x968d, 0x0005, 0x0005,\r
-+      0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, 0x0013, 0x006e,\r
-+      0x0005, 0xaf11, 0xb67f, 0xb85a, 0xaf11, 0xb8f0, 0xb22d, 0xaf11,\r
-+      0xaf11, 0xb601, 0xbe55, 0xaf11, 0xaf11, 0xaf11, 0xaf11, 0xaf11,\r
-+      0xaf11, 0x080c, 0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c,\r
-+      0x0dd5, 0x0013, 0x006e, 0x0005, 0xaf2c, 0xc529, 0xaf2c, 0xaf2c,\r
-+      0xaf2c, 0xaf2c, 0xaf2c, 0xaf2c, 0xc4ce, 0xc6ab, 0xaf2c, 0xc56a,\r
-+      0xc5e9, 0xc56a, 0xc5e9, 0xaf2c, 0x080c, 0x0dd5, 0x6000, 0x9082,\r
-+      0x0016, 0x1a0c, 0x0dd5, 0x6000, 0x0002, 0xaf48, 0xbe9c, 0xbf81,\r
-+      0xc0b1, 0xc25c, 0xaf48, 0xaf48, 0xaf48, 0xbe70, 0xc45a, 0xc45d,\r
-+      0xaf48, 0xaf48, 0xaf48, 0xaf48, 0xc48c, 0xaf48, 0xaf48, 0xaf48,\r
-+      0x080c, 0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5,\r
-+      0x0013, 0x006e, 0x0005, 0xaf63, 0xaf63, 0xafa6, 0xb045, 0xb0da,\r
-+      0xaf63, 0xaf63, 0xaf63, 0xaf65, 0xaf63, 0xaf63, 0xaf63, 0xaf63,\r
-+      0xaf63, 0xaf63, 0xaf63, 0x080c, 0x0dd5, 0x9186, 0x004c, 0x0588,\r
-+      0x9186, 0x0003, 0x190c, 0x0dd5, 0x0096, 0x601c, 0xc0ed, 0x601e,\r
-+      0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000,\r
-+      0xc0b5, 0xa87e, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0x9006, 0xa836,\r
-+      0xa83a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,\r
-+      0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, 0x080c, 0x1bad,\r
-+      0x080c, 0x9155, 0x0126, 0x2091, 0x8000, 0x080c, 0x97b9, 0x012e,\r
-+      0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c,\r
-+      0xb0fc, 0x080c, 0xd248, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096,\r
-+      0x00f6, 0x2079, 0x1800, 0x7a90, 0x6014, 0x2048, 0xa87c, 0xd0ec,\r
-+      0x1110, 0x9290, 0x0018, 0xac78, 0xc4fc, 0x0046, 0xa8e0, 0x9005,\r
-+      0x1140, 0xa8dc, 0x921a, 0x0140, 0x0220, 0xa87b, 0x0007, 0x2010,\r
-+      0x0028, 0xa87b, 0x0015, 0x0010, 0xa87b, 0x0000, 0x8214, 0xa883,\r
-+      0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6, 0x00e6,\r
-+      0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100, 0x9086, 0x0015,\r
-+      0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086, 0x0016, 0x0118,\r
-+      0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423, 0x9405, 0x0002,\r
-+      0xb00d, 0xb00d, 0xb008, 0xb00b, 0xb00d, 0xb005, 0xaff8, 0xaff8,\r
-+      0xaff8, 0xaff8, 0xaff8, 0xaff8, 0xaff8, 0xaff8, 0xaff8, 0xaff8,\r
-+      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e,\r
-+      0x00fe, 0x009e, 0x00de, 0x080c, 0x0dd5, 0x080c, 0xbaad, 0x0028,\r
-+      0x080c, 0xbb92, 0x0010, 0x080c, 0xbc88, 0x00fe, 0x00ee, 0x00de,\r
-+      0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0xb1ba,\r
-+      0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006,\r
-+      0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,\r
-+      0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x125d,\r
-+      0x080c, 0xb37a, 0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e,\r
-+      0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804, 0xae61, 0x2001,\r
-+      0x002c, 0x900e, 0x080c, 0xb220, 0x0c70, 0x91b6, 0x0015, 0x0170,\r
-+      0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0dd5, 0x91b2,\r
-+      0x0050, 0x1a0c, 0x0dd5, 0x9182, 0x0047, 0x00ca, 0x2001, 0x0109,\r
-+      0x2004, 0xd08c, 0x0198, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016,\r
-+      0x0026, 0x080c, 0x90a2, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001,\r
-+      0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xafa6, 0x0005, 0xb078,\r
-+      0xb078, 0xb07a, 0xb0b0, 0xb078, 0xb078, 0xb078, 0xb078, 0xb0c3,\r
-+      0x080c, 0x0dd5, 0x00d6, 0x0016, 0x0096, 0x080c, 0x963d, 0x080c,\r
-+      0x97b9, 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0,\r
-+      0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001,\r
-+      0x0000, 0x900e, 0x080c, 0xb220, 0x080c, 0xae61, 0x00a8, 0x6003,\r
-+      0x0002, 0xa8a4, 0xa9a8, 0x9105, 0x1178, 0xa8ae, 0xa8b2, 0x0c78,\r
-+      0xa87f, 0x0020, 0xa88c, 0xa88a, 0xa8a4, 0xa8ae, 0xa8a8, 0xa8b2,\r
-+      0xa8c7, 0x0000, 0xa8cb, 0x0000, 0x009e, 0x001e, 0x00de, 0x0005,\r
-+      0x080c, 0x963d, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xcb35,\r
-+      0x0120, 0xa87b, 0x0006, 0x080c, 0x6c81, 0x009e, 0x00de, 0x080c,\r
-+      0xae61, 0x0804, 0x97b9, 0x080c, 0x963d, 0x080c, 0x31bf, 0x080c,\r
-+      0xd245, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xcb35, 0x0120,\r
-+      0xa87b, 0x0029, 0x080c, 0x6c81, 0x009e, 0x00de, 0x080c, 0xae61,\r
-+      0x0804, 0x97b9, 0x9182, 0x0047, 0x0002, 0xb0ea, 0xb0ec, 0xb0ea,\r
-+      0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea,\r
-+      0xb0ea, 0xb0ec, 0x080c, 0x0dd5, 0x00d6, 0x0096, 0x601f, 0x0000,\r
-+      0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x6c81,\r
-+      0x009e, 0x00de, 0x0804, 0xae61, 0x0026, 0x0036, 0x0056, 0x0066,\r
-+      0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x0fff, 0x000e, 0x090c,\r
-+      0x0dd5, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e,\r
-+      0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x7990, 0x9188,\r
-+      0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001,\r
-+      0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034,\r
-+      0x1228, 0x2011, 0x001f, 0x080c, 0xc730, 0x04c0, 0x2130, 0x2009,\r
-+      0x0034, 0x2011, 0x001f, 0x080c, 0xc730, 0x96b2, 0x0034, 0xb004,\r
-+      0x904d, 0x0110, 0x080c, 0x0fb1, 0x080c, 0x0fff, 0x01d0, 0x8528,\r
-+      0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d,\r
-+      0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xc730, 0x00b8, 0x96b2,\r
-+      0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xc730,\r
-+      0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,\r
-+      0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072, 0x0048, 0x2001, 0x0205,\r
-+      0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566, 0x2a48,\r
-+      0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x6c81, 0x000e, 0x2048,\r
-+      0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e,\r
-+      0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x0fff,\r
-+      0x000e, 0x090c, 0x0dd5, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019,\r
-+      0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079,\r
-+      0x1800, 0x7990, 0x810c, 0x9188, 0x000c, 0x9182, 0x001a, 0x0210,\r
-+      0x2009, 0x001a, 0x21a8, 0x810b, 0xa972, 0xac76, 0x2e98, 0xa85c,\r
-+      0x9080, 0x001f, 0x20a0, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080,\r
-+      0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x6c81, 0x009e, 0x00fe,\r
-+      0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001,\r
-+      0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200,\r
-+      0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021,\r
-+      0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018,\r
-+      0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x0fff, 0x2900, 0x009e,\r
-+      0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002,\r
-+      0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102,\r
-+      0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228,\r
-+      0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800,\r
-+      0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300,\r
-+      0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816,\r
-+      0x2e98, 0x2310, 0x84ff, 0x0904, 0xb1cf, 0x0804, 0xb1d1, 0x9085,\r
-+      0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005,\r
-+      0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c,\r
-+      0x6c75, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118,\r
-+      0x080c, 0xae61, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0dd5, 0x080c,\r
-+      0xae61, 0x0005, 0x20a9, 0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014,\r
-+      0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0, 0x009e, 0x4003,\r
-+      0x0136, 0x9080, 0x001b, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418,\r
-+      0x8318, 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8,\r
-+      0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003,\r
-+      0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xcb35,\r
-+      0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e,\r
-+      0x0804, 0xae61, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200,\r
-+      0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8cf, 0x0000, 0x00be, 0x6014,\r
-+      0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32,\r
-+      0x080c, 0xae61, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48,\r
-+      0x0cc8, 0x0006, 0x0016, 0x080c, 0xd230, 0x0188, 0x6014, 0x9005,\r
-+      0x1170, 0x600b, 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009,\r
-+      0x0022, 0x080c, 0xb657, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085,\r
-+      0x0001, 0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c,\r
-+      0x20e1, 0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001,\r
-+      0x2099, 0x0260, 0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a, 0xa804,\r
-+      0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003,\r
-+      0x2001, 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020,\r
-+      0x4003, 0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867,\r
-+      0x0103, 0x080c, 0xae61, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016,\r
-+      0x900e, 0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff,\r
-+      0x800c, 0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108,\r
-+      0x810b, 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c,\r
-+      0xc730, 0x080c, 0xcb35, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000,\r
-+      0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xae61, 0x001e, 0x009e,\r
-+      0x0005, 0x0016, 0x2009, 0x0000, 0x7030, 0x9086, 0x0200, 0x0110,\r
-+      0x2009, 0x0001, 0x0096, 0x6014, 0x904d, 0x090c, 0x0dd5, 0xa97a,\r
-+      0x080c, 0x6c81, 0x009e, 0x080c, 0xae61, 0x001e, 0x0005, 0x0016,\r
-+      0x0096, 0x7030, 0x9086, 0x0100, 0x1118, 0x2009, 0x0004, 0x0010,\r
-+      0x7034, 0x800c, 0x810b, 0x2011, 0x000c, 0x2019, 0x000c, 0x6014,\r
-+      0x2048, 0xa804, 0x0096, 0x9005, 0x0108, 0x2048, 0x080c, 0xc730,\r
-+      0x009e, 0x080c, 0xcb35, 0x0148, 0xa804, 0x9005, 0x1158, 0xa807,\r
-+      0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xae61, 0x009e,\r
-+      0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086, 0x0100,\r
-+      0x1118, 0x080c, 0xb813, 0x00e0, 0xa034, 0x8007, 0x800c, 0x8806,\r
-+      0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x000c,\r
-+      0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xaaa0, 0xab9c,\r
-+      0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x1243, 0x0019, 0x0d08,\r
-+      0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x0fff, 0x000e, 0x01b0,\r
-+      0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800,\r
-+      0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086,\r
-+      0x2940, 0x080c, 0x10e9, 0x008e, 0x9085, 0x0001, 0x009e, 0x0005,\r
-+      0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6,\r
-+      0x2258, 0xba10, 0x00be, 0x9206, 0x1520, 0x700c, 0x6210, 0x00b6,\r
-+      0x2258, 0xba14, 0x00be, 0x9206, 0x11e0, 0x6043, 0x0000, 0x2c68,\r
-+      0x0016, 0x2009, 0x0035, 0x080c, 0xd1a8, 0x001e, 0x1158, 0x622c,\r
-+      0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386,\r
-+      0x0006, 0x0128, 0x080c, 0xae61, 0x0020, 0x0039, 0x0010, 0x080c,\r
-+      0xb48c, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, 0x2048,\r
-+      0x9186, 0x0015, 0x0904, 0xb474, 0x918e, 0x0016, 0x1904, 0xb48a,\r
-+      0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300,\r
-+      0x1904, 0xb44e, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904,\r
-+      0xb431, 0x0804, 0xb488, 0x6808, 0x9086, 0xffff, 0x1904, 0xb476,\r
-+      0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c, 0xa940,\r
-+      0x9105, 0x1904, 0xb476, 0x6824, 0xd0b4, 0x1904, 0xb476, 0x080c,\r
-+      0xcd1e, 0x685c, 0xa882, 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e,\r
-+      0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c, 0x8f68, 0xa884,\r
-+      0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e, 0x1138, 0x00c6,\r
-+      0x2d60, 0x080c, 0xc85a, 0x00ce, 0x0804, 0xb488, 0x00c6, 0xa868,\r
-+      0xd0fc, 0x1118, 0x080c, 0x60ae, 0x0010, 0x080c, 0x64b4, 0x00ce,\r
-+      0x1904, 0xb476, 0x00c6, 0x2d60, 0x080c, 0xae61, 0x00ce, 0x0804,\r
-+      0xb488, 0x00c6, 0x080c, 0xaeaf, 0x0198, 0x6017, 0x0000, 0x6810,\r
-+      0x6012, 0x080c, 0xcfaa, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60,\r
-+      0x080c, 0xae61, 0x00ce, 0x080c, 0xaedc, 0x00ce, 0x0804, 0xb488,\r
-+      0x2001, 0x1988, 0x2004, 0x6842, 0x00ce, 0x04d0, 0x7008, 0x9086,\r
-+      0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc, 0xb902,\r
-+      0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c, 0xd1ea, 0x6007,\r
-+      0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x90f0, 0x080c,\r
-+      0x968d, 0x00ce, 0x00e8, 0x700c, 0x9086, 0x2a00, 0x1138, 0x2001,\r
-+      0x1988, 0x2004, 0x6842, 0x00a0, 0x0479, 0x00a0, 0x89ff, 0x090c,\r
-+      0x0dd5, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103, 0xa87b, 0x0003,\r
-+      0x080c, 0x6a9d, 0x080c, 0xcd1e, 0x080c, 0xae92, 0x00de, 0x00ce,\r
-+      0x080c, 0xae61, 0x009e, 0x0005, 0x9186, 0x0015, 0x1128, 0x2001,\r
-+      0x1988, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016, 0x1160, 0x00c6,\r
-+      0x2d00, 0x2060, 0x080c, 0xe80b, 0x080c, 0x86b2, 0x080c, 0xae61,\r
-+      0x00ce, 0x080c, 0xae61, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228,\r
-+      0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001, 0x1988, 0x2004, 0x6842,\r
-+      0x0804, 0xb506, 0x00c6, 0x2d60, 0x080c, 0xc75b, 0x00ce, 0x6804,\r
-+      0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001,\r
-+      0x6007, 0x0050, 0x080c, 0x90f0, 0x080c, 0x968d, 0x00ce, 0x04f0,\r
-+      0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c, 0x0dd5, 0x6800,\r
-+      0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac, 0x0178, 0xa843, 0x0fff,\r
-+      0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882, 0x2001, 0x0001, 0x6832,\r
-+      0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa87c, 0xd0b4, 0x1150,\r
-+      0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105,\r
-+      0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118, 0x7020,\r
-+      0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a, 0x2001, 0x0005,\r
-+      0x6832, 0x080c, 0xcea1, 0x080c, 0x968d, 0x0010, 0x080c, 0xae61,\r
-+      0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008,\r
-+      0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206,\r
-+      0x1904, 0xb571, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be,\r
-+      0x9206, 0x1904, 0xb571, 0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826,\r
-+      0x6a20, 0x9286, 0x0007, 0x0904, 0xb571, 0x9286, 0x0002, 0x0904,\r
-+      0xb571, 0x9286, 0x0000, 0x05e8, 0x6808, 0x633c, 0x9306, 0x15c8,\r
-+      0x2071, 0x026c, 0x9186, 0x0015, 0x0570, 0x918e, 0x0016, 0x1100,\r
-+      0x00c6, 0x6038, 0x2060, 0x6104, 0x9186, 0x004b, 0x01c0, 0x9186,\r
-+      0x004c, 0x01a8, 0x9186, 0x004d, 0x0190, 0x9186, 0x004e, 0x0178,\r
-+      0x9186, 0x0052, 0x0160, 0x6014, 0x0096, 0x2048, 0x080c, 0xcb35,\r
-+      0x090c, 0x0dd5, 0xa87b, 0x0003, 0x009e, 0x080c, 0xd1ea, 0x6007,\r
-+      0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x90f0, 0x080c,\r
-+      0x968d, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001, 0x1988, 0x2004,\r
-+      0x7042, 0x080c, 0xae61, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00b6,\r
-+      0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058, 0x91b6, 0x0015,\r
-+      0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02, 0x0460, 0x0096,\r
-+      0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010, 0x2019, 0x000a,\r
-+      0x20a9, 0x0004, 0x080c, 0xbe1d, 0x002e, 0x003e, 0x015e, 0x009e,\r
-+      0x1904, 0xb5e0, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90,\r
-+      0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c, 0xbe1d, 0x002e,\r
-+      0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a, 0x733c, 0xbb0e,\r
-+      0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e,\r
-+      0x00be, 0x0804, 0xb265, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a,\r
-+      0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,\r
-+      0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4,\r
-+      0x2031, 0x0000, 0x2041, 0x1243, 0x080c, 0xb37a, 0x0130, 0x00fe,\r
-+      0x009e, 0x080c, 0xae61, 0x00be, 0x0005, 0x080c, 0xb813, 0x0cb8,\r
-+      0x2b78, 0x00f6, 0x080c, 0x31bf, 0x080c, 0xd245, 0x00fe, 0x00c6,\r
-+      0x080c, 0xae0b, 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001,\r
-+      0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x654f,\r
-+      0x080c, 0x657b, 0x080c, 0x9138, 0x080c, 0x968d, 0x00ce, 0x0804,\r
-+      0xb5b3, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0dd5, 0x91b2, 0x0040,\r
-+      0x1a04, 0xb669, 0x0002, 0xb657, 0xb657, 0xb64d, 0xb657, 0xb657,\r
-+      0xb657, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b,\r
-+      0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b,\r
-+      0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b,\r
-+      0xb64b, 0xb64b, 0xb657, 0xb64b, 0xb657, 0xb657, 0xb64b, 0xb64b,\r
-+      0xb64b, 0xb64b, 0xb64b, 0xb64d, 0xb64b, 0xb64b, 0xb64b, 0xb64b,\r
-+      0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb657, 0xb657, 0xb64b,\r
-+      0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b,\r
-+      0xb657, 0xb64b, 0xb64b, 0x080c, 0x0dd5, 0x0066, 0x00b6, 0x6610,\r
-+      0x2658, 0xb8cc, 0xc08c, 0xb8ce, 0x00be, 0x006e, 0x0000, 0x6003,\r
-+      0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c, 0x9138, 0x0010,\r
-+      0x080c, 0x90f0, 0x0126, 0x2091, 0x8000, 0x080c, 0x968d, 0x012e,\r
-+      0x0005, 0x2600, 0x0002, 0xb657, 0xb657, 0xb67d, 0xb657, 0xb657,\r
-+      0xb67d, 0xb67d, 0xb67d, 0xb67d, 0xb657, 0xb67d, 0xb657, 0xb67d,\r
-+      0xb657, 0xb67d, 0xb67d, 0xb67d, 0xb67d, 0x080c, 0x0dd5, 0x6004,\r
-+      0x90b2, 0x0053, 0x1a0c, 0x0dd5, 0x91b6, 0x0013, 0x0904, 0xb741,\r
-+      0x91b6, 0x0027, 0x1904, 0xb6fc, 0x080c, 0x9588, 0x6004, 0x080c,\r
-+      0xcd2a, 0x01b0, 0x080c, 0xcd3b, 0x01a8, 0x908e, 0x0021, 0x0904,\r
-+      0xb6f9, 0x908e, 0x0022, 0x1130, 0x080c, 0xb291, 0x0904, 0xb6f5,\r
-+      0x0804, 0xb6f6, 0x908e, 0x003d, 0x0904, 0xb6f9, 0x0804, 0xb6ef,\r
-+      0x080c, 0x31e8, 0x2001, 0x0007, 0x080c, 0x654f, 0x6010, 0x00b6,\r
-+      0x2058, 0xb9a0, 0x00be, 0x080c, 0xb813, 0x9186, 0x007e, 0x1148,\r
-+      0x2001, 0x1837, 0x2014, 0xc285, 0x080c, 0x73bc, 0x1108, 0xc2ad,\r
-+      0x2202, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xe917,\r
-+      0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028,\r
-+      0x080c, 0x928b, 0x0076, 0x903e, 0x080c, 0x9168, 0x6010, 0x00b6,\r
-+      0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xe2eb, 0x007e, 0x003e,\r
-+      0x002e, 0x001e, 0x080c, 0xd245, 0x0016, 0x080c, 0xcfa2, 0x080c,\r
-+      0xae61, 0x001e, 0x080c, 0x32bb, 0x080c, 0x968d, 0x0030, 0x080c,\r
-+      0xcfa2, 0x080c, 0xae61, 0x080c, 0x968d, 0x0005, 0x080c, 0xb813,\r
-+      0x0cb0, 0x080c, 0xb84f, 0x0c98, 0x9186, 0x0014, 0x1db0, 0x080c,\r
-+      0x9588, 0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xb291, 0x0d68,\r
-+      0x080c, 0x31bf, 0x080c, 0xd245, 0x080c, 0xcd2a, 0x1190, 0x080c,\r
-+      0x31e8, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xb813,\r
-+      0x9186, 0x007e, 0x1128, 0x2001, 0x1837, 0x200c, 0xc185, 0x2102,\r
-+      0x0870, 0x080c, 0xcd3b, 0x1118, 0x080c, 0xb813, 0x0840, 0x6004,\r
-+      0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079,\r
-+      0x0000, 0x080c, 0x3556, 0x00fe, 0x00ee, 0x0804, 0xb6ef, 0x6004,\r
-+      0x908e, 0x0021, 0x0d48, 0x908e, 0x0022, 0x090c, 0xb813, 0x0804,\r
-+      0xb6ef, 0x90b2, 0x0040, 0x1a04, 0xb7ef, 0x2008, 0x0002, 0xb789,\r
-+      0xb78a, 0xb78d, 0xb790, 0xb793, 0xb796, 0xb787, 0xb787, 0xb787,\r
-+      0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787,\r
-+      0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787,\r
-+      0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb799, 0xb7a4, 0xb787,\r
-+      0xb7a6, 0xb7a4, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb7a4,\r
-+      0xb7a4, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787,\r
-+      0xb787, 0xb7d6, 0xb7a4, 0xb787, 0xb7a0, 0xb787, 0xb787, 0xb787,\r
-+      0xb7a1, 0xb787, 0xb787, 0xb787, 0xb7a4, 0xb7cd, 0xb787, 0x080c,\r
-+      0x0dd5, 0x00d0, 0x2001, 0x000b, 0x0410, 0x2001, 0x0003, 0x00f8,\r
-+      0x2001, 0x0005, 0x00e0, 0x2001, 0x0001, 0x00c8, 0x2001, 0x0009,\r
-+      0x00b0, 0x080c, 0x9588, 0x6003, 0x0005, 0x080c, 0x968d, 0x0070,\r
-+      0x0018, 0x0010, 0x080c, 0x654f, 0x0804, 0xb7e7, 0x080c, 0x9588,\r
-+      0x080c, 0xd248, 0x6003, 0x0004, 0x080c, 0x968d, 0x0005, 0x080c,\r
-+      0x654f, 0x080c, 0x9588, 0x6003, 0x0002, 0x0036, 0x2019, 0x1852,\r
-+      0x2304, 0x9084, 0xff00, 0x1120, 0x2001, 0x1986, 0x201c, 0x0040,\r
-+      0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318,\r
-+      0x631a, 0x003e, 0x080c, 0x968d, 0x0c08, 0x080c, 0x9588, 0x080c,\r
-+      0xcfa2, 0x080c, 0xae61, 0x080c, 0x968d, 0x08c0, 0x00e6, 0x00f6,\r
-+      0x2071, 0x189e, 0x2079, 0x0000, 0x080c, 0x3556, 0x00fe, 0x00ee,\r
-+      0x080c, 0x9588, 0x080c, 0xae61, 0x080c, 0x968d, 0x0838, 0x080c,\r
-+      0x9588, 0x6003, 0x0002, 0x080c, 0xd248, 0x0804, 0x968d, 0x2600,\r
-+      0x2008, 0x0002, 0xb806, 0xb7e7, 0xb804, 0xb7e7, 0xb7e7, 0xb804,\r
-+      0xb804, 0xb804, 0xb804, 0xb7e7, 0xb804, 0xb7e7, 0xb804, 0xb7e7,\r
-+      0xb804, 0xb804, 0xb804, 0xb804, 0x080c, 0x0dd5, 0x080c, 0x9588,\r
-+      0x0096, 0x6014, 0x2048, 0x080c, 0x6c81, 0x009e, 0x080c, 0xae61,\r
-+      0x080c, 0x968d, 0x0005, 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c,\r
-+      0xcb35, 0x0568, 0x6014, 0x2048, 0xa864, 0x9086, 0x0139, 0x11a8,\r
-+      0xa894, 0x9086, 0x0056, 0x1148, 0x080c, 0x5478, 0x0130, 0x2001,\r
-+      0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001, 0x0030, 0x900e,\r
-+      0x2011, 0x4005, 0x080c, 0xd10f, 0x0090, 0xa868, 0xd0fc, 0x0178,\r
-+      0xa807, 0x0000, 0x0016, 0x6004, 0x908e, 0x0021, 0x0168, 0x908e,\r
-+      0x003d, 0x0150, 0x001e, 0xa867, 0x0103, 0xa833, 0x0100, 0x001e,\r
-+      0x002e, 0x009e, 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc0, 0x0096,\r
-+      0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0xa823, 0x8001,\r
-+      0x009e, 0x0005, 0x00b6, 0x6610, 0x2658, 0xb804, 0x9084, 0x00ff,\r
-+      0x90b2, 0x000c, 0x1a0c, 0x0dd5, 0x6604, 0x96b6, 0x004d, 0x1120,\r
-+      0x080c, 0xd02e, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0043, 0x1120,\r
-+      0x080c, 0xd077, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x004b, 0x1120,\r
-+      0x080c, 0xd0a3, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0033, 0x1120,\r
-+      0x080c, 0xcfc4, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0028, 0x1120,\r
-+      0x080c, 0xcd74, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0029, 0x1120,\r
-+      0x080c, 0xcdb5, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x001f, 0x1120,\r
-+      0x080c, 0xb23a, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0000, 0x1118,\r
-+      0x080c, 0xb577, 0x04e0, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c,\r
-+      0xb272, 0x04a8, 0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0xb398,\r
-+      0x0470, 0x6604, 0x96b6, 0x0039, 0x1118, 0x080c, 0xb50c, 0x0438,\r
-+      0x6604, 0x96b6, 0x003d, 0x1118, 0x080c, 0xb2aa, 0x0400, 0x6604,\r
-+      0x96b6, 0x0044, 0x1118, 0x080c, 0xb2e6, 0x00c8, 0x6604, 0x96b6,\r
-+      0x0049, 0x1118, 0x080c, 0xb327, 0x0090, 0x6604, 0x96b6, 0x0041,\r
-+      0x1118, 0x080c, 0xb311, 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063,\r
-+      0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804, 0xbb39, 0x00be,\r
-+      0x0005, 0x080c, 0xaef7, 0x0cd8, 0xb8fc, 0xb8ff, 0xb8fc, 0xb946,\r
-+      0xb8fc, 0xbaad, 0xbb46, 0xb8fc, 0xb8fc, 0xbb0f, 0xb8fc, 0xbb25,\r
-+      0x0096, 0x601f, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867,\r
-+      0x0103, 0x009e, 0x0804, 0xae61, 0xa001, 0xa001, 0x0005, 0x00e6,\r
-+      0x2071, 0x1800, 0x7090, 0x9086, 0x0074, 0x1540, 0x080c, 0xe2bc,\r
-+      0x11b0, 0x6010, 0x00b6, 0x2058, 0x7030, 0xd08c, 0x0128, 0xb800,\r
-+      0xd0bc, 0x0110, 0xc0c5, 0xb802, 0x00f9, 0x00be, 0x2001, 0x0006,\r
-+      0x080c, 0x654f, 0x080c, 0x31e8, 0x080c, 0xae61, 0x0098, 0x2001,\r
-+      0x000a, 0x080c, 0x654f, 0x080c, 0x31e8, 0x6003, 0x0001, 0x6007,\r
-+      0x0001, 0x080c, 0x9138, 0x080c, 0x968d, 0x0020, 0x2001, 0x0001,\r
-+      0x080c, 0xba7d, 0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0160,\r
-+      0x9006, 0x080c, 0x653b, 0x2069, 0x1847, 0x6804, 0xd0a4, 0x0120,\r
-+      0x2001, 0x0006, 0x080c, 0x657b, 0x00de, 0x0005, 0x00b6, 0x0096,\r
-+      0x00d6, 0x2011, 0x1824, 0x2204, 0x9086, 0x0074, 0x1904, 0xba54,\r
-+      0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xbc93,\r
-+      0x0804, 0xb9b8, 0x080c, 0xbc88, 0x6010, 0x2058, 0xbaa0, 0x9286,\r
-+      0x0080, 0x1510, 0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084,\r
-+      0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011,\r
-+      0x4000, 0x080c, 0xd10f, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103,\r
-+      0xa833, 0x0200, 0x2001, 0x0006, 0x080c, 0x654f, 0x080c, 0x31e8,\r
-+      0x080c, 0xae61, 0x0804, 0xba57, 0x080c, 0xba65, 0x6014, 0x9005,\r
-+      0x0190, 0x2048, 0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff,\r
-+      0x9086, 0x0039, 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,\r
-+      0x080c, 0xd10f, 0x08f8, 0x080c, 0xba5b, 0x0160, 0x9006, 0x080c,\r
-+      0x653b, 0x2001, 0x0004, 0x080c, 0x657b, 0x2001, 0x0007, 0x080c,\r
-+      0x654f, 0x08a0, 0x2001, 0x0004, 0x080c, 0x654f, 0x6003, 0x0001,\r
-+      0x6007, 0x0003, 0x080c, 0x9138, 0x080c, 0x968d, 0x0804, 0xba57,\r
-+      0xb85c, 0xd0e4, 0x01d8, 0x080c, 0xcf44, 0x080c, 0x73bc, 0x0118,\r
-+      0xd0dc, 0x1904, 0xb97a, 0x2011, 0x1837, 0x2204, 0xc0ad, 0x2012,\r
-+      0x2001, 0x196d, 0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000,\r
-+      0x080c, 0x28b2, 0x78e2, 0x00fe, 0x0804, 0xb97a, 0x080c, 0xcf81,\r
-+      0x2011, 0x1837, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xe441,\r
-+      0x000e, 0x1904, 0xb97a, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c,\r
-+      0x654f, 0x9006, 0x080c, 0x653b, 0x00c6, 0x2001, 0x180f, 0x2004,\r
-+      0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800,\r
-+      0x700c, 0x9084, 0x00ff, 0x78e6, 0x707e, 0x7010, 0x78ea, 0x7082,\r
-+      0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c,\r
-+      0x2887, 0x00f6, 0x2100, 0x900e, 0x080c, 0x283e, 0x795e, 0x00fe,\r
-+      0x9186, 0x0081, 0x01d8, 0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef,\r
-+      0x00f6, 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5,\r
-+      0x780e, 0x00fe, 0x080c, 0x2887, 0x00f6, 0x2079, 0x1800, 0x7982,\r
-+      0x2100, 0x900e, 0x080c, 0x283e, 0x795e, 0x00fe, 0x8108, 0x080c,\r
-+      0x659e, 0x2b00, 0x00ce, 0x1904, 0xb97a, 0x6012, 0x2009, 0x180f,\r
-+      0x210c, 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff,\r
-+      0xb912, 0x2009, 0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c,\r
-+      0x654f, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,\r
-+      0x9138, 0x080c, 0x968d, 0x0018, 0x2001, 0x0001, 0x0431, 0x00de,\r
-+      0x009e, 0x00be, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120,\r
-+      0x2001, 0x1848, 0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xe970,\r
-+      0x0190, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118,\r
-+      0x9284, 0xff00, 0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80,\r
-+      0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, 0x2030, 0x9005, 0x0158,\r
-+      0x2001, 0x0007, 0x080c, 0x654f, 0x080c, 0x56e3, 0x1120, 0x2001,\r
-+      0x0007, 0x080c, 0x657b, 0x2600, 0x9005, 0x11b0, 0x6014, 0x0096,\r
-+      0x2048, 0xa868, 0x009e, 0xd0fc, 0x1178, 0x0036, 0x0046, 0x6010,\r
-+      0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, 0x2011, 0x8014,\r
-+      0x080c, 0x4b04, 0x004e, 0x003e, 0x080c, 0x31e8, 0x6020, 0x9086,\r
-+      0x000a, 0x1108, 0x0005, 0x0804, 0xae61, 0x00b6, 0x00e6, 0x0026,\r
-+      0x0016, 0x2071, 0x1800, 0x7090, 0x9086, 0x0014, 0x1904, 0xbb05,\r
-+      0x080c, 0x56e3, 0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046,\r
-+      0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4cbb, 0x004e,\r
-+      0x003e, 0x00d6, 0x6010, 0x2058, 0x080c, 0x669a, 0x080c, 0xb934,\r
-+      0x00de, 0x080c, 0xbd59, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005,\r
-+      0x0560, 0x2001, 0x0006, 0x080c, 0x654f, 0x0096, 0x6014, 0x904d,\r
-+      0x01d0, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001,\r
-+      0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xd10f, 0x0060, 0xa864,\r
-+      0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa867,\r
-+      0x0103, 0xa833, 0x0200, 0x009e, 0x080c, 0x31e8, 0x6020, 0x9086,\r
-+      0x000a, 0x0140, 0x080c, 0xae61, 0x0028, 0x080c, 0xb813, 0x9006,\r
-+      0x080c, 0xba7d, 0x001e, 0x002e, 0x00ee, 0x00be, 0x0005, 0x2011,\r
-+      0x1824, 0x2204, 0x9086, 0x0014, 0x1160, 0x2001, 0x0002, 0x080c,\r
-+      0x654f, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x9138, 0x0804,\r
-+      0x968d, 0x2001, 0x0001, 0x0804, 0xba7d, 0x2030, 0x2011, 0x1824,\r
-+      0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, 0x1120, 0x2001,\r
-+      0x0007, 0x080c, 0x654f, 0x0804, 0xae61, 0x2001, 0x0001, 0x0804,\r
-+      0xba7d, 0x0002, 0xb8fc, 0xbb51, 0xb8fc, 0xbb92, 0xb8fc, 0xbc3f,\r
-+      0xbb46, 0xb8fc, 0xb8fc, 0xbc53, 0xb8fc, 0xbc65, 0x6604, 0x9686,\r
-+      0x0003, 0x0904, 0xbaad, 0x96b6, 0x001e, 0x1110, 0x080c, 0xae61,\r
-+      0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xbc77, 0x11a0, 0x9006,\r
-+      0x080c, 0x653b, 0x080c, 0x31bf, 0x080c, 0xd245, 0x2001, 0x0002,\r
-+      0x080c, 0x654f, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x9138,\r
-+      0x080c, 0x968d, 0x0418, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009,\r
-+      0x1160, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0170,\r
-+      0x8001, 0xb842, 0x601b, 0x000a, 0x0088, 0x2009, 0x026f, 0x2104,\r
-+      0x9084, 0xff00, 0x9086, 0x1900, 0x1108, 0x08a0, 0x080c, 0x31bf,\r
-+      0x080c, 0xd245, 0x2001, 0x0001, 0x080c, 0xba7d, 0x00ce, 0x00de,\r
-+      0x00be, 0x0005, 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xbc85,\r
-+      0x00d6, 0x2069, 0x197c, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058,\r
-+      0xb8a0, 0x9086, 0x007e, 0x1138, 0x2069, 0x1820, 0x2d04, 0x8000,\r
-+      0x206a, 0x00de, 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x653b,\r
-+      0x2001, 0x0002, 0x080c, 0x654f, 0x6003, 0x0001, 0x6007, 0x0002,\r
-+      0x080c, 0x9138, 0x080c, 0x968d, 0x0804, 0xbc0f, 0x080c, 0xcb35,\r
-+      0x01b0, 0x6014, 0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138,\r
-+      0x6007, 0x0016, 0x2001, 0x0002, 0x080c, 0xd169, 0x00b0, 0x6014,\r
-+      0x2048, 0xa864, 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001,\r
-+      0x180e, 0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084,\r
-+      0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38, 0x080c, 0xb813, 0x2009,\r
-+      0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0520, 0x9686,\r
-+      0x000b, 0x01c8, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118,\r
-+      0x9686, 0x0009, 0x01c0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009,\r
-+      0x0190, 0x2001, 0x0004, 0x080c, 0x654f, 0x2001, 0x0028, 0x601a,\r
-+      0x6007, 0x0052, 0x0020, 0x2001, 0x0001, 0x080c, 0xba7d, 0x002e,\r
-+      0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160, 0x6014, 0x2048,\r
-+      0x080c, 0xcb35, 0x0140, 0xa864, 0x9086, 0x0139, 0x0118, 0xa868,\r
-+      0xd0fc, 0x0108, 0x0c40, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,\r
-+      0x9005, 0x0138, 0x8001, 0xb842, 0x601b, 0x000a, 0x6007, 0x0016,\r
-+      0x08f0, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071, 0x1800,\r
-+      0x080c, 0x5fad, 0x00ee, 0x0010, 0x080c, 0x31bf, 0x0860, 0x080c,\r
-+      0xbc85, 0x1160, 0x2001, 0x0004, 0x080c, 0x654f, 0x6003, 0x0001,\r
-+      0x6007, 0x0003, 0x080c, 0x9138, 0x0804, 0x968d, 0x080c, 0xb813,\r
-+      0x9006, 0x0804, 0xba7d, 0x0489, 0x1160, 0x2001, 0x0008, 0x080c,\r
-+      0x654f, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x9138, 0x0804,\r
-+      0x968d, 0x2001, 0x0001, 0x0804, 0xba7d, 0x00f9, 0x1160, 0x2001,\r
-+      0x000a, 0x080c, 0x654f, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,\r
-+      0x9138, 0x0804, 0x968d, 0x2001, 0x0001, 0x0804, 0xba7d, 0x2009,\r
-+      0x026e, 0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104,\r
-+      0x9084, 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005,\r
-+      0x00b6, 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x660e, 0x001e,\r
-+      0x00ce, 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036,\r
-+      0x0016, 0x6010, 0x2058, 0x2009, 0x1837, 0x2104, 0x9085, 0x0003,\r
-+      0x200a, 0x080c, 0xbd2b, 0x0560, 0x2009, 0x1837, 0x2104, 0xc0cd,\r
-+      0x200a, 0x080c, 0x696e, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a,\r
-+      0x080c, 0xe5ae, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019,\r
-+      0x002a, 0x2009, 0x0001, 0x080c, 0x318a, 0x00e6, 0x2071, 0x1800,\r
-+      0x080c, 0x2f96, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009,\r
-+      0x007f, 0x080c, 0x32bb, 0x8108, 0x1f04, 0xbcc9, 0x015e, 0x00ce,\r
-+      0x080c, 0xbc88, 0x2071, 0x0260, 0x2079, 0x0200, 0x7817, 0x0001,\r
-+      0x2001, 0x1837, 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc,\r
-+      0x0118, 0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001,\r
-+      0x1837, 0x2102, 0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069,\r
-+      0x181f, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x1820,\r
-+      0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e,\r
-+      0x9105, 0x2009, 0x182c, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008,\r
-+      0x080c, 0x2887, 0x080c, 0x73bc, 0x0170, 0x2071, 0x0260, 0x2069,\r
-+      0x1982, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054,\r
-+      0x680e, 0x080c, 0xcf44, 0x0040, 0x2001, 0x0006, 0x080c, 0x654f,\r
-+      0x080c, 0x31e8, 0x080c, 0xae61, 0x001e, 0x003e, 0x00de, 0x00ee,\r
-+      0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156,\r
-+      0x2019, 0x182c, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200,\r
-+      0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198,\r
-+      0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c,\r
-+      0xbe1d, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006,\r
-+      0x080c, 0xbe1d, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e, 0x009e,\r
-+      0x0005, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8,\r
-+      0x7038, 0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084,\r
-+      0x0f00, 0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac,\r
-+      0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6,\r
-+      0x0096, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126,\r
-+      0x2091, 0x8000, 0x2029, 0x19f0, 0x252c, 0x2021, 0x19f6, 0x2424,\r
-+      0x2061, 0x1cd0, 0x2071, 0x1800, 0x7254, 0x7074, 0x9202, 0x1a04,\r
-+      0xbde9, 0x080c, 0x8981, 0x0904, 0xbde2, 0x080c, 0xe5df, 0x0904,\r
-+      0xbde2, 0x6720, 0x9786, 0x0007, 0x0904, 0xbde2, 0x2500, 0x9c06,\r
-+      0x0904, 0xbde2, 0x2400, 0x9c06, 0x05e8, 0x3e08, 0x9186, 0x0002,\r
-+      0x1148, 0x6010, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb800, 0x00be,\r
-+      0xd0bc, 0x1580, 0x00c6, 0x6000, 0x9086, 0x0004, 0x1110, 0x080c,\r
-+      0x1a5e, 0x9786, 0x000a, 0x0148, 0x080c, 0xcd3b, 0x1130, 0x00ce,\r
-+      0x080c, 0xb813, 0x080c, 0xae92, 0x00e8, 0x6014, 0x2048, 0x080c,\r
-+      0xcb35, 0x01a8, 0x9786, 0x0003, 0x1530, 0xa867, 0x0103, 0xa87c,\r
-+      0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e,\r
-+      0xab7a, 0xa877, 0x0000, 0x080c, 0x6c75, 0x080c, 0xcd1e, 0x080c,\r
-+      0xae92, 0x00ce, 0x9ce0, 0x0018, 0x7068, 0x9c02, 0x1210, 0x0804,\r
-+      0xbd8c, 0x012e, 0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce,\r
-+      0x009e, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1118, 0x080c, 0xe551,\r
-+      0x0c30, 0x9786, 0x0009, 0x1148, 0x6000, 0x9086, 0x0004, 0x0d08,\r
-+      0x2009, 0x004c, 0x080c, 0xaedc, 0x08e0, 0x9786, 0x000a, 0x0938,\r
-+      0x0820, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04,\r
-+      0xbe09, 0x9006, 0x0005, 0x2304, 0x9102, 0x0218, 0x2001, 0x0001,\r
-+      0x0008, 0x9006, 0x918d, 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016,\r
-+      0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0,\r
-+      0x9300, 0x2098, 0x3518, 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e,\r
-+      0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e,\r
-+      0x0005, 0x220c, 0x9102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001,\r
-+      0x0000, 0x918d, 0x0001, 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c,\r
-+      0x810f, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xbe47,\r
-+      0x9006, 0x0005, 0x918d, 0x0001, 0x0005, 0x6004, 0x908a, 0x0053,\r
-+      0x1a0c, 0x0dd5, 0x080c, 0xcd2a, 0x0120, 0x080c, 0xcd3b, 0x0168,\r
-+      0x0028, 0x080c, 0x31e8, 0x080c, 0xcd3b, 0x0138, 0x080c, 0x9588,\r
-+      0x080c, 0xae61, 0x080c, 0x968d, 0x0005, 0x080c, 0xb813, 0x0cb0,\r
-+      0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005,\r
-+      0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c,\r
-+      0xbe8c, 0xbe8c, 0xbe8c, 0xbe8e, 0xbe8e, 0xbe8e, 0xbe8e, 0xbe8c,\r
-+      0xbe8c, 0xbe8c, 0xbe8e, 0xbe8c, 0x080c, 0x0dd5, 0x600b, 0xffff,\r
-+      0x6003, 0x0001, 0x6106, 0x080c, 0x90f0, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x968d, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,\r
-+      0x9082, 0x0040, 0x0804, 0xbf43, 0x9186, 0x0027, 0x1520, 0x080c,\r
-+      0x9588, 0x080c, 0x31bf, 0x080c, 0xd245, 0x0096, 0x6114, 0x2148,\r
-+      0x080c, 0xcb35, 0x0198, 0x080c, 0xcd3b, 0x1118, 0x080c, 0xb813,\r
-+      0x0068, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0xa97c,\r
-+      0xc1c5, 0xa97e, 0x080c, 0x6c81, 0x080c, 0xcd1e, 0x009e, 0x080c,\r
-+      0xae61, 0x0804, 0x968d, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082,\r
-+      0x0040, 0x04a0, 0x9186, 0x0046, 0x0150, 0x9186, 0x0045, 0x0138,\r
-+      0x9186, 0x0053, 0x0120, 0x9186, 0x0048, 0x190c, 0x0dd5, 0x2001,\r
-+      0x0109, 0x2004, 0xd084, 0x0508, 0x0126, 0x2091, 0x2800, 0x0006,\r
-+      0x0016, 0x0026, 0x0036, 0x00f6, 0x00e6, 0x00c6, 0x2079, 0x19e7,\r
-+      0x2071, 0x1800, 0x2061, 0x0100, 0x080c, 0x8fd5, 0x00ce, 0x00ee,\r
-+      0x00fe, 0x003e, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, 0x6000,\r
-+      0x9086, 0x0002, 0x1110, 0x0804, 0xbf81, 0x0005, 0x0002, 0xbf1d,\r
-+      0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b,\r
-+      0xbf1b, 0xbf1b, 0xbf38, 0xbf38, 0xbf38, 0xbf38, 0xbf1b, 0xbf38,\r
-+      0xbf1b, 0xbf38, 0xbf1b, 0x080c, 0x0dd5, 0x080c, 0x9588, 0x0096,\r
-+      0x6114, 0x2148, 0x080c, 0xcb35, 0x0168, 0xa867, 0x0103, 0xa87b,\r
-+      0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, 0x6c81,\r
-+      0x080c, 0xcd1e, 0x009e, 0x080c, 0xae61, 0x080c, 0x968d, 0x0005,\r
-+      0x080c, 0x9588, 0x080c, 0xcd3b, 0x090c, 0xb813, 0x080c, 0xae61,\r
-+      0x080c, 0x968d, 0x0005, 0x0002, 0xbf5a, 0xbf58, 0xbf58, 0xbf58,\r
-+      0xbf58, 0xbf58, 0xbf58, 0xbf58, 0xbf58, 0xbf58, 0xbf58, 0xbf71,\r
-+      0xbf71, 0xbf71, 0xbf71, 0xbf58, 0xbf7b, 0xbf58, 0xbf71, 0xbf58,\r
-+      0x080c, 0x0dd5, 0x0096, 0x080c, 0x9588, 0x6014, 0x2048, 0x2001,\r
-+      0x1988, 0x2004, 0x6042, 0xa97c, 0xd1ac, 0x0140, 0x6003, 0x0004,\r
-+      0xa87c, 0x9085, 0x0400, 0xa87e, 0x009e, 0x0005, 0x6003, 0x0002,\r
-+      0x0cb8, 0x080c, 0x9588, 0x080c, 0xd248, 0x080c, 0xd24d, 0x6003,\r
-+      0x000f, 0x0804, 0x968d, 0x080c, 0x9588, 0x080c, 0xae61, 0x0804,\r
-+      0x968d, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a,\r
-+      0x0005, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9f, 0xc07c,\r
-+      0xbf9d, 0xc0b0, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d,\r
-+      0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xc0b0, 0x080c, 0x0dd5, 0x00b6,\r
-+      0x0096, 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1528,\r
-+      0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xc06b, 0xa87b, 0x0000,\r
-+      0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,\r
-+      0x9115, 0x190c, 0xc245, 0x080c, 0x6a9d, 0x6210, 0x2258, 0xba3c,\r
-+      0x82ff, 0x0110, 0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904, 0xc04f,\r
-+      0x080c, 0xae61, 0x009e, 0x00be, 0x0005, 0x968c, 0x0c00, 0x0150,\r
-+      0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xc053, 0x7348, 0xab92,\r
-+      0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0508, 0x9186,\r
-+      0x0028, 0x1118, 0xa87b, 0x001c, 0x00e8, 0xd6dc, 0x01a0, 0xa87b,\r
-+      0x0015, 0xa87c, 0xd0ac, 0x0170, 0xa938, 0xaa34, 0x2100, 0x9205,\r
-+      0x0148, 0x7048, 0x9106, 0x1118, 0x704c, 0x9206, 0x0118, 0xa992,\r
-+      0xaa8e, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010,\r
-+      0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, 0x901e, 0xd6c4, 0x01d8,\r
-+      0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0x0804,\r
-+      0xbfa6, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210,\r
-+      0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025,\r
-+      0x080c, 0xc730, 0x003e, 0xd6cc, 0x0904, 0xbfbb, 0x7154, 0xa98a,\r
-+      0x81ff, 0x0904, 0xbfbb, 0x9192, 0x0021, 0x1278, 0x8304, 0x9098,\r
-+      0x0018, 0x2011, 0x0029, 0x080c, 0xc730, 0x2011, 0x0205, 0x2013,\r
-+      0x0000, 0x080c, 0xd1d5, 0x0804, 0xbfbb, 0xa868, 0xd0fc, 0x0120,\r
-+      0x2009, 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c, 0xc6cf,\r
-+      0x00ae, 0x080c, 0xd1d5, 0x080c, 0xc720, 0x0804, 0xbfbd, 0x080c,\r
-+      0xce2e, 0x0804, 0xbfca, 0xa87c, 0xd0ac, 0x0904, 0xbfd6, 0xa880,\r
-+      0xd0bc, 0x1904, 0xbfd6, 0x7348, 0xa838, 0x9306, 0x11c8, 0x734c,\r
-+      0xa834, 0x931e, 0x0904, 0xbfd6, 0xd6d4, 0x0190, 0xab38, 0x9305,\r
-+      0x0904, 0xbfd6, 0x0068, 0xa87c, 0xd0ac, 0x0904, 0xbfae, 0xa838,\r
-+      0xa934, 0x9105, 0x0904, 0xbfae, 0xa880, 0xd0bc, 0x1904, 0xbfae,\r
-+      0x080c, 0xce68, 0x0804, 0xbfca, 0x0096, 0x00f6, 0x6003, 0x0003,\r
-+      0x6007, 0x0043, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,\r
-+      0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0140, 0x6003, 0x0002, 0x00fe,\r
-+      0x009e, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0xa9ac, 0x910a,\r
-+      0x2300, 0xaab0, 0x9213, 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90,\r
-+      0xac36, 0xab3a, 0xae46, 0xad4a, 0x00fe, 0x6043, 0x0000, 0x2c10,\r
-+      0x080c, 0x1bad, 0x080c, 0x9155, 0x080c, 0x97b9, 0x009e, 0x0005,\r
-+      0x0005, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a,\r
-+      0x0005, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cf, 0xc165,\r
-+      0xc0cd, 0xc0cd, 0xc17c, 0xc208, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cd,\r
-+      0xc21d, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cd, 0x080c, 0x0dd5, 0x0076,\r
-+      0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114, 0x2150, 0x7644,\r
-+      0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e, 0x6210, 0x00b6,\r
-+      0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff,\r
-+      0x0904, 0xc160, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048,\r
-+      0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xc160, 0x080c,\r
-+      0x0fff, 0x090c, 0x0dd5, 0x2900, 0xb07a, 0xb77c, 0xc7cd, 0xb77e,\r
-+      0xa867, 0x0103, 0xb068, 0xa86a, 0xb06c, 0xa86e, 0xb070, 0xa872,\r
-+      0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c, 0xab8e,\r
-+      0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118,\r
-+      0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015, 0x0038,\r
-+      0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0xaf7e,\r
-+      0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190, 0x735c,\r
-+      0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,\r
-+      0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xc730,\r
-+      0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192,\r
-+      0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c,\r
-+      0xc730, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc,\r
-+      0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, 0xc6cf,\r
-+      0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x00f6, 0x00a6, 0x6003,\r
-+      0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014,\r
-+      0x2050, 0xb436, 0xb33a, 0xb646, 0xb54a, 0x00ae, 0x00fe, 0x2c10,\r
-+      0x080c, 0x1bad, 0x0804, 0xa240, 0x6003, 0x0002, 0x6004, 0x9086,\r
-+      0x0040, 0x11c8, 0x0096, 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0160,\r
-+      0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00, 0x2078, 0x080c, 0x1725,\r
-+      0x00fe, 0x6003, 0x0004, 0x0010, 0x6003, 0x0002, 0x009e, 0x080c,\r
-+      0x9588, 0x080c, 0x968d, 0x0096, 0x2001, 0x1988, 0x2004, 0x6042,\r
-+      0x080c, 0x963d, 0x080c, 0x97b9, 0x6114, 0x2148, 0xa97c, 0xd1e4,\r
-+      0x0904, 0xc203, 0xd1cc, 0x05a8, 0xa978, 0xa868, 0xd0fc, 0x0538,\r
-+      0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x0019, 0x20a0, 0x810e, 0x810e, 0x810f, 0x9184, 0x003f,\r
-+      0x20e0, 0x9184, 0xffc0, 0x9080, 0x0019, 0x2098, 0x0156, 0x20a9,\r
-+      0x0020, 0x4003, 0x015e, 0x000e, 0xa882, 0x000e, 0xa87e, 0x001e,\r
-+      0xa874, 0x0006, 0x2148, 0x080c, 0x0fb1, 0x001e, 0x0440, 0x0016,\r
-+      0x080c, 0x0fb1, 0x009e, 0xa974, 0x0016, 0x080c, 0xc720, 0x001e,\r
-+      0x00f0, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6, 0x0002,\r
-+      0x0180, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c, 0x0060, 0xd1dc,\r
-+      0x0118, 0xa87b, 0x0015, 0x0038, 0xd1d4, 0x0118, 0xa87b, 0x0007,\r
-+      0x0010, 0xa87b, 0x0000, 0x0016, 0x080c, 0x6a9d, 0x001e, 0xd1e4,\r
-+      0x1120, 0x080c, 0xae61, 0x009e, 0x0005, 0x080c, 0xce2e, 0x0cd8,\r
-+      0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x9588, 0x080c, 0x968d,\r
-+      0x2019, 0x0001, 0x080c, 0xa5b6, 0x6003, 0x0002, 0x080c, 0xd24d,\r
-+      0x080c, 0x963d, 0x080c, 0x97b9, 0x0005, 0x6004, 0x9086, 0x0040,\r
-+      0x1120, 0x080c, 0x9588, 0x080c, 0x968d, 0x2019, 0x0001, 0x080c,\r
-+      0xa5b6, 0x080c, 0x963d, 0x080c, 0x31bf, 0x080c, 0xd245, 0x0096,\r
-+      0x6114, 0x2148, 0x080c, 0xcb35, 0x0150, 0xa867, 0x0103, 0xa87b,\r
-+      0x0029, 0xa877, 0x0000, 0x080c, 0x6c81, 0x080c, 0xcd1e, 0x009e,\r
-+      0x080c, 0xae61, 0x080c, 0x97b9, 0x0005, 0xa87b, 0x0015, 0xd1fc,\r
-+      0x0180, 0xa87b, 0x0007, 0x8002, 0x8000, 0x810a, 0x9189, 0x0000,\r
-+      0x0006, 0x0016, 0x2009, 0x1a7a, 0x2104, 0x8000, 0x200a, 0x001e,\r
-+      0x000e, 0xa992, 0xa88e, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182,\r
-+      0x0040, 0x0208, 0x000a, 0x0005, 0xc278, 0xc278, 0xc278, 0xc278,\r
-+      0xc278, 0xc27a, 0xc278, 0xc278, 0xc320, 0xc278, 0xc278, 0xc278,\r
-+      0xc278, 0xc278, 0xc278, 0xc278, 0xc278, 0xc278, 0xc278, 0xc451,\r
-+      0x080c, 0x0dd5, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260,\r
-+      0x6114, 0x2150, 0x7644, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5,\r
-+      0xb77e, 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211,\r
-+      0xba3e, 0x00be, 0x86ff, 0x0904, 0xc319, 0x9694, 0xff00, 0x9284,\r
-+      0x0c00, 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300,\r
-+      0x0904, 0xc319, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118,\r
-+      0xc6c4, 0xb676, 0x0c38, 0x080c, 0x0fff, 0x090c, 0x0dd5, 0x2900,\r
-+      0xb07a, 0xb77c, 0x97bd, 0x0200, 0xb77e, 0xa867, 0x0103, 0xb068,\r
-+      0xa86a, 0xb06c, 0xa86e, 0xb070, 0xa872, 0x7044, 0x9084, 0xf000,\r
-+      0x9635, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c,\r
-+      0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028,\r
-+      0x1118, 0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015,\r
-+      0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000,\r
-+      0xaf7e, 0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190,\r
-+      0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019,\r
-+      0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c,\r
-+      0xc730, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8,\r
-+      0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029,\r
-+      0x080c, 0xc730, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068,\r
-+      0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c,\r
-+      0xc6cf, 0x080c, 0x1a3c, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005,\r
-+      0x2001, 0x1988, 0x2004, 0x6042, 0x0096, 0x6114, 0x2148, 0xa83c,\r
-+      0xa940, 0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, 0x0002,\r
-+      0xa97c, 0xd1e4, 0x0904, 0xc44c, 0x6043, 0x0000, 0x6010, 0x00b6,\r
-+      0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, 0xc41b,\r
-+      0xa978, 0xa868, 0xd0fc, 0x0904, 0xc3dc, 0x0016, 0xa87c, 0x0006,\r
-+      0xa880, 0x0006, 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6,\r
-+      0x0002, 0x0904, 0xc3aa, 0x9086, 0x0028, 0x1904, 0xc396, 0xa87b,\r
-+      0x001c, 0xb07b, 0x001c, 0x0804, 0xc3b2, 0x6024, 0xd0f4, 0x11d0,\r
-+      0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, 0x1120,\r
-+      0xa88c, 0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4, 0x1148, 0xa9ac,\r
-+      0xa834, 0x9102, 0x603a, 0xa9b0, 0xa838, 0x9103, 0x603e, 0x6024,\r
-+      0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c, 0x8000, 0xb83e,\r
-+      0x00be, 0x9006, 0xa876, 0xa892, 0xa88e, 0xa87c, 0xc0e4, 0xa87e,\r
-+      0xd0cc, 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878, 0x2048, 0x080c,\r
-+      0x0fb1, 0x009e, 0x080c, 0xce68, 0x0804, 0xc44c, 0xd1dc, 0x0158,\r
-+      0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xd0f8, 0x0118, 0xb174,\r
-+      0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b,\r
-+      0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,\r
-+      0x190c, 0xc245, 0xa87c, 0xb07e, 0xa890, 0xb092, 0xa88c, 0xb08e,\r
-+      0xa860, 0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0, 0x20a9, 0x0020,\r
-+      0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0, 0x9084, 0xffc0,\r
-+      0x9080, 0x0019, 0x2098, 0x4003, 0x00ae, 0x000e, 0xa882, 0x000e,\r
-+      0xa87e, 0x080c, 0xd1d5, 0x001e, 0xa874, 0x0006, 0x2148, 0x080c,\r
-+      0x0fb1, 0x001e, 0x0804, 0xc448, 0x0016, 0x00a6, 0x2150, 0xb174,\r
-+      0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028, 0x1128,\r
-+      0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158, 0xa87b,\r
-+      0x0015, 0xb07b, 0x0015, 0x080c, 0xd0f8, 0x0118, 0xb174, 0xc1dc,\r
-+      0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007,\r
-+      0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c,\r
-+      0xc245, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e, 0x00ae,\r
-+      0x080c, 0x0fb1, 0x009e, 0x080c, 0xd1d5, 0xa974, 0x0016, 0x080c,\r
-+      0xc720, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff,\r
-+      0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c,\r
-+      0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, 0xd0f8, 0x0118,\r
-+      0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b, 0x0007,\r
-+      0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,\r
-+      0x9115, 0x190c, 0xc245, 0xa974, 0x0016, 0x080c, 0x6a9d, 0x001e,\r
-+      0xd1e4, 0x1120, 0x080c, 0xae61, 0x009e, 0x0005, 0x080c, 0xce2e,\r
-+      0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, 0xd1e4, 0x190c, 0x1a4a,\r
-+      0x009e, 0x0005, 0x080c, 0x9588, 0x0010, 0x080c, 0x963d, 0x080c,\r
-+      0xcb35, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c, 0xcd3b, 0x1118,\r
-+      0x080c, 0xb813, 0x00a0, 0xa867, 0x0103, 0x2009, 0x180c, 0x210c,\r
-+      0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108, 0xa97a, 0x918e, 0x0029,\r
-+      0x1110, 0x080c, 0xe908, 0xa877, 0x0000, 0x080c, 0x6c81, 0x009e,\r
-+      0x080c, 0xae61, 0x080c, 0x968d, 0x0804, 0x97b9, 0xa87b, 0x0004,\r
-+      0x0c90, 0xa87b, 0x0004, 0x0c78, 0x9182, 0x0054, 0x1220, 0x9182,\r
-+      0x0040, 0x0208, 0x000a, 0x0005, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8,\r
-+      0xc4a8, 0xc4aa, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8,\r
-+      0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8,\r
-+      0x080c, 0x0dd5, 0x080c, 0x56d7, 0x01f8, 0x6014, 0x7144, 0x918c,\r
-+      0x0fff, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff, 0x0096,\r
-+      0x904d, 0x0188, 0xa87b, 0x0000, 0xa864, 0x9086, 0x0139, 0x0128,\r
-+      0xa867, 0x0103, 0xa976, 0xaa96, 0x0030, 0xa897, 0x4000, 0xa99a,\r
-+      0xaa9e, 0x080c, 0x6c81, 0x009e, 0x0804, 0xae61, 0x9182, 0x0085,\r
-+      0x0002, 0xc4e0, 0xc4de, 0xc4de, 0xc4ec, 0xc4de, 0xc4de, 0xc4de,\r
-+      0xc4de, 0xc4de, 0xc4de, 0xc4de, 0xc4de, 0xc4de, 0x080c, 0x0dd5,\r
-+      0x6003, 0x0001, 0x6106, 0x080c, 0x90f0, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x968d, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6,\r
-+      0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xcb23, 0x01a0,\r
-+      0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, 0x952e,\r
-+      0x1158, 0x00c6, 0x2d60, 0x080c, 0xc75b, 0x00ce, 0x0128, 0x6803,\r
-+      0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001,\r
-+      0x080c, 0x90f0, 0x080c, 0x968d, 0x9280, 0x0004, 0x00b6, 0x2058,\r
-+      0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6,\r
-+      0x2260, 0x080c, 0xce68, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e,\r
-+      0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c,\r
-+      0x0dd5, 0x908a, 0x0092, 0x1a0c, 0x0dd5, 0x9082, 0x0085, 0x00e2,\r
-+      0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x190c, 0x0dd5, 0x080c,\r
-+      0x9588, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb35, 0x0140, 0xa867,\r
-+      0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x6c81, 0x009e,\r
-+      0x080c, 0xae92, 0x0804, 0x968d, 0xc561, 0xc563, 0xc563, 0xc561,\r
-+      0xc561, 0xc561, 0xc561, 0xc561, 0xc561, 0xc561, 0xc561, 0xc561,\r
-+      0xc561, 0x080c, 0x0dd5, 0x080c, 0x9588, 0x080c, 0xae92, 0x080c,\r
-+      0x968d, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085,\r
-+      0x2008, 0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c, 0x9588, 0x080c,\r
-+      0x31bf, 0x080c, 0xd245, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb35,\r
-+      0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c,\r
-+      0x6c81, 0x080c, 0xcd1e, 0x009e, 0x080c, 0xae61, 0x080c, 0x968d,\r
-+      0x0005, 0x080c, 0xaef7, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c,\r
-+      0x9588, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb35, 0x0d60, 0xa867,\r
-+      0x0103, 0xa877, 0x0000, 0xa87b, 0x0006, 0xa880, 0xc0ec, 0xa882,\r
-+      0x08f0, 0x0002, 0xc5b9, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7,\r
-+      0xc5d1, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7, 0x080c,\r
-+      0x0dd5, 0x080c, 0x9588, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186,\r
-+      0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010,\r
-+      0x2001, 0x1987, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x968d,\r
-+      0x0005, 0x080c, 0x9588, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186,\r
-+      0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010,\r
-+      0x2001, 0x1987, 0x2004, 0x601a, 0x6003, 0x000e, 0x080c, 0x968d,\r
-+      0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x0012,\r
-+      0x0804, 0xaef7, 0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0xc601, 0xc64e,\r
-+      0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0x080c,\r
-+      0x0dd5, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,\r
-+      0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118,\r
-+      0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xc662, 0x080c, 0xcb35,\r
-+      0x1118, 0x080c, 0xcd1e, 0x0068, 0x6014, 0x2048, 0xa87c, 0xd0e4,\r
-+      0x1110, 0x080c, 0xcd1e, 0xa867, 0x0103, 0x080c, 0xd210, 0x080c,\r
-+      0x6c81, 0x00d6, 0x2c68, 0x080c, 0xae0b, 0x01d0, 0x6003, 0x0001,\r
-+      0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c, 0x613a,\r
-+      0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c, 0xcfaa,\r
-+      0x6954, 0x6156, 0x6023, 0x0001, 0x080c, 0x90f0, 0x080c, 0x968d,\r
-+      0x2d60, 0x00de, 0x080c, 0xae61, 0x009e, 0x0005, 0x6010, 0x00b6,\r
-+      0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00,\r
-+      0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118, 0x9186,\r
-+      0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xd1a8, 0x11f0, 0x080c,\r
-+      0xae0b, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001, 0x6910,\r
-+      0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff,\r
-+      0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954, 0x6156, 0x080c,\r
-+      0xcfaa, 0x080c, 0x90f0, 0x080c, 0x968d, 0x2d60, 0x00de, 0x0804,\r
-+      0xae61, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb35, 0x01c8, 0xa867,\r
-+      0x0103, 0xa880, 0xd0b4, 0x0128, 0xc0ec, 0xa882, 0xa87b, 0x0006,\r
-+      0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005,\r
-+      0x080c, 0xce2a, 0xa877, 0x0000, 0x080c, 0x6c81, 0x080c, 0xcd1e,\r
-+      0x009e, 0x0804, 0xae61, 0x0016, 0x0096, 0x6014, 0x2048, 0x080c,\r
-+      0xcb35, 0x0140, 0xa867, 0x0103, 0xa87b, 0x0028, 0xa877, 0x0000,\r
-+      0x080c, 0x6c81, 0x009e, 0x001e, 0x9186, 0x0013, 0x0148, 0x9186,\r
-+      0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xaef7, 0x0030,\r
-+      0x080c, 0x9588, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005, 0x0056,\r
-+      0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208,\r
-+      0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009,\r
-+      0x0020, 0x2011, 0x0029, 0x080c, 0xc730, 0x96b2, 0x0020, 0xb004,\r
-+      0x904d, 0x0110, 0x080c, 0x0fb1, 0x080c, 0x0fff, 0x0520, 0x8528,\r
-+      0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d,\r
-+      0x1228, 0x2608, 0x2011, 0x001b, 0x0499, 0x00a8, 0x96b2, 0x003c,\r
-+      0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x0451, 0x0c28, 0x2001,\r
-+      0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566,\r
-+      0x95ac, 0x0000, 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae,\r
-+      0x852f, 0x95ad, 0x0003, 0xb566, 0x009e, 0x006e, 0x005e, 0x0005,\r
-+      0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055, 0x0130, 0xa807, 0x0000,\r
-+      0x080c, 0x6c81, 0x2a48, 0x0cb8, 0x080c, 0x6c81, 0x00ae, 0x0005,\r
-+      0x00f6, 0x2079, 0x0200, 0x7814, 0x9085, 0x0080, 0x7816, 0xd184,\r
-+      0x0108, 0x8108, 0x810c, 0x20a9, 0x0001, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300, 0x9e00, 0x2098, 0x4003,\r
-+      0x8318, 0x9386, 0x0020, 0x1148, 0x2018, 0x2300, 0x9e00, 0x2098,\r
-+      0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x8109, 0x1d80, 0x7817,\r
-+      0x0000, 0x00fe, 0x0005, 0x0066, 0x0126, 0x2091, 0x8000, 0x2031,\r
-+      0x0001, 0x6020, 0x9084, 0x000f, 0x0083, 0x012e, 0x006e, 0x0005,\r
-+      0x0126, 0x2091, 0x8000, 0x0066, 0x2031, 0x0000, 0x6020, 0x9084,\r
-+      0x000f, 0x001b, 0x006e, 0x012e, 0x0005, 0xc796, 0xc796, 0xc791,\r
-+      0xc7b8, 0xc784, 0xc791, 0xc7b8, 0xc791, 0xc784, 0x8ed9, 0xc791,\r
-+      0xc791, 0xc791, 0xc784, 0xc784, 0x080c, 0x0dd5, 0x0036, 0x2019,\r
-+      0x0010, 0x080c, 0xe134, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e,\r
-+      0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x0096, 0x86ff,\r
-+      0x11d8, 0x6014, 0x2048, 0x080c, 0xcb35, 0x01c0, 0xa864, 0x9086,\r
-+      0x0139, 0x1128, 0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, 0x900e,\r
-+      0x2001, 0x0005, 0x080c, 0x6ec0, 0x080c, 0xce2a, 0x080c, 0x6c75,\r
-+      0x080c, 0xae92, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0,\r
-+      0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0002, 0xc7ce, 0xc7fc,\r
-+      0xc7d0, 0xc81d, 0xc7f7, 0xc7ce, 0xc791, 0xc796, 0xc796, 0xc791,\r
-+      0xc791, 0xc791, 0xc791, 0xc791, 0xc791, 0xc791, 0x080c, 0x0dd5,\r
-+      0x86ff, 0x1510, 0x6020, 0x9086, 0x0006, 0x01f0, 0x0096, 0x6014,\r
-+      0x2048, 0x080c, 0xcb35, 0x0158, 0xa87c, 0xd0cc, 0x0130, 0x0096,\r
-+      0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e, 0x080c, 0xce2a, 0x009e,\r
-+      0x080c, 0xd1ea, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,\r
-+      0x080c, 0x90f0, 0x080c, 0x968d, 0x9085, 0x0001, 0x0005, 0x0066,\r
-+      0x080c, 0x1a5e, 0x006e, 0x08a0, 0x00e6, 0x2071, 0x19e7, 0x7024,\r
-+      0x9c06, 0x1120, 0x080c, 0xa540, 0x00ee, 0x0850, 0x6020, 0x9084,\r
-+      0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049, 0x0001,\r
-+      0x2c40, 0x080c, 0xa69c, 0x009e, 0x008e, 0x0010, 0x080c, 0xa43d,\r
-+      0x00ee, 0x1904, 0xc7d0, 0x0804, 0xc791, 0x0036, 0x00e6, 0x2071,\r
-+      0x19e7, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c, 0xa5b6, 0x00ee,\r
-+      0x003e, 0x0804, 0xc7d0, 0x080c, 0xa7cc, 0x00ee, 0x003e, 0x1904,\r
-+      0xc7d0, 0x0804, 0xc791, 0x00c6, 0x6020, 0x9084, 0x000f, 0x0013,\r
-+      0x00ce, 0x0005, 0xc850, 0xc919, 0xca80, 0xc85a, 0xae92, 0xc850,\r
-+      0xe126, 0xd252, 0xc919, 0x8eab, 0xcaff, 0xc849, 0xc849, 0xc849,\r
-+      0xc849, 0x080c, 0x0dd5, 0x080c, 0xcd3b, 0x1110, 0x080c, 0xb813,\r
-+      0x0005, 0x080c, 0x9588, 0x080c, 0x968d, 0x0804, 0xae61, 0x601b,\r
-+      0x0001, 0x0005, 0x080c, 0xcb35, 0x0130, 0x6014, 0x0096, 0x2048,\r
-+      0x2c00, 0xa896, 0x009e, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5,\r
-+      0x0002, 0xc879, 0xc87b, 0xc89f, 0xc8b3, 0xc8d7, 0xc879, 0xc850,\r
-+      0xc850, 0xc850, 0xc8b3, 0xc8b3, 0xc879, 0xc879, 0xc879, 0xc879,\r
-+      0xc8bd, 0x080c, 0x0dd5, 0x00e6, 0x6014, 0x0096, 0x2048, 0xa880,\r
-+      0xc0b5, 0xa882, 0x009e, 0x2071, 0x19e7, 0x7024, 0x9c06, 0x01a0,\r
-+      0x080c, 0xa43d, 0x080c, 0xd1ea, 0x6007, 0x0085, 0x6003, 0x000b,\r
-+      0x6023, 0x0002, 0x2001, 0x1987, 0x2004, 0x601a, 0x080c, 0x90f0,\r
-+      0x080c, 0x968d, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8, 0x0096,\r
-+      0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c, 0xd1ea,\r
-+      0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x90f0,\r
-+      0x080c, 0x968d, 0x0005, 0x0096, 0x601b, 0x0001, 0x6014, 0x2048,\r
-+      0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c, 0x56d7, 0x01a8,\r
-+      0x6014, 0x0096, 0x904d, 0x0180, 0xa864, 0xa867, 0x0103, 0xa87b,\r
-+      0x0006, 0x9086, 0x0139, 0x1140, 0xa867, 0x0139, 0xa897, 0x4005,\r
-+      0xa89b, 0x0004, 0x080c, 0x6c81, 0x009e, 0x0804, 0xae61, 0x6014,\r
-+      0x0096, 0x904d, 0x05c8, 0xa97c, 0xd1e4, 0x05b0, 0x2001, 0x180f,\r
-+      0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884, 0x009e, 0x8003,\r
-+      0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0030, 0x2c08, 0x080c,\r
-+      0x15ee, 0x2001, 0x030c, 0x2004, 0x9086, 0x0041, 0x11a0, 0x6014,\r
-+      0x0096, 0x904d, 0x090c, 0x0dd5, 0xa880, 0xd0f4, 0x1130, 0xc0f5,\r
-+      0xa882, 0x009e, 0x601b, 0x0002, 0x0070, 0x009e, 0x2001, 0x0037,\r
-+      0x2c08, 0x080c, 0x15ee, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009,\r
-+      0x0048, 0x080c, 0xaedc, 0x0005, 0x009e, 0x080c, 0x1a5e, 0x0804,\r
-+      0xc89f, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x000b, 0x0005,\r
-+      0xc930, 0xc857, 0xc932, 0xc930, 0xc932, 0xc932, 0xc851, 0xc930,\r
-+      0xc84b, 0xc84b, 0xc930, 0xc930, 0xc930, 0xc930, 0xc930, 0xc930,\r
-+      0x080c, 0x0dd5, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff,\r
-+      0x00be, 0x908a, 0x000c, 0x1a0c, 0x0dd5, 0x00b6, 0x0013, 0x00be,\r
-+      0x0005, 0xc94d, 0xca1a, 0xc94f, 0xc98f, 0xc94f, 0xc98f, 0xc94f,\r
-+      0xc95d, 0xc94d, 0xc98f, 0xc94d, 0xc97e, 0x080c, 0x0dd5, 0x6004,\r
-+      0x908e, 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002,\r
-+      0x0590, 0x908e, 0x0052, 0x0904, 0xca16, 0x6004, 0x080c, 0xcd3b,\r
-+      0x0904, 0xca33, 0x908e, 0x0004, 0x1110, 0x080c, 0x31e8, 0x908e,\r
-+      0x0021, 0x0904, 0xca37, 0x908e, 0x0022, 0x0904, 0xca7b, 0x908e,\r
-+      0x003d, 0x0904, 0xca37, 0x908e, 0x0039, 0x0904, 0xca3b, 0x908e,\r
-+      0x0035, 0x0904, 0xca3b, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001,\r
-+      0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,\r
-+      0x0110, 0x080c, 0x31bf, 0x080c, 0xb813, 0x0804, 0xae92, 0x00c6,\r
-+      0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xca07, 0x9186, 0x0002,\r
-+      0x1904, 0xc9dc, 0x2001, 0x1837, 0x2004, 0xd08c, 0x11c8, 0x080c,\r
-+      0x73bc, 0x11b0, 0x080c, 0xd230, 0x0138, 0x080c, 0x73df, 0x1120,\r
-+      0x080c, 0x72cc, 0x0804, 0xca64, 0x2001, 0x197d, 0x2003, 0x0001,\r
-+      0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x72ee, 0x0804, 0xca64,\r
-+      0x6010, 0x2058, 0x2001, 0x1837, 0x2004, 0xd0ac, 0x1904, 0xca64,\r
-+      0xb8a0, 0x9084, 0xff80, 0x1904, 0xca64, 0xb840, 0x9084, 0x00ff,\r
-+      0x9005, 0x0190, 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007,\r
-+      0x601b, 0x0398, 0x6043, 0x0000, 0x080c, 0xae0b, 0x0128, 0x2b00,\r
-+      0x6012, 0x6023, 0x0001, 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e,\r
-+      0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170,\r
-+      0x2009, 0x1837, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800,\r
-+      0x080c, 0x5fad, 0x00ee, 0x080c, 0xb813, 0x0030, 0x080c, 0xb813,\r
-+      0x080c, 0x31bf, 0x080c, 0xd245, 0x00e6, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x31e8, 0x012e, 0x00ee, 0x080c, 0xae92, 0x0005, 0x2001,\r
-+      0x0002, 0x080c, 0x654f, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,\r
-+      0x9138, 0x080c, 0x968d, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x31e8,\r
-+      0x0804, 0xc98b, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38,\r
-+      0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xc9dc,\r
-+      0x8001, 0xb842, 0x6003, 0x0001, 0x080c, 0x9138, 0x080c, 0x968d,\r
-+      0x00de, 0x00ce, 0x0898, 0x080c, 0xb813, 0x0804, 0xc98d, 0x080c,\r
-+      0xb84f, 0x0804, 0xc98d, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xd1a8,\r
-+      0x00de, 0x0118, 0x080c, 0xae61, 0x00f0, 0x6004, 0x8007, 0x6134,\r
-+      0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b,\r
-+      0x6023, 0x0002, 0x603c, 0x600a, 0x2001, 0x1987, 0x2004, 0x601a,\r
-+      0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, 0x080c,\r
-+      0x90f0, 0x080c, 0x968d, 0x0005, 0x00de, 0x00ce, 0x080c, 0xb813,\r
-+      0x080c, 0x31bf, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x31e8,\r
-+      0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000,\r
-+      0x012e, 0x00ee, 0x0005, 0x080c, 0xb291, 0x1904, 0xca33, 0x0005,\r
-+      0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0096, 0x00d6, 0x001b,\r
-+      0x00de, 0x009e, 0x0005, 0xca9b, 0xca9b, 0xca9b, 0xca9b, 0xca9b,\r
-+      0xca9b, 0xca9b, 0xca9b, 0xca9b, 0xc850, 0xca9b, 0xc857, 0xca9d,\r
-+      0xc857, 0xcaaa, 0xca9b, 0x080c, 0x0dd5, 0x6004, 0x9086, 0x008b,\r
-+      0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x90f0, 0x080c,\r
-+      0x968d, 0x0005, 0x080c, 0xd224, 0x0118, 0x080c, 0xd237, 0x0010,\r
-+      0x080c, 0xd245, 0x080c, 0xcd1e, 0x080c, 0xcb35, 0x0570, 0x080c,\r
-+      0x31bf, 0x080c, 0xcb35, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103,\r
-+      0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c,\r
-+      0x6c81, 0x2c68, 0x080c, 0xae0b, 0x0150, 0x6810, 0x6012, 0x080c,\r
-+      0xcfaa, 0x00c6, 0x2d60, 0x080c, 0xae92, 0x00ce, 0x0008, 0x2d60,\r
-+      0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,\r
-+      0x080c, 0x9138, 0x080c, 0x968d, 0x00c8, 0x080c, 0xd224, 0x0138,\r
-+      0x6034, 0x9086, 0x4000, 0x1118, 0x080c, 0x31bf, 0x08d0, 0x6034,\r
-+      0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035,\r
-+      0x1118, 0x080c, 0x31bf, 0x0868, 0x080c, 0xae92, 0x0005, 0x6000,\r
-+      0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0002, 0xcb15, 0xcb15, 0xcb17,\r
-+      0xcb17, 0xcb17, 0xcb15, 0xcb15, 0xae92, 0xcb15, 0xcb15, 0xcb15,\r
-+      0xcb15, 0xcb15, 0xcb15, 0xcb15, 0xcb15, 0x080c, 0x0dd5, 0x080c,\r
-+      0xa7cc, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c, 0x6c81,\r
-+      0x009e, 0x0804, 0xae61, 0x9284, 0x0007, 0x1158, 0x9282, 0x1cd0,\r
-+      0x0240, 0x2001, 0x181a, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001,\r
-+      0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014,\r
-+      0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110,\r
-+      0x080c, 0x10aa, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036,\r
-+      0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cd0, 0x2071, 0x1800,\r
-+      0x7354, 0x7074, 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c,\r
-+      0xd230, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004,\r
-+      0x1148, 0x080c, 0x31bf, 0x080c, 0xd245, 0x00c6, 0x080c, 0xae92,\r
-+      0x00ce, 0x0060, 0x080c, 0xcf24, 0x0148, 0x080c, 0xcd3b, 0x1110,\r
-+      0x080c, 0xb813, 0x00c6, 0x080c, 0xae61, 0x00ce, 0x9ce0, 0x0018,\r
-+      0x7068, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce,\r
-+      0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c,\r
-+      0x81ff, 0x0128, 0x2061, 0x1ab0, 0x6112, 0x080c, 0x31bf, 0x9006,\r
-+      0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0xae0b, 0x01b0, 0x6656, 0x2b00,\r
-+      0x6012, 0x080c, 0x56d7, 0x0118, 0x080c, 0xcc62, 0x0168, 0x080c,\r
-+      0xcfaa, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c, 0xaedc, 0x9085,\r
-+      0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126,\r
-+      0x2091, 0x8000, 0xbaa0, 0x080c, 0xaeaf, 0x0560, 0x6057, 0x0000,\r
-+      0x2b00, 0x6012, 0x080c, 0xcfaa, 0x6023, 0x0003, 0x0016, 0x080c,\r
-+      0x928b, 0x0076, 0x903e, 0x080c, 0x9168, 0x2c08, 0x080c, 0xe2eb,\r
-+      0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0xae61, 0x9085, 0x0001,\r
-+      0x0070, 0x080c, 0x56d7, 0x0128, 0xd18c, 0x1170, 0x080c, 0xcc62,\r
-+      0x0148, 0x2009, 0x004c, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e,\r
-+      0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009,\r
-+      0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016,\r
-+      0x080c, 0xae0b, 0x2c78, 0x0590, 0x7e56, 0x2b00, 0x7812, 0x7823,\r
-+      0x0003, 0x2021, 0x0005, 0x080c, 0xcc74, 0x9186, 0x004d, 0x0118,\r
-+      0x9186, 0x004e, 0x0148, 0x2001, 0x1980, 0x200c, 0xd1fc, 0x0168,\r
-+      0x2f60, 0x080c, 0xae61, 0x00d0, 0x2001, 0x197f, 0x200c, 0xd1fc,\r
-+      0x0120, 0x2f60, 0x080c, 0xae61, 0x0088, 0x2f60, 0x080c, 0x56d7,\r
-+      0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816,\r
-+      0x001e, 0x0016, 0x080c, 0xaedc, 0x9085, 0x0001, 0x001e, 0x004e,\r
-+      0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0xae0b,\r
-+      0x2c78, 0x0508, 0x7e56, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096,\r
-+      0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x197e, 0x200c, 0xd1fc,\r
-+      0x0120, 0x2f60, 0x080c, 0xae61, 0x0060, 0x2f60, 0x080c, 0x56d7,\r
-+      0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c,\r
-+      0xaedc, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900,\r
-+      0x7816, 0x0c98, 0x00c6, 0x080c, 0x4aa4, 0x00ce, 0x1120, 0x080c,\r
-+      0xae61, 0x9006, 0x0005, 0xa867, 0x0000, 0xa86b, 0x8000, 0x2900,\r
-+      0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091,\r
-+      0x8000, 0x080c, 0x6733, 0x0158, 0x2001, 0xcc79, 0x0006, 0x900e,\r
-+      0x2400, 0x080c, 0x6ec0, 0x080c, 0x6c81, 0x000e, 0x0807, 0x2418,\r
-+      0x080c, 0x9522, 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001,\r
-+      0x2608, 0x080c, 0x92a3, 0x008e, 0x080c, 0x9168, 0x2f08, 0x2648,\r
-+      0x080c, 0xe2eb, 0xb93c, 0x81ff, 0x090c, 0x9374, 0x080c, 0x968d,\r
-+      0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0xae0b, 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, 0xcfaa,\r
-+      0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f, 0x080c, 0xaedc,\r
-+      0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0xaeaf, 0x01b8, 0x660a, 0x2b08,\r
-+      0x6112, 0x080c, 0xcfaa, 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6,\r
-+      0x2c78, 0x080c, 0x1725, 0x00fe, 0x2009, 0x0021, 0x080c, 0xaedc,\r
-+      0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009,\r
-+      0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000, 0x080c, 0xae0b,\r
-+      0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0001,\r
-+      0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0xaedc, 0x9085, 0x0001,\r
-+      0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0xaeaf, 0x0188, 0x2b08, 0x6112, 0x080c,\r
-+      0xcfaa, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0000, 0x080c,\r
-+      0xaedc, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,\r
-+      0x2009, 0x0044, 0x0830, 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6,\r
-+      0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be,\r
-+      0x002e, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0002, 0x0140,\r
-+      0x908e, 0x0003, 0x0128, 0x908e, 0x0004, 0x0110, 0x9085, 0x0001,\r
-+      0x001e, 0x000e, 0x0005, 0x0006, 0x0096, 0x6020, 0x9086, 0x0004,\r
-+      0x0190, 0x6014, 0x904d, 0x080c, 0xcb35, 0x0168, 0xa864, 0x9086,\r
-+      0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128, 0xa868, 0xd0fc,\r
-+      0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x000e, 0x0005,\r
-+      0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xaeaf, 0x0198, 0x2b08,\r
-+      0x6112, 0x080c, 0xcfaa, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c,\r
-+      0x31bf, 0x2009, 0x0028, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e,\r
-+      0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011,\r
-+      0x1824, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xba65,\r
-+      0x00be, 0x080c, 0xbc88, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c,\r
-+      0x9138, 0x080c, 0x968d, 0x0078, 0x6014, 0x0096, 0x2048, 0xa868,\r
-+      0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xd169, 0x080c,\r
-+      0xb813, 0x080c, 0xae61, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c,\r
-+      0x0dd5, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b,\r
-+      0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81,\r
-+      0x012e, 0x009e, 0x080c, 0xae61, 0x0c30, 0x0096, 0x9186, 0x0016,\r
-+      0x1128, 0x2001, 0x0004, 0x080c, 0x654f, 0x00e8, 0x9186, 0x0015,\r
-+      0x1510, 0x2011, 0x1824, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010,\r
-+      0x00b6, 0x2058, 0x080c, 0x669a, 0x00be, 0x080c, 0xbd59, 0x1198,\r
-+      0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001,\r
-+      0x0006, 0x080c, 0x654f, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0170,\r
-+      0x080c, 0xb265, 0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0528,\r
-+      0x080c, 0xb813, 0x080c, 0xae61, 0x009e, 0x0005, 0x6014, 0x6310,\r
-+      0x2358, 0x904d, 0x090c, 0x0dd5, 0xa87b, 0x0000, 0xa883, 0x0000,\r
-+      0xa897, 0x4000, 0x900e, 0x080c, 0x681f, 0x1108, 0xc185, 0xb800,\r
-+      0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x6c81, 0x012e, 0x080c, 0xae61, 0x08f8, 0x6014, 0x904d, 0x090c,\r
-+      0x0dd5, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b,\r
-+      0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81,\r
-+      0x012e, 0x080c, 0xae61, 0x0840, 0xa878, 0x9086, 0x0005, 0x1108,\r
-+      0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005, 0x6043, 0x0000,\r
-+      0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x90f0,\r
-+      0x080c, 0x968d, 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800,\r
-+      0x00be, 0xd0bc, 0x0120, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce,\r
-+      0x0005, 0xc850, 0xce5a, 0xce5a, 0xce5d, 0xe5fd, 0xe618, 0xe61b,\r
-+      0xc850, 0xc850, 0xc850, 0xc850, 0xc850, 0xc850, 0xc850, 0xc850,\r
-+      0x080c, 0x0dd5, 0xa001, 0xa001, 0x0005, 0x0096, 0x6014, 0x904d,\r
-+      0x0118, 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e, 0x0005,\r
-+      0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, 0x2001,\r
-+      0x1834, 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c, 0xae0b,\r
-+      0x0508, 0x7810, 0x6012, 0x080c, 0xcfaa, 0x7820, 0x9086, 0x0003,\r
-+      0x0128, 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e,\r
-+      0x2f00, 0x603a, 0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003,\r
-+      0x0001, 0x7954, 0x6156, 0x080c, 0x90f0, 0x080c, 0x968d, 0x2f60,\r
-+      0x00fe, 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1988, 0x2004, 0x6042,\r
-+      0x0005, 0x0016, 0x0096, 0x6814, 0x2048, 0xa87c, 0xd0e4, 0x0180,\r
-+      0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000, 0xa88f, 0x0000,\r
-+      0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c, 0x0fb1,\r
-+      0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086,\r
-+      0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, 0xc085,\r
-+      0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, 0x6826,\r
-+      0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c, 0x9103,\r
-+      0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032,\r
-+      0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112, 0x6954, 0x6156,\r
-+      0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x90f0,\r
-+      0x080c, 0x968d, 0x009e, 0x001e, 0x0005, 0x6024, 0xd0d4, 0x0510,\r
-+      0xd0f4, 0x11f8, 0x6038, 0x940a, 0x603c, 0x9303, 0x0230, 0x9105,\r
-+      0x0120, 0x6024, 0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e, 0xac3e,\r
-+      0xab42, 0x0046, 0x0036, 0x2400, 0xacac, 0x9402, 0xa836, 0x2300,\r
-+      0xabb0, 0x9303, 0xa83a, 0x003e, 0x004e, 0x6024, 0xc0d4, 0x0000,\r
-+      0x6026, 0x0005, 0xd0f4, 0x1138, 0xa83c, 0x603a, 0xa840, 0x603e,\r
-+      0x6024, 0xc0f5, 0x6026, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e,\r
-+      0x0034, 0x01b8, 0x908e, 0x0035, 0x01a0, 0x908e, 0x0036, 0x0188,\r
-+      0x908e, 0x0037, 0x0170, 0x908e, 0x0038, 0x0158, 0x908e, 0x0039,\r
-+      0x0140, 0x908e, 0x003a, 0x0128, 0x908e, 0x003b, 0x0110, 0x9085,\r
-+      0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,\r
-+      0x00e6, 0x2001, 0x1982, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032,\r
-+      0x080c, 0x8f68, 0x2001, 0x1986, 0x82ff, 0x1110, 0x2011, 0x0014,\r
-+      0x2202, 0x2001, 0x1984, 0x200c, 0x8000, 0x2014, 0x2071, 0x196c,\r
-+      0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x8f68, 0x2001, 0x1987,\r
-+      0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1988, 0x9288,\r
-+      0x000a, 0x2102, 0x2001, 0x1a91, 0x2102, 0x2001, 0x0032, 0x080c,\r
-+      0x15ee, 0x080c, 0x6953, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e,\r
-+      0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1986, 0x2003, 0x0028,\r
-+      0x2001, 0x1987, 0x2003, 0x0014, 0x2071, 0x196c, 0x701b, 0x0000,\r
-+      0x701f, 0x07d0, 0x2001, 0x1988, 0x2009, 0x001e, 0x2102, 0x2001,\r
-+      0x1a91, 0x2102, 0x2001, 0x0032, 0x080c, 0x15ee, 0x00ee, 0x001e,\r
-+      0x000e, 0x0005, 0x0096, 0x6058, 0x904d, 0x0110, 0x080c, 0x1031,\r
-+      0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0xae0b, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900,\r
-+      0x6016, 0x2009, 0x0033, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e,\r
-+      0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071,\r
-+      0x1800, 0x9186, 0x0015, 0x1500, 0x7090, 0x9086, 0x0018, 0x11e0,\r
-+      0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x9920,\r
-+      0x01d8, 0x707c, 0xaa50, 0x9206, 0x1160, 0x7080, 0xaa54, 0x9206,\r
-+      0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, 0x080c,\r
-+      0x3208, 0x080c, 0xb265, 0x0020, 0x080c, 0xb813, 0x080c, 0xae61,\r
-+      0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa54, 0x9206, 0x0d48,\r
-+      0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xae0b, 0x0188,\r
-+      0x2b08, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0001, 0x2900, 0x6016,\r
-+      0x2009, 0x004d, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e, 0x00ce,\r
-+      0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016,\r
-+      0x080c, 0xae0b, 0x0180, 0x2b08, 0x6112, 0x080c, 0xcfaa, 0x6023,\r
-+      0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0xaedc, 0x9085, 0x0001,\r
-+      0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, 0x0026,\r
-+      0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, 0x2071,\r
-+      0x1800, 0x9186, 0x0015, 0x1568, 0x7190, 0x6014, 0x2048, 0xa814,\r
-+      0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, 0x19a0, 0x2003,\r
-+      0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, 0x8007,\r
-+      0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b, 0x20a0,\r
-+      0x2001, 0x19a0, 0x0016, 0x200c, 0x080c, 0xd81b, 0x001e, 0xa804,\r
-+      0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, 0xa867, 0x0103,\r
-+      0x0010, 0x080c, 0xb813, 0x080c, 0xae61, 0x00fe, 0x00ee, 0x009e,\r
-+      0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x0096,\r
-+      0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, 0x7090,\r
-+      0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, 0x9920,\r
-+      0x01a8, 0x707c, 0xaa74, 0x9206, 0x1130, 0x7080, 0xaa78, 0x9206,\r
-+      0x1110, 0x080c, 0x31bf, 0x080c, 0xb265, 0x0020, 0x080c, 0xb813,\r
-+      0x080c, 0xae61, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa78,\r
-+      0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800,\r
-+      0x9186, 0x0015, 0x1550, 0x7090, 0x9086, 0x0004, 0x1530, 0x6014,\r
-+      0x2048, 0x2c78, 0x080c, 0x9920, 0x05f0, 0x707c, 0xaacc, 0x9206,\r
-+      0x1180, 0x7080, 0xaad0, 0x9206, 0x1160, 0x080c, 0x31bf, 0x0016,\r
-+      0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5687, 0x001e,\r
-+      0x0010, 0x080c, 0x5478, 0x080c, 0xcb35, 0x0508, 0xa87b, 0x0000,\r
-+      0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c, 0xcb35, 0x01b8,\r
-+      0x6014, 0x2048, 0x080c, 0x5478, 0x1d70, 0xa87b, 0x0030, 0xa883,\r
-+      0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126, 0x2091, 0x8000,\r
-+      0xa867, 0x0139, 0x080c, 0x6c81, 0x012e, 0x080c, 0xae61, 0x00fe,\r
-+      0x00ee, 0x009e, 0x0005, 0x7060, 0xaad0, 0x9206, 0x0930, 0x0888,\r
-+      0x0016, 0x0026, 0xa87c, 0xd0ac, 0x0178, 0xa938, 0xaa34, 0x2100,\r
-+      0x9205, 0x0150, 0xa890, 0x9106, 0x1118, 0xa88c, 0x9206, 0x0120,\r
-+      0xa992, 0xaa8e, 0x9085, 0x0001, 0x002e, 0x001e, 0x0005, 0x00b6,\r
-+      0x00d6, 0x0036, 0x080c, 0xcb35, 0x0904, 0xd165, 0x0096, 0x6314,\r
-+      0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580, 0x6310, 0x00c6,\r
-+      0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c, 0x681f,\r
-+      0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96, 0xa99a,\r
-+      0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0,\r
-+      0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7c,\r
-+      0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8c8, 0x9080,\r
-+      0x000a, 0x2098, 0x080c, 0x0f7c, 0x00ce, 0x0090, 0xaa96, 0x3918,\r
-+      0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016, 0x0110, 0xa89b,\r
-+      0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff, 0xa89e,\r
-+      0x080c, 0x6c75, 0x6017, 0x0000, 0x009e, 0x003e, 0x00de, 0x00be,\r
-+      0x0005, 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6, 0x6214,\r
-+      0x2248, 0x6210, 0x2258, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0,\r
-+      0xb814, 0x9084, 0x00ff, 0x900e, 0x080c, 0x283e, 0x2118, 0x831f,\r
-+      0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011,\r
-+      0x8018, 0x080c, 0x4b04, 0x00a8, 0x9096, 0x0001, 0x1148, 0x89ff,\r
-+      0x0180, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa, 0x0048,\r
-+      0x9096, 0x0002, 0x1130, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c,\r
-+      0xa8aa, 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e, 0x002e, 0x0005,\r
-+      0x00c6, 0x0026, 0x0016, 0x9186, 0x0035, 0x0110, 0x6a38, 0x0008,\r
-+      0x6a2c, 0x080c, 0xcb23, 0x01f0, 0x2260, 0x6120, 0x9186, 0x0003,\r
-+      0x0118, 0x9186, 0x0006, 0x1190, 0x6838, 0x9206, 0x0140, 0x683c,\r
-+      0x9206, 0x1160, 0x6108, 0x6838, 0x9106, 0x1140, 0x0020, 0x6008,\r
-+      0x693c, 0x9106, 0x1118, 0x6010, 0x6910, 0x9106, 0x001e, 0x002e,\r
-+      0x00ce, 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa974, 0xd1cc, 0x0188,\r
-+      0x918c, 0x00ff, 0x918e, 0x0002, 0x1160, 0xa9a8, 0x918c, 0x0f00,\r
-+      0x810f, 0x918e, 0x0001, 0x1128, 0xa834, 0xa938, 0x9115, 0x190c,\r
-+      0xc245, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036, 0x901e,\r
-+      0x0499, 0x01e0, 0x080c, 0xcb35, 0x01c8, 0x080c, 0xcd1e, 0x6037,\r
-+      0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa87c, 0x080c,\r
-+      0xcd3b, 0x1118, 0x080c, 0xb813, 0x0040, 0xa867, 0x0103, 0xa877,\r
-+      0x0000, 0x83ff, 0x1129, 0x080c, 0x6c81, 0x009e, 0x003e, 0x0005,\r
-+      0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882, 0x0048,\r
-+      0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c,\r
-+      0xce2a, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec,\r
-+      0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005,\r
-+      0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036,\r
-+      0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007,\r
-+      0x080c, 0x4cbb, 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005,\r
-+      0x2001, 0x1986, 0x2004, 0x601a, 0x0005, 0x2001, 0x1988, 0x2004,\r
-+      0x6042, 0x0005, 0x080c, 0xae61, 0x0804, 0x968d, 0x00b6, 0x0066,\r
-+      0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, 0x001b, 0x006e, 0x00be,\r
-+      0x0005, 0xd271, 0xd978, 0xdad5, 0xd271, 0xd271, 0xd271, 0xd271,\r
-+      0xd271, 0xd2a8, 0xdb57, 0xd271, 0xd271, 0xd271, 0xd271, 0xd271,\r
-+      0xd271, 0x080c, 0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c,\r
-+      0x0dd5, 0x0013, 0x006e, 0x0005, 0xd28c, 0xe0bf, 0xd28c, 0xd28c,\r
-+      0xd28c, 0xd28c, 0xd28c, 0xd28c, 0xe06c, 0xe113, 0xd28c, 0xe738,\r
-+      0xe76e, 0xe738, 0xe76e, 0xd28c, 0x080c, 0x0dd5, 0x6000, 0x9082,\r
-+      0x0016, 0x1a0c, 0x0dd5, 0x6000, 0x000a, 0x0005, 0xd2a6, 0xdd34,\r
-+      0xde24, 0xde46, 0xdf05, 0xd2a6, 0xdfe3, 0xdf8d, 0xdb63, 0xe042,\r
-+      0xe057, 0xd2a6, 0xd2a6, 0xd2a6, 0xd2a6, 0xd2a6, 0x080c, 0x0dd5,\r
-+      0x91b2, 0x0053, 0x1a0c, 0x0dd5, 0x2100, 0x91b2, 0x0040, 0x1a04,\r
-+      0xd6ec, 0x0002, 0xd2f2, 0xd4dd, 0xd2f2, 0xd2f2, 0xd2f2, 0xd4e6,\r
-+      0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2,\r
-+      0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2,\r
-+      0xd2f2, 0xd2f4, 0xd357, 0xd366, 0xd3ca, 0xd3f5, 0xd46e, 0xd4c8,\r
-+      0xd2f2, 0xd2f2, 0xd4e9, 0xd2f2, 0xd2f2, 0xd4fe, 0xd50b, 0xd2f2,\r
-+      0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd58e, 0xd2f2, 0xd2f2, 0xd5a2,\r
-+      0xd2f2, 0xd2f2, 0xd55d, 0xd2f2, 0xd2f2, 0xd2f2, 0xd5ba, 0xd2f2,\r
-+      0xd2f2, 0xd2f2, 0xd637, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2,\r
-+      0xd2f2, 0xd6b4, 0x080c, 0x0dd5, 0x080c, 0x6930, 0x1150, 0x2001,\r
-+      0x1837, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008,\r
-+      0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804,\r
-+      0xd4d6, 0x080c, 0x68cc, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016,\r
-+      0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x928b,\r
-+      0x0076, 0x903e, 0x080c, 0x9168, 0x2c08, 0x080c, 0xe2eb, 0x007e,\r
-+      0x001e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658,\r
-+      0x080c, 0x660e, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268,\r
-+      0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08,\r
-+      0x080c, 0xe997, 0x002e, 0x001e, 0x1178, 0x080c, 0xe21d, 0x1904,\r
-+      0xd3c2, 0x080c, 0xe1b9, 0x1120, 0x6007, 0x0008, 0x0804, 0xd4d6,\r
-+      0x6007, 0x0009, 0x0804, 0xd4d6, 0x080c, 0xe441, 0x0128, 0x080c,\r
-+      0xe21d, 0x0d78, 0x0804, 0xd3c2, 0x6017, 0x1900, 0x0c88, 0x080c,\r
-+      0x32e3, 0x1904, 0xd6e9, 0x6106, 0x080c, 0xe16e, 0x6007, 0x0006,\r
-+      0x0804, 0xd4d6, 0x6007, 0x0007, 0x0804, 0xd4d6, 0x080c, 0xe7aa,\r
-+      0x1904, 0xd6e9, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x00d6, 0x6610,\r
-+      0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001,\r
-+      0x0001, 0x080c, 0x653b, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,\r
-+      0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686,\r
-+      0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110,\r
-+      0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003,\r
-+      0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030, 0x9084, 0x0003,\r
-+      0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee,\r
-+      0x080c, 0xe281, 0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210,\r
-+      0x2258, 0xbaa0, 0x900e, 0x080c, 0x3208, 0x002e, 0x080c, 0x669a,\r
-+      0x6007, 0x000a, 0x00de, 0x0804, 0xd4d6, 0x6007, 0x000b, 0x00de,\r
-+      0x0804, 0xd4d6, 0x080c, 0x31bf, 0x080c, 0xd245, 0x6007, 0x0001,\r
-+      0x0804, 0xd4d6, 0x080c, 0xe7aa, 0x1904, 0xd6e9, 0x080c, 0x32e3,\r
-+      0x1904, 0xd6e9, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1948,\r
-+      0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003, 0x1910, 0x6610,\r
-+      0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, 0x2258,\r
-+      0xbaa0, 0x900e, 0x080c, 0x3208, 0x002e, 0x6007, 0x000c, 0x2001,\r
-+      0x0001, 0x080c, 0xe977, 0x0804, 0xd4d6, 0x080c, 0x6930, 0x1140,\r
-+      0x2001, 0x1837, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110,\r
-+      0x0804, 0xd301, 0x080c, 0x68cc, 0x6610, 0x2658, 0xbe04, 0x9684,\r
-+      0x00ff, 0x9082, 0x0006, 0x06c8, 0x1138, 0x0026, 0x2001, 0x0006,\r
-+      0x080c, 0x657b, 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686,\r
-+      0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xd3c2, 0x080c, 0xe28e,\r
-+      0x1120, 0x6007, 0x000e, 0x0804, 0xd4d6, 0x0046, 0x6410, 0x2458,\r
-+      0xbca0, 0x0046, 0x080c, 0x31bf, 0x080c, 0xd245, 0x004e, 0x0016,\r
-+      0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029,\r
-+      0x080c, 0xe5ae, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e,\r
-+      0x004e, 0x6007, 0x0001, 0x0804, 0xd4d6, 0x2001, 0x0001, 0x080c,\r
-+      0x653b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,\r
-+      0x1805, 0x2011, 0x0270, 0x080c, 0xbe09, 0x003e, 0x002e, 0x001e,\r
-+      0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004,\r
-+      0x0a04, 0xd3c2, 0x9682, 0x0007, 0x0a04, 0xd41e, 0x0804, 0xd3c2,\r
-+      0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xd4d6, 0x080c, 0x6930,\r
-+      0x1140, 0x2001, 0x1837, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008,\r
-+      0x1110, 0x0804, 0xd301, 0x080c, 0x68cc, 0x6610, 0x2658, 0xbe04,\r
-+      0x9684, 0x00ff, 0x9082, 0x0006, 0x0698, 0x0150, 0x96b4, 0xff00,\r
-+      0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xd3c2,\r
-+      0x080c, 0xe2bc, 0x1130, 0x080c, 0xe1b9, 0x1118, 0x6007, 0x0010,\r
-+      0x04e8, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x31bf,\r
-+      0x080c, 0xd245, 0x004e, 0x0016, 0x9006, 0x2009, 0x1848, 0x210c,\r
-+      0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xe5ae, 0x6010, 0x2058,\r
-+      0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0,\r
-+      0x080c, 0xe441, 0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,\r
-+      0x0978, 0x0804, 0xd3c2, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070,\r
-+      0x080c, 0x32e3, 0x1904, 0xd6e9, 0x080c, 0xe7aa, 0x1904, 0xd6e9,\r
-+      0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x6007, 0x0012, 0x6003, 0x0001,\r
-+      0x080c, 0x9138, 0x080c, 0x968d, 0x0005, 0x6007, 0x0001, 0x6003,\r
-+      0x0001, 0x080c, 0x9138, 0x080c, 0x968d, 0x0cb0, 0x6007, 0x0005,\r
-+      0x0c68, 0x080c, 0xe7aa, 0x1904, 0xd6e9, 0x080c, 0x32e3, 0x1904,\r
-+      0xd6e9, 0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x6007, 0x0020, 0x6003,\r
-+      0x0001, 0x080c, 0x9138, 0x080c, 0x968d, 0x0005, 0x080c, 0x32e3,\r
-+      0x1904, 0xd6e9, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x9138,\r
-+      0x080c, 0x968d, 0x0005, 0x080c, 0xe7aa, 0x1904, 0xd6e9, 0x080c,\r
-+      0x32e3, 0x1904, 0xd6e9, 0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x0016,\r
-+      0x0026, 0x00e6, 0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180,\r
-+      0x2c08, 0x080c, 0xcb23, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206,\r
-+      0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050,\r
-+      0x7240, 0x2c08, 0x9006, 0x080c, 0xe578, 0x1180, 0x7244, 0x9286,\r
-+      0xffff, 0x01b0, 0x2160, 0x6007, 0x0026, 0x6017, 0x1700, 0x7214,\r
-+      0x9296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068, 0x6020, 0x9086,\r
-+      0x0007, 0x1d80, 0x6004, 0x9086, 0x0024, 0x1110, 0x080c, 0xae61,\r
-+      0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x9138, 0x080c,\r
-+      0x968d, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c,\r
-+      0x653b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,\r
-+      0x1805, 0x2011, 0x0276, 0x080c, 0xbe09, 0x003e, 0x002e, 0x001e,\r
-+      0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xd4d6, 0x080c, 0xba7d,\r
-+      0x080c, 0x73bc, 0x1190, 0x0006, 0x0026, 0x0036, 0x080c, 0x73d6,\r
-+      0x1138, 0x080c, 0x76a4, 0x080c, 0x601a, 0x080c, 0x72ee, 0x0010,\r
-+      0x080c, 0x7394, 0x003e, 0x002e, 0x000e, 0x0005, 0x080c, 0x32e3,\r
-+      0x1904, 0xd6e9, 0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x6106, 0x080c,\r
-+      0xd8d2, 0x1120, 0x6007, 0x002b, 0x0804, 0xd4d6, 0x6007, 0x002c,\r
-+      0x0804, 0xd4d6, 0x080c, 0xe7aa, 0x1904, 0xd6e9, 0x080c, 0x32e3,\r
-+      0x1904, 0xd6e9, 0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x6106, 0x080c,\r
-+      0xd8d7, 0x1120, 0x6007, 0x002e, 0x0804, 0xd4d6, 0x6007, 0x002f,\r
-+      0x0804, 0xd4d6, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x00e6, 0x00d6,\r
-+      0x00c6, 0x6010, 0x2058, 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006,\r
-+      0x0158, 0x9184, 0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce,\r
-+      0x00de, 0x00ee, 0x0804, 0xd4dd, 0x080c, 0x56d3, 0xd0e4, 0x0904,\r
-+      0xd634, 0x2071, 0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108,\r
-+      0x720c, 0x080c, 0x696e, 0x0140, 0x6010, 0x2058, 0xb810, 0x9106,\r
-+      0x1118, 0xb814, 0x9206, 0x0510, 0x080c, 0x696a, 0x15b8, 0x2069,\r
-+      0x1800, 0x6880, 0x9206, 0x1590, 0x687c, 0x9106, 0x1578, 0x7210,\r
-+      0x080c, 0xcb23, 0x0590, 0x080c, 0xd7a1, 0x0578, 0x080c, 0xe62a,\r
-+      0x0560, 0x622e, 0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x90f0,\r
-+      0x080c, 0x968d, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286,\r
-+      0xffff, 0x0150, 0x080c, 0xcb23, 0x01c0, 0x9280, 0x0002, 0x2004,\r
-+      0x7110, 0x9106, 0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001,\r
-+      0x080c, 0xe578, 0x2c10, 0x2160, 0x0140, 0x0890, 0x6007, 0x0037,\r
-+      0x602f, 0x0009, 0x6017, 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f,\r
-+      0x0003, 0x6017, 0x1700, 0x0880, 0x6007, 0x0012, 0x0868, 0x080c,\r
-+      0x32e3, 0x1904, 0xd6e9, 0x6010, 0x2058, 0xb804, 0x9084, 0xff00,\r
-+      0x8007, 0x9086, 0x0006, 0x1904, 0xd4dd, 0x00e6, 0x00d6, 0x00c6,\r
-+      0x080c, 0x56d3, 0xd0e4, 0x0904, 0xd6ac, 0x2069, 0x1800, 0x2071,\r
-+      0x026c, 0x7008, 0x603a, 0x720c, 0x623e, 0x9286, 0xffff, 0x1150,\r
-+      0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001, 0x080c, 0xe578, 0x2c10,\r
-+      0x00ce, 0x05e8, 0x080c, 0xcb23, 0x05d0, 0x7108, 0x9280, 0x0002,\r
-+      0x2004, 0x9106, 0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c, 0xc75b,\r
-+      0x002e, 0x00ce, 0x7118, 0x918c, 0xff00, 0x810f, 0x9186, 0x0001,\r
-+      0x0178, 0x9186, 0x0005, 0x0118, 0x9186, 0x0007, 0x1198, 0x9280,\r
-+      0x0005, 0x2004, 0x9005, 0x0170, 0x080c, 0xd7a1, 0x0904, 0xd62d,\r
-+      0x0056, 0x7510, 0x7614, 0x080c, 0xe643, 0x005e, 0x00ce, 0x00de,\r
-+      0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00,\r
-+      0x6003, 0x0001, 0x080c, 0x90f0, 0x080c, 0x968d, 0x0c78, 0x6007,\r
-+      0x003b, 0x602f, 0x0003, 0x6017, 0x0300, 0x6003, 0x0001, 0x080c,\r
-+      0x90f0, 0x080c, 0x968d, 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b,\r
-+      0x6017, 0x0000, 0x0804, 0xd604, 0x00e6, 0x0026, 0x080c, 0x6930,\r
-+      0x0550, 0x080c, 0x68cc, 0x080c, 0xe81c, 0x1518, 0x2071, 0x1800,\r
-+      0x70dc, 0x9085, 0x0003, 0x70de, 0x00f6, 0x2079, 0x0100, 0x72b0,\r
-+      0x9284, 0x00ff, 0x707e, 0x78e6, 0x9284, 0xff00, 0x7280, 0x9205,\r
-+      0x7082, 0x78ea, 0x00fe, 0x70e7, 0x0000, 0x080c, 0x696e, 0x0120,\r
-+      0x2011, 0x1a00, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2f96,\r
-+      0x0010, 0x080c, 0xe84e, 0x002e, 0x00ee, 0x080c, 0xae61, 0x0804,\r
-+      0xd4dc, 0x080c, 0xae61, 0x0005, 0x2600, 0x0002, 0xd700, 0xd731,\r
-+      0xd742, 0xd700, 0xd700, 0xd702, 0xd753, 0xd700, 0xd700, 0xd700,\r
-+      0xd71f, 0xd700, 0xd700, 0xd700, 0xd75e, 0xd76b, 0xd79c, 0xd700,\r
-+      0x080c, 0x0dd5, 0x080c, 0xe7aa, 0x1d20, 0x080c, 0x32e3, 0x1d08,\r
-+      0x080c, 0xd8b6, 0x1148, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003,\r
-+      0x0001, 0x080c, 0x9138, 0x0005, 0x080c, 0x31bf, 0x080c, 0xd245,\r
-+      0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9138, 0x0005, 0x080c,\r
-+      0xe7aa, 0x1938, 0x080c, 0x32e3, 0x1920, 0x080c, 0xd8b6, 0x1d60,\r
-+      0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x9138,\r
-+      0x0005, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x2009, 0x0041, 0x080c,\r
-+      0xe857, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x9138, 0x080c,\r
-+      0x968d, 0x0005, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x2009, 0x0042,\r
-+      0x080c, 0xe857, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x9138,\r
-+      0x080c, 0x968d, 0x0005, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x2009,\r
-+      0x0046, 0x080c, 0xe857, 0x080c, 0xae61, 0x0005, 0x080c, 0xd7be,\r
-+      0x0904, 0xd6e9, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x9138,\r
-+      0x080c, 0x968d, 0x0005, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134,\r
-+      0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001, 0x1160, 0x7140,\r
-+      0x2001, 0x19bd, 0x2004, 0x9106, 0x11b0, 0x7144, 0x2001, 0x19be,\r
-+      0x2004, 0x9106, 0x0190, 0x9186, 0x0002, 0x1168, 0x2011, 0x0276,\r
-+      0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c,\r
-+      0xbe1d, 0x009e, 0x0110, 0x6017, 0x0001, 0x6003, 0x0001, 0x080c,\r
-+      0x9138, 0x080c, 0x968d, 0x0005, 0x6007, 0x0050, 0x703c, 0x6016,\r
-+      0x0ca0, 0x0016, 0x00e6, 0x2071, 0x0260, 0x00b6, 0x00c6, 0x2260,\r
-+      0x6010, 0x2058, 0xb8cc, 0xd084, 0x0150, 0x7128, 0x6048, 0x9106,\r
-+      0x1120, 0x712c, 0x6044, 0x9106, 0x0110, 0x9006, 0x0010, 0x9085,\r
-+      0x0001, 0x00ce, 0x00be, 0x00ee, 0x001e, 0x0005, 0x0016, 0x0096,\r
-+      0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091, 0x8000, 0x2071,\r
-+      0x1800, 0x7090, 0x908a, 0x00f9, 0x16e8, 0x20e1, 0x0000, 0x2001,\r
-+      0x19a0, 0x2003, 0x0000, 0x080c, 0x1018, 0x05a0, 0x2900, 0x6016,\r
-+      0x7090, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0, 0xa833, 0x001e,\r
-+      0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0,\r
-+      0x2001, 0x19a0, 0x0016, 0x200c, 0x0471, 0x001e, 0x2940, 0x080c,\r
-+      0x1018, 0x01c0, 0x2900, 0xa006, 0x2100, 0x81ff, 0x0180, 0x0c18,\r
-+      0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0,\r
-+      0x2001, 0x19a0, 0x0016, 0x200c, 0x00b1, 0x001e, 0x0000, 0x9085,\r
-+      0x0001, 0x0048, 0x2071, 0x1800, 0x7093, 0x0000, 0x6014, 0x2048,\r
-+      0x080c, 0x0fb1, 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e,\r
-+      0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6,\r
-+      0x918c, 0xffff, 0x11a8, 0x080c, 0x23ab, 0x2099, 0x026c, 0x2001,\r
-+      0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x00f8, 0x20a8,\r
-+      0x4003, 0x22a8, 0x8108, 0x080c, 0x23ab, 0x2099, 0x0260, 0x0ca8,\r
-+      0x080c, 0x23ab, 0x2061, 0x19a0, 0x6004, 0x2098, 0x6008, 0x3518,\r
-+      0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8, 0x4003, 0x22a8,\r
-+      0x8108, 0x080c, 0x23ab, 0x2099, 0x0260, 0x0ca8, 0x2061, 0x19a0,\r
-+      0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006, 0x0020, 0x2001,\r
-+      0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296, 0xffff,\r
-+      0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006,\r
-+      0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8, 0x080c, 0x23c3,\r
-+      0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8,\r
-+      0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8, 0x22a8, 0x8108,\r
-+      0x080c, 0x23c3, 0x20a1, 0x0240, 0x0c98, 0x080c, 0x23c3, 0x2061,\r
-+      0x19a3, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8,\r
-+      0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138, 0x22a8, 0x8108,\r
-+      0x080c, 0x23c3, 0x20a1, 0x0240, 0x0c98, 0x2061, 0x19a3, 0x2019,\r
-+      0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020, 0x2001, 0x0240,\r
-+      0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296, 0xffff, 0x620a,\r
-+      0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x00b6, 0x0066,\r
-+      0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,\r
-+      0x0170, 0x9686, 0x0004, 0x0158, 0xbe04, 0x96b4, 0x00ff, 0x9686,\r
-+      0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085, 0x0001, 0x006e,\r
-+      0x00be, 0x0005, 0x00d6, 0x080c, 0xd94e, 0x00de, 0x0005, 0x00d6,\r
-+      0x080c, 0xd95b, 0x1520, 0x680c, 0x908c, 0xff00, 0x6820, 0x9084,\r
-+      0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4, 0x0130, 0x9006,\r
-+      0x080c, 0xe977, 0x2009, 0x0001, 0x0078, 0xd1ec, 0x0180, 0x6920,\r
-+      0x918c, 0x00ff, 0x6824, 0x080c, 0x283e, 0x1148, 0x2001, 0x0001,\r
-+      0x080c, 0xe977, 0x2110, 0x900e, 0x080c, 0x3208, 0x0018, 0x9085,\r
-+      0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00c6, 0x080c,\r
-+      0xaeaf, 0x05a8, 0x0016, 0x0026, 0x00c6, 0x2011, 0x0263, 0x2204,\r
-+      0x8211, 0x220c, 0x080c, 0x283e, 0x1578, 0x080c, 0x659e, 0x1560,\r
-+      0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00, 0x6012, 0x080c,\r
-+      0xe7aa, 0x11d8, 0x080c, 0x32e3, 0x11c0, 0x080c, 0xd8b6, 0x0510,\r
-+      0x2001, 0x0007, 0x080c, 0x654f, 0x2001, 0x0007, 0x080c, 0x657b,\r
-+      0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,\r
-+      0x080c, 0x9138, 0x080c, 0x968d, 0x0010, 0x080c, 0xae61, 0x9085,\r
-+      0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0xae61, 0x00ce, 0x002e,\r
-+      0x001e, 0x0ca8, 0x080c, 0xae61, 0x9006, 0x0c98, 0x2069, 0x026d,\r
-+      0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, 0x0001,\r
-+      0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, 0x6808,\r
-+      0x9084, 0xff00, 0x9086, 0x0800, 0x1190, 0x6904, 0x9186, 0x0018,\r
-+      0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff,\r
-+      0x910d, 0x615a, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005,\r
-+      0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0dd5, 0x91b6, 0x0013, 0x1130,\r
-+      0x2008, 0x91b2, 0x0040, 0x1a04, 0xdaa5, 0x0092, 0x91b6, 0x0027,\r
-+      0x0120, 0x91b6, 0x0014, 0x190c, 0x0dd5, 0x2001, 0x0007, 0x080c,\r
-+      0x657b, 0x080c, 0x9588, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005,\r
-+      0xd9d8, 0xd9da, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9da, 0xd9e9, 0xda9e,\r
-+      0xda3b, 0xda9e, 0xda4f, 0xda9e, 0xd9e9, 0xda9e, 0xda96, 0xda9e,\r
-+      0xda96, 0xda9e, 0xda9e, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8,\r
-+      0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9da, 0xd9d8,\r
-+      0xda9e, 0xd9d8, 0xd9d8, 0xda9e, 0xd9d8, 0xda9b, 0xda9e, 0xd9d8,\r
-+      0xd9d8, 0xd9d8, 0xd9d8, 0xda9e, 0xda9e, 0xd9d8, 0xda9e, 0xda9e,\r
-+      0xd9d8, 0xd9e4, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xda9a, 0xda9e,\r
-+      0xd9d8, 0xd9d8, 0xda9e, 0xda9e, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8,\r
-+      0x080c, 0x0dd5, 0x080c, 0x9588, 0x080c, 0xd248, 0x6003, 0x0002,\r
-+      0x080c, 0x968d, 0x0804, 0xdaa4, 0x9006, 0x080c, 0x653b, 0x0804,\r
-+      0xda9e, 0x080c, 0x696a, 0x1904, 0xda9e, 0x9006, 0x080c, 0x653b,\r
-+      0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079,\r
-+      0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x0428, 0x6010, 0x2058,\r
-+      0xb8c0, 0x9005, 0x1178, 0x080c, 0xd230, 0x1904, 0xda9e, 0x0036,\r
-+      0x0046, 0xbba0, 0x2021, 0x0007, 0x080c, 0x4cbb, 0x004e, 0x003e,\r
-+      0x0804, 0xda9e, 0x080c, 0x3314, 0x1904, 0xda9e, 0x2001, 0x1800,\r
-+      0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800, 0x78a8,\r
-+      0x8000, 0x78aa, 0x00fe, 0x2001, 0x0002, 0x080c, 0x654f, 0x080c,\r
-+      0x9588, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,\r
-+      0x9138, 0x080c, 0x968d, 0x6110, 0x2158, 0x2009, 0x0001, 0x080c,\r
-+      0x8501, 0x0804, 0xdaa4, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00,\r
-+      0x8637, 0x9686, 0x0006, 0x0904, 0xda9e, 0x9686, 0x0004, 0x0904,\r
-+      0xda9e, 0x080c, 0x8cbb, 0x2001, 0x0004, 0x0804, 0xda9c, 0x2001,\r
-+      0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0x6010,\r
-+      0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4cbb, 0x004e, 0x003e,\r
-+      0x2001, 0x0006, 0x080c, 0xdac2, 0x6610, 0x2658, 0xbe04, 0x0066,\r
-+      0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0168, 0x2001,\r
-+      0x0006, 0x080c, 0x657b, 0x9284, 0x00ff, 0x908e, 0x0007, 0x1120,\r
-+      0x2001, 0x0006, 0x080c, 0x654f, 0x080c, 0x696a, 0x11f8, 0x2001,\r
-+      0x1837, 0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686,\r
-+      0x0006, 0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa,\r
-+      0x00fe, 0x0804, 0xda23, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006,\r
-+      0x0449, 0x0020, 0x0018, 0x0010, 0x080c, 0x657b, 0x080c, 0x9588,\r
-+      0x080c, 0xae61, 0x080c, 0x968d, 0x0005, 0x2600, 0x0002, 0xdab9,\r
-+      0xdab9, 0xdab9, 0xdab9, 0xdab9, 0xdabb, 0xdab9, 0xdabb, 0xdab9,\r
-+      0xdab9, 0xdabb, 0xdab9, 0xdab9, 0xdab9, 0xdabb, 0xdabb, 0xdabb,\r
-+      0xdabb, 0x080c, 0x0dd5, 0x080c, 0x9588, 0x080c, 0xae61, 0x080c,\r
-+      0x968d, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900,\r
-+      0xd184, 0x0138, 0x080c, 0x654f, 0x9006, 0x080c, 0x653b, 0x080c,\r
-+      0x31e8, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804,\r
-+      0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0dd5, 0x91b6,\r
-+      0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0dd5,\r
-+      0x006b, 0x0005, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc,\r
-+      0xdb41, 0xdb02, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc,\r
-+      0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xdb41, 0xdb48, 0xb8fc, 0xb8fc,\r
-+      0xb8fc, 0xb8fc, 0x00f6, 0x080c, 0x696a, 0x11d8, 0x080c, 0xd230,\r
-+      0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8c0, 0x9005, 0x0190, 0x9006,\r
-+      0x080c, 0x653b, 0x2001, 0x0002, 0x080c, 0x654f, 0x6023, 0x0001,\r
-+      0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x9138, 0x080c, 0x968d,\r
-+      0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x283e,\r
-+      0x11b0, 0x080c, 0x65ff, 0x0118, 0x080c, 0xae61, 0x0080, 0xb810,\r
-+      0x0006, 0xb814, 0x0006, 0xb8c0, 0x0006, 0x080c, 0x6034, 0x000e,\r
-+      0xb8c2, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0xae61, 0x00fe,\r
-+      0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0xae61, 0x0005,\r
-+      0x080c, 0xbc85, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,\r
-+      0x9138, 0x080c, 0x968d, 0x0010, 0x080c, 0xae61, 0x0005, 0x6004,\r
-+      0x908a, 0x0053, 0x1a0c, 0x0dd5, 0x080c, 0x9588, 0x080c, 0xae92,\r
-+      0x080c, 0x968d, 0x0005, 0x9182, 0x0040, 0x0002, 0xdb79, 0xdb79,\r
-+      0xdb79, 0xdb79, 0xdb7b, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79,\r
-+      0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79,\r
-+      0xdb79, 0x080c, 0x0dd5, 0x0096, 0x00b6, 0x00d6, 0x00e6, 0x00f6,\r
-+      0x0046, 0x0026, 0x6210, 0x2258, 0xb8bc, 0x9005, 0x11a8, 0x6106,\r
-+      0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xdbe1, 0x080c,\r
-+      0xe96b, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001, 0x2011,\r
-+      0x0200, 0x080c, 0x86dd, 0x0020, 0x9026, 0x080c, 0xe7ef, 0x0c38,\r
-+      0x080c, 0x0fff, 0x090c, 0x0dd5, 0x6003, 0x0007, 0xa867, 0x010d,\r
-+      0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00, 0xa88e, 0x6008, 0xa8e2,\r
-+      0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a, 0x0016, 0xa876, 0xa87f,\r
-+      0x0000, 0xa883, 0x0000, 0xa887, 0x0036, 0x080c, 0x6c81, 0x001e,\r
-+      0x080c, 0xe96b, 0x1904, 0xdc41, 0x9486, 0x2000, 0x1130, 0x2019,\r
-+      0x0017, 0x080c, 0xe522, 0x0804, 0xdc41, 0x9486, 0x0200, 0x1120,\r
-+      0x080c, 0xe4be, 0x0804, 0xdc41, 0x9486, 0x0400, 0x0120, 0x9486,\r
-+      0x1000, 0x1904, 0xdc41, 0x2019, 0x0002, 0x080c, 0xe4d9, 0x0804,\r
-+      0xdc41, 0x2069, 0x1a71, 0x6a00, 0xd284, 0x0904, 0xdcab, 0x9284,\r
-+      0x0300, 0x1904, 0xdca4, 0x6804, 0x9005, 0x0904, 0xdc8c, 0x2d78,\r
-+      0x6003, 0x0007, 0x080c, 0x1018, 0x0904, 0xdc4d, 0x7800, 0xd08c,\r
-+      0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001, 0x180f,\r
-+      0x2004, 0xd084, 0x1904, 0xdcaf, 0x9006, 0xa802, 0xa867, 0x0116,\r
-+      0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a, 0x6010, 0x2058, 0xb8a0,\r
-+      0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba, 0xb92c, 0xa9be, 0xb930,\r
-+      0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d, 0x7044, 0x9084, 0x0003,\r
-+      0x9080, 0xdc49, 0x2005, 0xa87e, 0x20a9, 0x000a, 0x2001, 0x0270,\r
-+      0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205, 0x200b, 0x0080, 0x20e1,\r
-+      0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0, 0x4003, 0x200b, 0x0000,\r
-+      0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000, 0x200c, 0xa9ae, 0x080c,\r
-+      0x6c81, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be, 0x009e,\r
-+      0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x1810, 0x2004,\r
-+      0xd084, 0x0120, 0x080c, 0x0fff, 0x1904, 0xdbf6, 0x6017, 0xf100,\r
-+      0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90f0, 0x080c, 0x968d,\r
-+      0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086, 0x1200,\r
-+      0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c, 0xf700,\r
-+      0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043, 0x080c,\r
-+      0x90f0, 0x080c, 0x968d, 0x0828, 0x6868, 0x602e, 0x686c, 0x6032,\r
-+      0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90f0,\r
-+      0x080c, 0x968d, 0x0804, 0xdc41, 0x2001, 0x180e, 0x2004, 0xd0ec,\r
-+      0x0120, 0x2011, 0x8049, 0x080c, 0x4b04, 0x6017, 0xf300, 0x0010,\r
-+      0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90f0,\r
-+      0x080c, 0x968d, 0x0804, 0xdc41, 0x6017, 0xf500, 0x0c98, 0x6017,\r
-+      0xf600, 0x0804, 0xdc61, 0x6017, 0xf200, 0x0804, 0xdc61, 0xa867,\r
-+      0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a, 0x7044,\r
-+      0x9084, 0x0003, 0x9080, 0xdc49, 0x2005, 0xa87e, 0x2928, 0x6010,\r
-+      0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a, 0xb82c, 0xa88e, 0xb830,\r
-+      0xa892, 0xb834, 0xa896, 0xa883, 0x003d, 0x2009, 0x0205, 0x2104,\r
-+      0x9085, 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210, 0x2214,\r
-+      0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111, 0x1a0c, 0x0dd5, 0x8210,\r
-+      0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080,\r
-+      0x0029, 0x20a0, 0x2011, 0xdd2b, 0x2041, 0x0001, 0x223d, 0x9784,\r
-+      0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a, 0x0530,\r
-+      0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260, 0x2098,\r
-+      0x0c68, 0x2950, 0x080c, 0x1018, 0x0170, 0x2900, 0xb002, 0xa867,\r
-+      0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b,\r
-+      0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118, 0x080c,\r
-+      0x1031, 0x0cc8, 0x080c, 0x1031, 0x0804, 0xdc4d, 0x2548, 0x8847,\r
-+      0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000, 0x080c,\r
-+      0xe551, 0x0804, 0xdc41, 0x8010, 0x0004, 0x801a, 0x0006, 0x8018,\r
-+      0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160, 0x6004,\r
-+      0x908a, 0x0054, 0x1a0c, 0x0dd5, 0x9082, 0x0040, 0x0a0c, 0x0dd5,\r
-+      0x2008, 0x0804, 0xdddc, 0x9186, 0x0051, 0x0108, 0x00c0, 0x2001,\r
-+      0x0109, 0x2004, 0xd084, 0x0904, 0xdd8d, 0x0126, 0x2091, 0x2800,\r
-+      0x0006, 0x0016, 0x0026, 0x080c, 0x8fd5, 0x002e, 0x001e, 0x000e,\r
-+      0x012e, 0x6000, 0x9086, 0x0002, 0x1580, 0x0804, 0xde24, 0x9186,\r
-+      0x0027, 0x0530, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014, 0x0500,\r
-+      0x190c, 0x0dd5, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0, 0x00c6,\r
-+      0x0126, 0x2091, 0x2800, 0x00c6, 0x2061, 0x0100, 0x0006, 0x0016,\r
-+      0x0026, 0x080c, 0x8fd5, 0x002e, 0x001e, 0x000e, 0x00ce, 0x012e,\r
-+      0x00ce, 0x6000, 0x9086, 0x0004, 0x190c, 0x0dd5, 0x0804, 0xdf05,\r
-+      0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0xaef7, 0x0005,\r
-+      0xdda3, 0xdda5, 0xdda5, 0xddcc, 0xdda3, 0xdda3, 0xdda3, 0xdda3,\r
-+      0xdda3, 0xdda3, 0xdda3, 0xdda3, 0xdda3, 0xdda3, 0xdda3, 0xdda3,\r
-+      0xdda3, 0xdda3, 0xdda3, 0x080c, 0x0dd5, 0x080c, 0x9588, 0x080c,\r
-+      0x968d, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c, 0xcb35,\r
-+      0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,\r
-+      0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xe551, 0x6017, 0x0000,\r
-+      0x6018, 0x9005, 0x1120, 0x2001, 0x1987, 0x2004, 0x601a, 0x6003,\r
-+      0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x9588, 0x080c,\r
-+      0x968d, 0x080c, 0xcb35, 0x0120, 0x6014, 0x2048, 0x080c, 0x1031,\r
-+      0x080c, 0xae92, 0x009e, 0x0005, 0x0002, 0xddf0, 0xde07, 0xddf2,\r
-+      0xde1e, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0,\r
-+      0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0,\r
-+      0x080c, 0x0dd5, 0x0096, 0x080c, 0x9588, 0x6014, 0x2048, 0xa87c,\r
-+      0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c, 0xaedc,\r
-+      0x0010, 0x6003, 0x0004, 0x080c, 0x968d, 0x009e, 0x0005, 0x080c,\r
-+      0x9588, 0x080c, 0xcb35, 0x0138, 0x6114, 0x0096, 0x2148, 0xa97c,\r
-+      0x009e, 0xd1ec, 0x1138, 0x080c, 0x86b2, 0x080c, 0xae61, 0x080c,\r
-+      0x968d, 0x0005, 0x080c, 0xe7b3, 0x0db0, 0x0cc8, 0x080c, 0x9588,\r
-+      0x2009, 0x0041, 0x0804, 0xdf8d, 0x9182, 0x0040, 0x0002, 0xde3a,\r
-+      0xde3c, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a,\r
-+      0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a,\r
-+      0xde3d, 0xde3a, 0x080c, 0x0dd5, 0x0005, 0x00d6, 0x080c, 0x86b2,\r
-+      0x00de, 0x080c, 0xe80b, 0x080c, 0xae61, 0x0005, 0x9182, 0x0040,\r
-+      0x0002, 0xde5c, 0xde5c, 0xde5c, 0xde5c, 0xde5c, 0xde5c, 0xde5c,\r
-+      0xde5c, 0xde5c, 0xde5e, 0xdecd, 0xde5c, 0xde5c, 0xde5c, 0xde5c,\r
-+      0xdecd, 0xde5c, 0xde5c, 0xde5c, 0x080c, 0x0dd5, 0x2001, 0x0105,\r
-+      0x2004, 0x9084, 0x1800, 0x01c8, 0x2001, 0x0132, 0x200c, 0x2001,\r
-+      0x0131, 0x2004, 0x9105, 0x1904, 0xdecd, 0x2009, 0x180c, 0x2104,\r
-+      0xd0d4, 0x0904, 0xdecd, 0xc0d4, 0x200a, 0x2009, 0x0105, 0x2104,\r
-+      0x9084, 0xe7fd, 0x9085, 0x0010, 0x200a, 0x2001, 0x1867, 0x2004,\r
-+      0xd0e4, 0x1528, 0x603b, 0x0000, 0x080c, 0x963d, 0x6014, 0x0096,\r
-+      0x2048, 0xa87c, 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e, 0x0002,\r
-+      0x0508, 0x2001, 0x180c, 0x2004, 0xd0d4, 0x11e0, 0x080c, 0x97b9,\r
-+      0x2009, 0x0041, 0x009e, 0x0804, 0xdf8d, 0x080c, 0x97b9, 0x6003,\r
-+      0x0007, 0x601b, 0x0000, 0x080c, 0x86b2, 0x009e, 0x0005, 0x2001,\r
-+      0x0100, 0x2004, 0x9082, 0x0005, 0x0aa8, 0x2001, 0x011f, 0x2004,\r
-+      0x603a, 0x0890, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102, 0xd1cc,\r
-+      0x0110, 0x080c, 0x2c52, 0x080c, 0x97b9, 0x6014, 0x2048, 0xa97c,\r
-+      0xd1ec, 0x1130, 0x080c, 0x86b2, 0x080c, 0xae61, 0x009e, 0x0005,\r
-+      0x080c, 0xe7b3, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c,\r
-+      0xc1d4, 0x2102, 0x0036, 0x080c, 0x963d, 0x080c, 0x97b9, 0x6014,\r
-+      0x0096, 0x2048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,\r
-+      0x0188, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x0140, 0xa8ac,\r
-+      0x6330, 0x931a, 0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e, 0x6003,\r
-+      0x0002, 0x0080, 0x2019, 0x0004, 0x080c, 0xe551, 0x6018, 0x9005,\r
-+      0x1128, 0x2001, 0x1987, 0x2004, 0x8003, 0x601a, 0x6017, 0x0000,\r
-+      0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002,\r
-+      0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c,\r
-+      0xdf1e, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c,\r
-+      0xdf1c, 0xdf1c, 0xdf1c, 0xdf69, 0x080c, 0x0dd5, 0x6014, 0x0096,\r
-+      0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,\r
-+      0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, 0x2009,\r
-+      0x0041, 0x009e, 0x0804, 0xdf8d, 0x6003, 0x0007, 0x601b, 0x0000,\r
-+      0x080c, 0x86b2, 0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58, 0x0006,\r
-+      0x0046, 0xacac, 0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030, 0x9420,\r
-+      0x6432, 0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8, 0x6110,\r
-+      0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009, 0x180e,\r
-+      0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006,\r
-+      0x00e9, 0x080c, 0x86b4, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e,\r
-+      0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x15e5, 0x1904, 0xdf1e,\r
-+      0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e, 0x9105,\r
-+      0x1120, 0x080c, 0x15e5, 0x1904, 0xdf1e, 0x0005, 0xd2fc, 0x0140,\r
-+      0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009, 0x0009, 0x0010,\r
-+      0x2009, 0x0015, 0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040, 0x0208,\r
-+      0x0062, 0x9186, 0x0013, 0x0120, 0x9186, 0x0014, 0x190c, 0x0dd5,\r
-+      0x6024, 0xd0dc, 0x090c, 0x0dd5, 0x0005, 0xdfb0, 0xdfbc, 0xdfc8,\r
-+      0xdfd4, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb7, 0xdfb2, 0xdfb2,\r
-+      0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb2, 0xdfb0, 0xdfb2, 0xdfb0,\r
-+      0x080c, 0x0dd5, 0x6024, 0xd0dc, 0x090c, 0x0dd5, 0x0005, 0x6014,\r
-+      0x9005, 0x190c, 0x0dd5, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c,\r
-+      0x90f0, 0x0126, 0x2091, 0x8000, 0x080c, 0x968d, 0x012e, 0x0005,\r
-+      0x6003, 0x0001, 0x6106, 0x080c, 0x90f0, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x968d, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106, 0x2c10,\r
-+      0x080c, 0x1bad, 0x0126, 0x2091, 0x8000, 0x080c, 0x9155, 0x080c,\r
-+      0x97b9, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0036, 0x0096,\r
-+      0x9182, 0x0040, 0x0023, 0x009e, 0x003e, 0x012e, 0x0005, 0xdfff,\r
-+      0xe001, 0xe013, 0xe02d, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff,\r
-+      0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x080c,\r
-+      0x0dd5, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x01f8, 0x909c, 0x0003,\r
-+      0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, 0x90f0,\r
-+      0x080c, 0x968d, 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0168,\r
-+      0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106,\r
-+      0x080c, 0x90f0, 0x080c, 0x968d, 0x00e0, 0x901e, 0x6316, 0x631a,\r
-+      0x2019, 0x0004, 0x080c, 0xe551, 0x00a0, 0x6014, 0x2048, 0xa87c,\r
-+      0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003,\r
-+      0x0003, 0x6106, 0x2c10, 0x080c, 0x1bad, 0x080c, 0x9155, 0x080c,\r
-+      0x97b9, 0x0005, 0x080c, 0x9588, 0x6114, 0x81ff, 0x0158, 0x0096,\r
-+      0x2148, 0x080c, 0xe908, 0x0036, 0x2019, 0x0029, 0x080c, 0xe551,\r
-+      0x003e, 0x009e, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005, 0x080c,\r
-+      0x963d, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xe908,\r
-+      0x0036, 0x2019, 0x0029, 0x080c, 0xe551, 0x003e, 0x009e, 0x080c,\r
-+      0xae92, 0x080c, 0x97b9, 0x0005, 0x9182, 0x0085, 0x0002, 0xe07e,\r
-+      0xe07c, 0xe07c, 0xe08a, 0xe07c, 0xe07c, 0xe07c, 0xe07c, 0xe07c,\r
-+      0xe07c, 0xe07c, 0xe07c, 0xe07c, 0x080c, 0x0dd5, 0x6003, 0x000b,\r
-+      0x6106, 0x080c, 0x90f0, 0x0126, 0x2091, 0x8000, 0x080c, 0x968d,\r
-+      0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xe7aa, 0x0118, 0x080c,\r
-+      0xae61, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001, 0x180e,\r
-+      0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be,\r
-+      0x2c00, 0x2011, 0x014e, 0x080c, 0xb182, 0x7220, 0x080c, 0xe3f7,\r
-+      0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0x9296,\r
-+      0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c, 0x90f0,\r
-+      0x080c, 0x968d, 0x080c, 0x97b9, 0x00ee, 0x002e, 0x0005, 0x9186,\r
-+      0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dd5, 0x908a,\r
-+      0x0092, 0x1a0c, 0x0dd5, 0x9082, 0x0085, 0x00a2, 0x9186, 0x0027,\r
-+      0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0xaef7, 0x0050, 0x2001,\r
-+      0x0007, 0x080c, 0x657b, 0x080c, 0x9588, 0x080c, 0xae92, 0x080c,\r
-+      0x968d, 0x0005, 0xe0ef, 0xe0f1, 0xe0f1, 0xe0ef, 0xe0ef, 0xe0ef,\r
-+      0xe0ef, 0xe0ef, 0xe0ef, 0xe0ef, 0xe0ef, 0xe0ef, 0xe0ef, 0x080c,\r
-+      0x0dd5, 0x080c, 0x9588, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005,\r
-+      0x9182, 0x0085, 0x0a0c, 0x0dd5, 0x9182, 0x0092, 0x1a0c, 0x0dd5,\r
-+      0x9182, 0x0085, 0x0002, 0xe110, 0xe110, 0xe110, 0xe112, 0xe110,\r
-+      0xe110, 0xe110, 0xe110, 0xe110, 0xe110, 0xe110, 0xe110, 0xe110,\r
-+      0x080c, 0x0dd5, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014,\r
-+      0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xaef7, 0x0030, 0x080c,\r
-+      0x9588, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005, 0x0036, 0x080c,\r
-+      0xe80b, 0x6043, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023, 0x0006,\r
-+      0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000,\r
-+      0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0xa69c, 0x009e, 0x008e,\r
-+      0x1550, 0x0076, 0x2c38, 0x080c, 0xa747, 0x007e, 0x1520, 0x6000,\r
-+      0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0, 0x0096,\r
-+      0x601c, 0xd084, 0x0140, 0x080c, 0xe80b, 0x080c, 0xd248, 0x080c,\r
-+      0x1a5e, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xcb35, 0x0110,\r
-+      0x080c, 0xe551, 0x009e, 0x6017, 0x0000, 0x080c, 0xe80b, 0x6023,\r
-+      0x0007, 0x080c, 0xd248, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6,\r
-+      0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c,\r
-+      0x283e, 0x15c8, 0x0016, 0x00c6, 0x080c, 0x65ff, 0x1590, 0x001e,\r
-+      0x00c6, 0x2160, 0x080c, 0xd245, 0x00ce, 0x002e, 0x0026, 0x0016,\r
-+      0x2019, 0x0029, 0x080c, 0xa808, 0x080c, 0x928b, 0x0076, 0x903e,\r
-+      0x080c, 0x9168, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, 0xe2eb,\r
-+      0x007e, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217, 0x9286, 0x0006,\r
-+      0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c, 0x327d, 0x002e,\r
-+      0xbcc0, 0x001e, 0x080c, 0x6034, 0xbe12, 0xbd16, 0xbcc2, 0x9006,\r
-+      0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe,\r
-+      0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1824, 0x2104,\r
-+      0x9086, 0x0074, 0x1904, 0xe212, 0x2069, 0x0260, 0x6944, 0x9182,\r
-+      0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xe20f, 0x2001,\r
-+      0x197c, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb8c0, 0x9005,\r
-+      0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648,\r
-+      0x080c, 0xe970, 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009, 0x0205,\r
-+      0x200b, 0x0001, 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182, 0x0100,\r
-+      0x02a8, 0x6940, 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001, 0x0288,\r
-+      0x6950, 0x918a, 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100, 0x00a0,\r
-+      0x6017, 0x0300, 0x0088, 0x6017, 0x0500, 0x0070, 0x6017, 0x0700,\r
-+      0x0058, 0x6017, 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028, 0x6017,\r
-+      0x0f00, 0x0010, 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008, 0x9006,\r
-+      0x001e, 0x00be, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6, 0x0026,\r
-+      0x0036, 0x0156, 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff, 0x9286,\r
-+      0x0006, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394, 0xff00, 0x8217,\r
-+      0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120, 0x080c, 0x660e,\r
-+      0x0804, 0xe27a, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48,\r
-+      0x2019, 0x000a, 0x080c, 0xbe1d, 0x009e, 0x15a8, 0x2011, 0x027a,\r
-+      0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xbe1d,\r
-+      0x009e, 0x1548, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009,\r
-+      0x1848, 0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xe5ae,\r
-+      0xb800, 0xc0e5, 0xb802, 0x2019, 0x0029, 0x080c, 0x928b, 0x0076,\r
-+      0x2039, 0x0000, 0x080c, 0x9168, 0x2c08, 0x080c, 0xe2eb, 0x007e,\r
-+      0x2001, 0x0007, 0x080c, 0x657b, 0x2001, 0x0007, 0x080c, 0x654f,\r
-+      0x001e, 0x004e, 0x9006, 0x015e, 0x003e, 0x002e, 0x00be, 0x00ce,\r
-+      0x0005, 0x00d6, 0x2069, 0x026e, 0x6800, 0x9086, 0x0800, 0x0118,\r
-+      0x6017, 0x0000, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6,\r
-+      0x0016, 0x0026, 0x0036, 0x0156, 0x2079, 0x026c, 0x7930, 0x7834,\r
-+      0x080c, 0x283e, 0x11d0, 0x080c, 0x65ff, 0x11b8, 0x2011, 0x0270,\r
-+      0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbe1d,\r
-+      0x009e, 0x1158, 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48,\r
-+      0x2019, 0x0006, 0x080c, 0xbe1d, 0x009e, 0x015e, 0x003e, 0x002e,\r
-+      0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026,\r
-+      0x0036, 0x0156, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,\r
-+      0x283e, 0x11d0, 0x080c, 0x65ff, 0x11b8, 0x2011, 0x0276, 0x20a9,\r
-+      0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbe1d, 0x009e,\r
-+      0x1158, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,\r
-+      0x0006, 0x080c, 0xbe1d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e,\r
-+      0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066,\r
-+      0x0056, 0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029,\r
-+      0x19f0, 0x252c, 0x2021, 0x19f6, 0x2424, 0x2061, 0x1cd0, 0x2071,\r
-+      0x1800, 0x7654, 0x7074, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1ab0,\r
-+      0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xe388, 0x0018, 0x9606,\r
-+      0x0904, 0xe388, 0x080c, 0x8981, 0x0904, 0xe37f, 0x2100, 0x9c06,\r
-+      0x0904, 0xe37f, 0x080c, 0xe5ef, 0x1904, 0xe37f, 0x080c, 0xe98d,\r
-+      0x0904, 0xe37f, 0x080c, 0xe5df, 0x0904, 0xe37f, 0x6720, 0x9786,\r
-+      0x0001, 0x1148, 0x080c, 0x3314, 0x0904, 0xe3c7, 0x6004, 0x9086,\r
-+      0x0000, 0x1904, 0xe3c7, 0x9786, 0x0004, 0x0904, 0xe3c7, 0x9786,\r
-+      0x0007, 0x0904, 0xe37f, 0x2500, 0x9c06, 0x0904, 0xe37f, 0x2400,\r
-+      0x9c06, 0x05e8, 0x88ff, 0x0118, 0x6054, 0x9906, 0x15c0, 0x0096,\r
-+      0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1a5e, 0x001e,\r
-+      0x9786, 0x000a, 0x0148, 0x080c, 0xcd3b, 0x1130, 0x080c, 0xb813,\r
-+      0x009e, 0x080c, 0xae92, 0x0418, 0x6014, 0x2048, 0x080c, 0xcb35,\r
-+      0x01d8, 0x9786, 0x0003, 0x1570, 0xa867, 0x0103, 0xa87c, 0xd0cc,\r
-+      0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e, 0xab7a,\r
-+      0xa877, 0x0000, 0x080c, 0xe908, 0x0016, 0x080c, 0xce24, 0x080c,\r
-+      0x6c75, 0x001e, 0x080c, 0xcd1e, 0x009e, 0x080c, 0xae92, 0x9ce0,\r
-+      0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804, 0xe2ff,\r
-+      0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce,\r
-+      0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, 0x9386, 0x0005, 0x0128,\r
-+      0x080c, 0xe908, 0x080c, 0xe551, 0x08f8, 0x009e, 0x0c00, 0x9786,\r
-+      0x0009, 0x11f8, 0x6000, 0x9086, 0x0004, 0x01c0, 0x6000, 0x9086,\r
-+      0x0003, 0x11a0, 0x080c, 0x963d, 0x0096, 0x6114, 0x2148, 0x080c,\r
-+      0xcb35, 0x0118, 0x6010, 0x080c, 0x6c81, 0x009e, 0x00c6, 0x080c,\r
-+      0xae61, 0x00ce, 0x0036, 0x080c, 0x97b9, 0x003e, 0x009e, 0x0804,\r
-+      0xe37f, 0x9786, 0x000a, 0x0904, 0xe366, 0x0804, 0xe364, 0x81ff,\r
-+      0x0904, 0xe37f, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0138,\r
-+      0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1904, 0xe37f, 0x6000,\r
-+      0x9086, 0x0002, 0x1904, 0xe37f, 0x080c, 0xcd2a, 0x0138, 0x080c,\r
-+      0xcd3b, 0x1904, 0xe37f, 0x080c, 0xb813, 0x0038, 0x080c, 0x31e8,\r
-+      0x080c, 0xcd3b, 0x1110, 0x080c, 0xb813, 0x080c, 0xae92, 0x0804,\r
-+      0xe37f, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6,\r
-+      0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xe578, 0x001e,\r
-+      0x0120, 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005,\r
-+      0xe416, 0xe416, 0xe416, 0xe416, 0xe416, 0xe416, 0xe418, 0xe416,\r
-+      0xe416, 0xe416, 0xe416, 0xae92, 0xae92, 0xe416, 0x9006, 0x0005,\r
-+      0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be,\r
-+      0x2c00, 0x2009, 0x0020, 0x080c, 0xe5ae, 0x001e, 0x004e, 0x2019,\r
-+      0x0002, 0x080c, 0xe134, 0x003e, 0x9085, 0x0001, 0x0005, 0x0096,\r
-+      0x080c, 0xcb35, 0x0140, 0x6014, 0x904d, 0x080c, 0xc768, 0x687b,\r
-+      0x0005, 0x080c, 0x6c81, 0x009e, 0x080c, 0xae92, 0x9085, 0x0001,\r
-+      0x0005, 0x2001, 0x0001, 0x080c, 0x653b, 0x0156, 0x0016, 0x0026,\r
-+      0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c,\r
-+      0xbe09, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6,\r
-+      0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091,\r
-+      0x8000, 0x2740, 0x2061, 0x1cd0, 0x2079, 0x0001, 0x8fff, 0x0904,\r
-+      0xe4b1, 0x2071, 0x1800, 0x7654, 0x7074, 0x8001, 0x9602, 0x1a04,\r
-+      0xe4b1, 0x88ff, 0x0120, 0x2800, 0x9c06, 0x1590, 0x2078, 0x080c,\r
-+      0xe5df, 0x0570, 0x2400, 0x9c06, 0x0558, 0x6720, 0x9786, 0x0006,\r
-+      0x1538, 0x9786, 0x0007, 0x0520, 0x88ff, 0x1140, 0x6010, 0x9b06,\r
-+      0x11f8, 0x85ff, 0x0118, 0x6054, 0x9106, 0x11d0, 0x0096, 0x601c,\r
-+      0xd084, 0x0140, 0x080c, 0xe80b, 0x080c, 0xd248, 0x080c, 0x1a5e,\r
-+      0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xcb35, 0x0120, 0x0046,\r
-+      0x080c, 0xe551, 0x004e, 0x009e, 0x080c, 0xae92, 0x88ff, 0x1198,\r
-+      0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804,\r
-+      0xe466, 0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e, 0x00ce,\r
-+      0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001, 0x0ca0, 0x00b6, 0x0076,\r
-+      0x0056, 0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002,\r
-+      0x6210, 0x2258, 0x0096, 0x904e, 0x080c, 0xa69c, 0x009e, 0x008e,\r
-+      0x903e, 0x080c, 0xa747, 0x080c, 0xe457, 0x005e, 0x007e, 0x00be,\r
-+      0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20,\r
-+      0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x65ff,\r
-+      0x1190, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, 0x0096,\r
-+      0x904e, 0x080c, 0xa69c, 0x009e, 0x008e, 0x903e, 0x080c, 0xa747,\r
-+      0x080c, 0xe457, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xe4e4,\r
-+      0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6,\r
-+      0x0076, 0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001,\r
-+      0x2019, 0x0048, 0x0096, 0x904e, 0x080c, 0xa69c, 0x009e, 0x008e,\r
-+      0x903e, 0x080c, 0xa747, 0x2c20, 0x080c, 0xe457, 0x005e, 0x007e,\r
-+      0x00be, 0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156,\r
-+      0x2c20, 0x20a9, 0x0800, 0x900e, 0x0016, 0x0036, 0x080c, 0x65ff,\r
-+      0x11a0, 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c,\r
-+      0xe7ef, 0x004e, 0x0096, 0x904e, 0x080c, 0xa69c, 0x009e, 0x008e,\r
-+      0x903e, 0x080c, 0xa747, 0x080c, 0xe457, 0x003e, 0x001e, 0x8108,\r
-+      0x1f04, 0xe52c, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be,\r
-+      0x0005, 0x0016, 0x00f6, 0x080c, 0xcb33, 0x0198, 0xa864, 0x9084,\r
-+      0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803,\r
-+      0x0000, 0xab82, 0x080c, 0x6c81, 0x2f48, 0x0cb0, 0xab82, 0x080c,\r
-+      0x6c81, 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803,\r
-+      0x0000, 0x080c, 0x6c81, 0x2f48, 0x0cb8, 0x080c, 0x6c81, 0x0c88,\r
-+      0x00e6, 0x0046, 0x0036, 0x2061, 0x1cd0, 0x9005, 0x1138, 0x2071,\r
-+      0x1800, 0x7454, 0x7074, 0x8001, 0x9402, 0x12f8, 0x2100, 0x9c06,\r
-+      0x0188, 0x6000, 0x9086, 0x0000, 0x0168, 0x6008, 0x9206, 0x1150,\r
-+      0x6320, 0x9386, 0x0009, 0x01b0, 0x6010, 0x91a0, 0x0004, 0x2424,\r
-+      0x9406, 0x0140, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02,\r
-+      0x1220, 0x0c20, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e,\r
-+      0x00ee, 0x0005, 0x631c, 0xd3c4, 0x1d68, 0x0c30, 0x0096, 0x0006,\r
-+      0x080c, 0x0fff, 0x000e, 0x090c, 0x0dd5, 0xaae2, 0xa867, 0x010d,\r
-+      0xa88e, 0x0026, 0x2010, 0x080c, 0xcb23, 0x2001, 0x0000, 0x0120,\r
-+      0x2200, 0x9080, 0x0015, 0x2004, 0x002e, 0xa87a, 0x9186, 0x0020,\r
-+      0x0110, 0xa8e3, 0xffff, 0xa986, 0xac76, 0xa87f, 0x0000, 0x2001,\r
-+      0x198e, 0x2004, 0xa882, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x6c81, 0x012e, 0x009e, 0x0005, 0x6700,\r
-+      0x9786, 0x0000, 0x0158, 0x9786, 0x0001, 0x0140, 0x9786, 0x000a,\r
-+      0x0128, 0x9786, 0x0009, 0x0110, 0x9085, 0x0001, 0x0005, 0x00e6,\r
-+      0x6010, 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206,\r
-+      0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016, 0x6004, 0x908e,\r
-+      0x001e, 0x11a0, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036,\r
-+      0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0005, 0x2001, 0x1987,\r
-+      0x2004, 0x601a, 0x080c, 0x90f0, 0x080c, 0x968d, 0x001e, 0x0005,\r
-+      0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158, 0xd0cc, 0x0118,\r
-+      0x080c, 0xce68, 0x0030, 0x080c, 0xe80b, 0x080c, 0x86b2, 0x080c,\r
-+      0xae61, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002,\r
-+      0xe63e, 0xe63e, 0xe63e, 0xe640, 0xe63e, 0xe640, 0xe640, 0xe63e,\r
-+      0xe640, 0xe63e, 0xe63e, 0xe63e, 0xe63e, 0xe63e, 0x9006, 0x0005,\r
-+      0x9085, 0x0001, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f,\r
-+      0x0002, 0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0xe664,\r
-+      0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0x6007,\r
-+      0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x080c,\r
-+      0x90f0, 0x080c, 0x968d, 0x0005, 0x0096, 0x00c6, 0x2260, 0x080c,\r
-+      0xe80b, 0x6043, 0x0000, 0x6024, 0xc0f4, 0xc0e4, 0x6026, 0x603b,\r
-+      0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007, 0x1904, 0xe6bd,\r
-+      0x6814, 0x9005, 0x0138, 0x2048, 0xa87c, 0xd0fc, 0x1118, 0x00de,\r
-+      0x009e, 0x08a8, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x90f0,\r
-+      0x080c, 0x968d, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x1904,\r
-+      0xe734, 0x6014, 0x9005, 0x1138, 0x6000, 0x9086, 0x0007, 0x190c,\r
-+      0x0dd5, 0x0804, 0xe734, 0x2048, 0x080c, 0xcb35, 0x1130, 0x0028,\r
-+      0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048, 0xa87c, 0x9084,\r
-+      0x0003, 0x9086, 0x0002, 0x1168, 0xa87c, 0xc0dc, 0xc0f4, 0xa87e,\r
-+      0xa880, 0xc0fc, 0xa882, 0x2009, 0x0043, 0x080c, 0xdf8d, 0x0804,\r
-+      0xe734, 0x2009, 0x0041, 0x0804, 0xe72e, 0x9186, 0x0005, 0x15a0,\r
-+      0x6814, 0x2048, 0xa87c, 0xd0bc, 0x1120, 0x00de, 0x009e, 0x0804,\r
-+      0xe657, 0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0dd5, 0x0804, 0xe678,\r
-+      0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x90f0, 0x080c, 0x968d,\r
-+      0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x0120, 0x9186, 0x0004,\r
-+      0x1904, 0xe734, 0x6814, 0x2048, 0xa97c, 0xc1f4, 0xc1dc, 0xa97e,\r
-+      0xa980, 0xc1fc, 0xc1bc, 0xa982, 0x00f6, 0x2c78, 0x080c, 0x1725,\r
-+      0x00fe, 0x2009, 0x0042, 0x04d0, 0x0036, 0x080c, 0x0fff, 0x090c,\r
-+      0x0dd5, 0xa867, 0x010d, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x2d18,\r
-+      0xab8e, 0xa887, 0x0045, 0x2c00, 0xa892, 0x6038, 0xa8a2, 0x2360,\r
-+      0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be,\r
-+      0x2004, 0x6354, 0xab7a, 0xa876, 0x9006, 0xa87e, 0xa882, 0xad9a,\r
-+      0xae96, 0xa89f, 0x0001, 0x080c, 0x6c81, 0x2019, 0x0045, 0x6008,\r
-+      0x2068, 0x080c, 0xe134, 0x2d00, 0x600a, 0x6023, 0x0006, 0x6003,\r
-+      0x0007, 0x901e, 0x631a, 0x6342, 0x003e, 0x0038, 0x6043, 0x0000,\r
-+      0x6003, 0x0007, 0x080c, 0xdf8d, 0x00ce, 0x00de, 0x009e, 0x0005,\r
-+      0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2,\r
-+      0x9186, 0x0027, 0x1178, 0x080c, 0x9588, 0x0036, 0x0096, 0x6014,\r
-+      0x2048, 0x2019, 0x0004, 0x080c, 0xe551, 0x009e, 0x003e, 0x080c,\r
-+      0x968d, 0x0005, 0x9186, 0x0014, 0x0d70, 0x080c, 0xaef7, 0x0005,\r
-+      0xe767, 0xe765, 0xe765, 0xe765, 0xe765, 0xe765, 0xe767, 0xe765,\r
-+      0xe765, 0xe765, 0xe765, 0xe765, 0xe765, 0x080c, 0x0dd5, 0x080c,\r
-+      0x9588, 0x6003, 0x000c, 0x080c, 0x968d, 0x0005, 0x9182, 0x0092,\r
-+      0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c, 0xaef7, 0x0005,\r
-+      0xe785, 0xe785, 0xe785, 0xe785, 0xe787, 0xe7a7, 0xe785, 0xe785,\r
-+      0xe785, 0xe785, 0xe785, 0xe785, 0xe785, 0x080c, 0x0dd5, 0x00d6,\r
-+      0x2c68, 0x080c, 0xae0b, 0x01b0, 0x6003, 0x0001, 0x6007, 0x001e,\r
-+      0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e,\r
-+      0x600b, 0xffff, 0x6910, 0x6112, 0x6023, 0x0004, 0x080c, 0x90f0,\r
-+      0x080c, 0x968d, 0x2d60, 0x080c, 0xae61, 0x00de, 0x0005, 0x080c,\r
-+      0xae61, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,\r
-+      0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1867, 0x210c, 0xd1ec, 0x05b0,\r
-+      0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150, 0x2001,\r
-+      0x1988, 0x2004, 0x6042, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x1520,\r
-+      0x00a0, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x0128, 0x6024, 0xc0e4,\r
-+      0x6026, 0x9006, 0x00d8, 0x2001, 0x1988, 0x200c, 0x2001, 0x1986,\r
-+      0x2004, 0x9100, 0x9080, 0x000a, 0x6042, 0x6010, 0x00b6, 0x2058,\r
-+      0xb8bc, 0x00be, 0x0008, 0x2104, 0x9005, 0x0118, 0x9088, 0x0003,\r
-+      0x0cd0, 0x2c0a, 0x600f, 0x0000, 0x9085, 0x0001, 0x0005, 0x0016,\r
-+      0x00c6, 0x00e6, 0x6154, 0xb8bc, 0x2060, 0x8cff, 0x0180, 0x84ff,\r
-+      0x1118, 0x6054, 0x9106, 0x1138, 0x600c, 0x2072, 0x080c, 0x86b2,\r
-+      0x080c, 0xae61, 0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70, 0x00ee,\r
-+      0x00ce, 0x001e, 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058, 0xb8bc,\r
-+      0x2068, 0x9005, 0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0, 0x600c,\r
-+      0x680e, 0x00be, 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011,\r
-+      0x182c, 0x2204, 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334, 0x9636,\r
-+      0x1508, 0x8318, 0x2334, 0x2204, 0x9084, 0xff00, 0x9636, 0x11d0,\r
-+      0x2011, 0x0270, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,\r
-+      0x000a, 0x080c, 0xbe1d, 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9,\r
-+      0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c, 0xbe1d,\r
-+      0x009e, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071,\r
-+      0x1800, 0x080c, 0x5fad, 0x080c, 0x2f96, 0x00ee, 0x0005, 0x0096,\r
-+      0x0026, 0x080c, 0x0fff, 0x090c, 0x0dd5, 0xa85c, 0x9080, 0x001a,\r
-+      0x20a0, 0x20a9, 0x000c, 0xa860, 0x20e8, 0x9006, 0x4004, 0x9186,\r
-+      0x0046, 0x1118, 0xa867, 0x0136, 0x0038, 0xa867, 0x0138, 0x9186,\r
-+      0x0041, 0x0110, 0xa87b, 0x0001, 0x7038, 0x9084, 0xff00, 0x7240,\r
-+      0x9294, 0xff00, 0x8007, 0x9215, 0xaa9a, 0x9186, 0x0046, 0x1168,\r
-+      0x7038, 0x9084, 0x00ff, 0x723c, 0x9294, 0xff00, 0x9215, 0xaa9e,\r
-+      0x723c, 0x9294, 0x00ff, 0xaaa2, 0x0060, 0x7040, 0x9084, 0x00ff,\r
-+      0x7244, 0x9294, 0xff00, 0x9215, 0xaa9e, 0x7244, 0x9294, 0x00ff,\r
-+      0xaaa2, 0x9186, 0x0046, 0x1118, 0x9e90, 0x0012, 0x0010, 0x9e90,\r
-+      0x001a, 0x2204, 0x8007, 0xa8a6, 0x8210, 0x2204, 0x8007, 0xa8aa,\r
-+      0x8210, 0x2204, 0x8007, 0xa8ae, 0x8210, 0x2204, 0x8007, 0xa8b2,\r
-+      0x8210, 0x9186, 0x0046, 0x11b8, 0x9e90, 0x0016, 0x2204, 0x8007,\r
-+      0xa8b6, 0x8210, 0x2204, 0x8007, 0xa8ba, 0x8210, 0x2204, 0x8007,\r
-+      0xa8be, 0x8210, 0x2204, 0x8007, 0xa8c2, 0x8210, 0x2011, 0x0205,\r
-+      0x2013, 0x0001, 0x00b0, 0x9e90, 0x001e, 0x2204, 0x8007, 0xa8b6,\r
-+      0x8210, 0x2204, 0x8007, 0xa8ba, 0x2011, 0x0205, 0x2013, 0x0001,\r
-+      0x2011, 0x0260, 0x2204, 0x8007, 0xa8be, 0x8210, 0x2204, 0x8007,\r
-+      0xa8c2, 0x9186, 0x0046, 0x1118, 0x2011, 0x0262, 0x0010, 0x2011,\r
-+      0x026a, 0x0146, 0x01d6, 0x0036, 0x20a9, 0x0001, 0x2019, 0x0008,\r
-+      0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0x2204, 0x8007,\r
-+      0x4004, 0x8210, 0x8319, 0x1dd0, 0x003e, 0x01ce, 0x013e, 0x2011,\r
-+      0x0205, 0x2013, 0x0000, 0x002e, 0x080c, 0x6c81, 0x009e, 0x0005,\r
-+      0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108,\r
-+      0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005, 0x00e6,\r
-+      0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016,\r
-+      0x0126, 0x2091, 0x8000, 0x2029, 0x19f0, 0x252c, 0x2021, 0x19f6,\r
-+      0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7654, 0x7074, 0x9606,\r
-+      0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500,\r
-+      0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xe5df,\r
-+      0x01b8, 0x080c, 0xe5ef, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120,\r
-+      0x0016, 0x080c, 0x1a5e, 0x001e, 0x080c, 0xcd2a, 0x1110, 0x080c,\r
-+      0x31e8, 0x080c, 0xcd3b, 0x1110, 0x080c, 0xb813, 0x080c, 0xae92,\r
-+      0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1208, 0x0858,\r
-+      0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce,\r
-+      0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005,\r
-+      0x0006, 0x2001, 0x1837, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006,\r
-+      0x0036, 0x0046, 0x080c, 0xd230, 0x0168, 0x2019, 0xffff, 0x9005,\r
-+      0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004,\r
-+      0x080c, 0x4cbb, 0x004e, 0x003e, 0x000e, 0x6004, 0x9086, 0x0001,\r
-+      0x1128, 0x080c, 0xa808, 0x080c, 0xae92, 0x9006, 0x0005, 0x00e6,\r
-+      0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7454,\r
-+      0x7074, 0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06, 0x0148, 0x6000,\r
-+      0x9086, 0x0000, 0x0128, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x0140,\r
-+      0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1220, 0x0c60,\r
-+      0x9085, 0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, 0x00ee,\r
-+      0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071,\r
-+      0x1840, 0xd5a4, 0x0118, 0x7004, 0x8000, 0x7006, 0xd5b4, 0x0118,\r
-+      0x7000, 0x8000, 0x7002, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007,\r
-+      0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005,\r
-+      0x0118, 0x2071, 0xfffe, 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e,\r
-+      0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xfff6,\r
-+      0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e05, 0x8000, 0x2077,\r
-+      0x1220, 0x8e70, 0x2e05, 0x8000, 0x2077, 0x0005, 0x00e6, 0x2071,\r
-+      0xfff4, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xfff8, 0x0c69,\r
-+      0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071,\r
-+      0x1840, 0x7014, 0x8000, 0x7016, 0x00ee, 0x000e, 0x012e, 0x0005,\r
-+      0x0003, 0x000b, 0x079e, 0x0000, 0xc000, 0x0001, 0x8064, 0x0008,\r
-+      0x0010, 0x0000, 0x8066, 0x0000, 0x0101, 0x0008, 0x4407, 0x0003,\r
-+      0x8060, 0x0000, 0x0400, 0x0000, 0x580d, 0x000b, 0x79a8, 0x000b,\r
-+      0x50ee, 0x000b, 0x4c0a, 0x0003, 0xbac0, 0x0009, 0x008a, 0x0000,\r
-+      0x0c0a, 0x000b, 0x15fe, 0x0008, 0x340a, 0x0003, 0xc4c0, 0x0009,\r
-+      0x7000, 0x0000, 0xffa0, 0x0001, 0x2000, 0x0000, 0x1668, 0x000b,\r
-+      0x808c, 0x0008, 0x0001, 0x0000, 0x0000, 0x0007, 0x4028, 0x0000,\r
-+      0x4047, 0x000a, 0x808c, 0x0008, 0x0002, 0x0000, 0x0822, 0x0003,\r
-+      0x4022, 0x0000, 0x0028, 0x000b, 0x4122, 0x0008, 0x94c0, 0x0009,\r
-+      0xff00, 0x0008, 0xffe0, 0x0009, 0x0500, 0x0008, 0x0a93, 0x000b,\r
-+      0x4447, 0x0002, 0x0e90, 0x0003, 0x0bfe, 0x0008, 0x11a0, 0x0001,\r
-+      0x126e, 0x0003, 0x0ca0, 0x0001, 0x126e, 0x0003, 0x9180, 0x0001,\r
-+      0x0004, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008,\r
-+      0x8066, 0x0000, 0x0009, 0x0008, 0x4436, 0x000b, 0x808c, 0x0008,\r
-+      0x0000, 0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x0004, 0x0000,\r
-+      0x8066, 0x0000, 0x0411, 0x0000, 0x443e, 0x0003, 0x03fe, 0x0000,\r
-+      0x43e0, 0x0001, 0x0e6b, 0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008,\r
-+      0x02e0, 0x0001, 0x0e6b, 0x000b, 0x9180, 0x0001, 0x0005, 0x0008,\r
-+      0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000,\r
-+      0x0019, 0x0000, 0x444d, 0x000b, 0x0240, 0x0002, 0x0a68, 0x0003,\r
-+      0x00fe, 0x0000, 0x326b, 0x000b, 0x0248, 0x000a, 0x085c, 0x0003,\r
-+      0x9180, 0x0001, 0x0006, 0x0008, 0x7f62, 0x0008, 0x8002, 0x0008,\r
-+      0x0003, 0x0008, 0x8066, 0x0000, 0x020a, 0x0000, 0x445b, 0x0003,\r
-+      0x112a, 0x0000, 0x002e, 0x0008, 0x022c, 0x0008, 0x3a44, 0x0002,\r
-+      0x0c0a, 0x000b, 0x808c, 0x0008, 0x0002, 0x0000, 0x1760, 0x0008,\r
-+      0x8062, 0x0008, 0x000f, 0x0008, 0x8066, 0x0000, 0x0011, 0x0008,\r
-+      0x4468, 0x0003, 0x01fe, 0x0008, 0x42e0, 0x0009, 0x0e5c, 0x0003,\r
-+      0x00fe, 0x0000, 0x43e0, 0x0001, 0x0e5c, 0x0003, 0x1734, 0x0000,\r
-+      0x1530, 0x0000, 0x1632, 0x0008, 0x0d2a, 0x0008, 0x9880, 0x0001,\r
-+      0x0010, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008,\r
-+      0x8066, 0x0000, 0x1e0a, 0x0008, 0x447a, 0x0003, 0x808a, 0x0008,\r
-+      0x0003, 0x0008, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000,\r
-+      0x5880, 0x000b, 0x8066, 0x0000, 0x3679, 0x0000, 0x4483, 0x0003,\r
-+      0x5884, 0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002, 0x088a, 0x000b,\r
-+      0x0d00, 0x0000, 0x0092, 0x000c, 0x8054, 0x0008, 0x0011, 0x0008,\r
-+      0x8074, 0x0000, 0x1010, 0x0008, 0x1efe, 0x0000, 0x300a, 0x000b,\r
-+      0x00c8, 0x000c, 0x000a, 0x000b, 0x00fe, 0x0000, 0x349a, 0x0003,\r
-+      0x1a60, 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000,\r
-+      0x0231, 0x0008, 0x4499, 0x000b, 0x03fe, 0x0000, 0x04d0, 0x0001,\r
-+      0x0cc0, 0x000b, 0x82c0, 0x0001, 0x1f00, 0x0000, 0xffa0, 0x0001,\r
-+      0x0400, 0x0000, 0x08af, 0x0003, 0x14c0, 0x000b, 0x01fe, 0x0008,\r
-+      0x0580, 0x0009, 0x7f06, 0x0000, 0x02fe, 0x0008, 0xffc0, 0x0001,\r
-+      0x00ff, 0x0008, 0x0690, 0x0001, 0x10af, 0x0003, 0x7f08, 0x0008,\r
-+      0x84c0, 0x0001, 0xff00, 0x0008, 0x08c0, 0x0003, 0x00fe, 0x0000,\r
-+      0x34b6, 0x000b, 0x8072, 0x0000, 0x1010, 0x0008, 0x3944, 0x0002,\r
-+      0x08b1, 0x0003, 0x00ba, 0x0003, 0x8072, 0x0000, 0x2020, 0x0008,\r
-+      0x3945, 0x000a, 0x08b6, 0x000b, 0x3946, 0x000a, 0x0cc7, 0x0003,\r
-+      0x0000, 0x0007, 0x3943, 0x000a, 0x08c7, 0x000b, 0x00ba, 0x0003,\r
-+      0x00fe, 0x0000, 0x34c5, 0x0003, 0x8072, 0x0000, 0x1000, 0x0000,\r
-+      0x00c7, 0x0003, 0x8072, 0x0000, 0x2000, 0x0000, 0x4000, 0x000f,\r
-+      0x1c60, 0x0000, 0x1b62, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008,\r
-+      0x44cc, 0x000b, 0x58cd, 0x000b, 0x0140, 0x0008, 0x0242, 0x0000,\r
-+      0x1f43, 0x0002, 0x0cdb, 0x000b, 0x0d44, 0x0000, 0x0d46, 0x0008,\r
-+      0x0348, 0x0008, 0x044a, 0x0008, 0x030a, 0x0008, 0x040c, 0x0000,\r
-+      0x0d06, 0x0000, 0x0d08, 0x0008, 0x00df, 0x0003, 0x0344, 0x0008,\r
-+      0x0446, 0x0008, 0x0548, 0x0008, 0x064a, 0x0000, 0x1948, 0x000a,\r
-+      0x08e2, 0x0003, 0x0d4a, 0x0008, 0x58e2, 0x0003, 0x3efe, 0x0008,\r
-+      0x7f4f, 0x0002, 0x08e9, 0x000b, 0x8000, 0x0000, 0x0001, 0x0000,\r
-+      0x0092, 0x000c, 0x8054, 0x0008, 0x0001, 0x0000, 0x8074, 0x0000,\r
-+      0x2020, 0x0008, 0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d, 0x0003,\r
-+      0x2b24, 0x0008, 0x2b24, 0x0008, 0x58f2, 0x000b, 0x8054, 0x0008,\r
-+      0x0002, 0x0000, 0x1242, 0x0002, 0x0940, 0x0003, 0x3a45, 0x000a,\r
-+      0x092f, 0x0003, 0x8072, 0x0000, 0x1000, 0x0000, 0x3945, 0x000a,\r
-+      0x08ff, 0x0003, 0x8072, 0x0000, 0x3010, 0x0000, 0x1e10, 0x000a,\r
-+      0x7f3c, 0x0000, 0x092a, 0x0003, 0x1d00, 0x0002, 0x7f3a, 0x0000,\r
-+      0x0d60, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008,\r
-+      0x4508, 0x000b, 0x00fe, 0x0000, 0x3527, 0x000b, 0x1c60, 0x0000,\r
-+      0x8062, 0x0008, 0x0001, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008,\r
-+      0x4510, 0x000b, 0x00fe, 0x0000, 0x3243, 0x000b, 0x0038, 0x0000,\r
-+      0x0060, 0x0008, 0x8062, 0x0008, 0x0019, 0x0000, 0x8066, 0x0000,\r
-+      0x0009, 0x0008, 0x4519, 0x000b, 0x80c0, 0x0009, 0x00ff, 0x0008,\r
-+      0x7f3e, 0x0008, 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80, 0x0001,\r
-+      0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4523, 0x000b,\r
-+      0x003a, 0x0008, 0x1dfe, 0x0000, 0x0104, 0x000b, 0x0036, 0x0008,\r
-+      0x00c8, 0x000c, 0x0140, 0x000b, 0x8074, 0x0000, 0x2000, 0x0000,\r
-+      0x8072, 0x0000, 0x2000, 0x0000, 0x0140, 0x000b, 0x3a44, 0x0002,\r
-+      0x0a71, 0x000b, 0x8074, 0x0000, 0x1000, 0x0000, 0x8072, 0x0000,\r
-+      0x1000, 0x0000, 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3640, 0x0003,\r
-+      0x26fe, 0x0008, 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700, 0x0008,\r
-+      0x00d0, 0x0009, 0x0d52, 0x000b, 0x8074, 0x0000, 0x4040, 0x0008,\r
-+      0x5940, 0x0003, 0x50ee, 0x000b, 0x3a46, 0x000a, 0x0d52, 0x000b,\r
-+      0x3a47, 0x0002, 0x094d, 0x000b, 0x8054, 0x0008, 0x0004, 0x0000,\r
-+      0x8074, 0x0000, 0x8000, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008,\r
-+      0x019c, 0x0003, 0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a, 0x0003,\r
-+      0x1246, 0x000a, 0x0e3a, 0x0003, 0x1a60, 0x0000, 0x8062, 0x0008,\r
-+      0x0002, 0x0000, 0x8066, 0x0000, 0x362a, 0x0000, 0x4557, 0x000b,\r
-+      0x2000, 0x0000, 0x2000, 0x0000, 0x2102, 0x0000, 0x2102, 0x0000,\r
-+      0x2204, 0x0000, 0x2204, 0x0000, 0x2306, 0x0000, 0x2306, 0x0000,\r
-+      0x2408, 0x0000, 0x2408, 0x0000, 0x250a, 0x0000, 0x250a, 0x0000,\r
-+      0x260c, 0x0000, 0x260c, 0x0000, 0x270e, 0x0000, 0x270e, 0x0000,\r
-+      0x2810, 0x0000, 0x2810, 0x0000, 0x2912, 0x0000, 0x2912, 0x0000,\r
-+      0x1a60, 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000,\r
-+      0x0052, 0x0000, 0x4571, 0x0003, 0x92c0, 0x0009, 0x0780, 0x0008,\r
-+      0x0e56, 0x0003, 0x124b, 0x0002, 0x097a, 0x0003, 0x2e4d, 0x0002,\r
-+      0x2e4d, 0x0002, 0x0a40, 0x0003, 0x3a46, 0x000a, 0x0d8a, 0x000b,\r
-+      0x597c, 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x1243, 0x000a,\r
-+      0x0998, 0x0003, 0x8010, 0x0008, 0x000d, 0x0000, 0x021b, 0x000c,\r
-+      0x1948, 0x000a, 0x0987, 0x000b, 0x0210, 0x0004, 0x1810, 0x0000,\r
-+      0x021b, 0x000c, 0x0198, 0x000b, 0x1948, 0x000a, 0x098e, 0x000b,\r
-+      0x1243, 0x000a, 0x0a43, 0x0003, 0x194d, 0x000a, 0x0992, 0x0003,\r
-+      0x1243, 0x000a, 0x0a4a, 0x0003, 0x5992, 0x0003, 0x8054, 0x0008,\r
-+      0x0004, 0x0000, 0x0210, 0x0004, 0x1810, 0x0000, 0x021b, 0x000c,\r
-+      0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0x3000, 0x0008,\r
-+      0x0d30, 0x0000, 0x3a42, 0x0002, 0x0da2, 0x000b, 0x15fe, 0x0008,\r
-+      0x3461, 0x000b, 0x000a, 0x000b, 0x8074, 0x0000, 0x0501, 0x0000,\r
-+      0x8010, 0x0008, 0x000c, 0x0008, 0x021b, 0x000c, 0x000a, 0x000b,\r
-+      0xbbe0, 0x0009, 0x0030, 0x0008, 0x0db8, 0x0003, 0x18fe, 0x0000,\r
-+      0x3ce0, 0x0009, 0x09b5, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009,\r
-+      0x09b5, 0x0003, 0x020b, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000,\r
-+      0x0208, 0x000b, 0x8076, 0x0008, 0x0041, 0x0008, 0x0208, 0x000b,\r
-+      0xbbe0, 0x0009, 0x0032, 0x0000, 0x0dbd, 0x0003, 0x3c1e, 0x0008,\r
-+      0x0208, 0x000b, 0xbbe0, 0x0009, 0x003b, 0x0000, 0x0dc2, 0x000b,\r
-+      0x3c20, 0x0000, 0x0208, 0x000b, 0xbbe0, 0x0009, 0x0035, 0x0008,\r
-+      0x0dc8, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000, 0x0384, 0x000b,\r
-+      0xbbe0, 0x0009, 0x0036, 0x0008, 0x0aa5, 0x000b, 0xbbe0, 0x0009,\r
-+      0x0037, 0x0000, 0x0de9, 0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009,\r
-+      0x0db5, 0x000b, 0x8076, 0x0008, 0x0040, 0x0000, 0x1a60, 0x0000,\r
-+      0x8062, 0x0008, 0x000d, 0x0000, 0x2604, 0x0008, 0x2604, 0x0008,\r
-+      0x2706, 0x0008, 0x2706, 0x0008, 0x2808, 0x0000, 0x2808, 0x0000,\r
-+      0x290a, 0x0000, 0x290a, 0x0000, 0x8066, 0x0000, 0x0422, 0x0000,\r
-+      0x45e0, 0x000b, 0x0210, 0x0004, 0x8054, 0x0008, 0x0004, 0x0000,\r
-+      0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0xb000, 0x0000,\r
-+      0x019c, 0x0003, 0xbbe0, 0x0009, 0x0038, 0x0000, 0x0dfb, 0x000b,\r
-+      0x18fe, 0x0000, 0x3ce0, 0x0009, 0x09f8, 0x0003, 0x15fe, 0x0008,\r
-+      0x3ce0, 0x0009, 0x0db1, 0x0003, 0x020b, 0x0004, 0x8076, 0x0008,\r
-+      0x0040, 0x0000, 0x8072, 0x0000, 0x8000, 0x0000, 0x0268, 0x000b,\r
-+      0x8076, 0x0008, 0x0042, 0x0008, 0x0208, 0x000b, 0xbbe0, 0x0009,\r
-+      0x0016, 0x0000, 0x0e08, 0x000b, 0x8074, 0x0000, 0x0808, 0x0008,\r
-+      0x3a44, 0x0002, 0x0c0c, 0x000b, 0x8074, 0x0000, 0x0800, 0x0000,\r
-+      0x8072, 0x0000, 0x8000, 0x0000, 0x8000, 0x000f, 0x000a, 0x000b,\r
-+      0x8072, 0x0000, 0x8000, 0x0000, 0x000a, 0x000b, 0x3d30, 0x000a,\r
-+      0x7f00, 0x0000, 0xbc80, 0x0001, 0x0007, 0x0000, 0x0214, 0x0003,\r
-+      0x1930, 0x000a, 0x7f00, 0x0000, 0x9880, 0x0001, 0x0007, 0x0000,\r
-+      0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000,\r
-+      0x000a, 0x0008, 0x4619, 0x000b, 0x4000, 0x000f, 0x221e, 0x000b,\r
-+      0x0870, 0x0008, 0x4000, 0x000f, 0x7e1b, 0x000b, 0xbbe0, 0x0009,\r
-+      0x0030, 0x0008, 0x0e1b, 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009,\r
-+      0x0a2c, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0a2c, 0x0003,\r
-+      0x020b, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x022e, 0x0003,\r
-+      0x8076, 0x0008, 0x0041, 0x0008, 0x8072, 0x0000, 0x8000, 0x0000,\r
-+      0x021b, 0x0003, 0xbac0, 0x0009, 0x0090, 0x0008, 0x0a37, 0x0003,\r
-+      0x8074, 0x0000, 0x0706, 0x0000, 0x0239, 0x0003, 0x8074, 0x0000,\r
-+      0x0703, 0x0000, 0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000,\r
-+      0x0276, 0x000b, 0x8010, 0x0008, 0x0008, 0x0000, 0x0276, 0x000b,\r
-+      0x8010, 0x0008, 0x0022, 0x0008, 0x0276, 0x000b, 0x0210, 0x0004,\r
-+      0x8010, 0x0008, 0x0007, 0x0000, 0x021b, 0x000c, 0x1810, 0x0000,\r
-+      0x021b, 0x000c, 0x0282, 0x0003, 0x0210, 0x0004, 0x8010, 0x0008,\r
-+      0x001b, 0x0008, 0x021b, 0x000c, 0x1810, 0x0000, 0x021b, 0x000c,\r
-+      0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008,\r
-+      0x0d30, 0x0000, 0x000a, 0x000b, 0x8010, 0x0008, 0x0009, 0x0008,\r
-+      0x0276, 0x000b, 0x8010, 0x0008, 0x0005, 0x0008, 0x0276, 0x000b,\r
-+      0x1648, 0x000a, 0x0c6f, 0x000b, 0x808c, 0x0008, 0x0001, 0x0000,\r
-+      0x8010, 0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x086f, 0x0003,\r
-+      0x3a44, 0x0002, 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x0276, 0x000b,\r
-+      0x8010, 0x0008, 0x0003, 0x0008, 0x027a, 0x000b, 0x8010, 0x0008,\r
-+      0x000b, 0x0000, 0x027a, 0x000b, 0x8010, 0x0008, 0x0002, 0x0000,\r
-+      0x027a, 0x000b, 0x3a47, 0x0002, 0x0d40, 0x000b, 0x8010, 0x0008,\r
-+      0x0006, 0x0008, 0x027a, 0x000b, 0x8074, 0x0000, 0xf000, 0x0008,\r
-+      0x8072, 0x0000, 0x3000, 0x0008, 0x021b, 0x000c, 0x0231, 0x0004,\r
-+      0x3a40, 0x000a, 0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008,\r
-+      0x021b, 0x000c, 0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000,\r
-+      0x8072, 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002,\r
-+      0x2e4d, 0x0002, 0x0a8d, 0x000b, 0x8054, 0x0008, 0x0019, 0x0000,\r
-+      0x000a, 0x000b, 0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b,\r
-+      0x3a44, 0x0002, 0x0c0a, 0x000b, 0x026b, 0x000b, 0x808c, 0x0008,\r
-+      0x0000, 0x0008, 0x4447, 0x0002, 0x0ab9, 0x0003, 0xc0c0, 0x0001,\r
-+      0x00ff, 0x0008, 0xffe0, 0x0009, 0x00ff, 0x0008, 0x0e90, 0x0003,\r
-+      0xc1e0, 0x0001, 0xffff, 0x0008, 0x0e90, 0x0003, 0x8010, 0x0008,\r
-+      0x0013, 0x0000, 0x021b, 0x000c, 0x8074, 0x0000, 0x0202, 0x0008,\r
-+      0x000a, 0x000b, 0x3a40, 0x000a, 0x0eb6, 0x000b, 0x8074, 0x0000,\r
-+      0x0200, 0x0000, 0x3d00, 0x0000, 0x3cfe, 0x0000, 0x8072, 0x0000,\r
-+      0x8000, 0x0000, 0x43e0, 0x0001, 0x0eb4, 0x0003, 0x42fe, 0x0000,\r
-+      0xffc0, 0x0001, 0x00ff, 0x0008, 0x00e0, 0x0009, 0x0a90, 0x000b,\r
-+      0x0d08, 0x0008, 0x0309, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000,\r
-+      0x000a, 0x000b, 0x038d, 0x0004, 0x808c, 0x0008, 0x0001, 0x0000,\r
-+      0x04fe, 0x0008, 0x3370, 0x0003, 0x0460, 0x0000, 0x8062, 0x0008,\r
-+      0x0001, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x46c3, 0x0003,\r
-+      0x0004, 0x0000, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f00, 0x0000,\r
-+      0x80e0, 0x0001, 0x0004, 0x0000, 0x0add, 0x000b, 0x80e0, 0x0001,\r
-+      0x0005, 0x0008, 0x0add, 0x000b, 0x80e0, 0x0001, 0x0006, 0x0008,\r
-+      0x0add, 0x000b, 0x82c0, 0x0001, 0xff00, 0x0008, 0x7f04, 0x0008,\r
-+      0x82e0, 0x0009, 0x0600, 0x0008, 0x0add, 0x000b, 0x82e0, 0x0009,\r
-+      0x0500, 0x0008, 0x0add, 0x000b, 0x82e0, 0x0009, 0x0400, 0x0000,\r
-+      0x0f70, 0x0003, 0xc4c0, 0x0009, 0x7000, 0x0000, 0xffe0, 0x0009,\r
-+      0x1000, 0x0000, 0x0b09, 0x0003, 0x037e, 0x0004, 0x3941, 0x0002,\r
-+      0x0ae8, 0x000b, 0x8072, 0x0000, 0x0400, 0x0000, 0x000a, 0x000b,\r
-+      0x0460, 0x0000, 0x80fe, 0x0008, 0x002b, 0x0008, 0x7f62, 0x0008,\r
-+      0x8066, 0x0000, 0x2209, 0x0008, 0x46ee, 0x0003, 0x11fe, 0x0000,\r
-+      0x3304, 0x0003, 0x9180, 0x0001, 0x0002, 0x0000, 0x8060, 0x0000,\r
-+      0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0609, 0x0008,\r
-+      0x46f8, 0x000b, 0x42fe, 0x0000, 0xffc0, 0x0001, 0xff00, 0x0008,\r
-+      0x03e0, 0x0009, 0x0f01, 0x0003, 0x8072, 0x0000, 0x0400, 0x0000,\r
-+      0x0046, 0x0003, 0x9180, 0x0001, 0x0003, 0x0008, 0x02eb, 0x0003,\r
-+      0x8072, 0x0000, 0x0400, 0x0000, 0x8010, 0x0008, 0x0010, 0x0000,\r
-+      0x0361, 0x0003, 0x037e, 0x0004, 0x3941, 0x0002, 0x0b0f, 0x0003,\r
-+      0x8072, 0x0000, 0x0400, 0x0000, 0x000a, 0x000b, 0x0346, 0x000c,\r
-+      0x11fe, 0x0000, 0x3717, 0x0003, 0x8072, 0x0000, 0x0400, 0x0000,\r
-+      0x8010, 0x0008, 0x000e, 0x0000, 0x0361, 0x0003, 0x8060, 0x0000,\r
-+      0x0400, 0x0000, 0x04fe, 0x0008, 0x372c, 0x000b, 0x808c, 0x0008,\r
-+      0x0000, 0x0008, 0x9180, 0x0001, 0x0005, 0x0008, 0x7f62, 0x0008,\r
-+      0x8066, 0x0000, 0x0009, 0x0008, 0x4722, 0x000b, 0x0060, 0x0008,\r
-+      0x8062, 0x0008, 0x001b, 0x0008, 0x4304, 0x0008, 0x4206, 0x0008,\r
-+      0x8066, 0x0000, 0x0412, 0x0000, 0x472a, 0x0003, 0x0343, 0x0003,\r
-+      0x808c, 0x0008, 0x0001, 0x0000, 0x0460, 0x0000, 0x8062, 0x0008,\r
-+      0x002b, 0x0008, 0x8066, 0x0000, 0x0609, 0x0008, 0x4733, 0x000b,\r
-+      0x8066, 0x0000, 0x220a, 0x0008, 0x4736, 0x000b, 0x42fe, 0x0000,\r
-+      0xffc0, 0x0001, 0xff00, 0x0008, 0x7f04, 0x0008, 0x8060, 0x0000,\r
-+      0x0400, 0x0000, 0x9180, 0x0001, 0x0002, 0x0000, 0x7f62, 0x0008,\r
-+      0x8066, 0x0000, 0x041a, 0x0008, 0x4742, 0x000b, 0x8072, 0x0000,\r
-+      0x0400, 0x0000, 0x0046, 0x0003, 0x8060, 0x0000, 0x0400, 0x0000,\r
-+      0x1362, 0x0008, 0x8066, 0x0000, 0x0411, 0x0000, 0x474b, 0x000b,\r
-+      0x02fe, 0x0008, 0x03e0, 0x0009, 0x0f51, 0x0003, 0x0d22, 0x0000,\r
-+      0x4000, 0x000f, 0x8280, 0x0009, 0x0002, 0x0000, 0x1380, 0x0001,\r
-+      0x7f62, 0x0008, 0x8066, 0x0000, 0x2209, 0x0008, 0x4757, 0x0003,\r
-+      0x0200, 0x000a, 0xffc0, 0x0001, 0x0007, 0x0000, 0x7f06, 0x0000,\r
-+      0x1362, 0x0008, 0x8066, 0x0000, 0x060a, 0x0008, 0x475f, 0x000b,\r
-+      0x4000, 0x000f, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x2f44, 0x000a,\r
-+      0x2f44, 0x000a, 0x0e6b, 0x000b, 0x808a, 0x0008, 0x0003, 0x0008,\r
-+      0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008,\r
-+      0x5b6c, 0x0003, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a, 0x000b,\r
-+      0x3a44, 0x0002, 0x0c0a, 0x000b, 0x808c, 0x0008, 0x0000, 0x0008,\r
-+      0x8010, 0x0008, 0x0011, 0x0008, 0x021b, 0x000c, 0x42fe, 0x0000,\r
-+      0xffc0, 0x0001, 0x00ff, 0x0008, 0x7f10, 0x0008, 0x021b, 0x000c,\r
-+      0x4310, 0x0008, 0x027a, 0x000b, 0x3941, 0x0002, 0x0b81, 0x0003,\r
-+      0x4000, 0x000f, 0x8072, 0x0000, 0x0404, 0x0008, 0x4000, 0x000f,\r
-+      0x8010, 0x0008, 0x0012, 0x0008, 0x021b, 0x000c, 0x0346, 0x000c,\r
-+      0x1110, 0x0000, 0x021b, 0x000c, 0x11fe, 0x0000, 0x3787, 0x0003,\r
-+      0x000a, 0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008, 0x7f00, 0x0000,\r
-+      0xc3c0, 0x0001, 0xff00, 0x0008, 0x00d0, 0x0009, 0x0bb2, 0x0003,\r
-+      0x0d0a, 0x0000, 0x8580, 0x0001, 0x1000, 0x0000, 0x7f62, 0x0008,\r
-+      0x8060, 0x0000, 0x0400, 0x0000, 0x8066, 0x0000, 0x0809, 0x0000,\r
-+      0x479c, 0x000b, 0x04fe, 0x0008, 0x33ab, 0x0003, 0x0460, 0x0000,\r
-+      0x8062, 0x0008, 0x0004, 0x0000, 0x8066, 0x0000, 0x0211, 0x0000,\r
-+      0x47a4, 0x0003, 0x01fe, 0x0008, 0x00e0, 0x0009, 0x0fab, 0x0003,\r
-+      0x02fe, 0x0008, 0x43e0, 0x0001, 0x0bb1, 0x0003, 0x0500, 0x0002,\r
-+      0x7f0a, 0x0000, 0xffe0, 0x0009, 0x0800, 0x0000, 0x0f95, 0x000b,\r
-+      0x0d08, 0x0008, 0x4000, 0x000f, 0x43fe, 0x0008, 0x3e80, 0x0001,\r
-+      0xffc0, 0x0001, 0x7fff, 0x0000, 0x0d60, 0x0000, 0x7f62, 0x0008,\r
-+      0x8066, 0x0000, 0x0809, 0x0000, 0x47ba, 0x0003, 0x8060, 0x0000,\r
-+      0x0400, 0x0000, 0x84c0, 0x0001, 0xff00, 0x0008, 0x7f60, 0x000a,\r
-+      0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a,\r
-+      0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0xff80, 0x0009,\r
-+      0x1000, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0809, 0x0000,\r
-+      0x47cc, 0x000b, 0x4000, 0x000f, 0x5ff4, 0xebed, 0x0001, 0x0002,\r
-+      0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200,\r
-+      0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x2c40\r
-+};\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2300ipx_length01 = 0xe9c7;\r
-+#else\r
-+unsigned short risc_code_length01 = 0xe9c7;\r
-+#endif\r
-+\r
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2322flx_fw.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2322flx_fw.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2322flx_fw.h       1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2322flx_fw.h    2004-04-22 19:42:21.000000000 -0700
-@@ -0,0 +1,7401 @@
-+/************************************************************************\r
-+ *                                                                    *\r
-+ *               --- ISP2322 Initiator/Target Firmware ---              *\r
-+ *             with Fabric (Public Loop), Point-point,                *\r
-+ *             expanded LUN addressing for FCTAPE, and 2K port logins   *\r
-+ *                                            FibreLite enabled       *\r
-+ *                                                                    *\r
-+ ********************************************************************** */\r
-+/*\r
-+ *    Firmware Version 3.02.28 (14:05 Apr 03, 2004)\r
-+ */\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2322flx_version = 3*1024+2;\r
-+#else\r
-+unsigned short risc_code_version = 3*1024+2;\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned char fw2322flx_version_str[] = {3, 2,28};\r
-+#else\r
-+unsigned char firmware_version[] = {3, 2,28};\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+#define fw2322flx_VERSION_STRING "3.02.28"\r
-+#else\r
-+#define FW_VERSION_STRING "3.02.28"\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2322flx_addr01 = 0x0800 ;\r
-+#else\r
-+unsigned short risc_code_addr01 = 0x0800 ;\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2322flx_code01[] = { \r
-+#else\r
-+unsigned short risc_code01[] = { \r
-+#endif\r
-+      0x0470, 0x0000, 0x0000, 0xce3b, 0x0000, 0x0003, 0x0002, 0x001c,\r
-+      0x0317, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,\r
-+      0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,\r
-+      0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,\r
-+      0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,\r
-+      0x332e, 0x3032, 0x2e32, 0x3820, 0x2020, 0x2020, 0x2400, 0x20a9,\r
-+      0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,\r
-+      0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,\r
-+      0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,\r
-+      0x400f, 0x2091, 0x2800, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f,\r
-+      0x2091, 0x2a00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091,\r
-+      0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00,\r
-+      0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001,\r
-+      0x0000, 0x20c1, 0x0004, 0x20c9, 0x1cff, 0x2059, 0x0000, 0x2b78,\r
-+      0x7883, 0x0004, 0x2089, 0x28de, 0x2051, 0x1800, 0x2a70, 0x20e1,\r
-+      0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e3d, 0x00f6,\r
-+      0x7888, 0x9005, 0x11f8, 0x2061, 0xc000, 0x080c, 0x1efc, 0x1170,\r
-+      0x2079, 0x0300, 0x080c, 0x1f12, 0x2061, 0xe000, 0x080c, 0x1efc,\r
-+      0x1128, 0x2079, 0x0380, 0x080c, 0x1f12, 0x0060, 0x00fe, 0x7883,\r
-+      0x4010, 0x7837, 0x4010, 0x7833, 0x0010, 0x2091, 0x5000, 0x2091,\r
-+      0x4080, 0x0cf8, 0x00fe, 0x2029, 0x26c0, 0x2031, 0xffff, 0x2039,\r
-+      0x269c, 0x2021, 0x0050, 0x20e9, 0x0001, 0x20a1, 0x0000, 0x20a9,\r
-+      0x0800, 0x900e, 0x4104, 0x20e9, 0x0001, 0x20a1, 0x1000, 0x900e,\r
-+      0x2001, 0x0dc1, 0x9084, 0x0fff, 0x20a8, 0x4104, 0x2001, 0x0000,\r
-+      0x9086, 0x0000, 0x0120, 0x21a8, 0x4104, 0x8001, 0x1de0, 0x756a,\r
-+      0x766e, 0x7766, 0x7472, 0x7476, 0x00e6, 0x2071, 0x1b1e, 0x2472,\r
-+      0x00ee, 0x20a1, 0x1ddc, 0x716c, 0x810d, 0x810d, 0x810d, 0x810d,\r
-+      0x918c, 0x000f, 0x2001, 0x0001, 0x9112, 0x900e, 0x21a8, 0x4104,\r
-+      0x8211, 0x1de0, 0x716c, 0x3400, 0x8001, 0x9102, 0x0120, 0x0218,\r
-+      0x20a8, 0x900e, 0x4104, 0x2009, 0x1800, 0x810d, 0x810d, 0x810d,\r
-+      0x810d, 0x810d, 0x918c, 0x001f, 0x2001, 0x0001, 0x9112, 0x20e9,\r
-+      0x0001, 0x20a1, 0x0800, 0x900e, 0x20a9, 0x0800, 0x4104, 0x8211,\r
-+      0x1dd8, 0x080c, 0x0f3a, 0x080c, 0x5cea, 0x080c, 0x9b7d, 0x080c,\r
-+      0x10f1, 0x080c, 0x12d6, 0x080c, 0x1a5a, 0x080c, 0x8440, 0x080c,\r
-+      0x0cf7, 0x080c, 0x1076, 0x080c, 0x328b, 0x080c, 0x73cb, 0x080c,\r
-+      0x6722, 0x080c, 0x808a, 0x080c, 0x20dd, 0x080c, 0x7a5f, 0x080c,\r
-+      0x1f2b, 0x080c, 0x2065, 0x080c, 0x20d2, 0x2091, 0x3009, 0x7883,\r
-+      0x0000, 0x1004, 0x0941, 0x7880, 0x9086, 0x0002, 0x1190, 0x7883,\r
-+      0x4000, 0x7837, 0x4000, 0x7833, 0x0010, 0x0e04, 0x0935, 0x2091,\r
-+      0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,\r
-+      0x11be, 0x2071, 0x1800, 0x7003, 0x0000, 0x2071, 0x1800, 0x7000,\r
-+      0x908e, 0x0003, 0x1158, 0x080c, 0x499d, 0x080c, 0x32b2, 0x080c,\r
-+      0x7433, 0x080c, 0x6bca, 0x080c, 0x80b3, 0x0c78, 0x000b, 0x0c98,\r
-+      0x0962, 0x0963, 0x0afa, 0x0960, 0x0bab, 0x0cf6, 0x0cf6, 0x0cf6,\r
-+      0x080c, 0x0d65, 0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000,\r
-+      0x9086, 0x0001, 0x1904, 0x0acd, 0x080c, 0x0e8d, 0x080c, 0x70b7,\r
-+      0x0150, 0x080c, 0x70da, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085,\r
-+      0x1800, 0x782a, 0x0478, 0x080c, 0x6fe8, 0x7000, 0x9086, 0x0001,\r
-+      0x1904, 0x0acd, 0x7094, 0x9086, 0x0028, 0x1904, 0x0acd, 0x080c,\r
-+      0x8082, 0x080c, 0x8074, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079,\r
-+      0x0100, 0x2011, 0xffff, 0x080c, 0x286d, 0x7a28, 0x9295, 0x5e2c,\r
-+      0x7a2a, 0x2011, 0x6f2d, 0x080c, 0x8159, 0x2011, 0x6f20, 0x080c,\r
-+      0x825f, 0x2011, 0x5b41, 0x080c, 0x8159, 0x2011, 0x8030, 0x901e,\r
-+      0x7392, 0x04d0, 0x080c, 0x53ee, 0x2079, 0x0100, 0x7844, 0x9005,\r
-+      0x1904, 0x0acd, 0x2011, 0x5b41, 0x080c, 0x8159, 0x2011, 0x6f2d,\r
-+      0x080c, 0x8159, 0x2011, 0x6f20, 0x080c, 0x825f, 0x2001, 0x0265,\r
-+      0x2001, 0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842,\r
-+      0x2001, 0x1977, 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100,\r
-+      0x080c, 0x5c92, 0x00ce, 0x0804, 0x0acd, 0x780f, 0x006b, 0x7a28,\r
-+      0x080c, 0x70bf, 0x0118, 0x9295, 0x5e2c, 0x0010, 0x9295, 0x402c,\r
-+      0x7a2a, 0x2011, 0x8010, 0x73d4, 0x2001, 0x1978, 0x2003, 0x0001,\r
-+      0x080c, 0x273f, 0x080c, 0x48d8, 0x7244, 0xc284, 0x7246, 0x2001,\r
-+      0x180c, 0x200c, 0xc1ac, 0xc1cc, 0x2102, 0x2001, 0x0390, 0x2003,\r
-+      0x0400, 0x080c, 0x98c8, 0x080c, 0x91e1, 0x2011, 0x0004, 0x080c,\r
-+      0xb857, 0x080c, 0x98e4, 0x080c, 0x6562, 0x080c, 0x70b7, 0x1120,\r
-+      0x080c, 0x279a, 0x0600, 0x0420, 0x080c, 0x5c99, 0x0140, 0x7093,\r
-+      0x0001, 0x70cf, 0x0000, 0x080c, 0x55bb, 0x0804, 0x0acd, 0x080c,\r
-+      0x538d, 0xd094, 0x01a8, 0x2001, 0x0390, 0x2003, 0x0404, 0x2011,\r
-+      0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x5391, 0xd0d4, 0x1118,\r
-+      0x080c, 0x279a, 0x1270, 0x2011, 0x180c, 0x2204, 0xc0bc, 0x0088,\r
-+      0x080c, 0x5391, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd,\r
-+      0x0040, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x665f,\r
-+      0x0008, 0x2012, 0x080c, 0x6625, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e,\r
-+      0x00a8, 0x707b, 0x0000, 0x080c, 0x70b7, 0x1130, 0x70ac, 0x9005,\r
-+      0x1168, 0x080c, 0xbcae, 0x0050, 0x080c, 0xbcae, 0x70d8, 0xd09c,\r
-+      0x1128, 0x70ac, 0x9005, 0x0110, 0x080c, 0x5c6f, 0x70e3, 0x0000,\r
-+      0x70df, 0x0000, 0x70a3, 0x0000, 0x080c, 0x27a2, 0x0228, 0x2011,\r
-+      0x0101, 0x2204, 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x70b7, 0x1178,\r
-+      0x9016, 0x0016, 0x2009, 0x0002, 0x2019, 0x193e, 0x211a, 0x001e,\r
-+      0x705b, 0xffff, 0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019,\r
-+      0x193e, 0x201b, 0x0000, 0x2079, 0x1853, 0x7804, 0xd0ac, 0x0108,\r
-+      0xc295, 0x72da, 0x080c, 0x70b7, 0x0118, 0x9296, 0x0004, 0x0518,\r
-+      0x2011, 0x0001, 0x080c, 0xb857, 0x70a7, 0x0000, 0x70ab, 0xffff,\r
-+      0x7003, 0x0002, 0x00fe, 0x080c, 0x2ddb, 0x080c, 0x98c8, 0x2011,\r
-+      0x0005, 0x080c, 0x9339, 0x080c, 0x98e4, 0x080c, 0x70b7, 0x0148,\r
-+      0x00c6, 0x2061, 0x0100, 0x0016, 0x2009, 0x0002, 0x61e2, 0x001e,\r
-+      0x00ce, 0x012e, 0x00e0, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003,\r
-+      0x0002, 0x080c, 0x98c8, 0x2011, 0x0005, 0x080c, 0x9339, 0x080c,\r
-+      0x98e4, 0x080c, 0x70b7, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,\r
-+      0x2009, 0x0002, 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005,\r
-+      0x00c6, 0x00b6, 0x080c, 0x70b7, 0x1118, 0x20a9, 0x0800, 0x0010,\r
-+      0x20a9, 0x0782, 0x080c, 0x70b7, 0x1110, 0x900e, 0x0010, 0x2009,\r
-+      0x007e, 0x86ff, 0x0138, 0x9180, 0x1000, 0x2004, 0x905d, 0x0110,\r
-+      0xb800, 0xd0bc, 0x090c, 0x311a, 0x8108, 0x1f04, 0x0ae1, 0x707b,\r
-+      0x0000, 0x707c, 0x9084, 0x00ff, 0x707e, 0x70af, 0x0000, 0x00be,\r
-+      0x00ce, 0x0005, 0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086,\r
-+      0x0002, 0x1904, 0x0ba8, 0x70a8, 0x9086, 0xffff, 0x0120, 0x080c,\r
-+      0x2ddb, 0x0804, 0x0ba8, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0520,\r
-+      0xd084, 0x0510, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e,\r
-+      0xd08c, 0x01d0, 0x70dc, 0x9086, 0xffff, 0x0190, 0x080c, 0x2f66,\r
-+      0x70d8, 0xd094, 0x1904, 0x0ba8, 0x2011, 0x0001, 0x080c, 0xbf61,\r
-+      0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x2fa0, 0x0804, 0x0ba8,\r
-+      0x70e0, 0x9005, 0x1904, 0x0ba8, 0x70a4, 0x9005, 0x1904, 0x0ba8,\r
-+      0x70d8, 0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x0ba8, 0x080c, 0x6625,\r
-+      0x1904, 0x0ba8, 0x080c, 0x6678, 0x1904, 0x0ba8, 0x080c, 0x665f,\r
-+      0x01c0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c,\r
-+      0x6270, 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04,\r
-+      0x0b4e, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804,\r
-+      0x0ba8, 0x0006, 0x2001, 0x0103, 0x2003, 0x006b, 0x000e, 0x2011,\r
-+      0x1984, 0x080c, 0x0faa, 0x2011, 0x199e, 0x080c, 0x0faa, 0x7030,\r
-+      0xc08c, 0x7032, 0x7003, 0x0003, 0x70ab, 0xffff, 0x080c, 0x0e61,\r
-+      0x9006, 0x080c, 0x23c9, 0x0036, 0x0046, 0x2019, 0xffff, 0x2021,\r
-+      0x0006, 0x080c, 0x4a75, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100,\r
-+      0x080c, 0x70da, 0x0150, 0x080c, 0x70b7, 0x7828, 0x0118, 0x9084,\r
-+      0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x080c, 0x98c8,\r
-+      0x2001, 0x19b9, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011, 0x0000,\r
-+      0x080c, 0x9339, 0x2011, 0x0000, 0x080c, 0x9343, 0x080c, 0x98e4,\r
-+      0x012e, 0x00be, 0x0005, 0x0016, 0x0026, 0x0046, 0x00f6, 0x0126,\r
-+      0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c, 0xfffd, 0x7906,\r
-+      0x2009, 0x00f7, 0x080c, 0x5c58, 0x7940, 0x918c, 0x0010, 0x7942,\r
-+      0x7924, 0xd1b4, 0x0120, 0x2011, 0x0040, 0x080c, 0x286d, 0xd19c,\r
-+      0x0120, 0x2011, 0x0008, 0x080c, 0x286d, 0x0006, 0x0036, 0x0156,\r
-+      0x0000, 0x2001, 0x1978, 0x2004, 0x9005, 0x1518, 0x080c, 0x2801,\r
-+      0x1148, 0x2001, 0x0001, 0x080c, 0x276e, 0x2001, 0x0001, 0x080c,\r
-+      0x2751, 0x00b8, 0x080c, 0x2809, 0x1138, 0x9006, 0x080c, 0x276e,\r
-+      0x9006, 0x080c, 0x2751, 0x0068, 0x080c, 0x2811, 0x1d50, 0x2001,\r
-+      0x1969, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2568, 0x0804,\r
-+      0x0ca9, 0x080c, 0x2890, 0x080c, 0x28d4, 0x20a9, 0x003a, 0x1d04,\r
-+      0x0bff, 0x080c, 0x823f, 0x1f04, 0x0bff, 0x080c, 0x70c8, 0x0148,\r
-+      0x080c, 0x70da, 0x1118, 0x080c, 0x73c6, 0x0050, 0x080c, 0x70bf,\r
-+      0x0dd0, 0x080c, 0x73c1, 0x080c, 0x73b7, 0x080c, 0x6fe8, 0x0020,\r
-+      0x2009, 0x00f8, 0x080c, 0x5c58, 0x7850, 0xc0e5, 0x7852, 0x080c,\r
-+      0x70b7, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678,\r
-+      0x2019, 0xea60, 0x0d0c, 0x823f, 0x7820, 0xd09c, 0x15a0, 0x080c,\r
-+      0x70b7, 0x0904, 0x0c8b, 0x7824, 0xd0ac, 0x1904, 0x0cae, 0x080c,\r
-+      0x70da, 0x1548, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e,\r
-+      0x2011, 0x1800, 0x080c, 0x286d, 0x080c, 0x2819, 0x7824, 0x9084,\r
-+      0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810, 0x2004,\r
-+      0x9084, 0x9000, 0x0110, 0x080c, 0x0cd1, 0x8421, 0x1160, 0x1d04,\r
-+      0x0c5b, 0x080c, 0x823f, 0x080c, 0x73c1, 0x080c, 0x73b7, 0x7003,\r
-+      0x0001, 0x0804, 0x0cae, 0x8319, 0x1928, 0x2001, 0x1810, 0x2004,\r
-+      0x9084, 0x9000, 0x0110, 0x080c, 0x0cd1, 0x1d04, 0x0c71, 0x080c,\r
-+      0x823f, 0x2009, 0x196c, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a,\r
-+      0x1188, 0x200b, 0x000a, 0x2011, 0x0048, 0x080c, 0x286d, 0x20a9,\r
-+      0x0002, 0x080c, 0x27fa, 0x7924, 0x080c, 0x2819, 0xd19c, 0x0110,\r
-+      0x080c, 0x273f, 0x00f0, 0x080c, 0x70c8, 0x1140, 0x94a2, 0x03e8,\r
-+      0x1128, 0x080c, 0x708b, 0x7003, 0x0001, 0x00c0, 0x2011, 0x1800,\r
-+      0x080c, 0x286d, 0x080c, 0x2819, 0x7824, 0x080c, 0x70d1, 0x0110,\r
-+      0xd0ac, 0x1160, 0x9084, 0x1800, 0x0904, 0x0c63, 0x7003, 0x0001,\r
-+      0x0028, 0x2001, 0x0001, 0x080c, 0x23c9, 0x00a0, 0x7850, 0xc0e4,\r
-+      0x7852, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d,\r
-+      0x0002, 0x7906, 0x2011, 0x0048, 0x080c, 0x286d, 0x7828, 0x9085,\r
-+      0x0028, 0x782a, 0x2001, 0x1978, 0x2003, 0x0000, 0x9006, 0x78f2,\r
-+      0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e, 0x002e, 0x001e,\r
-+      0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x0046, 0x00b6, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0071, 0x0d0c, 0x823f, 0x015e,\r
-+      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x002e,\r
-+      0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x1894, 0x7004, 0x9086,\r
-+      0x0001, 0x1110, 0x080c, 0x32b2, 0x00ee, 0x0005, 0x0005, 0x2a70,\r
-+      0x2061, 0x197c, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001c,\r
-+      0x600f, 0x0317, 0x2001, 0x194d, 0x900e, 0x2102, 0x7192, 0x2001,\r
-+      0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705b, 0xffff, 0x0008,\r
-+      0x715a, 0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbcae, 0x70eb,\r
-+      0x00c0, 0x2061, 0x193d, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800,\r
-+      0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f,\r
-+      0x07d0, 0x2061, 0x1945, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f,\r
-+      0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061,\r
-+      0x195a, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f,\r
-+      0x2020, 0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x6270,\r
-+      0x1178, 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4,\r
-+      0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210,\r
-+      0x8108, 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000,\r
-+      0x2079, 0x0000, 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04,\r
-+      0x0d67, 0x0006, 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000,\r
-+      0x000e, 0x7882, 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e,\r
-+      0x7886, 0x3900, 0x789a, 0x7833, 0x0012, 0x2091, 0x5000, 0x0156,\r
-+      0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1af4, 0x7a08,\r
-+      0x226a, 0x2069, 0x1af5, 0x7a18, 0x226a, 0x8d68, 0x7a1c, 0x226a,\r
-+      0x782c, 0x2019, 0x1b02, 0x201a, 0x2019, 0x1b05, 0x9016, 0x7808,\r
-+      0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386, 0x1b1e,\r
-+      0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead, 0x2019,\r
-+      0x1b03, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000, 0x2069,\r
-+      0x1a4a, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a, 0x8d68,\r
-+      0x8318, 0x1f04, 0x0db4, 0x0491, 0x002e, 0x003e, 0x00de, 0x015e,\r
-+      0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089,\r
-+      0x2004, 0xd084, 0x0180, 0x2001, 0x19f3, 0x2004, 0x9005, 0x0128,\r
-+      0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003,\r
-+      0x0002, 0x2003, 0x1001, 0x080c, 0x539c, 0x1170, 0x080c, 0x0efb,\r
-+      0x0110, 0x080c, 0x0e4e, 0x080c, 0x539c, 0x1130, 0x2071, 0x1800,\r
-+      0x2011, 0x8000, 0x080c, 0x0f0f, 0x0c70, 0x0005, 0x2001, 0x0382,\r
-+      0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x1120, 0x2001, 0x0015,\r
-+      0x080c, 0x98b9, 0x2079, 0x0380, 0x2069, 0x1ad4, 0x7818, 0x6802,\r
-+      0x781c, 0x6806, 0x7840, 0x680a, 0x7844, 0x680e, 0x782c, 0x6812,\r
-+      0x2019, 0x1adf, 0x9016, 0x7808, 0xd09c, 0x0150, 0x7820, 0x201a,\r
-+      0x8210, 0x8318, 0x8210, 0x9282, 0x0011, 0x0ea8, 0x2011, 0xdead,\r
-+      0x6a2a, 0x7830, 0x681a, 0x7834, 0x681e, 0x7838, 0x6822, 0x783c,\r
-+      0x6826, 0x7803, 0x0000, 0x2069, 0x1a94, 0x901e, 0x20a9, 0x0020,\r
-+      0x7b26, 0x7828, 0x206a, 0x8d68, 0x8318, 0x1f04, 0x0e28, 0x2069,\r
-+      0x1ab4, 0x2019, 0x00b0, 0x20a9, 0x0020, 0x7b26, 0x7828, 0x206a,\r
-+      0x8d68, 0x8318, 0x1f04, 0x0e35, 0x0005, 0x918c, 0x03ff, 0x2001,\r
-+      0x0003, 0x2004, 0x9084, 0x0600, 0x1118, 0x918d, 0x6c00, 0x0010,\r
-+      0x918d, 0x6400, 0x2001, 0x017f, 0x2102, 0x0005, 0x0026, 0x0126,\r
-+      0x2011, 0x0080, 0x080c, 0x0eed, 0x20a9, 0x0900, 0x080c, 0x0f23,\r
-+      0x2011, 0x0040, 0x080c, 0x0eed, 0x20a9, 0x0900, 0x080c, 0x0f23,\r
-+      0x0c78, 0x0026, 0x080c, 0x0efb, 0x1188, 0x2011, 0x010e, 0x2214,\r
-+      0x9294, 0x0007, 0x9296, 0x0007, 0x0118, 0x2011, 0x0947, 0x0010,\r
-+      0x2011, 0x1b47, 0x080c, 0x0f0f, 0x002e, 0x0005, 0x2011, 0x010e,\r
-+      0x2214, 0x9294, 0x0007, 0x9296, 0x0007, 0x0118, 0x2011, 0xa880,\r
-+      0x0010, 0x2011, 0x6840, 0xd0e4, 0x70ef, 0x0000, 0x1128, 0x70ef,\r
-+      0x0fa0, 0x080c, 0x0f00, 0x002e, 0x0005, 0x0026, 0x080c, 0x0efb,\r
-+      0x0148, 0xd0a4, 0x1138, 0x2011, 0xcdd5, 0x0010, 0x2011, 0x0080,\r
-+      0x080c, 0x0f00, 0x002e, 0x0005, 0x0026, 0x70ef, 0x0000, 0x080c,\r
-+      0x0efb, 0x1130, 0x2011, 0x8040, 0x080c, 0x0f0f, 0x002e, 0x0005,\r
-+      0x080c, 0x2811, 0x1118, 0x2011, 0xcdc5, 0x0010, 0x2011, 0xcac2,\r
-+      0x080c, 0x0f00, 0x002e, 0x0005, 0x00e6, 0x0016, 0x0006, 0x2071,\r
-+      0x1800, 0xd0b4, 0x70e8, 0x71e4, 0x1118, 0xc0e4, 0xc1f4, 0x0050,\r
-+      0x0006, 0x3b00, 0x9084, 0xff3e, 0x20d8, 0x000e, 0x70ef, 0x0000,\r
-+      0xc0e5, 0xc1f5, 0x0099, 0x000e, 0x001e, 0x00ee, 0x0005, 0x00e6,\r
-+      0x2071, 0x1800, 0xd0e4, 0x70e8, 0x1110, 0xc0dc, 0x0008, 0xc0dd,\r
-+      0x0016, 0x71e4, 0x0019, 0x001e, 0x00ee, 0x0005, 0x70ea, 0x71e6,\r
-+      0x7000, 0x9084, 0x0007, 0x000b, 0x0005, 0x0eb3, 0x0e8d, 0x0e8d,\r
-+      0x0e61, 0x0e9c, 0x0e8d, 0x0e8d, 0x0e9c, 0xc284, 0x0016, 0x3b08,\r
-+      0x3a00, 0x9104, 0x918d, 0x00c1, 0x21d8, 0x9084, 0xff3e, 0x9205,\r
-+      0x20d0, 0x001e, 0x0005, 0x2001, 0x183a, 0x2004, 0xd0dc, 0x0005,\r
-+      0x9e86, 0x1800, 0x190c, 0x0d65, 0x70e8, 0xd0e4, 0x0108, 0xc2e5,\r
-+      0x72ea, 0xd0e4, 0x1118, 0x9294, 0x00c1, 0x08f9, 0x0005, 0x9e86,\r
-+      0x1800, 0x190c, 0x0d65, 0x70e4, 0xd0f4, 0x0108, 0xc2f5, 0x72e6,\r
-+      0xd0f4, 0x1140, 0x9284, 0x8000, 0x8005, 0xc284, 0x9215, 0x9294,\r
-+      0x00c1, 0x0861, 0x0005, 0x1d04, 0x0f23, 0x2091, 0x6000, 0x1f04,\r
-+      0x0f23, 0x0005, 0x890e, 0x810e, 0x810f, 0x9194, 0x003f, 0x918c,\r
-+      0xffc0, 0x0005, 0x0006, 0x2200, 0x914d, 0x894f, 0x894d, 0x894d,\r
-+      0x000e, 0x0005, 0x01d6, 0x0146, 0x0036, 0x0096, 0x2061, 0x1883,\r
-+      0x600b, 0x0000, 0x600f, 0x0000, 0x6003, 0x0000, 0x6007, 0x0000,\r
-+      0x2009, 0xffc0, 0x2105, 0x0006, 0x2001, 0xaaaa, 0x200f, 0x2019,\r
-+      0x5555, 0x9016, 0x2049, 0x0bff, 0xab02, 0xa001, 0xa001, 0xa800,\r
-+      0x9306, 0x1138, 0x2105, 0x9306, 0x0120, 0x8210, 0x99c8, 0x0400,\r
-+      0x0c98, 0x000e, 0x200f, 0x2001, 0x1893, 0x928a, 0x000e, 0x1638,\r
-+      0x928a, 0x0006, 0x2011, 0x0006, 0x1210, 0x2011, 0x0000, 0x2202,\r
-+      0x9006, 0x2008, 0x82ff, 0x01b0, 0x8200, 0x600a, 0x600f, 0xffff,\r
-+      0x6003, 0x0002, 0x6007, 0x0000, 0x0026, 0x2019, 0x0010, 0x9280,\r
-+      0x0001, 0x20e8, 0x21a0, 0x21a8, 0x4104, 0x8319, 0x1de0, 0x8211,\r
-+      0x1da0, 0x002e, 0x009e, 0x003e, 0x014e, 0x01de, 0x0005, 0x2011,\r
-+      0x000e, 0x08e8, 0x0016, 0x0026, 0x0096, 0x3348, 0x080c, 0x0f2a,\r
-+      0x2100, 0x9300, 0x2098, 0x22e0, 0x009e, 0x002e, 0x001e, 0x0036,\r
-+      0x3518, 0x20a9, 0x0001, 0x4002, 0x8007, 0x4004, 0x8319, 0x1dd8,\r
-+      0x003e, 0x0005, 0x20e9, 0x0001, 0x71b4, 0x81ff, 0x11c0, 0x9006,\r
-+      0x2009, 0x0200, 0x20a9, 0x0002, 0x9298, 0x0018, 0x23a0, 0x4001,\r
-+      0x2009, 0x0700, 0x20a9, 0x0002, 0x9298, 0x0008, 0x23a0, 0x4001,\r
-+      0x7078, 0x8007, 0x717c, 0x810f, 0x20a9, 0x0002, 0x4001, 0x9298,\r
-+      0x000c, 0x23a0, 0x900e, 0x080c, 0x0d45, 0x2001, 0x0000, 0x810f,\r
-+      0x20a9, 0x0002, 0x4001, 0x0005, 0x89ff, 0x0140, 0xa804, 0xa807,\r
-+      0x0000, 0x0006, 0x080c, 0x1054, 0x009e, 0x0cb0, 0x0005, 0x00e6,\r
-+      0x2071, 0x1800, 0x080c, 0x10cd, 0x090c, 0x0d65, 0x00ee, 0x0005,\r
-+      0x0086, 0x00e6, 0x0006, 0x0026, 0x0036, 0x0126, 0x2091, 0x8000,\r
-+      0x00c9, 0x2071, 0x1800, 0x73bc, 0x702c, 0x9016, 0x9045, 0x0158,\r
-+      0x8210, 0x9906, 0x090c, 0x0d65, 0x2300, 0x9202, 0x0120, 0x1a0c,\r
-+      0x0d65, 0xa000, 0x0c98, 0x012e, 0x003e, 0x002e, 0x000e, 0x00ee,\r
-+      0x008e, 0x0005, 0x0086, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000,\r
-+      0x2071, 0x1906, 0x7010, 0x9005, 0x0140, 0x7018, 0x9045, 0x0128,\r
-+      0x9906, 0x090c, 0x0d65, 0xa000, 0x0cc8, 0x012e, 0x000e, 0x00ee,\r
-+      0x008e, 0x0005, 0x00e6, 0x2071, 0x1800, 0x0126, 0x2091, 0x8000,\r
-+      0x70bc, 0x8001, 0x0270, 0x70be, 0x702c, 0x2048, 0x9085, 0x0001,\r
-+      0xa800, 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee,\r
-+      0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071,\r
-+      0x1800, 0x70bc, 0x90ca, 0x0040, 0x0268, 0x8001, 0x70be, 0x702c,\r
-+      0x2048, 0xa800, 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e,\r
-+      0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000,\r
-+      0x0016, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0xa862, 0x9184,\r
-+      0xffc0, 0xa85e, 0x001e, 0x0020, 0x00e6, 0x0126, 0x2091, 0x8000,\r
-+      0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,\r
-+      0x70be, 0x080c, 0x8074, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800,\r
-+      0x9026, 0x2009, 0x0000, 0x2049, 0x0400, 0x2900, 0x702e, 0x8940,\r
-+      0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0440,\r
-+      0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x1883, 0x7000,\r
-+      0x9005, 0x11a0, 0x2001, 0x049b, 0xa802, 0x2048, 0x2009, 0x26c0,\r
-+      0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886,\r
-+      0x0800, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x1883,\r
-+      0x7104, 0x7200, 0x82ff, 0x01d0, 0x7308, 0x8318, 0x831f, 0x831b,\r
-+      0x831b, 0x7312, 0x8319, 0x2001, 0x0800, 0xa802, 0x2048, 0x8900,\r
-+      0xa802, 0x2040, 0xa95e, 0xaa62, 0x8420, 0x2300, 0x9906, 0x0130,\r
-+      0x2848, 0x9188, 0x0040, 0x9291, 0x0000, 0x0c88, 0xa803, 0x0000,\r
-+      0x2071, 0x1800, 0x74ba, 0x74be, 0x0005, 0x00e6, 0x0016, 0x9984,\r
-+      0xfc00, 0x01e8, 0x908c, 0xf800, 0x1168, 0x9982, 0x0400, 0x02b8,\r
-+      0x9982, 0x0440, 0x0278, 0x9982, 0x049b, 0x0288, 0x9982, 0x0800,\r
-+      0x1270, 0x0040, 0x9982, 0x0800, 0x0250, 0x2071, 0x1883, 0x7010,\r
-+      0x9902, 0x1228, 0x9085, 0x0001, 0x001e, 0x00ee, 0x0005, 0x9006,\r
-+      0x0cd8, 0x00e6, 0x2071, 0x19f2, 0x7007, 0x0000, 0x9006, 0x701e,\r
-+      0x7022, 0x7002, 0x2071, 0x0000, 0x7010, 0x9085, 0x8044, 0x7012,\r
-+      0x2071, 0x0080, 0x9006, 0x20a9, 0x0040, 0x7022, 0x1f04, 0x1105,\r
-+      0x702b, 0x0020, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6,\r
-+      0xa06f, 0x0000, 0x2071, 0x19f2, 0x701c, 0x9088, 0x19fc, 0x280a,\r
-+      0x8000, 0x9084, 0x003f, 0x701e, 0x7120, 0x9106, 0x090c, 0x0d65,\r
-+      0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x00a9, 0x00fe,\r
-+      0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0x2071,\r
-+      0x19f2, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x0021,\r
-+      0x00fe, 0x00ee, 0x012e, 0x0005, 0x7004, 0x9086, 0x0000, 0x1110,\r
-+      0x7007, 0x0006, 0x7000, 0x0002, 0x114e, 0x114c, 0x114c, 0x114c,\r
-+      0x12c5, 0x12c5, 0x12c5, 0x12c5, 0x080c, 0x0d65, 0x701c, 0x7120,\r
-+      0x9106, 0x1148, 0x792c, 0x9184, 0x0001, 0x1120, 0xd1fc, 0x1110,\r
-+      0x7007, 0x0000, 0x0005, 0x0096, 0x9180, 0x19fc, 0x2004, 0x700a,\r
-+      0x2048, 0x8108, 0x918c, 0x003f, 0x7122, 0x782b, 0x0026, 0xa88c,\r
-+      0x7802, 0xa890, 0x7806, 0xa894, 0x780a, 0xa898, 0x780e, 0xa878,\r
-+      0x700e, 0xa870, 0x7016, 0xa874, 0x701a, 0xa868, 0x009e, 0xd084,\r
-+      0x0120, 0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002, 0x00b1,\r
-+      0x0005, 0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, 0x0040,\r
-+      0x1210, 0x2110, 0x9006, 0x700e, 0x7212, 0x8203, 0x7812, 0x782b,\r
-+      0x0020, 0x782b, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,\r
-+      0x0136, 0x0146, 0x0156, 0x7014, 0x20e0, 0x7018, 0x2098, 0x20e9,\r
-+      0x0000, 0x20a1, 0x0088, 0x782b, 0x0026, 0x710c, 0x2011, 0x0040,\r
-+      0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x22a8, 0x4006,\r
-+      0x8203, 0x7812, 0x782b, 0x0020, 0x3300, 0x701a, 0x782b, 0x0001,\r
-+      0x015e, 0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x2009, 0x19f2,\r
-+      0x2104, 0xc095, 0x200a, 0x080c, 0x112b, 0x0005, 0x0016, 0x00e6,\r
-+      0x2071, 0x19f2, 0x00f6, 0x2079, 0x0080, 0x792c, 0xd1bc, 0x190c,\r
-+      0x0d5e, 0x782b, 0x0002, 0xd1fc, 0x0120, 0x918c, 0x0700, 0x7004,\r
-+      0x0023, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x113c, 0x11e4, 0x1218,\r
-+      0x0d65, 0x0d65, 0x12d1, 0x0d65, 0x918c, 0x0700, 0x1550, 0x0136,\r
-+      0x0146, 0x0156, 0x7014, 0x20e8, 0x7018, 0x20a0, 0x20e1, 0x0000,\r
-+      0x2099, 0x0088, 0x782b, 0x0040, 0x7010, 0x20a8, 0x4005, 0x3400,\r
-+      0x701a, 0x015e, 0x014e, 0x013e, 0x700c, 0x9005, 0x0578, 0x7800,\r
-+      0x7802, 0x7804, 0x7806, 0x080c, 0x1181, 0x0005, 0x7008, 0x0096,\r
-+      0x2048, 0xa86f, 0x0100, 0x009e, 0x7007, 0x0000, 0x080c, 0x113c,\r
-+      0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0200, 0x009e, 0x0ca0,\r
-+      0x918c, 0x0700, 0x1150, 0x700c, 0x9005, 0x0180, 0x7800, 0x7802,\r
-+      0x7804, 0x7806, 0x080c, 0x1196, 0x0005, 0x7008, 0x0096, 0x2048,\r
-+      0xa86f, 0x0200, 0x009e, 0x7007, 0x0000, 0x0080, 0x0096, 0x7008,\r
-+      0x2048, 0x7800, 0xa88e, 0x7804, 0xa892, 0x7808, 0xa896, 0x780c,\r
-+      0xa89a, 0xa86f, 0x0100, 0x009e, 0x7007, 0x0000, 0x0096, 0x00d6,\r
-+      0x7008, 0x2048, 0x2001, 0x18af, 0x2004, 0x9906, 0x1128, 0xa89c,\r
-+      0x080f, 0x00de, 0x009e, 0x00a0, 0x00de, 0x009e, 0x0096, 0x00d6,\r
-+      0x7008, 0x2048, 0x0081, 0x0150, 0xa89c, 0x0086, 0x2940, 0x080f,\r
-+      0x008e, 0x00de, 0x009e, 0x080c, 0x112b, 0x0005, 0x00de, 0x009e,\r
-+      0x080c, 0x112b, 0x0005, 0xa8a8, 0xd08c, 0x0005, 0x0096, 0xa0a0,\r
-+      0x904d, 0x090c, 0x0d65, 0xa06c, 0x908e, 0x0100, 0x0130, 0xa87b,\r
-+      0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x698a, 0xa09f,\r
-+      0x0000, 0xa0a3, 0x0000, 0x2848, 0x080c, 0x1054, 0x009e, 0x0005,\r
-+      0x00a6, 0xa0a0, 0x904d, 0x090c, 0x0d65, 0xa06c, 0x908e, 0x0100,\r
-+      0x0128, 0xa87b, 0x0001, 0xa883, 0x0000, 0x00c0, 0xa80c, 0x2050,\r
-+      0xb004, 0x9005, 0x0198, 0xa80e, 0x2050, 0x8006, 0x8006, 0x8007,\r
-+      0x908c, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xa076, 0xa172,\r
-+      0xb000, 0xa07a, 0x2810, 0x080c, 0x110c, 0x00e8, 0xa97c, 0xa894,\r
-+      0x0016, 0x0006, 0x080c, 0x698a, 0x000e, 0x001e, 0xd1fc, 0x1138,\r
-+      0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0x9be7, 0x00ce, 0x7008,\r
-+      0x2048, 0xa89f, 0x0000, 0xa8a3, 0x0000, 0x080c, 0x1054, 0x7007,\r
-+      0x0000, 0x080c, 0x112b, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000,\r
-+      0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e,\r
-+      0x0005, 0x7007, 0x0000, 0x080c, 0x113c, 0x0005, 0x0126, 0x2091,\r
-+      0x2200, 0x2079, 0x0300, 0x2071, 0x1a3c, 0x7003, 0x0000, 0x78bf,\r
-+      0x00f6, 0x0041, 0x7807, 0x0007, 0x7803, 0x0000, 0x7803, 0x0001,\r
-+      0x012e, 0x0005, 0x00c6, 0x7803, 0x0000, 0x2001, 0x0165, 0x2003,\r
-+      0x4198, 0x7808, 0xd09c, 0x0110, 0x7820, 0x0cd8, 0x2001, 0x1a3d,\r
-+      0x2003, 0x0000, 0x78ab, 0x0004, 0x78ac, 0xd0ac, 0x1de8, 0x78ab,\r
-+      0x0002, 0x7807, 0x0007, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827,\r
-+      0x0031, 0x782b, 0x1a4a, 0x781f, 0xff00, 0x781b, 0xff00, 0x2001,\r
-+      0x0200, 0x2004, 0xd0dc, 0x0110, 0x781f, 0x0303, 0x2061, 0x1a4a,\r
-+      0x602f, 0x1ddc, 0x2001, 0x1819, 0x2004, 0x9082, 0x1ddc, 0x6032,\r
-+      0x603b, 0x1cf7, 0x602b, 0x1a8a, 0x6007, 0x1a6a, 0x2061, 0x1a6a,\r
-+      0x00ce, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908, 0x9184, 0x0070,\r
-+      0x190c, 0x0d5e, 0xd19c, 0x05a0, 0x7820, 0x908c, 0xf000, 0x0540,\r
-+      0x2060, 0x6020, 0x9086, 0x0003, 0x1550, 0x6000, 0x9086, 0x0004,\r
-+      0x1530, 0x6114, 0x2148, 0xa876, 0xa87a, 0xa867, 0x0103, 0x080c,\r
-+      0x67ac, 0x00b6, 0x6010, 0x2058, 0xba3c, 0x8211, 0x0208, 0xba3e,\r
-+      0xb8c0, 0x9005, 0x190c, 0x639b, 0x00be, 0x6044, 0xd0fc, 0x190c,\r
-+      0x98f1, 0x080c, 0x9c0f, 0x7808, 0xd09c, 0x19b0, 0x012e, 0x0005,\r
-+      0x908a, 0x0024, 0x1a0c, 0x0d65, 0x002b, 0x012e, 0x0005, 0x04b0,\r
-+      0x012e, 0x0005, 0x138e, 0x13b4, 0x13e4, 0x13e9, 0x13ed, 0x13f2,\r
-+      0x141a, 0x141e, 0x142c, 0x1430, 0x138e, 0x14ba, 0x14be, 0x1521,\r
-+      0x138e, 0x138e, 0x138e, 0x138e, 0x138e, 0x138e, 0x138e, 0x138e,\r
-+      0x138e, 0x138e, 0x138e, 0x138e, 0x138e, 0x13f4, 0x138e, 0x13bc,\r
-+      0x13e1, 0x13a8, 0x138e, 0x13c8, 0x1392, 0x1390, 0x080c, 0x0d65,\r
-+      0x080c, 0x0d5e, 0x080c, 0x1528, 0x2009, 0x1a49, 0x2104, 0x8000,\r
-+      0x200a, 0x080c, 0x7b22, 0x080c, 0x195f, 0x0005, 0x6044, 0xd0fc,\r
-+      0x190c, 0x98f1, 0x2009, 0x0055, 0x080c, 0x9c85, 0x012e, 0x0005,\r
-+      0x080c, 0x1528, 0x2060, 0x6044, 0xd0fc, 0x190c, 0x98f1, 0x2009,\r
-+      0x0055, 0x080c, 0x9c85, 0x0005, 0x2009, 0x0048, 0x080c, 0x1528,\r
-+      0x2060, 0x080c, 0x9c85, 0x0005, 0x2009, 0x0054, 0x080c, 0x1528,\r
-+      0x2060, 0x6044, 0xd0fc, 0x190c, 0x98f1, 0x080c, 0x9c85, 0x0005,\r
-+      0x080c, 0x1528, 0x2060, 0x0056, 0x0066, 0x080c, 0x1528, 0x2028,\r
-+      0x080c, 0x1528, 0x2030, 0x0036, 0x0046, 0x2021, 0x0000, 0x2418,\r
-+      0x2009, 0x0056, 0x080c, 0x9c85, 0x004e, 0x003e, 0x006e, 0x005e,\r
-+      0x0005, 0x080c, 0x1528, 0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006,\r
-+      0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x1528, 0x080c,\r
-+      0x15e5, 0x0005, 0x080c, 0x0d65, 0x080c, 0x1528, 0x2060, 0x6014,\r
-+      0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c,\r
-+      0x9c85, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109,\r
-+      0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218,\r
-+      0x2004, 0xd0ec, 0x1110, 0x080c, 0x152d, 0x2001, 0x0307, 0x2003,\r
-+      0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c, 0x1528,\r
-+      0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009,\r
-+      0x0048, 0x080c, 0x9c85, 0x0005, 0x080c, 0x1528, 0x080c, 0x0d65,\r
-+      0x080c, 0x1528, 0x080c, 0x14a5, 0x7827, 0x0018, 0x79ac, 0xd1dc,\r
-+      0x0540, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065, 0x0138,\r
-+      0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0400, 0x7004,\r
-+      0x9005, 0x1180, 0x78ab, 0x0004, 0x7827, 0x0018, 0x782b, 0x0000,\r
-+      0xd1bc, 0x090c, 0x0d65, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,\r
-+      0x0020, 0x0480, 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c, 0x14be,\r
-+      0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0d65, 0x6014,\r
-+      0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x0198, 0x080c, 0x7b22,\r
-+      0x080c, 0x195f, 0x080c, 0xb847, 0x0158, 0xa9ac, 0xa936, 0xa9b0,\r
-+      0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa880, 0xc0bd, 0xa882,\r
-+      0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x6024,\r
-+      0x190c, 0xbc43, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201,\r
-+      0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd5d3, 0xd5a4, 0x1118,\r
-+      0x080c, 0x152d, 0x0005, 0x080c, 0x7b22, 0x080c, 0x195f, 0x0005,\r
-+      0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066, 0x0076,\r
-+      0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186, 0x0003,\r
-+      0x0120, 0x2001, 0x0016, 0x080c, 0x159e, 0x00fe, 0x007e, 0x006e,\r
-+      0x001e, 0x0005, 0x7004, 0xc09d, 0x7006, 0x0005, 0x7104, 0x9184,\r
-+      0x0004, 0x190c, 0x0d65, 0xd184, 0x1189, 0xd19c, 0x0158, 0xc19c,\r
-+      0x7106, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x080c,\r
-+      0x152d, 0x0005, 0x81ff, 0x190c, 0x0d65, 0x0005, 0xc184, 0xd1b4,\r
-+      0xc1b4, 0x7106, 0x0016, 0x00e6, 0x15e0, 0x2071, 0x0200, 0x080c,\r
-+      0x15d9, 0x6014, 0x9005, 0x05a8, 0x0096, 0x2048, 0xa864, 0x009e,\r
-+      0x9084, 0x00ff, 0x908e, 0x0029, 0x0160, 0x908e, 0x0048, 0x1548,\r
-+      0x601c, 0xd084, 0x11d8, 0x00f6, 0x2c78, 0x080c, 0x164f, 0x00fe,\r
-+      0x00a8, 0x00f6, 0x2c78, 0x080c, 0x1797, 0x00fe, 0x2009, 0x01f4,\r
-+      0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001,\r
-+      0x0218, 0x2004, 0xd0ec, 0x1110, 0x0401, 0x0040, 0x2001, 0x020d,\r
-+      0x2003, 0x0020, 0x080c, 0x12ea, 0x7803, 0x0001, 0x00ee, 0x001e,\r
-+      0x0005, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0069,\r
-+      0x0ca8, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c, 0x9c85, 0x0005,\r
-+      0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c, 0x14a5, 0x00d6,\r
-+      0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0510, 0x6804, 0x9005,\r
-+      0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, 0x79bc, 0xd1a4, 0x1528,\r
-+      0x79b8, 0x918c, 0x0fff, 0x0180, 0x9182, 0x0841, 0x1268, 0x9188,\r
-+      0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, 0x810c, 0x080c, 0x1590,\r
-+      0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9, 0x6827, 0x0002, 0x04c1,\r
-+      0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4, 0x1500, 0x6804, 0x9005,\r
-+      0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, 0x080c, 0x7b22, 0x080c,\r
-+      0x195f, 0x0090, 0x7827, 0x0015, 0x782b, 0x0000, 0x7827, 0x0018,\r
-+      0x782b, 0x0000, 0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307,\r
-+      0x2003, 0x0300, 0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084,\r
-+      0x5400, 0x9086, 0x5400, 0x0d30, 0x7827, 0x0015, 0x782b, 0x0000,\r
-+      0x7803, 0x0001, 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0005,\r
-+      0x6824, 0x9084, 0x0003, 0x1de0, 0x0005, 0x2001, 0x0030, 0x2c08,\r
-+      0x621c, 0x0021, 0x7830, 0x9086, 0x0041, 0x0005, 0x00f6, 0x2079,\r
-+      0x0300, 0x0006, 0x7808, 0xd09c, 0x0140, 0x0016, 0x0026, 0x00c6,\r
-+      0x080c, 0x132a, 0x00ce, 0x002e, 0x001e, 0x000e, 0x0006, 0x7832,\r
-+      0x7936, 0x7a3a, 0x781b, 0x8080, 0x0059, 0x1118, 0x000e, 0x00fe,\r
-+      0x0005, 0x000e, 0x792c, 0x3900, 0x8000, 0x2004, 0x080c, 0x0d65,\r
-+      0x2009, 0xff00, 0x8109, 0x0120, 0x7818, 0xd0bc, 0x1dd8, 0x0005,\r
-+      0x9085, 0x0001, 0x0005, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080,\r
-+      0x0c79, 0x1108, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004, 0x080c,\r
-+      0x0d65, 0x7037, 0x0001, 0x7150, 0x7037, 0x0002, 0x7050, 0x2060,\r
-+      0xd1bc, 0x1110, 0x7054, 0x2060, 0x0005, 0x00e6, 0x0016, 0x2071,\r
-+      0x0200, 0x0c79, 0x6124, 0xd1dc, 0x01f8, 0x701c, 0xd08c, 0x0904,\r
-+      0x1644, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004, 0xd0bc, 0x0904,\r
-+      0x1644, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104, 0x6038, 0x00ce,\r
-+      0x918e, 0x0039, 0x1904, 0x1644, 0x9c06, 0x15f0, 0x0126, 0x2091,\r
-+      0x2600, 0x080c, 0x7a7a, 0x012e, 0x7358, 0x745c, 0x6014, 0x905d,\r
-+      0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,\r
-+      0x190c, 0xbc1e, 0xab42, 0xac3e, 0x2001, 0x1875, 0x2004, 0xd0b4,\r
-+      0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058, 0xb800,\r
-+      0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff, 0x080c,\r
-+      0x1d17, 0x1190, 0x080c, 0x17f2, 0x2a00, 0xa816, 0x0130, 0x2800,\r
-+      0xa80e, 0x2c05, 0xa80a, 0x2c00, 0xa812, 0x7037, 0x0020, 0x781f,\r
-+      0x0300, 0x001e, 0x00ee, 0x0005, 0x7037, 0x0050, 0x7037, 0x0020,\r
-+      0x001e, 0x00ee, 0x080c, 0x152d, 0x0005, 0x080c, 0x0d65, 0x0016,\r
-+      0x2009, 0x00a0, 0x8109, 0xa001, 0xa001, 0xa001, 0x1dd8, 0x001e,\r
-+      0x2cf0, 0x0126, 0x2091, 0x2200, 0x00c6, 0x3e60, 0x6014, 0x2048,\r
-+      0x2940, 0x903e, 0x2730, 0xa864, 0x2068, 0xa81a, 0x9d84, 0x000f,\r
-+      0x9088, 0x1cf7, 0x2165, 0x0002, 0x1683, 0x16d0, 0x1683, 0x1683,\r
-+      0x1683, 0x16b2, 0x1683, 0x1687, 0x167c, 0x16c7, 0x1683, 0x1683,\r
-+      0x1683, 0x178c, 0x169b, 0x1691, 0xa964, 0x918c, 0x00ff, 0x918e,\r
-+      0x0048, 0x0904, 0x16c7, 0x9085, 0x0001, 0x0804, 0x1783, 0xa87c,\r
-+      0xd0bc, 0x0dc8, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888, 0x0804,\r
-+      0x16d7, 0xa87c, 0xd0bc, 0x0d78, 0xa890, 0xa842, 0xa88c, 0xa83e,\r
-+      0xa888, 0x0804, 0x1726, 0xa87c, 0xd0bc, 0x0d28, 0xa890, 0xa842,\r
-+      0xa88c, 0xa83e, 0xa804, 0x9045, 0x090c, 0x0d65, 0xa164, 0xa91a,\r
-+      0x91ec, 0x000f, 0x9d80, 0x1cf7, 0x2065, 0xa888, 0xd19c, 0x1904,\r
-+      0x1726, 0x0428, 0xa87c, 0xd0ac, 0x0970, 0xa804, 0x9045, 0x090c,\r
-+      0x0d65, 0xa164, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1cf7, 0x2065,\r
-+      0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x1726, 0x0080, 0xa87c,\r
-+      0xd0ac, 0x0904, 0x1683, 0x9006, 0xa842, 0xa83e, 0x0804, 0x1726,\r
-+      0xa87c, 0xd0ac, 0x0904, 0x1683, 0x9006, 0xa842, 0xa83e, 0x2c05,\r
-+      0x908a, 0x0036, 0x1a0c, 0x0d65, 0x9082, 0x001b, 0x0002, 0x16fa,\r
-+      0x16fa, 0x16fc, 0x16fa, 0x16fa, 0x16fa, 0x1702, 0x16fa, 0x16fa,\r
-+      0x16fa, 0x1708, 0x16fa, 0x16fa, 0x16fa, 0x170e, 0x16fa, 0x16fa,\r
-+      0x16fa, 0x1714, 0x16fa, 0x16fa, 0x16fa, 0x171a, 0x16fa, 0x16fa,\r
-+      0x16fa, 0x1720, 0x080c, 0x0d65, 0xa574, 0xa478, 0xa37c, 0xa280,\r
-+      0x0804, 0x176b, 0xa584, 0xa488, 0xa38c, 0xa290, 0x0804, 0x176b,\r
-+      0xa594, 0xa498, 0xa39c, 0xa2a0, 0x0804, 0x176b, 0xa5a4, 0xa4a8,\r
-+      0xa3ac, 0xa2b0, 0x0804, 0x176b, 0xa5b4, 0xa4b8, 0xa3bc, 0xa2c0,\r
-+      0x0804, 0x176b, 0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0, 0x0804, 0x176b,\r
-+      0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0, 0x0804, 0x176b, 0x2c05, 0x908a,\r
-+      0x0034, 0x1a0c, 0x0d65, 0x9082, 0x001b, 0x0002, 0x1749, 0x1747,\r
-+      0x1747, 0x1747, 0x1747, 0x1747, 0x1750, 0x1747, 0x1747, 0x1747,\r
-+      0x1747, 0x1747, 0x1757, 0x1747, 0x1747, 0x1747, 0x1747, 0x1747,\r
-+      0x175e, 0x1747, 0x1747, 0x1747, 0x1747, 0x1747, 0x1765, 0x080c,\r
-+      0x0d65, 0xa56c, 0xa470, 0xa774, 0xa678, 0xa37c, 0xa280, 0x00d8,\r
-+      0xa584, 0xa488, 0xa78c, 0xa690, 0xa394, 0xa298, 0x00a0, 0xa59c,\r
-+      0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac, 0xa2b0, 0x0068, 0xa5b4, 0xa4b8,\r
-+      0xa7bc, 0xa6c0, 0xa3c4, 0xa2c8, 0x0030, 0xa5cc, 0xa4d0, 0xa7d4,\r
-+      0xa6d8, 0xa3dc, 0xa2e0, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26,\r
-+      0xae2a, 0xa988, 0x8c60, 0x2c1d, 0xa8ac, 0xaab0, 0xa836, 0xaa3a,\r
-+      0x8109, 0xa916, 0x1158, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa87c,\r
-+      0xc0dd, 0xa87e, 0x9006, 0x00ce, 0x012e, 0x0005, 0x2800, 0xa80e,\r
-+      0xab0a, 0x2c00, 0xa812, 0x0c78, 0x0804, 0x1683, 0x0016, 0x2009,\r
-+      0x00a0, 0x8109, 0xa001, 0xa001, 0xa001, 0x1dd8, 0x001e, 0x2ff0,\r
-+      0x0126, 0x2091, 0x2200, 0x00c6, 0x3e60, 0x6014, 0x2048, 0x2940,\r
-+      0xa80e, 0x2061, 0x1cf2, 0xa813, 0x1cf2, 0x2c05, 0xa80a, 0xa964,\r
-+      0xa91a, 0xa87c, 0xd0ac, 0x090c, 0x0d65, 0x9006, 0xa842, 0xa83e,\r
-+      0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0d65, 0xadcc, 0xacd0, 0xafd4,\r
-+      0xaed8, 0xabdc, 0xaae0, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26,\r
-+      0xae2a, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0xa988, 0xa864, 0x9084,\r
-+      0x00ff, 0x9086, 0x0008, 0x1120, 0x8109, 0xa916, 0x0128, 0x0078,\r
-+      0x918a, 0x0002, 0xa916, 0x1158, 0x3e60, 0x601c, 0xc085, 0x601e,\r
-+      0xa87c, 0xc0dd, 0xa87e, 0x9006, 0x00ce, 0x012e, 0x0005, 0xa804,\r
-+      0x9045, 0x090c, 0x0d65, 0xa80e, 0xa064, 0xa81a, 0x9084, 0x000f,\r
-+      0x9080, 0x1cf7, 0x2015, 0x82ff, 0x090c, 0x0d65, 0xaa12, 0x2205,\r
-+      0xa80a, 0x0c10, 0x903e, 0x2730, 0xa880, 0xd0fc, 0x1190, 0x2d00,\r
-+      0x0002, 0x18e7, 0x1849, 0x1849, 0x18e7, 0x18e7, 0x18e1, 0x18e7,\r
-+      0x1849, 0x1898, 0x1898, 0x1898, 0x18e7, 0x18e7, 0x18e7, 0x18de,\r
-+      0x1898, 0xc0fc, 0xa882, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c,\r
-+      0x0904, 0x18e9, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0d65, 0x9082,\r
-+      0x001b, 0x0002, 0x1835, 0x1833, 0x1833, 0x1833, 0x1833, 0x1833,\r
-+      0x1839, 0x1833, 0x1833, 0x1833, 0x1833, 0x1833, 0x183d, 0x1833,\r
-+      0x1833, 0x1833, 0x1833, 0x1833, 0x1841, 0x1833, 0x1833, 0x1833,\r
-+      0x1833, 0x1833, 0x1845, 0x080c, 0x0d65, 0xa774, 0xa678, 0x0804,\r
-+      0x18e9, 0xa78c, 0xa690, 0x0804, 0x18e9, 0xa7a4, 0xa6a8, 0x0804,\r
-+      0x18e9, 0xa7bc, 0xa6c0, 0x0804, 0x18e9, 0xa7d4, 0xa6d8, 0x0804,\r
-+      0x18e9, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0d65, 0x9082, 0x001b,\r
-+      0x0002, 0x186c, 0x186c, 0x186e, 0x186c, 0x186c, 0x186c, 0x1874,\r
-+      0x186c, 0x186c, 0x186c, 0x187a, 0x186c, 0x186c, 0x186c, 0x1880,\r
-+      0x186c, 0x186c, 0x186c, 0x1886, 0x186c, 0x186c, 0x186c, 0x188c,\r
-+      0x186c, 0x186c, 0x186c, 0x1892, 0x080c, 0x0d65, 0xa574, 0xa478,\r
-+      0xa37c, 0xa280, 0x0804, 0x18e9, 0xa584, 0xa488, 0xa38c, 0xa290,\r
-+      0x0804, 0x18e9, 0xa594, 0xa498, 0xa39c, 0xa2a0, 0x0804, 0x18e9,\r
-+      0xa5a4, 0xa4a8, 0xa3ac, 0xa2b0, 0x0804, 0x18e9, 0xa5b4, 0xa4b8,\r
-+      0xa3bc, 0xa2c0, 0x0804, 0x18e9, 0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0,\r
-+      0x0804, 0x18e9, 0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0, 0x0804, 0x18e9,\r
-+      0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0d65, 0x9082, 0x001b, 0x0002,\r
-+      0x18bb, 0x18b9, 0x18b9, 0x18b9, 0x18b9, 0x18b9, 0x18c2, 0x18b9,\r
-+      0x18b9, 0x18b9, 0x18b9, 0x18b9, 0x18c9, 0x18b9, 0x18b9, 0x18b9,\r
-+      0x18b9, 0x18b9, 0x18d0, 0x18b9, 0x18b9, 0x18b9, 0x18b9, 0x18b9,\r
-+      0x18d7, 0x080c, 0x0d65, 0xa56c, 0xa470, 0xa774, 0xa678, 0xa37c,\r
-+      0xa280, 0x0438, 0xa584, 0xa488, 0xa78c, 0xa690, 0xa394, 0xa298,\r
-+      0x0400, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac, 0xa2b0, 0x00c8,\r
-+      0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4, 0xa2c8, 0x0090, 0xa5cc,\r
-+      0xa4d0, 0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0, 0x0058, 0x9d86, 0x000e,\r
-+      0x1130, 0x080c, 0x1ccd, 0x1904, 0x17f2, 0x900e, 0x0050, 0x080c,\r
-+      0x0d65, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0x080c,\r
-+      0x1ccd, 0x0005, 0x6014, 0x2048, 0x6118, 0x810c, 0x810c, 0x810c,\r
-+      0x81ff, 0x1118, 0xa887, 0x0001, 0x0008, 0xa986, 0x601b, 0x0002,\r
-+      0xa974, 0xd1dc, 0x1108, 0x0005, 0xa934, 0xa88c, 0x9106, 0x1158,\r
-+      0xa938, 0xa890, 0x9106, 0x1138, 0x601c, 0xc084, 0x601e, 0x2009,\r
-+      0x0048, 0x0804, 0x9c85, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200,\r
-+      0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, 0x0000, 0x05b0, 0x9186,\r
-+      0x0003, 0x0598, 0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0008,\r
-+      0x00c6, 0x781f, 0x0808, 0x7808, 0xd09c, 0x0120, 0x080c, 0x132a,\r
-+      0x8631, 0x1db8, 0x00ce, 0x781f, 0x0800, 0x2031, 0x0168, 0x00c6,\r
-+      0x7808, 0xd09c, 0x190c, 0x132a, 0x00ce, 0x2001, 0x0038, 0x080c,\r
-+      0x19ec, 0x7930, 0x9186, 0x0040, 0x0160, 0x9186, 0x0042, 0x190c,\r
-+      0x0d65, 0x2001, 0x001e, 0x8001, 0x1df0, 0x8631, 0x1d40, 0x080c,\r
-+      0x19fb, 0x000e, 0x6022, 0x012e, 0x0005, 0x080c, 0x19e8, 0x7827,\r
-+      0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000, 0x0ca0, 0x00f6,\r
-+      0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, 0x080c,\r
-+      0x70b7, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160,\r
-+      0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, 0x8211, 0x1de0,\r
-+      0x0081, 0x2001, 0x0386, 0x2003, 0x2020, 0x080c, 0x7158, 0x0005,\r
-+      0x0479, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,\r
-+      0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x2825, 0x2009, 0x003c,\r
-+      0x080c, 0x2052, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084,\r
-+      0x003c, 0x1de0, 0x080c, 0x8074, 0x70a0, 0x70a2, 0x7098, 0x709a,\r
-+      0x709c, 0x709e, 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079,\r
-+      0x0300, 0x080c, 0x12ea, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005,\r
-+      0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c,\r
-+      0x2003, 0x0000, 0x080c, 0x70b7, 0x1108, 0x0005, 0x2021, 0x0260,\r
-+      0x2001, 0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c,\r
-+      0x939c, 0x0048, 0x1160, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110,\r
-+      0x8421, 0x1d70, 0x2001, 0x015d, 0x2003, 0x0000, 0x0005, 0x0046,\r
-+      0x2021, 0x0019, 0x2003, 0x0048, 0xa001, 0xa001, 0x201c, 0x939c,\r
-+      0x0048, 0x0120, 0x8421, 0x1db0, 0x004e, 0x0c60, 0x004e, 0x0c40,\r
-+      0x601c, 0xc084, 0x601e, 0x0005, 0x2c08, 0x621c, 0x080c, 0x159e,\r
-+      0x7930, 0x0005, 0x2c08, 0x621c, 0x080c, 0x15cb, 0x7930, 0x0005,\r
-+      0x8001, 0x1df0, 0x0005, 0x2031, 0x0005, 0x781c, 0x9084, 0x0007,\r
-+      0x0170, 0x2001, 0x0038, 0x0c41, 0x9186, 0x0040, 0x0904, 0x1a59,\r
-+      0x2001, 0x001e, 0x0c69, 0x8631, 0x1d80, 0x080c, 0x0d65, 0x781f,\r
-+      0x0202, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0b10, 0x0c01,\r
-+      0x781c, 0xd084, 0x0110, 0x0861, 0x04e0, 0x2001, 0x0030, 0x0891,\r
-+      0x9186, 0x0040, 0x0568, 0x781c, 0xd084, 0x1da8, 0x781f, 0x0101,\r
-+      0x2001, 0x0014, 0x0869, 0x2001, 0x0037, 0x0821, 0x9186, 0x0040,\r
-+      0x0140, 0x2001, 0x0030, 0x080c, 0x19f2, 0x9186, 0x0040, 0x190c,\r
-+      0x0d65, 0x00d6, 0x2069, 0x0200, 0x692c, 0xd1f4, 0x1170, 0xd1c4,\r
-+      0x0160, 0xd19c, 0x0130, 0x6800, 0x9085, 0x1800, 0x6802, 0x00de,\r
-+      0x0080, 0x6908, 0x9184, 0x0007, 0x1db0, 0x00de, 0x781f, 0x0100,\r
-+      0x791c, 0x9184, 0x0007, 0x090c, 0x0d65, 0xa001, 0xa001, 0x781f,\r
-+      0x0200, 0x0005, 0x0126, 0x2091, 0x2400, 0x2079, 0x0380, 0x2001,\r
-+      0x19b8, 0x2070, 0x012e, 0x0005, 0x2cf0, 0x0126, 0x2091, 0x2400,\r
-+      0x3e60, 0x6014, 0x2048, 0xa964, 0xa91a, 0x918c, 0x00ff, 0x9184,\r
-+      0x000f, 0x0002, 0x1a8e, 0x1a8e, 0x1a8e, 0x1a8e, 0x1a8e, 0x1a8e,\r
-+      0x1a8e, 0x1a8e, 0x1a82, 0x1a90, 0x1a8e, 0x1a8e, 0x1a8e, 0x1a8e,\r
-+      0x1a8e, 0x1a8e, 0x9086, 0x0008, 0x1148, 0xa87c, 0xd0b4, 0x0904,\r
-+      0x1c00, 0x2011, 0x1cf2, 0x2205, 0xab88, 0x0068, 0x080c, 0x0d65,\r
-+      0xa87c, 0xd0b4, 0x0904, 0x1c00, 0x9184, 0x000f, 0x9080, 0x1cf7,\r
-+      0x2015, 0x2205, 0xab88, 0x2908, 0xa80a, 0xa90e, 0xaa12, 0xab16,\r
-+      0x9006, 0xa842, 0xa83e, 0x012e, 0x0005, 0x2cf0, 0x0126, 0x2091,\r
-+      0x2400, 0x3e60, 0x6014, 0x2048, 0xa88c, 0xa990, 0xaaac, 0xabb0,\r
-+      0xaa36, 0xab3a, 0xa83e, 0xa942, 0xa846, 0xa94a, 0xa964, 0x918c,\r
-+      0x00ff, 0x9186, 0x001e, 0x0198, 0x2940, 0xa064, 0xa81a, 0x90ec,\r
-+      0x000f, 0x9d80, 0x1cf7, 0x2065, 0x2c05, 0x2808, 0x2c10, 0xab88,\r
-+      0xa80a, 0xa90e, 0xaa12, 0xab16, 0x012e, 0x3e60, 0x0005, 0xa804,\r
-+      0x2040, 0x0c58, 0x2cf0, 0x0126, 0x2091, 0x2400, 0x3e60, 0x6014,\r
-+      0x2048, 0xa97c, 0x2950, 0xd1dc, 0x1904, 0x1bca, 0xc1dd, 0xa97e,\r
-+      0x9006, 0xa842, 0xa83e, 0xa988, 0x8109, 0xa916, 0xa964, 0xa91a,\r
-+      0x9184, 0x000f, 0x9088, 0x1cf7, 0x2145, 0x0002, 0x1afe, 0x1b0c,\r
-+      0x1afe, 0x1afe, 0x1afe, 0x1b00, 0x1afe, 0x1afe, 0x1b61, 0x1b61,\r
-+      0x1afe, 0x1afe, 0x1afe, 0x1b5f, 0x1afe, 0x1afe, 0x080c, 0x0d65,\r
-+      0xa804, 0x2050, 0xb164, 0xa91a, 0x9184, 0x000f, 0x9080, 0x1cf7,\r
-+      0x2045, 0xd19c, 0x1904, 0x1b61, 0x9036, 0x2638, 0x2805, 0x908a,\r
-+      0x0036, 0x1a0c, 0x0d65, 0x9082, 0x001b, 0x0002, 0x1b31, 0x1b31,\r
-+      0x1b33, 0x1b31, 0x1b31, 0x1b31, 0x1b39, 0x1b31, 0x1b31, 0x1b31,\r
-+      0x1b3f, 0x1b31, 0x1b31, 0x1b31, 0x1b45, 0x1b31, 0x1b31, 0x1b31,\r
-+      0x1b4b, 0x1b31, 0x1b31, 0x1b31, 0x1b51, 0x1b31, 0x1b31, 0x1b31,\r
-+      0x1b57, 0x080c, 0x0d65, 0xb574, 0xb478, 0xb37c, 0xb280, 0x0804,\r
-+      0x1ba6, 0xb584, 0xb488, 0xb38c, 0xb290, 0x0804, 0x1ba6, 0xb594,\r
-+      0xb498, 0xb39c, 0xb2a0, 0x0804, 0x1ba6, 0xb5a4, 0xb4a8, 0xb3ac,\r
-+      0xb2b0, 0x0804, 0x1ba6, 0xb5b4, 0xb4b8, 0xb3bc, 0xb2c0, 0x0804,\r
-+      0x1ba6, 0xb5c4, 0xb4c8, 0xb3cc, 0xb2d0, 0x0804, 0x1ba6, 0xb5d4,\r
-+      0xb4d8, 0xb3dc, 0xb2e0, 0x0804, 0x1ba6, 0x0804, 0x1ba6, 0x080c,\r
-+      0x0d65, 0x2805, 0x908a, 0x0034, 0x1a0c, 0x0d65, 0x9082, 0x001b,\r
-+      0x0002, 0x1b84, 0x1b82, 0x1b82, 0x1b82, 0x1b82, 0x1b82, 0x1b8b,\r
-+      0x1b82, 0x1b82, 0x1b82, 0x1b82, 0x1b82, 0x1b92, 0x1b82, 0x1b82,\r
-+      0x1b82, 0x1b82, 0x1b82, 0x1b99, 0x1b82, 0x1b82, 0x1b82, 0x1b82,\r
-+      0x1b82, 0x1ba0, 0x080c, 0x0d65, 0xb56c, 0xb470, 0xb774, 0xb678,\r
-+      0xb37c, 0xb280, 0x00d8, 0xb584, 0xb488, 0xb78c, 0xb690, 0xb394,\r
-+      0xb298, 0x00a0, 0xb59c, 0xb4a0, 0xb7a4, 0xb6a8, 0xb3ac, 0xb2b0,\r
-+      0x0068, 0xb5b4, 0xb4b8, 0xb7bc, 0xb6c0, 0xb3c4, 0xb2c8, 0x0030,\r
-+      0xb5cc, 0xb4d0, 0xb7d4, 0xb6d8, 0xb3dc, 0xb2e0, 0xab2e, 0xaa32,\r
-+      0xad1e, 0xac22, 0xaf26, 0xae2a, 0xa988, 0x8109, 0xa916, 0x1118,\r
-+      0x9006, 0x012e, 0x0005, 0x8840, 0x2805, 0x9005, 0x1168, 0xb004,\r
-+      0x9005, 0x090c, 0x0d65, 0x2050, 0xb164, 0xa91a, 0x9184, 0x000f,\r
-+      0x9080, 0x1cf7, 0x2045, 0x2805, 0x2810, 0x2a08, 0xa80a, 0xa90e,\r
-+      0xaa12, 0x0c30, 0x3e60, 0x6344, 0xd3fc, 0x190c, 0x0d65, 0xa93c,\r
-+      0xaa40, 0xa844, 0x9106, 0x1118, 0xa848, 0x9206, 0x0508, 0x2958,\r
-+      0xab48, 0xac44, 0x2940, 0x080c, 0x1d17, 0x1998, 0x2850, 0x2c40,\r
-+      0xab14, 0xa880, 0xd0fc, 0x1140, 0xa810, 0x2005, 0xa80a, 0x2a00,\r
-+      0xa80e, 0x2009, 0x8015, 0x0070, 0x00c6, 0x3e60, 0x6044, 0xc0a4,\r
-+      0x9085, 0x8005, 0x6046, 0x00ce, 0x8319, 0xab16, 0x1904, 0x1bb3,\r
-+      0x2009, 0x8005, 0x3e60, 0x6044, 0x9105, 0x6046, 0x0804, 0x1bb0,\r
-+      0x080c, 0x0d65, 0x00f6, 0x00e6, 0x0096, 0x00c6, 0x0026, 0x704c,\r
-+      0x9c06, 0x190c, 0x0d65, 0x2079, 0x0090, 0x2001, 0x0105, 0x2003,\r
-+      0x0010, 0x782b, 0x0004, 0x7057, 0x0000, 0x6014, 0x2048, 0x080c,\r
-+      0xb847, 0x0118, 0xa880, 0xc0bd, 0xa882, 0x6020, 0x9086, 0x0006,\r
-+      0x1170, 0x2061, 0x0100, 0x62c8, 0x2001, 0x00fa, 0x8001, 0x1df0,\r
-+      0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89a, 0x60c8, 0xa896, 0x704c,\r
-+      0x2060, 0x00c6, 0x080c, 0xb452, 0x080c, 0x98c8, 0x00ce, 0x704c,\r
-+      0x9c06, 0x1150, 0x2009, 0x0040, 0x080c, 0x2052, 0x080c, 0x94b8,\r
-+      0x2011, 0x0000, 0x080c, 0x9343, 0x002e, 0x00ce, 0x009e, 0x00ee,\r
-+      0x00fe, 0x0005, 0x00f6, 0x2079, 0x0090, 0x781c, 0x0006, 0x7818,\r
-+      0x0006, 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012,\r
-+      0x7816, 0x2019, 0x1000, 0x8319, 0x090c, 0x0d65, 0x7820, 0xd0bc,\r
-+      0x1dd0, 0x79c8, 0x000e, 0x9102, 0x001e, 0x0006, 0x0016, 0x79c4,\r
-+      0x000e, 0x9103, 0x78c6, 0x000e, 0x78ca, 0x9284, 0x1984, 0x9085,\r
-+      0x0012, 0x7816, 0x2079, 0x0090, 0x782b, 0x0008, 0x7057, 0x0000,\r
-+      0x00fe, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x19b8, 0x7054, 0x9086,\r
-+      0x0000, 0x0904, 0x1cc8, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c,\r
-+      0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188,\r
-+      0x080c, 0xd61c, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d65,\r
-+      0x0016, 0x2009, 0x0040, 0x080c, 0x2052, 0x001e, 0x2001, 0x020c,\r
-+      0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,\r
-+      0x1120, 0x2009, 0x0040, 0x080c, 0x2052, 0x782c, 0xd0fc, 0x09a8,\r
-+      0x080c, 0x98e4, 0x782c, 0xd0fc, 0x1de8, 0x080c, 0x98c8, 0x7054,\r
-+      0x9086, 0x0000, 0x1950, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8,\r
-+      0x2009, 0x0040, 0x080c, 0x2052, 0x782b, 0x0002, 0x7057, 0x0000,\r
-+      0x00ee, 0x00fe, 0x0005, 0x080c, 0x0d65, 0x8c60, 0x2c05, 0x9005,\r
-+      0x0110, 0x8a51, 0x0005, 0xa004, 0x9005, 0x0168, 0xa85a, 0x2040,\r
-+      0xa064, 0x9084, 0x000f, 0x9080, 0x1cf7, 0x2065, 0x8cff, 0x090c,\r
-+      0x0d65, 0x8a51, 0x0005, 0x2050, 0x0005, 0x0000, 0x001d, 0x0021,\r
-+      0x0025, 0x0029, 0x002d, 0x0031, 0x0035, 0x0000, 0x001b, 0x0021,\r
-+      0x0027, 0x002d, 0x0033, 0x0000, 0x0000, 0x0023, 0x0000, 0x0000,\r
-+      0x1cea, 0x1ce6, 0x0000, 0x0000, 0x1cf4, 0x0000, 0x1cea, 0x1cf1,\r
-+      0x1cf1, 0x1cee, 0x0000, 0x0000, 0x0000, 0x1cf4, 0x1cf1, 0x0000,\r
-+      0x1cec, 0x1cec, 0x0000, 0x0000, 0x1cf4, 0x0000, 0x1cec, 0x1cf2,\r
-+      0x1cf2, 0x1cf2, 0x0000, 0x0000, 0x0000, 0x1cf4, 0x1cf2, 0x00c6,\r
-+      0x00d6, 0x0086, 0xab42, 0xac3e, 0xa888, 0x9055, 0x0904, 0x1ef6,\r
-+      0x2940, 0xa064, 0x90ec, 0x000f, 0x9084, 0x00ff, 0x9086, 0x0008,\r
-+      0x1118, 0x2061, 0x1cf2, 0x00d0, 0x9de0, 0x1cf7, 0x9d86, 0x0007,\r
-+      0x0130, 0x9d86, 0x000e, 0x0118, 0x9d86, 0x000f, 0x1120, 0xa08c,\r
-+      0x9422, 0xa090, 0x931b, 0x2c05, 0x9065, 0x1140, 0x0310, 0x0804,\r
-+      0x1ef6, 0xa004, 0x9045, 0x0904, 0x1ef6, 0x08d8, 0x2c05, 0x9005,\r
-+      0x0904, 0x1dde, 0xdd9c, 0x1904, 0x1d9a, 0x908a, 0x0036, 0x1a0c,\r
-+      0x0d65, 0x9082, 0x001b, 0x0002, 0x1d6f, 0x1d6f, 0x1d71, 0x1d6f,\r
-+      0x1d6f, 0x1d6f, 0x1d77, 0x1d6f, 0x1d6f, 0x1d6f, 0x1d7d, 0x1d6f,\r
-+      0x1d6f, 0x1d6f, 0x1d83, 0x1d6f, 0x1d6f, 0x1d6f, 0x1d89, 0x1d6f,\r
-+      0x1d6f, 0x1d6f, 0x1d8f, 0x1d6f, 0x1d6f, 0x1d6f, 0x1d95, 0x080c,\r
-+      0x0d65, 0xa07c, 0x9422, 0xa080, 0x931b, 0x0804, 0x1dd4, 0xa08c,\r
-+      0x9422, 0xa090, 0x931b, 0x0804, 0x1dd4, 0xa09c, 0x9422, 0xa0a0,\r
-+      0x931b, 0x0804, 0x1dd4, 0xa0ac, 0x9422, 0xa0b0, 0x931b, 0x0804,\r
-+      0x1dd4, 0xa0bc, 0x9422, 0xa0c0, 0x931b, 0x0804, 0x1dd4, 0xa0cc,\r
-+      0x9422, 0xa0d0, 0x931b, 0x0804, 0x1dd4, 0xa0dc, 0x9422, 0xa0e0,\r
-+      0x931b, 0x04d0, 0x908a, 0x0034, 0x1a0c, 0x0d65, 0x9082, 0x001b,\r
-+      0x0002, 0x1dbc, 0x1dba, 0x1dba, 0x1dba, 0x1dba, 0x1dba, 0x1dc1,\r
-+      0x1dba, 0x1dba, 0x1dba, 0x1dba, 0x1dba, 0x1dc6, 0x1dba, 0x1dba,\r
-+      0x1dba, 0x1dba, 0x1dba, 0x1dcb, 0x1dba, 0x1dba, 0x1dba, 0x1dba,\r
-+      0x1dba, 0x1dd0, 0x080c, 0x0d65, 0xa07c, 0x9422, 0xa080, 0x931b,\r
-+      0x0098, 0xa094, 0x9422, 0xa098, 0x931b, 0x0070, 0xa0ac, 0x9422,\r
-+      0xa0b0, 0x931b, 0x0048, 0xa0c4, 0x9422, 0xa0c8, 0x931b, 0x0020,\r
-+      0xa0dc, 0x9422, 0xa0e0, 0x931b, 0x0630, 0x2300, 0x9405, 0x0160,\r
-+      0x8a51, 0x0904, 0x1ef6, 0x8c60, 0x0804, 0x1d46, 0xa004, 0x9045,\r
-+      0x0904, 0x1ef6, 0x0804, 0x1d21, 0x8a51, 0x0904, 0x1ef6, 0x8c60,\r
-+      0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, 0x0904, 0x1ef6, 0xa064,\r
-+      0x90ec, 0x000f, 0x9de0, 0x1cf7, 0x2c05, 0x2060, 0xa880, 0xc0fc,\r
-+      0xa882, 0x0804, 0x1eeb, 0x2c05, 0x8422, 0x8420, 0x831a, 0x9399,\r
-+      0x0000, 0xac2e, 0xab32, 0xdd9c, 0x1904, 0x1e88, 0x9082, 0x001b,\r
-+      0x0002, 0x1e24, 0x1e24, 0x1e26, 0x1e24, 0x1e24, 0x1e24, 0x1e34,\r
-+      0x1e24, 0x1e24, 0x1e24, 0x1e42, 0x1e24, 0x1e24, 0x1e24, 0x1e50,\r
-+      0x1e24, 0x1e24, 0x1e24, 0x1e5e, 0x1e24, 0x1e24, 0x1e24, 0x1e6c,\r
-+      0x1e24, 0x1e24, 0x1e24, 0x1e7a, 0x080c, 0x0d65, 0xa17c, 0x2400,\r
-+      0x9122, 0xa180, 0x2300, 0x911b, 0x0a0c, 0x0d65, 0xa074, 0x9420,\r
-+      0xa078, 0x9319, 0x0804, 0x1ee6, 0xa18c, 0x2400, 0x9122, 0xa190,\r
-+      0x2300, 0x911b, 0x0a0c, 0x0d65, 0xa084, 0x9420, 0xa088, 0x9319,\r
-+      0x0804, 0x1ee6, 0xa19c, 0x2400, 0x9122, 0xa1a0, 0x2300, 0x911b,\r
-+      0x0a0c, 0x0d65, 0xa094, 0x9420, 0xa098, 0x9319, 0x0804, 0x1ee6,\r
-+      0xa1ac, 0x2400, 0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c, 0x0d65,\r
-+      0xa0a4, 0x9420, 0xa0a8, 0x9319, 0x0804, 0x1ee6, 0xa1bc, 0x2400,\r
-+      0x9122, 0xa1c0, 0x2300, 0x911b, 0x0a0c, 0x0d65, 0xa0b4, 0x9420,\r
-+      0xa0b8, 0x9319, 0x0804, 0x1ee6, 0xa1cc, 0x2400, 0x9122, 0xa1d0,\r
-+      0x2300, 0x911b, 0x0a0c, 0x0d65, 0xa0c4, 0x9420, 0xa0c8, 0x9319,\r
-+      0x0804, 0x1ee6, 0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300, 0x911b,\r
-+      0x0a0c, 0x0d65, 0xa0d4, 0x9420, 0xa0d8, 0x9319, 0x0804, 0x1ee6,\r
-+      0x9082, 0x001b, 0x0002, 0x1ea6, 0x1ea4, 0x1ea4, 0x1ea4, 0x1ea4,\r
-+      0x1ea4, 0x1eb3, 0x1ea4, 0x1ea4, 0x1ea4, 0x1ea4, 0x1ea4, 0x1ec0,\r
-+      0x1ea4, 0x1ea4, 0x1ea4, 0x1ea4, 0x1ea4, 0x1ecd, 0x1ea4, 0x1ea4,\r
-+      0x1ea4, 0x1ea4, 0x1ea4, 0x1eda, 0x080c, 0x0d65, 0xa17c, 0x2400,\r
-+      0x9122, 0xa180, 0x2300, 0x911b, 0x0a0c, 0x0d65, 0xa06c, 0x9420,\r
-+      0xa070, 0x9319, 0x0498, 0xa194, 0x2400, 0x9122, 0xa198, 0x2300,\r
-+      0x911b, 0x0a0c, 0x0d65, 0xa084, 0x9420, 0xa088, 0x9319, 0x0430,\r
-+      0xa1ac, 0x2400, 0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c, 0x0d65,\r
-+      0xa09c, 0x9420, 0xa0a0, 0x9319, 0x00c8, 0xa1c4, 0x2400, 0x9122,\r
-+      0xa1c8, 0x2300, 0x911b, 0x0a0c, 0x0d65, 0xa0b4, 0x9420, 0xa0b8,\r
-+      0x9319, 0x0060, 0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300, 0x911b,\r
-+      0x0a0c, 0x0d65, 0xa0cc, 0x9420, 0xa0d0, 0x9319, 0xac1e, 0xab22,\r
-+      0xa880, 0xc0fd, 0xa882, 0x2800, 0xa85a, 0x2c00, 0xa812, 0x2a00,\r
-+      0xa816, 0x000e, 0x000e, 0x000e, 0x9006, 0x0028, 0x008e, 0x00de,\r
-+      0x00ce, 0x9085, 0x0001, 0x0005, 0x00c6, 0x610c, 0x0016, 0x9026,\r
-+      0x2410, 0x6004, 0x9420, 0x9291, 0x0000, 0x2c04, 0x9210, 0x9ce0,\r
-+      0x0002, 0x918a, 0x0002, 0x1da8, 0x9284, 0x000f, 0x9405, 0x001e,\r
-+      0x00ce, 0x0005, 0x7803, 0x0003, 0x780f, 0x0000, 0x6004, 0x7812,\r
-+      0x2c04, 0x7816, 0x9ce0, 0x0002, 0x918a, 0x0002, 0x1db8, 0x0005,\r
-+      0x2001, 0x0005, 0x2004, 0xd0bc, 0x190c, 0x0d5e, 0xd094, 0x0110,\r
-+      0x080c, 0x11c6, 0x0005, 0x0126, 0x2091, 0x2600, 0x2079, 0x0200,\r
-+      0x2071, 0x0260, 0x2069, 0x1800, 0x7817, 0x0000, 0x789b, 0x0814,\r
-+      0x78a3, 0x0406, 0x789f, 0x0410, 0x2009, 0x013b, 0x200b, 0x0400,\r
-+      0x781b, 0x0002, 0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600,\r
-+      0x012e, 0x0005, 0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x204f,\r
-+      0x7900, 0xd1dc, 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e,\r
-+      0x0002, 0x1f71, 0x1f69, 0x7a7a, 0x1f69, 0x1f6b, 0x1f6b, 0x1f6b,\r
-+      0x1f6b, 0x7a60, 0x1f69, 0x1f6d, 0x1f69, 0x1f6b, 0x1f69, 0x1f6b,\r
-+      0x1f69, 0x080c, 0x0d65, 0x0031, 0x0020, 0x080c, 0x7a60, 0x080c,\r
-+      0x7a7a, 0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xd61c, 0x7930,\r
-+      0x9184, 0x0003, 0x01f0, 0x080c, 0x98c8, 0x2001, 0x19cb, 0x2004,\r
-+      0x9005, 0x0180, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d65,\r
-+      0x00c6, 0x2001, 0x19cb, 0x2064, 0x080c, 0x98e4, 0x080c, 0xb452,\r
-+      0x00ce, 0x0408, 0x2009, 0x0040, 0x080c, 0x2052, 0x080c, 0x98e4,\r
-+      0x00d0, 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160,\r
-+      0x080c, 0x70b7, 0x1138, 0x080c, 0x73b7, 0x080c, 0x5cdc, 0x080c,\r
-+      0x6fe8, 0x0010, 0x080c, 0x5b97, 0x080c, 0x7b18, 0x0041, 0x0018,\r
-+      0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6,\r
-+      0x0036, 0x0046, 0x0056, 0x2071, 0x1a3c, 0x080c, 0x195f, 0x005e,\r
-+      0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071,\r
-+      0x1800, 0x7128, 0x2001, 0x1940, 0x2102, 0x2001, 0x1948, 0x2102,\r
-+      0x2001, 0x013b, 0x2102, 0x2079, 0x0200, 0x2001, 0x0201, 0x789e,\r
-+      0x78a3, 0x0200, 0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x9398,\r
-+      0x0005, 0x2320, 0x9182, 0x0204, 0x1230, 0x2011, 0x0008, 0x8423,\r
-+      0x8423, 0x8423, 0x0488, 0x9182, 0x024c, 0x1240, 0x2011, 0x0007,\r
-+      0x8403, 0x8003, 0x9400, 0x9400, 0x9420, 0x0430, 0x9182, 0x02bc,\r
-+      0x1238, 0x2011, 0x0006, 0x8403, 0x8003, 0x9400, 0x9420, 0x00e0,\r
-+      0x9182, 0x034c, 0x1230, 0x2011, 0x0005, 0x8403, 0x8003, 0x9420,\r
-+      0x0098, 0x9182, 0x042c, 0x1228, 0x2011, 0x0004, 0x8423, 0x8423,\r
-+      0x0058, 0x9182, 0x059c, 0x1228, 0x2011, 0x0003, 0x8403, 0x9420,\r
-+      0x0018, 0x2011, 0x0002, 0x8423, 0x9482, 0x0228, 0x8002, 0x8020,\r
-+      0x8301, 0x9402, 0x0110, 0x0208, 0x8321, 0x8217, 0x8203, 0x9405,\r
-+      0x789a, 0x012e, 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6814,\r
-+      0x9084, 0xffc0, 0x910d, 0x6916, 0x00de, 0x000e, 0x0005, 0x00d6,\r
-+      0x2069, 0x0200, 0x9005, 0x6810, 0x0110, 0xc0a5, 0x0008, 0xc0a4,\r
-+      0x6812, 0x00de, 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6810,\r
-+      0x9084, 0xfff8, 0x910d, 0x6912, 0x00de, 0x000e, 0x0005, 0x7938,\r
-+      0x080c, 0x0d5e, 0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001,\r
-+      0xa001, 0xa001, 0xa001, 0xa001, 0x7902, 0xa001, 0xa001, 0xa001,\r
-+      0xa001, 0xa001, 0xa001, 0x00fe, 0x0005, 0x0126, 0x2091, 0x2800,\r
-+      0x2061, 0x0100, 0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x281f,\r
-+      0x080c, 0x273f, 0x080c, 0x2890, 0x9006, 0x080c, 0x276e, 0x9006,\r
-+      0x080c, 0x2751, 0x20a9, 0x0012, 0x1d04, 0x207c, 0x2091, 0x6000,\r
-+      0x1f04, 0x207c, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085,\r
-+      0x0400, 0x9084, 0xdfff, 0x6052, 0x6224, 0x080c, 0x286d, 0x080c,\r
-+      0x245d, 0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x246d, 0x60e7,\r
-+      0x0000, 0x61ea, 0x60e3, 0x0002, 0x604b, 0xf7f7, 0x6043, 0x0000,\r
-+      0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x149f, 0x00c6, 0x2061,\r
-+      0x0140, 0x608b, 0x000b, 0x608f, 0x10b8, 0x6093, 0x0000, 0x6097,\r
-+      0x0198, 0x00ce, 0x6004, 0x9085, 0x8000, 0x6006, 0x60bb, 0x0000,\r
-+      0x20a9, 0x0018, 0x60bf, 0x0000, 0x1f04, 0x20ba, 0x60bb, 0x0000,\r
-+      0x60bf, 0x0108, 0x60bf, 0x0012, 0x60bf, 0x0320, 0x60bf, 0x0018,\r
-+      0x601b, 0x00f0, 0x601f, 0x001e, 0x600f, 0x006b, 0x602b, 0x402c,\r
-+      0x012e, 0x0005, 0x00f6, 0x2079, 0x0140, 0x78c3, 0x0080, 0x78c3,\r
-+      0x0083, 0x78c3, 0x0000, 0x00fe, 0x0005, 0x2001, 0x1834, 0x2003,\r
-+      0x0000, 0x2001, 0x1833, 0x2003, 0x0001, 0x0005, 0x0126, 0x2091,\r
-+      0x2800, 0x0006, 0x0016, 0x0026, 0x6124, 0x6028, 0x910c, 0x9184,\r
-+      0x5e2c, 0x1118, 0x9184, 0x0007, 0x002a, 0x9195, 0x0004, 0x9284,\r
-+      0x0007, 0x0002, 0x2105, 0x2102, 0x2102, 0x2102, 0x2104, 0x2102,\r
-+      0x2102, 0x2102, 0x080c, 0x0d65, 0x0029, 0x002e, 0x001e, 0x000e,\r
-+      0x012e, 0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118, 0xd19c,\r
-+      0x1904, 0x2364, 0xd1f4, 0x190c, 0x0d5e, 0x080c, 0x70b7, 0x0904,\r
-+      0x2162, 0x080c, 0xbf61, 0x1120, 0x7000, 0x9086, 0x0003, 0x0580,\r
-+      0x6024, 0x9084, 0x1800, 0x0560, 0x080c, 0x70da, 0x0118, 0x080c,\r
-+      0x70c8, 0x1530, 0x2011, 0x0020, 0x080c, 0x286d, 0x6043, 0x0000,\r
-+      0x080c, 0xbf61, 0x0168, 0x080c, 0x70da, 0x1150, 0x2001, 0x1978,\r
-+      0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x6f2d, 0x0804, 0x2367,\r
-+      0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6, 0x2069, 0x0140,\r
-+      0x080c, 0x710e, 0x00de, 0x1904, 0x2367, 0x080c, 0x73c1, 0x0428,\r
-+      0x080c, 0x70da, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108, 0x0468,\r
-+      0x080c, 0x73c1, 0x080c, 0x73b7, 0x080c, 0x5cdc, 0x080c, 0x6fe8,\r
-+      0x0804, 0x2364, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170, 0xd0e4,\r
-+      0x1178, 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7094, 0x9086, 0x0028,\r
-+      0x1110, 0x080c, 0x729a, 0x0804, 0x2364, 0x080c, 0x73bc, 0x0048,\r
-+      0x2001, 0x194e, 0x2003, 0x0002, 0x0020, 0x080c, 0x71f8, 0x0804,\r
-+      0x2364, 0x080c, 0x733c, 0x0804, 0x2364, 0xd1ac, 0x0904, 0x227e,\r
-+      0x080c, 0x70b7, 0x11d0, 0x2011, 0x0020, 0x080c, 0x286d, 0x0006,\r
-+      0x0026, 0x0036, 0x080c, 0x70d1, 0x1158, 0x080c, 0x73b7, 0x080c,\r
-+      0x5cdc, 0x080c, 0x6fe8, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005,\r
-+      0x003e, 0x002e, 0x000e, 0x080c, 0x708b, 0x0016, 0x0046, 0x00c6,\r
-+      0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043,\r
-+      0x0090, 0x6043, 0x0010, 0x74d6, 0x948c, 0xff00, 0x7038, 0xd084,\r
-+      0x0178, 0x9186, 0xf800, 0x1160, 0x7044, 0xd084, 0x1148, 0xc085,\r
-+      0x7046, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x48d8, 0x003e,\r
-+      0x080c, 0xbf5a, 0x1904, 0x2255, 0x9196, 0xff00, 0x05a8, 0x705c,\r
-+      0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130,\r
-+      0xd184, 0x1550, 0x080c, 0x3186, 0x0128, 0xc18d, 0x7132, 0x080c,\r
-+      0x665f, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294,\r
-+      0xff00, 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x2255,\r
-+      0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904,\r
-+      0x2255, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c,\r
-+      0x48d8, 0x003e, 0x0804, 0x2255, 0x7038, 0xd08c, 0x1140, 0x2001,\r
-+      0x180c, 0x200c, 0xd1ac, 0x1904, 0x2255, 0xc1ad, 0x2102, 0x0036,\r
-+      0x73d4, 0x2011, 0x8013, 0x080c, 0x48d8, 0x003e, 0x7130, 0xc185,\r
-+      0x7132, 0x2011, 0x1854, 0x220c, 0x00f0, 0x0016, 0x2009, 0x0001,\r
-+      0x2011, 0x0100, 0x080c, 0x83eb, 0x2019, 0x000e, 0x00c6, 0x2061,\r
-+      0x0000, 0x080c, 0xd1eb, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x318b,\r
-+      0x200d, 0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e,\r
-+      0x080c, 0xd273, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002,\r
-+      0x2019, 0x0004, 0x080c, 0x2fc5, 0x001e, 0x0078, 0x0156, 0x00b6,\r
-+      0x20a9, 0x007f, 0x900e, 0x080c, 0x6270, 0x1110, 0x080c, 0x5cf6,\r
-+      0x8108, 0x1f04, 0x224b, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c,\r
-+      0x98c8, 0x080c, 0x9b6d, 0x080c, 0x98e4, 0x60e3, 0x0000, 0x001e,\r
-+      0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, 0x11b0,\r
-+      0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002,\r
-+      0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x1825,\r
-+      0x2003, 0x0000, 0x2011, 0x0020, 0x080c, 0x286d, 0xd194, 0x0904,\r
-+      0x2364, 0x0016, 0x080c, 0x98c8, 0x6220, 0xd2b4, 0x0904, 0x230c,\r
-+      0x080c, 0x820b, 0x080c, 0x8fb7, 0x2011, 0x0004, 0x080c, 0x286d,\r
-+      0x00f6, 0x2019, 0x19c4, 0x2304, 0x907d, 0x0904, 0x22d9, 0x7804,\r
-+      0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069,\r
-+      0x0140, 0x782c, 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001,\r
-+      0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001,\r
-+      0x1df0, 0x080c, 0x2843, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9,\r
-+      0x0009, 0x080c, 0x27fa, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001,\r
-+      0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x080c, 0x8874,\r
-+      0x080c, 0x98e4, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c,\r
-+      0x9be7, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae,\r
-+      0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000,\r
-+      0x0110, 0x080c, 0x2843, 0x00de, 0x00c6, 0x2061, 0x19b8, 0x6034,\r
-+      0x080c, 0xbf61, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a,\r
-+      0x00c8, 0x1238, 0x8000, 0x6036, 0x00ce, 0x080c, 0x8f8f, 0x0804,\r
-+      0x2361, 0x2061, 0x0100, 0x62c0, 0x080c, 0x97fe, 0x2019, 0x19c4,\r
-+      0x2304, 0x9065, 0x0130, 0x6003, 0x0001, 0x2009, 0x0027, 0x080c,\r
-+      0x9c85, 0x00ce, 0x0804, 0x2361, 0xd2bc, 0x05e0, 0x080c, 0x8218,\r
-+      0x2011, 0x0004, 0x080c, 0x286d, 0x00d6, 0x2069, 0x0140, 0x6804,\r
-+      0x9084, 0x4000, 0x0110, 0x080c, 0x2843, 0x00de, 0x00c6, 0x2061,\r
-+      0x19b8, 0x6050, 0x080c, 0xbf61, 0x0120, 0x909a, 0x0003, 0x1638,\r
-+      0x0018, 0x909a, 0x00c8, 0x1618, 0x8000, 0x6052, 0x604c, 0x00ce,\r
-+      0x9005, 0x0578, 0x2009, 0x07d0, 0x080c, 0x8210, 0x9080, 0x0008,\r
-+      0x2004, 0x9086, 0x0006, 0x1138, 0x2009, 0x1984, 0x2011, 0x0012,\r
-+      0x080c, 0x287c, 0x00f0, 0x2009, 0x1984, 0x2011, 0x0016, 0x080c,\r
-+      0x287c, 0x00b8, 0x2011, 0x0004, 0x080c, 0x286d, 0x0090, 0x0036,\r
-+      0x2019, 0x0001, 0x080c, 0x9286, 0x003e, 0x2019, 0x19cb, 0x2304,\r
-+      0x9065, 0x0130, 0x2009, 0x004f, 0x6003, 0x0003, 0x080c, 0x9c85,\r
-+      0x00ce, 0x080c, 0x98e4, 0x001e, 0xd19c, 0x0904, 0x23c2, 0x7038,\r
-+      0xd0ac, 0x1538, 0x0016, 0x0156, 0x2011, 0x0008, 0x080c, 0x286d,\r
-+      0x6050, 0xc0e5, 0x6052, 0x20a9, 0x0367, 0x1f04, 0x238f, 0x1d04,\r
-+      0x2377, 0x080c, 0x823f, 0x6020, 0xd09c, 0x1db8, 0x00f6, 0x2079,\r
-+      0x0100, 0x080c, 0x27aa, 0x00fe, 0x1d80, 0x6050, 0xc0e4, 0x6052,\r
-+      0x2011, 0x0008, 0x080c, 0x286d, 0x015e, 0x001e, 0x0498, 0x015e,\r
-+      0x001e, 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0x98c8, 0x080c,\r
-+      0x9b6d, 0x080c, 0x98e4, 0x60e3, 0x0000, 0x080c, 0xd5fb, 0x080c,\r
-+      0xd616, 0x080c, 0x5391, 0xd0fc, 0x1138, 0x080c, 0xbf5a, 0x1120,\r
-+      0x9085, 0x0001, 0x080c, 0x70fe, 0x9006, 0x080c, 0x2833, 0x2009,\r
-+      0x0002, 0x080c, 0x281f, 0x00e6, 0x2071, 0x1800, 0x7003, 0x0004,\r
-+      0x080c, 0x0e9c, 0x00ee, 0x2011, 0x0008, 0x080c, 0x286d, 0x080c,\r
-+      0x0bab, 0x001e, 0x918c, 0xffd0, 0x2110, 0x080c, 0x286d, 0x00ae,\r
-+      0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x00f6, 0x0126,\r
-+      0x2091, 0x8000, 0x2071, 0x1800, 0x71cc, 0x70ce, 0x9116, 0x0904,\r
-+      0x241c, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x281f, 0x2011,\r
-+      0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019,\r
-+      0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x48d8, 0x0468, 0x2001,\r
-+      0x1979, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4,\r
-+      0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c,\r
-+      0x48d8, 0x080c, 0x0e9c, 0x080c, 0x5391, 0xd0fc, 0x11a8, 0x080c,\r
-+      0xbf5a, 0x1190, 0x00c6, 0x080c, 0x24b8, 0x080c, 0x98c8, 0x080c,\r
-+      0x91e1, 0x080c, 0x98e4, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009,\r
-+      0x0002, 0x080c, 0x2fc5, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e,\r
-+      0x002e, 0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130,\r
-+      0x9094, 0xff00, 0x11f0, 0x2011, 0x1836, 0x2214, 0xd2ac, 0x11c8,\r
-+      0x81ff, 0x01e8, 0x2011, 0x181e, 0x2204, 0x9106, 0x1190, 0x2011,\r
-+      0x181f, 0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206, 0x1148,\r
-+      0x2011, 0x181f, 0x2214, 0x9294, 0x00ff, 0x9584, 0x00ff, 0x9206,\r
-+      0x1120, 0x2500, 0x080c, 0x7d70, 0x0048, 0x9584, 0x00ff, 0x9080,\r
-+      0x318b, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080,\r
-+      0x318b, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140,\r
-+      0x2001, 0x1817, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852,\r
-+      0x6856, 0x1f04, 0x2468, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026,\r
-+      0x2069, 0x0140, 0x2001, 0x1817, 0x2102, 0x8114, 0x8214, 0x8214,\r
-+      0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff, 0x1128,\r
-+      0x9184, 0x000f, 0x9080, 0xd62a, 0x2005, 0x6856, 0x8211, 0x1f04,\r
-+      0x247d, 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0x1800,\r
-+      0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005,\r
-+      0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980,\r
-+      0x9116, 0x0180, 0x9112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001,\r
-+      0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x24ad,\r
-+      0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005,\r
-+      0x080c, 0x538d, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046,\r
-+      0x2020, 0x2009, 0x002e, 0x080c, 0xd273, 0x004e, 0x0005, 0x00f6,\r
-+      0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904, 0x2524,\r
-+      0x080c, 0x279a, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600, 0x1120,\r
-+      0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120, 0x2011,\r
-+      0x8000, 0x900e, 0x0420, 0x908e, 0x0400, 0x1120, 0x9016, 0x2009,\r
-+      0x0001, 0x00e8, 0x908e, 0x0300, 0x1120, 0x9016, 0x2009, 0x0002,\r
-+      0x00b0, 0x908e, 0x0200, 0x1120, 0x9016, 0x2009, 0x0004, 0x0078,\r
-+      0x908e, 0x0100, 0x1548, 0x9016, 0x2009, 0x0008, 0x0040, 0x9084,\r
-+      0x0700, 0x908e, 0x0300, 0x1500, 0x2011, 0x0030, 0x0058, 0x2300,\r
-+      0x9080, 0x0020, 0x2018, 0x080c, 0x8419, 0x928c, 0xff00, 0x0110,\r
-+      0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2, 0x2009,\r
-+      0x0138, 0x220a, 0x080c, 0x70b7, 0x1118, 0x2009, 0x193e, 0x220a,\r
-+      0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126,\r
-+      0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170, 0x200c,\r
-+      0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0d5e, 0x002e,\r
-+      0x001e, 0x000e, 0x012e, 0x0005, 0x2001, 0x0171, 0x2004, 0xd0dc,\r
-+      0x0168, 0x2001, 0x0170, 0x200c, 0x918c, 0x00ff, 0x918e, 0x004c,\r
-+      0x1128, 0x200c, 0x918c, 0xff00, 0x810f, 0x0005, 0x900e, 0x2001,\r
-+      0x0227, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108, 0x2001,\r
-+      0x0226, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108, 0x0005,\r
-+      0x0018, 0x000c, 0x0018, 0x0020, 0x1000, 0x0800, 0x1000, 0x1800,\r
-+      0x0156, 0x0006, 0x0016, 0x0026, 0x00e6, 0x2001, 0x1961, 0x2004,\r
-+      0x908a, 0x0007, 0x1a0c, 0x0d65, 0x0033, 0x00ee, 0x002e, 0x001e,\r
-+      0x000e, 0x015e, 0x0005, 0x2582, 0x25a0, 0x25c4, 0x25c6, 0x25ef,\r
-+      0x25f1, 0x25f3, 0x2001, 0x0001, 0x080c, 0x23c9, 0x080c, 0x27e4,\r
-+      0x2001, 0x1963, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7, 0x782a,\r
-+      0x9006, 0x20a9, 0x0009, 0x080c, 0x27b6, 0x2001, 0x1961, 0x2003,\r
-+      0x0006, 0x2009, 0x001e, 0x2011, 0x25f4, 0x080c, 0x821d, 0x0005,\r
-+      0x2009, 0x1966, 0x200b, 0x0000, 0x2001, 0x196b, 0x2003, 0x0036,\r
-+      0x2001, 0x196a, 0x2003, 0x002a, 0x2001, 0x1963, 0x2003, 0x0001,\r
-+      0x9006, 0x080c, 0x2751, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c,\r
-+      0x27b6, 0x2001, 0x1961, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011,\r
-+      0x25f4, 0x080c, 0x821d, 0x0005, 0x080c, 0x0d65, 0x2001, 0x196b,\r
-+      0x2003, 0x0036, 0x2001, 0x1963, 0x2003, 0x0003, 0x7a38, 0x9294,\r
-+      0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,\r
-+      0x080c, 0x2751, 0x2001, 0x1967, 0x2003, 0x0000, 0x2001, 0xffff,\r
-+      0x20a9, 0x0009, 0x080c, 0x27b6, 0x2001, 0x1961, 0x2003, 0x0006,\r
-+      0x2009, 0x001e, 0x2011, 0x25f4, 0x080c, 0x821d, 0x0005, 0x080c,\r
-+      0x0d65, 0x080c, 0x0d65, 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6,\r
-+      0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x2001,\r
-+      0x1963, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d65, 0x0043, 0x012e,\r
-+      0x015e, 0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e, 0x0005, 0x2616,\r
-+      0x2636, 0x2676, 0x26a6, 0x26ca, 0x26da, 0x26dc, 0x080c, 0x27aa,\r
-+      0x11b0, 0x7850, 0x9084, 0xefff, 0x7852, 0x2009, 0x1969, 0x2104,\r
-+      0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d, 0x0008,\r
-+      0xc085, 0x200a, 0x2001, 0x1961, 0x2003, 0x0001, 0x0030, 0x080c,\r
-+      0x2700, 0x2001, 0xffff, 0x080c, 0x2591, 0x0005, 0x080c, 0x26de,\r
-+      0x05e0, 0x2009, 0x196a, 0x2104, 0x8001, 0x200a, 0x080c, 0x27aa,\r
-+      0x1178, 0x7850, 0x9084, 0xefff, 0x7852, 0x7a38, 0x9294, 0x0005,\r
-+      0x9296, 0x0005, 0x0518, 0x2009, 0x1969, 0x2104, 0xc085, 0x200a,\r
-+      0x2009, 0x1966, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0118,\r
-+      0x080c, 0x26e6, 0x00c0, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006,\r
-+      0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,\r
-+      0x276e, 0x2001, 0x1963, 0x2003, 0x0002, 0x0028, 0x2001, 0x1961,\r
-+      0x2003, 0x0003, 0x0010, 0x080c, 0x25b3, 0x0005, 0x080c, 0x26de,\r
-+      0x0560, 0x2009, 0x196a, 0x2104, 0x8001, 0x200a, 0x080c, 0x27aa,\r
-+      0x1168, 0x7850, 0x9084, 0xefff, 0x7852, 0x2001, 0x1961, 0x2003,\r
-+      0x0003, 0x2001, 0x1962, 0x2003, 0x0000, 0x00b8, 0x2009, 0x196a,\r
-+      0x2104, 0x9005, 0x1118, 0x080c, 0x2723, 0x0010, 0x080c, 0x26f3,\r
-+      0x080c, 0x26e6, 0x2009, 0x1966, 0x200b, 0x0000, 0x2001, 0x1963,\r
-+      0x2003, 0x0001, 0x080c, 0x25b3, 0x0000, 0x0005, 0x04b9, 0x0508,\r
-+      0x080c, 0x27aa, 0x11b8, 0x7850, 0x9084, 0xefff, 0x7852, 0x2009,\r
-+      0x1967, 0x2104, 0x8000, 0x200a, 0x9086, 0x0007, 0x0108, 0x0078,\r
-+      0x2001, 0x196c, 0x2003, 0x000a, 0x2009, 0x1969, 0x2104, 0xc0fd,\r
-+      0x200a, 0x0038, 0x0419, 0x2001, 0x1963, 0x2003, 0x0004, 0x080c,\r
-+      0x25de, 0x0005, 0x0099, 0x0168, 0x080c, 0x27aa, 0x1138, 0x7850,\r
-+      0x9084, 0xefff, 0x7852, 0x080c, 0x25ca, 0x0018, 0x0079, 0x080c,\r
-+      0x25de, 0x0005, 0x080c, 0x0d65, 0x080c, 0x0d65, 0x2009, 0x196b,\r
-+      0x2104, 0x8001, 0x200a, 0x090c, 0x273f, 0x0005, 0x7a38, 0x9294,\r
-+      0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,\r
-+      0x080c, 0x276e, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006,\r
-+      0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2751, 0x0005,\r
-+      0x2009, 0x1966, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0108,\r
-+      0x0068, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006,\r
-+      0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, 0x7a38, 0x9294,\r
-+      0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,\r
-+      0x080c, 0x276e, 0x0005, 0x0086, 0x2001, 0x1969, 0x2004, 0x9084,\r
-+      0x7fff, 0x090c, 0x0d65, 0x2009, 0x1968, 0x2144, 0x8846, 0x280a,\r
-+      0x9844, 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, 0x080c, 0x0d65,\r
-+      0x9006, 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, 0x0005, 0x0006,\r
-+      0x0156, 0x2001, 0x1961, 0x20a9, 0x0009, 0x2003, 0x0000, 0x8000,\r
-+      0x1f04, 0x2745, 0x2001, 0x1968, 0x2003, 0x8000, 0x015e, 0x000e,\r
-+      0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158, 0x7838,\r
-+      0x9084, 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, 0x196e, 0x210c,\r
-+      0x795a, 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0006, 0x783a,\r
-+      0x2009, 0x196f, 0x210c, 0x795a, 0x00fe, 0x0005, 0x00f6, 0x2079,\r
-+      0x0100, 0x9085, 0x0000, 0x0158, 0x7838, 0x9084, 0xfffa, 0x9085,\r
-+      0x0004, 0x783a, 0x7850, 0x9084, 0xfff0, 0x7852, 0x00c8, 0x7838,\r
-+      0x9084, 0xfffb, 0x9085, 0x0005, 0x783a, 0x7850, 0x9084, 0xfff0,\r
-+      0x0016, 0x2009, 0x0003, 0x210c, 0x918c, 0x0600, 0x918e, 0x0400,\r
-+      0x0118, 0x9085, 0x000a, 0x0010, 0x9085, 0x0000, 0x001e, 0x7852,\r
-+      0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0007,\r
-+      0x000e, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0009,\r
-+      0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, 0x7820, 0x080c, 0x2819,\r
-+      0xd09c, 0x1110, 0x1f04, 0x27ad, 0x015e, 0x0005, 0x0126, 0x0016,\r
-+      0x0006, 0x2091, 0x8000, 0x000e, 0x2008, 0x9186, 0x0000, 0x1118,\r
-+      0x783b, 0x0007, 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006,\r
-+      0x0060, 0x9186, 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186,\r
-+      0x0003, 0x1118, 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x27d6,\r
-+      0x080c, 0x823f, 0x1f04, 0x27d6, 0x7850, 0x9085, 0x1000, 0x7852,\r
-+      0x000e, 0x001e, 0x012e, 0x0005, 0x080c, 0x28d4, 0x0005, 0x0006,\r
-+      0x0156, 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac,\r
-+      0x1100, 0x7854, 0xd08c, 0x1110, 0x1f04, 0x27f1, 0x00fe, 0x015e,\r
-+      0x000e, 0x0005, 0x1d04, 0x27fa, 0x080c, 0x823f, 0x1f04, 0x27fa,\r
-+      0x0005, 0x0006, 0x2001, 0x196d, 0x2004, 0x9086, 0x0000, 0x000e,\r
-+      0x0005, 0x0006, 0x2001, 0x196d, 0x2004, 0x9086, 0x0001, 0x000e,\r
-+      0x0005, 0x0006, 0x2001, 0x196d, 0x2004, 0x9086, 0x0002, 0x000e,\r
-+      0x0005, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006,\r
-+      0x2001, 0x1979, 0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104,\r
-+      0xd0dc, 0x0140, 0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001,\r
-+      0xa001, 0x200a, 0x0005, 0x0016, 0x0026, 0x080c, 0x70d1, 0x0108,\r
-+      0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a,\r
-+      0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114,\r
-+      0x9294, 0x0001, 0x9285, 0x1000, 0x200a, 0x220a, 0x002e, 0x001e,\r
-+      0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001,\r
-+      0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0006, 0x0016, 0x2009,\r
-+      0x0140, 0x2104, 0x1128, 0x080c, 0x70d1, 0x0110, 0xc0bc, 0x0008,\r
-+      0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0380,\r
-+      0x7843, 0x0101, 0x7844, 0xd084, 0x1de8, 0x2001, 0x0109, 0x2202,\r
-+      0x7843, 0x0100, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0380, 0x7843,\r
-+      0x0202, 0x7844, 0xd08c, 0x1de8, 0x2079, 0x0100, 0x7814, 0x9104,\r
-+      0x9205, 0x7a16, 0x2079, 0x0380, 0x7843, 0x0200, 0x00fe, 0x0005,\r
-+      0x0016, 0x0026, 0x0036, 0x00c6, 0x2061, 0x0100, 0x6050, 0x9084,\r
-+      0xfbff, 0x9085, 0x0040, 0x6052, 0x20a9, 0x0002, 0x080c, 0x27fa,\r
-+      0x6050, 0x9085, 0x0400, 0x9084, 0xff9f, 0x6052, 0x20a9, 0x0005,\r
-+      0x080c, 0x27fa, 0x6054, 0xd0bc, 0x090c, 0x0d65, 0x20a9, 0x0005,\r
-+      0x080c, 0x27fa, 0x6054, 0xd0ac, 0x090c, 0x0d65, 0x2009, 0x1980,\r
-+      0x9084, 0x7e00, 0x8007, 0x8004, 0x8004, 0x200a, 0x9085, 0x0000,\r
-+      0x605a, 0x2009, 0x196e, 0x2011, 0x196f, 0x6358, 0x939c, 0x38df,\r
-+      0x2320, 0x939d, 0x0000, 0x94a5, 0x0000, 0x230a, 0x2412, 0x00ce,\r
-+      0x003e, 0x002e, 0x001e, 0x0005, 0x0006, 0x00c6, 0x2061, 0x0100,\r
-+      0x6050, 0xc0cd, 0x6052, 0x00ce, 0x000e, 0x0005, 0x2dda, 0x2dda,\r
-+      0x29de, 0x29de, 0x29ea, 0x29ea, 0x29f6, 0x29f6, 0x2a04, 0x2a04,\r
-+      0x2a10, 0x2a10, 0x2a1e, 0x2a1e, 0x2a2c, 0x2a2c, 0x2a3e, 0x2a3e,\r
-+      0x2a4a, 0x2a4a, 0x2a58, 0x2a58, 0x2a76, 0x2a76, 0x2a96, 0x2a96,\r
-+      0x2a66, 0x2a66, 0x2a86, 0x2a86, 0x2aa4, 0x2aa4, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2ab6, 0x2ab6,\r
-+      0x2ac2, 0x2ac2, 0x2ad0, 0x2ad0, 0x2ade, 0x2ade, 0x2aee, 0x2aee,\r
-+      0x2afc, 0x2afc, 0x2b0c, 0x2b0c, 0x2b1c, 0x2b1c, 0x2b2e, 0x2b2e,\r
-+      0x2b3c, 0x2b3c, 0x2b4c, 0x2b4c, 0x2b6e, 0x2b6e, 0x2b92, 0x2b92,\r
-+      0x2b5c, 0x2b5c, 0x2b80, 0x2b80, 0x2ba2, 0x2ba2, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2bb6, 0x2bb6,\r
-+      0x2bc2, 0x2bc2, 0x2bd0, 0x2bd0, 0x2bde, 0x2bde, 0x2bee, 0x2bee,\r
-+      0x2bfc, 0x2bfc, 0x2c0c, 0x2c0c, 0x2c1c, 0x2c1c, 0x2c2e, 0x2c2e,\r
-+      0x2c3c, 0x2c3c, 0x2c4c, 0x2c4c, 0x2c5c, 0x2c5c, 0x2c6e, 0x2c6e,\r
-+      0x2c7e, 0x2c7e, 0x2c90, 0x2c90, 0x2ca2, 0x2ca2, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2cb6, 0x2cb6,\r
-+      0x2cc4, 0x2cc4, 0x2cd4, 0x2cd4, 0x2ce4, 0x2ce4, 0x2cf6, 0x2cf6,\r
-+      0x2d06, 0x2d06, 0x2d18, 0x2d18, 0x2d2a, 0x2d2a, 0x2d3e, 0x2d3e,\r
-+      0x2d4e, 0x2d4e, 0x2d60, 0x2d60, 0x2d72, 0x2d72, 0x2d86, 0x2d86,\r
-+      0x2d97, 0x2d97, 0x2daa, 0x2daa, 0x2dbd, 0x2dbd, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c,\r
-+      0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x2a3c, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x20e6,\r
-+      0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x1f20, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20,\r
-+      0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f4a, 0x0804, 0x2dd2,\r
-+      0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,\r
-+      0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20,\r
-+      0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x20e6,\r
-+      0x080c, 0x1f4a, 0x0804, 0x2dd2, 0xa001, 0x0cf0, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x132a,\r
-+      0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2,\r
-+      0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,\r
-+      0x080c, 0x1f20, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x20e6,\r
-+      0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20,\r
-+      0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20,\r
-+      0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x132a,\r
-+      0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x20e6,\r
-+      0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,\r
-+      0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x20e6, 0x0804, 0x2dd2,\r
-+      0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,\r
-+      0x080c, 0x2527, 0x080c, 0x1f20, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,\r
-+      0x080c, 0x1f20, 0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,\r
-+      0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x20e6,\r
-+      0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20,\r
-+      0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20,\r
-+      0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,\r
-+      0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x20e6,\r
-+      0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20,\r
-+      0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x20e6,\r
-+      0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,\r
-+      0x080c, 0x1f20, 0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2,\r
-+      0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,\r
-+      0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x132a, 0x080c, 0x1f4a,\r
-+      0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x132a, 0x080c, 0x1f4a,\r
-+      0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x20e6,\r
-+      0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e,\r
-+      0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x992e, 0x080c, 0x20e6, 0x0804, 0x2dd2,\r
-+      0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,\r
-+      0x080c, 0x1f20, 0x080c, 0x992e, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20,\r
-+      0x080c, 0x992e, 0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e,\r
-+      0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e, 0x080c, 0x20e6,\r
-+      0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e,\r
-+      0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e,\r
-+      0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e,\r
-+      0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e, 0x080c, 0x20e6,\r
-+      0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e,\r
-+      0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e,\r
-+      0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e,\r
-+      0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e,\r
-+      0x080c, 0x20e6, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2,\r
-+      0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,\r
-+      0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x132a, 0x080c, 0x1f4a,\r
-+      0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x20e6,\r
-+      0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,\r
-+      0x080c, 0x992e, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x992e,\r
-+      0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20,\r
-+      0x080c, 0x992e, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20,\r
-+      0x080c, 0x992e, 0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,\r
-+      0x080c, 0x992e, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,\r
-+      0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2,\r
-+      0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,\r
-+      0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x1f4a,\r
-+      0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x992e,\r
-+      0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,\r
-+      0x080c, 0x992e, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,\r
-+      0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2,\r
-+      0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,\r
-+      0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x132a,\r
-+      0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x992e,\r
-+      0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,\r
-+      0x080c, 0x992e, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x04d8, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x2527, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x080c,\r
-+      0x1f4a, 0x0440, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,\r
-+      0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x132a,\r
-+      0x080c, 0x992e, 0x080c, 0x1f4a, 0x00a8, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c,\r
-+      0x1f20, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x080c,\r
-+      0x1f4a, 0x0000, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e,\r
-+      0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6, 0x0026, 0x0046, 0x9026,\r
-+      0x080c, 0x6625, 0x1904, 0x2ee1, 0x72d8, 0x2001, 0x194d, 0x2004,\r
-+      0x9005, 0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904,\r
-+      0x2ee1, 0x080c, 0x2ee6, 0x0804, 0x2ee1, 0xd2cc, 0x1904, 0x2ee1,\r
-+      0x080c, 0x70b7, 0x1120, 0x70ab, 0xffff, 0x0804, 0x2ee1, 0xd294,\r
-+      0x0120, 0x70ab, 0xffff, 0x0804, 0x2ee1, 0x080c, 0x3181, 0x0160,\r
-+      0x080c, 0xbf61, 0x0128, 0x2001, 0x1817, 0x203c, 0x0804, 0x2e73,\r
-+      0x70ab, 0xffff, 0x0804, 0x2ee1, 0x2001, 0x1817, 0x203c, 0x7290,\r
-+      0xd284, 0x0904, 0x2e73, 0xd28c, 0x1904, 0x2e73, 0x0036, 0x73a8,\r
-+      0x938e, 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1d80,\r
-+      0x2c04, 0x938c, 0x0001, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010,\r
-+      0x9084, 0x00ff, 0x970e, 0x05a8, 0x908e, 0x0000, 0x0590, 0x908e,\r
-+      0x00ff, 0x1150, 0x7230, 0xd284, 0x1588, 0x7290, 0xc28d, 0x7292,\r
-+      0x70ab, 0xffff, 0x003e, 0x0478, 0x0026, 0x2011, 0x0010, 0x080c,\r
-+      0x668b, 0x002e, 0x0118, 0x70ab, 0xffff, 0x0410, 0x900e, 0x080c,\r
-+      0x2424, 0x080c, 0x6210, 0x11c0, 0x080c, 0x6667, 0x1168, 0x7030,\r
-+      0xd08c, 0x0130, 0xb800, 0xd0bc, 0x0138, 0x080c, 0x655f, 0x0120,\r
-+      0x080c, 0x2eff, 0x0148, 0x0028, 0x080c, 0x3057, 0x080c, 0x2f2b,\r
-+      0x0118, 0x8318, 0x0804, 0x2e25, 0x73aa, 0x0010, 0x70ab, 0xffff,\r
-+      0x003e, 0x0804, 0x2ee1, 0x9780, 0x318b, 0x203d, 0x97bc, 0xff00,\r
-+      0x873f, 0x2041, 0x007e, 0x70a8, 0x9096, 0xffff, 0x1118, 0x900e,\r
-+      0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020,\r
-+      0x70ab, 0xffff, 0x0804, 0x2ee1, 0x2700, 0x0156, 0x0016, 0x9106,\r
-+      0x0904, 0x2ed6, 0x0026, 0x2011, 0x0010, 0x080c, 0x668b, 0x002e,\r
-+      0x0120, 0x2009, 0xffff, 0x0804, 0x2ede, 0xc484, 0x080c, 0x6270,\r
-+      0x0138, 0x080c, 0xbf61, 0x1590, 0x080c, 0x6210, 0x15b8, 0x0008,\r
-+      0xc485, 0x080c, 0x6667, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800,\r
-+      0xd0bc, 0x11e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x6667, 0x9082,\r
-+      0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x6234, 0x0028, 0x080c,\r
-+      0x30ef, 0x01a0, 0x080c, 0x311a, 0x0088, 0x080c, 0x3057, 0x080c,\r
-+      0xbf61, 0x1160, 0x080c, 0x2f2b, 0x0188, 0x0040, 0x080c, 0xbf61,\r
-+      0x1118, 0x080c, 0x30ef, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108,\r
-+      0x015e, 0x1f04, 0x2e8c, 0x70ab, 0xffff, 0x0018, 0x001e, 0x015e,\r
-+      0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016,\r
-+      0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x6210, 0x1168, 0xb813,\r
-+      0x00ff, 0xb817, 0xfffe, 0x080c, 0x3057, 0x04a9, 0x0128, 0x70d8,\r
-+      0xc0bd, 0x70da, 0x080c, 0xbcae, 0x001e, 0x00ce, 0x0005, 0x0016,\r
-+      0x0076, 0x00d6, 0x00c6, 0x2001, 0x1858, 0x2004, 0x9084, 0x00ff,\r
-+      0xb842, 0x080c, 0x9c58, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbcdb,\r
-+      0x6023, 0x0001, 0x9006, 0x080c, 0x61ad, 0x2001, 0x0000, 0x080c,\r
-+      0x61c1, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e,\r
-+      0x2009, 0x0004, 0x080c, 0x9c85, 0x9085, 0x0001, 0x00ce, 0x00de,\r
-+      0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001,\r
-+      0x1858, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9c58, 0x0548,\r
-+      0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e,\r
-+      0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c,\r
-+      0x3006, 0x080c, 0xbcdb, 0x6023, 0x0001, 0x9006, 0x080c, 0x61ad,\r
-+      0x2001, 0x0002, 0x080c, 0x61c1, 0x0126, 0x2091, 0x8000, 0x70a4,\r
-+      0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c, 0x9c85, 0x9085,\r
-+      0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6,\r
-+      0x0026, 0x2009, 0x0080, 0x080c, 0x6210, 0x1140, 0xb813, 0x00ff,\r
-+      0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce,\r
-+      0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0x9b91,\r
-+      0x01d0, 0x2b00, 0x6012, 0x080c, 0xbcdb, 0x6023, 0x0001, 0x9006,\r
-+      0x080c, 0x61ad, 0x2001, 0x0002, 0x080c, 0x61c1, 0x0126, 0x2091,\r
-+      0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c,\r
-+      0x9c85, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,\r
-+      0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c,\r
-+      0x6210, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8c7, 0x0004,\r
-+      0x080c, 0x9b91, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001,\r
-+      0x620a, 0x080c, 0xbcdb, 0x2009, 0x0022, 0x080c, 0x9c85, 0x9085,\r
-+      0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066,\r
-+      0x0036, 0x0026, 0x00b6, 0x21f0, 0x9036, 0x080c, 0x98c8, 0x1110,\r
-+      0x2031, 0x0001, 0x0066, 0x080c, 0x8646, 0x080c, 0x85c6, 0x080c,\r
-+      0x981e, 0x080c, 0xab46, 0x006e, 0x86ff, 0x0110, 0x080c, 0x98e4,\r
-+      0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018,\r
-+      0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6270, 0x1140, 0x9686,\r
-+      0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x5cf6, 0x001e,\r
-+      0x8108, 0x1f04, 0x2feb, 0x9686, 0x0001, 0x190c, 0x3155, 0x00be,\r
-+      0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6,\r
-+      0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x9016, 0x080c, 0x98c8,\r
-+      0x1110, 0x2011, 0x0001, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x0026,\r
-+      0x2019, 0x0029, 0x080c, 0x863b, 0x0076, 0x2039, 0x0000, 0x080c,\r
-+      0x852a, 0x2c08, 0x080c, 0xcfc8, 0x007e, 0x001e, 0x002e, 0x82ff,\r
-+      0x0110, 0x080c, 0x98e4, 0xba10, 0xbb14, 0xbc84, 0x080c, 0x5cf6,\r
-+      0xba12, 0xbb16, 0xbc86, 0x00be, 0x001e, 0x002e, 0x003e, 0x004e,\r
-+      0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058,\r
-+      0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a4,\r
-+      0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005, 0x2071,\r
-+      0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8, 0xb800,\r
-+      0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046,\r
-+      0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x9016, 0x080c, 0x98c8,\r
-+      0x1110, 0x2011, 0x0001, 0x0026, 0x81ff, 0x1118, 0x20a9, 0x0001,\r
-+      0x0070, 0x080c, 0x538d, 0xd0c4, 0x0138, 0x0030, 0x9006, 0x2020,\r
-+      0x2009, 0x002d, 0x080c, 0xd273, 0x20a9, 0x0800, 0x9016, 0x0026,\r
-+      0x928e, 0x007e, 0x0904, 0x30c9, 0x928e, 0x007f, 0x0904, 0x30c9,\r
-+      0x928e, 0x0080, 0x05f0, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c8,\r
-+      0x8fff, 0x1150, 0x2001, 0x195f, 0x0006, 0x2003, 0x0001, 0x080c,\r
-+      0x30dc, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001,\r
-+      0x0001, 0x080c, 0x6631, 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c,\r
-+      0x863b, 0x0076, 0x2039, 0x0000, 0x080c, 0x852a, 0x00b6, 0x00c6,\r
-+      0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118,\r
-+      0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0xba06,\r
-+      0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, 0xcfc8, 0x001e,\r
-+      0x007e, 0x002e, 0x8210, 0x1f04, 0x307f, 0x002e, 0x82ff, 0x0110,\r
-+      0x080c, 0x98e4, 0x015e, 0x001e, 0x002e, 0x003e, 0x004e, 0x00be,\r
-+      0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, 0x080c,\r
-+      0x538d, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220, 0x2009,\r
-+      0x0029, 0x080c, 0xd273, 0x001e, 0x002e, 0x004e, 0x0005, 0x0016,\r
-+      0x0026, 0x0036, 0x00c6, 0x7290, 0x82ff, 0x01e8, 0x080c, 0x665f,\r
-+      0x11d0, 0x2100, 0x080c, 0x2457, 0x81ff, 0x01b8, 0x2019, 0x0001,\r
-+      0x8314, 0x92e0, 0x1d80, 0x2c04, 0xd384, 0x0120, 0x9084, 0xff00,\r
-+      0x8007, 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138, 0x9096, 0x00ff,\r
-+      0x0110, 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce, 0x003e, 0x002e,\r
-+      0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0066,\r
-+      0x9036, 0x080c, 0x98c8, 0x1110, 0x2031, 0x0001, 0x0066, 0x0036,\r
-+      0x2019, 0x0029, 0x00d9, 0x003e, 0x006e, 0x86ff, 0x0110, 0x080c,\r
-+      0x98e4, 0x006e, 0x9180, 0x1000, 0x2004, 0x9065, 0x0158, 0x0016,\r
-+      0x00c6, 0x2061, 0x1b02, 0x001e, 0x6112, 0x080c, 0x3006, 0x001e,\r
-+      0x080c, 0x6234, 0x012e, 0x00ce, 0x001e, 0x0005, 0x0016, 0x0026,\r
-+      0x2110, 0x080c, 0x94f4, 0x080c, 0xd529, 0x002e, 0x001e, 0x0005,\r
-+      0x2001, 0x1836, 0x2004, 0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c,\r
-+      0x70b7, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c,\r
-+      0x70b7, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x9180, 0x1000,\r
-+      0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c,\r
-+      0x6234, 0x8108, 0x1f04, 0x3166, 0x2061, 0x1800, 0x607b, 0x0000,\r
-+      0x607c, 0x9084, 0x00ff, 0x607e, 0x60af, 0x0000, 0x00be, 0x00ce,\r
-+      0x0005, 0x2001, 0x1875, 0x2004, 0xd0bc, 0x0005, 0x2011, 0x1854,\r
-+      0x2214, 0xd2ec, 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1,\r
-+      0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3,\r
-+      0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9,\r
-+      0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6,\r
-+      0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac,\r
-+      0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f,\r
-+      0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f, 0x6488,\r
-+      0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76,\r
-+      0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c,\r
-+      0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c,\r
-+      0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252, 0x5151,\r
-+      0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46,\r
-+      0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034,\r
-+      0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b, 0x442a,\r
-+      0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d,\r
-+      0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902,\r
-+      0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000, 0x3500,\r
-+      0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000,\r
-+      0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000,\r
-+      0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500, 0x2400,\r
-+      0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00,\r
-+      0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900,\r
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800, 0x8000,\r
-+      0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200, 0x1100,\r
-+      0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00,\r
-+      0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000, 0x0600,\r
-+      0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000, 0x0200,\r
-+      0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x2071, 0x1894, 0x7003, 0x0002, 0x9006,\r
-+      0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, 0x7046, 0x703b,\r
-+      0x18b0, 0x703f, 0x18b0, 0x7007, 0x0001, 0x080c, 0x103b, 0x090c,\r
-+      0x0d65, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x080c,\r
-+      0x103b, 0x090c, 0x0d65, 0x2900, 0x706e, 0xa867, 0x0002, 0xa8ab,\r
-+      0xdcb0, 0x0005, 0x2071, 0x1894, 0x7004, 0x0002, 0x32ba, 0x32bb,\r
-+      0x32ce, 0x32e2, 0x0005, 0x1004, 0x32cb, 0x0e04, 0x32cb, 0x2079,\r
-+      0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, 0x1128, 0x700f,\r
-+      0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000,\r
-+      0x2061, 0x18ae, 0x2c4c, 0xa86c, 0x908e, 0x0100, 0x0128, 0x9086,\r
-+      0x0200, 0x0904, 0x33b6, 0x0005, 0x7018, 0x2048, 0x2061, 0x1800,\r
-+      0x701c, 0x0807, 0x7014, 0x2048, 0xa864, 0x9094, 0x00ff, 0x9296,\r
-+      0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103,\r
-+      0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, 0x701c, 0x0807,\r
-+      0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, 0x61cc, 0x0042,\r
-+      0x2100, 0x908a, 0x003f, 0x1a04, 0x33b3, 0x61cc, 0x0804, 0x3348,\r
-+      0x338a, 0x33c2, 0x33cc, 0x33d0, 0x33da, 0x33e0, 0x33e4, 0x33f4,\r
-+      0x33f7, 0x3401, 0x3406, 0x340b, 0x3416, 0x3421, 0x3430, 0x343f,\r
-+      0x344d, 0x3464, 0x347f, 0x33b3, 0x3528, 0x3566, 0x360b, 0x361c,\r
-+      0x363f, 0x33b3, 0x33b3, 0x33b3, 0x3677, 0x3697, 0x36a0, 0x36cc,\r
-+      0x36d2, 0x33b3, 0x3718, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3,\r
-+      0x3723, 0x372c, 0x3734, 0x3736, 0x33b3, 0x33b3, 0x33b3, 0x33b3,\r
-+      0x33b3, 0x33b3, 0x3766, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3,\r
-+      0x3783, 0x37de, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3,\r
-+      0x0002, 0x3808, 0x380b, 0x386a, 0x3883, 0x38b3, 0x3b55, 0x33b3,\r
-+      0x4f5e, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3,\r
-+      0x33b3, 0x3401, 0x3406, 0x4054, 0x53b1, 0x406a, 0x4fed, 0x503e,\r
-+      0x5141, 0x33b3, 0x51a3, 0x51df, 0x5210, 0x531c, 0x523d, 0x529c,\r
-+      0x33b3, 0x406e, 0x41fe, 0x4214, 0x4239, 0x429e, 0x4312, 0x4332,\r
-+      0x43a9, 0x4405, 0x4461, 0x4464, 0x4489, 0x44fc, 0x4566, 0x456e,\r
-+      0x46a0, 0x4802, 0x4836, 0x4a80, 0x33b3, 0x4a9e, 0x4b61, 0x4c37,\r
-+      0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x4c9d, 0x4cb8, 0x456e, 0x4efe,\r
-+      0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x48b4, 0x0126, 0x2091,\r
-+      0x8000, 0x0e04, 0x3394, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486,\r
-+      0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82,\r
-+      0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,\r
-+      0xd084, 0x190c, 0x11be, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f,\r
-+      0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021, 0x4002,\r
-+      0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, 0x0868, 0x2021,\r
-+      0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c,\r
-+      0x7884, 0x7990, 0x0804, 0x48c1, 0x7883, 0x0004, 0x7884, 0x0807,\r
-+      0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990,\r
-+      0x0804, 0x48c4, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804, 0x338a,\r
-+      0x7984, 0x2114, 0x0804, 0x338a, 0x20e1, 0x0000, 0x2099, 0x0021,\r
-+      0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003, 0x7984,\r
-+      0x7a88, 0x7b8c, 0x0804, 0x338a, 0x7884, 0x2060, 0x04d8, 0x2009,\r
-+      0x0003, 0x2011, 0x0002, 0x2019, 0x001c, 0x789b, 0x0317, 0x0804,\r
-+      0x338a, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800, 0x2039, 0x0001,\r
-+      0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,\r
-+      0x33bf, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x33c6, 0x79a0, 0x9182,\r
-+      0x0040, 0x0210, 0x0804, 0x33bf, 0x2138, 0x7d98, 0x7c9c, 0x0804,\r
-+      0x33d4, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x33bf, 0x21e8,\r
-+      0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, 0x338a,\r
-+      0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109,\r
-+      0x1dd8, 0x2010, 0x9005, 0x0904, 0x338a, 0x0804, 0x33b9, 0x79a0,\r
-+      0x9182, 0x0040, 0x0210, 0x0804, 0x33bf, 0x21e0, 0x20a9, 0x0001,\r
-+      0x7984, 0x2198, 0x4012, 0x0804, 0x338a, 0x2069, 0x1853, 0x7884,\r
-+      0x7990, 0x911a, 0x1a04, 0x33bf, 0x8019, 0x0904, 0x33bf, 0x684a,\r
-+      0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, 0x685a, 0x685e,\r
-+      0x080c, 0x73e8, 0x0804, 0x338a, 0x2069, 0x1853, 0x7884, 0x7994,\r
-+      0x911a, 0x1a04, 0x33bf, 0x8019, 0x0904, 0x33bf, 0x684e, 0x6946,\r
-+      0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, 0x686e, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x6769, 0x012e, 0x0804, 0x338a, 0x902e,\r
-+      0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc, 0x7984,\r
-+      0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x189c,\r
-+      0x4101, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc,\r
-+      0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x48c1,\r
-+      0x701f, 0x34a3, 0x0005, 0xa864, 0x2008, 0x9084, 0x00ff, 0x9096,\r
-+      0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, 0x0015, 0x0138,\r
-+      0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, 0x33bc, 0x810f,\r
-+      0x918c, 0x00ff, 0x0904, 0x33bc, 0x7112, 0x7010, 0x8001, 0x0560,\r
-+      0x7012, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc,\r
-+      0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598,\r
-+      0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000,\r
-+      0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x48c1, 0x701f, 0x34e1,\r
-+      0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096,\r
-+      0x000a, 0x1904, 0x33bc, 0x0888, 0x7014, 0x2048, 0xa868, 0xc0fd,\r
-+      0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029, 0x1160, 0xc2fd,\r
-+      0xaa7a, 0x080c, 0x5de4, 0x0150, 0x0126, 0x2091, 0x8000, 0xa87a,\r
-+      0xa982, 0x012e, 0x0050, 0x080c, 0x60fb, 0x1128, 0x7007, 0x0003,\r
-+      0x701f, 0x350d, 0x0005, 0x080c, 0x6bb3, 0x0126, 0x2091, 0x8000,\r
-+      0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x189c, 0x400a, 0x2100,\r
-+      0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c,\r
-+      0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804, 0x48c4,\r
-+      0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883, 0x4000,\r
-+      0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009, 0x017f,\r
-+      0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200, 0x2061,\r
-+      0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd, 0x2104,\r
-+      0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,\r
-+      0xd084, 0x0180, 0x2001, 0x19f3, 0x2004, 0x9005, 0x0128, 0x2001,\r
-+      0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002,\r
-+      0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904,\r
-+      0x33bc, 0x7984, 0x080c, 0x6270, 0x1904, 0x33bf, 0x7e98, 0x9684,\r
-+      0x3fff, 0x9082, 0x4000, 0x1a04, 0x33bf, 0x7c88, 0x7d8c, 0x080c,\r
-+      0x64a2, 0x080c, 0x6433, 0x1518, 0x2061, 0x1ddc, 0x0126, 0x2091,\r
-+      0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130,\r
-+      0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150, 0x012e, 0x9ce0,\r
-+      0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a04, 0x33bc, 0x0c30,\r
-+      0x080c, 0xb452, 0x012e, 0x0904, 0x33bc, 0x0804, 0x338a, 0x900e,\r
-+      0x2001, 0x0005, 0x080c, 0x6bb3, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0xbb4b, 0x080c, 0x6996, 0x012e, 0x0804, 0x338a, 0x00a6, 0x2950,\r
-+      0xb198, 0x080c, 0x6270, 0x1904, 0x35f8, 0xb6a4, 0x9684, 0x3fff,\r
-+      0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x64a2, 0x080c,\r
-+      0x644d, 0x1520, 0x2061, 0x1ddc, 0x0126, 0x2091, 0x8000, 0x6000,\r
-+      0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406,\r
-+      0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x001c, 0x2001,\r
-+      0x1819, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c,\r
-+      0xb452, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e, 0x2001,\r
-+      0x0005, 0x080c, 0x6bb3, 0x0126, 0x2091, 0x8000, 0x080c, 0xbb4b,\r
-+      0x080c, 0x698a, 0x012e, 0x0070, 0xb097, 0x4005, 0xb19a, 0x0010,\r
-+      0xb097, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x2a48,\r
-+      0x00ae, 0x0005, 0xb097, 0x4000, 0x9006, 0x918d, 0x0001, 0x2008,\r
-+      0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x488f,\r
-+      0x0904, 0x33bf, 0x080c, 0x6337, 0x0904, 0x33bc, 0x080c, 0x64a8,\r
-+      0x0904, 0x33bc, 0x0804, 0x4329, 0x81ff, 0x1904, 0x33bc, 0x080c,\r
-+      0x48ab, 0x0904, 0x33bf, 0x080c, 0x6536, 0x0904, 0x33bc, 0x2019,\r
-+      0x0005, 0x79a8, 0x080c, 0x64c3, 0x0904, 0x33bc, 0x7888, 0x908a,\r
-+      0x1000, 0x1a04, 0x33bf, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c,\r
-+      0x8167, 0x7984, 0xd184, 0x1904, 0x338a, 0x0804, 0x4329, 0x0126,\r
-+      0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, 0x2029,\r
-+      0x07ff, 0x6458, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, 0x6270,\r
-+      0x11d8, 0x080c, 0x6536, 0x1128, 0x2009, 0x0002, 0x62bc, 0x2518,\r
-+      0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x64c3, 0x1118, 0x2009,\r
-+      0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003, 0x800b,\r
-+      0x810b, 0x9108, 0x080c, 0x8167, 0x8529, 0x1ae0, 0x012e, 0x0804,\r
-+      0x338a, 0x012e, 0x0804, 0x33bc, 0x012e, 0x0804, 0x33bf, 0x080c,\r
-+      0x488f, 0x0904, 0x33bf, 0x080c, 0x6337, 0x0904, 0x33bc, 0x080c,\r
-+      0x98c8, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0x863b,\r
-+      0x0076, 0x903e, 0x080c, 0x852a, 0x900e, 0x080c, 0xcfc8, 0x007e,\r
-+      0x00ce, 0x080c, 0x98e4, 0x080c, 0x64a2, 0x0804, 0x338a, 0x080c,\r
-+      0x488f, 0x0904, 0x33bf, 0x080c, 0x64a2, 0x2208, 0x0804, 0x338a,\r
-+      0x0156, 0x00d6, 0x00e6, 0x00c6, 0x2069, 0x1906, 0x6810, 0x6914,\r
-+      0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x2071, 0x19b8,\r
-+      0x7028, 0x9065, 0x0118, 0x8210, 0x600c, 0x0cd8, 0x2300, 0x9218,\r
-+      0x00ce, 0x00ee, 0x00de, 0x015e, 0x0804, 0x338a, 0x00f6, 0x0016,\r
-+      0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178,\r
-+      0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1906, 0x6910, 0x62b8,\r
-+      0x0804, 0x338a, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x53a1, 0x0128, 0x2009, 0x0007,\r
-+      0x012e, 0x0804, 0x33bc, 0x012e, 0x6158, 0x9190, 0x318b, 0x2215,\r
-+      0x9294, 0x00ff, 0x6378, 0x83ff, 0x0108, 0x627c, 0x67d8, 0x97c4,\r
-+      0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4,\r
-+      0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4,\r
-+      0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, 0x0068, 0x080c,\r
-+      0x70b7, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120, 0x2009,\r
-+      0x0005, 0x0804, 0x33bc, 0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x338a,\r
-+      0x6148, 0x624c, 0x2019, 0x1957, 0x231c, 0x2001, 0x1958, 0x2004,\r
-+      0x789a, 0x0804, 0x338a, 0x0126, 0x2091, 0x8000, 0x6138, 0x623c,\r
-+      0x6340, 0x012e, 0x0804, 0x338a, 0x080c, 0x48ab, 0x0904, 0x33bf,\r
-+      0xba44, 0xbb38, 0x0804, 0x338a, 0x080c, 0x0d65, 0x080c, 0x48ab,\r
-+      0x2110, 0x0904, 0x33bf, 0xb804, 0x908c, 0x00ff, 0x918e, 0x0006,\r
-+      0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, 0x0009, 0x1904,\r
-+      0x33bc, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6, 0x9066,\r
-+      0x080c, 0x98c8, 0x080c, 0x94f4, 0x080c, 0x863b, 0x0076, 0x903e,\r
-+      0x080c, 0x852a, 0x900e, 0x080c, 0xcfc8, 0x007e, 0x00ce, 0x080c,\r
-+      0x98e4, 0xb807, 0x0407, 0x012e, 0x0804, 0x338a, 0x6148, 0x624c,\r
-+      0x7884, 0x604a, 0x7b88, 0x634e, 0x2069, 0x1853, 0x831f, 0x9305,\r
-+      0x6816, 0x788c, 0x2069, 0x1957, 0x2d1c, 0x206a, 0x7e98, 0x9682,\r
-+      0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1958, 0x2d04, 0x266a,\r
-+      0x789a, 0x0804, 0x338a, 0x0126, 0x2091, 0x8000, 0x6138, 0x7884,\r
-+      0x603a, 0x910e, 0xd1b4, 0x190c, 0x0eb4, 0xd0c4, 0x01a8, 0x00d6,\r
-+      0x78a8, 0x2009, 0x196e, 0x200a, 0x78ac, 0x2011, 0x196f, 0x2012,\r
-+      0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214, 0x6a5a,\r
-+      0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e, 0x2011, 0x0116,\r
-+      0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0040, 0x0010, 0x918c,\r
-+      0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e, 0xd1e4, 0x190c,\r
-+      0x0ecf, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114, 0x2012,\r
-+      0x012e, 0x0804, 0x338a, 0x00f6, 0x2079, 0x1800, 0x7a38, 0xa898,\r
-+      0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf, 0x8002, 0x9214,\r
-+      0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897, 0x4000, 0x900e,\r
-+      0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, 0x9005,\r
-+      0x01a8, 0x7888, 0x9025, 0x0904, 0x33bf, 0x788c, 0x902d, 0x0904,\r
-+      0x33bf, 0x900e, 0x080c, 0x6270, 0x1120, 0xba44, 0xbb38, 0xbc46,\r
-+      0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x48ab,\r
-+      0x0904, 0x33bf, 0x7888, 0x900d, 0x0904, 0x33bf, 0x788c, 0x9005,\r
-+      0x0904, 0x33bf, 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804, 0x338a,\r
-+      0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c, 0x53a1, 0x1904,\r
-+      0x33bc, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff, 0x1130,\r
-+      0x2001, 0x1817, 0x2004, 0x9085, 0xff00, 0x0088, 0x9182, 0x007f,\r
-+      0x16e0, 0x9188, 0x318b, 0x210d, 0x918c, 0x00ff, 0x2001, 0x1817,\r
-+      0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f, 0x9105, 0x0126,\r
-+      0x2091, 0x8000, 0x0006, 0x080c, 0x9b91, 0x000e, 0x0510, 0x602e,\r
-+      0x620a, 0x7984, 0x00b6, 0x080c, 0x6216, 0x2b08, 0x00be, 0x1500,\r
-+      0x6112, 0x6023, 0x0001, 0x080c, 0x4878, 0x01d0, 0x9006, 0xa866,\r
-+      0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x701f, 0x3863,\r
-+      0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0x9c85, 0x012e, 0x00ce,\r
-+      0x0005, 0x012e, 0x00ce, 0x0804, 0x33bc, 0x00ce, 0x0804, 0x33bf,\r
-+      0x080c, 0x9be7, 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904, 0x33bc,\r
-+      0x0804, 0x338a, 0x2061, 0x1a3f, 0x0126, 0x2091, 0x8000, 0x6000,\r
-+      0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800, 0x6350, 0x6070,\r
-+      0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804, 0x338a,\r
-+      0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x70b7,\r
-+      0x0904, 0x33bc, 0x0126, 0x2091, 0x8000, 0x6250, 0x6070, 0x9202,\r
-+      0x0248, 0x9085, 0x0001, 0x080c, 0x248d, 0x080c, 0x55bb, 0x012e,\r
-+      0x0804, 0x338a, 0x012e, 0x0804, 0x33bf, 0x0006, 0x0016, 0x00c6,\r
-+      0x00e6, 0x2001, 0x197a, 0x2070, 0x2061, 0x1853, 0x6008, 0x2072,\r
-+      0x900e, 0x2011, 0x1400, 0x080c, 0x8419, 0x7206, 0x00ee, 0x00ce,\r
-+      0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0128,\r
-+      0x012e, 0x2021, 0x400b, 0x0804, 0x338c, 0x7884, 0xd0fc, 0x0148,\r
-+      0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288, 0x012e, 0x0804,\r
-+      0x33bf, 0x2001, 0x002a, 0x2004, 0x2069, 0x1853, 0x6908, 0x9102,\r
-+      0x1230, 0x012e, 0x0804, 0x33bf, 0x012e, 0x0804, 0x33bc, 0x080c,\r
-+      0x9b66, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x392e, 0x00c6, 0x080c,\r
-+      0x4878, 0x00ce, 0x0d88, 0xa867, 0x0000, 0x7884, 0xa80a, 0x7898,\r
-+      0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004, 0xa81a, 0x2001,\r
-+      0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004, 0xa822, 0x2001,\r
-+      0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004, 0xa82a, 0x2001,\r
-+      0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004, 0x9080, 0x0003,\r
-+      0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3ab8, 0x0928, 0x7014,\r
-+      0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808, 0xd0b4,\r
-+      0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007,\r
-+      0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x48c1,\r
-+      0x701f, 0x39f5, 0x7023, 0x0001, 0x012e, 0x0005, 0x080c, 0x98c8,\r
-+      0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6,\r
-+      0x00f6, 0x080c, 0x389d, 0x2001, 0x1970, 0x2003, 0x0000, 0x2021,\r
-+      0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf,\r
-+      0x32e1, 0x60bf, 0x0012, 0x080c, 0x3b27, 0x080c, 0x3ae6, 0x00f6,\r
-+      0x00e6, 0x0086, 0x2940, 0x2071, 0x19b8, 0x2079, 0x0090, 0x00d6,\r
-+      0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004,\r
-+      0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001,\r
-+      0x080c, 0x3e98, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3dc5, 0x080c,\r
-+      0x3cf2, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8,\r
-+      0x080c, 0x3f0c, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c,\r
-+      0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084,\r
-+      0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084,\r
-+      0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037,\r
-+      0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x181f, 0x2004, 0x9106,\r
-+      0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce,\r
-+      0x0138, 0x080c, 0x3cfc, 0x080c, 0x3ae1, 0x0058, 0x080c, 0x3ae1,\r
-+      0x080c, 0x3e30, 0x080c, 0x3dbb, 0x2001, 0x020b, 0x2004, 0xd0e4,\r
-+      0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027,\r
-+      0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb,\r
-+      0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c,\r
-+      0x918c, 0xfffd, 0x2102, 0x080c, 0x12d6, 0x2009, 0x0028, 0x080c,\r
-+      0x2052, 0x2001, 0x0227, 0x200c, 0x2102, 0x080c, 0x98e4, 0x00fe,\r
-+      0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e,\r
-+      0x2001, 0x1970, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x338a,\r
-+      0x012e, 0x2021, 0x400c, 0x0804, 0x338c, 0x0016, 0x0026, 0x0036,\r
-+      0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014,\r
-+      0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904,\r
-+      0x3a51, 0x2048, 0x1f04, 0x3a05, 0x7068, 0x2040, 0xa28c, 0xa390,\r
-+      0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000,\r
-+      0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864, 0x009e, 0x9086,\r
-+      0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,\r
-+      0xffc0, 0x9080, 0x001b, 0x080c, 0x48c1, 0x701f, 0x39f5, 0x00b0,\r
-+      0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,\r
-+      0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c,\r
-+      0x0f9f, 0x000e, 0x080c, 0x48c4, 0x701f, 0x39f5, 0x015e, 0x00de,\r
-+      0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,\r
-+      0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118, 0x701f,\r
-+      0x3ab6, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009,\r
-+      0x007f, 0x080c, 0x6210, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff,\r
-+      0xb817, 0xfffd, 0x080c, 0xbd2a, 0x015e, 0x00de, 0x009e, 0x008e,\r
-+      0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x33bc,\r
-+      0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096,\r
-+      0x00d6, 0x0156, 0x701f, 0x3a88, 0x7007, 0x0003, 0x0804, 0x3a46,\r
-+      0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x338c, 0x0076,\r
-+      0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120,\r
-+      0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc,\r
-+      0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098,\r
-+      0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f9f, 0x000e, 0x080c, 0x48c4,\r
-+      0x007e, 0x701f, 0x39f5, 0x7023, 0x0001, 0x0005, 0x0804, 0x338a,\r
-+      0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e,\r
-+      0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4878,\r
-+      0x001e, 0x0130, 0xa800, 0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58,\r
-+      0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e, 0x0005, 0x0006,\r
-+      0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, 0x0044, 0x00fe, 0x000e,\r
-+      0x0005, 0x2001, 0x1970, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6,\r
-+      0x00c6, 0x2061, 0x0200, 0x2001, 0x197b, 0x2004, 0x601a, 0x2061,\r
-+      0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106,\r
-+      0x080c, 0x4878, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a,\r
-+      0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a,\r
-+      0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x197a, 0x2004, 0x6036,\r
-+      0x2009, 0x0040, 0x080c, 0x2052, 0x2001, 0x002a, 0x2004, 0x9084,\r
-+      0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000, 0x78ca,\r
-+      0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6,\r
-+      0x080c, 0x4878, 0x2940, 0xa013, 0x0019, 0xa017, 0x0001, 0x2800,\r
-+      0xa05a, 0x2001, 0x0030, 0x2004, 0xa866, 0x2001, 0x0031, 0x2004,\r
-+      0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0xa873,\r
-+      0x0000, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x0300, 0x2003,\r
-+      0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c,\r
-+      0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,\r
-+      0x81ff, 0x0148, 0x080c, 0x2811, 0x1130, 0x9006, 0x080c, 0x276e,\r
-+      0x9006, 0x080c, 0x2751, 0x7884, 0x9084, 0x0007, 0x0002, 0x3b72,\r
-+      0x3b7b, 0x3b84, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x012e,\r
-+      0x0804, 0x33bf, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a,\r
-+      0x080c, 0x3d46, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000,\r
-+      0x200a, 0x080c, 0x3d46, 0x0078, 0x080c, 0x70b7, 0x1128, 0x012e,\r
-+      0x2009, 0x0016, 0x0804, 0x33bc, 0x81ff, 0x0128, 0x012e, 0x2021,\r
-+      0x400b, 0x0804, 0x338c, 0x080c, 0x98c8, 0x0086, 0x0096, 0x00a6,\r
-+      0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x389d, 0x2009,\r
-+      0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060,\r
-+      0x2058, 0x080c, 0x3fe7, 0x080c, 0x3f37, 0x903e, 0x2720, 0x00f6,\r
-+      0x00e6, 0x0086, 0x2940, 0x2071, 0x19b8, 0x2079, 0x0090, 0x00d6,\r
-+      0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0,\r
-+      0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x3e98, 0x080c, 0x2819,\r
-+      0x080c, 0x2819, 0x080c, 0x2819, 0x080c, 0x2819, 0x080c, 0x3e98,\r
-+      0x008e, 0x00ee, 0x00fe, 0x080c, 0x3dc5, 0x2009, 0x9c40, 0x8109,\r
-+      0x11b0, 0x080c, 0x3cfc, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd,\r
-+      0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae,\r
-+      0x009e, 0x008e, 0x2009, 0x0017, 0x080c, 0x33bc, 0x0cf8, 0x2001,\r
-+      0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000,\r
-+      0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201, 0x200c, 0x81ff,\r
-+      0x0150, 0x080c, 0x3da3, 0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c,\r
-+      0x3cfc, 0x0804, 0x3ca5, 0x080c, 0x3f0c, 0x080c, 0x3e30, 0x080c,\r
-+      0x3d86, 0x080c, 0x3dbb, 0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac,\r
-+      0x0130, 0x8b58, 0x080c, 0x3cfc, 0x00fe, 0x0804, 0x3ca5, 0x00fe,\r
-+      0x080c, 0x3cf2, 0x1150, 0x8d68, 0x2001, 0x0032, 0x2602, 0x2001,\r
-+      0x0033, 0x2502, 0x080c, 0x3cfc, 0x0080, 0x87ff, 0x0138, 0x2001,\r
-+      0x0201, 0x2004, 0x9005, 0x1908, 0x8739, 0x0038, 0x2001, 0x1a3c,\r
-+      0x2004, 0x9086, 0x0000, 0x1904, 0x3bf5, 0x2001, 0x032f, 0x2003,\r
-+      0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0x9605, 0x0904, 0x3ca5,\r
-+      0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3ca5,\r
-+      0xa013, 0x0019, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac,\r
-+      0x1148, 0x2001, 0x1a3c, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003,\r
-+      0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, 0x9005, 0x0108, 0xa016,\r
-+      0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, 0x2052, 0x2900, 0xa85a,\r
-+      0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6,\r
-+      0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, 0x0008, 0x2001, 0x0203,\r
-+      0x2004, 0x1f04, 0x3c7c, 0x00ce, 0x0030, 0xa817, 0x0001, 0x78b0,\r
-+      0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061,\r
-+      0x0090, 0x7827, 0x0002, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,\r
-+      0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e,\r
-+      0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3baf, 0x001e, 0x00c6, 0x2001,\r
-+      0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x6106,\r
-+      0x2011, 0x020d, 0x2013, 0x0020, 0x2001, 0x0004, 0x200c, 0x918c,\r
-+      0xfffd, 0x2102, 0x080c, 0x12d6, 0x7884, 0x9084, 0x0003, 0x9086,\r
-+      0x0002, 0x01b0, 0x2009, 0x0028, 0x080c, 0x2052, 0x2001, 0x0227,\r
-+      0x200c, 0x2102, 0x6050, 0x9084, 0xb7ff, 0x080c, 0x28d4, 0x6052,\r
-+      0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043, 0x0010,\r
-+      0x080c, 0x98e4, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05,\r
-+      0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,\r
-+      0x008e, 0x1118, 0x012e, 0x0804, 0x338a, 0x012e, 0x2021, 0x400c,\r
-+      0x0804, 0x338c, 0x9085, 0x0001, 0x1d04, 0x3cfb, 0x2091, 0x6000,\r
-+      0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010,\r
-+      0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a3c, 0x2003, 0x0000,\r
-+      0x0071, 0x2009, 0x0048, 0x080c, 0x2052, 0x2001, 0x0227, 0x2024,\r
-+      0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6,\r
-+      0x00e6, 0x2071, 0x19b8, 0x7054, 0x9086, 0x0000, 0x0520, 0x2079,\r
-+      0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,\r
-+      0x1120, 0x2009, 0x0040, 0x080c, 0x2052, 0x782c, 0xd0fc, 0x0d88,\r
-+      0x080c, 0x3f0c, 0x7054, 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004,\r
-+      0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2052, 0x782b,\r
-+      0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079,\r
-+      0x0100, 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, 0x246d,\r
-+      0x080c, 0x2890, 0x080c, 0x28d4, 0x784b, 0xf7f7, 0x7843, 0x0090,\r
-+      0x7843, 0x0010, 0x7850, 0xc0e5, 0x7852, 0x2019, 0x61a8, 0x7820,\r
-+      0xd09c, 0x0110, 0x8319, 0x1dd8, 0x7850, 0xc0e4, 0x7852, 0x2011,\r
-+      0x0048, 0x080c, 0x286d, 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001,\r
-+      0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, 0x2833, 0x2011,\r
-+      0x0020, 0x080c, 0x286d, 0x7843, 0x0000, 0x9006, 0x080c, 0x2833,\r
-+      0x2011, 0x0048, 0x080c, 0x286d, 0x00fe, 0x0005, 0x7884, 0xd0ac,\r
-+      0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a3c, 0x2079, 0x0320, 0x2001,\r
-+      0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000, 0x1140,\r
-+      0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b, 0x0019,\r
-+      0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe,\r
-+      0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009, 0x0033,\r
-+      0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68, 0xd0a4,\r
-+      0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084,\r
-+      0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100,\r
-+      0x2001, 0x197b, 0x2004, 0x70e2, 0x080c, 0x3ad7, 0x1188, 0x2001,\r
-+      0x181f, 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, 0x706e,\r
-+      0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, 0x0080,\r
-+      0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c, 0x716e,\r
-+      0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073, 0x0809,\r
-+      0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080, 0x8000,\r
-+      0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e, 0x70d6,\r
-+      0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984, 0x9085,\r
-+      0x0092, 0x7016, 0x080c, 0x3f0c, 0x00f6, 0x2071, 0x1a3c, 0x2079,\r
-+      0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c,\r
-+      0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8, 0x8109, 0x1df0,\r
-+      0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, 0x0011, 0x080c,\r
-+      0x3e98, 0x2011, 0x0001, 0x080c, 0x3e98, 0x00fe, 0x00ee, 0x0005,\r
-+      0x00f6, 0x00e6, 0x2071, 0x1a3c, 0x2079, 0x0320, 0x792c, 0xd1fc,\r
-+      0x0904, 0x3e95, 0x782b, 0x0002, 0x9026, 0xd19c, 0x1904, 0x3e91,\r
-+      0x7000, 0x0002, 0x3e95, 0x3e46, 0x3e76, 0x3e91, 0xd1bc, 0x1170,\r
-+      0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001, 0x080c, 0x3e98,\r
-+      0x0904, 0x3e95, 0x080c, 0x3e98, 0x0804, 0x3e95, 0x00f6, 0x2079,\r
-+      0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, 0x782b, 0x0004,\r
-+      0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8, 0x080c,\r
-+      0x3da3, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, 0x78b8, 0x00fe,\r
-+      0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, 0x8001, 0x7002,\r
-+      0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, 0x3e3a, 0x2011,\r
-+      0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004, 0x9086, 0x0015,\r
-+      0x1120, 0xa000, 0xa05a, 0x2011, 0x0031, 0xa212, 0xd1dc, 0x1960,\r
-+      0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005,\r
-+      0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096, 0xa016, 0xa058,\r
-+      0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c, 0x831c, 0x938a,\r
-+      0x0007, 0x1a0c, 0x0d65, 0x9398, 0x3ec6, 0x231d, 0x083f, 0x9080,\r
-+      0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, 0x003e, 0x908a,\r
-+      0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804, 0xa05a, 0x2001,\r
-+      0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005, 0x3f03, 0x3efa,\r
-+      0x3ef1, 0x3ee8, 0x3edf, 0x3ed6, 0x3ecd, 0xa964, 0x7902, 0xa968,\r
-+      0x7906, 0xa96c, 0x7912, 0xa970, 0x7916, 0x0005, 0xa974, 0x7902,\r
-+      0xa978, 0x7906, 0xa97c, 0x7912, 0xa980, 0x7916, 0x0005, 0xa984,\r
-+      0x7902, 0xa988, 0x7906, 0xa98c, 0x7912, 0xa990, 0x7916, 0x0005,\r
-+      0xa994, 0x7902, 0xa998, 0x7906, 0xa99c, 0x7912, 0xa9a0, 0x7916,\r
-+      0x0005, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, 0x7912, 0xa9b0,\r
-+      0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, 0xa9bc, 0x7912,\r
-+      0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, 0x7906, 0xa9cc,\r
-+      0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, 0x0086, 0x2071,\r
-+      0x19b8, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, 0x782b, 0x0002,\r
-+      0x2940, 0x9026, 0x7054, 0x0002, 0x3f33, 0x3f1f, 0x3f2a, 0x8001,\r
-+      0x7056, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, 0x3e98, 0x190c,\r
-+      0x3e98, 0x0048, 0x8001, 0x7056, 0x782c, 0xd0fc, 0x1d38, 0x2011,\r
-+      0x0001, 0x080c, 0x3e98, 0x008e, 0x00ee, 0x00fe, 0x0005, 0x00f6,\r
-+      0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, 0x197b, 0x2004,\r
-+      0x601a, 0x2061, 0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, 0x6104,\r
-+      0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x0520, 0x2038,\r
-+      0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c, 0x4878,\r
-+      0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220,\r
-+      0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858,\r
-+      0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3faf, 0x1d68,\r
-+      0x2900, 0xa85a, 0x00d0, 0x080c, 0x4878, 0xa813, 0x0019, 0xa817,\r
-+      0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001,\r
-+      0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,\r
-+      0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061, 0x0090, 0x2079,\r
-+      0x0100, 0x2001, 0x197a, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c,\r
-+      0x2052, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006,\r
-+      0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x9006,\r
-+      0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6,\r
-+      0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1, 0x0000, 0x2099,\r
-+      0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006, 0x700a, 0x700e,\r
-+      0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b, 0x0041, 0x702c,\r
-+      0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040, 0x4005, 0x7400,\r
-+      0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940, 0x0086, 0x080c,\r
-+      0x4878, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900, 0xb006, 0xa05a,\r
-+      0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6,\r
-+      0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038, 0x2001, 0x0030,\r
-+      0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4878, 0x2940, 0xa813,\r
-+      0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138,\r
-+      0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, 0x2048,\r
-+      0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3faf, 0x1d68, 0x2900,\r
-+      0xa85a, 0x00d8, 0x080c, 0x4878, 0x2940, 0xa013, 0x0019, 0xa017,\r
-+      0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa066, 0x2001,\r
-+      0x0031, 0x2004, 0xa06a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,\r
-+      0xa06e, 0x2001, 0x002b, 0x2004, 0xa072, 0x2001, 0x032a, 0x2003,\r
-+      0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101, 0x200c, 0x918d,\r
-+      0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a3c, 0x2003, 0x0003,\r
-+      0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300, 0x2003, 0x0000,\r
-+      0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d,\r
-+      0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x20a9,\r
-+      0x0013, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, 0x2009,\r
-+      0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108, 0x0005,\r
-+      0x0804, 0x338a, 0x7d98, 0x7c9c, 0x0804, 0x3481, 0x080c, 0x70b7,\r
-+      0x190c, 0x5ca1, 0x2069, 0x1853, 0x2d00, 0x2009, 0x0030, 0x7a8c,\r
-+      0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x48c1, 0x701f,\r
-+      0x4082, 0x0005, 0x080c, 0x539c, 0x1130, 0x3b00, 0x3a08, 0xc194,\r
-+      0xc095, 0x20d8, 0x21d0, 0x2069, 0x1853, 0x6800, 0x9005, 0x0904,\r
-+      0x33bf, 0x6804, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138,\r
-+      0x6200, 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010, 0x918d,\r
-+      0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104,\r
-+      0x0118, 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106, 0x00ce,\r
-+      0xd084, 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x33bf, 0x9288,\r
-+      0x318b, 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, 0x6828,\r
-+      0x908a, 0x007f, 0x1a04, 0x33bf, 0x605a, 0x6888, 0x9084, 0x0030,\r
-+      0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x1982, 0x9080,\r
-+      0x2560, 0x2005, 0x200a, 0x2008, 0x2001, 0x0018, 0x080c, 0x98b9,\r
-+      0x2009, 0x0390, 0x200b, 0x0400, 0x000e, 0x2009, 0x1983, 0x9080,\r
-+      0x2564, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x33bf,\r
-+      0x908a, 0x0841, 0x1a04, 0x33bf, 0x9084, 0x0007, 0x1904, 0x33bf,\r
-+      0x680c, 0x9005, 0x0904, 0x33bf, 0x6810, 0x9005, 0x0904, 0x33bf,\r
-+      0x6848, 0x6940, 0x910a, 0x1a04, 0x33bf, 0x8001, 0x0904, 0x33bf,\r
-+      0x684c, 0x6944, 0x910a, 0x1a04, 0x33bf, 0x8001, 0x0904, 0x33bf,\r
-+      0x6814, 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, 0x604e,\r
-+      0x080c, 0x73e8, 0x080c, 0x6734, 0x080c, 0x6769, 0x6808, 0x602a,\r
-+      0x080c, 0x1fc4, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, 0xa001,\r
-+      0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x24c7, 0x003e, 0x6000,\r
-+      0x9086, 0x0000, 0x1904, 0x41ee, 0x6818, 0x691c, 0x6a20, 0x6b24,\r
-+      0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, 0x6322,\r
-+      0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007,\r
-+      0x810f, 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006, 0x610a,\r
-+      0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004,\r
-+      0x20a1, 0x1984, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1,\r
-+      0x199e, 0x20e9, 0x0001, 0x4001, 0x080c, 0x82d0, 0x00c6, 0x900e,\r
-+      0x20a9, 0x0001, 0x6b70, 0xd384, 0x01c8, 0x0020, 0x839d, 0x12b0,\r
-+      0x3508, 0x8109, 0x080c, 0x79be, 0x6878, 0x6016, 0x6874, 0x2008,\r
-+      0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108,\r
-+      0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x4166,\r
-+      0x00ce, 0x00c6, 0x2061, 0x196d, 0x2063, 0x0001, 0x9006, 0x080c,\r
-+      0x276e, 0x9006, 0x080c, 0x2751, 0x0000, 0x00ce, 0x00e6, 0x2c70,\r
-+      0x080c, 0x0e9c, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114,\r
-+      0x2204, 0x9085, 0x0180, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086,\r
-+      0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001,\r
-+      0x194d, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e,\r
-+      0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c,\r
-+      0x253c, 0x2001, 0x193e, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061,\r
-+      0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x70b7,\r
-+      0x0128, 0x080c, 0x4c91, 0x0110, 0x080c, 0x248d, 0x60d0, 0x9005,\r
-+      0x01c0, 0x6003, 0x0001, 0x2009, 0x41d6, 0x00d0, 0x080c, 0x70b7,\r
-+      0x1168, 0x2011, 0x6f2d, 0x080c, 0x8159, 0x2011, 0x6f20, 0x080c,\r
-+      0x825f, 0x080c, 0x73bc, 0x080c, 0x6fe8, 0x0040, 0x080c, 0x5b97,\r
-+      0x0028, 0x6003, 0x0004, 0x2009, 0x41ee, 0x0010, 0x0804, 0x338a,\r
-+      0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118,\r
-+      0x2091, 0x31bd, 0x0817, 0x2091, 0x313d, 0x0817, 0x6000, 0x9086,\r
-+      0x0000, 0x0904, 0x33bc, 0x2069, 0x1853, 0x7890, 0x6842, 0x7894,\r
-+      0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,\r
-+      0x2039, 0x0001, 0x0804, 0x48c4, 0x9006, 0x080c, 0x248d, 0x81ff,\r
-+      0x1904, 0x33bc, 0x080c, 0x70b7, 0x11b0, 0x080c, 0x73b7, 0x080c,\r
-+      0x5cdc, 0x080c, 0x3186, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c,\r
-+      0xbf61, 0x0130, 0x080c, 0x70da, 0x1118, 0x080c, 0x708b, 0x0038,\r
-+      0x080c, 0x6fe8, 0x0020, 0x080c, 0x5ca1, 0x080c, 0x5b97, 0x0804,\r
-+      0x338a, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x70b7, 0x1110, 0x0804,\r
-+      0x33bc, 0x6190, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, 0x1d80,\r
-+      0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091,\r
-+      0x8000, 0x2039, 0x0001, 0x080c, 0x48c4, 0x701f, 0x3388, 0x012e,\r
-+      0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1d80, 0x20a9, 0x0040,\r
-+      0x20e9, 0x0001, 0x20a1, 0x1d80, 0x2019, 0xffff, 0x4304, 0x6558,\r
-+      0x9588, 0x318b, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011,\r
-+      0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x6270, 0x1190, 0xb814,\r
-+      0x821c, 0x0238, 0x9398, 0x1d80, 0x9085, 0xff00, 0x8007, 0x201a,\r
-+      0x0038, 0x9398, 0x1d80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a,\r
-+      0x8210, 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007,\r
-+      0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1d80,\r
-+      0x2099, 0x1d80, 0x080c, 0x5c2c, 0x0804, 0x4246, 0x080c, 0x48ab,\r
-+      0x0904, 0x33bf, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804,\r
-+      0x33bc, 0x080c, 0x538d, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e,\r
-+      0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c,\r
-+      0x3181, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff,\r
-+      0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,\r
-+      0x080c, 0xba16, 0x1120, 0x2009, 0x0003, 0x0804, 0x33bc, 0x7007,\r
-+      0x0003, 0x701f, 0x42d4, 0x0005, 0x080c, 0x48ab, 0x0904, 0x33bf,\r
-+      0x20a9, 0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8,\r
-+      0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080,\r
-+      0x0006, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098,\r
-+      0x080c, 0x0f9f, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a,\r
-+      0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c,\r
-+      0x0f9f, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,\r
-+      0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,\r
-+      0x0804, 0x48c4, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x488f, 0x0904,\r
-+      0x33bf, 0x080c, 0x64b1, 0x0904, 0x33bc, 0x0058, 0xa878, 0x9005,\r
-+      0x0120, 0x2009, 0x0004, 0x0804, 0x33bc, 0xa974, 0xaa94, 0x0804,\r
-+      0x338a, 0x080c, 0x5395, 0x0904, 0x338a, 0x701f, 0x431e, 0x7007,\r
-+      0x0003, 0x0005, 0x81ff, 0x1904, 0x33bc, 0x7888, 0x908a, 0x1000,\r
-+      0x1a04, 0x33bf, 0x080c, 0x48ab, 0x0904, 0x33bf, 0x080c, 0x6667,\r
-+      0x0120, 0x080c, 0x666f, 0x1904, 0x33bf, 0x080c, 0x6536, 0x0904,\r
-+      0x33bc, 0x2019, 0x0004, 0x900e, 0x080c, 0x64c3, 0x0904, 0x33bc,\r
-+      0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, 0x12f8,\r
-+      0x080c, 0x48a9, 0x01e0, 0x080c, 0x6667, 0x0118, 0x080c, 0x666f,\r
-+      0x11b0, 0x080c, 0x6536, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002,\r
-+      0x2019, 0x0004, 0x080c, 0x64c3, 0x2009, 0x0003, 0x0120, 0xa998,\r
-+      0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,\r
-+      0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897,\r
-+      0x4000, 0x080c, 0x5395, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,\r
-+      0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071,\r
-+      0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400, 0x9506,\r
-+      0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x6270,\r
-+      0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8167,\r
-+      0x0005, 0x81ff, 0x1904, 0x33bc, 0x798c, 0x2001, 0x1951, 0x918c,\r
-+      0x8000, 0x2102, 0x080c, 0x488f, 0x0904, 0x33bf, 0x080c, 0x6667,\r
-+      0x0120, 0x080c, 0x666f, 0x1904, 0x33bf, 0x080c, 0x6337, 0x0904,\r
-+      0x33bc, 0x080c, 0x64ba, 0x0904, 0x33bc, 0x2001, 0x1951, 0x2004,\r
-+      0xd0fc, 0x1904, 0x338a, 0x0804, 0x4329, 0xa9a0, 0x2001, 0x1951,\r
-+      0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x489c, 0x01a0, 0x080c,\r
-+      0x6667, 0x0118, 0x080c, 0x666f, 0x1170, 0x080c, 0x6337, 0x2009,\r
-+      0x0002, 0x0128, 0x080c, 0x64ba, 0x1170, 0x2009, 0x0003, 0xa897,\r
-+      0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,\r
-+      0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1951, 0x2004,\r
-+      0xd0fc, 0x1128, 0x080c, 0x5395, 0x0110, 0x9006, 0x0018, 0x900e,\r
-+      0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x33bc,\r
-+      0x798c, 0x2001, 0x1950, 0x918c, 0x8000, 0x2102, 0x080c, 0x488f,\r
-+      0x0904, 0x33bf, 0x080c, 0x6667, 0x0120, 0x080c, 0x666f, 0x1904,\r
-+      0x33bf, 0x080c, 0x6337, 0x0904, 0x33bc, 0x080c, 0x64a8, 0x0904,\r
-+      0x33bc, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1904, 0x338a, 0x0804,\r
-+      0x4329, 0xa9a0, 0x2001, 0x1950, 0x918c, 0x8000, 0xc18d, 0x2102,\r
-+      0x080c, 0x489c, 0x01a0, 0x080c, 0x6667, 0x0118, 0x080c, 0x666f,\r
-+      0x1170, 0x080c, 0x6337, 0x2009, 0x0002, 0x0128, 0x080c, 0x64a8,\r
-+      0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,\r
-+      0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897,\r
-+      0x4000, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x5395,\r
-+      0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,\r
-+      0x0005, 0x6100, 0x0804, 0x338a, 0x080c, 0x48ab, 0x0904, 0x33bf,\r
-+      0x080c, 0x53a1, 0x1904, 0x33bc, 0x79a8, 0xd184, 0x1158, 0xb834,\r
-+      0x8007, 0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f, 0xba28,\r
-+      0x8217, 0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007, 0x789a,\r
-+      0xbb1c, 0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0200, 0x0804,\r
-+      0x338a, 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1140, 0x939a, 0x0003,\r
-+      0x1a04, 0x33bc, 0x6258, 0x7884, 0x9206, 0x1560, 0x2031, 0x1848,\r
-+      0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c, 0x7a8c,\r
-+      0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006, 0x78a8, 0x9084,\r
-+      0x0080, 0x1118, 0x000e, 0x0804, 0x48c4, 0x000e, 0x2031, 0x0000,\r
-+      0x2061, 0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e,\r
-+      0xa392, 0xa496, 0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f,\r
-+      0x44e2, 0x0005, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x48ab, 0x0904,\r
-+      0x33bf, 0x080c, 0x6667, 0x1904, 0x33bc, 0x00c6, 0x080c, 0x4878,\r
-+      0x00ce, 0x0904, 0x33bc, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,\r
-+      0x7ea8, 0x080c, 0xb9bc, 0x0904, 0x33bc, 0x7007, 0x0003, 0x701f,\r
-+      0x44e6, 0x0005, 0x080c, 0x4054, 0x0804, 0x338a, 0xa830, 0x9086,\r
-+      0x0100, 0x0904, 0x33bc, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f,\r
-+      0x9084, 0xffc0, 0x9080, 0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88,\r
-+      0x7c9c, 0x7d98, 0x0804, 0x48c4, 0x9006, 0x080c, 0x248d, 0x78a8,\r
-+      0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x33bc,\r
-+      0x080c, 0x70b7, 0x0110, 0x080c, 0x5ca1, 0x7888, 0x908a, 0x1000,\r
-+      0x1a04, 0x33bf, 0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f,\r
-+      0x1a04, 0x33bf, 0x2100, 0x080c, 0x2457, 0x0026, 0x00c6, 0x0126,\r
-+      0x2091, 0x8000, 0x2061, 0x19d4, 0x601b, 0x0000, 0x601f, 0x0000,\r
-+      0x6073, 0x0000, 0x6077, 0x0000, 0x080c, 0x70b7, 0x1158, 0x080c,\r
-+      0x73b7, 0x080c, 0x5cdc, 0x9085, 0x0001, 0x080c, 0x70fe, 0x080c,\r
-+      0x6fe8, 0x00f0, 0x080c, 0x98c8, 0x080c, 0x9b6d, 0x080c, 0x98e4,\r
-+      0x2061, 0x0100, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x810f,\r
-+      0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x196a,\r
-+      0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bc7, 0x080c, 0x821d,\r
-+      0x7984, 0x080c, 0x70b7, 0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c,\r
-+      0x438c, 0x012e, 0x00ce, 0x002e, 0x0804, 0x338a, 0x7984, 0x080c,\r
-+      0x6210, 0x2b08, 0x1904, 0x33bf, 0x0804, 0x338a, 0x81ff, 0x0120,\r
-+      0x2009, 0x0001, 0x0804, 0x33bc, 0x60d8, 0xd0ac, 0x1130, 0xd09c,\r
-+      0x1120, 0x2009, 0x0005, 0x0804, 0x33bc, 0x080c, 0x4878, 0x1120,\r
-+      0x2009, 0x0002, 0x0804, 0x33bc, 0x7984, 0x9192, 0x0021, 0x1a04,\r
-+      0x33bf, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019,\r
-+      0x702a, 0xaf60, 0x7736, 0x080c, 0x48c1, 0x701f, 0x459e, 0x7880,\r
-+      0x9086, 0x006e, 0x0110, 0x701f, 0x4e43, 0x0005, 0x2009, 0x0080,\r
-+      0x080c, 0x6270, 0x1118, 0x080c, 0x6667, 0x0120, 0x2021, 0x400a,\r
-+      0x0804, 0x338c, 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70, 0xac74,\r
-+      0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, 0x4637, 0x90be,\r
-+      0x0112, 0x0904, 0x4637, 0x90be, 0x0113, 0x0904, 0x4637, 0x90be,\r
-+      0x0114, 0x0904, 0x4637, 0x90be, 0x0117, 0x0904, 0x4637, 0x90be,\r
-+      0x011a, 0x0904, 0x4637, 0x90be, 0x011c, 0x0904, 0x4637, 0x90be,\r
-+      0x0121, 0x0904, 0x461e, 0x90be, 0x0131, 0x0904, 0x461e, 0x90be,\r
-+      0x0171, 0x0904, 0x4637, 0x90be, 0x0173, 0x0904, 0x4637, 0x90be,\r
-+      0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, 0x4642, 0x90be,\r
-+      0x0212, 0x0904, 0x462b, 0x90be, 0x0213, 0x05e8, 0x90be, 0x0214,\r
-+      0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a, 0x1120, 0xa89c,\r
-+      0x8007, 0xa89e, 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be, 0x0300,\r
-+      0x05b0, 0x009e, 0x00de, 0x0804, 0x33bf, 0x7028, 0x9080, 0x0010,\r
-+      0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, 0x080c,\r
-+      0x4680, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0,\r
-+      0x20e8, 0x20a9, 0x0001, 0x080c, 0x4680, 0x00c8, 0x7028, 0x9080,\r
-+      0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001,\r
-+      0x080c, 0x468d, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0,\r
-+      0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x468d, 0x7028,\r
-+      0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,\r
-+      0x0001, 0x04f1, 0x00c6, 0x080c, 0x4878, 0x0550, 0xa868, 0xc0fd,\r
-+      0xa86a, 0xa867, 0x0119, 0x9006, 0xa882, 0xa87f, 0x0020, 0xa88b,\r
-+      0x0001, 0x810b, 0xa9ae, 0xa8b2, 0xaab6, 0xabba, 0xacbe, 0xadc2,\r
-+      0xa9c6, 0xa8ca, 0x00ce, 0x009e, 0x00de, 0xa866, 0xa822, 0xa868,\r
-+      0xc0fd, 0xa86a, 0xa804, 0x2048, 0x080c, 0xb9d7, 0x1120, 0x2009,\r
-+      0x0003, 0x0804, 0x33bc, 0x7007, 0x0003, 0x701f, 0x4677, 0x0005,\r
-+      0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x33bc, 0xa820,\r
-+      0x9086, 0x8001, 0x1904, 0x338a, 0x2009, 0x0004, 0x0804, 0x33bc,\r
-+      0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104, 0x4004,\r
-+      0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0036,\r
-+      0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204, 0x4104,\r
-+      0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005,\r
-+      0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc, 0x60d8, 0xd0ac,\r
-+      0x1160, 0xd09c, 0x0120, 0x2009, 0x0016, 0x0804, 0x33bc, 0xd09c,\r
-+      0x1120, 0x2009, 0x0005, 0x0804, 0x33bc, 0x7984, 0x78a8, 0x2040,\r
-+      0x080c, 0x9b66, 0x1120, 0x9182, 0x007f, 0x0a04, 0x33bf, 0x9186,\r
-+      0x00ff, 0x0904, 0x33bf, 0x9182, 0x0800, 0x1a04, 0x33bf, 0x7a8c,\r
-+      0x7b88, 0x6078, 0x9306, 0x1140, 0x607c, 0x924e, 0x0904, 0x33bf,\r
-+      0x99cc, 0xff00, 0x0904, 0x33bf, 0x0126, 0x2091, 0x8000, 0x0026,\r
-+      0x2011, 0x8008, 0x080c, 0x668b, 0x002e, 0x0140, 0x918d, 0x8000,\r
-+      0x080c, 0x66d5, 0x1118, 0x2001, 0x4009, 0x0458, 0x080c, 0x4792,\r
-+      0x0560, 0x90c6, 0x4000, 0x1170, 0x00c6, 0x0006, 0x900e, 0x080c,\r
-+      0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x000e,\r
-+      0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, 0x90c6,\r
-+      0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, 0x1108,\r
-+      0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009,\r
-+      0x000a, 0x2020, 0x012e, 0x0804, 0x338c, 0x2b00, 0x7026, 0x0016,\r
-+      0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9c58, 0x0904, 0x475f,\r
-+      0x2b00, 0x6012, 0x080c, 0xbcdb, 0x2e58, 0x00ee, 0x00e6, 0x00c6,\r
-+      0x080c, 0x4878, 0x00ce, 0x2b70, 0x1158, 0x080c, 0x9be7, 0x00ee,\r
-+      0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, 0x0804, 0x33bc,\r
-+      0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932, 0xa868, 0xc0fd,\r
-+      0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x080c, 0x3006, 0x6023, 0x0001,\r
-+      0x9006, 0x080c, 0x61ad, 0x2001, 0x0002, 0x080c, 0x61c1, 0x2009,\r
-+      0x0002, 0x080c, 0x9c85, 0x78a8, 0xd094, 0x0138, 0x00ee, 0x7024,\r
-+      0x00e6, 0x2058, 0xb8c4, 0xc08d, 0xb8c6, 0x9085, 0x0001, 0x00ee,\r
-+      0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003, 0x0804,\r
-+      0x33bc, 0x7007, 0x0003, 0x701f, 0x476e, 0x0005, 0xa830, 0x2008,\r
-+      0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x338c, 0x9086,\r
-+      0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294,\r
-+      0x00ff, 0x0804, 0x52ea, 0x900e, 0xa868, 0xd0f4, 0x1904, 0x338a,\r
-+      0x080c, 0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,\r
-+      0x0804, 0x338a, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904, 0x47da,\r
-+      0x902e, 0x080c, 0x9b66, 0x0130, 0x9026, 0x20a9, 0x0800, 0x2071,\r
-+      0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071, 0x107f,\r
-+      0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, 0x2428, 0x94ce,\r
-+      0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, 0x94ce, 0x0080,\r
-+      0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, 0x11d8, 0xc5fd,\r
-+      0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, 0xbe14, 0x2600,\r
-+      0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, 0x0568, 0xd894,\r
-+      0x1558, 0x080c, 0x6667, 0x1540, 0x2001, 0x4000, 0x0430, 0x2001,\r
-+      0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106, 0x1158,\r
-+      0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, 0x9b66, 0x1930,\r
-+      0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x47a8, 0x85ff,\r
-+      0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030, 0x080c,\r
-+      0x6210, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e, 0x00de,\r
-+      0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc,\r
-+      0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, 0xa867,\r
-+      0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904, 0x33bf,\r
-+      0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x33bf, 0x2010,\r
-+      0x2918, 0x080c, 0x2fa0, 0x1120, 0x2009, 0x0003, 0x0804, 0x33bc,\r
-+      0x7007, 0x0003, 0x701f, 0x482d, 0x0005, 0xa830, 0x9086, 0x0100,\r
-+      0x1904, 0x338a, 0x2009, 0x0004, 0x0804, 0x33bc, 0x7984, 0x080c,\r
-+      0x9b66, 0x1120, 0x9182, 0x007f, 0x0a04, 0x33bf, 0x9186, 0x00ff,\r
-+      0x0904, 0x33bf, 0x9182, 0x0800, 0x1a04, 0x33bf, 0x2001, 0x9000,\r
-+      0x080c, 0x5345, 0x1904, 0x33bc, 0x0804, 0x338a, 0xa998, 0x080c,\r
-+      0x9b66, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff, 0x0168,\r
-+      0x9182, 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x5345, 0x11a8,\r
-+      0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e,\r
-+      0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x900e,\r
-+      0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a, 0x0c48,\r
-+      0x080c, 0x1022, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005, 0x1120,\r
-+      0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086, 0x2040,\r
-+      0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005, 0x7984,\r
-+      0x080c, 0x6270, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082, 0x4000,\r
-+      0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x6270, 0x1130,\r
-+      0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff,\r
-+      0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x6270, 0x1108,\r
-+      0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff, 0x0128,\r
-+      0x2148, 0xa904, 0x080c, 0x1054, 0x0cc8, 0x7116, 0x711a, 0x001e,\r
-+      0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0x18ae,\r
-+      0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496,\r
-+      0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f, 0x338a, 0x0005,\r
-+      0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x18a6,\r
-+      0x2004, 0x9005, 0x1190, 0x0e04, 0x48f5, 0x7a36, 0x7833, 0x0012,\r
-+      0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,\r
-+      0xd084, 0x190c, 0x11be, 0x0804, 0x495b, 0x0016, 0x0086, 0x0096,\r
-+      0x00c6, 0x00e6, 0x2071, 0x1894, 0x7044, 0x9005, 0x1540, 0x7148,\r
-+      0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x1022, 0x0904,\r
-+      0x4953, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002, 0x9080,\r
-+      0x1cf7, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004, 0x2001,\r
-+      0x18b0, 0x9c82, 0x18f0, 0x0210, 0x2061, 0x18b0, 0x2c00, 0x703a,\r
-+      0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460, 0x7148,\r
-+      0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016, 0x908a,\r
-+      0x0036, 0x1a0c, 0x0d65, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005,\r
-+      0xa146, 0x1520, 0x080c, 0x1022, 0x1130, 0x8109, 0xa946, 0x7148,\r
-+      0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046, 0x2800,\r
-+      0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080, 0x1cf7,\r
-+      0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce,\r
-+      0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082,\r
-+      0x001b, 0x0002, 0x497d, 0x497d, 0x497f, 0x497d, 0x497d, 0x497d,\r
-+      0x4983, 0x497d, 0x497d, 0x497d, 0x4987, 0x497d, 0x497d, 0x497d,\r
-+      0x498b, 0x497d, 0x497d, 0x497d, 0x498f, 0x497d, 0x497d, 0x497d,\r
-+      0x4993, 0x497d, 0x497d, 0x497d, 0x4998, 0x080c, 0x0d65, 0xa276,\r
-+      0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878, 0xa296,\r
-+      0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838, 0xa2b6,\r
-+      0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804, 0x4956,\r
-+      0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x4956, 0x00e6, 0x2071, 0x1894,\r
-+      0x7048, 0x9005, 0x0904, 0x4a2f, 0x0126, 0x2091, 0x8000, 0x0e04,\r
-+      0x4a2e, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086, 0x0076,\r
-+      0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948, 0x2105,\r
-+      0x0016, 0x908a, 0x0036, 0x1a0c, 0x0d65, 0x2060, 0x001e, 0x8108,\r
-+      0x2105, 0x9005, 0xa94a, 0x1904, 0x4a31, 0xa804, 0x9005, 0x090c,\r
-+      0x0d65, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001, 0x0002,\r
-+      0x9080, 0x1cf7, 0x2005, 0xa04a, 0x0804, 0x4a31, 0x703c, 0x2060,\r
-+      0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833, 0x0012,\r
-+      0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080, 0x2001,\r
-+      0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x87ff, 0x0118, 0x2748,\r
-+      0x080c, 0x1054, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170, 0x7040,\r
-+      0x2048, 0x9005, 0x0128, 0x080c, 0x1054, 0x9006, 0x7042, 0x7046,\r
-+      0x703b, 0x18b0, 0x703f, 0x18b0, 0x0420, 0x7040, 0x9005, 0x1508,\r
-+      0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa, 0x18f0,\r
-+      0x0210, 0x2001, 0x18b0, 0x703e, 0x00a0, 0x9006, 0x703e, 0x703a,\r
-+      0x7044, 0x9005, 0x090c, 0x0d65, 0x2048, 0xa800, 0x9005, 0x1de0,\r
-+      0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1cf7, 0x2005, 0xa84a,\r
-+      0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee,\r
-+      0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4a50, 0x4a50, 0x4a52,\r
-+      0x4a50, 0x4a50, 0x4a50, 0x4a57, 0x4a50, 0x4a50, 0x4a50, 0x4a5c,\r
-+      0x4a50, 0x4a50, 0x4a50, 0x4a61, 0x4a50, 0x4a50, 0x4a50, 0x4a66,\r
-+      0x4a50, 0x4a50, 0x4a50, 0x4a6b, 0x4a50, 0x4a50, 0x4a50, 0x4a70,\r
-+      0x080c, 0x0d65, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x49dc, 0xaa84,\r
-+      0xab88, 0xac8c, 0x0804, 0x49dc, 0xaa94, 0xab98, 0xac9c, 0x0804,\r
-+      0x49dc, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x49dc, 0xaab4, 0xabb8,\r
-+      0xacbc, 0x0804, 0x49dc, 0xaac4, 0xabc8, 0xaccc, 0x0804, 0x49dc,\r
-+      0xaad4, 0xabd8, 0xacdc, 0x0804, 0x49dc, 0x0026, 0x080c, 0x538d,\r
-+      0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x48d8, 0x002e, 0x0005,\r
-+      0x81ff, 0x1904, 0x33bc, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d,\r
-+      0xc085, 0xc0ac, 0x6032, 0x080c, 0x70b7, 0x1158, 0x080c, 0x73b7,\r
-+      0x080c, 0x5cdc, 0x9085, 0x0001, 0x080c, 0x70fe, 0x080c, 0x6fe8,\r
-+      0x0010, 0x080c, 0x5b97, 0x012e, 0x0804, 0x338a, 0x81ff, 0x0120,\r
-+      0x2009, 0x0001, 0x0804, 0x33bc, 0x080c, 0x53a1, 0x0120, 0x2009,\r
-+      0x0007, 0x0804, 0x33bc, 0x080c, 0x665f, 0x0120, 0x2009, 0x0008,\r
-+      0x0804, 0x33bc, 0x0026, 0x2011, 0x0010, 0x080c, 0x668b, 0x002e,\r
-+      0x0140, 0x7984, 0x080c, 0x66d5, 0x1120, 0x2009, 0x4009, 0x0804,\r
-+      0x33bc, 0x080c, 0x3181, 0x0128, 0x7984, 0x080c, 0x6210, 0x1904,\r
-+      0x33bf, 0x080c, 0x48ab, 0x0904, 0x33bf, 0x2b00, 0x7026, 0x080c,\r
-+      0x6667, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, 0x080c,\r
-+      0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804,\r
-+      0x338a, 0x080c, 0x4878, 0x0904, 0x33bc, 0x9006, 0xa866, 0xa832,\r
-+      0xa868, 0xc0fd, 0xa86a, 0x080c, 0xba79, 0x0904, 0x33bc, 0x7888,\r
-+      0xd094, 0x0118, 0xb8c4, 0xc08d, 0xb8c6, 0x7007, 0x0003, 0x701f,\r
-+      0x4b46, 0x0005, 0x2061, 0x1800, 0x080c, 0x53a1, 0x2009, 0x0007,\r
-+      0x1578, 0x080c, 0x665f, 0x0118, 0x2009, 0x0008, 0x0448, 0x080c,\r
-+      0x3181, 0x0120, 0xa998, 0x080c, 0x6210, 0x1530, 0x080c, 0x48a9,\r
-+      0x0518, 0x080c, 0x6667, 0xa89c, 0x1168, 0x9084, 0x0005, 0x1150,\r
-+      0x900e, 0x080c, 0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,\r
-+      0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xba79, 0x11e0,\r
-+      0xa89c, 0xd094, 0x0118, 0xb8c4, 0xc08d, 0xb8c6, 0x2009, 0x0003,\r
-+      0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,\r
-+      0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0xa99a, 0x9006,\r
-+      0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0xa830, 0x2008,\r
-+      0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x338c, 0x9086,\r
-+      0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x52ea, 0x900e, 0x080c,\r
-+      0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804,\r
-+      0x338a, 0x080c, 0x53a1, 0x0120, 0x2009, 0x0007, 0x0804, 0x33bc,\r
-+      0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4878, 0x1120,\r
-+      0x2009, 0x0002, 0x0804, 0x33bc, 0x900e, 0x2130, 0x7126, 0x7132,\r
-+      0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0,\r
-+      0x080c, 0x6270, 0x1904, 0x4be4, 0x080c, 0x6667, 0x0120, 0x080c,\r
-+      0x666f, 0x1904, 0x4be4, 0x080c, 0x665f, 0x1130, 0x080c, 0x655f,\r
-+      0x1118, 0xd79c, 0x0904, 0x4be4, 0xd794, 0x1110, 0xd784, 0x01a8,\r
-+      0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x3400, 0xd794,\r
-+      0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0,\r
-+      0x20a9, 0x0002, 0x080c, 0x468d, 0x0048, 0x20a9, 0x0004, 0x4003,\r
-+      0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x468d, 0x4104, 0xd794,\r
-+      0x0528, 0xb8b4, 0x20e0, 0xb8b8, 0x2060, 0x9c80, 0x0000, 0x2098,\r
-+      0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9, 0x0001,\r
-+      0x4005, 0x9c80, 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002, 0x4003,\r
-+      0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4680, 0x9c80, 0x0026,\r
-+      0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110,\r
-+      0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, 0x9b66, 0x0118,\r
-+      0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170,\r
-+      0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020,\r
-+      0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x4b80, 0x86ff, 0x1120,\r
-+      0x7124, 0x810b, 0x0804, 0x338a, 0x7033, 0x0001, 0x7122, 0x7024,\r
-+      0x9600, 0x7026, 0x772e, 0x2061, 0x18ae, 0x2c44, 0xa06b, 0x0000,\r
-+      0xa67a, 0x7034, 0xa072, 0x7028, 0xa076, 0xa28e, 0xa392, 0xa496,\r
-+      0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f, 0x4c20, 0x0005,\r
-+      0x7030, 0x9005, 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036,\r
-+      0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa28c, 0xa390, 0xa494,\r
-+      0xa598, 0x0804, 0x4b80, 0x7124, 0x810b, 0x0804, 0x338a, 0x2029,\r
-+      0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007,\r
-+      0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf, 0x9184,\r
-+      0x00ff, 0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf,\r
-+      0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502,\r
-+      0x0a04, 0x33bf, 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x33bf,\r
-+      0x9502, 0x0a04, 0x33bf, 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020,\r
-+      0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf, 0x9384, 0x00ff, 0x90e2,\r
-+      0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf, 0x9484, 0xff00,\r
-+      0x8007, 0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf,\r
-+      0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04,\r
-+      0x33bf, 0x2061, 0x195a, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804,\r
-+      0x338a, 0x0006, 0x080c, 0x538d, 0xd0cc, 0x000e, 0x0005, 0x0006,\r
-+      0x080c, 0x5391, 0xd0bc, 0x000e, 0x0005, 0x6170, 0x7a84, 0x6300,\r
-+      0x82ff, 0x1118, 0x7986, 0x0804, 0x338a, 0x83ff, 0x1904, 0x33bf,\r
-+      0x2001, 0xfff0, 0x9200, 0x1a04, 0x33bf, 0x2019, 0xffff, 0x6074,\r
-+      0x9302, 0x9200, 0x0a04, 0x33bf, 0x7986, 0x6272, 0x0804, 0x338a,\r
-+      0x080c, 0x53a1, 0x1904, 0x33bc, 0x7c88, 0x7d84, 0x7e98, 0x7f8c,\r
-+      0x080c, 0x4878, 0x0904, 0x33bc, 0x900e, 0x901e, 0x7326, 0x7332,\r
-+      0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0,\r
-+      0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6667, 0x0118,\r
-+      0x080c, 0x666f, 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810,\r
-+      0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120,\r
-+      0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e,\r
-+      0x2001, 0x0003, 0x080c, 0x8419, 0x2208, 0x0804, 0x338a, 0x7033,\r
-+      0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061, 0x18ae, 0x2c44,\r
-+      0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034, 0xa072, 0xa48e,\r
-+      0xa592, 0xa696, 0xa79a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f,\r
-+      0x4d12, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120, 0x7028, 0x20a0,\r
-+      0x901e, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa48c, 0xa590,\r
-+      0xa694, 0xa798, 0x0804, 0x4cd0, 0x7224, 0x900e, 0x2001, 0x0003,\r
-+      0x080c, 0x8419, 0x2208, 0x0804, 0x338a, 0x00f6, 0x00e6, 0x080c,\r
-+      0x53a1, 0x2009, 0x0007, 0x1904, 0x4da5, 0x2071, 0x1894, 0x745c,\r
-+      0x84ff, 0x2009, 0x000e, 0x1904, 0x4da5, 0xac9c, 0xad98, 0xaea4,\r
-+      0xafa0, 0x0096, 0x080c, 0x103b, 0x2009, 0x0002, 0x0904, 0x4da5,\r
-+      0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362, 0xa860, 0x7066,\r
-+      0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c,\r
-+      0x8bff, 0x0178, 0x080c, 0x6667, 0x0118, 0x080c, 0x666f, 0x1148,\r
-+      0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398,\r
-+      0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x01e8,\r
-+      0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c,\r
-+      0x8419, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, 0x715c, 0x81ff,\r
-+      0x090c, 0x0d65, 0x2148, 0x080c, 0x1054, 0x9006, 0x705e, 0x918d,\r
-+      0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300,\r
-+      0x7056, 0x2061, 0x18af, 0x2c44, 0xa37a, 0x7058, 0xa076, 0x7064,\r
-+      0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, 0x4db1, 0x000e,\r
-+      0xa0a2, 0x080c, 0x110c, 0x9006, 0x0048, 0x009e, 0xa897, 0x4005,\r
-+      0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe,\r
-+      0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0d65, 0x00e6, 0x2071,\r
-+      0x1894, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, 0x0030, 0xa883,\r
-+      0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158, 0x7150,\r
-+      0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c, 0xa590, 0xa694,\r
-+      0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000,\r
-+      0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x8419, 0xaa9a, 0x715c,\r
-+      0x81ff, 0x090c, 0x0d65, 0x2148, 0x080c, 0x1054, 0x705f, 0x0000,\r
-+      0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6996, 0x012e,\r
-+      0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8,\r
-+      0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6667, 0x0118, 0x080c,\r
-+      0x666f, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004,\r
-+      0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386,\r
-+      0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99a,\r
-+      0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0d65, 0x2148, 0x080c,\r
-+      0x1054, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a0, 0x2048,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x6996, 0x012e, 0xa09f, 0x0000,\r
-+      0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300,\r
-+      0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x110c,\r
-+      0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be, 0x7000, 0x0148,\r
-+      0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, 0x009e, 0x0804,\r
-+      0x33bf, 0xa884, 0xa988, 0x080c, 0x2424, 0x1518, 0x080c, 0x6210,\r
-+      0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c, 0x4878, 0x01c8,\r
-+      0x080c, 0x4878, 0x01b0, 0x009e, 0xa867, 0x0000, 0xa868, 0xc0fd,\r
-+      0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c, 0xb9f7, 0x1120,\r
-+      0x2009, 0x0003, 0x0804, 0x33bc, 0x7007, 0x0003, 0x701f, 0x4e7e,\r
-+      0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x33bc, 0x7124, 0x080c,\r
-+      0x311a, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004, 0x0804,\r
-+      0x33bc, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906, 0x8006,\r
-+      0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080, 0x0002,\r
-+      0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a,\r
-+      0x080c, 0x0f9f, 0xaa6c, 0xab70, 0xac74, 0xad78, 0x2061, 0x18ae,\r
-+      0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6, 0x7000, 0x0118,\r
-+      0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009, 0x0004,\r
-+      0x000e, 0x007e, 0x0804, 0x48c4, 0x97c6, 0x7200, 0x11b8, 0x96c2,\r
-+      0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18ae, 0x2c44, 0xa076,\r
-+      0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c,\r
-+      0x110c, 0x7007, 0x0002, 0x701f, 0x4eda, 0x0005, 0x000e, 0x007e,\r
-+      0x0804, 0x33bf, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804, 0x2048,\r
-+      0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,\r
-+      0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c,\r
-+      0x0f9f, 0x2100, 0x2238, 0x2061, 0x18ae, 0x2c44, 0xa28c, 0xa390,\r
-+      0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x48c4, 0x81ff, 0x1904,\r
-+      0x33bc, 0x798c, 0x2001, 0x194f, 0x918c, 0x8000, 0x2102, 0x080c,\r
-+      0x488f, 0x0904, 0x33bf, 0x080c, 0x6667, 0x0120, 0x080c, 0x666f,\r
-+      0x1904, 0x33bf, 0x080c, 0x6337, 0x0904, 0x33bc, 0x0126, 0x2091,\r
-+      0x8000, 0x080c, 0x64cc, 0x012e, 0x0904, 0x33bc, 0x2001, 0x194f,\r
-+      0x2004, 0xd0fc, 0x1904, 0x338a, 0x0804, 0x4329, 0xa9a0, 0x2001,\r
-+      0x194f, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x489c, 0x01a0,\r
-+      0x080c, 0x6667, 0x0118, 0x080c, 0x666f, 0x1170, 0x080c, 0x6337,\r
-+      0x2009, 0x0002, 0x0128, 0x080c, 0x64cc, 0x1170, 0x2009, 0x0003,\r
-+      0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,\r
-+      0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x194f,\r
-+      0x2004, 0xd0fc, 0x1128, 0x080c, 0x5395, 0x0110, 0x9006, 0x0018,\r
-+      0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c,\r
-+      0x1118, 0xd084, 0x0904, 0x429e, 0x080c, 0x48ab, 0x0904, 0x33bf,\r
-+      0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, 0x080c,\r
-+      0x6667, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0,\r
-+      0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c,\r
-+      0x538d, 0xd0b4, 0x0904, 0x42d8, 0x7884, 0x908e, 0x007e, 0x0904,\r
-+      0x42d8, 0x908e, 0x007f, 0x0904, 0x42d8, 0x908e, 0x0080, 0x0904,\r
-+      0x42d8, 0xb800, 0xd08c, 0x1904, 0x42d8, 0xa867, 0x0000, 0xa868,\r
-+      0xc0fd, 0xa86a, 0x080c, 0xba16, 0x1120, 0x2009, 0x0003, 0x0804,\r
-+      0x33bc, 0x7007, 0x0003, 0x701f, 0x4fa6, 0x0005, 0x080c, 0x48ab,\r
-+      0x0904, 0x33bf, 0x0804, 0x42d8, 0x080c, 0x3181, 0x0108, 0x0005,\r
-+      0x2009, 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,\r
-+      0x33bc, 0x080c, 0x53a1, 0x0120, 0x2009, 0x0007, 0x0804, 0x33bc,\r
-+      0x080c, 0x665f, 0x0120, 0x2009, 0x0008, 0x0804, 0x33bc, 0xb89c,\r
-+      0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x42d8, 0x9006, 0xa866, 0xa832,\r
-+      0xa868, 0xc0fd, 0xa86a, 0x080c, 0xba79, 0x1120, 0x2009, 0x0003,\r
-+      0x0804, 0x33bc, 0x7007, 0x0003, 0x701f, 0x4fdf, 0x0005, 0xa830,\r
-+      0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x52ea, 0x080c,\r
-+      0x48ab, 0x0904, 0x33bf, 0x0804, 0x4f78, 0x81ff, 0x2009, 0x0001,\r
-+      0x1904, 0x33bc, 0x080c, 0x53a1, 0x2009, 0x0007, 0x1904, 0x33bc,\r
-+      0x080c, 0x665f, 0x0120, 0x2009, 0x0008, 0x0804, 0x33bc, 0x080c,\r
-+      0x48ab, 0x0904, 0x33bf, 0x080c, 0x6667, 0x2009, 0x0009, 0x1904,\r
-+      0x33bc, 0x080c, 0x4878, 0x2009, 0x0002, 0x0904, 0x33bc, 0x9006,\r
-+      0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, 0x9194, 0xff00,\r
-+      0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c,\r
-+      0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x33bf, 0xc0e5, 0xa952,\r
-+      0xa956, 0xa83e, 0x080c, 0xbcdc, 0x2009, 0x0003, 0x0904, 0x33bc,\r
-+      0x7007, 0x0003, 0x701f, 0x5035, 0x0005, 0xa830, 0x9086, 0x0100,\r
-+      0x2009, 0x0004, 0x0904, 0x33bc, 0x0804, 0x338a, 0x7aa8, 0x9284,\r
-+      0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x53a1, 0x1188, 0x2009,\r
-+      0x0014, 0x0804, 0x33bc, 0xd2dc, 0x1568, 0x81ff, 0x2009, 0x0001,\r
-+      0x1904, 0x33bc, 0x080c, 0x53a1, 0x2009, 0x0007, 0x1904, 0x33bc,\r
-+      0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x5368, 0x0804, 0x338a,\r
-+      0xd2fc, 0x0158, 0x080c, 0x48ab, 0x0904, 0x33bf, 0x7984, 0x9284,\r
-+      0x9000, 0x080c, 0x5345, 0x0804, 0x338a, 0x080c, 0x48ab, 0x0904,\r
-+      0x33bf, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009,\r
-+      0x1904, 0x511e, 0x080c, 0x4878, 0x2009, 0x0002, 0x0904, 0x511e,\r
-+      0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88,\r
-+      0x7c9c, 0x7d98, 0x080c, 0x48c1, 0x701f, 0x508f, 0x0005, 0xa86c,\r
-+      0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120, 0xa874, 0x9084,\r
-+      0xff00, 0x0110, 0x1904, 0x33bf, 0xa866, 0xa832, 0xa868, 0xc0fd,\r
-+      0xa86a, 0x080c, 0x48ab, 0x1110, 0x0804, 0x33bf, 0x2009, 0x0043,\r
-+      0x080c, 0xbd44, 0x2009, 0x0003, 0x0904, 0x511e, 0x7007, 0x0003,\r
-+      0x701f, 0x50b3, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004,\r
-+      0x0904, 0x511e, 0x7984, 0x7aa8, 0x9284, 0x1000, 0x080c, 0x5345,\r
-+      0x0804, 0x338a, 0x00c6, 0xaab0, 0x9284, 0xc000, 0x0140, 0xd2ec,\r
-+      0x0168, 0x080c, 0x53a1, 0x1150, 0x2009, 0x0014, 0x04f0, 0x2061,\r
-+      0x1800, 0x080c, 0x53a1, 0x2009, 0x0007, 0x15b8, 0xd2f4, 0x0128,\r
-+      0x9284, 0x5000, 0x080c, 0x5368, 0x0050, 0xd2fc, 0x0178, 0x080c,\r
-+      0x48a9, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c, 0x5345, 0xa87b,\r
-+      0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438, 0x080c, 0x48a9,\r
-+      0x0510, 0x080c, 0x6667, 0x2009, 0x0009, 0x11b8, 0xa8c4, 0x9086,\r
-+      0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084, 0xff00,\r
-+      0x1190, 0x080c, 0x48a9, 0x1108, 0x0070, 0x2009, 0x004b, 0x080c,\r
-+      0xbd44, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429, 0x19c0, 0xa897,\r
-+      0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,\r
-+      0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc,\r
-+      0x0904, 0x33bc, 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c,\r
-+      0x5345, 0x001e, 0x1904, 0x33bc, 0x0804, 0x338a, 0x00f6, 0x2d78,\r
-+      0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150, 0x0016, 0xa998,\r
-+      0x9284, 0x1000, 0xc0fd, 0x080c, 0x5345, 0x001e, 0x9085, 0x0001,\r
-+      0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc, 0x080c,\r
-+      0x53a1, 0x0120, 0x2009, 0x0007, 0x0804, 0x33bc, 0x7984, 0x7ea8,\r
-+      0x96b4, 0x00ff, 0x080c, 0x6270, 0x1904, 0x33bf, 0x9186, 0x007f,\r
-+      0x0138, 0x080c, 0x6667, 0x0120, 0x2009, 0x0009, 0x0804, 0x33bc,\r
-+      0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, 0xa867,\r
-+      0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007, 0xa80a,\r
-+      0x080c, 0xba30, 0x1120, 0x2009, 0x0003, 0x0804, 0x33bc, 0x7007,\r
-+      0x0003, 0x701f, 0x517c, 0x0005, 0xa808, 0x8007, 0x9086, 0x0100,\r
-+      0x1120, 0x2009, 0x0004, 0x0804, 0x33bc, 0xa8e0, 0xa866, 0xa810,\r
-+      0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff,\r
-+      0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc,\r
-+      0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c,\r
-+      0x7d98, 0x0804, 0x48c4, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002,\r
-+      0x0804, 0x33bc, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217,\r
-+      0x82ff, 0x1118, 0x7023, 0x1984, 0x0040, 0x92c6, 0x0001, 0x1118,\r
-+      0x7023, 0x199e, 0x0010, 0x0804, 0x33bf, 0x2009, 0x001a, 0x7a8c,\r
-+      0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c,\r
-+      0x48c1, 0x701f, 0x51cc, 0x0005, 0x2001, 0x182d, 0x2003, 0x0001,\r
-+      0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a,\r
-+      0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x338a, 0x080c,\r
-+      0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, 0x7984, 0x9194,\r
-+      0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, 0x1984,\r
-+      0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x199e, 0x0010, 0x0804,\r
-+      0x33bf, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8, 0x20a9,\r
-+      0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88,\r
-+      0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804, 0x48c4,\r
-+      0x7884, 0x908a, 0x1000, 0x1a04, 0x33bf, 0x0126, 0x2091, 0x8000,\r
-+      0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19d4, 0x6142,\r
-+      0x00ce, 0x012e, 0x0804, 0x338a, 0x00c6, 0x080c, 0x70b7, 0x1160,\r
-+      0x080c, 0x73b7, 0x080c, 0x5cdc, 0x9085, 0x0001, 0x080c, 0x70fe,\r
-+      0x080c, 0x6fe8, 0x080c, 0x0d65, 0x2061, 0x1800, 0x6030, 0xc09d,\r
-+      0x6032, 0x080c, 0x5b97, 0x00ce, 0x0005, 0x00c6, 0x2001, 0x1800,\r
-+      0x2004, 0x908e, 0x0000, 0x0904, 0x33bc, 0x7884, 0x9005, 0x0188,\r
-+      0x7888, 0x2061, 0x196d, 0x2c0c, 0x2062, 0x080c, 0x2801, 0x01a0,\r
-+      0x080c, 0x2809, 0x0188, 0x080c, 0x2811, 0x0170, 0x2162, 0x0804,\r
-+      0x33bf, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, 0x2009,\r
-+      0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, 0x1588,\r
-+      0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x080c, 0x98c8, 0x0026,\r
-+      0x2011, 0x0003, 0x080c, 0x9339, 0x2011, 0x0002, 0x080c, 0x9343,\r
-+      0x002e, 0x080c, 0x9206, 0x0036, 0x901e, 0x080c, 0x9286, 0x003e,\r
-+      0x080c, 0x98e4, 0x60e3, 0x0000, 0x080c, 0xd5fb, 0x080c, 0xd616,\r
-+      0x9085, 0x0001, 0x080c, 0x70fe, 0x9006, 0x080c, 0x2833, 0x2001,\r
-+      0x1800, 0x2003, 0x0004, 0x0026, 0x2011, 0x0008, 0x080c, 0x286d,\r
-+      0x002e, 0x00ce, 0x0804, 0x338a, 0x81ff, 0x0120, 0x2009, 0x0001,\r
-+      0x0804, 0x33bc, 0x080c, 0x53a1, 0x0120, 0x2009, 0x0007, 0x0804,\r
-+      0x33bc, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x6270, 0x1904,\r
-+      0x33bf, 0x9186, 0x007f, 0x0138, 0x080c, 0x6667, 0x0120, 0x2009,\r
-+      0x0009, 0x0804, 0x33bc, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002,\r
-+      0x0804, 0x33bc, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c,\r
-+      0xba33, 0x1120, 0x2009, 0x0003, 0x0804, 0x33bc, 0x7007, 0x0003,\r
-+      0x701f, 0x52d3, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009,\r
-+      0x0004, 0x0804, 0x33bc, 0xa8e0, 0xa866, 0xa834, 0x8007, 0x800c,\r
-+      0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60,\r
-+      0x0804, 0x48c4, 0xa898, 0x9086, 0x000d, 0x1904, 0x33bc, 0x2021,\r
-+      0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x52f7, 0x0010, 0x012e,\r
-+      0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010,\r
-+      0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4, 0x799a,\r
-+      0xa9a8, 0x799e, 0x080c, 0x48b4, 0x2091, 0x4080, 0x2001, 0x0089,\r
-+      0x2004, 0xd084, 0x190c, 0x11be, 0x7007, 0x0001, 0x2091, 0x5000,\r
-+      0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6,\r
-+      0x2061, 0x19d4, 0x7984, 0x6152, 0x614e, 0x6057, 0x0000, 0x604b,\r
-+      0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888, 0x6062, 0x788c,\r
-+      0x605e, 0x2001, 0x19e2, 0x2044, 0x2001, 0x19e9, 0xa076, 0xa060,\r
-+      0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b, 0x0000, 0xa09f,\r
-+      0x0000, 0x00ce, 0x012e, 0x0804, 0x338a, 0x0126, 0x2091, 0x8000,\r
-+      0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006, 0x080c, 0xb894,\r
-+      0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000, 0x2004, 0x905d,\r
-+      0x0160, 0x080c, 0x5cf6, 0x080c, 0x9b66, 0x0110, 0xb817, 0x0000,\r
-+      0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085, 0x0001, 0x0cc8,\r
-+      0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e, 0x20a9, 0x0800,\r
-+      0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0180, 0x9186, 0x007e,\r
-+      0x0168, 0x9186, 0x007f, 0x0150, 0x9186, 0x0080, 0x0138, 0x9186,\r
-+      0x00ff, 0x0120, 0x0026, 0x2200, 0x0801, 0x002e, 0x001e, 0x8108,\r
-+      0x1f04, 0x5370, 0x015e, 0x012e, 0x0005, 0x2001, 0x1854, 0x2004,\r
-+      0x0005, 0x2001, 0x1873, 0x2004, 0x0005, 0x0006, 0x2001, 0x1810,\r
-+      0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0b4,\r
-+      0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x0005, 0x0016,\r
-+      0x00e6, 0x2071, 0x1894, 0x7108, 0x910d, 0x710a, 0x00ee, 0x001e,\r
-+      0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, 0x33bf, 0x810c, 0x0016,\r
-+      0x080c, 0x4878, 0x080c, 0x0f2a, 0x2100, 0x2238, 0x7d84, 0x7c88,\r
-+      0x7b8c, 0x7a90, 0x001e, 0x080c, 0x48c1, 0x701f, 0x53c8, 0x0005,\r
-+      0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4, 0x810c,\r
-+      0x2061, 0x18ae, 0x2c44, 0xa770, 0xa074, 0x2071, 0x1894, 0x080c,\r
-+      0x48c4, 0x701f, 0x53dc, 0x0005, 0x2061, 0x18ae, 0x2c44, 0x0016,\r
-+      0x0026, 0xa270, 0xa174, 0x080c, 0x0f32, 0x002e, 0x001e, 0x080c,\r
-+      0x0fdf, 0x9006, 0xa802, 0xa806, 0x0804, 0x338a, 0x0126, 0x0156,\r
-+      0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,\r
-+      0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4,\r
-+      0x11e8, 0xd084, 0x0118, 0x080c, 0x5597, 0x0068, 0xd08c, 0x0118,\r
-+      0x080c, 0x54a0, 0x0040, 0xd094, 0x0118, 0x080c, 0x5470, 0x0018,\r
-+      0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de,\r
-+      0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016, 0x6128,\r
-+      0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006, 0x7094,\r
-+      0x9005, 0x000e, 0x0120, 0x7097, 0x0000, 0x708f, 0x0000, 0x624c,\r
-+      0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a,\r
-+      0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294, 0xff00, 0x9296,\r
-+      0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100,\r
-+      0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x5c58,\r
-+      0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140, 0x6042, 0x6043,\r
-+      0x0000, 0x7083, 0x0000, 0x709f, 0x0001, 0x70c3, 0x0000, 0x70db,\r
-+      0x0000, 0x2009, 0x1d80, 0x200b, 0x0000, 0x7093, 0x0000, 0x7087,\r
-+      0x000f, 0x2009, 0x000f, 0x2011, 0x5b3a, 0x080c, 0x821d, 0x0005,\r
-+      0x2001, 0x1875, 0x2004, 0xd08c, 0x0110, 0x705b, 0xffff, 0x7084,\r
-+      0x9005, 0x1528, 0x2011, 0x5b3a, 0x080c, 0x8159, 0x6040, 0x9094,\r
-+      0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c,\r
-+      0x1168, 0x1f04, 0x5486, 0x6242, 0x7097, 0x0000, 0x6040, 0x9094,\r
-+      0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048, 0x6242, 0x7097,\r
-+      0x0000, 0x708b, 0x0000, 0x9006, 0x080c, 0x5ce1, 0x0000, 0x0005,\r
-+      0x7088, 0x908a, 0x0003, 0x1a0c, 0x0d65, 0x000b, 0x0005, 0x54aa,\r
-+      0x54fb, 0x5596, 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, 0x708b,\r
-+      0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9,\r
-+      0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, 0x54b9, 0x080c,\r
-+      0x0d65, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, 0xa001,\r
-+      0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020, 0x080c, 0x5cbd,\r
-+      0x2079, 0x1d00, 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001,\r
-+      0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1d0e, 0x20a9, 0x0004,\r
-+      0x4003, 0x080c, 0x97fa, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9,\r
-+      0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c,\r
-+      0x600f, 0x0000, 0x080c, 0x5b6b, 0x00fe, 0x9006, 0x708e, 0x6043,\r
-+      0x0008, 0x6042, 0x0005, 0x00f6, 0x708c, 0x708f, 0x0000, 0x9025,\r
-+      0x0904, 0x5573, 0x6020, 0xd0b4, 0x1904, 0x5571, 0x719c, 0x81ff,\r
-+      0x0904, 0x555f, 0x9486, 0x000c, 0x1904, 0x556c, 0x9480, 0x0018,\r
-+      0x8004, 0x20a8, 0x080c, 0x5cb6, 0x2011, 0x0260, 0x2019, 0x1d00,\r
-+      0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, 0x5518,\r
-+      0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0,\r
-+      0x2061, 0x0100, 0x6043, 0x0006, 0x708b, 0x0002, 0x7097, 0x0002,\r
-+      0x2009, 0x07d0, 0x2011, 0x5b41, 0x080c, 0x821d, 0x080c, 0x5cbd,\r
-+      0x04c0, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7930, 0x918e, 0x1101,\r
-+      0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118,\r
-+      0x7804, 0x9005, 0x0190, 0x080c, 0x5cb6, 0x2011, 0x026e, 0x2019,\r
-+      0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0,\r
-+      0x8210, 0x8318, 0x1f04, 0x5553, 0x0078, 0x709f, 0x0000, 0x080c,\r
-+      0x5cb6, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1,\r
-+      0x1d00, 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008, 0x6043, 0x0000,\r
-+      0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100, 0x6042, 0x6020,\r
-+      0xd0b4, 0x1db8, 0x080c, 0x97fa, 0x20e1, 0x0001, 0x2099, 0x1d00,\r
-+      0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3,\r
-+      0x000c, 0x2011, 0x19c5, 0x2013, 0x0000, 0x708f, 0x0000, 0x60a3,\r
-+      0x0056, 0x60a7, 0x9575, 0x080c, 0x8faa, 0x08d8, 0x0005, 0x7094,\r
-+      0x908a, 0x001d, 0x1a0c, 0x0d65, 0x000b, 0x0005, 0x55c8, 0x55db,\r
-+      0x5604, 0x5624, 0x564a, 0x5679, 0x569f, 0x56d7, 0x56fd, 0x572b,\r
-+      0x5766, 0x579e, 0x57bc, 0x57e7, 0x5809, 0x5824, 0x582e, 0x5862,\r
-+      0x5888, 0x58b7, 0x58dd, 0x5915, 0x5959, 0x5996, 0x59b7, 0x5a10,\r
-+      0x5a32, 0x5a60, 0x5a60, 0x00c6, 0x2061, 0x1800, 0x6003, 0x0007,\r
-+      0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005,\r
-+      0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100,\r
-+      0x6043, 0x0002, 0x7097, 0x0001, 0x2009, 0x07d0, 0x2011, 0x5b41,\r
-+      0x080c, 0x821d, 0x0005, 0x00f6, 0x708c, 0x9086, 0x0014, 0x1510,\r
-+      0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5cb6, 0x2079, 0x0260,\r
-+      0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38,\r
-+      0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x2011,\r
-+      0x5b41, 0x080c, 0x8159, 0x7097, 0x0010, 0x080c, 0x582e, 0x0010,\r
-+      0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0003, 0x6043,\r
-+      0x0004, 0x2011, 0x5b41, 0x080c, 0x8159, 0x080c, 0x5c3a, 0x2079,\r
-+      0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88,\r
-+      0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x5619, 0x60c3, 0x0014,\r
-+      0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500,\r
-+      0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, 0x0014, 0x11b8, 0x080c,\r
-+      0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834,\r
-+      0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110,\r
-+      0x70c3, 0x0001, 0x7097, 0x0004, 0x0029, 0x0010, 0x080c, 0x5c92,\r
-+      0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005, 0x080c, 0x5c3a, 0x2079,\r
-+      0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5cb6, 0x080c,\r
-+      0x5c99, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff,\r
-+      0x0138, 0x2011, 0x0008, 0x080c, 0x5aee, 0x0168, 0x080c, 0x5c6f,\r
-+      0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,\r
-+      0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b6b, 0x00fe,\r
-+      0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b41, 0x080c,\r
-+      0x8159, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cb6, 0x2079, 0x0260,\r
-+      0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38,\r
-+      0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097,\r
-+      0x0006, 0x0029, 0x0010, 0x080c, 0x5c92, 0x00fe, 0x0005, 0x00f6,\r
-+      0x7097, 0x0007, 0x080c, 0x5c3a, 0x2079, 0x0240, 0x7833, 0x1104,\r
-+      0x7837, 0x0000, 0x080c, 0x5cb6, 0x080c, 0x5c99, 0x11b8, 0x7080,\r
-+      0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x318b,\r
-+      0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5aee,\r
-+      0x0180, 0x080c, 0x4c97, 0x0110, 0x080c, 0x248d, 0x20a9, 0x0008,\r
-+      0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,\r
-+      0x4003, 0x60c3, 0x0014, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6,\r
-+      0x708c, 0x9005, 0x0500, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086,\r
-+      0x0014, 0x11b8, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296,\r
-+      0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,\r
-+      0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0008, 0x0029,\r
-+      0x0010, 0x080c, 0x5c92, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0009,\r
-+      0x080c, 0x5c3a, 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, 0x0100,\r
-+      0x080c, 0x5c99, 0x1150, 0x7080, 0x9005, 0x1138, 0x080c, 0x5a61,\r
-+      0x1188, 0x9085, 0x0001, 0x080c, 0x248d, 0x20a9, 0x0008, 0x080c,\r
-+      0x5cb6, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,\r
-+      0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b6b, 0x0010, 0x080c,\r
-+      0x55bb, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x05a8, 0x2011,\r
-+      0x5b41, 0x080c, 0x8159, 0x9086, 0x0014, 0x1560, 0x080c, 0x5cb6,\r
-+      0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, 0x9084,\r
-+      0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128,\r
-+      0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x000a, 0x00b1,\r
-+      0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,\r
-+      0x1110, 0x70c3, 0x0001, 0x7093, 0x0000, 0x7097, 0x000e, 0x080c,\r
-+      0x5809, 0x0010, 0x080c, 0x5c92, 0x00fe, 0x0005, 0x00f6, 0x7097,\r
-+      0x000b, 0x2011, 0x1d0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040,\r
-+      0x2019, 0xffff, 0x4304, 0x080c, 0x5c3a, 0x2079, 0x0240, 0x7833,\r
-+      0x1106, 0x7837, 0x0000, 0x080c, 0x5c99, 0x0118, 0x2013, 0x0000,\r
-+      0x0020, 0x705c, 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, 0x2009,\r
-+      0x024e, 0x2011, 0x1d0e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260,\r
-+      0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x578b,\r
-+      0x60c3, 0x0084, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6, 0x708c,\r
-+      0x9005, 0x01c0, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, 0x0084,\r
-+      0x1178, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106,\r
-+      0x1138, 0x7834, 0x9005, 0x1120, 0x7097, 0x000c, 0x0029, 0x0010,\r
-+      0x080c, 0x5c92, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000d, 0x080c,\r
-+      0x5c3a, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837, 0x0000, 0x080c,\r
-+      0x5cb6, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009, 0x024e, 0x220e,\r
-+      0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812,\r
-+      0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04,\r
-+      0x57cf, 0x60c3, 0x0084, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6,\r
-+      0x708c, 0x9005, 0x01e0, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086,\r
-+      0x0084, 0x1198, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296,\r
-+      0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001, 0x080c,\r
-+      0x5c0c, 0x7097, 0x000e, 0x0029, 0x0010, 0x080c, 0x5c92, 0x00fe,\r
-+      0x0005, 0x918d, 0x0001, 0x080c, 0x5ce1, 0x7097, 0x000f, 0x708f,\r
-+      0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061,\r
-+      0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011,\r
-+      0x5b41, 0x080c, 0x814d, 0x0005, 0x708c, 0x9005, 0x0130, 0x2011,\r
-+      0x5b41, 0x080c, 0x8159, 0x7097, 0x0000, 0x0005, 0x7097, 0x0011,\r
-+      0x080c, 0x97fa, 0x080c, 0x5cb6, 0x20e1, 0x0000, 0x2099, 0x0260,\r
-+      0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c, 0x9480, 0x0018, 0x9080,\r
-+      0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, 0x5c99,\r
-+      0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e, 0x707c, 0x9084, 0x00ff,\r
-+      0x0160, 0x080c, 0x2424, 0x9186, 0x007e, 0x0138, 0x9186, 0x0080,\r
-+      0x0120, 0x2011, 0x0008, 0x080c, 0x5aee, 0x60c3, 0x0014, 0x080c,\r
-+      0x5b6b, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b41,\r
-+      0x080c, 0x8159, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cb6, 0x2079,\r
-+      0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160,\r
-+      0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,\r
-+      0x7097, 0x0012, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005,\r
-+      0x00f6, 0x7097, 0x0013, 0x080c, 0x5c48, 0x2079, 0x0240, 0x7833,\r
-+      0x1103, 0x7837, 0x0000, 0x080c, 0x5cb6, 0x080c, 0x5c99, 0x1170,\r
-+      0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, 0x0138, 0x2011,\r
-+      0x0008, 0x080c, 0x5aee, 0x0168, 0x080c, 0x5c6f, 0x20a9, 0x0008,\r
-+      0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,\r
-+      0x4003, 0x60c3, 0x0014, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6,\r
-+      0x708c, 0x9005, 0x0500, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086,\r
-+      0x0014, 0x11b8, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296,\r
-+      0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,\r
-+      0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0014, 0x0029,\r
-+      0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0015,\r
-+      0x080c, 0x5c48, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000,\r
-+      0x080c, 0x5cb6, 0x080c, 0x5c99, 0x11b8, 0x7080, 0x9005, 0x11a0,\r
-+      0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x318b, 0x200d, 0x918c,\r
-+      0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5aee, 0x0180, 0x080c,\r
-+      0x4c97, 0x0110, 0x080c, 0x248d, 0x20a9, 0x0008, 0x20e1, 0x0000,\r
-+      0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,\r
-+      0x0014, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,\r
-+      0x05f0, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, 0x0014, 0x15a8,\r
-+      0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1568,\r
-+      0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1168, 0x9085,\r
-+      0x0001, 0x080c, 0x5ce1, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,\r
-+      0x1110, 0x70c3, 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc,\r
-+      0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x9085, 0x0001,\r
-+      0x080c, 0x5ce1, 0x7093, 0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70db,\r
-+      0x0008, 0x7097, 0x0016, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe,\r
-+      0x0005, 0x080c, 0x97fa, 0x080c, 0x5cb6, 0x20e1, 0x0000, 0x2099,\r
-+      0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003,\r
-+      0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011, 0x024d, 0x2012,\r
-+      0x2011, 0x026e, 0x7097, 0x0017, 0x080c, 0x5c99, 0x1150, 0x7080,\r
-+      0x9005, 0x1138, 0x080c, 0x5a61, 0x1188, 0x9085, 0x0001, 0x080c,\r
-+      0x248d, 0x20a9, 0x0008, 0x080c, 0x5cb6, 0x20e1, 0x0000, 0x2099,\r
-+      0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,\r
-+      0x080c, 0x5b6b, 0x0010, 0x080c, 0x55bb, 0x0005, 0x00f6, 0x708c,\r
-+      0x9005, 0x01d8, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, 0x0084,\r
-+      0x1190, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106,\r
-+      0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c, 0x5ce1, 0x7097,\r
-+      0x0018, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6,\r
-+      0x7097, 0x0019, 0x080c, 0x5c48, 0x2079, 0x0240, 0x7833, 0x1106,\r
-+      0x7837, 0x0000, 0x080c, 0x5cb6, 0x2009, 0x026e, 0x2039, 0x1d0e,\r
-+      0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186, 0x0280, 0x1128,\r
-+      0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04, 0x59ca, 0x2039,\r
-+      0x1d0e, 0x080c, 0x5c99, 0x11e8, 0x2728, 0x2514, 0x8207, 0x9084,\r
-+      0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, 0x202a,\r
-+      0x705c, 0x2310, 0x8214, 0x92a0, 0x1d0e, 0x2414, 0x938c, 0x0001,\r
-+      0x0118, 0x9294, 0xff00, 0x0018, 0x9294, 0x00ff, 0x8007, 0x9215,\r
-+      0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, 0x270e, 0x8738, 0x8108,\r
-+      0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240,\r
-+      0x1f04, 0x59fd, 0x60c3, 0x0084, 0x080c, 0x5b6b, 0x00fe, 0x0005,\r
-+      0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b41, 0x080c, 0x8159,\r
-+      0x9086, 0x0084, 0x1198, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30,\r
-+      0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001,\r
-+      0x080c, 0x5c0c, 0x7097, 0x001a, 0x0029, 0x0010, 0x708f, 0x0000,\r
-+      0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x5ce1, 0x7097, 0x001b,\r
-+      0x080c, 0x97fa, 0x080c, 0x5cb6, 0x2011, 0x0260, 0x2009, 0x0240,\r
-+      0x748c, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004,\r
-+      0x20a8, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810,\r
-+      0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011,\r
-+      0x0260, 0x1f04, 0x5a49, 0x60c3, 0x0084, 0x080c, 0x5b6b, 0x0005,\r
-+      0x0005, 0x0086, 0x0096, 0x2029, 0x1854, 0x252c, 0x20a9, 0x0008,\r
-+      0x2041, 0x1d0e, 0x20e9, 0x0001, 0x28a0, 0x080c, 0x5cb6, 0x20e1,\r
-+      0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007,\r
-+      0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff,\r
-+      0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x5a7b,\r
-+      0x0804, 0x5aea, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff,\r
-+      0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5aea, 0x918d, 0xc000,\r
-+      0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010,\r
-+      0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4,\r
-+      0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5aa1, 0x04d8, 0x23a8,\r
-+      0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5ab3, 0x2328, 0x8529,\r
-+      0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0x973a,\r
-+      0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5ac2, 0x755a, 0x95c8,\r
-+      0x318b, 0x292d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016,\r
-+      0x2508, 0x080c, 0x246d, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018,\r
-+      0x2304, 0x9405, 0x201a, 0x7083, 0x0001, 0x20e9, 0x0000, 0x20a1,\r
-+      0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9, 0x0008, 0x4003, 0x9085,\r
-+      0x0001, 0x0008, 0x9006, 0x009e, 0x008e, 0x0005, 0x0156, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099, 0x026e,\r
-+      0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0, 0x4003, 0x014e, 0x013e,\r
-+      0x01de, 0x01ce, 0x015e, 0x2118, 0x9026, 0x2001, 0x0007, 0x939a,\r
-+      0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120,\r
-+      0x939a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118,\r
-+      0x8423, 0x8319, 0x1de8, 0x9238, 0x2029, 0x026e, 0x9528, 0x2504,\r
-+      0x942c, 0x11b8, 0x9405, 0x203a, 0x715a, 0x91a0, 0x318b, 0x242d,\r
-+      0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c,\r
-+      0x246d, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7083, 0x0001, 0x9084,\r
-+      0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7087, 0x0000, 0x00ee,\r
-+      0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c,\r
-+      0x5bfb, 0x080c, 0x8fb7, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c,\r
-+      0x2843, 0x0126, 0x2091, 0x8000, 0x2071, 0x1825, 0x2073, 0x0000,\r
-+      0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x5c58, 0x001e,\r
-+      0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e,\r
-+      0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x27a2,\r
-+      0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, 0x19c5,\r
-+      0x2013, 0x0000, 0x708f, 0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7,\r
-+      0x9575, 0x080c, 0x8faa, 0x6144, 0xd184, 0x0120, 0x7194, 0x918d,\r
-+      0x2000, 0x0018, 0x7188, 0x918d, 0x1000, 0x2011, 0x196a, 0x2112,\r
-+      0x2009, 0x07d0, 0x2011, 0x5b41, 0x080c, 0x821d, 0x0005, 0x0016,\r
-+      0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x98c8, 0x080c,\r
-+      0x9b6d, 0x080c, 0x98e4, 0x2009, 0x00f7, 0x080c, 0x5c58, 0x2061,\r
-+      0x19d4, 0x900e, 0x611a, 0x611e, 0x6172, 0x6176, 0x2061, 0x1800,\r
-+      0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010,\r
-+      0x2009, 0x196a, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bc7,\r
-+      0x080c, 0x814d, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6,\r
-+      0x0006, 0x0126, 0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c,\r
-+      0x8fb7, 0x2071, 0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c,\r
-+      0x2843, 0x080c, 0x70bf, 0x0188, 0x080c, 0x70da, 0x1170, 0x080c,\r
-+      0x73c1, 0x0016, 0x080c, 0x253c, 0x2001, 0x193e, 0x2102, 0x001e,\r
-+      0x080c, 0x73bc, 0x080c, 0x6fe8, 0x0050, 0x2009, 0x0001, 0x080c,\r
-+      0x281f, 0x2001, 0x0001, 0x080c, 0x23c9, 0x080c, 0x5b97, 0x012e,\r
-+      0x000e, 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158,\r
-+      0x0026, 0x0036, 0x2011, 0x8017, 0x2001, 0x196a, 0x201c, 0x080c,\r
-+      0x48d8, 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001,\r
-+      0x20a1, 0x1d80, 0x080c, 0x5cb6, 0x20e9, 0x0000, 0x2099, 0x026e,\r
-+      0x0099, 0x20a9, 0x0020, 0x080c, 0x5cb0, 0x2099, 0x0260, 0x20a1,\r
-+      0x1d92, 0x0051, 0x20a9, 0x000e, 0x080c, 0x5cb3, 0x2099, 0x0260,\r
-+      0x20a1, 0x1db2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308,\r
-+      0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x5c30, 0x002e,\r
-+      0x001e, 0x0005, 0x080c, 0x97fa, 0x20e1, 0x0001, 0x2099, 0x1d00,\r
-+      0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005,\r
-+      0x080c, 0x97fa, 0x080c, 0x5cb6, 0x20e1, 0x0000, 0x2099, 0x0260,\r
-+      0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005,\r
-+      0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1833, 0x2004,\r
-+      0x9005, 0x1138, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x9105,\r
-+      0x0010, 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016,\r
-+      0x0046, 0x080c, 0x6663, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a,\r
-+      0x080c, 0xd273, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019,\r
-+      0x002a, 0x900e, 0x080c, 0x2fc5, 0x080c, 0xbf61, 0x0140, 0x0036,\r
-+      0x2019, 0xffff, 0x2021, 0x0007, 0x080c, 0x4a75, 0x003e, 0x004e,\r
-+      0x001e, 0x0005, 0x080c, 0x5b97, 0x7097, 0x0000, 0x708f, 0x0000,\r
-+      0x0005, 0x0006, 0x2001, 0x180c, 0x2004, 0xd09c, 0x0100, 0x000e,\r
-+      0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101,\r
-+      0x200c, 0x918d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005,\r
-+      0x2009, 0x0001, 0x0020, 0x2009, 0x0002, 0x0008, 0x900e, 0x6814,\r
-+      0x9084, 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146,\r
-+      0x01d6, 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1d00,\r
-+      0x4004, 0x2079, 0x1d00, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f,\r
-+      0x00ef, 0x7813, 0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de,\r
-+      0x014e, 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, 0x0001,\r
-+      0x0005, 0x2001, 0x1977, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003,\r
-+      0x0000, 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006,\r
-+      0x200a, 0x8108, 0x1f04, 0x5cf0, 0x015e, 0x0005, 0x00d6, 0x0036,\r
-+      0x0156, 0x0136, 0x0146, 0x2069, 0x1853, 0x9006, 0xb802, 0xb8c6,\r
-+      0xb807, 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198, 0x318b, 0x231d,\r
-+      0x939c, 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb886, 0x080c, 0x9b66,\r
-+      0x1120, 0x9192, 0x007e, 0x1208, 0xbb86, 0x20a9, 0x0004, 0xb8b4,\r
-+      0x20e8, 0xb9b8, 0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9,\r
-+      0x0004, 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e,\r
-+      0xb842, 0xb8be, 0xb8c2, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f,\r
-+      0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008,\r
-+      0xb896, 0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4, 0x904d,\r
-+      0x0110, 0x080c, 0x1054, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a,\r
-+      0x6810, 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, 0x00ff, 0xb842,\r
-+      0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091,\r
-+      0x8000, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04,\r
-+      0x5db4, 0x9182, 0x0800, 0x1a04, 0x5db8, 0x2001, 0x180c, 0x2004,\r
-+      0x9084, 0x0003, 0x1904, 0x5dbe, 0x9188, 0x1000, 0x2104, 0x905d,\r
-+      0x0198, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1188, 0xb8a4,\r
-+      0x900d, 0x1904, 0x5dd0, 0x080c, 0x612a, 0x9006, 0x012e, 0x0005,\r
-+      0x2001, 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498,\r
-+      0x9082, 0x0006, 0x1290, 0x080c, 0x9b66, 0x1160, 0xb8a0, 0x9084,\r
-+      0xff80, 0x1140, 0xb900, 0xd1fc, 0x0d10, 0x2001, 0x0029, 0x2009,\r
-+      0x1000, 0x0408, 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c,\r
-+      0xd18c, 0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001,\r
-+      0x0004, 0x0040, 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009,\r
-+      0x1000, 0x0048, 0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,\r
-+      0x2001, 0x0029, 0x900e, 0x9005, 0x012e, 0x0005, 0x2001, 0x180c,\r
-+      0x2004, 0xd084, 0x19d0, 0x9188, 0x1000, 0x2104, 0x9065, 0x09a8,\r
-+      0x080c, 0x6667, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x5d77,\r
-+      0x080c, 0x64db, 0x0904, 0x5d80, 0x0804, 0x5d7b, 0x00e6, 0x2071,\r
-+      0x19b8, 0x7004, 0x9086, 0x0002, 0x1128, 0x7030, 0x9080, 0x0004,\r
-+      0x2004, 0x9b06, 0x00ee, 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091,\r
-+      0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x5e5f, 0x9188, 0x1000,\r
-+      0x2104, 0x905d, 0x0904, 0x5e37, 0xb8a0, 0x9086, 0x007f, 0x0178,\r
-+      0x080c, 0x666f, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e, 0x0004,\r
-+      0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x6667, 0x1598, 0xa87c,\r
-+      0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026, 0x2010,\r
-+      0x080c, 0xb835, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804, 0x5e61,\r
-+      0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804, 0x5e61,\r
-+      0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c, 0x9b91,\r
-+      0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023,\r
-+      0x000a, 0x2009, 0x0003, 0x080c, 0x9c85, 0x9006, 0x0458, 0x2001,\r
-+      0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0x9b66, 0x1160,\r
-+      0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900, 0x2001,\r
-+      0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009,\r
-+      0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184,\r
-+      0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001,\r
-+      0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c,\r
-+      0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000, 0xa8e0, 0x9005,\r
-+      0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8, 0x9005, 0x1518,\r
-+      0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974, 0x2079, 0x1800, 0x9182,\r
-+      0x0800, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130, 0xaa98, 0xab94,\r
-+      0xa878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c, 0x0118, 0x2001,\r
-+      0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001,\r
-+      0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001,\r
-+      0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e, 0x00be, 0x00fe,\r
-+      0x0005, 0x5ef6, 0x5eb1, 0x5ec8, 0x5ef6, 0x5ef6, 0x5ef6, 0x5ef6,\r
-+      0x5ef6, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x6210, 0x0148,\r
-+      0x9046, 0xb810, 0x9306, 0x1904, 0x5efe, 0xb814, 0x9206, 0x15f0,\r
-+      0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x4792, 0x0150, 0x04b0,\r
-+      0x080c, 0x6270, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, 0x9206,\r
-+      0x1568, 0x080c, 0x9b91, 0x0530, 0x2b00, 0x6012, 0x080c, 0xbcdb,\r
-+      0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, 0x9086,\r
-+      0x0001, 0x1170, 0x080c, 0x3006, 0x9006, 0x080c, 0x61ad, 0x2001,\r
-+      0x0002, 0x080c, 0x61c1, 0x2001, 0x0200, 0xb86e, 0xb893, 0x0002,\r
-+      0x2009, 0x0003, 0x080c, 0x9c85, 0x9006, 0x0068, 0x2001, 0x0001,\r
-+      0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0028,\r
-+      0x900e, 0x9005, 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005, 0x00b6,\r
-+      0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa894, 0x90c6, 0x0015,\r
-+      0x0904, 0x60d3, 0x90c6, 0x0056, 0x0904, 0x60d7, 0x90c6, 0x0066,\r
-+      0x0904, 0x60db, 0x90c6, 0x0067, 0x0904, 0x60df, 0x90c6, 0x0068,\r
-+      0x0904, 0x60e3, 0x90c6, 0x0071, 0x0904, 0x60e7, 0x90c6, 0x0074,\r
-+      0x0904, 0x60eb, 0x90c6, 0x007c, 0x0904, 0x60ef, 0x90c6, 0x007e,\r
-+      0x0904, 0x60f3, 0x90c6, 0x0037, 0x0904, 0x60f7, 0x9016, 0x2079,\r
-+      0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x60ce, 0x9182, 0x0800,\r
-+      0x1a04, 0x60ce, 0x080c, 0x6270, 0x1198, 0xb804, 0x9084, 0x00ff,\r
-+      0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148, 0x080c,\r
-+      0x9b66, 0x1904, 0x60b7, 0xb8a0, 0x9084, 0xff80, 0x1904, 0x60b7,\r
-+      0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, 0x6017,\r
-+      0x90c6, 0x0064, 0x0904, 0x6040, 0x2008, 0x0804, 0x5fda, 0xa998,\r
-+      0xa8b0, 0x2040, 0x080c, 0x9b66, 0x1120, 0x9182, 0x007f, 0x0a04,\r
-+      0x5fda, 0x9186, 0x00ff, 0x0904, 0x5fda, 0x9182, 0x0800, 0x1a04,\r
-+      0x5fda, 0xaaa0, 0xab9c, 0x7878, 0x9306, 0x1188, 0x787c, 0x0096,\r
-+      0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x5fda, 0x99cc,\r
-+      0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x5fda, 0x080c,\r
-+      0x4792, 0x0904, 0x5fe3, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1558,\r
-+      0x0006, 0x080c, 0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,\r
-+      0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031,\r
-+      0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c,\r
-+      0x0f9f, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0035,\r
-+      0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c,\r
-+      0x0f9f, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x00a0,\r
-+      0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6, 0x4009,\r
-+      0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005, 0x2009,\r
-+      0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e, 0x2001,\r
-+      0x0030, 0x900e, 0x0470, 0x080c, 0x9b91, 0x1130, 0x2001, 0x4005,\r
-+      0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012, 0x080c, 0xbcdb,\r
-+      0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108, 0xc0f5,\r
-+      0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x3006, 0x012e, 0x9006,\r
-+      0x080c, 0x61ad, 0x2001, 0x0002, 0x080c, 0x61c1, 0x2009, 0x0002,\r
-+      0x080c, 0x9c85, 0xa8b0, 0xd094, 0x0118, 0xb8c4, 0xc08d, 0xb8c6,\r
-+      0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x080c,\r
-+      0x53a1, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0, 0x080c,\r
-+      0x6270, 0x1904, 0x5fd5, 0x9186, 0x007f, 0x0130, 0x080c, 0x6667,\r
-+      0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x1022, 0x1120,\r
-+      0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806, 0x080c,\r
-+      0xba33, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, 0x5fdc,\r
-+      0xa998, 0xaeb0, 0x080c, 0x6270, 0x1904, 0x5fd5, 0x0096, 0x080c,\r
-+      0x1022, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x6094, 0x2900,\r
-+      0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b, 0xb8b4, 0x20e0,\r
-+      0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0,\r
-+      0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xbbb8, 0x9398,\r
-+      0x0006, 0x2398, 0x080c, 0x0f9f, 0x009e, 0xa87b, 0x0000, 0xa883,\r
-+      0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x538d, 0xd0b4,\r
-+      0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118, 0xa89b,\r
-+      0x000c, 0x00b0, 0x080c, 0x6667, 0x0118, 0xa89b, 0x0009, 0x0080,\r
-+      0x080c, 0x53a1, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c, 0xba16,\r
-+      0x1904, 0x6010, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, 0x5fdc,\r
-+      0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006, 0x8007,\r
-+      0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b,\r
-+      0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x1266,\r
-+      0x080c, 0xa0f5, 0x1904, 0x6010, 0x2009, 0x0002, 0x08e8, 0x2001,\r
-+      0x0028, 0x900e, 0x0804, 0x6011, 0x2009, 0x180c, 0x210c, 0xd18c,\r
-+      0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004,\r
-+      0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x6011, 0x2001, 0x0029,\r
-+      0x900e, 0x0804, 0x6011, 0x080c, 0x35ae, 0x0804, 0x6012, 0x080c,\r
-+      0x50c2, 0x0804, 0x6012, 0x080c, 0x4354, 0x0804, 0x6012, 0x080c,\r
-+      0x43cd, 0x0804, 0x6012, 0x080c, 0x4429, 0x0804, 0x6012, 0x080c,\r
-+      0x484e, 0x0804, 0x6012, 0x080c, 0x4afa, 0x0804, 0x6012, 0x080c,\r
-+      0x4d2d, 0x0804, 0x6012, 0x080c, 0x4f26, 0x0804, 0x6012, 0x080c,\r
-+      0x37c3, 0x0804, 0x6012, 0x00b6, 0xa974, 0xae78, 0x9684, 0x3fff,\r
-+      0x9082, 0x4000, 0x1608, 0x9182, 0x0800, 0x1258, 0x9188, 0x1000,\r
-+      0x2104, 0x905d, 0x0130, 0x080c, 0x6667, 0x1138, 0x00d9, 0x9006,\r
-+      0x00b0, 0x2001, 0x0028, 0x900e, 0x0090, 0x9082, 0x0006, 0x1240,\r
-+      0xb900, 0xd1fc, 0x0d98, 0x2001, 0x0029, 0x2009, 0x1000, 0x0038,\r
-+      0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9005,\r
-+      0x00be, 0x0005, 0xa877, 0x0000, 0xb8c0, 0x9005, 0x1904, 0x61a1,\r
-+      0xb888, 0x9005, 0x1904, 0x61a1, 0xb838, 0xb93c, 0x9102, 0x1a04,\r
-+      0x61a1, 0x2b10, 0x080c, 0x9bbe, 0x0904, 0x619d, 0x8108, 0xb93e,\r
-+      0x6212, 0x2900, 0x6016, 0x6023, 0x0003, 0x600b, 0xffff, 0x6007,\r
-+      0x0040, 0xa878, 0x605e, 0xa880, 0x9084, 0x00ff, 0x6066, 0xa883,\r
-+      0x0000, 0xa87c, 0xd0ac, 0x05c0, 0xc0dd, 0xa87e, 0xa888, 0x8001,\r
-+      0x1568, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8,\r
-+      0xa816, 0xa864, 0x9094, 0x00f7, 0x9296, 0x0011, 0x11f8, 0x9084,\r
-+      0x00ff, 0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001,\r
-+      0x000f, 0x8001, 0x1df0, 0x2001, 0x8004, 0x6003, 0x0004, 0x6046,\r
-+      0x00f6, 0x2079, 0x0380, 0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0010,\r
-+      0x2c00, 0x7836, 0x781b, 0x8080, 0x00fe, 0x0005, 0x080c, 0x164f,\r
-+      0x601c, 0xc0bd, 0x601e, 0x0c38, 0x0006, 0x2001, 0x00e8, 0x8001,\r
-+      0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e, 0xd0b4, 0x190c, 0x1ad2,\r
-+      0x2001, 0x8004, 0x6003, 0x0002, 0x08d0, 0x81ff, 0x1110, 0xb88b,\r
-+      0x0001, 0x2908, 0xb8bc, 0xb9be, 0x9005, 0x1110, 0xb9c2, 0x0020,\r
-+      0x0096, 0x2048, 0xa902, 0x009e, 0x0005, 0x00b6, 0x0126, 0x00c6,\r
-+      0x0026, 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110,\r
-+      0xc285, 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be,\r
-+      0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258,\r
-+      0xba04, 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158,\r
-+      0x080c, 0x6663, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007,\r
-+      0x1110, 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06,\r
-+      0x0006, 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0d65,\r
-+      0x000e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6,\r
-+      0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006,\r
-+      0x1168, 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x665f, 0x1138, 0x9284,\r
-+      0x00ff, 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294,\r
-+      0x00ff, 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005,\r
-+      0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026,\r
-+      0x9190, 0x1000, 0x2204, 0x905d, 0x1180, 0x0096, 0x080c, 0x1022,\r
-+      0x2958, 0x009e, 0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860,\r
-+      0xb8b6, 0x9006, 0xb8a6, 0x080c, 0x5cf6, 0x9006, 0x0010, 0x9085,\r
-+      0x0001, 0x002e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091,\r
-+      0x8000, 0x0026, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0458,\r
-+      0x00d6, 0x9190, 0x1000, 0x2204, 0x905d, 0x0518, 0x2013, 0x0000,\r
-+      0xb8a4, 0x904d, 0x0110, 0x080c, 0x1054, 0x00d6, 0x00c6, 0xb8ac,\r
-+      0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c,\r
-+      0xb847, 0x0110, 0x080c, 0x0fd4, 0x080c, 0x9be7, 0x00ce, 0x0c88,\r
-+      0x00ce, 0x00de, 0x2b48, 0xb8b8, 0xb85e, 0xb8b4, 0xb862, 0x080c,\r
-+      0x1064, 0x00de, 0x9006, 0x002e, 0x012e, 0x009e, 0x00be, 0x0005,\r
-+      0x0016, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0030, 0x9188,\r
-+      0x1000, 0x2104, 0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6,\r
-+      0x0156, 0x0136, 0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c,\r
-+      0xb802, 0x080c, 0x70b7, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120,\r
-+      0x080c, 0x9b66, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6,\r
-+      0x2061, 0x1953, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a,\r
-+      0x7054, 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110,\r
-+      0x2001, 0x0001, 0x6886, 0x2069, 0x1800, 0x68b2, 0x7040, 0xb85e,\r
-+      0x7048, 0xb862, 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276,\r
-+      0xb8b4, 0x20e8, 0xb8b8, 0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004,\r
-+      0x4003, 0x2099, 0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004,\r
-+      0x4003, 0x2069, 0x0200, 0x6817, 0x0001, 0x7040, 0xb86a, 0x7144,\r
-+      0xb96e, 0x7048, 0xb872, 0x7050, 0xb876, 0x2069, 0x0200, 0x6817,\r
-+      0x0000, 0xb8a0, 0x9086, 0x007e, 0x1110, 0x7144, 0xb96e, 0x9182,\r
-+      0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0x9182, 0x0259, 0x1218,\r
-+      0x2009, 0x0007, 0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009, 0x0006,\r
-+      0x00a0, 0x9182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0x9182,\r
-+      0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0x9182, 0x0581, 0x1218,\r
-+      0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0xb992, 0x014e, 0x013e,\r
-+      0x015e, 0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260,\r
-+      0x7034, 0xb896, 0x703c, 0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbc4,\r
-+      0xc384, 0xba00, 0x2009, 0x1873, 0x210c, 0xd0bc, 0x0120, 0xd1ec,\r
-+      0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138,\r
-+      0xc2bd, 0xd0cc, 0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc,\r
-+      0xba02, 0xbbc6, 0x003e, 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096,\r
-+      0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff,\r
-+      0x15c0, 0xaa04, 0x9282, 0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6,\r
-+      0x01d6, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084,\r
-+      0xffc0, 0x9080, 0x0004, 0x2098, 0x2009, 0x0010, 0x20a9, 0x0001,\r
-+      0x4002, 0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0d65,\r
-+      0x3c00, 0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06,\r
-+      0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x1022, 0x0170,\r
-+      0x2900, 0xb8a6, 0xa803, 0x0000, 0x080c, 0x64fb, 0xa807, 0x0001,\r
-+      0xae12, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8,\r
-+      0x0126, 0x2091, 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800,\r
-+      0x9005, 0x1150, 0x080c, 0x650a, 0x1158, 0xa804, 0x908a, 0x0002,\r
-+      0x0218, 0x8001, 0xa806, 0x0020, 0x080c, 0x1054, 0xb8a7, 0x0000,\r
-+      0x009e, 0x012e, 0x0005, 0x0096, 0x00c6, 0xb888, 0x9005, 0x1904,\r
-+      0x63f4, 0xb8c0, 0x904d, 0x0904, 0x63f4, 0x080c, 0x9bbe, 0x0904,\r
-+      0x63f0, 0x8210, 0xba3e, 0xa800, 0xb8c2, 0x9005, 0x1108, 0xb8be,\r
-+      0x2b00, 0x6012, 0x2900, 0x6016, 0x6023, 0x0003, 0x600b, 0xffff,\r
-+      0x6007, 0x0040, 0xa878, 0x605e, 0xa880, 0x9084, 0x00ff, 0x6066,\r
-+      0xa883, 0x0000, 0xa87c, 0xd0ac, 0x01c8, 0xc0dd, 0xa87e, 0xa888,\r
-+      0x8001, 0x1568, 0xa816, 0xa864, 0x9094, 0x00f7, 0x9296, 0x0011,\r
-+      0x1530, 0x9084, 0x00ff, 0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836,\r
-+      0xaa3a, 0x2001, 0x8004, 0x6003, 0x0004, 0x0030, 0x080c, 0x1ad2,\r
-+      0x2001, 0x8004, 0x6003, 0x0002, 0x6046, 0x2001, 0x0010, 0x2c08,\r
-+      0x080c, 0x98b9, 0xb838, 0xba3c, 0x9202, 0x0a04, 0x63a1, 0x0020,\r
-+      0x82ff, 0x1110, 0xb88b, 0x0001, 0x00ce, 0x009e, 0x0005, 0x080c,\r
-+      0x164f, 0x601c, 0xc0bd, 0x601e, 0x08e0, 0x00b6, 0x0096, 0x0016,\r
-+      0x20a9, 0x0800, 0x900e, 0x0016, 0x080c, 0x6270, 0x1158, 0xb8c0,\r
-+      0x904d, 0x0140, 0x3e00, 0x9086, 0x0002, 0x1118, 0xb800, 0xd0bc,\r
-+      0x1108, 0x0041, 0x001e, 0x8108, 0x1f04, 0x6403, 0x001e, 0x00be,\r
-+      0x009e, 0x0005, 0x0096, 0x0016, 0xb8c0, 0x904d, 0x0188, 0xa800,\r
-+      0xb8c2, 0x9005, 0x1108, 0xb8be, 0x9006, 0xa802, 0xa867, 0x0103,\r
-+      0xab7a, 0xa877, 0x0000, 0x080c, 0xbb45, 0x080c, 0x6996, 0x0c60,\r
-+      0x001e, 0x009e, 0x0005, 0x0086, 0x9046, 0xb8c0, 0x904d, 0x0198,\r
-+      0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0128, 0x2940, 0xa800,\r
-+      0x904d, 0x0148, 0x0ca8, 0xa800, 0x88ff, 0x1110, 0xb8c2, 0x0008,\r
-+      0xa002, 0xa803, 0x0000, 0x008e, 0x0005, 0x901e, 0x0010, 0x2019,\r
-+      0x0001, 0x00e6, 0x0096, 0x00c6, 0x0086, 0x0026, 0x0126, 0x2091,\r
-+      0x8000, 0x2071, 0x19b8, 0x9046, 0x7028, 0x9065, 0x01e8, 0x6014,\r
-+      0x2068, 0x83ff, 0x0120, 0x605c, 0x9606, 0x0158, 0x0030, 0xa86c,\r
-+      0x9406, 0x1118, 0xa870, 0x9506, 0x0120, 0x2c40, 0x600c, 0x2060,\r
-+      0x0c60, 0x600c, 0x0006, 0x0066, 0x2830, 0x080c, 0x9110, 0x006e,\r
-+      0x000e, 0x83ff, 0x0508, 0x0c08, 0x9046, 0xb8c0, 0x904d, 0x01e0,\r
-+      0x83ff, 0x0120, 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406,\r
-+      0x1118, 0xa870, 0x9506, 0x0120, 0x2940, 0xa800, 0x2048, 0x0c70,\r
-+      0xb8c0, 0xaa00, 0x0026, 0x9906, 0x1110, 0xbac2, 0x0008, 0xa202,\r
-+      0x000e, 0x83ff, 0x0108, 0x0c10, 0x002e, 0x008e, 0x00ce, 0x009e,\r
-+      0x00ee, 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005,\r
-+      0x080c, 0x655f, 0x0128, 0x080c, 0xb908, 0x0010, 0x9085, 0x0001,\r
-+      0x0005, 0x080c, 0x655f, 0x0128, 0x080c, 0xb8a9, 0x0010, 0x9085,\r
-+      0x0001, 0x0005, 0x080c, 0x655f, 0x0128, 0x080c, 0xb905, 0x0010,\r
-+      0x9085, 0x0001, 0x0005, 0x080c, 0x655f, 0x0128, 0x080c, 0xb8c8,\r
-+      0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x655f, 0x0128, 0x080c,\r
-+      0xb949, 0x0010, 0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118,\r
-+      0x9085, 0x0001, 0x0005, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8,\r
-+      0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0,\r
-+      0x9080, 0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002,\r
-+      0x9606, 0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006,\r
-+      0x01ce, 0x013e, 0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x0004, 0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104,\r
-+      0x01de, 0x014e, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e,\r
-+      0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080,\r
-+      0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606,\r
-+      0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6,\r
-+      0x3300, 0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004,\r
-+      0x01de, 0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126,\r
-+      0x2091, 0x8000, 0xb8a4, 0x904d, 0x1128, 0x080c, 0x1022, 0x0168,\r
-+      0x2900, 0xb8a6, 0x080c, 0x64fb, 0xa803, 0x0001, 0xa807, 0x0000,\r
-+      0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096,\r
-+      0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000,\r
-+      0x080c, 0x1054, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c,\r
-+      0xd0a4, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x70b7, 0x01b0, 0x71c0,\r
-+      0x81ff, 0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080,\r
-+      0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086,\r
-+      0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1853, 0x7804,\r
-+      0x00d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6270,\r
-+      0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118,\r
-+      0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108,\r
-+      0x1f04, 0x6585, 0x015e, 0x080c, 0x6625, 0x0120, 0x2001, 0x1956,\r
-+      0x200c, 0x0030, 0x2079, 0x1853, 0x7804, 0x0030, 0x2009, 0x07d0,\r
-+      0x2011, 0x65af, 0x080c, 0x821d, 0x00fe, 0x00be, 0x0005, 0x00b6,\r
-+      0x2011, 0x65af, 0x080c, 0x8159, 0x080c, 0x6625, 0x01d8, 0x2001,\r
-+      0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6663,\r
-+      0x0130, 0x2009, 0x07d0, 0x2011, 0x65af, 0x080c, 0x821d, 0x00e6,\r
-+      0x2071, 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2ddb,\r
-+      0x00ee, 0x04d0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016,\r
-+      0x080c, 0x6270, 0x1558, 0xb800, 0xd0ec, 0x0540, 0x0046, 0xbaa0,\r
-+      0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xd273, 0xb800, 0xc0e5,\r
-+      0xc0ec, 0xb802, 0x080c, 0x665f, 0x2001, 0x0707, 0x1128, 0xb804,\r
-+      0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x080c, 0x98c8, 0x2019,\r
-+      0x0029, 0x080c, 0x863b, 0x0076, 0x903e, 0x080c, 0x852a, 0x900e,\r
-+      0x080c, 0xcfc8, 0x007e, 0x004e, 0x080c, 0x98e4, 0x001e, 0x8108,\r
-+      0x1f04, 0x65d7, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010,\r
-+      0x2058, 0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x7810, 0x00b6,\r
-+      0x2058, 0xb800, 0x00be, 0xd0ac, 0x0005, 0x6010, 0x00b6, 0x905d,\r
-+      0x0108, 0xb800, 0x00be, 0xd0bc, 0x0005, 0x00b6, 0x00f6, 0x2001,\r
-+      0x107e, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be,\r
-+      0x0005, 0x0126, 0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290,\r
-+      0x1000, 0x2204, 0x9b06, 0x190c, 0x0d65, 0x000e, 0xba00, 0x9005,\r
-+      0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005,\r
-+      0x2011, 0x1836, 0x2204, 0xd0cc, 0x0138, 0x2001, 0x1954, 0x200c,\r
-+      0x2011, 0x6655, 0x080c, 0x821d, 0x0005, 0x2011, 0x6655, 0x080c,\r
-+      0x8159, 0x2011, 0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c,\r
-+      0x538d, 0xd0ac, 0x0005, 0x080c, 0x538d, 0xd0a4, 0x0005, 0x0016,\r
-+      0xb904, 0x9184, 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016,\r
-+      0xb904, 0x9184, 0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005,\r
-+      0x00b6, 0x00f6, 0x080c, 0xbf61, 0x0158, 0x70d8, 0x9084, 0x0028,\r
-+      0x0138, 0x2001, 0x107f, 0x2004, 0x905d, 0x0110, 0xb8c4, 0xd094,\r
-+      0x00fe, 0x00be, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x0076,\r
-+      0x00b6, 0x2001, 0x1817, 0x203c, 0x9780, 0x318b, 0x203d, 0x97bc,\r
-+      0xff00, 0x873f, 0x9006, 0x2018, 0x2008, 0x9284, 0x8000, 0x0110,\r
-+      0x2019, 0x0001, 0x9294, 0x7fff, 0x2100, 0x9706, 0x0190, 0x91a0,\r
-+      0x1000, 0x2404, 0x905d, 0x0168, 0xb804, 0x9084, 0x00ff, 0x9086,\r
-+      0x0006, 0x1138, 0x83ff, 0x0118, 0xb89c, 0xd0a4, 0x0110, 0x8211,\r
-+      0x0158, 0x8108, 0x83ff, 0x0120, 0x9182, 0x0800, 0x0e28, 0x0068,\r
-+      0x9182, 0x007e, 0x0e08, 0x0048, 0x00be, 0x007e, 0x004e, 0x003e,\r
-+      0x001e, 0x9085, 0x0001, 0x000e, 0x0005, 0x00be, 0x007e, 0x004e,\r
-+      0x003e, 0x001e, 0x9006, 0x000e, 0x0005, 0x0046, 0x0056, 0x0076,\r
-+      0x00b6, 0x2100, 0x9084, 0x7fff, 0x9080, 0x1000, 0x2004, 0x905d,\r
-+      0x0130, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0550, 0x9184,\r
-+      0x8000, 0x0580, 0x2001, 0x1817, 0x203c, 0x9780, 0x318b, 0x203d,\r
-+      0x97bc, 0xff00, 0x873f, 0x9006, 0x2020, 0x2400, 0x9706, 0x01a0,\r
-+      0x94a8, 0x1000, 0x2504, 0x905d, 0x0178, 0xb804, 0x9084, 0x00ff,\r
-+      0x9086, 0x0006, 0x1148, 0xb89c, 0xd0a4, 0x0130, 0xb814, 0x9206,\r
-+      0x1118, 0xb810, 0x9306, 0x0128, 0x8420, 0x9482, 0x0800, 0x0e28,\r
-+      0x0048, 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9085,\r
-+      0x0001, 0x0005, 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e,\r
-+      0x9006, 0x0005, 0x2071, 0x1906, 0x7003, 0x0001, 0x7007, 0x0000,\r
-+      0x9006, 0x7012, 0x7016, 0x701a, 0x701e, 0x700a, 0x7046, 0x2001,\r
-+      0x1919, 0x2003, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x191a,\r
-+      0x900e, 0x710a, 0x080c, 0x538d, 0xd0fc, 0x1140, 0x080c, 0x538d,\r
-+      0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x0400, 0x2001, 0x1873,\r
-+      0x200c, 0x9184, 0x0007, 0x9006, 0x0002, 0x673e, 0x673e, 0x673e,\r
-+      0x673e, 0x673e, 0x6755, 0x6763, 0x673e, 0x7003, 0x0003, 0x2009,\r
-+      0x1874, 0x210c, 0x9184, 0xff00, 0x8007, 0x9005, 0x1110, 0x2001,\r
-+      0x0002, 0x7006, 0x0018, 0x7003, 0x0005, 0x0c88, 0x00ee, 0x001e,\r
-+      0x0005, 0x00e6, 0x2071, 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6,\r
-+      0x2071, 0x1906, 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001,\r
-+      0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x7429, 0x6a60, 0x9200,\r
-+      0x7002, 0x6864, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6860,\r
-+      0x7002, 0x6864, 0x7006, 0x6868, 0x700a, 0x686c, 0x700e, 0x6844,\r
-+      0x9005, 0x1110, 0x7012, 0x7016, 0x684c, 0x701a, 0x701c, 0x9085,\r
-+      0x0040, 0x701e, 0x7037, 0x0019, 0x702b, 0x0001, 0x00e6, 0x2071,\r
-+      0x1906, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000,\r
-+      0x00ee, 0x9006, 0x00ee, 0x0005, 0xa868, 0xd0fc, 0x11d8, 0x00e6,\r
-+      0x0026, 0x2001, 0x191a, 0x2004, 0x9005, 0x0904, 0x699b, 0xa87c,\r
-+      0xd0bc, 0x1904, 0x699b, 0xa978, 0xa874, 0x9105, 0x1904, 0x699b,\r
-+      0x2001, 0x191a, 0x2004, 0x0002, 0x699b, 0x67ef, 0x682b, 0x682b,\r
-+      0x699b, 0x682b, 0x0005, 0xa868, 0xd0fc, 0x1500, 0x00e6, 0x0026,\r
-+      0x2009, 0x191a, 0x210c, 0x81ff, 0x0904, 0x699b, 0xa87c, 0xd0cc,\r
-+      0x0904, 0x699b, 0xa880, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904,\r
-+      0x699b, 0x9186, 0x0003, 0x0904, 0x682b, 0x9186, 0x0005, 0x0904,\r
-+      0x682b, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005, 0xa84f,\r
-+      0x8020, 0xa853, 0x0016, 0x2071, 0x1906, 0x701c, 0x9005, 0x1904,\r
-+      0x6b3e, 0x0e04, 0x6b89, 0x2071, 0x0000, 0xa84c, 0x7082, 0xa850,\r
-+      0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080,\r
-+      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2071, 0x1800,\r
-+      0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158, 0xa802, 0x2900,\r
-+      0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x002e, 0x00ee,\r
-+      0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,\r
-+      0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050,\r
-+      0x2071, 0x1906, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6920,\r
-+      0x782c, 0x908c, 0x0780, 0x190c, 0x6cb0, 0x8004, 0x8004, 0x8004,\r
-+      0x9084, 0x0003, 0x0002, 0x6849, 0x6920, 0x686e, 0x68bb, 0x080c,\r
-+      0x0d65, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1170,\r
-+      0x2071, 0x19d4, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004,\r
-+      0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c,\r
-+      0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,\r
-+      0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x0c10, 0x2071, 0x1800,\r
-+      0x2900, 0x7822, 0xa804, 0x900d, 0x15a8, 0x7824, 0x00e6, 0x2071,\r
-+      0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x182f, 0x210c, 0x918a,\r
-+      0x0040, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108, 0x2102,\r
-+      0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,\r
-+      0x70bc, 0x8000, 0x70be, 0x080c, 0x8074, 0x782c, 0x9094, 0x0780,\r
-+      0x190c, 0x6cb0, 0xd0a4, 0x19c8, 0x2071, 0x19d4, 0x703c, 0x9005,\r
-+      0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e,\r
-+      0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,\r
-+      0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,\r
-+      0x8074, 0x0804, 0x6875, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071,\r
-+      0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,\r
-+      0x080c, 0x8074, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4,\r
-+      0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c,\r
-+      0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x1560, 0x2071,\r
-+      0x19d4, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005,\r
-+      0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010,\r
-+      0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008,\r
-+      0x711e, 0x2148, 0xa804, 0x900d, 0x1170, 0x2071, 0x19d4, 0x703c,\r
-+      0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe,\r
-+      0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,\r
-+      0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,\r
-+      0x9200, 0x70be, 0x080c, 0x8074, 0x00fe, 0x002e, 0x00ee, 0x0005,\r
-+      0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,\r
-+      0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6975,\r
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c, 0x1198, 0x701c,\r
-+      0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800,\r
-+      0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0,\r
-+      0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4,\r
-+      0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802,\r
-+      0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8074, 0x782c,\r
-+      0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4, 0x1d60, 0x00ee, 0x2071,\r
-+      0x19d4, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005,\r
-+      0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800,\r
-+      0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,\r
-+      0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x00ee,\r
-+      0x0804, 0x6930, 0xa868, 0xd0fc, 0x1560, 0x0096, 0xa804, 0xa807,\r
-+      0x0000, 0x904d, 0x190c, 0x0fd4, 0x009e, 0x0018, 0xa868, 0xd0fc,\r
-+      0x1500, 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050,\r
-+      0x2071, 0x1906, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6ab8,\r
-+      0x782c, 0x908c, 0x0780, 0x190c, 0x6cb0, 0x8004, 0x8004, 0x8004,\r
-+      0x9084, 0x0003, 0x0002, 0x69ba, 0x6ab8, 0x69d5, 0x6a47, 0x080c,\r
-+      0x0d65, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d,\r
-+      0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148,\r
-+      0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,\r
-+      0x9200, 0x70be, 0x080c, 0x8074, 0x0c60, 0x2071, 0x1800, 0x2900,\r
-+      0x7822, 0xa804, 0x900d, 0x1904, 0x6a36, 0x7830, 0xd0dc, 0x1120,\r
-+      0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, 0x0040,\r
-+      0x712c, 0xd19c, 0x1170, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040,\r
-+      0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108, 0x2102, 0x00ee,\r
-+      0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,\r
-+      0x8000, 0x70be, 0x080c, 0x8074, 0x782c, 0x9094, 0x0780, 0x190c,\r
-+      0x6cb0, 0xd0a4, 0x19c8, 0x0e04, 0x6a2d, 0x7838, 0x7938, 0x910e,\r
-+      0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de,\r
-+      0x2001, 0x1917, 0x200c, 0xc184, 0x2102, 0x2091, 0x4080, 0x2001,\r
-+      0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2009, 0x1919, 0x200b,\r
-+      0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2001, 0x1917, 0x200c,\r
-+      0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c,\r
-+      0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,\r
-+      0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x0804, 0x69e4, 0x0096,\r
-+      0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900,\r
-+      0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8074, 0x782c, 0x9094,\r
-+      0x0780, 0x190c, 0x6cb0, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6a8b,\r
-+      0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,\r
-+      0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080,\r
-+      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2009, 0x1919,\r
-+      0x200b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c,\r
-+      0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x11e0, 0x00fe,\r
-+      0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x0c58, 0x009e,\r
-+      0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,\r
-+      0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1120, 0x00fe,\r
-+      0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,\r
-+      0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,\r
-+      0x9200, 0x70be, 0x080c, 0x8074, 0x00fe, 0x002e, 0x00ee, 0x0005,\r
-+      0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,\r
-+      0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6b29,\r
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c, 0x11b0, 0x701c,\r
-+      0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010, 0x8001, 0x7012,\r
-+      0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094,\r
-+      0x0780, 0x190c, 0x6cb0, 0xd09c, 0x0d50, 0x782c, 0x9094, 0x0780,\r
-+      0x190c, 0x6cb0, 0xd0a4, 0x05c8, 0x00e6, 0x7824, 0x2048, 0x2071,\r
-+      0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,\r
-+      0x080c, 0x8074, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4,\r
-+      0x1d60, 0x00ee, 0x0e04, 0x6b22, 0x7838, 0x7938, 0x910e, 0x1de0,\r
-+      0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044,\r
-+      0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,\r
-+      0x190c, 0x11be, 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, 0x002e,\r
-+      0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe, 0x002e, 0x00ee,\r
-+      0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904,\r
-+      0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,\r
-+      0x70be, 0x080c, 0x8074, 0x00ee, 0x0804, 0x6ac8, 0x2071, 0x1906,\r
-+      0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,\r
-+      0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,\r
-+      0x1128, 0x1e04, 0x6b69, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800,\r
-+      0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,\r
-+      0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x0e04,\r
-+      0x6b53, 0x2071, 0x1906, 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d18,\r
-+      0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036,\r
-+      0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,\r
-+      0x190c, 0x11be, 0x2071, 0x1906, 0x080c, 0x6c9c, 0x002e, 0x00ee,\r
-+      0x0005, 0x2071, 0x1906, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000,\r
-+      0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e,\r
-+      0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071,\r
-+      0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,\r
-+      0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074,\r
-+      0x002e, 0x00ee, 0x0005, 0x0006, 0xa87c, 0x0006, 0xa867, 0x0103,\r
-+      0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001d, 0x20a0,\r
-+      0x9006, 0x4004, 0x000e, 0x9084, 0x00ff, 0xa87e, 0x000e, 0xa87a,\r
-+      0xa982, 0x0005, 0x2071, 0x1906, 0x7004, 0x0002, 0x6bd4, 0x6bd5,\r
-+      0x6c9b, 0x6bd5, 0x0d65, 0x6c9b, 0x0005, 0x2001, 0x191a, 0x2004,\r
-+      0x0002, 0x6bdf, 0x6bdf, 0x6c34, 0x6c35, 0x6bdf, 0x6c35, 0x0126,\r
-+      0x2091, 0x8000, 0x1e0c, 0x6cbb, 0x701c, 0x904d, 0x01e0, 0xa84c,\r
-+      0x9005, 0x01d8, 0x0e04, 0x6c03, 0xa94c, 0x2071, 0x0000, 0x7182,\r
-+      0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091,\r
-+      0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2071,\r
-+      0x1906, 0x080c, 0x6c9c, 0x012e, 0x0470, 0x2001, 0x005b, 0x2004,\r
-+      0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c, 0x2071, 0x1906, 0x1510,\r
-+      0x2071, 0x1906, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086,\r
-+      0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e,\r
-+      0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x2071, 0x1906,\r
-+      0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005,\r
-+      0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6, 0x2008, 0x2069,\r
-+      0x19d4, 0x683c, 0x9005, 0x0760, 0x0158, 0x9186, 0x0003, 0x0540,\r
-+      0x2001, 0x1814, 0x2004, 0x2009, 0x1b1e, 0x210c, 0x9102, 0x1500,\r
-+      0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c, 0x6838, 0x9106,\r
-+      0x0190, 0x0e04, 0x6c67, 0x2069, 0x0000, 0x6837, 0x8040, 0x6833,\r
-+      0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,\r
-+      0xd084, 0x190c, 0x11be, 0x2069, 0x19d4, 0x683f, 0xffff, 0x012e,\r
-+      0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6d31, 0x701c, 0x904d,\r
-+      0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x15c9, 0xd09c,\r
-+      0x1500, 0x2071, 0x1906, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff,\r
-+      0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108,\r
-+      0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x701c,\r
-+      0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108,\r
-+      0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091, 0x8000, 0x701c,\r
-+      0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005,\r
-+      0x1108, 0x701a, 0x012e, 0x080c, 0x1054, 0x0005, 0x012e, 0x0005,\r
-+      0x2091, 0x8000, 0x0e04, 0x6cb2, 0x0006, 0x0016, 0x2001, 0x8004,\r
-+      0x0006, 0x0804, 0x0d6e, 0x0096, 0x00f6, 0x2079, 0x0050, 0x7044,\r
-+      0xd084, 0x01e0, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0,\r
-+      0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091,\r
-+      0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2009,\r
-+      0x1919, 0x200b, 0x0000, 0x00fe, 0x009e, 0x0005, 0x782c, 0x9094,\r
-+      0x0780, 0x1971, 0xd0a4, 0x0db8, 0x2009, 0x1919, 0x2104, 0x8000,\r
-+      0x200a, 0x9082, 0x000f, 0x0e78, 0x00e6, 0x2071, 0x1800, 0x7824,\r
-+      0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x182f,\r
-+      0x210c, 0x918a, 0x0040, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c,\r
-+      0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802,\r
-+      0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8074, 0x782c,\r
-+      0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4, 0x19c8, 0x7838, 0x7938,\r
-+      0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,\r
-+      0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,\r
-+      0x11be, 0x2009, 0x1919, 0x200b, 0x0000, 0x00ee, 0x00fe, 0x009e,\r
-+      0x0005, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084,\r
-+      0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,\r
-+      0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089,\r
-+      0x2004, 0xd084, 0x190c, 0x11be, 0x00fe, 0x0005, 0x782c, 0x9094,\r
-+      0x0780, 0x190c, 0x6cb0, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800,\r
-+      0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,\r
-+      0x70be, 0x080c, 0x8074, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0,\r
-+      0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x191a,\r
-+      0x6808, 0x690a, 0x2069, 0x19d4, 0x9102, 0x1118, 0x683c, 0x9005,\r
-+      0x1328, 0x2001, 0x191b, 0x200c, 0x810d, 0x693e, 0x00de, 0x00ee,\r
-+      0x00fe, 0x0005, 0x7094, 0x908a, 0x0029, 0x1a0c, 0x0d65, 0x9082,\r
-+      0x001d, 0x003b, 0x0026, 0x2011, 0x1e00, 0x080c, 0x286d, 0x002e,\r
-+      0x0005, 0x6e5d, 0x6de3, 0x6dff, 0x6e29, 0x6e4c, 0x6e8c, 0x6e9e,\r
-+      0x6dff, 0x6e74, 0x6d9e, 0x6dcc, 0x6d9d, 0x0005, 0x00d6, 0x2069,\r
-+      0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005, 0x1518, 0x7097,\r
-+      0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c, 0x71f8, 0x6028,\r
-+      0x9085, 0x0600, 0x602a, 0x00b0, 0x7097, 0x0028, 0x2069, 0x1960,\r
-+      0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a, 0x00e6, 0x0036,\r
-+      0x0046, 0x0056, 0x2071, 0x1a3c, 0x080c, 0x195f, 0x005e, 0x004e,\r
-+      0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804,\r
-+      0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x7097, 0x0028, 0x2069,\r
-+      0x1960, 0x2d04, 0x7002, 0x080c, 0x729a, 0x6028, 0x9085, 0x0600,\r
-+      0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2833,\r
-+      0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x6f0f, 0xd1d4, 0x1160,\r
-+      0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097, 0x0020, 0x080c, 0x6f0f,\r
-+      0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005, 0x2001,\r
-+      0x0088, 0x080c, 0x2833, 0x6124, 0xd1cc, 0x11e8, 0xd1dc, 0x11c0,\r
-+      0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, 0x080c, 0x1989, 0x60e3,\r
-+      0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x70e3, 0x2001, 0x0080,\r
-+      0x080c, 0x2833, 0x7097, 0x0028, 0x0058, 0x7097, 0x001e, 0x0040,\r
-+      0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010, 0x7097, 0x001f,\r
-+      0x0005, 0x080c, 0x1989, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e,\r
-+      0x080c, 0x70e3, 0x2001, 0x0080, 0x080c, 0x2833, 0x6124, 0xd1d4,\r
-+      0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158,\r
-+      0x7097, 0x0028, 0x0040, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d,\r
-+      0x0010, 0x7097, 0x001f, 0x0005, 0x2001, 0x00a0, 0x080c, 0x2833,\r
-+      0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1989, 0x7097,\r
-+      0x001e, 0x0010, 0x7097, 0x001d, 0x0005, 0x080c, 0x6f98, 0x6124,\r
-+      0xd1dc, 0x1188, 0x080c, 0x6f0f, 0x0016, 0x080c, 0x1989, 0x001e,\r
-+      0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x7097, 0x001e, 0x0020, 0x7097,\r
-+      0x001f, 0x080c, 0x6f0f, 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c,\r
-+      0x2833, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc,\r
-+      0x1128, 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d,\r
-+      0x0010, 0x7097, 0x0021, 0x0005, 0x080c, 0x6f98, 0x6124, 0xd1d4,\r
-+      0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028,\r
-+      0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005, 0x0006, 0x2001,\r
-+      0x0090, 0x080c, 0x2833, 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc,\r
-+      0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x7097, 0x001e, 0x0040,\r
-+      0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010, 0x7097, 0x001f,\r
-+      0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100,\r
-+      0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x080c, 0x70b7,\r
-+      0x11f8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01d0, 0xc1b4, 0x2102,\r
-+      0x0026, 0x2011, 0x0200, 0x080c, 0x286d, 0x002e, 0x080c, 0x2819,\r
-+      0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, 0x2833, 0x080c,\r
-+      0x73b7, 0x080c, 0x5cdc, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408,\r
-+      0x080c, 0x70d1, 0x0150, 0x080c, 0x70c8, 0x1138, 0x2001, 0x0001,\r
-+      0x080c, 0x23c9, 0x080c, 0x708b, 0x00a0, 0x080c, 0x6f95, 0x0178,\r
-+      0x2001, 0x0001, 0x080c, 0x23c9, 0x7094, 0x9086, 0x001e, 0x0120,\r
-+      0x7094, 0x9086, 0x0022, 0x1118, 0x7097, 0x0025, 0x0010, 0x7097,\r
-+      0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026,\r
-+      0x2011, 0x6f20, 0x080c, 0x825f, 0x002e, 0x0016, 0x0026, 0x2009,\r
-+      0x0064, 0x2011, 0x6f20, 0x080c, 0x8256, 0x002e, 0x001e, 0x0005,\r
-+      0x00e6, 0x00f6, 0x0016, 0x080c, 0x8fb7, 0x2071, 0x1800, 0x080c,\r
-+      0x6eb9, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036,\r
-+      0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x080c, 0x8fb7, 0x2061,\r
-+      0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x6028,\r
-+      0xc09c, 0x602a, 0x080c, 0x98c8, 0x2011, 0x0003, 0x080c, 0x9339,\r
-+      0x2011, 0x0002, 0x080c, 0x9343, 0x080c, 0x9206, 0x080c, 0x820b,\r
-+      0x0036, 0x901e, 0x080c, 0x9286, 0x003e, 0x080c, 0x98e4, 0x60e3,\r
-+      0x0000, 0x080c, 0xd5fb, 0x080c, 0xd616, 0x2009, 0x0004, 0x080c,\r
-+      0x281f, 0x080c, 0x273f, 0x2001, 0x1800, 0x2003, 0x0004, 0x2011,\r
-+      0x0008, 0x080c, 0x286d, 0x2011, 0x6f20, 0x080c, 0x825f, 0x080c,\r
-+      0x70d1, 0x0118, 0x9006, 0x080c, 0x2833, 0x080c, 0x0bab, 0x2001,\r
-+      0x0001, 0x080c, 0x23c9, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce,\r
-+      0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x6f2d,\r
-+      0x2071, 0x19d4, 0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110,\r
-+      0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005,\r
-+      0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0,\r
-+      0x080c, 0x2833, 0x0156, 0x20a9, 0x002d, 0x1d04, 0x6fa5, 0x2091,\r
-+      0x6000, 0x1f04, 0x6fa5, 0x015e, 0x00d6, 0x2069, 0x1800, 0x6898,\r
-+      0x8001, 0x0220, 0x0118, 0x689a, 0x00de, 0x0005, 0x689b, 0x0014,\r
-+      0x68e8, 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001, 0x1da8, 0x080c,\r
-+      0x826b, 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,\r
-+      0x0140, 0x2071, 0x1800, 0x080c, 0x73c6, 0x2001, 0x193e, 0x2003,\r
-+      0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, 0x2498, 0x9006,\r
-+      0x080c, 0x2833, 0x080c, 0x5b97, 0x0026, 0x2011, 0xffff, 0x080c,\r
-+      0x286d, 0x002e, 0x602b, 0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005,\r
-+      0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,\r
-+      0x1800, 0x2001, 0x194e, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186,\r
-+      0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158,\r
-+      0x0804, 0x707b, 0x7097, 0x0022, 0x0040, 0x7097, 0x0021, 0x0028,\r
-+      0x7097, 0x0023, 0x0010, 0x7097, 0x0024, 0x60e3, 0x0000, 0x6887,\r
-+      0x0001, 0x2001, 0x0001, 0x080c, 0x2498, 0x080c, 0x98c8, 0x0026,\r
-+      0x080c, 0x9b6d, 0x002e, 0x080c, 0x98e4, 0x7000, 0x908e, 0x0004,\r
-+      0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126,\r
-+      0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e,\r
-+      0x015e, 0x080c, 0xbf61, 0x0118, 0x9006, 0x080c, 0x285d, 0x0804,\r
-+      0x7087, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2819,\r
-+      0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c, 0x2833, 0x1f04,\r
-+      0x702c, 0x080c, 0x710e, 0x012e, 0x015e, 0x080c, 0x70c8, 0x0170,\r
-+      0x6044, 0x9005, 0x0130, 0x080c, 0x710e, 0x9006, 0x8001, 0x1df0,\r
-+      0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x710e, 0x080c, 0xbf61,\r
-+      0x0118, 0x9006, 0x080c, 0x285d, 0x0016, 0x0026, 0x7000, 0x908e,\r
-+      0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x6f2d, 0x080c, 0x821d,\r
-+      0x002e, 0x001e, 0x080c, 0x806b, 0x7034, 0xc085, 0x7036, 0x2001,\r
-+      0x194e, 0x2003, 0x0004, 0x080c, 0x6d82, 0x080c, 0x70c8, 0x0138,\r
-+      0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, 0x73bc, 0x00ee,\r
-+      0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,\r
-+      0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x8082, 0x080c, 0x8074,\r
-+      0x080c, 0x73c6, 0x2001, 0x193e, 0x2003, 0x0000, 0x9006, 0x7096,\r
-+      0x60e2, 0x6886, 0x080c, 0x2498, 0x9006, 0x080c, 0x2833, 0x6043,\r
-+      0x0090, 0x6043, 0x0010, 0x0026, 0x2011, 0xffff, 0x080c, 0x286d,\r
-+      0x002e, 0x602b, 0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006,\r
-+      0x2001, 0x194d, 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006,\r
-+      0x080c, 0x5391, 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005,\r
-+      0x0006, 0x080c, 0x5391, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e,\r
-+      0x0005, 0x0006, 0x080c, 0x5391, 0x9084, 0x0030, 0x9086, 0x0010,\r
-+      0x000e, 0x0005, 0x0006, 0x080c, 0x5391, 0x9084, 0x0030, 0x9086,\r
-+      0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004,\r
-+      0x908c, 0x0013, 0x0180, 0x0020, 0x080c, 0x24b8, 0x900e, 0x0028,\r
-+      0x080c, 0x665f, 0x1dc8, 0x2009, 0x0002, 0x2019, 0x0028, 0x080c,\r
-+      0x2fc5, 0x9006, 0x0019, 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071,\r
-+      0x180c, 0x2e04, 0x0130, 0x080c, 0xbf5a, 0x1128, 0x9085, 0x0010,\r
-+      0x0010, 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006,\r
-+      0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006,\r
-+      0x602f, 0x0100, 0x602f, 0x0000, 0x602f, 0x0040, 0x602f, 0x0000,\r
-+      0x20a9, 0x0002, 0x080c, 0x27fa, 0x0026, 0x2011, 0x0040, 0x080c,\r
-+      0x286d, 0x002e, 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e,\r
-+      0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001,\r
-+      0x080c, 0x2498, 0x2001, 0x00a0, 0x0006, 0x080c, 0xbf61, 0x000e,\r
-+      0x0130, 0x080c, 0x2851, 0x9006, 0x080c, 0x285d, 0x0010, 0x080c,\r
-+      0x2833, 0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6,\r
-+      0x2079, 0x0100, 0x080c, 0x27aa, 0x00fe, 0x000e, 0x6052, 0x0005,\r
-+      0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061,\r
-+      0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x9926, 0x0158,\r
-+      0x2001, 0x0386, 0x2004, 0xd0b4, 0x1130, 0x2001, 0x0016, 0x080c,\r
-+      0x98b9, 0x0804, 0x71ea, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102,\r
-+      0x6028, 0x9084, 0xe1ff, 0x602a, 0x2011, 0x0200, 0x080c, 0x286d,\r
-+      0x2001, 0x0090, 0x080c, 0x2833, 0x20a9, 0x0366, 0x6024, 0xd0cc,\r
-+      0x1558, 0x1d04, 0x7186, 0x2091, 0x6000, 0x1f04, 0x7186, 0x080c,\r
-+      0x98c8, 0x2011, 0x0003, 0x080c, 0x9339, 0x2011, 0x0002, 0x080c,\r
-+      0x9343, 0x080c, 0x9206, 0x901e, 0x080c, 0x9286, 0x2001, 0x0386,\r
-+      0x2003, 0x7000, 0x080c, 0x98e4, 0x2001, 0x00a0, 0x080c, 0x2833,\r
-+      0x080c, 0x73b7, 0x080c, 0x5cdc, 0x080c, 0xbf61, 0x0110, 0x080c,\r
-+      0x0cd1, 0x9085, 0x0001, 0x04e0, 0x2001, 0x0386, 0x2004, 0xd0ac,\r
-+      0x0110, 0x080c, 0x1989, 0x60e3, 0x0000, 0x2001, 0x0002, 0x080c,\r
-+      0x2498, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2833, 0x20a9, 0x0366,\r
-+      0x2011, 0x1e00, 0x080c, 0x286d, 0x2009, 0x1e00, 0x080c, 0x2819,\r
-+      0x6024, 0x910c, 0x0140, 0x1d04, 0x71c8, 0x2091, 0x6000, 0x1f04,\r
-+      0x71c8, 0x0804, 0x718f, 0x2001, 0x0386, 0x2003, 0x7000, 0x6028,\r
-+      0x9085, 0x1e00, 0x602a, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001,\r
-+      0x0008, 0x6886, 0x080c, 0xbf61, 0x0110, 0x080c, 0x0cd1, 0x9006,\r
-+      0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,\r
-+      0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061,\r
-+      0x0100, 0x2071, 0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001,\r
-+      0x020b, 0x2004, 0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069,\r
-+      0x1a47, 0x2d04, 0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084,\r
-+      0x00c0, 0x0120, 0x6884, 0x9005, 0x1904, 0x7261, 0x2001, 0x0088,\r
-+      0x080c, 0x2833, 0x9006, 0x60e2, 0x6886, 0x080c, 0x2498, 0x2069,\r
-+      0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x01d0, 0x6028,\r
-+      0x9084, 0xfbff, 0x602a, 0x2011, 0x0400, 0x080c, 0x286d, 0x2069,\r
-+      0x1960, 0x7000, 0x206a, 0x7097, 0x0026, 0x7003, 0x0001, 0x20a9,\r
-+      0x0002, 0x1d04, 0x7241, 0x2091, 0x6000, 0x1f04, 0x7241, 0x0804,\r
-+      0x7292, 0x2069, 0x0140, 0x20a9, 0x0384, 0x2011, 0x1e00, 0x080c,\r
-+      0x286d, 0x2009, 0x1e00, 0x080c, 0x2819, 0x6024, 0x910c, 0x0528,\r
-+      0x9084, 0x1a00, 0x1510, 0x1d04, 0x724d, 0x2091, 0x6000, 0x1f04,\r
-+      0x724d, 0x080c, 0x98c8, 0x2011, 0x0003, 0x080c, 0x9339, 0x2011,\r
-+      0x0002, 0x080c, 0x9343, 0x080c, 0x9206, 0x901e, 0x080c, 0x9286,\r
-+      0x080c, 0x98e4, 0x2001, 0x00a0, 0x080c, 0x2833, 0x080c, 0x73b7,\r
-+      0x080c, 0x5cdc, 0x9085, 0x0001, 0x00a8, 0x2001, 0x0080, 0x080c,\r
-+      0x2833, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118,\r
-+      0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x0002, 0x080c, 0x2498,\r
-+      0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,\r
-+      0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,\r
-+      0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0,\r
-+      0x01e8, 0x080c, 0x98c8, 0x2011, 0x0003, 0x080c, 0x9339, 0x2011,\r
-+      0x0002, 0x080c, 0x9343, 0x080c, 0x9206, 0x901e, 0x080c, 0x9286,\r
-+      0x080c, 0x98e4, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, 0x2833,\r
-+      0x080c, 0x73b7, 0x080c, 0x5cdc, 0x0804, 0x7334, 0x2001, 0x180c,\r
-+      0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x6f15, 0x2069,\r
-+      0x0140, 0x2001, 0x0080, 0x080c, 0x2833, 0x60e3, 0x0000, 0x2069,\r
-+      0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0190, 0x6028,\r
-+      0x9084, 0xfdff, 0x602a, 0x2011, 0x0200, 0x080c, 0x286d, 0x2069,\r
-+      0x1960, 0x7000, 0x206a, 0x7097, 0x0027, 0x7003, 0x0001, 0x0804,\r
-+      0x7334, 0x2011, 0x1e00, 0x080c, 0x286d, 0x2009, 0x1e00, 0x080c,\r
-+      0x2819, 0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04,\r
-+      0x72f1, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x80b3,\r
-+      0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19d4,\r
-+      0x7018, 0x00ee, 0x9005, 0x19e8, 0x01f8, 0x0026, 0x2011, 0x6f2d,\r
-+      0x080c, 0x8159, 0x2011, 0x6f20, 0x080c, 0x825f, 0x002e, 0x2069,\r
-+      0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001,\r
-+      0x0008, 0x6886, 0x2001, 0x0002, 0x080c, 0x2498, 0x60e2, 0x2001,\r
-+      0x180c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e,\r
-+      0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,\r
-+      0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x080c,\r
-+      0xbf5a, 0x1904, 0x73a1, 0x7130, 0xd184, 0x1170, 0x080c, 0x3186,\r
-+      0x0138, 0xc18d, 0x7132, 0x2011, 0x1854, 0x2214, 0xd2ac, 0x1120,\r
-+      0x7030, 0xd08c, 0x0904, 0x73a1, 0x2011, 0x1854, 0x220c, 0x0438,\r
-+      0x0016, 0x2019, 0x000e, 0x080c, 0xd1eb, 0x0156, 0x00b6, 0x20a9,\r
-+      0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188,\r
-+      0x080c, 0x6270, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009, 0x000e,\r
-+      0x080c, 0xd273, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x83eb,\r
-+      0x001e, 0x8108, 0x1f04, 0x736a, 0x00be, 0x015e, 0x001e, 0xd1ac,\r
-+      0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x2fc5,\r
-+      0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c,\r
-+      0x6270, 0x1110, 0x080c, 0x5cf6, 0x8108, 0x1f04, 0x7397, 0x00be,\r
-+      0x015e, 0x080c, 0x1989, 0x080c, 0x98c8, 0x080c, 0x9b6d, 0x080c,\r
-+      0x98e4, 0x60e3, 0x0000, 0x080c, 0x5cdc, 0x080c, 0x6fe8, 0x00ee,\r
-+      0x00ce, 0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001,\r
-+      0x194e, 0x2003, 0x0001, 0x0005, 0x2001, 0x194e, 0x2003, 0x0000,\r
-+      0x0005, 0x2001, 0x194d, 0x2003, 0xaaaa, 0x0005, 0x2001, 0x194d,\r
-+      0x2003, 0x0000, 0x0005, 0x2071, 0x18f0, 0x7003, 0x0000, 0x7007,\r
-+      0x0000, 0x080c, 0x103b, 0x090c, 0x0d65, 0xa8ab, 0xdcb0, 0x2900,\r
-+      0x704e, 0x080c, 0x103b, 0x090c, 0x0d65, 0xa8ab, 0xdcb0, 0x2900,\r
-+      0x7052, 0xa867, 0x0000, 0xa86b, 0x0001, 0xa89f, 0x0000, 0x0005,\r
-+      0x00e6, 0x2071, 0x0040, 0x6848, 0x9005, 0x1118, 0x9085, 0x0001,\r
-+      0x04b0, 0x6840, 0x9005, 0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002,\r
-+      0x6854, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6850, 0x7002,\r
-+      0x6854, 0x7006, 0x6858, 0x700a, 0x685c, 0x700e, 0x6840, 0x9005,\r
-+      0x1110, 0x7012, 0x7016, 0x6848, 0x701a, 0x701c, 0x9085, 0x0040,\r
-+      0x701e, 0x2001, 0x0019, 0x7036, 0x702b, 0x0001, 0x2001, 0x0004,\r
-+      0x200c, 0x918c, 0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6, 0x2069,\r
-+      0x18f0, 0x6807, 0x0001, 0x00de, 0x080c, 0x79c3, 0x9006, 0x00ee,\r
-+      0x0005, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x818d, 0x1f04,\r
-+      0x742d, 0x015e, 0x0005, 0x2079, 0x0040, 0x2071, 0x18f0, 0x7004,\r
-+      0x0002, 0x7443, 0x7444, 0x748f, 0x74ea, 0x762b, 0x7441, 0x7441,\r
-+      0x7655, 0x080c, 0x0d65, 0x0005, 0x2079, 0x0040, 0x2001, 0x1dc0,\r
-+      0x2003, 0x0000, 0x782c, 0x908c, 0x0780, 0x190c, 0x7a4f, 0xd0a4,\r
-+      0x0570, 0x2001, 0x1dc0, 0x2004, 0x9082, 0x0080, 0x1640, 0x1d04,\r
-+      0x7461, 0x2001, 0x19d7, 0x200c, 0x8109, 0x0508, 0x2091, 0x6000,\r
-+      0x2102, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084,\r
-+      0x00ff, 0x908a, 0x0040, 0x0608, 0x00b8, 0x2001, 0x1800, 0x200c,\r
-+      0x9186, 0x0003, 0x1160, 0x7104, 0x9186, 0x0004, 0x0140, 0x9186,\r
-+      0x0007, 0x0128, 0x9186, 0x0003, 0x1968, 0x080c, 0x74ea, 0x782c,\r
-+      0xd09c, 0x090c, 0x79c3, 0x0005, 0x9082, 0x005a, 0x1218, 0x2100,\r
-+      0x003b, 0x0c18, 0x080c, 0x7520, 0x0c90, 0x00e3, 0x08f0, 0x0005,\r
-+      0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520,\r
-+      0x7542, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520,\r
-+      0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520,\r
-+      0x7520, 0x7520, 0x7520, 0x7520, 0x752c, 0x7520, 0x772a, 0x7520,\r
-+      0x7520, 0x7520, 0x7542, 0x7520, 0x752c, 0x776b, 0x77ac, 0x77f3,\r
-+      0x7807, 0x7520, 0x7520, 0x7542, 0x752c, 0x7520, 0x7520, 0x75ff,\r
-+      0x78b2, 0x78cd, 0x7520, 0x7542, 0x7520, 0x7520, 0x7520, 0x7520,\r
-+      0x75f5, 0x78cd, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520,\r
-+      0x7520, 0x7520, 0x7520, 0x7556, 0x7520, 0x7520, 0x7520, 0x7520,\r
-+      0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x79f3, 0x7520, 0x7520,\r
-+      0x7520, 0x7520, 0x7520, 0x756a, 0x7520, 0x7520, 0x7520, 0x7520,\r
-+      0x7520, 0x7520, 0x2079, 0x0040, 0x7004, 0x9086, 0x0003, 0x1198,\r
-+      0x782c, 0x080c, 0x79ec, 0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006,\r
-+      0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x001a, 0x1210,\r
-+      0x002b, 0x0c50, 0x00e9, 0x080c, 0x79c3, 0x0005, 0x7520, 0x752c,\r
-+      0x7716, 0x7520, 0x752c, 0x7520, 0x752c, 0x752c, 0x7520, 0x752c,\r
-+      0x7716, 0x752c, 0x752c, 0x752c, 0x752c, 0x752c, 0x7520, 0x752c,\r
-+      0x7716, 0x7520, 0x7520, 0x752c, 0x7520, 0x7520, 0x7520, 0x752c,\r
-+      0x00e6, 0x2071, 0x18f0, 0x2009, 0x0400, 0x0071, 0x00ee, 0x0005,\r
-+      0x2009, 0x1000, 0x0049, 0x0005, 0x2009, 0x2000, 0x0029, 0x0005,\r
-+      0x2009, 0x0800, 0x0009, 0x0005, 0x7007, 0x0001, 0xa868, 0x9084,\r
-+      0x00ff, 0x9105, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6996,\r
-+      0x012e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0d08, 0x8001,\r
-+      0x1120, 0x7007, 0x0001, 0x0804, 0x76d4, 0x7007, 0x0003, 0x7012,\r
-+      0x2900, 0x7016, 0x701a, 0x704b, 0x76d4, 0x0005, 0xa864, 0x8007,\r
-+      0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804,\r
-+      0x76ef, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b,\r
-+      0x76ef, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x9086, 0x0001,\r
-+      0x1904, 0x7528, 0x7007, 0x0001, 0x2009, 0x1833, 0x210c, 0x81ff,\r
-+      0x1904, 0x75cc, 0xa994, 0x9186, 0x006f, 0x0188, 0x9186, 0x0074,\r
-+      0x15b0, 0x0026, 0x2011, 0x0010, 0x080c, 0x668b, 0x002e, 0x0578,\r
-+      0x0016, 0xa998, 0x080c, 0x66d5, 0x001e, 0x1548, 0x0400, 0x080c,\r
-+      0x70b7, 0x0140, 0xa897, 0x4005, 0xa89b, 0x0016, 0x2001, 0x0030,\r
-+      0x900e, 0x0438, 0x0026, 0x2011, 0x8008, 0x080c, 0x668b, 0x002e,\r
-+      0x01b0, 0x0016, 0x0026, 0x0036, 0xa998, 0xaaa0, 0xab9c, 0x918d,\r
-+      0x8000, 0x080c, 0x66d5, 0x003e, 0x002e, 0x001e, 0x1140, 0xa897,\r
-+      0x4005, 0xa89b, 0x4009, 0x2001, 0x0030, 0x900e, 0x0050, 0xa868,\r
-+      0x9084, 0x00ff, 0xa86a, 0xa883, 0x0000, 0x080c, 0x5f07, 0x1108,\r
-+      0x0005, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0xa87a, 0xa982,\r
-+      0x080c, 0x6996, 0x012e, 0x0ca0, 0xa994, 0x9186, 0x0071, 0x0904,\r
-+      0x757a, 0x9186, 0x0064, 0x0904, 0x757a, 0x9186, 0x007c, 0x0904,\r
-+      0x757a, 0x9186, 0x0028, 0x0904, 0x757a, 0x9186, 0x0038, 0x0904,\r
-+      0x757a, 0x9186, 0x0078, 0x0904, 0x757a, 0x9186, 0x005f, 0x0904,\r
-+      0x757a, 0x9186, 0x0056, 0x0904, 0x757a, 0xa897, 0x4005, 0xa89b,\r
-+      0x0001, 0x2001, 0x0030, 0x900e, 0x0860, 0xa87c, 0x9084, 0x00c0,\r
-+      0x9086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x78e4, 0x2900,\r
-+      0x7016, 0x701a, 0x20a9, 0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080,\r
-+      0x0030, 0x2098, 0x7050, 0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080,\r
-+      0x0023, 0x20a0, 0x4003, 0xa888, 0x7012, 0x9082, 0x0401, 0x1a04,\r
-+      0x7530, 0xaab4, 0x928a, 0x0002, 0x1a04, 0x7530, 0x82ff, 0x1138,\r
-+      0xa8b8, 0xa9bc, 0x9105, 0x0118, 0x2001, 0x7692, 0x0018, 0x9280,\r
-+      0x7688, 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, 0x7673, 0x080c,\r
-+      0x103b, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022, 0x7054,\r
-+      0x2060, 0xe000, 0xa866, 0x7050, 0x2040, 0xa95c, 0xe004, 0x9100,\r
-+      0xa076, 0xa860, 0xa072, 0xe008, 0x920a, 0x1210, 0x900e, 0x2200,\r
-+      0x7112, 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, 0x0108, 0x9108,\r
-+      0xa17a, 0x810b, 0xa17e, 0x080c, 0x110c, 0xa06c, 0x908e, 0x0100,\r
-+      0x0170, 0x9086, 0x0200, 0x0118, 0x7007, 0x0007, 0x0005, 0x7020,\r
-+      0x2048, 0x080c, 0x1054, 0x7014, 0x2048, 0x0804, 0x7530, 0x7020,\r
-+      0x2048, 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, 0x2048, 0xa906,\r
-+      0x711a, 0x0804, 0x762b, 0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4,\r
-+      0x9005, 0x1128, 0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864,\r
-+      0x9084, 0x00ff, 0x9086, 0x001e, 0x0904, 0x78e4, 0x0804, 0x76d4,\r
-+      0x768a, 0x768e, 0x0002, 0x001d, 0x0007, 0x0004, 0x000a, 0x001b,\r
-+      0x0005, 0x0006, 0x000a, 0x001d, 0x0005, 0x0004, 0x0076, 0x0066,\r
-+      0xafb8, 0xaebc, 0xa804, 0x2050, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0de,\r
-+      0xb0b8, 0xb0d2, 0xb0b4, 0xb0ce, 0xb6da, 0xb7d6, 0xb0b0, 0xb0ca,\r
-+      0xb0ac, 0xb0c6, 0xb0a8, 0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2, 0xb7be,\r
-+      0xb0a0, 0xb0b2, 0xb09c, 0xb0ae, 0xb098, 0xb0a2, 0xb094, 0xb09e,\r
-+      0xb6aa, 0xb7a6, 0xb090, 0xb09a, 0xb08c, 0xb096, 0xb088, 0xb08a,\r
-+      0xb084, 0xb086, 0xb692, 0xb78e, 0xb080, 0xb082, 0xb07c, 0xb07e,\r
-+      0xb078, 0xb072, 0xb074, 0xb06e, 0xb67a, 0xb776, 0xb004, 0x9055,\r
-+      0x1958, 0x006e, 0x007e, 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff,\r
-+      0x1178, 0x080c, 0x5d56, 0x1108, 0x0005, 0x080c, 0x6bb3, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0xbb45, 0x080c, 0x6996, 0x012e, 0x0ca0,\r
-+      0x080c, 0xbf5a, 0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70, 0x2009,\r
-+      0x1833, 0x210c, 0x81ff, 0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883,\r
-+      0x0000, 0xa87c, 0xd0f4, 0x0120, 0x080c, 0x5e69, 0x1138, 0x0005,\r
-+      0x9006, 0xa87a, 0x080c, 0x5de4, 0x1108, 0x0005, 0x0126, 0x2091,\r
-+      0x8000, 0xa87a, 0xa982, 0x080c, 0x6996, 0x012e, 0x0cb0, 0x2001,\r
-+      0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, 0x0c80, 0x7018, 0xa802,\r
-+      0x2908, 0x2048, 0xa906, 0x711a, 0x7010, 0x8001, 0x7012, 0x0118,\r
-+      0x7007, 0x0003, 0x0030, 0x7014, 0x2048, 0x7007, 0x0001, 0x7048,\r
-+      0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, 0xa974, 0xa878, 0x9084,\r
-+      0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, 0x0001, 0x9096, 0x0001,\r
-+      0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, 0x0002, 0x0160, 0x9005,\r
-+      0x11d8, 0xa974, 0x080c, 0x6270, 0x11b8, 0x0066, 0xae80, 0x080c,\r
-+      0x6380, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, 0x2224, 0xc484,\r
-+      0x2412, 0x004e, 0x00c6, 0x080c, 0x6270, 0x1110, 0x080c, 0x654f,\r
-+      0x8108, 0x1f04, 0x7753, 0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c,\r
-+      0x1054, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x6996,\r
-+      0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001,\r
-+      0x080c, 0x6663, 0x0580, 0x2061, 0x1a3f, 0x6100, 0xd184, 0x0178,\r
-+      0xa888, 0x9084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004,\r
-+      0x9005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011,\r
-+      0x0001, 0xa890, 0x9005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016,\r
-+      0xa888, 0x9084, 0x00ff, 0x0178, 0x6006, 0xa888, 0x8007, 0x9084,\r
-+      0x00ff, 0x0148, 0x600a, 0xa888, 0x8000, 0x1108, 0xc28d, 0x6202,\r
-+      0x012e, 0x0804, 0x79ad, 0x012e, 0x0804, 0x79a7, 0x012e, 0x0804,\r
-+      0x79a1, 0x012e, 0x0804, 0x79a4, 0x0126, 0x2091, 0x8000, 0x7007,\r
-+      0x0001, 0x080c, 0x6663, 0x05e0, 0x2061, 0x1a3f, 0x6000, 0xd084,\r
-+      0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0xac78, 0x9484, 0x0003,\r
-+      0x0170, 0xa988, 0x918c, 0x00ff, 0x8001, 0x1120, 0x2100, 0x9210,\r
-+      0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0x9212, 0x02f0, 0x9484,\r
-+      0x000c, 0x0188, 0xa988, 0x810f, 0x918c, 0x00ff, 0x9082, 0x0004,\r
-+      0x1120, 0x2100, 0x9318, 0x0288, 0x0030, 0x9082, 0x0004, 0x1168,\r
-+      0x2100, 0x931a, 0x0250, 0xa890, 0x9005, 0x0110, 0x8000, 0x6016,\r
-+      0x6206, 0x630a, 0x012e, 0x0804, 0x79ad, 0x012e, 0x0804, 0x79aa,\r
-+      0x012e, 0x0804, 0x79a7, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001,\r
-+      0x2061, 0x1a3f, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318, 0x0220,\r
-+      0x630a, 0x012e, 0x0804, 0x79bb, 0x012e, 0x0804, 0x79aa, 0x00b6,\r
-+      0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac,\r
-+      0x0148, 0x00c6, 0x2061, 0x1a3f, 0x6000, 0x9084, 0xfcff, 0x6002,\r
-+      0x00ce, 0x0440, 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598,\r
-+      0x2001, 0x1833, 0x2004, 0x9005, 0x0118, 0x080c, 0x9c21, 0x0068,\r
-+      0x6017, 0xf400, 0x6063, 0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980,\r
-+      0x6162, 0x2009, 0x0041, 0x080c, 0x9c85, 0xa988, 0x918c, 0xff00,\r
-+      0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff, 0x080c,\r
-+      0x83eb, 0x002e, 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a3f, 0x6000,\r
-+      0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce, 0x012e,\r
-+      0x00be, 0x0804, 0x79ad, 0x00ce, 0x012e, 0x00be, 0x0804, 0x79a7,\r
-+      0xa984, 0x9186, 0x002e, 0x0d30, 0x9186, 0x002d, 0x0d18, 0x9186,\r
-+      0x0045, 0x0510, 0x9186, 0x002a, 0x1130, 0x2001, 0x180c, 0x200c,\r
-+      0xc194, 0x2102, 0x08b8, 0x9186, 0x0020, 0x0158, 0x9186, 0x0029,\r
-+      0x1d10, 0xa974, 0x080c, 0x6270, 0x1968, 0xb800, 0xc0e4, 0xb802,\r
-+      0x0848, 0xa88c, 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001, 0x1957,\r
-+      0x2004, 0x601a, 0x0804, 0x7842, 0xa88c, 0x9065, 0x0960, 0x00e6,\r
-+      0xa890, 0x9075, 0x2001, 0x1833, 0x2004, 0x9005, 0x0150, 0x080c,\r
-+      0x9c21, 0x8eff, 0x0118, 0x2e60, 0x080c, 0x9c21, 0x00ee, 0x0804,\r
-+      0x7842, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a,\r
-+      0xa8a0, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8,\r
-+      0x6016, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00ee,\r
-+      0x0804, 0x7842, 0x2061, 0x1a3f, 0x6000, 0xd084, 0x0190, 0xd08c,\r
-+      0x1904, 0x79bb, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210, 0x0220,\r
-+      0x6206, 0x012e, 0x0804, 0x79bb, 0x012e, 0xa883, 0x0016, 0x0804,\r
-+      0x79b4, 0xa883, 0x0007, 0x0804, 0x79b4, 0xa864, 0x8007, 0x9084,\r
-+      0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069, 0x0005,\r
-+      0x080c, 0x7528, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016,\r
-+      0x701a, 0x704b, 0x78e4, 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091,\r
-+      0x8000, 0x903e, 0x2061, 0x1800, 0x61cc, 0x81ff, 0x1904, 0x7966,\r
-+      0x6130, 0xd194, 0x1904, 0x7990, 0xa878, 0x2070, 0x9e82, 0x1ddc,\r
-+      0x0a04, 0x795a, 0x6064, 0x9e02, 0x1a04, 0x795a, 0x7120, 0x9186,\r
-+      0x0006, 0x1904, 0x794c, 0x7010, 0x905d, 0x0904, 0x7966, 0xb800,\r
-+      0xd0e4, 0x1904, 0x798a, 0x2061, 0x1a3f, 0x6100, 0x9184, 0x0301,\r
-+      0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x7993, 0xa883,\r
-+      0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, 0x1198, 0x7116,\r
-+      0xa87c, 0xd0f4, 0x1904, 0x7996, 0x080c, 0x538d, 0xd09c, 0x1118,\r
-+      0xa87c, 0xc0cc, 0xa87e, 0x2e60, 0x080c, 0x82de, 0x012e, 0x00ee,\r
-+      0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902, 0x2148,\r
-+      0xa87c, 0xd0f4, 0x1904, 0x7996, 0x012e, 0x00ee, 0x00be, 0x0005,\r
-+      0x012e, 0x00ee, 0xa883, 0x0006, 0x00be, 0x0804, 0x79b4, 0xd184,\r
-+      0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa974, 0x080c, 0x6270, 0x15d0,\r
-+      0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118, 0xa883,\r
-+      0x0002, 0x0490, 0xa883, 0x0008, 0x0478, 0xa883, 0x000e, 0x0460,\r
-+      0xa883, 0x0017, 0x0448, 0xa883, 0x0035, 0x0430, 0x080c, 0x5391,\r
-+      0xd0fc, 0x01e8, 0xa878, 0x2070, 0x9e82, 0x1ddc, 0x02c0, 0x6064,\r
-+      0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, 0x7010, 0x905d,\r
-+      0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0x9086,\r
-+      0x0007, 0x1904, 0x78f0, 0x7003, 0x0002, 0x0804, 0x78f0, 0xa883,\r
-+      0x0028, 0x0010, 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be, 0x0420,\r
-+      0xa883, 0x002a, 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019,\r
-+      0x0002, 0x601b, 0x0014, 0x080c, 0xcdf9, 0x012e, 0x00ee, 0x00be,\r
-+      0x0005, 0x2009, 0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009,\r
-+      0x0006, 0x0028, 0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0xa884,\r
-+      0x9084, 0xff00, 0x9105, 0xa886, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x6996, 0x012e, 0x0005, 0x080c, 0x1054, 0x0005, 0x00d6, 0x080c,\r
-+      0x82d5, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000,\r
-+      0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780, 0x190c,\r
-+      0x7a4f, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70bc, 0x90ea, 0x0040,\r
-+      0x0278, 0x8001, 0x70be, 0x702c, 0x2048, 0xa800, 0x702e, 0x9006,\r
-+      0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022, 0x702c, 0x0c28,\r
-+      0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084, 0x0780, 0x190c,\r
-+      0x7a4f, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016,\r
-+      0x00b6, 0x7007, 0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04, 0x7a40,\r
-+      0xa97c, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804, 0xd284, 0x0140,\r
-+      0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0,\r
-+      0x2b10, 0x080c, 0x9b91, 0x1118, 0x080c, 0x9c58, 0x05a8, 0x6212,\r
-+      0xa874, 0x0002, 0x7a1e, 0x7a23, 0x7a26, 0x7a2c, 0x2019, 0x0002,\r
-+      0x080c, 0xd1eb, 0x0060, 0x080c, 0xd17b, 0x0048, 0x2019, 0x0002,\r
-+      0xa980, 0x080c, 0xd19a, 0x0018, 0xa980, 0x080c, 0xd17b, 0x080c,\r
-+      0x9be7, 0xa887, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x6996,\r
-+      0x012e, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de, 0x0005,\r
-+      0xa887, 0x0006, 0x0c80, 0xa887, 0x0002, 0x0c68, 0xa887, 0x0005,\r
-+      0x0c50, 0xa887, 0x0004, 0x0c38, 0xa887, 0x0007, 0x0c20, 0x2091,\r
-+      0x8000, 0x0e04, 0x7a51, 0x0006, 0x0016, 0x2001, 0x8003, 0x0006,\r
-+      0x0804, 0x0d6e, 0x2001, 0x1833, 0x2004, 0x9005, 0x0005, 0x0005,\r
-+      0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc,\r
-+      0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c, 0x152d,\r
-+      0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f, 0x0300,\r
-+      0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904, 0x7ad2, 0x68bc, 0x90aa,\r
-+      0x0005, 0x0a04, 0x806b, 0x7d44, 0x7c40, 0xd59c, 0x190c, 0x0d65,\r
-+      0x9584, 0x00f6, 0x1508, 0x9484, 0x7000, 0x0138, 0x908a, 0x2000,\r
-+      0x1258, 0x9584, 0x0700, 0x8007, 0x04f0, 0x7000, 0x9084, 0xff00,\r
-+      0x9086, 0x8100, 0x0db0, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000,\r
-+      0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xd5d3, 0x080c,\r
-+      0x7fb2, 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c,\r
-+      0x800e, 0x19c8, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x7b22,\r
-+      0x080c, 0x1fb7, 0x005e, 0x004e, 0x0020, 0x080c, 0xd5d3, 0x7817,\r
-+      0x0140, 0x080c, 0x70b7, 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c,\r
-+      0x0140, 0x688f, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, 0x2003,\r
-+      0x0000, 0x0489, 0x0005, 0x0002, 0x7adf, 0x7dd4, 0x7adc, 0x7adc,\r
-+      0x7adc, 0x7adc, 0x7adc, 0x7adc, 0x7817, 0x0140, 0x0005, 0x7000,\r
-+      0x908c, 0xff00, 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x688e,\r
-+      0x9286, 0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c,\r
-+      0x53ee, 0x0070, 0x080c, 0x7b42, 0x0058, 0x9286, 0x3000, 0x1118,\r
-+      0x080c, 0x7d11, 0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x7ee8,\r
-+      0x7817, 0x0140, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178,\r
-+      0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036,\r
-+      0x2011, 0x8048, 0x2518, 0x080c, 0x48d8, 0x003e, 0x002e, 0x0005,\r
-+      0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe,\r
-+      0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200,\r
-+      0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c,\r
-+      0x0160, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026,\r
-+      0x2011, 0x8048, 0x080c, 0x48d8, 0x002e, 0x00fe, 0x005e, 0x004e,\r
-+      0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007,\r
-+      0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x7ce2, 0x9186,\r
-+      0x0023, 0x15c0, 0x080c, 0x7f7d, 0x0904, 0x7ce2, 0x6120, 0x9186,\r
-+      0x0001, 0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120,\r
-+      0x9186, 0x000a, 0x1904, 0x7ce2, 0x7124, 0x610a, 0x7030, 0x908e,\r
-+      0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0x9c85, 0x0804, 0x7ce2,\r
-+      0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015,\r
-+      0x080c, 0x9c85, 0x0804, 0x7ce2, 0x908e, 0x0100, 0x1904, 0x7ce2,\r
-+      0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009, 0x0016, 0x080c, 0x9c85,\r
-+      0x0804, 0x7ce2, 0x9186, 0x0022, 0x1904, 0x7ce2, 0x7030, 0x908e,\r
-+      0x0300, 0x1580, 0x68d8, 0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100,\r
-+      0x918c, 0x00ff, 0x697a, 0x7004, 0x687e, 0x00f6, 0x2079, 0x0100,\r
-+      0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c,\r
-+      0x246d, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x2424,\r
-+      0x695a, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0x1800,\r
-+      0x70b2, 0x00ee, 0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009, 0x0017,\r
-+      0x0804, 0x7c92, 0x908e, 0x0400, 0x1190, 0x7034, 0x9005, 0x1904,\r
-+      0x7ce2, 0x080c, 0x70b7, 0x0120, 0x2009, 0x001d, 0x0804, 0x7c92,\r
-+      0x68d8, 0xc0a5, 0x68da, 0x2009, 0x0030, 0x0804, 0x7c92, 0x908e,\r
-+      0x0500, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009, 0x0018,\r
-+      0x0804, 0x7c92, 0x908e, 0x2010, 0x1120, 0x2009, 0x0019, 0x0804,\r
-+      0x7c92, 0x908e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804, 0x7c92,\r
-+      0x908e, 0x5200, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009,\r
-+      0x001b, 0x0804, 0x7c92, 0x908e, 0x5000, 0x1140, 0x7034, 0x9005,\r
-+      0x1904, 0x7ce2, 0x2009, 0x001c, 0x0804, 0x7c92, 0x908e, 0x1300,\r
-+      0x1120, 0x2009, 0x0034, 0x0804, 0x7c92, 0x908e, 0x1200, 0x1140,\r
-+      0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009, 0x0024, 0x0804, 0x7c92,\r
-+      0x908c, 0xff00, 0x918e, 0x2400, 0x1170, 0x2009, 0x002d, 0x2001,\r
-+      0x1810, 0x2004, 0xd09c, 0x0904, 0x7c92, 0x080c, 0xc62f, 0x1904,\r
-+      0x7ce2, 0x0804, 0x7c90, 0x908c, 0xff00, 0x918e, 0x5300, 0x1120,\r
-+      0x2009, 0x002a, 0x0804, 0x7c92, 0x908e, 0x0f00, 0x1120, 0x2009,\r
-+      0x0020, 0x0804, 0x7c92, 0x908e, 0x6104, 0x1528, 0x2029, 0x0205,\r
-+      0x2011, 0x026d, 0x8208, 0x2204, 0x9082, 0x0004, 0x8004, 0x8004,\r
-+      0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c,\r
-+      0x48d8, 0x004e, 0x8108, 0x0f04, 0x7c5e, 0x9186, 0x0280, 0x1d88,\r
-+      0x2504, 0x8000, 0x202a, 0x2009, 0x0260, 0x0c58, 0x202b, 0x0000,\r
-+      0x2009, 0x0023, 0x0478, 0x908e, 0x6000, 0x1118, 0x2009, 0x003f,\r
-+      0x0448, 0x908e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0418, 0x908e,\r
-+      0x1000, 0x1118, 0x2009, 0x004e, 0x00e8, 0x908e, 0x6300, 0x1118,\r
-+      0x2009, 0x004a, 0x00b8, 0x908c, 0xff00, 0x918e, 0x5600, 0x1118,\r
-+      0x2009, 0x004f, 0x0078, 0x908c, 0xff00, 0x918e, 0x5700, 0x1118,\r
-+      0x2009, 0x0050, 0x0038, 0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110,\r
-+      0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,\r
-+      0x080c, 0x2424, 0x1904, 0x7ce5, 0x080c, 0x6210, 0x1904, 0x7ce5,\r
-+      0xbe12, 0xbd16, 0x001e, 0x0016, 0x080c, 0x70b7, 0x01c0, 0x68d8,\r
-+      0xd08c, 0x1148, 0x7000, 0x9084, 0x00ff, 0x1188, 0x7004, 0x9084,\r
-+      0xff00, 0x1168, 0x0040, 0x6878, 0x9606, 0x1148, 0x687c, 0x9506,\r
-+      0x9084, 0xff00, 0x1120, 0x9584, 0x00ff, 0xb886, 0x0080, 0xb884,\r
-+      0x9005, 0x1168, 0x9186, 0x0046, 0x1150, 0x6878, 0x9606, 0x1138,\r
-+      0x687c, 0x9506, 0x9084, 0xff00, 0x1110, 0x001e, 0x0098, 0x080c,\r
-+      0x9b91, 0x01a8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a,\r
-+      0x001e, 0x9186, 0x004c, 0x1110, 0x6023, 0x000a, 0x0016, 0x001e,\r
-+      0x080c, 0x9c85, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001,\r
-+      0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d8,\r
-+      0x080c, 0x9c58, 0x0d90, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120,\r
-+      0x610a, 0x001e, 0x0016, 0x9186, 0x0017, 0x0118, 0x9186, 0x0030,\r
-+      0x1128, 0x6007, 0x0009, 0x6017, 0x2900, 0x0020, 0x6007, 0x0051,\r
-+      0x6017, 0x0000, 0x602f, 0x0009, 0x6003, 0x0001, 0x080c, 0x84d8,\r
-+      0x08a0, 0x080c, 0x3150, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007,\r
-+      0x908e, 0x0008, 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046,\r
-+      0x7000, 0x908c, 0xff00, 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c,\r
-+      0x7f7d, 0x0904, 0x7d6c, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200,\r
-+      0x1140, 0x7034, 0x9005, 0x15c0, 0x2009, 0x0015, 0x080c, 0x9c85,\r
-+      0x0498, 0x908e, 0x0100, 0x1580, 0x7034, 0x9005, 0x1568, 0x2009,\r
-+      0x0016, 0x080c, 0x9c85, 0x0440, 0x9186, 0x0032, 0x1528, 0x7030,\r
-+      0x908e, 0x1400, 0x1508, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263,\r
-+      0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x11a8, 0x080c, 0x6210,\r
-+      0x1190, 0xbe12, 0xbd16, 0x080c, 0x9b91, 0x0168, 0x2b08, 0x6112,\r
-+      0x080c, 0xbcdb, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c,\r
-+      0x9c85, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005,\r
-+      0x00b6, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff,\r
-+      0x11b8, 0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009,\r
-+      0x007f, 0x0804, 0x7dce, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e,\r
-+      0x0804, 0x7dce, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0,\r
-+      0x2011, 0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130, 0x9026,\r
-+      0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9,\r
-+      0x077f, 0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff,\r
-+      0x11d0, 0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10,\r
-+      0x2600, 0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0,\r
-+      0x9745, 0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118,\r
-+      0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7da3, 0x82ff,\r
-+      0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de,\r
-+      0x00ee, 0x004e, 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f,\r
-+      0x9184, 0x000f, 0x0002, 0x7deb, 0x7deb, 0x7deb, 0x7f8f, 0x7deb,\r
-+      0x7dee, 0x7e13, 0x7e9c, 0x7deb, 0x7deb, 0x7deb, 0x7deb, 0x7deb,\r
-+      0x7deb, 0x7deb, 0x7deb, 0x7817, 0x0140, 0x0005, 0x00b6, 0x7110,\r
-+      0xd1bc, 0x01e8, 0x7120, 0x2160, 0x9c8c, 0x0003, 0x11c0, 0x9c8a,\r
-+      0x1ddc, 0x02a8, 0x6864, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff,\r
-+      0x6110, 0x2158, 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106,\r
-+      0x1130, 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0x9c85, 0x7817,\r
-+      0x0140, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x9484, 0x0fff, 0x0904,\r
-+      0x7e78, 0x7110, 0xd1bc, 0x1904, 0x7e78, 0x7108, 0x700c, 0x2028,\r
-+      0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x15c8, 0x81ff, 0x15b8,\r
-+      0x9080, 0x318b, 0x200d, 0x918c, 0xff00, 0x810f, 0x2001, 0x0080,\r
-+      0x9106, 0x0904, 0x7e78, 0x9182, 0x0801, 0x1a04, 0x7e78, 0x9190,\r
-+      0x1000, 0x2204, 0x905d, 0x05e0, 0xbe12, 0xbd16, 0xb800, 0xd0ec,\r
-+      0x15b8, 0xba04, 0x9294, 0xff00, 0x9286, 0x0600, 0x1190, 0x080c,\r
-+      0x9b91, 0x0598, 0x2b08, 0x7028, 0x6052, 0x702c, 0x604e, 0x6112,\r
-+      0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x615e, 0x080c, 0xc893,\r
-+      0x00f8, 0x080c, 0x6667, 0x1138, 0xb807, 0x0606, 0x0c40, 0x190c,\r
-+      0x7d70, 0x11b0, 0x0880, 0x080c, 0x9b91, 0x2b08, 0x0188, 0x6112,\r
-+      0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007,\r
-+      0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x84d8,\r
-+      0x7817, 0x0140, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004,\r
-+      0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d8, 0x080c, 0x9c58,\r
-+      0x0d78, 0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130,\r
-+      0x615e, 0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009,\r
-+      0xa022, 0x080c, 0x84d1, 0x08e0, 0x00b6, 0x7110, 0xd1bc, 0x05d0,\r
-+      0x7020, 0x2060, 0x9c84, 0x0003, 0x15a8, 0x9c82, 0x1ddc, 0x0690,\r
-+      0x6864, 0x9c02, 0x1678, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0650,\r
-+      0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1510,\r
-+      0x700c, 0xb914, 0x9106, 0x11f0, 0x7124, 0x610a, 0x601c, 0xd0fc,\r
-+      0x11c8, 0x2001, 0x0271, 0x2004, 0x9005, 0x1180, 0x9484, 0x0fff,\r
-+      0x9082, 0x000c, 0x0158, 0x0066, 0x2031, 0x0100, 0xa001, 0xa001,\r
-+      0x8631, 0x1de0, 0x006e, 0x601c, 0xd0fc, 0x1120, 0x2009, 0x0045,\r
-+      0x080c, 0x9c85, 0x7817, 0x0140, 0x00be, 0x0005, 0x6120, 0x9186,\r
-+      0x0002, 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005,\r
-+      0x080c, 0x3150, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086,\r
-+      0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b,\r
-+      0x0005, 0x7eff, 0x7f00, 0x7eff, 0x7eff, 0x7f5f, 0x7f6e, 0x0005,\r
-+      0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x7f5d,\r
-+      0x700c, 0x7108, 0x080c, 0x2424, 0x1904, 0x7f5d, 0x080c, 0x6210,\r
-+      0x1904, 0x7f5d, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c,\r
-+      0x6667, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x7f7d,\r
-+      0x00ce, 0x05d8, 0x080c, 0x9b91, 0x2b08, 0x05b8, 0x6112, 0x080c,\r
-+      0xbcdb, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c,\r
-+      0x9c85, 0x0458, 0x080c, 0x6667, 0x0148, 0x9086, 0x0004, 0x0130,\r
-+      0x080c, 0x666f, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0x9b91,\r
-+      0x2b08, 0x01d8, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0005, 0x7120,\r
-+      0x610a, 0x2009, 0x0088, 0x080c, 0x9c85, 0x0078, 0x080c, 0x9b91,\r
-+      0x2b08, 0x0158, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0004, 0x7120,\r
-+      0x610a, 0x2009, 0x0001, 0x080c, 0x9c85, 0x00be, 0x0005, 0x7110,\r
-+      0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x7ede, 0x1130, 0x7124,\r
-+      0x610a, 0x2009, 0x0089, 0x080c, 0x9c85, 0x0005, 0x7110, 0xd1bc,\r
-+      0x0158, 0x0059, 0x0148, 0x080c, 0x7ede, 0x1130, 0x7124, 0x610a,\r
-+      0x2009, 0x008a, 0x080c, 0x9c85, 0x0005, 0x7020, 0x2060, 0x9c84,\r
-+      0x0003, 0x1158, 0x9c82, 0x1ddc, 0x0240, 0x2001, 0x1819, 0x2004,\r
-+      0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6,\r
-+      0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0003, 0x11b0,\r
-+      0x9c82, 0x1ddc, 0x0298, 0x6864, 0x9c02, 0x1280, 0x7008, 0x9084,\r
-+      0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914,\r
-+      0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0x9c85, 0x7817, 0x0140,\r
-+      0x00be, 0x0005, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206,\r
-+      0x0049, 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213,\r
-+      0x0009, 0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000,\r
-+      0x9086, 0xc000, 0x05c0, 0x080c, 0x9b91, 0x05a8, 0x0066, 0x00c6,\r
-+      0x0046, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2424,\r
-+      0x1590, 0x080c, 0x6210, 0x1578, 0xbe12, 0xbd16, 0x2b00, 0x004e,\r
-+      0x00ce, 0x6012, 0x080c, 0xbcdb, 0x080c, 0x1022, 0x0500, 0x2900,\r
-+      0x6062, 0x9006, 0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b,\r
-+      0x20a9, 0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98,\r
-+      0x4003, 0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003,\r
-+      0x0001, 0x080c, 0x84d8, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c,\r
-+      0x9be7, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000,\r
-+      0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904,\r
-+      0x8065, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005,\r
-+      0x1904, 0x8067, 0x7030, 0x908e, 0x0400, 0x0904, 0x8067, 0x908e,\r
-+      0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8,\r
-+      0x2009, 0x1836, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c,\r
-+      0x6625, 0x0558, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff,\r
-+      0x9106, 0x1518, 0x687c, 0x69ac, 0x918c, 0xff00, 0x9105, 0x7104,\r
-+      0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4, 0x11a8,\r
-+      0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e, 0x5000,\r
-+      0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x7f7d, 0x0128,\r
-+      0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085,\r
-+      0x0001, 0x00ce, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5,\r
-+      0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834,\r
-+      0xd084, 0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200, 0x7802,\r
-+      0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036,\r
-+      0x00ee, 0x0005, 0x2071, 0x19d4, 0x7003, 0x0003, 0x700f, 0x0361,\r
-+      0x9006, 0x701a, 0x7072, 0x7012, 0x7017, 0x1ddc, 0x7007, 0x0000,\r
-+      0x7026, 0x702b, 0x8fd9, 0x7032, 0x7037, 0x9056, 0x703f, 0xffff,\r
-+      0x7042, 0x7047, 0x5224, 0x704a, 0x705b, 0x8226, 0x080c, 0x103b,\r
-+      0x090c, 0x0d65, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100,\r
-+      0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19d4, 0x1d04, 0x8148, 0x2091,\r
-+      0x6000, 0x700c, 0x8001, 0x700e, 0x1560, 0x2001, 0x1875, 0x2004,\r
-+      0xd0c4, 0x0158, 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1,\r
-+      0x0001, 0x20d1, 0x0000, 0x080c, 0x0d65, 0x700f, 0x0361, 0x7007,\r
-+      0x0001, 0x0126, 0x2091, 0x8000, 0x2069, 0x1800, 0x69e8, 0xd1e4,\r
-+      0x1138, 0xd1dc, 0x1118, 0x080c, 0x8294, 0x0010, 0x080c, 0x826b,\r
-+      0x7040, 0x900d, 0x0148, 0x8109, 0x7142, 0x1130, 0x7044, 0x080f,\r
-+      0x0018, 0x0126, 0x2091, 0x8000, 0x7024, 0x900d, 0x0188, 0x7020,\r
-+      0x8001, 0x7022, 0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0x9186,\r
-+      0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f,\r
-+      0x7030, 0x900d, 0x0180, 0x702c, 0x8001, 0x702e, 0x1160, 0x702f,\r
-+      0x0009, 0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c, 0x90de,\r
-+      0x0010, 0x7034, 0x080f, 0x703c, 0x9005, 0x0118, 0x0310, 0x8001,\r
-+      0x703e, 0x704c, 0x900d, 0x0168, 0x7048, 0x8001, 0x704a, 0x1148,\r
-+      0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150, 0x714e, 0x7058,\r
-+      0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7070, 0x900d, 0x0158,\r
-+      0x706c, 0x8001, 0x706e, 0x1138, 0x706f, 0x0009, 0x8109, 0x7172,\r
-+      0x1110, 0x7074, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a, 0x1138,\r
-+      0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f, 0x012e,\r
-+      0x7004, 0x0002, 0x8170, 0x8171, 0x819b, 0x00e6, 0x2071, 0x19d4,\r
-+      0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee,\r
-+      0x0005, 0x00e6, 0x0006, 0x2071, 0x19d4, 0x701c, 0x9206, 0x1120,\r
-+      0x701a, 0x701e, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, 0x00e6,\r
-+      0x2071, 0x19d4, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005,\r
-+      0x0005, 0x00b6, 0x2031, 0x0010, 0x7110, 0x080c, 0x6270, 0x11a8,\r
-+      0xb888, 0x8001, 0x0290, 0xb88a, 0x1180, 0x0126, 0x2091, 0x8000,\r
-+      0x0066, 0xb8c0, 0x9005, 0x0138, 0x0026, 0xba3c, 0x0016, 0x080c,\r
-+      0x639b, 0x001e, 0x002e, 0x006e, 0x012e, 0x8108, 0x9182, 0x0800,\r
-+      0x1220, 0x8631, 0x0128, 0x7112, 0x0c00, 0x900e, 0x7007, 0x0002,\r
-+      0x7112, 0x00be, 0x0005, 0x2031, 0x0010, 0x7014, 0x2060, 0x0126,\r
-+      0x2091, 0x8000, 0x6048, 0x9005, 0x0128, 0x8001, 0x604a, 0x1110,\r
-+      0x080c, 0xbb5c, 0x6018, 0x9005, 0x0904, 0x81ed, 0x00f6, 0x2079,\r
-+      0x0300, 0x7918, 0xd1b4, 0x1904, 0x8200, 0x781b, 0x2020, 0xa001,\r
-+      0x7918, 0xd1b4, 0x0120, 0x781b, 0x2000, 0x0804, 0x8200, 0x8001,\r
-+      0x601a, 0x0106, 0x781b, 0x2000, 0xa001, 0x7918, 0xd1ac, 0x1dd0,\r
-+      0x010e, 0x00fe, 0x1510, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186,\r
-+      0x0006, 0x11c8, 0x080c, 0xb847, 0x01b0, 0x6014, 0x2048, 0xa884,\r
-+      0x908a, 0x199a, 0x0280, 0x9082, 0x1999, 0xa886, 0x908a, 0x199a,\r
-+      0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a,\r
-+      0x080c, 0xbf8d, 0x0110, 0x080c, 0xb545, 0x012e, 0x9c88, 0x001c,\r
-+      0x7116, 0x2001, 0x1819, 0x2004, 0x9102, 0x1228, 0x8631, 0x0138,\r
-+      0x2160, 0x0804, 0x819f, 0x7017, 0x1ddc, 0x7007, 0x0000, 0x0005,\r
-+      0x00fe, 0x0c58, 0x00e6, 0x2071, 0x19d4, 0x7027, 0x07d0, 0x7023,\r
-+      0x0009, 0x00ee, 0x0005, 0x2001, 0x19dd, 0x2003, 0x0000, 0x0005,\r
-+      0x00e6, 0x2071, 0x19d4, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005,\r
-+      0x2011, 0x19e0, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19d4,\r
-+      0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x0086, 0x0026,\r
-+      0x7054, 0x8000, 0x7056, 0x2001, 0x19e2, 0x2044, 0xa06c, 0x9086,\r
-+      0x0000, 0x0150, 0x7068, 0xa09a, 0x7064, 0xa096, 0x7060, 0xa092,\r
-+      0x705c, 0xa08e, 0x080c, 0x110c, 0x002e, 0x008e, 0x0005, 0x0006,\r
-+      0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,\r
-+      0x0156, 0x080c, 0x80b3, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce,\r
-+      0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071,\r
-+      0x19d4, 0x7172, 0x7276, 0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6,\r
-+      0x0006, 0x2071, 0x19d4, 0x7074, 0x9206, 0x1110, 0x7072, 0x7076,\r
-+      0x000e, 0x00ee, 0x0005, 0x2069, 0x1800, 0x69e8, 0xd1e4, 0x1518,\r
-+      0x0026, 0xd1ec, 0x0140, 0x6a50, 0x6870, 0x9202, 0x0288, 0x8117,\r
-+      0x9294, 0x00c1, 0x0088, 0x9184, 0x0007, 0x01a0, 0x8109, 0x9184,\r
-+      0x0007, 0x0110, 0x69ea, 0x0070, 0x8107, 0x9084, 0x0007, 0x910d,\r
-+      0x8107, 0x9106, 0x9094, 0x00c1, 0x9184, 0xff3e, 0x9205, 0x68ea,\r
-+      0x080c, 0x0eed, 0x002e, 0x0005, 0x69e4, 0x9184, 0x003f, 0x05b8,\r
-+      0x8109, 0x9184, 0x003f, 0x01a8, 0x6a50, 0x6870, 0x9202, 0x0220,\r
-+      0xd1bc, 0x0168, 0xc1bc, 0x0018, 0xd1bc, 0x1148, 0xc1bd, 0x2110,\r
-+      0x00e6, 0x2071, 0x1800, 0x080c, 0x0f0f, 0x00ee, 0x0400, 0x69e6,\r
-+      0x00f0, 0x0026, 0x8107, 0x9094, 0x0007, 0x0128, 0x8001, 0x8007,\r
-+      0x9085, 0x0007, 0x0050, 0x2010, 0x8004, 0x8004, 0x8004, 0x9084,\r
-+      0x0007, 0x9205, 0x8007, 0x9085, 0x0028, 0x9086, 0x0040, 0x2010,\r
-+      0x00e6, 0x2071, 0x1800, 0x080c, 0x0f0f, 0x00ee, 0x002e, 0x0005,\r
-+      0x00c6, 0x2061, 0x1a3f, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003,\r
-+      0x8003, 0x8003, 0x9080, 0x1a3f, 0x2060, 0x0005, 0xa884, 0x908a,\r
-+      0x199a, 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a3f, 0x6014,\r
-+      0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff,\r
-+      0x01b0, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0x908c,\r
-+      0x00c0, 0x918e, 0x00c0, 0x0904, 0x8395, 0xd0b4, 0x1168, 0xd0bc,\r
-+      0x1904, 0x836e, 0x2009, 0x0006, 0x080c, 0x83c2, 0x0005, 0x900e,\r
-+      0x0c60, 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x05c8, 0x908c, 0x2023,\r
-+      0x1550, 0x87ff, 0x1540, 0x6124, 0x918c, 0x0500, 0x1520, 0x6100,\r
-+      0x918e, 0x0007, 0x1500, 0x2009, 0x1875, 0x210c, 0xd184, 0x11d8,\r
-+      0x6003, 0x0003, 0x6007, 0x0043, 0x6047, 0xb035, 0x080c, 0x1aa5,\r
-+      0xa87c, 0xc0dd, 0xa87e, 0x600f, 0x0000, 0x00f6, 0x2079, 0x0380,\r
-+      0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0013, 0x2c00, 0x7836, 0x781b,\r
-+      0x8080, 0x00fe, 0x0005, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003,\r
-+      0x1904, 0x83bc, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024,\r
-+      0xd0d4, 0x11e8, 0x2009, 0x1875, 0x2104, 0xd084, 0x1138, 0x87ff,\r
-+      0x1120, 0x2009, 0x0043, 0x0804, 0x9c85, 0x0005, 0x87ff, 0x1de8,\r
-+      0x2009, 0x0042, 0x0804, 0x9c85, 0x6110, 0x00b6, 0x2158, 0xb900,\r
-+      0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00, 0xc0d4,\r
-+      0x6026, 0xa890, 0x602e, 0xa88c, 0x6032, 0x08e0, 0xd0fc, 0x0160,\r
-+      0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x83bc, 0x908c,\r
-+      0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, 0x080c,\r
-+      0x164f, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c,\r
-+      0x9c85, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac,\r
-+      0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188, 0x908c,\r
-+      0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e, 0x0002,\r
-+      0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0x9c85, 0x0005,\r
-+      0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x9c85,\r
-+      0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20,\r
-+      0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, 0x0005,\r
-+      0x2009, 0x0001, 0x0096, 0x080c, 0xb847, 0x0518, 0x6014, 0x2048,\r
-+      0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c, 0x918c,\r
-+      0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a3f, 0x6200,\r
-+      0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c,\r
-+      0x67cb, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x82de,\r
-+      0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a3f, 0x6000,\r
-+      0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e,\r
-+      0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001,\r
-+      0x680a, 0x9085, 0x0001, 0x0005, 0x0126, 0x2091, 0x8000, 0x0036,\r
-+      0x0046, 0x20a9, 0x0010, 0x9006, 0x8004, 0x8086, 0x818e, 0x1208,\r
-+      0x9200, 0x1f04, 0x840d, 0x8086, 0x818e, 0x004e, 0x003e, 0x012e,\r
-+      0x0005, 0x0126, 0x2091, 0x8000, 0x0076, 0x0156, 0x20a9, 0x0010,\r
-+      0x9005, 0x01c8, 0x911a, 0x12b8, 0x8213, 0x818d, 0x0228, 0x911a,\r
-+      0x1220, 0x1f04, 0x8424, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04,\r
-+      0x8424, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e,\r
-+      0x007e, 0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8,\r
-+      0x0126, 0x2091, 0x2800, 0x2079, 0x19b8, 0x012e, 0x00d6, 0x2069,\r
-+      0x19b8, 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000,\r
-+      0x2069, 0x0200, 0x080c, 0x97fa, 0x04a9, 0x080c, 0x97e5, 0x0491,\r
-+      0x080c, 0x97e8, 0x0479, 0x080c, 0x97eb, 0x0461, 0x080c, 0x97ee,\r
-+      0x0449, 0x080c, 0x97f1, 0x0431, 0x080c, 0x97f4, 0x0419, 0x080c,\r
-+      0x97f7, 0x0401, 0x01de, 0x014e, 0x015e, 0x6857, 0x0000, 0x00f6,\r
-+      0x2079, 0x0380, 0x00f9, 0x7807, 0x0003, 0x7803, 0x0000, 0x7803,\r
-+      0x0001, 0x2069, 0x0004, 0x2d04, 0x9084, 0xfffe, 0x9085, 0x8000,\r
-+      0x206a, 0x2069, 0x0100, 0x6828, 0x9084, 0xfffc, 0x682a, 0x00fe,\r
-+      0x00de, 0x0005, 0x20a9, 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000,\r
-+      0x4004, 0x0005, 0x00c6, 0x7803, 0x0000, 0x9006, 0x7827, 0x0030,\r
-+      0x782b, 0x0400, 0x7827, 0x0031, 0x782b, 0x1abf, 0x781f, 0xff00,\r
-+      0x781b, 0xff00, 0x2061, 0x1ab4, 0x602f, 0x19b8, 0x6033, 0x1800,\r
-+      0x6037, 0x19d4, 0x603b, 0x1cf7, 0x603f, 0x1d07, 0x6042, 0x6047,\r
-+      0x1a8a, 0x00ce, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007,\r
-+      0x9086, 0x0001, 0x01b0, 0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08,\r
-+      0x2061, 0x19b8, 0x602c, 0x8000, 0x602e, 0x601c, 0x9005, 0x0130,\r
-+      0x9080, 0x0003, 0x2102, 0x611e, 0x00ce, 0x0005, 0x6122, 0x611e,\r
-+      0x0cd8, 0x6146, 0x2c08, 0x2001, 0x0012, 0x080c, 0x98b9, 0x0005,\r
-+      0x0016, 0x2009, 0x8020, 0x6146, 0x2c08, 0x2001, 0x0382, 0x2004,\r
-+      0x9084, 0x0007, 0x9086, 0x0001, 0x1128, 0x2001, 0x0019, 0x080c,\r
-+      0x98b9, 0x0088, 0x00c6, 0x2061, 0x19b8, 0x602c, 0x8000, 0x602e,\r
-+      0x600c, 0x9005, 0x0128, 0x9080, 0x0003, 0x2102, 0x610e, 0x0010,\r
-+      0x6112, 0x610e, 0x00ce, 0x001e, 0x0005, 0x2001, 0x0382, 0x2004,\r
-+      0x9084, 0x0007, 0x9086, 0x0001, 0x0198, 0x00c6, 0x6146, 0x600f,\r
-+      0x0000, 0x2c08, 0x2061, 0x19b8, 0x6044, 0x9005, 0x0130, 0x9080,\r
-+      0x0003, 0x2102, 0x6146, 0x00ce, 0x0005, 0x614a, 0x6146, 0x0cd8,\r
-+      0x6146, 0x600f, 0x0000, 0x2c08, 0x2001, 0x0013, 0x080c, 0x98b9,\r
-+      0x0005, 0x6044, 0xd0dc, 0x0128, 0x9006, 0x7007, 0x0000, 0x700a,\r
-+      0x7032, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096,\r
-+      0x0076, 0x0066, 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126,\r
-+      0x902e, 0x2071, 0x19b8, 0x7648, 0x2660, 0x2678, 0x2091, 0x8000,\r
-+      0x8cff, 0x0904, 0x85a3, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904,\r
-+      0x859e, 0x87ff, 0x0120, 0x605c, 0x9106, 0x1904, 0x859e, 0x704c,\r
-+      0x9c06, 0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x9286, 0x703f,\r
-+      0x0000, 0x9006, 0x704e, 0x706a, 0x7052, 0x706e, 0x003e, 0x2029,\r
-+      0x0001, 0x080c, 0x8521, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a,\r
-+      0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046,\r
-+      0x0010, 0x7047, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,\r
-+      0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xb847, 0x01c8,\r
-+      0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1560, 0xa867, 0x0103,\r
-+      0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c, 0xbb45,\r
-+      0x080c, 0xd51a, 0x080c, 0x6996, 0x007e, 0x003e, 0x001e, 0x080c,\r
-+      0xba36, 0x080c, 0x9c21, 0x00ce, 0x0804, 0x8540, 0x2c78, 0x600c,\r
-+      0x2060, 0x0804, 0x8540, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e,\r
-+      0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee,\r
-+      0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036,\r
-+      0x0076, 0x080c, 0xd51a, 0x080c, 0xd21e, 0x007e, 0x003e, 0x001e,\r
-+      0x08c0, 0x6020, 0x9086, 0x000a, 0x0918, 0x0800, 0x0006, 0x0066,\r
-+      0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091, 0x8000,\r
-+      0x2079, 0x19b8, 0x7848, 0x9065, 0x0904, 0x8625, 0x600c, 0x0006,\r
-+      0x600f, 0x0000, 0x784c, 0x9c06, 0x11a0, 0x0036, 0x2019, 0x0001,\r
-+      0x080c, 0x9286, 0x783f, 0x0000, 0x901e, 0x7b4e, 0x7b6a, 0x7b52,\r
-+      0x7b6e, 0x003e, 0x000e, 0x9005, 0x1118, 0x600c, 0x600f, 0x0000,\r
-+      0x0006, 0x00e6, 0x2f70, 0x080c, 0x8521, 0x00ee, 0x080c, 0xb847,\r
-+      0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1580, 0x3e08,\r
-+      0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058,\r
-+      0xb800, 0x00be, 0xd0bc, 0x0140, 0x6048, 0x9005, 0x1198, 0x2001,\r
-+      0x1959, 0x2004, 0x604a, 0x0070, 0xa867, 0x0103, 0xab7a, 0xa877,\r
-+      0x0000, 0x080c, 0x698a, 0x080c, 0xba36, 0x6044, 0xc0fc, 0x6046,\r
-+      0x080c, 0x9c21, 0x000e, 0x0804, 0x85d3, 0x7e4a, 0x7e46, 0x012e,\r
-+      0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020,\r
-+      0x9086, 0x0006, 0x1118, 0x080c, 0xd21e, 0x0c38, 0x6020, 0x9086,\r
-+      0x000a, 0x09e0, 0x08c8, 0x0016, 0x0026, 0x0086, 0x9046, 0x00a9,\r
-+      0x080c, 0x872c, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126,\r
-+      0x2079, 0x19b8, 0x2091, 0x8000, 0x080c, 0x8775, 0x080c, 0x8809,\r
-+      0x080c, 0x63fd, 0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6,\r
-+      0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091,\r
-+      0x8000, 0x2071, 0x19b8, 0x7620, 0x2660, 0x2678, 0x8cff, 0x0904,\r
-+      0x86f1, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x86ec, 0x88ff,\r
-+      0x0120, 0x605c, 0x9106, 0x1904, 0x86ec, 0x7030, 0x9c06, 0x1570,\r
-+      0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, 0x820b, 0x080c,\r
-+      0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x7033, 0x0000, 0x0036,\r
-+      0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,\r
-+      0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x2069, 0x0100, 0x6824,\r
-+      0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, 0x7008, 0xc0ad,\r
-+      0x700a, 0x6003, 0x0009, 0x630a, 0x0804, 0x86ec, 0x7020, 0x9c36,\r
-+      0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140, 0x2c00, 0x9f36,\r
-+      0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000, 0x660c, 0x0066,\r
-+      0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,\r
-+      0x6044, 0xc0fc, 0x6046, 0x6014, 0x2048, 0x080c, 0xb847, 0x01e8,\r
-+      0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xba5c, 0x1118, 0x080c,\r
-+      0xa58f, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016,\r
-+      0x0036, 0x0086, 0x080c, 0xbb45, 0x080c, 0xd51a, 0x080c, 0x6996,\r
-+      0x008e, 0x003e, 0x001e, 0x080c, 0xba36, 0x080c, 0x9c21, 0x080c,\r
-+      0x9378, 0x00ce, 0x0804, 0x8666, 0x2c78, 0x600c, 0x2060, 0x0804,\r
-+      0x8666, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee,\r
-+      0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158,\r
-+      0x0016, 0x0036, 0x0086, 0x080c, 0xd51a, 0x080c, 0xd21e, 0x008e,\r
-+      0x003e, 0x001e, 0x08d0, 0x080c, 0xa58f, 0x6020, 0x9086, 0x0002,\r
-+      0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x86d2,\r
-+      0x9086, 0x008b, 0x0904, 0x86d2, 0x0840, 0x6020, 0x9086, 0x0005,\r
-+      0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086,\r
-+      0x008b, 0x09b0, 0x0804, 0x86e5, 0x0006, 0x00f6, 0x00e6, 0x0096,\r
-+      0x00b6, 0x00c6, 0x0066, 0x0016, 0x0126, 0x2091, 0x8000, 0x9280,\r
-+      0x1000, 0x2004, 0x905d, 0x2079, 0x19b8, 0x9036, 0x7828, 0x2060,\r
-+      0x8cff, 0x0538, 0x6010, 0x9b06, 0x1500, 0x6043, 0xffff, 0x080c,\r
-+      0x9a84, 0x01d8, 0x610c, 0x0016, 0x080c, 0x9110, 0x6014, 0x2048,\r
-+      0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0086,\r
-+      0x080c, 0xbb45, 0x080c, 0xd51a, 0x080c, 0x6996, 0x008e, 0x003e,\r
-+      0x001e, 0x080c, 0x9c21, 0x00ce, 0x08d8, 0x2c30, 0x600c, 0x2060,\r
-+      0x08b8, 0x080c, 0x641a, 0x012e, 0x001e, 0x006e, 0x00ce, 0x00be,\r
-+      0x009e, 0x00ee, 0x00fe, 0x000e, 0x0005, 0x0096, 0x0006, 0x0066,\r
-+      0x00c6, 0x00d6, 0x9036, 0x7820, 0x9065, 0x0904, 0x87dc, 0x600c,\r
-+      0x0006, 0x6044, 0xc0fc, 0x6046, 0x600f, 0x0000, 0x7830, 0x9c06,\r
-+      0x1588, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, 0x820b,\r
-+      0x080c, 0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x7833, 0x0000,\r
-+      0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,\r
-+      0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x2069, 0x0100,\r
-+      0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0058, 0x080c,\r
-+      0x661d, 0x1538, 0x6003, 0x0009, 0x630a, 0x7808, 0xc0ad, 0x780a,\r
-+      0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xb845, 0x01b0, 0x6020,\r
-+      0x9086, 0x0003, 0x1508, 0x080c, 0xba5c, 0x1118, 0x080c, 0xa58f,\r
-+      0x0060, 0x080c, 0x661d, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877,\r
-+      0x0000, 0x080c, 0x6996, 0x080c, 0xba36, 0x080c, 0x9c21, 0x080c,\r
-+      0x9378, 0x000e, 0x0804, 0x877c, 0x7e22, 0x7e1e, 0x00de, 0x00ce,\r
-+      0x006e, 0x000e, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118,\r
-+      0x080c, 0xd21e, 0x0c50, 0x080c, 0xa58f, 0x6020, 0x9086, 0x0002,\r
-+      0x1150, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0990, 0x9086,\r
-+      0x008b, 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004,\r
-+      0x0006, 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00,\r
-+      0x0860, 0x0006, 0x0096, 0x00b6, 0x00c6, 0x0066, 0x9036, 0x7828,\r
-+      0x9065, 0x0510, 0x6010, 0x2058, 0x600c, 0x0006, 0x3e08, 0x918e,\r
-+      0x0002, 0x1118, 0xb800, 0xd0bc, 0x11a8, 0x6043, 0xffff, 0x080c,\r
-+      0x9a84, 0x0180, 0x610c, 0x080c, 0x9110, 0x6014, 0x2048, 0xa867,\r
-+      0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6996, 0x080c, 0x9c21,\r
-+      0x000e, 0x08f0, 0x2c30, 0x0ce0, 0x006e, 0x00ce, 0x00be, 0x009e,\r
-+      0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0x080c, 0x5dd6,\r
-+      0x11b0, 0x2071, 0x19b8, 0x7030, 0x9080, 0x0005, 0x2004, 0x904d,\r
-+      0x0170, 0xa878, 0x9606, 0x1158, 0x2071, 0x19b8, 0x7030, 0x9035,\r
-+      0x0130, 0x9080, 0x0005, 0x2004, 0x9906, 0x1108, 0x0029, 0x006e,\r
-+      0x009e, 0x00de, 0x00ee, 0x0005, 0x00c6, 0x2660, 0x6043, 0xffff,\r
-+      0x080c, 0x9a84, 0x0178, 0x080c, 0x9110, 0x6014, 0x2048, 0xa867,\r
-+      0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbb45, 0x080c, 0x6996,\r
-+      0x080c, 0x9c21, 0x00ce, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x080c,\r
-+      0x9926, 0x0106, 0x190c, 0x98c8, 0x2071, 0x0101, 0x2e04, 0xc0c4,\r
-+      0x2072, 0x6044, 0xd0fc, 0x1138, 0x010e, 0x190c, 0x98e4, 0x00ce,\r
-+      0x00ee, 0x00be, 0x0005, 0x2071, 0x19b8, 0x7030, 0x9005, 0x0da0,\r
-+      0x9c06, 0x190c, 0x0d65, 0x7036, 0x080c, 0x820b, 0x7004, 0x9084,\r
-+      0x0007, 0x0002, 0x88a4, 0x88a6, 0x88ad, 0x88b7, 0x88c5, 0x88a4,\r
-+      0x88ad, 0x88a2, 0x080c, 0x0d65, 0x0428, 0x0005, 0x080c, 0x9a6f,\r
-+      0x7007, 0x0000, 0x7033, 0x0000, 0x00e8, 0x0066, 0x9036, 0x080c,\r
-+      0x9110, 0x006e, 0x7007, 0x0000, 0x7033, 0x0000, 0x0098, 0x080c,\r
-+      0x9a5a, 0x0140, 0x080c, 0x9a6f, 0x0128, 0x0066, 0x9036, 0x080c,\r
-+      0x9110, 0x006e, 0x7033, 0x0000, 0x0028, 0x080c, 0x9a5a, 0x080c,\r
-+      0x94a2, 0x0000, 0x010e, 0x190c, 0x98e4, 0x00ce, 0x00ee, 0x00be,\r
-+      0x0005, 0x00d6, 0x00c6, 0x080c, 0x9926, 0x0106, 0x190c, 0x98c8,\r
-+      0x6044, 0xd0fc, 0x1130, 0x010e, 0x190c, 0x98e4, 0x00ce, 0x00de,\r
-+      0x0005, 0x2069, 0x19b8, 0x684c, 0x9005, 0x0da8, 0x9c06, 0x190c,\r
-+      0x0d65, 0x6852, 0x00e6, 0x2d70, 0x080c, 0x8521, 0x00ee, 0x080c,\r
-+      0x8218, 0x0016, 0x2009, 0x0040, 0x080c, 0x2052, 0x001e, 0x683c,\r
-+      0x9084, 0x0003, 0x0002, 0x8901, 0x8902, 0x8920, 0x88ff, 0x080c,\r
-+      0x0d65, 0x0460, 0x6868, 0x9086, 0x0001, 0x0190, 0x600c, 0x9015,\r
-+      0x0160, 0x6a4a, 0x600f, 0x0000, 0x6044, 0xc0fc, 0x6046, 0x9006,\r
-+      0x7042, 0x684e, 0x683f, 0x0000, 0x00c8, 0x684a, 0x6846, 0x0ca0,\r
-+      0x686b, 0x0000, 0x6848, 0x9065, 0x0d78, 0x6003, 0x0002, 0x0c60,\r
-+      0x9006, 0x686a, 0x6852, 0x686e, 0x600c, 0x9015, 0x0120, 0x6a4a,\r
-+      0x600f, 0x0000, 0x0018, 0x684e, 0x684a, 0x6846, 0x684f, 0x0000,\r
-+      0x010e, 0x190c, 0x98e4, 0x00ce, 0x00de, 0x0005, 0x0005, 0x6020,\r
-+      0x9084, 0x000f, 0x000b, 0x0005, 0x894c, 0x894f, 0x8da8, 0x8e37,\r
-+      0x894f, 0x8da8, 0x8e37, 0x894c, 0x894f, 0x894c, 0x894c, 0x894c,\r
-+      0x894c, 0x894c, 0x894c, 0x894c, 0x080c, 0x8874, 0x0005, 0x00b6,\r
-+      0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6,\r
-+      0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0053,\r
-+      0x1a0c, 0x0d65, 0x6110, 0x2158, 0xb984, 0x2c78, 0x2061, 0x0100,\r
-+      0x619a, 0x908a, 0x0040, 0x1a04, 0x89bb, 0x005b, 0x00fe, 0x00ee,\r
-+      0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be,\r
-+      0x0005, 0x8b32, 0x8b6d, 0x8b96, 0x8c39, 0x8c5a, 0x8c60, 0x8c6d,\r
-+      0x8c75, 0x8c81, 0x8c87, 0x8c98, 0x8c87, 0x8cef, 0x8c75, 0x8cfb,\r
-+      0x8d01, 0x8c81, 0x8d01, 0x8d0d, 0x89b9, 0x89b9, 0x89b9, 0x89b9,\r
-+      0x89b9, 0x89b9, 0x89b9, 0x89b9, 0x89b9, 0x89b9, 0x89b9, 0x9131,\r
-+      0x9154, 0x9165, 0x9185, 0x91b7, 0x8c6d, 0x89b9, 0x8c6d, 0x8c87,\r
-+      0x89b9, 0x8b96, 0x8c39, 0x89b9, 0x9595, 0x8c87, 0x89b9, 0x95b1,\r
-+      0x8c87, 0x89b9, 0x8c81, 0x8b2c, 0x89dc, 0x89b9, 0x95cd, 0x963a,\r
-+      0x971a, 0x89b9, 0x9727, 0x8c6a, 0x9752, 0x89b9, 0x91c1, 0x975e,\r
-+      0x89b9, 0x080c, 0x0d65, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de,\r
-+      0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005,\r
-+      0x89da, 0x89da, 0x89da, 0x8a03, 0x8aaf, 0x8aba, 0x89da, 0x89da,\r
-+      0x89da, 0x8b01, 0x8b0d, 0x8a1e, 0x89da, 0x8a39, 0x8a6d, 0x9ada,\r
-+      0x9b1f, 0x8c87, 0x080c, 0x0d65, 0x00d6, 0x0096, 0x080c, 0x8d20,\r
-+      0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800, 0x7814, 0x2048,\r
-+      0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, 0x60c3, 0x0018,\r
-+      0x080c, 0x8f87, 0x009e, 0x00de, 0x0005, 0x7810, 0x00b6, 0x2058,\r
-+      0xb8a0, 0x00be, 0x080c, 0x9b66, 0x1118, 0x9084, 0xff80, 0x0110,\r
-+      0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, 0x8d20, 0x7003,\r
-+      0x0500, 0x7814, 0x2048, 0xa874, 0x700a, 0xa878, 0x700e, 0xa87c,\r
-+      0x7012, 0xa880, 0x7016, 0xa884, 0x701a, 0xa888, 0x701e, 0x60c3,\r
-+      0x0010, 0x080c, 0x8f87, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096,\r
-+      0x080c, 0x8d20, 0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc, 0x700a,\r
-+      0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016, 0xa8dc, 0x701a,\r
-+      0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, 0x8f87, 0x009e, 0x00de,\r
-+      0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x8d20,\r
-+      0x20e9, 0x0000, 0x2001, 0x1974, 0x2003, 0x0000, 0x7814, 0x2048,\r
-+      0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c,\r
-+      0x9080, 0x001b, 0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x2001,\r
-+      0x0001, 0x080c, 0x2037, 0x080c, 0xc591, 0x9006, 0x080c, 0x2037,\r
-+      0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9, 0x080c,\r
-+      0x8f87, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x8d6b, 0x20e9, 0x0000, 0x2001, 0x1974,\r
-+      0x2003, 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200, 0xa873, 0x0000,\r
-+      0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c,\r
-+      0x9080, 0x001b, 0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x080c,\r
-+      0xc591, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c60, 0x0051,\r
-+      0x7814, 0x2048, 0x080c, 0x0fd4, 0x080c, 0x8f87, 0x012e, 0x009e,\r
-+      0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003, 0x9005, 0x0130,\r
-+      0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005, 0x080c,\r
-+      0x8d20, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008,\r
-+      0x0804, 0x8f87, 0x00d6, 0x00e6, 0x080c, 0x8d6b, 0x7814, 0x9084,\r
-+      0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095, 0x0010, 0x2272,\r
-+      0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, 0x20a9, 0x0004,\r
-+      0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x8ad0, 0x2069, 0x1801, 0x20a9,\r
-+      0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x8ad9, 0x2069, 0x1984,\r
-+      0x9086, 0xdf00, 0x0110, 0x2069, 0x199e, 0x20a9, 0x001a, 0x9e86,\r
-+      0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, 0x8000, 0x6012,\r
-+      0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70,\r
-+      0x1f04, 0x8ae7, 0x60c3, 0x004c, 0x080c, 0x8f87, 0x00ee, 0x00de,\r
-+      0x0005, 0x080c, 0x8d20, 0x7003, 0x6300, 0x7007, 0x0028, 0x7808,\r
-+      0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x00d6, 0x0026, 0x0016,\r
-+      0x080c, 0x8d6b, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0,\r
-+      0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2073, 0x0800, 0x8e70,\r
-+      0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x8f87,\r
-+      0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1817, 0x2004, 0x609a,\r
-+      0x0804, 0x8f87, 0x080c, 0x8d20, 0x7003, 0x5200, 0x2069, 0x1853,\r
-+      0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x2457, 0x710e,\r
-+      0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,\r
-+      0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801,\r
-+      0x20a1, 0x0254, 0x4003, 0x080c, 0x9b66, 0x1120, 0xb8a0, 0x9082,\r
-+      0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7032, 0x2001, 0x181f,\r
-+      0x2004, 0x7036, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff,\r
-+      0x7036, 0x60c3, 0x001c, 0x0804, 0x8f87, 0x080c, 0x8d20, 0x7003,\r
-+      0x0500, 0x080c, 0x9b66, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,\r
-+      0x2001, 0x181e, 0x2004, 0x700a, 0x2001, 0x181f, 0x2004, 0x700e,\r
-+      0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9,\r
-+      0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1,\r
-+      0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0x8f87, 0x080c, 0x8d20,\r
-+      0x9006, 0x080c, 0x6631, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003,\r
-+      0x0400, 0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d,\r
-+      0x0120, 0x9006, 0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300,\r
-+      0xb8a0, 0x9086, 0x007e, 0x1904, 0x8c01, 0x00d6, 0x2069, 0x193d,\r
-+      0x2001, 0x1836, 0x2004, 0xd0a4, 0x0178, 0x6800, 0x700a, 0x6808,\r
-+      0x9084, 0x2000, 0x7012, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818,\r
-+      0x7022, 0x681c, 0x7026, 0x0080, 0x6800, 0x700a, 0x6804, 0x700e,\r
-+      0x6808, 0x080c, 0x70b7, 0x1118, 0x9084, 0x37ff, 0x0010, 0x9084,\r
-+      0x3fff, 0x7012, 0x680c, 0x7016, 0x00de, 0x20a9, 0x0004, 0x20e1,\r
-+      0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003,\r
-+      0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, 0x00d6,\r
-+      0x080c, 0x97e5, 0x2069, 0x1945, 0x2071, 0x024e, 0x6800, 0xc0dd,\r
-+      0x7002, 0x080c, 0x5391, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de,\r
-+      0x04a0, 0x2001, 0x1836, 0x2004, 0xd0a4, 0x0168, 0x0016, 0x2009,\r
-+      0x0002, 0x60e0, 0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c,\r
-+      0x2498, 0x61e2, 0x001e, 0x20e1, 0x0001, 0x2099, 0x193d, 0x20e9,\r
-+      0x0000, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004,\r
-+      0x2099, 0x1805, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099,\r
-+      0x1801, 0x20a1, 0x025a, 0x4003, 0x080c, 0x97e5, 0x20a1, 0x024e,\r
-+      0x20a9, 0x0008, 0x2099, 0x1945, 0x4003, 0x60c3, 0x0074, 0x0804,\r
-+      0x8f87, 0x080c, 0x8d20, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b,\r
-+      0x0800, 0x700f, 0x2000, 0x9006, 0x00f6, 0x2079, 0x1853, 0x7904,\r
-+      0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0x0010, 0x9085, 0x0010,\r
-+      0x9085, 0x0002, 0x00d6, 0x0804, 0x8cd0, 0x7026, 0x60c3, 0x0014,\r
-+      0x0804, 0x8f87, 0x080c, 0x8d20, 0x7003, 0x5000, 0x0804, 0x8bb0,\r
-+      0x080c, 0x8d20, 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014,\r
-+      0x0804, 0x8f87, 0x080c, 0x8d62, 0x0010, 0x080c, 0x8d6b, 0x7003,\r
-+      0x0200, 0x60c3, 0x0004, 0x0804, 0x8f87, 0x080c, 0x8d6b, 0x7003,\r
-+      0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804,\r
-+      0x8f87, 0x080c, 0x8d6b, 0x7003, 0x0200, 0x0804, 0x8bb0, 0x080c,\r
-+      0x8d6b, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010,\r
-+      0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87,\r
-+      0x00d6, 0x080c, 0x8d6b, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b,\r
-+      0x0800, 0xb894, 0x9086, 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030,\r
-+      0x0190, 0xb998, 0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f,\r
-+      0x2100, 0x0058, 0x700f, 0x0100, 0x0040, 0x700f, 0x0400, 0x0028,\r
-+      0x700f, 0x0700, 0x0010, 0x700f, 0x0800, 0x00f6, 0x2079, 0x1853,\r
-+      0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0x0010, 0x9085,\r
-+      0x0010, 0x2009, 0x1875, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002,\r
-+      0x0026, 0x2009, 0x1873, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbac4,\r
-+      0xd28c, 0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140,\r
-+      0xd1ec, 0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd,\r
-+      0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0x8f87, 0x080c,\r
-+      0x8d6b, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3,\r
-+      0x0014, 0x0804, 0x8f87, 0x080c, 0x8d6b, 0x7003, 0x0200, 0x0804,\r
-+      0x8b36, 0x080c, 0x8d6b, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f,\r
-+      0x2a00, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x080c, 0x8d6b, 0x7003,\r
-+      0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x0026,\r
-+      0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040,\r
-+      0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100,\r
-+      0x080c, 0x97fa, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069,\r
-+      0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x9485, 0x0029, 0x7012,\r
-+      0x004e, 0x003e, 0x00de, 0x080c, 0x8f7b, 0x721a, 0x9f95, 0x0000,\r
-+      0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026,\r
-+      0x080c, 0x97fa, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069,\r
-+      0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x00de, 0x7013, 0x2029,\r
-+      0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f,\r
-+      0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300,\r
-+      0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019,\r
-+      0x2300, 0x2021, 0x0100, 0x080c, 0x97fa, 0xb810, 0x9305, 0x7002,\r
-+      0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814,\r
-+      0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x6878,\r
-+      0x700a, 0x687c, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e,\r
-+      0x003e, 0x00de, 0x080c, 0x8f7b, 0x721a, 0x7a08, 0x7222, 0x2f10,\r
-+      0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x8f7b, 0x721a,\r
-+      0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005,\r
-+      0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071,\r
-+      0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d65, 0x908a, 0x0092,\r
-+      0x1a0c, 0x0d65, 0x6110, 0x2158, 0xb984, 0x2c78, 0x2061, 0x0100,\r
-+      0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce,\r
-+      0x00be, 0x0005, 0x8dd9, 0x8de8, 0x8df3, 0x8dd7, 0x8dd7, 0x8dd7,\r
-+      0x8dd9, 0x8dd7, 0x8dd7, 0x8dd7, 0x8dd7, 0x8dd7, 0x8dd7, 0x080c,\r
-+      0x0d65, 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x27a2, 0x0228,\r
-+      0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x8f87,\r
-+      0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3,\r
-+      0x000c, 0x0804, 0x8f87, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300,\r
-+      0x60c3, 0x0004, 0x0804, 0x8f87, 0x0026, 0x080c, 0x97fa, 0xb810,\r
-+      0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878,\r
-+      0x700a, 0x687c, 0x700e, 0x7013, 0x0009, 0x0804, 0x8d3b, 0x0026,\r
-+      0x080c, 0x97fa, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006,\r
-+      0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099,\r
-+      0x7012, 0x0804, 0x8d9d, 0x0026, 0x080c, 0x97fa, 0xb810, 0x9085,\r
-+      0x8500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a,\r
-+      0x687c, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x8d9d, 0x00b6,\r
-+      0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071,\r
-+      0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0d65, 0x908a, 0x0057,\r
-+      0x1a0c, 0x0d65, 0x7910, 0x2158, 0xb984, 0x2061, 0x0100, 0x619a,\r
-+      0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,\r
-+      0x0005, 0x8e6c, 0x8e6c, 0x8e6c, 0x8e92, 0x8e6c, 0x8e6c, 0x8e6c,\r
-+      0x8e6c, 0x8e6c, 0x8e6c, 0x8e6c, 0x9355, 0x935d, 0x9365, 0x936d,\r
-+      0x8e6c, 0x8e6c, 0x8e6c, 0x934d, 0x080c, 0x0d65, 0x6813, 0x0008,\r
-+      0xba8c, 0x8210, 0xb8c4, 0xd084, 0x0128, 0x7a4e, 0x7b14, 0x7b52,\r
-+      0x722e, 0x732a, 0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10,\r
-+      0x9295, 0x0600, 0x7202, 0xba14, 0x7206, 0x2069, 0x1800, 0x6a78,\r
-+      0x720a, 0x6a7c, 0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027,\r
-+      0xffff, 0x0005, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013,\r
-+      0x001e, 0x0005, 0x8ea2, 0x8ea2, 0x8ea4, 0x8ea2, 0x8ea2, 0x8ea2,\r
-+      0x8ebe, 0x8ea2, 0x080c, 0x0d65, 0x7914, 0x918c, 0x08ff, 0x918d,\r
-+      0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, 0x1853, 0x6804,\r
-+      0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010,\r
-+      0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0x8f87, 0x2009, 0x0003,\r
-+      0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0x97fa, 0x001e,\r
-+      0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,\r
-+      0x6a78, 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0888, 0x918d, 0x0008,\r
-+      0x7116, 0x080c, 0x8f7b, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,\r
-+      0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046,\r
-+      0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0,\r
-+      0x2028, 0xb910, 0xba14, 0x7378, 0x747c, 0x7820, 0x0002, 0x8f06,\r
-+      0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x8f06,\r
-+      0x8f06, 0x8f08, 0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x080c, 0x0d65,\r
-+      0xb884, 0x609e, 0x7814, 0x2048, 0xa87c, 0xd0fc, 0x0558, 0xaf90,\r
-+      0x9784, 0xff00, 0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006,\r
-+      0x7814, 0x2048, 0xa878, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94,\r
-+      0x87ff, 0x0198, 0x2039, 0x0098, 0x9705, 0x6072, 0x7808, 0x6082,\r
-+      0x2f00, 0x6086, 0x0038, 0x9185, 0x2200, 0x6062, 0x6073, 0x0129,\r
-+      0x6077, 0x0000, 0xb884, 0x609e, 0x0050, 0x2039, 0x0029, 0x9705,\r
-+      0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062, 0x6073, 0x2029, 0xa87c,\r
-+      0xd0fc, 0x0118, 0xaf94, 0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808,\r
-+      0x6086, 0x6266, 0x636a, 0x646e, 0x6077, 0x0000, 0xb88c, 0x8000,\r
-+      0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0xa848,\r
-+      0x608a, 0xa844, 0x608e, 0xa838, 0x60c6, 0xa834, 0x60ca, 0xb86c,\r
-+      0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x080c, 0x97da, 0x2009,\r
-+      0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58,\r
-+      0x080c, 0x8210, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee,\r
-+      0x009e, 0x00be, 0x0005, 0x7a40, 0x9294, 0x00ff, 0x8217, 0x0005,\r
-+      0x00d6, 0x2069, 0x19b8, 0x686b, 0x0001, 0x00de, 0x0005, 0x60a3,\r
-+      0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x8202, 0x0005, 0x0016,\r
-+      0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128,\r
-+      0x0089, 0x080c, 0x8202, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c,\r
-+      0x2102, 0x2001, 0x19b9, 0x2003, 0x0000, 0x2001, 0x19c4, 0x2003,\r
-+      0x0000, 0x0c88, 0x0006, 0x0016, 0x0026, 0x2009, 0x1804, 0x2011,\r
-+      0x0009, 0x080c, 0x287c, 0x002e, 0x001e, 0x000e, 0x0005, 0x0016,\r
-+      0x00c6, 0x0006, 0x080c, 0x9926, 0x0106, 0x190c, 0x98c8, 0x2061,\r
-+      0x0100, 0x61a4, 0x60a7, 0x95f5, 0x0016, 0x0026, 0x2009, 0x1804,\r
-+      0x2011, 0x0008, 0x080c, 0x287c, 0x002e, 0x001e, 0x010e, 0x190c,\r
-+      0x98e4, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e,\r
-+      0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069,\r
-+      0x0140, 0x080c, 0x70b7, 0x1510, 0x2001, 0x19dd, 0x2004, 0x9005,\r
-+      0x1904, 0x9038, 0x080c, 0x7158, 0x11a8, 0x2069, 0x0380, 0x6843,\r
-+      0x0101, 0x6844, 0xd084, 0x1de8, 0x2061, 0x0100, 0x6020, 0xd0b4,\r
-+      0x1120, 0x6024, 0xd084, 0x090c, 0x0d65, 0x6843, 0x0100, 0x080c,\r
-+      0x8202, 0x04b0, 0x00c6, 0x2061, 0x19b8, 0x00f0, 0x6904, 0x9194,\r
-+      0x4000, 0x0598, 0x080c, 0x8fb7, 0x080c, 0x2843, 0x00c6, 0x2061,\r
-+      0x19b8, 0x6134, 0x9192, 0x0008, 0x1278, 0x8108, 0x6136, 0x080c,\r
-+      0x98c8, 0x6130, 0x080c, 0x98e4, 0x00ce, 0x81ff, 0x01c8, 0x080c,\r
-+      0x8202, 0x080c, 0x8faa, 0x00a0, 0x080c, 0x98c8, 0x6130, 0x91e5,\r
-+      0x0000, 0x0150, 0x080c, 0xd610, 0x080c, 0x820b, 0x6003, 0x0001,\r
-+      0x2009, 0x0014, 0x080c, 0x9c85, 0x080c, 0x98e4, 0x00ce, 0x0000,\r
-+      0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x19dd, 0x2004,\r
-+      0x9005, 0x1db0, 0x00c6, 0x2061, 0x19b8, 0x6134, 0x9192, 0x0003,\r
-+      0x1ad8, 0x8108, 0x6136, 0x00ce, 0x080c, 0x8202, 0x080c, 0x5b97,\r
-+      0x2009, 0x1852, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x8218, 0x080c, 0x98c8,\r
-+      0x2001, 0x0387, 0x2003, 0x0202, 0x2071, 0x19b8, 0x714c, 0x81ff,\r
-+      0x0904, 0x90cc, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x70b7,\r
-+      0x11c0, 0x0036, 0x2019, 0x0002, 0x080c, 0x9286, 0x003e, 0x714c,\r
-+      0x2160, 0x080c, 0xd610, 0x2009, 0x004a, 0x6003, 0x0003, 0x080c,\r
-+      0x9c85, 0x2001, 0x0386, 0x2003, 0x5040, 0x080c, 0x7158, 0x0804,\r
-+      0x90cc, 0x6904, 0xd1f4, 0x0904, 0x90d9, 0x080c, 0x2843, 0x00c6,\r
-+      0x704c, 0x9065, 0x090c, 0x0d65, 0x6020, 0x00ce, 0x9086, 0x0006,\r
-+      0x1518, 0x61c8, 0x60c4, 0x9105, 0x11f8, 0x2009, 0x180c, 0x2104,\r
-+      0xd0d4, 0x01d0, 0x6214, 0x9294, 0x1800, 0x1128, 0x6224, 0x9294,\r
-+      0x0002, 0x1510, 0x0010, 0xc0d4, 0x200a, 0x6014, 0x9084, 0xe7fd,\r
-+      0x9085, 0x0010, 0x6016, 0x704c, 0x2060, 0x080c, 0x88d1, 0x2009,\r
-+      0x0049, 0x080c, 0x9c85, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c,\r
-+      0x9286, 0x003e, 0x714c, 0x2160, 0x080c, 0xd610, 0x2009, 0x004a,\r
-+      0x6003, 0x0003, 0x080c, 0x9c85, 0x2001, 0x0387, 0x2003, 0x0200,\r
-+      0x080c, 0x98e4, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e,\r
-+      0x0005, 0xd1ec, 0x1904, 0x908d, 0x0804, 0x908f, 0x0026, 0x00e6,\r
-+      0x2071, 0x19b8, 0x706c, 0xd084, 0x01d0, 0xc084, 0x706e, 0x714c,\r
-+      0x81ff, 0x01a8, 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e,\r
-+      0x0006, 0x1138, 0x2009, 0x1984, 0x2011, 0x0012, 0x080c, 0x287c,\r
-+      0x0030, 0x2009, 0x1984, 0x2011, 0x0016, 0x080c, 0x287c, 0x00ee,\r
-+      0x002e, 0x0005, 0x9036, 0x2001, 0x19c2, 0x2004, 0x9005, 0x0128,\r
-+      0x9c06, 0x0128, 0x2c30, 0x600c, 0x0cc8, 0x9085, 0x0001, 0x0005,\r
-+      0x00f6, 0x2079, 0x19b8, 0x610c, 0x9006, 0x600e, 0x6044, 0xc0fc,\r
-+      0x6046, 0x86ff, 0x1140, 0x7824, 0x9c06, 0x1118, 0x7826, 0x782a,\r
-+      0x0050, 0x792a, 0x0040, 0x00c6, 0x2660, 0x610e, 0x00ce, 0x7824,\r
-+      0x9c06, 0x1108, 0x7e26, 0x080c, 0x9378, 0x080c, 0xba36, 0x00fe,\r
-+      0x0005, 0x080c, 0x8d20, 0x7003, 0x1200, 0x7838, 0x7012, 0x783c,\r
-+      0x7016, 0x00c6, 0x7820, 0x9086, 0x0004, 0x1148, 0x7810, 0x9005,\r
-+      0x0130, 0x00b6, 0x2058, 0xb810, 0xb914, 0x00be, 0x0020, 0x2061,\r
-+      0x1800, 0x6078, 0x617c, 0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce,\r
-+      0x60c3, 0x002c, 0x0804, 0x8f87, 0x080c, 0x8d20, 0x7003, 0x0f00,\r
-+      0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff, 0x700a, 0xb814,\r
-+      0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x0156, 0x080c, 0x8d6b,\r
-+      0x7003, 0x0200, 0x2011, 0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006,\r
-+      0x2011, 0x1840, 0x2019, 0x1841, 0x9ef0, 0x0002, 0x2376, 0x8e70,\r
-+      0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0x9176,\r
-+      0x60c3, 0x001c, 0x015e, 0x0804, 0x8f87, 0x0016, 0x0026, 0x080c,\r
-+      0x8d47, 0x080c, 0x8d59, 0x9e80, 0x0004, 0x20e9, 0x0000, 0x20a0,\r
-+      0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c,\r
-+      0x9080, 0x0021, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8,\r
-+      0x9192, 0x0010, 0x1250, 0x4003, 0x9080, 0x0004, 0x8003, 0x60c2,\r
-+      0x080c, 0x8f87, 0x002e, 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003,\r
-+      0x080c, 0x97e5, 0x20a1, 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c,\r
-+      0x8d20, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804,\r
-+      0x8f87, 0x0016, 0x0026, 0x080c, 0x8d20, 0x20e9, 0x0000, 0x20a1,\r
-+      0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0,\r
-+      0xa85c, 0x9080, 0x0023, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002,\r
-+      0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0x8f87, 0x002e, 0x001e,\r
-+      0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,\r
-+      0x19b8, 0x7010, 0x2060, 0x8cff, 0x0188, 0x080c, 0xba5c, 0x1110,\r
-+      0x080c, 0xa58f, 0x600c, 0x0006, 0x080c, 0xbcd3, 0x600f, 0x0000,\r
-+      0x080c, 0x9be7, 0x080c, 0x9378, 0x00ce, 0x0c68, 0x2c00, 0x7012,\r
-+      0x700e, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156,\r
-+      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006,\r
-+      0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102,\r
-+      0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19b8, 0x7030, 0x2060,\r
-+      0x8cff, 0x0548, 0x080c, 0x8fb7, 0x6ac0, 0x68c3, 0x0000, 0x080c,\r
-+      0x820b, 0x00c6, 0x2061, 0x0100, 0x080c, 0x97fe, 0x00ce, 0x20a9,\r
-+      0x01f4, 0x04b1, 0x080c, 0x8874, 0x6044, 0xd0ac, 0x1128, 0x2001,\r
-+      0x1959, 0x2004, 0x604a, 0x0020, 0x2009, 0x0013, 0x080c, 0x9c85,\r
-+      0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,\r
-+      0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001,\r
-+      0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x820b, 0x6814, 0x9084,\r
-+      0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,\r
-+      0x2011, 0x5b41, 0x080c, 0x8159, 0x20a9, 0x01f4, 0x0009, 0x08c0,\r
-+      0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000,\r
-+      0x190c, 0x2843, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010,\r
-+      0x1f04, 0x9268, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100,\r
-+      0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x0005, 0x0126, 0x0156,\r
-+      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006,\r
-+      0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102,\r
-+      0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x0380, 0x701c, 0x0006,\r
-+      0x701f, 0x0202, 0x2071, 0x19b8, 0x704c, 0x2060, 0x8cff, 0x0904,\r
-+      0x9327, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002, 0x0904,\r
-+      0x9327, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109,\r
-+      0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8218, 0x080c, 0x1c7a,\r
-+      0x0046, 0x2009, 0x00a5, 0x080c, 0x0e3d, 0x2021, 0x0169, 0x2404,\r
-+      0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af, 0x95f5, 0x68c6,\r
-+      0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090, 0x2071, 0x19b8,\r
-+      0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816, 0x782b, 0x0008,\r
-+      0x7057, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002, 0x1128, 0x7884,\r
-+      0x9005, 0x1110, 0x7887, 0x0001, 0x0016, 0x2009, 0x0040, 0x080c,\r
-+      0x2052, 0x001e, 0x2009, 0x0000, 0x080c, 0x0e3d, 0x004e, 0x20a9,\r
-+      0x03e8, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084,\r
-+      0x4000, 0x190c, 0x2843, 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002,\r
-+      0x0010, 0x1f04, 0x92f9, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001,\r
-+      0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x6827, 0x4000,\r
-+      0x6824, 0x83ff, 0x1160, 0x2009, 0x0049, 0x080c, 0x88d1, 0x6044,\r
-+      0xd0ac, 0x1118, 0x6003, 0x0002, 0x0010, 0x080c, 0x9c85, 0x000e,\r
-+      0x2071, 0x0380, 0xd08c, 0x1110, 0x701f, 0x0200, 0x000e, 0x001e,\r
-+      0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,\r
-+      0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b8, 0x6a06,\r
-+      0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069,\r
-+      0x19b8, 0x6a3e, 0x012e, 0x00de, 0x0005, 0x080c, 0x8e6e, 0x785c,\r
-+      0x7032, 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c, 0x8e6e, 0x785c,\r
-+      0x7032, 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c, 0x8e6e, 0x785c,\r
-+      0x7032, 0x7042, 0x7047, 0x2000, 0x0078, 0x080c, 0x8e6e, 0x785c,\r
-+      0x7032, 0x7042, 0x7047, 0x0400, 0x0038, 0x080c, 0x8e6e, 0x785c,\r
-+      0x7032, 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0x8f87,\r
-+      0x00e6, 0x2071, 0x19b8, 0x702c, 0x9005, 0x0110, 0x8001, 0x702e,\r
-+      0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066,\r
-+      0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7620, 0x2660,\r
-+      0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x941d, 0x8cff, 0x0904,\r
-+      0x941d, 0x6020, 0x9086, 0x0006, 0x1904, 0x9418, 0x88ff, 0x0138,\r
-+      0x2800, 0x9c06, 0x1904, 0x9418, 0x2039, 0x0000, 0x0050, 0x6010,\r
-+      0x9b06, 0x1904, 0x9418, 0x85ff, 0x0120, 0x605c, 0x9106, 0x1904,\r
-+      0x9418, 0x7030, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005,\r
-+      0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x820b,\r
-+      0x080c, 0x94a2, 0x7033, 0x0000, 0x0428, 0x080c, 0x820b, 0x6820,\r
-+      0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,\r
-+      0x080c, 0x94a2, 0x7033, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,\r
-+      0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2833, 0x9006,\r
-+      0x080c, 0x2833, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,\r
-+      0x0001, 0x003e, 0x7020, 0x9c36, 0x1110, 0x660c, 0x7622, 0x701c,\r
-+      0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010,\r
-+      0x701f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,\r
-+      0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014, 0x0096,\r
-+      0x2048, 0x080c, 0xb845, 0x0110, 0x080c, 0xd21e, 0x009e, 0x080c,\r
-+      0x9c21, 0x080c, 0x9378, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x9393,\r
-+      0x2c78, 0x600c, 0x2060, 0x0804, 0x9393, 0x9006, 0x012e, 0x000e,\r
-+      0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b,\r
-+      0x0000, 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6,\r
-+      0x0096, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000,\r
-+      0x2071, 0x19b8, 0x7648, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9491,\r
-+      0x6020, 0x9086, 0x0006, 0x1904, 0x948c, 0x87ff, 0x0128, 0x2700,\r
-+      0x9c06, 0x1904, 0x948c, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff,\r
-+      0x0118, 0x605c, 0x9106, 0x15c0, 0x704c, 0x9c06, 0x1168, 0x0036,\r
-+      0x2019, 0x0001, 0x080c, 0x9286, 0x703f, 0x0000, 0x9006, 0x704e,\r
-+      0x706a, 0x7052, 0x706e, 0x003e, 0x7048, 0x9c36, 0x1110, 0x660c,\r
-+      0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,\r
-+      0x7046, 0x0010, 0x7047, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,\r
-+      0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048,\r
-+      0x080c, 0xb845, 0x0110, 0x080c, 0xd21e, 0x080c, 0x9c21, 0x87ff,\r
-+      0x1198, 0x00ce, 0x0804, 0x943d, 0x2c78, 0x600c, 0x2060, 0x0804,\r
-+      0x943d, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e,\r
-+      0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd,\r
-+      0x0001, 0x0c80, 0x00e6, 0x2071, 0x19b8, 0x7033, 0x0000, 0x7004,\r
-+      0x9086, 0x0003, 0x0158, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002,\r
-+      0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005,\r
-+      0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,\r
-+      0x8000, 0x2071, 0x19b8, 0x2c10, 0x7648, 0x2660, 0x2678, 0x8cff,\r
-+      0x0518, 0x2200, 0x9c06, 0x11e0, 0x7048, 0x9c36, 0x1110, 0x660c,\r
-+      0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,\r
-+      0x7046, 0x0010, 0x7047, 0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110,\r
-+      0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x9085, 0x0001, 0x0020,\r
-+      0x2c78, 0x600c, 0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e,\r
-+      0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6,\r
-+      0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,\r
-+      0x19b8, 0x7610, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9584, 0x6010,\r
-+      0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, 0x957f, 0x7030,\r
-+      0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x955b,\r
-+      0x080c, 0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x7033, 0x0000,\r
-+      0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,\r
-+      0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x2069, 0x0100,\r
-+      0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36,\r
-+      0x1110, 0x660c, 0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36,\r
-+      0x0118, 0x2f00, 0x700e, 0x0010, 0x700f, 0x0000, 0x660c, 0x0066,\r
-+      0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,\r
-+      0x080c, 0xba4b, 0x1158, 0x080c, 0x303b, 0x080c, 0xba5c, 0x11f0,\r
-+      0x080c, 0xa58f, 0x00d8, 0x080c, 0x94a2, 0x08c0, 0x080c, 0xba5c,\r
-+      0x1118, 0x080c, 0xa58f, 0x0090, 0x6014, 0x2048, 0x080c, 0xb845,\r
-+      0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa867, 0x0103, 0xab7a,\r
-+      0xa877, 0x0000, 0x080c, 0x698a, 0x080c, 0xba36, 0x080c, 0xbcd3,\r
-+      0x080c, 0x9c21, 0x080c, 0x9378, 0x00ce, 0x0804, 0x9504, 0x2c78,\r
-+      0x600c, 0x2060, 0x0804, 0x9504, 0x012e, 0x000e, 0x002e, 0x006e,\r
-+      0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086,\r
-+      0x0006, 0x1d20, 0x080c, 0xd21e, 0x0c08, 0x00d6, 0x080c, 0x8d6b,\r
-+      0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001,\r
-+      0x2099, 0x195a, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004,\r
-+      0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c, 0x8f87, 0x00de,\r
-+      0x0005, 0x080c, 0x8d6b, 0x700b, 0x0800, 0x7814, 0x9084, 0xff00,\r
-+      0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c, 0x7026, 0x7860,\r
-+      0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7860, 0x9084, 0xff00,\r
-+      0x8007, 0x7006, 0x60c2, 0x0804, 0x8f87, 0x00b6, 0x00d6, 0x0016,\r
-+      0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xbed9, 0x00de, 0x1904,\r
-+      0x9632, 0x080c, 0x8d20, 0x7003, 0x1300, 0x782c, 0x080c, 0x973d,\r
-+      0x2068, 0x6820, 0x9086, 0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0,\r
-+      0x080c, 0x9b66, 0x11d8, 0x9286, 0x007e, 0x1128, 0x700b, 0x00ff,\r
-+      0x700f, 0xfffe, 0x0498, 0x9286, 0x007f, 0x1128, 0x700b, 0x00ff,\r
-+      0x700f, 0xfffd, 0x0458, 0x9284, 0xff80, 0x0180, 0x9286, 0x0080,\r
-+      0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000,\r
-+      0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0, 0xb884, 0x700e,\r
-+      0x00a8, 0x080c, 0x9b66, 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082,\r
-+      0x007e, 0x0250, 0x00d6, 0x2069, 0x181e, 0x2d04, 0x700a, 0x8d68,\r
-+      0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e, 0x7838, 0x7012,\r
-+      0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de, 0x080c, 0x8f87,\r
-+      0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006, 0x001e, 0x00de,\r
-+      0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c, 0x9186, 0x0006,\r
-+      0x01c0, 0x9186, 0x0003, 0x0904, 0x96b0, 0x9186, 0x0005, 0x0904,\r
-+      0x9698, 0x9186, 0x0004, 0x05f0, 0x9186, 0x0008, 0x0904, 0x96a1,\r
-+      0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700, 0x080c, 0x971a,\r
-+      0x0005, 0x080c, 0x96db, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009,\r
-+      0x4000, 0x6800, 0x6a44, 0xd2fc, 0x11f8, 0x0002, 0x9679, 0x9684,\r
-+      0x967b, 0x9684, 0x9680, 0x9679, 0x9679, 0x9684, 0x9684, 0x9684,\r
-+      0x9684, 0x9679, 0x9679, 0x9679, 0x9679, 0x9679, 0x9684, 0x9679,\r
-+      0x9684, 0x080c, 0x0d65, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110,\r
-+      0x900e, 0x0010, 0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026,\r
-+      0x0804, 0x96d4, 0x080c, 0x96db, 0x00d6, 0x0026, 0x792c, 0x2168,\r
-+      0x2009, 0x4000, 0x6a00, 0x9286, 0x0002, 0x1108, 0x900e, 0x04e0,\r
-+      0x080c, 0x96db, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000,\r
-+      0x0498, 0x04c9, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000,\r
-+      0x9286, 0x0005, 0x0118, 0x9286, 0x0002, 0x1108, 0x900e, 0x0420,\r
-+      0x0451, 0x00d6, 0x0026, 0x792c, 0x2168, 0x6814, 0x0096, 0x2048,\r
-+      0xa9ac, 0xa834, 0x9112, 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022,\r
-+      0x7226, 0x792c, 0x9180, 0x0011, 0x2004, 0xd0fc, 0x1148, 0x9180,\r
-+      0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118,\r
-+      0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e,\r
-+      0x00de, 0x0804, 0x8f87, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066,\r
-+      0x080c, 0x8d6b, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c,\r
-+      0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0x9b66, 0x1118, 0x9092,\r
-+      0x007e, 0x0268, 0x00d6, 0x2069, 0x181e, 0x2d2c, 0x8d68, 0x2d34,\r
-+      0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e,\r
-+      0xbc84, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004,\r
-+      0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020,\r
-+      0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e,\r
-+      0x00be, 0x0005, 0x080c, 0x8d6b, 0x7003, 0x0100, 0x782c, 0x700a,\r
-+      0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x080c,\r
-+      0x8d17, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e,\r
-+      0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007,\r
-+      0x701a, 0x60c3, 0x0010, 0x0804, 0x8f87, 0x00e6, 0x2071, 0x0240,\r
-+      0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8c4, 0xd084,\r
-+      0x0120, 0x7850, 0x702a, 0x784c, 0x702e, 0x00be, 0x00fe, 0x000e,\r
-+      0x00ee, 0x0005, 0x080c, 0x8d62, 0x7003, 0x0100, 0x782c, 0x700a,\r
-+      0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x00a9, 0x7914,\r
-+      0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026, 0x080c, 0x27a2,\r
-+      0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x080c,\r
-+      0x8faa, 0x080c, 0x8202, 0x0005, 0x0036, 0x0096, 0x00d6, 0x00e6,\r
-+      0x7860, 0x2048, 0xaa7c, 0x9296, 0x00c0, 0x9294, 0xfffd, 0xaa7e,\r
-+      0xaa80, 0x9294, 0x0300, 0xaa82, 0xa96c, 0x9194, 0x00ff, 0xab74,\r
-+      0x9384, 0x00ff, 0x908d, 0xc200, 0xa96e, 0x9384, 0xff00, 0x9215,\r
-+      0xaa76, 0xa870, 0xaa78, 0xa87a, 0xaa72, 0x00d6, 0x2069, 0x0200,\r
-+      0x080c, 0x97fa, 0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,\r
-+      0x000a, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x4003,\r
-+      0x60a3, 0x0035, 0xaa68, 0x9294, 0x7000, 0x9286, 0x3000, 0x0110,\r
-+      0x60a3, 0x0037, 0x00ee, 0x00de, 0x009e, 0x003e, 0x0005, 0x900e,\r
-+      0x7814, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x01c0, 0x9084, 0x0003,\r
-+      0x11a8, 0x2001, 0x180c, 0x2004, 0xd0bc, 0x0180, 0x7824, 0xd0cc,\r
-+      0x1168, 0xd0c4, 0x1158, 0xa8a8, 0x9005, 0x1140, 0x2001, 0x180c,\r
-+      0x200c, 0xc1d5, 0x2102, 0x2009, 0x1983, 0x210c, 0x009e, 0x918d,\r
-+      0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036, 0x0026, 0x2110,\r
-+      0x900e, 0x080c, 0x287c, 0x002e, 0x0005, 0x2009, 0x0009, 0x00a0,\r
-+      0x2009, 0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009, 0x000c,\r
-+      0x0058, 0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028, 0x2009,\r
-+      0x000f, 0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x00d6, 0x9290,\r
-+      0x0018, 0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813, 0x0000,\r
-+      0x22a8, 0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292, 0x0020,\r
-+      0x0008, 0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff, 0x0120,\r
-+      0x6810, 0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00f6, 0x00e6,\r
-+      0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000,\r
-+      0x2071, 0x19b8, 0x7610, 0x2660, 0x2678, 0x8cff, 0x0904, 0x98a5,\r
-+      0x7030, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904,\r
-+      0x987c, 0x080c, 0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x7033,\r
-+      0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,\r
-+      0x2001, 0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x2069,\r
-+      0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7010,\r
-+      0x9c36, 0x1110, 0x660c, 0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00,\r
-+      0x9f36, 0x0118, 0x2f00, 0x700e, 0x0010, 0x700f, 0x0000, 0x660c,\r
-+      0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,\r
-+      0x0000, 0x080c, 0xba4b, 0x1158, 0x080c, 0x303b, 0x080c, 0xba5c,\r
-+      0x11f0, 0x080c, 0xa58f, 0x00d8, 0x080c, 0x94a2, 0x08c0, 0x080c,\r
-+      0xba5c, 0x1118, 0x080c, 0xa58f, 0x0090, 0x6014, 0x2048, 0x080c,\r
-+      0xb845, 0x0168, 0x6020, 0x9086, 0x0003, 0x1520, 0xa867, 0x0103,\r
-+      0xab7a, 0xa877, 0x0000, 0x080c, 0x6996, 0x080c, 0xba36, 0x080c,\r
-+      0xbcd3, 0x080c, 0x9c21, 0x080c, 0x9378, 0x00ce, 0x0804, 0x982d,\r
-+      0x2c78, 0x600c, 0x2060, 0x0804, 0x982d, 0x7013, 0x0000, 0x700f,\r
-+      0x0000, 0x012e, 0x006e, 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee,\r
-+      0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d08, 0x080c, 0xd21e,\r
-+      0x08f0, 0x00f6, 0x0036, 0x2079, 0x0380, 0x7b18, 0xd3bc, 0x1de8,\r
-+      0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x003e, 0x00fe, 0x0005,\r
-+      0x0016, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001,\r
-+      0x1188, 0x2001, 0x0015, 0x0c29, 0x2009, 0x1000, 0x2001, 0x0382,\r
-+      0x2004, 0x9084, 0x0007, 0x9086, 0x0003, 0x0120, 0x8109, 0x1db0,\r
-+      0x080c, 0x0d65, 0x001e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084,\r
-+      0x0007, 0x9086, 0x0003, 0x1120, 0x2001, 0x0380, 0x2003, 0x0001,\r
-+      0x0005, 0x0156, 0x0016, 0x0026, 0x00e6, 0x900e, 0x2071, 0x19b8,\r
-+      0x0469, 0x0106, 0x0190, 0x7004, 0x9086, 0x0003, 0x0148, 0x20a9,\r
-+      0x1000, 0x6044, 0xd0fc, 0x01d8, 0x1f04, 0x9901, 0x080c, 0x0d65,\r
-+      0x080c, 0x98c8, 0x6044, 0xd0fc, 0x0190, 0x7030, 0x9c06, 0x1148,\r
-+      0x080c, 0x8874, 0x6044, 0xd0dc, 0x0150, 0xc0dc, 0x6046, 0x700a,\r
-+      0x7042, 0x704c, 0x9c06, 0x190c, 0x0d65, 0x080c, 0x88d1, 0x010e,\r
-+      0x1919, 0x00ee, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x0382,\r
-+      0x2004, 0x9084, 0x0007, 0x9086, 0x0003, 0x0005, 0x0126, 0x2091,\r
-+      0x2400, 0x7808, 0xd0a4, 0x190c, 0x0d5e, 0xd09c, 0x0128, 0x7820,\r
-+      0x908c, 0xf000, 0x11b8, 0x0012, 0x012e, 0x0005, 0x994e, 0x998c,\r
-+      0x99b3, 0x99e3, 0x99f3, 0x9a04, 0x9a13, 0x9a21, 0x9a32, 0x9a36,\r
-+      0x994e, 0x994e, 0x994e, 0x994e, 0x994e, 0x994e, 0x080c, 0x0d65,\r
-+      0x012e, 0x0005, 0x2060, 0x6044, 0xd0bc, 0x0140, 0xc0bc, 0x6046,\r
-+      0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d65, 0x0012, 0x012e, 0x0005,\r
-+      0x9973, 0x9975, 0x9973, 0x997b, 0x9973, 0x9973, 0x9973, 0x9973,\r
-+      0x9973, 0x9975, 0x9973, 0x9975, 0x9973, 0x9975, 0x9973, 0x9973,\r
-+      0x9973, 0x9975, 0x9973, 0x080c, 0x0d65, 0x2009, 0x0013, 0x080c,\r
-+      0x9c85, 0x012e, 0x0005, 0x6014, 0x2048, 0xa87c, 0xd0dc, 0x0130,\r
-+      0x080c, 0x83c0, 0x080c, 0x9be7, 0x012e, 0x0005, 0x2009, 0x0049,\r
-+      0x080c, 0x9c85, 0x012e, 0x0005, 0x080c, 0x98c8, 0x2001, 0x19dd,\r
-+      0x2003, 0x0000, 0x7030, 0x9065, 0x090c, 0x0d65, 0x7034, 0x9092,\r
-+      0x00c8, 0x1258, 0x8000, 0x7036, 0x7004, 0x9086, 0x0003, 0x0110,\r
-+      0x7007, 0x0000, 0x781f, 0x0808, 0x0040, 0x080c, 0xd610, 0x6003,\r
-+      0x0001, 0x2009, 0x0014, 0x080c, 0x9c85, 0x781f, 0x0100, 0x080c,\r
-+      0x98e4, 0x012e, 0x0005, 0x080c, 0x98c8, 0x714c, 0x81ff, 0x1128,\r
-+      0x2011, 0x19e0, 0x2013, 0x0000, 0x0400, 0x2061, 0x0100, 0x7150,\r
-+      0x9192, 0x7530, 0x12b8, 0x8108, 0x7152, 0x714c, 0x9188, 0x0008,\r
-+      0x210c, 0x918e, 0x0006, 0x1138, 0x6014, 0x9084, 0x1984, 0x9085,\r
-+      0x0012, 0x6016, 0x0050, 0x6014, 0x9084, 0x1984, 0x9085, 0x0016,\r
-+      0x6016, 0x0018, 0x706c, 0xc085, 0x706e, 0x781f, 0x0200, 0x080c,\r
-+      0x98e4, 0x012e, 0x0005, 0x080c, 0x98c8, 0x714c, 0x2160, 0x6003,\r
-+      0x0003, 0x2009, 0x004a, 0x080c, 0x9c85, 0x781f, 0x0200, 0x080c,\r
-+      0x98e4, 0x012e, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060,\r
-+      0x6003, 0x0003, 0x080c, 0x98c8, 0x080c, 0x1c02, 0x781f, 0x0400,\r
-+      0x080c, 0x98e4, 0x012e, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820,\r
-+      0x2060, 0x080c, 0x98c8, 0x080c, 0x1c4a, 0x781f, 0x0400, 0x080c,\r
-+      0x98e4, 0x012e, 0x0005, 0x7030, 0x9065, 0x0148, 0x6044, 0xc0bc,\r
-+      0x6046, 0x7104, 0x9186, 0x0003, 0x0110, 0x080c, 0x8937, 0x012e,\r
-+      0x0005, 0x00f6, 0x703c, 0x9086, 0x0002, 0x0148, 0x704c, 0x907d,\r
-+      0x0130, 0x7844, 0xc0bc, 0x7846, 0x080c, 0x8ee1, 0x0000, 0x00fe,\r
-+      0x012e, 0x0005, 0x080c, 0x7158, 0x012e, 0x0005, 0x080c, 0x0d65,\r
-+      0x0005, 0x00e6, 0x2071, 0x19b8, 0x6044, 0xc0bc, 0x6046, 0xd0fc,\r
-+      0x01b8, 0x704c, 0x9c06, 0x1190, 0x2019, 0x0001, 0x080c, 0x9286,\r
-+      0x704f, 0x0000, 0x2001, 0x0109, 0x2004, 0xd08c, 0x1138, 0x2001,\r
-+      0x0108, 0x2004, 0xd0bc, 0x1110, 0x703f, 0x0000, 0x080c, 0x94b8,\r
-+      0x00ee, 0x0005, 0x0026, 0x7010, 0x9c06, 0x1178, 0x080c, 0x9378,\r
-+      0x6044, 0xc0fc, 0x6046, 0x600c, 0x9015, 0x0120, 0x7212, 0x600f,\r
-+      0x0000, 0x0010, 0x7212, 0x720e, 0x9006, 0x002e, 0x0005, 0x0026,\r
-+      0x7020, 0x9c06, 0x1178, 0x080c, 0x9378, 0x6044, 0xc0fc, 0x6046,\r
-+      0x600c, 0x9015, 0x0120, 0x7222, 0x600f, 0x0000, 0x0010, 0x7222,\r
-+      0x721e, 0x9006, 0x002e, 0x0005, 0x00d6, 0x0036, 0x7830, 0x9c06,\r
-+      0x1558, 0x2069, 0x0100, 0x68c0, 0x9005, 0x01f8, 0x080c, 0x820b,\r
-+      0x080c, 0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x2069, 0x0140,\r
-+      0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2833,\r
-+      0x9006, 0x080c, 0x2833, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,\r
-+      0x6827, 0x0001, 0x9085, 0x0001, 0x0038, 0x7808, 0xc0ad, 0x780a,\r
-+      0x6003, 0x0009, 0x630a, 0x9006, 0x003e, 0x00de, 0x0005, 0x0016,\r
-+      0x0026, 0x0036, 0x6100, 0x2019, 0x0100, 0x2001, 0x0382, 0x2004,\r
-+      0xd09c, 0x0190, 0x00c6, 0x0126, 0x2091, 0x2800, 0x0016, 0x0036,\r
-+      0x080c, 0x992e, 0x003e, 0x001e, 0x012e, 0x00ce, 0x6200, 0x2200,\r
-+      0x9106, 0x0d58, 0x2200, 0x0010, 0x8319, 0x1d38, 0x003e, 0x002e,\r
-+      0x001e, 0x0005, 0x00d6, 0x0156, 0x080c, 0x8d6b, 0x7a14, 0x82ff,\r
-+      0x0138, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0490,\r
-+      0x7003, 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, 0x901e, 0x6800,\r
-+      0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, 0x70b7, 0x1110,\r
-+      0xc3ad, 0x0008, 0xc3a5, 0x6ad8, 0xd29c, 0x1110, 0xd2ac, 0x0108,\r
-+      0xc39d, 0x730e, 0x2011, 0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006,\r
-+      0x2011, 0x1840, 0x2019, 0x1841, 0x2071, 0x0250, 0x2376, 0x8e70,\r
-+      0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0x9b0e,\r
-+      0x60c3, 0x0020, 0x080c, 0x8f87, 0x015e, 0x00de, 0x0005, 0x0156,\r
-+      0x080c, 0x8d6b, 0x7a14, 0x82ff, 0x0168, 0x9286, 0xffff, 0x0118,\r
-+      0x9282, 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3,\r
-+      0x0008, 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, 0x700f, 0x0001,\r
-+      0x2011, 0x198e, 0x2204, 0x8007, 0x701a, 0x8210, 0x2204, 0x8007,\r
-+      0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001,\r
-+      0x181e, 0x2004, 0x7022, 0x2001, 0x181f, 0x2004, 0x7026, 0x0030,\r
-+      0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004,\r
-+      0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256,\r
-+      0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, 0x8f87, 0x0006, 0x2001,\r
-+      0x1836, 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, 0x0003, 0x080c,\r
-+      0x9339, 0x2011, 0x0002, 0x080c, 0x9343, 0x080c, 0x9206, 0x0036,\r
-+      0x901e, 0x080c, 0x9286, 0x003e, 0x0005, 0x2071, 0x1883, 0x7000,\r
-+      0x9005, 0x0140, 0x2001, 0x0812, 0x2071, 0x1800, 0x7072, 0x7076,\r
-+      0x7067, 0xffd4, 0x2071, 0x1800, 0x7070, 0x7052, 0x7057, 0x1ddc,\r
-+      0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7550,\r
-+      0x9582, 0x0010, 0x0608, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000,\r
-+      0x0148, 0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061,\r
-+      0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x001c,\r
-+      0x7064, 0x9502, 0x1230, 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee,\r
-+      0x0005, 0x7057, 0x1ddc, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071,\r
-+      0x1800, 0x7550, 0x9582, 0x0010, 0x0600, 0x7054, 0x2060, 0x6000,\r
-+      0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1208,\r
-+      0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552,\r
-+      0x9ca8, 0x001c, 0x7064, 0x9502, 0x1228, 0x7556, 0x9085, 0x0001,\r
-+      0x00ee, 0x0005, 0x7057, 0x1ddc, 0x0cc8, 0x9006, 0x0cc8, 0x9c82,\r
-+      0x1ddc, 0x0a0c, 0x0d65, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a0c,\r
-+      0x0d65, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016, 0x601a, 0x6012,\r
-+      0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x605e, 0x6062, 0x6026,\r
-+      0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e, 0x604a, 0x6046,\r
-+      0x6042, 0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x0005, 0x9006,\r
-+      0x600e, 0x6016, 0x601a, 0x6012, 0x6022, 0x6002, 0x601e, 0x605e,\r
-+      0x6062, 0x604a, 0x6046, 0x2061, 0x1800, 0x6050, 0x8000, 0x6052,\r
-+      0x0005, 0x0006, 0x6000, 0x9086, 0x0000, 0x01d0, 0x601c, 0xd084,\r
-+      0x190c, 0x1914, 0x6023, 0x0007, 0x2001, 0x1957, 0x2004, 0x0006,\r
-+      0x9082, 0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, 0xd4ce,\r
-+      0x604b, 0x0000, 0x6044, 0xd0fc, 0x1129, 0x9006, 0x6046, 0x6016,\r
-+      0x000e, 0x0005, 0x080c, 0x9926, 0x0106, 0x190c, 0x98c8, 0x2001,\r
-+      0x19cb, 0x2004, 0x9c06, 0x1130, 0x0036, 0x2019, 0x0001, 0x080c,\r
-+      0x9286, 0x003e, 0x080c, 0x94b8, 0x010e, 0x190c, 0x98e4, 0x0005,\r
-+      0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582,\r
-+      0x0001, 0x0608, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148,\r
-+      0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc,\r
-+      0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x001c, 0x7064,\r
-+      0x9502, 0x1230, 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005,\r
-+      0x7057, 0x1ddc, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f,\r
-+      0x0002, 0x9c99, 0x9ca3, 0x9cbe, 0x9cd9, 0xbfab, 0xbfc8, 0xbfe3,\r
-+      0x9c99, 0x9ca3, 0x9c99, 0x9cf5, 0x9c99, 0x9c99, 0x9c99, 0x9c99,\r
-+      0x9c99, 0x9186, 0x0013, 0x1130, 0x6044, 0xd0fc, 0x0110, 0x080c,\r
-+      0x8874, 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c,\r
-+      0x0d65, 0x0013, 0x006e, 0x0005, 0x9cbc, 0xa404, 0xa5d6, 0x9cbc,\r
-+      0xa664, 0x9fbe, 0x9cbc, 0x9cbc, 0xa386, 0xac09, 0x9cbc, 0x9cbc,\r
-+      0x9cbc, 0x9cbc, 0x9cbc, 0x9cbc, 0x080c, 0x0d65, 0x0066, 0x6000,\r
-+      0x90b2, 0x0016, 0x1a0c, 0x0d65, 0x0013, 0x006e, 0x0005, 0x9cd7,\r
-+      0xb214, 0x9cd7, 0x9cd7, 0x9cd7, 0x9cd7, 0x9cd7, 0x9cd7, 0xb1b9,\r
-+      0xb397, 0x9cd7, 0xb251, 0xb2d5, 0xb251, 0xb2d5, 0x9cd7, 0x080c,\r
-+      0x0d65, 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d65, 0x6000, 0x0002,\r
-+      0x9cf3, 0xac53, 0xacea, 0xae6a, 0xaed9, 0x9cf3, 0x9cf3, 0x9cf3,\r
-+      0xac22, 0xb13a, 0xb13d, 0x9cf3, 0x9cf3, 0x9cf3, 0x9cf3, 0xb16d,\r
-+      0x9cf3, 0x9cf3, 0x9cf3, 0x080c, 0x0d65, 0x0066, 0x6000, 0x90b2,\r
-+      0x0016, 0x1a0c, 0x0d65, 0x0013, 0x006e, 0x0005, 0x9d0e, 0x9d0e,\r
-+      0x9d4c, 0x9deb, 0x9e6b, 0x9d0e, 0x9d0e, 0x9d0e, 0x9d10, 0x9d0e,\r
-+      0x9d0e, 0x9d0e, 0x9d0e, 0x9d0e, 0x9d0e, 0x9d0e, 0x080c, 0x0d65,\r
-+      0x9186, 0x004c, 0x0560, 0x9186, 0x0003, 0x190c, 0x0d65, 0x0096,\r
-+      0x601c, 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048,\r
-+      0xa87c, 0x9084, 0xa000, 0xc0b5, 0xa87e, 0xa8ac, 0xa836, 0xa8b0,\r
-+      0xa83a, 0x9006, 0xa846, 0xa84a, 0xa884, 0x9092, 0x199a, 0x0210,\r
-+      0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e,\r
-+      0x080c, 0x1a64, 0x2009, 0x8030, 0x080c, 0x8518, 0x0005, 0x6010,\r
-+      0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c, 0x9e8d, 0x080c,\r
-+      0xbf79, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079,\r
-+      0x1800, 0x7a8c, 0x6014, 0x2048, 0xa87c, 0xd0ec, 0x1110, 0x9290,\r
-+      0x0018, 0xac78, 0xc4fc, 0x0046, 0xa8e0, 0x9005, 0x1140, 0xa8dc,\r
-+      0x921a, 0x0140, 0x0220, 0xa87b, 0x0007, 0x2010, 0x0028, 0xa87b,\r
-+      0x0015, 0x0010, 0xa87b, 0x0000, 0x8214, 0xa883, 0x0000, 0xaa02,\r
-+      0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2400,\r
-+      0x9005, 0x1108, 0x009a, 0x2100, 0x9086, 0x0015, 0x1118, 0x2001,\r
-+      0x0001, 0x0038, 0x2100, 0x9086, 0x0016, 0x0118, 0x2001, 0x0001,\r
-+      0x002a, 0x94a4, 0x0007, 0x8423, 0x9405, 0x0002, 0x9db3, 0x9db3,\r
-+      0x9dae, 0x9db1, 0x9db3, 0x9dab, 0x9d9e, 0x9d9e, 0x9d9e, 0x9d9e,\r
-+      0x9d9e, 0x9d9e, 0x9d9e, 0x9d9e, 0x9d9e, 0x9d9e, 0x00fe, 0x00ee,\r
-+      0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e, 0x00fe, 0x009e,\r
-+      0x00de, 0x080c, 0x0d65, 0x080c, 0xa845, 0x0028, 0x080c, 0xa968,\r
-+      0x0010, 0x080c, 0xaa57, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e,\r
-+      0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0x9f4b, 0x0530, 0xa804,\r
-+      0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007,\r
-+      0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xaacc, 0xabd0,\r
-+      0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x1280, 0x080c, 0xa0f5,\r
-+      0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005,\r
-+      0x00fe, 0x009e, 0x00de, 0x0804, 0x9be7, 0x2001, 0x002c, 0x900e,\r
-+      0x080c, 0x9fb1, 0x0c70, 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016,\r
-+      0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0d65, 0x91b2, 0x0050, 0x1a0c,\r
-+      0x0d65, 0x9182, 0x0047, 0x0042, 0x080c, 0x9ab7, 0x0120, 0x9086,\r
-+      0x0002, 0x0904, 0x9d4c, 0x0005, 0x9e0d, 0x9e0d, 0x9e0f, 0x9e41,\r
-+      0x9e0d, 0x9e0d, 0x9e0d, 0x9e0d, 0x9e54, 0x080c, 0x0d65, 0x00d6,\r
-+      0x0016, 0x0096, 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc,\r
-+      0x01c0, 0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140,\r
-+      0x2001, 0x0000, 0x900e, 0x080c, 0x9fb1, 0x080c, 0x9be7, 0x00a8,\r
-+      0x6003, 0x0002, 0xa8a4, 0xa9a8, 0x9105, 0x1178, 0xa8ae, 0xa8b2,\r
-+      0x0c78, 0xa87f, 0x0020, 0xa88c, 0xa88a, 0xa8a4, 0xa8ae, 0xa8a8,\r
-+      0xa8b2, 0xa8c7, 0x0000, 0xa8cb, 0x0000, 0x009e, 0x001e, 0x00de,\r
-+      0x0005, 0x080c, 0x88d1, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c,\r
-+      0xb847, 0x0120, 0xa87b, 0x0006, 0x080c, 0x6996, 0x009e, 0x00de,\r
-+      0x080c, 0x9be7, 0x0804, 0x8936, 0x080c, 0x88d1, 0x080c, 0x3006,\r
-+      0x080c, 0xbf76, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xb847,\r
-+      0x0120, 0xa87b, 0x0029, 0x080c, 0x6996, 0x009e, 0x00de, 0x080c,\r
-+      0x9be7, 0x0804, 0x8936, 0x9182, 0x0047, 0x0002, 0x9e7b, 0x9e7d,\r
-+      0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b,\r
-+      0x9e7b, 0x9e7b, 0x9e7d, 0x080c, 0x0d65, 0x00d6, 0x0096, 0x080c,\r
-+      0x1595, 0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c,\r
-+      0x6996, 0x009e, 0x00de, 0x0804, 0x9be7, 0x0026, 0x0036, 0x0056,\r
-+      0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x1022, 0x000e,\r
-+      0x090c, 0x0d65, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0,\r
-+      0x900e, 0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x798c,\r
-+      0x9188, 0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6,\r
-+      0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182,\r
-+      0x0034, 0x1228, 0x2011, 0x001f, 0x080c, 0xb41a, 0x04c0, 0x2130,\r
-+      0x2009, 0x0034, 0x2011, 0x001f, 0x080c, 0xb41a, 0x96b2, 0x0034,\r
-+      0xb004, 0x904d, 0x0110, 0x080c, 0x0fd4, 0x080c, 0x1022, 0x01d0,\r
-+      0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a,\r
-+      0x003d, 0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xb41a, 0x00b8,\r
-+      0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c,\r
-+      0xb41a, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f,\r
-+      0x95ad, 0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072, 0x0048, 0x2001,\r
-+      0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566,\r
-+      0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x6996, 0x000e,\r
-+      0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e,\r
-+      0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c,\r
-+      0x1022, 0x000e, 0x090c, 0x0d65, 0xa960, 0x21e8, 0xa95c, 0x9188,\r
-+      0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a,\r
-+      0x2079, 0x1800, 0x798c, 0x810c, 0x9188, 0x000c, 0x9182, 0x001a,\r
-+      0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa972, 0xac76, 0x2e98,\r
-+      0xa85c, 0x9080, 0x001f, 0x20a0, 0x2001, 0x0205, 0x200c, 0x918d,\r
-+      0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x6996, 0x009e,\r
-+      0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016,\r
-+      0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079,\r
-+      0x0200, 0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098,\r
-+      0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020,\r
-+      0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x1022, 0x2900,\r
-+      0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080,\r
-+      0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280,\r
-+      0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402,\r
-+      0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8,\r
-+      0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180,\r
-+      0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080,\r
-+      0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0x9f60, 0x0804, 0x9f62,\r
-+      0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e,\r
-+      0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982,\r
-+      0x080c, 0x698a, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015,\r
-+      0x1118, 0x080c, 0x9be7, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0d65,\r
-+      0x080c, 0x9be7, 0x0005, 0x20a9, 0x000e, 0x20e1, 0x0000, 0x2e98,\r
-+      0x6014, 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0, 0x009e,\r
-+      0x4003, 0x0136, 0x9080, 0x001b, 0x2011, 0x0006, 0x20a9, 0x0001,\r
-+      0x3418, 0x8318, 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211,\r
-+      0x1db8, 0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398,\r
-+      0x4003, 0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c,\r
-+      0xb847, 0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103,\r
-+      0x009e, 0x0804, 0x9be7, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386,\r
-+      0x0200, 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8c7, 0x0000, 0x00be,\r
-+      0x6014, 0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103,\r
-+      0xab32, 0x080c, 0x9be7, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011,\r
-+      0x1d48, 0x0cc8, 0x0006, 0x0016, 0x080c, 0xbf61, 0x0188, 0x6014,\r
-+      0x9005, 0x1170, 0x600b, 0x0003, 0x601b, 0x0000, 0x604b, 0x0000,\r
-+      0x2009, 0x0022, 0x080c, 0xa3dc, 0x9006, 0x001e, 0x000e, 0x0005,\r
-+      0x9085, 0x0001, 0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80,\r
-+      0x000c, 0x20e1, 0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8,\r
-+      0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003,\r
-+      0x0001, 0x2099, 0x0260, 0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a,\r
-+      0xa804, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0,\r
-+      0x4003, 0x2001, 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9,\r
-+      0x0020, 0x4003, 0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048,\r
-+      0xa867, 0x0103, 0x080c, 0x9be7, 0x001e, 0x009e, 0x0005, 0x0096,\r
-+      0x0016, 0x900e, 0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084,\r
-+      0x00ff, 0x800c, 0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004,\r
-+      0x9108, 0x810b, 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048,\r
-+      0x080c, 0xb41a, 0x080c, 0xb847, 0x0140, 0x6014, 0x2048, 0xa807,\r
-+      0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0x9be7, 0x001e,\r
-+      0x009e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086, 0x0100, 0x1118,\r
-+      0x2009, 0x0004, 0x0010, 0x7034, 0x800c, 0x810b, 0x2011, 0x000c,\r
-+      0x2019, 0x000c, 0x6014, 0x2048, 0xa804, 0x0096, 0x9005, 0x0108,\r
-+      0x2048, 0x080c, 0xb41a, 0x009e, 0x080c, 0xb847, 0x0148, 0xa804,\r
-+      0x9005, 0x1158, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103,\r
-+      0x080c, 0x9be7, 0x009e, 0x001e, 0x0005, 0x0086, 0x2040, 0xa030,\r
-+      0x8007, 0x9086, 0x0100, 0x1118, 0x080c, 0xa58f, 0x00e0, 0xa034,\r
-+      0x8007, 0x800c, 0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,\r
-+      0xffc0, 0x9080, 0x000c, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897,\r
-+      0x4000, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041,\r
-+      0x1266, 0x0019, 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c,\r
-+      0x1022, 0x000e, 0x01b0, 0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2,\r
-+      0x0006, 0xae6a, 0x2800, 0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92,\r
-+      0xac96, 0xad9a, 0x0086, 0x2940, 0x080c, 0x110c, 0x008e, 0x9085,\r
-+      0x0001, 0x009e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084,\r
-+      0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1520,\r
-+      0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x11e0,\r
-+      0x604b, 0x0000, 0x2c68, 0x0016, 0x2009, 0x0035, 0x080c, 0xbed9,\r
-+      0x001e, 0x1158, 0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386,\r
-+      0x0003, 0x0130, 0x9386, 0x0006, 0x0128, 0x080c, 0x9be7, 0x0020,\r
-+      0x0039, 0x0010, 0x080c, 0xa211, 0x002e, 0x00de, 0x00ee, 0x0005,\r
-+      0x0096, 0x6814, 0x2048, 0x9186, 0x0015, 0x0904, 0xa1f0, 0x918e,\r
-+      0x0016, 0x1904, 0xa20f, 0x700c, 0x908c, 0xff00, 0x9186, 0x1700,\r
-+      0x0120, 0x9186, 0x0300, 0x1904, 0xa1ca, 0x89ff, 0x1138, 0x6800,\r
-+      0x9086, 0x000f, 0x0904, 0xa1ac, 0x0804, 0xa20d, 0x6808, 0x9086,\r
-+      0xffff, 0x1904, 0xa1f2, 0xa87c, 0x9084, 0x0060, 0x9086, 0x0020,\r
-+      0x1128, 0xa83c, 0xa940, 0x9105, 0x1904, 0xa1f2, 0x6824, 0xd0b4,\r
-+      0x1904, 0xa1f2, 0x080c, 0xba36, 0x6864, 0xa882, 0xa87c, 0xc0dc,\r
-+      0xc0f4, 0xc0d4, 0xa87e, 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a,\r
-+      0x080c, 0x8419, 0xa884, 0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff,\r
-+      0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, 0xb56d, 0x00ce, 0x0804,\r
-+      0xa20d, 0x00c6, 0xa868, 0xd0fc, 0x1118, 0x080c, 0x5d56, 0x0010,\r
-+      0x080c, 0x60fb, 0x00ce, 0x1904, 0xa1f2, 0x00c6, 0x2d60, 0x080c,\r
-+      0x9be7, 0x00ce, 0x0804, 0xa20d, 0x00c6, 0x080c, 0x9c58, 0x0198,\r
-+      0x6017, 0x0000, 0x6810, 0x6012, 0x080c, 0xbcdb, 0x6023, 0x0003,\r
-+      0x6904, 0x00c6, 0x2d60, 0x080c, 0x9be7, 0x00ce, 0x080c, 0x9c85,\r
-+      0x00ce, 0x0804, 0xa20d, 0x2001, 0x1959, 0x2004, 0x684a, 0x00ce,\r
-+      0x0804, 0xa20d, 0x7008, 0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6,\r
-+      0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b,\r
-+      0x0003, 0x080c, 0xbf1b, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,\r
-+      0x0002, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00ce, 0x0430, 0x700c,\r
-+      0x9086, 0x2a00, 0x1138, 0x2001, 0x1959, 0x2004, 0x684a, 0x00e8,\r
-+      0x04c1, 0x00e8, 0x89ff, 0x090c, 0x0d65, 0x00c6, 0x00d6, 0x2d60,\r
-+      0xa867, 0x0103, 0xa87b, 0x0003, 0x080c, 0x67ac, 0x080c, 0xba36,\r
-+      0x080c, 0x9c21, 0x0026, 0x6010, 0x00b6, 0x2058, 0xba3c, 0x080c,\r
-+      0x639b, 0x00be, 0x002e, 0x00de, 0x00ce, 0x080c, 0x9be7, 0x009e,\r
-+      0x0005, 0x9186, 0x0015, 0x1128, 0x2001, 0x1959, 0x2004, 0x684a,\r
-+      0x0068, 0x918e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c,\r
-+      0xd4ce, 0x080c, 0x83c0, 0x080c, 0x9be7, 0x00ce, 0x080c, 0x9be7,\r
-+      0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4,\r
-+      0x0130, 0x2001, 0x1959, 0x2004, 0x684a, 0x0804, 0xa28b, 0x00c6,\r
-+      0x2d60, 0x080c, 0xb445, 0x00ce, 0x6804, 0x9086, 0x0050, 0x1168,\r
-+      0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050, 0x2009,\r
-+      0x8023, 0x080c, 0x84d1, 0x00ce, 0x04f0, 0x6800, 0x9086, 0x000f,\r
-+      0x01a8, 0x89ff, 0x090c, 0x0d65, 0x6800, 0x9086, 0x0004, 0x1190,\r
-+      0xa87c, 0xd0ac, 0x0178, 0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880,\r
-+      0xc0fc, 0xa882, 0x2001, 0x0001, 0x6832, 0x0400, 0x2001, 0x0007,\r
-+      0x6832, 0x00e0, 0xa87c, 0xd0b4, 0x1150, 0xd0ac, 0x0db8, 0x6824,\r
-+      0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105, 0x0d80, 0x0c20, 0xd2ec,\r
-+      0x1d68, 0x7024, 0x9306, 0x1118, 0x7020, 0x9406, 0x0d38, 0x7020,\r
-+      0x683e, 0x7024, 0x683a, 0x2001, 0x0005, 0x6832, 0x080c, 0xbbc5,\r
-+      0x080c, 0x8936, 0x0010, 0x080c, 0x9be7, 0x004e, 0x003e, 0x002e,\r
-+      0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210,\r
-+      0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1904, 0xa2f6, 0x700c,\r
-+      0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x1904, 0xa2f6,\r
-+      0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826, 0x6a20, 0x9286, 0x0007,\r
-+      0x0904, 0xa2f6, 0x9286, 0x0002, 0x0904, 0xa2f6, 0x9286, 0x0000,\r
-+      0x05e8, 0x6808, 0x633c, 0x9306, 0x15c8, 0x2071, 0x026c, 0x9186,\r
-+      0x0015, 0x0570, 0x918e, 0x0016, 0x1100, 0x00c6, 0x6038, 0x2060,\r
-+      0x6104, 0x9186, 0x004b, 0x01c0, 0x9186, 0x004c, 0x01a8, 0x9186,\r
-+      0x004d, 0x0190, 0x9186, 0x004e, 0x0178, 0x9186, 0x0052, 0x0160,\r
-+      0x6014, 0x0096, 0x2048, 0x080c, 0xb847, 0x090c, 0x0d65, 0xa87b,\r
-+      0x0003, 0x009e, 0x080c, 0xbf1b, 0x6007, 0x0085, 0x6003, 0x000b,\r
-+      0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00ce, 0x0030,\r
-+      0x6038, 0x2070, 0x2001, 0x1959, 0x2004, 0x704a, 0x080c, 0x9be7,\r
-+      0x002e, 0x00de, 0x00ee, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014,\r
-+      0x2048, 0x6010, 0x2058, 0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c,\r
-+      0xbc00, 0xc48c, 0xbc02, 0x0460, 0x0096, 0x0156, 0x0036, 0x0026,\r
-+      0x2b48, 0x9e90, 0x0010, 0x2019, 0x000a, 0x20a9, 0x0004, 0x080c,\r
-+      0xabdf, 0x002e, 0x003e, 0x015e, 0x009e, 0x1904, 0xa365, 0x0096,\r
-+      0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006,\r
-+      0x20a9, 0x0004, 0x080c, 0xabdf, 0x002e, 0x003e, 0x015e, 0x009e,\r
-+      0x15a0, 0x7238, 0xba0a, 0x733c, 0xbb0e, 0xbc00, 0xc48d, 0xbc02,\r
-+      0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804, 0x9ff6,\r
-+      0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006, 0x8006,\r
-+      0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009,\r
-+      0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041,\r
-+      0x1266, 0x080c, 0xa0f5, 0x0130, 0x00fe, 0x009e, 0x080c, 0x9be7,\r
-+      0x00be, 0x0005, 0x080c, 0xa58f, 0x0cb8, 0x2b78, 0x00f6, 0x080c,\r
-+      0x3006, 0x080c, 0xbf76, 0x00fe, 0x00c6, 0x080c, 0x9b91, 0x2f00,\r
-+      0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003,\r
-+      0x0001, 0x2001, 0x0007, 0x080c, 0x61c1, 0x080c, 0x61ed, 0x080c,\r
-+      0x84d8, 0x080c, 0x8936, 0x00ce, 0x0804, 0xa338, 0x2100, 0x91b2,\r
-+      0x0053, 0x1a0c, 0x0d65, 0x91b2, 0x0040, 0x1a04, 0xa3ee, 0x0002,\r
-+      0xa3dc, 0xa3dc, 0xa3d2, 0xa3dc, 0xa3dc, 0xa3dc, 0xa3d0, 0xa3d0,\r
-+      0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0,\r
-+      0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0,\r
-+      0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3dc,\r
-+      0xa3d0, 0xa3dc, 0xa3dc, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0,\r
-+      0xa3d2, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0,\r
-+      0xa3d0, 0xa3d0, 0xa3dc, 0xa3dc, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0,\r
-+      0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3dc, 0xa3d0, 0xa3d0,\r
-+      0x080c, 0x0d65, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8c4, 0xc08c,\r
-+      0xb8c6, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106, 0x9186,\r
-+      0x0032, 0x0118, 0x080c, 0x84d8, 0x0010, 0x080c, 0x84d1, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x8936, 0x012e, 0x0005, 0x2600, 0x0002,\r
-+      0xa402, 0xa402, 0xa402, 0xa3dc, 0xa3dc, 0xa402, 0xa402, 0xa402,\r
-+      0xa402, 0xa3dc, 0xa402, 0xa3dc, 0xa402, 0xa3dc, 0xa402, 0xa402,\r
-+      0xa402, 0xa402, 0x080c, 0x0d65, 0x6004, 0x90b2, 0x0053, 0x1a0c,\r
-+      0x0d65, 0x91b6, 0x0013, 0x0904, 0xa4d9, 0x91b6, 0x0027, 0x1904,\r
-+      0xa485, 0x080c, 0x8874, 0x6004, 0x080c, 0xba4b, 0x01b0, 0x080c,\r
-+      0xba5c, 0x01a8, 0x908e, 0x0021, 0x0904, 0xa482, 0x908e, 0x0022,\r
-+      0x1130, 0x080c, 0xa022, 0x0904, 0xa47e, 0x0804, 0xa47f, 0x908e,\r
-+      0x003d, 0x0904, 0xa482, 0x0804, 0xa478, 0x080c, 0x303b, 0x2001,\r
-+      0x0007, 0x080c, 0x61c1, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be,\r
-+      0x080c, 0xa58f, 0x9186, 0x007e, 0x1148, 0x2001, 0x1836, 0x2014,\r
-+      0xc285, 0x080c, 0x70b7, 0x1108, 0xc2ad, 0x2202, 0x080c, 0x98c8,\r
-+      0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xd529, 0x002e,\r
-+      0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, 0x080c,\r
-+      0x863b, 0x0076, 0x903e, 0x080c, 0x852a, 0x6010, 0x00b6, 0x905d,\r
-+      0x0100, 0x00be, 0x2c08, 0x080c, 0xcfc8, 0x007e, 0x003e, 0x002e,\r
-+      0x001e, 0x080c, 0x98e4, 0x080c, 0xbf76, 0x0016, 0x080c, 0xbcd3,\r
-+      0x080c, 0x9be7, 0x001e, 0x080c, 0x311a, 0x080c, 0x8936, 0x0030,\r
-+      0x080c, 0xbcd3, 0x080c, 0x9be7, 0x080c, 0x8936, 0x0005, 0x080c,\r
-+      0xa58f, 0x0cb0, 0x080c, 0xa5cb, 0x0c98, 0x9186, 0x0015, 0x0118,\r
-+      0x9186, 0x0016, 0x1140, 0x080c, 0x9ab7, 0x0d80, 0x9086, 0x0002,\r
-+      0x0904, 0xa5d6, 0x0c58, 0x9186, 0x0014, 0x1d40, 0x080c, 0x8874,\r
-+      0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xa022, 0x09f8, 0x080c,\r
-+      0x3006, 0x080c, 0xbf76, 0x080c, 0xba4b, 0x1190, 0x080c, 0x303b,\r
-+      0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xa58f, 0x9186,\r
-+      0x007e, 0x1128, 0x2001, 0x1836, 0x200c, 0xc185, 0x2102, 0x0800,\r
-+      0x080c, 0xba5c, 0x1120, 0x080c, 0xa58f, 0x0804, 0xa478, 0x6004,\r
-+      0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079,\r
-+      0x0000, 0x080c, 0x33bc, 0x00fe, 0x00ee, 0x0804, 0xa478, 0x6004,\r
-+      0x908e, 0x0021, 0x0d40, 0x908e, 0x0022, 0x090c, 0xa58f, 0x0804,\r
-+      0xa478, 0x90b2, 0x0040, 0x1a04, 0xa578, 0x2008, 0x0002, 0xa521,\r
-+      0xa522, 0xa525, 0xa528, 0xa52b, 0xa52e, 0xa51f, 0xa51f, 0xa51f,\r
-+      0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f,\r
-+      0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f,\r
-+      0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa531, 0xa53a, 0xa51f,\r
-+      0xa53b, 0xa53a, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa53a,\r
-+      0xa53a, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f,\r
-+      0xa51f, 0xa563, 0xa53a, 0xa51f, 0xa536, 0xa51f, 0xa51f, 0xa51f,\r
-+      0xa537, 0xa51f, 0xa51f, 0xa51f, 0xa53a, 0xa55e, 0xa51f, 0x080c,\r
-+      0x0d65, 0x00c0, 0x2001, 0x000b, 0x00e8, 0x2001, 0x0003, 0x00d0,\r
-+      0x2001, 0x0005, 0x00b8, 0x2001, 0x0001, 0x00a0, 0x2001, 0x0009,\r
-+      0x0088, 0x6003, 0x0005, 0x080c, 0x8936, 0x0058, 0x0018, 0x0010,\r
-+      0x080c, 0x61c1, 0x04b8, 0x080c, 0xbf79, 0x6003, 0x0004, 0x080c,\r
-+      0x8936, 0x0005, 0x080c, 0x61c1, 0x6003, 0x0002, 0x0036, 0x2019,\r
-+      0x185e, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001, 0x1957, 0x201c,\r
-+      0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b,\r
-+      0x9318, 0x631a, 0x003e, 0x080c, 0x8936, 0x0c18, 0x080c, 0xbcd3,\r
-+      0x080c, 0x9be7, 0x08f0, 0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079,\r
-+      0x0000, 0x080c, 0x33bc, 0x00fe, 0x00ee, 0x080c, 0x8874, 0x080c,\r
-+      0x9be7, 0x0878, 0x6003, 0x0002, 0x080c, 0xbf79, 0x0804, 0x8936,\r
-+      0x2600, 0x2008, 0x0002, 0xa58d, 0xa58d, 0xa58d, 0xa572, 0xa572,\r
-+      0xa58d, 0xa58d, 0xa58d, 0xa58d, 0xa572, 0xa58d, 0xa572, 0xa58d,\r
-+      0xa572, 0xa58d, 0xa58d, 0xa58d, 0xa58d, 0x080c, 0x0d65, 0x00e6,\r
-+      0x0096, 0x0026, 0x0016, 0x080c, 0xb847, 0x0568, 0x6014, 0x2048,\r
-+      0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086, 0x0056, 0x1148,\r
-+      0x080c, 0x512e, 0x0130, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,\r
-+      0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xbe40,\r
-+      0x0090, 0xa868, 0xd0fc, 0x0178, 0xa807, 0x0000, 0x0016, 0x6004,\r
-+      0x908e, 0x0021, 0x0168, 0x908e, 0x003d, 0x0150, 0x001e, 0xa867,\r
-+      0x0103, 0xa833, 0x0100, 0x001e, 0x002e, 0x009e, 0x00ee, 0x0005,\r
-+      0x001e, 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048, 0xa800, 0x2048,\r
-+      0xa867, 0x0103, 0xa823, 0x8001, 0x009e, 0x0005, 0x00b6, 0x6610,\r
-+      0x2658, 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c, 0x1a0c, 0x0d65,\r
-+      0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xbd5f, 0x0804, 0xa653,\r
-+      0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xbda8, 0x0804, 0xa653,\r
-+      0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xbdd4, 0x0804, 0xa653,\r
-+      0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xbcf5, 0x0804, 0xa653,\r
-+      0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xba95, 0x0804, 0xa653,\r
-+      0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xbad6, 0x0804, 0xa653,\r
-+      0x6604, 0x96b6, 0x001f, 0x1118, 0x080c, 0x9fcb, 0x04e0, 0x6604,\r
-+      0x96b6, 0x0000, 0x1118, 0x080c, 0xa2fc, 0x04a8, 0x6604, 0x96b6,\r
-+      0x0022, 0x1118, 0x080c, 0xa003, 0x0470, 0x6604, 0x96b6, 0x0035,\r
-+      0x1118, 0x080c, 0xa113, 0x0438, 0x6604, 0x96b6, 0x0039, 0x1118,\r
-+      0x080c, 0xa291, 0x0400, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c,\r
-+      0xa03b, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xa077,\r
-+      0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xa0a2, 0x0058,\r
-+      0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128,\r
-+      0x00be, 0x0804, 0xa911, 0x00be, 0x0005, 0x080c, 0x9ca2, 0x0cd8,\r
-+      0xa670, 0xa673, 0xa670, 0xa6b7, 0xa670, 0xa845, 0xa91e, 0xa670,\r
-+      0xa670, 0xa8eb, 0xa670, 0xa8ff, 0x0096, 0x080c, 0x1595, 0x6014,\r
-+      0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e, 0x0804, 0x9be7,\r
-+      0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708c, 0x9086,\r
-+      0x0074, 0x1540, 0x080c, 0xcf99, 0x11b0, 0x6010, 0x00b6, 0x2058,\r
-+      0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802,\r
-+      0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x61c1, 0x080c, 0x303b,\r
-+      0x080c, 0x9be7, 0x0088, 0x2001, 0x000a, 0x080c, 0x61c1, 0x080c,\r
-+      0x303b, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x84d8, 0x080c,\r
-+      0x8936, 0x0010, 0x080c, 0xa830, 0x00ee, 0x0005, 0x00d6, 0xb800,\r
-+      0xd084, 0x0158, 0x9006, 0x080c, 0x61ad, 0x2069, 0x1853, 0x6804,\r
-+      0x0020, 0x2001, 0x0006, 0x080c, 0x61ed, 0x00de, 0x0005, 0x00b6,\r
-+      0x0096, 0x00d6, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1904,\r
-+      0xa809, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c,\r
-+      0xaa62, 0x0804, 0xa76e, 0x00d6, 0x080c, 0x70b7, 0x0198, 0x0026,\r
-+      0x2011, 0x0010, 0x080c, 0x668b, 0x002e, 0x05c8, 0x080c, 0x53a1,\r
-+      0x1540, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833,\r
-+      0xdead, 0x00f8, 0x0026, 0x2011, 0x8008, 0x080c, 0x668b, 0x002e,\r
-+      0x0530, 0x6014, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039,\r
-+      0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xbe40,\r
-+      0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833,\r
-+      0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x303b, 0x080c,\r
-+      0x9be7, 0x001e, 0x080c, 0x311a, 0x00de, 0x0804, 0xa80a, 0x00de,\r
-+      0x080c, 0xaa57, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510,\r
-+      0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086,\r
-+      0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c,\r
-+      0xbe40, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200,\r
-+      0x2001, 0x0006, 0x080c, 0x61c1, 0x080c, 0x303b, 0x080c, 0x9be7,\r
-+      0x0804, 0xa80a, 0x080c, 0xa818, 0x6014, 0x9005, 0x0190, 0x2048,\r
-+      0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039,\r
-+      0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe40,\r
-+      0x08f8, 0x080c, 0xa80e, 0x0160, 0x9006, 0x080c, 0x61ad, 0x2001,\r
-+      0x0004, 0x080c, 0x61ed, 0x2001, 0x0007, 0x080c, 0x61c1, 0x08a0,\r
-+      0x2001, 0x0004, 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0003,\r
-+      0x080c, 0x84d8, 0x080c, 0x8936, 0x0804, 0xa80a, 0xb85c, 0xd0e4,\r
-+      0x01d0, 0x080c, 0xbc6d, 0x080c, 0x70b7, 0x0118, 0xd0dc, 0x1904,\r
-+      0xa730, 0x2011, 0x1836, 0x2204, 0xc0ad, 0x2012, 0x2001, 0x0002,\r
-+      0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x2498, 0x78e2,\r
-+      0x00fe, 0x0804, 0xa730, 0x080c, 0xbcae, 0x2011, 0x1836, 0x2204,\r
-+      0xc0a5, 0x2012, 0x0006, 0x080c, 0xd0fe, 0x000e, 0x1904, 0xa730,\r
-+      0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x61c1, 0x9006, 0x080c,\r
-+      0x61ad, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6,\r
-+      0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, 0x00ff,\r
-+      0x78e6, 0x707a, 0x7010, 0x78ea, 0x707e, 0x908c, 0x00ff, 0x00ee,\r
-+      0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x246d, 0x00f6, 0x2100,\r
-+      0x900e, 0x080c, 0x2424, 0x795a, 0x00fe, 0x9186, 0x0081, 0x01d8,\r
-+      0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100,\r
-+      0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c,\r
-+      0x246d, 0x00f6, 0x2079, 0x1800, 0x797e, 0x2100, 0x900e, 0x080c,\r
-+      0x2424, 0x795a, 0x00fe, 0x8108, 0x080c, 0x6210, 0x2b00, 0x00ce,\r
-+      0x1904, 0xa730, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c, 0x0150,\r
-+      0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d,\r
-+      0x210c, 0xb916, 0x2001, 0x0002, 0x080c, 0x61c1, 0x6023, 0x0001,\r
-+      0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8, 0x080c, 0x8936,\r
-+      0x0008, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001, 0x1810,\r
-+      0x2004, 0xd0a4, 0x0120, 0x2001, 0x1854, 0x2004, 0xd0ac, 0x0005,\r
-+      0x00e6, 0x080c, 0xd582, 0x0190, 0x2071, 0x0260, 0x7108, 0x720c,\r
-+      0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010, 0x2058,\r
-+      0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee, 0x0005,\r
-+      0x2030, 0x2001, 0x0007, 0x080c, 0x61c1, 0x080c, 0x53a1, 0x1120,\r
-+      0x2001, 0x0007, 0x080c, 0x61ed, 0x080c, 0x303b, 0x6020, 0x9086,\r
-+      0x000a, 0x1108, 0x0005, 0x0804, 0x9be7, 0x00b6, 0x00e6, 0x0026,\r
-+      0x0016, 0x2071, 0x1800, 0x708c, 0x9086, 0x0014, 0x1904, 0xa8e2,\r
-+      0x00d6, 0x080c, 0x70b7, 0x0198, 0x0026, 0x2011, 0x0010, 0x080c,\r
-+      0x668b, 0x002e, 0x05c8, 0x080c, 0x53a1, 0x1540, 0x6014, 0x2048,\r
-+      0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x00f8, 0x0026,\r
-+      0x2011, 0x8008, 0x080c, 0x668b, 0x002e, 0x0530, 0x6014, 0x2048,\r
-+      0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030,\r
-+      0x900e, 0x2011, 0x4009, 0x080c, 0xbe40, 0x0040, 0x6014, 0x2048,\r
-+      0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058,\r
-+      0xb9a0, 0x0016, 0x080c, 0x303b, 0x080c, 0x9be7, 0x001e, 0x080c,\r
-+      0x311a, 0x00de, 0x0804, 0xa8e6, 0x00de, 0x080c, 0x53a1, 0x1170,\r
-+      0x6014, 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0,\r
-+      0x2021, 0x0006, 0x080c, 0x4a75, 0x004e, 0x003e, 0x00d6, 0x6010,\r
-+      0x2058, 0x080c, 0x630b, 0x080c, 0xa6a6, 0x00de, 0x080c, 0xab28,\r
-+      0x1588, 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, 0x0006,\r
-+      0x080c, 0x61c1, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864, 0x9084,\r
-+      0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011,\r
-+      0x4000, 0x080c, 0xbe40, 0x0060, 0xa864, 0x9084, 0x00ff, 0x9086,\r
-+      0x0029, 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200,\r
-+      0x009e, 0x080c, 0x303b, 0x6020, 0x9086, 0x000a, 0x0138, 0x080c,\r
-+      0x9be7, 0x0020, 0x080c, 0xa58f, 0x080c, 0xa830, 0x001e, 0x002e,\r
-+      0x00ee, 0x00be, 0x0005, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014,\r
-+      0x1160, 0x2001, 0x0002, 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007,\r
-+      0x0001, 0x080c, 0x84d8, 0x0804, 0x8936, 0x0804, 0xa830, 0x2030,\r
-+      0x2011, 0x1823, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b,\r
-+      0x1120, 0x2001, 0x0007, 0x080c, 0x61c1, 0x0804, 0x9be7, 0x0804,\r
-+      0xa830, 0x0002, 0xa670, 0xa929, 0xa670, 0xa968, 0xa670, 0xaa13,\r
-+      0xa91e, 0xa670, 0xa670, 0xaa26, 0xa670, 0xaa36, 0x6604, 0x9686,\r
-+      0x0003, 0x0904, 0xa845, 0x96b6, 0x001e, 0x1110, 0x080c, 0x9be7,\r
-+      0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xaa46, 0x11a0, 0x9006,\r
-+      0x080c, 0x61ad, 0x080c, 0x3006, 0x080c, 0xbf76, 0x2001, 0x0002,\r
-+      0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8,\r
-+      0x080c, 0x8936, 0x0408, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009,\r
-+      0x1160, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0170,\r
-+      0x8001, 0xb842, 0x601b, 0x000a, 0x0078, 0x2009, 0x026f, 0x2104,\r
-+      0x9084, 0xff00, 0x9086, 0x1900, 0x1108, 0x08a0, 0x080c, 0x3006,\r
-+      0x080c, 0xbf76, 0x080c, 0xa830, 0x00ce, 0x00de, 0x00be, 0x0005,\r
-+      0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xaa54, 0x00d6, 0x2069,\r
-+      0x194d, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086,\r
-+      0x007e, 0x1138, 0x2069, 0x181f, 0x2d04, 0x8000, 0x206a, 0x00de,\r
-+      0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x61ad, 0x2001, 0x0002,\r
-+      0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8,\r
-+      0x080c, 0x8936, 0x0804, 0xa9e3, 0x080c, 0xb847, 0x01b0, 0x6014,\r
-+      0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007, 0x0016,\r
-+      0x2001, 0x0002, 0x080c, 0xbe9a, 0x00b0, 0x6014, 0x2048, 0xa864,\r
-+      0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004,\r
-+      0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005,\r
-+      0x1110, 0x9006, 0x0c38, 0x080c, 0xa58f, 0x2009, 0x026e, 0x2134,\r
-+      0x96b4, 0x00ff, 0x9686, 0x0005, 0x0510, 0x9686, 0x000b, 0x01c8,\r
-+      0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686, 0x0009,\r
-+      0x01b0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0180, 0x2001,\r
-+      0x0004, 0x080c, 0x61c1, 0x2001, 0x0028, 0x601a, 0x6007, 0x0052,\r
-+      0x0010, 0x080c, 0xa830, 0x002e, 0x00be, 0x009e, 0x0005, 0x9286,\r
-+      0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xb847, 0x0140, 0xa864,\r
-+      0x9086, 0x0139, 0x0118, 0xa868, 0xd0fc, 0x0108, 0x0c50, 0x6010,\r
-+      0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138, 0x8001, 0xb842,\r
-+      0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0, 0x9086, 0x007e,\r
-+      0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c6f, 0x00ee, 0x0010,\r
-+      0x080c, 0x3006, 0x0870, 0x080c, 0xaa54, 0x1160, 0x2001, 0x0004,\r
-+      0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x84d8,\r
-+      0x0804, 0x8936, 0x080c, 0xa58f, 0x0804, 0xa830, 0x0469, 0x1160,\r
-+      0x2001, 0x0008, 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0005,\r
-+      0x080c, 0x84d8, 0x0804, 0x8936, 0x0804, 0xa830, 0x00e9, 0x1160,\r
-+      0x2001, 0x000a, 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0001,\r
-+      0x080c, 0x84d8, 0x0804, 0x8936, 0x0804, 0xa830, 0x2009, 0x026e,\r
-+      0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084,\r
-+      0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6,\r
-+      0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x627f, 0x001e, 0x00ce,\r
-+      0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016,\r
-+      0x6010, 0x2058, 0x2009, 0x1836, 0x2104, 0x9085, 0x0003, 0x200a,\r
-+      0x080c, 0xaafa, 0x0560, 0x2009, 0x1836, 0x2104, 0xc0cd, 0x200a,\r
-+      0x080c, 0x6663, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c,\r
-+      0xd273, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a,\r
-+      0x2009, 0x0001, 0x080c, 0x2fc5, 0x00e6, 0x2071, 0x1800, 0x080c,\r
-+      0x2ddb, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f,\r
-+      0x080c, 0x311a, 0x8108, 0x1f04, 0xaa98, 0x015e, 0x00ce, 0x080c,\r
-+      0xaa57, 0x2071, 0x0260, 0x2079, 0x0200, 0x7817, 0x0001, 0x2001,\r
-+      0x1836, 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118,\r
-+      0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1836,\r
-+      0x2102, 0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069, 0x181e,\r
-+      0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x181f, 0x206a,\r
-+      0x78ea, 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, 0x9105,\r
-+      0x2009, 0x182b, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c,\r
-+      0x246d, 0x080c, 0x70b7, 0x0170, 0x2071, 0x0260, 0x2069, 0x1953,\r
-+      0x7048, 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, 0x680e,\r
-+      0x080c, 0xbc6d, 0x0040, 0x2001, 0x0006, 0x080c, 0x61c1, 0x080c,\r
-+      0x303b, 0x080c, 0x9be7, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe,\r
-+      0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019,\r
-+      0x182b, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294,\r
-+      0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, 0x2011,\r
-+      0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, 0xabdf,\r
-+      0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c,\r
-+      0xabdf, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e, 0x009e, 0x0005,\r
-+      0x00e6, 0x2071, 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8, 0x7038,\r
-+      0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084, 0x0f00,\r
-+      0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac, 0x0110,\r
-+      0x9006, 0x0010, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x0096,\r
-+      0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126, 0x2091,\r
-+      0x8000, 0x2029, 0x19c4, 0x252c, 0x2021, 0x19cb, 0x2424, 0x2061,\r
-+      0x1ddc, 0x2071, 0x1800, 0x7250, 0x7070, 0x9202, 0x1a04, 0xabb7,\r
-+      0x080c, 0xd2a4, 0x0904, 0xabb0, 0x6720, 0x9786, 0x0007, 0x0904,\r
-+      0xabb0, 0x2500, 0x9c06, 0x0904, 0xabb0, 0x2400, 0x9c06, 0x0904,\r
-+      0xabb0, 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, 0x9005, 0x0130,\r
-+      0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1590, 0x00c6, 0x6043,\r
-+      0xffff, 0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x1914, 0x9786,\r
-+      0x000a, 0x0148, 0x080c, 0xba5c, 0x1130, 0x00ce, 0x080c, 0xa58f,\r
-+      0x080c, 0x9c21, 0x00e8, 0x6014, 0x2048, 0x080c, 0xb847, 0x01a8,\r
-+      0x9786, 0x0003, 0x1530, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130,\r
-+      0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4, 0x009e, 0xab7a, 0xa877,\r
-+      0x0000, 0x080c, 0x698a, 0x080c, 0xba36, 0x080c, 0x9c21, 0x00ce,\r
-+      0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1210, 0x0804, 0xab5b, 0x012e,\r
-+      0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee,\r
-+      0x0005, 0x9786, 0x0006, 0x1118, 0x080c, 0xd21e, 0x0c30, 0x9786,\r
-+      0x000a, 0x0998, 0x0880, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210,\r
-+      0x8318, 0x1f04, 0xabcb, 0x9006, 0x0005, 0x2304, 0x9102, 0x0218,\r
-+      0x2001, 0x0001, 0x0008, 0x9006, 0x918d, 0x0001, 0x0005, 0x0136,\r
-+      0x01c6, 0x0016, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0,\r
-+      0x9084, 0xffc0, 0x9300, 0x2098, 0x3518, 0x20a9, 0x0001, 0x220c,\r
-+      0x4002, 0x910e, 0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e,\r
-+      0x01ce, 0x013e, 0x0005, 0x220c, 0x9102, 0x0218, 0x2001, 0x0001,\r
-+      0x0010, 0x2001, 0x0000, 0x918d, 0x0001, 0x001e, 0x01ce, 0x013e,\r
-+      0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d65, 0x080c, 0xba4b,\r
-+      0x0120, 0x080c, 0xba5c, 0x0158, 0x0028, 0x080c, 0x303b, 0x080c,\r
-+      0xba5c, 0x0128, 0x080c, 0x8874, 0x080c, 0x9be7, 0x0005, 0x080c,\r
-+      0xa58f, 0x0cc0, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208,\r
-+      0x000a, 0x0005, 0xac41, 0xac41, 0xac41, 0xac41, 0xac41, 0xac41,\r
-+      0xac41, 0xac41, 0xac41, 0xac41, 0xac41, 0xac43, 0xac43, 0xac43,\r
-+      0xac43, 0xac41, 0xac41, 0xac41, 0xac43, 0xac41, 0xac41, 0xac41,\r
-+      0xac41, 0x080c, 0x0d65, 0x600b, 0xffff, 0x6003, 0x000f, 0x6106,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0xbf79, 0x2009, 0x8000, 0x080c,\r
-+      0x84d1, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082,\r
-+      0x0040, 0x0804, 0xacc8, 0x9186, 0x0027, 0x1520, 0x080c, 0x8874,\r
-+      0x080c, 0x3006, 0x080c, 0xbf76, 0x0096, 0x6114, 0x2148, 0x080c,\r
-+      0xb847, 0x0198, 0x080c, 0xba5c, 0x1118, 0x080c, 0xa58f, 0x0068,\r
-+      0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0xa97c, 0xc1c5,\r
-+      0xa97e, 0x080c, 0x6996, 0x080c, 0xba36, 0x009e, 0x080c, 0x9be7,\r
-+      0x0804, 0x8936, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082, 0x0040,\r
-+      0x0018, 0x080c, 0x0d65, 0x0005, 0x0002, 0xaca6, 0xaca4, 0xaca4,\r
-+      0xaca4, 0xaca4, 0xaca4, 0xaca4, 0xaca4, 0xaca4, 0xaca4, 0xaca4,\r
-+      0xacbf, 0xacbf, 0xacbf, 0xacbf, 0xaca4, 0xacbf, 0xaca4, 0xacbf,\r
-+      0xaca4, 0xaca4, 0xaca4, 0xaca4, 0x080c, 0x0d65, 0x080c, 0x8874,\r
-+      0x0096, 0x6114, 0x2148, 0x080c, 0xb847, 0x0168, 0xa867, 0x0103,\r
-+      0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c,\r
-+      0x6996, 0x080c, 0xba36, 0x009e, 0x080c, 0x9be7, 0x0005, 0x080c,\r
-+      0x8874, 0x080c, 0xba5c, 0x090c, 0xa58f, 0x080c, 0x9be7, 0x0005,\r
-+      0x0002, 0xace2, 0xace0, 0xace0, 0xace0, 0xace0, 0xace0, 0xace0,\r
-+      0xace0, 0xace0, 0xace0, 0xace0, 0xace4, 0xace4, 0xace4, 0xace4,\r
-+      0xace0, 0xace6, 0xace0, 0xace4, 0xace0, 0xace0, 0xace0, 0xace0,\r
-+      0x080c, 0x0d65, 0x080c, 0x0d65, 0x080c, 0x0d65, 0x080c, 0x9be7,\r
-+      0x0804, 0x8936, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208,\r
-+      0x000a, 0x0005, 0xad09, 0xad09, 0xad09, 0xad09, 0xad09, 0xad42,\r
-+      0xae31, 0xad09, 0xae3d, 0xad09, 0xad09, 0xad09, 0xad09, 0xad09,\r
-+      0xad09, 0xad09, 0xad09, 0xad09, 0xad09, 0xae3d, 0xad0b, 0xad09,\r
-+      0xae3b, 0x080c, 0x0d65, 0x00b6, 0x0096, 0x6114, 0x2148, 0x6010,\r
-+      0x2058, 0xb800, 0xd0bc, 0x1508, 0xa87b, 0x0000, 0xa867, 0x0103,\r
-+      0xa877, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,\r
-+      0x190c, 0xaec2, 0x080c, 0x67ac, 0x6210, 0x2258, 0xba3c, 0x82ff,\r
-+      0x0110, 0x8211, 0xba3e, 0xb8c0, 0x9005, 0x0110, 0x080c, 0x639b,\r
-+      0x080c, 0x9be7, 0x009e, 0x00be, 0x0005, 0xa87c, 0xd0ac, 0x09e0,\r
-+      0xa838, 0xa934, 0x9105, 0x09c0, 0xa880, 0xd0bc, 0x19a8, 0x080c,\r
-+      0xbb8c, 0x0c80, 0x00b6, 0x0096, 0x6114, 0x2148, 0x601c, 0xd0fc,\r
-+      0x1110, 0x7644, 0x0008, 0x9036, 0x96b4, 0x0fff, 0x86ff, 0x1590,\r
-+      0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xae20, 0xa87b, 0x0000,\r
-+      0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,\r
-+      0x9115, 0x190c, 0xaec2, 0x080c, 0x67ac, 0x6210, 0x2258, 0xba3c,\r
-+      0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8c0, 0x9005, 0x0110, 0x080c,\r
-+      0x639b, 0x601c, 0xd0fc, 0x1148, 0x7044, 0xd0e4, 0x1904, 0xae04,\r
-+      0x080c, 0x9be7, 0x009e, 0x00be, 0x0005, 0x2009, 0x0211, 0x210c,\r
-+      0x080c, 0x0d65, 0x968c, 0x0c00, 0x0150, 0x6010, 0x2058, 0xb800,\r
-+      0xd0bc, 0x1904, 0xae08, 0x7348, 0xab92, 0x734c, 0xab8e, 0x968c,\r
-+      0x00ff, 0x9186, 0x0002, 0x0508, 0x9186, 0x0028, 0x1118, 0xa87b,\r
-+      0x001c, 0x00e8, 0xd6dc, 0x01a0, 0xa87b, 0x0015, 0xa87c, 0xd0ac,\r
-+      0x0170, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0148, 0x7048, 0x9106,\r
-+      0x1118, 0x704c, 0x9206, 0x0118, 0xa992, 0xaa8e, 0xc6dc, 0x0038,\r
-+      0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0xa867,\r
-+      0x0103, 0xae76, 0x901e, 0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130,\r
-+      0x7064, 0x9005, 0x1118, 0xc6c4, 0x0804, 0xad4e, 0x735c, 0xab86,\r
-+      0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036,\r
-+      0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xb41a, 0x003e,\r
-+      0xd6cc, 0x0904, 0xad63, 0x7154, 0xa98a, 0x81ff, 0x0904, 0xad63,\r
-+      0x9192, 0x0021, 0x1278, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029,\r
-+      0x080c, 0xb41a, 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xbf06,\r
-+      0x0804, 0xad63, 0xa868, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a,\r
-+      0x0c50, 0x00a6, 0x2950, 0x080c, 0xb3b9, 0x00ae, 0x080c, 0xbf06,\r
-+      0x080c, 0xb40a, 0x0804, 0xad65, 0x080c, 0xbb4f, 0x0804, 0xad7a,\r
-+      0xa87c, 0xd0ac, 0x0904, 0xad8b, 0xa880, 0xd0bc, 0x1904, 0xad8b,\r
-+      0x7348, 0xa838, 0x9306, 0x11c8, 0x734c, 0xa834, 0x931e, 0x0904,\r
-+      0xad8b, 0xd6d4, 0x0190, 0xab38, 0x9305, 0x0904, 0xad8b, 0x0068,\r
-+      0xa87c, 0xd0ac, 0x0904, 0xad56, 0xa838, 0xa934, 0x9105, 0x0904,\r
-+      0xad56, 0xa880, 0xd0bc, 0x1904, 0xad56, 0x080c, 0xbb8c, 0x0804,\r
-+      0xad7a, 0x00f6, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,\r
-+      0x00fe, 0x0021, 0x0005, 0x0011, 0x0005, 0x0005, 0x0096, 0x6003,\r
-+      0x0002, 0x6007, 0x0043, 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0128,\r
-+      0x009e, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0xa9ac, 0x910a,\r
-+      0x2300, 0xaab0, 0x9213, 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90,\r
-+      0xac46, 0xab4a, 0xae36, 0xad3a, 0x6044, 0xd0fc, 0x190c, 0x98f1,\r
-+      0x604b, 0x0000, 0x080c, 0x1ad2, 0x1118, 0x6144, 0x080c, 0x84fd,\r
-+      0x009e, 0x0005, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208,\r
-+      0x000a, 0x0005, 0xae89, 0xae89, 0xae89, 0xae89, 0xae89, 0xae89,\r
-+      0xae89, 0xae89, 0xae89, 0xae89, 0xae8b, 0xae89, 0xae89, 0xae89,\r
-+      0xae89, 0xae9c, 0xae89, 0xae89, 0xae89, 0xae89, 0xaec0, 0xae89,\r
-+      0xae89, 0x080c, 0x0d65, 0x6004, 0x9086, 0x0040, 0x1110, 0x080c,\r
-+      0x8874, 0x2019, 0x0001, 0x080c, 0x9286, 0x6003, 0x0002, 0x080c,\r
-+      0xbf7e, 0x080c, 0x88d1, 0x0005, 0x6004, 0x9086, 0x0040, 0x1110,\r
-+      0x080c, 0x8874, 0x2019, 0x0001, 0x080c, 0x9286, 0x080c, 0x88d1,\r
-+      0x080c, 0x3006, 0x080c, 0xbf76, 0x0096, 0x6114, 0x2148, 0x080c,\r
-+      0xb847, 0x0150, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000,\r
-+      0x080c, 0x6996, 0x080c, 0xba36, 0x009e, 0x080c, 0x9be7, 0x0005,\r
-+      0x080c, 0x0d65, 0xa87b, 0x0015, 0xd1fc, 0x0180, 0xa87b, 0x0007,\r
-+      0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0x0006, 0x0016, 0x2009,\r
-+      0x1a48, 0x2104, 0x8000, 0x200a, 0x001e, 0x000e, 0xa992, 0xa88e,\r
-+      0x0005, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a,\r
-+      0x0005, 0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xaefa, 0xaef8,\r
-+      0xaef8, 0xafb7, 0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xaef8,\r
-+      0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xb0fb, 0xaef8, 0xb105, 0xaef8,\r
-+      0x080c, 0x0d65, 0x601c, 0xd0bc, 0x0178, 0xd084, 0x0168, 0xd0f4,\r
-+      0x0120, 0xc084, 0x601e, 0x0804, 0xacea, 0x6114, 0x0096, 0x2148,\r
-+      0xa87c, 0xc0e5, 0xa87e, 0x009e, 0x0076, 0x00a6, 0x00e6, 0x0096,\r
-+      0x2071, 0x0260, 0x6114, 0x2150, 0x601c, 0xd0fc, 0x1110, 0x7644,\r
-+      0x0008, 0x9036, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e,\r
-+      0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e,\r
-+      0x00be, 0x86ff, 0x0904, 0xafb0, 0x9694, 0xff00, 0x9284, 0x0c00,\r
-+      0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904,\r
-+      0xafb0, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4,\r
-+      0xb676, 0x0c38, 0x080c, 0x1022, 0x090c, 0x0d65, 0x2900, 0xb07a,\r
-+      0xb77c, 0x97bd, 0x0200, 0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a,\r
-+      0xb06c, 0xa86e, 0xb070, 0xa872, 0x7044, 0x9084, 0xf000, 0x9635,\r
-+      0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c, 0xab8e,\r
-+      0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118,\r
-+      0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015, 0x0038,\r
-+      0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0xaf7e,\r
-+      0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190, 0x735c,\r
-+      0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,\r
-+      0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xb41a,\r
-+      0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192,\r
-+      0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c,\r
-+      0xb41a, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc,\r
-+      0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, 0xb3b9,\r
-+      0x080c, 0x18f2, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x2001,\r
-+      0x1959, 0x2004, 0x604a, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940,\r
-+      0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, 0x0002, 0x080c,\r
-+      0xbf87, 0x0904, 0xb0f6, 0x604b, 0x0000, 0x6010, 0x00b6, 0x2058,\r
-+      0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, 0xb0b5, 0xa978,\r
-+      0xa868, 0xd0fc, 0x0904, 0xb076, 0x0016, 0xa87c, 0x0006, 0xa880,\r
-+      0x0006, 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002,\r
-+      0x0904, 0xb044, 0x9086, 0x0028, 0x1904, 0xb030, 0xa87b, 0x001c,\r
-+      0xb07b, 0x001c, 0x0804, 0xb04c, 0x6024, 0xd0f4, 0x11d0, 0xa838,\r
-+      0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, 0x1120, 0xa88c,\r
-+      0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4, 0x1148, 0xa9ac, 0xa834,\r
-+      0x9102, 0x603a, 0xa9b0, 0xa838, 0x9103, 0x603e, 0x6024, 0xc0f5,\r
-+      0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c, 0x8000, 0xb83e, 0x00be,\r
-+      0x601c, 0xc0fc, 0x601e, 0x9006, 0xa876, 0xa892, 0xa88e, 0xa87c,\r
-+      0xc0e4, 0xa87e, 0xd0cc, 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878,\r
-+      0x2048, 0x080c, 0x0fd4, 0x009e, 0x080c, 0xbb8c, 0x0804, 0xb0f6,\r
-+      0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xbe29,\r
-+      0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b,\r
-+      0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834,\r
-+      0xa938, 0x9115, 0x190c, 0xaec2, 0xa87c, 0xb07e, 0xa890, 0xb092,\r
-+      0xa88c, 0xb08e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0,\r
-+      0x20a9, 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0,\r
-+      0x9084, 0xffc0, 0x9080, 0x0019, 0x2098, 0x4003, 0x00ae, 0x000e,\r
-+      0xa882, 0x000e, 0xa87e, 0x080c, 0xbf06, 0x001e, 0xa874, 0x0006,\r
-+      0x2148, 0x080c, 0x0fd4, 0x001e, 0x0804, 0xb0e2, 0x0016, 0x00a6,\r
-+      0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086,\r
-+      0x0028, 0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc,\r
-+      0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xbe29, 0x0118,\r
-+      0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007,\r
-+      0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,\r
-+      0x9115, 0x190c, 0xaec2, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c,\r
-+      0xb07e, 0x00ae, 0x080c, 0x0fd4, 0x009e, 0x080c, 0xbf06, 0xa974,\r
-+      0x0016, 0x080c, 0xb40a, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974,\r
-+      0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118,\r
-+      0xa87b, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c,\r
-+      0xbe29, 0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118,\r
-+      0xa87b, 0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128,\r
-+      0xa834, 0xa938, 0x9115, 0x190c, 0xaec2, 0xa974, 0x0016, 0x080c,\r
-+      0x67ac, 0x001e, 0x6010, 0x00b6, 0x2058, 0xba3c, 0x82ff, 0x0110,\r
-+      0x8211, 0xba3e, 0xb8c0, 0x9005, 0x0120, 0x0016, 0x080c, 0x639b,\r
-+      0x001e, 0x00be, 0xd1e4, 0x1120, 0x080c, 0x9be7, 0x009e, 0x0005,\r
-+      0x080c, 0xbb4f, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, 0x080c,\r
-+      0xbf87, 0x190c, 0x1900, 0x009e, 0x0005, 0x0096, 0x6114, 0x2148,\r
-+      0xa83c, 0xa940, 0x9105, 0x01e8, 0xa877, 0x0000, 0xa87b, 0x0000,\r
-+      0xa867, 0x0103, 0x00b6, 0x6010, 0x2058, 0xa834, 0xa938, 0x9115,\r
-+      0x11a0, 0x080c, 0x67ac, 0xba3c, 0x8211, 0x0208, 0xba3e, 0xb8c0,\r
-+      0x9005, 0x0110, 0x080c, 0x639b, 0x080c, 0x9be7, 0x00be, 0x009e,\r
-+      0x0005, 0xa87c, 0xc0dc, 0xa87e, 0x08f8, 0xb800, 0xd0bc, 0x1120,\r
-+      0xa834, 0x080c, 0xaec2, 0x0c28, 0xa880, 0xd0bc, 0x1dc8, 0x080c,\r
-+      0xbb8c, 0x0c60, 0x080c, 0x8874, 0x0010, 0x080c, 0x88d1, 0x601c,\r
-+      0xd084, 0x0110, 0x080c, 0x1914, 0x080c, 0xb847, 0x01f0, 0x0096,\r
-+      0x6114, 0x2148, 0x080c, 0xba5c, 0x1118, 0x080c, 0xa58f, 0x00a0,\r
-+      0xa867, 0x0103, 0x2009, 0x180c, 0x210c, 0xd18c, 0x1198, 0xd184,\r
-+      0x1170, 0x6108, 0xa97a, 0x918e, 0x0029, 0x1110, 0x080c, 0xd51a,\r
-+      0xa877, 0x0000, 0x080c, 0x6996, 0x009e, 0x0804, 0x9c21, 0xa87b,\r
-+      0x0004, 0x0cb0, 0xa87b, 0x0004, 0x0c98, 0x9182, 0x0057, 0x1220,\r
-+      0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb18c, 0xb18c, 0xb18c,\r
-+      0xb18c, 0xb18c, 0xb18e, 0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c,\r
-+      0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c,\r
-+      0xb18c, 0xb1b2, 0xb18c, 0xb18c, 0x080c, 0x0d65, 0x080c, 0x5395,\r
-+      0x01f8, 0x6014, 0x7144, 0x918c, 0x0fff, 0x9016, 0xd1c4, 0x0118,\r
-+      0x7264, 0x9294, 0x00ff, 0x0096, 0x904d, 0x0188, 0xa87b, 0x0000,\r
-+      0xa864, 0x9086, 0x0139, 0x0128, 0xa867, 0x0103, 0xa976, 0xaa96,\r
-+      0x0030, 0xa897, 0x4000, 0xa99a, 0xaa9e, 0x080c, 0x6996, 0x009e,\r
-+      0x0804, 0x9be7, 0x080c, 0x5395, 0x0dd8, 0x6014, 0x900e, 0x9016,\r
-+      0x0c10, 0x9182, 0x0085, 0x0002, 0xb1cb, 0xb1c9, 0xb1c9, 0xb1d7,\r
-+      0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9,\r
-+      0xb1c9, 0x080c, 0x0d65, 0x6003, 0x0001, 0x6106, 0x0126, 0x2091,\r
-+      0x8000, 0x2009, 0x8020, 0x080c, 0x84d1, 0x012e, 0x0005, 0x0026,\r
-+      0x0056, 0x00d6, 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220,\r
-+      0x080c, 0xb835, 0x01a0, 0x2268, 0x6800, 0x9086, 0x0000, 0x0178,\r
-+      0x6010, 0x6d10, 0x952e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0xb445,\r
-+      0x00ce, 0x0128, 0x6803, 0x0002, 0x6007, 0x0086, 0x0010, 0x6007,\r
-+      0x0087, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x9280,\r
-+      0x0004, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824,\r
-+      0xd0ec, 0x0128, 0x00c6, 0x2260, 0x080c, 0xbb8c, 0x00ce, 0x00ee,\r
-+      0x00de, 0x005e, 0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004,\r
-+      0x908a, 0x0085, 0x0a0c, 0x0d65, 0x908a, 0x0092, 0x1a0c, 0x0d65,\r
-+      0x9082, 0x0085, 0x00e2, 0x9186, 0x0027, 0x0120, 0x9186, 0x0014,\r
-+      0x190c, 0x0d65, 0x080c, 0x8874, 0x0096, 0x6014, 0x2048, 0x080c,\r
-+      0xb847, 0x0140, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029,\r
-+      0x080c, 0x6996, 0x009e, 0x080c, 0x9c21, 0x0804, 0x8936, 0xb24c,\r
-+      0xb24e, 0xb24e, 0xb24c, 0xb24c, 0xb24c, 0xb24c, 0xb24c, 0xb24c,\r
-+      0xb24c, 0xb24c, 0xb24c, 0xb24c, 0x080c, 0x0d65, 0x080c, 0x9c21,\r
-+      0x0005, 0x9186, 0x0013, 0x1130, 0x6004, 0x9082, 0x0085, 0x2008,\r
-+      0x0804, 0xb29d, 0x9186, 0x0027, 0x1558, 0x080c, 0x8874, 0x080c,\r
-+      0x3006, 0x080c, 0xbf76, 0x0096, 0x6014, 0x2048, 0x080c, 0xb847,\r
-+      0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c,\r
-+      0x6996, 0x080c, 0xba36, 0x009e, 0x080c, 0x9be7, 0x0005, 0x9186,\r
-+      0x0089, 0x0118, 0x9186, 0x008a, 0x1140, 0x080c, 0x9ab7, 0x0128,\r
-+      0x9086, 0x000c, 0x0904, 0xb2d5, 0x0000, 0x080c, 0x9ca2, 0x0c70,\r
-+      0x9186, 0x0014, 0x1d60, 0x080c, 0x8874, 0x0096, 0x6014, 0x2048,\r
-+      0x080c, 0xb847, 0x0d00, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b,\r
-+      0x0006, 0xa880, 0xc0ec, 0xa882, 0x0890, 0x0002, 0xb2ad, 0xb2ab,\r
-+      0xb2ab, 0xb2ab, 0xb2ab, 0xb2ab, 0xb2c1, 0xb2ab, 0xb2ab, 0xb2ab,\r
-+      0xb2ab, 0xb2ab, 0xb2ab, 0x080c, 0x0d65, 0x6034, 0x908c, 0xff00,\r
-+      0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001,\r
-+      0x1957, 0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x000c,\r
-+      0x0005, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118,\r
-+      0x9186, 0x0035, 0x1118, 0x2001, 0x1957, 0x0010, 0x2001, 0x1958,\r
-+      0x2004, 0x601a, 0x6003, 0x000e, 0x0005, 0x9182, 0x0092, 0x1220,\r
-+      0x9182, 0x0085, 0x0208, 0x0012, 0x0804, 0x9ca2, 0xb2eb, 0xb2eb,\r
-+      0xb2eb, 0xb2eb, 0xb2ed, 0xb33a, 0xb2eb, 0xb2eb, 0xb2eb, 0xb2eb,\r
-+      0xb2eb, 0xb2eb, 0xb2eb, 0x080c, 0x0d65, 0x0096, 0x6010, 0x00b6,\r
-+      0x2058, 0xb800, 0x00be, 0xd0bc, 0x0168, 0x6034, 0x908c, 0xff00,\r
-+      0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x009e,\r
-+      0x0804, 0xb34e, 0x080c, 0xb847, 0x1118, 0x080c, 0xba36, 0x0068,\r
-+      0x6014, 0x2048, 0x080c, 0xbf8d, 0x1110, 0x080c, 0xba36, 0xa867,\r
-+      0x0103, 0x080c, 0xbf41, 0x080c, 0x6996, 0x00d6, 0x2c68, 0x080c,\r
-+      0x9b91, 0x01d0, 0x6003, 0x0001, 0x6007, 0x001e, 0x600b, 0xffff,\r
-+      0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e,\r
-+      0x6910, 0x6112, 0x080c, 0xbcdb, 0x695c, 0x615e, 0x6023, 0x0001,\r
-+      0x2009, 0x8020, 0x080c, 0x84d1, 0x2d60, 0x00de, 0x080c, 0x9be7,\r
-+      0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,\r
-+      0x05a0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0035, 0x0130,\r
-+      0x9186, 0x001e, 0x0118, 0x9186, 0x0039, 0x1538, 0x00d6, 0x2c68,\r
-+      0x080c, 0xbed9, 0x11f0, 0x080c, 0x9b91, 0x01d8, 0x6106, 0x6003,\r
-+      0x0001, 0x6023, 0x0001, 0x6910, 0x6112, 0x692c, 0x612e, 0x6930,\r
-+      0x6132, 0x6934, 0x918c, 0x00ff, 0x6136, 0x6938, 0x613a, 0x693c,\r
-+      0x613e, 0x695c, 0x615e, 0x080c, 0xbcdb, 0x2009, 0x8020, 0x080c,\r
-+      0x84d1, 0x2d60, 0x00de, 0x0804, 0x9be7, 0x0096, 0x6014, 0x2048,\r
-+      0x080c, 0xb847, 0x01c8, 0xa867, 0x0103, 0xa880, 0xd0b4, 0x0128,\r
-+      0xc0ec, 0xa882, 0xa87b, 0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87b,\r
-+      0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xbb4b, 0xa877, 0x0000,\r
-+      0x080c, 0x6996, 0x080c, 0xba36, 0x009e, 0x0804, 0x9be7, 0x0016,\r
-+      0x0096, 0x6014, 0x2048, 0x080c, 0xb847, 0x0140, 0xa867, 0x0103,\r
-+      0xa87b, 0x0028, 0xa877, 0x0000, 0x080c, 0x6996, 0x009e, 0x001e,\r
-+      0x9186, 0x0013, 0x0158, 0x9186, 0x0014, 0x0130, 0x9186, 0x0027,\r
-+      0x0118, 0x080c, 0x9ca2, 0x0020, 0x080c, 0x8874, 0x080c, 0x9c21,\r
-+      0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182,\r
-+      0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098,\r
-+      0x0018, 0x2009, 0x0020, 0x2011, 0x0029, 0x080c, 0xb41a, 0x96b2,\r
-+      0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fd4, 0x080c, 0x1022,\r
-+      0x0520, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406,\r
-+      0x968a, 0x003d, 0x1228, 0x2608, 0x2011, 0x001b, 0x0499, 0x00a8,\r
-+      0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x0451,\r
-+      0x0c28, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,\r
-+      0x0003, 0xb566, 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205, 0x2003,\r
-+      0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x009e, 0x006e,\r
-+      0x005e, 0x0005, 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055, 0x0130,\r
-+      0xa807, 0x0000, 0x080c, 0x6996, 0x2a48, 0x0cb8, 0x080c, 0x6996,\r
-+      0x00ae, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085, 0x0080,\r
-+      0x7816, 0xd184, 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001, 0xa860,\r
-+      0x20e8, 0xa85c, 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300, 0x9e00,\r
-+      0x2098, 0x4003, 0x8318, 0x9386, 0x0020, 0x1148, 0x2018, 0x2300,\r
-+      0x9e00, 0x2098, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x8109,\r
-+      0x1d80, 0x7817, 0x0000, 0x00fe, 0x0005, 0x0066, 0x0126, 0x2091,\r
-+      0x8000, 0x2031, 0x0001, 0x6020, 0x9084, 0x000f, 0x0083, 0x012e,\r
-+      0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031, 0x0000,\r
-+      0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005, 0xb497,\r
-+      0xb497, 0xb492, 0xb4bb, 0xb46f, 0xb492, 0xb471, 0xb492, 0xb46f,\r
-+      0xb46f, 0xb492, 0xb492, 0xb492, 0xb46f, 0xb46f, 0xb46f, 0x080c,\r
-+      0x0d65, 0x6010, 0x9080, 0x0000, 0x2004, 0xd0bc, 0x190c, 0xb4bb,\r
-+      0x0036, 0x6014, 0x0096, 0x2048, 0xa880, 0x009e, 0xd0cc, 0x0118,\r
-+      0x2019, 0x000c, 0x0038, 0xd094, 0x0118, 0x2019, 0x000d, 0x0010,\r
-+      0x2019, 0x0010, 0x080c, 0xcdf9, 0x6023, 0x0006, 0x6003, 0x0007,\r
-+      0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x0096,\r
-+      0x86ff, 0x11e8, 0x6014, 0x2048, 0x080c, 0xb847, 0x01d0, 0x6043,\r
-+      0xffff, 0xa864, 0x9086, 0x0139, 0x1128, 0xa87b, 0x0005, 0xa883,\r
-+      0x0000, 0x0028, 0x900e, 0x2001, 0x0005, 0x080c, 0x6bb3, 0x080c,\r
-+      0xbb4b, 0x080c, 0x698a, 0x080c, 0x9c21, 0x9085, 0x0001, 0x009e,\r
-+      0x0005, 0x9006, 0x0ce0, 0x080c, 0x98c8, 0x080c, 0xbf9b, 0x6000,\r
-+      0x908a, 0x0016, 0x1a0c, 0x0d65, 0x002b, 0x0106, 0x080c, 0x98e4,\r
-+      0x010e, 0x0005, 0xb4da, 0xb508, 0xb4dc, 0xb52f, 0xb503, 0xb4da,\r
-+      0xb492, 0xb497, 0xb497, 0xb492, 0xb492, 0xb492, 0xb492, 0xb492,\r
-+      0xb492, 0xb492, 0x080c, 0x0d65, 0x86ff, 0x1510, 0x6020, 0x9086,\r
-+      0x0006, 0x01f0, 0x0096, 0x6014, 0x2048, 0x080c, 0xb847, 0x0158,\r
-+      0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4,\r
-+      0x009e, 0x080c, 0xbb4b, 0x009e, 0x080c, 0xbf1b, 0x6007, 0x0085,\r
-+      0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x84b3,\r
-+      0x9085, 0x0001, 0x0005, 0x0066, 0x080c, 0x1914, 0x006e, 0x08a0,\r
-+      0x00e6, 0x2071, 0x19b8, 0x7030, 0x9c06, 0x1120, 0x080c, 0x9206,\r
-+      0x00ee, 0x0850, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x1150,\r
-+      0x0086, 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0x9382, 0x009e,\r
-+      0x008e, 0x0040, 0x0066, 0x080c, 0x9102, 0x190c, 0x0d65, 0x080c,\r
-+      0x9110, 0x006e, 0x00ee, 0x1904, 0xb4dc, 0x0804, 0xb492, 0x0036,\r
-+      0x00e6, 0x2071, 0x19b8, 0x704c, 0x9c06, 0x1138, 0x901e, 0x080c,\r
-+      0x9286, 0x00ee, 0x003e, 0x0804, 0xb4dc, 0x080c, 0x94b8, 0x00ee,\r
-+      0x003e, 0x1904, 0xb4dc, 0x0804, 0xb492, 0x00c6, 0x0066, 0x6020,\r
-+      0x9084, 0x000f, 0x001b, 0x006e, 0x00ce, 0x0005, 0xb565, 0xb627,\r
-+      0xb78e, 0xb56d, 0x9c21, 0xb565, 0xcdeb, 0xbf83, 0xb627, 0xb55e,\r
-+      0xb80d, 0xb55e, 0xb55e, 0xb55e, 0xb55e, 0xb55e, 0x080c, 0x0d65,\r
-+      0x080c, 0xba5c, 0x1110, 0x080c, 0xa58f, 0x0005, 0x080c, 0x8874,\r
-+      0x0804, 0x9be7, 0x601b, 0x0001, 0x0005, 0x080c, 0xb847, 0x0130,\r
-+      0x6014, 0x0096, 0x2048, 0x2c00, 0xa896, 0x009e, 0x080c, 0x98c8,\r
-+      0x080c, 0xbf9b, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d65, 0x0013,\r
-+      0x0804, 0x98e4, 0xb592, 0xb594, 0xb5be, 0xb5d2, 0xb5fd, 0xb592,\r
-+      0xb565, 0xb565, 0xb565, 0xb5d9, 0xb5d9, 0xb592, 0xb592, 0xb592,\r
-+      0xb592, 0xb5e3, 0x080c, 0x0d65, 0x00e6, 0x6014, 0x0096, 0x2048,\r
-+      0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19b8, 0x7030, 0x9c06,\r
-+      0x01d0, 0x0066, 0x080c, 0x9102, 0x190c, 0x0d65, 0x080c, 0x9110,\r
-+      0x006e, 0x080c, 0xbf1b, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,\r
-+      0x0002, 0x2001, 0x1958, 0x2004, 0x601a, 0x2009, 0x8020, 0x080c,\r
-+      0x84b3, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8, 0x0096, 0x6014,\r
-+      0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c, 0xbf1b, 0x6007,\r
-+      0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020, 0x080c,\r
-+      0x84b3, 0x0005, 0x080c, 0x98c8, 0x080c, 0x9a39, 0x080c, 0x98e4,\r
-+      0x0c28, 0x0096, 0x601b, 0x0001, 0x6014, 0x2048, 0xa880, 0xc0b5,\r
-+      0xa882, 0x009e, 0x0005, 0x080c, 0x5395, 0x01a8, 0x6014, 0x0096,\r
-+      0x904d, 0x0180, 0xa864, 0xa867, 0x0103, 0xa87b, 0x0006, 0x9086,\r
-+      0x0139, 0x1140, 0xa867, 0x0139, 0xa897, 0x4005, 0xa89b, 0x0004,\r
-+      0x080c, 0x6996, 0x009e, 0x0804, 0x9be7, 0x6014, 0x0096, 0x904d,\r
-+      0x0508, 0x080c, 0xbf87, 0x01f0, 0x080c, 0x98e4, 0x2001, 0x180f,\r
-+      0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884, 0x009e, 0x8003,\r
-+      0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0037, 0x2c08, 0x080c,\r
-+      0x159e, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c,\r
-+      0x9c85, 0x0005, 0x009e, 0x080c, 0x1914, 0x0804, 0xb5be, 0x6000,\r
-+      0x908a, 0x0016, 0x1a0c, 0x0d65, 0x000b, 0x0005, 0xb63e, 0xb56a,\r
-+      0xb640, 0xb63e, 0xb640, 0xb640, 0xb566, 0xb63e, 0xb560, 0xb560,\r
-+      0xb63e, 0xb63e, 0xb63e, 0xb63e, 0xb63e, 0xb63e, 0x080c, 0x0d65,\r
-+      0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be, 0x908a,\r
-+      0x000c, 0x1a0c, 0x0d65, 0x00b6, 0x0013, 0x00be, 0x0005, 0xb65b,\r
-+      0xb728, 0xb65d, 0xb69d, 0xb65d, 0xb69d, 0xb65d, 0xb66b, 0xb65b,\r
-+      0xb69d, 0xb65b, 0xb68c, 0x080c, 0x0d65, 0x6004, 0x908e, 0x0016,\r
-+      0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002, 0x0590, 0x908e,\r
-+      0x0052, 0x0904, 0xb724, 0x6004, 0x080c, 0xba5c, 0x0904, 0xb741,\r
-+      0x908e, 0x0004, 0x1110, 0x080c, 0x303b, 0x908e, 0x0021, 0x0904,\r
-+      0xb745, 0x908e, 0x0022, 0x0904, 0xb789, 0x908e, 0x003d, 0x0904,\r
-+      0xb745, 0x908e, 0x0039, 0x0904, 0xb749, 0x908e, 0x0035, 0x0904,\r
-+      0xb749, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001, 0x1140, 0x6010,\r
-+      0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0110, 0x080c,\r
-+      0x3006, 0x080c, 0xa58f, 0x0804, 0x9c21, 0x00c6, 0x00d6, 0x6104,\r
-+      0x9186, 0x0016, 0x0904, 0xb715, 0x9186, 0x0002, 0x1904, 0xb6ea,\r
-+      0x2001, 0x1836, 0x2004, 0xd08c, 0x11c8, 0x080c, 0x70b7, 0x11b0,\r
-+      0x080c, 0xbf61, 0x0138, 0x080c, 0x70da, 0x1120, 0x080c, 0x6fc2,\r
-+      0x0804, 0xb772, 0x2001, 0x194e, 0x2003, 0x0001, 0x2001, 0x1800,\r
-+      0x2003, 0x0001, 0x080c, 0x6fe8, 0x0804, 0xb772, 0x6010, 0x2058,\r
-+      0x2001, 0x1836, 0x2004, 0xd0ac, 0x1904, 0xb772, 0xb8a0, 0x9084,\r
-+      0xff80, 0x1904, 0xb772, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0190,\r
-+      0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398,\r
-+      0x604b, 0x0000, 0x080c, 0x9b91, 0x0128, 0x2b00, 0x6012, 0x6023,\r
-+      0x0001, 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0,\r
-+      0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2009, 0x1836,\r
-+      0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c6f,\r
-+      0x00ee, 0x080c, 0xa58f, 0x0030, 0x080c, 0xa58f, 0x080c, 0x3006,\r
-+      0x080c, 0xbf76, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x303b,\r
-+      0x012e, 0x00ee, 0x080c, 0x9c21, 0x0005, 0x2001, 0x0002, 0x080c,\r
-+      0x61c1, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8, 0x080c,\r
-+      0x8936, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x303b, 0x0804, 0xb699,\r
-+      0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058,\r
-+      0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xb6ea, 0x8001, 0xb842,\r
-+      0x6003, 0x0001, 0x080c, 0x84d8, 0x080c, 0x8936, 0x00de, 0x00ce,\r
-+      0x0898, 0x080c, 0xa58f, 0x0804, 0xb69b, 0x080c, 0xa5cb, 0x0804,\r
-+      0xb69b, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xbed9, 0x00de, 0x0118,\r
-+      0x080c, 0x9be7, 0x00f0, 0x6004, 0x8007, 0x6134, 0x918c, 0x00ff,\r
-+      0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,\r
-+      0x603c, 0x600a, 0x2001, 0x1958, 0x2004, 0x601a, 0x602c, 0x2c08,\r
-+      0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, 0x2009, 0x8020, 0x080c,\r
-+      0x84d1, 0x0005, 0x00de, 0x00ce, 0x080c, 0xa58f, 0x080c, 0x3006,\r
-+      0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x303b, 0x6017, 0x0000,\r
-+      0x6023, 0x0007, 0x601b, 0x0398, 0x604b, 0x0000, 0x012e, 0x00ee,\r
-+      0x0005, 0x080c, 0xa022, 0x1904, 0xb741, 0x0005, 0x6000, 0x908a,\r
-+      0x0016, 0x1a0c, 0x0d65, 0x0096, 0x00d6, 0x001b, 0x00de, 0x009e,\r
-+      0x0005, 0xb7a9, 0xb7a9, 0xb7a9, 0xb7a9, 0xb7a9, 0xb7a9, 0xb7a9,\r
-+      0xb7a9, 0xb7a9, 0xb565, 0xb7a9, 0xb56a, 0xb7ab, 0xb56a, 0xb7b8,\r
-+      0xb7a9, 0x080c, 0x0d65, 0x6004, 0x9086, 0x008b, 0x0148, 0x6007,\r
-+      0x008b, 0x6003, 0x000d, 0x2009, 0x8020, 0x080c, 0x84d1, 0x0005,\r
-+      0x080c, 0xbf55, 0x0118, 0x080c, 0xbf68, 0x0010, 0x080c, 0xbf76,\r
-+      0x080c, 0xba36, 0x080c, 0xb847, 0x0570, 0x080c, 0x3006, 0x080c,\r
-+      0xb847, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103, 0xa87b, 0x0006,\r
-+      0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c, 0x6996, 0x2c68,\r
-+      0x080c, 0x9b91, 0x0150, 0x6810, 0x6012, 0x080c, 0xbcdb, 0x00c6,\r
-+      0x2d60, 0x080c, 0x9c21, 0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000,\r
-+      0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x84d8,\r
-+      0x080c, 0x8936, 0x00c8, 0x080c, 0xbf55, 0x0138, 0x6034, 0x9086,\r
-+      0x4000, 0x1118, 0x080c, 0x3006, 0x08d0, 0x6034, 0x908c, 0xff00,\r
-+      0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x080c,\r
-+      0x3006, 0x0868, 0x080c, 0x9c21, 0x0005, 0x6000, 0x908a, 0x0016,\r
-+      0x1a0c, 0x0d65, 0x0002, 0xb823, 0xb823, 0xb825, 0xb825, 0xb825,\r
-+      0xb823, 0xb823, 0x9c21, 0xb823, 0xb823, 0xb823, 0xb823, 0xb823,\r
-+      0xb823, 0xb823, 0xb823, 0x080c, 0x0d65, 0x080c, 0x98c8, 0x080c,\r
-+      0x9a39, 0x080c, 0x98e4, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006,\r
-+      0x080c, 0x6996, 0x009e, 0x0804, 0x9be7, 0x9284, 0x0003, 0x1158,\r
-+      0x9282, 0x1ddc, 0x0240, 0x2001, 0x1819, 0x2004, 0x9202, 0x1218,\r
-+      0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096,\r
-+      0x0006, 0x6014, 0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086,\r
-+      0xf000, 0x0110, 0x080c, 0x10cd, 0x000e, 0x009e, 0x0005, 0x00e6,\r
-+      0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1ddc,\r
-+      0x2071, 0x1800, 0x7350, 0x7070, 0x9302, 0x1640, 0x6020, 0x9206,\r
-+      0x11f8, 0x080c, 0xbf61, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004,\r
-+      0x9086, 0x0004, 0x1148, 0x080c, 0x3006, 0x080c, 0xbf76, 0x00c6,\r
-+      0x080c, 0x9c21, 0x00ce, 0x0060, 0x080c, 0xbc4d, 0x0148, 0x080c,\r
-+      0xba5c, 0x1110, 0x080c, 0xa58f, 0x00c6, 0x080c, 0x9be7, 0x00ce,\r
-+      0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e,\r
-+      0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188,\r
-+      0x1000, 0x210c, 0x81ff, 0x0128, 0x2061, 0x1b02, 0x6112, 0x080c,\r
-+      0x3006, 0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee,\r
-+      0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9b91, 0x01b0,\r
-+      0x665e, 0x2b00, 0x6012, 0x080c, 0x5395, 0x0118, 0x080c, 0xb978,\r
-+      0x0168, 0x080c, 0xbcdb, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c,\r
-+      0x9c85, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,\r
-+      0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0, 0x080c, 0x9c58, 0x0580,\r
-+      0x605f, 0x0000, 0x2b00, 0x6012, 0x080c, 0xbcdb, 0x6023, 0x0003,\r
-+      0x0016, 0x080c, 0x98c8, 0x080c, 0x863b, 0x0076, 0x903e, 0x080c,\r
-+      0x852a, 0x2c08, 0x080c, 0xcfc8, 0x007e, 0x080c, 0x98e4, 0x001e,\r
-+      0xd184, 0x0128, 0x080c, 0x9be7, 0x9085, 0x0001, 0x0070, 0x080c,\r
-+      0x5395, 0x0128, 0xd18c, 0x1170, 0x080c, 0xb978, 0x0148, 0x2009,\r
-+      0x004c, 0x080c, 0x9c85, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,\r
-+      0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010,\r
-+      0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c, 0x9b91,\r
-+      0x2c78, 0x0590, 0x7e5e, 0x2b00, 0x7812, 0x7823, 0x0003, 0x2021,\r
-+      0x0005, 0x080c, 0xb98a, 0x9186, 0x004d, 0x0118, 0x9186, 0x004e,\r
-+      0x0148, 0x2001, 0x1951, 0x200c, 0xd1fc, 0x0168, 0x2f60, 0x080c,\r
-+      0x9be7, 0x00d0, 0x2001, 0x1950, 0x200c, 0xd1fc, 0x0120, 0x2f60,\r
-+      0x080c, 0x9be7, 0x0088, 0x2f60, 0x080c, 0x5395, 0x0138, 0xd18c,\r
-+      0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, 0x001e, 0x0016,\r
-+      0x080c, 0x9c85, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce, 0x00fe,\r
-+      0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0x9b91, 0x2c78, 0x0508,\r
-+      0x7e5e, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, 0x2021, 0x0004,\r
-+      0x0489, 0x009e, 0x2001, 0x194f, 0x200c, 0xd1fc, 0x0120, 0x2f60,\r
-+      0x080c, 0x9be7, 0x0060, 0x2f60, 0x080c, 0x5395, 0x0120, 0xd18c,\r
-+      0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, 0x9c85, 0x9085,\r
-+      0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816, 0x0c98,\r
-+      0x00c6, 0x080c, 0x4878, 0x00ce, 0x1120, 0x080c, 0x9be7, 0x9006,\r
-+      0x0005, 0xa867, 0x0000, 0xa86b, 0x8000, 0x2900, 0x6016, 0x9085,\r
-+      0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x98c8, 0x080c, 0x644f, 0x0158, 0x2001, 0xb991, 0x0006, 0x900e,\r
-+      0x2400, 0x080c, 0x6bb3, 0x080c, 0x6996, 0x000e, 0x0807, 0x2418,\r
-+      0x080c, 0x883a, 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001,\r
-+      0x2608, 0x080c, 0x8655, 0x008e, 0x080c, 0x852a, 0x2f08, 0x2648,\r
-+      0x080c, 0xcfc8, 0xb93c, 0x81ff, 0x090c, 0x872c, 0x080c, 0x98e4,\r
-+      0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x9b91, 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbcdb,\r
-+      0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f, 0x080c, 0x9c85,\r
-+      0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x9c58, 0x01b8, 0x660a, 0x2b08,\r
-+      0x6112, 0x080c, 0xbcdb, 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6,\r
-+      0x2c78, 0x080c, 0x164f, 0x00fe, 0x2009, 0x0021, 0x080c, 0x9c85,\r
-+      0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009,\r
-+      0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000, 0x080c, 0x9b91,\r
-+      0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0001,\r
-+      0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0x9c85, 0x9085, 0x0001,\r
-+      0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x9c58, 0x0188, 0x2b08, 0x6112, 0x080c,\r
-+      0xbcdb, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0000, 0x080c,\r
-+      0x9c85, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,\r
-+      0x2009, 0x0044, 0x0830, 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6,\r
-+      0x6210, 0x2258, 0xba3c, 0x82ff, 0x0118, 0x8211, 0xba3e, 0x1140,\r
-+      0xb8c0, 0x9005, 0x0128, 0xb888, 0x9005, 0x1110, 0xb88b, 0x0001,\r
-+      0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0002,\r
-+      0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004, 0x0110, 0x9085,\r
-+      0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0096, 0x6020, 0x9086,\r
-+      0x0004, 0x0190, 0x6014, 0x904d, 0x080c, 0xb847, 0x0168, 0xa864,\r
-+      0x9086, 0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128, 0xa868,\r
-+      0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x000e,\r
-+      0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9c58, 0x0198,\r
-+      0x2b08, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0001, 0x2900, 0x6016,\r
-+      0x080c, 0x3006, 0x2009, 0x0028, 0x080c, 0x9c85, 0x9085, 0x0001,\r
-+      0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8,\r
-+      0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c,\r
-+      0xa818, 0x00be, 0x080c, 0xaa57, 0x6003, 0x0001, 0x6007, 0x0029,\r
-+      0x080c, 0x84d8, 0x080c, 0x8936, 0x0078, 0x6014, 0x0096, 0x2048,\r
-+      0xa868, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xbe9a,\r
-+      0x080c, 0xa58f, 0x080c, 0x9be7, 0x0005, 0x0096, 0x6014, 0x904d,\r
-+      0x090c, 0x0d65, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005,\r
-+      0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x6996, 0x012e, 0x009e, 0x080c, 0x9be7, 0x0c30, 0x0096, 0x9186,\r
-+      0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x61c1, 0x00e8, 0x9186,\r
-+      0x0015, 0x1510, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x11e0,\r
-+      0x6010, 0x00b6, 0x2058, 0x080c, 0x630b, 0x00be, 0x080c, 0xab28,\r
-+      0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160,\r
-+      0x2001, 0x0006, 0x080c, 0x61c1, 0x6014, 0x2048, 0xa868, 0xd0fc,\r
-+      0x0170, 0x080c, 0x9ff6, 0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc,\r
-+      0x0528, 0x080c, 0xa58f, 0x080c, 0x9be7, 0x009e, 0x0005, 0x6014,\r
-+      0x6310, 0x2358, 0x904d, 0x090c, 0x0d65, 0xa87b, 0x0000, 0xa883,\r
-+      0x0000, 0xa897, 0x4000, 0x900e, 0x080c, 0x655f, 0x1108, 0xc185,\r
-+      0xb800, 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x6996, 0x012e, 0x080c, 0x9be7, 0x08f8, 0x6014, 0x904d,\r
-+      0x090c, 0x0d65, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005,\r
-+      0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x6996, 0x012e, 0x080c, 0x9be7, 0x0840, 0xa878, 0x9086, 0x0005,\r
-+      0x1108, 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005, 0x604b,\r
-+      0x0000, 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x2009,\r
-+      0x8023, 0x080c, 0x84d1, 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058,\r
-+      0xb800, 0x00be, 0xd0bc, 0x0130, 0x0066, 0x6020, 0x9084, 0x000f,\r
-+      0x001b, 0x006e, 0x00ce, 0x0005, 0xb565, 0xbb7e, 0xbb7e, 0xbb81,\r
-+      0xd2c2, 0xd2dd, 0xd2e0, 0xb565, 0xb565, 0xb565, 0xb565, 0xb565,\r
-+      0xb565, 0xb565, 0xb565, 0xb565, 0x080c, 0x0d65, 0xa001, 0xa001,\r
-+      0x0005, 0x0096, 0x6014, 0x904d, 0x0118, 0xa87c, 0xd0e4, 0x1110,\r
-+      0x009e, 0x0010, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800,\r
-+      0x00be, 0xd0bc, 0x0550, 0x2001, 0x1833, 0x2004, 0x9005, 0x1540,\r
-+      0x00f6, 0x2c78, 0x080c, 0x9b91, 0x0508, 0x7810, 0x6012, 0x080c,\r
-+      0xbcdb, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808, 0x603a, 0x2f00,\r
-+      0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a, 0x602e, 0x6023,\r
-+      0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x795c, 0x615e, 0x2009,\r
-+      0x8020, 0x080c, 0x84d1, 0x2f60, 0x00fe, 0x0005, 0x2f60, 0x00fe,\r
-+      0x2001, 0x1959, 0x2004, 0x604a, 0x0005, 0x0016, 0x0096, 0x6814,\r
-+      0x2048, 0x681c, 0xd0fc, 0xc0fc, 0x681e, 0xa87c, 0x1108, 0xd0e4,\r
-+      0x0180, 0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000, 0xa88f,\r
-+      0x0000, 0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c,\r
-+      0x0fd4, 0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803, 0x0002,\r
-+      0x9086, 0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c,\r
-+      0xc085, 0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00,\r
-+      0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c,\r
-+      0x9103, 0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a,\r
-+      0x6032, 0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112, 0x695c,\r
-+      0x615e, 0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001, 0x2009,\r
-+      0x8020, 0x080c, 0x84d1, 0x009e, 0x001e, 0x0005, 0x6024, 0xd0d4,\r
-+      0x0510, 0xd0f4, 0x11f8, 0x6038, 0x940a, 0x603c, 0x9303, 0x0230,\r
-+      0x9105, 0x0120, 0x6024, 0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e,\r
-+      0xac3e, 0xab42, 0x0046, 0x0036, 0x2400, 0xacac, 0x9402, 0xa836,\r
-+      0x2300, 0xabb0, 0x9303, 0xa83a, 0x003e, 0x004e, 0x6024, 0xc0d4,\r
-+      0x0000, 0x6026, 0x0005, 0xd0f4, 0x1138, 0xa83c, 0x603a, 0xa840,\r
-+      0x603e, 0x6024, 0xc0f5, 0x6026, 0x0005, 0x0006, 0x0016, 0x6004,\r
-+      0x908e, 0x0034, 0x01b8, 0x908e, 0x0035, 0x01a0, 0x908e, 0x0036,\r
-+      0x0188, 0x908e, 0x0037, 0x0170, 0x908e, 0x0038, 0x0158, 0x908e,\r
-+      0x0039, 0x0140, 0x908e, 0x003a, 0x0128, 0x908e, 0x003b, 0x0110,\r
-+      0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026,\r
-+      0x0036, 0x00e6, 0x2001, 0x1953, 0x200c, 0x8000, 0x2014, 0x2001,\r
-+      0x0032, 0x080c, 0x8419, 0x2001, 0x1957, 0x82ff, 0x1110, 0x2011,\r
-+      0x0014, 0x2202, 0x2001, 0x1955, 0x200c, 0x8000, 0x2014, 0x2071,\r
-+      0x193d, 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x8419, 0x2001,\r
-+      0x1958, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1959,\r
-+      0x9288, 0x000a, 0x2102, 0x2001, 0x0017, 0x080c, 0x98b9, 0x2001,\r
-+      0x1a59, 0x2102, 0x2001, 0x0032, 0x080c, 0x159e, 0x080c, 0x6648,\r
-+      0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016,\r
-+      0x00e6, 0x2001, 0x1957, 0x2003, 0x0028, 0x2001, 0x1958, 0x2003,\r
-+      0x0014, 0x2071, 0x193d, 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001,\r
-+      0x1959, 0x2009, 0x001e, 0x2102, 0x2001, 0x0017, 0x080c, 0x98b9,\r
-+      0x2001, 0x1a59, 0x2102, 0x2001, 0x0032, 0x080c, 0x159e, 0x00ee,\r
-+      0x001e, 0x000e, 0x0005, 0x0096, 0x6060, 0x904d, 0x0110, 0x080c,\r
-+      0x1054, 0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x9b91, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001,\r
-+      0x2900, 0x6016, 0x2009, 0x0033, 0x080c, 0x9c85, 0x9085, 0x0001,\r
-+      0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6,\r
-+      0x2071, 0x1800, 0x9186, 0x0015, 0x1500, 0x708c, 0x9086, 0x0018,\r
-+      0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c,\r
-+      0x89f5, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c, 0xaa54,\r
-+      0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e,\r
-+      0x080c, 0x305b, 0x080c, 0x9ff6, 0x0020, 0x080c, 0xa58f, 0x080c,\r
-+      0x9be7, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54, 0x9206,\r
-+      0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9b91,\r
-+      0x0188, 0x2b08, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0001, 0x2900,\r
-+      0x6016, 0x2009, 0x004d, 0x080c, 0x9c85, 0x9085, 0x0001, 0x012e,\r
-+      0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,\r
-+      0x0016, 0x080c, 0x9b91, 0x0180, 0x2b08, 0x6112, 0x080c, 0xbcdb,\r
-+      0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0x9c85, 0x9085,\r
-+      0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016,\r
-+      0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6,\r
-+      0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014, 0x2048,\r
-+      0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, 0x1971,\r
-+      0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006,\r
-+      0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b,\r
-+      0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x080c, 0xc545, 0x001e,\r
-+      0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, 0xa867,\r
-+      0x0103, 0x0010, 0x080c, 0xa58f, 0x080c, 0x9be7, 0x00fe, 0x00ee,\r
-+      0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005,\r
-+      0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8,\r
-+      0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c,\r
-+      0x89f5, 0x01a8, 0x7078, 0xaa74, 0x9206, 0x1130, 0x707c, 0xaa78,\r
-+      0x9206, 0x1110, 0x080c, 0x3006, 0x080c, 0x9ff6, 0x0020, 0x080c,\r
-+      0xa58f, 0x080c, 0x9be7, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c,\r
-+      0xaa78, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071,\r
-+      0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004, 0x1530,\r
-+      0x6014, 0x2048, 0x2c78, 0x080c, 0x89f5, 0x05f0, 0x7078, 0xaacc,\r
-+      0x9206, 0x1180, 0x707c, 0xaad0, 0x9206, 0x1160, 0x080c, 0x3006,\r
-+      0x0016, 0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5345,\r
-+      0x001e, 0x0010, 0x080c, 0x512e, 0x080c, 0xb847, 0x0508, 0xa87b,\r
-+      0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c, 0xb847,\r
-+      0x01b8, 0x6014, 0x2048, 0x080c, 0x512e, 0x1d70, 0xa87b, 0x0030,\r
-+      0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126, 0x2091,\r
-+      0x8000, 0xa867, 0x0139, 0x080c, 0x6996, 0x012e, 0x080c, 0x9be7,\r
-+      0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad0, 0x9206, 0x0930,\r
-+      0x0888, 0x0016, 0x0026, 0xa87c, 0xd0ac, 0x0178, 0xa938, 0xaa34,\r
-+      0x2100, 0x9205, 0x0150, 0xa890, 0x9106, 0x1118, 0xa88c, 0x9206,\r
-+      0x0120, 0xa992, 0xaa8e, 0x9085, 0x0001, 0x002e, 0x001e, 0x0005,\r
-+      0x00b6, 0x00d6, 0x0036, 0x080c, 0xb847, 0x0904, 0xbe96, 0x0096,\r
-+      0x6314, 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580, 0x6310,\r
-+      0x00c6, 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c,\r
-+      0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96,\r
-+      0xa99a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031,\r
-+      0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c,\r
-+      0x0f9f, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8b8,\r
-+      0x9080, 0x000a, 0x2098, 0x080c, 0x0f9f, 0x00ce, 0x0090, 0xaa96,\r
-+      0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016, 0x0110,\r
-+      0xa89b, 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff,\r
-+      0xa89e, 0x080c, 0x698a, 0x6017, 0x0000, 0x009e, 0x003e, 0x00de,\r
-+      0x00be, 0x0005, 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6,\r
-+      0x6214, 0x2248, 0x6210, 0x2258, 0x2079, 0x0260, 0x9096, 0x0000,\r
-+      0x11a0, 0xb814, 0x9084, 0x00ff, 0x900e, 0x080c, 0x2424, 0x2118,\r
-+      0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c,\r
-+      0x2011, 0x8018, 0x080c, 0x48d8, 0x00a8, 0x9096, 0x0001, 0x1148,\r
-+      0x89ff, 0x0180, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa,\r
-+      0x0048, 0x9096, 0x0002, 0x1130, 0xa89b, 0x000d, 0x7838, 0xa8a6,\r
-+      0x783c, 0xa8aa, 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e, 0x002e,\r
-+      0x0005, 0x00c6, 0x0026, 0x0016, 0x9186, 0x0035, 0x0110, 0x6a38,\r
-+      0x0008, 0x6a2c, 0x080c, 0xb835, 0x01f0, 0x2260, 0x6120, 0x9186,\r
-+      0x0003, 0x0118, 0x9186, 0x0006, 0x1190, 0x6838, 0x9206, 0x0140,\r
-+      0x683c, 0x9206, 0x1160, 0x6108, 0x6838, 0x9106, 0x1140, 0x0020,\r
-+      0x6008, 0x693c, 0x9106, 0x1118, 0x6010, 0x6910, 0x9106, 0x001e,\r
-+      0x002e, 0x00ce, 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa974, 0xd1cc,\r
-+      0x0188, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1160, 0xa9a8, 0x918c,\r
-+      0x0f00, 0x810f, 0x918e, 0x0001, 0x1128, 0xa834, 0xa938, 0x9115,\r
-+      0x190c, 0xaec2, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036,\r
-+      0x901e, 0x0499, 0x01e0, 0x080c, 0xb847, 0x01c8, 0x080c, 0xba36,\r
-+      0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa87c,\r
-+      0x080c, 0xba5c, 0x1118, 0x080c, 0xa58f, 0x0040, 0xa867, 0x0103,\r
-+      0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6996, 0x009e, 0x003e,\r
-+      0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882,\r
-+      0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005,\r
-+      0x080c, 0xbb4b, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810, 0x2004,\r
-+      0xd0ec, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e,\r
-+      0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005,\r
-+      0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021,\r
-+      0x0007, 0x080c, 0x4a75, 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81,\r
-+      0x0005, 0x2001, 0x1957, 0x2004, 0x601a, 0x0005, 0x2001, 0x1959,\r
-+      0x2004, 0x604a, 0x0005, 0x080c, 0x9be7, 0x0804, 0x8936, 0x611c,\r
-+      0xd1fc, 0xa97c, 0x1108, 0xd1e4, 0x0005, 0x601c, 0xd0fc, 0xa87c,\r
-+      0x1108, 0xd0e4, 0x0005, 0x601c, 0xd0fc, 0xc0fc, 0x601e, 0xa87c,\r
-+      0x1108, 0xd0e4, 0x0005, 0x6044, 0xd0fc, 0x0160, 0xd0dc, 0x1128,\r
-+      0x908c, 0x000f, 0x9186, 0x0005, 0x1118, 0x6003, 0x0003, 0x0010,\r
-+      0x6003, 0x0001, 0x0005, 0x00b6, 0x0066, 0x6000, 0x90b2, 0x0016,\r
-+      0x1a0c, 0x0d65, 0x001b, 0x006e, 0x00be, 0x0005, 0xbfc6, 0xc6a0,\r
-+      0xc7ef, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbffd, 0xc871,\r
-+      0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0x080c, 0x0d65,\r
-+      0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d65, 0x0013, 0x006e,\r
-+      0x0005, 0xbfe1, 0xcd88, 0xbfe1, 0xbfe1, 0xbfe1, 0xbfe1, 0xbfe1,\r
-+      0xbfe1, 0xcd37, 0xcdda, 0xbfe1, 0xd3fd, 0xd431, 0xd3fd, 0xd431,\r
-+      0xbfe1, 0x080c, 0x0d65, 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d65,\r
-+      0x6000, 0x000a, 0x0005, 0xbffb, 0xca4d, 0xcb16, 0xcb38, 0xcbb3,\r
-+      0xbffb, 0xccad, 0xcc3b, 0xc87b, 0xcd0f, 0xcd24, 0xbffb, 0xbffb,\r
-+      0xbffb, 0xbffb, 0xbffb, 0x080c, 0x0d65, 0x91b2, 0x0053, 0x1a0c,\r
-+      0x0d65, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xc443, 0x0002, 0xc047,\r
-+      0xc234, 0xc047, 0xc047, 0xc047, 0xc23d, 0xc047, 0xc047, 0xc047,\r
-+      0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047,\r
-+      0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc049, 0xc0b0,\r
-+      0xc0bf, 0xc123, 0xc14e, 0xc1c6, 0xc21f, 0xc047, 0xc047, 0xc240,\r
-+      0xc047, 0xc047, 0xc255, 0xc262, 0xc047, 0xc047, 0xc047, 0xc047,\r
-+      0xc047, 0xc2e5, 0xc047, 0xc047, 0xc2f9, 0xc047, 0xc047, 0xc2b4,\r
-+      0xc047, 0xc047, 0xc047, 0xc311, 0xc047, 0xc047, 0xc047, 0xc38e,\r
-+      0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc40b, 0x080c,\r
-+      0x0d65, 0x080c, 0x6625, 0x1150, 0x2001, 0x1836, 0x2004, 0xd0cc,\r
-+      0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007, 0x0009,\r
-+      0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xc22d, 0x080c, 0x660e,\r
-+      0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258, 0xbaa0,\r
-+      0x0026, 0x2019, 0x0029, 0x080c, 0x98c8, 0x080c, 0x863b, 0x0076,\r
-+      0x903e, 0x080c, 0x852a, 0x2c08, 0x080c, 0xcfc8, 0x007e, 0x001e,\r
-+      0x080c, 0x98e4, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610,\r
-+      0x2658, 0x080c, 0x627f, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006,\r
-+      0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be,\r
-+      0x2c08, 0x080c, 0xd5a9, 0x002e, 0x001e, 0x1178, 0x080c, 0xcef7,\r
-+      0x1904, 0xc11b, 0x080c, 0xce93, 0x1120, 0x6007, 0x0008, 0x0804,\r
-+      0xc22d, 0x6007, 0x0009, 0x0804, 0xc22d, 0x080c, 0xd0fe, 0x0128,\r
-+      0x080c, 0xcef7, 0x0d78, 0x0804, 0xc11b, 0x6017, 0x1900, 0x0c88,\r
-+      0x080c, 0x3150, 0x1904, 0xc440, 0x6106, 0x080c, 0xce44, 0x6007,\r
-+      0x0006, 0x0804, 0xc22d, 0x6007, 0x0007, 0x0804, 0xc22d, 0x080c,\r
-+      0xd46d, 0x1904, 0xc440, 0x080c, 0x3150, 0x1904, 0xc440, 0x00d6,\r
-+      0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220,\r
-+      0x2001, 0x0001, 0x080c, 0x61ad, 0x96b4, 0xff00, 0x8637, 0x9686,\r
-+      0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff,\r
-+      0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005,\r
-+      0x0110, 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084,\r
-+      0x0003, 0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030, 0x9084,\r
-+      0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0,\r
-+      0x00ee, 0x080c, 0xcf5e, 0x1190, 0x9686, 0x0006, 0x1140, 0x0026,\r
-+      0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x305b, 0x002e, 0x080c,\r
-+      0x630b, 0x6007, 0x000a, 0x00de, 0x0804, 0xc22d, 0x6007, 0x000b,\r
-+      0x00de, 0x0804, 0xc22d, 0x080c, 0x3006, 0x080c, 0xbf76, 0x6007,\r
-+      0x0001, 0x0804, 0xc22d, 0x080c, 0xd46d, 0x1904, 0xc440, 0x080c,\r
-+      0x3150, 0x1904, 0xc440, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003,\r
-+      0x1948, 0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003, 0x1910,\r
-+      0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210,\r
-+      0x2258, 0xbaa0, 0x900e, 0x080c, 0x305b, 0x002e, 0x6007, 0x000c,\r
-+      0x2001, 0x0001, 0x080c, 0xd589, 0x0804, 0xc22d, 0x080c, 0x6625,\r
-+      0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008,\r
-+      0x1110, 0x0804, 0xc056, 0x080c, 0x660e, 0x6610, 0x2658, 0xbe04,\r
-+      0x9684, 0x00ff, 0x9082, 0x0006, 0x06c0, 0x1138, 0x0026, 0x2001,\r
-+      0x0006, 0x080c, 0x61ed, 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637,\r
-+      0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xc11b, 0x080c,\r
-+      0xcf6b, 0x1120, 0x6007, 0x000e, 0x0804, 0xc22d, 0x0046, 0x6410,\r
-+      0x2458, 0xbca0, 0x0046, 0x080c, 0x3006, 0x080c, 0xbf76, 0x004e,\r
-+      0x0016, 0x9006, 0x2009, 0x1854, 0x210c, 0x0048, 0x2009, 0x0029,\r
-+      0x080c, 0xd273, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e,\r
-+      0x004e, 0x6007, 0x0001, 0x0804, 0xc22d, 0x2001, 0x0001, 0x080c,\r
-+      0x61ad, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,\r
-+      0x1805, 0x2011, 0x0270, 0x080c, 0xabcb, 0x003e, 0x002e, 0x001e,\r
-+      0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004,\r
-+      0x0a04, 0xc11b, 0x9682, 0x0007, 0x0a04, 0xc177, 0x0804, 0xc11b,\r
-+      0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xc22d, 0x080c, 0x6625,\r
-+      0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008,\r
-+      0x1110, 0x0804, 0xc056, 0x080c, 0x660e, 0x6610, 0x2658, 0xbe04,\r
-+      0x9684, 0x00ff, 0x9082, 0x0006, 0x0690, 0x0150, 0x96b4, 0xff00,\r
-+      0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xc11b,\r
-+      0x080c, 0xcf99, 0x1130, 0x080c, 0xce93, 0x1118, 0x6007, 0x0010,\r
-+      0x04e0, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x3006,\r
-+      0x080c, 0xbf76, 0x004e, 0x0016, 0x9006, 0x2009, 0x1854, 0x210c,\r
-+      0x0048, 0x2009, 0x0029, 0x080c, 0xd273, 0x6010, 0x2058, 0xb800,\r
-+      0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c,\r
-+      0xd0fe, 0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0980,\r
-+      0x0804, 0xc11b, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c,\r
-+      0x3150, 0x1904, 0xc440, 0x080c, 0xd46d, 0x1904, 0xc440, 0x080c,\r
-+      0xc5e0, 0x1904, 0xc11b, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c,\r
-+      0x84d8, 0x080c, 0x8936, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001,\r
-+      0x080c, 0x84d8, 0x080c, 0x8936, 0x0cb0, 0x6007, 0x0005, 0x0c68,\r
-+      0x080c, 0xd46d, 0x1904, 0xc440, 0x080c, 0x3150, 0x1904, 0xc440,\r
-+      0x080c, 0xc5e0, 0x1904, 0xc11b, 0x6007, 0x0020, 0x6003, 0x0001,\r
-+      0x080c, 0x84d8, 0x080c, 0x8936, 0x0005, 0x080c, 0x3150, 0x1904,\r
-+      0xc440, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x84d8, 0x080c,\r
-+      0x8936, 0x0005, 0x080c, 0xd46d, 0x1904, 0xc440, 0x080c, 0x3150,\r
-+      0x1904, 0xc440, 0x080c, 0xc5e0, 0x1904, 0xc11b, 0x0016, 0x0026,\r
-+      0x00e6, 0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08,\r
-+      0x080c, 0xb835, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188,\r
-+      0x6010, 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240,\r
-+      0x2c08, 0x9006, 0x080c, 0xd245, 0x1180, 0x7244, 0x9286, 0xffff,\r
-+      0x01b0, 0x2160, 0x6007, 0x0026, 0x6017, 0x1700, 0x7214, 0x9296,\r
-+      0xffff, 0x1180, 0x6007, 0x0025, 0x0068, 0x6020, 0x9086, 0x0007,\r
-+      0x1d80, 0x6004, 0x9086, 0x0024, 0x1110, 0x080c, 0x9be7, 0x2160,\r
-+      0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x84d8, 0x080c, 0x8936,\r
-+      0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x61ad,\r
-+      0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805,\r
-+      0x2011, 0x0276, 0x080c, 0xabcb, 0x003e, 0x002e, 0x001e, 0x015e,\r
-+      0x0120, 0x6007, 0x0031, 0x0804, 0xc22d, 0x080c, 0xa830, 0x080c,\r
-+      0x70b7, 0x1190, 0x0006, 0x0026, 0x0036, 0x080c, 0x70d1, 0x1138,\r
-+      0x080c, 0x73b7, 0x080c, 0x5cdc, 0x080c, 0x6fe8, 0x0010, 0x080c,\r
-+      0x708b, 0x003e, 0x002e, 0x000e, 0x0005, 0x080c, 0x3150, 0x1904,\r
-+      0xc440, 0x080c, 0xc5e0, 0x1904, 0xc11b, 0x6106, 0x080c, 0xc5fc,\r
-+      0x1120, 0x6007, 0x002b, 0x0804, 0xc22d, 0x6007, 0x002c, 0x0804,\r
-+      0xc22d, 0x080c, 0xd46d, 0x1904, 0xc440, 0x080c, 0x3150, 0x1904,\r
-+      0xc440, 0x080c, 0xc5e0, 0x1904, 0xc11b, 0x6106, 0x080c, 0xc601,\r
-+      0x1120, 0x6007, 0x002e, 0x0804, 0xc22d, 0x6007, 0x002f, 0x0804,\r
-+      0xc22d, 0x080c, 0x3150, 0x1904, 0xc440, 0x00e6, 0x00d6, 0x00c6,\r
-+      0x6010, 0x2058, 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158,\r
-+      0x9184, 0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de,\r
-+      0x00ee, 0x0804, 0xc234, 0x080c, 0x5391, 0xd0e4, 0x0904, 0xc38b,\r
-+      0x2071, 0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c,\r
-+      0x080c, 0x6663, 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118,\r
-+      0xb814, 0x9206, 0x0510, 0x080c, 0x665f, 0x15b8, 0x2069, 0x1800,\r
-+      0x687c, 0x9206, 0x1590, 0x6878, 0x9106, 0x1578, 0x7210, 0x080c,\r
-+      0xb835, 0x0590, 0x080c, 0xc4cb, 0x0578, 0x080c, 0xd2ef, 0x0560,\r
-+      0x622e, 0x6007, 0x0036, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c,\r
-+      0x84d1, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff,\r
-+      0x0150, 0x080c, 0xb835, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110,\r
-+      0x9106, 0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c,\r
-+      0xd245, 0x2c10, 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f,\r
-+      0x0009, 0x6017, 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003,\r
-+      0x6017, 0x1700, 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x3150,\r
-+      0x1904, 0xc440, 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007,\r
-+      0x9086, 0x0006, 0x1904, 0xc234, 0x00e6, 0x00d6, 0x00c6, 0x080c,\r
-+      0x5391, 0xd0e4, 0x0904, 0xc403, 0x2069, 0x1800, 0x2071, 0x026c,\r
-+      0x7008, 0x603a, 0x720c, 0x623e, 0x9286, 0xffff, 0x1150, 0x7208,\r
-+      0x00c6, 0x2c08, 0x9085, 0x0001, 0x080c, 0xd245, 0x2c10, 0x00ce,\r
-+      0x05e8, 0x080c, 0xb835, 0x05d0, 0x7108, 0x9280, 0x0002, 0x2004,\r
-+      0x9106, 0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c, 0xb445, 0x002e,\r
-+      0x00ce, 0x7118, 0x918c, 0xff00, 0x810f, 0x9186, 0x0001, 0x0178,\r
-+      0x9186, 0x0005, 0x0118, 0x9186, 0x0007, 0x1198, 0x9280, 0x0005,\r
-+      0x2004, 0x9005, 0x0170, 0x080c, 0xc4cb, 0x0904, 0xc384, 0x0056,\r
-+      0x7510, 0x7614, 0x080c, 0xd308, 0x005e, 0x00ce, 0x00de, 0x00ee,\r
-+      0x0005, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003,\r
-+      0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x0c78, 0x6007, 0x003b,\r
-+      0x602f, 0x0003, 0x6017, 0x0300, 0x6003, 0x0001, 0x2009, 0x8020,\r
-+      0x080c, 0x84d1, 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b, 0x6017,\r
-+      0x0000, 0x0804, 0xc35b, 0x00e6, 0x0026, 0x080c, 0x6625, 0x0550,\r
-+      0x080c, 0x660e, 0x080c, 0xd4df, 0x1518, 0x2071, 0x1800, 0x70d8,\r
-+      0x9085, 0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72ac, 0x9284,\r
-+      0x00ff, 0x707a, 0x78e6, 0x9284, 0xff00, 0x727c, 0x9205, 0x707e,\r
-+      0x78ea, 0x00fe, 0x70e3, 0x0000, 0x080c, 0x6663, 0x0120, 0x2011,\r
-+      0x19da, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2ddb, 0x0010,\r
-+      0x080c, 0xd511, 0x002e, 0x00ee, 0x080c, 0x9be7, 0x0804, 0xc233,\r
-+      0x080c, 0x9be7, 0x0005, 0x2600, 0x0002, 0xc457, 0xc457, 0xc457,\r
-+      0xc457, 0xc457, 0xc459, 0xc457, 0xc457, 0xc457, 0xc457, 0xc476,\r
-+      0xc457, 0xc457, 0xc457, 0xc488, 0xc495, 0xc4c6, 0xc457, 0x080c,\r
-+      0x0d65, 0x080c, 0xd46d, 0x1d20, 0x080c, 0x3150, 0x1d08, 0x080c,\r
-+      0xc5e0, 0x1148, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001,\r
-+      0x080c, 0x84d8, 0x0005, 0x080c, 0x3006, 0x080c, 0xbf76, 0x6007,\r
-+      0x0001, 0x6003, 0x0001, 0x080c, 0x84d8, 0x0005, 0x080c, 0xd46d,\r
-+      0x1938, 0x080c, 0x3150, 0x1920, 0x080c, 0xc5e0, 0x1d60, 0x703c,\r
-+      0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x84d8, 0x0005,\r
-+      0x080c, 0xc4e8, 0x0904, 0xc440, 0x6007, 0x004e, 0x6003, 0x0001,\r
-+      0x080c, 0x84d8, 0x080c, 0x8936, 0x0005, 0x6007, 0x004f, 0x6017,\r
-+      0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001,\r
-+      0x1160, 0x7140, 0x2001, 0x198e, 0x2004, 0x9106, 0x11b0, 0x7144,\r
-+      0x2001, 0x198f, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002, 0x1168,\r
-+      0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,\r
-+      0x000a, 0x080c, 0xabdf, 0x009e, 0x0110, 0x6017, 0x0001, 0x6003,\r
-+      0x0001, 0x080c, 0x84d8, 0x080c, 0x8936, 0x0005, 0x6007, 0x0050,\r
-+      0x703c, 0x6016, 0x0ca0, 0x0016, 0x00e6, 0x2071, 0x0260, 0x00b6,\r
-+      0x00c6, 0x2260, 0x6010, 0x2058, 0xb8c4, 0xd084, 0x0150, 0x7128,\r
-+      0x6050, 0x9106, 0x1120, 0x712c, 0x604c, 0x9106, 0x0110, 0x9006,\r
-+      0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee, 0x001e, 0x0005,\r
-+      0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091,\r
-+      0x8000, 0x2071, 0x1800, 0x708c, 0x908a, 0x00f9, 0x16e8, 0x20e1,\r
-+      0x0000, 0x2001, 0x1971, 0x2003, 0x0000, 0x080c, 0x103b, 0x05a0,\r
-+      0x2900, 0x6016, 0x708c, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0,\r
-+      0xa833, 0x001e, 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080,\r
-+      0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x0471, 0x001e,\r
-+      0x2940, 0x080c, 0x103b, 0x01c0, 0x2900, 0xa006, 0x2100, 0x81ff,\r
-+      0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080,\r
-+      0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x00b1, 0x001e,\r
-+      0x0000, 0x9085, 0x0001, 0x0048, 0x2071, 0x1800, 0x708f, 0x0000,\r
-+      0x6014, 0x2048, 0x080c, 0x0fd4, 0x9006, 0x012e, 0x01de, 0x01ce,\r
-+      0x00ee, 0x008e, 0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026,\r
-+      0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8, 0x080c, 0x202b, 0x2099,\r
-+      0x026c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003,\r
-+      0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x202b, 0x2099,\r
-+      0x0260, 0x0ca8, 0x080c, 0x202b, 0x2061, 0x1971, 0x6004, 0x2098,\r
-+      0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8,\r
-+      0x4003, 0x22a8, 0x8108, 0x080c, 0x202b, 0x2099, 0x0260, 0x0ca8,\r
-+      0x2061, 0x1971, 0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006,\r
-+      0x0020, 0x2001, 0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021,\r
-+      0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e,\r
-+      0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8,\r
-+      0x080c, 0x2043, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312,\r
-+      0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8,\r
-+      0x22a8, 0x8108, 0x080c, 0x2043, 0x20a1, 0x0240, 0x0c98, 0x080c,\r
-+      0x2043, 0x2061, 0x1974, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312,\r
-+      0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138,\r
-+      0x22a8, 0x8108, 0x080c, 0x2043, 0x20a1, 0x0240, 0x0c98, 0x2061,\r
-+      0x1974, 0x2019, 0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020,\r
-+      0x2001, 0x0240, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296,\r
-+      0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,\r
-+      0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637,\r
-+      0x9686, 0x0006, 0x0170, 0x9686, 0x0004, 0x0158, 0xbe04, 0x96b4,\r
-+      0x00ff, 0x9686, 0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085,\r
-+      0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xc676, 0x00de,\r
-+      0x0005, 0x00d6, 0x080c, 0xc683, 0x1520, 0x680c, 0x908c, 0xff00,\r
-+      0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4,\r
-+      0x0130, 0x9006, 0x080c, 0xd589, 0x2009, 0x0001, 0x0078, 0xd1ec,\r
-+      0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x2424, 0x1148,\r
-+      0x2001, 0x0001, 0x080c, 0xd589, 0x2110, 0x900e, 0x080c, 0x305b,\r
-+      0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6,\r
-+      0x00c6, 0x080c, 0x9c58, 0x0598, 0x0016, 0x0026, 0x00c6, 0x2011,\r
-+      0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x1568, 0x080c,\r
-+      0x6210, 0x1550, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00,\r
-+      0x6012, 0x080c, 0xd46d, 0x11c8, 0x080c, 0x3150, 0x11b0, 0x080c,\r
-+      0xc5e0, 0x0500, 0x2001, 0x0007, 0x080c, 0x61c1, 0x2001, 0x0007,\r
-+      0x080c, 0x61ed, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,\r
-+      0x6003, 0x0001, 0x080c, 0x84d8, 0x0010, 0x080c, 0x9be7, 0x9085,\r
-+      0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0x9be7, 0x00ce, 0x002e,\r
-+      0x001e, 0x0ca8, 0x080c, 0x9be7, 0x9006, 0x0c98, 0x2069, 0x026d,\r
-+      0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, 0x0001,\r
-+      0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, 0x6808,\r
-+      0x9084, 0xff00, 0x9086, 0x0800, 0x1190, 0x6904, 0x9186, 0x0018,\r
-+      0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff,\r
-+      0x910d, 0x6162, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005,\r
-+      0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d65, 0x91b6, 0x0013, 0x1130,\r
-+      0x2008, 0x91b2, 0x0040, 0x1a04, 0xc7c3, 0x0092, 0x91b6, 0x0027,\r
-+      0x0120, 0x91b6, 0x0014, 0x190c, 0x0d65, 0x2001, 0x0007, 0x080c,\r
-+      0x61ed, 0x080c, 0x8874, 0x080c, 0x9c21, 0x080c, 0x8936, 0x0005,\r
-+      0xc700, 0xc702, 0xc700, 0xc700, 0xc700, 0xc702, 0xc70f, 0xc7c0,\r
-+      0xc75f, 0xc7c0, 0xc771, 0xc7c0, 0xc70f, 0xc7c0, 0xc7b8, 0xc7c0,\r
-+      0xc7b8, 0xc7c0, 0xc7c0, 0xc700, 0xc700, 0xc700, 0xc700, 0xc700,\r
-+      0xc700, 0xc700, 0xc700, 0xc700, 0xc700, 0xc700, 0xc702, 0xc700,\r
-+      0xc7c0, 0xc700, 0xc700, 0xc7c0, 0xc700, 0xc7bd, 0xc7c0, 0xc700,\r
-+      0xc700, 0xc700, 0xc700, 0xc7c0, 0xc7c0, 0xc700, 0xc7c0, 0xc7c0,\r
-+      0xc700, 0xc70a, 0xc700, 0xc700, 0xc700, 0xc700, 0xc7bc, 0xc7c0,\r
-+      0xc700, 0xc700, 0xc7c0, 0xc7c0, 0xc700, 0xc700, 0xc700, 0xc700,\r
-+      0x080c, 0x0d65, 0x080c, 0xbf79, 0x6003, 0x0002, 0x080c, 0x8936,\r
-+      0x0804, 0xc7c2, 0x9006, 0x080c, 0x61ad, 0x0804, 0xc7c0, 0x080c,\r
-+      0x665f, 0x1904, 0xc7c0, 0x9006, 0x080c, 0x61ad, 0x6010, 0x2058,\r
-+      0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0x1800, 0x78a4,\r
-+      0x8000, 0x78a6, 0x00fe, 0x0428, 0x6010, 0x2058, 0xb884, 0x9005,\r
-+      0x1178, 0x080c, 0xbf61, 0x1904, 0xc7c0, 0x0036, 0x0046, 0xbba0,\r
-+      0x2021, 0x0007, 0x080c, 0x4a75, 0x004e, 0x003e, 0x0804, 0xc7c0,\r
-+      0x080c, 0x3181, 0x1904, 0xc7c0, 0x2001, 0x1800, 0x2004, 0x9086,\r
-+      0x0002, 0x1138, 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6,\r
-+      0x00fe, 0x2001, 0x0002, 0x080c, 0x61c1, 0x6023, 0x0001, 0x6003,\r
-+      0x0001, 0x6007, 0x0002, 0x080c, 0x84d8, 0x080c, 0x8936, 0x6110,\r
-+      0x2158, 0x2009, 0x0001, 0x080c, 0x8167, 0x0804, 0xc7c2, 0x6610,\r
-+      0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0904,\r
-+      0xc7c0, 0x9686, 0x0004, 0x0904, 0xc7c0, 0x2001, 0x0004, 0x0804,\r
-+      0xc7be, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036,\r
-+      0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4a75,\r
-+      0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xc7dc, 0x6610, 0x2658,\r
-+      0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x006e,\r
-+      0x0168, 0x2001, 0x0006, 0x080c, 0x61ed, 0x9284, 0x00ff, 0x908e,\r
-+      0x0007, 0x1120, 0x2001, 0x0006, 0x080c, 0x61c1, 0x080c, 0x665f,\r
-+      0x11f8, 0x2001, 0x1836, 0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4,\r
-+      0x00ff, 0x9686, 0x0006, 0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a4,\r
-+      0x8000, 0x78a6, 0x00fe, 0x0804, 0xc749, 0x2001, 0x0004, 0x0030,\r
-+      0x2001, 0x0006, 0x0409, 0x0020, 0x0018, 0x0010, 0x080c, 0x61ed,\r
-+      0x080c, 0x9be7, 0x0005, 0x2600, 0x0002, 0xc7d7, 0xc7d7, 0xc7d7,\r
-+      0xc7d7, 0xc7d7, 0xc7d9, 0xc7d7, 0xc7d7, 0xc7d7, 0xc7d7, 0xc7d9,\r
-+      0xc7d7, 0xc7d7, 0xc7d7, 0xc7d9, 0xc7d9, 0xc7d9, 0xc7d9, 0x080c,\r
-+      0x0d65, 0x080c, 0x9be7, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110,\r
-+      0x2158, 0xb900, 0xd184, 0x0138, 0x080c, 0x61c1, 0x9006, 0x080c,\r
-+      0x61ad, 0x080c, 0x303b, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610,\r
-+      0x2658, 0xb804, 0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c,\r
-+      0x0d65, 0x91b6, 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016,\r
-+      0x190c, 0x0d65, 0x006b, 0x0005, 0xa670, 0xa670, 0xa670, 0xa670,\r
-+      0xa670, 0xa670, 0xc85b, 0xc81c, 0xa670, 0xa670, 0xa670, 0xa670,\r
-+      0xa670, 0xa670, 0xa670, 0xa670, 0xa670, 0xa670, 0xc85b, 0xc862,\r
-+      0xa670, 0xa670, 0xa670, 0xa670, 0x00f6, 0x080c, 0x665f, 0x11d8,\r
-+      0x080c, 0xbf61, 0x11c0, 0x6010, 0x905d, 0x01a8, 0xb884, 0x9005,\r
-+      0x0190, 0x9006, 0x080c, 0x61ad, 0x2001, 0x0002, 0x080c, 0x61c1,\r
-+      0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8,\r
-+      0x080c, 0x8936, 0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,\r
-+      0x080c, 0x2424, 0x11b0, 0x080c, 0x6270, 0x0118, 0x080c, 0x9be7,\r
-+      0x0080, 0xb810, 0x0006, 0xb814, 0x0006, 0xb884, 0x0006, 0x080c,\r
-+      0x5cf6, 0x000e, 0xb886, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c,\r
-+      0x9be7, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c,\r
-+      0x9be7, 0x0005, 0x080c, 0xaa54, 0x1148, 0x6003, 0x0001, 0x6007,\r
-+      0x0001, 0x080c, 0x84d8, 0x080c, 0x8936, 0x0010, 0x080c, 0x9be7,\r
-+      0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d65, 0x080c, 0x8874,\r
-+      0x080c, 0x9c21, 0x0005, 0x9182, 0x0040, 0x0002, 0xc891, 0xc891,\r
-+      0xc891, 0xc891, 0xc893, 0xc891, 0xc891, 0xc891, 0xc891, 0xc891,\r
-+      0xc891, 0xc891, 0xc891, 0xc891, 0xc891, 0xc891, 0xc891, 0xc891,\r
-+      0xc891, 0x080c, 0x0d65, 0x0096, 0x00b6, 0x00d6, 0x00e6, 0x00f6,\r
-+      0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac, 0x9005, 0x11b0, 0x6007,\r
-+      0x0044, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xc8fa,\r
-+      0x080c, 0xd57d, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001,\r
-+      0x2011, 0x0200, 0x080c, 0x83eb, 0x0020, 0x9026, 0x080c, 0xd4b2,\r
-+      0x0c30, 0x080c, 0x1022, 0x090c, 0x0d65, 0x6003, 0x0007, 0xa867,\r
-+      0x010d, 0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00, 0xa88e, 0x6008,\r
-+      0xa8e2, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a, 0x0016, 0xa876,\r
-+      0xa87f, 0x0000, 0xa883, 0x0000, 0xa887, 0x0036, 0x080c, 0x6996,\r
-+      0x001e, 0x080c, 0xd57d, 0x1904, 0xc95a, 0x9486, 0x2000, 0x1130,\r
-+      0x2019, 0x0017, 0x080c, 0xd1eb, 0x0804, 0xc95a, 0x9486, 0x0200,\r
-+      0x1120, 0x080c, 0xd17b, 0x0804, 0xc95a, 0x9486, 0x0400, 0x0120,\r
-+      0x9486, 0x1000, 0x1904, 0xc95a, 0x2019, 0x0002, 0x080c, 0xd19a,\r
-+      0x0804, 0xc95a, 0x2069, 0x1a3f, 0x6a00, 0xd284, 0x0904, 0xc9c4,\r
-+      0x9284, 0x0300, 0x1904, 0xc9bd, 0x6804, 0x9005, 0x0904, 0xc9a5,\r
-+      0x2d78, 0x6003, 0x0007, 0x080c, 0x103b, 0x0904, 0xc966, 0x7800,\r
-+      0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001,\r
-+      0x180f, 0x2004, 0xd084, 0x1904, 0xc9c8, 0x9006, 0xa802, 0xa867,\r
-+      0x0116, 0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a, 0x6010, 0x2058,\r
-+      0xb8a0, 0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba, 0xb92c, 0xa9be,\r
-+      0xb930, 0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d, 0x7044, 0x9084,\r
-+      0x0003, 0x9080, 0xc962, 0x2005, 0xa87e, 0x20a9, 0x000a, 0x2001,\r
-+      0x0270, 0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205, 0x200b, 0x0080,\r
-+      0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0, 0x4003, 0x200b,\r
-+      0x0000, 0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000, 0x200c, 0xa9ae,\r
-+      0x080c, 0x6999, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be,\r
-+      0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x1810,\r
-+      0x2004, 0xd084, 0x0120, 0x080c, 0x1022, 0x1904, 0xc90f, 0x6017,\r
-+      0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, 0xa022, 0x080c,\r
-+      0x84d1, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086,\r
-+      0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c,\r
-+      0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043,\r
-+      0x2009, 0xa025, 0x080c, 0x84d1, 0x0828, 0x6868, 0x602e, 0x686c,\r
-+      0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009,\r
-+      0xa022, 0x080c, 0x84d1, 0x0804, 0xc95a, 0x2001, 0x180e, 0x2004,\r
-+      0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d8, 0x6017, 0xf300,\r
-+      0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009,\r
-+      0xa022, 0x080c, 0x84d1, 0x0804, 0xc95a, 0x6017, 0xf500, 0x0c98,\r
-+      0x6017, 0xf600, 0x0804, 0xc97a, 0x6017, 0xf200, 0x0804, 0xc97a,\r
-+      0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a,\r
-+      0x7044, 0x9084, 0x0003, 0x9080, 0xc962, 0x2005, 0xa87e, 0x2928,\r
-+      0x6010, 0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a, 0xb82c, 0xa88e,\r
-+      0xb830, 0xa892, 0xb834, 0xa896, 0xa883, 0x003d, 0x2009, 0x0205,\r
-+      0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210,\r
-+      0x2214, 0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111, 0x1a0c, 0x0d65,\r
-+      0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x0029, 0x20a0, 0x2011, 0xca44, 0x2041, 0x0001, 0x223d,\r
-+      0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a,\r
-+      0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260,\r
-+      0x2098, 0x0c68, 0x2950, 0x080c, 0x103b, 0x0170, 0x2900, 0xb002,\r
-+      0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080,\r
-+      0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118,\r
-+      0x080c, 0x1054, 0x0cc8, 0x080c, 0x1054, 0x0804, 0xc966, 0x2548,\r
-+      0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000,\r
-+      0x080c, 0xd21e, 0x0804, 0xc95a, 0x8010, 0x0004, 0x801a, 0x0006,\r
-+      0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160,\r
-+      0x6004, 0x908a, 0x0057, 0x1a0c, 0x0d65, 0x9082, 0x0040, 0x0a0c,\r
-+      0x0d65, 0x2008, 0x0804, 0xcacf, 0x9186, 0x0051, 0x0108, 0x0040,\r
-+      0x080c, 0x9ab7, 0x01e8, 0x9086, 0x0002, 0x0904, 0xcb16, 0x00c0,\r
-+      0x9186, 0x0027, 0x0180, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014,\r
-+      0x0150, 0x190c, 0x0d65, 0x080c, 0x9ab7, 0x0150, 0x9086, 0x0004,\r
-+      0x0904, 0xcbb3, 0x0028, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a,\r
-+      0x080c, 0x9ca2, 0x0005, 0xca96, 0xca98, 0xca98, 0xcabf, 0xca96,\r
-+      0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0xca96,\r
-+      0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0x080c, 0x0d65,\r
-+      0x080c, 0x8874, 0x080c, 0x8936, 0x0036, 0x0096, 0x6014, 0x904d,\r
-+      0x01d8, 0x080c, 0xb847, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6,\r
-+      0x2058, 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c,\r
-+      0xd21e, 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1958,\r
-+      0x2004, 0x601a, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096,\r
-+      0x080c, 0x8874, 0x080c, 0x8936, 0x080c, 0xb847, 0x0120, 0x6014,\r
-+      0x2048, 0x080c, 0x1054, 0x080c, 0x9c21, 0x009e, 0x0005, 0x0002,\r
-+      0xcae3, 0xcaf8, 0xcae5, 0xcb0d, 0xcae3, 0xcae3, 0xcae3, 0xcae3,\r
-+      0xcae3, 0xcae3, 0xcae3, 0xcae3, 0xcae3, 0xcae3, 0xcae3, 0xcae3,\r
-+      0xcae3, 0xcae3, 0xcae3, 0x080c, 0x0d65, 0x0096, 0x6014, 0x2048,\r
-+      0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c,\r
-+      0x9c85, 0x0010, 0x6003, 0x0004, 0x080c, 0x8936, 0x009e, 0x0005,\r
-+      0x080c, 0xb847, 0x0138, 0x6114, 0x0096, 0x2148, 0xa97c, 0x009e,\r
-+      0xd1ec, 0x1138, 0x080c, 0x83c0, 0x080c, 0x9be7, 0x080c, 0x8936,\r
-+      0x0005, 0x080c, 0xd476, 0x0db0, 0x0cc8, 0x6003, 0x0001, 0x6007,\r
-+      0x0041, 0x2009, 0xa022, 0x080c, 0x84d1, 0x0005, 0x9182, 0x0040,\r
-+      0x0002, 0xcb2c, 0xcb2e, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c,\r
-+      0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c,\r
-+      0xcb2c, 0xcb2c, 0xcb2f, 0xcb2c, 0x080c, 0x0d65, 0x0005, 0x00d6,\r
-+      0x080c, 0x83c0, 0x00de, 0x080c, 0xd4ce, 0x080c, 0x9be7, 0x0005,\r
-+      0x9182, 0x0040, 0x0002, 0xcb4e, 0xcb4e, 0xcb4e, 0xcb4e, 0xcb4e,\r
-+      0xcb4e, 0xcb4e, 0xcb4e, 0xcb4e, 0xcb50, 0xcb7b, 0xcb4e, 0xcb4e,\r
-+      0xcb4e, 0xcb4e, 0xcb7b, 0xcb4e, 0xcb4e, 0xcb4e, 0x080c, 0x0d65,\r
-+      0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x908c, 0x0003,\r
-+      0x918e, 0x0002, 0x0180, 0x6144, 0xd1e4, 0x1168, 0x2009, 0x0041,\r
-+      0x009e, 0x0804, 0xcc3b, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c,\r
-+      0x83c0, 0x009e, 0x0005, 0x6014, 0x2048, 0xa97c, 0xd1ec, 0x1130,\r
-+      0x080c, 0x83c0, 0x080c, 0x9be7, 0x009e, 0x0005, 0x080c, 0xd476,\r
-+      0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102,\r
-+      0x0036, 0x080c, 0x88d1, 0x080c, 0x8936, 0x6014, 0x0096, 0x2048,\r
-+      0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0188, 0xa87c,\r
-+      0x9084, 0x0003, 0x9086, 0x0002, 0x0140, 0xa8ac, 0x6330, 0x931a,\r
-+      0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e, 0x6003, 0x0002, 0x0080,\r
-+      0x2019, 0x0004, 0x080c, 0xd21e, 0x6018, 0x9005, 0x1128, 0x2001,\r
-+      0x1958, 0x2004, 0x8003, 0x601a, 0x6017, 0x0000, 0x6003, 0x0007,\r
-+      0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002, 0xcbca, 0xcbca,\r
-+      0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbcc, 0xcbca,\r
-+      0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca,\r
-+      0xcbca, 0xcc17, 0x080c, 0x0d65, 0x6014, 0x0096, 0x2048, 0xa834,\r
-+      0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1190,\r
-+      0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, 0x2009, 0x0041, 0x009e,\r
-+      0x0804, 0xcc3b, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x83c0,\r
-+      0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58, 0x0006, 0x0046, 0xacac,\r
-+      0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030, 0x9420, 0x6432, 0x602c,\r
-+      0x9109, 0x612e, 0x004e, 0x000e, 0x08d8, 0x6110, 0x00b6, 0x2158,\r
-+      0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009, 0x180e, 0x210c, 0xd19c,\r
-+      0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x00e9, 0x080c,\r
-+      0x83c2, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e, 0x0005, 0x6024,\r
-+      0xd0f4, 0x0128, 0x080c, 0x1595, 0x1904, 0xcbcc, 0x0005, 0x6014,\r
-+      0x0096, 0x2048, 0xa834, 0xa938, 0x009e, 0x9105, 0x1120, 0x080c,\r
-+      0x1595, 0x1904, 0xcbcc, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000,\r
-+      0x8212, 0x9291, 0x0000, 0x2009, 0x0009, 0x0010, 0x2009, 0x0015,\r
-+      0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040, 0x0208, 0x0062, 0x9186,\r
-+      0x0013, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d65, 0x6024, 0xd0dc,\r
-+      0x090c, 0x0d65, 0x0005, 0xcc5e, 0xcc6a, 0xcc76, 0xcc82, 0xcc5e,\r
-+      0xcc5e, 0xcc5e, 0xcc5e, 0xcc65, 0xcc60, 0xcc60, 0xcc5e, 0xcc5e,\r
-+      0xcc5e, 0xcc5e, 0xcc60, 0xcc5e, 0xcc60, 0xcc5e, 0x080c, 0x0d65,\r
-+      0x6024, 0xd0dc, 0x090c, 0x0d65, 0x0005, 0x6014, 0x9005, 0x190c,\r
-+      0x0d65, 0x0005, 0x6003, 0x0001, 0x6106, 0x0126, 0x2091, 0x8000,\r
-+      0x2009, 0xa022, 0x080c, 0x84b3, 0x012e, 0x0005, 0x6003, 0x0004,\r
-+      0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa001, 0x080c, 0x84d1,\r
-+      0x012e, 0x0005, 0x6003, 0x0003, 0x6106, 0x080c, 0x1aa5, 0x0126,\r
-+      0x2091, 0x8000, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188,\r
-+      0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x6024, 0xd0cc, 0x1148,\r
-+      0xd0c4, 0x1138, 0xa8a8, 0x9005, 0x1120, 0x6144, 0x918d, 0xb035,\r
-+      0x0018, 0x6144, 0x918d, 0xa035, 0x009e, 0x080c, 0x8518, 0x012e,\r
-+      0x0005, 0x6144, 0x918d, 0xa032, 0x0cb8, 0x0126, 0x2091, 0x8000,\r
-+      0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e, 0x003e, 0x012e,\r
-+      0x0005, 0xccc9, 0xcccb, 0xcce0, 0xccfa, 0xccc9, 0xccc9, 0xccc9,\r
-+      0xccc9, 0xccc9, 0xccc9, 0xccc9, 0xccc9, 0xccc9, 0xccc9, 0xccc9,\r
-+      0xccc9, 0x080c, 0x0d65, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0510,\r
-+      0x909c, 0x0003, 0x939e, 0x0003, 0x01e8, 0x6003, 0x0001, 0x6106,\r
-+      0x0126, 0x2091, 0x8000, 0x2009, 0xa022, 0x080c, 0x84d1, 0x0470,\r
-+      0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x909c, 0x0003, 0x939e,\r
-+      0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x2009, 0xa001, 0x080c,\r
-+      0x84d1, 0x00e0, 0x901e, 0x6316, 0x631a, 0x2019, 0x0004, 0x080c,\r
-+      0xd21e, 0x00a0, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0d98, 0x909c,\r
-+      0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, 0x0003, 0x6106, 0x080c,\r
-+      0x1aa5, 0x6144, 0x918d, 0xa035, 0x080c, 0x8518, 0x0005, 0x080c,\r
-+      0x8874, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xd51a,\r
-+      0x0036, 0x2019, 0x0029, 0x080c, 0xd21e, 0x003e, 0x009e, 0x080c,\r
-+      0x9c21, 0x080c, 0x8936, 0x0005, 0x080c, 0x88d1, 0x6114, 0x81ff,\r
-+      0x0158, 0x0096, 0x2148, 0x080c, 0xd51a, 0x0036, 0x2019, 0x0029,\r
-+      0x080c, 0xd21e, 0x003e, 0x009e, 0x080c, 0x9c21, 0x0005, 0x9182,\r
-+      0x0085, 0x0002, 0xcd49, 0xcd47, 0xcd47, 0xcd55, 0xcd47, 0xcd47,\r
-+      0xcd47, 0xcd47, 0xcd47, 0xcd47, 0xcd47, 0xcd47, 0xcd47, 0x080c,\r
-+      0x0d65, 0x6003, 0x000b, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009,\r
-+      0x8020, 0x080c, 0x84d1, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c,\r
-+      0xd46d, 0x0118, 0x080c, 0x9be7, 0x0440, 0x2071, 0x0260, 0x7224,\r
-+      0x6216, 0x2001, 0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6,\r
-+      0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0x9f13,\r
-+      0x7220, 0x080c, 0xd0b4, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007,\r
-+      0x0087, 0x7224, 0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003,\r
-+      0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00ee, 0x002e, 0x0005,\r
-+      0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d65,\r
-+      0x908a, 0x0092, 0x1a0c, 0x0d65, 0x9082, 0x0085, 0x00a2, 0x9186,\r
-+      0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x9ca2, 0x0050,\r
-+      0x2001, 0x0007, 0x080c, 0x61ed, 0x080c, 0x8874, 0x080c, 0x9c21,\r
-+      0x080c, 0x8936, 0x0005, 0xcdb8, 0xcdba, 0xcdba, 0xcdb8, 0xcdb8,\r
-+      0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8,\r
-+      0x080c, 0x0d65, 0x080c, 0x9c21, 0x080c, 0x8936, 0x0005, 0x9182,\r
-+      0x0085, 0x0a0c, 0x0d65, 0x9182, 0x0092, 0x1a0c, 0x0d65, 0x9182,\r
-+      0x0085, 0x0002, 0xcdd7, 0xcdd7, 0xcdd7, 0xcdd9, 0xcdd7, 0xcdd7,\r
-+      0xcdd7, 0xcdd7, 0xcdd7, 0xcdd7, 0xcdd7, 0xcdd7, 0xcdd7, 0x080c,\r
-+      0x0d65, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, 0x0130,\r
-+      0x9186, 0x0027, 0x0118, 0x080c, 0x9ca2, 0x0020, 0x080c, 0x8874,\r
-+      0x080c, 0x9c21, 0x0005, 0x0036, 0x080c, 0xd4ce, 0x604b, 0x0000,\r
-+      0x2019, 0x000b, 0x0031, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e,\r
-+      0x0005, 0x0126, 0x0036, 0x2091, 0x8000, 0x2001, 0x0382, 0x2004,\r
-+      0x9084, 0x0007, 0x0006, 0x9086, 0x0003, 0x0110, 0x080c, 0x98c8,\r
-+      0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0x9382, 0x009e, 0x008e,\r
-+      0x1550, 0x0076, 0x2c38, 0x080c, 0x942d, 0x007e, 0x1520, 0x6000,\r
-+      0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0, 0x0096,\r
-+      0x601c, 0xd084, 0x0140, 0x080c, 0xd4ce, 0x080c, 0xbf79, 0x080c,\r
-+      0x1914, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xb847, 0x0110,\r
-+      0x080c, 0xd21e, 0x009e, 0x6017, 0x0000, 0x080c, 0xd4ce, 0x6023,\r
-+      0x0007, 0x080c, 0xbf79, 0x000e, 0x9086, 0x0003, 0x0110, 0x080c,\r
-+      0x98e4, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036,\r
-+      0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c, 0x2424, 0x15e8,\r
-+      0x0016, 0x00c6, 0x080c, 0x6270, 0x15b0, 0x001e, 0x00c6, 0x2160,\r
-+      0x080c, 0xbf76, 0x00ce, 0x002e, 0x0026, 0x0016, 0x080c, 0x98c8,\r
-+      0x2019, 0x0029, 0x080c, 0x94f4, 0x080c, 0x863b, 0x0076, 0x903e,\r
-+      0x080c, 0x852a, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, 0xcfc8,\r
-+      0x007e, 0x080c, 0x98e4, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217,\r
-+      0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c,\r
-+      0x30dc, 0x002e, 0xbc84, 0x001e, 0x080c, 0x5cf6, 0xbe12, 0xbd16,\r
-+      0xbc86, 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be,\r
-+      0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009,\r
-+      0x1823, 0x2104, 0x9086, 0x0074, 0x1904, 0xceec, 0x2069, 0x0260,\r
-+      0x6944, 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904,\r
-+      0xcee9, 0x2001, 0x194d, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058,\r
-+      0xb884, 0x9005, 0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a,\r
-+      0x0001, 0x0648, 0x080c, 0xd582, 0x0118, 0x6978, 0xd1fc, 0x11b8,\r
-+      0x2009, 0x0205, 0x200b, 0x0001, 0x693c, 0x81ff, 0x1198, 0x6944,\r
-+      0x9182, 0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178, 0x6948, 0x918a,\r
-+      0x0001, 0x0288, 0x6950, 0x918a, 0x0001, 0x0298, 0x00d0, 0x6017,\r
-+      0x0100, 0x00a0, 0x6017, 0x0300, 0x0088, 0x6017, 0x0500, 0x0070,\r
-+      0x6017, 0x0700, 0x0058, 0x6017, 0x0900, 0x0040, 0x6017, 0x0b00,\r
-+      0x0028, 0x6017, 0x0f00, 0x0010, 0x6017, 0x2d00, 0x9085, 0x0001,\r
-+      0x0008, 0x9006, 0x001e, 0x00be, 0x00de, 0x00ce, 0x0005, 0x00c6,\r
-+      0x00b6, 0x0026, 0x0036, 0x0156, 0x6210, 0x2258, 0xbb04, 0x9394,\r
-+      0x00ff, 0x9286, 0x0006, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394,\r
-+      0xff00, 0x8217, 0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120,\r
-+      0x080c, 0x627f, 0x0804, 0xcf57, 0x2011, 0x0276, 0x20a9, 0x0004,\r
-+      0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xabdf, 0x009e, 0x15c0,\r
-+      0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006,\r
-+      0x080c, 0xabdf, 0x009e, 0x1560, 0x0046, 0x0016, 0xbaa0, 0x2220,\r
-+      0x9006, 0x2009, 0x1854, 0x210c, 0x0038, 0x2009, 0x0029, 0x080c,\r
-+      0xd273, 0xb800, 0xc0e5, 0xb802, 0x080c, 0x98c8, 0x2019, 0x0029,\r
-+      0x080c, 0x863b, 0x0076, 0x2039, 0x0000, 0x080c, 0x852a, 0x2c08,\r
-+      0x080c, 0xcfc8, 0x007e, 0x080c, 0x98e4, 0x2001, 0x0007, 0x080c,\r
-+      0x61ed, 0x2001, 0x0007, 0x080c, 0x61c1, 0x001e, 0x004e, 0x9006,\r
-+      0x015e, 0x003e, 0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6, 0x2069,\r
-+      0x026e, 0x6800, 0x9086, 0x0800, 0x0118, 0x6017, 0x0000, 0x0008,\r
-+      0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026, 0x0036,\r
-+      0x0156, 0x2079, 0x026c, 0x7930, 0x7834, 0x080c, 0x2424, 0x11d0,\r
-+      0x080c, 0x6270, 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096,\r
-+      0x2b48, 0x2019, 0x000a, 0x080c, 0xabdf, 0x009e, 0x1158, 0x2011,\r
-+      0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c,\r
-+      0xabdf, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be,\r
-+      0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011,\r
-+      0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x11d0, 0x080c,\r
-+      0x6270, 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48,\r
-+      0x2019, 0x000a, 0x080c, 0xabdf, 0x009e, 0x1158, 0x2011, 0x027a,\r
-+      0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xabdf,\r
-+      0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005,\r
-+      0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x9926, 0x0106, 0x190c, 0x98c8,\r
-+      0x2740, 0x2029, 0x19c4, 0x252c, 0x2021, 0x19cb, 0x2424, 0x2061,\r
-+      0x1ddc, 0x2071, 0x1800, 0x7650, 0x7070, 0x81ff, 0x0150, 0x0006,\r
-+      0x9186, 0x1b02, 0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xd069,\r
-+      0x0018, 0x9606, 0x0904, 0xd069, 0x2100, 0x9c06, 0x0904, 0xd060,\r
-+      0x080c, 0xd2b4, 0x1904, 0xd060, 0x080c, 0xd59f, 0x0904, 0xd060,\r
-+      0x080c, 0xd2a4, 0x0904, 0xd060, 0x6720, 0x9786, 0x0001, 0x1148,\r
-+      0x080c, 0x3181, 0x0904, 0xd088, 0x6004, 0x9086, 0x0000, 0x1904,\r
-+      0xd088, 0x9786, 0x0004, 0x0904, 0xd088, 0x9786, 0x0007, 0x0904,\r
-+      0xd060, 0x2500, 0x9c06, 0x0904, 0xd060, 0x2400, 0x9c06, 0x0904,\r
-+      0xd060, 0x88ff, 0x0118, 0x605c, 0x9906, 0x15d0, 0x0096, 0x6043,\r
-+      0xffff, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1914,\r
-+      0x001e, 0x9786, 0x000a, 0x0148, 0x080c, 0xba5c, 0x1130, 0x080c,\r
-+      0xa58f, 0x009e, 0x080c, 0x9c21, 0x0418, 0x6014, 0x2048, 0x080c,\r
-+      0xb847, 0x01d8, 0x9786, 0x0003, 0x1588, 0xa867, 0x0103, 0xa87c,\r
-+      0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4, 0x009e,\r
-+      0xab7a, 0xa877, 0x0000, 0x080c, 0xd51a, 0x0016, 0x080c, 0xbb45,\r
-+      0x080c, 0x698a, 0x001e, 0x080c, 0xba36, 0x009e, 0x080c, 0x9c21,\r
-+      0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210, 0x0804,\r
-+      0xcfe1, 0x010e, 0x190c, 0x98e4, 0x012e, 0x002e, 0x004e, 0x005e,\r
-+      0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006,\r
-+      0x1150, 0x9386, 0x0005, 0x0128, 0x080c, 0xd51a, 0x080c, 0xd21e,\r
-+      0x08e0, 0x009e, 0x08e8, 0x9786, 0x000a, 0x0908, 0x0804, 0xd045,\r
-+      0x81ff, 0x09b0, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0130,\r
-+      0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1950, 0x6000, 0x9086,\r
-+      0x0002, 0x1930, 0x080c, 0xba4b, 0x0130, 0x080c, 0xba5c, 0x1900,\r
-+      0x080c, 0xa58f, 0x0038, 0x080c, 0x303b, 0x080c, 0xba5c, 0x1110,\r
-+      0x080c, 0xa58f, 0x080c, 0x9c21, 0x0804, 0xd060, 0xa864, 0x9084,\r
-+      0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08,\r
-+      0x2170, 0x9006, 0x080c, 0xd245, 0x001e, 0x0120, 0x6020, 0x9084,\r
-+      0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005, 0xd0d3, 0xd0d3, 0xd0d3,\r
-+      0xd0d3, 0xd0d3, 0xd0d3, 0xd0d5, 0xd0d3, 0xd0d3, 0xd0d3, 0xd0d3,\r
-+      0x9c21, 0x9c21, 0xd0d3, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016,\r
-+      0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020,\r
-+      0x080c, 0xd273, 0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xcdf9,\r
-+      0x003e, 0x9085, 0x0001, 0x0005, 0x0096, 0x080c, 0xb847, 0x0140,\r
-+      0x6014, 0x904d, 0x080c, 0xb452, 0x687b, 0x0005, 0x080c, 0x6996,\r
-+      0x009e, 0x080c, 0x9c21, 0x9085, 0x0001, 0x0005, 0x2001, 0x0001,\r
-+      0x080c, 0x61ad, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,\r
-+      0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xabcb, 0x003e, 0x002e,\r
-+      0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086,\r
-+      0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061,\r
-+      0x1ddc, 0x2079, 0x0001, 0x8fff, 0x0904, 0xd16e, 0x2071, 0x1800,\r
-+      0x7650, 0x7070, 0x8001, 0x9602, 0x1a04, 0xd16e, 0x88ff, 0x0120,\r
-+      0x2800, 0x9c06, 0x1590, 0x2078, 0x080c, 0xd2a4, 0x0570, 0x2400,\r
-+      0x9c06, 0x0558, 0x6720, 0x9786, 0x0006, 0x1538, 0x9786, 0x0007,\r
-+      0x0520, 0x88ff, 0x1140, 0x6010, 0x9b06, 0x11f8, 0x85ff, 0x0118,\r
-+      0x605c, 0x9106, 0x11d0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c,\r
-+      0xd4ce, 0x080c, 0xbf79, 0x080c, 0x1914, 0x6023, 0x0007, 0x6014,\r
-+      0x2048, 0x080c, 0xb847, 0x0120, 0x0046, 0x080c, 0xd21e, 0x004e,\r
-+      0x009e, 0x080c, 0x9c21, 0x88ff, 0x1198, 0x9ce0, 0x001c, 0x2001,\r
-+      0x1819, 0x2004, 0x9c02, 0x1210, 0x0804, 0xd123, 0x9006, 0x012e,\r
-+      0x00be, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005,\r
-+      0x98c5, 0x0001, 0x0ca0, 0x080c, 0x98c8, 0x00b6, 0x0076, 0x0056,\r
-+      0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6210,\r
-+      0x2258, 0x0096, 0x904e, 0x080c, 0x9382, 0x009e, 0x008e, 0x903e,\r
-+      0x080c, 0x942d, 0x080c, 0xd114, 0x005e, 0x007e, 0x00be, 0x080c,\r
-+      0x98e4, 0x0005, 0x080c, 0x98c8, 0x00b6, 0x0046, 0x0056, 0x0076,\r
-+      0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016,\r
-+      0x0036, 0x080c, 0x6270, 0x1190, 0x0056, 0x0086, 0x9046, 0x2508,\r
-+      0x2029, 0x0001, 0x0096, 0x904e, 0x080c, 0x9382, 0x009e, 0x008e,\r
-+      0x903e, 0x080c, 0x942d, 0x080c, 0xd114, 0x005e, 0x003e, 0x001e,\r
-+      0x8108, 0x1f04, 0xd1a7, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e,\r
-+      0x00be, 0x080c, 0x98e4, 0x0005, 0x080c, 0x98c8, 0x00b6, 0x0076,\r
-+      0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019,\r
-+      0x0048, 0x0096, 0x904e, 0x080c, 0x9382, 0x009e, 0x008e, 0x903e,\r
-+      0x080c, 0x942d, 0x2c20, 0x080c, 0xd114, 0x005e, 0x007e, 0x00be,\r
-+      0x080c, 0x98e4, 0x0005, 0x080c, 0x98c8, 0x00b6, 0x0046, 0x0056,\r
-+      0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x0800, 0x900e, 0x0016,\r
-+      0x0036, 0x080c, 0x6270, 0x11a0, 0x0086, 0x9046, 0x2828, 0x0046,\r
-+      0x2021, 0x0001, 0x080c, 0xd4b2, 0x004e, 0x0096, 0x904e, 0x080c,\r
-+      0x9382, 0x009e, 0x008e, 0x903e, 0x080c, 0x942d, 0x080c, 0xd114,\r
-+      0x003e, 0x001e, 0x8108, 0x1f04, 0xd1f7, 0x015e, 0x00ce, 0x007e,\r
-+      0x005e, 0x004e, 0x00be, 0x080c, 0x98e4, 0x0005, 0x0016, 0x00f6,\r
-+      0x080c, 0xb845, 0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046,\r
-+      0x0180, 0xa800, 0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c,\r
-+      0x6996, 0x2f48, 0x0cb0, 0xab82, 0x080c, 0x6996, 0x00fe, 0x001e,\r
-+      0x0005, 0xa800, 0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x6996,\r
-+      0x2f48, 0x0cb8, 0x080c, 0x6996, 0x0c88, 0x00e6, 0x0046, 0x0036,\r
-+      0x2061, 0x1ddc, 0x9005, 0x1138, 0x2071, 0x1800, 0x7450, 0x7070,\r
-+      0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000, 0x9086,\r
-+      0x0000, 0x0148, 0x6008, 0x9206, 0x1130, 0x6010, 0x91a0, 0x0004,\r
-+      0x2424, 0x9406, 0x0140, 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004,\r
-+      0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e,\r
-+      0x004e, 0x00ee, 0x0005, 0x0096, 0x0006, 0x080c, 0x1022, 0x000e,\r
-+      0x090c, 0x0d65, 0xaae2, 0xa867, 0x010d, 0xa88e, 0x0026, 0x2010,\r
-+      0x080c, 0xb835, 0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0017,\r
-+      0x2004, 0x002e, 0xa87a, 0x9186, 0x0020, 0x0110, 0xa8e3, 0xffff,\r
-+      0xa986, 0xac76, 0xa87f, 0x0000, 0x2001, 0x195f, 0x2004, 0xa882,\r
-+      0x9006, 0xa802, 0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x6996, 0x012e, 0x009e, 0x0005, 0x6700, 0x9786, 0x0000, 0x0158,\r
-+      0x9786, 0x0001, 0x0140, 0x9786, 0x000a, 0x0128, 0x9786, 0x0009,\r
-+      0x0110, 0x9085, 0x0001, 0x0005, 0x00e6, 0x6010, 0x9075, 0x0138,\r
-+      0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x00ee, 0x0005, 0x9085,\r
-+      0x0001, 0x0cd8, 0x0016, 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007,\r
-+      0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003,\r
-+      0x000b, 0x6023, 0x0005, 0x2001, 0x1958, 0x2004, 0x601a, 0x2009,\r
-+      0x8020, 0x080c, 0x84d1, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005,\r
-+      0x6024, 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0xbb8c, 0x0030,\r
-+      0x080c, 0xd4ce, 0x080c, 0x83c0, 0x080c, 0x9be7, 0x0005, 0x9280,\r
-+      0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xd303, 0xd303, 0xd303,\r
-+      0xd305, 0xd303, 0xd305, 0xd305, 0xd303, 0xd305, 0xd303, 0xd303,\r
-+      0xd303, 0xd303, 0xd303, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005,\r
-+      0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xd31c, 0xd31c,\r
-+      0xd31c, 0xd31c, 0xd31c, 0xd31c, 0xd329, 0xd31c, 0xd31c, 0xd31c,\r
-+      0xd31c, 0xd31c, 0xd31c, 0xd31c, 0x6007, 0x003b, 0x602f, 0x0009,\r
-+      0x6017, 0x2a00, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1,\r
-+      0x0005, 0x0096, 0x00c6, 0x2260, 0x080c, 0xd4ce, 0x604b, 0x0000,\r
-+      0x6024, 0xc0f4, 0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6,\r
-+      0x2268, 0x9186, 0x0007, 0x1904, 0xd382, 0x6814, 0x9005, 0x0138,\r
-+      0x2048, 0xa87c, 0xd0fc, 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007,\r
-+      0x003a, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00c6,\r
-+      0x2d60, 0x6100, 0x9186, 0x0002, 0x1904, 0xd3f9, 0x6014, 0x9005,\r
-+      0x1138, 0x6000, 0x9086, 0x0007, 0x190c, 0x0d65, 0x0804, 0xd3f9,\r
-+      0x2048, 0x080c, 0xb847, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005,\r
-+      0x1de0, 0x2900, 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002,\r
-+      0x1168, 0xa87c, 0xc0dc, 0xc0f4, 0xa87e, 0xa880, 0xc0fc, 0xa882,\r
-+      0x2009, 0x0043, 0x080c, 0xcc3b, 0x0804, 0xd3f9, 0x2009, 0x0041,\r
-+      0x0804, 0xd3f3, 0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c,\r
-+      0xd0bc, 0x1120, 0x00de, 0x009e, 0x0804, 0xd31c, 0xd0b4, 0x0128,\r
-+      0xd0fc, 0x090c, 0x0d65, 0x0804, 0xd33d, 0x6007, 0x003a, 0x6003,\r
-+      0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00c6, 0x2d60, 0x6100,\r
-+      0x9186, 0x0002, 0x0120, 0x9186, 0x0004, 0x1904, 0xd3f9, 0x6814,\r
-+      0x2048, 0xa97c, 0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1fc, 0xc1bc,\r
-+      0xa982, 0x00f6, 0x2c78, 0x080c, 0x164f, 0x00fe, 0x2009, 0x0042,\r
-+      0x04d0, 0x0036, 0x080c, 0x1022, 0x090c, 0x0d65, 0xa867, 0x010d,\r
-+      0x9006, 0xa802, 0xa86a, 0xa88a, 0x2d18, 0xab8e, 0xa887, 0x0045,\r
-+      0x2c00, 0xa892, 0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026,\r
-+      0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x2004, 0x635c, 0xab7a,\r
-+      0xa876, 0x9006, 0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001,\r
-+      0x080c, 0x6996, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xcdf9,\r
-+      0x2d00, 0x600a, 0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a,\r
-+      0x634a, 0x003e, 0x0038, 0x604b, 0x0000, 0x6003, 0x0007, 0x080c,\r
-+      0xcc3b, 0x00ce, 0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128,\r
-+      0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178,\r
-+      0x080c, 0x8874, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004,\r
-+      0x080c, 0xd21e, 0x009e, 0x003e, 0x080c, 0x8936, 0x0005, 0x9186,\r
-+      0x0014, 0x0d70, 0x080c, 0x9ca2, 0x0005, 0xd42c, 0xd42a, 0xd42a,\r
-+      0xd42a, 0xd42a, 0xd42a, 0xd42c, 0xd42a, 0xd42a, 0xd42a, 0xd42a,\r
-+      0xd42a, 0xd42a, 0x080c, 0x0d65, 0x6003, 0x000c, 0x080c, 0x8936,\r
-+      0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a,\r
-+      0x080c, 0x9ca2, 0x0005, 0xd448, 0xd448, 0xd448, 0xd448, 0xd44a,\r
-+      0xd46a, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448,\r
-+      0x080c, 0x0d65, 0x00d6, 0x2c68, 0x080c, 0x9b91, 0x01b0, 0x6003,\r
-+      0x0001, 0x6007, 0x001e, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009,\r
-+      0x026f, 0x210c, 0x613e, 0x600b, 0xffff, 0x6910, 0x6112, 0x6023,\r
-+      0x0004, 0x2009, 0x8020, 0x080c, 0x84d1, 0x2d60, 0x080c, 0x9be7,\r
-+      0x00de, 0x0005, 0x080c, 0x9be7, 0x0005, 0x00e6, 0x6010, 0x00b6,\r
-+      0x2058, 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1873,\r
-+      0x210c, 0xd1ec, 0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026,\r
-+      0xd0cc, 0x0150, 0x2001, 0x1959, 0x2004, 0x604a, 0x2009, 0x1873,\r
-+      0x210c, 0xd1f4, 0x1520, 0x00a0, 0x2009, 0x1873, 0x210c, 0xd1f4,\r
-+      0x0128, 0x6024, 0xc0e4, 0x6026, 0x9006, 0x00d8, 0x2001, 0x1959,\r
-+      0x200c, 0x2001, 0x1957, 0x2004, 0x9100, 0x9080, 0x000a, 0x604a,\r
-+      0x6010, 0x00b6, 0x2058, 0xb8ac, 0x00be, 0x0008, 0x2104, 0x9005,\r
-+      0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000, 0x9085,\r
-+      0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, 0x615c, 0xb8ac, 0x2060,\r
-+      0x8cff, 0x0180, 0x84ff, 0x1118, 0x605c, 0x9106, 0x1138, 0x600c,\r
-+      0x2072, 0x080c, 0x83c0, 0x080c, 0x9be7, 0x0010, 0x9cf0, 0x0003,\r
-+      0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x00b6,\r
-+      0x6010, 0x2058, 0xb8ac, 0x2068, 0x9005, 0x0130, 0x9c06, 0x0110,\r
-+      0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be, 0x00de, 0x0005, 0x0026,\r
-+      0x0036, 0x0156, 0x2011, 0x182b, 0x2204, 0x9084, 0x00ff, 0x2019,\r
-+      0x026e, 0x2334, 0x9636, 0x1508, 0x8318, 0x2334, 0x2204, 0x9084,\r
-+      0xff00, 0x9636, 0x11d0, 0x2011, 0x0270, 0x20a9, 0x0004, 0x6010,\r
-+      0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xabdf, 0x009e, 0x1168,\r
-+      0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,\r
-+      0x0006, 0x080c, 0xabdf, 0x009e, 0x1100, 0x015e, 0x003e, 0x002e,\r
-+      0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c6f, 0x080c, 0x2ddb,\r
-+      0x00ee, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,\r
-+      0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882,\r
-+      0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046,\r
-+      0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0x19c4, 0x252c,\r
-+      0x2021, 0x19cb, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7650,\r
-+      0x7070, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786,\r
-+      0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0,\r
-+      0x080c, 0xd2a4, 0x01b8, 0x080c, 0xd2b4, 0x11a0, 0x6000, 0x9086,\r
-+      0x0004, 0x1120, 0x0016, 0x080c, 0x1914, 0x001e, 0x080c, 0xba4b,\r
-+      0x1110, 0x080c, 0x303b, 0x080c, 0xba5c, 0x1110, 0x080c, 0xa58f,\r
-+      0x080c, 0x9c21, 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02,\r
-+      0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e,\r
-+      0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004,\r
-+      0xd0dc, 0x0005, 0x0006, 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e,\r
-+      0x0005, 0x0006, 0x0036, 0x0046, 0x080c, 0xbf61, 0x0168, 0x2019,\r
-+      0xffff, 0x9005, 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be,\r
-+      0x2021, 0x0004, 0x080c, 0x4a75, 0x004e, 0x003e, 0x000e, 0x6004,\r
-+      0x9086, 0x0001, 0x1128, 0x080c, 0x94f4, 0x080c, 0x9c21, 0x9006,\r
-+      0x0005, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1ddc, 0x2071,\r
-+      0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06,\r
-+      0x0148, 0x6000, 0x9086, 0x0000, 0x0128, 0x6010, 0x2058, 0xb8a0,\r
-+      0x9206, 0x0140, 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02,\r
-+      0x1220, 0x0c60, 0x9085, 0x0001, 0x0008, 0x9006, 0x004e, 0x00be,\r
-+      0x00ce, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091,\r
-+      0x8000, 0x2071, 0x1840, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036,\r
-+      0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500,\r
-+      0x9084, 0x0007, 0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130,\r
-+      0x908e, 0x0005, 0x0118, 0x2071, 0x184a, 0x0089, 0x001e, 0x00ee,\r
-+      0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000,\r
-+      0x2071, 0x1842, 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04,\r
-+      0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005,\r
-+      0x00e6, 0x2071, 0x1840, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071,\r
-+      0x1844, 0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091,\r
-+      0x8000, 0x2071, 0x1840, 0x7044, 0x8000, 0x7046, 0x00ee, 0x000e,\r
-+      0x012e, 0x0005, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020,\r
-+      0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000,\r
-+      0x4000, 0x8000, 0xfddb\r
-+};\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2322flx_length01 = 0xce3b;\r
-+#else\r
-+unsigned short risc_code_length01 = 0xce3b;\r
-+#endif\r
-+\r
-+/*\r
-+ *\r
-+ */\r
-+\r
-+unsigned long rseqflx_code_addr01 = 0x0001c000 ;\r
-+unsigned short rseqflx_code01[] = { \r
-+0x000b, 0x0003, 0x0000, 0x071c, 0x0001, 0xc000, 0x0008, 0x8064,\r
-+      0x0000, 0x0010, 0x0000, 0x8066, 0x0008, 0x0101, 0x0003, 0xc007,\r
-+      0x0008, 0x80e0, 0x0008, 0xff00, 0x0000, 0x80e2, 0x0008, 0xff00,\r
-+      0x0008, 0x0162, 0x0000, 0x8066, 0x0008, 0xa101, 0x000b, 0xc00f,\r
-+      0x0008, 0x0d02, 0x0000, 0x8060, 0x0000, 0x0400, 0x000b, 0x60af,\r
-+      0x0003, 0x5817, 0x0003, 0x7ac6, 0x0003, 0x5209, 0x000b, 0xc813,\r
-+      0x0009, 0xbac0, 0x0000, 0x008a, 0x0003, 0x8813, 0x0000, 0x15fc,\r
-+      0x000b, 0xb013, 0x0009, 0xc4c0, 0x0000, 0x7000, 0x0001, 0xffa0,\r
-+      0x0000, 0x2000, 0x000b, 0x9366, 0x0008, 0x808c, 0x0000, 0x0001,\r
-+      0x0007, 0x0000, 0x0007, 0x0000, 0x000a, 0x4047, 0x0008, 0x808c,\r
-+      0x0000, 0x0002, 0x0007, 0x0000, 0x0003, 0x082d, 0x0000, 0x4022,\r
-+      0x000b, 0x002e, 0x0008, 0x4122, 0x0002, 0x4447, 0x0003, 0x8b8a,\r
-+      0x0008, 0x0bfe, 0x0001, 0x11a0, 0x0003, 0x136c, 0x0001, 0x0ca0,\r
-+      0x0003, 0x136c, 0x0001, 0x9180, 0x0000, 0x0004, 0x0000, 0x8060,\r
-+      0x0000, 0x0400, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009,\r
-+      0x000b, 0xc03c, 0x0008, 0x808c, 0x0008, 0x0000, 0x0008, 0x0060,\r
-+      0x0008, 0x8062, 0x0000, 0x0004, 0x0000, 0x8066, 0x0000, 0x0411,\r
-+      0x000b, 0xc044, 0x0000, 0x03fe, 0x0001, 0x43e0, 0x000b, 0x8b69,\r
-+      0x0009, 0xc2c0, 0x0008, 0x00ff, 0x0001, 0x02e0, 0x000b, 0x8b69,\r
-+      0x0001, 0x9180, 0x0008, 0x0005, 0x0000, 0x8060, 0x0000, 0x0400,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0000, 0x0019, 0x000b, 0xc053,\r
-+      0x0002, 0x0240, 0x0003, 0x0b66, 0x0008, 0x00fc, 0x000b, 0x3369,\r
-+      0x000a, 0x0244, 0x0003, 0x0865, 0x000c, 0x01e2, 0x0001, 0x9180,\r
-+      0x0000, 0x0007, 0x0008, 0x7f62, 0x0000, 0x8060, 0x0000, 0x0400,\r
-+      0x0002, 0x0234, 0x0008, 0x7f04, 0x0000, 0x8066, 0x0000, 0x040a,\r
-+      0x0003, 0xc064, 0x0000, 0x112a, 0x0008, 0x002e, 0x0008, 0x022c,\r
-+      0x0002, 0x3a44, 0x0003, 0x8813, 0x0008, 0x808c, 0x0000, 0x0002,\r
-+      0x0008, 0x1760, 0x0008, 0x8062, 0x0008, 0x000f, 0x0000, 0x8066,\r
-+      0x0008, 0x0011, 0x000b, 0xc071, 0x0008, 0x01fe, 0x0009, 0x42e0,\r
-+      0x0003, 0x8b5b, 0x0000, 0x00fe, 0x0001, 0x43e0, 0x0003, 0x8b5b,\r
-+      0x0000, 0x1734, 0x0000, 0x1530, 0x0008, 0x1632, 0x0008, 0x0d2a,\r
-+      0x0001, 0x9880, 0x0008, 0x0012, 0x0000, 0x8060, 0x0000, 0x0400,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x1e0a, 0x0003, 0xc083,\r
-+      0x0008, 0x808a, 0x0008, 0x0003, 0x0000, 0x1a60, 0x0008, 0x8062,\r
-+      0x0000, 0x0002, 0x000b, 0x5889, 0x0000, 0x8066, 0x0000, 0x3679,\r
-+      0x0003, 0xc08c, 0x0003, 0x588d, 0x0008, 0x8054, 0x0008, 0x0011,\r
-+      0x0000, 0x8074, 0x0008, 0x1010, 0x0008, 0x1efc, 0x0003, 0x3013,\r
-+      0x0004, 0x0096, 0x0003, 0x0013, 0x0000, 0x1c60, 0x0000, 0x1b62,\r
-+      0x0000, 0x8066, 0x0008, 0x0231, 0x000b, 0xc09a, 0x000b, 0x589b,\r
-+      0x0008, 0x0140, 0x0000, 0x0242, 0x0002, 0x1f43, 0x000b, 0x88a5,\r
-+      0x0000, 0x0d44, 0x0008, 0x0d46, 0x0008, 0x0348, 0x0008, 0x044a,\r
-+      0x000b, 0x00a9, 0x0008, 0x0344, 0x0008, 0x0446, 0x0008, 0x0548,\r
-+      0x0000, 0x064a, 0x0003, 0x58a9, 0x0008, 0x8054, 0x0000, 0x0001,\r
-+      0x0000, 0x8074, 0x0008, 0x2020, 0x000f, 0x4000, 0x0000, 0x4820,\r
-+      0x0008, 0x0bfe, 0x0009, 0x10a0, 0x0003, 0x1110, 0x0001, 0x0ca0,\r
-+      0x0003, 0x1110, 0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080,\r
-+      0x0000, 0x0008, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009,\r
-+      0x0003, 0xc0bc, 0x0001, 0x80e0, 0x0008, 0x0003, 0x000b, 0x8910,\r
-+      0x0000, 0x49b4, 0x0002, 0x4b4e, 0x000b, 0x8919, 0x0008, 0x808a,\r
-+      0x0000, 0x0004, 0x0000, 0x18fe, 0x0001, 0x10e0, 0x000b, 0x88ca,\r
-+      0x0002, 0x192f, 0x0008, 0x7f32, 0x0008, 0x15fe, 0x0001, 0x10e0,\r
-+      0x000b, 0x88cf, 0x0002, 0x162f, 0x0008, 0x7f2c, 0x0000, 0x8060,\r
-+      0x0000, 0x0400, 0x0009, 0x9080, 0x0000, 0x0007, 0x0008, 0x7f62,\r
-+      0x0000, 0x8066, 0x0008, 0x0009, 0x0003, 0xc0d6, 0x000a, 0x004f,\r
-+      0x000b, 0x8907, 0x000a, 0x0040, 0x000b, 0x08f1, 0x0002, 0x004e,\r
-+      0x000b, 0x08f1, 0x0002, 0x0030, 0x0002, 0x7f2f, 0x0000, 0x7f00,\r
-+      0x0000, 0x8066, 0x0008, 0x000a, 0x000b, 0xc0e2, 0x0008, 0x1010,\r
-+      0x000c, 0x01c9, 0x000b, 0xb0ea, 0x000c, 0x032f, 0x0004, 0x01b3,\r
-+      0x000b, 0x7814, 0x0003, 0x0013, 0x0000, 0x0806, 0x0008, 0x8010,\r
-+      0x0000, 0x001f, 0x000c, 0x032f, 0x0000, 0x0310, 0x000c, 0x032f,\r
-+      0x000b, 0x00e8, 0x000a, 0x002f, 0x0000, 0x7f00, 0x0000, 0x8066,\r
-+      0x0008, 0x000a, 0x000b, 0xc0f5, 0x0004, 0x018c, 0x000a, 0x0040,\r
-+      0x000b, 0x090a, 0x000c, 0x01f9, 0x0000, 0x8000, 0x0000, 0x0002,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080, 0x0008, 0x0006,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x000a, 0x0003, 0xc103,\r
-+      0x0000, 0x8072, 0x0000, 0x4000, 0x000b, 0x00e8, 0x0008, 0x8010,\r
-+      0x0008, 0x001e, 0x0003, 0x010c, 0x0008, 0x8010, 0x0008, 0x001d,\r
-+      0x000c, 0x032f, 0x0008, 0x1010, 0x000c, 0x032f, 0x000b, 0x0014,\r
-+      0x0002, 0x4b4e, 0x0003, 0x0916, 0x0008, 0x808a, 0x0000, 0x0004,\r
-+      0x000b, 0x6116, 0x000f, 0x8000, 0x0008, 0x808a, 0x0000, 0x0004,\r
-+      0x000b, 0x0014, 0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080,\r
-+      0x0008, 0x0011, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009,\r
-+      0x000b, 0xc120, 0x000a, 0x004f, 0x0003, 0x897d, 0x0000, 0x8060,\r
-+      0x0000, 0x0400, 0x0009, 0x9080, 0x0008, 0x0005, 0x0008, 0x7f62,\r
-+      0x0000, 0x8066, 0x0008, 0x0009, 0x000b, 0xc12a, 0x0008, 0x0060,\r
-+      0x0008, 0x8062, 0x0000, 0x001f, 0x0000, 0x8066, 0x0000, 0x0209,\r
-+      0x0003, 0xc130, 0x000a, 0x014b, 0x000b, 0x097d, 0x0008, 0x8062,\r
-+      0x0008, 0x000f, 0x0000, 0x8066, 0x0000, 0x0211, 0x000b, 0xc137,\r
-+      0x0008, 0x01fe, 0x0001, 0x02d0, 0x0003, 0x897d, 0x000c, 0x0195,\r
-+      0x000b, 0x097d, 0x0008, 0x03a0, 0x0008, 0x8004, 0x0000, 0x0002,\r
-+      0x0000, 0x8006, 0x0000, 0x0043, 0x0008, 0x4908, 0x0008, 0x808a,\r
-+      0x0000, 0x0004, 0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080,\r
-+      0x0008, 0x0000, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x041a,\r
-+      0x000b, 0xc14c, 0x000b, 0xe14d, 0x0008, 0x4908, 0x0008, 0x480a,\r
-+      0x0008, 0x808a, 0x0000, 0x0004, 0x0008, 0x0060, 0x0008, 0x8062,\r
-+      0x0008, 0x002b, 0x0000, 0x8066, 0x0000, 0x0411, 0x000b, 0xc157,\r
-+      0x0008, 0x04fe, 0x0009, 0x02a0, 0x000b, 0x915e, 0x0002, 0x0500,\r
-+      0x0003, 0x097a, 0x0003, 0x015f, 0x0000, 0x05fe, 0x0001, 0x03a0,\r
-+      0x0003, 0x117a, 0x0000, 0x0d0c, 0x0008, 0x0d0e, 0x0008, 0x0d10,\r
-+      0x0000, 0x0d12, 0x0008, 0x0060, 0x0008, 0x8062, 0x0000, 0x000d,\r
-+      0x0000, 0x8066, 0x0008, 0x0832, 0x0003, 0xc16a, 0x0000, 0x800a,\r
-+      0x0000, 0x8005, 0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080,\r
-+      0x0008, 0x0011, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0a12,\r
-+      0x0003, 0xc174, 0x0008, 0x5006, 0x0008, 0x100e, 0x000c, 0x01a0,\r
-+      0x000b, 0x7814, 0x0003, 0x0013, 0x0008, 0x0208, 0x0008, 0x030a,\r
-+      0x000b, 0x0161, 0x0004, 0x018c, 0x0008, 0x808a, 0x0000, 0x0004,\r
-+      0x0008, 0x8010, 0x0008, 0x0021, 0x000c, 0x032f, 0x0008, 0x1010,\r
-+      0x000c, 0x032f, 0x0000, 0x4810, 0x000c, 0x032f, 0x0008, 0x4910,\r
-+      0x000c, 0x032f, 0x0008, 0x808a, 0x0000, 0x0004, 0x000b, 0x0014,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080, 0x0000, 0x0002,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0xb40a, 0x0003, 0xc193,\r
-+      0x000f, 0x4000, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x0a62,\r
-+      0x0000, 0x8066, 0x0000, 0x0411, 0x0003, 0xc19a, 0x0002, 0x0210,\r
-+      0x0001, 0xffc0, 0x0000, 0x0007, 0x0009, 0x03e0, 0x000f, 0x4000,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0001, 0x8380, 0x0000, 0x0002,\r
-+      0x0009, 0x0a80, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0000, 0x0e0a,\r
-+      0x000b, 0xc1a8, 0x0002, 0x0300, 0x0001, 0xffc0, 0x0000, 0x0007,\r
-+      0x0000, 0x7f06, 0x0002, 0x0a00, 0x0008, 0x7f62, 0x0000, 0x8066,\r
-+      0x0008, 0x060a, 0x0003, 0xc1b1, 0x000f, 0x4000, 0x0000, 0x0da0,\r
-+      0x0008, 0x0da2, 0x0008, 0x0da4, 0x0009, 0x8880, 0x0000, 0x0001,\r
-+      0x0008, 0x7f62, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x8066,\r
-+      0x0008, 0xa012, 0x0000, 0x0da6, 0x0008, 0x0da8, 0x0000, 0x0daa,\r
-+      0x0000, 0x0dac, 0x000b, 0xc1c1, 0x0009, 0x8880, 0x0008, 0x0009,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0xa03a, 0x000b, 0xc1c7,\r
-+      0x000f, 0x4000, 0x0009, 0x8880, 0x0008, 0x0005, 0x0000, 0x8060,\r
-+      0x0000, 0x0400, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009,\r
-+      0x000b, 0xc1d0, 0x0008, 0x0060, 0x0008, 0x8062, 0x0000, 0x000d,\r
-+      0x0000, 0x8066, 0x0008, 0x0021, 0x000b, 0xc1d6, 0x0000, 0x00fe,\r
-+      0x0001, 0x01d0, 0x000b, 0x89df, 0x0008, 0x02fe, 0x0009, 0x03d0,\r
-+      0x0003, 0x09df, 0x0000, 0x0d06, 0x000f, 0x4000, 0x0000, 0x8006,\r
-+      0x0000, 0x0001, 0x000f, 0x4000, 0x0008, 0x0060, 0x0008, 0x8062,\r
-+      0x0008, 0x002b, 0x0000, 0x8066, 0x0008, 0xa041, 0x0003, 0xc1e7,\r
-+      0x0002, 0x0243, 0x0003, 0x89ee, 0x0000, 0x54ac, 0x0000, 0x55ae,\r
-+      0x0008, 0x0da8, 0x0000, 0x0daa, 0x0000, 0x50b0, 0x0000, 0x51b2,\r
-+      0x0000, 0x0db4, 0x0008, 0x0db6, 0x0008, 0x0060, 0x0008, 0x8062,\r
-+      0x0000, 0x0007, 0x0000, 0x8066, 0x0008, 0xa452, 0x000b, 0xc1f7,\r
-+      0x000f, 0x4000, 0x000a, 0x3945, 0x0003, 0x8a03, 0x0000, 0x8072,\r
-+      0x0008, 0x4040, 0x0007, 0x0000, 0x000a, 0x3945, 0x000b, 0x8a01,\r
-+      0x000f, 0x4000, 0x0000, 0x8072, 0x0000, 0x4000, 0x0007, 0x0000,\r
-+      0x0007, 0x0000, 0x0007, 0x0000, 0x000a, 0x3945, 0x0003, 0x09fb,\r
-+      0x0003, 0x0203, 0x000a, 0x3a40, 0x000b, 0x8817, 0x0008, 0x2b24,\r
-+      0x0008, 0x2b24, 0x0003, 0x5a0d, 0x0008, 0x8054, 0x0000, 0x0002,\r
-+      0x0002, 0x1242, 0x0003, 0x0a51, 0x000a, 0x3a45, 0x000b, 0x0a42,\r
-+      0x000a, 0x1e10, 0x0000, 0x7f3c, 0x000b, 0x0a3f, 0x0002, 0x1d00,\r
-+      0x0000, 0x7f3a, 0x0000, 0x0d60, 0x0008, 0x7f62, 0x0000, 0x8066,\r
-+      0x0008, 0x0009, 0x0003, 0xc21d, 0x0008, 0x00fc, 0x000b, 0xb23c,\r
-+      0x0000, 0x1c60, 0x0008, 0x8062, 0x0000, 0x0001, 0x0000, 0x8066,\r
-+      0x0008, 0x0009, 0x000b, 0xc225, 0x0008, 0x00fc, 0x000b, 0x3344,\r
-+      0x0000, 0x0038, 0x0008, 0x0060, 0x0008, 0x8062, 0x0000, 0x0019,\r
-+      0x0000, 0x8066, 0x0008, 0x0009, 0x0003, 0xc22e, 0x0009, 0x80c0,\r
-+      0x0008, 0x00ff, 0x0008, 0x7f3e, 0x0000, 0x0d60, 0x0008, 0x0efe,\r
-+      0x0001, 0x1f80, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009,\r
-+      0x000b, 0xc238, 0x0008, 0x003a, 0x0000, 0x1dfe, 0x000b, 0x0219,\r
-+      0x0008, 0x0036, 0x0004, 0x0096, 0x000b, 0x0251, 0x0000, 0x8074,\r
-+      0x0000, 0x2000, 0x000b, 0x0251, 0x0002, 0x3a44, 0x0003, 0x0b6f,\r
-+      0x0000, 0x8074, 0x0000, 0x1000, 0x0000, 0x2d0e, 0x0000, 0x2d0e,\r
-+      0x0003, 0xb341, 0x0008, 0x26fe, 0x0008, 0x26fe, 0x0008, 0x2700,\r
-+      0x0008, 0x2700, 0x0009, 0x00d0, 0x000b, 0x8a61, 0x0000, 0x8074,\r
-+      0x0008, 0x4040, 0x0003, 0x5a51, 0x0003, 0x5209, 0x000a, 0x3a46,\r
-+      0x000b, 0x8a61, 0x0002, 0x3a47, 0x000b, 0x0a5c, 0x0008, 0x8054,\r
-+      0x0000, 0x0004, 0x0000, 0x8074, 0x0000, 0x8000, 0x000b, 0x02ba,\r
-+      0x0009, 0x92c0, 0x0000, 0x0fc8, 0x000b, 0x0813, 0x000a, 0x1246,\r
-+      0x0003, 0x8b3b, 0x0000, 0x1a60, 0x0008, 0x8062, 0x0000, 0x0002,\r
-+      0x0000, 0x8066, 0x0000, 0x367a, 0x0003, 0xc266, 0x0009, 0x92c0,\r
-+      0x0008, 0x0780, 0x000b, 0x8b55, 0x0002, 0x124b, 0x000b, 0x0a6f,\r
-+      0x0002, 0x2e4d, 0x0002, 0x2e4d, 0x0003, 0x0b41, 0x000a, 0x3a46,\r
-+      0x000b, 0x8a7c, 0x000b, 0x5a71, 0x0008, 0x8054, 0x0000, 0x0004,\r
-+      0x000a, 0x1243, 0x000b, 0x0ab8, 0x0008, 0x8010, 0x0000, 0x000d,\r
-+      0x000c, 0x032f, 0x0000, 0x1810, 0x000c, 0x032f, 0x0003, 0x02b8,\r
-+      0x000a, 0x194d, 0x0003, 0x0a80, 0x000a, 0x1243, 0x0003, 0x0b4b,\r
-+      0x0003, 0x5a80, 0x0008, 0x8054, 0x0000, 0x0004, 0x000a, 0x192e,\r
-+      0x0008, 0x7f32, 0x000a, 0x1947, 0x000b, 0x0ab2, 0x0002, 0x194f,\r
-+      0x000b, 0x0a90, 0x0004, 0x0324, 0x0000, 0x1810, 0x000c, 0x01c9,\r
-+      0x0003, 0xb2ab, 0x000c, 0x032f, 0x0004, 0x01b3, 0x0003, 0x02b8,\r
-+      0x0000, 0x1a60, 0x0008, 0x8062, 0x0000, 0x001f, 0x0000, 0x8066,\r
-+      0x0008, 0x0009, 0x0003, 0xc295, 0x000a, 0x004c, 0x0003, 0x8ab2,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0001, 0x9880, 0x0000, 0x0007,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0000, 0x320a, 0x0003, 0xc29f,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0001, 0x9880, 0x0008, 0x0012,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x1e0a, 0x000b, 0xc2a7,\r
-+      0x0000, 0x1826, 0x0000, 0x1928, 0x0003, 0x02b8, 0x0000, 0x0806,\r
-+      0x0008, 0x8010, 0x0000, 0x001f, 0x000c, 0x032f, 0x0000, 0x0310,\r
-+      0x000c, 0x032f, 0x0003, 0x02b8, 0x0004, 0x0324, 0x0008, 0x8010,\r
-+      0x0000, 0x0001, 0x000c, 0x032f, 0x0000, 0x1810, 0x000c, 0x032f,\r
-+      0x0000, 0x8074, 0x0008, 0xf000, 0x0000, 0x0d30, 0x0002, 0x3a42,\r
-+      0x0003, 0x8ac0, 0x0000, 0x15fc, 0x0003, 0xb06a, 0x0003, 0x0013,\r
-+      0x0000, 0x8074, 0x0000, 0x0501, 0x0008, 0x8010, 0x0008, 0x000c,\r
-+      0x000c, 0x032f, 0x0003, 0x0013, 0x0009, 0xbbe0, 0x0008, 0x0030,\r
-+      0x000b, 0x8adc, 0x0000, 0x18fe, 0x0009, 0x3ce0, 0x0003, 0x0ad9,\r
-+      0x0008, 0x15fe, 0x0009, 0x3ce0, 0x0003, 0x0ad9, 0x0008, 0x13fe,\r
-+      0x0009, 0x3ce0, 0x000b, 0x8ad5, 0x0004, 0x031d, 0x0008, 0x0d26,\r
-+      0x000b, 0x02d6, 0x000c, 0x031f, 0x0008, 0x8076, 0x0000, 0x0040,\r
-+      0x0003, 0x031a, 0x0008, 0x8076, 0x0008, 0x0041, 0x0003, 0x031a,\r
-+      0x0009, 0xbbe0, 0x0000, 0x0032, 0x0003, 0x8ae1, 0x0008, 0x3c1e,\r
-+      0x0003, 0x031a, 0x0009, 0xbbe0, 0x0000, 0x0037, 0x0003, 0x8aff,\r
-+      0x0000, 0x18fe, 0x0009, 0x3ce0, 0x000b, 0x8ad9, 0x0008, 0x8076,\r
-+      0x0000, 0x0040, 0x0000, 0x1a60, 0x0008, 0x8062, 0x0000, 0x000d,\r
-+      0x0008, 0x2604, 0x0008, 0x2604, 0x0008, 0x2706, 0x0008, 0x2706,\r
-+      0x0000, 0x2808, 0x0000, 0x2808, 0x0000, 0x290a, 0x0000, 0x290a,\r
-+      0x0000, 0x8066, 0x0000, 0x0422, 0x0003, 0xc2f6, 0x0004, 0x0324,\r
-+      0x0008, 0x8054, 0x0000, 0x0004, 0x0000, 0x8074, 0x0008, 0xf000,\r
-+      0x0000, 0x8072, 0x0000, 0x8000, 0x000b, 0x02ba, 0x0009, 0xbbe0,\r
-+      0x0000, 0x0038, 0x000b, 0x8b11, 0x0000, 0x18fe, 0x0009, 0x3ce0,\r
-+      0x000b, 0x0b0e, 0x0008, 0x15fe, 0x0009, 0x3ce0, 0x0003, 0x8acf,\r
-+      0x000c, 0x031f, 0x0008, 0x8076, 0x0000, 0x0040, 0x0000, 0x8072,\r
-+      0x0000, 0x8000, 0x000b, 0x0366, 0x0008, 0x8076, 0x0008, 0x0042,\r
-+      0x0003, 0x031a, 0x0009, 0xbbe0, 0x0000, 0x0016, 0x0003, 0x8b1a,\r
-+      0x0002, 0x3a44, 0x0003, 0x8816, 0x0000, 0x8072, 0x0000, 0x8000,\r
-+      0x000f, 0x8000, 0x0003, 0x0013, 0x0000, 0x8072, 0x0000, 0x8000,\r
-+      0x0003, 0x0013, 0x0002, 0x1430, 0x0003, 0x0320, 0x000a, 0x3d30,\r
-+      0x0000, 0x7f00, 0x0001, 0xbc80, 0x0000, 0x0007, 0x000b, 0x0328,\r
-+      0x000a, 0x1930, 0x0000, 0x7f00, 0x0001, 0x9880, 0x0000, 0x0007,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0008, 0x7f62, 0x0000, 0x8066,\r
-+      0x0008, 0x000a, 0x000b, 0xc32d, 0x000f, 0x4000, 0x000b, 0x232f,\r
-+      0x0008, 0x0870, 0x000f, 0x4000, 0x0009, 0xbac0, 0x0008, 0x0090,\r
-+      0x000b, 0x0b38, 0x0000, 0x8074, 0x0000, 0x0706, 0x000b, 0x033a,\r
-+      0x0000, 0x8074, 0x0000, 0x0703, 0x000f, 0x4000, 0x0008, 0x8010,\r
-+      0x0000, 0x0023, 0x000b, 0x0374, 0x0008, 0x8010, 0x0000, 0x0008,\r
-+      0x000b, 0x0374, 0x0008, 0x8010, 0x0008, 0x0022, 0x000b, 0x0374,\r
-+      0x0004, 0x0324, 0x0008, 0x8010, 0x0000, 0x0007, 0x000c, 0x032f,\r
-+      0x0000, 0x1810, 0x000c, 0x032f, 0x000b, 0x037e, 0x0004, 0x0324,\r
-+      0x0008, 0x8010, 0x0008, 0x001b, 0x000c, 0x032f, 0x0000, 0x1810,\r
-+      0x000c, 0x032f, 0x0000, 0x8074, 0x0000, 0xf080, 0x0000, 0x0d30,\r
-+      0x0003, 0x0013, 0x0008, 0x8010, 0x0008, 0x0009, 0x000b, 0x0374,\r
-+      0x0008, 0x8010, 0x0008, 0x0005, 0x000b, 0x0374, 0x0008, 0x808c,\r
-+      0x0000, 0x0001, 0x0007, 0x0000, 0x0008, 0x8010, 0x0000, 0x0004,\r
-+      0x000a, 0x4143, 0x0003, 0x0878, 0x0002, 0x3a44, 0x0003, 0x8813,\r
-+      0x0008, 0x0d2a, 0x000b, 0x0374, 0x0008, 0x8010, 0x0008, 0x0003,\r
-+      0x0003, 0x0376, 0x0008, 0x8010, 0x0000, 0x000b, 0x0003, 0x0376,\r
-+      0x0008, 0x8010, 0x0000, 0x0002, 0x0003, 0x0376, 0x0002, 0x3a47,\r
-+      0x000b, 0x8a51, 0x0008, 0x8010, 0x0008, 0x0006, 0x0003, 0x0376,\r
-+      0x0000, 0x8074, 0x0008, 0xf000, 0x000c, 0x032f, 0x000c, 0x0332,\r
-+      0x000a, 0x3a40, 0x000b, 0x0813, 0x0008, 0x8010, 0x0008, 0x000c,\r
-+      0x000c, 0x032f, 0x0003, 0x0013, 0x0000, 0x8074, 0x0000, 0xf080,\r
-+      0x0000, 0x0d30, 0x0002, 0x2e4d, 0x0002, 0x2e4d, 0x0003, 0x0b87,\r
-+      0x0008, 0x8054, 0x0000, 0x0019, 0x0003, 0x0013, 0x0008, 0x8054,\r
-+      0x0008, 0x0009, 0x0003, 0x0013, 0x0002, 0x3a44, 0x0003, 0x8813,\r
-+      0x000b, 0x0369, 0xec89, 0x9da0\r
-+};\r
-+unsigned short rseqflx_code_length01 = 0x071c;\r
-+/*\r
-+ *\r
-+ */\r
-+\r
-+unsigned long xseqflx_code_addr01 = 0x0001e000 ;\r
-+unsigned short xseqflx_code01[] = { \r
-+0x0013, 0x0003, 0x0000, 0x0fe2, 0x0001, 0xe000, 0x0005, 0x0032,\r
-+      0x0000, 0x0010, 0x0015, 0x0033, 0x0010, 0xbb39, 0x000b, 0x8007,\r
-+      0x0004, 0x0107, 0x0004, 0x0119, 0x0010, 0xc000, 0x0000, 0xc001,\r
-+      0x0000, 0xc0b0, 0x0010, 0xc0b1, 0x0010, 0xc0b2, 0x0000, 0xc0b3,\r
-+      0x0010, 0xc0b4, 0x0000, 0xc0b5, 0x0000, 0xc0b6, 0x0010, 0xc0b7,\r
-+      0x0010, 0xc0b8, 0x0000, 0xc0b9, 0x0000, 0xc0ba, 0x0000, 0xc0c2,\r
-+      0x0010, 0xc0c3, 0x0000, 0xc0c4, 0x0010, 0xc0c5, 0x0010, 0xc0c6,\r
-+      0x0000, 0xc0c7, 0x0000, 0xc0c8, 0x0010, 0xc0c9, 0x0010, 0xc0ca,\r
-+      0x0000, 0xc0cb, 0x0010, 0xc0cc, 0x0000, 0xc0cd, 0x0000, 0xc0ce,\r
-+      0x0010, 0xc0cf, 0x0015, 0x0039, 0x0010, 0xff00, 0x0015, 0x003a,\r
-+      0x0010, 0xff00, 0x0005, 0x00d0, 0x0010, 0xff00, 0x0015, 0x00d1,\r
-+      0x0010, 0xff00, 0x0012, 0x3a40, 0x000b, 0x1031, 0x0002, 0x7940,\r
-+      0x000b, 0x112b, 0x0002, 0x3a42, 0x001b, 0x1035, 0x0003, 0xb035,\r
-+      0x0013, 0xa1cd, 0x0002, 0x3a41, 0x001b, 0x1039, 0x0012, 0x7941,\r
-+      0x000b, 0x12eb, 0x0013, 0xe051, 0x0012, 0xd042, 0x0003, 0x103f,\r
-+      0x0000, 0x75ff, 0x0002, 0xff41, 0x000b, 0x1051, 0x0000, 0x0cfe,\r
-+      0x0013, 0x6047, 0x0011, 0x02e8, 0x0010, 0x0000, 0x0003, 0x1371,\r
-+      0x0011, 0x02e8, 0x0010, 0x0005, 0x0013, 0x13fe, 0x0012, 0xd042,\r
-+      0x0013, 0x104c, 0x0000, 0x75ff, 0x0012, 0xff40, 0x000b, 0x1051,\r
-+      0x0000, 0x12fe, 0x0003, 0x6051, 0x0001, 0x0fe8, 0x0010, 0x0000,\r
-+      0x0003, 0x15e8, 0x0015, 0x0030, 0x0000, 0x0400, 0x0010, 0xc131,\r
-+      0x0015, 0x0033, 0x0010, 0xb211, 0x001b, 0x8056, 0x0010, 0xb2ff,\r
-+      0x0001, 0xb3e0, 0x000c, 0x10c9, 0x000b, 0xf02d, 0x0011, 0x3be8,\r
-+      0x0000, 0x0010, 0x000b, 0x106e, 0x0000, 0x0afe, 0x001b, 0x6062,\r
-+      0x0000, 0x3c0b, 0x0013, 0x006a, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0001, 0x0a88, 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0x3c0a, 0x001b, 0x8069, 0x0010, 0x3c0a, 0x0002, 0x0c00,\r
-+      0x0010, 0xff0c, 0x0013, 0x00c6, 0x0011, 0x3be8, 0x0010, 0x0012,\r
-+      0x001b, 0x1081, 0x0010, 0x08fe, 0x001b, 0x6075, 0x0010, 0x3c09,\r
-+      0x0013, 0x007d, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0888,\r
-+      0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0x3c0a,\r
-+      0x000b, 0x807c, 0x0000, 0x3c08, 0x0002, 0x0c00, 0x0010, 0xff0c,\r
-+      0x0013, 0x00c6, 0x0011, 0x3be8, 0x0000, 0x0013, 0x001b, 0x1087,\r
-+      0x0000, 0x3cb0, 0x0014, 0x00d9, 0x0013, 0x00c6, 0x0011, 0x3be8,\r
-+      0x0000, 0x0019, 0x001b, 0x109a, 0x0010, 0x04fe, 0x000b, 0x608e,\r
-+      0x0010, 0x3c05, 0x0013, 0x0096, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0488, 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0x3c0a, 0x001b, 0x8095, 0x0000, 0x3c04, 0x0002, 0x0c00,\r
-+      0x0010, 0xff0c, 0x0013, 0x00c6, 0x0011, 0x3be8, 0x0000, 0x0015,\r
-+      0x001b, 0x10a6, 0x0004, 0x0110, 0x0014, 0x0122, 0x0015, 0x0039,\r
-+      0x0000, 0x8000, 0x0017, 0x8000, 0x0004, 0x0107, 0x0004, 0x0119,\r
-+      0x0014, 0x00f2, 0x0013, 0x002d, 0x0011, 0x3be8, 0x0000, 0x0016,\r
-+      0x001b, 0x10b8, 0x0001, 0x0fe8, 0x0010, 0x0000, 0x0003, 0x10b2,\r
-+      0x0001, 0x0fe8, 0x0000, 0x0002, 0x0003, 0x10b2, 0x0015, 0x0039,\r
-+      0x0010, 0x1010, 0x0013, 0x00c6, 0x0015, 0x0039, 0x0000, 0x5040,\r
-+      0x0015, 0x00b8, 0x0000, 0x0008, 0x0014, 0x07ed, 0x0013, 0x00c6,\r
-+      0x0011, 0x3be8, 0x0010, 0x0017, 0x001b, 0x10bd, 0x0010, 0x3cc3,\r
-+      0x0013, 0x00c6, 0x0011, 0x3be8, 0x0010, 0x0018, 0x000b, 0x10c2,\r
-+      0x0000, 0x3cc2, 0x0013, 0x00c6, 0x0005, 0x00ce, 0x0000, 0x0001,\r
-+      0x0000, 0x3bcf, 0x0014, 0x07b1, 0x0015, 0x0039, 0x0000, 0x8000,\r
-+      0x0013, 0x002d, 0x0001, 0xb288, 0x0000, 0x0002, 0x0001, 0xc180,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x80cf,\r
-+      0x0002, 0xb200, 0x0011, 0xffc8, 0x0000, 0x0007, 0x0010, 0xffb2,\r
-+      0x0010, 0xc131, 0x0015, 0x0033, 0x0010, 0xb20a, 0x0001, 0xb0d0,\r
-+      0x001b, 0x80d8, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0xb088,\r
-+      0x0000, 0x0010, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xb109,\r
-+      0x000b, 0x80e0, 0x0001, 0xb1e8, 0x0010, 0xffff, 0x0013, 0x10f1,\r
-+      0x0000, 0x11fe, 0x000b, 0x60e8, 0x0000, 0xb012, 0x0013, 0x00f0,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0x1188, 0x0010, 0x0003,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb00a, 0x000b, 0x80ef,\r
-+      0x0000, 0xb011, 0x0017, 0x4000, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0xbc88, 0x0010, 0x001e, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xc411, 0x001b, 0x80f9, 0x0011, 0xbc88, 0x0010, 0x0017,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xc609, 0x001b, 0x80ff,\r
-+      0x0011, 0xbc88, 0x0010, 0x0036, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xc709, 0x000b, 0x8105, 0x0017, 0x4000, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0001, 0xbb88, 0x0000, 0x0001, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0x0269, 0x001b, 0x810e, 0x0017, 0x4000,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0xbb88, 0x0000, 0x0001,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0x026a, 0x000b, 0x8117,\r
-+      0x0017, 0x4000, 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0xbb88,\r
-+      0x0010, 0x000f, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0x0f59,\r
-+      0x001b, 0x8120, 0x0017, 0x4000, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0001, 0xbb88, 0x0010, 0x000f, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0x0f5a, 0x001b, 0x8129, 0x0017, 0x4000, 0x0000, 0xd0ff,\r
-+      0x0012, 0xff40, 0x000b, 0x1031, 0x0015, 0x00d1, 0x0010, 0x0101,\r
-+      0x0003, 0x9130, 0x0005, 0x0079, 0x0000, 0x0001, 0x0003, 0x9133,\r
-+      0x0015, 0x00d1, 0x0000, 0x0100, 0x0011, 0x02e8, 0x0000, 0x0002,\r
-+      0x0003, 0x1152, 0x0011, 0x02e8, 0x0000, 0x0001, 0x0013, 0x116a,\r
-+      0x0011, 0x02e8, 0x0000, 0x0004, 0x0013, 0x1188, 0x0011, 0x02e8,\r
-+      0x0010, 0x0003, 0x0003, 0x11b9, 0x0005, 0x0002, 0x0010, 0x0000,\r
-+      0x0000, 0xc00e, 0x0000, 0xc00d, 0x0010, 0xc003, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0001, 0xbd88, 0x0010, 0x0009, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0010, 0xc00a, 0x000b, 0x814e, 0x0012, 0xd042,\r
-+      0x0013, 0x1031, 0x0003, 0x004c, 0x0012, 0x7849, 0x0003, 0x11c7,\r
-+      0x0010, 0x0dfe, 0x0003, 0x6144, 0x0012, 0x0c10, 0x0010, 0xff0c,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x0003,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb309, 0x000b, 0x815f,\r
-+      0x0010, 0xb3fe, 0x0013, 0x6167, 0x0010, 0xb30b, 0x0015, 0x0033,\r
-+      0x0010, 0xc00a, 0x000b, 0x8165, 0x0013, 0x01bc, 0x0000, 0xc00b,\r
-+      0x0010, 0xc00a, 0x0013, 0x01bc, 0x0000, 0x78b0, 0x0012, 0xb044,\r
-+      0x0003, 0x11c7, 0x0002, 0xb049, 0x0003, 0x11c7, 0x0010, 0x71ff,\r
-+      0x0012, 0xff38, 0x0010, 0xff71, 0x0010, 0x0dfe, 0x0003, 0x6142,\r
-+      0x0012, 0x0c10, 0x0010, 0xff0c, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0d88, 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xb309, 0x000b, 0x817d, 0x0010, 0xb3fe, 0x0013, 0x6185,\r
-+      0x0000, 0xb309, 0x0015, 0x0033, 0x0010, 0xc00a, 0x001b, 0x8183,\r
-+      0x0013, 0x01bc, 0x0010, 0xc009, 0x0000, 0xc008, 0x0013, 0x01bc,\r
-+      0x0000, 0x78b0, 0x0012, 0xb044, 0x0003, 0x11c7, 0x0002, 0xb049,\r
-+      0x0003, 0x11c7, 0x0010, 0x71ff, 0x0012, 0xff38, 0x0010, 0xff71,\r
-+      0x0010, 0x0dfe, 0x0003, 0x6142, 0x0012, 0x0c10, 0x0010, 0xff0c,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x0003,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb309, 0x001b, 0x819b,\r
-+      0x0010, 0xb3fe, 0x0003, 0x61a3, 0x0000, 0xb305, 0x0015, 0x0033,\r
-+      0x0010, 0xc00a, 0x001b, 0x81a1, 0x0003, 0x01a5, 0x0010, 0xc005,\r
-+      0x0000, 0xc004, 0x0002, 0x033f, 0x0002, 0xff27, 0x0000, 0x0db8,\r
-+      0x0004, 0x0366, 0x0000, 0x0db8, 0x0014, 0x07ed, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0xbc88, 0x0010, 0x0000, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0xb309, 0x000b, 0x81b2, 0x0011, 0xb3e8,\r
-+      0x0000, 0x0002, 0x000b, 0x1142, 0x0005, 0x0002, 0x0010, 0x0005,\r
-+      0x0003, 0x0144, 0x0012, 0x7849, 0x0003, 0x11c7, 0x0003, 0x0144,\r
-+      0x0000, 0x0db8, 0x0012, 0x0345, 0x001b, 0x11c2, 0x0002, 0x033f,\r
-+      0x0004, 0x0366, 0x0003, 0x0142, 0x0002, 0x033f, 0x0002, 0xff27,\r
-+      0x0004, 0x0366, 0x0014, 0x07ed, 0x0003, 0x0142, 0x0015, 0x00b8,\r
-+      0x0000, 0x0001, 0x0015, 0x003a, 0x0010, 0x0101, 0x0014, 0x07ed,\r
-+      0x0013, 0x014f, 0x0000, 0x2bba, 0x0003, 0xb1ce, 0x0005, 0x002a,\r
-+      0x0000, 0x0002, 0x0001, 0xbac8, 0x0000, 0x0700, 0x000b, 0x12a6,\r
-+      0x0011, 0x15e8, 0x0000, 0x0002, 0x0013, 0x1221, 0x0011, 0x15e8,\r
-+      0x0000, 0x0001, 0x0013, 0x11dd, 0x0005, 0x0015, 0x0010, 0x0000,\r
-+      0x0013, 0x0204, 0x0005, 0x0015, 0x0010, 0x0000, 0x0002, 0xba43,\r
-+      0x0013, 0x1205, 0x0013, 0xb1e1, 0x0005, 0x002a, 0x0000, 0x0004,\r
-+      0x0012, 0xba42, 0x0003, 0x120b, 0x0012, 0x104b, 0x001b, 0x1204,\r
-+      0x0000, 0x1a30, 0x0005, 0x0031, 0x0000, 0x0002, 0x0015, 0x0033,\r
-+      0x0000, 0x1b2a, 0x000b, 0x81ed, 0x0010, 0x20b0, 0x0010, 0x21b1,\r
-+      0x0010, 0x22b2, 0x0010, 0x23b3, 0x0010, 0x24b4, 0x0010, 0x25b5,\r
-+      0x0010, 0x28b8, 0x0010, 0x29b9, 0x0000, 0x1a30, 0x0005, 0x0031,\r
-+      0x0000, 0x0007, 0x0015, 0x0033, 0x0010, 0xb032, 0x001b, 0x81fb,\r
-+      0x0000, 0x1a30, 0x0005, 0x0031, 0x0010, 0x000f, 0x0015, 0x0033,\r
-+      0x0010, 0xb812, 0x001b, 0x8201, 0x0005, 0x0015, 0x0010, 0x0000,\r
-+      0x0013, 0x0035, 0x0000, 0x1efe, 0x0013, 0x6219, 0x0014, 0x024b,\r
-+      0x0000, 0x1efe, 0x000c, 0x624b, 0x0013, 0x0204, 0x0000, 0x1a30,\r
-+      0x0005, 0x0031, 0x0000, 0x0020, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x001b, 0x8210, 0x0002, 0xb02f, 0x0000, 0xffb0, 0x0005, 0x0031,\r
-+      0x0000, 0x0020, 0x0015, 0x0033, 0x0000, 0xb00a, 0x000b, 0x8217,\r
-+      0x0003, 0x01e8, 0x0015, 0x00b8, 0x0010, 0x0005, 0x0014, 0x07ed,\r
-+      0x0000, 0x13b8, 0x0015, 0x003a, 0x0010, 0x0404, 0x0014, 0x07ed,\r
-+      0x0013, 0x0204, 0x0005, 0x0015, 0x0000, 0x0001, 0x0012, 0xba42,\r
-+      0x0013, 0x122e, 0x0003, 0xb225, 0x0010, 0x2bff, 0x0012, 0xff4f,\r
-+      0x001b, 0x11cd, 0x0002, 0xba43, 0x001b, 0x120b, 0x0000, 0x1efe,\r
-+      0x000c, 0x624b, 0x0013, 0x0204, 0x0010, 0x28b8, 0x0010, 0x29b9,\r
-+      0x0004, 0x02bc, 0x0002, 0x3a42, 0x001b, 0x1204, 0x0000, 0x1c30,\r
-+      0x0015, 0x00ff, 0x0000, 0x0002, 0x0002, 0x1f43, 0x001b, 0x123b,\r
-+      0x0001, 0xff88, 0x0000, 0x0002, 0x0013, 0x023d, 0x0001, 0xff88,\r
-+      0x0000, 0x0004, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb011,\r
-+      0x001b, 0x8240, 0x0000, 0xb0ff, 0x0011, 0x16a0, 0x0000, 0xff16,\r
-+      0x000b, 0x24e2, 0x0002, 0xb100, 0x0003, 0x0248, 0x0010, 0xb1ff,\r
-+      0x0001, 0x17a0, 0x0010, 0xff17, 0x0013, 0x020b, 0x0000, 0x16ff,\r
-+      0x0001, 0x18a0, 0x0010, 0xff00, 0x001b, 0x2252, 0x0002, 0x1700,\r
-+      0x0013, 0x12a5, 0x0003, 0x0253, 0x0010, 0x17ff, 0x0011, 0x19a0,\r
-+      0x0013, 0x22a5, 0x0011, 0x00d0, 0x0013, 0x12a5, 0x0000, 0x1c30,\r
-+      0x0000, 0x1b31, 0x0015, 0x0033, 0x0000, 0xb131, 0x001b, 0x825b,\r
-+      0x0013, 0xb25c, 0x0000, 0xb120, 0x0010, 0xb221, 0x0002, 0x1f43,\r
-+      0x001b, 0x1268, 0x0010, 0xc022, 0x0000, 0xc023, 0x0000, 0xb324,\r
-+      0x0000, 0xb425, 0x0010, 0xb3b5, 0x0000, 0xb4b6, 0x0003, 0x026c,\r
-+      0x0000, 0xb322, 0x0000, 0xb423, 0x0000, 0xb524, 0x0010, 0xb625,\r
-+      0x0013, 0xb26c, 0x0005, 0x002a, 0x0000, 0x0001, 0x0012, 0x1500,\r
-+      0x0000, 0xff15, 0x0000, 0x16ff, 0x0001, 0xb580, 0x0000, 0xff16,\r
-+      0x000b, 0x2277, 0x0002, 0x1700, 0x0003, 0x0278, 0x0010, 0x17ff,\r
-+      0x0001, 0xb680, 0x0010, 0xff17, 0x0012, 0x1e10, 0x0010, 0xff1e,\r
-+      0x0003, 0x62a5, 0x0002, 0x1d00, 0x0010, 0xff1d, 0x0010, 0xc030,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x8283,\r
-+      0x0010, 0xb0fe, 0x000b, 0x62a4, 0x0000, 0x1c30, 0x0005, 0x0031,\r
-+      0x0000, 0x0001, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x828b,\r
-+      0x0010, 0xb0fe, 0x000b, 0x6291, 0x0005, 0x00ce, 0x0010, 0x0005,\r
-+      0x0003, 0x07b1, 0x0010, 0xb01c, 0x0000, 0x1c30, 0x0005, 0x0031,\r
-+      0x0000, 0x0019, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x8297,\r
-+      0x0001, 0xb0c8, 0x0010, 0x00ff, 0x0000, 0xff1f, 0x0010, 0xc030,\r
-+      0x0011, 0xbe80, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x000b, 0x82a0, 0x0000, 0xb01d, 0x0010, 0x1dff, 0x0013, 0x027f,\r
-+      0x0000, 0xb01b, 0x0017, 0x4000, 0x0002, 0x3a41, 0x0003, 0x12ae,\r
-+      0x0003, 0xb2a8, 0x0005, 0x002a, 0x0000, 0x0004, 0x0005, 0x0015,\r
-+      0x0010, 0x0000, 0x0013, 0x0204, 0x0000, 0x1a30, 0x0005, 0x0031,\r
-+      0x0000, 0x0002, 0x0015, 0x0033, 0x0000, 0x1b2a, 0x001b, 0x82b3,\r
-+      0x0015, 0x00b8, 0x0000, 0x0004, 0x0014, 0x07ed, 0x0000, 0x13b8,\r
-+      0x0015, 0x003a, 0x0010, 0x0404, 0x0014, 0x07ed, 0x0013, 0x0039,\r
-+      0x0002, 0x1e00, 0x0010, 0xff1e, 0x0012, 0x1d10, 0x0010, 0xff1d,\r
-+      0x0010, 0xc030, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x001b, 0x82c4, 0x0010, 0xb0fe, 0x000b, 0x62e9, 0x0000, 0x1cff,\r
-+      0x0001, 0x1ae0, 0x0003, 0x12d3, 0x0000, 0x1c30, 0x0005, 0x0031,\r
-+      0x0010, 0x0000, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x82cf,\r
-+      0x0010, 0xb0fe, 0x000b, 0x62d3, 0x0000, 0x1aff, 0x0000, 0xff1c,\r
-+      0x0000, 0x1c30, 0x0005, 0x0031, 0x0000, 0x0019, 0x0015, 0x0033,\r
-+      0x0000, 0xb009, 0x001b, 0x82d9, 0x0001, 0xb0c8, 0x0010, 0x000f,\r
-+      0x0000, 0xff1f, 0x0001, 0xbf80, 0x0010, 0xff1d, 0x0010, 0xc030,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x82e3,\r
-+      0x0010, 0xb0fe, 0x000b, 0x62e9, 0x0005, 0x00ce, 0x0010, 0x0006,\r
-+      0x0003, 0x07b1, 0x0000, 0xb01b, 0x0017, 0x4000, 0x0010, 0x79b0,\r
-+      0x0000, 0xd0ff, 0x0012, 0xff40, 0x001b, 0x1039, 0x0015, 0x00d1,\r
-+      0x0010, 0x0101, 0x0013, 0x92f1, 0x0005, 0x0079, 0x0000, 0x0002,\r
-+      0x0013, 0x92f4, 0x0015, 0x00d1, 0x0000, 0x0100, 0x0010, 0x13fe,\r
-+      0x0003, 0x6329, 0x0012, 0xb04e, 0x000b, 0x133e, 0x0012, 0x784a,\r
-+      0x0003, 0x1344, 0x0000, 0x75ff, 0x0011, 0xffc8, 0x0010, 0x1800,\r
-+      0x001b, 0x1344, 0x0001, 0x0fe8, 0x0000, 0x0001, 0x000b, 0x130d,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x1388, 0x0000, 0x000e,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0x8f0a, 0x000b, 0x830b,\r
-+      0x0003, 0x034a, 0x0001, 0x0fe8, 0x0000, 0x0002, 0x001b, 0x1318,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0005, 0x0031, 0x0000, 0x001a,\r
-+      0x0015, 0x0033, 0x0010, 0xc00a, 0x000b, 0x8316, 0x0003, 0x034a,\r
-+      0x0001, 0x0fe8, 0x0010, 0x0000, 0x0013, 0x131f, 0x0005, 0x00ce,\r
-+      0x0000, 0x0007, 0x0010, 0x0fcf, 0x0013, 0x07ab, 0x0000, 0x13b8,\r
-+      0x0002, 0x1045, 0x0003, 0x1327, 0x0012, 0x103f, 0x0002, 0xff27,\r
-+      0x0004, 0x0366, 0x0014, 0x07ed, 0x0003, 0x0329, 0x0012, 0x103f,\r
-+      0x0004, 0x0366, 0x0015, 0x000f, 0x0010, 0x0000, 0x0002, 0x3944,\r
-+      0x0013, 0x1332, 0x0015, 0x0039, 0x0000, 0x5040, 0x0015, 0x00b8,\r
-+      0x0000, 0x0008, 0x0014, 0x07ed, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0001, 0xbd88, 0x0010, 0x000c, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0xc00a, 0x001b, 0x8339, 0x0010, 0xc014, 0x0000, 0xc013,\r
-+      0x0000, 0xc010, 0x0013, 0x0039, 0x0015, 0x00b8, 0x0010, 0x0003,\r
-+      0x0015, 0x003a, 0x0010, 0x0202, 0x0014, 0x07ed, 0x0003, 0x033d,\r
-+      0x0015, 0x00b8, 0x0000, 0x0002, 0x0015, 0x003a, 0x0010, 0x0202,\r
-+      0x0014, 0x07ed, 0x0003, 0x033d, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x1388, 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xb009, 0x000b, 0x8351, 0x0011, 0x1388, 0x0010, 0x0003,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xc00a, 0x000b, 0x8357,\r
-+      0x0010, 0xb0fe, 0x0013, 0x635c, 0x0000, 0xb012, 0x0003, 0x035e,\r
-+      0x0010, 0xc012, 0x0010, 0xc011, 0x0012, 0x104b, 0x0013, 0x131f,\r
-+      0x0002, 0x103b, 0x0010, 0xff03, 0x0005, 0x0002, 0x0010, 0x0000,\r
-+      0x0000, 0xc00d, 0x0003, 0x031f, 0x0000, 0xffb0, 0x0010, 0xc3b1,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0xb888, 0x0010, 0x0011,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb012, 0x001b, 0x836f,\r
-+      0x0017, 0x4000, 0x0012, 0x3a43, 0x0013, 0x1380, 0x0015, 0x003a,\r
-+      0x0000, 0x0800, 0x0010, 0x0db0, 0x0003, 0x6380, 0x0000, 0x0bff,\r
-+      0x0001, 0xb0e0, 0x0003, 0x13a6, 0x0010, 0x09ff, 0x0001, 0xb0e0,\r
-+      0x0013, 0x138a, 0x0010, 0x05ff, 0x0001, 0xb0e0, 0x0003, 0x1384,\r
-+      0x0000, 0xc00e, 0x0000, 0x05fe, 0x0013, 0x6387, 0x0000, 0x050d,\r
-+      0x0005, 0x0002, 0x0000, 0x0004, 0x0003, 0x03a1, 0x0000, 0x09fe,\r
-+      0x0013, 0x63a3, 0x0000, 0x090d, 0x0005, 0x0002, 0x0000, 0x0001,\r
-+      0x0014, 0x0405, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,\r
-+      0x0000, 0x0004, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xba09,\r
-+      0x000b, 0x8394, 0x0011, 0x03c8, 0x0010, 0x000f, 0x0000, 0xffb6,\r
-+      0x0011, 0xb6e8, 0x0000, 0x0001, 0x0013, 0x1499, 0x0011, 0xb6e8,\r
-+      0x0000, 0x0002, 0x0013, 0x14bb, 0x0011, 0xb6e8, 0x0010, 0x0003,\r
-+      0x0003, 0x15a6, 0x0004, 0x07b6, 0x0013, 0x0404, 0x0010, 0x0bfe,\r
-+      0x0013, 0x6404, 0x0010, 0x0b0d, 0x0005, 0x0002, 0x0000, 0x0002,\r
-+      0x0014, 0x0405, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,\r
-+      0x0000, 0x0004, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xba09,\r
-+      0x000b, 0x83b0, 0x0000, 0xb930, 0x0005, 0x0031, 0x0010, 0x0021,\r
-+      0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x83b6, 0x0001, 0xb0a8,\r
-+      0x0000, 0x199a, 0x0013, 0x23bc, 0x0005, 0x00b0, 0x0000, 0x1999,\r
-+      0x0012, 0xb050, 0x0000, 0xffb0, 0x0002, 0xff50, 0x0002, 0xff50,\r
-+      0x0001, 0xb080, 0x0000, 0xffb0, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0d88, 0x0010, 0x0006, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xb00a, 0x001b, 0x83c9, 0x0000, 0xb930, 0x0005, 0x0031,\r
-+      0x0000, 0x0019, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x83cf,\r
-+      0x0001, 0xb0c8, 0x0010, 0x00ff, 0x0001, 0xffe8, 0x0010, 0x0048,\r
-+      0x000b, 0x1414, 0x0005, 0x0002, 0x0010, 0x0006, 0x0012, 0x0c10,\r
-+      0x0010, 0xff0c, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,\r
-+      0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xb109,\r
-+      0x000b, 0x83e0, 0x0000, 0xb10b, 0x000b, 0x63e4, 0x0010, 0xb10a,\r
-+      0x0015, 0x0033, 0x0010, 0xc00a, 0x000b, 0x83e6, 0x0002, 0x032b,\r
-+      0x0010, 0xff03, 0x0011, 0x0d88, 0x0010, 0x0011, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0010, 0x030a, 0x001b, 0x83ee, 0x0000, 0x11fe,\r
-+      0x000b, 0x63f3, 0x0000, 0x0d12, 0x0013, 0x03fc, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0001, 0x1188, 0x0010, 0x0003, 0x0000, 0xff31,\r
-+      0x0010, 0x0db0, 0x0015, 0x0033, 0x0000, 0xb00a, 0x000b, 0x83fb,\r
-+      0x0000, 0x0d11, 0x0013, 0x0404, 0x0000, 0x05fe, 0x0013, 0x6404,\r
-+      0x0005, 0x0002, 0x0000, 0x0004, 0x0000, 0x050d, 0x0004, 0x07b6,\r
-+      0x0013, 0x0047, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,\r
-+      0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0x0309,\r
-+      0x000b, 0x840c, 0x0011, 0x0d88, 0x0010, 0x0005, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0xb909, 0x000b, 0x8412, 0x0017, 0x4000,\r
-+      0x0005, 0x00b6, 0x0010, 0x0600, 0x0014, 0x05d6, 0x0004, 0x0483,\r
-+      0x0000, 0xb05a, 0x0000, 0xb15b, 0x0005, 0x0054, 0x0010, 0x0829,\r
-+      0x0010, 0x0d58, 0x0015, 0x0059, 0x0010, 0xffff, 0x0000, 0xb930,\r
-+      0x0005, 0x0031, 0x0010, 0x001e, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x000b, 0x8424, 0x0000, 0xb05c, 0x0005, 0x0031, 0x0000, 0x001f,\r
-+      0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x842a, 0x0001, 0xb0c8,\r
-+      0x0010, 0x000f, 0x001b, 0x1431, 0x0015, 0x00ff, 0x0010, 0x0005,\r
-+      0x0003, 0x0439, 0x0002, 0xb040, 0x0013, 0x1436, 0x0015, 0x00ff,\r
-+      0x0000, 0x0004, 0x0003, 0x0439, 0x0001, 0xb0c8, 0x0010, 0x0006,\r
-+      0x0002, 0xff60, 0x0010, 0xffb2, 0x0011, 0x0d88, 0x0000, 0x0019,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xb109, 0x000b, 0x843f,\r
-+      0x0012, 0xb170, 0x0011, 0xffc8, 0x0010, 0xff00, 0x0011, 0xb2d0,\r
-+      0x0010, 0xff60, 0x0002, 0xb045, 0x0003, 0x144a, 0x0015, 0x00b2,\r
-+      0x0000, 0x0002, 0x0013, 0x0454, 0x0002, 0xb046, 0x0003, 0x144f,\r
-+      0x0015, 0x00b2, 0x0000, 0x0001, 0x0013, 0x0454, 0x0015, 0x00b2,\r
-+      0x0010, 0x0000, 0x0000, 0xc0b0, 0x0010, 0xc0b1, 0x0003, 0x045a,\r
-+      0x0000, 0xb930, 0x0005, 0x0031, 0x0010, 0x002b, 0x0015, 0x0033,\r
-+      0x0000, 0xb011, 0x000b, 0x8459, 0x0010, 0xb16a, 0x0010, 0xb06b,\r
-+      0x0000, 0xb261, 0x0015, 0x0044, 0x0010, 0x0018, 0x0005, 0x0031,\r
-+      0x0000, 0x0023, 0x0015, 0x0033, 0x0000, 0x6241, 0x000b, 0x8463,\r
-+      0x0013, 0x9464, 0x0015, 0x00a0, 0x0000, 0x0020, 0x0012, 0xd041,\r
-+      0x001b, 0x1467, 0x0015, 0x00d1, 0x0010, 0x0202, 0x0013, 0x946b,\r
-+      0x0000, 0x75ff, 0x0011, 0xffc8, 0x0000, 0x1804, 0x0001, 0xffd8,\r
-+      0x0010, 0x0009, 0x0003, 0x9471, 0x0000, 0xff75, 0x0013, 0x9473,\r
-+      0x0015, 0x00d1, 0x0000, 0x0200, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0001, 0xbd88, 0x0000, 0x0008, 0x0000, 0xff31, 0x0015, 0x00b1,\r
-+      0x0010, 0x07d0, 0x0005, 0x00b0, 0x0010, 0x0009, 0x0015, 0x0033,\r
-+      0x0000, 0xb012, 0x000b, 0x8481, 0x0013, 0x0404, 0x0000, 0xba30,\r
-+      0x0005, 0x0031, 0x0000, 0x0031, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x000b, 0x8488, 0x0002, 0xb040, 0x0013, 0x1496, 0x0000, 0xb7b0,\r
-+      0x0000, 0xb9b1, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,\r
-+      0x0000, 0x0013, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb012,\r
-+      0x001b, 0x8494, 0x0013, 0x0498, 0x0010, 0xc0b1, 0x0000, 0xc0b0,\r
-+      0x0017, 0x4000, 0x0005, 0x00b6, 0x0010, 0x0500, 0x0014, 0x05d6,\r
-+      0x0005, 0x0054, 0x0010, 0x0889, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0d88, 0x0000, 0x0002, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xb009, 0x000b, 0x84a5, 0x0010, 0xb058, 0x0000, 0x0d59,\r
-+      0x0000, 0xb930, 0x0005, 0x0031, 0x0000, 0x0023, 0x0015, 0x0033,\r
-+      0x0000, 0xb011, 0x001b, 0x84ad, 0x0010, 0xb15c, 0x0010, 0xb05d,\r
-+      0x0005, 0x0031, 0x0010, 0x002b, 0x0015, 0x0033, 0x0000, 0xb011,\r
-+      0x000b, 0x84b4, 0x0000, 0xb15e, 0x0000, 0xb05f, 0x0003, 0x94b7,\r
-+      0x0015, 0x00a0, 0x0010, 0x000c, 0x0013, 0x05bb, 0x0005, 0x00b6,\r
-+      0x0000, 0x0700, 0x0014, 0x05d6, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0d88, 0x0010, 0x0009, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0xb709, 0x000b, 0x84c5, 0x0012, 0xb749, 0x0003, 0x14cb,\r
-+      0x0005, 0x0054, 0x0010, 0x0889, 0x0013, 0x04cd, 0x0005, 0x0054,\r
-+      0x0010, 0x0898, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,\r
-+      0x0000, 0x0002, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x000b, 0x84d4, 0x0010, 0xb058, 0x0000, 0x0d59, 0x0001, 0xb9a8,\r
-+      0x0010, 0x00f0, 0x000b, 0x24f9, 0x0011, 0x0d88, 0x0010, 0x0005,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x84df,\r
-+      0x0001, 0xb0c8, 0x0000, 0xf700, 0x0000, 0xffb0, 0x0011, 0xb0e8,\r
-+      0x0000, 0xf100, 0x0013, 0x1540, 0x0011, 0xb0e8, 0x0000, 0xf200,\r
-+      0x0013, 0x1545, 0x0011, 0xb0e8, 0x0010, 0xf300, 0x0013, 0x1568,\r
-+      0x0011, 0xb0e8, 0x0000, 0xf400, 0x0013, 0x156d, 0x0011, 0xb0e8,\r
-+      0x0010, 0xf500, 0x0013, 0x1540, 0x0011, 0xb0e8, 0x0010, 0xf600,\r
-+      0x0003, 0x157e, 0x0005, 0x00ce, 0x0010, 0x0009, 0x0000, 0xb0cf,\r
-+      0x0013, 0x07ab, 0x0000, 0xb930, 0x0005, 0x0031, 0x0000, 0x0025,\r
-+      0x0015, 0x0033, 0x0000, 0xb039, 0x001b, 0x84fe, 0x0012, 0xb749,\r
-+      0x0003, 0x1503, 0x0002, 0xb52c, 0x0000, 0xffb5, 0x0000, 0xb162,\r
-+      0x0000, 0xb063, 0x0005, 0x0031, 0x0000, 0x001f, 0x0015, 0x0033,\r
-+      0x0000, 0xb309, 0x001b, 0x8509, 0x0001, 0xb3c8, 0x0010, 0x0003,\r
-+      0x0003, 0x1511, 0x0010, 0xffb2, 0x0001, 0xffe8, 0x0010, 0x0003,\r
-+      0x000b, 0x1513, 0x0000, 0xc2b7, 0x0013, 0x059a, 0x0001, 0xb2e8,\r
-+      0x0000, 0x0001, 0x0013, 0x151a, 0x0005, 0x00ce, 0x0010, 0x000a,\r
-+      0x0010, 0xb2cf, 0x0013, 0x07ab, 0x0010, 0xb465, 0x0010, 0xb667,\r
-+      0x0015, 0x00b7, 0x0010, 0x0018, 0x0001, 0xb5c8, 0x0010, 0x0300,\r
-+      0x0003, 0x153f, 0x0012, 0xb548, 0x0013, 0x1526, 0x0000, 0xb6ff,\r
-+      0x0011, 0xb780, 0x0010, 0xffb7, 0x0002, 0xb549, 0x0003, 0x152b,\r
-+      0x0010, 0xb4ff, 0x0011, 0xb780, 0x0010, 0xffb7, 0x0015, 0x0044,\r
-+      0x0010, 0x0018, 0x0005, 0x0031, 0x0000, 0x002c, 0x0015, 0x0033,\r
-+      0x0000, 0x6841, 0x000b, 0x8531, 0x0015, 0x0044, 0x0000, 0x0019,\r
-+      0x0005, 0x0031, 0x0000, 0x0034, 0x0015, 0x0033, 0x0000, 0x5029,\r
-+      0x000b, 0x8538, 0x0015, 0x0044, 0x0000, 0x0008, 0x0011, 0xb7c8,\r
-+      0x0010, 0x0003, 0x0003, 0x153f, 0x0010, 0xff55, 0x0013, 0x059a,\r
-+      0x0005, 0x00b5, 0x0000, 0x0008, 0x0015, 0x00b7, 0x0010, 0x0018,\r
-+      0x0013, 0x059a, 0x0011, 0x0d88, 0x0000, 0x000b, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0xb011, 0x000b, 0x854a, 0x0010, 0xb1ff,\r
-+      0x0001, 0xb0d0, 0x0003, 0x1553, 0x0005, 0x00b5, 0x0010, 0x0b02,\r
-+      0x0010, 0xb062, 0x0010, 0xb163, 0x0013, 0x0555, 0x0005, 0x00b5,\r
-+      0x0000, 0x0302, 0x0015, 0x0065, 0x0010, 0x0012, 0x0005, 0x0067,\r
-+      0x0000, 0x0008, 0x0015, 0x006c, 0x0000, 0x7000, 0x0005, 0x006d,\r
-+      0x0010, 0x0500, 0x0015, 0x006f, 0x0010, 0x000a, 0x0015, 0x0044,\r
-+      0x0000, 0x0001, 0x0005, 0x0052, 0x0000, 0x2500, 0x0015, 0x0044,\r
-+      0x0000, 0x0008, 0x0015, 0x00b7, 0x0000, 0x0032, 0x0013, 0x059a,\r
-+      0x0005, 0x00b5, 0x0010, 0x0028, 0x0015, 0x00b7, 0x0010, 0x0018,\r
-+      0x0013, 0x059a, 0x0005, 0x00b5, 0x0000, 0x0100, 0x0005, 0x0067,\r
-+      0x0000, 0x0008, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,\r
-+      0x0010, 0x0018, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x001b, 0x8578, 0x0001, 0xb0c8, 0x0010, 0x00ff, 0x0015, 0x00b7,\r
-+      0x0000, 0x0020, 0x0013, 0x059a, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0d88, 0x0010, 0x0005, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xb609, 0x000b, 0x8585, 0x0001, 0xb6c8, 0x0010, 0xff00,\r
-+      0x0000, 0xffb0, 0x0015, 0x0033, 0x0000, 0xb00a, 0x001b, 0x858b,\r
-+      0x0001, 0xb6c8, 0x0010, 0x00ff, 0x0012, 0xff10, 0x000b, 0x1594,\r
-+      0x0000, 0xffb5, 0x0015, 0x00b7, 0x0010, 0x0018, 0x0013, 0x059a,\r
-+      0x0010, 0xff63, 0x0005, 0x00b5, 0x0000, 0x0800, 0x0015, 0x00b7,\r
-+      0x0010, 0x0018, 0x0013, 0x059a, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0d88, 0x0010, 0x0009, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xb009, 0x000b, 0x85a1, 0x0010, 0xb561, 0x0013, 0x95a3,\r
-+      0x0010, 0xb7a0, 0x0013, 0x05bb, 0x0005, 0x00b6, 0x0010, 0x0300,\r
-+      0x0014, 0x05d6, 0x0005, 0x0054, 0x0010, 0x0819, 0x0010, 0x0d58,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88, 0x0000, 0x0002,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x85b3,\r
-+      0x0000, 0xb059, 0x0003, 0x95b5, 0x0010, 0xc0a0, 0x0010, 0x71ff,\r
-+      0x0002, 0xff28, 0x0010, 0xff71, 0x0013, 0x05bb, 0x0012, 0xd041,\r
-+      0x001b, 0x15bb, 0x0015, 0x00d1, 0x0010, 0x0202, 0x0000, 0x75ff,\r
-+      0x0011, 0xffc8, 0x0000, 0x1804, 0x0001, 0xffd8, 0x0010, 0x0009,\r
-+      0x0003, 0x95c4, 0x0000, 0xff75, 0x0013, 0x95c6, 0x0015, 0x00d1,\r
-+      0x0000, 0x0200, 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0xbd88,\r
-+      0x0000, 0x0008, 0x0000, 0xff31, 0x0005, 0x00b0, 0x0010, 0x0009,\r
-+      0x0015, 0x00b1, 0x0010, 0x07d0, 0x0015, 0x0033, 0x0000, 0xb012,\r
-+      0x001b, 0x85d4, 0x0013, 0x0404, 0x0015, 0x0044, 0x0000, 0x0008,\r
-+      0x0005, 0x0098, 0x0010, 0x0056, 0x0015, 0x0099, 0x0000, 0x9575,\r
-+      0x0014, 0x0772, 0x0000, 0xb096, 0x0012, 0xb270, 0x0010, 0xff56,\r
-+      0x0004, 0x0794, 0x0010, 0xb052, 0x0010, 0xb153, 0x0000, 0xb6ff,\r
-+      0x0011, 0xb2d0, 0x0010, 0xff50, 0x0010, 0xb351, 0x0017, 0x4000,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0x1288, 0x0010, 0x0011,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0x1009, 0x000b, 0x85ef,\r
-+      0x0015, 0x000f, 0x0000, 0x0001, 0x0010, 0xc014, 0x0000, 0x1213,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x1388, 0x0000, 0x0004,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xba09, 0x000b, 0x85fb,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x1388, 0x0010, 0x0005,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0x1a09, 0x001b, 0x8603,\r
-+      0x0012, 0x104b, 0x001b, 0x160c, 0x0000, 0x1a30, 0x0005, 0x0031,\r
-+      0x0000, 0x000b, 0x0015, 0x0033, 0x0000, 0x1621, 0x000b, 0x860b,\r
-+      0x0010, 0x15fe, 0x001b, 0x6615, 0x0004, 0x0633, 0x0002, 0x3a42,\r
-+      0x000b, 0x1632, 0x0001, 0x10c8, 0x0010, 0x000f, 0x001b, 0x1695,\r
-+      0x0003, 0x0631, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x1388,\r
-+      0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x000b, 0x861c, 0x0015, 0x0033, 0x0010, 0xc00a, 0x000b, 0x861f,\r
-+      0x0010, 0xb0fe, 0x0013, 0x6624, 0x0000, 0xb012, 0x0003, 0x0626,\r
-+      0x0010, 0xc012, 0x0010, 0xc011, 0x0015, 0x000f, 0x0010, 0x0000,\r
-+      0x0002, 0x3944, 0x0013, 0x162f, 0x0015, 0x0039, 0x0000, 0x5040,\r
-+      0x0015, 0x00b8, 0x0000, 0x0008, 0x0014, 0x07ed, 0x0000, 0xc013,\r
-+      0x0003, 0x0632, 0x0004, 0x07d9, 0x0003, 0x0051, 0x0003, 0xb633,\r
-+      0x0005, 0x002a, 0x0000, 0x0004, 0x0000, 0xba30, 0x0005, 0x0031,\r
-+      0x0010, 0x001b, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x863b,\r
-+      0x0000, 0xc02c, 0x0000, 0xb02d, 0x0012, 0x104b, 0x0003, 0x1656,\r
-+      0x0000, 0x1a30, 0x0005, 0x0031, 0x0000, 0x0023, 0x0015, 0x0033,\r
-+      0x0000, 0xb129, 0x000b, 0x8645, 0x0000, 0xb120, 0x0010, 0xb221,\r
-+      0x0000, 0xb322, 0x0000, 0xb423, 0x0000, 0xb524, 0x0000, 0xc025,\r
-+      0x0010, 0xb526, 0x0010, 0xc027, 0x0010, 0xb516, 0x0010, 0xc017,\r
-+      0x0000, 0xb518, 0x0000, 0xc019, 0x0010, 0xc028, 0x0000, 0xc029,\r
-+      0x0010, 0xc01e, 0x0003, 0x068c, 0x0012, 0x1044, 0x0013, 0x1686,\r
-+      0x0002, 0x1034, 0x0000, 0xff10, 0x0000, 0x1a30, 0x0005, 0x0031,\r
-+      0x0000, 0x0002, 0x0015, 0x0033, 0x0000, 0x1b29, 0x001b, 0x865f,\r
-+      0x0000, 0x1c30, 0x0000, 0x1b31, 0x0015, 0x0033, 0x0000, 0xb131,\r
-+      0x000b, 0x8664, 0x0002, 0x1f43, 0x000b, 0x166b, 0x0010, 0xb3b5,\r
-+      0x0000, 0xb4b6, 0x0000, 0xc0b3, 0x0010, 0xc0b4, 0x0000, 0xb120,\r
-+      0x0010, 0xb221, 0x0000, 0xb322, 0x0000, 0xb423, 0x0000, 0xb524,\r
-+      0x0010, 0xb625, 0x0010, 0xb516, 0x0000, 0xb617, 0x0000, 0x1826,\r
-+      0x0000, 0x1927, 0x0000, 0x1a30, 0x0005, 0x0031, 0x0010, 0x000f,\r
-+      0x0015, 0x0033, 0x0000, 0xb011, 0x000b, 0x867a, 0x0000, 0xb028,\r
-+      0x0000, 0xb129, 0x0012, 0x1e10, 0x0010, 0xff1e, 0x0003, 0x668c,\r
-+      0x0002, 0x1d00, 0x0010, 0xff1d, 0x0004, 0x027f, 0x0002, 0x3a42,\r
-+      0x0013, 0x168c, 0x0003, 0x0694, 0x0000, 0x1a30, 0x0005, 0x0031,\r
-+      0x0000, 0x0002, 0x0015, 0x0033, 0x0000, 0x1b79, 0x001b, 0x868b,\r
-+      0x0013, 0xb68c, 0x0005, 0x002a, 0x0000, 0x0001, 0x0005, 0x0015,\r
-+      0x0000, 0x0001, 0x0000, 0x1efe, 0x0003, 0x6694, 0x0003, 0x024b,\r
-+      0x0017, 0x4000, 0x0000, 0xba30, 0x0005, 0x0031, 0x0010, 0x001b,\r
-+      0x0015, 0x0033, 0x0010, 0xb051, 0x001b, 0x869a, 0x0000, 0xb0a3,\r
-+      0x0010, 0xb697, 0x0010, 0xb946, 0x0015, 0x00a5, 0x0000, 0x0010,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x1388, 0x0000, 0x0002,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb509, 0x000b, 0x86a7,\r
-+      0x0004, 0x0794, 0x0004, 0x0783, 0x0012, 0xb470, 0x0010, 0xffb4,\r
-+      0x0010, 0xb48e, 0x0010, 0xb08a, 0x0010, 0xb18b, 0x0012, 0x104d,\r
-+      0x0003, 0x16b2, 0x0003, 0x06df, 0x0012, 0x104b, 0x0003, 0x16c5,\r
-+      0x0005, 0x008c, 0x0010, 0x0829, 0x0010, 0xc08d, 0x0001, 0xb2d8,\r
-+      0x0010, 0x0600, 0x0010, 0xff88, 0x0010, 0xb389, 0x0000, 0x1390,\r
-+      0x0010, 0xb591, 0x0000, 0xc08f, 0x0010, 0x1ab9, 0x0004, 0x0483,\r
-+      0x0013, 0x96c0, 0x0010, 0xb092, 0x0010, 0xb193, 0x0013, 0x96c3,\r
-+      0x0003, 0x06da, 0x0005, 0x008c, 0x0000, 0x0809, 0x0015, 0x008d,\r
-+      0x0000, 0x0008, 0x0001, 0xb2d8, 0x0000, 0x0100, 0x0010, 0xff88,\r
-+      0x0010, 0xb389, 0x0000, 0x1390, 0x0010, 0xb591, 0x0000, 0xc08f,\r
-+      0x0000, 0x1a30, 0x0005, 0x0031, 0x0010, 0x000f, 0x0015, 0x0033,\r
-+      0x0000, 0xb011, 0x000b, 0x86d5, 0x0003, 0x96d6, 0x0000, 0xb192,\r
-+      0x0000, 0xb093, 0x0003, 0x96d9, 0x0010, 0x19a1, 0x0000, 0x18a2,\r
-+      0x0015, 0x00b1, 0x0010, 0x0096, 0x0003, 0x074e, 0x0000, 0xb590,\r
-+      0x0010, 0x1391, 0x0001, 0x10c8, 0x0010, 0x000f, 0x0001, 0xffe8,\r
-+      0x0010, 0x0005, 0x0013, 0x1706, 0x0001, 0xb2d8, 0x0000, 0x0700,\r
-+      0x0010, 0xff88, 0x0010, 0xb389, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x1388, 0x0010, 0x0009, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xb009, 0x000b, 0x86f1, 0x0002, 0xb049, 0x0003, 0x16f9,\r
-+      0x0005, 0x008c, 0x0010, 0x0889, 0x0015, 0x00b1, 0x0010, 0x0096,\r
-+      0x0003, 0x06fd, 0x0005, 0x008c, 0x0010, 0x0898, 0x0015, 0x00b1,\r
-+      0x0000, 0x0092, 0x0010, 0xc08d, 0x0000, 0xc08f, 0x0013, 0x96ff,\r
-+      0x0000, 0xc092, 0x0010, 0xc093, 0x0013, 0x9702, 0x0010, 0x19a1,\r
-+      0x0000, 0x18a2, 0x0003, 0x074e, 0x0001, 0xb2d8, 0x0000, 0x0100,\r
-+      0x0010, 0xff88, 0x0010, 0xb389, 0x0005, 0x008c, 0x0010, 0x0880,\r
-+      0x0015, 0x008d, 0x0000, 0x0008, 0x0011, 0x1388, 0x0000, 0x000e,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x8713,\r
-+      0x0010, 0xb08f, 0x0000, 0xb590, 0x0010, 0x1391, 0x0000, 0x1a30,\r
-+      0x0005, 0x0031, 0x0000, 0x000d, 0x0015, 0x0033, 0x0000, 0xb021,\r
-+      0x001b, 0x871c, 0x0003, 0x971d, 0x0010, 0xb392, 0x0010, 0xb293,\r
-+      0x0013, 0x9720, 0x0000, 0xb1a1, 0x0010, 0xb0a2, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x1388, 0x0000, 0x000b, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0010, 0xb211, 0x001b, 0x872a, 0x0000, 0xb3ff,\r
-+      0x0001, 0xb080, 0x0000, 0xffb3, 0x001b, 0x2731, 0x0002, 0xb200,\r
-+      0x0013, 0x0732, 0x0010, 0xb2ff, 0x0011, 0xb180, 0x0010, 0xffb2,\r
-+      0x0011, 0x1388, 0x0000, 0x000b, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0xb212, 0x000b, 0x8739, 0x0015, 0x00b1, 0x0000, 0x0092,\r
-+      0x0002, 0x104c, 0x0003, 0x174c, 0x0011, 0xc2e8, 0x0010, 0x000c,\r
-+      0x000b, 0x1744, 0x0015, 0x00ff, 0x0000, 0x0800, 0x0013, 0x074c,\r
-+      0x0011, 0xc2e8, 0x0000, 0x0020, 0x001b, 0x174a, 0x0015, 0x00ff,\r
-+      0x0010, 0x1800, 0x0013, 0x074c, 0x0015, 0x00ff, 0x0000, 0x1000,\r
-+      0x0011, 0xb1d0, 0x0010, 0xffb1, 0x0015, 0x009a, 0x0010, 0x0036,\r
-+      0x0005, 0x009b, 0x0000, 0x95d5, 0x0012, 0xd041, 0x001b, 0x1752,\r
-+      0x0015, 0x00d1, 0x0010, 0x0202, 0x0003, 0x9756, 0x0012, 0x104e,\r
-+      0x0003, 0x175b, 0x0012, 0xb12f, 0x0010, 0xffb1, 0x0000, 0xb175,\r
-+      0x0003, 0x975c, 0x0015, 0x00d1, 0x0000, 0x0200, 0x0001, 0x19c8,\r
-+      0x0010, 0xfff0, 0x000b, 0x1765, 0x0015, 0x00b1, 0x0010, 0x07d0,\r
-+      0x0013, 0x0767, 0x0015, 0x00b1, 0x0000, 0x1b58, 0x0005, 0x00b0,\r
-+      0x0010, 0x0009, 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0xbd88,\r
-+      0x0000, 0x000b, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb012,\r
-+      0x001b, 0x8770, 0x0003, 0x0632, 0x0000, 0xba30, 0x0005, 0x0031,\r
-+      0x0010, 0x0021, 0x0015, 0x0033, 0x0010, 0xb019, 0x000b, 0x8777,\r
-+      0x0002, 0xb200, 0x0011, 0xffc8, 0x0010, 0x00ff, 0x0010, 0xffb2,\r
-+      0x0010, 0xb2b7, 0x0005, 0x0031, 0x0000, 0x0023, 0x0015, 0x0033,\r
-+      0x0010, 0xb20a, 0x000b, 0x8781, 0x0017, 0x4000, 0x0000, 0xba30,\r
-+      0x0005, 0x0031, 0x0000, 0x0023, 0x0015, 0x0033, 0x0010, 0xb409,\r
-+      0x000b, 0x8788, 0x0002, 0xb400, 0x0011, 0xffc8, 0x0010, 0x00ff,\r
-+      0x0010, 0xffb4, 0x0010, 0xb4b7, 0x0005, 0x0031, 0x0000, 0x0023,\r
-+      0x0015, 0x0033, 0x0010, 0xb40a, 0x001b, 0x8792, 0x0017, 0x4000,\r
-+      0x0000, 0xba30, 0x0001, 0xc7c8, 0x0000, 0x0020, 0x000b, 0x17a0,\r
-+      0x0005, 0x0031, 0x0010, 0x0028, 0x0015, 0x0033, 0x0010, 0xb209,\r
-+      0x000b, 0x879c, 0x0011, 0xb2c8, 0x0000, 0xff80, 0x0013, 0x17a3,\r
-+      0x0010, 0xc4b0, 0x0010, 0xc5b1, 0x0003, 0x07a5, 0x0010, 0xc6b1,\r
-+      0x0000, 0xc0b0, 0x0005, 0x0031, 0x0000, 0x0004, 0x0015, 0x0033,\r
-+      0x0010, 0xb211, 0x000b, 0x87a9, 0x0017, 0x4000, 0x0015, 0x00b8,\r
-+      0x0010, 0x0009, 0x0015, 0x003a, 0x0010, 0x0707, 0x0014, 0x07ed,\r
-+      0x0013, 0x002d, 0x0015, 0x00b8, 0x0010, 0x0009, 0x0015, 0x003a,\r
-+      0x0010, 0x0707, 0x0003, 0x07ed, 0x0004, 0x0110, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x0d88, 0x0000, 0x0004, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0xba09, 0x000b, 0x87be, 0x0014, 0x0772,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88, 0x0000, 0x0010,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xb20a, 0x001b, 0x87c7,\r
-+      0x0011, 0x0d88, 0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0x0309, 0x001b, 0x87cd, 0x0002, 0x0327, 0x0010, 0xffb2,\r
-+      0x0011, 0x0d88, 0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0xb20a, 0x001b, 0x87d5, 0x0015, 0x00b8, 0x0010, 0x0006,\r
-+      0x0003, 0x07ed, 0x0014, 0x0122, 0x0014, 0x0772, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x1388, 0x0000, 0x0010, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0010, 0xb20a, 0x000b, 0x87e2, 0x0012, 0x1027,\r
-+      0x0010, 0xffb2, 0x0011, 0x1388, 0x0010, 0x0011, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0010, 0xb20a, 0x001b, 0x87ea, 0x0015, 0x00b8,\r
-+      0x0000, 0x0007, 0x0013, 0x47ed, 0x0000, 0xb838, 0x0017, 0x4000,\r
-+      0xa85a, 0x97da\r
-+};\r
-+unsigned short xseqflx_code_length01 = 0x0fe2;\r
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2322ipx_fw.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2322ipx_fw.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/ql2322ipx_fw.h       1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/ql2322ipx_fw.h    2004-04-22 19:42:21.000000000 -0700
-@@ -0,0 +1,8072 @@
-+/******************************************************************************\r
-+ *                  QLOGIC LINUX SOFTWARE\r
-+ *\r
-+ * QLogic ISP2x00 device driver for Linux 2.4.x\r
-+ * Copyright (C) 2003 QLogic Corporation\r
-+ * (www.qlogic.com)\r
-+ *\r
-+ * This program is free software; you can redistribute it and/or modify it\r
-+ * under the terms of the GNU General Public License as published by the\r
-+ * Free Software Foundation; either version 2, or (at your option) any\r
-+ * later version.\r
-+ *\r
-+ * This program is distributed in the hope that it will be useful, but\r
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of\r
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
-+ * General Public License for more details.\r
-+ *\r
-+ ******************************************************************************/\r
-+\r
-+/************************************************************************\r
-+ *                                                                    *                                                                       *\r
-+ *          --- ISP2322 Initiator/Target Firmware ---                 *\r
-+ *            with support for Internet Protocol                      *\r
-+ *            and 2K port logins.                                     *\r
-+ *                                                                    *                                                                       *\r
-+ ************************************************************************\r
-+ */\r
-+/*\r
-+ *    Firmware Version 3.02.28 (14:05 Apr 03, 2004)\r
-+ */\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2322ipx_version = 3*1024+2;\r
-+#else\r
-+unsigned short risc_code_version = 3*1024+2;\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned char fw2322ipx_version_str[] = {3, 2,28};\r
-+#else\r
-+unsigned char firmware_version[] = {3, 2,28};\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+#define fw2322ipx_VERSION_STRING "3.02.28"\r
-+#else\r
-+#define FW_VERSION_STRING "3.02.28"\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2322ipx_addr01 = 0x0800 ;\r
-+#else\r
-+unsigned short risc_code_addr01 = 0x0800 ;\r
-+#endif\r
-+\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2322ipx_code01[] = { \r
-+#else\r
-+unsigned short risc_code01[] = { \r
-+#endif\r
-+      0x0470, 0x0000, 0x0000, 0xdf42, 0x0000, 0x0003, 0x0002, 0x001c,\r
-+      0x0137, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,\r
-+      0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,\r
-+      0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,\r
-+      0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,\r
-+      0x332e, 0x3032, 0x2e32, 0x3820, 0x2020, 0x2020, 0x2400, 0x20a9,\r
-+      0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,\r
-+      0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,\r
-+      0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,\r
-+      0x400f, 0x2091, 0x2800, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f,\r
-+      0x2091, 0x2a00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091,\r
-+      0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00,\r
-+      0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001,\r
-+      0x0000, 0x20c1, 0x0004, 0x20c9, 0x1cff, 0x2059, 0x0000, 0x2b78,\r
-+      0x7883, 0x0004, 0x2089, 0x2ab5, 0x2051, 0x1800, 0x2a70, 0x20e1,\r
-+      0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e55, 0x00f6,\r
-+      0x7888, 0x9005, 0x11f8, 0x2061, 0xc000, 0x080c, 0x205a, 0x1170,\r
-+      0x2079, 0x0300, 0x080c, 0x2070, 0x2061, 0xe000, 0x080c, 0x205a,\r
-+      0x1128, 0x2079, 0x0380, 0x080c, 0x2070, 0x0060, 0x00fe, 0x7883,\r
-+      0x4010, 0x7837, 0x4010, 0x7833, 0x0010, 0x2091, 0x5000, 0x2091,\r
-+      0x4080, 0x0cf8, 0x00fe, 0x2029, 0x5600, 0x2031, 0xffff, 0x2039,\r
-+      0x55dc, 0x2021, 0x0200, 0x20e9, 0x0001, 0x20a1, 0x0000, 0x20a9,\r
-+      0x0800, 0x900e, 0x4104, 0x20e9, 0x0001, 0x20a1, 0x1000, 0x900e,\r
-+      0x2001, 0x0dc1, 0x9084, 0x0fff, 0x20a8, 0x4104, 0x2001, 0x0000,\r
-+      0x9086, 0x0000, 0x0120, 0x21a8, 0x4104, 0x8001, 0x1de0, 0x756e,\r
-+      0x7672, 0x776a, 0x7476, 0x747a, 0x00e6, 0x2071, 0x1b4e, 0x2472,\r
-+      0x00ee, 0x20a1, 0x1ddc, 0x7170, 0x810d, 0x810d, 0x810d, 0x810d,\r
-+      0x918c, 0x000f, 0x2001, 0x0001, 0x9112, 0x900e, 0x21a8, 0x4104,\r
-+      0x8211, 0x1de0, 0x7170, 0x3400, 0x8001, 0x9102, 0x0120, 0x0218,\r
-+      0x20a8, 0x900e, 0x4104, 0x2009, 0x1800, 0x810d, 0x810d, 0x810d,\r
-+      0x810d, 0x810d, 0x918c, 0x001f, 0x2001, 0x0001, 0x9112, 0x20e9,\r
-+      0x0001, 0x20a1, 0x0800, 0x900e, 0x20a9, 0x0800, 0x4104, 0x8211,\r
-+      0x1dd8, 0x080c, 0x0f52, 0x080c, 0x6037, 0x080c, 0xab83, 0x080c,\r
-+      0x1109, 0x080c, 0x1328, 0x080c, 0x1bb0, 0x080c, 0x918d, 0x080c,\r
-+      0x0d0f, 0x080c, 0x108e, 0x080c, 0x3474, 0x080c, 0x7801, 0x080c,\r
-+      0x6a8f, 0x080c, 0x8905, 0x080c, 0x8569, 0x080c, 0x223f, 0x080c,\r
-+      0x7ed6, 0x080c, 0x2089, 0x080c, 0x21c3, 0x080c, 0x2234, 0x2091,\r
-+      0x3009, 0x7883, 0x0000, 0x1004, 0x0943, 0x7880, 0x9086, 0x0002,\r
-+      0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833, 0x0010, 0x0e04,\r
-+      0x0937, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,\r
-+      0xd084, 0x190c, 0x11d6, 0x2071, 0x1800, 0x7003, 0x0000, 0x780c,\r
-+      0x9084, 0x0030, 0x9086, 0x0000, 0x190c, 0x0d7d, 0x2071, 0x1800,\r
-+      0x7000, 0x908e, 0x0003, 0x1168, 0x080c, 0x4bcc, 0x080c, 0x349b,\r
-+      0x080c, 0x7869, 0x080c, 0x6fd7, 0x080c, 0x89e3, 0x080c, 0x8592,\r
-+      0x0c68, 0x000b, 0x0c88, 0x096d, 0x096e, 0x0b09, 0x096b, 0x0bc3,\r
-+      0x0d0e, 0x0d0e, 0x0d0e, 0x080c, 0x0d7d, 0x0005, 0x0126, 0x00f6,\r
-+      0x2091, 0x8000, 0x7000, 0x9086, 0x0001, 0x1904, 0x0adc, 0x080c,\r
-+      0x0ea5, 0x080c, 0x74e9, 0x0150, 0x080c, 0x750c, 0x15b0, 0x2079,\r
-+      0x0100, 0x7828, 0x9085, 0x1800, 0x782a, 0x0478, 0x080c, 0x741a,\r
-+      0x7000, 0x9086, 0x0001, 0x1904, 0x0adc, 0x7098, 0x9086, 0x0028,\r
-+      0x1904, 0x0adc, 0x080c, 0x8561, 0x080c, 0x8553, 0x2001, 0x0161,\r
-+      0x2003, 0x0001, 0x2079, 0x0100, 0x2011, 0xffff, 0x080c, 0x2a44,\r
-+      0x7a28, 0x9295, 0x5e2c, 0x7a2a, 0x2011, 0x735f, 0x080c, 0x863e,\r
-+      0x2011, 0x7352, 0x080c, 0x874a, 0x2011, 0x5e8e, 0x080c, 0x863e,\r
-+      0x2011, 0x8030, 0x901e, 0x7396, 0x04d0, 0x080c, 0x573b, 0x2079,\r
-+      0x0100, 0x7844, 0x9005, 0x1904, 0x0adc, 0x2011, 0x5e8e, 0x080c,\r
-+      0x863e, 0x2011, 0x735f, 0x080c, 0x863e, 0x2011, 0x7352, 0x080c,\r
-+      0x874a, 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000, 0x7840,\r
-+      0x9084, 0xfffb, 0x7842, 0x2001, 0x19a6, 0x2004, 0x9005, 0x1140,\r
-+      0x00c6, 0x2061, 0x0100, 0x080c, 0x5fdf, 0x00ce, 0x0804, 0x0adc,\r
-+      0x780f, 0x006b, 0x7a28, 0x080c, 0x74f1, 0x0118, 0x9295, 0x5e2c,\r
-+      0x0010, 0x9295, 0x402c, 0x7a2a, 0x2011, 0x8010, 0x73d8, 0x2001,\r
-+      0x19a7, 0x2003, 0x0001, 0x080c, 0x2916, 0x080c, 0x4b07, 0x7248,\r
-+      0xc284, 0x724a, 0x2001, 0x180c, 0x200c, 0xc1ac, 0xc1cc, 0x2102,\r
-+      0x2001, 0x0390, 0x2003, 0x0400, 0x080c, 0xa896, 0x080c, 0xa073,\r
-+      0x2011, 0x0004, 0x080c, 0xc848, 0x080c, 0xa8b2, 0x080c, 0x6917,\r
-+      0x080c, 0x74e9, 0x1120, 0x080c, 0x2971, 0x0600, 0x0420, 0x080c,\r
-+      0x5fe6, 0x0140, 0x7097, 0x0001, 0x70d3, 0x0000, 0x080c, 0x5908,\r
-+      0x0804, 0x0adc, 0x080c, 0x56da, 0xd094, 0x01a8, 0x2001, 0x0390,\r
-+      0x2003, 0x0404, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c,\r
-+      0x56de, 0xd0d4, 0x1118, 0x080c, 0x2971, 0x1270, 0x2011, 0x180c,\r
-+      0x2204, 0xc0bc, 0x00a8, 0x080c, 0x56de, 0xd0d4, 0x1db8, 0x2011,\r
-+      0x180c, 0x2204, 0xc0bd, 0x0060, 0x2011, 0x180c, 0x2204, 0xc0bd,\r
-+      0x2012, 0x080c, 0x6a63, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd,\r
-+      0x2012, 0x080c, 0x6a29, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8,\r
-+      0x707f, 0x0000, 0x080c, 0x74e9, 0x1130, 0x70b0, 0x9005, 0x1168,\r
-+      0x080c, 0xcc9f, 0x0050, 0x080c, 0xcc9f, 0x70dc, 0xd09c, 0x1128,\r
-+      0x70b0, 0x9005, 0x0110, 0x080c, 0x5fbc, 0x70e7, 0x0000, 0x70e3,\r
-+      0x0000, 0x70a7, 0x0000, 0x080c, 0x2979, 0x0228, 0x2011, 0x0101,\r
-+      0x2204, 0xc0c4, 0x2012, 0x72dc, 0x080c, 0x74e9, 0x1178, 0x9016,\r
-+      0x0016, 0x080c, 0x2713, 0x2019, 0x196d, 0x211a, 0x001e, 0x705f,\r
-+      0xffff, 0x7063, 0x00ef, 0x7083, 0x0000, 0x0020, 0x2019, 0x196d,\r
-+      0x201b, 0x0000, 0x2079, 0x1847, 0x7804, 0xd0ac, 0x0108, 0xc295,\r
-+      0x72de, 0x080c, 0x74e9, 0x0118, 0x9296, 0x0004, 0x0518, 0x2011,\r
-+      0x0001, 0x080c, 0xc848, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003,\r
-+      0x0002, 0x00fe, 0x080c, 0x2fb2, 0x080c, 0xa896, 0x2011, 0x0005,\r
-+      0x080c, 0xa1cf, 0x080c, 0xa8b2, 0x080c, 0x74e9, 0x0148, 0x00c6,\r
-+      0x2061, 0x0100, 0x0016, 0x080c, 0x2713, 0x61e2, 0x001e, 0x00ce,\r
-+      0x012e, 0x00e0, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003, 0x0002,\r
-+      0x080c, 0xa896, 0x2011, 0x0005, 0x080c, 0xa1cf, 0x080c, 0xa8b2,\r
-+      0x080c, 0x74e9, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c,\r
-+      0x2713, 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6,\r
-+      0x00b6, 0x080c, 0x74e9, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9,\r
-+      0x0782, 0x080c, 0x74e9, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e,\r
-+      0x86ff, 0x0138, 0x9180, 0x1000, 0x2004, 0x905d, 0x0110, 0xb800,\r
-+      0xd0bc, 0x090c, 0x32fc, 0x8108, 0x1f04, 0x0af0, 0x707f, 0x0000,\r
-+      0x7080, 0x9084, 0x00ff, 0x7082, 0x70b3, 0x0000, 0x00be, 0x00ce,\r
-+      0x0005, 0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002,\r
-+      0x1904, 0x0bc0, 0x70ac, 0x9086, 0xffff, 0x0120, 0x080c, 0x2fb2,\r
-+      0x0804, 0x0bc0, 0x70dc, 0xd0ac, 0x1110, 0xd09c, 0x0538, 0xd084,\r
-+      0x0528, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c,\r
-+      0x01e8, 0x080c, 0x336d, 0x11b0, 0x70e0, 0x9086, 0xffff, 0x0190,\r
-+      0x080c, 0x3147, 0x70dc, 0xd094, 0x1904, 0x0bc0, 0x2011, 0x0001,\r
-+      0x080c, 0xcf52, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x3181,\r
-+      0x0804, 0x0bc0, 0x70e4, 0x9005, 0x1904, 0x0bc0, 0x70a8, 0x9005,\r
-+      0x1904, 0x0bc0, 0x70dc, 0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x0bc0,\r
-+      0x080c, 0x6a29, 0x1904, 0x0bc0, 0x080c, 0x6a7c, 0x1904, 0x0bc0,\r
-+      0x080c, 0x6a63, 0x01c0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e,\r
-+      0x0016, 0x080c, 0x6625, 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e,\r
-+      0x8108, 0x1f04, 0x0b60, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce,\r
-+      0x015e, 0x0804, 0x0bc0, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b,\r
-+      0x000e, 0x2011, 0x19b3, 0x080c, 0x0fc2, 0x2011, 0x19cd, 0x080c,\r
-+      0x0fc2, 0x7030, 0xc08c, 0x7032, 0x7003, 0x0003, 0x70af, 0xffff,\r
-+      0x080c, 0x0e79, 0x9006, 0x080c, 0x25a0, 0x080c, 0x336d, 0x0118,\r
-+      0x080c, 0x4ca4, 0x0050, 0x0036, 0x0046, 0x2019, 0xffff, 0x2021,\r
-+      0x0006, 0x080c, 0x4cbe, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100,\r
-+      0x080c, 0x750c, 0x0150, 0x080c, 0x74e9, 0x7828, 0x0118, 0x9084,\r
-+      0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x080c, 0xa896,\r
-+      0x2001, 0x19e8, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011, 0x0000,\r
-+      0x080c, 0xa1cf, 0x2011, 0x0000, 0x080c, 0xa1d9, 0x080c, 0xa8b2,\r
-+      0x012e, 0x00be, 0x0005, 0x0016, 0x0026, 0x0046, 0x00f6, 0x0126,\r
-+      0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c, 0xfffd, 0x7906,\r
-+      0x2009, 0x00f7, 0x080c, 0x5fa5, 0x7940, 0x918c, 0x0010, 0x7942,\r
-+      0x7924, 0xd1b4, 0x0120, 0x2011, 0x0040, 0x080c, 0x2a44, 0xd19c,\r
-+      0x0120, 0x2011, 0x0008, 0x080c, 0x2a44, 0x0006, 0x0036, 0x0156,\r
-+      0x0000, 0x2001, 0x19a7, 0x2004, 0x9005, 0x1518, 0x080c, 0x29d8,\r
-+      0x1148, 0x2001, 0x0001, 0x080c, 0x2945, 0x2001, 0x0001, 0x080c,\r
-+      0x2928, 0x00b8, 0x080c, 0x29e0, 0x1138, 0x9006, 0x080c, 0x2945,\r
-+      0x9006, 0x080c, 0x2928, 0x0068, 0x080c, 0x29e8, 0x1d50, 0x2001,\r
-+      0x1998, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x273f, 0x0804,\r
-+      0x0cc1, 0x080c, 0x2a67, 0x080c, 0x2aab, 0x20a9, 0x003a, 0x1d04,\r
-+      0x0c17, 0x080c, 0x872a, 0x1f04, 0x0c17, 0x080c, 0x74fa, 0x0148,\r
-+      0x080c, 0x750c, 0x1118, 0x080c, 0x77fc, 0x0050, 0x080c, 0x74f1,\r
-+      0x0dd0, 0x080c, 0x77f7, 0x080c, 0x77ed, 0x080c, 0x741a, 0x0020,\r
-+      0x2009, 0x00f8, 0x080c, 0x5fa5, 0x7850, 0xc0e5, 0x7852, 0x080c,\r
-+      0x74e9, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678,\r
-+      0x2019, 0xea60, 0x0d0c, 0x872a, 0x7820, 0xd09c, 0x15a0, 0x080c,\r
-+      0x74e9, 0x0904, 0x0ca3, 0x7824, 0xd0ac, 0x1904, 0x0cc6, 0x080c,\r
-+      0x750c, 0x1548, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e,\r
-+      0x2011, 0x1800, 0x080c, 0x2a44, 0x080c, 0x29f0, 0x7824, 0x9084,\r
-+      0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810, 0x2004,\r
-+      0x9084, 0x9000, 0x0110, 0x080c, 0x0ce9, 0x8421, 0x1160, 0x1d04,\r
-+      0x0c73, 0x080c, 0x872a, 0x080c, 0x77f7, 0x080c, 0x77ed, 0x7003,\r
-+      0x0001, 0x0804, 0x0cc6, 0x8319, 0x1928, 0x2001, 0x1810, 0x2004,\r
-+      0x9084, 0x9000, 0x0110, 0x080c, 0x0ce9, 0x1d04, 0x0c89, 0x080c,\r
-+      0x872a, 0x2009, 0x199b, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a,\r
-+      0x1188, 0x200b, 0x000a, 0x2011, 0x0048, 0x080c, 0x2a44, 0x20a9,\r
-+      0x0002, 0x080c, 0x29d1, 0x7924, 0x080c, 0x29f0, 0xd19c, 0x0110,\r
-+      0x080c, 0x2916, 0x00f0, 0x080c, 0x74fa, 0x1140, 0x94a2, 0x03e8,\r
-+      0x1128, 0x080c, 0x74bd, 0x7003, 0x0001, 0x00c0, 0x2011, 0x1800,\r
-+      0x080c, 0x2a44, 0x080c, 0x29f0, 0x7824, 0x080c, 0x7503, 0x0110,\r
-+      0xd0ac, 0x1160, 0x9084, 0x1800, 0x0904, 0x0c7b, 0x7003, 0x0001,\r
-+      0x0028, 0x2001, 0x0001, 0x080c, 0x25a0, 0x00a0, 0x7850, 0xc0e4,\r
-+      0x7852, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d,\r
-+      0x0002, 0x7906, 0x2011, 0x0048, 0x080c, 0x2a44, 0x7828, 0x9085,\r
-+      0x0028, 0x782a, 0x2001, 0x19a7, 0x2003, 0x0000, 0x9006, 0x78f2,\r
-+      0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e, 0x002e, 0x001e,\r
-+      0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x0046, 0x00b6, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0071, 0x0d0c, 0x872a, 0x015e,\r
-+      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x002e,\r
-+      0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x189e, 0x7004, 0x9086,\r
-+      0x0001, 0x1110, 0x080c, 0x349b, 0x00ee, 0x0005, 0x0005, 0x2a70,\r
-+      0x2061, 0x19ab, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001c,\r
-+      0x600f, 0x0137, 0x2001, 0x197c, 0x900e, 0x2102, 0x7196, 0x2001,\r
-+      0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705f, 0xffff, 0x0008,\r
-+      0x715e, 0x7067, 0xffff, 0x717e, 0x7182, 0x080c, 0xcc9f, 0x70ef,\r
-+      0x00c0, 0x2061, 0x196c, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800,\r
-+      0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x001f, 0x611a, 0x601f,\r
-+      0x07d0, 0x2061, 0x1974, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f,\r
-+      0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061,\r
-+      0x1989, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f,\r
-+      0x2020, 0x2001, 0x182c, 0x2102, 0x0005, 0x9016, 0x080c, 0x6625,\r
-+      0x1178, 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4,\r
-+      0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210,\r
-+      0x8108, 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000,\r
-+      0x2079, 0x0000, 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04,\r
-+      0x0d7f, 0x0006, 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000,\r
-+      0x000e, 0x7882, 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e,\r
-+      0x7886, 0x3900, 0x789a, 0x7833, 0x0012, 0x2091, 0x5000, 0x0156,\r
-+      0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1b24, 0x7a08,\r
-+      0x226a, 0x2069, 0x1b25, 0x7a18, 0x226a, 0x8d68, 0x7a1c, 0x226a,\r
-+      0x782c, 0x2019, 0x1b32, 0x201a, 0x2019, 0x1b35, 0x9016, 0x7808,\r
-+      0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386, 0x1b4e,\r
-+      0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead, 0x2019,\r
-+      0x1b33, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000, 0x2069,\r
-+      0x1a7a, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a, 0x8d68,\r
-+      0x8318, 0x1f04, 0x0dcc, 0x0491, 0x002e, 0x003e, 0x00de, 0x015e,\r
-+      0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089,\r
-+      0x2004, 0xd084, 0x0180, 0x2001, 0x1a22, 0x2004, 0x9005, 0x0128,\r
-+      0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003,\r
-+      0x0002, 0x2003, 0x1001, 0x080c, 0x56e9, 0x1170, 0x080c, 0x0f13,\r
-+      0x0110, 0x080c, 0x0e66, 0x080c, 0x56e9, 0x1130, 0x2071, 0x1800,\r
-+      0x2011, 0x8000, 0x080c, 0x0f27, 0x0c70, 0x0005, 0x2001, 0x0382,\r
-+      0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x1120, 0x2001, 0x0015,\r
-+      0x080c, 0xa887, 0x2079, 0x0380, 0x2069, 0x1b04, 0x7818, 0x6802,\r
-+      0x781c, 0x6806, 0x7840, 0x680a, 0x7844, 0x680e, 0x782c, 0x6812,\r
-+      0x2019, 0x1b0f, 0x9016, 0x7808, 0xd09c, 0x0150, 0x7820, 0x201a,\r
-+      0x8210, 0x8318, 0x8210, 0x9282, 0x0011, 0x0ea8, 0x2011, 0xdead,\r
-+      0x6a2a, 0x7830, 0x681a, 0x7834, 0x681e, 0x7838, 0x6822, 0x783c,\r
-+      0x6826, 0x7803, 0x0000, 0x2069, 0x1ac4, 0x901e, 0x20a9, 0x0020,\r
-+      0x7b26, 0x7828, 0x206a, 0x8d68, 0x8318, 0x1f04, 0x0e40, 0x2069,\r
-+      0x1ae4, 0x2019, 0x00b0, 0x20a9, 0x0020, 0x7b26, 0x7828, 0x206a,\r
-+      0x8d68, 0x8318, 0x1f04, 0x0e4d, 0x0005, 0x918c, 0x03ff, 0x2001,\r
-+      0x0003, 0x2004, 0x9084, 0x0600, 0x1118, 0x918d, 0x6c00, 0x0010,\r
-+      0x918d, 0x6400, 0x2001, 0x017f, 0x2102, 0x0005, 0x0026, 0x0126,\r
-+      0x2011, 0x0080, 0x080c, 0x0f05, 0x20a9, 0x0900, 0x080c, 0x0f3b,\r
-+      0x2011, 0x0040, 0x080c, 0x0f05, 0x20a9, 0x0900, 0x080c, 0x0f3b,\r
-+      0x0c78, 0x0026, 0x080c, 0x0f13, 0x1188, 0x2011, 0x010e, 0x2214,\r
-+      0x9294, 0x0007, 0x9296, 0x0007, 0x0118, 0x2011, 0x0947, 0x0010,\r
-+      0x2011, 0x1b47, 0x080c, 0x0f27, 0x002e, 0x0005, 0x2011, 0x010e,\r
-+      0x2214, 0x9294, 0x0007, 0x9296, 0x0007, 0x0118, 0x2011, 0xa880,\r
-+      0x0010, 0x2011, 0x6840, 0xd0e4, 0x70f3, 0x0000, 0x1128, 0x70f3,\r
-+      0x0fa0, 0x080c, 0x0f18, 0x002e, 0x0005, 0x0026, 0x080c, 0x0f13,\r
-+      0x0148, 0xd0a4, 0x1138, 0x2011, 0xcdd5, 0x0010, 0x2011, 0x0080,\r
-+      0x080c, 0x0f18, 0x002e, 0x0005, 0x0026, 0x70f3, 0x0000, 0x080c,\r
-+      0x0f13, 0x1130, 0x2011, 0x8040, 0x080c, 0x0f27, 0x002e, 0x0005,\r
-+      0x080c, 0x29e8, 0x1118, 0x2011, 0xcdc5, 0x0010, 0x2011, 0xcac2,\r
-+      0x080c, 0x0f18, 0x002e, 0x0005, 0x00e6, 0x0016, 0x0006, 0x2071,\r
-+      0x1800, 0xd0b4, 0x70ec, 0x71e8, 0x1118, 0xc0e4, 0xc1f4, 0x0050,\r
-+      0x0006, 0x3b00, 0x9084, 0xff3e, 0x20d8, 0x000e, 0x70f3, 0x0000,\r
-+      0xc0e5, 0xc1f5, 0x0099, 0x000e, 0x001e, 0x00ee, 0x0005, 0x00e6,\r
-+      0x2071, 0x1800, 0xd0e4, 0x70ec, 0x1110, 0xc0dc, 0x0008, 0xc0dd,\r
-+      0x0016, 0x71e8, 0x0019, 0x001e, 0x00ee, 0x0005, 0x70ee, 0x71ea,\r
-+      0x7000, 0x9084, 0x0007, 0x000b, 0x0005, 0x0ecb, 0x0ea5, 0x0ea5,\r
-+      0x0e79, 0x0eb4, 0x0ea5, 0x0ea5, 0x0eb4, 0xc284, 0x0016, 0x3b08,\r
-+      0x3a00, 0x9104, 0x918d, 0x00c1, 0x21d8, 0x9084, 0xff3e, 0x9205,\r
-+      0x20d0, 0x001e, 0x0005, 0x2001, 0x183b, 0x2004, 0xd0dc, 0x0005,\r
-+      0x9e86, 0x1800, 0x190c, 0x0d7d, 0x70ec, 0xd0e4, 0x0108, 0xc2e5,\r
-+      0x72ee, 0xd0e4, 0x1118, 0x9294, 0x00c1, 0x08f9, 0x0005, 0x9e86,\r
-+      0x1800, 0x190c, 0x0d7d, 0x70e8, 0xd0f4, 0x0108, 0xc2f5, 0x72ea,\r
-+      0xd0f4, 0x1140, 0x9284, 0x8000, 0x8005, 0xc284, 0x9215, 0x9294,\r
-+      0x00c1, 0x0861, 0x0005, 0x1d04, 0x0f3b, 0x2091, 0x6000, 0x1f04,\r
-+      0x0f3b, 0x0005, 0x890e, 0x810e, 0x810f, 0x9194, 0x003f, 0x918c,\r
-+      0xffc0, 0x0005, 0x0006, 0x2200, 0x914d, 0x894f, 0x894d, 0x894d,\r
-+      0x000e, 0x0005, 0x01d6, 0x0146, 0x0036, 0x0096, 0x2061, 0x188d,\r
-+      0x600b, 0x0000, 0x600f, 0x0000, 0x6003, 0x0000, 0x6007, 0x0000,\r
-+      0x2009, 0xffc0, 0x2105, 0x0006, 0x2001, 0xaaaa, 0x200f, 0x2019,\r
-+      0x5555, 0x9016, 0x2049, 0x0bff, 0xab02, 0xa001, 0xa001, 0xa800,\r
-+      0x9306, 0x1138, 0x2105, 0x9306, 0x0120, 0x8210, 0x99c8, 0x0400,\r
-+      0x0c98, 0x000e, 0x200f, 0x2001, 0x189d, 0x928a, 0x000e, 0x1638,\r
-+      0x928a, 0x0006, 0x2011, 0x0006, 0x1210, 0x2011, 0x0000, 0x2202,\r
-+      0x9006, 0x2008, 0x82ff, 0x01b0, 0x8200, 0x600a, 0x600f, 0xffff,\r
-+      0x6003, 0x0002, 0x6007, 0x0000, 0x0026, 0x2019, 0x0010, 0x9280,\r
-+      0x0001, 0x20e8, 0x21a0, 0x21a8, 0x4104, 0x8319, 0x1de0, 0x8211,\r
-+      0x1da0, 0x002e, 0x009e, 0x003e, 0x014e, 0x01de, 0x0005, 0x2011,\r
-+      0x000e, 0x08e8, 0x0016, 0x0026, 0x0096, 0x3348, 0x080c, 0x0f42,\r
-+      0x2100, 0x9300, 0x2098, 0x22e0, 0x009e, 0x002e, 0x001e, 0x0036,\r
-+      0x3518, 0x20a9, 0x0001, 0x4002, 0x8007, 0x4004, 0x8319, 0x1dd8,\r
-+      0x003e, 0x0005, 0x20e9, 0x0001, 0x71b8, 0x81ff, 0x11c0, 0x9006,\r
-+      0x2009, 0x0200, 0x20a9, 0x0002, 0x9298, 0x0018, 0x23a0, 0x4001,\r
-+      0x2009, 0x0700, 0x20a9, 0x0002, 0x9298, 0x0008, 0x23a0, 0x4001,\r
-+      0x707c, 0x8007, 0x7180, 0x810f, 0x20a9, 0x0002, 0x4001, 0x9298,\r
-+      0x000c, 0x23a0, 0x900e, 0x080c, 0x0d5d, 0x2001, 0x0000, 0x810f,\r
-+      0x20a9, 0x0002, 0x4001, 0x0005, 0x89ff, 0x0140, 0xa804, 0xa807,\r
-+      0x0000, 0x0006, 0x080c, 0x106c, 0x009e, 0x0cb0, 0x0005, 0x00e6,\r
-+      0x2071, 0x1800, 0x080c, 0x10e5, 0x090c, 0x0d7d, 0x00ee, 0x0005,\r
-+      0x0086, 0x00e6, 0x0006, 0x0026, 0x0036, 0x0126, 0x2091, 0x8000,\r
-+      0x00c9, 0x2071, 0x1800, 0x73c0, 0x702c, 0x9016, 0x9045, 0x0158,\r
-+      0x8210, 0x9906, 0x090c, 0x0d7d, 0x2300, 0x9202, 0x0120, 0x1a0c,\r
-+      0x0d7d, 0xa000, 0x0c98, 0x012e, 0x003e, 0x002e, 0x000e, 0x00ee,\r
-+      0x008e, 0x0005, 0x0086, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000,\r
-+      0x2071, 0x1910, 0x7010, 0x9005, 0x0140, 0x7018, 0x9045, 0x0128,\r
-+      0x9906, 0x090c, 0x0d7d, 0xa000, 0x0cc8, 0x012e, 0x000e, 0x00ee,\r
-+      0x008e, 0x0005, 0x00e6, 0x2071, 0x1800, 0x0126, 0x2091, 0x8000,\r
-+      0x70c0, 0x8001, 0x0270, 0x70c2, 0x702c, 0x2048, 0x9085, 0x0001,\r
-+      0xa800, 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee,\r
-+      0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071,\r
-+      0x1800, 0x70c0, 0x90ca, 0x0020, 0x0268, 0x8001, 0x70c2, 0x702c,\r
-+      0x2048, 0xa800, 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e,\r
-+      0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000,\r
-+      0x0016, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0xa862, 0x9184,\r
-+      0xffc0, 0xa85e, 0x001e, 0x0020, 0x00e6, 0x0126, 0x2091, 0x8000,\r
-+      0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000,\r
-+      0x70c2, 0x080c, 0x8553, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800,\r
-+      0x9026, 0x2009, 0x0000, 0x2049, 0x0400, 0x2900, 0x702e, 0x8940,\r
-+      0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0440,\r
-+      0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188d, 0x7000,\r
-+      0x9005, 0x11a0, 0x2001, 0x0558, 0xa802, 0x2048, 0x2009, 0x5600,\r
-+      0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886,\r
-+      0x0800, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188d,\r
-+      0x7104, 0x7200, 0x82ff, 0x01d0, 0x7308, 0x8318, 0x831f, 0x831b,\r
-+      0x831b, 0x7312, 0x8319, 0x2001, 0x0800, 0xa802, 0x2048, 0x8900,\r
-+      0xa802, 0x2040, 0xa95e, 0xaa62, 0x8420, 0x2300, 0x9906, 0x0130,\r
-+      0x2848, 0x9188, 0x0040, 0x9291, 0x0000, 0x0c88, 0xa803, 0x0000,\r
-+      0x2071, 0x1800, 0x74be, 0x74c2, 0x0005, 0x00e6, 0x0016, 0x9984,\r
-+      0xfc00, 0x01e8, 0x908c, 0xf800, 0x1168, 0x9982, 0x0400, 0x02b8,\r
-+      0x9982, 0x0440, 0x0278, 0x9982, 0x0558, 0x0288, 0x9982, 0x0800,\r
-+      0x1270, 0x0040, 0x9982, 0x0800, 0x0250, 0x2071, 0x188d, 0x7010,\r
-+      0x9902, 0x1228, 0x9085, 0x0001, 0x001e, 0x00ee, 0x0005, 0x9006,\r
-+      0x0cd8, 0x00e6, 0x2071, 0x1a21, 0x7007, 0x0000, 0x9006, 0x701e,\r
-+      0x7022, 0x7002, 0x2071, 0x0000, 0x7010, 0x9085, 0x8044, 0x7012,\r
-+      0x2071, 0x0080, 0x9006, 0x20a9, 0x0040, 0x7022, 0x1f04, 0x111d,\r
-+      0x702b, 0x0020, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6,\r
-+      0xa06f, 0x0000, 0x2071, 0x1a21, 0x701c, 0x9088, 0x1a2b, 0x280a,\r
-+      0x8000, 0x9084, 0x003f, 0x701e, 0x7120, 0x9106, 0x090c, 0x0d7d,\r
-+      0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x00a9, 0x00fe,\r
-+      0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0x2071,\r
-+      0x1a21, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x0021,\r
-+      0x00fe, 0x00ee, 0x012e, 0x0005, 0x7004, 0x9086, 0x0000, 0x1110,\r
-+      0x7007, 0x0006, 0x7000, 0x0002, 0x1166, 0x12e9, 0x1164, 0x1164,\r
-+      0x12dd, 0x12dd, 0x12dd, 0x12dd, 0x080c, 0x0d7d, 0x701c, 0x7120,\r
-+      0x9106, 0x1148, 0x792c, 0x9184, 0x0001, 0x1120, 0xd1fc, 0x1110,\r
-+      0x7007, 0x0000, 0x0005, 0x0096, 0x9180, 0x1a2b, 0x2004, 0x700a,\r
-+      0x2048, 0x8108, 0x918c, 0x003f, 0x7122, 0x782b, 0x0026, 0xa88c,\r
-+      0x7802, 0xa890, 0x7806, 0xa894, 0x780a, 0xa898, 0x780e, 0xa878,\r
-+      0x700e, 0xa870, 0x7016, 0xa874, 0x701a, 0xa868, 0x009e, 0xd084,\r
-+      0x0120, 0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002, 0x00b1,\r
-+      0x0005, 0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, 0x0040,\r
-+      0x1210, 0x2110, 0x9006, 0x700e, 0x7212, 0x8203, 0x7812, 0x782b,\r
-+      0x0020, 0x782b, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,\r
-+      0x0136, 0x0146, 0x0156, 0x7014, 0x20e0, 0x7018, 0x2098, 0x20e9,\r
-+      0x0000, 0x20a1, 0x0088, 0x782b, 0x0026, 0x710c, 0x2011, 0x0040,\r
-+      0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x22a8, 0x4006,\r
-+      0x8203, 0x7812, 0x782b, 0x0020, 0x3300, 0x701a, 0x782b, 0x0001,\r
-+      0x015e, 0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x2009, 0x1a21,\r
-+      0x2104, 0xc095, 0x200a, 0x080c, 0x1143, 0x0005, 0x0016, 0x00e6,\r
-+      0x2071, 0x1a21, 0x00f6, 0x2079, 0x0080, 0x792c, 0xd1bc, 0x190c,\r
-+      0x0d76, 0x782b, 0x0002, 0xd1fc, 0x0120, 0x918c, 0x0700, 0x7004,\r
-+      0x0023, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x1154, 0x11fc, 0x1230,\r
-+      0x1308, 0x0d7d, 0x1323, 0x0d7d, 0x918c, 0x0700, 0x1550, 0x0136,\r
-+      0x0146, 0x0156, 0x7014, 0x20e8, 0x7018, 0x20a0, 0x20e1, 0x0000,\r
-+      0x2099, 0x0088, 0x782b, 0x0040, 0x7010, 0x20a8, 0x4005, 0x3400,\r
-+      0x701a, 0x015e, 0x014e, 0x013e, 0x700c, 0x9005, 0x0578, 0x7800,\r
-+      0x7802, 0x7804, 0x7806, 0x080c, 0x1199, 0x0005, 0x7008, 0x0096,\r
-+      0x2048, 0xa86f, 0x0100, 0x009e, 0x7007, 0x0000, 0x080c, 0x1154,\r
-+      0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0200, 0x009e, 0x0ca0,\r
-+      0x918c, 0x0700, 0x1150, 0x700c, 0x9005, 0x0180, 0x7800, 0x7802,\r
-+      0x7804, 0x7806, 0x080c, 0x11ae, 0x0005, 0x7008, 0x0096, 0x2048,\r
-+      0xa86f, 0x0200, 0x009e, 0x7007, 0x0000, 0x0080, 0x0096, 0x7008,\r
-+      0x2048, 0x7800, 0xa88e, 0x7804, 0xa892, 0x7808, 0xa896, 0x780c,\r
-+      0xa89a, 0xa86f, 0x0100, 0x009e, 0x7007, 0x0000, 0x0096, 0x00d6,\r
-+      0x7008, 0x2048, 0x2001, 0x18b9, 0x2004, 0x9906, 0x1128, 0xa89c,\r
-+      0x080f, 0x00de, 0x009e, 0x00a0, 0x00de, 0x009e, 0x0096, 0x00d6,\r
-+      0x7008, 0x2048, 0x0081, 0x0150, 0xa89c, 0x0086, 0x2940, 0x080f,\r
-+      0x008e, 0x00de, 0x009e, 0x080c, 0x1143, 0x0005, 0x00de, 0x009e,\r
-+      0x080c, 0x1143, 0x0005, 0xa8a8, 0xd08c, 0x0005, 0x0096, 0xa0a0,\r
-+      0x904d, 0x090c, 0x0d7d, 0xa06c, 0x908e, 0x0100, 0x0130, 0xa87b,\r
-+      0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x6d74, 0xa09f,\r
-+      0x0000, 0xa0a3, 0x0000, 0x2848, 0x080c, 0x106c, 0x009e, 0x0005,\r
-+      0x00a6, 0xa0a0, 0x904d, 0x090c, 0x0d7d, 0xa06c, 0x908e, 0x0100,\r
-+      0x0128, 0xa87b, 0x0001, 0xa883, 0x0000, 0x00c0, 0xa80c, 0x2050,\r
-+      0xb004, 0x9005, 0x0198, 0xa80e, 0x2050, 0x8006, 0x8006, 0x8007,\r
-+      0x908c, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xa076, 0xa172,\r
-+      0xb000, 0xa07a, 0x2810, 0x080c, 0x1124, 0x00e8, 0xa97c, 0xa894,\r
-+      0x0016, 0x0006, 0x080c, 0x6d74, 0x000e, 0x001e, 0xd1fc, 0x1138,\r
-+      0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0xabed, 0x00ce, 0x7008,\r
-+      0x2048, 0xa89f, 0x0000, 0xa8a3, 0x0000, 0x080c, 0x106c, 0x7007,\r
-+      0x0000, 0x080c, 0x1143, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000,\r
-+      0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e,\r
-+      0x0005, 0x0096, 0x2001, 0x192e, 0x204c, 0xa87c, 0x7812, 0xa88c,\r
-+      0x7802, 0xa890, 0x7806, 0xa894, 0x780a, 0xa898, 0x780e, 0x782b,\r
-+      0x0020, 0x0126, 0x2091, 0x8000, 0x782b, 0x0041, 0x7007, 0x0003,\r
-+      0x7000, 0xc084, 0x7002, 0x2900, 0x700a, 0x012e, 0x009e, 0x0005,\r
-+      0x20e1, 0x0000, 0x2099, 0x0088, 0x782b, 0x0040, 0x0096, 0x2001,\r
-+      0x192e, 0x204c, 0xaa7c, 0x009e, 0x080c, 0x8c1b, 0x2009, 0x188c,\r
-+      0x2104, 0x9084, 0xfffc, 0x200a, 0x080c, 0x8a8e, 0x7007, 0x0000,\r
-+      0x080c, 0x1154, 0x0005, 0x7007, 0x0000, 0x080c, 0x1154, 0x0005,\r
-+      0x0126, 0x2091, 0x2200, 0x2079, 0x0300, 0x2071, 0x1a6b, 0x7003,\r
-+      0x0000, 0x78bf, 0x00f6, 0x0041, 0x7807, 0x0007, 0x7803, 0x0000,\r
-+      0x7803, 0x0001, 0x012e, 0x0005, 0x00c6, 0x7803, 0x0000, 0x2001,\r
-+      0x0165, 0x2003, 0x4198, 0x7808, 0xd09c, 0x0118, 0x7820, 0x04e9,\r
-+      0x0cd0, 0x2001, 0x1a6c, 0x2003, 0x0000, 0x78ab, 0x0004, 0x78ac,\r
-+      0xd0ac, 0x1de8, 0x78ab, 0x0002, 0x7807, 0x0007, 0x7827, 0x0030,\r
-+      0x782b, 0x0400, 0x7827, 0x0031, 0x782b, 0x1a7a, 0x781f, 0xff00,\r
-+      0x781b, 0xff00, 0x2001, 0x0200, 0x2004, 0xd0dc, 0x0110, 0x781f,\r
-+      0x0303, 0x2061, 0x1a7a, 0x602f, 0x1ddc, 0x2001, 0x181a, 0x2004,\r
-+      0x9082, 0x1ddc, 0x6032, 0x603b, 0x1e55, 0x602b, 0x1aba, 0x6007,\r
-+      0x1a9a, 0x2061, 0x1a9a, 0x60af, 0x193c, 0x2001, 0x1927, 0x2004,\r
-+      0x60ba, 0x783f, 0x3374, 0x00ce, 0x0005, 0x9086, 0x000d, 0x11d0,\r
-+      0x7808, 0xd09c, 0x01b8, 0x7820, 0x0026, 0x2010, 0x080c, 0xc826,\r
-+      0x0180, 0x2260, 0x6000, 0x9086, 0x0004, 0x1158, 0x0016, 0x6120,\r
-+      0x9186, 0x0009, 0x0108, 0x0020, 0x2009, 0x004c, 0x080c, 0xac8c,\r
-+      0x001e, 0x002e, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908, 0x9184,\r
-+      0x0070, 0x190c, 0x0d76, 0xd19c, 0x05a0, 0x7820, 0x908c, 0xf000,\r
-+      0x0540, 0x2060, 0x6020, 0x9086, 0x0003, 0x1550, 0x6000, 0x9086,\r
-+      0x0004, 0x1530, 0x6114, 0x2148, 0xa876, 0xa87a, 0xa867, 0x0103,\r
-+      0x080c, 0x6b96, 0x00b6, 0x6010, 0x2058, 0xba3c, 0x8211, 0x0208,\r
-+      0xba3e, 0xb8d0, 0x9005, 0x190c, 0x6750, 0x00be, 0x6044, 0xd0fc,\r
-+      0x190c, 0xa8bf, 0x080c, 0xac16, 0x7808, 0xd09c, 0x19b0, 0x012e,\r
-+      0x0005, 0x908a, 0x0024, 0x1a0c, 0x0d7d, 0x002b, 0x012e, 0x0005,\r
-+      0x04b0, 0x012e, 0x0005, 0x1407, 0x142d, 0x145d, 0x1462, 0x1466,\r
-+      0x146b, 0x1493, 0x1497, 0x14a5, 0x14a9, 0x1407, 0x1574, 0x1578,\r
-+      0x15dd, 0x15e4, 0x1407, 0x15e5, 0x15e6, 0x15f1, 0x15f8, 0x1407,\r
-+      0x1407, 0x1407, 0x1407, 0x1407, 0x1407, 0x1407, 0x146d, 0x1407,\r
-+      0x1435, 0x145a, 0x1421, 0x1407, 0x1441, 0x140b, 0x1409, 0x080c,\r
-+      0x0d7d, 0x080c, 0x0d76, 0x080c, 0x1603, 0x2009, 0x1a79, 0x2104,\r
-+      0x8000, 0x200a, 0x080c, 0x7f99, 0x080c, 0x1ab5, 0x0005, 0x6044,\r
-+      0xd0fc, 0x190c, 0xa8bf, 0x2009, 0x0055, 0x080c, 0xac8c, 0x012e,\r
-+      0x0005, 0x080c, 0x1603, 0x2060, 0x6044, 0xd0fc, 0x190c, 0xa8bf,\r
-+      0x2009, 0x0055, 0x080c, 0xac8c, 0x0005, 0x2009, 0x0048, 0x080c,\r
-+      0x1603, 0x2060, 0x080c, 0xac8c, 0x0005, 0x2009, 0x0054, 0x080c,\r
-+      0x1603, 0x2060, 0x6044, 0xd0fc, 0x190c, 0xa8bf, 0x080c, 0xac8c,\r
-+      0x0005, 0x080c, 0x1603, 0x2060, 0x0056, 0x0066, 0x080c, 0x1603,\r
-+      0x2028, 0x080c, 0x1603, 0x2030, 0x0036, 0x0046, 0x2021, 0x0000,\r
-+      0x2418, 0x2009, 0x0056, 0x080c, 0xac8c, 0x004e, 0x003e, 0x006e,\r
-+      0x005e, 0x0005, 0x080c, 0x1603, 0x0005, 0x7004, 0xc085, 0xc0b5,\r
-+      0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x1603,\r
-+      0x080c, 0x16c7, 0x0005, 0x080c, 0x0d7d, 0x080c, 0x1603, 0x2060,\r
-+      0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048,\r
-+      0x080c, 0xac8c, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8,\r
-+      0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001,\r
-+      0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x1608, 0x2001, 0x0307,\r
-+      0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c,\r
-+      0x1603, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e,\r
-+      0x2009, 0x0048, 0x080c, 0xac8c, 0x0005, 0x080c, 0x1603, 0x080c,\r
-+      0x0d7d, 0x080c, 0x1603, 0x080c, 0x155f, 0x7827, 0x0018, 0x79ac,\r
-+      0xd1dc, 0x0904, 0x1512, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000,\r
-+      0x9065, 0x0140, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020,\r
-+      0x0804, 0x1518, 0x7004, 0x9005, 0x01c8, 0x1188, 0x78ab, 0x0004,\r
-+      0x7827, 0x0018, 0x782b, 0x0000, 0xd1bc, 0x090c, 0x0d7d, 0x2001,\r
-+      0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0804, 0x1544, 0x78ab,\r
-+      0x0004, 0x7803, 0x0001, 0x080c, 0x1578, 0x0005, 0x7827, 0x0018,\r
-+      0xa001, 0x7828, 0x7827, 0x0011, 0xa001, 0x7928, 0x9106, 0x0110,\r
-+      0x79ac, 0x08e0, 0x00e6, 0x2071, 0x0200, 0x702c, 0xd0c4, 0x0140,\r
-+      0x00ee, 0x080c, 0x1ab5, 0x080c, 0x133c, 0x7803, 0x0001, 0x0005,\r
-+      0x7037, 0x0001, 0xa001, 0x7150, 0x00ee, 0x918c, 0xff00, 0x9186,\r
-+      0x0500, 0x0110, 0x79ac, 0x0810, 0x7004, 0xc09d, 0x7006, 0x78ab,\r
-+      0x0004, 0x7803, 0x0001, 0x080c, 0x1578, 0x2001, 0x020d, 0x2003,\r
-+      0x0020, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0d7d,\r
-+      0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x0198, 0x080c,\r
-+      0x7f99, 0x080c, 0x1ab5, 0x080c, 0xc838, 0x0158, 0xa9ac, 0xa936,\r
-+      0xa9b0, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa880, 0xc0bd,\r
-+      0xa882, 0x0005, 0x6020, 0x9086, 0x0009, 0x1128, 0x2009, 0x004c,\r
-+      0x080c, 0xac8c, 0x0048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,\r
-+      0xd0bc, 0x6024, 0x190c, 0xcc34, 0x2029, 0x00c8, 0x8529, 0x0128,\r
-+      0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xe6da,\r
-+      0xd5a4, 0x1118, 0x080c, 0x1608, 0x0005, 0x080c, 0x7f99, 0x080c,\r
-+      0x1ab5, 0x0005, 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016,\r
-+      0x0066, 0x0076, 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007,\r
-+      0x9186, 0x0003, 0x0120, 0x2001, 0x0016, 0x080c, 0x1679, 0x00fe,\r
-+      0x007e, 0x006e, 0x001e, 0x0005, 0x7004, 0xc09d, 0x7006, 0x0005,\r
-+      0x7104, 0x9184, 0x0004, 0x190c, 0x0d7d, 0xd184, 0x1189, 0xd19c,\r
-+      0x0158, 0xc19c, 0x7106, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,\r
-+      0x0020, 0x080c, 0x1608, 0x0005, 0x81ff, 0x190c, 0x0d7d, 0x0005,\r
-+      0xc184, 0xd1b4, 0xc1b4, 0x7106, 0x0016, 0x00e6, 0x15f0, 0x2071,\r
-+      0x0200, 0x080c, 0x16b4, 0x05c8, 0x6014, 0x9005, 0x05b0, 0x0096,\r
-+      0x2048, 0xa864, 0x009e, 0x9084, 0x00ff, 0x908e, 0x0029, 0x0160,\r
-+      0x908e, 0x0048, 0x1550, 0x601c, 0xd084, 0x11e0, 0x00f6, 0x2c78,\r
-+      0x080c, 0x1731, 0x00fe, 0x00b0, 0x00f6, 0x2c78, 0x080c, 0x18b8,\r
-+      0x00fe, 0x2009, 0x01f4, 0x8109, 0x0168, 0x2001, 0x0201, 0x2004,\r
-+      0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1118, 0x080c,\r
-+      0x1608, 0x0040, 0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x133c,\r
-+      0x7803, 0x0001, 0x00ee, 0x001e, 0x0005, 0x2001, 0x020d, 0x2003,\r
-+      0x0050, 0x2003, 0x0020, 0x0461, 0x0ca8, 0x0429, 0x2060, 0x2009,\r
-+      0x0053, 0x080c, 0xac8c, 0x0005, 0x0005, 0x0005, 0x00e1, 0x2008,\r
-+      0x00d1, 0x0006, 0x7004, 0xc09d, 0x7006, 0x000e, 0x080c, 0x8f78,\r
-+      0x0005, 0x0089, 0x9005, 0x0118, 0x080c, 0x8b7b, 0x0cd0, 0x0005,\r
-+      0x2001, 0x0036, 0x2009, 0x1820, 0x210c, 0x2011, 0x181f, 0x2214,\r
-+      0x080c, 0x1679, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005,\r
-+      0x080c, 0x155f, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109,\r
-+      0x0510, 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000,\r
-+      0x79bc, 0xd1a4, 0x1528, 0x79b8, 0x918c, 0x0fff, 0x0180, 0x9182,\r
-+      0x0841, 0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c,\r
-+      0x810c, 0x080c, 0x166b, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9,\r
-+      0x6827, 0x0002, 0x04c1, 0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4,\r
-+      0x1500, 0x6804, 0x9005, 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0,\r
-+      0x080c, 0x7f99, 0x080c, 0x1ab5, 0x0090, 0x7827, 0x0015, 0x782b,\r
-+      0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d, 0x2003,\r
-+      0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001, 0x00de,\r
-+      0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30, 0x7827,\r
-+      0x0015, 0x782b, 0x0000, 0x7803, 0x0001, 0x6800, 0x9085, 0x1800,\r
-+      0x6802, 0x00de, 0x0005, 0x6824, 0x9084, 0x0003, 0x1de0, 0x0005,\r
-+      0x2001, 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830, 0x9086, 0x0041,\r
-+      0x0005, 0x00f6, 0x2079, 0x0300, 0x0006, 0x7808, 0xd09c, 0x0140,\r
-+      0x0016, 0x0026, 0x00c6, 0x080c, 0x13a3, 0x00ce, 0x002e, 0x001e,\r
-+      0x000e, 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x0059,\r
-+      0x1118, 0x000e, 0x00fe, 0x0005, 0x000e, 0x792c, 0x3900, 0x8000,\r
-+      0x2004, 0x080c, 0x0d7d, 0x2009, 0xff00, 0x8109, 0x0120, 0x7818,\r
-+      0xd0bc, 0x1dd8, 0x0005, 0x9085, 0x0001, 0x0005, 0x7832, 0x7936,\r
-+      0x7a3a, 0x781b, 0x8080, 0x0c79, 0x1108, 0x0005, 0x792c, 0x3900,\r
-+      0x8000, 0x2004, 0x080c, 0x0d7d, 0x7037, 0x0001, 0x7150, 0x7037,\r
-+      0x0002, 0x7050, 0x2060, 0xd1bc, 0x1110, 0x7054, 0x2060, 0x918c,\r
-+      0xff00, 0x9186, 0x0500, 0x0110, 0x9085, 0x0001, 0x0005, 0x00e6,\r
-+      0x0016, 0x2071, 0x0200, 0x0c41, 0x6124, 0xd1dc, 0x01f8, 0x701c,\r
-+      0xd08c, 0x0904, 0x1726, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004,\r
-+      0xd0bc, 0x0904, 0x1726, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104,\r
-+      0x6038, 0x00ce, 0x918e, 0x0039, 0x1904, 0x1726, 0x9c06, 0x15f0,\r
-+      0x0126, 0x2091, 0x2600, 0x080c, 0x7ef1, 0x012e, 0x7358, 0x745c,\r
-+      0x6014, 0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800,\r
-+      0x00be, 0xd0bc, 0x190c, 0xcc0f, 0xab42, 0xac3e, 0x2001, 0x1869,\r
-+      0x2004, 0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6,\r
-+      0x2058, 0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837,\r
-+      0xffff, 0x080c, 0x1e75, 0x1190, 0x080c, 0x1913, 0x2a00, 0xa816,\r
-+      0x0130, 0x2800, 0xa80e, 0x2c05, 0xa80a, 0x2c00, 0xa812, 0x7037,\r
-+      0x0020, 0x781f, 0x0300, 0x001e, 0x00ee, 0x0005, 0x7037, 0x0050,\r
-+      0x7037, 0x0020, 0x001e, 0x00ee, 0x080c, 0x1608, 0x0005, 0x080c,\r
-+      0x0d7d, 0x2cf0, 0x0126, 0x2091, 0x2200, 0x00c6, 0x3e60, 0x6014,\r
-+      0x2048, 0x2940, 0x903e, 0x2730, 0xa864, 0x2068, 0xa81a, 0x9d84,\r
-+      0x000f, 0x9088, 0x1e55, 0x2165, 0x0002, 0x175c, 0x17ca, 0x175c,\r
-+      0x175c, 0x1760, 0x17ab, 0x175c, 0x1780, 0x1755, 0x17c1, 0x175c,\r
-+      0x175c, 0x1765, 0x18b6, 0x1794, 0x178a, 0xa964, 0x918c, 0x00ff,\r
-+      0x918e, 0x0048, 0x0904, 0x17c1, 0x9085, 0x0001, 0x0804, 0x18ad,\r
-+      0xa87c, 0xd0ac, 0x0dc8, 0x0804, 0x17d1, 0xa87c, 0xd0ac, 0x0da0,\r
-+      0x0804, 0x183c, 0xa898, 0x901d, 0x1108, 0xab9c, 0x9016, 0xaab2,\r
-+      0xaa3e, 0xaa42, 0x3e00, 0x9080, 0x0008, 0x2004, 0x9080, 0x9141,\r
-+      0x2005, 0x9005, 0x090c, 0x0d7d, 0x2004, 0xa8ae, 0x0804, 0x1895,\r
-+      0xa87c, 0xd0bc, 0x09c8, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888,\r
-+      0x0804, 0x17d1, 0xa87c, 0xd0bc, 0x0978, 0xa890, 0xa842, 0xa88c,\r
-+      0xa83e, 0xa888, 0x0804, 0x183c, 0xa87c, 0xd0bc, 0x0928, 0xa890,\r
-+      0xa842, 0xa88c, 0xa83e, 0xa804, 0x9045, 0x090c, 0x0d7d, 0xa164,\r
-+      0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1e55, 0x2065, 0xa888, 0xd19c,\r
-+      0x1904, 0x183c, 0x0430, 0xa87c, 0xd0ac, 0x0904, 0x175c, 0xa804,\r
-+      0x9045, 0x090c, 0x0d7d, 0xa164, 0xa91a, 0x91ec, 0x000f, 0x9d80,\r
-+      0x1e55, 0x2065, 0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x183c,\r
-+      0x0080, 0xa87c, 0xd0ac, 0x0904, 0x175c, 0x9006, 0xa842, 0xa83e,\r
-+      0x0804, 0x183c, 0xa87c, 0xd0ac, 0x0904, 0x175c, 0x9006, 0xa842,\r
-+      0xa83e, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0d7d, 0x9082, 0x001b,\r
-+      0x0002, 0x17f4, 0x17f4, 0x17f6, 0x17f4, 0x17f4, 0x17f4, 0x1800,\r
-+      0x17f4, 0x17f4, 0x17f4, 0x180a, 0x17f4, 0x17f4, 0x17f4, 0x1814,\r
-+      0x17f4, 0x17f4, 0x17f4, 0x181e, 0x17f4, 0x17f4, 0x17f4, 0x1828,\r
-+      0x17f4, 0x17f4, 0x17f4, 0x1832, 0x080c, 0x0d7d, 0xa574, 0xa478,\r
-+      0x9d86, 0x0024, 0x0904, 0x176a, 0xa37c, 0xa280, 0x0804, 0x1895,\r
-+      0xa584, 0xa488, 0x9d86, 0x0024, 0x0904, 0x176a, 0xa38c, 0xa290,\r
-+      0x0804, 0x1895, 0xa594, 0xa498, 0x9d86, 0x0024, 0x0904, 0x176a,\r
-+      0xa39c, 0xa2a0, 0x0804, 0x1895, 0xa5a4, 0xa4a8, 0x9d86, 0x0024,\r
-+      0x0904, 0x176a, 0xa3ac, 0xa2b0, 0x0804, 0x1895, 0xa5b4, 0xa4b8,\r
-+      0x9d86, 0x0024, 0x0904, 0x176a, 0xa3bc, 0xa2c0, 0x0804, 0x1895,\r
-+      0xa5c4, 0xa4c8, 0x9d86, 0x0024, 0x0904, 0x176a, 0xa3cc, 0xa2d0,\r
-+      0x0804, 0x1895, 0xa5d4, 0xa4d8, 0x9d86, 0x0024, 0x0904, 0x176a,\r
-+      0xa3dc, 0xa2e0, 0x0804, 0x1895, 0x2c05, 0x908a, 0x0034, 0x1a0c,\r
-+      0x0d7d, 0x9082, 0x001b, 0x0002, 0x185f, 0x185d, 0x185d, 0x185d,\r
-+      0x185d, 0x185d, 0x186a, 0x185d, 0x185d, 0x185d, 0x185d, 0x185d,\r
-+      0x1875, 0x185d, 0x185d, 0x185d, 0x185d, 0x185d, 0x1880, 0x185d,\r
-+      0x185d, 0x185d, 0x185d, 0x185d, 0x188b, 0x080c, 0x0d7d, 0xa56c,\r
-+      0xa470, 0xa774, 0xa678, 0x9d86, 0x002c, 0x0904, 0x176a, 0xa37c,\r
-+      0xa280, 0x0458, 0xa584, 0xa488, 0xa78c, 0xa690, 0x9d86, 0x002c,\r
-+      0x0904, 0x176a, 0xa394, 0xa298, 0x0400, 0xa59c, 0xa4a0, 0xa7a4,\r
-+      0xa6a8, 0x9d86, 0x002c, 0x0904, 0x176a, 0xa3ac, 0xa2b0, 0x00a8,\r
-+      0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0x9d86, 0x002c, 0x0904, 0x176a,\r
-+      0xa3c4, 0xa2c8, 0x0050, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0x9d86,\r
-+      0x002c, 0x0904, 0x176a, 0xa3dc, 0xa2e0, 0xab2e, 0xaa32, 0xad1e,\r
-+      0xac22, 0xaf26, 0xae2a, 0xa988, 0x8c60, 0x2c1d, 0xa8ac, 0xaab0,\r
-+      0xa836, 0xaa3a, 0x8109, 0xa916, 0x1158, 0x3e60, 0x601c, 0xc085,\r
-+      0x601e, 0xa87c, 0xc0dd, 0xa87e, 0x9006, 0x00ce, 0x012e, 0x0005,\r
-+      0x2800, 0xa80e, 0xab0a, 0x2c00, 0xa812, 0x0c78, 0x0804, 0x175c,\r
-+      0x2ff0, 0x0126, 0x2091, 0x2200, 0x00c6, 0x3e60, 0x6014, 0x2048,\r
-+      0x2940, 0xa80e, 0x2061, 0x1e50, 0xa813, 0x1e50, 0x2c05, 0xa80a,\r
-+      0xa964, 0xa91a, 0xa87c, 0xd0ac, 0x090c, 0x0d7d, 0x9006, 0xa842,\r
-+      0xa83e, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0d7d, 0xadcc, 0xacd0,\r
-+      0xafd4, 0xaed8, 0xabdc, 0xaae0, 0xab2e, 0xaa32, 0xad1e, 0xac22,\r
-+      0xaf26, 0xae2a, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0xa988, 0xa864,\r
-+      0x9084, 0x00ff, 0x9086, 0x0008, 0x1120, 0x8109, 0xa916, 0x0128,\r
-+      0x0078, 0x918a, 0x0002, 0xa916, 0x1158, 0x3e60, 0x601c, 0xc085,\r
-+      0x601e, 0xa87c, 0xc0dd, 0xa87e, 0x9006, 0x00ce, 0x012e, 0x0005,\r
-+      0xa804, 0x9045, 0x090c, 0x0d7d, 0xa80e, 0xa064, 0xa81a, 0x9084,\r
-+      0x000f, 0x9080, 0x1e55, 0x2015, 0x82ff, 0x090c, 0x0d7d, 0xaa12,\r
-+      0x2205, 0xa80a, 0x0c10, 0x903e, 0x2730, 0xa880, 0xd0fc, 0x1190,\r
-+      0x2d00, 0x0002, 0x1a3d, 0x196a, 0x196a, 0x1a3d, 0x196a, 0x1a37,\r
-+      0x1a3d, 0x196a, 0x19da, 0x19da, 0x19da, 0x1a3d, 0x19da, 0x1a3d,\r
-+      0x1a34, 0x19da, 0xc0fc, 0xa882, 0xab2c, 0xaa30, 0xad1c, 0xac20,\r
-+      0xdd9c, 0x0904, 0x1a3f, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0d7d,\r
-+      0x9082, 0x001b, 0x0002, 0x1956, 0x1954, 0x1954, 0x1954, 0x1954,\r
-+      0x1954, 0x195a, 0x1954, 0x1954, 0x1954, 0x1954, 0x1954, 0x195e,\r
-+      0x1954, 0x1954, 0x1954, 0x1954, 0x1954, 0x1962, 0x1954, 0x1954,\r
-+      0x1954, 0x1954, 0x1954, 0x1966, 0x080c, 0x0d7d, 0xa774, 0xa678,\r
-+      0x0804, 0x1a3f, 0xa78c, 0xa690, 0x0804, 0x1a3f, 0xa7a4, 0xa6a8,\r
-+      0x0804, 0x1a3f, 0xa7bc, 0xa6c0, 0x0804, 0x1a3f, 0xa7d4, 0xa6d8,\r
-+      0x0804, 0x1a3f, 0xa898, 0x901d, 0x1108, 0xab9c, 0x9016, 0x2c05,\r
-+      0x908a, 0x0036, 0x1a0c, 0x0d7d, 0x9082, 0x001b, 0x0002, 0x1992,\r
-+      0x1992, 0x1994, 0x1992, 0x1992, 0x1992, 0x199e, 0x1992, 0x1992,\r
-+      0x1992, 0x19a8, 0x1992, 0x1992, 0x1992, 0x19b2, 0x1992, 0x1992,\r
-+      0x1992, 0x19bc, 0x1992, 0x1992, 0x1992, 0x19c6, 0x1992, 0x1992,\r
-+      0x1992, 0x19d0, 0x080c, 0x0d7d, 0xa574, 0xa478, 0x9d86, 0x0004,\r
-+      0x0904, 0x1a3f, 0xa37c, 0xa280, 0x0804, 0x1a3f, 0xa584, 0xa488,\r
-+      0x9d86, 0x0004, 0x0904, 0x1a3f, 0xa38c, 0xa290, 0x0804, 0x1a3f,\r
-+      0xa594, 0xa498, 0x9d86, 0x0004, 0x0904, 0x1a3f, 0xa39c, 0xa2a0,\r
-+      0x0804, 0x1a3f, 0xa5a4, 0xa4a8, 0x9d86, 0x0004, 0x0904, 0x1a3f,\r
-+      0xa3ac, 0xa2b0, 0x0804, 0x1a3f, 0xa5b4, 0xa4b8, 0x9d86, 0x0004,\r
-+      0x0904, 0x1a3f, 0xa3bc, 0xa2c0, 0x0804, 0x1a3f, 0xa5c4, 0xa4c8,\r
-+      0x9d86, 0x0004, 0x0904, 0x1a3f, 0xa3cc, 0xa2d0, 0x0804, 0x1a3f,\r
-+      0xa5d4, 0xa4d8, 0x9d86, 0x0004, 0x0904, 0x1a3f, 0xa3dc, 0xa2e0,\r
-+      0x0804, 0x1a3f, 0xa898, 0x901d, 0x1108, 0xab9c, 0x9016, 0x2c05,\r
-+      0x908a, 0x0034, 0x1a0c, 0x0d7d, 0x9082, 0x001b, 0x0002, 0x1a02,\r
-+      0x1a00, 0x1a00, 0x1a00, 0x1a00, 0x1a00, 0x1a0c, 0x1a00, 0x1a00,\r
-+      0x1a00, 0x1a00, 0x1a00, 0x1a16, 0x1a00, 0x1a00, 0x1a00, 0x1a00,\r
-+      0x1a00, 0x1a20, 0x1a00, 0x1a00, 0x1a00, 0x1a00, 0x1a00, 0x1a2a,\r
-+      0x080c, 0x0d7d, 0xa56c, 0xa470, 0xa774, 0xa678, 0x9d86, 0x000c,\r
-+      0x05b0, 0xa37c, 0xa280, 0x0498, 0xa584, 0xa488, 0xa78c, 0xa690,\r
-+      0x9d86, 0x000c, 0x0560, 0xa394, 0xa298, 0x0448, 0xa59c, 0xa4a0,\r
-+      0xa7a4, 0xa6a8, 0x9d86, 0x000c, 0x0510, 0xa3ac, 0xa2b0, 0x00f8,\r
-+      0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0x9d86, 0x000c, 0x01c0, 0xa3c4,\r
-+      0xa2c8, 0x00a8, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0x9d86, 0x000c,\r
-+      0x0170, 0xa3dc, 0xa2e0, 0x0058, 0x9d86, 0x000e, 0x1130, 0x080c,\r
-+      0x1e2b, 0x1904, 0x1913, 0x900e, 0x0050, 0x080c, 0x0d7d, 0xab2e,\r
-+      0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0x080c, 0x1e2b, 0x0005,\r
-+      0x6014, 0x2048, 0x6118, 0x810c, 0x810c, 0x810c, 0x81ff, 0x1118,\r
-+      0xa887, 0x0001, 0x0008, 0xa986, 0x601b, 0x0002, 0xa974, 0xd1dc,\r
-+      0x1108, 0x0005, 0xa934, 0xa88c, 0x9106, 0x1158, 0xa938, 0xa890,\r
-+      0x9106, 0x1138, 0x601c, 0xc084, 0x601e, 0x2009, 0x0048, 0x0804,\r
-+      0xac8c, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908,\r
-+      0x918c, 0x0007, 0x9186, 0x0000, 0x05b0, 0x9186, 0x0003, 0x0598,\r
-+      0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0008, 0x00c6, 0x781f,\r
-+      0x0808, 0x7808, 0xd09c, 0x0120, 0x080c, 0x13a3, 0x8631, 0x1db8,\r
-+      0x00ce, 0x781f, 0x0800, 0x2031, 0x0168, 0x00c6, 0x7808, 0xd09c,\r
-+      0x190c, 0x13a3, 0x00ce, 0x2001, 0x0038, 0x080c, 0x1b42, 0x7930,\r
-+      0x9186, 0x0040, 0x0160, 0x9186, 0x0042, 0x190c, 0x0d7d, 0x2001,\r
-+      0x001e, 0x8001, 0x1df0, 0x8631, 0x1d40, 0x080c, 0x1b51, 0x000e,\r
-+      0x6022, 0x012e, 0x0005, 0x080c, 0x1b3e, 0x7827, 0x0015, 0x7828,\r
-+      0x9c06, 0x1db8, 0x782b, 0x0000, 0x0ca0, 0x00f6, 0x2079, 0x0300,\r
-+      0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, 0x080c, 0x74e9, 0x11b0,\r
-+      0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160, 0x2003, 0x0000,\r
-+      0x2011, 0x012c, 0xa001, 0xa001, 0x8211, 0x1de0, 0x0081, 0x2001,\r
-+      0x0386, 0x2003, 0x2020, 0x080c, 0x758a, 0x0005, 0x0479, 0x0039,\r
-+      0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0005, 0x00e6,\r
-+      0x2071, 0x0200, 0x080c, 0x29fc, 0x2009, 0x003c, 0x080c, 0x21b0,\r
-+      0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, 0x003c, 0x1de0,\r
-+      0x080c, 0x8553, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e,\r
-+      0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300, 0x080c,\r
-+      0x133c, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x0138,\r
-+      0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, 0x0000,\r
-+      0x080c, 0x74e9, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001, 0x0141,\r
-+      0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0x939c, 0x0048,\r
-+      0x1160, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421, 0x1d70,\r
-+      0x2001, 0x015d, 0x2003, 0x0000, 0x0005, 0x0046, 0x2021, 0x0019,\r
-+      0x2003, 0x0048, 0xa001, 0xa001, 0x201c, 0x939c, 0x0048, 0x0120,\r
-+      0x8421, 0x1db0, 0x004e, 0x0c60, 0x004e, 0x0c40, 0x601c, 0xc084,\r
-+      0x601e, 0x0005, 0x2c08, 0x621c, 0x080c, 0x1679, 0x7930, 0x0005,\r
-+      0x2c08, 0x621c, 0x080c, 0x16a6, 0x7930, 0x0005, 0x8001, 0x1df0,\r
-+      0x0005, 0x2031, 0x0005, 0x781c, 0x9084, 0x0007, 0x0170, 0x2001,\r
-+      0x0038, 0x0c41, 0x9186, 0x0040, 0x0904, 0x1baf, 0x2001, 0x001e,\r
-+      0x0c69, 0x8631, 0x1d80, 0x080c, 0x0d7d, 0x781f, 0x0202, 0x2001,\r
-+      0x015d, 0x2003, 0x0000, 0x2001, 0x0b10, 0x0c01, 0x781c, 0xd084,\r
-+      0x0110, 0x0861, 0x04e0, 0x2001, 0x0030, 0x0891, 0x9186, 0x0040,\r
-+      0x0568, 0x781c, 0xd084, 0x1da8, 0x781f, 0x0101, 0x2001, 0x0014,\r
-+      0x0869, 0x2001, 0x0037, 0x0821, 0x9186, 0x0040, 0x0140, 0x2001,\r
-+      0x0030, 0x080c, 0x1b48, 0x9186, 0x0040, 0x190c, 0x0d7d, 0x00d6,\r
-+      0x2069, 0x0200, 0x692c, 0xd1f4, 0x1170, 0xd1c4, 0x0160, 0xd19c,\r
-+      0x0130, 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0080, 0x6908,\r
-+      0x9184, 0x0007, 0x1db0, 0x00de, 0x781f, 0x0100, 0x791c, 0x9184,\r
-+      0x0007, 0x090c, 0x0d7d, 0xa001, 0xa001, 0x781f, 0x0200, 0x0005,\r
-+      0x0126, 0x2091, 0x2400, 0x2079, 0x0380, 0x2001, 0x19e7, 0x2070,\r
-+      0x012e, 0x0005, 0x2cf0, 0x0126, 0x2091, 0x2400, 0x3e60, 0x6014,\r
-+      0x2048, 0xa964, 0xa91a, 0x918c, 0x00ff, 0x9184, 0x000f, 0x0002,\r
-+      0x1be4, 0x1be4, 0x1be4, 0x1be6, 0x1be4, 0x1be4, 0x1be4, 0x1be4,\r
-+      0x1bd8, 0x1bee, 0x1be4, 0x1bea, 0x1be4, 0x1be4, 0x1be4, 0x1be4,\r
-+      0x9086, 0x0008, 0x1148, 0xa87c, 0xd0b4, 0x0904, 0x1d5e, 0x2011,\r
-+      0x1e50, 0x2205, 0xab88, 0x00a8, 0x080c, 0x0d7d, 0x9186, 0x0013,\r
-+      0x0128, 0x0cd0, 0x9186, 0x001b, 0x0108, 0x0cb0, 0xa87c, 0xd0b4,\r
-+      0x0904, 0x1d5e, 0x9184, 0x000f, 0x9080, 0x1e55, 0x2015, 0x2205,\r
-+      0xab88, 0x2908, 0xa80a, 0xa90e, 0xaa12, 0xab16, 0x9006, 0xa842,\r
-+      0xa83e, 0x012e, 0x0005, 0x2cf0, 0x0126, 0x2091, 0x2400, 0x3e60,\r
-+      0x6014, 0x2048, 0xa88c, 0xa990, 0xaaac, 0xabb0, 0xaa36, 0xab3a,\r
-+      0xa83e, 0xa942, 0xa846, 0xa94a, 0xa964, 0x918c, 0x00ff, 0x9186,\r
-+      0x001e, 0x0198, 0x2940, 0xa064, 0xa81a, 0x90ec, 0x000f, 0x9d80,\r
-+      0x1e55, 0x2065, 0x2c05, 0x2808, 0x2c10, 0xab88, 0xa80a, 0xa90e,\r
-+      0xaa12, 0xab16, 0x012e, 0x3e60, 0x0005, 0xa804, 0x2040, 0x0c58,\r
-+      0x2cf0, 0x0126, 0x2091, 0x2400, 0x3e60, 0x6014, 0x2048, 0xa97c,\r
-+      0x2950, 0xd1dc, 0x1904, 0x1d28, 0xc1dd, 0xa97e, 0x9006, 0xa842,\r
-+      0xa83e, 0xa988, 0x8109, 0xa916, 0xa964, 0xa91a, 0x9184, 0x000f,\r
-+      0x9088, 0x1e55, 0x2145, 0x0002, 0x1c5c, 0x1c6a, 0x1c5c, 0x1c5c,\r
-+      0x1c5c, 0x1c5e, 0x1c5c, 0x1c5c, 0x1cbf, 0x1cbf, 0x1c5c, 0x1c5c,\r
-+      0x1c5c, 0x1cbd, 0x1c5c, 0x1c5c, 0x080c, 0x0d7d, 0xa804, 0x2050,\r
-+      0xb164, 0xa91a, 0x9184, 0x000f, 0x9080, 0x1e55, 0x2045, 0xd19c,\r
-+      0x1904, 0x1cbf, 0x9036, 0x2638, 0x2805, 0x908a, 0x0036, 0x1a0c,\r
-+      0x0d7d, 0x9082, 0x001b, 0x0002, 0x1c8f, 0x1c8f, 0x1c91, 0x1c8f,\r
-+      0x1c8f, 0x1c8f, 0x1c97, 0x1c8f, 0x1c8f, 0x1c8f, 0x1c9d, 0x1c8f,\r
-+      0x1c8f, 0x1c8f, 0x1ca3, 0x1c8f, 0x1c8f, 0x1c8f, 0x1ca9, 0x1c8f,\r
-+      0x1c8f, 0x1c8f, 0x1caf, 0x1c8f, 0x1c8f, 0x1c8f, 0x1cb5, 0x080c,\r
-+      0x0d7d, 0xb574, 0xb478, 0xb37c, 0xb280, 0x0804, 0x1d04, 0xb584,\r
-+      0xb488, 0xb38c, 0xb290, 0x0804, 0x1d04, 0xb594, 0xb498, 0xb39c,\r
-+      0xb2a0, 0x0804, 0x1d04, 0xb5a4, 0xb4a8, 0xb3ac, 0xb2b0, 0x0804,\r
-+      0x1d04, 0xb5b4, 0xb4b8, 0xb3bc, 0xb2c0, 0x0804, 0x1d04, 0xb5c4,\r
-+      0xb4c8, 0xb3cc, 0xb2d0, 0x0804, 0x1d04, 0xb5d4, 0xb4d8, 0xb3dc,\r
-+      0xb2e0, 0x0804, 0x1d04, 0x0804, 0x1d04, 0x080c, 0x0d7d, 0x2805,\r
-+      0x908a, 0x0034, 0x1a0c, 0x0d7d, 0x9082, 0x001b, 0x0002, 0x1ce2,\r
-+      0x1ce0, 0x1ce0, 0x1ce0, 0x1ce0, 0x1ce0, 0x1ce9, 0x1ce0, 0x1ce0,\r
-+      0x1ce0, 0x1ce0, 0x1ce0, 0x1cf0, 0x1ce0, 0x1ce0, 0x1ce0, 0x1ce0,\r
-+      0x1ce0, 0x1cf7, 0x1ce0, 0x1ce0, 0x1ce0, 0x1ce0, 0x1ce0, 0x1cfe,\r
-+      0x080c, 0x0d7d, 0xb56c, 0xb470, 0xb774, 0xb678, 0xb37c, 0xb280,\r
-+      0x00d8, 0xb584, 0xb488, 0xb78c, 0xb690, 0xb394, 0xb298, 0x00a0,\r
-+      0xb59c, 0xb4a0, 0xb7a4, 0xb6a8, 0xb3ac, 0xb2b0, 0x0068, 0xb5b4,\r
-+      0xb4b8, 0xb7bc, 0xb6c0, 0xb3c4, 0xb2c8, 0x0030, 0xb5cc, 0xb4d0,\r
-+      0xb7d4, 0xb6d8, 0xb3dc, 0xb2e0, 0xab2e, 0xaa32, 0xad1e, 0xac22,\r
-+      0xaf26, 0xae2a, 0xa988, 0x8109, 0xa916, 0x1118, 0x9006, 0x012e,\r
-+      0x0005, 0x8840, 0x2805, 0x9005, 0x1168, 0xb004, 0x9005, 0x090c,\r
-+      0x0d7d, 0x2050, 0xb164, 0xa91a, 0x9184, 0x000f, 0x9080, 0x1e55,\r
-+      0x2045, 0x2805, 0x2810, 0x2a08, 0xa80a, 0xa90e, 0xaa12, 0x0c30,\r
-+      0x3e60, 0x6344, 0xd3fc, 0x190c, 0x0d7d, 0xa93c, 0xaa40, 0xa844,\r
-+      0x9106, 0x1118, 0xa848, 0x9206, 0x0508, 0x2958, 0xab48, 0xac44,\r
-+      0x2940, 0x080c, 0x1e75, 0x1998, 0x2850, 0x2c40, 0xab14, 0xa880,\r
-+      0xd0fc, 0x1140, 0xa810, 0x2005, 0xa80a, 0x2a00, 0xa80e, 0x2009,\r
-+      0x8015, 0x0070, 0x00c6, 0x3e60, 0x6044, 0xc0a4, 0x9085, 0x8005,\r
-+      0x6046, 0x00ce, 0x8319, 0xab16, 0x1904, 0x1d11, 0x2009, 0x8005,\r
-+      0x3e60, 0x6044, 0x9105, 0x6046, 0x0804, 0x1d0e, 0x080c, 0x0d7d,\r
-+      0x00f6, 0x00e6, 0x0096, 0x00c6, 0x0026, 0x704c, 0x9c06, 0x190c,\r
-+      0x0d7d, 0x2079, 0x0090, 0x2001, 0x0105, 0x2003, 0x0010, 0x782b,\r
-+      0x0004, 0x7057, 0x0000, 0x6014, 0x2048, 0x080c, 0xc838, 0x0118,\r
-+      0xa880, 0xc0bd, 0xa882, 0x6020, 0x9086, 0x0006, 0x1170, 0x2061,\r
-+      0x0100, 0x62c8, 0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206,\r
-+      0x1dc0, 0x60c4, 0xa89a, 0x60c8, 0xa896, 0x704c, 0x2060, 0x00c6,\r
-+      0x080c, 0xc443, 0x080c, 0xa896, 0x00ce, 0x704c, 0x9c06, 0x1150,\r
-+      0x2009, 0x0040, 0x080c, 0x21b0, 0x080c, 0xa34e, 0x2011, 0x0000,\r
-+      0x080c, 0xa1d9, 0x002e, 0x00ce, 0x009e, 0x00ee, 0x00fe, 0x0005,\r
-+      0x00f6, 0x2079, 0x0090, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079,\r
-+      0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816, 0x2019,\r
-+      0x1000, 0x8319, 0x090c, 0x0d7d, 0x7820, 0xd0bc, 0x1dd0, 0x79c8,\r
-+      0x000e, 0x9102, 0x001e, 0x0006, 0x0016, 0x79c4, 0x000e, 0x9103,\r
-+      0x78c6, 0x000e, 0x78ca, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816,\r
-+      0x2079, 0x0090, 0x782b, 0x0008, 0x7057, 0x0000, 0x00fe, 0x0005,\r
-+      0x00f6, 0x00e6, 0x2071, 0x19e7, 0x7054, 0x9086, 0x0000, 0x0904,\r
-+      0x1e26, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c, 0xd194, 0x01b8,\r
-+      0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, 0x080c, 0xe723,\r
-+      0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d7d, 0x0016, 0x2009,\r
-+      0x0040, 0x080c, 0x21b0, 0x001e, 0x2001, 0x020c, 0x2102, 0x2009,\r
-+      0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009,\r
-+      0x0040, 0x080c, 0x21b0, 0x782c, 0xd0fc, 0x09a8, 0x080c, 0xa8b2,\r
-+      0x782c, 0xd0fc, 0x1de8, 0x080c, 0xa896, 0x7054, 0x9086, 0x0000,\r
-+      0x1950, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040,\r
-+      0x080c, 0x21b0, 0x782b, 0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe,\r
-+      0x0005, 0x080c, 0x0d7d, 0x8c60, 0x2c05, 0x9005, 0x0110, 0x8a51,\r
-+      0x0005, 0xa004, 0x9005, 0x0168, 0xa85a, 0x2040, 0xa064, 0x9084,\r
-+      0x000f, 0x9080, 0x1e55, 0x2065, 0x8cff, 0x090c, 0x0d7d, 0x8a51,\r
-+      0x0005, 0x2050, 0x0005, 0x0000, 0x001d, 0x0021, 0x0025, 0x0029,\r
-+      0x002d, 0x0031, 0x0035, 0x0000, 0x001b, 0x0021, 0x0027, 0x002d,\r
-+      0x0033, 0x0000, 0x0000, 0x0023, 0x0000, 0x0000, 0x1e48, 0x1e44,\r
-+      0x1e48, 0x1e48, 0x1e52, 0x0000, 0x1e48, 0x1e4f, 0x1e4f, 0x1e4c,\r
-+      0x1e4f, 0x1e4f, 0x0000, 0x1e52, 0x1e4f, 0x0000, 0x1e4a, 0x1e4a,\r
-+      0x0000, 0x1e4a, 0x1e52, 0x0000, 0x1e4a, 0x1e50, 0x1e50, 0x1e50,\r
-+      0x0000, 0x1e50, 0x0000, 0x1e52, 0x1e50, 0x00c6, 0x00d6, 0x0086,\r
-+      0xab42, 0xac3e, 0xa888, 0x9055, 0x0904, 0x2054, 0x2940, 0xa064,\r
-+      0x90ec, 0x000f, 0x9084, 0x00ff, 0x9086, 0x0008, 0x1118, 0x2061,\r
-+      0x1e50, 0x00d0, 0x9de0, 0x1e55, 0x9d86, 0x0007, 0x0130, 0x9d86,\r
-+      0x000e, 0x0118, 0x9d86, 0x000f, 0x1120, 0xa08c, 0x9422, 0xa090,\r
-+      0x931b, 0x2c05, 0x9065, 0x1140, 0x0310, 0x0804, 0x2054, 0xa004,\r
-+      0x9045, 0x0904, 0x2054, 0x08d8, 0x2c05, 0x9005, 0x0904, 0x1f3c,\r
-+      0xdd9c, 0x1904, 0x1ef8, 0x908a, 0x0036, 0x1a0c, 0x0d7d, 0x9082,\r
-+      0x001b, 0x0002, 0x1ecd, 0x1ecd, 0x1ecf, 0x1ecd, 0x1ecd, 0x1ecd,\r
-+      0x1ed5, 0x1ecd, 0x1ecd, 0x1ecd, 0x1edb, 0x1ecd, 0x1ecd, 0x1ecd,\r
-+      0x1ee1, 0x1ecd, 0x1ecd, 0x1ecd, 0x1ee7, 0x1ecd, 0x1ecd, 0x1ecd,\r
-+      0x1eed, 0x1ecd, 0x1ecd, 0x1ecd, 0x1ef3, 0x080c, 0x0d7d, 0xa07c,\r
-+      0x9422, 0xa080, 0x931b, 0x0804, 0x1f32, 0xa08c, 0x9422, 0xa090,\r
-+      0x931b, 0x0804, 0x1f32, 0xa09c, 0x9422, 0xa0a0, 0x931b, 0x0804,\r
-+      0x1f32, 0xa0ac, 0x9422, 0xa0b0, 0x931b, 0x0804, 0x1f32, 0xa0bc,\r
-+      0x9422, 0xa0c0, 0x931b, 0x0804, 0x1f32, 0xa0cc, 0x9422, 0xa0d0,\r
-+      0x931b, 0x0804, 0x1f32, 0xa0dc, 0x9422, 0xa0e0, 0x931b, 0x04d0,\r
-+      0x908a, 0x0034, 0x1a0c, 0x0d7d, 0x9082, 0x001b, 0x0002, 0x1f1a,\r
-+      0x1f18, 0x1f18, 0x1f18, 0x1f18, 0x1f18, 0x1f1f, 0x1f18, 0x1f18,\r
-+      0x1f18, 0x1f18, 0x1f18, 0x1f24, 0x1f18, 0x1f18, 0x1f18, 0x1f18,\r
-+      0x1f18, 0x1f29, 0x1f18, 0x1f18, 0x1f18, 0x1f18, 0x1f18, 0x1f2e,\r
-+      0x080c, 0x0d7d, 0xa07c, 0x9422, 0xa080, 0x931b, 0x0098, 0xa094,\r
-+      0x9422, 0xa098, 0x931b, 0x0070, 0xa0ac, 0x9422, 0xa0b0, 0x931b,\r
-+      0x0048, 0xa0c4, 0x9422, 0xa0c8, 0x931b, 0x0020, 0xa0dc, 0x9422,\r
-+      0xa0e0, 0x931b, 0x0630, 0x2300, 0x9405, 0x0160, 0x8a51, 0x0904,\r
-+      0x2054, 0x8c60, 0x0804, 0x1ea4, 0xa004, 0x9045, 0x0904, 0x2054,\r
-+      0x0804, 0x1e7f, 0x8a51, 0x0904, 0x2054, 0x8c60, 0x2c05, 0x9005,\r
-+      0x1158, 0xa004, 0x9045, 0x0904, 0x2054, 0xa064, 0x90ec, 0x000f,\r
-+      0x9de0, 0x1e55, 0x2c05, 0x2060, 0xa880, 0xc0fc, 0xa882, 0x0804,\r
-+      0x2049, 0x2c05, 0x8422, 0x8420, 0x831a, 0x9399, 0x0000, 0xac2e,\r
-+      0xab32, 0xdd9c, 0x1904, 0x1fe6, 0x9082, 0x001b, 0x0002, 0x1f82,\r
-+      0x1f82, 0x1f84, 0x1f82, 0x1f82, 0x1f82, 0x1f92, 0x1f82, 0x1f82,\r
-+      0x1f82, 0x1fa0, 0x1f82, 0x1f82, 0x1f82, 0x1fae, 0x1f82, 0x1f82,\r
-+      0x1f82, 0x1fbc, 0x1f82, 0x1f82, 0x1f82, 0x1fca, 0x1f82, 0x1f82,\r
-+      0x1f82, 0x1fd8, 0x080c, 0x0d7d, 0xa17c, 0x2400, 0x9122, 0xa180,\r
-+      0x2300, 0x911b, 0x0a0c, 0x0d7d, 0xa074, 0x9420, 0xa078, 0x9319,\r
-+      0x0804, 0x2044, 0xa18c, 0x2400, 0x9122, 0xa190, 0x2300, 0x911b,\r
-+      0x0a0c, 0x0d7d, 0xa084, 0x9420, 0xa088, 0x9319, 0x0804, 0x2044,\r
-+      0xa19c, 0x2400, 0x9122, 0xa1a0, 0x2300, 0x911b, 0x0a0c, 0x0d7d,\r
-+      0xa094, 0x9420, 0xa098, 0x9319, 0x0804, 0x2044, 0xa1ac, 0x2400,\r
-+      0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c, 0x0d7d, 0xa0a4, 0x9420,\r
-+      0xa0a8, 0x9319, 0x0804, 0x2044, 0xa1bc, 0x2400, 0x9122, 0xa1c0,\r
-+      0x2300, 0x911b, 0x0a0c, 0x0d7d, 0xa0b4, 0x9420, 0xa0b8, 0x9319,\r
-+      0x0804, 0x2044, 0xa1cc, 0x2400, 0x9122, 0xa1d0, 0x2300, 0x911b,\r
-+      0x0a0c, 0x0d7d, 0xa0c4, 0x9420, 0xa0c8, 0x9319, 0x0804, 0x2044,\r
-+      0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300, 0x911b, 0x0a0c, 0x0d7d,\r
-+      0xa0d4, 0x9420, 0xa0d8, 0x9319, 0x0804, 0x2044, 0x9082, 0x001b,\r
-+      0x0002, 0x2004, 0x2002, 0x2002, 0x2002, 0x2002, 0x2002, 0x2011,\r
-+      0x2002, 0x2002, 0x2002, 0x2002, 0x2002, 0x201e, 0x2002, 0x2002,\r
-+      0x2002, 0x2002, 0x2002, 0x202b, 0x2002, 0x2002, 0x2002, 0x2002,\r
-+      0x2002, 0x2038, 0x080c, 0x0d7d, 0xa17c, 0x2400, 0x9122, 0xa180,\r
-+      0x2300, 0x911b, 0x0a0c, 0x0d7d, 0xa06c, 0x9420, 0xa070, 0x9319,\r
-+      0x0498, 0xa194, 0x2400, 0x9122, 0xa198, 0x2300, 0x911b, 0x0a0c,\r
-+      0x0d7d, 0xa084, 0x9420, 0xa088, 0x9319, 0x0430, 0xa1ac, 0x2400,\r
-+      0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c, 0x0d7d, 0xa09c, 0x9420,\r
-+      0xa0a0, 0x9319, 0x00c8, 0xa1c4, 0x2400, 0x9122, 0xa1c8, 0x2300,\r
-+      0x911b, 0x0a0c, 0x0d7d, 0xa0b4, 0x9420, 0xa0b8, 0x9319, 0x0060,\r
-+      0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300, 0x911b, 0x0a0c, 0x0d7d,\r
-+      0xa0cc, 0x9420, 0xa0d0, 0x9319, 0xac1e, 0xab22, 0xa880, 0xc0fd,\r
-+      0xa882, 0x2800, 0xa85a, 0x2c00, 0xa812, 0x2a00, 0xa816, 0x000e,\r
-+      0x000e, 0x000e, 0x9006, 0x0028, 0x008e, 0x00de, 0x00ce, 0x9085,\r
-+      0x0001, 0x0005, 0x00c6, 0x610c, 0x0016, 0x9026, 0x2410, 0x6004,\r
-+      0x9420, 0x9291, 0x0000, 0x2c04, 0x9210, 0x9ce0, 0x0002, 0x918a,\r
-+      0x0002, 0x1da8, 0x9284, 0x000f, 0x9405, 0x001e, 0x00ce, 0x0005,\r
-+      0x7803, 0x0003, 0x780f, 0x0000, 0x6004, 0x7812, 0x2c04, 0x7816,\r
-+      0x9ce0, 0x0002, 0x918a, 0x0002, 0x1db8, 0x0005, 0x2001, 0x0005,\r
-+      0x2004, 0xd0bc, 0x190c, 0x0d76, 0xd094, 0x0110, 0x080c, 0x11de,\r
-+      0x0005, 0x0126, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x0260,\r
-+      0x2069, 0x1800, 0x7817, 0x0000, 0x789b, 0x0814, 0x78a3, 0x0406,\r
-+      0x789f, 0x0410, 0x2009, 0x013b, 0x200b, 0x0400, 0x781b, 0x0002,\r
-+      0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005,\r
-+      0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x21ad, 0x7900, 0xd1dc,\r
-+      0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x20cf,\r
-+      0x20c7, 0x7ef1, 0x20c7, 0x20c9, 0x20c9, 0x20c9, 0x20c9, 0x7ed7,\r
-+      0x20c7, 0x20cb, 0x20c7, 0x20c9, 0x20c7, 0x20c9, 0x20c7, 0x080c,\r
-+      0x0d7d, 0x0031, 0x0020, 0x080c, 0x7ed7, 0x080c, 0x7ef1, 0x0005,\r
-+      0x0006, 0x0016, 0x0026, 0x080c, 0xe723, 0x7930, 0x9184, 0x0003,\r
-+      0x01f0, 0x080c, 0xa896, 0x2001, 0x19fa, 0x2004, 0x9005, 0x0180,\r
-+      0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d7d, 0x00c6, 0x2001,\r
-+      0x19fa, 0x2064, 0x080c, 0xa8b2, 0x080c, 0xc443, 0x00ce, 0x0408,\r
-+      0x2009, 0x0040, 0x080c, 0x21b0, 0x080c, 0xa8b2, 0x00d0, 0x9184,\r
-+      0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, 0x080c, 0x74e9,\r
-+      0x1138, 0x080c, 0x77ed, 0x080c, 0x6029, 0x080c, 0x741a, 0x0010,\r
-+      0x080c, 0x5ee4, 0x080c, 0x7f8f, 0x0041, 0x0018, 0x9184, 0x9540,\r
-+      0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x0036, 0x0046,\r
-+      0x0056, 0x2071, 0x1a6b, 0x080c, 0x1ab5, 0x005e, 0x004e, 0x003e,\r
-+      0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, 0x1800, 0x7128,\r
-+      0x2001, 0x196f, 0x2102, 0x2001, 0x1977, 0x2102, 0x2001, 0x013b,\r
-+      0x2102, 0x2079, 0x0200, 0x2001, 0x0201, 0x789e, 0x78a3, 0x0200,\r
-+      0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x9398, 0x0005, 0x2320,\r
-+      0x9182, 0x0204, 0x1230, 0x2011, 0x0008, 0x8423, 0x8423, 0x8423,\r
-+      0x0488, 0x9182, 0x024c, 0x1240, 0x2011, 0x0007, 0x8403, 0x8003,\r
-+      0x9400, 0x9400, 0x9420, 0x0430, 0x9182, 0x02bc, 0x1238, 0x2011,\r
-+      0x0006, 0x8403, 0x8003, 0x9400, 0x9420, 0x00e0, 0x9182, 0x034c,\r
-+      0x1230, 0x2011, 0x0005, 0x8403, 0x8003, 0x9420, 0x0098, 0x9182,\r
-+      0x042c, 0x1228, 0x2011, 0x0004, 0x8423, 0x8423, 0x0058, 0x9182,\r
-+      0x059c, 0x1228, 0x2011, 0x0003, 0x8403, 0x9420, 0x0018, 0x2011,\r
-+      0x0002, 0x8423, 0x9482, 0x0228, 0x8002, 0x8020, 0x8301, 0x9402,\r
-+      0x0110, 0x0208, 0x8321, 0x8217, 0x8203, 0x9405, 0x789a, 0x012e,\r
-+      0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6814, 0x9084, 0xffc0,\r
-+      0x910d, 0x6916, 0x00de, 0x000e, 0x0005, 0x00d6, 0x2069, 0x0200,\r
-+      0x9005, 0x6810, 0x0110, 0xc0a5, 0x0008, 0xc0a4, 0x6812, 0x00de,\r
-+      0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6810, 0x9084, 0xfff8,\r
-+      0x910d, 0x6912, 0x00de, 0x000e, 0x0005, 0x7938, 0x080c, 0x0d76,\r
-+      0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001,\r
-+      0xa001, 0xa001, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001,\r
-+      0xa001, 0x00fe, 0x0005, 0x0126, 0x2091, 0x2800, 0x2061, 0x0100,\r
-+      0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x29f6, 0x080c, 0x2916,\r
-+      0x080c, 0x2a67, 0x9006, 0x080c, 0x2945, 0x9006, 0x080c, 0x2928,\r
-+      0x20a9, 0x0012, 0x1d04, 0x21da, 0x2091, 0x6000, 0x1f04, 0x21da,\r
-+      0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400, 0x9084,\r
-+      0xdfff, 0x6052, 0x6224, 0x080c, 0x2a44, 0x080c, 0x2634, 0x2009,\r
-+      0x00ef, 0x6132, 0x6136, 0x080c, 0x2644, 0x60e7, 0x0000, 0x61ea,\r
-+      0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f, 0x0080,\r
-+      0x602f, 0x0000, 0x6007, 0x349f, 0x00c6, 0x2061, 0x0140, 0x608b,\r
-+      0x000b, 0x608f, 0x10b8, 0x6093, 0x0000, 0x6097, 0x0198, 0x00ce,\r
-+      0x6004, 0x9085, 0x8000, 0x6006, 0x60bb, 0x0000, 0x20a9, 0x0018,\r
-+      0x60bf, 0x0000, 0x1f04, 0x2218, 0x60bb, 0x0000, 0x60bf, 0x0108,\r
-+      0x60bf, 0x0012, 0x60bf, 0x0405, 0x60bf, 0x0014, 0x60bf, 0x0320,\r
-+      0x60bf, 0x0018, 0x601b, 0x00f0, 0x601f, 0x001e, 0x600f, 0x006b,\r
-+      0x602b, 0x402c, 0x012e, 0x0005, 0x00f6, 0x2079, 0x0140, 0x78c3,\r
-+      0x0080, 0x78c3, 0x0083, 0x78c3, 0x0000, 0x00fe, 0x0005, 0x2001,\r
-+      0x1835, 0x2003, 0x0000, 0x2001, 0x1834, 0x2003, 0x0001, 0x0005,\r
-+      0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x6124, 0x6028,\r
-+      0x910c, 0x0066, 0x2031, 0x1837, 0x2634, 0x96b4, 0x0028, 0x006e,\r
-+      0x1138, 0x6020, 0xd1bc, 0x0120, 0xd0bc, 0x1168, 0xd0b4, 0x1198,\r
-+      0x9184, 0x5e2c, 0x1118, 0x9184, 0x0007, 0x00aa, 0x9195, 0x0004,\r
-+      0x9284, 0x0007, 0x0082, 0x0016, 0x2001, 0x0387, 0x200c, 0xd1a4,\r
-+      0x001e, 0x0d70, 0x0c98, 0x0016, 0x2001, 0x0387, 0x200c, 0xd1b4,\r
-+      0x001e, 0x0d30, 0x0c58, 0x2286, 0x2283, 0x2283, 0x2283, 0x2285,\r
-+      0x2283, 0x2283, 0x2283, 0x080c, 0x0d7d, 0x0029, 0x002e, 0x001e,\r
-+      0x000e, 0x012e, 0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118,\r
-+      0xd19c, 0x1904, 0x2500, 0xd1f4, 0x190c, 0x0d76, 0x080c, 0x74e9,\r
-+      0x0904, 0x22e3, 0x080c, 0xcf52, 0x1120, 0x7000, 0x9086, 0x0003,\r
-+      0x0580, 0x6024, 0x9084, 0x1800, 0x0560, 0x080c, 0x750c, 0x0118,\r
-+      0x080c, 0x74fa, 0x1530, 0x2011, 0x0020, 0x080c, 0x2a44, 0x6043,\r
-+      0x0000, 0x080c, 0xcf52, 0x0168, 0x080c, 0x750c, 0x1150, 0x2001,\r
-+      0x19a7, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x735f, 0x0804,\r
-+      0x2503, 0x70a4, 0x9005, 0x1150, 0x70a7, 0x0001, 0x00d6, 0x2069,\r
-+      0x0140, 0x080c, 0x7540, 0x00de, 0x1904, 0x2503, 0x080c, 0x77f7,\r
-+      0x0428, 0x080c, 0x750c, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108,\r
-+      0x0468, 0x080c, 0x77f7, 0x080c, 0x77ed, 0x080c, 0x6029, 0x080c,\r
-+      0x741a, 0x0804, 0x2500, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170,\r
-+      0xd0e4, 0x1178, 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7098, 0x9086,\r
-+      0x0028, 0x1110, 0x080c, 0x76ce, 0x0804, 0x2500, 0x080c, 0x77f2,\r
-+      0x0048, 0x2001, 0x197d, 0x2003, 0x0002, 0x0020, 0x080c, 0x762b,\r
-+      0x0804, 0x2500, 0x080c, 0x7771, 0x0804, 0x2500, 0x6220, 0xd1bc,\r
-+      0x0138, 0xd2bc, 0x1904, 0x2565, 0xd2b4, 0x1904, 0x2577, 0x0000,\r
-+      0xd1ac, 0x0904, 0x240d, 0x0036, 0x6328, 0xc3bc, 0x632a, 0x003e,\r
-+      0x080c, 0x74e9, 0x11d0, 0x2011, 0x0020, 0x080c, 0x2a44, 0x0006,\r
-+      0x0026, 0x0036, 0x080c, 0x7503, 0x1158, 0x080c, 0x77ed, 0x080c,\r
-+      0x6029, 0x080c, 0x741a, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005,\r
-+      0x003e, 0x002e, 0x000e, 0x080c, 0x74bd, 0x0016, 0x0046, 0x00c6,\r
-+      0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043,\r
-+      0x0090, 0x6043, 0x0010, 0x74da, 0x948c, 0xff00, 0x7038, 0xd084,\r
-+      0x0178, 0x9186, 0xf800, 0x1160, 0x7048, 0xd084, 0x1148, 0xc085,\r
-+      0x704a, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x4b07, 0x003e,\r
-+      0x080c, 0xcf4b, 0x1904, 0x23e4, 0x9196, 0xff00, 0x05a8, 0x7060,\r
-+      0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130,\r
-+      0xd184, 0x1550, 0x080c, 0x3368, 0x0128, 0xc18d, 0x7132, 0x080c,\r
-+      0x6a63, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294,\r
-+      0xff00, 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x23e4,\r
-+      0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904,\r
-+      0x23e4, 0xc1ad, 0x2102, 0x0036, 0x73d8, 0x2011, 0x8013, 0x080c,\r
-+      0x4b07, 0x003e, 0x0804, 0x23e4, 0x7038, 0xd08c, 0x1140, 0x2001,\r
-+      0x180c, 0x200c, 0xd1ac, 0x1904, 0x23e4, 0xc1ad, 0x2102, 0x0036,\r
-+      0x73d8, 0x2011, 0x8013, 0x080c, 0x4b07, 0x003e, 0x7130, 0xc185,\r
-+      0x7132, 0x2011, 0x1848, 0x220c, 0xd1a4, 0x01f0, 0x0016, 0x2009,\r
-+      0x0001, 0x2011, 0x0100, 0x080c, 0x88ec, 0x2019, 0x000e, 0x00c6,\r
-+      0x2061, 0x0000, 0x080c, 0xe239, 0x00ce, 0x9484, 0x00ff, 0x9080,\r
-+      0x3374, 0x200d, 0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009,\r
-+      0x000e, 0x080c, 0xe2c9, 0x001e, 0x0016, 0x2009, 0x0002, 0x2019,\r
-+      0x0004, 0x080c, 0x31a6, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9,\r
-+      0x007f, 0x900e, 0x080c, 0x6625, 0x1110, 0x080c, 0x6043, 0x8108,\r
-+      0x1f04, 0x23da, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0xa896,\r
-+      0x080c, 0xab5e, 0x080c, 0xa8b2, 0x60e3, 0x0000, 0x001e, 0x2001,\r
-+      0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, 0x11b0, 0x2011,\r
-+      0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002, 0x6206,\r
-+      0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x1826, 0x2003,\r
-+      0x0000, 0x2011, 0x0020, 0x080c, 0x2a44, 0xd194, 0x0904, 0x2500,\r
-+      0x0016, 0x080c, 0xa896, 0x6220, 0xd2b4, 0x0904, 0x249b, 0x080c,\r
-+      0x86f6, 0x080c, 0x9e32, 0x2011, 0x0004, 0x080c, 0x2a44, 0x00f6,\r
-+      0x2019, 0x19f3, 0x2304, 0x907d, 0x0904, 0x2468, 0x7804, 0x9086,\r
-+      0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140,\r
-+      0x782c, 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001, 0x0003,\r
-+      0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001, 0x1df0,\r
-+      0x080c, 0x2a1a, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9, 0x0009,\r
-+      0x080c, 0x29d1, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001, 0x0100,\r
-+      0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x080c, 0x95de, 0x080c,\r
-+      0xa8b2, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, 0xabed,\r
-+      0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae, 0x0005,\r
-+      0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110,\r
-+      0x080c, 0x2a1a, 0x00de, 0x00c6, 0x2061, 0x19e7, 0x6034, 0x080c,\r
-+      0xcf52, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, 0x00c8,\r
-+      0x1238, 0x8000, 0x6036, 0x00ce, 0x080c, 0x9e0a, 0x0804, 0x24fd,\r
-+      0x2061, 0x0100, 0x62c0, 0x080c, 0xa7cc, 0x2019, 0x19f3, 0x2304,\r
-+      0x9065, 0x0130, 0x6003, 0x0001, 0x2009, 0x0027, 0x080c, 0xac8c,\r
-+      0x00ce, 0x0804, 0x24fd, 0xd2bc, 0x0904, 0x24e0, 0x080c, 0x8703,\r
-+      0x2011, 0x0004, 0x080c, 0x2a44, 0x00d6, 0x2069, 0x0140, 0x6804,\r
-+      0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x00de, 0x00c6, 0x2061,\r
-+      0x19e7, 0x6050, 0x080c, 0xcf52, 0x0120, 0x909a, 0x0003, 0x1668,\r
-+      0x0018, 0x909a, 0x00c8, 0x1648, 0x8000, 0x6052, 0x604c, 0x00ce,\r
-+      0x9005, 0x05d8, 0x2009, 0x07d0, 0x080c, 0x86fb, 0x9080, 0x0008,\r
-+      0x2004, 0x9086, 0x0006, 0x1138, 0x2009, 0x1984, 0x2011, 0x0012,\r
-+      0x080c, 0x2a53, 0x0450, 0x9080, 0x0008, 0x2004, 0x9086, 0x0009,\r
-+      0x0d98, 0x2009, 0x1984, 0x2011, 0x0016, 0x080c, 0x2a53, 0x00e8,\r
-+      0x2011, 0x0004, 0x080c, 0x2a44, 0x00c0, 0x0036, 0x2019, 0x0001,\r
-+      0x080c, 0xa118, 0x003e, 0x2019, 0x19fa, 0x2304, 0x9065, 0x0160,\r
-+      0x2009, 0x004f, 0x6020, 0x9086, 0x0009, 0x1110, 0x2009, 0x004f,\r
-+      0x6003, 0x0003, 0x080c, 0xac8c, 0x00ce, 0x080c, 0xa8b2, 0x001e,\r
-+      0xd19c, 0x0904, 0x255e, 0x7038, 0xd0ac, 0x1538, 0x0016, 0x0156,\r
-+      0x2011, 0x0008, 0x080c, 0x2a44, 0x6050, 0xc0e5, 0x6052, 0x20a9,\r
-+      0x0367, 0x1f04, 0x252b, 0x1d04, 0x2513, 0x080c, 0x872a, 0x6020,\r
-+      0xd09c, 0x1db8, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2981, 0x00fe,\r
-+      0x1d80, 0x6050, 0xc0e4, 0x6052, 0x2011, 0x0008, 0x080c, 0x2a44,\r
-+      0x015e, 0x001e, 0x0498, 0x015e, 0x001e, 0x0016, 0x6028, 0xc09c,\r
-+      0x602a, 0x080c, 0xa896, 0x080c, 0xab5e, 0x080c, 0xa8b2, 0x60e3,\r
-+      0x0000, 0x080c, 0xe702, 0x080c, 0xe71d, 0x080c, 0x56de, 0xd0fc,\r
-+      0x1138, 0x080c, 0xcf4b, 0x1120, 0x9085, 0x0001, 0x080c, 0x7530,\r
-+      0x9006, 0x080c, 0x2a0a, 0x2009, 0x0002, 0x080c, 0x29f6, 0x00e6,\r
-+      0x2071, 0x1800, 0x7003, 0x0004, 0x080c, 0x0eb4, 0x00ee, 0x2011,\r
-+      0x0008, 0x080c, 0x2a44, 0x080c, 0x0bc3, 0x001e, 0x918c, 0xffd0,\r
-+      0x2110, 0x080c, 0x2a44, 0x00ae, 0x0005, 0x0016, 0x2001, 0x0387,\r
-+      0x200c, 0xd1a4, 0x001e, 0x0904, 0x2310, 0x0016, 0x2009, 0x2571,\r
-+      0x00c0, 0x2001, 0x0387, 0x2003, 0x1000, 0x001e, 0x0c38, 0x0016,\r
-+      0x2001, 0x0387, 0x200c, 0xd1b4, 0x001e, 0x0904, 0x2310, 0x0016,\r
-+      0x2009, 0x2583, 0x0030, 0x2001, 0x0387, 0x2003, 0x4000, 0x001e,\r
-+      0x08a8, 0x6028, 0xc0bc, 0x602a, 0x2001, 0x0156, 0x2003, 0xbc91,\r
-+      0x8000, 0x2003, 0xffff, 0x6043, 0x0001, 0x080c, 0x29f0, 0x2011,\r
-+      0x0080, 0x080c, 0x2a44, 0x6017, 0x0000, 0x6043, 0x0000, 0x0817,\r
-+      0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x00f6, 0x0126, 0x2091,\r
-+      0x8000, 0x2071, 0x1800, 0x71d0, 0x70d2, 0x9116, 0x0904, 0x25f3,\r
-+      0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x29f6, 0x2011, 0x8011,\r
-+      0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019, 0x0001,\r
-+      0x0010, 0x2019, 0x0000, 0x080c, 0x4b07, 0x0468, 0x2001, 0x19a8,\r
-+      0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4, 0x0118,\r
-+      0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c, 0x4b07,\r
-+      0x080c, 0x0eb4, 0x080c, 0x56de, 0xd0fc, 0x11a8, 0x080c, 0xcf4b,\r
-+      0x1190, 0x00c6, 0x080c, 0x268f, 0x080c, 0xa896, 0x080c, 0xa073,\r
-+      0x080c, 0xa8b2, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0002,\r
-+      0x080c, 0x31a6, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e,\r
-+      0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,\r
-+      0xff00, 0x11f0, 0x2011, 0x1837, 0x2214, 0xd2ac, 0x11c8, 0x81ff,\r
-+      0x01e8, 0x2011, 0x181f, 0x2204, 0x9106, 0x1190, 0x2011, 0x1820,\r
-+      0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206, 0x1148, 0x2011,\r
-+      0x1820, 0x2214, 0x9294, 0x00ff, 0x9584, 0x00ff, 0x9206, 0x1120,\r
-+      0x2500, 0x080c, 0x81ff, 0x0048, 0x9584, 0x00ff, 0x9080, 0x3374,\r
-+      0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080, 0x3374,\r
-+      0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001,\r
-+      0x1818, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852, 0x6856,\r
-+      0x1f04, 0x263f, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069,\r
-+      0x0140, 0x2001, 0x1818, 0x2102, 0x8114, 0x8214, 0x8214, 0x8214,\r
-+      0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff, 0x1128, 0x9184,\r
-+      0x000f, 0x9080, 0xe731, 0x2005, 0x6856, 0x8211, 0x1f04, 0x2654,\r
-+      0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0x1800, 0x6030,\r
-+      0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156,\r
-+      0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980, 0x9116,\r
-+      0x0180, 0x9112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001, 0x0402,\r
-+      0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x2684, 0x680f,\r
-+      0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005, 0x080c,\r
-+      0x56da, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020,\r
-+      0x2009, 0x002e, 0x080c, 0xe2c9, 0x004e, 0x0005, 0x00f6, 0x0016,\r
-+      0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904, 0x26fb, 0x080c,\r
-+      0x2971, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600, 0x1120, 0x2011,\r
-+      0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120, 0x2011, 0x8000,\r
-+      0x900e, 0x0420, 0x908e, 0x0400, 0x1120, 0x9016, 0x2009, 0x0001,\r
-+      0x00e8, 0x908e, 0x0300, 0x1120, 0x9016, 0x2009, 0x0002, 0x00b0,\r
-+      0x908e, 0x0200, 0x1120, 0x9016, 0x2009, 0x0004, 0x0078, 0x908e,\r
-+      0x0100, 0x1548, 0x9016, 0x2009, 0x0008, 0x0040, 0x9084, 0x0700,\r
-+      0x908e, 0x0300, 0x1500, 0x2011, 0x0030, 0x0058, 0x2300, 0x9080,\r
-+      0x0020, 0x2018, 0x080c, 0x9166, 0x928c, 0xff00, 0x0110, 0x2011,\r
-+      0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2, 0x2009, 0x0138,\r
-+      0x220a, 0x080c, 0x74e9, 0x1118, 0x2009, 0x196d, 0x220a, 0x002e,\r
-+      0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091,\r
-+      0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170, 0x200c, 0x8000,\r
-+      0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0d76, 0x002e, 0x001e,\r
-+      0x000e, 0x012e, 0x0005, 0x2001, 0x0171, 0x2004, 0xd0dc, 0x0168,\r
-+      0x2001, 0x0170, 0x200c, 0x918c, 0x00ff, 0x918e, 0x004c, 0x1128,\r
-+      0x200c, 0x918c, 0xff00, 0x810f, 0x0005, 0x900e, 0x2001, 0x0227,\r
-+      0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108, 0x2001, 0x0226,\r
-+      0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108, 0x0005, 0x0018,\r
-+      0x000c, 0x0018, 0x0020, 0x1000, 0x0800, 0x1000, 0x1800, 0x0156,\r
-+      0x0006, 0x0016, 0x0026, 0x00e6, 0x2001, 0x1990, 0x2004, 0x908a,\r
-+      0x0007, 0x1a0c, 0x0d7d, 0x0033, 0x00ee, 0x002e, 0x001e, 0x000e,\r
-+      0x015e, 0x0005, 0x2759, 0x2777, 0x279b, 0x279d, 0x27c6, 0x27c8,\r
-+      0x27ca, 0x2001, 0x0001, 0x080c, 0x25a0, 0x080c, 0x29bb, 0x2001,\r
-+      0x1992, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006,\r
-+      0x20a9, 0x0009, 0x080c, 0x298d, 0x2001, 0x1990, 0x2003, 0x0006,\r
-+      0x2009, 0x001e, 0x2011, 0x27cb, 0x080c, 0x8708, 0x0005, 0x2009,\r
-+      0x1995, 0x200b, 0x0000, 0x2001, 0x199a, 0x2003, 0x0036, 0x2001,\r
-+      0x1999, 0x2003, 0x002a, 0x2001, 0x1992, 0x2003, 0x0001, 0x9006,\r
-+      0x080c, 0x2928, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x298d,\r
-+      0x2001, 0x1990, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x27cb,\r
-+      0x080c, 0x8708, 0x0005, 0x080c, 0x0d7d, 0x2001, 0x199a, 0x2003,\r
-+      0x0036, 0x2001, 0x1992, 0x2003, 0x0003, 0x7a38, 0x9294, 0x0005,\r
-+      0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,\r
-+      0x2928, 0x2001, 0x1996, 0x2003, 0x0000, 0x2001, 0xffff, 0x20a9,\r
-+      0x0009, 0x080c, 0x298d, 0x2001, 0x1990, 0x2003, 0x0006, 0x2009,\r
-+      0x001e, 0x2011, 0x27cb, 0x080c, 0x8708, 0x0005, 0x080c, 0x0d7d,\r
-+      0x080c, 0x0d7d, 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6,\r
-+      0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x2001, 0x1992,\r
-+      0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d7d, 0x0043, 0x012e, 0x015e,\r
-+      0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e, 0x0005, 0x27ed, 0x280d,\r
-+      0x284d, 0x287d, 0x28a1, 0x28b1, 0x28b3, 0x080c, 0x2981, 0x11b0,\r
-+      0x7850, 0x9084, 0xefff, 0x7852, 0x2009, 0x1998, 0x2104, 0x7a38,\r
-+      0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d, 0x0008, 0xc085,\r
-+      0x200a, 0x2001, 0x1990, 0x2003, 0x0001, 0x0030, 0x080c, 0x28d7,\r
-+      0x2001, 0xffff, 0x080c, 0x2768, 0x0005, 0x080c, 0x28b5, 0x05e0,\r
-+      0x2009, 0x1999, 0x2104, 0x8001, 0x200a, 0x080c, 0x2981, 0x1178,\r
-+      0x7850, 0x9084, 0xefff, 0x7852, 0x7a38, 0x9294, 0x0005, 0x9296,\r
-+      0x0005, 0x0518, 0x2009, 0x1998, 0x2104, 0xc085, 0x200a, 0x2009,\r
-+      0x1995, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0118, 0x080c,\r
-+      0x28bd, 0x00c0, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296,\r
-+      0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2945,\r
-+      0x2001, 0x1992, 0x2003, 0x0002, 0x0028, 0x2001, 0x1990, 0x2003,\r
-+      0x0003, 0x0010, 0x080c, 0x278a, 0x0005, 0x080c, 0x28b5, 0x0560,\r
-+      0x2009, 0x1999, 0x2104, 0x8001, 0x200a, 0x080c, 0x2981, 0x1168,\r
-+      0x7850, 0x9084, 0xefff, 0x7852, 0x2001, 0x1990, 0x2003, 0x0003,\r
-+      0x2001, 0x1991, 0x2003, 0x0000, 0x00b8, 0x2009, 0x1999, 0x2104,\r
-+      0x9005, 0x1118, 0x080c, 0x28fa, 0x0010, 0x080c, 0x28ca, 0x080c,\r
-+      0x28bd, 0x2009, 0x1995, 0x200b, 0x0000, 0x2001, 0x1992, 0x2003,\r
-+      0x0001, 0x080c, 0x278a, 0x0000, 0x0005, 0x04b9, 0x0508, 0x080c,\r
-+      0x2981, 0x11b8, 0x7850, 0x9084, 0xefff, 0x7852, 0x2009, 0x1996,\r
-+      0x2104, 0x8000, 0x200a, 0x9086, 0x0007, 0x0108, 0x0078, 0x2001,\r
-+      0x199b, 0x2003, 0x000a, 0x2009, 0x1998, 0x2104, 0xc0fd, 0x200a,\r
-+      0x0038, 0x0419, 0x2001, 0x1992, 0x2003, 0x0004, 0x080c, 0x27b5,\r
-+      0x0005, 0x0099, 0x0168, 0x080c, 0x2981, 0x1138, 0x7850, 0x9084,\r
-+      0xefff, 0x7852, 0x080c, 0x27a1, 0x0018, 0x0079, 0x080c, 0x27b5,\r
-+      0x0005, 0x080c, 0x0d7d, 0x080c, 0x0d7d, 0x2009, 0x199a, 0x2104,\r
-+      0x8001, 0x200a, 0x090c, 0x2916, 0x0005, 0x7a38, 0x9294, 0x0005,\r
-+      0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,\r
-+      0x2945, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, 0x0110,\r
-+      0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2928, 0x0005, 0x2009,\r
-+      0x1995, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0108, 0x0068,\r
-+      0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, 0x0110,\r
-+      0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, 0x7a38, 0x9294, 0x0005,\r
-+      0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,\r
-+      0x2945, 0x0005, 0x0086, 0x2001, 0x1998, 0x2004, 0x9084, 0x7fff,\r
-+      0x090c, 0x0d7d, 0x2009, 0x1997, 0x2144, 0x8846, 0x280a, 0x9844,\r
-+      0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, 0x080c, 0x0d7d, 0x9006,\r
-+      0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, 0x0005, 0x0006, 0x0156,\r
-+      0x2001, 0x1990, 0x20a9, 0x0009, 0x2003, 0x0000, 0x8000, 0x1f04,\r
-+      0x291c, 0x2001, 0x1997, 0x2003, 0x8000, 0x015e, 0x000e, 0x0005,\r
-+      0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158, 0x7838, 0x9084,\r
-+      0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, 0x199d, 0x210c, 0x795a,\r
-+      0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0006, 0x783a, 0x2009,\r
-+      0x199e, 0x210c, 0x795a, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100,\r
-+      0x9085, 0x0000, 0x0158, 0x7838, 0x9084, 0xfffa, 0x9085, 0x0004,\r
-+      0x783a, 0x7850, 0x9084, 0xfff0, 0x7852, 0x00c8, 0x7838, 0x9084,\r
-+      0xfffb, 0x9085, 0x0005, 0x783a, 0x7850, 0x9084, 0xfff0, 0x0016,\r
-+      0x2009, 0x0003, 0x210c, 0x918c, 0x0600, 0x918e, 0x0400, 0x0118,\r
-+      0x9085, 0x000a, 0x0010, 0x9085, 0x0000, 0x001e, 0x7852, 0x00fe,\r
-+      0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0007, 0x000e,\r
-+      0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0009, 0x000e,\r
-+      0x0005, 0x0156, 0x20a9, 0x0064, 0x7820, 0x080c, 0x29f0, 0xd09c,\r
-+      0x1110, 0x1f04, 0x2984, 0x015e, 0x0005, 0x0126, 0x0016, 0x0006,\r
-+      0x2091, 0x8000, 0x000e, 0x2008, 0x9186, 0x0000, 0x1118, 0x783b,\r
-+      0x0007, 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060,\r
-+      0x9186, 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003,\r
-+      0x1118, 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x29ad, 0x080c,\r
-+      0x872a, 0x1f04, 0x29ad, 0x7850, 0x9085, 0x1000, 0x7852, 0x000e,\r
-+      0x001e, 0x012e, 0x0005, 0x080c, 0x2aab, 0x0005, 0x0006, 0x0156,\r
-+      0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1100,\r
-+      0x7854, 0xd08c, 0x1110, 0x1f04, 0x29c8, 0x00fe, 0x015e, 0x000e,\r
-+      0x0005, 0x1d04, 0x29d1, 0x080c, 0x872a, 0x1f04, 0x29d1, 0x0005,\r
-+      0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005,\r
-+      0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005,\r
-+      0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005,\r
-+      0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x2001,\r
-+      0x19a8, 0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc,\r
-+      0x0140, 0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001,\r
-+      0x200a, 0x0005, 0x0016, 0x0026, 0x080c, 0x7503, 0x0108, 0xc0bc,\r
-+      0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e,\r
-+      0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294,\r
-+      0x0001, 0x9285, 0x1000, 0x200a, 0x220a, 0x002e, 0x001e, 0x0005,\r
-+      0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215,\r
-+      0x220a, 0x002e, 0x001e, 0x0005, 0x0006, 0x0016, 0x2009, 0x0140,\r
-+      0x2104, 0x1128, 0x080c, 0x7503, 0x0110, 0xc0bc, 0x0008, 0xc0bd,\r
-+      0x200a, 0x001e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0380, 0x7843,\r
-+      0x0101, 0x7844, 0xd084, 0x1de8, 0x2001, 0x0109, 0x2202, 0x7843,\r
-+      0x0100, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0380, 0x7843, 0x0202,\r
-+      0x7844, 0xd08c, 0x1de8, 0x2079, 0x0100, 0x7814, 0x9104, 0x9205,\r
-+      0x7a16, 0x2079, 0x0380, 0x7843, 0x0200, 0x00fe, 0x0005, 0x0016,\r
-+      0x0026, 0x0036, 0x00c6, 0x2061, 0x0100, 0x6050, 0x9084, 0xfbff,\r
-+      0x9085, 0x0040, 0x6052, 0x20a9, 0x0002, 0x080c, 0x29d1, 0x6050,\r
-+      0x9085, 0x0400, 0x9084, 0xff9f, 0x6052, 0x20a9, 0x0005, 0x080c,\r
-+      0x29d1, 0x6054, 0xd0bc, 0x090c, 0x0d7d, 0x20a9, 0x0005, 0x080c,\r
-+      0x29d1, 0x6054, 0xd0ac, 0x090c, 0x0d7d, 0x2009, 0x19af, 0x9084,\r
-+      0x7e00, 0x8007, 0x8004, 0x8004, 0x200a, 0x9085, 0x0000, 0x605a,\r
-+      0x2009, 0x199d, 0x2011, 0x199e, 0x6358, 0x939c, 0x38df, 0x2320,\r
-+      0x939d, 0x0000, 0x94a5, 0x0000, 0x230a, 0x2412, 0x00ce, 0x003e,\r
-+      0x002e, 0x001e, 0x0005, 0x0006, 0x00c6, 0x2061, 0x0100, 0x6050,\r
-+      0xc0cd, 0x6052, 0x00ce, 0x000e, 0x0005, 0x2fb1, 0x2fb1, 0x2bb5,\r
-+      0x2bb5, 0x2bc1, 0x2bc1, 0x2bcd, 0x2bcd, 0x2bdb, 0x2bdb, 0x2be7,\r
-+      0x2be7, 0x2bf5, 0x2bf5, 0x2c03, 0x2c03, 0x2c15, 0x2c15, 0x2c21,\r
-+      0x2c21, 0x2c2f, 0x2c2f, 0x2c4d, 0x2c4d, 0x2c6d, 0x2c6d, 0x2c3d,\r
-+      0x2c3d, 0x2c5d, 0x2c5d, 0x2c7b, 0x2c7b, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c8d, 0x2c8d, 0x2c99,\r
-+      0x2c99, 0x2ca7, 0x2ca7, 0x2cb5, 0x2cb5, 0x2cc5, 0x2cc5, 0x2cd3,\r
-+      0x2cd3, 0x2ce3, 0x2ce3, 0x2cf3, 0x2cf3, 0x2d05, 0x2d05, 0x2d13,\r
-+      0x2d13, 0x2d23, 0x2d23, 0x2d45, 0x2d45, 0x2d69, 0x2d69, 0x2d33,\r
-+      0x2d33, 0x2d57, 0x2d57, 0x2d79, 0x2d79, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2d8d, 0x2d8d, 0x2d99,\r
-+      0x2d99, 0x2da7, 0x2da7, 0x2db5, 0x2db5, 0x2dc5, 0x2dc5, 0x2dd3,\r
-+      0x2dd3, 0x2de3, 0x2de3, 0x2df3, 0x2df3, 0x2e05, 0x2e05, 0x2e13,\r
-+      0x2e13, 0x2e23, 0x2e23, 0x2e33, 0x2e33, 0x2e45, 0x2e45, 0x2e55,\r
-+      0x2e55, 0x2e67, 0x2e67, 0x2e79, 0x2e79, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2e8d, 0x2e8d, 0x2e9b,\r
-+      0x2e9b, 0x2eab, 0x2eab, 0x2ebb, 0x2ebb, 0x2ecd, 0x2ecd, 0x2edd,\r
-+      0x2edd, 0x2eef, 0x2eef, 0x2f01, 0x2f01, 0x2f15, 0x2f15, 0x2f25,\r
-+      0x2f25, 0x2f37, 0x2f37, 0x2f49, 0x2f49, 0x2f5d, 0x2f5d, 0x2f6e,\r
-+      0x2f6e, 0x2f81, 0x2f81, 0x2f94, 0x2f94, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13,\r
-+      0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x2c13, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2248, 0x0804,\r
-+      0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x207e, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c,\r
-+      0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c,\r
-+      0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0x2248, 0x080c,\r
-+      0x20a8, 0x0804, 0x2fa9, 0xa001, 0x0cf0, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x13a3, 0x0804,\r
-+      0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x207e, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2248, 0x080c,\r
-+      0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c,\r
-+      0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c,\r
-+      0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x13a3, 0x080c,\r
-+      0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0x2248, 0x080c,\r
-+      0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x0804,\r
-+      0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x26fe, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x26fe, 0x080c, 0x207e, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,\r
-+      0x207e, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,\r
-+      0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x2248, 0x080c,\r
-+      0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c,\r
-+      0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c,\r
-+      0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,\r
-+      0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x2248, 0x080c,\r
-+      0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c,\r
-+      0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x2248, 0x080c,\r
-+      0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,\r
-+      0x207e, 0x080c, 0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x26fe, 0x080c, 0x207e, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0804,\r
-+      0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x26fe, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0804,\r
-+      0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0x2248, 0x080c,\r
-+      0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x0804,\r
-+      0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x207e, 0x080c, 0xa8fc, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c,\r
-+      0xa8fc, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c,\r
-+      0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c,\r
-+      0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c,\r
-+      0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c,\r
-+      0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c,\r
-+      0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c,\r
-+      0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c,\r
-+      0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c,\r
-+      0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c,\r
-+      0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c,\r
-+      0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x207e, 0x080c, 0xa8fc, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0804,\r
-+      0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c,\r
-+      0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,\r
-+      0xa8fc, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0xa8fc, 0x080c,\r
-+      0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c,\r
-+      0xa8fc, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,\r
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c,\r
-+      0xa8fc, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,\r
-+      0xa8fc, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,\r
-+      0xa8fc, 0x080c, 0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x26fe, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x20a8, 0x0804,\r
-+      0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c,\r
-+      0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,\r
-+      0xa8fc, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,\r
-+      0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106,\r
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,\r
-+      0x26fe, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x13a3, 0x0804,\r
-+      0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c,\r
-+      0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,\r
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,\r
-+      0xa8fc, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x04d8, 0x0106, 0x0006,\r
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe,\r
-+      0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8,\r
-+      0x0440, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0x13a3, 0x080c,\r
-+      0xa8fc, 0x080c, 0x20a8, 0x00a8, 0x0106, 0x0006, 0x0126, 0x01c6,\r
-+      0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e,\r
-+      0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8,\r
-+      0x0000, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e,\r
-+      0x010e, 0x000d, 0x00b6, 0x00c6, 0x0026, 0x0046, 0x9026, 0x080c,\r
-+      0x6a29, 0x1904, 0x30c2, 0x72dc, 0x2001, 0x197c, 0x2004, 0x9005,\r
-+      0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, 0x30c2,\r
-+      0x080c, 0x30c7, 0x0804, 0x30c2, 0xd2cc, 0x1904, 0x30c2, 0x080c,\r
-+      0x74e9, 0x1120, 0x70af, 0xffff, 0x0804, 0x30c2, 0xd294, 0x0120,\r
-+      0x70af, 0xffff, 0x0804, 0x30c2, 0x080c, 0x3363, 0x0160, 0x080c,\r
-+      0xcf52, 0x0128, 0x2001, 0x1818, 0x203c, 0x0804, 0x304f, 0x70af,\r
-+      0xffff, 0x0804, 0x30c2, 0x2001, 0x1818, 0x203c, 0x7294, 0xd284,\r
-+      0x0904, 0x304f, 0xd28c, 0x1904, 0x304f, 0x0036, 0x73ac, 0x938e,\r
-+      0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1d80, 0x2c04,\r
-+      0x938c, 0x0001, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084,\r
-+      0x00ff, 0x970e, 0x05d0, 0x908e, 0x0000, 0x05b8, 0x908e, 0x00ff,\r
-+      0x1150, 0x7230, 0xd284, 0x15b0, 0x7294, 0xc28d, 0x7296, 0x70af,\r
-+      0xffff, 0x003e, 0x04a0, 0x900e, 0x080c, 0x25fb, 0x080c, 0x65c4,\r
-+      0x1538, 0x9006, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6,\r
-+      0x2060, 0x080c, 0x8b90, 0x00ce, 0x090c, 0x8f34, 0xb8af, 0x0000,\r
-+      0x080c, 0x6a6b, 0x1168, 0x7030, 0xd08c, 0x0130, 0xb800, 0xd0bc,\r
-+      0x0138, 0x080c, 0x6914, 0x0120, 0x080c, 0x30e0, 0x0148, 0x0028,\r
-+      0x080c, 0x3238, 0x080c, 0x310c, 0x0118, 0x8318, 0x0804, 0x2ffc,\r
-+      0x73ae, 0x0010, 0x70af, 0xffff, 0x003e, 0x0804, 0x30c2, 0x9780,\r
-+      0x3374, 0x203d, 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e, 0x70ac,\r
-+      0x9096, 0xffff, 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812, 0x0220,\r
-+      0x2008, 0x9802, 0x20a8, 0x0020, 0x70af, 0xffff, 0x0804, 0x30c2,\r
-+      0x2700, 0x0156, 0x0016, 0x9106, 0x0904, 0x30b7, 0xc484, 0x080c,\r
-+      0x6625, 0x0148, 0x080c, 0xcf52, 0x1904, 0x30b7, 0x080c, 0x65c4,\r
-+      0x1904, 0x30bf, 0x0008, 0xc485, 0xb8bb, 0x0520, 0xb8ac, 0x9005,\r
-+      0x0148, 0x00c6, 0x2060, 0x080c, 0x8b90, 0x00ce, 0x090c, 0x8f34,\r
-+      0xb8af, 0x0000, 0x080c, 0x6a6b, 0x1130, 0x7030, 0xd08c, 0x01f8,\r
-+      0xb800, 0xd0bc, 0x11e0, 0x7294, 0xd28c, 0x0180, 0x080c, 0x6a6b,\r
-+      0x9082, 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x65e9, 0x0028,\r
-+      0x080c, 0x32d1, 0x01a0, 0x080c, 0x32fc, 0x0088, 0x080c, 0x3238,\r
-+      0x080c, 0xcf52, 0x1160, 0x080c, 0x310c, 0x0188, 0x0040, 0x080c,\r
-+      0xcf52, 0x1118, 0x080c, 0x32d1, 0x0110, 0x0451, 0x0140, 0x001e,\r
-+      0x8108, 0x015e, 0x1f04, 0x3068, 0x70af, 0xffff, 0x0018, 0x001e,\r
-+      0x015e, 0x71ae, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6,\r
-+      0x0016, 0x70af, 0x0001, 0x2009, 0x007e, 0x080c, 0x65c4, 0x1168,\r
-+      0xb813, 0x00ff, 0xb817, 0xfffe, 0x080c, 0x3238, 0x04a9, 0x0128,\r
-+      0x70dc, 0xc0bd, 0x70de, 0x080c, 0xcc9f, 0x001e, 0x00ce, 0x0005,\r
-+      0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x184c, 0x2004, 0x9084,\r
-+      0x00ff, 0xb842, 0x080c, 0xac5f, 0x01d0, 0x2b00, 0x6012, 0x080c,\r
-+      0xcccc, 0x6023, 0x0001, 0x9006, 0x080c, 0x6561, 0x2001, 0x0000,\r
-+      0x080c, 0x6575, 0x0126, 0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa,\r
-+      0x012e, 0x2009, 0x0004, 0x080c, 0xac8c, 0x9085, 0x0001, 0x00ce,\r
-+      0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,\r
-+      0x2001, 0x184c, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0xac5f,\r
-+      0x0548, 0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086,\r
-+      0x007e, 0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110,\r
-+      0x080c, 0x31e7, 0x080c, 0xcccc, 0x6023, 0x0001, 0x9006, 0x080c,\r
-+      0x6561, 0x2001, 0x0002, 0x080c, 0x6575, 0x0126, 0x2091, 0x8000,\r
-+      0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, 0x0002, 0x080c, 0xac8c,\r
-+      0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6,\r
-+      0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x65c4, 0x1140, 0xb813,\r
-+      0x00ff, 0xb817, 0xfffc, 0x0039, 0x0110, 0x70e3, 0xffff, 0x002e,\r
-+      0x00ce, 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c,\r
-+      0xab97, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xcccc, 0x6023, 0x0001,\r
-+      0x9006, 0x080c, 0x6561, 0x2001, 0x0002, 0x080c, 0x6575, 0x0126,\r
-+      0x2091, 0x8000, 0x70e4, 0x8000, 0x70e6, 0x012e, 0x2009, 0x0002,\r
-+      0x080c, 0xac8c, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,\r
-+      0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f,\r
-+      0x080c, 0x65c4, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8d7,\r
-+      0x0004, 0x080c, 0xab97, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023,\r
-+      0x0001, 0x620a, 0x080c, 0xcccc, 0x2009, 0x0022, 0x080c, 0xac8c,\r
-+      0x9085, 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6,\r
-+      0x0066, 0x0036, 0x0026, 0x00b6, 0x21f0, 0x9036, 0x080c, 0xa896,\r
-+      0x1110, 0x2031, 0x0001, 0x0066, 0x080c, 0x93b0, 0x080c, 0x9326,\r
-+      0x080c, 0xa7ec, 0x080c, 0xbb19, 0x006e, 0x86ff, 0x0110, 0x080c,\r
-+      0xa8b2, 0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e,\r
-+      0x0018, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6625, 0x1140,\r
-+      0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x6043,\r
-+      0x001e, 0x8108, 0x1f04, 0x31cc, 0x9686, 0x0001, 0x190c, 0x3337,\r
-+      0x00be, 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6,\r
-+      0x00c6, 0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x9016, 0x080c,\r
-+      0xa896, 0x1110, 0x2011, 0x0001, 0x0026, 0x6210, 0x2258, 0xbaa0,\r
-+      0x0026, 0x2019, 0x0029, 0x080c, 0x93a5, 0x0076, 0x2039, 0x0000,\r
-+      0x080c, 0x9277, 0x2c08, 0x080c, 0xdfeb, 0x007e, 0x001e, 0x002e,\r
-+      0x82ff, 0x0110, 0x080c, 0xa8b2, 0xba10, 0xbb14, 0xbc84, 0x080c,\r
-+      0x6043, 0xba12, 0xbb16, 0xbc86, 0x00be, 0x001e, 0x002e, 0x003e,\r
-+      0x004e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010,\r
-+      0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800,\r
-+      0x70a8, 0x9005, 0x0110, 0x8001, 0x70aa, 0x000e, 0x00ee, 0x0005,\r
-+      0x2071, 0x1800, 0x70e4, 0x9005, 0x0dc0, 0x8001, 0x70e6, 0x0ca8,\r
-+      0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6,\r
-+      0x0046, 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x9016, 0x080c,\r
-+      0xa896, 0x1110, 0x2011, 0x0001, 0x0026, 0x81ff, 0x1118, 0x20a9,\r
-+      0x0001, 0x0078, 0x080c, 0x56da, 0xd0c4, 0x0140, 0xd0a4, 0x0130,\r
-+      0x9006, 0x2020, 0x2009, 0x002d, 0x080c, 0xe2c9, 0x20a9, 0x0800,\r
-+      0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x32ab, 0x928e, 0x007f,\r
-+      0x0904, 0x32ab, 0x928e, 0x0080, 0x05f0, 0x9288, 0x1000, 0x210c,\r
-+      0x81ff, 0x05c8, 0x8fff, 0x1150, 0x2001, 0x198e, 0x0006, 0x2003,\r
-+      0x0001, 0x080c, 0x32be, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6,\r
-+      0x2158, 0x2001, 0x0001, 0x080c, 0x6a35, 0x00ce, 0x00be, 0x2019,\r
-+      0x0029, 0x080c, 0x93a5, 0x0076, 0x2039, 0x0000, 0x080c, 0x9277,\r
-+      0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286,\r
-+      0x0006, 0x1118, 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007,\r
-+      0x9215, 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c,\r
-+      0xdfeb, 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, 0x3261, 0x002e,\r
-+      0x82ff, 0x0110, 0x080c, 0xa8b2, 0x015e, 0x001e, 0x002e, 0x003e,\r
-+      0x004e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026,\r
-+      0x0016, 0x080c, 0x56da, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006,\r
-+      0x2220, 0x2009, 0x0029, 0x080c, 0xe2c9, 0x001e, 0x002e, 0x004e,\r
-+      0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7294, 0x82ff, 0x01e8,\r
-+      0x080c, 0x6a63, 0x11d0, 0x2100, 0x080c, 0x262e, 0x81ff, 0x01b8,\r
-+      0x2019, 0x0001, 0x8314, 0x92e0, 0x1d80, 0x2c04, 0xd384, 0x0120,\r
-+      0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138,\r
-+      0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce,\r
-+      0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091,\r
-+      0x8000, 0x0066, 0x9036, 0x080c, 0xa896, 0x1110, 0x2031, 0x0001,\r
-+      0x0066, 0x0036, 0x2019, 0x0029, 0x00d9, 0x003e, 0x006e, 0x86ff,\r
-+      0x0110, 0x080c, 0xa8b2, 0x006e, 0x9180, 0x1000, 0x2004, 0x9065,\r
-+      0x0158, 0x0016, 0x00c6, 0x2061, 0x1b32, 0x001e, 0x6112, 0x080c,\r
-+      0x31e7, 0x001e, 0x080c, 0x65e9, 0x012e, 0x00ce, 0x001e, 0x0005,\r
-+      0x0016, 0x0026, 0x2110, 0x080c, 0xa38a, 0x080c, 0xe630, 0x002e,\r
-+      0x001e, 0x0005, 0x2001, 0x1837, 0x2004, 0xd0cc, 0x0005, 0x00c6,\r
-+      0x00b6, 0x080c, 0x74e9, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9,\r
-+      0x0782, 0x080c, 0x74e9, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e,\r
-+      0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, 0xb800,\r
-+      0xd0bc, 0x090c, 0x65e9, 0x8108, 0x1f04, 0x3348, 0x2061, 0x1800,\r
-+      0x607f, 0x0000, 0x6080, 0x9084, 0x00ff, 0x6082, 0x60b3, 0x0000,\r
-+      0x00be, 0x00ce, 0x0005, 0x2001, 0x1869, 0x2004, 0xd0bc, 0x0005,\r
-+      0x2011, 0x1848, 0x2214, 0xd2ec, 0x0005, 0x0026, 0x2011, 0x1867,\r
-+      0x2214, 0xd2dc, 0x002e, 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2,\r
-+      0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4,\r
-+      0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca,\r
-+      0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9,\r
-+      0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad,\r
-+      0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3,\r
-+      0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f,\r
-+      0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079,\r
-+      0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d,\r
-+      0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863,\r
-+      0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252,\r
-+      0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047,\r
-+      0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35,\r
-+      0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b,\r
-+      0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e,\r
-+      0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004,\r
-+      0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000,\r
-+      0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00,\r
-+      0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00,\r
-+      0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500,\r
-+      0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00,\r
-+      0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000,\r
-+      0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800,\r
-+      0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200,\r
-+      0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00,\r
-+      0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000,\r
-+      0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000,\r
-+      0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,\r
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189e, 0x7003, 0x0002,\r
-+      0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, 0x7046,\r
-+      0x703b, 0x18ba, 0x703f, 0x18ba, 0x7007, 0x0001, 0x080c, 0x1053,\r
-+      0x090c, 0x0d7d, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab, 0xdcb0,\r
-+      0x080c, 0x1053, 0x090c, 0x0d7d, 0x2900, 0x706e, 0xa867, 0x0002,\r
-+      0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x189e, 0x7004, 0x0002, 0x34a3,\r
-+      0x34a4, 0x34b7, 0x34cb, 0x0005, 0x1004, 0x34b4, 0x0e04, 0x34b4,\r
-+      0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, 0x1128,\r
-+      0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079,\r
-+      0x0000, 0x2061, 0x18b8, 0x2c4c, 0xa86c, 0x908e, 0x0100, 0x0128,\r
-+      0x9086, 0x0200, 0x0904, 0x359f, 0x0005, 0x7018, 0x2048, 0x2061,\r
-+      0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864, 0x9094, 0x00ff,\r
-+      0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005, 0x9086,\r
-+      0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, 0x701c,\r
-+      0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, 0x61d0,\r
-+      0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x359c, 0x61d0, 0x0804,\r
-+      0x3531, 0x3573, 0x35ab, 0x35b5, 0x35b9, 0x35c3, 0x35c9, 0x35cd,\r
-+      0x35dd, 0x35e0, 0x35ea, 0x35ef, 0x35f4, 0x35ff, 0x360a, 0x3619,\r
-+      0x3628, 0x3636, 0x364d, 0x3668, 0x359c, 0x3711, 0x374f, 0x37f4,\r
-+      0x3805, 0x3828, 0x359c, 0x359c, 0x359c, 0x3860, 0x3880, 0x3889,\r
-+      0x38b5, 0x38bb, 0x359c, 0x3901, 0x359c, 0x359c, 0x359c, 0x359c,\r
-+      0x359c, 0x390c, 0x3915, 0x391d, 0x391f, 0x359c, 0x359c, 0x359c,\r
-+      0x359c, 0x359c, 0x359c, 0x394f, 0x359c, 0x359c, 0x359c, 0x359c,\r
-+      0x359c, 0x396c, 0x39d0, 0x359c, 0x359c, 0x359c, 0x359c, 0x359c,\r
-+      0x359c, 0x0002, 0x39fa, 0x39fd, 0x3a5c, 0x3a75, 0x3aa5, 0x3d47,\r
-+      0x359c, 0x52ab, 0x359c, 0x359c, 0x359c, 0x359c, 0x359c, 0x359c,\r
-+      0x359c, 0x359c, 0x35ea, 0x35ef, 0x4246, 0x56fe, 0x4264, 0x533a,\r
-+      0x538b, 0x548e, 0x359c, 0x54f0, 0x552c, 0x555d, 0x5669, 0x558a,\r
-+      0x55e9, 0x359c, 0x4268, 0x441d, 0x4433, 0x4458, 0x44bd, 0x4531,\r
-+      0x4551, 0x45c8, 0x4624, 0x4680, 0x4683, 0x46a8, 0x4718, 0x4782,\r
-+      0x478a, 0x48bc, 0x4a31, 0x4a65, 0x4cc9, 0x359c, 0x4ce7, 0x4d93,\r
-+      0x4e75, 0x4ecf, 0x359c, 0x4f84, 0x359c, 0x4fea, 0x5005, 0x478a,\r
-+      0x524b, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x4ae3, 0x0126,\r
-+      0x2091, 0x8000, 0x0e04, 0x357d, 0x0010, 0x012e, 0x0cc0, 0x7c36,\r
-+      0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010,\r
-+      0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089,\r
-+      0x2004, 0xd084, 0x190c, 0x11d6, 0x7007, 0x0001, 0x2091, 0x5000,\r
-+      0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021,\r
-+      0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, 0x0868,\r
-+      0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88,\r
-+      0x7a8c, 0x7884, 0x7990, 0x0804, 0x4af0, 0x7883, 0x0004, 0x7884,\r
-+      0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884,\r
-+      0x7990, 0x0804, 0x4af3, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804,\r
-+      0x3573, 0x7984, 0x2114, 0x0804, 0x3573, 0x20e1, 0x0000, 0x2099,\r
-+      0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003,\r
-+      0x7984, 0x7a88, 0x7b8c, 0x0804, 0x3573, 0x7884, 0x2060, 0x04d8,\r
-+      0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x001c, 0x789b, 0x0137,\r
-+      0x0804, 0x3573, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800, 0x2039,\r
-+      0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040, 0x0210,\r
-+      0x0804, 0x35a8, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x35af, 0x79a0,\r
-+      0x9182, 0x0040, 0x0210, 0x0804, 0x35a8, 0x2138, 0x7d98, 0x7c9c,\r
-+      0x0804, 0x35bd, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x35a8,\r
-+      0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804,\r
-+      0x3573, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60,\r
-+      0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x3573, 0x0804, 0x35a2,\r
-+      0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x35a8, 0x21e0, 0x20a9,\r
-+      0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x3573, 0x2069, 0x1847,\r
-+      0x7884, 0x7990, 0x911a, 0x1a04, 0x35a8, 0x8019, 0x0904, 0x35a8,\r
-+      0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, 0x685a,\r
-+      0x685e, 0x080c, 0x781e, 0x0804, 0x3573, 0x2069, 0x1847, 0x7884,\r
-+      0x7994, 0x911a, 0x1a04, 0x35a8, 0x8019, 0x0904, 0x35a8, 0x684e,\r
-+      0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, 0x686e,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x6ad5, 0x012e, 0x0804, 0x3573,\r
-+      0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5,\r
-+      0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1,\r
-+      0x18a6, 0x4101, 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804,\r
-+      0x35a5, 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c,\r
-+      0x4af0, 0x701f, 0x368c, 0x0005, 0xa864, 0x2008, 0x9084, 0x00ff,\r
-+      0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, 0x0015,\r
-+      0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, 0x35a5,\r
-+      0x810f, 0x918c, 0x00ff, 0x0904, 0x35a5, 0x7112, 0x7010, 0x8001,\r
-+      0x0560, 0x7012, 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804,\r
-+      0x35a5, 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494,\r
-+      0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9,\r
-+      0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4af0, 0x701f,\r
-+      0x36ca, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120,\r
-+      0x9096, 0x000a, 0x1904, 0x35a5, 0x0888, 0x7014, 0x2048, 0xa868,\r
-+      0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029, 0x1160,\r
-+      0xc2fd, 0xaa7a, 0x080c, 0x6196, 0x0150, 0x0126, 0x2091, 0x8000,\r
-+      0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x64bf, 0x1128, 0x7007,\r
-+      0x0003, 0x701f, 0x36f6, 0x0005, 0x080c, 0x6fc0, 0x0126, 0x2091,\r
-+      0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a6, 0x400a,\r
-+      0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000,\r
-+      0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804,\r
-+      0x4af3, 0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883,\r
-+      0x4000, 0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009,\r
-+      0x017f, 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200,\r
-+      0x2061, 0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd,\r
-+      0x2104, 0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089,\r
-+      0x2004, 0xd084, 0x0180, 0x2001, 0x1a22, 0x2004, 0x9005, 0x0128,\r
-+      0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003,\r
-+      0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff,\r
-+      0x1904, 0x35a5, 0x7984, 0x080c, 0x6625, 0x1904, 0x35a8, 0x7e98,\r
-+      0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x35a8, 0x7c88, 0x7d8c,\r
-+      0x080c, 0x6857, 0x080c, 0x67e8, 0x1518, 0x2061, 0x1ddc, 0x0126,\r
-+      0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d,\r
-+      0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150, 0x012e,\r
-+      0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a04, 0x35a5,\r
-+      0x0c30, 0x080c, 0xc443, 0x012e, 0x0904, 0x35a5, 0x0804, 0x3573,\r
-+      0x900e, 0x2001, 0x0005, 0x080c, 0x6fc0, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0xcb3c, 0x080c, 0x6d80, 0x012e, 0x0804, 0x3573, 0x00a6,\r
-+      0x2950, 0xb198, 0x080c, 0x6625, 0x1904, 0x37e1, 0xb6a4, 0x9684,\r
-+      0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x6857,\r
-+      0x080c, 0x6802, 0x1520, 0x2061, 0x1ddc, 0x0126, 0x2091, 0x8000,\r
-+      0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c,\r
-+      0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x001c,\r
-+      0x2001, 0x181a, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28,\r
-+      0x080c, 0xc443, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e,\r
-+      0x2001, 0x0005, 0x080c, 0x6fc0, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0xcb3c, 0x080c, 0x6d74, 0x012e, 0x0070, 0xb097, 0x4005, 0xb19a,\r
-+      0x0010, 0xb097, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,\r
-+      0x2a48, 0x00ae, 0x0005, 0xb097, 0x4000, 0x9006, 0x918d, 0x0001,\r
-+      0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x35a5, 0x080c,\r
-+      0x4abe, 0x0904, 0x35a8, 0x080c, 0x66ec, 0x0904, 0x35a5, 0x080c,\r
-+      0x685d, 0x0904, 0x35a5, 0x0804, 0x4548, 0x81ff, 0x1904, 0x35a5,\r
-+      0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c, 0x68eb, 0x0904, 0x35a5,\r
-+      0x2019, 0x0005, 0x79a8, 0x080c, 0x6878, 0x0904, 0x35a5, 0x7888,\r
-+      0x908a, 0x1000, 0x1a04, 0x35a8, 0x8003, 0x800b, 0x810b, 0x9108,\r
-+      0x080c, 0x864c, 0x7984, 0xd184, 0x1904, 0x3573, 0x0804, 0x4548,\r
-+      0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450,\r
-+      0x2029, 0x07ff, 0x645c, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c,\r
-+      0x6625, 0x11d8, 0x080c, 0x68eb, 0x1128, 0x2009, 0x0002, 0x62c0,\r
-+      0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x6878, 0x1118,\r
-+      0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003,\r
-+      0x800b, 0x810b, 0x9108, 0x080c, 0x864c, 0x8529, 0x1ae0, 0x012e,\r
-+      0x0804, 0x3573, 0x012e, 0x0804, 0x35a5, 0x012e, 0x0804, 0x35a8,\r
-+      0x080c, 0x4abe, 0x0904, 0x35a8, 0x080c, 0x66ec, 0x0904, 0x35a5,\r
-+      0x080c, 0xa896, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c,\r
-+      0x93a5, 0x0076, 0x903e, 0x080c, 0x9277, 0x900e, 0x080c, 0xdfeb,\r
-+      0x007e, 0x00ce, 0x080c, 0xa8b2, 0x080c, 0x6857, 0x0804, 0x3573,\r
-+      0x080c, 0x4abe, 0x0904, 0x35a8, 0x080c, 0x6857, 0x2208, 0x0804,\r
-+      0x3573, 0x0156, 0x00d6, 0x00e6, 0x00c6, 0x2069, 0x1910, 0x6810,\r
-+      0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x2071,\r
-+      0x19e7, 0x7028, 0x9065, 0x0118, 0x8210, 0x600c, 0x0cd8, 0x2300,\r
-+      0x9218, 0x00ce, 0x00ee, 0x00de, 0x015e, 0x0804, 0x3573, 0x00f6,\r
-+      0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff, 0x0110,\r
-+      0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1910, 0x6910,\r
-+      0x62bc, 0x0804, 0x3573, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,\r
-+      0x35a5, 0x0126, 0x2091, 0x8000, 0x080c, 0x56ee, 0x0128, 0x2009,\r
-+      0x0007, 0x012e, 0x0804, 0x35a5, 0x012e, 0x615c, 0x9190, 0x3374,\r
-+      0x2215, 0x9294, 0x00ff, 0x637c, 0x83ff, 0x0108, 0x6280, 0x67dc,\r
-+      0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8,\r
-+      0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8,\r
-+      0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, 0x0068,\r
-+      0x080c, 0x74e9, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120,\r
-+      0x2009, 0x0005, 0x0804, 0x35a5, 0x9036, 0x7e9a, 0x7f9e, 0x0804,\r
-+      0x3573, 0x614c, 0x6250, 0x2019, 0x1986, 0x231c, 0x2001, 0x1987,\r
-+      0x2004, 0x789a, 0x0804, 0x3573, 0x0126, 0x2091, 0x8000, 0x6138,\r
-+      0x623c, 0x6340, 0x012e, 0x0804, 0x3573, 0x080c, 0x4ada, 0x0904,\r
-+      0x35a8, 0xba44, 0xbb38, 0x0804, 0x3573, 0x080c, 0x0d7d, 0x080c,\r
-+      0x4ada, 0x2110, 0x0904, 0x35a8, 0xb804, 0x908c, 0x00ff, 0x918e,\r
-+      0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, 0x0009,\r
-+      0x1904, 0x35a5, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6,\r
-+      0x9066, 0x080c, 0xa896, 0x080c, 0xa38a, 0x080c, 0x93a5, 0x0076,\r
-+      0x903e, 0x080c, 0x9277, 0x900e, 0x080c, 0xdfeb, 0x007e, 0x00ce,\r
-+      0x080c, 0xa8b2, 0xb807, 0x0407, 0x012e, 0x0804, 0x3573, 0x614c,\r
-+      0x6250, 0x7884, 0x604e, 0x7b88, 0x6352, 0x2069, 0x1847, 0x831f,\r
-+      0x9305, 0x6816, 0x788c, 0x2069, 0x1986, 0x2d1c, 0x206a, 0x7e98,\r
-+      0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1987, 0x2d04,\r
-+      0x266a, 0x789a, 0x0804, 0x3573, 0x0126, 0x2091, 0x8000, 0x6138,\r
-+      0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0ecc, 0xd0c4, 0x01a8,\r
-+      0x00d6, 0x78a8, 0x2009, 0x199d, 0x200a, 0x78ac, 0x2011, 0x199e,\r
-+      0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214,\r
-+      0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e, 0x2011,\r
-+      0x0116, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0040, 0x0010,\r
-+      0x918c, 0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e, 0xd1e4,\r
-+      0x190c, 0x0ee7, 0x9084, 0x0020, 0x0130, 0x78b4, 0x6046, 0x9084,\r
-+      0x0001, 0x090c, 0x4246, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011,\r
-+      0x0114, 0x2012, 0x012e, 0x0804, 0x3573, 0x00f6, 0x2079, 0x1800,\r
-+      0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf,\r
-+      0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897,\r
-+      0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005,\r
-+      0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x35a8, 0x788c,\r
-+      0x902d, 0x0904, 0x35a8, 0x900e, 0x080c, 0x6625, 0x1120, 0xba44,\r
-+      0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0,\r
-+      0x080c, 0x4ada, 0x0904, 0x35a8, 0x7888, 0x900d, 0x0904, 0x35a8,\r
-+      0x788c, 0x9005, 0x0904, 0x35a8, 0xba44, 0xb946, 0xbb38, 0xb83a,\r
-+      0x0804, 0x3573, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c,\r
-+      0x56ee, 0x1904, 0x35a5, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186,\r
-+      0x00ff, 0x1130, 0x2001, 0x1818, 0x2004, 0x9085, 0xff00, 0x0088,\r
-+      0x9182, 0x007f, 0x16e0, 0x9188, 0x3374, 0x210d, 0x918c, 0x00ff,\r
-+      0x2001, 0x1818, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f,\r
-+      0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0xab97, 0x000e,\r
-+      0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x65ca, 0x2b08,\r
-+      0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4aa7, 0x01d0,\r
-+      0x9006, 0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a,\r
-+      0x701f, 0x3a55, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0xac8c,\r
-+      0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x35a5, 0x00ce,\r
-+      0x0804, 0x35a8, 0x080c, 0xabed, 0x0cb0, 0xa830, 0x9086, 0x0100,\r
-+      0x0904, 0x35a5, 0x0804, 0x3573, 0x2061, 0x1a6f, 0x0126, 0x2091,\r
-+      0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800,\r
-+      0x6354, 0x6074, 0x789a, 0x60c0, 0x789e, 0x60bc, 0x78aa, 0x012e,\r
-+      0x0804, 0x3573, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x35a5,\r
-+      0x080c, 0x74e9, 0x0904, 0x35a5, 0x0126, 0x2091, 0x8000, 0x6254,\r
-+      0x6074, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x2664, 0x080c,\r
-+      0x5908, 0x012e, 0x0804, 0x3573, 0x012e, 0x0804, 0x35a8, 0x0006,\r
-+      0x0016, 0x00c6, 0x00e6, 0x2001, 0x19a9, 0x2070, 0x2061, 0x1847,\r
-+      0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x9166, 0x7206,\r
-+      0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000,\r
-+      0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3575, 0x7884,\r
-+      0xd0fc, 0x0148, 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288,\r
-+      0x012e, 0x0804, 0x35a8, 0x2001, 0x002a, 0x2004, 0x2069, 0x1847,\r
-+      0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x35a8, 0x012e, 0x0804,\r
-+      0x35a5, 0x080c, 0xab57, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x3b20,\r
-+      0x00c6, 0x080c, 0x4aa7, 0x00ce, 0x0d88, 0xa867, 0x0000, 0x7884,\r
-+      0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004,\r
-+      0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004,\r
-+      0xa822, 0x2001, 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004,\r
-+      0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004,\r
-+      0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3caa,\r
-+      0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930,\r
-+      0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906,\r
-+      0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b,\r
-+      0x080c, 0x4af0, 0x701f, 0x3be7, 0x7023, 0x0001, 0x012e, 0x0005,\r
-+      0x080c, 0xa896, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a8f, 0x2001, 0x199f, 0x2003,\r
-+      0x0000, 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb,\r
-+      0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3d19, 0x080c,\r
-+      0x3cd8, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19e7, 0x2079,\r
-+      0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001,\r
-+      0x0035, 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de,\r
-+      0x2011, 0x0001, 0x080c, 0x408a, 0x008e, 0x00ee, 0x00fe, 0x080c,\r
-+      0x3fb7, 0x080c, 0x3ee4, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084,\r
-+      0x0140, 0x1db8, 0x080c, 0x40fe, 0x00f6, 0x2079, 0x0300, 0x78bc,\r
-+      0x00fe, 0x908c, 0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000,\r
-+      0x7050, 0x9084, 0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001,\r
-+      0x7050, 0x9084, 0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000,\r
-+      0x7054, 0x7037, 0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x1820,\r
-+      0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084,\r
-+      0x1e00, 0x00ce, 0x0138, 0x080c, 0x3eee, 0x080c, 0x3cd3, 0x0058,\r
-+      0x080c, 0x3cd3, 0x080c, 0x4022, 0x080c, 0x3fad, 0x2001, 0x020b,\r
-+      0x2004, 0xd0e4, 0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061,\r
-+      0x0100, 0x6027, 0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013,\r
-+      0x0020, 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001,\r
-+      0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x1328, 0x2009,\r
-+      0x0028, 0x080c, 0x21b0, 0x2001, 0x0227, 0x200c, 0x2102, 0x080c,\r
-+      0xa8b2, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,\r
-+      0x008e, 0x004e, 0x2001, 0x199f, 0x2004, 0x9005, 0x1118, 0x012e,\r
-+      0x0804, 0x3573, 0x012e, 0x2021, 0x400c, 0x0804, 0x3575, 0x0016,\r
-+      0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6,\r
-+      0x0156, 0x7014, 0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804,\r
-+      0x9005, 0x0904, 0x3c43, 0x2048, 0x1f04, 0x3bf7, 0x7068, 0x2040,\r
-+      0xa28c, 0xa390, 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120,\r
-+      0x2029, 0x0000, 0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864,\r
-+      0x009e, 0x9086, 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc,\r
-+      0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x4af0, 0x701f,\r
-+      0x3be7, 0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,\r
-+      0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0,\r
-+      0x0006, 0x080c, 0x0fb7, 0x000e, 0x080c, 0x4af3, 0x701f, 0x3be7,\r
-+      0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e,\r
-+      0x002e, 0x001e, 0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103,\r
-+      0x1118, 0x701f, 0x3ca8, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd,\r
-+      0xa86a, 0x2009, 0x007f, 0x080c, 0x65c4, 0x0110, 0x9006, 0x0030,\r
-+      0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c, 0xcd1b, 0x015e, 0x00de,\r
-+      0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,\r
-+      0x0904, 0x35a5, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076,\r
-+      0x0086, 0x0096, 0x00d6, 0x0156, 0x701f, 0x3c7a, 0x7007, 0x0003,\r
-+      0x0804, 0x3c38, 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904,\r
-+      0x3575, 0x0076, 0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808,\r
-+      0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006,\r
-+      0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8,\r
-+      0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0fb7, 0x000e,\r
-+      0x080c, 0x4af3, 0x007e, 0x701f, 0x3be7, 0x7023, 0x0001, 0x0005,\r
-+      0x0804, 0x3573, 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218,\r
-+      0xa833, 0x001e, 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016,\r
-+      0x080c, 0x4aa7, 0x001e, 0x0130, 0xa800, 0x2040, 0xa008, 0xa80a,\r
-+      0x2100, 0x0c58, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e,\r
-+      0x0005, 0x0006, 0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, 0x0044,\r
-+      0x00fe, 0x000e, 0x0005, 0x2001, 0x199f, 0x2003, 0x0001, 0x0005,\r
-+      0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x19aa, 0x2004,\r
-+      0x601a, 0x2061, 0x0100, 0x2001, 0x19a9, 0x2004, 0x60ce, 0x6104,\r
-+      0xc1ac, 0x6106, 0x080c, 0x4aa7, 0xa813, 0x0019, 0xa817, 0x0001,\r
-+      0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f,\r
-+      0x2004, 0xa86a, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x19a9,\r
-+      0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x21b0, 0x2001, 0x002a,\r
-+      0x2004, 0x9084, 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f,\r
-+      0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe,\r
-+      0x0005, 0x00e6, 0x080c, 0x4aa7, 0x2940, 0xa013, 0x0019, 0xa017,\r
-+      0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa866, 0x2001,\r
-+      0x0031, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,\r
-+      0xa86e, 0xa873, 0x0000, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001,\r
-+      0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001,\r
-+      0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126,\r
-+      0x2091, 0x8000, 0x81ff, 0x0148, 0x080c, 0x29e8, 0x1130, 0x9006,\r
-+      0x080c, 0x2945, 0x9006, 0x080c, 0x2928, 0x7884, 0x9084, 0x0007,\r
-+      0x0002, 0x3d64, 0x3d6d, 0x3d76, 0x3d61, 0x3d61, 0x3d61, 0x3d61,\r
-+      0x3d61, 0x012e, 0x0804, 0x35a8, 0x2009, 0x0114, 0x2104, 0x9085,\r
-+      0x0800, 0x200a, 0x080c, 0x3f38, 0x00c0, 0x2009, 0x0114, 0x2104,\r
-+      0x9085, 0x4000, 0x200a, 0x080c, 0x3f38, 0x0078, 0x080c, 0x74e9,\r
-+      0x1128, 0x012e, 0x2009, 0x0016, 0x0804, 0x35a5, 0x81ff, 0x0128,\r
-+      0x012e, 0x2021, 0x400b, 0x0804, 0x3575, 0x080c, 0xa896, 0x0086,\r
-+      0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c,\r
-+      0x3a8f, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, 0x9006,\r
-+      0x2068, 0x2060, 0x2058, 0x080c, 0x41d9, 0x080c, 0x4129, 0x903e,\r
-+      0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19e7, 0x2079,\r
-+      0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x68d4,\r
-+      0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x408a,\r
-+      0x080c, 0x29f0, 0x080c, 0x29f0, 0x080c, 0x29f0, 0x080c, 0x29f0,\r
-+      0x080c, 0x408a, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3fb7, 0x2009,\r
-+      0x9c40, 0x8109, 0x11b0, 0x080c, 0x3eee, 0x2001, 0x0004, 0x200c,\r
-+      0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, 0x00ce,\r
-+      0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c, 0x35a5,\r
-+      0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, 0x00f6,\r
-+      0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201,\r
-+      0x200c, 0x81ff, 0x0150, 0x080c, 0x3f95, 0x2d00, 0x9c05, 0x9b05,\r
-+      0x0120, 0x080c, 0x3eee, 0x0804, 0x3e97, 0x080c, 0x40fe, 0x080c,\r
-+      0x4022, 0x080c, 0x3f78, 0x080c, 0x3fad, 0x00f6, 0x2079, 0x0100,\r
-+      0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3eee, 0x00fe, 0x0804,\r
-+      0x3e97, 0x00fe, 0x080c, 0x3ee4, 0x1150, 0x8d68, 0x2001, 0x0032,\r
-+      0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3eee, 0x0080, 0x87ff,\r
-+      0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, 0x0038,\r
-+      0x2001, 0x1a6b, 0x2004, 0x9086, 0x0000, 0x1904, 0x3de7, 0x2001,\r
-+      0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0x9605,\r
-+      0x0904, 0x3e97, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, 0x9b05,\r
-+      0x1904, 0x3e97, 0xa013, 0x0019, 0x2001, 0x032a, 0x2003, 0x0004,\r
-+      0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a6b, 0x2003, 0x0003, 0x2001,\r
-+      0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, 0x9005,\r
-+      0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, 0x21b0,\r
-+      0x2900, 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180, 0xa817,\r
-+      0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, 0x0008,\r
-+      0x2001, 0x0203, 0x2004, 0x1f04, 0x3e6e, 0x00ce, 0x0030, 0xa817,\r
-+      0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6, 0x2079,\r
-+      0x0100, 0x2061, 0x0090, 0x7827, 0x0002, 0x2001, 0x002a, 0x2004,\r
-+      0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e,\r
-+      0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3da1, 0x001e,\r
-+      0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027,\r
-+      0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001, 0x0004,\r
-+      0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x1328, 0x7884, 0x9084,\r
-+      0x0003, 0x9086, 0x0002, 0x01b0, 0x2009, 0x0028, 0x080c, 0x21b0,\r
-+      0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ff, 0x080c,\r
-+      0x2aab, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090,\r
-+      0x6043, 0x0010, 0x080c, 0xa8b2, 0x00ce, 0x2d08, 0x2c10, 0x2b18,\r
-+      0x2b00, 0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,\r
-+      0x00ae, 0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x3573, 0x012e,\r
-+      0x2021, 0x400c, 0x0804, 0x3575, 0x9085, 0x0001, 0x1d04, 0x3eed,\r
-+      0x2091, 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105,\r
-+      0x2003, 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a6b,\r
-+      0x2003, 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x21b0, 0x2001,\r
-+      0x0227, 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026,\r
-+      0x0005, 0x00f6, 0x00e6, 0x2071, 0x19e7, 0x7054, 0x9086, 0x0000,\r
-+      0x0520, 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203,\r
-+      0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x21b0, 0x782c,\r
-+      0xd0fc, 0x0d88, 0x080c, 0x40fe, 0x7054, 0x9086, 0x0000, 0x1d58,\r
-+      0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c,\r
-+      0x21b0, 0x782b, 0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe, 0x0005,\r
-+      0x00f6, 0x2079, 0x0100, 0x2001, 0x1818, 0x200c, 0x7932, 0x7936,\r
-+      0x080c, 0x2644, 0x080c, 0x2a67, 0x080c, 0x2aab, 0x784b, 0xf7f7,\r
-+      0x7843, 0x0090, 0x7843, 0x0010, 0x7850, 0xc0e5, 0x7852, 0x2019,\r
-+      0x61a8, 0x7820, 0xd09c, 0x0110, 0x8319, 0x1dd8, 0x7850, 0xc0e4,\r
-+      0x7852, 0x2011, 0x0048, 0x080c, 0x2a44, 0x7843, 0x0040, 0x2019,\r
-+      0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c,\r
-+      0x2a0a, 0x2011, 0x0020, 0x080c, 0x2a44, 0x7843, 0x0000, 0x9006,\r
-+      0x080c, 0x2a0a, 0x2011, 0x0048, 0x080c, 0x2a44, 0x00fe, 0x0005,\r
-+      0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a6b, 0x2079,\r
-+      0x0320, 0x2001, 0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086,\r
-+      0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003,\r
-+      0x782b, 0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300,\r
-+      0x78bc, 0x00fe, 0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a,\r
-+      0x2009, 0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108,\r
-+      0x8d68, 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200,\r
-+      0x781c, 0xd084, 0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6,\r
-+      0x2071, 0x0100, 0x2001, 0x19aa, 0x2004, 0x70e2, 0x080c, 0x3cc9,\r
-+      0x1188, 0x2001, 0x1820, 0x2004, 0x2009, 0x181f, 0x210c, 0x918c,\r
-+      0x00ff, 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073,\r
-+      0xe109, 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1818,\r
-+      0x210c, 0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000,\r
-+      0x7073, 0x0809, 0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a,\r
-+      0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e,\r
-+      0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084,\r
-+      0x1984, 0x9085, 0x0092, 0x7016, 0x080c, 0x40fe, 0x00f6, 0x2071,\r
-+      0x1a6b, 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4,\r
-+      0x0120, 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8,\r
-+      0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011,\r
-+      0x0011, 0x080c, 0x408a, 0x2011, 0x0001, 0x080c, 0x408a, 0x00fe,\r
-+      0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a6b, 0x2079, 0x0320,\r
-+      0x792c, 0xd1fc, 0x0904, 0x4087, 0x782b, 0x0002, 0x9026, 0xd19c,\r
-+      0x1904, 0x4083, 0x7000, 0x0002, 0x4087, 0x4038, 0x4068, 0x4083,\r
-+      0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001,\r
-+      0x080c, 0x408a, 0x0904, 0x4087, 0x080c, 0x408a, 0x0804, 0x4087,\r
-+      0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914,\r
-+      0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff,\r
-+      0x0de8, 0x080c, 0x3f95, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300,\r
-+      0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8,\r
-+      0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904,\r
-+      0x402c, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004,\r
-+      0x9086, 0x0015, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0031, 0xa212,\r
-+      0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee,\r
-+      0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096,\r
-+      0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c,\r
-+      0x831c, 0x938a, 0x0007, 0x1a0c, 0x0d7d, 0x9398, 0x40b8, 0x231d,\r
-+      0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e,\r
-+      0x003e, 0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804,\r
-+      0xa05a, 0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005,\r
-+      0x40f5, 0x40ec, 0x40e3, 0x40da, 0x40d1, 0x40c8, 0x40bf, 0xa964,\r
-+      0x7902, 0xa968, 0x7906, 0xa96c, 0x7912, 0xa970, 0x7916, 0x0005,\r
-+      0xa974, 0x7902, 0xa978, 0x7906, 0xa97c, 0x7912, 0xa980, 0x7916,\r
-+      0x0005, 0xa984, 0x7902, 0xa988, 0x7906, 0xa98c, 0x7912, 0xa990,\r
-+      0x7916, 0x0005, 0xa994, 0x7902, 0xa998, 0x7906, 0xa99c, 0x7912,\r
-+      0xa9a0, 0x7916, 0x0005, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac,\r
-+      0x7912, 0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906,\r
-+      0xa9bc, 0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8,\r
-+      0x7906, 0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6,\r
-+      0x0086, 0x2071, 0x19e7, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8,\r
-+      0x782b, 0x0002, 0x2940, 0x9026, 0x7054, 0x0002, 0x4125, 0x4111,\r
-+      0x411c, 0x8001, 0x7056, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c,\r
-+      0x408a, 0x190c, 0x408a, 0x0048, 0x8001, 0x7056, 0x782c, 0xd0fc,\r
-+      0x1d38, 0x2011, 0x0001, 0x080c, 0x408a, 0x008e, 0x00ee, 0x00fe,\r
-+      0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001,\r
-+      0x19aa, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19a9, 0x2004,\r
-+      0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005,\r
-+      0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c,\r
-+      0x080c, 0x4aa7, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a,\r
-+      0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e,\r
-+      0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c,\r
-+      0x41a1, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4aa7, 0xa813,\r
-+      0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004,\r
-+      0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004,\r
-+      0x9084, 0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061,\r
-+      0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, 0x2004, 0x6036, 0x2009,\r
-+      0x0040, 0x080c, 0x21b0, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,\r
-+      0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e,\r
-+      0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe,\r
-+      0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1,\r
-+      0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006,\r
-+      0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b,\r
-+      0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040,\r
-+      0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940,\r
-+      0x0086, 0x080c, 0x4aa7, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900,\r
-+      0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee,\r
-+      0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038,\r
-+      0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4aa7,\r
-+      0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007,\r
-+      0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096,\r
-+      0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x41a1,\r
-+      0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4aa7, 0x2940, 0xa013,\r
-+      0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004,\r
-+      0xa066, 0x2001, 0x0031, 0x2004, 0xa06a, 0x2001, 0x002a, 0x2004,\r
-+      0x9084, 0xfff8, 0xa06e, 0x2001, 0x002b, 0x2004, 0xa072, 0x2001,\r
-+      0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101,\r
-+      0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a6b,\r
-+      0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300,\r
-+      0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004,\r
-+      0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091,\r
-+      0x8000, 0x20a9, 0x0007, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006,\r
-+      0x4004, 0x20a9, 0x000c, 0x20a1, 0xfff4, 0x20e9, 0x0000, 0x9006,\r
-+      0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052,\r
-+      0x0108, 0x0005, 0x0804, 0x3573, 0x7d98, 0x7c9c, 0x0804, 0x366a,\r
-+      0x080c, 0x74e9, 0x190c, 0x5fee, 0x6040, 0x9084, 0x0020, 0x09b1,\r
-+      0x2069, 0x1847, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c,\r
-+      0x7d98, 0x2039, 0x0001, 0x080c, 0x4af0, 0x701f, 0x4280, 0x0005,\r
-+      0x080c, 0x56e9, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, 0x20d8,\r
-+      0x21d0, 0x2069, 0x1847, 0x6800, 0x9005, 0x0904, 0x35a8, 0x6804,\r
-+      0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x35a8, 0xd094, 0x00c6, 0x2061,\r
-+      0x0100, 0x6104, 0x0138, 0x6200, 0x9292, 0x0005, 0x0218, 0x918c,\r
-+      0xffdf, 0x0010, 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6,\r
-+      0x2061, 0x0100, 0x6104, 0x0118, 0x918d, 0x0010, 0x0010, 0x918c,\r
-+      0xffef, 0x6106, 0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a, 0x007f,\r
-+      0x1a04, 0x35a8, 0x9288, 0x3374, 0x210d, 0x918c, 0x00ff, 0x6166,\r
-+      0xd0dc, 0x0130, 0x6828, 0x908a, 0x007f, 0x1a04, 0x35a8, 0x605e,\r
-+      0x6888, 0x9084, 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006,\r
-+      0x2009, 0x19b1, 0x9080, 0x2737, 0x2005, 0x200a, 0x2008, 0x2001,\r
-+      0x0018, 0x080c, 0xa887, 0x2009, 0x0390, 0x200b, 0x0400, 0x000e,\r
-+      0x2009, 0x19b2, 0x9080, 0x273b, 0x2005, 0x200a, 0x6808, 0x908a,\r
-+      0x0100, 0x0a04, 0x35a8, 0x908a, 0x0841, 0x1a04, 0x35a8, 0x9084,\r
-+      0x0007, 0x1904, 0x35a8, 0x680c, 0x9005, 0x0904, 0x35a8, 0x6810,\r
-+      0x9005, 0x0904, 0x35a8, 0x6848, 0x6940, 0x910a, 0x1a04, 0x35a8,\r
-+      0x8001, 0x0904, 0x35a8, 0x684c, 0x6944, 0x910a, 0x1a04, 0x35a8,\r
-+      0x8001, 0x0904, 0x35a8, 0x6814, 0x908c, 0x00ff, 0x614e, 0x8007,\r
-+      0x9084, 0x00ff, 0x6052, 0x080c, 0x781e, 0x080c, 0x6aa1, 0x080c,\r
-+      0x6ad5, 0x6808, 0x602a, 0x080c, 0x2122, 0x2009, 0x0170, 0x200b,\r
-+      0x0080, 0xa001, 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c,\r
-+      0x269e, 0x003e, 0x6000, 0x9086, 0x0000, 0x1904, 0x440b, 0x6818,\r
-+      0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016,\r
-+      0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934,\r
-+      0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0x9084,\r
-+      0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217,\r
-+      0x831f, 0x20a9, 0x0004, 0x20a1, 0x19b3, 0x20e9, 0x0001, 0x4001,\r
-+      0x20a9, 0x0004, 0x20a1, 0x19cd, 0x20e9, 0x0001, 0x4001, 0x080c,\r
-+      0x87d1, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x01c8,\r
-+      0x0020, 0x839d, 0x12b0, 0x3508, 0x8109, 0x080c, 0x7ddf, 0x6878,\r
-+      0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a, 0x9184,\r
-+      0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003,\r
-+      0x0001, 0x1f04, 0x4369, 0x00ce, 0x00c6, 0x2061, 0x199c, 0x6a88,\r
-+      0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158, 0x2063, 0x0000,\r
-+      0x2001, 0x0001, 0x080c, 0x2945, 0x2001, 0x0001, 0x080c, 0x2928,\r
-+      0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001, 0x9006, 0x080c,\r
-+      0x2945, 0x9006, 0x080c, 0x2928, 0x0028, 0x9286, 0x8000, 0x1d30,\r
-+      0x2063, 0x0002, 0x00ce, 0x00e6, 0x2c70, 0x080c, 0x0eb4, 0x00ee,\r
-+      0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204, 0x9085, 0x0180,\r
-+      0x2012, 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030, 0x1128, 0x9294,\r
-+      0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001, 0x197c, 0x6a80, 0x9294,\r
-+      0x0030, 0x928e, 0x0000, 0x0170, 0x928e, 0x0010, 0x0118, 0x928e,\r
-+      0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c, 0x2713, 0x2001, 0x196d,\r
-+      0x2102, 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f, 0x0040,\r
-+      0x602f, 0x0000, 0x00ce, 0x080c, 0x74e9, 0x0128, 0x080c, 0x4fde,\r
-+      0x0110, 0x080c, 0x2664, 0x60d4, 0x9005, 0x01c0, 0x6003, 0x0001,\r
-+      0x2009, 0x43f3, 0x00e0, 0x080c, 0x74e9, 0x1168, 0x2011, 0x735f,\r
-+      0x080c, 0x863e, 0x2011, 0x7352, 0x080c, 0x874a, 0x080c, 0x77f2,\r
-+      0x080c, 0x741a, 0x0040, 0x080c, 0x5ee4, 0x0028, 0x6003, 0x0004,\r
-+      0x2009, 0x440b, 0x0020, 0x080c, 0x69cd, 0x0804, 0x3573, 0x2001,\r
-+      0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118, 0x2091,\r
-+      0x31bd, 0x0817, 0x2091, 0x313d, 0x0817, 0x6000, 0x9086, 0x0000,\r
-+      0x0904, 0x35a5, 0x2069, 0x1847, 0x7890, 0x6842, 0x7894, 0x6846,\r
-+      0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,\r
-+      0x0001, 0x0804, 0x4af3, 0x9006, 0x080c, 0x2664, 0x81ff, 0x1904,\r
-+      0x35a5, 0x080c, 0x74e9, 0x11b0, 0x080c, 0x77ed, 0x080c, 0x6029,\r
-+      0x080c, 0x3368, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c, 0xcf52,\r
-+      0x0130, 0x080c, 0x750c, 0x1118, 0x080c, 0x74bd, 0x0038, 0x080c,\r
-+      0x741a, 0x0020, 0x080c, 0x5fee, 0x080c, 0x5ee4, 0x0804, 0x3573,\r
-+      0x81ff, 0x1904, 0x35a5, 0x080c, 0x74e9, 0x1110, 0x0804, 0x35a5,\r
-+      0x6194, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, 0x1d80, 0x2009,\r
-+      0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091, 0x8000,\r
-+      0x2039, 0x0001, 0x080c, 0x4af3, 0x701f, 0x3571, 0x012e, 0x0005,\r
-+      0x704f, 0x0001, 0x00d6, 0x2069, 0x1d80, 0x20a9, 0x0040, 0x20e9,\r
-+      0x0001, 0x20a1, 0x1d80, 0x2019, 0xffff, 0x4304, 0x655c, 0x9588,\r
-+      0x3374, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002,\r
-+      0x2100, 0x9506, 0x01a8, 0x080c, 0x6625, 0x1190, 0xb814, 0x821c,\r
-+      0x0238, 0x9398, 0x1d80, 0x9085, 0xff00, 0x8007, 0x201a, 0x0038,\r
-+      0x9398, 0x1d80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210,\r
-+      0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c,\r
-+      0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1d80, 0x2099,\r
-+      0x1d80, 0x080c, 0x5f79, 0x0804, 0x4465, 0x080c, 0x4ada, 0x0904,\r
-+      0x35a8, 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5,\r
-+      0x080c, 0x56da, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e, 0x0538,\r
-+      0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c, 0x3363,\r
-+      0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086,\r
-+      0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c,\r
-+      0xca07, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007, 0x0003,\r
-+      0x701f, 0x44f3, 0x0005, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x20a9,\r
-+      0x002b, 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006,\r
-+      0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c,\r
-+      0x0fb7, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0,\r
-+      0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0fb7,\r
-+      0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,\r
-+      0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,\r
-+      0x4af3, 0x81ff, 0x1904, 0x35a5, 0x080c, 0x4abe, 0x0904, 0x35a8,\r
-+      0x080c, 0x6866, 0x0904, 0x35a5, 0x0058, 0xa878, 0x9005, 0x0120,\r
-+      0x2009, 0x0004, 0x0804, 0x35a5, 0xa974, 0xaa94, 0x0804, 0x3573,\r
-+      0x080c, 0x56e2, 0x0904, 0x3573, 0x701f, 0x453d, 0x7007, 0x0003,\r
-+      0x0005, 0x81ff, 0x1904, 0x35a5, 0x7888, 0x908a, 0x1000, 0x1a04,\r
-+      0x35a8, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c, 0x6a6b, 0x0120,\r
-+      0x080c, 0x6a73, 0x1904, 0x35a8, 0x080c, 0x68eb, 0x0904, 0x35a5,\r
-+      0x2019, 0x0004, 0x900e, 0x080c, 0x6878, 0x0904, 0x35a5, 0x7984,\r
-+      0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, 0x12f8, 0x080c,\r
-+      0x4ad8, 0x01e0, 0x080c, 0x6a6b, 0x0118, 0x080c, 0x6a73, 0x11b0,\r
-+      0x080c, 0x68eb, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002, 0x2019,\r
-+      0x0004, 0x080c, 0x6878, 0x2009, 0x0003, 0x0120, 0xa998, 0xaa9c,\r
-+      0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,\r
-+      0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,\r
-+      0x080c, 0x56e2, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001,\r
-+      0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071, 0x0060,\r
-+      0x2029, 0x007e, 0x2061, 0x1800, 0x645c, 0x2400, 0x9506, 0x0110,\r
-+      0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x6625, 0x1138,\r
-+      0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x864c, 0x0005,\r
-+      0x81ff, 0x1904, 0x35a5, 0x798c, 0x2001, 0x1980, 0x918c, 0x8000,\r
-+      0x2102, 0x080c, 0x4abe, 0x0904, 0x35a8, 0x080c, 0x6a6b, 0x0120,\r
-+      0x080c, 0x6a73, 0x1904, 0x35a8, 0x080c, 0x66ec, 0x0904, 0x35a5,\r
-+      0x080c, 0x686f, 0x0904, 0x35a5, 0x2001, 0x1980, 0x2004, 0xd0fc,\r
-+      0x1904, 0x3573, 0x0804, 0x4548, 0xa9a0, 0x2001, 0x1980, 0x918c,\r
-+      0x8000, 0xc18d, 0x2102, 0x080c, 0x4acb, 0x01a0, 0x080c, 0x6a6b,\r
-+      0x0118, 0x080c, 0x6a73, 0x1170, 0x080c, 0x66ec, 0x2009, 0x0002,\r
-+      0x0128, 0x080c, 0x686f, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005,\r
-+      0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,\r
-+      0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1980, 0x2004, 0xd0fc,\r
-+      0x1128, 0x080c, 0x56e2, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,\r
-+      0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x35a5, 0x798c,\r
-+      0x2001, 0x197f, 0x918c, 0x8000, 0x2102, 0x080c, 0x4abe, 0x0904,\r
-+      0x35a8, 0x080c, 0x6a6b, 0x0120, 0x080c, 0x6a73, 0x1904, 0x35a8,\r
-+      0x080c, 0x66ec, 0x0904, 0x35a5, 0x080c, 0x685d, 0x0904, 0x35a5,\r
-+      0x2001, 0x197f, 0x2004, 0xd0fc, 0x1904, 0x3573, 0x0804, 0x4548,\r
-+      0xa9a0, 0x2001, 0x197f, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c,\r
-+      0x4acb, 0x01a0, 0x080c, 0x6a6b, 0x0118, 0x080c, 0x6a73, 0x1170,\r
-+      0x080c, 0x66ec, 0x2009, 0x0002, 0x0128, 0x080c, 0x685d, 0x1170,\r
-+      0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,\r
-+      0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,\r
-+      0x2001, 0x197f, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56e2, 0x0110,\r
-+      0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,\r
-+      0x6100, 0x0804, 0x3573, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c,\r
-+      0x56ee, 0x1904, 0x35a5, 0x79a8, 0xd184, 0x1158, 0xb834, 0x8007,\r
-+      0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217,\r
-+      0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c,\r
-+      0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0200, 0x0804, 0x3573,\r
-+      0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1140, 0x939a, 0x0003, 0x1a04,\r
-+      0x35a5, 0x625c, 0x7884, 0x9206, 0x1548, 0x080c, 0x87bb, 0x2001,\r
-+      0xfff4, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,\r
-+      0x0000, 0x0006, 0x78a8, 0x9084, 0x0080, 0x1118, 0x000e, 0x0804,\r
-+      0x4af3, 0x000e, 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44, 0xa66a,\r
-+      0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c,\r
-+      0x1124, 0x7007, 0x0002, 0x701f, 0x46fe, 0x0005, 0x81ff, 0x1904,\r
-+      0x35a5, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c, 0x6a6b, 0x1904,\r
-+      0x35a5, 0x00c6, 0x080c, 0x4aa7, 0x00ce, 0x0904, 0x35a5, 0xa867,\r
-+      0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7ea8, 0x080c, 0xc9ad, 0x0904,\r
-+      0x35a5, 0x7007, 0x0003, 0x701f, 0x4702, 0x0005, 0x080c, 0x4246,\r
-+      0x0804, 0x3573, 0xa830, 0x9086, 0x0100, 0x0904, 0x35a5, 0x8906,\r
-+      0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b,\r
-+      0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4af3,\r
-+      0x9006, 0x080c, 0x2664, 0x78a8, 0x9084, 0x00ff, 0x9086, 0x00ff,\r
-+      0x0118, 0x81ff, 0x1904, 0x35a5, 0x080c, 0x74e9, 0x0110, 0x080c,\r
-+      0x5fee, 0x7888, 0x908a, 0x1000, 0x1a04, 0x35a8, 0x7984, 0x9186,\r
-+      0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x35a8, 0x2100, 0x080c,\r
-+      0x262e, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, 0x1a03,\r
-+      0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, 0x6077, 0x0000,\r
-+      0x080c, 0x74e9, 0x1158, 0x080c, 0x77ed, 0x080c, 0x6029, 0x9085,\r
-+      0x0001, 0x080c, 0x7530, 0x080c, 0x741a, 0x00f0, 0x080c, 0xa896,\r
-+      0x080c, 0xab5e, 0x080c, 0xa8b2, 0x2061, 0x0100, 0x2001, 0x1818,\r
-+      0x2004, 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043, 0x0090,\r
-+      0x6043, 0x0010, 0x2009, 0x1999, 0x200b, 0x0000, 0x2009, 0x002d,\r
-+      0x2011, 0x5f14, 0x080c, 0x8708, 0x7984, 0x080c, 0x74e9, 0x1110,\r
-+      0x2009, 0x00ff, 0x7a88, 0x080c, 0x45ab, 0x012e, 0x00ce, 0x002e,\r
-+      0x0804, 0x3573, 0x7984, 0x080c, 0x65c4, 0x2b08, 0x1904, 0x35a8,\r
-+      0x0804, 0x3573, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5,\r
-+      0x60dc, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804,\r
-+      0x35a5, 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5,\r
-+      0x7984, 0x9192, 0x0021, 0x1a04, 0x35a8, 0x7a8c, 0x7b88, 0x7c9c,\r
-+      0x7d98, 0xa85c, 0x9080, 0x0019, 0x702a, 0xaf60, 0x7736, 0x080c,\r
-+      0x4af0, 0x701f, 0x47ba, 0x7880, 0x9086, 0x006e, 0x0110, 0x701f,\r
-+      0x5190, 0x0005, 0x2009, 0x0080, 0x080c, 0x6625, 0x1118, 0x080c,\r
-+      0x6a6b, 0x0120, 0x2021, 0x400a, 0x0804, 0x3575, 0x00d6, 0x0096,\r
-+      0xa964, 0xaa6c, 0xab70, 0xac74, 0xad78, 0xae7c, 0xa884, 0x90be,\r
-+      0x0100, 0x0904, 0x4853, 0x90be, 0x0112, 0x0904, 0x4853, 0x90be,\r
-+      0x0113, 0x0904, 0x4853, 0x90be, 0x0114, 0x0904, 0x4853, 0x90be,\r
-+      0x0117, 0x0904, 0x4853, 0x90be, 0x011a, 0x0904, 0x4853, 0x90be,\r
-+      0x011c, 0x0904, 0x4853, 0x90be, 0x0121, 0x0904, 0x483a, 0x90be,\r
-+      0x0131, 0x0904, 0x483a, 0x90be, 0x0171, 0x0904, 0x4853, 0x90be,\r
-+      0x0173, 0x0904, 0x4853, 0x90be, 0x01a1, 0x1128, 0xa894, 0x8007,\r
-+      0xa896, 0x0804, 0x485e, 0x90be, 0x0212, 0x0904, 0x4847, 0x90be,\r
-+      0x0213, 0x05e8, 0x90be, 0x0214, 0x0500, 0x90be, 0x0217, 0x0188,\r
-+      0x90be, 0x021a, 0x1120, 0xa89c, 0x8007, 0xa89e, 0x04e0, 0x90be,\r
-+      0x021f, 0x05c8, 0x90be, 0x0300, 0x05b0, 0x009e, 0x00de, 0x0804,\r
-+      0x35a8, 0x7028, 0x9080, 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0,\r
-+      0x20e8, 0x20a9, 0x0007, 0x080c, 0x489c, 0x7028, 0x9080, 0x000e,\r
-+      0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c,\r
-+      0x489c, 0x00c8, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034,\r
-+      0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x48a9, 0x00b8, 0x7028,\r
-+      0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,\r
-+      0x0001, 0x080c, 0x48a9, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0,\r
-+      0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c,\r
-+      0x4aa7, 0x0550, 0xa868, 0xc0fd, 0xa86a, 0xa867, 0x0119, 0x9006,\r
-+      0xa882, 0xa87f, 0x0020, 0xa88b, 0x0001, 0x810b, 0xa9ae, 0xa8b2,\r
-+      0xaab6, 0xabba, 0xacbe, 0xadc2, 0xa9c6, 0xa8ca, 0x00ce, 0x009e,\r
-+      0x00de, 0xa866, 0xa822, 0xa868, 0xc0fd, 0xa86a, 0xa804, 0x2048,\r
-+      0x080c, 0xc9c8, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007,\r
-+      0x0003, 0x701f, 0x4893, 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009,\r
-+      0x0002, 0x0804, 0x35a5, 0xa820, 0x9086, 0x8001, 0x1904, 0x3573,\r
-+      0x2009, 0x0004, 0x0804, 0x35a5, 0x0016, 0x0026, 0x3510, 0x20a9,\r
-+      0x0002, 0x4002, 0x4104, 0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e,\r
-+      0x0005, 0x0016, 0x0026, 0x0036, 0x0046, 0x3520, 0x20a9, 0x0004,\r
-+      0x4002, 0x4304, 0x4204, 0x4104, 0x4004, 0x8421, 0x1db8, 0x004e,\r
-+      0x003e, 0x002e, 0x001e, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001,\r
-+      0x0804, 0x35a5, 0x60dc, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009,\r
-+      0x0005, 0x0804, 0x35a5, 0x7984, 0x78a8, 0x2040, 0x080c, 0xab57,\r
-+      0x1120, 0x9182, 0x007f, 0x0a04, 0x35a8, 0x9186, 0x00ff, 0x0904,\r
-+      0x35a8, 0x9182, 0x0800, 0x1a04, 0x35a8, 0x7a8c, 0x7b88, 0x607c,\r
-+      0x9306, 0x1140, 0x6080, 0x924e, 0x0904, 0x35a8, 0x99cc, 0xff00,\r
-+      0x0904, 0x35a8, 0x0126, 0x2091, 0x8000, 0x080c, 0x49ba, 0x0904,\r
-+      0x493a, 0x0086, 0x90c6, 0x4000, 0x008e, 0x1538, 0x00c6, 0x0006,\r
-+      0x0036, 0xb818, 0xbb1c, 0x9305, 0xbb20, 0x9305, 0xbb24, 0x9305,\r
-+      0xbb28, 0x9305, 0xbb2c, 0x9305, 0xbb30, 0x9305, 0xbb34, 0x9305,\r
-+      0x003e, 0x0570, 0xd88c, 0x1128, 0x080c, 0x6a6b, 0x0110, 0xc89d,\r
-+      0x0438, 0x900e, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc,\r
-+      0x0108, 0xc18d, 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110,\r
-+      0x2408, 0x0090, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060,\r
-+      0x90c6, 0x4009, 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020,\r
-+      0x2001, 0x4005, 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3575,\r
-+      0x000e, 0x00ce, 0x2b00, 0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6,\r
-+      0x2c70, 0x080c, 0xac5f, 0x0904, 0x498f, 0x2b00, 0x6012, 0x080c,\r
-+      0xcccc, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x4aa7, 0x00ce,\r
-+      0x2b70, 0x1158, 0x080c, 0xabed, 0x00ee, 0x00ce, 0x00be, 0x001e,\r
-+      0x012e, 0x2009, 0x0002, 0x0804, 0x35a5, 0x900e, 0xa966, 0xa96a,\r
-+      0x2900, 0x6016, 0xa932, 0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5,\r
-+      0xa86a, 0xd89c, 0x1110, 0x080c, 0x31e7, 0x6023, 0x0001, 0x9006,\r
-+      0x080c, 0x6561, 0xd89c, 0x0138, 0x2001, 0x0004, 0x080c, 0x6575,\r
-+      0x2009, 0x0003, 0x0030, 0x2001, 0x0002, 0x080c, 0x6575, 0x2009,\r
-+      0x0002, 0x080c, 0xac8c, 0x78a8, 0xd094, 0x0138, 0x00ee, 0x7024,\r
-+      0x00e6, 0x2058, 0xb8d4, 0xc08d, 0xb8d6, 0x9085, 0x0001, 0x00ee,\r
-+      0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003, 0x0804,\r
-+      0x35a5, 0x7007, 0x0003, 0x701f, 0x499e, 0x0005, 0xa830, 0x9086,\r
-+      0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294,\r
-+      0x00ff, 0x0804, 0x5637, 0x900e, 0xa868, 0xd0f4, 0x1904, 0x3573,\r
-+      0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,\r
-+      0x0804, 0x3573, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904, 0x4a09,\r
-+      0x902e, 0x080c, 0xab57, 0x0130, 0x9026, 0x20a9, 0x0800, 0x2071,\r
-+      0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071, 0x107f,\r
-+      0x2e04, 0x9005, 0x11b8, 0x2100, 0x9406, 0x1904, 0x4a1a, 0x2428,\r
-+      0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1558, 0x0030, 0x94ce,\r
-+      0x0080, 0x1130, 0x92ce, 0xfffc, 0x1520, 0x93ce, 0x00ff, 0x1508,\r
-+      0xc5fd, 0x0480, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11e8, 0xbe14,\r
-+      0x2600, 0x9206, 0x11c8, 0x2400, 0x9106, 0x1180, 0xd884, 0x0598,\r
-+      0xd894, 0x1588, 0x080c, 0x6a0b, 0x1570, 0x2001, 0x4000, 0x0460,\r
-+      0x080c, 0x6a6b, 0x1540, 0x2001, 0x4000, 0x0430, 0x2001, 0x4007,\r
-+      0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106, 0x1158, 0xbe14,\r
-+      0x87ff, 0x1128, 0x86ff, 0x0918, 0x080c, 0xab57, 0x1900, 0x2001,\r
-+      0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x49d0, 0x85ff, 0x1130,\r
-+      0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030, 0x080c, 0x65c4,\r
-+      0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e, 0x00de, 0x00ee,\r
-+      0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, 0x080c,\r
-+      0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, 0xa867, 0x0000,\r
-+      0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904, 0x35a8, 0x9096,\r
-+      0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x35a8, 0x2010, 0x2918,\r
-+      0x080c, 0x3181, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007,\r
-+      0x0003, 0x701f, 0x4a5c, 0x0005, 0xa830, 0x9086, 0x0100, 0x1904,\r
-+      0x3573, 0x2009, 0x0004, 0x0804, 0x35a5, 0x7984, 0x080c, 0xab57,\r
-+      0x1120, 0x9182, 0x007f, 0x0a04, 0x35a8, 0x9186, 0x00ff, 0x0904,\r
-+      0x35a8, 0x9182, 0x0800, 0x1a04, 0x35a8, 0x2001, 0x9000, 0x080c,\r
-+      0x5692, 0x1904, 0x35a5, 0x0804, 0x3573, 0xa998, 0x080c, 0xab57,\r
-+      0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff, 0x0168, 0x9182,\r
-+      0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x5692, 0x11a8, 0x0060,\r
-+      0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,\r
-+      0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x900e, 0x9085,\r
-+      0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a, 0x0c48, 0x080c,\r
-+      0x103a, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005, 0x1120, 0x2900,\r
-+      0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086, 0x2040, 0x2900,\r
-+      0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005, 0x7984, 0x080c,\r
-+      0x6625, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208,\r
-+      0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x6625, 0x1130, 0xae9c,\r
-+      0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005,\r
-+      0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x6625, 0x1108, 0x0008,\r
-+      0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff, 0x0128, 0x2148,\r
-+      0xa904, 0x080c, 0x106c, 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005,\r
-+      0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44,\r
-+      0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a,\r
-+      0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x3573, 0x0005, 0x00f6,\r
-+      0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x18b0, 0x2004,\r
-+      0x9005, 0x1190, 0x0e04, 0x4b24, 0x7a36, 0x7833, 0x0012, 0x7a82,\r
-+      0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,\r
-+      0x190c, 0x11d6, 0x0804, 0x4b8a, 0x0016, 0x0086, 0x0096, 0x00c6,\r
-+      0x00e6, 0x2071, 0x189e, 0x7044, 0x9005, 0x1540, 0x7148, 0x9182,\r
-+      0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x103a, 0x0904, 0x4b82,\r
-+      0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002, 0x9080, 0x1e55,\r
-+      0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004, 0x2001, 0x18ba,\r
-+      0x9c82, 0x18fa, 0x0210, 0x2061, 0x18ba, 0x2c00, 0x703a, 0x7148,\r
-+      0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460, 0x7148, 0x8108,\r
-+      0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016, 0x908a, 0x0036,\r
-+      0x1a0c, 0x0d7d, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa146,\r
-+      0x1520, 0x080c, 0x103a, 0x1130, 0x8109, 0xa946, 0x7148, 0x8109,\r
-+      0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046, 0x2800, 0xa802,\r
-+      0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080, 0x1e55, 0x2005,\r
-+      0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x009e,\r
-+      0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001b,\r
-+      0x0002, 0x4bac, 0x4bac, 0x4bae, 0x4bac, 0x4bac, 0x4bac, 0x4bb2,\r
-+      0x4bac, 0x4bac, 0x4bac, 0x4bb6, 0x4bac, 0x4bac, 0x4bac, 0x4bba,\r
-+      0x4bac, 0x4bac, 0x4bac, 0x4bbe, 0x4bac, 0x4bac, 0x4bac, 0x4bc2,\r
-+      0x4bac, 0x4bac, 0x4bac, 0x4bc7, 0x080c, 0x0d7d, 0xa276, 0xa37a,\r
-+      0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878, 0xa296, 0xa39a,\r
-+      0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838, 0xa2b6, 0xa3ba,\r
-+      0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804, 0x4b85, 0xa2d6,\r
-+      0xa3da, 0xa4de, 0x0804, 0x4b85, 0x00e6, 0x2071, 0x189e, 0x7048,\r
-+      0x9005, 0x0904, 0x4c5e, 0x0126, 0x2091, 0x8000, 0x0e04, 0x4c5d,\r
-+      0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086, 0x0076, 0x9006,\r
-+      0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948, 0x2105, 0x0016,\r
-+      0x908a, 0x0036, 0x1a0c, 0x0d7d, 0x2060, 0x001e, 0x8108, 0x2105,\r
-+      0x9005, 0xa94a, 0x1904, 0x4c60, 0xa804, 0x9005, 0x090c, 0x0d7d,\r
-+      0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001, 0x0002, 0x9080,\r
-+      0x1e55, 0x2005, 0xa04a, 0x0804, 0x4c60, 0x703c, 0x2060, 0x2c14,\r
-+      0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833, 0x0012, 0x7882,\r
-+      0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080, 0x2001, 0x0089,\r
-+      0x2004, 0xd084, 0x190c, 0x11d6, 0x87ff, 0x0118, 0x2748, 0x080c,\r
-+      0x106c, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170, 0x7040, 0x2048,\r
-+      0x9005, 0x0128, 0x080c, 0x106c, 0x9006, 0x7042, 0x7046, 0x703b,\r
-+      0x18ba, 0x703f, 0x18ba, 0x0420, 0x7040, 0x9005, 0x1508, 0x7238,\r
-+      0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa, 0x18fa, 0x0210,\r
-+      0x2001, 0x18ba, 0x703e, 0x00a0, 0x9006, 0x703e, 0x703a, 0x7044,\r
-+      0x9005, 0x090c, 0x0d7d, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900,\r
-+      0x7042, 0x2001, 0x0002, 0x9080, 0x1e55, 0x2005, 0xa84a, 0x0000,\r
-+      0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005,\r
-+      0x2c00, 0x9082, 0x001b, 0x0002, 0x4c7f, 0x4c7f, 0x4c81, 0x4c7f,\r
-+      0x4c7f, 0x4c7f, 0x4c86, 0x4c7f, 0x4c7f, 0x4c7f, 0x4c8b, 0x4c7f,\r
-+      0x4c7f, 0x4c7f, 0x4c90, 0x4c7f, 0x4c7f, 0x4c7f, 0x4c95, 0x4c7f,\r
-+      0x4c7f, 0x4c7f, 0x4c9a, 0x4c7f, 0x4c7f, 0x4c7f, 0x4c9f, 0x080c,\r
-+      0x0d7d, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x4c0b, 0xaa84, 0xab88,\r
-+      0xac8c, 0x0804, 0x4c0b, 0xaa94, 0xab98, 0xac9c, 0x0804, 0x4c0b,\r
-+      0xaaa4, 0xaba8, 0xacac, 0x0804, 0x4c0b, 0xaab4, 0xabb8, 0xacbc,\r
-+      0x0804, 0x4c0b, 0xaac4, 0xabc8, 0xaccc, 0x0804, 0x4c0b, 0xaad4,\r
-+      0xabd8, 0xacdc, 0x0804, 0x4c0b, 0x0016, 0x0026, 0x0036, 0x00b6,\r
-+      0x00c6, 0x2009, 0x007e, 0x080c, 0x6625, 0x2019, 0x0001, 0xb85c,\r
-+      0xd0ac, 0x0110, 0x2019, 0x0000, 0x2011, 0x801b, 0x080c, 0x4b07,\r
-+      0x00ce, 0x00be, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x080c,\r
-+      0x56da, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x4b07, 0x002e,\r
-+      0x0005, 0x81ff, 0x1904, 0x35a5, 0x0126, 0x2091, 0x8000, 0x6030,\r
-+      0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x74e9, 0x1158, 0x080c,\r
-+      0x77ed, 0x080c, 0x6029, 0x9085, 0x0001, 0x080c, 0x7530, 0x080c,\r
-+      0x741a, 0x0010, 0x080c, 0x5ee4, 0x012e, 0x0804, 0x3573, 0x81ff,\r
-+      0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, 0x080c, 0x56ee, 0x0120,\r
-+      0x2009, 0x0007, 0x0804, 0x35a5, 0x080c, 0x6a63, 0x0120, 0x2009,\r
-+      0x0008, 0x0804, 0x35a5, 0x080c, 0x3363, 0x0128, 0x7984, 0x080c,\r
-+      0x65c4, 0x1904, 0x35a8, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x2b00,\r
-+      0x7026, 0x080c, 0x6a6b, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158,\r
-+      0x900e, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,\r
-+      0xc18d, 0x0804, 0x3573, 0x080c, 0x4aa7, 0x0904, 0x35a5, 0x9006,\r
-+      0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xca6a, 0x0904,\r
-+      0x35a5, 0x7888, 0xd094, 0x0118, 0xb8d4, 0xc08d, 0xb8d6, 0x7007,\r
-+      0x0003, 0x701f, 0x4d80, 0x0005, 0x2061, 0x1800, 0x080c, 0x56ee,\r
-+      0x2009, 0x0007, 0x1578, 0x080c, 0x6a63, 0x0118, 0x2009, 0x0008,\r
-+      0x0448, 0x080c, 0x3363, 0x0120, 0xa998, 0x080c, 0x65c4, 0x1530,\r
-+      0x080c, 0x4ad8, 0x0518, 0x080c, 0x6a6b, 0xa89c, 0x1168, 0x9084,\r
-+      0x0005, 0x1150, 0x900e, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800,\r
-+      0xd0bc, 0x0108, 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c,\r
-+      0xca6a, 0x11e0, 0xa89c, 0xd094, 0x0118, 0xb8d4, 0xc08d, 0xb8d6,\r
-+      0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,\r
-+      0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,\r
-+      0xa99a, 0x9006, 0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005,\r
-+      0xa830, 0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x5637,\r
-+      0x900e, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,\r
-+      0xc18d, 0x0804, 0x3573, 0x080c, 0x56ee, 0x0120, 0x2009, 0x0007,\r
-+      0x0804, 0x35a5, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c,\r
-+      0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, 0x900e, 0x2130,\r
-+      0x7126, 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005,\r
-+      0x702a, 0x20a0, 0x080c, 0x6625, 0x1904, 0x4e22, 0x080c, 0x6a6b,\r
-+      0x0138, 0x080c, 0x6a73, 0x0120, 0x080c, 0x6a0b, 0x1904, 0x4e22,\r
-+      0xd794, 0x1110, 0xd784, 0x01a8, 0xb8c4, 0x20e0, 0xb8c8, 0x9080,\r
-+      0x0006, 0x2098, 0x3400, 0xd794, 0x0160, 0x20a9, 0x0008, 0x4003,\r
-+      0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, 0x48a9,\r
-+      0x0048, 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0,\r
-+      0x080c, 0x48a9, 0x9186, 0x007e, 0x0170, 0x9186, 0x0080, 0x0158,\r
-+      0x080c, 0x6a6b, 0x90c2, 0x0006, 0x1210, 0xc1fd, 0x0020, 0x080c,\r
-+      0x6914, 0x1108, 0xc1fd, 0x4104, 0xc1fc, 0xd794, 0x0528, 0xb8c4,\r
-+      0x20e0, 0xb8c8, 0x2060, 0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002,\r
-+      0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80,\r
-+      0x0004, 0x2098, 0x3400, 0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0,\r
-+      0x3d00, 0x20e0, 0x080c, 0x489c, 0x9c80, 0x0026, 0x2098, 0xb8c4,\r
-+      0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b,\r
-+      0x96b0, 0x0005, 0x8108, 0x080c, 0xab57, 0x0118, 0x9186, 0x0800,\r
-+      0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170, 0x0018, 0x9186,\r
-+      0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, 0x0010, 0x9686,\r
-+      0x0028, 0x0150, 0x0804, 0x4db2, 0x86ff, 0x1120, 0x7124, 0x810b,\r
-+      0x0804, 0x3573, 0x7033, 0x0001, 0x7122, 0x7024, 0x9600, 0x7026,\r
-+      0x772e, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa67a, 0x7034,\r
-+      0xa072, 0x7028, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c,\r
-+      0x1124, 0x7007, 0x0002, 0x701f, 0x4e5e, 0x0005, 0x7030, 0x9005,\r
-+      0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8,\r
-+      0x2061, 0x18b8, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x0804,\r
-+      0x4db2, 0x7124, 0x810b, 0x0804, 0x3573, 0x2029, 0x007e, 0x7984,\r
-+      0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020,\r
-+      0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8, 0x9184, 0x00ff, 0x90e2,\r
-+      0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8, 0x9284, 0xff00,\r
-+      0x8007, 0x90e2, 0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8,\r
-+      0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04,\r
-+      0x35a8, 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x35a8,\r
-+      0x9502, 0x0a04, 0x35a8, 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04,\r
-+      0x35a8, 0x9502, 0x0a04, 0x35a8, 0x9484, 0xff00, 0x8007, 0x90e2,\r
-+      0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8, 0x9484, 0x00ff,\r
-+      0x90e2, 0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8, 0x2061,\r
-+      0x1989, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x3573, 0x080c,\r
-+      0x4aa7, 0x0904, 0x35a5, 0x2009, 0x0016, 0x7a8c, 0x7b88, 0x7c9c,\r
-+      0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4af0, 0x701f,\r
-+      0x4ee2, 0x0005, 0x2001, 0x0138, 0x2003, 0x0000, 0x00e6, 0x2071,\r
-+      0x0300, 0x701c, 0xd0a4, 0x1de8, 0x00ee, 0x20a9, 0x0016, 0x896e,\r
-+      0x8d6e, 0x8d6f, 0x9d84, 0xffc0, 0x9080, 0x0019, 0x2098, 0x9d84,\r
-+      0x003f, 0x20e0, 0x2069, 0x1877, 0x20e9, 0x0001, 0x2da0, 0x4003,\r
-+      0x6800, 0x9005, 0x0904, 0x4f63, 0x6804, 0x2008, 0x918c, 0xfff8,\r
-+      0x1904, 0x4f63, 0x680c, 0x9005, 0x0904, 0x4f63, 0x9082, 0xff01,\r
-+      0x1a04, 0x4f63, 0x6810, 0x9082, 0x005c, 0x0a04, 0x4f63, 0x6824,\r
-+      0x2008, 0x9082, 0x0008, 0x0a04, 0x4f63, 0x9182, 0x0400, 0x1a04,\r
-+      0x4f63, 0x0056, 0x2029, 0x0000, 0x080c, 0x8d0a, 0x005e, 0x6944,\r
-+      0x6820, 0x9102, 0x06c0, 0x6820, 0x9082, 0x0019, 0x16a0, 0x6828,\r
-+      0x6944, 0x810c, 0x9102, 0x0678, 0x6840, 0x9082, 0x000f, 0x1658,\r
-+      0x080c, 0x1053, 0x2900, 0x0904, 0x4f7d, 0x684e, 0x00e6, 0x2071,\r
-+      0x1930, 0x00b6, 0x2059, 0x0000, 0x080c, 0x8bc6, 0x00be, 0x00ee,\r
-+      0x0558, 0x080c, 0x8920, 0x080c, 0x8966, 0x11e0, 0x6857, 0x0000,\r
-+      0x00c6, 0x2061, 0x0100, 0x6104, 0x918d, 0x2000, 0x6106, 0x6b10,\r
-+      0x2061, 0x1a6b, 0x630a, 0x00ce, 0x080c, 0x2713, 0x2001, 0x0138,\r
-+      0x2102, 0x0804, 0x3573, 0x080c, 0x2713, 0x2001, 0x0138, 0x2102,\r
-+      0x0804, 0x35a8, 0x00e6, 0x2071, 0x1930, 0x080c, 0x8d9b, 0x080c,\r
-+      0x8daa, 0x080c, 0x8bb5, 0x00ee, 0x2001, 0x188a, 0x204c, 0x080c,\r
-+      0x106c, 0x2001, 0x188a, 0x2003, 0x0000, 0x080c, 0x2713, 0x2001,\r
-+      0x0138, 0x2102, 0x0804, 0x35a5, 0x2001, 0x1924, 0x200c, 0x918e,\r
-+      0x0000, 0x0904, 0x4fdc, 0x080c, 0x8bb0, 0x0904, 0x4fdc, 0x2001,\r
-+      0x0101, 0x200c, 0x918c, 0xdfff, 0x2102, 0x2001, 0x0138, 0x2003,\r
-+      0x0000, 0x00e6, 0x2071, 0x0300, 0x701c, 0xd0a4, 0x1de8, 0x00ee,\r
-+      0x080c, 0x8bb5, 0x2001, 0x0035, 0x080c, 0x1679, 0x00c6, 0x2061,\r
-+      0x193c, 0x6004, 0x6100, 0x9106, 0x1de0, 0x00ce, 0x080c, 0x2713,\r
-+      0x2001, 0x0138, 0x2102, 0x00e6, 0x00f6, 0x2071, 0x1923, 0x080c,\r
-+      0x8af1, 0x0120, 0x2f00, 0x080c, 0x8b7b, 0x0cc8, 0x00fe, 0x00ee,\r
-+      0x0126, 0x2091, 0x8000, 0x2001, 0x188a, 0x200c, 0x81ff, 0x0138,\r
-+      0x2148, 0x080c, 0x106c, 0x2001, 0x188a, 0x2003, 0x0000, 0x2001,\r
-+      0x183d, 0x2003, 0x0020, 0x00e6, 0x2071, 0x1930, 0x080c, 0x8d9b,\r
-+      0x080c, 0x8daa, 0x00ee, 0x012e, 0x0804, 0x3573, 0x0006, 0x080c,\r
-+      0x56da, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x080c, 0x56de, 0xd0bc,\r
-+      0x000e, 0x0005, 0x6174, 0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986,\r
-+      0x0804, 0x3573, 0x83ff, 0x1904, 0x35a8, 0x2001, 0xfff0, 0x9200,\r
-+      0x1a04, 0x35a8, 0x2019, 0xffff, 0x6078, 0x9302, 0x9200, 0x0a04,\r
-+      0x35a8, 0x7986, 0x6276, 0x0804, 0x3573, 0x080c, 0x56ee, 0x1904,\r
-+      0x35a5, 0x7c88, 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4aa7, 0x0904,\r
-+      0x35a5, 0x900e, 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8, 0x7036,\r
-+      0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c,\r
-+      0x8bff, 0x0178, 0x080c, 0x6a6b, 0x0118, 0x080c, 0x6a73, 0x1148,\r
-+      0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398,\r
-+      0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0170,\r
-+      0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c,\r
-+      0x9166, 0x2208, 0x0804, 0x3573, 0x7033, 0x0001, 0x7122, 0x7024,\r
-+      0x9300, 0x7026, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa37a,\r
-+      0x7028, 0xa076, 0x7034, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a,\r
-+      0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x505f, 0x0005, 0x7030,\r
-+      0x9005, 0x1178, 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8,\r
-+      0x2061, 0x18b8, 0x2c44, 0xa48c, 0xa590, 0xa694, 0xa798, 0x0804,\r
-+      0x501d, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x9166, 0x2208,\r
-+      0x0804, 0x3573, 0x00f6, 0x00e6, 0x080c, 0x56ee, 0x2009, 0x0007,\r
-+      0x1904, 0x50f2, 0x2071, 0x189e, 0x745c, 0x84ff, 0x2009, 0x000e,\r
-+      0x1904, 0x50f2, 0xac9c, 0xad98, 0xaea4, 0xafa0, 0x0096, 0x080c,\r
-+      0x1053, 0x2009, 0x0002, 0x0904, 0x50f2, 0x2900, 0x705e, 0x900e,\r
-+      0x901e, 0x7356, 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080, 0x0003,\r
-+      0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c,\r
-+      0x6a6b, 0x0118, 0x080c, 0x6a73, 0x1148, 0xb814, 0x20a9, 0x0001,\r
-+      0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182,\r
-+      0x0800, 0x0120, 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0,\r
-+      0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x9166, 0x2208, 0x009e,\r
-+      0xa897, 0x4000, 0xa99a, 0x715c, 0x81ff, 0x090c, 0x0d7d, 0x2148,\r
-+      0x080c, 0x106c, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0x0418,\r
-+      0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0x2061, 0x18b9,\r
-+      0x2c44, 0xa37a, 0x7058, 0xa076, 0x7064, 0xa072, 0xa48e, 0xa592,\r
-+      0xa696, 0xa79a, 0xa09f, 0x50fe, 0x000e, 0xa0a2, 0x080c, 0x1124,\r
-+      0x9006, 0x0048, 0x009e, 0xa897, 0x4005, 0xa99a, 0x900e, 0x9085,\r
-+      0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a0,\r
-+      0x904d, 0x090c, 0x0d7d, 0x00e6, 0x2071, 0x189e, 0xa06c, 0x908e,\r
-+      0x0100, 0x0138, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4002,\r
-+      0x00d8, 0x7060, 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0, 0x901e,\r
-+      0x7064, 0x20e8, 0xa48c, 0xa590, 0xa694, 0xa798, 0x0428, 0xa87b,\r
-+      0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x7254, 0x900e, 0x2001,\r
-+      0x0003, 0x080c, 0x9166, 0xaa9a, 0x715c, 0x81ff, 0x090c, 0x0d7d,\r
-+      0x2148, 0x080c, 0x106c, 0x705f, 0x0000, 0xa0a0, 0x2048, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0xa09f, 0x0000, 0xa0a3,\r
-+      0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff,\r
-+      0x0178, 0x080c, 0x6a6b, 0x0118, 0x080c, 0x6a73, 0x1148, 0xb814,\r
-+      0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003,\r
-+      0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0518, 0x0c20,\r
-+      0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99a, 0xa897, 0x4000, 0x715c,\r
-+      0x81ff, 0x090c, 0x0d7d, 0x2148, 0x080c, 0x106c, 0x9006, 0x705e,\r
-+      0x918d, 0x0001, 0x2008, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x6d80, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x0070,\r
-+      0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0xa37a, 0xa48e,\r
-+      0xa592, 0xa696, 0xa79a, 0x080c, 0x1124, 0x9006, 0x00ee, 0x0005,\r
-+      0x0096, 0xa88c, 0x90be, 0x7000, 0x0148, 0x90be, 0x7100, 0x0130,\r
-+      0x90be, 0x7200, 0x0118, 0x009e, 0x0804, 0x35a8, 0xa884, 0xa988,\r
-+      0x080c, 0x25fb, 0x1518, 0x080c, 0x65c4, 0x1500, 0x7126, 0xbe12,\r
-+      0xbd16, 0xae7c, 0x080c, 0x4aa7, 0x01c8, 0x080c, 0x4aa7, 0x01b0,\r
-+      0x009e, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0xa823, 0x0000,\r
-+      0xa804, 0x2048, 0x080c, 0xc9e8, 0x1120, 0x2009, 0x0003, 0x0804,\r
-+      0x35a5, 0x7007, 0x0003, 0x701f, 0x51cb, 0x0005, 0x009e, 0x2009,\r
-+      0x0002, 0x0804, 0x35a5, 0x7124, 0x080c, 0x32fc, 0xa820, 0x9086,\r
-+      0x8001, 0x1120, 0x2009, 0x0004, 0x0804, 0x35a5, 0x2900, 0x7022,\r
-+      0xa804, 0x0096, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f,\r
-+      0x9084, 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076, 0x0006, 0x2098,\r
-+      0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0fb7, 0xaa6c,\r
-+      0xab70, 0xac74, 0xad78, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000,\r
-+      0xae64, 0xaf8c, 0x97c6, 0x7000, 0x0118, 0x97c6, 0x7100, 0x1148,\r
-+      0x96c2, 0x0004, 0x0600, 0x2009, 0x0004, 0x000e, 0x007e, 0x0804,\r
-+      0x4af3, 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e,\r
-+      0x007e, 0x2061, 0x18b8, 0x2c44, 0xa076, 0xa772, 0xa07b, 0x002a,\r
-+      0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x1124, 0x7007, 0x0002,\r
-+      0x701f, 0x5227, 0x0005, 0x000e, 0x007e, 0x0804, 0x35a8, 0x7020,\r
-+      0x2048, 0xa804, 0x2048, 0xa804, 0x2048, 0x8906, 0x8006, 0x8007,\r
-+      0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0,\r
-+      0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0fb7, 0x2100, 0x2238,\r
-+      0x2061, 0x18b8, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x2009,\r
-+      0x002a, 0x0804, 0x4af3, 0x81ff, 0x1904, 0x35a5, 0x798c, 0x2001,\r
-+      0x197e, 0x918c, 0x8000, 0x2102, 0x080c, 0x4abe, 0x0904, 0x35a8,\r
-+      0x080c, 0x6a6b, 0x0120, 0x080c, 0x6a73, 0x1904, 0x35a8, 0x080c,\r
-+      0x66ec, 0x0904, 0x35a5, 0x0126, 0x2091, 0x8000, 0x080c, 0x6881,\r
-+      0x012e, 0x0904, 0x35a5, 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1904,\r
-+      0x3573, 0x0804, 0x4548, 0xa9a0, 0x2001, 0x197e, 0x918c, 0x8000,\r
-+      0xc18d, 0x2102, 0x080c, 0x4acb, 0x01a0, 0x080c, 0x6a6b, 0x0118,\r
-+      0x080c, 0x6a73, 0x1170, 0x080c, 0x66ec, 0x2009, 0x0002, 0x0128,\r
-+      0x080c, 0x6881, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a,\r
-+      0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,\r
-+      0x0005, 0xa897, 0x4000, 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1128,\r
-+      0x080c, 0x56e2, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001,\r
-+      0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904,\r
-+      0x44bd, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c, 0x4aa7, 0x1120,\r
-+      0x2009, 0x0002, 0x0804, 0x35a5, 0x080c, 0x6a6b, 0x0130, 0x908e,\r
-+      0x0004, 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120,\r
-+      0xb800, 0xc08c, 0xb802, 0x0028, 0x080c, 0x56da, 0xd0b4, 0x0904,\r
-+      0x44f7, 0x7884, 0x908e, 0x007e, 0x0904, 0x44f7, 0x908e, 0x007f,\r
-+      0x0904, 0x44f7, 0x908e, 0x0080, 0x0904, 0x44f7, 0xb800, 0xd08c,\r
-+      0x1904, 0x44f7, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c,\r
-+      0xca07, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007, 0x0003,\r
-+      0x701f, 0x52f3, 0x0005, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x0804,\r
-+      0x44f7, 0x080c, 0x3363, 0x0108, 0x0005, 0x2009, 0x1834, 0x210c,\r
-+      0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, 0x080c, 0x56ee,\r
-+      0x0120, 0x2009, 0x0007, 0x0804, 0x35a5, 0x080c, 0x6a63, 0x0120,\r
-+      0x2009, 0x0008, 0x0804, 0x35a5, 0xb89c, 0xd0a4, 0x1118, 0xd0ac,\r
-+      0x1904, 0x44f7, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a,\r
-+      0x080c, 0xca6a, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007,\r
-+      0x0003, 0x701f, 0x532c, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120,\r
-+      0x2009, 0x0004, 0x0804, 0x5637, 0x080c, 0x4ada, 0x0904, 0x35a8,\r
-+      0x0804, 0x52c5, 0x81ff, 0x2009, 0x0001, 0x1904, 0x35a5, 0x080c,\r
-+      0x56ee, 0x2009, 0x0007, 0x1904, 0x35a5, 0x080c, 0x6a63, 0x0120,\r
-+      0x2009, 0x0008, 0x0804, 0x35a5, 0x080c, 0x4ada, 0x0904, 0x35a8,\r
-+      0x080c, 0x6a6b, 0x2009, 0x0009, 0x1904, 0x35a5, 0x080c, 0x4aa7,\r
-+      0x2009, 0x0002, 0x0904, 0x35a5, 0x9006, 0xa866, 0xa832, 0xa868,\r
-+      0xc0fd, 0xa86a, 0x7988, 0x9194, 0xff00, 0x918c, 0x00ff, 0x9006,\r
-+      0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, 0xa956, 0x0038, 0x928e,\r
-+      0x0100, 0x1904, 0x35a8, 0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c,\r
-+      0xcccd, 0x2009, 0x0003, 0x0904, 0x35a5, 0x7007, 0x0003, 0x701f,\r
-+      0x5382, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904,\r
-+      0x35a5, 0x0804, 0x3573, 0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec,\r
-+      0x01a0, 0x080c, 0x56ee, 0x1188, 0x2009, 0x0014, 0x0804, 0x35a5,\r
-+      0xd2dc, 0x1568, 0x81ff, 0x2009, 0x0001, 0x1904, 0x35a5, 0x080c,\r
-+      0x56ee, 0x2009, 0x0007, 0x1904, 0x35a5, 0xd2f4, 0x0130, 0x9284,\r
-+      0x5000, 0x080c, 0x56b5, 0x0804, 0x3573, 0xd2fc, 0x0158, 0x080c,\r
-+      0x4ada, 0x0904, 0x35a8, 0x7984, 0x9284, 0x9000, 0x080c, 0x5692,\r
-+      0x0804, 0x3573, 0x080c, 0x4ada, 0x0904, 0x35a8, 0xb804, 0x9084,\r
-+      0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x1904, 0x546b, 0x080c,\r
-+      0x4aa7, 0x2009, 0x0002, 0x0904, 0x546b, 0xa85c, 0x9080, 0x001b,\r
-+      0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c,\r
-+      0x4af0, 0x701f, 0x53dc, 0x0005, 0xa86c, 0x9086, 0x0500, 0x1138,\r
-+      0xa870, 0x9005, 0x1120, 0xa874, 0x9084, 0xff00, 0x0110, 0x1904,\r
-+      0x35a8, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0x4ada,\r
-+      0x1110, 0x0804, 0x35a8, 0x2009, 0x0043, 0x080c, 0xcd35, 0x2009,\r
-+      0x0003, 0x0904, 0x546b, 0x7007, 0x0003, 0x701f, 0x5400, 0x0005,\r
-+      0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x546b, 0x7984,\r
-+      0x7aa8, 0x9284, 0x1000, 0x080c, 0x5692, 0x0804, 0x3573, 0x00c6,\r
-+      0xaab0, 0x9284, 0xc000, 0x0140, 0xd2ec, 0x0168, 0x080c, 0x56ee,\r
-+      0x1150, 0x2009, 0x0014, 0x04f0, 0x2061, 0x1800, 0x080c, 0x56ee,\r
-+      0x2009, 0x0007, 0x15b8, 0xd2f4, 0x0128, 0x9284, 0x5000, 0x080c,\r
-+      0x56b5, 0x0050, 0xd2fc, 0x0178, 0x080c, 0x4ad8, 0x0588, 0xa998,\r
-+      0x9284, 0x9000, 0x080c, 0x5692, 0xa87b, 0x0000, 0xa883, 0x0000,\r
-+      0xa897, 0x4000, 0x0438, 0x080c, 0x4ad8, 0x0510, 0x080c, 0x6a6b,\r
-+      0x2009, 0x0009, 0x11b8, 0xa8c4, 0x9086, 0x0500, 0x11c8, 0xa8c8,\r
-+      0x9005, 0x11b0, 0xa8cc, 0x9084, 0xff00, 0x1190, 0x080c, 0x4ad8,\r
-+      0x1108, 0x0070, 0x2009, 0x004b, 0x080c, 0xcd35, 0x2009, 0x0003,\r
-+      0x0108, 0x0078, 0x0429, 0x19c0, 0xa897, 0x4005, 0xa99a, 0x0010,\r
-+      0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce,\r
-+      0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x35a5, 0x0016,\r
-+      0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5692, 0x001e, 0x1904,\r
-+      0x35a5, 0x0804, 0x3573, 0x00f6, 0x2d78, 0x0011, 0x00fe, 0x0005,\r
-+      0xaab0, 0xd2dc, 0x0150, 0x0016, 0xa998, 0x9284, 0x1000, 0xc0fd,\r
-+      0x080c, 0x5692, 0x001e, 0x9085, 0x0001, 0x0005, 0x81ff, 0x0120,\r
-+      0x2009, 0x0001, 0x0804, 0x35a5, 0x080c, 0x56ee, 0x0120, 0x2009,\r
-+      0x0007, 0x0804, 0x35a5, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c,\r
-+      0x6625, 0x1904, 0x35a8, 0x9186, 0x007f, 0x0138, 0x080c, 0x6a6b,\r
-+      0x0120, 0x2009, 0x0009, 0x0804, 0x35a5, 0x080c, 0x4aa7, 0x1120,\r
-+      0x2009, 0x0002, 0x0804, 0x35a5, 0xa867, 0x0000, 0xa868, 0xc0fd,\r
-+      0xa86a, 0x2001, 0x0100, 0x8007, 0xa80a, 0x080c, 0xca21, 0x1120,\r
-+      0x2009, 0x0003, 0x0804, 0x35a5, 0x7007, 0x0003, 0x701f, 0x54c9,\r
-+      0x0005, 0xa808, 0x8007, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004,\r
-+      0x0804, 0x35a5, 0xa8e0, 0xa866, 0xa810, 0x8007, 0x9084, 0x00ff,\r
-+      0x800c, 0xa814, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0002,\r
-+      0x9108, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,\r
-+      0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4af3,\r
-+      0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, 0x7984,\r
-+      0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023,\r
-+      0x19b3, 0x0040, 0x92c6, 0x0001, 0x1118, 0x7023, 0x19cd, 0x0010,\r
-+      0x0804, 0x35a8, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,\r
-+      0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4af0, 0x701f, 0x5519,\r
-+      0x0005, 0x2001, 0x182e, 0x2003, 0x0001, 0xa85c, 0x9080, 0x0019,\r
-+      0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9,\r
-+      0x0001, 0x4003, 0x0804, 0x3573, 0x080c, 0x4aa7, 0x1120, 0x2009,\r
-+      0x0002, 0x0804, 0x35a5, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff,\r
-+      0x8217, 0x82ff, 0x1118, 0x2099, 0x19b3, 0x0040, 0x92c6, 0x0001,\r
-+      0x1118, 0x2099, 0x19cd, 0x0010, 0x0804, 0x35a8, 0xa85c, 0x9080,\r
-+      0x0019, 0x20a0, 0xa860, 0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001,\r
-+      0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c,\r
-+      0x9080, 0x0019, 0xaf60, 0x0804, 0x4af3, 0x7884, 0x908a, 0x1000,\r
-+      0x1a04, 0x35a8, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b,\r
-+      0x9108, 0x00c6, 0x2061, 0x1a03, 0x6142, 0x00ce, 0x012e, 0x0804,\r
-+      0x3573, 0x00c6, 0x080c, 0x74e9, 0x1160, 0x080c, 0x77ed, 0x080c,\r
-+      0x6029, 0x9085, 0x0001, 0x080c, 0x7530, 0x080c, 0x741a, 0x080c,\r
-+      0x0d7d, 0x2061, 0x1800, 0x6030, 0xc09d, 0x6032, 0x080c, 0x5ee4,\r
-+      0x00ce, 0x0005, 0x00c6, 0x2001, 0x1800, 0x2004, 0x908e, 0x0000,\r
-+      0x0904, 0x35a5, 0x7884, 0x9005, 0x0188, 0x7888, 0x2061, 0x199c,\r
-+      0x2c0c, 0x2062, 0x080c, 0x29d8, 0x01a0, 0x080c, 0x29e0, 0x0188,\r
-+      0x080c, 0x29e8, 0x0170, 0x2162, 0x0804, 0x35a8, 0x2061, 0x0100,\r
-+      0x6038, 0x9086, 0x0007, 0x1118, 0x2009, 0x0001, 0x0010, 0x2009,\r
-+      0x0000, 0x7884, 0x9086, 0x0002, 0x1588, 0x2061, 0x0100, 0x6028,\r
-+      0xc09c, 0x602a, 0x080c, 0xa896, 0x0026, 0x2011, 0x0003, 0x080c,\r
-+      0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x002e, 0x080c, 0xa098,\r
-+      0x0036, 0x901e, 0x080c, 0xa118, 0x003e, 0x080c, 0xa8b2, 0x60e3,\r
-+      0x0000, 0x080c, 0xe702, 0x080c, 0xe71d, 0x9085, 0x0001, 0x080c,\r
-+      0x7530, 0x9006, 0x080c, 0x2a0a, 0x2001, 0x1800, 0x2003, 0x0004,\r
-+      0x0026, 0x2011, 0x0008, 0x080c, 0x2a44, 0x002e, 0x00ce, 0x0804,\r
-+      0x3573, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, 0x080c,\r
-+      0x56ee, 0x0120, 0x2009, 0x0007, 0x0804, 0x35a5, 0x7984, 0x7ea8,\r
-+      0x96b4, 0x00ff, 0x080c, 0x6625, 0x1904, 0x35a8, 0x9186, 0x007f,\r
-+      0x0138, 0x080c, 0x6a6b, 0x0120, 0x2009, 0x0009, 0x0804, 0x35a5,\r
-+      0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, 0xa867,\r
-+      0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xca24, 0x1120, 0x2009,\r
-+      0x0003, 0x0804, 0x35a5, 0x7007, 0x0003, 0x701f, 0x5620, 0x0005,\r
-+      0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x35a5,\r
-+      0xa8e0, 0xa866, 0xa834, 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c,\r
-+      0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804, 0x4af3, 0xa898,\r
-+      0x9086, 0x000d, 0x1904, 0x35a5, 0x2021, 0x4005, 0x0126, 0x2091,\r
-+      0x8000, 0x0e04, 0x5644, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486,\r
-+      0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7883,\r
-+      0x4005, 0xa998, 0x7986, 0xa9a4, 0x799a, 0xa9a8, 0x799e, 0x080c,\r
-+      0x4ae3, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,\r
-+      0x11d6, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e,\r
-+      0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0x1a03, 0x7984,\r
-+      0x6152, 0x614e, 0x6057, 0x0000, 0x604b, 0x0009, 0x7898, 0x606a,\r
-+      0x789c, 0x6066, 0x7888, 0x6062, 0x788c, 0x605e, 0x2001, 0x1a11,\r
-+      0x2044, 0x2001, 0x1a18, 0xa076, 0xa060, 0xa072, 0xa07b, 0x0001,\r
-+      0xa07f, 0x0002, 0xa06b, 0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e,\r
-+      0x0804, 0x3573, 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4,\r
-+      0xc000, 0x0128, 0x0006, 0x080c, 0xc885, 0x000e, 0x1198, 0xd0e4,\r
-+      0x0160, 0x9180, 0x1000, 0x2004, 0x905d, 0x0160, 0x080c, 0x6043,\r
-+      0x080c, 0xab57, 0x0110, 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be,\r
-+      0x012e, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000,\r
-+      0x0156, 0x2010, 0x900e, 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000,\r
-+      0x2004, 0x9005, 0x0180, 0x9186, 0x007e, 0x0168, 0x9186, 0x007f,\r
-+      0x0150, 0x9186, 0x0080, 0x0138, 0x9186, 0x00ff, 0x0120, 0x0026,\r
-+      0x2200, 0x0801, 0x002e, 0x001e, 0x8108, 0x1f04, 0x56bd, 0x015e,\r
-+      0x012e, 0x0005, 0x2001, 0x1848, 0x2004, 0x0005, 0x2001, 0x1867,\r
-+      0x2004, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e,\r
-+      0x0005, 0x2001, 0x180e, 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800,\r
-+      0x2004, 0x9086, 0x0003, 0x0005, 0x0016, 0x00e6, 0x2071, 0x189e,\r
-+      0x7108, 0x910d, 0x710a, 0x00ee, 0x001e, 0x0005, 0x79a4, 0x9182,\r
-+      0x0081, 0x1a04, 0x35a8, 0x810c, 0x0016, 0x080c, 0x4aa7, 0x080c,\r
-+      0x0f42, 0x2100, 0x2238, 0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e,\r
-+      0x080c, 0x4af0, 0x701f, 0x5715, 0x0005, 0x2079, 0x0000, 0x7d94,\r
-+      0x7c98, 0x7ba8, 0x7aac, 0x79a4, 0x810c, 0x2061, 0x18b8, 0x2c44,\r
-+      0xa770, 0xa074, 0x2071, 0x189e, 0x080c, 0x4af3, 0x701f, 0x5729,\r
-+      0x0005, 0x2061, 0x18b8, 0x2c44, 0x0016, 0x0026, 0xa270, 0xa174,\r
-+      0x080c, 0x0f4a, 0x002e, 0x001e, 0x080c, 0x0ff7, 0x9006, 0xa802,\r
-+      0xa806, 0x0804, 0x3573, 0x0126, 0x0156, 0x0136, 0x0146, 0x01c6,\r
-+      0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100, 0x2069,\r
-+      0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084, 0x0118,\r
-+      0x080c, 0x58e4, 0x0068, 0xd08c, 0x0118, 0x080c, 0x57ed, 0x0040,\r
-+      0xd094, 0x0118, 0x080c, 0x57bd, 0x0018, 0xd09c, 0x0108, 0x0099,\r
-+      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e,\r
-+      0x015e, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d,\r
-+      0x612a, 0x001e, 0x0c68, 0x0006, 0x7098, 0x9005, 0x000e, 0x0120,\r
-+      0x709b, 0x0000, 0x7093, 0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150,\r
-+      0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043,\r
-+      0x0010, 0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178, 0x7138,\r
-+      0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294, 0x0010,\r
-+      0x0128, 0x2009, 0x00f7, 0x080c, 0x5fa5, 0x00f0, 0x6040, 0x9084,\r
-+      0x0010, 0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x7087, 0x0000,\r
-+      0x70a3, 0x0001, 0x70c7, 0x0000, 0x70df, 0x0000, 0x2009, 0x1d80,\r
-+      0x200b, 0x0000, 0x7097, 0x0000, 0x708b, 0x000f, 0x2009, 0x000f,\r
-+      0x2011, 0x5e87, 0x080c, 0x8708, 0x0005, 0x2001, 0x1869, 0x2004,\r
-+      0xd08c, 0x0110, 0x705f, 0xffff, 0x7088, 0x9005, 0x1528, 0x2011,\r
-+      0x5e87, 0x080c, 0x863e, 0x6040, 0x9094, 0x0010, 0x9285, 0x0020,\r
-+      0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x57d3,\r
-+      0x6242, 0x709b, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285, 0x0080,\r
-+      0x6042, 0x6242, 0x0048, 0x6242, 0x709b, 0x0000, 0x708f, 0x0000,\r
-+      0x9006, 0x080c, 0x602e, 0x0000, 0x0005, 0x708c, 0x908a, 0x0003,\r
-+      0x1a0c, 0x0d7d, 0x000b, 0x0005, 0x57f7, 0x5848, 0x58e3, 0x00f6,\r
-+      0x0016, 0x6900, 0x918c, 0x0800, 0x708f, 0x0001, 0x2001, 0x015d,\r
-+      0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084,\r
-+      0x00fc, 0x0120, 0x1f04, 0x5806, 0x080c, 0x0d7d, 0x68a0, 0x68a2,\r
-+      0x689c, 0x689e, 0x6898, 0x689a, 0xa001, 0x918d, 0x1600, 0x6902,\r
-+      0x001e, 0x6837, 0x0020, 0x080c, 0x600a, 0x2079, 0x1d00, 0x7833,\r
-+      0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,\r
-+      0x0001, 0x20a1, 0x1d0e, 0x20a9, 0x0004, 0x4003, 0x080c, 0xa690,\r
-+      0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, 0x20a1, 0x0240,\r
-+      0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c,\r
-+      0x5eb8, 0x00fe, 0x9006, 0x7092, 0x6043, 0x0008, 0x6042, 0x0005,\r
-+      0x00f6, 0x7090, 0x7093, 0x0000, 0x9025, 0x0904, 0x58c0, 0x6020,\r
-+      0xd0b4, 0x1904, 0x58be, 0x71a0, 0x81ff, 0x0904, 0x58ac, 0x9486,\r
-+      0x000c, 0x1904, 0x58b9, 0x9480, 0x0018, 0x8004, 0x20a8, 0x080c,\r
-+      0x6003, 0x2011, 0x0260, 0x2019, 0x1d00, 0x220c, 0x2304, 0x9106,\r
-+      0x11e8, 0x8210, 0x8318, 0x1f04, 0x5865, 0x6043, 0x0004, 0x2061,\r
-+      0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043,\r
-+      0x0006, 0x708f, 0x0002, 0x709b, 0x0002, 0x2009, 0x07d0, 0x2011,\r
-+      0x5e8e, 0x080c, 0x8708, 0x080c, 0x600a, 0x04c0, 0x080c, 0x6003,\r
-+      0x2079, 0x0260, 0x7930, 0x918e, 0x1101, 0x1558, 0x7834, 0x9005,\r
-+      0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005, 0x0190,\r
-+      0x080c, 0x6003, 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9, 0x0004,\r
-+      0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04,\r
-+      0x58a0, 0x0078, 0x70a3, 0x0000, 0x080c, 0x6003, 0x20e1, 0x0000,\r
-+      0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, 0x1d00, 0x20a9, 0x0014,\r
-+      0x4003, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe, 0x0005,\r
-+      0x6040, 0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, 0x080c,\r
-+      0xa690, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, 0x20a1,\r
-+      0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011, 0x19f4,\r
-+      0x2013, 0x0000, 0x7093, 0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575,\r
-+      0x080c, 0x9e25, 0x08d8, 0x0005, 0x7098, 0x908a, 0x001d, 0x1a0c,\r
-+      0x0d7d, 0x000b, 0x0005, 0x5915, 0x5928, 0x5951, 0x5971, 0x5997,\r
-+      0x59c6, 0x59ec, 0x5a24, 0x5a4a, 0x5a78, 0x5ab3, 0x5aeb, 0x5b09,\r
-+      0x5b34, 0x5b56, 0x5b71, 0x5b7b, 0x5baf, 0x5bd5, 0x5c04, 0x5c2a,\r
-+      0x5c62, 0x5ca6, 0x5ce3, 0x5d04, 0x5d5d, 0x5d7f, 0x5dad, 0x5dad,\r
-+      0x00c6, 0x2061, 0x1800, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004,\r
-+      0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140, 0x605b,\r
-+      0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002, 0x709b,\r
-+      0x0001, 0x2009, 0x07d0, 0x2011, 0x5e8e, 0x080c, 0x8708, 0x0005,\r
-+      0x00f6, 0x7090, 0x9086, 0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4,\r
-+      0x11f0, 0x080c, 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102,\r
-+      0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c4,\r
-+      0x9005, 0x1110, 0x70c7, 0x0001, 0x2011, 0x5e8e, 0x080c, 0x863e,\r
-+      0x709b, 0x0010, 0x080c, 0x5b7b, 0x0010, 0x7093, 0x0000, 0x00fe,\r
-+      0x0005, 0x00f6, 0x709b, 0x0003, 0x6043, 0x0004, 0x2011, 0x5e8e,\r
-+      0x080c, 0x863e, 0x080c, 0x5f87, 0x2079, 0x0240, 0x7833, 0x1102,\r
-+      0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b, 0x0000,\r
-+      0x8108, 0x1f04, 0x5966, 0x60c3, 0x0014, 0x080c, 0x5eb8, 0x00fe,\r
-+      0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e8e, 0x080c,\r
-+      0x863e, 0x9086, 0x0014, 0x11b8, 0x080c, 0x6003, 0x2079, 0x0260,\r
-+      0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38,\r
-+      0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b,\r
-+      0x0004, 0x0029, 0x0010, 0x080c, 0x5fdf, 0x00fe, 0x0005, 0x00f6,\r
-+      0x709b, 0x0005, 0x080c, 0x5f87, 0x2079, 0x0240, 0x7833, 0x1103,\r
-+      0x7837, 0x0000, 0x080c, 0x6003, 0x080c, 0x5fe6, 0x1170, 0x7084,\r
-+      0x9005, 0x1158, 0x715c, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008,\r
-+      0x080c, 0x5e3b, 0x0168, 0x080c, 0x5fbc, 0x20a9, 0x0008, 0x20e1,\r
-+      0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,\r
-+      0x60c3, 0x0014, 0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090,\r
-+      0x9005, 0x0500, 0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0014,\r
-+      0x11b8, 0x080c, 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103,\r
-+      0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4,\r
-+      0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0006, 0x0029, 0x0010,\r
-+      0x080c, 0x5fdf, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0007, 0x080c,\r
-+      0x5f87, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c,\r
-+      0x6003, 0x080c, 0x5fe6, 0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164,\r
-+      0x9186, 0xffff, 0x0180, 0x9180, 0x3374, 0x200d, 0x918c, 0xff00,\r
-+      0x810f, 0x2011, 0x0008, 0x080c, 0x5e3b, 0x0180, 0x080c, 0x4fe4,\r
-+      0x0110, 0x080c, 0x2664, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099,\r
-+      0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,\r
-+      0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500,\r
-+      0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0014, 0x11b8, 0x080c,\r
-+      0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834,\r
-+      0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110,\r
-+      0x70c7, 0x0001, 0x709b, 0x0008, 0x0029, 0x0010, 0x080c, 0x5fdf,\r
-+      0x00fe, 0x0005, 0x00f6, 0x709b, 0x0009, 0x080c, 0x5f87, 0x2079,\r
-+      0x0240, 0x7833, 0x1105, 0x7837, 0x0100, 0x080c, 0x5fe6, 0x1150,\r
-+      0x7084, 0x9005, 0x1138, 0x080c, 0x5dae, 0x1188, 0x9085, 0x0001,\r
-+      0x080c, 0x2664, 0x20a9, 0x0008, 0x080c, 0x6003, 0x20e1, 0x0000,\r
-+      0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,\r
-+      0x0014, 0x080c, 0x5eb8, 0x0010, 0x080c, 0x5908, 0x00fe, 0x0005,\r
-+      0x00f6, 0x7090, 0x9005, 0x05a8, 0x2011, 0x5e8e, 0x080c, 0x863e,\r
-+      0x9086, 0x0014, 0x1560, 0x080c, 0x6003, 0x2079, 0x0260, 0x7a30,\r
-+      0x9296, 0x1105, 0x1520, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100,\r
-+      0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110,\r
-+      0x70c7, 0x0001, 0x709b, 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178,\r
-+      0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001,\r
-+      0x7097, 0x0000, 0x709b, 0x000e, 0x080c, 0x5b56, 0x0010, 0x080c,\r
-+      0x5fdf, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x000b, 0x2011, 0x1d0e,\r
-+      0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304,\r
-+      0x080c, 0x5f87, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000,\r
-+      0x080c, 0x5fe6, 0x0118, 0x2013, 0x0000, 0x0020, 0x7060, 0x9085,\r
-+      0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, 0x1d0e,\r
-+      0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000,\r
-+      0x6812, 0x2009, 0x0240, 0x1f04, 0x5ad8, 0x60c3, 0x0084, 0x080c,\r
-+      0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01c0, 0x2011,\r
-+      0x5e8e, 0x080c, 0x863e, 0x9086, 0x0084, 0x1178, 0x080c, 0x6003,\r
-+      0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005,\r
-+      0x1120, 0x709b, 0x000c, 0x0029, 0x0010, 0x080c, 0x5fdf, 0x00fe,\r
-+      0x0005, 0x00f6, 0x709b, 0x000d, 0x080c, 0x5f87, 0x2079, 0x0240,\r
-+      0x7833, 0x1107, 0x7837, 0x0000, 0x080c, 0x6003, 0x20a9, 0x0040,\r
-+      0x2011, 0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108, 0x9186,\r
-+      0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814,\r
-+      0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5b1c, 0x60c3, 0x0084,\r
-+      0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0,\r
-+      0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0084, 0x1198, 0x080c,\r
-+      0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834,\r
-+      0x9005, 0x1140, 0x7097, 0x0001, 0x080c, 0x5f59, 0x709b, 0x000e,\r
-+      0x0029, 0x0010, 0x080c, 0x5fdf, 0x00fe, 0x0005, 0x918d, 0x0001,\r
-+      0x080c, 0x602e, 0x709b, 0x000f, 0x7093, 0x0000, 0x2061, 0x0140,\r
-+      0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005,\r
-+      0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x5e8e, 0x080c, 0x8632,\r
-+      0x0005, 0x7090, 0x9005, 0x0130, 0x2011, 0x5e8e, 0x080c, 0x863e,\r
-+      0x709b, 0x0000, 0x0005, 0x709b, 0x0011, 0x080c, 0xa690, 0x080c,\r
-+      0x6003, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1,\r
-+      0x0240, 0x7490, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8,\r
-+      0x8004, 0x20a8, 0x4003, 0x080c, 0x5fe6, 0x11a0, 0x717c, 0x81ff,\r
-+      0x0188, 0x900e, 0x7080, 0x9084, 0x00ff, 0x0160, 0x080c, 0x25fb,\r
-+      0x9186, 0x007e, 0x0138, 0x9186, 0x0080, 0x0120, 0x2011, 0x0008,\r
-+      0x080c, 0x5e3b, 0x60c3, 0x0014, 0x080c, 0x5eb8, 0x0005, 0x00f6,\r
-+      0x7090, 0x9005, 0x0500, 0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086,\r
-+      0x0014, 0x11b8, 0x080c, 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296,\r
-+      0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,\r
-+      0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0012, 0x0029,\r
-+      0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0013,\r
-+      0x080c, 0x5f95, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000,\r
-+      0x080c, 0x6003, 0x080c, 0x5fe6, 0x1170, 0x7084, 0x9005, 0x1158,\r
-+      0x715c, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5e3b,\r
-+      0x0168, 0x080c, 0x5fbc, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099,\r
-+      0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,\r
-+      0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500,\r
-+      0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0014, 0x11b8, 0x080c,\r
-+      0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834,\r
-+      0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110,\r
-+      0x70c7, 0x0001, 0x709b, 0x0014, 0x0029, 0x0010, 0x7093, 0x0000,\r
-+      0x00fe, 0x0005, 0x00f6, 0x709b, 0x0015, 0x080c, 0x5f95, 0x2079,\r
-+      0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x6003, 0x080c,\r
-+      0x5fe6, 0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164, 0x9186, 0xffff,\r
-+      0x0180, 0x9180, 0x3374, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011,\r
-+      0x0008, 0x080c, 0x5e3b, 0x0180, 0x080c, 0x4fe4, 0x0110, 0x080c,\r
-+      0x2664, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,\r
-+      0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eb8,\r
-+      0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x05f0, 0x2011, 0x5e8e,\r
-+      0x080c, 0x863e, 0x9086, 0x0014, 0x15a8, 0x080c, 0x6003, 0x2079,\r
-+      0x0260, 0x7a30, 0x9296, 0x1105, 0x1568, 0x7834, 0x9084, 0x0100,\r
-+      0x2011, 0x0100, 0x921e, 0x1168, 0x9085, 0x0001, 0x080c, 0x602e,\r
-+      0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001,\r
-+      0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005,\r
-+      0x1110, 0x70c7, 0x0001, 0x9085, 0x0001, 0x080c, 0x602e, 0x7097,\r
-+      0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70df, 0x0008, 0x709b, 0x0016,\r
-+      0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x080c, 0xa690,\r
-+      0x080c, 0x6003, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000,\r
-+      0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d, 0x2204,\r
-+      0x9084, 0x0100, 0x2011, 0x024d, 0x2012, 0x2011, 0x026e, 0x709b,\r
-+      0x0017, 0x080c, 0x5fe6, 0x1150, 0x7084, 0x9005, 0x1138, 0x080c,\r
-+      0x5dae, 0x1188, 0x9085, 0x0001, 0x080c, 0x2664, 0x20a9, 0x0008,\r
-+      0x080c, 0x6003, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,\r
-+      0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eb8, 0x0010,\r
-+      0x080c, 0x5908, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01d8, 0x2011,\r
-+      0x5e8e, 0x080c, 0x863e, 0x9086, 0x0084, 0x1190, 0x080c, 0x6003,\r
-+      0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834, 0x9005,\r
-+      0x1138, 0x9006, 0x080c, 0x602e, 0x709b, 0x0018, 0x0029, 0x0010,\r
-+      0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0019, 0x080c,\r
-+      0x5f95, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c,\r
-+      0x6003, 0x2009, 0x026e, 0x2039, 0x1d0e, 0x20a9, 0x0040, 0x213e,\r
-+      0x8738, 0x8108, 0x9186, 0x0280, 0x1128, 0x6814, 0x8000, 0x6816,\r
-+      0x2009, 0x0260, 0x1f04, 0x5d17, 0x2039, 0x1d0e, 0x080c, 0x5fe6,\r
-+      0x11e8, 0x2728, 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018,\r
-+      0x9294, 0x00ff, 0x8007, 0x9205, 0x202a, 0x7060, 0x2310, 0x8214,\r
-+      0x92a0, 0x1d0e, 0x2414, 0x938c, 0x0001, 0x0118, 0x9294, 0xff00,\r
-+      0x0018, 0x9294, 0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9, 0x0040,\r
-+      0x2009, 0x024e, 0x270e, 0x8738, 0x8108, 0x9186, 0x0260, 0x1128,\r
-+      0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x5d4a, 0x60c3,\r
-+      0x0084, 0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005,\r
-+      0x01e0, 0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0084, 0x1198,\r
-+      0x080c, 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158,\r
-+      0x7834, 0x9005, 0x1140, 0x7097, 0x0001, 0x080c, 0x5f59, 0x709b,\r
-+      0x001a, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x9085,\r
-+      0x0001, 0x080c, 0x602e, 0x709b, 0x001b, 0x080c, 0xa690, 0x080c,\r
-+      0x6003, 0x2011, 0x0260, 0x2009, 0x0240, 0x7490, 0x9480, 0x0018,\r
-+      0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e, 0x8210,\r
-+      0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009,\r
-+      0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5d96,\r
-+      0x60c3, 0x0084, 0x080c, 0x5eb8, 0x0005, 0x0005, 0x0086, 0x0096,\r
-+      0x2029, 0x1848, 0x252c, 0x20a9, 0x0008, 0x2041, 0x1d0e, 0x20e9,\r
-+      0x0001, 0x28a0, 0x080c, 0x6003, 0x20e1, 0x0000, 0x2099, 0x026e,\r
-+      0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016,\r
-+      0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110,\r
-+      0x8210, 0x0008, 0x8211, 0x1f04, 0x5dc8, 0x0804, 0x5e37, 0x82ff,\r
-+      0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6,\r
-+      0x3fff, 0x0904, 0x5e37, 0x918d, 0xc000, 0x20a9, 0x0010, 0x2019,\r
-+      0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110,\r
-+      0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008,\r
-+      0x8318, 0x1f04, 0x5dee, 0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426,\r
-+      0x8425, 0x1f04, 0x5e00, 0x2328, 0x8529, 0x92be, 0x0007, 0x0158,\r
-+      0x0006, 0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8,\r
-+      0x0010, 0x1f04, 0x5e0f, 0x755e, 0x95c8, 0x3374, 0x292d, 0x95ac,\r
-+      0x00ff, 0x7582, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2644,\r
-+      0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405, 0x201a,\r
-+      0x7087, 0x0001, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1, 0x0001,\r
-+      0x2898, 0x20a9, 0x0008, 0x4003, 0x9085, 0x0001, 0x0008, 0x9006,\r
-+      0x009e, 0x008e, 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136, 0x0146,\r
-+      0x22a8, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x2011,\r
-+      0x024e, 0x22a0, 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce, 0x015e,\r
-+      0x2118, 0x9026, 0x2001, 0x0007, 0x939a, 0x0010, 0x0218, 0x8420,\r
-+      0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010, 0x8421,\r
-+      0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8,\r
-+      0x9238, 0x2029, 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8, 0x9405,\r
-+      0x203a, 0x715e, 0x91a0, 0x3374, 0x242d, 0x95ac, 0x00ff, 0x7582,\r
-+      0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2644, 0x001e, 0x60e7,\r
-+      0x0000, 0x65ea, 0x7087, 0x0001, 0x9084, 0x0000, 0x0005, 0x00e6,\r
-+      0x2071, 0x1800, 0x708b, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6,\r
-+      0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x5f48, 0x080c, 0x9e32,\r
-+      0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x0126, 0x2091,\r
-+      0x8000, 0x2071, 0x1826, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016,\r
-+      0x2009, 0x00f7, 0x080c, 0x5fa5, 0x001e, 0x9094, 0x0010, 0x9285,\r
-+      0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x2979, 0x0228, 0x2011, 0x0101,\r
-+      0x2204, 0xc0c5, 0x2012, 0x2011, 0x19f4, 0x2013, 0x0000, 0x7093,\r
-+      0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x9e25,\r
-+      0x6144, 0xd184, 0x0120, 0x7198, 0x918d, 0x2000, 0x0018, 0x718c,\r
-+      0x918d, 0x1000, 0x2011, 0x1999, 0x2112, 0x2009, 0x07d0, 0x2011,\r
-+      0x5e8e, 0x080c, 0x8708, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0xa896, 0x080c, 0xab5e, 0x080c, 0xa8b2,\r
-+      0x2009, 0x00f7, 0x080c, 0x5fa5, 0x2061, 0x1a03, 0x900e, 0x611a,\r
-+      0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001, 0x2061,\r
-+      0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1999, 0x200b,\r
-+      0x0000, 0x2009, 0x002d, 0x2011, 0x5f14, 0x080c, 0x8632, 0x012e,\r
-+      0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091,\r
-+      0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x9e32, 0x2071, 0x0140,\r
-+      0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x080c, 0x74f1,\r
-+      0x0188, 0x080c, 0x750c, 0x1170, 0x080c, 0x77f7, 0x0016, 0x080c,\r
-+      0x2713, 0x2001, 0x196d, 0x2102, 0x001e, 0x080c, 0x77f2, 0x080c,\r
-+      0x741a, 0x0050, 0x2009, 0x0001, 0x080c, 0x29f6, 0x2001, 0x0001,\r
-+      0x080c, 0x25a0, 0x080c, 0x5ee4, 0x012e, 0x000e, 0x00ee, 0x0005,\r
-+      0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011,\r
-+      0x8017, 0x2001, 0x1999, 0x201c, 0x080c, 0x4b07, 0x003e, 0x002e,\r
-+      0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1d80, 0x080c,\r
-+      0x6003, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020,\r
-+      0x080c, 0x5ffd, 0x2099, 0x0260, 0x20a1, 0x1d92, 0x0051, 0x20a9,\r
-+      0x000e, 0x080c, 0x6000, 0x2099, 0x0260, 0x20a1, 0x1db2, 0x0009,\r
-+      0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007, 0x2012,\r
-+      0x8108, 0x8210, 0x1f04, 0x5f7d, 0x002e, 0x001e, 0x0005, 0x080c,\r
-+      0xa690, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, 0x20a1,\r
-+      0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0xa690, 0x080c,\r
-+      0x6003, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1,\r
-+      0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061,\r
-+      0x0100, 0x810f, 0x2001, 0x1834, 0x2004, 0x9005, 0x1138, 0x2001,\r
-+      0x1818, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7,\r
-+      0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c, 0x6a67,\r
-+      0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xe2c9, 0x2001,\r
-+      0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e, 0x080c,\r
-+      0x31a6, 0x080c, 0xcf52, 0x0140, 0x0036, 0x2019, 0xffff, 0x2021,\r
-+      0x0007, 0x080c, 0x4cbe, 0x003e, 0x004e, 0x001e, 0x0005, 0x080c,\r
-+      0x5ee4, 0x709b, 0x0000, 0x7093, 0x0000, 0x0005, 0x0006, 0x2001,\r
-+      0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006, 0x0016,\r
-+      0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0x918d, 0x0006,\r
-+      0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009, 0x0001, 0x0020,\r
-+      0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084, 0xffc0, 0x910d,\r
-+      0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6, 0x9006, 0x20a9,\r
-+      0x0080, 0x20e9, 0x0001, 0x20a1, 0x1d00, 0x4004, 0x2079, 0x1d00,\r
-+      0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138,\r
-+      0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e, 0x00fe,\r
-+      0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001, 0x19a6,\r
-+      0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005, 0x0156,\r
-+      0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04,\r
-+      0x603d, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146,\r
-+      0x2069, 0x1847, 0x9006, 0xb802, 0xb8d6, 0xb807, 0x0707, 0xb80a,\r
-+      0xb80e, 0xb812, 0x9198, 0x3374, 0x231d, 0x939c, 0x00ff, 0xbb16,\r
-+      0x0016, 0x0026, 0xb886, 0x080c, 0xab57, 0x1120, 0x9192, 0x007e,\r
-+      0x1208, 0xbb86, 0x20a9, 0x0004, 0xb8c4, 0x20e8, 0xb9c8, 0x9198,\r
-+      0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198, 0x000a,\r
-+      0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb8ce, 0xb8d2,\r
-+      0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100, 0xb872, 0xb876,\r
-+      0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896, 0xb89a, 0xb89e,\r
-+      0xb8be, 0xb9a2, 0x0096, 0xb8a4, 0x904d, 0x0110, 0x080c, 0x106c,\r
-+      0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a, 0x6810, 0xb83a, 0x680c,\r
-+      0xb846, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0198, 0x00c6, 0x2060,\r
-+      0x9c82, 0x1ddc, 0x0a0c, 0x0d7d, 0x2001, 0x181a, 0x2004, 0x9c02,\r
-+      0x1a0c, 0x0d7d, 0x080c, 0x8b90, 0x00ce, 0x090c, 0x8f34, 0xb8af,\r
-+      0x0000, 0x6814, 0x9084, 0x00ff, 0xb842, 0x014e, 0x013e, 0x015e,\r
-+      0x003e, 0x00de, 0x0005, 0x0126, 0x2091, 0x8000, 0xa974, 0xae78,\r
-+      0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x6119, 0x9182, 0x0800,\r
-+      0x1a04, 0x611d, 0x2001, 0x180c, 0x2004, 0x9084, 0x0003, 0x1904,\r
-+      0x6123, 0x9188, 0x1000, 0x2104, 0x905d, 0x0198, 0xb804, 0x9084,\r
-+      0x00ff, 0x908e, 0x0006, 0x1188, 0xb8a4, 0x900d, 0x1904, 0x6135,\r
-+      0x080c, 0x64ee, 0x9006, 0x012e, 0x0005, 0x2001, 0x0005, 0x900e,\r
-+      0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006, 0x1290,\r
-+      0x080c, 0xab57, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900,\r
-+      0xd1fc, 0x0d10, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408, 0x2001,\r
-+      0x0028, 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001,\r
-+      0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040, 0x2001,\r
-+      0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048, 0x900e,\r
-+      0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e,\r
-+      0x9005, 0x012e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd084, 0x19d0,\r
-+      0x9188, 0x1000, 0x2104, 0x9065, 0x09a8, 0x080c, 0x6a6b, 0x1990,\r
-+      0xb800, 0xd0bc, 0x0978, 0x0804, 0x60dc, 0x080c, 0x6890, 0x0904,\r
-+      0x60e5, 0x0804, 0x60e0, 0x00e6, 0x2071, 0x19e7, 0x7004, 0x9086,\r
-+      0x0002, 0x1128, 0x7030, 0x9080, 0x0004, 0x2004, 0x9b06, 0x00ee,\r
-+      0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa874, 0x908e,\r
-+      0x00ff, 0x1120, 0x2001, 0x196b, 0x205c, 0x0060, 0xa974, 0x9182,\r
-+      0x0800, 0x1690, 0x9188, 0x1000, 0x2104, 0x905d, 0x01d0, 0x080c,\r
-+      0x6a0b, 0x11d0, 0x080c, 0xab97, 0x0570, 0x2b00, 0x6012, 0x2900,\r
-+      0x6016, 0x6023, 0x0009, 0x602b, 0x0000, 0xa874, 0x908e, 0x00ff,\r
-+      0x1110, 0x602b, 0x8000, 0x2009, 0x0043, 0x080c, 0xac8c, 0x9006,\r
-+      0x00b0, 0x2001, 0x0028, 0x0090, 0x2009, 0x180c, 0x210c, 0xd18c,\r
-+      0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004,\r
-+      0x0010, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0x9005, 0x012e,\r
-+      0x00ee, 0x00be, 0x0005, 0x2001, 0x002c, 0x0cc0, 0x00b6, 0x00e6,\r
-+      0x0126, 0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x6211,\r
-+      0x9188, 0x1000, 0x2104, 0x905d, 0x0904, 0x61e9, 0xb8a0, 0x9086,\r
-+      0x007f, 0x0178, 0x080c, 0x6a73, 0x0160, 0xa994, 0x81ff, 0x0130,\r
-+      0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x6a6b,\r
-+      0x1598, 0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060,\r
-+      0x0026, 0x2010, 0x080c, 0xc826, 0x002e, 0x1120, 0x2001, 0x0008,\r
-+      0x0804, 0x6213, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008,\r
-+      0x0804, 0x6213, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058,\r
-+      0x080c, 0xab97, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b,\r
-+      0xffff, 0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0xac8c, 0x9006,\r
-+      0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c,\r
-+      0xab57, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc,\r
-+      0x0900, 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028,\r
-+      0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,\r
-+      0x0050, 0xd184, 0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029,\r
-+      0x0010, 0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005,\r
-+      0x2001, 0x002c, 0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000,\r
-+      0xa8e0, 0x9005, 0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8,\r
-+      0x9005, 0x1518, 0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974, 0x2079,\r
-+      0x1800, 0x9182, 0x0800, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130,\r
-+      0xaa98, 0xab94, 0xa878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c,\r
-+      0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004,\r
-+      0x0010, 0x2001, 0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e,\r
-+      0x0018, 0x2001, 0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e,\r
-+      0x00be, 0x00fe, 0x0005, 0x62a8, 0x6263, 0x627a, 0x62a8, 0x62a8,\r
-+      0x62a8, 0x62a8, 0x62a8, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c,\r
-+      0x65c4, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x62b0, 0xb814,\r
-+      0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x49ba,\r
-+      0x0150, 0x04b0, 0x080c, 0x6625, 0x1598, 0xb810, 0x9306, 0x1580,\r
-+      0xb814, 0x9206, 0x1568, 0x080c, 0xab97, 0x0530, 0x2b00, 0x6012,\r
-+      0x080c, 0xcccc, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a,\r
-+      0xa878, 0x9086, 0x0001, 0x1170, 0x080c, 0x31e7, 0x9006, 0x080c,\r
-+      0x6561, 0x2001, 0x0002, 0x080c, 0x6575, 0x2001, 0x0200, 0xb86e,\r
-+      0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0xac8c, 0x9006, 0x0068,\r
-+      0x2001, 0x0001, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018,\r
-+      0x2001, 0x0028, 0x900e, 0x9005, 0x0000, 0x012e, 0x00be, 0x00fe,\r
-+      0x0005, 0x00b6, 0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa894,\r
-+      0x90c6, 0x0015, 0x0904, 0x6497, 0x90c6, 0x0056, 0x0904, 0x649b,\r
-+      0x90c6, 0x0066, 0x0904, 0x649f, 0x90c6, 0x0067, 0x0904, 0x64a3,\r
-+      0x90c6, 0x0068, 0x0904, 0x64a7, 0x90c6, 0x0071, 0x0904, 0x64ab,\r
-+      0x90c6, 0x0074, 0x0904, 0x64af, 0x90c6, 0x007c, 0x0904, 0x64b3,\r
-+      0x90c6, 0x007e, 0x0904, 0x64b7, 0x90c6, 0x0037, 0x0904, 0x64bb,\r
-+      0x9016, 0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x6492,\r
-+      0x9182, 0x0800, 0x1a04, 0x6492, 0x080c, 0x6625, 0x1198, 0xb804,\r
-+      0x9084, 0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f,\r
-+      0x0148, 0x080c, 0xab57, 0x1904, 0x647b, 0xb8a0, 0x9084, 0xff80,\r
-+      0x1904, 0x647b, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e,\r
-+      0x0904, 0x63db, 0x90c6, 0x0064, 0x0904, 0x6404, 0x2008, 0x0804,\r
-+      0x639d, 0xa998, 0xa8b0, 0x2040, 0x080c, 0xab57, 0x1120, 0x9182,\r
-+      0x007f, 0x0a04, 0x639d, 0x9186, 0x00ff, 0x0904, 0x639d, 0x9182,\r
-+      0x0800, 0x1a04, 0x639d, 0xaaa0, 0xab9c, 0x787c, 0x9306, 0x1188,\r
-+      0x7880, 0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804,\r
-+      0x639d, 0x99cc, 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804,\r
-+      0x639d, 0x080c, 0x49ba, 0x0904, 0x63a7, 0x900e, 0x9016, 0x90c6,\r
-+      0x4000, 0x15e0, 0x0006, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800,\r
-+      0xd0bc, 0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x0031, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006,\r
-+      0x2098, 0x080c, 0x0fb7, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x0035, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a,\r
-+      0x2098, 0x080c, 0x0fb7, 0xa8c4, 0xabc8, 0x9305, 0xabcc, 0x9305,\r
-+      0xabd0, 0x9305, 0xabd4, 0x9305, 0xabd8, 0x9305, 0xabdc, 0x9305,\r
-+      0xabe0, 0x9305, 0x9005, 0x0510, 0x000e, 0x00c8, 0x90c6, 0x4007,\r
-+      0x1110, 0x2408, 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610,\r
-+      0x0070, 0x90c6, 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138,\r
-+      0x2001, 0x4005, 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896,\r
-+      0xa99a, 0xaa9e, 0x2001, 0x0030, 0x900e, 0x0478, 0x000e, 0x080c,\r
-+      0xab97, 0x1130, 0x2001, 0x4005, 0x2009, 0x0003, 0x9016, 0x0c78,\r
-+      0x2b00, 0x6012, 0x080c, 0xcccc, 0x2900, 0x6016, 0x6023, 0x0001,\r
-+      0xa868, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x31e7, 0x012e, 0x9006, 0x080c, 0x6561, 0x2001, 0x0002,\r
-+      0x080c, 0x6575, 0x2009, 0x0002, 0x080c, 0xac8c, 0xa8b0, 0xd094,\r
-+      0x0118, 0xb8d4, 0xc08d, 0xb8d6, 0x9006, 0x9005, 0x012e, 0x00ee,\r
-+      0x00fe, 0x00be, 0x0005, 0x080c, 0x56ee, 0x0118, 0x2009, 0x0007,\r
-+      0x00f8, 0xa998, 0xaeb0, 0x080c, 0x6625, 0x1904, 0x6398, 0x9186,\r
-+      0x007f, 0x0130, 0x080c, 0x6a6b, 0x0118, 0x2009, 0x0009, 0x0080,\r
-+      0x0096, 0x080c, 0x103a, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040,\r
-+      0x2900, 0x009e, 0xa806, 0x080c, 0xca24, 0x19b0, 0x2009, 0x0003,\r
-+      0x2001, 0x4005, 0x0804, 0x639f, 0xa998, 0xaeb0, 0x080c, 0x6625,\r
-+      0x1904, 0x6398, 0x0096, 0x080c, 0x103a, 0x1128, 0x009e, 0x2009,\r
-+      0x0002, 0x0804, 0x6458, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048,\r
-+      0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8,\r
-+      0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080,\r
-+      0x0006, 0x20a0, 0xbbc8, 0x9398, 0x0006, 0x2398, 0x080c, 0x0fb7,\r
-+      0x009e, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xd684,\r
-+      0x1168, 0x080c, 0x56da, 0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0,\r
-+      0xb800, 0xd08c, 0x0118, 0xa89b, 0x000c, 0x00b0, 0x080c, 0x6a6b,\r
-+      0x0118, 0xa89b, 0x0009, 0x0080, 0x080c, 0x56ee, 0x0118, 0xa89b,\r
-+      0x0007, 0x0050, 0x080c, 0xca07, 0x1904, 0x63d4, 0x2009, 0x0003,\r
-+      0x2001, 0x4005, 0x0804, 0x639f, 0xa87b, 0x0030, 0xa897, 0x4005,\r
-+      0xa804, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,\r
-+      0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4,\r
-+      0x2031, 0x0000, 0x2041, 0x127e, 0x080c, 0xb112, 0x1904, 0x63d4,\r
-+      0x2009, 0x0002, 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x63d5,\r
-+      0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038,\r
-+      0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e,\r
-+      0x0804, 0x63d5, 0x2001, 0x0029, 0x900e, 0x0804, 0x63d5, 0x080c,\r
-+      0x3797, 0x0804, 0x63d6, 0x080c, 0x540f, 0x0804, 0x63d6, 0x080c,\r
-+      0x4573, 0x0804, 0x63d6, 0x080c, 0x45ec, 0x0804, 0x63d6, 0x080c,\r
-+      0x4648, 0x0804, 0x63d6, 0x080c, 0x4a7d, 0x0804, 0x63d6, 0x080c,\r
-+      0x4d34, 0x0804, 0x63d6, 0x080c, 0x507a, 0x0804, 0x63d6, 0x080c,\r
-+      0x5273, 0x0804, 0x63d6, 0x080c, 0x39b5, 0x0804, 0x63d6, 0x00b6,\r
-+      0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1608, 0x9182,\r
-+      0x0800, 0x1258, 0x9188, 0x1000, 0x2104, 0x905d, 0x0130, 0x080c,\r
-+      0x6a6b, 0x1138, 0x00d9, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e,\r
-+      0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d98, 0x2001,\r
-+      0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,\r
-+      0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0xa877, 0x0000,\r
-+      0xb8d0, 0x9005, 0x1904, 0x6555, 0xb888, 0x9005, 0x1904, 0x6555,\r
-+      0xb838, 0xb93c, 0x9102, 0x1a04, 0x6555, 0x2b10, 0x080c, 0xabc4,\r
-+      0x0904, 0x6551, 0x8108, 0xb93e, 0x6212, 0x2900, 0x6016, 0x6023,\r
-+      0x0003, 0x600b, 0xffff, 0x6007, 0x0040, 0xa878, 0x605e, 0xa880,\r
-+      0x9084, 0x00ff, 0x6066, 0xa883, 0x0000, 0xa87c, 0xd0ac, 0x0588,\r
-+      0xc0dd, 0xa87e, 0xa888, 0x8001, 0x1530, 0xa816, 0xa864, 0x9094,\r
-+      0x00f7, 0x9296, 0x0011, 0x11f8, 0x9084, 0x00ff, 0xc0bd, 0x601e,\r
-+      0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001, 0x000f, 0x8001, 0x1df0,\r
-+      0x2001, 0x8004, 0x6003, 0x0004, 0x6046, 0x00f6, 0x2079, 0x0380,\r
-+      0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0010, 0x2c00, 0x7836, 0x781b,\r
-+      0x8080, 0x00fe, 0x0005, 0x080c, 0x1731, 0x601c, 0xc0bd, 0x601e,\r
-+      0x0c38, 0xd0b4, 0x190c, 0x1c30, 0x2001, 0x8004, 0x6003, 0x0002,\r
-+      0x0c18, 0x81ff, 0x1110, 0xb88b, 0x0001, 0x2908, 0xb8cc, 0xb9ce,\r
-+      0x9005, 0x1110, 0xb9d2, 0x0020, 0x0096, 0x2048, 0xa902, 0x009e,\r
-+      0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026, 0x2091, 0x8000, 0x6210,\r
-+      0x2258, 0xba00, 0x9005, 0x0110, 0xc285, 0x0008, 0xc284, 0xba02,\r
-+      0x002e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6,\r
-+      0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006,\r
-+      0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c, 0x6a67, 0x0140, 0x9284,\r
-+      0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011, 0x0600, 0x000e,\r
-+      0x9294, 0xff00, 0x9215, 0xba06, 0x0006, 0x9086, 0x0006, 0x1120,\r
-+      0xba90, 0x82ff, 0x090c, 0x0d7d, 0x000e, 0x00ce, 0x012e, 0x00be,\r
-+      0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258,\r
-+      0xba04, 0x0006, 0x9086, 0x0006, 0x1168, 0xb89c, 0xd0a4, 0x0150,\r
-+      0x080c, 0x6a63, 0x1138, 0x9284, 0x00ff, 0x9086, 0x0007, 0x1110,\r
-+      0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007, 0x9215, 0xba06,\r
-+      0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, 0x0800, 0x0218, 0x9085,\r
-+      0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, 0x1000, 0x2204, 0x905d,\r
-+      0x1188, 0x0096, 0x080c, 0x103a, 0x2958, 0x009e, 0x0168, 0x2b00,\r
-+      0x2012, 0xb85c, 0xb8ca, 0xb860, 0xb8c6, 0x9006, 0xb8a6, 0xb8ae,\r
-+      0x080c, 0x6043, 0x9006, 0x0010, 0x9085, 0x0001, 0x002e, 0x00de,\r
-+      0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, 0x0026, 0x9182,\r
-+      0x0800, 0x0218, 0x9085, 0x0001, 0x0458, 0x00d6, 0x9190, 0x1000,\r
-+      0x2204, 0x905d, 0x0518, 0x2013, 0x0000, 0xb8a4, 0x904d, 0x0110,\r
-+      0x080c, 0x106c, 0x00d6, 0x00c6, 0xb8bc, 0x2060, 0x8cff, 0x0168,\r
-+      0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xc838, 0x0110, 0x080c,\r
-+      0x0fec, 0x080c, 0xabed, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x2b48,\r
-+      0xb8c8, 0xb85e, 0xb8c4, 0xb862, 0x080c, 0x107c, 0x00de, 0x9006,\r
-+      0x002e, 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182, 0x0800,\r
-+      0x0218, 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104, 0x905d,\r
-+      0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146,\r
-+      0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c, 0x74e9,\r
-+      0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0xab57, 0x11d8,\r
-+      0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x1982, 0x7048,\r
-+      0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, 0x00ce,\r
-+      0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, 0x6886,\r
-+      0x2069, 0x1800, 0x68b6, 0x7040, 0xb85e, 0x7048, 0xb862, 0x704c,\r
-+      0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8c4, 0x20e8, 0xb8c8,\r
-+      0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, 0x027a,\r
-+      0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, 0x0200,\r
-+      0x6817, 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048, 0xb872,\r
-+      0x7050, 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0, 0x9086,\r
-+      0x007e, 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218, 0x2009,\r
-+      0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0,\r
-+      0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, 0x0349,\r
-+      0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, 0x2009,\r
-+      0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010,\r
-+      0x2009, 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,\r
-+      0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896, 0x703c,\r
-+      0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbd4, 0xc384, 0xba00, 0x2009,\r
-+      0x1867, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008,\r
-+      0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, 0x0128,\r
-+      0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbd6, 0x003e,\r
-+      0x00ee, 0x002e, 0x001e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000,\r
-+      0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0, 0xaa04, 0x9282,\r
-+      0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x8906, 0x8006,\r
-+      0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9080, 0x0004,\r
-+      0x2098, 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002, 0x9086, 0xffff,\r
-+      0x0120, 0x8109, 0x1dd0, 0x080c, 0x0d7d, 0x3c00, 0x20e8, 0x3300,\r
-+      0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce, 0x014e,\r
-+      0x013e, 0x0060, 0x080c, 0x103a, 0x0170, 0x2900, 0xb8a6, 0xa803,\r
-+      0x0000, 0x080c, 0x68b0, 0xa807, 0x0001, 0xae12, 0x9085, 0x0001,\r
-+      0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091, 0x8000,\r
-+      0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150, 0x080c,\r
-+      0x68bf, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001, 0xa806,\r
-+      0x0020, 0x080c, 0x106c, 0xb8a7, 0x0000, 0x009e, 0x012e, 0x0005,\r
-+      0x0096, 0x00c6, 0xb888, 0x9005, 0x1904, 0x67a9, 0xb8d0, 0x904d,\r
-+      0x0904, 0x67a9, 0x080c, 0xabc4, 0x0904, 0x67a5, 0x8210, 0xba3e,\r
-+      0xa800, 0xb8d2, 0x9005, 0x1108, 0xb8ce, 0x2b00, 0x6012, 0x2900,\r
-+      0x6016, 0x6023, 0x0003, 0x600b, 0xffff, 0x6007, 0x0040, 0xa878,\r
-+      0x605e, 0xa880, 0x9084, 0x00ff, 0x6066, 0xa883, 0x0000, 0xa87c,\r
-+      0xd0ac, 0x01c8, 0xc0dd, 0xa87e, 0xa888, 0x8001, 0x1568, 0xa816,\r
-+      0xa864, 0x9094, 0x00f7, 0x9296, 0x0011, 0x1530, 0x9084, 0x00ff,\r
-+      0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001, 0x8004,\r
-+      0x6003, 0x0004, 0x0030, 0x080c, 0x1c30, 0x2001, 0x8004, 0x6003,\r
-+      0x0002, 0x6046, 0x2001, 0x0010, 0x2c08, 0x080c, 0xa887, 0xb838,\r
-+      0xba3c, 0x9202, 0x0a04, 0x6756, 0x0020, 0x82ff, 0x1110, 0xb88b,\r
-+      0x0001, 0x00ce, 0x009e, 0x0005, 0x080c, 0x1731, 0x601c, 0xc0bd,\r
-+      0x601e, 0x08e0, 0x00b6, 0x0096, 0x0016, 0x20a9, 0x0800, 0x900e,\r
-+      0x0016, 0x080c, 0x6625, 0x1158, 0xb8d0, 0x904d, 0x0140, 0x3e00,\r
-+      0x9086, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1108, 0x0041, 0x001e,\r
-+      0x8108, 0x1f04, 0x67b8, 0x001e, 0x00be, 0x009e, 0x0005, 0x0096,\r
-+      0x0016, 0xb8d0, 0x904d, 0x0188, 0xa800, 0xb8d2, 0x9005, 0x1108,\r
-+      0xb8ce, 0x9006, 0xa802, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,\r
-+      0x080c, 0xcb36, 0x080c, 0x6d80, 0x0c60, 0x001e, 0x009e, 0x0005,\r
-+      0x0086, 0x9046, 0xb8d0, 0x904d, 0x0198, 0xa86c, 0x9406, 0x1118,\r
-+      0xa870, 0x9506, 0x0128, 0x2940, 0xa800, 0x904d, 0x0148, 0x0ca8,\r
-+      0xa800, 0x88ff, 0x1110, 0xb8d2, 0x0008, 0xa002, 0xa803, 0x0000,\r
-+      0x008e, 0x0005, 0x901e, 0x0010, 0x2019, 0x0001, 0x00e6, 0x0096,\r
-+      0x00c6, 0x0086, 0x0026, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7,\r
-+      0x9046, 0x7028, 0x9065, 0x01e8, 0x6014, 0x2068, 0x83ff, 0x0120,\r
-+      0x605c, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, 0xa870,\r
-+      0x9506, 0x0120, 0x2c40, 0x600c, 0x2060, 0x0c60, 0x600c, 0x0006,\r
-+      0x0066, 0x2830, 0x080c, 0x9fa2, 0x006e, 0x000e, 0x83ff, 0x0508,\r
-+      0x0c08, 0x9046, 0xb8d0, 0x904d, 0x01e0, 0x83ff, 0x0120, 0xa878,\r
-+      0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506,\r
-+      0x0120, 0x2940, 0xa800, 0x2048, 0x0c70, 0xb8d0, 0xaa00, 0x0026,\r
-+      0x9906, 0x1110, 0xbad2, 0x0008, 0xa202, 0x000e, 0x83ff, 0x0108,\r
-+      0x0c10, 0x002e, 0x008e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9016,\r
-+      0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c, 0x6914, 0x0128,\r
-+      0x080c, 0xc8f9, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6914,\r
-+      0x0128, 0x080c, 0xc89a, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c,\r
-+      0x6914, 0x0128, 0x080c, 0xc8f6, 0x0010, 0x9085, 0x0001, 0x0005,\r
-+      0x080c, 0x6914, 0x0128, 0x080c, 0xc8b9, 0x0010, 0x9085, 0x0001,\r
-+      0x0005, 0x080c, 0x6914, 0x0128, 0x080c, 0xc93a, 0x0010, 0x9085,\r
-+      0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085, 0x0001, 0x0005,\r
-+      0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e, 0x810f,\r
-+      0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004, 0x2098,\r
-+      0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128, 0x8109,\r
-+      0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006, 0x01ce, 0x013e, 0x0005,\r
-+      0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0004, 0x20a0,\r
-+      0x20a9, 0x0010, 0x2009, 0xffff, 0x4104, 0x01de, 0x014e, 0x0136,\r
-+      0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e, 0x810f, 0x9184,\r
-+      0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004, 0x2098, 0x20a9,\r
-+      0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128, 0x8109, 0x1dd8,\r
-+      0x9085, 0x0001, 0x0068, 0x0146, 0x01d6, 0x3300, 0x8001, 0x20a0,\r
-+      0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004, 0x01de, 0x014e, 0x9006,\r
-+      0x01ce, 0x013e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4,\r
-+      0x904d, 0x1128, 0x080c, 0x103a, 0x0168, 0x2900, 0xb8a6, 0x080c,\r
-+      0x68b0, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085, 0x0001, 0x012e,\r
-+      0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126, 0x2091, 0x8000,\r
-+      0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c, 0x106c, 0x9085,\r
-+      0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4, 0x0005, 0x00b6,\r
-+      0x00f6, 0x080c, 0x74e9, 0x01b0, 0x71c4, 0x81ff, 0x1198, 0x71dc,\r
-+      0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004, 0x905d,\r
-+      0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118, 0xb800,\r
-+      0xc0ed, 0xb802, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x01d0, 0x0156,\r
-+      0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6625, 0x1168, 0xb804,\r
-+      0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086, 0x0006,\r
-+      0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04, 0x693b,\r
-+      0x015e, 0x080c, 0x6a29, 0x0120, 0x2001, 0x1985, 0x200c, 0x0038,\r
-+      0x2079, 0x1847, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011,\r
-+      0x6966, 0x080c, 0x8708, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011,\r
-+      0x6966, 0x080c, 0x863e, 0x080c, 0x6a29, 0x01d8, 0x2001, 0x107e,\r
-+      0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6a67, 0x0130,\r
-+      0x2009, 0x07d0, 0x2011, 0x6966, 0x080c, 0x8708, 0x00e6, 0x2071,\r
-+      0x1800, 0x9006, 0x707e, 0x7060, 0x7082, 0x080c, 0x2fb2, 0x00ee,\r
-+      0x04d0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c,\r
-+      0x6625, 0x1558, 0xb800, 0xd0ec, 0x0540, 0x0046, 0xbaa0, 0x2220,\r
-+      0x9006, 0x2009, 0x0029, 0x080c, 0xe2c9, 0xb800, 0xc0e5, 0xc0ec,\r
-+      0xb802, 0x080c, 0x6a63, 0x2001, 0x0707, 0x1128, 0xb804, 0x9084,\r
-+      0x00ff, 0x9085, 0x0700, 0xb806, 0x080c, 0xa896, 0x2019, 0x0029,\r
-+      0x080c, 0x93a5, 0x0076, 0x903e, 0x080c, 0x9277, 0x900e, 0x080c,\r
-+      0xdfeb, 0x007e, 0x004e, 0x080c, 0xa8b2, 0x001e, 0x8108, 0x1f04,\r
-+      0x698e, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058,\r
-+      0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x0096,\r
-+      0x080c, 0x1053, 0x090c, 0x0d7d, 0x2958, 0x009e, 0x2001, 0x196b,\r
-+      0x2b02, 0x8b07, 0x8006, 0x8006, 0x908c, 0x003f, 0xb9c6, 0x908c,\r
-+      0xffc0, 0xb9ca, 0xb8af, 0x0000, 0x2009, 0x00ff, 0x080c, 0x6043,\r
-+      0xb807, 0x0006, 0xb813, 0x00ff, 0xb817, 0xffff, 0xb86f, 0x0200,\r
-+      0xb86c, 0xb893, 0x0002, 0xb8bb, 0x0520, 0xb8a3, 0x00ff, 0xb8af,\r
-+      0x0000, 0x00ce, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800,\r
-+      0x00be, 0xd0ac, 0x0005, 0x6010, 0x00b6, 0x905d, 0x0108, 0xb800,\r
-+      0x00be, 0xd0bc, 0x0005, 0x0006, 0x0016, 0x0026, 0xb804, 0x908c,\r
-+      0x00ff, 0x9196, 0x0006, 0x0188, 0x9196, 0x0004, 0x0170, 0x9196,\r
-+      0x0005, 0x0158, 0x908c, 0xff00, 0x810f, 0x9196, 0x0006, 0x0128,\r
-+      0x9196, 0x0004, 0x0110, 0x9196, 0x0005, 0x002e, 0x001e, 0x000e,\r
-+      0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e, 0x2004, 0x905d, 0x0110,\r
-+      0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005, 0x0126, 0x0026, 0x2091,\r
-+      0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204, 0x9b06, 0x190c,\r
-+      0x0d7d, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc,\r
-+      0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1837, 0x2204, 0xd0cc,\r
-+      0x0138, 0x2001, 0x1983, 0x200c, 0x2011, 0x6a59, 0x080c, 0x8708,\r
-+      0x0005, 0x2011, 0x6a59, 0x080c, 0x863e, 0x2011, 0x1837, 0x2204,\r
-+      0xc0cc, 0x2012, 0x0005, 0x080c, 0x56da, 0xd0ac, 0x0005, 0x080c,\r
-+      0x56da, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e,\r
-+      0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, 0x8007,\r
-+      0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xcf52,\r
-+      0x0158, 0x70dc, 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, 0x2004,\r
-+      0x905d, 0x0110, 0xb8d4, 0xd094, 0x00fe, 0x00be, 0x0005, 0x2071,\r
-+      0x1910, 0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016,\r
-+      0x701a, 0x701e, 0x700a, 0x7046, 0x2001, 0x1947, 0x2003, 0x0000,\r
-+      0x0005, 0x0016, 0x00e6, 0x2071, 0x1948, 0x900e, 0x710a, 0x080c,\r
-+      0x56da, 0xd0fc, 0x1140, 0x080c, 0x56da, 0x900e, 0xd09c, 0x0108,\r
-+      0x8108, 0x7102, 0x00f8, 0x2001, 0x1867, 0x200c, 0x9184, 0x0007,\r
-+      0x0002, 0x6aab, 0x6aab, 0x6aab, 0x6aab, 0x6aab, 0x6ac1, 0x6acf,\r
-+      0x6aab, 0x7003, 0x0003, 0x2009, 0x1868, 0x210c, 0x9184, 0xff00,\r
-+      0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x7006, 0x0018, 0x7003,\r
-+      0x0005, 0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0050,\r
-+      0x684c, 0x9005, 0x1150, 0x00e6, 0x2071, 0x1910, 0x7028, 0xc085,\r
-+      0x702a, 0x00ee, 0x9085, 0x0001, 0x0488, 0x6844, 0x9005, 0x0158,\r
-+      0x080c, 0x785f, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101, 0x7006,\r
-+      0x9006, 0x7012, 0x7016, 0x6860, 0x7002, 0x6864, 0x7006, 0x6868,\r
-+      0x700a, 0x686c, 0x700e, 0x6844, 0x9005, 0x1110, 0x7012, 0x7016,\r
-+      0x684c, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x7037, 0x0019,\r
-+      0x702b, 0x0001, 0x00e6, 0x2071, 0x1910, 0x7028, 0xc084, 0x702a,\r
-+      0x7007, 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005,\r
-+      0x00e6, 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6d85,\r
-+      0x9286, 0x0003, 0x0904, 0x6c15, 0x9286, 0x0005, 0x0904, 0x6c15,\r
-+      0x2071, 0x1877, 0xa87c, 0x9005, 0x0904, 0x6b76, 0x7140, 0xa868,\r
-+      0x9102, 0x0a04, 0x6d85, 0xa878, 0xd084, 0x15d8, 0xa853, 0x0019,\r
-+      0x2001, 0x8023, 0xa84e, 0x2071, 0x1910, 0x701c, 0x9005, 0x1904,\r
-+      0x6f28, 0x0e04, 0x6f96, 0x2071, 0x0000, 0xa850, 0x7032, 0xa84c,\r
-+      0x7082, 0xa870, 0x7086, 0xa86c, 0x708a, 0xa880, 0x708e, 0x7036,\r
-+      0x0146, 0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1,\r
-+      0x002a, 0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021,\r
-+      0x2098, 0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x2091,\r
-+      0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x0804,\r
-+      0x6bf8, 0xa853, 0x001b, 0x2001, 0x8027, 0x0820, 0x7004, 0xd08c,\r
-+      0x1904, 0x6d85, 0xa853, 0x001a, 0x2001, 0x8024, 0x0804, 0x6b3a,\r
-+      0x00e6, 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6d85,\r
-+      0x9286, 0x0003, 0x0904, 0x6c15, 0x9286, 0x0005, 0x0904, 0x6c15,\r
-+      0xa84f, 0x8022, 0xa853, 0x0018, 0x0804, 0x6bdd, 0xa868, 0xd0fc,\r
-+      0x11d8, 0x00e6, 0x0026, 0x2001, 0x1948, 0x2004, 0x9005, 0x0904,\r
-+      0x6d85, 0xa87c, 0xd0bc, 0x1904, 0x6d85, 0xa978, 0xa874, 0x9105,\r
-+      0x1904, 0x6d85, 0x2001, 0x1948, 0x2004, 0x0002, 0x6d85, 0x6bd9,\r
-+      0x6c15, 0x6c15, 0x6d85, 0x6c15, 0x0005, 0xa868, 0xd0fc, 0x1500,\r
-+      0x00e6, 0x0026, 0x2009, 0x1948, 0x210c, 0x81ff, 0x0904, 0x6d85,\r
-+      0xa87c, 0xd0cc, 0x0904, 0x6d85, 0xa880, 0x9084, 0x00ff, 0x9086,\r
-+      0x0001, 0x1904, 0x6d85, 0x9186, 0x0003, 0x0904, 0x6c15, 0x9186,\r
-+      0x0005, 0x0904, 0x6c15, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028,\r
-+      0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1910, 0x701c,\r
-+      0x9005, 0x1904, 0x6f28, 0x0e04, 0x6f96, 0x2071, 0x0000, 0xa84c,\r
-+      0x7082, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a,\r
-+      0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6,\r
-+      0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158,\r
-+      0xa802, 0x2900, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553,\r
-+      0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210,\r
-+      0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6,\r
-+      0x2079, 0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010, 0x9005,\r
-+      0x1904, 0x6d0a, 0x782c, 0x908c, 0x0780, 0x190c, 0x70e2, 0x8004,\r
-+      0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6c33, 0x6d0a, 0x6c58,\r
-+      0x6ca5, 0x080c, 0x0d7d, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804,\r
-+      0x900d, 0x1170, 0x2071, 0x1a03, 0x703c, 0x9005, 0x1328, 0x2001,\r
-+      0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005,\r
-+      0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,\r
-+      0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x0c10,\r
-+      0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x15a8, 0x7824,\r
-+      0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x1830,\r
-+      0x210c, 0x918a, 0x0020, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c,\r
-+      0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802,\r
-+      0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8553, 0x782c,\r
-+      0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x19c8, 0x2071, 0x1a03,\r
-+      0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e,\r
-+      0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904,\r
-+      0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200,\r
-+      0x70c2, 0x080c, 0x8553, 0x0804, 0x6c5f, 0x0096, 0x00e6, 0x7824,\r
-+      0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0,\r
-+      0x8000, 0x70c2, 0x080c, 0x8553, 0x782c, 0x9094, 0x0780, 0x190c,\r
-+      0x70e2, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c,\r
-+      0x70e2, 0xd09c, 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,\r
-+      0x1560, 0x2071, 0x1a03, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949,\r
-+      0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e,\r
-+      0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,\r
-+      0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1170, 0x2071,\r
-+      0x1a03, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005,\r
-+      0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016,\r
-+      0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,\r
-+      0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x00fe, 0x002e,\r
-+      0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,\r
-+      0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,\r
-+      0x1904, 0x6d5f, 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd09c,\r
-+      0x1198, 0x701c, 0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108,\r
-+      0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780,\r
-+      0x190c, 0x70e2, 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c,\r
-+      0x70e2, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800,\r
-+      0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c,\r
-+      0x8553, 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x1d60,\r
-+      0x00ee, 0x2071, 0x1a03, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949,\r
-+      0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6,\r
-+      0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,\r
-+      0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c,\r
-+      0x8553, 0x00ee, 0x0804, 0x6d1a, 0xa868, 0xd0fc, 0x1560, 0x0096,\r
-+      0xa804, 0xa807, 0x0000, 0x904d, 0x190c, 0x0fec, 0x009e, 0x0018,\r
-+      0xa868, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6,\r
-+      0x2079, 0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010, 0x9005,\r
-+      0x1904, 0x6ea2, 0x782c, 0x908c, 0x0780, 0x190c, 0x70e2, 0x8004,\r
-+      0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6da4, 0x6ea2, 0x6dbf,\r
-+      0x6e31, 0x080c, 0x0d7d, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822,\r
-+      0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016,\r
-+      0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,\r
-+      0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x0c60, 0x2071,\r
-+      0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904, 0x6e20, 0x7830,\r
-+      0xd0dc, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6,\r
-+      0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x1830, 0x210c,\r
-+      0x918a, 0x0020, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108,\r
-+      0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900,\r
-+      0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8553, 0x782c, 0x9094,\r
-+      0x0780, 0x190c, 0x70e2, 0xd0a4, 0x19c8, 0x0e04, 0x6e17, 0x7838,\r
-+      0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,\r
-+      0x0013, 0x00de, 0x2001, 0x1921, 0x200c, 0xc184, 0x2102, 0x2091,\r
-+      0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x2009,\r
-+      0x1947, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2001,\r
-+      0x1921, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee, 0x0005,\r
-+      0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,\r
-+      0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x0804,\r
-+      0x6dce, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,\r
-+      0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8553,\r
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x1d60, 0x00ee,\r
-+      0x0e04, 0x6e75, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069,\r
-+      0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046,\r
-+      0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6,\r
-+      0x2009, 0x1947, 0x200b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c,\r
-+      0x70e2, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,\r
-+      0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046,\r
-+      0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,\r
-+      0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,\r
-+      0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016,\r
-+      0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,\r
-+      0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x00fe, 0x002e,\r
-+      0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,\r
-+      0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,\r
-+      0x1904, 0x6f13, 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd09c,\r
-+      0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010,\r
-+      0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822,\r
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd09c, 0x0d50, 0x782c,\r
-+      0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x05c8, 0x00e6, 0x7824,\r
-+      0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0,\r
-+      0x8000, 0x70c2, 0x080c, 0x8553, 0x782c, 0x9094, 0x0780, 0x190c,\r
-+      0x70e2, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6f0c, 0x7838, 0x7938,\r
-+      0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,\r
-+      0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089,\r
-+      0x2004, 0xd084, 0x190c, 0x11d6, 0x2009, 0x1947, 0x200b, 0x0000,\r
-+      0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe,\r
-+      0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c,\r
-+      0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,\r
-+      0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x00ee, 0x0804, 0x6eb2,\r
-+      0x2071, 0x1910, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012,\r
-+      0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,\r
-+      0xa804, 0x900d, 0x1128, 0x1e04, 0x6f53, 0x002e, 0x00ee, 0x0005,\r
-+      0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,\r
-+      0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c,\r
-+      0x8553, 0x0e04, 0x6f3d, 0x2071, 0x1910, 0x701c, 0x2048, 0xa84c,\r
-+      0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c,\r
-+      0x7086, 0x7036, 0xa870, 0x708a, 0xa850, 0x9082, 0x0019, 0x1278,\r
-+      0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6,\r
-+      0x2071, 0x1910, 0x080c, 0x70ce, 0x002e, 0x00ee, 0x0005, 0xa850,\r
-+      0x9082, 0x001c, 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6,\r
-+      0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868,\r
-+      0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003,\r
-+      0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x0890, 0x2071, 0x1910,\r
-+      0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,\r
-+      0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,\r
-+      0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c,\r
-+      0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,\r
-+      0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x002e, 0x00ee, 0x0005,\r
-+      0x0006, 0xa87c, 0x0006, 0xa867, 0x0103, 0x20a9, 0x001c, 0xa860,\r
-+      0x20e8, 0xa85c, 0x9080, 0x001d, 0x20a0, 0x9006, 0x4004, 0x000e,\r
-+      0x9084, 0x00ff, 0xa87e, 0x000e, 0xa87a, 0xa982, 0x0005, 0x2071,\r
-+      0x1910, 0x7004, 0x0002, 0x6fe1, 0x6fe2, 0x70cd, 0x6fe2, 0x0d7d,\r
-+      0x70cd, 0x0005, 0x2001, 0x1948, 0x2004, 0x0002, 0x6fec, 0x6fec,\r
-+      0x7066, 0x7067, 0x6fec, 0x7067, 0x0126, 0x2091, 0x8000, 0x1e0c,\r
-+      0x70ed, 0x701c, 0x904d, 0x0508, 0xa84c, 0x9005, 0x0904, 0x7037,\r
-+      0x0e04, 0x7015, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032,\r
-+      0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0xa850, 0x9082, 0x0019,\r
-+      0x1278, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,\r
-+      0x11d6, 0x2071, 0x1910, 0x080c, 0x70ce, 0x012e, 0x0804, 0x7065,\r
-+      0xa850, 0x9082, 0x001c, 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146,\r
-+      0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a,\r
-+      0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098,\r
-+      0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x0890, 0x2001,\r
-+      0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd09c, 0x2071,\r
-+      0x1910, 0x1510, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964, 0x9184,\r
-+      0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101,\r
-+      0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de,\r
-+      0x2071, 0x1910, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800,\r
-+      0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6,\r
-+      0x2008, 0x2069, 0x1a03, 0x683c, 0x9005, 0x0760, 0x0158, 0x9186,\r
-+      0x0003, 0x0540, 0x2001, 0x1815, 0x2004, 0x2009, 0x1b4e, 0x210c,\r
-+      0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c,\r
-+      0x6838, 0x9106, 0x0190, 0x0e04, 0x7099, 0x2069, 0x0000, 0x6837,\r
-+      0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001,\r
-+      0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x2069, 0x1a03, 0x683f,\r
-+      0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x7163,\r
-+      0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780,\r
-+      0x15c9, 0xd09c, 0x1500, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964,\r
-+      0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,\r
-+      0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822,\r
-+      0x00de, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e,\r
-+      0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091,\r
-+      0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800,\r
-+      0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x106c, 0x0005,\r
-+      0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x70e4, 0x0006, 0x0016,\r
-+      0x2001, 0x8004, 0x0006, 0x0804, 0x0d86, 0x0096, 0x00f6, 0x2079,\r
-+      0x0050, 0x7044, 0xd084, 0x01e0, 0xc084, 0x7046, 0x7838, 0x7938,\r
-+      0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,\r
-+      0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,\r
-+      0x11d6, 0x2009, 0x1947, 0x200b, 0x0000, 0x00fe, 0x009e, 0x0005,\r
-+      0x782c, 0x9094, 0x0780, 0x1971, 0xd0a4, 0x0db8, 0x2009, 0x1947,\r
-+      0x2104, 0x8000, 0x200a, 0x9082, 0x000f, 0x0e78, 0x00e6, 0x2071,\r
-+      0x1800, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1170,\r
-+      0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0240, 0x7022, 0x2001,\r
-+      0x1dc0, 0x200c, 0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048,\r
-+      0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c,\r
-+      0x8553, 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x19c8,\r
-+      0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,\r
-+      0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,\r
-+      0xd084, 0x190c, 0x11d6, 0x2009, 0x1947, 0x200b, 0x0000, 0x00ee,\r
-+      0x00fe, 0x009e, 0x0005, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084,\r
-+      0x01b8, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,\r
-+      0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080,\r
-+      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x00fe, 0x0005,\r
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x0db8, 0x00e6,\r
-+      0x2071, 0x1800, 0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,\r
-+      0x70c0, 0x8000, 0x70c2, 0x080c, 0x8553, 0x782c, 0x9094, 0x0780,\r
-+      0x190c, 0x70e2, 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c,\r
-+      0x2069, 0x1948, 0x6808, 0x690a, 0x2069, 0x1a03, 0x9102, 0x1118,\r
-+      0x683c, 0x9005, 0x1328, 0x2001, 0x1949, 0x200c, 0x810d, 0x693e,\r
-+      0x00de, 0x00ee, 0x00fe, 0x0005, 0x7098, 0x908a, 0x0029, 0x1a0c,\r
-+      0x0d7d, 0x9082, 0x001d, 0x003b, 0x0026, 0x2011, 0x1e00, 0x080c,\r
-+      0x2a44, 0x002e, 0x0005, 0x728f, 0x7215, 0x7231, 0x725b, 0x727e,\r
-+      0x72be, 0x72d0, 0x7231, 0x72a6, 0x71d0, 0x71fe, 0x71cf, 0x0005,\r
-+      0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005,\r
-+      0x1518, 0x709b, 0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c,\r
-+      0x762b, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x709b, 0x0028,\r
-+      0x2069, 0x198f, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a,\r
-+      0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a6b, 0x080c, 0x1ab5,\r
-+      0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069,\r
-+      0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x709b,\r
-+      0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x76ce, 0x6028,\r
-+      0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090,\r
-+      0x080c, 0x2a0a, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x7341,\r
-+      0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x709b, 0x0020,\r
-+      0x080c, 0x7341, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f,\r
-+      0x0005, 0x2001, 0x0088, 0x080c, 0x2a0a, 0x6124, 0xd1cc, 0x11e8,\r
-+      0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, 0x080c,\r
-+      0x1adf, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x7515,\r
-+      0x2001, 0x0080, 0x080c, 0x2a0a, 0x709b, 0x0028, 0x0058, 0x709b,\r
-+      0x001e, 0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010,\r
-+      0x709b, 0x001f, 0x0005, 0x080c, 0x1adf, 0x60e3, 0x0001, 0x600c,\r
-+      0xc0b4, 0x600e, 0x080c, 0x7515, 0x2001, 0x0080, 0x080c, 0x2a0a,\r
-+      0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184,\r
-+      0x1e00, 0x1158, 0x709b, 0x0028, 0x0040, 0x709b, 0x001e, 0x0028,\r
-+      0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x2001, 0x00a0,\r
-+      0x080c, 0x2a0a, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c,\r
-+      0x1adf, 0x709b, 0x001e, 0x0010, 0x709b, 0x001d, 0x0005, 0x080c,\r
-+      0x73ca, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x7341, 0x0016, 0x080c,\r
-+      0x1adf, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x709b, 0x001e,\r
-+      0x0020, 0x709b, 0x001f, 0x080c, 0x7341, 0x0005, 0x0006, 0x2001,\r
-+      0x00a0, 0x080c, 0x2a0a, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc,\r
-+      0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e, 0x0028,\r
-+      0x709b, 0x001d, 0x0010, 0x709b, 0x0021, 0x0005, 0x080c, 0x73ca,\r
-+      0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b,\r
-+      0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005,\r
-+      0x0006, 0x2001, 0x0090, 0x080c, 0x2a0a, 0x000e, 0x6124, 0xd1d4,\r
-+      0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x709b,\r
-+      0x001e, 0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010,\r
-+      0x709b, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126,\r
-+      0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000,\r
-+      0x080c, 0x74e9, 0x11f8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01d0,\r
-+      0xc1b4, 0x2102, 0x0026, 0x2011, 0x0200, 0x080c, 0x2a44, 0x002e,\r
-+      0x080c, 0x29f0, 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c,\r
-+      0x2a0a, 0x080c, 0x77ed, 0x080c, 0x6029, 0x0428, 0x6028, 0xc0cd,\r
-+      0x602a, 0x0408, 0x080c, 0x7503, 0x0150, 0x080c, 0x74fa, 0x1138,\r
-+      0x2001, 0x0001, 0x080c, 0x25a0, 0x080c, 0x74bd, 0x00a0, 0x080c,\r
-+      0x73c7, 0x0178, 0x2001, 0x0001, 0x080c, 0x25a0, 0x7098, 0x9086,\r
-+      0x001e, 0x0120, 0x7098, 0x9086, 0x0022, 0x1118, 0x709b, 0x0025,\r
-+      0x0010, 0x709b, 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e,\r
-+      0x0005, 0x0026, 0x2011, 0x7352, 0x080c, 0x874a, 0x002e, 0x0016,\r
-+      0x0026, 0x2009, 0x0064, 0x2011, 0x7352, 0x080c, 0x8741, 0x002e,\r
-+      0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c, 0x9e32, 0x2071,\r
-+      0x1800, 0x080c, 0x72eb, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016,\r
-+      0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x080c,\r
-+      0x9e32, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091,\r
-+      0x8000, 0x6028, 0xc09c, 0x602a, 0x080c, 0xa896, 0x2011, 0x0003,\r
-+      0x080c, 0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x080c, 0xa098,\r
-+      0x080c, 0x86f6, 0x0036, 0x901e, 0x080c, 0xa118, 0x003e, 0x080c,\r
-+      0xa8b2, 0x60e3, 0x0000, 0x080c, 0xe702, 0x080c, 0xe71d, 0x2009,\r
-+      0x0004, 0x080c, 0x29f6, 0x080c, 0x2916, 0x2001, 0x1800, 0x2003,\r
-+      0x0004, 0x2011, 0x0008, 0x080c, 0x2a44, 0x2011, 0x7352, 0x080c,\r
-+      0x874a, 0x080c, 0x7503, 0x0118, 0x9006, 0x080c, 0x2a0a, 0x080c,\r
-+      0x0bc3, 0x2001, 0x0001, 0x080c, 0x25a0, 0x012e, 0x00fe, 0x00ee,\r
-+      0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6,\r
-+      0x2011, 0x735f, 0x2071, 0x1a03, 0x701c, 0x9206, 0x1118, 0x7018,\r
-+      0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020,\r
-+      0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8,\r
-+      0x2001, 0x00c0, 0x080c, 0x2a0a, 0x0156, 0x20a9, 0x002d, 0x1d04,\r
-+      0x73d7, 0x2091, 0x6000, 0x1f04, 0x73d7, 0x015e, 0x00d6, 0x2069,\r
-+      0x1800, 0x689c, 0x8001, 0x0220, 0x0118, 0x689e, 0x00de, 0x0005,\r
-+      0x689f, 0x0014, 0x68ec, 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001,\r
-+      0x1da8, 0x080c, 0x8756, 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061,\r
-+      0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x77fc, 0x2001,\r
-+      0x196d, 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2, 0x6886, 0x080c,\r
-+      0x266f, 0x9006, 0x080c, 0x2a0a, 0x080c, 0x5ee4, 0x0026, 0x2011,\r
-+      0xffff, 0x080c, 0x2a44, 0x002e, 0x602b, 0x182c, 0x00ee, 0x00de,\r
-+      0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,\r
-+      0x0140, 0x2071, 0x1800, 0x2001, 0x197d, 0x200c, 0x9186, 0x0000,\r
-+      0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186,\r
-+      0x0003, 0x0158, 0x0804, 0x74ad, 0x709b, 0x0022, 0x0040, 0x709b,\r
-+      0x0021, 0x0028, 0x709b, 0x0023, 0x0010, 0x709b, 0x0024, 0x60e3,\r
-+      0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x266f, 0x080c,\r
-+      0xa896, 0x0026, 0x080c, 0xab5e, 0x002e, 0x080c, 0xa8b2, 0x7000,\r
-+      0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020,\r
-+      0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac,\r
-+      0x0150, 0x012e, 0x015e, 0x080c, 0xcf52, 0x0118, 0x9006, 0x080c,\r
-+      0x2a34, 0x0804, 0x74b9, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802,\r
-+      0x080c, 0x29f0, 0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c,\r
-+      0x2a0a, 0x1f04, 0x745e, 0x080c, 0x7540, 0x012e, 0x015e, 0x080c,\r
-+      0x74fa, 0x0170, 0x6044, 0x9005, 0x0130, 0x080c, 0x7540, 0x9006,\r
-+      0x8001, 0x1df0, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x7540,\r
-+      0x080c, 0xcf52, 0x0118, 0x9006, 0x080c, 0x2a34, 0x0016, 0x0026,\r
-+      0x7000, 0x908e, 0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x735f,\r
-+      0x080c, 0x8708, 0x002e, 0x001e, 0x080c, 0x854a, 0x7034, 0xc085,\r
-+      0x7036, 0x2001, 0x197d, 0x2003, 0x0004, 0x080c, 0x71b4, 0x080c,\r
-+      0x74fa, 0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c,\r
-+      0x77f2, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6,\r
-+      0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x8561,\r
-+      0x080c, 0x8553, 0x080c, 0x77fc, 0x2001, 0x196d, 0x2003, 0x0000,\r
-+      0x9006, 0x709a, 0x60e2, 0x6886, 0x080c, 0x266f, 0x9006, 0x080c,\r
-+      0x2a0a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0026, 0x2011, 0xffff,\r
-+      0x080c, 0x2a44, 0x002e, 0x602b, 0x182c, 0x00ee, 0x00de, 0x00ce,\r
-+      0x0005, 0x0006, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x000e,\r
-+      0x0005, 0x0006, 0x080c, 0x56de, 0x9084, 0x0030, 0x9086, 0x0000,\r
-+      0x000e, 0x0005, 0x0006, 0x080c, 0x56de, 0x9084, 0x0030, 0x9086,\r
-+      0x0030, 0x000e, 0x0005, 0x0006, 0x080c, 0x56de, 0x9084, 0x0030,\r
-+      0x9086, 0x0010, 0x000e, 0x0005, 0x0006, 0x080c, 0x56de, 0x9084,\r
-+      0x0030, 0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001,\r
-+      0x180c, 0x2004, 0x908c, 0x0013, 0x0180, 0x0020, 0x080c, 0x268f,\r
-+      0x900e, 0x0028, 0x080c, 0x6a63, 0x1dc8, 0x2009, 0x0002, 0x2019,\r
-+      0x0028, 0x080c, 0x31a6, 0x9006, 0x0019, 0x001e, 0x003e, 0x0005,\r
-+      0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c, 0xcf4b, 0x1128,\r
-+      0x9085, 0x0010, 0x0010, 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005,\r
-+      0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006,\r
-+      0x6028, 0x0006, 0x602f, 0x0100, 0x602f, 0x0000, 0x602f, 0x0040,\r
-+      0x602f, 0x0000, 0x20a9, 0x0002, 0x080c, 0x29d1, 0x0026, 0x2011,\r
-+      0x0040, 0x080c, 0x2a44, 0x002e, 0x000e, 0x602a, 0x000e, 0x6006,\r
-+      0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001,\r
-+      0x2001, 0x0001, 0x080c, 0x266f, 0x2001, 0x00a0, 0x0006, 0x080c,\r
-+      0xcf52, 0x000e, 0x0130, 0x080c, 0x2a28, 0x9006, 0x080c, 0x2a34,\r
-+      0x0010, 0x080c, 0x2a0a, 0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5,\r
-+      0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2981, 0x00fe, 0x000e,\r
-+      0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,\r
-+      0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c,\r
-+      0xa8f4, 0x0158, 0x2001, 0x0386, 0x2004, 0xd0b4, 0x1130, 0x2001,\r
-+      0x0016, 0x080c, 0xa887, 0x0804, 0x761d, 0x2001, 0x180c, 0x200c,\r
-+      0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x2011, 0x0200,\r
-+      0x080c, 0x2a44, 0x2001, 0x0090, 0x080c, 0x2a0a, 0x20a9, 0x0366,\r
-+      0x6024, 0xd0cc, 0x1558, 0x1d04, 0x75b8, 0x2091, 0x6000, 0x1f04,\r
-+      0x75b8, 0x080c, 0xa896, 0x2011, 0x0003, 0x080c, 0xa1cf, 0x2011,\r
-+      0x0002, 0x080c, 0xa1d9, 0x080c, 0xa098, 0x901e, 0x080c, 0xa118,\r
-+      0x2001, 0x0386, 0x2003, 0x7000, 0x080c, 0xa8b2, 0x2001, 0x00a0,\r
-+      0x080c, 0x2a0a, 0x080c, 0x77ed, 0x080c, 0x6029, 0x080c, 0xcf52,\r
-+      0x0110, 0x080c, 0x0ce9, 0x9085, 0x0001, 0x04e8, 0x2001, 0x0386,\r
-+      0x2004, 0xd0ac, 0x0110, 0x080c, 0x1adf, 0x60e3, 0x0000, 0x2001,\r
-+      0x196d, 0x2004, 0x080c, 0x266f, 0x60e2, 0x2001, 0x0080, 0x080c,\r
-+      0x2a0a, 0x20a9, 0x0366, 0x2011, 0x1e00, 0x080c, 0x2a44, 0x2009,\r
-+      0x1e00, 0x080c, 0x29f0, 0x6024, 0x910c, 0x0140, 0x1d04, 0x75fb,\r
-+      0x2091, 0x6000, 0x1f04, 0x75fb, 0x0804, 0x75c1, 0x2001, 0x0386,\r
-+      0x2003, 0x7000, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b4, 0x9005,\r
-+      0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xcf52, 0x0110,\r
-+      0x080c, 0x0ce9, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e,\r
-+      0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000, 0x9086,\r
-+      0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540, 0x9086,\r
-+      0x5540, 0x1128, 0x2069, 0x1a77, 0x2d04, 0x8000, 0x206a, 0x2069,\r
-+      0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904,\r
-+      0x7694, 0x2001, 0x0088, 0x080c, 0x2a0a, 0x9006, 0x60e2, 0x6886,\r
-+      0x080c, 0x266f, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808,\r
-+      0x9005, 0x01d0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x2011, 0x0400,\r
-+      0x080c, 0x2a44, 0x2069, 0x198f, 0x7000, 0x206a, 0x709b, 0x0026,\r
-+      0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x7674, 0x2091, 0x6000,\r
-+      0x1f04, 0x7674, 0x0804, 0x76c6, 0x2069, 0x0140, 0x20a9, 0x0384,\r
-+      0x2011, 0x1e00, 0x080c, 0x2a44, 0x2009, 0x1e00, 0x080c, 0x29f0,\r
-+      0x6024, 0x910c, 0x0528, 0x9084, 0x1a00, 0x1510, 0x1d04, 0x7680,\r
-+      0x2091, 0x6000, 0x1f04, 0x7680, 0x080c, 0xa896, 0x2011, 0x0003,\r
-+      0x080c, 0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x080c, 0xa098,\r
-+      0x901e, 0x080c, 0xa118, 0x080c, 0xa8b2, 0x2001, 0x00a0, 0x080c,\r
-+      0x2a0a, 0x080c, 0x77ed, 0x080c, 0x6029, 0x9085, 0x0001, 0x00b0,\r
-+      0x2001, 0x0080, 0x080c, 0x2a0a, 0x2069, 0x0140, 0x60e3, 0x0000,\r
-+      0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001,\r
-+      0x196d, 0x2004, 0x080c, 0x266f, 0x60e2, 0x9006, 0x00ee, 0x00de,\r
-+      0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016,\r
-+      0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071,\r
-+      0x1800, 0x6020, 0x9084, 0x00c0, 0x01e8, 0x080c, 0xa896, 0x2011,\r
-+      0x0003, 0x080c, 0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x080c,\r
-+      0xa098, 0x901e, 0x080c, 0xa118, 0x080c, 0xa8b2, 0x2069, 0x0140,\r
-+      0x2001, 0x00a0, 0x080c, 0x2a0a, 0x080c, 0x77ed, 0x080c, 0x6029,\r
-+      0x0804, 0x7769, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5,\r
-+      0x2102, 0x080c, 0x7347, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c,\r
-+      0x2a0a, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118,\r
-+      0x6808, 0x9005, 0x0190, 0x6028, 0x9084, 0xfdff, 0x602a, 0x2011,\r
-+      0x0200, 0x080c, 0x2a44, 0x2069, 0x198f, 0x7000, 0x206a, 0x709b,\r
-+      0x0027, 0x7003, 0x0001, 0x0804, 0x7769, 0x2011, 0x1e00, 0x080c,\r
-+      0x2a44, 0x2009, 0x1e00, 0x080c, 0x29f0, 0x6024, 0x910c, 0x01c8,\r
-+      0x9084, 0x1c00, 0x11b0, 0x1d04, 0x7725, 0x0006, 0x0016, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x080c, 0x8592, 0x00ee, 0x00de, 0x00ce, 0x001e,\r
-+      0x000e, 0x00e6, 0x2071, 0x1a03, 0x7018, 0x00ee, 0x9005, 0x19e8,\r
-+      0x0500, 0x0026, 0x2011, 0x735f, 0x080c, 0x863e, 0x2011, 0x7352,\r
-+      0x080c, 0x874a, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b4,\r
-+      0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x196d,\r
-+      0x2004, 0x080c, 0x266f, 0x60e2, 0x2001, 0x180c, 0x200c, 0xc1b4,\r
-+      0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,\r
-+      0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6,\r
-+      0x2061, 0x0100, 0x2071, 0x1800, 0x080c, 0xcf4b, 0x1904, 0x77d7,\r
-+      0x7130, 0xd184, 0x1170, 0x080c, 0x3368, 0x0138, 0xc18d, 0x7132,\r
-+      0x2011, 0x1848, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, 0x0904,\r
-+      0x77d7, 0x2011, 0x1848, 0x220c, 0xd1a4, 0x0538, 0x0016, 0x2019,\r
-+      0x000e, 0x080c, 0xe239, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e,\r
-+      0x9186, 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, 0x080c, 0x6625,\r
-+      0x1170, 0x2120, 0x9006, 0x0016, 0x2009, 0x000e, 0x080c, 0xe2c9,\r
-+      0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x88ec, 0x001e, 0x8108,\r
-+      0x1f04, 0x77a0, 0x00be, 0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016,\r
-+      0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x31a6, 0x001e, 0x0078,\r
-+      0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x6625, 0x1110,\r
-+      0x080c, 0x6043, 0x8108, 0x1f04, 0x77cd, 0x00be, 0x015e, 0x080c,\r
-+      0x1adf, 0x080c, 0xa896, 0x080c, 0xab5e, 0x080c, 0xa8b2, 0x60e3,\r
-+      0x0000, 0x080c, 0x6029, 0x080c, 0x741a, 0x00ee, 0x00ce, 0x004e,\r
-+      0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x197d, 0x2003,\r
-+      0x0001, 0x0005, 0x2001, 0x197d, 0x2003, 0x0000, 0x0005, 0x2001,\r
-+      0x197c, 0x2003, 0xaaaa, 0x0005, 0x2001, 0x197c, 0x2003, 0x0000,\r
-+      0x0005, 0x2071, 0x18fa, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c,\r
-+      0x1053, 0x090c, 0x0d7d, 0xa8ab, 0xdcb0, 0x2900, 0x704e, 0x080c,\r
-+      0x1053, 0x090c, 0x0d7d, 0xa8ab, 0xdcb0, 0x2900, 0x7052, 0xa867,\r
-+      0x0000, 0xa86b, 0x0001, 0xa89f, 0x0000, 0x0005, 0x00e6, 0x2071,\r
-+      0x0040, 0x6848, 0x9005, 0x1118, 0x9085, 0x0001, 0x04b0, 0x6840,\r
-+      0x9005, 0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854, 0x9101,\r
-+      0x7006, 0x9006, 0x7012, 0x7016, 0x6850, 0x7002, 0x6854, 0x7006,\r
-+      0x6858, 0x700a, 0x685c, 0x700e, 0x6840, 0x9005, 0x1110, 0x7012,\r
-+      0x7016, 0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x2001,\r
-+      0x0019, 0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c, 0x918c,\r
-+      0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x18fa, 0x6807,\r
-+      0x0001, 0x00de, 0x080c, 0x7de4, 0x9006, 0x00ee, 0x0005, 0x900e,\r
-+      0x0156, 0x20a9, 0x0006, 0x8003, 0x818d, 0x1f04, 0x7863, 0x015e,\r
-+      0x0005, 0x2079, 0x0040, 0x2071, 0x18fa, 0x7004, 0x0002, 0x7879,\r
-+      0x787a, 0x78c5, 0x7920, 0x7a30, 0x7877, 0x7877, 0x7a5a, 0x080c,\r
-+      0x0d7d, 0x0005, 0x2079, 0x0040, 0x2001, 0x1dc0, 0x2003, 0x0000,\r
-+      0x782c, 0x908c, 0x0780, 0x190c, 0x7ec6, 0xd0a4, 0x0570, 0x2001,\r
-+      0x1dc0, 0x2004, 0x9082, 0x0080, 0x1640, 0x1d04, 0x7897, 0x2001,\r
-+      0x1a06, 0x200c, 0x8109, 0x0508, 0x2091, 0x6000, 0x2102, 0x7824,\r
-+      0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a,\r
-+      0x0040, 0x0608, 0x00b8, 0x2001, 0x1800, 0x200c, 0x9186, 0x0003,\r
-+      0x1160, 0x7104, 0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128,\r
-+      0x9186, 0x0003, 0x1968, 0x080c, 0x7920, 0x782c, 0xd09c, 0x090c,\r
-+      0x7de4, 0x0005, 0x9082, 0x005a, 0x1218, 0x2100, 0x003b, 0x0c18,\r
-+      0x080c, 0x7956, 0x0c90, 0x00e3, 0x08f0, 0x0005, 0x7956, 0x7956,\r
-+      0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7978, 0x7956,\r
-+      0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956,\r
-+      0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956,\r
-+      0x7956, 0x7956, 0x7962, 0x7956, 0x7b4b, 0x7956, 0x7956, 0x7956,\r
-+      0x7978, 0x7956, 0x7962, 0x7b8c, 0x7bcd, 0x7c14, 0x7c28, 0x7956,\r
-+      0x7956, 0x7978, 0x7962, 0x798c, 0x7956, 0x7a04, 0x7cd3, 0x7cee,\r
-+      0x7956, 0x7978, 0x7956, 0x798c, 0x7956, 0x7956, 0x79fa, 0x7cee,\r
-+      0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956,\r
-+      0x7956, 0x79a0, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956,\r
-+      0x7956, 0x7956, 0x7956, 0x7e6a, 0x7956, 0x7e14, 0x7956, 0x7e14,\r
-+      0x7956, 0x79b5, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956,\r
-+      0x2079, 0x0040, 0x7004, 0x9086, 0x0003, 0x1198, 0x782c, 0x080c,\r
-+      0x7e0d, 0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806,\r
-+      0xa864, 0x9084, 0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50,\r
-+      0x00e9, 0x080c, 0x7de4, 0x0005, 0x7956, 0x7962, 0x7b37, 0x7956,\r
-+      0x7962, 0x7956, 0x7962, 0x7962, 0x7956, 0x7962, 0x7b37, 0x7962,\r
-+      0x7962, 0x7962, 0x7962, 0x7962, 0x7956, 0x7962, 0x7b37, 0x7956,\r
-+      0x7956, 0x7962, 0x7956, 0x7956, 0x7956, 0x7962, 0x00e6, 0x2071,\r
-+      0x18fa, 0x2009, 0x0400, 0x0071, 0x00ee, 0x0005, 0x2009, 0x1000,\r
-+      0x0049, 0x0005, 0x2009, 0x2000, 0x0029, 0x0005, 0x2009, 0x0800,\r
-+      0x0009, 0x0005, 0x7007, 0x0001, 0xa868, 0x9084, 0x00ff, 0x9105,\r
-+      0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0x0005,\r
-+      0xa864, 0x8007, 0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007,\r
-+      0x0001, 0x0804, 0x7ad9, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016,\r
-+      0x701a, 0x704b, 0x7ad9, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff,\r
-+      0x0968, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7af4, 0x7007,\r
-+      0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7af4, 0x0005,\r
-+      0xa864, 0x8007, 0x9084, 0x00ff, 0x0904, 0x795e, 0x8001, 0x1120,\r
-+      0x7007, 0x0001, 0x0804, 0x7b10, 0x7007, 0x0003, 0x7012, 0x2900,\r
-+      0x7016, 0x701a, 0x704b, 0x7b10, 0x0005, 0xa864, 0x8007, 0x9084,\r
-+      0x00ff, 0x9086, 0x0001, 0x1904, 0x795e, 0x7007, 0x0001, 0x2009,\r
-+      0x1834, 0x210c, 0x81ff, 0x11a8, 0xa868, 0x9084, 0x00ff, 0xa86a,\r
-+      0xa883, 0x0000, 0x080c, 0x62b9, 0x1108, 0x0005, 0x0126, 0x2091,\r
-+      0x8000, 0xa867, 0x0139, 0xa87a, 0xa982, 0x080c, 0x6d80, 0x012e,\r
-+      0x0ca0, 0xa994, 0x9186, 0x0071, 0x0d38, 0x9186, 0x0064, 0x0d20,\r
-+      0x9186, 0x007c, 0x0d08, 0x9186, 0x0028, 0x09f0, 0x9186, 0x0038,\r
-+      0x09d8, 0x9186, 0x0078, 0x09c0, 0x9186, 0x005f, 0x09a8, 0x9186,\r
-+      0x0056, 0x0990, 0xa897, 0x4005, 0xa89b, 0x0001, 0x2001, 0x0030,\r
-+      0x900e, 0x08a0, 0xa87c, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120,\r
-+      0x7007, 0x0001, 0x0804, 0x7d05, 0x2900, 0x7016, 0x701a, 0x20a9,\r
-+      0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0030, 0x2098, 0x7050,\r
-+      0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080, 0x0023, 0x20a0, 0x4003,\r
-+      0xa888, 0x7012, 0x9082, 0x0401, 0x1a04, 0x7966, 0xaab4, 0x928a,\r
-+      0x0002, 0x1a04, 0x7966, 0x82ff, 0x1138, 0xa8b8, 0xa9bc, 0x9105,\r
-+      0x0118, 0x2001, 0x7a97, 0x0018, 0x9280, 0x7a8d, 0x2005, 0x7056,\r
-+      0x7010, 0x9015, 0x0904, 0x7a78, 0x080c, 0x1053, 0x1118, 0x7007,\r
-+      0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa866,\r
-+      0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, 0xa076, 0xa860, 0xa072,\r
-+      0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003,\r
-+      0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17a, 0x810b, 0xa17e,\r
-+      0x080c, 0x1124, 0xa06c, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200,\r
-+      0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x106c,\r
-+      0x7014, 0x2048, 0x0804, 0x7966, 0x7020, 0x2048, 0x7018, 0xa802,\r
-+      0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x7a30,\r
-+      0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005, 0x1128, 0xa8b8,\r
-+      0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864, 0x9084, 0x00ff, 0x9086,\r
-+      0x001e, 0x0904, 0x7d05, 0x0804, 0x7ad9, 0x7a8f, 0x7a93, 0x0002,\r
-+      0x001d, 0x0007, 0x0004, 0x000a, 0x001b, 0x0005, 0x0006, 0x000a,\r
-+      0x001d, 0x0005, 0x0004, 0x0076, 0x0066, 0xafb8, 0xaebc, 0xa804,\r
-+      0x2050, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0de, 0xb0b8, 0xb0d2, 0xb0b4,\r
-+      0xb0ce, 0xb6da, 0xb7d6, 0xb0b0, 0xb0ca, 0xb0ac, 0xb0c6, 0xb0a8,\r
-+      0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2, 0xb7be, 0xb0a0, 0xb0b2, 0xb09c,\r
-+      0xb0ae, 0xb098, 0xb0a2, 0xb094, 0xb09e, 0xb6aa, 0xb7a6, 0xb090,\r
-+      0xb09a, 0xb08c, 0xb096, 0xb088, 0xb08a, 0xb084, 0xb086, 0xb692,\r
-+      0xb78e, 0xb080, 0xb082, 0xb07c, 0xb07e, 0xb078, 0xb072, 0xb074,\r
-+      0xb06e, 0xb67a, 0xb776, 0xb004, 0x9055, 0x1958, 0x006e, 0x007e,\r
-+      0x0005, 0x2009, 0x1834, 0x210c, 0x81ff, 0x1178, 0x080c, 0x60bb,\r
-+      0x1108, 0x0005, 0x080c, 0x6fc0, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0xcb36, 0x080c, 0x6d80, 0x012e, 0x0ca0, 0x080c, 0xcf4b, 0x1d70,\r
-+      0x2001, 0x0028, 0x900e, 0x0c70, 0x2009, 0x1834, 0x210c, 0x81ff,\r
-+      0x1188, 0xa888, 0x9005, 0x0188, 0xa883, 0x0000, 0x080c, 0x6149,\r
-+      0x1108, 0x0005, 0xa87a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80,\r
-+      0x012e, 0x0cb8, 0x2001, 0x0028, 0x0ca8, 0x2001, 0x0000, 0x0c90,\r
-+      0x2009, 0x1834, 0x210c, 0x81ff, 0x11d8, 0xa888, 0x9005, 0x01e0,\r
-+      0xa883, 0x0000, 0xa87c, 0xd0f4, 0x0120, 0x080c, 0x621b, 0x1138,\r
-+      0x0005, 0x9006, 0xa87a, 0x080c, 0x6196, 0x1108, 0x0005, 0x0126,\r
-+      0x2091, 0x8000, 0xa87a, 0xa982, 0x080c, 0x6d80, 0x012e, 0x0cb0,\r
-+      0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, 0x0c80, 0x7018,\r
-+      0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010, 0x8001, 0x7012,\r
-+      0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048, 0x7007, 0x0001,\r
-+      0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, 0xa974, 0xa878,\r
-+      0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, 0x0001, 0x9096,\r
-+      0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, 0x0002, 0x0160,\r
-+      0x9005, 0x11d8, 0xa974, 0x080c, 0x6625, 0x11b8, 0x0066, 0xae80,\r
-+      0x080c, 0x6735, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, 0x2224,\r
-+      0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x6625, 0x1110, 0x080c,\r
-+      0x6904, 0x8108, 0x1f04, 0x7b74, 0x00ce, 0xa87c, 0xd084, 0x1120,\r
-+      0x080c, 0x106c, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x6d80, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x7007,\r
-+      0x0001, 0x080c, 0x6a67, 0x0580, 0x2061, 0x1a6f, 0x6100, 0xd184,\r
-+      0x0178, 0xa888, 0x9084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520,\r
-+      0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8,\r
-+      0x2011, 0x0001, 0xa890, 0x9005, 0x1110, 0x2001, 0x001e, 0x8000,\r
-+      0x6016, 0xa888, 0x9084, 0x00ff, 0x0178, 0x6006, 0xa888, 0x8007,\r
-+      0x9084, 0x00ff, 0x0148, 0x600a, 0xa888, 0x8000, 0x1108, 0xc28d,\r
-+      0x6202, 0x012e, 0x0804, 0x7dce, 0x012e, 0x0804, 0x7dc8, 0x012e,\r
-+      0x0804, 0x7dc2, 0x012e, 0x0804, 0x7dc5, 0x0126, 0x2091, 0x8000,\r
-+      0x7007, 0x0001, 0x080c, 0x6a67, 0x05e0, 0x2061, 0x1a6f, 0x6000,\r
-+      0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0xac78, 0x9484,\r
-+      0x0003, 0x0170, 0xa988, 0x918c, 0x00ff, 0x8001, 0x1120, 0x2100,\r
-+      0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0x9212, 0x02f0,\r
-+      0x9484, 0x000c, 0x0188, 0xa988, 0x810f, 0x918c, 0x00ff, 0x9082,\r
-+      0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030, 0x9082, 0x0004,\r
-+      0x1168, 0x2100, 0x931a, 0x0250, 0xa890, 0x9005, 0x0110, 0x8000,\r
-+      0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x7dce, 0x012e, 0x0804,\r
-+      0x7dcb, 0x012e, 0x0804, 0x7dc8, 0x0126, 0x2091, 0x8000, 0x7007,\r
-+      0x0001, 0x2061, 0x1a6f, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318,\r
-+      0x0220, 0x630a, 0x012e, 0x0804, 0x7ddc, 0x012e, 0x0804, 0x7dcb,\r
-+      0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c,\r
-+      0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a6f, 0x6000, 0x9084, 0xfcff,\r
-+      0x6002, 0x00ce, 0x0440, 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065,\r
-+      0x0598, 0x2001, 0x1834, 0x2004, 0x9005, 0x0118, 0x080c, 0xac28,\r
-+      0x0068, 0x6017, 0xf400, 0x6063, 0x0000, 0xa97c, 0xd1a4, 0x0110,\r
-+      0xa980, 0x6162, 0x2009, 0x0041, 0x080c, 0xac8c, 0xa988, 0x918c,\r
-+      0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff,\r
-+      0x080c, 0x88ec, 0x002e, 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a6f,\r
-+      0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce,\r
-+      0x012e, 0x00be, 0x0804, 0x7dce, 0x00ce, 0x012e, 0x00be, 0x0804,\r
-+      0x7dc8, 0xa984, 0x9186, 0x002e, 0x0d30, 0x9186, 0x002d, 0x0d18,\r
-+      0x9186, 0x0045, 0x0510, 0x9186, 0x002a, 0x1130, 0x2001, 0x180c,\r
-+      0x200c, 0xc194, 0x2102, 0x08b8, 0x9186, 0x0020, 0x0158, 0x9186,\r
-+      0x0029, 0x1d10, 0xa974, 0x080c, 0x6625, 0x1968, 0xb800, 0xc0e4,\r
-+      0xb802, 0x0848, 0xa88c, 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001,\r
-+      0x1986, 0x2004, 0x601a, 0x0804, 0x7c63, 0xa88c, 0x9065, 0x0960,\r
-+      0x00e6, 0xa890, 0x9075, 0x2001, 0x1834, 0x2004, 0x9005, 0x0150,\r
-+      0x080c, 0xac28, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xac28, 0x00ee,\r
-+      0x0804, 0x7c63, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007,\r
-+      0x003a, 0xa8a0, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e,\r
-+      0xa8a8, 0x6016, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e,\r
-+      0x00ee, 0x0804, 0x7c63, 0x2061, 0x1a6f, 0x6000, 0xd084, 0x0190,\r
-+      0xd08c, 0x1904, 0x7ddc, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210,\r
-+      0x0220, 0x6206, 0x012e, 0x0804, 0x7ddc, 0x012e, 0xa883, 0x0016,\r
-+      0x0804, 0x7dd5, 0xa883, 0x0007, 0x0804, 0x7dd5, 0xa864, 0x8007,\r
-+      0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069,\r
-+      0x0005, 0x080c, 0x795e, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900,\r
-+      0x7016, 0x701a, 0x704b, 0x7d05, 0x0005, 0x00b6, 0x00e6, 0x0126,\r
-+      0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61d0, 0x81ff, 0x1904,\r
-+      0x7d87, 0x6130, 0xd194, 0x1904, 0x7db1, 0xa878, 0x2070, 0x9e82,\r
-+      0x1ddc, 0x0a04, 0x7d7b, 0x6068, 0x9e02, 0x1a04, 0x7d7b, 0x7120,\r
-+      0x9186, 0x0006, 0x1904, 0x7d6d, 0x7010, 0x905d, 0x0904, 0x7d87,\r
-+      0xb800, 0xd0e4, 0x1904, 0x7dab, 0x2061, 0x1a6f, 0x6100, 0x9184,\r
-+      0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x7db4,\r
-+      0xa883, 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, 0x1198,\r
-+      0x7116, 0xa87c, 0xd0f4, 0x1904, 0x7db7, 0x080c, 0x56da, 0xd09c,\r
-+      0x1118, 0xa87c, 0xc0cc, 0xa87e, 0x2e60, 0x080c, 0x87df, 0x012e,\r
-+      0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902,\r
-+      0x2148, 0xa87c, 0xd0f4, 0x1904, 0x7db7, 0x012e, 0x00ee, 0x00be,\r
-+      0x0005, 0x012e, 0x00ee, 0xa883, 0x0006, 0x00be, 0x0804, 0x7dd5,\r
-+      0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa974, 0x080c, 0x6625,\r
-+      0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118,\r
-+      0xa883, 0x0002, 0x0490, 0xa883, 0x0008, 0x0478, 0xa883, 0x000e,\r
-+      0x0460, 0xa883, 0x0017, 0x0448, 0xa883, 0x0035, 0x0430, 0x080c,\r
-+      0x56de, 0xd0fc, 0x01e8, 0xa878, 0x2070, 0x9e82, 0x1ddc, 0x02c0,\r
-+      0x6068, 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, 0x7010,\r
-+      0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000,\r
-+      0x9086, 0x0007, 0x1904, 0x7d11, 0x7003, 0x0002, 0x0804, 0x7d11,\r
-+      0xa883, 0x0028, 0x0010, 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be,\r
-+      0x0420, 0xa883, 0x002a, 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60,\r
-+      0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xde1b, 0x012e, 0x00ee,\r
-+      0x00be, 0x0005, 0x2009, 0x003e, 0x0058, 0x2009, 0x0004, 0x0040,\r
-+      0x2009, 0x0006, 0x0028, 0x2009, 0x0016, 0x0010, 0x2009, 0x0001,\r
-+      0xa884, 0x9084, 0xff00, 0x9105, 0xa886, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x6d80, 0x012e, 0x0005, 0x080c, 0x106c, 0x0005, 0x00d6,\r
-+      0x080c, 0x87d6, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091,\r
-+      0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780,\r
-+      0x190c, 0x7ec6, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70c0, 0x90ea,\r
-+      0x0020, 0x0278, 0x8001, 0x70c2, 0x702c, 0x2048, 0xa800, 0x702e,\r
-+      0x9006, 0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022, 0x702c,\r
-+      0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084, 0x0780,\r
-+      0x190c, 0x7ec6, 0x000e, 0x0005, 0xa898, 0x9084, 0x0003, 0x05a8,\r
-+      0x080c, 0xab97, 0x05d8, 0x2900, 0x6016, 0xa864, 0x9084, 0x00ff,\r
-+      0x9086, 0x0035, 0x1138, 0x6028, 0xc0fd, 0x602a, 0x2001, 0x196b,\r
-+      0x2004, 0x0098, 0xa8a0, 0x9084, 0x00ff, 0xa99c, 0x918c, 0xff00,\r
-+      0x9105, 0xa99c, 0x918c, 0x00ff, 0x080c, 0x25fb, 0x1540, 0x00b6,\r
-+      0x080c, 0x6625, 0x2b00, 0x00be, 0x1510, 0x6012, 0x6023, 0x0001,\r
-+      0x2009, 0x0040, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0035, 0x0110,\r
-+      0x2009, 0x0041, 0x080c, 0xac8c, 0x0005, 0xa87b, 0x0101, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0x0005, 0xa87b, 0x002c,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0x0005, 0xa87b,\r
-+      0x0028, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0x080c,\r
-+      0xabed, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6,\r
-+      0x7007, 0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04, 0x7eb7, 0xa97c,\r
-+      0x9188, 0x1000, 0x2104, 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8,\r
-+      0x8007, 0x9084, 0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10,\r
-+      0x080c, 0xab97, 0x1118, 0x080c, 0xac5f, 0x05a8, 0x6212, 0xa874,\r
-+      0x0002, 0x7e95, 0x7e9a, 0x7e9d, 0x7ea3, 0x2019, 0x0002, 0x080c,\r
-+      0xe239, 0x0060, 0x080c, 0xe1c9, 0x0048, 0x2019, 0x0002, 0xa980,\r
-+      0x080c, 0xe1e8, 0x0018, 0xa980, 0x080c, 0xe1c9, 0x080c, 0xabed,\r
-+      0xa887, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e,\r
-+      0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de, 0x0005, 0xa887,\r
-+      0x0006, 0x0c80, 0xa887, 0x0002, 0x0c68, 0xa887, 0x0005, 0x0c50,\r
-+      0xa887, 0x0004, 0x0c38, 0xa887, 0x0007, 0x0c20, 0x2091, 0x8000,\r
-+      0x0e04, 0x7ec8, 0x0006, 0x0016, 0x2001, 0x8003, 0x0006, 0x0804,\r
-+      0x0d86, 0x2001, 0x1834, 0x2004, 0x9005, 0x0005, 0x0005, 0x00f6,\r
-+      0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102,\r
-+      0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c, 0x1608, 0x00fe,\r
-+      0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f, 0x0300, 0x00fe,\r
-+      0x0005, 0x781c, 0xd08c, 0x0904, 0x7f49, 0x68c0, 0x90aa, 0x0005,\r
-+      0x0a04, 0x854a, 0x7d44, 0x7c40, 0xd59c, 0x190c, 0x0d7d, 0x9584,\r
-+      0x00f6, 0x1508, 0x9484, 0x7000, 0x0138, 0x908a, 0x2000, 0x1258,\r
-+      0x9584, 0x0700, 0x8007, 0x04f0, 0x7000, 0x9084, 0xff00, 0x9086,\r
-+      0x8100, 0x0db0, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084,\r
-+      0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xe6da, 0x080c, 0x8441,\r
-+      0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x849d,\r
-+      0x19c8, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x7f99, 0x080c,\r
-+      0x2115, 0x005e, 0x004e, 0x0020, 0x080c, 0xe6da, 0x7817, 0x0140,\r
-+      0x080c, 0x74e9, 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140,\r
-+      0x6893, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000,\r
-+      0x0489, 0x0005, 0x0002, 0x7f56, 0x8263, 0x7f53, 0x7f53, 0x7f53,\r
-+      0x7f53, 0x7f53, 0x7f53, 0x7817, 0x0140, 0x0005, 0x7000, 0x908c,\r
-+      0xff00, 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x6892, 0x9286,\r
-+      0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x573b,\r
-+      0x0070, 0x080c, 0x7fb9, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c,\r
-+      0x81a0, 0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x8377, 0x7817,\r
-+      0x0140, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178, 0x2001,\r
-+      0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011,\r
-+      0x8048, 0x2518, 0x080c, 0x4b07, 0x003e, 0x002e, 0x0005, 0x0036,\r
-+      0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30,\r
-+      0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44,\r
-+      0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0160,\r
-+      0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026, 0x2011,\r
-+      0x8048, 0x080c, 0x4b07, 0x002e, 0x00fe, 0x005e, 0x004e, 0x003e,\r
-+      0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, 0x9096,\r
-+      0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x8171, 0x9186, 0x0023,\r
-+      0x15c0, 0x080c, 0x840c, 0x0904, 0x8171, 0x6120, 0x9186, 0x0001,\r
-+      0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186,\r
-+      0x000a, 0x1904, 0x8171, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200,\r
-+      0x1130, 0x2009, 0x0015, 0x080c, 0xac8c, 0x0804, 0x8171, 0x908e,\r
-+      0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c,\r
-+      0xac8c, 0x0804, 0x8171, 0x908e, 0x0100, 0x1904, 0x8171, 0x7034,\r
-+      0x9005, 0x1904, 0x8171, 0x2009, 0x0016, 0x080c, 0xac8c, 0x0804,\r
-+      0x8171, 0x9186, 0x0022, 0x1904, 0x8171, 0x7030, 0x908e, 0x0300,\r
-+      0x1580, 0x68dc, 0xd0a4, 0x0528, 0xc0b5, 0x68de, 0x7100, 0x918c,\r
-+      0x00ff, 0x697e, 0x7004, 0x6882, 0x00f6, 0x2079, 0x0100, 0x79e6,\r
-+      0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x2644,\r
-+      0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x25fb, 0x695e,\r
-+      0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b6,\r
-+      0x00ee, 0x7034, 0x9005, 0x1904, 0x8171, 0x2009, 0x0017, 0x0804,\r
-+      0x8121, 0x908e, 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x8171,\r
-+      0x080c, 0x74e9, 0x0120, 0x2009, 0x001d, 0x0804, 0x8121, 0x68dc,\r
-+      0xc0a5, 0x68de, 0x2009, 0x0030, 0x0804, 0x8121, 0x908e, 0x0500,\r
-+      0x1140, 0x7034, 0x9005, 0x1904, 0x8171, 0x2009, 0x0018, 0x0804,\r
-+      0x8121, 0x908e, 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x8121,\r
-+      0x908e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804, 0x8121, 0x908e,\r
-+      0x5200, 0x1140, 0x7034, 0x9005, 0x1904, 0x8171, 0x2009, 0x001b,\r
-+      0x0804, 0x8121, 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904,\r
-+      0x8171, 0x2009, 0x001c, 0x0804, 0x8121, 0x908e, 0x1300, 0x1120,\r
-+      0x2009, 0x0034, 0x0804, 0x8121, 0x908e, 0x1200, 0x1140, 0x7034,\r
-+      0x9005, 0x1904, 0x8171, 0x2009, 0x0024, 0x0804, 0x8121, 0x908c,\r
-+      0xff00, 0x918e, 0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810,\r
-+      0x2004, 0xd09c, 0x0904, 0x8121, 0x080c, 0xd64f, 0x1904, 0x8171,\r
-+      0x0804, 0x811f, 0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009,\r
-+      0x002a, 0x0804, 0x8121, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020,\r
-+      0x0804, 0x8121, 0x908e, 0x6104, 0x1530, 0x2029, 0x0205, 0x2011,\r
-+      0x026d, 0x8208, 0x2204, 0x9082, 0x0004, 0x8004, 0x8004, 0x20a8,\r
-+      0x2011, 0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x4b07,\r
-+      0x004e, 0x8108, 0x0f04, 0x80d5, 0x9186, 0x0280, 0x1d88, 0x2504,\r
-+      0x8000, 0x202a, 0x2009, 0x0260, 0x0c58, 0x202b, 0x0000, 0x2009,\r
-+      0x0023, 0x0804, 0x8121, 0x908e, 0x6000, 0x1120, 0x2009, 0x003f,\r
-+      0x0804, 0x8121, 0x908e, 0x5400, 0x1138, 0x080c, 0x84fa, 0x1904,\r
-+      0x8171, 0x2009, 0x0046, 0x04a8, 0x908e, 0x5500, 0x1148, 0x080c,\r
-+      0x8522, 0x1118, 0x2009, 0x0041, 0x0460, 0x2009, 0x0042, 0x0448,\r
-+      0x908e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0418, 0x908e, 0x1000,\r
-+      0x1118, 0x2009, 0x004e, 0x00e8, 0x908e, 0x6300, 0x1118, 0x2009,\r
-+      0x004a, 0x00b8, 0x908c, 0xff00, 0x918e, 0x5600, 0x1118, 0x2009,\r
-+      0x004f, 0x0078, 0x908c, 0xff00, 0x918e, 0x5700, 0x1118, 0x2009,\r
-+      0x0050, 0x0038, 0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110, 0x2009,\r
-+      0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,\r
-+      0x25fb, 0x1904, 0x8174, 0x080c, 0x65c4, 0x1904, 0x8174, 0xbe12,\r
-+      0xbd16, 0x001e, 0x0016, 0x080c, 0x74e9, 0x01c0, 0x68dc, 0xd08c,\r
-+      0x1148, 0x7000, 0x9084, 0x00ff, 0x1188, 0x7004, 0x9084, 0xff00,\r
-+      0x1168, 0x0040, 0x687c, 0x9606, 0x1148, 0x6880, 0x9506, 0x9084,\r
-+      0xff00, 0x1120, 0x9584, 0x00ff, 0xb886, 0x0080, 0xb884, 0x9005,\r
-+      0x1168, 0x9186, 0x0046, 0x1150, 0x687c, 0x9606, 0x1138, 0x6880,\r
-+      0x9506, 0x9084, 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0xab97,\r
-+      0x01a8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e,\r
-+      0x9186, 0x004c, 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c,\r
-+      0xac8c, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180e,\r
-+      0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b07, 0x080c,\r
-+      0xac5f, 0x0d90, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a,\r
-+      0x001e, 0x0016, 0x9186, 0x0017, 0x0118, 0x9186, 0x0030, 0x1128,\r
-+      0x6007, 0x0009, 0x6017, 0x2900, 0x0020, 0x6007, 0x0051, 0x6017,\r
-+      0x0000, 0x602f, 0x0009, 0x6003, 0x0001, 0x080c, 0x9225, 0x08a0,\r
-+      0x080c, 0x3332, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007, 0x908e,\r
-+      0x0008, 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000,\r
-+      0x908c, 0xff00, 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, 0x840c,\r
-+      0x0904, 0x81fb, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1140,\r
-+      0x7034, 0x9005, 0x15c0, 0x2009, 0x0015, 0x080c, 0xac8c, 0x0498,\r
-+      0x908e, 0x0100, 0x1580, 0x7034, 0x9005, 0x1568, 0x2009, 0x0016,\r
-+      0x080c, 0xac8c, 0x0440, 0x9186, 0x0032, 0x1528, 0x7030, 0x908e,\r
-+      0x1400, 0x1508, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204,\r
-+      0x8211, 0x220c, 0x080c, 0x25fb, 0x11a8, 0x080c, 0x65c4, 0x1190,\r
-+      0xbe12, 0xbd16, 0x080c, 0xab97, 0x0168, 0x2b08, 0x6112, 0x080c,\r
-+      0xcccc, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0xac8c,\r
-+      0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, 0x00b6,\r
-+      0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, 0x11b8,\r
-+      0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, 0x007f,\r
-+      0x0804, 0x825d, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804,\r
-+      0x825d, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011,\r
-+      0x0000, 0x2019, 0x1837, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9,\r
-+      0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x077f,\r
-+      0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, 0x11d0,\r
-+      0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, 0x2600,\r
-+      0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, 0x9745,\r
-+      0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, 0x94c6,\r
-+      0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x8232, 0x82ff, 0x1118,\r
-+      0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee,\r
-+      0x004e, 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184,\r
-+      0x000f, 0x0002, 0x827a, 0x827a, 0x827a, 0x841e, 0x827a, 0x827d,\r
-+      0x82a2, 0x832b, 0x827a, 0x827a, 0x827a, 0x827a, 0x827a, 0x827a,\r
-+      0x827a, 0x827a, 0x7817, 0x0140, 0x0005, 0x00b6, 0x7110, 0xd1bc,\r
-+      0x01e8, 0x7120, 0x2160, 0x9c8c, 0x0003, 0x11c0, 0x9c8a, 0x1ddc,\r
-+      0x02a8, 0x6868, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110,\r
-+      0x2158, 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130,\r
-+      0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0xac8c, 0x7817, 0x0140,\r
-+      0x00be, 0x0005, 0x00b6, 0x00c6, 0x9484, 0x0fff, 0x0904, 0x8307,\r
-+      0x7110, 0xd1bc, 0x1904, 0x8307, 0x7108, 0x700c, 0x2028, 0x918c,\r
-+      0x00ff, 0x2130, 0x9094, 0xff00, 0x15c8, 0x81ff, 0x15b8, 0x9080,\r
-+      0x3374, 0x200d, 0x918c, 0xff00, 0x810f, 0x2001, 0x0080, 0x9106,\r
-+      0x0904, 0x8307, 0x9182, 0x0801, 0x1a04, 0x8307, 0x9190, 0x1000,\r
-+      0x2204, 0x905d, 0x05e0, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15b8,\r
-+      0xba04, 0x9294, 0xff00, 0x9286, 0x0600, 0x1190, 0x080c, 0xab97,\r
-+      0x0598, 0x2b08, 0x7028, 0x6052, 0x702c, 0x604e, 0x6112, 0x6023,\r
-+      0x0006, 0x7120, 0x610a, 0x7130, 0x615e, 0x080c, 0xd8b5, 0x00f8,\r
-+      0x080c, 0x6a6b, 0x1138, 0xb807, 0x0606, 0x0c40, 0x190c, 0x81ff,\r
-+      0x11b0, 0x0880, 0x080c, 0xab97, 0x2b08, 0x0188, 0x6112, 0x6023,\r
-+      0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, 0x0005,\r
-+      0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9225, 0x7817,\r
-+      0x0140, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0ec,\r
-+      0x0120, 0x2011, 0x8049, 0x080c, 0x4b07, 0x080c, 0xac5f, 0x0d78,\r
-+      0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x615e,\r
-+      0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, 0xa022,\r
-+      0x080c, 0x921e, 0x08e0, 0x00b6, 0x7110, 0xd1bc, 0x05d0, 0x7020,\r
-+      0x2060, 0x9c84, 0x0003, 0x15a8, 0x9c82, 0x1ddc, 0x0690, 0x6868,\r
-+      0x9c02, 0x1678, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0650, 0x7008,\r
-+      0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1510, 0x700c,\r
-+      0xb914, 0x9106, 0x11f0, 0x7124, 0x610a, 0x601c, 0xd0fc, 0x11c8,\r
-+      0x2001, 0x0271, 0x2004, 0x9005, 0x1180, 0x9484, 0x0fff, 0x9082,\r
-+      0x000c, 0x0158, 0x0066, 0x2031, 0x0100, 0xa001, 0xa001, 0x8631,\r
-+      0x1de0, 0x006e, 0x601c, 0xd0fc, 0x1120, 0x2009, 0x0045, 0x080c,\r
-+      0xac8c, 0x7817, 0x0140, 0x00be, 0x0005, 0x6120, 0x9186, 0x0002,\r
-+      0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005, 0x080c,\r
-+      0x3332, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000,\r
-+      0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, 0x0005,\r
-+      0x838e, 0x838f, 0x838e, 0x838e, 0x83ee, 0x83fd, 0x0005, 0x00b6,\r
-+      0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x83ec, 0x700c,\r
-+      0x7108, 0x080c, 0x25fb, 0x1904, 0x83ec, 0x080c, 0x65c4, 0x1904,\r
-+      0x83ec, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c, 0x6a6b,\r
-+      0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x840c, 0x00ce,\r
-+      0x05d8, 0x080c, 0xab97, 0x2b08, 0x05b8, 0x6112, 0x080c, 0xcccc,\r
-+      0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xac8c,\r
-+      0x0458, 0x080c, 0x6a6b, 0x0148, 0x9086, 0x0004, 0x0130, 0x080c,\r
-+      0x6a73, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0xab97, 0x2b08,\r
-+      0x01d8, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0005, 0x7120, 0x610a,\r
-+      0x2009, 0x0088, 0x080c, 0xac8c, 0x0078, 0x080c, 0xab97, 0x2b08,\r
-+      0x0158, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0004, 0x7120, 0x610a,\r
-+      0x2009, 0x0001, 0x080c, 0xac8c, 0x00be, 0x0005, 0x7110, 0xd1bc,\r
-+      0x0158, 0x00d1, 0x0148, 0x080c, 0x836d, 0x1130, 0x7124, 0x610a,\r
-+      0x2009, 0x0089, 0x080c, 0xac8c, 0x0005, 0x7110, 0xd1bc, 0x0158,\r
-+      0x0059, 0x0148, 0x080c, 0x836d, 0x1130, 0x7124, 0x610a, 0x2009,\r
-+      0x008a, 0x080c, 0xac8c, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0003,\r
-+      0x1158, 0x9c82, 0x1ddc, 0x0240, 0x2001, 0x181a, 0x2004, 0x9c02,\r
-+      0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110,\r
-+      0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0003, 0x11b0, 0x9c82,\r
-+      0x1ddc, 0x0298, 0x6868, 0x9c02, 0x1280, 0x7008, 0x9084, 0x00ff,\r
-+      0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914, 0x9106,\r
-+      0x1120, 0x2009, 0x0051, 0x080c, 0xac8c, 0x7817, 0x0140, 0x00be,\r
-+      0x0005, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049,\r
-+      0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009,\r
-+      0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086,\r
-+      0xc000, 0x05c0, 0x080c, 0xab97, 0x05a8, 0x0066, 0x00c6, 0x0046,\r
-+      0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x1590,\r
-+      0x080c, 0x65c4, 0x1578, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce,\r
-+      0x6012, 0x080c, 0xcccc, 0x080c, 0x103a, 0x0500, 0x2900, 0x6062,\r
-+      0x9006, 0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b, 0x20a9,\r
-+      0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003,\r
-+      0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001,\r
-+      0x080c, 0x9225, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c, 0xabed,\r
-+      0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, 0x908c,\r
-+      0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904, 0x84f4,\r
-+      0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005, 0x1904,\r
-+      0x84f6, 0x7030, 0x908e, 0x0400, 0x0904, 0x84f6, 0x908e, 0x6000,\r
-+      0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8, 0x2009,\r
-+      0x1837, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c, 0x6a29,\r
-+      0x0558, 0x68b0, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff, 0x9106,\r
-+      0x1518, 0x6880, 0x69b0, 0x918c, 0xff00, 0x9105, 0x7104, 0x9106,\r
-+      0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4, 0x11a8, 0x908e,\r
-+      0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e, 0x5000, 0x09b8,\r
-+      0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x840c, 0x0128, 0x6004,\r
-+      0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085, 0x0001,\r
-+      0x00ce, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020,\r
-+      0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019,\r
-+      0x1805, 0x2011, 0x027a, 0x080c, 0xbbae, 0x1178, 0xd48c, 0x0148,\r
-+      0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x027e, 0x080c, 0xbbae,\r
-+      0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e,\r
-+      0x015e, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020,\r
-+      0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019,\r
-+      0x1805, 0x2011, 0x0272, 0x080c, 0xbbae, 0x1178, 0xd48c, 0x0148,\r
-+      0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x0276, 0x080c, 0xbbae,\r
-+      0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e,\r
-+      0x015e, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5, 0xc0cc,\r
-+      0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834, 0xd084,\r
-+      0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200, 0x7802, 0x00fe,\r
-+      0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036, 0x00ee,\r
-+      0x0005, 0x2071, 0x1a03, 0x7003, 0x0003, 0x700f, 0x0361, 0x9006,\r
-+      0x701a, 0x7072, 0x7012, 0x7017, 0x1ddc, 0x7007, 0x0000, 0x7026,\r
-+      0x702b, 0x9e54, 0x7032, 0x7037, 0x9ed1, 0x703f, 0xffff, 0x7042,\r
-+      0x7047, 0x5571, 0x704a, 0x705b, 0x8711, 0x080c, 0x1053, 0x090c,\r
-+      0x0d7d, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100, 0xa8ab,\r
-+      0xdcb0, 0x0005, 0x2071, 0x1a03, 0x1d04, 0x862d, 0x2091, 0x6000,\r
-+      0x700c, 0x8001, 0x700e, 0x1590, 0x2001, 0x013c, 0x2004, 0x9005,\r
-+      0x190c, 0x87bb, 0x2001, 0x1869, 0x2004, 0xd0c4, 0x0158, 0x3a00,\r
-+      0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000,\r
-+      0x080c, 0x0d7d, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091,\r
-+      0x8000, 0x2069, 0x1800, 0x69ec, 0xd1e4, 0x1138, 0xd1dc, 0x1118,\r
-+      0x080c, 0x877f, 0x0010, 0x080c, 0x8756, 0x7040, 0x900d, 0x0148,\r
-+      0x8109, 0x7142, 0x1130, 0x7044, 0x080f, 0x0018, 0x0126, 0x2091,\r
-+      0x8000, 0x7024, 0x900d, 0x0188, 0x7020, 0x8001, 0x7022, 0x1168,\r
-+      0x7023, 0x0009, 0x8109, 0x7126, 0x9186, 0x03e8, 0x1110, 0x7028,\r
-+      0x080f, 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030, 0x900d, 0x0180,\r
-+      0x702c, 0x8001, 0x702e, 0x1160, 0x702f, 0x0009, 0x8109, 0x7132,\r
-+      0x0128, 0x9184, 0x007f, 0x090c, 0x9f6d, 0x0010, 0x7034, 0x080f,\r
-+      0x703c, 0x9005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0x900d,\r
-+      0x0168, 0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109,\r
-+      0x714e, 0x1120, 0x7150, 0x714e, 0x7058, 0x080f, 0x7018, 0x900d,\r
-+      0x01d8, 0x0016, 0x7070, 0x900d, 0x0158, 0x706c, 0x8001, 0x706e,\r
-+      0x1138, 0x706f, 0x0009, 0x8109, 0x7172, 0x1110, 0x7074, 0x080f,\r
-+      0x001e, 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109,\r
-+      0x711a, 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x8655,\r
-+      0x8656, 0x8680, 0x00e6, 0x2071, 0x1a03, 0x7018, 0x9005, 0x1120,\r
-+      0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006,\r
-+      0x2071, 0x1a03, 0x701c, 0x9206, 0x1120, 0x701a, 0x701e, 0x7072,\r
-+      0x7076, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1a03, 0xb888,\r
-+      0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005, 0x00b6, 0x2031,\r
-+      0x0010, 0x7110, 0x080c, 0x6625, 0x11a8, 0xb888, 0x8001, 0x0290,\r
-+      0xb88a, 0x1180, 0x0126, 0x2091, 0x8000, 0x0066, 0xb8d0, 0x9005,\r
-+      0x0138, 0x0026, 0xba3c, 0x0016, 0x080c, 0x6750, 0x001e, 0x002e,\r
-+      0x006e, 0x012e, 0x8108, 0x9182, 0x0800, 0x1220, 0x8631, 0x0128,\r
-+      0x7112, 0x0c00, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005,\r
-+      0x2031, 0x0010, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6048,\r
-+      0x9005, 0x0128, 0x8001, 0x604a, 0x1110, 0x080c, 0xcb4d, 0x6018,\r
-+      0x9005, 0x0904, 0x86d8, 0x00f6, 0x2079, 0x0300, 0x7918, 0xd1b4,\r
-+      0x1904, 0x86eb, 0x781b, 0x2020, 0xa001, 0x7918, 0xd1b4, 0x0120,\r
-+      0x781b, 0x2000, 0x0804, 0x86eb, 0x8001, 0x601a, 0x0106, 0x781b,\r
-+      0x2000, 0xa001, 0x7918, 0xd1ac, 0x1dd0, 0x010e, 0x00fe, 0x1540,\r
-+      0x6120, 0x9186, 0x0003, 0x0148, 0x9186, 0x0006, 0x0130, 0x9186,\r
-+      0x0009, 0x11e0, 0x611c, 0xd1c4, 0x1100, 0x080c, 0xc838, 0x01b0,\r
-+      0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280, 0x9082, 0x1999,\r
-+      0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b,\r
-+      0x810b, 0x9108, 0x611a, 0x080c, 0xcf7e, 0x0110, 0x080c, 0xc536,\r
-+      0x012e, 0x9c88, 0x001c, 0x7116, 0x2001, 0x181a, 0x2004, 0x9102,\r
-+      0x1228, 0x8631, 0x0138, 0x2160, 0x0804, 0x8684, 0x7017, 0x1ddc,\r
-+      0x7007, 0x0000, 0x0005, 0x00fe, 0x0c58, 0x00e6, 0x2071, 0x1a03,\r
-+      0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0x1a0c,\r
-+      0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1a03, 0x7132, 0x702f,\r
-+      0x0009, 0x00ee, 0x0005, 0x2011, 0x1a0f, 0x2013, 0x0000, 0x0005,\r
-+      0x00e6, 0x2071, 0x1a03, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee,\r
-+      0x0005, 0x0086, 0x0026, 0x7054, 0x8000, 0x7056, 0x2001, 0x1a11,\r
-+      0x2044, 0xa06c, 0x9086, 0x0000, 0x0150, 0x7068, 0xa09a, 0x7064,\r
-+      0xa096, 0x7060, 0xa092, 0x705c, 0xa08e, 0x080c, 0x1124, 0x002e,\r
-+      0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x8592, 0x015e, 0x00fe,\r
-+      0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e,\r
-+      0x0005, 0x00e6, 0x2071, 0x1a03, 0x7172, 0x7276, 0x706f, 0x0009,\r
-+      0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x1a03, 0x7074, 0x9206,\r
-+      0x1110, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, 0x2069, 0x1800,\r
-+      0x69ec, 0xd1e4, 0x1518, 0x0026, 0xd1ec, 0x0140, 0x6a54, 0x6874,\r
-+      0x9202, 0x0288, 0x8117, 0x9294, 0x00c1, 0x0088, 0x9184, 0x0007,\r
-+      0x01a0, 0x8109, 0x9184, 0x0007, 0x0110, 0x69ee, 0x0070, 0x8107,\r
-+      0x9084, 0x0007, 0x910d, 0x8107, 0x9106, 0x9094, 0x00c1, 0x9184,\r
-+      0xff3e, 0x9205, 0x68ee, 0x080c, 0x0f05, 0x002e, 0x0005, 0x69e8,\r
-+      0x9184, 0x003f, 0x05b8, 0x8109, 0x9184, 0x003f, 0x01a8, 0x6a54,\r
-+      0x6874, 0x9202, 0x0220, 0xd1bc, 0x0168, 0xc1bc, 0x0018, 0xd1bc,\r
-+      0x1148, 0xc1bd, 0x2110, 0x00e6, 0x2071, 0x1800, 0x080c, 0x0f27,\r
-+      0x00ee, 0x0400, 0x69ea, 0x00f0, 0x0026, 0x8107, 0x9094, 0x0007,\r
-+      0x0128, 0x8001, 0x8007, 0x9085, 0x0007, 0x0050, 0x2010, 0x8004,\r
-+      0x8004, 0x8004, 0x9084, 0x0007, 0x9205, 0x8007, 0x9085, 0x0028,\r
-+      0x9086, 0x0040, 0x2010, 0x00e6, 0x2071, 0x1800, 0x080c, 0x0f27,\r
-+      0x00ee, 0x002e, 0x0005, 0x0016, 0x00c6, 0x2009, 0xfffc, 0x210d,\r
-+      0x2061, 0x0100, 0x60f0, 0x9100, 0x60f3, 0x0000, 0x2009, 0xfffc,\r
-+      0x200f, 0x1220, 0x8108, 0x2105, 0x8000, 0x200f, 0x00ce, 0x001e,\r
-+      0x0005, 0x00c6, 0x2061, 0x1a6f, 0x00ce, 0x0005, 0x9184, 0x000f,\r
-+      0x8003, 0x8003, 0x8003, 0x9080, 0x1a6f, 0x2060, 0x0005, 0xa884,\r
-+      0x908a, 0x199a, 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a6f,\r
-+      0x6014, 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e,\r
-+      0xffff, 0x01b0, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c,\r
-+      0x908c, 0x00c0, 0x918e, 0x00c0, 0x0904, 0x8896, 0xd0b4, 0x1168,\r
-+      0xd0bc, 0x1904, 0x886f, 0x2009, 0x0006, 0x080c, 0x88c3, 0x0005,\r
-+      0x900e, 0x0c60, 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x05c8, 0x908c,\r
-+      0x2023, 0x1550, 0x87ff, 0x1540, 0x6124, 0x918c, 0x0500, 0x1520,\r
-+      0x6100, 0x918e, 0x0007, 0x1500, 0x2009, 0x1869, 0x210c, 0xd184,\r
-+      0x11d8, 0x6003, 0x0003, 0x6007, 0x0043, 0x6047, 0xb035, 0x080c,\r
-+      0x1c03, 0xa87c, 0xc0dd, 0xa87e, 0x600f, 0x0000, 0x00f6, 0x2079,\r
-+      0x0380, 0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0013, 0x2c00, 0x7836,\r
-+      0x781b, 0x8080, 0x00fe, 0x0005, 0x908c, 0x0003, 0x0120, 0x918e,\r
-+      0x0003, 0x1904, 0x88bd, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8,\r
-+      0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1869, 0x2104, 0xd084, 0x1138,\r
-+      0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0xac8c, 0x0005, 0x87ff,\r
-+      0x1de8, 0x2009, 0x0042, 0x0804, 0xac8c, 0x6110, 0x00b6, 0x2158,\r
-+      0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00,\r
-+      0xc0d4, 0x6026, 0xa890, 0x602e, 0xa88c, 0x6032, 0x08e0, 0xd0fc,\r
-+      0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x88bd,\r
-+      0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78,\r
-+      0x080c, 0x1731, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042,\r
-+      0x080c, 0xac8c, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,\r
-+      0xd1ac, 0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188,\r
-+      0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e,\r
-+      0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0xac8c,\r
-+      0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c,\r
-+      0xac8c, 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac,\r
-+      0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019,\r
-+      0x0005, 0x2009, 0x0001, 0x0096, 0x080c, 0xc838, 0x0518, 0x6014,\r
-+      0x2048, 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c,\r
-+      0x918c, 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a6f,\r
-+      0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce,\r
-+      0x080c, 0x6bb5, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c,\r
-+      0x87df, 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a6f,\r
-+      0x6000, 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce,\r
-+      0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120,\r
-+      0x8001, 0x680a, 0x9085, 0x0001, 0x0005, 0x2071, 0x1923, 0x7003,\r
-+      0x0006, 0x7007, 0x0000, 0x700f, 0x0000, 0x7013, 0x0001, 0x080c,\r
-+      0x1053, 0x090c, 0x0d7d, 0xa867, 0x0006, 0xa86b, 0x0001, 0xa8ab,\r
-+      0xdcb0, 0xa89f, 0x0000, 0x2900, 0x702e, 0x7033, 0x0000, 0x0005,\r
-+      0x0096, 0x00e6, 0x2071, 0x1923, 0x702c, 0x2048, 0x6a2c, 0x721e,\r
-+      0x6b30, 0x7322, 0x6834, 0x7026, 0xa896, 0x6838, 0x702a, 0xa89a,\r
-+      0x6824, 0x7016, 0x683c, 0x701a, 0x2009, 0x0028, 0x200a, 0x9005,\r
-+      0x0148, 0x900e, 0x9188, 0x000c, 0x8001, 0x1de0, 0x2100, 0x9210,\r
-+      0x1208, 0x8318, 0xaa8e, 0xab92, 0x7010, 0xd084, 0x0178, 0xc084,\r
-+      0x7007, 0x0001, 0x700f, 0x0000, 0x0006, 0x2009, 0x181d, 0x2104,\r
-+      0x9082, 0x0007, 0x2009, 0x1b4e, 0x200a, 0x000e, 0xc095, 0x7012,\r
-+      0x2008, 0x2001, 0x003b, 0x080c, 0x1679, 0x9006, 0x2071, 0x193c,\r
-+      0x7002, 0x7006, 0x702a, 0x00ee, 0x009e, 0x0005, 0x00e6, 0x0126,\r
-+      0x0156, 0x2091, 0x8000, 0x2071, 0x1800, 0x7154, 0x2001, 0x0008,\r
-+      0x910a, 0x0638, 0x2001, 0x187d, 0x20ac, 0x9006, 0x9080, 0x0008,\r
-+      0x1f04, 0x8976, 0x71c0, 0x9102, 0x02e0, 0x2071, 0x1877, 0x20a9,\r
-+      0x0007, 0x00c6, 0x080c, 0xab97, 0x6023, 0x0009, 0x6003, 0x0004,\r
-+      0x601f, 0x0101, 0x0089, 0x0126, 0x2091, 0x8000, 0x080c, 0x8afc,\r
-+      0x012e, 0x1f04, 0x8982, 0x9006, 0x00ce, 0x015e, 0x012e, 0x00ee,\r
-+      0x0005, 0x9085, 0x0001, 0x0cc8, 0x00e6, 0x00b6, 0x0096, 0x0086,\r
-+      0x0056, 0x0046, 0x0026, 0x7118, 0x720c, 0x7620, 0x7004, 0xd084,\r
-+      0x1128, 0x2021, 0x0024, 0x2029, 0x0002, 0x0020, 0x2021, 0x002c,\r
-+      0x2029, 0x000a, 0x080c, 0x103a, 0x090c, 0x0d7d, 0x2900, 0x6016,\r
-+      0x2058, 0xac66, 0x9006, 0xa802, 0xa806, 0xa86a, 0xa87a, 0xa8aa,\r
-+      0xa887, 0x0005, 0xa87f, 0x0020, 0x7008, 0xa89a, 0x7010, 0xa89e,\r
-+      0xae8a, 0xa8af, 0xffff, 0xa8b3, 0x0000, 0x8109, 0x0160, 0x080c,\r
-+      0x103a, 0x090c, 0x0d7d, 0xad66, 0x2b00, 0xa802, 0x2900, 0xb806,\r
-+      0x2058, 0x8109, 0x1da0, 0x002e, 0x004e, 0x005e, 0x008e, 0x009e,\r
-+      0x00be, 0x00ee, 0x0005, 0x2079, 0x0000, 0x2071, 0x1923, 0x7004,\r
-+      0x004b, 0x700c, 0x0002, 0x89ee, 0x89e7, 0x89e7, 0x0005, 0x89f8,\r
-+      0x8a59, 0x8a59, 0x8a59, 0x8a5a, 0x8a6b, 0x8a6b, 0x700c, 0x0cba,\r
-+      0x0126, 0x2091, 0x8000, 0x78a0, 0x79a0, 0x9106, 0x0128, 0x78a0,\r
-+      0x79a0, 0x9106, 0x1904, 0x8a4c, 0x2001, 0x0005, 0x2004, 0xd0bc,\r
-+      0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e,\r
-+      0x7018, 0x910a, 0x1130, 0x7030, 0x9005, 0x05a8, 0x080c, 0x8a9a,\r
-+      0x0490, 0x1210, 0x7114, 0x910a, 0x9192, 0x000a, 0x0210, 0x2009,\r
-+      0x000a, 0x2001, 0x1888, 0x2014, 0x2001, 0x1935, 0x2004, 0x9100,\r
-+      0x9202, 0x0e48, 0x080c, 0x8be6, 0x2200, 0x9102, 0x0208, 0x2208,\r
-+      0x0096, 0x702c, 0x2048, 0xa873, 0x0001, 0xa976, 0x080c, 0x8cef,\r
-+      0x2100, 0xa87e, 0xa86f, 0x0000, 0x009e, 0x0126, 0x2091, 0x8000,\r
-+      0x2009, 0x1a21, 0x2104, 0xc085, 0x200a, 0x700f, 0x0002, 0x012e,\r
-+      0x080c, 0x1143, 0x1de8, 0x0005, 0x2001, 0x0005, 0x2004, 0xd0bc,\r
-+      0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e,\r
-+      0x0005, 0x0005, 0x700c, 0x0002, 0x8a5f, 0x8a62, 0x8a61, 0x080c,\r
-+      0x89f6, 0x0005, 0x8001, 0x700e, 0x0096, 0x702c, 0x2048, 0xa974,\r
-+      0x009e, 0x0011, 0x0ca0, 0x0005, 0x0096, 0x702c, 0x2048, 0x7018,\r
-+      0x9100, 0x7214, 0x921a, 0x1130, 0x701c, 0xa88e, 0x7020, 0xa892,\r
-+      0x9006, 0x0068, 0x0006, 0x080c, 0x8cef, 0x2100, 0xaa8c, 0x9210,\r
-+      0xaa8e, 0x1220, 0xa890, 0x9081, 0x0000, 0xa892, 0x000e, 0x009e,\r
-+      0x2f08, 0x9188, 0x0028, 0x200a, 0x701a, 0x0005, 0x00e6, 0x2071,\r
-+      0x1923, 0x700c, 0x0002, 0x8a98, 0x8a98, 0x8a96, 0x700f, 0x0001,\r
-+      0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x7030, 0x9005, 0x0508,\r
-+      0x2078, 0x7814, 0x2048, 0xae88, 0x00b6, 0x2059, 0x0000, 0x080c,\r
-+      0x8b05, 0x00be, 0x01b0, 0x00e6, 0x2071, 0x193c, 0x080c, 0x8b4c,\r
-+      0x00ee, 0x0178, 0x0096, 0x080c, 0x1053, 0x2900, 0x009e, 0x0148,\r
-+      0xa8aa, 0x04b9, 0x0041, 0x2001, 0x1946, 0x2003, 0x0000, 0x012e,\r
-+      0x08c8, 0x012e, 0x0005, 0x00d6, 0x00c6, 0x0086, 0x00a6, 0x2940,\r
-+      0x2650, 0x2600, 0x9005, 0x0180, 0xa864, 0x9084, 0x000f, 0x2068,\r
-+      0x9d88, 0x1e55, 0x2165, 0x0056, 0x2029, 0x0000, 0x080c, 0x8c74,\r
-+      0x080c, 0x1e2b, 0x1dd8, 0x005e, 0x00ae, 0x2001, 0x187f, 0x2004,\r
-+      0xa88a, 0x080c, 0x1731, 0x781f, 0x0101, 0x7813, 0x0000, 0x0126,\r
-+      0x2091, 0x8000, 0x080c, 0x8b5b, 0x012e, 0x008e, 0x00ce, 0x00de,\r
-+      0x0005, 0x7030, 0x9005, 0x0138, 0x2078, 0x780c, 0x7032, 0x2001,\r
-+      0x1946, 0x2003, 0x0001, 0x0005, 0x00e6, 0x2071, 0x1923, 0x7030,\r
-+      0x600e, 0x2c00, 0x7032, 0x00ee, 0x0005, 0x00d6, 0x00c6, 0x0026,\r
-+      0x9b80, 0x8dce, 0x2005, 0x906d, 0x090c, 0x0d7d, 0x9b80, 0x8dc6,\r
-+      0x2005, 0x9065, 0x090c, 0x0d7d, 0x6114, 0x2600, 0x9102, 0x0248,\r
-+      0x6828, 0x9102, 0x02f0, 0x9085, 0x0001, 0x002e, 0x00ce, 0x00de,\r
-+      0x0005, 0x6804, 0xd094, 0x0148, 0x6854, 0xd084, 0x1178, 0xc085,\r
-+      0x6856, 0x2011, 0x8026, 0x080c, 0x4b07, 0x684c, 0x0096, 0x904d,\r
-+      0x090c, 0x0d7d, 0xa804, 0x8000, 0xa806, 0x009e, 0x9006, 0x2030,\r
-+      0x0c20, 0x6854, 0xd08c, 0x1d08, 0xc08d, 0x6856, 0x2011, 0x8025,\r
-+      0x080c, 0x4b07, 0x684c, 0x0096, 0x904d, 0x090c, 0x0d7d, 0xa800,\r
-+      0x8000, 0xa802, 0x009e, 0x0888, 0x7000, 0x2019, 0x0008, 0x8319,\r
-+      0x7104, 0x9102, 0x1118, 0x2300, 0x9005, 0x0020, 0x0210, 0x9302,\r
-+      0x0008, 0x8002, 0x0005, 0x00d6, 0x7814, 0x9005, 0x090c, 0x0d7d,\r
-+      0x781c, 0x9084, 0x0101, 0x9086, 0x0101, 0x190c, 0x0d7d, 0x2069,\r
-+      0x193c, 0x6804, 0x9080, 0x193e, 0x2f08, 0x2102, 0x6904, 0x8108,\r
-+      0x9182, 0x0008, 0x0208, 0x900e, 0x6906, 0x9180, 0x193e, 0x2003,\r
-+      0x0000, 0x00de, 0x0005, 0x0096, 0x00c6, 0x2060, 0x6014, 0x2048,\r
-+      0xa8a8, 0x0096, 0x2048, 0x9005, 0x190c, 0x106c, 0x009e, 0xa8ab,\r
-+      0x0000, 0x080c, 0x0fec, 0x080c, 0xabed, 0x00ce, 0x009e, 0x0005,\r
-+      0x6020, 0x9086, 0x0009, 0x1128, 0x601c, 0xd0c4, 0x0110, 0x9006,\r
-+      0x0005, 0x9085, 0x0001, 0x0005, 0x6000, 0x9086, 0x0000, 0x0178,\r
-+      0x6010, 0x9005, 0x0150, 0x00b6, 0x2058, 0x080c, 0x8f01, 0x00be,\r
-+      0x6013, 0x0000, 0x601b, 0x0000, 0x0010, 0x2c00, 0x0861, 0x0005,\r
-+      0x2009, 0x1927, 0x210c, 0xd194, 0x0005, 0x00e6, 0x2071, 0x1923,\r
-+      0x7110, 0xc194, 0xd19c, 0x1118, 0xc185, 0x7007, 0x0000, 0x7112,\r
-+      0x2001, 0x003b, 0x080c, 0x1679, 0x00ee, 0x0005, 0x0096, 0x00d6,\r
-+      0x9006, 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, 0x702a,\r
-+      0x7026, 0x702f, 0x0000, 0x080c, 0x8d4e, 0x0170, 0x080c, 0x8d83,\r
-+      0x0158, 0x2900, 0x7002, 0x700a, 0x701a, 0x7013, 0x0001, 0x701f,\r
-+      0x000a, 0x00de, 0x009e, 0x0005, 0x900e, 0x0cd8, 0x00e6, 0x0096,\r
-+      0x0086, 0x00d6, 0x00c6, 0x2071, 0x1930, 0x721c, 0x2100, 0x9202,\r
-+      0x1618, 0x080c, 0x8d83, 0x090c, 0x0d7d, 0x7018, 0x9005, 0x1160,\r
-+      0x2900, 0x7002, 0x700a, 0x701a, 0x9006, 0x7006, 0x700e, 0xa806,\r
-+      0xa802, 0x7012, 0x701e, 0x0038, 0x2040, 0xa806, 0x2900, 0xa002,\r
-+      0x701a, 0xa803, 0x0000, 0x7010, 0x8000, 0x7012, 0x701c, 0x9080,\r
-+      0x000a, 0x701e, 0x721c, 0x08d0, 0x721c, 0x00ce, 0x00de, 0x008e,\r
-+      0x009e, 0x00ee, 0x0005, 0x0096, 0x0156, 0x0136, 0x0146, 0x00e6,\r
-+      0x0126, 0x2091, 0x8000, 0x2071, 0x1930, 0x7300, 0x831f, 0x831e,\r
-+      0x831e, 0x9384, 0x003f, 0x20e8, 0x939c, 0xffc0, 0x9398, 0x0003,\r
-+      0x7104, 0x080c, 0x8cef, 0x810c, 0x2100, 0x9318, 0x8003, 0x2228,\r
-+      0x2021, 0x0078, 0x9402, 0x9532, 0x0208, 0x2028, 0x2500, 0x8004,\r
-+      0x20a8, 0x23a0, 0xa001, 0xa001, 0x4005, 0x2508, 0x080c, 0x8cf8,\r
-+      0x2130, 0x7014, 0x9600, 0x7016, 0x2600, 0x711c, 0x9102, 0x701e,\r
-+      0x7004, 0x9600, 0x2008, 0x9082, 0x000a, 0x1190, 0x7000, 0x2048,\r
-+      0xa800, 0x9005, 0x1148, 0x2009, 0x0001, 0x0026, 0x080c, 0x8be6,\r
-+      0x002e, 0x7000, 0x2048, 0xa800, 0x7002, 0x7007, 0x0000, 0x0008,\r
-+      0x7106, 0x2500, 0x9212, 0x1904, 0x8c25, 0x012e, 0x00ee, 0x014e,\r
-+      0x013e, 0x015e, 0x009e, 0x0005, 0x0016, 0x0026, 0x00e6, 0x0126,\r
-+      0x2091, 0x8000, 0x9580, 0x8dc6, 0x2005, 0x9075, 0x090c, 0x0d7d,\r
-+      0x080c, 0x8cca, 0x012e, 0x9580, 0x8dc2, 0x2005, 0x9075, 0x090c,\r
-+      0x0d7d, 0x0156, 0x0136, 0x01c6, 0x0146, 0x01d6, 0x831f, 0x831e,\r
-+      0x831e, 0x9384, 0x003f, 0x20e0, 0x9384, 0xffc0, 0x9100, 0x2098,\r
-+      0xa860, 0x20e8, 0xa95c, 0x2c05, 0x9100, 0x20a0, 0x20a9, 0x0002,\r
-+      0x4003, 0x2e0c, 0x2d00, 0x0002, 0x8cb4, 0x8cb4, 0x8cb6, 0x8cb4,\r
-+      0x8cb6, 0x8cb4, 0x8cb4, 0x8cb4, 0x8cb4, 0x8cb4, 0x8cbc, 0x8cb4,\r
-+      0x8cbc, 0x8cb4, 0x8cb4, 0x8cb4, 0x080c, 0x0d7d, 0x4104, 0x20a9,\r
-+      0x0002, 0x4002, 0x4003, 0x0028, 0x20a9, 0x0002, 0x4003, 0x4104,\r
-+      0x4003, 0x01de, 0x014e, 0x01ce, 0x013e, 0x015e, 0x00ee, 0x002e,\r
-+      0x001e, 0x0005, 0x0096, 0x7014, 0x8001, 0x7016, 0x710c, 0x2110,\r
-+      0x00f1, 0x810c, 0x9188, 0x0003, 0x7308, 0x8210, 0x9282, 0x000a,\r
-+      0x1198, 0x7008, 0x2048, 0xa800, 0x9005, 0x0158, 0x0006, 0x080c,\r
-+      0x8d92, 0x009e, 0xa807, 0x0000, 0x2900, 0x700a, 0x7010, 0x8001,\r
-+      0x7012, 0x700f, 0x0000, 0x0008, 0x720e, 0x009e, 0x0005, 0x0006,\r
-+      0x810b, 0x810b, 0x2100, 0x810b, 0x9100, 0x2008, 0x000e, 0x0005,\r
-+      0x0006, 0x0026, 0x2100, 0x9005, 0x0158, 0x9092, 0x000c, 0x0240,\r
-+      0x900e, 0x8108, 0x9082, 0x000c, 0x1de0, 0x002e, 0x000e, 0x0005,\r
-+      0x900e, 0x0cd8, 0x2d00, 0x90b8, 0x0008, 0x690c, 0x6810, 0x2019,\r
-+      0x0001, 0x2031, 0x8d38, 0x9112, 0x0220, 0x0118, 0x8318, 0x2208,\r
-+      0x0cd0, 0x6808, 0x9005, 0x0108, 0x8318, 0x233a, 0x6804, 0xd084,\r
-+      0x2300, 0x2021, 0x0001, 0x1150, 0x9082, 0x0003, 0x0967, 0x0a67,\r
-+      0x8420, 0x9082, 0x0007, 0x0967, 0x0a67, 0x0cd0, 0x9082, 0x0002,\r
-+      0x0967, 0x0a67, 0x8420, 0x9082, 0x0005, 0x0967, 0x0a67, 0x0cd0,\r
-+      0x6c1a, 0x2d00, 0x90b8, 0x0007, 0x00e6, 0x2071, 0x1800, 0x7128,\r
-+      0x6810, 0x2019, 0x0001, 0x910a, 0x0118, 0x0210, 0x8318, 0x0cd8,\r
-+      0x2031, 0x8d4b, 0x0870, 0x6c16, 0x00ee, 0x0005, 0x0096, 0x0046,\r
-+      0x0126, 0x2091, 0x8000, 0x2b00, 0x9080, 0x8dca, 0x2005, 0x9005,\r
-+      0x090c, 0x0d7d, 0x2004, 0x90a0, 0x000a, 0x080c, 0x1053, 0x01d0,\r
-+      0x2900, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x080c, 0x1053,\r
-+      0x0188, 0x7024, 0xa802, 0xa807, 0x0000, 0x2900, 0x7026, 0x94a2,\r
-+      0x000a, 0x0110, 0x0208, 0x0c90, 0x9085, 0x0001, 0x012e, 0x004e,\r
-+      0x009e, 0x0005, 0x7024, 0x9005, 0x0dc8, 0x2048, 0xac00, 0x080c,\r
-+      0x106c, 0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x7024, 0x2048,\r
-+      0x9005, 0x0130, 0xa800, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000,\r
-+      0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7024, 0xa802, 0x2900,\r
-+      0x7026, 0x012e, 0x0005, 0x0096, 0x9e80, 0x0009, 0x2004, 0x9005,\r
-+      0x0138, 0x2048, 0xa800, 0x0006, 0x080c, 0x106c, 0x000e, 0x0cb8,\r
-+      0x009e, 0x0005, 0x0096, 0x7008, 0x9005, 0x0138, 0x2048, 0xa800,\r
-+      0x0006, 0x080c, 0x106c, 0x000e, 0x0cb8, 0x9006, 0x7002, 0x700a,\r
-+      0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x702a, 0x7026, 0x702e,\r
-+      0x009e, 0x0005, 0x1a6d, 0x0000, 0x0000, 0x0000, 0x1930, 0x0000,\r
-+      0x0000, 0x0000, 0x1888, 0x0000, 0x0000, 0x0000, 0x1877, 0x0000,\r
-+      0x0000, 0x0000, 0x00e6, 0x00c6, 0x00b6, 0x00a6, 0xa8a8, 0x2040,\r
-+      0x2071, 0x1877, 0x080c, 0x8eec, 0xa067, 0x0023, 0x6010, 0x905d,\r
-+      0x0904, 0x8ec1, 0xb814, 0xa06e, 0xb910, 0xa172, 0xb9a0, 0xa176,\r
-+      0x2001, 0x0003, 0xa07e, 0xa834, 0xa082, 0xa07b, 0x0000, 0xa898,\r
-+      0x9005, 0x0118, 0xa078, 0xc085, 0xa07a, 0x2858, 0x2031, 0x0018,\r
-+      0xa068, 0x908a, 0x0019, 0x1a0c, 0x0d7d, 0x2020, 0x2050, 0x2940,\r
-+      0xa864, 0x90bc, 0x00ff, 0x908c, 0x000f, 0x91e0, 0x1e55, 0x2c65,\r
-+      0x9786, 0x0024, 0x2c05, 0x1590, 0x908a, 0x0036, 0x1a0c, 0x0d7d,\r
-+      0x9082, 0x001b, 0x0002, 0x8e2e, 0x8e2e, 0x8e30, 0x8e2e, 0x8e2e,\r
-+      0x8e2e, 0x8e32, 0x8e2e, 0x8e2e, 0x8e2e, 0x8e34, 0x8e2e, 0x8e2e,\r
-+      0x8e2e, 0x8e36, 0x8e2e, 0x8e2e, 0x8e2e, 0x8e38, 0x8e2e, 0x8e2e,\r
-+      0x8e2e, 0x8e3a, 0x8e2e, 0x8e2e, 0x8e2e, 0x8e3c, 0x080c, 0x0d7d,\r
-+      0xa180, 0x04b8, 0xa190, 0x04a8, 0xa1a0, 0x0498, 0xa1b0, 0x0488,\r
-+      0xa1c0, 0x0478, 0xa1d0, 0x0468, 0xa1e0, 0x0458, 0x908a, 0x0034,\r
-+      0x1a0c, 0x0d7d, 0x9082, 0x001b, 0x0002, 0x8e60, 0x8e5e, 0x8e5e,\r
-+      0x8e5e, 0x8e5e, 0x8e5e, 0x8e62, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e,\r
-+      0x8e5e, 0x8e64, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e66,\r
-+      0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e68, 0x080c, 0x0d7d,\r
-+      0xa180, 0x0038, 0xa198, 0x0028, 0xa1b0, 0x0018, 0xa1c8, 0x0008,\r
-+      0xa1e0, 0x2600, 0x0002, 0x8e84, 0x8e86, 0x8e88, 0x8e8a, 0x8e8c,\r
-+      0x8e8e, 0x8e90, 0x8e92, 0x8e94, 0x8e96, 0x8e98, 0x8e9a, 0x8e9c,\r
-+      0x8e9e, 0x8ea0, 0x8ea2, 0x8ea4, 0x8ea6, 0x8ea8, 0x8eaa, 0x8eac,\r
-+      0x8eae, 0x8eb0, 0x8eb2, 0x8eb4, 0x080c, 0x0d7d, 0xb9e2, 0x0468,\r
-+      0xb9de, 0x0458, 0xb9da, 0x0448, 0xb9d6, 0x0438, 0xb9d2, 0x0428,\r
-+      0xb9ce, 0x0418, 0xb9ca, 0x0408, 0xb9c6, 0x00f8, 0xb9c2, 0x00e8,\r
-+      0xb9be, 0x00d8, 0xb9ba, 0x00c8, 0xb9b6, 0x00b8, 0xb9b2, 0x00a8,\r
-+      0xb9ae, 0x0098, 0xb9aa, 0x0088, 0xb9a6, 0x0078, 0xb9a2, 0x0068,\r
-+      0xb99e, 0x0058, 0xb99a, 0x0048, 0xb996, 0x0038, 0xb992, 0x0028,\r
-+      0xb98e, 0x0018, 0xb98a, 0x0008, 0xb986, 0x8631, 0x8421, 0x0120,\r
-+      0x080c, 0x1e2b, 0x0804, 0x8e08, 0x00ae, 0x00be, 0x00ce, 0x00ee,\r
-+      0x0005, 0xa86c, 0xa06e, 0xa870, 0xa072, 0xa077, 0x00ff, 0x9006,\r
-+      0x0804, 0x8dea, 0x0006, 0x0016, 0x00b6, 0x6010, 0x2058, 0xb810,\r
-+      0x9005, 0x01b0, 0x2001, 0x1924, 0x2004, 0x9005, 0x0188, 0x2001,\r
-+      0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0xbba0,\r
-+      0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4b07, 0x004e, 0x003e,\r
-+      0x00be, 0x001e, 0x000e, 0x0005, 0x9016, 0x710c, 0xa834, 0x910a,\r
-+      0xa936, 0x7008, 0x9005, 0x0120, 0x8210, 0x910a, 0x0238, 0x0130,\r
-+      0x7010, 0x8210, 0x910a, 0x0210, 0x0108, 0x0cd8, 0xaa8a, 0xa26a,\r
-+      0x0005, 0x00f6, 0x00d6, 0x0036, 0x2079, 0x0300, 0x781b, 0x0200,\r
-+      0x7818, 0xd094, 0x1dd8, 0x781b, 0x0202, 0xa001, 0xa001, 0x7818,\r
-+      0xd094, 0x1da0, 0xb8ac, 0x9005, 0x01b8, 0x2068, 0x2079, 0x0000,\r
-+      0x2c08, 0x911e, 0x1118, 0x680c, 0xb8ae, 0x0060, 0x9106, 0x0140,\r
-+      0x2d00, 0x2078, 0x680c, 0x9005, 0x090c, 0x0d7d, 0x2068, 0x0cb0,\r
-+      0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x2079, 0x0300, 0x781b, 0x0200,\r
-+      0x003e, 0x00de, 0x00fe, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x00c6,\r
-+      0x0036, 0x0126, 0x2091, 0x8000, 0x0156, 0x20a9, 0x01ff, 0x2071,\r
-+      0x0300, 0x701b, 0x0200, 0x7018, 0xd094, 0x0110, 0x1f04, 0x8f41,\r
-+      0x701b, 0x0202, 0xa001, 0xa001, 0x7018, 0xd094, 0x1d90, 0xb8ac,\r
-+      0x9005, 0x01d0, 0x2060, 0x600c, 0xb8ae, 0x6003, 0x0004, 0x601b,\r
-+      0x0000, 0x6013, 0x0000, 0x601f, 0x0101, 0x6014, 0x2048, 0xa88b,\r
-+      0x0000, 0xa8a8, 0xa8ab, 0x0000, 0x904d, 0x090c, 0x0d7d, 0x080c,\r
-+      0x106c, 0x080c, 0x8afc, 0x0c18, 0x2071, 0x0300, 0x701b, 0x0200,\r
-+      0x015e, 0x012e, 0x003e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x0005,\r
-+      0x00c6, 0x00b6, 0x0016, 0x0006, 0x0156, 0x080c, 0x25fb, 0x015e,\r
-+      0x11b0, 0x080c, 0x65c4, 0x190c, 0x0d7d, 0x000e, 0x001e, 0xb912,\r
-+      0xb816, 0x080c, 0xab97, 0x0140, 0x2b00, 0x6012, 0x6023, 0x0001,\r
-+      0x2009, 0x0001, 0x080c, 0xac8c, 0x00be, 0x00ce, 0x0005, 0x000e,\r
-+      0x001e, 0x0cd0, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d,\r
-+      0x0013, 0x006e, 0x0005, 0x8fb3, 0x8fb3, 0x8fb3, 0x8fb5, 0x8ffe,\r
-+      0x8fb3, 0x8fb3, 0x8fb3, 0x9061, 0x8fb3, 0x9099, 0x8fb3, 0x8fb3,\r
-+      0x8fb3, 0x8fb3, 0x8fb3, 0x080c, 0x0d7d, 0x9182, 0x0040, 0x0002,\r
-+      0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8,\r
-+      0x8fc8, 0x8fca, 0x8fdb, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fec,\r
-+      0x080c, 0x0d7d, 0x0096, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010,\r
-+      0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6b80, 0x080c,\r
-+      0xabed, 0x009e, 0x0005, 0x080c, 0x963b, 0x00d6, 0x6114, 0x080c,\r
-+      0xc838, 0x0130, 0x0096, 0x6114, 0x2148, 0x080c, 0x6d80, 0x009e,\r
-+      0x00de, 0x080c, 0xabed, 0x0005, 0x080c, 0x963b, 0x080c, 0x31e7,\r
-+      0x6114, 0x0096, 0x2148, 0x080c, 0xc838, 0x0120, 0xa87b, 0x0029,\r
-+      0x080c, 0x6d80, 0x009e, 0x080c, 0xabed, 0x0005, 0x601b, 0x0000,\r
-+      0x9182, 0x0040, 0x0096, 0x0002, 0x9019, 0x9019, 0x9019, 0x9019,\r
-+      0x9019, 0x9019, 0x9019, 0x9019, 0x901b, 0x9019, 0x9019, 0x9019,\r
-+      0x905d, 0x9019, 0x9019, 0x9019, 0x9019, 0x9019, 0x9019, 0x9021,\r
-+      0x9019, 0x080c, 0x0d7d, 0x6114, 0x2148, 0xa938, 0x918e, 0xffff,\r
-+      0x05e0, 0x00e6, 0x6114, 0x2148, 0x080c, 0x8dd2, 0x0096, 0xa8a8,\r
-+      0x2048, 0x080c, 0x6b18, 0x009e, 0xa8ab, 0x0000, 0x6010, 0x9005,\r
-+      0x0128, 0x00b6, 0x2058, 0x080c, 0x8f01, 0x00be, 0xae88, 0x00b6,\r
-+      0x2059, 0x0000, 0x080c, 0x8b05, 0x00be, 0x01e0, 0x2071, 0x193c,\r
-+      0x080c, 0x8b4c, 0x01b8, 0x9086, 0x0001, 0x1128, 0x2001, 0x1946,\r
-+      0x2004, 0x9005, 0x1178, 0x0096, 0x080c, 0x103a, 0x2900, 0x009e,\r
-+      0x0148, 0xa8aa, 0x00f6, 0x2c78, 0x080c, 0x8ac3, 0x00fe, 0x00ee,\r
-+      0x009e, 0x0005, 0x080c, 0x8afc, 0x0cd0, 0x080c, 0x9115, 0x009e,\r
-+      0x0005, 0x9182, 0x0040, 0x0096, 0x0002, 0x9075, 0x9075, 0x9075,\r
-+      0x9077, 0x9075, 0x9075, 0x9075, 0x9097, 0x9075, 0x9075, 0x9075,\r
-+      0x9075, 0x9075, 0x9075, 0x9075, 0x9075, 0x080c, 0x0d7d, 0x6003,\r
-+      0x0003, 0x6106, 0x6014, 0x2048, 0xa8ac, 0xa836, 0xa8b0, 0xa83a,\r
-+      0xa847, 0x0000, 0xa84b, 0x0000, 0xa884, 0x9092, 0x199a, 0x0210,\r
-+      0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x080c,\r
-+      0x1bba, 0x2009, 0x8030, 0x080c, 0x9265, 0x009e, 0x0005, 0x080c,\r
-+      0x0d7d, 0x080c, 0x963b, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010,\r
-+      0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6d80, 0x080c,\r
-+      0xabed, 0x009e, 0x0005, 0x080c, 0xa896, 0x6144, 0xd1fc, 0x0120,\r
-+      0xd1ac, 0x1110, 0x6003, 0x0003, 0x6000, 0x908a, 0x0016, 0x1a0c,\r
-+      0x0d7d, 0x0096, 0x0023, 0x009e, 0x080c, 0xa8b2, 0x0005, 0x90cf,\r
-+      0x90cf, 0x90cf, 0x90d1, 0x90e2, 0x90cf, 0x90cf, 0x90cf, 0x90cf,\r
-+      0x90cf, 0x90cf, 0x90cf, 0x90cf, 0x90cf, 0x90cf, 0x90cf, 0x080c,\r
-+      0x0d7d, 0x080c, 0xaa2a, 0x6114, 0x2148, 0xa87b, 0x0006, 0x6010,\r
-+      0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6d80, 0x080c,\r
-+      0xabed, 0x0005, 0x0491, 0x0005, 0x080c, 0xa896, 0x6000, 0x6144,\r
-+      0xd1fc, 0x0130, 0xd1ac, 0x1120, 0x6003, 0x0003, 0x2009, 0x0003,\r
-+      0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x0096, 0x0033, 0x009e, 0x0106,\r
-+      0x080c, 0xa8b2, 0x010e, 0x0005, 0x910c, 0x910c, 0x910c, 0x910e,\r
-+      0x9115, 0x910c, 0x910c, 0x910c, 0x910c, 0x910c, 0x910c, 0x910c,\r
-+      0x910c, 0x910c, 0x910c, 0x910c, 0x080c, 0x0d7d, 0x0036, 0x00e6,\r
-+      0x080c, 0xaa2a, 0x00ee, 0x003e, 0x0005, 0x00f6, 0x00e6, 0x601b,\r
-+      0x0000, 0x6014, 0x2048, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058,\r
-+      0x080c, 0x8f01, 0x00be, 0x2071, 0x193c, 0x080c, 0x8b4c, 0x0160,\r
-+      0x2001, 0x187f, 0x2004, 0xa88a, 0x2031, 0x0000, 0x2c78, 0x080c,\r
-+      0x8ac3, 0x00ee, 0x00fe, 0x0005, 0x0096, 0xa88b, 0x0000, 0xa8a8,\r
-+      0x2048, 0x080c, 0x106c, 0x009e, 0xa8ab, 0x0000, 0x080c, 0x8afc,\r
-+      0x0c80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
-+      0x0000, 0x0000, 0x187a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
-+      0x0000, 0x0126, 0x2091, 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010,\r
-+      0x9006, 0x8004, 0x8086, 0x818e, 0x1208, 0x9200, 0x1f04, 0x915a,\r
-+      0x8086, 0x818e, 0x004e, 0x003e, 0x012e, 0x0005, 0x0126, 0x2091,\r
-+      0x8000, 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005, 0x01c8, 0x911a,\r
-+      0x12b8, 0x8213, 0x818d, 0x0228, 0x911a, 0x1220, 0x1f04, 0x9171,\r
-+      0x0028, 0x911a, 0x2308, 0x8210, 0x1f04, 0x9171, 0x0006, 0x3200,\r
-+      0x9084, 0xefff, 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005,\r
-+      0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800,\r
-+      0x2079, 0x19e7, 0x012e, 0x00d6, 0x2069, 0x19e7, 0x6803, 0x0005,\r
-+      0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c,\r
-+      0xa690, 0x04a9, 0x080c, 0xa67b, 0x0491, 0x080c, 0xa67e, 0x0479,\r
-+      0x080c, 0xa681, 0x0461, 0x080c, 0xa684, 0x0449, 0x080c, 0xa687,\r
-+      0x0431, 0x080c, 0xa68a, 0x0419, 0x080c, 0xa68d, 0x0401, 0x01de,\r
-+      0x014e, 0x015e, 0x6857, 0x0000, 0x00f6, 0x2079, 0x0380, 0x00f9,\r
-+      0x7807, 0x0003, 0x7803, 0x0000, 0x7803, 0x0001, 0x2069, 0x0004,\r
-+      0x2d04, 0x9084, 0xfffe, 0x9085, 0x8000, 0x206a, 0x2069, 0x0100,\r
-+      0x6828, 0x9084, 0xfffc, 0x682a, 0x00fe, 0x00de, 0x0005, 0x20a9,\r
-+      0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004, 0x0005, 0x00c6,\r
-+      0x7803, 0x0000, 0x9006, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827,\r
-+      0x0031, 0x782b, 0x1aef, 0x781f, 0xff00, 0x781b, 0xff00, 0x2061,\r
-+      0x1ae4, 0x602f, 0x19e7, 0x6033, 0x1800, 0x6037, 0x1a03, 0x603b,\r
-+      0x1e55, 0x603f, 0x1e65, 0x6042, 0x6047, 0x1aba, 0x00ce, 0x0005,\r
-+      0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x01b0,\r
-+      0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19e7, 0x602c,\r
-+      0x8000, 0x602e, 0x601c, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102,\r
-+      0x611e, 0x00ce, 0x0005, 0x6122, 0x611e, 0x0cd8, 0x6146, 0x2c08,\r
-+      0x2001, 0x0012, 0x080c, 0xa887, 0x0005, 0x0016, 0x2009, 0x8020,\r
-+      0x6146, 0x2c08, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086,\r
-+      0x0001, 0x1128, 0x2001, 0x0019, 0x080c, 0xa887, 0x0088, 0x00c6,\r
-+      0x2061, 0x19e7, 0x602c, 0x8000, 0x602e, 0x600c, 0x9005, 0x0128,\r
-+      0x9080, 0x0003, 0x2102, 0x610e, 0x0010, 0x6112, 0x610e, 0x00ce,\r
-+      0x001e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086,\r
-+      0x0001, 0x0198, 0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08, 0x2061,\r
-+      0x19e7, 0x6044, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, 0x6146,\r
-+      0x00ce, 0x0005, 0x614a, 0x6146, 0x0cd8, 0x6146, 0x600f, 0x0000,\r
-+      0x2c08, 0x2001, 0x0013, 0x080c, 0xa887, 0x0005, 0x6044, 0xd0dc,\r
-+      0x0128, 0x9006, 0x7007, 0x0000, 0x700a, 0x7032, 0x0005, 0x00f6,\r
-+      0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, 0x0056,\r
-+      0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, 0x19e7,\r
-+      0x7648, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x92f0,\r
-+      0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x92eb, 0x87ff, 0x0120,\r
-+      0x605c, 0x9106, 0x1904, 0x92eb, 0x704c, 0x9c06, 0x1178, 0x0036,\r
-+      0x2019, 0x0001, 0x080c, 0xa118, 0x703f, 0x0000, 0x9006, 0x704e,\r
-+      0x706a, 0x7052, 0x706e, 0x003e, 0x2029, 0x0001, 0x080c, 0x926e,\r
-+      0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044, 0x9c36, 0x1140,\r
-+      0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010, 0x7047, 0x0000,\r
-+      0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,\r
-+      0x600f, 0x0000, 0x080c, 0xc838, 0x01c8, 0x6014, 0x2048, 0x6020,\r
-+      0x9086, 0x0003, 0x1560, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,\r
-+      0x0016, 0x0036, 0x0076, 0x080c, 0xcb36, 0x080c, 0xe621, 0x080c,\r
-+      0x6d80, 0x007e, 0x003e, 0x001e, 0x080c, 0xca27, 0x080c, 0xac28,\r
-+      0x00ce, 0x0804, 0x928d, 0x2c78, 0x600c, 0x2060, 0x0804, 0x928d,\r
-+      0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e, 0x006e, 0x007e,\r
-+      0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020,\r
-+      0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xe621,\r
-+      0x080c, 0xe26c, 0x007e, 0x003e, 0x001e, 0x08c0, 0x6020, 0x9086,\r
-+      0x0009, 0x1168, 0xa87b, 0x0006, 0x0016, 0x0036, 0x0076, 0x080c,\r
-+      0x6d80, 0x080c, 0xabed, 0x007e, 0x003e, 0x001e, 0x0848, 0x6020,\r
-+      0x9086, 0x000a, 0x0904, 0x92d5, 0x0804, 0x92d3, 0x0006, 0x0066,\r
-+      0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091, 0x8000,\r
-+      0x2079, 0x19e7, 0x7848, 0x9065, 0x0904, 0x9385, 0x600c, 0x0006,\r
-+      0x600f, 0x0000, 0x784c, 0x9c06, 0x11a0, 0x0036, 0x2019, 0x0001,\r
-+      0x080c, 0xa118, 0x783f, 0x0000, 0x901e, 0x7b4e, 0x7b6a, 0x7b52,\r
-+      0x7b6e, 0x003e, 0x000e, 0x9005, 0x1118, 0x600c, 0x600f, 0x0000,\r
-+      0x0006, 0x00e6, 0x2f70, 0x080c, 0x926e, 0x00ee, 0x080c, 0xc838,\r
-+      0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1580, 0x3e08,\r
-+      0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058,\r
-+      0xb800, 0x00be, 0xd0bc, 0x0140, 0x6048, 0x9005, 0x1198, 0x2001,\r
-+      0x1988, 0x2004, 0x604a, 0x0070, 0xa867, 0x0103, 0xab7a, 0xa877,\r
-+      0x0000, 0x080c, 0x6d74, 0x080c, 0xca27, 0x6044, 0xc0fc, 0x6046,\r
-+      0x080c, 0xac28, 0x000e, 0x0804, 0x9333, 0x7e4a, 0x7e46, 0x012e,\r
-+      0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020,\r
-+      0x9086, 0x0006, 0x1118, 0x080c, 0xe26c, 0x0c38, 0x6020, 0x9086,\r
-+      0x0009, 0x1130, 0xab7a, 0x080c, 0x6d80, 0x080c, 0xabed, 0x0c10,\r
-+      0x6020, 0x9086, 0x000a, 0x0990, 0x0878, 0x0016, 0x0026, 0x0086,\r
-+      0x9046, 0x00a9, 0x080c, 0x9496, 0x008e, 0x002e, 0x001e, 0x0005,\r
-+      0x00f6, 0x0126, 0x2079, 0x19e7, 0x2091, 0x8000, 0x080c, 0x94df,\r
-+      0x080c, 0x9573, 0x080c, 0x67b2, 0x012e, 0x00fe, 0x0005, 0x00b6,\r
-+      0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006,\r
-+      0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x7620, 0x2660, 0x2678,\r
-+      0x8cff, 0x0904, 0x945b, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904,\r
-+      0x9456, 0x88ff, 0x0120, 0x605c, 0x9106, 0x1904, 0x9456, 0x7030,\r
-+      0x9c06, 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c,\r
-+      0x86f6, 0x080c, 0x9e32, 0x68c3, 0x0000, 0x080c, 0xa338, 0x7033,\r
-+      0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,\r
-+      0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069,\r
-+      0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040,\r
-+      0x7008, 0xc0ad, 0x700a, 0x6003, 0x0009, 0x630a, 0x0804, 0x9456,\r
-+      0x7020, 0x9c36, 0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140,\r
-+      0x2c00, 0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000,\r
-+      0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,\r
-+      0x600f, 0x0000, 0x6044, 0xc0fc, 0x6046, 0x6014, 0x2048, 0x080c,\r
-+      0xc838, 0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xca4d,\r
-+      0x1118, 0x080c, 0xb5b5, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877,\r
-+      0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xcb36, 0x080c, 0xe621,\r
-+      0x080c, 0x6d80, 0x008e, 0x003e, 0x001e, 0x080c, 0xca27, 0x080c,\r
-+      0xac28, 0x080c, 0xa20e, 0x00ce, 0x0804, 0x93d0, 0x2c78, 0x600c,\r
-+      0x2060, 0x0804, 0x93d0, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce,\r
-+      0x00de, 0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086,\r
-+      0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xe621, 0x080c,\r
-+      0xe26c, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xb5b5, 0x6020,\r
-+      0x9086, 0x0002, 0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,\r
-+      0x0904, 0x943c, 0x9086, 0x008b, 0x0904, 0x943c, 0x0840, 0x6020,\r
-+      0x9086, 0x0005, 0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,\r
-+      0x09c8, 0x9086, 0x008b, 0x09b0, 0x0804, 0x944f, 0x0006, 0x00f6,\r
-+      0x00e6, 0x0096, 0x00b6, 0x00c6, 0x0066, 0x0016, 0x0126, 0x2091,\r
-+      0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x2079, 0x19e7, 0x9036,\r
-+      0x7828, 0x2060, 0x8cff, 0x0538, 0x6010, 0x9b06, 0x1500, 0x6043,\r
-+      0xffff, 0x080c, 0xaa75, 0x01d8, 0x610c, 0x0016, 0x080c, 0x9fa2,\r
-+      0x6014, 0x2048, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016,\r
-+      0x0036, 0x0086, 0x080c, 0xcb36, 0x080c, 0xe621, 0x080c, 0x6d80,\r
-+      0x008e, 0x003e, 0x001e, 0x080c, 0xac28, 0x00ce, 0x08d8, 0x2c30,\r
-+      0x600c, 0x2060, 0x08b8, 0x080c, 0x67cf, 0x012e, 0x001e, 0x006e,\r
-+      0x00ce, 0x00be, 0x009e, 0x00ee, 0x00fe, 0x000e, 0x0005, 0x0096,\r
-+      0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036, 0x7820, 0x9065, 0x0904,\r
-+      0x9546, 0x600c, 0x0006, 0x6044, 0xc0fc, 0x6046, 0x600f, 0x0000,\r
-+      0x7830, 0x9c06, 0x1588, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508,\r
-+      0x080c, 0x86f6, 0x080c, 0x9e32, 0x68c3, 0x0000, 0x080c, 0xa338,\r
-+      0x7833, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,\r
-+      0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a,\r
-+      0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,\r
-+      0x0058, 0x080c, 0x6a03, 0x1538, 0x6003, 0x0009, 0x630a, 0x7808,\r
-+      0xc0ad, 0x780a, 0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xc836,\r
-+      0x01b0, 0x6020, 0x9086, 0x0003, 0x1508, 0x080c, 0xca4d, 0x1118,\r
-+      0x080c, 0xb5b5, 0x0060, 0x080c, 0x6a03, 0x1168, 0xa867, 0x0103,\r
-+      0xab7a, 0xa877, 0x0000, 0x080c, 0x6d80, 0x080c, 0xca27, 0x080c,\r
-+      0xac28, 0x080c, 0xa20e, 0x000e, 0x0804, 0x94e6, 0x7e22, 0x7e1e,\r
-+      0x00de, 0x00ce, 0x006e, 0x000e, 0x009e, 0x0005, 0x6020, 0x9086,\r
-+      0x0006, 0x1118, 0x080c, 0xe26c, 0x0c50, 0x080c, 0xb5b5, 0x6020,\r
-+      0x9086, 0x0002, 0x1150, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,\r
-+      0x0990, 0x9086, 0x008b, 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005,\r
-+      0x19b0, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086,\r
-+      0x008b, 0x0d00, 0x0860, 0x0006, 0x0096, 0x00b6, 0x00c6, 0x0066,\r
-+      0x9036, 0x7828, 0x9065, 0x0510, 0x6010, 0x2058, 0x600c, 0x0006,\r
-+      0x3e08, 0x918e, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x11a8, 0x6043,\r
-+      0xffff, 0x080c, 0xaa75, 0x0180, 0x610c, 0x080c, 0x9fa2, 0x6014,\r
-+      0x2048, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6d80,\r
-+      0x080c, 0xac28, 0x000e, 0x08f0, 0x2c30, 0x0ce0, 0x006e, 0x00ce,\r
-+      0x00be, 0x009e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066,\r
-+      0x080c, 0x613b, 0x11b0, 0x2071, 0x19e7, 0x7030, 0x9080, 0x0005,\r
-+      0x2004, 0x904d, 0x0170, 0xa878, 0x9606, 0x1158, 0x2071, 0x19e7,\r
-+      0x7030, 0x9035, 0x0130, 0x9080, 0x0005, 0x2004, 0x9906, 0x1108,\r
-+      0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00c6, 0x2660,\r
-+      0x6043, 0xffff, 0x080c, 0xaa75, 0x0178, 0x080c, 0x9fa2, 0x6014,\r
-+      0x2048, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xcb36,\r
-+      0x080c, 0x6d80, 0x080c, 0xac28, 0x00ce, 0x0005, 0x00b6, 0x00e6,\r
-+      0x00c6, 0x080c, 0xa8f4, 0x0106, 0x190c, 0xa896, 0x2071, 0x0101,\r
-+      0x2e04, 0xc0c4, 0x2072, 0x6044, 0xd0fc, 0x1138, 0x010e, 0x190c,\r
-+      0xa8b2, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x2071, 0x19e7, 0x7030,\r
-+      0x9005, 0x0da0, 0x9c06, 0x190c, 0x0d7d, 0x7036, 0x080c, 0x86f6,\r
-+      0x7004, 0x9084, 0x0007, 0x0002, 0x960e, 0x9610, 0x9617, 0x9621,\r
-+      0x962f, 0x960e, 0x9617, 0x960c, 0x080c, 0x0d7d, 0x0428, 0x0005,\r
-+      0x080c, 0xaa60, 0x7007, 0x0000, 0x7033, 0x0000, 0x00e8, 0x0066,\r
-+      0x9036, 0x080c, 0x9fa2, 0x006e, 0x7007, 0x0000, 0x7033, 0x0000,\r
-+      0x0098, 0x080c, 0xaa4b, 0x0140, 0x080c, 0xaa60, 0x0128, 0x0066,\r
-+      0x9036, 0x080c, 0x9fa2, 0x006e, 0x7033, 0x0000, 0x0028, 0x080c,\r
-+      0xaa4b, 0x080c, 0xa338, 0x0000, 0x010e, 0x190c, 0xa8b2, 0x00ce,\r
-+      0x00ee, 0x00be, 0x0005, 0x00d6, 0x00c6, 0x080c, 0xa8f4, 0x0106,\r
-+      0x190c, 0xa896, 0x6044, 0xd0fc, 0x1130, 0x010e, 0x190c, 0xa8b2,\r
-+      0x00ce, 0x00de, 0x0005, 0x2069, 0x19e7, 0x684c, 0x9005, 0x0da8,\r
-+      0x9c06, 0x190c, 0x0d7d, 0x6852, 0x00e6, 0x2d70, 0x080c, 0x926e,\r
-+      0x00ee, 0x080c, 0x8703, 0x0016, 0x2009, 0x0040, 0x080c, 0x21b0,\r
-+      0x001e, 0x683c, 0x9084, 0x0003, 0x0002, 0x966b, 0x966c, 0x968a,\r
-+      0x9669, 0x080c, 0x0d7d, 0x0460, 0x6868, 0x9086, 0x0001, 0x0190,\r
-+      0x600c, 0x9015, 0x0160, 0x6a4a, 0x600f, 0x0000, 0x6044, 0xc0fc,\r
-+      0x6046, 0x9006, 0x7042, 0x684e, 0x683f, 0x0000, 0x00c8, 0x684a,\r
-+      0x6846, 0x0ca0, 0x686b, 0x0000, 0x6848, 0x9065, 0x0d78, 0x6003,\r
-+      0x0002, 0x0c60, 0x9006, 0x686a, 0x6852, 0x686e, 0x600c, 0x9015,\r
-+      0x0120, 0x6a4a, 0x600f, 0x0000, 0x0018, 0x684e, 0x684a, 0x6846,\r
-+      0x684f, 0x0000, 0x010e, 0x190c, 0xa8b2, 0x00ce, 0x00de, 0x0005,\r
-+      0x0005, 0x6020, 0x9084, 0x000f, 0x000b, 0x0005, 0x96b6, 0x96b9,\r
-+      0x9b27, 0x9bb6, 0x96b9, 0x9b27, 0x9bb6, 0x96b6, 0x96b9, 0x96b6,\r
-+      0x96b6, 0x96b6, 0x96b6, 0x96b6, 0x96b6, 0x96b6, 0x080c, 0x95de,\r
-+      0x0005, 0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004,\r
-+      0x908a, 0x0053, 0x1a0c, 0x0d7d, 0x6110, 0x2158, 0xb984, 0x2c78,\r
-+      0x2061, 0x0100, 0x619a, 0x908a, 0x0040, 0x1a04, 0x9725, 0x005b,\r
-+      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e,\r
-+      0x015e, 0x00be, 0x0005, 0x98aa, 0x98e5, 0x990e, 0x99b6, 0x99d8,\r
-+      0x99de, 0x99eb, 0x99f3, 0x99ff, 0x9a05, 0x9a16, 0x9a05, 0x9a6e,\r
-+      0x99f3, 0x9a7a, 0x9a80, 0x99ff, 0x9a80, 0x9a8c, 0x9723, 0x9723,\r
-+      0x9723, 0x9723, 0x9723, 0x9723, 0x9723, 0x9723, 0x9723, 0x9723,\r
-+      0x9723, 0x9fc3, 0x9fe6, 0x9ff7, 0xa017, 0xa049, 0x99eb, 0x9723,\r
-+      0x99eb, 0x9a05, 0x9723, 0x990e, 0x99b6, 0x9723, 0xa42b, 0x9a05,\r
-+      0x9723, 0xa447, 0x9a05, 0x9723, 0x99ff, 0x98a4, 0x9746, 0x9723,\r
-+      0xa463, 0xa4d0, 0xa5b0, 0x9723, 0xa5bd, 0x99e8, 0xa5e8, 0x9723,\r
-+      0xa053, 0xa5f4, 0x9723, 0x080c, 0x0d7d, 0x2100, 0x005b, 0x00fe,\r
-+      0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e,\r
-+      0x00be, 0x0005, 0xa694, 0xa746, 0x9744, 0x976d, 0x9819, 0x9824,\r
-+      0x9744, 0x99eb, 0x9744, 0x986b, 0x9877, 0x9788, 0x9744, 0x97a3,\r
-+      0x97d7, 0xaacb, 0xab10, 0x9a05, 0x080c, 0x0d7d, 0x00d6, 0x0096,\r
-+      0x080c, 0x9a9f, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800,\r
-+      0x7814, 0x2048, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026,\r
-+      0x60c3, 0x0018, 0x080c, 0x9e02, 0x009e, 0x00de, 0x0005, 0x7810,\r
-+      0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0xab57, 0x1118, 0x9084,\r
-+      0xff80, 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c,\r
-+      0x9a9f, 0x7003, 0x0500, 0x7814, 0x2048, 0xa874, 0x700a, 0xa878,\r
-+      0x700e, 0xa87c, 0x7012, 0xa880, 0x7016, 0xa884, 0x701a, 0xa888,\r
-+      0x701e, 0x60c3, 0x0010, 0x080c, 0x9e02, 0x009e, 0x00de, 0x0005,\r
-+      0x00d6, 0x0096, 0x080c, 0x9a9f, 0x7003, 0x0500, 0x7814, 0x2048,\r
-+      0xa8cc, 0x700a, 0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016,\r
-+      0xa8dc, 0x701a, 0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, 0x9e02,\r
-+      0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x9a9f, 0x20e9, 0x0000, 0x2001, 0x19a3, 0x2003, 0x0000,\r
-+      0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860,\r
-+      0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016,\r
-+      0x200c, 0x2001, 0x0001, 0x080c, 0x2195, 0x080c, 0xd5b1, 0x9006,\r
-+      0x080c, 0x2195, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28,\r
-+      0x04d9, 0x080c, 0x9e02, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6,\r
-+      0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x9aea, 0x20e9, 0x0000,\r
-+      0x2001, 0x19a3, 0x2003, 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200,\r
-+      0xa873, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860,\r
-+      0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016,\r
-+      0x200c, 0x080c, 0xd5b1, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048,\r
-+      0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fec, 0x080c, 0x9e02,\r
-+      0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003,\r
-+      0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0,\r
-+      0x0005, 0x080c, 0x9a9f, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a,\r
-+      0x60c3, 0x0008, 0x0804, 0x9e02, 0x00d6, 0x00e6, 0x080c, 0x9aea,\r
-+      0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095,\r
-+      0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805,\r
-+      0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x983a, 0x2069,\r
-+      0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x9843,\r
-+      0x2069, 0x19b3, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19cd, 0x20a9,\r
-+      0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010,\r
-+      0x8000, 0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072,\r
-+      0x8d68, 0x8e70, 0x1f04, 0x9851, 0x60c3, 0x004c, 0x080c, 0x9e02,\r
-+      0x00ee, 0x00de, 0x0005, 0x080c, 0x9a9f, 0x7003, 0x6300, 0x7007,\r
-+      0x0028, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x00d6,\r
-+      0x0026, 0x0016, 0x080c, 0x9aea, 0x7003, 0x0200, 0x7814, 0x700e,\r
-+      0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2069,\r
-+      0x1923, 0x6810, 0xd084, 0x1148, 0x2073, 0x0500, 0x8e70, 0x2073,\r
-+      0x0000, 0x8e70, 0x8108, 0x9290, 0x0004, 0x2073, 0x0800, 0x8e70,\r
-+      0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x9e02,\r
-+      0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1818, 0x2004, 0x609a,\r
-+      0x0804, 0x9e02, 0x080c, 0x9a9f, 0x7003, 0x5200, 0x2069, 0x1847,\r
-+      0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x262e, 0x710e,\r
-+      0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,\r
-+      0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801,\r
-+      0x20a1, 0x0254, 0x4003, 0x080c, 0xab57, 0x1120, 0xb8a0, 0x9082,\r
-+      0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7032, 0x2001, 0x1820,\r
-+      0x2004, 0x7036, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff,\r
-+      0x7036, 0x60c3, 0x001c, 0x0804, 0x9e02, 0x080c, 0x9a9f, 0x7003,\r
-+      0x0500, 0x080c, 0xab57, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,\r
-+      0x2001, 0x181f, 0x2004, 0x700a, 0x2001, 0x1820, 0x2004, 0x700e,\r
-+      0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9,\r
-+      0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1,\r
-+      0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0x9e02, 0x080c, 0x9a9f,\r
-+      0x9006, 0x080c, 0x6a35, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003,\r
-+      0x0400, 0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d,\r
-+      0x0120, 0x9006, 0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300,\r
-+      0xb8a0, 0x9086, 0x007e, 0x1904, 0x997d, 0x00d6, 0x2069, 0x196c,\r
-+      0x2001, 0x1837, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808,\r
-+      0x9084, 0x2000, 0x7012, 0x080c, 0xab6e, 0x680c, 0x7016, 0x701f,\r
-+      0x2710, 0x6818, 0x7022, 0x681c, 0x7026, 0x0090, 0x6800, 0x700a,\r
-+      0x6804, 0x700e, 0x6808, 0x080c, 0x74e9, 0x1118, 0x9084, 0x37ff,\r
-+      0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xab6e, 0x680c, 0x7016,\r
-+      0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,\r
-+      0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801,\r
-+      0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xa67b, 0x2069, 0x1974,\r
-+      0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x56de, 0xd0e4,\r
-+      0x0110, 0x680c, 0x700e, 0x00de, 0x04a8, 0x2001, 0x1837, 0x2004,\r
-+      0xd0a4, 0x0170, 0x0016, 0x2001, 0x196d, 0x200c, 0x60e0, 0x9106,\r
-+      0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x266f, 0x61e2, 0x001e,\r
-+      0x20e1, 0x0001, 0x2099, 0x196c, 0x20e9, 0x0000, 0x20a1, 0x024e,\r
-+      0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1,\r
-+      0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a,\r
-+      0x4003, 0x080c, 0xa67b, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099,\r
-+      0x1974, 0x4003, 0x60c3, 0x0074, 0x0804, 0x9e02, 0x080c, 0x9a9f,\r
-+      0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000,\r
-+      0x9006, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, 0xd1ac, 0x1110,\r
-+      0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002,\r
-+      0x00d6, 0x0804, 0x9a4f, 0x7026, 0x60c3, 0x0014, 0x0804, 0x9e02,\r
-+      0x080c, 0x9a9f, 0x7003, 0x5000, 0x0804, 0x9928, 0x080c, 0x9a9f,\r
-+      0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x9e02,\r
-+      0x080c, 0x9ae1, 0x0010, 0x080c, 0x9aea, 0x7003, 0x0200, 0x60c3,\r
-+      0x0004, 0x0804, 0x9e02, 0x080c, 0x9aea, 0x7003, 0x0100, 0x700b,\r
-+      0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x080c,\r
-+      0x9aea, 0x7003, 0x0200, 0x0804, 0x9928, 0x080c, 0x9aea, 0x7003,\r
-+      0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003,\r
-+      0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x00d6, 0x080c,\r
-+      0x9aea, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800, 0xb894,\r
-+      0x9086, 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190, 0xb998,\r
-+      0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058,\r
-+      0x700f, 0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f, 0x0700,\r
-+      0x0010, 0x700f, 0x0800, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe,\r
-+      0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010,\r
-+      0x2009, 0x1869, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026,\r
-+      0x2009, 0x1867, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbad4, 0xd28c,\r
-+      0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec,\r
-+      0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e,\r
-+      0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0x9e02, 0x080c, 0x9aea,\r
-+      0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014,\r
-+      0x0804, 0x9e02, 0x080c, 0x9aea, 0x7003, 0x0200, 0x0804, 0x98ae,\r
-+      0x080c, 0x9aea, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00,\r
-+      0x60c3, 0x0008, 0x0804, 0x9e02, 0x080c, 0x9aea, 0x7003, 0x0100,\r
-+      0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x0026, 0x00d6,\r
-+      0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026,\r
-+      0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c,\r
-+      0xa690, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,\r
-+      0x687c, 0x700a, 0x6880, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e,\r
-+      0x003e, 0x00de, 0x080c, 0x9df6, 0x721a, 0x9f95, 0x0000, 0x7222,\r
-+      0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c,\r
-+      0xa690, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800,\r
-+      0x687c, 0x700a, 0x6880, 0x700e, 0x00de, 0x7013, 0x2029, 0x0c10,\r
-+      0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f, 0x0000,\r
-+      0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300, 0x2021,\r
-+      0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2300,\r
-+      0x2021, 0x0100, 0x080c, 0xa690, 0xb810, 0x9305, 0x7002, 0xb814,\r
-+      0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005,\r
-+      0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x687c, 0x700a,\r
-+      0x6880, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e,\r
-+      0x00de, 0x080c, 0x9df6, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,\r
-+      0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x9df6, 0x721a, 0x7a08,\r
-+      0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6,\r
-+      0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240,\r
-+      0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d7d, 0x908a, 0x0092, 0x1a0c,\r
-+      0x0d7d, 0x6110, 0x2158, 0xb984, 0x2c78, 0x2061, 0x0100, 0x619a,\r
-+      0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,\r
-+      0x0005, 0x9b58, 0x9b67, 0x9b72, 0x9b56, 0x9b56, 0x9b56, 0x9b58,\r
-+      0x9b56, 0x9b56, 0x9b56, 0x9b56, 0x9b56, 0x9b56, 0x080c, 0x0d7d,\r
-+      0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x2979, 0x0228, 0x2011,\r
-+      0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x9e02, 0x0431,\r
-+      0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c,\r
-+      0x0804, 0x9e02, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3,\r
-+      0x0004, 0x0804, 0x9e02, 0x0026, 0x080c, 0xa690, 0xb810, 0x9085,\r
-+      0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a,\r
-+      0x6880, 0x700e, 0x7013, 0x0009, 0x0804, 0x9aba, 0x0026, 0x080c,\r
-+      0xa690, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069,\r
-+      0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x2001, 0x0099, 0x7012,\r
-+      0x0804, 0x9b1c, 0x0026, 0x080c, 0xa690, 0xb810, 0x9085, 0x8500,\r
-+      0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880,\r
-+      0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x9b1c, 0x00b6, 0x00c6,\r
-+      0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240,\r
-+      0x7804, 0x908a, 0x0040, 0x0a0c, 0x0d7d, 0x908a, 0x0057, 0x1a0c,\r
-+      0x0d7d, 0x7910, 0x2158, 0xb984, 0x2061, 0x0100, 0x619a, 0x9082,\r
-+      0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005,\r
-+      0x9beb, 0x9beb, 0x9beb, 0x9c11, 0x9beb, 0x9beb, 0x9beb, 0x9beb,\r
-+      0x9beb, 0x9beb, 0x9beb, 0xa1eb, 0xa1f3, 0xa1fb, 0xa203, 0x9beb,\r
-+      0x9beb, 0x9beb, 0xa1e3, 0x080c, 0x0d7d, 0x6813, 0x0008, 0xba8c,\r
-+      0x8210, 0xb8d4, 0xd084, 0x0128, 0x7a4e, 0x7b14, 0x7b52, 0x722e,\r
-+      0x732a, 0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, 0x9295,\r
-+      0x0600, 0x7202, 0xba14, 0x7206, 0x2069, 0x1800, 0x6a7c, 0x720a,\r
-+      0x6a80, 0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff,\r
-+      0x0005, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e,\r
-+      0x0005, 0x9c21, 0x9c21, 0x9c23, 0x9c21, 0x9c21, 0x9c21, 0x9c3d,\r
-+      0x9c21, 0x080c, 0x0d7d, 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600,\r
-+      0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, 0x1847, 0x6804, 0xd0bc,\r
-+      0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033,\r
-+      0x3f00, 0x60c3, 0x0001, 0x0804, 0x9e02, 0x2009, 0x0003, 0x0019,\r
-+      0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0xa690, 0x001e, 0xb810,\r
-+      0x9085, 0x0100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6a7c,\r
-+      0x720a, 0x6a80, 0x720e, 0x7013, 0x0888, 0x918d, 0x0008, 0x7116,\r
-+      0x080c, 0x9df6, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005,\r
-+      0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0036,\r
-+      0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, 0x2058, 0x76dc,\r
-+      0x96b4, 0x0028, 0x0110, 0x737c, 0x7480, 0x2500, 0x76dc, 0x96b4,\r
-+      0x0028, 0x0140, 0x2001, 0x04ff, 0x6062, 0x6067, 0xffff, 0x636a,\r
-+      0x646e, 0x0050, 0x2001, 0x00ff, 0x9085, 0x0400, 0x6062, 0x6067,\r
-+      0xffff, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6073, 0x0530, 0x6077,\r
-+      0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x9085,\r
-+      0x0020, 0x607a, 0x607f, 0x0000, 0x2b00, 0x6082, 0x6087, 0xffff,\r
-+      0x7814, 0x0096, 0x2048, 0xa848, 0x608a, 0xa844, 0x608e, 0xa838,\r
-+      0x60c6, 0xa834, 0x60ca, 0x009e, 0xb86c, 0x60ce, 0x60ab, 0x0036,\r
-+      0x60af, 0x95d5, 0x60d7, 0x0000, 0x2001, 0x1837, 0x2004, 0x9084,\r
-+      0x0028, 0x0128, 0x609f, 0x0000, 0x2001, 0x0092, 0x0058, 0x6028,\r
-+      0xc0bd, 0x602a, 0x609f, 0x00ff, 0x2011, 0xffff, 0x080c, 0x2a44,\r
-+      0x2001, 0x00b2, 0x2010, 0x900e, 0x080c, 0x2a53, 0x2009, 0x07d0,\r
-+      0x080c, 0x86fb, 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de,\r
-+      0x00ee, 0x00be, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066,\r
-+      0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160,\r
-+      0x7810, 0x2058, 0xb8a0, 0x2028, 0x76dc, 0xd6ac, 0x1168, 0x9582,\r
-+      0x007e, 0x1250, 0x2500, 0x9094, 0xff80, 0x1130, 0x9080, 0x3374,\r
-+      0x2015, 0x9294, 0x00ff, 0x0020, 0xb910, 0xba14, 0x737c, 0x7480,\r
-+      0x70dc, 0xd0ac, 0x1130, 0x9582, 0x007e, 0x1218, 0x9584, 0xff80,\r
-+      0x0138, 0x9185, 0x0400, 0x6062, 0x6266, 0x636a, 0x646e, 0x0030,\r
-+      0x6063, 0x0400, 0x6266, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6072,\r
-+      0x6077, 0x0000, 0xb864, 0xd0a4, 0x0110, 0x6077, 0x0008, 0xb88c,\r
-+      0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a,\r
-+      0x607f, 0x0000, 0x2b00, 0x6082, 0x6087, 0xffff, 0x7814, 0x0096,\r
-+      0x2048, 0xa848, 0x608a, 0xa844, 0x608e, 0xa838, 0x60c6, 0xa834,\r
-+      0x60ca, 0x009e, 0xb86c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5,\r
-+      0x60d7, 0x0000, 0xba84, 0x629e, 0x00f6, 0x2079, 0x0140, 0x7803,\r
-+      0x0000, 0x00fe, 0x900e, 0x2011, 0x0092, 0x080c, 0x2a53, 0x2009,\r
-+      0x07d0, 0x080c, 0x86fb, 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce,\r
-+      0x00de, 0x00ee, 0x00be, 0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6,\r
-+      0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800,\r
-+      0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910, 0xba14, 0x737c, 0x7480,\r
-+      0x7820, 0x0002, 0x9d81, 0x9d81, 0x9d81, 0x9d81, 0x9d81, 0x9d81,\r
-+      0x9d81, 0x9d81, 0x9d81, 0x9d81, 0x9d83, 0x9d81, 0x9d81, 0x9d81,\r
-+      0x9d81, 0x080c, 0x0d7d, 0xb884, 0x609e, 0x7814, 0x2048, 0xa87c,\r
-+      0xd0fc, 0x0558, 0xaf90, 0x9784, 0xff00, 0x9105, 0x6062, 0x873f,\r
-+      0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa878, 0xc0fc, 0x9005,\r
-+      0x000e, 0x1160, 0xaf94, 0x87ff, 0x0198, 0x2039, 0x0098, 0x9705,\r
-+      0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200,\r
-+      0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0xb884, 0x609e, 0x0050,\r
-+      0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062,\r
-+      0x6073, 0x2029, 0xa87c, 0xd0fc, 0x0118, 0xaf94, 0x87ff, 0x1120,\r
-+      0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a, 0x646e, 0x6077,\r
-+      0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,\r
-+      0x607f, 0x0000, 0xa848, 0x608a, 0xa844, 0x608e, 0xa838, 0x60c6,\r
-+      0xa834, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,\r
-+      0x080c, 0xa670, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005,\r
-+      0x0110, 0x2009, 0x1b58, 0x080c, 0x86fb, 0x003e, 0x004e, 0x005e,\r
-+      0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7a40, 0x9294,\r
-+      0x00ff, 0x8217, 0x0005, 0x00d6, 0x2069, 0x19e7, 0x686b, 0x0001,\r
-+      0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c,\r
-+      0x86ed, 0x0005, 0x0016, 0x2001, 0x180c, 0x200c, 0x9184, 0x0600,\r
-+      0x9086, 0x0600, 0x0128, 0x0089, 0x080c, 0x86ed, 0x001e, 0x0005,\r
-+      0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001, 0x19e8, 0x2003, 0x0000,\r
-+      0x2001, 0x19f3, 0x2003, 0x0000, 0x0c88, 0x0006, 0x0016, 0x0026,\r
-+      0x2009, 0x1804, 0x2011, 0x0009, 0x080c, 0x2a53, 0x002e, 0x001e,\r
-+      0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x080c, 0xa8f4, 0x0106,\r
-+      0x190c, 0xa896, 0x2061, 0x0100, 0x61a4, 0x60a7, 0x95f5, 0x0016,\r
-+      0x0026, 0x2009, 0x1804, 0x2011, 0x0008, 0x080c, 0x2a53, 0x002e,\r
-+      0x001e, 0x010e, 0x190c, 0xa8b2, 0x000e, 0xa001, 0xa001, 0xa001,\r
-+      0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026,\r
-+      0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x74e9, 0x1510, 0x2001,\r
-+      0x1a0c, 0x2004, 0x9005, 0x1904, 0x9eb3, 0x080c, 0x758a, 0x11a8,\r
-+      0x2069, 0x0380, 0x6843, 0x0101, 0x6844, 0xd084, 0x1de8, 0x2061,\r
-+      0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, 0xd084, 0x090c, 0x0d7d,\r
-+      0x6843, 0x0100, 0x080c, 0x86ed, 0x04b0, 0x00c6, 0x2061, 0x19e7,\r
-+      0x00f0, 0x6904, 0x9194, 0x4000, 0x0598, 0x080c, 0x9e32, 0x080c,\r
-+      0x2a1a, 0x00c6, 0x2061, 0x19e7, 0x6134, 0x9192, 0x0008, 0x1278,\r
-+      0x8108, 0x6136, 0x080c, 0xa896, 0x6130, 0x080c, 0xa8b2, 0x00ce,\r
-+      0x81ff, 0x01c8, 0x080c, 0x86ed, 0x080c, 0x9e25, 0x00a0, 0x080c,\r
-+      0xa896, 0x6130, 0x91e5, 0x0000, 0x0150, 0x080c, 0xe717, 0x080c,\r
-+      0x86f6, 0x6003, 0x0001, 0x2009, 0x0014, 0x080c, 0xac8c, 0x080c,\r
-+      0xa8b2, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005,\r
-+      0x2001, 0x1a0c, 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19e7,\r
-+      0x6134, 0x9192, 0x0003, 0x1ad8, 0x8108, 0x6136, 0x00ce, 0x080c,\r
-+      0x86ed, 0x080c, 0x5ee4, 0x2009, 0x1846, 0x2114, 0x8210, 0x220a,\r
-+      0x0c10, 0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c,\r
-+      0x8703, 0x080c, 0xa896, 0x2001, 0x0387, 0x2003, 0x0202, 0x2071,\r
-+      0x19e7, 0x714c, 0x81ff, 0x0904, 0x9f5b, 0x2061, 0x0100, 0x2069,\r
-+      0x0140, 0x080c, 0x74e9, 0x1510, 0x0036, 0x2019, 0x0002, 0x080c,\r
-+      0xa118, 0x003e, 0x714c, 0x2160, 0x080c, 0xe717, 0x2009, 0x004a,\r
-+      0x6220, 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006,\r
-+      0x2009, 0x004a, 0x6003, 0x0003, 0x080c, 0xac8c, 0x2001, 0x0386,\r
-+      0x2003, 0x5040, 0x080c, 0x758a, 0x0804, 0x9f5b, 0x6904, 0xd1f4,\r
-+      0x0904, 0x9f68, 0x080c, 0x2a1a, 0x00c6, 0x704c, 0x9065, 0x090c,\r
-+      0x0d7d, 0x6020, 0x00ce, 0x9086, 0x0006, 0x1518, 0x61c8, 0x60c4,\r
-+      0x9105, 0x11f8, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01d0, 0x6214,\r
-+      0x9294, 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1560, 0x0010,\r
-+      0xc0d4, 0x200a, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016,\r
-+      0x704c, 0x2060, 0x080c, 0x963b, 0x2009, 0x0049, 0x080c, 0xac8c,\r
-+      0x00d0, 0x0036, 0x2019, 0x0001, 0x080c, 0xa118, 0x003e, 0x714c,\r
-+      0x2160, 0x080c, 0xe717, 0x2009, 0x004a, 0x6220, 0x9296, 0x0009,\r
-+      0x1130, 0x6114, 0x2148, 0xa87b, 0x0006, 0x2009, 0x004a, 0x6003,\r
-+      0x0003, 0x080c, 0xac8c, 0x2001, 0x0387, 0x2003, 0x0200, 0x080c,\r
-+      0xa8b2, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005,\r
-+      0xd1ec, 0x1904, 0x9f12, 0x0804, 0x9f14, 0x0026, 0x00e6, 0x2071,\r
-+      0x19e7, 0x706c, 0xd084, 0x01e8, 0xc084, 0x706e, 0x714c, 0x81ff,\r
-+      0x01c0, 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e, 0x0006,\r
-+      0x1138, 0x2009, 0x1984, 0x2011, 0x0012, 0x080c, 0x2a53, 0x0048,\r
-+      0x928e, 0x0009, 0x0db0, 0x2009, 0x1984, 0x2011, 0x0016, 0x080c,\r
-+      0x2a53, 0x00ee, 0x002e, 0x0005, 0x9036, 0x2001, 0x19f1, 0x2004,\r
-+      0x9005, 0x0128, 0x9c06, 0x0128, 0x2c30, 0x600c, 0x0cc8, 0x9085,\r
-+      0x0001, 0x0005, 0x00f6, 0x2079, 0x19e7, 0x610c, 0x9006, 0x600e,\r
-+      0x6044, 0xc0fc, 0x6046, 0x86ff, 0x1140, 0x7824, 0x9c06, 0x1118,\r
-+      0x7826, 0x782a, 0x0050, 0x792a, 0x0040, 0x00c6, 0x2660, 0x610e,\r
-+      0x00ce, 0x7824, 0x9c06, 0x1108, 0x7e26, 0x080c, 0xa20e, 0x080c,\r
-+      0xca27, 0x00fe, 0x0005, 0x080c, 0x9a9f, 0x7003, 0x1200, 0x7838,\r
-+      0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, 0x9086, 0x0004, 0x1148,\r
-+      0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb810, 0xb914, 0x00be,\r
-+      0x0020, 0x2061, 0x1800, 0x607c, 0x6180, 0x9084, 0x00ff, 0x700a,\r
-+      0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0x9e02, 0x080c, 0x9a9f,\r
-+      0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff,\r
-+      0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x0156,\r
-+      0x080c, 0x9aea, 0x7003, 0x0200, 0x080c, 0x87bb, 0x20a9, 0x0006,\r
-+      0x2011, 0xfff4, 0x2019, 0xfff5, 0x9ef0, 0x0002, 0x2305, 0x2072,\r
-+      0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002,\r
-+      0x1f04, 0xa006, 0x60c3, 0x001c, 0x015e, 0x0804, 0x9e02, 0x0016,\r
-+      0x0026, 0x080c, 0x9ac6, 0x080c, 0x9ad8, 0x9e80, 0x0004, 0x20e9,\r
-+      0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860,\r
-+      0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x009e, 0x7808, 0x9088,\r
-+      0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003, 0x9080, 0x0004,\r
-+      0x8003, 0x60c2, 0x080c, 0x9e02, 0x002e, 0x001e, 0x0005, 0x20a9,\r
-+      0x0010, 0x4003, 0x080c, 0xa67b, 0x20a1, 0x0240, 0x22a8, 0x4003,\r
-+      0x0c68, 0x080c, 0x9a9f, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3,\r
-+      0x0008, 0x0804, 0x9e02, 0x0016, 0x0026, 0x080c, 0x9a9f, 0x20e9,\r
-+      0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048,\r
-+      0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023, 0x2098, 0x009e, 0x7808,\r
-+      0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0x9e02,\r
-+      0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091,\r
-+      0x8000, 0x2071, 0x19e7, 0x7010, 0x2060, 0x8cff, 0x0188, 0x080c,\r
-+      0xca4d, 0x1110, 0x080c, 0xb5b5, 0x600c, 0x0006, 0x080c, 0xccc4,\r
-+      0x600f, 0x0000, 0x080c, 0xabed, 0x080c, 0xa20e, 0x00ce, 0x0c68,\r
-+      0x2c00, 0x7012, 0x700e, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005,\r
-+      0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,\r
-+      0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c,\r
-+      0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19e7,\r
-+      0x7030, 0x2060, 0x8cff, 0x0548, 0x080c, 0x9e32, 0x6ac0, 0x68c3,\r
-+      0x0000, 0x080c, 0x86f6, 0x00c6, 0x2061, 0x0100, 0x080c, 0xa7cc,\r
-+      0x00ce, 0x20a9, 0x01f4, 0x04b1, 0x080c, 0x95de, 0x6044, 0xd0ac,\r
-+      0x1128, 0x2001, 0x1988, 0x2004, 0x604a, 0x0020, 0x2009, 0x0013,\r
-+      0x080c, 0xac8c, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de,\r
-+      0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004,\r
-+      0x9096, 0x0001, 0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x86f6,\r
-+      0x6814, 0x9084, 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008,\r
-+      0x68c3, 0x0000, 0x2011, 0x5e8e, 0x080c, 0x863e, 0x20a9, 0x01f4,\r
-+      0x0009, 0x08c0, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804,\r
-+      0x9084, 0x4000, 0x190c, 0x2a1a, 0x0090, 0xd084, 0x0118, 0x6827,\r
-+      0x0001, 0x0010, 0x1f04, 0xa0fa, 0x7804, 0x9084, 0x1000, 0x0138,\r
-+      0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x0005,\r
-+      0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,\r
-+      0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c,\r
-+      0xdbff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x0380,\r
-+      0x701c, 0x0006, 0x701f, 0x0202, 0x2071, 0x19e7, 0x704c, 0x2060,\r
-+      0x8cff, 0x0904, 0xa1bd, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084,\r
-+      0x0002, 0x0904, 0xa1bd, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009,\r
-+      0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8703,\r
-+      0x080c, 0x1dd8, 0x0046, 0x2009, 0x00a5, 0x080c, 0x0e55, 0x2021,\r
-+      0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af,\r
-+      0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090,\r
-+      0x2071, 0x19e7, 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816,\r
-+      0x782b, 0x0008, 0x7057, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002,\r
-+      0x1128, 0x7884, 0x9005, 0x1110, 0x7887, 0x0001, 0x0016, 0x2009,\r
-+      0x0040, 0x080c, 0x21b0, 0x001e, 0x2009, 0x0000, 0x080c, 0x0e55,\r
-+      0x004e, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004,\r
-+      0x7804, 0x9084, 0x4000, 0x190c, 0x2a1a, 0x0090, 0xd08c, 0x0118,\r
-+      0x6827, 0x0002, 0x0010, 0x1f04, 0xa18b, 0x7804, 0x9084, 0x1000,\r
-+      0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a,\r
-+      0x6827, 0x4000, 0x6824, 0x83ff, 0x1180, 0x2009, 0x0049, 0x6020,\r
-+      0x9086, 0x0009, 0x0150, 0x080c, 0x963b, 0x6044, 0xd0ac, 0x1118,\r
-+      0x6003, 0x0002, 0x0010, 0x080c, 0xac8c, 0x000e, 0x2071, 0x0380,\r
-+      0xd08c, 0x1110, 0x701f, 0x0200, 0x000e, 0x001e, 0x002e, 0x006e,\r
-+      0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6,\r
-+      0x0126, 0x2091, 0x8000, 0x2069, 0x19e7, 0x6a06, 0x012e, 0x00de,\r
-+      0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19e7, 0x6a3e,\r
-+      0x012e, 0x00de, 0x0005, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042,\r
-+      0x7047, 0x1000, 0x00f8, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042,\r
-+      0x7047, 0x4000, 0x00b8, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042,\r
-+      0x7047, 0x2000, 0x0078, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042,\r
-+      0x7047, 0x0400, 0x0038, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042,\r
-+      0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0x9e02, 0x00e6, 0x2071,\r
-+      0x19e7, 0x702c, 0x9005, 0x0110, 0x8001, 0x702e, 0x00ee, 0x0005,\r
-+      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126,\r
-+      0x2091, 0x8000, 0x2071, 0x19e7, 0x7620, 0x2660, 0x2678, 0x2039,\r
-+      0x0001, 0x87ff, 0x0904, 0xa2b3, 0x8cff, 0x0904, 0xa2b3, 0x6020,\r
-+      0x9086, 0x0006, 0x1904, 0xa2ae, 0x88ff, 0x0138, 0x2800, 0x9c06,\r
-+      0x1904, 0xa2ae, 0x2039, 0x0000, 0x0050, 0x6010, 0x9b06, 0x1904,\r
-+      0xa2ae, 0x85ff, 0x0120, 0x605c, 0x9106, 0x1904, 0xa2ae, 0x7030,\r
-+      0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005, 0x1160, 0x6824,\r
-+      0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x86f6, 0x080c, 0xa338,\r
-+      0x7033, 0x0000, 0x0428, 0x080c, 0x86f6, 0x6820, 0xd0b4, 0x0110,\r
-+      0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, 0xa338,\r
-+      0x7033, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,\r
-+      0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a,\r
-+      0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,\r
-+      0x7020, 0x9c36, 0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140,\r
-+      0x2c00, 0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000,\r
-+      0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,\r
-+      0x89ff, 0x1168, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, 0x080c,\r
-+      0xc836, 0x0110, 0x080c, 0xe26c, 0x009e, 0x080c, 0xac28, 0x080c,\r
-+      0xa20e, 0x88ff, 0x1190, 0x00ce, 0x0804, 0xa229, 0x2c78, 0x600c,\r
-+      0x2060, 0x0804, 0xa229, 0x9006, 0x012e, 0x000e, 0x006e, 0x007e,\r
-+      0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce,\r
-+      0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x0096, 0x00c6,\r
-+      0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7,\r
-+      0x7648, 0x2660, 0x2678, 0x8cff, 0x0904, 0xa327, 0x6020, 0x9086,\r
-+      0x0006, 0x1904, 0xa322, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904,\r
-+      0xa322, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, 0x605c,\r
-+      0x9106, 0x15c0, 0x704c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001,\r
-+      0x080c, 0xa118, 0x703f, 0x0000, 0x9006, 0x704e, 0x706a, 0x7052,\r
-+      0x706e, 0x003e, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044,\r
-+      0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010,\r
-+      0x7047, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,\r
-+      0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xc836,\r
-+      0x0110, 0x080c, 0xe26c, 0x080c, 0xac28, 0x87ff, 0x1198, 0x00ce,\r
-+      0x0804, 0xa2d3, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa2d3, 0x9006,\r
-+      0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, 0x00ee,\r
-+      0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c80,\r
-+      0x00e6, 0x2071, 0x19e7, 0x7033, 0x0000, 0x7004, 0x9086, 0x0003,\r
-+      0x0158, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1118, 0x7007,\r
-+      0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6,\r
-+      0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,\r
-+      0x19e7, 0x2c10, 0x7648, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200,\r
-+      0x9c06, 0x11e0, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044,\r
-+      0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010,\r
-+      0x7047, 0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008,\r
-+      0x2678, 0x600f, 0x0000, 0x9085, 0x0001, 0x0020, 0x2c78, 0x600c,\r
-+      0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee,\r
-+      0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066,\r
-+      0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x7610,\r
-+      0x2660, 0x2678, 0x8cff, 0x0904, 0xa41a, 0x6010, 0x00b6, 0x2058,\r
-+      0xb8a0, 0x00be, 0x9206, 0x1904, 0xa415, 0x7030, 0x9c06, 0x1520,\r
-+      0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xa3f1, 0x080c, 0x9e32,\r
-+      0x68c3, 0x0000, 0x080c, 0xa338, 0x7033, 0x0000, 0x0036, 0x2069,\r
-+      0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,\r
-+      0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100, 0x6824, 0xd084,\r
-+      0x0110, 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36, 0x1110, 0x660c,\r
-+      0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,\r
-+      0x700e, 0x0010, 0x700f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,\r
-+      0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xca3c,\r
-+      0x1158, 0x080c, 0x321c, 0x080c, 0xca4d, 0x11f0, 0x080c, 0xb5b5,\r
-+      0x00d8, 0x080c, 0xa338, 0x08c0, 0x080c, 0xca4d, 0x1118, 0x080c,\r
-+      0xb5b5, 0x0090, 0x6014, 0x2048, 0x080c, 0xc836, 0x0168, 0x6020,\r
-+      0x9086, 0x0003, 0x1508, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,\r
-+      0x080c, 0x6d74, 0x080c, 0xca27, 0x080c, 0xccc4, 0x080c, 0xac28,\r
-+      0x080c, 0xa20e, 0x00ce, 0x0804, 0xa39a, 0x2c78, 0x600c, 0x2060,\r
-+      0x0804, 0xa39a, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de,\r
-+      0x00ee, 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20,\r
-+      0x080c, 0xe26c, 0x0c08, 0x00d6, 0x080c, 0x9aea, 0x7003, 0x0200,\r
-+      0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x1989,\r
-+      0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023,\r
-+      0x0004, 0x7027, 0x7878, 0x080c, 0x9e02, 0x00de, 0x0005, 0x080c,\r
-+      0x9aea, 0x700b, 0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814,\r
-+      0x9084, 0x00ff, 0x7022, 0x782c, 0x7026, 0x7860, 0x9084, 0x00ff,\r
-+      0x9085, 0x0200, 0x7002, 0x7860, 0x9084, 0xff00, 0x8007, 0x7006,\r
-+      0x60c2, 0x0804, 0x9e02, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68,\r
-+      0x2009, 0x0035, 0x080c, 0xceca, 0x00de, 0x1904, 0xa4c8, 0x080c,\r
-+      0x9a9f, 0x7003, 0x1300, 0x782c, 0x080c, 0xa5d3, 0x2068, 0x6820,\r
-+      0x9086, 0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0xab57,\r
-+      0x11d8, 0x9286, 0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe,\r
-+      0x0498, 0x9286, 0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd,\r
-+      0x0458, 0x9284, 0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b,\r
-+      0x00ff, 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810,\r
-+      0x700a, 0xb814, 0x700e, 0x00c0, 0xb884, 0x700e, 0x00a8, 0x080c,\r
-+      0xab57, 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250,\r
-+      0x00d6, 0x2069, 0x181f, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e,\r
-+      0x00de, 0x0010, 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016,\r
-+      0x60c3, 0x000c, 0x001e, 0x00de, 0x080c, 0x9e02, 0x00be, 0x0005,\r
-+      0x781b, 0x0001, 0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005,\r
-+      0x792c, 0x9180, 0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186,\r
-+      0x0003, 0x0904, 0xa546, 0x9186, 0x0005, 0x0904, 0xa52e, 0x9186,\r
-+      0x0004, 0x05f0, 0x9186, 0x0008, 0x0904, 0xa537, 0x7807, 0x0037,\r
-+      0x782f, 0x0003, 0x7817, 0x1700, 0x080c, 0xa5b0, 0x0005, 0x080c,\r
-+      0xa571, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800,\r
-+      0x6a44, 0xd2fc, 0x11f8, 0x0002, 0xa50f, 0xa51a, 0xa511, 0xa51a,\r
-+      0xa516, 0xa50f, 0xa50f, 0xa51a, 0xa51a, 0xa51a, 0xa51a, 0xa50f,\r
-+      0xa50f, 0xa50f, 0xa50f, 0xa50f, 0xa51a, 0xa50f, 0xa51a, 0x080c,\r
-+      0x0d7d, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010,\r
-+      0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, 0xa56a,\r
-+      0x080c, 0xa571, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000,\r
-+      0x6a00, 0x9286, 0x0002, 0x1108, 0x900e, 0x04e0, 0x080c, 0xa571,\r
-+      0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x0498, 0x04c9,\r
-+      0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005,\r
-+      0x0118, 0x9286, 0x0002, 0x1108, 0x900e, 0x0420, 0x0451, 0x00d6,\r
-+      0x0026, 0x792c, 0x2168, 0x6814, 0x0096, 0x2048, 0xa9ac, 0xa834,\r
-+      0x9112, 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c,\r
-+      0x9180, 0x0011, 0x2004, 0xd0fc, 0x1148, 0x9180, 0x0000, 0x2004,\r
-+      0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118, 0x2009, 0x4000,\r
-+      0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, 0x00de, 0x0804,\r
-+      0x9e02, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066, 0x080c, 0x9aea,\r
-+      0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, 0x710e, 0x7810,\r
-+      0x2058, 0xb8a0, 0x080c, 0xab57, 0x1118, 0x9092, 0x007e, 0x0268,\r
-+      0x00d6, 0x2069, 0x181f, 0x2d2c, 0x8d68, 0x2d34, 0x90d8, 0x1000,\r
-+      0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e, 0xbc84, 0x2029,\r
-+      0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004, 0x9086, 0x0003,\r
-+      0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020, 0x7312, 0x7416,\r
-+      0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e, 0x00be, 0x0005,\r
-+      0x080c, 0x9aea, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814, 0x700e,\r
-+      0x700e, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x080c, 0x9a96, 0x7003,\r
-+      0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e, 0x782c, 0x7012,\r
-+      0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, 0x701a, 0x60c3,\r
-+      0x0010, 0x0804, 0x9e02, 0x00e6, 0x2071, 0x0240, 0x0006, 0x00f6,\r
-+      0x2078, 0x7810, 0x00b6, 0x2058, 0xb8d4, 0xd084, 0x0120, 0x7850,\r
-+      0x702a, 0x784c, 0x702e, 0x00be, 0x00fe, 0x000e, 0x00ee, 0x0005,\r
-+      0x080c, 0x9ae1, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814, 0x700e,\r
-+      0x60c3, 0x0008, 0x0804, 0x9e02, 0x00a9, 0x7914, 0x712a, 0x60c3,\r
-+      0x0000, 0x60a7, 0x9575, 0x0026, 0x080c, 0x2979, 0x0228, 0x2011,\r
-+      0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x080c, 0x9e25, 0x080c,\r
-+      0x86ed, 0x0005, 0x0036, 0x0096, 0x00d6, 0x00e6, 0x7860, 0x2048,\r
-+      0xaa7c, 0x9296, 0x00c0, 0x9294, 0xfffd, 0xaa7e, 0xaa80, 0x9294,\r
-+      0x0300, 0xaa82, 0xa96c, 0x9194, 0x00ff, 0xab74, 0x9384, 0x00ff,\r
-+      0x908d, 0xc200, 0xa96e, 0x9384, 0xff00, 0x9215, 0xaa76, 0xa870,\r
-+      0xaa78, 0xa87a, 0xaa72, 0x00d6, 0x2069, 0x0200, 0x080c, 0xa690,\r
-+      0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000a, 0xa860,\r
-+      0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x4003, 0x60a3, 0x0035,\r
-+      0xaa68, 0x9294, 0x7000, 0x9286, 0x3000, 0x0110, 0x60a3, 0x0037,\r
-+      0x00ee, 0x00de, 0x009e, 0x003e, 0x0005, 0x900e, 0x7814, 0x0096,\r
-+      0x2048, 0xa87c, 0xd0fc, 0x01c0, 0x9084, 0x0003, 0x11a8, 0x2001,\r
-+      0x180c, 0x2004, 0xd0bc, 0x0180, 0x7824, 0xd0cc, 0x1168, 0xd0c4,\r
-+      0x1158, 0xa8a8, 0x9005, 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5,\r
-+      0x2102, 0x2009, 0x19b2, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010,\r
-+      0x2009, 0x0096, 0x60ab, 0x0036, 0x0026, 0x2110, 0x900e, 0x080c,\r
-+      0x2a53, 0x002e, 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009, 0x000a,\r
-+      0x0088, 0x2009, 0x000b, 0x0070, 0x2009, 0x000c, 0x0058, 0x2009,\r
-+      0x000d, 0x0040, 0x2009, 0x000e, 0x0028, 0x2009, 0x000f, 0x0010,\r
-+      0x2009, 0x0008, 0x6912, 0x0005, 0x080c, 0x9a9f, 0x0016, 0x0026,\r
-+      0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138, 0x2001, 0x1837,\r
-+      0x2004, 0x9084, 0x0028, 0x1138, 0x2001, 0x197c, 0x2004, 0x9086,\r
-+      0xaaaa, 0x1904, 0xa735, 0x7003, 0x5400, 0x00c6, 0x2061, 0x1800,\r
-+      0x607c, 0x9084, 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00, 0x9105,\r
-+      0x700a, 0x6080, 0x700e, 0xa998, 0x918c, 0xff00, 0x7112, 0x20a9,\r
-+      0x0004, 0x2009, 0x1805, 0x2e10, 0x9290, 0x0006, 0x2104, 0x2012,\r
-+      0x8108, 0x8210, 0x1f04, 0xa6c6, 0x20a9, 0x0004, 0x2009, 0x1801,\r
-+      0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xa6d0, 0xa860, 0x20e0,\r
-+      0xa85c, 0x9080, 0x0029, 0x2098, 0x2009, 0x0006, 0x20a9, 0x0001,\r
-+      0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x00d6, 0x2069,\r
-+      0x0200, 0x080c, 0xa67b, 0x00de, 0x2071, 0x0240, 0x2011, 0x0240,\r
-+      0x2009, 0x0002, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210,\r
-+      0x8109, 0x1dc0, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007,\r
-+      0x2012, 0x8210, 0x8109, 0x1dc0, 0xa85c, 0x9080, 0x0031, 0x2098,\r
-+      0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210,\r
-+      0x8109, 0x1dc0, 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056, 0x60a7,\r
-+      0x9575, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1168, 0x080c,\r
-+      0x74e9, 0x0150, 0x6028, 0xc0bd, 0x602a, 0x2009, 0x1804, 0x2011,\r
-+      0x0029, 0x080c, 0x2a53, 0x0010, 0x080c, 0x9e02, 0x080c, 0x86ed,\r
-+      0x00de, 0x009e, 0x002e, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0240,\r
-+      0x2001, 0x2200, 0x9085, 0x00ff, 0x7002, 0x7007, 0xffff, 0x2071,\r
-+      0x0100, 0x709b, 0x00ff, 0x00ee, 0x0804, 0xa6ab, 0x080c, 0x9a9f,\r
-+      0x0016, 0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138,\r
-+      0x7003, 0x5500, 0x00c6, 0xa89c, 0x9084, 0x00ff, 0xa998, 0x810f,\r
-+      0x918c, 0xff00, 0x9105, 0x700a, 0xa99c, 0x918c, 0xff00, 0xa8a0,\r
-+      0x9084, 0x00ff, 0x9105, 0x700e, 0xa998, 0x918c, 0xff00, 0x2061,\r
-+      0x1800, 0x607c, 0x9084, 0x00ff, 0x910d, 0x7112, 0x6180, 0x7116,\r
-+      0x2009, 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0029, 0x2098,\r
-+      0x2e10, 0x9290, 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012,\r
-+      0x8210, 0x8109, 0x1dc0, 0x20a9, 0x0004, 0x2009, 0x1805, 0x2104,\r
-+      0x2012, 0x8108, 0x8210, 0x1f04, 0xa787, 0x20a9, 0x0002, 0x2009,\r
-+      0x1801, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xa791, 0x00d6,\r
-+      0x0016, 0x2069, 0x0200, 0x080c, 0xa67b, 0x001e, 0x00de, 0x2071,\r
-+      0x0240, 0x20a9, 0x0002, 0x2009, 0x1803, 0x2011, 0x0240, 0x2104,\r
-+      0x2012, 0x8108, 0x8210, 0x1f04, 0xa7a7, 0x2009, 0x0008, 0x4002,\r
-+      0x8007, 0x2012, 0x8210, 0x8109, 0x1dd0, 0x9006, 0x20a9, 0x0008,\r
-+      0x2012, 0x8210, 0x1f04, 0xa7b8, 0x00ce, 0x60c3, 0x004c, 0x60a3,\r
-+      0x0056, 0x60a7, 0x9575, 0x080c, 0x9e02, 0x080c, 0x86ed, 0x00de,\r
-+      0x009e, 0x002e, 0x001e, 0x0005, 0x00d6, 0x9290, 0x0018, 0x8214,\r
-+      0x20e9, 0x0000, 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8, 0x9284,\r
-+      0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008, 0x9016,\r
-+      0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810, 0x8000,\r
-+      0x6812, 0x0c60, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6,\r
-+      0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7,\r
-+      0x7610, 0x2660, 0x2678, 0x8cff, 0x0904, 0xa873, 0x7030, 0x9c06,\r
-+      0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xa84a, 0x080c,\r
-+      0x9e32, 0x68c3, 0x0000, 0x080c, 0xa338, 0x7033, 0x0000, 0x0036,\r
-+      0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,\r
-+      0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100, 0x6824,\r
-+      0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36, 0x1110,\r
-+      0x660c, 0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,\r
-+      0x2f00, 0x700e, 0x0010, 0x700f, 0x0000, 0x660c, 0x0066, 0x2c00,\r
-+      0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c,\r
-+      0xca3c, 0x1158, 0x080c, 0x321c, 0x080c, 0xca4d, 0x11f0, 0x080c,\r
-+      0xb5b5, 0x00d8, 0x080c, 0xa338, 0x08c0, 0x080c, 0xca4d, 0x1118,\r
-+      0x080c, 0xb5b5, 0x0090, 0x6014, 0x2048, 0x080c, 0xc836, 0x0168,\r
-+      0x6020, 0x9086, 0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877,\r
-+      0x0000, 0x080c, 0x6d80, 0x080c, 0xca27, 0x080c, 0xccc4, 0x080c,\r
-+      0xac28, 0x080c, 0xa20e, 0x00ce, 0x0804, 0xa7fb, 0x2c78, 0x600c,\r
-+      0x2060, 0x0804, 0xa7fb, 0x7013, 0x0000, 0x700f, 0x0000, 0x012e,\r
-+      0x006e, 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,\r
-+      0x6020, 0x9086, 0x0006, 0x1d08, 0x080c, 0xe26c, 0x08f0, 0x00f6,\r
-+      0x0036, 0x2079, 0x0380, 0x7b18, 0xd3bc, 0x1de8, 0x7832, 0x7936,\r
-+      0x7a3a, 0x781b, 0x8080, 0x003e, 0x00fe, 0x0005, 0x0016, 0x2001,\r
-+      0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x1188, 0x2001,\r
-+      0x0015, 0x0c29, 0x2009, 0x1000, 0x2001, 0x0382, 0x2004, 0x9084,\r
-+      0x0007, 0x9086, 0x0003, 0x0120, 0x8109, 0x1db0, 0x080c, 0x0d7d,\r
-+      0x001e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086,\r
-+      0x0003, 0x1120, 0x2001, 0x0380, 0x2003, 0x0001, 0x0005, 0x0156,\r
-+      0x0016, 0x0026, 0x00e6, 0x900e, 0x2071, 0x19e7, 0x0469, 0x0106,\r
-+      0x0190, 0x7004, 0x9086, 0x0003, 0x0148, 0x20a9, 0x1000, 0x6044,\r
-+      0xd0fc, 0x01d8, 0x1f04, 0xa8cf, 0x080c, 0x0d7d, 0x080c, 0xa896,\r
-+      0x6044, 0xd0fc, 0x0190, 0x7030, 0x9c06, 0x1148, 0x080c, 0x95de,\r
-+      0x6044, 0xd0dc, 0x0150, 0xc0dc, 0x6046, 0x700a, 0x7042, 0x704c,\r
-+      0x9c06, 0x190c, 0x0d7d, 0x080c, 0x963b, 0x010e, 0x1919, 0x00ee,\r
-+      0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084,\r
-+      0x0007, 0x9086, 0x0003, 0x0005, 0x0126, 0x2091, 0x2400, 0x7808,\r
-+      0xd0a4, 0x190c, 0x0d76, 0xd09c, 0x0128, 0x7820, 0x908c, 0xf000,\r
-+      0x11b8, 0x0012, 0x012e, 0x0005, 0xa91c, 0xa95a, 0xa981, 0xa9b8,\r
-+      0xa9c8, 0xa9d9, 0xa9e8, 0xa9f6, 0xaa23, 0xaa27, 0xa91c, 0xa91c,\r
-+      0xa91c, 0xa91c, 0xa91c, 0xa91c, 0x080c, 0x0d7d, 0x012e, 0x0005,\r
-+      0x2060, 0x6044, 0xd0bc, 0x0140, 0xc0bc, 0x6046, 0x6000, 0x908a,\r
-+      0x0016, 0x1a0c, 0x0d7d, 0x0012, 0x012e, 0x0005, 0xa941, 0xa943,\r
-+      0xa941, 0xa949, 0xa941, 0xa941, 0xa941, 0xa941, 0xa941, 0xa943,\r
-+      0xa941, 0xa943, 0xa941, 0xa943, 0xa941, 0xa941, 0xa941, 0xa943,\r
-+      0xa941, 0x080c, 0x0d7d, 0x2009, 0x0013, 0x080c, 0xac8c, 0x012e,\r
-+      0x0005, 0x6014, 0x2048, 0xa87c, 0xd0dc, 0x0130, 0x080c, 0x88c1,\r
-+      0x080c, 0xabed, 0x012e, 0x0005, 0x2009, 0x0049, 0x080c, 0xac8c,\r
-+      0x012e, 0x0005, 0x080c, 0xa896, 0x2001, 0x1a0c, 0x2003, 0x0000,\r
-+      0x7030, 0x9065, 0x090c, 0x0d7d, 0x7034, 0x9092, 0x00c8, 0x1258,\r
-+      0x8000, 0x7036, 0x7004, 0x9086, 0x0003, 0x0110, 0x7007, 0x0000,\r
-+      0x781f, 0x0808, 0x0040, 0x080c, 0xe717, 0x6003, 0x0001, 0x2009,\r
-+      0x0014, 0x080c, 0xac8c, 0x781f, 0x0100, 0x080c, 0xa8b2, 0x012e,\r
-+      0x0005, 0x080c, 0xa896, 0x714c, 0x81ff, 0x1128, 0x2011, 0x1a0f,\r
-+      0x2013, 0x0000, 0x0438, 0x2061, 0x0100, 0x7150, 0x9192, 0x7530,\r
-+      0x12f0, 0x8108, 0x7152, 0x714c, 0x9188, 0x0008, 0x210c, 0x918e,\r
-+      0x0006, 0x1138, 0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016,\r
-+      0x0088, 0x714c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0009, 0x0d90,\r
-+      0x6014, 0x9084, 0x1984, 0x9085, 0x0016, 0x6016, 0x0018, 0x706c,\r
-+      0xc085, 0x706e, 0x781f, 0x0200, 0x080c, 0xa8b2, 0x012e, 0x0005,\r
-+      0x080c, 0xa896, 0x714c, 0x2160, 0x6003, 0x0003, 0x2009, 0x004a,\r
-+      0x080c, 0xac8c, 0x781f, 0x0200, 0x080c, 0xa8b2, 0x012e, 0x0005,\r
-+      0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060, 0x6003, 0x0003, 0x080c,\r
-+      0xa896, 0x080c, 0x1d60, 0x781f, 0x0400, 0x080c, 0xa8b2, 0x012e,\r
-+      0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060, 0x080c, 0xa896,\r
-+      0x080c, 0x1da8, 0x781f, 0x0400, 0x080c, 0xa8b2, 0x012e, 0x0005,\r
-+      0x7030, 0x9065, 0x0148, 0x6044, 0xc0bc, 0x6046, 0x7104, 0x9186,\r
-+      0x0003, 0x0110, 0x080c, 0x96a1, 0x012e, 0x0005, 0x00f6, 0x703c,\r
-+      0x9086, 0x0002, 0x0528, 0x704c, 0x907d, 0x0510, 0x7844, 0xc0bc,\r
-+      0x7846, 0x7820, 0x9086, 0x0009, 0x0118, 0x080c, 0x9d5c, 0x00c0,\r
-+      0x7828, 0xd0fc, 0x1118, 0x080c, 0x9cdb, 0x0090, 0x2001, 0x1837,\r
-+      0x2004, 0x9084, 0x0028, 0x1130, 0x2001, 0x197c, 0x2004, 0x9086,\r
-+      0xaaaa, 0x1120, 0x2001, 0x0387, 0x2003, 0x1000, 0x080c, 0x9c60,\r
-+      0x00fe, 0x012e, 0x0005, 0x080c, 0x758a, 0x012e, 0x0005, 0x080c,\r
-+      0x0d7d, 0x0005, 0x00e6, 0x2071, 0x19e7, 0x6044, 0xc0bc, 0x6046,\r
-+      0xd0fc, 0x01b8, 0x704c, 0x9c06, 0x1190, 0x2019, 0x0001, 0x080c,\r
-+      0xa118, 0x704f, 0x0000, 0x2001, 0x0109, 0x2004, 0xd08c, 0x1138,\r
-+      0x2001, 0x0108, 0x2004, 0xd0bc, 0x1110, 0x703f, 0x0000, 0x080c,\r
-+      0xa34e, 0x00ee, 0x0005, 0x0026, 0x7010, 0x9c06, 0x1178, 0x080c,\r
-+      0xa20e, 0x6044, 0xc0fc, 0x6046, 0x600c, 0x9015, 0x0120, 0x7212,\r
-+      0x600f, 0x0000, 0x0010, 0x7212, 0x720e, 0x9006, 0x002e, 0x0005,\r
-+      0x0026, 0x7020, 0x9c06, 0x1178, 0x080c, 0xa20e, 0x6044, 0xc0fc,\r
-+      0x6046, 0x600c, 0x9015, 0x0120, 0x7222, 0x600f, 0x0000, 0x0010,\r
-+      0x7222, 0x721e, 0x9006, 0x002e, 0x0005, 0x00d6, 0x0036, 0x7830,\r
-+      0x9c06, 0x1558, 0x2069, 0x0100, 0x68c0, 0x9005, 0x01f8, 0x080c,\r
-+      0x86f6, 0x080c, 0x9e32, 0x68c3, 0x0000, 0x080c, 0xa338, 0x2069,\r
-+      0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,\r
-+      0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100, 0x6824, 0xd084,\r
-+      0x0110, 0x6827, 0x0001, 0x9085, 0x0001, 0x0038, 0x7808, 0xc0ad,\r
-+      0x780a, 0x6003, 0x0009, 0x630a, 0x9006, 0x003e, 0x00de, 0x0005,\r
-+      0x0016, 0x0026, 0x0036, 0x6100, 0x2019, 0x0100, 0x2001, 0x0382,\r
-+      0x2004, 0xd09c, 0x0190, 0x00c6, 0x0126, 0x2091, 0x2800, 0x0016,\r
-+      0x0036, 0x080c, 0xa8fc, 0x003e, 0x001e, 0x012e, 0x00ce, 0x6200,\r
-+      0x2200, 0x9106, 0x0d58, 0x2200, 0x0010, 0x8319, 0x1d38, 0x003e,\r
-+      0x002e, 0x001e, 0x0005, 0x00d6, 0x0156, 0x080c, 0x9aea, 0x7a14,\r
-+      0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008,\r
-+      0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, 0x901e,\r
-+      0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, 0x74e9,\r
-+      0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6adc, 0xd29c, 0x1110, 0xd2ac,\r
-+      0x0108, 0xc39d, 0x730e, 0x080c, 0x87bb, 0x20a9, 0x0006, 0x2011,\r
-+      0xfff4, 0x2019, 0xfff5, 0x2071, 0x0250, 0x2305, 0x2072, 0x8e70,\r
-+      0x2205, 0x2072, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04,\r
-+      0xaafd, 0x60c3, 0x0020, 0x080c, 0x9e02, 0x015e, 0x00de, 0x0005,\r
-+      0x0156, 0x080c, 0x9aea, 0x7a14, 0x82ff, 0x0168, 0x9286, 0xffff,\r
-+      0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, 0x0003,\r
-+      0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, 0x700f,\r
-+      0x0001, 0x2011, 0x19bd, 0x2204, 0x8007, 0x701a, 0x8210, 0x2204,\r
-+      0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,\r
-+      0x2001, 0x181f, 0x2004, 0x7022, 0x2001, 0x1820, 0x2004, 0x7026,\r
-+      0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x7026, 0x20a9,\r
-+      0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1,\r
-+      0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, 0x9e02, 0x0006,\r
-+      0x2001, 0x1837, 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, 0x0003,\r
-+      0x080c, 0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x080c, 0xa098,\r
-+      0x0036, 0x901e, 0x080c, 0xa118, 0x003e, 0x0005, 0x080c, 0x336d,\r
-+      0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010, 0x9085, 0x0020, 0x7012,\r
-+      0x2009, 0x007e, 0x080c, 0x6625, 0xb85c, 0xc0ac, 0xb85e, 0x00ce,\r
-+      0x00be, 0x001e, 0x0005, 0x2071, 0x188d, 0x7000, 0x9005, 0x0140,\r
-+      0x2001, 0x0812, 0x2071, 0x1800, 0x7076, 0x707a, 0x706b, 0xffd4,\r
-+      0x2071, 0x1800, 0x7074, 0x7056, 0x705b, 0x1ddc, 0x0005, 0x00e6,\r
-+      0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0010,\r
-+      0x0608, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0,\r
-+      0x001c, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98,\r
-+      0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x001c, 0x7068, 0x9502,\r
-+      0x1230, 0x755a, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b,\r
-+      0x1ddc, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7554,\r
-+      0x9582, 0x0010, 0x0600, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000,\r
-+      0x0148, 0x9ce0, 0x001c, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061,\r
-+      0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x001c,\r
-+      0x7068, 0x9502, 0x1228, 0x755a, 0x9085, 0x0001, 0x00ee, 0x0005,\r
-+      0x705b, 0x1ddc, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1ddc, 0x0a0c,\r
-+      0x0d7d, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a0c, 0x0d7d, 0x9006,\r
-+      0x6006, 0x600a, 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000,\r
-+      0x6003, 0x0000, 0x601e, 0x605e, 0x6062, 0x6026, 0x602a, 0x602e,\r
-+      0x6032, 0x6036, 0x603a, 0x603e, 0x604a, 0x602a, 0x6046, 0x6042,\r
-+      0x2061, 0x1800, 0x6054, 0x8000, 0x6056, 0x0005, 0x9006, 0x600e,\r
-+      0x6016, 0x601a, 0x6012, 0x6022, 0x6002, 0x601e, 0x605e, 0x6062,\r
-+      0x604a, 0x6046, 0x2061, 0x1800, 0x6054, 0x8000, 0x6056, 0x0005,\r
-+      0x0006, 0x6000, 0x9086, 0x0000, 0x01d0, 0x601c, 0xd084, 0x190c,\r
-+      0x1a6a, 0x6023, 0x0007, 0x2001, 0x1986, 0x2004, 0x0006, 0x9082,\r
-+      0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, 0xe524, 0x604b,\r
-+      0x0000, 0x6044, 0xd0fc, 0x1129, 0x9006, 0x6046, 0x6016, 0x000e,\r
-+      0x0005, 0x080c, 0xa8f4, 0x0106, 0x190c, 0xa896, 0x2001, 0x19fa,\r
-+      0x2004, 0x9c06, 0x1130, 0x0036, 0x2019, 0x0001, 0x080c, 0xa118,\r
-+      0x003e, 0x080c, 0xa34e, 0x010e, 0x190c, 0xa8b2, 0x0005, 0x00e6,\r
-+      0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0001,\r
-+      0x0608, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0,\r
-+      0x001c, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98,\r
-+      0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x001c, 0x7068, 0x9502,\r
-+      0x1230, 0x755a, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b,\r
-+      0x1ddc, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002,\r
-+      0xaca0, 0xacaa, 0xacc5, 0xace0, 0xcf9c, 0xcfb9, 0xcfd4, 0xaca0,\r
-+      0xacaa, 0x8f9a, 0xacfc, 0xaca0, 0xaca0, 0xaca0, 0xaca0, 0xaca0,\r
-+      0x9186, 0x0013, 0x1130, 0x6044, 0xd0fc, 0x0110, 0x080c, 0x95de,\r
-+      0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d,\r
-+      0x0013, 0x006e, 0x0005, 0xacc3, 0xb421, 0xb5fc, 0xacc3, 0xb692,\r
-+      0xafc5, 0xacc3, 0xacc3, 0xb3a3, 0xbbfa, 0xacc3, 0xacc3, 0xacc3,\r
-+      0xacc3, 0xacc3, 0xacc3, 0x080c, 0x0d7d, 0x0066, 0x6000, 0x90b2,\r
-+      0x0016, 0x1a0c, 0x0d7d, 0x0013, 0x006e, 0x0005, 0xacde, 0xc205,\r
-+      0xacde, 0xacde, 0xacde, 0xacde, 0xacde, 0xacde, 0xc1aa, 0xc388,\r
-+      0xacde, 0xc242, 0xc2c6, 0xc242, 0xc2c6, 0xacde, 0x080c, 0x0d7d,\r
-+      0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d7d, 0x6000, 0x0002, 0xacfa,\r
-+      0xbc44, 0xbcdb, 0xbe5b, 0xbeca, 0xacfa, 0xacfa, 0xacfa, 0xbc13,\r
-+      0xc12b, 0xc12e, 0xacfa, 0xacfa, 0xacfa, 0xacfa, 0xc15e, 0xacfa,\r
-+      0xacfa, 0xacfa, 0x080c, 0x0d7d, 0x0066, 0x6000, 0x90b2, 0x0016,\r
-+      0x1a0c, 0x0d7d, 0x0013, 0x006e, 0x0005, 0xad15, 0xad15, 0xad53,\r
-+      0xadf2, 0xae72, 0xad15, 0xad15, 0xad15, 0xad17, 0xad15, 0xad15,\r
-+      0xad15, 0xad15, 0xad15, 0xad15, 0xad15, 0x080c, 0x0d7d, 0x9186,\r
-+      0x004c, 0x0560, 0x9186, 0x0003, 0x190c, 0x0d7d, 0x0096, 0x601c,\r
-+      0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c,\r
-+      0x9084, 0xa000, 0xc0b5, 0xa87e, 0xa8ac, 0xa836, 0xa8b0, 0xa83a,\r
-+      0x9006, 0xa846, 0xa84a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001,\r
-+      0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x080c,\r
-+      0x1bba, 0x2009, 0x8030, 0x080c, 0x9265, 0x0005, 0x6010, 0x00b6,\r
-+      0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c, 0xae94, 0x080c, 0xcf6a,\r
-+      0x6003, 0x0007, 0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079, 0x1800,\r
-+      0x7a90, 0x6014, 0x2048, 0xa87c, 0xd0ec, 0x1110, 0x9290, 0x0018,\r
-+      0xac78, 0xc4fc, 0x0046, 0xa8e0, 0x9005, 0x1140, 0xa8dc, 0x921a,\r
-+      0x0140, 0x0220, 0xa87b, 0x0007, 0x2010, 0x0028, 0xa87b, 0x0015,\r
-+      0x0010, 0xa87b, 0x0000, 0x8214, 0xa883, 0x0000, 0xaa02, 0x0006,\r
-+      0x0016, 0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005,\r
-+      0x1108, 0x009a, 0x2100, 0x9086, 0x0015, 0x1118, 0x2001, 0x0001,\r
-+      0x0038, 0x2100, 0x9086, 0x0016, 0x0118, 0x2001, 0x0001, 0x002a,\r
-+      0x94a4, 0x0007, 0x8423, 0x9405, 0x0002, 0xadba, 0xadba, 0xadb5,\r
-+      0xadb8, 0xadba, 0xadb2, 0xada5, 0xada5, 0xada5, 0xada5, 0xada5,\r
-+      0xada5, 0xada5, 0xada5, 0xada5, 0xada5, 0x00fe, 0x00ee, 0x00de,\r
-+      0x00ce, 0x002e, 0x001e, 0x000e, 0x004e, 0x00fe, 0x009e, 0x00de,\r
-+      0x080c, 0x0d7d, 0x080c, 0xb84f, 0x0028, 0x080c, 0xb934, 0x0010,\r
-+      0x080c, 0xba2a, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e,\r
-+      0x2c00, 0xa896, 0x000e, 0x080c, 0xaf52, 0x0530, 0xa804, 0xa80e,\r
-+      0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc,\r
-+      0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xaacc, 0xabd0, 0xacd4,\r
-+      0xadd8, 0x2031, 0x0000, 0x2041, 0x1298, 0x080c, 0xb112, 0x0160,\r
-+      0x000e, 0x9005, 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe,\r
-+      0x009e, 0x00de, 0x0804, 0xabed, 0x2001, 0x002c, 0x900e, 0x080c,\r
-+      0xafb8, 0x0c70, 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158,\r
-+      0x91b2, 0x0047, 0x0a0c, 0x0d7d, 0x91b2, 0x0050, 0x1a0c, 0x0d7d,\r
-+      0x9182, 0x0047, 0x0042, 0x080c, 0xaaa8, 0x0120, 0x9086, 0x0002,\r
-+      0x0904, 0xad53, 0x0005, 0xae14, 0xae14, 0xae16, 0xae48, 0xae14,\r
-+      0xae14, 0xae14, 0xae14, 0xae5b, 0x080c, 0x0d7d, 0x00d6, 0x0016,\r
-+      0x0096, 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0,\r
-+      0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001,\r
-+      0x0000, 0x900e, 0x080c, 0xafb8, 0x080c, 0xabed, 0x00a8, 0x6003,\r
-+      0x0002, 0xa8a4, 0xa9a8, 0x9105, 0x1178, 0xa8ae, 0xa8b2, 0x0c78,\r
-+      0xa87f, 0x0020, 0xa88c, 0xa88a, 0xa8a4, 0xa8ae, 0xa8a8, 0xa8b2,\r
-+      0xa8c7, 0x0000, 0xa8cb, 0x0000, 0x009e, 0x001e, 0x00de, 0x0005,\r
-+      0x080c, 0x963b, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xc838,\r
-+      0x0120, 0xa87b, 0x0006, 0x080c, 0x6d80, 0x009e, 0x00de, 0x080c,\r
-+      0xabed, 0x0804, 0x96a0, 0x080c, 0x963b, 0x080c, 0x31e7, 0x080c,\r
-+      0xcf67, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xc838, 0x0120,\r
-+      0xa87b, 0x0029, 0x080c, 0x6d80, 0x009e, 0x00de, 0x080c, 0xabed,\r
-+      0x0804, 0x96a0, 0x9182, 0x0047, 0x0002, 0xae82, 0xae84, 0xae82,\r
-+      0xae82, 0xae82, 0xae82, 0xae82, 0xae82, 0xae82, 0xae82, 0xae82,\r
-+      0xae82, 0xae84, 0x080c, 0x0d7d, 0x00d6, 0x0096, 0x601f, 0x0000,\r
-+      0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x6d80,\r
-+      0x009e, 0x00de, 0x0804, 0xabed, 0x0026, 0x0036, 0x0056, 0x0066,\r
-+      0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x103a, 0x000e, 0x090c,\r
-+      0x0d7d, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e,\r
-+      0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x7990, 0x9188,\r
-+      0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001,\r
-+      0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034,\r
-+      0x1228, 0x2011, 0x001f, 0x080c, 0xc40b, 0x04c0, 0x2130, 0x2009,\r
-+      0x0034, 0x2011, 0x001f, 0x080c, 0xc40b, 0x96b2, 0x0034, 0xb004,\r
-+      0x904d, 0x0110, 0x080c, 0x0fec, 0x080c, 0x103a, 0x01d0, 0x8528,\r
-+      0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d,\r
-+      0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xc40b, 0x00b8, 0x96b2,\r
-+      0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xc40b,\r
-+      0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,\r
-+      0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072, 0x0048, 0x2001, 0x0205,\r
-+      0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566, 0x2a48,\r
-+      0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x6d80, 0x000e, 0x2048,\r
-+      0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e,\r
-+      0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x103a,\r
-+      0x000e, 0x090c, 0x0d7d, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019,\r
-+      0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079,\r
-+      0x1800, 0x7990, 0x810c, 0x9188, 0x000c, 0x9182, 0x001a, 0x0210,\r
-+      0x2009, 0x001a, 0x21a8, 0x810b, 0xa972, 0xac76, 0x2e98, 0xa85c,\r
-+      0x9080, 0x001f, 0x20a0, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080,\r
-+      0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x6d80, 0x009e, 0x00fe,\r
-+      0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001,\r
-+      0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200,\r
-+      0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021,\r
-+      0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018,\r
-+      0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x103a, 0x2900, 0x009e,\r
-+      0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002,\r
-+      0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102,\r
-+      0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228,\r
-+      0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800,\r
-+      0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300,\r
-+      0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816,\r
-+      0x2e98, 0x2310, 0x84ff, 0x0904, 0xaf67, 0x0804, 0xaf69, 0x9085,\r
-+      0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005,\r
-+      0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c,\r
-+      0x6d74, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118,\r
-+      0x080c, 0xabed, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0d7d, 0x080c,\r
-+      0xabed, 0x0005, 0x20a9, 0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014,\r
-+      0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0, 0x009e, 0x4003,\r
-+      0x0136, 0x9080, 0x001b, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418,\r
-+      0x8318, 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8,\r
-+      0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003,\r
-+      0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xc838,\r
-+      0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e,\r
-+      0x0804, 0xabed, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200,\r
-+      0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8d7, 0x0000, 0x00be, 0x6014,\r
-+      0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32,\r
-+      0x080c, 0xabed, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48,\r
-+      0x0cc8, 0x0006, 0x0016, 0x080c, 0xcf52, 0x0188, 0x6014, 0x9005,\r
-+      0x1170, 0x600b, 0x0003, 0x601b, 0x0000, 0x604b, 0x0000, 0x2009,\r
-+      0x0022, 0x080c, 0xb3f9, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085,\r
-+      0x0001, 0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c,\r
-+      0x20e1, 0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c,\r
-+      0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001,\r
-+      0x2099, 0x0260, 0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a, 0xa804,\r
-+      0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003,\r
-+      0x2001, 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020,\r
-+      0x4003, 0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867,\r
-+      0x0103, 0x080c, 0xabed, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016,\r
-+      0x900e, 0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff,\r
-+      0x800c, 0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108,\r
-+      0x810b, 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c,\r
-+      0xc40b, 0x080c, 0xc838, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000,\r
-+      0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xabed, 0x001e, 0x009e,\r
-+      0x0005, 0x0016, 0x2009, 0x0000, 0x7030, 0x9086, 0x0200, 0x0110,\r
-+      0x2009, 0x0001, 0x0096, 0x6014, 0x904d, 0x090c, 0x0d7d, 0xa97a,\r
-+      0x080c, 0x6d80, 0x009e, 0x080c, 0xabed, 0x001e, 0x0005, 0x0016,\r
-+      0x0096, 0x7030, 0x9086, 0x0100, 0x1118, 0x2009, 0x0004, 0x0010,\r
-+      0x7034, 0x800c, 0x810b, 0x2011, 0x000c, 0x2019, 0x000c, 0x6014,\r
-+      0x2048, 0xa804, 0x0096, 0x9005, 0x0108, 0x2048, 0x080c, 0xc40b,\r
-+      0x009e, 0x080c, 0xc838, 0x0148, 0xa804, 0x9005, 0x1158, 0xa807,\r
-+      0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xabed, 0x009e,\r
-+      0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086, 0x0100,\r
-+      0x1118, 0x080c, 0xb5b5, 0x00e0, 0xa034, 0x8007, 0x800c, 0x8806,\r
-+      0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x000c,\r
-+      0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xaaa0, 0xab9c,\r
-+      0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x127e, 0x0019, 0x0d08,\r
-+      0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x103a, 0x000e, 0x01b0,\r
-+      0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800,\r
-+      0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086,\r
-+      0x2940, 0x080c, 0x1124, 0x008e, 0x9085, 0x0001, 0x009e, 0x0005,\r
-+      0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6,\r
-+      0x2258, 0xba10, 0x00be, 0x9206, 0x1520, 0x700c, 0x6210, 0x00b6,\r
-+      0x2258, 0xba14, 0x00be, 0x9206, 0x11e0, 0x604b, 0x0000, 0x2c68,\r
-+      0x0016, 0x2009, 0x0035, 0x080c, 0xceca, 0x001e, 0x1158, 0x622c,\r
-+      0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386,\r
-+      0x0006, 0x0128, 0x080c, 0xabed, 0x0020, 0x0039, 0x0010, 0x080c,\r
-+      0xb22e, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, 0x2048,\r
-+      0x9186, 0x0015, 0x0904, 0xb20d, 0x918e, 0x0016, 0x1904, 0xb22c,\r
-+      0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300,\r
-+      0x1904, 0xb1e7, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904,\r
-+      0xb1c9, 0x0804, 0xb22a, 0x6808, 0x9086, 0xffff, 0x1904, 0xb20f,\r
-+      0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c, 0xa940,\r
-+      0x9105, 0x1904, 0xb20f, 0x6824, 0xd0b4, 0x1904, 0xb20f, 0x080c,\r
-+      0xca27, 0x6864, 0xa882, 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e,\r
-+      0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c, 0x9166, 0xa884,\r
-+      0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e, 0x1138, 0x00c6,\r
-+      0x2d60, 0x080c, 0xc55e, 0x00ce, 0x0804, 0xb22a, 0x00c6, 0xa868,\r
-+      0xd0fc, 0x1118, 0x080c, 0x60bb, 0x0010, 0x080c, 0x64bf, 0x00ce,\r
-+      0x1904, 0xb20f, 0x00c6, 0x2d60, 0x080c, 0xabed, 0x00ce, 0x0804,\r
-+      0xb22a, 0x00c6, 0x080c, 0xac5f, 0x0198, 0x6017, 0x0000, 0x6810,\r
-+      0x6012, 0x080c, 0xcccc, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60,\r
-+      0x080c, 0xabed, 0x00ce, 0x080c, 0xac8c, 0x00ce, 0x0804, 0xb22a,\r
-+      0x2001, 0x1988, 0x2004, 0x684a, 0x00ce, 0x0804, 0xb22a, 0x7008,\r
-+      0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc,\r
-+      0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c, 0xcf0c,\r
-+      0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020,\r
-+      0x080c, 0x921e, 0x00ce, 0x0430, 0x700c, 0x9086, 0x2a00, 0x1138,\r
-+      0x2001, 0x1988, 0x2004, 0x684a, 0x00e8, 0x04c1, 0x00e8, 0x89ff,\r
-+      0x090c, 0x0d7d, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103, 0xa87b,\r
-+      0x0003, 0x080c, 0x6b96, 0x080c, 0xca27, 0x080c, 0xac28, 0x0026,\r
-+      0x6010, 0x00b6, 0x2058, 0xba3c, 0x080c, 0x6750, 0x00be, 0x002e,\r
-+      0x00de, 0x00ce, 0x080c, 0xabed, 0x009e, 0x0005, 0x9186, 0x0015,\r
-+      0x1128, 0x2001, 0x1988, 0x2004, 0x684a, 0x0068, 0x918e, 0x0016,\r
-+      0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, 0xe524, 0x080c, 0x88c1,\r
-+      0x080c, 0xabed, 0x00ce, 0x080c, 0xabed, 0x0005, 0x0026, 0x0036,\r
-+      0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001, 0x1988,\r
-+      0x2004, 0x684a, 0x0804, 0xb2a8, 0x00c6, 0x2d60, 0x080c, 0xc436,\r
-+      0x00ce, 0x6804, 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060,\r
-+      0x6003, 0x0001, 0x6007, 0x0050, 0x2009, 0x8023, 0x080c, 0x921e,\r
-+      0x00ce, 0x04f0, 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c,\r
-+      0x0d7d, 0x6800, 0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac, 0x0178,\r
-+      0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882, 0x2001,\r
-+      0x0001, 0x6832, 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa87c,\r
-+      0xd0b4, 0x1150, 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838,\r
-+      0xa934, 0x9105, 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306,\r
-+      0x1118, 0x7020, 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a,\r
-+      0x2001, 0x0005, 0x6832, 0x080c, 0xcbb6, 0x080c, 0x96a0, 0x0010,\r
-+      0x080c, 0xabed, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6,\r
-+      0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10,\r
-+      0x00be, 0x9206, 0x1904, 0xb313, 0x700c, 0x6210, 0x00b6, 0x2258,\r
-+      0xba14, 0x00be, 0x9206, 0x1904, 0xb313, 0x6038, 0x2068, 0x6824,\r
-+      0xc0dc, 0x6826, 0x6a20, 0x9286, 0x0007, 0x0904, 0xb313, 0x9286,\r
-+      0x0002, 0x0904, 0xb313, 0x9286, 0x0000, 0x05e8, 0x6808, 0x633c,\r
-+      0x9306, 0x15c8, 0x2071, 0x026c, 0x9186, 0x0015, 0x0570, 0x918e,\r
-+      0x0016, 0x1100, 0x00c6, 0x6038, 0x2060, 0x6104, 0x9186, 0x004b,\r
-+      0x01c0, 0x9186, 0x004c, 0x01a8, 0x9186, 0x004d, 0x0190, 0x9186,\r
-+      0x004e, 0x0178, 0x9186, 0x0052, 0x0160, 0x6014, 0x0096, 0x2048,\r
-+      0x080c, 0xc838, 0x090c, 0x0d7d, 0xa87b, 0x0003, 0x009e, 0x080c,\r
-+      0xcf0c, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009,\r
-+      0x8020, 0x080c, 0x921e, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001,\r
-+      0x1988, 0x2004, 0x704a, 0x080c, 0xabed, 0x002e, 0x00de, 0x00ee,\r
-+      0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058,\r
-+      0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02,\r
-+      0x0460, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010,\r
-+      0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xbbc2, 0x002e, 0x003e,\r
-+      0x015e, 0x009e, 0x1904, 0xb382, 0x0096, 0x0156, 0x0036, 0x0026,\r
-+      0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c,\r
-+      0xbbc2, 0x002e, 0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a,\r
-+      0x733c, 0xbb0e, 0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128,\r
-+      0x00fe, 0x009e, 0x00be, 0x0804, 0xaffd, 0x0096, 0x2048, 0xaa12,\r
-+      0xab16, 0xac0a, 0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f,\r
-+      0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c,\r
-+      0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x127e, 0x080c, 0xb112,\r
-+      0x0130, 0x00fe, 0x009e, 0x080c, 0xabed, 0x00be, 0x0005, 0x080c,\r
-+      0xb5b5, 0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x31e7, 0x080c, 0xcf67,\r
-+      0x00fe, 0x00c6, 0x080c, 0xab97, 0x2f00, 0x6012, 0x6017, 0x0000,\r
-+      0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007,\r
-+      0x080c, 0x6575, 0x080c, 0x65a1, 0x080c, 0x9225, 0x080c, 0x96a0,\r
-+      0x00ce, 0x0804, 0xb355, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0d7d,\r
-+      0x91b2, 0x0040, 0x1a04, 0xb40b, 0x0002, 0xb3f9, 0xb3f9, 0xb3ef,\r
-+      0xb3f9, 0xb3f9, 0xb3f9, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed,\r
-+      0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed,\r
-+      0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed,\r
-+      0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3f9, 0xb3ed, 0xb3f9, 0xb3f9,\r
-+      0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ef, 0xb3ed, 0xb3ed,\r
-+      0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3f9,\r
-+      0xb3f9, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed,\r
-+      0xb3ed, 0xb3ed, 0xb3f9, 0xb3ed, 0xb3ed, 0x080c, 0x0d7d, 0x0066,\r
-+      0x00b6, 0x6610, 0x2658, 0xb8d4, 0xc08c, 0xb8d6, 0x00be, 0x006e,\r
-+      0x0000, 0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c,\r
-+      0x9225, 0x0010, 0x080c, 0x921e, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x96a0, 0x012e, 0x0005, 0x2600, 0x0002, 0xb3f9, 0xb3f9, 0xb41f,\r
-+      0xb3f9, 0xb3f9, 0xb41f, 0xb41f, 0xb41f, 0xb41f, 0xb3f9, 0xb41f,\r
-+      0xb3f9, 0xb41f, 0xb3f9, 0xb41f, 0xb41f, 0xb41f, 0xb41f, 0x080c,\r
-+      0x0d7d, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d7d, 0x91b6, 0x0013,\r
-+      0x0904, 0xb4f6, 0x91b6, 0x0027, 0x1904, 0xb4a2, 0x080c, 0x95de,\r
-+      0x6004, 0x080c, 0xca3c, 0x01b0, 0x080c, 0xca4d, 0x01a8, 0x908e,\r
-+      0x0021, 0x0904, 0xb49f, 0x908e, 0x0022, 0x1130, 0x080c, 0xb029,\r
-+      0x0904, 0xb49b, 0x0804, 0xb49c, 0x908e, 0x003d, 0x0904, 0xb49f,\r
-+      0x0804, 0xb495, 0x080c, 0x321c, 0x2001, 0x0007, 0x080c, 0x6575,\r
-+      0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xb5b5, 0x9186,\r
-+      0x007e, 0x1148, 0x2001, 0x1837, 0x2014, 0xc285, 0x080c, 0x74e9,\r
-+      0x1108, 0xc2ad, 0x2202, 0x080c, 0xa896, 0x0036, 0x0026, 0x2019,\r
-+      0x0028, 0x2110, 0x080c, 0xe630, 0x002e, 0x003e, 0x0016, 0x0026,\r
-+      0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x93a5, 0x0076, 0x903e,\r
-+      0x080c, 0x9277, 0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08,\r
-+      0x080c, 0xdfeb, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0xa8b2,\r
-+      0x080c, 0xcf67, 0x0016, 0x080c, 0xccc4, 0x080c, 0xabed, 0x001e,\r
-+      0x080c, 0x32fc, 0x080c, 0x96a0, 0x0030, 0x080c, 0xccc4, 0x080c,\r
-+      0xabed, 0x080c, 0x96a0, 0x0005, 0x080c, 0xb5b5, 0x0cb0, 0x080c,\r
-+      0xb5f1, 0x0c98, 0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1140,\r
-+      0x080c, 0xaaa8, 0x0d80, 0x9086, 0x0002, 0x0904, 0xb5fc, 0x0c58,\r
-+      0x9186, 0x0014, 0x1d40, 0x080c, 0x95de, 0x6004, 0x908e, 0x0022,\r
-+      0x1118, 0x080c, 0xb029, 0x09f8, 0x080c, 0x31e7, 0x080c, 0xcf67,\r
-+      0x080c, 0xca3c, 0x1190, 0x080c, 0x321c, 0x6010, 0x00b6, 0x2058,\r
-+      0xb9a0, 0x00be, 0x080c, 0xb5b5, 0x9186, 0x007e, 0x1128, 0x2001,\r
-+      0x1837, 0x200c, 0xc185, 0x2102, 0x0800, 0x080c, 0xca4d, 0x1120,\r
-+      0x080c, 0xb5b5, 0x0804, 0xb495, 0x6004, 0x908e, 0x0032, 0x1160,\r
-+      0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079, 0x0000, 0x080c, 0x35a5,\r
-+      0x00fe, 0x00ee, 0x0804, 0xb495, 0x6004, 0x908e, 0x0021, 0x0d40,\r
-+      0x908e, 0x0022, 0x090c, 0xb5b5, 0x0804, 0xb495, 0x90b2, 0x0040,\r
-+      0x1a04, 0xb595, 0x2008, 0x0002, 0xb53e, 0xb53f, 0xb542, 0xb545,\r
-+      0xb548, 0xb54b, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c,\r
-+      0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c,\r
-+      0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c,\r
-+      0xb53c, 0xb53c, 0xb54e, 0xb557, 0xb53c, 0xb558, 0xb557, 0xb53c,\r
-+      0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb557, 0xb557, 0xb53c, 0xb53c,\r
-+      0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb580, 0xb557,\r
-+      0xb53c, 0xb553, 0xb53c, 0xb53c, 0xb53c, 0xb554, 0xb53c, 0xb53c,\r
-+      0xb53c, 0xb557, 0xb57b, 0xb53c, 0x080c, 0x0d7d, 0x00c0, 0x2001,\r
-+      0x000b, 0x00e8, 0x2001, 0x0003, 0x00d0, 0x2001, 0x0005, 0x00b8,\r
-+      0x2001, 0x0001, 0x00a0, 0x2001, 0x0009, 0x0088, 0x6003, 0x0005,\r
-+      0x080c, 0x96a0, 0x0058, 0x0018, 0x0010, 0x080c, 0x6575, 0x04b8,\r
-+      0x080c, 0xcf6a, 0x6003, 0x0004, 0x080c, 0x96a0, 0x0005, 0x080c,\r
-+      0x6575, 0x6003, 0x0002, 0x0036, 0x2019, 0x1852, 0x2304, 0x9084,\r
-+      0xff00, 0x1120, 0x2001, 0x1986, 0x201c, 0x0040, 0x8007, 0x909a,\r
-+      0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x003e,\r
-+      0x080c, 0x96a0, 0x0c18, 0x080c, 0xccc4, 0x080c, 0xabed, 0x08f0,\r
-+      0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079, 0x0000, 0x080c, 0x35a5,\r
-+      0x00fe, 0x00ee, 0x080c, 0x95de, 0x080c, 0xabed, 0x0878, 0x6003,\r
-+      0x0002, 0x080c, 0xcf6a, 0x0804, 0x96a0, 0x2600, 0x2008, 0x0002,\r
-+      0xb5ac, 0xb58f, 0xb5aa, 0xb58f, 0xb58f, 0xb5aa, 0xb5aa, 0xb5aa,\r
-+      0xb5aa, 0xb58f, 0xb5aa, 0xb58f, 0xb5aa, 0xb58f, 0xb5aa, 0xb5aa,\r
-+      0xb5aa, 0xb5aa, 0x080c, 0x0d7d, 0x0096, 0x6014, 0x2048, 0x080c,\r
-+      0x6d80, 0x009e, 0x080c, 0xabed, 0x0005, 0x00e6, 0x0096, 0x0026,\r
-+      0x0016, 0x080c, 0xc838, 0x0568, 0x6014, 0x2048, 0xa864, 0x9086,\r
-+      0x0139, 0x11a8, 0xa894, 0x9086, 0x0056, 0x1148, 0x080c, 0x547b,\r
-+      0x0130, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001,\r
-+      0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xce31, 0x0090, 0xa868,\r
-+      0xd0fc, 0x0178, 0xa807, 0x0000, 0x0016, 0x6004, 0x908e, 0x0021,\r
-+      0x0168, 0x908e, 0x003d, 0x0150, 0x001e, 0xa867, 0x0103, 0xa833,\r
-+      0x0100, 0x001e, 0x002e, 0x009e, 0x00ee, 0x0005, 0x001e, 0x0009,\r
-+      0x0cc0, 0x0096, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103,\r
-+      0xa823, 0x8001, 0x009e, 0x0005, 0x00b6, 0x6610, 0x2658, 0xb804,\r
-+      0x9084, 0x00ff, 0x90b2, 0x000c, 0x1a0c, 0x0d7d, 0x6604, 0x96b6,\r
-+      0x004d, 0x1120, 0x080c, 0xcd50, 0x0804, 0xb681, 0x6604, 0x96b6,\r
-+      0x0043, 0x1120, 0x080c, 0xcd99, 0x0804, 0xb681, 0x6604, 0x96b6,\r
-+      0x004b, 0x1120, 0x080c, 0xcdc5, 0x0804, 0xb681, 0x6604, 0x96b6,\r
-+      0x0033, 0x1120, 0x080c, 0xcce6, 0x0804, 0xb681, 0x6604, 0x96b6,\r
-+      0x0028, 0x1120, 0x080c, 0xca86, 0x0804, 0xb681, 0x6604, 0x96b6,\r
-+      0x0029, 0x1120, 0x080c, 0xcac7, 0x0804, 0xb681, 0x6604, 0x96b6,\r
-+      0x001f, 0x1120, 0x080c, 0xafd2, 0x0804, 0xb681, 0x6604, 0x96b6,\r
-+      0x0000, 0x1118, 0x080c, 0xb319, 0x04e0, 0x6604, 0x96b6, 0x0022,\r
-+      0x1118, 0x080c, 0xb00a, 0x04a8, 0x6604, 0x96b6, 0x0035, 0x1118,\r
-+      0x080c, 0xb130, 0x0470, 0x6604, 0x96b6, 0x0039, 0x1118, 0x080c,\r
-+      0xb2ae, 0x0438, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c, 0xb042,\r
-+      0x0400, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xb07e, 0x00c8,\r
-+      0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xb0bf, 0x0090, 0x6604,\r
-+      0x96b6, 0x0041, 0x1118, 0x080c, 0xb0a9, 0x0058, 0x91b6, 0x0015,\r
-+      0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804,\r
-+      0xb8db, 0x00be, 0x0005, 0x080c, 0xaca9, 0x0cd8, 0xb69e, 0xb6a1,\r
-+      0xb69e, 0xb6e8, 0xb69e, 0xb84f, 0xb8e8, 0xb69e, 0xb69e, 0xb8b1,\r
-+      0xb69e, 0xb8c7, 0x0096, 0x601f, 0x0000, 0x6014, 0x2048, 0xa800,\r
-+      0x2048, 0xa867, 0x0103, 0x009e, 0x0804, 0xabed, 0xa001, 0xa001,\r
-+      0x0005, 0x00e6, 0x2071, 0x1800, 0x7090, 0x9086, 0x0074, 0x1540,\r
-+      0x080c, 0xdfbc, 0x11b0, 0x6010, 0x00b6, 0x2058, 0x7030, 0xd08c,\r
-+      0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802, 0x00f9, 0x00be,\r
-+      0x2001, 0x0006, 0x080c, 0x6575, 0x080c, 0x321c, 0x080c, 0xabed,\r
-+      0x0098, 0x2001, 0x000a, 0x080c, 0x6575, 0x080c, 0x321c, 0x6003,\r
-+      0x0001, 0x6007, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0020,\r
-+      0x2001, 0x0001, 0x080c, 0xb81f, 0x00ee, 0x0005, 0x00d6, 0xb800,\r
-+      0xd084, 0x0160, 0x9006, 0x080c, 0x6561, 0x2069, 0x1847, 0x6804,\r
-+      0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x65a1, 0x00de, 0x0005,\r
-+      0x00b6, 0x0096, 0x00d6, 0x2011, 0x1824, 0x2204, 0x9086, 0x0074,\r
-+      0x1904, 0xb7f6, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120,\r
-+      0x080c, 0xba35, 0x0804, 0xb75a, 0x080c, 0xba2a, 0x6010, 0x2058,\r
-+      0xbaa0, 0x9286, 0x0080, 0x1510, 0x6014, 0x9005, 0x01a8, 0x2048,\r
-+      0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000,\r
-+      0x900e, 0x2011, 0x4000, 0x080c, 0xce31, 0x0030, 0xa807, 0x0000,\r
-+      0xa867, 0x0103, 0xa833, 0x0200, 0x2001, 0x0006, 0x080c, 0x6575,\r
-+      0x080c, 0x321c, 0x080c, 0xabed, 0x0804, 0xb7f9, 0x080c, 0xb807,\r
-+      0x6014, 0x9005, 0x0190, 0x2048, 0xa868, 0xd0f4, 0x01e8, 0xa864,\r
-+      0x9084, 0x00ff, 0x9086, 0x0039, 0x1d08, 0x2001, 0x0000, 0x900e,\r
-+      0x2011, 0x4000, 0x080c, 0xce31, 0x08f8, 0x080c, 0xb7fd, 0x0160,\r
-+      0x9006, 0x080c, 0x6561, 0x2001, 0x0004, 0x080c, 0x65a1, 0x2001,\r
-+      0x0007, 0x080c, 0x6575, 0x08a0, 0x2001, 0x0004, 0x080c, 0x6575,\r
-+      0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x9225, 0x080c, 0x96a0,\r
-+      0x0804, 0xb7f9, 0xb85c, 0xd0e4, 0x01d8, 0x080c, 0xcc5e, 0x080c,\r
-+      0x74e9, 0x0118, 0xd0dc, 0x1904, 0xb71c, 0x2011, 0x1837, 0x2204,\r
-+      0xc0ad, 0x2012, 0x2001, 0x196d, 0x2004, 0x00f6, 0x2079, 0x0100,\r
-+      0x78e3, 0x0000, 0x080c, 0x266f, 0x78e2, 0x00fe, 0x0804, 0xb71c,\r
-+      0x080c, 0xcc9f, 0x2011, 0x1837, 0x2204, 0xc0a5, 0x2012, 0x0006,\r
-+      0x080c, 0xe14c, 0x000e, 0x1904, 0xb71c, 0xc0b5, 0x2012, 0x2001,\r
-+      0x0006, 0x080c, 0x6575, 0x9006, 0x080c, 0x6561, 0x00c6, 0x2001,\r
-+      0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6,\r
-+      0x2071, 0x1800, 0x700c, 0x9084, 0x00ff, 0x78e6, 0x707e, 0x7010,\r
-+      0x78ea, 0x7082, 0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e,\r
-+      0x00fe, 0x080c, 0x2644, 0x00f6, 0x2100, 0x900e, 0x080c, 0x25fb,\r
-+      0x795e, 0x00fe, 0x9186, 0x0081, 0x01d8, 0x2009, 0x0081, 0x00c8,\r
-+      0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936,\r
-+      0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2644, 0x00f6, 0x2079,\r
-+      0x1800, 0x7982, 0x2100, 0x900e, 0x080c, 0x25fb, 0x795e, 0x00fe,\r
-+      0x8108, 0x080c, 0x65c4, 0x2b00, 0x00ce, 0x1904, 0xb71c, 0x6012,\r
-+      0x2009, 0x180f, 0x210c, 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c,\r
-+      0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, 0x210c, 0xb916, 0x2001,\r
-+      0x0002, 0x080c, 0x6575, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007,\r
-+      0x0002, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0018, 0x2001, 0x0001,\r
-+      0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001, 0x1810, 0x2004,\r
-+      0xd0a4, 0x0120, 0x2001, 0x1848, 0x2004, 0xd0ac, 0x0005, 0x00e6,\r
-+      0x080c, 0xe689, 0x0190, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c,\r
-+      0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010, 0x2058, 0xb8a0,\r
-+      0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, 0x2030,\r
-+      0x9005, 0x0158, 0x2001, 0x0007, 0x080c, 0x6575, 0x080c, 0x56ee,\r
-+      0x1120, 0x2001, 0x0007, 0x080c, 0x65a1, 0x2600, 0x9005, 0x11b0,\r
-+      0x6014, 0x0096, 0x2048, 0xa868, 0x009e, 0xd0fc, 0x1178, 0x0036,\r
-+      0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004,\r
-+      0x2011, 0x8014, 0x080c, 0x4b07, 0x004e, 0x003e, 0x080c, 0x321c,\r
-+      0x6020, 0x9086, 0x000a, 0x1108, 0x0005, 0x0804, 0xabed, 0x00b6,\r
-+      0x00e6, 0x0026, 0x0016, 0x2071, 0x1800, 0x7090, 0x9086, 0x0014,\r
-+      0x1904, 0xb8a7, 0x080c, 0x56ee, 0x1170, 0x6014, 0x9005, 0x1158,\r
-+      0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c,\r
-+      0x4cbe, 0x004e, 0x003e, 0x00d6, 0x6010, 0x2058, 0x080c, 0x66c0,\r
-+      0x080c, 0xb6d6, 0x00de, 0x080c, 0xbafb, 0x1588, 0x6010, 0x2058,\r
-+      0xb890, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c, 0x6575, 0x0096,\r
-+      0x6014, 0x904d, 0x01d0, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039,\r
-+      0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xce31,\r
-+      0x0060, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0xa807,\r
-+      0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x009e, 0x080c, 0x321c,\r
-+      0x6020, 0x9086, 0x000a, 0x0140, 0x080c, 0xabed, 0x0028, 0x080c,\r
-+      0xb5b5, 0x9006, 0x080c, 0xb81f, 0x001e, 0x002e, 0x00ee, 0x00be,\r
-+      0x0005, 0x2011, 0x1824, 0x2204, 0x9086, 0x0014, 0x1160, 0x2001,\r
-+      0x0002, 0x080c, 0x6575, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,\r
-+      0x9225, 0x0804, 0x96a0, 0x2001, 0x0001, 0x0804, 0xb81f, 0x2030,\r
-+      0x2011, 0x1824, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b,\r
-+      0x1120, 0x2001, 0x0007, 0x080c, 0x6575, 0x0804, 0xabed, 0x2001,\r
-+      0x0001, 0x0804, 0xb81f, 0x0002, 0xb69e, 0xb8f3, 0xb69e, 0xb934,\r
-+      0xb69e, 0xb9e1, 0xb8e8, 0xb69e, 0xb69e, 0xb9f5, 0xb69e, 0xba07,\r
-+      0x6604, 0x9686, 0x0003, 0x0904, 0xb84f, 0x96b6, 0x001e, 0x1110,\r
-+      0x080c, 0xabed, 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xba19,\r
-+      0x11a0, 0x9006, 0x080c, 0x6561, 0x080c, 0x31e7, 0x080c, 0xcf67,\r
-+      0x2001, 0x0002, 0x080c, 0x6575, 0x6003, 0x0001, 0x6007, 0x0002,\r
-+      0x080c, 0x9225, 0x080c, 0x96a0, 0x0418, 0x2009, 0x026e, 0x2104,\r
-+      0x9086, 0x0009, 0x1160, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,\r
-+      0x9005, 0x0170, 0x8001, 0xb842, 0x601b, 0x000a, 0x0088, 0x2009,\r
-+      0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x1900, 0x1108, 0x08a0,\r
-+      0x080c, 0x31e7, 0x080c, 0xcf67, 0x2001, 0x0001, 0x080c, 0xb81f,\r
-+      0x00ce, 0x00de, 0x00be, 0x0005, 0x0096, 0x00b6, 0x0026, 0x9016,\r
-+      0x080c, 0xba27, 0x00d6, 0x2069, 0x197c, 0x2d04, 0x9005, 0x0168,\r
-+      0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x2069, 0x1820,\r
-+      0x2d04, 0x8000, 0x206a, 0x00de, 0x0010, 0x00de, 0x0088, 0x9006,\r
-+      0x080c, 0x6561, 0x2001, 0x0002, 0x080c, 0x6575, 0x6003, 0x0001,\r
-+      0x6007, 0x0002, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0804, 0xb9b1,\r
-+      0x080c, 0xc838, 0x01b0, 0x6014, 0x2048, 0xa864, 0x2010, 0x9086,\r
-+      0x0139, 0x1138, 0x6007, 0x0016, 0x2001, 0x0002, 0x080c, 0xce8b,\r
-+      0x00b0, 0x6014, 0x2048, 0xa864, 0xd0fc, 0x0118, 0x2001, 0x0001,\r
-+      0x0ca8, 0x2001, 0x180e, 0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058,\r
-+      0xb840, 0x9084, 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38, 0x080c,\r
-+      0xb5b5, 0x2009, 0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005,\r
-+      0x0520, 0x9686, 0x000b, 0x01c8, 0x2009, 0x026f, 0x2104, 0x9084,\r
-+      0xff00, 0x1118, 0x9686, 0x0009, 0x01c0, 0x9086, 0x1900, 0x1168,\r
-+      0x9686, 0x0009, 0x0190, 0x2001, 0x0004, 0x080c, 0x6575, 0x2001,\r
-+      0x0028, 0x601a, 0x6007, 0x0052, 0x0020, 0x2001, 0x0001, 0x080c,\r
-+      0xb81f, 0x002e, 0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160,\r
-+      0x6014, 0x2048, 0x080c, 0xc838, 0x0140, 0xa864, 0x9086, 0x0139,\r
-+      0x0118, 0xa868, 0xd0fc, 0x0108, 0x0c40, 0x6010, 0x2058, 0xb840,\r
-+      0x9084, 0x00ff, 0x9005, 0x0138, 0x8001, 0xb842, 0x601b, 0x000a,\r
-+      0x6007, 0x0016, 0x08f0, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6,\r
-+      0x2071, 0x1800, 0x080c, 0x5fbc, 0x00ee, 0x0010, 0x080c, 0x31e7,\r
-+      0x0860, 0x080c, 0xba27, 0x1160, 0x2001, 0x0004, 0x080c, 0x6575,\r
-+      0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x9225, 0x0804, 0x96a0,\r
-+      0x080c, 0xb5b5, 0x9006, 0x0804, 0xb81f, 0x0489, 0x1160, 0x2001,\r
-+      0x0008, 0x080c, 0x6575, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c,\r
-+      0x9225, 0x0804, 0x96a0, 0x2001, 0x0001, 0x0804, 0xb81f, 0x00f9,\r
-+      0x1160, 0x2001, 0x000a, 0x080c, 0x6575, 0x6003, 0x0001, 0x6007,\r
-+      0x0001, 0x080c, 0x9225, 0x0804, 0x96a0, 0x2001, 0x0001, 0x0804,\r
-+      0xb81f, 0x2009, 0x026e, 0x2104, 0x9086, 0x0003, 0x1138, 0x2009,\r
-+      0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085,\r
-+      0x0001, 0x0005, 0x00b6, 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c,\r
-+      0x6634, 0x001e, 0x00ce, 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6,\r
-+      0x00d6, 0x0036, 0x0016, 0x6010, 0x2058, 0x2009, 0x1837, 0x2104,\r
-+      0x9085, 0x0003, 0x200a, 0x080c, 0xbacd, 0x0560, 0x2009, 0x1837,\r
-+      0x2104, 0xc0cd, 0x200a, 0x080c, 0x6a67, 0x0158, 0x9006, 0x2020,\r
-+      0x2009, 0x002a, 0x080c, 0xe2c9, 0x2001, 0x180c, 0x200c, 0xc195,\r
-+      0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x080c, 0x31a6, 0x00e6,\r
-+      0x2071, 0x1800, 0x080c, 0x2fb2, 0x00ee, 0x00c6, 0x0156, 0x20a9,\r
-+      0x0781, 0x2009, 0x007f, 0x080c, 0x32fc, 0x8108, 0x1f04, 0xba6b,\r
-+      0x015e, 0x00ce, 0x080c, 0xba2a, 0x2071, 0x0260, 0x2079, 0x0200,\r
-+      0x7817, 0x0001, 0x2001, 0x1837, 0x200c, 0xc1c5, 0x7018, 0xd0fc,\r
-+      0x0110, 0xd0dc, 0x0118, 0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817,\r
-+      0x0000, 0x2001, 0x1837, 0x2102, 0x2079, 0x0100, 0x2e04, 0x9084,\r
-+      0x00ff, 0x2069, 0x181f, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04,\r
-+      0x2069, 0x1820, 0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084,\r
-+      0xff00, 0x001e, 0x9105, 0x2009, 0x182c, 0x200a, 0x2200, 0x9084,\r
-+      0x00ff, 0x2008, 0x080c, 0x2644, 0x080c, 0x74e9, 0x0170, 0x2071,\r
-+      0x0260, 0x2069, 0x1982, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050,\r
-+      0x680a, 0x7054, 0x680e, 0x080c, 0xcc5e, 0x0040, 0x2001, 0x0006,\r
-+      0x080c, 0x6575, 0x080c, 0x321c, 0x080c, 0xabed, 0x001e, 0x003e,\r
-+      0x00de, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036,\r
-+      0x00e6, 0x0156, 0x2019, 0x182c, 0x231c, 0x83ff, 0x01f0, 0x2071,\r
-+      0x0260, 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205,\r
-+      0x9306, 0x1198, 0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019,\r
-+      0x000a, 0x080c, 0xbbc2, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004,\r
-+      0x2019, 0x0006, 0x080c, 0xbbc2, 0x1100, 0x015e, 0x00ee, 0x003e,\r
-+      0x002e, 0x009e, 0x0005, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9086,\r
-+      0x0014, 0x11a8, 0x7038, 0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec,\r
-+      0x0160, 0x9084, 0x0f00, 0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4,\r
-+      0x1110, 0xd0ac, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ee,\r
-+      0x0005, 0x00e6, 0x0096, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026,\r
-+      0x0006, 0x0126, 0x2091, 0x8000, 0x2029, 0x19f3, 0x252c, 0x2021,\r
-+      0x19fa, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7254, 0x7074,\r
-+      0x9202, 0x1a04, 0xbb8e, 0x080c, 0x8b90, 0x0904, 0xbb87, 0x080c,\r
-+      0xe2fa, 0x0904, 0xbb87, 0x6720, 0x9786, 0x0007, 0x0904, 0xbb87,\r
-+      0x2500, 0x9c06, 0x0904, 0xbb87, 0x2400, 0x9c06, 0x0904, 0xbb87,\r
-+      0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, 0x9005, 0x0130, 0x00b6,\r
-+      0x2058, 0xb800, 0x00be, 0xd0bc, 0x1590, 0x00c6, 0x6043, 0xffff,\r
-+      0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x1a6a, 0x9786, 0x000a,\r
-+      0x0148, 0x080c, 0xca4d, 0x1130, 0x00ce, 0x080c, 0xb5b5, 0x080c,\r
-+      0xac28, 0x00e8, 0x6014, 0x2048, 0x080c, 0xc838, 0x01a8, 0x9786,\r
-+      0x0003, 0x1530, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096,\r
-+      0xa878, 0x2048, 0x080c, 0x0fec, 0x009e, 0xab7a, 0xa877, 0x0000,\r
-+      0x080c, 0x6d74, 0x080c, 0xca27, 0x080c, 0xac28, 0x00ce, 0x9ce0,\r
-+      0x001c, 0x7068, 0x9c02, 0x1210, 0x0804, 0xbb2e, 0x012e, 0x000e,\r
-+      0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005,\r
-+      0x9786, 0x0006, 0x1118, 0x080c, 0xe26c, 0x0c30, 0x9786, 0x0009,\r
-+      0x1148, 0x6000, 0x9086, 0x0004, 0x0d08, 0x2009, 0x004c, 0x080c,\r
-+      0xac8c, 0x08e0, 0x9786, 0x000a, 0x0938, 0x0820, 0x220c, 0x2304,\r
-+      0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xbbae, 0x9006, 0x0005,\r
-+      0x2304, 0x9102, 0x0218, 0x2001, 0x0001, 0x0008, 0x9006, 0x918d,\r
-+      0x0001, 0x0005, 0x0136, 0x01c6, 0x0016, 0x8906, 0x8006, 0x8007,\r
-+      0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9300, 0x2098, 0x3518,\r
-+      0x20a9, 0x0001, 0x220c, 0x4002, 0x910e, 0x1140, 0x8210, 0x8319,\r
-+      0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x9102,\r
-+      0x0218, 0x2001, 0x0001, 0x0010, 0x2001, 0x0000, 0x918d, 0x0001,\r
-+      0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x810f, 0x2304, 0x9106,\r
-+      0x1130, 0x8210, 0x8318, 0x1f04, 0xbbec, 0x9006, 0x0005, 0x918d,\r
-+      0x0001, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d7d, 0x080c,\r
-+      0xca3c, 0x0120, 0x080c, 0xca4d, 0x0158, 0x0028, 0x080c, 0x321c,\r
-+      0x080c, 0xca4d, 0x0128, 0x080c, 0x95de, 0x080c, 0xabed, 0x0005,\r
-+      0x080c, 0xb5b5, 0x0cc0, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040,\r
-+      0x0208, 0x000a, 0x0005, 0xbc32, 0xbc32, 0xbc32, 0xbc32, 0xbc32,\r
-+      0xbc32, 0xbc32, 0xbc32, 0xbc32, 0xbc32, 0xbc32, 0xbc34, 0xbc34,\r
-+      0xbc34, 0xbc34, 0xbc32, 0xbc32, 0xbc32, 0xbc34, 0xbc32, 0xbc32,\r
-+      0xbc32, 0xbc32, 0x080c, 0x0d7d, 0x600b, 0xffff, 0x6003, 0x000f,\r
-+      0x6106, 0x0126, 0x2091, 0x8000, 0x080c, 0xcf6a, 0x2009, 0x8000,\r
-+      0x080c, 0x921e, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,\r
-+      0x9082, 0x0040, 0x0804, 0xbcb9, 0x9186, 0x0027, 0x1520, 0x080c,\r
-+      0x95de, 0x080c, 0x31e7, 0x080c, 0xcf67, 0x0096, 0x6114, 0x2148,\r
-+      0x080c, 0xc838, 0x0198, 0x080c, 0xca4d, 0x1118, 0x080c, 0xb5b5,\r
-+      0x0068, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0xa97c,\r
-+      0xc1c5, 0xa97e, 0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x080c,\r
-+      0xabed, 0x0804, 0x96a0, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082,\r
-+      0x0040, 0x0018, 0x080c, 0x0d7d, 0x0005, 0x0002, 0xbc97, 0xbc95,\r
-+      0xbc95, 0xbc95, 0xbc95, 0xbc95, 0xbc95, 0xbc95, 0xbc95, 0xbc95,\r
-+      0xbc95, 0xbcb0, 0xbcb0, 0xbcb0, 0xbcb0, 0xbc95, 0xbcb0, 0xbc95,\r
-+      0xbcb0, 0xbc95, 0xbc95, 0xbc95, 0xbc95, 0x080c, 0x0d7d, 0x080c,\r
-+      0x95de, 0x0096, 0x6114, 0x2148, 0x080c, 0xc838, 0x0168, 0xa867,\r
-+      0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882,\r
-+      0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x080c, 0xabed, 0x0005,\r
-+      0x080c, 0x95de, 0x080c, 0xca4d, 0x090c, 0xb5b5, 0x080c, 0xabed,\r
-+      0x0005, 0x0002, 0xbcd3, 0xbcd1, 0xbcd1, 0xbcd1, 0xbcd1, 0xbcd1,\r
-+      0xbcd1, 0xbcd1, 0xbcd1, 0xbcd1, 0xbcd1, 0xbcd5, 0xbcd5, 0xbcd5,\r
-+      0xbcd5, 0xbcd1, 0xbcd7, 0xbcd1, 0xbcd5, 0xbcd1, 0xbcd1, 0xbcd1,\r
-+      0xbcd1, 0x080c, 0x0d7d, 0x080c, 0x0d7d, 0x080c, 0x0d7d, 0x080c,\r
-+      0xabed, 0x0804, 0x96a0, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040,\r
-+      0x0208, 0x000a, 0x0005, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa,\r
-+      0xbd33, 0xbe22, 0xbcfa, 0xbe2e, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa,\r
-+      0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, 0xbe2e, 0xbcfc,\r
-+      0xbcfa, 0xbe2c, 0x080c, 0x0d7d, 0x00b6, 0x0096, 0x6114, 0x2148,\r
-+      0x6010, 0x2058, 0xb800, 0xd0bc, 0x1508, 0xa87b, 0x0000, 0xa867,\r
-+      0x0103, 0xa877, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,\r
-+      0x9115, 0x190c, 0xbeb3, 0x080c, 0x6b96, 0x6210, 0x2258, 0xba3c,\r
-+      0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8d0, 0x9005, 0x0110, 0x080c,\r
-+      0x6750, 0x080c, 0xabed, 0x009e, 0x00be, 0x0005, 0xa87c, 0xd0ac,\r
-+      0x09e0, 0xa838, 0xa934, 0x9105, 0x09c0, 0xa880, 0xd0bc, 0x19a8,\r
-+      0x080c, 0xcb7d, 0x0c80, 0x00b6, 0x0096, 0x6114, 0x2148, 0x601c,\r
-+      0xd0fc, 0x1110, 0x7644, 0x0008, 0x9036, 0x96b4, 0x0fff, 0x86ff,\r
-+      0x1590, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xbe11, 0xa87b,\r
-+      0x0000, 0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834,\r
-+      0xa938, 0x9115, 0x190c, 0xbeb3, 0x080c, 0x6b96, 0x6210, 0x2258,\r
-+      0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8d0, 0x9005, 0x0110,\r
-+      0x080c, 0x6750, 0x601c, 0xd0fc, 0x1148, 0x7044, 0xd0e4, 0x1904,\r
-+      0xbdf5, 0x080c, 0xabed, 0x009e, 0x00be, 0x0005, 0x2009, 0x0211,\r
-+      0x210c, 0x080c, 0x0d7d, 0x968c, 0x0c00, 0x0150, 0x6010, 0x2058,\r
-+      0xb800, 0xd0bc, 0x1904, 0xbdf9, 0x7348, 0xab92, 0x734c, 0xab8e,\r
-+      0x968c, 0x00ff, 0x9186, 0x0002, 0x0508, 0x9186, 0x0028, 0x1118,\r
-+      0xa87b, 0x001c, 0x00e8, 0xd6dc, 0x01a0, 0xa87b, 0x0015, 0xa87c,\r
-+      0xd0ac, 0x0170, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0148, 0x7048,\r
-+      0x9106, 0x1118, 0x704c, 0x9206, 0x0118, 0xa992, 0xaa8e, 0xc6dc,\r
-+      0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000,\r
-+      0xa867, 0x0103, 0xae76, 0x901e, 0xd6c4, 0x01d8, 0x9686, 0x0100,\r
-+      0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0x0804, 0xbd3f, 0x735c,\r
-+      0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,\r
-+      0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xc40b,\r
-+      0x003e, 0xd6cc, 0x0904, 0xbd54, 0x7154, 0xa98a, 0x81ff, 0x0904,\r
-+      0xbd54, 0x9192, 0x0021, 0x1278, 0x8304, 0x9098, 0x0018, 0x2011,\r
-+      0x0029, 0x080c, 0xc40b, 0x2011, 0x0205, 0x2013, 0x0000, 0x080c,\r
-+      0xcef7, 0x0804, 0xbd54, 0xa868, 0xd0fc, 0x0120, 0x2009, 0x0020,\r
-+      0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c, 0xc3aa, 0x00ae, 0x080c,\r
-+      0xcef7, 0x080c, 0xc3fb, 0x0804, 0xbd56, 0x080c, 0xcb40, 0x0804,\r
-+      0xbd6b, 0xa87c, 0xd0ac, 0x0904, 0xbd7c, 0xa880, 0xd0bc, 0x1904,\r
-+      0xbd7c, 0x7348, 0xa838, 0x9306, 0x11c8, 0x734c, 0xa834, 0x931e,\r
-+      0x0904, 0xbd7c, 0xd6d4, 0x0190, 0xab38, 0x9305, 0x0904, 0xbd7c,\r
-+      0x0068, 0xa87c, 0xd0ac, 0x0904, 0xbd47, 0xa838, 0xa934, 0x9105,\r
-+      0x0904, 0xbd47, 0xa880, 0xd0bc, 0x1904, 0xbd47, 0x080c, 0xcb7d,\r
-+      0x0804, 0xbd6b, 0x00f6, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c,\r
-+      0x7d08, 0x00fe, 0x0021, 0x0005, 0x0011, 0x0005, 0x0005, 0x0096,\r
-+      0x6003, 0x0002, 0x6007, 0x0043, 0x6014, 0x2048, 0xa87c, 0xd0ac,\r
-+      0x0128, 0x009e, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0xa9ac,\r
-+      0x910a, 0x2300, 0xaab0, 0x9213, 0x2600, 0x9102, 0x2500, 0x9203,\r
-+      0x0e90, 0xac46, 0xab4a, 0xae36, 0xad3a, 0x6044, 0xd0fc, 0x190c,\r
-+      0xa8bf, 0x604b, 0x0000, 0x080c, 0x1c30, 0x1118, 0x6144, 0x080c,\r
-+      0x924a, 0x009e, 0x0005, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040,\r
-+      0x0208, 0x000a, 0x0005, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a,\r
-+      0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7c, 0xbe7a, 0xbe7a,\r
-+      0xbe7a, 0xbe7a, 0xbe8d, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a, 0xbeb1,\r
-+      0xbe7a, 0xbe7a, 0x080c, 0x0d7d, 0x6004, 0x9086, 0x0040, 0x1110,\r
-+      0x080c, 0x95de, 0x2019, 0x0001, 0x080c, 0xa118, 0x6003, 0x0002,\r
-+      0x080c, 0xcf6f, 0x080c, 0x963b, 0x0005, 0x6004, 0x9086, 0x0040,\r
-+      0x1110, 0x080c, 0x95de, 0x2019, 0x0001, 0x080c, 0xa118, 0x080c,\r
-+      0x963b, 0x080c, 0x31e7, 0x080c, 0xcf67, 0x0096, 0x6114, 0x2148,\r
-+      0x080c, 0xc838, 0x0150, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877,\r
-+      0x0000, 0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x080c, 0xabed,\r
-+      0x0005, 0x080c, 0x0d7d, 0xa87b, 0x0015, 0xd1fc, 0x0180, 0xa87b,\r
-+      0x0007, 0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0x0006, 0x0016,\r
-+      0x2009, 0x1a78, 0x2104, 0x8000, 0x200a, 0x001e, 0x000e, 0xa992,\r
-+      0xa88e, 0x0005, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208,\r
-+      0x000a, 0x0005, 0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xbeeb,\r
-+      0xbee9, 0xbee9, 0xbfa8, 0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xbee9,\r
-+      0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xc0ec, 0xbee9, 0xc0f6,\r
-+      0xbee9, 0x080c, 0x0d7d, 0x601c, 0xd0bc, 0x0178, 0xd084, 0x0168,\r
-+      0xd0f4, 0x0120, 0xc084, 0x601e, 0x0804, 0xbcdb, 0x6114, 0x0096,\r
-+      0x2148, 0xa87c, 0xc0e5, 0xa87e, 0x009e, 0x0076, 0x00a6, 0x00e6,\r
-+      0x0096, 0x2071, 0x0260, 0x6114, 0x2150, 0x601c, 0xd0fc, 0x1110,\r
-+      0x7644, 0x0008, 0x9036, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5,\r
-+      0xb77e, 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211,\r
-+      0xba3e, 0x00be, 0x86ff, 0x0904, 0xbfa1, 0x9694, 0xff00, 0x9284,\r
-+      0x0c00, 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300,\r
-+      0x0904, 0xbfa1, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118,\r
-+      0xc6c4, 0xb676, 0x0c38, 0x080c, 0x103a, 0x090c, 0x0d7d, 0x2900,\r
-+      0xb07a, 0xb77c, 0x97bd, 0x0200, 0xb77e, 0xa867, 0x0103, 0xb068,\r
-+      0xa86a, 0xb06c, 0xa86e, 0xb070, 0xa872, 0x7044, 0x9084, 0xf000,\r
-+      0x9635, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c,\r
-+      0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028,\r
-+      0x1118, 0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015,\r
-+      0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000,\r
-+      0xaf7e, 0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190,\r
-+      0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019,\r
-+      0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c,\r
-+      0xc40b, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8,\r
-+      0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029,\r
-+      0x080c, 0xc40b, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068,\r
-+      0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c,\r
-+      0xc3aa, 0x080c, 0x1a48, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005,\r
-+      0x2001, 0x1988, 0x2004, 0x604a, 0x0096, 0x6114, 0x2148, 0xa83c,\r
-+      0xa940, 0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, 0x0002,\r
-+      0x080c, 0xcf78, 0x0904, 0xc0e7, 0x604b, 0x0000, 0x6010, 0x00b6,\r
-+      0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, 0xc0a6,\r
-+      0xa978, 0xa868, 0xd0fc, 0x0904, 0xc067, 0x0016, 0xa87c, 0x0006,\r
-+      0xa880, 0x0006, 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6,\r
-+      0x0002, 0x0904, 0xc035, 0x9086, 0x0028, 0x1904, 0xc021, 0xa87b,\r
-+      0x001c, 0xb07b, 0x001c, 0x0804, 0xc03d, 0x6024, 0xd0f4, 0x11d0,\r
-+      0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, 0x1120,\r
-+      0xa88c, 0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4, 0x1148, 0xa9ac,\r
-+      0xa834, 0x9102, 0x603a, 0xa9b0, 0xa838, 0x9103, 0x603e, 0x6024,\r
-+      0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c, 0x8000, 0xb83e,\r
-+      0x00be, 0x601c, 0xc0fc, 0x601e, 0x9006, 0xa876, 0xa892, 0xa88e,\r
-+      0xa87c, 0xc0e4, 0xa87e, 0xd0cc, 0x0140, 0xc0cc, 0xa87e, 0x0096,\r
-+      0xa878, 0x2048, 0x080c, 0x0fec, 0x009e, 0x080c, 0xcb7d, 0x0804,\r
-+      0xc0e7, 0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c,\r
-+      0xce1a, 0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128,\r
-+      0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128,\r
-+      0xa834, 0xa938, 0x9115, 0x190c, 0xbeb3, 0xa87c, 0xb07e, 0xa890,\r
-+      0xb092, 0xa88c, 0xb08e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0019,\r
-+      0x20a0, 0x20a9, 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f,\r
-+      0x22e0, 0x9084, 0xffc0, 0x9080, 0x0019, 0x2098, 0x4003, 0x00ae,\r
-+      0x000e, 0xa882, 0x000e, 0xa87e, 0x080c, 0xcef7, 0x001e, 0xa874,\r
-+      0x0006, 0x2148, 0x080c, 0x0fec, 0x001e, 0x0804, 0xc0d3, 0x0016,\r
-+      0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0,\r
-+      0x9086, 0x0028, 0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0,\r
-+      0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xce1a,\r
-+      0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b,\r
-+      0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834,\r
-+      0xa938, 0x9115, 0x190c, 0xbeb3, 0xa890, 0xb092, 0xa88c, 0xb08e,\r
-+      0xa87c, 0xb07e, 0x00ae, 0x080c, 0x0fec, 0x009e, 0x080c, 0xcef7,\r
-+      0xa974, 0x0016, 0x080c, 0xc3fb, 0x001e, 0x0468, 0xa867, 0x0103,\r
-+      0xa974, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028,\r
-+      0x1118, 0xa87b, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015,\r
-+      0x080c, 0xce1a, 0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4,\r
-+      0x0118, 0xa87b, 0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac,\r
-+      0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xbeb3, 0xa974, 0x0016,\r
-+      0x080c, 0x6b96, 0x001e, 0x6010, 0x00b6, 0x2058, 0xba3c, 0x82ff,\r
-+      0x0110, 0x8211, 0xba3e, 0xb8d0, 0x9005, 0x0120, 0x0016, 0x080c,\r
-+      0x6750, 0x001e, 0x00be, 0xd1e4, 0x1120, 0x080c, 0xabed, 0x009e,\r
-+      0x0005, 0x080c, 0xcb40, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c,\r
-+      0x080c, 0xcf78, 0x190c, 0x1a56, 0x009e, 0x0005, 0x0096, 0x6114,\r
-+      0x2148, 0xa83c, 0xa940, 0x9105, 0x01e8, 0xa877, 0x0000, 0xa87b,\r
-+      0x0000, 0xa867, 0x0103, 0x00b6, 0x6010, 0x2058, 0xa834, 0xa938,\r
-+      0x9115, 0x11a0, 0x080c, 0x6b96, 0xba3c, 0x8211, 0x0208, 0xba3e,\r
-+      0xb8d0, 0x9005, 0x0110, 0x080c, 0x6750, 0x080c, 0xabed, 0x00be,\r
-+      0x009e, 0x0005, 0xa87c, 0xc0dc, 0xa87e, 0x08f8, 0xb800, 0xd0bc,\r
-+      0x1120, 0xa834, 0x080c, 0xbeb3, 0x0c28, 0xa880, 0xd0bc, 0x1dc8,\r
-+      0x080c, 0xcb7d, 0x0c60, 0x080c, 0x95de, 0x0010, 0x080c, 0x963b,\r
-+      0x601c, 0xd084, 0x0110, 0x080c, 0x1a6a, 0x080c, 0xc838, 0x01f0,\r
-+      0x0096, 0x6114, 0x2148, 0x080c, 0xca4d, 0x1118, 0x080c, 0xb5b5,\r
-+      0x00a0, 0xa867, 0x0103, 0x2009, 0x180c, 0x210c, 0xd18c, 0x1198,\r
-+      0xd184, 0x1170, 0x6108, 0xa97a, 0x918e, 0x0029, 0x1110, 0x080c,\r
-+      0xe621, 0xa877, 0x0000, 0x080c, 0x6d80, 0x009e, 0x0804, 0xac28,\r
-+      0xa87b, 0x0004, 0x0cb0, 0xa87b, 0x0004, 0x0c98, 0x9182, 0x0057,\r
-+      0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xc17d, 0xc17d,\r
-+      0xc17d, 0xc17d, 0xc17d, 0xc17f, 0xc17d, 0xc17d, 0xc17d, 0xc17d,\r
-+      0xc17d, 0xc17d, 0xc17d, 0xc17d, 0xc17d, 0xc17d, 0xc17d, 0xc17d,\r
-+      0xc17d, 0xc17d, 0xc1a3, 0xc17d, 0xc17d, 0x080c, 0x0d7d, 0x080c,\r
-+      0x56e2, 0x01f8, 0x6014, 0x7144, 0x918c, 0x0fff, 0x9016, 0xd1c4,\r
-+      0x0118, 0x7264, 0x9294, 0x00ff, 0x0096, 0x904d, 0x0188, 0xa87b,\r
-+      0x0000, 0xa864, 0x9086, 0x0139, 0x0128, 0xa867, 0x0103, 0xa976,\r
-+      0xaa96, 0x0030, 0xa897, 0x4000, 0xa99a, 0xaa9e, 0x080c, 0x6d80,\r
-+      0x009e, 0x0804, 0xabed, 0x080c, 0x56e2, 0x0dd8, 0x6014, 0x900e,\r
-+      0x9016, 0x0c10, 0x9182, 0x0085, 0x0002, 0xc1bc, 0xc1ba, 0xc1ba,\r
-+      0xc1c8, 0xc1ba, 0xc1ba, 0xc1ba, 0xc1ba, 0xc1ba, 0xc1ba, 0xc1ba,\r
-+      0xc1ba, 0xc1ba, 0x080c, 0x0d7d, 0x6003, 0x0001, 0x6106, 0x0126,\r
-+      0x2091, 0x8000, 0x2009, 0x8020, 0x080c, 0x921e, 0x012e, 0x0005,\r
-+      0x0026, 0x0056, 0x00d6, 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216,\r
-+      0x7220, 0x080c, 0xc826, 0x01a0, 0x2268, 0x6800, 0x9086, 0x0000,\r
-+      0x0178, 0x6010, 0x6d10, 0x952e, 0x1158, 0x00c6, 0x2d60, 0x080c,\r
-+      0xc436, 0x00ce, 0x0128, 0x6803, 0x0002, 0x6007, 0x0086, 0x0010,\r
-+      0x6007, 0x0087, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e,\r
-+      0x9280, 0x0004, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140,\r
-+      0x6824, 0xd0ec, 0x0128, 0x00c6, 0x2260, 0x080c, 0xcb7d, 0x00ce,\r
-+      0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0x9186, 0x0013, 0x1160,\r
-+      0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d7d, 0x908a, 0x0092, 0x1a0c,\r
-+      0x0d7d, 0x9082, 0x0085, 0x00e2, 0x9186, 0x0027, 0x0120, 0x9186,\r
-+      0x0014, 0x190c, 0x0d7d, 0x080c, 0x95de, 0x0096, 0x6014, 0x2048,\r
-+      0x080c, 0xc838, 0x0140, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b,\r
-+      0x0029, 0x080c, 0x6d80, 0x009e, 0x080c, 0xac28, 0x0804, 0x96a0,\r
-+      0xc23d, 0xc23f, 0xc23f, 0xc23d, 0xc23d, 0xc23d, 0xc23d, 0xc23d,\r
-+      0xc23d, 0xc23d, 0xc23d, 0xc23d, 0xc23d, 0x080c, 0x0d7d, 0x080c,\r
-+      0xac28, 0x0005, 0x9186, 0x0013, 0x1130, 0x6004, 0x9082, 0x0085,\r
-+      0x2008, 0x0804, 0xc28e, 0x9186, 0x0027, 0x1558, 0x080c, 0x95de,\r
-+      0x080c, 0x31e7, 0x080c, 0xcf67, 0x0096, 0x6014, 0x2048, 0x080c,\r
-+      0xc838, 0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029,\r
-+      0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x080c, 0xabed, 0x0005,\r
-+      0x9186, 0x0089, 0x0118, 0x9186, 0x008a, 0x1140, 0x080c, 0xaaa8,\r
-+      0x0128, 0x9086, 0x000c, 0x0904, 0xc2c6, 0x0000, 0x080c, 0xaca9,\r
-+      0x0c70, 0x9186, 0x0014, 0x1d60, 0x080c, 0x95de, 0x0096, 0x6014,\r
-+      0x2048, 0x080c, 0xc838, 0x0d00, 0xa867, 0x0103, 0xa877, 0x0000,\r
-+      0xa87b, 0x0006, 0xa880, 0xc0ec, 0xa882, 0x0890, 0x0002, 0xc29e,\r
-+      0xc29c, 0xc29c, 0xc29c, 0xc29c, 0xc29c, 0xc2b2, 0xc29c, 0xc29c,\r
-+      0xc29c, 0xc29c, 0xc29c, 0xc29c, 0x080c, 0x0d7d, 0x6034, 0x908c,\r
-+      0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,\r
-+      0x2001, 0x1986, 0x0010, 0x2001, 0x1987, 0x2004, 0x601a, 0x6003,\r
-+      0x000c, 0x0005, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,\r
-+      0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, 0x2001,\r
-+      0x1987, 0x2004, 0x601a, 0x6003, 0x000e, 0x0005, 0x9182, 0x0092,\r
-+      0x1220, 0x9182, 0x0085, 0x0208, 0x0012, 0x0804, 0xaca9, 0xc2dc,\r
-+      0xc2dc, 0xc2dc, 0xc2dc, 0xc2de, 0xc32b, 0xc2dc, 0xc2dc, 0xc2dc,\r
-+      0xc2dc, 0xc2dc, 0xc2dc, 0xc2dc, 0x080c, 0x0d7d, 0x0096, 0x6010,\r
-+      0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0168, 0x6034, 0x908c,\r
-+      0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,\r
-+      0x009e, 0x0804, 0xc33f, 0x080c, 0xc838, 0x1118, 0x080c, 0xca27,\r
-+      0x0068, 0x6014, 0x2048, 0x080c, 0xcf7e, 0x1110, 0x080c, 0xca27,\r
-+      0xa867, 0x0103, 0x080c, 0xcf32, 0x080c, 0x6d80, 0x00d6, 0x2c68,\r
-+      0x080c, 0xab97, 0x01d0, 0x6003, 0x0001, 0x6007, 0x001e, 0x600b,\r
-+      0xffff, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c,\r
-+      0x613e, 0x6910, 0x6112, 0x080c, 0xcccc, 0x695c, 0x615e, 0x6023,\r
-+      0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x2d60, 0x00de, 0x080c,\r
-+      0xabed, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,\r
-+      0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0035,\r
-+      0x0130, 0x9186, 0x001e, 0x0118, 0x9186, 0x0039, 0x1538, 0x00d6,\r
-+      0x2c68, 0x080c, 0xceca, 0x11f0, 0x080c, 0xab97, 0x01d8, 0x6106,\r
-+      0x6003, 0x0001, 0x6023, 0x0001, 0x6910, 0x6112, 0x692c, 0x612e,\r
-+      0x6930, 0x6132, 0x6934, 0x918c, 0x00ff, 0x6136, 0x6938, 0x613a,\r
-+      0x693c, 0x613e, 0x695c, 0x615e, 0x080c, 0xcccc, 0x2009, 0x8020,\r
-+      0x080c, 0x921e, 0x2d60, 0x00de, 0x0804, 0xabed, 0x0096, 0x6014,\r
-+      0x2048, 0x080c, 0xc838, 0x01c8, 0xa867, 0x0103, 0xa880, 0xd0b4,\r
-+      0x0128, 0xc0ec, 0xa882, 0xa87b, 0x0006, 0x0048, 0xd0bc, 0x0118,\r
-+      0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xcb3c, 0xa877,\r
-+      0x0000, 0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x0804, 0xabed,\r
-+      0x0016, 0x0096, 0x6014, 0x2048, 0x080c, 0xc838, 0x0140, 0xa867,\r
-+      0x0103, 0xa87b, 0x0028, 0xa877, 0x0000, 0x080c, 0x6d80, 0x009e,\r
-+      0x001e, 0x9186, 0x0013, 0x0158, 0x9186, 0x0014, 0x0130, 0x9186,\r
-+      0x0027, 0x0118, 0x080c, 0xaca9, 0x0020, 0x080c, 0x95de, 0x080c,\r
-+      0xac28, 0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001,\r
-+      0x9182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304,\r
-+      0x9098, 0x0018, 0x2009, 0x0020, 0x2011, 0x0029, 0x080c, 0xc40b,\r
-+      0x96b2, 0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fec, 0x080c,\r
-+      0x103a, 0x0520, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920,\r
-+      0xb406, 0x968a, 0x003d, 0x1228, 0x2608, 0x2011, 0x001b, 0x0499,\r
-+      0x00a8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b,\r
-+      0x0451, 0x0c28, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f,\r
-+      0x95ad, 0x0003, 0xb566, 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205,\r
-+      0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x009e,\r
-+      0x006e, 0x005e, 0x0005, 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055,\r
-+      0x0130, 0xa807, 0x0000, 0x080c, 0x6d80, 0x2a48, 0x0cb8, 0x080c,\r
-+      0x6d80, 0x00ae, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085,\r
-+      0x0080, 0x7816, 0xd184, 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001,\r
-+      0xa860, 0x20e8, 0xa85c, 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300,\r
-+      0x9e00, 0x2098, 0x4003, 0x8318, 0x9386, 0x0020, 0x1148, 0x2018,\r
-+      0x2300, 0x9e00, 0x2098, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816,\r
-+      0x8109, 0x1d80, 0x7817, 0x0000, 0x00fe, 0x0005, 0x0066, 0x0126,\r
-+      0x2091, 0x8000, 0x2031, 0x0001, 0x6020, 0x9084, 0x000f, 0x0083,\r
-+      0x012e, 0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031,\r
-+      0x0000, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005,\r
-+      0xc488, 0xc488, 0xc483, 0xc4ac, 0xc460, 0xc483, 0xc462, 0xc483,\r
-+      0xc460, 0x90e4, 0xc483, 0xc483, 0xc483, 0xc460, 0xc460, 0xc460,\r
-+      0x080c, 0x0d7d, 0x6010, 0x9080, 0x0000, 0x2004, 0xd0bc, 0x190c,\r
-+      0xc4ac, 0x0036, 0x6014, 0x0096, 0x2048, 0xa880, 0x009e, 0xd0cc,\r
-+      0x0118, 0x2019, 0x000c, 0x0038, 0xd094, 0x0118, 0x2019, 0x000d,\r
-+      0x0010, 0x2019, 0x0010, 0x080c, 0xde1b, 0x6023, 0x0006, 0x6003,\r
-+      0x0007, 0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005,\r
-+      0x0096, 0x86ff, 0x11e8, 0x6014, 0x2048, 0x080c, 0xc838, 0x01d0,\r
-+      0x6043, 0xffff, 0xa864, 0x9086, 0x0139, 0x1128, 0xa87b, 0x0005,\r
-+      0xa883, 0x0000, 0x0028, 0x900e, 0x2001, 0x0005, 0x080c, 0x6fc0,\r
-+      0x080c, 0xcb3c, 0x080c, 0x6d74, 0x080c, 0xac28, 0x9085, 0x0001,\r
-+      0x009e, 0x0005, 0x9006, 0x0ce0, 0x080c, 0xa896, 0x080c, 0xcf8c,\r
-+      0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x002b, 0x0106, 0x080c,\r
-+      0xa8b2, 0x010e, 0x0005, 0xc4cb, 0xc4f9, 0xc4cd, 0xc520, 0xc4f4,\r
-+      0xc4cb, 0xc483, 0xc488, 0xc488, 0xc483, 0xc483, 0xc483, 0xc483,\r
-+      0xc483, 0xc483, 0xc483, 0x080c, 0x0d7d, 0x86ff, 0x1510, 0x6020,\r
-+      0x9086, 0x0006, 0x01f0, 0x0096, 0x6014, 0x2048, 0x080c, 0xc838,\r
-+      0x0158, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c,\r
-+      0x0fec, 0x009e, 0x080c, 0xcb3c, 0x009e, 0x080c, 0xcf0c, 0x6007,\r
-+      0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020, 0x080c,\r
-+      0x9200, 0x9085, 0x0001, 0x0005, 0x0066, 0x080c, 0x1a6a, 0x006e,\r
-+      0x08a0, 0x00e6, 0x2071, 0x19e7, 0x7030, 0x9c06, 0x1120, 0x080c,\r
-+      0xa098, 0x00ee, 0x0850, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006,\r
-+      0x1150, 0x0086, 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0xa218,\r
-+      0x009e, 0x008e, 0x0040, 0x0066, 0x080c, 0x9f94, 0x190c, 0x0d7d,\r
-+      0x080c, 0x9fa2, 0x006e, 0x00ee, 0x1904, 0xc4cd, 0x0804, 0xc483,\r
-+      0x0036, 0x00e6, 0x2071, 0x19e7, 0x704c, 0x9c06, 0x1138, 0x901e,\r
-+      0x080c, 0xa118, 0x00ee, 0x003e, 0x0804, 0xc4cd, 0x080c, 0xa34e,\r
-+      0x00ee, 0x003e, 0x1904, 0xc4cd, 0x0804, 0xc483, 0x00c6, 0x0066,\r
-+      0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x00ce, 0x0005, 0xc556,\r
-+      0xc618, 0xc77f, 0xc55e, 0xac28, 0xc556, 0xde0d, 0xcf74, 0xc618,\r
-+      0x90ab, 0xc7fe, 0xc54f, 0xc54f, 0xc54f, 0xc54f, 0xc54f, 0x080c,\r
-+      0x0d7d, 0x080c, 0xca4d, 0x1110, 0x080c, 0xb5b5, 0x0005, 0x080c,\r
-+      0x95de, 0x0804, 0xabed, 0x601b, 0x0001, 0x0005, 0x080c, 0xc838,\r
-+      0x0130, 0x6014, 0x0096, 0x2048, 0x2c00, 0xa896, 0x009e, 0x080c,\r
-+      0xa896, 0x080c, 0xcf8c, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d,\r
-+      0x0013, 0x0804, 0xa8b2, 0xc583, 0xc585, 0xc5af, 0xc5c3, 0xc5ee,\r
-+      0xc583, 0xc556, 0xc556, 0xc556, 0xc5ca, 0xc5ca, 0xc583, 0xc583,\r
-+      0xc583, 0xc583, 0xc5d4, 0x080c, 0x0d7d, 0x00e6, 0x6014, 0x0096,\r
-+      0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19e7, 0x7030,\r
-+      0x9c06, 0x01d0, 0x0066, 0x080c, 0x9f94, 0x190c, 0x0d7d, 0x080c,\r
-+      0x9fa2, 0x006e, 0x080c, 0xcf0c, 0x6007, 0x0085, 0x6003, 0x000b,\r
-+      0x6023, 0x0002, 0x2001, 0x1987, 0x2004, 0x601a, 0x2009, 0x8020,\r
-+      0x080c, 0x9200, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8, 0x0096,\r
-+      0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c, 0xcf0c,\r
-+      0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020,\r
-+      0x080c, 0x9200, 0x0005, 0x080c, 0xa896, 0x080c, 0xaa2a, 0x080c,\r
-+      0xa8b2, 0x0c28, 0x0096, 0x601b, 0x0001, 0x6014, 0x2048, 0xa880,\r
-+      0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c, 0x56e2, 0x01a8, 0x6014,\r
-+      0x0096, 0x904d, 0x0180, 0xa864, 0xa867, 0x0103, 0xa87b, 0x0006,\r
-+      0x9086, 0x0139, 0x1140, 0xa867, 0x0139, 0xa897, 0x4005, 0xa89b,\r
-+      0x0004, 0x080c, 0x6d80, 0x009e, 0x0804, 0xabed, 0x6014, 0x0096,\r
-+      0x904d, 0x0508, 0x080c, 0xcf78, 0x01f0, 0x080c, 0xa8b2, 0x2001,\r
-+      0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884, 0x009e,\r
-+      0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0037, 0x2c08,\r
-+      0x080c, 0x1679, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048,\r
-+      0x080c, 0xac8c, 0x0005, 0x009e, 0x080c, 0x1a6a, 0x0804, 0xc5af,\r
-+      0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x000b, 0x0005, 0xc62f,\r
-+      0xc55b, 0xc631, 0xc62f, 0xc631, 0xc631, 0xc557, 0xc62f, 0xc551,\r
-+      0xc551, 0xc62f, 0xc62f, 0xc62f, 0xc62f, 0xc62f, 0xc62f, 0x080c,\r
-+      0x0d7d, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be,\r
-+      0x908a, 0x000c, 0x1a0c, 0x0d7d, 0x00b6, 0x0013, 0x00be, 0x0005,\r
-+      0xc64c, 0xc719, 0xc64e, 0xc68e, 0xc64e, 0xc68e, 0xc64e, 0xc65c,\r
-+      0xc64c, 0xc68e, 0xc64c, 0xc67d, 0x080c, 0x0d7d, 0x6004, 0x908e,\r
-+      0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002, 0x0590,\r
-+      0x908e, 0x0052, 0x0904, 0xc715, 0x6004, 0x080c, 0xca4d, 0x0904,\r
-+      0xc732, 0x908e, 0x0004, 0x1110, 0x080c, 0x321c, 0x908e, 0x0021,\r
-+      0x0904, 0xc736, 0x908e, 0x0022, 0x0904, 0xc77a, 0x908e, 0x003d,\r
-+      0x0904, 0xc736, 0x908e, 0x0039, 0x0904, 0xc73a, 0x908e, 0x0035,\r
-+      0x0904, 0xc73a, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001, 0x1140,\r
-+      0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0110,\r
-+      0x080c, 0x31e7, 0x080c, 0xb5b5, 0x0804, 0xac28, 0x00c6, 0x00d6,\r
-+      0x6104, 0x9186, 0x0016, 0x0904, 0xc706, 0x9186, 0x0002, 0x1904,\r
-+      0xc6db, 0x2001, 0x1837, 0x2004, 0xd08c, 0x11c8, 0x080c, 0x74e9,\r
-+      0x11b0, 0x080c, 0xcf52, 0x0138, 0x080c, 0x750c, 0x1120, 0x080c,\r
-+      0x73f4, 0x0804, 0xc763, 0x2001, 0x197d, 0x2003, 0x0001, 0x2001,\r
-+      0x1800, 0x2003, 0x0001, 0x080c, 0x741a, 0x0804, 0xc763, 0x6010,\r
-+      0x2058, 0x2001, 0x1837, 0x2004, 0xd0ac, 0x1904, 0xc763, 0xb8a0,\r
-+      0x9084, 0xff80, 0x1904, 0xc763, 0xb840, 0x9084, 0x00ff, 0x9005,\r
-+      0x0190, 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b,\r
-+      0x0398, 0x604b, 0x0000, 0x080c, 0xab97, 0x0128, 0x2b00, 0x6012,\r
-+      0x6023, 0x0001, 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e, 0x0002,\r
-+      0x11a0, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2009,\r
-+      0x1837, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800, 0x080c,\r
-+      0x5fbc, 0x00ee, 0x080c, 0xb5b5, 0x0030, 0x080c, 0xb5b5, 0x080c,\r
-+      0x31e7, 0x080c, 0xcf67, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0x321c, 0x012e, 0x00ee, 0x080c, 0xac28, 0x0005, 0x2001, 0x0002,\r
-+      0x080c, 0x6575, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x9225,\r
-+      0x080c, 0x96a0, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x321c, 0x0804,\r
-+      0xc68a, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010,\r
-+      0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xc6db, 0x8001,\r
-+      0xb842, 0x6003, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x00de,\r
-+      0x00ce, 0x0898, 0x080c, 0xb5b5, 0x0804, 0xc68c, 0x080c, 0xb5f1,\r
-+      0x0804, 0xc68c, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xceca, 0x00de,\r
-+      0x0118, 0x080c, 0xabed, 0x00f0, 0x6004, 0x8007, 0x6134, 0x918c,\r
-+      0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,\r
-+      0x0002, 0x603c, 0x600a, 0x2001, 0x1987, 0x2004, 0x601a, 0x602c,\r
-+      0x2c08, 0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, 0x2009, 0x8020,\r
-+      0x080c, 0x921e, 0x0005, 0x00de, 0x00ce, 0x080c, 0xb5b5, 0x080c,\r
-+      0x31e7, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x321c, 0x6017,\r
-+      0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x604b, 0x0000, 0x012e,\r
-+      0x00ee, 0x0005, 0x080c, 0xb029, 0x1904, 0xc732, 0x0005, 0x6000,\r
-+      0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x0096, 0x00d6, 0x001b, 0x00de,\r
-+      0x009e, 0x0005, 0xc79a, 0xc79a, 0xc79a, 0xc79a, 0xc79a, 0xc79a,\r
-+      0xc79a, 0xc79a, 0xc79a, 0xc556, 0xc79a, 0xc55b, 0xc79c, 0xc55b,\r
-+      0xc7a9, 0xc79a, 0x080c, 0x0d7d, 0x6004, 0x9086, 0x008b, 0x0148,\r
-+      0x6007, 0x008b, 0x6003, 0x000d, 0x2009, 0x8020, 0x080c, 0x921e,\r
-+      0x0005, 0x080c, 0xcf46, 0x0118, 0x080c, 0xcf59, 0x0010, 0x080c,\r
-+      0xcf67, 0x080c, 0xca27, 0x080c, 0xc838, 0x0570, 0x080c, 0x31e7,\r
-+      0x080c, 0xc838, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103, 0xa87b,\r
-+      0x0006, 0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c, 0x6d80,\r
-+      0x2c68, 0x080c, 0xab97, 0x0150, 0x6810, 0x6012, 0x080c, 0xcccc,\r
-+      0x00c6, 0x2d60, 0x080c, 0xac28, 0x00ce, 0x0008, 0x2d60, 0x6017,\r
-+      0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c,\r
-+      0x9225, 0x080c, 0x96a0, 0x00c8, 0x080c, 0xcf46, 0x0138, 0x6034,\r
-+      0x9086, 0x4000, 0x1118, 0x080c, 0x31e7, 0x08d0, 0x6034, 0x908c,\r
-+      0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,\r
-+      0x080c, 0x31e7, 0x0868, 0x080c, 0xac28, 0x0005, 0x6000, 0x908a,\r
-+      0x0016, 0x1a0c, 0x0d7d, 0x0002, 0xc814, 0xc814, 0xc816, 0xc816,\r
-+      0xc816, 0xc814, 0xc814, 0xac28, 0xc814, 0xc814, 0xc814, 0xc814,\r
-+      0xc814, 0xc814, 0xc814, 0xc814, 0x080c, 0x0d7d, 0x080c, 0xa896,\r
-+      0x080c, 0xaa2a, 0x080c, 0xa8b2, 0x6114, 0x0096, 0x2148, 0xa87b,\r
-+      0x0006, 0x080c, 0x6d80, 0x009e, 0x0804, 0xabed, 0x9284, 0x0003,\r
-+      0x1158, 0x9282, 0x1ddc, 0x0240, 0x2001, 0x181a, 0x2004, 0x9202,\r
-+      0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028,\r
-+      0x0096, 0x0006, 0x6014, 0x2048, 0x000e, 0x0006, 0x9984, 0xf000,\r
-+      0x9086, 0xf000, 0x0110, 0x080c, 0x10e5, 0x000e, 0x009e, 0x0005,\r
-+      0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061,\r
-+      0x1ddc, 0x2071, 0x1800, 0x7354, 0x7074, 0x9302, 0x1640, 0x6020,\r
-+      0x9206, 0x11f8, 0x080c, 0xcf52, 0x0180, 0x9286, 0x0001, 0x1168,\r
-+      0x6004, 0x9086, 0x0004, 0x1148, 0x080c, 0x31e7, 0x080c, 0xcf67,\r
-+      0x00c6, 0x080c, 0xac28, 0x00ce, 0x0060, 0x080c, 0xcc3e, 0x0148,\r
-+      0x080c, 0xca4d, 0x1110, 0x080c, 0xb5b5, 0x00c6, 0x080c, 0xabed,\r
-+      0x00ce, 0x9ce0, 0x001c, 0x7068, 0x9c02, 0x1208, 0x08a0, 0x012e,\r
-+      0x000e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016,\r
-+      0x9188, 0x1000, 0x210c, 0x81ff, 0x0128, 0x2061, 0x1b32, 0x6112,\r
-+      0x080c, 0x31e7, 0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce,\r
-+      0x00ee, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xab97,\r
-+      0x01b0, 0x665e, 0x2b00, 0x6012, 0x080c, 0x56e2, 0x0118, 0x080c,\r
-+      0xc969, 0x0168, 0x080c, 0xcccc, 0x6023, 0x0003, 0x2009, 0x004b,\r
-+      0x080c, 0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,\r
-+      0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0, 0x080c, 0xac5f,\r
-+      0x0580, 0x605f, 0x0000, 0x2b00, 0x6012, 0x080c, 0xcccc, 0x6023,\r
-+      0x0003, 0x0016, 0x080c, 0xa896, 0x080c, 0x93a5, 0x0076, 0x903e,\r
-+      0x080c, 0x9277, 0x2c08, 0x080c, 0xdfeb, 0x007e, 0x080c, 0xa8b2,\r
-+      0x001e, 0xd184, 0x0128, 0x080c, 0xabed, 0x9085, 0x0001, 0x0070,\r
-+      0x080c, 0x56e2, 0x0128, 0xd18c, 0x1170, 0x080c, 0xc969, 0x0148,\r
-+      0x2009, 0x004c, 0x080c, 0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce,\r
-+      0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, 0x004d,\r
-+      0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c,\r
-+      0xab97, 0x2c78, 0x0590, 0x7e5e, 0x2b00, 0x7812, 0x7823, 0x0003,\r
-+      0x2021, 0x0005, 0x080c, 0xc97b, 0x9186, 0x004d, 0x0118, 0x9186,\r
-+      0x004e, 0x0148, 0x2001, 0x1980, 0x200c, 0xd1fc, 0x0168, 0x2f60,\r
-+      0x080c, 0xabed, 0x00d0, 0x2001, 0x197f, 0x200c, 0xd1fc, 0x0120,\r
-+      0x2f60, 0x080c, 0xabed, 0x0088, 0x2f60, 0x080c, 0x56e2, 0x0138,\r
-+      0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, 0x001e,\r
-+      0x0016, 0x080c, 0xac8c, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce,\r
-+      0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0xab97, 0x2c78,\r
-+      0x0508, 0x7e5e, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, 0x2021,\r
-+      0x0004, 0x0489, 0x009e, 0x2001, 0x197e, 0x200c, 0xd1fc, 0x0120,\r
-+      0x2f60, 0x080c, 0xabed, 0x0060, 0x2f60, 0x080c, 0x56e2, 0x0120,\r
-+      0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, 0xac8c,\r
-+      0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816,\r
-+      0x0c98, 0x00c6, 0x080c, 0x4aa7, 0x00ce, 0x1120, 0x080c, 0xabed,\r
-+      0x9006, 0x0005, 0xa867, 0x0000, 0xa86b, 0x8000, 0x2900, 0x6016,\r
-+      0x9085, 0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0xa896, 0x080c, 0x6804, 0x0158, 0x2001, 0xc982, 0x0006,\r
-+      0x900e, 0x2400, 0x080c, 0x6fc0, 0x080c, 0x6d80, 0x000e, 0x0807,\r
-+      0x2418, 0x080c, 0x95a4, 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039,\r
-+      0x0001, 0x2608, 0x080c, 0x93bf, 0x008e, 0x080c, 0x9277, 0x2f08,\r
-+      0x2648, 0x080c, 0xdfeb, 0xb93c, 0x81ff, 0x090c, 0x9496, 0x080c,\r
-+      0xa8b2, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091,\r
-+      0x8000, 0x080c, 0xab97, 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c,\r
-+      0xcccc, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f, 0x080c,\r
-+      0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,\r
-+      0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xac5f, 0x01b8, 0x660a,\r
-+      0x2b08, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0008, 0x2900, 0x6016,\r
-+      0x00f6, 0x2c78, 0x080c, 0x1731, 0x00fe, 0x2009, 0x0021, 0x080c,\r
-+      0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,\r
-+      0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000, 0x080c,\r
-+      0xab97, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xcccc, 0x6023,\r
-+      0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0xac8c, 0x9085,\r
-+      0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6,\r
-+      0x0126, 0x2091, 0x8000, 0x080c, 0xac5f, 0x0188, 0x2b08, 0x6112,\r
-+      0x080c, 0xcccc, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0000,\r
-+      0x080c, 0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,\r
-+      0x0cd8, 0x2009, 0x0044, 0x0830, 0x2009, 0x0049, 0x0818, 0x0026,\r
-+      0x00b6, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0118, 0x8211, 0xba3e,\r
-+      0x1140, 0xb8d0, 0x9005, 0x0128, 0xb888, 0x9005, 0x1110, 0xb88b,\r
-+      0x0001, 0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e,\r
-+      0x0002, 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004, 0x0110,\r
-+      0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0096, 0x6020,\r
-+      0x9086, 0x0004, 0x0190, 0x6014, 0x904d, 0x080c, 0xc838, 0x0168,\r
-+      0xa864, 0x9086, 0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128,\r
-+      0xa868, 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e,\r
-+      0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xac5f,\r
-+      0x0198, 0x2b08, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0001, 0x2900,\r
-+      0x6016, 0x080c, 0x31e7, 0x2009, 0x0028, 0x080c, 0xac8c, 0x9085,\r
-+      0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015,\r
-+      0x11a8, 0x2011, 0x1824, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6,\r
-+      0x080c, 0xb807, 0x00be, 0x080c, 0xba2a, 0x6003, 0x0001, 0x6007,\r
-+      0x0029, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0078, 0x6014, 0x0096,\r
-+      0x2048, 0xa868, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c,\r
-+      0xce8b, 0x080c, 0xb5b5, 0x080c, 0xabed, 0x0005, 0x0096, 0x6014,\r
-+      0x904d, 0x090c, 0x0d7d, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,\r
-+      0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x6d80, 0x012e, 0x009e, 0x080c, 0xabed, 0x0c30, 0x0096,\r
-+      0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x6575, 0x00e8,\r
-+      0x9186, 0x0015, 0x1510, 0x2011, 0x1824, 0x2204, 0x9086, 0x0014,\r
-+      0x11e0, 0x6010, 0x00b6, 0x2058, 0x080c, 0x66c0, 0x00be, 0x080c,\r
-+      0xbafb, 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005,\r
-+      0x0160, 0x2001, 0x0006, 0x080c, 0x6575, 0x6014, 0x2048, 0xa868,\r
-+      0xd0fc, 0x0170, 0x080c, 0xaffd, 0x0048, 0x6014, 0x2048, 0xa868,\r
-+      0xd0fc, 0x0528, 0x080c, 0xb5b5, 0x080c, 0xabed, 0x009e, 0x0005,\r
-+      0x6014, 0x6310, 0x2358, 0x904d, 0x090c, 0x0d7d, 0xa87b, 0x0000,\r
-+      0xa883, 0x0000, 0xa897, 0x4000, 0x900e, 0x080c, 0x6914, 0x1108,\r
-+      0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091,\r
-+      0x8000, 0x080c, 0x6d80, 0x012e, 0x080c, 0xabed, 0x08f8, 0x6014,\r
-+      0x904d, 0x090c, 0x0d7d, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,\r
-+      0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000,\r
-+      0x080c, 0x6d80, 0x012e, 0x080c, 0xabed, 0x0840, 0xa878, 0x9086,\r
-+      0x0005, 0x1108, 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005,\r
-+      0x604b, 0x0000, 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050,\r
-+      0x2009, 0x8023, 0x080c, 0x921e, 0x0005, 0x00c6, 0x6010, 0x00b6,\r
-+      0x2058, 0xb800, 0x00be, 0xd0bc, 0x0130, 0x0066, 0x6020, 0x9084,\r
-+      0x000f, 0x001b, 0x006e, 0x00ce, 0x0005, 0xc556, 0xcb6f, 0xcb6f,\r
-+      0xcb72, 0xe318, 0xe333, 0xe336, 0xc556, 0xc556, 0xc556, 0xc556,\r
-+      0xc556, 0xc556, 0xc556, 0xc556, 0xc556, 0x080c, 0x0d7d, 0xa001,\r
-+      0xa001, 0x0005, 0x0096, 0x6014, 0x904d, 0x0118, 0xa87c, 0xd0e4,\r
-+      0x1110, 0x009e, 0x0010, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058,\r
-+      0xb800, 0x00be, 0xd0bc, 0x0550, 0x2001, 0x1834, 0x2004, 0x9005,\r
-+      0x1540, 0x00f6, 0x2c78, 0x080c, 0xab97, 0x0508, 0x7810, 0x6012,\r
-+      0x080c, 0xcccc, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808, 0x603a,\r
-+      0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a, 0x602e,\r
-+      0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x795c, 0x615e,\r
-+      0x2009, 0x8020, 0x080c, 0x921e, 0x2f60, 0x00fe, 0x0005, 0x2f60,\r
-+      0x00fe, 0x2001, 0x1988, 0x2004, 0x604a, 0x0005, 0x0016, 0x0096,\r
-+      0x6814, 0x2048, 0x681c, 0xd0fc, 0xc0fc, 0x681e, 0xa87c, 0x1108,\r
-+      0xd0e4, 0x0180, 0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000,\r
-+      0xa88f, 0x0000, 0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048,\r
-+      0x080c, 0x0fec, 0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803,\r
-+      0x0002, 0x9086, 0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0,\r
-+      0x681c, 0xc085, 0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085,\r
-+      0x0c00, 0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0,\r
-+      0x693c, 0x9103, 0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc,\r
-+      0x683a, 0x6032, 0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112,\r
-+      0x695c, 0x615e, 0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001,\r
-+      0x2009, 0x8020, 0x080c, 0x921e, 0x009e, 0x001e, 0x0005, 0x6024,\r
-+      0xd0d4, 0x0510, 0xd0f4, 0x11f8, 0x6038, 0x940a, 0x603c, 0x9303,\r
-+      0x0230, 0x9105, 0x0120, 0x6024, 0xc0d4, 0xc0f5, 0x0098, 0x643a,\r
-+      0x633e, 0xac3e, 0xab42, 0x0046, 0x0036, 0x2400, 0xacac, 0x9402,\r
-+      0xa836, 0x2300, 0xabb0, 0x9303, 0xa83a, 0x003e, 0x004e, 0x6024,\r
-+      0xc0d4, 0x0000, 0x6026, 0x0005, 0xd0f4, 0x1138, 0xa83c, 0x603a,\r
-+      0xa840, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x0005, 0x0006, 0x0016,\r
-+      0x6004, 0x908e, 0x0034, 0x01b8, 0x908e, 0x0035, 0x01a0, 0x908e,\r
-+      0x0036, 0x0188, 0x908e, 0x0037, 0x0170, 0x908e, 0x0038, 0x0158,\r
-+      0x908e, 0x0039, 0x0140, 0x908e, 0x003a, 0x0128, 0x908e, 0x003b,\r
-+      0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016,\r
-+      0x0026, 0x0036, 0x00e6, 0x2001, 0x1982, 0x200c, 0x8000, 0x2014,\r
-+      0x2001, 0x0032, 0x080c, 0x9166, 0x2001, 0x1986, 0x82ff, 0x1110,\r
-+      0x2011, 0x0014, 0x2202, 0x2001, 0x1984, 0x200c, 0x8000, 0x2014,\r
-+      0x2071, 0x196c, 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x9166,\r
-+      0x2001, 0x1987, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,\r
-+      0x1988, 0x9288, 0x000a, 0x2102, 0x2001, 0x0017, 0x080c, 0xa887,\r
-+      0x2001, 0x1a89, 0x2102, 0x2001, 0x0032, 0x080c, 0x1679, 0x080c,\r
-+      0x6a4c, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006,\r
-+      0x0016, 0x00e6, 0x2001, 0x1986, 0x2003, 0x0028, 0x2001, 0x1987,\r
-+      0x2003, 0x0014, 0x2071, 0x196c, 0x701b, 0x0000, 0x701f, 0x07d0,\r
-+      0x2001, 0x1988, 0x2009, 0x001e, 0x2102, 0x2001, 0x0017, 0x080c,\r
-+      0xa887, 0x2001, 0x1a89, 0x2102, 0x2001, 0x0032, 0x080c, 0x1679,\r
-+      0x00ee, 0x001e, 0x000e, 0x0005, 0x0096, 0x6060, 0x904d, 0x0110,\r
-+      0x080c, 0x106c, 0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091,\r
-+      0x8000, 0x080c, 0xab97, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023,\r
-+      0x0001, 0x2900, 0x6016, 0x2009, 0x0033, 0x080c, 0xac8c, 0x9085,\r
-+      0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6,\r
-+      0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1500, 0x7090, 0x9086,\r
-+      0x0018, 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78,\r
-+      0x080c, 0x975f, 0x01d8, 0x707c, 0xaa50, 0x9206, 0x1160, 0x7080,\r
-+      0xaa54, 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be,\r
-+      0x900e, 0x080c, 0x323c, 0x080c, 0xaffd, 0x0020, 0x080c, 0xb5b5,\r
-+      0x080c, 0xabed, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa54,\r
-+      0x9206, 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,\r
-+      0xab97, 0x0188, 0x2b08, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0001,\r
-+      0x2900, 0x6016, 0x2009, 0x004d, 0x080c, 0xac8c, 0x9085, 0x0001,\r
-+      0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,\r
-+      0x8000, 0x0016, 0x080c, 0xab97, 0x0180, 0x2b08, 0x6112, 0x080c,\r
-+      0xcccc, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0xac8c,\r
-+      0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0,\r
-+      0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6,\r
-+      0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x7190, 0x6014,\r
-+      0x2048, 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001,\r
-+      0x19a0, 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906,\r
-+      0x8006, 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080,\r
-+      0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016, 0x200c, 0x080c, 0xd565,\r
-+      0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048,\r
-+      0xa867, 0x0103, 0x0010, 0x080c, 0xb5b5, 0x080c, 0xabed, 0x00fe,\r
-+      0x00ee, 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,\r
-+      0x0005, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,\r
-+      0x11b8, 0x7090, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78,\r
-+      0x080c, 0x975f, 0x01a8, 0x707c, 0xaa74, 0x9206, 0x1130, 0x7080,\r
-+      0xaa78, 0x9206, 0x1110, 0x080c, 0x31e7, 0x080c, 0xaffd, 0x0020,\r
-+      0x080c, 0xb5b5, 0x080c, 0xabed, 0x00fe, 0x00ee, 0x009e, 0x0005,\r
-+      0x7060, 0xaa78, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6,\r
-+      0x2071, 0x1800, 0x9186, 0x0015, 0x1550, 0x7090, 0x9086, 0x0004,\r
-+      0x1530, 0x6014, 0x2048, 0x2c78, 0x080c, 0x975f, 0x05f0, 0x707c,\r
-+      0xaacc, 0x9206, 0x1180, 0x7080, 0xaad0, 0x9206, 0x1160, 0x080c,\r
-+      0x31e7, 0x0016, 0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c,\r
-+      0x5692, 0x001e, 0x0010, 0x080c, 0x547b, 0x080c, 0xc838, 0x0508,\r
-+      0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c,\r
-+      0xc838, 0x01b8, 0x6014, 0x2048, 0x080c, 0x547b, 0x1d70, 0xa87b,\r
-+      0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126,\r
-+      0x2091, 0x8000, 0xa867, 0x0139, 0x080c, 0x6d80, 0x012e, 0x080c,\r
-+      0xabed, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaad0, 0x9206,\r
-+      0x0930, 0x0888, 0x0016, 0x0026, 0xa87c, 0xd0ac, 0x0178, 0xa938,\r
-+      0xaa34, 0x2100, 0x9205, 0x0150, 0xa890, 0x9106, 0x1118, 0xa88c,\r
-+      0x9206, 0x0120, 0xa992, 0xaa8e, 0x9085, 0x0001, 0x002e, 0x001e,\r
-+      0x0005, 0x00b6, 0x00d6, 0x0036, 0x080c, 0xc838, 0x0904, 0xce87,\r
-+      0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580,\r
-+      0x6310, 0x00c6, 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140,\r
-+      0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,\r
-+      0xaa96, 0xa99a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080,\r
-+      0x0031, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098,\r
-+      0x080c, 0x0fb7, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0,\r
-+      0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0fb7, 0x00ce, 0x0090,\r
-+      0xaa96, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016,\r
-+      0x0110, 0xa89b, 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084,\r
-+      0x00ff, 0xa89e, 0x080c, 0x6d74, 0x6017, 0x0000, 0x009e, 0x003e,\r
-+      0x00de, 0x00be, 0x0005, 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096,\r
-+      0x00f6, 0x6214, 0x2248, 0x6210, 0x2258, 0x2079, 0x0260, 0x9096,\r
-+      0x0000, 0x11a0, 0xb814, 0x9084, 0x00ff, 0x900e, 0x080c, 0x25fb,\r
-+      0x2118, 0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d,\r
-+      0x7c3c, 0x2011, 0x8018, 0x080c, 0x4b07, 0x00a8, 0x9096, 0x0001,\r
-+      0x1148, 0x89ff, 0x0180, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c,\r
-+      0xa8aa, 0x0048, 0x9096, 0x0002, 0x1130, 0xa89b, 0x000d, 0x7838,\r
-+      0xa8a6, 0x783c, 0xa8aa, 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e,\r
-+      0x002e, 0x0005, 0x00c6, 0x0026, 0x0016, 0x9186, 0x0035, 0x0110,\r
-+      0x6a38, 0x0008, 0x6a2c, 0x080c, 0xc826, 0x01f0, 0x2260, 0x6120,\r
-+      0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x1190, 0x6838, 0x9206,\r
-+      0x0140, 0x683c, 0x9206, 0x1160, 0x6108, 0x6838, 0x9106, 0x1140,\r
-+      0x0020, 0x6008, 0x693c, 0x9106, 0x1118, 0x6010, 0x6910, 0x9106,\r
-+      0x001e, 0x002e, 0x00ce, 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa974,\r
-+      0xd1cc, 0x0188, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1160, 0xa9a8,\r
-+      0x918c, 0x0f00, 0x810f, 0x918e, 0x0001, 0x1128, 0xa834, 0xa938,\r
-+      0x9115, 0x190c, 0xbeb3, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010,\r
-+      0x0036, 0x901e, 0x0499, 0x01e0, 0x080c, 0xc838, 0x01c8, 0x080c,\r
-+      0xca27, 0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048,\r
-+      0xa87c, 0x080c, 0xca4d, 0x1118, 0x080c, 0xb5b5, 0x0040, 0xa867,\r
-+      0x0103, 0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6d80, 0x009e,\r
-+      0x003e, 0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec,\r
-+      0xa882, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b,\r
-+      0x0005, 0x080c, 0xcb3c, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810,\r
-+      0x2004, 0xd0ec, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4,\r
-+      0x000e, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e,\r
-+      0x0005, 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be,\r
-+      0x2021, 0x0007, 0x080c, 0x4cbe, 0x004e, 0x003e, 0x0005, 0x0c51,\r
-+      0x1d81, 0x0005, 0x2001, 0x1986, 0x2004, 0x601a, 0x0005, 0x2001,\r
-+      0x1988, 0x2004, 0x604a, 0x0005, 0x080c, 0xabed, 0x0804, 0x96a0,\r
-+      0x611c, 0xd1fc, 0xa97c, 0x1108, 0xd1e4, 0x0005, 0x601c, 0xd0fc,\r
-+      0xa87c, 0x1108, 0xd0e4, 0x0005, 0x601c, 0xd0fc, 0xc0fc, 0x601e,\r
-+      0xa87c, 0x1108, 0xd0e4, 0x0005, 0x6044, 0xd0fc, 0x0160, 0xd0dc,\r
-+      0x1128, 0x908c, 0x000f, 0x9186, 0x0005, 0x1118, 0x6003, 0x0003,\r
-+      0x0010, 0x6003, 0x0001, 0x0005, 0x00b6, 0x0066, 0x6000, 0x90b2,\r
-+      0x0016, 0x1a0c, 0x0d7d, 0x001b, 0x006e, 0x00be, 0x0005, 0xcfb7,\r
-+      0xd6c0, 0xd811, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfee,\r
-+      0xd893, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0x080c,\r
-+      0x0d7d, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d, 0x0013,\r
-+      0x006e, 0x0005, 0xcfd2, 0xddaa, 0xcfd2, 0xcfd2, 0xcfd2, 0xcfd2,\r
-+      0xcfd2, 0xcfd2, 0xdd59, 0xddfc, 0xcfd2, 0xe453, 0xe487, 0xe453,\r
-+      0xe487, 0xcfd2, 0x080c, 0x0d7d, 0x6000, 0x9082, 0x0016, 0x1a0c,\r
-+      0x0d7d, 0x6000, 0x000a, 0x0005, 0xcfec, 0xda6f, 0xdb38, 0xdb5a,\r
-+      0xdbd5, 0xcfec, 0xdccf, 0xdc5d, 0xd89d, 0xdd31, 0xdd46, 0xcfec,\r
-+      0xcfec, 0xcfec, 0xcfec, 0xcfec, 0x080c, 0x0d7d, 0x91b2, 0x0053,\r
-+      0x1a0c, 0x0d7d, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xd436, 0x0002,\r
-+      0xd038, 0xd227, 0xd038, 0xd038, 0xd038, 0xd230, 0xd038, 0xd038,\r
-+      0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038,\r
-+      0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd03a,\r
-+      0xd0a1, 0xd0b0, 0xd114, 0xd13f, 0xd1b8, 0xd212, 0xd038, 0xd038,\r
-+      0xd233, 0xd038, 0xd038, 0xd248, 0xd255, 0xd038, 0xd038, 0xd038,\r
-+      0xd038, 0xd038, 0xd2d8, 0xd038, 0xd038, 0xd2ec, 0xd038, 0xd038,\r
-+      0xd2a7, 0xd038, 0xd038, 0xd038, 0xd304, 0xd038, 0xd038, 0xd038,\r
-+      0xd381, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd3fe,\r
-+      0x080c, 0x0d7d, 0x080c, 0x6a29, 0x1150, 0x2001, 0x1837, 0x2004,\r
-+      0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007,\r
-+      0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xd220, 0x080c,\r
-+      0x69c5, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258,\r
-+      0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0xa896, 0x080c, 0x93a5,\r
-+      0x0076, 0x903e, 0x080c, 0x9277, 0x2c08, 0x080c, 0xdfeb, 0x007e,\r
-+      0x001e, 0x080c, 0xa8b2, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee,\r
-+      0x6610, 0x2658, 0x080c, 0x6634, 0xbe04, 0x9684, 0x00ff, 0x9082,\r
-+      0x0006, 0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0,\r
-+      0x00be, 0x2c08, 0x080c, 0xe6b0, 0x002e, 0x001e, 0x1178, 0x080c,\r
-+      0xdf19, 0x1904, 0xd10c, 0x080c, 0xdeb5, 0x1120, 0x6007, 0x0008,\r
-+      0x0804, 0xd220, 0x6007, 0x0009, 0x0804, 0xd220, 0x080c, 0xe14c,\r
-+      0x0128, 0x080c, 0xdf19, 0x0d78, 0x0804, 0xd10c, 0x6017, 0x1900,\r
-+      0x0c88, 0x080c, 0x3332, 0x1904, 0xd433, 0x6106, 0x080c, 0xde66,\r
-+      0x6007, 0x0006, 0x0804, 0xd220, 0x6007, 0x0007, 0x0804, 0xd220,\r
-+      0x080c, 0xe4c3, 0x1904, 0xd433, 0x080c, 0x3332, 0x1904, 0xd433,\r
-+      0x00d6, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006,\r
-+      0x1220, 0x2001, 0x0001, 0x080c, 0x6561, 0x96b4, 0xff00, 0x8637,\r
-+      0x9686, 0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4,\r
-+      0x00ff, 0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686,\r
-+      0x0005, 0x0110, 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034,\r
-+      0x9084, 0x0003, 0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030,\r
-+      0x9084, 0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007,\r
-+      0x00b0, 0x00ee, 0x080c, 0xdf81, 0x1190, 0x9686, 0x0006, 0x1140,\r
-+      0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x323c, 0x002e,\r
-+      0x080c, 0x66c0, 0x6007, 0x000a, 0x00de, 0x0804, 0xd220, 0x6007,\r
-+      0x000b, 0x00de, 0x0804, 0xd220, 0x080c, 0x31e7, 0x080c, 0xcf67,\r
-+      0x6007, 0x0001, 0x0804, 0xd220, 0x080c, 0xe4c3, 0x1904, 0xd433,\r
-+      0x080c, 0x3332, 0x1904, 0xd433, 0x2071, 0x0260, 0x7034, 0x90b4,\r
-+      0x0003, 0x1948, 0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003,\r
-+      0x1910, 0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026,\r
-+      0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x323c, 0x002e, 0x6007,\r
-+      0x000c, 0x2001, 0x0001, 0x080c, 0xe690, 0x0804, 0xd220, 0x080c,\r
-+      0x6a29, 0x1140, 0x2001, 0x1837, 0x2004, 0x9084, 0x0009, 0x9086,\r
-+      0x0008, 0x1110, 0x0804, 0xd047, 0x080c, 0x69c5, 0x6610, 0x2658,\r
-+      0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x06c8, 0x1138, 0x0026,\r
-+      0x2001, 0x0006, 0x080c, 0x65a1, 0x002e, 0x0050, 0x96b4, 0xff00,\r
-+      0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xd10c,\r
-+      0x080c, 0xdf8e, 0x1120, 0x6007, 0x000e, 0x0804, 0xd220, 0x0046,\r
-+      0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x31e7, 0x080c, 0xcf67,\r
-+      0x004e, 0x0016, 0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0148,\r
-+      0x2009, 0x0029, 0x080c, 0xe2c9, 0x6010, 0x2058, 0xb800, 0xc0e5,\r
-+      0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xd220, 0x2001,\r
-+      0x0001, 0x080c, 0x6561, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9,\r
-+      0x0004, 0x2019, 0x1805, 0x2011, 0x0270, 0x080c, 0xbbae, 0x003e,\r
-+      0x002e, 0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637,\r
-+      0x9682, 0x0004, 0x0a04, 0xd10c, 0x9682, 0x0007, 0x0a04, 0xd168,\r
-+      0x0804, 0xd10c, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xd220,\r
-+      0x080c, 0x6a29, 0x1140, 0x2001, 0x1837, 0x2004, 0x9084, 0x0009,\r
-+      0x9086, 0x0008, 0x1110, 0x0804, 0xd047, 0x080c, 0x69c5, 0x6610,\r
-+      0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x0698, 0x0150,\r
-+      0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006,\r
-+      0x1904, 0xd10c, 0x080c, 0xdfbc, 0x1130, 0x080c, 0xdeb5, 0x1118,\r
-+      0x6007, 0x0010, 0x04e8, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046,\r
-+      0x080c, 0x31e7, 0x080c, 0xcf67, 0x004e, 0x0016, 0x9006, 0x2009,\r
-+      0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xe2c9,\r
-+      0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007,\r
-+      0x0001, 0x00f0, 0x080c, 0xe14c, 0x0140, 0x96b4, 0xff00, 0x8637,\r
-+      0x9686, 0x0006, 0x0978, 0x0804, 0xd10c, 0x6017, 0x1900, 0x6007,\r
-+      0x0009, 0x0070, 0x080c, 0x3332, 0x1904, 0xd433, 0x080c, 0xe4c3,\r
-+      0x1904, 0xd433, 0x080c, 0xd600, 0x1904, 0xd10c, 0x6007, 0x0012,\r
-+      0x6003, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x6007,\r
-+      0x0001, 0x6003, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0cb0,\r
-+      0x6007, 0x0005, 0x0c68, 0x080c, 0xe4c3, 0x1904, 0xd433, 0x080c,\r
-+      0x3332, 0x1904, 0xd433, 0x080c, 0xd600, 0x1904, 0xd10c, 0x6007,\r
-+      0x0020, 0x6003, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0005,\r
-+      0x080c, 0x3332, 0x1904, 0xd433, 0x6007, 0x0023, 0x6003, 0x0001,\r
-+      0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x080c, 0xe4c3, 0x1904,\r
-+      0xd433, 0x080c, 0x3332, 0x1904, 0xd433, 0x080c, 0xd600, 0x1904,\r
-+      0xd10c, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7244, 0x9286,\r
-+      0xffff, 0x0180, 0x2c08, 0x080c, 0xc826, 0x01b0, 0x2260, 0x7240,\r
-+      0x6008, 0x9206, 0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206,\r
-+      0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006, 0x080c, 0xe293, 0x1180,\r
-+      0x7244, 0x9286, 0xffff, 0x01b0, 0x2160, 0x6007, 0x0026, 0x6017,\r
-+      0x1700, 0x7214, 0x9296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068,\r
-+      0x6020, 0x9086, 0x0007, 0x1d80, 0x6004, 0x9086, 0x0024, 0x1110,\r
-+      0x080c, 0xabed, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c,\r
-+      0x9225, 0x080c, 0x96a0, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001,\r
-+      0x0001, 0x080c, 0x6561, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9,\r
-+      0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xbbae, 0x003e,\r
-+      0x002e, 0x001e, 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xd220,\r
-+      0x080c, 0xb81f, 0x080c, 0x74e9, 0x1190, 0x0006, 0x0026, 0x0036,\r
-+      0x080c, 0x7503, 0x1138, 0x080c, 0x77ed, 0x080c, 0x6029, 0x080c,\r
-+      0x741a, 0x0010, 0x080c, 0x74bd, 0x003e, 0x002e, 0x000e, 0x0005,\r
-+      0x080c, 0x3332, 0x1904, 0xd433, 0x080c, 0xd600, 0x1904, 0xd10c,\r
-+      0x6106, 0x080c, 0xd61c, 0x1120, 0x6007, 0x002b, 0x0804, 0xd220,\r
-+      0x6007, 0x002c, 0x0804, 0xd220, 0x080c, 0xe4c3, 0x1904, 0xd433,\r
-+      0x080c, 0x3332, 0x1904, 0xd433, 0x080c, 0xd600, 0x1904, 0xd10c,\r
-+      0x6106, 0x080c, 0xd621, 0x1120, 0x6007, 0x002e, 0x0804, 0xd220,\r
-+      0x6007, 0x002f, 0x0804, 0xd220, 0x080c, 0x3332, 0x1904, 0xd433,\r
-+      0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058, 0xb904, 0x9184, 0x00ff,\r
-+      0x9086, 0x0006, 0x0158, 0x9184, 0xff00, 0x8007, 0x9086, 0x0006,\r
-+      0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804, 0xd227, 0x080c, 0x56de,\r
-+      0xd0e4, 0x0904, 0xd37e, 0x2071, 0x026c, 0x7010, 0x603a, 0x7014,\r
-+      0x603e, 0x7108, 0x720c, 0x080c, 0x6a67, 0x0140, 0x6010, 0x2058,\r
-+      0xb810, 0x9106, 0x1118, 0xb814, 0x9206, 0x0510, 0x080c, 0x6a63,\r
-+      0x15b8, 0x2069, 0x1800, 0x6880, 0x9206, 0x1590, 0x687c, 0x9106,\r
-+      0x1578, 0x7210, 0x080c, 0xc826, 0x0590, 0x080c, 0xd4eb, 0x0578,\r
-+      0x080c, 0xe345, 0x0560, 0x622e, 0x6007, 0x0036, 0x6003, 0x0001,\r
-+      0x2009, 0x8020, 0x080c, 0x921e, 0x00ce, 0x00de, 0x00ee, 0x0005,\r
-+      0x7214, 0x9286, 0xffff, 0x0150, 0x080c, 0xc826, 0x01c0, 0x9280,\r
-+      0x0002, 0x2004, 0x7110, 0x9106, 0x1190, 0x08e0, 0x7210, 0x2c08,\r
-+      0x9085, 0x0001, 0x080c, 0xe293, 0x2c10, 0x2160, 0x0140, 0x0890,\r
-+      0x6007, 0x0037, 0x602f, 0x0009, 0x6017, 0x1500, 0x08b8, 0x6007,\r
-+      0x0037, 0x602f, 0x0003, 0x6017, 0x1700, 0x0880, 0x6007, 0x0012,\r
-+      0x0868, 0x080c, 0x3332, 0x1904, 0xd433, 0x6010, 0x2058, 0xb804,\r
-+      0x9084, 0xff00, 0x8007, 0x9086, 0x0006, 0x1904, 0xd227, 0x00e6,\r
-+      0x00d6, 0x00c6, 0x080c, 0x56de, 0xd0e4, 0x0904, 0xd3f6, 0x2069,\r
-+      0x1800, 0x2071, 0x026c, 0x7008, 0x603a, 0x720c, 0x623e, 0x9286,\r
-+      0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001, 0x080c,\r
-+      0xe293, 0x2c10, 0x00ce, 0x05e8, 0x080c, 0xc826, 0x05d0, 0x7108,\r
-+      0x9280, 0x0002, 0x2004, 0x9106, 0x15a0, 0x00c6, 0x0026, 0x2260,\r
-+      0x080c, 0xc436, 0x002e, 0x00ce, 0x7118, 0x918c, 0xff00, 0x810f,\r
-+      0x9186, 0x0001, 0x0178, 0x9186, 0x0005, 0x0118, 0x9186, 0x0007,\r
-+      0x1198, 0x9280, 0x0005, 0x2004, 0x9005, 0x0170, 0x080c, 0xd4eb,\r
-+      0x0904, 0xd377, 0x0056, 0x7510, 0x7614, 0x080c, 0xe35e, 0x005e,\r
-+      0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, 0x0009,\r
-+      0x6017, 0x2a00, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e,\r
-+      0x0c78, 0x6007, 0x003b, 0x602f, 0x0003, 0x6017, 0x0300, 0x6003,\r
-+      0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x0c10, 0x6007, 0x003b,\r
-+      0x602f, 0x000b, 0x6017, 0x0000, 0x0804, 0xd34e, 0x00e6, 0x0026,\r
-+      0x080c, 0x6a29, 0x0550, 0x080c, 0x69c5, 0x080c, 0xe535, 0x1518,\r
-+      0x2071, 0x1800, 0x70dc, 0x9085, 0x0003, 0x70de, 0x00f6, 0x2079,\r
-+      0x0100, 0x72b0, 0x9284, 0x00ff, 0x707e, 0x78e6, 0x9284, 0xff00,\r
-+      0x7280, 0x9205, 0x7082, 0x78ea, 0x00fe, 0x70e7, 0x0000, 0x080c,\r
-+      0x6a67, 0x0120, 0x2011, 0x1a09, 0x2013, 0x07d0, 0xd0ac, 0x1128,\r
-+      0x080c, 0x2fb2, 0x0010, 0x080c, 0xe567, 0x002e, 0x00ee, 0x080c,\r
-+      0xabed, 0x0804, 0xd226, 0x080c, 0xabed, 0x0005, 0x2600, 0x0002,\r
-+      0xd44a, 0xd47b, 0xd48c, 0xd44a, 0xd44a, 0xd44c, 0xd49d, 0xd44a,\r
-+      0xd44a, 0xd44a, 0xd469, 0xd44a, 0xd44a, 0xd44a, 0xd4a8, 0xd4b5,\r
-+      0xd4e6, 0xd44a, 0x080c, 0x0d7d, 0x080c, 0xe4c3, 0x1d20, 0x080c,\r
-+      0x3332, 0x1d08, 0x080c, 0xd600, 0x1148, 0x7038, 0x6016, 0x6007,\r
-+      0x0045, 0x6003, 0x0001, 0x080c, 0x9225, 0x0005, 0x080c, 0x31e7,\r
-+      0x080c, 0xcf67, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9225,\r
-+      0x0005, 0x080c, 0xe4c3, 0x1938, 0x080c, 0x3332, 0x1920, 0x080c,\r
-+      0xd600, 0x1d60, 0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001,\r
-+      0x080c, 0x9225, 0x0005, 0x080c, 0x3332, 0x1904, 0xd433, 0x2009,\r
-+      0x0041, 0x080c, 0xe570, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c,\r
-+      0x9225, 0x080c, 0x96a0, 0x0005, 0x080c, 0x3332, 0x1904, 0xd433,\r
-+      0x2009, 0x0042, 0x080c, 0xe570, 0x6007, 0x0047, 0x6003, 0x0001,\r
-+      0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x080c, 0x3332, 0x1904,\r
-+      0xd433, 0x2009, 0x0046, 0x080c, 0xe570, 0x080c, 0xabed, 0x0005,\r
-+      0x080c, 0xd508, 0x0904, 0xd433, 0x6007, 0x004e, 0x6003, 0x0001,\r
-+      0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x6007, 0x004f, 0x6017,\r
-+      0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001,\r
-+      0x1160, 0x7140, 0x2001, 0x19bd, 0x2004, 0x9106, 0x11b0, 0x7144,\r
-+      0x2001, 0x19be, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002, 0x1168,\r
-+      0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,\r
-+      0x000a, 0x080c, 0xbbc2, 0x009e, 0x0110, 0x6017, 0x0001, 0x6003,\r
-+      0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x6007, 0x0050,\r
-+      0x703c, 0x6016, 0x0ca0, 0x0016, 0x00e6, 0x2071, 0x0260, 0x00b6,\r
-+      0x00c6, 0x2260, 0x6010, 0x2058, 0xb8d4, 0xd084, 0x0150, 0x7128,\r
-+      0x6050, 0x9106, 0x1120, 0x712c, 0x604c, 0x9106, 0x0110, 0x9006,\r
-+      0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee, 0x001e, 0x0005,\r
-+      0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091,\r
-+      0x8000, 0x2071, 0x1800, 0x7090, 0x908a, 0x00f9, 0x16e8, 0x20e1,\r
-+      0x0000, 0x2001, 0x19a0, 0x2003, 0x0000, 0x080c, 0x1053, 0x05a0,\r
-+      0x2900, 0x6016, 0x7090, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0,\r
-+      0xa833, 0x001e, 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080,\r
-+      0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016, 0x200c, 0x0471, 0x001e,\r
-+      0x2940, 0x080c, 0x1053, 0x01c0, 0x2900, 0xa006, 0x2100, 0x81ff,\r
-+      0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080,\r
-+      0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016, 0x200c, 0x00b1, 0x001e,\r
-+      0x0000, 0x9085, 0x0001, 0x0048, 0x2071, 0x1800, 0x7093, 0x0000,\r
-+      0x6014, 0x2048, 0x080c, 0x0fec, 0x9006, 0x012e, 0x01de, 0x01ce,\r
-+      0x00ee, 0x008e, 0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026,\r
-+      0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8, 0x080c, 0x2189, 0x2099,\r
-+      0x026c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003,\r
-+      0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x2189, 0x2099,\r
-+      0x0260, 0x0ca8, 0x080c, 0x2189, 0x2061, 0x19a0, 0x6004, 0x2098,\r
-+      0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8,\r
-+      0x4003, 0x22a8, 0x8108, 0x080c, 0x2189, 0x2099, 0x0260, 0x0ca8,\r
-+      0x2061, 0x19a0, 0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006,\r
-+      0x0020, 0x2001, 0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021,\r
-+      0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e,\r
-+      0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8,\r
-+      0x080c, 0x21a1, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312,\r
-+      0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8,\r
-+      0x22a8, 0x8108, 0x080c, 0x21a1, 0x20a1, 0x0240, 0x0c98, 0x080c,\r
-+      0x21a1, 0x2061, 0x19a3, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312,\r
-+      0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138,\r
-+      0x22a8, 0x8108, 0x080c, 0x21a1, 0x20a1, 0x0240, 0x0c98, 0x2061,\r
-+      0x19a3, 0x2019, 0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020,\r
-+      0x2001, 0x0240, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296,\r
-+      0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,\r
-+      0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637,\r
-+      0x9686, 0x0006, 0x0170, 0x9686, 0x0004, 0x0158, 0xbe04, 0x96b4,\r
-+      0x00ff, 0x9686, 0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085,\r
-+      0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xd696, 0x00de,\r
-+      0x0005, 0x00d6, 0x080c, 0xd6a3, 0x1520, 0x680c, 0x908c, 0xff00,\r
-+      0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4,\r
-+      0x0130, 0x9006, 0x080c, 0xe690, 0x2009, 0x0001, 0x0078, 0xd1ec,\r
-+      0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x25fb, 0x1148,\r
-+      0x2001, 0x0001, 0x080c, 0xe690, 0x2110, 0x900e, 0x080c, 0x323c,\r
-+      0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6,\r
-+      0x00c6, 0x080c, 0xac5f, 0x0598, 0x0016, 0x0026, 0x00c6, 0x2011,\r
-+      0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x1568, 0x080c,\r
-+      0x65c4, 0x1550, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00,\r
-+      0x6012, 0x080c, 0xe4c3, 0x11c8, 0x080c, 0x3332, 0x11b0, 0x080c,\r
-+      0xd600, 0x0500, 0x2001, 0x0007, 0x080c, 0x6575, 0x2001, 0x0007,\r
-+      0x080c, 0x65a1, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,\r
-+      0x6003, 0x0001, 0x080c, 0x9225, 0x0010, 0x080c, 0xabed, 0x9085,\r
-+      0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0xabed, 0x00ce, 0x002e,\r
-+      0x001e, 0x0ca8, 0x080c, 0xabed, 0x9006, 0x0c98, 0x2069, 0x026d,\r
-+      0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, 0x0001,\r
-+      0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, 0x6808,\r
-+      0x9084, 0xff00, 0x9086, 0x0800, 0x1190, 0x6904, 0x9186, 0x0018,\r
-+      0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff,\r
-+      0x910d, 0x6162, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005,\r
-+      0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d7d, 0x91b6, 0x0013, 0x1130,\r
-+      0x2008, 0x91b2, 0x0040, 0x1a04, 0xd7e5, 0x0092, 0x91b6, 0x0027,\r
-+      0x0120, 0x91b6, 0x0014, 0x190c, 0x0d7d, 0x2001, 0x0007, 0x080c,\r
-+      0x65a1, 0x080c, 0x95de, 0x080c, 0xac28, 0x080c, 0x96a0, 0x0005,\r
-+      0xd720, 0xd722, 0xd720, 0xd720, 0xd720, 0xd722, 0xd72f, 0xd7e2,\r
-+      0xd77f, 0xd7e2, 0xd793, 0xd7e2, 0xd72f, 0xd7e2, 0xd7da, 0xd7e2,\r
-+      0xd7da, 0xd7e2, 0xd7e2, 0xd720, 0xd720, 0xd720, 0xd720, 0xd720,\r
-+      0xd720, 0xd720, 0xd720, 0xd720, 0xd720, 0xd720, 0xd722, 0xd720,\r
-+      0xd7e2, 0xd720, 0xd720, 0xd7e2, 0xd720, 0xd7df, 0xd7e2, 0xd720,\r
-+      0xd720, 0xd720, 0xd720, 0xd7e2, 0xd7e2, 0xd720, 0xd7e2, 0xd7e2,\r
-+      0xd720, 0xd72a, 0xd720, 0xd720, 0xd720, 0xd720, 0xd7de, 0xd7e2,\r
-+      0xd720, 0xd720, 0xd7e2, 0xd7e2, 0xd720, 0xd720, 0xd720, 0xd720,\r
-+      0x080c, 0x0d7d, 0x080c, 0xcf6a, 0x6003, 0x0002, 0x080c, 0x96a0,\r
-+      0x0804, 0xd7e4, 0x9006, 0x080c, 0x6561, 0x0804, 0xd7e2, 0x080c,\r
-+      0x6a63, 0x1904, 0xd7e2, 0x9006, 0x080c, 0x6561, 0x6010, 0x2058,\r
-+      0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0x1800, 0x78a8,\r
-+      0x8000, 0x78aa, 0x00fe, 0x0428, 0x6010, 0x2058, 0xb884, 0x9005,\r
-+      0x1178, 0x080c, 0xcf52, 0x1904, 0xd7e2, 0x0036, 0x0046, 0xbba0,\r
-+      0x2021, 0x0007, 0x080c, 0x4cbe, 0x004e, 0x003e, 0x0804, 0xd7e2,\r
-+      0x080c, 0x3363, 0x1904, 0xd7e2, 0x2001, 0x1800, 0x2004, 0x9086,\r
-+      0x0002, 0x1138, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa,\r
-+      0x00fe, 0x2001, 0x0002, 0x080c, 0x6575, 0x6023, 0x0001, 0x6003,\r
-+      0x0001, 0x6007, 0x0002, 0x080c, 0x9225, 0x080c, 0x96a0, 0x6110,\r
-+      0x2158, 0x2009, 0x0001, 0x080c, 0x864c, 0x0804, 0xd7e4, 0x6610,\r
-+      0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0904,\r
-+      0xd7e2, 0x9686, 0x0004, 0x0904, 0xd7e2, 0x080c, 0x8eca, 0x2001,\r
-+      0x0004, 0x0804, 0xd7e0, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,\r
-+      0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006,\r
-+      0x080c, 0x4cbe, 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xd7fe,\r
-+      0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637, 0x9686,\r
-+      0x0006, 0x006e, 0x0168, 0x2001, 0x0006, 0x080c, 0x65a1, 0x9284,\r
-+      0x00ff, 0x908e, 0x0007, 0x1120, 0x2001, 0x0006, 0x080c, 0x6575,\r
-+      0x080c, 0x6a63, 0x11f8, 0x2001, 0x1837, 0x2004, 0xd0a4, 0x01d0,\r
-+      0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0, 0x00f6, 0x2079,\r
-+      0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x0804, 0xd769, 0x2001,\r
-+      0x0004, 0x0030, 0x2001, 0x0006, 0x0409, 0x0020, 0x0018, 0x0010,\r
-+      0x080c, 0x65a1, 0x080c, 0xabed, 0x0005, 0x2600, 0x0002, 0xd7f9,\r
-+      0xd7f9, 0xd7f9, 0xd7f9, 0xd7f9, 0xd7fb, 0xd7f9, 0xd7fb, 0xd7f9,\r
-+      0xd7f9, 0xd7fb, 0xd7f9, 0xd7f9, 0xd7f9, 0xd7fb, 0xd7fb, 0xd7fb,\r
-+      0xd7fb, 0x080c, 0x0d7d, 0x080c, 0xabed, 0x0005, 0x0016, 0x00b6,\r
-+      0x00d6, 0x6110, 0x2158, 0xb900, 0xd184, 0x0138, 0x080c, 0x6575,\r
-+      0x9006, 0x080c, 0x6561, 0x080c, 0x321c, 0x00de, 0x00be, 0x001e,\r
-+      0x0005, 0x6610, 0x2658, 0xb804, 0x9084, 0xff00, 0x8007, 0x90b2,\r
-+      0x000c, 0x1a0c, 0x0d7d, 0x91b6, 0x0015, 0x1110, 0x003b, 0x0028,\r
-+      0x91b6, 0x0016, 0x190c, 0x0d7d, 0x006b, 0x0005, 0xb69e, 0xb69e,\r
-+      0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xd87d, 0xd83e, 0xb69e, 0xb69e,\r
-+      0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xb69e,\r
-+      0xd87d, 0xd884, 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0x00f6, 0x080c,\r
-+      0x6a63, 0x11d8, 0x080c, 0xcf52, 0x11c0, 0x6010, 0x905d, 0x01a8,\r
-+      0xb884, 0x9005, 0x0190, 0x9006, 0x080c, 0x6561, 0x2001, 0x0002,\r
-+      0x080c, 0x6575, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,\r
-+      0x080c, 0x9225, 0x080c, 0x96a0, 0x00f0, 0x2011, 0x0263, 0x2204,\r
-+      0x8211, 0x220c, 0x080c, 0x25fb, 0x11b0, 0x080c, 0x6625, 0x0118,\r
-+      0x080c, 0xabed, 0x0080, 0xb810, 0x0006, 0xb814, 0x0006, 0xb884,\r
-+      0x0006, 0x080c, 0x6043, 0x000e, 0xb886, 0x000e, 0xb816, 0x000e,\r
-+      0xb812, 0x080c, 0xabed, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e,\r
-+      0x1110, 0x080c, 0xabed, 0x0005, 0x080c, 0xba27, 0x1148, 0x6003,\r
-+      0x0001, 0x6007, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0010,\r
-+      0x080c, 0xabed, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d7d,\r
-+      0x080c, 0x95de, 0x080c, 0xac28, 0x0005, 0x9182, 0x0040, 0x0002,\r
-+      0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b5, 0xd8b3, 0xd8b3, 0xd8b3,\r
-+      0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3,\r
-+      0xd8b3, 0xd8b3, 0xd8b3, 0x080c, 0x0d7d, 0x0096, 0x00b6, 0x00d6,\r
-+      0x00e6, 0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8bc, 0x9005,\r
-+      0x11b0, 0x6007, 0x0044, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00,\r
-+      0x0904, 0xd91c, 0x080c, 0xe684, 0x1170, 0x9486, 0x2000, 0x1158,\r
-+      0x2009, 0x0001, 0x2011, 0x0200, 0x080c, 0x88ec, 0x0020, 0x9026,\r
-+      0x080c, 0xe508, 0x0c30, 0x080c, 0x103a, 0x090c, 0x0d7d, 0x6003,\r
-+      0x0007, 0xa867, 0x010d, 0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00,\r
-+      0xa88e, 0x6008, 0xa8e2, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a,\r
-+      0x0016, 0xa876, 0xa87f, 0x0000, 0xa883, 0x0000, 0xa887, 0x0036,\r
-+      0x080c, 0x6d80, 0x001e, 0x080c, 0xe684, 0x1904, 0xd97c, 0x9486,\r
-+      0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xe239, 0x0804, 0xd97c,\r
-+      0x9486, 0x0200, 0x1120, 0x080c, 0xe1c9, 0x0804, 0xd97c, 0x9486,\r
-+      0x0400, 0x0120, 0x9486, 0x1000, 0x1904, 0xd97c, 0x2019, 0x0002,\r
-+      0x080c, 0xe1e8, 0x0804, 0xd97c, 0x2069, 0x1a6f, 0x6a00, 0xd284,\r
-+      0x0904, 0xd9e6, 0x9284, 0x0300, 0x1904, 0xd9df, 0x6804, 0x9005,\r
-+      0x0904, 0xd9c7, 0x2d78, 0x6003, 0x0007, 0x080c, 0x1053, 0x0904,\r
-+      0xd988, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017,\r
-+      0x0000, 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xd9ea, 0x9006,\r
-+      0xa802, 0xa867, 0x0116, 0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a,\r
-+      0x6010, 0x2058, 0xb8a0, 0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba,\r
-+      0xb92c, 0xa9be, 0xb930, 0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d,\r
-+      0x7044, 0x9084, 0x0003, 0x9080, 0xd984, 0x2005, 0xa87e, 0x20a9,\r
-+      0x000a, 0x2001, 0x0270, 0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205,\r
-+      0x200b, 0x0080, 0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0,\r
-+      0x4003, 0x200b, 0x0000, 0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000,\r
-+      0x200c, 0xa9ae, 0x080c, 0x6d83, 0x002e, 0x004e, 0x00fe, 0x00ee,\r
-+      0x00de, 0x00be, 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000,\r
-+      0x2001, 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x103a, 0x1904,\r
-+      0xd931, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009,\r
-+      0xa022, 0x080c, 0x921e, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084,\r
-+      0xff00, 0x9086, 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016,\r
-+      0x6114, 0x918c, 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001,\r
-+      0x6007, 0x0043, 0x2009, 0xa025, 0x080c, 0x921e, 0x0828, 0x6868,\r
-+      0x602e, 0x686c, 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007,\r
-+      0x0041, 0x2009, 0xa022, 0x080c, 0x921e, 0x0804, 0xd97c, 0x2001,\r
-+      0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b07,\r
-+      0x6017, 0xf300, 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007,\r
-+      0x0041, 0x2009, 0xa022, 0x080c, 0x921e, 0x0804, 0xd97c, 0x6017,\r
-+      0xf500, 0x0c98, 0x6017, 0xf600, 0x0804, 0xd99c, 0x6017, 0xf200,\r
-+      0x0804, 0xd99c, 0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886,\r
-+      0x2c00, 0xa87a, 0x7044, 0x9084, 0x0003, 0x9080, 0xd984, 0x2005,\r
-+      0xa87e, 0x2928, 0x6010, 0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a,\r
-+      0xb82c, 0xa88e, 0xb830, 0xa892, 0xb834, 0xa896, 0xa883, 0x003d,\r
-+      0x2009, 0x0205, 0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000,\r
-+      0x2011, 0x0210, 0x2214, 0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111,\r
-+      0x1a0c, 0x0d7d, 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860,\r
-+      0x20e8, 0xa85c, 0x9080, 0x0029, 0x20a0, 0x2011, 0xda66, 0x2041,\r
-+      0x0001, 0x223d, 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8,\r
-+      0x4003, 0x931a, 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a,\r
-+      0x2001, 0x0260, 0x2098, 0x0c68, 0x2950, 0x080c, 0x1053, 0x0170,\r
-+      0x2900, 0xb002, 0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8,\r
-+      0xa85c, 0x9080, 0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800,\r
-+      0x902d, 0x0118, 0x080c, 0x106c, 0x0cc8, 0x080c, 0x106c, 0x0804,\r
-+      0xd988, 0x2548, 0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205,\r
-+      0x200b, 0x0000, 0x080c, 0xe26c, 0x0804, 0xd97c, 0x8010, 0x0004,\r
-+      0x801a, 0x0006, 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186,\r
-+      0x0013, 0x1160, 0x6004, 0x908a, 0x0057, 0x1a0c, 0x0d7d, 0x9082,\r
-+      0x0040, 0x0a0c, 0x0d7d, 0x2008, 0x0804, 0xdaf1, 0x9186, 0x0051,\r
-+      0x0108, 0x0040, 0x080c, 0xaaa8, 0x01e8, 0x9086, 0x0002, 0x0904,\r
-+      0xdb38, 0x00c0, 0x9186, 0x0027, 0x0180, 0x9186, 0x0048, 0x0128,\r
-+      0x9186, 0x0014, 0x0150, 0x190c, 0x0d7d, 0x080c, 0xaaa8, 0x0150,\r
-+      0x9086, 0x0004, 0x0904, 0xdbd5, 0x0028, 0x6004, 0x9082, 0x0040,\r
-+      0x2008, 0x001a, 0x080c, 0xaca9, 0x0005, 0xdab8, 0xdaba, 0xdaba,\r
-+      0xdae1, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8,\r
-+      0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8,\r
-+      0x080c, 0x0d7d, 0x080c, 0x95de, 0x080c, 0x96a0, 0x0036, 0x0096,\r
-+      0x6014, 0x904d, 0x01d8, 0x080c, 0xc838, 0x01c0, 0x6003, 0x0002,\r
-+      0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019,\r
-+      0x0004, 0x080c, 0xe26c, 0x6017, 0x0000, 0x6018, 0x9005, 0x1120,\r
-+      0x2001, 0x1987, 0x2004, 0x601a, 0x6003, 0x0007, 0x009e, 0x003e,\r
-+      0x0005, 0x0096, 0x080c, 0x95de, 0x080c, 0x96a0, 0x080c, 0xc838,\r
-+      0x0120, 0x6014, 0x2048, 0x080c, 0x106c, 0x080c, 0xac28, 0x009e,\r
-+      0x0005, 0x0002, 0xdb05, 0xdb1a, 0xdb07, 0xdb2f, 0xdb05, 0xdb05,\r
-+      0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05,\r
-+      0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0x080c, 0x0d7d, 0x0096,\r
-+      0x6014, 0x2048, 0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009,\r
-+      0x0043, 0x080c, 0xac8c, 0x0010, 0x6003, 0x0004, 0x080c, 0x96a0,\r
-+      0x009e, 0x0005, 0x080c, 0xc838, 0x0138, 0x6114, 0x0096, 0x2148,\r
-+      0xa97c, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x88c1, 0x080c, 0xabed,\r
-+      0x080c, 0x96a0, 0x0005, 0x080c, 0xe4cc, 0x0db0, 0x0cc8, 0x6003,\r
-+      0x0001, 0x6007, 0x0041, 0x2009, 0xa022, 0x080c, 0x921e, 0x0005,\r
-+      0x9182, 0x0040, 0x0002, 0xdb4e, 0xdb50, 0xdb4e, 0xdb4e, 0xdb4e,\r
-+      0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e,\r
-+      0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb51, 0xdb4e, 0x080c, 0x0d7d,\r
-+      0x0005, 0x00d6, 0x080c, 0x88c1, 0x00de, 0x080c, 0xe524, 0x080c,\r
-+      0xabed, 0x0005, 0x9182, 0x0040, 0x0002, 0xdb70, 0xdb70, 0xdb70,\r
-+      0xdb70, 0xdb70, 0xdb70, 0xdb70, 0xdb70, 0xdb70, 0xdb72, 0xdb9d,\r
-+      0xdb70, 0xdb70, 0xdb70, 0xdb70, 0xdb9d, 0xdb70, 0xdb70, 0xdb70,\r
-+      0x080c, 0x0d7d, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0168,\r
-+      0x908c, 0x0003, 0x918e, 0x0002, 0x0180, 0x6144, 0xd1e4, 0x1168,\r
-+      0x2009, 0x0041, 0x009e, 0x0804, 0xdc5d, 0x6003, 0x0007, 0x601b,\r
-+      0x0000, 0x080c, 0x88c1, 0x009e, 0x0005, 0x6014, 0x2048, 0xa97c,\r
-+      0xd1ec, 0x1130, 0x080c, 0x88c1, 0x080c, 0xabed, 0x009e, 0x0005,\r
-+      0x080c, 0xe4cc, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c,\r
-+      0xc1d4, 0x2102, 0x0036, 0x080c, 0x963b, 0x080c, 0x96a0, 0x6014,\r
-+      0x0096, 0x2048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,\r
-+      0x0188, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x0140, 0xa8ac,\r
-+      0x6330, 0x931a, 0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e, 0x6003,\r
-+      0x0002, 0x0080, 0x2019, 0x0004, 0x080c, 0xe26c, 0x6018, 0x9005,\r
-+      0x1128, 0x2001, 0x1987, 0x2004, 0x8003, 0x601a, 0x6017, 0x0000,\r
-+      0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002,\r
-+      0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec,\r
-+      0xdbee, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec,\r
-+      0xdbec, 0xdbec, 0xdbec, 0xdc39, 0x080c, 0x0d7d, 0x6014, 0x0096,\r
-+      0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,\r
-+      0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, 0x2009,\r
-+      0x0041, 0x009e, 0x0804, 0xdc5d, 0x6003, 0x0007, 0x601b, 0x0000,\r
-+      0x080c, 0x88c1, 0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58, 0x0006,\r
-+      0x0046, 0xacac, 0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030, 0x9420,\r
-+      0x6432, 0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8, 0x6110,\r
-+      0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009, 0x180e,\r
-+      0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006,\r
-+      0x00e9, 0x080c, 0x88c3, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e,\r
-+      0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x1670, 0x1904, 0xdbee,\r
-+      0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e, 0x9105,\r
-+      0x1120, 0x080c, 0x1670, 0x1904, 0xdbee, 0x0005, 0xd2fc, 0x0140,\r
-+      0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009, 0x0009, 0x0010,\r
-+      0x2009, 0x0015, 0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040, 0x0208,\r
-+      0x0062, 0x9186, 0x0013, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d7d,\r
-+      0x6024, 0xd0dc, 0x090c, 0x0d7d, 0x0005, 0xdc80, 0xdc8c, 0xdc98,\r
-+      0xdca4, 0xdc80, 0xdc80, 0xdc80, 0xdc80, 0xdc87, 0xdc82, 0xdc82,\r
-+      0xdc80, 0xdc80, 0xdc80, 0xdc80, 0xdc82, 0xdc80, 0xdc82, 0xdc80,\r
-+      0x080c, 0x0d7d, 0x6024, 0xd0dc, 0x090c, 0x0d7d, 0x0005, 0x6014,\r
-+      0x9005, 0x190c, 0x0d7d, 0x0005, 0x6003, 0x0001, 0x6106, 0x0126,\r
-+      0x2091, 0x8000, 0x2009, 0xa022, 0x080c, 0x9200, 0x012e, 0x0005,\r
-+      0x6003, 0x0004, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa001,\r
-+      0x080c, 0x921e, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106, 0x080c,\r
-+      0x1c03, 0x0126, 0x2091, 0x8000, 0x6014, 0x0096, 0x2048, 0xa87c,\r
-+      0xd0fc, 0x0188, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x6024,\r
-+      0xd0cc, 0x1148, 0xd0c4, 0x1138, 0xa8a8, 0x9005, 0x1120, 0x6144,\r
-+      0x918d, 0xb035, 0x0018, 0x6144, 0x918d, 0xa035, 0x009e, 0x080c,\r
-+      0x9265, 0x012e, 0x0005, 0x6144, 0x918d, 0xa032, 0x0cb8, 0x0126,\r
-+      0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e,\r
-+      0x003e, 0x012e, 0x0005, 0xdceb, 0xdced, 0xdd02, 0xdd1c, 0xdceb,\r
-+      0xdceb, 0xdceb, 0xdceb, 0xdceb, 0xdceb, 0xdceb, 0xdceb, 0xdceb,\r
-+      0xdceb, 0xdceb, 0xdceb, 0x080c, 0x0d7d, 0x6014, 0x2048, 0xa87c,\r
-+      0xd0fc, 0x0510, 0x909c, 0x0003, 0x939e, 0x0003, 0x01e8, 0x6003,\r
-+      0x0001, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa022, 0x080c,\r
-+      0x921e, 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x909c,\r
-+      0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x2009,\r
-+      0xa001, 0x080c, 0x921e, 0x00e0, 0x901e, 0x6316, 0x631a, 0x2019,\r
-+      0x0004, 0x080c, 0xe26c, 0x00a0, 0x6014, 0x2048, 0xa87c, 0xd0fc,\r
-+      0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, 0x0003,\r
-+      0x6106, 0x080c, 0x1c03, 0x6144, 0x918d, 0xa035, 0x080c, 0x9265,\r
-+      0x0005, 0x080c, 0x95de, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148,\r
-+      0x080c, 0xe621, 0x0036, 0x2019, 0x0029, 0x080c, 0xe26c, 0x003e,\r
-+      0x009e, 0x080c, 0xac28, 0x080c, 0x96a0, 0x0005, 0x080c, 0x963b,\r
-+      0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xe621, 0x0036,\r
-+      0x2019, 0x0029, 0x080c, 0xe26c, 0x003e, 0x009e, 0x080c, 0xac28,\r
-+      0x0005, 0x9182, 0x0085, 0x0002, 0xdd6b, 0xdd69, 0xdd69, 0xdd77,\r
-+      0xdd69, 0xdd69, 0xdd69, 0xdd69, 0xdd69, 0xdd69, 0xdd69, 0xdd69,\r
-+      0xdd69, 0x080c, 0x0d7d, 0x6003, 0x000b, 0x6106, 0x0126, 0x2091,\r
-+      0x8000, 0x2009, 0x8020, 0x080c, 0x921e, 0x012e, 0x0005, 0x0026,\r
-+      0x00e6, 0x080c, 0xe4c3, 0x0118, 0x080c, 0xabed, 0x0440, 0x2071,\r
-+      0x0260, 0x7224, 0x6216, 0x2001, 0x180e, 0x2004, 0xd0e4, 0x0150,\r
-+      0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e,\r
-+      0x080c, 0xaf1a, 0x7220, 0x080c, 0xe102, 0x0118, 0x6007, 0x0086,\r
-+      0x0040, 0x6007, 0x0087, 0x7224, 0x9296, 0xffff, 0x1110, 0x6007,\r
-+      0x0086, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x00ee,\r
-+      0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085,\r
-+      0x0a0c, 0x0d7d, 0x908a, 0x0092, 0x1a0c, 0x0d7d, 0x9082, 0x0085,\r
-+      0x00a2, 0x9186, 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c,\r
-+      0xaca9, 0x0050, 0x2001, 0x0007, 0x080c, 0x65a1, 0x080c, 0x95de,\r
-+      0x080c, 0xac28, 0x080c, 0x96a0, 0x0005, 0xddda, 0xdddc, 0xdddc,\r
-+      0xddda, 0xddda, 0xddda, 0xddda, 0xddda, 0xddda, 0xddda, 0xddda,\r
-+      0xddda, 0xddda, 0x080c, 0x0d7d, 0x080c, 0xac28, 0x080c, 0x96a0,\r
-+      0x0005, 0x9182, 0x0085, 0x0a0c, 0x0d7d, 0x9182, 0x0092, 0x1a0c,\r
-+      0x0d7d, 0x9182, 0x0085, 0x0002, 0xddf9, 0xddf9, 0xddf9, 0xddfb,\r
-+      0xddf9, 0xddf9, 0xddf9, 0xddf9, 0xddf9, 0xddf9, 0xddf9, 0xddf9,\r
-+      0xddf9, 0x080c, 0x0d7d, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186,\r
-+      0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xaca9, 0x0020,\r
-+      0x080c, 0x95de, 0x080c, 0xac28, 0x0005, 0x0036, 0x080c, 0xe524,\r
-+      0x604b, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023, 0x0006, 0x6003,\r
-+      0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000, 0x2001,\r
-+      0x0382, 0x2004, 0x9084, 0x0007, 0x0006, 0x9086, 0x0003, 0x0110,\r
-+      0x080c, 0xa896, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0xa218,\r
-+      0x009e, 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0xa2c3, 0x007e,\r
-+      0x1520, 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007,\r
-+      0x01e0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xe524, 0x080c,\r
-+      0xcf6a, 0x080c, 0x1a6a, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c,\r
-+      0xc838, 0x0110, 0x080c, 0xe26c, 0x009e, 0x6017, 0x0000, 0x080c,\r
-+      0xe524, 0x6023, 0x0007, 0x080c, 0xcf6a, 0x000e, 0x9086, 0x0003,\r
-+      0x0110, 0x080c, 0xa8b2, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6,\r
-+      0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c,\r
-+      0x25fb, 0x15e8, 0x0016, 0x00c6, 0x080c, 0x6625, 0x15b0, 0x001e,\r
-+      0x00c6, 0x2160, 0x080c, 0xcf67, 0x00ce, 0x002e, 0x0026, 0x0016,\r
-+      0x080c, 0xa896, 0x2019, 0x0029, 0x080c, 0xa38a, 0x080c, 0x93a5,\r
-+      0x0076, 0x903e, 0x080c, 0x9277, 0x007e, 0x001e, 0x0076, 0x903e,\r
-+      0x080c, 0xdfeb, 0x007e, 0x080c, 0xa8b2, 0x0026, 0xba04, 0x9294,\r
-+      0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118,\r
-+      0xbaa0, 0x080c, 0x32be, 0x002e, 0xbc84, 0x001e, 0x080c, 0x6043,\r
-+      0xbe12, 0xbd16, 0xbc86, 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e,\r
-+      0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6,\r
-+      0x0016, 0x2009, 0x1824, 0x2104, 0x9086, 0x0074, 0x1904, 0xdf0e,\r
-+      0x2069, 0x0260, 0x6944, 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184,\r
-+      0x8000, 0x0904, 0xdf0b, 0x2001, 0x197c, 0x2004, 0x9005, 0x1140,\r
-+      0x6010, 0x2058, 0xb884, 0x9005, 0x0118, 0x9184, 0x0800, 0x0598,\r
-+      0x6948, 0x918a, 0x0001, 0x0648, 0x080c, 0xe689, 0x0118, 0x6978,\r
-+      0xd1fc, 0x11b8, 0x2009, 0x0205, 0x200b, 0x0001, 0x693c, 0x81ff,\r
-+      0x1198, 0x6944, 0x9182, 0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178,\r
-+      0x6948, 0x918a, 0x0001, 0x0288, 0x6950, 0x918a, 0x0001, 0x0298,\r
-+      0x00d0, 0x6017, 0x0100, 0x00a0, 0x6017, 0x0300, 0x0088, 0x6017,\r
-+      0x0500, 0x0070, 0x6017, 0x0700, 0x0058, 0x6017, 0x0900, 0x0040,\r
-+      0x6017, 0x0b00, 0x0028, 0x6017, 0x0f00, 0x0010, 0x6017, 0x2d00,\r
-+      0x9085, 0x0001, 0x0008, 0x9006, 0x001e, 0x00be, 0x00de, 0x00ce,\r
-+      0x0005, 0x00c6, 0x00b6, 0x0026, 0x0036, 0x0156, 0x6210, 0x2258,\r
-+      0xbb04, 0x9394, 0x00ff, 0x9286, 0x0006, 0x0180, 0x9286, 0x0004,\r
-+      0x0168, 0x9394, 0xff00, 0x8217, 0x9286, 0x0006, 0x0138, 0x9286,\r
-+      0x0004, 0x0120, 0x080c, 0x6634, 0x0804, 0xdf7a, 0x2011, 0x0276,\r
-+      0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbbc2,\r
-+      0x009e, 0x15c8, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48,\r
-+      0x2019, 0x0006, 0x080c, 0xbbc2, 0x009e, 0x1568, 0x0046, 0x0016,\r
-+      0xbaa0, 0x2220, 0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0138,\r
-+      0x2009, 0x0029, 0x080c, 0xe2c9, 0xb800, 0xc0e5, 0xb802, 0x080c,\r
-+      0xa896, 0x2019, 0x0029, 0x080c, 0x93a5, 0x0076, 0x2039, 0x0000,\r
-+      0x080c, 0x9277, 0x2c08, 0x080c, 0xdfeb, 0x007e, 0x080c, 0xa8b2,\r
-+      0x2001, 0x0007, 0x080c, 0x65a1, 0x2001, 0x0007, 0x080c, 0x6575,\r
-+      0x001e, 0x004e, 0x9006, 0x015e, 0x003e, 0x002e, 0x00be, 0x00ce,\r
-+      0x0005, 0x00d6, 0x2069, 0x026e, 0x6800, 0x9086, 0x0800, 0x0118,\r
-+      0x6017, 0x0000, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6,\r
-+      0x0016, 0x0026, 0x0036, 0x0156, 0x2079, 0x026c, 0x7930, 0x7834,\r
-+      0x080c, 0x25fb, 0x11d0, 0x080c, 0x6625, 0x11b8, 0x2011, 0x0270,\r
-+      0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbbc2,\r
-+      0x009e, 0x1158, 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48,\r
-+      0x2019, 0x0006, 0x080c, 0xbbc2, 0x009e, 0x015e, 0x003e, 0x002e,\r
-+      0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026,\r
-+      0x0036, 0x0156, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,\r
-+      0x25fb, 0x11d0, 0x080c, 0x6625, 0x11b8, 0x2011, 0x0276, 0x20a9,\r
-+      0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbbc2, 0x009e,\r
-+      0x1158, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,\r
-+      0x0006, 0x080c, 0xbbc2, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e,\r
-+      0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066,\r
-+      0x0056, 0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x080c, 0xa8f4,\r
-+      0x0106, 0x190c, 0xa896, 0x2740, 0x2029, 0x19f3, 0x252c, 0x2021,\r
-+      0x19fa, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7654, 0x7074,\r
-+      0x81ff, 0x0150, 0x0006, 0x9186, 0x1b32, 0x000e, 0x0128, 0x8001,\r
-+      0x9602, 0x1a04, 0xe090, 0x0018, 0x9606, 0x0904, 0xe090, 0x080c,\r
-+      0x8b90, 0x0904, 0xe087, 0x2100, 0x9c06, 0x0904, 0xe087, 0x080c,\r
-+      0xe30a, 0x1904, 0xe087, 0x080c, 0xe6a6, 0x0904, 0xe087, 0x080c,\r
-+      0xe2fa, 0x0904, 0xe087, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c,\r
-+      0x3363, 0x0904, 0xe0d2, 0x6004, 0x9086, 0x0000, 0x1904, 0xe0d2,\r
-+      0x9786, 0x0004, 0x0904, 0xe0d2, 0x9786, 0x0007, 0x0904, 0xe087,\r
-+      0x2500, 0x9c06, 0x0904, 0xe087, 0x2400, 0x9c06, 0x0904, 0xe087,\r
-+      0x88ff, 0x0118, 0x605c, 0x9906, 0x15d0, 0x0096, 0x6043, 0xffff,\r
-+      0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1a6a, 0x001e,\r
-+      0x9786, 0x000a, 0x0148, 0x080c, 0xca4d, 0x1130, 0x080c, 0xb5b5,\r
-+      0x009e, 0x080c, 0xac28, 0x0418, 0x6014, 0x2048, 0x080c, 0xc838,\r
-+      0x01d8, 0x9786, 0x0003, 0x1588, 0xa867, 0x0103, 0xa87c, 0xd0cc,\r
-+      0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fec, 0x009e, 0xab7a,\r
-+      0xa877, 0x0000, 0x080c, 0xe621, 0x0016, 0x080c, 0xcb36, 0x080c,\r
-+      0x6d74, 0x001e, 0x080c, 0xca27, 0x009e, 0x080c, 0xac28, 0x9ce0,\r
-+      0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804, 0xe004,\r
-+      0x010e, 0x190c, 0xa8b2, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e,\r
-+      0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150,\r
-+      0x9386, 0x0005, 0x0128, 0x080c, 0xe621, 0x080c, 0xe26c, 0x08e0,\r
-+      0x009e, 0x08e8, 0x9786, 0x0009, 0x11f8, 0x6000, 0x9086, 0x0004,\r
-+      0x01c0, 0x6000, 0x9086, 0x0003, 0x11a0, 0x080c, 0x963b, 0x0096,\r
-+      0x6114, 0x2148, 0x080c, 0xc838, 0x0118, 0x6010, 0x080c, 0x6d80,\r
-+      0x009e, 0x00c6, 0x080c, 0xabed, 0x00ce, 0x0036, 0x080c, 0x96a0,\r
-+      0x003e, 0x009e, 0x0804, 0xe087, 0x9786, 0x000a, 0x0904, 0xe06e,\r
-+      0x0804, 0xe06c, 0x81ff, 0x0904, 0xe087, 0x9180, 0x0001, 0x2004,\r
-+      0x9086, 0x0018, 0x0138, 0x9180, 0x0001, 0x2004, 0x9086, 0x002d,\r
-+      0x1904, 0xe087, 0x6000, 0x9086, 0x0002, 0x1904, 0xe087, 0x080c,\r
-+      0xca3c, 0x0138, 0x080c, 0xca4d, 0x1904, 0xe087, 0x080c, 0xb5b5,\r
-+      0x0038, 0x080c, 0x321c, 0x080c, 0xca4d, 0x1110, 0x080c, 0xb5b5,\r
-+      0x080c, 0xac28, 0x0804, 0xe087, 0xa864, 0x9084, 0x00ff, 0x9086,\r
-+      0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006,\r
-+      0x080c, 0xe293, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b,\r
-+      0x00ee, 0x00ce, 0x0005, 0xe121, 0xe121, 0xe121, 0xe121, 0xe121,\r
-+      0xe121, 0xe123, 0xe121, 0xe121, 0xe121, 0xe121, 0xac28, 0xac28,\r
-+      0xe121, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6,\r
-+      0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xe2c9,\r
-+      0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xde1b, 0x003e, 0x9085,\r
-+      0x0001, 0x0005, 0x0096, 0x080c, 0xc838, 0x0140, 0x6014, 0x904d,\r
-+      0x080c, 0xc443, 0x687b, 0x0005, 0x080c, 0x6d80, 0x009e, 0x080c,\r
-+      0xac28, 0x9085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c, 0x6561,\r
-+      0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805,\r
-+      0x2011, 0x0276, 0x080c, 0xbbae, 0x003e, 0x002e, 0x001e, 0x015e,\r
-+      0x9005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066,\r
-+      0x00b6, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0x1ddc, 0x2079,\r
-+      0x0001, 0x8fff, 0x0904, 0xe1bc, 0x2071, 0x1800, 0x7654, 0x7074,\r
-+      0x8001, 0x9602, 0x1a04, 0xe1bc, 0x88ff, 0x0120, 0x2800, 0x9c06,\r
-+      0x1590, 0x2078, 0x080c, 0xe2fa, 0x0570, 0x2400, 0x9c06, 0x0558,\r
-+      0x6720, 0x9786, 0x0006, 0x1538, 0x9786, 0x0007, 0x0520, 0x88ff,\r
-+      0x1140, 0x6010, 0x9b06, 0x11f8, 0x85ff, 0x0118, 0x605c, 0x9106,\r
-+      0x11d0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xe524, 0x080c,\r
-+      0xcf6a, 0x080c, 0x1a6a, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c,\r
-+      0xc838, 0x0120, 0x0046, 0x080c, 0xe26c, 0x004e, 0x009e, 0x080c,\r
-+      0xac28, 0x88ff, 0x1198, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004,\r
-+      0x9c02, 0x1210, 0x0804, 0xe171, 0x9006, 0x012e, 0x00be, 0x006e,\r
-+      0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001,\r
-+      0x0ca0, 0x080c, 0xa896, 0x00b6, 0x0076, 0x0056, 0x0086, 0x9046,\r
-+      0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6210, 0x2258, 0x0096,\r
-+      0x904e, 0x080c, 0xa218, 0x009e, 0x008e, 0x903e, 0x080c, 0xa2c3,\r
-+      0x080c, 0xe162, 0x005e, 0x007e, 0x00be, 0x080c, 0xa8b2, 0x0005,\r
-+      0x080c, 0xa896, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156,\r
-+      0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c,\r
-+      0x6625, 0x1190, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001,\r
-+      0x0096, 0x904e, 0x080c, 0xa218, 0x009e, 0x008e, 0x903e, 0x080c,\r
-+      0xa2c3, 0x080c, 0xe162, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04,\r
-+      0xe1f5, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x080c,\r
-+      0xa8b2, 0x0005, 0x080c, 0xa896, 0x00b6, 0x0076, 0x0056, 0x6210,\r
-+      0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019, 0x0048, 0x0096,\r
-+      0x904e, 0x080c, 0xa218, 0x009e, 0x008e, 0x903e, 0x080c, 0xa2c3,\r
-+      0x2c20, 0x080c, 0xe162, 0x005e, 0x007e, 0x00be, 0x080c, 0xa8b2,\r
-+      0x0005, 0x080c, 0xa896, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6,\r
-+      0x0156, 0x2c20, 0x20a9, 0x0800, 0x900e, 0x0016, 0x0036, 0x080c,\r
-+      0x6625, 0x11a0, 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001,\r
-+      0x080c, 0xe508, 0x004e, 0x0096, 0x904e, 0x080c, 0xa218, 0x009e,\r
-+      0x008e, 0x903e, 0x080c, 0xa2c3, 0x080c, 0xe162, 0x003e, 0x001e,\r
-+      0x8108, 0x1f04, 0xe245, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e,\r
-+      0x00be, 0x080c, 0xa8b2, 0x0005, 0x0016, 0x00f6, 0x080c, 0xc836,\r
-+      0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800,\r
-+      0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c, 0x6d80, 0x2f48,\r
-+      0x0cb0, 0xab82, 0x080c, 0x6d80, 0x00fe, 0x001e, 0x0005, 0xa800,\r
-+      0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x6d80, 0x2f48, 0x0cb8,\r
-+      0x080c, 0x6d80, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061, 0x1ddc,\r
-+      0x9005, 0x1138, 0x2071, 0x1800, 0x7454, 0x7074, 0x8001, 0x9402,\r
-+      0x12f8, 0x2100, 0x9c06, 0x0188, 0x6000, 0x9086, 0x0000, 0x0168,\r
-+      0x6008, 0x9206, 0x1150, 0x6320, 0x9386, 0x0009, 0x01b0, 0x6010,\r
-+      0x91a0, 0x0004, 0x2424, 0x9406, 0x0140, 0x9ce0, 0x001c, 0x2001,\r
-+      0x181a, 0x2004, 0x9c02, 0x1220, 0x0c20, 0x9085, 0x0001, 0x0008,\r
-+      0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, 0x631c, 0xd3c4, 0x1d68,\r
-+      0x0c30, 0x0096, 0x0006, 0x080c, 0x103a, 0x000e, 0x090c, 0x0d7d,\r
-+      0xaae2, 0xa867, 0x010d, 0xa88e, 0x0026, 0x2010, 0x080c, 0xc826,\r
-+      0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0017, 0x2004, 0x002e,\r
-+      0xa87a, 0x9186, 0x0020, 0x0110, 0xa8e3, 0xffff, 0xa986, 0xac76,\r
-+      0xa87f, 0x0000, 0x2001, 0x198e, 0x2004, 0xa882, 0x9006, 0xa802,\r
-+      0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e,\r
-+      0x009e, 0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786, 0x0001,\r
-+      0x0140, 0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110, 0x9085,\r
-+      0x0001, 0x0005, 0x00e6, 0x6010, 0x9075, 0x0138, 0x00b6, 0x2058,\r
-+      0xb8a0, 0x00be, 0x9206, 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8,\r
-+      0x0016, 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007, 0x6134, 0x918c,\r
-+      0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,\r
-+      0x0005, 0x2001, 0x1987, 0x2004, 0x601a, 0x2009, 0x8020, 0x080c,\r
-+      0x921e, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4,\r
-+      0x0158, 0xd0cc, 0x0118, 0x080c, 0xcb7d, 0x0030, 0x080c, 0xe524,\r
-+      0x080c, 0x88c1, 0x080c, 0xabed, 0x0005, 0x9280, 0x0008, 0x2004,\r
-+      0x9084, 0x000f, 0x0002, 0xe359, 0xe359, 0xe359, 0xe35b, 0xe359,\r
-+      0xe35b, 0xe35b, 0xe359, 0xe35b, 0xe359, 0xe359, 0xe359, 0xe359,\r
-+      0xe359, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, 0x0008,\r
-+      0x2004, 0x9084, 0x000f, 0x0002, 0xe372, 0xe372, 0xe372, 0xe372,\r
-+      0xe372, 0xe372, 0xe37f, 0xe372, 0xe372, 0xe372, 0xe372, 0xe372,\r
-+      0xe372, 0xe372, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00,\r
-+      0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x0005, 0x0096,\r
-+      0x00c6, 0x2260, 0x080c, 0xe524, 0x604b, 0x0000, 0x6024, 0xc0f4,\r
-+      0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186,\r
-+      0x0007, 0x1904, 0xe3d8, 0x6814, 0x9005, 0x0138, 0x2048, 0xa87c,\r
-+      0xd0fc, 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003,\r
-+      0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x00c6, 0x2d60, 0x6100,\r
-+      0x9186, 0x0002, 0x1904, 0xe44f, 0x6014, 0x9005, 0x1138, 0x6000,\r
-+      0x9086, 0x0007, 0x190c, 0x0d7d, 0x0804, 0xe44f, 0x2048, 0x080c,\r
-+      0xc838, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900,\r
-+      0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x1168, 0xa87c,\r
-+      0xc0dc, 0xc0f4, 0xa87e, 0xa880, 0xc0fc, 0xa882, 0x2009, 0x0043,\r
-+      0x080c, 0xdc5d, 0x0804, 0xe44f, 0x2009, 0x0041, 0x0804, 0xe449,\r
-+      0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c, 0xd0bc, 0x1120,\r
-+      0x00de, 0x009e, 0x0804, 0xe372, 0xd0b4, 0x0128, 0xd0fc, 0x090c,\r
-+      0x0d7d, 0x0804, 0xe393, 0x6007, 0x003a, 0x6003, 0x0001, 0x2009,\r
-+      0x8020, 0x080c, 0x921e, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002,\r
-+      0x0120, 0x9186, 0x0004, 0x1904, 0xe44f, 0x6814, 0x2048, 0xa97c,\r
-+      0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1fc, 0xc1bc, 0xa982, 0x00f6,\r
-+      0x2c78, 0x080c, 0x1731, 0x00fe, 0x2009, 0x0042, 0x04d0, 0x0036,\r
-+      0x080c, 0x103a, 0x090c, 0x0d7d, 0xa867, 0x010d, 0x9006, 0xa802,\r
-+      0xa86a, 0xa88a, 0x2d18, 0xab8e, 0xa887, 0x0045, 0x2c00, 0xa892,\r
-+      0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6,\r
-+      0x2058, 0xb8a0, 0x00be, 0x2004, 0x635c, 0xab7a, 0xa876, 0x9006,\r
-+      0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001, 0x080c, 0x6d80,\r
-+      0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xde1b, 0x2d00, 0x600a,\r
-+      0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a, 0x634a, 0x003e,\r
-+      0x0038, 0x604b, 0x0000, 0x6003, 0x0007, 0x080c, 0xdc5d, 0x00ce,\r
-+      0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082,\r
-+      0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c, 0x95de,\r
-+      0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c, 0xe26c,\r
-+      0x009e, 0x003e, 0x080c, 0x96a0, 0x0005, 0x9186, 0x0014, 0x0d70,\r
-+      0x080c, 0xaca9, 0x0005, 0xe482, 0xe480, 0xe480, 0xe480, 0xe480,\r
-+      0xe480, 0xe482, 0xe480, 0xe480, 0xe480, 0xe480, 0xe480, 0xe480,\r
-+      0x080c, 0x0d7d, 0x6003, 0x000c, 0x080c, 0x96a0, 0x0005, 0x9182,\r
-+      0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c, 0xaca9,\r
-+      0x0005, 0xe49e, 0xe49e, 0xe49e, 0xe49e, 0xe4a0, 0xe4c0, 0xe49e,\r
-+      0xe49e, 0xe49e, 0xe49e, 0xe49e, 0xe49e, 0xe49e, 0x080c, 0x0d7d,\r
-+      0x00d6, 0x2c68, 0x080c, 0xab97, 0x01b0, 0x6003, 0x0001, 0x6007,\r
-+      0x001e, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c,\r
-+      0x613e, 0x600b, 0xffff, 0x6910, 0x6112, 0x6023, 0x0004, 0x2009,\r
-+      0x8020, 0x080c, 0x921e, 0x2d60, 0x080c, 0xabed, 0x00de, 0x0005,\r
-+      0x080c, 0xabed, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800,\r
-+      0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1867, 0x210c, 0xd1ec,\r
-+      0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150,\r
-+      0x2001, 0x1988, 0x2004, 0x604a, 0x2009, 0x1867, 0x210c, 0xd1f4,\r
-+      0x1520, 0x00a0, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x0128, 0x6024,\r
-+      0xc0e4, 0x6026, 0x9006, 0x00d8, 0x2001, 0x1988, 0x200c, 0x2001,\r
-+      0x1986, 0x2004, 0x9100, 0x9080, 0x000a, 0x604a, 0x6010, 0x00b6,\r
-+      0x2058, 0xb8bc, 0x00be, 0x0008, 0x2104, 0x9005, 0x0118, 0x9088,\r
-+      0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000, 0x9085, 0x0001, 0x0005,\r
-+      0x0016, 0x00c6, 0x00e6, 0x615c, 0xb8bc, 0x2060, 0x8cff, 0x0180,\r
-+      0x84ff, 0x1118, 0x605c, 0x9106, 0x1138, 0x600c, 0x2072, 0x080c,\r
-+      0x88c1, 0x080c, 0xabed, 0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70,\r
-+      0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058,\r
-+      0xb8bc, 0x2068, 0x9005, 0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0,\r
-+      0x600c, 0x680e, 0x00be, 0x00de, 0x0005, 0x0026, 0x0036, 0x0156,\r
-+      0x2011, 0x182c, 0x2204, 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334,\r
-+      0x9636, 0x1508, 0x8318, 0x2334, 0x2204, 0x9084, 0xff00, 0x9636,\r
-+      0x11d0, 0x2011, 0x0270, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048,\r
-+      0x2019, 0x000a, 0x080c, 0xbbc2, 0x009e, 0x1168, 0x2011, 0x0274,\r
-+      0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c,\r
-+      0xbbc2, 0x009e, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6,\r
-+      0x2071, 0x1800, 0x080c, 0x5fbc, 0x080c, 0x2fb2, 0x00ee, 0x0005,\r
-+      0x0096, 0x0026, 0x080c, 0x103a, 0x090c, 0x0d7d, 0xa85c, 0x9080,\r
-+      0x001a, 0x20a0, 0x20a9, 0x000c, 0xa860, 0x20e8, 0x9006, 0x4004,\r
-+      0x9186, 0x0046, 0x1118, 0xa867, 0x0136, 0x0038, 0xa867, 0x0138,\r
-+      0x9186, 0x0041, 0x0110, 0xa87b, 0x0001, 0x7038, 0x9084, 0xff00,\r
-+      0x7240, 0x9294, 0xff00, 0x8007, 0x9215, 0xaa9a, 0x9186, 0x0046,\r
-+      0x1168, 0x7038, 0x9084, 0x00ff, 0x723c, 0x9294, 0xff00, 0x9215,\r
-+      0xaa9e, 0x723c, 0x9294, 0x00ff, 0xaaa2, 0x0060, 0x7040, 0x9084,\r
-+      0x00ff, 0x7244, 0x9294, 0xff00, 0x9215, 0xaa9e, 0x7244, 0x9294,\r
-+      0x00ff, 0xaaa2, 0x9186, 0x0046, 0x1118, 0x9e90, 0x0012, 0x0010,\r
-+      0x9e90, 0x001a, 0x2204, 0x8007, 0xa8a6, 0x8210, 0x2204, 0x8007,\r
-+      0xa8aa, 0x8210, 0x2204, 0x8007, 0xa8ae, 0x8210, 0x2204, 0x8007,\r
-+      0xa8b2, 0x8210, 0x9186, 0x0046, 0x11b8, 0x9e90, 0x0016, 0x2204,\r
-+      0x8007, 0xa8b6, 0x8210, 0x2204, 0x8007, 0xa8ba, 0x8210, 0x2204,\r
-+      0x8007, 0xa8be, 0x8210, 0x2204, 0x8007, 0xa8c2, 0x8210, 0x2011,\r
-+      0x0205, 0x2013, 0x0001, 0x00b0, 0x9e90, 0x001e, 0x2204, 0x8007,\r
-+      0xa8b6, 0x8210, 0x2204, 0x8007, 0xa8ba, 0x2011, 0x0205, 0x2013,\r
-+      0x0001, 0x2011, 0x0260, 0x2204, 0x8007, 0xa8be, 0x8210, 0x2204,\r
-+      0x8007, 0xa8c2, 0x9186, 0x0046, 0x1118, 0x2011, 0x0262, 0x0010,\r
-+      0x2011, 0x026a, 0x0146, 0x01d6, 0x0036, 0x20a9, 0x0001, 0x2019,\r
-+      0x0008, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0x2204,\r
-+      0x8007, 0x4004, 0x8210, 0x8319, 0x1dd0, 0x003e, 0x01ce, 0x013e,\r
-+      0x2011, 0x0205, 0x2013, 0x0000, 0x002e, 0x080c, 0x6d80, 0x009e,\r
-+      0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc,\r
-+      0x0108, 0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005,\r
-+      0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026,\r
-+      0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0x19f3, 0x252c, 0x2021,\r
-+      0x19fa, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7654, 0x7074,\r
-+      0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008,\r
-+      0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c,\r
-+      0xe2fa, 0x01b8, 0x080c, 0xe30a, 0x11a0, 0x6000, 0x9086, 0x0004,\r
-+      0x1120, 0x0016, 0x080c, 0x1a6a, 0x001e, 0x080c, 0xca3c, 0x1110,\r
-+      0x080c, 0x321c, 0x080c, 0xca4d, 0x1110, 0x080c, 0xb5b5, 0x080c,\r
-+      0xac28, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1208,\r
-+      0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e,\r
-+      0x00ce, 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc,\r
-+      0x0005, 0x0006, 0x2001, 0x1837, 0x2004, 0xd09c, 0x000e, 0x0005,\r
-+      0x0006, 0x0036, 0x0046, 0x080c, 0xcf52, 0x0168, 0x2019, 0xffff,\r
-+      0x9005, 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021,\r
-+      0x0004, 0x080c, 0x4cbe, 0x004e, 0x003e, 0x000e, 0x6004, 0x9086,\r
-+      0x0001, 0x1128, 0x080c, 0xa38a, 0x080c, 0xac28, 0x9006, 0x0005,\r
-+      0x00e6, 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1ddc, 0x2071, 0x1800,\r
-+      0x7454, 0x7074, 0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06, 0x0148,\r
-+      0x6000, 0x9086, 0x0000, 0x0128, 0x6010, 0x2058, 0xb8a0, 0x9206,\r
-+      0x0140, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1220,\r
-+      0x0c60, 0x9085, 0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce,\r
-+      0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000,\r
-+      0x2071, 0x1840, 0xd5a4, 0x0118, 0x7004, 0x8000, 0x7006, 0xd5b4,\r
-+      0x0118, 0x7000, 0x8000, 0x7002, 0xd5ac, 0x0178, 0x2500, 0x9084,\r
-+      0x0007, 0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e,\r
-+      0x0005, 0x0118, 0x2071, 0xfffe, 0x0089, 0x001e, 0x00ee, 0x000e,\r
-+      0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071,\r
-+      0xfff6, 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e05, 0x8000,\r
-+      0x2077, 0x1220, 0x8e70, 0x2e05, 0x8000, 0x2077, 0x0005, 0x00e6,\r
-+      0x2071, 0xfff4, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xfff8,\r
-+      0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000,\r
-+      0x2071, 0x1840, 0x7014, 0x8000, 0x7016, 0x00ee, 0x000e, 0x012e,\r
-+      0x0005, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040,\r
-+      0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000,\r
-+      0x8000, 0x7155\r
-+};\r
-+#ifdef UNIQUE_FW_NAME\r
-+unsigned short fw2322ipx_length01 = 0xdf42;\r
-+#else\r
-+unsigned short risc_code_length01 = 0xdf42;\r
-+#endif\r
-+\r
-+/*\r
-+ *\r
-+ */\r
-+\r
-+unsigned long rseqipx_code_addr01 = 0x0001c000 ;\r
-+unsigned short rseqipx_code01[] = { \r
-+0x000b, 0x0003, 0x0000, 0x09d8, 0x0001, 0xc000, 0x0008, 0x8064,\r
-+      0x0000, 0x0010, 0x0000, 0x8066, 0x0008, 0x0101, 0x0003, 0xc007,\r
-+      0x0008, 0x80e0, 0x0008, 0xff00, 0x0000, 0x80e2, 0x0008, 0xff00,\r
-+      0x0008, 0x0162, 0x0000, 0x8066, 0x0008, 0xa101, 0x000b, 0xc00f,\r
-+      0x0008, 0x0d02, 0x0000, 0x8060, 0x0000, 0x0400, 0x0003, 0x60c2,\r
-+      0x0003, 0x5817, 0x000b, 0x7ae0, 0x000b, 0x521c, 0x000b, 0xc813,\r
-+      0x0009, 0xbac0, 0x0000, 0x008a, 0x0003, 0x8813, 0x0000, 0x15fc,\r
-+      0x000b, 0xb013, 0x0009, 0xc4c0, 0x0000, 0x7000, 0x0001, 0xffa0,\r
-+      0x0000, 0x2000, 0x0003, 0x9394, 0x0008, 0x808c, 0x0000, 0x0001,\r
-+      0x0007, 0x0000, 0x0007, 0x0000, 0x0000, 0x40d4, 0x000a, 0x4047,\r
-+      0x0008, 0x808c, 0x0000, 0x0002, 0x0007, 0x0000, 0x0003, 0x082e,\r
-+      0x0000, 0x4022, 0x0003, 0x0034, 0x0008, 0x4122, 0x0009, 0xeac0,\r
-+      0x0008, 0xff00, 0x0009, 0xffe0, 0x0008, 0x0500, 0x0003, 0x0bbb,\r
-+      0x0002, 0x4447, 0x000b, 0x8bb8, 0x0008, 0x0bfe, 0x0001, 0x11a0,\r
-+      0x0003, 0x139a, 0x0001, 0x0ca0, 0x0003, 0x139a, 0x0001, 0x9180,\r
-+      0x0000, 0x0004, 0x0000, 0x8060, 0x0000, 0x0400, 0x0008, 0x7f62,\r
-+      0x0000, 0x8066, 0x0008, 0x0009, 0x000b, 0xc042, 0x0008, 0x808c,\r
-+      0x0008, 0x0000, 0x0008, 0x0060, 0x0008, 0x8062, 0x0000, 0x0004,\r
-+      0x0000, 0x8066, 0x0000, 0x0411, 0x0003, 0xc04a, 0x0000, 0x03fe,\r
-+      0x0001, 0x43e0, 0x0003, 0x8b97, 0x0009, 0xc2c0, 0x0008, 0x00ff,\r
-+      0x0001, 0x02e0, 0x0003, 0x8b97, 0x0001, 0x9180, 0x0008, 0x0005,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0008, 0x7f62, 0x0000, 0x8066,\r
-+      0x0000, 0x0019, 0x000b, 0xc059, 0x0002, 0x0240, 0x000b, 0x0b94,\r
-+      0x0008, 0x00fc, 0x0003, 0x3397, 0x000a, 0x0244, 0x000b, 0x086b,\r
-+      0x000c, 0x01f5, 0x0001, 0x9180, 0x0000, 0x0007, 0x0008, 0x7f62,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0002, 0x0234, 0x0008, 0x7f04,\r
-+      0x0000, 0x8066, 0x0000, 0x040a, 0x000b, 0xc06a, 0x000a, 0x0248,\r
-+      0x000b, 0x0875, 0x0001, 0x9180, 0x0008, 0x0006, 0x0008, 0x7f62,\r
-+      0x0008, 0x8002, 0x0008, 0x0003, 0x0000, 0x8066, 0x0000, 0x020a,\r
-+      0x000b, 0xc074, 0x0000, 0x112a, 0x0008, 0x002e, 0x0008, 0x022c,\r
-+      0x0002, 0x3a44, 0x0003, 0x8813, 0x0008, 0x808c, 0x0000, 0x0002,\r
-+      0x0008, 0x1760, 0x0008, 0x8062, 0x0008, 0x000f, 0x0000, 0x8066,\r
-+      0x0008, 0x0011, 0x000b, 0xc081, 0x0008, 0x01fe, 0x0009, 0x42e0,\r
-+      0x000b, 0x8b87, 0x0000, 0x00fe, 0x0001, 0x43e0, 0x000b, 0x8b87,\r
-+      0x0000, 0x1734, 0x0000, 0x1530, 0x0008, 0x1632, 0x0008, 0x0d2a,\r
-+      0x0001, 0x9880, 0x0008, 0x0012, 0x0000, 0x8060, 0x0000, 0x0400,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x1e0a, 0x000b, 0xc093,\r
-+      0x0008, 0x808a, 0x0008, 0x0003, 0x0000, 0x1a60, 0x0008, 0x8062,\r
-+      0x0000, 0x0002, 0x0003, 0x5899, 0x0000, 0x8066, 0x0000, 0x3679,\r
-+      0x000b, 0xc09c, 0x000b, 0x589d, 0x0008, 0x8054, 0x0008, 0x0011,\r
-+      0x0000, 0x8074, 0x0008, 0x1010, 0x0008, 0x1efc, 0x0003, 0x3013,\r
-+      0x0004, 0x00a6, 0x0003, 0x0013, 0x0000, 0x1c60, 0x0000, 0x1b62,\r
-+      0x0000, 0x8066, 0x0008, 0x0231, 0x000b, 0xc0aa, 0x000b, 0x58ab,\r
-+      0x0008, 0x0140, 0x0000, 0x0242, 0x0002, 0x1f43, 0x0003, 0x88b5,\r
-+      0x0000, 0x0d44, 0x0008, 0x0d46, 0x0008, 0x0348, 0x0008, 0x044a,\r
-+      0x0003, 0x00b9, 0x0008, 0x0344, 0x0008, 0x0446, 0x0008, 0x0548,\r
-+      0x0000, 0x064a, 0x000a, 0x1948, 0x000b, 0x08bc, 0x0008, 0x0d4a,\r
-+      0x000b, 0x58bc, 0x0008, 0x8054, 0x0000, 0x0001, 0x0000, 0x8074,\r
-+      0x0008, 0x2020, 0x000f, 0x4000, 0x0000, 0x4820, 0x0008, 0x0bfe,\r
-+      0x0009, 0x10a0, 0x0003, 0x1123, 0x0001, 0x0ca0, 0x0003, 0x1123,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080, 0x0000, 0x0008,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009, 0x000b, 0xc0cf,\r
-+      0x0001, 0x80e0, 0x0008, 0x0003, 0x000b, 0x8923, 0x0000, 0x49b4,\r
-+      0x0002, 0x4b4e, 0x000b, 0x892c, 0x0008, 0x808a, 0x0000, 0x0004,\r
-+      0x0000, 0x18fe, 0x0001, 0x10e0, 0x000b, 0x88dd, 0x0002, 0x192f,\r
-+      0x0008, 0x7f32, 0x0008, 0x15fe, 0x0001, 0x10e0, 0x000b, 0x88e2,\r
-+      0x0002, 0x162f, 0x0008, 0x7f2c, 0x0000, 0x8060, 0x0000, 0x0400,\r
-+      0x0009, 0x9080, 0x0000, 0x0007, 0x0008, 0x7f62, 0x0000, 0x8066,\r
-+      0x0008, 0x0009, 0x0003, 0xc0e9, 0x000a, 0x004f, 0x000b, 0x891a,\r
-+      0x000a, 0x0040, 0x0003, 0x0904, 0x0002, 0x004e, 0x0003, 0x0904,\r
-+      0x0002, 0x0030, 0x0002, 0x7f2f, 0x0000, 0x7f00, 0x0000, 0x8066,\r
-+      0x0008, 0x000a, 0x000b, 0xc0f5, 0x0008, 0x1010, 0x0004, 0x01dc,\r
-+      0x000b, 0xb0fd, 0x000c, 0x035b, 0x000c, 0x01c6, 0x000b, 0x7814,\r
-+      0x0003, 0x0013, 0x0000, 0x0806, 0x0008, 0x8010, 0x0000, 0x001f,\r
-+      0x000c, 0x035b, 0x0000, 0x0310, 0x000c, 0x035b, 0x0003, 0x00fb,\r
-+      0x000a, 0x002f, 0x0000, 0x7f00, 0x0000, 0x8066, 0x0008, 0x000a,\r
-+      0x000b, 0xc108, 0x000c, 0x019f, 0x000a, 0x0040, 0x000b, 0x091d,\r
-+      0x000c, 0x020c, 0x0000, 0x8000, 0x0000, 0x0002, 0x0000, 0x8060,\r
-+      0x0000, 0x0400, 0x0009, 0x9080, 0x0008, 0x0006, 0x0008, 0x7f62,\r
-+      0x0000, 0x8066, 0x0008, 0x000a, 0x000b, 0xc116, 0x0000, 0x8072,\r
-+      0x0000, 0x4000, 0x0003, 0x00fb, 0x0008, 0x8010, 0x0008, 0x001e,\r
-+      0x000b, 0x011f, 0x0008, 0x8010, 0x0008, 0x001d, 0x000c, 0x035b,\r
-+      0x0008, 0x1010, 0x000c, 0x035b, 0x000b, 0x0014, 0x0002, 0x4b4e,\r
-+      0x0003, 0x0929, 0x0008, 0x808a, 0x0000, 0x0004, 0x000b, 0x6129,\r
-+      0x000f, 0x8000, 0x0008, 0x808a, 0x0000, 0x0004, 0x000b, 0x0014,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080, 0x0008, 0x0011,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009, 0x0003, 0xc133,\r
-+      0x000a, 0x004f, 0x0003, 0x8990, 0x0000, 0x8060, 0x0000, 0x0400,\r
-+      0x0009, 0x9080, 0x0008, 0x0005, 0x0008, 0x7f62, 0x0000, 0x8066,\r
-+      0x0008, 0x0009, 0x000b, 0xc13d, 0x0008, 0x0060, 0x0008, 0x8062,\r
-+      0x0000, 0x001f, 0x0000, 0x8066, 0x0000, 0x0209, 0x000b, 0xc143,\r
-+      0x000a, 0x014b, 0x000b, 0x0990, 0x0008, 0x8062, 0x0008, 0x000f,\r
-+      0x0000, 0x8066, 0x0000, 0x0211, 0x000b, 0xc14a, 0x0008, 0x01fe,\r
-+      0x0001, 0x02d0, 0x0003, 0x8990, 0x0004, 0x01a8, 0x000b, 0x0990,\r
-+      0x0008, 0x03a0, 0x0008, 0x8004, 0x0000, 0x0002, 0x0000, 0x8006,\r
-+      0x0000, 0x0043, 0x0008, 0x4908, 0x0008, 0x808a, 0x0000, 0x0004,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080, 0x0008, 0x0000,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x041a, 0x0003, 0xc15f,\r
-+      0x000b, 0xe160, 0x0008, 0x4908, 0x0008, 0x480a, 0x0008, 0x808a,\r
-+      0x0000, 0x0004, 0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x002b,\r
-+      0x0000, 0x8066, 0x0000, 0x0411, 0x0003, 0xc16a, 0x0008, 0x04fe,\r
-+      0x0009, 0x02a0, 0x0003, 0x9171, 0x0002, 0x0500, 0x000b, 0x098d,\r
-+      0x0003, 0x0172, 0x0000, 0x05fe, 0x0001, 0x03a0, 0x000b, 0x118d,\r
-+      0x0000, 0x0d0c, 0x0008, 0x0d0e, 0x0008, 0x0d10, 0x0000, 0x0d12,\r
-+      0x0008, 0x0060, 0x0008, 0x8062, 0x0000, 0x000d, 0x0000, 0x8066,\r
-+      0x0008, 0x0832, 0x0003, 0xc17d, 0x0000, 0x800a, 0x0000, 0x8005,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0009, 0x9080, 0x0008, 0x0011,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0a12, 0x0003, 0xc187,\r
-+      0x0008, 0x5006, 0x0008, 0x100e, 0x0004, 0x01b3, 0x000b, 0x7814,\r
-+      0x0003, 0x0013, 0x0008, 0x0208, 0x0008, 0x030a, 0x0003, 0x0174,\r
-+      0x000c, 0x019f, 0x0008, 0x808a, 0x0000, 0x0004, 0x0008, 0x8010,\r
-+      0x0008, 0x0021, 0x000c, 0x035b, 0x0008, 0x1010, 0x000c, 0x035b,\r
-+      0x0000, 0x4810, 0x000c, 0x035b, 0x0008, 0x4910, 0x000c, 0x035b,\r
-+      0x0008, 0x808a, 0x0000, 0x0004, 0x000b, 0x0014, 0x0000, 0x8060,\r
-+      0x0000, 0x0400, 0x0009, 0x9080, 0x0000, 0x0002, 0x0008, 0x7f62,\r
-+      0x0000, 0x8066, 0x0008, 0xb40a, 0x0003, 0xc1a6, 0x000f, 0x4000,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x0a62, 0x0000, 0x8066,\r
-+      0x0000, 0x0411, 0x000b, 0xc1ad, 0x0002, 0x0210, 0x0001, 0xffc0,\r
-+      0x0000, 0x0007, 0x0009, 0x03e0, 0x000f, 0x4000, 0x0000, 0x8060,\r
-+      0x0000, 0x0400, 0x0001, 0x8380, 0x0000, 0x0002, 0x0009, 0x0a80,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0000, 0x0e0a, 0x0003, 0xc1bb,\r
-+      0x0002, 0x0300, 0x0001, 0xffc0, 0x0000, 0x0007, 0x0000, 0x7f06,\r
-+      0x0002, 0x0a00, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x060a,\r
-+      0x000b, 0xc1c4, 0x000f, 0x4000, 0x0000, 0x0da0, 0x0008, 0x0da2,\r
-+      0x0008, 0x0da4, 0x0009, 0x8880, 0x0000, 0x0001, 0x0008, 0x7f62,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x8066, 0x0008, 0xa012,\r
-+      0x0000, 0x0da6, 0x0008, 0x0da8, 0x0000, 0x0daa, 0x0000, 0x0dac,\r
-+      0x0003, 0xc1d4, 0x0009, 0x8880, 0x0008, 0x0009, 0x0008, 0x7f62,\r
-+      0x0000, 0x8066, 0x0008, 0xa03a, 0x000b, 0xc1da, 0x000f, 0x4000,\r
-+      0x0009, 0x8880, 0x0008, 0x0005, 0x0000, 0x8060, 0x0000, 0x0400,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009, 0x000b, 0xc1e3,\r
-+      0x0008, 0x0060, 0x0008, 0x8062, 0x0000, 0x000d, 0x0000, 0x8066,\r
-+      0x0008, 0x0021, 0x000b, 0xc1e9, 0x0000, 0x00fe, 0x0001, 0x01d0,\r
-+      0x000b, 0x89f2, 0x0008, 0x02fe, 0x0009, 0x03d0, 0x0003, 0x09f2,\r
-+      0x0000, 0x0d06, 0x000f, 0x4000, 0x0000, 0x8006, 0x0000, 0x0001,\r
-+      0x000f, 0x4000, 0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x002b,\r
-+      0x0000, 0x8066, 0x0008, 0xa041, 0x0003, 0xc1fa, 0x0002, 0x0243,\r
-+      0x000b, 0x8a01, 0x0000, 0x54ac, 0x0000, 0x55ae, 0x0008, 0x0da8,\r
-+      0x0000, 0x0daa, 0x0000, 0x50b0, 0x0000, 0x51b2, 0x0000, 0x0db4,\r
-+      0x0008, 0x0db6, 0x0008, 0x0060, 0x0008, 0x8062, 0x0000, 0x0007,\r
-+      0x0000, 0x8066, 0x0008, 0xa452, 0x0003, 0xc20a, 0x000f, 0x4000,\r
-+      0x000a, 0x3945, 0x000b, 0x8a16, 0x0000, 0x8072, 0x0008, 0x4040,\r
-+      0x0007, 0x0000, 0x000a, 0x3945, 0x0003, 0x8a14, 0x000f, 0x4000,\r
-+      0x0000, 0x8072, 0x0000, 0x4000, 0x0007, 0x0000, 0x0007, 0x0000,\r
-+      0x0007, 0x0000, 0x000a, 0x3945, 0x0003, 0x0a0e, 0x000b, 0x0216,\r
-+      0x000a, 0x3a40, 0x000b, 0x8817, 0x0008, 0x2b24, 0x0008, 0x2b24,\r
-+      0x0003, 0x5a20, 0x0008, 0x8054, 0x0000, 0x0002, 0x0002, 0x1242,\r
-+      0x0003, 0x0a64, 0x000a, 0x3a45, 0x000b, 0x0a55, 0x000a, 0x1e10,\r
-+      0x0000, 0x7f3c, 0x0003, 0x0a52, 0x0002, 0x1d00, 0x0000, 0x7f3a,\r
-+      0x0000, 0x0d60, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009,\r
-+      0x0003, 0xc230, 0x0008, 0x00fc, 0x0003, 0xb24f, 0x0000, 0x1c60,\r
-+      0x0008, 0x8062, 0x0000, 0x0001, 0x0000, 0x8066, 0x0008, 0x0009,\r
-+      0x000b, 0xc238, 0x0008, 0x00fc, 0x0003, 0x3370, 0x0000, 0x0038,\r
-+      0x0008, 0x0060, 0x0008, 0x8062, 0x0000, 0x0019, 0x0000, 0x8066,\r
-+      0x0008, 0x0009, 0x0003, 0xc241, 0x0009, 0x80c0, 0x0008, 0x00ff,\r
-+      0x0008, 0x7f3e, 0x0000, 0x0d60, 0x0008, 0x0efe, 0x0001, 0x1f80,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009, 0x0003, 0xc24b,\r
-+      0x0008, 0x003a, 0x0000, 0x1dfe, 0x000b, 0x022c, 0x0008, 0x0036,\r
-+      0x0004, 0x00a6, 0x000b, 0x0264, 0x0000, 0x8074, 0x0000, 0x2000,\r
-+      0x000b, 0x0264, 0x0002, 0x3a44, 0x000b, 0x0b9d, 0x0000, 0x8074,\r
-+      0x0000, 0x1000, 0x0000, 0x2d0e, 0x0000, 0x2d0e, 0x000b, 0xb36d,\r
-+      0x0008, 0x26fe, 0x0008, 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700,\r
-+      0x0009, 0x00d0, 0x0003, 0x8a74, 0x0000, 0x8074, 0x0008, 0x4040,\r
-+      0x0003, 0x5a64, 0x000b, 0x521c, 0x000a, 0x3a46, 0x0003, 0x8a74,\r
-+      0x0002, 0x3a47, 0x000b, 0x0a6f, 0x0008, 0x8054, 0x0000, 0x0004,\r
-+      0x0000, 0x8074, 0x0000, 0x8000, 0x0003, 0x02d4, 0x0009, 0x92c0,\r
-+      0x0000, 0x0fc8, 0x000b, 0x0813, 0x000a, 0x1246, 0x0003, 0x8b67,\r
-+      0x0000, 0x1a60, 0x0008, 0x8062, 0x0000, 0x0002, 0x0000, 0x8066,\r
-+      0x0000, 0x367a, 0x000b, 0xc279, 0x0009, 0x92c0, 0x0008, 0x0780,\r
-+      0x000b, 0x8b81, 0x0002, 0x124b, 0x000b, 0x0a82, 0x0002, 0x2e4d,\r
-+      0x0002, 0x2e4d, 0x000b, 0x0b6d, 0x000a, 0x3a46, 0x000b, 0x8a92,\r
-+      0x000b, 0x5a84, 0x0008, 0x8054, 0x0000, 0x0004, 0x000a, 0x1243,\r
-+      0x000b, 0x0ad2, 0x0008, 0x8010, 0x0000, 0x000d, 0x000c, 0x035b,\r
-+      0x000a, 0x1948, 0x0003, 0x0a8f, 0x0004, 0x0350, 0x0000, 0x1810,\r
-+      0x000c, 0x035b, 0x0003, 0x02d2, 0x000a, 0x1948, 0x000b, 0x0a96,\r
-+      0x000a, 0x1243, 0x000b, 0x0b70, 0x000a, 0x194d, 0x000b, 0x0a9a,\r
-+      0x000a, 0x1243, 0x0003, 0x0b77, 0x000b, 0x5a9a, 0x0008, 0x8054,\r
-+      0x0000, 0x0004, 0x000a, 0x192e, 0x0008, 0x7f32, 0x000a, 0x1947,\r
-+      0x000b, 0x0acc, 0x0002, 0x194f, 0x000b, 0x0aaa, 0x0004, 0x0350,\r
-+      0x0000, 0x1810, 0x0004, 0x01dc, 0x000b, 0xb2c5, 0x000c, 0x035b,\r
-+      0x000c, 0x01c6, 0x0003, 0x02d2, 0x0000, 0x1a60, 0x0008, 0x8062,\r
-+      0x0000, 0x001f, 0x0000, 0x8066, 0x0008, 0x0009, 0x0003, 0xc2af,\r
-+      0x000a, 0x004c, 0x0003, 0x8acc, 0x0000, 0x8060, 0x0000, 0x0400,\r
-+      0x0001, 0x9880, 0x0000, 0x0007, 0x0008, 0x7f62, 0x0000, 0x8066,\r
-+      0x0000, 0x320a, 0x000b, 0xc2b9, 0x0000, 0x8060, 0x0000, 0x0400,\r
-+      0x0001, 0x9880, 0x0008, 0x0012, 0x0008, 0x7f62, 0x0000, 0x8066,\r
-+      0x0008, 0x1e0a, 0x000b, 0xc2c1, 0x0000, 0x1826, 0x0000, 0x1928,\r
-+      0x0003, 0x02d2, 0x0000, 0x0806, 0x0008, 0x8010, 0x0000, 0x001f,\r
-+      0x000c, 0x035b, 0x0000, 0x0310, 0x000c, 0x035b, 0x0003, 0x02d2,\r
-+      0x0004, 0x0350, 0x0008, 0x8010, 0x0000, 0x0001, 0x000c, 0x035b,\r
-+      0x0000, 0x1810, 0x000c, 0x035b, 0x0000, 0x8074, 0x0008, 0xf000,\r
-+      0x0000, 0x0d30, 0x0002, 0x3a42, 0x000b, 0x8ada, 0x0000, 0x15fc,\r
-+      0x000b, 0xb07a, 0x0003, 0x0013, 0x0000, 0x8074, 0x0000, 0x0501,\r
-+      0x0008, 0x8010, 0x0008, 0x000c, 0x000c, 0x035b, 0x0003, 0x0013,\r
-+      0x0009, 0xbbe0, 0x0008, 0x0030, 0x0003, 0x8af6, 0x0000, 0x18fe,\r
-+      0x0009, 0x3ce0, 0x000b, 0x0af3, 0x0008, 0x15fe, 0x0009, 0x3ce0,\r
-+      0x000b, 0x0af3, 0x0008, 0x13fe, 0x0009, 0x3ce0, 0x000b, 0x8aef,\r
-+      0x000c, 0x0349, 0x0008, 0x0d26, 0x0003, 0x02f0, 0x0004, 0x034b,\r
-+      0x0008, 0x8076, 0x0000, 0x0040, 0x0003, 0x0346, 0x0008, 0x8076,\r
-+      0x0008, 0x0041, 0x0003, 0x0346, 0x0009, 0xbbe0, 0x0000, 0x0032,\r
-+      0x000b, 0x8afb, 0x0008, 0x3c1e, 0x0003, 0x0346, 0x0009, 0xbbe0,\r
-+      0x0000, 0x003b, 0x000b, 0x8b00, 0x0000, 0x3cdc, 0x0003, 0x0346,\r
-+      0x0009, 0xbbe0, 0x0008, 0x0035, 0x000b, 0x8b06, 0x0000, 0x8072,\r
-+      0x0000, 0x8000, 0x0003, 0x04aa, 0x0009, 0xbbe0, 0x0008, 0x0036,\r
-+      0x000b, 0x0bcd, 0x0009, 0xbbe0, 0x0000, 0x0037, 0x000b, 0x8b27,\r
-+      0x0000, 0x18fe, 0x0009, 0x3ce0, 0x0003, 0x8af3, 0x0008, 0x8076,\r
-+      0x0000, 0x0040, 0x0000, 0x1a60, 0x0008, 0x8062, 0x0000, 0x000d,\r
-+      0x0008, 0x2604, 0x0008, 0x2604, 0x0008, 0x2706, 0x0008, 0x2706,\r
-+      0x0000, 0x2808, 0x0000, 0x2808, 0x0000, 0x290a, 0x0000, 0x290a,\r
-+      0x0000, 0x8066, 0x0000, 0x0422, 0x000b, 0xc31e, 0x0004, 0x0350,\r
-+      0x0008, 0x8054, 0x0000, 0x0004, 0x0000, 0x8074, 0x0008, 0xf000,\r
-+      0x0000, 0x8072, 0x0000, 0x8000, 0x0003, 0x02d4, 0x0009, 0xbbe0,\r
-+      0x0000, 0x0038, 0x000b, 0x8b39, 0x0000, 0x18fe, 0x0009, 0x3ce0,\r
-+      0x0003, 0x0b36, 0x0008, 0x15fe, 0x0009, 0x3ce0, 0x000b, 0x8ae9,\r
-+      0x0004, 0x034b, 0x0008, 0x8076, 0x0000, 0x0040, 0x0000, 0x8072,\r
-+      0x0000, 0x8000, 0x0003, 0x0394, 0x0008, 0x8076, 0x0008, 0x0042,\r
-+      0x0003, 0x0346, 0x0009, 0xbbe0, 0x0000, 0x0016, 0x0003, 0x8b46,\r
-+      0x0000, 0x8074, 0x0008, 0x0808, 0x0002, 0x3a44, 0x0003, 0x8816,\r
-+      0x0000, 0x8074, 0x0000, 0x0800, 0x0000, 0x8072, 0x0000, 0x8000,\r
-+      0x000f, 0x8000, 0x0003, 0x0013, 0x0000, 0x8072, 0x0000, 0x8000,\r
-+      0x0003, 0x0013, 0x0002, 0x1430, 0x0003, 0x034c, 0x000a, 0x3d30,\r
-+      0x0000, 0x7f00, 0x0001, 0xbc80, 0x0000, 0x0007, 0x0003, 0x0354,\r
-+      0x000a, 0x1930, 0x0000, 0x7f00, 0x0001, 0x9880, 0x0000, 0x0007,\r
-+      0x0000, 0x8060, 0x0000, 0x0400, 0x0008, 0x7f62, 0x0000, 0x8066,\r
-+      0x0008, 0x000a, 0x000b, 0xc359, 0x000f, 0x4000, 0x000b, 0x235b,\r
-+      0x0008, 0x0870, 0x000f, 0x4000, 0x0009, 0xbac0, 0x0008, 0x0090,\r
-+      0x000b, 0x0b64, 0x0000, 0x8074, 0x0000, 0x0706, 0x000b, 0x0366,\r
-+      0x0000, 0x8074, 0x0000, 0x0703, 0x000f, 0x4000, 0x0008, 0x8010,\r
-+      0x0000, 0x0023, 0x0003, 0x03a2, 0x0008, 0x8010, 0x0000, 0x0008,\r
-+      0x0003, 0x03a2, 0x0008, 0x8010, 0x0008, 0x0022, 0x0003, 0x03a2,\r
-+      0x0004, 0x0350, 0x0008, 0x8010, 0x0000, 0x0007, 0x000c, 0x035b,\r
-+      0x0000, 0x1810, 0x000c, 0x035b, 0x000b, 0x03ac, 0x0004, 0x0350,\r
-+      0x0008, 0x8010, 0x0008, 0x001b, 0x000c, 0x035b, 0x0000, 0x1810,\r
-+      0x000c, 0x035b, 0x0000, 0x8074, 0x0000, 0xf080, 0x0000, 0x0d30,\r
-+      0x0003, 0x0013, 0x0008, 0x8010, 0x0008, 0x0009, 0x0003, 0x03a2,\r
-+      0x0008, 0x8010, 0x0008, 0x0005, 0x0003, 0x03a2, 0x000a, 0x1648,\r
-+      0x000b, 0x8888, 0x0008, 0x808c, 0x0000, 0x0001, 0x0007, 0x0000,\r
-+      0x0008, 0x8010, 0x0000, 0x0004, 0x000a, 0x4143, 0x0003, 0x0888,\r
-+      0x0002, 0x3a44, 0x0003, 0x8813, 0x0008, 0x0d2a, 0x0003, 0x03a2,\r
-+      0x0008, 0x8010, 0x0008, 0x0003, 0x0003, 0x03a4, 0x0008, 0x8010,\r
-+      0x0000, 0x000b, 0x0003, 0x03a4, 0x0008, 0x8010, 0x0000, 0x0002,\r
-+      0x0003, 0x03a4, 0x0002, 0x3a47, 0x000b, 0x8a64, 0x0008, 0x8010,\r
-+      0x0008, 0x0006, 0x0003, 0x03a4, 0x0000, 0x8074, 0x0008, 0xf000,\r
-+      0x000c, 0x035b, 0x000c, 0x035e, 0x000a, 0x3a40, 0x000b, 0x0813,\r
-+      0x0008, 0x8010, 0x0008, 0x000c, 0x000c, 0x035b, 0x0003, 0x0013,\r
-+      0x0000, 0x8074, 0x0000, 0xf080, 0x0000, 0x0d30, 0x0002, 0x2e4d,\r
-+      0x0002, 0x2e4d, 0x000b, 0x0bb5, 0x0008, 0x8054, 0x0000, 0x0019,\r
-+      0x0003, 0x0013, 0x0008, 0x8054, 0x0008, 0x0009, 0x0003, 0x0013,\r
-+      0x0002, 0x3a44, 0x0003, 0x8813, 0x0003, 0x0397, 0x0008, 0x808c,\r
-+      0x0008, 0x0000, 0x0002, 0x4447, 0x0003, 0x0be1, 0x0001, 0xc0c0,\r
-+      0x0008, 0x00ff, 0x0009, 0xffe0, 0x0008, 0x00ff, 0x000b, 0x8bb8,\r
-+      0x0001, 0xc1e0, 0x0008, 0xffff, 0x000b, 0x8bb8, 0x0008, 0x8010,\r
-+      0x0000, 0x0013, 0x000c, 0x035b, 0x0000, 0x8074, 0x0008, 0x0202,\r
-+      0x0003, 0x0013, 0x000a, 0x3a40, 0x000b, 0x8bde, 0x0000, 0x8074,\r
-+      0x0000, 0x0200, 0x0000, 0x3d00, 0x0000, 0x3cfe, 0x0000, 0x8072,\r
-+      0x0000, 0x8000, 0x0001, 0x43e0, 0x0003, 0x8bdc, 0x0000, 0x42fe,\r
-+      0x0001, 0xffc0, 0x0008, 0x00ff, 0x0009, 0x00e0, 0x0003, 0x0bb8,\r
-+      0x0008, 0x0d08, 0x000b, 0x0431, 0x0000, 0x8072, 0x0000, 0x8000,\r
-+      0x0003, 0x0013, 0x0004, 0x04b3, 0x0008, 0x808c, 0x0000, 0x0001,\r
-+      0x0000, 0x04fc, 0x0003, 0x3496, 0x0000, 0x0460, 0x0008, 0x8062,\r
-+      0x0000, 0x0001, 0x0000, 0x8066, 0x0008, 0x0009, 0x000b, 0xc3eb,\r
-+      0x0000, 0x0004, 0x0009, 0x80c0, 0x0008, 0x00ff, 0x0000, 0x7f00,\r
-+      0x0001, 0x80e0, 0x0000, 0x0004, 0x000b, 0x0c05, 0x0001, 0x80e0,\r
-+      0x0008, 0x0005, 0x000b, 0x0c05, 0x0001, 0x80e0, 0x0008, 0x0006,\r
-+      0x000b, 0x0c05, 0x0001, 0x82c0, 0x0008, 0xff00, 0x0008, 0x7f04,\r
-+      0x0009, 0x82e0, 0x0008, 0x0600, 0x000b, 0x0c05, 0x0009, 0x82e0,\r
-+      0x0008, 0x0500, 0x000b, 0x0c05, 0x0009, 0x82e0, 0x0000, 0x0400,\r
-+      0x0003, 0x8c96, 0x0009, 0xc4c0, 0x0000, 0x7000, 0x0009, 0xffe0,\r
-+      0x0000, 0x1000, 0x0003, 0x0c31, 0x0004, 0x04a4, 0x0002, 0x3941,\r
-+      0x0003, 0x0c10, 0x0000, 0x8072, 0x0000, 0x0400, 0x0003, 0x0013,\r
-+      0x0000, 0x0460, 0x0008, 0x80fe, 0x0008, 0x002b, 0x0008, 0x7f62,\r
-+      0x0000, 0x8066, 0x0008, 0x2209, 0x000b, 0xc416, 0x0008, 0x11fc,\r
-+      0x000b, 0x342c, 0x0001, 0x9180, 0x0000, 0x0002, 0x0000, 0x8060,\r
-+      0x0000, 0x0400, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0609,\r
-+      0x000b, 0xc420, 0x0000, 0x42fe, 0x0001, 0xffc0, 0x0008, 0xff00,\r
-+      0x0009, 0x03e0, 0x000b, 0x8c29, 0x0000, 0x8072, 0x0000, 0x0400,\r
-+      0x0003, 0x0052, 0x0001, 0x9180, 0x0008, 0x0003, 0x000b, 0x0413,\r
-+      0x0000, 0x8072, 0x0000, 0x0400, 0x0008, 0x8010, 0x0000, 0x0010,\r
-+      0x000b, 0x0489, 0x0004, 0x04a4, 0x0002, 0x3941, 0x0003, 0x0c37,\r
-+      0x0000, 0x8072, 0x0000, 0x0400, 0x0003, 0x0013, 0x0004, 0x046e,\r
-+      0x0008, 0x11fc, 0x000b, 0xb43f, 0x0000, 0x8072, 0x0000, 0x0400,\r
-+      0x0008, 0x8010, 0x0000, 0x000e, 0x000b, 0x0489, 0x0000, 0x8060,\r
-+      0x0000, 0x0400, 0x0000, 0x04fc, 0x0003, 0xb454, 0x0008, 0x808c,\r
-+      0x0008, 0x0000, 0x0001, 0x9180, 0x0008, 0x0005, 0x0008, 0x7f62,\r
-+      0x0000, 0x8066, 0x0008, 0x0009, 0x000b, 0xc44a, 0x0008, 0x0060,\r
-+      0x0008, 0x8062, 0x0008, 0x001b, 0x0008, 0x4304, 0x0008, 0x4206,\r
-+      0x0000, 0x8066, 0x0000, 0x0412, 0x000b, 0xc452, 0x000b, 0x046b,\r
-+      0x0008, 0x808c, 0x0000, 0x0001, 0x0000, 0x0460, 0x0008, 0x8062,\r
-+      0x0008, 0x002b, 0x0000, 0x8066, 0x0008, 0x0609, 0x000b, 0xc45b,\r
-+      0x0000, 0x8066, 0x0008, 0x220a, 0x000b, 0xc45e, 0x0000, 0x42fe,\r
-+      0x0001, 0xffc0, 0x0008, 0xff00, 0x0008, 0x7f04, 0x0000, 0x8060,\r
-+      0x0000, 0x0400, 0x0001, 0x9180, 0x0000, 0x0002, 0x0008, 0x7f62,\r
-+      0x0000, 0x8066, 0x0008, 0x041a, 0x0003, 0xc46a, 0x0000, 0x8072,\r
-+      0x0000, 0x0400, 0x0003, 0x0052, 0x0000, 0x8060, 0x0000, 0x0400,\r
-+      0x0008, 0x6b62, 0x0000, 0x8066, 0x0000, 0x0411, 0x000b, 0xc473,\r
-+      0x0008, 0x02fe, 0x0009, 0x03e0, 0x000b, 0x8c79, 0x0000, 0x0d22,\r
-+      0x000f, 0x4000, 0x0009, 0x8280, 0x0000, 0x0002, 0x0001, 0x6b80,\r
-+      0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x2209, 0x000b, 0xc47f,\r
-+      0x000a, 0x0200, 0x0001, 0xffc0, 0x0000, 0x0007, 0x0000, 0x7f06,\r
-+      0x0008, 0x6b62, 0x0000, 0x8066, 0x0008, 0x060a, 0x0003, 0xc487,\r
-+      0x000f, 0x4000, 0x0002, 0x3a44, 0x0003, 0x8813, 0x000a, 0x2f44,\r
-+      0x000a, 0x2f44, 0x0003, 0x8b97, 0x0008, 0x808a, 0x0008, 0x0003,\r
-+      0x0000, 0x8074, 0x0000, 0xf080, 0x0003, 0x5c92, 0x0008, 0x8054,\r
-+      0x0000, 0x0019, 0x0003, 0x0013, 0x0002, 0x3a44, 0x0003, 0x8813,\r
-+      0x0008, 0x808c, 0x0008, 0x0000, 0x0008, 0x8010, 0x0008, 0x0011,\r
-+      0x000c, 0x035b, 0x0000, 0x42fe, 0x0001, 0xffc0, 0x0008, 0x00ff,\r
-+      0x0008, 0x7f10, 0x000c, 0x035b, 0x0008, 0x4310, 0x0003, 0x03a4,\r
-+      0x0002, 0x3941, 0x0003, 0x0ca7, 0x000f, 0x4000, 0x0000, 0x8072,\r
-+      0x0008, 0x0404, 0x000f, 0x4000, 0x0008, 0x8010, 0x0008, 0x0012,\r
-+      0x000c, 0x035b, 0x0004, 0x046e, 0x0000, 0x1110, 0x000c, 0x035b,\r
-+      0x0008, 0x11fc, 0x0003, 0xb4ad, 0x0003, 0x0013, 0x0009, 0xc2c0,\r
-+      0x0008, 0x00ff, 0x0000, 0x7f00, 0x0001, 0xc3c0, 0x0008, 0xff00,\r
-+      0x0009, 0x00d0, 0x000b, 0x0cd8, 0x0000, 0x0d0a, 0x0001, 0x8580,\r
-+      0x0000, 0x1000, 0x0008, 0x7f62, 0x0000, 0x8060, 0x0000, 0x0400,\r
-+      0x0000, 0x8066, 0x0000, 0x0809, 0x000b, 0xc4c2, 0x0000, 0x04fc,\r
-+      0x0003, 0x34d1, 0x0000, 0x0460, 0x0008, 0x8062, 0x0000, 0x0004,\r
-+      0x0000, 0x8066, 0x0000, 0x0211, 0x0003, 0xc4ca, 0x0008, 0x01fe,\r
-+      0x0009, 0x00e0, 0x0003, 0x8cd1, 0x0008, 0x02fe, 0x0001, 0x43e0,\r
-+      0x000b, 0x0cd7, 0x0002, 0x0500, 0x0000, 0x7f0a, 0x0009, 0xffe0,\r
-+      0x0000, 0x0800, 0x0003, 0x8cbb, 0x0008, 0x0d08, 0x000f, 0x4000,\r
-+      0x0008, 0x43fe, 0x0001, 0x3e80, 0x0000, 0x0d60, 0x0008, 0x7f62,\r
-+      0x0000, 0x8066, 0x0000, 0x0809, 0x0003, 0xc4de, 0x0000, 0x8060,\r
-+      0x0000, 0x0400, 0x0001, 0x84c0, 0x0008, 0xff00, 0x0002, 0x7f70,\r
-+      0x0009, 0xff80, 0x0000, 0x1000, 0x0008, 0x7f62, 0x0000, 0x8066,\r
-+      0x0000, 0x0809, 0x000b, 0xc4e9, 0x000f, 0x4000, 0xe55a, 0x71f6\r
-+};\r
-+unsigned short rseqipx_code_length01 = 0x09d8;\r
-+/*\r
-+ *\r
-+ */\r
-+\r
-+unsigned long xseqipx_code_addr01 = 0x0001e000 ;\r
-+unsigned short xseqipx_code01[] = { \r
-+0x0013, 0x0003, 0x0000, 0x1082, 0x0001, 0xe000, 0x0005, 0x0032,\r
-+      0x0000, 0x0010, 0x0015, 0x0033, 0x0010, 0xbb39, 0x000b, 0x8007,\r
-+      0x0004, 0x010b, 0x0014, 0x011d, 0x0010, 0xc000, 0x0000, 0xc001,\r
-+      0x0000, 0xc0b0, 0x0010, 0xc0b1, 0x0010, 0xc0b2, 0x0000, 0xc0b3,\r
-+      0x0010, 0xc0b4, 0x0000, 0xc0b5, 0x0000, 0xc0b6, 0x0010, 0xc0b7,\r
-+      0x0010, 0xc0b8, 0x0000, 0xc0b9, 0x0000, 0xc0ba, 0x0000, 0xc0c2,\r
-+      0x0010, 0xc0c3, 0x0000, 0xc0c4, 0x0010, 0xc0c5, 0x0010, 0xc0c6,\r
-+      0x0000, 0xc0c7, 0x0000, 0xc0c8, 0x0010, 0xc0c9, 0x0010, 0xc0ca,\r
-+      0x0000, 0xc0cb, 0x0010, 0xc0cc, 0x0000, 0xc0cd, 0x0000, 0xc0ce,\r
-+      0x0010, 0xc0cf, 0x0015, 0x0039, 0x0010, 0xff00, 0x0015, 0x003a,\r
-+      0x0010, 0xff00, 0x0005, 0x00d0, 0x0010, 0xff00, 0x0015, 0x00d1,\r
-+      0x0010, 0xff00, 0x0012, 0x3a40, 0x000b, 0x1031, 0x0002, 0x7940,\r
-+      0x001b, 0x112f, 0x0002, 0x3a42, 0x001b, 0x1035, 0x0003, 0xb035,\r
-+      0x0003, 0xa1d8, 0x0002, 0x3a41, 0x001b, 0x1039, 0x0012, 0x7941,\r
-+      0x000b, 0x12f6, 0x0003, 0xe055, 0x0012, 0xd042, 0x0003, 0x103f,\r
-+      0x0000, 0x75ff, 0x0002, 0xff41, 0x001b, 0x1055, 0x0000, 0x0cfe,\r
-+      0x0003, 0x6049, 0x0002, 0x3a44, 0x000b, 0x1049, 0x0011, 0x02e8,\r
-+      0x0010, 0x0000, 0x0013, 0x1383, 0x0011, 0x02e8, 0x0010, 0x0005,\r
-+      0x0003, 0x1413, 0x0012, 0x3a46, 0x001b, 0x1055, 0x0012, 0xd042,\r
-+      0x0003, 0x1050, 0x0000, 0x75ff, 0x0012, 0xff40, 0x001b, 0x1055,\r
-+      0x0000, 0x12fe, 0x0013, 0x6055, 0x0001, 0x0fe8, 0x0010, 0x0000,\r
-+      0x0013, 0x1619, 0x0015, 0x0030, 0x0000, 0x0400, 0x0010, 0xc131,\r
-+      0x0015, 0x0033, 0x0010, 0xb211, 0x001b, 0x805a, 0x0010, 0xb2ff,\r
-+      0x0001, 0xb3e0, 0x001c, 0x10cd, 0x000b, 0xf02d, 0x0011, 0x3be8,\r
-+      0x0000, 0x0010, 0x001b, 0x1072, 0x0000, 0x0afe, 0x000b, 0x6066,\r
-+      0x0000, 0x3c0b, 0x0003, 0x006e, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0001, 0x0a88, 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0x3c0a, 0x000b, 0x806d, 0x0010, 0x3c0a, 0x0002, 0x0c00,\r
-+      0x0010, 0xff0c, 0x0013, 0x00ca, 0x0011, 0x3be8, 0x0010, 0x0012,\r
-+      0x000b, 0x1085, 0x0010, 0x08fe, 0x001b, 0x6079, 0x0010, 0x3c09,\r
-+      0x0013, 0x0081, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0888,\r
-+      0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0x3c0a,\r
-+      0x000b, 0x8080, 0x0000, 0x3c08, 0x0002, 0x0c00, 0x0010, 0xff0c,\r
-+      0x0013, 0x00ca, 0x0011, 0x3be8, 0x0000, 0x0013, 0x001b, 0x108b,\r
-+      0x0000, 0x3cb0, 0x0004, 0x00dd, 0x0013, 0x00ca, 0x0011, 0x3be8,\r
-+      0x0000, 0x0019, 0x000b, 0x109e, 0x0010, 0x04fe, 0x001b, 0x6092,\r
-+      0x0010, 0x3c05, 0x0013, 0x009a, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0488, 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0x3c0a, 0x001b, 0x8099, 0x0000, 0x3c04, 0x0002, 0x0c00,\r
-+      0x0010, 0xff0c, 0x0013, 0x00ca, 0x0011, 0x3be8, 0x0000, 0x0015,\r
-+      0x001b, 0x10aa, 0x0014, 0x0114, 0x0004, 0x0126, 0x0015, 0x0039,\r
-+      0x0000, 0x8000, 0x0017, 0x8000, 0x0004, 0x010b, 0x0014, 0x011d,\r
-+      0x0004, 0x00f6, 0x0013, 0x002d, 0x0011, 0x3be8, 0x0000, 0x0016,\r
-+      0x000b, 0x10bc, 0x0001, 0x0fe8, 0x0010, 0x0000, 0x0013, 0x10b6,\r
-+      0x0001, 0x0fe8, 0x0000, 0x0002, 0x0013, 0x10b6, 0x0015, 0x0039,\r
-+      0x0010, 0x1010, 0x0013, 0x00ca, 0x0015, 0x0039, 0x0000, 0x5040,\r
-+      0x0015, 0x00b8, 0x0000, 0x0008, 0x0004, 0x083d, 0x0013, 0x00ca,\r
-+      0x0011, 0x3be8, 0x0010, 0x0017, 0x000b, 0x10c1, 0x0010, 0x3cc3,\r
-+      0x0013, 0x00ca, 0x0011, 0x3be8, 0x0010, 0x0018, 0x001b, 0x10c6,\r
-+      0x0000, 0x3cc2, 0x0013, 0x00ca, 0x0005, 0x00ce, 0x0000, 0x0001,\r
-+      0x0000, 0x3bcf, 0x0004, 0x0801, 0x0015, 0x0039, 0x0000, 0x8000,\r
-+      0x0013, 0x002d, 0x0001, 0xb288, 0x0000, 0x0002, 0x0001, 0xc180,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x80d3,\r
-+      0x0002, 0xb200, 0x0011, 0xffc8, 0x0000, 0x0007, 0x0010, 0xffb2,\r
-+      0x0010, 0xc131, 0x0015, 0x0033, 0x0010, 0xb20a, 0x0001, 0xb0d0,\r
-+      0x000b, 0x80dc, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0xb088,\r
-+      0x0000, 0x0010, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xb109,\r
-+      0x001b, 0x80e4, 0x0001, 0xb1e8, 0x0010, 0xffff, 0x0003, 0x10f5,\r
-+      0x0000, 0x11fe, 0x001b, 0x60ec, 0x0000, 0xb012, 0x0003, 0x00f4,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0x1188, 0x0010, 0x0003,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb00a, 0x001b, 0x80f3,\r
-+      0x0000, 0xb011, 0x0017, 0x4000, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0xbc88, 0x0000, 0x001f, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xc411, 0x000b, 0x80fd, 0x0011, 0xbc88, 0x0010, 0x0018,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xc609, 0x000b, 0x8103,\r
-+      0x0011, 0xbc88, 0x0000, 0x0037, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xc709, 0x000b, 0x8109, 0x0017, 0x4000, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0001, 0xbb88, 0x0000, 0x0001, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0x0269, 0x000b, 0x8112, 0x0017, 0x4000,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0xbb88, 0x0000, 0x0001,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0x026a, 0x000b, 0x811b,\r
-+      0x0017, 0x4000, 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0xbb88,\r
-+      0x0010, 0x000f, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0x0f59,\r
-+      0x000b, 0x8124, 0x0017, 0x4000, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0001, 0xbb88, 0x0010, 0x000f, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0x0f5a, 0x000b, 0x812d, 0x0017, 0x4000, 0x0000, 0xd0ff,\r
-+      0x0012, 0xff40, 0x000b, 0x1031, 0x0015, 0x00d1, 0x0010, 0x0101,\r
-+      0x0013, 0x9134, 0x0005, 0x0079, 0x0000, 0x0001, 0x0013, 0x9137,\r
-+      0x0015, 0x00d1, 0x0000, 0x0100, 0x0011, 0x02e8, 0x0000, 0x0002,\r
-+      0x0003, 0x115d, 0x0011, 0x02e8, 0x0000, 0x0001, 0x0003, 0x1175,\r
-+      0x0011, 0x02e8, 0x0000, 0x0004, 0x0013, 0x1193, 0x0011, 0x02e8,\r
-+      0x0010, 0x0003, 0x0003, 0x11c4, 0x0005, 0x0002, 0x0010, 0x0000,\r
-+      0x0000, 0xc00e, 0x0000, 0xc00d, 0x0010, 0xc003, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0001, 0xbd88, 0x0010, 0x0009, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0010, 0xc00a, 0x001b, 0x8152, 0x0012, 0x3a45,\r
-+      0x0013, 0x115a, 0x0015, 0x003a, 0x0000, 0x2000, 0x0015, 0x003a,\r
-+      0x0010, 0x1010, 0x0004, 0x0829, 0x0012, 0xd042, 0x0013, 0x1031,\r
-+      0x0013, 0x0050, 0x0012, 0x7849, 0x0013, 0x11d2, 0x0010, 0x0dfe,\r
-+      0x0003, 0x6148, 0x0012, 0x0c10, 0x0010, 0xff0c, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x0003, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0xb309, 0x000b, 0x816a, 0x0010, 0xb3fe,\r
-+      0x0003, 0x6172, 0x0010, 0xb30b, 0x0015, 0x0033, 0x0010, 0xc00a,\r
-+      0x001b, 0x8170, 0x0013, 0x01c7, 0x0000, 0xc00b, 0x0010, 0xc00a,\r
-+      0x0013, 0x01c7, 0x0000, 0x78b0, 0x0012, 0xb044, 0x0013, 0x11d2,\r
-+      0x0002, 0xb049, 0x0013, 0x11d2, 0x0010, 0x71ff, 0x0012, 0xff38,\r
-+      0x0010, 0xff71, 0x0010, 0x0dfe, 0x0013, 0x6146, 0x0012, 0x0c10,\r
-+      0x0010, 0xff0c, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,\r
-+      0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb309,\r
-+      0x000b, 0x8188, 0x0010, 0xb3fe, 0x0003, 0x6190, 0x0000, 0xb309,\r
-+      0x0015, 0x0033, 0x0010, 0xc00a, 0x000b, 0x818e, 0x0013, 0x01c7,\r
-+      0x0010, 0xc009, 0x0000, 0xc008, 0x0013, 0x01c7, 0x0000, 0x78b0,\r
-+      0x0012, 0xb044, 0x0013, 0x11d2, 0x0002, 0xb049, 0x0013, 0x11d2,\r
-+      0x0010, 0x71ff, 0x0012, 0xff38, 0x0010, 0xff71, 0x0010, 0x0dfe,\r
-+      0x0013, 0x6146, 0x0012, 0x0c10, 0x0010, 0xff0c, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x0003, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0xb309, 0x000b, 0x81a6, 0x0010, 0xb3fe,\r
-+      0x0013, 0x61ae, 0x0000, 0xb305, 0x0015, 0x0033, 0x0010, 0xc00a,\r
-+      0x000b, 0x81ac, 0x0013, 0x01b0, 0x0010, 0xc005, 0x0000, 0xc004,\r
-+      0x0002, 0x033f, 0x0002, 0xff27, 0x0000, 0x0db8, 0x0004, 0x0378,\r
-+      0x0000, 0x0db8, 0x0004, 0x083d, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0xbc88, 0x0010, 0x0000, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xb309, 0x000b, 0x81bd, 0x0011, 0xb3e8, 0x0000, 0x0002,\r
-+      0x001b, 0x1146, 0x0005, 0x0002, 0x0010, 0x0005, 0x0003, 0x0148,\r
-+      0x0012, 0x7849, 0x0013, 0x11d2, 0x0003, 0x0148, 0x0000, 0x0db8,\r
-+      0x0012, 0x0345, 0x001b, 0x11cd, 0x0002, 0x033f, 0x0004, 0x0378,\r
-+      0x0013, 0x0146, 0x0002, 0x033f, 0x0002, 0xff27, 0x0004, 0x0378,\r
-+      0x0004, 0x083d, 0x0013, 0x0146, 0x0015, 0x00b8, 0x0000, 0x0001,\r
-+      0x0015, 0x003a, 0x0010, 0x0101, 0x0004, 0x083d, 0x0003, 0x0153,\r
-+      0x0000, 0x2bba, 0x0003, 0xb1d9, 0x0005, 0x002a, 0x0000, 0x0002,\r
-+      0x0001, 0xbac8, 0x0000, 0x0700, 0x000b, 0x12b1, 0x0011, 0x15e8,\r
-+      0x0000, 0x0002, 0x0003, 0x122c, 0x0011, 0x15e8, 0x0000, 0x0001,\r
-+      0x0013, 0x11e8, 0x0005, 0x0015, 0x0010, 0x0000, 0x0003, 0x020f,\r
-+      0x0005, 0x0015, 0x0010, 0x0000, 0x0002, 0xba43, 0x0003, 0x1210,\r
-+      0x0003, 0xb1ec, 0x0005, 0x002a, 0x0000, 0x0004, 0x0012, 0xba42,\r
-+      0x0003, 0x1216, 0x0012, 0x104b, 0x000b, 0x120f, 0x0000, 0x1a30,\r
-+      0x0005, 0x0031, 0x0000, 0x0002, 0x0015, 0x0033, 0x0000, 0x1b2a,\r
-+      0x001b, 0x81f8, 0x0010, 0x20b0, 0x0010, 0x21b1, 0x0010, 0x22b2,\r
-+      0x0010, 0x23b3, 0x0010, 0x24b4, 0x0010, 0x25b5, 0x0010, 0x28b8,\r
-+      0x0010, 0x29b9, 0x0000, 0x1a30, 0x0005, 0x0031, 0x0000, 0x0007,\r
-+      0x0015, 0x0033, 0x0010, 0xb032, 0x000b, 0x8206, 0x0000, 0x1a30,\r
-+      0x0005, 0x0031, 0x0010, 0x000f, 0x0015, 0x0033, 0x0010, 0xb812,\r
-+      0x000b, 0x820c, 0x0005, 0x0015, 0x0010, 0x0000, 0x0013, 0x0035,\r
-+      0x0000, 0x1efe, 0x0003, 0x6224, 0x0014, 0x0256, 0x0000, 0x1efe,\r
-+      0x000c, 0x6256, 0x0003, 0x020f, 0x0000, 0x1a30, 0x0005, 0x0031,\r
-+      0x0000, 0x0020, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x821b,\r
-+      0x0002, 0xb02f, 0x0000, 0xffb0, 0x0005, 0x0031, 0x0000, 0x0020,\r
-+      0x0015, 0x0033, 0x0000, 0xb00a, 0x000b, 0x8222, 0x0003, 0x01f3,\r
-+      0x0015, 0x00b8, 0x0010, 0x0005, 0x0004, 0x083d, 0x0000, 0x13b8,\r
-+      0x0015, 0x003a, 0x0010, 0x0404, 0x0004, 0x083d, 0x0003, 0x020f,\r
-+      0x0005, 0x0015, 0x0000, 0x0001, 0x0012, 0xba42, 0x0013, 0x1239,\r
-+      0x0013, 0xb230, 0x0010, 0x2bff, 0x0012, 0xff4f, 0x000b, 0x11d8,\r
-+      0x0002, 0xba43, 0x001b, 0x1216, 0x0000, 0x1efe, 0x000c, 0x6256,\r
-+      0x0003, 0x020f, 0x0010, 0x28b8, 0x0010, 0x29b9, 0x0004, 0x02c7,\r
-+      0x0002, 0x3a42, 0x000b, 0x120f, 0x0000, 0x1c30, 0x0015, 0x00ff,\r
-+      0x0000, 0x0002, 0x0002, 0x1f43, 0x001b, 0x1246, 0x0001, 0xff88,\r
-+      0x0000, 0x0002, 0x0003, 0x0248, 0x0001, 0xff88, 0x0000, 0x0004,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb011, 0x000b, 0x824b,\r
-+      0x0000, 0xb0ff, 0x0011, 0x16a0, 0x0000, 0xff16, 0x000b, 0x24e2,\r
-+      0x0002, 0xb100, 0x0003, 0x0253, 0x0010, 0xb1ff, 0x0001, 0x17a0,\r
-+      0x0010, 0xff17, 0x0013, 0x0216, 0x0000, 0x16ff, 0x0001, 0x18a0,\r
-+      0x0010, 0xff00, 0x001b, 0x225d, 0x0002, 0x1700, 0x0003, 0x12b0,\r
-+      0x0013, 0x025e, 0x0010, 0x17ff, 0x0011, 0x19a0, 0x0003, 0x22b0,\r
-+      0x0011, 0x00d0, 0x0003, 0x12b0, 0x0000, 0x1c30, 0x0000, 0x1b31,\r
-+      0x0015, 0x0033, 0x0000, 0xb131, 0x000b, 0x8266, 0x0003, 0xb267,\r
-+      0x0000, 0xb120, 0x0010, 0xb221, 0x0002, 0x1f43, 0x001b, 0x1273,\r
-+      0x0010, 0xc022, 0x0000, 0xc023, 0x0000, 0xb324, 0x0000, 0xb425,\r
-+      0x0010, 0xb3b5, 0x0000, 0xb4b6, 0x0003, 0x0277, 0x0000, 0xb322,\r
-+      0x0000, 0xb423, 0x0000, 0xb524, 0x0010, 0xb625, 0x0013, 0xb277,\r
-+      0x0005, 0x002a, 0x0000, 0x0001, 0x0012, 0x1500, 0x0000, 0xff15,\r
-+      0x0000, 0x16ff, 0x0001, 0xb580, 0x0000, 0xff16, 0x000b, 0x2282,\r
-+      0x0002, 0x1700, 0x0013, 0x0283, 0x0010, 0x17ff, 0x0001, 0xb680,\r
-+      0x0010, 0xff17, 0x0012, 0x1e10, 0x0010, 0xff1e, 0x0013, 0x62b0,\r
-+      0x0002, 0x1d00, 0x0010, 0xff1d, 0x0010, 0xc030, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x828e, 0x0010, 0xb0fe,\r
-+      0x001b, 0x62af, 0x0000, 0x1c30, 0x0005, 0x0031, 0x0000, 0x0001,\r
-+      0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x8296, 0x0010, 0xb0fe,\r
-+      0x001b, 0x629c, 0x0005, 0x00ce, 0x0010, 0x0005, 0x0013, 0x0801,\r
-+      0x0010, 0xb01c, 0x0000, 0x1c30, 0x0005, 0x0031, 0x0000, 0x0019,\r
-+      0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x82a2, 0x0001, 0xb0c8,\r
-+      0x0010, 0x00ff, 0x0000, 0xff1f, 0x0010, 0xc030, 0x0011, 0xbe80,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x82ab,\r
-+      0x0000, 0xb01d, 0x0010, 0x1dff, 0x0013, 0x028a, 0x0000, 0xb01b,\r
-+      0x0017, 0x4000, 0x0002, 0x3a41, 0x0003, 0x12b9, 0x0003, 0xb2b3,\r
-+      0x0005, 0x002a, 0x0000, 0x0004, 0x0005, 0x0015, 0x0010, 0x0000,\r
-+      0x0003, 0x020f, 0x0000, 0x1a30, 0x0005, 0x0031, 0x0000, 0x0002,\r
-+      0x0015, 0x0033, 0x0000, 0x1b2a, 0x000b, 0x82be, 0x0015, 0x00b8,\r
-+      0x0000, 0x0004, 0x0004, 0x083d, 0x0000, 0x13b8, 0x0015, 0x003a,\r
-+      0x0010, 0x0404, 0x0004, 0x083d, 0x0013, 0x0039, 0x0002, 0x1e00,\r
-+      0x0010, 0xff1e, 0x0012, 0x1d10, 0x0010, 0xff1d, 0x0010, 0xc030,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x82cf,\r
-+      0x0010, 0xb0fe, 0x000b, 0x62f4, 0x0000, 0x1cff, 0x0001, 0x1ae0,\r
-+      0x0013, 0x12de, 0x0000, 0x1c30, 0x0005, 0x0031, 0x0010, 0x0000,\r
-+      0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x82da, 0x0010, 0xb0fe,\r
-+      0x001b, 0x62de, 0x0000, 0x1aff, 0x0000, 0xff1c, 0x0000, 0x1c30,\r
-+      0x0005, 0x0031, 0x0000, 0x0019, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x000b, 0x82e4, 0x0001, 0xb0c8, 0x0010, 0x000f, 0x0000, 0xff1f,\r
-+      0x0001, 0xbf80, 0x0010, 0xff1d, 0x0010, 0xc030, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x82ee, 0x0010, 0xb0fe,\r
-+      0x000b, 0x62f4, 0x0005, 0x00ce, 0x0010, 0x0006, 0x0013, 0x0801,\r
-+      0x0000, 0xb01b, 0x0017, 0x4000, 0x0010, 0x79b0, 0x0000, 0xd0ff,\r
-+      0x0012, 0xff40, 0x001b, 0x1039, 0x0015, 0x00d1, 0x0010, 0x0101,\r
-+      0x0003, 0x92fc, 0x0005, 0x0079, 0x0000, 0x0002, 0x0003, 0x92ff,\r
-+      0x0015, 0x00d1, 0x0000, 0x0100, 0x0010, 0x13fe, 0x0003, 0x6334,\r
-+      0x0012, 0xb04e, 0x001b, 0x1350, 0x0012, 0x784a, 0x0003, 0x1356,\r
-+      0x0000, 0x75ff, 0x0011, 0xffc8, 0x0010, 0x1800, 0x001b, 0x1356,\r
-+      0x0001, 0x0fe8, 0x0000, 0x0001, 0x001b, 0x1318, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x1388, 0x0000, 0x000e, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0x8f0a, 0x000b, 0x8316, 0x0013, 0x035c,\r
-+      0x0001, 0x0fe8, 0x0000, 0x0002, 0x000b, 0x1323, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0005, 0x0031, 0x0000, 0x001a, 0x0015, 0x0033,\r
-+      0x0010, 0xc00a, 0x001b, 0x8321, 0x0013, 0x035c, 0x0001, 0x0fe8,\r
-+      0x0010, 0x0000, 0x0013, 0x132a, 0x0005, 0x00ce, 0x0000, 0x0007,\r
-+      0x0010, 0x0fcf, 0x0013, 0x07fb, 0x0000, 0x13b8, 0x0002, 0x1045,\r
-+      0x0013, 0x1332, 0x0012, 0x103f, 0x0002, 0xff27, 0x0004, 0x0378,\r
-+      0x0004, 0x083d, 0x0003, 0x0334, 0x0012, 0x103f, 0x0004, 0x0378,\r
-+      0x0015, 0x000f, 0x0010, 0x0000, 0x0002, 0x3944, 0x0013, 0x133d,\r
-+      0x0015, 0x0039, 0x0000, 0x5040, 0x0015, 0x00b8, 0x0000, 0x0008,\r
-+      0x0004, 0x083d, 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0xbd88,\r
-+      0x0010, 0x000c, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xc00a,\r
-+      0x001b, 0x8344, 0x0010, 0xc014, 0x0000, 0xc013, 0x0000, 0xc010,\r
-+      0x0002, 0x3a47, 0x0013, 0x134f, 0x0015, 0x003a, 0x0000, 0x8000,\r
-+      0x0015, 0x003a, 0x0010, 0x4040, 0x0014, 0x0806, 0x0013, 0x0039,\r
-+      0x0015, 0x00b8, 0x0010, 0x0003, 0x0015, 0x003a, 0x0010, 0x0202,\r
-+      0x0004, 0x083d, 0x0013, 0x0348, 0x0015, 0x00b8, 0x0000, 0x0002,\r
-+      0x0015, 0x003a, 0x0010, 0x0202, 0x0004, 0x083d, 0x0013, 0x0348,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x1388, 0x0010, 0x0003,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x8363,\r
-+      0x0011, 0x1388, 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0xc00a, 0x001b, 0x8369, 0x0010, 0xb0fe, 0x0003, 0x636e,\r
-+      0x0000, 0xb012, 0x0003, 0x0370, 0x0010, 0xc012, 0x0010, 0xc011,\r
-+      0x0012, 0x104b, 0x0013, 0x132a, 0x0002, 0x103b, 0x0010, 0xff03,\r
-+      0x0005, 0x0002, 0x0010, 0x0000, 0x0000, 0xc00d, 0x0003, 0x032a,\r
-+      0x0000, 0xffb0, 0x0010, 0xc3b1, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0001, 0xb888, 0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xb012, 0x001b, 0x8381, 0x0017, 0x4000, 0x0012, 0x3a43,\r
-+      0x0013, 0x1392, 0x0015, 0x003a, 0x0000, 0x0800, 0x0010, 0x0db0,\r
-+      0x0003, 0x6392, 0x0000, 0x0bff, 0x0001, 0xb0e0, 0x0003, 0x13bb,\r
-+      0x0010, 0x09ff, 0x0001, 0xb0e0, 0x0003, 0x139f, 0x0010, 0x05ff,\r
-+      0x0001, 0xb0e0, 0x0003, 0x1396, 0x0000, 0xc00e, 0x0000, 0x05fe,\r
-+      0x0013, 0x639c, 0x0000, 0x050d, 0x0005, 0x0002, 0x0000, 0x0004,\r
-+      0x0014, 0x041d, 0x0002, 0x3a47, 0x001b, 0x141c, 0x0003, 0x03b6,\r
-+      0x0000, 0x09fe, 0x0013, 0x63b8, 0x0000, 0x090d, 0x0005, 0x0002,\r
-+      0x0000, 0x0001, 0x0014, 0x0436, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0d88, 0x0000, 0x0004, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xba09, 0x001b, 0x83a9, 0x0011, 0x03c8, 0x0010, 0x000f,\r
-+      0x0000, 0xffb6, 0x0011, 0xb6e8, 0x0000, 0x0001, 0x0013, 0x14ca,\r
-+      0x0011, 0xb6e8, 0x0000, 0x0002, 0x0003, 0x14ec, 0x0011, 0xb6e8,\r
-+      0x0010, 0x0003, 0x0003, 0x15d7, 0x0014, 0x0806, 0x0013, 0x041c,\r
-+      0x0010, 0x0bfe, 0x0013, 0x641c, 0x0010, 0x0b0d, 0x0005, 0x0002,\r
-+      0x0000, 0x0002, 0x0014, 0x0436, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0d88, 0x0000, 0x0004, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xba09, 0x001b, 0x83c5, 0x0000, 0xb930, 0x0005, 0x0031,\r
-+      0x0010, 0x0021, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x83cb,\r
-+      0x0001, 0xb0a8, 0x0000, 0x199a, 0x0003, 0x23d1, 0x0005, 0x00b0,\r
-+      0x0000, 0x1999, 0x0012, 0xb050, 0x0000, 0xffb0, 0x0002, 0xff50,\r
-+      0x0002, 0xff50, 0x0001, 0xb080, 0x0000, 0xffb0, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x0006, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0xb00a, 0x001b, 0x83de, 0x0000, 0xb930,\r
-+      0x0005, 0x0031, 0x0000, 0x0019, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x001b, 0x83e4, 0x0001, 0xb0c8, 0x0010, 0x00ff, 0x0001, 0xffe8,\r
-+      0x0010, 0x0048, 0x001b, 0x1445, 0x0005, 0x0002, 0x0010, 0x0006,\r
-+      0x0012, 0x0c10, 0x0010, 0xff0c, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0d88, 0x0010, 0x0003, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0xb109, 0x001b, 0x83f5, 0x0000, 0xb10b, 0x000b, 0x63f9,\r
-+      0x0010, 0xb10a, 0x0015, 0x0033, 0x0010, 0xc00a, 0x000b, 0x83fb,\r
-+      0x0002, 0x032b, 0x0010, 0xff03, 0x0011, 0x0d88, 0x0010, 0x0011,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0x030a, 0x000b, 0x8403,\r
-+      0x0000, 0x11fe, 0x000b, 0x6408, 0x0000, 0x0d12, 0x0003, 0x0411,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0x1188, 0x0010, 0x0003,\r
-+      0x0000, 0xff31, 0x0010, 0x0db0, 0x0015, 0x0033, 0x0000, 0xb00a,\r
-+      0x001b, 0x8410, 0x0000, 0x0d11, 0x0013, 0x041c, 0x0000, 0x05fe,\r
-+      0x0013, 0x641c, 0x0005, 0x0002, 0x0000, 0x0004, 0x0000, 0x050d,\r
-+      0x0014, 0x041d, 0x0002, 0x3a47, 0x001b, 0x141c, 0x0014, 0x0806,\r
-+      0x0003, 0x0049, 0x0001, 0xc7c8, 0x0010, 0x0028, 0x000b, 0x1435,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x000a,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x8427,\r
-+      0x0002, 0xb04f, 0x0013, 0x1435, 0x0001, 0x0fe8, 0x0010, 0x0000,\r
-+      0x0013, 0x1433, 0x0001, 0x0fe8, 0x0000, 0x0002, 0x0013, 0x1433,\r
-+      0x0015, 0x003a, 0x0010, 0x8080, 0x0003, 0x0435, 0x0015, 0x003a,\r
-+      0x0010, 0x4040, 0x0017, 0x4000, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0d88, 0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0x0309, 0x001b, 0x843d, 0x0011, 0x0d88, 0x0010, 0x0005,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb909, 0x001b, 0x8443,\r
-+      0x0017, 0x4000, 0x0005, 0x00b6, 0x0010, 0x0600, 0x0014, 0x0607,\r
-+      0x0014, 0x04b4, 0x0000, 0xb05a, 0x0000, 0xb15b, 0x0005, 0x0054,\r
-+      0x0010, 0x0829, 0x0010, 0x0d58, 0x0015, 0x0059, 0x0010, 0xffff,\r
-+      0x0000, 0xb930, 0x0005, 0x0031, 0x0010, 0x001e, 0x0015, 0x0033,\r
-+      0x0000, 0xb009, 0x000b, 0x8455, 0x0000, 0xb05c, 0x0005, 0x0031,\r
-+      0x0000, 0x001f, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x845b,\r
-+      0x0001, 0xb0c8, 0x0010, 0x000f, 0x001b, 0x1462, 0x0015, 0x00ff,\r
-+      0x0010, 0x0005, 0x0003, 0x046a, 0x0002, 0xb040, 0x0003, 0x1467,\r
-+      0x0015, 0x00ff, 0x0000, 0x0004, 0x0003, 0x046a, 0x0001, 0xb0c8,\r
-+      0x0010, 0x0006, 0x0002, 0xff60, 0x0010, 0xffb2, 0x0011, 0x0d88,\r
-+      0x0000, 0x0019, 0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xb109,\r
-+      0x001b, 0x8470, 0x0012, 0xb170, 0x0011, 0xffc8, 0x0010, 0xff00,\r
-+      0x0011, 0xb2d0, 0x0010, 0xff60, 0x0002, 0xb045, 0x0013, 0x147b,\r
-+      0x0015, 0x00b2, 0x0000, 0x0002, 0x0013, 0x0485, 0x0002, 0xb046,\r
-+      0x0003, 0x1480, 0x0015, 0x00b2, 0x0000, 0x0001, 0x0013, 0x0485,\r
-+      0x0015, 0x00b2, 0x0010, 0x0000, 0x0000, 0xc0b0, 0x0010, 0xc0b1,\r
-+      0x0003, 0x048b, 0x0000, 0xb930, 0x0005, 0x0031, 0x0010, 0x002b,\r
-+      0x0015, 0x0033, 0x0000, 0xb011, 0x001b, 0x848a, 0x0010, 0xb16a,\r
-+      0x0010, 0xb06b, 0x0000, 0xb261, 0x0015, 0x0044, 0x0010, 0x0018,\r
-+      0x0005, 0x0031, 0x0000, 0x0023, 0x0015, 0x0033, 0x0000, 0x6241,\r
-+      0x001b, 0x8494, 0x0003, 0x9495, 0x0015, 0x00a0, 0x0000, 0x0020,\r
-+      0x0012, 0xd041, 0x001b, 0x1498, 0x0015, 0x00d1, 0x0010, 0x0202,\r
-+      0x0003, 0x949c, 0x0000, 0x75ff, 0x0011, 0xffc8, 0x0000, 0x1804,\r
-+      0x0001, 0xffd8, 0x0010, 0x0009, 0x0013, 0x94a2, 0x0000, 0xff75,\r
-+      0x0013, 0x94a4, 0x0015, 0x00d1, 0x0000, 0x0200, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0001, 0xbd88, 0x0000, 0x0008, 0x0000, 0xff31,\r
-+      0x0015, 0x00b1, 0x0010, 0x07d0, 0x0005, 0x00b0, 0x0010, 0x0009,\r
-+      0x0015, 0x0033, 0x0000, 0xb012, 0x000b, 0x84b2, 0x0013, 0x041c,\r
-+      0x0000, 0xba30, 0x0005, 0x0031, 0x0010, 0x0035, 0x0015, 0x0033,\r
-+      0x0000, 0xb009, 0x001b, 0x84b9, 0x0002, 0xb040, 0x0003, 0x14c7,\r
-+      0x0000, 0xb7b0, 0x0000, 0xb9b1, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0d88, 0x0000, 0x0013, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xb012, 0x000b, 0x84c5, 0x0003, 0x04c9, 0x0010, 0xc0b1,\r
-+      0x0000, 0xc0b0, 0x0017, 0x4000, 0x0005, 0x00b6, 0x0010, 0x0500,\r
-+      0x0014, 0x0607, 0x0005, 0x0054, 0x0010, 0x0889, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x0d88, 0x0000, 0x0002, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x84d6, 0x0010, 0xb058,\r
-+      0x0000, 0x0d59, 0x0000, 0xb930, 0x0005, 0x0031, 0x0000, 0x0023,\r
-+      0x0015, 0x0033, 0x0000, 0xb011, 0x000b, 0x84de, 0x0010, 0xb15c,\r
-+      0x0010, 0xb05d, 0x0005, 0x0031, 0x0010, 0x002b, 0x0015, 0x0033,\r
-+      0x0000, 0xb011, 0x001b, 0x84e5, 0x0000, 0xb15e, 0x0000, 0xb05f,\r
-+      0x0003, 0x94e8, 0x0015, 0x00a0, 0x0010, 0x000c, 0x0003, 0x05ec,\r
-+      0x0005, 0x00b6, 0x0000, 0x0700, 0x0014, 0x0607, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x0009, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0010, 0xb709, 0x000b, 0x84f6, 0x0012, 0xb749,\r
-+      0x0013, 0x14fc, 0x0005, 0x0054, 0x0010, 0x0889, 0x0013, 0x04fe,\r
-+      0x0005, 0x0054, 0x0010, 0x0898, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0d88, 0x0000, 0x0002, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xb009, 0x001b, 0x8505, 0x0010, 0xb058, 0x0000, 0x0d59,\r
-+      0x0001, 0xb9a8, 0x0010, 0x00f0, 0x000b, 0x252a, 0x0011, 0x0d88,\r
-+      0x0010, 0x0005, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x000b, 0x8510, 0x0001, 0xb0c8, 0x0000, 0xf700, 0x0000, 0xffb0,\r
-+      0x0011, 0xb0e8, 0x0000, 0xf100, 0x0003, 0x1571, 0x0011, 0xb0e8,\r
-+      0x0000, 0xf200, 0x0013, 0x1576, 0x0011, 0xb0e8, 0x0010, 0xf300,\r
-+      0x0003, 0x1599, 0x0011, 0xb0e8, 0x0000, 0xf400, 0x0013, 0x159e,\r
-+      0x0011, 0xb0e8, 0x0010, 0xf500, 0x0003, 0x1571, 0x0011, 0xb0e8,\r
-+      0x0010, 0xf600, 0x0003, 0x15af, 0x0005, 0x00ce, 0x0010, 0x0009,\r
-+      0x0000, 0xb0cf, 0x0013, 0x07fb, 0x0000, 0xb930, 0x0005, 0x0031,\r
-+      0x0000, 0x0025, 0x0015, 0x0033, 0x0000, 0xb039, 0x000b, 0x852f,\r
-+      0x0012, 0xb749, 0x0013, 0x1534, 0x0002, 0xb52c, 0x0000, 0xffb5,\r
-+      0x0000, 0xb162, 0x0000, 0xb063, 0x0005, 0x0031, 0x0000, 0x001f,\r
-+      0x0015, 0x0033, 0x0000, 0xb309, 0x001b, 0x853a, 0x0001, 0xb3c8,\r
-+      0x0010, 0x0003, 0x0003, 0x1542, 0x0010, 0xffb2, 0x0001, 0xffe8,\r
-+      0x0010, 0x0003, 0x001b, 0x1544, 0x0000, 0xc2b7, 0x0003, 0x05cb,\r
-+      0x0001, 0xb2e8, 0x0000, 0x0001, 0x0003, 0x154b, 0x0005, 0x00ce,\r
-+      0x0010, 0x000a, 0x0010, 0xb2cf, 0x0013, 0x07fb, 0x0010, 0xb465,\r
-+      0x0010, 0xb667, 0x0015, 0x00b7, 0x0010, 0x0018, 0x0001, 0xb5c8,\r
-+      0x0010, 0x0300, 0x0013, 0x1570, 0x0012, 0xb548, 0x0013, 0x1557,\r
-+      0x0000, 0xb6ff, 0x0011, 0xb780, 0x0010, 0xffb7, 0x0002, 0xb549,\r
-+      0x0003, 0x155c, 0x0010, 0xb4ff, 0x0011, 0xb780, 0x0010, 0xffb7,\r
-+      0x0015, 0x0044, 0x0010, 0x0018, 0x0005, 0x0031, 0x0000, 0x002c,\r
-+      0x0015, 0x0033, 0x0000, 0x6841, 0x000b, 0x8562, 0x0015, 0x0044,\r
-+      0x0000, 0x0019, 0x0005, 0x0031, 0x0000, 0x0034, 0x0015, 0x0033,\r
-+      0x0000, 0x5029, 0x001b, 0x8569, 0x0015, 0x0044, 0x0000, 0x0008,\r
-+      0x0011, 0xb7c8, 0x0010, 0x0003, 0x0013, 0x1570, 0x0010, 0xff55,\r
-+      0x0003, 0x05cb, 0x0005, 0x00b5, 0x0000, 0x0008, 0x0015, 0x00b7,\r
-+      0x0010, 0x0018, 0x0003, 0x05cb, 0x0011, 0x0d88, 0x0000, 0x000b,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb011, 0x001b, 0x857b,\r
-+      0x0010, 0xb1ff, 0x0001, 0xb0d0, 0x0003, 0x1584, 0x0005, 0x00b5,\r
-+      0x0010, 0x0b02, 0x0010, 0xb062, 0x0010, 0xb163, 0x0003, 0x0586,\r
-+      0x0005, 0x00b5, 0x0000, 0x0302, 0x0015, 0x0065, 0x0010, 0x0012,\r
-+      0x0005, 0x0067, 0x0000, 0x0008, 0x0015, 0x006c, 0x0000, 0x7000,\r
-+      0x0005, 0x006d, 0x0010, 0x0500, 0x0015, 0x006f, 0x0010, 0x000a,\r
-+      0x0015, 0x0044, 0x0000, 0x0001, 0x0005, 0x0052, 0x0000, 0x2500,\r
-+      0x0015, 0x0044, 0x0000, 0x0008, 0x0015, 0x00b7, 0x0000, 0x0032,\r
-+      0x0003, 0x05cb, 0x0005, 0x00b5, 0x0010, 0x0028, 0x0015, 0x00b7,\r
-+      0x0010, 0x0018, 0x0003, 0x05cb, 0x0005, 0x00b5, 0x0000, 0x0100,\r
-+      0x0005, 0x0067, 0x0000, 0x0008, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x0d88, 0x0010, 0x0018, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xb009, 0x001b, 0x85a9, 0x0001, 0xb0c8, 0x0010, 0x00ff,\r
-+      0x0015, 0x00b7, 0x0000, 0x0020, 0x0003, 0x05cb, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x0005, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0xb609, 0x000b, 0x85b6, 0x0001, 0xb6c8,\r
-+      0x0010, 0xff00, 0x0000, 0xffb0, 0x0015, 0x0033, 0x0000, 0xb00a,\r
-+      0x000b, 0x85bc, 0x0001, 0xb6c8, 0x0010, 0x00ff, 0x0012, 0xff10,\r
-+      0x001b, 0x15c5, 0x0000, 0xffb5, 0x0015, 0x00b7, 0x0010, 0x0018,\r
-+      0x0003, 0x05cb, 0x0010, 0xff63, 0x0005, 0x00b5, 0x0000, 0x0800,\r
-+      0x0015, 0x00b7, 0x0010, 0x0018, 0x0003, 0x05cb, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x0d88, 0x0010, 0x0009, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x85d2, 0x0010, 0xb561,\r
-+      0x0013, 0x95d4, 0x0010, 0xb7a0, 0x0003, 0x05ec, 0x0005, 0x00b6,\r
-+      0x0010, 0x0300, 0x0014, 0x0607, 0x0005, 0x0054, 0x0010, 0x0819,\r
-+      0x0010, 0x0d58, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88,\r
-+      0x0000, 0x0002, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x001b, 0x85e4, 0x0000, 0xb059, 0x0003, 0x95e6, 0x0010, 0xc0a0,\r
-+      0x0010, 0x71ff, 0x0002, 0xff28, 0x0010, 0xff71, 0x0003, 0x05ec,\r
-+      0x0012, 0xd041, 0x000b, 0x15ec, 0x0015, 0x00d1, 0x0010, 0x0202,\r
-+      0x0000, 0x75ff, 0x0011, 0xffc8, 0x0000, 0x1804, 0x0001, 0xffd8,\r
-+      0x0010, 0x0009, 0x0013, 0x95f5, 0x0000, 0xff75, 0x0003, 0x95f7,\r
-+      0x0015, 0x00d1, 0x0000, 0x0200, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0001, 0xbd88, 0x0000, 0x0008, 0x0000, 0xff31, 0x0005, 0x00b0,\r
-+      0x0010, 0x0009, 0x0015, 0x00b1, 0x0010, 0x07d0, 0x0015, 0x0033,\r
-+      0x0000, 0xb012, 0x001b, 0x8605, 0x0013, 0x041c, 0x0015, 0x0044,\r
-+      0x0000, 0x0008, 0x0005, 0x0098, 0x0010, 0x0056, 0x0015, 0x0099,\r
-+      0x0000, 0x9575, 0x0004, 0x07c2, 0x0000, 0xb096, 0x0012, 0xb270,\r
-+      0x0010, 0xff56, 0x0014, 0x07e4, 0x0010, 0xb052, 0x0010, 0xb153,\r
-+      0x0000, 0xb6ff, 0x0011, 0xb2d0, 0x0010, 0xff50, 0x0010, 0xb351,\r
-+      0x0017, 0x4000, 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0x1288,\r
-+      0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0x1009,\r
-+      0x000b, 0x8620, 0x0015, 0x000f, 0x0000, 0x0001, 0x0010, 0xc014,\r
-+      0x0000, 0x1213, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x1388,\r
-+      0x0000, 0x0004, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xba09,\r
-+      0x000b, 0x862c, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x1388,\r
-+      0x0010, 0x0005, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0x1a09,\r
-+      0x000b, 0x8634, 0x0012, 0x104b, 0x000b, 0x163d, 0x0000, 0x1a30,\r
-+      0x0005, 0x0031, 0x0000, 0x000b, 0x0015, 0x0033, 0x0000, 0x1621,\r
-+      0x001b, 0x863c, 0x0010, 0x15fe, 0x000b, 0x665c, 0x0014, 0x0683,\r
-+      0x0002, 0x3a42, 0x001b, 0x1682, 0x0001, 0x10c8, 0x0010, 0x000f,\r
-+      0x000b, 0x16e5, 0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x1388,\r
-+      0x0000, 0x0008, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x000b, 0x864c, 0x0011, 0xb0e8, 0x0010, 0x0009, 0x0003, 0x1653,\r
-+      0x0011, 0xb0e8, 0x0000, 0x0001, 0x001b, 0x1681, 0x0011, 0x1388,\r
-+      0x0010, 0x000a, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009,\r
-+      0x000b, 0x8658, 0x0002, 0xb04f, 0x001b, 0x1678, 0x0013, 0x0681,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x1388, 0x0010, 0x0003,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x8663,\r
-+      0x0015, 0x0033, 0x0010, 0xc00a, 0x001b, 0x8666, 0x0010, 0xb0fe,\r
-+      0x0003, 0x666b, 0x0000, 0xb012, 0x0003, 0x066d, 0x0010, 0xc012,\r
-+      0x0010, 0xc011, 0x0015, 0x000f, 0x0010, 0x0000, 0x0002, 0x3944,\r
-+      0x0013, 0x1676, 0x0015, 0x0039, 0x0000, 0x5040, 0x0015, 0x00b8,\r
-+      0x0000, 0x0008, 0x0004, 0x083d, 0x0000, 0xc013, 0x0013, 0x0682,\r
-+      0x0010, 0x02fe, 0x0013, 0x667d, 0x0015, 0x003a, 0x0010, 0x2020,\r
-+      0x0013, 0x0682, 0x0015, 0x003a, 0x0000, 0x2000, 0x0015, 0x003a,\r
-+      0x0010, 0x1010, 0x0004, 0x0829, 0x0013, 0x0055, 0x0013, 0xb683,\r
-+      0x0005, 0x002a, 0x0000, 0x0004, 0x0000, 0xba30, 0x0005, 0x0031,\r
-+      0x0010, 0x001b, 0x0015, 0x0033, 0x0000, 0xb009, 0x001b, 0x868b,\r
-+      0x0000, 0xc02c, 0x0000, 0xb02d, 0x0012, 0x104b, 0x0003, 0x16a6,\r
-+      0x0000, 0x1a30, 0x0005, 0x0031, 0x0000, 0x0023, 0x0015, 0x0033,\r
-+      0x0000, 0xb129, 0x001b, 0x8695, 0x0000, 0xb120, 0x0010, 0xb221,\r
-+      0x0000, 0xb322, 0x0000, 0xb423, 0x0000, 0xb524, 0x0000, 0xc025,\r
-+      0x0010, 0xb526, 0x0010, 0xc027, 0x0010, 0xb516, 0x0010, 0xc017,\r
-+      0x0000, 0xb518, 0x0000, 0xc019, 0x0010, 0xc028, 0x0000, 0xc029,\r
-+      0x0010, 0xc01e, 0x0003, 0x06dc, 0x0012, 0x1044, 0x0013, 0x16d6,\r
-+      0x0002, 0x1034, 0x0000, 0xff10, 0x0000, 0x1a30, 0x0005, 0x0031,\r
-+      0x0000, 0x0002, 0x0015, 0x0033, 0x0000, 0x1b29, 0x001b, 0x86af,\r
-+      0x0000, 0x1c30, 0x0000, 0x1b31, 0x0015, 0x0033, 0x0000, 0xb131,\r
-+      0x001b, 0x86b4, 0x0002, 0x1f43, 0x001b, 0x16bb, 0x0010, 0xb3b5,\r
-+      0x0000, 0xb4b6, 0x0000, 0xc0b3, 0x0010, 0xc0b4, 0x0000, 0xb120,\r
-+      0x0010, 0xb221, 0x0000, 0xb322, 0x0000, 0xb423, 0x0000, 0xb524,\r
-+      0x0010, 0xb625, 0x0010, 0xb516, 0x0000, 0xb617, 0x0000, 0x1826,\r
-+      0x0000, 0x1927, 0x0000, 0x1a30, 0x0005, 0x0031, 0x0010, 0x000f,\r
-+      0x0015, 0x0033, 0x0000, 0xb011, 0x001b, 0x86ca, 0x0000, 0xb028,\r
-+      0x0000, 0xb129, 0x0012, 0x1e10, 0x0010, 0xff1e, 0x0003, 0x66dc,\r
-+      0x0002, 0x1d00, 0x0010, 0xff1d, 0x0004, 0x028a, 0x0002, 0x3a42,\r
-+      0x0013, 0x16dc, 0x0013, 0x06e4, 0x0000, 0x1a30, 0x0005, 0x0031,\r
-+      0x0000, 0x0002, 0x0015, 0x0033, 0x0000, 0x1b79, 0x001b, 0x86db,\r
-+      0x0013, 0xb6dc, 0x0005, 0x002a, 0x0000, 0x0001, 0x0005, 0x0015,\r
-+      0x0000, 0x0001, 0x0000, 0x1efe, 0x0013, 0x66e4, 0x0003, 0x0256,\r
-+      0x0017, 0x4000, 0x0000, 0xba30, 0x0005, 0x0031, 0x0010, 0x001b,\r
-+      0x0015, 0x0033, 0x0010, 0xb051, 0x000b, 0x86ea, 0x0000, 0xb0a3,\r
-+      0x0010, 0xb697, 0x0010, 0xb946, 0x0015, 0x00a5, 0x0000, 0x0010,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x1388, 0x0000, 0x0002,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb509, 0x000b, 0x86f7,\r
-+      0x0014, 0x07e4, 0x0004, 0x07d3, 0x0012, 0xb470, 0x0010, 0xffb4,\r
-+      0x0010, 0xb48e, 0x0010, 0xb08a, 0x0010, 0xb18b, 0x0012, 0x104d,\r
-+      0x0003, 0x1702, 0x0013, 0x072f, 0x0012, 0x104b, 0x0003, 0x1715,\r
-+      0x0005, 0x008c, 0x0010, 0x0829, 0x0010, 0xc08d, 0x0001, 0xb2d8,\r
-+      0x0010, 0x0600, 0x0010, 0xff88, 0x0010, 0xb389, 0x0000, 0x1390,\r
-+      0x0010, 0xb591, 0x0000, 0xc08f, 0x0010, 0x1ab9, 0x0014, 0x04b4,\r
-+      0x0013, 0x9710, 0x0010, 0xb092, 0x0010, 0xb193, 0x0013, 0x9713,\r
-+      0x0013, 0x072a, 0x0005, 0x008c, 0x0000, 0x0809, 0x0015, 0x008d,\r
-+      0x0000, 0x0008, 0x0001, 0xb2d8, 0x0000, 0x0100, 0x0010, 0xff88,\r
-+      0x0010, 0xb389, 0x0000, 0x1390, 0x0010, 0xb591, 0x0000, 0xc08f,\r
-+      0x0000, 0x1a30, 0x0005, 0x0031, 0x0010, 0x000f, 0x0015, 0x0033,\r
-+      0x0000, 0xb011, 0x001b, 0x8725, 0x0013, 0x9726, 0x0000, 0xb192,\r
-+      0x0000, 0xb093, 0x0013, 0x9729, 0x0010, 0x19a1, 0x0000, 0x18a2,\r
-+      0x0015, 0x00b1, 0x0010, 0x0096, 0x0013, 0x079e, 0x0000, 0xb590,\r
-+      0x0010, 0x1391, 0x0001, 0x10c8, 0x0010, 0x000f, 0x0001, 0xffe8,\r
-+      0x0010, 0x0005, 0x0013, 0x1756, 0x0001, 0xb2d8, 0x0000, 0x0700,\r
-+      0x0010, 0xff88, 0x0010, 0xb389, 0x0015, 0x0030, 0x0000, 0x0400,\r
-+      0x0011, 0x1388, 0x0010, 0x0009, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0000, 0xb009, 0x000b, 0x8741, 0x0002, 0xb049, 0x0003, 0x1749,\r
-+      0x0005, 0x008c, 0x0010, 0x0889, 0x0015, 0x00b1, 0x0010, 0x0096,\r
-+      0x0003, 0x074d, 0x0005, 0x008c, 0x0010, 0x0898, 0x0015, 0x00b1,\r
-+      0x0000, 0x0092, 0x0010, 0xc08d, 0x0000, 0xc08f, 0x0013, 0x974f,\r
-+      0x0000, 0xc092, 0x0010, 0xc093, 0x0013, 0x9752, 0x0010, 0x19a1,\r
-+      0x0000, 0x18a2, 0x0013, 0x079e, 0x0001, 0xb2d8, 0x0000, 0x0100,\r
-+      0x0010, 0xff88, 0x0010, 0xb389, 0x0005, 0x008c, 0x0010, 0x0880,\r
-+      0x0015, 0x008d, 0x0000, 0x0008, 0x0011, 0x1388, 0x0000, 0x000e,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb009, 0x000b, 0x8763,\r
-+      0x0010, 0xb08f, 0x0000, 0xb590, 0x0010, 0x1391, 0x0000, 0x1a30,\r
-+      0x0005, 0x0031, 0x0000, 0x000d, 0x0015, 0x0033, 0x0000, 0xb021,\r
-+      0x000b, 0x876c, 0x0013, 0x976d, 0x0010, 0xb392, 0x0010, 0xb293,\r
-+      0x0013, 0x9770, 0x0000, 0xb1a1, 0x0010, 0xb0a2, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x1388, 0x0000, 0x000b, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0010, 0xb211, 0x001b, 0x877a, 0x0000, 0xb3ff,\r
-+      0x0001, 0xb080, 0x0000, 0xffb3, 0x000b, 0x2781, 0x0002, 0xb200,\r
-+      0x0003, 0x0782, 0x0010, 0xb2ff, 0x0011, 0xb180, 0x0010, 0xffb2,\r
-+      0x0011, 0x1388, 0x0000, 0x000b, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0xb212, 0x001b, 0x8789, 0x0015, 0x00b1, 0x0000, 0x0092,\r
-+      0x0002, 0x104c, 0x0013, 0x179c, 0x0011, 0xc2e8, 0x0010, 0x000c,\r
-+      0x001b, 0x1794, 0x0015, 0x00ff, 0x0000, 0x0800, 0x0003, 0x079c,\r
-+      0x0011, 0xc2e8, 0x0000, 0x0020, 0x000b, 0x179a, 0x0015, 0x00ff,\r
-+      0x0010, 0x1800, 0x0003, 0x079c, 0x0015, 0x00ff, 0x0000, 0x1000,\r
-+      0x0011, 0xb1d0, 0x0010, 0xffb1, 0x0015, 0x009a, 0x0010, 0x0036,\r
-+      0x0005, 0x009b, 0x0000, 0x95d5, 0x0012, 0xd041, 0x001b, 0x17a2,\r
-+      0x0015, 0x00d1, 0x0010, 0x0202, 0x0003, 0x97a6, 0x0012, 0x104e,\r
-+      0x0003, 0x17ab, 0x0012, 0xb12f, 0x0010, 0xffb1, 0x0000, 0xb175,\r
-+      0x0003, 0x97ac, 0x0015, 0x00d1, 0x0000, 0x0200, 0x0001, 0x19c8,\r
-+      0x0010, 0xfff0, 0x001b, 0x17b5, 0x0015, 0x00b1, 0x0010, 0x07d0,\r
-+      0x0003, 0x07b7, 0x0015, 0x00b1, 0x0000, 0x1b58, 0x0005, 0x00b0,\r
-+      0x0010, 0x0009, 0x0015, 0x0030, 0x0000, 0x0400, 0x0001, 0xbd88,\r
-+      0x0000, 0x000b, 0x0000, 0xff31, 0x0015, 0x0033, 0x0000, 0xb012,\r
-+      0x000b, 0x87c0, 0x0013, 0x0682, 0x0000, 0xba30, 0x0005, 0x0031,\r
-+      0x0010, 0x0021, 0x0015, 0x0033, 0x0010, 0xb019, 0x001b, 0x87c7,\r
-+      0x0002, 0xb200, 0x0011, 0xffc8, 0x0010, 0x00ff, 0x0010, 0xffb2,\r
-+      0x0010, 0xb2b7, 0x0005, 0x0031, 0x0000, 0x0023, 0x0015, 0x0033,\r
-+      0x0010, 0xb20a, 0x000b, 0x87d1, 0x0017, 0x4000, 0x0000, 0xba30,\r
-+      0x0005, 0x0031, 0x0000, 0x0023, 0x0015, 0x0033, 0x0010, 0xb409,\r
-+      0x000b, 0x87d8, 0x0002, 0xb400, 0x0011, 0xffc8, 0x0010, 0x00ff,\r
-+      0x0010, 0xffb4, 0x0010, 0xb4b7, 0x0005, 0x0031, 0x0000, 0x0023,\r
-+      0x0015, 0x0033, 0x0010, 0xb40a, 0x000b, 0x87e2, 0x0017, 0x4000,\r
-+      0x0000, 0xba30, 0x0001, 0xc7c8, 0x0000, 0x0020, 0x000b, 0x17f0,\r
-+      0x0005, 0x0031, 0x0010, 0x0028, 0x0015, 0x0033, 0x0010, 0xb209,\r
-+      0x001b, 0x87ec, 0x0011, 0xb2c8, 0x0000, 0xff80, 0x0013, 0x17f3,\r
-+      0x0010, 0xc4b0, 0x0010, 0xc5b1, 0x0003, 0x07f5, 0x0010, 0xc6b1,\r
-+      0x0000, 0xc0b0, 0x0005, 0x0031, 0x0000, 0x0004, 0x0015, 0x0033,\r
-+      0x0010, 0xb211, 0x000b, 0x87f9, 0x0017, 0x4000, 0x0015, 0x00b8,\r
-+      0x0010, 0x0009, 0x0015, 0x003a, 0x0010, 0x0707, 0x0004, 0x083d,\r
-+      0x0013, 0x002d, 0x0015, 0x00b8, 0x0010, 0x0009, 0x0015, 0x003a,\r
-+      0x0010, 0x0707, 0x0013, 0x083d, 0x0014, 0x0114, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x0d88, 0x0000, 0x0004, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0000, 0xba09, 0x001b, 0x880e, 0x0004, 0x07c2,\r
-+      0x0015, 0x0030, 0x0000, 0x0400, 0x0011, 0x0d88, 0x0000, 0x0010,\r
-+      0x0000, 0xff31, 0x0015, 0x0033, 0x0010, 0xb20a, 0x000b, 0x8817,\r
-+      0x0011, 0x0d88, 0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0x0309, 0x000b, 0x881d, 0x0002, 0x0327, 0x0010, 0xffb2,\r
-+      0x0011, 0x0d88, 0x0010, 0x0011, 0x0000, 0xff31, 0x0015, 0x0033,\r
-+      0x0010, 0xb20a, 0x001b, 0x8825, 0x0015, 0x00b8, 0x0010, 0x0006,\r
-+      0x0013, 0x083d, 0x0004, 0x0126, 0x0004, 0x07c2, 0x0015, 0x0030,\r
-+      0x0000, 0x0400, 0x0011, 0x1388, 0x0000, 0x0010, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0010, 0xb20a, 0x001b, 0x8832, 0x0012, 0x1027,\r
-+      0x0010, 0xffb2, 0x0011, 0x1388, 0x0010, 0x0011, 0x0000, 0xff31,\r
-+      0x0015, 0x0033, 0x0010, 0xb20a, 0x000b, 0x883a, 0x0015, 0x00b8,\r
-+      0x0000, 0x0007, 0x0003, 0x483d, 0x0000, 0xb838, 0x0017, 0x4000,\r
-+      0xa4bc, 0xa221\r
-+};\r
-+unsigned short xseqipx_code_length01 = 0x1082;\r
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla2200.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla2200.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla2200.c    2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla2200.c 2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla2300.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla2300.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla2300.c    2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla2300.c 2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -22,6 +22,9 @@
-  * command source for 2300 module
-  */
- #define ISP2300
-+#define ISP2322
-+#define EXTENDED_IDS
-+#define IPX
- #if !defined(LINUX)
- #define LINUX
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla2x00.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla2x00.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla2x00.c    2003-10-28 10:34:18.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla2x00.c 2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * Portions (C) Arjan van de Ven <arjanv@redhat.com> for Red Hat, Inc.
-@@ -44,6 +44,10 @@
- #error "This driver does not support kernel versions earlier than 2.4.0"
- #endif
-+#if defined(FC_IP_SUPPORT)
-+#error "IP support is unsupported and unavailable in this driver release!!!"
-+#endif
-+
- /* IP support not available on ISP2100 */
- #if defined(ISP2100) && defined(FC_IP_SUPPORT)
- #error "The ISP2100 does not support IP"
-@@ -51,11 +55,6 @@
- #include "qla_settings.h"
--#if defined(ISP2300)
--#include "qla_devtbl.h"
--#endif
--
--
- static int num_hosts = 0;       /* ioctl related  */
- static int apiHBAInstance = 0;  /* ioctl related keeps track of API HBA Instance */
-@@ -80,13 +79,12 @@ static unsigned long mem_id[1000];
- #include <linux/pci.h>
- #include <linux/proc_fs.h>
- #include <linux/blk.h>
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- #include <linux/tqueue.h>
--#endif
- #include <linux/interrupt.h>
- #include <linux/stat.h>
- #include <linux/slab.h>
- #include <linux/ctype.h>
-+#include <linux/utsname.h>
- #define  APIDEV        1
-@@ -109,12 +107,9 @@ static unsigned long mem_id[1000];
- * options would be SIGPWR, I suppose.
- */
- #define SHUTDOWN_SIGS (sigmask(SIGHUP))
--#include "../sd.h"
--#include "../scsi.h"
--#include "../hosts.h"
--#ifdef __VMWARE__
--#include "vmklinux_dist.h"
--#endif
-+#include "sd.h"
-+#include "scsi.h"
-+#include "hosts.h"
- #if defined(FC_IP_SUPPORT)
- #include <linux/ip.h>
-@@ -130,7 +125,7 @@ static unsigned long mem_id[1000];
- #include "qla2x00.h"
--#define UNIQUE_FW_NAME                 /* unique F/W array names */
-+#define UNIQUE_FW_NAME                     /* unique F/W array names */
- #if defined(ISP2100)
- #include "ql2100_fw.h"                     /* ISP RISC 2100 TP code */
- #endif
-@@ -141,16 +136,21 @@ static unsigned long mem_id[1000];
- #include "ql2200_fw.h"                     /* ISP RISC 2200 TP code */
- #endif
- #endif
-+
- #if defined(ISP2300)
--#if defined(FC_IP_SUPPORT)
--#include "ql2300ip_fw.h"                   /* ISP RISC 2300 IP code */
--#else
--#include "ql2300_fw.h"                     /* ISP RISC 2300 TP code */
--#endif
-+#include "ql2300flx_fw.h"                  /* ISP RISC 2300 FLX code */
-+#include "ql2322flx_fw.h"                  /* ISP RISC 2300 FLX code */
-+#include "ql2300ipx_fw.h"                  /* ISP RISC 2300 IPX code */
-+#include "ql2322ipx_fw.h"                  /* ISP RISC 2322 IPX code */
- #endif
-+
- #include "qla_cfg.h"
-+#include "qlfolimits.h"
-+
- #include "qla_gbl.h"
-+#include "qla_devtbl.h"
-+
- #if NO_LONG_DELAYS
- #define  SYS_DELAY(x)         qla2x00_sleep(x)
-@@ -164,13 +164,6 @@ static unsigned long mem_id[1000];
- #define  UDELAY(x)            udelay(x)
- #endif
--/* 
-- * We only use these macros in 64bit_start and not 32bit_start, so
-- * we can assume a 8-byte address (a).
-- */
--#define pci_dma_hi32(a) ((u32) (0xffffffff & (((u64)(a))>>32)))
--#define pci_dma_lo32(a) ((u32) (0xffffffff & (((u64)(a)))))
--
- #define  CACHE_FLUSH(a) (RD_REG_WORD(a))
- #define  INVALID_HANDLE    (MAX_OUTSTANDING_COMMANDS+1)
-@@ -226,7 +219,8 @@ del_timer_sync(&(h)->timer); \
- #define DRIVER_NAME "qla2300"
- #endif
--static char qla2x00_version_str[40];
-+#define QLA_DRVR_VERSION_LEN  40
-+static char qla2x00_version_str[QLA_DRVR_VERSION_LEN];
- typedef unsigned long paddr32_t;
- /* proc info string processing */
-@@ -239,7 +233,7 @@ struct info_str {
- /*
--*  Qlogic Driver support Function Prototypes.
-+*  QLogic Driver support Function Prototypes.
- */
- STATIC void copy_mem_info(struct info_str *, char *, int);
- STATIC int copy_info(struct info_str *, char *, ...);
-@@ -247,14 +241,7 @@ STATIC int copy_info(struct info_str *, 
- STATIC uint8_t qla2x00_register_with_Linux(scsi_qla_host_t *ha,
-                       uint8_t maxchannels);
- STATIC int qla2x00_done(scsi_qla_host_t *);
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--STATIC void qla2x00_select_queue_depth(struct Scsi_Host *, Scsi_Device *);
--#endif
--
--#if defined (CONFIG_SCSIFCHOTSWAP) || defined(CONFIG_GAMAP)
--static int qla2x00_get_scsi_info_from_wwn (int mode, unsigned long long wwn, int *host, int *channel, int *lun, int *id);
--static int qla2x00_get_wwn_from_scsi_info (int host, int id, unsigned long long *wwn);
--#endif /* CONFIG_SCSIFCHOTSWAP || CONFIG_GAMAP */
-+static void qla2x00_select_queue_depth(struct Scsi_Host *, Scsi_Device *);
- STATIC void qla2x00_timer(scsi_qla_host_t *);
-@@ -264,7 +251,6 @@ static void qla2x00_dump_regs(struct Scs
- #if STOP_ON_ERROR
- static void qla2x00_panic(char *, struct Scsi_Host *host);
- #endif
--static 
- void qla2x00_print_scsi_cmd(Scsi_Cmnd *cmd);
- #if 0
-@@ -272,7 +258,7 @@ STATIC void qla2x00_abort_pending_queue(
- #endif
- STATIC void qla2x00_mem_free(scsi_qla_host_t *ha);
--STATIC void qla2x00_do_dpc(void *p);
-+void qla2x00_do_dpc(void *p);
- static inline void qla2x00_callback(scsi_qla_host_t *ha, Scsi_Cmnd *cmd);
-@@ -302,9 +288,6 @@ STATIC uint8_t qla2100_nvram_config(scsi
- #else
- STATIC uint8_t qla2x00_nvram_config(scsi_qla_host_t *);
- #endif
--STATIC uint8_t qla2x00_get_link_status(scsi_qla_host_t *,
--              uint8_t, void *, uint16_t *);
--
- STATIC uint8_t qla2x00_loop_reset(scsi_qla_host_t *ha);
- STATIC uint8_t qla2x00_abort_isp(scsi_qla_host_t *);
- STATIC uint8_t qla2x00_loop_resync(scsi_qla_host_t *);
-@@ -312,8 +295,8 @@ STATIC uint8_t qla2x00_loop_resync(scsi_
- STATIC void qla2x00_nv_write(scsi_qla_host_t *, uint16_t);
- STATIC void qla2x00_nv_deselect(scsi_qla_host_t *ha);
- STATIC void qla2x00_poll(scsi_qla_host_t *);
--STATIC void qla2x00_init_fc_db(scsi_qla_host_t *);
- STATIC void qla2x00_init_tgt_map(scsi_qla_host_t *);
-+STATIC fc_port_t *qla2x00_alloc_fcport(scsi_qla_host_t *, int);
- STATIC void qla2x00_reset_adapter(scsi_qla_host_t *);
- STATIC void qla2x00_enable_lun(scsi_qla_host_t *);
- STATIC void qla2x00_isp_cmd(scsi_qla_host_t *);
-@@ -342,14 +325,14 @@ STATIC uint8_t qla2x00_configure_hba(scs
- STATIC void qla2x00_reset_chip(scsi_qla_host_t *ha);
- STATIC void qla2x00_display_fc_names(scsi_qla_host_t *ha);
--static void qla2x00_dump_requests(scsi_qla_host_t *ha);
-+void qla2x00_dump_requests(scsi_qla_host_t *ha);
- static void qla2x00_get_properties(scsi_qla_host_t *ha, char *string);
- STATIC uint8_t qla2x00_find_propname(scsi_qla_host_t *ha,
-               char *propname, char *propstr, char *db, int siz);
- static int qla2x00_get_prop_16chars(scsi_qla_host_t *ha,
-               char *propname, char *propval, char *cmdline);
- static char *qla2x00_get_line(char *str, char *line);
--static void qla2x00_check_fabric_devices(scsi_qla_host_t *ha);
-+void qla2x00_check_fabric_devices(scsi_qla_host_t *ha);
- #if defined(ISP2300)
- STATIC void qla2x00_blink_led(scsi_qla_host_t *ha);
- #endif
-@@ -403,13 +386,10 @@ static int  qla2x00_tx_timeout(scsi_qla_
- #endif        /* if defined(FC_IP_SUPPORT) */
- static void qla2x00_device_resync(scsi_qla_host_t *);
--STATIC uint8_t qla2x00_update_fc_database(scsi_qla_host_t *, fcdev_t *,
--              uint8_t);
--STATIC uint8_t qla2x00_configure_fabric(scsi_qla_host_t *, uint8_t );
-+STATIC uint8_t qla2x00_configure_fabric(scsi_qla_host_t *);
- static uint8_t qla2x00_find_all_fabric_devs(scsi_qla_host_t *,
--              sns_cmd_rsp_t *, dma_addr_t, struct new_dev *,
--              uint16_t *, uint8_t *);
-+              sns_cmd_rsp_t *, dma_addr_t, struct list_head *);
- #if REG_FC4_ENABLED
- static uint8_t qla2x00_register_fc4(scsi_qla_host_t *, sns_cmd_rsp_t *, dma_addr_t);
- static uint8_t qla2x00_register_fc4_feature(scsi_qla_host_t *, sns_cmd_rsp_t *, dma_addr_t);
-@@ -418,63 +398,55 @@ static uint8_t qla2x00_register_nn(scsi_
- static uint8_t qla2x00_register_snn(scsi_qla_host_t *);
- #endif
- static uint8_t qla2x00_gnn_ft(scsi_qla_host_t *, sns_cmd_rsp_t *, dma_addr_t,
--              struct new_dev *, uint32_t);
-+    sw_info_t *, uint32_t);
- static uint8_t qla2x00_gpn_id(scsi_qla_host_t *, sns_cmd_rsp_t *, dma_addr_t,
--              struct new_dev *);
-+    sw_info_t *);
- static uint8_t qla2x00_gan(scsi_qla_host_t *, sns_cmd_rsp_t *, dma_addr_t,
--              fcdev_t *);
--static uint8_t qla2x00_fabric_login(scsi_qla_host_t *, fcdev_t *);
-+    fc_port_t *);
-+static uint8_t qla2x00_fabric_login(scsi_qla_host_t *, fc_port_t *, uint16_t *);
- static uint8_t qla2x00_local_device_login(scsi_qla_host_t *, uint16_t);
- STATIC uint8_t qla2x00_configure_loop(scsi_qla_host_t *);
--static uint8_t qla2x00_configure_local_loop(scsi_qla_host_t *, uint8_t );
--static uint8_t qla2x00_configure_fcports( scsi_qla_host_t *ha );
-+static uint8_t qla2x00_configure_local_loop(scsi_qla_host_t *);
- STATIC uint8_t qla2x00_32bit_start_scsi(srb_t *sp);
--
- STATIC uint8_t qla2x00_64bit_start_scsi(srb_t *sp);
- /* Routines for Failover */
--static os_tgt_t *qla2x00_tgt_alloc(scsi_qla_host_t *ha, uint16_t t);
-+os_tgt_t *qla2x00_tgt_alloc(scsi_qla_host_t *ha, uint16_t t);
- #if APIDEV
- static int apidev_init(struct Scsi_Host*);
- static int apidev_cleanup(void);
- #endif
--static void qla2x00_tgt_free(scsi_qla_host_t *ha, uint16_t t);
--static os_lun_t *qla2x00_lun_alloc(scsi_qla_host_t *ha, uint16_t t, uint16_t l);
-+void qla2x00_tgt_free(scsi_qla_host_t *ha, uint16_t t);
-+os_lun_t *qla2x00_lun_alloc(scsi_qla_host_t *ha, uint16_t t, uint16_t l);
- static void qla2x00_lun_free(scsi_qla_host_t *ha, uint16_t t, uint16_t l);
- #if  defined(ISP2300)
- static inline void
-       qla2x00_process_response_queue_in_zio_mode(scsi_qla_host_t *);
- #endif
--static void qla2x00_next(scsi_qla_host_t *vis_ha);
--static int qla2x00_build_fcport_list(scsi_qla_host_t *ha);
-+void qla2x00_next(scsi_qla_host_t *vis_ha);
- static void qla2x00_config_os(scsi_qla_host_t *ha);
--static uint16_t qla2x00_fcport_bind(scsi_qla_host_t *ha, fc_port_t *fcport);
--static int qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport, int);
--static int qla2x00_lun_discovery(scsi_qla_host_t *ha, fc_port_t *fcport, int);
-+static uint16_t qla2x00_fcport_bind(scsi_qla_host_t *, fc_port_t *);
-+static os_lun_t *qla2x00_fclun_bind(scsi_qla_host_t *, fc_port_t *, fc_lun_t *);
-+static int qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport);
-+static int qla2x00_lun_discovery(scsi_qla_host_t *ha, fc_port_t *fcport);
- static int qla2x00_rpt_lun_discovery(scsi_qla_host_t *ha, fc_port_t *fcport);
- static void qla2x00_cfg_lun(fc_port_t *fcport, uint16_t lun);
--
- STATIC void qla2x00_process_failover(scsi_qla_host_t *ha) ;
- STATIC int qla2x00_device_reset(scsi_qla_host_t *, fc_port_t *);
- static inline int qla2x00_is_wwn_zero(uint8_t *wwn);
--static void qla2x00_get_lun_mask_from_config(scsi_qla_host_t *ha, fc_port_t *port,
-+void qla2x00_get_lun_mask_from_config(scsi_qla_host_t *ha, fc_port_t *port,
-                                       uint16_t tgt, uint16_t dev_no);
--static void 
--qla2x00_print_q_info(os_lun_t *q);
--
--#if QLA2X_PERFORMANCE
--static void qla2x00_done_tasklet(long p);
--#endif
-+void qla2x00_print_q_info(os_lun_t *q);
- STATIC void qla2x00_failover_cleanup(srb_t *);
- void qla2x00_flush_failover_q(scsi_qla_host_t *, os_lun_t *);
--static void qla2x00_chg_endian(uint8_t buf[], size_t size);
-+void qla2x00_chg_endian(uint8_t buf[], size_t size);
- STATIC uint8_t qla2x00_check_sense(Scsi_Cmnd *cp, os_lun_t *);
- STATIC uint8_t 
-@@ -488,7 +460,11 @@ qla2x00_suspend_target(scsi_qla_host_t *
- STATIC uint8_t
- qla2x00_check_for_devices_online(scsi_qla_host_t *ha);
-+int qla2x00_test_active_port( fc_port_t *fcport ); 
-+STATIC void qla2x00_probe_for_all_luns(scsi_qla_host_t *ha); 
-+void qla2x00_find_all_active_ports(srb_t *sp); 
-+int qla2x00_test_active_lun( fc_port_t *fcport, fc_lun_t *fclun );
- #if DEBUG_QLA2100
- #if !defined(QL_DEBUG_ROUTINES)
-@@ -510,7 +486,7 @@ STATIC int  mbxtimeout = 0;
- #endif
- #if DEBUG_GET_FW_DUMP
--#if defined(ISP2300)
-+#if defined(ISP2300) 
- STATIC void qla2300_dump_isp(scsi_qla_host_t *ha),
- #endif
- qla2x00_dump_word(uint8_t *, uint32_t, uint32_t);
-@@ -520,13 +496,14 @@ STATIC void qla2x00_sleep_done (struct s
- #endif
- STATIC void qla2x00_retry_command(scsi_qla_host_t *, srb_t *);
--STATIC uint8_t qla2x00_allocate_sp_pool( scsi_qla_host_t *ha);
--STATIC void qla2x00_free_sp_pool(scsi_qla_host_t *ha );
-+static inline void qla2x00_add_timer_to_cmd(srb_t *, int);
-+uint8_t qla2x00_allocate_sp_pool( scsi_qla_host_t *ha);
-+void qla2x00_free_sp_pool(scsi_qla_host_t *ha );
- STATIC srb_t * qla2x00_get_new_sp (scsi_qla_host_t *ha);
- STATIC uint8_t qla2x00_check_tgt_status(scsi_qla_host_t *ha, Scsi_Cmnd *cmd);
- STATIC uint8_t qla2x00_check_port_status(scsi_qla_host_t *ha,
-               fc_port_t *fcport);
--STATIC void qla2x00_mark_device_lost(scsi_qla_host_t *ha, fc_port_t *fcport);
-+STATIC void qla2x00_mark_device_lost(scsi_qla_host_t *, fc_port_t *, int);
- STATIC void qla2x00_mark_all_devices_lost( scsi_qla_host_t *ha );
- STATIC inline void qla2x00_delete_from_done_queue(scsi_qla_host_t *, srb_t *); 
-@@ -564,18 +541,12 @@ STATIC uint8_t qla2x00_erase_flash_secto
-               uint32_t addr, uint32_t sec_mask, uint8_t mid);
- STATIC uint8_t qla2x00_get_flash_manufacturer(scsi_qla_host_t *ha);
- STATIC uint16_t qla2x00_get_flash_version(scsi_qla_host_t *);
-+STATIC uint16_t qla2x00_get_fcode_version(scsi_qla_host_t *, uint32_t);
- #if defined(NOT_USED_FUNCTION)
- STATIC uint16_t qla2x00_get_flash_image(scsi_qla_host_t *ha, uint8_t *image);
- #endif
- STATIC uint16_t qla2x00_set_flash_image(scsi_qla_host_t *ha, uint8_t *image);
--#if USE_FLASH_DATABASE
--STATIC void qla2x00_flash_enable_database(scsi_qla_host_t *);
--STATIC void qla2x00_flash_disable_database(scsi_qla_host_t *);
--STATIC uint8_t qla2x00_get_database(scsi_qla_host_t *);
--STATIC uint8_t qla2x00_save_database(scsi_qla_host_t *);
--#endif
--
- /* Some helper functions */
- static inline uint32_t qla2x00_normalize_dma_addr(
-               dma_addr_t *e_addr,  uint32_t *e_len,
-@@ -592,8 +563,11 @@ static inline cont_entry_t *qla2x00_prep
- static inline cont_a64_entry_t *qla2x00_prep_a64_cont_packet(
-               scsi_qla_host_t *ha,
-               uint16_t *req_ring_index, request_t **request_ring_ptr);
-+STATIC inline void 
-+qla2x00_free_request_resources(scsi_qla_host_t *dest_ha, srb_t *sp);
-+ 
--static inline void qla2x00_config_dma_addressing(scsi_qla_host_t *ha);
-+#include "qla_inline.h"
- /**
-  * qla2x00_normalize_dma_addr() - Normalize an DMA address.
-@@ -659,12 +633,10 @@ qla2x00_normalize_dma_addr(
-       return (normalized);
- }
--static int
--qla2x00_add_initiator_device(scsi_qla_host_t *ha, fcdev_t *device);
--
-+void qla2x00_ioctl_error_recovery(scsi_qla_host_t *); 
- /* Debug print buffer */
--static char          debug_buff[LINESIZE*3];
-+char          debug_buff[LINESIZE*3];
- /*
- * insmod needs to find the variable and make it point to something
-@@ -673,7 +645,7 @@ static char *ql2xdevconf = NULL;
- static int ql2xdevflag = 0;
- #if MPIO_SUPPORT
--static int ql2xretrycount = 30;
-+static int ql2xretrycount = 60;
- #else
- static int ql2xretrycount = 20;
- #endif
-@@ -684,13 +656,14 @@ static int ql2xlogintimeout = 20;
- static int qlport_down_retry = 0;
- #endif
- static int ql2xmaxqdepth = 0;
--static int displayConfig = 0;
-+static int displayConfig = 1;                 /* 1- default, 2 - for lunids */
- static int retry_gnnft         = 10; 
- static int qfull_retry_count = 16;
- static int qfull_retry_delay = 2;
- static int extended_error_logging = 0;                /* 0 = off, 1 = log errors */
-+static int ql2xplogiabsentdevice = 0;
- #if defined(ISP2300)
--static int ql2xintrdelaytimer = 10;
-+static int ql2xintrdelaytimer = 3;
- #endif
- /* Enable for failover */
-@@ -700,6 +673,10 @@ static int ql2xfailover = 1;
- static int ql2xfailover = 0;
- #endif
-+#if defined(ISP2200) || defined(ISP2300)
-+static int qlogin_retry_count = 0;
-+#endif
-+
- static int ConfigRequired = 0;
- static int recoveryTime = MAX_RECOVERYTIME;
- static int failbackTime = MAX_FAILBACKTIME;
-@@ -708,8 +685,8 @@ static int failbackTime = MAX_FAILBACKTI
- static int Bind = BIND_BY_PORT_NAME;
- static int ql2xsuspendcount = SUSPEND_COUNT;
-+static int ql2xioctltimeout = QLA_PT_CMD_TOV;
--#if defined(MODULE)
- static char *ql2xopts = NULL;
- /* insmod qla2100 ql2xopts=verbose" */
-@@ -785,7 +762,7 @@ MODULE_PARM_DESC(failbackTime,
- MODULE_PARM(Bind, "i");
- MODULE_PARM_DESC(Bind,
-               "Target persistent binding method: "
--              "0 by Portname (default); 1 by PortID; 2 by Nodename. ");
-+              "0 by Portname (default); 1 by PortID. ");
- MODULE_PARM(ql2xsuspendcount,"i");
- MODULE_PARM_DESC(ql2xsuspendcount,
-@@ -810,8 +787,25 @@ MODULE_PARM_DESC(extended_error_logging,
-               "Option to enable extended error logging, "
-               "Default is 0 - no logging. 1 - log errors.");
-+MODULE_PARM(ql2xplogiabsentdevice, "i");
-+MODULE_PARM_DESC(ql2xplogiabsentdevice,
-+              "Option to enable PLOGI to devices that are not present after "
-+              "a Fabric scan.  This is needed for several broken switches."
-+              "Default is 0 - no PLOGI. 1 - perfom PLOGI.");
-+
-+#if defined(ISP2200) || defined(ISP2300)
-+MODULE_PARM(qlogin_retry_count,"i");
-+MODULE_PARM_DESC(qlogin_retry_count,
-+              "Option to modify the login retry count.");
-+#endif
-+
-+MODULE_PARM(ql2xioctltimeout,"i");
-+MODULE_PARM_DESC(ql2xioctltimeout,
-+              "IOCTL timeout value in seconds for pass-thur commands, "
-+              "Default=66");
-+
- MODULE_DESCRIPTION("QLogic Fibre Channel Host Adapter Driver");
--MODULE_AUTHOR("QLogic Corporation");
-+MODULE_AUTHOR(QLOGIC_COMPANY_NAME);
- #if defined(MODULE_LICENSE)
-        MODULE_LICENSE("GPL");
- #endif
-@@ -834,8 +828,6 @@ MODULE_PARM_DESC(ql2xuseextopts,
- static char *ql2x_extopts = NULL;
--#endif
--
- #include "listops.h"
- #include "qla_fo.cfg"
-@@ -850,6 +842,9 @@ static int qla2x00_lip = 0;
- /* multi-OS QLOGIC IOCTL definition file */
- #include "exioct.h"
-+#if REG_FDMI_ENABLED
-+#include "qla_gs.h"
-+#endif
- #if QLA_SCSI_VENDOR_DIR
- /* Include routine to set direction for vendor specific commands */
-@@ -887,117 +882,12 @@ static int qla2x00_lip = 0;
- #include "qla_debug.h"
-+uint8_t copyright[48] = "Copyright 1999-2003, QLogic Corporation";
-+
- /****************************************************************************/
- /*  LINUX -  Loadable Module Functions.                                     */
- /****************************************************************************/
--/*****************************************/
--/*   ISP Boards supported by this driver */
--/*****************************************/
--#define QLA2X00_VENDOR_ID   0x1077
--#define QLA2100_DEVICE_ID   0x2100
--#define QLA2200_DEVICE_ID   0x2200
--#define QLA2200A_DEVICE_ID  0x2200A
--#define QLA2300_DEVICE_ID   0x2300
--#define QLA2312_DEVICE_ID   0x2312
--#define QLA2200A_RISC_ROM_VER  4
--#define FPM_2300            6
--#define FPM_2310            7
--
--#if defined(ISP2100)
--#define NUM_OF_ISP_DEVICES  2
--static struct pci_device_id qla2100_pci_tbl[] =
--{
--      {QLA2X00_VENDOR_ID, QLA2100_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
--      {0,}
--};
--MODULE_DEVICE_TABLE(pci, qla2100_pci_tbl);
--#endif
--#if defined(ISP2200)
--#define NUM_OF_ISP_DEVICES  2
--static struct pci_device_id qla2200_pci_tbl[] =
--{
--      {QLA2X00_VENDOR_ID, QLA2200_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
--      {0,}
--};
--MODULE_DEVICE_TABLE(pci, qla2200_pci_tbl);
--#endif
--#if defined(ISP2300)
--#define NUM_OF_ISP_DEVICES  3
--static struct pci_device_id qla2300_pci_tbl[] =
--{
--      {QLA2X00_VENDOR_ID, QLA2300_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
--      {QLA2X00_VENDOR_ID, QLA2312_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
--      {0,}
--};
--MODULE_DEVICE_TABLE(pci, qla2300_pci_tbl);
--#endif
--
--typedef struct _qlaboards
--{
--        unsigned char   bdName[9];       /* Board ID String             */
--        unsigned long   device_id;       /* Device ID                   */
--        int   numPorts;                  /* number of loops on adapter  */
--        unsigned short   *fwcode;        /* pointer to FW array         */
--        unsigned short   *fwlen;         /* number of words in array    */
--        unsigned short   *fwstart;       /* start address for F/W       */
--        unsigned char   *fwver;          /* Ptr to F/W version array    */
--}
--qla_boards_t;
--
--/*
-- * NOTE: Check the Product ID of the Chip during chip diagnostics
-- *       whenever support for new ISP is added. 
-- */
--static struct _qlaboards   QLBoardTbl_fc[NUM_OF_ISP_DEVICES] =
--{
--      /* Name ,  Board PCI Device ID,         Number of ports */
--#if defined(ISP2300)
--      {"QLA2312 ", QLA2312_DEVICE_ID,           MAX_BUSES,
--#if defined(FC_IP_SUPPORT)
--              &fw2300ip_code01[0], &fw2300ip_length01,
--              &fw2300ip_addr01, &fw2300ip_version_str[0]
--      },
--#else
--              &fw2300tp_code01[0], &fw2300tp_length01,
--              &fw2300tp_addr01, &fw2300tp_version_str[0]
--      },
--#endif
--      {"QLA2300 ", QLA2300_DEVICE_ID,           MAX_BUSES,
--#if defined(FC_IP_SUPPORT)
--              &fw2300ip_code01[0], &fw2300ip_length01,
--              &fw2300ip_addr01, &fw2300ip_version_str[0]
--      },
--#else
--              &fw2300tp_code01[0], &fw2300tp_length01,
--              &fw2300tp_addr01, &fw2300tp_version_str[0]
--      },
--#endif
--#endif
--
--#if defined(ISP2200)
--      {"QLA2200 ", QLA2200_DEVICE_ID,           MAX_BUSES,
--#if defined(FC_IP_SUPPORT)
--              &fw2200ip_code01[0], &fw2200ip_length01,
--              &fw2200ip_addr01, &fw2200ip_version_str[0]
--      },
--#else
--              &fw2200tp_code01[0], &fw2200tp_length01,
--              &fw2200tp_addr01, &fw2200tp_version_str[0]
--      },
--#endif
--#endif
--
--#if defined(ISP2100)
--      {"QLA2100 ", QLA2100_DEVICE_ID,           MAX_BUSES,
--              &fw2100tp_code01[0], &fw2100tp_length01,
--              &fw2100tp_addr01, &fw2100tp_version_str[0]
--      },
--#endif
--
--      {"        ",                 0,           0}
--};
--
- /*
- * Stat info for all adpaters
- */
-@@ -1009,10 +899,6 @@ static struct _qla2100stats  {
-         unsigned long   loop_resync;
-         unsigned long   outarray_full;
-         unsigned long   retry_q_cnt;
--#ifdef PERF_MONITORING
--        unsigned long   highmem_io;
--#endif
--        scsi_qla_host_t *irqhba;
- }
- qla2x00_stats;
-@@ -1056,26 +942,40 @@ STATIC int qla2x00_retryq_dmp = 0;      
- #include <scsi/scsi_ioctl.h>
- #include <asm/uaccess.h>
-+static inline void qla2x00_config_dma_addressing(scsi_qla_host_t *ha);
-+/**
-+ * qla2x00_config_dma_addressing() - Configure OS DMA addressing method.
-+ * @ha: HA context
-+ *
-+ * At exit, the @ha's flags.enable_64bit_addressing set to indicated
-+ * supported addressing method.
-+ */
-+static inline void
-+qla2x00_config_dma_addressing(scsi_qla_host_t *ha)
-+{
-+      /* Assume 32bit DMA address */
-+      ha->flags.enable_64bit_addressing = 0;
-+
-+      if (sizeof(dma_addr_t) > 4) {
-+              /* Update our PCI device dma_mask for full 64 bits */
-+              if (pci_set_dma_mask(ha->pdev, 0xffffffffffffffffULL) == 0) {
-+                      ha->flags.enable_64bit_addressing = 1;
-+              } else {
-+                      printk("qla2x00: Failed to set 64 bit PCI mask; using "
-+                          "32 bit mask.\n");
-+                      pci_set_dma_mask(ha->pdev, 0xffffffff);
-+              }
-+      } else {
-+              pci_set_dma_mask(ha->pdev, 0xffffffff);
-+      }
--#define MAX_LOCAL_LOOP_IDS    127
--static uint8_t alpa_table[MAX_LOCAL_LOOP_IDS] = {
--      0xEF, 0xE8, 0xE4, 0xE2, 0xE1, 0xE0, 0xDC, 0xDA,
--      0xD9, 0xD6, 0xD5, 0xD4, 0xD3, 0xD2, 0xD1, 0xCE,
--      0xCD, 0xCC, 0xCB, 0xCA, 0xC9, 0xC7, 0xC6, 0xC5,
--      0xC3, 0xBC, 0xBA, 0xB9, 0xB6, 0xB5, 0xB4, 0xB3,
--      0xB2, 0xB1, 0xAE, 0xAD, 0xAC, 0xAB, 0xAA, 0xA9,
--      0xA7, 0xA6, 0xA5, 0xA3, 0x9F, 0x9E, 0x9D, 0x9B,
--      0x98, 0x97, 0x90, 0x8F, 0x88, 0x84, 0x82, 0x81,
--      0x80, 0x7C, 0x7A, 0x79, 0x76, 0x75, 0x74, 0x73,
--      0x72, 0x71, 0x6E, 0x6D, 0x6C, 0x6B, 0x6A, 0x69,
--      0x67, 0x66, 0x65, 0x63, 0x5C, 0x5A, 0x59, 0x56,
--      0x55, 0x54, 0x53, 0x52, 0x51, 0x4E, 0x4D, 0x4C,
--      0x4B, 0x4A, 0x49, 0x47, 0x46, 0x45, 0x43, 0x3C,
--      0x3A, 0x39, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31,
--      0x2E, 0x2D, 0x2C, 0x2B, 0x2A, 0x29, 0x27, 0x26,
--      0x25, 0x23, 0x1F, 0x1E, 0x1D, 0x1B, 0x18, 0x17,
--      0x10, 0x0F, 0x08, 0x04, 0x02, 0x01, 0x00
--};
-+      printk(KERN_INFO
-+          "scsi(%ld): %d Bit PCI Addressing Enabled.\n", ha->host_no,
-+          (ha->flags.enable_64bit_addressing ? 64 : 32));
-+      DEBUG2(printk(KERN_INFO
-+          "scsi(%ld): Scatter/Gather entries= %d\n", ha->host_no,
-+          ha->host->sg_tablesize));
-+}
- /*************************************************************************
- *   qla2x00_set_info
-@@ -1085,13 +985,12 @@ static uint8_t alpa_table[MAX_LOCAL_LOOP
- *
- * Returns:
- *************************************************************************/
--static int
-+int
- qla2x00_set_info(char *buffer, int length, scsi_qla_host_t *ha)
- {
--      
--
--      if (length < 13 || strncmp("scsi-qla", buffer, 7))
-+      if (length < 13 || strncmp("scsi-qla", buffer, 8))
-               goto out;
-+
-       /*
-        * Usage: echo "scsi-qlascan " > /proc/scsi/<driver-name>/<adapter-id>
-        *
-@@ -1105,10 +1004,19 @@ qla2x00_set_info(char *buffer, int lengt
-        * Scan for all luns on all ports. 
-        */
-       if (!strncmp("scan", buffer + 8, 4)) {
--                      printk("scsi-qla%ld: Scheduling SCAN for new luns.... \n",ha->host_no);
--                      printk(KERN_INFO "scsi-qla%ld: Scheduling SCAN for new luns.... \n",ha->host_no);
--                      set_bit(PORT_SCAN_NEEDED, &ha->dpc_flags);
-+              printk("scsi-qla%ld: Scheduling SCAN for new luns.... \n",
-+                  ha->host_no);
-+              printk(KERN_INFO
-+                  "scsi-qla%ld: Scheduling SCAN for new luns.... \n",
-+                  ha->host_no);
-+              set_bit(PORT_SCAN_NEEDED, &ha->dpc_flags);
-+      } else if (!strncmp("lip", buffer + 8, 3)) {
-+              printk("scsi-qla%ld: Scheduling LIP.... \n", ha->host_no);
-+              printk(KERN_INFO
-+                  "scsi-qla%ld: Scheduling LIP.... \n", ha->host_no);
-+              set_bit(LOOP_RESET_NEEDED, &ha->dpc_flags);
-       }
-+
- out:
-       /* return (-ENOSYS); */  /* Currently this is a no-op */
-       return (length);  /* Currently this is a no-op */
-@@ -1187,7 +1095,7 @@ copy_info(struct info_str *info, char *f
- *         < 0:  error. errno value.
- *         >= 0: sizeof data returned.
- *************************************************************************/
--static int
-+int
- qla2x00_proc_info(char *buffer, char **start, off_t offset,
-                 int length, int hostno, int inout)
- {
-@@ -1204,6 +1112,11 @@ qla2x00_proc_info(char *buffer, char **s
-       struct list_head *list, *temp;
-       unsigned long   cpu_flags;
-       uint8_t         *loop_state;
-+      fc_port_t       *fcport;
-+      os_tgt_t        *tq;
-+#if defined(ISP2300)
-+      struct qla2x00_special_options special_options;
-+#endif
- #if REQ_TRACE
-@@ -1340,12 +1253,6 @@ qla2x00_proc_info(char *buffer, char **s
-           ha->qthreads, ha->retry_q_cnt,
-           ha->done_q_cnt, ha->scsi_retry_q_cnt);
--#ifdef PERF_MONITORING
--      copy_info(&info,
--          "Number of highmem_io = %ld\n",
--          qla2x00_stats.highmem_io);
--#endif
--
-       if (ha->flags.failover_enabled) {
-               copy_info(&info,
-                   "Number of reqs in failover_q= %d\n",
-@@ -1354,17 +1261,17 @@ qla2x00_proc_info(char *buffer, char **s
-       flags = (unsigned long *) &ha->flags;
--      if (ha->loop_state == LOOP_DOWN) {
-+      if (atomic_read(&ha->loop_state) == LOOP_DOWN) {
-               loop_state = "DOWN";
--      } else if (ha->loop_state == LOOP_UP) {
-+      } else if (atomic_read(&ha->loop_state) == LOOP_UP) {
-               loop_state = "UP";
--      } else if (ha->loop_state == LOOP_READY) {
-+      } else if (atomic_read(&ha->loop_state) == LOOP_READY) {
-               loop_state = "READY";
--      } else if (ha->loop_state == LOOP_TIMEOUT) {
-+      } else if (atomic_read(&ha->loop_state) == LOOP_TIMEOUT) {
-               loop_state = "TIMEOUT";
--      } else if (ha->loop_state == LOOP_UPDATE) {
-+      } else if (atomic_read(&ha->loop_state) == LOOP_UPDATE) {
-               loop_state = "UPDATE";
--      } else if (ha->loop_state == LOOP_DEAD) {
-+      } else if (atomic_read(&ha->loop_state) == LOOP_DEAD) {
-               loop_state = "DEAD";
-       } else {
-               loop_state = "UNKNOWN";
-@@ -1393,6 +1300,34 @@ qla2x00_proc_info(char *buffer, char **s
-           "Commands retried with dropped frame(s) = %d\n",
-           ha->dropped_frame_error_cnt);
-+#if defined(ISP2300)
-+      *((uint16_t *) &special_options) =
-+          le16_to_cpu(*((uint16_t *) &ha->init_cb->special_options));
-+
-+      copy_info(&info,
-+          "Configured characteristic impedence: %d ohms\n",
-+          special_options.enable_50_ohm_termination ? 50 : 75);
-+
-+      switch (special_options.data_rate) {
-+      case 0:
-+              loop_state = "1 Gb/sec";
-+              break;
-+
-+      case 1:
-+              loop_state = "2 Gb/sec";
-+              break;
-+
-+      case 2:
-+              loop_state = "1-2 Gb/sec auto-negotiate";
-+              break;
-+
-+      default:
-+              loop_state = "unknown";
-+              break;
-+      }
-+      copy_info(&info, "Configured data rate: %s\n", loop_state);
-+#endif
-+
-       copy_info(&info, "\n");
- #if REQ_TRACE
-@@ -1491,52 +1426,43 @@ qla2x00_proc_info(char *buffer, char **s
-           ha->init_cb->port_name[7]);
-       /* Print out device port names */
--      for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
--              if (ha->fc_db[i].loop_id == PORT_UNUSED) {
--                      continue;
--              }
-+      if (ha->flags.failover_enabled) {
-+              i = 0;
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-+                      if(fcport->port_type != FCT_TARGET)
-+                              continue;
--              if (ha->flags.failover_enabled) {
--                      copy_info(&info,
--                          "scsi-qla%d-port-%d="
--                          "%02x%02x%02x%02x%02x%02x%02x%02x:"
--                          "%02x%02x%02x%02x%02x%02x%02x%02x;\n",
--                          (int)ha->instance, i,
--                          ha->fc_db[i].name[0],
--                          ha->fc_db[i].name[1],
--                          ha->fc_db[i].name[2],
--                          ha->fc_db[i].name[3],
--                          ha->fc_db[i].name[4],
--                          ha->fc_db[i].name[5],
--                          ha->fc_db[i].name[6],
--                          ha->fc_db[i].name[7],
--                          ha->fc_db[i].wwn[0],
--                          ha->fc_db[i].wwn[1],
--                          ha->fc_db[i].wwn[2],
--                          ha->fc_db[i].wwn[3],
--                          ha->fc_db[i].wwn[4],
--                          ha->fc_db[i].wwn[5],
--                          ha->fc_db[i].wwn[6],
--                          ha->fc_db[i].wwn[7]);
--              } else {
-+                              copy_info(&info,
-+                              "scsi-qla%d-port-%d="
-+                              "%02x%02x%02x%02x%02x%02x%02x%02x:"
-+                              "%02x%02x%02x%02x%02x%02x%02x%02x;\n",
-+                              (int)ha->instance, i,
-+                              fcport->node_name[0], fcport->node_name[1],
-+                              fcport->node_name[2], fcport->node_name[3],
-+                              fcport->node_name[4], fcport->node_name[5],
-+                              fcport->node_name[6], fcport->node_name[7],
-+                              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]); 
-+                      i++;
-+              }
-+      } else {
-+              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;\n",
--                          (int)ha->instance, i,
--                          ha->fc_db[i].wwn[0],
--                          ha->fc_db[i].wwn[1],
--                          ha->fc_db[i].wwn[2],
--                          ha->fc_db[i].wwn[3],
--                          ha->fc_db[i].wwn[4],
--                          ha->fc_db[i].wwn[5],
--                          ha->fc_db[i].wwn[6],
--                          ha->fc_db[i].wwn[7]);
-+                      "scsi-qla%d-target-%d="
-+                      "%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]);
-               }
--
--      } /* 2.25 node/port display to proc */
-+      }
-       copy_info(&info, "\nSCSI LUN Information:\n");
--
-       copy_info(&info, "(Id:Lun)  * - indicates lun is not registered with the OS.\n");
-       /* scan for all equipment stats */
-@@ -1573,13 +1499,6 @@ qla2x00_proc_info(char *buffer, char **s
-                                   (int)up->q_flag);
-                       }
--#ifdef PERF_MONITORING
--                      copy_info(&info, 
--                        " %lx:%lx (act,resp),",
--                        up->act_time/up->io_cnt,
--                        up->resp_time/up->io_cnt);
--#endif
--
-                       copy_info(&info, 
-                           " %ld:%d:%02x,",
-                           up->fclun->fcport->ha->instance,
-@@ -1650,8 +1569,6 @@ pci_set_dma_mask(struct pci_dev *dev, u6
- static inline void
- sp_put(struct scsi_qla_host * ha, srb_t *sp)
- {
--        unsigned long flags;
--
-         if (atomic_read(&sp->ref_count) == 0) {
-               printk(KERN_INFO
-                       "%s(): **** SP->ref_count not zero\n",
-@@ -1665,19 +1582,7 @@ sp_put(struct scsi_qla_host * ha, srb_t 
-                 return;
-         }
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--        spin_lock_irqsave(&io_request_lock, flags);
--#else
--        spin_lock_irqsave(ha->host->host_lock, flags);
--#endif
--
-         qla2x00_callback(ha, sp->cmd);
--
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--        spin_unlock_irqrestore(&io_request_lock, flags);
--#else
--        spin_unlock_irqrestore(ha->host->host_lock, flags);
--#endif
- }
- /**************************************************************************
-@@ -1753,7 +1658,7 @@ __sp_put(struct scsi_qla_host * ha, srb_
- * None.
- * Note:Need to add the support for if( sp->state == SRB_FAILOVER_STATE).
- **************************************************************************/
--static void
-+void
- qla2x00_cmd_timeout(srb_t *sp)
- {
-       int t, l;
-@@ -1761,9 +1666,7 @@ qla2x00_cmd_timeout(srb_t *sp)
-       scsi_qla_host_t *vis_ha, *dest_ha;
-       Scsi_Cmnd *cmd;
-       ulong      flags;
--#if defined(QL_DEBUG_LEVEL_3)
-       ulong      cpu_flags;
--#endif
-       fc_port_t       *fcport;
-       cmd = sp->cmd;
-@@ -1799,8 +1702,12 @@ qla2x00_cmd_timeout(srb_t *sp)
-                * DID_BUS_BUSY to let the OS  retry this cmd.
-                */
-               if (atomic_read(&fcport->state) == FC_DEVICE_DEAD ||
--                              ( vis_ha->loop_state == LOOP_DEAD )){
-+                  atomic_read(&fcport->ha->loop_state) == LOOP_DEAD) {
-                       cmd->result = DID_NO_CONNECT << 16;
-+                      if (atomic_read(&fcport->ha->loop_state) == LOOP_DOWN) 
-+                              sp->err_id = SRB_ERR_LOOP;
-+                      else
-+                              sp->err_id = SRB_ERR_PORT;
-               } else {
-                       cmd->result = DID_BUS_BUSY << 16;
-               }
-@@ -1809,12 +1716,8 @@ qla2x00_cmd_timeout(srb_t *sp)
-       } 
-       spin_unlock_irqrestore(&vis_ha->list_lock, flags);
-       if (processed) {
--#if QLA2X_PERFORMANCE
--               tasklet_schedule(&vis_ha->run_qla_task);
--#else
-                if (vis_ha->dpc_wait && !vis_ha->dpc_active) 
-                        up(vis_ha->dpc_wait);
--#endif
-                return;
-       }
-@@ -1847,10 +1750,15 @@ qla2x00_cmd_timeout(srb_t *sp)
-               if (dest_ha->flags.failover_enabled) {
-                       cmd->result = DID_BUS_BUSY << 16;
-               } else {
--                      if ((atomic_read(&fcport->state) == FC_DEVICE_DEAD)  ||
--                              ( dest_ha->loop_state == LOOP_DEAD )){
-+                      if (atomic_read(&fcport->state) == FC_DEVICE_DEAD ||
-+                          atomic_read(&dest_ha->loop_state) == LOOP_DEAD) {
-                               qla2x00_extend_timeout(cmd, EXTEND_CMD_TIMEOUT);
-                               cmd->result = DID_NO_CONNECT << 16;
-+                              if (atomic_read(&dest_ha->loop_state) ==
-+                                  LOOP_DOWN) 
-+                                      sp->err_id = SRB_ERR_LOOP;
-+                              else
-+                                      sp->err_id = SRB_ERR_PORT;
-                       } else {
-                               cmd->result = DID_BUS_BUSY << 16;
-                       }
-@@ -1861,16 +1769,11 @@ qla2x00_cmd_timeout(srb_t *sp)
-       } 
-       spin_unlock_irqrestore(&dest_ha->list_lock, flags);
-       if (processed) {
--#if QLA2X_PERFORMANCE
--               tasklet_schedule(&dest_ha->run_qla_task);
--#else
-                if (dest_ha->dpc_wait && !dest_ha->dpc_active) 
-                        up(dest_ha->dpc_wait);
--#endif
-                return;
-       }
--#if defined(QL_DEBUG_LEVEL_3)
-       spin_lock_irqsave(&dest_ha->list_lock, cpu_flags);
-       if (sp->state == SRB_DONE_STATE) {
-               /* IO in done_q  -- leave it */
-@@ -1893,6 +1796,24 @@ qla2x00_cmd_timeout(srb_t *sp)
-                       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);
-+                      } else if (sp->flags & SRB_IOCTL) {
-+                              dest_ha->ioctl_err_cmd = sp->cmd;
-+                              set_bit(IOCTL_ERROR_RECOVERY, &dest_ha->dpc_flags);
-+                              if (dest_ha->dpc_wait && !dest_ha->dpc_active) 
-+                                      up(dest_ha->dpc_wait);
-+                      }
-+
-                       sp->state = SRB_ACTIVE_TIMEOUT_STATE;
-                       spin_unlock_irqrestore(&dest_ha->hardware_lock, flags);
-               } else {
-@@ -1917,8 +1838,7 @@ qla2x00_cmd_timeout(srb_t *sp)
-                       "cmd_timeout: LOST command state = 0x%x\n", sp->state);
-       }
-       spin_unlock_irqrestore(&dest_ha->list_lock, cpu_flags);
--#endif
--      
-+
-       DEBUG3(printk("cmd_timeout: Leaving\n");)
- }
-@@ -1943,16 +1863,7 @@ qla2x00_add_timer_to_cmd(srb_t *sp, int 
-       sp->timer.expires = jiffies + timeout * HZ;
-       sp->timer.data = (unsigned long) sp;
-       sp->timer.function = (void (*) (unsigned long))qla2x00_cmd_timeout;
--#ifndef __VMWARE__
-       add_timer(&sp->timer);
--#else
--        if (timeout) {
--           add_timer(&sp->timer);
--        }
--        else {
--           sp->timer.function = NULL;
--        }
--#endif
- }
- /**************************************************************************
-@@ -1981,7 +1892,7 @@ qla2x00_delete_timer_from_cmd(srb_t *sp 
- * qla2x00_detect
- *
- * Description:
--*    This routine will probe for Qlogic FC SCSI host adapters.
-+*    This routine will probe for QLogic FC SCSI host adapters.
- *    It returns the number of host adapters of a particular
- *    type that were found.     It also initialize all data necessary for
- *    the driver.  It is passed-in the host number, so that it
-@@ -1993,7 +1904,7 @@ qla2x00_delete_timer_from_cmd(srb_t *sp 
- * Returns:
- *  num - number of host adapters found.
- **************************************************************************/
--static int
-+int
- qla2x00_detect(Scsi_Host_Template *template)
- {
-       int             ret;
-@@ -2010,17 +1921,7 @@ qla2x00_detect(Scsi_Host_Template *templ
-       ENTER("qla2x00_detect");
--#ifdef __VMWARE__
--        if (vmk_check_version(VMKDRIVER_VERSION) != VMK_VERSION_OK) {
--           return 0;
--        }
--        /* In the vmkernel, we do not hold the io_request lock during init,
--         * so leave it unlocked and do not lock it before returning. */
--#else
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-       spin_unlock_irq(&io_request_lock);
--#endif
--#endif //__VMWARE__
- #if defined(MODULE)
-       DEBUG3(printk("DEBUG: qla2x00_set_info starts at address = %p\n",
-@@ -2043,12 +1944,12 @@ qla2x00_detect(Scsi_Host_Template *templ
-       /* Increments the usage count of module: qla2[23]00_conf */
- #if defined(ISP2200)
--      ql2x_extopts = (char *) inter_module_get_request("qla22XX_conf",
--                                      "qla2200_conf");
-+      ql2x_extopts =
-+          (char *) inter_module_get_request("qla22XX_conf", "qla2200_conf");
- #endif
- #if defined(ISP2300)
--      ql2x_extopts = (char *) inter_module_get_request("qla23XX_conf",
--                                      "qla2300_conf");
-+      ql2x_extopts =
-+          (char *) inter_module_get_request("qla23XX_conf", "qla2300_conf");
- #endif
-       DEBUG4(printk("qla2x00_detect: ql2xopts=%p ql2x_extopts=%p "
-@@ -2061,8 +1962,8 @@ qla2x00_detect(Scsi_Host_Template *templ
-               /* Force to use old option. */
-               qla2x00_setup(ql2xopts);
-               printk(KERN_INFO "qla2x00:Loading driver with config data "
--                  " from /etc/modules.conf. Config Data length=0x%x\n",
--                  strlen(ql2xopts));
-+                  " from /etc/modules.conf. Config Data length=0x%lx\n",
-+                  (ulong)strlen(ql2xopts));
-       } else if (ql2x_extopts != NULL && *ql2x_extopts != '\0') {
-               DEBUG4(printk( "qla2x00_detect: using new opt:"
-@@ -2073,8 +1974,8 @@ qla2x00_detect(Scsi_Host_Template *templ
-                       ql2xdevflag++;
-               }
-               printk(KERN_INFO "qla2x00: Loading driver with config data "
--                  "from config module. Config Data length=0x%x\n",
--                  strlen(ql2x_extopts));
-+                  "from config module. Config Data length=0x%lx\n",
-+                  (ulong)strlen(ql2x_extopts));
-       }
-       if (dummy_buffer[0] != 'P')
-@@ -2091,11 +1992,8 @@ qla2x00_detect(Scsi_Host_Template *templ
-       if (!pci_present()) {
-               printk("scsi: PCI not present\n");
--#ifndef __VMWARE__
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-               spin_lock_irq(&io_request_lock);
--#endif
--#endif //__VMWARE__
-+
-               return 0;
-       } /* end of !pci_present() */
-@@ -2121,6 +2019,7 @@ qla2x00_detect(Scsi_Host_Template *templ
-       for (i = 0; bdp->device_id != 0 && i < NUM_OF_ISP_DEVICES;
-               i++, bdp++) {
-+              pdev = NULL;
-               /* PCI_SUBSYSTEM_IDS supported */
-               while ((pdev = pci_find_subsys(QLA2X00_VENDOR_ID,
-                                               bdp->device_id,
-@@ -2142,25 +2041,6 @@ qla2x00_detect(Scsi_Host_Template *templ
-                       subsystem_vendor = pdev->subsystem_vendor;
-                       subsystem_device = pdev->subsystem_device;
--                      /* If it's an XXX SubSys Vendor ID adapter, skip it. */
--                      /*
--                         if (pdev->subsystem_vendor == PCI_VENDOR_ID_XXX) {
--                         printk(KERN_WARNING
--                         "qla2x00: Skip XXX SubSys Vendor ID "
--                         "Controller\n");
--                         continue;
--                         }
--                       */
--
--#ifdef __VMWARE__
--         /* We do not need to hold any lock when calling the
--          * functions below in the vmkernel. */
--#else
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--                      spin_lock_irq(&io_request_lock);
--#endif
--#endif //__VMWARE__
--
- #if defined(ISP2100)
-                       template->name = "QLogic Fibre Channel 2100";
- #endif
-@@ -2170,35 +2050,20 @@ qla2x00_detect(Scsi_Host_Template *templ
- #if defined(ISP2300)
-                       template->name = "QLogic Fibre Channel 2300";
- #endif
--                      if ((host = 
--                              scsi_register(
--                                      template,
--                                      sizeof(scsi_qla_host_t))) == NULL) {
--
-+                      spin_lock_irq(&io_request_lock);
-+                      host = scsi_register(template, sizeof(scsi_qla_host_t));
-+                      spin_unlock_irq(&io_request_lock);
-+                      if (host == NULL) {
-                               printk(KERN_WARNING
--                                      "qla2x00: couldn't register "
--                                      "with scsi layer\n");
--                              return 0;
-+                                  "qla2x00: couldn't register with scsi "
-+                                  "layer\n");
-+                              goto bailout;
-                       }
-                       ha = (scsi_qla_host_t *)host->hostdata;
--#if defined(CONFIG_VMNIX) && !defined(__VMWARE__)
--                      host->bus = pdev->bus->number;
--                      host->function = pdev->devfn;
--                      host->devid = ha; 
--#endif
-                       /* Clear our data area */
-                       memset(ha, 0, sizeof(scsi_qla_host_t));
--#ifdef __VMWARE__
--                      scsi_register_uinfo(host, pdev->bus->number, pdev->devfn, ha);
--
--                      /* Now get and save the adapter pointer... */
--                      ha->vmk_adapter = host->adapter;
--                      if (ha->vmk_adapter == NULL) {
--                        panic("qla : vmkernel adapter structure is NULL\n");
--                      }
--#endif
-                       ha->host_no = host->host_no;
-                       ha->host = host;
-@@ -2208,10 +2073,10 @@ qla2x00_detect(Scsi_Host_Template *templ
-                       ret = qla2x00_iospace_config(ha);
-                       if (ret != 0) {
-                               printk(KERN_WARNING
--                                  "qla2x00: couldn't configure PCI I/O space!\n");
--
-+                                  "qla2x00: couldn't configure PCI I/O "
-+                                  "space!\n");
-+                              spin_lock_irq(&io_request_lock);
-                               scsi_unregister(host);
--
-                               spin_unlock_irq(&io_request_lock);
-       
-                               continue;
-@@ -2230,18 +2095,21 @@ qla2x00_detect(Scsi_Host_Template *templ
-                       ha->devnum = i;
-                       if (qla2x00_verbose) {
-                               printk(KERN_INFO
--                                      "scsi(%d): Found a %s @ bus %d, "
--                                      "device 0x%x, irq %d, iobase 0x%p\n",
--                                      host->host_no,
--                                      bdp->bdName, 
--                                      ha->pdev->bus->number,
--                                      PCI_SLOT(ha->pdev->devfn),
--                                      host->irq, 
--                                      ha->iobase);
-+                                  "scsi(%d): Found a %s @ bus %d, device "
-+                                  "0x%x, irq %d, iobase 0x%p\n",
-+                                  host->host_no, bdp->bdName,
-+                                  ha->pdev->bus->number,
-+                                  PCI_SLOT(ha->pdev->devfn), host->irq,
-+                                  ha->iobase);
-                       }
-                       spin_lock_init(&ha->hardware_lock);
-+#if defined(SH_HAS_HOST_LOCK)
-+                      spin_lock_init(&ha->host_lock);
-+                      host->host_lock = &ha->host_lock;
-+#endif
-+
-                       /* 4.23 Initialize /proc/scsi/qla2x00 counters */
-                       ha->actthreads = 0;
-                       ha->qthreads   = 0;
-@@ -2254,9 +2122,10 @@ qla2x00_detect(Scsi_Host_Template *templ
-                       ha->total_bytes = 0;
-                       /* Initialized memory allocation pointers */
--                      INIT_LIST_HEAD(&ha->fcinitiators);
-                       INIT_LIST_HEAD(&ha->free_queue);
-+                      INIT_LIST_HEAD(&ha->fcports);
-+
-                       INIT_LIST_HEAD(&ha->done_queue);
-                         INIT_LIST_HEAD(&ha->retry_queue);
-                         INIT_LIST_HEAD(&ha->scsi_retry_queue);
-@@ -2264,42 +2133,22 @@ qla2x00_detect(Scsi_Host_Template *templ
-                         INIT_LIST_HEAD(&ha->pending_queue);
--                      /*
--                       * Need to call this before the PCI allocations are
--                       * done in qla2x00_mem_alloc().
--                       */
-                       qla2x00_config_dma_addressing(ha);
--#ifndef __VMWARE__
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--                      spin_unlock_irq(&io_request_lock);
--#endif
--#endif //__VMWARE__
-+
-                       if (qla2x00_mem_alloc(ha)) {
-                               printk(KERN_WARNING
--                                      "scsi(%d): [ERROR] Failed to allocate "
--                                      "memory for adapter\n",
--                                      host->host_no);
-+                                  "scsi(%d): [ERROR] Failed to allocate "
-+                                  "memory for adapter\n", host->host_no);
-                               qla2x00_mem_free(ha);
--#ifndef __VMWARE__
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+                              pci_release_regions(ha->pdev);
-+
-                               spin_lock_irq(&io_request_lock);
--#endif
--#endif //__VMWARE__
-                               scsi_unregister(host);
--#ifndef __VMWARE__
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-                               spin_unlock_irq(&io_request_lock);
--#endif
--#endif //__VMWARE__
-+
-                               continue;
-                       }
--#ifndef __VMWARE__
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--                      spin_lock_irq(&io_request_lock);
--#endif
--#endif //__VMWARE__
--
-                       ha->prev_topology = 0;
-                       ha->ports = bdp->numPorts;
-@@ -2319,11 +2168,6 @@ qla2x00_detect(Scsi_Host_Template *templ
-                       else
-                               ha->flags.failover_enabled = 0;
--#if QLA2X_PERFORMANCE
--                      tasklet_init(&ha->run_qla_task,
--                                      (void *)qla2x00_done_tasklet,
--                                      (unsigned long) ha);
--#endif
-                       /*
-                        * These locks are used to prevent more than one CPU
-@@ -2337,61 +2181,30 @@ qla2x00_detect(Scsi_Host_Template *templ
-                       spin_lock_init(&ha->mbx_q_lock);
-                       spin_lock_init(&ha->list_lock);
--#ifndef __VMWARE__
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--                      spin_unlock_irq(&io_request_lock);
--#endif
--#endif //__VMWARE__
--
-                       if (qla2x00_initialize_adapter(ha) &&
-                               !(ha->device_flags & DFLG_NO_CABLE)) {
-                               printk(KERN_WARNING
--                                      "qla2x00: Failed to "
--                                      "initialize adapter\n");
-+                                  "qla2x00: Failed to initialize adapter\n");
--                              DEBUG2(printk(KERN_INFO "scsi%ld: Failed to initialize "
--                                              "adapter - Adapter flags %x.\n",
--                                              ha->host_no, ha->device_flags);)
-+                              DEBUG2(printk(KERN_INFO
-+                                  "scsi%ld: Failed to initialize adapter - "
-+                                  "Adapter flags %x.\n", ha->host_no,
-+                                  ha->device_flags);)
-                               qla2x00_mem_free(ha);
--#if QLA2X_PERFORMANCE
--                              tasklet_kill(&ha->run_qla_task);
--#endif
--#ifdef __VMWARE__
--                               /* No need to grab the lock just to call
--                                * scsi_unregister in the vmkernel.
--                                */
--#else
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+                              pci_release_regions(ha->pdev);
-                               spin_lock_irq(&io_request_lock);
--#endif
--#endif //__VMWARE__
--
-                               scsi_unregister(host);
--
--#ifndef __VMWARE__
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-                               spin_unlock_irq(&io_request_lock);
--#endif
--#endif //__VMWARE__
-+
-                               continue;
-                       }
-                       /*
-                        * Startup the kernel thread for this host adapter
-                        */
--#ifdef __VMWARE__
--                      /*
--                       * Initialize the extensions defined in ha to
--                       * communicate with the DPC kernel thread.
--                       */
--                      ha->should_die = FALSE;
--                        
--                      ha->notify_sema = (struct semaphore)__SEMAPHORE_INITIALIZER(ha->notify_sema, 0);
--                      ha->dpc_notify = &ha->notify_sema;
--#else
- #if defined(ISP2100)
-                       ha->dpc_notify = &qla2100_detect_sem;
- #endif
-@@ -2401,20 +2214,13 @@ qla2x00_detect(Scsi_Host_Template *templ
- #if defined(ISP2300)
-                       ha->dpc_notify = &qla2300_detect_sem;
- #endif
--#endif //__VMWARE__
--
-                       kernel_thread((int (*)(void *))qla2x00_do_dpc,
--                                      (void *) ha, 0);
-+                          (void *) ha, 0);
-                       /*
-                        * Now wait for the kernel dpc thread to initialize
-                        * and go to sleep.
-                        */
--#ifdef __VMWARE__
--                      printk("qla: waiting for kernel_thread\n");
--                      down(ha->dpc_notify);
--                      printk("qla: kernel_thread back\n");
--#else
- #if defined(ISP2100)
-                       down(&qla2100_detect_sem);
- #endif
-@@ -2424,56 +2230,29 @@ qla2x00_detect(Scsi_Host_Template *templ
- #if defined(ISP2300)
-                       down(&qla2300_detect_sem);
- #endif
--#endif //__VMWARE__
-                       ha->dpc_notify = NULL;
-                       ha->next = NULL;
--                      /*  Mark preallocated Loop IDs in use. */
--                      ha->fabricid[SNS_FL_PORT].in_use = TRUE;
--                      ha->fabricid[FABRIC_CONTROLLER].in_use = TRUE;
--                      ha->fabricid[SIMPLE_NAME_SERVER].in_use = TRUE;
--
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--                      spin_lock_irq(&io_request_lock);
--#endif
-                       /* Register our resources with Linux */
-                       if (qla2x00_register_with_Linux(ha, bdp->numPorts-1)) {
-                               printk(KERN_WARNING
--                                      "scsi%ld: Failed to "
--                                      "register resources.\n",
--                                      ha->host_no);
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--                              spin_unlock_irq(&io_request_lock);
--#endif
-+                                  "scsi%ld: Failed to register resources.\n",
-+                                  ha->host_no);
-                               qla2x00_mem_free(ha);
--#if QLA2X_PERFORMANCE
--                              tasklet_kill(&ha->run_qla_task);
--#endif
--#ifdef __VMWARE__
--                               /* No need to grab the lock just to call
--                                * scsi_unregister in the vmkernel.
--                                */
--#else
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--                              spin_lock_irq(&io_request_lock);
--#endif
--#endif //__VMWARE__
-+                              pci_release_regions(ha->pdev);
-+                              spin_lock_irq(&io_request_lock);
-                               scsi_unregister(host);
--
--#ifndef __VMWARE__
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-                               spin_unlock_irq(&io_request_lock);
--#endif
--#endif //__VMWARE__
-+
-                               continue;
-                       }
-                       DEBUG2(printk(KERN_INFO "DEBUG: detect hba %ld at "
--                                      "address = %p\n",
--                                      ha->host_no, ha);)
-+                          "address = %p - adding to hba list\n", ha->host_no,
-+                          ha);)
-                       reg = ha->iobase;
-@@ -2482,14 +2261,15 @@ qla2x00_detect(Scsi_Host_Template *templ
-                       /* Ensure mailbox registers are free. */
-                       spin_lock_irqsave(&ha->hardware_lock, flags);
-+
-                       WRT_REG_WORD(&reg->semaphore, 0);
-                       WRT_REG_WORD(&reg->host_cmd, HC_CLR_RISC_INT);
-                       WRT_REG_WORD(&reg->host_cmd, HC_CLR_HOST_INT);
-                       /* Enable proper parity */
--#if defined(ISP2300)
--                      if (ha->device_id == QLA2312_DEVICE_ID)
--                              /* SRAM, Instruction RAM and GP RAM parity */
-+#if defined(ISP2300) 
-+                      if (check_all_device_ids(ha))       
-+                      /* SRAM, Instruction RAM and GP RAM parity */
-                               WRT_REG_WORD(&reg->host_cmd,
-                                   (HC_ENABLE_PARITY + 0x7));
-                       else
-@@ -2500,10 +2280,6 @@ qla2x00_detect(Scsi_Host_Template *templ
-                       spin_unlock_irqrestore(&ha->hardware_lock, flags);
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--                      spin_unlock_irq(&io_request_lock);
--#endif
--
-                       /*
-                        * if failover is enabled read the user configuration
-                        */
-@@ -2513,9 +2289,9 @@ qla2x00_detect(Scsi_Host_Template *templ
-                               else
-                                       mp_config_required = 0;
--                              DEBUG(printk("qla2x00_detect: qla2x00_cfg_init "
--                                              "for hba %ld\n",
--                                              ha->instance);)
-+                              DEBUG2(printk("qla2x00_detect: "
-+                                  "qla2x00_cfg_init for hba %ld\n",
-+                                  ha->instance);)
-                               qla2x00_cfg_init(ha);
-                       }
-@@ -2526,12 +2302,12 @@ qla2x00_detect(Scsi_Host_Template *templ
-                       /* Insert new entry into the list of adapters */
-                       ha->next = NULL;
--                      if( qla2x00_hostlist == NULL ) {
-+                      if (qla2x00_hostlist == NULL) {
-                               qla2x00_hostlist = ha;
-                       } else {
-                               cur_ha = qla2x00_hostlist;
--                              while( cur_ha->next != NULL )
-+                              while (cur_ha->next != NULL)
-                                       cur_ha = cur_ha->next;
-                               cur_ha->next = ha;
-@@ -2543,17 +2319,15 @@ qla2x00_detect(Scsi_Host_Template *templ
-                        * devices to come on-line. We don't want Linux
-                        * scanning before we are ready.
-                        */
--                      for (wait_switch = jiffies + 
--                              (ha->loop_reset_delay * HZ);
--                              /* jiffies < wait_switch */
--                              time_before(jiffies,wait_switch)  &&
--                              !(ha->device_flags &
--                                      (DFLG_NO_CABLE | DFLG_FABRIC_DEVICES))
--                              && (ha->device_flags & SWITCH_FOUND) ;) {
-+                      wait_switch = jiffies + (ha->loop_reset_delay * HZ);
-+                      for ( ; time_before(jiffies, wait_switch) &&
-+                          !(ha->device_flags & (DFLG_NO_CABLE |
-+                              DFLG_FABRIC_DEVICES)) &&
-+                          (ha->device_flags & SWITCH_FOUND); ) {
-                               qla2x00_check_fabric_devices(ha);
--                              set_current_state(TASK_INTERRUPTIBLE);
-+                              set_current_state(TASK_UNINTERRUPTIBLE);
-                               schedule_timeout(5);
-                       }
-@@ -2561,6 +2335,7 @@ qla2x00_detect(Scsi_Host_Template *templ
-                       if (displayConfig && (!ha->flags.failover_enabled))
-                               qla2x00_display_fc_names(ha);
-+                      printk(KERN_INFO"%s num_hosts=%d\n",__func__,num_hosts);
-                       ha->init_done = 1;
-                       num_hosts++;
-               }
-@@ -2568,26 +2343,24 @@ qla2x00_detect(Scsi_Host_Template *templ
-       /* Decrement the usage count of module: qla2[23]00_conf */
- #if defined(ISP2200)
--      if(ql2x_extopts)
-+      if (ql2x_extopts)
-                inter_module_put("qla22XX_conf");
- #endif
- #if defined(ISP2300)
--      if(ql2x_extopts)
-+      if (ql2x_extopts)
-               inter_module_put("qla23XX_conf");
- #endif
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+      if (ql2xfailover) {
-+              /* remap any paths on other hbas */
-+              qla2x00_cfg_remap(qla2x00_hostlist);
-+              if (displayConfig)
-+                      qla2x00_cfg_display_devices(displayConfig == 2);
-+      }
-+
-+bailout:
-       spin_lock_irq(&io_request_lock);
--#endif
--      if (displayConfig && ha->flags.failover_enabled)
--              qla2x00_cfg_display_devices();
--#ifdef __VMWARE__
--        /* We do not hold the io_request lock when calling init and we
--         * should not hold it when returning.
--         */
--        spin_unlock_irq(&io_request_lock);
--#endif
-       LEAVE("qla2x00_detect");
-       return num_hosts;
-@@ -2615,16 +2388,8 @@ qla2x00_register_with_Linux(scsi_qla_hos
-       host->can_queue = max_srbs;  /* default value:-MAX_SRBS(4096)  */
-       host->cmd_per_lun = 1;
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-       host->select_queue_depths = qla2x00_select_queue_depth;
--#endif
--#if defined (CONFIG_SCSIFCHOTSWAP) || defined(CONFIG_GAMAP)
--      host->hostt->get_scsi_info_from_wwn = qla2x00_get_scsi_info_from_wwn;
--      host->hostt->get_wwn_from_scsi_info = qla2x00_get_wwn_from_scsi_info;
--#endif /* CONFIG_SCSIFCHOTSWAP || CONFIG_GAMAP */
--
-       host->n_io_port = 0xFF;
--
-       host->base = 0;
- #if MEMORY_MAPPED_IO
-       host->base = (unsigned long)ha->mmio_address;
-@@ -2642,31 +2407,12 @@ qla2x00_register_with_Linux(scsi_qla_hos
-       /* set our host ID  (need to do something about our two IDs) */
-       host->this_id = 255;
--#if defined(CONFIG_MD_MULTIHOST_FC)
--      {
--              unsigned long   i;
--              unsigned long   j;
--
--              union {
--                      __u64   identifier;
--                      char    wwn[WWN_SIZE];
--              } foo;
--
--              for (i = 0, j = WWN_SIZE-1; i < WWN_SIZE; i++, j--) {
--                      foo.wwn[i] = ha->init_cb->port_name[j];
--              }
--
--              host->fc_wwn = foo.identifier;
--      }
--#endif /* CONFIG_MD_MULTIHOST_FC */
--
-       /* Register the IRQ with Linux (sharable) */
-       if (request_irq(host->irq, qla2x00_intr_handler,
--                      SA_INTERRUPT|SA_SHIRQ, DRIVER_NAME, ha)) {
-+          SA_INTERRUPT|SA_SHIRQ, DRIVER_NAME, ha)) {
-               printk(KERN_WARNING
--                      "qla2x00 : Failed to reserve interrupt %d "
--                      "already in use\n",
--                      host->irq);
-+                  "qla2x00 : Failed to reserve interrupt %d already in use\n",
-+                  host->irq);
-               return 1;
-       }
-@@ -2690,7 +2436,7 @@ qla2x00_register_with_Linux(scsi_qla_hos
- * Returns:
- *  0 - Always returns good status
- **************************************************************************/
--static int
-+int
- qla2x00_release(struct Scsi_Host *host)
- {
-       scsi_qla_host_t *ha = (scsi_qla_host_t *) host->hostdata;
-@@ -2715,20 +2461,6 @@ qla2x00_release(struct Scsi_Host *host)
-       /* Kill the kernel thread for this host */
-       if (ha->dpc_handler != NULL ) {
--#ifdef __VMWARE__
--              extern int vmk_shutting_down(void);
--              if (vmk_shutting_down()) {
--                      printk("qla: vmkernel shutting down\n");
--              } else {
--                      printk("qla: killing thread and waiting\n");
--                      ha->should_die = 1;
--                      ha->notify_sema = (struct semaphore)__SEMAPHORE_INITIALIZER(ha->notify_sema, 0);
--                      ha->dpc_notify = &ha->notify_sema;
--                      up(&ha->wait_sema);
--                      down(ha->dpc_notify);
--                      printk("qla: back from killing thread\n");
--              }
--#else
- #if defined(ISP2100)
-               ha->dpc_notify = &qla2100_detect_sem;
-@@ -2752,35 +2484,13 @@ qla2x00_release(struct Scsi_Host *host)
-               down(&qla2300_detect_sem);
- #endif
--#endif //__VMWARE__
-               ha->dpc_notify = NULL;
-       }
--#if QLA2X_PERFORMANCE
--      tasklet_kill(&ha->run_qla_task);
--#endif
--
--#if USE_FLASH_DATABASE
--      /* Move driver database to flash, if enabled. */
--      if (ha->flags.enable_flash_db_update &&
--              ha->flags.updated_fc_db) {
--
--              ha->flags.updated_fc_db = FALSE;
--              qla2x00_save_database(ha);
--      }
--#endif
--
- #if APIDEV
-       apidev_cleanup();
- #endif
--#ifdef __VMWARE__
--      spin_lock_destroy(&ha->hardware_lock);
--      spin_lock_destroy(&ha->mbx_bits_lock);
--      spin_lock_destroy(&ha->mbx_reg_lock);
--      spin_lock_destroy(&ha->mbx_q_lock);
--      spin_lock_destroy(&ha->list_lock);
--#endif
-       qla2x00_mem_free(ha);
-       if (ha->flags.failover_enabled)
-@@ -2821,7 +2531,7 @@ qla2x00_release(struct Scsi_Host *host)
- * Returns:
- *     Return a text string describing the driver.
- **************************************************************************/
--static const char *
-+const char *
- qla2x00_info(struct Scsi_Host *host)
- {
-       static char qla2x00_buffer[255];
-@@ -2884,7 +2594,8 @@ qla2x00_get_new_sp(scsi_qla_host_t *ha)
-                               "ref_count not zero.\n");
-               })
--              sp_get(ha, sp);
-+              atomic_set(&sp->ref_count, 1);
-+                      
-       }
-       return (sp);
-@@ -2925,12 +2636,12 @@ qla2x00_check_tgt_status(scsi_qla_host_t
-       if (TGT_Q(ha, t) == NULL || 
-               l >= ha->max_luns ||
-               (atomic_read(&fcport->state) == FC_DEVICE_DEAD) ||
--              ha->loop_state == LOOP_DEAD ||
-+              atomic_read(&fcport->ha->loop_state) == LOOP_DEAD ||
-               (!atomic_read(&ha->loop_down_timer) && 
--              ha->loop_state == LOOP_DOWN)||
-+              atomic_read(&ha->loop_state) == LOOP_DOWN)||
-               (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
-               ABORTS_ACTIVE  || 
--              ha->loop_state != LOOP_READY) {
-+              atomic_read(&ha->loop_state) != LOOP_READY) {
-               DEBUG(printk(KERN_INFO
-                               "scsi(%ld:%2d:%2d:%2d): %s connection is "
-@@ -2968,17 +2679,17 @@ qla2x00_check_port_status(scsi_qla_host_
-       }
-       if (atomic_read(&fcport->state) == FC_DEVICE_DEAD ||
--          ha->loop_state == LOOP_DEAD) {
-+          atomic_read(&fcport->ha->loop_state) == LOOP_DEAD) {
-               return (QL_STATUS_ERROR);
-       }
--      if ((atomic_read(&fcport->state) != FC_ONLINE) || 
--              (!atomic_read(&ha->loop_down_timer) && 
--              ha->loop_state == LOOP_DOWN) ||
--              (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
--              test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
--              ABORTS_ACTIVE || 
--              ha->loop_state != LOOP_READY) {
-+      if ((atomic_read(&fcport->state) != FC_ONLINE) ||
-+          (!atomic_read(&ha->loop_down_timer) &&
-+              atomic_read(&ha->loop_state) == LOOP_DOWN) ||
-+          (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
-+          test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
-+          ABORTS_ACTIVE ||
-+          atomic_read(&ha->loop_state) != LOOP_READY) {
-               DEBUG(printk(KERN_INFO
-                               "%s(%ld): connection is down. fcport=%p.\n",
-@@ -2992,6 +2703,20 @@ qla2x00_check_port_status(scsi_qla_host_
- }
-+#if defined(SH_HAS_CAN_QUEUE_MASK) 
-+static void update_host_queue_mask(scsi_qla_host_t *ha)
-+{
-+      unsigned long newmask;
-+      if ((max_srbs - ha->srb_cnt) > (REQUEST_ENTRY_CNT/5))
-+              newmask = (1 <<  ha->last_irq_cpu);
-+      else
-+              newmask = ~0;
-+              
-+      if (ha->host->can_queue_mask != newmask)
-+              ha->host->can_queue_mask = newmask;
-+}
-+#endif
-+
- /**************************************************************************
- * qla2x00_queuecommand
- *
-@@ -3011,7 +2736,7 @@ qla2x00_check_port_status(scsi_qla_host_
- * interrupt handler may call this routine as part of request-completion
- * handling).
- **************************************************************************/
--static int
-+int
- qla2x00_queuecommand(Scsi_Cmnd *cmd, void (*fn)(Scsi_Cmnd *))
- {
-       fc_port_t       *fcport;
-@@ -3027,14 +2752,15 @@ qla2x00_queuecommand(Scsi_Cmnd *cmd, voi
- #else
-       u_long          handle;
- #endif
-+      int pendingempty = 1;
-       ENTER(__func__);
-       host = cmd->host;
-       ha = (scsi_qla_host_t *) host->hostdata;
--
-+      
-       cmd->scsi_done = fn;
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-       spin_unlock(&io_request_lock);
- #else
-       spin_unlock(ha->host->host_lock);
-@@ -3049,7 +2775,7 @@ qla2x00_queuecommand(Scsi_Cmnd *cmd, voi
-                       "%s(): Couldn't allocate memory for sp - retried.\n",
-                       __func__);
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-               spin_lock_irq(&io_request_lock);
- #else
-               spin_lock_irq(ha->host->host_lock);
-@@ -3066,6 +2792,7 @@ qla2x00_queuecommand(Scsi_Cmnd *cmd, voi
-       sp->fo_retry_cnt = 0;
-       sp->iocb_cnt = 0;
-       sp->qfull_retry_count = 0;
-+      sp->err_id = 0;
-       /* Generate LU queue on bus, target, LUN */
-       b = SCSI_BUS_32(cmd);
-@@ -3084,8 +2811,9 @@ qla2x00_queuecommand(Scsi_Cmnd *cmd, voi
-               qla2x00_add_timer_to_cmd(sp, (CMD_TIMEOUT(cmd)/HZ));
-       if (l >= ha->max_luns) {
-+              sp->err_id = SRB_ERR_PORT;
-               CMD_RESULT(cmd) = DID_NO_CONNECT << 16;
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-               spin_lock_irq(&io_request_lock);
- #else
-               spin_lock_irq(ha->host->host_lock);
-@@ -3138,8 +2866,9 @@ qla2x00_queuecommand(Scsi_Cmnd *cmd, voi
-               DEBUG3(printk("scsi(%ld:%2d:%2d): port unavailable\n",
-                               ha->host_no,t,l);)
-+              sp->err_id = SRB_ERR_PORT;
-               CMD_RESULT(cmd) = DID_NO_CONNECT << 16;
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-               spin_lock_irq(&io_request_lock);
- #else
-               spin_lock_irq(ha->host->host_lock);
-@@ -3150,10 +2879,12 @@ qla2x00_queuecommand(Scsi_Cmnd *cmd, voi
-       /* Only modify the allowed count if the target is a *non* tape device */
-       if ((fcport->flags & FC_TAPE_DEVICE) == 0) {
-+              sp->flags &= ~SRB_TAPE;
-               if (cmd->allowed < ql2xretrycount) {
-                       cmd->allowed = ql2xretrycount;
-               }
--      }
-+      } else
-+              sp->flags |= SRB_TAPE;
-       DEBUG5(printk("%s(): pid=%ld, opcode=%d, timeout= %d\n",
-                       __func__,
-@@ -3186,20 +2917,35 @@ qla2x00_queuecommand(Scsi_Cmnd *cmd, voi
-        *      Either PORT_DOWN_TIMER OR LINK_DOWN_TIMER Expired.
-        */
-       if (atomic_read(&fcport->state) == FC_DEVICE_DEAD ||
--              ha->loop_state == LOOP_DEAD ) {
-+          atomic_read(&fcport->ha->loop_state) == LOOP_DEAD) {
-               /*
-                * Add the command to the done-queue for later failover
--               * processing
-+               * processing.
-                */
-+              if (atomic_read(&ha->loop_state) == LOOP_DOWN) 
-+                      sp->err_id = SRB_ERR_LOOP;
-+              else
-+                      sp->err_id = SRB_ERR_PORT;
-               CMD_RESULT(cmd) = DID_NO_CONNECT << 16;
-               add_to_done_queue(ha, sp);
--#if QLA2X_PERFORMANCE
--              tasklet_schedule(&ha->run_qla_task);
--#else
-               qla2x00_done(ha);
-+#if !defined(SH_HAS_HOST_LOCK)
-+              spin_lock_irq(&io_request_lock);
-+#else
-+              spin_lock_irq(ha->host->host_lock);
- #endif
-+              return (0);
-+      }
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+      /* ignore SPINUP commands for MSA1000 */
-+      if ((fcport->flags & (FC_MSA_DEVICE|FC_EVA_DEVICE)) &&
-+          cmd->cmnd[0] == START_STOP) {
-+              CMD_RESULT(cmd) = DID_OK << 16;
-+              DEBUG2(printk(KERN_INFO
-+                  "%s(): Ignoring SPIN_STOP scsi command...\n ", __func__));
-+              add_to_done_queue(ha, sp);
-+              qla2x00_done(ha);
-+#if !defined(SH_HAS_HOST_LOCK)
-               spin_lock_irq(&io_request_lock);
- #else
-               spin_lock_irq(ha->host->host_lock);
-@@ -3208,21 +2954,46 @@ qla2x00_queuecommand(Scsi_Cmnd *cmd, voi
-       }
-       /* if target suspended put incoming in retry_q */
--      if( tq && test_bit(TGT_SUSPENDED, &tq->q_flags) ) {
-+      if (tq && test_bit(TGT_SUSPENDED, &tq->q_flags) &&
-+          (sp->flags & SRB_TAPE) == 0) {
-               qla2x00_extend_timeout(sp->cmd, ha->qfull_retry_delay << 2);
-               add_to_scsi_retry_queue(ha,sp);
-       } else
--      add_to_pending_queue(ha, sp);
--
--      /* First start cmds for this lun if possible */
--      qla2x00_next(ha);
--
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+              pendingempty = add_to_pending_queue(ha, sp);
-+  
-+#if defined(ISP2100) || defined(ISP2200)
-+      if (ha->flags.online) {
-+              unsigned long flags;
-+              
-+              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);
-+              }
-+      }
-+#endif        
-+  
-+      /* we submit to the hardware if
-+       * 1) we're on the cpu the irq's arrive on or
-+       * 2) there are very few io's outstanding.
-+       * in all other cases we'll let an irq pick up our IO and submit it
-+       * to the controller to improve affinity
-+       */
-+      if (smp_processor_id() == ha->last_irq_cpu ||  /* condition 1 */
-+         (((max_srbs - ha->srb_cnt) < REQUEST_ENTRY_CNT/10) && /* less than 10% outstanding io's */
-+         (pendingempty)))
-+              qla2x00_next(ha);
-+      
-+#if !defined(SH_HAS_HOST_LOCK) 
-       spin_lock_irq(&io_request_lock);
- #else
-       spin_lock_irq(ha->host->host_lock);
- #endif
-+#if defined(SH_HAS_CAN_QUEUE_MASK) 
-+      update_host_queue_mask(ha);
-+#endif
-+
-       LEAVE(__func__);
-       return (0);
- }
-@@ -3284,16 +3055,16 @@ qla2x00_eh_wait_on_command(scsi_qla_host
-                       break;
-               }
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-               spin_unlock_irq(&io_request_lock);
- #else
-               spin_unlock_irq(ha->host->host_lock);
- #endif
--              set_current_state(TASK_INTERRUPTIBLE);
-+              set_current_state(TASK_UNINTERRUPTIBLE);
-               schedule_timeout(2*HZ);
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-               spin_lock_irq(&io_request_lock);
- #else
-               spin_lock_irq(ha->host->host_lock);
-@@ -3336,22 +3107,25 @@ static inline int 
- qla2x00_wait_for_hba_online(scsi_qla_host_t *ha)
- {
-       int      return_status ;
-+      unsigned long           wait_online = 0;
-       ENTER(__func__);
--       while((test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) ||
-+       for (wait_online = jiffies + (MAX_LOOP_TIMEOUT *HZ);
-+               ((test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) ||
-               test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags) ||
--              test_bit(ISP_ABORT_RETRY, &ha->dpc_flags)){
-+              test_bit(ISP_ABORT_RETRY, &ha->dpc_flags))&&
-+              time_before(jiffies,wait_online) ; ){
--              set_current_state(TASK_INTERRUPTIBLE);
--              schedule_timeout(3 * HZ);
-+              set_current_state(TASK_UNINTERRUPTIBLE);
-+              schedule_timeout(HZ);
-       }
-       if(ha->flags.online == TRUE ) 
-               return_status = QL_STATUS_SUCCESS; 
-       else
-               return_status = QL_STATUS_ERROR;/*Adapter is disabled/offline */
--      DEBUG2(printk(KERN_INFO "%s return_status=%d\n",__func__,return_status);)
-+      DEBUG(printk(KERN_INFO "%s return_status=%d\n",__func__,return_status);)
-       LEAVE(__func__);
-       return(return_status);
-@@ -3383,19 +3157,19 @@ qla2x00_wait_for_loop_ready(scsi_qla_hos
-       loop_timeout = jiffies + (MAX_LOOP_TIMEOUT * HZ ); 
-       while (((test_bit(LOOP_RESET_NEEDED, &ha->dpc_flags)) ||
--              ( !atomic_read(&ha->loop_down_timer) &&
--               ha->loop_state == LOOP_DOWN )   ||
--              test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
--              ha->loop_state != LOOP_READY)) {
-+          (!atomic_read(&ha->loop_down_timer) &&
-+              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(3 * HZ);
-               if (time_after_eq(jiffies, loop_timeout)) {
-                       return_status = QL_STATUS_ERROR;
-                       break;
-               }
-       }
--      DEBUG2(printk(KERN_INFO "%s :return_status=%d\n",__func__,return_status);)
-+      DEBUG(printk(KERN_INFO "%s :return_status=%d\n",__func__,return_status);)
-       LEAVE(__func__);
-       return return_status;   
- }
-@@ -3414,7 +3188,7 @@ qla2x00_wait_for_loop_ready(scsi_qla_hos
- *
- * Note:
- **************************************************************************/
--static int
-+int
- qla2xxx_eh_abort(Scsi_Cmnd *cmd)
- {
-       int             i;
-@@ -3503,15 +3277,15 @@ qla2xxx_eh_abort(Scsi_Cmnd *cmd)
-       DEBUG2(qla2x00_print_scsi_cmd(cmd));
-       DEBUG2(qla2x00_print_q_info(q);)
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--              spin_unlock_irq(&io_request_lock);
-+#if !defined(SH_HAS_HOST_LOCK)
-+      spin_unlock_irq(&io_request_lock);
- #else
--              spin_unlock_irq(ha->host->host_lock);
-+      spin_unlock_irq(ha->host->host_lock);
- #endif
-       /* Blocking call-Does context switching if abort isp is active etc */  
-       if( qla2x00_wait_for_hba_online(ha) != QL_STATUS_SUCCESS){
-               DEBUG2(printk(KERN_INFO "%s failed:board disabled\n",__func__);)
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-               spin_lock_irq(&io_request_lock);
- #else
-               spin_lock_irq(ha->host->host_lock);
-@@ -3519,10 +3293,10 @@ qla2xxx_eh_abort(Scsi_Cmnd *cmd)
-               return(FAILED);
-       }
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--              spin_lock_irq(&io_request_lock);
-+#if !defined(SH_HAS_HOST_LOCK) 
-+      spin_lock_irq(&io_request_lock);
- #else
--              spin_lock_irq(ha->host->host_lock);
-+      spin_lock_irq(ha->host->host_lock);
- #endif
-       /* Search done queue */
-@@ -3694,7 +3468,7 @@ qla2xxx_eh_abort(Scsi_Cmnd *cmd)
-                       sp_get(ha,sp);
-                       spin_unlock_irqrestore(&ha->hardware_lock, flags);
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-                       spin_unlock(&io_request_lock);
- #else
-                       spin_unlock(ha->host->host_lock);
-@@ -3712,7 +3486,7 @@ qla2xxx_eh_abort(Scsi_Cmnd *cmd)
-                       }
-                       sp_put(ha,sp);
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-                       spin_lock_irq(&io_request_lock);
- #else
-                       spin_lock_irq(ha->host->host_lock);
-@@ -3820,77 +3594,63 @@ qla2x00_eh_wait_for_pending_target_comma
- *    SUCCESS/FAILURE (defined as macro in scsi.h).
- *
- **************************************************************************/
--static int
-+int
- qla2xxx_eh_device_reset(Scsi_Cmnd *cmd)
- {
--      int             return_status = SUCCESS;
-+      int             return_status;
-       uint32_t        b, t, l;
--      srb_t   *sp;
-       scsi_qla_host_t *ha;
-+      os_tgt_t        *tq;
-       os_lun_t        *lq;
-+      fc_port_t       *fcport_to_reset;
-+      srb_t           *rp;
-+      unsigned long   flags;
-+      struct list_head *list, *temp;
--#if defined(LOGOUT_AFTER_DEVICE_RESET)
--      fc_port_t       *fcport;
--#endif
--
--      ENTER(__func__);
-+      return_status = FAILED;
-       if (cmd == NULL) {
-               printk(KERN_INFO
-                       "%s(): **** SCSI mid-layer passing in NULL cmd\n",
-                       __func__);
--              return (FAILED);
--      }
--      sp = (srb_t *) CMD_SP(cmd);
--
--      /*
--       * If sp is NULL, command is already returned.
--       * sp is NULLED just before we call back scsi_done
--       *
--       */
--      if (sp == NULL) {
--              /* no action - we don't have command */
--              printk(KERN_INFO "%s: cmd already done sp=%p\n", __func__, sp);
--              DEBUG(printk("%s: cmd already done sp=%p\n", __func__, sp);)
--
--              return (SUCCESS);
--      }
--      if (sp) {
--              DEBUG(printk("%s: refcount %i\n", __func__,
--                  atomic_read(&sp->ref_count));)
-+              return (return_status);
-       }
--      /* Verify the device exists. */
--      ha = (scsi_qla_host_t *)cmd->host->hostdata;
--      if (ha->flags.failover_enabled)
--              ha = (scsi_qla_host_t *)sp->ha;
--      else
--              ha = (scsi_qla_host_t *)cmd->host->hostdata;
--
--      ha->eh_start = 0;
-       b = SCSI_BUS_32(cmd);
-       t = SCSI_TCN_32(cmd);
-       l = SCSI_LUN_32(cmd);
--      if (TGT_Q(ha, t) == NULL) {
-+      ha = (scsi_qla_host_t *)cmd->host->hostdata;
-+
-+      tq = TGT_Q(ha, t);
-+      if (tq == NULL) {
-               printk(KERN_INFO
-                       "%s(): **** CMD derives a NULL TGT_Q\n",
-                       __func__);
--              return (FAILED);
-+              return (return_status);
-       }
-       lq = (os_lun_t *)LUN_Q(ha, t, l);
-       if (lq == NULL) {
-               printk(KERN_INFO
-                   "%s(): **** CMD derives a NULL LUN_Q\n", __func__);
--              return (FAILED);
-+              return (return_status);
-       }
-+      fcport_to_reset = lq->fclun->fcport;
-+
-+      /*
-+       * If we are coming in from the back-door, stall I/O until
-+       * completion
-+       */
-+      if (!cmd->host->eh_active) {
-+              set_bit(TGT_SUSPENDED, &tq->q_flags);
-+      }
-+
-+      ha->eh_start = 0;
- #if STOP_ON_RESET
-       printk(debug_buff,"Resetting Device= 0x%x\n", (int)cmd);
--/* WE SHOULD NOT call this function, since it dereferences SP */
--      //qla2x00_print_scsi_cmd(cmd);
-       qla2x00_panic(__func__, ha->host);
- #endif
-@@ -3899,21 +3659,33 @@ qla2xxx_eh_device_reset(Scsi_Cmnd *cmd)
-                       "scsi(%ld:%d:%d:%d): DEVICE RESET ISSUED.\n",
-                       ha->host_no, (int)b, (int)t, (int)l);
--      DEBUG2(printk(KERN_INFO "scsi(%ld): DEVICE_RESET cmd=%p jiffies = 0x%lx, "
--              "timeout=%x, dpc_flags=%lx, status=%x allowed=%d "
--              "cmd.state=%x\n",
--              ha->host_no,
--              cmd,
--              jiffies,
--              CMD_TIMEOUT(cmd)/HZ,
--              ha->dpc_flags,
--              cmd->result,
--              cmd->allowed,
--              cmd->state);)
--/* WE SHOULD NOT call this function, since it dereferences SP */
--      //qla2x00_print_scsi_cmd(cmd);
-+      DEBUG2(printk(KERN_INFO
-+          "scsi(%ld): DEVICE_RESET cmd=%p jiffies = 0x%lx, timeout=%x, "
-+          "dpc_flags=%lx, status=%x allowed=%d cmd.state=%x\n",
-+          ha->host_no, cmd, jiffies, CMD_TIMEOUT(cmd)/HZ, ha->dpc_flags,
-+          cmd->result, cmd->allowed, cmd->state);)
-+
-+      /*
-+       * Clear commands from the retry queue
-+       */
-+      spin_lock_irqsave(&ha->list_lock, flags);
-+      list_for_each_safe(list, temp, &ha->retry_queue) {
-+              rp = list_entry(list, srb_t, list);
-+ 
-+              if( t != SCSI_TCN_32(rp->cmd) ) 
-+                      continue;
-+ 
-+              DEBUG2(printk(KERN_INFO "qla2xxx_eh_reset: found "
-+                  "in retry queue. SP=%p\n", rp);)
-+ 
-+              __del_from_retry_queue(ha, rp);
-+              CMD_RESULT(rp->cmd) = DID_RESET << 16;
-+              __add_to_done_queue(ha, rp);
-+ 
-+      } /* list_for_each_safe() */
-+      spin_unlock_irqrestore(&ha->list_lock, flags);
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-       spin_unlock_irq(&io_request_lock);
- #else
-       spin_unlock_irq(ha->host->host_lock);
-@@ -3921,66 +3693,79 @@ qla2xxx_eh_device_reset(Scsi_Cmnd *cmd)
-       /* Blocking call-Does context switching if abort isp is active etc */  
-       if (qla2x00_wait_for_hba_online(ha) != QL_STATUS_SUCCESS) {
-               DEBUG2(printk(KERN_INFO "%s failed:board disabled\n",__func__);)
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-               spin_lock_irq(&io_request_lock);
- #else
-               spin_lock_irq(ha->host->host_lock);
- #endif
--              return (FAILED);
-+              goto eh_dev_reset_done;
-       }
-       /* Blocking call-Does context switching if loop is Not Ready */
-       if (qla2x00_wait_for_loop_ready(ha) == QL_STATUS_SUCCESS) {
-               clear_bit(DEVICE_RESET_NEEDED, &ha->dpc_flags);
--              if (qla2x00_device_reset(ha, lq->fclun->fcport) != 0) {
--                      return_status = FAILED;
-+              if (qla2x00_device_reset(ha, fcport_to_reset) == 0) {
-+                      return_status = SUCCESS;
-               }
- #if defined(LOGOUT_AFTER_DEVICE_RESET)
-               if (return_status == SUCCESS) {
--                      fcport = lq->fclun->fcport;
--
--                      if (fcport->flags & FC_FABRIC_DEVICE) {
-+                      if (fcport_to_reset->flags & FC_FABRIC_DEVICE) {
-                               qla2x00_fabric_logout(ha,
--                                  ha->fc_db[t].loop_id & 0xff);
--                              ha->fc_db[t].flag |= DEV_RELOGIN;
--                              qla2x00_mark_device_lost(ha, fcport);
-+                                  fcport_to_reset->loop_id);
-+                              qla2x00_mark_device_lost(ha, fcport_to_reset,
-+                                  1);
-                       }
-               }
- #endif
-       } else {
--              return_status = FAILED;
-+              DEBUG2(printk(KERN_INFO
-+                  "%s failed: loop not ready\n",__func__);)
-       }
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-       spin_lock_irq(&io_request_lock);
- #else
-       spin_lock_irq(ha->host->host_lock);
- #endif
-       if (return_status == FAILED) {
--              DEBUG3(printk("%s(%ld): reset failed\n",
--                                      __func__,ha->host_no);)
--              printk(KERN_INFO "%s(%ld): reset failed\n",
--                              __func__,ha->host_no);
--              return (FAILED);
-+              DEBUG3(printk("%s(%ld): device reset failed\n",
-+                  __func__,ha->host_no);)
-+              printk(KERN_INFO "%s(%ld): device reset failed\n",
-+                  __func__,ha->host_no);
-+
-+              goto eh_dev_reset_done;
-       }
--      /* Waiting for all commands to complete for the device */
--      if (qla2x00_eh_wait_for_pending_target_commands(ha, t))
--              return_status = FAILED;
-+      /*
-+       * If we are coming down the EH path, wait for all commands to
-+       * complete for the device.
-+       */
-+      if (cmd->host->eh_active) {
-+              if (qla2x00_eh_wait_for_pending_target_commands(ha, t))
-+                      return_status = FAILED;
--      if (return_status == FAILED) {
--              DEBUG3(printk("%s(%ld): reset failed\n",
--                                      __func__,ha->host_no);)
--              printk(KERN_INFO "%s(%ld): reset failed\n",
--                              __func__,ha->host_no);
--              return (FAILED);
-+              if (return_status == FAILED) {
-+                      DEBUG3(printk("%s(%ld): failed while waiting for "
-+                          "commands\n", __func__, ha->host_no);)
-+                      printk(KERN_INFO "%s(%ld): failed while waiting for "
-+                          "commands\n", __func__, ha->host_no); 
-+
-+                      goto eh_dev_reset_done;
-+              }
-       }
--      printk(KERN_INFO "%s(%ld):reset success\n", __func__,ha->host_no);
--      LEAVE(__func__);
-+      printk(KERN_INFO
-+              "scsi(%ld:%d:%d:%d): DEVICE RESET SUCCEEDED.\n",
-+              ha->host_no, (int)b, (int)t, (int)l);
-+
-+eh_dev_reset_done:
-+
-+      if (!cmd->host->eh_active) {
-+              clear_bit(TGT_SUSPENDED, &tq->q_flags);
-+      }
-       return (return_status);
- }
-@@ -4047,7 +3832,7 @@ qla2x00_eh_wait_for_pending_commands(scs
- *    SUCCESS/FAILURE (defined as macro in scsi.h).
- *
- **************************************************************************/
--static int
-+int
- qla2xxx_eh_bus_reset(Scsi_Cmnd *cmd)
- {
-       int        return_status = SUCCESS;
-@@ -4105,15 +3890,15 @@ qla2xxx_eh_bus_reset(Scsi_Cmnd *cmd)
-                       "scsi(%ld:%d:%d:%d): LOOP RESET ISSUED.\n",
-                       ha->host_no, (int)b, (int)t, (int)l);
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--              spin_unlock_irq(&io_request_lock);
-+#if !defined(SH_HAS_HOST_LOCK)
-+      spin_unlock_irq(&io_request_lock);
- #else
--              spin_unlock_irq(ha->host->host_lock);
-+      spin_unlock_irq(ha->host->host_lock);
- #endif
-       /* Blocking call-Does context switching if abort isp is active etc*/  
-       if( qla2x00_wait_for_hba_online(ha) != QL_STATUS_SUCCESS){
-               DEBUG2(printk(KERN_INFO "%s failed:board disabled\n",__func__);)
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-               spin_lock_irq(&io_request_lock);
- #else
-               spin_lock_irq(ha->host->host_lock);
-@@ -4130,7 +3915,7 @@ qla2xxx_eh_bus_reset(Scsi_Cmnd *cmd)
-       } else {
-               return_status = FAILED;
-       }
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-               spin_lock_irq(&io_request_lock);
- #else
-               spin_lock_irq(ha->host->host_lock);
-@@ -4184,7 +3969,7 @@ qla2xxx_eh_bus_reset(Scsi_Cmnd *cmd)
- *
- * Note:
- **************************************************************************/
--static int
-+int
- qla2xxx_eh_host_reset(Scsi_Cmnd *cmd)
- {
-       int             return_status = SUCCESS;
-@@ -4264,14 +4049,14 @@ qla2xxx_eh_host_reset(Scsi_Cmnd *cmd)
-                       ((scsi_qla_host_t *)cmd->host->hostdata)->host_no,
-                       (int)b, (int)t, (int)l, ha->host_no);)
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--              spin_unlock_irq(&io_request_lock);
-+#if !defined(SH_HAS_HOST_LOCK)
-+      spin_unlock_irq(&io_request_lock);
- #else
--              spin_unlock_irq(ha->host->host_lock);
-+      spin_unlock_irq(ha->host->host_lock);
- #endif
-       /* Blocking call-Does context switching if abort isp is active etc*/  
-       if( qla2x00_wait_for_hba_online(ha) != QL_STATUS_SUCCESS){
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-               spin_lock_irq(&io_request_lock);
- #else
-               spin_lock_irq(ha->host->host_lock);
-@@ -4306,7 +4091,7 @@ qla2xxx_eh_host_reset(Scsi_Cmnd *cmd)
-               clear_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
-       }
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#if !defined(SH_HAS_HOST_LOCK)
-       spin_lock_irq(&io_request_lock);
- #else
-       spin_lock_irq(ha->host->host_lock);
-@@ -4349,11 +4134,26 @@ qla2xxx_eh_host_reset(Scsi_Cmnd *cmd)
- * Description:
- *   Return the disk geometry for the given SCSI device.
- **************************************************************************/
--static int
-+int
- qla2x00_biosparam(Disk *disk, kdev_t dev, int geom[])
- {
-       int heads, sectors, cylinders;
-+      int     ret;
-+      struct  buffer_head *bh;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,17)
-+      bh = bread(MKDEV(MAJOR(dev), MINOR(dev) & ~0xf), 0, block_size(dev));
-+#else
-+      bh = bread(MKDEV(MAJOR(dev), MINOR(dev) & ~0xf), 0, 1024);
-+#endif
-+
-+      if (bh) {
-+              ret = scsi_partsize(bh, disk->capacity,
-+                  &geom[2], &geom[0], &geom[1]);
-+              brelse(bh);
-+              if (ret != -1)
-+                      return (ret);
-+      }
-       heads = 64;
-       sectors = 32;
-       cylinders = disk->capacity / (heads * sectors);
-@@ -4378,7 +4178,7 @@ qla2x00_biosparam(Disk *disk, kdev_t dev
- *
- * Context: Interrupt
- **************************************************************************/
--static void
-+void
- qla2x00_intr_handler(int irq, void *dev_id, struct pt_regs *regs)
- {
-       unsigned long flags = 0;
-@@ -4398,8 +4198,6 @@ qla2x00_intr_handler(int irq, void *dev_
-               return;
-       }
--      qla2x00_stats.irqhba = ha;
--
-       reg = ha->iobase;
-       spin_lock_irqsave(&ha->hardware_lock, flags);
-@@ -4416,6 +4214,8 @@ qla2x00_intr_handler(int irq, void *dev_
-               qla2x00_isr(ha, data, &got_mbx);
-       }
-       spin_unlock_irqrestore(&ha->hardware_lock, flags);
-+      qla2x00_next(ha);
-+      ha->last_irq_cpu = smp_processor_id();
-       if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) &&
-               got_mbx && ha->flags.mbox_int) {
-@@ -4449,11 +4249,7 @@ qla2x00_intr_handler(int irq, void *dev_
-       }
-       if (!list_empty(&ha->done_queue))
--#if QLA2X_PERFORMANCE
--              tasklet_schedule(&ha->run_qla_task);
--#else
-               qla2x00_done(ha);
--#endif
-       /* Wakeup the DPC routine */
-       if ((!ha->flags.mbox_busy &&
-@@ -4465,39 +4261,12 @@ qla2x00_intr_handler(int irq, void *dev_
-               up(ha->dpc_wait);
-       }
--      LEAVE_INTR("qla2x00_intr_handler");
--}
--
--
--#if QLA2X_PERFORMANCE
--/*
-- * qla2x00_done_tasklet
-- *
-- * This is a task to process completion only similar to a
-- * bottom half handler.
-- *
-- *      Input:
-- *      p -- pointer to hba struct
-- *
-- */
--static void
--qla2x00_done_tasklet(long p)
--{
--      scsi_qla_host_t *ha = (scsi_qla_host_t *) p;
--
--      ENTER(__func__);
--
--      set_bit(TASKLET_SCHED, &ha->dpc_flags);
--
--      if (!list_empty(&ha->done_queue))
--              qla2x00_done(ha);
--      
--      clear_bit(TASKLET_SCHED, &ha->dpc_flags);
--
--      LEAVE(__func__);
--}
-+#if defined(SH_HAS_CAN_QUEUE_MASK) 
-+      update_host_queue_mask(ha);
- #endif
-+      LEAVE_INTR("qla2x00_intr_handler");
-+}
- /*
-  * qla2x00_retry_command
-@@ -4519,6 +4288,7 @@ qla2x00_retry_command(scsi_qla_host_t *h
-       /* restore original timeout */
-       qla2x00_extend_timeout(sp->cmd, 
-               (CMD_TIMEOUT(sp->cmd)/HZ) - QLA_CMD_TIMER_DELTA);
-+      qla2x00_free_request_resources(ha,sp);
-       __add_to_pending_queue( ha, sp);
- }
-@@ -4535,14 +4305,11 @@ qla2x00_retry_command(scsi_qla_host_t *h
- * the timer routine detects a event it will one of the task
- * bits then wake us up.
- **************************************************************************/
--static void
-+void
- qla2x00_do_dpc(void *p)
- {
--#ifndef __VMWARE__
-       DECLARE_MUTEX_LOCKED(sem);
--#endif
--      fcdev_t         dev;
--      fc_port_t       *fcport;
-+      fc_port_t       *fcport = NULL;
-       os_lun_t        *q;
-       os_tgt_t        *tq;
-       scsi_qla_host_t *ha = (scsi_qla_host_t *) p;
-@@ -4553,19 +4320,10 @@ qla2x00_do_dpc(void *p)
-       struct list_head *list, *templist;
-       int     dead_cnt, online_cnt;
-       int     retry_cmds;
-+      uint16_t next_loopid;
-       ENTER(__func__);
--#ifdef __VMWARE__
--      /*
--       * We are not a real Linux thread so no need to handle all the
--       * task setup.
--       */
--      printk("qla: DPC init\n");
--      ha->wait_sema = (struct semaphore)__SEMAPHORE_INITIALIZER(ha->wait_sema, 0);
--      ha->dpc_wait = &ha->wait_sema;
--      ha->dpc_handler = (struct task_struct *)1;
--#else
- #if defined(MODULE)
-       siginitsetinv(&current->blocked, SHUTDOWN_SIGS);
- #else
-@@ -4581,8 +4339,6 @@ qla2x00_do_dpc(void *p)
-        * FIXME(dg) this is still a child process of the one that did
-        * the insmod.  This needs to be attached to task[0] instead.
-        */
--
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,9)
-       /* As mentioned in kernel/sched.c(RA).....
-        * Reparent the calling kernel thread to the init task.
-@@ -4600,7 +4356,6 @@ qla2x00_do_dpc(void *p)
-        */
-       reparent_to_init();
- #endif
--#endif
-       /*
-        * Set the name of this process.
-@@ -4611,7 +4366,6 @@ qla2x00_do_dpc(void *p)
-       ha->dpc_handler = current;
-       unlock_kernel();
--#endif //__VMWARE__
-       /*
-        * Wake up the thread that created us.
-@@ -4630,24 +4384,13 @@ qla2x00_do_dpc(void *p)
-                */
-               DEBUG3(printk("qla2x00: DPC handler sleeping\n");)
--#ifdef __VMWARE__
--              down_interruptible(ha->dpc_wait);
--
--              if (ha->should_die)
--                      break;  /* get out */
--#else
-               down_interruptible(&sem);
-               if (signal_pending(current))
-                       break;   /* get out */
--#endif //__VMWARE__
-               if (!list_empty(&ha->done_queue))
--#if QLA2X_PERFORMANCE
--                      tasklet_schedule(&ha->run_qla_task);
--#else
-                       qla2x00_done(ha);
--#endif
-               DEBUG3(printk("qla2x00: DPC handler waking up\n");)
-@@ -4664,7 +4407,7 @@ qla2x00_do_dpc(void *p)
-               /* Process commands in retry queue */
-               if (test_and_clear_bit(PORT_RESTART_NEEDED, &ha->dpc_flags)) {
--                      DEBUG2(printk(KERN_INFO "%s(%ld): (1) DPC checking retry_q. "
-+                      DEBUG3(printk(KERN_INFO "%s(%ld): (1) DPC checking retry_q. "
-                                       "total=%d\n",
-                                       __func__,
-                                       ha->host_no,
-@@ -4687,13 +4430,19 @@ qla2x00_do_dpc(void *p)
-                                       continue;
-                               fcport = q->fclun->fcport;
--                              if (atomic_read(&fcport->state) == 
--                                      FC_DEVICE_DEAD ||
--                                      ( ha->loop_state == LOOP_DEAD )){
-+                              if (atomic_read(&fcport->state) ==
-+                                  FC_DEVICE_DEAD ||
-+                                  atomic_read(&fcport->ha->loop_state)
-+                                       == LOOP_DEAD) {
-                                       __del_from_retry_queue(ha, sp);
-                                       CMD_RESULT(sp->cmd) = 
-                                               DID_NO_CONNECT << 16;
-+                                      if (atomic_read(&ha->loop_state) ==
-+                                          LOOP_DOWN) 
-+                                              sp->err_id = SRB_ERR_LOOP;
-+                                      else
-+                                              sp->err_id = SRB_ERR_PORT;
-                                       CMD_HANDLE(sp->cmd) = 
-                                               (unsigned char *) NULL;
-                                       __add_to_done_queue(ha, sp);
-@@ -4767,7 +4516,7 @@ qla2x00_do_dpc(void *p)
-                                       q->q_state, tq->q_flags);)
-                                       online_cnt++;
-                                       __del_from_scsi_retry_queue(ha, sp);
--                                      if( test_bit(TGT_UNSUSPENDED, 
-+                                      if( test_bit(TGT_RETRY_CMDS, 
-                                               &tq->q_flags) ) {
-                                               qla2x00_retry_command(ha,sp);
-                                               retry_cmds++;
-@@ -4782,8 +4531,8 @@ qla2x00_do_dpc(void *p)
-                               if ((tq = ha->otgt[t]) == NULL)
-                                       continue;
--                              if( test_bit(TGT_UNSUSPENDED, &tq->q_flags) )
--                                      clear_bit(TGT_UNSUSPENDED, &tq->q_flags);
-+                              if( test_bit(TGT_RETRY_CMDS, &tq->q_flags) )
-+                                      clear_bit(TGT_RETRY_CMDS, &tq->q_flags);
-                       }
-                       if( retry_cmds )
-@@ -4859,17 +4608,18 @@ qla2x00_do_dpc(void *p)
-                       /* v2.19.8 Retry each device up to login retry count */
-                       if ((test_and_clear_bit(RELOGIN_NEEDED,
--                                                      &ha->dpc_flags)) &&
--                              !test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) &&
--                              ha->loop_state != LOOP_DOWN) { /* v2.19.5 */
-+                          &ha->dpc_flags)) &&
-+                          !test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) &&
-+                          atomic_read(&ha->loop_state) != LOOP_DOWN) {
-                               DEBUG(printk("dpc%ld: qla2x00_port_login\n",
-                                               ha->host_no);)
--                              for (fcport = ha->fcport;
--                                      fcport != NULL;
--                                      fcport = fcport->next) {
--                                      
-+                              next_loopid = 0;
-+                              list_for_each_entry(fcport, &ha->fcports, list) {
-+                                      if(fcport->port_type != FCT_TARGET)
-+                                              continue;
-+
-                                       /*
-                                        * If the port is not ONLINE then try
-                                        * to login to it if we haven't run
-@@ -4877,37 +4627,28 @@ qla2x00_do_dpc(void *p)
-                                        */
-                                       if (atomic_read(&fcport->state) != FC_ONLINE &&
-                                               fcport->login_retry) {
--
-                                               fcport->login_retry--;
--                                              memset(&dev, 0, sizeof(fcdev_t));
--                                              dev.loop_id = fcport->old_loop_id;
--                                              dev.d_id.b24 = fcport->d_id.b24;
--                                              if(ha->fc_db[fcport->dev_id].flag & DEV_PUBLIC) 
--                                                      status = qla2x00_fabric_login(ha, &dev);
-+                                              if (fcport->flags & FC_FABRIC_DEVICE)
-+                                                      status = qla2x00_fabric_login(ha, fcport, &next_loopid);
-                                               else    
--                                                      status = qla2x00_local_device_login(ha, (dev.loop_id & 0xff));
-+                                                      status = qla2x00_local_device_login(ha, fcport->loop_id);
-                                               if (status == QL_STATUS_SUCCESS) {
--                                                      ha->fc_db[fcport->dev_id].loop_id = dev.loop_id;
--                                                      fcport->loop_id = dev.loop_id;
--                                                      fcport->old_loop_id = dev.loop_id;
-+                                                      fcport->old_loop_id = fcport->loop_id;
-                                                       DEBUG(printk("dpc%ld port login OK: logged in ID 0x%x\n",
-                                                                       ha->host_no, fcport->loop_id);)
-+                                                      printk(KERN_INFO "dpc%ld port login OK: logged in ID 0x%x\n",
-+                                                                      ha->host_no, fcport->loop_id);
-                                                       
-+                                                      fcport->login_retry = 0;
-                                                       fcport->port_login_retry_count = ha->port_down_retry_count *
-                                                                                               PORT_RETRY_TIME;
-                                                       atomic_set(&fcport->state, FC_ONLINE);
-                                                       atomic_set(&fcport->port_down_timer,
-                                                                       ha->port_down_retry_count * PORT_RETRY_TIME);
--                                                      fcport->login_retry = 0;
-                                               } else if (status == 1) {
--                                                      if (dev.loop_id != fcport->old_loop_id) {
--                                                              fcport->old_loop_id = dev.loop_id;
--                                                              ha->fc_db[fcport->dev_id].loop_id = dev.loop_id;
--                                                      }
--
-                                                       set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
-                                                       /* retry the login again */
-                                                       DEBUG(printk("dpc: Retrying %d login again loop_id 0x%x\n",
-@@ -4925,7 +4666,7 @@ qla2x00_do_dpc(void *p)
-                       /* v2.19.5 */
-                       if ((test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags)) &&
--                              ha->loop_state != LOOP_DOWN ) { /* v2.19.5 */
-+                          atomic_read(&ha->loop_state) != LOOP_DOWN) { /* v2.19.5 */
-                               clear_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags);
-                               DEBUG(printk("dpc(%ld): qla2x00_login_retry\n",
-@@ -4957,15 +4698,30 @@ qla2x00_do_dpc(void *p)
-                                               ha->host_no);)
-                       }
--                      if (test_and_clear_bit(PORT_SCAN_NEEDED, &ha->dpc_flags)) {
-+                      if (test_and_clear_bit(PORT_SCAN_NEEDED,
-+                          &ha->dpc_flags)) {
-                               DEBUG(printk("dpc(%ld): qla2x00: RESCAN ...\n",
--                                              ha->host_no);)
--                              printk(KERN_INFO"dpc(%ld): qla2x00: RESCAN .\n",
--                                      ha->host_no); 
--                                      ha->loop_state = LOOP_UPDATE;
--                                      qla2x00_mark_all_devices_lost(ha); 
--                                      qla2x00_configure_fcports( ha );
-+                                  ha->host_no);)
-+                              printk(KERN_INFO
-+                                  "dpc(%ld): qla2x00: RESCAN .\n",
-+                                  ha->host_no); 
-+
-+                              if ( !(test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags)) &&
-+                                      atomic_read(&ha->loop_state) != LOOP_DOWN) { 
-+                                      /* suspend new I/O for await */
-+                                      atomic_set(&ha->loop_state, LOOP_UPDATE);
-+                                      qla2x00_probe_for_all_luns(ha); 
-+
-+                                      /* If we found all devices then go ready */
-+                                      atomic_set(&ha->loop_state, LOOP_READY);
-+
-+                                      if (!ha->flags.failover_enabled)
-+                                              qla2x00_config_os(ha);
-+                                      else    
-+                                              qla2x00_cfg_remap(qla2x00_hostlist);
-+                              }
-+
-                               DEBUG(printk("dpc(%ld): qla2x00: RESCAN ...done\n",
-                                               ha->host_no);)
-                               printk(KERN_INFO"dpc(%ld): qla2x00: RESCAN" 
-@@ -4983,7 +4739,7 @@ qla2x00_do_dpc(void *p)
-                                               if (test_and_clear_bit(FAILOVER_EVENT,
-                                                               &ha->dpc_flags)) {
--                                                      DEBUG(printk("dpc(%ld): "
-+                                                      DEBUG2(printk("dpc(%ld): "
-                                                               "qla2x00_cfg_event_notify\n",
-                                                               ha->host_no);)
-@@ -4991,7 +4747,7 @@ qla2x00_do_dpc(void *p)
-                                                               qla2x00_cfg_event_notify(ha, ha->failover_type);
-                                                       }
--                                                      DEBUG(printk("dpc(%ld): "
-+                                                      DEBUG2(printk("dpc(%ld): "
-                                                               "qla2x00_cfg_event_notify - done\n",
-                                                               ha->host_no);)
-                                               }
-@@ -5003,12 +4759,12 @@ qla2x00_do_dpc(void *p)
-                                               /*
-                                                * Get any requests from failover queue
-                                                */
--                                              DEBUG(printk("dpc: qla2x00_process "
-+                                              DEBUG2(printk("dpc: qla2x00_process "
-                                                               "failover\n");)
-                                               qla2x00_process_failover(ha);
--                                              DEBUG(printk("dpc: qla2x00_process "
-+                                              DEBUG2(printk("dpc: qla2x00_process "
-                                                               "failover - done\n");)
-                                       }
-                               }
-@@ -5029,16 +4785,19 @@ qla2x00_do_dpc(void *p)
-                                       
-                               qla2x00_abort_queues(ha, FALSE);
-                       }
--                      if (!ha->interrupts_on)
--                              qla2x00_enable_intrs(ha);
-+
-+                      if (test_and_clear_bit(IOCTL_ERROR_RECOVERY,
-+                          &ha->dpc_flags)) {
-+                              qla2x00_ioctl_error_recovery(ha);       
-+                      }
-+
-+                      if (!ha->interrupts_on)
-+                              qla2x00_enable_intrs(ha);
-+
-               }
-               if (!list_empty(&ha->done_queue))
--#if QLA2X_PERFORMANCE
--                      tasklet_schedule(&ha->run_qla_task);
--#else
-                       qla2x00_done(ha);
--#endif
-               /* spin_unlock_irqrestore(&io_request_lock, ha->cpu_flags);*/
-@@ -5070,7 +4829,6 @@ qla2x00_do_dpc(void *p)
-       LEAVE(__func__);
- }
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- /**************************************************************************
- * qla2x00_device_queue_depth
- *   Determines the queue depth for a given device.  There are two ways
-@@ -5080,7 +4838,7 @@ qla2x00_do_dpc(void *p)
- *   as the default queue depth.  Otherwise, we use either 4 or 8 as the
- *   default queue depth (dependent on the number of hardware SCBs).
- **************************************************************************/
--static void
-+void
- qla2x00_device_queue_depth(scsi_qla_host_t *p, Scsi_Device *device)
- {
-       int default_depth = 32;
-@@ -5089,10 +4847,9 @@ qla2x00_device_queue_depth(scsi_qla_host
-       if (device->tagged_supported) {
-               device->tagged_queue = 1;
-               device->current_tag = 0;
--#if defined(MODULE)
--              if (!(ql2xmaxqdepth == 0 || ql2xmaxqdepth > 256))
-+
-+              if (!(ql2xmaxqdepth == 0 || ql2xmaxqdepth > 255))
-                       device->queue_depth = ql2xmaxqdepth;
--#endif
-               printk(KERN_INFO
-                       "scsi(%ld:%d:%d:%d): Enabled tagged queuing, "
-@@ -5114,7 +4871,7 @@ qla2x00_device_queue_depth(scsi_qla_host
- *   host adapter.  We use a queue depth of 2 for devices that do not
- *   support tagged queueing.
- **************************************************************************/
--STATIC void
-+static void
- qla2x00_select_queue_depth(struct Scsi_Host *host, Scsi_Device *scsi_devs)
- {
-       Scsi_Device *device;
-@@ -5129,109 +4886,6 @@ qla2x00_select_queue_depth(struct Scsi_H
-       LEAVE(__func__);
- }
--#endif
--
--#if defined (CONFIG_SCSIFCHOTSWAP) || defined(CONFIG_GAMAP)
--union wwnmap {
--      unsigned long long wwn;
--      unsigned char wwn_u8[8];
--};
--
--int qla2x00_get_scsi_info_from_wwn (int mode,
--      unsigned long long wwn,
--      int *host,
--      int *channel,
--      int *lun,
--      int *id) {
--
--scsi_qla_host_t *list;
--Scsi_Device *scsi_device;
--union wwnmap wwncompare;
--union wwnmap wwncompare2;
--int i, j, k;
--
--      /*
--       * Retrieve big endian version of world wide name
--       */
--      wwncompare2.wwn = wwn;
--      for (j = 0, k=7; j < 8; j++, k--) {
--              wwncompare.wwn_u8[j] = wwncompare2.wwn_u8[k];
--      }
--
--      /*
--       * query all hosts searching for WWN
--       */
--      for (list = qla2x00_hostlist; list; list = list->next) {
--              for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
--                      /*
--                       * Scan all devices in FibreChannel database
--                       * if WWN match found, return SCSI device information
--                       */
--                      if (memcmp (wwncompare.wwn_u8, list->fc_db[i].name, 8) == 0) {
--                              /*
--                               * If inserting, avoid scan for channel and lun information
--                               */
--                              if (mode == 0) {
--                                      *channel = 0;
--                                      *lun = 0;
--                                      *host = list->host->host_no;
--                                      *id = i;
--                                      return (0);
--                              }
--                      
--
--                              /*
--                               * WWN matches, find channel and lun information from scsi
--                               * device
--                               */
--                              for (scsi_device = list->host->host_queue; scsi_device; scsi_device = scsi_device->next) {
--                                      if (scsi_device->id == i) {
--                                              *channel = scsi_device->channel;
--                                              *lun = scsi_device->lun;
--                                              break;
--                                      }
--                              }
--                              if (scsi_device == 0) {
--                                      return (-ENOENT);
--                              }
--                              /*
--                               * Device found, return all data
--                               */
--                              *host = list->host->host_no;
--                              *id = i;
--                              return (0);
--                      } /* memcmp */
--              } /* i < MAXFIBREDEVICES */
--      }
--      return (-ENOENT);
--}
--
--int qla2x00_get_wwn_from_scsi_info (int host, int id, unsigned long long *wwn) {
--scsi_qla_host_t *list;
--union wwnmap wwnendian;
--union wwnmap wwnendian2;
--int j, k;
--
--      /*
--       * Examine all QLogic hosts
--       */
--      for (list = qla2x00_hostlist; list; list = list->next) {
--              if (host == list->host->host_no) {
--                      /*
--                       * Get endian corrected 64 bit WWN
--                       */
--
--                      memcpy (&wwnendian2.wwn, list->fc_db[id].name, 8);
--                      for (j = 0, k=7; j < 8; j++, k--) {
--                              wwnendian.wwn_u8[j] = wwnendian2.wwn_u8[k];
--                      }
--                      *wwn = wwnendian.wwn;
--                      return (0);
--              }
--      }
--      return (-ENOENT);
--}
--#endif /* CONFIG_SCSIFCHOTSWAP || CONFIG_GAMAP */
- /**************************************************************************
- * ** Driver Support Routines **
-@@ -5269,6 +4923,38 @@ qla2x00_disable_intrs(scsi_qla_host_t *h
-       spin_unlock_irqrestore(&ha->hardware_lock, flags);
- }
-+STATIC inline void 
-+qla2x00_free_request_resources(scsi_qla_host_t *dest_ha, srb_t *sp) 
-+{
-+      if (sp->flags & SRB_DMA_VALID) {
-+              sp->flags &= ~SRB_DMA_VALID;
-+
-+#ifndef __VMWARE__
-+              /* Release memory used for this I/O */
-+              if (sp->cmd->use_sg) {
-+                      pci_unmap_sg(dest_ha->pdev,
-+                                      sp->cmd->request_buffer,
-+                                      sp->cmd->use_sg,
-+                                      scsi_to_pci_dma_dir(
-+                                              sp->cmd->sc_data_direction));
-+              } else if (sp->cmd->request_bufflen) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13)
-+                      pci_unmap_page(dest_ha->pdev,
-+                                      sp->saved_dma_handle,
-+                                      sp->cmd->request_bufflen,
-+                                      scsi_to_pci_dma_dir(
-+                                              sp->cmd->sc_data_direction));
-+#else
-+                      pci_unmap_single(dest_ha->pdev,
-+                                      sp->saved_dma_handle,
-+                                      sp->cmd->request_bufflen,
-+                                      scsi_to_pci_dma_dir(
-+                                              sp->cmd->sc_data_direction));
-+#endif
-+              }
-+#endif
-+      }
-+}
- STATIC inline void 
- qla2x00_delete_from_done_queue(scsi_qla_host_t *dest_ha, srb_t *sp) 
-@@ -5281,7 +4967,6 @@ qla2x00_delete_from_done_queue(scsi_qla_
-       if (sp->flags & SRB_DMA_VALID) {
-               sp->flags &= ~SRB_DMA_VALID;
--#ifndef __VMWARE__
-               /* Release memory used for this I/O */
-               if (sp->cmd->use_sg) {
-                       pci_unmap_sg(dest_ha->pdev,
-@@ -5304,7 +4989,6 @@ qla2x00_delete_from_done_queue(scsi_qla_
-                                               sp->cmd->sc_data_direction));
- #endif
-               }
--#endif
-       }
- }
-@@ -5321,7 +5005,6 @@ qla2x00_delete_from_done_queue(scsi_qla_
- STATIC int
- qla2x00_done(scsi_qla_host_t *old_ha)
- {
--      srb_t           *sp;
-       os_lun_t        *lq;
-       Scsi_Cmnd       *cmd;
-       unsigned long   flags = 0;
-@@ -5329,49 +5012,29 @@ qla2x00_done(scsi_qla_host_t *old_ha)
-       scsi_qla_host_t *vis_ha;
-       int     cnt;
-       int     send_marker_once = 0;
--      srb_t *done_queue_first = NULL;
--      srb_t *done_queue_last = NULL;
-+      struct list_head        *spl, *sptemp;
-+      srb_t           *sp;
-+      struct  list_head local_sp_list;
-       ENTER(__func__);
--      if (test_bit(DONE_RUNNING, &old_ha->dpc_flags))
--              return (0);
--
--      set_bit(DONE_RUNNING, &old_ha->dpc_flags);
-       cnt = 0;
-+      INIT_LIST_HEAD(&local_sp_list);
-+
-       /*
-        * Get into local queue such that we do not wind up calling done queue
-        * takslet for the same IOs from DPC or any other place.
-        */
-       spin_lock_irqsave(&old_ha->list_lock,flags);
--      while (!list_empty(&old_ha->done_queue)) {
--              sp = list_entry(old_ha->done_queue.next, srb_t, list);
--              /* remove command from done list */
--              list_del_init(&sp->list);
-+      qla_list_splice_init(&old_ha->done_queue, &local_sp_list);
-+      spin_unlock_irqrestore(&old_ha->list_lock, flags);
-+      list_for_each_safe(spl, sptemp, &local_sp_list) {
-+              sp = list_entry(local_sp_list.next, srb_t, list);
-               old_ha->done_q_cnt--;
--              sp->s_next = NULL;
-               sp->state = SRB_NO_QUEUE_STATE;
--              /* insert in local queue */
--              if (done_queue_first == NULL) {
--                      done_queue_first = sp;
--                      done_queue_last = sp;
--              } else {
--                      done_queue_last->s_next = sp;
--                      done_queue_last = sp;
--              }
--      } /* end of while list_empty(&ha->done_queue) */
--      spin_unlock_irqrestore(&old_ha->list_lock, flags);
--
--      /*
--       * All done commands are in local queue. Now do the call back
--       */
--      while ((sp = done_queue_first) != NULL) {
--              done_queue_first = sp->s_next;
--              if (sp->s_next == NULL)
--                      done_queue_last = NULL;
--              sp->s_next = NULL;
-+              list_del_init(&sp->list);
-               cnt++;
-@@ -5387,14 +5050,17 @@ qla2x00_done(scsi_qla_host_t *old_ha)
-               vis_ha = (scsi_qla_host_t *)cmd->host->hostdata;
-               lq = sp->lun_queue;
-+#if 0
-               ha = lq->fclun->fcport->ha;
-+#else
-+              ha = sp->ha;
-+#endif
-               if (sp->flags & SRB_DMA_VALID) {
-                       sp->flags &= ~SRB_DMA_VALID;
-                       /* 4.10   64 and 32 bit */
-                       /* Release memory used for this I/O */
--#ifndef __VMWARE__
-                       if (cmd->use_sg) {
-                               pci_unmap_sg(ha->pdev,
-                                   cmd->request_buffer,
-@@ -5416,17 +5082,17 @@ qla2x00_done(scsi_qla_host_t *old_ha)
-                                           cmd->sc_data_direction));
- #endif
-                       }
--#endif
-               }
--
--              if (!(sp->flags & SRB_IOCTL) &&
-+              if (!(sp->flags & (SRB_IOCTL | SRB_TAPE | SRB_FDMI_CMD)) &&
-                       ha->flags.failover_enabled) {
-                       /*
-                        * This routine checks for DID_NO_CONNECT to decide
-                        * whether to failover to another path or not. We only
--                       * failover on that status.
-+                       * failover on selection timeout(DID_NO_CONNECT) status.
-                        */
--                      if (qla2x00_fo_check(ha,sp)) {
-+                      if ( !(lq->fclun->fcport->flags & FC_FAILOVER_DISABLE) &&
-+                           !(lq->fclun->flags & FC_VISIBLE_LUN) &&
-+                              qla2x00_fo_check(ha,sp)) {
-                               if ((sp->state != SRB_FAILOVER_STATE)) {
-                                       /*
-                                        * Retry the command on this path
-@@ -5450,7 +5116,7 @@ qla2x00_done(scsi_qla_host_t *old_ha)
-                       case DID_OK:
-                       case DID_ERROR:
--                              break;
-+                              break; 
-                       case DID_RESET:
-                               /*
-@@ -5490,15 +5156,18 @@ qla2x00_done(scsi_qla_host_t *old_ha)
-                       default:
-                               DEBUG(printk("scsi(%ld:%d:%d) %s: did_error "
--                                              "= %d, pid=%ld, comp-scsi= 0x%x-0x%x.\n",
--                              vis_ha->host_no,
--                              SCSI_TCN_32(cmd),
--                              SCSI_LUN_32(cmd),
--                              __func__,
--                              (CMD_RESULT(cmd)>>16),
--                              cmd->serial_number,
--                              CMD_COMPL_STATUS(cmd),
--                              CMD_SCSI_STATUS(cmd));)
-+                                  "= %d, pid=%ld, comp-scsi= 0x%x-0x%x "
-+                                  "fcport_state=0x%x sp_flags=0%x.\n",
-+                                  vis_ha->host_no,
-+                                  SCSI_TCN_32(cmd),
-+                                  SCSI_LUN_32(cmd),
-+                                  __func__,
-+                                  (CMD_RESULT(cmd)>>16),
-+                                  cmd->serial_number,
-+                                  CMD_COMPL_STATUS(cmd),
-+                                  CMD_SCSI_STATUS(cmd),
-+                                  atomic_read(&sp->fclun->fcport->state),
-+                                  sp->flags);)
-                               break;
-               }
-@@ -5507,10 +5176,11 @@ qla2x00_done(scsi_qla_host_t *old_ha)
-                */
-               sp_put(ha, sp);
--              qla2x00_next(vis_ha);
-+              if (vis_ha != old_ha)
-+                      qla2x00_next(vis_ha);
-       } /* end of while */
--      clear_bit(DONE_RUNNING, &old_ha->dpc_flags);
-+      qla2x00_next(old_ha);
-       LEAVE(__func__);
-@@ -5935,24 +5605,32 @@ qla2x00_timer(scsi_qla_host_t *ha)
-        * down timer every second until it reaches zero. Once  it reaches zero
-        * the port it marked DEAD. 
-        */
--      for (t=0, fcport = ha->fcport; 
--              fcport != NULL;
--              fcport = fcport->next, t++) {
-+      t = 0;
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-+              if(fcport->port_type != FCT_TARGET)
-+                      continue;
-               if (atomic_read(&fcport->state) == FC_DEVICE_LOST) {
-                       if (atomic_read(&fcport->port_down_timer) == 0)
-                               continue;
--                      if (atomic_dec_and_test(&fcport->port_down_timer) != 0) 
-+                      if (atomic_dec_and_test(&fcport->port_down_timer)
-+                                      != 0) {
-                               atomic_set(&fcport->state, FC_DEVICE_DEAD);
-+                              DEBUG2(printk(" scsi(%ld): Port num %d marked DEAD"
-+                  " at portid=%02x%02x%02x.\n",
-+                  ha->host_no, t, fcport->d_id.b.domain,
-+                  fcport->d_id.b.area, fcport->d_id.b.al_pa); )
-+                      }
-                       
--                      DEBUG(printk("scsi(%ld): fcport-%d - port retry count "
-+                      DEBUG2(printk("scsi(%ld): fcport-%d - port retry count "
-                                       ":%d remainning\n",
-                                       ha->host_no, 
-                                       t,
-                                       atomic_read(&fcport->port_down_timer));)
-               }
-+              t++;
-       } /* End of for fcport  */
-       /*
-@@ -5982,7 +5660,8 @@ qla2x00_timer(scsi_qla_host_t *ha)
-                                       "scsi%ld: Ending - target %d suspension.\n",
-                                       ha->host_no, t);)
-                               clear_bit(TGT_SUSPENDED, &tq->q_flags); 
--                              set_bit(TGT_UNSUSPENDED, &tq->q_flags); 
-+                              /* retry the commands */
-+                              set_bit(TGT_RETRY_CMDS, &tq->q_flags); 
-                               start_dpc++;
-                       }
-               }
-@@ -6039,8 +5718,15 @@ qla2x00_timer(scsi_qla_host_t *ha)
-                                       "before time expire\n",
-                                       ha->instance);)
- #if !defined(ISP2100)
--                      if(ha->link_down_timeout)
--                              ha->loop_state = LOOP_DEAD; 
-+                      if(ha->link_down_timeout) {
-+                              atomic_set(&ha->loop_state, LOOP_DEAD); 
-+                              printk(KERN_INFO
-+                                      "scsi(%ld): LOOP DEAD detected.\n",
-+                                      ha->host_no);
-+                              DEBUG2(printk(
-+                                      "scsi(%ld): LOOP DEAD detected.\n",
-+                                      ha->host_no);)
-+                      }
- #endif
-                       set_bit(ABORT_QUEUES_NEEDED, &ha->dpc_flags);
-                       start_dpc++;
-@@ -6061,7 +5747,9 @@ qla2x00_timer(scsi_qla_host_t *ha)
-                                       ha->instance);)
-                       }
-               }
--              DEBUG3(printk("qla%ld: Loop Down - seconds remainning %d\n",
-+              if (!(ha->device_flags & DFLG_NO_CABLE))
-+                       DEBUG2(printk(KERN_INFO
-+                           "qla%ld: Loop Down - seconds remainning %d\n",
-                               ha->instance, 
-                               atomic_read(&ha->loop_down_timer));)
-       }
-@@ -6070,14 +5758,8 @@ qla2x00_timer(scsi_qla_host_t *ha)
-        * Done Q Handler -- dgFIXME This handler will kick off doneq if we
-        * haven't process it in 2 seconds.
-        */
--      if (!list_empty(&ha->done_queue)) {
--#if QLA2X_PERFORMANCE
--              tasklet_schedule(&ha->run_qla_task);
--#else
--              start_dpc++;
--              /* qla2x00_done(ha); */
--#endif
--      }
-+      if (!list_empty(&ha->done_queue))
-+              qla2x00_done(ha);
- #if QLA2100_LIPTEST
-       /*
-@@ -6149,6 +5831,8 @@ qla2x00_timer(scsi_qla_host_t *ha)
-               test_bit(FAILOVER_EVENT, &ha->dpc_flags) ||
-               test_bit(FAILOVER_NEEDED, &ha->dpc_flags) ||
-               test_bit(PORT_SCAN_NEEDED, &ha->dpc_flags) ||
-+              test_bit(LOOP_RESET_NEEDED, &ha->dpc_flags) ||
-+              test_bit(IOCTL_ERROR_RECOVERY, &ha->dpc_flags) ||
-               test_bit(MAILBOX_CMD_NEEDED, &ha->dpc_flags)) &&
-               ha->dpc_wait && !ha->dpc_active ){   /* v2.19.4 */
-@@ -6194,7 +5878,8 @@ qla2x00_callback(scsi_qla_host_t *ha, Sc
-       srb_t *sp = (srb_t *) CMD_SP(cmd);
-       scsi_qla_host_t *vis_ha;
-       os_lun_t *lq;
--      int got_sense;
-+      uint8_t is_fdmi_cmnd;
-+      uint8_t got_sense;
-       unsigned long   cpu_flags = 0;
-       ENTER(__func__);
-@@ -6223,12 +5908,33 @@ qla2x00_callback(scsi_qla_host_t *ha, Sc
-       sp->cmd   = NULL;
-       CMD_SP(cmd) = NULL;
-       lq = sp->lun_queue;
-+      is_fdmi_cmnd = (sp->flags & SRB_FDMI_CMD) ? 1 : 0;
-       got_sense = (sp->flags & SRB_GOT_SENSE)? 1: 0;
-+#if REG_FDMI_ENABLED
-+      if (is_fdmi_cmnd) {
-+              DEBUG13(printk("%s(%ld): going to free fdmi srb tmpmem. "
-+                  "result=%d.\n",
-+                  __func__, vis_ha->host_no, CMD_RESULT(cmd)>>16);)
-+              /* free some tmp buffers saved in sp */
-+              qla2x00_fdmi_srb_tmpmem_free(sp);
-+      }
-+#endif
-       add_to_free_queue(vis_ha, sp);
-       if ((CMD_RESULT(cmd)>>16) == DID_OK) {
-               /* device ok */
--              ha->total_bytes += cmd->bufflen;
-+              if (!is_fdmi_cmnd) {
-+                      /* keep IO stats for SCSI commands only. */
-+                      ha->total_bytes += cmd->bufflen;
-+
-+                      if (cmd->bufflen) {
-+                              if (sp->dir & __constant_cpu_to_le16(CF_READ))
-+                                      ha->total_input_bytes += cmd->bufflen;
-+                              else
-+                                      ha->total_output_bytes += cmd->bufflen;
-+                      }
-+              }
-+
-               if (!got_sense) {
-                       /* COMPAQ*/
- #if defined(COMPAQ)
-@@ -6294,7 +6000,7 @@ qla2x00_mem_alloc(scsi_qla_host_t *ha)
-                */
-               if( retry != 10 )
--                      printk(KERN_INFO
-+                      printk( KERN_INFO
-                               "scsi(%ld): Memory Allocation retry %d \n",
-                               ha->host_no, retry);
-                       
-@@ -6309,7 +6015,7 @@ qla2x00_mem_alloc(scsi_qla_host_t *ha)
-                               "scsi(%ld): Memory Allocation failed - "
-                               "risc_rec_q\n",
-                               ha->host_no);
--                      set_current_state(TASK_INTERRUPTIBLE);
-+                      set_current_state(TASK_UNINTERRUPTIBLE);
-                       schedule_timeout(HZ/10);
-                       continue;
-               }
-@@ -6325,7 +6031,7 @@ qla2x00_mem_alloc(scsi_qla_host_t *ha)
-                               "scsi(%ld): Memory Allocation failed - "
-                               "request_ring\n",
-                               ha->host_no);
--                      set_current_state(TASK_INTERRUPTIBLE);
-+                      set_current_state(TASK_UNINTERRUPTIBLE);
-                       schedule_timeout(HZ/10);
-                       continue;
-               }
-@@ -6341,7 +6047,7 @@ qla2x00_mem_alloc(scsi_qla_host_t *ha)
-                               "response_ring\n",
-                               ha->host_no);
-                       qla2x00_mem_free(ha);
--                      set_current_state(TASK_INTERRUPTIBLE);
-+                      set_current_state(TASK_UNINTERRUPTIBLE);
-                       schedule_timeout(HZ/10);
-                       continue;
-               }
-@@ -6357,7 +6063,7 @@ qla2x00_mem_alloc(scsi_qla_host_t *ha)
-                               "init_cb\n",
-                               ha->host_no);
-                       qla2x00_mem_free(ha);
--                      set_current_state(TASK_INTERRUPTIBLE);
-+                      set_current_state(TASK_UNINTERRUPTIBLE);
-                       schedule_timeout(HZ/10);
-                       continue;
-               }
-@@ -6371,7 +6077,7 @@ qla2x00_mem_alloc(scsi_qla_host_t *ha)
-                               "ioctl_mem\n",
-                               ha->host_no);
-                       qla2x00_mem_free(ha);
--                      set_current_state(TASK_INTERRUPTIBLE);
-+                      set_current_state(TASK_UNINTERRUPTIBLE);
-                       schedule_timeout(HZ/10);
-                       continue;
-               }
-@@ -6383,7 +6089,7 @@ qla2x00_mem_alloc(scsi_qla_host_t *ha)
-                               "qla2x00_allocate_sp_pool\n",
-                               ha->host_no);
-                       qla2x00_mem_free(ha);
--                      set_current_state(TASK_INTERRUPTIBLE);
-+                      set_current_state(TASK_UNINTERRUPTIBLE);
-                       schedule_timeout(HZ/10);
-                       continue;
-               }
-@@ -6400,7 +6106,7 @@ qla2x00_mem_alloc(scsi_qla_host_t *ha)
-                               "mbx_cmd_q",
-                               ha->host_no);
-                       qla2x00_mem_free(ha);
--                      set_current_state(TASK_INTERRUPTIBLE);
-+                      set_current_state(TASK_UNINTERRUPTIBLE);
-                       schedule_timeout(HZ/10);
-                       continue;
-               }
-@@ -6447,13 +6153,11 @@ STATIC void
- qla2x00_mem_free(scsi_qla_host_t *ha)
- {
-       uint32_t        t;
--      fc_lun_t        *fclun, *fclun_next;
--      fc_port_t       *fcport, *fcport_next;
-+      fc_port_t       *fcport, *fcptemp;
-+      fc_lun_t        *fclun, *fcltemp;
-       mbx_cmdq_t      *ptmp;
-       mbx_cmdq_t      *tmp_q_head;
-       unsigned long   wtime;/* max wait time if mbx cmd is busy. */
--      struct list_head *fcil, *fcitemp;
--      fc_initiator_t  *fcinitiator;
-       ENTER(__func__);
-@@ -6490,15 +6194,6 @@ qla2x00_mem_free(scsi_qla_host_t *ha)
-       /* free ioctl memory */
-       qla2x00_free_ioctl_mem(ha);
--      /* Free host database. */
--      list_for_each_safe(fcil, fcitemp, &ha->fcinitiators) {
--              fcinitiator = list_entry(fcil, fc_initiator_t, list);
--
--              list_del(&fcinitiator->list);
--              kfree(fcinitiator);
--      }
--      INIT_LIST_HEAD(&ha->fcinitiators);
--
-       /* free sp pool */
-       qla2x00_free_sp_pool(ha);
-@@ -6545,24 +6240,16 @@ qla2x00_mem_free(scsi_qla_host_t *ha)
-       ha->response_ring = NULL;
-       ha->response_dma = 0;
--      /* fc ports */
--      for (fcport = ha->fcport; 
--              fcport != NULL;
--              fcport = fcport_next) {
--
--              fcport_next = fcport->next;
--
--              /* fc luns */
--              for (fclun = fcport->fclun; 
--                      fclun != NULL;
--                      fclun = fclun_next) {
--
--                      fclun_next = fclun->next;
-+      list_for_each_entry_safe(fcport, fcptemp, &ha->fcports, list) {
-+              list_for_each_entry_safe(fclun, fcltemp, &fcport->fcluns,
-+                  list) {
-+                      list_del_init(&fclun->list);
-                       kfree(fclun);
-               }
-+              list_del_init(&fcport->list);
-               kfree(fcport);
-       }
--      ha->fcport = NULL ;
-+      INIT_LIST_HEAD(&ha->fcports);
-       LEAVE(__func__);
- }
-@@ -6635,9 +6322,8 @@ qla2x00_initialize_adapter(scsi_qla_host
-       ha->flags.online = FALSE;
-       ha->flags.disable_host_adapter = FALSE;
-       ha->flags.reset_active = FALSE;
--      ha->flags.watchdog_enabled = FALSE;
-       atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
--      ha->loop_state = LOOP_DOWN;
-+      atomic_set(&ha->loop_state, LOOP_DOWN);
-       ha->device_flags = 0;
-       ha->sns_retry_cnt = 0;
-       ha->device_flags = 0;
-@@ -6663,9 +6349,6 @@ qla2x00_initialize_adapter(scsi_qla_host
-               qla2x00_reset_chip(ha);
--              /* Initialize Fibre Channel database. */
--              qla2x00_init_fc_db(ha);
--
-               /* Initialize target map database. */
-               qla2x00_init_tgt_map(ha);
-@@ -6682,7 +6365,6 @@ qla2x00_initialize_adapter(scsi_qla_host
-               qla2x00_nvram_config(ha);
- #endif
--              ha->retry_count = ql2xretrycount;
- #if USE_PORTNAME
-               ha->flags.port_name_used =1;
- #else
-@@ -6706,7 +6388,7 @@ qla2x00_initialize_adapter(scsi_qla_host
-                               qla2x00_get_properties(ha, ql2xdevconf);
-               }
--              retry = 10;
-+              retry = QLA2XXX_LOOP_RETRY_COUNT;
-               /*
-                * Try configure the loop.
-                */
-@@ -6727,7 +6409,7 @@ qla2x00_initialize_adapter(scsi_qla_host
-                                       status = qla2x00_setup_chip(ha);
-                               if (!status) {
--                                      DEBUG(printk("scsi(%ld): Chip verified "
-+                                      DEBUG2(printk("scsi(%ld): Chip verified "
-                                                       "and RISC loaded...\n",
-                                                       ha->host_no));
-                               }
-@@ -6742,7 +6424,7 @@ qla2x00_initialize_adapter(scsi_qla_host
-                                * value OR a minimum of 4 seconds OR If no 
-                                * cable, only 5 seconds.
-                                */
--                              DEBUG(printk("qla2x00_init_rings OK, call "
-+                              DEBUG2(printk("qla2x00_init_rings OK, call "
-                                               "qla2x00_fw_ready...\n");)
- check_fw_ready_again:
-@@ -6766,11 +6448,9 @@ check_fw_ready_again:
-                                                       break;
-                                               }
--                                              /* if loop state changed while
--                                               * we were discoverying devices
--                                               * then wait for LIP to complete
--                                               */
--                                              if( ha->loop_state == LOOP_DOWN && retry-- ) {
-+                                              /* if loop state change while we were discoverying devices
-+                                                      then wait for LIP to complete */
-+                                              if (atomic_read(&ha->loop_state) == LOOP_DOWN && retry--) {
-                                                       goto check_fw_ready_again;
-                                               }
-@@ -6783,7 +6463,7 @@ check_fw_ready_again:
-                                                       !time_after_eq(jiffies,wait_device);) {
-                                                       qla2x00_check_fabric_devices(ha);
--                                                      set_current_state(TASK_INTERRUPTIBLE);
-+                                                      set_current_state(TASK_UNINTERRUPTIBLE);
-                                                       schedule_timeout(5);
-                                               }
- #endif
-@@ -6940,6 +6620,7 @@ qla2x00_iospace_config(scsi_qla_host_t *
-                   "scsi(%ld): cannot remap MMIO (%s), aborting\n",
-                   ha->host_no, ha->pdev->slot_name);
-+              pci_release_regions(ha->pdev);
-               goto iospace_error_exit;
-       }
-       ha->iobase = (device_reg_t *) ha->mmio_address;
-@@ -6978,38 +6659,28 @@ qla2x00_pci_config(scsi_qla_host_t *ha)
-        * Turn on PCI master; for system BIOSes that don't turn it on by
-        * default.
-        */
-+
-       pci_set_master(ha->pdev);
-       pci_read_config_word(ha->pdev, PCI_REVISION_ID, &buf_wd);
-       ha->revision = buf_wd;
-+#ifndef MEMORY_MAPPED_IO
-       if (ha->iobase)
-               return 0;
--
-+#endif
-       do { /* Quick exit */
-               /* Get command register. */
-               pci_ret = pci_read_config_word(ha->pdev, PCI_COMMAND, &buf_wd);
-               if (pci_ret != PCIBIOS_SUCCESSFUL)
-                       break;
--              /*
--               * Set Bus Master Enable (bit-2), Memory Address Space Enable
--               * and reset any error bits.
--               */
--              buf_wd &= ~0x7;
--
--#if MEMORY_MAPPED_IO
--              DEBUG(printk("%s(): I/O SPACE and MEMORY MAPPED I/O is "
--                              "enabled.\n",
--                              __func__));
--              buf_wd |= (PCI_COMMAND_MASTER |
--                              PCI_COMMAND_MEMORY |
--                              PCI_COMMAND_IO);
--#else
--              DEBUG(printk("%s(): I/O SPACE Enabled and MEMORY MAPPED "
--                              "I/O is disabled.\n",
--                              __func__));
--              buf_wd |= (PCI_COMMAND_MASTER | PCI_COMMAND_IO);
--#endif
-+              /* PCI Specification Revision 2.3 changes */
-+              if (check_device_id(ha)) { 
-+                      /* Command Register
-+                       *  -- Reset Interrupt Disable -- BIT_10
-+                       */
-+                      buf_wd &= ~BIT_10;
-+              }
-               pci_ret = pci_write_config_word(ha->pdev, PCI_COMMAND, buf_wd);
-               if (pci_ret != PCIBIOS_SUCCESSFUL)
-@@ -7103,7 +6774,7 @@ qla2x00_chip_diag(scsi_qla_host_t *ha)
-       uint8_t         status = 0;
-       device_reg_t    *reg = ha->iobase;
-       unsigned long   flags = 0;
--#if defined(ISP2300)
-+#if defined(ISP2300) 
-       uint16_t        buf_wd;
- #endif
-       uint16_t        data;
-@@ -7112,13 +6783,16 @@ qla2x00_chip_diag(scsi_qla_host_t *ha)
-       ENTER(__func__);
-       DEBUG3(printk("%s(): testing device at %lx.\n",
--                      __func__,
--                      (u_long)&reg->flash_address);)
-+          __func__,
-+          (u_long)&reg->flash_address);)
-       spin_lock_irqsave(&ha->hardware_lock, flags);
-       /* Reset ISP chip. */
-       WRT_REG_WORD(&reg->ctrl_status, CSR_ISP_SOFT_RESET);
-+      CACHE_FLUSH(&reg->ctrl_status);
-+      /* Delay after reset, for chip to recover. */
-+      udelay(20);
-       data = qla2x00_debounce_register(&reg->ctrl_status);
-       for (cnt = 6000000 ; cnt && (data & CSR_ISP_SOFT_RESET); cnt--) {
-               udelay(5);
-@@ -7128,30 +6802,31 @@ qla2x00_chip_diag(scsi_qla_host_t *ha)
-       if (cnt) {
-               DEBUG3(printk("%s(): reset register cleared by chip reset\n",
--                              __func__);)
-+                  __func__);)
--#if defined(ISP2300)
-+#if defined(ISP2300) 
-               pci_read_config_word(ha->pdev, PCI_COMMAND, &buf_wd);
-               buf_wd |= (PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
-               data = RD_REG_WORD(&reg->mailbox6);
--
--              if ((ha->device_id == QLA2312_DEVICE_ID) ||
--                      ((data & 0xff) == FPM_2310))
-+              if (check_all_device_ids(ha))       
-                       /* Enable Memory Write and Invalidate. */
-                       buf_wd |= PCI_COMMAND_INVALIDATE;
-               else
-                       buf_wd &= ~PCI_COMMAND_INVALIDATE;
-+
-               pci_write_config_word(ha->pdev, PCI_COMMAND, buf_wd);
- #endif
-               /* Reset RISC processor. */
-               WRT_REG_WORD(&reg->host_cmd, HC_RESET_RISC);
-+              CACHE_FLUSH(&reg->host_cmd);
-               WRT_REG_WORD(&reg->host_cmd, HC_RELEASE_RISC);
-+              CACHE_FLUSH(&reg->host_cmd);
--#if defined(ISP2300)
-+#if defined(ISP2300) 
-               /* Workaround for QLA2312 PCI parity error */
--              if (ha->device_id == QLA2312_DEVICE_ID)
-+              if (check_all_device_ids(ha)) {             
-                       udelay(10);
--              else {
-+              } else {
-                       data = qla2x00_debounce_register(&reg->mailbox0);
-                       for (cnt = 6000000; cnt && (data == MBS_BUSY); cnt--) {
-@@ -7173,7 +6848,7 @@ qla2x00_chip_diag(scsi_qla_host_t *ha)
-               if (cnt) {
-                       /* Check product ID of chip */
-                       DEBUG3(printk("%s(): Checking product ID of chip\n",
--                                      __func__);)
-+                          __func__);)
-                       if (RD_REG_WORD(&reg->mailbox1) != PROD_ID_1 ||
-                           (RD_REG_WORD(&reg->mailbox2) != PROD_ID_2 &&
-@@ -7197,26 +6872,26 @@ qla2x00_chip_diag(scsi_qla_host_t *ha)
-                                       ha->device_id = QLA2200A_DEVICE_ID;
-                                       DEBUG3(printk("%s(): Found QLA2200A "
--                                                      "chip.\n",
--                                                      __func__);)
-+                                          "chip.\n",
-+                                          __func__);)
-                               }
- #endif
-                               spin_unlock_irqrestore(&ha->hardware_lock,
--                                              flags);
-+                                  flags);
-                               DEBUG3(printk("%s(): Checking mailboxes.\n",
--                                              __func__);)
-+                                  __func__);)
-                               /* Wrap Incoming Mailboxes Test. */
-                               status = qla2x00_mbx_reg_test(ha);
-                               if (status) {
-                                       printk(KERN_WARNING
--                                              "%s(): failed mailbox send "
--                                              "register test\n",
--                                              __func__);
-+                                          "%s(): failed mailbox send "
-+                                          "register test\n",
-+                                          __func__);
-                                       DEBUG(printk("%s(): Failed mailbox "
--                                                      "send register test\n",
--                                                      __func__);)
-+                                          "send register test\n",
-+                                          __func__);)
-                               }
-                               spin_lock_irqsave(&ha->hardware_lock, flags);
-                       }
-@@ -7225,8 +6900,10 @@ qla2x00_chip_diag(scsi_qla_host_t *ha)
-       } else
-               status = 1;
--      if (status)
-+      if (status){
-               DEBUG2_3(printk(KERN_INFO "%s(): **** FAILED ****\n", __func__);)
-+              printk("%s(): **** FAILED ****\n", __func__);
-+      }
-       spin_unlock_irqrestore(&ha->hardware_lock, flags);
-@@ -7251,30 +6928,17 @@ qla2x00_setup_chip(scsi_qla_host_t *ha)
- {
-       uint8_t         status = 0;
-       uint16_t        cnt;
--      uint16_t        risc_address;
-       uint16_t        *risc_code_address;
-+      unsigned long   risc_address;
-       unsigned long   risc_code_size;
-       int             num;
--#if defined(WORD_FW_LOAD)
--      uint16_t        data;
--      uint16_t        *ql21_risc_code_addr01;
--      uint16_t        ql21_risc_code_length01;
--      uint8_t         dump_status;
--#endif
-+      struct qla_fw_info      *fw_iter;
-+      int i;
-+      uint16_t *req_ring;
-       ENTER(__func__);
--      /* Load RISC code. */
--      risc_address = *QLBoardTbl_fc[ha->devnum].fwstart;
--      risc_code_address = QLBoardTbl_fc[ha->devnum].fwcode;
--      risc_code_size = *QLBoardTbl_fc[ha->devnum].fwlen;
--
--      DEBUG(printk("%s(): Loading RISC code size =(0x%lx) req virt=%p "
--                      "phys=%llx\n",
--                      __func__,
--                      risc_code_size,
--                      ha->request_ring,
--                      (u64)ha->request_dma);)
-+      fw_iter = QLBoardTbl_fc[ha->devnum].fwinfo;
-       /*
-        * Save active FC4 type depending on firmware support. This info is
-@@ -7282,124 +6946,94 @@ qla2x00_setup_chip(scsi_qla_host_t *ha)
-        */
-       ha->active_fc4_types = EXT_DEF_FC4_TYPE_SCSI;
- #if defined(FC_IP_SUPPORT)
--      ha->active_fc4_types |= EXT_DEF_FC4_TYPE_IP;
-+      if (ha->flags.enable_ip)
-+              ha->active_fc4_types |= EXT_DEF_FC4_TYPE_IP;
- #endif
- #if defined(FC_SCTP_SUPPORT)
-+      risc_address = *fw_iter->fwstart;
-       if (risc_address == fw2300sctp_code01)
-               ha->active_fc4_types |= EXT_DEF_FC4_TYPE_SCTP;
- #endif
--      num = 0;
--      while (risc_code_size > 0 && !status) {
--              cnt = REQUEST_ENTRY_SIZE * REQUEST_ENTRY_CNT >> 1;
--#if defined(ISP2200)
--              /* for 2200A set transfer size to 128 bytes */
--              if (ha->device_id == QLA2200A_DEVICE_ID)
--                      cnt = 128 >> 1;
--#endif
--
--              if (cnt > risc_code_size)
--                      cnt = risc_code_size;
--
--              DEBUG7(printk("%s(): loading risc segment@ addr %p, number of "
--                              "bytes 0x%x, offset 0x%x.\n",
--                              __func__,
--                              risc_code_address,
--                              cnt,
--                              risc_address);)
--
--#if defined(__LITTLE_ENDIAN)
--              memcpy(ha->request_ring, risc_code_address, (cnt << 1));
--#else
--      {
--              int i;
--              uint16_t *req_ring;
-+      /* Load firmware sequences */
-+      while (fw_iter->addressing != FW_INFO_ADDR_NOMORE) {
-+              risc_code_address = fw_iter->fwcode;
-+              risc_code_size = *fw_iter->fwlen;
-+
-+              if (fw_iter->addressing == FW_INFO_ADDR_NORMAL) {
-+                      risc_address = *fw_iter->fwstart;
-+                      DEBUG7(printk(KERN_INFO "%s risc_address=%lx" 
-+                          "address=%d\n",__func__,risc_address,
-+                          fw_iter->addressing);)
-+              } else {
-+                      /* Extended address */
-+                      risc_address = *fw_iter->lfwstart;
-+                      DEBUG7(printk(KERN_INFO "%s risc_address=%lx" 
-+                          "address=%d\n",__func__,risc_address,
-+                          fw_iter->addressing);)
-+              }
--              req_ring = (uint16_t *)ha->request_ring;
--              for (i = 0; i < cnt; i++)
--                      req_ring[i] = cpu_to_le16(risc_code_address[i]);
--      };
-+              num = 0;
-+              while (risc_code_size > 0 && !status) {
-+                      cnt = REQUEST_ENTRY_SIZE * REQUEST_ENTRY_CNT >> 1;
-+#if defined(ISP2200)
-+                      /* for 2200A set transfer size to 128 bytes */
-+                      if (ha->device_id == QLA2200A_DEVICE_ID)
-+                              cnt = 128 >> 1;
- #endif
--              /*
--               * Flush written firmware to the ha->request_ring buffer before
--               * DMA
--               */
--              flush_cache_all();
--
--              status = qla2x00_load_ram(ha,
--                              ha->request_dma, risc_address, cnt);
-+                      if (cnt > risc_code_size)
-+                              cnt = risc_code_size;
--              if (status) {
--                      qla2x00_dump_regs(ha->host);
--                      printk(KERN_WARNING
--                              "qla2x00: [ERROR] Failed to load segment "
--                              "%d of FW\n",
--                              num);
--                      DEBUG(printk("%s(): Failed to load segment %d of FW\n",
--                                      __func__,
--                                      num);)
--                      break;
--              }
--
--              risc_address += cnt;
--              risc_code_size -= cnt;
--              risc_code_address += cnt;
--              num++;
--      }
--
--#if defined(WORD_FW_LOAD)
--      {
--              int i;
-+                      DEBUG7(printk("%s(): loading risc segment@ addr %p," 
-+                          " number of bytes 0x%x, offset 0x%lx.\n",
-+                          __func__, risc_code_address, cnt, risc_address);)
--              risc_address = *QLBoardTbl_fc[ha->devnum].fwstart;
--              ql21_risc_code_addr01  = QLBoardTbl_fc[ha->devnum].fwcode;
--              ql21_risc_code_length01 = *QLBoardTbl_fc[ha->devnum].fwlen;
--
--              for (i = 0; i < ql21_risc_code_length01 ; i++) {
--                      dump_status = qla2x00_write_ram_word(ha,
--                                      risc_address + i, 
--                                      *(ql21_risc_code_addr01 + i));
-+                      req_ring = (uint16_t *)ha->request_ring;
-+                      for (i = 0; i < cnt; i++)
-+                              req_ring[i] = cpu_to_le16(risc_code_address[i]);
--                      if (dump_status) {
--                              printk(KERN_WARNING
--                                      "qla2x00: [ERROR] firmware load "
--                                      "failure\n");
--                              break;
-+                      /*
-+                      * Flush written firmware to the ha->request_ring 
-+                      * buffer before DMA */
-+                      flush_cache_all();
-+                      if (fw_iter->addressing == FW_INFO_ADDR_NORMAL) {
-+                              status = qla2x00_load_ram(ha,
-+                                  ha->request_dma, risc_address, cnt);
-+                      } else {
-+                              status = qla2x00_load_ram_ext(ha,
-+                                  ha->request_dma, risc_address, cnt);
-                       }
--                      dump_status = qla2x00_read_ram_word(ha,
--                                      risc_address + i, &data);
--
--                      if (dump_status) {
-+                      if (status) {
-+                              qla2x00_dump_regs(ha->host);
-                               printk(KERN_WARNING
--                                      "qla2x00: [ERROR] RISC FW Read "
--                                      "Failure\n");
--                              break;
-+                                  "qla2x00: [ERROR] Failed to load segment "
-+                                  "%d of FW\n", num);
-+                              DEBUG2(printk("%s(): Failed to load segment %d" 
-+                                  " of FW\n", __func__, num);)
-+                                      break;
-                       }
--                      if (data != *(ql21_risc_code_addr01 + i)) {
--                              printk(KERN_WARNING
--                                      "qla2x00: [ERROR] RISC FW Compare "
--                                      "ERROR @ (0x%p)\n",
--                                      (void *)(ql21_risc_code_addr01+i));
--                      }
-+                      risc_address += cnt;
-+                      risc_code_size -= cnt;
-+                      risc_code_address += cnt;
-+                      num++;
-               }
--              printk(KERN_INFO
--                      "qla2x00: RISC FW download confirmed... \n");
-+              /* Next firmware sequence */
-+              fw_iter++;
-       }
--#endif /* WORD_FW_LOAD */
-       /* Verify checksum of loaded RISC code. */
-       if (!status) {
--              DEBUG(printk("%s(): Verifying Check Sum of loaded RISC code.\n",
-+              DEBUG2(printk("%s(): Verifying Check Sum of loaded RISC code.\n",
-                               __func__);)
-               status = (uint8_t)qla2x00_verify_checksum(ha);
-               if (status == QL_STATUS_SUCCESS) {
-                       /* Start firmware execution. */
--                      DEBUG(printk("%s(): CS Ok, Start firmware running\n",
-+                      DEBUG2(printk("%s(): CS Ok, Start firmware running\n",
-                                       __func__);)
-                       status = qla2x00_execute_fw(ha);
-               }
-@@ -7493,16 +7127,18 @@ qla2x00_init_rings(scsi_qla_host_t *ha)
-       /* Initialize response queue entries */
-       qla2x00_init_response_q_entries(ha);
--#if defined(ISP2300)
-+#if defined(ISP2300) 
-       WRT_REG_WORD(&reg->req_q_in, 0);
-       WRT_REG_WORD(&reg->req_q_out, 0);
-       WRT_REG_WORD(&reg->rsp_q_in, 0);
-       WRT_REG_WORD(&reg->rsp_q_out, 0);
-+      CACHE_FLUSH(&reg->rsp_q_out);
- #else
-       WRT_REG_WORD(&reg->mailbox4, 0);
-       WRT_REG_WORD(&reg->mailbox4, 0);
-       WRT_REG_WORD(&reg->mailbox5, 0);
-       WRT_REG_WORD(&reg->mailbox5, 0);
-+      CACHE_FLUSH(&reg->mailbox5);
- #endif
-       spin_unlock_irqrestore(&ha->hardware_lock, flags);
-@@ -7516,18 +7152,20 @@ qla2x00_init_rings(scsi_qla_host_t *ha)
-                               __func__,
-                               ha->host_no);)
-       } else {
-+#if defined(ISP2300)
-               /* Setup seriallink options */
-               uint16_t        opt10, opt11;
-+#endif
-+              qla2x00_get_firmware_options(ha,
-+                  &ha->fw_options1, &ha->fw_options2, &ha->fw_options3);
-+#if defined(ISP2300)
-               DEBUG3(printk("%s(%ld): Serial link options:\n",
-                   __func__, ha->host_no);)
-               DEBUG3(qla2x00_dump_buffer(
-                   (uint8_t *)&ha->fw_seriallink_options,
-                   sizeof(ha->fw_seriallink_options));)
--              qla2x00_get_firmware_options(ha,
--                  &ha->fw_options1, &ha->fw_options2, &ha->fw_options3);
--
-               ha->fw_options1 &= ~BIT_8;
-               if (ha->fw_seriallink_options.output_enable)
-                       ha->fw_options1 |= BIT_8;
-@@ -7537,12 +7175,15 @@ qla2x00_init_rings(scsi_qla_host_t *ha)
-               opt11 = (ha->fw_seriallink_options.output_emphasis_2g << 14) |
-                   (ha->fw_seriallink_options.output_swing_2g << 8) | 0x3;
-+              /* TAPE FIX */
-+              /* Return the IOCB without waiting for the ABTS. */
-+              ha->fw_options3 |= BIT_13;
-+
-               qla2x00_set_firmware_options(ha, ha->fw_options1,
-                   ha->fw_options2, ha->fw_options3, opt10, opt11);
--
--              DEBUG3(printk("%s(%ld): exiting normally.\n",
--                              __func__,
--                              ha->host_no);)
-+#endif
-+              DEBUG3(printk("%s(%ld): exiting normally.\n", __func__,
-+                  ha->host_no));
-       }
-       return (status);
-@@ -7571,7 +7212,11 @@ qla2x00_fw_ready(scsi_qla_host_t *ha)
-       ENTER(__func__);
--      min_wait = 60;          /* 60 seconds for loop down. */
-+      if (!ha->init_done)
-+              min_wait = 60;          /* 60 seconds for loop down. */
-+      else
-+              min_wait = 20;          /* 20 seconds for loop down. */
-+      ha->device_flags &= ~DFLG_NO_CABLE;
-       /*
-        * Firmware should take at most one RATOV to login, plus 5 seconds for
-@@ -7644,8 +7289,8 @@ qla2x00_fw_ready(scsi_qla_host_t *ha)
-                       break;
-               /* Delay for a while */
--              set_current_state(TASK_INTERRUPTIBLE);
--              schedule_timeout(HZ / 2);
-+              set_current_state(TASK_UNINTERRUPTIBLE);
-+              schedule_timeout(HZ / HZ);
-               DEBUG3(printk("%s(): fw_state=%x curr time=%lx.\n",
-                               __func__,
-@@ -7791,45 +7436,6 @@ qla2x00_configure_hba(scsi_qla_host_t *h
-       return(rval);
- }
--/**
-- * qla2x00_config_dma_addressing() - Configure OS DMA addressing method.
-- * @ha: HA context
-- *
-- * At exit, the @ha's flags.enable_64bit_addressing set to indicated
-- * supported addressing method.
-- */
--static inline void
--qla2x00_config_dma_addressing(scsi_qla_host_t *ha)
--{
--      /*
--       * Given the two variants of pci_set_dma_mask(), allow the compiler to
--       * assist in setting the proper dma mask.
--       */
--      if (sizeof(dma_addr_t) > 4) {
--              ha->flags.enable_64bit_addressing = 1;
--              /* Update our PCI device dma_mask for full 64 bit mask */
--              if (pci_set_dma_mask(ha->pdev, 0xffffffffffffffffULL)) {
--                      printk("qla2x00: failed to set 64 bit PCI DMA mask, "
--                              "using 32 bits\n");
--                      ha->flags.enable_64bit_addressing = 0;
--                      pci_set_dma_mask(ha->pdev, 0xffffffff);
--              }
--              (void) pci_set_consistent_dma_mask(ha->pdev, 0xffffffffffffffffULL);
--      }
--      else {
--              ha->flags.enable_64bit_addressing = 0;
--              pci_set_dma_mask(ha->pdev, 0xffffffff);
--      }
--      printk(KERN_INFO
--              "scsi(%ld): %d Bit PCI Addressing Enabled.\n",
--              ha->host_no,
--              (ha->flags.enable_64bit_addressing ? 64 : 32));
--      printk(KERN_INFO
--              "scsi(%ld): Scatter/Gather entries= %d\n",
--              ha->host_no,
--              ha->host->sg_tablesize);
--}
--
- #if defined(ISP2100)
- /*
- * NVRAM configuration for 2100.
-@@ -7962,13 +7568,10 @@ qla2100_nvram_config(scsi_qla_host_t *ha
-       ha->flags.disable_luns            = nv->host_p.disable_luns;
-       ha->flags.disable_risc_code_load  = nv->host_p.disable_risc_code_load;
-       ha->flags.set_cache_line_size_1   = nv->host_p.set_cache_line_size_1;
--      ha->flags.enable_64bit_addressing = nv->host_p.enable_64bit_addressing;
-       if (nv->host_p.enable_extended_logging)
-               extended_error_logging = 1 ;
--      qla2x00_config_dma_addressing(ha);
--
-       ha->flags.link_down_error_enable  = 1;
-       ha->flags.enable_lip_reset        = nv->host_p.enable_lip_reset;
-@@ -8032,8 +7635,7 @@ qla2100_nvram_config(scsi_qla_host_t *ha
-       ha->binding_type = Bind;
-       if ((ha->binding_type != BIND_BY_PORT_NAME) &&
--              (ha->binding_type != BIND_BY_PORT_ID) &&
--              (ha->binding_type != BIND_BY_NODE_NAME)) {
-+              (ha->binding_type != BIND_BY_PORT_ID)) {
-               printk(KERN_WARNING
-                       "scsi(%ld): Invalid binding type specified "
-@@ -8050,10 +7652,10 @@ qla2100_nvram_config(scsi_qla_host_t *ha
-       icb->response_q_inpointer  = 0;
-       icb->request_q_length      = REQUEST_ENTRY_CNT;
-       icb->response_q_length     = RESPONSE_ENTRY_CNT;
--      icb->request_q_address[0]  = LS_64BITS(ha->request_dma);
--      icb->request_q_address[1]  = MS_64BITS(ha->request_dma);
--      icb->response_q_address[0] = LS_64BITS(ha->response_dma);
--      icb->response_q_address[1] = MS_64BITS(ha->response_dma);
-+      icb->request_q_address[0]  = LSD(ha->request_dma);
-+      icb->request_q_address[1]  = MSD(ha->request_dma);
-+      icb->response_q_address[0] = LSD(ha->response_dma);
-+      icb->response_q_address[1] = MSD(ha->response_dma);
-       ha->qfull_retry_count = qfull_retry_count;
-@@ -8072,20 +7674,6 @@ qla2100_nvram_config(scsi_qla_host_t *ha
-       return(status);
- }
- #else
--#if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2)
--/*
-- * SGI systems can't adjust NVRAM settings, and some cards for SGI
-- * systems have incorrect defaults.
-- */
--void
--sgi_sn_nvram_fixup(nvram22_t *nv)
--{
--      nv->frame_payload_size = __constant_cpu_to_le16(2048);
--#if defined(ISP2300)
--      nv->special_options.data_rate = SO_DATA_RATE_AUTO;
--#endif
--}
--#endif
- /*
- * NVRAM configuration for the 2200/2300/2312
- *
-@@ -8106,7 +7694,7 @@ sgi_sn_nvram_fixup(nvram22_t *nv)
- STATIC uint8_t
- qla2x00_nvram_config(scsi_qla_host_t *ha)
- {
--#if defined(ISP2300)
-+#if defined(ISP2300) 
-       device_reg_t *reg = ha->iobase;
-       uint16_t  data;
- #endif
-@@ -8126,8 +7714,8 @@ qla2x00_nvram_config(scsi_qla_host_t *ha
-       ENTER(__func__);
-       if (!ha->flags.nvram_config_done) {
--#if defined(ISP2300)
--              if (ha->device_id == QLA2312_DEVICE_ID) {
-+#if defined(ISP2300) 
-+              if (check_all_device_ids(ha)) {
-                       data = RD_REG_WORD(&reg->ctrl_status);
-                       if ((data >> 14) == 1)
-                               base = 0x80;
-@@ -8163,8 +7751,8 @@ qla2x00_nvram_config(scsi_qla_host_t *ha
-                       chksum += (uint8_t)(*wptr >> 8);
-                       wptr++;
-               }
--#if defined(ISP2300)
--              if (ha->device_id == QLA2312_DEVICE_ID) {
-+#if defined(ISP2300) 
-+              if (check_all_device_ids(ha)) {             
-                       /* Unlock resource */
-                       WRT_REG_WORD(&reg->host_semaphore, 0);
-               }
-@@ -8252,22 +7840,25 @@ qla2x00_nvram_config(scsi_qla_host_t *ha
-                       nv->link_down_timeout = 60;
-                       status = 1;
-               }
--#if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2)
--              if (ia64_platform_is("sn2"))
--                      sgi_sn_nvram_fixup(nv);
--#endif
- #if defined(ISP2200)
-               /* Model Number */
-               sprintf(ha->model_number,"QLA22xx");
- #endif
--#if defined(ISP2300)
-+#if defined(ISP2300) 
-               /* Sub System Id (QLA2300/QLA2310): 0x9 */
--              if(ha->pdev->subsystem_device  == 0x9 ) {
-+              if (ha->device_id == QLA2300_DEVICE_ID &&
-+                  ha->pdev->subsystem_device  == 0x9 ) {
-                       /* Model Number */
-                       sprintf(ha->model_number,"QLA2300/2310");
--              } else {
-+              } else
-+              {
-+                      /* This should be later versions of 23xx, with NVRAM
-+                       * support of hardware ID.
-+                       */
-+                      strncpy(ha->hw_id_version, nv->hw_id, NVRAM_HW_ID_SIZE);
-+
-                       /* Get the Model Number from the NVRAM. If
-                        * the string is empty then lookup the table. 
-                        */     
-@@ -8286,13 +7877,15 @@ qla2x00_nvram_config(scsi_qla_host_t *ha
-                                       sprintf(ha->model_number,
-                                               qla2x00_model_name[index]);
-                               } else {
--                                      sprintf(ha->model_number,
--                                              "QLA23xx");
-+                                      set_model_number(ha);
-                               }
-                       }
-               }
-               
- #endif
-+    
-+              sprintf(ha->model_desc,"QLogic %s PCI Fibre Channel Adapter",
-+                  ha->model_number);
-               /* Reset NVRAM data. */
-               memset(icb, 0, sizeof(init_cb_t));
-@@ -8348,6 +7941,7 @@ qla2x00_nvram_config(scsi_qla_host_t *ha
-               firmware_options.enable_full_login_on_lip = 1;
- #if defined(ISP2300)
-               firmware_options.enable_fast_posting = 0;
-+              icb->special_options.data_rate = 2;
- #endif
- #if !defined(FC_IP_SUPPORT)
-               /* Enable FC-Tape support */
-@@ -8355,25 +7949,30 @@ qla2x00_nvram_config(scsi_qla_host_t *ha
-               additional_firmware_options.enable_fc_tape = 1;
-               additional_firmware_options.enable_fc_confirm = 1;
- #endif
-+#if defined(ISP2200)
-+              additional_firmware_options.operation_mode = 4;
-+              icb->response_accum_timer = 3;
-+              icb->interrupt_delay_timer = 5;
-+#endif
-               /*
-                * Set host adapter parameters
-                */
-               ha->flags.enable_target_mode = firmware_options.enable_target_mode;
-               ha->flags.disable_luns = host_p.disable_luns;
-+              if (check_device_id(ha)) 
-+                      host_p.disable_risc_code_load = 0;
-               ha->flags.disable_risc_code_load = host_p.disable_risc_code_load;
-               ha->flags.set_cache_line_size_1 = host_p.set_cache_line_size_1;
--              ha->flags.enable_64bit_addressing = host_p.enable_64bit_addressing;
-               if(host_p.enable_extended_logging)
-                       extended_error_logging = 1 ;
--              qla2x00_config_dma_addressing(ha);
--
-               ha->flags.enable_lip_reset = host_p.enable_lip_reset;
-               ha->flags.enable_lip_full_login = host_p.enable_lip_full_login;
-               ha->flags.enable_target_reset = host_p.enable_target_reset;
-               ha->flags.enable_flash_db_update = host_p.enable_database_storage;
-               ha->operating_mode = additional_firmware_options.connection_options;
--
-+              DEBUG2(printk("%s(%ld):operating mode=%d\n",__func__,
-+                          ha->host_no, ha->operating_mode);)
-               /*
-                * Set serial firmware options
-                */
-@@ -8403,8 +8002,10 @@ qla2x00_nvram_config(scsi_qla_host_t *ha
-               ha->hiwat = le16_to_cpu(icb->iocb_allocation);
-               ha->execution_throttle = le16_to_cpu(nv->execution_throttle);
-+#if defined(ISP2200) || defined(ISP2300)
-               if (nv->login_timeout < ql2xlogintimeout)
-                       nv->login_timeout = ql2xlogintimeout;
-+#endif
-               icb->execution_throttle = __constant_cpu_to_le16(0xFFFF);
-               ha->retry_count = nv->retry_count;
-@@ -8475,8 +8076,7 @@ qla2x00_nvram_config(scsi_qla_host_t *ha
-               ha->binding_type = Bind;
-               if ((ha->binding_type != BIND_BY_PORT_NAME) &&
--                      (ha->binding_type != BIND_BY_PORT_ID) &&
--                      (ha->binding_type != BIND_BY_NODE_NAME)) {
-+                      (ha->binding_type != BIND_BY_PORT_ID)) {
-                       printk(KERN_WARNING
-                               "scsi(%ld): Invalid binding type specified "
-@@ -8489,8 +8089,11 @@ qla2x00_nvram_config(scsi_qla_host_t *ha
-               /*
-                * Need enough time to try and get the port back.
-                */
-+              ha->port_down_retry_count = 30;
-+#if defined(ISP2200) || defined(ISP2300)
-               if (qlport_down_retry)
-                       ha->port_down_retry_count = qlport_down_retry;
-+#endif
- #if defined(COMPAQ)
-               else if (ha->port_down_retry_count < HSG80_PORT_RETRY_COUNT)
-                       ha->port_down_retry_count = HSG80_PORT_RETRY_COUNT;
-@@ -8503,6 +8106,11 @@ qla2x00_nvram_config(scsi_qla_host_t *ha
-               else if ( ha->port_down_retry_count > ha->login_retry_count )
-                       ha->login_retry_count = ha->port_down_retry_count;
-+#if defined(ISP2200) || defined(ISP2300)
-+              if(qlogin_retry_count)
-+                      ha->login_retry_count = qlogin_retry_count;
-+#endif
-+
-               /*
-                * Setup ring parameters in initialization control block
-                */
-@@ -8512,14 +8120,10 @@ qla2x00_nvram_config(scsi_qla_host_t *ha
-                       __constant_cpu_to_le16(REQUEST_ENTRY_CNT);
-               icb->response_q_length     =
-                       __constant_cpu_to_le16(RESPONSE_ENTRY_CNT);
--              icb->request_q_address[0]  =
--                      cpu_to_le32(LS_64BITS(ha->request_dma));
--              icb->request_q_address[1]  =
--                      cpu_to_le32(MS_64BITS(ha->request_dma));
--              icb->response_q_address[0] =
--                      cpu_to_le32(LS_64BITS(ha->response_dma));
--              icb->response_q_address[1] =
--                      cpu_to_le32(MS_64BITS(ha->response_dma));
-+              icb->request_q_address[0]  = cpu_to_le32(LSD(ha->request_dma));
-+              icb->request_q_address[1]  = cpu_to_le32(MSD(ha->request_dma));
-+              icb->response_q_address[0] = cpu_to_le32(LSD(ha->response_dma));
-+              icb->response_q_address[1] = cpu_to_le32(MSD(ha->response_dma));
-               icb->lun_enables = __constant_cpu_to_le16(0);
-               icb->command_resource_count = 0;
-@@ -8531,14 +8135,14 @@ qla2x00_nvram_config(scsi_qla_host_t *ha
-               if (icb->additional_firmware_options.operation_mode 
-                               == ZIO_MODE){
-                       icb->interrupt_delay_timer = ql2xintrdelaytimer;
--                      DEBUG2(printk(KERN_INFO "%s ZIO enabled:intr_timer_delay=%d\n",
--                                              __func__,ql2xintrdelaytimer);)
-+                      DEBUG2(printk(KERN_INFO "%s ZIO enabled:" 
-+                                  " intr_timer_delay=%d\n", __func__,
-+                                  ql2xintrdelaytimer);)
-                       printk(KERN_INFO "%s ZIO enabled:intr_timer_delay=%d\n",
-                                       __func__,ql2xintrdelaytimer);
-                       ha->flags.process_response_queue = 1;
-               }
- #endif
--
-               ha->qfull_retry_count = qfull_retry_count;
-               ha->qfull_retry_delay = qfull_retry_delay;
-@@ -8648,6 +8252,7 @@ qla2x00_nvram_request(scsi_qla_host_t *h
-       /* Deselect chip. */
-       WRT_REG_WORD(&reg->nvram, NV_DESELECT);
-+      CACHE_FLUSH(&reg->nvram);
-       /* qla2x00_nv_delay(ha); */
-       NVRAM_DELAY();
-@@ -8660,13 +8265,15 @@ qla2x00_nv_write(scsi_qla_host_t *ha, ui
-       device_reg_t *reg = ha->iobase;
-       WRT_REG_WORD(&reg->nvram, data | NV_SELECT);
-+      CACHE_FLUSH(&reg->nvram);
-       NVRAM_DELAY();
--      /* qla2x00_nv_delay(ha); */
-+
-       WRT_REG_WORD(&reg->nvram, data | NV_SELECT | NV_CLOCK);
--      /* qla2x00_nv_delay(ha); */
-+      CACHE_FLUSH(&reg->nvram);
-       NVRAM_DELAY();
-+
-       WRT_REG_WORD(&reg->nvram, data | NV_SELECT);
--      /* qla2x00_nv_delay(ha); */
-+      CACHE_FLUSH(&reg->nvram);
-       NVRAM_DELAY();
- }
-@@ -8676,6 +8283,7 @@ qla2x00_nv_deselect(scsi_qla_host_t *ha)
-       device_reg_t *reg = ha->iobase;
-       WRT_REG_WORD(&reg->nvram, NV_DESELECT);
-+      CACHE_FLUSH(&reg->nvram);
-       NVRAM_DELAY();
- }
-@@ -8696,16 +8304,8 @@ qla2x00_poll(scsi_qla_host_t *ha)
-       ENTER(__func__);
--#ifdef __VMWARE__
--   /* This function is only called from qla2x00_ms_req_pkt and
--    * qla2x00_req_pkt. Since these functions drop the hardware
--    * lock and we immediately regrab it here, we drop releasing
--    * it there and drop grabbing it here. -- Thor
--    */
--#else
-       /* Acquire interrupt specific lock */
-       spin_lock_irqsave(&ha->hardware_lock, flags);
--#endif
-       /* Check for pending interrupts. */
- #if defined(ISP2100) || defined(ISP2200)
-@@ -8713,7 +8313,7 @@ qla2x00_poll(scsi_qla_host_t *ha)
-       if (data & RISC_INT)
-               qla2x00_isr(ha, data, &discard);
- #else
--      if (ha->device_id == QLA2312_DEVICE_ID) {
-+      if (check_all_device_ids(ha)) {
-               data = RD_REG_WORD(&reg->istatus);
-               if (data & RISC_INT) {
-                       data = RD_REG_WORD(&reg->host_status_lo);
-@@ -8726,22 +8326,11 @@ qla2x00_poll(scsi_qla_host_t *ha)
-                       qla2x00_isr(ha, data, &discard);
-       }
- #endif
--#ifdef __VMWARE__
--   /* Again, we do not grab and release this lock since the caller
--    * already has this lock. The effect is that tasklet_schedule below
--    * is called with interrupts disabled, which is fine. -- Thor
--    */
--#else
-       /* Release interrupt specific lock */
-       spin_unlock_irqrestore(&ha->hardware_lock, flags);
--#endif
-       if (!list_empty(&ha->done_queue))
--#if QLA2X_PERFORMANCE
--              tasklet_schedule(&ha->run_qla_task);
--#else
-               qla2x00_done(ha);
--#endif
-       LEAVE(__func__);
- }
-@@ -8756,7 +8345,7 @@ qla2x00_poll(scsi_qla_host_t *ha)
- * Returns:
- *      0 = success
- */
--static int
-+int
- qla2x00_restart_isp(scsi_qla_host_t *ha)
- {
-       uint8_t         status = 0;
-@@ -8783,7 +8372,7 @@ qla2x00_restart_isp(scsi_qla_host_t *ha)
-                       spin_lock_irqsave(&ha->hardware_lock, flags);
-                       /* Enable proper parity */
--                      if (ha->device_id == QLA2312_DEVICE_ID)
-+                      if (check_all_device_ids(ha))       
-                               /* SRAM, Instruction RAM and GP RAM parity */
-                               WRT_REG_WORD(&reg->host_cmd,
-                                   (HC_ENABLE_PARITY + 0x7));
-@@ -8841,9 +8430,6 @@ qla2x00_abort_isp(scsi_qla_host_t *ha)
-       uint16_t       cnt;
-       srb_t          *sp;
-       uint8_t        status = 0;
--#ifdef PERF_MONITORING
--      os_lun_t        *lq;
--#endif
-       ENTER("qla2x00_abort_isp");
-@@ -8861,8 +8447,8 @@ qla2x00_abort_isp(scsi_qla_host_t *ha)
-                       ha->host_no,ha);
-               qla2x00_reset_chip(ha);
--              if (ha->loop_state != LOOP_DOWN) {
--                      ha->loop_state = LOOP_DOWN;
-+              if (atomic_read(&ha->loop_state) != LOOP_DOWN) {
-+                      atomic_set(&ha->loop_state, LOOP_DOWN);
-                       atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
-                       qla2x00_mark_all_devices_lost(ha);
-               }
-@@ -8890,13 +8476,6 @@ qla2x00_abort_isp(scsi_qla_host_t *ha)
-                                       ha->actthreads--;
-                               sp->lun_queue->out_cnt--;
-                               ha->iocb_cnt -= sp->iocb_cnt;
--#ifdef PERF_MONITORING
--                              /* update stats */
--                              lq = sp->lun_queue;
--                              lq->resp_time += jiffies - sp->u_start; 
--                              lq->act_time += jiffies - sp->r_start;  
--#endif
--                              
-                               sp->flags = 0;
-                               /* 
-@@ -9005,47 +8584,6 @@ qla2x00_abort_isp(scsi_qla_host_t *ha)
- }
- /*
--* qla2x00_init_fc_db
--*      Initializes Fibre Channel Device Database.
--*
--* Input:
--*      ha = adapter block pointer.
--*
--* Output:
--*      ha->fc_db = initialized
--*/
--STATIC void
--qla2x00_init_fc_db(scsi_qla_host_t *ha)
--{
--      uint16_t cnt;
--
--      ENTER(__func__);
--
--      /* Initialize fc database if it is not initialized. */
--      if (!ha->fc_db[0].loop_id && !ha->fc_db[1].loop_id) {
--              ha->flags.updated_fc_db = FALSE;
--
--              /* Initialize target database. */
--              for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
--                      ha->fc_db[cnt].name[0] = 0L;
--                      ha->fc_db[cnt].name[1] = 0L;
--                      ha->fc_db[cnt].loop_id = PORT_UNUSED;
--                      ha->fc_db[cnt].port_login_retry_count =
--                              ha->port_down_retry_count * PORT_RETRY_TIME;
--                      ha->fc_db[cnt].flag = 0;   /* v2.19.5b3 */
--              }
--
--#if USE_FLASH_DATABASE
--              /* Move flash database to driver database. */
--              qla2x00_get_database(ha);
--#endif
--      }
--
--      LEAVE(__func__);
--}
--
--
--/*
- * qla2x00_init_tgt_map
- *      Initializes target map.
- *
-@@ -9069,6 +8607,35 @@ qla2x00_init_tgt_map(scsi_qla_host_t *ha
- }
-+/**
-+ * qla2x00_alloc_fcport() - Allocate a generic fcport.
-+ * @ha: HA context
-+ * @flags: allocation flags
-+ *
-+ * Returns a pointer to the allocated fcport, or NULL, if none available.
-+ */
-+STATIC fc_port_t *
-+qla2x00_alloc_fcport(scsi_qla_host_t *ha, int flags)
-+{
-+      fc_port_t *fcport;
-+
-+      fcport = kmalloc(sizeof(fc_port_t), flags);
-+      if (fcport == NULL)
-+              return (fcport);
-+
-+      /* Setup fcport template structure. */
-+      memset(fcport, 0, sizeof (fc_port_t));
-+      fcport->ha = ha;
-+      fcport->port_type = FCT_UNKNOWN;
-+      fcport->loop_id = FC_NO_LOOP_ID;
-+      atomic_set(&fcport->state, FC_DEVICE_DEAD);
-+      fcport->flags = FC_SUPPORT_RPT_LUNS;
-+      INIT_LIST_HEAD(&fcport->fcluns);
-+
-+      return (fcport);
-+}
-+
-+
- /*
- * qla2x00_reset_adapter
- *      Reset adapter.
-@@ -9128,35 +8695,12 @@ qla2x00_loop_reset(scsi_qla_host_t *ha)
-                               continue;
-                       status = qla2x00_target_reset(ha, 0, t);
--#ifndef __VMWARE__NO_BUG_FIX
--                      /* Ignore error from qla2x00_target_reset(),
--                       * because it is always returning an error in the
--                       * multipath driver. */
--#else
--                      if (status != QL_STATUS_SUCCESS) {
--                              break;
--                      }
--#endif
-               }
-       }
--      if (
--
--#ifdef __VMWARE__NO_BUG_FIX
--              status == QL_STATUS_SUCCESS &&
--#else
--   /* Do not look at status, since it may very well be the result of
--    * the last target reset and will not tell whether the lip_reset
--    * was completed successfully!!!
--    */
--#endif
--              ((!ha->flags.enable_target_reset && 
--                !ha->flags.enable_lip_reset) ||
--              ha->flags.enable_lip_full_login)) {
-+      if ((!ha->flags.enable_target_reset && !ha->flags.enable_lip_reset) ||
-+              ha->flags.enable_lip_full_login) {
--#ifdef __VMWARE__
--        printk("Doing full login LIP\n");
--#endif
-               status = qla2x00_full_login_lip(ha);
-       }
-@@ -9240,7 +8784,11 @@ __qla2x00_marker(scsi_qla_host_t *ha, ui
-       if (type != MK_SYNC_ALL) {
-               pkt->lun = cpu_to_le16(lun);
--              pkt->target = (uint8_t)loop_id;
-+#if defined(EXTENDED_IDS)
-+                pkt->target = cpu_to_le16(loop_id);
-+#else
-+                pkt->target = (uint8_t)loop_id;
-+#endif
-       }
-       /* Issue command to ISP */
-@@ -9416,7 +8964,6 @@ qla2x00_64bit_start_scsi(srb_t *sp)
-       uint32_t        timeout;
-       device_reg_t    *reg;
--      uint16_t        reg_flushed;
-       ENTER(__func__);
-@@ -9440,6 +8987,7 @@ qla2x00_64bit_start_scsi(srb_t *sp)
-               ha->marker_needed = 0;
-       }
-+
-       /* Acquire ring specific lock */
-       spin_lock_irqsave(&ha->hardware_lock, flags);
-@@ -9502,7 +9050,11 @@ qla2x00_64bit_start_scsi(srb_t *sp)
-       cur_dsd = (uint32_t *)&cmd_pkt->dseg_0_address;
-       /* Set target ID */
--      cmd_pkt->target = (uint8_t)fclun->fcport->loop_id;
-+#if defined(EXTENDED_IDS)
-+        cmd_pkt->target = cpu_to_le16(fclun->fcport->loop_id);
-+#else
-+        cmd_pkt->target = (uint8_t)fclun->fcport->loop_id;
-+#endif
-       /* Set LUN number*/
- #if VSA
-@@ -9561,8 +9113,8 @@ qla2x00_64bit_start_scsi(srb_t *sp)
-       cmd_pkt->byte_count = cpu_to_le32((uint32_t)cmd->request_bufflen);
--      if (cmd->request_bufflen == 0 || 
--              cmd->sc_data_direction == SCSI_DATA_NONE) {
-+      if (cmd->request_bufflen == 0 ||
-+          cmd->sc_data_direction == SCSI_DATA_NONE) {
-               /* No data transfer */
-               cmd_pkt->byte_count = __constant_cpu_to_le32(0);
-               DEBUG5(printk("%s(): No data, command packet data - "
-@@ -9573,50 +9125,7 @@ qla2x00_64bit_start_scsi(srb_t *sp)
-                               (uint32_t)SCSI_LUN_32(cmd));)
-               DEBUG5(qla2x00_dump_buffer((uint8_t *)cmd_pkt,
-                                               REQUEST_ENTRY_SIZE);)
--      }
--      else {
--#if defined(SANE_USAGE_OF_CMD_DIRECTION)
--              /* Set transfer direction */
--#ifndef __VMWARE__
--              if (cmd->sc_data_direction == SCSI_DATA_WRITE) {
--                      cmd_pkt->control_flags |=
--                          __constant_cpu_to_le16(CF_WRITE);
--              } else if (cmd->sc_data_direction == SCSI_DATA_READ) {
--                      cmd_pkt->control_flags |=
--                          __constant_cpu_to_le16(CF_READ);
--              } else
--#else
--              /* Always set the data direction here, since the vmkernel
--               * does not do it for us (otherwise it will hold a default
--               * value of zero, which means SCSI_DATA_WRITE)
--               */
--              if (1)
--#endif //__VMWARE__
--              {
--                      switch (cmd->data_cmnd[0]) {
--                              case FORMAT_UNIT:
--                              case WRITE_6:
--                              case MODE_SELECT:
--                              case SEND_DIAGNOSTIC:
--                              case WRITE_10:
--                              case WRITE_BUFFER:
--                              case WRITE_LONG:
--                              case WRITE_SAME:
--                              case MODE_SELECT_10:
--                              case WRITE_12:
--                              case WRITE_VERIFY:
--                              case WRITE_VERIFY_12:
--                              case SEND_VOLUME_TAG:
--                                      cmd_pkt->control_flags |=
--                                         __constant_cpu_to_le16(CF_WRITE);
--                                      break;
--                              default:
--                                      cmd_pkt->control_flags |=
--                                         __constant_cpu_to_le16(CF_READ);
--                                      break;
--                      }
--              }
--#else
-+      } else {
-               switch (cmd->data_cmnd[0]) {
-                       case FORMAT_UNIT:
-                       case WRITE_6:
-@@ -9635,20 +9144,15 @@ qla2x00_64bit_start_scsi(srb_t *sp)
-                                       __constant_cpu_to_le16(CF_WRITE);
-                               break;
-                       default:
--#ifdef __VMWARE__
--                              cmd_pkt->control_flags |=
--                                         __constant_cpu_to_le16(CF_READ);
--#else
-                               if (cmd->sc_data_direction == SCSI_DATA_WRITE)
-                                       cmd_pkt->control_flags |=
-                                          __constant_cpu_to_le16(CF_WRITE);
-                               else
-                                       cmd_pkt->control_flags |=
-                                          __constant_cpu_to_le16(CF_READ);
--#endif //__VMWARE__
-                               break;
-               }
--#endif
-+
-               sp->dir = cmd_pkt->control_flags &
-                                 __constant_cpu_to_le16(CF_READ | CF_WRITE);
-@@ -9659,15 +9163,8 @@ qla2x00_64bit_start_scsi(srb_t *sp)
-                       int     nseg;
-                       cur_seg = (struct scatterlist *)cmd->request_buffer;
--#ifdef __VMWARE__
--                      /*
--                      * The dma addresses in sg have already been set up.
--                      */
--                      nseg = cmd->use_sg;
--#else
-                       nseg = pci_map_sg(ha->pdev, cur_seg, cmd->use_sg,
-                               scsi_to_pci_dma_dir(cmd->sc_data_direction));
--#endif
-                       end_seg = cur_seg + nseg;
-                       while (cur_seg < end_seg) {
-@@ -9706,15 +9203,8 @@ qla2x00_64bit_start_scsi(srb_t *sp)
-                                               &nml_dma, &nml_len);
-                               /* One entry always consumed */
--                              *cur_dsd++ = cpu_to_le32(
--                                      pci_dma_lo32(sle_dma));
--                              *cur_dsd++ = cpu_to_le32(
--                                      pci_dma_hi32(sle_dma));
--#ifdef PERF_MONITORING
--                              if ( pci_dma_hi32(sle_dma) != 0L) {
--                                      qla2x00_stats.highmem_io++;
--                              }
--#endif
-+                              *cur_dsd++ = cpu_to_le32(LSD(sle_dma));
-+                              *cur_dsd++ = cpu_to_le32(MSD(sle_dma));
-                               *cur_dsd++ = cpu_to_le32(sle_len);
-                               tot_dsds++;
-                               avail_dsds--;
-@@ -9746,10 +9236,8 @@ qla2x00_64bit_start_scsi(srb_t *sp)
-                                               avail_dsds = 5;
-                                       }
--                                      *cur_dsd++ = cpu_to_le32(
--                                                      pci_dma_lo32(nml_dma));
--                                      *cur_dsd++ = cpu_to_le32(
--                                                      pci_dma_hi32(nml_dma));
-+                                      *cur_dsd++ = cpu_to_le32(LSD(nml_dma));
-+                                      *cur_dsd++ = cpu_to_le32(MSD(nml_dma));
-                                       *cur_dsd++ = cpu_to_le32(nml_len);
-                                       tot_dsds++;
-                                       avail_dsds--;
-@@ -9771,12 +9259,6 @@ qla2x00_64bit_start_scsi(srb_t *sp)
-                       uint32_t        nml_len;
-                       uint32_t        normalized;
--#ifdef __VMWARE__
--                      /*
--                      * We already have the machine address.
--                      */
--                      req_dma = (unsigned long)cmd->request_buffer;
--#else
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13)
-                       struct page *page = virt_to_page(cmd->request_buffer);
-                       unsigned long offset = ((unsigned long)
-@@ -9796,7 +9278,6 @@ qla2x00_64bit_start_scsi(srb_t *sp)
-                                       scsi_to_pci_dma_dir(
-                                               cmd->sc_data_direction));
- #endif
--#endif
-                       req_len = cmd->request_bufflen;
-                       sp->saved_dma_handle = req_dma;
-@@ -9806,23 +9287,14 @@ qla2x00_64bit_start_scsi(srb_t *sp)
-                                       &nml_dma, &nml_len);
-                       /* One entry always consumed */
--                      *cur_dsd++ = cpu_to_le32(
--                              pci_dma_lo32(req_dma));
--                      *cur_dsd++ = cpu_to_le32(
--                              pci_dma_hi32(req_dma));
-+                      *cur_dsd++ = cpu_to_le32(LSD(req_dma));
-+                      *cur_dsd++ = cpu_to_le32(MSD(req_dma));
-                       *cur_dsd++ = cpu_to_le32(req_len);
-                       tot_dsds++;
--#ifdef PERF_MONITORING
--                      if ( pci_dma_hi32(req_dma) != 0L) {
--                              qla2x00_stats.highmem_io++;
--                      }
--#endif
-                       if (normalized) {
--                              *cur_dsd++ = cpu_to_le32(
--                                              pci_dma_lo32(nml_dma));
--                              *cur_dsd++ = cpu_to_le32(
--                                              pci_dma_hi32(nml_dma));
-+                              *cur_dsd++ = cpu_to_le32(LSD(nml_dma));
-+                              *cur_dsd++ = cpu_to_le32(MSD(nml_dma));
-                               *cur_dsd++ = cpu_to_le32(nml_len);
-                               tot_dsds++;
-                       }
-@@ -9857,6 +9329,16 @@ qla2x00_64bit_start_scsi(srb_t *sp)
-       ha->actthreads++;
-       ha->total_ios++;
-+
-+      if (cmd_pkt->control_flags & __constant_cpu_to_le16(CF_WRITE) &&
-+          cmd->request_bufflen != 0) {
-+              ha->total_output_cnt++;
-+      } else if (cmd_pkt->control_flags & __constant_cpu_to_le16(CF_READ)) {
-+              ha->total_input_cnt++;
-+      } else {
-+              ha->total_ctrl_cnt++;
-+      }
-+
-       sp->ha = ha;
-       sp->lun_queue->out_cnt++;
-       sp->flags |= SRB_DMA_VALID;
-@@ -9871,21 +9353,19 @@ qla2x00_64bit_start_scsi(srb_t *sp)
- #endif
- #if defined(ISP2100) || defined(ISP2200)
--      reg_flushed = CACHE_FLUSH(&reg->mailbox4);
-       WRT_REG_WORD(&reg->mailbox4, ha->req_ring_index);
-+      CACHE_FLUSH(&reg->mailbox4);
- #else
--      reg_flushed = CACHE_FLUSH(&reg->req_q_in);
-       WRT_REG_WORD(&reg->req_q_in, ha->req_ring_index);
-+      CACHE_FLUSH(&reg->req_q_in);
- #endif
-       spin_unlock_irqrestore(&ha->hardware_lock, flags);
-       return (0);
- mapped_queuing_error_64:
--#ifndef __VMWARE__
-       pci_unmap_sg(ha->pdev, (struct scatterlist *)cmd->request_buffer,
-               cmd->use_sg, scsi_to_pci_dma_dir(cmd->sc_data_direction));
--#endif
- queuing_error_64:
-       spin_unlock_irqrestore(&ha->hardware_lock, flags);
-@@ -9897,7 +9377,7 @@ queuing_error_64:
- *      The start SCSI is responsible for building request packets on
- *      request ring and modifying ISP input pointer.
- *
--*      The Qlogic firmware interface allows every queue slot to have a SCSI
-+*      The QLogic firmware interface allows every queue slot to have a SCSI
- *      command and up to 4 scatter/gather (SG) entries.  If we need more
- *      than 4 SG entries, then continuation entries are used that can
- *      hold another 7 entries each.  The start routine determines if there
-@@ -9937,7 +9417,6 @@ qla2x00_32bit_start_scsi(srb_t *sp)
-       uint32_t        timeout;
-       device_reg_t    *reg;
--      uint16_t        reg_flushed;
-       ENTER(__func__);
-@@ -10023,7 +9502,11 @@ qla2x00_32bit_start_scsi(srb_t *sp)
-       cur_dsd = (uint32_t *)&cmd_pkt->dseg_0_address;
-       /* Set target ID */
-+#if defined(EXTENDED_IDS)
-+      cmd_pkt->target = cpu_to_le16(fclun->fcport->loop_id);
-+#else
-       cmd_pkt->target = (uint8_t)fclun->fcport->loop_id;
-+#endif
-       /* Set LUN number*/
- #if VSA
-@@ -10094,50 +9577,7 @@ qla2x00_32bit_start_scsi(srb_t *sp)
-                               (uint32_t)SCSI_LUN_32(cmd));)
-               DEBUG5(qla2x00_dump_buffer((uint8_t *)cmd_pkt,
-                                               REQUEST_ENTRY_SIZE);)
--      }
--      else {
--#if defined(SANE_USAGE_OF_CMD_DIRECTION)
--#ifndef __VMWARE__
--              /* Set transfer direction */
--              if (cmd->sc_data_direction == SCSI_DATA_WRITE) {
--                      cmd_pkt->control_flags |=
--                              __constant_cpu_to_le16(CF_WRITE);
--              } else if (cmd->sc_data_direction == SCSI_DATA_READ) {
--                      cmd_pkt->control_flags |=
--                              __constant_cpu_to_le16(CF_READ);
--              } else
--#else
--              /* Always set the data direction here, since the vmkernel
--               * does not do it for us (otherwise it will hold a default
--               * value of zero, which means SCSI_DATA_WRITE)
--               */
--              if (1)
--#endif //__VMWARE__
--              {
--                      switch (cmd->data_cmnd[0]) {
--                              case FORMAT_UNIT:
--                              case WRITE_6:
--                              case MODE_SELECT:
--                              case SEND_DIAGNOSTIC:
--                              case WRITE_10:
--                              case WRITE_BUFFER:
--                              case WRITE_LONG:
--                              case WRITE_SAME:
--                              case MODE_SELECT_10:
--                              case WRITE_12:
--                              case WRITE_VERIFY:
--                              case WRITE_VERIFY_12:
--                              case SEND_VOLUME_TAG:
--                                      cmd_pkt->control_flags |=
--                                         __constant_cpu_to_le16(CF_WRITE);
--                                      break;
--                              default:
--                                      cmd_pkt->control_flags |=
--                                         __constant_cpu_to_le16(CF_READ);
--                                      break;
--                      }
--              }
--#else
-+      } else {
-               switch (cmd->data_cmnd[0]) {
-                       case FORMAT_UNIT:
-                       case WRITE_6:
-@@ -10156,20 +9596,14 @@ qla2x00_32bit_start_scsi(srb_t *sp)
-                                       __constant_cpu_to_le16(CF_WRITE);
-                               break;
-                       default:
--#ifdef __VMWARE__
--                              cmd_pkt->control_flags |=
--                                         __constant_cpu_to_le16(CF_READ);
--#else
-                               if (cmd->sc_data_direction == SCSI_DATA_WRITE)
-                                       cmd_pkt->control_flags |=
-                                          __constant_cpu_to_le16(CF_WRITE);
-                               else
-                                       cmd_pkt->control_flags |=
-                                          __constant_cpu_to_le16(CF_READ);
--#endif //__VMWARE__
-                               break;
-               }
--#endif
-               sp->dir = cmd_pkt->control_flags &
-                                 __constant_cpu_to_le16(CF_READ | CF_WRITE);
-@@ -10180,21 +9614,11 @@ qla2x00_32bit_start_scsi(srb_t *sp)
-                       int     nseg;
-                       cur_seg = (struct scatterlist *)cmd->request_buffer;
--#ifdef __VMWARE__
--                      /*
--                       * The dma addresses in sg have already been set up.
--                       */
--                      nseg = cmd->use_sg;
--#else
-                       nseg = pci_map_sg(ha->pdev, cur_seg, cmd->use_sg,
-                               scsi_to_pci_dma_dir(cmd->sc_data_direction));
--#endif
-                       end_seg = cur_seg + nseg;
-                       while (cur_seg < end_seg) {
--                              dma_addr_t      sle_dma;
--                              uint32_t        sle_len;
--
-                               /* Allocate additional continuation packets? */
-                               if (avail_dsds == 0) {
-                                       tot_iocbs++;
-@@ -10216,13 +9640,10 @@ qla2x00_32bit_start_scsi(srb_t *sp)
-                                       avail_dsds = 7;
-                               }
--                              sle_dma = sg_dma_address(cur_seg);
--                              sle_len = sg_dma_len(cur_seg);
--
-                               /* One entry always consumed */
--                              *cur_dsd++ = cpu_to_le32(
--                                      pci_dma_lo32(sle_dma));
--                              *cur_dsd++ = cpu_to_le32(sle_len);
-+                              *cur_dsd++ =
-+                                  cpu_to_le32(sg_dma_address(cur_seg));
-+                              *cur_dsd++ = cpu_to_le32(sg_dma_len(cur_seg));
-                               tot_dsds++;
-                               avail_dsds--;
-@@ -10235,14 +9656,7 @@ qla2x00_32bit_start_scsi(srb_t *sp)
-                        * of request.
-                        */
-                       dma_addr_t      req_dma;
--                      uint32_t        req_len;
--#ifdef __VMWARE__
--                      /*
--                       * We already have the machine address.
--                       */
--                      req_dma = (unsigned long)cmd->request_buffer;
--#else
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13)
-                       struct page *page = virt_to_page(cmd->request_buffer);
-                       unsigned long offset = ((unsigned long)
-@@ -10262,15 +9676,11 @@ qla2x00_32bit_start_scsi(srb_t *sp)
-                                       scsi_to_pci_dma_dir(
-                                               cmd->sc_data_direction));
- #endif
--#endif
--                      req_len = cmd->request_bufflen;
--
-                       sp->saved_dma_handle = req_dma;
-                       /* One entry always consumed */
--                      *cur_dsd++ = cpu_to_le32(
--                              pci_dma_lo32(req_dma));
--                      *cur_dsd++ = cpu_to_le32(req_len);
-+                      *cur_dsd++ = cpu_to_le32(req_dma);
-+                      *cur_dsd++ = cpu_to_le32(cmd->request_bufflen);
-                       tot_dsds++;
-               }
-       }
-@@ -10302,6 +9712,16 @@ qla2x00_32bit_start_scsi(srb_t *sp)
-       ha->actthreads++;
-       ha->total_ios++;
-+
-+      if (cmd_pkt->control_flags & __constant_cpu_to_le16(CF_WRITE) &&
-+          cmd->request_bufflen != 0) {
-+              ha->total_output_cnt++;
-+      } else if (cmd_pkt->control_flags & __constant_cpu_to_le16(CF_READ)) {
-+              ha->total_input_cnt++;
-+      } else {
-+              ha->total_ctrl_cnt++;
-+      }
-+
-       sp->ha = ha;
-       sp->lun_queue->out_cnt++;
-       sp->flags |= SRB_DMA_VALID;
-@@ -10316,21 +9736,19 @@ qla2x00_32bit_start_scsi(srb_t *sp)
- #endif
- #if defined(ISP2100) || defined(ISP2200)
--      reg_flushed = CACHE_FLUSH(&reg->mailbox4);
-       WRT_REG_WORD(&reg->mailbox4, ha->req_ring_index);
-+      CACHE_FLUSH(&reg->mailbox4);
- #else
--      reg_flushed = CACHE_FLUSH(&reg->req_q_in);
-       WRT_REG_WORD(&reg->req_q_in, ha->req_ring_index);
-+      CACHE_FLUSH(&reg->req_q_in);
- #endif
-       spin_unlock_irqrestore(&ha->hardware_lock, flags);
-       return (0);
- mapped_queuing_error_32:
--#ifndef __VMWARE__
-       pci_unmap_sg(ha->pdev, (struct scatterlist *)cmd->request_buffer,
-               cmd->use_sg, scsi_to_pci_dma_dir(cmd->sc_data_direction));
--#endif
- queuing_error_32:
-       spin_unlock_irqrestore(&ha->hardware_lock, flags);
-@@ -10428,16 +9846,6 @@ qla2x00_ms_req_pkt(scsi_qla_host_t *ha, 
-                       break;
-               }
--#ifdef __VMWARE__
--              /* The qla2x00_poll function is only called from here and
--               * from qla2x00_req_pkt (in a similar way). Since
--               * qla2x00_poll will immediately regrab the hardware lock,
--               * we drop releasing it here and drop grabbing it in the
--               * poll function. -- Thor
--               */
--              udelay(20);
--              qla2x00_poll(ha);
--#else
-               /* Release ring specific lock */
-               spin_unlock(&ha->hardware_lock);
-               udelay(20);
-@@ -10445,7 +9853,6 @@ qla2x00_ms_req_pkt(scsi_qla_host_t *ha, 
-               /* Check for pending interrupts. */
-               qla2x00_poll(ha);
-               spin_lock_irq(&ha->hardware_lock);
--#endif
-       }
- #if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_3)
-@@ -10517,17 +9924,6 @@ qla2x00_req_pkt(scsi_qla_host_t *ha)
-                       break;
-               }
--#ifdef __VMWARE__
--              /* The qla2x00_poll function is only called from here and
--               * from qla2x00_ms_req_pkt (in a similar way). Since
--               * qla2x00_poll will immediately regrab the hardware lock,
--               * we drop releasing it here and drop grabbing it in the
--               * poll function. -- Thor
--               */
--              udelay(2);
--              if (!ha->marker_needed)
--                      qla2x00_poll(ha);
--#else
-               /* Release ring specific lock */
-               spin_unlock(&ha->hardware_lock);
-@@ -10539,7 +9935,6 @@ qla2x00_req_pkt(scsi_qla_host_t *ha)
-                       qla2x00_poll(ha);
-               spin_lock_irq(&ha->hardware_lock);
--#endif
-       }
- #if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_3)
-@@ -10582,8 +9977,10 @@ qla2x00_isp_cmd(scsi_qla_host_t *ha)
-       /* Set chip new ring index. */
- #if defined(ISP2100) || defined(ISP2200)
-       WRT_REG_WORD(&reg->mailbox4, ha->req_ring_index);
-+      CACHE_FLUSH(&reg->mailbox4);
- #else
-       WRT_REG_WORD(&reg->req_q_in, ha->req_ring_index);
-+      CACHE_FLUSH(&reg->req_q_in);
- #endif
-       LEAVE(__func__);
-@@ -10644,9 +10041,6 @@ qla2x00_process_good_request(struct scsi
- {
-       srb_t *sp;
-       struct scsi_qla_host *vis_ha;
--#ifdef PERF_MONITORING
--      os_lun_t        *lq;
--#endif
-       ENTER(__func__);
-@@ -10673,13 +10067,6 @@ qla2x00_process_good_request(struct scsi
-               CMD_COMPL_STATUS(sp->cmd) = 0L;
-               CMD_SCSI_STATUS(sp->cmd) = 0L;
--#ifdef PERF_MONITORING
--              /* update stats */
--              lq = sp->lun_queue;
--              lq->resp_time += jiffies - sp->u_start; 
--              lq->act_time += jiffies - sp->r_start;  
--#endif
--
-               /* Save ISP completion status */
-               CMD_RESULT(sp->cmd) = DID_OK << 16;
-               sp->fo_retry_cnt = 0;
-@@ -10791,7 +10178,7 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
- #if defined(ISP2100) || defined(ISP2200)
-       uint16_t     response_index = RESPONSE_ENTRY_CNT;
- #endif
--#if defined(ISP2300)
-+#if defined(ISP2300) 
-       uint16_t     temp2;
-       uint8_t      mailbox_int;
-       uint16_t     hccr;
-@@ -10823,6 +10210,7 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                * get out of the RISC PAUSED state.
-                */
-               WRT_REG_WORD(&reg->host_cmd, HC_RESET_RISC);
-+              CACHE_FLUSH(&reg->host_cmd);
-               set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
-       }
- #endif
-@@ -10852,6 +10240,7 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                       break;
-               case RESPONSE_QUEUE_INT:
-                       WRT_REG_WORD(&reg->host_cmd, HC_CLR_RISC_INT);
-+                      CACHE_FLUSH(&reg->host_cmd);
-                       goto response_queue_int;
-                       break;
-@@ -10922,7 +10311,8 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                  if (!(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)))
-                  QLA_MBX_REG_LOCK(ha);
-                */
--              if (temp1 == MBA_SCSI_COMPLETION) {
-+              if (( temp1 == MBA_SCSI_COMPLETION) ||
-+                      ((temp1 >= RIO_MBS_CMD_CMP_1_16) && (temp1 <= RIO_MBS_CMD_CMP_5_16))) {
- #if defined(ISP2100) || defined(ISP2200)
-                       mailbox[1] = RD_REG_WORD(&reg->mailbox1);
- #else
-@@ -10930,6 +10320,10 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
- #endif
-                       mailbox[2] = RD_REG_WORD(&reg->mailbox2);
-+                      mailbox[3] = RD_REG_WORD(&reg->mailbox3);
-+                      mailbox[5] = RD_REG_WORD(&reg->mailbox5);
-+                      mailbox[6] = RD_REG_WORD(&reg->mailbox6);
-+                      mailbox[7] = RD_REG_WORD(&reg->mailbox7);
-               } else {
-                       MBOX_TRACE(ha,BIT_4);
-                       mailbox[0] = temp1;
-@@ -10960,6 +10354,7 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-               /* Release mailbox registers. */
-               WRT_REG_WORD(&reg->semaphore, 0);
-               WRT_REG_WORD(&reg->host_cmd, HC_CLR_RISC_INT);
-+              CACHE_FLUSH(&reg->host_cmd);
-               DEBUG5(printk("%s(): mailbox interrupt mailbox[0] = %x.\n",
-                               __func__,
-@@ -10968,12 +10363,10 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-               /* Handle asynchronous event */
-               switch (temp1) {
--#if  defined(ISP2300)
-                       case MBA_ZIO_UPDATE:
-                               DEBUG5(printk("%s ZIO update completion\n",
-                                                       __func__);)
-                               break;
--#endif
-                       case MBA_SCSI_COMPLETION:       /* Completion */
-                               
-                               DEBUG5(printk("%s(): mailbox response "
-@@ -10984,12 +10377,73 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                                       break;
-                               /* Get outstanding command index  */
--                              index = (uint32_t)
--                                              (mailbox[2] << 16 | mailbox[1]);
-+                              index = le32_to_cpu(((uint32_t)(mailbox[2] << 16)) | mailbox[1]);
-+
-                               qla2x00_process_good_request(ha,
-                                               index, MBA_SCSI_COMPLETION);
-                               break;
-+                      case RIO_MBS_CMD_CMP_1_16:      /* Mitigated Response completion */
-+                              DEBUG5(printk("qla2100_isr: mailbox response completion\n"));
-+                              if (ha->flags.online) {
-+                                      /* Get outstanding command index. */
-+                                      index = (uint32_t) (mailbox[1]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_1_16);
-+                              }
-+                              break;
-+                      case RIO_MBS_CMD_CMP_2_16:      /* Mitigated Response completion */
-+                              DEBUG5(printk("qla2100_isr: mailbox response completion\n"));
-+                              if (ha->flags.online) {
-+                                      /* Get outstanding command index. */
-+                                      index = (uint32_t) (mailbox[1]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_2_16);
-+                                      index = (uint32_t) (mailbox[2]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_2_16);
-+                              }
-+                              break;
-+                      case RIO_MBS_CMD_CMP_3_16:      /* Mitigated Response completion */
-+                              DEBUG5(printk("qla2100_isr: mailbox response completion\n"));
-+                              if (ha->flags.online) {
-+                                      /* Get outstanding command index. */
-+                                      index = (uint32_t) (mailbox[1]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_3_16);
-+                                      index = (uint32_t) (mailbox[2]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_3_16);
-+                                      index = (uint32_t) (mailbox[3]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_3_16);
-+                              }
-+                              break;
-+                      case RIO_MBS_CMD_CMP_4_16:      /* Mitigated Response completion */
-+                              DEBUG5(printk("qla2100_isr: mailbox response completion\n"));
-+                              if (ha->flags.online) {
-+                                      /* Get outstanding command index. */
-+                                      index = (uint32_t) (mailbox[1]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_4_16);
-+                                      index = (uint32_t) (mailbox[2]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_4_16);
-+                                      index = (uint32_t) (mailbox[3]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_4_16);
-+                                      index = (uint32_t) (mailbox[6]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_4_16);
-+                              }
-+                              break;
-+                      case RIO_MBS_CMD_CMP_5_16:      /* Mitigated Response completion */
-+                              DEBUG5(printk("qla2100_isr: mailbox response completion\n"));
-+                              if (ha->flags.online) {
-+                                      /* Get outstanding command index. */
-+                                      index = (uint32_t) (mailbox[1]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_5_16);
-+                                      index = (uint32_t) (mailbox[2]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_5_16);
-+                                      index = (uint32_t) (mailbox[3]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_5_16);
-+                                      index = (uint32_t) (mailbox[6]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_5_16);
-+                                      index = (uint32_t) (mailbox[7]);
-+                                      qla2x00_process_good_request(ha, index, RIO_MBS_CMD_CMP_5_16);
-+                              }
-+                              break;
-+                              
-                       case MBA_RESET:                 /* Reset */
-                               DEBUG2(printk(KERN_INFO "scsi(%ld): %s: asynchronous "
-@@ -11061,8 +10515,8 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                               /* Save LIP sequence. */
-                               ha->lip_seq = mailbox[1];
--                              if (ha->loop_state != LOOP_DOWN) {
--                                      ha->loop_state = LOOP_DOWN;
-+                              if (atomic_read(&ha->loop_state) != LOOP_DOWN) {
-+                                      atomic_set(&ha->loop_state, LOOP_DOWN);
-                                       atomic_set(&ha->loop_down_timer,
-                                                       LOOP_DOWN_TIME);
-                                       qla2x00_mark_all_devices_lost(ha);
-@@ -11125,13 +10579,16 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                                               "MBA_LOOP_DOWN.\n",
-                                               ha->host_no, __func__);)
--                              if (ha->loop_state != LOOP_DOWN) {
--                                      ha->loop_state = LOOP_DOWN;
-+                              if (atomic_read(&ha->loop_state) != LOOP_DOWN) {
-+                                      ha->device_flags |= DFLG_NO_CABLE;
-+                                      atomic_set(&ha->loop_state, LOOP_DOWN);
-                                       atomic_set(&ha->loop_down_timer,
--                                                      LOOP_DOWN_TIME);
-+                                          LOOP_DOWN_TIME);
-                                       qla2x00_mark_all_devices_lost(ha);
-                               }
-+                              clear_bit(FDMI_REGISTER_NEEDED, &ha->fdmi_flags);
-+
-                               ha->flags.management_server_logged_in = 0;
-                               ha->current_speed = 0; /* reset value */
-@@ -11157,10 +10614,10 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                               set_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
-                               set_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
--                              if( ha->loop_state != LOOP_DOWN ) {
--                                      atomic_set(&ha->loop_down_timer, 
--                                                      LOOP_DOWN_TIME);
--                                      ha->loop_state = LOOP_DOWN;
-+                              if (atomic_read(&ha->loop_state) != LOOP_DOWN) {
-+                                      atomic_set(&ha->loop_state, LOOP_DOWN);
-+                                      atomic_set(&ha->loop_down_timer,
-+                                          LOOP_DOWN_TIME);
-                                       qla2x00_mark_all_devices_lost(ha);
-                               }
-                               ha->operating_mode = LOOP;
-@@ -11202,12 +10659,12 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                               set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags);
- #endif
--                              if (ha->loop_state != LOOP_DOWN) {
-+                              if (atomic_read(&ha->loop_state) != LOOP_DOWN) {
-                                       if (!atomic_read(&ha->loop_down_timer))
-                                               atomic_set(&ha->loop_down_timer,
--                                                              LOOP_DOWN_TIME);
-+                                                  LOOP_DOWN_TIME);
--                                      ha->loop_state = LOOP_DOWN;
-+                                      atomic_set(&ha->loop_state, LOOP_DOWN);
-                                       qla2x00_mark_all_devices_lost(ha);
-                               }
-                               break;
-@@ -11224,9 +10681,9 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                                               "MBA_UPDATE_CONFIG.\n",
-                                               ha->host_no, __func__);)
--                              if (ha->loop_state != LOOP_DOWN) {
-+                              if (atomic_read(&ha->loop_state) != LOOP_DOWN) {
-                                       /* dg - 03/30 */
--                                      ha->loop_state = LOOP_DOWN;  
-+                                      atomic_set(&ha->loop_state, LOOP_DOWN);  
-                                       if (!atomic_read(&ha->loop_down_timer))
-                                               atomic_set(&ha->loop_down_timer,
-                                                               LOOP_DOWN_TIME);
-@@ -11247,7 +10704,7 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                             * to come in.
-                             */
-                               
--                           if (ha->loop_state == LOOP_DOWN) {
-+                           if (atomic_read(&ha->loop_state) == LOOP_DOWN) {
-                               printk(KERN_INFO "scsi(%ld): Port database "
-                                               "changed.\n",
-                                               ha->host_no);
-@@ -11256,6 +10713,8 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                                               "MBA_PORT_UPDATE.\n",
-                                               ha->host_no, __func__);)
-+                              set_bit(FDMI_REGISTER_NEEDED, &ha->fdmi_flags);
-+
-                               /* dg - 06/19/01
-                                *
-                                * Mark all devices as missing so we will
-@@ -11264,7 +10723,7 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                               ha->flags.rscn_queue_overflow = 1;
-                               atomic_set(&ha->loop_down_timer, 0);
--                              ha->loop_state = LOOP_UP;
-+                              atomic_set(&ha->loop_state, LOOP_UP);
-                               qla2x00_mark_all_devices_lost(ha);
-                               set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
-                               set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
-@@ -11273,7 +10732,7 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                                *
-                                * ha->flags.loop_resync_needed = TRUE;
-                                */
--                              ha->loop_state = LOOP_UPDATE;
-+                              atomic_set(&ha->loop_state, LOOP_UPDATE);
-                               if (ha->ioctl->flags &
-                                               IOCTL_AEN_TRACKING_ENABLE) {
-                                       /* Update AEN queue. */
-@@ -11295,10 +10754,11 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                                               ha->host_no,
-                                               mailbox[1],
-                                               mailbox[2]);)
--
--                              DEBUG3(printk("scsi%ld %s: asynchronous "
--                                              "MBA_RSCR_UPDATE.\n",
--                                              ha->host_no, __func__);)
-+                              printk(KERN_INFO "scsi(%ld): RSCN database changed "
-+                                              "-0x%x,0x%x.\n",
-+                                              ha->host_no,
-+                                              mailbox[1],
-+                                              mailbox[2]);
-                               rscn_queue_index = ha->rscn_in_ptr + 1;
-                               if (rscn_queue_index == MAX_RSCN_COUNT)
-@@ -11327,13 +10787,12 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                               atomic_set(&ha->loop_down_timer, 0);
-                               ha->flags.management_server_logged_in = 0;
--                              ha->loop_state = LOOP_UPDATE;
-+                              atomic_set(&ha->loop_state, LOOP_UPDATE);
-                               if (ha->ioctl->flags &
--                                              IOCTL_AEN_TRACKING_ENABLE) {
-+                                  IOCTL_AEN_TRACKING_ENABLE) {
-                                       /* Update AEN queue. */
-                                       qla2x00_enqueue_aen(ha,
--                                                      MBA_RSCN_UPDATE,
--                                                      &mailbox[0]);
-+                                          MBA_RSCN_UPDATE, &mailbox[0]);
-                               }
-                               break;
-@@ -11345,6 +10804,7 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                               break;
-+
-                       default:
-                               if (temp1 >= MBA_ASYNC_EVENT)
-@@ -11366,14 +10826,13 @@ qla2x00_isr(scsi_qla_host_t *ha, uint16_
-                                                       "ERROR.\n",
-                                                       __func__);)
-                               }
--                              DEBUG5(printk("%s(): Returning mailbox data\n",
-+                              DEBUG3(printk("%s(): Returning mailbox data\n",
-                                               __func__);)
-                               break;
-               }
-       } else {
-               WRT_REG_WORD(&reg->host_cmd, HC_CLR_RISC_INT);
-       }
--
- #if defined(ISP2300)
- response_queue_int:
- #endif
-@@ -11425,6 +10884,42 @@ qla2x00_rst_aen(scsi_qla_host_t *ha) 
-       LEAVE(__func__);
- }
-+
-+static void qla2x00_handle_RIO_type2_iocb(struct scsi_qla_host * ha, response_t *pkt)
-+{
-+      struct rio_iocb_type2_entry *rio;
-+      int i;
-+      ENTER("qla2x00_handle_RIO_type2_iocb");
-+      
-+      rio = (struct rio_iocb_type2_entry *) pkt;
-+
-+      if (rio->handle_count > 29) {
-+              printk("Invalid packet 22 count: %i \n", rio->handle_count);
-+      }
-+
-+      for (i=0; i < rio->handle_count; i++) 
-+              qla2x00_process_good_request(ha, rio->handle[i], 0x22);
-+      LEAVE("qla2x00_handle_RIO_type2_iocb");
-+}
-+
-+static void qla2x00_handle_RIO_type1_iocb(struct scsi_qla_host * ha, response_t *pkt)
-+{
-+      struct rio_iocb_type1_entry *rio;
-+      int i;
-+      ENTER("qla2x00_handle_RIO_type1_iocb");
-+
-+      rio = (struct rio_iocb_type1_entry *) pkt;
-+
-+      if (rio->handle_count > 14) {
-+              printk("Invalid packet 21 count! %i\n", rio->handle_count);
-+      }
-+
-+      for (i=0; i < rio->handle_count; i++) 
-+              qla2x00_process_good_request(ha, rio->handle[i], 0x22);
-+      LEAVE("qla2x00_handle_RIO_type1_iocb");
-+      
-+}
-+
- /*
-  *  qla2x00_process_response_queue
-  *      Processes Response Queue.
-@@ -11443,10 +10938,9 @@ qla2x00_process_response_queue(scsi_qla_
-       while (ha->response_ring_ptr->signature != RESPONSE_PROCESSED ) {
-               pkt = ( sts_entry_t *) ha->response_ring_ptr;
--              DEBUG5(printk("%s(): ha->rsp_ring_index=%ld index=%ld.\n",
-+              DEBUG5(printk("%s(): ha->rsp_ring_index=%ld.\n",
-                               __func__,
--                              (u_long)ha->rsp_ring_index, 
--                              (u_long)index);)
-+                              (u_long)ha->rsp_ring_index));
-               DEBUG5(printk("%s(): response packet data:", __func__);)
-               DEBUG5(qla2x00_dump_buffer((uint8_t *)pkt,
-                               RESPONSE_ENTRY_SIZE);)
-@@ -11473,6 +10967,7 @@ qla2x00_process_response_queue(scsi_qla_
-                                       __func__);)
-                       qla2x00_error_entry(ha, pkt);
-                       ((response_t *)pkt)->signature = RESPONSE_PROCESSED;
-+                      wmb();
-                       continue;
-               }
-@@ -11504,7 +10999,7 @@ qla2x00_process_response_queue(scsi_qla_
-                       case ET_IP_RECEIVE:
-                               /* Handle IP receive packet */
--                              qla2x00_ip_receive(ha, pkt);
-+                              qla2x00_ip_receive(ha, (request_t *)pkt);
-                               break;
-                       case ET_MAILBOX_COMMAND:
-@@ -11514,6 +11009,12 @@ qla2x00_process_response_queue(scsi_qla_
-                                       break;
-                               }       
- #endif  /* FC_IP_SUPPORT */
-+                      case RIO_IOCB_TYPE1:
-+                              qla2x00_handle_RIO_type1_iocb(ha, (response_t*)pkt);
-+                              break;
-+                      case RIO_IOCB_TYPE2:
-+                              qla2x00_handle_RIO_type2_iocb(ha, (response_t*)pkt);
-+                              break;
-                       default:
-                               /* Type Not Supported. */
-@@ -11527,13 +11028,16 @@ qla2x00_process_response_queue(scsi_qla_
-                               break;
-               }
-               ((response_t *)pkt)->signature = RESPONSE_PROCESSED;
-+              wmb();
-       } 
-       /* Adjust ring index -- once, instead of for all entries. */
- #if defined(ISP2100) || defined(ISP2200)
-       WRT_REG_WORD(&reg->mailbox5, ha->rsp_ring_index);
-+      CACHE_FLUSH(&reg->mailbox5);
- #else
-       WRT_REG_WORD(&reg->rsp_q_out, ha->rsp_ring_index);
-+      CACHE_FLUSH(&reg->rsp_q_out);
- #endif
-       LEAVE(__func__);
-@@ -11587,6 +11091,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-       uint8_t         lscsi_status;
-       fc_port_t       *fcport;
-       scsi_qla_host_t *vis_ha;
-+      uint16_t        rsp_info_len;
-       ENTER(__func__);
-@@ -11664,20 +11169,13 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-       tq = sp->tgt_queue;
-       lq = sp->lun_queue;
--#ifdef PERF_MONITORING
--      /* update stats */
--      lq->resp_time += jiffies - sp->u_start; 
--      lq->act_time += jiffies - sp->r_start;  
--#endif
--
-       /*
-        * If loop is in transient state Report DID_BUS_BUSY
-        */
--      if (!(sp->flags & SRB_IOCTL) &&
--              (atomic_read(&ha->loop_down_timer) ||
--               ha->loop_state != LOOP_READY) &&
--              (comp_status != CS_COMPLETE ||
--               scsi_status != 0)) {
-+      if (!(sp->flags & (SRB_IOCTL | SRB_TAPE | SRB_FDMI_CMD)) &&
-+          (atomic_read(&ha->loop_down_timer) ||
-+              atomic_read(&ha->loop_state) != LOOP_READY) &&
-+          (comp_status != CS_COMPLETE || scsi_status != 0)) {
-               DEBUG2(printk(KERN_INFO "scsi(%ld:%d:%d:%d): Loop Not Ready - pid=%lx.\n",
-                               ha->host_no, 
-@@ -11693,6 +11191,24 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-               return;
-       }
-+      /* Check for any FCP transport errors. */
-+      if (scsi_status & SS_RESPONSE_INFO_LEN_VALID) {
-+              rsp_info_len = le16_to_cpu(pkt->rsp_info_len);
-+              if (rsp_info_len > 3 && pkt->rsp_info[3]) {
-+                      DEBUG2(printk("scsi(%ld:%d:%d:%d) FCP I/O protocol "
-+                          "failure (%x/%02x%02x%02x%02x%02x%02x%02x%02x)..."
-+                          "retrying command\n", ha->host_no, b, t, l,
-+                          rsp_info_len, pkt->rsp_info[0], pkt->rsp_info[1],
-+                          pkt->rsp_info[2], pkt->rsp_info[3],
-+                          pkt->rsp_info[4], pkt->rsp_info[5],
-+                          pkt->rsp_info[6], pkt->rsp_info[7]));
-+
-+                      cp->result = DID_BUS_BUSY << 16;
-+                      add_to_done_queue(ha, sp);
-+                      return;
-+              }
-+      }
-+
-       /*
-        * Based on Host and scsi status generate status code for Linux
-        */
-@@ -11705,7 +11221,6 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-                       if (scsi_status == 0) {
-                               CMD_RESULT(cp) = DID_OK << 16;
--#ifndef __VMWARE__
-                               /*
-                                * Special case consideration On an Inquiry
-                                * command (0x12) for Lun 0, device responds
-@@ -11716,7 +11231,6 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-                                */
-                               /* Perform any post command processing */
-                               qla2x00_filter_command(ha, sp);
--#endif
-                       } else {   /* Check for non zero scsi status */
-                               if (lscsi_status == SS_BUSY_CONDITION) {
-                                       CMD_RESULT(cp) = DID_BUS_BUSY << 16 |
-@@ -11761,9 +11275,10 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-                                       if (sp->request_sense_length != 0)
-                                               ha->status_srb = sp;
--                                      if (!(sp->flags & SRB_IOCTL) &&
--                                              qla2x00_check_sense(cp, lq) ==
--                                                      QL_STATUS_SUCCESS) {
-+                                      if (!(sp->flags & (SRB_IOCTL |
-+                                          SRB_TAPE | SRB_FDMI_CMD)) &&
-+                                          qla2x00_check_sense(cp, lq) ==
-+                                          QL_STATUS_SUCCESS) {
-                                               /*
-                                                * Throw away status_cont
-                                                * if any
-@@ -11772,7 +11287,8 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-                                               add_to_scsi_retry_queue(ha, sp);
-                                               return;
-                                       }
--#if defined(QL_DEBUG_LEVEL_5)
-+#if defined(QL_DEBUG_LEVEL_2)
-+                                      if (sense_sz) {
-                                       printk("%s(): Check condition Sense "
-                                               "data, scsi(%ld:%d:%d:%d) "
-                                               "cmd=%p pid=%ld\n",
-@@ -11780,10 +11296,10 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-                                               ha->host_no, 
-                                               b, t, l,
-                                               cp, cp->serial_number);
--                                      if (sense_sz)
-                                               qla2x00_dump_buffer(
-                                                       cp->sense_buffer,
-                                                       CMD_ACTUAL_SNSLEN(cp));
-+                                      }
- #endif
-                               }
-                       }
-@@ -11848,21 +11364,23 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-                                       if (sp->request_sense_length != 0)
-                                               ha->status_srb = sp;
--                                      if (!(sp->flags & SRB_IOCTL) && 
--                                              (qla2x00_check_sense(cp, lq) ==
--                                                      QL_STATUS_SUCCESS)) {
-+                                      if (!(sp->flags & (SRB_IOCTL |
-+                                          SRB_TAPE | SRB_FDMI_CMD)) &&
-+                                          (qla2x00_check_sense(cp, lq) ==
-+                                          QL_STATUS_SUCCESS)) {
-                                               ha->status_srb = NULL;
-                                               add_to_scsi_retry_queue(ha,sp);
-                                               return;
-                                       }
--#if defined(QL_DEBUG_LEVEL_5)
-+#if defined(QL_DEBUG_LEVEL_2)
-+                                      if (sense_sz) {
-                                       printk("scsi: Check condition Sense "
-                                               "data, scsi(%ld:%d:%d:%d)\n",
-                                               ha->host_no, b, t, l);
--                                      if (sense_sz)
-                                               qla2x00_dump_buffer(
-                                                       cp->sense_buffer,
-                                                       CMD_ACTUAL_SNSLEN(cp));
-+                                      }
- #endif
-                               }
-                       } else {
-@@ -11916,7 +11434,6 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-                               /* Everybody online, looking good... */
-                               CMD_RESULT(cp) = DID_OK << 16;
--#ifndef __VMWARE__
-                               /*
-                                * Special case consideration On an Inquiry
-                                * command (0x12) for Lun 0, device responds
-@@ -11927,7 +11444,6 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-                                */
-                               /* Perform any post command processing */
-                               qla2x00_filter_command(ha, sp);
--#endif
-                       }
-                       break;
-@@ -11950,18 +11466,32 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-                                       sp->cmd->serial_number,
-                                       comp_status,
-                                       atomic_read(&fcport->state));)
--                      if ((sp->flags & SRB_IOCTL) ||
--                          (atomic_read(&fcport->state) == FC_DEVICE_DEAD)) {
--                              CMD_RESULT(cp) = DID_NO_CONNECT << 16;
--                              add_to_done_queue(ha, sp);
--                      } else {
-+                      DEBUG2(printk( "scsi(%ld:%2d:%2d): status_entry: "
-+                                      "Port Down pid=%ld, compl "
-+                                      "status=0x%x, port state=0x%x\n",
-+                                      ha->host_no,
-+                                      t, l,
-+                                      sp->cmd->serial_number,
-+                                      comp_status,
-+                                      atomic_read(&fcport->state));)
-+
-+                      if ((sp->flags & (SRB_IOCTL | SRB_TAPE |
-+                          SRB_FDMI_CMD)) || (atomic_read(&fcport->state) ==
-+                          FC_DEVICE_DEAD)) {
-+                              CMD_RESULT(cp) = DID_NO_CONNECT << 16;
-+                              add_to_done_queue(ha, sp);
-+                              if (atomic_read(&ha->loop_state) == LOOP_DOWN) 
-+                                      sp->err_id = SRB_ERR_LOOP;
-+                              else
-+                                      sp->err_id = SRB_ERR_PORT;
-+                      } else {
-                               qla2x00_extend_timeout(cp,
-                                               EXTEND_CMD_TIMEOUT);
-                               add_to_retry_queue(ha, sp);
-                       }
-                       if (atomic_read(&fcport->state) == FC_ONLINE) {
--                              qla2x00_mark_device_lost(ha, fcport);
-+                              qla2x00_mark_device_lost(ha, fcport, 1);
-                       }
-                       return;
-@@ -11975,7 +11505,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-                                       comp_status, 
-                                       scsi_status);)
--                      if (sp->flags & SRB_IOCTL) {
-+                      if (sp->flags & (SRB_IOCTL | SRB_TAPE | SRB_FDMI_CMD)) {
-                               CMD_RESULT(cp) = DID_RESET << 16;
-                       }
-                       else {
-@@ -12025,17 +11555,15 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-                                               "public device loop id (%x), "
-                                               "attempt new recovery\n",
-                                               le16_to_cpu(pkt->status_flags), 
--                                              ha->fc_db[t].loop_id);)
--                              ha->fc_db[t].flag |= DEV_RELOGIN;
--                              fcport->login_retry = ha->login_retry_count;
--                              set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
-+                                              fcport->loop_id);)
-+                              qla2x00_mark_device_lost(ha, fcport, 1);
-                       }
-                       break;
-               case CS_QUEUE_FULL:
--                      printk(KERN_INFO
-+                      DEBUG2(printk(KERN_INFO
-                              "scsi(%ld:%d:%d): QUEUE FULL status detected "
-                              "0x%x-0x%x, pid=%ld.\n",
-                               ha->host_no, 
-@@ -12043,7 +11571,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-                               l,
-                               comp_status, 
-                               scsi_status, 
--                              sp->cmd->serial_number);
-+                              sp->cmd->serial_number));
-                       /*
-                        * SCSI Mid-Layer handles device queue full
-                        */                              
-@@ -12083,10 +11611,11 @@ qla2x00_status_entry(scsi_qla_host_t *ha
-                       break;
-       } /* end of switch comp_status */
--
-       /* Place command on done queue. */
--      if (ha->status_srb == NULL)
-+      if (ha->status_srb == NULL){
-+
-               add_to_done_queue(ha, sp);
-+      }
-       LEAVE(__func__);
- }
-@@ -12164,9 +11693,6 @@ STATIC void
- qla2x00_error_entry(scsi_qla_host_t *ha, sts_entry_t *pkt) 
- {
-       srb_t *sp;
--#ifdef PERF_MONITORING
--      os_lun_t        *lq;
--#endif
-       ENTER(__func__);
-@@ -12198,12 +11724,6 @@ qla2x00_error_entry(scsi_qla_host_t *ha,
-                       ha->actthreads--;
-               sp->lun_queue->out_cnt--;
-               ha->iocb_cnt -= sp->iocb_cnt;
--#ifdef PERF_MONITORING
--              /* update stats */
--              lq = sp->lun_queue;
--              lq->resp_time += jiffies - sp->u_start; 
--              lq->act_time += jiffies - sp->r_start;  
--#endif
-               sp->flags |= SRB_ISP_COMPLETED;
-@@ -12234,6 +11754,7 @@ qla2x00_error_entry(scsi_qla_host_t *ha,
-       LEAVE(__func__);
- }
-+
- STATIC void
- qla2x00_ms_entry(scsi_qla_host_t *ha, ms_iocb_entry_t *pkt) 
- {
-@@ -12302,6 +11823,9 @@ qla2x00_restart_queues(scsi_qla_host_t *
-               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 
-                        */
-@@ -12372,11 +11896,7 @@ qla2x00_restart_queues(scsi_qla_host_t *
-       }
-       if (!list_empty(&ha->done_queue))
--#if QLA2X_PERFORMANCE
--              tasklet_schedule(&ha->run_qla_task);
--#else
-               qla2x00_done(ha);
--#endif
-       LEAVE(__func__);
- }
-@@ -12424,6 +11944,32 @@ qla2x00_abort_queues(scsi_qla_host_t *ha
-       LEAVE(__func__);
- }
-+void
-+qla2x00_ioctl_error_recovery(scsi_qla_host_t *ha)     
-+{
-+      int return_status; 
-+      unsigned long flags;
-+
-+      printk(KERN_INFO
-+          "%s(%ld) issuing device reset\n", __func__,ha->host_no);
-+      if (!ha->ioctl_err_cmd) {
-+              printk("%s(%ld) should not occur\n", __func__, ha->host_no);
-+              return;
-+      }
-+
-+      spin_lock_irqsave(&io_request_lock, flags);
-+      return_status = qla2xxx_eh_device_reset(ha->ioctl_err_cmd);
-+      if (return_status != SUCCESS){
-+              printk("%s(%ld) elevation to host_reset\n",
-+                  __func__, ha->host_no);
-+              return_status = qla2xxx_eh_host_reset(ha->ioctl_err_cmd);
-+              printk("%s(%ld) return_status=%x\n", __func__, ha->host_no,
-+                  return_status);
-+      }
-+      ha->ioctl_err_cmd = NULL ;
-+      spin_unlock_irqrestore(&io_request_lock, flags);
-+}
-+
- /*
-  * qla2x00_reset_lun_fo_counts
-@@ -12491,12 +12037,84 @@ qla2x00_failover_cleanup(srb_t *sp) 
-       CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
-       CMD_HANDLE(sp->cmd) = (unsigned char *) NULL;
-+      if( (sp->flags & SRB_GOT_SENSE ) ) {
-+               sp->flags &= ~SRB_GOT_SENSE;
-+               sp->cmd->sense_buffer[0] = 0;
-+      }
-       /* turn-off all failover flags */
-       sp->flags = sp->flags & ~(SRB_RETRY|SRB_FAILOVER|SRB_FO_CANCEL);
- }
-+void qla2x00_find_all_active_ports(srb_t *sp) 
-+{
-+      scsi_qla_host_t *ha = qla2x00_hostlist;
-+      fc_port_t *fcport;
-+      fc_lun_t        *fclun;
-+      fc_lun_t        *orig_fclun;
-+
-+      DEBUG2(printk(KERN_INFO "%s: Scanning for active ports... %d\n",
-+                      __func__, sp->lun_queue->fclun->lun);)
-+      orig_fclun = sp->lun_queue->fclun;
-+      for ( ; (ha != NULL); ha=ha->next) {
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-+                      if (fcport->port_type != FCT_TARGET )
-+                              continue;
-+                              if ( (fcport->flags & (FC_EVA_DEVICE|FC_MSA_DEVICE)) ) {
-+                              list_for_each_entry(fclun, &fcport->fcluns, list) {
-+                                      if (fclun->flags & FC_VISIBLE_LUN)
-+                                              continue;
-+                                      if (orig_fclun->lun != fclun->lun)
-+                                              continue;
-+                                      qla2x00_test_active_lun(fcport,fclun);
-+                              }
-+                      }
-+                              if ( (fcport->flags & FC_MSA_DEVICE) )
-+                               qla2x00_test_active_port(fcport);
-+              }
-+      }
-+      DEBUG2(printk(KERN_INFO "%s: Scanning ports...Done\n",
-+                      __func__);)
-+}
-+
-+
-+int qla2x00_suspend_failover_targets(scsi_qla_host_t *ha) 
-+{
-+      unsigned long flags;
-+      struct list_head *list, *temp;
-+      srb_t       *sp;
-+      int      count;
-+      os_tgt_t        *tq;
-+
-+      spin_lock_irqsave(&ha->list_lock, flags);
-+        count = ha->failover_cnt;
-+      list_for_each_safe(list, temp, &ha->failover_queue) {
-+              sp = list_entry(ha->failover_queue.next, srb_t, list);
-+              tq = sp->tgt_queue;
-+              if( !(test_bit(TGT_SUSPENDED, &tq->q_flags)) )
-+                      set_bit(TGT_SUSPENDED, &tq->q_flags);
-+      }
-+      spin_unlock_irqrestore(&ha->list_lock,flags);
-+
-+      return count;
-+}
-+
-+srb_t *
-+qla2x00_failover_next_request(scsi_qla_host_t *ha) 
-+{
-+      unsigned long flags;
-+      srb_t       *sp = NULL;
-+
-+      spin_lock_irqsave(&ha->list_lock, flags);
-+      if (!list_empty(&ha->failover_queue)) {
-+              sp = list_entry(ha->failover_queue.next, srb_t, list);
-+              __del_from_failover_queue(ha, sp);
-+      }
-+      spin_unlock_irqrestore(&ha->list_lock, flags);
-+      return( sp );
-+}
-+
- /*
-  *  qla2x00_process_failover
-  *    Process any command on the failover queue.
-@@ -12515,75 +12133,106 @@ qla2x00_process_failover(scsi_qla_host_t
-       os_lun_t        *lq;
-       srb_t       *sp;
-       fc_port_t *fcport;
--      struct list_head *list, *temp;
--      unsigned long flags;
-       uint32_t    t, l;
--      scsi_qla_host_t *vis_ha = NULL;
-+      scsi_qla_host_t *vis_ha = ha;
-+      int      count, i;
--      DEBUG(printk("%s(): Processing failover for hba %ld\n",
-+      DEBUG2(printk(KERN_INFO "%s: hba %ld active=%ld, retry=%d, "
-+                      "done=%ld, failover=%d, scsi retry=%d commands.\n",
-                       __func__,
--                      ha->host_no);)
-+                      ha->host_no,
-+                      ha->actthreads,
-+                      ha->retry_q_cnt,
-+                      ha->done_q_cnt,
-+                      ha->failover_cnt,
-+                      ha->scsi_retry_q_cnt);)
--      /*
--       * Process all the commands in the failover queue. Attempt to failover
--       * then either complete the command as is or requeue for retry.
--       */
--      /* Prevent or allow acceptance of new I/O requests. */
--      spin_lock_irqsave(&ha->list_lock, flags);
-+      /* Prevent acceptance of new I/O requests for failover target. */
-+      count = qla2x00_suspend_failover_targets(ha);
-       /*
--       * Get first entry to find our visible adapter.  We could never get
--       * here if the list is empty
-+       * Process all the commands in the failover queue. Attempt to failover
-+       * then either complete the command as is or requeue for retry.
-        */
--      list = ha->failover_queue.next;
--      sp = list_entry(list, srb_t, list);
--      vis_ha = (scsi_qla_host_t *) sp->cmd->host->hostdata;
--      list_for_each_safe(list, temp, &ha->failover_queue) {
--              sp = list_entry(list, srb_t, list);
--
-+      for( i = 0; i < count ; i++ ) {
-+              sp = qla2x00_failover_next_request(ha); 
-+              if( sp == NULL )
-+                      break;
-+              qla2x00_extend_timeout(sp->cmd, 360);
-+              if( i == 0 ) {
-+                      vis_ha = (scsi_qla_host_t *) sp->cmd->host->hostdata;
-+              }
-               tq = sp->tgt_queue;
-               lq = sp->lun_queue;
-               fcport = lq->fclun->fcport;
--
--              /* Remove srb from failover queue. */
--              __del_from_failover_queue(ha, sp);
--
--              DEBUG3(printk("%s(): pid %ld retrycnt=%d\n",
-+              DEBUG(printk("%s(): pid %ld retrycnt=%d,"
-+                               "fcport =%p, state=0x%x, \nloop state=0x%x"
-+                               " fclun=%p, lq fclun=%p, lq=%p, lun=%d\n",
-                               __func__,
-                               sp->cmd->serial_number,
--                              sp->cmd->retries);)
--
-+                              sp->cmd->retries,
-+                              fcport,
-+                               atomic_read(&fcport->state),
-+                               atomic_read(&ha->loop_state),
-+                               sp->fclun, lq->fclun, lq, lq->fclun->lun);)
-+              if ( sp->err_id == SRB_ERR_DEVICE &&
-+                   sp->fclun == lq->fclun && 
-+                   atomic_read(&fcport->state) == FC_ONLINE) {
-+                  if( !(qla2x00_test_active_lun(fcport, sp->fclun))  ) { 
-+                       DEBUG2(printk("scsi(%ld) %s Detected INACTIVE Port 0x%02x \n",
-+                              ha->host_no,__func__,fcport->loop_id);)
-+                       sp->err_id = SRB_ERR_OTHER;
-+                       sp->cmd->sense_buffer[2] = 0;
-+                       CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
-+                  }   
-+              }
-+              if( (sp->flags & SRB_GOT_SENSE ) ) {
-+                       sp->flags &= ~SRB_GOT_SENSE;
-+                       sp->cmd->sense_buffer[0] = 0;
-+                       CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
-+                       CMD_HANDLE(sp->cmd) = (unsigned char *) NULL;
-+              }
-               /*** Select an alternate path ***/
-               /* 
-                * If the path has already been change by a previous request
-                * sp->fclun != lq->fclun
-                */
-               if (sp->fclun != lq->fclun || 
--                      atomic_read(&fcport->state) != FC_DEVICE_DEAD) {
-+                      ( sp->err_id != SRB_ERR_OTHER &&
-+                        atomic_read(&fcport->ha->loop_state)
-+                                       != LOOP_DEAD &&
-+                      atomic_read(&fcport->state) != FC_DEVICE_DEAD) ) {
-                       qla2x00_failover_cleanup(sp);
-               } else if (qla2x00_cfg_failover(ha, lq->fclun,
-                                               tq, sp) == NULL) {
-                       /*
--                       * We ran out of paths, so just post the status which
--                       * is already set in the cmd.
-+                       * We ran out of paths, so just retry the status which
-+                       * is already set in the cmd. We want to serialize the 
-+                       * failovers, so we make them go thur visible HBA.
-                        */
-                       printk(KERN_INFO
--                              "%s(): Ran out of paths - pid %ld\n",
-+                              "%s(): Ran out of paths - pid %ld - retrying\n",
-                               __func__,
-                               sp->cmd->serial_number);
-               } else {
-                       qla2x00_failover_cleanup(sp);
-               }
--              __add_to_done_queue(ha, sp);
--      } /* list_for_each_safe */
--      spin_unlock_irqrestore(&ha->list_lock,flags);
-+              add_to_done_queue(ha, sp);
-+      } 
-       for (t = 0; t < vis_ha->max_targets; t++) {
-               if ((tq = vis_ha->otgt[t]) == NULL)
-                       continue;
-+              if( test_and_clear_bit(TGT_SUSPENDED, &tq->q_flags) ) {
-+                      /* EMPTY */
-+                      DEBUG2(printk("%s(): remove suspend for "
-+                                      "target %d\n",
-+                                      __func__,
-+                                      t);)
-+              }
-               for (l = 0; l < vis_ha->max_luns; l++) {
-                       if ((lq = (os_lun_t *) tq->olun[l]) == NULL)
-                               continue;
-@@ -12596,12 +12245,11 @@ qla2x00_process_failover(scsi_qla_host_t
-                                               lq->fclun->lun);)
-                       }
-               }
--      }
-+          }
--      //qla2x00_restart_queues(ha,TRUE);
-       qla2x00_restart_queues(ha, FALSE);
--      DEBUG(printk("%s() - done", __func__);)
-+      DEBUG2(printk("%s() - done\n", __func__);)
- }
- /*
-@@ -12623,7 +12271,7 @@ qla2x00_loop_resync(scsi_qla_host_t *ha)
-       DEBUG(printk("%s(): entered\n", __func__);)
--      ha->loop_state = LOOP_UPDATE;
-+      atomic_set(&ha->loop_state, LOOP_UPDATE);
-       qla2x00_stats.loop_resync++;
-       ha->total_loop_resync++;
-       clear_bit(ISP_ABORT_RETRY, &ha->dpc_flags);
-@@ -12631,7 +12279,7 @@ qla2x00_loop_resync(scsi_qla_host_t *ha)
-               if (!(status = qla2x00_fw_ready(ha))) {
-                       do {
-                               /* v2.19.05b6 */
--                              ha->loop_state = LOOP_UPDATE;
-+                              atomic_set(&ha->loop_state,  LOOP_UPDATE);
-                               /*
-                                * Issue marker command only when we are going
-@@ -12679,12 +12327,13 @@ qla2x00_loop_resync(scsi_qla_host_t *ha)
- STATIC uint16_t
- qla2x00_debounce_register(volatile uint16_t *addr) 
- {
--      volatile uint16_t ret;
--      volatile uint16_t ret2;
-+      uint16_t ret;
-+      uint16_t ret2;
-       do {
-               ret = RD_REG_WORD(addr);
-               barrier();
-+              cpu_relax();
-               ret2 = RD_REG_WORD(addr);
-       } while (ret != ret2);
-@@ -12719,7 +12368,7 @@ qla2x00_reset_chip(scsi_qla_host_t *ha) 
-       /* Pause RISC. */
-       WRT_REG_WORD(&reg->host_cmd, HC_PAUSE_RISC);
- #if defined(ISP2300)
--      if (ha->device_id == QLA2312_DEVICE_ID) {
-+      if (check_all_device_ids(ha)) {             
-               UDELAY(10);
-       } else {
-               for (cnt = 0; cnt < 30000; cnt++) {
-@@ -12750,7 +12399,20 @@ qla2x00_reset_chip(scsi_qla_host_t *ha) 
-       WRT_REG_WORD(&reg->ctrl_status, 0x10);
-       /* Reset frame buffer FIFOs. */
-+#if defined(ISP2200)
-       WRT_REG_WORD(&reg->fb_cmd, 0xa000);
-+#else
-+      WRT_REG_WORD(&reg->fb_cmd, 0x00fc);
-+
-+      /* Read back fb_cmd until zero or 3 seconds max */
-+      for (cnt = 0; cnt < 3000; cnt++) {
-+              if ((RD_REG_WORD(&reg->fb_cmd) & 0xff) == 0)
-+                      break;
-+              udelay(100);
-+      }
-+
-+
-+#endif
-       /* Select RISC module registers. */
-       WRT_REG_WORD(&reg->ctrl_status, 0);
-@@ -12764,7 +12426,7 @@ qla2x00_reset_chip(scsi_qla_host_t *ha) 
-       WRT_REG_WORD(&reg->ctrl_status, CSR_ISP_SOFT_RESET);
- #if defined(ISP2300)
--      if (ha->device_id == QLA2312_DEVICE_ID) {
-+      if (check_all_device_ids(ha)) {             
-               UDELAY(10);
-       } else {
-               /* Wait for RISC to recover from reset. */
-@@ -12789,7 +12451,7 @@ qla2x00_reset_chip(scsi_qla_host_t *ha) 
-       WRT_REG_WORD(&reg->host_cmd, HC_RELEASE_RISC);
- #if defined(ISP2300)
--      if (ha->device_id == QLA2312_DEVICE_ID) {
-+      if (check_all_device_ids(ha)) {             
-               UDELAY(10);
-       } else {
-               for (cnt = 0; cnt < 30000; cnt++) {
-@@ -12846,12 +12508,8 @@ qla2x00_reset_chip(scsi_qla_host_t *ha) 
-       /* Reset ISP chip. */
-       WRT_REG_WORD(&reg->ctrl_status, CSR_ISP_SOFT_RESET);
--
--      /*
--       * Delay after reset, for chip to recover.  Otherwise causes system
--       * PANIC
--       */
--      mdelay(2);
-+      /* Delay after reset, for chip to recover. */
-+      udelay(20);
-       for (cnt = 30000; cnt; cnt--) {
-               if (!(RD_REG_WORD(&reg->ctrl_status) & CSR_ISP_SOFT_RESET))
-@@ -12885,7 +12543,7 @@ qla2x00_reset_chip(scsi_qla_host_t *ha) 
-  * This routine will wait for fabric devices for
-  * the reset delay.
-  */
--static void qla2x00_check_fabric_devices(scsi_qla_host_t *ha) 
-+void qla2x00_check_fabric_devices(scsi_qla_host_t *ha) 
- {
-       uint16_t        fw_state;
-@@ -13001,22 +12659,6 @@ qla2x00_display_fc_names(scsi_qla_host_t
-                                       tgt,
-                                       tq->d_id.b24);
-                               break;
--
--                      case BIND_BY_NODE_NAME:
--                              printk(KERN_INFO
--                                      "scsi-qla%d-tgt-%d-di-0-node="
--                                      "%02x%02x%02x%02x%02x%02x%02x%02x\\;\n",
--                                      (int)ha->instance, 
--                                      tgt,
--                                      tq->node_name[0], 
--                                      tq->node_name[1],
--                                      tq->node_name[2], 
--                                      tq->node_name[3],
--                                      tq->node_name[4], 
--                                      tq->node_name[5],
--                                      tq->node_name[6], 
--                                      tq->node_name[7]);
--                              break;
-               }
- #if VSA
-@@ -13250,179 +12892,6 @@ qla2x00_get_properties(scsi_qla_host_t *
- }
- /*
-- * qla2x00_update_fc_database
-- *      This routine updates the device data in the database.
-- *
-- * Input:
-- *      ha = adapter block pointer.
-- *      device = device data pointer.
-- *
-- * Returns:
-- *      0 = success, if device found or added to database.
-- *      BIT_0 = error
-- *      BIT_1 = database was full and device was not configured.
-- */
--STATIC uint8_t
--qla2x00_update_fc_database(scsi_qla_host_t *ha, 
--                              fcdev_t *device, uint8_t enable_slot_reuse) 
--{
--      int             rval;
--      uint16_t        cnt, i;
--
--      DEBUG(printk("qla2x00: Found device - "
--          "nodename=%02x%02x%02x%02x%02x%02x%02x%02x, "
--          "portname=%02x%02x%02x%02x%02x%02x%02x%02x, "
--          "port Id=%06x, loop id=%04x\n",
--          device->name[0], device->name[1],
--          device->name[2], device->name[3],
--          device->name[4], device->name[5],
--          device->name[6], device->name[7],
--          device->wwn[0], device->wwn[1],
--          device->wwn[2], device->wwn[3],
--          device->wwn[4], device->wwn[5],
--          device->wwn[6], device->wwn[7],
--          device->d_id.b24, device->loop_id);)
--
--      /* Look for device in database. */
--      for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
--              if (ha->fc_db[cnt].loop_id == PORT_UNUSED)
--                      continue;
--
--              rval = 1;
--              switch (ha->binding_type) {
--                      case BIND_BY_PORT_NAME:
--                              rval = memcmp(device->wwn,
--                                  ha->fc_db[cnt].wwn, WWN_SIZE);
--                              break;
--
--                      case BIND_BY_PORT_ID:
--                              rval = (device->d_id.b24 !=
--                                  ha->fc_db[cnt].d_id.b24);
--                              break;
--
--                      case BIND_BY_NODE_NAME:
--                              rval = memcmp(device->name,
--                                  ha->fc_db[cnt].name, WWN_SIZE);
--                              break;
--              }
--              if (rval)
--                      continue;
--
--              DEBUG(printk("qla2x00: Reusing slot %d "
--                  "for device "
--                  "%02x%02x%02x%02x%02x%02x%02x%02x\n",
--                  cnt,
--                  device->wwn[0],
--                  device->wwn[1],
--                  device->wwn[2],
--                  device->wwn[3],
--                  device->wwn[4],
--                  device->wwn[5],
--                  device->wwn[6],
--                  device->wwn[7]);)
--
--              if (device->flag & DEV_PUBLIC) {
--                      ha->fc_db[cnt].flag |= DEV_PUBLIC;
--              } else {
--                      if (ha->fc_db[cnt].flag & DEV_PUBLIC) {
--                              ha->fc_db[cnt].flag &= ~DEV_PUBLIC;
--                              ha->fabricid[ha->fc_db[cnt].loop_id].in_use 
--                                  = FALSE;
--                      }
--              }
--
--              ha->fc_db[cnt].loop_id = device->loop_id;
--              ha->fc_db[cnt].d_id.b24 = device->d_id.b24;
--
--              /* Update volatile unbound fields for PortID binding only */
--              if (ha->binding_type == BIND_BY_PORT_ID) {
--                      memcpy(ha->fc_db[cnt].name, device->name, WWN_SIZE);
--                      memcpy(ha->fc_db[cnt].wwn, device->wwn, WWN_SIZE);
--              }
--
--              return (0);
--      }
--
--      /* Find a empty slot and add device into database. */
--      for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
--
--/* FlexServ Patch */
--#if QLA2XXX_HOTSWAP_ENUMERATION
--              /*
--               * Enumerate upon the actual ID so add-single-device works
--               */
--              if (i != device->loop_id) {
--                      continue;
--              }
--#endif
--
--              if ((ha->fc_db[i].loop_id == PORT_UNUSED) ||
--                      (ha->fc_db[i].loop_id == PORT_NEED_MAP)) {
--
--                      DEBUG(printk("qla2x00: New slot %d for device "
--                          "%02x%02x%02x%02x%02x%02x%02x%02x\n",
--                          i,
--                          device->wwn[0],
--                          device->wwn[1],
--                          device->wwn[2],
--                          device->wwn[3],
--                          device->wwn[4],
--                          device->wwn[5],
--                          device->wwn[6],
--                          device->wwn[7]);)
--
--                      memcpy(ha->fc_db[i].name, device->name, WWN_SIZE);
--                      memcpy(ha->fc_db[i].wwn, device->wwn, WWN_SIZE);
--                      ha->fc_db[i].loop_id = device->loop_id;
--                      ha->fc_db[i].d_id.b24 = device->d_id.b24;
--
--                      if (device->flag & DEV_PUBLIC)
--                              ha->fc_db[i].flag |= DEV_PUBLIC;
--
--                      ha->flags.updated_fc_db = TRUE;
--
--                      return (0);
--              }
--      }
--
--      if (enable_slot_reuse) {
--              for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
--                      if (ha->fc_db[i].loop_id == PORT_AVAILABLE) {
--                              DEBUG(printk("qla2x00: Assigned slot %d "
--                                  "reuse for device "
--                                  "%02x%02x%02x%02x%02x%02x%02x%02x\n",
--                                  i, 
--                                  device->wwn[0],
--                                  device->wwn[1],
--                                  device->wwn[2],
--                                  device->wwn[3],
--                                  device->wwn[4],
--                                  device->wwn[5],
--                                  device->wwn[6],
--                                  device->wwn[7]);)
--
--                              memcpy(ha->fc_db[i].name,
--                                  device->name, WWN_SIZE);
--                              memcpy(ha->fc_db[i].wwn,
--                                  device->wwn, WWN_SIZE);
--                              ha->fc_db[i].loop_id = device->loop_id;
--                              ha->fc_db[i].d_id.b24 = device->d_id.b24;
--
--                              if (device->flag & DEV_PUBLIC)
--                                      ha->fc_db[i].flag |= DEV_PUBLIC;
--
--                              ha->flags.updated_fc_db = TRUE;
--
--                              return (0);
--                      }
--              }
--      }
--
--      return(BIT_1);
--}
--
--
--/*
-  * qla2x00_device_resync
-  *    Marks devices in the database that needs resynchronization.
-  *
-@@ -13435,11 +12904,9 @@ qla2x00_update_fc_database(scsi_qla_host
- static void
- qla2x00_device_resync(scsi_qla_host_t *ha) 
- {
--      uint16_t index;
-       uint32_t mask;
-       rscn_t dev;
--      struct list_head *fcil;
--      fc_initiator_t  *fcinitiator;
-+      fc_port_t *fcport;
-       ENTER(__func__);
-@@ -13484,44 +12951,19 @@ qla2x00_device_resync(scsi_qla_host_t *h
-               }
-               /* Mark target devices indicated by RSCN for later processing */
--              for (index = 0; index < MAX_FIBRE_DEVICES; index++) {
--                      if ((ha->fc_db[index].flag & DEV_PUBLIC) &&
--                              (ha->fc_db[index].d_id.b24 & mask) ==
--                               dev.d_id.b24) {
--
--                              /* fabric device */
--                              if (ha->fc_db[index].loop_id != PORT_UNUSED) {
--                                      ha->fc_db[index].loop_id |=
--                                                              PORT_LOST_ID;
--
--                                      DEBUG(printk("qla%d: RSCN port @ "
--                                                      "slot %d "
--                                                      "port_id=%06x\n",
--                                                      (int)ha->instance,
--                                                      index,
--                                                      ha->fc_db[index].d_id.b24);)
--                              }
--                      }
--              }
--
--              if (dev.format == 3)
--                      continue;
--
--              /*
--               * Invalidate initiator devices indicated by RSCN so we know
--               * they are no longer logged in.
--               */
--              list_for_each(fcil, &ha->fcinitiators) {
--                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
--
--                      if ((fcinitiator->d_id.b24 & mask) != dev.d_id.b24)
--                              continue;
--                      if (fcinitiator->loop_id & PORT_LOST_ID ||
--                              fcinitiator->loop_id & PORT_LOGIN_NEEDED)
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-+                      if ((fcport->flags & FC_FABRIC_DEVICE) == 0 ||
-+                          (fcport->d_id.b24 & mask) != dev.d_id.b24 ||
-+                          fcport->port_type == FCT_BROADCAST)
-                               continue;
--                      fcinitiator->loop_id |= PORT_LOST_ID;
--                      fcinitiator->d_id.b24 = 0;
-+                      if (atomic_read(&fcport->state) == FC_ONLINE) {
-+                              if (dev.format != 3 ||
-+                                  fcport->port_type != FCT_INITIATOR) {
-+                                      atomic_set(&fcport->state,
-+                                          FC_DEVICE_LOST);
-+                              }
-+                      }
-               }
-       }
-@@ -13529,63 +12971,314 @@ qla2x00_device_resync(scsi_qla_host_t *h
- }
- /*
-- * qla2x00_configure_fabric
-- *      Setup SNS devices with loop ID's.
-+ * qla2x00_find_new_loop_id
-+ *    Scan through our port list and find a new usable loop ID.
-  *
-  * Input:
-- *      ha = adapter block pointer.
-+ *    ha:     adapter state pointer.
-+ *    dev:    port structure pointer.
-  *
-  * Returns:
-- *      0 = success.
-- *      BIT_0 = error
-- *      BIT_1 = database was full and device was not configured.
-+ *    qla2x00 local function return status code.
-+ *
-+ * Context:
-+ *    Kernel context.
-  */
--#define MAX_PUBLIC_LOOP_IDS LAST_SNS_LOOP_ID + 1
--
--STATIC uint8_t
--qla2x00_configure_fabric(scsi_qla_host_t *ha, uint8_t enable_slot_reuse) 
-+int
-+qla2x00_find_new_loop_id(scsi_qla_host_t *ha, fc_port_t *dev)
- {
--      uint8_t     rval = 0;
--      uint8_t     rval1;
--      uint8_t     local_flags = 0;
--      sns_cmd_rsp_t  *sns;
--      uint8_t     tmp_name[8];
--      fcdev_t     dev;
--      uint16_t    i, index, found_cnt;
--      dma_addr_t  phys_address = 0;
--      uint16_t    new_dev_cnt;
--      uint16_t    tmp_loop_id;
--      uint16_t    tmp_topo;
--      struct new_dev *new_dev_list;
--      struct list_head *fcil, *fcitemp;
--      fc_initiator_t  *fcinitiator;
-+      int     rval;
-+      int     found;
-+      fc_port_t *fcport;
-+      uint16_t first_loop_id;
--      ENTER(__func__);
-+      rval = QL_STATUS_SUCCESS;
--      DEBUG2(printk(KERN_INFO "scsi%ld: Enter qla2x00_configure_fabric: hba=%p\n",
--                      ha->host_no, ha);)
-+      /* Save starting loop ID. */
-+      first_loop_id = dev->loop_id;
--      /* If FL port exists, then SNS is present */
--      rval1 = qla2x00_get_port_name(ha, SNS_FL_PORT, tmp_name, 0);
--      if (rval1 || qla2x00_is_wwn_zero(tmp_name)) {
--              DEBUG2(printk(KERN_INFO "%s(): MBC_GET_PORT_NAME Failed, No FL Port\n",
--                              __func__);)
-+      for (;;) {
-+              /* Skip loop ID if already used by adapter. */
-+              if (dev->loop_id == ha->loop_id) {
-+                      dev->loop_id++;
-+              }
--              ha->device_flags &= ~SWITCH_FOUND;
--              return (0);
--      }
-+              /* Skip reserved loop IDs. */
-+              while (RESERVED_LOOP_ID(dev->loop_id)) {
-+                      dev->loop_id++;
-+              }
--      ha->device_flags |= SWITCH_FOUND;
-+              /* Reset loop ID if passed the end. */
-+              if (dev->loop_id > SNS_LAST_LOOP_ID) {
-+                      /* first loop ID. */
-+                      dev->loop_id = ha->min_external_loopid;
-+              }
--      /* Get adapter port ID. */
--      rval = qla2x00_get_adapter_id(ha, &tmp_loop_id, &ha->d_id.b.al_pa,
--                      &ha->d_id.b.area, &ha->d_id.b.domain, &tmp_topo);
-+              /* Check for loop ID being already in use. */
-+              found = 0;
-+              fcport = NULL;
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-+                      if (fcport->loop_id == dev->loop_id && fcport != dev) {
-+                              /* ID possibly in use */
-+                              found++;
-+                              break;
-+                      }
-+              }
--      sns = pci_alloc_consistent(ha->pdev, 
--                      sizeof(sns_cmd_rsp_t), 
--                      &phys_address);
--      if (sns == NULL) {
--              printk(KERN_WARNING
-+              /* If not in use then it is free to use. */
-+              if (!found) {
-+                      break;
-+              }
-+
-+              /* ID in use. Try next value. */
-+              dev->loop_id++;
-+
-+              /* If wrap around. No free ID to use. */
-+              if (dev->loop_id == first_loop_id) {
-+                      dev->loop_id = FC_NO_LOOP_ID;
-+                      rval = QL_STATUS_ERROR;
-+                      break;
-+              }
-+      }
-+
-+      return (rval);
-+}
-+
-+/*
-+ * qla2x00_fabric_dev_login
-+ *    Login fabric target device and update FC port database.
-+ *
-+ * Input:
-+ *    ha:             adapter state pointer.
-+ *    fcport:         port structure list pointer.
-+ *    next_loopid:    contains value of a new loop ID that can be used
-+ *                    by the next login attempt.
-+ *
-+ * Returns:
-+ *    qla2x00 local function return status code.
-+ *
-+ * Context:
-+ *    Kernel context.
-+ */
-+static int
-+qla2x00_fabric_dev_login(scsi_qla_host_t *ha, fc_port_t *fcport,
-+    uint16_t *next_loopid)
-+{
-+      int     rval;
-+      int     retry;
-+
-+      rval = QL_STATUS_SUCCESS;
-+      retry = 0;
-+
-+      rval = qla2x00_fabric_login(ha, fcport, next_loopid);
-+      if (rval == QL_STATUS_SUCCESS) {
-+              rval = qla2x00_get_port_database(ha, fcport, BIT_1 | BIT_0);
-+              if (rval != QL_STATUS_SUCCESS) {
-+                      qla2x00_fabric_logout(ha, fcport->loop_id);
-+              } else {
-+                      qla2x00_update_fcport(ha, fcport);
-+              }
-+      }
-+
-+      return (rval);
-+}
-+
-+/*
-+ * qla2x00_fabric_login
-+ *    Issue fabric login command.
-+ *
-+ * Input:
-+ *    ha = adapter block pointer.
-+ *    device = pointer to FC device type structure.
-+ *
-+ * Returns:
-+ *      0 - Login successfully
-+ *      1 - Login failed
-+ *      2 - Initiator device
-+ *      3 - Fatal error
-+ */
-+static uint8_t
-+qla2x00_fabric_login(scsi_qla_host_t *ha, fc_port_t *fcport,
-+    uint16_t *next_loopid)
-+{
-+      int     rval;
-+      int     retry;
-+      uint16_t tmp_loopid;
-+      uint16_t mb[MAILBOX_REGISTER_COUNT];
-+
-+      retry = 0;
-+      tmp_loopid = 0;
-+
-+      for (;;) {
-+              DEBUG(printk("scsi(%ld): Trying Fabric Login w/loop id 0x%04x "
-+                  "for port %02x%02x%02x.\n",
-+                  ha->host_no, fcport->loop_id, fcport->d_id.b.domain,
-+                  fcport->d_id.b.area, fcport->d_id.b.al_pa));
-+
-+              /* Login fcport on switch. */
-+              qla2x00_login_fabric(ha, fcport->loop_id,
-+                  fcport->d_id.b.domain, fcport->d_id.b.area,
-+                  fcport->d_id.b.al_pa, mb, BIT_0);
-+              if (mb[0] == MBS_PORT_ID_USED) {
-+                      /*
-+                       * Device has another loop ID.  The firmware team
-+                       * recommends us to perform an implicit login with the
-+                       * specified ID again. The ID we just used is save here
-+                       * so we return with an ID that can be tried by the
-+                       * next login.
-+                       */
-+                      retry++;
-+                      tmp_loopid = fcport->loop_id;
-+                      fcport->loop_id = mb[1];
-+
-+                      DEBUG(printk("Fabric Login: port in use - next "
-+                          "loop id=0x%04x, port Id=%02x%02x%02x.\n",
-+                          fcport->loop_id, fcport->d_id.b.domain,
-+                          fcport->d_id.b.area, fcport->d_id.b.al_pa));
-+
-+              } else if (mb[0] == MBS_COMMAND_COMPLETE) {
-+                      /*
-+                       * Login succeeded.
-+                       */
-+                      if (retry) {
-+                              /* A retry occurred before. */
-+                              *next_loopid = tmp_loopid;
-+                      } else {
-+                              /*
-+                               * No retry occurred before. Just increment the
-+                               * ID value for next login.
-+                               */
-+                              *next_loopid = (fcport->loop_id + 1);
-+                      }
-+
-+                      if (mb[1] & BIT_0) {
-+                              fcport->port_type = FCT_INITIATOR;
-+                      } else {
-+                              fcport->port_type = FCT_TARGET;
-+                              if (mb[1] & BIT_1) {
-+                                      fcport->flags |= FC_TAPE_DEVICE;
-+                              }
-+                      }
-+
-+                      rval = QL_STATUS_SUCCESS;
-+                      break;
-+              } else if (mb[0] == MBS_LOOP_ID_USED) {
-+                      /*
-+                       * Loop ID already used, try next loop ID.
-+                       */
-+                      fcport->loop_id++;
-+                      rval = qla2x00_find_new_loop_id(ha, fcport);
-+                      if (rval != QL_STATUS_SUCCESS) {
-+                              /* Ran out of loop IDs to use */
-+                              break;
-+                      }
-+              } else if (mb[0] == MBS_CMD_ERR) {
-+                      /*
-+                       * Firmware possibly timed out during login. If NO
-+                       * retries are left to do then the device is declared
-+                       * dead.
-+                       */
-+                      *next_loopid = fcport->loop_id;
-+                      qla2x00_fabric_logout(ha, fcport->loop_id);
-+                      fcport->loop_id = FC_NO_LOOP_ID;
-+                      if (mb[1] ==  MBS_SC_TOPOLOGY_ERR){
-+                              printk(KERN_INFO "%s:HBA trying to log "
-+                                  "through FL_Port\n", __func__);
-+                              DEBUG2(printk(KERN_INFO "%s:HBA trying to log "
-+                                  "through FL_Port\n", __func__);)
-+
-+                              atomic_set(&fcport->state, FC_DEVICE_DEAD);
-+                      }
-+
-+                      rval = 3;
-+                      break;
-+              } else {
-+                      /*
-+                       * unrecoverable / not handled error
-+                       */
-+                      DEBUG2(printk("%s(%ld): failed=%x port_id=%02x%02x%02x "
-+                          "loop_id=%x jiffies=%lx.\n", 
-+                          __func__, ha->host_no, mb[0], 
-+                          fcport->d_id.b.domain, fcport->d_id.b.area,
-+                          fcport->d_id.b.al_pa, fcport->loop_id, jiffies));
-+
-+                      /* Trying to log into more than 8 Target */
-+                      if(mb[0] == MBS_ALL_LOOP_IDS_IN_USE){
-+                              printk(KERN_INFO "%s:No more loop ids\n"
-+                                  ,__func__);
-+                              DEBUG2(printk("%s:No more loop ids\n"
-+                                  ,__func__);)
-+                      }
-+                      *next_loopid = fcport->loop_id;
-+                      qla2x00_fabric_logout(ha, fcport->loop_id);
-+                      fcport->loop_id = FC_NO_LOOP_ID;
-+                      atomic_set(&fcport->state, FC_DEVICE_DEAD);
-+
-+                      rval = 1;
-+                      break;
-+              }
-+      }
-+
-+      return (rval);
-+}
-+
-+/*
-+ * qla2x00_configure_fabric
-+ *      Setup SNS devices with loop ID's.
-+ *
-+ * Input:
-+ *      ha = adapter block pointer.
-+ *
-+ * Returns:
-+ *      0 = success.
-+ *      BIT_0 = error
-+ *      BIT_1 = database was full and device was not configured.
-+ */
-+#define MAX_PUBLIC_LOOP_IDS SNS_LAST_LOOP_ID + 1
-+
-+STATIC uint8_t
-+qla2x00_configure_fabric(scsi_qla_host_t *ha) 
-+{
-+      uint8_t     rval = 0;
-+      uint8_t     rval1;
-+      sns_cmd_rsp_t  *sns;
-+      uint8_t     tmp_name[8];
-+      dma_addr_t  phys_address = 0;
-+      uint16_t    tmp_loop_id;
-+      uint16_t    tmp_topo;
-+      fc_port_t       *fcport, *fcptemp;
-+      uint16_t        next_loopid;
-+      LIST_HEAD(new_fcports);
-+#if REG_FC4_ENABLED
-+      uint16_t        mb[MAILBOX_REGISTER_COUNT];
-+#endif
-+
-+      ENTER(__func__);
-+
-+      DEBUG2(printk(KERN_INFO "scsi(%ld): Enter qla2x00_configure_fabric:" 
-+                          "hba=%p\n", ha->host_no, ha);)
-+
-+      /* If FL port exists, then SNS is present */
-+      rval1 = qla2x00_get_port_name(ha, SNS_FL_PORT, tmp_name, 0);
-+      if (rval1 || qla2x00_is_wwn_zero(tmp_name)) {
-+              DEBUG2(printk(KERN_INFO "%s(): MBC_GET_PORT_NAME Failed, No FL Port\n",
-+                              __func__);)
-+
-+              ha->device_flags &= ~SWITCH_FOUND;
-+              return (0);
-+      }
-+
-+      ha->device_flags |= SWITCH_FOUND;
-+
-+      /* Get adapter port ID. */
-+      rval = qla2x00_get_adapter_id(ha, &tmp_loop_id, &ha->d_id.b.al_pa,
-+                      &ha->d_id.b.area, &ha->d_id.b.domain, &tmp_topo);
-+
-+      sns = pci_alloc_consistent(ha->pdev, 
-+                      sizeof(sns_cmd_rsp_t), 
-+                      &phys_address);
-+      if (sns == NULL) {
-+              printk(KERN_WARNING
-                       "qla(%ld): Memory Allocation failed - sns.\n",
-                       ha->host_no);
-               ha->mem_err++;
-@@ -13596,9 +13289,38 @@ qla2x00_configure_fabric(scsi_qla_host_t
-       /* Mark devices that need re-synchronization. */
-       qla2x00_device_resync(ha);
--      found_cnt = 0;
-       do {
-+#if REG_FDMI_ENABLED
-+              /* FDMI support */
-+              /* login to management server */
-+              if (!ha->init_done) {
-+                      if (test_and_clear_bit(FDMI_REGISTER_NEEDED,
-+                          &ha->fdmi_flags)) {
-+                              if (qla2x00_mgmt_svr_login(ha) !=
-+                                  QL_STATUS_SUCCESS) {
-+                                      DEBUG2(printk("%s(%ld): failed MS "
-+                                          "server login.\n", __func__,
-+                                          ha->host_no);)
-+                              } else {
-+                                      /* use mbx commands to send commands */
-+                                      qla2x00_fdmi_register(ha);
-+                              }
-+                      }
-+              }
-+#endif
-+
- #if REG_FC4_ENABLED
-+              /* Ensure we are logged into the SNS. */
-+              qla2x00_login_fabric(ha, SIMPLE_NAME_SERVER, 0xff, 0xff, 0xfc,
-+                  mb, BIT_0);
-+              if (mb[0] != MBS_COMMAND_COMPLETE) {
-+                      printk(KERN_INFO "scsi(%ld): Failed SNS login: "
-+                          "loop_id=%x mb[0]=%x mb[1]=%x mb[2]=%x mb[6]=%x "
-+                          "mb[7]=%x\n", ha->host_no, SIMPLE_NAME_SERVER,
-+                          mb[0], mb[1], mb[2], mb[6], mb[7]);
-+                      return (QL_STATUS_ERROR);
-+              }
-+
-               if (test_and_clear_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags)) {
-                       if (qla2x00_register_fc4(ha, sns, phys_address)) {
-                               /* EMPTY */
-@@ -13632,21 +13354,8 @@ qla2x00_configure_fabric(scsi_qla_host_t
-                       }
-               }
- #endif
--              new_dev_list =  kmalloc( MAX_FIBRE_DEVICES * 
--                                       sizeof(struct new_dev), GFP_ATOMIC);
--              if( new_dev_list == NULL ){
--                      printk("%s Failed to allocate memory for"
--                              "New Device List\n",__func__);
--                      rval = BIT_0 ;
--                      break;
--              }else {
--                      memset(new_dev_list , 0 ,
--                              MAX_FIBRE_DEVICES * sizeof(struct new_dev));
--                      rval = qla2x00_find_all_fabric_devs(ha, 
--                              sns, phys_address,
--                              new_dev_list, &new_dev_cnt, 
--                              &local_flags);
--              }
-+              rval = qla2x00_find_all_fabric_devs(ha, sns, phys_address,
-+                  &new_fcports);
-               if (rval != 0)
-                       break;
-@@ -13654,150 +13363,95 @@ qla2x00_configure_fabric(scsi_qla_host_t
-                * Logout all previous fabric devices marked lost, except
-                * tape devices.
-                */
--              for (index = 0; index < MAX_FIBRE_DEVICES &&
--                      !atomic_read(&ha->loop_down_timer) &&
--                      !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)); 
--                      index++) {
--
--                      if (ha->fc_db[index].loop_id & PORT_LOST_ID &&
--                          (ha->fc_db[index].flag & DEV_PUBLIC) &&
--                          !(ha->fc_db[index].flag & DEV_TAPE_DEVICE)) {
--
--                              qla2x00_fabric_logout(ha, 
--                                              ha->fc_db[index].loop_id & 
--                                               0xff);
--                              local_flags |= LOGOUT_PERFORMED;
--                      }
--              }
--
--              /* Logout and remove any lost initiator devices */
--              list_for_each_safe(fcil, fcitemp, &ha->fcinitiators) {
--                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-+                      if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))
-+                              break;
--                      if ((fcinitiator->loop_id & PORT_LOST_ID) == 0)
-+                      if ((fcport->flags & FC_FABRIC_DEVICE) == 0)
-                               continue;
--                      qla2x00_fabric_logout(ha, fcinitiator->loop_id & 0xff);
--                      ha->fabricid[fcinitiator->loop_id &0xFF].in_use = FALSE;
--
--                      list_del(&fcinitiator->list);
--                      kfree(fcinitiator);
--              }
--
--#if 0
--              /*
--               * Wait for all remaining IO's to finish if there was logout.
--               */
--              if (local_flags & LOGOUT_PERFORMED) {
--                      local_flags &= ~LOGOUT_PERFORMED;
--
--                      if (ha->init_done) {
--                              if (!(ha->dpc_flags & COMMAND_WAIT_ACTIVE)) {
--                                      ha->dpc_flags |= COMMAND_WAIT_ACTIVE;
--
--                                      qla2x00_cmd_wait(ha);
--
--                                      ha->dpc_flags &= ~COMMAND_WAIT_ACTIVE;
-+                      if (atomic_read(&fcport->state) == FC_DEVICE_LOST) {
-+                              qla2x00_mark_device_lost(ha, fcport,
-+                                  ql2xplogiabsentdevice);
-+
-+                              if (fcport->loop_id != FC_NO_LOOP_ID &&
-+                                  (fcport->flags & FC_TAPE_DEVICE) == 0 &&
-+                                  fcport->port_type != FCT_INITIATOR &&
-+                                  fcport->port_type != FCT_BROADCAST) {
-+
-+                                      qla2x00_fabric_logout(ha,
-+                                          fcport->loop_id);
-+                                      fcport->loop_id = FC_NO_LOOP_ID;
-                               }
-                       }
-               }
--#endif
-+
-+              /* Starting free loop ID. */
-+              next_loopid = ha->min_external_loopid;
-               /*
--               * Scan through our database and login entries already in our
--               * database.
-+               * Scan through our port list and login entries that need to be
-+               * logged in.
-                */
--              for (index = 0; index < MAX_FIBRE_DEVICES &&
--                      !atomic_read(&ha->loop_down_timer) &&
--                      !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)); index++) {
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-+                      if (atomic_read(&ha->loop_down_timer) ||
-+                          test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))
-+                              break;
--                      if (!(ha->fc_db[index].loop_id & PORT_LOGIN_NEEDED))
-+                      if ((fcport->flags & FC_FABRIC_DEVICE) == 0 ||
-+                          (fcport->flags & FC_LOGIN_NEEDED) == 0)
-                               continue;
--                      ha->fc_db[index].loop_id &= ~PORT_LOGIN_NEEDED;
--                      if (ha->fc_db[index].loop_id <= LAST_SNS_LOOP_ID) {
--
--                              /* loop_id reusable */
--                              dev.loop_id = ha->fc_db[index].loop_id & 0xff;
--                      } else {
--                              for (i = ha->min_external_loopid;
--                                      i < MAX_PUBLIC_LOOP_IDS; 
--                                      i++) {
--
--                                      if (!ha->fabricid[i].in_use) {
--                                              ha->fabricid[i].in_use = TRUE;
--                                              dev.loop_id = i;
--                                              break;
--                                      }
--                              }
--
--                              if (i == MAX_PUBLIC_LOOP_IDS)
-+                      if (fcport->loop_id == FC_NO_LOOP_ID) {
-+                              fcport->loop_id = next_loopid;
-+                              rval = qla2x00_find_new_loop_id(ha, fcport);
-+                              if (rval != QL_STATUS_SUCCESS) {
-+                                      /* Ran out of IDs to use */
-                                       break;
-+                              }
-                       }
--                      dev.d_id.b24 = ha->fc_db[index].d_id.b24;
-+                      /* Login and update database */
-+                      qla2x00_fabric_dev_login(ha, fcport, &next_loopid);
-+              }
--                      /* login and update database */
--                      if (qla2x00_fabric_login(ha, &dev) == 0) {
--                              ha->fc_db[index].loop_id = dev.loop_id;
--                              found_cnt++;
--                      }
-+              /* Exit if out of loop IDs. */
-+              if (rval != QL_STATUS_SUCCESS) {
-+                      break;
-               }
-               /*
--               * Scan through new device list and login and add to our
--               * database.
-+               * Login and add the new devices to our port list.
-                */
--              for (index = 0; index < new_dev_cnt &&
--                      !atomic_read(&ha->loop_down_timer) &&
--                      !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)); 
--                      index++) {
--
--                      if (new_dev_list[index].ignore)
--                              continue;
--
--                      memcpy(&dev, &new_dev_list[index],
--                                      sizeof(struct new_dev));
--
--                      dev.flag = DEV_PUBLIC;
--
--                      for (i = ha->min_external_loopid;
--                              i < MAX_PUBLIC_LOOP_IDS; 
--                              i++) {
--
--                              if (!ha->fabricid[i].in_use) {
--                                      ha->fabricid[i].in_use = TRUE;
--                                      dev.loop_id = i;
--                                      break;
--                              }
--                      }
--
--                      if (i == MAX_PUBLIC_LOOP_IDS)
-+              list_for_each_entry_safe(fcport, fcptemp, &new_fcports, list) {
-+                      if (atomic_read(&ha->loop_down_timer) ||
-+                          test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))
-                               break;
--                      DEBUG(printk("%s(): calling qla2100_fabric_login()\n",
--                                      __func__);)
-+                      /* Find a new loop ID to use. */
-+                      fcport->loop_id = next_loopid;
-+                      rval = qla2x00_find_new_loop_id(ha, fcport);
-+                      if (rval != QL_STATUS_SUCCESS) {
-+                              /* Ran out of IDs to use */
-+                              break;
-+                      }
--                      if (qla2x00_fabric_login(ha, &dev) == 0) {
--                              found_cnt++;
--                              if ((rval = 
--                                      qla2x00_update_fc_database(ha, 
--                                                      &dev,
--                                                      enable_slot_reuse)) ) {
-+                      /* Login and update database */
-+                      qla2x00_fabric_dev_login(ha, fcport, &next_loopid);
--                                      qla2x00_fabric_logout(ha, dev.loop_id);
--                                      ha->fabricid[i].in_use = FALSE;
--                                      break;
--                              }
--                      }
-+                      /* Remove device from the new list and add it to DB */
-+                      list_del(&fcport->list);
-+                      list_add_tail(&fcport->list, &ha->fcports);
-               }
--      } while(0);
-+      } while (0);
-       pci_free_consistent(ha->pdev, sizeof(sns_cmd_rsp_t), sns, phys_address);
--      if( new_dev_list != NULL ){
--              kfree(new_dev_list);
--      } 
-+      /* Free all new device structures not processed. */
-+      list_for_each_entry_safe(fcport, fcptemp, &new_fcports, list) {
-+              list_del(&fcport->list);
-+              kfree(fcport);
-+      }
-       if (rval) {
-               DEBUG2(printk(KERN_INFO "%s(%ld): error exit: rval=%d\n",
-@@ -13806,9 +13460,6 @@ qla2x00_configure_fabric(scsi_qla_host_t
-                               rval);)
-       } else {
-               /* EMPTY */
--              DEBUG2(if (found_cnt))
--              DEBUG2(printk(KERN_INFO "scsi%ld Found (%d) ports\n",
--                              ha->host_no, found_cnt);) 
-               DEBUG2(printk(KERN_INFO "scsi%ld: %s: exit\n", ha->host_no, __func__);)
-       }
-@@ -13838,38 +13489,54 @@ qla2x00_configure_fabric(scsi_qla_host_t
-  *    Kernel context.
-  */
- static uint8_t
--qla2x00_find_all_fabric_devs(scsi_qla_host_t *ha, 
--    sns_cmd_rsp_t *sns, dma_addr_t phys_addr, 
--    struct new_dev *new_dev_list, uint16_t *new_dev_cnt, uint8_t *flags) 
-+qla2x00_find_all_fabric_devs(scsi_qla_host_t *ha, sns_cmd_rsp_t *sns,
-+    dma_addr_t phys_addr, struct list_head *new_fcports)
- {
--      fcdev_t         first_dev, dev;
-       uint8_t         rval = 0;
--      uint8_t         use_gan = 0;
--      uint8_t         wrap_around;    /* device list */
-       uint16_t        i;
--      uint16_t        index, device_index = 0;
--      uint16_t        new_cnt;
-       uint16_t        public_count;
--      uint16_t        initiator;
--      struct list_head *fcil;
--      fc_initiator_t  *fcinitiator;
-+
-+      fc_port_t       *fcport, *new_fcport, *tmp_fcport = NULL;
-+      int             found;
-+      sw_info_t       *swl;
-+      int             swl_idx;
-+      int             first_dev, last_dev;
-+      port_id_t       wrap;
-       ENTER(__func__);
-+
-       /* Try GNN_FT to get the list of SCSI type devices */
--      if (qla2x00_gnn_ft(ha, sns, phys_addr, 
--                              new_dev_list, SCSI_TYPE) != QL_STATUS_SUCCESS){
--              use_gan = 1;
--              printk(KERN_INFO "%s GNN_FT Failed-Try"
--                                      " issuing GAN \n",__func__);
--      }else if(qla2x00_gpn_id(ha, sns, phys_addr,                  
--                              new_dev_list) != QL_STATUS_SUCCESS) {
--              use_gan = 1;
--              printk(KERN_INFO "%s GPN_ID Failed-Try"
--                                      " issuing GAN \n",__func__);
-+      swl = kmalloc(sizeof(sw_info_t) * MAX_FIBRE_DEVICES, GFP_ATOMIC);
-+      if (swl == NULL) {
-+              /*EMPTY*/
-+              DEBUG2(printk("scsi(%ld): GNN_FT allocations failed, fallback "
-+                  "on GAN\n", ha->host_no));
-+      } else {
-+              memset(swl, 0 ,MAX_FIBRE_DEVICES * sizeof (sw_info_t));
-+              if (qla2x00_gnn_ft(ha, sns, phys_addr, swl, SCSI_TYPE) !=
-+                  QL_STATUS_SUCCESS) {
-+                      kfree(swl);
-+                      swl = NULL;
-+              } else if (qla2x00_gpn_id(ha, sns, phys_addr, swl) !=
-+                  QL_STATUS_SUCCESS) {
-+                      kfree(swl);
-+                      swl = NULL;
-+              }
-+      }
-+
-+      /* Allocate temporary fcport for any new fcports discovered. */
-+      new_fcport = qla2x00_alloc_fcport(ha, GFP_KERNEL);
-+      if (new_fcport == NULL) {
-+              if (swl)
-+                      kfree(swl);
-+              return (QL_STATUS_ERROR);
-       }
-+      new_fcport->flags |= FC_FABRIC_DEVICE;
-+      new_fcport->flags |= FC_LOGIN_NEEDED;
-+
- #if defined(ISP2100)
--      ha->max_public_loop_ids = LAST_SNS_LOOP_ID - SNS_FIRST_LOOP_ID + 1;
-+      ha->max_public_loop_ids = SNS_LAST_LOOP_ID - SNS_FIRST_LOOP_ID + 1;
- #else
-       ha->max_public_loop_ids = MAX_PUBLIC_LOOP_IDS;
- #endif
-@@ -13887,84 +13554,74 @@ qla2x00_find_all_fabric_devs(scsi_qla_ho
- #endif
-       /* Set start port ID scan at adapter ID. */
--      dev.d_id.b24 = 0;
--      first_dev.d_id.b24 = 0;
--      wrap_around = FALSE ;   /* device list */
-+      swl_idx = 0;
-+      first_dev = 1;
-+      last_dev = 0;
--      new_cnt = 0;    /* new device count */
--
--      DEBUG2(printk(KERN_INFO "%s(%ld): use_gan=%d dpc_flags=0x%lx\n",
--          __func__, ha->host_no, use_gan, ha->dpc_flags);)
-+      DEBUG2(printk(KERN_INFO "%s(%ld): dpc_flags=0x%lx\n",
-+          __func__, ha->host_no, ha->dpc_flags);)
-       for (i = 0; 
-           i < public_count && !atomic_read(&ha->loop_down_timer) &&
-           !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)); i++) {
--              if( ! use_gan ){
--                      if (wrap_around){
--                              dev.d_id.b24 = first_dev.d_id.b24;
--                      }else{
--                              new_dev_list[device_index].ignore++;
--                              dev.d_id.b24 = 
--                                      new_dev_list[device_index].d_id.b24;
--                              memcpy(dev.name ,
--                                  new_dev_list[device_index].name, WWN_SIZE);
--                              memcpy(dev.wwn ,
--                                  new_dev_list[device_index].wwn, WWN_SIZE);
--
--                              /* Last Device */
--                              if ( new_dev_list[device_index].d_id.b.rsvd_1 
--                                  != 0) {
--                                      wrap_around = TRUE;
-+              if (swl != NULL) {
-+                      if (last_dev) {
-+                              wrap.b24 = new_fcport->d_id.b24;
-+                      } else {
-+                              new_fcport->d_id.b24 = swl[swl_idx].d_id.b24;
-+                              memcpy(new_fcport->node_name,
-+                                  swl[swl_idx].node_name, WWN_SIZE);
-+                              memcpy(new_fcport->port_name,
-+                                  swl[swl_idx].port_name, WWN_SIZE);
-+
-+                              if (swl[swl_idx].d_id.b.rsvd_1 != 0) {
-+                                      last_dev = 1;
-                               }
--                              device_index++;
-+                              swl_idx++;
-                       }
-               } else {
-                       /* Send GAN to the switch */
-                       rval = 0;
--                      if (qla2x00_gan(ha, sns, phys_addr, &dev)) {
-+                      if (qla2x00_gan(ha, sns, phys_addr, new_fcport)) {
-                               rval = rval | BIT_0;
-                               break;
-                       }
-               }
-               /* If wrap on switch device list, exit. */
--              if (dev.d_id.b24 == first_dev.d_id.b24)
-+              if (first_dev) {
-+                      wrap.b24 = new_fcport->d_id.b24;
-+                      first_dev = 0;
-+              } else if (new_fcport->d_id.b24 == wrap.b24){
-+                      DEBUG(printk("%s switch device list wrapped\n"
-+                          ,__func__);)
-                       break;
-+              }
-               DEBUG(printk("scsi(%ld): found fabric(%d) - "
-                               "port Id=%06x\n", 
-                               ha->host_no, 
-                               i, 
--                              dev.d_id.b24);)
--
--              if (first_dev.d_id.b24 == 0)
--                      first_dev.d_id.b24 = dev.d_id.b24;
-+                              new_fcport->d_id.b24);)
--              if(use_gan){
--                      /* If port type not equal to N or NL port, skip it. */
--                      if (sns->p.gan_rsp[16] != 1 
--                              && sns->p.gan_rsp[16] != 2) {
--                              continue;       /* needed for McData switch */
--                      }
--              }
-               /* Bypass if host adapter. */
--              if (dev.d_id.b24 == ha->d_id.b24)
-+              if (new_fcport->d_id.b24 == ha->d_id.b24)
-                       continue;
-               /* Bypass reserved domain fields. */
--              if ((dev.d_id.b.domain & 0xf0) == 0xf0)
-+              if ((new_fcport->d_id.b.domain & 0xf0) == 0xf0)
-                       continue;
-               /* Bypass if same domain and area of adapter. */
--              if ((dev.d_id.b24 & 0xffff00) == (ha->d_id.b24 & 0xffff00))
-+              if ((new_fcport->d_id.b24 & 0xffff00) ==
-+                  (ha->d_id.b24 & 0xffff00))
-                       continue;
--
- #if defined(FC_IP_SUPPORT)
-               /* Check for IP device */
--              if(use_gan){
-+              if(swl == NULL){
-                       if (sns->p.gan_rsp[579] & 0x20) {
-                               /* Found IP device */
-                               DEBUG12(printk("qla%ld: IP fabric WWN: "
-@@ -13982,179 +13639,100 @@ qla2x00_find_all_fabric_devs(scsi_qla_ho
-               }
- #endif
--              /* Bypass if initiator */
--              initiator = FALSE;
--              list_for_each(fcil, &ha->fcinitiators) {
--                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
--
--                      if (memcmp(dev.wwn, fcinitiator->port_name, 8) != 0)
-+              /* Locate matching device in database. */
-+              found = 0;
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-+                      if (memcmp(new_fcport->port_name, fcport->port_name,
-+                          WWN_SIZE))
-                               continue;
--                      initiator = TRUE;
--                      DEBUG(printk("qla%ld: found host "
--                          "%02x%02x%02x%02x%02x%02x%02x%02x, "
--                          "port Id=%06x\n",
--                          ha->instance,
--                          dev.name[0], dev.name[1],
--                          dev.name[2], dev.name[3],
--                          dev.name[4], dev.name[5],
--                          dev.name[6], dev.name[7], 
--                          dev.d_id.b24);)
-+                      found++;
-                       /*
--                       * If the initiator was marked as lost, perform the
--                       * required logout and relogin the initiator by
--                       * assuming a new device.
-+                       * If device was not a fabric device before.
-                        */
--                      if ((fcinitiator->loop_id & PORT_LOST_ID) == 0)
-+                      if ((fcport->flags & FC_FABRIC_DEVICE) == 0) {
-+                              fcport->d_id.b24 = new_fcport->d_id.b24;
-+                              fcport->loop_id = FC_NO_LOOP_ID;
-+                              fcport->flags |= FC_LOGIN_NEEDED;
-+                              fcport->flags |= FC_FABRIC_DEVICE;
-                               break;
--
--                      initiator = FALSE;
--                      break;
--              }
--
--              /* Bypass if initiator */
--              if (initiator)
--                      continue;
--              /* Locate matching device in database. */
--              for (index = 0; index < MAX_FIBRE_DEVICES; index++) {
--                      if (ha->fc_db[index].loop_id == PORT_UNUSED)
--                              continue;
--
--                      rval = 1;
--                      switch (ha->binding_type) {
--                              case BIND_BY_PORT_NAME:
--                                      rval = memcmp(dev.wwn,
--                                          ha->fc_db[index].wwn, WWN_SIZE);
--                                      break;
--
--                              case BIND_BY_PORT_ID:
--                                      rval = (dev.d_id.b24 !=
--                                          ha->fc_db[index].d_id.b24);
--                                      break;
--
--                              case BIND_BY_NODE_NAME:
--                                      rval = memcmp(dev.name,
--                                          ha->fc_db[index].name, WWN_SIZE);
--                                      break;
-                       }
--                      if (rval)
--                              continue;
-                       /*
--                       * Update volatile unbound fields for PortID binding
--                       * only
-+                       * If address the same and state FCS_ONLINE, nothing
-+                       * changed.
-                        */
--                      if (ha->binding_type == BIND_BY_PORT_ID) {
--                              memcpy(ha->fc_db[index].name,
--                                  dev.name, WWN_SIZE);
--                              memcpy(ha->fc_db[index].wwn,
--                                  dev.wwn, WWN_SIZE);
--                      }
--
--                      /* Now we found a matching device name */
--                      DEBUG(printk("qla%ld: found fabric dev %d in tgt %d "
--                          "db, flags= 0x%x, loop_id="
--                          "0x%04x, port=%06x, name="
--                          "%02x%02x%02x%02x%02x%02x%02x%02x\n",
--                          ha->instance,
--                          i, index,
--                          ha->fc_db[index].flag,
--                          ha->fc_db[index].loop_id,
--                          ha->fc_db[index].d_id.b24,
--                          dev.wwn[0], dev.wwn[1],
--                          dev.wwn[2], dev.wwn[3],
--                          dev.wwn[4], dev.wwn[5],
--                          dev.wwn[6], dev.wwn[7]);)
--
--                      if (!(ha->fc_db[index].flag & DEV_PUBLIC)) {
--                              /*
--                               * This was in our database as a local device.
--                               * Here we assume this device either has
--                               * changed location so configure_local_loop has
--                               * already done necessary clean up, or it's
--                               * saved here due to persistent name binding.
--                               * We'll just add it in as a fabric device.
--                               */
--                              /* Copy port id and name fields. */
--                              ha->fc_db[index].flag |= DEV_PUBLIC;
--                              ha->fc_db[index].d_id.b24 = dev.d_id.b24;
--                              ha->fc_db[index].loop_id |= PORT_LOGIN_NEEDED;
--
--                              break;
--                      }
--
--                      /* This was in our database as a fabric device. */
--                      if ((ha->fc_db[index].d_id.b24 == dev.d_id.b24) &&
--                              (ha->fc_db[index].loop_id <= LAST_SNS_LOOP_ID))
--                              /* Device didn't change */
--                              break;
--
--                      if (ha->fc_db[index].loop_id == PORT_AVAILABLE) {
--                              ha->fc_db[index].flag |= DEV_PUBLIC;
--                              ha->fc_db[index].d_id.b24 = dev.d_id.b24;
--                              ha->fc_db[index].loop_id |= PORT_LOGIN_NEEDED;
-+                      if (fcport->d_id.b24 == new_fcport->d_id.b24 &&
-+                          atomic_read(&fcport->state) == FC_ONLINE) {
-                               break;
-                       }
-                       /*
-                        * Port ID changed or device was marked to be updated;
--                       * logout and mark it for relogin later.
-+                       * Log it out if still logged in and mark it for
-+                       * relogin later.
-                        */
--                      qla2x00_fabric_logout(ha,
--                          ha->fc_db[index].loop_id & 0xff);
--
--                      ha->fc_db[index].flag |= DEV_PUBLIC;
--                      ha->fc_db[index].d_id.b24 = dev.d_id.b24;
--
--                      ha->fc_db[index].loop_id |= PORT_LOGIN_NEEDED;
--                      ha->fc_db[index].loop_id &= ~PORT_LOST_ID;
--
--                      *flags |= LOGOUT_PERFORMED;
-+                      fcport->d_id.b24 = new_fcport->d_id.b24;
-+                      fcport->flags |= FC_LOGIN_NEEDED;
-+                      if (fcport->loop_id != FC_NO_LOOP_ID &&
-+                          (fcport->flags & FC_TAPE_DEVICE) == 0 &&
-+                          fcport->port_type != FCT_INITIATOR &&
-+                          fcport->port_type != FCT_BROADCAST) {
-+                              qla2x00_fabric_logout(ha, fcport->loop_id);
-+                              fcport->loop_id = FC_NO_LOOP_ID;
-+                      }
-                       break;
-               }
--              if (index == MAX_FIBRE_DEVICES) {
--                      /*
--                       * Did not find a match in our database.  This is a new
--                       * device.
--                       */
--                      DEBUG3(printk("%s(): new device "
--                          "%02x%02x%02x%02x%02x%02x%02x%02x.\n",
--                          __func__,
--                          dev.wwn[0], dev.wwn[1], dev.wwn[2], dev.wwn[3],
--                          dev.wwn[4], dev.wwn[5], dev.wwn[6], dev.wwn[7]);) 
--
--                      if( use_gan){
--                              memcpy(&new_dev_list[new_cnt], &dev,
--                                      sizeof(struct new_dev));
--                      } else {
--                              new_dev_list[device_index-1].ignore = 0;
--                      }
--                      new_cnt++;
-+              if (found)
-+                      continue;
-+
-+              /* If device was not in our fcports list, then add it. */
-+              list_add_tail(&new_fcport->list, new_fcports);
-+              tmp_fcport = new_fcport;
-+
-+              /* Allocate a new replacement fcport. */
-+              new_fcport = qla2x00_alloc_fcport(ha, GFP_KERNEL);
-+              if (new_fcport == NULL) {
-+                      if (swl)
-+                              kfree(swl);
-+                      return (QL_STATUS_ERROR);
-               }
-+              new_fcport->flags |= FC_FABRIC_DEVICE;
-+              new_fcport->flags |= FC_LOGIN_NEEDED;
-+              new_fcport->d_id.b24 = tmp_fcport->d_id.b24;
-       }
--      if (use_gan) {
--              *new_dev_cnt = new_cnt;
--      } else {
--              *new_dev_cnt = device_index;
--      }
-+      if (swl)
-+              kfree(swl);
-+
-+      if (new_fcport)
-+              kfree(new_fcport);
--      if (new_cnt >  0)
-+      if (!list_empty(new_fcports))
-               ha->device_flags |= DFLG_FABRIC_DEVICES;
-       DEBUG(printk("%s(%ld): exit. rval=%d dpc_flags=0x%lx" 
--          " total_no_of_new_devices=%d. loop_down_timer=%i\n",
--           __func__,ha->host_no,rval,ha->dpc_flags,new_cnt,
-+          " loop_down_timer=%i\n",
-+           __func__,ha->host_no,rval,ha->dpc_flags,
-           atomic_read(&ha->loop_down_timer));)
-+      DEBUG2(printk(KERN_INFO "%s(%ld): exit. rval=%d dpc_flags=0x%lx" 
-+          " loop_down_timer=%i\n",
-+           __func__,ha->host_no,rval,ha->dpc_flags,
-+          atomic_read(&ha->loop_down_timer)));
-       LEAVE(__func__);
-       return (rval);
- }
-+
-+#if REG_FDMI_ENABLED
-+#include "qla_gs.c"
-+#endif
-+
- static __inline__ ms_iocb_entry_t *
- qla2x00_prep_ms_iocb(scsi_qla_host_t *, uint32_t, uint32_t);
- /**
-@@ -14188,12 +13766,12 @@ qla2x00_prep_ms_iocb(scsi_qla_host_t *ha
-       ms_pkt->rsp_bytecount = cpu_to_le32(rsp_size);
-       ms_pkt->req_bytecount = cpu_to_le32(req_size);
--      ms_pkt->dseg_req_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma));
--      ms_pkt->dseg_req_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma));
-+      ms_pkt->dseg_req_address[0] = cpu_to_le32(LSD(ha->ct_iu_dma));
-+      ms_pkt->dseg_req_address[1] = cpu_to_le32(MSD(ha->ct_iu_dma));
-       ms_pkt->dseg_req_length = ms_pkt->req_bytecount;
--      ms_pkt->dseg_rsp_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma));
--      ms_pkt->dseg_rsp_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma));
-+      ms_pkt->dseg_rsp_address[0] = cpu_to_le32(LSD(ha->ct_iu_dma));
-+      ms_pkt->dseg_rsp_address[1] = cpu_to_le32(MSD(ha->ct_iu_dma));
-       ms_pkt->dseg_rsp_length = ms_pkt->rsp_bytecount;
-       return (ms_pkt);
-@@ -14250,8 +13828,8 @@ qla2x00_register_fc4(scsi_qla_host_t *ha
-       memset(sns, 0, sizeof(sns_cmd_rsp_t));
-       wc = RFT_DATA_SIZE / 2;
-       sns->p.cmd.buffer_length = cpu_to_le16(wc);
--      sns->p.cmd.buffer_address[0] = cpu_to_le32(LS_64BITS(phys_addr));
--      sns->p.cmd.buffer_address[1] = cpu_to_le32(MS_64BITS(phys_addr));
-+      sns->p.cmd.buffer_address[0] = cpu_to_le32(LSD(phys_addr));
-+      sns->p.cmd.buffer_address[1] = cpu_to_le32(MSD(phys_addr));
-       sns->p.cmd.subcommand_length = __constant_cpu_to_le16(22);
-       sns->p.cmd.subcommand = __constant_cpu_to_le16(0x217);
-       wc = (RFT_DATA_SIZE - 16) / 4;
-@@ -14315,8 +13893,8 @@ qla2x00_register_fc4_feature(scsi_qla_ho
-       memset(sns, 0, sizeof(sns_cmd_rsp_t));
-       wc = RFF_DATA_SIZE / 2;
-       sns->p.cmd.buffer_length = cpu_to_le16(wc);
--      sns->p.cmd.buffer_address[0] = cpu_to_le32(LS_64BITS(phys_addr));
--      sns->p.cmd.buffer_address[1] = cpu_to_le32(MS_64BITS(phys_addr));
-+      sns->p.cmd.buffer_address[0] = cpu_to_le32(LSD(phys_addr));
-+      sns->p.cmd.buffer_address[1] = cpu_to_le32(MSD(phys_addr));
-       sns->p.cmd.subcommand_length = __constant_cpu_to_le16(8);
-       sns->p.cmd.subcommand = __constant_cpu_to_le16(0x21f);
-       wc = (RFF_DATA_SIZE - 16) / 4;
-@@ -14377,8 +13955,8 @@ qla2x00_register_nn(scsi_qla_host_t *ha,
-       memset(sns, 0, sizeof(sns_cmd_rsp_t));
-       wc = RNN_DATA_SIZE / 2;
-       sns->p.cmd.buffer_length = cpu_to_le16(wc);
--      sns->p.cmd.buffer_address[0] = cpu_to_le32(LS_64BITS(phys_addr));
--      sns->p.cmd.buffer_address[1] = cpu_to_le32(MS_64BITS(phys_addr));
-+      sns->p.cmd.buffer_address[0] = cpu_to_le32(LSD(phys_addr));
-+      sns->p.cmd.buffer_address[1] = cpu_to_le32(MSD(phys_addr));
-       sns->p.cmd.subcommand_length = __constant_cpu_to_le16(10);
-       sns->p.cmd.subcommand = __constant_cpu_to_le16(0x213);
-       wc = (RNN_DATA_SIZE - 16) / 4;
-@@ -14437,6 +14015,7 @@ qla2x00_register_snn(scsi_qla_host_t *ha
-       uint8_t         version[20];
-       ms_iocb_entry_t *ms_pkt;
-+      struct ct_sns_pkt       *ct_iu;
-       struct ct_sns_req       *ct_req;
-       struct ct_sns_rsp       *ct_rsp;
-       qla_boards_t    *bdp;
-@@ -14444,10 +14023,12 @@ qla2x00_register_snn(scsi_qla_host_t *ha
-       ENTER(__func__);
-       /* Get consistent memory allocated for MS IOCB */
--      ha->ms_iocb = pci_alloc_consistent(ha->pdev,
--                          sizeof(ms_iocb_entry_t), &ha->ms_iocb_dma);
-+      if (ha->ms_iocb == NULL){
-+              ha->ms_iocb = pci_alloc_consistent(ha->pdev,
-+                  sizeof(ms_iocb_entry_t), &ha->ms_iocb_dma);
-+      }
--      if( ha->ms_iocb == NULL){
-+      if (ha->ms_iocb == NULL){
-                /* error */
-               printk(KERN_WARNING
-                   "scsi(%ld): Memory Allocation failed - ms_iocb\n",
-@@ -14457,10 +14038,13 @@ qla2x00_register_snn(scsi_qla_host_t *ha
-       }
-       memset(ha->ms_iocb, 0, sizeof(ms_iocb_entry_t));
-  
--      /* Get consistent memory allocated for CT SNS commands */
--        ha->ct_sns = pci_alloc_consistent(ha->pdev,
--                          sizeof(struct ct_sns_pkt), &ha->ct_sns_dma);
--      if( ha->ct_sns == NULL){
-+      /* Get consistent memory allocated for CT SNS command */
-+      if (ha->ct_iu == NULL) {
-+              ha->ct_iu = pci_alloc_consistent(ha->pdev,
-+                  sizeof(struct ct_sns_pkt), &ha->ct_iu_dma);
-+      }
-+
-+      if( ha->ct_iu == NULL){
-                /* error */
-               printk(KERN_WARNING
-                   "scsi(%ld): Memory Allocation failed - ct_sns\n",
-@@ -14469,7 +14053,7 @@ qla2x00_register_snn(scsi_qla_host_t *ha
-               return (rval) ;
-       }
--        memset(ha->ct_sns, 0, sizeof(struct ct_sns_pkt));
-+        memset(ha->ct_iu, 0, sizeof(struct ct_sns_pkt));
-       /* Prepare common MS IOCB- Request size adjusted
-        * after CT preparation */
-@@ -14477,8 +14061,9 @@ qla2x00_register_snn(scsi_qla_host_t *ha
-       ms_pkt = qla2x00_prep_ms_iocb(ha, 0, RSNN_NN_RSP_SIZE);
-       /* Prepare CT request */
--      ct_req = &ha->ct_sns->p.req;
--      ct_rsp = &ha->ct_sns->p.rsp;
-+      ct_iu = (struct ct_sns_pkt *)ha->ct_iu;
-+      ct_req = &ct_iu->p.req;
-+      ct_rsp = &ct_iu->p.rsp;
-       /* Initialize Name Server CT-Command header */
-       qla2x00_prep_nsrv_ct_cmd_hdr(ct_req,RSNN_NN_CMD,RSNN_NN_RSP_SIZE);
-@@ -14528,11 +14113,11 @@ qla2x00_register_snn(scsi_qla_host_t *ha
-                   __func__ ,ha->host_no));
-       }
-       pci_free_consistent(ha->pdev,
--          sizeof(struct ct_sns_pkt), ha->ct_sns, ha->ct_sns_dma);
-+          sizeof(struct ct_sns_pkt), ha->ct_iu, ha->ct_iu_dma);
-       pci_free_consistent(ha->pdev,
-           sizeof(ms_iocb_entry_t), ha->ms_iocb, ha->ms_iocb_dma);
--      ha->ct_sns = NULL;
-+      ha->ct_iu = NULL;
-         ha->ms_iocb = NULL;
-       LEAVE(__func__);
-@@ -14562,7 +14147,7 @@ qla2x00_register_snn(scsi_qla_host_t *ha
-  */
- static uint8_t 
- qla2x00_gnn_ft(scsi_qla_host_t  *ha, sns_cmd_rsp_t  *sns, dma_addr_t phys_addr,
--                      struct  new_dev *new_dev_list , uint32_t protocol)
-+    sw_info_t *swl , uint32_t protocol)
- {
-       uint8_t         rval = BIT_0 ;
-       uint16_t        wc;
-@@ -14570,63 +14155,65 @@ qla2x00_gnn_ft(scsi_qla_host_t  *ha, sns
-       ENTER(__func__);
--      /* Retry GNNFT till valid list or retries exhausted- 
--       * Default value of retry_gnnft: 10
--       */
--      while( retry_count++ < retry_gnnft ) {
-+      /* Retry GNNFT till valid list or retries exhausted - Default value of
-+       * retry_gnnft: 10 */
-+      while (retry_count++ < retry_gnnft) {
-               /* Get Node Name and Port Id for device on SNS. */
-               memset(sns, 0, sizeof(sns_cmd_rsp_t));
-               wc = GNNFT_DATA_SIZE / 2;       /* Size in 16 bit words*/
-               sns->p.cmd.buffer_length = cpu_to_le16(wc);
--              sns->p.cmd.buffer_address[0] =
--                              cpu_to_le32(LS_64BITS(phys_addr));
--              sns->p.cmd.buffer_address[1] = 
--                              cpu_to_le32(MS_64BITS(phys_addr));
-+              sns->p.cmd.buffer_address[0] = cpu_to_le32(LSD(phys_addr));
-+              sns->p.cmd.buffer_address[1] = cpu_to_le32(MSD(phys_addr));
-               sns->p.cmd.subcommand_length = __constant_cpu_to_le16(6);
-               sns->p.cmd.subcommand = 
--                              __constant_cpu_to_le16(0x173);  /* GNN_FT */
-+                  __constant_cpu_to_le16(0x173);      /* GNN_FT */
-               wc = (GNNFT_DATA_SIZE - 16) / 4; /* Size in 32 bit words */
-               sns->p.cmd.size = cpu_to_le16(wc);
-               sns->p.cmd.param[0] =  protocol;        /* SCSI Type : 0x8 */
-               rval = BIT_0;
-               if (!qla2x00_send_sns(ha, phys_addr, GNNFT_CMD_SIZE / 2,
--                              sizeof(sns_cmd_rsp_t))) {
--                      if (sns->p.gnnft_rsp[8] == 0x80 
--                              && sns->p.gnnft_rsp[9] == 0x2) {
-+                  sizeof(sns_cmd_rsp_t))) {
-+                      if (sns->p.gnnft_rsp[8] == 0x80 &&
-+                          sns->p.gnnft_rsp[9] == 0x2) {
-                               uint32_t        i,j;
--                      /* Set port IDs and Node Name in new device list. */
--                              for (i = 16, j = 0; i < GNNFT_DATA_SIZE; 
--                                              i += 16, j++) {
--                                      new_dev_list[j].d_id.b.domain = 
--                                              sns->p.gnnft_rsp[i + 1];
--                                      new_dev_list[j].d_id.b.area = 
--                                              sns->p.gnnft_rsp[i + 2];
--                                      new_dev_list[j].d_id.b.al_pa = 
--                                              sns->p.gnnft_rsp[i + 3];
-+                              /*
-+                               * Set port IDs and Node Name in new device
-+                               * list.
-+                               */
-+                              for (i = 16, j = 0; i < GNNFT_DATA_SIZE;
-+                                  i += 16, j++) {
-+                                      swl[j].d_id.b.domain =
-+                                          sns->p.gnnft_rsp[i + 1];
-+                                      swl[j].d_id.b.area = 
-+                                          sns->p.gnnft_rsp[i + 2];
-+                                      swl[j].d_id.b.al_pa = 
-+                                          sns->p.gnnft_rsp[i + 3];
-                                       /* Extract Nodename */
--                                      memcpy(new_dev_list[j].name, 
--                                      &sns->p.gnnft_rsp[i + 8], WWN_SIZE);
-+                                      memcpy(swl[j].node_name,
-+                                          &sns->p.gnnft_rsp[i + 8], WWN_SIZE);
-+
-+                                      DEBUG2(printk(KERN_INFO
-+                                          "qla2x00: gnn_ft entry - "
-+                                          "nodename "
-+                                          "%02x%02x%02x%02x%02x%02x%02x%02x "
-+                                          "port Id=%06x\n",
-+                                          sns->p.gnnft_rsp[i+8],
-+                                          sns->p.gnnft_rsp[i+9],
-+                                          sns->p.gnnft_rsp[i+10],
-+                                          sns->p.gnnft_rsp[i+11],
-+                                          sns->p.gnnft_rsp[i+12],
-+                                          sns->p.gnnft_rsp[i+13],
-+                                          sns->p.gnnft_rsp[i+14],
-+                                          sns->p.gnnft_rsp[i+15],
-+                                          swl[j].d_id.b24));
--                                      DEBUG2(printk(KERN_INFO "qla2x00: gnn_ft entry - "
--                                              "nodename "
--                                      "%02x%02x%02x%02x%02x%02x%02x%02x "
--                                      "port Id=%06x\n",
--                                      sns->p.gnnft_rsp[i+8],
--                                      sns->p.gnnft_rsp[i+9],
--                                      sns->p.gnnft_rsp[i+10],
--                                      sns->p.gnnft_rsp[i+11],
--                                      sns->p.gnnft_rsp[i+12],
--                                      sns->p.gnnft_rsp[i+13],
--                                      sns->p.gnnft_rsp[i+14],
--                                      sns->p.gnnft_rsp[i+15],                                                         new_dev_list[j].d_id.b24);)
--                      
-                                       /* Last one exit. */
-                                       if (sns->p.gnnft_rsp[i] & BIT_7) {
--                                              new_dev_list[j].d_id.b.rsvd_1 = 
--                                                      sns->p.gnnft_rsp[i];
-+                                              swl[j].d_id.b.rsvd_1 = 
-+                                                  sns->p.gnnft_rsp[i];
-                                               rval = 0;
-                                               break;
-                                       }
-@@ -14634,15 +14221,17 @@ qla2x00_gnn_ft(scsi_qla_host_t  *ha, sns
-                               /* Successfully completed,no need to
-                                * retry any more */
-                               break;
--                      }else{
--                              DEBUG2(printk(KERN_INFO "%s(%ld): GNN_FT retrying"
--                                              "retry_count=%d\n",
--                                      __func__,ha->host_no,retry_count);)
--                      //      DEBUG2(qla2x00_dump_buffer(
--                      //                      (uint8_t *)sns->p.gnnft_rsp, 
--                      //                      GNNFT_DATA_SIZE);)
-+                      } else{
-+                              DEBUG2(printk(KERN_INFO
-+                                  "%s(%ld): GNN_FT retrying retry_count=%d\n",
-+                                  __func__,ha->host_no,retry_count));
-+
-+                              DEBUG5(qla2x00_dump_buffer(
-+                                  (uint8_t *)sns->p.gnnft_rsp,
-+                                  GNNFT_DATA_SIZE);)
-                       }
-               }
-+
-               /* Wait for 1ms before retrying */
-               udelay(10000);
-       } /* end of while */
-@@ -14655,7 +14244,6 @@ qla2x00_gnn_ft(scsi_qla_host_t  *ha, sns
-       LEAVE(__func__);
-       return (rval);
--
- }
- /*
-@@ -14675,8 +14263,8 @@ qla2x00_gnn_ft(scsi_qla_host_t  *ha, sns
-  *    Kernel context.
-  */
- static uint8_t 
--qla2x00_gpn_id(scsi_qla_host_t  *ha, sns_cmd_rsp_t *sns, dma_addr_t phys_addr,
--                      struct  new_dev *new_dev_list)
-+qla2x00_gpn_id(scsi_qla_host_t *ha, sns_cmd_rsp_t *sns, dma_addr_t phys_addr,
-+    sw_info_t *swl)
- {
-       uint8_t         rval = BIT_0 ;
-       uint16_t        wc;
-@@ -14691,10 +14279,10 @@ qla2x00_gpn_id(scsi_qla_host_t  *ha, sns
-                       memset(sns, 0, sizeof(sns_cmd_rsp_t));
-                       wc = GPN_DATA_SIZE / 2; /* Size in 16 bit words*/
-                       sns->p.cmd.buffer_length = cpu_to_le16(wc);
--                      sns->p.cmd.buffer_address[0] 
--                                      = cpu_to_le32(LS_64BITS(phys_addr));
--                      sns->p.cmd.buffer_address[1] 
--                                      = cpu_to_le32(MS_64BITS(phys_addr));
-+                      sns->p.cmd.buffer_address[0] =
-+                          cpu_to_le32(LSD(phys_addr));
-+                      sns->p.cmd.buffer_address[1] =
-+                          cpu_to_le32(MSD(phys_addr));
-                       sns->p.cmd.subcommand_length 
-                                       = __constant_cpu_to_le16(6);
-                       sns->p.cmd.subcommand 
-@@ -14703,45 +14291,46 @@ qla2x00_gpn_id(scsi_qla_host_t  *ha, sns
-                       wc = (GPN_DATA_SIZE - 16) / 4; 
-                                                /* Size in 32 bit words */
-                       sns->p.cmd.size = cpu_to_le16(wc);
--                      sns->p.cmd.param[0] = new_dev_list[i].d_id.b.al_pa;
--                      sns->p.cmd.param[1] = new_dev_list[i].d_id.b.area;
--                      sns->p.cmd.param[2] = new_dev_list[i].d_id.b.domain;
-+                      sns->p.cmd.param[0] = swl[i].d_id.b.al_pa;
-+                      sns->p.cmd.param[1] = swl[i].d_id.b.area;
-+                      sns->p.cmd.param[2] = swl[i].d_id.b.domain;
-                       rval = BIT_0;
-                       if (!qla2x00_send_sns(ha, phys_addr, GPN_CMD_SIZE / 2,
-                               sizeof(sns_cmd_rsp_t))) {
--                              if (sns->p.gpn_rsp[8] == 0x80 && 
--                                              sns->p.gpn_rsp[9] == 0x2) {
-+                              if (sns->p.gpn_rsp[8] == 0x80 &&
-+                                  sns->p.gpn_rsp[9] == 0x2) {
-                                       /* Extract Portname */
--                                      memcpy(new_dev_list[i].wwn, 
--                                              &sns->p.gpn_rsp[16], WWN_SIZE);
-+                                      memcpy(swl[i].port_name,
-+                                          &sns->p.gpn_rsp[16], WWN_SIZE);
--                                      DEBUG2(printk(KERN_INFO "qla2x00: gpn entry -"
--                                                      " portname "
--                                      "%02x%02x%02x%02x%02x%02x%02x%02x "
--                                      "port Id=%06x\n",
--                                      sns->p.gpn_rsp[16], sns->p.gpn_rsp[17],
--                                      sns->p.gpn_rsp[18], sns->p.gpn_rsp[19],
--                                      sns->p.gpn_rsp[20], sns->p.gpn_rsp[21],
--                                      sns->p.gpn_rsp[22], sns->p.gpn_rsp[23], 
--                                      new_dev_list[i].d_id.b24);)
-+                                      DEBUG2(printk(KERN_INFO
-+                                          "qla2x00: gpn entry - portname "
-+                                          "%02x%02x%02x%02x%02x%02x%02x%02x "
-+                                          "port Id=%06x\n",
-+                                          sns->p.gpn_rsp[16],
-+                                          sns->p.gpn_rsp[17],
-+                                          sns->p.gpn_rsp[18],
-+                                          sns->p.gpn_rsp[19],
-+                                          sns->p.gpn_rsp[20],
-+                                          sns->p.gpn_rsp[21],
-+                                          sns->p.gpn_rsp[22],
-+                                          sns->p.gpn_rsp[23],
-+                                          swl[i].d_id.b24);)
-                                       rval = 0;
-                                       break;
-                               }
--                      }else{
--                              DEBUG2(printk(KERN_INFO "%s(%ld): GPN_ID retrying"
--                                              "retry_count=%d\n",
--                              __func__,ha->host_no,retry_gpnid);)
--                      //      DEBUG2(qla2x00_dump_buffer(
--                                      //      (uint8_t *)sns->p.gpn_rsp, 
--                                      //      GPN_DATA_SIZE);)
-+                      } else {
-+                              DEBUG2(printk(KERN_INFO
-+                                  "%s(%ld): GPN_ID retrying retry_count=%d\n",
-+                                  __func__,ha->host_no,retry_gpnid);)
-                       }
-               } /* end of while */
-               /* Last one exit. */
--              if ( new_dev_list[i].d_id.b.rsvd_1 != 0) {
-+              if (swl[i].d_id.b.rsvd_1 != 0) {
-                       break;
-               }
-       } /* end of for */
-@@ -14772,9 +14361,8 @@ qla2x00_gpn_id(scsi_qla_host_t  *ha, sns
-  *    Kernel context.
-  */
- static uint8_t
--qla2x00_gan(scsi_qla_host_t *ha, 
--              sns_cmd_rsp_t *sns, 
--              dma_addr_t phys_addr, fcdev_t *dev) 
-+qla2x00_gan(scsi_qla_host_t *ha, sns_cmd_rsp_t *sns, dma_addr_t phys_addr,
-+    fc_port_t *fcport) 
- {
-       uint8_t         rval;
-       uint16_t        wc;
-@@ -14785,38 +14373,41 @@ qla2x00_gan(scsi_qla_host_t *ha, 
-       memset(sns, 0, sizeof(sns_cmd_rsp_t));
-       wc = GAN_DATA_SIZE / 2;
-       sns->p.cmd.buffer_length = cpu_to_le16(wc);
--      sns->p.cmd.buffer_address[0] = cpu_to_le32(LS_64BITS(phys_addr));
--      sns->p.cmd.buffer_address[1] = cpu_to_le32(MS_64BITS(phys_addr));
-+      sns->p.cmd.buffer_address[0] = cpu_to_le32(LSD(phys_addr));
-+      sns->p.cmd.buffer_address[1] = cpu_to_le32(MSD(phys_addr));
-       sns->p.cmd.subcommand_length = __constant_cpu_to_le16(6);
-       sns->p.cmd.subcommand = __constant_cpu_to_le16(0x100);  /* GA_NXT */
-       wc = (GAN_DATA_SIZE - 16) / 4;
-       sns->p.cmd.size = cpu_to_le16(wc);
--      sns->p.cmd.param[0] = dev->d_id.b.al_pa;
--      sns->p.cmd.param[1] = dev->d_id.b.area;
--      sns->p.cmd.param[2] = dev->d_id.b.domain;
-+      sns->p.cmd.param[0] = fcport->d_id.b.al_pa;
-+      sns->p.cmd.param[1] = fcport->d_id.b.area;
-+      sns->p.cmd.param[2] = fcport->d_id.b.domain;
-       rval = BIT_0;
-       if (!qla2x00_send_sns(ha, phys_addr, 14, sizeof(sns_cmd_rsp_t))) {
-               if (sns->p.gan_rsp[8] == 0x80 && sns->p.gan_rsp[9] == 0x2) {
--                      dev->d_id.b.al_pa = sns->p.gan_rsp[19];
--                      dev->d_id.b.area = sns->p.gan_rsp[18];
--                      dev->d_id.b.domain = sns->p.gan_rsp[17];
--                      dev->flag = DEV_PUBLIC;
-+                      fcport->d_id.b.al_pa = sns->p.gan_rsp[19];
-+                      fcport->d_id.b.area = sns->p.gan_rsp[18];
-+                      fcport->d_id.b.domain = sns->p.gan_rsp[17];
-+
-+                      memcpy(fcport->node_name, &sns->p.gan_rsp[284],
-+                          WWN_SIZE);
-+                      memcpy(fcport->port_name, &sns->p.gan_rsp[20],
-+                          WWN_SIZE);
--                      /* Save FC name */
--                      memcpy(dev->name, &sns->p.gan_rsp[284], WWN_SIZE);
--
--                      /* Extract portname */
--                      memcpy(dev->wwn, &sns->p.gan_rsp[20], WWN_SIZE);
-+                      /* If port type not equal to N or NL port, skip it. */
-+                      if (sns->p.gan_rsp[16] != 1 &&
-+                          sns->p.gan_rsp[16] != 2)
-+                              fcport->d_id.b.domain = 0xf0;
--                      DEBUG3(printk("qla2x00: gan entry - portname "
-+                      DEBUG2(printk(KERN_INFO "qla2x00: gan entry - portname "
-                                       "%02x%02x%02x%02x%02x%02x%02x%02x "
-                                       "port Id=%06x\n",
-                                       sns->p.gan_rsp[20], sns->p.gan_rsp[21],
-                                       sns->p.gan_rsp[22], sns->p.gan_rsp[23],
-                                       sns->p.gan_rsp[24], sns->p.gan_rsp[25],
-                                       sns->p.gan_rsp[26], sns->p.gan_rsp[27], 
--                                      dev->d_id.b24);)
-+                                      fcport->d_id.b24));
-                       rval = 0;
-               }
-       }
-@@ -14832,87 +14423,6 @@ qla2x00_gan(scsi_qla_host_t *ha, 
- }
- /*
-- * qla2x00_fabric_login
-- *    Issue fabric login command.
-- *
-- * Input:
-- *    ha = adapter block pointer.
-- *    device = pointer to FC device type structure.
-- *
-- * Returns:
-- *      0 - Login successfully
-- *      1 - Login failed
-- *      2 - Initiator device
-- *      3 - Fatal error
-- */
--static uint8_t
--qla2x00_fabric_login(scsi_qla_host_t *ha, fcdev_t *device) 
--{
--      uint16_t        status[3];
--
--      for (;;) {
--              DEBUG(printk("scsi(%ld): Trying Fabric Login w/loop id 0x%04x "
--                  "for port %06x\n",
--                  ha->host_no, device->loop_id, device->d_id.b24);)
--
--              /* Login device on switch. */
--              qla2x00_login_fabric(ha,
--                  device->loop_id, device->d_id.b.domain,
--                  device->d_id.b.area, device->d_id.b.al_pa, 
--                  &status[0], BIT_0);
--              if( status[0] != 0x4000)
--                      DEBUG2(printk(KERN_INFO "%s mbx[0]=0x%x mbx[1]=0x%x\n"
--                              ,__func__,status[0],status[1]);)
--              if (status[0] == 0x4007) {
--                      ha->fabricid[device->loop_id].in_use = FALSE;
--                      device->loop_id = status[1];
--
--                      DEBUG(printk("Fabric Login: port in use - next "
--                          "loop id=0x%04x, port Id=%06x\n",
--                          device->loop_id, device->d_id.b24);)
--
--                      if (device->loop_id <= LAST_SNS_LOOP_ID)
--                              ha->fabricid[device->loop_id].in_use = TRUE;
--                      else
--                              return 1;
--
--              } else if (status[0] == 0x4000) {
--                      if (status[1] & 0x0001) {
--                              /* Initiator only device */
--                              qla2x00_add_initiator_device(ha, device);
--
--                              return 2;
--                      }
--
--                      /* This is target capable device */
--                      qla2x00_get_port_database(ha, device, 0);
--
--                      DEBUG(printk("scsi(%ld): Fabric Login OK. loop "
--                          "id=0x%04x, port Id=%06x\n",
--                          ha->host_no, device->loop_id, device->d_id.b24);)
--                      return 0;
--
--              } else if (status[0] == 0x4008) {
--
--                      if (device->loop_id++ <= LAST_SNS_LOOP_ID)
--                              ha->fabricid[device->loop_id].in_use = TRUE;
--                      else
--                              return 1;
--
--              } else if (status[0] == 0x4006) {
--                      /* No more retry needed. */
--                      return 3;
--              } else {
--                      DEBUG(printk("%s(%ld): failed=%x port_id=%06x "
--                          "loop_id=%x jiffies=%lx.\n", 
--                          __func__, ha->host_no, status[0], 
--                          device->d_id.b24, device->loop_id, jiffies);)
--                      return 1;
--              }
--      }
--}
--
--/*
-  * qla2x00_local_device_login
-  *    Issue local device login command.
-  *
-@@ -14944,64 +14454,6 @@ qla2x00_local_device_login(scsi_qla_host
-       return rval;
- }
--
--/*
-- * qla2x00_configure_fcports
-- *    Updates Fibre Channel port database
-- *
-- * Input:
-- *    ha = adapter block pointer.
-- *
-- * Returns:
-- *    0 = success.
-- *    1 = error.
-- */
--static uint8_t
--qla2x00_configure_fcports( scsi_qla_host_t *ha )
--{
--      uint8_t  rval = 0;
--      uint8_t  rval1;
--
--      rval1 = qla2x00_build_fcport_list(ha);
--      if (((rval1 & BIT_0) || 
--              ha->mem_err != 0) && 
--              ha->sns_retry_cnt < 8 ) {
--
--              ha->sns_retry_cnt++;
--              set_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags);
--      }
--
--      if(!ha->flags.failover_enabled)
--              qla2x00_config_os(ha);
--
--      /* If we found all devices then go ready */
--      if (!(test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags))) {
--              ha->loop_state = LOOP_READY;
--
--              if (ha->flags.failover_enabled) {
--                      DEBUG(printk("%s(%ld): schedule "
--                                      "FAILBACK EVENT\n", 
--                                      __func__,
--                                      ha->host_no);)
--                      if (!(test_and_set_bit(FAILOVER_EVENT_NEEDED,
--                                              &ha->dpc_flags))) {
--                              ha->failback_delay = failbackTime;
--                      }
--                      set_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
--                      ha->failover_type = MP_NOTIFY_LOOP_UP;
--              }
--
--              DEBUG2(printk("%s(%ld): LOOP READY\n", 
--                                      __func__,
--                                      ha->host_no);)
--      } else {
--              rval = 1;
--      }
--
--      return(rval);
--}
--
--
- /*
-  * qla2x00_configure_loop
-  *      Updates Fibre Channel Device Database with what is actually on loop.
-@@ -15010,7 +14462,6 @@ qla2x00_configure_fcports( scsi_qla_host
-  *      ha                = adapter block pointer.
-  *
-  * Output:
-- *      ha->fc_db = updated
-  *
-  * Returns:
-  *      0 = success.
-@@ -15022,15 +14473,13 @@ qla2x00_configure_loop(scsi_qla_host_t *
- {
-       uint8_t  rval = 0;
-       uint8_t  rval1 = 0;
--      uint8_t  enable_slot_reuse = FALSE;
--      uint16_t  cnt;
--      static unsigned long  flags, save_flags;
-+      unsigned long  flags, save_flags;
- #if defined(FC_IP_SUPPORT)
-       struct ip_device        *ipdev;
- #endif
-+      unsigned long sflags;
-       DEBUG3(printk("%s(%ld): entered\n", __func__, ha->host_no);)
--      DEBUG(printk("scsi%ld: Enter %s():\n", ha->host_no, __func__);)
-       /* Get Initiator ID */
-       if (qla2x00_configure_hba(ha)) {
-@@ -15046,17 +14495,19 @@ qla2x00_configure_loop(scsi_qla_host_t *
-               ipdev->flags &= ~IP_DEV_FLAG_PRESENT;
- #endif /* FC_IP_SUPPORT */
--      save_flags = flags = ha->dpc_flags;
--      DEBUG(printk("%s(): dpc flags =0x%lx\n", __func__, flags);)
--
--      /* dg 02/26/02 ha->dpc_flags &= ~(LOCAL_LOOP_UPDATE | RSCN_UPDATE); */
-+      
-+      DEBUG(printk("%s(): dpc flags =0x%lx\n", __func__, ha->dpc_flags);)
-+      spin_lock_irqsave(&ha->hardware_lock, sflags);
-+      save_flags = flags = ha->dpc_flags;
-       /*
-        * If we have both an RSCN and PORT UPDATE pending then handle them
-        * both at the same time.
-        */
-       clear_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
-       clear_bit(RSCN_UPDATE, &ha->dpc_flags);
-+      spin_unlock_irqrestore(&ha->hardware_lock, sflags);
-+
-       ha->mem_err = 0 ;
-       /* Determine what we need to do */
-@@ -15084,56 +14535,53 @@ qla2x00_configure_loop(scsi_qla_host_t *
-       do {
-               if (test_bit(LOCAL_LOOP_UPDATE, &flags)) {
-                       rval = rval | 
--                              qla2x00_configure_local_loop(ha,
--                                      enable_slot_reuse);
-+                              qla2x00_configure_local_loop(ha);
-               }
-               if (test_bit(RSCN_UPDATE, &flags)) {
--                      rval1 = qla2x00_configure_fabric(ha, enable_slot_reuse);
-+                      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 devices not configured first time try reusing slots.*/
--              if (enable_slot_reuse == FALSE && (rval & BIT_1))
--                      enable_slot_reuse = TRUE;
--              else
--                      enable_slot_reuse = FALSE;
--
-               /* Isolate error status. */
-               if (rval & BIT_0) {
-                       rval = 1;
-               } else {
--                      rval = 0;
-+                      rval = QLA2X00_SUCCESS;
-               }
--      } while (enable_slot_reuse == TRUE && rval == 0);
-+      } while (rval != QLA2X00_SUCCESS);
-       if (!atomic_read(&ha->loop_down_timer) && 
-               !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))) {
--              /* Mark devices that are not present as DEV_ABSENCE */
--              for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
--                      if (ha->fc_db[cnt].loop_id & PORT_LOST_ID) {
--                              ha->fc_db[cnt].flag |= DEV_ABSENCE;
--                      } else {
--                              /* device returned */
--                              if (ha->fc_db[cnt].loop_id <=
--                                              LAST_SNS_LOOP_ID && 
--                                      ha->fc_db[cnt].flag & DEV_ABSENCE) {
--
--                                      ha->fc_db[cnt].flag &= ~DEV_ABSENCE;
--                                      ha->fc_db[cnt].flag |= DEV_RETURN;
--                                      ha->fc_db[cnt].port_login_retry_count =
--                                              ha->port_down_retry_count *
--                                               PORT_RETRY_TIME;
-+              if (!ha->flags.failover_enabled)
-+                      qla2x00_config_os(ha);
-+
-+              /* If we found all devices then go ready */
-+              if (!(test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags))) {
-+                      atomic_set(&ha->loop_state, LOOP_READY);
-+                      if (ha->flags.failover_enabled) {
-+                              DEBUG(printk("%s(%ld): schedule "
-+                                              "FAILBACK EVENT\n", 
-+                                              __func__,
-+                                              ha->host_no);)
-+                              if (!(test_and_set_bit(FAILOVER_EVENT_NEEDED,
-+                                                      &ha->dpc_flags))) {
-+                                      ha->failback_delay = failbackTime;
-                               }
-+                              set_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
-+                              ha->failover_type = MP_NOTIFY_LOOP_UP;
-                       }
--              }
--              if ( qla2x00_configure_fcports( ha ) ) {
-+                      DEBUG2(printk("%s(%ld): LOOP READY\n", 
-+                                              __func__,
-+                                              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))
-@@ -15158,6 +14606,14 @@ qla2x00_configure_loop(scsi_qla_host_t *
-               DEBUG3(printk("%s: exiting normally\n", __func__);)
-       }
-+      /* Restore state if a resync event occured during processing */
-+      if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) {
-+              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);
-+      }
-+
-       return(rval);
- }
-@@ -15177,92 +14633,25 @@ qla2x00_config_os(scsi_qla_host_t *ha) 
- {
-       fc_port_t       *fcport;
-       fc_lun_t        *fclun;
--      os_lun_t        *lq;
--      uint16_t        t, l;
--
-       DEBUG3(printk("%s(%ld): entered.\n", __func__, ha->host_no);)
--      for (fcport = ha->fcport; fcport != NULL; fcport = fcport->next) {
--              /* Allocate target */
--#if 0
--              if (fcport->loop_id == FC_NO_LOOP_ID)
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-+              if (atomic_read(&fcport->state) != FC_ONLINE ||
-+                  fcport->port_type == FCT_INITIATOR ||
-+                  fcport->port_type == FCT_BROADCAST) {
-+                      fcport->dev_id = MAX_TARGETS;
-                       continue;
--#endif
--
--              /* Bind fcport to target number. */
--              DEBUG5(printk("%s(%ld): fcport bind= %p\n",
--                              __func__,
--                              ha->host_no,fcport);)
-+              }
--              if ((t = qla2x00_fcport_bind(ha, fcport)) == MAX_TARGETS)
-+              /* Bind FC port to OS target number. */
-+              if (qla2x00_fcport_bind(ha, fcport) == MAX_TARGETS) {
-                       continue;
-+              }
--#if VSA
--              if( (ha->fc_db[t].flag & DEV_FLAG_VSA) )
--                      fcport->flags |= FC_VSA;
--#endif
--              DEBUG5(printk("%s(%ld): going to alloc lun for tgt %d. mask="
--                              "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
--                              "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
--                              "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
--                              ".\n",
--                              __func__,
--                              ha->host_no, 
--                              t, 
--                              fcport->lun_mask.mask[0],
--                              fcport->lun_mask.mask[1],
--                              fcport->lun_mask.mask[2],
--                              fcport->lun_mask.mask[3],
--                              fcport->lun_mask.mask[4],
--                              fcport->lun_mask.mask[5],
--                              fcport->lun_mask.mask[6],
--                              fcport->lun_mask.mask[7],
--                              fcport->lun_mask.mask[8],
--                              fcport->lun_mask.mask[9],
--                              fcport->lun_mask.mask[10],
--                              fcport->lun_mask.mask[11],
--                              fcport->lun_mask.mask[12],
--                              fcport->lun_mask.mask[13],
--                              fcport->lun_mask.mask[14],
--                              fcport->lun_mask.mask[15],
--                              fcport->lun_mask.mask[16],
--                              fcport->lun_mask.mask[17],
--                              fcport->lun_mask.mask[18],
--                              fcport->lun_mask.mask[19],
--                              fcport->lun_mask.mask[20],
--                              fcport->lun_mask.mask[21],
--                              fcport->lun_mask.mask[22],
--                              fcport->lun_mask.mask[23],
--                              fcport->lun_mask.mask[24],
--                              fcport->lun_mask.mask[25],
--                              fcport->lun_mask.mask[26],
--                              fcport->lun_mask.mask[27],
--                              fcport->lun_mask.mask[28],
--                              fcport->lun_mask.mask[29],
--                              fcport->lun_mask.mask[30],
--                              fcport->lun_mask.mask[31]);)
--
--              /* Allocate LUNs */
--              for (fclun = fcport->fclun;
--                      fclun != NULL; fclun = fclun->next) {
--
--                      l = fclun->lun;         /* Must not exceed MAX_LUN */
--
--                      /*
--                       * Always alloc LUN 0 so kernel will scan past LUN 0.
--                       */
--                      if (l != 0 &&
--                              (EXT_IS_LUN_BIT_SET(&(fcport->lun_mask), l))) {
--
--                              /* mask this LUN */
--                              continue;
--                      }
--
--                      if ((lq = qla2x00_lun_alloc(ha, t, l)) == NULL)
--                              continue;
--
--                      lq->fclun = fclun;
-+              /* Bind FC LUN to OS LUN number. */
-+              list_for_each_entry(fclun, &fcport->fcluns, list) {
-+                      qla2x00_fclun_bind(ha, fcport, fclun);
-               }
-       }
-@@ -15286,445 +14675,162 @@ qla2x00_config_os(scsi_qla_host_t *ha) 
- static uint16_t
- qla2x00_fcport_bind(scsi_qla_host_t *ha, fc_port_t *fcport) 
- {
--      int             rval;
--      uint16_t        t;
-+      uint16_t        tgt;
-       os_tgt_t        *tq;
-+      uint8_t         rval;
--      ENTER(__func__);
--
--      /* Check for tgt already allocated for persistent binding. */
--      for (t = 0; t < MAX_TARGETS; t++) {
--              if ((tq = TGT_Q(ha, t)) == NULL)
-+      /* Check for persistent binding. */
-+      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+              if ((tq = TGT_Q(ha, tgt)) == NULL)
-                       continue;
--
--              rval = 0;
-+              rval = 1;
-               switch (ha->binding_type) {
--                      case BIND_BY_PORT_NAME:
--                              rval = memcmp(fcport->port_name,
--                                              tq->port_name, WWN_SIZE);
--                              break;
--
-                       case BIND_BY_PORT_ID:
--                              rval = (fcport->d_id.b24 != tq->d_id.b24);
--                              break;
-+                              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);
-+                                      rval = 0;
-+                              }
-+                          break;
--                      case BIND_BY_NODE_NAME:
--                              rval = memcmp(fcport->node_name,
--                                              tq->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);
-+                                      rval = 0;
-+                              }
-                               break;
-               }
--              /* Found a persistently bound match */
--              if (rval == 0)
--                      break;
-+              if(rval == 0)
-+                  break;      
-       }
--      if (fcport->loop_id == FC_NO_LOOP_ID) {
--              DEBUG(tq = TGT_Q(ha, t);)
--              DEBUG(printk("scsi%ld: Missing target ID %02x @ %p to "
--                              "loop id: %04x, port state=0x%x, "
--                              "port down retry=%d\n",
--                              ha->host_no,
--                              t,
--                              tq,
--                              fcport->loop_id,
--                              atomic_read(&fcport->state),
--                              atomic_read(&fcport->port_down_timer));)
--              return (MAX_TARGETS);
-+      if ( ConfigRequired == 0 && tgt == MAX_TARGETS) {
-+              /* Check if targetID 0 available. */
-+              tgt = 0;
-+
-+              if (TGT_Q(ha, tgt) != NULL) {
-+                      /* Locate first free target for device. */
-+                      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+                              if (TGT_Q(ha, tgt) == NULL) {
-+                                      break;
-+                              }
-+                      }
-+              }
-+              if (tgt != MAX_TARGETS) {
-+                      if ((tq = qla2x00_tgt_alloc(ha, tgt)) != NULL) {
-+                              memcpy(tq->node_name, fcport->node_name,
-+                                  WWN_SIZE);
-+                              memcpy(tq->port_name, fcport->port_name,
-+                                  WWN_SIZE);
-+                              tq->d_id.b24 = fcport->d_id.b24;
-+                      }
-+              }
-       }
--      if (t != MAX_TARGETS) {
--              tq = TGT_Q(ha, t);
-+      /* Reset target numbers incase it changed. */
-+      fcport->dev_id = tgt;
-+      if (tgt != MAX_TARGETS && tq != NULL) {
-+              DEBUG2(printk("scsi(%ld): Assigning target ID=%02d @ %p to "
-+                  "loop id=0x%04x, port state=0x%x, port down retry=%d\n",
-+                  ha->host_no, tgt, tq, fcport->loop_id,
-+                  atomic_read(&fcport->state),
-+                  atomic_read(&fcport->port_down_timer)));
-+
-               tq->vis_port = fcport;
-+              tq->port_down_retry_count = ha->port_down_retry_count;
--              DEBUG(printk("scsi%ld: Assigning target ID %02x @ %p to "
--                              "loop id: %04x, port state=0x%x, "
--                              "port down retry=%d\n",
--                              ha->host_no,
--                              t,
--                              tq,
--                              fcport->loop_id,
--                              atomic_read(&fcport->state),
--                              atomic_read(&fcport->port_down_timer));)
--              return (t);
-+              if (!ha->flags.failover_enabled)
-+                      qla2x00_get_lun_mask_from_config(ha, fcport, tgt, 0);
-       }
--      /* Check for persistent binding not yet configured. */
--      for (t = 0; t < MAX_TARGETS; t++) {
--              rval = 0;
--              switch (ha->binding_type) {
--                      case BIND_BY_PORT_NAME:
--                              rval = memcmp(fcport->port_name,
--                                              ha->fc_db[t].wwn, WWN_SIZE);
--                              break;
-+      if ( ConfigRequired == 0 && tgt == MAX_TARGETS) {
-+              printk(KERN_WARNING
-+                  "scsi(%ld): Unable to bind fcport, loop_id=%x\n",
-+                  ha->host_no, fcport->loop_id);
-+      }
--                      case BIND_BY_PORT_ID:
--                              rval = (fcport->d_id.b24 !=
--                                              ha->fc_db[t].d_id.b24);
--                              break;
-+      return (tgt);
-+}
--                      case BIND_BY_NODE_NAME:
--                              rval = memcmp(fcport->node_name,
--                                              ha->fc_db[t].name, WWN_SIZE);
--                              break;
--              }
--              /* Found not-yet-allocated target at t */
--              if (rval == 0)
--                      break;
--      }
-+/*
-+ * qla2x00_fclun_bind
-+ *    Binds all FC device LUNS to OS LUNS.
-+ *
-+ * Input:
-+ *    ha:             adapter state pointer.
-+ *    fcport:         FC port structure pointer.
-+ *
-+ * Returns:
-+ *    target number
-+ *
-+ * Context:
-+ *    Kernel context.
-+ */
-+static os_lun_t *
-+qla2x00_fclun_bind(scsi_qla_host_t *ha, fc_port_t *fcport, fc_lun_t *fclun)
-+{
-+      os_lun_t        *lq;
-+      uint16_t        tgt;
-+      uint16_t        lun;
--      if (t == MAX_TARGETS) {
--              /* Check if slot at loop ID is available. */
--              t = fcport->loop_id;
--              if (TGT_Q(ha, t) != NULL) {
--                      /* Locate first free target id in db for device. */
--                      for (t = 0; t < MAX_TARGETS; t++) {
--                              if (TGT_Q(ha, t) == NULL)
--                                      break;
--                      }
--              }
-+      tgt = fcport->dev_id;
-+      lun = fclun->lun;
-+
-+      /* Allocate LUNs */
-+      if (lun >= MAX_LUNS) {
-+              DEBUG2(printk("scsi(%ld): Unable to bind lun, invalid "
-+                  "lun=(%x).\n", ha->host_no, lun));
-+              return (NULL);
-       }
--      if (t != MAX_TARGETS) {
--              tq = qla2x00_tgt_alloc(ha, t);
--              if (tq != NULL) {
--                      memcpy(tq->port_name, fcport->port_name, WWN_SIZE);
--                      tq->d_id.b24 = fcport->d_id.b24;
--                      memcpy(tq->node_name, fcport->node_name, WWN_SIZE);
--              }
--              else
--                      t = MAX_TARGETS;
-+      /* Always alloc LUN 0 so kernel will scan past LUN 0. */
-+      if (lun != 0 && (EXT_IS_LUN_BIT_SET(&(fcport->lun_mask), lun))) {
-+              return (NULL);
-       }
--      if (t == MAX_TARGETS) {
-+      if ((lq = qla2x00_lun_alloc(ha, tgt, lun)) == NULL) {
-               printk(KERN_WARNING
--                      "%s(): **** FAILED ****", __func__);
--      } else {
--              if (!ha->flags.failover_enabled) {
--                      /* fcport IS the visible port in non-failover mode */
--                      tq = TGT_Q(ha, t);
--                      tq->vis_port = fcport;
--              }
--
--              DEBUG(tq = TGT_Q(ha, t);)
--              DEBUG(printk("scsi%ld: Assigning target ID %02x @ %p to "
--                              "loop id: %04x, port state=0x%x, "
--                              "port down retry=%d\n",
--                              ha->host_no,
--                              t,
--                              tq,
--                              fcport->loop_id,
--                              atomic_read(&fcport->state),
--                              atomic_read(&fcport->port_down_timer));)
-+                  "scsi(%ld): Unable to bind fclun, loop_id=%x lun=%x\n",
-+                  ha->host_no, fcport->loop_id, lun);
-+              return (NULL);
-       }
--      LEAVE(__func__);
-+      lq->fclun = fclun;
--      return (t);
-+      return (lq);
- }
- /*
-- * qla2x00_build_fcport_list
-- *    Updates device on list.
-+ * qla2x00_mark_device_lost
-+ *    Updates fcport state when device goes offline.
-  *
-  * Input:
-  *    ha = adapter block pointer.
-  *    fcport = port structure pointer.
-  *
-  * Return:
-- *    0  - Success
-- *  BIT_0 - error
-+ *    None.
-  *
-  * Context:
-- *    Kernel context.
-  */
--static int 
--qla2x00_build_fcport_list(scsi_qla_host_t *ha) 
-+STATIC void
-+qla2x00_mark_device_lost(scsi_qla_host_t *ha, fc_port_t *fcport, int do_login) 
- {
--      int     rval;
--      fcdev_t         *dev;
--      int     found = 0;
--      int cnt, i;
--      fc_port_t       *fcport;
--      fc_port_t       *prev_fcport;
--
--      ENTER(__func__);
--
--      for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
--              dev = &ha->fc_db[cnt];
--
--              /* Skip if zero port name */
--              if (qla2x00_is_wwn_zero(dev->wwn)) {
--                      continue;
--              }
--
--              DEBUG3(printk("%s(%ld): found tgt %d in fc_db.\n",
--                              __func__, ha->host_no, cnt);)
--
--              /* Check for matching device in port list. */
--              found = 0;
--              prev_fcport = NULL;
--              for (i=0, fcport = ha->fcport; 
--                      fcport != NULL;
--                      fcport = fcport->next, i++) {
--
--                      rval = 1;
--                      switch (ha->binding_type) {
--                              case BIND_BY_PORT_NAME:
--                                      rval = memcmp(dev->wwn,
--                                                      fcport->port_name,
--                                                      WWN_SIZE);
--                                      break;
--
--                              case BIND_BY_PORT_ID:
--                                      rval = (dev->d_id.b24 !=
--                                               fcport->d_id.b24);
--                                      break;
--
--                              case BIND_BY_NODE_NAME:
--                                      rval = memcmp(dev->name,
--                                                      fcport->node_name,
--                                                      WWN_SIZE);
--                                      break;
--                      }
--                      if (rval) {
--                              prev_fcport = fcport;
--                              continue;
--                      }
--
--                      /*
--                       * Update volatile unbound fields for PortID binding
--                       * only
--                       */
--                      if (ha->binding_type == BIND_BY_PORT_ID) {
--                              memcpy(fcport->node_name, dev->name, WWN_SIZE);
--                              memcpy(fcport->port_name, dev->wwn, WWN_SIZE);
--                      }
--
--                      DEBUG(printk("%s(%ld): Found matching port %06x, "
--                                      "device flags= 0x%x\n",
--                                      __func__,ha->host_no,
--                                      dev->d_id.b24, 
--                                      dev->flag);)
--
--                      /* if device found is missing then mark it */
--                      if (dev->flag & DEV_ABSENCE) {
--                              DEBUG(printk("%s(%ld): Port missing ---  "
--                                              "(port_name) -> "
--                                              "%02x%02x%02x%02x%02x"
--                                              "%02x%02x%02x, "
--                                              "loop id = 0x%04x\n",
--                                              __func__,ha->host_no,
--                                              fcport->port_name[0],
--                                              fcport->port_name[1],
--                                              fcport->port_name[2],
--                                              fcport->port_name[3],
--                                              fcport->port_name[4],
--                                              fcport->port_name[5],
--                                              fcport->port_name[6],
--                                              fcport->port_name[7],
--                                              fcport->loop_id);)
--
--                              fcport->loop_id = FC_NO_LOOP_ID;
--
--                              qla2x00_mark_device_lost(ha, fcport);
--
--                              found++;
--                              break;
--                      }
--
--                      /* if device was missing but returned */
--                      if (fcport->loop_id == FC_NO_LOOP_ID ||
--                              !(dev->flag & DEV_PUBLIC) ||
--                              atomic_read(&fcport->state) != FC_ONLINE) {
--
--                              DEBUG(printk("%s(): Port returned +++  "
--                                              "(port_name) -> "
--                                              "%02x%02x%02x%02x%02x"
--                                              "%02x%02x%02x, "
--                                              "loop id = 0x%04x\n",
--                                              __func__,
--                                              fcport->port_name[0],
--                                              fcport->port_name[1],
--                                              fcport->port_name[2],
--                                              fcport->port_name[3],
--                                              fcport->port_name[4],
--                                              fcport->port_name[5],
--                                              fcport->port_name[6],
--                                              fcport->port_name[7],
--                                              fcport->loop_id);)
--
--                              fcport->loop_id = dev->loop_id;
--                              fcport->old_loop_id = dev->loop_id;
--                              fcport->d_id.b24 = dev->d_id.b24;
--
--                              break;
--                      }
--
--                      DEBUG(printk("%s(): Match - fcport[%d] = fc_db[%d] "
--                                      "(ignored) -> "
--                                      "%02x%02x%02x%02x%02x%02x%02x%02x, "
--                                      "loop id = 0x%04x\n",
--                                      __func__,
--                                      i, 
--                                      cnt,
--                                      fcport->port_name[0],
--                                      fcport->port_name[1],
--                                      fcport->port_name[2],
--                                      fcport->port_name[3],
--                                      fcport->port_name[4],
--                                      fcport->port_name[5],
--                                      fcport->port_name[6],
--                                      fcport->port_name[7],
--                                      fcport->loop_id);)
--                      found++;
--                      break;
--              }
--              if (found)
--                      continue;
--
--              /* Add device to port list. */
--              if (fcport == NULL) {
--                      DEBUG3(printk("%s(%ld): adding new device to list.\n",
--                                      __func__,
--                                      ha->host_no);)
--
--                      fcport = kmalloc(sizeof(fc_port_t), GFP_ATOMIC);
--                      if (fcport == NULL)
--                              break;
--
--                      memset(fcport, 0, sizeof(fc_port_t));
--
--                      /* copy fields into fcport */
--                      memcpy(fcport->port_name, dev->wwn, WWN_SIZE);
--                      memcpy(fcport->node_name, dev->name, WWN_SIZE);
--
--                      fcport->dev_id = cnt;
--
--                      if (dev->flag & DEV_ABSENCE) {
--                              DEBUG(printk("%s(): Port missing --- "
--                                              "(port_name) -> "
--                                              "%02x%02x%02x%02x"
--                                              "%02x%02x%02x%02x, "
--                                              "loop id = 0x%04x\n",
--                                              __func__,
--                                              fcport->port_name[0],
--                                              fcport->port_name[1],
--                                              fcport->port_name[2],
--                                              fcport->port_name[3],
--                                              fcport->port_name[4],
--                                              fcport->port_name[5],
--                                              fcport->port_name[6],
--                                              fcport->port_name[7],
--                                              fcport->loop_id);)
--
--                              fcport->loop_id = FC_NO_LOOP_ID;
--
--                              qla2x00_mark_device_lost(ha, fcport);
--                      } else {
--                              fcport->loop_id = dev->loop_id;
--                              fcport->old_loop_id = dev->loop_id;
--                      }
--
--                      fcport->d_id.b24 = dev->d_id.b24;
--
--                      DEBUG(printk("%s(): New Device +++ (port_name) -> "
--                                      "%02x%02x%02x%02x%02x%02x%02x%02x, "
--                                      "loop id = 0x%04x\n",
--                                      __func__,
--                                      fcport->port_name[0],
--                                      fcport->port_name[1],
--                                      fcport->port_name[2],
--                                      fcport->port_name[3],
--                                      fcport->port_name[4],
--                                      fcport->port_name[5],
--                                      fcport->port_name[6],
--                                      fcport->port_name[7],
--                                      fcport->loop_id);)
--
--                      /* flags */
--                      if (dev->flag & DEV_PUBLIC)
--                              fcport->flags |= FC_FABRIC_DEVICE;
--
--                      if (dev->flag & DEV_INITIATOR)
--                              fcport->flags |= FC_INITIATOR_DEVICE;
--
--                      /* Assume the device supports RLC */
--                      fcport->flags |= FC_SUPPORT_RPT_LUNS;
--
--                      if (!ha->flags.failover_enabled)
--                              qla2x00_get_lun_mask_from_config(ha, 
--                                  fcport, cnt, 0);
--
--                      if (prev_fcport == NULL) {
--                              /* nothing in fcport list yet */
--                              ha->fcport = fcport;
--                      } else {
--                              /*
--                               * prev_fcport should be pointing to last
--                               * port in list
--                               */
--                              prev_fcport->next = fcport;
--                      }
--
--              } else {
--                      DEBUG3(printk("%s(%ld): updating device to list.\n", 
--                          __func__, ha->host_no);)
--                      fcport->loop_id = dev->loop_id;
--                      fcport->loop_id = dev->loop_id;
--                      fcport->old_loop_id = dev->loop_id;
--              }
--
--              if (atomic_read(&fcport->state) != FC_ONLINE) {
--                      if (qla2x00_update_fcport(ha, fcport, cnt)) {
--                              DEBUG2(printk(KERN_INFO "%s(%ld): update_fcport "
--                                  "failed.\n",
--                                  __func__, ha->host_no);)
--
--                              return BIT_0;
--                      }
--              }
--
--      }
--
--      LEAVE(__func__);
--
--      return (0);
--}
--
--/*
-- * qla2x00_mark_device_lost
-- *    Updates fcport state when device goes offline.
-- *
-- * Input:
-- *    ha = adapter block pointer.
-- *    fcport = port structure pointer.
-- *
-- * Return:
-- *    None.
-- *
-- * Context:
-- */
--STATIC void
--qla2x00_mark_device_lost( scsi_qla_host_t *ha, fc_port_t *fcport ) 
--{
--#if 0
--      /*
--       * No point in marking the device as lost, if the device is already
--       * DEAD.
--       */
--      if (atomic_read(&fcport->state) == FC_DEVICE_DEAD)
--              return;
--
--      /* Mark the device LOST */
--      atomic_set(&fcport->state, FC_DEVICE_LOST);
--#else
-       /* 
-        * We may need to retry the login, so don't change the
-        * state of the port but do the retries.
-        */
-       if (atomic_read(&fcport->state) != FC_DEVICE_DEAD)
-               atomic_set(&fcport->state, FC_DEVICE_LOST);
--#endif
-+ 
-+      if (!do_login)
-+              return;
- #if defined(PORT_LOGIN_4xWAY)
-       if (PORT_LOGIN_RETRY(fcport) > 0) {
-@@ -15767,107 +14873,562 @@ qla2x00_mark_device_lost( scsi_qla_host_
-               set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
-       }
- #endif
--}
-+}
-+
-+/*
-+ * qla2x00_mark_all_devices_lost
-+ *    Updates fcport state when device goes offline.
-+ *
-+ * Input:
-+ *    ha = adapter block pointer.
-+ *    fcport = port structure pointer.
-+ *
-+ * Return:
-+ *    None.
-+ *
-+ * Context:
-+ */
-+STATIC void
-+qla2x00_mark_all_devices_lost(scsi_qla_host_t *ha) 
-+{
-+      struct list_head        *fcpl;
-+      fc_port_t               *fcport;
-+
-+      list_for_each(fcpl, &ha->fcports) {
-+              fcport = list_entry(fcpl, fc_port_t, list);
-+              if(fcport->port_type != FCT_TARGET)
-+                      continue;
-+
-+              /*
-+               * No point in marking the device as lost, if the device is
-+               * already DEAD.
-+               */
-+              if (atomic_read(&fcport->state) == FC_DEVICE_DEAD)
-+                      continue;
-+
-+              atomic_set(&fcport->state, FC_DEVICE_LOST);
-+      }
-+}
-+
-+/*
-+ * qla2x00_check_for_devices_online
-+ *
-+ *    Check fcport state of all devices to make sure online.
-+ *
-+ * Input:
-+ *    ha = adapter block pointer.
-+ *
-+ * Return:
-+ *    None.
-+ *
-+ * Context:
-+ */
-+STATIC uint8_t
-+qla2x00_check_for_devices_online(scsi_qla_host_t *ha) 
-+{
-+      fc_port_t       *fcport;
-+      int             found, cnt;
-+
-+      found = 0;
-+      cnt = 0;
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-+              if(fcport->port_type != FCT_TARGET)
-+                      continue;
-+
-+              if ((atomic_read(&fcport->state) == FC_ONLINE) ||
-+                   (fcport->flags & FC_FAILBACK_DISABLE) ||
-+                      (atomic_read(&fcport->state) == FC_DEVICE_DEAD))
-+                      found++;
-+
-+              cnt++;
-+      }
-+      if (cnt == found) {
-+              DEBUG5(printk("%s(%ld): all online\n",
-+                              __func__,
-+                              ha->host_no);)
-+              return 1;
-+      } else
-+              return 0;
-+}
-+
-+STATIC void
-+qla2x00_probe_for_all_luns(scsi_qla_host_t *ha) 
-+{
-+      fc_port_t       *fcport;
-+
-+      qla2x00_mark_all_devices_lost(ha); 
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-+              if(fcport->port_type != FCT_TARGET)
-+                      continue;
-+
-+              qla2x00_update_fcport(ha, fcport); 
-+      }
-+}
-+
-+/*
-+ * qla2x00_update_fcport
-+ *    Updates device on list.
-+ *
-+ * Input:
-+ *    ha = adapter block pointer.
-+ *    fcport = port structure pointer.
-+ *
-+ * Return:
-+ *    0  - Success
-+ *  BIT_0 - error
-+ *
-+ * Context:
-+ *    Kernel context.
-+ */
-+static int
-+qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport) 
-+{
-+      int             rval;
-+
-+      DEBUG4(printk("%s(): entered, loop_id = %d\n",
-+                      __func__,
-+                      fcport->loop_id);)
-+
-+      fcport->port_login_retry_count =
-+              ha->port_down_retry_count * PORT_RETRY_TIME;
-+      fcport->flags &= ~FC_LOGIN_NEEDED;
-+      atomic_set(&fcport->state, FC_ONLINE);
-+      fcport->login_retry = 0;
-+      fcport->ha = ha;
-+      atomic_set(&fcport->port_down_timer,
-+                      ha->port_down_retry_count * PORT_RETRY_TIME);
-+
-+      if (fcport->port_type != FCT_TARGET)
-+              return (QLA2X00_SUCCESS);
-+
-+      /* Do LUN discovery. */
-+      rval = qla2x00_lun_discovery(ha, fcport);
-+              if ( (fcport->flags & (FC_MSA_DEVICE|FC_EVA_DEVICE)) )
-+              qla2x00_test_active_port(fcport); 
-+
-+      return (rval);
-+}
-+
-+
-+
-+int
-+qla2x00_issue_scsi_inquiry(scsi_qla_host_t *ha, 
-+      fc_port_t *fcport, fc_lun_t *fclun )
-+{
-+      inq_cmd_rsp_t   *pkt;
-+      int             rval;
-+      dma_addr_t      phys_address = 0;
-+      int             retry;
-+      uint16_t        comp_status;
-+      uint16_t        scsi_status;
-+      int             ret = 0;
-+      
-+      uint16_t        lun = fclun->lun;
-+
-+
-+      pkt = pci_alloc_consistent(ha->pdev,
-+                              sizeof(inq_cmd_rsp_t), &phys_address);
-+
-+      if (pkt == NULL) {
-+              printk(KERN_WARNING
-+                      "scsi(%ld): Memory Allocation failed - INQ\n",
-+                      ha->host_no);
-+              ha->mem_err++;
-+              return BIT_0;
-+      }
-+
-+      retry = 2;
-+      do {
-+              memset(pkt, 0, sizeof(inq_cmd_rsp_t));
-+              pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
-+              pkt->p.cmd.entry_count = 1;
-+              pkt->p.cmd.lun = cpu_to_le16(lun);
-+#if defined(EXTENDED_IDS)
-+              pkt->p.cmd.target = cpu_to_le16(fcport->loop_id);
-+#else
-+              pkt->p.cmd.target = (uint8_t)fcport->loop_id;
-+#endif
-+              pkt->p.cmd.control_flags =
-+                      __constant_cpu_to_le16(CF_READ | CF_SIMPLE_TAG);
-+              pkt->p.cmd.scsi_cdb[0] = INQ_SCSI_OPCODE;
-+              pkt->p.cmd.scsi_cdb[4] = INQ_DATA_SIZE;
-+              pkt->p.cmd.dseg_count = __constant_cpu_to_le16(1);
-+              pkt->p.cmd.timeout = __constant_cpu_to_le16(3);
-+              pkt->p.cmd.byte_count =
-+                      __constant_cpu_to_le32(INQ_DATA_SIZE);
-+              pkt->p.cmd.dseg_0_address[0] = cpu_to_le32(
-+                    LSD(phys_address + sizeof(sts_entry_t)));
-+              pkt->p.cmd.dseg_0_address[1] = cpu_to_le32(
-+                    MSD(phys_address + sizeof(sts_entry_t)));
-+              pkt->p.cmd.dseg_0_length =
-+                      __constant_cpu_to_le32(INQ_DATA_SIZE);
-+
-+              DEBUG(printk("scsi(%ld:0x%x:%d) %s: Inquiry - fcport=%p,"
-+                      " lun (%d)\n", 
-+                      ha->host_no, fcport->loop_id, lun,
-+                      __func__,fcport, 
-+                      lun);)
-+
-+              rval = qla2x00_issue_iocb(ha, pkt,
-+                              phys_address, sizeof(inq_cmd_rsp_t));
-+
-+              comp_status = le16_to_cpu(pkt->p.rsp.comp_status);
-+              scsi_status = le16_to_cpu(pkt->p.rsp.scsi_status);
-+
-+      } while ((rval != QLA2X00_SUCCESS ||
-+              comp_status != CS_COMPLETE) && 
-+              retry--);
-+
-+      if (rval != QLA2X00_SUCCESS ||
-+              comp_status != CS_COMPLETE ||
-+              (scsi_status & SS_CHECK_CONDITION)) {
-+
-+              DEBUG2(printk("%s: Failed lun inquiry - "
-+                      "inq[0]= 0x%x, comp status 0x%x, "
-+                      "scsi status 0x%x. loop_id=%d\n",
-+                      __func__,pkt->inq[0], 
-+                      comp_status,
-+                      scsi_status, 
-+                      fcport->loop_id);)
-+              ret = 1;
-+      } else {
-+              fclun->inq0 = pkt->inq[0];
-+      }
-+
-+      pci_free_consistent(ha->pdev, sizeof(inq_cmd_rsp_t), pkt, phys_address);
-+
-+      return( ret );
-+}
-+
-+int
-+qla2x00_test_active_lun( fc_port_t *fcport, fc_lun_t *fclun ) 
-+{
-+      tur_cmd_rsp_t   *pkt;
-+      int             rval = 0 ; 
-+      dma_addr_t      phys_address = 0;
-+      int             retry;
-+      uint16_t        comp_status;
-+      uint16_t        scsi_status;
-+      scsi_qla_host_t *ha;
-+      uint16_t        lun = 0;
-+
-+      ENTER(__func__);
-+
-+
-+      ha = fcport->ha;
-+      if (atomic_read(&fcport->state) == FC_DEVICE_DEAD){
-+              DEBUG2(printk("scsi(%ld) %s leaving: Port loop_id 0x%02x is marked DEAD\n",
-+                      ha->host_no,__func__,fcport->loop_id);)
-+              return rval;
-+      }
-+      
-+      if ( fclun == NULL ){
-+              DEBUG2(printk("scsi(%ld) %s Bad fclun ptr on entry.\n",
-+                      ha->host_no,__func__);)
-+              return rval;
-+      }
-+      
-+      lun = fclun->lun;
-+
-+      pkt = pci_alloc_consistent(ha->pdev,
-+          sizeof(tur_cmd_rsp_t), &phys_address);
-+
-+      if (pkt == NULL) {
-+              printk(KERN_WARNING
-+                  "scsi(%ld): Memory Allocation failed - TUR\n",
-+                  ha->host_no);
-+              ha->mem_err++;
-+              return rval;
-+      }
-+
-+      retry = 4;
-+      do {
-+              memset(pkt, 0, sizeof(tur_cmd_rsp_t));
-+              pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
-+              pkt->p.cmd.entry_count = 1;
-+              pkt->p.cmd.lun = cpu_to_le16(lun);
-+#if defined(EXTENDED_IDS)
-+              pkt->p.cmd.target = cpu_to_le16(fcport->loop_id);
-+#else
-+              pkt->p.cmd.target = (uint8_t)fcport->loop_id;
-+#endif
-+              /* no direction for this command */
-+              pkt->p.cmd.control_flags =
-+                      __constant_cpu_to_le16(CF_SIMPLE_TAG);
-+              pkt->p.cmd.scsi_cdb[0] = TEST_UNIT_READY;
-+              pkt->p.cmd.dseg_count = __constant_cpu_to_le16(0);
-+              pkt->p.cmd.timeout = __constant_cpu_to_le16(3);
-+              pkt->p.cmd.byte_count = __constant_cpu_to_le32(0);
--/*
-- * qla2x00_mark_all_devices_lost
-- *    Updates fcport state when device goes offline.
-- *
-- * Input:
-- *    ha = adapter block pointer.
-- *    fcport = port structure pointer.
-- *
-- * Return:
-- *    None.
-- *
-- * Context:
-- */
--STATIC void
--qla2x00_mark_all_devices_lost(scsi_qla_host_t *ha) 
--{
--      fc_port_t *fcport;
-+              rval = qla2x00_issue_iocb(ha, pkt,
-+                          phys_address, sizeof(tur_cmd_rsp_t));
--      for (fcport = ha->fcport; fcport != NULL; fcport = fcport->next) {
--              /*
--               * No point in marking the device as lost, if the device is
--               * already DEAD.
--               */
--              if (atomic_read(&fcport->state) == FC_DEVICE_DEAD)
--                      continue;
-+              comp_status = le16_to_cpu(pkt->p.rsp.comp_status);
-+              scsi_status = le16_to_cpu(pkt->p.rsp.scsi_status);
--              atomic_set(&fcport->state, FC_DEVICE_LOST);
-+              /* Port Logged Out, so don't retry */
-+              if(     comp_status == CS_PORT_LOGGED_OUT  ||
-+                      comp_status == CS_PORT_CONFIG_CHG ||
-+                      comp_status == CS_PORT_BUSY ||
-+                      comp_status == CS_INCOMPLETE ||
-+                      comp_status == CS_PORT_UNAVAILABLE )
-+                      break;
-+
-+              DEBUG(printk("scsi(%ld:%04x:%d) "
-+                     "%s: TEST UNIT READY - "
-+                  " comp status 0x%x, "
-+                  "scsi status 0x%x, rval=%d\n",ha->host_no,
-+                      fcport->loop_id,
-+                      lun,__func__,
-+                  comp_status, scsi_status, rval);)
-+              if( (scsi_status & SS_CHECK_CONDITION)  ) {
-+                      DEBUG2(printk("%s: check status bytes =  0x%02x 0x%02x 0x%02x\n", 
-+                       __func__, pkt->p.rsp.req_sense_data[2],
-+                       pkt->p.rsp.req_sense_data[12] ,
-+                       pkt->p.rsp.req_sense_data[13]);)
-+
-+                      if (pkt->p.rsp.req_sense_data[2] == NOT_READY && 
-+                       pkt->p.rsp.req_sense_data[12] == 0x4 &&
-+                       pkt->p.rsp.req_sense_data[13] == 0x2 ) 
-+                              break;
-+              }
-+      } while ( (rval != QLA2X00_SUCCESS ||
-+                 comp_status != CS_COMPLETE ||
-+                 (scsi_status & SS_CHECK_CONDITION)) && 
-+              retry--);
-+
-+      if (rval == QLA2X00_SUCCESS &&
-+              ( !( (scsi_status & SS_CHECK_CONDITION) && 
-+                      (pkt->p.rsp.req_sense_data[2] == NOT_READY && 
-+                       pkt->p.rsp.req_sense_data[12] == 0x4 &&
-+                       pkt->p.rsp.req_sense_data[13] == 0x2 ) ) && 
-+          comp_status == CS_COMPLETE) ) {
-+              
-+              DEBUG2(printk("scsi(%ld) %s - Lun (0x%02x:%d) set to ACTIVE.\n",
-+                      ha->host_no, __func__,
-+                      (uint8_t)fcport->loop_id,lun);)
-+              /* We found an active path */
-+                      fclun->flags |= FC_ACTIVE_LUN;
-+              rval = 1;
-+      } else {
-+              DEBUG2(printk("scsi(%ld) %s - Lun (0x%02x:%d) set to INACTIVE.\n",
-+                      ha->host_no, __func__,
-+                      (uint8_t)fcport->loop_id,lun);)
-+                      /* fcport->flags &= ~(FC_MSA_PORT_ACTIVE); */
-+                      fclun->flags &= ~(FC_ACTIVE_LUN);
-       }
-+
-+      pci_free_consistent(ha->pdev, sizeof(tur_cmd_rsp_t), 
-+                              pkt, phys_address);
-+
-+      LEAVE(__func__);
-+
-+      return rval;
-+
- }
--/*
-- * qla2x00_check_for_devices_online
-- *
-- *    Check fcport state of all devices to make sure online.
-- *
-- * Input:
-- *    ha = adapter block pointer.
-- *
-- * Return:
-- *    None.
-- *
-- * Context:
-- */
--STATIC uint8_t
--qla2x00_check_for_devices_online(scsi_qla_host_t *ha) 
-+
-+static fc_lun_t *
-+qla2x00_find_data_lun( fc_port_t *fcport ) 
- {
--      fc_port_t       *fcport;
--      int             found, cnt;
-+      scsi_qla_host_t *ha;
-+      fc_lun_t        *fclun, *ret_fclun;
--      found = 0;
--      for (cnt = 0, fcport = ha->fcport; 
--              fcport != NULL;
--              fcport = fcport->next, cnt++) {
-+      ha = fcport->ha;
-+      ret_fclun = NULL;
--              if ((atomic_read(&fcport->state) == FC_ONLINE) ||
--                      (atomic_read(&fcport->state) == FC_DEVICE_DEAD))
--                      found++;
-+      /* Go thur all luns and find a good data lun */
-+      list_for_each_entry(fclun, &fcport->fcluns, list) {
-+              fclun->flags &= ~FC_VISIBLE_LUN;
-+              if (fclun->inq0 == 0xff)
-+                      qla2x00_issue_scsi_inquiry(ha, fcport, fclun);
-+              if (fclun->inq0 == 0xc)
-+                      fclun->flags |= FC_VISIBLE_LUN;
-+              else if (fclun->inq0 == 0 ) {
-+                      ret_fclun = fclun;
-+              }
-       }
--      if (cnt == found) {
--              DEBUG5(printk("%s(%ld): all online\n",
--                              __func__,
--                              ha->host_no);)
--              return 1;
--      } else
--              return 0;
-+      return (ret_fclun);
- }
- /*
-- * qla2x00_update_fcport
-- *    Updates device on list.
-+ * qla2x00_test_active_port
-+ *    Determines if the port is in active or standby mode. First, we
-+ *    need to locate a storage lun then do a TUR on it. 
-  *
-  * Input:
-- *    ha = adapter block pointer.
-  *    fcport = port structure pointer.
-+ *    
-  *
-  * Return:
-- *    0  - Success
-- *  BIT_0 - error
-+ *    0  - Standby or error
-+ *  1 - Active
-  *
-  * Context:
-  *    Kernel context.
-  */
--static int
--qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport, int index) 
-+int
-+qla2x00_test_active_port( fc_port_t *fcport ) 
- {
--      DEBUG4(printk("%s(): entered, loop_id = %d\n",
--                      __func__,
-+      tur_cmd_rsp_t   *pkt;
-+      int             rval = 0 ; 
-+      dma_addr_t      phys_address = 0;
-+      int             retry;
-+      uint16_t        comp_status;
-+      uint16_t        scsi_status;
-+      scsi_qla_host_t *ha;
-+      uint16_t        lun = 0;
-+      fc_lun_t        *fclun;
-+
-+      ENTER(__func__);
-+
-+
-+      ha = fcport->ha;
-+      if (atomic_read(&fcport->state) == FC_DEVICE_DEAD){
-+              DEBUG2(printk("scsi(%ld) %s leaving: Port 0x%02x is marked DEAD\n",
-+                      ha->host_no,__func__,fcport->loop_id);)
-+              return rval;
-+      }
-+              
-+
-+      if( (fclun = qla2x00_find_data_lun( fcport )) == NULL ) {
-+              DEBUG2(printk(KERN_INFO "%s leaving: Couldn't find data lun\n",__func__);)
-+              return rval;
-+      } 
-+      lun = fclun->lun;
-+
-+      pkt = pci_alloc_consistent(ha->pdev,
-+          sizeof(tur_cmd_rsp_t), &phys_address);
-+
-+      if (pkt == NULL) {
-+              printk(KERN_WARNING
-+                  "scsi(%ld): Memory Allocation failed - TUR\n",
-+                  ha->host_no);
-+              ha->mem_err++;
-+              return rval;
-+      }
-+
-+      retry = 4;
-+      do {
-+              memset(pkt, 0, sizeof(tur_cmd_rsp_t));
-+              pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
-+              pkt->p.cmd.entry_count = 1;
-+              pkt->p.cmd.lun = cpu_to_le16(lun);
-+              /* pkt->p.cmd.lun = lun; */
-+#if defined(EXTENDED_IDS)
-+              pkt->p.cmd.target = cpu_to_le16(fcport->loop_id);
-+#else
-+              pkt->p.cmd.target = (uint8_t)fcport->loop_id;
-+#endif
-+              /* no direction for this command */
-+              pkt->p.cmd.control_flags =
-+                      __constant_cpu_to_le16(CF_SIMPLE_TAG);
-+              pkt->p.cmd.scsi_cdb[0] = TEST_UNIT_READY;
-+              pkt->p.cmd.dseg_count = __constant_cpu_to_le16(0);
-+              pkt->p.cmd.timeout = __constant_cpu_to_le16(3);
-+              pkt->p.cmd.byte_count = __constant_cpu_to_le32(0);
-+
-+              rval = qla2x00_issue_iocb(ha, pkt,
-+                          phys_address, sizeof(tur_cmd_rsp_t));
-+
-+              comp_status = le16_to_cpu(pkt->p.rsp.comp_status);
-+              scsi_status = le16_to_cpu(pkt->p.rsp.scsi_status);
-+
-+              /* Port Logged Out, so don't retry */
-+              if(     comp_status == CS_PORT_LOGGED_OUT  ||
-+                      comp_status == CS_PORT_CONFIG_CHG ||
-+                      comp_status == CS_PORT_BUSY ||
-+                      comp_status == CS_INCOMPLETE ||
-+                      comp_status == CS_PORT_UNAVAILABLE )
-+                      break;
-+
-+              DEBUG(printk("scsi(%ld:%04x:%d) "
-+                     "%s: TEST UNIT READY - "
-+                  " comp status 0x%x, "
-+                  "scsi status 0x%x, rval=%d\n",ha->host_no,
-+                      fcport->loop_id,
-+                      lun,__func__,
-+                  comp_status, scsi_status, rval);)
-+              if( (scsi_status & SS_CHECK_CONDITION)  ) {
-+                      DEBUG2(printk("%s: check status bytes =  0x%02x 0x%02x 0x%02x\n", 
-+                       __func__, pkt->p.rsp.req_sense_data[2],
-+                       pkt->p.rsp.req_sense_data[12] ,
-+                       pkt->p.rsp.req_sense_data[13]);)
-+
-+                      if (pkt->p.rsp.req_sense_data[2] == NOT_READY && 
-+                       pkt->p.rsp.req_sense_data[12] == 0x4 &&
-+                       pkt->p.rsp.req_sense_data[13] == 0x2 ) 
-+                              break;
-+              }
-+      } while ( (rval != QLA2X00_SUCCESS ||
-+                 comp_status != CS_COMPLETE ||
-+                 (scsi_status & SS_CHECK_CONDITION)) && 
-+              retry--);
-+
-+      if (rval == QLA2X00_SUCCESS &&
-+              ( !( (scsi_status & SS_CHECK_CONDITION) && 
-+                      (pkt->p.rsp.req_sense_data[2] == NOT_READY && 
-+                       pkt->p.rsp.req_sense_data[12] == 0x4 &&
-+                       pkt->p.rsp.req_sense_data[13] == 0x2 ) ) && 
-+          comp_status == CS_COMPLETE) ) {
-+              DEBUG2(printk("scsi(%ld) %s - Port (0x%04x) set to ACTIVE.\n",
-+                      ha->host_no, __func__,
-+                      fcport->loop_id);)
-+              /* We found an active path */
-+                      fcport->flags |= FC_MSA_PORT_ACTIVE;
-+              rval = 1;
-+      } else {
-+              DEBUG2(printk("scsi(%ld) %s - Port (0x%04x) set to INACTIVE.\n",
-+                      ha->host_no, __func__,
-                       fcport->loop_id);)
-+                      fcport->flags &= ~(FC_MSA_PORT_ACTIVE);
-+      }
--      fcport->port_login_retry_count =
--              ha->port_down_retry_count * PORT_RETRY_TIME;
--      atomic_set(&fcport->state, FC_ONLINE);
--      fcport->login_retry = 0;
--      fcport->ha = ha;
--      atomic_set(&fcport->port_down_timer,
--                      ha->port_down_retry_count * PORT_RETRY_TIME);
-+      pci_free_consistent(ha->pdev, sizeof(tur_cmd_rsp_t), 
-+                              pkt, phys_address);
--      /* Do LUN discovery. */
--      return (qla2x00_lun_discovery(ha, fcport, index));
-+      LEAVE(__func__);
-+
-+      return rval;
-+
-+}
-+
-+void
-+qla2x00_set_device_flags(scsi_qla_host_t *ha, 
-+      fc_port_t *fcport )
-+{
-+
-+      if ( fcport->cfg_id != -1 ){
-+         fcport->flags &= ~(FC_XP_DEVICE|FC_MSA_DEVICE|FC_EVA_DEVICE);
-+         if ( (cfg_device_list[fcport->cfg_id].flags & 1) ){
-+              printk(KERN_INFO 
-+              "scsi(%ld) :Loop id 0x%04x is an XP device\n",
-+              ha->host_no,
-+              fcport->loop_id);
-+                fcport->flags |= FC_XP_DEVICE;
-+         } else if ( (cfg_device_list[fcport->cfg_id].flags & 2) ){
-+              printk(KERN_INFO 
-+              "scsi(%ld) :Loop id 0x%04x is a MSA1000 device\n",
-+              ha->host_no,
-+              fcport->loop_id);
-+                fcport->flags |= FC_MSA_DEVICE;
-+              fcport->flags |= FC_FAILBACK_DISABLE;
-+         } else if ( (cfg_device_list[fcport->cfg_id].flags & 4) ){
-+              printk(KERN_INFO 
-+              "scsi(%ld) :Loop id 0x%04x is a EVA device\n",
-+              ha->host_no,
-+              fcport->loop_id);
-+                fcport->flags |= FC_EVA_DEVICE;
-+              fcport->flags |= FC_FAILBACK_DISABLE;
-+         } 
-+         if ( (cfg_device_list[fcport->cfg_id].flags & 8) ){
-+              fcport->flags |= FC_FAILOVER_DISABLE;
-+              printk(KERN_INFO 
-+              "scsi(%ld) :Loop id 0x%04x has FAILOVERS disabled.\n",
-+              ha->host_no,
-+              fcport->loop_id);
-+         }
-+      }
- }
- /*
-@@ -15886,19 +15447,21 @@ qla2x00_update_fcport(scsi_qla_host_t *h
-  *    Kernel context.
-  */
- static int
--qla2x00_lun_discovery(scsi_qla_host_t *ha, fc_port_t *fcport, int index) 
-+qla2x00_lun_discovery(scsi_qla_host_t *ha, fc_port_t *fcport) 
- {
-       inq_cmd_rsp_t   *pkt;
-       int             rval;
-       uint16_t        lun;
-+      struct list_head        *fcll;
-       fc_lun_t        *fclun;
-+      int             found;
-       dma_addr_t      phys_address = 0;
-       int             disconnected;
-       int             retry;
--      fcdev_t         dev;
--      int             rlc_succeeded;
-+      int             rlc_succeeded, first;
-       uint16_t        comp_status;
-       uint16_t        scsi_status;
-+      uint16_t        next_loopid;
-       ENTER(__func__);
-@@ -15933,14 +15496,20 @@ qla2x00_lun_discovery(scsi_qla_host_t *h
-               return BIT_0;
-       }
-+      first = 0;
-       for (lun = 0; lun < ha->max_probe_luns; lun++) {
-               retry = 2;
-               do {
-+                      // FIXME: dma_addr_t could be 64bits in length!
-                       memset(pkt, 0, sizeof(inq_cmd_rsp_t));
-                       pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
-                       pkt->p.cmd.entry_count = 1;
-                       pkt->p.cmd.lun = cpu_to_le16(lun);
-+#if defined(EXTENDED_IDS)
-+                      pkt->p.cmd.target = cpu_to_le16(fcport->loop_id);
-+#else
-                       pkt->p.cmd.target = (uint8_t)fcport->loop_id;
-+#endif
-                       pkt->p.cmd.control_flags =
-                               __constant_cpu_to_le16(CF_READ | CF_SIMPLE_TAG);
-                       pkt->p.cmd.scsi_cdb[0] = INQ_SCSI_OPCODE;
-@@ -15950,13 +15519,13 @@ qla2x00_lun_discovery(scsi_qla_host_t *h
-                       pkt->p.cmd.byte_count =
-                               __constant_cpu_to_le32(INQ_DATA_SIZE);
-                       pkt->p.cmd.dseg_0_address[0] = cpu_to_le32(
--                            pci_dma_lo32(phys_address + sizeof(sts_entry_t)));
-+                            LSD(phys_address + sizeof(sts_entry_t)));
-                       pkt->p.cmd.dseg_0_address[1] = cpu_to_le32(
--                            pci_dma_hi32(phys_address + sizeof(sts_entry_t)));
-+                            MSD(phys_address + sizeof(sts_entry_t)));
-                       pkt->p.cmd.dseg_0_length =
-                               __constant_cpu_to_le32(INQ_DATA_SIZE);
--                      DEBUG5(printk("lun_discovery: Lun Inquiry - fcport=%p,"
-+                      DEBUG(printk("lun_discovery: Lun Inquiry - fcport=%p,"
-                                       " lun (%d)\n", 
-                                       fcport, 
-                                       lun);)
-@@ -15977,12 +15546,16 @@ qla2x00_lun_discovery(scsi_qla_host_t *h
-                       /* if port not logged in then try and login */
-                       if (lun == 0 && comp_status == CS_PORT_LOGGED_OUT) {
--                              memset(&dev, 0, sizeof (dev));
--                              dev.d_id.b24 = ha->fc_db[index].d_id.b24;
--
--                              /* login and update database */
--                              if (qla2x00_fabric_login(ha, &dev) == 0)
--                                      ha->fc_db[index].loop_id = dev.loop_id;
-+                              if (fcport->flags & FC_FABRIC_DEVICE) {
-+                                      /* login and update database */
-+                                      next_loopid = 0;
-+                                      qla2x00_fabric_login(ha, fcport,
-+                                          &next_loopid);
-+                              } else {
-+                                      /* Loop device gone but no LIP... */
-+                                      rval = QL_STATUS_ERROR;
-+                                      break;
-+                              }
-                       }
-               } while ((rval != QLA2X00_SUCCESS ||
-                               comp_status != CS_COMPLETE) && 
-@@ -15992,7 +15565,7 @@ qla2x00_lun_discovery(scsi_qla_host_t *h
-                       comp_status != CS_COMPLETE ||
-                       (scsi_status & SS_CHECK_CONDITION)) {
--                      DEBUG(printk("lun_discovery: Failed lun inquiry - "
-+                      DEBUG2(printk("lun_discovery: Failed lun inquiry - "
-                                       "inq[0]= 0x%x, comp status 0x%x, "
-                                       "scsi status 0x%x. loop_id=%d\n",
-                                       pkt->inq[0], 
-@@ -16012,12 +15585,15 @@ qla2x00_lun_discovery(scsi_qla_host_t *h
-               if (rlc_succeeded == 1) {
-                       if (pkt->inq[0] == 0 || pkt->inq[0] == 0xc) {
-                               fcport->flags &= ~(FC_TAPE_DEVICE);
--                              ha->fc_db[index].flag &= ~DEV_TAPE_DEVICE;
-                       } else if (pkt->inq[0] == 1 || pkt->inq[0] == 8) {
-                               fcport->flags |= FC_TAPE_DEVICE;
--                              ha->fc_db[index].flag |= DEV_TAPE_DEVICE;
-                       }
--
-+                      /* Does this port require special failover handling? */
-+                      if (ha->flags.failover_enabled) {
-+                              fcport->cfg_id = qla2x00_cfg_lookup_device(
-+                                      &pkt->inq[0]);
-+                              qla2x00_set_device_flags(ha, fcport);
-+                      }
-                       /* Stop the scan */
-                       break;
-               }
-@@ -16031,35 +15607,37 @@ qla2x00_lun_discovery(scsi_qla_host_t *h
-                */
-               if (pkt->inq[0] == 0 || pkt->inq[0] == 0xc) {
-                       fcport->flags &= ~(FC_TAPE_DEVICE);
--                      ha->fc_db[index].flag &= ~DEV_TAPE_DEVICE;
-               } else if (pkt->inq[0] == 1 || pkt->inq[0] == 8) {
-                       fcport->flags |= FC_TAPE_DEVICE;
--                      ha->fc_db[index].flag |= DEV_TAPE_DEVICE;
-               } else if (pkt->inq[0] == 0x20 || pkt->inq[0] == 0x7f) {
-                       disconnected++;
-               } else {
-                       continue;
-               }
-               
-+              /* Does this port require special failover handling? */
-+              if (ha->flags.failover_enabled && !first) {
-+                      fcport->cfg_id = qla2x00_cfg_lookup_device(&pkt->inq[0]);
-+                      qla2x00_set_device_flags(ha,fcport);
-+                              first++;
-+              }
-               /* Allocate LUN if not already allocated. */
--              for (fclun = fcport->fclun; 
--                      fclun != NULL; 
--                      fclun = fclun->next) {
-+              found = 0;
-+              list_for_each(fcll, &fcport->fcluns) {
-+                      fclun = list_entry(fcll, fc_lun_t, list);
--                      if (fclun->lun == lun)
-+                      if (fclun->lun == lun) {
-+                              found++;
-                               break;
-+                      }
-               }
--
--              if (fclun != NULL) {
--                      /* Found this lun already in our list */
-+              if (found)
-                       continue;
--              }
-               /* Add this lun to our list */
--              fcport->lun_cnt++;
--
-               fclun = kmalloc(sizeof(fc_lun_t), GFP_ATOMIC);
-               if (fclun != NULL) {
-+                      fcport->lun_cnt++;
-                       /* Setup LUN structure. */
-                       memset(fclun, 0, sizeof(fc_lun_t));
-@@ -16070,12 +15648,13 @@ qla2x00_lun_discovery(scsi_qla_host_t *h
-                       fclun->fcport = fcport;
-                       fclun->lun = lun;
-+                      fclun->inq0 = 0xff;
-                       if (disconnected)
-                               fclun->flags |= FC_DISCON_LUN;
--                      fclun->next = fcport->fclun;
--                      fcport->fclun = fclun;
-+                      list_add_tail(&fclun->list, &fcport->fcluns);
-+
-                       DEBUG5(printk("lun_discvery: Allocated fclun %p, "
-                                       "fclun.lun=%d\n", 
-@@ -16094,7 +15673,7 @@ qla2x00_lun_discovery(scsi_qla_host_t *h
-       }
--      DEBUG(printk("lun_discovery(%ld): fcport lun count=%d, fcport= %p\n", 
-+      DEBUG2(printk("lun_discovery(%ld): fcport lun count=%d, fcport= %p\n", 
-                       ha->host_no,
-                       fcport->lun_cnt, 
-                       fcport);)
-@@ -16153,10 +15732,15 @@ qla2x00_rpt_lun_discovery(scsi_qla_host_
-       }
-       for (retries = 4; retries; retries--) {
-+              // FIXME: dma_addr_t could be 64bits in length!
-               memset(pkt, 0, sizeof(rpt_lun_cmd_rsp_t));
-               pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
-               pkt->p.cmd.entry_count = 1;
-+#if defined(EXTENDED_IDS)
-+              pkt->p.cmd.target = cpu_to_le16(fcport->loop_id);
-+#else
-               pkt->p.cmd.target = (uint8_t)fcport->loop_id;
-+#endif
-               pkt->p.cmd.control_flags =
-                       __constant_cpu_to_le16(CF_READ | CF_SIMPLE_TAG);
-               pkt->p.cmd.scsi_cdb[0] = RPT_LUN_SCSI_OPCODE;
-@@ -16167,9 +15751,9 @@ qla2x00_rpt_lun_discovery(scsi_qla_host_
-               pkt->p.cmd.byte_count = 
-                       __constant_cpu_to_le32(sizeof(rpt_lun_lst_t));
-               pkt->p.cmd.dseg_0_address[0] = cpu_to_le32(
--                      pci_dma_lo32(phys_address + sizeof(sts_entry_t)));
-+                      LSD(phys_address + sizeof(sts_entry_t)));
-               pkt->p.cmd.dseg_0_address[1] = cpu_to_le32(
--                      pci_dma_hi32(phys_address + sizeof(sts_entry_t)));
-+                      MSD(phys_address + sizeof(sts_entry_t)));
-               pkt->p.cmd.dseg_0_length =
-                       __constant_cpu_to_le32(sizeof(rpt_lun_lst_t));
-@@ -16280,26 +15864,29 @@ qla2x00_rpt_lun_discovery(scsi_qla_host_
- static void
- qla2x00_cfg_lun(fc_port_t *fcport, uint16_t lun) 
- {
-+      int found;
-       fc_lun_t                *fclun;
-       /* Allocate LUN if not already allocated. */
--      for (fclun = fcport->fclun; fclun != NULL; fclun = fclun->next) {
-+      found = 0;
-+      list_for_each_entry(fclun, &fcport->fcluns, list) {
-               if (fclun->lun == lun) {
-+                      found++;
-                       break;
-               }
-       }
--      if (fclun == NULL) {
-+      if (!found) {
-               fclun = kmalloc(sizeof(fc_lun_t), GFP_ATOMIC);
-               if (fclun != NULL) {
-+                      fcport->lun_cnt++;
-+
-                       /* Setup LUN structure. */
-                       memset(fclun, 0, sizeof(fc_lun_t));
--                      fcport->lun_cnt++;
-                       fclun->fcport = fcport;
--                      /* How dow we assign the following */
--                      /*  fclun->state = FCS_ONLINE; */
-                       fclun->lun = lun;
--                      fclun->next = fcport->fclun;
--                      fcport->fclun = fclun;
-+                      fclun->inq0 = 0xff;
-+
-+                      list_add_tail(&fclun->list, &fcport->fcluns);
-               } else {
-                       printk(KERN_WARNING
-                               "%s(): Memory Allocation failed - FCLUN\n",
-@@ -16322,20 +15909,40 @@ qla2x00_cfg_lun(fc_port_t *fcport, uint1
-  *    BIT_1 = database was full and a device was not configured.
-  */
- static uint8_t
--qla2x00_configure_local_loop(scsi_qla_host_t *ha, uint8_t enable_slot_reuse) 
-+qla2x00_configure_local_loop(scsi_qla_host_t *ha) 
- {
--      uint8_t  status = 0;
-       uint8_t  rval;
--      uint8_t  port_name[8];
-+      int  rval2;
-+#if defined(FC_IP_SUPPORT)
-       uint8_t  update_status = 0;
--      uint16_t index, size;
--      dma_addr_t phys_address = 0;
--      fcdev_t device;
--      port_list_entry_t *gn_list, *port_entry;
--      uint16_t localdevices = 0;
-+#endif
-+      uint16_t localdevices;
-+
-+      uint16_t        index;
-+      uint16_t        entries;
-+      uint16_t        loop_id;
-+      struct dev_id {
-+              uint8_t al_pa;
-+              uint8_t area;
-+              uint8_t domain;
-+#if defined(EXTENDED_IDS)
-+              uint8_t reserved;
-+              uint16_t loop_id;
-+#else
-+              uint8_t loop_id;
-+#endif
-+      } *id_list;
-+#define MAX_ID_LIST_SIZE (sizeof(struct dev_id) * MAX_FIBRE_DEVICES)
-+      dma_addr_t      id_list_dma;
-+
-+      int             found;
-+      fc_port_t       *fcport, *new_fcport;
-       ENTER(__func__);
-+      localdevices = 0;
-+      new_fcport = NULL;
-+
-       /*
-        * No point in continuing if the loop is in a volatile state -- 
-        * reschedule LOCAL_LOOP_UPDATE for later processing
-@@ -16345,187 +15952,146 @@ qla2x00_configure_local_loop(scsi_qla_ho
-               return (0);
-       }
--      gn_list = pci_alloc_consistent(ha->pdev,
--                      sizeof(GN_LIST_LENGTH), &phys_address);
--      if (gn_list == NULL) {
--              printk(KERN_WARNING
--                      "scsi(%ld): Memory Allocation failed - port_list",
--                      ha->host_no);
--              ha->mem_err++;
-+      entries = MAX_FIBRE_DEVICES;
-+      id_list = pci_alloc_consistent(ha->pdev, MAX_ID_LIST_SIZE,
-+          &id_list_dma);
-+      if (id_list == NULL) {
-+              DEBUG2(printk("scsi(%ld): Failed to allocate memory, No local "
-+                  "loop\n", ha->host_no));
--              DEBUG2(printk(KERN_INFO "%s(%ld): Failed to allocate memory, No "
--                              "local loop\n",
--                              __func__,
--                              ha->host_no);)
-+              printk(KERN_WARNING
-+                  "scsi(%ld): Memory Allocation failed - port_list",
-+                  ha->host_no);
-+              ha->mem_err++;
-               return (BIT_0);
-       }
--      memset(gn_list, 0, sizeof(GN_LIST_LENGTH));
--
--      /* Mark all local devices PORT_LOST_ID first */
--      for (index = 0; index < MAX_FIBRE_DEVICES; index++) {
--              if (ha->fc_db[index].loop_id <= LAST_SNS_LOOP_ID &&
--                      !(ha->fc_db[index].flag & DEV_PUBLIC)) {
--
--                      DEBUG(printk("%s(%ld): port lost @ slot %d %06x\n", 
--                                      __func__,
--                                      ha->host_no,
--                                      index, 
--                                      ha->fc_db[index].d_id.b24);)
--
--                      ha->fc_db[index].loop_id |= PORT_LOST_ID;
--              }
--      }
-+      memset(id_list, 0, MAX_ID_LIST_SIZE);
--      DEBUG3(printk("%s(%ld): Getting FCAL position map\n",
--              __func__, ha->host_no));
-+      DEBUG3(printk("scsi(%ld): Getting FCAL position map\n", ha->host_no));
-       DEBUG3(qla2x00_get_fcal_position_map(ha, NULL));
--      /* Get port name list.*/
--#if defined(FC_IP_SUPPORT)
--      if (ha->flags.enable_ip == FALSE)
--              rval = qla2x00_get_port_list(ha,
--                              gn_list, phys_address, BIT_0, &size);
--      else
--              /*
--               * Bit 0 - return node names,
--               * Bit 1 - loop IDs 0-255
--               */
--              rval = qla2x00_get_port_list(ha,
--                              gn_list, phys_address, BIT_0|BIT_1, &size);
--#else
--      rval = qla2x00_get_port_list(ha, gn_list, phys_address, BIT_0, &size);
--#endif
-+      /* Get list of logged in devices. */
-+      rval = qla2x00_get_id_list(ha, id_list, id_list_dma, &entries);
-       if (rval) {
--              status = BIT_0;
-+              rval = BIT_0;
-               goto cleanup_allocation;
-       }
--      DEBUG3(printk("%s(%ld): port list size (%d)\n",
--              __func__, ha->host_no, size));
--      DEBUG3(qla2x00_dump_buffer((uint8_t *)gn_list, size));
--
--      /* Any valid entries returned? */
--      /* dg: 10/29/99 for an empty list */
--      if (size / sizeof(port_list_entry_t) == 0)
-+      DEBUG3(printk("scsi(%ld): Entries in ID list (%d)\n",
-+          ha->host_no, entries));
-+      DEBUG3(qla2x00_dump_buffer((uint8_t *)id_list,
-+          entries * sizeof(struct dev_id)));
-+
-+      /* Allocate temporary fcport for any new fcports discovered. */
-+      new_fcport = qla2x00_alloc_fcport(ha, GFP_KERNEL);
-+      if (new_fcport == NULL) {
-+              rval = BIT_0;
-               goto cleanup_allocation;
-+      }
--      port_entry = gn_list;
--      for ( ; size >= sizeof(port_list_entry_t);
--                      size -= sizeof(port_list_entry_t),
--                      port_entry++) {
--              device.loop_id = le16_to_cpu(port_entry->loop_id);
-+      /* Mark all local ports LOST first */
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-+              if (!(fcport->flags & FC_FABRIC_DEVICE)) {
-+                      /*
-+                       * No point in marking the device as lost, if the
-+                       * device is already DEAD.
-+                       */
-+                      if (atomic_read(&fcport->state) == FC_DEVICE_DEAD)
-+                              continue;
--#if defined(FC_IP_SUPPORT)
--              device.loop_id &= LOOP_ID_MASK; 
--#endif
-+                      atomic_set(&fcport->state, FC_DEVICE_LOST);
-+              }
-+      }
--              /* Skip any non-local loop-ids - this includes 'known ports' */
--              if (device.loop_id > LAST_LOCAL_LOOP_ID) 
-+      /* Add devices to port list. */
-+      for (index = 0; index < entries; index++) {
-+              /* Bypass reserved domain fields. */
-+              if ((id_list[index].domain & 0xf0) == 0xf0)
-                       continue;
--#if NOT_NEEDED
--              /* Skip the known ports. */
--              if ((device.loop_id == SNS_FL_PORT) ||
--                      (device.loop_id == FABRIC_CONTROLLER) ||
--                      (device.loop_id == SIMPLE_NAME_SERVER))
-+
-+              /* Bypass if not same domain and area of adapter. */
-+              if (id_list[index].area != ha->d_id.b.area ||
-+                  id_list[index].domain != ha->d_id.b.domain)
-                       continue;
-+
-+              /* Bypass invalid local loop ID. */
-+#if defined(EXTENDED_IDS)
-+              loop_id = le16_to_cpu(id_list[index].loop_id);
-+#else
-+              loop_id = (uint16_t)id_list[index].loop_id;
- #endif
-+              if (loop_id > LAST_LOCAL_LOOP_ID)
-+                      continue;
--              /* Get port name */
--              rval = qla2x00_get_port_name(ha, device.loop_id, port_name, 0);
--              if (rval || qla2x00_is_wwn_zero(port_name)) {
--                      DEBUG2(printk(KERN_INFO "%s(%ld): get_port_name error.\n",
--                                      __func__,
--                                      ha->host_no);)
--                      status = BIT_0;
-+              /* Fill in member data. */
-+              new_fcport->d_id.b.domain = id_list[index].domain;
-+              new_fcport->d_id.b.area = id_list[index].area;
-+              new_fcport->d_id.b.al_pa = id_list[index].al_pa;
-+              new_fcport->loop_id = loop_id;
-+              rval2 = qla2x00_get_port_database(ha, new_fcport, 0);
-+              if (rval2 != QL_STATUS_SUCCESS) {
-+                      DEBUG2(printk("scsi(%ld): Failed to retrieve fcport "
-+                          "information -- get_port_database=%x, "
-+                          "loop_id=0x%04x\n",
-+                          ha->host_no, rval2, new_fcport->loop_id));
-+                      continue;
-+              }
-+
-+              /* Check for matching device in port list. */
-+              found = 0;
-+              fcport = NULL;
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-+                      if (memcmp(new_fcport->port_name, fcport->port_name,
-+                          WWN_SIZE))
-+                              continue;
-+
-+                      fcport->flags &= ~FC_FABRIC_DEVICE;
-+                      fcport->loop_id = new_fcport->loop_id;
-+                      fcport->port_type = new_fcport->port_type;
-+                      fcport->d_id.b24 = new_fcport->d_id.b24;
-+                      memcpy(fcport->node_name, new_fcport->node_name,
-+                          WWN_SIZE);
-+
-+                      found++;
-                       break;
-               }
--              memcpy(device.wwn, port_name, WWN_SIZE);
--              DEBUG3(printk("%s(%ld): found portname -> "
--                              "%02x%02x%02x%02x%02x%02x%02x%02x\n",
--                              __func__,
--                              ha->host_no,
--                              port_name[0], port_name[1],
--                              port_name[2], port_name[3],
--                              port_name[4], port_name[5],
--                              port_name[6], port_name[7]);)
--      
--              /* Now get node name -- big-endian format */
--              *((u64 *)device.name) = be64_to_cpup((u64 *)port_entry->name);
--              DEBUG3(printk("%s(%ld): found nodename -> "
--                              "%02x%02x%02x%02x%02x%02x%02x%02x\n",
--                              __func__,
--                              ha->host_no,
--                              device.name[0], device.name[1],
--                              device.name[2], device.name[3],
--                              device.name[4], device.name[5],
--                              device.name[6], device.name[7]);)
--
--              device.flag = 0;
--
--              /* Derive portid from alpa table */
--              device.d_id.b24 = 0;
--              device.d_id.b.al_pa = alpa_table[device.loop_id];
--#if defined(FC_IP_SUPPORT)
--              if (!(list_entry_loop_id & PLE_NOT_SCSI_DEVICE)) {
--#endif
--                      /* SCSI type device */
--                      update_status = qla2x00_update_fc_database(ha,
--                                      &device, enable_slot_reuse);
-+              if (!found) {
-+                      /* New device, add to fcports list. */
-+                      list_add_tail(&new_fcport->list, &ha->fcports);
-+
-+                      /* Allocate a new replacement fcport. */
-+                      fcport = new_fcport;
-+                      new_fcport = qla2x00_alloc_fcport(ha, GFP_KERNEL);
-+                      if (new_fcport == NULL) {
-+                              rval = BIT_0;
-+                              goto cleanup_allocation;
-+                      }
-+              }
--                      if (update_status)
--                              status |= update_status;
--                      else
--                              localdevices++;
-+              qla2x00_update_fcport(ha, fcport);
--#if defined(FC_IP_SUPPORT)
--              } else if (ha->flags.enable_ip == TRUE) {
--                      /* SCSI login failed, assume it is IP device */
--                      DEBUG12(printk("qla%ld: IP local WWN:"
--                                      "%02x%02x%02x%02x%02x%02x%02x%02x "
--                                      "DID:%06x\n",
--                                      ha->instance,
--                                      device.name[0], device.name[1],
--                                      device.name[2], device.name[3],
--                                      device.name[4], device.name[5],
--                                      device.name[6], device.name[7],
--                                      device.d_id.b24);)
--
--                      update_status = qla2x00_update_ip_device_data(ha,
--                                      &device);
--
--                      if (update_status == QL_STATUS_SUCCESS)
--                              localdevices++;
--                      else if (update_status == QL_STATUS_RESOURCE_ERROR)
--                              status |= BIT_1;
--                      else
--                              status |= BIT_0;
--              }
--#endif
--      } /* for each port entry */
-+              localdevices++;
-+      }
- cleanup_allocation:
-+      pci_free_consistent(ha->pdev, MAX_ID_LIST_SIZE, id_list, id_list_dma);
--      pci_free_consistent(ha->pdev,
--                      sizeof(GN_LIST_LENGTH), gn_list, phys_address);
-+      if (new_fcport)
-+              kfree(new_fcport);
--#if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_3)
--      if (status & BIT_0)
--              printk(KERN_WARNING
--                      "%s(%ld): *** FAILED ***\n",
--                      __func__,
--                      ha->host_no);
--#endif
-+      if (rval & BIT_0) {
-+              DEBUG2(printk("scsi(%ld): Configure local loop error exit: "
-+                  "rval=%x\n", ha->host_no, rval));
-+      }
-       if (localdevices > 0) {
-               ha->device_flags |= DFLG_LOCAL_DEVICES;
-               ha->device_flags &= ~DFLG_RETRY_LOCAL_DEVICES;
-       }
--      LEAVE(__func__);
--
--      return (status);
-+      return (rval);
- }
-@@ -16543,7 +16109,7 @@ cleanup_allocation:
-  * Context:
-  *    Kernel context.
-  */
--static os_tgt_t *
-+os_tgt_t *
- qla2x00_tgt_alloc(scsi_qla_host_t *ha, uint16_t t) 
- {
-       os_tgt_t        *tq;
-@@ -16599,7 +16165,7 @@ qla2x00_tgt_alloc(scsi_qla_host_t *ha, u
-  * Context:
-  *    Kernel context.
-  */
--static void
-+void
- qla2x00_tgt_free(scsi_qla_host_t *ha, uint16_t t) 
- {
-       os_tgt_t        *tq;
-@@ -16648,7 +16214,7 @@ qla2x00_tgt_free(scsi_qla_host_t *ha, ui
-  * Context:
-  *    Kernel context.
-  */
--static os_lun_t *
-+os_lun_t *
- qla2x00_lun_alloc(scsi_qla_host_t *ha, uint16_t t, uint16_t l) 
- {
-       os_lun_t        *lq;
-@@ -16741,9 +16307,6 @@ qla2x00_lun_free(scsi_qla_host_t *ha, ui
-               (lq = LUN_Q(ha, t, l)) != NULL) {
-               LUN_Q(ha, t, l) = NULL;
--#ifdef __VMWARE__
--              spin_lock_destroy(&lq->q_lock);
--#endif
-               kfree(lq);
-               DEBUG3(printk("Dealloc lun @ %p -- deleted\n", lq);)
-@@ -16783,11 +16346,7 @@ qla2x00_process_response_queue_in_zio_mo
-                                               , flags);
-                                 /* Complete any commands in done_queue */
-                                 if (!list_empty(&ha->done_queue)){
--#if QLA2X_PERFORMANCE
--                                        tasklet_schedule(&ha->run_qla_task);
--#else
-                                       qla2x00_done(ha);
--#endif
-                               }
-                       }
-@@ -16814,7 +16373,7 @@ qla2x00_process_response_queue_in_zio_mo
-  * 
-  * Note: This routine will always try to start I/O from visible HBA.
-  */
--static void
-+void
- qla2x00_next(scsi_qla_host_t *vis_ha) 
- {
-       scsi_qla_host_t *dest_ha = NULL;
-@@ -16833,7 +16392,7 @@ qla2x00_next(scsi_qla_host_t *vis_ha) 
-               dest_ha = fcport->ha;
-               /* Check if command can be started, exit if not. */
--              if (LOOP_TRANSITION(dest_ha)) {
-+              if (!(sp->flags & SRB_TAPE) && LOOP_TRANSITION(dest_ha)) {
-                       break;
-               }
-@@ -16845,19 +16404,19 @@ qla2x00_next(scsi_qla_host_t *vis_ha) 
-                       CMD_RESULT(sp->cmd) = DID_NO_CONNECT << 16;
--                      if (!atomic_read(&dest_ha->loop_down_timer) && 
--                              dest_ha->loop_state == LOOP_DOWN) {
--                              sp->err_id = 2;
--
-+                      if (atomic_read(&dest_ha->loop_state) == LOOP_DOWN) {
-+                              sp->err_id = SRB_ERR_LOOP;
-                       } else {
--                              sp->err_id = 1;
-+                              sp->err_id = SRB_ERR_PORT;
-                       }
-+
-                       DEBUG3(printk("scsi(%ld): loop/port is down - "
--                                      "pid=%ld, sp=%p loopid=0x%x queued "
-+                                      "pid=%ld, sp=%p err_id %d, loopid=0x%x queued "
-                                       "to dest HBA scsi%ld.\n", 
-                                       dest_ha->host_no,
-                                       sp->cmd->serial_number,
-                                       sp,
-+                                      sp->err_id,
-                                       fcport->loop_id,
-                                       dest_ha->host_no);)
-                       /* 
-@@ -16882,12 +16441,18 @@ qla2x00_next(scsi_qla_host_t *vis_ha) 
-                * continues until the LOOP DOWN time expires or the condition
-                * goes away.
-                */
--              if (!(sp->flags & SRB_IOCTL) &&
--                      (atomic_read(&fcport->state) != FC_ONLINE ||
--                       test_bit(ABORT_ISP_ACTIVE, &dest_ha->dpc_flags) ||
--                       (dest_ha->loop_state != LOOP_READY)
--                       || (sp->flags & SRB_FAILOVER)
--                       )) {
-+              if (sp->flags & SRB_TAPE &&
-+                  (atomic_read(&dest_ha->loop_state) != LOOP_READY)) {
-+                      qla2x00_extend_timeout(sp->cmd,
-+                          vis_ha->loop_down_timeout);
-+                      __add_to_retry_queue(vis_ha, sp);
-+                      continue;
-+              } else if (!(sp->flags & (SRB_IOCTL | SRB_FDMI_CMD)) &&
-+                  (atomic_read(&fcport->state) != FC_ONLINE ||
-+                  test_bit(CFG_FAILOVER, &dest_ha->cfg_flags) || 
-+                      test_bit(ABORT_ISP_ACTIVE, &dest_ha->dpc_flags) ||
-+                      (atomic_read(&dest_ha->loop_state) != LOOP_READY)
-+                      || (sp->flags & SRB_FAILOVER))) {
-                       DEBUG3(printk("scsi(%ld): port=(0x%x) retry_q(%d) loop "
-                                       "state = %d, loop counter = 0x%x"
-@@ -16895,7 +16460,7 @@ qla2x00_next(scsi_qla_host_t *vis_ha) 
-                                       dest_ha->host_no,
-                                       fcport->loop_id,
-                                       atomic_read(&fcport->state),
--                                      dest_ha->loop_state,
-+                                      atomic_read(&dest_ha->loop_state),
-                                       atomic_read(&dest_ha->loop_down_timer),
-                                       dest_ha->dpc_flags);)
-@@ -16908,7 +16473,7 @@ qla2x00_next(scsi_qla_host_t *vis_ha) 
-                * 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 | SRB_FDMI_CMD)) &&
-                       sp->lun_queue->q_state == LUN_STATE_WAIT) {
-                       DEBUG3(printk("%s(): lun wait state - pid=%ld, "
-                                       "opcode=%d, allowed=%d, retries=%d\n",
-@@ -17109,7 +16674,7 @@ qla2x00_bstr_to_hex(char *s, uint8_t *bp
-  * Context:
-  *      Kernel context.
-  */
--static int
-+int
- qla2x00_get_prop_xstr(scsi_qla_host_t *ha, 
-               char *propname, uint8_t *propval, int size) 
- {
-@@ -17162,7 +16727,7 @@ qla2x00_get_prop_xstr(scsi_qla_host_t *h
-  * Context:
-  *    Kernel context.
-  */
--static void
-+void
- qla2x00_chg_endian(uint8_t buf[], size_t size) 
- {
-       uint8_t byte;
-@@ -17191,7 +16756,7 @@ qla2x00_chg_endian(uint8_t buf[], size_t
-  * 
-  * Note: Sets the ref_count for non Null sp to one.
-  */
--static uint8_t
-+uint8_t
- qla2x00_allocate_sp_pool(scsi_qla_host_t *ha) 
- {
-       srb_t   *sp;
-@@ -17236,7 +16801,7 @@ qla2x00_allocate_sp_pool(scsi_qla_host_t
-       if (ha->srb_alloc_cnt == 0)
-               status = QL_STATUS_ERROR;
--      printk(KERN_INFO
-+      printk(KERN_DEBUG
-               "scsi(%ld): Allocated %d SRB(s).\n",
-               ha->host_no,
-               ha->srb_alloc_cnt);
-@@ -17250,7 +16815,7 @@ qla2x00_allocate_sp_pool(scsi_qla_host_t
-  *  This routine frees all adapter allocated memory.
-  *  
-  */
--static void
-+void
- qla2x00_free_sp_pool( scsi_qla_host_t *ha) 
- {
-       struct list_head *list, *temp;
-@@ -17497,60 +17062,182 @@ qla2x00_get_flash_manufacturer(scsi_qla_
-  *
-  * Returns QL_STATUS_SUCCESS on successful retrieval of flash version.
-  */
--STATIC uint16_t
-+uint16_t
- qla2x00_get_flash_version(scsi_qla_host_t *ha)
- {
-+      uint8_t         code_type, last_image;
-       uint16_t        ret = QL_STATUS_SUCCESS;
--      uint32_t        loop_cnt = 1;  /* this is for error exit only */
--      uint32_t        pcir_adr;
--
--      ENTER(__func__);
-+      uint32_t        pcihdr, pcids;
-       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)) {
-+
-+      /* Begin with first PCI expansion ROM header. */
-+      pcihdr = 0;
-+      last_image = 1;
-+      do {
-+              /* Verify PCI expansion ROM header. */
-+              if (qla2x00_read_flash_byte(ha, pcihdr) != 0x55 ||
-+                  qla2x00_read_flash_byte(ha, pcihdr + 0x01) != 0xaa) {
-                       /* No signature */
--                      DEBUG2(printk(KERN_INFO "%s(): No matching signature.\n",
--                                      __func__);)
-+                      DEBUG2(printk("scsi(%ld): No matching ROM signature.\n",
-+                          ha->host_no));
-                       ret = QL_STATUS_ERROR;
-                       break;
-               }
--              pcir_adr = qla2x00_read_flash_byte(ha, 0x18) & 0xff;
--
--              /* validate signature of PCI data structure */
--              if ((qla2x00_read_flash_byte(ha, pcir_adr)) == 'P' &&
--                      (qla2x00_read_flash_byte(ha, pcir_adr + 1)) == 'C' &&
--                      (qla2x00_read_flash_byte(ha, pcir_adr + 2)) == 'I' &&
--                      (qla2x00_read_flash_byte(ha, pcir_adr + 3)) == 'R') {
--
--                      /* Read version */
--                      ha->optrom_minor = qla2x00_read_flash_byte(ha,
--                                      pcir_adr + 0x12);
--                      ha->optrom_major = qla2x00_read_flash_byte(ha,
--                                      pcir_adr + 0x13);
--                      DEBUG3(printk("%s(): got %d.%d.\n",
--                                      __func__, 
--                                      ha->optrom_major, ha->optrom_minor);)
--              } else {
--                      /* error */
--                      DEBUG2(printk(KERN_INFO "%s(): PCI data struct not found. "
--                                      "pcir_adr=%x.\n",
--                                      __func__, pcir_adr);)
-+              /* Locate PCI data structure. */
-+              pcids = pcihdr +
-+                  ((qla2x00_read_flash_byte(ha, pcihdr + 0x19) << 8) |
-+                      qla2x00_read_flash_byte(ha, pcihdr + 0x18));
-+
-+              /* Validate signature of PCI data structure. */
-+              if (qla2x00_read_flash_byte(ha, pcids) != 'P' ||
-+                  qla2x00_read_flash_byte(ha, pcids + 0x1) != 'C' ||
-+                  qla2x00_read_flash_byte(ha, pcids + 0x2) != 'I' ||
-+                  qla2x00_read_flash_byte(ha, pcids + 0x3) != 'R') {
-+                      /* Incorrect header. */
-+                      DEBUG2(printk("%s(): PCI data struct not found "
-+                          "pcir_adr=%x.\n",
-+                          __func__, pcids));
-                       ret = QL_STATUS_ERROR;
-                       break;
-               }
--      } while (--loop_cnt);
--      qla2x00_flash_disable(ha);
-+              /* Read version */
-+              code_type = qla2x00_read_flash_byte(ha, pcids + 0x14);
-+              switch (code_type) {
-+              case ROM_CODE_TYPE_BIOS:
-+                      /* Intel x86, PC-AT compatible. */
-+                      set_bit(ROM_CODE_TYPE_BIOS, &ha->code_types);
-+                      ha->bios_revision[0] =
-+                          qla2x00_read_flash_byte(ha, pcids + 0x12);
-+                      ha->bios_revision[1] =
-+                          qla2x00_read_flash_byte(ha, pcids + 0x13);
-+                      DEBUG3(printk("%s(): read BIOS %d.%d.\n", __func__,
-+                          ha->bios_revision[1], ha->bios_revision[0]));
-+                      break;
-+              case ROM_CODE_TYPE_FCODE:
-+                      /* Open Firmware standard for PCI (FCode). */
-+                      /* Eeeewww... */
-+                      if (qla2x00_get_fcode_version(ha, pcids) ==
-+                          QL_STATUS_SUCCESS)
-+                              set_bit(ROM_CODE_TYPE_FCODE, &ha->code_types);
-+                      break;
-+              case ROM_CODE_TYPE_EFI:
-+                      /* Extensible Firmware Interface (EFI). */
-+                      set_bit(ROM_CODE_TYPE_EFI, &ha->code_types);
-+                      ha->efi_revision[0] =
-+                          qla2x00_read_flash_byte(ha, pcids + 0x12);
-+                      ha->efi_revision[1] =
-+                          qla2x00_read_flash_byte(ha, pcids + 0x13);
-+                      DEBUG3(printk("%s(): read EFI %d.%d.\n", __func__,
-+                          ha->efi_revision[1], ha->efi_revision[0]));
-+                      break;
-+              default:
-+                      DEBUG2(printk("%s(): Unrecognized code type %x at "
-+                          "pcids %x.\n", __func__, code_type, pcids));
-+                      break;
-+              }
--      LEAVE(__func__);
-+              last_image = qla2x00_read_flash_byte(ha, pcids + 0x15) & BIT_7;
-+
-+              /* Locate next PCI expansion ROM. */
-+              pcihdr += ((qla2x00_read_flash_byte(ha, pcids + 0x11) << 8) |
-+                  qla2x00_read_flash_byte(ha, pcids + 0x10)) * 512;
-+      } while (!last_image);
-+
-+      qla2x00_flash_disable(ha);
-       return (ret);
- }
-+/**
-+ * qla2x00_get_fcode_version() - Determine an FCODE image's version.
-+ * @ha: HA context
-+ * @pcids: Pointer to the FCODE PCI data structure
-+ *
-+ * The process of retrieving the FCODE version information is at best
-+ * described as interesting.
-+ *
-+ * Within the first 100h bytes of the image an ASCII string is present
-+ * which contains several pieces of information including the FCODE
-+ * version.  Unfortunately it seems the only reliable way to retrieve
-+ * the version is by scanning for another sentinel within the string,
-+ * the FCODE build date:
-+ *
-+ *    ... 2.00.02 10/17/02 ...
-+ *
-+ * Returns QL_STATUS_SUCCESS on successful retrieval of version.
-+ */
-+static uint16_t
-+qla2x00_get_fcode_version(scsi_qla_host_t *ha, uint32_t pcids)
-+{
-+      uint16_t        ret = QL_STATUS_ERROR;
-+      uint32_t        istart, iend, iter, vend;
-+      uint8_t         do_next, *vbyte;
-+
-+      memset(ha->fcode_revision, 0, sizeof(ha->fcode_revision));
-+
-+      /* Skip the PCI data structure. */
-+      istart = pcids +
-+          ((qla2x00_read_flash_byte(ha, pcids + 0x0B) << 8) |
-+              qla2x00_read_flash_byte(ha, pcids + 0x0A));
-+      iend = istart + 0x100;
-+      do {
-+              /* Scan for the sentinel date string...eeewww. */
-+              do_next = 0;
-+              iter = istart;
-+              while ((iter < iend) && !do_next) {
-+                      iter++;
-+                      if (qla2x00_read_flash_byte(ha, iter) == '/') {
-+                              if (qla2x00_read_flash_byte(ha, iter + 2) ==
-+                                  '/')
-+                                      do_next++;
-+                              else if (qla2x00_read_flash_byte(ha,
-+                                  iter + 3) == '/')
-+                                      do_next++;
-+                      }
-+              }
-+              if (!do_next)
-+                      break;
-+
-+              /* Backtrack to previous ' ' (space). */
-+              do_next = 0;
-+              while ((iter > istart) && !do_next) {
-+                      iter--;
-+                      if (qla2x00_read_flash_byte(ha, iter) == ' ')
-+                              do_next++;
-+              }
-+              if (!do_next)
-+                      break;
-+
-+              /* Mark end of version tag, and find previous ' ' (space). */
-+              vend = iter - 1;
-+              do_next = 0;
-+              while ((iter > istart) && !do_next) {
-+                      iter--;
-+                      if (qla2x00_read_flash_byte(ha, iter) == ' ')
-+                              do_next++;
-+              }
-+              if (!do_next)
-+                      break;
-+
-+              /* Mark beginning of version tag, and copy data. */
-+              iter++;
-+              if ((vend - iter) &&
-+                  ((vend - iter) < sizeof(ha->fcode_revision))) {
-+                      vbyte = ha->fcode_revision;
-+                      while (iter <= vend) {
-+                              *vbyte++ = qla2x00_read_flash_byte(ha, iter);
-+                              iter++;
-+                      }
-+                      ret = QL_STATUS_SUCCESS;        
-+              }
-+      } while (0);
-+
-+      return ret;
-+}
-+
- #if defined(NOT_USED_FUNCTION)
- /**
-  * qla2x00_get_flash_image() - Read image from flash chip.
-@@ -17608,6 +17295,8 @@ qla2x00_set_flash_image(scsi_qla_host_t 
-       /* Reset ISP chip. */
-       WRT_REG_WORD(&reg->ctrl_status, CSR_ISP_SOFT_RESET);
-+      /* Delay after reset, for chip to recover. */
-+      udelay(20);
-       qla2x00_flash_enable(ha);
-       do {    /* Loop once to provide quick error exit */
-@@ -17687,312 +17376,11 @@ qla2x00_set_flash_image(scsi_qla_host_t 
-       return (status);
- }
--#if USE_FLASH_DATABASE
--#error Do not use FLASH DATABASE!!!!
--
--/*
--* qla2x00_flash_enable_database
--*      Setup flash for reading/writing.
--*
--* Input:
--*      ha = adapter block pointer.
--*/
--STATIC void
--qla2x00_flash_enable_database(scsi_qla_host_t *ha)
--{
--      device_reg_t *reg = ha->iobase;
--
--      /* Setup bit 16 of flash address. */
--      WRT_REG_WORD(&reg->nvram, NV_SELECT);
--
--      /* Enable Flash Read/Write. */
--      WRT_REG_WORD(&reg->ctrl_status, CSR_FLASH_ENABLE);
--
--      /* Read/Reset Command Sequence */
--      qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
--      qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
--      qla2x00_write_flash_byte(ha, 0x5555, 0xf0);
--      qla2x00_read_flash_byte(ha, FLASH_DATABASE_0);
--}
--
--/*
--* qla2x00_flash_disable_database
--*      Disable flash and allow RISC to run.
--*
--* Input:
--*      ha = adapter block pointer.
--*/
--STATIC void
--qla2x00_flash_disable_database(scsi_qla_host_t *ha)
--{
--      device_reg_t *reg = ha->iobase;
--
--      /* Restore chip registers. */
--      WRT_REG_WORD(&reg->ctrl_status, 0);
--      WRT_REG_WORD(&reg->nvram, 0);
--}
--
--
--/*
--* qla2x00_get_database
--*      Copies and converts flash database to driver database.
--*      (may sleep)
--*
--* Input:
--*      ha = adapter block pointer.
--*
--* Returns:
--*      0 = success.
--*/
--STATIC uint8_t
--qla2x00_get_database(scsi_qla_host_t *ha)
--{
--      flash_database_t *fptr;
--      uint8_t          status = 1;
--      uint32_t         addr;
--      uint16_t         cnt;
--      uint8_t          *bptr;
--      uint8_t          checksum;
--      uint32_t         b, t;
--
--      ENTER("qla2x00_get_database");
--
--      /* Default setup. */
--      ha->flash_db = FLASH_DATABASE_0;
--      ha->flash_seq = 0;
--
--      fptr = kmalloc(sizeof(flash_database_t), GFP_ATOMIC);
--      if (!fptr) {
--              printk(KERN_WARNING
--                      "scsi(%d): Memory Allocation failed - flash mem",
--                      (int)ha->host_no);
--              ha->mem_err++;
--              return (status);
--      }
--
--      /* Enable Flash Read/Write. */
--      qla2x00_flash_enable_database(ha);
--
--      /* 
--       * Start with flash database with the highest sequence number. 
--       */
--      b = qla2x00_read_flash_byte(ha, FLASH_DATABASE_0);
--      b |= qla2x00_read_flash_byte(ha, FLASH_DATABASE_0 + 1) << 8;
--      b |= qla2x00_read_flash_byte(ha, FLASH_DATABASE_0 + 1) << 16;
--      b |= qla2x00_read_flash_byte(ha, FLASH_DATABASE_0 + 1) << 24;
--      t = qla2x00_read_flash_byte(ha, FLASH_DATABASE_1);
--      t |= qla2x00_read_flash_byte(ha, FLASH_DATABASE_1 + 1) << 8;
--      t |= qla2x00_read_flash_byte(ha, FLASH_DATABASE_1 + 1) << 16;
--      t |= qla2x00_read_flash_byte(ha, FLASH_DATABASE_1 + 1) << 24;
--      if (t > b) {
--              ha->flash_db = FLASH_DATABASE_1;
--      }
--
--      /* Select the flash database with the good checksum. */
--      for (t = 0; t < 2; t++) {
--              checksum = 0;
--              addr = ha->flash_db;
--              bptr = (uint8_t *)fptr;
--              fptr->hdr.size = sizeof(flash_database_t);
--
--              /* Read flash database to driver. */
--              for (cnt = 0; cnt < fptr->hdr.size; cnt++) {
--                      *bptr = (uint8_t)qla2x00_read_flash_byte(ha, addr++);
--                      checksum += *bptr++;
--                      if (bptr == &fptr->hdr.spares[0] &&
--                              (fptr->hdr.size > sizeof(flash_database_t) ||
--                               fptr->hdr.size < sizeof(flash_hdr_t) ||
--                               !fptr->hdr.version) ) {
--
--                              checksum = 1;
--                              break;
--                      }
--              }
--
--              if (!checksum) {
--                      status = 0;
--                      break;
--              }
--              /* trying other database */
--              if (ha->flash_db == FLASH_DATABASE_0) {
--                      ha->flash_db = FLASH_DATABASE_1;
--              } else {
--                      ha->flash_db = FLASH_DATABASE_0;
--              }
--      }
--
--      if (!status) {
--              ha->flash_seq = fptr->hdr.seq;
--
--              /* Convert flash database to driver database format. */
--              if (fptr->hdr.size -= sizeof(flash_hdr_t)) {
--                      for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
--                              ha->fc_db[cnt].name[0] =
--                                              fptr->node[cnt].name[0];
--                              ha->fc_db[cnt].name[1] =
--                                              fptr->node[cnt].name[1];
--                              /* UNKNOWN CODE!!! 
--                              cnt,
--                              ha->fc_db[cnt].name[1],
--                              ha->fc_db[cnt].name[0]);
--                              */
--
--                              ha->fc_db[cnt].loop_id = PORT_AVAILABLE;
--                              ha->fc_db[cnt].flag = 0;  /* v2.19.05b3 */
--                              if(!(fptr->hdr.size -= sizeof(flash_node_t)))
--                                      break;
--                      }
--              }
--      }
--
--      qla2x00_flash_disable_database(ha);
--
--      kfree(fptr);
--
--#if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_3)
--      if (status)
--              printk("qla2x00_get_database: **** FAILED ****\n");
--#endif
--
--      LEAVE("qla2x00_get_database");
--
--      return(status);
--}
--
--/*
--* qla2x00_save_database
--*      Copies and converts driver database to flash database.
--*      (may sleep)
--*
--* Input:
--*      ha = adapter block pointer.
--*
--* Returns:
--*      0 = success.
--*/
--STATIC uint8_t
--qla2x00_save_database(scsi_qla_host_t *ha)
--{
--      flash_database_t *fptr;
--      uint8_t          status = 1;
--      uint32_t         addr;
--      uint16_t         cnt;
--      uint8_t          *bptr;
--      uint8_t          checksum;
--
--      ENTER("qla2x00_save_database");
--
--      fptr = kmalloc(sizeof(flash_database_t), GFP_ATOMIC);
--      if (!fptr) {
--              printk(KERN_WARNING
--                      "scsi(%d): Memory Allocation failed - flash mem",
--                      (int)ha->host_no);
--              ha->mem_err++;
--              return (status);
--      }
--
--      /* Enable Flash Read/Write. */
--      qla2x00_flash_enable_database(ha);
--
--      fptr->hdr.seq = ++ha->flash_seq;
--      fptr->hdr.version = FLASH_DATABASE_VERSION;
--      fptr->hdr.size = sizeof(flash_hdr_t);
--
--      /* Copy and convert driver database to flash database. */
--      for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
--              if (ha->fc_db[cnt].loop_id == PORT_UNUSED)
--                      break;
--              else {
--                      fptr->node[cnt].name[0] = ha->fc_db[cnt].name[0];
--                      fptr->node[cnt].name[1] = ha->fc_db[cnt].name[1];
--                      fptr->hdr.size += sizeof(flash_node_t);
--              }
--      }
--
--      /* Calculate checksum. */
--      checksum = 0;
--      bptr = (uint8_t *)fptr;
--      for (cnt = 0; cnt < fptr->hdr.size; cnt++)
--              checksum += *bptr++;
--      fptr->hdr.checksum = ~checksum + 1;
--
--      /* Setup next sector address for flash */
--      if (ha->flash_db == FLASH_DATABASE_0)
--              addr = FLASH_DATABASE_1;
--      else
--              addr = FLASH_DATABASE_0;
--      ha->flash_db = addr;
--
--      /* Erase flash sector prior to write. */
--      status = qla2x00_erase_flash_sector(ha, addr);
--
--      /* Write database to flash. */
--      bptr = (uint8_t *)fptr;
--      for (cnt = 0; cnt < fptr->hdr.size && !status; cnt++)
--              status = qla2x00_program_flash_address(ha, addr++, *bptr++);
--
--      qla2x00_flash_disable_database(ha);
--
--      kfree(fptr);
--
--#if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_3)
--      if (status)
--              printk("qla2x00_save_database: **** FAILED ****\n");
--#endif
--
--      LEAVE("qla2x00_save_database");
--
--      return(status);
--}
--
--#endif
--
--
--/*
-- *qla2x00_add_initiator_device
-- *      This routine adds the initiator device to the list
-- *
-- * Input:
-- *      ha = adapter block pointer.
-- *      device = device data pointer.
-- *
-- * Returns:
-- *      0 = success, initiator added to the list
-- *      1 = Failed to allocate memory
-- */
--static int
--qla2x00_add_initiator_device(scsi_qla_host_t *ha, fcdev_t *device)
--{
--      int     ret;
--      fc_initiator_t  *fcinitiator;
--
--      ret = 1;
--      fcinitiator = kmalloc(sizeof(fc_initiator_t), GFP_ATOMIC);
--      if (fcinitiator != NULL) {
--              /* Setup initiator structure. */
--              memset(fcinitiator, 0, sizeof(fc_initiator_t));
--      
--              memcpy(fcinitiator->node_name, device->name, WWN_SIZE);
--              memcpy(fcinitiator->port_name, device->wwn, WWN_SIZE);
--              fcinitiator->d_id.b24 = device->d_id.b24;
--              fcinitiator->loop_id = device->loop_id;
--              list_add_tail(&fcinitiator->list, &ha->fcinitiators);
--              ret = 0;
--      } else {
--              printk(KERN_WARNING
--                      "%s(): Memory Allocation failed - FCINITIATOR\n",
--                      __func__);
--      }
--
--      return (ret);
--}
--
--
- /*
- * Declarations for load module
- */
- static  Scsi_Host_Template driver_template = QLA2100_LINUX_TEMPLATE;
--#include "../scsi_module.c"
-+#include "scsi_module.c"
- /****************************************************************************/
- /*                         Driver Debug Functions.                          */
-@@ -18004,11 +17392,10 @@ qla2x00_dump_buffer(uint8_t * b, uint32_
-       uint32_t cnt;
-       uint8_t c;
--      printk(" 0   1   2   3   4   5   6   7   8   9 "
--                      "       Ah  Bh  Ch  Dh  Eh  Fh\n");
--      printk("---------------------------------------"
--                      "------------------------\n");
--
-+      printk(" 0   1   2   3   4   5   6   7   8   9  "
-+          "Ah  Bh  Ch  Dh  Eh  Fh\n");
-+      printk("----------------------------------------"
-+          "----------------------\n");
-       for (cnt = 0; cnt < size;) {
-               c = *b++;
-               printk("%02x",(uint32_t) c);
-@@ -18018,8 +17405,7 @@ qla2x00_dump_buffer(uint8_t * b, uint32_
-               else
-                       printk("  ");
-       }
--      if (cnt % 16)
--              printk("\n");
-+      printk("\n");
- }
- /**************************************************************************
-@@ -18028,7 +17414,7 @@ qla2x00_dump_buffer(uint8_t * b, uint32_
-  *   Input     
-  *     cmd : Scsi_Cmnd
-  **************************************************************************/
--static void
-+void
- qla2x00_print_scsi_cmd(Scsi_Cmnd * cmd) 
- {
-       struct scsi_qla_host *ha;
-@@ -18083,7 +17469,7 @@ qla2x00_print_scsi_cmd(Scsi_Cmnd * cmd) 
-  * Input
-  *      q: lun queue   
-  */ 
--static void 
-+void 
- qla2x00_print_q_info(struct os_lun *q) 
- {
-       printk("Queue info: flags=0x%lx\n", q->q_flag);
-@@ -18100,7 +17486,7 @@ qla2x00_print_q_info(struct os_lun *q) 
-  *       wd_size = word size 8, 16, 32 or 64 bits
-  *       count   = number of words.
-  */
--static void
-+void
- qla2x00_formatted_dump_buffer(char *string, uint8_t * buffer, 
-                               uint8_t wd_size, uint32_t count) 
- {
-@@ -18231,7 +17617,7 @@ qla2x00_panic(char *cp, struct Scsi_Host
- *   qla2x00_dump_requests
- *
- **************************************************************************/
--static void
-+void
- qla2x00_dump_requests(scsi_qla_host_t *ha) 
- {
-@@ -18418,6 +17804,7 @@ qla2x00_get_tokens(char *line, char **ar
- }
- #if VSA
-+/* XXX: There is no fc_db member in HA. */
- /*
-  * qla2x00_get_vsa_opt_from_config
-  *      Get VSA option from the configuration parameters.
-@@ -18506,8 +17893,6 @@ qla2x00_cfg_persistent_binding(scsi_qla_
-               rval = qla2x00_get_prop_16chars(ha, propbuf, pnn, cmdline);
-               if (rval != 0)
-                       pnn = NULL;
--              if (ha->binding_type == BIND_BY_NODE_NAME && rval != 0)
--                      continue;
-               tq = qla2x00_tgt_alloc(ha, tgt);
-               if (tq == NULL) {
-@@ -18517,13 +17902,8 @@ qla2x00_cfg_persistent_binding(scsi_qla_
-                       continue;
-               }
--              ha->fc_db[tgt].loop_id = PORT_AVAILABLE;
--              ha->fc_db[tgt].flag = 0;  /* v2.19.05b3 */
--              ha->fc_db[tgt].flag |= DEV_CONFIGURED;
--
-               if (ppn != NULL) {
-                       memcpy(tq->port_name, ppn, WWN_SIZE);
--                      memcpy(ha->fc_db[tgt].wwn, ppn, WWN_SIZE);
-               }
-               if (pd_id != NULL) {
-                       /*
-@@ -18534,11 +17914,9 @@ qla2x00_cfg_persistent_binding(scsi_qla_
-                       pd_id->r.d_id[1] = portid[1];
-                       pd_id->r.d_id[2] = portid[0];
-                       tq->d_id.b24 = pd_id->b24;
--                      ha->fc_db[tgt].d_id.b24 = pd_id->b24;
-               }
-               if (pnn != NULL) {
-                       memcpy(tq->node_name, pnn, WWN_SIZE);
--                      memcpy(ha->fc_db[tgt].name, pnn, WWN_SIZE);
-               }
-               DEBUG(printk("Target %03d - configured by user: ",tgt);)
-@@ -18556,20 +17934,11 @@ qla2x00_cfg_persistent_binding(scsi_qla_
-                                       tgt,
-                                       pd_id->b24);)
-                               break;
--
--                      case BIND_BY_NODE_NAME:
--                              DEBUG(printk("**bind tgt by port-%03d="
--                                      "%02x%02x%02x%02x%02x%02x%02x%02x\n",
--                                      tgt,
--                                      pnn[0], pnn[1], pnn[2], pnn[3],
--                                      pnn[4], pnn[5], pnn[6], pnn[7]);)
--                              break;
-               }
-               /* look for VSA */
- #if VSA
-               qla2x00_get_vsa_opt_from_config(ha, tgt, dev_no);
- #endif
--
-       }
-       LEAVE(__func__);
-@@ -18580,7 +17949,7 @@ qla2x00_cfg_persistent_binding(scsi_qla_
-  * kmem_zalloc
-  * Allocate and zero out the block of memory
-  */
--static inline void *
-+inline void *
- kmem_zalloc( int siz, int code, int id) 
- {
-       uint8_t *bp;
-@@ -18627,6 +17996,7 @@ kmem_free(void *ptr) 
- /*
-  * Declarations for failover
-  */
-+
- #include "qla_cfg.c"
- #include "qla_fo.c"
-@@ -18646,18 +18016,10 @@ static struct Scsi_Host *apidev_host = 0
- static int 
- apidev_open(struct inode *inode, struct file *file) 
- {
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-       DEBUG9(printk(KERN_INFO
-                       "%s(): open MAJOR number = %d, MINOR number = %d\n",
-                       __func__,
-                       MAJOR(inode->i_rdev), MINOR(inode->i_rdev));)
--#else
--      DEBUG9(printk(KERN_INFO 
--                      "%s(): open MAJOR number = %d, MINOR number = %d\n", 
--                      __func__,
--                      major(inode->i_rdev), minor(inode->i_rdev));)
--#endif
--
-       return 0;
- }
-@@ -18684,14 +18046,20 @@ apidev_ioctl(struct inode *inode, struct
- }
- static struct file_operations apidev_fops = {
--       ioctl:
--               apidev_ioctl,
--       open:
--               apidev_open,
--       release:
--               apidev_close
-+      owner:
-+              THIS_MODULE,
-+      ioctl:
-+              apidev_ioctl,
-+      open:
-+              apidev_open,
-+      release:
-+              apidev_close
- };
-+#if defined(QLA_CONFIG_COMPAT)
-+#include "qla_ppc64.c"
-+#endif
-+
- static int 
- apidev_init(struct Scsi_Host *host) 
- {
-@@ -18717,22 +18085,19 @@ apidev_init(struct Scsi_Host *host) 
-                       host->hostt->proc_dir->name, 
-                       APIDEV_NODE, apidev_major);)
--#ifndef __VMWARE__
--           // XXX: Fix this when proc_mknod works again on main!!!
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-       proc_mknod(APIDEV_NODE, 0777+S_IFCHR, host->hostt->proc_dir,
-                       (kdev_t)MKDEV(apidev_major, 0));
--#else
--      proc_mknod(APIDEV_NODE, 0777+S_IFCHR, host->hostt->proc_dir,
--                      (kdev_t)mk_kdev(apidev_major, 0));
-+
-+#if defined(QLA_CONFIG_COMPAT)
-+      apidev_init_ppc64();
- #endif
--#endif //__VMWARE__
-       return 0;
- }
- static int apidev_cleanup() 
- {
-+
-       if (!apidev_host)
-               return 0;
-@@ -18740,6 +18105,10 @@ static int apidev_cleanup() 
-       remove_proc_entry(APIDEV_NODE,apidev_host->hostt->proc_dir);
-       apidev_host = 0;
-+#if defined(QLA_CONFIG_COMPAT)
-+      apidev_cleanup_ppc64();
-+#endif
-+
-       return 0;
- }
- #endif /* APIDEV */
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla2x00.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla2x00.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla2x00.h    2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla2x00.h 2004-04-22 19:42:53.000000000 -0700
-@@ -2,7 +2,7 @@
- *                  QLOGIC LINUX SOFTWARE
- *
- * QLogic ISP2x00 device driver for Linux 2.4.x
--* Copyright (C) 2003 Qlogic Corporation
-+* Copyright (C) 2003 QLogic Corporation
- * (www.qlogic.com)
- *
- * This program is free software; you can redistribute it and/or modify it
-@@ -45,12 +45,15 @@ extern "C" {
- /* #define QL_DEBUG_LEVEL_10 */ /* Output IOCTL error msgs */
- /* #define QL_DEBUG_LEVEL_11 */ /* Output Mbx Cmd trace msgs */
- /* #define QL_DEBUG_LEVEL_12 */ /* Output IP trace msgs */
-+/* #define QL_DEBUG_LEVEL_13 */ /* Output fdmi function trace msgs */
- #define QL_DEBUG_CONSOLE            /* Output to console */
- #include <asm/bitops.h>
- #include <asm/semaphore.h>
-+#define QLOGIC_COMPANY_NAME   "QLogic Corporation"
-+
- /*
-  * Data bit definitions.
-  */
-@@ -87,18 +90,14 @@ extern "C" {
- #define BIT_30  0x40000000
- #define BIT_31  0x80000000
--#define LS_64BITS(x)  ((uint32_t)(0xffffffff & ((u64)(x))))
--#define MS_64BITS(x)  ((uint32_t)(0xffffffff & (((u64)(x))>>16>>16)))
-+#define LSB(x)        ((uint8_t)(x))
-+#define MSB(x)        ((uint8_t)((uint16_t)(x) >> 8))
--#define MSB(x)          (uint8_t)(((uint16_t)(x) >> 8) & 0xff)
--#define LSB(x)          (uint8_t)(x & 0xff)
--#define MSW(x)          (uint16_t)(((uint32_t)(x) >> 16) & 0xffff)
--#define LSW(x)          (uint16_t)(x & 0xffff)
--#define QL21_64BITS_3RDWD(x)   ((uint16_t) (( (x) >> 16) >> 16) & 0xffff)
--#define QL21_64BITS_4THWD(x)   ((uint16_t) ((( (x) >>16)>>16)>>16) & 0xffff)
-+#define LSW(x)        ((uint16_t)(x))
-+#define MSW(x)        ((uint16_t)((uint32_t)(x) >> 16))
--#define LSD(x)  ((uint32_t)((uint64_t)(x)))
--#define MSD(x)  ((uint32_t)((uint64_t)(x) >> 32))
-+#define LSD(x)        ((uint32_t)((uint64_t)(x)))
-+#define MSD(x)        ((uint32_t)((((uint64_t)(x)) >> 16) >> 16))
-@@ -143,7 +142,7 @@ typedef char BOOL;
-  * I/O register
- */
- /* #define MEMORY_MAPPED_IO  */    /* Enable memory mapped I/O */
--#undef MEMORY_MAPPED_IO            /* Disable memory mapped I/O */
-+#define MEMORY_MAPPED_IO  1
- #if defined(MEMORY_MAPPED_IO)
- #define RD_REG_BYTE(addr)         readb(addr)
-@@ -164,6 +163,10 @@ typedef char BOOL;
-  * Fibre Channel device definitions.
-  */
- #define WWN_SIZE              8       /* Size of WWPN, WWN & WWNN */
-+#if defined(ISP200)
-+#define MAX_FABRIC_DEVICES    8  /* Fabric Devices */ 
-+#define MAX_LLOOP_DEVICES     16 /* Local Loop Devices */
-+#endif
- #define MAX_FIBRE_DEVICES     256
- #define MAX_FIBRE_LUNS        256
- #define       MAX_RSCN_COUNT          10
-@@ -186,14 +189,25 @@ typedef char BOOL;
- /*
-  * Fibre Channel device definitions.
-  */
-+#if defined(EXTENDED_IDS)
-+#define SNS_LAST_LOOP_ID      0x7ff
-+#else
-+#define SNS_LAST_LOOP_ID      0xfe
-+#endif
-+
- #define LAST_LOCAL_LOOP_ID  0x7d
- #define SNS_FL_PORT         0x7e
- #define FABRIC_CONTROLLER   0x7f
- #define SIMPLE_NAME_SERVER  0x80
- #define SNS_FIRST_LOOP_ID   0x81
--#define LAST_SNS_LOOP_ID    0xfe
- #define MANAGEMENT_SERVER   0xfe
- #define BROADCAST           0xff
-+
-+#define RESERVED_LOOP_ID(x)   ((x > LAST_LOCAL_LOOP_ID && \
-+                               x < SNS_FIRST_LOOP_ID) || \
-+                               x == MANAGEMENT_SERVER || \
-+                               x == BROADCAST)
-+
- #define SNS_ACCEPT          0x0280      /* 8002 swapped */
- #define SNS_REJECT          0x0180      /* 8001 swapped */
-@@ -214,10 +228,10 @@ typedef char BOOL;
- #define       LOOP_DOWN_RESET         (LOOP_DOWN_TIME - 30)
- /* Maximum outstanding commands in ISP queues (1-65535) */
--#define MAX_OUTSTANDING_COMMANDS   1024
-+#define MAX_OUTSTANDING_COMMANDS   2048
- /* ISP request and response entry counts (37-65535) */
--#define REQUEST_ENTRY_CNT       128     /* Number of request entries. */
-+#define REQUEST_ENTRY_CNT       512     /* Number of request entries. */
- #if defined(ISP2100) || defined(ISP2200)
- #define RESPONSE_ENTRY_CNT      64      /* Number of response entries.*/
- #else
-@@ -243,16 +257,12 @@ typedef char BOOL;
- #define SGDATA_PER_REQUEST    2 
- #define SGDATA_PER_CONT               7
--#define SG_SEGMENTS   (SGDATA_PER_REQUEST + (SGDATA_PER_CONT * REQUEST_ENTRY_CNT - 2))     
--
- /*
-  * SCSI Request Block 
-  */
- typedef struct srb
- {
-     struct list_head   list;
--    struct srb  *s_next;             /* (4) Next block on LU queue */
--    struct srb  *s_prev;             /* (4) Previous block on LU queue */
-     Scsi_Cmnd  *cmd;                 /* Linux SCSI command pkt */
-     struct scsi_qla_host *ha;         /* ha this SP is queued on */
-     uint8_t     more_cdb[4];         /* For 16 bytes CDB pass thru cmd since
-@@ -288,10 +298,15 @@ typedef struct srb
-       /* Target/LUN queue pointers. */
-     struct os_tgt             *tgt_queue;     /* ptr to visible ha's target */
-     struct os_lun             *lun_queue;     /* ptr to visible ha's lun */
--      struct fc_lun           *fclun;         /* FC LUN context pointer. */
-+    struct fc_lun             *fclun;         /* FC LUN context pointer. */
-       /* Raw completion info for use by failover ? */
-     uint8_t   fo_retry_cnt;   /* Retry count this request */
-     uint8_t   err_id;         /* error id */
-+#define SRB_ERR_PORT       1    /* Request failed because "port down" */
-+#define SRB_ERR_LOOP       2    /* Request failed because "loop down" */
-+#define SRB_ERR_DEVICE     3    /* Request failed because "device error" */
-+#define SRB_ERR_OTHER      4
-+
-     uint8_t   cmd_length;             /* command length */
-     uint8_t   qfull_retry_count;
-@@ -301,7 +316,7 @@ typedef struct srb
-     u_long      e_start;             /* jiffies at start of extend timeout */
-     u_long      r_start;             /* jiffies at start of request */
-     u_long      u_start;             /* jiffies when sent to F/W    */
--    u_long      f_start;            /*ra 10/29/01*/ /*jiffies when put in failov                                      er queue*/
-+    u_long      f_start;            /*ra 10/29/01*/ /*jiffies when put in failover queue*/
-     uint32_t    resid;              /* Residual transfer length */
-     uint16_t    sense_len;          /* Sense data length */
-     uint32_t    request_sense_length;
-@@ -329,6 +344,8 @@ typedef struct srb
- #define       SRB_ISP_STARTED      BIT_11     /* Command sent to ISP. */
- #define       SRB_ISP_COMPLETED    BIT_12     /* ISP finished with command */
-+#define       SRB_FDMI_CMD         BIT_13     /* MSIOCB/non-ioctl command. */
-+#define       SRB_TAPE                BIT_14  /* TAPE command. */
- /*
-@@ -440,7 +457,7 @@ typedef volatile struct
- #else
- /*
-- *  I/O Register Set structure definitions for ISP2300.
-+ *  I/O Register Set structure definitions for ISP2300/ISP200.
-  */
- typedef volatile struct
- {
-@@ -597,12 +614,23 @@ typedef struct {
- #define MBS_TEST_FAILED     0x4003      /* Test Failed. */
- #define MBS_CMD_ERR         0x4005      /* Command Error. */
- #define MBS_CMD_PARAM_ERR   0x4006      /* Command Parameter Error. */
-+#define MBS_PORT_ID_USED      0x4007
-+#define MBS_LOOP_ID_USED      0x4008
-+#define MBS_ALL_IDS_IN_USE    0x4009 /* For ISP200 if host tries to log
-+                                        into more than 8 targets */
-+#define MBS_NOT_LOGGED_IN     0x400A
-+
- #define MBS_FATAL_ERROR     0xF000      /* Command Fatal Error. */
- #define MBS_FIRMWARE_ALIVE          0x0000 
- #define MBS_COMMAND_COMPLETE        0x4000 
- #define MBS_INVALID_COMMAND         0x4001 
-+/* F/W will return mbx0:0x4005 and mbx1:0x16 if
-+ * HBA tries to log into a target through FL Port
-+ */ 
-+#define MBS_SC_TOPOLOGY_ERR   0x16  
-+
- /* QLogic subroutine status definitions */
- #define QL_STATUS_SUCCESS           0
- #define QL_STATUS_ERROR             1
-@@ -632,11 +660,17 @@ typedef struct {
- #define MBA_RSCN_UPDATE         MBA_SCR_UPDATE
- #define MBA_SCSI_COMPLETION     0x8020  /* SCSI Command Complete. */
- #define MBA_CTIO_COMPLETION     0x8021  /* CTIO Complete. */
--#if !defined(ISP2100)
- #define MBA_LINK_MODE_UP        0x8030  /* FC Link Mode UP. */
- #define MBA_UPDATE_CONFIG       0x8036  /* FC Update Configuration. */
- #define MBA_ZIO_UPDATE          0x8040  /* ZIO-Process response queue */
--#endif
-+#define RIO_MBS_CMD_CMP_1_16  0x8031  /* Scsi command complete */
-+#define RIO_MBS_CMD_CMP_2_16  0x8032  /* Scsi command complete */
-+#define RIO_MBS_CMD_CMP_3_16  0x8033  /* Scsi command complete */
-+#define RIO_MBS_CMD_CMP_4_16  0x8034  /* Scsi command complete */
-+#define RIO_MBS_CMD_CMP_5_16  0x8035  /* Scsi command complete */
-+#define RIO_RESPONSE_UPDATE   0x8040  /* Scsi command complete but check iocb */
-+
-+
- /*
-  * ISP mailbox commands
-@@ -689,7 +723,7 @@ typedef struct {
- #define       MBC_INITIALIZE_RECEIVE_QUEUE    0x77    /* Initialize receive queue */
- #define       MBC_SEND_FARP_REQ_COMMAND       0x78    /* FARP request. */
- #define       MBC_SEND_FARP_REPLY_COMMAND     0x79    /* FARP reply. */
--#define       MBC_PORT_LOOP_NAME_LIST         0x7C    /* Get port/node name list. */
-+#define       MBC_GET_ID_LIST                 0x7C    /* Get Port ID list. */
- #define       MBC_SEND_LFA_COMMAND            0x7D    /* Send Loop Fabric Address */
- #define       MBC_LUN_RESET                   0x7E    /* Send LUN reset */
-@@ -1203,10 +1237,12 @@ struct qla2x00_hba_features
- /* For future QLA2XXX */
- #define NVRAM_MOD_OFFSET        200 /* Model Number offset: 200-215 */
- #define BINZERO                 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
--#define NVRAM_MODEL_SIZE        16 /* 16 bytes reserved for model_num string*/
- #endif
-+#define NVRAM_HW_ID_SIZE        16 /* 16 bytes reserved for hw_id string*/
-+#define NVRAM_MODEL_SIZE        16 /* 16 bytes reserved for model_num string*/
-+
- #if !defined(ISP2100)
- /*
-@@ -1283,7 +1319,10 @@ typedef struct
-     uint8_t    link_down_timeout;             
-     /* Offset 112 */
--    uint8_t    reserved_7_2[38];
-+    uint8_t    hw_id[16];
-+
-+    /* Offset 128 */
-+    uint8_t    reserved_7_2[22];
-     /* Offset 150 */
-     uint16_t    reserved_8[25];
-@@ -1404,8 +1443,12 @@ typedef struct
-     uint8_t  sys_define;                /* System defined. */
-     uint8_t  entry_status;              /* Entry Status. */
-     uint32_t handle;                    /* System handle. */
-+#if defined(EXTENDED_IDS)
-+    uint16_t  target;                    /* SCSI ID */
-+#else
-     uint8_t  reserved;
-     uint8_t  target;                    /* SCSI ID */
-+#endif
-     uint16_t lun;                       /* SCSI LUN */
-     uint16_t control_flags;             /* Control flags. */
- #define CF_HEAD_TAG           BIT_1
-@@ -1437,8 +1480,12 @@ typedef struct
-     uint8_t  sys_define;                /* System defined. */
-     uint8_t  entry_status;              /* Entry Status. */
-     uint32_t handle;                    /* System handle. */
-+#if defined(EXTENDED_IDS)
-+    uint16_t  target;                    /* SCSI ID */
-+#else
-     uint8_t  reserved;
-     uint8_t  target;                    /* SCSI ID */
-+#endif
-     uint16_t lun;                       /* SCSI LUN */
-     uint16_t control_flags;             /* Control flags. */
-     uint16_t reserved_1;
-@@ -1554,8 +1601,12 @@ typedef struct
-     uint8_t  sys_define;                /* System defined. */
-     uint8_t  entry_status;              /* Entry Status. */
-     uint32_t sys_define_2;              /* System defined. */
-+#if defined(EXTENDED_IDS)
-+    uint16_t  target;                    /* SCSI ID */
-+#else
-     uint8_t  reserved;
-     uint8_t  target;                    /* SCSI ID */
-+#endif
-     uint8_t  modifier;                  /* Modifier (7-0). */
-         #define MK_SYNC_ID_LUN      0   /* Synchronize ID/LUN */
-         #define MK_SYNC_ID          1   /* Synchronize ID */
-@@ -1633,8 +1684,12 @@ typedef struct
-     uint32_t sys_define_2;              /* System defined. */
-     uint8_t  reserved_8;
-     uint8_t  initiator_id;
-+#if defined(EXTENDED_IDS)
-+    uint16_t  target;                    
-+#else
-     uint8_t  reserved_1;
-     uint8_t  target_id;
-+#endif
-     uint32_t reserved_2;
-     uint16_t status;
-     uint16_t task_flags;
-@@ -1657,8 +1712,12 @@ typedef struct
-     uint32_t sys_define_2;              /* System defined. */
-     uint8_t  reserved_8;
-     uint8_t  initiator_id;
-+#if defined(EXTENDED_IDS)
-+    uint16_t  target;                    
-+#else
-     uint8_t  reserved_1;
-     uint8_t  target_id;
-+#endif
-     uint16_t flags;
-     uint16_t reserved_2;
-     uint16_t status;
-@@ -1678,8 +1737,12 @@ typedef struct
-     uint8_t  sys_define;                /* System defined. */
-     uint8_t  entry_status;              /* Entry Status. */
-     uint32_t sys_define_2;              /* System defined. */
-+#if defined(EXTENDED_IDS)
-+    uint16_t initiator_id;
-+#else
-     uint8_t  reserved_8;
-     uint8_t  initiator_id;
-+#endif
-     uint16_t exchange_id;
-     uint16_t flags;
-     uint16_t status;
-@@ -1707,8 +1770,12 @@ typedef struct
-     uint8_t  sys_define;                /* System defined. */
-     uint8_t  entry_status;              /* Entry Status. */
-     uint32_t sys_define_2;              /* System defined. */
-+#if defined(EXTENDED_IDS)
-+    uint16_t initiator_id;
-+#else
-     uint8_t  reserved_8;
-     uint8_t  initiator_id;
-+#endif
-     uint16_t exchange_id;
-     uint16_t flags;
-     uint16_t status;
-@@ -1738,8 +1805,12 @@ typedef struct
-     uint8_t  sys_define;                /* System defined. */
-     uint8_t  entry_status;              /* Entry Status. */
-     uint32_t sys_define_2;              /* System defined. */
-+#if defined(EXTENDED_IDS)
-+    uint16_t initiator_id;
-+#else
-     uint8_t  reserved_8;
-     uint8_t  initiator_id;
-+#endif
-     uint16_t exchange_id;
-     uint16_t flags;
-     uint16_t status;
-@@ -1763,8 +1834,12 @@ typedef struct
-     uint8_t  sys_define;                /* System defined. */
-     uint8_t  entry_status;              /* Entry Status. */
-     uint32_t sys_define_2;              /* System defined. */
-+#if defined(EXTENDED_IDS)
-+    uint16_t initiator_id;
-+#else
-     uint8_t  reserved_8;
-     uint8_t  initiator_id;
-+#endif
-     uint16_t exchange_id;
-     uint16_t flags;
-     uint16_t status;
-@@ -1792,8 +1867,12 @@ typedef struct
-     uint8_t  sys_define;                /* System defined. */
-     uint8_t  entry_status;              /* Entry Status. */
-     uint32_t sys_define_2;              /* System defined. */
-+#if defined(EXTENDED_IDS)
-+    uint16_t initiator_id;
-+#else
-     uint8_t  reserved_8;
-     uint8_t  initiator_id;
-+#endif
-     uint16_t exchange_id;
-     uint16_t flags;
-     uint16_t status;
-@@ -1883,10 +1962,15 @@ typedef struct
-     uint8_t  sys_define;                /* System defined. */
-     uint8_t  entry_status;              /* Entry Status. */
-     uint32_t handle1;                   /* System handle. */
-+#if defined(EXTENDED_IDS)
-+    uint16_t loop_id;
-+#else
-     uint8_t  reserved;
-     uint8_t  loop_id;
-+#endif
-     uint16_t status;
-     uint16_t control_flags;             /* Control flags. */
-+#define CF_ELS_PASSTHRU               BIT_15
-     uint16_t reserved2;
-     uint16_t timeout;
-     uint16_t cmd_dsd_count;
-@@ -1904,6 +1988,31 @@ typedef struct
-     uint32_t dseg_rsp_length;             /* Data segment 1 length. */
- } ms_iocb_entry_t;
-+/* 4.15
-+ * RIO Type 1 IOCB response
-+ */
-+struct rio_iocb_type1_entry
-+{
-+    uint8_t  entry_type;                /* Entry type. */
-+        #define RIO_IOCB_TYPE1 0x21       /*  IO Completion IOCB */
-+    uint8_t  entry_count;               /* Entry count. */
-+    uint8_t  handle_count;              /* # of valid handles. */
-+    uint8_t  entry_status;              /* Entry Status. */
-+    uint32_t handle[14];              /* handles finished */
-+}; 
-+
-+/* 4.16
-+ * RIO Type 2 IOCB response
-+ */
-+struct rio_iocb_type2_entry
-+{
-+    uint8_t  entry_type;                /* Entry type. */
-+        #define RIO_IOCB_TYPE2 0x22       /*  IO Completion IOCB */
-+    uint8_t  entry_count;               /* Entry count. */
-+    uint8_t  handle_count;              /* # of valid handles. */
-+    uint8_t  entry_status;              /* Entry Status. */
-+    uint16_t handle[29];              /* handles finished */
-+}; 
- /*
-  * ISP request and response queue entry sizes
-@@ -1941,11 +2050,8 @@ typedef struct
- #define SS_RESIDUAL_UNDER       BIT_11
- #define SS_RESIDUAL_OVER        BIT_10
- #define SS_SENSE_LEN_VALID      BIT_9
--#if defined(ISP2100)
- #define SS_RESIDUAL_LEN_VALID   BIT_8
--#else
- #define SS_RESPONSE_INFO_LEN_VALID BIT_8
--#endif
- #define SS_RESERVE_CONFLICT     (BIT_4 | BIT_3)
- #define SS_BUSY_CONDITION       BIT_3
-@@ -1994,36 +2100,18 @@ typedef union {
-       }b;
- } port_id_t;
--typedef struct
--{
--    port_id_t d_id;
--    uint8_t   name[WWN_SIZE];
--    uint8_t   wwn[WWN_SIZE];          /* port name */
--    uint16_t  loop_id;
--    uint16_t   flag;
--  /* flags bits defined as follows */
--#define DEV_PUBLIC          BIT_0
--#define DEV_LUNMASK_SET     BIT_1  /* some LUNs masked for this device */
--#define       DEV_TAPE_DEVICE         BIT_2
--#define       DEV_RELOGIN             BIT_3
--#define       DEV_PORT_DOWN       BIT_4
--#define       DEV_CONFIGURED          BIT_5
--#define       DEV_ABSENCE             BIT_6
--#define       DEV_RETURN              BIT_7
--#define       DEV_INITIATOR           BIT_8
--#define       DEV_FLAG_VSA            BIT_9
--      int                     port_login_retry_count;
--    uint8_t  port_timer;
--}fcdev_t;
-+/*
-+ * Switch info gathering structure.
-+ */
-+typedef struct {
-+      port_id_t d_id;
-+      uint8_t node_name[WWN_SIZE];
-+      uint8_t port_name[WWN_SIZE];
-+      uint32_t type;
-+#define SW_TYPE_SCSI  BIT_0
-+#define SW_TYPE_IP    BIT_1
-+} sw_info_t;
--/* New device name list struct; used in configure_fabric. */
--struct new_dev {
--    port_id_t  d_id;
--    uint8_t    name[WWN_SIZE];                /* node name */
--    uint8_t    wwn[WWN_SIZE];          /* port name */
--    uint16_t   ignore;
--};
--#define LOGOUT_PERFORMED  0x01
- /*
-  * Inquiry command structure.
-  */
-@@ -2038,6 +2126,26 @@ typedef struct {
-       uint8_t inq[INQ_DATA_SIZE];
- } inq_cmd_rsp_t;
-+#define VITAL_PRODUCT_DATA_SIZE 32
-+#define INQ_EVPD_SET  1
-+#define INQ_DEV_IDEN_PAGE  0x83       
-+#define WWLUN_SIZE    32      
-+
-+typedef struct {
-+      union {
-+              cmd_a64_entry_t cmd;
-+              sts_entry_t rsp;
-+      } p;
-+      uint8_t inq[VITAL_PRODUCT_DATA_SIZE];
-+} evpd_inq_cmd_rsp_t;
-+
-+typedef struct {
-+      union {
-+              cmd_a64_entry_t cmd;
-+              sts_entry_t rsp;
-+      } p;
-+} tur_cmd_rsp_t;
-+
- /*
-  * Report LUN command structure.
-  */
-@@ -2092,7 +2200,7 @@ typedef struct os_tgt {
-       atomic_t        q_timer;        /* suspend timer */
-       unsigned long   q_flags;           /* suspend flags */
- #define       TGT_SUSPENDED           1
--#define       TGT_UNSUSPENDED         2
-+#define       TGT_RETRY_CMDS          2
- } os_tgt_t;
- /*
-@@ -2141,32 +2249,45 @@ typedef struct lun_bit_mask {
- } lun_bit_mask_t;
- /*
-+ * Fibre channel port type.
-+ */
-+ typedef enum {
-+      FCT_UNKNOWN,
-+      FCT_RSCN,
-+      FCT_SWITCH,
-+      FCT_BROADCAST,
-+      FCT_INITIATOR,
-+      FCT_TARGET
-+} fc_port_type_t;
-+
-+/*
-  * Fibre channel port structure.
-  */
- typedef struct fc_port {
--      struct fc_port          *next;
--      struct fc_lun           *fclun;
-+      struct list_head list;
-+      struct list_head fcluns;
-+
-       struct scsi_qla_host    *ha;
-       struct scsi_qla_host    *vis_ha; /* only used when suspending lun */
-       port_id_t               d_id;
-       uint16_t                loop_id;
-       uint16_t                old_loop_id;
-       int16_t                 lun_cnt;
--      int16_t                 dev_id; /* index in fc_dev table */
-+      uint16_t                dev_id;
- #define FC_NO_LOOP_ID         0x100
-       uint8_t                 node_name[WWN_SIZE];    /* Big Endian. */
-       uint8_t                 port_name[WWN_SIZE];    /* Big Endian. */
-       uint8_t                 mp_byte;        /* multi-path byte */
-       uint8_t                 cur_path;       /* current path id */
-       int                     port_login_retry_count;
--      int             login_retry;
--      atomic_t                state;          /* port state */
--#define FC_DEVICE_DEAD                1
--#define FC_DEVICE_LOST                2
--#define FC_ONLINE             3
--#define FC_LOGIN_NEEDED               4
-+      int                     login_retry;
-+      atomic_t                state;          /* state for I/O routing */
-+#define FC_DEVICE_DEAD                1               /* Device has been missing for the expired time */
-+                                                                      /* "port timeout" */
-+#define FC_DEVICE_LOST                2               /* Device is missing */
-+#define FC_ONLINE             3               /* Device is ready and online */
--      uint8_t                 flags;
-+      uint16_t                flags;
- #define       FC_FABRIC_DEVICE        BIT_0
- #define       FC_TAPE_DEVICE          BIT_1
- #define       FC_INITIATOR_DEVICE     BIT_2
-@@ -2174,7 +2295,25 @@ typedef struct fc_port {
- #define       FC_VSA                  BIT_4
- #define       FC_HD_DEVICE            BIT_5
- #define       FC_SUPPORT_RPT_LUNS     BIT_6
--      atomic_t        port_down_timer;
-+#define FC_XP_DEVICE            BIT_7
-+#define FC_CONFIG_DEVICE        BIT_8
-+#define FC_MSA_DEVICE            BIT_9
-+#define FC_MSA_PORT_ACTIVE     BIT_10
-+#define FC_FAILBACK_DISABLE           BIT_11
-+#define FC_LOGIN_NEEDED               BIT_12
-+#define FC_EVA_DEVICE            BIT_13
-+#define FC_FAILOVER_DISABLE           BIT_14
-+      int16_t                 cfg_id;         /* index into cfg device table */
-+      uint16_t        notify_type;
-+      atomic_t                port_down_timer;
-+      int     (*fo_combine)(void *, uint16_t, 
-+              struct fc_port *, uint16_t );
-+      int     (*fo_detect)(void);
-+      int     (*fo_notify)(void);
-+      int     (*fo_select)(void);
-+
-+      fc_port_type_t  port_type;
-+
-       lun_bit_mask_t  lun_mask;
- } fc_port_t;
-@@ -2182,28 +2321,22 @@ typedef struct fc_port {
-  * Fibre channel LUN structure.
-  */
- typedef struct fc_lun {
--      struct fc_lun           *next;
-+        struct list_head      list;
-+
-       fc_port_t               *fcport;
-       uint16_t                lun;
-       uint8_t                 max_path_retries;
-       uint8_t                 flags;
- #define       FC_DISCON_LUN           BIT_0
-+#define       FC_VISIBLE_LUN          BIT_2
-+#define       FC_ACTIVE_LUN           BIT_3
-+      uint8_t                 inq0;
-       u_long                  kbytes;
-+      void                    *mplun; 
-+      void                    *mpbuf; /* ptr to buffer use by multi-path driver */
-+      int                     mplen;
- } fc_lun_t;
--typedef struct
--{
--    uint8_t   in_use;
--}fabricid_t;
--
--typedef struct {
--      struct list_head        list;
--
--      uint8_t         node_name[WWN_SIZE];
--      uint8_t         port_name[WWN_SIZE];
--      port_id_t       d_id;
--      uint16_t        loop_id;
--} fc_initiator_t;
- /*
-  * Registered State Change Notification structures.
-@@ -2607,6 +2740,13 @@ typedef struct scsi_qla_host
-       uint32_t        total_dev_errs;         /* device error cnt */
-       uint32_t        total_ios;              /* IO cnt */
-       uint64_t        total_bytes;            /* xfr byte cnt */
-+
-+      uint64_t        total_input_cnt;        /* input request cnt */
-+      uint64_t        total_output_cnt;       /* output request cnt */
-+      uint64_t        total_ctrl_cnt;         /* control request cnt */
-+      uint64_t        total_input_bytes;      /* input xfr bytes cnt */
-+      uint64_t        total_output_bytes;     /* output xfr bytes cnt */
-+
-       uint32_t        total_mbx_timeout;      /* mailbox timeout cnt */
-       uint32_t        total_loop_resync;      /* loop resyn cnt */
-@@ -2656,37 +2796,30 @@ typedef struct scsi_qla_host
-       uint16_t        max_targets;
-       
-       /* Fibre Channel Device List. */
--      fc_port_t               *fcport;
-+        struct list_head      fcports;
-       /* OS target queue pointers. */
-       os_tgt_t                *otgt[MAX_FIBRE_DEVICES];
--      /* Fibre Channel Device Database and LIP sequence. */
--      fcdev_t           fc_db[MAX_FIBRE_DEVICES]; /* Driver database. */
-       uint32_t          flash_db;         /* Flash database address in use. */
--      fabricid_t        fabricid[MAX_FIBRE_DEVICES]; /* Fabric ids table . */
-       uint32_t          flash_seq;        /* Flash database seq # in use. */
-       volatile uint16_t lip_seq;          /* LIP sequence number. */
-       
--      /* Tracks host adapters we find */      
--      struct list_head        fcinitiators;   /* Initiator database */
--    
-         /* RSCN queue. */
-       rscn_t rscn_queue[MAX_RSCN_COUNT];
-       uint8_t rscn_in_ptr;
-       uint8_t rscn_out_ptr;
-+      
-+      unsigned long  last_irq_cpu; /* cpu where we got our last irq */
--#if QLA2X_PERFORMANCE 
--      /* Doneq bottom half handler */
--      struct tasklet_struct run_qla_task;
--#endif
-       /*
-        * Need to hold the list_lock with irq's disabled in order to
-        * access the following list.
-        * This list_lock is of lower priority than the io_request_lock.
-        */
-       /*********************************************************/
--        spinlock_t              list_lock;      /* lock to guard lists which 
-+        spinlock_t              list_lock  ____cacheline_aligned;      
-+                                           /* lock to guard lists which 
-                                                  hold srb_t's*/
-         struct list_head        retry_queue;    /* watchdog queue */
-         struct list_head        done_queue;     /* job on done queue */
-@@ -2695,17 +2828,9 @@ typedef struct scsi_qla_host
-       struct list_head        scsi_retry_queue;     /* SCSI retry queue */
-       
-       struct list_head        pending_queue;  /* SCSI command pending queue */
--
-+      
-         /*********************************************************/
--      /* This spinlock is used to protect "io transactions", you must 
--       * aquire it before doing any IO to the card, eg with RD_REG*() and
--       * WRT_REG*() for the duration of your entire commandtransaction.
--       *
--       * This spinlock is of lower priority than the io request lock.
--       */
--
--      spinlock_t              hardware_lock;
-       /* Linux kernel thread */
-       struct task_struct  *dpc_handler;     /* kernel thread */
-@@ -2717,6 +2842,15 @@ typedef struct scsi_qla_host
-       /* Received ISP mailbox data. */
-       volatile uint16_t mailbox_out[MAILBOX_REGISTER_COUNT];
-+      /* This spinlock is used to protect "io transactions", you must 
-+       * aquire it before doing any IO to the card, eg with RD_REG*() and
-+       * WRT_REG*() for the duration of your entire commandtransaction.
-+       *
-+       * This spinlock is of lower priority than the io request lock.
-+       */
-+
-+      spinlock_t              hardware_lock ____cacheline_aligned;
-+
-       /* Outstandings ISP commands. */
-       srb_t           *outstanding_cmds[MAX_OUTSTANDING_COMMANDS];
-       uint32_t current_outstanding_cmd; 
-@@ -2815,6 +2949,7 @@ typedef struct scsi_qla_host
-       uint8_t *cmdline;
-         uint32_t      login_retry_count; 
-+        
-     
-       volatile struct
-       {
-@@ -2825,7 +2960,7 @@ typedef struct scsi_qla_host
-               uint32_t     port_name_used          :1;   /* 4 */
-               uint32_t     failover_enabled        :1;   /* 5 */
--              uint32_t     watchdog_enabled        :1;   /* 6 */
-+              uint32_t     failback_disabled       :1;   /* 6 */
-               uint32_t     cfg_suspended           :1;   /* 7 */
-               uint32_t     disable_host_adapter    :1;   /* 8 */
-@@ -2853,11 +2988,7 @@ typedef struct scsi_qla_host
- #if defined(FC_IP_SUPPORT)
-                 uint32_t     enable_ip               :1;   /* 27 */
- #endif
--#if defined(ISP2300)
-               uint32_t     process_response_queue  :1;   /* 28 */
--#endif
--
--
-       } flags;
-       uint32_t     device_flags;
-@@ -2912,6 +3043,7 @@ typedef struct scsi_qla_host
- #define ISP_ABORT_RETRY         27      /* ISP aborted. */
- #define PORT_SCAN_NEEDED      28      /* */
-+#define IOCTL_ERROR_RECOVERY  29      
- /* macro for timer to start dpc for handling mailbox commands */
-@@ -2926,13 +3058,13 @@ typedef struct scsi_qla_host
-       uint8_t         interrupts_on;
-       uint8_t         init_done;
--      volatile uint16_t loop_state;
--#define LOOP_TIMEOUT 0x01
--#define LOOP_DOWN    0x02
--#define LOOP_UP      0x04
--#define LOOP_UPDATE  0x08
--#define LOOP_READY   0x10
--#define LOOP_DEAD    0x20  /* Link Down Timer expires */
-+      atomic_t                loop_state;
-+#define LOOP_TIMEOUT 1
-+#define LOOP_DOWN    2
-+#define LOOP_UP      3
-+#define LOOP_UPDATE  4
-+#define LOOP_READY   5
-+#define LOOP_DEAD    6  /* Link Down Timer expires */
-       mbx_cmd_t       mc;
-       uint32_t        mbx_flags;
-@@ -2948,8 +3080,15 @@ typedef struct scsi_qla_host
-       hba_ioctl_context *ioctl;
-       uint8_t     node_name[WWN_SIZE];
--      uint8_t     optrom_major; 
--      uint8_t     optrom_minor; 
-+      /* PCI expansion ROM image information. */
-+      unsigned long   code_types;
-+#define ROM_CODE_TYPE_BIOS    0
-+#define ROM_CODE_TYPE_FCODE   1
-+#define ROM_CODE_TYPE_EFI     3
-+
-+      uint8_t         bios_revision[2];
-+      uint8_t         efi_revision[2];
-+      uint8_t         fcode_revision[16];
-       uint8_t     nvram_version; 
-@@ -2963,7 +3102,7 @@ typedef struct scsi_qla_host
-       uint8_t     serial1;
-       uint8_t     serial2;
--      /* Offset 200-215 : Model Number */
-+      /* NVRAM Offset 200-215 : Model Number */
-       uint8_t    model_number[16];
-       /* oem related items */
-@@ -2978,6 +3117,7 @@ typedef struct scsi_qla_host
-       uint32_t failback_delay;
-       unsigned long   cfg_flags;
- #define       CFG_ACTIVE      0       /* CFG during a failover, event update, or ioctl */
-+#define       CFG_FAILOVER    1       /* CFG during path change */
-       /* uint8_t      cfg_active; */
-       int     eh_start;
-@@ -2993,7 +3133,6 @@ typedef struct scsi_qla_host
-       uint32_t        binding_type;
- #define BIND_BY_PORT_NAME     0
- #define BIND_BY_PORT_ID               1
--#define BIND_BY_NODE_NAME     2
-       srb_t   *status_srb;    /* Keep track of Status Continuation Entries */
-@@ -3010,10 +3149,23 @@ typedef struct scsi_qla_host
- #endif
-       ms_iocb_entry_t         *ms_iocb;
-       dma_addr_t              ms_iocb_dma;
--      struct ct_sns_pkt       *ct_sns;
--      dma_addr_t              ct_sns_dma;
-+      void                    *ct_iu;
-+      dma_addr_t              ct_iu_dma;
-+
-+      Scsi_Cmnd       *ioctl_err_cmd;  
-+      unsigned long   fdmi_flags;
-+#define FDMI_REGISTER_NEEDED  0 /* bit 0 */
-+      /* Hardware ID/version string from NVRAM */
-+      uint8_t         hw_id_version[16];
-+      /* Model description string from our table based on NVRAM spec */
-+      uint8_t         model_desc[80];
-+
-+      /* Scsi midlayer lock */
-+#if defined(SH_HAS_HOST_LOCK)
-+      spinlock_t              host_lock ____cacheline_aligned;
-+#endif
- } scsi_qla_host_t;
- #if defined(__BIG_ENDIAN)
-@@ -3059,8 +3211,6 @@ typedef struct scsi_qla_host
- #define       TGT_Q(ha, t)            (ha->otgt[t])
- #define       LUN_Q(ha, t, l)         (TGT_Q(ha, t)->olun[l])
- #define GET_LU_Q(ha, t, l)  ( (TGT_Q(ha,t) != NULL)? TGT_Q(ha, t)->olun[l] : NULL)
--#define PORT_DOWN_TIMER(ha, t)    ((ha)->fc_db[(t)].port_timer)
--#define PORT(ha, t)                   ((ha)->fc_db[(t)])
- #define PORT_LOGIN_RETRY(fcport)    ((fcport)->port_login_retry_count)
- #define MBOX_TRACE(ha,b)              {(ha)->mbox_trace |= (b);}
-@@ -3078,35 +3228,46 @@ typedef struct scsi_qla_host
- }
- #endif
--static void qla2x00_device_queue_depth(scsi_qla_host_t *, Scsi_Device *);
-+void qla2x00_device_queue_depth(scsi_qla_host_t *, Scsi_Device *);
- #endif
--#if defined(__386__)
--#  define QLA2100_BIOSPARAM  qla2x00_biosparam
--#else
--#  define QLA2100_BIOSPARAM  NULL
--#endif
- /*
-  *  Linux - SCSI Driver Interface Function Prototypes.
-  */
--static int qla2x00_ioctl(Scsi_Device *, int , void *);
--static int qla2x00_proc_info ( char *, char **, off_t, int, int, int);
--static const char * qla2x00_info(struct Scsi_Host *host);
--static int qla2x00_detect(Scsi_Host_Template *);
--static int qla2x00_release(struct Scsi_Host *);
--static const char * qla2x00_info(struct Scsi_Host *);
--static int qla2x00_queuecommand(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));
-+int qla2x00_ioctl(Scsi_Device *, int , void *);
-+int qla2x00_proc_info ( char *, char **, off_t, int, int, int);
-+const char * qla2x00_info(struct Scsi_Host *host);
-+int qla2x00_detect(Scsi_Host_Template *);
-+int qla2x00_release(struct Scsi_Host *);
-+const char * qla2x00_info(struct Scsi_Host *);
-+int qla2x00_queuecommand(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));
- int qla2x00_abort(Scsi_Cmnd *);
- int qla2x00_reset(Scsi_Cmnd *, unsigned int);
--static int qla2x00_biosparam(Disk *, kdev_t, int[]);
--static void qla2x00_intr_handler(int, void *, struct pt_regs *);
-+int qla2x00_biosparam(Disk *, kdev_t, int[]);
-+void qla2x00_intr_handler(int, void *, struct pt_regs *);
- #if !defined(MODULE)
--static int __init qla2x00_setup (char *s);
-+static int __init qla2100_setup (char *s);
- #else
- void qla2x00_setup(char *s);
- #endif
-+#if defined(CONFIG_COMPAT) || \
-+      ( defined(CONFIG_SUSE_KERNEL) && \
-+       (defined(CONFIG_PPC64) || defined(CONFIG_X86_64)))
-+#define       QLA_CONFIG_COMPAT
-+#endif
-+
-+/*
-+ * Scsi_Host_template (see hosts.h) 
-+ * Device driver Interfaces to mid-level SCSI driver.
-+ */
-+
-+/* Kernel version specific template additions */
-+
-+/* Number of segments 1 - 65535 */
-+#define SG_SEGMENTS     32             /* Cmd entry + 6 continuations */
-+
- /*
-  * Scsi_Host_template (see hosts.h) 
-  * Device driver Interfaces to mid-level SCSI driver.
-@@ -3119,7 +3280,7 @@ void qla2x00_setup(char *s);
-  *
-  */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,8)
--#define TEMPLATE_MAX_SECTORS  max_sectors: 8192,
-+#define TEMPLATE_MAX_SECTORS  max_sectors: 512,
- #else
- #define TEMPLATE_MAX_SECTORS 
- #endif
-@@ -3127,60 +3288,99 @@ void qla2x00_setup(char *s);
-  * use_new_eh_code
-  *
-  */
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
--#define TEMPLATE_USE_NEW_EH_CODE
--#else
- #define TEMPLATE_USE_NEW_EH_CODE use_new_eh_code: 1,
--#endif
- /*
-  * emulated
-  *
-  */
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
--#define TEMPLATE_EMULATED
--#else
- #define TEMPLATE_EMULATED emulated: 0,
--#endif
- /*
-  * next
-  *
-  */
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
--#define TEMPLATE_NEXT
--#else
- #define TEMPLATE_NEXT next: NULL,
--#endif
- /*
-  * module
-  *
-  */
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
--#define TEMPLATE_MODULE
--#else
- #define TEMPLATE_MODULE module: NULL,
--#endif
- /*
-  * proc_dir
-  *
-  */
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
--#define TEMPLATE_PROC_DIR
--#else
- #define TEMPLATE_PROC_DIR proc_dir: NULL,
-+
-+/* highmem_io */
-+#ifdef SHT_HAS_HIGHMEM_IO
-+#define TEMPLATE_HIGHMEM_IO   highmem_io: 1,
-+#else
-+#define TEMPLATE_HIGHMEM_IO
-+#endif
-+/* can_dma_32 */
-+#ifdef SHT_HAS_CAN_DMA_32
-+#define TEMPLATE_CAN_DMA_32   can_dma_32: 1,
-+#else
-+#define TEMPLATE_CAN_DMA_32
-+#endif
-+/* single_sg_ok A.S. 2.1 */
-+#ifdef SHT_HAS_SINGLE_SG_OK
-+#define TEMPLATE_SINGLE_SG_OK single_sg_ok: 1,
-+#else
-+#define TEMPLATE_SINGLE_SG_OK
-+#endif
-+/* can_do_varyio -- A.S. 2.1 */
-+#ifdef SHT_HAS_CAN_DO_VARYIO
-+#define TEMPLATE_CAN_DO_VARYIO        can_do_varyio: 1,
-+#else
-+#define TEMPLATE_CAN_DO_VARYIO
-+#endif
-+/* vary_io -- SLES 8 */
-+#ifdef SHT_HAS_VARY_IO
-+#define TEMPLATE_VARY_IO      vary_io: 1,
-+#else
-+#define TEMPLATE_VARY_IO
- #endif
-+/* RHEL3 specifics */
-+
-+/* need_plug_timer -- RHEL3 */
-+#ifdef SHT_HAS_NEED_PLUG_TIMER
-+/* As per RH, backout scsi-affine feature. */
-+#define TEMPLATE_NEED_PLUG_TIMER
-+/*#define TEMPLATE_NEED_PLUG_TIMER need_plug_timer: 1, */
-+#else
-+#define TEMPLATE_NEED_PLUG_TIMER
-+#endif
-+
-+/*
-+ * There are several Scsi_Host members that are RHEL3 specific
-+ * yet depend on the SCSI_HAS_HOST_LOCK define for visibility.
-+ * Unfortuantely, it seems several RH kernels have the define
-+ * set, but do not have a host_lock member.
-+ *
-+ * Use the SH_HAS_HOST_LOCK define determined during driver
-+ * compilation rather than SCSI_HAS_HOST_LOCK.
-+ *
-+ * Also use SH_HAS_CAN_QUEUE_MASK to determine if can_queue_mask
-+ * is an Scsi_Host member.
-+ *
-+ *    SH_HAS_HOST_LOCK        -- host_lock defined
-+ *    SH_HAS_CAN_QUEUE_MASK   -- can_queue_mask defined
-+ */
-+/* As per RH, backout scsi-affine feature. */
-+#undef SH_HAS_CAN_QUEUE_MASK
- #define QLA2100_LINUX_TEMPLATE {                              \
- TEMPLATE_NEXT                                                         \
- TEMPLATE_MODULE                                               \
- TEMPLATE_PROC_DIR                                             \
-       proc_info: qla2x00_proc_info,                           \
--      name:           "Qlogic Fibre Channel 2x00",            \
-+      name:           "QLogic Fibre Channel 2x00",            \
-       detect:         qla2x00_detect,                         \
-       release:        qla2x00_release,                        \
-       info:           qla2x00_info,                           \
--      ioctl: qla2x00_ioctl,                                   \
-+      ioctl: qla2x00_ioctl,                                    \
-       command: NULL,                                          \
-       queuecommand: qla2x00_queuecommand,                     \
-       eh_strategy_handler: NULL,                              \
-@@ -3191,19 +3391,23 @@ TEMPLATE_PROC_DIR                                              \
-       abort: NULL,                                            \
-       reset: NULL,                                            \
-       slave_attach: NULL,                                     \
--      bios_param: QLA2100_BIOSPARAM,                          \
--      can_queue: 256,         /* max simultaneous cmds      */\
-+      bios_param: qla2x00_biosparam,                          \
-+      can_queue: REQUEST_ENTRY_CNT+128, /* max simultaneous cmds      */\
-       this_id: -1,            /* scsi id of host adapter    */\
-       sg_tablesize: SG_SEGMENTS,      /* max scatter-gather cmds */\
-       cmd_per_lun: 3,         /* cmds per lun (linked cmds) */\
-       present: 0,             /* number of 7xxx's present   */\
-       unchecked_isa_dma: 0,   /* no memory DMA restrictions */\
--      use_clustering: ENABLE_CLUSTERING,                      \
- TEMPLATE_USE_NEW_EH_CODE                                      \
- TEMPLATE_MAX_SECTORS                                          \
- TEMPLATE_EMULATED                                             \
--      highmem_io :1,                                          \
--      vary_io: 1,                                             \
-+TEMPLATE_HIGHMEM_IO                                           \
-+TEMPLATE_CAN_DMA_32                                           \
-+TEMPLATE_SINGLE_SG_OK                                         \
-+TEMPLATE_CAN_DO_VARYIO                                                \
-+TEMPLATE_VARY_IO                                              \
-+TEMPLATE_NEED_PLUG_TIMER                                      \
-+      use_clustering: ENABLE_CLUSTERING                       \
- }
- #endif /* _IO_HBA_QLA2100_H */
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla2x00_ioctl.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla2x00_ioctl.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla2x00_ioctl.c      2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla2x00_ioctl.c   2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -18,9 +18,8 @@
-  ******************************************************************************/
--#define       QLA_PT_CMD_TOV                  (60) /* firmware timeout */
--#define QLA_PT_CMD_DRV_TOV            (QLA_PT_CMD_TOV + 1) /* drvr timeout */
--#define QLA_IOCTL_ACCESS_WAIT_TIME    (QLA_PT_CMD_DRV_TOV + 2) /* wait_q tov */
-+#define QLA_PT_CMD_DRV_TOV            (ql2xioctltimeout + 1) /* drvr timeout */
-+#define QLA_IOCTL_ACCESS_WAIT_TIME    (ql2xioctltimeout + 2) /* wait_q tov */
- #define QLA_INITIAL_IOCTLMEM_SIZE     (2 * PAGE_SIZE)
- #define QLA_IOCTL_SCRAP_SIZE          2048 /* scrap memory for local use. */
-@@ -39,12 +38,12 @@
- #if defined(INTAPI)
- #include "inioct.h"
- /* from qla_inioct.c */
--static int qla2x00_read_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
--static int qla2x00_update_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
--static int qla2x00_write_nvram_word(scsi_qla_host_t *, uint8_t, uint16_t);
--static int qla2x00_send_loopback(scsi_qla_host_t *, EXT_IOCTL *, int);
--static int qla2x00_read_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
--static int qla2x00_update_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
-+extern int qla2x00_read_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
-+extern int qla2x00_update_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
-+extern int qla2x00_write_nvram_word(scsi_qla_host_t *, uint8_t, uint16_t);
-+extern int qla2x00_send_loopback(scsi_qla_host_t *, EXT_IOCTL *, int);
-+extern int qla2x00_read_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
-+extern int qla2x00_update_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
- #endif
-@@ -58,11 +57,6 @@ STATIC void qla2x00_free_ioctl_mem(scsi_
- STATIC int qla2x00_get_ioctl_scrap_mem(scsi_qla_host_t *, void **, uint32_t);
- STATIC void qla2x00_free_ioctl_scrap_mem(scsi_qla_host_t *);
--#if defined(ISP2300)
--STATIC uint8_t qla2x00_get_next_free_pub_id(scsi_qla_host_t *, uint16_t *);
--STATIC uint8_t qla2x00_host_relogin(scsi_qla_host_t *, fcdev_t *);
--#endif
--
- STATIC int qla2x00_find_curr_ha(uint16_t, scsi_qla_host_t **);
- STATIC int qla2x00_get_driver_specifics(EXT_IOCTL *);
-@@ -83,15 +77,17 @@ STATIC int qla2x00_get_statistics(scsi_q
- STATIC int qla2x00_get_fc_statistics(scsi_qla_host_t *, EXT_IOCTL *, int);
- STATIC int qla2x00_get_port_summary(scsi_qla_host_t *, EXT_IOCTL *, int);
- STATIC int qla2x00_get_fcport_summary(scsi_qla_host_t *, EXT_DEVICEDATAENTRY *,
--    void *, uint32_t, uint32_t *, uint32_t *);
-+    void *, uint32_t, uint32_t, uint32_t *, uint32_t *);
-+#if 0
- STATIC int qla2x00_std_missing_port_summary(scsi_qla_host_t *,
-     EXT_DEVICEDATAENTRY *, void *, uint32_t, uint32_t *, uint32_t *);
-+#endif
- STATIC int qla2x00_query_driver(scsi_qla_host_t *, EXT_IOCTL *, int);
- STATIC int qla2x00_query_fw(scsi_qla_host_t *, EXT_IOCTL *, int);
- STATIC int qla2x00_msiocb_passthru(scsi_qla_host_t *, EXT_IOCTL *, int,
-     int);
--#if defined(ISP2300)
-+#if defined(ISP2300) 
- STATIC int qla2x00_send_els_passthru(scsi_qla_host_t *, EXT_IOCTL *,
-     Scsi_Cmnd *, fc_port_t *, fc_lun_t *, int);
- #endif
-@@ -208,6 +204,7 @@ qla2x00_scsi_pt_done(Scsi_Cmnd *pscsi_cm
-       /* save detail status for IOCTL reporting */
-       ha->ioctl->SCSIPT_InProgress = 0;
-       ha->ioctl->ioctl_tov = 0;
-+      ha->ioctl_err_cmd = NULL;
-       up(&ha->ioctl->cmpl_sem);
-@@ -260,7 +257,7 @@ qla2x00_msiocb_done(Scsi_Cmnd *pscsi_cmd
-  *   ret != 0    Failed; detailed status copied to EXT_IOCTL structure
-  *               if possible
-  *************************************************************************/
--STATIC int
-+int
- qla2x00_ioctl(Scsi_Device *dev, int cmd, void *arg)
- {
-       int             mode = 0;
-@@ -285,13 +282,6 @@ qla2x00_ioctl(Scsi_Device *dev, int cmd,
-               return (ret);
-       }
--      ret = verify_area(VERIFY_READ, (void *)arg, sizeof(EXT_IOCTL));
--      if (ret) {
--              DEBUG9_10(printk("%s: ERROR VERIFY_READ EXT_IOCTL "
--                  "sturct. cmd=%x arg=%p.\n", __func__, cmd, arg);)
--              return (ret);
--      }
--
-       /* Allocate ioctl structure buffer to support multiple concurrent
-        * entries.
-        */
-@@ -314,16 +304,6 @@ qla2x00_ioctl(Scsi_Device *dev, int cmd,
-               return (ret);
-       }
--      /* Verify before update status fields in EXT_IOCTL struct. */
--      ret = verify_area(VERIFY_WRITE, (void *)arg, sizeof(EXT_IOCTL));
--      if (ret) {
--              DEBUG9_10(printk("%s: ERROR VERIFY_WRITE EXT_IOCTL "
--                  "sturct. cmd=%x arg=%p.\n", __func__, cmd, arg);)
--
--              KMEM_FREE(pext, sizeof(EXT_IOCTL));
--              return (ret);
--      }
--
-       /* check signature of this ioctl */
-       temp = (uint8_t *) &pext->Signature;
-@@ -340,10 +320,10 @@ qla2x00_ioctl(Scsi_Device *dev, int cmd,
-               DEBUG9_10(printk("%s: signature did not match. "
-                   "cmd=%x arg=%p.\n", __func__, cmd, arg);)
-               pext->Status = EXT_STATUS_INVALID_PARAM;
--              copy_to_user((void *)arg, (void *)pext, sizeof(EXT_IOCTL));
-+              ret = copy_to_user(arg, pext, sizeof(EXT_IOCTL));
-               KMEM_FREE(pext, sizeof(EXT_IOCTL));
--              return (-EINVAL);
-+              return (ret);
-       }
-       /* check version of this ioctl */
-@@ -351,8 +331,6 @@ qla2x00_ioctl(Scsi_Device *dev, int cmd,
-               printk(KERN_WARNING
-                   "qla2x00: ioctl interface version not supported = %d.\n",
-                   pext->Version);
--              pext->Status = EXT_STATUS_UNSUPPORTED_VERSION;
--              copy_to_user((void *)arg, (void *)pext, sizeof(EXT_IOCTL));
-               KMEM_FREE(pext, sizeof(EXT_IOCTL));
-               return (-EINVAL);
-@@ -365,8 +343,7 @@ qla2x00_ioctl(Scsi_Device *dev, int cmd,
-               pext->Instance = num_hosts;
-               pext->Status = EXT_STATUS_OK;
--              ret = copy_to_user((void *)arg, (void *)pext,
--                  sizeof(EXT_IOCTL));
-+              ret = copy_to_user(arg, pext, sizeof(EXT_IOCTL));
-               KMEM_FREE(pext, sizeof(EXT_IOCTL));
-               return (ret);
-@@ -393,7 +370,8 @@ qla2x00_ioctl(Scsi_Device *dev, int cmd,
-                        */
-                       if (qla2x00_find_curr_ha(pext->Instance, &ha) != 0) {
-                               pext->Status = EXT_STATUS_DEV_NOT_FOUND;
--                              ret = copy_to_user(arg, pext, sizeof(EXT_IOCTL));
-+                              ret = copy_to_user(arg, pext,
-+                                  sizeof(EXT_IOCTL));
-                               DEBUG9_10(printk("%s: SETINSTANCE invalid inst "
-                                   "%d. num_hosts=%d ha=%p ret=%d.\n",
-                                   __func__, pext->Instance, num_hosts, ha,
-@@ -425,7 +403,7 @@ qla2x00_ioctl(Scsi_Device *dev, int cmd,
-       case EXT_CC_DRIVER_SPECIFIC:
-               ret = qla2x00_get_driver_specifics(pext);
--              tmp_rval = copy_to_user(arg, (void *)pext, sizeof(EXT_IOCTL));
-+              tmp_rval = copy_to_user(arg, pext, sizeof(EXT_IOCTL));
-               if (ret == 0)
-                       ret = tmp_rval;
-@@ -454,10 +432,10 @@ qla2x00_ioctl(Scsi_Device *dev, int cmd,
-                           __func__, apiHBAInstance);)
-                       pext->Status = EXT_STATUS_DEV_NOT_FOUND;
--                      copy_to_user(arg, pext, sizeof(EXT_IOCTL));
-+                      ret = copy_to_user(arg, pext, sizeof(EXT_IOCTL));
-                       KMEM_FREE(pext, sizeof(EXT_IOCTL));
--                      return (-EINVAL);
-+                      return (ret);
-               }
-               DEBUG9(printk("%s: active apiHBAInstance=%d host_no=%ld "
-@@ -475,10 +453,10 @@ qla2x00_ioctl(Scsi_Device *dev, int cmd,
-                           __func__, pext->HbaSelect);)
-                       pext->Status = EXT_STATUS_DEV_NOT_FOUND;
--                      copy_to_user(arg, pext, sizeof(EXT_IOCTL));
-+                      ret = copy_to_user(arg, pext, sizeof(EXT_IOCTL));
-                       KMEM_FREE(pext, sizeof(EXT_IOCTL));
--                      return (-EINVAL);
-+                      return (ret);
-               }
-               DEBUG9(printk("%s: active host_inst=%ld CC=%x SC=%x.\n",
-@@ -495,15 +473,15 @@ qla2x00_ioctl(Scsi_Device *dev, int cmd,
-                   "access. host no=%d.\n", __func__, pext->HbaSelect);)
-               pext->Status = EXT_STATUS_BUSY;
--              copy_to_user(arg, pext, sizeof(EXT_IOCTL));
-+              ret = copy_to_user(arg, pext, sizeof(EXT_IOCTL));
-               KMEM_FREE(pext, sizeof(EXT_IOCTL));
--              return (-EBUSY);
-+              return (ret);
-       }
-       while (test_bit(CFG_ACTIVE, &ha->cfg_flags) || ha->dpc_active) {
--              if( signal_pending(current) )
-+              if (signal_pending(current))
-                       break;   /* get out */
-               set_current_state(TASK_INTERRUPTIBLE);
-@@ -598,7 +576,7 @@ qla2x00_ioctl(Scsi_Device *dev, int cmd,
-          case EXT_CC_PLATFORM_REG:
-          break;
-        */
--
-+#if !defined(ISP200)
-       /* Failover IOCTLs */
-       case FO_CC_GET_PARAMS:
-       case FO_CC_SET_PARAMS:
-@@ -615,6 +593,7 @@ qla2x00_ioctl(Scsi_Device *dev, int cmd,
-               qla2x00_fo_ioctl(ha, cmd, pext, mode);
-               break;
-+#endif
-       default:
-               pext->Status = EXT_STATUS_INVALID_REQUEST;
-@@ -623,7 +602,7 @@ qla2x00_ioctl(Scsi_Device *dev, int cmd,
-       } /* end of CC decode switch */
-       /* Always try to copy values back regardless what happened before. */
--      tmp_rval = copy_to_user(arg, (void *)pext, sizeof(EXT_IOCTL));
-+      tmp_rval = copy_to_user(arg, pext, sizeof(EXT_IOCTL));
-       if (ret == 0)
-               ret = tmp_rval;
-@@ -712,18 +691,10 @@ qla2x00_alloc_ioctl_mem(scsi_qla_host_t 
-           __func__, ha->host_no, ha->ioctl->scrap_mem_size);)
-       ha->ioctl->ioctl_lq->q_state = LUN_STATE_READY;
--#ifdef __VMWARE__
--      spin_lock_init(&ha->ioctl->ioctl_lq->q_lock);
--#else
-       ha->ioctl->ioctl_lq->q_lock = SPIN_LOCK_UNLOCKED;
--#endif
-       /* Init wait_q fields */
--#ifdef __VMWARE__
--      spin_lock_init(&ha->ioctl->wait_q_lock);
--#else
-       ha->ioctl->wait_q_lock = SPIN_LOCK_UNLOCKED;
--#endif
-       DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
-           __func__, ha->host_no, ha->instance);)
-@@ -812,10 +783,6 @@ qla2x00_free_ioctl_mem(scsi_qla_host_t *
-               }
-               if (ha->ioctl->ioctl_lq != NULL) {
--#ifdef __VMWARE__
--                      spin_lock_destroy(&ha->ioctl->ioctl_lq->q_lock);
--                      spin_lock_destroy(&ha->ioctl->wait_q_lock);
--#endif
-                       KMEM_FREE(ha->ioctl->ioctl_lq, sizeof(os_lun_t));
-                       ha->ioctl->ioctl_lq = NULL;
-               }
-@@ -908,193 +875,6 @@ qla2x00_free_ioctl_scrap_mem(scsi_qla_ho
-           __func__, ha->host_no);)
- }
--#if defined(ISP2300)
--/*
-- * qla2x00_get_next_free_pub_id
-- *    Find the next free public loop ID to use, starting from the old
-- *    loop ID passed in.  If the old loop ID is invalid, this function
-- *    will start the search from beginning.
-- *
-- * Input:
-- *    ha              = adapter block pointer.
-- *    ploop_id        = pointer to a 16bit var containing the old loop
-- *                    ID which is also to be used to get the new loop ID.
-- *
-- * Returns:
-- *      QL_STATUS_SUCCESS - Found an usable loop ID
-- *      QL_STATUS_RESOURCE_ERROR - No more free loop ID
-- */
--STATIC uint8_t
--qla2x00_get_next_free_pub_id(scsi_qla_host_t *ha, uint16_t *ploop_id)
--{
--      uint8_t         retval = QL_STATUS_SUCCESS;
--      uint16_t        index;
--      uint16_t        old_id;
--
--      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
--          __func__, ha->host_no, ha->instance);)
--
--      old_id = *ploop_id;
--      if (old_id >= LAST_SNS_LOOP_ID) {
--              /* set a starting point */
--              old_id = ha->min_external_loopid;
--      }
--
--      for (index = old_id; index < LAST_SNS_LOOP_ID; index++) {
--              if (!ha->fabricid[index].in_use) {
--                      ha->fabricid[index].in_use = TRUE;
--                      *ploop_id = index;
--                      DEBUG9(printk("%s(%ld): found Lid %02x.\n",
--                          __func__, ha->host_no, index);)
--                      break;
--              }
--      }
--      if (index >= LAST_SNS_LOOP_ID) {
--              /* no more free ID */
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR no more free LID "
--                  "available.\n", __func__, ha->host_no, ha->instance);)
--
--              retval = QL_STATUS_RESOURCE_ERROR;
--      }
--
--      DEBUG9(printk("%s(%ld): inst=%ld exiting. retval=%d.\n",
--           __func__, ha->host_no, ha->instance, retval);)
--
--      return retval;
--}
--
--/*
-- * qla2x00_host_relogin
-- *    Issue fabric login command to a host in the host_db which
-- *    had somehow been lost before. All updates are passed back
-- *    via pdevice. No update will be done to any of ha's database.
-- *
-- * Input:
-- *    ha = adapter block pointer.
-- *    pdevice = pointer to FC device type structure.
-- *
-- * Returns:
-- *      QL_STATUS_SUCCESS - Login successfully
-- *      QL_STATUS_ERROR - Login failed
-- *      QL_STATUS_FATAL_ERROR - Fatal error
-- */
--STATIC uint8_t
--qla2x00_host_relogin(scsi_qla_host_t *ha, fcdev_t *pdevice) 
--{
--      uint8_t         retval = QL_STATUS_SUCCESS;
--      uint16_t        status[3];
--      uint16_t        tmp_loop_id;
--
--      DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
--          __func__, ha->host_no, ha->instance);)
--
--      /* pdevice->loop_id is assumed to be straight from the current
--       * database content.
--       */
--      tmp_loop_id = pdevice->loop_id & 0xff;
--      if (tmp_loop_id >= LAST_SNS_LOOP_ID) {
--              /* Invalid value.  We need to find a valid ID to use. */
--              if (qla2x00_get_next_free_pub_id(ha, &tmp_loop_id) != 0) {
--                      /* no more free IDs to use */
--                      DEBUG9_10(printk("%s(%ld): inst=%ld no free loop_id "
--                          " available for login.\n",
--                          __func__, ha->host_no, ha->instance);)
--
--                      return QL_STATUS_ERROR;
--              }
--      }
--
--      for (;;) {
--              DEBUG9(printk("%s(%ld): Login w/loop id 0x%02x for port %06x\n",
--                  __func__, ha->host_no, pdevice->loop_id,
--                  pdevice->d_id.b24);)
--
--              /* Login device on switch. */
--              qla2x00_login_fabric(ha,
--                  tmp_loop_id, pdevice->d_id.b.domain,
--                  pdevice->d_id.b.area, pdevice->d_id.b.al_pa, 
--                  &status[0], 0);
--
--              if (status[0] != MBS_CMD_CMP &&
--                  status[0] != MBS_PORT_ID_IN_USE &&
--                  status[0] != MBS_LOOP_ID_IN_USE) {
--
--                      DEBUG9_10(printk("%s(%ld): inst=%ld "
--                          "ERROR login status[0]=%x status[1]=%x.\n",
--                          __func__, ha->host_no, ha->instance, status[0],
--                          status[1]);)
--
--                      retval = QL_STATUS_FATAL_ERROR;
--                      break;
--              }
--
--              if (status[0] == MBS_CMD_CMP) {
--                      DEBUG9(printk("%s(%ld): inst=%ld "
--                          " host login success; loop_id=%x.\n",
--                          __func__, ha->host_no, ha->instance, tmp_loop_id);)
--
--                      pdevice->loop_id = tmp_loop_id;
--                      retval = QL_STATUS_SUCCESS;
--                      break;
--
--              } else if (status[0] == MBS_PORT_ID_IN_USE) {
--                      ha->fabricid[tmp_loop_id].in_use = FALSE;
--                      tmp_loop_id = status[1];
--
--                      DEBUG9(printk("%s(%ld): inst=%ld "
--                          "port %06x already using loop id=0x%02x in "
--                          "f/w database. Retrying.\n",
--                          __func__, ha->host_no, ha->instance,
--                          pdevice->d_id.b24, tmp_loop_id);)
--
--                      if (tmp_loop_id <= LAST_SNS_LOOP_ID) {
--                              ha->fabricid[tmp_loop_id].in_use = TRUE;
--                      } else {
--                              /* Error */
--                              DEBUG9_10(printk("%s(%ld): inst=%ld "
--                                  "PORT_ID_IN_USE - invalid loop id %02x "
--                                  "returned.\n",
--                                  __func__, ha->host_no, ha->instance,
--                                  pdevice->loop_id);)
--                              retval = QL_STATUS_ERROR;
--                              break;
--                      }
--
--              } else if (status[0] == MBS_LOOP_ID_IN_USE) {
--                      /* loop id already used by others; try another one */
--                      DEBUG9_10(printk("%s(%ld): inst=%ld "
--                          "loop id %02x already used.\n",
--                          __func__, ha->host_no, ha->instance,
--                          pdevice->loop_id);)
--
--                      /* Search for another usable loop_id */
--                      if (qla2x00_get_next_free_pub_id(ha,
--                          &tmp_loop_id) == 0) {
--
--                              DEBUG9(printk("%s(%ld): previous loop "
--                                  "id in use. Retry with 0x%02x.\n",
--                                  __func__, ha->host_no, tmp_loop_id);)
--
--                              ha->fabricid[tmp_loop_id].in_use = TRUE;
--                      } else {
--                              /* Error */
--                              DEBUG9_10(printk("%s(%ld): inst=%ld loop id "
--                                  "in use; no more free loop id.\n",
--                                  __func__, ha->host_no, ha->instance);)
--
--                              retval = QL_STATUS_ERROR;
--                              break;
--                      }
--              }
--      }
--
--      DEBUG9(printk("%s(%ld): inst=%ld exiting. retval=%d.\n",
--           __func__, ha->host_no, ha->instance, retval);)
--
--      return (retval);
--}
--#endif
--
- /*
-  * qla2x00_find_curr_ha
-  *    Searches and returns the pointer to the adapter host_no specified.
-@@ -1172,21 +952,11 @@ qla2x00_get_driver_specifics(EXT_IOCTL *
-       data.DrvVer.Patch = QLA_DRIVER_PATCH_VER;
-       data.DrvVer.Beta = QLA_DRIVER_BETA_VER;
--      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
-+      ret = copy_to_user(pext->ResponseAdr, &data,
-           sizeof(EXT_LN_DRIVER_DATA));
-       if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s: ERROR verify write resp buf\n",
--                  __func__);)
--
--              return (ret);
--      }
--
--      ret = copy_to_user(pext->ResponseAdr, &data, sizeof(EXT_LN_DRIVER_DATA));
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s: ERROR copy resp buf\n",
--                  __func__);)
-+              DEBUG9_10(printk("%s: ERROR copy resp buf\n", __func__);)
-       }
-       DEBUG9(printk("%s: exiting. ret=%d.\n",
-@@ -1220,17 +990,8 @@ qla2x00_aen_reg(scsi_qla_host_t *ha, EXT
-       DEBUG9(printk("%s(%ld): inst %ld entered.\n",
-           __func__, ha->host_no, ha->instance);)
--      rval = verify_area(VERIFY_READ, (void *)cmd->RequestAdr,
-+      rval = copy_from_user(&reg_struct, cmd->RequestAdr,
-           sizeof(EXT_REG_AEN));
--      if (rval) {
--              cmd->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst %ld ERROR verify read req buf\n",
--                  __func__, ha->host_no, ha->instance);)
--
--              return (rval);
--      }
--
--      rval = copy_from_user(&reg_struct, cmd->RequestAdr, sizeof(EXT_REG_AEN));
-       if (rval == 0) {
-               cmd->Status = EXT_STATUS_OK;
-               if (reg_struct.Enable) {
-@@ -1294,9 +1055,10 @@ qla2x00_aen_get(scsi_qla_host_t *ha, EXT
-       if (request_cnt < EXT_DEF_MAX_AEN_QUEUE) {
-               /* We require caller to alloc for the maximum request count */
-               cmd->Status       = EXT_STATUS_BUFFER_TOO_SMALL;
--              DEBUG9_10(printk("%s(%ld): inst=%ld Buffer too small. "
-+              DEBUG9_10(printk("%s(%ld): inst=%ld Buffer size %ld too small. "
-                   "Exiting normally.",
--                  __func__, ha->host_no, ha->instance);)
-+                  __func__, ha->host_no, ha->instance,
-+                  (ulong)cmd->ResponseLen);)
-               return (rval);
-       }
-@@ -1349,18 +1111,6 @@ qla2x00_aen_get(scsi_qla_host_t *ha, EXT
-       /* Copy the entire queue to user's buffer. */
-       ret_len = (uint32_t)(queue_cnt * sizeof(EXT_ASYNC_EVENT));
-       if (queue_cnt != 0) {
--              rval = verify_area(VERIFY_WRITE, (void *)cmd->ResponseAdr,
--                  ret_len);
--              if (rval != 0) {
--                      cmd->Status = EXT_STATUS_COPY_ERR;
--                      DEBUG9_10(printk(
--                          "%s(%ld): inst=%ld ERROR verify write resp buf.\n",
--                          __func__, ha->host_no, ha->instance);)
--
--                      qla2x00_free_ioctl_scrap_mem(ha);
--                      return (rval);
--              }
--
-               rval = copy_to_user(cmd->ResponseAdr, paen, ret_len);
-       }
-       cmd->ResponseLen = ret_len;
-@@ -1560,6 +1310,7 @@ qla2x00_query_hba_node(scsi_qla_host_t *
-       uint32_t        i, transfer_size;
-       EXT_HBA_NODE    *ptmp_hba_node;
-       qla_boards_t    *bdp;
-+      uint8_t         *next_str;
-       DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
-@@ -1581,7 +1332,7 @@ qla2x00_query_hba_node(scsi_qla_host_t *
-       for (i = 0; i < 8 ; i++)
-               ptmp_hba_node->WWNN[i] = ha->node_name[i];
--      sprintf((char *)(ptmp_hba_node->Manufacturer),"Qlogic Corp.");
-+      sprintf((char *)(ptmp_hba_node->Manufacturer), QLOGIC_COMPANY_NAME);
-       sprintf((char *)(ptmp_hba_node->Model),ha->model_number);
-       ptmp_hba_node->SerialNum[0] = ha->serial0;
-@@ -1591,25 +1342,47 @@ qla2x00_query_hba_node(scsi_qla_host_t *
-       sprintf((char *)(ptmp_hba_node->FWVersion),"%2d.%02d.%02d",
-           bdp->fwver[0], bdp->fwver[1], bdp->fwver[2]);
--      sprintf((char *)(ptmp_hba_node->OptRomVersion),"%d.%d",
--          ha->optrom_major, ha->optrom_minor);
-+#ifdef MAKEUP_YOUR_MIND
-+      /*
-+       * Prep OptionROM string:
-+       *
-+       *      <BIOS VERSION>\0<FCODE VERSION>\0<EFI_VERSION>\0
-+       */
-+      memset(ptmp_hba_node->OptRomVersion, 0,
-+          sizeof(ptmp_hba_node->OptRomVersion));
-+      next_str = ptmp_hba_node->OptRomVersion;
-+      if (test_bit(ROM_CODE_TYPE_BIOS, &ha->code_types)) {
-+              sprintf(next_str, "%d.%02d", ha->bios_revision[1],
-+                  ha->bios_revision[0]);
-+      }
-+      next_str += strlen(next_str) + 1;
-+      if (test_bit(ROM_CODE_TYPE_FCODE, &ha->code_types)) {
-+              strcpy(next_str, ha->fcode_revision);
-+      }
-+      next_str += strlen(next_str) + 1;
-+      if (test_bit(ROM_CODE_TYPE_EFI, &ha->code_types)) {
-+              sprintf(next_str, "%d.%02d", ha->efi_revision[1],
-+                  ha->efi_revision[0]);
-+      }
-+#else
-+      memset(ptmp_hba_node->OptRomVersion, 0,
-+          sizeof(ptmp_hba_node->OptRomVersion));
-+      next_str = ptmp_hba_node->OptRomVersion;
-+      sprintf(next_str, "0.00");
-+      if (test_bit(ROM_CODE_TYPE_BIOS, &ha->code_types)) {
-+              sprintf(next_str, "%d.%02d", ha->bios_revision[1],
-+                  ha->bios_revision[0]);
-+      }
-+#endif
-       ptmp_hba_node->InterfaceType = EXT_DEF_FC_INTF_TYPE;
-       ptmp_hba_node->PortCount = 1;
--
--      ptmp_hba_node->DriverAttr = (ha->flags.failover_enabled) ?
--          DRVR_FO_ENABLED : 0;
--
--      ret = verify_area(VERIFY_WRITE, (void  *)pext->ResponseAdr,
--          sizeof(EXT_HBA_NODE));
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
--                  __func__, ha->host_no, ha->instance);)
--              qla2x00_free_ioctl_scrap_mem(ha);
--              return (ret);
--      }
-+      ptmp_hba_node->DriverAttr = 0;
-+#if !defined(ISP200)
-+      if (ha->flags.failover_enabled)
-+              ptmp_hba_node->DriverAttr = DRVR_FO_ENABLED;
-+#endif
-       /* now copy up the HBA_NODE to user */
-       if (pext->ResponseLen < sizeof(EXT_HBA_NODE))
-@@ -1617,8 +1390,7 @@ qla2x00_query_hba_node(scsi_qla_host_t *
-       else
-               transfer_size = sizeof(EXT_HBA_NODE);
--      ret = copy_to_user((uint8_t *)pext->ResponseAdr,
--          (uint8_t *)ptmp_hba_node, transfer_size);
-+      ret = copy_to_user(pext->ResponseAdr, ptmp_hba_node, transfer_size);
-       if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-               DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
-@@ -1708,7 +1480,7 @@ qla2x00_query_hba_port(scsi_qla_host_t *
-       }
-       port_cnt = 0;
--      for (fcport = ha->fcport; (fcport); fcport = fcport->next) {
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-               /* if removed or missing */
-               if (atomic_read(&fcport->state) != FC_ONLINE) {
-                       DEBUG9_10(printk(
-@@ -1748,11 +1520,10 @@ qla2x00_query_hba_port(scsi_qla_host_t *
-       ptmp_hba_port->DiscPortCount   = port_cnt;
-       ptmp_hba_port->DiscTargetCount = tgt_cnt;
--      if (ha->loop_state == LOOP_DOWN) {
--
-+      if (atomic_read(&ha->loop_state) == LOOP_DOWN ||
-+          atomic_read(&ha->loop_state) == LOOP_DEAD) {
-               ptmp_hba_port->State = EXT_DEF_HBA_LOOP_DOWN;
--
--      } else if (ha->loop_state != LOOP_READY ||
-+      } else if (atomic_read(&ha->loop_state) != LOOP_READY ||
-           test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags) ||
-           test_bit(CFG_ACTIVE, &ha->cfg_flags) || ABORTS_ACTIVE) {
-@@ -1796,24 +1567,13 @@ qla2x00_query_hba_port(scsi_qla_host_t *
-       ptmp_hba_port->PortSpeed = ha->current_speed;
--      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
--          sizeof(EXT_HBA_PORT));
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
--                  __func__, ha->host_no, ha->instance);)
--              qla2x00_free_ioctl_scrap_mem(ha);
--              return (ret);
--      }
--
-       /* now copy up the HBA_PORT to user */
-       if (pext->ResponseLen < sizeof(EXT_HBA_PORT))
-               transfer_size = pext->ResponseLen;
-       else
-               transfer_size = sizeof(EXT_HBA_PORT);
--      ret = copy_to_user((uint8_t *)pext->ResponseAdr,
--          (uint8_t *)ptmp_hba_port, transfer_size);
-+      ret = copy_to_user(pext->ResponseAdr, ptmp_hba_port, transfer_size);
-       if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-               DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
-@@ -1856,12 +1616,17 @@ qla2x00_query_disc_port(scsi_qla_host_t 
-       fc_port_t       *fcport;
-       os_tgt_t        *tq;
-       EXT_DISC_PORT   *ptmp_disc_port;
-+      int found;
-       DEBUG9(printk("%s(%ld): inst=%ld entered. Port inst=%02d.\n",
-           __func__, ha->host_no, ha->instance, pext->Instance);)
-       inst = 0;
--      for (fcport = ha->fcport; fcport != NULL; fcport = fcport->next) {
-+      found = 0;
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-+              if(fcport->port_type != FCT_TARGET)
-+                      continue;
-+
-               if (atomic_read(&fcport->state) != FC_ONLINE) {
-                       /* port does not exist anymore */
-                       DEBUG9_10(printk("%s(%ld): fcport marked lost. "
-@@ -1896,10 +1661,11 @@ qla2x00_query_disc_port(scsi_qla_host_t 
-                   fcport->loop_id);)
-               /* Found the matching port still connected. */
-+              found++;
-               break;
-       }
--      if (fcport == NULL) {
-+      if (!found) {
-               DEBUG9_10(printk("%s(%ld): inst=%ld dev not found.\n",
-                   __func__, ha->host_no, ha->instance);)
-@@ -1961,24 +1727,13 @@ qla2x00_query_disc_port(scsi_qla_host_t 
-               }
-       }
--      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
--          sizeof(EXT_DISC_PORT));
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
--                  __func__, ha->host_no, ha->instance);)
--              qla2x00_free_ioctl_scrap_mem(ha);
--              return (ret);
--      }
--
-       /* now copy up the DISC_PORT to user */
-       if (pext->ResponseLen < sizeof(EXT_DISC_PORT))
-               transfer_size = pext->ResponseLen;
-       else
-               transfer_size = sizeof(EXT_DISC_PORT);
--      ret = copy_to_user((uint8_t *)pext->ResponseAdr,
--          (uint8_t *)ptmp_disc_port, transfer_size);
-+      ret = copy_to_user(pext->ResponseAdr, ptmp_disc_port, transfer_size);
-       if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-               DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
-@@ -1997,6 +1752,26 @@ qla2x00_query_disc_port(scsi_qla_host_t 
-       return (ret);
- }
-+UINT8
-+qla2x00_is_fcport_in_config(scsi_qla_host_t *ha, fc_port_t *fcport)
-+{
-+#if !defined(ISP200)
-+      if (ha->flags.failover_enabled) {
-+              return (qla2x00_is_fcport_in_foconfig(ha, fcport));
-+      } else
-+#endif
-+      {
-+              fc_port_t *fciter;
-+
-+              list_for_each_entry(fciter, &ha->fcports, list) {
-+                      if (memcmp(fcport->port_name, fciter->port_name,
-+                          EXT_DEF_WWN_NAME_SIZE) == 0)
-+                              return(TRUE);
-+              }
-+      }
-+      return (FALSE);
-+}
-+
- /*
-  * qla2x00_query_disc_tgt
-  *    Handles EXT_SC_QUERY_DISC_TGT subcommand.
-@@ -2068,7 +1843,17 @@ qla2x00_query_disc_tgt(scsi_qla_host_t *
-       }
-       tgt_fcport = tq->vis_port;
--      memcpy(ptmp_disc_target->WWNN, tgt_fcport->node_name, WWN_SIZE);
-+
-+      if (tgt_fcport->flags & FC_XP_DEVICE) {
-+              memcpy(ptmp_disc_target->WWNN, tq->node_name, WWN_SIZE);
-+      DEBUG9(printk("%s(%ld): inst=%ld using 1 target node name.\n",
-+          __func__, ha->host_no, ha->instance);)
-+      } else {
-+              memcpy(ptmp_disc_target->WWNN, tgt_fcport->node_name, WWN_SIZE);
-+      DEBUG9(printk("%s(%ld): inst=%ld using 1 fcport node name.\n",
-+          __func__, ha->host_no, ha->instance);)
-+      }
-+
-       memcpy(ptmp_disc_target->WWPN, tgt_fcport->port_name, WWN_SIZE);
-       ptmp_disc_target->Id[0] = 0;
-@@ -2128,24 +1913,13 @@ qla2x00_query_disc_tgt(scsi_qla_host_t *
-           tgt_fcport->port_name[7],
-           cnt);)
--      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
--          sizeof(EXT_DISC_TARGET));
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
--                  __func__, ha->host_no, ha->instance);)
--              qla2x00_free_ioctl_scrap_mem(ha);
--              return (ret);
--      }
--
-       /* now copy up the DISC_PORT to user */
-       if (pext->ResponseLen < sizeof(EXT_DISC_PORT))
-               transfer_size = pext->ResponseLen;
-       else
-               transfer_size = sizeof(EXT_DISC_TARGET);
--      ret = copy_to_user((uint8_t *)pext->ResponseAdr,
--          (uint8_t *)ptmp_disc_target, transfer_size);
-+      ret = copy_to_user(pext->ResponseAdr, ptmp_disc_target, transfer_size);
-       if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-               DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
-@@ -2220,24 +1994,13 @@ qla2x00_query_chip(scsi_qla_host_t *ha, 
-       for (i = 0; i < 8; i++)
-               ptmp_isp->OutMbx[i] = 0;
--      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
--          sizeof(EXT_CHIP));
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
--                  __func__, ha->host_no, ha->instance);)
--              qla2x00_free_ioctl_scrap_mem(ha);
--              return (ret);
--      }
--
-       /* now copy up the ISP to user */
-       if (pext->ResponseLen < sizeof(EXT_CHIP))
-               transfer_size = pext->ResponseLen;
-       else
-               transfer_size = sizeof(EXT_CHIP);
--      ret = copy_to_user((uint8_t *)pext->ResponseAdr, (uint8_t *)ptmp_isp,
--          transfer_size);
-+      ret = copy_to_user(pext->ResponseAdr, ptmp_isp, transfer_size);
-       if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-               DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
-@@ -2349,18 +2112,8 @@ qla2x00_get_statistics(scsi_qla_host_t *
-       DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
-           __func__, ha->host_no, ha->instance);)
--      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
--          sizeof(EXT_HBA_PORT_STAT));
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR VERIFY_WRITE "
--                  "EXT_HBA_PORT_STAT.\n",
--                  __func__, ha->host_no, ha->instance);)
--              return (ret);
--      }
--
-       /* check on loop down */
--      if (ha->loop_state != LOOP_READY || 
-+      if (atomic_read(&ha->loop_state) != LOOP_READY || 
-           test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
-           (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
-           ABORTS_ACTIVE || ha->dpc_active) {
-@@ -2415,6 +2168,13 @@ qla2x00_get_statistics(scsi_qla_host_t *
-          ptmp_stat->TotalInterrupts        =  ha->total_isr_cnt;
-        */
-+      ptmp_stat->InputRequestCount = ha->total_input_cnt;
-+      ptmp_stat->OutputRequestCount = ha->total_output_cnt;
-+      ptmp_stat->ControlRequestCount = ha->total_ctrl_cnt;
-+      /* convert to MB */
-+      ptmp_stat->InputMBytes = ha->total_input_bytes >> 20;
-+      ptmp_stat->OutputMBytes = ha->total_output_bytes >> 20;
-+
-       ptmp_stat->TotalLinkFailures               = stat_buf.link_fail_cnt;
-       ptmp_stat->TotalLossOfSync                 = stat_buf.loss_sync_cnt;
-       ptmp_stat->TotalLossOfSignals              = stat_buf.loss_sig_cnt;
-@@ -2422,6 +2182,25 @@ qla2x00_get_statistics(scsi_qla_host_t *
-       ptmp_stat->InvalidTransmissionWordCount    = stat_buf.inval_xmit_word_cnt;
-       ptmp_stat->InvalidCRCCount                 = stat_buf.inval_crc_cnt;
-+      DEBUG9(printk("%s(%ld): inst=%ld Got following HBA statistics:\n"
-+          "isp_aborts=%d device_err=%d total_io=%d total MB=%d LIP "
-+          "resets=%d\n"
-+          "input cnt=%lld MB=%lld output cnt=%lld MB=%lld ctrl cnt=%lld\n"
-+          "link failure=%d loss sync=%d loss signal=%d prim seq err=%d "
-+          "invalid word %d invalid CRC=%d.\n",
-+          __func__, ha->host_no, ha->instance,
-+          ptmp_stat->ControllerErrorCount, ptmp_stat->DeviceErrorCount,
-+          ptmp_stat->TotalIoCount, ptmp_stat->TotalMBytes,
-+          ptmp_stat->TotalLipResets,
-+          ptmp_stat->InputRequestCount, ptmp_stat->InputMBytes,
-+          ptmp_stat->OutputRequestCount, ptmp_stat->OutputMBytes,
-+          ptmp_stat->ControlRequestCount,
-+          ptmp_stat->TotalLinkFailures, ptmp_stat->TotalLossOfSync,
-+          ptmp_stat->TotalLossOfSignals,
-+          ptmp_stat->PrimitiveSeqProtocolErrorCount,
-+          ptmp_stat->InvalidTransmissionWordCount,
-+          ptmp_stat->InvalidCRCCount);)
-+
-       /* now copy up the STATISTICS to user */
-       if (pext->ResponseLen < sizeof(EXT_HBA_PORT_STAT))
-               transfer_size = pext->ResponseLen;
-@@ -2480,20 +2259,12 @@ qla2x00_get_fc_statistics(scsi_qla_host_
-       uint8_t         *req_name;
-       uint16_t        mb_stat[1];
-       uint32_t        transfer_size;
-+      int     found;
-       DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
-           __func__, ha->host_no, ha->instance);)
--      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
--          sizeof(EXT_HBA_PORT_STAT));
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR VERIFY_WRITE.\n",
--                  __func__, ha->host_no, ha->instance);)
--              return (ret);
--      }
--
-       ret = copy_from_user(&addr_struct, pext->RequestAdr, pext->RequestLen);
-       if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-@@ -2503,12 +2274,14 @@ qla2x00_get_fc_statistics(scsi_qla_host_
-       }
-       /* find the device's loop_id */
-+      found = 0;
-       switch (addr_struct.DestType) {
-       case EXT_DEF_DESTTYPE_WWPN:
-               req_name = addr_struct.DestAddr.WWPN;
--              for (fcport = ha->fcport; fcport; fcport = fcport->next) {
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-                       if (memcmp(fcport->port_name, req_name,
-                           EXT_DEF_WWN_NAME_SIZE) == 0) {
-+                              found++;
-                               break;
-                       }
-               }
-@@ -2528,7 +2301,7 @@ qla2x00_get_fc_statistics(scsi_qla_host_
-               break;
-       }
--      if (fcport == NULL) {
-+      if (!found) {
-               /* not found */
-               DEBUG9_10(printk("%s(%ld): inst=%ld ERROR device port %02x%02x"
-                   "%02x%02x%02x%02x%02x%02x not found.\n",
-@@ -2568,7 +2341,7 @@ qla2x00_get_fc_statistics(scsi_qla_host_
-        */
-       /* check on loop down */
--      if (ha->loop_state != LOOP_READY ||
-+      if (atomic_read(&ha->loop_state) != LOOP_READY ||
-           test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
-           (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
-           ABORTS_ACTIVE || ha->dpc_active) {
-@@ -2677,6 +2450,7 @@ qla2x00_get_port_summary(scsi_qla_host_t
-       uint32_t        port_cnt = 0;
-       uint32_t        top_xfr_size;
-       uint32_t        usr_no_of_entries = 0;
-+      uint32_t        device_types;
-       void            *start_of_entry_list;
-       fc_port_t       *fcport;
-@@ -2691,9 +2465,9 @@ qla2x00_get_port_summary(scsi_qla_host_t
-               /* not enough memory */
-               pext->Status = EXT_STATUS_NO_MEMORY;
-               DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
--                  "pdevicedata requested=%d.\n",
-+                  "pdevicedata requested=%ld.\n",
-                   __func__, ha->host_no, ha->instance,
--                  sizeof(EXT_DEVICEDATA));)
-+                  (ulong)sizeof(EXT_DEVICEDATA));)
-               return (ret);
-       }
-@@ -2702,9 +2476,22 @@ qla2x00_get_port_summary(scsi_qla_host_t
-               /* not enough memory */
-               pext->Status = EXT_STATUS_NO_MEMORY;
-               DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
--                  "pdd_entry requested=%d.\n",
-+                  "pdd_entry requested=%ld.\n",
-                   __func__, ha->host_no, ha->instance,
--                  sizeof(EXT_DEVICEDATAENTRY));)
-+                  (ulong)sizeof(EXT_DEVICEDATAENTRY));)
-+              qla2x00_free_ioctl_scrap_mem(ha);
-+              return (ret);
-+      }
-+
-+      /* Get device types to query. */
-+      device_types = 0;
-+      ret = copy_from_user(&device_types, pext->RequestAdr,
-+          sizeof(device_types));
-+      if (ret) {
-+              pext->Status = EXT_STATUS_COPY_ERR;
-+              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR"
-+                  "copy_from_user() of struct failed (%d).\n",
-+                  __func__, ha->host_no, ha->instance, ret);)
-               qla2x00_free_ioctl_scrap_mem(ha);
-               return (ret);
-       }
-@@ -2719,9 +2506,8 @@ qla2x00_get_port_summary(scsi_qla_host_t
-       start_of_entry_list = (void *)(pext->ResponseAdr) + top_xfr_size;
-       /* Start copying from devices that exist. */
--      ret = qla2x00_get_fcport_summary(ha, pdd_entry,
--          start_of_entry_list, usr_no_of_entries,
--          &entry_cnt, &pext->Status);
-+      ret = qla2x00_get_fcport_summary(ha, pdd_entry, start_of_entry_list,
-+          device_types, usr_no_of_entries, &entry_cnt, &pext->Status);
-       DEBUG9(printk("%s(%ld): after get_fcport_summary, entry_cnt=%d.\n",
-           __func__, ha->host_no, entry_cnt);)
-@@ -2731,15 +2517,20 @@ qla2x00_get_port_summary(scsi_qla_host_t
-        */
-       if (ret == 0) {
-               if (!ha->flags.failover_enabled) {
-+#if 0
-                       ret = qla2x00_std_missing_port_summary(ha, pdd_entry,
-                           start_of_entry_list, usr_no_of_entries,
-                           &entry_cnt, &pext->Status);
--              } else {
-+#endif
-+              }
-+#if !defined(ISP200)
-+              else {
-                       ret = qla2x00_fo_missing_port_summary(ha, pdd_entry,
-                           start_of_entry_list, usr_no_of_entries,
-                           &entry_cnt, &pext->Status);
-               }
-+#endif
-       }
-       DEBUG9(printk(
-@@ -2754,8 +2545,11 @@ qla2x00_get_port_summary(scsi_qla_host_t
-       }
-       pdevicedata->ReturnListEntryCount = entry_cnt;
--      for (fcport = ha->fcport; fcport != NULL; fcport = fcport->next) {
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-               /* count all ports that exist */
-+              if (fcport->port_type != FCT_TARGET)
-+                      continue;
-+      
-               port_cnt++;
-       }
-       if (port_cnt > entry_cnt)
-@@ -2771,16 +2565,6 @@ qla2x00_get_port_summary(scsi_qla_host_t
-       /* copy top of devicedata, which is everything other than the
-        * actual entry list data.
-        */
--      ret = verify_area(VERIFY_WRITE, (void *)(pext->ResponseAdr),
--          top_xfr_size);
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
--                  __func__, ha->host_no, ha->instance);)
--              qla2x00_free_ioctl_scrap_mem(ha);
--              return (ret);
--      }
--
-       usr_temp   = (uint8_t *)pext->ResponseAdr;
-       kernel_tmp = (uint8_t *)pdevicedata;
-       ret = copy_to_user(usr_temp, kernel_tmp, top_xfr_size);
-@@ -2825,8 +2609,8 @@ qla2x00_get_port_summary(scsi_qla_host_t
-  */
- STATIC int
- qla2x00_get_fcport_summary(scsi_qla_host_t *ha, EXT_DEVICEDATAENTRY *pdd_entry,
--    void *pstart_of_entry_list, uint32_t max_entries, uint32_t *pentry_cnt,
--    uint32_t *ret_status)
-+    void *pstart_of_entry_list, uint32_t device_types, uint32_t max_entries,
-+    uint32_t *pentry_cnt, uint32_t *ret_status)
- {
-       int             ret = QL_STATUS_SUCCESS;
-       uint8_t         *usr_temp, *kernel_tmp;
-@@ -2836,12 +2620,31 @@ qla2x00_get_fcport_summary(scsi_qla_host
-       uint32_t        transfer_size;
-       fc_port_t       *fcport;
-       os_tgt_t        *tq;
-+#if !defined(ISP200)
-+      mp_host_t       *host = NULL;
-+      uint16_t        idx;
-+      mp_device_t     *tmp_dp = NULL;
-+#endif
-       DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
-           __func__, ha->host_no, ha->instance);)
--      for (fcport = ha->fcport; fcport && *pentry_cnt < max_entries;
--          fcport = fcport->next) {
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-+              if (*pentry_cnt >= max_entries)
-+                      break;
-+
-+              if (fcport->port_type != FCT_TARGET) {
-+                      /* Don't report initiators or broadcast devices. */
-+                      DEBUG2_9_10(printk("%s(%ld): not reporting non-target "
-+                          "fcport %02x%02x%02x%02x%02x%02x%02x%02x. "
-+                          "port_type=%x.\n",
-+                          __func__, ha->host_no, fcport->port_name[0],
-+                          fcport->port_name[1], fcport->port_name[2],
-+                          fcport->port_name[3], fcport->port_name[4],
-+                          fcport->port_name[5], fcport->port_name[6],
-+                          fcport->port_name[7], fcport->port_type));
-+                      continue;
-+              }
-               if ((atomic_read(&fcport->state) != FC_ONLINE) &&
-                   !qla2x00_is_fcport_in_config(ha, fcport)) {
-@@ -2861,9 +2664,6 @@ qla2x00_get_fcport_summary(scsi_qla_host
-               /* copy from fcport to dd_entry */
--              memcpy(pdd_entry->NodeWWN, fcport->node_name, WWN_SIZE);
--              memcpy(pdd_entry->PortWWN, fcport->port_name, WWN_SIZE);
--
-               for (b = 0; b < 3 ; b++)
-                       pdd_entry->PortID[b] = fcport->d_id.r.d_id[2-b];
-@@ -2885,10 +2685,56 @@ qla2x00_get_fcport_summary(scsi_qla_host
-                       if (memcmp(fcport->port_name, tq->vis_port->port_name,
-                           EXT_DEF_WWN_NAME_SIZE) == 0) {
-+
-                               pdd_entry->TargetAddress.Target = tgt;
-+
-+                              if ((fcport->flags & FC_XP_DEVICE) &&
-+                                  !(device_types &
-+                                      EXT_DEF_GET_TRUE_NN_DEVICE)) {
-+                                      memcpy(pdd_entry->NodeWWN,
-+                                          tq->node_name, WWN_SIZE);
-+                              } else {
-+                                      memcpy(pdd_entry->NodeWWN,
-+                                          fcport->node_name, WWN_SIZE);
-+                              }
-+
-                               break;
-                       }
-               }
-+
-+              if (tgt == MAX_TARGETS) {
-+                      /* did not bind to a target */
-+/*
-+                              memcpy(pdd_entry->NodeWWN,
-+                                  tq->node_name, WWN_SIZE);
-+*/
-+#if !defined(ISP200)
-+                      if (ha->flags.failover_enabled) {
-+                              if (((host = qla2x00_cfg_find_host(ha)) != NULL)
-+                                      && (fcport->flags & FC_XP_DEVICE) &&
-+                                      !(device_types &
-+                                          EXT_DEF_GET_TRUE_NN_DEVICE)) {
-+                                      if((tmp_dp = 
-+                                          qla2x00_find_mp_dev_by_portname(
-+                                              host, fcport->port_name, &idx))
-+                                                      != NULL)
-+                                      memcpy(pdd_entry->NodeWWN,
-+                                              tmp_dp->nodename, WWN_SIZE);
-+                              }
-+/* XXX */
-+                              else
-+                                      memcpy(pdd_entry->NodeWWN,
-+                                          fcport->node_name, WWN_SIZE);
-+                      } else 
-+#endif
-+                      {
-+                              memcpy(pdd_entry->NodeWWN,
-+                                  fcport->node_name, WWN_SIZE);
-+                      }
-+              }
-+
-+              memcpy(pdd_entry->PortWWN, fcport->port_name, WWN_SIZE);
-+
-               pdd_entry->TargetAddress.Lun    = 0;
-               pdd_entry->DeviceFlags          = 0;
-               pdd_entry->LoopID               = fcport->loop_id;
-@@ -2905,18 +2751,6 @@ qla2x00_get_fcport_summary(scsi_qla_host
-               current_offset = *pentry_cnt * sizeof(EXT_DEVICEDATAENTRY);
-               transfer_size = sizeof(EXT_DEVICEDATAENTRY);
--              ret = verify_area(VERIFY_WRITE,
--                  (uint8_t *)pstart_of_entry_list + current_offset,
--                  transfer_size);
--
--              if (ret) {
--                      *ret_status = EXT_STATUS_COPY_ERR;
--                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify WRITE "
--                          "rsp bufaddr=%p\n",
--                          __func__, ha->host_no, ha->instance,
--                          (uint8_t *)pstart_of_entry_list + current_offset);)
--                      return (ret);
--              }
-               /* now copy up this dd_entry to user */
-               usr_temp = (uint8_t *)pstart_of_entry_list + current_offset;
-@@ -2944,6 +2778,9 @@ qla2x00_get_fcport_summary(scsi_qla_host
-  * qla2x00_fo_missing_port_summary is in qla_fo.c
-  */
-+//RUBY: Do we need this with the new consolidated fcports list?  This will
-+//    be handled transparently in qla2x00_get_fcport_summary().
-+#if 0
- /*
-  * qla2x00_std_missing_port_summary
-  *    Returns values of devices not connected but found in configuration
-@@ -3027,36 +2864,22 @@ qla2x00_std_missing_port_summary(scsi_ql
-                           sizeof(EXT_DEVICEDATAENTRY);
-                       transfer_size = sizeof(EXT_DEVICEDATAENTRY);
--                      ret = verify_area(VERIFY_WRITE,
--                          (uint8_t *)pstart_of_entry_list + current_offset,
--                          transfer_size);
--                      if (ret == 0) {
--
--                              /* now copy up this dd_entry to user */
--                              usr_temp = (uint8_t *)pstart_of_entry_list +
--                                  current_offset;
--                              kernel_tmp = (uint8_t *)pdd_entry;
--                              ret = copy_to_user(usr_temp, kernel_tmp,
--                                  transfer_size);
--                              if (ret) {
--                                      *ret_status = EXT_STATUS_COPY_ERR;
--                                      DEBUG9_10(printk("%s(%ld): inst=%ld "
--                                          "ERROR copy rsp list buffer.\n",
--                                          __func__, ha->host_no,
--                                          ha->instance);)
--                                      break;
--                              } else {
--                                      *pentry_cnt+=1;
--                              }
--                      } else {
-+                      /* now copy up this dd_entry to user */
-+                      usr_temp = (uint8_t *)pstart_of_entry_list +
-+                          current_offset;
-+                      kernel_tmp = (uint8_t *)pdd_entry;
-+                      ret = copy_to_user(usr_temp, kernel_tmp,
-+                          transfer_size);
-+                      if (ret) {
-                               *ret_status = EXT_STATUS_COPY_ERR;
-                               DEBUG9_10(printk("%s(%ld): inst=%ld "
--                                  "ERROR verify wrt rsp bufaddr=%p\n",
--                                  __func__, ha->host_no, ha->instance,
--                                  (uint8_t *)pstart_of_entry_list +
--                                  current_offset);)
-+                                  "ERROR copy rsp list buffer.\n",
-+                                  __func__, ha->host_no,
-+                                  ha->instance);)
-                               break;
-+                      } else {
-+                              *pentry_cnt+=1;
-                       }
-               }
-@@ -3070,7 +2893,7 @@ qla2x00_std_missing_port_summary(scsi_ql
-       return (ret);
- }
--
-+#endif
- /*
-  * qla2x00_query_driver
-@@ -3127,16 +2950,6 @@ qla2x00_query_driver(scsi_qla_host_t *ha
-       else
-               transfer_size = sizeof(EXT_DRIVER);
--      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
--          transfer_size);
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf.\n",
--                  __func__, ha->host_no, ha->instance);)
--              qla2x00_free_ioctl_scrap_mem(ha);
--              return (ret);
--      }
--
-       /* now copy up the ISP to user */
-       usr_temp   = (uint8_t *)pext->ResponseAdr;
-       kernel_tmp = (uint8_t *)pdriver_prop;
-@@ -3206,16 +3019,6 @@ qla2x00_query_fw(scsi_qla_host_t *ha, EX
-       transfer_size = sizeof(EXT_FW);
--      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
--          transfer_size);
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf.\n",
--                  __func__, ha->host_no, ha->instance);)
--              qla2x00_free_ioctl_scrap_mem(ha);
--              return (ret);
--      }
--
-       usr_temp   = (uint8_t *)pext->ResponseAdr;
-       kernel_tmp = (uint8_t *)pfw_prop;
-       ret = copy_to_user(usr_temp, kernel_tmp, transfer_size);
-@@ -3288,17 +3091,6 @@ qla2x00_msiocb_passthru(scsi_qla_host_t 
-                   __func__, ha->host_no, ha->instance);)
-       }
--      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
--          pext->RequestLen);
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk(
--                  "%s(%ld): inst=%ld ERROR verify read req buf\n",
--                  __func__, ha->host_no, ha->instance);)
--
--              return (ret);
--      }
--
-       DEBUG9(printk("%s(%ld): inst=%ld req buf verified.\n",
-           __func__, ha->host_no, ha->instance);)
-@@ -3390,24 +3182,19 @@ qla2x00_send_els_passthru(scsi_qla_host_
- {
-       int             ret = 0;
--      uint8_t         index;
-       uint8_t         invalid_wwn = FALSE;
--      uint8_t         port_found;
-       uint8_t         *ptmp_stat;
-       uint8_t         *pusr_req_buf;
-       uint8_t         *presp_payload;
-       uint32_t        payload_len;
-       uint32_t        usr_req_len;
--      fcdev_t         tmpdev;
--
--      fc_port_t       *pfcport;
-+      int             found;
-+      uint16_t        next_loop_id;
-+      fc_port_t       *fcport;
-       EXT_ELS_PT_REQ  *pels_pt_req;
--      struct list_head *fcil;
--      fc_initiator_t  *fcinitiator;
--
-       DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
-           __func__, ha->host_no, ha->instance);)
-@@ -3464,7 +3251,7 @@ qla2x00_send_els_passthru(scsi_qla_host_
-           __func__, ha->host_no, ha->instance);)
-       
-       /* check on loop down (1) */
--      if (ha->loop_state != LOOP_READY || 
-+      if (atomic_read(&ha->loop_state) != LOOP_READY || 
-           test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
-           (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) || ABORTS_ACTIVE) {
-@@ -3528,147 +3315,62 @@ qla2x00_send_els_passthru(scsi_qla_host_
-       /* Now find the loop ID */
-       /************************/
--      /* 1st: scan thru our HBA database */
--      index = 0;
--      port_found = FALSE;
--      fcinitiator = NULL;
--      if (!invalid_wwn) {
--              /* search with WWPN */
--              list_for_each(fcil, &ha->fcinitiators) {
--                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
--
--                      if (memcmp(pels_pt_req->WWPN, fcinitiator->port_name,
--                               EXT_DEF_WWN_NAME_SIZE) == 0) {
--
--                              port_found = TRUE;
--                              pels_pt_req->Lid = fcinitiator->loop_id;
--
--                              DEBUG9(printk("%s(%ld): inst=%ld found host "
--                                  "w/ WWN. loop_id = %02x.\n",
--                                  __func__, ha->host_no, ha->instance,
--                                  pels_pt_req->Lid);)
-+      found = 0;
-+      fcport = NULL;
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-+              if (fcport->port_type != FCT_INITIATOR ||
-+                  fcport->port_type != FCT_TARGET)
-+                      continue;
--                              break;
--                      }
-+              if (!invalid_wwn) {
-+                      /* search with WWPN */
-+                      if (memcmp(pels_pt_req->WWPN, fcport->port_name,
-+                          EXT_DEF_WWN_NAME_SIZE))
-+                              continue;
-+              } else {
-+                      /* search with PID */
-+                      if (pels_pt_req->Id[1] != fcport->d_id.r.d_id[2]
-+                          || pels_pt_req->Id[2] != fcport->d_id.r.d_id[1]
-+                          || pels_pt_req->Id[3] != fcport->d_id.r.d_id[0])
-+                              continue;
-               }
--      } else {
--              /* search with PID */
--              list_for_each(fcil, &ha->fcinitiators) {
--                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
--
--                      if (pels_pt_req->Id[1] == fcinitiator->d_id.r.d_id[2]
--                          && pels_pt_req->Id[2] == fcinitiator->d_id.r.d_id[1]
--                          && pels_pt_req->Id[3] ==
--                                  fcinitiator->d_id.r.d_id[0]) {
--
--                              port_found = TRUE;
--                              pels_pt_req->Lid = fcinitiator->loop_id;
--
--                              DEBUG9(printk("%s(%ld): inst=%ld found host "
--                                  "w/ WWN. loop_id = %02x.\n",
--                                  __func__, ha->host_no, ha->instance,
--                                  pels_pt_req->Lid);)
--                              break;
--                      }
--              }
-+              found++;
-       }
--      /* If this is for a host device, check if we need to perform login */
--      if (port_found && (fcinitiator->loop_id >= LAST_SNS_LOOP_ID)) {
--
--              DEBUG9_10(printk("%s(%ld): inst=%ld need to relogin to "
--                  "dest host.\n",
-+      if (!found) {
-+              /* invalid WWN or PID specified */
-+              pext->Status = EXT_STATUS_INVALID_PARAM;
-+              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR WWPN/PID invalid.\n",
-                   __func__, ha->host_no, ha->instance);)
--              if (fcinitiator->d_id.b24 == 0) {
--                      /* Either RSCN hasn't been processed yet or
--                       * this host is no longer connected to us.
--                       */
--                      pext->Status = EXT_STATUS_DEV_NOT_FOUND;
--                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR dest host "
--                          "port lost.\n",
--                          __func__, ha->host_no, ha->instance);)
--
--                      return (ret);
--              }
-+              return (ret);
-+      }
--              /* login and update database */
--              tmpdev.d_id.b24 = fcinitiator->d_id.b24;
--              tmpdev.loop_id = fcinitiator->loop_id;
-+      /* If this is for a host device, check if we need to perform login */
-+      if (fcport->port_type == FCT_INITIATOR &&
-+          fcport->loop_id >= SNS_LAST_LOOP_ID) {
--              if (qla2x00_host_relogin(ha, &tmpdev) != 0) {
-+              next_loop_id = 0;
-+              ret = qla2x00_fabric_login(ha, fcport, &next_loop_id);
-+              if (ret != QL_STATUS_SUCCESS) {
-                       /* login failed. */
-                       pext->Status = EXT_STATUS_DEV_NOT_FOUND;
-                       DEBUG9_10(printk("%s(%ld): inst=%ld ERROR login to "
--                          "host port failed. loop_id=%02x pid=%06x ret=%d.\n",
--                          __func__, ha->host_no, ha->instance, tmpdev.loop_id,
--                          tmpdev.d_id.b24, ret);)
--
--                      return (ret);
--              } else {
--                      fcinitiator->loop_id = tmpdev.loop_id;
--                      pels_pt_req->Lid = tmpdev.loop_id;
--
--                      DEBUG9(printk("%s(%ld): inst=%ld success login to "
--                          "remote host; Lid=%02x.\n",
-+                          "host port failed. loop_id=%02x pid=%02x%02x%02x "
-+                          "ret=%d.\n",
-                           __func__, ha->host_no, ha->instance,
--                          fcinitiator->loop_id);)
--              }
--      }
--      
--      /* 2nd: scan thru our fcport database */
--      if (!invalid_wwn) {
--              /* search with WWPN */
--              for (pfcport = ha->fcport;
--                  (!port_found) && pfcport != NULL; pfcport = pfcport->next) {
-+                          fcport->loop_id, fcport->d_id.b.domain,
-+                          fcport->d_id.b.area, fcport->d_id.b.al_pa, ret);)
--                      if (memcmp(pfcport->port_name, pels_pt_req->WWPN,
--                          EXT_DEF_WWN_NAME_SIZE) == 0) {
--
--                              port_found = TRUE;
--                              pels_pt_req->Lid = pfcport->loop_id;
--
--                              DEBUG9(printk("%s(%ld): inst=%ld found fcport "
--                                  "w/ WWN. loop_id = %02x.\n",
--                                  __func__, ha->host_no, ha->instance,
--                                  pels_pt_req->Lid);)
--                              break;
--                      }
--              }
--      } else {
--              /* search with PID */
--              for (pfcport = ha->fcport;
--                  (!port_found) && pfcport != NULL; pfcport = pfcport->next) {
--
--                      if (pels_pt_req->Id[1] == pfcport->d_id.r.d_id[2]
--                          && pels_pt_req->Id[2] == pfcport->d_id.r.d_id[1]
--                          && pels_pt_req->Id[3] == pfcport->d_id.r.d_id[0]) {
--
--                              port_found = TRUE;
--                              pels_pt_req->Lid = pfcport->loop_id;
--
--                              DEBUG9(printk("%s(%ld): inst=%ld found fcport "
--                                  "w/ PID. loop_id = %02x.\n",
--                                  __func__, ha->host_no, ha->instance,
--                                  pels_pt_req->Lid);)
--
--                              break;
--                      }
-+                      return (ret);
-               }
-       }
--      
--      if (!port_found) {
--              /* invalid WWN or PID specified */
--              pext->Status = EXT_STATUS_INVALID_PARAM;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR WWPN/PID invalid.\n",
--                  __func__, ha->host_no, ha->instance);)
--
--              return (ret);
--      }
-       /* queue command */
-+      pels_pt_req->Lid = fcport->loop_id;
-+
-       if ((ret = qla2x00_ioctl_ms_queuecommand(ha, pext, pscsi_cmd,
-           ptmp_fcport, ptmp_fclun, pels_pt_req))) {
-               return (ret);
-@@ -3701,20 +3403,8 @@ qla2x00_send_els_passthru(scsi_qla_host_
-       /* The data returned include FC frame header */
-       presp_payload = (uint8_t *)pext->ResponseAdr + sizeof(EXT_ELS_PT_REQ);
--      ret = verify_area(VERIFY_WRITE, (void *)presp_payload, payload_len);
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp "
--                  "buffer. ha=%p.\n",
--                  __func__, ha->host_no, ha->instance, ha);)
--
--              return (ret);
--      }
--
-       /* copy back data returned to response buffer */
--      ret = copy_to_user(presp_payload, (uint8_t *)ha->ioctl_mem,
--          payload_len);
-+      ret = copy_to_user(presp_payload, ha->ioctl_mem, payload_len);
-       if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-               DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
-@@ -3729,6 +3419,57 @@ qla2x00_send_els_passthru(scsi_qla_host_
- }
- #endif
-+#if defined(ISP200) 
-+/*
-+ * qla2x00_mgmt_svr_login
-+ *    Login management server.
-+ *
-+ * Input:
-+ *    ha:     adapter state pointer.
-+ *
-+ * Returns:
-+ *    qla2x00 local function return status code.
-+ *
-+ * Context:
-+ *    Kernel context.
-+ */
-+int
-+qla2x00_mgmt_svr_login(scsi_qla_host_t *ha)
-+{
-+      int             tmp_rval = 0;
-+      uint16_t        mb[MAILBOX_REGISTER_COUNT];
-+
-+      DEBUG13(printk("%s(%ld): entered\n",
-+          __func__, ha->host_no);)
-+
-+      /* check on management server login status */
-+      if (ha->flags.management_server_logged_in == 0) {
-+              /* login to management server device */
-+
-+              tmp_rval = qla2x00_login_fabric(ha, MANAGEMENT_SERVER,
-+                  0xff, 0xff, 0xfa, &mb[0], BIT_1);
-+
-+              if (tmp_rval != 0 || mb[0] != 0x4000) {
-+
-+                      DEBUG2_13(printk(
-+                          "%s(%ld): inst=%ld ERROR login to MS.\n",
-+                          __func__, ha->host_no, ha->instance);)
-+
-+                      return (QL_STATUS_ERROR);
-+              }
-+
-+              ha->flags.management_server_logged_in = 1;
-+              DEBUG13(printk("%s(%ld): success login to MS.\n",
-+                  __func__, ha->host_no);)
-+      }
-+
-+      DEBUG13(printk("%s(%ld): exiting.\n",
-+          __func__, ha->host_no);)
-+
-+      return (QL_STATUS_SUCCESS);
-+}
-+#endif
-+
- /*
-  * qla2x00_send_fcct
-  *    Passes the FC CT command down to firmware as MSIOCB and
-@@ -3752,8 +3493,6 @@ qla2x00_send_fcct(scsi_qla_host_t *ha, E
-     int mode)
- {
-       int             ret = 0;
--      int             tmp_rval = 0;
--      uint16_t        mb[MAILBOX_REGISTER_COUNT];
-       DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
-@@ -3782,24 +3521,15 @@ qla2x00_send_fcct(scsi_qla_host_t *ha, E
-       DEBUG9(printk("%s(%ld): inst=%ld after copy request.\n",
-           __func__, ha->host_no, ha->instance);)
--      /* check on management server login status */
--      if (ha->flags.management_server_logged_in == 0) {
--              /* login to management server device */
--
--              tmp_rval = qla2x00_login_fabric(ha, MANAGEMENT_SERVER,
--                  0xff, 0xff, 0xfa, &mb[0], BIT_1);
--
--              if (tmp_rval != 0 || mb[0] != 0x4000) {
--                      pext->Status = EXT_STATUS_DEV_NOT_FOUND;
--
--                      DEBUG9_10(printk(
--                          "%s(%ld): inst=%ld ERROR login to MS.\n",
--                          __func__, ha->host_no, ha->instance);)
-+      /* login to management server device */
-+      if (qla2x00_mgmt_svr_login(ha) != QL_STATUS_SUCCESS) {
-+              pext->Status = EXT_STATUS_DEV_NOT_FOUND;
--                      return (ret);
--              }
-+              DEBUG9_10(printk(
-+                  "%s(%ld): inst=%ld mgmt_svr_login failed.\n",
-+                  __func__, ha->host_no, ha->instance);)
--              ha->flags.management_server_logged_in = 1;
-+              return (ret);
-       }
-       DEBUG9(printk("%s(%ld): success login to MS.\n",
-@@ -3820,20 +3550,8 @@ qla2x00_send_fcct(scsi_qla_host_t *ha, E
-               return (ret);
-       }
--      /* getting device data and putting in pext->ResponseAdr */
--      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
--          pext->ResponseLen);
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp "
--                  "buffer. ha=%p.\n",
--                  __func__, ha->host_no, ha->instance, ha);)
--              return (ret);
--      }
--
-       /* sending back data returned from Management Server */
--      ret = copy_to_user((uint8_t *)pext->ResponseAdr,
--          (uint8_t *)ha->ioctl_mem, pext->ResponseLen);
-+      ret = copy_to_user(pext->ResponseAdr, ha->ioctl_mem, pext->ResponseLen);
-       if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-               DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
-@@ -3882,7 +3600,6 @@ qla2x00_ioctl_ms_queuecommand(scsi_qla_h
-       pfclun->fcport = pfcport;
-       pfclun->lun = 0;
-       pfclun->flags = 0;
--      pfclun->next = NULL;
-       plq->fclun = pfclun;
-       plq->fclun->fcport->ha = ha;
-@@ -3891,7 +3608,7 @@ qla2x00_ioctl_ms_queuecommand(scsi_qla_h
-       pscsi_cmd->scsi_done = qla2x00_msiocb_done;
-       /* check on loop down (2)- check again just before sending cmd out. */
--      if (ha->loop_state != LOOP_READY || 
-+      if (atomic_read(&ha->loop_state) != LOOP_READY || 
-           test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
-           (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
-           ABORTS_ACTIVE) {
-@@ -3982,8 +3699,12 @@ qla2x00_start_ms_cmd(scsi_qla_host_t *ha
-               usr_req_len = pext->RequestLen - sizeof(EXT_ELS_PT_REQ);
-               usr_resp_len = pext->ResponseLen - sizeof(EXT_ELS_PT_REQ);
-       
--              pkt->control_flags = BIT_15; /* ELS passthru enabled */
-+              pkt->control_flags = __constant_cpu_to_le16(CF_ELS_PASSTHRU);
-+#if defined(EXTENDED_IDS)
-+              pkt->loop_id = cpu_to_le16(pels_pt_req->Lid);
-+#else
-               pkt->loop_id = pels_pt_req->Lid;
-+#endif
-               pkt->type    = 1; /* ELS frame */
-               
-               if (pext->ResponseLen != 0) {
-@@ -3996,7 +3717,11 @@ qla2x00_start_ms_cmd(scsi_qla_host_t *ha
-       } else {
-               usr_req_len = pext->RequestLen;
-               usr_resp_len = pext->ResponseLen;
--              pkt->loop_id     = MANAGEMENT_SERVER;
-+#if defined(EXTENDED_IDS)
-+              pkt->loop_id = __constant_cpu_to_le16(MANAGEMENT_SERVER);
-+#else
-+              pkt->loop_id = MANAGEMENT_SERVER;
-+#endif
-       }
-       DEBUG9_10(printk("%s(%ld): inst=%ld using loop_id=%02x req_len=%d, "
-@@ -4004,22 +3729,22 @@ qla2x00_start_ms_cmd(scsi_qla_host_t *ha
-           __func__, ha->host_no, ha->instance,
-           pkt->loop_id, usr_req_len, usr_resp_len);)
--      pkt->timeout = QLA_PT_CMD_TOV;
--      pkt->cmd_dsd_count = 1;
--      pkt->total_dsd_count = 2; /* no continuation */
--      pkt->rsp_bytecount = usr_resp_len;
--      pkt->req_bytecount = usr_req_len;
-+      pkt->timeout = cpu_to_le16(ql2xioctltimeout);
-+      pkt->cmd_dsd_count = __constant_cpu_to_le16(1);
-+      pkt->total_dsd_count = __constant_cpu_to_le16(2); /* no continuation */
-+      pkt->rsp_bytecount = cpu_to_le32(usr_resp_len);
-+      pkt->req_bytecount = cpu_to_le32(usr_req_len);
-       /* loading command payload address. user request is assumed
-        * to have been copied to ioctl_mem.
-        */
--      pkt->dseg_req_address[0] = LS_64BITS(ha->ioctl_mem_phys);
--      pkt->dseg_req_address[1] = MS_64BITS(ha->ioctl_mem_phys);
-+      pkt->dseg_req_address[0] = cpu_to_le32(LSD(ha->ioctl_mem_phys));
-+      pkt->dseg_req_address[1] = cpu_to_le32(MSD(ha->ioctl_mem_phys));
-       pkt->dseg_req_length = usr_req_len;
-       /* loading response payload address */
--      pkt->dseg_rsp_address[0] = LS_64BITS(ha->ioctl_mem_phys);
--      pkt->dseg_rsp_address[1] = MS_64BITS(ha->ioctl_mem_phys);
-+      pkt->dseg_rsp_address[0] = cpu_to_le32(LSD(ha->ioctl_mem_phys));
-+      pkt->dseg_rsp_address[1] = cpu_to_le32(MSD(ha->ioctl_mem_phys));
-       pkt->dseg_rsp_length = usr_resp_len;
-       /* set flag to indicate IOCTL MSIOCB cmd in progress */
-@@ -4099,16 +3824,6 @@ qla2x00_wwpn_to_scsiaddr(scsi_qla_host_t
-               return (ret);
-       }
--      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
--          pext->RequestLen);
--      if (ret) {
--              DEBUG9_10(printk(
--                  "%s(%ld): inst=%ld ERROR VERIFY_READ req buf\n",
--                  __func__, ha->host_no, ha->instance);)
--              pext->Status = EXT_STATUS_COPY_ERR;
--              return (ret);
--      }
--
-       ret = copy_from_user(tmp_wwpn, pext->RequestAdr, pext->RequestLen);
-       if (ret) {
-               DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy_from_user "
-@@ -4166,17 +3881,7 @@ qla2x00_wwpn_to_scsiaddr(scsi_qla_host_t
-       if (pext->ResponseLen > sizeof(EXT_SCSI_ADDR))
-               pext->ResponseLen = sizeof(EXT_SCSI_ADDR);
--      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
--          pext->ResponseLen);
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR VERIFY wrt rsp buf\n",
--                  __func__, ha->host_no, ha->instance);)
--              return (ret);
--      }
--
--      ret = copy_to_user((uint8_t *)pext->ResponseAdr, &tmp_addr,
--          pext->ResponseLen);
-+      ret = copy_to_user(pext->ResponseAdr, &tmp_addr, pext->ResponseLen);
-       if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-               DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
-@@ -4284,8 +3989,8 @@ qla2x00_ioctl_scsi_queuecommand(scsi_qla
-     Scsi_Cmnd *pscsi_cmd, Scsi_Device *pscsi_dev, fc_port_t *pfcport,
-     fc_lun_t *pfclun, uint8_t *pmore_cdb)
- {
--      int             ret = 0;
--      int             ret2 = 0;
-+      int             ret = QL_STATUS_SUCCESS;
-+      int             ret2 = QL_STATUS_SUCCESS;
-       uint8_t         *usr_temp, *kernel_tmp;
-       uint32_t        lun = 0, tgt = 0;
- #if defined(QL_DEBUG_LEVEL_9)
-@@ -4305,7 +4010,7 @@ qla2x00_ioctl_scsi_queuecommand(scsi_qla
-                   __func__, ha->host_no, ha->instance);)
-               pext->Status = EXT_STATUS_NO_MEMORY;
--              return (ret);
-+              return (QL_STATUS_ERROR);
-       }
-       switch(pext->SubCode) {
-@@ -4326,7 +4031,7 @@ qla2x00_ioctl_scsi_queuecommand(scsi_qla
-                           __func__, ha->host_no, ha->instance, pfcport, pfclun);)
-                       atomic_set(&sp->ref_count, 0);
-                       add_to_free_queue (ha, sp);
--                      return (ret);
-+                      return (QL_STATUS_ERROR);
-               }
-               if (pscsi_cmd->cmd_len == 6 || pscsi_cmd->cmd_len == 0x0A ||
-@@ -4341,7 +4046,7 @@ qla2x00_ioctl_scsi_queuecommand(scsi_qla
-                       pext->Status = EXT_STATUS_INVALID_PARAM;
-                       atomic_set(&sp->ref_count, 0);
-                       add_to_free_queue (ha, sp);
--                      return (ret);
-+                      return (QL_STATUS_ERROR);
-               }
-               tq = ha->ioctl->ioctl_tq;
-               lq = ha->ioctl->ioctl_lq;
-@@ -4355,7 +4060,7 @@ qla2x00_ioctl_scsi_queuecommand(scsi_qla
-                           __func__, ha->host_no, ha->instance, pfcport, pfclun);)
-                       atomic_set(&sp->ref_count, 0);
-                       add_to_free_queue (ha, sp);
--                      return (ret);
-+                      return (QL_STATUS_ERROR);
-               }
-               sp->cmd_length = pscsi_cmd->cmd_len;
-@@ -4386,19 +4091,6 @@ qla2x00_ioctl_scsi_queuecommand(scsi_qla
-       if (pscsi_cmd->sc_data_direction == SCSI_DATA_WRITE) {
-               /* sending user data from pext->ResponseAdr to device */
--              ret = verify_area(VERIFY_READ, (void *)pext->ResponseAdr,
--                  pext->ResponseLen);
--              if (ret) {
--                      pext->Status = EXT_STATUS_COPY_ERR;
--                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify read "
--                          "ResponseAdr.\n",
--                          __func__, ha->host_no, ha->instance);)
--                      atomic_set(&sp->ref_count, 0);
--                      add_to_free_queue (ha, sp);
--
--                      return (ret);
--              }
--
-               usr_temp   = (uint8_t *)pext->ResponseAdr;
-               kernel_tmp = (uint8_t *)ha->ioctl_mem;
-               ret = copy_from_user(kernel_tmp, usr_temp, pext->ResponseLen);
-@@ -4425,7 +4117,8 @@ qla2x00_ioctl_scsi_queuecommand(scsi_qla
-       pscsi_cmd->use_sg               = 0; /* no ScatterGather */
-       pscsi_cmd->request_bufflen      = pext->ResponseLen;
-       pscsi_cmd->request_buffer       = ha->ioctl_mem;
--      pscsi_cmd->timeout_per_command  = QLA_PT_CMD_TOV * HZ;
-+      if (pscsi_cmd->timeout_per_command == 0)
-+              pscsi_cmd->timeout_per_command = ql2xioctltimeout * HZ;
-       if (tq && lq) {
-               if (pext->SubCode == EXT_SC_SEND_SCSI_PASSTHRU) {
-@@ -4440,7 +4133,7 @@ qla2x00_ioctl_scsi_queuecommand(scsi_qla
-                                   pfcport, pfclun);)
-                               atomic_set(&sp->ref_count, 0);
-                               add_to_free_queue (ha, sp);
--                              return (ret);
-+                              return (QL_STATUS_ERROR);
-                       }
-               } else {
-@@ -4488,7 +4181,7 @@ qla2x00_ioctl_scsi_queuecommand(scsi_qla
-                       pext->Status = EXT_STATUS_DEV_NOT_FOUND;
-                       atomic_set(&sp->ref_count, 0);
-                       add_to_free_queue (ha, sp);
--                      return (ret);
-+                      return (QL_STATUS_ERROR);
-               }
-       } else {
-               ret2 = qla2x00_check_port_status(ha, pfcport);
-@@ -4503,7 +4196,7 @@ qla2x00_ioctl_scsi_queuecommand(scsi_qla
-                       atomic_set(&sp->ref_count, 0);
-                       add_to_free_queue (ha, sp);
--                      return (ret);
-+                      return (QL_STATUS_ERROR);
-               }
-       }
-@@ -4519,6 +4212,13 @@ qla2x00_ioctl_scsi_queuecommand(scsi_qla
-       DEBUG9(printk("%s(%ld): inst=%ld sending command.\n",
-           __func__, ha->host_no, ha->instance);)
-+      /* Time the command via our standard driver-timer */
-+      if ((CMD_TIMEOUT(pscsi_cmd)/HZ) > QLA_CMD_TIMER_DELTA)
-+              qla2x00_add_timer_to_cmd(sp,
-+                      (CMD_TIMEOUT(pscsi_cmd)/HZ) - QLA_CMD_TIMER_DELTA);
-+      else
-+              qla2x00_add_timer_to_cmd(sp, (CMD_TIMEOUT(pscsi_cmd)/HZ));
-+
-       add_to_pending_queue(ha, sp);
-       qla2x00_next(ha);
-@@ -4560,13 +4260,14 @@ qla2x00_sc_scsi_passthru(scsi_qla_host_t
-       DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
-           __func__, ha->host_no, ha->instance);)
--      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
--          sizeof(EXT_SCSI_PASSTHRU));
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify READ "
--                  "req buf.\n",
-+      if (test_bit(FAILOVER_EVENT_NEEDED, &ha->dpc_flags) ||
-+          test_bit(FAILOVER_EVENT, &ha->dpc_flags) ||
-+          test_bit(FAILOVER_NEEDED, &ha->dpc_flags)) {
-+              /* Stall intrusive passthru commands until failover complete */
-+              DEBUG9_10(printk("%s(%ld): inst=%ld failover in progress -- "
-+                  "returning busy.\n",
-                   __func__, ha->host_no, ha->instance);)
-+              pext->Status = EXT_STATUS_BUSY;
-               return (ret);
-       }
-@@ -4658,21 +4359,17 @@ qla2x00_sc_scsi_passthru(scsi_qla_host_t
-       DEBUG9(printk("%s(%ld): inst=%ld sending command.\n",
-           __func__, ha->host_no, ha->instance);)
--      if ((ret = qla2x00_ioctl_scsi_queuecommand(ha, pext, pscsi_cmd,
--          pscsi_device, NULL, NULL, NULL))) {
-+      if (qla2x00_ioctl_scsi_queuecommand(ha, pext, pscsi_cmd,
-+          pscsi_device, NULL, NULL, NULL)) {
-               return (ret);
-       }
--      ha->ioctl->cmpl_timer.expires = jiffies + ha->ioctl->ioctl_tov * HZ;
--      add_timer(&ha->ioctl->cmpl_timer);
--
-       DEBUG9(printk("%s(%ld): inst=%ld waiting for completion.\n",
-           __func__, ha->host_no, ha->instance);)
-+      /* Wait for completion */
-       down(&ha->ioctl->cmpl_sem);
--      del_timer(&ha->ioctl->cmpl_timer);
--
-       DEBUG9(printk("%s(%ld): inst=%ld completed.\n",
-           __func__, ha->host_no, ha->instance);)
-@@ -4763,15 +4460,6 @@ qla2x00_sc_scsi_passthru(scsi_qla_host_t
-                   (uint8_t *)&pscsi_pass->SenseData[0],
-                   CMD_ACTUAL_SNSLEN(pscsi_cmd));)
--              ret = verify_area(VERIFY_WRITE, (void *)pext->RequestAdr,
--                  sizeof(EXT_SCSI_PASSTHRU));
--              if (ret) {
--                      pext->Status = EXT_STATUS_COPY_ERR;
--                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify WRITE "
--                          "req buf.\n", __func__, ha->host_no, ha->instance);)
--                      return (ret);
--              }
--
-               usr_temp   = (uint8_t *)pext->RequestAdr;
-               kernel_tmp = (uint8_t *)pscsi_pass;
-               ret = copy_to_user(usr_temp, kernel_tmp,
-@@ -4789,17 +4477,6 @@ qla2x00_sc_scsi_passthru(scsi_qla_host_t
-               DEBUG9(printk("%s(%ld): inst=%ld copying data.\n",
-                   __func__, ha->host_no, ha->instance);)
--              /* getting device data and putting in pext->ResponseAdr */
--              ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
--                  pext->ResponseLen);
--              if (ret) {
--                      pext->Status = EXT_STATUS_COPY_ERR;
--                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify write "
--                          "ResponseAdr.\n",
--                          __func__, ha->host_no, ha->instance);)
--                      return (ret);
--              }
--
-               /* now copy up the READ data to user */
-               if ((CMD_COMPL_STATUS(pscsi_cmd) == CS_DATA_UNDERRUN) &&
-                   (CMD_RESID_LEN(pscsi_cmd))) {
-@@ -4864,6 +4541,7 @@ qla2x00_sc_fc_scsi_passthru(scsi_qla_hos
-       uint32_t                i;
-       uint32_t                transfer_len;
-+      int found_fcp, found_fcl;
-       EXT_FC_SCSI_PASSTHRU    *pfc_scsi_pass;
-@@ -4879,6 +4557,17 @@ qla2x00_sc_fc_scsi_passthru(scsi_qla_hos
-               }
-       )
-+      if (test_bit(FAILOVER_EVENT_NEEDED, &ha->dpc_flags) ||
-+          test_bit(FAILOVER_EVENT, &ha->dpc_flags) ||
-+          test_bit(FAILOVER_NEEDED, &ha->dpc_flags)) {
-+              /* Stall intrusive passthru commands until failover complete */
-+              DEBUG9_10(printk("%s(%ld): inst=%ld failover in progress -- "
-+                  "returning busy.\n",
-+                  __func__, ha->host_no, ha->instance);)
-+              pext->Status = EXT_STATUS_BUSY;
-+              return (ret);
-+      }
-+
-       if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pfc_scsi_pass,
-           sizeof(EXT_FC_SCSI_PASSTHRU))) {
-               /* not enough memory */
-@@ -4893,17 +4582,6 @@ qla2x00_sc_fc_scsi_passthru(scsi_qla_hos
-       /* clear ioctl_mem to be used */
-       memset(ha->ioctl_mem, 0, ha->ioctl_mem_size);
--      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
--          sizeof(EXT_FC_SCSI_PASSTHRU));
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk(
--                  "%s(%ld): inst=%ld ERROR verify READ req buf.\n",
--                  __func__, ha->host_no, ha->instance);)
--
--              return (ret);
--      }
--
-       if (pext->ResponseLen > ha->ioctl_mem_size) {
-               if (qla2x00_get_new_ioctl_dma_mem(ha, pext->ResponseLen) !=
-                   QL_STATUS_SUCCESS) {
-@@ -4940,23 +4618,27 @@ qla2x00_sc_fc_scsi_passthru(scsi_qla_hos
-       }
-       fclun = NULL;
--      for (fcport = ha->fcport; (fcport); fcport = fcport->next) {
-+      found_fcp = 0;
-+      found_fcl = 0;
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-               if (memcmp(fcport->port_name,
-                   pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN, 8) != 0) {
-                       continue;
-               }
--              for (fclun = fcport->fclun; fclun; fclun = fclun->next) {
-+              found_fcp++;
-+              list_for_each_entry(fclun, &fcport->fcluns, list) {
-                       if (fclun->lun == pfc_scsi_pass->FCScsiAddr.Lun) {
-                               /* Found the right LUN */
-+                              found_fcl++;
-                               break;
-                       }
-               }
-               break;
-       }
--      if (fcport == NULL) {
-+      if (!found_fcp) {
-               pext->Status = EXT_STATUS_DEV_NOT_FOUND;
-               DEBUG9_10(printk("%s(%ld): inst=%ld FC AddrFormat - DID NOT "
-                   "FIND Port matching WWPN.\n",
-@@ -4964,13 +4646,12 @@ qla2x00_sc_fc_scsi_passthru(scsi_qla_hos
-               return (ret);
-       }
--      if (fclun == NULL) {
-+      if (!found_fcl) {
-               /* Use a temporary fclun to send out the command. */
-               fclun = &temp_fclun;
-               fclun->fcport = fcport;
-               fclun->lun = pfc_scsi_pass->FCScsiAddr.Lun;
-               fclun->flags = 0;
--              fclun->next = NULL;
-       }
-       /* set target coordinates */
-@@ -5038,19 +4719,17 @@ qla2x00_sc_fc_scsi_passthru(scsi_qla_hos
-       DEBUG9(printk("%s(%ld): inst=%ld queuing command.\n",
-           __func__, ha->host_no, ha->instance);)
--      if ((ret = qla2x00_ioctl_scsi_queuecommand(ha, pext, pfc_scsi_cmd,
--          pfc_scsi_device, fcport, fclun, pmore_cdb))) {
-+      if (qla2x00_ioctl_scsi_queuecommand(ha, pext, pfc_scsi_cmd,
-+          pfc_scsi_device, fcport, fclun, pmore_cdb)) {
-               return (ret);
-       }
--      /* Wait for comletion */
--      ha->ioctl->cmpl_timer.expires = jiffies + ha->ioctl->ioctl_tov * HZ;
--      add_timer(&ha->ioctl->cmpl_timer);
-+      DEBUG9(printk("%s(%ld): inst=%ld waiting for completion.\n",
-+          __func__, ha->host_no, ha->instance);)
-+      /* Wait for completion */
-       down(&ha->ioctl->cmpl_sem);
--      del_timer(&ha->ioctl->cmpl_timer);
--
-       if (ha->ioctl->SCSIPT_InProgress == 1) {
-               printk(KERN_WARNING
-@@ -5127,16 +4806,6 @@ qla2x00_sc_fc_scsi_passthru(scsi_qla_hos
-                       pfc_scsi_cmd->sense_buffer[i];
-               }
--              ret = verify_area(VERIFY_WRITE, (void *)pext->RequestAdr,
--                  sizeof(EXT_FC_SCSI_PASSTHRU));
--              if (ret) {
--                      pext->Status = EXT_STATUS_COPY_ERR;
--                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify WRITE "
--                          "RequestAdr.\n",
--                          __func__, ha->host_no, ha->instance);)
--                      return (ret);
--              }
--
-               usr_temp = (uint8_t *)pext->RequestAdr;
-               kernel_tmp = (uint8_t *)pfc_scsi_pass;
-               ret = copy_to_user(usr_temp, kernel_tmp,
-@@ -5155,19 +4824,6 @@ qla2x00_sc_fc_scsi_passthru(scsi_qla_hos
-               DEBUG9(printk("%s(%ld): inst=%ld copying data.\n",
-                   __func__, ha->host_no, ha->instance);)
--              /* getting device data and putting in pext->ResponseAdr */
--              ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
--                  pext->ResponseLen);
--              if (ret) {
--                      pext->Status = EXT_STATUS_COPY_ERR;
--
--                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify write "
--                          "ResponseAdr.\n",
--                          __func__, ha->host_no, ha->instance);)
--
--                      return (ret);
--              }
--
-               /* now copy up the READ data to user */
-               if ((CMD_COMPL_STATUS(pfc_scsi_cmd) == CS_DATA_UNDERRUN) &&
-                   (CMD_RESID_LEN(pfc_scsi_cmd))) {
-@@ -5229,6 +4885,7 @@ qla2x00_sc_scsi3_passthru(scsi_qla_host_
-       uint8_t                 *pmore_cdb = NULL;
-       uint32_t                transfer_len;
-       uint32_t                i;
-+      int found;
-       EXT_FC_SCSI_PASSTHRU    *pscsi3_pass;
-@@ -5245,6 +4902,17 @@ qla2x00_sc_scsi3_passthru(scsi_qla_host_
-               }
-       )
-+      if (test_bit(FAILOVER_EVENT_NEEDED, &ha->dpc_flags) ||
-+          test_bit(FAILOVER_EVENT, &ha->dpc_flags) ||
-+          test_bit(FAILOVER_NEEDED, &ha->dpc_flags)) {
-+              /* Stall intrusive passthru commands until failover complete */
-+              DEBUG9_10(printk("%s(%ld): inst=%ld failover in progress -- "
-+                  "returning busy.\n",
-+                  __func__, ha->host_no, ha->instance);)
-+              pext->Status = EXT_STATUS_BUSY;
-+              return (ret);
-+      }
-+
-       if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi3_pass,
-           sizeof(EXT_FC_SCSI_PASSTHRU))) {
-               /* not enough memory */
-@@ -5260,15 +4928,6 @@ qla2x00_sc_scsi3_passthru(scsi_qla_host_
-       /* clear ioctl_mem to be used */
-       memset(ha->ioctl_mem, 0, ha->ioctl_mem_size);
--      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
--          sizeof(EXT_FC_SCSI_PASSTHRU));
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify READ "
--                  "req buf.\n", __func__, ha->host_no, ha->instance);)
--              return (ret);
--      }
--
-       if (pext->ResponseLen > ha->ioctl_mem_size) {
-               if (qla2x00_get_new_ioctl_dma_mem(ha, pext->ResponseLen) !=
-                   QL_STATUS_SUCCESS) {
-@@ -5317,13 +4976,15 @@ qla2x00_sc_scsi3_passthru(scsi_qla_host_
-               return (ret);
-       }
--      for (fcport = ha->fcport; (fcport); fcport = fcport->next) {
-+      found = 0;
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-               if (memcmp(fcport->port_name,
-                   pscsi3_pass->FCScsiAddr.DestAddr.WWPN, 8) == 0) {
-+                      found++;
-                       break;
-               }
-       }
--      if (fcport == NULL) {
-+      if (!found) {
-               pext->Status = EXT_STATUS_DEV_NOT_FOUND;
-               DEBUG9_10(printk("%s(%ld): inst=%ld DID NOT FIND Port for WWPN "
-@@ -5346,7 +5007,6 @@ qla2x00_sc_scsi3_passthru(scsi_qla_host_
-       fclun->fcport = fcport;
-       fclun->lun = pscsi3_pass->FCScsiAddr.Lun;
-       fclun->flags = 0;
--      fclun->next = NULL;
-       /* set target coordinates */
-       pscsi3_cmd->target = 0xff;  /* not used. just put something there. */
-@@ -5390,24 +5050,21 @@ qla2x00_sc_scsi3_passthru(scsi_qla_host_
-       } else {
-               pscsi3_cmd->sc_data_direction = SCSI_DATA_READ;
-       }
-+      if (pscsi3_pass->Timeout)
-+              pscsi3_cmd->timeout_per_command = pscsi3_pass->Timeout * HZ;
-       /* send command to adapter */
-       DEBUG9(printk("%s(%ld): inst=%ld queuing command.\n",
-           __func__, ha->host_no, ha->instance);)
--      if ((ret = qla2x00_ioctl_scsi_queuecommand(ha, pext, pscsi3_cmd,
--          pscsi3_device, fcport, fclun, pmore_cdb))) {
-+      if (qla2x00_ioctl_scsi_queuecommand(ha, pext, pscsi3_cmd,
-+          pscsi3_device, fcport, fclun, pmore_cdb)) {
-               return (ret);
-       }
--      /* Wait for comletion */
--      ha->ioctl->cmpl_timer.expires = jiffies + ha->ioctl->ioctl_tov * HZ;
--      add_timer(&ha->ioctl->cmpl_timer);
--
-+      /* Wait for completion */
-       down(&ha->ioctl->cmpl_sem);
--      del_timer(&ha->ioctl->cmpl_timer);
--
-       if (ha->ioctl->SCSIPT_InProgress == 1) {
-               printk(KERN_WARNING
-@@ -5488,16 +5145,6 @@ qla2x00_sc_scsi3_passthru(scsi_qla_host_
-                           pscsi3_cmd->sense_buffer[i];
-               }
--              ret = verify_area(VERIFY_WRITE, (void *)pext->RequestAdr,
--                  sizeof(EXT_FC_SCSI_PASSTHRU));
--              if (ret) {
--                      pext->Status = EXT_STATUS_COPY_ERR;
--                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify WRITE "
--                          "RequestAdr.\n",
--                          __func__, ha->host_no, ha->instance);)
--                      return (ret);
--              }
--
-               usr_temp = (uint8_t *)pext->RequestAdr;
-               kernel_tmp = (uint8_t *)pscsi3_pass;
-               ret = copy_to_user(usr_temp, kernel_tmp,
-@@ -5516,19 +5163,6 @@ qla2x00_sc_scsi3_passthru(scsi_qla_host_
-               DEBUG9(printk("%s(%ld): inst=%ld copying data.\n",
-                   __func__, ha->host_no, ha->instance);)
--              /* getting device data and putting in pext->ResponseAdr */
--              ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
--                  pext->ResponseLen);
--              if (ret) {
--                      pext->Status = EXT_STATUS_COPY_ERR;
--
--                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify write "
--                          "ResponseAdr.\n",
--                          __func__, ha->host_no, ha->instance);)
--
--                      return (ret);
--              }
--
-               /* now copy up the READ data to user */
-               if ((CMD_COMPL_STATUS(pscsi3_cmd) == CS_DATA_UNDERRUN) &&
-                   (CMD_RESID_LEN(pscsi3_cmd))) {
-@@ -5587,14 +5221,11 @@ qla2x00_send_els_rnid(scsi_qla_host_t *h
-       EXT_RNID_REQ    *tmp_rnid;
-       int             ret = 0;
--      uint8_t         dev_found = 0;
--      uint16_t        dev_loop_id = 0;
-       uint16_t        mb[MAILBOX_REGISTER_COUNT];
-       uint32_t        copy_len;
--      fc_port_t       *fcport;
-       int             found;
--      struct list_head *fcil;
--      fc_initiator_t  *fcinitiator;
-+      uint16_t        next_loop_id;
-+      fc_port_t       *fcport;
-       DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
-           __func__, ha->host_no, ha->instance);)
-@@ -5621,17 +5252,6 @@ qla2x00_send_els_rnid(scsi_qla_host_t *h
-               return (ret);
-       }
--      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
--          pext->RequestLen);
--
--      if (ret != 0) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk(
--                  "%s(%ld): inst=%ld req buf verify READ FAILED\n",
--                  __func__, ha->host_no, ha->instance);)
--              return (ret);
--      }
--
-       DEBUG9(printk("%s(%ld): inst=%ld req buf verified. Copying req data.\n",
-           __func__, ha->host_no, ha->instance);)
-@@ -5657,159 +5277,80 @@ qla2x00_send_els_rnid(scsi_qla_host_t *h
-       }
-       /* Find loop ID of the device */
--      fcinitiator = NULL;
-+      found = 0;
-+      fcport = NULL;
-       switch (tmp_rnid->Addr.Type) {
-       case EXT_DEF_TYPE_WWNN:
-               DEBUG9(printk("%s(%ld): inst=%ld got node name.\n",
-                   __func__, ha->host_no, ha->instance);)
--              for (fcport = ha->fcport; (fcport); fcport = fcport->next) {
--                      /* if removed or missing */
--                      if (atomic_read(&fcport->state) == FC_ONLINE &&
--                          memcmp((void *)tmp_rnid->Addr.FcAddr.WWNN,
--                          (void *)fcport->node_name,
--                          EXT_DEF_WWN_NAME_SIZE) == 0) {
--                              break;
--                      }
--              }
--              if (fcport != NULL) {
--                      DEBUG9(printk("%s(%ld): inst=%ld found tgt dev; "
--                          "loop_id=%x.\n",
--                          __func__, ha->host_no, ha->instance,
--                          fcport->loop_id);)
--
--                      dev_found = TGT_DEV;
--                      dev_loop_id = fcport->loop_id;
--                      break;
--              }
--
--              found = 0;
--              fcinitiator = NULL;
--              list_for_each(fcil, &ha->fcinitiators) {
--                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-+                      if (fcport->port_type != FCT_INITIATOR ||
-+                          fcport->port_type != FCT_TARGET)
-+                              continue;
-                       if (memcmp(tmp_rnid->Addr.FcAddr.WWNN,
--                               fcinitiator->node_name,
--                               EXT_DEF_WWN_NAME_SIZE) == 0 &&
--                              fcinitiator->d_id.b24 != 0) {
-+                          fcport->node_name, EXT_DEF_WWN_NAME_SIZE))
-+                              continue;
--                              found++;
--                              break;
-+                      if (fcport->port_type == FCT_TARGET) {
-+                              if (atomic_read(&fcport->state) != FC_ONLINE)
-+                                      continue;
-+                      } else { /* FCT_INITIATOR */
-+                              if (!fcport->d_id.b24)
-+                                      continue;
-                       }
--              }
--              if (found) {
--                      DEBUG9(printk("%s(%ld): inst=%ld found host device; "
--                          "loop_id=%x.\n",
--                          __func__, ha->host_no, ha->instance,
--                          fcinitiator->loop_id);)
--                      dev_found = HOST_DEV;
--                      dev_loop_id = fcinitiator->loop_id;
--                      break;
-+                      found++;
-               }
--
-               break;
--
-       case EXT_DEF_TYPE_WWPN:
-               DEBUG9(printk("%s(%ld): inst=%ld got port name.\n",
-                   __func__, ha->host_no, ha->instance);)
--              for (fcport = ha->fcport; (fcport); fcport = fcport->next) {
--                      /* if removed or missing */
--                      if (atomic_read(&fcport->state) == FC_ONLINE &&
--                          memcmp((void *)tmp_rnid->Addr.FcAddr.WWPN,
--                          (void *)fcport->port_name,
--                          EXT_DEF_WWN_NAME_SIZE) == 0) {
--                              break;
--                      }
--              }
--              if (fcport != NULL) {
--                      DEBUG9(printk("%s(%ld): inst=%ld found tgt dev; "
--                          "loop_id=%x.\n",
--                          __func__, ha->host_no, ha->instance,
--                          fcport->loop_id);)
--
--                      dev_found = TGT_DEV; /* target device */
--                      dev_loop_id = fcport->loop_id;
--                      break;
--              }
--
--              found = 0;
--              fcinitiator = NULL;
--              list_for_each(fcil, &ha->fcinitiators) {
--                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-+                      if (fcport->port_type != FCT_INITIATOR ||
-+                          fcport->port_type != FCT_TARGET)
-+                              continue;
-                       if (memcmp(tmp_rnid->Addr.FcAddr.WWPN,
--                               fcinitiator->port_name,
--                               EXT_DEF_WWN_NAME_SIZE) == 0 &&
--                              fcinitiator->d_id.b24 != 0) {
-+                          fcport->port_name, EXT_DEF_WWN_NAME_SIZE))
-+                              continue;
--                              found++;
--                              break;
-+                      if (fcport->port_type == FCT_TARGET) {
-+                              if (atomic_read(&fcport->state) != FC_ONLINE)
-+                                      continue;
-+                      } else { /* FCT_INITIATOR */
-+                              if (!fcport->d_id.b24)
-+                                      continue;
-                       }
--              }
--              if (found) {
--                      DEBUG9(printk("%s(%ld): inst=%ld found host device; "
--                          "loop_id=%x.\n",
--                          __func__, ha->host_no, ha->instance,
--                          fcinitiator->loop_id);)
--                      dev_found = HOST_DEV;
--                      dev_loop_id = fcinitiator->loop_id;
--                      break;
-+                      found++;
-               }
--
-               break;
-       case EXT_DEF_TYPE_PORTID:
-               DEBUG9(printk("%s(%ld): inst=%ld got port ID.\n",
-                   __func__, ha->host_no, ha->instance);)
--              /* PORTID bytes entered must already be big endian */
--              for (fcport = ha->fcport; (fcport); fcport = fcport->next) {
--                      /* if removed or missing */
--                      if (atomic_read(&fcport->state) == FC_ONLINE &&
--                          memcmp((void *)&tmp_rnid->Addr.FcAddr.Id[1],
--                          (void *)(fcport->d_id.r.d_id),
--                          EXT_DEF_PORTID_SIZE_ACTUAL) == 0) {
--                              break;
--                      }
--              }
--              if (fcport != NULL) {
--                      DEBUG9(printk("%s(%ld): inst=%ld found tgt dev; "
--                          "loop_id=%x.\n",
--                          __func__, ha->host_no, ha->instance,
--                          fcport->loop_id);)
--
--                      dev_found = TGT_DEV; /* target device */
--                      dev_loop_id = fcport->loop_id;
--                      break;
--              }
--
--              found = 0;
--              fcinitiator = NULL;
--              list_for_each(fcil, &ha->fcinitiators) {
--                      fcinitiator = list_entry(fcil, fc_initiator_t, list);
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-+                      if (fcport->port_type != FCT_INITIATOR ||
-+                          fcport->port_type != FCT_TARGET)
-+                              continue;
-+                      /* PORTID bytes entered must already be big endian */
-                       if (memcmp(&tmp_rnid->Addr.FcAddr.Id[1],
--                              &fcinitiator->d_id,
--                              EXT_DEF_PORTID_SIZE_ACTUAL) == 0) {
-+                          &fcport->d_id, EXT_DEF_PORTID_SIZE_ACTUAL))
-+                              continue;
--                              found++;
--                              break;
-+                      if (fcport->port_type == FCT_TARGET) {
-+                              if (atomic_read(&fcport->state) != FC_ONLINE)
-+                                      continue;
-                       }
--              }
--              if (found) {
--                      DEBUG9(printk("%s(%ld): inst=%ld found host device; "
--                          "loop_id=%x.\n",
--                          __func__, ha->host_no, ha->instance,
--                          fcinitiator->loop_id);)
--                      dev_found = HOST_DEV;
--                      dev_loop_id = fcinitiator->loop_id;
--                      break;
-+                      found++;
-               }
-               break;
-@@ -5822,23 +5363,18 @@ qla2x00_send_els_rnid(scsi_qla_host_t *h
-               return (ret);
-       }
--      if (!dev_found ||
--          (dev_found == TGT_DEV && dev_loop_id > LAST_SNS_LOOP_ID)) {
-+      if (!found || (fcport->port_type == FCT_TARGET &&
-+          fcport->loop_id > SNS_LAST_LOOP_ID)) {
-               /* No matching device or the target device is not
-                * configured; just return error.
-                */
-               pext->Status = EXT_STATUS_DEV_NOT_FOUND;
--              DEBUG9_10(printk(
--                  "%s(%ld): inst=%ld device not found. dev_found=%d "
--                  "dev_loop_id=%x.\n",
--                  __func__, ha->host_no, ha->instance, dev_found,
--                  dev_loop_id);)
-               qla2x00_free_ioctl_scrap_mem(ha);
-               return (ret);
-       }
-       /* check on loop down */
--      if (ha->loop_state != LOOP_READY || 
-+      if (atomic_read(&ha->loop_state) != LOOP_READY || 
-           test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
-           (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
-           ABORTS_ACTIVE || ha->dpc_active) {
-@@ -5851,109 +5387,21 @@ qla2x00_send_els_rnid(scsi_qla_host_t *h
-               return (ret);
-       }
--      /* Check whether we need to login first. */
--      if (dev_found == HOST_DEV && dev_loop_id > LAST_SNS_LOOP_ID) {
--              /*
--               * Search for a usable loop ID before try to login to it.
--               */
--              if ((dev_loop_id &= ~PORT_LOST_ID) > LAST_SNS_LOOP_ID) {
--                      /* Just start searching from first possible ID. */
--                      dev_loop_id = ha->min_external_loopid;
--              }
--              for (;;) {
--                      if (ha->fabricid[dev_loop_id].in_use == TRUE) {
--                              dev_loop_id++;
--                      } else {
--                              ha->fabricid[dev_loop_id].in_use = TRUE;
--                              break;
--                      }
--              }
--
--              DEBUG9(printk("%s(%ld): inst=%ld try relogin to host dev; "
--                  "dev_loop_id=%x.\n",
--                  __func__, ha->host_no, ha->instance, dev_loop_id);)
--
--              for (;;) {
--                      if (dev_loop_id > LAST_SNS_LOOP_ID) {
--                              /* error */
--                              DEBUG10(printk("%s(%ld): inst=%ld "
--                                  "no valid loop_id for login.\n",
--                                  __func__, ha->host_no, ha->instance);)
--
--                              break;
--                      }
--
--                      qla2x00_login_fabric(ha, 
--                          dev_loop_id,
--                          fcinitiator->d_id.b.domain,
--                          fcinitiator->d_id.b.area,
--                          fcinitiator->d_id.b.al_pa,
--                          &mb[0], 0);
--
--                      if (mb[0] != MBS_CMD_CMP &&
--                          mb[0] != MBS_PORT_ID_IN_USE &&
--                          mb[0] != MBS_LOOP_ID_IN_USE) {
--
--                              DEBUG10(printk("%s(%ld): inst=%ld "
--                                  "ERROR login mb[0]=%x mb[1]=%x.\n",
--                                  __func__, ha->host_no, ha->instance,
--                                  mb[0], mb[1]);)
--                              break;
--                      }
--
--                      if (mb[0] == MBS_CMD_CMP) {
--                              DEBUG9(printk("%s(%ld): inst=%ld host login "
--                                  "success; loop_id=%x.\n",
--                                  __func__, ha->host_no, ha->instance,
--                                  dev_loop_id);)
--
--                              fcinitiator->loop_id = dev_loop_id;
--                              break;
--                      } else if (mb[0] == MBS_PORT_ID_IN_USE) {
--                              ha->fabricid[dev_loop_id].in_use = FALSE;
--                              dev_loop_id = mb[1];
--
--                              DEBUG9(printk("%s(%ld): inst=%ld port %06x "
--                                  "using loop id=0x%04x.\n",
--                                  __func__, ha->host_no, ha->instance,
--                                  fcinitiator->d_id.b24,
--                                  dev_loop_id);)
--
--                              if (dev_loop_id <= LAST_SNS_LOOP_ID)
--                                      ha->fabricid[dev_loop_id].in_use = TRUE;
--                              else
--                                      /* Error */
--                                      break;
--
--                      } else if (mb[0] == MBS_LOOP_ID_IN_USE) {
--                              /* Search for another usable loop_id */
--                              dev_loop_id++;
--                              while (ha->fabricid[dev_loop_id].in_use) {
--                                      if (dev_loop_id++ > LAST_SNS_LOOP_ID) {
--                                              /* Error */
--                                              break;
--                                      }
--                              }
--
--                              if (dev_loop_id <= LAST_SNS_LOOP_ID) {
--                                      DEBUG9(printk(
--                                          "%s(%ld): inst=%ld previous loop "
--                                          "id in use. Retry with 0x%04x.\n",
--                                          __func__, ha->host_no, ha->instance,
--                                          dev_loop_id);)
--
--                                      ha->fabricid[dev_loop_id].in_use = TRUE;
--                              } else {
--                                      /* Error */
--                                      break;
--                              }
--                      }
--              }
-+      /* If this is for a host device, check if we need to perform login */
-+      if (fcport->port_type == FCT_INITIATOR &&
-+          fcport->loop_id >= SNS_LAST_LOOP_ID) {
-+              next_loop_id = 0;
-+              ret = qla2x00_fabric_login(ha, fcport, &next_loop_id);
-+              if (ret != QL_STATUS_SUCCESS) {
-+                      /* login failed. */
-+                      pext->Status = EXT_STATUS_DEV_NOT_FOUND;
--              if (mb[0] != MBS_CMD_CMP) {
--                      pext->Status = EXT_STATUS_ERR;
--                      DEBUG9_10(printk( "%s(%ld): inst=%ld login failed.\n",
--                          __func__, ha->host_no, ha->instance);)
-+                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR login to "
-+                          "host port failed. loop_id=%02x pid=%02x%02x%02x "
-+                          "ret=%d.\n",
-+                          __func__, ha->host_no, ha->instance,
-+                          fcport->loop_id, fcport->d_id.b.domain,
-+                          fcport->d_id.b.area, fcport->d_id.b.al_pa, ret);)
-                       qla2x00_free_ioctl_scrap_mem(ha);
-                       return (ret);
-@@ -5964,7 +5412,7 @@ qla2x00_send_els_rnid(scsi_qla_host_t *h
-       DEBUG9(printk("%s(%ld): inst=%ld sending rnid cmd.\n",
-           __func__, ha->host_no, ha->instance);)
--      ret = qla2x00_send_rnid_mbx(ha, dev_loop_id,
-+      ret = qla2x00_send_rnid_mbx(ha, fcport->loop_id,
-           (uint8_t)tmp_rnid->DataFormat, ha->ioctl_mem_phys,
-           SEND_RNID_RSP_SIZE, &mb[0]);
-@@ -5985,38 +5433,27 @@ qla2x00_send_els_rnid(scsi_qla_host_t *h
-       copy_len = (pext->ResponseLen > SEND_RNID_RSP_SIZE) ?
-           SEND_RNID_RSP_SIZE : pext->ResponseLen;
--      ret = verify_area(VERIFY_WRITE, (void  *)pext->ResponseAdr,
--          copy_len);
--
--      if (ret != 0) {
-+      ret = copy_to_user(pext->ResponseAdr, ha->ioctl_mem, copy_len);
-+      if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-               DEBUG9_10(printk(
--                  "%s(%ld): inst=%ld rsp buf verify WRITE error\n",
-+                  "%s(%ld): inst=%ld ERROR copy rsp buf\n",
-                   __func__, ha->host_no, ha->instance);)
--      } else {
--              ret = copy_to_user((uint8_t *)pext->ResponseAdr,
--                  (uint8_t *)ha->ioctl_mem, copy_len);
--              if (ret) {
--                      pext->Status = EXT_STATUS_COPY_ERR;
--                      DEBUG9_10(printk(
--                          "%s(%ld): inst=%ld ERROR copy rsp buf\n",
--                          __func__, ha->host_no, ha->instance);)
--                      qla2x00_free_ioctl_scrap_mem(ha);
--                      return (ret);
--              }
-+              qla2x00_free_ioctl_scrap_mem(ha);
-+              return (ret);
-+      }
--              if (SEND_RNID_RSP_SIZE > pext->ResponseLen) {
--                      pext->Status = EXT_STATUS_DATA_OVERRUN;
--                      DEBUG9(printk("%s(%ld): inst=%ld data overrun. "
--                          "exiting normally.\n",
--                          __func__, ha->host_no, ha->instance);)
--              } else {
--                      pext->Status = EXT_STATUS_OK;
--                      DEBUG9(printk("%s(%ld): inst=%ld exiting normally.\n",
--                          __func__, ha->host_no, ha->instance);)
--              }
--              pext->ResponseLen = copy_len;
-+      if (SEND_RNID_RSP_SIZE > pext->ResponseLen) {
-+              pext->Status = EXT_STATUS_DATA_OVERRUN;
-+              DEBUG9(printk("%s(%ld): inst=%ld data overrun. exiting "
-+                  "normally.\n",
-+                  __func__, ha->host_no, ha->instance);)
-+      } else {
-+              pext->Status = EXT_STATUS_OK;
-+              DEBUG9(printk("%s(%ld): inst=%ld exiting normally.\n",
-+                  __func__, ha->host_no, ha->instance);)
-       }
-+      pext->ResponseLen = copy_len;
-       qla2x00_free_ioctl_scrap_mem(ha);
-       return (ret);
-@@ -6050,7 +5487,7 @@ qla2x00_get_rnid_params(scsi_qla_host_t 
-           __func__, ha->host_no, ha->instance);)
-       /* check on loop down */
--      if (ha->loop_state != LOOP_READY || 
-+      if (atomic_read(&ha->loop_state) != LOOP_READY || 
-           test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
-           (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
-           ABORTS_ACTIVE || ha->dpc_active) {
-@@ -6078,39 +5515,30 @@ qla2x00_get_rnid_params(scsi_qla_host_t 
-       /* Copy the response */
-       copy_len = (pext->ResponseLen > sizeof(EXT_RNID_DATA)) ?
-           (uint32_t)sizeof(EXT_RNID_DATA) : pext->ResponseLen;
--      ret = verify_area(VERIFY_WRITE, (void  *)pext->ResponseAdr,
--          copy_len);
--      if (ret != 0) {
-+      ret = copy_to_user(pext->ResponseAdr, ha->ioctl_mem, copy_len);
-+      if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld verify WRITE rsp buf error\n",
-+              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buf\n",
-                   __func__, ha->host_no, ha->instance);)
--      } else {
--              ret = copy_to_user((void *)pext->ResponseAdr,
--                  (void *)ha->ioctl_mem, copy_len);
--              if (ret) {
--                      pext->Status = EXT_STATUS_COPY_ERR;
--                      DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buf\n",
--                          __func__, ha->host_no, ha->instance);)
--                      return (ret);
--              }
-+              return (ret);
-+      }
--              pext->ResponseLen = copy_len;
--              if (copy_len < sizeof(EXT_RNID_DATA)) {
--                      pext->Status = EXT_STATUS_DATA_OVERRUN;
--                      DEBUG9_10(printk("%s(%ld): inst=%ld data overrun. "
--                          "exiting normally.\n",
--                          __func__, ha->host_no, ha->instance);)
--              } else if (pext->ResponseLen > sizeof(EXT_RNID_DATA)) {
--                      pext->Status = EXT_STATUS_DATA_UNDERRUN;
--                      DEBUG9_10(printk("%s(%ld): inst=%ld data underrun. "
--                          "exiting normally.\n",
--                          __func__, ha->host_no, ha->instance);)
--              } else {
--                      pext->Status = EXT_STATUS_OK;
--                      DEBUG9(printk("%s(%ld): inst=%ld exiting normally.\n",
--                          __func__, ha->host_no, ha->instance);)
--              }
-+      pext->ResponseLen = copy_len;
-+      if (copy_len < sizeof(EXT_RNID_DATA)) {
-+              pext->Status = EXT_STATUS_DATA_OVERRUN;
-+              DEBUG9_10(printk("%s(%ld): inst=%ld data overrun. "
-+                  "exiting normally.\n",
-+                  __func__, ha->host_no, ha->instance);)
-+      } else if (pext->ResponseLen > sizeof(EXT_RNID_DATA)) {
-+              pext->Status = EXT_STATUS_DATA_UNDERRUN;
-+              DEBUG9_10(printk("%s(%ld): inst=%ld data underrun. "
-+                  "exiting normally.\n",
-+                  __func__, ha->host_no, ha->instance);)
-+      } else {
-+              pext->Status = EXT_STATUS_OK;
-+              DEBUG9(printk("%s(%ld): inst=%ld exiting normally.\n",
-+                  __func__, ha->host_no, ha->instance);)
-       }
-       return (ret);
-@@ -6142,17 +5570,6 @@ qla2x00_get_led_state(scsi_qla_host_t *h
-       DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
-           __func__, ha->host_no, ha->instance);)
--      ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
--          sizeof(EXT_BEACON_CONTROL));
--
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR VERIFY_WRITE "
--                  "EXT_HBA_PORT_STAT.\n",
--                  __func__, ha->host_no, ha->instance);)
--              return (ret);
--      }
--
-       if (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) {
-                pext->Status = EXT_STATUS_BUSY;
-                DEBUG9_10(printk("%s(%ld): inst=%ld loop not ready.\n",
-@@ -6262,7 +5679,7 @@ qla2x00_set_rnid_params(scsi_qla_host_t 
-           __func__, ha->host_no, ha->instance);)
-       /* check on loop down */
--      if (ha->loop_state != LOOP_READY || 
-+      if (atomic_read(&ha->loop_state) != LOOP_READY || 
-           test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
-           (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
-           ABORTS_ACTIVE || ha->dpc_active) {
-@@ -6283,16 +5700,6 @@ qla2x00_set_rnid_params(scsi_qla_host_t 
-               return(ret);
-       }
--      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
--          pext->RequestLen);
--
--      if (ret != 0) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld verify READ request buf.\n",
--                  __func__, ha->host_no, ha->instance);)
--              return(ret);
--      }
--
-       if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&tmp_set,
-           sizeof(EXT_SET_RNID_REQ))) {
-               /* not enough memory */
-@@ -6379,17 +5786,6 @@ qla2x00_set_led_state(scsi_qla_host_t *h
-       DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
-           __func__, ha->host_no, ha->instance);)
--      ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
--          sizeof(EXT_BEACON_CONTROL));
--
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s(%ld): inst=%ld ERROR VERIFY_WRITE "
--                  "EXT_HBA_PORT_STAT.\n",
--                  __func__, ha->host_no, ha->instance);)
--              return (ret);
--      }
--
-       if (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) {
-               pext->Status = EXT_STATUS_BUSY;
-               DEBUG9_10(printk("%s(%ld): inst=%ld abort isp active.\n",
-@@ -6397,8 +5793,8 @@ qla2x00_set_led_state(scsi_qla_host_t *h
-               return (ret);
-       }
--      ret = copy_from_user(&ptmp_led_state, 
--          pext->RequestAdr, pext->RequestLen);
-+      ret = copy_from_user(&ptmp_led_state, pext->RequestAdr,
-+          pext->RequestLen);
-       if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-               DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy req buf.\n",
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_cfg.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_cfg.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_cfg.c    2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_cfg.c 2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -21,7 +21,6 @@
-  * QLogic ISP2x00 Multi-path LUN Support Driver
-  *
-  */
--
- #include "qlfo.h"
- #include "qla_cfg.h"
- #include "qla_gbl.h"
-@@ -32,12 +31,12 @@
- #include "qla_cfgln.c"
- #endif
--
-+extern int qla2x00_lun_reset(scsi_qla_host_t *ha, uint16_t loop_id, uint16_t lun);
- /*
-  *  Local Function Prototypes.
-  */
--static uint32_t qla2x00_add_portname_to_mp_dev(mp_device_t *, uint8_t *);
-+static uint32_t qla2x00_add_portname_to_mp_dev(mp_device_t *, uint8_t *, uint8_t *);
- static mp_device_t * qla2x00_allocate_mp_dev(uint8_t *, uint8_t *);
- static mp_path_t * qla2x00_allocate_path(mp_host_t *, uint16_t, fc_port_t *,
-@@ -57,16 +56,16 @@ static uint32_t qla2x00_cfg_register_fai
- static uint32_t qla2x00_send_failover_notify(mp_device_t *, uint8_t,
-     mp_path_t *, mp_path_t *);
- static mp_path_t * qla2x00_select_next_path(mp_host_t *, mp_device_t *,
--    uint8_t);
-+    uint8_t, srb_t *);
- static BOOL qla2x00_update_mp_host(mp_host_t  *);
- static uint32_t qla2x00_update_mp_tree (void);
--static fc_lun_t *qla2x00_find_matching_lun(uint8_t , mp_path_t *);
-+static fc_lun_t *qla2x00_find_matching_lun(uint8_t , mp_device_t *, mp_path_t *);
- static mp_path_t *qla2x00_find_path_by_id(mp_device_t *, uint8_t);
- static mp_device_t *qla2x00_find_mp_dev_by_id(mp_host_t *, uint8_t);
- static mp_device_t *qla2x00_find_mp_dev_by_nodename(mp_host_t *, uint8_t *);
--static mp_device_t *qla2x00_find_mp_dev_by_portname(mp_host_t *, uint8_t *,
-+mp_device_t *qla2x00_find_mp_dev_by_portname(mp_host_t *, uint8_t *,
-     uint16_t *);
- static mp_device_t *qla2x00_find_dp_by_pn_from_all_hosts(uint8_t *, uint16_t *);
-@@ -80,7 +79,36 @@ static void qla2x00_add_path(mp_path_lis
- static BOOL qla2x00_is_portname_in_device(mp_device_t *, uint8_t *);
- static void qla2x00_failback_single_lun(mp_device_t *, uint8_t, uint8_t);
- static void qla2x00_failback_luns(mp_host_t *);
--static void qla2x00_setup_new_path(mp_device_t *, mp_path_t *);
-+static void qla2x00_setup_new_path(mp_device_t *, mp_path_t *, fc_port_t *);
-+static int  qla2x00_get_wwuln_from_device(mp_host_t *, fc_lun_t *, char       *, int);
-+#if 0
-+static mp_device_t  * qla2x00_is_nn_and_pn_in_device(mp_device_t *, 
-+      uint8_t *, uint8_t *);
-+static mp_device_t  * qla2x00_find_mp_dev_by_nn_and_pn(mp_host_t *, uint8_t *, uint8_t *);
-+#endif
-+static mp_lun_t  * qla2x00_find_matching_lunid(char   *);
-+static fc_lun_t  * qla2x00_find_matching_lun_by_num(uint16_t , mp_device_t *,
-+      mp_path_t *);
-+static int qla2x00_configure_cfg_device(fc_port_t     *);
-+static mp_lun_t *
-+qla2x00_find_or_allocate_lun(mp_host_t *, uint16_t ,
-+    fc_port_t *, fc_lun_t *);
-+static void qla2x00_add_lun( mp_device_t *, mp_lun_t *);
-+#if 0
-+static BOOL qla2x00_is_nodename_in_device(mp_device_t *, uint8_t *);
-+#endif
-+static mp_port_t      *
-+qla2x00_find_or_allocate_port(mp_host_t *, mp_lun_t *, 
-+      mp_path_t *);
-+static mp_port_t      *
-+qla2x00_find_port_by_name(mp_lun_t *, mp_path_t *);
-+static struct _mp_path *
-+qla2x00_find_first_active_path(mp_device_t *, mp_lun_t *);
-+#if 0
-+static BOOL
-+qla2x00_is_pathid_in_port(mp_port_t *, uint8_t );
-+#endif
-+int qla2x00_export_target( void *, uint16_t , fc_port_t *, uint16_t ); 
- /*
-  * Global data items
-@@ -90,11 +118,66 @@ BOOL   mp_config_required = FALSE;
- static int    mp_num_hosts = 0;
- static BOOL   mp_initialized = FALSE;
--
- /*
-  * ENTRY ROUTINES
-  */
-+ /*
-+ *  Borrowed from scsi_scan.c 
-+ */
-+int16_t qla2x00_cfg_lookup_device(unsigned char *response_data)
-+{
-+      int i = 0;
-+      unsigned char *pnt;
-+      DEBUG3(printk(KERN_INFO "Entering %s\n", __func__);)
-+      for (i = 0; 1; i++) {
-+              if (cfg_device_list[i].vendor == NULL)
-+                      return -1;
-+              pnt = &response_data[8];
-+              while (*pnt && *pnt == ' ')
-+                      pnt++;
-+              if (memcmp(cfg_device_list[i].vendor, pnt,
-+                         strlen(cfg_device_list[i].vendor)))
-+                      continue;
-+              pnt = &response_data[16];
-+              while (*pnt && *pnt == ' ')
-+                      pnt++;
-+              if (memcmp(cfg_device_list[i].model, pnt,
-+                         strlen(cfg_device_list[i].model)))
-+                      continue;
-+              return i;
-+      }
-+      return -1;
-+}
-+
-+
-+static int qla2x00_configure_cfg_device(fc_port_t     *fcport)
-+{
-+      int             id = fcport->cfg_id;
-+
-+      DEBUG3(printk("Entering %s - id= %d\n", __func__, fcport->cfg_id);)
-+
-+      if( fcport->cfg_id == (int16_t) -1 )
-+              return 0;
-+
-+      /* Set any notify options */
-+      if( cfg_device_list[id].notify_type != FO_NOTIFY_TYPE_NONE ){
-+              fcport->notify_type = cfg_device_list[id].notify_type;
-+      }   
-+
-+      DEBUG3(printk("%s - Configuring device \n", __func__);) 
-+      /* Disable failover capability if needed  and return */
-+              
-+      fcport->fo_combine = cfg_device_list[id].fo_combine;
-+#if 0
-+      fcport->fo_detect = cfg_device_list[id].fo_detect;
-+      fcport->fo_notify = cfg_device_list[id].fo_notify;
-+      fcport->fo_select = cfg_device_list[id].fo_select;
-+#endif
-+      DEBUG3(printk("Exiting %s - id= %d\n", __func__, fcport->cfg_id); )
-+              return 1;
-+}
-+
- /*
-  * qla2x00_cfg_init
-  *      Initialize configuration structures to handle an instance of
-@@ -116,17 +199,16 @@ qla2x00_cfg_init(scsi_qla_host_t *ha)
-       ENTER("qla2x00_cfg_init");
-       set_bit(CFG_ACTIVE, &ha->cfg_flags);
--      if (!mp_initialized) {
--              /* First HBA, initialize the failover global properties */
--              qla2x00_fo_init_params(ha);
--
--              /* If the user specified a device configuration then
--               * it is use as the configuration. Otherwise, we wait
--               * for path discovery.
--               */
--              if ( mp_config_required )
--                      qla2x00_cfg_build_path_tree(ha);
--      }
-+      mp_initialized = TRUE; 
-+      /* First HBA, initialize the failover global properties */
-+      qla2x00_fo_init_params(ha);
-+
-+      /* If the user specified a device configuration then
-+       * it is use as the configuration. Otherwise, we wait
-+       * for path discovery.
-+       */
-+      if (mp_config_required)
-+              qla2x00_cfg_build_path_tree(ha);
-       rval = qla2x00_cfg_path_discovery(ha);
-       clear_bit(CFG_ACTIVE, &ha->cfg_flags);
-       LEAVE("qla2x00_cfg_init");
-@@ -191,10 +273,10 @@ qla2x00_cfg_path_discovery(scsi_qla_host
-       }
-       /* Fill in information about host */
--      if (host != NULL ) {
-+      if (host != NULL) {
-               host->flags |= MP_HOST_FLAG_NEEDS_UPDATE;
-               host->flags |= MP_HOST_FLAG_LUN_FO_ENABLED;
--              host->fcport = ha->fcport;
-+              host->fcports = &ha->fcports;
-               /* Check if multipath is enabled */
-               DEBUG3(printk("%s: updating mp host for ha inst %ld.\n",
-@@ -261,8 +343,10 @@ qla2x00_cfg_event_notify(scsi_qla_host_t
-                       /* Adapter is back up with new configuration */
-                       if ((host = qla2x00_cfg_find_host(ha)) != NULL) {
-                               host->flags |= MP_HOST_FLAG_NEEDS_UPDATE;
--                              host->fcport = ha->fcport;
-+                              host->fcports = &ha->fcports;
-+                              set_bit(CFG_FAILOVER, &ha->cfg_flags);
-                               qla2x00_update_mp_tree();
-+                              clear_bit(CFG_FAILOVER, &ha->cfg_flags);
-                       }
-                       break;
-               case MP_NOTIFY_LOOP_DOWN:
-@@ -282,6 +366,248 @@ qla2x00_cfg_event_notify(scsi_qla_host_t
-       return QLA2X00_SUCCESS;
- }
-+int qla2x00_cfg_remap(scsi_qla_host_t *halist)
-+{
-+      scsi_qla_host_t *ha;
-+
-+      DEBUG2(printk("Entering %s ...\n",__func__);)
-+      /* Find the host that was specified */
-+      mp_initialized = TRUE; 
-+      for (ha=halist; (ha != NULL); ha=ha->next) {
-+              set_bit(CFG_FAILOVER, &ha->cfg_flags);
-+              qla2x00_cfg_path_discovery(ha);
-+              clear_bit(CFG_FAILOVER, &ha->cfg_flags);
-+      }
-+      mp_initialized = FALSE; 
-+      DEBUG2(printk("Exiting %s ...\n",__func__);)
-+
-+      return QLA2X00_SUCCESS;
-+}
-+
-+/*
-+ *  qla2x00_allocate_mp_port
-+ *      Allocate an fc_mp_port, clear the memory, and log a system
-+ *      error if the allocation fails. After fc_mp_port is allocated
-+ *
-+ */
-+static mp_port_t *
-+qla2x00_allocate_mp_port(uint8_t *portname)
-+{
-+      mp_port_t   *port;
-+      int     i;
-+
-+      DEBUG3(printk("%s: entered.\n", __func__);)
-+
-+      port = (mp_port_t *)KMEM_ZALLOC(sizeof(mp_port_t), 3);
-+
-+      if (port != NULL) {
-+              DEBUG(printk("%s: mp_port_t allocated at %p\n",
-+                  __func__, port);)
-+
-+              /*
-+               * Since this is the first port, it goes at
-+               * index zero.
-+               */
-+              if (portname)
-+              {
-+                      DEBUG3(printk("%s: copying port name %02x%02x%02x"
-+                          "%02x%02x%02x%02x%02x.\n",
-+                          __func__, portname[0], portname[1],
-+                          portname[2], portname[3], portname[4],
-+                          portname[5], portname[6], portname[7]);)
-+                      memcpy(&port->portname[0], portname, PORT_NAME_SIZE);
-+              }
-+              for ( i = 0 ;i <  MAX_HOSTS; i++ ) {
-+                      port->path_list[i] = PATH_INDEX_INVALID;
-+              }
-+              port->fo_cnt = 0;
-+              
-+      }
-+
-+      DEBUG3(printk("%s: exiting.\n", __func__);)
-+
-+      return port;
-+}
-+
-+static mp_port_t      *
-+qla2x00_find_port_by_name(mp_lun_t *mplun, 
-+      mp_path_t *path)
-+{
-+      mp_port_t       *port = NULL;
-+      mp_port_t       *temp_port;
-+      struct list_head *list, *temp;
-+
-+      list_for_each_safe(list, temp, &mplun->ports_list) {
-+              temp_port = list_entry(list, mp_port_t, list);
-+              if ( memcmp(temp_port->portname, path->portname, WWN_SIZE) == 0 ) {
-+                      port = temp_port;
-+                      break;
-+              }
-+      }
-+      return port;
-+}
-+
-+
-+static mp_port_t      *
-+qla2x00_find_or_allocate_port(mp_host_t *host, mp_lun_t *mplun, 
-+      mp_path_t *path)
-+{
-+      mp_port_t       *port = NULL;
-+      struct list_head *list, *temp;
-+      unsigned long   instance = host->instance;
-+
-+      if( instance == MAX_HOSTS - 1) {
-+              printk(KERN_INFO "%s: Fail no room\n", __func__);
-+              return NULL;
-+      }
-+
-+      if ( mplun == NULL ) {
-+              return NULL;
-+      }
-+
-+      list_for_each_safe(list, temp, &mplun->ports_list) {
-+              port = list_entry(list, mp_port_t, list);
-+              if ( memcmp(port->portname, path->portname, WWN_SIZE) == 0 ) {
-+                      if ( port->path_list[instance] == PATH_INDEX_INVALID ) {
-+                         DEBUG(printk("scsi%ld %s: Found matching mp port %02x%02x%02x"
-+                          "%02x%02x%02x%02x%02x.\n",
-+                          instance, __func__, port->portname[0], port->portname[1],
-+                          port->portname[2], port->portname[3], 
-+                          port->portname[4], port->portname[5], 
-+                          port->portname[6], port->portname[7]);)
-+                              port->path_list[instance] = path->id;
-+                              port->hba_list[instance] = host->ha;
-+                              port->cnt++;
-+                              DEBUG(printk("%s: adding portname - port[%d] = "
-+                          "%p at index = %d with path id %d\n",
-+                          __func__, (int)instance ,port, 
-+                              (int)instance, path->id);)
-+                      }
-+                      return port;
-+              }
-+      }
-+      port = qla2x00_allocate_mp_port(path->portname);
-+      if( port ) {
-+              port->cnt++;
-+              DEBUG(printk("%s: allocate and adding portname - port[%d] = "
-+                          "%p at index = %d with path id %d\n",
-+                          __func__, (int)instance, port, 
-+                              (int)instance, path->id);)
-+              port->path_list[instance] = path->id;
-+              port->hba_list[instance] = host->ha;
-+              /* add port to list */
-+              list_add_tail(&port->list,&mplun->ports_list );
-+      }
-+      return port;
-+}
-+
-+
-+/*
-+ * qla2x00_cfg_failover_port
-+ *      Failover all the luns on the specified target to 
-+ *            the new path.
-+ *
-+ * Inputs:
-+ *      ha = pointer to host adapter
-+ *      fp - pointer to new fc_lun (failover lun)
-+ *      tgt - pointer to target
-+ *
-+ * Returns:
-+ *      
-+ */
-+static fc_lun_t *
-+qla2x00_cfg_failover_port( mp_host_t *host, mp_device_t *dp,
-+      mp_path_t *new_path, fc_port_t *old_fcport, srb_t *sp)
-+{
-+      uint8_t         l;
-+      fc_port_t       *fcport;
-+      fc_lun_t        *fclun;
-+      fc_lun_t        *new_fclun = NULL;
-+      os_lun_t         *up;
-+      mp_path_t       *vis_path;
-+      mp_host_t       *vis_host;
-+
-+      fcport = new_path->port;
-+      if( !qla2x00_test_active_port(fcport) )  {
-+              DEBUG2(printk("%s(%ld): %s - port not ACTIVE "
-+              "to failover: port = %p, loop id= 0x%x\n",
-+              __func__,
-+              host->ha->host_no, __func__, fcport, fcport->loop_id);)
-+              return new_fclun;
-+      }
-+
-+      /* Log the failover to console */
-+      printk(KERN_INFO
-+              "qla2x00%d: FAILOVER all LUNS on device %d to WWPN "
-+              "%02x%02x%02x%02x%02x%02x%02x%02x -> "
-+              "%02x%02x%02x%02x%02x%02x%02x%02x, reason=0x%x\n",
-+              (int) host->instance,
-+              (int) dp->dev_id,
-+              old_fcport->port_name[0], old_fcport->port_name[1],
-+              old_fcport->port_name[2], old_fcport->port_name[3],
-+              old_fcport->port_name[4], old_fcport->port_name[5],
-+              old_fcport->port_name[6], old_fcport->port_name[7],
-+              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], sp->err_id );
-+               printk(KERN_INFO
-+              "qla2x00: FROM HBA %d to HBA %d\n",
-+              (int)old_fcport->ha->instance,
-+              (int)fcport->ha->instance);
-+
-+      /* we failover all the luns on this port */
-+      list_for_each_entry(fclun, &fcport->fcluns, list) {
-+              l = fclun->lun;
-+              if( (fclun->flags & FC_VISIBLE_LUN) ) {  
-+                      continue;
-+              }
-+              dp->path_list->current_path[l] = new_path->id;
-+              if ((vis_path =
-+                  qla2x00_get_visible_path(dp)) == NULL ) {
-+                      printk(KERN_INFO
-+                  "qla2x00(%d): No visible "
-+                          "path for target %d, "
-+                          "dp = %p\n",
-+                          (int)host->instance,
-+                  dp->dev_id, dp);
-+                  continue;
-+              }
-+
-+              vis_host = vis_path->host;
-+              up = (os_lun_t *) GET_LU_Q(vis_host->ha, 
-+                  dp->dev_id, l);
-+              if (up == NULL ) {
-+              DEBUG2(printk("%s: instance %d: No lun queue"
-+                  "for target %d, lun %d.. \n",
-+                      __func__,(int)vis_host->instance,dp->dev_id,l);)
-+                      continue;
-+              }
-+
-+              up->fclun = fclun;
-+              fclun->fcport->cur_path = new_path->id;
-+
-+              DEBUG2(printk("%s: instance %d: Mapping target %d:0x%x,"
-+                  "lun %d to path id %d\n",
-+                      __func__,(int)vis_host->instance,dp->dev_id,
-+                      fclun->fcport->loop_id, l,
-+                  fclun->fcport->cur_path);)
-+
-+                      /* issue reset to data luns only */
-+                      if( fclun->inq0 == 0 ) {
-+                              new_fclun = fclun;
-+                              /* send a reset lun command as well */
-+                      printk(KERN_INFO 
-+                          "scsi(%ld:0x%x:%d) sending reset lun \n",
-+                                      fcport->ha->host_no,
-+                                      fcport->loop_id, l);
-+                              qla2x00_lun_reset(fcport->ha,
-+                                      fcport->loop_id, l);
-+                      }
-+              }
-+      return new_fclun;
-+}
-+
- /*
-  * qla2x00_cfg_failover
-  *      A problem has been detected with the current path for this
-@@ -304,8 +630,11 @@ qla2x00_cfg_failover(scsi_qla_host_t *ha
-       mp_device_t     *dp;                    /* virtual device pointer */
-       mp_path_t       *new_path;              /* new path pointer */
-       fc_lun_t        *new_fp = NULL;
-+      fc_port_t       *fcport, *new_fcport;
-       ENTER("qla2x00_cfg_failover");
-+      DEBUG2(printk("%s entered\n",__func__);)
-+
-       set_bit(CFG_ACTIVE, &ha->cfg_flags);
-       if ((host = qla2x00_cfg_find_host(ha)) != NULL) {
-               if ((dp = qla2x00_find_mp_dev_by_nodename(
-@@ -318,21 +647,71 @@ qla2x00_cfg_failover(scsi_qla_host_t *ha
-                        * another I/O. If there is only one path continuer
-                        * to point at it.
-                        */
--                      new_path = qla2x00_select_next_path(host, dp, fp->lun);
--                      DEBUG3(printk("cfg_failover: new path @ %p\n",
--                                              new_path);)
--                      new_fp = qla2x00_find_matching_lun(fp->lun, new_path);
--                      DEBUG3(printk("cfg_failover: new fp lun @ %p\n",
--                                              new_fp);)
-+                      new_path = qla2x00_select_next_path(host, dp, 
-+                              fp->lun, sp);
-+                      if( new_path == NULL )
-+                              goto cfg_failover_done;
-+                      new_fp = qla2x00_find_matching_lun(fp->lun, 
-+                                      dp, new_path);
-+                      if( new_fp == NULL )
-+                              goto cfg_failover_done;
-+                      DEBUG2(printk("cfg_failover: new path=%p, new pathid=%d"
-+                                      " new fp lun= %p\n",
-+                              new_path, new_path->id, new_fp);)
-+
-+                      fcport = fp->fcport;
-+                      if( (fcport->flags & FC_MSA_DEVICE) ) {
-+                              /* 
-+                               * "select next path" has already 
-+                               * send out the switch path notify 
-+                               * command, so inactive old path 
-+                               */
-+                                      fcport->flags &= ~(FC_MSA_PORT_ACTIVE);
-+                              if( qla2x00_cfg_failover_port( host, dp, 
-+                                              new_path, fcport, sp) == NULL ) {
-+                                      printk(KERN_INFO
-+                                              "scsi(%ld): Fail to failover device "
-+                                              " - fcport = %p\n",
-+                                              host->ha->host_no, fcport);
-+                                      goto cfg_failover_done;
-+                              }
-+                      } else if( (fcport->flags & FC_EVA_DEVICE) ) { 
-+                              new_fcport = new_path->port;
-+                              if ( qla2x00_test_active_lun( 
-+                                      new_fcport, new_fp ) ) {
-+                                      qla2x00_cfg_register_failover_lun(dp, 
-+                                              sp, new_fp);
-+                                       /* send a reset lun command as well */
-+                                       printk(KERN_INFO 
-+                                       "scsi(%ld:0x%x:%d) sending"
-+                                       " reset lun \n",
-+                                       new_fcport->ha->host_no,
-+                                       new_fcport->loop_id, new_fp->lun);
-+                                       qla2x00_lun_reset(new_fcport->ha,
-+                                       new_fcport->loop_id, new_fp->lun);
-+                              } else {
-+                                      DEBUG2(printk(
-+                                              "scsi(%ld): %s Fail to failover lun "
-+                                              "old fclun= %p, new fclun= %p\n",
-+                                              host->ha->host_no,
-+                                               __func__,fp, new_fp);)
-+                                      goto cfg_failover_done;
-+                              }
-+                      } else { /*default */
-+                              new_fp = qla2x00_find_matching_lun(fp->lun, 
-+                                      dp, new_path);
-+                              qla2x00_cfg_register_failover_lun(dp, sp, new_fp);
-+                      }
--                      qla2x00_cfg_register_failover_lun(dp, sp, new_fp);
-               } else {
-                       printk(KERN_INFO
-                               "qla2x00(%d): Couldn't find device "
--                              "to failover\n",
--                              host->instance);
-+                              "to failover: dp = %p\n",
-+                              host->instance, dp);
-               }
-       }
-+
-+cfg_failover_done:
-       clear_bit(CFG_ACTIVE, &ha->cfg_flags);
-       LEAVE("qla2x00_cfg_failover");
-@@ -426,7 +805,8 @@ qla2x00_cfg_get_paths(EXT_IOCTL *cmd, FO
-               mp_path_list_t  *ptmp_plist;
- #define STD_MAX_PATH_CNT      1
- #define STD_VISIBLE_INDEX     0
--              fc_port_t               *pfcport = NULL;
-+              int found;
-+              fc_port_t               *fcport = NULL;
-               DEBUG9(printk("%s: non-fo case.\n", __func__);)
-@@ -443,16 +823,16 @@ qla2x00_cfg_get_paths(EXT_IOCTL *cmd, FO
-                       return -ENOMEM;
-               }
--              for (pfcport = ha->fcport; pfcport != NULL;
--                  pfcport = pfcport->next) {
--
--                      if (memcmp(pfcport->node_name, sap->DestAddr.WWNN,
-+              found = 0;
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-+                      if (memcmp(fcport->node_name, sap->DestAddr.WWNN,
-                           EXT_DEF_WWN_NAME_SIZE) == 0) {
-+                              found++;
-                               break;
-                       }
-               }
--              if (pfcport) {
-+              if (found) {
-                       DEBUG9(printk("%s: found fcport:"
-                           "(%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)\n.",
-                           __func__,
-@@ -475,18 +855,9 @@ qla2x00_cfg_get_paths(EXT_IOCTL *cmd, FO
-                       entry->Visible     = TRUE;
-                       entry->HbaInstance = bp->HbaInstance;
--                      memcpy(entry->PortName, pfcport->port_name,
-+                      memcpy(entry->PortName, fcport->port_name,
-                           EXT_DEF_WWP_NAME_SIZE);
--                      rval = verify_area(VERIFY_WRITE, (void *)u_paths,
--                          cmd->ResponseLen);
--                      if (rval) {
--                              /* error */
--                              DEBUG9_10(printk("%s: u_paths %p verify write"
--                                  " error. paths->PathCount=%d.\n",
--                                  __func__, u_paths, paths->PathCount);)
--                      }
--
-                       /* Copy data to user */
-                       if (rval == 0)
-                               rval = copy_to_user(&u_paths->PathCount,
-@@ -605,14 +976,6 @@ qla2x00_cfg_get_paths(EXT_IOCTL *cmd, FO
-               DEBUG9(printk("%s: path cnt=%d, visible path=%d.\n",
-                   __func__, path_list->path_cnt, path_list->visible);)
--              rval = verify_area(VERIFY_WRITE, (void *)u_paths,
--                  cmd->ResponseLen);
--              if (rval) {
--                      /* error */
--                      DEBUG9_10(printk("%s: u_paths %p verify write"
--                          " error. paths->PathCount=%d.\n",
--                          __func__, u_paths, paths->PathCount);)
--              }
-               DEBUG9(printk("%s: path cnt=%d, visible path=%d.\n",
-                   __func__, path_list->path_cnt, path_list->visible);)
-@@ -956,6 +1319,7 @@ qla2x00_alloc_host(scsi_qla_host_t *ha)
-  * Input:
-  *      dp = pointer ti virtual device
-  *      portname = Port name to add to device
-+ *      nodename = Node name to add to device
-  *
-  * Returns:
-  *      qla2x00 local function return status code.
-@@ -964,7 +1328,7 @@ qla2x00_alloc_host(scsi_qla_host_t *ha)
-  *      Kernel context.
-  */
- static uint32_t
--qla2x00_add_portname_to_mp_dev(mp_device_t *dp, uint8_t *portname)
-+qla2x00_add_portname_to_mp_dev(mp_device_t *dp, uint8_t *portname, uint8_t *nodename)
- {
-       uint8_t         index;
-       uint32_t        rval = QLA2X00_SUCCESS;
-@@ -1029,7 +1393,7 @@ qla2x00_allocate_mp_dev(uint8_t  *nodena
-                */
-               if (nodename)
-               {
--                      DEBUG3(printk("%s: copying node name %02x%02x%02x"
-+                      DEBUG(printk("%s: copying node name %02x%02x%02x"
-                           "%02x%02x%02x%02x%02x.\n",
-                           __func__, nodename[0], nodename[1],
-                           nodename[2], nodename[3], nodename[4],
-@@ -1305,137 +1669,1135 @@ qla2x00_found_hidden_path(mp_device_t *d
- }
- /*
-- * qla2x00_default_bind_mpdev
-+ * qla2x00_get_wwuln_from_device
-+ *    Issue SCSI inquiry page code 0x83 command for LUN WWLUN_NAME.
-  *
-  * Input:
-- *    host = mp_host of current adapter
-- *    port = fc_port of current port
-+ *    ha = adapter block pointer.
-+ *    fcport = FC port structure pointer.
-  *
-- * Returns:
-- *    mp_device pointer 
-- *    NULL - not found.
-+ * Return:
-+ *    0  - Failed to get the lun_wwlun_name
-+ *      Otherwise : wwlun_size
-  *
-  * Context:
-  *    Kernel context.
-  */
--static inline mp_device_t *
--qla2x00_default_bind_mpdev(mp_host_t *host, fc_port_t *port)
-+
-+static int
-+qla2x00_get_wwuln_from_device(mp_host_t *host, fc_lun_t *fclun, 
-+      char    *evpd_buf, int wwlun_size)
- {
--      /* Default search case */
--      int             devid = 0;
--      mp_device_t     *temp_dp = NULL;  /* temporary pointer */
--      mp_host_t       *temp_host;  /* temporary pointer */
--      DEBUG3(printk("%s: entered.\n", __func__);)
-+      evpd_inq_cmd_rsp_t      *pkt;
-+      int             rval = 0 ; 
-+      dma_addr_t      phys_address = 0;
-+      int             retry;
-+      uint16_t        comp_status;
-+      uint16_t        scsi_status;
-+      scsi_qla_host_t *ha;
-+      uint16_t        next_loopid;
--      for (temp_host = mp_hosts_base; (temp_host);
--          temp_host = temp_host->next) {
--              for (devid = 0; devid < MAX_MP_DEVICES; devid++) {
--                      temp_dp = temp_host->mp_devs[devid];
-+      ENTER(__func__);
-+      //printk("%s entered\n",__func__);
--                      if (temp_dp == NULL)
--                              continue;
--                      if (qla2x00_is_nodename_equal(temp_dp->nodename,
--                          port->node_name)) {
--                              DEBUG3(printk(
--                                  "%s: Found matching dp @ host %p id %d:\n",
--                                  __func__, temp_host, devid);)
-+      if (atomic_read(&fclun->fcport->state) == FC_DEVICE_DEAD){
-+              DEBUG(printk("%s leaving: Port is marked DEAD\n",__func__);)
-+              return rval;
-+      }
-+
-+      memset(evpd_buf, 0 ,wwlun_size);
-+      ha = host->ha;
-+      pkt = pci_alloc_consistent(ha->pdev,
-+          sizeof(evpd_inq_cmd_rsp_t), &phys_address);
-+
-+      if (pkt == NULL) {
-+              printk(KERN_WARNING
-+                  "scsi(%ld): Memory Allocation failed - INQ\n",
-+                  ha->host_no);
-+              ha->mem_err++;
-+              return rval;
-+      }
-+
-+      retry = 2;
-+      do {
-+              memset(pkt, 0, sizeof(evpd_inq_cmd_rsp_t));
-+              pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
-+              pkt->p.cmd.entry_count = 1;
-+              pkt->p.cmd.lun = cpu_to_le16(fclun->lun);
-+#if defined(EXTENDED_IDS)
-+              pkt->p.cmd.target = cpu_to_le16(fclun->fcport->loop_id);
-+#else
-+              pkt->p.cmd.target = (uint8_t)fclun->fcport->loop_id;
-+#endif
-+              pkt->p.cmd.control_flags =
-+                  __constant_cpu_to_le16(CF_READ | CF_SIMPLE_TAG);
-+              pkt->p.cmd.scsi_cdb[0] = INQ_SCSI_OPCODE;
-+              pkt->p.cmd.scsi_cdb[1] = INQ_EVPD_SET;
-+              pkt->p.cmd.scsi_cdb[2] = INQ_DEV_IDEN_PAGE; 
-+              pkt->p.cmd.scsi_cdb[4] = VITAL_PRODUCT_DATA_SIZE;
-+              pkt->p.cmd.dseg_count = __constant_cpu_to_le16(1);
-+              pkt->p.cmd.timeout = __constant_cpu_to_le16(10);
-+              pkt->p.cmd.byte_count =
-+                  __constant_cpu_to_le32(VITAL_PRODUCT_DATA_SIZE);
-+              pkt->p.cmd.dseg_0_address[0] = cpu_to_le32(
-+                  LSD(phys_address + sizeof(sts_entry_t)));
-+              pkt->p.cmd.dseg_0_address[1] = cpu_to_le32(
-+                  MSD(phys_address + sizeof(sts_entry_t)));
-+              pkt->p.cmd.dseg_0_length =
-+                  __constant_cpu_to_le32(VITAL_PRODUCT_DATA_SIZE);
-+
-+
-+              rval = qla2x00_issue_iocb(ha, pkt,
-+                          phys_address, sizeof(evpd_inq_cmd_rsp_t));
-+
-+              comp_status = le16_to_cpu(pkt->p.rsp.comp_status);
-+              scsi_status = le16_to_cpu(pkt->p.rsp.scsi_status);
-+
-+              DEBUG5(printk("%s: lun (%d) inquiry page 0x83- "
-+                  " comp status 0x%x, "
-+                  "scsi status 0x%x, rval=%d\n",__func__,
-+                  fclun->lun, comp_status, scsi_status, rval);)
-+
-+              /* if port not logged in then try and login */
-+              if (fclun->lun == 0 && comp_status == CS_PORT_LOGGED_OUT &&
-+                  atomic_read(&fclun->fcport->state) != FC_DEVICE_DEAD) {
-+                      if (fclun->fcport->flags & FC_FABRIC_DEVICE) {
-+                              /* login and update database */
-+                              next_loopid = 0;
-+                              qla2x00_fabric_login(ha, fclun->fcport,
-+                                  &next_loopid);
-+                      } else {
-+                              /* Loop device gone but no LIP... */
-+                              rval = QL_STATUS_ERROR;
-                               break;
-                       }
-               }
--              if (temp_dp != NULL) {
--                      /* found a match. */
--                      break;
-+      } while ((rval != QLA2X00_SUCCESS ||
-+          comp_status != CS_COMPLETE) && 
-+              retry--);
-+
-+      if (rval == QLA2X00_SUCCESS &&
-+          pkt->inq[1] == INQ_DEV_IDEN_PAGE ) {
-+
-+              if( pkt->inq[7] <= WWLUN_SIZE ){
-+                      memcpy(evpd_buf,&pkt->inq[8], pkt->inq[7]);
-+                      DEBUG(printk("%s : Lun(%d)  WWLUN size %d\n",__func__,
-+                          fclun->lun,pkt->inq[7]);)
-+              } else {
-+                      memcpy(evpd_buf,&pkt->inq[8], WWLUN_SIZE);
-+                      printk(KERN_INFO "%s : Lun(%d)  WWLUN may "
-+                          "not be complete, Buffer too small" 
-+                          " need: %d provided: %d\n",__func__,
-+                          fclun->lun,pkt->inq[7],WWLUN_SIZE);
-               }
--      }
-+              rval = pkt->inq[7] ; /* lun wwlun_size */
-+              DEBUG3(qla2x00_dump_buffer(evpd_buf, rval);)
--      if (temp_dp) {
--              DEBUG3(printk("%s(%ld): update mpdev "
--                  "on Matching node at dp %p. "
--                  "dev_id %d adding new port %p-%02x"
--                  "%02x%02x%02x%02x%02x%02x%02x\n",
--                  __func__, host->ha->host_no,
--                  temp_dp, devid, port,
--                  port->port_name[0], port->port_name[1],
--                  port->port_name[2], port->port_name[3],
--                  port->port_name[4], port->port_name[5],
--                  port->port_name[6], port->port_name[7]);)
-+      } else {
-+              if (scsi_status & SS_CHECK_CONDITION) {
-+                      /*
-+                       * ILLEGAL REQUEST - 0x05
-+                       * INVALID FIELD IN CDB - 24 : 00
-+                       */
-+                      if(pkt->p.rsp.req_sense_data[2] == 0x05 && 
-+                          pkt->p.rsp.req_sense_data[12] == 0x24 &&
-+                          pkt->p.rsp.req_sense_data[13] == 0x00 ) {
-+
-+                              DEBUG(printk(KERN_INFO "%s Lun(%d) does not"
-+                                  " support Inquiry Page Code-0x83\n",                                        
-+                                  __func__,fclun->lun);)
-+                      } else {
-+                              DEBUG(printk(KERN_INFO "%s Lun(%d) does not"
-+                                  " support Inquiry Page Code-0x83\n",        
-+                                  __func__,fclun->lun);)
-+                              DEBUG(printk( KERN_INFO "Unhandled check " 
-+                                  "condition sense_data[2]=0x%x"              
-+                                  " sense_data[12]=0x%x "
-+                                  "sense_data[13]=0x%x\n",
-+                                  pkt->p.rsp.req_sense_data[2],
-+                                  pkt->p.rsp.req_sense_data[12],
-+                                  pkt->p.rsp.req_sense_data[13]);)
-+                      }
--              qla2x00_add_portname_to_mp_dev(temp_dp,
--                  port->port_name);
-+              } else {
-+                      /* Unable to issue Inquiry Page 0x83 */
-+                      DEBUG2(printk(KERN_INFO
-+                          "%s Failed to issue Inquiry Page 0x83 -- lun (%d) "
-+                          "cs=0x%x ss=0x%x, rval=%d\n",
-+                          __func__, fclun->lun, comp_status, scsi_status,
-+                          rval);)
-+              }
-+              rval = 0 ;
-+      }
--              /*
--               * Set the flag that we have
--               * found the device.
--               */
--              host->mp_devs[devid] = temp_dp;
--              temp_dp->use_cnt++;
-+      pci_free_consistent(ha->pdev, sizeof(evpd_inq_cmd_rsp_t), 
-+                              pkt, phys_address);
--              /* Fixme(dg)
--               * Copy the LUN info into
--               * the mp_device_t
--               */
--      }
-+      //printk("%s exit\n",__func__);
-+      LEAVE(__func__);
--      return (temp_dp);
-+      return rval;
- }
- /*
-- *  qla2x00_find_or_allocate_mp_dev
-- *      Look through the existing multipath control tree, and find
-- *      an mp_device_t with the supplied world-wide node name.  If
-- *      one cannot be found, allocate one.
-- *
-- *  Input:
-- *      host      Adapter to add device to.
-- *      dev_id    Index of device on adapter.
-- *      port      port database information.
-+ * qla2x00_find_matching_lunid
-+ *      Find the lun in the lun list that matches the
-+ *  specified wwu lun number.
-  *
-- *  Returns:
-- *      Pointer to new mp_device_t, or NULL if the allocation fails.
-+ * Input:
-+ *      buf  = buffer that contains the wwuln
-+ *      host = host to search for lun
-  *
-- *  Side Effects:
-- *      If the MP HOST does not already point to the mp_device_t,
-- *      a pointer is added at the proper port offset.
-+ * Returns:
-+ *      NULL or pointer to lun
-  *
-  * Context:
-  *      Kernel context.
-+ * (dg)
-  */
--static mp_device_t *
--qla2x00_find_or_allocate_mp_dev(mp_host_t *host, uint16_t dev_id,
--    fc_port_t *port)
-+static mp_lun_t  *
-+qla2x00_find_matching_lunid(char      *buf)
- {
--      mp_device_t     *dp = NULL;  /* pointer to multi-path device   */
--      BOOL            node_found;  /* Found matching node name. */
--      BOOL            port_found;  /* Found matching port name. */
--      BOOL            names_valid; /* Node name and port name are not zero */ 
--      mp_host_t       *temp_host;  /* pointer to temporary host */
-+      int             devid = 0;
-+      mp_host_t       *temp_host;  /* temporary pointer */
-+      mp_device_t     *temp_dp;  /* temporary pointer */
-+      mp_lun_t *lun;
--      uint16_t        j;
--      mp_device_t     *temp_dp;
-+      //printk("%s: entered.\n", __func__);
--      ENTER("qla2x00_find_or_allocate_mp_dev");
-+      for (temp_host = mp_hosts_base; (temp_host);
-+          temp_host = temp_host->next) {
-+              for (devid = 0; devid < MAX_MP_DEVICES; devid++) {
-+                      temp_dp = temp_host->mp_devs[devid];
--      DEBUG3(printk("%s(%ld): entered. host=%p, port =%p, dev_id = %d\n",
--          __func__, host->ha->host_no, host, port, dev_id);)
-+                      if (temp_dp == NULL)
-+                              continue;
--      temp_dp = qla2x00_find_mp_dev_by_id(host,dev_id);
-+                      for( lun = temp_dp->luns; lun != NULL ; 
-+                                      lun = lun->next ) {
--      DEBUG3(printk("%s: temp dp =%p\n", __func__, temp_dp);)
--      /* if Device already known at this port. */
--      if (temp_dp != NULL) {
--              node_found = qla2x00_is_nodename_equal(temp_dp->nodename,
--                  port->node_name);
--              port_found = qla2x00_is_portname_in_device(temp_dp,
--                  port->port_name);
-+                              if (lun->siz > WWULN_SIZE )
-+                                      lun->siz = WWULN_SIZE;
--              if (node_found && port_found) {
--                      DEBUG3(printk("%s: mp dev %02x%02x%02x%02x%02x%02x"
--                          "%02x%02x exists on %p. dev id %d. path cnt=%d.\n",
--                          __func__,
--                          port->port_name[0], port->port_name[1],
--                          port->port_name[2], port->port_name[3],
-+                              if (memcmp(lun->wwuln, buf, lun->siz) == 0)
-+                                      return lun;
-+                      }
-+              }
-+      }
-+      return NULL;
-+
-+}
-+
-+#if 0
-+/*
-+ * qla2x00_find_mp_dev_by_nn_and_pn
-+ *      Find the mp_dev for the specified target name.
-+ *
-+ * Input:
-+ *      host = host adapter pointer.
-+ *      name  = Target name
-+ *
-+ * Returns:
-+ *
-+ * Context:
-+ *      Kernel context.
-+ */
-+static mp_device_t  *
-+qla2x00_find_mp_dev_by_nn_and_pn(mp_host_t *host, 
-+      uint8_t *portname, uint8_t *nodename)
-+{
-+      int id;
-+      int idx;
-+      mp_device_t *dp;
-+
-+      for (id= 0; id < MAX_MP_DEVICES; id++) {
-+              if ((dp = host->mp_devs[id] ) == NULL)
-+                      continue;
-+
-+              for (idx = 0; idx < MAX_PATHS_PER_DEVICE; idx++) {
-+                      if (memcmp(&dp->nodenames[idx][0], nodename, WWN_SIZE) == 0 && 
-+                              memcmp(&dp->portnames[idx][0], portname, WWN_SIZE) == 0 ) {
-+                                      DEBUG3(printk("%s: Found matching device @ index %d:\n",
-+                                      __func__, id);)
-+                                      return dp;
-+                      }
-+              }
-+      }
-+
-+      return NULL;
-+}
-+
-+/*
-+ * qla2x00_is_nn_and_pn_in_device
-+ *      Find the mp_dev for the specified target name.
-+ *
-+ * Input:
-+ *      host = host adapter pointer.
-+ *      name  = Target name
-+ *
-+ * Returns:
-+ *
-+ * Context:
-+ *      Kernel context.
-+ */
-+static mp_device_t  *
-+qla2x00_is_nn_and_pn_in_device(mp_device_t *dp, 
-+      uint8_t *portname, uint8_t *nodename)
-+{
-+      int idx;
-+
-+      for (idx = 0; idx < MAX_PATHS_PER_DEVICE; idx++) {
-+              if (memcmp(&dp->nodenames[idx][0], nodename, WWN_SIZE) == 0 && 
-+                      memcmp(&dp->portnames[idx][0], portname, WWN_SIZE) == 0 ) {
-+                              DEBUG3(printk("%s: Found matching device @ index %d:\n",
-+                          __func__, id);)
-+                              return dp;
-+              }
-+      }
-+
-+      return NULL;
-+}
-+#endif
-+
-+/*
-+ *  qla2x00_export_target
-+ *      Look through the existing multipath control tree, and find
-+ *      an mp_lun_t with the supplied world-wide lun number.  If
-+ *      one cannot be found, allocate one.
-+ *
-+ *  Input:
-+ *      host      Adapter to add device to.
-+ *      dev_id    Index of device on adapter.
-+ *      port      port database information.
-+ *
-+ *  Returns:
-+ *      Pointer to new mp_device_t, or NULL if the allocation fails.
-+ *
-+ *  Side Effects:
-+ *      If the MP HOST does not already point to the mp_device_t,
-+ *      a pointer is added at the proper port offset.
-+ *
-+ * Context:
-+ *      Kernel context.
-+ */
-+int
-+qla2x00_export_target( void *vhost, uint16_t dev_id, 
-+      fc_port_t *fcport, uint16_t pathid) 
-+{
-+      mp_host_t       *host = (mp_host_t *) vhost; 
-+      mp_path_t       *path;
-+      mp_device_t *dp = NULL;
-+      BOOL            names_valid; /* Node name and port name are not zero */ 
-+      BOOL            node_found;  /* Found matching node name. */
-+      BOOL            port_found;  /* Found matching port name. */
-+      mp_device_t     *temp_dp;
-+      int             i;
-+      uint16_t        new_id = dev_id;
-+      uint16_t        idx;
-+
-+      DEBUG3(printk("%s(%ld): Entered. host=%p, fcport =%p, dev_id = %d\n",
-+          __func__, host->ha->host_no, host, fcport, dev_id));
-+
-+      temp_dp = qla2x00_find_mp_dev_by_id(host,dev_id);
-+
-+      /* if Device already known at this port. */
-+      if (temp_dp != NULL) {
-+              node_found = qla2x00_is_nodename_equal(temp_dp->nodename,
-+                  fcport->node_name);
-+              port_found = qla2x00_is_portname_in_device(temp_dp,
-+                  fcport->port_name);
-+              /* found */
-+              if (node_found && port_found) 
-+                      dp = temp_dp;
-+
-+      }
-+
-+
-+      /* Sanity check the port information  */
-+      names_valid = (!qla2x00_is_ww_name_zero(fcport->node_name) &&
-+          !qla2x00_is_ww_name_zero(fcport->port_name));
-+
-+      /*
-+       * If the optimized check failed, loop through each known
-+       * device on this known adapter looking for the node name.
-+       */
-+      if (dp == NULL && names_valid) {
-+              if( (temp_dp = qla2x00_find_mp_dev_by_portname(host,
-+                      fcport->port_name, &idx)) == NULL ) {
-+                      /* find a good index */
-+                      for( i = dev_id; i < MAX_MP_DEVICES; i++ )
-+                              if(host->mp_devs[i] == NULL ) {
-+                                      new_id = i;
-+                                      break;
-+                              }
-+              } else if( temp_dp !=  NULL ) { /* found dp */
-+                      if( qla2x00_is_nodename_equal(temp_dp->nodename,
-+                          fcport->node_name) ) {
-+                              new_id = temp_dp->dev_id;
-+                              dp = temp_dp;
-+                      }
-+              }
-+      }
-+      
-+      /* If we couldn't find one, allocate one. */
-+      if (dp == NULL &&
-+          ((fcport->flags & FC_CONFIG) || !mp_config_required)) {
-+
-+              DEBUG2(printk("%s(%d): No match for WWPN. Creating new mpdev \n"
-+              "node %02x%02x%02x%02x%02x%02x%02x%02x "
-+              "port %02x%02x%02x%02x%02x%02x%02x%02x\n",
-+               __func__, host->instance,
-+              fcport->node_name[0], fcport->node_name[1],
-+              fcport->node_name[2], fcport->node_name[3],
-+              fcport->node_name[4], fcport->node_name[5],
-+              fcport->node_name[6], fcport->node_name[7],
-+              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]);) 
-+              dp = qla2x00_allocate_mp_dev(fcport->node_name, 
-+                      fcport->port_name);
-+
-+              DEBUG2(printk("%s(%ld): (2) mp_dev[%d] update"
-+              " with dp %p\n ",
-+              __func__, host->ha->host_no, new_id, dp);)
-+              host->mp_devs[new_id] = dp;
-+              dp->dev_id = new_id;
-+              dp->use_cnt++;
-+      }
-+      
-+      /*
-+      * We either have found or created a path list. Find this
-+      * host's path in the path list or allocate a new one
-+      * and add it to the list.
-+      */
-+      if (dp == NULL) {
-+              /* We did not create a mp_dev for this port. */
-+              fcport->mp_byte |= MP_MASK_UNCONFIGURED;
-+              DEBUG2(printk("%s: Device NOT found or created at "
-+              " dev_id=%d.\n",
-+              __func__, dev_id);)
-+              return FALSE;
-+      }
-+
-+      path = qla2x00_find_or_allocate_path(host, dp, dev_id,
-+              pathid, fcport);
-+      if (path == NULL) {
-+              DEBUG2(printk("%s:Path NOT found or created.\n",
-+              __func__);)
-+              return FALSE;
-+      }
-+
-+      return TRUE;
-+}
-+
-+
-+/*
-+ *  qla2x00_combine_by_lunid
-+ *      Look through the existing multipath control tree, and find
-+ *      an mp_lun_t with the supplied world-wide lun number.  If
-+ *      one cannot be found, allocate one.
-+ *
-+ *  Input:
-+ *      host      Adapter to add device to.
-+ *      dev_id    Index of device on adapter.
-+ *      port      port database information.
-+ *
-+ *  Returns:
-+ *      Pointer to new mp_device_t, or NULL if the allocation fails.
-+ *
-+ *  Side Effects:
-+ *      If the MP HOST does not already point to the mp_device_t,
-+ *      a pointer is added at the proper port offset.
-+ *
-+ * Context:
-+ *      Kernel context.
-+ */
-+int
-+qla2x00_combine_by_lunid( void *vhost, uint16_t dev_id, 
-+      fc_port_t *fcport, uint16_t pathid) 
-+{
-+      mp_host_t       *host = (mp_host_t *) vhost; 
-+      int fail = 0;
-+      mp_path_t       *path;
-+      mp_device_t *dp = NULL;
-+      fc_lun_t        *fclun;
-+      mp_lun_t  *lun;
-+      BOOL            names_valid; /* Node name and port name are not zero */ 
-+      mp_host_t       *temp_host;  /* pointer to temporary host */
-+      mp_device_t     *temp_dp;
-+      mp_port_t       *port;
-+      int             l;
-+
-+      ENTER("qla2x00_combine_by_lunid");
-+      //printk("Entering %s\n", __func__); 
-+
-+      /* 
-+       * Currently, not use because we create common nodename for
-+       * the gui, so we can use the normal common namename processing.
-+       */
-+      if (fcport->flags & FC_CONFIG) {
-+              /* Search for device if not found create one */
-+
-+              temp_dp = qla2x00_find_mp_dev_by_id(host,dev_id);
-+
-+              /* if Device already known at this port. */
-+              if (temp_dp != NULL) {
-+                      DEBUG(printk("%s: Found an existing "
-+                      "dp %p-  host %p inst=%d, fcport =%p, path id = %d\n",
-+                      __func__, temp_dp, host, host->instance, fcport,
-+                      pathid);)
-+                      if( qla2x00_is_portname_in_device(temp_dp,
-+                               fcport->port_name) ) {
-+
-+                              DEBUG2(printk("%s: mp dev %02x%02x%02x%02x%02x%02x"
-+                          "%02x%02x exists on %p. dev id %d. path cnt=%d.\n",
-+                          __func__,
-+                          fcport->port_name[0], fcport->port_name[1],
-+                          fcport->port_name[2], fcport->port_name[3],
-+                          fcport->port_name[4], fcport->port_name[5],
-+                          fcport->port_name[6], fcport->port_name[7],
-+                          temp_dp, dev_id, temp_dp->path_list->path_cnt);)
-+                              dp = temp_dp;
-+                      } 
-+
-+              }
-+
-+              /*
-+              * If the optimized check failed, loop through each known
-+              * device on each known adapter looking for the node name
-+              * and port name.
-+              */
-+              if (dp == NULL) {
-+                      /* 
-+                       * Loop through each potential adapter for the
-+                       * specified target (dev_id). If a device is 
-+                       * found then add this port or use it.
-+                       */
-+                      for (temp_host = mp_hosts_base; (temp_host);
-+                              temp_host = temp_host->next) {
-+                              /* user specifies the target via dev_id */
-+                              temp_dp = temp_host->mp_devs[dev_id];
-+                              if (temp_dp == NULL) {
-+                                      continue;
-+                              }
-+                              if( qla2x00_is_portname_in_device(temp_dp,
-+                                      fcport->port_name) ) {
-+                                      dp = temp_dp;
-+                              } else {
-+                                      qla2x00_add_portname_to_mp_dev(
-+                                      temp_dp, fcport->port_name, 
-+                                      fcport->node_name);
-+                                      dp = temp_dp;
-+                                      host->mp_devs[dev_id] = dp;
-+                                      dp->use_cnt++;
-+                              }
-+                              break;
-+                      }
-+              }
-+
-+              /* Sanity check the port information  */
-+              names_valid = (!qla2x00_is_ww_name_zero(fcport->node_name) &&
-+              !qla2x00_is_ww_name_zero(fcport->port_name));
-+
-+              if (dp == NULL && names_valid &&
-+              ((fcport->flags & FC_CONFIG) || !mp_config_required) ) {
-+
-+                      DEBUG2(printk("%s(%ld): No match. adding new mpdev on "
-+                      "dev_id %d. node %02x%02x%02x%02x%02x%02x%02x%02x "
-+                      "port %02x%02x%02x%02x%02x%02x%02x%02x\n",
-+                      __func__, host->ha->host_no, dev_id,
-+                      fcport->node_name[0], fcport->node_name[1],
-+                      fcport->node_name[2], fcport->node_name[3],
-+                      fcport->node_name[4], fcport->node_name[5],
-+                      fcport->node_name[6], fcport->node_name[7],
-+                      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]);)
-+                      dp = qla2x00_allocate_mp_dev(fcport->node_name, 
-+                                      fcport->port_name);
-+
-+                      host->mp_devs[dev_id] = dp;
-+                      dp->dev_id = dev_id;
-+                      dp->use_cnt++;
-+              }
-+
-+              /*
-+              * We either have found or created a path list. Find this
-+              * host's path in the path list or allocate a new one
-+              * and add it to the list.
-+              */
-+              if (dp == NULL) {
-+                      /* We did not create a mp_dev for this port. */
-+                      fcport->mp_byte |= MP_MASK_UNCONFIGURED;
-+                      DEBUG2(printk("%s: Device NOT found or created at "
-+                      " dev_id=%d.\n",
-+                      __func__, dev_id);)
-+                      return FALSE;
-+              }
-+
-+              /*
-+              * Find the path in the current path list, or allocate
-+              * a new one and put it in the list if it doesn't exist.
-+              * Note that we do NOT set bSuccess to FALSE in the case
-+              * of failure here.  We must tolerate the situation where
-+              * the customer has more paths to a device than he can
-+              * get into a PATH_LIST.
-+              */
-+              path = qla2x00_find_or_allocate_path(host, dp, dev_id,
-+              pathid, fcport);
-+              if (path == NULL) {
-+                      DEBUG2(printk("%s:Path NOT found or created.\n",
-+                      __func__);)
-+                      return FALSE;
-+              }
-+
-+
-+              /* Set the PATH flag to match the device flag
-+              * of whether this device needs a relogin.  If any
-+              * device needs relogin, set the relogin countdown.
-+              */
-+              path->config = TRUE;
-+
-+
-+      } else {
-+              if (mp_initialized &&
-+                  (fcport->flags & FC_MSA_DEVICE)  ){
-+                       qla2x00_test_active_port(fcport); 
-+              }
-+              list_for_each_entry(fclun, &fcport->fcluns, list) {
-+                      lun = qla2x00_find_or_allocate_lun(host, dev_id, 
-+                                      fcport, fclun);
-+                      if( lun == NULL ) {
-+                              fail++;
-+                              continue;
-+                      }
-+                      /*
-+                      * Find the path in the current path list, or allocate
-+                      * a new one and put it in the list if it doesn't exist.
-+                      */
-+                      dp = lun->dp;
-+                      if( fclun->mplun == NULL )
-+                              fclun->mplun = lun; 
-+                      path = qla2x00_find_or_allocate_path(host, dp,
-+                                      dp->dev_id, pathid, fcport);
-+                      if (path == NULL || dp == NULL) {
-+                              fail++;
-+                              continue;
-+                      }
-+
-+                      /* set the lun active flag */
-+                      if (mp_initialized &&
-+                       (fcport->flags & FC_EVA_DEVICE) ) { 
-+                           qla2x00_test_active_lun( 
-+                              path->port, fclun );
-+                      }
-+
-+                      /* Add fclun to path list */
-+                      if (lun->paths[path->id] == NULL) {
-+                              lun->paths[path->id] = fclun;
-+                              DEBUG2(printk("Updated path[%d]= %p for lun %p\n",
-+                                      path->id, fclun, lun);)
-+                              lun->path_cnt++;
-+                      }
-+                      
-+                      /* 
-+                       * if we have a visible lun then make
-+                       * the target visible as well 
-+                       */
-+                      l = lun->number;
-+                      if( (fclun->flags & FC_VISIBLE_LUN)  ) {  
-+                              if (dp->path_list->visible ==
-+                                  PATH_INDEX_INVALID) {
-+                                      dp->path_list->visible = path->id;
-+                                      DEBUG2(printk("%s: dp %p setting "
-+                                          "visible id to %d\n",
-+                                          __func__,dp,path->id );)
-+                              }  
-+                              dp->path_list->current_path[l] = path->id;
-+                              path->lun_data.data[l] |=  LUN_DATA_PREFERRED_PATH;
-+                              DEBUG2(printk("%s: Found a controller path 0x%x "
-+                                  "- lun %d\n", __func__, path->id,l);)
-+                      } else if (mp_initialized) {
-+                              /*
-+                              * Whenever a port or lun is "active" 
-+                              * then force it to be a preferred path.
-+                              */
-+                              if (qla2x00_find_first_active_path(dp, lun) 
-+                                      == path ){
-+                                      dp->path_list->current_path[l] =
-+                                          path->id;
-+                                      path->lun_data.data[l] |=
-+                                          LUN_DATA_PREFERRED_PATH;
-+                                      DEBUG2(printk(
-+                                      "%s: Found preferred lun at loopid=0x%02x, lun=%d, pathid=%d\n",
-+                              __func__, fcport->loop_id, l, path->id);)
-+                              }
-+              }
-+
-+                      /* if (port->flags & FC_CONFIG)
-+                              path->config = TRUE;  */
-+
-+                      port = qla2x00_find_or_allocate_port(host, lun, path);
-+                      if (port == NULL) {
-+                              fail++;
-+                              continue;
-+                      }
-+              }
-+      }
-+
-+      if (fail)
-+              return FALSE;           
-+      return TRUE;            
-+}
-+      
-+#if 0
-+/*
-+ *  qla2x00_find_or_allocate_mp_dev
-+ *      Look through the existing multipath control tree, and find
-+ *      an mp_device_t with the supplied world-wide node name.  If
-+ *      one cannot be found, allocate one.
-+ *
-+ *  Input:
-+ *      host      Adapter to add device to.
-+ *      dev_id    Index of device on adapter.
-+ *      port      port database information.
-+ *
-+ *  Returns:
-+ *      Pointer to new mp_device_t, or NULL if the allocation fails.
-+ *
-+ *  Side Effects:
-+ *      If the MP HOST does not already point to the mp_device_t,
-+ *      a pointer is added at the proper port offset.
-+ *
-+ * Context:
-+ *      Kernel context.
-+ */
-+static mp_device_t *
-+qla2x00_find_or_allocate_mp_dev(mp_host_t *host, uint16_t dev_id,
-+    fc_port_t *port)
-+{
-+      mp_device_t     *dp = NULL;  /* pointer to multi-path device   */
-+      BOOL            node_found;  /* Found matching node name. */
-+      BOOL            port_found;  /* Found matching port name. */
-+      BOOL            names_valid; /* Node name and port name are not zero */ 
-+      mp_host_t       *temp_host;  /* pointer to temporary host */
-+
-+      uint16_t        j;
-+      mp_device_t     *temp_dp;
-+
-+      ENTER("qla2x00_find_or_allocate_mp_dev");
-+
-+      DEBUG3(printk("%s(%ld): entered. host=%p, port =%p, dev_id = %d\n",
-+          __func__, host->ha->host_no, host, port, dev_id);)
-+
-+      temp_dp = qla2x00_find_mp_dev_by_id(host,dev_id);
-+
-+      DEBUG3(printk("%s: temp dp =%p\n", __func__, temp_dp);)
-+      /* if Device already known at this port. */
-+      if (temp_dp != NULL) {
-+              node_found = qla2x00_is_nodename_equal(temp_dp->nodename,
-+                  port->node_name);
-+              port_found = qla2x00_is_portname_in_device(temp_dp,
-+                  port->port_name);
-+
-+              if (node_found && port_found) {
-+                      DEBUG3(printk("%s: mp dev %02x%02x%02x%02x%02x%02x"
-+                          "%02x%02x exists on %p. dev id %d. path cnt=%d.\n",
-+                          __func__,
-+                          port->port_name[0], port->port_name[1],
-+                          port->port_name[2], port->port_name[3],
-+                          port->port_name[4], port->port_name[5],
-+                          port->port_name[6], port->port_name[7],
-+                          temp_dp, dev_id, temp_dp->path_list->path_cnt);)
-+                      dp = temp_dp;
-+
-+                      /*
-+                       * Copy the LUN configuration data
-+                       * into the mp_device_t.
-+                       */
-+              }
-+      }
-+
-+
-+      /* Sanity check the port information  */
-+      names_valid = (!qla2x00_is_ww_name_zero(port->node_name) &&
-+          !qla2x00_is_ww_name_zero(port->port_name));
-+
-+      /*
-+       * If the optimized check failed, loop through each known
-+       * device on each known adapter looking for the node name.
-+       */
-+      if (dp == NULL && names_valid) {
-+              DEBUG3(printk("%s: Searching each adapter for the device...\n",
-+                  __func__);)
-+
-+              /* Check for special cases. */
-+              if (port->flags & FC_CONFIG) {
-+                      /* Here the search is done only for ports that
-+                       * are found in config file, so we can count on
-+                       * mp_byte value when binding the paths.
-+                       */
-+                      DEBUG3(printk("%s(%ld): mpbyte=%02x process configured "
-+                          "portname=%02x%02x%02x%02x%02x%02x%02x%02x.\n",
-+                          __func__, host->ha->host_no, port->mp_byte,
-+                          port->port_name[0], port->port_name[1],
-+                          port->port_name[2], port->port_name[3],
-+                          port->port_name[4], port->port_name[5],
-+                          port->port_name[6], port->port_name[7]);)
-+                      DEBUG3(printk("%s(%ld): nodename %02x%02x%02x%02x%02x"
-+                          "%02x%02x%02x.\n",
-+                          __func__, host->ha->host_no,
-+                          port->node_name[0], port->node_name[1],
-+                          port->node_name[2], port->node_name[3],
-+                          port->node_name[4], port->node_name[5],
-+                          port->node_name[6], port->node_name[7]);)
-+
-+                      if (port->mp_byte == 0) {
-+                              DEBUG3(printk("%s(%ld): port visible.\n",
-+                                  __func__, host->ha->host_no);)
-+
-+                              /* This device in conf file is set to visible */
-+                              for (temp_host = mp_hosts_base; (temp_host);
-+                                  temp_host = temp_host->next) {
-+                                      /* Search all hosts with given tgt id
-+                                       * for any previously created dp with
-+                                       * matching node name.
-+                                       */
-+                                      temp_dp = temp_host->mp_devs[dev_id];
-+                                      if (temp_dp == NULL) {
-+                                              continue;
-+                                      }
-+
-+                                      node_found =
-+                                          qla2x00_is_nodename_equal(
-+                                          temp_dp->nodename, port->node_name);
-+
-+                                      if (node_found &&
-+                                          qla2x00_found_hidden_path(
-+                                          temp_dp)) {
-+                                              DEBUG3(printk(
-+                                                  "%s(%ld): found "
-+                                                  "mpdev of matching "
-+                                                  "node %02x%02x%02x"
-+                                                  "%02x%02x%02x%02x"
-+                                                  "%02x w/ hidden "
-+                                                  "paths. dp=%p "
-+                                                  "dev_id=%d.\n",
-+                                                  __func__,
-+                                                  host->ha->host_no,
-+                                                  port->port_name[0],
-+                                                  port->port_name[1],
-+                                                  port->port_name[2],
-+                                                  port->port_name[3],
-+                                                  port->port_name[4],
-+                                                  port->port_name[5],
-+                                                  port->port_name[6],
-+                                                  port->port_name[7],
-+                                                  temp_dp, dev_id);)
-+                                              /*
-+                                               * Found the mpdev.
-+                                               * Treat this same as default
-+                                               * case by adding this port
-+                                               * to this mpdev which has same
-+                                               * nodename.
-+                                               */
-+                                              qla2x00_add_portname_to_mp_dev(
-+                                                  temp_dp, port->port_name, port->node_name);
-+                                              dp = temp_dp;
-+                                              host->mp_devs[dev_id] = dp;
-+                                              dp->use_cnt++;
-+
-+                                              break;
-+                                      }
-+                              }
-+
-+                      } else if (port->mp_byte & MP_MASK_OVERRIDE) {
-+                              /* Bind on port name */
-+                              DEBUG3(printk(
-+                                  "%s(%ld): port has override bit.\n",
-+                                  __func__, host->ha->host_no);)
-+
-+                              temp_dp = qla2x00_find_dp_by_pn_from_all_hosts(
-+                                  port->port_name, &j);
-+
-+                              if (temp_dp) {
-+                                      /* Found match */
-+                                      DEBUG3(printk("%s(%ld): update mpdev "
-+                                          "on Matching port %02x%02x%02x"
-+                                          "%02x%02x%02x%02x%02x "
-+                                          "dp %p dev_id %d\n",
-+                                          __func__, host->ha->host_no,
-+                                          port->port_name[0],
-+                                          port->port_name[1],
-+                                          port->port_name[2],
-+                                          port->port_name[3],
-+                                          port->port_name[4],
-+                                          port->port_name[5],
-+                                          port->port_name[6],
-+                                          port->port_name[7],
-+                                          temp_dp, j);)
-+                                      /*
-+                                       * Bind this port to this mpdev of the
-+                                       * matching port name.
-+                                       */
-+                                      dp = temp_dp;
-+                                      host->mp_devs[j] = dp;
-+                                      dp->use_cnt++;
-+                              }
-+                      } else {
-+                              DEBUG3(printk("%s(%ld): default case.\n",
-+                                  __func__, host->ha->host_no);)
-+                              /* Default case. Search and bind/add this
-+                               * port to the mp_dev with matching node name
-+                               * if it is found.
-+                               */
-+                              dp = qla2x00_default_bind_mpdev(host, port);
-+                      }
-+
-+              } else {
-+                      DEBUG3(printk("%s(%ld): process discovered port "
-+                          "%02x%02x%02x%02x%02x%02x%02x%02x.\n",
-+                          __func__, host->ha->host_no,
-+                          port->port_name[0], port->port_name[1],
-+                          port->port_name[2], port->port_name[3],
-+                          port->port_name[4], port->port_name[5],
-+                          port->port_name[6], port->port_name[7]);)
-+                      DEBUG3(printk("%s(%ld): nodename %02x%02x%02x%02x%02x"
-+                          "%02x%02x%02x.\n",
-+                          __func__, host->ha->host_no,
-+                          port->node_name[0], port->node_name[1],
-+                          port->node_name[2], port->node_name[3],
-+                          port->node_name[4], port->node_name[5],
-+                          port->node_name[6], port->node_name[7]);)
-+
-+                      /* Here we try to find the mp_dev pointer for the
-+                       * current port in the current host, which would
-+                       * have been created if the port was specified in
-+                       * the config file.  To be sure the mp_dev we found
-+                       * really is for the current port, we check the
-+                       * node name to make sure it matches also.
-+                       * When we find a previously created mp_dev pointer
-+                       * for the current port, just return the pointer.
-+                       * We proceed to add this port to an mp_dev of
-+                       * the matching node name only if it is not found in
-+                       * the mp_dev list already created and ConfigRequired
-+                       * is not set.
-+                       */
-+                      temp_dp = qla2x00_find_mp_dev_by_portname(host,
-+                          port->port_name, &j);
-+
-+                      if (temp_dp && qla2x00_is_nodename_equal(
-+                          temp_dp->nodename, port->node_name)) {
-+                              /* Found match. This mpdev port was created
-+                               * from config file entry.
-+                               */
-+                              DEBUG3(printk("%s(%ld): update mpdev "
-+                                  "on Matching port %02x%02x%02x"
-+                                  "%02x%02x%02x%02x%02x "
-+                                  "dp %p dev_id %d\n",
-+                                  __func__, host->ha->host_no,
-+                                  port->port_name[0],
-+                                  port->port_name[1],
-+                                  port->port_name[2],
-+                                  port->port_name[3],
-+                                  port->port_name[4],
-+                                  port->port_name[5],
-+                                  port->port_name[6],
-+                                  port->port_name[7],
-+                                  temp_dp, j);)
-+
-+                              dp = temp_dp;
-+                      } else if (!mp_config_required) {
-+
-+                              DEBUG3(printk("%s(%ld): default case.\n",
-+                                  __func__, host->ha->host_no);)
-+                              /* Default case. Search and bind/add this
-+                               * port to the mp_dev with matching node name
-+                               * if it is found.
-+                               */
-+                              dp = qla2x00_default_bind_mpdev(host, port);
-+                      }
-+              }
-+      }
-+
-+      /* If we couldn't find one, allocate one. */
-+      if (dp == NULL &&
-+          ((port->flags & FC_CONFIG) || !mp_config_required)) {
-+
-+              DEBUG3(printk("%s(%ld): No match. adding new mpdev on "
-+                  "dev_id %d. node %02x%02x%02x%02x%02x%02x%02x%02x "
-+                  "port %02x%02x%02x%02x%02x%02x%02x%02x\n",
-+                  __func__, host->ha->host_no, dev_id,
-+                  port->node_name[0], port->node_name[1],
-+                  port->node_name[2], port->node_name[3],
-+                  port->node_name[4], port->node_name[5],
-+                  port->node_name[6], port->node_name[7],
-+                  port->port_name[0], port->port_name[1],
-+                  port->port_name[2], port->port_name[3],
-+                  port->port_name[4], port->port_name[5],
-+                  port->port_name[6], port->port_name[7]);)
-+              dp = qla2x00_allocate_mp_dev(port->node_name, port->port_name);
-+
-+#ifdef QL_DEBUG_LEVEL_2
-+              if (host->mp_devs[dev_id] != NULL) {
-+                      printk(KERN_WARNING
-+                          "qla2x00: invalid/unsupported configuration found. "
-+                          "overwriting target id %d.\n",
-+                          dev_id);
-+              }
-+#endif
-+              host->mp_devs[dev_id] = dp;
-+              dp->dev_id = dev_id;
-+              dp->use_cnt++;
-+      }
-+
-+      DEBUG3(printk("%s(%ld): exiting. return dp=%p.\n",
-+          __func__, host->ha->host_no, dp);)
-+      LEAVE("qla2x00_find_or_allocate_mp_dev");
-+
-+      return dp;
-+}
-+#endif
-+
-+/*
-+ * qla2x00_default_bind_mpdev
-+ *
-+ * Input:
-+ *    host = mp_host of current adapter
-+ *    port = fc_port of current port
-+ *
-+ * Returns:
-+ *    mp_device pointer 
-+ *    NULL - not found.
-+ *
-+ * Context:
-+ *    Kernel context.
-+ */
-+static inline mp_device_t *
-+qla2x00_default_bind_mpdev(mp_host_t *host, fc_port_t *port)
-+{
-+      /* Default search case */
-+      int             devid = 0;
-+      mp_device_t     *temp_dp = NULL;  /* temporary pointer */
-+      mp_host_t       *temp_host;  /* temporary pointer */
-+
-+      DEBUG3(printk("%s: entered.\n", __func__);)
-+
-+      for (temp_host = mp_hosts_base; (temp_host);
-+          temp_host = temp_host->next) {
-+              for (devid = 0; devid < MAX_MP_DEVICES; devid++) {
-+                      temp_dp = temp_host->mp_devs[devid];
-+
-+                      if (temp_dp == NULL)
-+                              continue;
-+
-+                      if (qla2x00_is_nodename_equal(temp_dp->nodename,
-+                          port->node_name)) {
-+                              DEBUG3(printk(
-+                                  "%s: Found matching dp @ host %p id %d:\n",
-+                                  __func__, temp_host, devid);)
-+                              break;
-+                      }
-+              }
-+              if (temp_dp != NULL) {
-+                      /* found a match. */
-+                      break;
-+              }
-+      }
-+
-+      if (temp_dp) {
-+              DEBUG3(printk("%s(%ld): update mpdev "
-+                  "on Matching node at dp %p. "
-+                  "dev_id %d adding new port %p-%02x"
-+                  "%02x%02x%02x%02x%02x%02x%02x\n",
-+                  __func__, host->ha->host_no,
-+                  temp_dp, devid, port,
-+                  port->port_name[0], port->port_name[1],
-+                  port->port_name[2], port->port_name[3],
-+                  port->port_name[4], port->port_name[5],
-+                  port->port_name[6], port->port_name[7]);)
-+
-+              if (!qla2x00_is_portname_in_device(temp_dp,
-+                  port->port_name)) {
-+                      qla2x00_add_portname_to_mp_dev(temp_dp,
-+                          port->port_name, port->node_name);
-+              }
-+
-+              /*
-+               * Set the flag that we have
-+               * found the device.
-+               */
-+              host->mp_devs[devid] = temp_dp;
-+              temp_dp->use_cnt++;
-+
-+              /* Fixme(dg)
-+               * Copy the LUN info into
-+               * the mp_device_t
-+               */
-+      }
-+
-+      return (temp_dp);
-+}
-+
-+/*
-+ *  qla2x00_find_or_allocate_mp_dev
-+ *      Look through the existing multipath control tree, and find
-+ *      an mp_device_t with the supplied world-wide node name.  If
-+ *      one cannot be found, allocate one.
-+ *
-+ *  Input:
-+ *      host      Adapter to add device to.
-+ *      dev_id    Index of device on adapter.
-+ *      port      port database information.
-+ *
-+ *  Returns:
-+ *      Pointer to new mp_device_t, or NULL if the allocation fails.
-+ *
-+ *  Side Effects:
-+ *      If the MP HOST does not already point to the mp_device_t,
-+ *      a pointer is added at the proper port offset.
-+ *
-+ * Context:
-+ *      Kernel context.
-+ */
-+static mp_device_t *
-+qla2x00_find_or_allocate_mp_dev(mp_host_t *host, uint16_t dev_id,
-+    fc_port_t *port)
-+{
-+      mp_device_t     *dp = NULL;  /* pointer to multi-path device   */
-+      BOOL            node_found;  /* Found matching node name. */
-+      BOOL            port_found;  /* Found matching port name. */
-+      BOOL            names_valid; /* Node name and port name are not zero */ 
-+      mp_host_t       *temp_host;  /* pointer to temporary host */
-+
-+      uint16_t        j;
-+      mp_device_t     *temp_dp;
-+
-+      ENTER("qla2x00_find_or_allocate_mp_dev");
-+
-+      DEBUG3(printk("%s(%ld): entered. host=%p, port =%p, dev_id = %d\n",
-+          __func__, host->ha->host_no, host, port, dev_id);)
-+
-+      temp_dp = qla2x00_find_mp_dev_by_id(host,dev_id);
-+
-+      DEBUG3(printk("%s: temp dp =%p\n", __func__, temp_dp);)
-+      /* if Device already known at this port. */
-+      if (temp_dp != NULL) {
-+              node_found = qla2x00_is_nodename_equal(temp_dp->nodename,
-+                  port->node_name);
-+              port_found = qla2x00_is_portname_in_device(temp_dp,
-+                  port->port_name);
-+
-+              if (node_found && port_found) {
-+                      DEBUG3(printk("%s: mp dev %02x%02x%02x%02x%02x%02x"
-+                          "%02x%02x exists on %p. dev id %d. path cnt=%d.\n",
-+                          __func__,
-+                          port->port_name[0], port->port_name[1],
-+                          port->port_name[2], port->port_name[3],
-                           port->port_name[4], port->port_name[5],
-                           port->port_name[6], port->port_name[7],
-                           temp_dp, dev_id, temp_dp->path_list->path_cnt);)
-@@ -1448,7 +2810,6 @@ qla2x00_find_or_allocate_mp_dev(mp_host_
-               }
-       }
--
-       /* Sanity check the port information  */
-       names_valid = (!qla2x00_is_ww_name_zero(port->node_name) &&
-           !qla2x00_is_ww_name_zero(port->port_name));
-@@ -1526,11 +2887,17 @@ qla2x00_find_or_allocate_mp_dev(mp_host_
-                                                   temp_dp, dev_id);)
-                                               /*
-                                                * Found the mpdev.
--                                               * Treat this same as
--                                               * default case.
-+                                               * Treat this same as default
-+                                               * case by adding this port
-+                                               * to this mpdev which has same
-+                                               * nodename.
-                                                */
-+                                      if (!qla2x00_is_portname_in_device(
-+                                          temp_dp, port->port_name)) {
-                                               qla2x00_add_portname_to_mp_dev(
--                                                  temp_dp, port->port_name);
-+                                                  temp_dp, port->port_name, port->node_name);
-+                                      }
-+
-                                               dp = temp_dp;
-                                               host->mp_devs[dev_id] = dp;
-                                               dp->use_cnt++;
-@@ -1565,8 +2932,8 @@ qla2x00_find_or_allocate_mp_dev(mp_host_
-                                           port->port_name[7],
-                                           temp_dp, j);)
-                                       /*
--                                       * Set the flag that we have
--                                       * found the device.
-+                                       * Bind this port to this mpdev of the
-+                                       * matching port name.
-                                        */
-                                       dp = temp_dp;
-                                       host->mp_devs[j] = dp;
-@@ -1575,8 +2942,9 @@ qla2x00_find_or_allocate_mp_dev(mp_host_
-                       } else {
-                               DEBUG3(printk("%s(%ld): default case.\n",
-                                   __func__, host->ha->host_no);)
--                              /* Default case. Search and bind mp_dev with
--                               * matching node name.
-+                              /* Default case. Search and bind/add this
-+                               * port to the mp_dev with matching node name
-+                               * if it is found.
-                                */
-                               dp = qla2x00_default_bind_mpdev(host, port);
-                       }
-@@ -1597,22 +2965,29 @@ qla2x00_find_or_allocate_mp_dev(mp_host_
-                           port->node_name[4], port->node_name[5],
-                           port->node_name[6], port->node_name[7]);)
--                      /* Here we try to match ports found to any previously
--                       * built mp_dev list. mp_byte value is not valid yet.
--                       * First search for matching port name in current
--                       * host. This is necessary in case the port name was
--                       * specified in the config file with the override
--                       * bit and saved in our mpdev tree already.
-+                      /* Here we try to find the mp_dev pointer for the
-+                       * current port in the current host, which would
-+                       * have been created if the port was specified in
-+                       * the config file.  To be sure the mp_dev we found
-+                       * really is for the current port, we check the
-+                       * node name to make sure it matches also.
-+                       * When we find a previously created mp_dev pointer
-+                       * for the current port, just return the pointer.
-+                       * We proceed to add this port to an mp_dev of
-+                       * the matching node name only if it is not found in
-+                       * the mp_dev list already created and ConfigRequired
-+                       * is not set.
-                        */
-                       temp_dp = qla2x00_find_mp_dev_by_portname(host,
-                           port->port_name, &j);
--                      if (temp_dp) {
-+                      if (temp_dp && qla2x00_is_nodename_equal(
-+                          temp_dp->nodename, port->node_name)) {
-                               /* Found match. This mpdev port was created
--                               * from config file.
-+                               * from config file entry.
-                                */
--                              DEBUG3(printk("%s(%ld): update mpdev "
--                                  "on Matching port %02x%02x%02x"
-+                              DEBUG3(printk("%s(%ld): found mpdev "
-+                                  "created for current port %02x%02x%02x"
-                                   "%02x%02x%02x%02x%02x "
-                                   "dp %p dev_id %d\n",
-                                   __func__, host->ha->host_no,
-@@ -1631,8 +3006,9 @@ qla2x00_find_or_allocate_mp_dev(mp_host_
-                               DEBUG3(printk("%s(%ld): default case.\n",
-                                   __func__, host->ha->host_no);)
--                              /* Default case. Search and bind mp_dev with
--                               * matching node name.
-+                              /* Default case. Search and bind/add this
-+                               * port to the mp_dev with matching node name
-+                               * if it is found.
-                                */
-                               dp = qla2x00_default_bind_mpdev(host, port);
-                       }
-@@ -1678,6 +3054,7 @@ qla2x00_find_or_allocate_mp_dev(mp_host_
- }
-+
- /*
-  *  qla2x00_find_or_allocate_path
-  *      Look through the path list for the supplied device, and either
-@@ -1796,21 +3173,32 @@ qla2x00_find_or_allocate_path(mp_host_t 
-                       /* Update port with bitmask info */
-                       path = qla2x00_allocate_path(host, id, port, dev_id);
--                      DEBUG3(printk("%s: allocated new path %p, adding "
--                          "path id %d, mp_byte=0x%x "
--                          "port=%p-%02x%02x%02x%02x%02x%02x%02x%02x\n",
--                          __func__, path, id,
--                          path->mp_byte,
--                          path->port,
--                          path->port->port_name[0], path->port->port_name[1],
--                          path->port->port_name[2], path->port->port_name[3],
--                          path->port->port_name[4], path->port->port_name[5],
--                          path->port->port_name[6], path->port->port_name[7]
--                          );)
--                      qla2x00_add_path(path_list, path);
-+                      if (path) {
-+#if defined(QL_DEBUG_LEVEL_3)
-+                              printk("%s: allocated new path %p, adding path "
-+                                  "id %d, mp_byte=0x%x\n", __func__, path, id,
-+                                  path->mp_byte);
-+                              if (path->port)
-+                                      printk( "port=%p-"
-+                                          "%02x%02x%02x%02x%02x%02x%02x%02x\n"
-+                                          , path->port,
-+                                          path->port->port_name[0],
-+                                          path->port->port_name[1],
-+                                          path->port->port_name[2],
-+                                          path->port->port_name[3],
-+                                          path->port->port_name[4],
-+                                          path->port->port_name[5],
-+                                          path->port->port_name[6],
-+                                          path->port->port_name[7]);
-+#endif
-+                              qla2x00_add_path(path_list, path);
--                      /* Reconcile the new path against the existing ones. */
--                      qla2x00_setup_new_path(dp, path);
-+                              /*
-+                               * Reconcile the new path against the
-+                               * existing ones.
-+                               */
-+                              qla2x00_setup_new_path(dp, path, port);
-+                      }
-               } else {
-                       /* EMPTY */
-                       DEBUG4(printk("%s: Err exit, no space to add path.\n",
-@@ -1824,6 +3212,264 @@ qla2x00_find_or_allocate_path(mp_host_t 
-       return path;
- }
-+/*
-+ *  qla2x00_find_or_allocate_lun
-+ *      Look through the existing multipath control tree, and find
-+ *      an mp_lun_t with the supplied world-wide lun number.  If
-+ *      one cannot be found, allocate one.
-+ *
-+ *  Input:
-+ *      host      Adapter (lun) for the device.
-+ *      fclun     Lun data from port database.
-+ *
-+ *  Returns:
-+ *      Pointer to new LUN, or NULL if the allocation fails.
-+ *
-+ *  Side Effects:
-+ *      1. If the LUN_LIST does not already point to the LUN,
-+ *         a new LUN is added to the LUN_LIST.
-+ *      2. If the DEVICE_LIST does not already point to the DEVICE,
-+ *         a new DEVICE is added to the DEVICE_LIST.
-+ *
-+ * Context:
-+ *      Kernel context.
-+ */
-+/* ARGSUSED */
-+static mp_lun_t *
-+qla2x00_find_or_allocate_lun(mp_host_t *host, uint16_t dev_id,
-+    fc_port_t *port, fc_lun_t *fclun)
-+{
-+      mp_lun_t                *lun = NULL;
-+      mp_device_t             *dp = NULL;
-+#if 0
-+      mp_device_t             *temp_dp = NULL;
-+#endif
-+      uint16_t                len;
-+      uint16_t                idx;
-+      uint16_t                new_id = dev_id;
-+      char                    wwulnbuf[WWULN_SIZE];
-+      int                     new_dev = 0;
-+      int                     i;
-+
-+
-+      ENTER("qla2x00_find_or_allocate_lun");
-+      DEBUG(printk("Entering %s\n", __func__);)
-+
-+      if( fclun == NULL )
-+              return NULL;
-+
-+      DEBUG2(printk("%s: "
-+                  " lun num=%d fclun %p mplun %p hba inst=%d, port =%p, dev id = %d\n",
-+                  __func__, fclun->lun, fclun, fclun->mplun, host->instance, port,
-+                  dev_id);)
-+      /* 
-+       * Perform inquiry page 83 to get the wwuln or 
-+       * use what was specified by the user.
-+       */
-+      if ( (port->flags & FC_CONFIG) ) {
-+                      if( (len = fclun->mplen) != 0 ) 
-+                              memcpy(wwulnbuf, fclun->mpbuf, len); 
-+      } else {
-+              len = qla2x00_get_wwuln_from_device(host, fclun, 
-+                      &wwulnbuf[0], WWULN_SIZE); 
-+              /* if fail to do the inq then exit */
-+              if( len == 0 ) {
-+                      return lun;
-+              }
-+      }
-+
-+      if( len != 0 )
-+              lun = qla2x00_find_matching_lunid(wwulnbuf);
-+
-+      /* 
-+       * If this is a visible "controller" lun and
-+       * it is already exists on somewhere world wide
-+       * then allocate a new device, so it can be 
-+       * exported it to the OS.
-+       */
-+      if( (fclun->flags & FC_VISIBLE_LUN) &&
-+              lun != NULL ) {
-+              if( fclun->mplun ==  NULL ) {
-+                      lun = NULL;
-+                      new_dev++;
-+              DEBUG2(printk("%s: Creating visible lun "
-+                  "lun %p num %d fclun %p mplun %p inst=%d, port =%p, dev id = %d\n",
-+                  __func__, lun, fclun->lun, fclun, fclun->mplun, host->instance, port,
-+                  dev_id);)
-+              } else {
-+                      lun = fclun->mplun;
-+                      return lun;
-+              }
-+      } 
-+
-+      if (lun != NULL ) {
-+              DEBUG(printk("%s: Found an existing "
-+                  "lun %p num %d fclun %p host %p inst=%d, port =%p, dev id = %d\n",
-+                  __func__, lun, fclun->lun, fclun, host, host->instance, port,
-+                  dev_id);)
-+              if( (dp = lun->dp ) == NULL ) {
-+                      printk("NO dp pointer in alloacted lun\n");
-+                      return NULL;
-+              }
-+              DEBUG(printk("%s(%ld): lookup portname for lun->dp = "
-+                      "dev_id %d. dp=%p node %02x%02x%02x%02x%02x%02x%02x%02x "
-+                      "port %02x%02x%02x%02x%02x%02x%02x%02x\n",
-+                      __func__, host->ha->host_no, dp->dev_id, dp,
-+                      port->node_name[0], port->node_name[1],
-+                      port->node_name[2], port->node_name[3],
-+                      port->node_name[4], port->node_name[5],
-+                      port->node_name[6], port->node_name[7],
-+                      port->port_name[0], port->port_name[1],
-+                      port->port_name[2], port->port_name[3],
-+                      port->port_name[4], port->port_name[5],
-+                      port->port_name[6], port->port_name[7]);)
-+
-+#if 1
-+              if( qla2x00_is_portname_in_device(dp,
-+                               port->port_name) ) {
-+
-+                              DEBUG(printk("%s: Found portname %02x%02x%02x%02x%02x%02x"
-+                          "%02x%02x match in mp_dev[%d] = %p\n",
-+                          __func__,
-+                          port->port_name[0], port->port_name[1],
-+                          port->port_name[2], port->port_name[3],
-+                          port->port_name[4], port->port_name[5],
-+                          port->port_name[6], port->port_name[7],
-+                          dp->dev_id, dp);)
-+                      if(host->mp_devs[dp->dev_id] == NULL ) {
-+                              host->mp_devs[dp->dev_id] = dp;
-+                              dp->use_cnt++;
-+                      }       
-+              } else {
-+                      DEBUG(printk("%s(%ld): MP_DEV no-match on portname. adding new port - "
-+                      "dev_id %d. node %02x%02x%02x%02x%02x%02x%02x%02x "
-+                      "port %02x%02x%02x%02x%02x%02x%02x%02x\n",
-+                      __func__, host->ha->host_no, dev_id,
-+                      port->node_name[0], port->node_name[1],
-+                      port->node_name[2], port->node_name[3],
-+                      port->node_name[4], port->node_name[5],
-+                      port->node_name[6], port->node_name[7],
-+                      port->port_name[0], port->port_name[1],
-+                      port->port_name[2], port->port_name[3],
-+                      port->port_name[4], port->port_name[5],
-+                      port->port_name[6], port->port_name[7]);)
-+
-+                      qla2x00_add_portname_to_mp_dev(dp,
-+                      port->port_name, port->node_name);
-+
-+                      DEBUG2(printk("%s(%ld): (1) Added portname and mp_dev[%d] update"
-+                      " with dp %p\n ",
-+                      __func__, host->ha->host_no, dp->dev_id, dp);)
-+                      if(host->mp_devs[dp->dev_id] == NULL ) {
-+                              host->mp_devs[dp->dev_id] = dp;
-+                              dp->use_cnt++; 
-+                      }       
-+              } 
-+#else
-+              if( (temp_dp = qla2x00_find_mp_dev_by_portname(host,
-+                              port->port_name, &idx)) == NULL ) {
-+                      DEBUG(printk("%s(%ld): MP_DEV no-match on portname. adding new port on "
-+                      "dev_id %d. node %02x%02x%02x%02x%02x%02x%02x%02x "
-+                      "port %02x%02x%02x%02x%02x%02x%02x%02x\n",
-+                      __func__, host->ha->host_no, dev_id,
-+                      port->node_name[0], port->node_name[1],
-+                      port->node_name[2], port->node_name[3],
-+                      port->node_name[4], port->node_name[5],
-+                      port->node_name[6], port->node_name[7],
-+                      port->port_name[0], port->port_name[1],
-+                      port->port_name[2], port->port_name[3],
-+                      port->port_name[4], port->port_name[5],
-+                      port->port_name[6], port->port_name[7]);)
-+
-+                      qla2x00_add_portname_to_mp_dev(dp,
-+                      port->port_name, port->node_name);
-+
-+                      DEBUG(printk("%s(%ld): (1) Added portname and mp_dev[%d] update"
-+                      " with dp %p\n ",
-+                      __func__, host->ha->host_no, dp->dev_id, dp);)
-+                      if(host->mp_devs[dp->dev_id] == NULL ) {
-+                              host->mp_devs[dp->dev_id] = dp;
-+                              dp->use_cnt++; 
-+                      }       
-+              } else if( dp == temp_dp ){
-+                      DEBUG3(printk("%s(%ld): MP_DEV %p match with portname @ "
-+                      " mp_dev[%d]. "
-+                      "port %02x%02x%02x%02x%02x%02x%02x%02x\n",
-+                      __func__, host->ha->host_no, temp_dp, idx,
-+                      port->port_name[0], port->port_name[1],
-+                      port->port_name[2], port->port_name[3],
-+                      port->port_name[4], port->port_name[5],
-+                      port->port_name[6], port->port_name[7]);)
-+
-+                      host->mp_devs[idx] = temp_dp;
-+                      dp->use_cnt++;
-+              } 
-+#endif
-+      } else {
-+              DEBUG(printk("%s: MP_lun %d not found "
-+                  "for fclun %p inst=%d, port =%p, dev id = %d\n",
-+                  __func__, fclun->lun, fclun, host->instance, port,
-+                  dev_id);)
-+                              
-+                      if( (dp = qla2x00_find_mp_dev_by_portname(host,
-+                              port->port_name, &idx)) == NULL || new_dev ) {
-+                              DEBUG2(printk("%s(%ld): No match for WWPN. Creating new mpdev \n"
-+                      "node %02x%02x%02x%02x%02x%02x%02x%02x "
-+                      "port %02x%02x%02x%02x%02x%02x%02x%02x\n",
-+                      __func__, host->ha->host_no, 
-+                      port->node_name[0], port->node_name[1],
-+                      port->node_name[2], port->node_name[3],
-+                      port->node_name[4], port->node_name[5],
-+                      port->node_name[6], port->node_name[7],
-+                      port->port_name[0], port->port_name[1],
-+                      port->port_name[2], port->port_name[3],
-+                      port->port_name[4], port->port_name[5],
-+                      port->port_name[6], port->port_name[7]);)
-+                      dp = qla2x00_allocate_mp_dev(port->node_name, 
-+                                              port->port_name);
-+                      /* find a good index */
-+                      for( i = dev_id; i < MAX_MP_DEVICES; i++ )
-+                              if(host->mp_devs[i] == NULL ) {
-+                                      new_id = i;
-+                                      break;
-+                              }
-+                      } else if( dp !=  NULL ) { /* found dp */
-+                              new_id = dp->dev_id;
-+                      }
-+                      
-+                      if( dp !=  NULL ) {
-+                      DEBUG2(printk("%s(%ld): (2) mp_dev[%d] update"
-+                      " with dp %p\n ",
-+                      __func__, host->ha->host_no, new_id, dp);)
-+                              host->mp_devs[new_id] = dp;
-+                              dp->dev_id = new_id;
-+                              dp->use_cnt++;
-+
-+                              lun = (mp_lun_t *) KMEM_ZALLOC(sizeof(mp_lun_t), 24);
-+                              if (lun != NULL) {
-+                              DEBUG(printk("Added lun %p to dp %p lun number %d\n",
-+                                      lun, dp, fclun->lun);)
-+                              DEBUG(qla2x00_dump_buffer(wwulnbuf, len);)
-+                                      memcpy(lun->wwuln, wwulnbuf, len);
-+                                      lun->siz = len;
-+                                      lun->number = fclun->lun;
-+                                      lun->dp = dp;
-+                                      qla2x00_add_lun(dp, lun);
-+                                      INIT_LIST_HEAD(&lun->ports_list);
-+                              }
-+                      }
-+                      else
-+                              printk(KERN_WARNING
-+                              "qla2x00: Couldn't get memory for dp. \n");
-+      }
-+
-+      DEBUG(printk("Exiting %s\n", __func__);)
-+      LEAVE("qla2x00_find_or_allocate_lun");
-+
-+      return lun;
-+}
-+
-+
- static uint32_t
- qla2x00_cfg_register_failover_lun(mp_device_t *dp, srb_t *sp, fc_lun_t *new_lp)
- {
-@@ -1832,7 +3478,7 @@ qla2x00_cfg_register_failover_lun(mp_dev
-       os_lun_t        *lq;
-       fc_lun_t        *old_lp;
--      DEBUG2(printk(KERN_INFO "%s: NEW fclun = %p, sp = %p\n",
-+      DEBUG(printk(KERN_INFO "%s: NEW fclun = %p, sp = %p\n",
-           __func__, new_lp, sp);)
-       /*
-@@ -1919,8 +3565,16 @@ qla2x00_send_failover_notify(mp_device_t
-       ENTER("qla2x00_send_failover_notify");
--      old_lp = qla2x00_find_matching_lun(lun, oldpath);
--      new_lp = qla2x00_find_matching_lun(lun, newpath);
-+      if( (old_lp = qla2x00_find_matching_lun(lun, dp, oldpath)) == NULL ) {
-+              DEBUG2(printk(KERN_INFO "%s: Failed to get old lun %p, %d\n",
-+                  __func__, old_lp,lun);)
-+              return QLA2X00_FUNCTION_FAILED;
-+      }
-+      if( (new_lp = qla2x00_find_matching_lun(lun, dp, newpath)) == NULL ) {
-+              DEBUG2(printk(KERN_INFO "%s: Failed to get new lun %p,%d\n",
-+                  __func__, new_lp,lun);)
-+              return QLA2X00_FUNCTION_FAILED;
-+      }
-       /*
-        * If the target is the same target, but a new HBA has been selected,
-@@ -1981,27 +3635,240 @@ qla2x00_send_failover_notify(mp_device_t
-                                   "lun=(%d).\n", __func__, lun);)
-                       }
-               }
--      } else if (qla_fo_params.FailoverNotifyType == FO_NOTIFY_TYPE_SPINUP ){
-+      } else if (qla_fo_params.FailoverNotifyType == FO_NOTIFY_TYPE_SPINUP ||
-+                      old_lp->fcport->notify_type == FO_NOTIFY_TYPE_SPINUP ){
-+
-+                      status = qla2x00_send_fo_notification(old_lp, new_lp);
-+                      if (status == QLA2X00_SUCCESS) {
-+                              /* EMPTY */
-+                              DEBUG(printk("%s: Send CDB succeeded.\n",
-+                                  __func__);)
-+                      } else {
-+                              /* EMPTY */
-+                              DEBUG(printk("%s: Send CDB Error "
-+                                  "lun=(%d).\n", __func__, lun);)
-+                      }
-+      } else {
-+              /* EMPTY */
-+              DEBUG4(printk("%s: failover disabled or no notify routine "
-+                  "defined.\n", __func__);)
-+      }
-+
-+      return status;
-+}
-+
-+static mp_path_t *
-+qla2x00_find_host_from_port(mp_device_t *dp, 
-+              mp_host_t *host,
-+              mp_port_t *port )
-+{
-+      unsigned long   instance;
-+      uint8_t         id;
-+      int             i;
-+      mp_path_t       *path = NULL;
-+
-+      /* get next host instance */
-+      instance = host->instance;
-+      for(i = 0 ; i < port->cnt ; i++ ) {
-+              instance = instance + 1;
-+              DEBUG3(printk("%s: Finding new instance %d, max %d, cnt %d\n",
-+                      __func__, (int)instance, port->cnt, i);)
-+              /* Handle wrap-around */
-+              if( instance == port->cnt )
-+                      instance = 0;
-+              if( port->hba_list[instance] == NULL )
-+                      continue;
-+              if( port->hba_list[instance] != host->ha )
-+                      break;
-+      }
-+      /* Found a different hba then return the path to it */
-+      if ( i != port->cnt ) {
-+              id = port->path_list[instance];
-+              DEBUG2(printk("%s: Changing to new host - pathid=%d\n",
-+                      __func__, id);)
-+              path = qla2x00_find_path_by_id(dp, id);
-+      }
-+      return( path );
-+}
-+
-+/*
-+ * Find_best_port
-+ * This routine tries to locate the best port to the target that 
-+ * doesn't require issuing a target notify command. 
-+ */
-+/* ARGSUSED */
-+static mp_path_t *
-+qla2x00_find_best_port(mp_device_t *dp, 
-+              mp_path_t *orig_path,
-+              mp_port_t *port,
-+              fc_lun_t *fclun )
-+{
-+      mp_path_t       *path = NULL;
-+      mp_path_t       *new_path;
-+      mp_port_t       *temp_port;
-+      int             i, found;
-+      fc_lun_t        *new_fp;
-+      struct list_head *list, *temp;
-+      mp_lun_t *mplun = (mp_lun_t *)fclun->mplun; 
-+      unsigned long   instance;
-+      uint16_t        id;
-+
-+      found = 0;
-+      list_for_each_safe(list, temp, &mplun->ports_list) {
-+              temp_port = list_entry(list, mp_port_t, list);
-+              if ( port == temp_port ) {
-+                      continue;
-+              }
-+              /* Search for an active matching lun on any HBA,
-+                 but starting with the orig HBA */
-+              instance = orig_path->host->instance;
-+              for(i = 0 ; i < temp_port->cnt ; instance++) {
-+                      if( instance == MAX_HOSTS )
-+                              instance = 0;
-+                      id = temp_port->path_list[instance];
-+                      DEBUG(printk(
-+                      "qla%d %s: i=%d, Checking temp port=%p, pathid=%d\n",
-+                              (int)instance,__func__, i, temp_port, id);)
-+                      if (id == PATH_INDEX_INVALID)
-+                              continue;
-+                      i++; /* found a valid hba entry */
-+                      new_fp = mplun->paths[id];
-+                      DEBUG(printk(
-+                      "qla%d %s: Checking fclun %p, for pathid=%d\n",
-+                              (int)instance,__func__, new_fp, id);)
-+                      if( new_fp == NULL ) 
-+                              continue;
-+                      new_path = qla2x00_find_path_by_id(dp, id);
-+                      if( new_path != NULL ) {
-+                      DEBUG(printk(
-+                      "qla%d %s: Found new path new_fp=%p, "
-+                      "path=%p, flags=0x%x\n",
-+                              (int)new_path->host->instance,__func__, new_fp, 
-+                              new_path, new_path->port->flags);)
-+
-+
-+                      if (atomic_read(&new_path->port->state) 
-+                              == FC_DEVICE_DEAD){
-+                       DEBUG2(printk("qla(%d) %s - Port (0x%04x) DEAD.\n",
-+                      (int)new_path->host->instance, __func__,
-+                      new_path->port->loop_id);)
-+                              continue;
-+                      }
-+
-+                      /* Is this path on an active controller? */
-+                      if( (new_path->port->flags & FC_EVA_DEVICE)  &&
-+                              !(new_fp->flags & FC_ACTIVE_LUN) ){
-+                       DEBUG2(printk("qla(%d) %s - EVA Port (0x%04x) INACTIVE.\n",
-+                      (int)new_path->host->instance, __func__,
-+                      new_path->port->loop_id);)
-+                              continue;
-+                      }
-+
-+                      if( (new_path->port->flags & FC_MSA_DEVICE)  &&
-+                                 !(new_path->port->flags & FC_MSA_PORT_ACTIVE) ) {
-+                       DEBUG2(printk("qla(%d) %s - MSA Port (0x%04x) INACTIVE.\n",
-+                      (int)new_path->host->instance, __func__,
-+                      new_path->port->loop_id);)
-+                              continue;
-+                      }
-+
-+                      /* found a good path */
-+                      DEBUG2(printk(
-+                      "qla%d %s: *** Changing from port %p to new port %p - pathid=%d\n",
-+                              (int)instance,__func__, port, temp_port, new_path->id); )
-+                       return( new_path );
-+                      }
-+              }
-+      }
-+
-+      return( path );
-+}
-+
-+/*
-+ * qla2x00_smart_failover
-+ *      This routine tries to be smart about how it selects the 
-+ *    next path. It selects the next path base on whether the
-+ *    loop went down or the port went down. If the loop went
-+ *    down it will select the next HBA. Otherwise, it will select
-+ *    the next port. 
-+ *
-+ * Inputs:
-+ *      device           Device being failed over.
-+ *      sp               Request that initiated failover.
-+ *      orig_path           path that was failed over from.
-+ *
-+ * Return:
-+ *      next path     next path to use. 
-+ *    flag            1 - Don't send notify command 
-+ *                    0 - Send notify command 
-+ *
-+ * Context:
-+ *      Kernel context.
-+ */
-+/* ARGSUSED */
-+static mp_path_t *
-+qla2x00_smart_path(mp_device_t *dp, 
-+      mp_path_t *orig_path, srb_t *sp, int *flag )
-+{
-+      mp_path_t       *path = NULL;
-+      fc_lun_t *fclun;
-+      mp_port_t *port;
-+      mp_host_t *host= orig_path->host;
-+              
-+      DEBUG2(printk("Entering %s - sp err = %d, instance =%d\n", 
-+              __func__, sp->err_id, (int)host->instance);)
--              if (newpath->lun_data.data[lun] & LUN_DATA_ENABLED) {
--                      status = qla2x00_send_fo_notification(old_lp, new_lp);
--                      if (status == QLA2X00_SUCCESS) {
--                              /* EMPTY */
--                              DEBUG(printk("%s: Send CDB succeeded.\n",
--                                  __func__);)
--                      } else {
--                              /* EMPTY */
--                              DEBUG(printk("%s: Send CDB Error "
--                                  "lun=(%d).\n", __func__, lun);)
-+ 
-+      qla2x00_find_all_active_ports(sp);
-+      if( sp != NULL ) {
-+              fclun = sp->lun_queue->fclun;
-+              if( fclun == NULL ) {
-+                      printk( KERN_INFO
-+                      "scsi%d %s: couldn't find fclun %p pathid=%d\n",
-+                              (int)host->instance,__func__, fclun, orig_path->id);
-+                      return( orig_path->next );
-+              }
-+              port = qla2x00_find_port_by_name( 
-+                      (mp_lun_t *)fclun->mplun, orig_path);
-+              if( port == NULL ) {
-+                      printk( KERN_INFO
-+                      "scsi%d %s: couldn't find MP port %p pathid=%d\n",
-+                              (int)host->instance,__func__, port, orig_path->id);
-+                      return( orig_path->next );
-+              } 
-+
-+              /* Change to next HOST if loop went down */
-+              if( sp->err_id == SRB_ERR_LOOP )  {
-+                      path = qla2x00_find_host_from_port(dp, 
-+                                      host, port );
-+                      if( path != NULL ) {
-+                              port->fo_cnt++;
-+                              *flag = 1;
-+                              /* if we used all the hbas then 
-+                              try and get another port */ 
-+                              if( port->fo_cnt > port->cnt ) {
-+                                      port->fo_cnt = 0;
-+                                      *flag = 0;
-+                                      path = 
-+                                        qla2x00_find_best_port(dp, 
-+                                              orig_path, port, fclun );
-+                                      if( path )
-+                                              *flag = 1;
-+                              }
-                       }
-+              } else {
-+                      path = qla2x00_find_best_port(dp, 
-+                              orig_path, port, fclun );
-+                      if( path )
-+                              *flag = 1;
-               }
--      } else {
--              /* EMPTY */
--              DEBUG4(printk("%s: failover disabled or no notify routine "
--                  "defined.\n", __func__);)
-       }
-+      /* Default path is next path*/
-+      if (path == NULL) 
-+              path = orig_path->next;
--      return status;
-+      DEBUG3(printk("Exiting %s\n", __func__);)
-+      return path;
- }
- /*
-@@ -2022,7 +3889,8 @@ qla2x00_send_failover_notify(mp_device_t
-  *      Kernel context.
-  */
- static mp_path_t *
--qla2x00_select_next_path(mp_host_t *host, mp_device_t *dp, uint8_t lun)
-+qla2x00_select_next_path(mp_host_t *host, mp_device_t *dp, uint8_t lun,
-+      srb_t *sp)
- {
-       mp_path_t       *path = NULL;
-       mp_path_list_t  *path_list;
-@@ -2030,6 +3898,11 @@ qla2x00_select_next_path(mp_host_t *host
-       int             id;
-       uint32_t        status;
-       mp_host_t *new_host;
-+      int     skip_notify= 0;
-+#if 0
-+      fc_lun_t        *new_fp = NULL;
-+#endif
-+      
-       ENTER("qla2x00_select_next_path:");
-@@ -2044,20 +3917,25 @@ qla2x00_select_next_path(mp_host_t *host
-       if ((orig_path = qla2x00_find_path_by_id(dp, id)) != NULL) {
-               /* select next path */
--              path = orig_path->next;
-+                      if ( orig_path->port &&
-+                 (orig_path->port->flags & (FC_MSA_DEVICE|FC_EVA_DEVICE)) ) {
-+                      path = qla2x00_smart_path( dp, orig_path, 
-+                              sp, &skip_notify ); 
-+              } else
-+                      path = orig_path->next;
-               new_host = path->host;
-               /* FIXME may need to check for HBA being reset */
--              DEBUG3(printk("%s: orig path = %p new path = %p " 
-+              DEBUG2(printk("%s: orig path = %p new path = %p " 
-                   "curr idx = %d, new idx = %d\n",
-                   __func__, orig_path, path, orig_path->id, path->id);)
--              DEBUG3(printk("  FAILOVER: device nodename: "
-+              DEBUG(printk("  FAILOVER: device nodename: "
-                   "%02x%02x%02x%02x%02x%02x%02x%02x\n",
-                   dp->nodename[0], dp->nodename[1],
-                   dp->nodename[2], dp->nodename[3],
-                   dp->nodename[4], dp->nodename[5],
-                   dp->nodename[6], dp->nodename[7]);)
--              DEBUG3(printk(" Original  - host nodename: "
-+              DEBUG(printk(" Original  - host nodename: "
-                   "%02x%02x%02x%02x%02x%02x%02x%02x\n",
-                   orig_path->host->nodename[0],
-                   orig_path->host->nodename[1],
-@@ -2067,7 +3945,7 @@ qla2x00_select_next_path(mp_host_t *host
-                   orig_path->host->nodename[5],
-                   orig_path->host->nodename[6],
-                   orig_path->host->nodename[7]);)
--              DEBUG3(printk("   portname: "
-+              DEBUG(printk("   portname: "
-                   "%02x%02x%02x%02x%02x%02x%02x%02x\n",
-                   orig_path->port->port_name[0],
-                   orig_path->port->port_name[1],
-@@ -2077,13 +3955,13 @@ qla2x00_select_next_path(mp_host_t *host
-                   orig_path->port->port_name[5],
-                   orig_path->port->port_name[6],
-                   orig_path->port->port_name[7]);)
--              DEBUG3(printk(" New  - host nodename: "
-+              DEBUG(printk(" New  - host nodename: "
-                   "%02x%02x%02x%02x%02x%02x%02x%02x\n",
-                   new_host->nodename[0], new_host->nodename[1],
-                   new_host->nodename[2], new_host->nodename[3],
-                   new_host->nodename[4], new_host->nodename[5],
-                   new_host->nodename[6], new_host->nodename[7]);)
--              DEBUG3(printk("   portname: "
-+              DEBUG(printk("   portname: "
-                   "%02x%02x%02x%02x%02x%02x%02x%02x\n",
-                   path->port->port_name[0],
-                   path->port->port_name[1],
-@@ -2095,9 +3973,8 @@ qla2x00_select_next_path(mp_host_t *host
-                   path->port->port_name[7]);)
-               path_list->current_path[lun] = path->id;
--
-               /* If we selected a new path, do failover notification. */
--              if (path != orig_path) {
-+              if ( (path != orig_path) && !skip_notify ) {
-                       status = qla2x00_send_failover_notify(
-                                       dp, lun, path, orig_path);
-@@ -2133,7 +4010,7 @@ qla2x00_update_mp_host(mp_host_t  *host)
- {
-       BOOL            success = TRUE;
-       uint16_t        dev_id;
--      fc_port_t       *port;
-+      fc_port_t       *fcport;
-       scsi_qla_host_t *ha = host->ha;
-       ENTER("qla2x00_update_mp_host");
-@@ -2142,20 +4019,26 @@ qla2x00_update_mp_host(mp_host_t  *host)
-       /*
-        * We make sure each port is attached to some virtual device.
-        */
--      for (dev_id = 0, port = ha->fcport; (port);
--          port = port->next, dev_id++) {
-+      dev_id = 0;
-+      fcport = NULL;
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-+              if(fcport->port_type != FCT_TARGET)
-+                      continue;
-               DEBUG3(printk("%s(%ld): checking fcport list. update port "
-                   "%p-%02x%02x%02x%02x%02x%02x%02x%02x dev_id %d "
-                   "to ha inst %ld.\n",
-                   __func__, ha->host_no,
--                  port,
--                  port->port_name[0], port->port_name[1],
--                  port->port_name[2], port->port_name[3],
--                  port->port_name[4], port->port_name[5],
--                  port->port_name[6], port->port_name[7],
-+                  fcport,
-+                  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],
-                   dev_id, ha->instance);)
--              success |= qla2x00_update_mp_device(host, port, dev_id, 0);
-+
-+              qla2x00_configure_cfg_device(fcport);
-+              success |= qla2x00_update_mp_device(host, fcport, dev_id, 0);
-+              dev_id++;
-       }
-       if (success) {
-               DEBUG2(printk(KERN_INFO "%s: Exit OK\n", __func__);)
-@@ -2165,7 +4048,7 @@ qla2x00_update_mp_host(mp_host_t  *host)
-               DEBUG2(printk(KERN_INFO "%s: Exit FAILED\n", __func__);)
-       }
--      DEBUG3(printk("%s: inst %ld exiting.\n", __func__, ha->instance);)
-+      DEBUG2(printk("%s: inst %ld exiting.\n", __func__, ha->instance);)
-       LEAVE("qla2x00_update_mp_host");
-       return success;
-@@ -2209,48 +4092,51 @@ qla2x00_update_mp_device(mp_host_t *host
-           dev_id);)
-       if (!qla2x00_is_ww_name_zero(port->port_name)) {
--
-+              if( port->fo_combine ) {
-+                      return( port->fo_combine(host, dev_id, port, pathid) );
-+              }
-               /*
--               * Search for a device with a matching node name,
--               * or create one.
--               */
-+              * Search for a device with a matching node name,
-+              * portname or create one.
-+              */
-               dp = qla2x00_find_or_allocate_mp_dev(host, dev_id, port);
-               /*
--               * We either have found or created a path list. Find this
--               * host's path in the path list or allocate a new one
--               * and add it to the list.
--               */
-+              * We either have found or created a path list. Find this
-+              * host's path in the path list or allocate a new one
-+              * and add it to the list.
-+              */
-               if (dp == NULL) {
-                       /* We did not create a mp_dev for this port. */
-                       port->mp_byte |= MP_MASK_UNCONFIGURED;
-                       DEBUG4(printk("%s: Device NOT found or created at "
--                          " dev_id=%d.\n",
--                          __func__, dev_id);)
-+                      " dev_id=%d.\n",
-+                      __func__, dev_id);)
-                       return FALSE;
-               }
-               /*
--               * Find the path in the current path list, or allocate
--               * a new one and put it in the list if it doesn't exist.
--               * Note that we do NOT set bSuccess to FALSE in the case
--               * of failure here.  We must tolerate the situation where
--               * the customer has more paths to a device than he can
--               * get into a PATH_LIST.
--               */
--
-+              * Find the path in the current path list, or allocate
-+              * a new one and put it in the list if it doesn't exist.
-+              * Note that we do NOT set bSuccess to FALSE in the case
-+              * of failure here.  We must tolerate the situation where
-+              * the customer has more paths to a device than he can
-+              * get into a PATH_LIST.
-+              */
-+      
-               path = qla2x00_find_or_allocate_path(host, dp, dev_id,
-                   pathid, port);
-               if (path == NULL) {
-                       DEBUG4(printk("%s:Path NOT found or created.\n",
--                          __func__);)
-+                      __func__);)
-                       return FALSE;
-               }
-+
-               /* Set the PATH flag to match the device flag
--               * of whether this device needs a relogin.  If any
--               * device needs relogin, set the relogin countdown.
--               */
-+              * of whether this device needs a relogin.  If any
-+              * device needs relogin, set the relogin countdown.
-+              */
-               if (port->flags & FC_CONFIG)
-                       path->config = TRUE;
-@@ -2261,7 +4147,6 @@ qla2x00_update_mp_device(mp_host_t *host
-               } else {
-                       path->relogin = FALSE;
-               }
--
-       } else {
-               /* EMPTY */
-               DEBUG4(printk("%s: Failed portname empty.\n",
-@@ -2306,7 +4191,7 @@ qla2x00_update_mp_tree(void)
-               /* Override the NEEDS_UPDATE flag if disabled. */
-               if (host->flags & MP_HOST_FLAG_DISABLE ||
--                  host->fcport == NULL)
-+                  list_empty(host->fcports))
-                       host->flags &= ~MP_HOST_FLAG_NEEDS_UPDATE;
-               if (host->flags & MP_HOST_FLAG_NEEDS_UPDATE) {
-@@ -2344,7 +4229,7 @@ qla2x00_update_mp_tree(void)
- /*
-- * qla2x00_find_matching_lun
-+ * qla2x00_find_matching_lun_by_num
-  *      Find the lun in the path that matches the
-  *  specified lun number.
-  *
-@@ -2360,23 +4245,49 @@ qla2x00_update_mp_tree(void)
-  * (dg)
-  */
- static fc_lun_t  *
--qla2x00_find_matching_lun(uint8_t lun, mp_path_t *newpath)
-+qla2x00_find_matching_lun_by_num(uint16_t lun_no, mp_device_t *dp,
-+      mp_path_t *newpath)
- {
--      fc_lun_t *lp = NULL;    /* lun ptr */
--      fc_lun_t *nlp;                  /* Next lun ptr */
--      fc_port_t *port;                /* port ptr */
--
--      if ((port = newpath->port) != NULL) {
--              for (nlp = port->fclun; (nlp); nlp = nlp->next) {
--                      if (lun == nlp->lun) {
--                              lp = nlp;
-+      int found;
-+      fc_lun_t  *lp = NULL;   /* lun ptr */
-+      fc_port_t *fcport;              /* port ptr */
-+      mp_lun_t  *lun;
-+
-+      /* Use the lun list if we have one */   
-+      if( dp->luns ) {
-+              for (lun = dp->luns; lun != NULL ; lun = lun->next) {
-+                      if( lun_no == lun->number ) {
-+                              lp = lun->paths[newpath->id];
-                               break;
-                       }
-               }
-+      } else {
-+              if ((fcport = newpath->port) != NULL) {
-+                      found = 0;
-+                      list_for_each_entry(lp, &fcport->fcluns, list) {
-+                              if (lun_no == lp->lun) {
-+                                      found++;
-+                                      break;
-+                              }
-+                      }
-+                      if (!found)
-+                              lp = NULL;
-+              }
-       }
-       return lp;
- }
-+static fc_lun_t  *
-+qla2x00_find_matching_lun(uint8_t lun, mp_device_t *dp, 
-+      mp_path_t *newpath)
-+{
-+      fc_lun_t *lp;
-+
-+      lp = qla2x00_find_matching_lun_by_num(lun, dp, newpath);
-+
-+      return lp;
-+}
-+
- /*
-  * qla2x00_find_path_by_name
-  *      Find the path specified portname from the pathlist
-@@ -2401,7 +4312,7 @@ qla2x00_find_path_by_name(mp_host_t *hos
-       int cnt;
-       if ((tmp_path = plp->last) != NULL) {
--              for (cnt = 0; cnt < plp->path_cnt; cnt++) {
-+              for (cnt = 0; (tmp_path) && cnt < plp->path_cnt; cnt++) {
-                       if (tmp_path->host == host &&
-                               qla2x00_is_portname_equal(
-                                       tmp_path->portname, portname)) {
-@@ -2496,12 +4407,22 @@ qla2x00_find_mp_dev_by_nodename(mp_host_
-               if ((dp = host->mp_devs[id] ) == NULL)
-                       continue;
-+#if 0
-+              if (qla2x00_is_nodename_in_device(dp, name)) {
-+                      DEBUG(printk("%s: Found matching device @ index %d:\n",
-+                          __func__, id);)
-+                      return dp;
-+              }
-+#else
-+DEBUG(printk("%s mpdev_nodename=%0x nodename_from_gui=%0x",__func__,dp->nodename[7],name[7]);)
-               if (qla2x00_is_nodename_equal(dp->nodename, name)) {
-                       DEBUG3(printk("%s: Found matching device @ index %d:\n",
-                           __func__, id);)
-                       return dp;
-               }
-+#endif
-       }
-+printk("%s could not find the node name\n",__func__);
-       LEAVE("qla2x00_find_mp_dev_by_name");
-@@ -2521,11 +4442,11 @@ qla2x00_find_mp_dev_by_nodename(mp_host_
-  * Context:
-  *      Kernel context.
-  */
--static mp_device_t  *
-+mp_device_t  *
- qla2x00_find_mp_dev_by_portname(mp_host_t *host, uint8_t *name, uint16_t *pidx)
- {
-       int             id;
--      mp_device_t     *dp;
-+      mp_device_t     *dp = NULL;
-       DEBUG3(printk("%s: entered.\n", __func__);)
-@@ -2661,10 +4582,10 @@ qla2x00_map_os_targets(mp_host_t *host)
-                           __func__, t, dp, host,ha);)
-                       if ((path = qla2x00_get_visible_path(dp)) == NULL) {
--                              printk(KERN_INFO
-+                              DEBUG( printk(KERN_INFO
-                                   "qla_cfg(%d): No visible path "
-                                   "for target %d, dp = %p\n",
--                                  host->instance, t, dp);
-+                                  host->instance, t, dp); )
-                               continue;
-                       }
-@@ -2677,19 +4598,20 @@ qla2x00_map_os_targets(mp_host_t *host)
-                                                       WWN_SIZE);
-                                       tgt->vis_port = path->port;
-                               }
--                              DEBUG3(printk("%s(%ld): host=%d, "
--                                  "device= %p has VISIBLE "
--                                  "path=%p, path id=%d\n",
-+                              DEBUG3(printk("%s(%ld): host instance =%d, "
-+                                  "device= %p, tgt=%d has VISIBLE path,"
-+                                  "path id=%d\n",
-                                   __func__, ha->host_no,
-                                   host->instance,
--                                  dp, path, path->id);)
-+                                  dp, t, path->id);)
-                       } else {
--                      /* EMPTY */
--                              DEBUG3(printk("%s(%ld): host=%d, "
--                                  "device= %p has HIDDEN "
--                                  "path=%p, path id=%d\n",
-+                              DEBUG3(printk("%s(%ld): host instance =%d, "
-+                                  "device= %p, tgt=%d has HIDDEN "
-+                                  "path, path id=%d\n",
-                                   __func__, ha->host_no,
--                                  host->instance, dp, path,path->id);)
-+                                  host->instance, dp, t, 
-+                                      path->id); )
-+                              continue;
-                       }
-                       qla2x00_map_os_luns(host, dp, t);
-               } else {
-@@ -2702,6 +4624,28 @@ qla2x00_map_os_targets(mp_host_t *host)
-       LEAVE("qla2x00_map_os_targets ");
- }
-+static void
-+qla2x00_map_or_failover_oslun(mp_host_t *host, mp_device_t *dp, 
-+      uint16_t t, uint16_t lun_no)
-+{
-+      int     i;
-+
-+      /* 
-+       * if this is initization time and we couldn't map the
-+       * lun then try and find a usable path.
-+       */
-+      if ( qla2x00_map_a_oslun(host, dp, t, lun_no) &&
-+              (host->flags & MP_HOST_FLAG_LUN_FO_ENABLED) ){
-+              /* find a path for us to use */
-+              for ( i = 0; i < dp->path_list->path_cnt; i++ ){
-+                      qla2x00_select_next_path(host, dp, lun_no, NULL);
-+                      if( !qla2x00_map_a_oslun(host, dp, t, lun_no))
-+                              break;
-+              }
-+      }
-+}
-+
-+
- /*
-  * qla2x00_map_os_luns
-  *      Allocate the luns for the OS target.
-@@ -2719,20 +4663,37 @@ qla2x00_map_os_targets(mp_host_t *host)
- static void
- qla2x00_map_os_luns(mp_host_t *host, mp_device_t *dp, uint16_t t)
- {
--      uint16_t lun;
--      int     i;
--
--      for (lun = 0; lun < MAX_LUNS; lun++ ) {
--              if ( qla2x00_map_a_oslun(host, dp, t, lun) &&
--                      (host->flags & MP_HOST_FLAG_LUN_FO_ENABLED) ){
--                      /* find a path for us to use */
--                      for ( i = 0; i < dp->path_list->path_cnt; i++ ){
--                              qla2x00_select_next_path(host, dp, lun);
--                              if( !qla2x00_map_a_oslun(host, dp, t, lun))
--                                      break;
-+      uint16_t lun_no;
-+      mp_lun_t        *lun;
-+      os_lun_t *up;
-+
-+      DEBUG3(printk("Entering %s..\n",__func__);)
-+
-+      /* if we are using lun binding then scan for the discovered luns */
-+      if( dp->luns ) {
-+              for (lun = dp->luns; lun != NULL ; lun = lun->next) {
-+                      lun_no = lun->number;
-+                      DEBUG2(printk("%s: instance %d: Mapping target %d, lun %d..\n",
-+                              __func__,host->instance,t,lun->number);)
-+                      qla2x00_map_or_failover_oslun(host, dp, 
-+                              t, lun_no);
-+                      up = (os_lun_t *) GET_LU_Q(host->ha, t, lun_no);
-+                      if (up == NULL || up->fclun == NULL) {
-+                      DEBUG2(printk("%s: instance %d: No FCLUN for target %d, lun %d.. \n",
-+                              __func__,host->instance,t,lun->number);)
-+                              continue;
-                       }
-+                      DEBUG2(printk("%s: instance %d: Mapping target %d, lun %d.. to path id %d\n",
-+                              __func__,host->instance,t,lun->number,
-+                          up->fclun->fcport->cur_path);)
-+              }
-+      } else {
-+              for (lun_no = 0; lun_no < MAX_LUNS; lun_no++ ) {
-+                      qla2x00_map_or_failover_oslun(host, dp, 
-+                              t, lun_no);
-               }
-       }
-+      DEBUG3(printk("Exiting %s..\n",__func__);)
- }
- /*
-@@ -2763,18 +4724,23 @@ qla2x00_map_a_oslun(mp_host_t *host, mp_
-       BOOL            status = FALSE;
-       if ((id = dp->path_list->current_path[lun]) != PATH_INDEX_INVALID) {
-+              DEBUG(printk( "qla2x00(%d): Current path for lun %d is path id %d\n",
-+                  host->instance,
-+                  lun, id);)
-               path = qla2x00_find_path_by_id(dp,id);
-               if (path) {
-                       fcport = path->port;
-                       if (fcport) {
--                              /* dg 04/26/02 */
-+
-                               fcport->cur_path = id;
--                              fclun = qla2x00_find_matching_lun(lun,path);
-+                              fclun = qla2x00_find_matching_lun(lun,dp,path);
-+              DEBUG2(printk( "qla2x00(%d): found fclun %p, path id = %d\n", host->instance,fclun,id);)
-                               /* Always map all luns if they are enabled */
-                               if (fclun &&
-                                       (path->lun_data.data[lun] &
-                                        LUN_DATA_ENABLED) ) {
-+              DEBUG(printk( "qla2x00(%d): Lun is enable \n", host->instance);)
-                                       /*
-                                        * Mapped lun on the visible path
-@@ -2791,10 +4757,10 @@ qla2x00_map_a_oslun(mp_host_t *host, mp_
-                                                   t, dp);
-                                               return FALSE;
--                                      }
--
-+                                      } 
-                                       vis_host = vis_path->host;
-+
-                                       /* ra 11/30/01 */
-                                       /*
-                                        * Always alloc LUN 0 so kernel
-@@ -2814,6 +4780,8 @@ qla2x00_map_a_oslun(mp_host_t *host, mp_
-                                               lq->fclun = fclun;
-                                       }
-+              DEBUG(printk( "qla2x00(%d): lun allocated %p for lun %d\n",
-+                       host->instance,lq,lun);)
-                               }
-                       }
-                       else
-@@ -2892,6 +4860,28 @@ qla2x00_add_path( mp_path_list_t *pathli
-       LEAVE("qla2x00_add_path");
- }
-+static void
-+qla2x00_add_lun( mp_device_t *dp, mp_lun_t *lun)
-+{
-+      mp_lun_t        *cur_lun;
-+
-+      ENTER("qla2x00_add_lun");
-+
-+      /* Insert new entry into the list of luns */
-+      lun->next = NULL;
-+
-+      cur_lun = dp->luns;
-+      if( cur_lun == NULL ) {
-+              dp->luns = lun;
-+      } else {
-+              /* add to tail of list */
-+              while( cur_lun->next != NULL )
-+                      cur_lun = cur_lun->next;
-+
-+              cur_lun->next = lun;
-+      }
-+      LEAVE("qla2x00_add_lun");
-+}
- /*
-  * qla2x00_is_portname_in_device
-@@ -2919,6 +4909,49 @@ qla2x00_is_portname_in_device(mp_device_
-       return FALSE;
- }
-+#if 0
-+static BOOL
-+qla2x00_is_pathid_in_port(mp_port_t *port, uint8_t pathid)
-+{
-+      int i;
-+      uint8_t id;
-+
-+      for(i = 0 ; i < port->cnt ; i++ ) {
-+              id = port->path_list[i];
-+              if( id == pathid )
-+                      return TRUE;
-+      }
-+      return FALSE;
-+}
-+#endif
-+
-+#if 0
-+/*
-+ * qla2x00_is_nodename_in_device
-+ *    Search for the specified "nodename" in the device list.
-+ *
-+ * Input:
-+ *    dp = device pointer
-+ *    nodename = nodename to searched for in device
-+ *
-+ * Returns:
-+ *      qla2x00 local function return status code.
-+ *
-+ * Context:
-+ *      Kernel context.
-+ */
-+static BOOL
-+qla2x00_is_nodename_in_device(mp_device_t *dp, uint8_t *nodename)
-+{
-+      int idx;
-+
-+      for (idx = 0; idx < MAX_PATHS_PER_DEVICE; idx++) {
-+              if (memcmp(&dp->nodenames[idx][0], nodename, WWN_SIZE) == 0)
-+                      return TRUE;
-+      }
-+      return FALSE;
-+}
-+#endif
- /*
-  *  qla2x00_set_lun_data_from_bitmask
-@@ -2979,9 +5012,9 @@ qla2x00_failback_single_lun(mp_device_t 
-               return;
-       /* An fclun should exist for the failbacked lun */
--      if (qla2x00_find_matching_lun(lun, new_path) == NULL)
-+      if (qla2x00_find_matching_lun(lun, dp, new_path) == NULL)
-               return;
--      if (qla2x00_find_matching_lun(lun, old_path) == NULL)
-+      if (qla2x00_find_matching_lun(lun, dp, old_path) == NULL)
-               return;
-       /* Log to console and to event log. */
-@@ -3029,6 +5062,91 @@ qla2x00_failback_single_lun(mp_device_t 
-       }
- }
-+#if 0
-+static void
-+qla2x00_failback_single_lun(mp_device_t *dp, uint8_t lun, uint8_t new)
-+{
-+      mp_path_list_t   *pathlist;
-+      mp_path_t        *new_path, *old_path;
-+      uint8_t         old;
-+      mp_host_t  *new_host;
-+      os_lun_t *lq;
-+      mp_path_t       *vis_path;
-+      mp_host_t       *vis_host;
-+      int             status;
-+
-+      /* Failback and update statistics. */
-+      if ((pathlist = dp->path_list) == NULL)
-+              return;
-+
-+      old = pathlist->current_path[lun];
-+      /* pathlist->current_path[lun] = new; */
-+
-+      if ((new_path = qla2x00_find_path_by_id(dp, new)) == NULL)
-+              return;
-+      if ((old_path = qla2x00_find_path_by_id(dp, old)) == NULL)
-+              return;
-+
-+      /* An fclun should exist for the failbacked lun */
-+      if (qla2x00_find_matching_lun(lun, dp, new_path) == NULL)
-+              return;
-+      if (qla2x00_find_matching_lun(lun, dp, old_path) == NULL)
-+              return;
-+
-+      if ((vis_path = qla2x00_get_visible_path(dp)) == NULL) {
-+              printk(KERN_INFO
-+                      "No visible path for "
-+                      "target %d, dp = %p\n",
-+                      dp->dev_id, dp);
-+              return;
-+      }
-+      vis_host = vis_path->host;
-+      /* Schedule the recovery before we move the luns */
-+      if( (lq = (os_lun_t *) 
-+              LUN_Q(vis_host->ha, dp->dev_id, lun)) == NULL ) {
-+              printk(KERN_INFO
-+                      "qla2x00(%d): No visible lun for "
-+                      "target %d, dp = %p, lun=%d\n",
-+                      vis_host->instance,
-+                      dp->dev_id, dp, lun);
-+              return;
-+      }
-+
-+      qla2x00_delay_lun(vis_host->ha, lq, recoveryTime);
-+
-+      /* Log to console and to event log. */
-+      printk(KERN_INFO
-+              "qla2x00: FAILBACK device %d -> "
-+              "%02x%02x%02x%02x%02x%02x%02x%02x LUN %02x\n",
-+              dp->dev_id,
-+              dp->nodename[0], dp->nodename[1],
-+              dp->nodename[2], dp->nodename[3],
-+              dp->nodename[4], dp->nodename[5],
-+              dp->nodename[6], dp->nodename[7],
-+              lun);
-+
-+      printk(KERN_INFO
-+              "qla2x00: FROM HBA %d to HBA %d \n",
-+              old_path->host->instance,
-+              new_path->host->instance);
-+
-+
-+      /* Send a failover notification. */
-+      status = qla2x00_send_failover_notify(dp, lun, 
-+                      new_path, old_path);
-+
-+      new_host =      new_path->host;
-+
-+      /* remap the lun */
-+      if (status == QLA2X00_SUCCESS ) {
-+              pathlist->current_path[lun] = new;
-+              qla2x00_map_a_oslun(new_host, dp, dp->dev_id, lun);
-+              qla2x00_flush_failover_q(vis_host->ha, lq);
-+              qla2x00_reset_lun_fo_counts(vis_host->ha, lq);
-+      }
-+}
-+#endif
-+
- /*
- *  qla2x00_failback_luns
- *      This routine looks through the devices on an adapter, and
-@@ -3077,6 +5195,9 @@ qla2x00_failback_luns( mp_host_t  *host)
-                       if (atomic_read(&path->port->state) == FC_DEVICE_DEAD)
-                               continue;
-+                      if ( (path->port->flags & FC_FAILBACK_DISABLE) )
-+                              continue;
-+
-                       /* 
-                        * Failback all the paths for this host,
-                        * the luns could be preferred across all paths 
-@@ -3112,7 +5233,7 @@ qla2x00_failback_luns( mp_host_t  *host)
-                                       /* No point in failing back a
-                                          disconnected lun */
-                                       new_fp = qla2x00_find_matching_lun(
--                                                      l, path);
-+                                                      l, dp, path);
-                                       if (new_fp == NULL)
-                                               continue;
-@@ -3132,6 +5253,41 @@ qla2x00_failback_luns( mp_host_t  *host)
-       return;
- }
-+static struct _mp_path *
-+qla2x00_find_first_active_path( mp_device_t *dp, mp_lun_t *lun)
-+{
-+      mp_path_t *path= NULL;
-+      mp_path_list_t  *plp = dp->path_list;
-+      mp_path_t  *tmp_path;
-+      fc_port_t       *fcport;
-+      fc_lun_t        *fclun;
-+      int cnt;
-+
-+      if ((tmp_path = plp->last) != NULL) {
-+              tmp_path = tmp_path->next;
-+              for (cnt = 0; (tmp_path) && cnt < plp->path_cnt;
-+                      tmp_path = tmp_path->next, cnt++) {
-+                      fcport = tmp_path->port;
-+                      if ( fcport != NULL  ) {
-+                           if( (fcport->flags & FC_EVA_DEVICE) ) { 
-+                                fclun = lun->paths[tmp_path->id];
-+                                if ( fclun == NULL )
-+                                      continue;
-+                                if (fclun->flags & FC_ACTIVE_LUN ){
-+                                      path = tmp_path;
-+                                      break;
-+                                }
-+                           } else 
-+                              if ( (fcport->flags & FC_MSA_PORT_ACTIVE)  ){
-+                              path = tmp_path;
-+                              break;
-+                           }
-+                      }
-+              }
-+      }
-+      return path;
-+}
-+
- /*
-  *  qla2x00_setup_new_path
-  *      Checks the path against the existing paths to see if there
-@@ -3146,7 +5302,7 @@ qla2x00_failback_luns( mp_host_t  *host)
-  *      None
-  */
- static void
--qla2x00_setup_new_path( mp_device_t *dp, mp_path_t *path)
-+qla2x00_setup_new_path( mp_device_t *dp, mp_path_t *path, fc_port_t *fcport)
- {
-       mp_path_list_t  *path_list = dp->path_list;
-       mp_path_t       *tmp_path, *first_path;
-@@ -3158,6 +5314,12 @@ qla2x00_setup_new_path( mp_device_t *dp,
-       int             i;
-       ENTER("qla2x00_setup_new_path");
-+      DEBUG(printk("qla2x00_setup_new_path: path %p path id %d\n", 
-+              path, path->id);)
-+      if( path->port ){
-+              DEBUG(printk("qla2x00_setup_new_path: port %p loop id 0x%x\n", 
-+              path->port, path->port->loop_id);)
-+      }
-       /* If this is a visible path, and there is not already a
-        * visible path, save it as the visible path.  If there
-@@ -3215,30 +5377,35 @@ qla2x00_setup_new_path( mp_device_t *dp,
-               }
-       }
--      /*
--       * For each LUN, evaluate whether the new path that is added
--       * is better than the existing path.  If it is, make it the
--       * current path for the LUN.
--       */
--      for (lun = 0; lun < MAX_LUNS_PER_DEVICE; lun++) {
--              l = (uint8_t)(lun & 0xFF);
--
--              /* If this is the first path added, it is the only
--               * available path, so make it the current path.
-+      if( !(fcport->flags & (FC_MSA_DEVICE|FC_EVA_DEVICE)) ) { 
-+              /*
-+               * For each LUN, evaluate whether the new path that is added is
-+               * better than the existing path.  If it is, make it the
-+               * current path for the LUN.
-                */
-+              for (lun = 0; lun < MAX_LUNS_PER_DEVICE; lun++) {
-+                      l = (uint8_t)(lun & 0xFF);
--              DEBUG4(printk("%s: lun_data 0x%x, LUN %d\n",
--                  __func__, path->lun_data.data[l], lun);)
--
--              if (first_path == path) {
--                      path_list->current_path[l] = 0;
--                      path->lun_data.data[l] |=  LUN_DATA_PREFERRED_PATH;
--              } else if (path->lun_data.data[l] & LUN_DATA_PREFERRED_PATH) {
-                       /*
--                       * If this is not the first path added, if this is
--                       * the preferred path, make it the current path.
-+                       * If this is the first path added, it is the only
-+                       * available path, so make it the current path.
-                        */
--                      path_list->current_path[l] = path->id;
-+                      DEBUG4(printk("%s: lun_data 0x%x, LUN %d\n",
-+                          __func__, path->lun_data.data[l], lun);)
-+
-+                      if (first_path == path) {
-+                              path_list->current_path[l] = 0;
-+                              path->lun_data.data[l] |=
-+                                  LUN_DATA_PREFERRED_PATH;
-+                      } else if (path->lun_data.data[l] &
-+                          LUN_DATA_PREFERRED_PATH) {
-+                              /*
-+                               * If this is not the first path added, if this
-+                               * is the preferred path, so make it the
-+                               * current path.
-+                               */
-+                              path_list->current_path[l] = path->id;
-+                      }
-               }
-       }
-@@ -3260,10 +5427,14 @@ qla2x00_setup_new_path( mp_device_t *dp,
- void
- qla2x00_cfg_mem_free(scsi_qla_host_t *ha)
- {
-+      mp_lun_t        *cur_lun;
-+      mp_lun_t        *tmp_lun; 
-       mp_device_t *dp;
-       mp_path_list_t  *path_list;
-       mp_path_t       *tmp_path, *path;
-       mp_host_t       *host, *temp;
-+      mp_port_t       *temp_port;
-+      struct list_head *list, *temp_list;
-       int     id, cnt;
-       if ((host = qla2x00_cfg_find_host(ha)) != NULL) {
-@@ -3300,6 +5471,31 @@ qla2x00_cfg_mem_free(scsi_qla_host_t *ha
-                                       temp->mp_devs[id] = NULL;
-                               }
-                       }
-+                      /* Free all the lun struc's attached 
-+                       * to this mp_device */
-+                      for ( cur_lun = dp->luns; (cur_lun); 
-+                                      cur_lun = cur_lun->next) {
-+                              DEBUG(printk(KERN_INFO
-+                                              "host%d - Removing lun:%p "
-+                                              "attached to device:%p\n",
-+                                              host->instance,
-+                                              cur_lun,dp);)
-+                              list_for_each_safe(list, temp_list, 
-+                                      &cur_lun->ports_list) {
-+              
-+                                      temp_port = list_entry(list, mp_port_t, list);
-+                                      list_del_init(&temp_port->list);
-+                              
-+                                      DEBUG(printk(KERN_INFO
-+                                              "host%d - Removing port:%p "
-+                                              "attached to lun:%p\n",
-+                                              host->instance, temp_port,
-+                                              cur_lun);)
-+      
-+                              }
-+                              tmp_lun = cur_lun;
-+                              KMEM_FREE(tmp_lun,sizeof(mp_lun_t));
-+                      }
-                       KMEM_FREE(dp, sizeof(mp_device_t));
-               }
-@@ -3331,68 +5527,43 @@ qla2x00_cfg_mem_free(scsi_qla_host_t *ha
- }
- UINT8
--qla2x00_is_fcport_in_config(scsi_qla_host_t *ha, fc_port_t *fcport)
-+qla2x00_is_fcport_in_foconfig(scsi_qla_host_t *ha, fc_port_t *fcport)
- {
--      if (ha->flags.failover_enabled) {
--
--              mp_device_t     *dp;
--              mp_host_t       *host;
--              mp_path_t       *path;
--              mp_path_list_t  *pathlist;
--              uint16_t        dev_no;
--
--              if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
--                      /* no configured devices */
--                      return (FALSE);
--              }
--
--              for (dev_no = 0; dev_no < MAX_MP_DEVICES; dev_no++) {
--                      dp = host->mp_devs[dev_no];
--
--                      if (dp == NULL)
--                              continue;
--
--                      /* Sanity check */
--                      if (qla2x00_is_wwn_zero(dp->nodename))
--                              continue;
-+      mp_device_t     *dp;
-+      mp_host_t       *host;
-+      mp_path_t       *path;
-+      mp_path_list_t  *pathlist;
-+      uint16_t        dev_no;
--                      if ((pathlist = dp->path_list) == NULL)
--                              continue;
-+      if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
-+              /* no configured devices */
-+              return (FALSE);
-+      }
--                      path = qla2x00_find_path_by_name(host, dp->path_list,
--                          fcport->port_name);
--                      if (path != NULL) {
--                              /* found path for port */
--                              if (path->config == TRUE) {
--                                      return (TRUE);
--                              } else {
--                                      break;
--                              }
--                      }
--              }
-+      for (dev_no = 0; dev_no < MAX_MP_DEVICES; dev_no++) {
-+              dp = host->mp_devs[dev_no];
--      } else {
--              uint16_t        idx;
--              fcdev_t         *pdev;
-+              if (dp == NULL)
-+                      continue;
--              for (idx = 0; idx < MAX_FIBRE_DEVICES; idx++) {
--                      pdev = &ha->fc_db[idx];
-+              /* Sanity check */
-+              if (qla2x00_is_wwn_zero(dp->nodename))
-+                      continue;
--                      if (pdev->loop_id == PORT_UNUSED)
--                              continue;
-+              if ((pathlist = dp->path_list) == NULL)
-+                      continue;
--                      if (memcmp(fcport->port_name, pdev->wwn,
--                          EXT_DEF_WWN_NAME_SIZE) == 0) {
--                              if (pdev->flag & DEV_CONFIGURED) {
--                                      /* found port in user config */
--                                      return(TRUE);
--                              } else {
--                                      break;
--                              }
-+              path = qla2x00_find_path_by_name(host, dp->path_list,
-+                  fcport->port_name);
-+              if (path != NULL) {
-+                      /* found path for port */
-+                      if (path->config == TRUE) {
-+                              return (TRUE);
-+                      } else {
-+                              break;
-                       }
-               }
-       }
-       return (FALSE);
- }
--
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_cfg.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_cfg.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_cfg.h    2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_cfg.h 2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -78,7 +78,7 @@ extern "C"
-  */
- typedef struct _mp_lun_data {
-       uint8_t         data[MAX_LUNS];
--#define LUN_DATA_ENABLED              BIT_7
-+#define LUN_DATA_ENABLED              BIT_7 /* Lun Masking */
- #define LUN_DATA_PREFERRED_PATH               BIT_6
- }
- mp_lun_data_t;
-@@ -112,14 +112,42 @@ typedef struct _failover_notify_srb {
- }
- failover_notify_srb_t;
-+#define       WWULN_SIZE              32
-+typedef struct _mp_lun {
-+      struct _mp_lun          *next;
-+      struct _mp_device       *dp;                    /* Multipath device */
-+      int                     number;                 /* actual lun number */
-+      fc_lun_t        *paths[MAX_PATHS_PER_DEVICE];   /* list of fcluns */
-+      struct list_head        ports_list;
-+      int                     path_cnt;               /* Must be > 1 for fo device  */
-+      int                     siz;                    /* Size of wwuln  */
-+      uint8_t         wwuln[WWULN_SIZE];/* lun id from inquiry page 83. */
-+}
-+mp_lun_t;
-+
-+typedef struct _mp_port {
-+      struct list_head   list;
-+      uint8_t         portname[WWN_SIZE];
-+      uint8_t         path_list[ MAX_HOSTS ]; /* path index for a given HBA */
-+      scsi_qla_host_t *hba_list[ MAX_HOSTS ];
-+      int             cnt;
-+      int             fo_cnt;
-+      ulong   total_blks;     /* blocks transferred on this port */
-+}
-+mp_port_t;
-+
- /*
-  * Per-device multipath control data.
-  */
- typedef struct _mp_device {
-       mp_path_list_t  *path_list;             /* Path list for device.  */
--      int                             dev_id;
--      int                     use_cnt;        /* number of users */
--      uint8_t         nodename[WWN_SIZE];     /* World-wide node name. */
-+      int             dev_id;
-+      int             use_cnt;        /* number of users */
-+      struct _mp_lun   *luns;                 /* list of luns */
-+      uint8_t         nodename[WWN_SIZE];     /* World-wide node name for device. */
-+
-+      /* World-wide node names. */
-+      uint8_t         nodenames[MAX_PATHS_PER_DEVICE][WWN_SIZE];
-       /* World-wide port names. */
-       uint8_t         portnames[MAX_PATHS_PER_DEVICE][WWN_SIZE];
- }
-@@ -132,7 +160,7 @@ typedef struct _mp_host {
-       struct _mp_host *next;  /* ptr to next host adapter in list */
-       scsi_qla_host_t *ha;    /* ptr to lower-level driver adapter struct */
-       int             instance;       /* OS instance number */
--      fc_port_t       *fcport;        /* Port chain for this adapter */
-+      struct list_head *fcports;      /* Port chain for this adapter */
-       mp_device_t     *mp_devs[MAX_MP_DEVICES]; /* Multipath devices */
-       uint32_t        flags;
-@@ -157,6 +185,7 @@ typedef struct _mp_path {
-       struct _mp_host *host;                  /* Pointer to adapter */
-       fc_port_t       *port;                  /* FC port info  */
-       uint16_t        id;                     /* Path id (index) */
-+      uint16_t        flags;
-       uint8_t         mp_byte;                /* Multipath control byte */
- #define MP_MASK_HIDDEN                0x80
- #define MP_MASK_UNCONFIGURED  0x40
-@@ -179,4 +208,7 @@ typedef struct failover_notify_entry {
- }
- failover_notify_t;
-+extern mp_device_t *qla2x00_find_mp_dev_by_portname(mp_host_t *, uint8_t *,
-+    uint16_t *);
-+extern mp_host_t * qla2x00_cfg_find_host(scsi_qla_host_t *);
- #endif /* _QLA_CFG_H */
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_cfgln.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_cfgln.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_cfgln.c  2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_cfgln.c       2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -19,7 +19,7 @@
- /*
-  * QLogic ISP2x00 Multi-path LUN Support Driver 
-- * Solaris specific functions
-+ * Linux specific functions
-  *
-  */
-@@ -333,7 +333,6 @@ qla2x00_cfg_build_path_tree(scsi_qla_hos
-                                * number
-                                */
-                               PERSIST_STRING("scsi-qla%ld-tgt-%d-di-%d-node", "%ld-%d-%d-n");
--                              DEBUG(printk("build_tree: %s\n",propbuf);)
-                               rval = qla2x00_get_prop_xstr(ha, propbuf,
-                                   node_name, WWN_SIZE);
-@@ -343,6 +342,7 @@ qla2x00_cfg_build_path_tree(scsi_qla_hos
-                                        */
-                                       continue;
-+                              DEBUG(printk("build_tree: %s\n",propbuf);)
-                               memcpy(port->node_name, node_name, WWN_SIZE);
-                               /*
-@@ -350,13 +350,13 @@ qla2x00_cfg_build_path_tree(scsi_qla_hos
-                                * number
-                                */
-                               PERSIST_STRING("scsi-qla%ld-tgt-%d-di-%d-port", "%ld-%d-%d-p");
--                              DEBUG(printk("build_tree: %s\n",propbuf);)
-                               rval = qla2x00_get_prop_xstr(ha, propbuf,
-                                   port_name, WWN_SIZE);
-                               if (rval != WWN_SIZE)
-                                       continue;
-+                              DEBUG(printk("build_tree: %s\n",propbuf);)
-                               memcpy(port->node_name, node_name, WWN_SIZE);
-                               memcpy(port->port_name, port_name, WWN_SIZE);
-                               port->flags |= FC_CONFIG;
-@@ -366,8 +366,6 @@ qla2x00_cfg_build_path_tree(scsi_qla_hos
-                                * is present then all luns are visible.
-                                */
-                               PERSIST_STRING("scsi-qla%ld-tgt-%d-di-%d-control", "%ld-%d-%d-c");
--                              DEBUG3(printk("build_tree: %s\n",propbuf);)
--
-                               rval = qla2x00_get_prop_xstr(ha, propbuf,
-                                   (uint8_t *)(&control_byte),
-                                   sizeof(control_byte));
-@@ -379,6 +377,8 @@ qla2x00_cfg_build_path_tree(scsi_qla_hos
-                                       continue;
-                               }
-+                              DEBUG3(printk("build_tree: %s\n",propbuf);)
-+
-                               DEBUG(printk("build_tree: control byte 0x%x\n",
-                                   control_byte);)
-@@ -392,9 +392,36 @@ qla2x00_cfg_build_path_tree(scsi_qla_hos
-                                   port->port_name[4], port->port_name[5],
-                                   port->port_name[6], port->port_name[7],
-                                   tgt, port->mp_byte);)
-+#if  0        /* not supported */
-+                              /* To do the lun binding: Create a fclun for each
-+                               * lun the user has specified, so a mp_lun can be
-+                               * created for each.
-+                               */
-+                              for (lun = 0; lun < MAX_LUNS_PER_DEVICE && ; lun++) {
-+                                      if( !ql2xdevflag ) 
-+                                              sprintf(propbuf, "scsi-qla%ld-tgt-%d-lun-%d-lunid", 
-+                                                      ha->instance, tgt, lun); 
-+                                      else 
-+                                              sprintf(propbuf, "%ld-%d-%d-l", ha->instance, 
-+                                                      tgt, lun);
-+
-+                                      DEBUG(printk("build_tree: %s\n",propbuf);)
-+
-+                                      /* allocate space for mp_lun and fclun */
-+
-+                                      rval = qla2x00_get_prop_xstr(ha, propbuf,
-+                                      mplun->wwuln, 32);
-+                                      if (rval != 32)
-+                                              continue;
-+
-+                              }
-+#endif
-                               qla2x00_update_mp_device(host, port, tgt,
-                                   dev_no);
-+
-+                              /* free any mplun info */
-+
-                               qla2x00_set_lun_data_from_config(host,
-                                   port, tgt, dev_no);
-                       }
-@@ -418,7 +445,7 @@ qla2x00_cfg_build_path_tree(scsi_qla_hos
-  * Returns:
-  *      None.
-  */
--void qla2x00_cfg_display_devices(void)
-+void qla2x00_cfg_display_devices( int flag )
- {
-       mp_host_t     *host;
-       int     id;
-@@ -430,8 +457,9 @@ void qla2x00_cfg_display_devices(void)
-       lun_bit_mask_t  lun_mask;
-       int     mask_set;
-       uint8_t l;
-+      mp_lun_t        *lun;
-+      unsigned char   tmp_buf[32];
--      printk("qla2x00_cfg_display_devices\n");
-       for (host = mp_hosts_base; (host); host = host->next) {
-               instance = (int) host->instance;
-@@ -552,6 +580,21 @@ void qla2x00_cfg_display_devices(void)
-                                                       *((uint32_t *) &lun_mask.mask[4]),
-                                                       *((uint32_t *) &lun_mask.mask[0]) );
-                                       }
-+                                      /* display lun wwuln */
-+                                      if( flag )
-+                                      for (lun = dp->luns; lun != NULL ; lun = lun->next) {
-+                                              printk(KERN_INFO
-+                                                      "scsi-qla%d-tgt-%d-di-%d-lun-%d-lunid=",
-+                                                      instance,  id, path->id, lun->number);
-+                                              for (i = 0 ; i < lun->siz ;
-+                                                              i++) {
-+                                                      sprintf(tmp_buf+i,
-+                                                              "%02x", 
-+                                                        lun->wwuln[i]);
-+                                              }
-+                                              printk(KERN_INFO "%s:%02d;\n",
-+                                                      tmp_buf,lun->siz); 
-+                                      }
-                                       dev_no++;
-                               }
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_debug.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_debug.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_debug.h  2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_debug.h       2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -57,11 +57,13 @@
- #define DEBUG2_3_11(x)  if (extended_error_logging != 0) { do {x;} while (0); }
- #define DEBUG2_9_10(x)  if (extended_error_logging != 0) { do {x;} while (0); }
- #define DEBUG2_11(x)    if (extended_error_logging != 0) { do {x;} while (0); }
-+#define DEBUG2_13(x)    if (extended_error_logging != 0) { do {x;} while (0); }
- #else
- #define DEBUG2(x)     do {} while (0);
- #define DEBUG2_3(x)     do {} while (0); 
- #define DEBUG2_3_11(x)  do {} while (0); 
- #define DEBUG2_9_10(x)  do {} while (0); 
-+#define DEBUG2_13(x)  do {} while (0); 
- #endif
- #if defined(QL_DEBUG_LEVEL_3)
-@@ -123,3 +125,16 @@
- #else
- #define DEBUG12(x)    do {} while (0);
- #endif
-+
-+#if defined(QL_DEBUG_LEVEL_13)
-+#define DEBUG13(x)      do {x;} while (0);
-+  #if !defined(DEBUG2_13)
-+  #define DEBUG2_13(x)      do {x;} while (0);
-+  #endif
-+#else
-+#define DEBUG13(x)    do {} while (0);
-+  #if !defined(DEBUG2_13)
-+  #define DEBUG2_13(x)      do {} while (0);
-+  #endif
-+#endif
-+
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_devtbl.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_devtbl.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_devtbl.h 2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_devtbl.h      2004-04-22 19:42:21.000000000 -0700
-@@ -1,4 +1,4 @@
--#define QLA_MODEL_NAMES         0x19
-+#define QLA_MODEL_NAMES         0x1B
- /*
-  * Adapter model names.
-@@ -7,9 +7,9 @@ char   *qla2x00_model_name[QLA_MODEL_NAMES
-       "QLA2340",      /* 0x100 */
-       "QLA2342",      /* 0x101 */
-       "QLA2344",      /* 0x102 */
--      "QLA2342",      /* 0x103 */
--      "QLA2340",      /* 0x104 */
--      "QLA2342",      /* 0x105 */
-+      "QCP2342",      /* 0x103 */
-+      "QSB2340",      /* 0x104 */
-+      "QSB2342",      /* 0x105 */
-       "QLA2310",      /* 0x106 */
-       "QLA2332",      /* 0x107 */
-       "QCP2332",      /* 0x108 */
-@@ -23,11 +23,294 @@ char      *qla2x00_model_name[QLA_MODEL_NAMES
-       "HPQSVS ",      /* 0x110 */
-       "QLA4010",      /* 0x111 */
-       "QLA4010",      /* 0x112 */
--      "QLA4010",      /* 0x113 */
--      "QLA4010",      /* 0x114 */
-+      "QLA4010C",     /* 0x113 */
-+      "QLA4010C",     /* 0x114 */
-       "QLA2360",      /* 0x115 */
-       "QLA2362",      /* 0x116 */
--      "QLA2350",      /* 0x117 */
--      "QLA2352"       /* 0x118 */
-+      " ",            /* 0x117 */
-+      " ",            /* 0x118 */
-+      "QLA200",       /* 0x119 */
-+      "QLA200C"       /* 0x11A */
- };
-+char  *qla2x00_model_desc[QLA_MODEL_NAMES] = {
-+      "133MHz PCI-X to 2Gb FC, Single Channel",       /* 0x100 */
-+      "133MHz PCI-X to 2Gb FC, Dual Channel",         /* 0x101 */
-+      "133MHz PCI-X to 2Gb FC, Quad Channel",         /* 0x102 */
-+      " ",                                            /* 0x103 */
-+      " ",                                            /* 0x104 */
-+      " ",                                            /* 0x105 */
-+      " ",                                            /* 0x106 */
-+      " ",                                            /* 0x107 */
-+      " ",                                            /* 0x108 */
-+      " ",                                            /* 0x109 */
-+      " ",                                            /* 0x10a */
-+      " ",                                            /* 0x10b */
-+      "133MHz PCI-X to 2Gb FC, Single Channel",       /* 0x10c */
-+      "133MHz PCI-X to 2Gb FC, Dual Channel",         /* 0x10d */
-+      " ",                                            /* 0x10e */
-+      "HPQ SVS HBA- Initiator device",                /* 0x10f */
-+      "HPQ SVS HBA- Target device",                   /* 0x110 */
-+      "Optical- 133MHz to 1Gb iSCSI- networking",     /* 0x111 */
-+      "Optical- 133MHz to 1Gb iSCSI- storage",        /* 0x112 */
-+      "Copper- 133MHz to 1Gb iSCSI- networking",      /* 0x113 */
-+      "Copper- 133MHz to 1Gb iSCSI- storage",         /* 0x114 */
-+      "133MHz PCI-X to 2Gb FC Single Channel",        /* 0x115 */
-+      "133MHz PCI-X to 2Gb FC Dual Channel",          /* 0x116 */
-+      " ",                                            /* 0x117 */
-+      " ",                                            /* 0x118 */
-+      "133MHz PCI-X to 2Gb FC Optical",               /* 0x119 */
-+      "133MHz PCI-X to 2Gb FC Copper"                 /* 0x11A */
-+};
-+
-+
-+struct cfg_device_info {
-+      const char *vendor;
-+      const char *model;
-+      const int  flags;       /* bit 0 (0x1) -- This bit will translate the real 
-+                                 WWNN to the common WWNN for the target AND
-+                                 XP_DEVICE */
-+                              /* bit 1 (0x2) -- MSA 1000  */
-+                              /* bit 2 (0x4) -- EVA  */
-+                              /* bit 3 (0x8) -- DISABLE FAILOVER  */
-+      const int  notify_type; /* support the different types: 1 - 4 */
-+      int     ( *fo_combine)(void *,
-+               uint16_t, fc_port_t *, uint16_t );
-+      int     ( *fo_detect)(void);
-+      int     ( *fo_notify)(void);
-+      int     ( *fo_select)(void);
-+};
-+
-+
-+static struct cfg_device_info cfg_device_list[] = {
-+
-+      {"COMPAQ", "MSA1000", 2, FO_NOTIFY_TYPE_SPINUP, 
-+              qla2x00_combine_by_lunid, NULL, NULL, NULL },
-+
-+/* For testing only
-+      {"SEAGATE", "ST318453FC", 0, FO_NOTIFY_TYPE_NONE,   
-+              qla2x00_combine_by_lunid, NULL, NULL, NULL },
-+*/
-+
-+      {"HITACHI", "OPEN-", 1, FO_NOTIFY_TYPE_NONE,   
-+              qla2x00_combine_by_lunid, NULL, NULL, NULL },
-+      {"HP", "OPEN-", 1, FO_NOTIFY_TYPE_NONE,   
-+              qla2x00_combine_by_lunid, NULL, NULL, NULL },
-+      {"COMPAQ", "HSV110 (C)COMPAQ", 4, FO_NOTIFY_TYPE_SPINUP,   
-+              qla2x00_combine_by_lunid, NULL, NULL, NULL },
-+      {"HP", "HSV100", 4, FO_NOTIFY_TYPE_SPINUP,   
-+              qla2x00_combine_by_lunid, NULL, NULL, NULL },
-+      {"DEC", "HSG80", 8, FO_NOTIFY_TYPE_NONE,   
-+              qla2x00_export_target, NULL, NULL, NULL },
-+
-+      /*
-+       * Must be at end of list...
-+       */
-+      {NULL, NULL }
-+};
-+
-+/*****************************************/
-+/*   ISP Boards supported by this driver */
-+/*****************************************/
-+#define QLA2X00_VENDOR_ID   0x1077
-+#define QLA2100_DEVICE_ID   0x2100
-+#define QLA2200_DEVICE_ID   0x2200
-+#define QLA2200A_DEVICE_ID  0x2200A
-+#define QLA2300_DEVICE_ID   0x2300
-+#define QLA2312_DEVICE_ID   0x2312
-+#define QLA2322_DEVICE_ID   0x2322
-+#define QLA6312_DEVICE_ID   0x6312
-+#define QLA6322_DEVICE_ID   0x6322
-+//#define QLAFBLITE_DEVICE_ID            /* Not Known yet */  
-+#define QLA2200A_RISC_ROM_VER  4
-+#define FPM_2300            6
-+#define FPM_2310            7
-+
-+#if defined(ISP2100)
-+#define NUM_OF_ISP_DEVICES  2
-+static struct pci_device_id qla2100_pci_tbl[] =
-+{
-+      {QLA2X00_VENDOR_ID, QLA2100_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
-+      {0,}
-+};
-+MODULE_DEVICE_TABLE(pci, qla2100_pci_tbl);
-+#endif
-+#if defined(ISP2200)
-+#define NUM_OF_ISP_DEVICES  2
-+static struct pci_device_id qla2200_pci_tbl[] =
-+{
-+      {QLA2X00_VENDOR_ID, QLA2200_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
-+      {0,}
-+};
-+MODULE_DEVICE_TABLE(pci, qla2200_pci_tbl);
-+#endif
-+
-+#if defined(ISP2300)
-+#define NUM_OF_ISP_DEVICES  6
-+static struct pci_device_id qla2300_pci_tbl[] =
-+{
-+      {QLA2X00_VENDOR_ID, QLA2300_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
-+      {QLA2X00_VENDOR_ID, QLA2312_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
-+      {QLA2X00_VENDOR_ID, QLA2322_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
-+      {QLA2X00_VENDOR_ID, QLA6312_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
-+      {QLA2X00_VENDOR_ID, QLA6322_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
-+      {0,}
-+};
-+MODULE_DEVICE_TABLE(pci, qla2300_pci_tbl);
-+#endif
-+
-+struct qla_fw_info {
-+      unsigned short addressing;      /* addressing method used to load fw */
-+#define FW_INFO_ADDR_NORMAL     0
-+#define FW_INFO_ADDR_EXTENDED   1
-+#define FW_INFO_ADDR_NOMORE     0xffff
-+      unsigned short *fwcode;         /* pointer to FW array */
-+      unsigned short *fwlen;          /* number of words in array */
-+      unsigned short *fwstart;        /* start address for F/W */
-+      unsigned long *lfwstart;        /* start address (long) for 
-+                                       * extended F/W Load */
-+};
-+
-+/*
-+ * PCI driver interface definitions
-+ */
-+#define ISP21XX_FW_INDEX      0
-+#define ISP22XX_FW_INDEX      0
-+#define ISP23XX_FW_INDEX      0
-+#define ISP232X_FW_INDEX      2
-+#define ISP63XX_FW_INDEX      6
-+#define ISP632X_FW_INDEX      8
-+
-+typedef struct _qlaboards
-+{
-+        unsigned char   bdName[9];       /* Board ID String             */
-+        unsigned long   device_id;       /* Device ID                   */
-+        int   numPorts;                  /* number of loops on adapter  */
-+        unsigned char   *fwver;          /* Ptr to F/W version array    */
-+      struct qla_fw_info *fwinfo;
-+}  qla_boards_t;
-+
-+
-+static struct qla_fw_info qla_fw_tbl[] = {
-+#if defined(ISP2100)
-+      /* Start of 21xx firmware list */
-+      {
-+       FW_INFO_ADDR_NORMAL, &fw2100tp_code01[0],
-+       &fw2100tp_length01, &fw2100tp_addr01,
-+      },
-+      { FW_INFO_ADDR_NOMORE, },
-+#endif
-+
-+#if defined(ISP2200)
-+      /* Start of 22xx firmware list */
-+#if defined(FC_IP_SUPPORT)
-+      {
-+         FW_INFO_ADDR_NORMAL, &fw2200ip_code01[0],
-+         &fw2200ip_length01, &fw2200ip_addr01,
-+      },
-+#else
-+      {
-+         FW_INFO_ADDR_NORMAL, &fw2200tp_code01[0],
-+         &fw2200tp_length01, &fw2200tp_addr01,
-+      },
-+#endif
-+      { FW_INFO_ADDR_NOMORE, },
-+#endif
-+
-+#if defined(ISP2300)
-+      /* 0 - Start of 23xx firmware list */
-+      {
-+              FW_INFO_ADDR_NORMAL, &fw2300ipx_code01[0],
-+              &fw2300ipx_length01, &fw2300ipx_addr01, 
-+      },
-+
-+      /* End of 23xx firmware list */
-+      { FW_INFO_ADDR_NOMORE, },
-+
-+      /* 2 - Start of 232x firmware list */
-+      {
-+              FW_INFO_ADDR_NORMAL, &fw2322ipx_code01[0],
-+              &fw2322ipx_length01, &fw2322ipx_addr01,
-+      },
-+      {
-+              FW_INFO_ADDR_EXTENDED, &rseqipx_code01[0],
-+              &rseqipx_code_length01, 0, &rseqipx_code_addr01,
-+      },
-+      {
-+              FW_INFO_ADDR_EXTENDED, &xseqipx_code01[0],
-+              &xseqipx_code_length01, 0, &xseqipx_code_addr01,
-+      },
-+      { FW_INFO_ADDR_NOMORE, },
-+      /* 6 - Start of 63xx firmware list */
-+      {
-+              FW_INFO_ADDR_NORMAL, &fw2300flx_code01[0],
-+              &fw2300flx_length01, &fw2300flx_addr01, 
-+      },
-+      { FW_INFO_ADDR_NOMORE, },
-+      /* End of 63xx firmware list */
-+
-+      /* 8 - Start of 632x firmware list */
-+      {
-+              FW_INFO_ADDR_NORMAL, &fw2322flx_code01[0],
-+              &fw2322flx_length01, &fw2322flx_addr01, 
-+      },
-+      {
-+              FW_INFO_ADDR_EXTENDED, &rseqflx_code01[0],
-+              &rseqflx_code_length01, 0, &rseqflx_code_addr01,
-+      },
-+      {
-+              FW_INFO_ADDR_EXTENDED, &xseqflx_code01[0],
-+              &xseqflx_code_length01, 0, &xseqflx_code_addr01,
-+      },
-+      { FW_INFO_ADDR_NOMORE, },
-+      /* End of firmware list */
-+#endif
-+};
-+
-+static struct _qlaboards   QLBoardTbl_fc[NUM_OF_ISP_DEVICES] =
-+{
-+      /* Name ,  Board PCI Device ID,         Number of ports */
-+#if defined(ISP2300)
-+      {"QLA2322 ", QLA2322_DEVICE_ID,           MAX_BUSES,
-+              &fw2322ipx_version_str[0] , &qla_fw_tbl[ISP232X_FW_INDEX]
-+      },
-+
-+      {"QLA2312 ", QLA2312_DEVICE_ID,           MAX_BUSES,
-+              &fw2300ipx_version_str[0] , &qla_fw_tbl[ISP23XX_FW_INDEX]
-+      },
-+
-+      {"QLA2300 ", QLA2300_DEVICE_ID,           MAX_BUSES,
-+              &fw2300ipx_version_str[0] , &qla_fw_tbl[ISP23XX_FW_INDEX]
-+      },
-+
-+      {"QLA6312 ", QLA6312_DEVICE_ID,           MAX_BUSES,
-+              &fw2300flx_version_str[0] , &qla_fw_tbl[ISP63XX_FW_INDEX]
-+      },
-+
-+      {"QLA6322 ", QLA6322_DEVICE_ID,           MAX_BUSES,
-+              &fw2322flx_version_str[0] , &qla_fw_tbl[ISP632X_FW_INDEX]
-+      },
-+#endif
-+
-+#if defined(ISP2200)
-+      {"QLA2200 ", QLA2200_DEVICE_ID,           MAX_BUSES,
-+#if defined(FC_IP_SUPPORT)
-+              &fw2200ip_version_str[0] ,
-+      },
-+#else
-+              &fw2200tp_version_str[0] , &qla_fw_tbl[ISP22XX_FW_INDEX]
-+      },
-+#endif
-+#endif
-+
-+#if defined(ISP2100)
-+      {"QLA2100 ", QLA2100_DEVICE_ID,           MAX_BUSES,
-+              &fw2100tp_version_str[0] , &qla_fw_tbl[ISP21XX_FW_INDEX]
-+      },
-+#endif
-+
-+      {"        ",                 0,           0}
-+};
-+
-+
-+
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_fo.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_fo.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_fo.c     2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_fo.c  2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
- *                  QLOGIC LINUX SOFTWARE
- *
- * QLogic ISP2x00 device driver for Linux 2.4.x
--* Copyright (C) 2003 Qlogic Corporation
-+* Copyright (C) 2003 QLogic Corporation
- * (www.qlogic.com)
- *
- * This program is free software; you can redistribute it and/or modify it
-@@ -186,6 +186,7 @@ static int
- qla2x00_fo_get_lun_data(EXT_IOCTL *pext, FO_LUN_DATA_INPUT *bp, int mode)
- {
-       scsi_qla_host_t  *ha;
-+      struct list_head        *fcports;
-       fc_port_t        *fcport;
-       int              ret = 0;
-       mp_host_t        *host = NULL;
-@@ -220,9 +221,9 @@ qla2x00_fo_get_lun_data(EXT_IOCTL *pext,
-       if (ha->flags.failover_enabled) {
-               if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
--                      if (ha->fcport) {
--
--                              /* Since all ports are unconfigured, return
-+                      if (!list_empty(&ha->fcports)) {
-+                              /*
-+                               * Since all ports are unconfigured, return
-                                * a dummy entry for each of them.
-                                */
-                               if ((list = (FO_LUN_DATA_LIST *)kmem_zalloc(
-@@ -241,9 +242,11 @@ qla2x00_fo_get_lun_data(EXT_IOCTL *pext,
-                               u_list = (FO_LUN_DATA_LIST *)pext->ResponseAdr;
-                               u_entry = &u_list->DataEntry[0];
--                              for (fcport = ha->fcport; (fcport);
--                                  fcport = fcport->next) {
--
-+                              list_for_each_entry(fcport, &ha->fcports,
-+                                  list) {
-+                                      if (fcport->port_type != FCT_TARGET)
-+                                              continue;
-+      
-                                       memcpy(entry->NodeName,
-                                           fcport->node_name,
-                                           EXT_DEF_WWN_NAME_SIZE);
-@@ -275,21 +278,6 @@ qla2x00_fo_get_lun_data(EXT_IOCTL *pext,
-                                       list->EntryCount++;
--                                      ret = verify_area(VERIFY_WRITE,
--                                          (void *)u_entry,
--                                          sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
--                                      if (ret) {
--                                              /* error */
--                                              DEBUG2_9_10(printk(
--                                                  "%s: u_entry %p verify "
--                                                  "wrt err. EntryCount=%d.\n",
--                                                  __func__, u_entry,
--                                                  list->EntryCount);)
--                                              pext->Status =
--                                                  EXT_STATUS_COPY_ERR;
--                                              break;
--                                      }
--
-                                       ret = copy_to_user(u_entry, entry,
-                                           sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
-                                       if (ret) {
-@@ -335,12 +323,15 @@ qla2x00_fo_get_lun_data(EXT_IOCTL *pext,
-       /* find the correct fcport list */
-       if (!ha->flags.failover_enabled)
--              fcport = ha->fcport;
-+              fcports = &ha->fcports;
-       else
--              fcport = host->fcport;
-+              fcports = host->fcports;
-       /* Check thru this adapter's fcport list */
--      for ( ; (fcport); fcport = fcport->next) {
-+      fcport = NULL;
-+      list_for_each_entry(fcport, fcports, list) {
-+              if (fcport->port_type != FCT_TARGET)
-+                      continue;
-               if ((atomic_read(&fcport->state) != FC_ONLINE) &&
-                   !qla2x00_is_fcport_in_config(ha, fcport)) {
-@@ -357,8 +348,6 @@ qla2x00_fo_get_lun_data(EXT_IOCTL *pext,
-                       continue;
-               }
--              memcpy(entry->NodeName,
--                  fcport->node_name, EXT_DEF_WWN_NAME_SIZE);
-               memcpy(entry->PortName,
-                   fcport->port_name, EXT_DEF_WWN_NAME_SIZE);
-@@ -383,17 +372,6 @@ qla2x00_fo_get_lun_data(EXT_IOCTL *pext,
-                       list->EntryCount++;
--                      ret = verify_area(VERIFY_WRITE, (void *)u_entry,
--                          sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
--                      if (ret) {
--                              /* error */
--                              DEBUG2_9_10(printk("%s: u_entry %p "
--                                  "verify wrt err. EntryCount=%d.\n",
--                                  __func__, u_entry, list->EntryCount);)
--                              pext->Status = EXT_STATUS_COPY_ERR;
--                              break;
--                      }
--
-                       ret = copy_to_user(u_entry, entry,
-                           sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
-                       if (ret) {
-@@ -415,7 +393,10 @@ qla2x00_fo_get_lun_data(EXT_IOCTL *pext,
-                        * Failover disabled. Just return LUN mask info
-                        * in lun data entry of this port.
-                        */
-+                      memcpy(entry->NodeName,
-+                          fcport->node_name, EXT_DEF_WWN_NAME_SIZE);
-                       entry->TargetId = 0;
-+
-                       for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
-                               if (!(ostgt = ha->otgt[cnt])) {
-                                       continue;
-@@ -465,17 +446,6 @@ qla2x00_fo_get_lun_data(EXT_IOCTL *pext,
-                       DEBUG9(qla2x00_dump_buffer((char *)&(fcport->lun_mask),
-                           sizeof(lun_bit_mask_t));)
--                      ret = verify_area(VERIFY_WRITE, (void *)u_entry,
--                          sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
--                      if (ret) {
--                              /* error */
--                              DEBUG9_10(printk("%s: u_entry %p verify write"
--                                  " error. list->EntryCount=%d.\n",
--                                  __func__, u_entry, list->EntryCount);)
--                              pext->Status = EXT_STATUS_COPY_ERR;
--                              break;
--                      }
--
-                       ret = copy_to_user(u_entry, entry,
-                           sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
-@@ -522,6 +492,16 @@ qla2x00_fo_get_lun_data(EXT_IOCTL *pext,
-                                       continue;
-                               /* Got an entry */
-+                              if (fcport->flags & FC_XP_DEVICE) {
-+                                      memcpy(entry->NodeName,
-+                                          dp->nodename,
-+                                          EXT_DEF_WWN_NAME_SIZE);
-+                              } else {
-+                                      memcpy(entry->NodeName,
-+                                          fcport->node_name,
-+                                          EXT_DEF_WWN_NAME_SIZE);
-+                              }
-+
-                               entry->TargetId = dp->dev_id;
-                               entry->Dev_No = path->id;
-                               list->EntryCount++;
-@@ -538,24 +518,14 @@ qla2x00_fo_get_lun_data(EXT_IOCTL *pext,
-                                           path->lun_data.data[lun];
-                               }
--                              ret = verify_area(VERIFY_WRITE, (void *)u_entry,
--                                  sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
--                              if (ret) {
--                                      /* error */
--                                      DEBUG2_9_10(printk("%s: u_entry %p "
--                                          "verify wrt err. EntryCount=%d.\n",
--                                          __func__, u_entry, list->EntryCount);)
--                                      pext->Status = EXT_STATUS_COPY_ERR;
--                                      break;
--                              }
--
-                               ret = copy_to_user(u_entry, entry,
-                                   sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
-                               if (ret) {
-                                       /* error */
-                                       DEBUG2_9_10(printk("%s: u_entry %p "
-                                           "copy out err. EntryCount=%d.\n",
--                                          __func__, u_entry, list->EntryCount);)
-+                                          __func__, u_entry,
-+                                          list->EntryCount);)
-                                       pext->Status = EXT_STATUS_COPY_ERR;
-                                       break;
-                               }
-@@ -587,20 +557,10 @@ qla2x00_fo_get_lun_data(EXT_IOCTL *pext,
-           __func__, list->EntryCount);)
-       if (ret == 0) {
--              ret = verify_area(VERIFY_WRITE, (void *)&u_list->EntryCount,
-+              /* copy number of entries */
-+              ret = copy_to_user(&u_list->EntryCount, &list->EntryCount,
-                   sizeof(list->EntryCount));
--              if (ret) {
--                      /* error */
--                      DEBUG2_9_10(printk("%s: u_list->EntryCount %p verify "
--                          " write error. list->EntryCount=%d.\n",
--                          __func__, u_entry, list->EntryCount);)
--                      pext->Status = EXT_STATUS_COPY_ERR;
--              } else {
--                      /* copy number of entries */
--                      ret = copy_to_user(&u_list->EntryCount, &list->EntryCount,
--                          sizeof(list->EntryCount));
--                      pext->ResponseLen = FO_LUN_DATA_LIST_MAX_SIZE;
--              }
-+              pext->ResponseLen = FO_LUN_DATA_LIST_MAX_SIZE;
-       }
-       KMEM_FREE(list, sizeof(FO_LUN_DATA_LIST));
-@@ -690,17 +650,6 @@ qla2x00_fo_set_lun_data(EXT_IOCTL *pext,
-       u_list = &(com_iter->foLunDataList);
-       u_entry = &u_list->DataEntry[0];
--      ret = verify_area(VERIFY_READ, (void *)u_list,
--          sizeof(FO_LUN_DATA_LIST));
--      if (ret) {
--              /* error */
--              DEBUG2_9_10(printk("%s: u_list %p verify read error.\n",
--                  __func__, u_list);)
--              pext->Status = EXT_STATUS_COPY_ERR;
--              KMEM_FREE(list, FO_LUN_DATA_LIST);
--              return (ret);
--      }
--
-       ret = copy_from_user(list, u_list, sizeof(FO_LUN_DATA_LIST));
-       if (ret) {
-               /* error */
-@@ -719,16 +668,6 @@ qla2x00_fo_set_lun_data(EXT_IOCTL *pext,
-       for (i = 0; i < list->EntryCount; i++, u_entry++) {
--              ret = verify_area(VERIFY_READ, (void *)u_entry,
--                  sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
--              if (ret) {
--                      /* error */
--                      DEBUG2_9_10(printk("%s: u_entry %p verify "
--                          " read error.\n",
--                          __func__, u_entry);)
--                      pext->Status = EXT_STATUS_COPY_ERR;
--                      break;
--              }
-               ret = copy_from_user(entry, u_entry,
-                   sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
-               if (ret) {
-@@ -860,7 +799,7 @@ qla2x00_fo_get_target_data(EXT_IOCTL *pe
-       if (ha->flags.failover_enabled)
-               if ((host = qla2x00_cfg_find_host(ha)) == NULL &&
--                  ha->fcport == NULL) {
-+                  list_empty(&ha->fcports)) {
-                       DEBUG2_9_10(printk("%s: no HOST for ha inst %ld.\n",
-                           __func__, ha->instance);)
-                       pext->Status = EXT_STATUS_DEV_NOT_FOUND;
-@@ -900,7 +839,6 @@ qla2x00_std_get_tgt(scsi_qla_host_t *ha,
-       uint16_t        i, cnt;
-       uint32_t        b;
--      fcdev_t         *pdev;
-       fc_port_t       *fcport;
-       os_tgt_t        *ostgt;
-@@ -909,8 +847,6 @@ qla2x00_std_get_tgt(scsi_qla_host_t *ha,
-       DEBUG9(printk("%s(%ld): entered.\n", __func__, ha->host_no);)
-       u_entry = (FO_DEVICE_DATA *) pext->ResponseAdr;
--      /* Failover disabled. Check thru this adapter's fcport list */
--      fcport = ha->fcport;
-       if (pext->ResponseLen < sizeof(FO_DEVICE_DATA)) {
-               pext->Status = EXT_STATUS_BUFFER_TOO_SMALL;
-@@ -924,7 +860,15 @@ qla2x00_std_get_tgt(scsi_qla_host_t *ha,
-           __func__, ha->host_no, pext->ResponseLen);)
-       /* Loop through and return ports found. */
--      for (i = 0; fcport && i < MAX_TARGETS; i++, fcport = fcport->next) {
-+      /* Check thru this adapter's fcport list */
-+      i = 0;
-+      fcport = NULL;
-+      list_for_each_entry(fcport, &ha->fcports, list) {
-+              if (fcport->port_type != FCT_TARGET)
-+                      continue;
-+      
-+              if (i >= MAX_TARGETS)
-+                      break;
-               /* clear for a new entry */
-               memset(entry, 0, sizeof(FO_DEVICE_DATA));
-@@ -992,19 +936,7 @@ qla2x00_std_get_tgt(scsi_qla_host_t *ha,
-                       entry->MultipathControl = 0; /* always configured */
-               }
--              ret = verify_area(VERIFY_WRITE, (void *)u_entry,
--                  sizeof(FO_DEVICE_DATA));
--              if (ret) {
--                      /* error */
--                      DEBUG2_9_10(printk("%s(%ld): u_entry %p verify "
--                          " wrt err. tgt id=%d.\n",
--                          __func__, ha->host_no, u_entry, cnt);)
--                      pext->Status = EXT_STATUS_COPY_ERR;
--                      break;
--              }
--
--              ret = copy_to_user(u_entry, entry,
--                  sizeof(FO_DEVICE_DATA));
-+              ret = copy_to_user(u_entry, entry, sizeof(FO_DEVICE_DATA));
-               if (ret) {
-                       /* error */
-                       DEBUG2_9_10(printk("%s(%ld): u_entry %p copy "
-@@ -1015,75 +947,11 @@ qla2x00_std_get_tgt(scsi_qla_host_t *ha,
-               }
-               u_entry++;
--
--              continue;
-       }
-       DEBUG9(printk("%s(%ld): done copying fcport list entries.\n",
-           __func__, ha->host_no);)
--      /* For ports not found but were in config file, return unconfigured
--       * status so agent will try to issue commands to it and GUI will display
--       * them as missing.
--       */
--      for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
--              pdev = &ha->fc_db[cnt];
--
--              if (pdev->loop_id == PORT_UNUSED)
--                      continue;
--
--              DEBUG9(printk("%s(%ld): found valid loop id %d for tgt %d.\n",
--                  __func__, ha->host_no, pdev->loop_id, cnt);)
--
--              if (pdev->loop_id == PORT_AVAILABLE) {
--                      DEBUG9(printk(
--                          "%s(%ld): returning tgt %d as unconfigured.\n",
--                          __func__, ha->host_no, cnt);)
--
--                      /* clear for a new entry */
--                      memset(entry, 0, sizeof(FO_DEVICE_DATA));
--
--                      /* Return unconfigured */
--                      memcpy(entry->WorldWideName,
--                          pdev->name, EXT_DEF_WWN_NAME_SIZE);
--                      memcpy(entry->PortName,
--                          pdev->wwn, EXT_DEF_WWN_NAME_SIZE);
--
--                      for (b = 0; b < 3 ; b++)
--                              entry->PortId[b] = pdev->d_id.r.d_id[2-b];
--
--                      entry->TargetId = cnt;
--                      entry->MultipathControl = MP_MASK_UNCONFIGURED;
--
--                      ret = verify_area(VERIFY_WRITE, (void *)u_entry,
--                          sizeof(FO_DEVICE_DATA));
--                      if (ret) {
--                              /* error */
--                              DEBUG2_9_10(printk("%s(%ld): u_entry %p verify "
--                                  " wrt err. tgt id=%d.\n",
--                                  __func__, ha->host_no, u_entry, cnt);)
--                              pext->Status = EXT_STATUS_COPY_ERR;
--                              break;
--                      }
--
--                      ret = copy_to_user(u_entry, entry,
--                          sizeof(FO_DEVICE_DATA));
--                      if (ret) {
--                              /* error */
--                              DEBUG2_9_10(printk("%s(%ld): u_entry %p copy "
--                                  "out err. tgt id=%d.\n",
--                                  __func__, ha->host_no, u_entry, cnt);)
--                              pext->Status = EXT_STATUS_COPY_ERR;
--                              break;
--                      }
--
--                      u_entry++;
--              }
--      }
--
--      DEBUG9(printk("%s(%ld): done copying unconfigured dev entries.\n",
--          __func__, ha->host_no);)
--
-       DEBUG9(printk("%s(%ld): exiting. ret = %d.\n",
-           __func__, ha->host_no, ret);)
-@@ -1095,7 +963,6 @@ qla2x00_fo_get_tgt(mp_host_t *host, scsi
-     EXT_IOCTL *pext, FO_DEVICE_DATA *entry)
- {
-       int             ret = 0;
--      uint8_t         i;
-       uint8_t         path_id;
-       uint16_t        dev_no;
-       uint32_t        b;
-@@ -1116,14 +983,14 @@ qla2x00_fo_get_tgt(mp_host_t *host, scsi
-        * ha as unconfigured devices.  ha should never be NULL.
-        */
-       if (host == NULL) {
--              fcport = ha->fcport;
--
--              /* Check thru fcport list and return Unconfigured on all
--               * ports found.
--               */
--              for (i = 0; fcport && i < MAX_TARGETS;
--                  i++, fcport = fcport->next, cnt++) {
--
-+              /* Loop through and return ports found. */
-+              /* Check thru this adapter's fcport list */
-+              cnt = 0;
-+              fcport = NULL;
-+              list_for_each_entry(fcport, &ha->fcports, list) {
-+                      if (fcport->port_type != FCT_TARGET)
-+                              continue;
-+      
-                       if (atomic_read(&fcport->state) != FC_ONLINE) {
-                               /* no need to report */
-                               DEBUG2_9_10(printk("%s(%ld): not reporting "
-@@ -1139,6 +1006,10 @@ qla2x00_fo_get_tgt(mp_host_t *host, scsi
-                               continue;
-                       }
-+                      cnt++;
-+                      if (cnt >= MAX_TARGETS)
-+                              break;
-+
-                       /* clear for a new entry */
-                       memset(entry, 0, sizeof(FO_DEVICE_DATA));
-@@ -1175,17 +1046,6 @@ qla2x00_fo_get_tgt(mp_host_t *host, scsi
-                           entry->TargetId, entry->Dev_No,
-                           entry->MultipathControl);)
--                      ret = verify_area(VERIFY_WRITE, (void *)u_entry,
--                          sizeof(FO_DEVICE_DATA));
--                      if (ret) {
--                              /* error */
--                              DEBUG2_9_10(printk("%s(%ld): u_entry %p "
--                                  "verify wrt err. no tgt id.\n",
--                                  __func__, host->ha->host_no, u_entry);)
--                              pext->Status = EXT_STATUS_COPY_ERR;
--                              break;
--                      }
--
-                       ret = copy_to_user(u_entry, entry,
-                           sizeof(FO_DEVICE_DATA));
-                       if (ret) {
-@@ -1208,12 +1068,14 @@ qla2x00_fo_get_tgt(mp_host_t *host, scsi
-       }
-       /* Check thru fcport list on host */
--      fcport = host->fcport;
--
--      /* Check thru fcport list and return data on online ports found. */
--      for (i = 0; fcport && i < MAX_TARGETS; i++, fcport = fcport->next,
--          cnt++) {
--
-+      /* Loop through and return online ports found. */
-+      /* Check thru this adapter's fcport list */
-+      cnt = 0;
-+      fcport = NULL;
-+      list_for_each_entry(fcport, host->fcports, list) {
-+              if (fcport->port_type != FCT_TARGET)
-+                      continue;
-+      
-               if ((atomic_read(&fcport->state) != FC_ONLINE) &&
-                   !qla2x00_is_fcport_in_config(ha, fcport)) {
-                       /* no need to report */
-@@ -1230,11 +1092,13 @@ qla2x00_fo_get_tgt(mp_host_t *host, scsi
-                       continue;
-               }
-+              cnt++;
-+              if (cnt >= MAX_TARGETS)
-+                      break;
-+
-               /* clear for a new entry */
-               memset(entry, 0, sizeof(FO_DEVICE_DATA));
--              memcpy(entry->WorldWideName,
--                  fcport->node_name, EXT_DEF_WWN_NAME_SIZE);
-               memcpy(entry->PortName,
-                   fcport->port_name, EXT_DEF_WWN_NAME_SIZE);
-@@ -1258,6 +1122,12 @@ qla2x00_fo_get_tgt(mp_host_t *host, scsi
-                       DEBUG9_10(printk("%s(%ld): fcport mpbyte=%02x. "
-                           "return unconfigured. ",
-                           __func__, host->ha->host_no, fcport->mp_byte);)
-+                      printk(KERN_INFO "%s(%ld): fcport mpbyte=%02x. "
-+                          "return unconfigured. ",
-+                          __func__, host->ha->host_no, fcport->mp_byte);
-+
-+                      memcpy(entry->WorldWideName,
-+                          fcport->node_name, EXT_DEF_WWN_NAME_SIZE);
-                       entry->TargetId = fcport->dev_id;
-                       entry->Dev_No = 0;
-@@ -1267,18 +1137,6 @@ qla2x00_fo_get_tgt(mp_host_t *host, scsi
-                           entry->TargetId, entry->Dev_No,
-                           entry->MultipathControl);)
--                      ret = verify_area(VERIFY_WRITE, (void *)u_entry,
--                          sizeof(FO_DEVICE_DATA));
--                      if (ret) {
--                              /* error */
--                              DEBUG2_9_10(printk("%s(%ld): u_entry %p "
--                                  "verify wrt err. tgt id=%d.\n",
--                                  __func__, host->ha->host_no, u_entry,
--                                  fcport->dev_id);)
--                              pext->Status = EXT_STATUS_COPY_ERR;
--                              break;
--                      }
--
-                       ret = copy_to_user(u_entry, entry,
-                           sizeof(FO_DEVICE_DATA));
-                       if (ret) {
-@@ -1323,6 +1181,18 @@ qla2x00_fo_get_tgt(mp_host_t *host, scsi
-                                   entry->PortName))
-                                       continue;
-+                              if (fcport->flags & FC_XP_DEVICE) {
-+                                      memcpy(entry->WorldWideName,
-+                                          dp->nodename,
-+                                          EXT_DEF_WWN_NAME_SIZE);
-+DEBUG4(printk(KERN_INFO "%s XP device:copy the node name from mp_dev:%0x\n",__func__,dp->nodename[7]);)
-+                              } else {
-+                                      memcpy(entry->WorldWideName,
-+                                          fcport->node_name,
-+                                          EXT_DEF_WWN_NAME_SIZE);
-+DEBUG4(printk(KERN_INFO "%s :copy the node name from fcport:%0x\n",__func__,dp->nodename[7]);)
-+                              }
-+
-                               entry->TargetId = dp->dev_id;
-                               entry->Dev_No = path->id;
-@@ -1339,18 +1209,6 @@ qla2x00_fo_get_tgt(mp_host_t *host, scsi
-                                   __func__, host->ha->host_no,
-                                   path->id, entry->MultipathControl);)
--                              ret = verify_area(VERIFY_WRITE, (void *)u_entry,
--                                  sizeof(FO_DEVICE_DATA));
--                              if (ret) {
--                                      /* error */
--                                      DEBUG2_9_10(printk("%s(%ld): u_entry %p"
--                                          " verify wrt err. tgt id=%d.\n",
--                                          __func__, host->ha->host_no,
--                                          u_entry, dp->dev_id);)
--                                      pext->Status = EXT_STATUS_COPY_ERR;
--                                      break;
--                              }
--
-                               ret = copy_to_user(u_entry, entry,
-                                   sizeof(FO_DEVICE_DATA));
-                               if (ret) {
-@@ -1441,17 +1299,6 @@ qla2x00_fo_get_tgt(mp_host_t *host, scsi
-                                   path->portname[4], path->portname[5],
-                                   path->portname[6], path->portname[7]);)
--                              ret = verify_area(VERIFY_WRITE, (void *)u_entry,
--                                  sizeof(FO_DEVICE_DATA));
--                              if (ret) {
--                                      /* error */
--                                      DEBUG2_9_10(printk("%s: u_entry %p "
--                                          "verify wrt err. tgt id=%d.\n",
--                                          __func__, u_entry, dp->dev_id);)
--                                      pext->Status = EXT_STATUS_COPY_ERR;
--                                      break;
--                              }
--
-                               ret = copy_to_user(u_entry, entry,
-                                   sizeof(FO_DEVICE_DATA));
-                               if (ret) {
-@@ -1544,18 +1391,7 @@ qla2x00_fo_set_target_data(EXT_IOCTL *pe
-           sizeof(FO_TARGET_DATA_INPUT));
-       for (i = 0; i < MAX_TARGETS; i++, u_entry++) {
--              ret = verify_area(VERIFY_READ, (void *)u_entry,
--                  sizeof(FO_DEVICE_DATA));
--              if (ret) {
--                      /* error */
--                      DEBUG2_9_10(printk("%s: u_entry %p verify read err.\n",
--                          __func__, u_entry);)
--                      pext->Status = EXT_STATUS_COPY_ERR;
--                      break;
--              }
--
-               ret = copy_from_user(entry, u_entry, sizeof(FO_DEVICE_DATA));
--
-               if (ret) {
-                       /* error */
-                       DEBUG2_9_10(printk("%s: u_entry %p copy error.\n",
-@@ -1699,19 +1535,7 @@ qla2x00_fo_ioctl(scsi_qla_host_t *ha, in
-                           __func__, pext->RequestLen);)
-               } else {
--
--                      rval = verify_area(VERIFY_READ,
--                          (void *)pext->RequestAdr, in_size);
--                      if (rval) {
--                              /* error */
--                              DEBUG2_9_10(printk("%s: req buf verify read "
--                                  "error. size=%ld.\n",
--                                  __func__, (ulong)in_size);)
--                              pext->Status = EXT_STATUS_COPY_ERR;
--                      }
--                      rval = copy_from_user(&buff,
--                          (void *)pext->RequestAdr, in_size);
--
-+                      rval = copy_from_user(&buff, pext->RequestAdr, in_size);
-                       if (rval) {
-                               DEBUG2_9_10(printk("%s: req buf copy error. "
-                                   "size=%ld.\n",
-@@ -1738,25 +1562,31 @@ qla2x00_fo_ioctl(scsi_qla_host_t *ha, in
-       switch (ioctl_code) {
-               case FO_CC_GET_PARAMS:
-+                      DEBUG4(printk(KERN_INFO "calling qla2x00_fo_get_param\n");)
-                       rval = qla2x00_fo_get_params(&buff.params);
-                       break;
-               case FO_CC_SET_PARAMS:
-+                      DEBUG4(printk(KERN_INFO "calling qla2x00_fo_set_param\n");)
-                       rval = qla2x00_fo_set_params(&buff.params);
-                       break;
-               case FO_CC_GET_PATHS:
-+                      DEBUG4(printk(KERN_INFO "calling qla2x00_fo_get_paths\n");)
-                       rval = qla2x00_cfg_get_paths(pext,
-                           &buff.path,mode);
-                       if (rval != 0)
-                               out_size = 0;
-                       break;
-               case FO_CC_SET_CURRENT_PATH:
-+                      DEBUG4(printk(KERN_INFO "calling qla2x00_fo_set_paths\n");)
-                       rval = qla2x00_cfg_set_current_path(pext,
-                           &buff.set_path,mode);
-                       break;
-               case FO_CC_RESET_HBA_STAT:
-+                      DEBUG4(printk(KERN_INFO "calling qla2x00_fo_reset_hba_stat\n");)
-                       rval = qla2x00_fo_stats(&buff.stat, TRUE);
-                       break;
-               case FO_CC_GET_HBA_STAT:
-+                      DEBUG4(printk(KERN_INFO "calling qla2x00_fo_get_hba_stat\n");)
-                       rval = qla2x00_fo_stats(&buff.stat, FALSE);
-                       break;
-               case FO_CC_GET_LUN_DATA:
-@@ -1802,21 +1632,9 @@ qla2x00_fo_ioctl(scsi_qla_host_t *ha, in
-       }
--      if (rval == 0 && (pext->ResponseLen = out_size) != 0) {
--              rval = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
--                  out_size);
--              if (rval != 0) {
--                      DEBUG10(printk("%s: resp buf very write error.\n",
--                          __func__);)
--                      pext->Status = EXT_STATUS_COPY_ERR;
--              }
--      }
--
-       if (rval == 0) {
--              rval = copy_to_user((void *)pext->ResponseAdr,
--                  &buff, out_size);
--
--              if (rval != 0) {
-+              rval = copy_to_user(pext->ResponseAdr, &buff, out_size);
-+              if (rval) {
-                       DEBUG10(printk("%s: resp buf copy error. size=%ld.\n",
-                           __func__, (ulong)out_size);)
-                       pext->Status = EXT_STATUS_COPY_ERR;
-@@ -1858,6 +1676,7 @@ qla2x00_fo_count_retries(scsi_qla_host_t
-       BOOL            retry = TRUE;
-       os_lun_t        *lq;
-       os_tgt_t        *tq;
-+      scsi_qla_host_t *vis_ha;
-       DEBUG9(printk("%s: entered.\n", __func__);)
-@@ -1897,7 +1716,9 @@ qla2x00_fo_count_retries(scsi_qla_host_t
-                       sp->f_start=jiffies;/*ra 10/29/01*/
-                       /* Now queue it on to be failover */
-                       sp->ha = ha;
--                      add_to_failover_queue(ha,sp);
-+                      /* we can only failover using the visible HA */
-+                      vis_ha = (scsi_qla_host_t *) sp->cmd->host->hostdata;
-+                      add_to_failover_queue(vis_ha,sp);
-               }
-       }
-@@ -1906,6 +1727,53 @@ qla2x00_fo_count_retries(scsi_qla_host_t
-       return retry ;
- }
-+BOOL
-+qla2x00_fo_check_device(scsi_qla_host_t *ha, srb_t *sp)
-+{
-+      
-+      BOOL            retry = FALSE;
-+      os_lun_t        *lq;
-+      Scsi_Cmnd        *cp;
-+      fc_port_t        *fcport;
-+      
-+      if ( !(sp->flags & SRB_GOT_SENSE) )
-+              return retry;
-+
-+      cp = sp->cmd;
-+      lq = sp->lun_queue;
-+      fcport = lq->fclun->fcport;
-+      switch (cp->sense_buffer[2] & 0xf) {
-+
-+              case NOT_READY:
-+                      if ( (fcport->flags & (FC_MSA_DEVICE|FC_EVA_DEVICE)) ) {
-+                              /*
-+                               * if we can't access port 
-+                               */
-+                              if ((cp->sense_buffer[12] == 0x4 &&
-+                                      cp->sense_buffer[13] == 0x0)) {
-+                                      sp->err_id = SRB_ERR_DEVICE;
-+                                      return (TRUE);
-+                              }
-+                      } 
-+                      break;
-+
-+              case UNIT_ATTENTION:
-+                      if ( (fcport->flags & FC_EVA_DEVICE) ) {
-+                              if ((cp->sense_buffer[12] == 0xa &&
-+                                      cp->sense_buffer[13] == 0x8)) {
-+                                      sp->err_id = SRB_ERR_DEVICE;
-+                                      return (TRUE);
-+                              }
-+                              if ((cp->sense_buffer[12] == 0xa &&
-+                                      cp->sense_buffer[13] == 0x9)) {
-+                                      /* failback lun */
-+                              }
-+                      } 
-+                      break;
-+
-+      } /* end of switch */
-+      return (retry);
-+}
- /*
-  * qla2x00_fo_check
-@@ -1953,7 +1821,9 @@ qla2x00_fo_check(scsi_qla_host_t *ha, sr
-       /* we failover on selction timeouts only */
-       host_status = CMD_RESULT(sp->cmd) >>16;
--      if( host_status == DID_NO_CONNECT) {
-+      if( host_status == DID_NO_CONNECT ||
-+              qla2x00_fo_check_device(ha, sp) ) {
-+                      
-               if( qla2x00_fo_count_retries(ha,sp) ) {
-                       /* Force a retry  on this request, it will
-                        * cause the LINUX timer to get reset, while we
-@@ -1968,6 +1838,12 @@ qla2x00_fo_check(scsi_qla_host_t *ha, sr
-                               sp->cmd->serial_number,
-                               sp, sp->fo_retry_cnt,
-                               retry, reason[host_status]);)
-+              DEBUG(printk("qla2x00_fo_check: pid= %ld sp %p "
-+                              "retry count=%d, retry flag = %d, "
-+                              "host status=%d\n\r",
-+                              sp->cmd->serial_number,
-+                              sp, sp->fo_retry_cnt,
-+                              retry, host_status);)
-       }
-       DEBUG9(printk("%s: exiting. retry = %d.\n", __func__, retry);)
-@@ -2135,10 +2011,11 @@ static int
- qla2x00_spinup(scsi_qla_host_t *ha, fc_port_t *fcport, uint16_t lun) 
- {
-       inq_cmd_rsp_t   *pkt;
--      int             rval, count, retry;
-+      int             rval = QLA2X00_SUCCESS;
-+      int             count, retry;
-       dma_addr_t      phys_address = 0;
--      uint16_t        comp_status;
--      uint16_t        scsi_status;
-+      uint16_t        comp_status = CS_COMPLETE;
-+      uint16_t        scsi_status = 0;
-       ENTER(__func__);
-@@ -2149,24 +2026,34 @@ qla2x00_spinup(scsi_qla_host_t *ha, fc_p
-               printk(KERN_WARNING
-                       "scsi(%ld): Memory Allocation failed - INQ\n",
-                       ha->host_no);
-+              return( QLA2X00_FAILED);
-       }
--      count = 100; 
--      retry = 10;
--      do {
-+      count = 5; 
-+      retry = 5;
-+      if (atomic_read(&fcport->state) != FC_ONLINE){
-+              DEBUG2(printk("scsi(%ld) %s leaving: Port 0x%02x is not ONLINE\n",
-+                      ha->host_no,__func__,fcport->loop_id);)
-+              rval =  QLA2X00_FAILED;
-+      }
-+      else do {
-               /* issue spinup */
-               memset(pkt, 0, sizeof(inq_cmd_rsp_t));
-               pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
-               pkt->p.cmd.entry_count = 1;
-               pkt->p.cmd.lun = cpu_to_le16(lun);
-+#if defined(EXTENDED_IDS)
-+              pkt->p.cmd.target = cpu_to_le16(fcport->loop_id);
-+#else
-               pkt->p.cmd.target = (uint8_t)fcport->loop_id;
-+#endif
-               /* no direction for this command */
-               pkt->p.cmd.control_flags =
-                       __constant_cpu_to_le16(CF_SIMPLE_TAG);
-               pkt->p.cmd.scsi_cdb[0] = START_STOP;
-               pkt->p.cmd.scsi_cdb[4] = 1;     /* start spin cycle */
-               pkt->p.cmd.dseg_count = __constant_cpu_to_le16(0);
--              pkt->p.cmd.timeout = __constant_cpu_to_le16(10);
-+              pkt->p.cmd.timeout = __constant_cpu_to_le16(20);
-               pkt->p.cmd.byte_count = __constant_cpu_to_le32(0);
-               rval = qla2x00_issue_iocb(ha, pkt,
-@@ -2175,6 +2062,15 @@ qla2x00_spinup(scsi_qla_host_t *ha, fc_p
-               comp_status = le16_to_cpu(pkt->p.rsp.comp_status);
-               scsi_status = le16_to_cpu(pkt->p.rsp.scsi_status);
-+              /* Port Logged Out, so don't retry */
-+              if(     comp_status == CS_PORT_LOGGED_OUT  ||
-+                      comp_status == CS_PORT_CONFIG_CHG ||
-+                      comp_status == CS_PORT_BUSY ||
-+                      comp_status == CS_INCOMPLETE ||
-+                      comp_status == CS_PORT_UNAVAILABLE ) {
-+                      break;
-+              }
-+
-               if ( (scsi_status & SS_CHECK_CONDITION) ) {
-                               DEBUG2(printk("%s(%ld): SS_CHECK_CONDITION "
-                                               "Sense Data "
-@@ -2203,9 +2099,11 @@ qla2x00_spinup(scsi_qla_host_t *ha, fc_p
-                                       retry--;
-               }
--              printk("qla_fo: Sending Start - count %d, retry=%d"
--                              "comp status 0x%x, "
-+              printk(KERN_INFO 
-+                      "qla_fo(%ld): Sending Start - count %d, retry=%d"
-+                              " comp status 0x%x, "
-                               "scsi status 0x%x, rval=%d\n",
-+                              ha->host_no,
-                               count,
-                               retry,
-                               comp_status,
-@@ -2226,15 +2124,17 @@ qla2x00_spinup(scsi_qla_host_t *ha, fc_p
-               comp_status != CS_COMPLETE ||
-               (scsi_status & SS_CHECK_CONDITION)) {
--              DEBUG(printk("qla_fo: Failed spinup - "
-+              DEBUG(printk("qla_fo(%ld): Failed spinup - "
-                               "comp status 0x%x, "
-                               "scsi status 0x%x. loop_id=%d\n",
-+                              ha->host_no,
-                               comp_status,
-                               scsi_status, 
-                               fcport->loop_id);)
-+                              rval =  QLA2X00_FAILED;
-       }
--      pci_free_consistent(ha->pdev, sizeof(rpt_lun_cmd_rsp_t),
-+      pci_free_consistent(ha->pdev, sizeof(inq_cmd_rsp_t),
-                       pkt, phys_address);
-@@ -2272,6 +2172,11 @@ qla2x00_send_fo_notification(fc_lun_t *o
-       ENTER("qla2x00_send_fo_notification");
-       DEBUG3(printk("%s: entered.\n", __func__);)
-+      if( new_lp->fcport == NULL ){
-+              DEBUG2(printk("qla2x00_send_fo_notification: No "
-+                          "new fcport for lun pointer\n");)
-+              return QLA2X00_FAILED;
-+      }
-       loop_id = new_lp->fcport->loop_id;
-       lun = new_lp->lun;
-@@ -2302,8 +2207,10 @@ qla2x00_send_fo_notification(fc_lun_t *o
-       }
--      if (qla_fo_params.FailoverNotifyType == FO_NOTIFY_TYPE_SPINUP) {
--              qla2x00_spinup(new_lp->fcport->ha, new_lp->fcport, new_lp->lun); 
-+      if (qla_fo_params.FailoverNotifyType == FO_NOTIFY_TYPE_SPINUP ||
-+              new_lp->fcport->notify_type == FO_NOTIFY_TYPE_SPINUP ) {
-+              rval = qla2x00_spinup(new_lp->fcport->ha, new_lp->fcport, 
-+                      new_lp->lun); 
-       }
-       if (qla_fo_params.FailoverNotifyType == FO_NOTIFY_TYPE_CDB) {
-@@ -2320,7 +2227,11 @@ qla2x00_send_fo_notification(fc_lun_t *o
-               pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
-               pkt->p.cmd.entry_count = 1;
-               pkt->p.cmd.lun = cpu_to_le16(lun);
-+#if defined(EXTENDED_IDS)
-+              pkt->p.cmd.target = cpu_to_le16(loop_id);
-+#else
-               pkt->p.cmd.target = (uint8_t)loop_id;
-+#endif
-               /* FIXME: How do you know the direction ???? */
-               /* This has same issues as passthur commands - you 
-                * need more than just the CDB.
-@@ -2332,9 +2243,9 @@ qla2x00_send_fo_notification(fc_lun_t *o
-               pkt->p.cmd.dseg_count = __constant_cpu_to_le16(1);
-               pkt->p.cmd.byte_count = __constant_cpu_to_le32(0);
-               pkt->p.cmd.dseg_0_address[0] = cpu_to_le32(
--                    pci_dma_lo32(phys_address + sizeof(sts_entry_t)));
-+                    LSD(phys_address + sizeof(sts_entry_t)));
-               pkt->p.cmd.dseg_0_address[1] = cpu_to_le32(
--                    pci_dma_hi32(phys_address + sizeof(sts_entry_t)));
-+                    MSD(phys_address + sizeof(sts_entry_t)));
-               pkt->p.cmd.dseg_0_length = __constant_cpu_to_le32(0);
-               rval = qla2x00_issue_iocb(old_ha, pkt, phys_address,
-@@ -2536,19 +2447,6 @@ qla2x00_fo_missing_port_summary(scsi_qla
-                                   sizeof(EXT_DEVICEDATAENTRY);
-                               transfer_size = sizeof(EXT_DEVICEDATAENTRY);
--                              ret = verify_area(VERIFY_WRITE,
--                                  (void *)(pstart_of_entry_list +
--                                  current_offset), transfer_size);
--
--                              if (ret) {
--                                      *ret_status = EXT_STATUS_COPY_ERR;
--                                      DEBUG10(printk("%s(%ld): inst=%ld "
--                                          "ERROR verify wrt rsp bufaddr=%p\n",
--                                          __func__, ha->host_no, ha->instance,
--                                          (void *)(pstart_of_entry_list +
--                                          current_offset));)
--                                      break;
--                              }
-                               /* now copy up this dd_entry to user */
-                               usr_temp = (uint8_t *)pstart_of_entry_list +
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_fo.cfg linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_fo.cfg
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_fo.cfg   2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_fo.cfg        2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -20,10 +20,10 @@
- /*
-  * QLogic ISP2x00 Multi-path LUN Support Driver
-  */
--static int    MaxPathsPerDevice = 0;
--static int    MaxRetriesPerPath = 0;
--static int    MaxRetriesPerIo = 0;
--static int    qlFailoverNotifyType = 0;
-+int   MaxPathsPerDevice = 0;
-+int   MaxRetriesPerPath = 0;
-+int   MaxRetriesPerIo = 0;
-+int   qlFailoverNotifyType = 0;
- #if defined(MODULE)
- /* insmod qla2100 <options> ql2xopts=<string> */
- MODULE_PARM(MaxPathsPerDevice, "i");
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_fo.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_fo.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_fo.h     2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_fo.h  2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_gbl.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_gbl.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_gbl.h    2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_gbl.h 2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
- *                  QLOGIC LINUX SOFTWARE
- *
- * QLogic ISP2x00 device driver for Linux 2.4.x
--* Copyright (C) 2003 Qlogic Corporation
-+* Copyright (C) 2003 QLogic Corporation
- * (www.qlogic.com)
- *
- * This program is free software; you can redistribute it and/or modify it
-@@ -29,20 +29,26 @@ extern "C"
- #endif
- #include "exioct.h"
-+
-+#if !defined(ISP200)
-+
- #include "qla_fo.h"
- /*
-  * Global Data in qla_fo.c source file.
-  */
- extern SysFoParams_t qla_fo_params;
-+#endif
- /*
-  * Global Function Prototypes in qla2x00.c source file.
-  */
--static int qla2x00_get_prop_xstr(scsi_qla_host_t *, char *, uint8_t *, int);
-+extern int qla2x00_get_prop_xstr(scsi_qla_host_t *, char *, uint8_t *, int);
- extern void qla2x00_formatted_print(char *, uint64_t , uint8_t, uint8_t);
- extern void qla2x00_formatted_dump_buffer(char *, uint8_t *, uint8_t ,
-                       uint32_t );
-+extern inline void *kmem_zalloc( int siz, int code, int id);
-+#if !defined(ISP200)
- extern uint32_t qla2x00_fo_path_change(uint32_t ,
-                                              fc_lun_t *, fc_lun_t *);
- extern scsi_qla_host_t *qla2x00_get_hba(int);
-@@ -65,6 +71,7 @@ extern BOOL   mp_config_required;
- extern int qla2x00_cfg_init (scsi_qla_host_t *ha);
- extern int qla2x00_cfg_path_discovery(scsi_qla_host_t *ha);
- extern int qla2x00_cfg_event_notify(scsi_qla_host_t *ha, uint32_t i_type);
-+extern int qla2x00_cfg_remap(scsi_qla_host_t *);
- extern fc_lun_t *qla2x00_cfg_failover(scsi_qla_host_t *ha, fc_lun_t *fp,
-                                             os_tgt_t *tgt, srb_t *sp);
- extern int qla2x00_cfg_get_paths( EXT_IOCTL *, FO_GET_PATHS *, int);
-@@ -77,15 +84,19 @@ extern mp_host_t * qla2x00_alloc_host(sc
- extern BOOL qla2x00_fo_check(scsi_qla_host_t *ha, srb_t *sp);
- extern mp_path_t *qla2x00_find_path_by_name(mp_host_t *, mp_path_list_t *,
-                       uint8_t *name);
-+extern int16_t qla2x00_cfg_lookup_device(unsigned char *response_data);
-+extern int qla2x00_combine_by_lunid( void *host, uint16_t dev_id, 
-+      fc_port_t *port, uint16_t pathid); 
-+extern int qla2x00_export_target( void *host, uint16_t dev_id, 
-+      fc_port_t *port, uint16_t pathid); 
- /*
-  * Global Function Prototypes in qla_cfgln.c source file.
-  */
--extern inline void *kmem_zalloc( int siz, int code, int id);
- extern void qla2x00_cfg_build_path_tree( scsi_qla_host_t *ha);
- extern BOOL qla2x00_update_mp_device(mp_host_t *, fc_port_t  *, uint16_t,
-     uint16_t);
--extern void qla2x00_cfg_display_devices(void);
-+extern void qla2x00_cfg_display_devices( int flag );
- /*
-  * Global Function Prototypes in qla_ioctl.c source file.
-@@ -95,6 +106,26 @@ extern int qla2x00_fo_missing_port_summa
-     EXT_DEVICEDATAENTRY *, void *, uint32_t, uint32_t *, uint32_t *);
- extern UINT8
- qla2x00_is_fcport_in_config(scsi_qla_host_t *ha, fc_port_t *fcport);
-+extern UINT8
-+qla2x00_is_fcport_in_foconfig(scsi_qla_host_t *ha, fc_port_t *fcport);
-+#endif
-+
-+/*
-+ * Global Function Prototypes for qla_gs.c functions
-+ */
-+extern int
-+qla2x00_mgmt_svr_login(scsi_qla_host_t *);
-+extern void
-+qla2x00_fdmi_srb_tmpmem_free(srb_t *);
-+extern void
-+qla2x00_fdmi_register(scsi_qla_host_t *);
-+extern void
-+qla2x00_fdmi_register_intr(scsi_qla_host_t *);
-+
-+#if defined(QLA_CONFIG_COMPAT)
-+extern int qla2x00_ioctl32(unsigned int, unsigned int, unsigned long,
-+    struct file *);
-+#endif
- #if defined(__cplusplus)
- }
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_gs.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_gs.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_gs.c     1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_gs.c  2004-04-22 19:42:21.000000000 -0700
-@@ -0,0 +1,1647 @@
-+/******************************************************************************
-+ *                  QLOGIC LINUX SOFTWARE
-+ *
-+ * QLogic ISP2x00 device driver for Linux 2.4.x
-+ * Copyright (C) 2003 Qlogic Corporation
-+ * (www.qlogic.com)
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2, or (at your option) any
-+ * later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * General Public License for more details.
-+ *
-+ ******************************************************************************/
-+
-+#define QLA_INIT_FDMI_CTIU_HDR(ha, ct_hdr)            \
-+    ct_hdr.revision = GS4_REVISION;                   \
-+    ct_hdr.gs_type = GS_TYPE_MGMT_SERVER;             \
-+    ct_hdr.gs_subtype = GS_SUBTYPE_FDMI_HBA;
-+
-+struct ct_info {
-+      uint16_t        ct_cmd;
-+      void            *pct_buf;
-+      dma_addr_t      ct_buf_dma_addr;
-+};
-+
-+
-+/* Local functions */
-+static __inline__ void
-+qla2x00_init_ms_mbx_iocb(scsi_qla_host_t *, uint32_t, uint32_t, uint16_t,
-+    uint16_t, uint16_t);
-+
-+static __inline__ ms_iocb_entry_t *
-+qla2x00_alloc_ms_mbx_iocb(scsi_qla_host_t *);
-+
-+static __inline__ void
-+qla2x00_free_ms_mbx_iocb(scsi_qla_host_t *);
-+
-+static __inline__ int
-+qla2x00_fdmi_ctiu_mem_alloc(scsi_qla_host_t *, size_t);
-+
-+static __inline__ void
-+qla2x00_fdmi_ctiu_mem_free(scsi_qla_host_t *, size_t);
-+
-+static __inline__ void
-+qla2x00_fdmi_setup_hbaattr(scsi_qla_host_t *, hba_attr_t *);
-+
-+static __inline__ void
-+qla2x00_fdmi_setup_rhbainfo(scsi_qla_host_t *, ct_iu_rhba_t *);
-+
-+static __inline__ void
-+qla2x00_fdmi_setup_rhatinfo(scsi_qla_host_t *, ct_iu_rhat_t *);
-+
-+static __inline__ void
-+qla2x00_fdmi_setup_rpainfo(scsi_qla_host_t *, ct_iu_rpa_t *);
-+
-+static __inline__ void
-+qla2x00_fdmi_srb_init(scsi_qla_host_t *, srb_t *, uint16_t, uint16_t);
-+
-+static __inline__ void
-+qla2x00_init_req_q_ms_iocb(scsi_qla_host_t *, ms_iocb_entry_t *,
-+    dma_addr_t, size_t, size_t, uint8_t, uint16_t, uint16_t);
-+
-+static __inline__ int
-+qla2x00_fdmi_srb_tmpmem_alloc(scsi_qla_host_t *ha, srb_t *sp);
-+
-+static __inline__ int
-+qla2x00_fdmi_sc_request_dev_bufs_alloc(scsi_qla_host_t *, Scsi_Cmnd *);
-+
-+static __inline__ void
-+qla2x00_fdmi_sc_request_dev_bufs_free(Scsi_Cmnd *);
-+
-+STATIC int
-+qla2x00_fdmi_cmnd_srb_alloc(scsi_qla_host_t *, srb_t **);
-+
-+STATIC void
-+qla2x00_fdmi_cmnd_srb_free(scsi_qla_host_t *, srb_t *);
-+
-+STATIC int
-+qla2x00_fdmi_rhba(scsi_qla_host_t *, uint8_t *);
-+
-+STATIC int
-+qla2x00_fdmi_ghat(scsi_qla_host_t *, ct_iu_ghat_rsp_t *, uint8_t *);
-+
-+STATIC int
-+qla2x00_fdmi_rpa(scsi_qla_host_t *, uint8_t *);
-+
-+STATIC int
-+qla2x00_fdmi_dhba(scsi_qla_host_t *, uint8_t *);
-+
-+STATIC int
-+qla2x00_fdmi_rhba_intr(scsi_qla_host_t *);
-+
-+STATIC int
-+qla2x00_fdmi_rhat_intr(scsi_qla_host_t *, Scsi_Cmnd *, void *, dma_addr_t);
-+
-+STATIC int
-+qla2x00_fdmi_rpa_intr(scsi_qla_host_t *, Scsi_Cmnd *, void *, dma_addr_t);
-+
-+STATIC void
-+qla2x00_fdmi_done(Scsi_Cmnd *);
-+
-+/* functions to export */
-+int
-+qla2x00_mgmt_svr_login(scsi_qla_host_t *ha);
-+
-+void
-+qla2x00_fdmi_srb_tmpmem_free(srb_t *sp);
-+
-+void
-+qla2x00_fdmi_register(scsi_qla_host_t *);
-+
-+void
-+qla2x00_fdmi_register_intr(scsi_qla_host_t *);
-+
-+
-+/*
-+ * qla2x00_mgmt_svr_login
-+ *    Login management server.
-+ *
-+ * Input:
-+ *    ha:     adapter state pointer.
-+ *
-+ * Returns:
-+ *    qla2x00 local function return status code.
-+ *
-+ * Context:
-+ *    Kernel context.
-+ */
-+int
-+qla2x00_mgmt_svr_login(scsi_qla_host_t *ha)
-+{
-+      int             tmp_rval = 0;
-+      uint16_t        mb[MAILBOX_REGISTER_COUNT];
-+
-+      DEBUG13(printk("%s(%ld): entered\n",
-+          __func__, ha->host_no);)
-+
-+      /* check on management server login status */
-+      if (ha->flags.management_server_logged_in == 0) {
-+              /* login to management server device */
-+
-+              tmp_rval = qla2x00_login_fabric(ha, MANAGEMENT_SERVER,
-+                  0xff, 0xff, 0xfa, &mb[0], BIT_1);
-+
-+              if (tmp_rval != 0 || mb[0] != 0x4000) {
-+
-+                      DEBUG2_13(printk(
-+                          "%s(%ld): inst=%ld ERROR login to MS.\n",
-+                          __func__, ha->host_no, ha->instance);)
-+
-+                      return (QL_STATUS_ERROR);
-+              }
-+
-+              ha->flags.management_server_logged_in = 1;
-+              DEBUG13(printk("%s(%ld): success login to MS.\n",
-+                  __func__, ha->host_no);)
-+      }
-+
-+      DEBUG13(printk("%s(%ld): exiting.\n",
-+          __func__, ha->host_no);)
-+
-+      return (QL_STATUS_SUCCESS);
-+}
-+
-+/*
-+ * qla2x00_fdmi_register
-+ *    Uses execute iocb mbx command to perform fdmi registration
-+ *    functions.  If functions cannot be performed or returned
-+ *    error, just return without error, since this is not a critical
-+ *    function that must succeed.
-+ *    It is assumed the driver has already login to management svr.
-+ *
-+ * Input:
-+ *    ha:     adapter state pointer.
-+ *
-+ * Returns:
-+ *    void
-+ *
-+ * Context:
-+ *    Kernel context.
-+ */
-+void
-+qla2x00_fdmi_register(scsi_qla_host_t *ha)
-+{
-+      int             rval;
-+      uint8_t         fdmi_stat = FDMI_STAT_OK;
-+      ms_iocb_entry_t *ms_pkt;
-+      ct_iu_ghat_rsp_t tmp_hat_buf;
-+      ct_iu_rhba_t    hba_buf;
-+
-+      DEBUG13(printk("%s(%ld): entered.\n", __func__, ha->host_no);)
-+
-+      /* allocate MSIOCB */
-+      ms_pkt = qla2x00_alloc_ms_mbx_iocb(ha);
-+
-+      if (ms_pkt == NULL) {
-+              /* error cannot perform register functions */
-+              DEBUG2_13(printk("%s(%ld): MSIOCB alloc failed.\n",
-+                  __func__, ha->host_no);)
-+              return;
-+      }
-+
-+      /* register HBA */
-+      rval = qla2x00_fdmi_rhba(ha, &fdmi_stat);
-+
-+      /* if already registered, get and compare HBA attributes */
-+      if (rval != QL_STATUS_SUCCESS) {
-+              if (fdmi_stat == FDMI_STAT_ALREADY_REGISTERED) {
-+                      DEBUG2_13(printk("%s(%ld): HBA already registered. "
-+                          "Get/compare attributes.\n",
-+                          __func__, ha->host_no);)
-+
-+                      if (qla2x00_fdmi_ghat(ha, &tmp_hat_buf, &fdmi_stat)) {
-+                              /* error */
-+                              DEBUG2_13(printk("%s(%ld): GHAT failed. "
-+                                  "De-registering.\n",
-+                                  __func__, ha->host_no);)
-+                              /* deregister and return */
-+                              qla2x00_fdmi_dhba(ha, &fdmi_stat);
-+                              return;
-+                      }
-+              } else {
-+                      /* error */
-+                      DEBUG2_13(printk("%s(%ld): RHBA failed. exiting.\n",
-+                          __func__, ha->host_no);)
-+                      return;
-+              }
-+
-+              DEBUG13(printk("%s(%ld): ghat rsp buf dump:\n",
-+                  __func__, ha->host_no);)
-+              DEBUG13(qla2x00_dump_buffer((uint8_t*)&tmp_hat_buf.plist,
-+                  sizeof(reg_port_list_t) + sizeof(hba_attr_t));)
-+
-+              /* rebuild hba values locally and compare; if different
-+               * attribute values, de-register and register the hba.
-+               */
-+              memset(&hba_buf, 0, sizeof(ct_iu_rhba_t));
-+              qla2x00_fdmi_setup_rhbainfo(ha, &hba_buf);
-+
-+              DEBUG13(printk("%s(%ld): compare hba buf dump:\n",
-+                  __func__, ha->host_no);)
-+              DEBUG13(qla2x00_dump_buffer((uint8_t*)&hba_buf.plist,
-+                  sizeof(reg_port_list_t) + sizeof(hba_attr_t));)
-+
-+              if (memcmp(&hba_buf.plist, &tmp_hat_buf.plist,
-+                  sizeof(reg_port_list_t) + sizeof(hba_attr_t)) != 0) {
-+                      /* deregister and re-register */
-+                      DEBUG13(printk("%s(%ld): different attributes already "
-+                          "registered. deregistering...\n",
-+                          __func__, ha->host_no);)
-+
-+                      rval = qla2x00_fdmi_dhba(ha, &fdmi_stat);
-+                      if (rval != QL_STATUS_SUCCESS) {
-+                              /* error */
-+                              DEBUG2_13(printk("%s(%ld): DHBA failed.\n",
-+                                  __func__, ha->host_no);)
-+                              return;
-+                      }
-+
-+                      DEBUG13(printk("%s(%ld): deregister HBA success. "
-+                          "re-registering...\n",
-+                          __func__, ha->host_no);)
-+
-+                      /* try again */
-+                      rval = qla2x00_fdmi_rhba(ha, &fdmi_stat);
-+                      if (rval != QL_STATUS_SUCCESS ||
-+                          fdmi_stat != FDMI_STAT_OK) {
-+                              /* error */
-+                              DEBUG2_13(printk(
-+                                  "%s(%ld): RHBA failed again-exiting.\n",
-+                                  __func__, ha->host_no);)
-+                              return;
-+                      }
-+              }
-+      }
-+
-+      /* register port attributes.  This call should always succeed
-+       * if the command is supported.
-+       */
-+      qla2x00_fdmi_rpa(ha, &fdmi_stat);
-+
-+      /* free MSIOCB */
-+      qla2x00_free_ms_mbx_iocb(ha);
-+
-+      DEBUG13(printk("%s(%ld): exiting\n", __func__, ha->host_no);)
-+}
-+
-+static __inline__ int
-+qla2x00_fdmi_srb_tmpmem_alloc(scsi_qla_host_t *ha, srb_t *sp)
-+{
-+      if (sp == NULL) {
-+              return (QL_STATUS_ERROR);
-+      }
-+
-+      /* initialize for proper handling of error case */
-+      sp->tgt_queue = NULL;
-+      sp->lun_queue = NULL;
-+      sp->fclun = NULL;
-+
-+      sp->tgt_queue = KMEM_ZALLOC(sizeof(os_tgt_t), 60);
-+      if (sp->tgt_queue == NULL) {
-+              DEBUG2_13(printk(KERN_WARNING
-+                  "%s(%ld): ERROR in tmp tgt queue allocation.\n",
-+                  __func__, ha->host_no);)
-+              qla2x00_fdmi_srb_tmpmem_free(sp);
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      sp->lun_queue = KMEM_ZALLOC(sizeof(os_lun_t), 61);
-+      if (sp->lun_queue == NULL) {
-+              DEBUG2_13(printk(KERN_WARNING
-+                  "%s(%ld): ERROR in tmp lun queue allocation.\n",
-+                  __func__, ha->host_no);)
-+              qla2x00_fdmi_srb_tmpmem_free(sp);
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      sp->fclun = KMEM_ZALLOC(sizeof(fc_lun_t), 62);
-+      if (sp->fclun == NULL) {
-+              DEBUG2_13(printk(KERN_WARNING
-+                  "%s(%ld): ERROR in tmp fclun queue allocation.\n",
-+                  __func__, ha->host_no);)
-+              qla2x00_fdmi_srb_tmpmem_free(sp);
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      sp->fclun->fcport = KMEM_ZALLOC(sizeof(fc_port_t), 63);
-+      if (sp->fclun->fcport == NULL) {
-+              DEBUG2_13(printk(KERN_WARNING
-+                  "%s(%ld): ERROR in tmp fcport queue allocation.\n",
-+                  __func__, ha->host_no);)
-+              qla2x00_fdmi_srb_tmpmem_free(sp);
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      return (QL_STATUS_SUCCESS);
-+}
-+
-+void
-+qla2x00_fdmi_srb_tmpmem_free(srb_t *sp)
-+{
-+      if (sp->fclun != NULL) {
-+              if (sp->fclun->fcport != NULL) {
-+                      KMEM_FREE(sp->fclun->fcport, sizeof(fc_port_t));
-+              }
-+
-+              KMEM_FREE(sp->fclun, sizeof(fc_lun_t));
-+      }
-+
-+      if (sp->lun_queue != NULL) {
-+              KMEM_FREE(sp->lun_queue, sizeof(os_lun_t));
-+      }
-+
-+      if (sp->tgt_queue != NULL) {
-+              KMEM_FREE(sp->tgt_queue, sizeof(os_tgt_t));
-+      }
-+
-+}
-+
-+static __inline__ int
-+qla2x00_fdmi_sc_request_dev_bufs_alloc(scsi_qla_host_t *ha, Scsi_Cmnd *pcmd)
-+{
-+
-+      pcmd->device = KMEM_ZALLOC(sizeof(Scsi_Device), 66);
-+      if (pcmd->device == NULL) {
-+              /* error */
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      pcmd->sc_request = KMEM_ZALLOC(sizeof(Scsi_Request), 67);
-+      if (pcmd->sc_request == NULL) {
-+              /* error */
-+              qla2x00_fdmi_sc_request_dev_bufs_free(pcmd);
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      pcmd->sc_request->sr_buffer = KMEM_ZALLOC(sizeof(struct ct_info), 68);
-+      if (pcmd->sc_request->sr_buffer == NULL) {
-+              /* error */
-+              qla2x00_fdmi_sc_request_dev_bufs_free(pcmd);
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      return (QL_STATUS_SUCCESS);
-+}
-+
-+static __inline__ void
-+qla2x00_fdmi_sc_request_dev_bufs_free(Scsi_Cmnd *pcmd)
-+{
-+      if (pcmd->sc_request != NULL) {
-+              if (pcmd->sc_request->sr_buffer != NULL) {
-+                      KMEM_FREE(pcmd->sc_request->sr_buffer,
-+                          sizeof(struct ct_info));
-+                      pcmd->sc_request->sr_buffer = NULL;
-+              }
-+
-+              KMEM_FREE(pcmd->sc_request, sizeof(Scsi_Request));
-+              pcmd->sc_request = NULL;
-+      }
-+
-+      if (pcmd->device != NULL) {
-+              KMEM_FREE(pcmd->device, sizeof(Scsi_Device));
-+              pcmd->device = NULL;
-+      }
-+}
-+
-+STATIC int
-+qla2x00_fdmi_cmnd_srb_alloc(scsi_qla_host_t *ha, srb_t **sp)
-+{
-+      struct ct_info  *pdata;
-+      void            *pctbuf;
-+      dma_addr_t      ctbuf_dma_addr;
-+
-+      /* Allocate SRB block. */
-+      if ((*sp = qla2x00_get_new_sp(ha)) == NULL) {
-+
-+              DEBUG2_13(printk("%s(%ld): ERROR cannot alloc sp.\n",
-+                  __func__, ha->host_no);)
-+
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      if (qla2x00_fdmi_srb_tmpmem_alloc(ha, *sp)) {
-+              /* error */
-+              atomic_set(&(*sp)->ref_count, 0);
-+              add_to_free_queue(ha, *sp);
-+              *sp = NULL;
-+
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      (*sp)->cmd = KMEM_ZALLOC(sizeof(Scsi_Cmnd), 64);
-+      if ((*sp)->cmd == NULL) {
-+              DEBUG2_13(printk(KERN_WARNING
-+                  "%s(%ld): ERROR in scsi_cmnd mem allocation.\n",
-+                  __func__, ha->host_no);)
-+              qla2x00_fdmi_srb_tmpmem_free(*sp);
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      /* These buffers are used and freed during callback time */
-+      if (qla2x00_fdmi_sc_request_dev_bufs_alloc(ha, (*sp)->cmd)) {
-+              /* error */
-+
-+              qla2x00_fdmi_srb_tmpmem_free(*sp);
-+              KMEM_FREE((*sp)->cmd, sizeof(Scsi_Cmnd));
-+              (*sp)->cmd = NULL;
-+              atomic_set(&(*sp)->ref_count, 0);
-+              add_to_free_queue(ha, *sp);
-+              *sp = NULL;
-+
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      pctbuf = pci_alloc_consistent(ha->pdev, sizeof(ct_fdmi_pkt_t),
-+          &ctbuf_dma_addr);
-+      if (pctbuf == NULL) {
-+              /* error */
-+              DEBUG2_13(printk(KERN_WARNING
-+                  "%s(%ld): ERROR in ctiu mem allocation.\n",
-+                  __func__, ha->host_no);)
-+
-+              qla2x00_fdmi_sc_request_dev_bufs_free((*sp)->cmd);
-+              qla2x00_fdmi_srb_tmpmem_free(*sp);
-+              KMEM_FREE((*sp)->cmd, sizeof(Scsi_Cmnd));
-+              (*sp)->cmd = NULL;
-+              atomic_set(&(*sp)->ref_count, 0);
-+              add_to_free_queue(ha, *sp);
-+              *sp = NULL;
-+
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+      /* sr_buffer is used to save some data for callback time */
-+      pdata = (*sp)->cmd->sc_request->sr_buffer;
-+      pdata->pct_buf = pctbuf;
-+      pdata->ct_buf_dma_addr = ctbuf_dma_addr;
-+
-+      return (QL_STATUS_SUCCESS);
-+}
-+
-+STATIC void
-+qla2x00_fdmi_cmnd_srb_free(scsi_qla_host_t *ha, srb_t *sp)
-+{
-+      struct ct_info  *pdata;
-+
-+      if (sp == NULL) 
-+              return;
-+
-+      if (sp->cmd->sc_request != NULL &&
-+          (pdata = sp->cmd->sc_request->sr_buffer) != NULL) {
-+              if (pdata->pct_buf != NULL) {
-+                      pci_free_consistent(ha->pdev, sizeof(ct_fdmi_pkt_t),
-+                          pdata->pct_buf, pdata->ct_buf_dma_addr);
-+              }
-+      }
-+
-+      qla2x00_fdmi_sc_request_dev_bufs_free(sp->cmd);
-+
-+      if (sp->cmd != NULL) {
-+              KMEM_FREE(sp->cmd, sizeof(Scsi_Cmnd));
-+              sp->cmd = NULL;
-+      }
-+
-+      qla2x00_fdmi_srb_tmpmem_free(sp);
-+
-+      atomic_set(&sp->ref_count, 0);
-+      add_to_free_queue(ha, sp);
-+}
-+
-+STATIC void
-+qla2x00_fdmi_done(Scsi_Cmnd *pscsi_cmd)
-+{
-+      uint8_t                 free_mem = TRUE;
-+      uint16_t                cmd_code;
-+      struct Scsi_Host        *host;
-+      scsi_qla_host_t         *ha;
-+      struct ct_info          *pdata;
-+      ct_iu_preamble_t        *pct;
-+
-+      host = pscsi_cmd->host;
-+      if (host == NULL) {
-+              /* error */
-+              DEBUG2_13(printk("%s: entered. no host found.\n", __func__);)
-+              return;
-+      }
-+
-+      ha = (scsi_qla_host_t *) host->hostdata;
-+
-+      DEBUG13(printk("%s(%ld): entered.\n", __func__ ,ha->host_no);)
-+
-+      /* read data and free memory */
-+      if (pscsi_cmd->sc_request == NULL) {
-+              /* error */
-+              return;
-+      }
-+      if ((pdata = (struct ct_info *)pscsi_cmd->sc_request->sr_buffer) ==
-+          NULL) {
-+              /* error */
-+              return;
-+      }
-+
-+      pct = pdata->pct_buf;
-+
-+      cmd_code = be16_to_cpu(pdata->ct_cmd);
-+      DEBUG13(printk("%s(%ld): got cmd %x, result=%x. rsp dump:\n",
-+          __func__ ,ha->host_no, cmd_code, CMD_RESULT(pscsi_cmd));)
-+      DEBUG13(qla2x00_dump_buffer((uint8_t *)pct, sizeof(ct_iu_preamble_t));)
-+
-+      switch (cmd_code) {
-+      case RHBA:
-+              if (pct->cmd_rsp_code !=
-+                  __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
-+                      DEBUG2_13(printk("%s(%ld): RHBA failed, rejected "
-+                          "request, rhba_rsp:\n", __func__, ha->host_no);)
-+                      DEBUG2_13(qla2x00_dump_buffer((uint8_t *)pct,
-+                          sizeof(ct_iu_preamble_t));)
-+
-+                      if ((pct->reason == FDMI_REASON_CANNOT_PERFORM) &&
-+                          (pct->explanation ==
-+                          FDMI_EXPL_HBA_ALREADY_REGISTERED)) {
-+
-+                              DEBUG13(printk(
-+                                  "%s(%ld): RHBA already registered. "
-+                                  "calling RHAT.\n",
-+                                  __func__, ha->host_no);)
-+
-+                              qla2x00_fdmi_rhat_intr(ha, pscsi_cmd,
-+                                  pdata->pct_buf, pdata->ct_buf_dma_addr);
-+                              free_mem = FALSE;
-+                      } else {
-+                              /* error. just free mem and exit */
-+                              DEBUG2_13(printk("%s(%ld): RHBA failed. "
-+                                  "going to free memory.\n",
-+                                  __func__, ha->host_no);)
-+                      }
-+              } else {
-+                      /* command completed. */
-+                      DEBUG13(printk(
-+                          "%s(%ld): RHBA finished ok. going to call RPA.\n",
-+                          __func__, ha->host_no);)
-+                      qla2x00_fdmi_rpa_intr(ha, pscsi_cmd, pdata->pct_buf,
-+                          pdata->ct_buf_dma_addr);
-+                      free_mem = FALSE;
-+              }
-+
-+              break;
-+
-+      case RHAT:
-+              /* Just go ahead and issue next command */
-+              DEBUG13(printk("%s(%ld): RHAT rspcode=%x. going to call RPA.\n",
-+                  __func__, ha->host_no, be16_to_cpu(pct->cmd_rsp_code));)
-+              qla2x00_fdmi_rpa_intr(ha, pscsi_cmd, pdata->pct_buf,
-+                  pdata->ct_buf_dma_addr);
-+              free_mem = FALSE;
-+              break;
-+
-+      case RPA:
-+              DEBUG13(printk("%s(%ld): got RPA rspcode=%x.\n",
-+                  __func__ ,ha->host_no, be16_to_cpu(pct->cmd_rsp_code));)
-+
-+              /* This is assumed to be last command issued in this
-+               * chain. Proceed to free memory.
-+               */
-+              break;
-+
-+      default:
-+              DEBUG13(printk("%s(%ld): cmd_code=%x not processed.\n",
-+                  __func__ ,ha->host_no, cmd_code);)
-+              break;
-+      }
-+
-+      if (free_mem) {
-+              DEBUG13(printk("%s(%ld): going to free mem.\n",
-+                  __func__ ,ha->host_no);)
-+              if (pdata->pct_buf != NULL) {
-+                      pci_free_consistent(ha->pdev, sizeof(ct_fdmi_pkt_t),
-+                          pdata->pct_buf, pdata->ct_buf_dma_addr);
-+              }
-+              qla2x00_fdmi_sc_request_dev_bufs_free(pscsi_cmd);
-+              KMEM_FREE(pscsi_cmd, sizeof(Scsi_Cmnd));
-+      }
-+
-+      DEBUG13(printk("%s(%ld): exiting.\n", __func__ ,ha->host_no);)
-+}
-+
-+static __inline__ void
-+qla2x00_fdmi_srb_init(scsi_qla_host_t *ha, srb_t *sp, uint16_t tov,
-+    uint16_t ct_cmd_code)
-+{
-+      struct ct_info  *pdata;
-+
-+      /* setup sp for this command */
-+      sp->ha = ha;
-+      sp->flags = SRB_FDMI_CMD;
-+      sp->fclun->lun = 0;
-+      sp->fclun->flags = 0;
-+      sp->lun_queue->fclun = sp->fclun;
-+      sp->lun_queue->fclun->fcport->ha = ha;
-+      sp->lun_queue->q_state = LUN_STATE_READY;
-+      sp->lun_queue->q_lock = SPIN_LOCK_UNLOCKED;
-+      sp->tgt_queue->ha = ha;
-+      sp->tgt_queue->vis_port = sp->fclun->fcport;
-+
-+      /* init scsi_cmd */
-+      CMD_SP(sp->cmd) = (void *)sp;
-+      sp->cmd->host = ha->host;
-+      sp->cmd->scsi_done = qla2x00_fdmi_done;
-+      CMD_TIMEOUT(sp->cmd) = tov;
-+      /* sr_buffer is used to save some data for callback time */
-+      pdata = (struct ct_info *)sp->cmd->sc_request->sr_buffer;
-+      pdata->ct_cmd = ct_cmd_code;
-+}
-+
-+static __inline__ void
-+qla2x00_init_req_q_ms_iocb(scsi_qla_host_t *ha, ms_iocb_entry_t *ms_pkt,
-+    dma_addr_t ct_buf_dma, size_t req_buf_size, size_t rsp_buf_size,
-+    uint8_t loop_id, uint16_t ctrl_flags, uint16_t tov)
-+{
-+      ms_pkt->entry_type = MS_IOCB_TYPE;
-+      ms_pkt->entry_count = 1;
-+
-+      ms_pkt->dseg_req_address[0] = cpu_to_le32(LSD(ct_buf_dma));
-+      ms_pkt->dseg_req_address[1] = cpu_to_le32(MSD(ct_buf_dma));
-+
-+      ms_pkt->dseg_rsp_address[0] = cpu_to_le32(LSD(ct_buf_dma));
-+      ms_pkt->dseg_rsp_address[1] = cpu_to_le32(MSD(ct_buf_dma));
-+
-+#if defined(EXTENDED_IDS)
-+      ms_pkt->loop_id = __constant_cpu_to_le16(loop_id);
-+#else
-+      ms_pkt->loop_id = loop_id;
-+#endif
-+      ms_pkt->control_flags = __constant_cpu_to_le16(ctrl_flags);
-+      ms_pkt->timeout = __constant_cpu_to_le16(tov);
-+      ms_pkt->cmd_dsd_count = __constant_cpu_to_le16(1);
-+      ms_pkt->total_dsd_count = __constant_cpu_to_le16(2);
-+      ms_pkt->rsp_bytecount = cpu_to_le32(rsp_buf_size);
-+      ms_pkt->req_bytecount = cpu_to_le32(req_buf_size);
-+      ms_pkt->dseg_req_length = ms_pkt->req_bytecount;
-+      ms_pkt->dseg_rsp_length = ms_pkt->rsp_bytecount;
-+}
-+
-+/*
-+ * qla2x00_fdmi_register_intr
-+ *    Uses request queue iocb to perform fdmi registration
-+ *    functions.  If functions cannot be performed or returned
-+ *    error, just return without error, since this is not a critical
-+ *    function that must succeed.
-+ *    It is assumed the driver has already login to management svr.
-+ *
-+ * Input:
-+ *    ha:     adapter state pointer.
-+ *
-+ * Returns:
-+ *    void
-+ *
-+ * Context:
-+ *    Kernel context.
-+ */
-+void
-+qla2x00_fdmi_register_intr(scsi_qla_host_t *ha)
-+{
-+      DEBUG13(printk("%s(%ld): entered.\n", __func__, ha->host_no);)
-+
-+      /* start the chain of fdmi calls with RHBA */
-+      qla2x00_fdmi_rhba_intr(ha);
-+
-+      DEBUG13(printk("%s(%ld): exiting\n", __func__, ha->host_no);)
-+}
-+
-+static __inline__ int
-+qla2x00_fdmi_ctiu_mem_alloc(scsi_qla_host_t *ha, size_t buf_size)
-+{
-+      int     rval = QL_STATUS_SUCCESS;
-+
-+      /* Get consistent memory allocated for CT commands */
-+      if (ha->ct_iu == NULL) {
-+              ha->ct_iu = pci_alloc_consistent(ha->pdev,
-+                  buf_size, &ha->ct_iu_dma);
-+      }
-+
-+      if (ha->ct_iu == NULL) {
-+               /* error */
-+              DEBUG2_13(printk(KERN_WARNING
-+                  "%s(%ld): ct_iu Memory Allocation failed.\n",
-+                  __func__, ha->host_no);)
-+              return (QL_STATUS_ERROR);
-+      }
-+
-+      memset(ha->ct_iu, 0, buf_size);
-+
-+      return (rval);
-+}
-+
-+static __inline__ void
-+qla2x00_fdmi_ctiu_mem_free(scsi_qla_host_t *ha, size_t buf_size)
-+{
-+      if (ha->ct_iu != NULL) {
-+              pci_free_consistent(ha->pdev,
-+                  buf_size, ha->ct_iu, ha->ct_iu_dma);
-+              ha->ct_iu = NULL;
-+      }
-+}
-+
-+static __inline__ ms_iocb_entry_t *
-+qla2x00_alloc_ms_mbx_iocb(scsi_qla_host_t *ha)
-+{
-+      ms_iocb_entry_t *ms_pkt;
-+
-+      if (ha->ms_iocb == NULL){
-+              ha->ms_iocb = pci_alloc_consistent(ha->pdev,
-+                  sizeof(ms_iocb_entry_t), &ha->ms_iocb_dma);
-+      }
-+
-+      if (ha->ms_iocb == NULL){
-+               /* error */
-+              printk(KERN_WARNING
-+                  "%s(%ld): msiocb Memory Allocation failed.\n",
-+                  __func__, ha->host_no);
-+              return (NULL);
-+      }
-+      memset(ha->ms_iocb, 0, sizeof(ms_iocb_entry_t));
-+ 
-+      /* Get consistent memory allocated for CT commands */
-+      if (qla2x00_fdmi_ctiu_mem_alloc(ha, sizeof(ct_fdmi_pkt_t)) !=
-+          QL_STATUS_SUCCESS) {
-+              printk(KERN_WARNING
-+                  "%s(%ld): ct_iu Memory Allocation failed.\n",
-+                  __func__, ha->host_no);
-+              qla2x00_free_ms_mbx_iocb(ha);
-+              return (NULL);
-+      }
-+
-+      /* Initialize some common fields */
-+      ms_pkt = ha->ms_iocb;
-+
-+      ms_pkt->entry_type = MS_IOCB_TYPE;
-+      ms_pkt->entry_count = 1;
-+
-+      ms_pkt->dseg_req_address[0] = cpu_to_le32(LSD(ha->ct_iu_dma));
-+      ms_pkt->dseg_req_address[1] = cpu_to_le32(MSD(ha->ct_iu_dma));
-+
-+      ms_pkt->dseg_rsp_address[0] = cpu_to_le32(LSD(ha->ct_iu_dma));
-+      ms_pkt->dseg_rsp_address[1] = cpu_to_le32(MSD(ha->ct_iu_dma));
-+
-+      return (ms_pkt);
-+}
-+
-+static __inline__ void
-+qla2x00_free_ms_mbx_iocb(scsi_qla_host_t *ha)
-+{
-+      if (ha->ms_iocb != NULL){
-+              pci_free_consistent(ha->pdev,
-+                  sizeof(ms_iocb_entry_t), ha->ms_iocb, ha->ms_iocb_dma);
-+              ha->ms_iocb = NULL;
-+      }
-+
-+      qla2x00_fdmi_ctiu_mem_free(ha, sizeof(ct_fdmi_pkt_t));
-+
-+}
-+
-+static __inline__ void
-+qla2x00_init_ms_mbx_iocb(scsi_qla_host_t *ha, uint32_t req_size,
-+    uint32_t rsp_size, uint16_t loop_id, uint16_t ctrl_flags, uint16_t tov)
-+{
-+      ms_iocb_entry_t *ms_pkt;
-+
-+      ms_pkt = ha->ms_iocb;
-+
-+#if defined(EXTENDED_IDS)
-+      ms_pkt->loop_id = __constant_cpu_to_le16(loop_id);
-+#else
-+      ms_pkt->loop_id = loop_id;
-+#endif
-+      ms_pkt->control_flags = __constant_cpu_to_le16(ctrl_flags);
-+      ms_pkt->timeout = __constant_cpu_to_le16(tov);
-+      ms_pkt->cmd_dsd_count = __constant_cpu_to_le16(1);
-+      ms_pkt->total_dsd_count = __constant_cpu_to_le16(2);
-+      ms_pkt->rsp_bytecount = cpu_to_le32(rsp_size);
-+      ms_pkt->req_bytecount = cpu_to_le32(req_size);
-+      ms_pkt->dseg_req_length = ms_pkt->req_bytecount;
-+      ms_pkt->dseg_rsp_length = ms_pkt->rsp_bytecount;
-+
-+}
-+
-+static __inline__ void
-+qla2x00_fdmi_setup_hbaattr(scsi_qla_host_t *ha, hba_attr_t *attr)
-+{
-+      char            tmp_str[80];
-+      uint32_t        tmp_sn;
-+      qla_boards_t    *bdp;
-+
-+      attr->count = __constant_cpu_to_be32(HBA_ATTR_COUNT);
-+
-+      /* node name */
-+      attr->nn.type = __constant_cpu_to_be16(T_NODE_NAME);
-+      attr->nn.len = cpu_to_be16(sizeof(hba_nn_attr_t));
-+      memcpy(attr->nn.value, ha->init_cb->node_name, WWN_SIZE);
-+
-+      DEBUG13(printk("%s(%ld): NODENAME=%02x%02x%02x%02x%02x"
-+          "%02x%02x%02x.\n",
-+          __func__, ha->host_no, attr->nn.value[0],
-+          attr->nn.value[1], attr->nn.value[2], attr->nn.value[3],
-+          attr->nn.value[4], attr->nn.value[5], attr->nn.value[6],
-+          attr->nn.value[7]);)
-+
-+      /* company name */
-+      attr->man.type = __constant_cpu_to_be16(T_MANUFACTURER);
-+      attr->man.len = cpu_to_be16(sizeof(hba_man_attr_t));
-+      sprintf((char *)attr->man.value, QLOGIC_COMPANY_NAME);
-+
-+      DEBUG13(printk("%s(%ld): MANUFACTURER=%s.\n",
-+          __func__, ha->host_no, attr->man.value);)
-+
-+      /* serial number */
-+      attr->sn.type = __constant_cpu_to_be16(T_SERIAL_NUMBER);
-+      attr->sn.len = cpu_to_be16(sizeof(hba_sn_attr_t));
-+      tmp_sn = ((ha->serial0 & 0x1f) << 16) | (ha->serial2 << 8) | 
-+          ha->serial1;
-+      sprintf((char *)attr->sn.value, "%c%05d",
-+          ('A' + tmp_sn/100000), (tmp_sn%100000));
-+
-+      DEBUG13(printk("%s(%ld): SERIALNO=%s.\n",
-+          __func__, ha->host_no, attr->sn.value);)
-+
-+      /* model name */
-+      attr->mod.type = __constant_cpu_to_be16(T_MODEL);
-+      attr->mod.len = cpu_to_be16(sizeof(hba_mod_attr_t));
-+      strncpy((char *)attr->mod.value, ha->model_number, NVRAM_MODEL_SIZE);
-+
-+      DEBUG13(printk("%s(%ld): MODEL_NAME=%s.\n",
-+          __func__, ha->host_no, attr->mod.value);)
-+
-+      /* model description */
-+      attr->mod_desc.type = __constant_cpu_to_be16(T_MODEL_DESCRIPTION);
-+      attr->mod_desc.len = cpu_to_be16(sizeof(hba_mod_desc_attr_t));
-+      strncpy((char *)attr->mod_desc.value, ha->model_desc, 80);
-+
-+      DEBUG13(printk("%s(%ld): MODEL_DESC=%s.\n",
-+          __func__, ha->host_no, attr->mod_desc.value);)
-+
-+      /* hardware version */
-+      attr->hv.type = __constant_cpu_to_be16(T_HARDWARE_VERSION);
-+      attr->hv.len = cpu_to_be16(sizeof(hba_hv_attr_t));
-+      /* hw_id_version contains either valid hw_id for 2312 and later NVRAM
-+       * or NULLs.
-+       */
-+      strncpy((char *)attr->hv.value, ha->hw_id_version, NVRAM_HW_ID_SIZE);
-+
-+      DEBUG13(printk("%s(%ld): HARDWAREVER=%s.\n",
-+          __func__, ha->host_no, attr->hv.value);)
-+
-+      /* driver version */
-+      attr->dv.type = __constant_cpu_to_be16(T_DRIVER_VERSION);
-+      attr->dv.len = cpu_to_be16(sizeof(hba_dv_attr_t));
-+      strncpy((char *)attr->dv.value, qla2x00_version_str,
-+          QLA_DRVR_VERSION_LEN);
-+
-+      DEBUG13(printk("%s(%ld): DRIVERVER=%s.\n",
-+          __func__, ha->host_no, qla2x00_version_str);)
-+
-+      /* opt rom version */
-+      attr->or.type = __constant_cpu_to_be16(T_OPTION_ROM_VERSION);
-+      attr->or.len = cpu_to_be16(sizeof(hba_or_attr_t));
-+      sprintf((char *)attr->or.value, "%d.%d", ha->bios_revision[1],
-+          ha->bios_revision[0]);
-+
-+      DEBUG13(printk("%s(%ld): OPTROMVER=%s.\n",
-+          __func__, ha->host_no, attr->or.value);)
-+
-+      /* firmware version */
-+      attr->fw.type = __constant_cpu_to_be16(T_FIRMWARE_VERSION);
-+      attr->fw.len = cpu_to_be16(sizeof(hba_fw_attr_t));
-+      bdp = &QLBoardTbl_fc[ha->devnum];
-+      sprintf((char *)attr->fw.value, "%2d.%02d.%02d", bdp->fwver[0],
-+          bdp->fwver[1], bdp->fwver[2]);
-+
-+      DEBUG13(printk("%s(%ld): FIRMWAREVER=%s.\n",
-+          __func__, ha->host_no, attr->fw.value);)
-+
-+      /* OS name/version */
-+      attr->os.type = __constant_cpu_to_be16(T_OS_NAME_AND_VERSION);
-+      attr->os.len = cpu_to_be16(sizeof(hba_os_attr_t));
-+      sprintf(tmp_str, "%s %s", system_utsname.sysname,
-+          system_utsname.release);
-+      strncpy((char *)attr->os.value, tmp_str, 16);
-+
-+      DEBUG13(printk("%s(%ld): OSNAME=%s.\n",
-+          __func__, ha->host_no, tmp_str);)
-+}
-+
-+static __inline__ void
-+qla2x00_fdmi_setup_rhbainfo(scsi_qla_host_t *ha, ct_iu_rhba_t *ct)
-+{
-+      memcpy(ct->hba_identifier, ha->init_cb->port_name, WWN_SIZE);
-+      ct->plist.num_ports = __constant_cpu_to_be32(1);
-+      memcpy(ct->plist.port_entry, ha->init_cb->port_name, WWN_SIZE);
-+
-+      DEBUG13(printk("%s(%ld): RHBA identifier=%02x%02x%02x%02x%02x"
-+          "%02x%02x%02x.\n",
-+          __func__, ha->host_no, ct->hba_identifier[0],
-+          ct->hba_identifier[1], ct->hba_identifier[2], ct->hba_identifier[3],
-+          ct->hba_identifier[4], ct->hba_identifier[5], ct->hba_identifier[6],
-+          ct->hba_identifier[7]);)
-+
-+      qla2x00_fdmi_setup_hbaattr(ha, &ct->attr);
-+}
-+
-+static __inline__ void
-+qla2x00_fdmi_setup_rhatinfo(scsi_qla_host_t *ha, ct_iu_rhat_t *ct)
-+{
-+      memcpy(ct->hba_identifier, ha->init_cb->port_name, WWN_SIZE);
-+
-+      DEBUG13(printk("%s(%ld): RHAT identifier=%02x%02x%02x%02x%02x"
-+          "%02x%02x%02x.\n",
-+          __func__, ha->host_no, ct->hba_identifier[0],
-+          ct->hba_identifier[1], ct->hba_identifier[2], ct->hba_identifier[3],
-+          ct->hba_identifier[4], ct->hba_identifier[5], ct->hba_identifier[6],
-+          ct->hba_identifier[7]);)
-+
-+      qla2x00_fdmi_setup_hbaattr(ha, &ct->attr);
-+}
-+
-+/*
-+ * qla2x00_fdmi_rhba
-+ *    FDMI register HBA via execute IOCB mbx cmd.
-+ *
-+ * Input:
-+ *    ha:             adapter state pointer.
-+ *    pret_stat:      local fdmi return status pointer.
-+ *
-+ * Returns:
-+ *    qla2x00 local function return status code.
-+ *
-+ * Context:
-+ *    Kernel context.
-+ */
-+STATIC int
-+qla2x00_fdmi_rhba(scsi_qla_host_t *ha, uint8_t *pret_stat)
-+{
-+      int             rval;
-+      ct_iu_rhba_t    *ct;
-+
-+
-+      DEBUG13(printk("%s(%ld): entered\n", __func__, ha->host_no);)
-+
-+      /* init */
-+      *pret_stat = FDMI_STAT_OK;
-+
-+      /* Prepare common MS IOCB- Request/Response size adjusted. tov same
-+       * as mailbox tov.
-+       */
-+      qla2x00_init_ms_mbx_iocb(ha, sizeof(ct_iu_rhba_t),
-+          sizeof(ct_iu_preamble_t), MANAGEMENT_SERVER,
-+          (CF_READ | CF_HEAD_TAG), 60 - 1);
-+
-+      DEBUG13(printk("%s(%ld): done msiocb init.\n", __func__, ha->host_no);)
-+
-+      /* Prepare CT request */
-+      memset(ha->ct_iu, 0, sizeof(ct_fdmi_pkt_t));
-+      ct = (ct_iu_rhba_t *)ha->ct_iu;
-+
-+      /* Setup CT-IU Basic preamble. */
-+      QLA_INIT_FDMI_CTIU_HDR(ha, ct->hdr);
-+      ct->hdr.cmd_rsp_code = __constant_cpu_to_be16(RHBA);
-+
-+      /* Setup register hba payload. */
-+      qla2x00_fdmi_setup_rhbainfo(ha, ct);
-+
-+      DEBUG13(printk("%s(%ld): done ct init. ct buf dump:\n",
-+          __func__, ha->host_no);)
-+      DEBUG13(qla2x00_dump_buffer((uint8_t *)ct,
-+          sizeof(ct_iu_rhba_t));)
-+      DEBUG13(printk("msiocb buf dump:.\n");)
-+      DEBUG13(qla2x00_dump_buffer((uint8_t *)ha->ms_iocb,
-+          sizeof(ms_iocb_entry_t));)
-+
-+      /* Go issue command and wait for completion. */
-+      /* Execute MS IOCB */
-+      rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma,
-+          sizeof(ms_iocb_entry_t));
-+      if (rval != QL_STATUS_SUCCESS) {
-+              /*EMPTY*/
-+              DEBUG2_13(printk("%s(%ld): RHBA issue IOCB failed (%d).\n",
-+                  __func__, ha->host_no, rval);)
-+              *pret_stat = FDMI_STAT_ERR;
-+              rval = QL_STATUS_ERROR;
-+      } else if (ct->hdr.cmd_rsp_code !=
-+          __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
-+              DEBUG2_13(printk("%s(%ld): RHBA failed, rejected "
-+                  "request, rhba_rsp:\n", __func__, ha->host_no);)
-+              DEBUG2_13(qla2x00_dump_buffer((uint8_t *)&ct->hdr,
-+                  sizeof(ct_iu_preamble_t));)
-+
-+              if ((ct->hdr.reason == FDMI_REASON_CANNOT_PERFORM) &&
-+                  (ct->hdr.explanation == FDMI_EXPL_HBA_ALREADY_REGISTERED)) {
-+                      *pret_stat = FDMI_STAT_ALREADY_REGISTERED;
-+                      DEBUG2_13(printk("%s(%ld): HBA already registered.\n",
-+                          __func__, ha->host_no);)
-+              }
-+
-+              rval = QL_STATUS_ERROR;
-+      }
-+
-+      DEBUG13(printk("%s(%ld): exiting.\n", __func__ ,ha->host_no);)
-+
-+      return (rval);
-+}
-+
-+/*
-+ * qla2x00_fdmi_ghat
-+ *    FDMI get HBA attributes via execute IOCB mbx cmd.
-+ *
-+ * Input:
-+ *    ha:             adapter state pointer.
-+ *    prsp_buf:       local ghat response buffer pointer.
-+ *    pret_stat:      local fdmi return status pointer.
-+ *
-+ * Returns:
-+ *    qla2x00 local function return status code.
-+ *
-+ * Context:
-+ *    Kernel context.
-+ */
-+STATIC int
-+qla2x00_fdmi_ghat(scsi_qla_host_t *ha, ct_iu_ghat_rsp_t *prsp_buf,
-+    uint8_t *pret_stat)
-+{
-+      int                     rval;
-+      ct_iu_ghat_req_t        *ct_req;
-+      ct_iu_ghat_rsp_t        *ct_rsp;
-+      ct_fdmi_pkt_t           *ctbuf;
-+
-+      DEBUG13(printk("%s(%ld): entered\n", __func__, ha->host_no);)
-+
-+      /* init */
-+      *pret_stat = FDMI_STAT_OK;
-+
-+      /* Prepare common MS IOCB- Request/Response size adjusted. tov
-+       * same as mailbox tov.
-+       */
-+      qla2x00_init_ms_mbx_iocb(ha, sizeof(ct_iu_ghat_req_t),
-+          sizeof(ct_iu_ghat_rsp_t), MANAGEMENT_SERVER,
-+          (CF_READ | CF_HEAD_TAG), 60 - 1);
-+
-+      DEBUG13(printk("%s(%ld): done msiocb init.\n", __func__, ha->host_no);)
-+
-+      /* Prepare CT request */
-+      memset(ha->ct_iu, 0, sizeof(ct_fdmi_pkt_t));
-+      ctbuf = (ct_fdmi_pkt_t *)ha->ct_iu;
-+      ct_req = (ct_iu_ghat_req_t *)ha->ct_iu;
-+      ct_rsp = (ct_iu_ghat_rsp_t *)ha->ct_iu;
-+
-+      /* Setup CT-IU Basic preamble. */
-+      QLA_INIT_FDMI_CTIU_HDR(ha, ct_req->hdr);
-+      ct_req->hdr.cmd_rsp_code = __constant_cpu_to_be16(GHAT);
-+
-+      /* Setup get hba attrib payload. */
-+      memcpy(ct_req->hba_identifier, ha->init_cb->port_name, WWN_SIZE);
-+
-+      DEBUG13(printk("%s(%ld): done ct init. ct buf dump:\n",
-+          __func__, ha->host_no);)
-+      DEBUG13(qla2x00_dump_buffer((uint8_t *)ct_req,
-+          sizeof(ct_fdmi_pkt_t));)
-+      DEBUG13(printk("msiocb buf dump:.\n");)
-+      DEBUG13(qla2x00_dump_buffer((uint8_t *)ha->ms_iocb,
-+          sizeof(ms_iocb_entry_t));)
-+
-+      /* Go issue command and wait for completion. */
-+      /* Execute MS IOCB */
-+      rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma,
-+          sizeof(ms_iocb_entry_t));
-+      if (rval != QL_STATUS_SUCCESS || ct_rsp->hdr.cmd_rsp_code !=
-+          __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
-+              DEBUG2_13(printk("%s(%ld): GHAT IOCB failed=%d. rspcode=%x, "
-+                  "ct rspbuf:\n",
-+                  __func__, ha->host_no, rval,
-+                  be16_to_cpu(ct_rsp->hdr.cmd_rsp_code));)
-+              DEBUG2_13(qla2x00_dump_buffer((uint8_t *)ct_rsp,
-+                  sizeof(ct_iu_ghat_rsp_t));)
-+
-+              *pret_stat = FDMI_STAT_ERR;
-+              rval = QL_STATUS_ERROR;
-+      } else {
-+              /* copy response */
-+              memcpy(prsp_buf, ct_rsp, sizeof(ct_iu_ghat_rsp_t));
-+      }
-+
-+      DEBUG13(printk("%s(%ld): exiting.\n", __func__ ,ha->host_no);)
-+
-+      return (rval);
-+}
-+
-+static __inline__ void
-+qla2x00_fdmi_setup_rpainfo(scsi_qla_host_t *ha, ct_iu_rpa_t *ct)
-+{
-+      /* Setup register port payload. */
-+      memcpy(ct->portname, ha->init_cb->port_name, WWN_SIZE);
-+
-+      ct->attr.count = __constant_cpu_to_be32(PORT_ATTR_COUNT);
-+
-+      /* FC4 types */
-+      ct->attr.fc4_types.type = __constant_cpu_to_be16(T_FC4_TYPES);
-+      ct->attr.fc4_types.len = cpu_to_be16(sizeof(port_fc4_attr_t));
-+#if defined(FC_IP_SUPPORT)
-+      if (ha->flags.enable_ip)
-+              ct->attr.fc4_types.value[3] = 0x20; /* type 5 for IP */
-+#endif
-+      ct->attr.fc4_types.value[2] = 0x01;     /* SCSI - FCP */
-+
-+      DEBUG13(printk("%s(%ld): register fc4types=%02x %02x.\n",
-+          __func__, ha->host_no, ct->attr.fc4_types.value[3],
-+          ct->attr.fc4_types.value[2]);)
-+
-+      /* Supported speed */
-+      ct->attr.sup_speed.type = __constant_cpu_to_be16(T_SUPPORT_SPEED);
-+      ct->attr.sup_speed.len = cpu_to_be16(sizeof(port_speed_attr_t));
-+#if defined(ISP2100) || defined (ISP2200)
-+      ct->attr.sup_speed.value = __constant_cpu_to_be32(1);   /* 1 Gig */
-+#elif defined(ISP2300)
-+      ct->attr.sup_speed.value = __constant_cpu_to_be32(2);   /* 2 Gig */
-+#endif
-+
-+      DEBUG13(printk("%s(%ld): register SUPPSPEED=%x.\n",
-+          __func__, ha->host_no, ct->attr.sup_speed.value);)
-+
-+      /* Current speed */
-+      ct->attr.cur_speed.type = __constant_cpu_to_be16(T_CURRENT_SPEED);
-+      ct->attr.cur_speed.len = cpu_to_be16(sizeof(port_speed_attr_t));
-+      switch (ha->current_speed) {
-+      case EXT_DEF_PORTSPEED_1GBIT:
-+              ct->attr.cur_speed.value = __constant_cpu_to_be32(1);
-+              break;
-+      case EXT_DEF_PORTSPEED_2GBIT:
-+              ct->attr.cur_speed.value = __constant_cpu_to_be32(2);
-+              break;
-+      }
-+
-+      DEBUG13(printk("%s(%ld): register CURRSPEED=%x.\n",
-+          __func__, ha->host_no, ct->attr.cur_speed.value);)
-+
-+      /* Max frame size */
-+      ct->attr.max_fsize.type = __constant_cpu_to_be16(T_MAX_FRAME_SIZE);
-+      ct->attr.max_fsize.len = cpu_to_be16(sizeof(port_frame_attr_t));
-+      ct->attr.max_fsize.value =
-+          cpu_to_be32((uint32_t)ha->init_cb->frame_length);
-+
-+      DEBUG13(printk("%s(%ld): register MAXFSIZE=%d.\n",
-+          __func__, ha->host_no, ct->attr.max_fsize.value);)
-+
-+      /* OS device name */
-+      ct->attr.os_dev_name.type = __constant_cpu_to_be16(T_OS_DEVICE_NAME);
-+      ct->attr.os_dev_name.len = cpu_to_be16(sizeof(port_os_attr_t));
-+      /* register same string used/returned by SNIA HBA API */
-+#if defined(ISP2100)
-+      sprintf((char *)ct->attr.os_dev_name.value, "/proc/scsi/qla2100/%ld",
-+          ha->host_no);
-+#elif defined(ISP2200)
-+      sprintf((char *)ct->attr.os_dev_name.value, "/proc/scsi/qla2200/%ld",
-+          ha->host_no);
-+#elif defined(ISP2300)
-+      sprintf((char *)ct->attr.os_dev_name.value, "/proc/scsi/qla2300/%ld",
-+          ha->host_no);
-+#endif
-+      DEBUG13(printk("%s(%ld): register OSDEVNAME=%s.\n",
-+          __func__, ha->host_no, ct->attr.os_dev_name.value);)
-+
-+      /* Host name */
-+      ct->attr.host_name.type = __constant_cpu_to_be16(T_HOST_NAME);
-+      ct->attr.host_name.len = cpu_to_be16(sizeof(port_host_name_attr_t));
-+      strcpy((char *)ct->attr.host_name.value, system_utsname.nodename);
-+
-+      DEBUG13(printk("%s(%ld): register HOSTNAME=%s.\n",
-+          __func__, ha->host_no, ct->attr.host_name.value);)
-+}
-+
-+/*
-+ * qla2x00_fdmi_rpa
-+ *    FDMI register port attributes via execute IOCB mbx cmd.
-+ *
-+ * Input:
-+ *    ha:             adapter state pointer.
-+ *    pret_stat:      local fdmi return status pointer.
-+ *
-+ * Returns:
-+ *    qla2x00 local function return status code.
-+ *
-+ * Context:
-+ *    Kernel context.
-+ */
-+STATIC int
-+qla2x00_fdmi_rpa(scsi_qla_host_t *ha, uint8_t *pret_stat)
-+{
-+      int             rval;
-+      ct_iu_rpa_t     *ct;
-+
-+      DEBUG13(printk("%s(%ld): entered\n", __func__, ha->host_no);)
-+
-+      /* init */
-+      *pret_stat = FDMI_STAT_OK;
-+
-+      /* Prepare common MS IOCB- Request/Response size adjusted */
-+      /* tov same as mbx tov */
-+      qla2x00_init_ms_mbx_iocb(ha, sizeof(ct_iu_rpa_t),
-+          sizeof(ct_iu_preamble_t), MANAGEMENT_SERVER,
-+          (CF_READ | CF_HEAD_TAG), 60 - 1);
-+
-+      DEBUG13(printk("%s(%ld): done msiocb init.\n", __func__, ha->host_no);)
-+
-+      /* Prepare CT request */
-+      memset(ha->ct_iu, 0, sizeof(ct_fdmi_pkt_t));
-+      ct = (ct_iu_rpa_t *)ha->ct_iu;
-+
-+      /* Setup CT-IU Basic preamble. */
-+      QLA_INIT_FDMI_CTIU_HDR(ha, ct->hdr);
-+      ct->hdr.cmd_rsp_code = __constant_cpu_to_be16(RPA);
-+
-+      /* Setup register port attribute payload. */
-+      qla2x00_fdmi_setup_rpainfo(ha, ct);
-+
-+      DEBUG13(printk("%s(%ld): done ct init. ct buf dump:\n",
-+          __func__, ha->host_no);)
-+      DEBUG13(qla2x00_dump_buffer((uint8_t *)ct,
-+          sizeof(ct_iu_rpa_t));)
-+      DEBUG13(printk("msiocb buf dump:.\n");)
-+      DEBUG13(qla2x00_dump_buffer((uint8_t *)ha->ms_iocb,
-+          sizeof(ms_iocb_entry_t));)
-+
-+      /* Go issue command and wait for completion. */
-+      /* Execute MS IOCB */
-+      rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma,
-+          sizeof(ms_iocb_entry_t));
-+      if (rval != QL_STATUS_SUCCESS) {
-+              DEBUG2_13(printk("%s(%ld): RPA issue IOCB failed (%d).\n",
-+                  __func__, ha->host_no, rval);)
-+              *pret_stat = FDMI_STAT_ERR;
-+              rval = QL_STATUS_ERROR;
-+      } else if (ct->hdr.cmd_rsp_code !=
-+          __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
-+
-+              DEBUG2_13(printk("%s(%ld): RPA failed, rejected "
-+                  "request, rhba_rsp:\n", __func__, ha->host_no);)
-+              DEBUG2_13(qla2x00_dump_buffer((uint8_t *)&ct->hdr,
-+                  sizeof(ct_iu_preamble_t));)
-+              *pret_stat = FDMI_STAT_ERR;
-+              rval = QL_STATUS_ERROR;
-+      }
-+
-+      DEBUG13(printk("%s(%ld): exiting.\n", __func__ ,ha->host_no);)
-+
-+      return (rval);
-+}
-+
-+/*
-+ * qla2x00_fdmi_dhba
-+ *    FDMI de-register HBA.
-+ *
-+ * Input:
-+ *    ha:             adapter state pointer.
-+ *
-+ * Returns:
-+ *    qla2x00 local function return status code.
-+ *
-+ * Context:
-+ *    Kernel context.
-+ */
-+STATIC int
-+qla2x00_fdmi_dhba(scsi_qla_host_t *ha, uint8_t *pret_stat)
-+{
-+      int             rval;
-+      ct_iu_dhba_t    *ct;
-+
-+
-+      DEBUG13(printk("%s(%ld): entered\n", __func__, ha->host_no);)
-+
-+      /* init */
-+      *pret_stat = FDMI_STAT_OK;
-+
-+      /* Prepare common MS IOCB- Request/Response size adjusted. tov
-+       * same as mbx tov.
-+       */
-+      qla2x00_init_ms_mbx_iocb(ha, sizeof(ct_iu_dhba_t),
-+          sizeof(ct_iu_preamble_t), MANAGEMENT_SERVER,
-+          (CF_HEAD_TAG), 60 - 1);
-+
-+      DEBUG13(printk("%s(%ld): done msiocb init.\n", __func__, ha->host_no);)
-+
-+      /* Prepare CT request */
-+      memset(ha->ct_iu, 0, sizeof(ct_fdmi_pkt_t));
-+      ct = (ct_iu_dhba_t *)ha->ct_iu;
-+
-+      /* Setup CT-IU Basic preamble. */
-+      QLA_INIT_FDMI_CTIU_HDR(ha, ct->hdr);
-+      ct->hdr.cmd_rsp_code = __constant_cpu_to_be16(DHBA);
-+
-+      /* Setup deregister hba payload. */
-+      memcpy(ct->hba_portname, ha->init_cb->port_name, WWN_SIZE);
-+
-+      DEBUG13(printk("%s(%ld): done ct init.\n", __func__, ha->host_no);)
-+
-+      /* Go issue command and wait for completion. */
-+      /* Execute MS IOCB */
-+      rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma,
-+          sizeof(ms_iocb_entry_t));
-+      if (rval != QL_STATUS_SUCCESS) {
-+              DEBUG2_13(printk("%s(%ld): DHBA issue IOCB failed (%d).\n",
-+                  __func__, ha->host_no, rval);)
-+              *pret_stat = FDMI_STAT_ERR;
-+              rval = QL_STATUS_ERROR;
-+      } else if (ct->hdr.cmd_rsp_code !=
-+          __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
-+
-+              DEBUG2_13(printk("%s(%ld): DHBA failed, rejected "
-+                  "request, dhba_rsp:\n", __func__, ha->host_no);)
-+              DEBUG2_13(qla2x00_dump_buffer((uint8_t *)&ct->hdr,
-+                  sizeof(ct_iu_preamble_t));)
-+              *pret_stat = FDMI_STAT_ERR;
-+              rval = QL_STATUS_ERROR;
-+      }
-+
-+      DEBUG13(printk("%s(%ld): exiting.\n", __func__ ,ha->host_no);)
-+
-+      return (rval);
-+}
-+
-+/*
-+ * qla2x00_fdmi_rhba_intr
-+ *    FDMI register HBA sent via regular request queue.
-+ *
-+ * Input:
-+ *    ha:             adapter state pointer.
-+ *    fcport:         device context pointer.
-+ *
-+ * Returns:
-+ *    qla2x00 local function return status code.
-+ *
-+ * Context:
-+ *    Kernel context.
-+ */
-+STATIC int
-+qla2x00_fdmi_rhba_intr(scsi_qla_host_t *ha)
-+{
-+      int                     rval = QL_STATUS_SUCCESS;
-+      uint16_t                tov;
-+      unsigned long           cpu_flags = 0;
-+      struct ct_info          *pdata;
-+      ct_iu_rhba_t            *ct;
-+      ms_iocb_entry_t         *pkt;
-+      srb_t                   *sp;
-+
-+      DEBUG13(printk("%s(%ld): entered\n", __func__, ha->host_no);)
-+
-+      if ((rval = qla2x00_fdmi_cmnd_srb_alloc(ha, &sp))){
-+              DEBUG2_13(printk("%s(%ld): cmd_srb_alloc failed.\n",
-+                  __func__, ha->host_no);)
-+              return (rval);
-+      }
-+
-+      tov = ha->login_timeout*2;
-+
-+      DEBUG13(printk("%s(%ld): going to srb_init\n", __func__, ha->host_no);)
-+
-+      qla2x00_fdmi_srb_init(ha, sp, tov, __constant_cpu_to_be16(RHBA));
-+
-+      DEBUG13(printk("%s(%ld): done srb_init\n", __func__, ha->host_no);)
-+
-+      pdata = (struct ct_info *)sp->cmd->sc_request->sr_buffer;
-+      ct = (ct_iu_rhba_t *)pdata->pct_buf;
-+
-+      /* Setup CT-IU Basic preamble. */
-+      QLA_INIT_FDMI_CTIU_HDR(ha, ct->hdr);
-+      ct->hdr.cmd_rsp_code = pdata->ct_cmd;
-+
-+      /* Setup register hba payload. */
-+      qla2x00_fdmi_setup_rhbainfo(ha, ct);
-+
-+      DEBUG13(printk("%s(%ld): done setup_rhbainfo\n", __func__, ha->host_no);)
-+
-+      /* get spin lock for this operation */
-+      spin_lock_irqsave(&ha->hardware_lock, cpu_flags);
-+
-+      /* Get MS request IOCB from request queue. */
-+      pkt = (ms_iocb_entry_t *)qla2x00_ms_req_pkt(ha, sp);
-+      if (pkt == NULL) {
-+              /* release spin lock and return error. */
-+              DEBUG2_13(printk("%s(%ld): no pkt. going to unlock "
-+                  "and free mem.\n", __func__, ha->host_no);)
-+
-+              spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
-+
-+              qla2x00_fdmi_cmnd_srb_free(ha, sp);
-+
-+              DEBUG2_13(printk("%s(%ld): MSIOCB - could not get "
-+                  "Request Packet.\n", __func__, ha->host_no);)
-+
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      DEBUG13(printk(KERN_INFO "%s(%ld): going to init_req_q_msiocb\n",
-+          __func__, ha->host_no);)
-+      qla2x00_init_req_q_ms_iocb(ha, pkt, pdata->ct_buf_dma_addr,
-+          sizeof(ct_iu_rhba_t), sizeof(ct_iu_preamble_t), MANAGEMENT_SERVER,
-+          0, tov);
-+
-+      /* Issue command to ISP */
-+      DEBUG13(printk("%s(%ld): going to call isp_cmd.\n",
-+          __func__, ha->host_no);)
-+
-+      qla2x00_isp_cmd(ha);
-+
-+      DEBUG13(printk("%s(%ld): going to add timer.\n",
-+          __func__, ha->host_no);)
-+
-+      qla2x00_add_timer_to_cmd(sp, tov + 2);
-+
-+      spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
-+
-+      DEBUG13(printk("%s(%ld): exiting\n", __func__, ha->host_no);)
-+
-+      return (rval);
-+}
-+
-+STATIC int
-+qla2x00_fdmi_rhat_intr(scsi_qla_host_t *ha, Scsi_Cmnd *pscsi_cmd, void *pct_buf,
-+    dma_addr_t ct_buf_dma_addr)
-+{
-+      int                     rval = QL_STATUS_SUCCESS;
-+      uint16_t                tov;
-+      unsigned long           cpu_flags = 0;
-+      struct ct_info          *pdata;
-+      ct_iu_rhat_t            *cth;
-+      ms_iocb_entry_t         *pkt;
-+      srb_t                   *sp;
-+
-+      DEBUG13(printk("%s(%ld): entered\n", __func__, ha->host_no);)
-+
-+      /* Allocate SRB block. */
-+      if ((sp = qla2x00_get_new_sp(ha)) == NULL) {
-+
-+              DEBUG2_13(printk("%s(%ld): ERROR cannot alloc sp.\n",
-+                  __func__, ha->host_no);)
-+
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      DEBUG13(printk("%s(%ld): got sp\n", __func__, ha->host_no);)
-+
-+      if (qla2x00_fdmi_srb_tmpmem_alloc(ha, sp)) {
-+              /* error */
-+              atomic_set(&(sp)->ref_count, 0);
-+              add_to_free_queue(ha, sp);
-+              sp = NULL;
-+
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      sp->cmd = pscsi_cmd;
-+
-+      tov = ha->login_timeout*2;
-+      qla2x00_fdmi_srb_init(ha, sp, tov, __constant_cpu_to_be16(RHAT));
-+
-+      DEBUG13(printk("%s(%ld): done srb_init\n", __func__, ha->host_no);)
-+
-+      pdata = (struct ct_info *)sp->cmd->sc_request->sr_buffer;
-+      cth = (ct_iu_rhat_t *)pdata->pct_buf;
-+
-+      /* Setup CT-IU Basic preamble. */
-+      QLA_INIT_FDMI_CTIU_HDR(ha, cth->hdr);
-+      cth->hdr.cmd_rsp_code = pdata->ct_cmd;
-+
-+      /* Setup register hba payload. */
-+      qla2x00_fdmi_setup_rhatinfo(ha, cth);
-+
-+      DEBUG13(printk("%s(%ld): done setup_rhatinfo\n", __func__, ha->host_no);)
-+
-+      /* get spin lock for this operation */
-+      spin_lock_irqsave(&ha->hardware_lock, cpu_flags);
-+
-+      /* Get MS request IOCB from request queue. */
-+      pkt = (ms_iocb_entry_t *)qla2x00_ms_req_pkt(ha, sp);
-+      if (pkt == NULL) {
-+              /* release spin lock and return error. */
-+              spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
-+
-+              qla2x00_fdmi_cmnd_srb_free(ha, sp);
-+
-+              DEBUG2_13(printk("%s(%ld): inst=%ld MSIOCB - could not get "
-+                  "Request Packet.\n", __func__, ha->host_no, ha->instance);)
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      qla2x00_init_req_q_ms_iocb(ha, pkt, pdata->ct_buf_dma_addr,
-+          sizeof(ct_iu_rhat_t), sizeof(ct_iu_preamble_t), MANAGEMENT_SERVER,
-+          0, tov);
-+
-+      DEBUG13(printk("%s(%ld): call isp_cmd.\n",
-+          __func__, ha->host_no);)
-+
-+      qla2x00_isp_cmd(ha);
-+
-+      DEBUG13(printk("%s(%ld): going to add timer.\n",
-+          __func__, ha->host_no);)
-+
-+      qla2x00_add_timer_to_cmd(sp, tov + 2);
-+
-+      spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
-+
-+      DEBUG13(printk("%s(%ld): exiting\n", __func__, ha->host_no);)
-+
-+      return (rval);
-+}
-+
-+STATIC int
-+qla2x00_fdmi_rpa_intr(scsi_qla_host_t *ha, Scsi_Cmnd *pscsi_cmd, void *pct_buf,
-+    dma_addr_t ct_buf_dma_addr)
-+{
-+      int                     rval = QL_STATUS_SUCCESS;
-+      uint16_t                tov;
-+      unsigned long           cpu_flags = 0;
-+      struct ct_info          *pdata;
-+      ct_iu_rpa_t             *ctp;
-+      ms_iocb_entry_t         *pkt;
-+      srb_t                   *sp;
-+
-+      DEBUG13(printk("%s(%ld): entered\n", __func__, ha->host_no);)
-+
-+      /* Allocate SRB block. */
-+      if ((sp = qla2x00_get_new_sp(ha)) == NULL) {
-+
-+              DEBUG2_13(printk("%s(%ld): ERROR cannot alloc sp.\n",
-+                  __func__, ha->host_no);)
-+
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      DEBUG13(printk("%s(%ld): got sp\n", __func__, ha->host_no);)
-+
-+      if (qla2x00_fdmi_srb_tmpmem_alloc(ha, sp)) {
-+              /* error */
-+              atomic_set(&(sp)->ref_count, 0);
-+              add_to_free_queue(ha, sp);
-+              sp = NULL;
-+
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      sp->cmd = pscsi_cmd;
-+
-+      tov = ha->login_timeout*2;
-+      qla2x00_fdmi_srb_init(ha, sp, tov, __constant_cpu_to_be16(RPA));
-+
-+      DEBUG13(printk("%s(%ld): done srb_init\n", __func__, ha->host_no);)
-+
-+      pdata = (struct ct_info *)sp->cmd->sc_request->sr_buffer;
-+      ctp = (ct_iu_rpa_t *)pdata->pct_buf;
-+
-+      /* Setup CT-IU Basic preamble. */
-+      QLA_INIT_FDMI_CTIU_HDR(ha, ctp->hdr);
-+      ctp->hdr.cmd_rsp_code = pdata->ct_cmd;
-+
-+      /* Setup register port attribute payload. */
-+      qla2x00_fdmi_setup_rpainfo(ha, ctp);
-+
-+      DEBUG13(printk("%s(%ld): done setup_rpainfo\n", __func__, ha->host_no);)
-+
-+      /* get spin lock for this operation */
-+      spin_lock_irqsave(&ha->hardware_lock, cpu_flags);
-+
-+      /* Get MS request IOCB from request queue. */
-+      pkt = (ms_iocb_entry_t *)qla2x00_ms_req_pkt(ha, sp);
-+      if (pkt == NULL) {
-+              /* release spin lock and return error. */
-+              spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
-+
-+              qla2x00_fdmi_cmnd_srb_free(ha, sp);
-+
-+              DEBUG2_13(printk("%s(%ld): inst=%ld MSIOCB - could not get "
-+                  "Request Packet.\n", __func__, ha->host_no, ha->instance);)
-+              return (QL_STATUS_RESOURCE_ERROR);
-+      }
-+
-+      qla2x00_init_req_q_ms_iocb(ha, pkt, pdata->ct_buf_dma_addr,
-+          sizeof(ct_iu_rpa_t), sizeof(ct_iu_preamble_t), MANAGEMENT_SERVER,
-+          0, tov);
-+      DEBUG13(printk("%s(%ld): calling isp_cmd.\n",
-+          __func__, ha->host_no);)
-+
-+      qla2x00_isp_cmd(ha);
-+
-+      DEBUG13(printk("%s(%ld): going to add timer.\n",
-+          __func__, ha->host_no);)
-+
-+      qla2x00_add_timer_to_cmd(sp, tov + 2);
-+
-+      spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
-+
-+      DEBUG13(printk("%s(%ld): exiting\n", __func__, ha->host_no);)
-+
-+      return (rval);
-+}
-+
-+
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_gs.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_gs.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_gs.h     1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_gs.h  2004-04-22 19:42:21.000000000 -0700
-@@ -0,0 +1,369 @@
-+/******************************************************************************
-+ *                  QLOGIC LINUX SOFTWARE
-+ *
-+ * QLogic ISP2x00 device driver for Linux 2.4.x
-+ * Copyright (C) 2003 QLogic Corporation
-+ * (www.qlogic.com)
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2, or (at your option) any
-+ * later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * General Public License for more details.
-+ *
-+ ******************************************************************************/
-+
-+#ifndef _QLA_GS_H
-+#define       _QLA_GS_H
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+
-+/*
-+ * FC-GS-4 definitions.
-+ */
-+#define       GS4_REVISION            0x01
-+#define       GS_TYPE_MGMT_SERVER     0xFA
-+#define       GS_TYPE_DIR_SERVER      0xFC
-+#define GS_SUBTYPE_FDMI_HBA   0x10
-+
-+/* FDMI Command Codes. */
-+#define       GRHL    0x100
-+#define       GHAT    0x101
-+#define       GRPL    0x102
-+#define       GPAT    0x110
-+#define       RHBA    0x200
-+#define       RHAT    0x201
-+#define       RPRT    0x210
-+#define       RPA     0x211
-+#define       DHBA    0x300
-+#define       DHAT    0x301
-+#define       DPRT    0x310
-+#define       DPA     0x311
-+
-+/*
-+ * CT information unit basic preamble.
-+ */
-+typedef struct {
-+      uint8_t         revision;
-+      uint8_t         in_id[3];
-+      uint8_t         gs_type;
-+      uint8_t         gs_subtype;
-+      uint8_t         options;
-+      uint8_t         reserved;
-+      uint16_t        cmd_rsp_code;
-+      uint16_t        max_resid_size;
-+      uint8_t         fragment_id;
-+      uint8_t         reason;
-+      uint8_t         explanation;
-+      uint8_t         vendor_unique;
-+} ct_iu_preamble_t;
-+
-+#define FDMI_STAT_OK                  0
-+#define FDMI_STAT_ERR                 1
-+#define FDMI_STAT_ALREADY_REGISTERED  2
-+
-+#define FDMI_REASON_INVALID_CMD               0x01
-+#define FDMI_REASON_INVALID_VERSION   0x02
-+#define FDMI_REASON_LOGICAL_ERR               0x03
-+#define FDMI_REASON_INVALID_CTIU_SIZE 0x04
-+#define FDMI_REASON_LOGICAL_BUSY      0x05
-+#define FDMI_REASON_PROTOCOL_ERR      0x07
-+#define FDMI_REASON_CANNOT_PERFORM    0x09
-+#define FDMI_REASON_NOT_SUPPORTED     0x0B
-+#define FDMI_REASON_HARD_ENF_FAILED   0x0C
-+
-+#define FDMI_EXPL_NO_ADDITIONAL_EXPLANATION   0x00
-+#define FDMI_EXPL_HBA_ALREADY_REGISTERED      0x10
-+#define FDMI_EXPL_HBA_ATTR_NOT_REGISTERED     0x11
-+#define FDMI_EXPL_HBA_ATTR_MULTI_SAME_TYPE    0x12
-+#define FDMI_EXPL_INVALID_HBA_ATTR_LEN                0x13
-+#define FDMI_EXPL_HBA_ATTR_NOT_PRESENT                0x14
-+#define FDMI_EXPL_PORT_NOT_IN_PORT_LIST               0x15
-+#define FDMI_EXPL_HBA_ID_NOT_IN_PORT_LIST     0x16
-+#define FDMI_EXPL_PORT_ATTR_NOT_REGISTERED    0x20
-+#define FDMI_EXPL_PORT_NOT_REGISTERED         0x21
-+#define FDMI_EXPL_PORT_ATTR_MULTI_SAME_TYPE   0x22
-+#define FDMI_EXPL_INVALID_PORT_ATTR_LEN               0x23
-+
-+/*
-+ * HBA attribute types.
-+ */
-+#define       T_NODE_NAME                     1
-+#define       T_MANUFACTURER                  2
-+#define       T_SERIAL_NUMBER                 3
-+#define       T_MODEL                         4
-+#define       T_MODEL_DESCRIPTION             5
-+#define       T_HARDWARE_VERSION              6
-+#define       T_DRIVER_VERSION                7
-+#define       T_OPTION_ROM_VERSION            8
-+#define       T_FIRMWARE_VERSION              9
-+#define       T_OS_NAME_AND_VERSION           0xa
-+#define       T_MAXIMUM_CT_PAYLOAD_LENGTH     0xb
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[WWN_SIZE];
-+} hba_nn_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[20];
-+} hba_man_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[8];
-+} hba_sn_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[16];
-+} hba_mod_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[80];
-+} hba_mod_desc_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[16];
-+} hba_hv_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[28];
-+} hba_dv_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[16];
-+} hba_or_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[16];
-+} hba_fw_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[16];
-+} hba_os_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[4];
-+} hba_maxctlen_attr_t;
-+
-+/*
-+ * HBA Attribute Block.
-+ */
-+#define       HBA_ATTR_COUNT          10
-+typedef struct {
-+      uint32_t                count;
-+      hba_nn_attr_t           nn;
-+      hba_man_attr_t          man;
-+      hba_sn_attr_t           sn;
-+      hba_mod_attr_t          mod;
-+      hba_mod_desc_attr_t     mod_desc;
-+      hba_hv_attr_t           hv;
-+      hba_dv_attr_t           dv;
-+      hba_or_attr_t           or;
-+      hba_fw_attr_t           fw;
-+      hba_os_attr_t           os;
-+#if 0
-+      hba_maxctlen_attr_t     max_ctlen;
-+#endif
-+} hba_attr_t;
-+
-+/*
-+ * Port attribute types.
-+ */
-+#define       T_FC4_TYPES                     1
-+#define       T_SUPPORT_SPEED                 2
-+#define       T_CURRENT_SPEED                 3
-+#define       T_MAX_FRAME_SIZE                4
-+#define       T_OS_DEVICE_NAME                5
-+#define       T_HOST_NAME                     6
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[32];
-+} port_fc4_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint32_t                value;
-+} port_speed_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint32_t                value;
-+} port_frame_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[24];
-+} port_os_attr_t;
-+
-+typedef struct {
-+      uint16_t                type;
-+      uint16_t                len;
-+      uint8_t                 value[80];
-+} port_host_name_attr_t;
-+
-+/*
-+ * Port Attribute Block.
-+ */
-+#define       PORT_ATTR_COUNT         6
-+typedef struct {
-+      uint32_t                count;
-+      port_fc4_attr_t         fc4_types;
-+      port_speed_attr_t       sup_speed;
-+      port_speed_attr_t       cur_speed;
-+      port_frame_attr_t       max_fsize;
-+      port_os_attr_t          os_dev_name;
-+      port_host_name_attr_t   host_name;
-+} port_attr_t;
-+
-+/*
-+ * Registered Port List
-+ */
-+typedef struct {
-+      uint32_t                num_ports;
-+      uint8_t                 port_entry[WWN_SIZE];
-+} reg_port_list_t;
-+
-+/*
-+ * Get HBA Attributes.
-+ */
-+typedef struct {
-+      ct_iu_preamble_t        hdr;
-+      uint8_t                 hba_identifier[WWN_SIZE];
-+} ct_iu_ghat_req_t;
-+
-+typedef struct {
-+      ct_iu_preamble_t        hdr;
-+      reg_port_list_t         plist;
-+      hba_attr_t              attr;
-+} ct_iu_ghat_rsp_t;
-+
-+/*
-+ * Register HBA.
-+ */
-+typedef struct {
-+      ct_iu_preamble_t        hdr;
-+      uint8_t                 hba_identifier[WWN_SIZE];
-+      reg_port_list_t         plist;
-+      hba_attr_t              attr;
-+} ct_iu_rhba_t;
-+
-+/*
-+ * Register HBA Attributes.
-+ */
-+typedef struct {
-+      ct_iu_preamble_t        hdr;
-+      uint8_t                 hba_identifier[WWN_SIZE];
-+      hba_attr_t              attr;
-+} ct_iu_rhat_t;
-+
-+/*
-+ * Register Port.
-+ */
-+typedef struct {
-+      ct_iu_preamble_t        hdr;
-+      uint8_t                 hba_portname[WWN_SIZE];
-+      uint8_t                 portname[WWN_SIZE];
-+      port_attr_t             attr;
-+} ct_iu_rprt_t;
-+
-+/*
-+ * Register Port Attributes.
-+ */
-+typedef struct {
-+      ct_iu_preamble_t        hdr;
-+      uint8_t                 portname[WWN_SIZE];
-+      port_attr_t             attr;
-+} ct_iu_rpa_t;
-+
-+/*
-+ * Deregister HBA.
-+ */
-+typedef struct {
-+      ct_iu_preamble_t        hdr;
-+      uint8_t                 hba_portname[WWN_SIZE];
-+} ct_iu_dhba_t;
-+
-+/*
-+ * Deregister HBA Attributes.
-+ */
-+typedef struct {
-+      ct_iu_preamble_t        hdr;
-+      uint8_t                 hba_portname[WWN_SIZE];
-+} ct_iu_dhat_t;
-+
-+/*
-+ * Deregister Port.
-+ */
-+typedef struct {
-+      ct_iu_preamble_t        hdr;
-+      uint8_t                 portname[WWN_SIZE];
-+} ct_iu_dprt_t;
-+
-+/*
-+ * Deregister Port Attributes.
-+ */
-+typedef struct {
-+      ct_iu_preamble_t        hdr;
-+      uint8_t                 portname[WWN_SIZE];
-+} ct_iu_dpa_t;
-+
-+typedef struct {
-+      uint16_t                loop_id;
-+      uint32_t                response_byte_count;
-+      uint32_t                command_byte_count;
-+} ct_iocb_t;
-+
-+
-+typedef struct ct_fdmi_pkt {
-+      union {
-+              ct_iu_ghat_req_t        ghat_req;
-+              ct_iu_ghat_rsp_t        ghat_rsp;
-+              ct_iu_rhba_t            rhba;
-+              ct_iu_rhat_t            rhat;
-+              ct_iu_rprt_t            rprt;
-+              ct_iu_rpa_t             rpa;
-+              ct_iu_dhba_t            dhba;
-+              ct_iu_dhat_t            dhat;
-+              ct_iu_dprt_t            dprt;
-+              ct_iu_dpa_t             dpa;
-+      } t;
-+} ct_fdmi_pkt_t;
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+#endif /* _QLA_GS_H */
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_inioct.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_inioct.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_inioct.c 2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_inioct.c      2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -19,17 +19,17 @@
- #include "inioct.h"
--static int qla2x00_loopback_test(scsi_qla_host_t *ha, INT_LOOPBACK_REQ *req,
-+extern int qla2x00_loopback_test(scsi_qla_host_t *ha, INT_LOOPBACK_REQ *req,
-     uint16_t *ret_mb);
--static int qla2x00_read_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
--static int qla2x00_update_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
--static int qla2x00_write_nvram_word(scsi_qla_host_t *, uint8_t, uint16_t);
--static int qla2x00_send_loopback(scsi_qla_host_t *, EXT_IOCTL *, int);
--static int qla2x00_read_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
--static int qla2x00_update_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
-+int qla2x00_read_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
-+int qla2x00_update_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
-+int qla2x00_write_nvram_word(scsi_qla_host_t *, uint8_t, uint16_t);
-+int qla2x00_send_loopback(scsi_qla_host_t *, EXT_IOCTL *, int);
-+int qla2x00_read_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
-+int qla2x00_update_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
--static int
-+int
- qla2x00_read_nvram(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
- {
-       char            *ptmp_buf;
-@@ -68,7 +68,15 @@ qla2x00_read_nvram(scsi_qla_host_t *ha, 
-       /* Dump NVRAM. */
- #if defined(ISP2300)
--      if (ha->device_id == QLA2312_DEVICE_ID) {
-+      if (
-+          #if defined(ISP200)
-+          (ha->device_id == QLA6312_DEVICE_ID ||
-+           ha->device_id == QLA6322_DEVICE_ID)  
-+          #else       
-+          (ha->device_id == QLA2312_DEVICE_ID ||
-+           ha->device_id == QLA2322_DEVICE_ID)
-+          #endif          
-+         ) {      
-               data = RD_REG_WORD(&reg->ctrl_status);
-               if ((data >> 14) == 1)
-                       base = 0x80;
-@@ -106,15 +114,22 @@ qla2x00_read_nvram(scsi_qla_host_t *ha, 
-               wptr++;
-       }
--#if defined(ISP2300)
--      if (ha->device_id == QLA2312_DEVICE_ID) {
-+#if defined(ISP2300) 
-+      if (
-+          #if defined(ISP200)
-+          (ha->device_id == QLA6312_DEVICE_ID ||
-+           ha->device_id == QLA6322_DEVICE_ID)  
-+          #else       
-+          (ha->device_id == QLA2312_DEVICE_ID ||
-+           ha->device_id == QLA2322_DEVICE_ID)
-+          #endif          
-+         ) {      
-               /* Unlock resource */
-               WRT_REG_WORD(&reg->host_semaphore, 0);
-       }
- #endif
--      ret = copy_to_user((uint8_t *)pext->ResponseAdr, ptmp_buf,
--          transfer_size * 2);
-+      ret = copy_to_user(pext->ResponseAdr, ptmp_buf, transfer_size * 2);
-       if (ret) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-               DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
-@@ -146,10 +161,10 @@ qla2x00_read_nvram(scsi_qla_host_t *ha, 
-  * Context:
-  *    Kernel context.
-  */
--static int
-+int
- qla2x00_update_nvram(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
- {
--#if defined(ISP2300)
-+#if defined(ISP2300) 
-       device_reg_t    *reg = ha->iobase;
- #endif
- #if defined(ISP2100)
-@@ -190,17 +205,15 @@ qla2x00_update_nvram(scsi_qla_host_t *ha
-       kernel_tmp = (uint8_t *)pnew_nv;
-       usr_tmp = (uint8_t *)pext->RequestAdr;
--      ret = verify_area(VERIFY_READ, (void *)usr_tmp, transfer_size);
-+      ret = copy_from_user(kernel_tmp, usr_tmp, transfer_size);
-       if (ret) {
-               DEBUG9_10(printk(
--                  "qla2x00_update_nvram: ERROR in buffer verify READ. "
-+                  "qla2x00_update_nvram: ERROR in buffer copy READ. "
-                   "RequestAdr=%p\n", pext->RequestAdr);)
-               qla2x00_free_ioctl_scrap_mem(ha);
-               return ret;
-       }
--      copy_from_user(kernel_tmp, usr_tmp, transfer_size);
--
-       kernel_tmp = (uint8_t *)pnew_nv;
-       /* we need to checksum the nvram */
-@@ -215,7 +228,15 @@ qla2x00_update_nvram(scsi_qla_host_t *ha
-       /* Write to NVRAM */
- #if defined(ISP2300)
--      if (ha->device_id == QLA2312_DEVICE_ID) {
-+      if (
-+          #if defined(ISP200)
-+          (ha->device_id == QLA6312_DEVICE_ID ||
-+           ha->device_id == QLA6322_DEVICE_ID)  
-+          #else       
-+          (ha->device_id == QLA2312_DEVICE_ID ||
-+           ha->device_id == QLA2322_DEVICE_ID)
-+          #endif          
-+         ) {      
-               data = RD_REG_WORD(&reg->ctrl_status);
-               if ((data >> 14) == 1)
-                       base = 0x80;
-@@ -254,7 +275,15 @@ qla2x00_update_nvram(scsi_qla_host_t *ha
-       }
- #if defined(ISP2300)
--      if (ha->device_id == QLA2312_DEVICE_ID) {
-+      if (
-+          #if defined(ISP200)
-+          (ha->device_id == QLA6312_DEVICE_ID ||
-+           ha->device_id == QLA6322_DEVICE_ID)  
-+          #else       
-+          (ha->device_id == QLA2312_DEVICE_ID ||
-+           ha->device_id == QLA2322_DEVICE_ID)
-+          #endif          
-+         ) {      
-               /* Unlock resource */
-               WRT_REG_WORD(&reg->host_semaphore, 0);
-       }
-@@ -270,7 +299,7 @@ qla2x00_update_nvram(scsi_qla_host_t *ha
-       return 0;
- }
--static int
-+int
- qla2x00_write_nvram_word(scsi_qla_host_t *ha, uint8_t addr, uint16_t data)
- {
-       int count;
-@@ -346,7 +375,7 @@ qla2x00_write_nvram_word(scsi_qla_host_t
-       return 0;
- }
--static int
-+int
- qla2x00_send_loopback(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
- {
-       int             status;
-@@ -373,20 +402,15 @@ qla2x00_send_loopback(scsi_qla_host_t *h
-               return pext->Status;
-       }
--      status = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
--          pext->RequestLen);
-+      status = copy_from_user(&req, pext->RequestAdr, pext->RequestLen);
-       if (status) {
-               pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify read of "
-+              DEBUG9_10(printk("qla2x00_send_loopback: ERROR copy read of "
-                   "request buffer.\n");)
-               return pext->Status;
-       }
--      copy_from_user((uint8_t *)&req, (uint8_t *)pext->RequestAdr,
--          pext->RequestLen);
--
--      status = verify_area(VERIFY_READ, (void *)pext->ResponseAdr,
--          pext->ResponseLen);
-+      status = copy_from_user(&rsp, pext->ResponseAdr, pext->ResponseLen);
-       if (status) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-               DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify read of "
-@@ -394,9 +418,6 @@ qla2x00_send_loopback(scsi_qla_host_t *h
-               return pext->Status;
-       }
--      copy_from_user((uint8_t *)&rsp, (uint8_t *)pext->ResponseAdr,
--          pext->ResponseLen);
--
-       if (req.TransferCount > req.BufferLength ||
-           req.TransferCount > rsp.BufferLength) {
-@@ -411,18 +432,15 @@ qla2x00_send_loopback(scsi_qla_host_t *h
-               return pext->Status;
-       }
--      status = verify_area(VERIFY_READ, (void *)req.BufferAddress,
-+      status = copy_from_user(ha->ioctl_mem, req.BufferAddress,
-           req.TransferCount);
-       if (status) {
-               pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify read of "
-+              DEBUG9_10(printk("qla2x00_send_loopback: ERROR copy read of "
-                   "user loopback data buffer.\n");)
-               return pext->Status;
-       }
--      copy_from_user((uint8_t *)ha->ioctl_mem, (uint8_t *)req.BufferAddress,
--          req.TransferCount);
--
-       DEBUG9(printk("qla2x00_send_loopback: req -- bufadr=%p, buflen=%x, "
-           "xfrcnt=%x, rsp -- bufadr=%p, buflen=%x.\n",
-           req.BufferAddress, req.BufferLength, req.TransferCount,
-@@ -473,22 +491,19 @@ qla2x00_send_loopback(scsi_qla_host_t *h
-               }
-       }
--      status = verify_area(VERIFY_WRITE, (void *)rsp.BufferAddress,
-+      DEBUG9(printk("qla2x00_send_loopback: loopback mbx cmd ok. "
-+          "copying data.\n");)
-+
-+      /* put loopback return data in user buffer */
-+      status = copy_to_user(rsp.BufferAddress, ha->ioctl_mem,
-           req.TransferCount);
-       if (status) {
-               pext->Status = EXT_STATUS_COPY_ERR;
-               DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify "
-                   "write of return data buffer.\n");)
--              return status ;
-+              return (status);
-       }
--      DEBUG9(printk("qla2x00_send_loopback: loopback mbx cmd ok. "
--          "copying data.\n");)
--
--      /* put loopback return data in user buffer */
--      copy_to_user((uint8_t *)rsp.BufferAddress,
--          (uint8_t *)ha->ioctl_mem, req.TransferCount);
--
-       rsp.CompletionStatus = ret_mb[0];
-       if (ha->current_topology == ISP_CFG_F) {
-@@ -504,18 +519,14 @@ qla2x00_send_loopback(scsi_qla_host_t *h
-               }
-       }
--      status = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
--          pext->ResponseLen);
-+      status = copy_to_user(pext->ResponseAdr, &rsp, pext->ResponseLen);
-       if (status) {
-               pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify "
-+              DEBUG9_10(printk("qla2x00_send_loopback: ERROR copy "
-                   "write of response buffer.\n");)
-               return pext->Status;
-       }
--      copy_to_user((uint8_t *)pext->ResponseAdr, (uint8_t *)&rsp,
--          pext->ResponseLen);
--
-       pext->Status       = EXT_STATUS_OK;
-       pext->DetailStatus = EXT_STATUS_OK;
-@@ -590,14 +601,6 @@ int qla2x00_update_option_rom(scsi_qla_h
-       /* Read from user buffer */
-       usr_tmp = (uint8_t *)pext->RequestAdr;
--      ret = verify_area(VERIFY_READ, (void *)usr_tmp, FLASH_IMAGE_SIZE);
--      if (ret) {
--              pext->Status = EXT_STATUS_COPY_ERR;
--              DEBUG9_10(printk("%s: ERROR in buffer verify READ. "
--                              "RequestAdr=%p\n",
--                              __func__, pext->RequestAdr);)
--              return (ret);
--      }
-       kern_tmp = (uint8_t *)KMEM_ZALLOC(FLASH_IMAGE_SIZE, 30);
-       if (kern_tmp == NULL) {
-@@ -606,7 +609,15 @@ int qla2x00_update_option_rom(scsi_qla_h
-                       "%s: ERROR in flash allocation.\n", __func__);
-               return (1);
-       }
--      copy_from_user(kern_tmp, usr_tmp, FLASH_IMAGE_SIZE);
-+      ret = copy_from_user(kern_tmp, usr_tmp, FLASH_IMAGE_SIZE);
-+      if (ret) {
-+              KMEM_FREE(kern_tmp, FLASH_IMAGE_SIZE);
-+              pext->Status = EXT_STATUS_COPY_ERR;
-+              DEBUG9_10(printk("%s: ERROR in buffer copy READ. "
-+                              "RequestAdr=%p\n",
-+                              __func__, pext->RequestAdr);)
-+              return (ret);
-+      }
-       /* Go with update */
-       spin_lock_irqsave(&ha->hardware_lock, cpu_flags);
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_inline.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_inline.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_inline.h 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_inline.h      2004-04-22 19:42:21.000000000 -0700
-@@ -0,0 +1,49 @@
-+/******************************************************************************
-+ *                  QLOGIC LINUX SOFTWARE
-+ *
-+ * QLogic ISPFBLITE device driver for Linux 2.4.x
-+ * Copyright (C) 2003 QLogic Corporation
-+ * (www.qlogic.com)
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2, or (at your option) any
-+ * later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * General Public License for more details.
-+ *
-+ ******************************************************************************/
-+
-+/*
-+ * This file includes a set of defines that are required to compile the 
-+ * source code for qla2xxx module
-+ */
-+
-+static inline int 
-+check_device_id(scsi_qla_host_t *ha)
-+{
-+      return (ha->device_id == QLA6322_DEVICE_ID ||
-+          ha->device_id == QLA2322_DEVICE_ID); 
-+}
-+
-+static inline int 
-+check_all_device_ids(scsi_qla_host_t *ha)
-+{
-+      return (ha->device_id == QLA6312_DEVICE_ID ||
-+          ha->device_id == QLA6322_DEVICE_ID ||
-+          ha->device_id == QLA2312_DEVICE_ID ||
-+          ha->device_id == QLA2322_DEVICE_ID);
-+}
-+
-+static inline void 
-+set_model_number(scsi_qla_host_t *ha)
-+{
-+      if (ha->device_id == QLA6312_DEVICE_ID ||
-+          ha->device_id == QLA6322_DEVICE_ID)
-+              sprintf(ha->model_number, "QLA63xx");
-+      else
-+              sprintf(ha->model_number, "QLA23xx");
-+}
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_ip.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_ip.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_ip.c     2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_ip.c  2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_ip.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_ip.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_ip.h     2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_ip.h  2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 IP network driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_mbx.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_mbx.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_mbx.c    2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_mbx.c 2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -54,14 +54,6 @@ qla2x00_load_ram(scsi_qla_host_t *, dma_
- STATIC int
- qla2x00_execute_fw(scsi_qla_host_t *);
--#if defined(WORD_FW_LOAD)
--STATIC int
--qla2x00_write_ram_word(scsi_qla_host_t *, uint16_t, uint16_t);
--
--STATIC int
--qla2x00_read_ram_word(scsi_qla_host_t *, uint16_t, uint16_t *);
--#endif
--
- STATIC int
- qla2x00_mbx_reg_test(scsi_qla_host_t *);
-@@ -93,7 +85,7 @@ STATIC int
- qla2x00_get_retry_cnt(scsi_qla_host_t *, uint8_t *, uint8_t *);
- #if defined(INTAPI)
--static int
-+int
- qla2x00_loopback_test(scsi_qla_host_t *, INT_LOOPBACK_REQ *, uint16_t *);
- int
- qla2x00_echo_test(scsi_qla_host_t *, INT_LOOPBACK_REQ *, uint16_t *);
-@@ -103,7 +95,7 @@ STATIC int
- qla2x00_init_firmware(scsi_qla_host_t *, uint16_t);
- STATIC int
--qla2x00_get_port_database(scsi_qla_host_t *, fcdev_t *, uint8_t);
-+qla2x00_get_port_database(scsi_qla_host_t *, fc_port_t *, uint8_t);
- STATIC int
- qla2x00_get_firmware_state(scsi_qla_host_t *, uint16_t *);
-@@ -121,7 +113,7 @@ STATIC int
- qla2x00_get_port_name(scsi_qla_host_t *, uint16_t, uint8_t *, uint8_t);
- STATIC uint8_t
--qla2x00_get_link_status(scsi_qla_host_t *, uint8_t, void *, uint16_t *);
-+qla2x00_get_link_status(scsi_qla_host_t *, uint16_t, link_stat_t *, uint16_t *);
- STATIC int
- qla2x00_lip_reset(scsi_qla_host_t *);
-@@ -143,15 +135,14 @@ STATIC int
- qla2x00_full_login_lip(scsi_qla_host_t *ha);
- STATIC int
--qla2x00_get_port_list(scsi_qla_host_t *, port_list_entry_t *, dma_addr_t,
--    uint16_t, uint16_t *);
-+qla2x00_get_id_list(scsi_qla_host_t *, void *, dma_addr_t, uint16_t *);
- #if 0 /* not yet needed */
- STATIC int
- qla2x00_dump_ram(scsi_qla_host_t *, uint32_t, dma_addr_t, uint32_t);
- #endif
--STATIC int
-+int
- qla2x00_lun_reset(scsi_qla_host_t *, uint16_t, uint16_t);
- STATIC int
-@@ -650,14 +641,22 @@ qla2x00_mailbox_command(scsi_qla_host_t 
-                       spin_lock_irqsave(&ha->hardware_lock, flags);
-                       /* Check for pending interrupts. */
--#if defined(ISP2300)
--
--                      if (ha->device_id == QLA2312_DEVICE_ID) {
--
-+#if defined(ISP2300) 
-+                      if (
-+                          #if defined(ISP200)
-+                          (ha->device_id == QLA6312_DEVICE_ID ||
-+                           ha->device_id == QLA6322_DEVICE_ID)  
-+                          #else       
-+                          (ha->device_id == QLA2312_DEVICE_ID ||
-+                           ha->device_id == QLA2322_DEVICE_ID)
-+                          #endif          
-+                         ) {      
-                               while ((data =RD_REG_WORD(
-                                   &reg->istatus)) & RISC_INT) {
-                                       data =RD_REG_WORD(&reg->host_status_lo);
-+                                      if((data & HOST_STATUS_INT ) == 0)
-+                                              break;
-                                       qla2x00_isr(ha, data, &discard);
-                               }
-@@ -684,6 +683,33 @@ qla2x00_mailbox_command(scsi_qla_host_t 
-       if (!abort_active)
-               QLA_MBX_REG_LOCK(ha);
-+      if (!abort_active) {
-+              DEBUG11(printk("qla2x00_mailbox_cmd: checking for additional "
-+                  "resp interrupt.\n");)
-+
-+              /* polling mode for non isp_abort commands. */
-+              /* Go check for any more response interrupts pending. */
-+              spin_lock_irqsave(&ha->hardware_lock, flags);
-+#if defined(ISP2300)
-+
-+              while (!(ha->flags.in_isr) &&
-+                  ((data = qla2x00_debounce_register(&reg->host_status_lo)) &
-+                  HOST_STATUS_INT))
-+                      qla2x00_isr(ha, data, &discard);
-+#else
-+
-+              while (!(ha->flags.in_isr) &&
-+                  ((data = qla2x00_debounce_register(&reg->istatus)) &
-+                  RISC_INT))
-+                      qla2x00_isr(ha, data,&discard);
-+#endif
-+
-+              spin_unlock_irqrestore(&ha->hardware_lock, flags);
-+      }
-+      /* Clean up */
-+      ha->mcp = NULL;
-+
-+
-       /* Check whether we timed out */
-       if (ha->flags.mbox_int) {
-@@ -715,7 +741,13 @@ qla2x00_mailbox_command(scsi_qla_host_t 
-       } else {
- #if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_3) || \
--              defined(QL_DEBUG_LEVEL_11)
-+              defined(QL_DEBUG_LEVEL_11)      
-+              printk(KERN_INFO "qla2x00_mailbox_command(%ld): **** MB"
-+                  " Command Timeout for cmd %x ****\n", ha->host_no, command);
-+              printk(KERN_INFO "qla2x00_mailbox_command: icontrol=%x "
-+                  "jiffies=%lx\n", RD_REG_WORD(&reg->ictrl), jiffies);
-+              printk(KERN_INFO "qla2x00_mailbox_command: *** mailbox[0] " 
-+                  "= 0x%x ***\n", RD_REG_WORD(optr));
-               printk("qla2x00_mailbox_command(%ld): **** MB Command Timeout "
-                   "for cmd %x ****\n", ha->host_no, command);
-               printk("qla2x00_mailbox_command: icontrol=%x jiffies=%lx\n",
-@@ -735,32 +767,6 @@ qla2x00_mailbox_command(scsi_qla_host_t 
-       ha->flags.mbox_busy = FALSE;
--      /* Clean up */
--      ha->mcp = NULL;
--
--      if (!abort_active) {
--              DEBUG11(printk("qla2x00_mailbox_cmd: checking for additional "
--                  "resp interrupt.\n");)
--
--              /* polling mode for non isp_abort commands. */
--              /* Go check for any more response interrupts pending. */
--              spin_lock_irqsave(&ha->hardware_lock, flags);
--#if defined(ISP2300)
--
--              while (!(ha->flags.in_isr) &&
--                  ((data = qla2x00_debounce_register(&reg->host_status_lo)) &
--                  HOST_STATUS_INT))
--                      qla2x00_isr(ha, data, &discard);
--#else
--
--              while (!(ha->flags.in_isr) &&
--                  ((data = qla2x00_debounce_register(&reg->istatus)) &
--                  RISC_INT))
--                      qla2x00_isr(ha, data,&discard);
--#endif
--
--              spin_unlock_irqrestore(&ha->hardware_lock, flags);
--      }
-       if (status == QL_STATUS_TIMEOUT ) {
-               if (!io_lock_on || (mcp->flags & IOCTL_CMD)) {
-@@ -865,12 +871,12 @@ qla2x00_load_ram(scsi_qla_host_t *ha, dm
-       mcp->mb[2] = MSW(req_dma);
-       mcp->mb[3] = LSW(req_dma);
-       mcp->mb[4] = (uint16_t)req_len;
--      mcp->mb[6] = QL21_64BITS_4THWD(req_dma);
--      mcp->mb[7] = QL21_64BITS_3RDWD(req_dma);
-+      mcp->mb[6] = MSW(MSD(req_dma));
-+      mcp->mb[7] = LSW(MSD(req_dma));
-       mcp->out_mb = MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -881,12 +887,12 @@ qla2x00_load_ram(scsi_qla_host_t *ha, dm
-               mcp->mb[2] = MSW(nml_dma);
-               mcp->mb[3] = LSW(nml_dma);
-               mcp->mb[4] = (uint16_t)nml_len;
--              mcp->mb[6] = QL21_64BITS_4THWD(nml_dma);
--              mcp->mb[7] = QL21_64BITS_3RDWD(nml_dma);
-+              mcp->mb[6] = MSW(MSD(nml_dma));
-+              mcp->mb[7] = LSW(MSD(nml_dma));
-               mcp->out_mb = MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
-               mcp->in_mb = MBX_0;
--              mcp->tov = 30;
-+              mcp->tov = 60;
-               mcp->flags = 0;
-               rval = (int)qla2x00_mailbox_command(ha, mcp);
-       }
-@@ -905,13 +911,11 @@ qla2x00_load_ram(scsi_qla_host_t *ha, dm
- }
- /*
-- * qla2x00_execute_fw
-- *    Start adapter firmware.
-+ * qla2x00_load_ram_ext
-+ *    Load adapter extended RAM using DMA.
-  *
-  * Input:
-  *    ha = adapter block pointer.
-- *    TARGET_QUEUE_LOCK must be released.
-- *    ADAPTER_STATE_LOCK must be released.
-  *
-  * Returns:
-  *    qla2x00 local function return status code.
-@@ -919,82 +923,81 @@ qla2x00_load_ram(scsi_qla_host_t *ha, dm
-  * Context:
-  *    Kernel context.
-  */
--STATIC int
--qla2x00_execute_fw(scsi_qla_host_t *ha)
-+int
-+qla2x00_load_ram_ext(scsi_qla_host_t *ha, dma_addr_t req_dma,
-+    uint32_t risc_addr, uint16_t risc_code_size)
- {
-       int rval;
-       mbx_cmd_t mc;
-       mbx_cmd_t *mcp = &mc;
-+      uint32_t        req_len;
-+      dma_addr_t      nml_dma;
-+      uint32_t        nml_len;
-+      uint32_t        normalized;
--      DEBUG11(printk("qla2x00_execute_fw(%ld): entered.\n",
--          ha->host_no);)
--
--      mcp->mb[0] = MBC_EXECUTE_FIRMWARE;
--      mcp->mb[1] = *QLBoardTbl_fc[ha->devnum].fwstart;
--      mcp->out_mb = MBX_1|MBX_0;
--      mcp->in_mb = MBX_0;
--      mcp->tov = 30;
--      mcp->flags = 0;
--      rval = qla2x00_mailbox_command(ha, mcp);
--
--      DEBUG11(printk("qla2x00_execute_fw(%ld): done.\n",
--          ha->host_no);)
--
--      return rval;
--}
--
-+      DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
--#if defined(WORD_FW_LOAD)
--/*
-- * qla2x00_write_ram_word
-- *
-- * Input:
-- *    ha = adapter block pointer.
-- *
-- * Returns:
-- *    qla2x00 local function return status code.
-- *
-- * Context:
-- *    Kernel context.
-- */
--STATIC int
--qla2x00_write_ram_word(scsi_qla_host_t *ha, uint16_t addr, uint16_t data)
--{
--      int rval;
--      mbx_cmd_t mc;
--      mbx_cmd_t *mcp = &mc;
-+      req_len = risc_code_size;
-+      nml_dma = 0;
-+      nml_len = 0;
--      DEBUG11(printk("qla2x00_write_ram_word(%ld): entered.\n",
--          ha->host_no);)
-+      normalized = qla2x00_normalize_dma_addr(&req_dma, &req_len, &nml_dma,
-+          &nml_len);
--      mcp->mb[0] = MBC_WRITE_RAM_WORD;
--      mcp->mb[1] = addr;
--      mcp->mb[2] = data;
--      mcp->out_mb = MBX_2|MBX_1|MBX_0;
-+      /* Load first segment */
-+      mcp->mb[0] = MBC_LOAD_RAM_EXTENDED;
-+      mcp->mb[1] = LSW(risc_addr);
-+      mcp->mb[2] = MSW(req_dma);
-+      mcp->mb[3] = LSW(req_dma);
-+      mcp->mb[4] = (uint16_t)req_len;
-+      mcp->mb[6] = MSW(MSD(req_dma));
-+      mcp->mb[7] = LSW(MSD(req_dma));
-+      mcp->mb[8] = MSW(risc_addr);
-+      mcp->out_mb = MBX_8|MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_0;
-       mcp->tov = 30;
-       mcp->flags = 0;
-+      rval = qla2x00_mailbox_command(ha, mcp);
--      rval = (int)qla2x00_mailbox_command(ha, mcp);
-+      /* Load second segment - if necessary */
-+      if (normalized && (rval == QL_STATUS_SUCCESS)) {
-+              risc_addr += req_len;
-+              mcp->mb[0] = MBC_LOAD_RAM_EXTENDED;
-+              mcp->mb[1] = LSW(risc_addr);
-+              mcp->mb[2] = MSW(nml_dma);
-+              mcp->mb[3] = LSW(nml_dma);
-+              mcp->mb[4] = (uint16_t)nml_len;
-+              mcp->mb[6] = MSW(MSD(nml_dma));
-+              mcp->mb[7] = LSW(MSD(nml_dma));
-+              mcp->mb[8] = MSW(risc_addr);
-+              mcp->out_mb = MBX_8|MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
-+              mcp->in_mb = MBX_0;
-+              mcp->tov = 30;
-+              mcp->flags = 0;
-+              rval = qla2x00_mailbox_command(ha, mcp);
-+      }
-       if (rval != QL_STATUS_SUCCESS) {
-               /*EMPTY*/
--              DEBUG2_3_11(printk("qla2x00_write_ram_word(%ld): failed=%x.\n",
--                  ha->host_no, rval);)
-+              DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x.\n",
-+                  __func__, ha->host_no, rval, mcp->mb[0]));
-       } else {
-               /*EMPTY*/
--              DEBUG11(printk("qla2x00_write_ram_word(%ld): done.\n",
--                  ha->host_no);)
-+              DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
-       }
-       return rval;
- }
-+
- /*
-- * qla2x00_read_ram_word
-+ * qla2x00_execute_fw
-+ *    Start adapter firmware.
-  *
-  * Input:
-  *    ha = adapter block pointer.
-+ *    TARGET_QUEUE_LOCK must be released.
-+ *    ADAPTER_STATE_LOCK must be released.
-  *
-  * Returns:
-  *    qla2x00 local function return status code.
-@@ -1003,38 +1006,42 @@ qla2x00_write_ram_word(scsi_qla_host_t *
-  *    Kernel context.
-  */
- STATIC int
--qla2x00_read_ram_word(scsi_qla_host_t *ha, uint16_t addr, uint16_t *data)
-+qla2x00_execute_fw(scsi_qla_host_t *ha)
- {
-       int rval;
-       mbx_cmd_t mc;
-       mbx_cmd_t *mcp = &mc;
--      DEBUG11(printk("qla2x00_read_ram_word(%ld): entered.\n",
-+      DEBUG11(printk("qla2x00_execute_fw(%ld): entered.\n",
-           ha->host_no);)
--      mcp->mb[0] = MBC_READ_RAM_WORD;
--      mcp->mb[1] = addr;
--
-+      mcp->mb[0] = MBC_EXECUTE_FIRMWARE;
-+      mcp->mb[1] = *QLBoardTbl_fc[ha->devnum].fwinfo->fwstart;
-       mcp->out_mb = MBX_1|MBX_0;
--      mcp->in_mb = MBX_0|MBX_2;
--      mcp->tov = 30;
--      mcp->flags = 0;
-+#if defined(ISP2300) 
-+      if (
-+          #if defined(ISP200)
-+           ha->pdev->device == QLA6322_DEVICE_ID 
-+          #else
-+           ha->pdev->device == QLA2322_DEVICE_ID
-+          #endif
-+         ) {
-+              mcp->mb[2] = 0; /* FW image has been loaded into memory */
-+              mcp->out_mb |= MBX_2;
-+              DEBUG11(printk("%s fwstart=%x \n",__func__,mcp->mb[1]);)
-+      }
-+#endif
--      rval = (int)qla2x00_mailbox_command(ha, mcp);
-+      mcp->in_mb = MBX_0;
-+      mcp->tov = 60;
-+      mcp->flags = 0;
-+      rval = qla2x00_mailbox_command(ha, mcp);
--      if (rval != QL_STATUS_SUCCESS) {
--              /*EMPTY*/
--              DEBUG2_3_11(printk("qla2x00_read_ram_word(%ld): failed=%x.\n",
--                  ha->host_no, rval);)
--      } else {
--              *data = mcp->mb[2];
--              DEBUG11(printk("qla2x00_read_ram_word(%ld): done.\n",
--                  ha->host_no);)
--      }
-+      DEBUG11(printk("qla2x00_execute_fw(%ld): done.\n",
-+          ha->host_no);)
-       return rval;
- }
--#endif
- /*
-  * qla2x00_mbx_reg_test
-@@ -1071,7 +1078,7 @@ qla2x00_mbx_reg_test(scsi_qla_host_t *ha
-       mcp->mb[7] = 0x2525;
-       mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -1123,10 +1130,10 @@ qla2x00_verify_checksum(scsi_qla_host_t 
-           ha->host_no);)
-       mcp->mb[0] = MBC_VERIFY_CHECKSUM;
--      mcp->mb[1] = *QLBoardTbl_fc[ha->devnum].fwstart;
-+      mcp->mb[1] = *QLBoardTbl_fc[ha->devnum].fwinfo->fwstart;
-       mcp->out_mb = MBX_1|MBX_0;
-       mcp->in_mb = MBX_2|MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -1175,11 +1182,11 @@ qla2x00_issue_iocb(scsi_qla_host_t *ha, 
-       mcp->mb[1] = 0;
-       mcp->mb[2] = MSW(phys_addr);
-       mcp->mb[3] = LSW(phys_addr);
--      mcp->mb[6] = QL21_64BITS_4THWD(phys_addr);
--      mcp->mb[7] = QL21_64BITS_3RDWD(phys_addr);
-+      mcp->mb[6] = MSW(MSD(phys_addr));
-+      mcp->mb[7] = LSW(MSD(phys_addr));
-       mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_2|MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -1228,12 +1235,12 @@ qla2x00_abort_command(scsi_qla_host_t *h
-       fcport = sp->fclun->fcport;
-       t = SCSI_TCN_32(sp->cmd);
--      if (ha->loop_state == LOOP_DOWN ||
-+
-+      if (atomic_read(&ha->loop_state) == LOOP_DOWN ||
-           atomic_read(&fcport->state) == FC_DEVICE_LOST) {
-               /* v2.19.8 Ignore abort request if port is down */
-               return 1;
-       }
--
-       spin_lock_irqsave(&ha->hardware_lock, flags);
-       for (handle = 1; handle < MAX_OUTSTANDING_COMMANDS; handle++) {
-               if (ha->outstanding_cmds[handle] == sp)
-@@ -1247,13 +1254,17 @@ qla2x00_abort_command(scsi_qla_host_t *h
-       }
-       mcp->mb[0] = MBC_ABORT_COMMAND;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[1] = fcport->loop_id;
-+#else
-       mcp->mb[1] = fcport->loop_id << 8;
-+#endif
-       mcp->mb[2] = (uint16_t)handle;
-       mcp->mb[3] = (uint16_t)(handle >> 16);
-       mcp->mb[6] = (uint16_t)sp->fclun->lun;
-       mcp->out_mb = MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -1295,11 +1306,15 @@ qla2x00_abort_device(scsi_qla_host_t *ha
-                       ha->host_no);)
-       mcp->mb[0] = MBC_ABORT_DEVICE;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[1] = loop_id;
-+#else
-       mcp->mb[1] = loop_id << 8;
-+#endif
-       mcp->mb[2] = lun;
-       mcp->out_mb = MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -1358,11 +1373,19 @@ qla2x00_abort_target(fc_port_t *fcport)
-       loop_id = fcport->loop_id;
-       mcp->mb[0] = MBC_ABORT_TARGET;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[1] = fcport->loop_id;
-+#else
-       mcp->mb[1] = loop_id << 8;
-+#endif
-       mcp->mb[2] = fcport->ha->loop_reset_delay;
-       mcp->out_mb = MBX_2|MBX_1|MBX_0;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[10] = 0;
-+        mcp->out_mb |= MBX_10;
-+#endif
-       mcp->in_mb = MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(fcport->ha, mcp);
-@@ -1425,11 +1448,15 @@ qla2x00_target_reset(scsi_qla_host_t *ha
-           ha->host_no, tgt->vis_port->loop_id);)
-       mcp->mb[0] = MBC_TARGET_RESET;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[1] = tgt->vis_port->loop_id;
-+#else
-       mcp->mb[1] = tgt->vis_port->loop_id << 8;
-+#endif
-       mcp->mb[2] = ha->loop_reset_delay;
-       mcp->out_mb = MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -1480,7 +1507,7 @@ qla2x00_get_adapter_id(scsi_qla_host_t *
-       mcp->mb[0] = MBC_GET_ADAPTER_LOOP_ID;
-       mcp->out_mb = MBX_0;
-       mcp->in_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -1533,7 +1560,7 @@ qla2x00_get_retry_cnt(scsi_qla_host_t *h
-       mcp->mb[0] = MBC_GET_RETRY_COUNT;
-       mcp->out_mb = MBX_0;
-       mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -1592,13 +1619,13 @@ qla2x00_loopback_test(scsi_qla_host_t *h
-       mcp->mb[14] = LSW(ha->ioctl_mem_phys); /* send data address */
-       mcp->mb[15] = MSW(ha->ioctl_mem_phys);
--      mcp->mb[20] = QL21_64BITS_3RDWD(ha->ioctl_mem_phys);
--      mcp->mb[21] = QL21_64BITS_4THWD(ha->ioctl_mem_phys);
-+      mcp->mb[20] = LSW(MSD(ha->ioctl_mem_phys));
-+      mcp->mb[21] = MSW(MSD(ha->ioctl_mem_phys));
-       mcp->mb[16] = LSW(ha->ioctl_mem_phys); /* rcv data address */
-       mcp->mb[17] = MSW(ha->ioctl_mem_phys);
--      mcp->mb[6]  = QL21_64BITS_3RDWD(ha->ioctl_mem_phys);
--      mcp->mb[7]  = QL21_64BITS_4THWD(ha->ioctl_mem_phys);
-+      mcp->mb[6]  = LSW(MSD(ha->ioctl_mem_phys));
-+      mcp->mb[7]  = MSW(MSD(ha->ioctl_mem_phys));
-       mcp->mb[18] = LSW(req->IterationCount); /* iteration count lsb */
-       mcp->mb[19] = MSW(req->IterationCount); /* iteration count msb */
-@@ -1608,7 +1635,7 @@ qla2x00_loopback_test(scsi_qla_host_t *h
-       mcp->in_mb = MBX_19|MBX_18|MBX_3|MBX_2|MBX_1|MBX_0;
-       mcp->buf_size = req->TransferCount;
-       mcp->flags = MBX_DMA_OUT|MBX_DMA_IN|IOCTL_CMD;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       DEBUG11(printk("qla2x00_send_loopback: req.Options=%x iterations=%x "
-           "MAILBOX_CNT=%d.\n", req->Options, req->IterationCount,
-@@ -1668,20 +1695,20 @@ qla2x00_echo_test(scsi_qla_host_t *ha, I
-       mcp->mb[14] = LSW(ha->ioctl_mem_phys); /* send data address */
-       mcp->mb[15] = MSW(ha->ioctl_mem_phys);
--      mcp->mb[20] = QL21_64BITS_3RDWD(ha->ioctl_mem_phys);
--      mcp->mb[21] = QL21_64BITS_4THWD(ha->ioctl_mem_phys);
-+      mcp->mb[20] = LSW(MSD(ha->ioctl_mem_phys));
-+      mcp->mb[21] = MSW(MSD(ha->ioctl_mem_phys));
-       mcp->mb[16] = LSW(ha->ioctl_mem_phys); /* rcv data address */
-       mcp->mb[17] = MSW(ha->ioctl_mem_phys);
--      mcp->mb[6]  = QL21_64BITS_3RDWD(ha->ioctl_mem_phys);
--      mcp->mb[7]  = QL21_64BITS_4THWD(ha->ioctl_mem_phys);
-+      mcp->mb[6]  = LSW(MSD(ha->ioctl_mem_phys));
-+      mcp->mb[7]  = MSW(MSD(ha->ioctl_mem_phys));
-       mcp->out_mb = MBX_21|MBX_20|MBX_17|MBX_16|MBX_15|
-               MBX_14|MBX_10|MBX_7|MBX_6|MBX_1|MBX_0;
-       mcp->in_mb = MBX_0;
-       mcp->buf_size = tran_cnt;
-       mcp->flags = MBX_DMA_OUT|MBX_DMA_IN|IOCTL_CMD;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       rval = qla2x00_mailbox_command(ha, mcp);
-@@ -1735,13 +1762,13 @@ qla2x00_init_firmware(scsi_qla_host_t *h
-       mcp->mb[3] = LSW(ha->init_cb_dma);
-       mcp->mb[4] = 0;
-       mcp->mb[5] = 0;
--      mcp->mb[6] = QL21_64BITS_4THWD(ha->init_cb_dma);
--      mcp->mb[7] = QL21_64BITS_3RDWD(ha->init_cb_dma);
-+      mcp->mb[6] = MSW(MSD(ha->init_cb_dma));
-+      mcp->mb[7] = LSW(MSD(ha->init_cb_dma));
-       mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
-       mcp->in_mb = MBX_5|MBX_4|MBX_0;
-       mcp->buf_size = size;
-       mcp->flags = MBX_DMA_OUT;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-       if (rval != QL_STATUS_SUCCESS) {
-@@ -1775,7 +1802,7 @@ qla2x00_init_firmware(scsi_qla_host_t *h
-  *    Kernel context.
-  */
- STATIC int
--qla2x00_get_port_database(scsi_qla_host_t *ha, fcdev_t *dev, uint8_t opt)
-+qla2x00_get_port_database(scsi_qla_host_t *ha, fc_port_t *fcport, uint8_t opt)
- {
-       int rval;
-       mbx_cmd_t mc;
-@@ -1800,43 +1827,50 @@ qla2x00_get_port_database(scsi_qla_host_
-               mcp->mb[0] = MBC_ENHANCED_GET_PORT_DATABASE;
-       else
-               mcp->mb[0] = MBC_GET_PORT_DATABASE;
--
--      mcp->mb[1] = dev->loop_id << 8 | opt;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[1] = fcport->loop_id;
-+#else
-+        mcp->mb[1] = fcport->loop_id << 8 | opt;
-+#endif
-       mcp->mb[2] = MSW(phys_address);
-       mcp->mb[3] = LSW(phys_address);
--      mcp->mb[6] = QL21_64BITS_4THWD(phys_address);
--      mcp->mb[7] = QL21_64BITS_3RDWD(phys_address);
-+      mcp->mb[6] = MSW(MSD(phys_address));
-+      mcp->mb[7] = LSW(MSD(phys_address));
-       mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[10] = opt;
-+        mcp->out_mb |= MBX_10;
-+#endif
-       mcp->in_mb = MBX_0;
-       mcp->buf_size = PORT_DATABASE_SIZE;
-       mcp->flags = MBX_DMA_IN;
-       /*mcp->tov = ha->retry_count * ha->login_timeout * 2;*/
--      mcp->tov =  ha->login_timeout * 2;
-+      /* mcp->tov =  ha->login_timeout * 2; */
-+      mcp->tov =  (ha->login_timeout * 2) + (ha->login_timeout/2);
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-       if (rval == QL_STATUS_SUCCESS) {
-               /* Save some data */
-               /* Names are big endian. */
--              memcpy((void *)&dev->name[0],(void *)&pd->node_name[0], 8);
--              memcpy((void *)&dev->wwn[0], (void *)&pd->port_name[0], 8);
-+              memcpy(fcport->node_name, pd->node_name, WWN_SIZE);
-+              memcpy(fcport->port_name, pd->port_name, WWN_SIZE);
-               /* Get port_id of device. */
--              dev->d_id.b.al_pa = pd->port_id[2];
--              dev->d_id.b.area = pd->port_id[3];
--              dev->d_id.b.domain = pd->port_id[0];
--              dev->d_id.b.rsvd_1 = 0;
--
--              /* Get initiator status of device. */
--              pd->prli_svc_param_word_3[0] & BIT_5 ?
--                  (dev->flag = dev->flag | DEV_INITIATOR) :
--                  (dev->flag = dev->flag & ~DEV_INITIATOR);
--
--              /* Check for logged in and whether target device. */
--              if (pd->master_state != PD_STATE_PORT_LOGGED_IN &&
--                  pd->slave_state != PD_STATE_PORT_LOGGED_IN) {
--                      rval = QL_STATUS_ERROR;
--              } else if (pd->master_state == PD_STATE_PORT_UNAVAILABLE) {
--                      rval = QL_STATUS_ERROR;
-+              fcport->d_id.b.al_pa = pd->port_id[2];
-+              fcport->d_id.b.area = pd->port_id[3];
-+              fcport->d_id.b.domain = pd->port_id[0];
-+              fcport->d_id.b.rsvd_1 = 0;
-+
-+              /* If not target must be initiator or unknown type. */
-+              if ((pd->prli_svc_param_word_3[0] & BIT_4) == 0) {
-+                      fcport->port_type = FCT_INITIATOR;
-+              } else {
-+                      fcport->port_type = FCT_TARGET;
-+
-+                      /* Check for logged in. */
-+                      if (pd->master_state != PD_STATE_PORT_LOGGED_IN &&
-+                          pd->slave_state != PD_STATE_PORT_LOGGED_IN)
-+                              rval = QL_STATUS_ERROR;
-               }
-       }
-@@ -1883,7 +1917,7 @@ qla2x00_get_firmware_state(scsi_qla_host
-       mcp->mb[0] = MBC_GET_FIRMWARE_STATE;
-       mcp->out_mb = MBX_0;
-       mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -1930,7 +1964,7 @@ qla2x00_get_firmware_options(scsi_qla_ho
-       mcp->mb[0] = MBC_GET_FIRMWARE_OPTIONS;
-       mcp->out_mb = MBX_0;
-       mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -1984,7 +2018,7 @@ qla2x00_set_firmware_options(scsi_qla_ho
-       mcp->mb[12] = 0;        /* Undocumented, but used */
-       mcp->out_mb = MBX_12|MBX_11|MBX_10|MBX_3|MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -2031,10 +2065,18 @@ qla2x00_get_port_name(scsi_qla_host_t *h
-           ha->host_no);)
-       mcp->mb[0] = MBC_GET_PORT_NAME;
--      mcp->mb[1] = loop_id << 8 | opt;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[1] = loop_id;
-+#else
-+        mcp->mb[1] = loop_id << 8 | opt;
-+#endif
-       mcp->out_mb = MBX_1|MBX_0;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[10] = opt;
-+        mcp->out_mb |= MBX_10;
-+#endif
-       mcp->in_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -2076,8 +2118,8 @@ qla2x00_get_port_name(scsi_qla_host_t *h
-  *    BIT_1 = mailbox error.
-  */
- STATIC uint8_t
--qla2x00_get_link_status(scsi_qla_host_t *ha, uint8_t loop_id, void *ret_buf,
--    uint16_t *status)
-+qla2x00_get_link_status(scsi_qla_host_t *ha, uint16_t loop_id,
-+    link_stat_t *ret_buf, uint16_t *status)
- {
-       int rval;
-       mbx_cmd_t mc;
-@@ -2100,14 +2142,22 @@ qla2x00_get_link_status(scsi_qla_host_t 
-       memset(stat_buf, 0, sizeof(link_stat_t));
-       mcp->mb[0] = MBC_GET_LINK_STATUS;
--      mcp->mb[1] = loop_id << 8;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[1] = loop_id;
-+#else
-+        mcp->mb[1] = loop_id << 8;
-+#endif
-       mcp->mb[2] = MSW(phys_address);
-       mcp->mb[3] = LSW(phys_address);
--      mcp->mb[6] = QL21_64BITS_4THWD(phys_address);
--      mcp->mb[7] = QL21_64BITS_3RDWD(phys_address);
-+      mcp->mb[6] = MSW(MSD(phys_address));
-+      mcp->mb[7] = LSW(MSD(phys_address));
-       mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[10] = 0;
-+        mcp->out_mb |= MBX_10;
-+#endif
-       mcp->in_mb = MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = IOCTL_CMD;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -2119,24 +2169,36 @@ qla2x00_get_link_status(scsi_qla_host_t 
-                       status[0] = mcp->mb[0];
-                       rval = BIT_1;
-               } else {
--                      /* copy over data */
--                      memcpy(ret_buf, stat_buf,sizeof(link_stat_t));
-+                      /* copy over data -- firmware data is LE. */
-+                      ret_buf->link_fail_cnt =
-+                          le32_to_cpu(stat_buf->link_fail_cnt);
-+                      ret_buf->loss_sync_cnt =
-+                          le32_to_cpu(stat_buf->loss_sync_cnt);
-+                      ret_buf->loss_sig_cnt =
-+                          le32_to_cpu(stat_buf->loss_sig_cnt);
-+                      ret_buf->prim_seq_err_cnt =
-+                          le32_to_cpu(stat_buf->prim_seq_err_cnt);
-+                      ret_buf->inval_xmit_word_cnt =
-+                          le32_to_cpu(stat_buf->inval_xmit_word_cnt);
-+                      ret_buf->inval_crc_cnt =
-+                          le32_to_cpu(stat_buf->inval_crc_cnt);
-+
-                       DEBUG(printk("qla2x00_get_link_status(%ld): stat dump: "
-                           "fail_cnt=%d loss_sync=%d loss_sig=%d seq_err=%d "
-                           "inval_xmt_word=%d inval_crc=%d.\n",
--                          ha->host_no,
--                          stat_buf->link_fail_cnt, stat_buf->loss_sync_cnt,
--                          stat_buf->loss_sig_cnt, stat_buf->prim_seq_err_cnt,
--                          stat_buf->inval_xmit_word_cnt,
--                          stat_buf->inval_crc_cnt);)
-+                          ha->host_no, ret_buf->link_fail_cnt,
-+                          ret_buf->loss_sync_cnt, ret_buf->loss_sig_cnt,
-+                          ret_buf->prim_seq_err_cnt,
-+                          ret_buf->inval_xmit_word_cnt,
-+                          ret_buf->inval_crc_cnt);)
-                       DEBUG11(printk("qla2x00_get_link_status(%ld): stat "
-                           "dump: fail_cnt=%d loss_sync=%d loss_sig=%d "
-                           "seq_err=%d inval_xmt_word=%d inval_crc=%d.\n",
--                          ha->host_no,
--                          stat_buf->link_fail_cnt, stat_buf->loss_sync_cnt,
--                          stat_buf->loss_sig_cnt, stat_buf->prim_seq_err_cnt,
--                          stat_buf->inval_xmit_word_cnt,
--                          stat_buf->inval_crc_cnt);)
-+                          ha->host_no, ret_buf->link_fail_cnt,
-+                          ret_buf->loss_sync_cnt, ret_buf->loss_sig_cnt,
-+                          ret_buf->prim_seq_err_cnt,
-+                          ret_buf->inval_xmit_word_cnt,
-+                          ret_buf->inval_crc_cnt);)
-               }
-       } else {
-               /* Failed. */
-@@ -2145,8 +2207,8 @@ qla2x00_get_link_status(scsi_qla_host_t 
-               rval = BIT_1;
-       }
--      pci_free_consistent(ha->pdev, sizeof(link_stat_t),
--          stat_buf, phys_address);
-+      pci_free_consistent(ha->pdev, sizeof(link_stat_t), stat_buf,
-+          phys_address);
-       return rval;
- }
-@@ -2177,12 +2239,21 @@ qla2x00_lip_reset(scsi_qla_host_t *ha)
-           ha->host_no);)
-       mcp->mb[0] = MBC_LIP_RESET;
--      mcp->mb[1] = 0xff00;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[1] = 0x00ff;
-+#else
-+        mcp->mb[1] = 0xff00;
-+#endif
-       mcp->mb[2] = ha->loop_reset_delay;
-       mcp->mb[3] = 0;
-       mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[10] = 0;
-+        mcp->out_mb |= MBX_10;
-+#endif
-+      mcp->mb[1] = 0xff00;
-       mcp->in_mb = MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -2230,14 +2301,15 @@ qla2x00_send_sns(scsi_qla_host_t *ha, dm
-       mcp->mb[1] = cmd_size;
-       mcp->mb[2] = MSW(sns_phys_address);
-       mcp->mb[3] = LSW(sns_phys_address);
--      mcp->mb[6] = QL21_64BITS_4THWD(sns_phys_address);
--      mcp->mb[7] = QL21_64BITS_3RDWD(sns_phys_address);
-+      mcp->mb[6] = MSW(MSD(sns_phys_address));
-+      mcp->mb[7] = LSW(MSD(sns_phys_address));
-       mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_0|MBX_1;
-       mcp->buf_size = buf_size;
-       mcp->flags = MBX_DMA_OUT|MBX_DMA_IN;
-       /*mcp->tov = ha->retry_count * ha->login_timeout * 2;*/
--      mcp->tov =  ha->login_timeout * 2;
-+      /* mcp->tov =  ha->login_timeout * 2; */
-+      mcp->tov =  (ha->login_timeout * 2) + (ha->login_timeout/2);
-       DEBUG11(printk("qla2x00_send_sns: retry cnt=%d ratov=%d total "
-           "tov=%d.\n", ha->retry_count, ha->login_timeout, mcp->tov);)
-@@ -2294,13 +2366,22 @@ qla2x00_login_fabric(scsi_qla_host_t *ha
-           ha->host_no);)
-       mcp->mb[0] = MBC_LOGIN_FABRIC_PORT;
--      mcp->mb[1] = (loop_id << 8) | opt;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[1] = loop_id;
-+#else
-+        mcp->mb[1] = (loop_id << 8) | opt;
-+#endif
-       mcp->mb[2] = domain;
-       mcp->mb[3] = area << 8 | al_pa;
-       mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[10] = opt;
-+        mcp->out_mb |= MBX_10;
-+#endif
-       mcp->in_mb = MBX_2|MBX_1|MBX_0;
-       /*mcp->tov = ha->retry_count * ha->login_timeout * 2;*/
--      mcp->tov =  ha->login_timeout * 2;
-+      /* mcp->tov =  ha->login_timeout * 2; */
-+      mcp->tov =  (ha->login_timeout * 2) + (ha->login_timeout/2);
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -2363,11 +2444,16 @@ qla2x00_login_local_device(scsi_qla_host
-       DEBUG3(printk("%s(%ld): entered.\n", __func__, ha->host_no);)
-       mcp->mb[0] = MBC_LOGIN_LOOP_PORT;
--      mcp->mb[1] = (loop_id << 8) ;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[1] = loop_id;
-+#else
-+        mcp->mb[1] = (loop_id << 8);
-+#endif
-       mcp->mb[2] = opt;
-       mcp->out_mb = MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_7|MBX_6|MBX_1|MBX_0;
--      mcp->tov =  ha->login_timeout * 2;
-+      /* mcp->tov =  ha->login_timeout * 2; */
-+      mcp->tov =  (ha->login_timeout * 2) + (ha->login_timeout/2);
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -2432,10 +2518,19 @@ qla2x00_fabric_logout(scsi_qla_host_t *h
-           ha->host_no);)
-       mcp->mb[0] = MBC_LOGOUT_FABRIC_PORT;
--      mcp->mb[1] = loop_id << 8;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[1] = loop_id;
-+#else
-+        mcp->mb[1] = loop_id << 8;
-+#endif
-       mcp->out_mb = MBX_1|MBX_0;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[10] = 0;
-+        mcp->out_mb |= MBX_10;
-+#endif
-+
-       mcp->in_mb = MBX_1|MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -2484,7 +2579,7 @@ qla2x00_full_login_lip(scsi_qla_host_t *
-       mcp->mb[3] = 0;
-       mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-@@ -2502,12 +2597,10 @@ qla2x00_full_login_lip(scsi_qla_host_t *
- }
- /*
-- * qla2x00_get_port_list
-+ * qla2x00_get_id_list
-  *
-  * Input:
-  *    ha = adapter block pointer.
-- *    TARGET_QUEUE_LOCK must be released.
-- *    ADAPTER_STATE_LOCK must be released.
-  *
-  * Returns:
-  *    qla2x00 local function return status code.
-@@ -2516,40 +2609,37 @@ qla2x00_full_login_lip(scsi_qla_host_t *
-  *    Kernel context.
-  */
- STATIC int
--qla2x00_get_port_list(scsi_qla_host_t *ha, port_list_entry_t *gp_list,
--    dma_addr_t gpl_phys_address, uint16_t opt, uint16_t *size)
-+qla2x00_get_id_list(scsi_qla_host_t *ha, void *id_list, dma_addr_t id_list_dma,
-+    uint16_t *entries)
- {
-       int rval;
-       mbx_cmd_t mc;
-       mbx_cmd_t *mcp = &mc;
--      DEBUG11(printk("qla2x00_get_port_list(%ld): entered.\n",
-+      DEBUG11(printk("qla2x00_get_id_list(%ld): entered.\n",
-           ha->host_no);)
--      if( gp_list == NULL ) {
-+      if (id_list == NULL)
-               return QL_STATUS_ERROR;
--      }
--      mcp->mb[0] = MBC_GET_PORT_LIST;
--      mcp->mb[1] = opt;
--      mcp->mb[2] = MSW(gpl_phys_address);
--      mcp->mb[3] = LSW(gpl_phys_address);
--      mcp->mb[6] = QL21_64BITS_4THWD(gpl_phys_address);
--      mcp->mb[7] = QL21_64BITS_3RDWD(gpl_phys_address);
--
--      mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-+      mcp->mb[0] = MBC_GET_ID_LIST;
-+      mcp->mb[1] = MSW(id_list_dma);
-+      mcp->mb[2] = LSW(id_list_dma);
-+      mcp->mb[3] = MSW(MSD(id_list_dma));
-+      mcp->mb[6] = LSW(MSD(id_list_dma));
-+      mcp->out_mb = MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_1|MBX_0;
-       mcp->tov = 30;
-       mcp->flags = 0;
--      rval = (int)qla2x00_mailbox_command(ha, mcp);
-+      rval = qla2x00_mailbox_command(ha, mcp);
-       if (rval != QL_STATUS_SUCCESS) {
-               /*EMPTY*/
--              DEBUG2_3_11(printk("qla2x00_get_port_list(%ld): failed=%x.\n",
-+              DEBUG2_3_11(printk("qla2x00_get_id_list(%ld): failed=%x.\n",
-                   ha->host_no, rval);)
-       } else {
--              *size = mcp->mb[1];
--              DEBUG11(printk("qla2x00_get_port_list(%ld): done.\n",
-+              *entries = mcp->mb[1];
-+              DEBUG11(printk("qla2x00_get_id_list(%ld): done.\n",
-                   ha->host_no);)
-       }
-@@ -2569,12 +2659,12 @@ qla2x00_dump_ram(scsi_qla_host_t *ha, ui
-       mcp->mb[1] = risc_address & 0xffff;
-       mcp->mb[3] = LSW(ispdump_dma);
-       mcp->mb[2] = MSW(ispdump_dma);
--      mcp->mb[4] = QL21_64BITS_4THWD(ispdump_dma);
--      mcp->mb[6] = QL21_64BITS_3RDWD(ispdump_dma);
-+      mcp->mb[4] = MSW(MSD(ispdump_dma));
-+      mcp->mb[6] = LSW(MSD(ispdump_dma));
-       mcp->mb[7] = 0;
-       mcp->out_mb = MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = qla2x00_mailbox_command(ha, mcp);
-@@ -2599,7 +2689,7 @@ qla2x00_dump_ram(scsi_qla_host_t *ha, ui
-  * Context:
-  *    Kernel context.
-  */
--static int
-+int
- qla2x00_lun_reset(scsi_qla_host_t *ha, uint16_t loop_id, uint16_t lun)
- {
-       int             rval;
-@@ -2609,11 +2699,15 @@ qla2x00_lun_reset(scsi_qla_host_t *ha, u
-       ENTER("qla2x00_lun_reset");
-       mcp->mb[0] = MBC_LUN_RESET;
--      mcp->mb[1] = loop_id << 8;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[1] = loop_id;
-+#else
-+        mcp->mb[1] = loop_id << 8;
-+#endif
-       mcp->mb[2] = lun;
-       mcp->out_mb = MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_0;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       mcp->flags = 0;
-       rval = qla2x00_mailbox_command(ha, mcp);
-@@ -2659,16 +2753,24 @@ qla2x00_send_rnid_mbx(scsi_qla_host_t *h
-           ha->host_no);)
-       mcp->mb[0] = MBC_SEND_RNID_ELS;
--      mcp->mb[1] = (loop_id << 8 ) | data_fmt;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[1] = loop_id;
-+#else
-+        mcp->mb[1] = (loop_id << 8) | data_fmt;
-+#endif
-       mcp->mb[2] = MSW(buf_phys_addr);
-       mcp->mb[3] = LSW(buf_phys_addr);
--      mcp->mb[6] = QL21_64BITS_4THWD(buf_phys_addr);
--      mcp->mb[7] = QL21_64BITS_3RDWD(buf_phys_addr);
-+      mcp->mb[6] = MSW(MSD(buf_phys_addr));
-+      mcp->mb[7] = LSW(MSD(buf_phys_addr));
-       mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-+#if defined(EXTENDED_IDS)
-+        mcp->mb[10] = data_fmt;
-+        mcp->out_mb |= MBX_10;
-+#endif
-       mcp->in_mb = MBX_1|MBX_0;
-       mcp->buf_size = buf_size;
-       mcp->flags = MBX_DMA_IN;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-       if (rval != QL_STATUS_SUCCESS) {
-@@ -2717,13 +2819,13 @@ qla2x00_set_rnid_params_mbx(scsi_qla_hos
-       mcp->mb[1] = 0;
-       mcp->mb[2] = MSW(buf_phys_addr);
-       mcp->mb[3] = LSW(buf_phys_addr);
--      mcp->mb[6] = QL21_64BITS_4THWD(buf_phys_addr);
--      mcp->mb[7] = QL21_64BITS_3RDWD(buf_phys_addr);
-+      mcp->mb[6] = MSW(MSD(buf_phys_addr));
-+      mcp->mb[7] = LSW(MSD(buf_phys_addr));
-       mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_1|MBX_0;
-       mcp->buf_size = buf_size;
-       mcp->flags = MBX_DMA_OUT;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-       if (rval != QLA2X00_SUCCESS) {
-@@ -2772,13 +2874,13 @@ qla2x00_get_rnid_params_mbx(scsi_qla_hos
-       mcp->mb[1] = 0;
-       mcp->mb[2] = MSW(buf_phys_addr);
-       mcp->mb[3] = LSW(buf_phys_addr);
--      mcp->mb[6] = QL21_64BITS_4THWD(buf_phys_addr);
--      mcp->mb[7] = QL21_64BITS_3RDWD(buf_phys_addr);
-+      mcp->mb[6] = MSW(MSD(buf_phys_addr));
-+      mcp->mb[7] = LSW(MSD(buf_phys_addr));
-       mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_1|MBX_0;
-       mcp->buf_size = buf_size;
-       mcp->flags = MBX_DMA_IN;
--      mcp->tov = 30;
-+      mcp->tov = 60;
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-       if (rval != QLA2X00_SUCCESS) {
-@@ -2832,13 +2934,14 @@ qla2x00_get_fcal_position_map(scsi_qla_h
-       mcp->mb[0] = MBC_GET_FCAL_MAP;
-       mcp->mb[2] = MSW(pmap_dma);
-       mcp->mb[3] = LSW(pmap_dma);
--      mcp->mb[6] = QL21_64BITS_4THWD(pmap_dma);
--      mcp->mb[7] = QL21_64BITS_3RDWD(pmap_dma);
-+      mcp->mb[6] = MSW(MSD(pmap_dma));
-+      mcp->mb[7] = LSW(MSD(pmap_dma));
-       mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
-       mcp->in_mb = MBX_1|MBX_0;
-       mcp->buf_size = FCAL_MAP_SIZE;
-       mcp->flags = MBX_DMA_IN;
--      mcp->tov =  ha->login_timeout * 2;
-+      /* mcp->tov =  ha->login_timeout * 2; */
-+      mcp->tov =  (ha->login_timeout * 2) + (ha->login_timeout/2);
-       rval = (int)qla2x00_mailbox_command(ha, mcp);
-       if (rval == QL_STATUS_SUCCESS) {
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_mbx.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_mbx.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_mbx.h    2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_mbx.h 2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_opts.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_opts.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_opts.c   2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_opts.c        2004-04-22 19:42:21.000000000 -0700
-@@ -146,7 +146,8 @@ static     const char *    usageText[] =
-       "  -w, --write",
-       "        write option data to a module",
-       "",
--      "  MODULE must be 'qla2100_conf', 'qla2200_conf', or 'qla2300_conf'.",
-+      "  MODULE must be 'qla2100_conf', 'qla2200_conf', 'qla2300_conf'.",
-+      "   or 'qla200_conf'.",
-       "",
-       "Option Data:",
-       "  Option data is read from one of the following files depending on the",
-@@ -157,6 +158,7 @@ static     const char *    usageText[] =
-       "        /etc/qla2100.conf  qla2100_conf",
-       "        /etc/qla2200.conf  qla2200_conf",
-       "        /etc/qla2300.conf  qla2300_conf",
-+      "        /etc/qla200.conf   qla20_conf",
-       "",
-       "  By default, the following directory is used to specify the location of",
-       "  the modules to update:", 
-@@ -193,6 +195,7 @@ static     const char *    usageText[] =
- #define MODULE_QLA2100        1
- #define MODULE_QLA2200_CONF   2
- #define MODULE_QLA2300_CONF   3
-+#define MODULE_QLA200_CONF    4
- struct module_info {
-       char    *name;
-@@ -205,6 +208,7 @@ static struct module_info modules[] = {
-       /* qla2100 not supported */
-       { "qla2200_conf", MODULE_QLA2200_CONF, "/etc/qla2200.conf" },
-       { "qla2300_conf", MODULE_QLA2300_CONF, "/etc/qla2300.conf" },
-+      { "qla200_conf",  MODULE_QLA200_CONF, "/etc/qla200.conf" },
-       { NULL, 0, NULL }
- };
- struct        module_info *module = NULL;
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_ppc64.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_ppc64.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_ppc64.c  1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_ppc64.c       2004-04-22 19:42:21.000000000 -0700
-@@ -0,0 +1,475 @@
-+/******************************************************************************
-+ *                  QLOGIC LINUX SOFTWARE
-+ *
-+ * QLogic ISP2x00 device driver for Linux 2.4.x
-+ * Copyright (C) 2003 QLogic Corporation
-+ * (www.qlogic.com)
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2, or (at your option) any
-+ * later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * General Public License for more details.
-+ *
-+ ******************************************************************************/
-+/* fs/ioctl.c */
-+extern asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, void *);
-+
-+extern int register_ioctl32_conversion(unsigned int cmd,
-+    int (*handler)(unsigned int, unsigned int, unsigned long, struct file *));
-+extern int unregister_ioctl32_conversion(unsigned int cmd);
-+
-+#if 0
-+static char qla2200_drvr_loaded_str[] = "qla2200_driver_loaded";
-+static char qla2300_drvr_loaded_str[] = "qla2300_driver_loaded";
-+#if defined(ISP2200)
-+static uint8_t qla2200_driver_loaded = 1;
-+#elif defined(ISP2300)
-+static uint8_t qla2300_driver_loaded = 1;
-+#endif
-+#endif
-+
-+typedef struct _INT_LOOPBACK_REQ_32
-+{
-+      UINT16  Options;                        /* 2   */
-+      UINT32  TransferCount;                  /* 4   */
-+      UINT32  IterationCount;                 /* 4   */
-+      u32     BufferAddress;                  /* 4  */
-+      UINT32  BufferLength;                   /* 4  */
-+      UINT16  Reserved[9];                    /* 18  */
-+} INT_LOOPBACK_REQ_32, *PINT_LOOPBACK_REQ_32; /* 36 */
-+
-+typedef struct _INT_LOOPBACK_RSP_32
-+{
-+      u32     BufferAddress;                  /* 4  */
-+      UINT32  BufferLength;                   /* 4  */
-+      UINT16  CompletionStatus;               /* 2  */
-+      UINT16  CrcErrorCount;                  /* 2  */
-+      UINT16  DisparityErrorCount;            /* 2  */
-+      UINT16  FrameLengthErrorCount;          /* 2  */
-+      UINT32  IterationCountLastError;        /* 4  */
-+      UINT8   CommandSent;                    /* 1  */
-+      UINT8   Reserved1;                      /* 1  */
-+      UINT16  Reserved2[7];                   /* 14 */
-+} INT_LOOPBACK_RSP_32, *PINT_LOOPBACK_RSP_32; /* 36 */
-+
-+typedef struct {
-+      u32     Signature;                      /* 4 chars string */
-+      UINT16  AddrMode;                       /* 2 */
-+      UINT16  Version;                        /* 2 */
-+      UINT16  SubCode;                        /* 2 */
-+      UINT16  Instance;                       /* 2 */
-+      UINT32  Status;                         /* 4 */
-+      UINT32  DetailStatus;                   /* 4 */
-+      UINT32  Reserved1;                      /* 4 */
-+      UINT32  RequestLen;                     /* 4 */
-+      UINT32  ResponseLen;                    /* 4 */
-+      u32     RequestAdr;                     /* 4 */
-+      u32     ResponseAdr;                    /* 4 */
-+      UINT16  HbaSelect;                      /* 2 */
-+      UINT16  VendorSpecificStatus[11];       /* 22 */
-+      u32     VendorSpecificData;             /* 4 */
-+} EXT_IOCTL_32, *PEXT_IOCTL_32;                       /* 68 / 0x44 */
-+
-+int
-+qla2x00_xfr_to_64loopback(EXT_IOCTL *pext, void **preq_32, void **prsp_32);
-+int
-+qla2x00_xfr_from_64loopback(EXT_IOCTL *pext, void **preq_32, void **prsp_32);
-+
-+
-+/************************************/
-+/* Start of function implementation */
-+/************************************/
-+int
-+qla2x00_ioctl32(unsigned int fd, unsigned int cmd, unsigned long arg,
-+    struct file *pfile)
-+{
-+      EXT_IOCTL_32    ext32;
-+      EXT_IOCTL_32    *pext32 = &ext32;
-+      EXT_IOCTL       ext;
-+      EXT_IOCTL       *pext = &ext;
-+      void            *preq_32 = NULL; /* request pointer */
-+      void            *prsp_32 = NULL; /* response pointer */
-+
-+      mm_segment_t    old_fs;
-+      int             ret;
-+      int             tmp_rval;
-+
-+      /* Catch any non-exioct ioctls */
-+      if (_IOC_TYPE(cmd) != QLMULTIPATH_MAGIC) {
-+              return (-EINVAL);
-+      }
-+
-+      if (copy_from_user(pext32, (char *)arg, sizeof(EXT_IOCTL_32))) {
-+              KMEM_FREE(pext32, sizeof(EXT_IOCTL_32));
-+              return (-EFAULT);
-+      }
-+
-+      DEBUG9(printk("%s: got hba instance %d.\n",
-+          __func__, pext32->HbaSelect);)
-+
-+      /* transfer values to EXT_IOCTL */
-+      memcpy(&pext->Signature, &pext32->Signature, sizeof(pext32->Signature));
-+      pext->AddrMode = pext32->AddrMode;
-+      pext->Version = pext32->Version;
-+      pext->SubCode = pext32->SubCode;
-+      pext->Instance = pext32->Instance;
-+      pext->Status = pext32->Status;
-+      pext->DetailStatus = pext32->DetailStatus;
-+      pext->Reserved1 = pext32->Reserved1;
-+      pext->RequestLen = pext32->RequestLen;
-+      pext->ResponseLen = pext32->ResponseLen;
-+      pext->RequestAdr = (UINT64)(u64)pext32->RequestAdr;
-+      pext->ResponseAdr = (UINT64)(u64)pext32->ResponseAdr;
-+      pext->HbaSelect = pext32->HbaSelect;
-+      memcpy(pext->VendorSpecificStatus, pext32->VendorSpecificStatus,
-+          sizeof(pext32->VendorSpecificStatus));
-+      pext->VendorSpecificData = (UINT64)(u64)pext32->VendorSpecificData;
-+
-+      /* transfer values for each individual command as necessary */
-+      switch (cmd) { /* switch on EXT IOCTL COMMAND CODE */
-+      case INT_CC_LOOPBACK:
-+              qla2x00_xfr_to_64loopback(pext, &preq_32, &prsp_32);
-+              break;
-+      }
-+
-+      old_fs = get_fs();
-+      set_fs(KERNEL_DS); /* tell kernel to accept arg in kernel space */
-+
-+      ret = sys_ioctl(fd, cmd, pext);
-+
-+      set_fs(old_fs);
-+
-+      /* transfer values back for each individual command as necessary */
-+      switch (cmd) { /* switch on EXT IOCTL COMMAND CODE */
-+      case INT_CC_LOOPBACK:
-+              qla2x00_xfr_from_64loopback(pext, &preq_32, &prsp_32);
-+              break;
-+      }
-+
-+      /* transfer values back to EXT_IOCTL_32 */
-+      pext32->Instance = pext->Instance;
-+      pext32->Status = pext->Status;
-+      pext32->DetailStatus = pext->DetailStatus;
-+      pext32->Reserved1 = pext->Reserved1;
-+      pext32->RequestLen = pext->RequestLen;
-+      pext32->ResponseLen = pext->ResponseLen;
-+      pext32->HbaSelect = pext->HbaSelect;
-+      memcpy(pext32->VendorSpecificStatus, pext->VendorSpecificStatus,
-+          sizeof(pext32->VendorSpecificStatus));
-+      pext32->VendorSpecificData = (u32)(u64)pext->VendorSpecificData;
-+
-+      /* Always try to copy values back regardless what happened before. */
-+      tmp_rval = copy_to_user((char *)arg, pext32, sizeof(EXT_IOCTL_32));
-+      if (ret == 0)
-+              ret = tmp_rval;
-+
-+      return (ret);
-+}
-+
-+static inline int
-+apidev_reg_increasing_idx(uint16_t low_idx, uint16_t high_idx)
-+{
-+      int     err = 0;
-+      int     i;
-+      unsigned int cmd;
-+
-+      for (i = low_idx; i <= high_idx; i++) {
-+              cmd = (unsigned int)QL_IOCTL_CMD(i);
-+              err = register_ioctl32_conversion(cmd, qla2x00_ioctl32);
-+              if (err) {
-+                      DEBUG9(printk(
-+                          "%s: error registering cmd %x. err=%d.\n",
-+                          __func__, cmd, err);)
-+                      break;
-+              }
-+              DEBUG9(printk("%s: registered cmd %x.\n", __func__, cmd);)
-+      }
-+
-+      return (err);
-+}
-+
-+static inline int
-+apidev_unreg_increasing_idx(uint16_t low_idx, uint16_t high_idx)
-+{
-+      int     err = 0;
-+      int     i;
-+      unsigned int cmd;
-+
-+      for (i = low_idx; i <= high_idx; i++) {
-+              cmd = (unsigned int)QL_IOCTL_CMD(i);
-+              err = unregister_ioctl32_conversion(cmd);
-+              if (err) {
-+                      DEBUG9(printk(
-+                          "%s: error unregistering cmd %x. err=%d.\n",
-+                          __func__, cmd, err);)
-+                      break;
-+              }
-+              DEBUG9(printk("%s: unregistered cmd %x.\n", __func__, cmd);)
-+      }
-+
-+      return (err);
-+}
-+
-+#if 0
-+static inline int
-+apidev_other_qla_drvr_loaded(void)
-+{
-+#if defined(ISP2200)
-+      if (inter_module_get(qla2300_drvr_loaded_str)) {
-+              /* 2300 is already loaded */
-+              /* decrement usage count */
-+              inter_module_put(qla2300_drvr_loaded_str);
-+              DEBUG9(printk("%s: found 2300 already loaded.\n", __func__);)
-+              return TRUE;
-+      }
-+#elif defined(ISP2300)
-+      if (inter_module_get(qla2200_drvr_loaded_str)) {
-+              /* 2200 is already loaded */
-+              /* decrement usage count */
-+              inter_module_put(qla2200_drvr_loaded_str);
-+              DEBUG9(printk("%s: found 2200 already loaded.\n", __func__);)
-+              return TRUE;
-+      }
-+#endif
-+      return FALSE;
-+}
-+#endif
-+
-+static inline void
-+apidev_init_ppc64(void)
-+{
-+      int     err;
-+
-+#if 0
-+#if defined(ISP2200)
-+      inter_module_register(qla2200_drvr_loaded_str, THIS_MODULE,
-+          &qla2200_driver_loaded);
-+#elif defined(ISP2300)
-+      inter_module_register(qla2300_drvr_loaded_str, THIS_MODULE,
-+          &qla2300_driver_loaded);
-+#endif
-+
-+      if (apidev_other_qla_drvr_loaded()) {
-+              /* ioctl registered before */
-+              return;
-+      }
-+#endif
-+
-+      DEBUG9(printk("qla2x00: going to register ioctl32 cmds.\n");)
-+      err = apidev_reg_increasing_idx(EXT_DEF_LN_REG_CC_START_IDX,
-+          EXT_DEF_LN_REG_CC_END_IDX);
-+      if (!err) {
-+              err = apidev_reg_increasing_idx(EXT_DEF_LN_INT_CC_START_IDX,
-+                  EXT_DEF_LN_INT_CC_END_IDX);
-+      }
-+      if (!err) {
-+              err = apidev_reg_increasing_idx(EXT_DEF_LN_ADD_CC_START_IDX,
-+                  EXT_DEF_LN_ADD_CC_END_IDX);
-+      }
-+      if (!err) {
-+              err = apidev_reg_increasing_idx(FO_CC_START_IDX, FO_CC_END_IDX);
-+      }
-+      if (!err) {
-+              /* Linux specific cmd codes are defined in decreasing order. */
-+              err = apidev_reg_increasing_idx(EXT_DEF_LN_SPC_CC_END_IDX,
-+                  EXT_DEF_LN_SPC_CC_START_IDX);
-+      }
-+}
-+
-+static inline void
-+apidev_cleanup_ppc64(void)
-+{
-+      int     err;
-+
-+#if 0
-+#if defined(ISP2200)
-+      inter_module_unregister(qla2200_drvr_loaded_str);
-+#elif defined(ISP2300)
-+      inter_module_unregister(qla2300_drvr_loaded_str);
-+#endif
-+
-+      if (apidev_other_qla_drvr_loaded()) {
-+              /* don't unregister yet */
-+              return;
-+      }
-+#endif
-+
-+      DEBUG9(printk("qla2x00: going to unregister ioctl32 cmds.\n");)
-+      err = apidev_unreg_increasing_idx(EXT_DEF_LN_REG_CC_START_IDX,
-+          EXT_DEF_LN_REG_CC_END_IDX);
-+      if (!err) {
-+              err = apidev_unreg_increasing_idx(EXT_DEF_LN_INT_CC_START_IDX,
-+                  EXT_DEF_LN_INT_CC_END_IDX);
-+      }
-+      if (!err) {
-+              err = apidev_unreg_increasing_idx(EXT_DEF_LN_ADD_CC_START_IDX,
-+                  EXT_DEF_LN_ADD_CC_END_IDX);
-+      }
-+      if (!err) {
-+              err = apidev_unreg_increasing_idx(FO_CC_START_IDX,
-+                  FO_CC_END_IDX);
-+      }
-+      if (!err) {
-+              /* Linux specific cmd codes are defined in decreasing order. */
-+              err = apidev_unreg_increasing_idx(EXT_DEF_LN_SPC_CC_END_IDX,
-+                  EXT_DEF_LN_SPC_CC_START_IDX);
-+      }
-+}
-+
-+int
-+qla2x00_xfr_to_64loopback(EXT_IOCTL *pext, void **preq_32, void **prsp_32)
-+{
-+      int status;
-+
-+      INT_LOOPBACK_REQ_32 lb_req_32;
-+      INT_LOOPBACK_REQ_32 *plb_req_32 = &lb_req_32;
-+      INT_LOOPBACK_REQ    *plb_req;
-+      INT_LOOPBACK_RSP_32 lb_rsp_32;
-+      INT_LOOPBACK_RSP_32 *plb_rsp_32 = &lb_rsp_32;
-+      INT_LOOPBACK_RSP    *plb_rsp;
-+
-+      plb_req = (UINT64)KMEM_ZALLOC(sizeof(INT_LOOPBACK_REQ), 50);
-+      if (plb_req == NULL) {
-+              /* error */
-+              pext->Status = EXT_STATUS_NO_MEMORY;
-+              printk(KERN_WARNING
-+                  "qla2x00: ERROR in ioctl loopback request conversion "
-+                  "allocation.\n");
-+              return QL_STATUS_ERROR;
-+      }
-+      plb_rsp = (UINT64)KMEM_ZALLOC(sizeof(INT_LOOPBACK_RSP), 51);
-+      if (plb_rsp == NULL) {
-+              /* error */
-+              pext->Status = EXT_STATUS_NO_MEMORY;
-+              printk(KERN_WARNING
-+                  "qla2x00: ERROR in ioctl loopback response conversion "
-+                  "allocation.\n");
-+              return QL_STATUS_ERROR;
-+      }
-+
-+      if (pext->RequestLen != sizeof(INT_LOOPBACK_REQ_32)) {
-+              pext->Status = EXT_STATUS_INVALID_PARAM;
-+              DEBUG9_10(printk(
-+                  "%s: invalid RequestLen =%d.\n",
-+                  __func__, pext->RequestLen);)
-+              return QL_STATUS_ERROR;
-+      }
-+
-+      if (pext->ResponseLen != sizeof(INT_LOOPBACK_RSP_32)) {
-+              pext->Status = EXT_STATUS_INVALID_PARAM;
-+              DEBUG9_10(printk(
-+                  "%s: invalid ResponseLen =%d.\n",
-+                  __func__, pext->ResponseLen);)
-+              return QL_STATUS_ERROR;
-+      }
-+
-+      status = copy_from_user(plb_req_32, pext->RequestAdr,
-+          pext->RequestLen);
-+      if (status) {
-+              pext->Status = EXT_STATUS_COPY_ERR;
-+              DEBUG9_10(printk("%s: ERROR copy "
-+                  "request buffer.\n", __func__);)
-+              return QL_STATUS_ERROR;
-+      }
-+
-+      status = copy_from_user(plb_rsp_32, pext->ResponseAdr,
-+          pext->ResponseLen);
-+      if (status) {
-+              pext->Status = EXT_STATUS_COPY_ERR;
-+              DEBUG9_10(printk("%s: ERROR copy "
-+                  "response buffer.\n", __func__);)
-+              return QL_STATUS_ERROR;
-+      }
-+
-+      /* Save for later */
-+      *preq_32 = pext->RequestAdr;
-+      *prsp_32 = pext->ResponseAdr;
-+
-+      /* Transfer over values */
-+      plb_req->Options = plb_req_32->Options;
-+      plb_req->TransferCount = plb_req_32->TransferCount;
-+      plb_req->IterationCount = plb_req_32->IterationCount;
-+      plb_req->BufferAddress = (UINT64)(u64)plb_req_32->BufferAddress;
-+      plb_req->BufferLength = plb_req_32->BufferLength;
-+
-+      plb_rsp->BufferAddress = (UINT64)(u64)plb_rsp_32->BufferAddress;
-+      plb_rsp->BufferLength = plb_rsp_32->BufferLength;
-+      plb_rsp->CompletionStatus = plb_rsp_32->CompletionStatus;
-+      plb_rsp->CrcErrorCount = plb_rsp_32->CrcErrorCount;
-+      plb_rsp->DisparityErrorCount = plb_rsp_32->DisparityErrorCount;
-+      plb_rsp->FrameLengthErrorCount = plb_rsp_32->FrameLengthErrorCount;
-+      plb_rsp->IterationCountLastError = plb_rsp_32->IterationCountLastError;
-+      plb_rsp->CommandSent = plb_rsp_32->CommandSent;
-+
-+      /* Assign new values */
-+      pext->RequestAdr = plb_req;
-+      pext->ResponseAdr = plb_rsp;
-+      pext->RequestLen = sizeof(INT_LOOPBACK_REQ);
-+      pext->ResponseLen = sizeof(INT_LOOPBACK_RSP);
-+
-+      return 0;
-+}
-+
-+int
-+qla2x00_xfr_from_64loopback(EXT_IOCTL *pext, void **preq_32, void **prsp_32)
-+{
-+      int status;
-+
-+      INT_LOOPBACK_REQ_32 lb_req_32;
-+      INT_LOOPBACK_REQ_32 *plb_req_32 = &lb_req_32;
-+      INT_LOOPBACK_REQ    *plb_req;
-+      INT_LOOPBACK_RSP_32 lb_rsp_32;
-+      INT_LOOPBACK_RSP_32 *plb_rsp_32 = &lb_rsp_32;
-+      INT_LOOPBACK_RSP    *plb_rsp;
-+
-+      plb_req = (INT_LOOPBACK_REQ *)pext->RequestAdr;
-+      plb_rsp = (INT_LOOPBACK_RSP *)pext->ResponseAdr;
-+
-+      plb_req_32->Options = plb_req->Options;
-+      plb_req_32->TransferCount = plb_req->TransferCount;
-+      plb_req_32->IterationCount = plb_req->IterationCount;
-+      plb_req_32->BufferAddress = (u32)(u64)plb_req->BufferAddress;
-+      plb_req_32->BufferLength = plb_req->BufferLength;
-+
-+      plb_rsp_32->BufferAddress = (u32)(u64)plb_rsp->BufferAddress;
-+      plb_rsp_32->BufferLength = plb_rsp->BufferLength;
-+      plb_rsp_32->CompletionStatus = plb_rsp->CompletionStatus;
-+      plb_rsp_32->CrcErrorCount = plb_rsp->CrcErrorCount;
-+      plb_rsp_32->DisparityErrorCount = plb_rsp->DisparityErrorCount;
-+      plb_rsp_32->FrameLengthErrorCount = plb_rsp->FrameLengthErrorCount;
-+      plb_rsp_32->IterationCountLastError = plb_rsp->IterationCountLastError;
-+      plb_rsp_32->CommandSent = plb_rsp->CommandSent;
-+
-+      KMEM_FREE(plb_req, sizeof(INT_LOOPBACK_REQ));
-+      KMEM_FREE(plb_rsp, sizeof(INT_LOOPBACK_RSP));
-+
-+      pext->RequestAdr = *preq_32;
-+      pext->ResponseAdr = *prsp_32;
-+      pext->RequestLen = sizeof(INT_LOOPBACK_REQ_32);
-+      pext->ResponseLen = sizeof(INT_LOOPBACK_RSP_32);
-+
-+      status = copy_to_user(pext->RequestAdr, plb_rsp_32, pext->RequestLen);
-+      if (status) {
-+              pext->Status = EXT_STATUS_COPY_ERR;
-+              DEBUG9_10(printk("%s: ERROR "
-+                  "write of request data buffer.\n", __func__);)
-+              return QL_STATUS_ERROR;
-+      }
-+
-+      /* put loopback return data in user buffer */
-+      status = copy_to_user(pext->ResponseAdr, plb_rsp_32, pext->ResponseLen);
-+      if (status) {
-+              pext->Status = EXT_STATUS_COPY_ERR;
-+              DEBUG9_10(printk("%s: ERROR "
-+                  "write of response data buffer.\n", __func__);)
-+              return QL_STATUS_ERROR;
-+      }
-+
-+      return 0;
-+}
-+
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_settings.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_settings.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_settings.h       2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_settings.h    2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -21,7 +21,7 @@
-  *     0 - Disable and 1 - Enable
-  */
- #define  LOOP_ID_FROM_ONE              0   /* loop ID start from 1 when P2P */
--#define  MEMORY_MAPPED_IO              0
-+#define  MEMORY_MAPPED_IO              1
- #define  DEBUG_QLA2100_INTR            0
- #define  USE_NVRAM_DEFAULTS          0
- #define  DEBUG_PRINT_NVRAM             0
-@@ -35,16 +35,17 @@
- #define  WATCH_THREADS_SIZ             0    /* watch size of pending queue */
- #define  USE_PORTNAME                  1    /* option to use port names for targets */
- #define  LUN_MASKING                   0
--#define  USE_FLASH_DATABASE            0 /* Save persistent data to flash */
- #define  QLA_SCSI_VENDOR_DIR           0 /* Decode vendor specific opcodes for direction */
- #define QLA2100_LIPTEST              0
- #define REQ_TRACE                    1
- #define USE_ABORT_TGT                  1 /* Use Abort Target mbx cmd */
--#if defined(FC_IP_SUPPORT)
- #define REG_FC4_ENABLED                1 /* Enable register_fc4 call */
-+
-+#if defined(ISP200)
-+#define REG_FDMI_ENABLED              0 /* Support FDMI registration */
- #else
--#define REG_FC4_ENABLED                0 /* Enable register_fc4 call */
-+#define REG_FDMI_ENABLED              1 /* Support FDMI registration */
- #endif
- #undef   TRACECODE                       /* include tracing code in watchdog routines */
-@@ -57,23 +58,11 @@
- #define  NO_LONG_DELAYS                       0
- #define  QL_TRACE_MEMORY              0
--/*
-- * This enables some performance code which is not enabled
-- * normally:
-- *
-- * - a tasklet to process the done queue and send requests back to 
-- *  the OS.
-- */
--#define       QLA2X_PERFORMANCE               1 
--
--/* The following WORD_FW_LOAD is defined in Makefile for ia-64 builds
--   and can also be decommented here for Word by Word confirmation of
--   RISC code download operation */
--/* #define  WORD_FW_LOAD               0  */
--
- #define MPIO_SUPPORT                  0
- #define VSA                           0  /* Volume Set Addressing */
-+#define QLA2XXX_LOOP_RETRY_COUNT      10
-+
- #define PERF_CODE                     0  /* enable performance code */
- #define EH_DEBUG                        0  /* enable new error handling debug */
- /* 
-@@ -133,6 +122,10 @@
- /* Max time to wait for the loop to be in LOOP_READY state */
- #define MAX_LOOP_TIMEOUT       ( 60 * 5)
-+
-+/* Default: IOCTL pass-thru command timeout in seconds.   */
-+#define       QLA_PT_CMD_TOV                  (66)
-+
- #define EH_ACTIVE              1    /* Error handler active */
- #include "qla_version.h"
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_vendor.c linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_vendor.c
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_vendor.c 2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_vendor.c      2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_version.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_version.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qla_version.h        2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qla_version.h     2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -19,9 +19,9 @@
- /*
-  * Driver version 
-  */
--#define QLA2100_VERSION      "6.06.00"
-+#define QLA2100_VERSION      "7.00.00b22"
--#define QLA_DRIVER_MAJOR_VER  6
--#define QLA_DRIVER_MINOR_VER  6
-+#define QLA_DRIVER_MAJOR_VER  7
-+#define QLA_DRIVER_MINOR_VER  0
- #define QLA_DRIVER_PATCH_VER  0
--#define QLA_DRIVER_BETA_VER   0
-+#define QLA_DRIVER_BETA_VER   22
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qlfo.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qlfo.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qlfo.h       2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qlfo.h    2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qlfolimits.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qlfolimits.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qlfolimits.h 2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qlfolimits.h      2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qlfoln.h linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qlfoln.h
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/qlfoln.h     2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/qlfoln.h  2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
-  *                  QLOGIC LINUX SOFTWARE
-  *
-  * QLogic ISP2x00 device driver for Linux 2.4.x
-- * Copyright (C) 2003 Qlogic Corporation
-+ * Copyright (C) 2003 QLogic Corporation
-  * (www.qlogic.com)
-  *
-  * This program is free software; you can redistribute it and/or modify it
-@@ -19,33 +19,46 @@
- #define QLMULTIPATH_MAGIC 'y'
--/********************************************************/
--/* Failover ioctl command codes range from 0xc0 to 0xdf */
--/********************************************************/
-+#define       QL_IOCTL_BASE(idx)      \
-+    _IOWR(QLMULTIPATH_MAGIC, idx, sizeof(EXT_IOCTL))
-+#if defined(QLA_CONFIG_COMPAT)
-+#define       QL_IOCTL_CMD(idx)       (QL_IOCTL_BASE(idx) - 0x40000)
-+#else
-+#define       QL_IOCTL_CMD(idx)       QL_IOCTL_BASE(idx)
-+#endif
-+
-+/*************************************************************
-+ * Failover ioctl command codes range from 0xc0 to 0xdf.
-+ * The foioctl command code end index must be updated whenever
-+ * adding new commands. 
-+ *************************************************************/
-+#define FO_CC_START_IDX       0xc8    /* foioctl cmd start index */
- #define FO_CC_GET_PARAMS_OS             \
--    _IOWR(QLMULTIPATH_MAGIC, 200, sizeof(EXT_IOCTL))  /* 0xc8 */
-+    QL_IOCTL_CMD(0xc8)
- #define FO_CC_SET_PARAMS_OS             \
--    _IOWR(QLMULTIPATH_MAGIC, 201, sizeof(EXT_IOCTL))  /* 0xc9 */
-+    QL_IOCTL_CMD(0xc9)
- #define FO_CC_GET_PATHS_OS              \
--    _IOWR(QLMULTIPATH_MAGIC, 202, sizeof(EXT_IOCTL))  /* 0xca */
-+    QL_IOCTL_CMD(0xca)
- #define FO_CC_SET_CURRENT_PATH_OS       \
--    _IOWR(QLMULTIPATH_MAGIC, 203, sizeof(EXT_IOCTL))  /* 0xcb */
-+    QL_IOCTL_CMD(0xcb)
- #define FO_CC_GET_HBA_STAT_OS           \
--    _IOWR(QLMULTIPATH_MAGIC, 204, sizeof(EXT_IOCTL))  /* 0xcc */
-+    QL_IOCTL_CMD(0xcc)
- #define FO_CC_RESET_HBA_STAT_OS         \
--    _IOWR(QLMULTIPATH_MAGIC, 205, sizeof(EXT_IOCTL))  /* 0xcd */
-+    QL_IOCTL_CMD(0xcd)
- #define FO_CC_GET_LUN_DATA_OS           \
--    _IOWR(QLMULTIPATH_MAGIC, 206, sizeof(EXT_IOCTL))  /* 0xce */
-+    QL_IOCTL_CMD(0xce)
- #define FO_CC_SET_LUN_DATA_OS           \
--    _IOWR(QLMULTIPATH_MAGIC, 207, sizeof(EXT_IOCTL))  /* 0xcf */
-+    QL_IOCTL_CMD(0xcf)
- #define FO_CC_GET_TARGET_DATA_OS        \
--    _IOWR(QLMULTIPATH_MAGIC, 208, sizeof(EXT_IOCTL))  /* 0xd0 */
-+    QL_IOCTL_CMD(0xd0)
- #define FO_CC_SET_TARGET_DATA_OS        \
--    _IOWR(QLMULTIPATH_MAGIC, 209, sizeof(EXT_IOCTL))  /* 0xd1 */
-+    QL_IOCTL_CMD(0xd1)
- #define FO_CC_GET_FO_DRIVER_VERSION_OS  \
--    _IOWR(QLMULTIPATH_MAGIC, 210, sizeof(EXT_IOCTL))  /* 0xd2 */
-+    QL_IOCTL_CMD(0xd2)
-+
-+#define FO_CC_END_IDX         0xd2    /* foioctl cmd end index */
- #define BOOLEAN uint8_t
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/README.qla2x00 linux-2.4.21-x86_64/drivers/scsi/qla2xxx/README.qla2x00
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/README.qla2x00       2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/README.qla2x00    2004-04-22 19:42:21.000000000 -0700
-@@ -2,7 +2,7 @@
- Products supported: QLA22XX, QLA23XX
--08/07/2003
-+03/23/2004
- Contents
- --------
-@@ -16,12 +16,14 @@ Contents
- 4. Saving the Driver Source to Diskette
- 5. Installing the Driver
--
--   5.1  Building the driver from the Source
--   5.1.1. Building a Uni-Processor (UP) version of the driver
--   5.1.2. Building a Symmetric Multi-Processor(SMP) version of the
-+   5.1  Building the driver using the Source RPM package
-+   5.1.1 Installing the QLogic Driver Source RPM 
-+   5.1.2 Uinstalling the QLogic Driver Source RPM 
-+   5.2  Building the driver from the Source
-+   5.2.1. Building a Uni-Processor (UP) version of the driver
-+   5.2.2. Building a Symmetric Multi-Processor(SMP) version of the
-           Driver
--   5.2  Load the Driver Manually using INSMOD or MODPROBE
-+   5.3  Load the Driver Manually using INSMOD or MODPROBE
-    5.3  Making a RAMDISK Image to Load the Driver
- 6. Driver Parameters
-@@ -99,7 +101,7 @@ Please refer to Release Notes (release.t
- 4. Saving the Driver Distribution / Source file to Diskette
- -----------------------------------------------------------
--1. Download the failover or non-failover distribution file
-+1. Download the driver distribution file
-    - qla2x00-vx.yy.zz-dist.tgz or the driver source file
-    - qla2x00-vx.yy.zz.tgz from QLogic's website.
-@@ -118,7 +120,39 @@ Please refer to Release Notes (release.t
- 5. Installing the Driver 
- ------------------------
--5.1  Building a Driver from the Source Code 
-+5.1  Building the Driver using the source RPM package 
-+------------------------------------------------------
-+The easiliest way to install and build the QLogic Linux driver is to
-+use the source RPM package.  The only requirement for the rpm is the
-+kernel-sources which is normally installed when the kernel is installed
-+on the system. The following distributions are supported:
-+
-+1.    Red Hat Advanced Server 2.1 
-+2.    Red Hat Enterprise Linux 3.0
-+3.    SUSE Linux Enterprise Server 8 (SLES 8)
-+
-+5.1.1 Installng the QLogic Driver Source RPM 
-+
-+      Install the Source RPM by executing the following command :
-+      
-+      # rpm -i  qla2x00-vX.XX.XXbXX-Y.ZZZZ.rpm
-+      
-+5.1.2 Uinstalling the QLogic Driver Source RPM 
-+
-+      Uninstall the Source RPM by executing the following command :
-+      
-+      # rpm -e  qla2x00-vX.XX.XXbXX-Y
-+
-+5.1.3 Installing only the Driver Source from Source RPM 
-+
-+      Install only the Driver Source from Source RPM by executing the following       command :
-+      
-+      # rpm -i --noscripts qla2x00-vX.XX.XXbXX-Y.ZZZZ.rpm
-+
-+
-+Note  :  Driver source is installed in - /usr/src/qla2x00  path upon installation of the Source RPM.
-+
-+5.2  Building a Driver from the Source Code 
- -------------------------------------------
- From the source code, you can build a qla2200.o or qla2300.o for
-@@ -126,7 +160,7 @@ your UP or SMP system, and load the driv
- using a RAMDISK image during system boot time.
--5.1.1 Building a Uni-Processor (UP) Version of the Driver
-+5.2.1 Building a Uni-Processor (UP) Version of the Driver
- ---------------------------------------------------------
- For RedHat Distribution:
-@@ -166,8 +200,8 @@ For SuSE Distribution:
-       1. Install the kernel-source from the SuSE distribution CD-ROM 
-          by typing:   
--             # yast  or
--             # yast2 
-+             # yast  -i kernel-source  or
-+             # yast2 -i kernel-source
-       2. Create a soft link ( /usr/src/linux) to the kernel source 
-          (/usr/src/<linux-version>) by typing:
-@@ -177,7 +211,7 @@ For SuSE Distribution:
-       3. To ensure kernel version synchronization between the driver and
-          running kernel, type the following:
--              # cd /usr/src/linux
-+              # cd /usr/src/linux
-               # make mrproper (completely clean the kernel tree) 
-               # cp /boot/vmlinuz.config .config (copy the new config) 
-               # make oldconfig (update configuration using .config) 
-@@ -208,11 +242,11 @@ For SuSE Distribution:
-              # make all OSVER=linux
--NOTE: To load the driver manually, see section 5.2. To make a RAMDISK
--      image to load the driver during system boot time, see section 5.3.
-+NOTE: To load the driver manually, see section 5.3. To make a RAMDISK
-+      image to load the driver during system boot time, see section 5.4.
--5.1.2. Building a Symmetric Multi-Processor (SMP) Version of the Driver
-+5.2.2. Building a Symmetric Multi-Processor (SMP) Version of the Driver
- -----------------------------------------------------------------------
- For RedHat Distribution:
-@@ -252,8 +286,8 @@ For SuSE Distribution:
-       1. Install the kernel-source from the SuSE distribution CD-ROM
-          by typing:   
--             # yast  or
--             # yast2 
-+             # yast -i kernel-source or
-+             # yast2  -i kernel-source
-       2. Create a soft link ( /usr/src/linux) to the kernel source 
-          (/usr/src/<linux-version>) by typing:
-@@ -294,16 +328,16 @@ For SuSE Distribution:
-              # make all SMP=1 OSVER=linux
--NOTE: To load the driver manually, see section 5.2. To make a RAMDISK
--      image to load the driver during system boot time, see section 5.3.
-+NOTE: To load the driver manually, see section 5.3. To make a RAMDISK
-+      image to load the driver during system boot time, see section 5.4.
--5.2  Load the Driver Manually using INSMOD or MODPROBE
-+5.3  Load the Driver Manually using INSMOD or MODPROBE
- ------------------------------------------------------
--Before loading the driver manually, first build the driver binary from
--the driver source files as described in sections 5.1.1 and 5.1.2.
-+Before loading the driver manually, build the driver binary by installing  Source RPM as described 
-+in sections 5.1.1 or from the driver source files as described in sections 5.2.1 and 5.2.2. 
- - To load the driver directly from the local build directory, type
-   the following:
-@@ -321,7 +355,7 @@ the driver source files as described in 
-         For SuSE Distribution:
-       
--          # make all OSVER=linux install (build the driver and copy to the right location)
-+# make all OSVER=linux install (build the driver and copy to the right location)
-        2. Type the following to load the Driver:
-@@ -330,22 +364,20 @@ the driver source files as described in 
-           # modprobe qla2300
--5.3  Making a RAMDISK Image to Load the Driver
-+5.4  Making a RAMDISK Image to Load the Driver
- ----------------------------------------------
--1. Build the Driver binary files (see 5.1.1 and 5.1.2).
-+1. Build the Driver binary files (see 5.2.1 and 5.2.2).
--2. Copy the files to:
-+2. Install the driver : 
--     /lib/modules/<kernel version>/kernel/drivers/scsi/
-+   For RedHat Distribuion:
--   NOTE: To ensure that the older Driver binary included in the original
--       distribution does not interfere with the updated version, 
--       please rename the old Driver binary as follows:
--
--       # cd /lib/modules/<kernel_version>/kernel/drivers/addon/qla2200
--       # mv qla2200.o qla2200_rh.o
--       # mv qla2300.o qla2300_rh.o
-+   # make all install
-+  
-+   For SuSE Distribution:
-+      
-+   # make all OSVER=linux install 
- 3. Add the following line to /etc/modules.conf.
-@@ -366,7 +398,7 @@ the driver source files as described in 
-    For SuSE Distribution:
-       You will need to modify the /etc/sysconfig/kernel file to specify
--      while modules will be added during initrd creation.
-+      which modules will be added during ram disk creation.
-       NOTE: Please ensure the conf module is listed before the actual
-             driver module.  For example:
-@@ -471,10 +503,6 @@ the driver source files as described in 
- 6. Driver Parameters
- --------------------
--The Driver parameters are divided into System Parameters and NVRAM 
--Parameters sections.
--
--
- 6.1  System Parameters
- ----------------------
-@@ -571,29 +599,100 @@ None.
- 6.3  Driver Command Line Parameters
- -----------------------------------
-+The driver gets its parameters from the command line itself or from  
-+modprobe 'option' directive found in the modules.conf file or qla2[2,3]00_conf
-+module.  The parameters are in simple keyword=value format, i.e. ql2xfailover=1. 
-+Where keyword is one of the following option parameters:
--The available command line options can be viewed using one 
--or all of the three Linux commands depending on board type:
-+      Usage: insmod qla2300 <keyword>=<value>
-+      
-+*     ql2xfailover - Enables/Disables Driver failover support.
-+      0 to disable; 1 to enable. 
-+      
-+      Default behaviour based on compile-time option MPIO_SUPPORT 
-+      in qla_settings.h.
--      # modinfo -p qla2300
--      # modinfo -p qla2200
--      # modinfo -p qla2100
-+*     ql2xmaxqdepth - Maximum queue depth reported to scsi mid-level for 
-+      each OS device. This specifies the number of outstanding requests
-+      per lun.
--The option "ql2xopts=" has additional sub-options as follows:
-+*     ql2xlogintimeout - Defines the Login timeout value in seconds 
-+      once initial login. 
-- verbose - Verbose detail debug information - on by default
-+*     qlport_down_retry - Defines the command retries to a port that returns"
-+              "a PORT-DOWN status.");           
-- quiet   - Driver does not display normal messages to console:
--              Waiting for LIP to complete....
--              scsi%d: Topology - %s, Host Loop address 0x%x
--              scsi(%d): LIP occurred
--              scsi(%d): LIP reset occurred
-+*     ql2xretrycount,
-+              "Maximum number of mid-layer retries allowed for a command.  "
-+              "Default value in non-failover mode is 20, "
-+              "in failover mode, 30.");
-+
-+*     max_srbs - This parameter specifies the Maximum number of simultaneous
-+      commands that can be accepted from the mid-level per HBA. Default: 4096.
-+
-+*     displayConfig - this parameter will display the current configuration.
-+      1 - display the configuration; 0 - don't display the configuration.
-+      Default - 1 
-+
-+*     ConfigRequired - "If 1, then only configured devices passed in through the"
-+              "ql2xopts parameter will be presented to the OS");
-+
-+*     recoveryTime - "Recovery time in seconds before a target device is sent I/O "
-+              "after a failback is performed.");
-+
-+*     failbackTime - Defines the delay in seconds before a failback is performed.
-+      Default - 3 
-+
-+*     Binding method  - Defines what target persistent binding method to use: 
-+      0 - bind by Portname and 1 - bind by PortID. 
-+      Default - 0  (portname binding)
-+      
-+*     extended_error_logging - Defines whether to enable (1) or Disable (0) writing 
-+      the debug information to /var/log/messages.
-+      Default - 0  (disable)
-+      
-+*     MaxPathsPerDevice - maximum number of paths to a device
-+      Default - 8 (compile time only) 
-+      
-+*     MaxRetriesPerPath - Defines how many retries to perform on the current 
-+      path before failing over to the next path in the path list.
-+      Default - 3 
-+      
-+*     MaxRetriesPerIo - Defines total retries to do before failing the command 
-+      and returning to the OS with selection timeout (DID_NO_CONNECT).
-+      Default - (MaxRetriesPerPath * MaxPathsPerDevice ) + 1
-+
-+*     QlFailoverNotifyType - Defines type of failover notification mechanism 
-+      to use when a failover or failback occurs. Certain storage systems require
-+      special CDB's to be issued to do failover or failback.
-+      Default - 0 (none)
-+      
-+*     ConfigRequired - Defines how to bind the devices.
-+      0 - Present all the devices discovered to the OS. 
-+      1 - Present only the configured devices (i.e. the device defined in 
-+      /etc/qla2300_conf ) to the OS. 
-+      Default - 0 
-+      
-+*     FailbackTime - Defines the delay in seconds before a failback is performed
-+      to ensure all paths are available.
-+      Default - 5 seconds
-+      
-+*     RecoveryTime - Defines the recovery time in seconds required before commands 
-+      can be sent down the restored path.
-+      Default - 10 seconds
-+
-+      
-+      All the available parameters can be viewed using one 
-+      of the following commands:
-+
-+      # modinfo -p qla2300
-+      # modinfo -p qla2200
-+      # modinfo -p qla2100
-  Usage examples:
--           # insmod qla2200.o ql2xfailover=1
--           # insmod qla2200.o qlport_down_retry=60
--           # insmod qla2300.o ql2xopts="quiet"
-+    # insmod qla2300.o ql2xfailover=1
-+    # insmod qla2300.o qlport_down_retry=60
- **********************************************************************
-@@ -790,14 +889,14 @@ a string overflow error from modprobe.
- 8.4 Persistent Binding
- ----------------------
--The Persistent Binding information consists of some adapter parameter
--entries along with some target entries. However, the Linux entries 
--have been shorten to save space on the command line. Currently, there
--is no limit on the size of the command line when using modprobe. But,
--if you embedded the driver in the kernel you are using lilo that has 
--a string size limitation.
-+The Persistent Binding information consists of some adapter configuration
-+entries along with some target entries. The entries are specified in
-+two formats: verbose and shorten.  The shorten format allows a bigger
-+configuration to fix in the limited space on the command line. An 
-+alternate to command line is the configuration file. See section 
-+8.5.
--Persistent Binding  can be specified in two ways. Manually or using
-+Persistent Binding  can be specified in two ways. Manually or via
- SANsurfer. We recommend using SANsurfer for ease of use. Reference 
- section 8.3.3 for additonal information about SANsurfer. The 
- following is the procedure to manually add persistent binding 
-@@ -811,7 +910,7 @@ The best way to extract configuration me
- direct the output to a file. You need to remove the Linux timestamp at
- the beginning of each message and combine them together on single line.
- For example
--        #insmod qla2200 displayConfig=1
-+        #insmod qla2300 displayConfig=1
-         #grep "scsi-qla" /var/log/messages > /tmp/info.cfg
- The format of the persistent binding commands is as follows: 
-@@ -885,79 +984,33 @@ This mask specification is heavily type 
- 8.5 Configuration Data
- ----------------------
--To pass the configuration data to the driver, load it using "modprobe" 
--instead of "insmod".
--
--8.5.1 Limitations With /etc/modules.conf
------------------------------------------
--
--Due to size constraints inherent in the user-space applications which load
--kernel modules, the total amount of configuration data that could be passed via
--modules.conf by the modprobe application was around 4096 bytes of information
--(with minor tuning of the modutil package).  Of course, as densities of SANs
--increase, larger configuration spaces are needed to accommodate the
--information.
--
--In general, the following formula can be used to compute an approximate size in
--bytes of the configuration data needed to store information pertaining to 'M'
--HBAs and 'N' targets/device paths:
--
--      75 + 42*M + 381*N
--
--Plugging in values for common configurations returns some sample results:
--
--      2 same type HBAs - (75 + 2*42 == 159)
--      ----------------
--      1 target        - 75+2*42+381*1 = 540 bytes
--      2 targets       - 75+2*42+381*2 = 921 bytes
--      3 targets       - 75+2*42+381*3 = 1302 bytes
--      4 targets       - 75+2*42+381*4 = 1683 bytes
--      5 targets       - 75+2*42+381*5 = 2064 bytes
--      ...
--
--      3 same type HBAs        (75 + 3*42 == 201)
--      ----------------
--      1 target        - 75+3*42+381*1 = 582 bytes
--      2 targets       - 75+3*42+381*2 = 963 bytes
--      3 targets       - 75+3*42+381*3 = 1344 bytes
--      4 targets       - 75+3*42+381*4 = 1725 bytes
--      5 targets       - 75+3*42+381*5 = 2086 bytes
--      ...
--              
--Please note, a target in this case does not always indicate a distinct piece of
--storage -- it could represent 'n' paths to the same storage, as is the case
--with failover in a true-cloud configuration.  As an example, the configuration
--data size needed for two storage devices with four paths (via two HBAs) to each
--storage (4*2 paths) would need approximately 3200 bytes (75 + 42*2 + 381*8) of
--configuration space.
--
--8.5.2 QLA_OPTS As An Alternative
----------------------------------
--
--Modutil (namely modprobe) loads 'option' data present in the modules.conf file
--by first loading the module, parsing the 'options' directive of the newly
--loaded module for parameters (parameters are simple key=value directives, i.e.
--ql2xfailover=1), for each key, scan the memory area where the module was loaded
--for the location of the 'key' parameter, and finally, writing the key's 'value'
--directly into the pre-defined memory space.  This basic mechanism is similar in
--nature to the mechanism employed by the QLA_OPTS application, but does not
--suffer from the relatively small size constraints within the modutil package.
--
--There are two important differences between the modutil and QLA_OPTS mechanism:
--
--      1) Configuration data is read from a configuration file in /etc/ with a
--         name based on the ISP type:
-+Configuration data and persistent data is loaded in the driver when the
-+"modprobe" is use. It is normally passed to the driver via the commandline, 
-+but due to the constraints inherent in using the commandline we have
-+provide an alternate method to loading configuration data. The configuration
-+data is passed to the driver from another module /etc/qla2300_conf. The utility
-+qla_opts builds this module from the configuration data. Whenever the 
-+configuration changes, a new module should be built.
-+
-+
-+8.5.1 QLA_OPTS 
-+---------------
-+QLA_OPTS reads the configuration from /etc/qla2[2,3]00.conf and creates the
-+module qla2[2,3]00_conf. The driver automatically tries to load the conf
-+module at init time and once it is loaded then it is passes the information 
-+directly into the pre-defined memory space commuicated to each module by the 
-+kernel. Configuration data is read from a configuration file in /etc/ with a
-+name based on the ISP type:
-               Configuration File  Module name
-               ------------------  -----------
-               /etc/qla2200.conf   qla2200_conf
-               /etc/qla2300.conf   qla2300_conf
--      2) Option values are written directly (branded) to the corresponding
--         configuration module file.
--Approximately 300K of configuration space has been pre-allocated within the
--qla2200_conf/qla2300_conf module.
-+Note: Approximately 300K of configuration space has been pre-allocated within the
-+qla2200_conf/qla2300_conf module for configuration/persistent data.
-+
- 8.5.3 Compatibility With SMS (SANsufer Management Suite)
- --------------------------------------------------------
-@@ -967,7 +1020,8 @@ an SMS application would save a configur
- written to the 'options' section of the modules.conf file in a form similar to
- the following:
--      ql2xopts=scsi-qla0-adapter-port=210000e08b000000\;scsi-qla0-tgt-1-di-0-node=20000020371682e7\;scsi-qla0-tgt-1-di-0-port=21000020371682e7\;scsi-qla0-tgt-1-di-0-pid=0000e2\;scsi-qla0-tgt-1-di-0-control=00\;
-+      ql2xopts=scsi-qla0-adapter-port=210000e08b000000\;scsi-qla0-tgt-1-di-0-node=20000020371682e7\;
-+      scsi-qla0-tgt-1-di-0-port=21000020371682e7\;scsi-qla0-tgt-1-di-0-pid=0000e2\;scsi-qla0-tgt-1-di-0-control=00\;
- Now, the information is written to the appropriate qla2[2|3]00.conf file in
- /etc and then branded to the binary file of the corresponding configuration
-@@ -1166,6 +1220,7 @@ distribution package can be extracted in
-        qla_fo.c
-        qla_fo.cfg 
-        qla_inioct.c
-+       qla_inline.h
-        qla_ip.c
-        qla_mbx.c
-        qla_mbx.h
-@@ -1205,3 +1260,4 @@ assistance if needed.
-     Copyright (c) 2003 QLogic Corporation. All rights reserved 
-     worldwide. 
-+
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/release.txt linux-2.4.21-x86_64/drivers/scsi/qla2xxx/release.txt
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/release.txt  2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/release.txt       2004-04-22 19:42:21.000000000 -0700
-@@ -1,36 +1,50 @@
-+                              Release Notes
--                 QLogic QLA2200 and QLA2300 Linux Driver 
-+Driver Name  : QLogic QLA22xx/QLA23xx PCI Fibre Channel Linux Driver
-+Version      : 7.00.00b22
-+OS platform  : Red Hat AS2.1 (IA32 & IA64), SuSE SLES8 (IA32 & IA64)
-+HBA Support  : QLA22xx, QLA23xx
-+FW version   : QLA22xx : 2.02.06(tp/ip),  QLA23xx: 3.02.28(ipx/flx)
--                           Release Notes
--                         =============
-+ 
-+Table of Contents
-+I.    Overview
-+II.   Enhancements
-+III.  Bug Fixes
-+IV.   Known Issues
-+V.      Additional Information
--Version  6.06.00      August 08, 2003
--+**********************************************+
--* Features supported by this version of driver *
--+**********************************************+
--o FCAL - direct attach
--o Point-to-point 
--o Fabric support 
--o Initiator mode only
--o Fault recovery on down loops
--o Persistent binding - HBA node name valid
--o Linux 2.4.x Kernel Support
--o IPFC support
--o Firmware versions:
--  ql2100 - 1.19.24
--  ql2200 - 2.02.04
--  ql2300 - 3.02.13 (tp)
--           3.01.18 (ip)
--
--+********************************+
--* Changes From Previous Releases *
--+********************************+
--o Please view revision.notes file
-- 
--+**************+
--* Known Issues *
--+**************+
--o This driver must be used with API library v2.00Beta4 + in order
--  to handle re-entrant API/ioctl commands correctly.
-+I.    Overview
-+
-+This document describes the changes between versions 6.06.10 and 7.00.00b15
-+of the QLogic Fibre Channel driver for Linux.
-+
-+
-+II.   Enhancements
-+
-+ - Eliminate checking initiators while processing fcport list. 
-+ - Added logic to honor "ConfigRequired=1" in mon-failover mode. 
-+ - Added support for ISP2322 chips.
-+ - Added EVA support
-+ - Added support for enhance
-+
-+III.  Bug Fixes
-+
-+ - PortID binding was broken.
-+ - 2100/2200 panic during firmware load
-+ - Fixed handling of tape commands during LIPs
-+ - Fixed flushing logic for START_STOP commands
-+ - Back-out PLUG-TIMER and scsi-affine 'performace patches'
-+ - Fixed DMA double allocation bug on retries.
-+
-+IV.   Known Issues
-+
-+There are no known issues at this time.
-+
-+
-+V.    Additional Information
-+
-+- This driver must be used with API library v2.00Beta4 + 
-+  to handle re-entrant API/ioctl commands correctly.
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/revision.notes linux-2.4.21-x86_64/drivers/scsi/qla2xxx/revision.notes
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/revision.notes       2003-10-28 10:33:55.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/revision.notes    2004-04-22 19:42:21.000000000 -0700
-@@ -5,1136 +5,154 @@
-  *
-  * Revision History
-  *
-- *   Rev  6.06.00     August 08, 2003  RA
-- *    - Formal release.
-- *
-- *   Rev  6.06.00b15  August 07, 2003  AV/RA
-- *    - Backs-out some changes made in 6.06.00b12 with respect
-- *      to the operating semantics of qla2x00_eh_device_reset().
-- *      The code fails to operate when the backdoor 'device
-- *      reset' occurs.
-- *    - Updated Readme.qla2x00 and SUPPORTED_KERNEL_VERSION.txt.
-- *
-- *   Rev  6.06.00b14  August 01, 2003  RL
-- *    - Added return of dummy lun data entries for unconfigured
-- *      devices, so the number and order of entries returned would
-- *      match that are returned from port summary list and target
-- *      data list.
-- *    - Added checking of target online state and whether it is
-- *      specified in persistent binding before deciding whether
-- *      to return a target/lun data entry for it.
-- *    - Added return of target online and persistent binding
-- *      state in the Status field of the query_disc_tgt ioctl.
-- *    - Updated README file.
-- *
-- *   Rev  6.06.00b13  July 18, 2003  RA/AV/RL
-- *    - Added support for new qla2xxx addon directory in RedHat AS.
-- *    - Added pause between successive flash reads.
-- *    - Don't modify a command's 'allowed' count (in queuecommand)
-- *      if the device is found to be a tape device.
-- *    - Fixed a compile problem when DEBUG option is enabled.
-- *      Also fixed a compile problem for 2100.
-- *    - Updated README file.
-- *
-- *   Rev  6.06.00b12  July 11, 2003  RA/AV/DG
-- *    - Return a more correct status while determining a port's
-- *      state (qla2x00_check_port_status()).
-- *    - Ensure a completed command is returned to the mid-layer
-- *      before returning from qla2x00_eh_wait_on_command().
-- *    - Use proper fcport during SRB referencing:
-- *      - Fix qla2x00_abort_command().
-- *      - Fix qla2x00_eh_device_reset().
-- *      - Modify qla2x00_device_reset() to take an explicit
-- *        fcport rather than indirect determination via a 
-- *        possibly incorrect Target/Lun key.
-- *    - Properly schedule DPC routine if a port relogin is
-- *      required (qla2x00_timer()).
-- *    - Process the response queue regardless of state of mailbox
-- *      command execution (qla2x00_isr()).
-- *    - Process a response entry before declaring it processed.
-- *    - Return a proper BUSY status during an FC IOCTL passthru.
-- *      - Fixed direction in spinup CDB and uncomment target notify call
-- *        in FAILBACK.
-- *      - Added option to send a spinup to port as a notify type.
-- *    - Added the cmdline parameter- qlFailoverNotifyType.
-- *    - Added the check for PORT_SCAN_NEEDED in timer-To wakeup the dpc 
-- *      thread to do probing for luns added after the OS scan.
-- *    - Added the code to issue big hammer after the flash memory is updated.
-- *
-- *   Rev  6.06.00b11  June 24, 2003  RL/AV
-- *    - Removed chip version check for recognition of any
-- *      version of 2312 chip.
-- *    - Updated 2300 firmware to 3.02.13.
-- *
-- *   Rev  6.06.00b10  June 17, 2003  RL/RA/DG/AV
-- *    - Fixed endian issue with update_nvram function.
-- *    - Fixed problem of not adding target ports when using
-- *      gnn_ft to scan due to incorrect reporting of new device
-- *      list count.
-- *    - Fixed panic in qla2x00_mem_free when kernel is unable
-- *      to allocate ioctl memory. The code tried to deallocate
-- *      memory from sp pool, but the list was never initialized
-- *      until later.
-- *    - Fixed scsi_lock deadlock when unable to allocate
-- *      ioctl memory
-- *    - Modified read_nvram code to always return buffer in
-- *      little endian format.
-- *    - Modified scsi passthru code to return data underrun
-- *      status only if the target device indicated it. Error
-- *      is returned if only the firmware sees the condition.
-- *
-- *   Rev  6.06.00b9   June 12, 2003  RL/RA
-- *    - Added non-fo device support on fo driver (selective
-- *      failover configuration).
-- *    - Added code to return zero lun_data entry when mp_host
-- *      was not created for the specified HA.
-- *    - Modified persistent binding table structure definitions
-- *      and other related changes to work on ppc-64 bit platforms.
-- *    - Fixed problem of not getting out of loop when LIP happened
-- *      while we were discovering devices.
-- *
-- *   Rev  6.06.00b8   June 05, 2003  RL/AV/RA
-- *      - Setup the flash before reading the option_rom in internal ioct.
-- *      - Dont turnoff the Config required flag if no configuration
-- *        is found.
-- *    - Fixed the path mp_byte getting over-written when no config 
-- *      data specified.
-- *    - Initliaize all the list heads before calling mem_alloc during init.
-- *    - Append "post-remove" stuff during install in modules.conf for
-- *      automatic removal of conf modules whenever driver is loaded.
-- *
-- *  Rev  6.06.00b7    June 04, 2003  DG
-- *    - Fixed panic in qla2x00_mem_free if unable to allocate
-- *    ioctl memory. ha->fcinitiators was not initialized.
-- *
-- *  Rev  6.06.00b6    June 02, 2003  RL/AV/RA
-- *    - Modified configure_fabric code so after the GNN_FT call 
-- *      the non-target devices are ignored.
-- *    - Added code to return all fcports of an ha as Unconfigured
-- *      if there is no mp_host struct associated with it.
-- *
-- *  Rev  6.06.00b5    May 30, 2003  DG/RL/AV/RA
-- *    - Added the support for link_down_timeout NVRAM parameter.
-- *    - Added the support in the driver to allow the user to 
-- *      enable a rescan of the luns attached to ports already configured.
-- *      The Command "scsi-qla-scan" issue to /proc/scsi/qla2300/x invokes
-- *      this function.
-- *    - Fixed a typo for Model Name in the driver
-- *    - Added the support to enable extended error logging for DEBUG_QLA2100
-- *      if enabled .
-- *    - Added issuing of diag "ECHO" command only for QLA23xx.
-- *    - Return the Model Name for ioctl calls old way as of now.
-- *    - Fixed the panic in qla2x00_mem_alloc() caused as a result of fcport
-- *      memory pointer in "ha" being freed twice.
-- *
-- *  Rev  6.06.00b4    May 29, 2003  DG/RL/AV/RA
-- *    - Update qla2300 firmware to v3.02.12.
-- *    - properly configures PCI I/O space (PIO and/or MMIO) on
-- *      both 32 and 64bit platforms.
-- *    - Fixed a problem where scsi_unregister() would not get
-- *      called if qla2x00_mem_alloc() failed.
-- *    - Added handling for QUEUE FULL from the target. We will
-- *      suspend I/O traffic for qfull_retry_delay (2 secs) up
-- *      to qfull_retry_count times (16);
-- *    - Added extended_error_logging.
-- *    - Fixed request reordering in qla2x00_retry_command().
-- *    - Fixed incorrect conversion of endianess used in
-- *      IOCB command type 2/3 patch.
-- *    - Added issuing of diag. Echo command for F port topology.
-- *    - Added support for reporting Unconfigured Devices
-- *      in get_port_summary and get_target_data ioctl commands.
-- *    - Fixed NVRAM ioctl problem on 2312 chips.
-- *    - Added logic to get the model number of the HBA.
-- *    - Created "qla_devtbl.h" file which contains the Model
-- *      Number of 2312 devices and forthcoming one's.
-- *
-- *  Rev  6.06.00b3    May 19, 2003  DG/RL/RA
-- *    - Added support for abbreviated persistent binding
-- *      configuration statements.
-- *    - Replaced use of IOCB command type 2 with type 3 to enable
-- *      handling for possible 64bit DMA addresses.
-- *    - Cast all size_t to ulong in print arguments to eliminate
-- *      compile warnings on PPC64 platform.
-- *    - Consolidated ioctl passthru commands to use a separate
-- *      queue_command function so it won't be confused with
-- *      normal IOs.
-- *    - Removed the static EXT_IOCTL struct used in qla2x00_fo_ioctl.
-- *    - Corrected request buffer address used in start_ms_cmd.
-- *    - Updated searching of device ports for all applicable
-- *      ioctl commands.
-- *    - Added support for MP_MASK_OVERRIDE bit in mp_byte of
-- *      target ports. This includes new case for get/set path
-- *      function to handle.
-- *    - Fixed problem with alloc_path saving temporary port ptr
-- *      to the path.
-- *    - More consolidation of driver version string define.
-- *    - Update qla2200 firmware to v2.02.04.
-- *
-- *  Rev  6.06.00b2    May 16, 2003  DG
-- *    - Fixed the issue that cause the error message "Failed to
-- *      initialize adapter" which can occur in a Loop environment
-- *      when multiple nodes start powering up in 30 secs increments.
-- *      This issue was cause by Lip resets occurring in the middle
-- *      of port discovery.
-- *
-- *  Rev  6.06.00b1    May 12, 2003  DG/RL/RA
-- *    - Update qla2300 firmware to v3.02.10.
-- *      - Updated README.qla2x00.
-- *      - Added MODULE_DESCRIPTION.
-- *      - Register with Linux for 16 byte CDBs.
-- *      - Wait for MAX_LOOP_TIMEOUT for loop to be ready before
-- *      issuing device/bus reset in the respective driver error handler 
-- *      routines.
-- *      - Added logic to handle concurrent processing of big hammer
-- *      and scsi mid layer error recovery or resets issued through backdoor.
-- *      - Check for loop_state etc for individual qla2x00_set_host_data() 
-- *      operation in ioctl path.
-- *      - Sync up the exioct.h file with the one checked in VSS for the led 
-- *      change.
-- *      - Added the ZIO support       
-- *      - Added the beacon change(blink green LED on/off every sec apart)
-- *      - Added the GNNFT and GPN_ID change and incorporated the retry logic.
-- *      - Fixed the potential problem of new_dev_list getting corrupted
-- *        for different HBA in qla2x00_configure_fabric() by allocating 
-- *      the new_dev_list dynamically (instead of static).
-- *      - Wait for the max_time for firmware to be ready if the firm_state is
-- *        < FW_STATE_READY ie trying to login,waiting for al_pa etc
-- *    - Clear the device flag -DFLG_NO_CABLE during fw_ready if firm_state
-- *      is < FSTATE_LOSS_OF_SYNC indicating cable is there.
-- *      
-- *
-- *  Rev  6.05.00      April 30, 2003  DG
-- *      - Fixed issue ER25748 with SG_ALL in sg_tablesize. We
-- *        now calculated sg_tablesize based on the number of
-- *        request queues.
-- *      - Fixed qla2x00_get_retry_cnt() logic to get the ELS
-- *        timeout value from mbox3 - qla_mbx.c.
-- *      - Change min time we wait for F/W to become ready
-- *        before declaring the Cable unplug from 20secs to
-- *        60 secs.
-- *
-- *  Rev  6.05.00b10   April 25, 2003  AV/RL
-- *    - Added support of new persistent binding configuration
-- *      mechanism for large configurations which would exceed
-- *      the max string limit of modutil. This includes the
-- *      qla_opts utility.
-- *
-- *  Rev  6.05.00b9    March 31, 2003  RA/AV/DG/RL
-- *    - Process the port database update (async event-0x8014)
-- *      for login and logout only if its "Global"-any async
-- *      prevent recieved prior to 8014 indicating loop is down
-- *      like LIP_RESET,LIP_OCCURED etc.
-- *    - Honor previous firmware option settings before updating
-- *      swing and emphasis.
-- *    - Display *all* scanned luns via the /proc interface.
-- *    - If the device does not support the SCSI Report Luns
-- *      command, the driver will now only scan from 0 to the
-- *      max#-luns as defined in the NVRAM (BIOS), rather than
-- *      blindly scanning from 0 to 255 -- which could result in
-- *      an increase in initialization time when running against slow
-- *      (JBOD) devices.
-- *    - Fixed the  FC-4 feature registration code.
-- *    - Fixed the driver version string by building a static string 
-- *      during driver load, then change all references of driver version
-- *      to use that static string.
-- *    - Wait for half a second instead of a tick before trying again 
-- *      to get fw_state.
-- *
-- *  Rev  6.05.00b8    March 20, 2003  AV/DG
-- *    - Corrected issuing FC4 feature for hba.
-- *    - Added support for serial link controls: swing and emphasis.
-- *
-- *  Rev  6.05.00b7    March 13, 2003  RA/DG/AV
-- *    - Corrected compile problem of can_do_varyio and can_dma_32
-- *      on different kernel versions.
-- *    - Reduced ioctl context structure size.
-- *
-- *  Rev  6.05.00b6    March 6, 2003   DG/AV
-- *    - Added support for can_do_varyio.
-- *    - Change sg_talesize to SG_ALL
-- *    - Fixed logic to properly set highmem_io or can_dma_32.
-- *    - increase queue_depth to 32.
-- *    - Increase max_sectors to 8192.
-- *    - Add module parameter ql2xsuspendcount.
-- *            - Always enable fc4 regsiter device and features.
-- *
-- *  Rev  6.05.00b5    February 28, 2003       RL/AV
-- *    - Added check for a paused RISC in ISR -- dump HCCR for reason
-- *    - Fix improper nodename/portname construction in 
-- *      qla2x00_nvram_config() by honoring the node_name_option
-- *      bit in NVRAM.
-- *    - Correct parity check enables for 23xx ISPs.
-- *    - Add helper function qla2x00_local_device_login() to mimic
-- *      fabric login logic.
-- *    - Reschedule a local-loop update if a loop-resync needed
-- *      in qla2x00_local_loop_update() -- this will fix a small
-- *      windows where a target-device state would become out-of-
-- *      sync.
-- *    - Add debug function qla2x00_get_fcal_position_map() to
-- *      return from the firmware the current negotiated LILP map.
-- *    - Fix endianess issues in direct connect environment
-- *      (Mark Bellon mbellon@mvista.com):
-- *    - Add endian-safe bitmap structures for nvram
-- *      and init_cb_t usage.
-- *    - Fix endianess problem in qla2x00_configure_local_loop().
-- *    - Add special_options structure for data rate and 
-- *      termination settings.
-- *    - Fixed data corruption problem when issuing ioctl commands
-- *      concurrently to multiple HBAs by using a per ha scrap buf.
-- *    - Added new ioctl command for returning driver specific data.
-- *      This is used to allow API implementation to be backward
-- *      compatible with driver.
-- *    - Reset adapter current_speed when loop is down.
-- *
-- *  Rev  6.05.00b4    February 06, 2003       RL/AV
-- *    - Fixed the checking of DEV_PUBLIC flag before setting
-- *      the FC_FABRIC_DEVICE flag. The flag is now checked
-- *      using bitwise AND everywhere.  This fixes problem
-- *      with devices that are both initiator and target.
-- *    - Added checking of tape device so we don't logout from
-- *      tape devices.
-- *    - Fixed the driver hang in get_target_data of non-fo driver
-- *      by correctly store fcport value to target queue in
-- *      fcport_bind.
-- *    - Fixed invalid configuration problem when displaying
-- *      target LUNs via non-fo driver by correctly assign
-- *      the only path as preferred path.
-- *    - Added ioctl support for non-fo driver to return path and
-- *      system parameters information.
-- *    - Corrected the return values of fo ioctl functions
-- *      and added checking of return value of copy_to/from_user
-- *      calls.
-- *    - Fixed debug prints, some of which access invalid pointer.
-- *
-- *  Rev  6.05.00b3    January 27, 2003        RA/DG
-- *    - Added support for can_dma_32 and highmem_io.
-- *
-- *  Rev  6.05.00b2    January 24, 2003        RL/RA/AV/DG
-- *    - Added the use of HbaSelect to determine the ha context
-- *      of each ioctl command.
-- *    - Corrected ioctl wait_q handling when timeout happened.
-- *    - Dynamically allocate EXT_IOCTL structure in order to
-- *      make the main ioctl function reentrant.
-- *    - Corrected the return values of all non-fo ioctl functions
-- *      and added checking of return value of copy_to/from_user
-- *      calls in places that matter.
-- *    - Made proc_info reentrant by directly writing to the
-- *      buffer supplied by the caller.
-- *
-- *  Rev  6.05.00b1    December 20, 2002       RL
-- *    - Added send_els_passthru function and modified start_ms_cmd
-- *      to be used by both send_fcct and send_els_passthru.
-- *    - Modified ms_iocb definition to comply with latest 2300 spec. 
-- *
-- *  Rev  6.04.00b8    January 16, 2003        RA/DG/AV
-- *    - Use proper compiler flags when built with later GCC
-- *      versions (3.x).
-- *    - Rewrite initiator handling code:
-- *      - Use linked lists rather than a fixed-size array.
-- *      - Properly logout of intiator devices if found to be lost.
-- *      - Changes in qla2x00.c and qla2x00_ioctl.c.
-- *    - Fix lun suspension logic:
-- *      - Remove code in qla2x00_lun_alloc() which incorrectly
-- *        trashes a lun queue's q_count and q_max members.
-- *      - Properly move from a lun_queue NOT-ready state to a 
-- *        ready state when a command successfully completes in
-- *        qla2x00_callback().
-- *      - Add 'delay' logic to handle throttling scenario required
-- *        during a failback operation.
-- *    - Return a byte statistical quantity not mega-bytes in
-- *      qla2x00_get_(fc_)statistics() -- this change did not go
-- *      into 6.03.00b6 as indicated by the release notes. 
-- *    - Handle a SCSI_DATA_NONE data direction for a SCSI command.
-- *
-- *  Rev  6.04.00b7    Jan. 10 2003    DG/RA
-- *    - Added VMWARE support.
-- *    - fixed the bus reset and host reset when issued through
-- *      the backdoor by not waiting for commands which we dont own.
-- *
-- *  Rev  6.04.00b6    Jan. 8 2003     DG/RA
-- *    - Fixed hardware_lock hierarchy in qla2x00_cmd_timeout
-- *      routine to fix deadlock with interrupt handler. 
-- *
-- *  Rev  6.04.00b5    Jan. 8 2003     DG/AV
-- *    - Fix incorrect sizing of mbx_cmd_flags in structure
-- *      scsi_qla_host since bit-operators function on unsigned
-- *      long variables - in qla2x00.c.
-- *
-- *  Rev  6.04.00b4    December 19, 2002       RL/RA/DG/AV
-- *    - Increase IOCTL-passthru command timeout value (30->60).
-- *    - Update local definition of pci_set_dma_mask() to take an
-- *      u64 type rather than an dma_addr_t.
-- *    - Fix qla2100_nvram_config() to set the high-water IOCB limit
-- *      while configuring an QLA2100 HBA.
-- *    - Fixed potential panic in qla2x00_failback_luns() routine -
-- *      dereference a NULL fclun.
-- *
-- *  Rev  6.04.00b3    December 06, 2002       AV
-- *    - Fix binding algorithm in qla2x00_cfg_build_path_tree() to
-- *      support sparse targetIDs.
-- *    - Extend maximum number of failover paths to eight.
-- *
-- *  Rev  6.04.00b2    November 27, 2002       DG/RA/AV
-- *    - Pass portID information up to FO_CC_GET_TARGET_DATA ioctl
-- *      callers.
-- *    - Add support for PortID persistent binding:
-- *      - Module parameter name: Bind
-- *            o 0 by Portname (default)
-- *            o 1 by PortID
-- *            o 2 by Nodename
-- *      - Default behaviour is to bind by Portname.
-- *      - Update qla2x00_display_fc_names() to support new binding
-- *        methods -- varies by Bind type.
-- *      - Large #defing usage cleanup to more flexible module
-- *        parameter.
-- *    - Use various PCI/SCSI/endianess macros defined by the kernel
-- *      to reduce duplication.
-- *    - Streamline qla2x00_response_packet():
-- *      - Reduce multiple Register I/O writes to just one after
-- *        ring processing.
-- *    - Cleanup qla2x00_status_entry():
-- *      - Move common cases to the top of the switch statement
-- *        (CS_COMPLETE and CS_DATA_UNDERRUN).
-- *      - Refine data underrun handling, since it appears the
-- *        mid-layer underflow structure member for SCSI commands is
-- *        not consistently populated by the various upper-layers.
-- *    - Cleanup qla2x00_error_entry() to use pre-defined
-- *      descriptive values while interrogating a packet's
-- *      entry_status rather than raw BIT_* defines.
-- *    - Maintain 'RLC supported' state for an fcport, to limit
-- *      extraneous RLC commands.
-- *    - Initial qla2x00_isr() sanitization -- formating and
-- *      readability.
-- *    - In qla2x00_queuecommand(), return a command immediately, if
-- *      the port is found to be DEAD.
-- *    - Fix a dead-lock (logic) problem in
-- *      qla2x00_mailbox_command() where the code would attempt to
-- *      acquire a lock which had never been released.
-- *    - Add support for status continuation IOCB entries (extended
-- *      sense data).
-- *    - During loop transition, report back successfully completed
-- *      commands rather than blindly retry --
-- *      qla2x00_status_entry().
-- *    - Export ql2xretrycount as a module parameter.  Default value
-- *      in non-failover mode is 20, in failover mode, 30.
-- *    - Update Makefile to use 'install' rather than 'cp' as to
-- *      preserve uid/gid (Austin Gonyou).
-- *    - Consolidate duplicate code to set DMA mask --
-- *      qla2x00_config_dma_mask().
-- *    - Fix copy-error in qla2x00_send_fo_notification() where the
-- *      SCSI CDB would not be populated with the proper
-- *      notification CDB.
-- *    - In qla2x00_proc_info(), do not clear our buffer in case
-- *      another application is using it.
-- *    - Export a MODULE parameter, ql2xfailover, to allow failover
-- *      to be configured in at load time.
-- *
-- *        NOTE: Default behaviour is still based on the
-- *              compile-time option MPIO_SUPPORT.
-- *
-- *    - Add additional checks to ensure that the DPC routine has
-- *      already been created before trying to 'wake' it up.
-- *    - Add new 2300 IP/TP firmware (3.01.18).
-- *
-- *  Rev  6.04.00b1    November 4, 2002        DG
-- *    - Fixed ISP abort retry logic to retry the abort_ISP().
-- *    - Fixed port login logic to retry the login on ports that are
-- *      marked DEAD.
-- *    - Fixed issue of not loging in after loop is down for more than
-- *      4 mins.
-- *
-- *  Rev  6.03.00b10   October 31, 2002        DG
-- *    - Fixed the logic in qla2x00_mark_device_lost to not change the
-- *      state of the port if it is mark DEAD, but still schedule port
-- *      login retries.
-- *
-- *  Rev  6.03.00b9    October 30, 2002        DG
-- *    - Change LOOP DOWN timer to 4 mins and do a ISP abort if the f/w
-- *      never indicated that the cable is unplug and the timer expire. 
-- *
-- *  Rev  6.03.00      November 1, 2002        RA
-- *    - Changed the  message for SYS_ERR(0x8002) to log to message file
-- *      instead on the console.
-- *    - Formal release.  
-- *
-- *  Rev  6.03.00b8    October 28, 2002        RA/DG/AV
-- *    - Correct qla2x00_loopback_test() to return the proper mailbox
-- *      register values, additionally, the statistical values returned
-- *      are only valid upon a good loopback execution.
-- *    - Perform the INT_CC_READ_OPTION_ROM ioctl, only if the response
-- *      length is specified correctly -- as to limit reading partial
-- *      data.
-- *    - Move backdoor RESET handling to qla2x00_done() for proper 
-- *      processing.
-- *    - Given the two variants pci_set_dma_mask(), allow the
-- *      compiler to assist in setting the proper dma mask.
-- *    - Complete re-write of qla2x00_32bit_start_scsi():
-- *      - Provide similiar benefits as in 6.03.00b3-pre3.
-- *    - Add additional kernel 2.5 support (resync with 2.5.44):
-- *      - Header file cleanup.
-- *      - SCSI host template updates.
-- *      - Queue depth interface updates.
-- *    - Fix computation of normalized segment length in
-- *      qla2x00_normalize_dma_addr().
-- *    - Fix incorrect usage of head tag queueing while issuing an
-- *      RLC command during driver scan.
-- *    - Fix incorrect assignment of an fcport as LOST when it is
-- *      already in a DEAD state.
-- *    - Revert to OLD command data-direction determination (large,
-- *      and ineffiecient switch statement of recognized commands,
-- *      else check data-direction specified by command), since it
-- *      appears that a lldd cannot depend on the upper-layers to set
-- *      it correctly.
-- *
-- *      NOTE: This will *NOT* be the default behavior in the formal
-- *            release of the 6.03.00 driver.  From then on, the lldd
-- *            *will* depend on the upper-layers to specify the proper
-- *            data-direction in the SCSI command.
-- *
-- *  Rev  6.03.00b7    October 14, 2002        AV
-- *    - Enable flash operations before attempting read flash memory.
-- *    - Correct qla2x00_update_option_rom() to properly verify flash
-- *      buffer length.
-- *    - Correct additional little-endian assumptions in FC/IP driver
-- *      paths.
-- *
-- *  Rev  6.03.60      November 08, 2002       AV
-- *    - Special OEM release based on 6.03.00b6.
-- *
-- *  Rev  6.03.00b6    October 11, 2002        AV/DG
-- *    - Fix incorrect sizing of mbx_cmd_flags in structure
-- *      scsi_qla_host since bit-operators function on unsigned
-- *      long variables.
-- *    - Correct little-endian assumptions (across the board):
-- *      - ISP detection and intialization.
-- *      - SCSI I/O posting, receiving, and processing.
-- *      - IP command processing.
-- *    - Add support for PowerPC64 platform.
-- *    - Add flash image retrieval support:
-- *      - Flash manipulation code.
-- *      - Internal IOCTL support routine for application callers.
-- *    - Return a byte statistical quantity not mega-bytes in
-- *      qla2x00_get_(fc_)statistics(). 
-- *    - Fix failover during initialization limitation.  In
-- *      qla2x00_map_os_luns(), try any alternate paths if the 
-- *      preferred path is unavailable. 
-- *    - Remove extraneous logic that attempted to failback luns that
-- *      were found to be disconnected.
-- *
-- *  Rev  6.03.00b6-pre1       October 05, 2002        AV
-- *    - Fix qla2xxx_eh_device_reset() misuse of cmd->sp, since
-- *      there is no guarantee the command followed our standard
-- *      queuing path.
-- *    - Add flash update support:
-- *      - Retool flash read/write routines to work with
-- *        different flash manufacturers.
-- *    - Add additional kernel 2.5 support:
-- *      - no reparent_to_init() (Mike Anderson).
-- *    - Fix assignment bug in qla2x00_mbx_q_add() (Rick Cooper).
-- *      (ER20982)
-- *
-- *  Rev  6.03.00b5    October 02 2002         RA
-- *    - Added the logic to try to login in non fabric enviornment
-- *        (Direct Connect) by issuing login loop port mbx cmd. For
-- *        targets which silently go away and firmware has no way to
-- *        log back.
-- *
-- *  Rev  6.03.00b4    October 02 2002         AV
-- *    - Fix qla2x00_abort_command() to not issue an ISP abort if
-- *      the command abort fails.
-- *
-- *  Rev  6.03.00b3    October 02 2002         AV
-- *    - Formal beta release.
-- *    - Remove debug codes from EH and callback routines.
-- *    - The LOGOUT_AFTER_DEVICE_RESET function is still a work
-- *      in progress.
-- *
-- *  Rev  6.03.00b3-pre3       September 29 2002       AV
-- *    - Correct endian-ness issues while preparing an IOCB in
-- *      qla2x00_send_packet() -- should now work on
-- *      non little-endian machines.
-- *    - Cleanup definitions for ??_64BITS() macros.
-- *    - Complete re-write of qla2x00_64bit_start_scsi():
-- *      - Correct endian-ness issues while preparing IOCBs.
-- *      - Add fix to correct data segment 32bit page boundary
-- *        (hardware) limitations.
-- *      - Correct inefficiencies in IOCB preparation.
-- *      - Update firmware command timeout calculation.
-- *    - Makefile update -- during an install, the makefile will
-- *      now rename any qla2200 'addon' binaries to "*_rh.o"
-- *    - Update qla2x00_load_ram() to always use MBC_LOAD_RAM_A64
-- *      since previous code was needlessly ISP specific and
-- *      could potentially truncate a valid highmem address.
-- *    - Add additional kernel 2.5 support:
-- *      - MKDEV() -> mk_kdev() (Mike Anderson).
-- *      - MAJOR/MINOR() -> major/minor() (Mike Anderson).
-- *      - Remove emulated member from host template (Lincoln Dale).
-- *    - Fix qla2x00_status_entry() to not retry IOCTL generated 
-- *      commands.
-- *    - Update qla2x00_issue_iocb() to use MBC_IOCB_EXECUTE_A64
-- *      as to not truncate a valid highmem address.
-- *    - Fix pci_set_dma_mask() invocations as to not downcast
-- *      64-bit literals to a potential 32-bit type (dma_addr_t).
-- *    - In qla2x00_rpt_lun_discovery() do not retry the command if
-- *      the target does not support the REPORT LUNS cdb.
-- *    - In qla2x00_lun_discovery() clear fc_lun_t structure upon
-- *      allocation (incorrect stale data in fields).
-- *    - Update display of luns in /proc to not show 'disconnected'
-- *      (non-existent) luns.
-- *    - The check for 'ready' state in
-- *      qla2x00_check_for_devices_online() is too strict.  Loosen
-- *      restriction to allow a failback on all ONLINE ports.
-- *    - In qla2x00_failback_luns() do not try to failback to a DEAD
-- *      port.
-- *    - Add option (LOGOUT_AFTER_DEVICE_RESET) to explicitly logout
-- *      of a device after a device reset has been successfully 
-- *      issued -- a login will occur shortly after.  This is need
-- *      for some storage subsystems.
-- *
-- *  Rev  6.03b2               Sept 24, 2002       RA
-- *    - Fixed the compilation warnings on RedHat Dist.
-- *    - Added check not to wait for the commands to be returned by
-- *      the firmware if device_reset etc is issued through the backdoor.
-- *    - Do relogin for non-public devices also when firmware reports
-- *      command timeout along with logo(compl status=0x6 and logout(0x2000))
-- *
-- *  Rev  6.01/6.02b2/6.03b1   Sept 16, 2002       AV
-- *    - Corrected wrong setting in qla_setting.h file to
-- *      fix compile error with RH-AV. 
-- *
-- *  Rev  6.01/6.02b1  Sept 11, 2002       AV
-- *    - Fixed issue 225984 - Fixed reset logic to flush done queue
-- *      before returning to OS and retry an ABORT ISP call if it fails. 
-- *      Serialized the done processing when not using a tasklet. 
-- *    - Fixed 2200 performance issue using fastposting.
-- *    - Fix target reset logic to use the correct mailbox command. 
-- *
-- *  Rev  6.01         August 29, 2002       AV
-- *    - Formal release.
-- *    - Update README to reflect support of later Redhat releases.
-- *
-- *  Rev  6.1b5                August 20, 2002       AV/DG
-- *    - Fix mis-use of stale SP after re-addition to the free
-- *      queue -- qla2x00_callback().
-- *    - Fix mis-use of invalid loop id during a LIP caused by
-- *      an initiator device -- qla2x00_device_resync().
-- *    - Update IOCTL passthru code to fully support CBD lengths
-- *      of 16 bytes with later kernels.  Earlier kernels supported
-- *      CDB sizes of 12 bytes only -- thus the workaround.
-- *    - Add initial kernel 2.5 support:
-- *      - Removal of io_request_lock in favor of host->host_lock
-- *        (Mike Anderson).
-- *    - Return -EINVAL for all non-EXIOCT ioctls (Mike Anderson).
-- *    - Remove extra 'continue' statement in qla2x00_proc_info()
-- *      which effectively disabled the display of luns.
-- *    - Remove dead-code from qla_ip.c.
-- *
-- *  Rev  6.1b4                August 09, 2002       AV/DG
-- *    - Remove qla_dbg.h and qla_def.h files from driver
-- *      distribution.
-- *    - Remove all virt_to_* calls in both SCSI/IP driver sources.
-- *      - 64bit DMA addressing through dma_addr_t.
-- *    - Cleanup structure names/member variables from IP sources.
-- *    - Add QL_DEBUG_LEVEL_12 for IP debugging.
-- *    - Add transmission timeout callback for IP driver.
-- *    - Enable SRAM, Instruction RAM and GP RAM parity checks on
-- *      ISP2300s.
-- *    - Display all luns recognized by driver in /proc, not just
-- *      SCSI mid-layer scanned luns.  Luns not scanned by the mid-
-- *      layer are marked with an asterisk (*).
-- *      - Add FC_SUPPORT_RPT_LUNS flag to the struct fc_port.flags.
-- *        Set, if the device supported the report luns command.
-- *    - Increase Inquiry request buffer to 36 rather than 4.  Some
-- *      target devices have problems with the small transfer.
-- *    - Fix assignment of current_speed during an asyncronous event
-- *      MBA_LOOP_UP.  Improper connection speed was being reported
-- *      to EXIOCTs and IP driver.
-- *    - Add ISP2100 support:
-- *      - QLogic provides no support for the ISP2100.
-- *      - compiled binary name qla2100.o.
-- *      - Forward-port chip support from 5.[2|3]x series driver.
-- *      - Update Makefile.kernel and Config.in.
-- *      - add new 2100 TP firmware (1.19.24).
-- *    - Fix copy-error in qla2x00_fo_get_params() where the
-- *      qla_fo_params notification CDB would be zero'd-out.
-- *    - Fix kernel-oops when DEBUG level 5 is enabled and a command
-- *      is sent to a non-existent lun.
-- *    - Fix in-kernel compilation problem (Veritas).
-- *    - Remove superfluous KMALLOC*/KMFREE/BZERO/BCOPY/
-- *      BCMP/qla_bcopy defines and functions.
-- *    - Remove unused ql_list_link structures and functions.
-- *    - Consistent use of copy_to/from_user() functions (RH).
-- *    - Consistent use of struct scsi_qla_host instead of
-- *      several aliases (RH).
-- *    - Remove illegal usage of caddr_t (RH).
-- *    - Remove Target-Mode support from driver.
-- *    - Cleanup qla_fo.c file:
-- *      - Remove old debugging code.
-- *      - General sanitizing.
-- *    - Modify SCSI template name (QLogic)
-- *    - Cleanup compiler warnings during debug builds.
-- *    - Add new 2300 IP/TP firmware (3.01.13).
-- *
-- *  Rev  6.1b3                June 12, 2002       RA
-- *    - Non-released driver - version number skipped due to Combo
-- *      package release to OEM.
-- *
-- *  Rev  6.1b2                June 08, 2002       AV/DG
-- *    - Fix issue where the report-luns logic would interpret
-- *      data on an incorrect status from the device.
-- *    - Fix issue where a loopback request was not being issued
-- *      if the HBA loop status was not ready -- Callers of the 
-- *      IOCTL expect the FW to handle this condition and return 
-- *      the proper status.
-- *    - Clean-up IP support callback mechanism -- explicit
-- *      export of a single *_ip_inquiry() call that returns
-- *      specific interface function pointers. Each ISP driver
-- *      now has its own *_ip_inquiry() function
-- *      (qla2200_ip_inquiry() and qla2300_ip_inquiry()).
-- *    - Remove inter-dependencies between 2200/2300 compiled
-- *      drivers.
-- *    - Fix issue where del_timer()/add_timer() combination in 
-- *      RESTART_TIMER macro would cause a race condition during
-- *      module unloading -- use mod_timer().
-- *    - Cleanup spinlock initialisation -- spin_lock_init()
-- *      macro (FalconStor).
-- *    - Add CONFIG_MD_MULTIHOST support (FalconStor).
-- *    - Add SCSI add-single-device support (FalconStor).
-- *    - Added new 2300 IP/TP firmware (3.01.11).
-- *    - Added new 2200 IP/TP firmware (2.02.03).
-- *
-- *  Rev  6.1b1                June 14, 2002       AV/DG
-- *    - Integrate IP backdoor updates.
-- *    - Add CACHE_LINE flush before updating request-ring
-- *      indexes to address spurious hardware hangs.
-- *    - Add hardware_lock'ed qla2x00_marker() function for
-- *      IP integration layer.
-- *    - Remove busy-wait during qla2x00_fw_ready().
-- *    - Remove extraneous display of adapter node/port
-- *      information.
-- *    - Fix issue with the register_fc4 function not sending
-- *      the appropriate amount of data to the firmware.
-- *    - Ip_inquiry should query off the ha's instance number,
-- *      not host_no during IP capable scan of HBAs.
-- *    - Add 'hardware locked' logic to IP integration functions:
-- *      qla2x00_add_buffers(), qla2x00_ip_send_login_port_iocb(),
-- *      and qla2x00_ip_send_logout_port_iocb() functions.
-- *    - Add IP /proc file information text.
-- *    - Indentation and debug-level cleanup.
-+ *  Rev  7.00.00b22           Apr 2, 2004     RA,DG,AV
-+ *    - Remove TASK_INTERRUPTIBLE to TASK_UNINTERRUPTIBLE
-+ *    - Remove incorrect assignment of ha->retry_count to 
-+ *      login retry count;
-+ *    - RHEL/SLES8 differences when compiling the driver
-+ *      on x86_64 and PPC64
-+ *    - Fixed boundary check for queuedepth value.
-+ *    - ER36592:Fixed the query_hba_port() ioctl call to check
-+ *      for LOOP_DEAD state to report correct hba port state
-+ *      when link down timeout is non zero.
-+ *
-+ *  Rev  7.00.00b21           Mar 30, 2004    RA
-+ *    - Updated the QLA23XX Firmware to v3.02.27
-+ *
-+ *  Rev  7.00.00b21test               Mar 17, 2004    DG,RA,AV
-+ *    - Add feature to initiate a LIP via /proc interface.
-+ *      Similiar to rescan.
-+ *    - DEBUG3 fixes when qla2x00_allocate_path() fails.  I
-+ *      hope RA is ok with this version :)
-+ *    - Revert to old method of returning BIOS version until
-+ *        some concensus has been formed on where the driver
-+ *      should return the information.
-+ *    - Fixed target information in proc info rouitne, so it displays
-+ *      the correct target.
-+ *
-+ *  Rev  7.00.00b20           Mar 9, 2004     DG
-+ *    - PortID binding
-+ *    - 2100/2200 panic during firmware load
-+ *    - qla2x00_get_link_status() loop_id fix
-+ *    - INQ fix to not assume a fabric device when fw
-+ *    - returns CS_PORT_LOGGED_OUT
-+ *    - Return true nodename for XP device during
-+ *     get_port_summary.
-+ *    - Tape command handling forward-ported from 6.06.64
-+ *    - Dereference a NULL pointer after allocate_path().
-+ *    - Perform proper check of START_STOP command in 
-+ *    - qla2x00_queuecommand(), dereference a command's cmnd[]
-+ *     array, not its sc_data_direction.
-+ *    - Response ring check refinement in qla2x00_queuecommand().
-+ *    - As per RH comments, back-out PLUG-TIMER and scsi-affine
-+ *     'performace patches'
-+ *
-+ *  Rev  7.00.00b19           Mar 9, 2004     DG
-+ *  Rev  7.00.00b19-test1     Mar 9, 2004     DG
-+ *    - Added logic to detect "NOT READY" when a different host failover a 
-+ *      shared port on the EVA.
-+ *     
-+ *  Rev  7.00.00b18   Mar 4, 2004     DG
-+ *    - Skip trying to failover a controller lun this causes the no matching
-+ *     lun error.
-+ *    - Eliminate the temporary failover queue. 
-+ *    - Enhance the logic for finding active paths to speed up failover. 
-+ *
-+ *  Rev  7.00.00b17   Feb 24, 2004    RA
-+ *    - Fixed Oops with multiple FO targets when we can't find
-+ *    a matching lun.
-+ *    - Fixed issue cause by LOOP going DEAD before port.
-  * 
-- *  Rev        6.0            June 13, 2002           DG
-- *    - Released
-+ *  Rev  7.00.00b16   Feb 20, 2004    RA
-+ *    - Updated the QLA23XX FW to v3.02.24
-+ *
-+ *  Rev  7.00.00b15   Feb 11, 2004    DG/RA/AV
-+ *    - Fix endianess issues while preparing command IOCBs.
-+ *    - Only perform lun discovery on target-type fcports.
-+ *    - Build qla_opts with proper host CC.
-+ *
-+ *  Rev  7.00.00b14   Feb 10, 2004    DG
-+ *    - Added logic to detect and failover the port when a shared 
-+ *      port on the MSA1000 is switched to the standby port by a 
-+ *      different host. 
-+ *    - Always export HSG80 ports in failover mode.
-+ *    - Added support to reset luns on EVA after failover.
-+ *    - qla2x00_configure_loop() fix when an RSCN occurs 
-+ *      during the configure_loop routine.
-+ *    - FCP protocol error check during qla2x00_status_entry() 
-+ *    - Added code review changes (RH) 
-+ *
-+ *  Rev  7.00.00b13   Feb 4, 2004     DG
-+ *    - RIO fix for big endian platforms.
-+ *    - Eliminate checking initiators while processing fcport list. 
-+ *    - New 23xx ip/flx firmware version  3.02.22
-+ *    - Increase driver timeout value to (2.5 * RATOV) for RATOV events.
-+ *    - Honoring "ConfigRequired=1" in mon-failover mode. 
-+ *    - Added logic to block i/o during failoer mapping.
-+ *
-+ *  Rev  7.00.00b12   January 30, 2004        DG
-+ *    Fixed issue in port scan logic with adding luns dynamically.
-+ *
-+ *  Rev  7.00.00b11   January 26, 2004        DG
-+ *    Updated to Firmware Version 3.21.04 (16:56 Jan 23, 2004) (flx)
-+ *
-+ *  Rev  7.00.00b10   January 20, 2004        DG
-+ *    - Updated f/w to v3.02.21
-+ *
-+ *  Rev  7.00.00b9    January 13, 2004        DG
-+ *    - Fixed panic in select_next_path() 
-+ *
-+ *  Rev  7.00.00b7,b8 January 5, 2004         DG
-+ *    - Added EVA support to failover code.
-+ *    - Improve smart failover to know when port
-+ *      has run-out-of HBAs paths.
-+ *
-+ *  Rev  7.00.00b6    January 5, 2004         AV
-+ *    - Add backed-out changes from beta 3 to 5.
-+ *    - Remove unused 63xx functions (check_topology()).
-+ *
-+ *  Rev  7.00.00b5    December 22, 2003       DG
-+ *    - merge 63xx 
-+ *
-+ *  Rev  7.00.00b3    December 10, 2003       DG/AG
-+ *    - Resync with 6.07.00b14.
-+ *    - PCI Posting fixes.
-+ *    - Configure DMA addressing before issuing any allocations.
-+ *    - Add support for RHEL3 specific Scsi_Host members.
-+ *    - Remove unused HOTSWAP/GAMAP/FLASH_DATABASE functions.
-+ *    - Fix for infinite loop in qla2x00_wait_for _hba_online()
-+ *    - Fix to purge all requests for a given target from retry_q
-+ *      on eh_resets.
-+ *    - Changes for common qla2x00.c for qla200
-+ *    - Merge several patches from Mark Bellon
-+ *      [mbellon@mvista.com]:
-+ *      - Interrupt latency rework.
-+ *      - Add extended information to /proc (Ohm Terminations and
-+ *        Data Rate).
-+ *      - Convert little-endian firmware data from Get Link
-+ *        Statistics mailbox call to appropriate host endianess.
-+ *    - Add support for FDMI 'Host Name' port attribute.
-+ *
-+ *  Rev  7.00.00b2    Nov14, 2003 RA
-+ *    - Fixed the issue where port id was overwritten when
-+ *      switched to gan
-+ *    - Zero out the swl buffer when doing fabric discovery
-+ *    - Removed the leftover fabricid array causing buffer
-+ *      overflow
-+ *    - Consolidated the code to compile acroos v7.x and v1.x
-+ *      driver.
-+ *    - Added the support for qla200 in qla_opts.
-+ *    - Wait for 60 sec during F/W ready during init time only.
-+ *    - Added the support for ISP200.
-+ *
-+ *  Rev  7.00.00b1    Oct 28, 2003 AV/RA
-+ *    - Consolidated the fabric device list 
-+ *    - Added the 16 bit loop id support
-+ *    - Added the support for 2300/2322 Extended F/w interface.
-+ *    - Added the support to compile without failover module as 
-+ *      source pkg.   
-+ *    - Fixed bug in configure_loop where it will loop forever.
-+ *    - Separated the Port state used for routing of I/O's from
-+ *    - port mgmt-login retry etc.
-+ *    - Based on 6.07.00b9plus
-  *
-- *  Rev  6.0b26-PLUS/b27   May   23, 2002       ??/??/??
-- *    - Correct IOCTL return code when an invalid signature is
-- *      passed in the EXT_IOCTL request.
-- *    - Remove unused defines KERNEL_SEM_BUG and NEW_EH_CODE.
-- *    - Added new 2300 IP/TP firmware (3.01.09).
-- *
-- *  Rev  6.0b26        May   23, 2002       RA/DG/AV
-- *    - Fixed issue with device_reset so it uses the
-- *      correct adapter in failover mode. 
-- *    - Add logic to track usage of the iocb and prevent
-- *      the firmware from running short.
-- *    - Increase suspend time for LUN "Not Ready" conditions
-- *      from 18 secs to a max of 30 secs.
-- *    - Added option to display the configuraation info in
-- *      failover mode.
-- *    - Fix FC passthru IOCTL interface to only return the
-- *      low-order byte of the scsi status.
-- *
-- *  Rev  6.0b25        May   20, 2002       RA/DG/AV/RL
-- *    - Issue RLC command immediately to determine lun list.
-- *    - Remove extraneous logic that removes commands from the
-- *      pending queue when the loop is down or a destination device
-- *        is found to be off-line.
-- *    - In failover mode, add an extra second to the command timeout
-- *      for additional internal processing.
-- *    - Add descriptions for module options. 
-- *    - Simplify locking in qla2x00_cmd_timeout().
-- *    - Fix memory-mapped I/O usage. 
-- *    - Fix the potential panic during error recovery when a command
-- *      is not returned during an abort resulting in dual instances
-- *      of a command's SRB.
-- *    - Clean-up processing of interrupts during error-recovery
-- *      mode.
-- *    - Changed back get_disc_port IOCTL behaviour so now it returns
-- *      next available device instance info when a port/target
-- *      device is disconnected.  The change was added and now
-- *      removed by customer request.  This is now pre-b13 behaviour.
-- *    - Added new 2300 IP/TP firmware (3.01.08).
-- *
-- *  Rev  6.0b24-test1  May   07, 2002       TWT
-- *    - Added IPFC support.
-- *
-- *  Rev  6.0b24              May   06, 2002       DG
-- *    - Fix potential panic when configuration data exists for a device
-- *      that is off-line.
-- *
-- *  Rev  6.0b23              May   06, 2002       RA/RL
-- *    - Added the new setup() routine for lk>=2.4 and above to handle the 
-- *      kernel command line parameter.
-- *    - Set BIT_1 when issuing login_fabric() from the ioctl to take
-- *      care of McData issue.         
-- *
-- *  Rev  6.0b22-test2  April 30, 2002       DG
-- *    - Made tasklet a compile time option.
-- *    - Fixed mailbox timeouts on first mailbox command after polling.
-- *    - Fixed MPIO issue of requests setting in pending queue after 
-- *      resync of second adapter.
-- *
-- *  Rev  6.0b22-test1  April 29, 2002       RA/AV
-- *    - Updated makefile to add the support for all the arch-i386/i486/i586
-- *      /i686 -especially to address the skipjack issue.
-- *    - Set the right host status when device returns queue full.
-- *
-- *  Rev  6.0b22        April 26, 2002       RL/AV
-- *    - Corrected usage of pci info by directly getting it from ha->pdev.
-- *      This fixes problem with referencing the now uninitialized
-- *      fields of ha->pci_bus and ha->pci_device_fn from various
-- *      places including ioctl calls.
-- *    - Corrected HBA port state value returned in ioctl call.
-- *    - Corrected saving of failover path ID.
-- *    - Added passing of SRB_IOCTL flag via the CMD_RESID_LEN(cmd) field
-- *      from scsi passthru ioctl so the passthru IO won't get retried.
-- *    - Added checking of SRB_IOCTL in regular IO path so we do not
-- *      retry these IOs.
-- *    - Enabled ABORT_TARGET mailbox command to clear reservation.
-- *    - Replaced set_cache_line function with RedHat implementation.
-- *    - Cleaned up variable names in cmd_timeout.
-- *
-- *  Rev  6.0b21-test2  April 24, 2002       DG
-- *    - Fixed Oops in qla2x00_next() when starting new command 
-- *      after a resync. 
-- *    - Fixed issues in failover code.
-- *    - Added back suspend lun support.
-- *
-- *  Rev  6.0b21-test1  April 18, 2002       AV
-- *    - Remove per-lun pending queues in favor of a simplified
-- *      single adapter pending queue for all queued commands
-- *      issued to the adapter.
-- *    - Cleanup global detect semaphore name usage.
-- *    - Simplify the queue command process by postponing expensive
-- *      backend checks to the qla2x00_next() function. 
-- *    - Remove all NOP *_LOCK/UNLOCK macros.  These macros are no
-- *      longer needed with the 6.x series drivers. 
-- *    - Removed all OLD error-handling code. 
-- *    - Simplify the SCSI host template -- remove references to
-- *      OLD error-handling routines.
-- *
-- *  Rev  6.0b21        April 17, 2002       RL
-- *    - Added more error handling code for send_fcct ioctl command,
-- *      and fixed a panic problem by using dummy tgt/lun q structures.
-- *    - Added get/set RNID related mailbox commands and ioctl support.
-- *    - Fixed compile warning by defining pci_set_dma_mask function
-- *      for kernel version < 2.4.3.
-- *    - Moved sp_get and sp_put back to qla2x00.c.
-- *    - Some indentation clean up and ioctl debug level clean up.
-- *
-- *  Rev  6.0b20        April 15, 2002       RA
-- *    - Added HSG80 flag in makefile to define COMPAQ(-DCOMPAQ) compilation
-- *      flag.
-- *    - Added HSG80_PORT_RETRY_COUNT macro for COMPAQ-HSG80.
-- *
-- *  Rev  6.0b19        April 10, 2002       RA
-- *      - Use pci_set_dma_mask() to set up 64bit/32bit instead of
-- *      CONFIG_HIGHMEM.
-- *      - Renamed RETRY_FOR_NOT_READY back to COMPAQ-By default disabled.
-- *
-- *  Rev  6.0b18        April 10, 2002       AV/RA
-- *    - With Indent-8 tabs formatted all of the driver files.
-- *    - Removed the left over serial console support.
-- *    - Changed the debug routines to  linux style.     
-- *    - Change places where we use SYS_DELAY to udelay/barrier()
-- *    - Fix bugs wwrt to >> 32 of 32 bit variables.
-- *    - Cleaned up the support for lk < 2.4  kernel. 
-- *    - Fixed missing wakeups of the  dpc thread  
-- *    - Added barrier() between subsequent reads in
-- *       qla2x00_debounce_register();  
-- *      
-- *  Rev  6.0b17        April 09, 2002       AV/RL/RA
-- *    - Deleted all direct references to qla2x00_callback outside
-- *      of sp_put and __sp_put functions, so the sp->ref_count
-- *      is decremented correctly before going back to free pool.
-- *      This fixed IO timeout/hang after some direct qla2x00_callback
-- *      calls are invoked.
-- *    - Fixed panic from ioctl passthru command which makes separate call
-- *      to allocate new sp by deleting the zeroing out of sp content after
-- *      calling get_new_sp.  We should not overwrite sp content
-- *      because get_new_sp initializes some fields to non-zero. 
-- *    - Moved the call to rpt_lun_discovery to later so that LUN 0 will
-- *      always be allocated regardless of the actual LUN list
-- *      returned. This allows kernel to continue scanning past
-- *      a non-existent LUN 0.
-- *    - Added output of the following to proc_info per customer
-- *      request:
-- *      'Number of reqs in scsi_retry_q', 'Number of reqs in failover_q',
-- *      'Device queue depth'.
-- *    - Added qlport_down_retry as a new driver parameter per customer
-- *      request.
-- *    - Changed ioctl busy polling interval to 1 second instead of
-- *      1 tick.  1 tick is unrealistic.
-- *    - Added more ioctl function description headers.
-- *
-- *  Rev  6.0b16        April 08, 2002       RA/AV/RL
-- *     - Added the support to recognise medium changer type
-- *       as Tape devive(inq[0] == 8).
-- *     - For Not Ready case suspend the lun only for Hard Disk Device 
-- *       type.                
-- *     - Nuked the support for FC_VI.
-- *     - Before examining the scsi status Mask of the reserved bits 12-15.
-- *     - Added the CONFIG_HIGHMEM support for 64bit dma addresing on 32bit
-- *         platform.
-- *     - Renamed file- settings.h as qla_settings.h
-- *     - Debug macros moved from qla2x00.c to qla_debug.h and made
-- *       statement like.
-- *     - Removed serial console code.        
-- *     - Added the missing hardware lock in eh_abort when searching the "sp"
-- *       in the active array. 
-- *     - Added  loop state and number of free srb's in the /proc
-- *     - Changed to use kernel interface or routines(ex-readb())
-- *       for Memory Mapped I/O.
-- *     - Cleaned up qla2x00_pci_config() routine.
-- *     - Renamed COMPAQ flag to G80. 
-- *     - Set the port_down_retry_count to 30 if in the nvram its  configured
-- *       less than 30.Need enough time to try and get the port back    
-- *     - Get  rid of the lun_list field in the inq_cmd_rsp structure.
-- *     - Check for abort_active/reconfiguration/recovery active state
-- *       before issuing get_link_status mbx cmd.
-- *     - Renamed qla2200_nvram_config() to qla2x00_nvram_config()
-- *     - Need to get rid of caddr_t as its illegal in the kernel-????
-- *     - Add ref_count to the "sp" structure, needed to keep locking sane
-- *       over functions that sleep.Added sp_get() and sp_put() .       
-- *     - Use Report Luns (RLC) for lun discovery process.
-- *     - Use a consistent set of command structures during SNS queries --
-- *       add sns_cmd_rsp_t structure.
-- *     - Fix issue where SNS query would return too much data for
-- *       the firmware to handle -- explicitely define the maximum amount
-- *       of double-words in the SNS request.
-- *     - Changed VIRT_TO_BUS/KMALLOC to pci_alloc_consistent() in qla_fo.c
-- *     - Updated README.qla2x00
-- * 
-- *  Rev  6.0b15        April 05, 2002       DG/RA/RL
-- *     - Corrected more local dpc flag checking in configure_loop.
-- *       This fixed problem not calling correct functions based
-- *       on correct flags.
-- *     - Deleted hardcoded port_down_retry_count.
-- *     - Corrected macros used to split up dma physical address
-- *       for use by registers. Now the macros work on both 32bit
-- *       and 64 bit platforms.
-- *     - More dma_addr_t function parameter type correction.
-- *     - Added update of port_id in build_fcport_list function
-- *       when updating a pre-existed port. This fixed problem
-- *       of not able to login after the port location has been
-- *       changed.
-- *     - Return a different status for 4006 error from login fabric
-- *       mbx cmd so we don't retry anymore.
-- *
-- *  Rev  6.0b14        April 04, 2002       DG/RA/RL/AV
-- *     - Fixed query_disc_port ioctl not returning correct port
-- *       state.
-- *     - Changed port_down_retry_count to 32.
-- *     - Corrected local dpc flag variable checking in configure_loop
-- *       to use bit manipulation functions instead of C style bit
-- *       checking.  This results in correctly log out lost 
-- *       fabric ports.
-- *     - Corrected qla2x00_send_sns function parameter type for
-- *       physical address to use dma_addr_t.
-- *     - Added PCI module device table.
-- *     - Updated README file with Suse ramdisk info.
-- *
-- *  Rev  6.0b13        April 03, 2002       DG/RA/RL/AV
-- *    - Fixed the makefile issue: corrected documentation,
-- *      and makefile syntax problem (making both drivers when
-- *      only one is asked for).
-- *    - Reduced stack size in functions using over 0x200 bytes
-- *      stack space: qla2x00_set_lun_data_from_config,
-- *      qla2x00_cfg_build_path_tree, qla2x00_aen_get,
-- *      qla2x00_query_hba_node, qla2x00_get_port_summary,
-- *      qla2x00_send_fcct.
-- *    - Changed get_disc_port ioctl behavior which returns next
-- *      available device instance info when a port/target is
-- *      disconnected. Now return error when query for lost port.
-- *    - Moved the allocation of host database to outside of the adapter
-- *      structure allocation to avoid the allocation size limitation in
-- *      the scsi_register function.
-- *    - Changed qla2100_ function names to qla2x00_ prefix.
-- *    - Changed previous qla2100_print calls to use printk.
-- *    - Cleaned up compile warnings.
-- *    - Added the support in README.qla2x00 to build the driver as part of the
-- *      kernel.
-- 
-- *         
-- *  Rev  6.0b12        April 01, 2002       DG/RA QLogic
-- *       - Fixed the port login stuff-not trying to login even the port was
-- *         marked as lost unless RSCN happens and we do a loop resync.
-- *       - Copy the done queue into local queue in qla2x00_done() such that we
-- *         do not wind up calling done queue takslet for the same IOs from DPC
-- *       or any other place.
-- * 
-- *  Rev  6.0b11        April 01, 2002       RL/RA QLogic
-- *    - Added initialization of the new lun q lock for ioctl_lq.
-- *      This fixes passthru ioctl hanging problem.
-- *      - Added the missing hardware lock in qla2x00_process_risc_intrs()
-- *        when we call qla2100_isr().
-- *
-- *  Rev  6.0b10        March 29, 2002       DG QLogic
-- *    - Added new support for suspending the lun on "not ready"
-- *      conditions.
-- *    - Deleted extra usage of io_request lock in fc_scsi and
-- *      scsi3 passthru ioctl functions.
-- *    - Updated README file.
-- *
-- *  Rev  6.0b9         March 28, 2002       RA/DG/RL/JJ QLogic
-- *    - Added use of additional fields in Scsi_Cmnd to save IO
-- *      status related values for ioctl SCSI/FCCT passthru cmd
-- *      processing.
-- *    - Added scsi3_passthru function to process 16 byte CDBs
-- *      whose fclun value can be in either VSA or PDA format.
-- *    - Added device and bus reset new error handling functions.
-- *    - Added option and code to handle register_fc4.
-- *
-- *  Rev  6.0b8         March 27,2002        RA/DG/RL QLogic
-- *      - Set the host_byte status correctly in process_completed_request().
-- *    - Fixed the stack overflow in configure_fabric() qla2x00_ioctl()
-- *      and qla2x00_fo_ioctl() routine.
-- *      - Cover the case in eh_host_reset() where abort_isp is already active.
-- *    - Release the hardware lock before we return in reset_chip() routine.
-- *      - Added the support to grab the io_request_lock back in the queuecommand
-- *      after adding the request to scsi_retry_queue.
-- *      - Fixed the issue in the detect routine where we dont hang around for 
-- *      the  devices to come online. 
-- *      -Implemented scsi_retry_queue stuff.
-- *    -Added the function headers for qla2x00_process_risc_intrs
-- *       and qla2x00_process_completed_requests
-- *    -Got rid of abort_q_put() ,abort_q_get() cmd_wait(),
-- *     qla2100_return_status()  routines and ABORT lock.
-- *      -Added the support for  2.5.7>lk>=2.4.8 in Scsi Host TEMPLATE.
--
-- *  Rev  6.0b7          March 20, 2002       JJ QLogic
-- *    - Change not to use the first slot (0) of the outstanding_cmd
-- *      array, since we will put NULL handle for a completed cmd.
-- *    - Implement new hardware lock in place of io_request_lock
-- *      in order to improve performance.
-- *    - Save ha in srb_t when being inserted into the failover
-- *      queue so we know which ha to look for when that cmd is
-- *      timed out.
-- *    - Add aborting isp if abort command failed.
-- *    - Fix cmd_timeout routine to get the valid ha for the
-- *      fail-over driver.
-- *
-- * Rev  6.0b6           March 20, 2002                RL QLogic
-- *    - New PCI device registration and API support for 2.4.0 and
-- *      above only.
-- *    - Template change (previously done).
-- *    - Remove explicit virt_to_* calls in foavor of
-- *      *_alloc_consistent.
-- *    - Only allow compilation on 2.4.0 machines and above.
-- *    - Corrected ioctl hang due to SETINSTANCE command.
-- *    - Added io_request lock in FCCT passthru function when issuing
-- *      login_fabric mbx cmd.
-- *    - Corrected issue_iocb parameter as referenced in qla_fo.c.
-- *
-- * Rev  6.0b5           March 14, 2002                RL QLogic
-- *    - Added qla2200.c and qla2300.c files to enable separate
-- *      driver make in RedHat kernel source directory.
-- *    - Added/enabled two new error handling functions: eh_abort and
-- *      eh_host_reset.
-- *    - Changed issue_iocb prototype to pass in the buffer physical address
-- *      value.
-- *    - Changed request_region function (in register_with_Linux) to use
-- *      correct driver name string.
-- *    - Added release_region if request_irq function failed (in
-- *      register_with_Linux).
-- *    - Moved the enabling of host interrupt (in mbx cmd issuing) to just
-- *      before going to sleep waiting for completion.
-- *
-- * Rev  6.0b4           March 11, 2002                RA QLogic
-- *       - Fixed the panic in the loop reset routine where we trying to
-- *         derefernce tgt queue even if its NULL. 
-- *       - Changed the MAX_SRBS count to 4096.
-- *       - Changed to dma_addr_t instead of depending on BITS_PER_LONG
-- *       macro in get_port_database.
-- *       - Changed README.qla2x00-Support for 2.4.x only.
-- *
-- * Rev  6.0b3           March    08,2002       RA QLogic
-- *       - Fixed the panic in abort routine- where we try to dereference  
-- *         "sp" even its NULL causing to panic.
-- *       - Partially cleaned up compiler warning.
-- *         
-- * Rev  6.0b2           March    07,2002       RA QLogic
-- *       - Update 2200(v2.02.01) and 2300(v3.1.02) firmware. 
-- *       - Instead of depending on BITS_PER_LONG macro to 
-- *       figure out whether address will be 64 bit or 32 bit
-- *       ,changed it to dma_addr_t data type .Even on 32bit system
-- *       if there is high memory support it will be 64bit instead of 32bit.
-- *       - Earlier we used to call qla2100_callback directly in qla2x00_ms_entry
-- *       routine.But now its dangerous to do so.As we zero out the
-- *         sp pointer in the cmd just before calling scsi_done().So we just
-- *         the "sp" in done_queue  and let the tasklet process it later.
-- * Rev  6.0b1           March    06,2002       RA,DG QLogic
-- *       - Started with Driver Version-5.38b16 as the base.
-- *       - Initial release of the 6 series driver, with all the
-- *       changes ported from the  4.x series driver(mentioned below). 
-- *       - Now we keep track of the loop_id, so that we can log
-- *       into that port successfully when it comes back.
-- *       - All the options setting has been moved from qla2x00.c to settings.h
-- *         file.
-- *     -Added the support from NEW Error Handling Code perspective.
-- *        Right now the  macro(NEW_EH_CODE) is turned off till we 
-- *        completely fix all the issue related to  NEW_EH_CODE in the driver.
--
--/****************************************************************************
-- *    Changes Ported from 4.x Driver:
--
--        -Changed malloc.h to use slab.h to get rid of the compiler warning 
--         message.
--      -Use del_timer_sync to delete qla2100_timer for lk > 2.4.0
--      -Send marker only at one place ie when we are about to send out
--       the commands to  the ISP except during initialize_adapter().
--      -Added the marker support for 64bit_start_scsi.
--      -Initialized the different queues.
--                PENDING QUEUE:-Initialized in lun_alloc()
--                RETRY   QUEUE:- ""         in detect()
--                DONE    QUEUE :- ""        in detect()
--                ACTIVE    QUEUE :
--                FAILOVER QUEUE  : ""       in detect()
--                FREE     QUEUE:- Initialised in allocate_sp_pool()
--      -Got rid of udelay in mem_alloc() routine.
--      -Got rid of support for lk<2.4 in mem_alloc() and mem_free() routines.
--      -Allocating sp during initialisation instead of on the fly.
--      -Added the timer for each command.
--
--        -Modified the different queues to use kernel list macro for
--         queue management.Using one lock ie "list_lock" to protect 
--         different queues.
--        -Added qla2x00_free_sp_pool() routine to release the sp_pool memory
--         when we unload the driver. 
--        - Modified the qla2x00_next() prototype to pass vis_ha except in done.
--      -Introduced Port state:DEAD,LOST and ONLINE .
--      -Fixed the QLA2X00_FAILURE macro.
--      -Fixed the abort routine-retry queue or failoever queue will be on the 
--         real HBA.
--      -Added the ql2xlogintimeout stuff-Instead of 4sec,firmware will be using
--         20 secs initially(2*ratov value) to login into the switch for ED1032.
--      -Added the retry logic to login into the switch.
--      -Added the code to kick off port_down_retry timer when we get 28-29 
--       compl status but the firmware is not quick enough to report
--         that the device is missing.
--      -Now using macros to fix the wraparound situation for jiffies.
--      -Fixed the qla2x00_abort_queue().Instead of calling callback directly,
--         all the requests after being deleted from the lun_queue will be put 
--       in the done_queue().
--      -Fixed port logic in dpc to restore loop id in the fcport structure.
--      -Changed fcport->state to atomic.
--      -Changed the status_entry rotuine to check for completion first and then
--         scsi status.
--      - Change state of "sp" to ACTIVE STATE when we issue it to RISC.
--
--******************************************************************************/
--
--
--
--
--
--
-diff -uprN linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/SUPPORTED_KERNEL_VERSION.txt linux-2.4.21-x86_64/drivers/scsi/qla2xxx/SUPPORTED_KERNEL_VERSION.txt
---- linux-2.4.21-x86_64.orig/drivers/scsi/qla2xxx/SUPPORTED_KERNEL_VERSION.txt 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.4.21-x86_64/drivers/scsi/qla2xxx/SUPPORTED_KERNEL_VERSION.txt      2004-04-22 19:42:21.000000000 -0700
-@@ -0,0 +1,23 @@
-+                        QLogic Fibre Channel Driver
-+        for Red Hat Linux 8.0, 9.0, Advanced Server 2.1, and RHEL 3
-+                             and SLES 8
-+
-+
-+The following distributions and versions of Linux kernels have been tested 
-+with this release driver:
-+
-+IA-32:
-+------
-+      - Red Hat Linux 8.0 (kernel 2.4.20-18.8)
-+      - Red Hat Linux 9.0 (kernel 2.4.20-18.9)
-+      - Red Hat Linux Advanced Server 2.1 (kernel 2.4.9.e-8)
-+      - Red Hat Enterprise Linux 3
-+      - SuSE Linux Enterprise Server 8 (kernel 2.4.19-64GB)
-+      
-+IA-64 (For Itanium 2 processor)
-+-----
-+      - Red Hat Linux Advanced Server 2.1 (kernel 2.4.9.e-8)
-+      - SuSE Linux Enterprise Server 8 (kernel 2.4.19-64GB)
-+      
-+
-+Earlier or later versions of Linux kernels may be supported.
diff --git a/lustre/kernel_patches/patches/resched-2.4.19-pre1.patch b/lustre/kernel_patches/patches/resched-2.4.19-pre1.patch
deleted file mode 100644 (file)
index 567e1e8..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-Index: linux-2.4.19-pre1/include/linux/sched.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/sched.h       2003-11-21 04:05:05.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/sched.h    2003-11-21 04:10:29.000000000 +0300
-@@ -927,6 +927,11 @@
-       return res;
- }
-+static inline int need_resched(void)
-+{
-+              return (unlikely(current->need_resched));
-+}
-+
- #endif /* __KERNEL__ */
- #endif
diff --git a/lustre/kernel_patches/patches/sd_iostats-2.4.21-chaos.patch b/lustre/kernel_patches/patches/sd_iostats-2.4.21-chaos.patch
new file mode 100644 (file)
index 0000000..c8d2598
--- /dev/null
@@ -0,0 +1,442 @@
+Index: linux/Documentation/Configure.help
+===================================================================
+RCS file: /home/cvs/master/68chaos_eebperf/Documentation/Configure.help,v
+retrieving revision 1.1.1.1
+diff -u -p -r1.1.1.1 Configure.help
+--- linux/Documentation/Configure.help 20 Aug 2004 18:09:23 -0000      1.1.1.1
++++ linux/Documentation/Configure.help 26 Aug 2004 12:34:40 -0000
+@@ -7679,6 +7679,11 @@ CONFIG_SCSI_LOGGING
+   there should be no noticeable performance impact as long as you have
+   logging turned off.
++SCSI disk I/O stats
++CONFIG_SD_IOSTATS
++  This enables SCSI disk I/O stats collection.  You must also enable
++  /proc file system support if you want this feature.
++
+ QDIO base support for IBM S/390 and zSeries
+ CONFIG_QDIO
+   This driver provides the Queued Direct I/O base support for the
+Index: linux/drivers/scsi/Config.in
+===================================================================
+RCS file: /home/cvs/master/68chaos_eebperf/drivers/scsi/Config.in,v
+retrieving revision 1.1.1.1
+diff -u -p -r1.1.1.1 Config.in
+--- linux/drivers/scsi/Config.in       20 Aug 2004 18:10:13 -0000      1.1.1.1
++++ linux/drivers/scsi/Config.in       24 Aug 2004 14:30:08 -0000
+@@ -4,6 +4,7 @@ dep_tristate '  SCSI disk support' CONFI
+ if [ "$CONFIG_BLK_DEV_SD" != "n" ]; then
+    int  'Maximum number of SCSI disks that can be loaded as modules' CONFIG_SD_EXTRA_DEVS 40
++   bool 'SCSI disk I/O stats' CONFIG_SD_IOSTATS
+ fi
+ dep_tristate '  SCSI tape support' CONFIG_CHR_DEV_ST $CONFIG_SCSI
+Index: linux/drivers/scsi/sd.c
+===================================================================
+RCS file: /home/cvs/master/68chaos_eebperf/drivers/scsi/sd.c,v
+retrieving revision 1.1.1.1
+diff -u -p -r1.1.1.1 sd.c
+--- linux/drivers/scsi/sd.c    20 Aug 2004 18:10:16 -0000      1.1.1.1
++++ linux/drivers/scsi/sd.c    26 Aug 2004 13:34:39 -0000
+@@ -65,6 +65,40 @@
+  *  static const char RCSid[] = "$Header:";
+  */
++#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
++#include <linux/proc_fs.h>
++#include <linux/seq_file.h>
++
++typedef struct
++{
++        unsigned long long      iostat_size;
++        unsigned long long      iostat_count;
++} iostat_counter_t;
++
++#define IOSTAT_NCOUNTERS 16
++typedef struct 
++{
++        iostat_counter_t        iostat_read_histogram[IOSTAT_NCOUNTERS];
++        iostat_counter_t        iostat_write_histogram[IOSTAT_NCOUNTERS];
++      struct timeval          iostat_timeval;
++} iostat_stats_t;
++        
++iostat_stats_t       **sd_iostats;
++spinlock_t             sd_iostats_lock;
++struct proc_dir_entry *sd_iostats_procdir;
++char                   sd_iostats_procdir_name[] = "sd_iostats";
++
++extern void sd_iostats_init(void);
++extern void sd_iostats_init_disk(int disk);
++extern void sd_iostats_fini(void);
++extern void sd_iostats_bump(int disk, unsigned int nsect, int iswrite);
++#else
++static inline void sd_iostats_init(void) {}
++static inline void sd_iostats_init_disk(int disk) {}
++static inline void sd_iostats_fini(void) {}
++static inline void sd_iostats_bump(kdev_t dev, unsigned int nsect, int iswrite) {}
++#endif
++
+ /* device number --> sd_gendisks index */
+ #define SD_MAJOR_IDX(i)               ( ((MAJOR(i) & 0x80) >> 4) + (MAJOR(i) & 7) )
+ /* sd_gendisks index --> system major */
+@@ -351,6 +385,8 @@ static int sd_init_command(Scsi_Cmnd * S
+       SCSI_LOG_HLQUEUE(2, printk("%s : real dev = /dev/%d, block = %d\n",
+                                  nbuff, dev, block));
++      sd_iostats_bump(dev, this_count, SCpnt->request.cmd == WRITE);
++
+       /*
+        * If we have a 1K hardware sectorsize, prevent access to single
+        * 512 byte sectors.  In theory we could handle this - in fact
+@@ -545,7 +581,7 @@ static int sd_open(struct inode *inode, 
+                       if (scsi_block_when_processing_errors(SDev))
+                               scsi_ioctl(SDev, SCSI_IOCTL_DOORLOCK, NULL);
+-      
++      sd_iostats_init_disk(target);
+       return 0;
+ error_out:
+@@ -1179,6 +1215,8 @@ static int sd_init()
+       memset(sd_varyio, 0, (sd_template.dev_max << 4)); 
++      sd_iostats_init();
++
+       for (i = 0; i < sd_template.dev_max << 4; i++) {
+               sd_blocksizes[i] = 1024;
+               sd_hardsizes[i] = 512;
+@@ -1243,6 +1281,7 @@ cleanup_gendisks_de_arr:
+       kfree(sd_gendisks);
+       sd_gendisks = NULL;
+ cleanup_sd_gendisks:
++      sd_iostats_fini();
+       kfree(sd_varyio);
+ cleanup_varyio:
+       kfree(sd_max_sectors);
+@@ -1466,6 +1505,316 @@ static void sd_detach(Scsi_Device * SDp)
+       return;
+ }
++#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
++static int
++sd_iostats_seq_show(struct seq_file *seq, void *v)
++{
++        struct timeval     now;
++        unsigned long      index = (unsigned long)(seq->private);
++      iostat_stats_t    *stats;
++        unsigned long long read_len;
++        unsigned long long read_len_tot;
++      unsigned long      read_num;
++      unsigned long      read_num_tot;
++        unsigned long long write_len;
++        unsigned long long write_len_tot;
++      unsigned long      write_num;
++      unsigned long      write_num_tot;
++        int                i;
++      int                maxi;
++
++      if (sd_iostats == NULL) {
++              printk(KERN_ERR "sd_iostats_seq_show: NULL stats array\n");
++              BUG();
++      }
++
++      stats = sd_iostats[index];
++      if (stats == NULL) {
++              printk(KERN_ERR "sd_iostats_seq_show: NULL stats entry\n");
++              BUG();
++      }
++
++        do_gettimeofday(&now);
++      now.tv_sec -= stats->iostat_timeval.tv_sec;
++      now.tv_usec -= stats->iostat_timeval.tv_usec;
++      if (now.tv_usec < 0) {
++              now.tv_usec += 1000000;
++              now.tv_sec--;
++      }
++
++        /* this sampling races with updates */
++        seq_printf(seq, "index:        %lu   snapshot_time:         %lu.%06lu\n",
++                   index, now.tv_sec, now.tv_usec);
++
++      for (i = IOSTAT_NCOUNTERS - 1; i > 0; i--)
++              if (stats->iostat_read_histogram[i].iostat_count != 0 ||
++                  stats->iostat_write_histogram[i].iostat_count != 0)
++                      break;
++      maxi = i;
++
++      seq_printf(seq, "%8s %8s %12s %8s %12s\n", "size", 
++                 "reads", "total", "writes", "total");
++
++      read_len_tot = write_len_tot = 0;
++      read_num_tot = write_num_tot = 0;
++      for (i = 0; i <= maxi; i++) {
++              read_len = stats->iostat_read_histogram[i].iostat_size;
++              read_len_tot += read_len;
++              read_num = stats->iostat_read_histogram[i].iostat_count;
++              read_num_tot += read_num;
++
++              write_len = stats->iostat_write_histogram[i].iostat_size;
++              write_len_tot += write_len;
++              write_num = stats->iostat_write_histogram[i].iostat_count;
++              write_num_tot += write_num;
++
++              seq_printf (seq, "%8d %8lu %12llu %8lu %12llu\n", 
++                          512<<i, read_num, read_len, write_num, write_len);
++      }
++      
++      seq_printf(seq, "%8s %8lu %12llu %8lu %12llu\n", "total",
++                 read_num_tot, read_len_tot, 
++                 write_num_tot, write_len_tot);
++        return 0;
++}
++
++static void *
++sd_iostats_seq_start(struct seq_file *p, loff_t *pos)
++{
++        return (*pos == 0) ? (void *)1 : NULL;
++}
++
++static void *
++sd_iostats_seq_next(struct seq_file *p, void *v, loff_t *pos)
++{
++        ++*pos;
++        return NULL;
++}
++
++static void
++sd_iostats_seq_stop(struct seq_file *p, void *v)
++{
++}
++
++static struct seq_operations sd_iostats_seqops = {
++        .start = sd_iostats_seq_start,
++        .stop  = sd_iostats_seq_stop,
++        .next  = sd_iostats_seq_next,
++        .show  = sd_iostats_seq_show,
++};
++
++static int
++sd_iostats_seq_open (struct inode *inode, struct file *file)
++{
++      struct proc_dir_entry *dp = PDE(inode);
++      struct seq_file       *seq;
++      int                    rc;
++
++      rc = seq_open(file, &sd_iostats_seqops);
++      if (rc != 0)
++              return rc;
++
++      ((struct seq_file *)file->private_data)->private = PDE(inode)->data;
++      return 0;
++}
++
++static int
++sd_iostats_seq_write(struct file *file, const char *buffer,
++                   size_t len, loff_t *off)
++{
++      struct seq_file   *seq = file->private_data;
++      unsigned long      index = (unsigned long)seq->private;
++      iostat_stats_t    *stats = sd_iostats[index];
++      unsigned long      flags;
++      
++      
++      spin_lock_irqsave (&sd_iostats_lock, flags);
++      memset (stats, 0, sizeof(*stats));
++      do_gettimeofday(&stats->iostat_timeval);
++      spin_unlock_irqrestore (&sd_iostats_lock, flags);
++
++      return len;
++}
++
++static struct file_operations sd_iostats_proc_fops = {
++        .owner   = THIS_MODULE,
++        .open    = sd_iostats_seq_open,
++        .read    = seq_read,
++        .write   = sd_iostats_seq_write,
++        .llseek  = seq_lseek,
++        .release = seq_release,
++};
++
++void
++sd_iostats_init(void)
++{
++      int    maxdevs = sd_template.dev_max;
++      int    i;
++
++      spin_lock_init(&sd_iostats_lock);
++
++      sd_iostats = kmalloc(maxdevs * sizeof(iostat_stats_t *), GFP_KERNEL);
++      if (sd_iostats == NULL) {
++              printk(KERN_WARNING "Can't keep sd iostats: "
++                     "ENOMEM allocating stats array size %d\n",
++                     sd_template.dev_max * sizeof(iostat_stats_t *));
++              return;
++      }
++
++      for (i = 0; i < maxdevs; i++)
++              sd_iostats[i] = NULL;
++
++      if (proc_scsi == NULL) {
++              printk(KERN_WARNING "No access to sd iostats: "
++                     "proc_scsi is NULL\n");
++              return;
++      }
++
++      sd_iostats_procdir = create_proc_entry(sd_iostats_procdir_name,
++                                             S_IFDIR | S_IRUGO | S_IXUGO,
++                                             proc_scsi);
++      if (sd_iostats_procdir == NULL) {
++              printk(KERN_WARNING "No access to sd iostats: "
++                     "can't create /proc/scsi/%s\n", sd_iostats_procdir_name);
++              return;
++      }
++}
++
++void
++sd_iostats_init_disk(int disk)
++{
++      char                   name[6];
++      struct proc_dir_entry *pde;
++      int                    i;
++      unsigned long          flags;
++      iostat_stats_t        *stats;
++      int                    maxdevs = sd_template.dev_max;
++
++      if (sd_iostats == NULL ||
++          sd_iostats_procdir == NULL)
++              return;
++
++      if (disk > sd_template.dev_max) {
++              printk(KERN_ERR "sd_iostats_init_disk: "
++                     "unexpected disk index %d(%d)\n",
++                     disk, sd_template.dev_max);
++              BUG();
++      }
++
++      if (sd_iostats[disk] != NULL)
++              return;
++
++      sd_devname(disk, name);
++      stats = kmalloc(sizeof(*stats), GFP_KERNEL);
++      if (stats == NULL) {
++              printk(KERN_WARNING "Can't keep %s iostats: "
++                     "ENOMEM allocating stats size %d\n", 
++                     name, sizeof(*stats));
++              return;
++      }
++
++      memset (stats, 0, sizeof(*stats));
++      do_gettimeofday(&stats->iostat_timeval);
++
++      spin_lock_irqsave(&sd_iostats_lock, flags);
++
++      if (sd_iostats[disk] != NULL) {
++              spin_unlock_irqrestore(&sd_iostats_lock, flags);
++              kfree (stats);
++              return;
++      }
++
++      sd_iostats[disk] = stats;
++      
++      spin_unlock_irqrestore(&sd_iostats_lock, flags);
++      
++      pde = create_proc_entry(name, S_IRUGO | S_IWUSR, 
++                              sd_iostats_procdir);
++      if (pde == NULL) {
++              printk(KERN_WARNING "Can't create /proc/scsi/%s/%s\n",
++                     sd_iostats_procdir_name, name);
++      } else {
++              pde->proc_fops = &sd_iostats_proc_fops;
++              pde->data = (void *)((long)disk);
++      }
++}
++
++void
++sd_iostats_fini(void)
++{
++      char name[6];
++      int  i;
++      int  maxdevs = sd_template.dev_max;
++      
++      if (sd_iostats_procdir != NULL) {
++              for (i = 0; i < maxdevs; i++) {
++                      sd_devname(i, name);
++                      remove_proc_entry(name, sd_iostats_procdir);
++              }
++
++              if (proc_scsi == NULL) {
++                      printk(KERN_ERR "sd_iostats_fini: proc_scsi NULL\n");
++                      BUG();
++              }
++              remove_proc_entry(sd_iostats_procdir_name,
++                                proc_scsi);
++
++              sd_iostats_procdir = NULL;
++      }
++      
++      if (sd_iostats != NULL) {
++              for (i = 0; i < maxdevs; i++) {
++                      if (sd_iostats[i] != NULL)
++                              kfree (sd_iostats[i]);
++              }
++              
++              kfree(sd_iostats);
++              sd_iostats = NULL;
++      }
++}
++
++void
++sd_iostats_bump(int disk, unsigned int nsect, int iswrite)
++{
++      iostat_stats_t    *stats;
++      iostat_counter_t  *counter;
++      int                bucket;
++      int                tmp;
++      unsigned long      irqflags;
++
++      if (sd_iostats == NULL)
++              return;
++
++      if (disk < 0 || disk >= sd_template.dev_max) {
++              printk(KERN_ERR "sd_iostats_bump: unexpected disk index %d([0-%d])\n",
++                     disk, sd_template.dev_max);
++              BUG();
++      }
++
++      for (bucket = 0, tmp = nsect; tmp > 1; bucket++)
++              tmp /= 2;
++
++      if (bucket >= IOSTAT_NCOUNTERS) {
++              printk (KERN_ERR "sd_iostats_bump: nsect %d too big\n", nsect);
++              BUG();
++      }
++
++      spin_lock_irqsave(&sd_iostats_lock, irqflags);
++      
++      stats = sd_iostats[disk];
++      if (stats != NULL) {
++              counter = iswrite ? 
++                        &stats->iostat_write_histogram[bucket] :
++                        &stats->iostat_read_histogram[bucket];
++
++              counter->iostat_size += nsect;
++              counter->iostat_count++;
++      }
++
++      spin_unlock_irqrestore(&sd_iostats_lock, irqflags);
++}
++#endif
++
+ static int __init init_sd(void)
+ {
+       sd_template.module = THIS_MODULE;
+@@ -1488,6 +1837,7 @@ static void __exit exit_sd(void)
+               kfree(sd_blocksizes);
+               kfree(sd_hardsizes);
+               kfree(sd_varyio);
++              sd_iostats_fini();
+               for (i = 0; i < N_USED_SD_MAJORS; i++) {
+                       kfree(sd_gendisks[i].de_arr);
+                       kfree(sd_gendisks[i].flags);
diff --git a/lustre/kernel_patches/patches/seq-private-2.4.19-pre1.patch b/lustre/kernel_patches/patches/seq-private-2.4.19-pre1.patch
deleted file mode 100644 (file)
index 241bf36..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: linux-2.4.19-pre1/include/linux/seq_file.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/seq_file.h    2001-11-11 22:23:14.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/seq_file.h 2003-11-21 03:09:39.000000000 +0300
-@@ -12,6 +12,7 @@
-       loff_t index;
-       struct semaphore sem;
-       struct seq_operations *op;
-+      void *private;
- };
- struct seq_operations {
diff --git a/lustre/kernel_patches/patches/slab-use-after-free-debug-2.4.22.patch b/lustre/kernel_patches/patches/slab-use-after-free-debug-2.4.22.patch
deleted file mode 100644 (file)
index ab5afe8..0000000
+++ /dev/null
@@ -1,717 +0,0 @@
-%patch
-Index: linux-2.4.22-vanilla/mm/slab.c
-===================================================================
---- linux-2.4.22-vanilla.orig/mm/slab.c        2003-11-17 15:42:13.000000000 +0300
-+++ linux-2.4.22-vanilla/mm/slab.c     2003-11-18 01:15:35.000000000 +0300
-@@ -97,6 +97,8 @@
- #define       FORCED_DEBUG    0
- #endif
-+#include      <linux/vmalloc.h>
-+
- /*
-  * Parameters for kmem_cache_reap
-  */
-@@ -825,6 +827,12 @@
-       return cachep;
- }
-+#ifdef CONFIG_DEBUG_UAF
-+void * uaf_alloc(kmem_cache_t *, int gfp_mask);
-+int uaf_cache_free(kmem_cache_t *, void *addr);
-+int uaf_free(void *addr);
-+struct page *uaf_vaddr_to_page(void *obj);
-+#endif
- #if DEBUG
- /*
-@@ -1340,6 +1348,20 @@
-       unsigned long save_flags;
-       void* objp;
-+#ifdef CONFIG_DEBUG_UAF
-+      /* try to use uaf-allocator first */
-+      objp = uaf_alloc(cachep, flags);
-+      if (objp) {
-+              if (cachep->ctor) {
-+                      unsigned long ctor_flags;
-+                      ctor_flags = SLAB_CTOR_CONSTRUCTOR;
-+                      if (!(flags & __GFP_WAIT))
-+                              ctor_flags |= SLAB_CTOR_ATOMIC;
-+                      cachep->ctor(objp, cachep, ctor_flags);
-+              }
-+              return objp;
-+      }
-+#endif
-       kmem_cache_alloc_head(cachep, flags);
- try_again:
-       local_irq_save(save_flags);
-@@ -1576,6 +1598,10 @@
- void kmem_cache_free (kmem_cache_t *cachep, void *objp)
- {
-       unsigned long flags;
-+#ifdef CONFIG_DEBUG_UAF
-+      if (uaf_cache_free(cachep, objp))
-+              return;
-+#endif
- #if DEBUG
-       CHECK_PAGE(virt_to_page(objp));
-       if (cachep != GET_PAGE_CACHE(virt_to_page(objp)))
-@@ -1601,6 +1627,10 @@
-       if (!objp)
-               return;
-+#ifdef CONFIG_DEBUG_UAF
-+      if (uaf_free((void *) objp))
-+              return;
-+#endif
-       local_irq_save(flags);
-       CHECK_PAGE(virt_to_page(objp));
-       c = GET_PAGE_CACHE(virt_to_page(objp));
-@@ -2075,3 +2105,460 @@
- #endif
- }
- #endif
-+
-+
-+
-+#ifdef CONFIG_DEBUG_UAF
-+
-+#define MAX_UAF_OBJ_SIZE      8       /* in pages */
-+#define UAF_ASSERT(xxx)               if (!(xxx)) BUG();
-+#define UAF_DEBUG__
-+#ifdef UAF_DEBUG
-+#define uaf_printk(fmt,a...)  printk(fmt, ##a)
-+#else
-+#define uaf_printk(a,...)     
-+#endif
-+
-+struct uaf_stats {
-+      atomic_t uaf_allocated;
-+      atomic_t uaf_allocations;
-+      atomic_t uaf_failed;
-+};
-+
-+static int uaf_max = 32768;
-+static void *uaf_bitmap = NULL;
-+static spinlock_t uaf_lock;
-+static int uaf_last_found = 0;
-+static int uaf_used = 0;
-+static struct vm_struct *uaf_area = NULL;
-+static struct uaf_stats uaf_stats[MAX_UAF_OBJ_SIZE + 1];
-+
-+static int __init uaf_setup(char *str)
-+{
-+        uaf_max = simple_strtoul(str, NULL, 0);
-+        return 1;
-+}
-+
-+__setup("uaf=", uaf_setup);
-+
-+
-+void uaf_init(void)
-+{
-+      int size;
-+
-+      printk("UAF: total vmalloc-space - %lu\n",
-+                      VMALLOC_END - VMALLOC_START);
-+
-+      uaf_area = get_vm_area(PAGE_SIZE * uaf_max, VM_ALLOC);
-+      if (!uaf_area) {
-+              printk(KERN_ALERT "UAF: can't reserve %lu bytes in KVA\n",
-+                              PAGE_SIZE * uaf_max);
-+              return;
-+      }
-+      
-+      printk("UAF: reserved %lu bytes in KVA at 0x%p\n",
-+                      PAGE_SIZE * uaf_max, uaf_area->addr);
-+
-+      /* how many bytes we need to track space usage? */
-+      size = uaf_max / 8 + 8;
-+
-+      uaf_bitmap = vmalloc(size);
-+      if (!uaf_bitmap) {
-+              printk(KERN_ALERT
-+                      "UAF: can't allocate %d bytes for bitmap\n", size);
-+              return;
-+      }
-+      memset(uaf_bitmap, 0, size);
-+      spin_lock_init(&uaf_lock);
-+      memset(uaf_stats, 0, sizeof(uaf_stats));
-+
-+      printk("UAF: allocated %d for bitmap\n", size);
-+}
-+
-+static int uaf_find(int len)
-+{
-+      int new_last_found = -1;
-+      int loop = 0;
-+      int i, j;
-+
-+      j = uaf_last_found;
-+
-+      do {
-+              i = find_next_zero_bit(uaf_bitmap, uaf_max, j);
-+              if (i >= uaf_max) {
-+                      /* repeat from 0 */
-+                      if (++loop > 1) {
-+                              /* this is 2nd loop and it's useless */
-+                              return -1;
-+                      }
-+
-+                      i = find_next_zero_bit(uaf_bitmap, uaf_max, 0);
-+                      if (i >= uaf_max)
-+                              return -1;
-+
-+                      /* save found num for subsequent searches */
-+                      if (new_last_found == -1)
-+                              new_last_found = uaf_last_found = i;
-+                      UAF_ASSERT(new_last_found < uaf_max);
-+              }
-+
-+              /*
-+               * OK. found first zero bit.
-+               * now, try to find requested cont. zero-space
-+               */
-+
-+              /* FIXME: implmement multipage allocation! */
-+              break;
-+
-+              /*
-+              j = find_next_bit(uaf_bitmap, uaf_max, i);
-+              if (++loop2 > 10000) {
-+                      printk("ALERT: loop2=%d\n", loop2);
-+                      return -1;
-+              }
-+              */
-+      } while (j - i < len);
-+
-+      /* found! */
-+      if (new_last_found == -1)
-+              uaf_last_found = i + 1;
-+      if (uaf_last_found >= uaf_max)
-+              uaf_last_found = 0;
-+      return i;
-+}
-+
-+extern int __vmalloc_area_pages (unsigned long address, unsigned long size,
-+                                      int gfp_mask, pgprot_t prot,
-+                                      struct page ***pages);
-+void * uaf_alloc(kmem_cache_t *cachep, int gfp_mask)
-+{
-+      struct page *ptrs[MAX_UAF_OBJ_SIZE];
-+      int size = cachep->objsize;
-+      struct page **pages;
-+      unsigned long flags;
-+      unsigned long addr;
-+      int i, j, err = -2000;
-+
-+      if (uaf_bitmap == NULL)
-+              return NULL;
-+
-+      if (!(cachep->flags & SLAB_USE_UAF))
-+              return NULL;
-+
-+      pages = (struct page **) ptrs;
-+      size = (size + (PAGE_SIZE - 1)) / PAGE_SIZE;
-+      /* FIXME: implement multipage allocation! */
-+      if (size > 1)
-+              return NULL;
-+      if (size > MAX_UAF_OBJ_SIZE) {
-+              printk(KERN_ALERT "size is too big: %d\n", size);
-+              return NULL;
-+      }
-+
-+      if (uaf_used == uaf_max) {
-+              uaf_printk("UAF: space exhausted!\n");
-+              atomic_inc(&uaf_stats[size].uaf_failed);
-+              return NULL;
-+      }
-+
-+
-+      spin_lock_irqsave(&uaf_lock, flags);
-+      i = uaf_find(size);
-+      if (i < 0) {
-+              spin_unlock_irqrestore(&uaf_lock, flags);
-+              atomic_inc(&uaf_stats[size].uaf_failed);
-+              return NULL;
-+      }
-+      for (j = 0; j < size; j++) {
-+              UAF_ASSERT(!test_bit(i + j, uaf_bitmap));
-+              set_bit(i + j, uaf_bitmap);
-+              uaf_used++;
-+      }
-+      spin_unlock_irqrestore(&uaf_lock, flags);
-+
-+      addr = ((unsigned long) uaf_area->addr) + (PAGE_SIZE * i);
-+      uaf_printk("UAF: found %d/%d, base 0x%p, map at 0x%lx: ", i,
-+                      size, uaf_area->addr, addr);
-+
-+      /* OK. we've found free space, let's allocate pages */
-+      memset(pages, 0, sizeof(struct page *) * MAX_UAF_OBJ_SIZE);
-+      for (j = 0; j < size; j++) {
-+              pages[j] = alloc_page(gfp_mask);
-+              if (pages[j] == NULL)
-+                      goto nomem;
-+              uaf_printk("0x%p ", pages[j]);
-+      }
-+
-+      /* time to map just allocated pages */
-+      err = __vmalloc_area_pages(addr, PAGE_SIZE * size, gfp_mask,
-+                                      PAGE_KERNEL, &pages);
-+      pages = (struct page **) ptrs;
-+      if (err == 0) {
-+              /* put slab cache pointer in first page */
-+              ptrs[0]->list.next = (void *) cachep;
-+              uaf_printk(" -> 0x%lx\n", addr);
-+              atomic_inc(&uaf_stats[size].uaf_allocated);
-+              atomic_inc(&uaf_stats[size].uaf_allocations);
-+              if (!in_interrupt() && !in_softirq())
-+                      flush_tlb_all();
-+              else
-+                      local_flush_tlb();
-+              //printk("UAF: found %d/%d, base 0x%p, map at 0x%lx\n",
-+              //              i, cachep->objsize, uaf_area->addr, addr);
-+              return (void *) addr;
-+      }
-+
-+nomem:
-+      printk(KERN_ALERT "can't map pages: %d\n", err);
-+      for (j = 0; j < size; j++)
-+              if (pages[j])
-+                      __free_page(pages[j]);
-+
-+      /* can't find free pages */
-+      spin_lock_irqsave(&uaf_lock, flags);
-+      for (j = 0; j < size; j++) {
-+              clear_bit(i + j, uaf_bitmap);
-+              uaf_used--;
-+      }
-+      spin_unlock_irqrestore(&uaf_lock, flags);
-+      atomic_inc(&uaf_stats[size].uaf_failed);
-+
-+      return NULL;
-+}
-+
-+extern void free_area_pmd(pgd_t *dir, unsigned long address,
-+                                unsigned long size);
-+static void uaf_unmap(unsigned long address, unsigned long size)
-+{
-+      unsigned long end = (address + size);
-+      pgd_t *dir;
-+
-+      dir = pgd_offset_k(address);
-+      flush_cache_all();
-+      do {
-+              free_area_pmd(dir, address, end - address);
-+              address = (address + PGDIR_SIZE) & PGDIR_MASK;
-+              dir++;
-+      } while (address && (address < end));
-+
-+      /*
-+       * we must not call smp_call_function() with interrtups disabled
-+       * otherwise we can get into deadlock
-+       */
-+      if (!in_interrupt() && !in_softirq())
-+              flush_tlb_all();
-+      else
-+              local_flush_tlb();
-+}
-+
-+/*
-+ * returns 1 if free was successfull
-+ */
-+int uaf_cache_free(kmem_cache_t *cachep, void *addr)
-+{
-+      struct page *pages[MAX_UAF_OBJ_SIZE];
-+      int size = cachep->objsize;
-+      unsigned long flags;
-+      int i, j;
-+
-+      uaf_printk("UAF: to free 0x%p/%d\n", addr, size);
-+
-+      size = (size + (PAGE_SIZE - 1)) / PAGE_SIZE;
-+      if (size > MAX_UAF_OBJ_SIZE)
-+              return 0;
-+
-+      if (uaf_bitmap == NULL)
-+              return 0;
-+
-+      /* first, check is address is in UAF space */
-+      if ((unsigned) addr < (unsigned) uaf_area->addr ||
-+              (unsigned) addr >= (unsigned) uaf_area->addr + uaf_area->size)
-+              return 0;
-+
-+      UAF_ASSERT(((unsigned long) addr & ~PAGE_MASK) == 0UL);
-+      
-+      /* calculate placement in bitmap */
-+      i = (unsigned) addr - (unsigned) uaf_area->addr;
-+      UAF_ASSERT(i >= 0);
-+      i = i / PAGE_SIZE;
-+
-+      /* collect all the pages */
-+      uaf_printk("free/unmap %d pages: ", size);
-+      /* NOTE: we need not page_table_lock here. bits in bitmap
-+       * protect those pte's from to be reused */
-+      for (j = 0; j < size; j++) {
-+              unsigned long address;
-+              address = ((unsigned long) addr) + (PAGE_SIZE * j);
-+              pages[j] = vmalloc_to_page((void *) address);
-+              uaf_printk("0x%lx->0x%p ", address, pages[j]);
-+      }
-+      uaf_printk("\n");
-+
-+      uaf_unmap((unsigned long) addr, PAGE_SIZE * size);
-+      /* free all the pages */
-+      for (j = 0; j < size; j++)
-+              __free_page(pages[j]);
-+
-+      spin_lock_irqsave(&uaf_lock, flags);
-+      for (j = 0; j < size; j++) {
-+              /* now check is correspondend bit set */
-+              UAF_ASSERT(i+j >= 0 && i+j < uaf_max);
-+              UAF_ASSERT(test_bit(i+j, uaf_bitmap));
-+              
-+              /* now free space in UAF */
-+              clear_bit(i+j, uaf_bitmap);
-+              uaf_used--;
-+      }
-+      spin_unlock_irqrestore(&uaf_lock, flags);
-+
-+      atomic_dec(&uaf_stats[size].uaf_allocated);
-+      
-+      uaf_printk("UAF: freed %d/%d at 0x%p\n", i, size, addr);
-+      //printk("UAF: freed %d/%d at 0x%p\n", i, size, addr);
-+
-+      return 1;
-+}
-+
-+struct page *uaf_vaddr_to_page(void *obj)
-+{
-+      if (uaf_bitmap == NULL)
-+              return NULL;
-+
-+      /* first, check is address is in UAF space */
-+      if ((unsigned) obj < (unsigned) uaf_area->addr ||
-+              (unsigned) obj >= (unsigned) uaf_area->addr + uaf_area->size)
-+              return NULL;
-+      
-+      return vmalloc_to_page(obj);
-+}
-+
-+int uaf_free(void *obj)
-+{
-+      struct page *page = uaf_vaddr_to_page((void *) obj);
-+      kmem_cache_t *c;
-+
-+      if (!page)
-+              return 0;
-+
-+      c = GET_PAGE_CACHE(page);
-+      return uaf_cache_free(c, (void *) obj);
-+}
-+
-+int uaf_is_allocated(void *obj)
-+{
-+      unsigned long addr = (unsigned long) obj;
-+      int i;
-+
-+      if (uaf_bitmap == NULL)
-+              return 0;
-+
-+      addr &= PAGE_MASK;
-+      /* first, check is address is in UAF space */
-+      if (addr < (unsigned long) uaf_area->addr ||
-+                      addr >= (unsigned long) uaf_area->addr + uaf_area->size)
-+              return 0;
-+
-+      /* calculate placement in bitmap */
-+      i = (unsigned) addr - (unsigned) uaf_area->addr;
-+      i = i / PAGE_SIZE;
-+      return test_bit(i, uaf_bitmap);
-+}
-+
-+static void *uaf_s_start(struct seq_file *m, loff_t *pos)
-+{
-+      loff_t n = *pos;
-+
-+      if (!n)
-+              seq_printf(m, "size(pgs) allocated failed allocations. "
-+                              "%d reserved, %d in use, %d last\n",
-+                              uaf_max, uaf_used, uaf_last_found);
-+      else if (n > MAX_UAF_OBJ_SIZE)
-+              return NULL;
-+
-+      *pos = 1;
-+      return (void *) 1;
-+}
-+
-+static void *uaf_s_next(struct seq_file *m, void *p, loff_t *pos)
-+{
-+      unsigned long n = *pos;
-+      ++*pos;
-+      if (n + 1 > MAX_UAF_OBJ_SIZE)
-+              return NULL;
-+      return (void *) (n + 1);
-+}
-+
-+static void uaf_s_stop(struct seq_file *m, void *p)
-+{
-+}
-+
-+static int uaf_s_show(struct seq_file *m, void *p)
-+{
-+      int n = (int) p;
-+
-+      if (n > MAX_UAF_OBJ_SIZE)
-+              return 0;
-+      seq_printf(m, "%d  %d  %d %d\n", n, 
-+                      atomic_read(&uaf_stats[n].uaf_allocated),
-+                      atomic_read(&uaf_stats[n].uaf_failed),
-+                      atomic_read(&uaf_stats[n].uaf_allocations));
-+      return 0;
-+}
-+
-+struct seq_operations uafinfo_op = {
-+      .start  = uaf_s_start,
-+      .next   = uaf_s_next,
-+      .stop   = uaf_s_stop,
-+      .show   = uaf_s_show,
-+};
-+
-+ssize_t uafinfo_write(struct file *file, const char *buffer,
-+                              size_t count, loff_t *ppos)
-+{
-+      char kbuf[MAX_SLABINFO_WRITE+1], *tmp;
-+      char *key, *name;
-+      int res;
-+      struct list_head *p;
-+      
-+      if (count > MAX_SLABINFO_WRITE)
-+              return -EINVAL;
-+      if (copy_from_user(&kbuf, buffer, count))
-+              return -EFAULT;
-+      kbuf[MAX_SLABINFO_WRITE] = '\0'; 
-+
-+      tmp = kbuf;
-+      key = strsep(&tmp, " \t\n");
-+      if (!key)
-+              return -EINVAL;
-+      if (!strcmp(key, "on"))
-+              res = 1;
-+      else if (!strcmp(key, "off"))
-+              res = 0;
-+      else
-+              return -EINVAL;
-+
-+      name = strsep(&tmp, " \t\n");
-+      if (!name)
-+              return -EINVAL;
-+
-+      /* Find the cache in the chain of caches. */
-+      down(&cache_chain_sem);
-+      list_for_each(p,&cache_chain) {
-+              kmem_cache_t *cachep = list_entry(p, kmem_cache_t, next);
-+
-+              if (!strcmp(cachep->name, name)) {
-+                      if (res) {
-+                              printk("UAF: use on %s\n", cachep->name);
-+                              cachep->flags |= SLAB_USE_UAF;
-+                      } else {
-+                              printk("UAF: dont use on %s\n", cachep->name);
-+                              cachep->flags &= ~SLAB_USE_UAF;
-+                      }
-+                      break;
-+              }
-+      }
-+      up(&cache_chain_sem);
-+      return count;
-+}
-+#endif
-+
-Index: linux-2.4.22-vanilla/init/main.c
-===================================================================
---- linux-2.4.22-vanilla.orig/init/main.c      2003-11-03 23:22:13.000000000 +0300
-+++ linux-2.4.22-vanilla/init/main.c   2003-11-18 01:06:45.000000000 +0300
-@@ -436,6 +436,9 @@
-        *      make syscalls (and thus be locked).
-        */
-       smp_init();
-+#ifdef CONFIG_DEBUG_UAF
-+      uaf_init();
-+#endif
-       rest_init();
- }
-Index: linux-2.4.22-vanilla/fs/proc/proc_misc.c
-===================================================================
---- linux-2.4.22-vanilla.orig/fs/proc/proc_misc.c      2003-11-03 23:22:11.000000000 +0300
-+++ linux-2.4.22-vanilla/fs/proc/proc_misc.c   2003-11-18 01:06:45.000000000 +0300
-@@ -301,6 +301,22 @@
-       release:        seq_release,
- };
-+#ifdef CONFIG_DEBUG_UAF
-+extern struct seq_operations uafinfo_op;
-+extern ssize_t uafinfo_write(struct file *, const char *, size_t, loff_t *);
-+static int uafinfo_open(struct inode *inode, struct file *file)
-+{
-+      return seq_open(file, &uafinfo_op);
-+}
-+static struct file_operations proc_uafinfo_operations = {
-+      .open           = uafinfo_open,
-+      .read           = seq_read,
-+      .write          = uafinfo_write,
-+      .llseek         = seq_lseek,
-+      .release        = seq_release,
-+};
-+#endif
-+
- static int kstat_read_proc(char *page, char **start, off_t off,
-                                int count, int *eof, void *data)
- {
-@@ -616,6 +632,9 @@
-       create_seq_entry("cpuinfo", 0, &proc_cpuinfo_operations);
-       create_seq_entry("partitions", 0, &proc_partitions_operations);
-       create_seq_entry("slabinfo",S_IWUSR|S_IRUGO,&proc_slabinfo_operations);
-+#ifdef CONFIG_DEBUG_UAF
-+      create_seq_entry("uafinfo",S_IWUSR|S_IRUGO,&proc_uafinfo_operations);
-+#endif
- #ifdef CONFIG_MODULES
-       create_seq_entry("ksyms", 0, &proc_ksyms_operations);
- #endif
-Index: linux-2.4.22-vanilla/include/linux/slab.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/linux/slab.h     2003-11-17 15:42:13.000000000 +0300
-+++ linux-2.4.22-vanilla/include/linux/slab.h  2003-11-18 02:14:40.000000000 +0300
-@@ -40,6 +40,7 @@
- #define       SLAB_HWCACHE_ALIGN      0x00002000UL    /* align objs on a h/w cache lines */
- #define SLAB_CACHE_DMA                0x00004000UL    /* use GFP_DMA memory */
- #define SLAB_MUST_HWCACHE_ALIGN       0x00008000UL    /* force alignment */
-+#define SLAB_USE_UAF          0x00040000UL    /* use UAF allocator */
- /* flags passed to a constructor func */
- #define       SLAB_CTOR_CONSTRUCTOR   0x001UL         /* if not set, then deconstructor */
-Index: linux-2.4.22-vanilla/arch/i386/config.in
-===================================================================
---- linux-2.4.22-vanilla.orig/arch/i386/config.in      2003-11-03 23:22:06.000000000 +0300
-+++ linux-2.4.22-vanilla/arch/i386/config.in   2003-11-18 01:06:45.000000000 +0300
-@@ -470,6 +470,9 @@
-    bool '  Check for stack overflows' CONFIG_DEBUG_STACKOVERFLOW
-    bool '  Debug high memory support' CONFIG_DEBUG_HIGHMEM
-    bool '  Debug memory allocations' CONFIG_DEBUG_SLAB
-+   if [ "$CONFIG_DEBUG_SLAB" != "n" ]; then
-+      bool '  Debug memory allocations (use-after-free via vmalloced space)' CONFIG_DEBUG_UAF
-+   fi
-    bool '  Memory mapped I/O debugging' CONFIG_DEBUG_IOVIRT
-    bool '  Magic SysRq key' CONFIG_MAGIC_SYSRQ
-    bool '  Spinlock debugging' CONFIG_DEBUG_SPINLOCK
-Index: linux-2.4.22-vanilla/mm/vmalloc.c
-===================================================================
---- linux-2.4.22-vanilla.orig/mm/vmalloc.c     2003-11-03 23:22:13.000000000 +0300
-+++ linux-2.4.22-vanilla/mm/vmalloc.c  2003-11-18 01:06:45.000000000 +0300
-@@ -53,7 +53,7 @@
-       } while (address < end);
- }
--static inline void free_area_pmd(pgd_t * dir, unsigned long address, unsigned long size)
-+void free_area_pmd(pgd_t * dir, unsigned long address, unsigned long size)
- {
-       pmd_t * pmd;
-       unsigned long end;
-@@ -152,7 +152,7 @@
-       return 0;
- }
--static inline int __vmalloc_area_pages (unsigned long address,
-+int __vmalloc_area_pages (unsigned long address,
-                                       unsigned long size,
-                                       int gfp_mask,
-                                       pgprot_t prot,
-Index: linux-2.4.22-vanilla/include/asm-i386/io.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/asm-i386/io.h    2003-11-17 14:58:37.000000000 +0300
-+++ linux-2.4.22-vanilla/include/asm-i386/io.h 2003-11-18 02:26:42.000000000 +0300
-@@ -75,6 +75,16 @@
-  
- static inline unsigned long virt_to_phys(volatile void * address)
- {
-+#ifdef CONFIG_DEBUG_UAF
-+      unsigned long addr = (unsigned long) address;
-+      if (vmlist && addr >= VMALLOC_START && addr < VMALLOC_END) {
-+              struct page *page = vmalloc_to_page((void *) address);
-+              if (page) {
-+                      unsigned long offset = addr & ~PAGE_MASK;
-+                      address = page_address(page) + offset;
-+              }
-+      }
-+#endif
-       return __pa(address);
- }
-Index: linux-2.4.22-vanilla/include/asm-i386/page.h
-===================================================================
---- linux-2.4.22-vanilla.orig/include/asm-i386/page.h  2003-11-03 23:51:46.000000000 +0300
-+++ linux-2.4.22-vanilla/include/asm-i386/page.h       2003-11-18 02:14:38.000000000 +0300
-@@ -129,9 +129,49 @@
- #define VMALLOC_RESERVE               ((unsigned long)__VMALLOC_RESERVE)
- #define __MAXMEM              (-__PAGE_OFFSET-__VMALLOC_RESERVE)
- #define MAXMEM                        ((unsigned long)(-PAGE_OFFSET-VMALLOC_RESERVE))
-+
-+#ifndef CONFIG_DEBUG_UAF
- #define __pa(x)                       ((unsigned long)(x)-PAGE_OFFSET)
- #define __va(x)                       ((void *)((unsigned long)(x)+PAGE_OFFSET))
- #define virt_to_page(kaddr)   (mem_map + (__pa(kaddr) >> PAGE_SHIFT))
-+#else
-+#define __pa(x)               ({                                                      \
-+                              unsigned long __pn, __fr;                       \
-+                              __pn = (unsigned long)(x)-PAGE_OFFSET;          \
-+                              __fr = __pn >> PAGE_SHIFT;                      \
-+                              if (jiffies > HZ*3 && __fr >= max_mapnr) {      \
-+                                      printk("invalid arg __pa(0x%x)"         \
-+                                              " at %s:%d\n", (unsigned) (x),  \
-+                                              __FILE__, __LINE__);            \
-+                                      dump_stack();                           \
-+                              }                                               \
-+                              __pn;                                           \
-+                      })
-+
-+#define __va(x)               ({                                                      \
-+                              unsigned long __pn;                             \
-+                              __pn = (unsigned long) (x) >> PAGE_SHIFT;       \
-+                              if (jiffies > HZ*3 && __pn >= max_mapnr) {      \
-+                                      printk("invalid arg __va(0x%x)"         \
-+                                              " at %s:%d\n", (unsigned) (x),  \
-+                                              __FILE__, __LINE__);            \
-+                                      dump_stack();                           \
-+                              }                                               \
-+                              ((void *)((unsigned long)(x) + PAGE_OFFSET));   \
-+                      })
-+
-+#define virt_to_page(ka) ({                                                   \
-+                              struct page *_p;                                \
-+                              if ((unsigned long)(ka) >= VMALLOC_START) {     \
-+                                      _p = vmalloc_to_page((void *)(ka));     \
-+                                      BUG_ON(!_p);                            \
-+                              } else                                          \
-+                                      _p = mem_map+(__pa(ka) >> PAGE_SHIFT);  \
-+                              (_p);                                           \
-+                      })
-+#endif
-+
-+
- #define VALID_PAGE(page)      ((page - mem_map) < max_mapnr)
- #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
-
-%diffstat
- arch/i386/config.in     |    3 
- fs/proc/proc_misc.c     |   19 +
- include/asm-i386/io.h   |   10 
- include/asm-i386/page.h |   40 +++
- include/linux/slab.h    |    1 
- init/main.c             |    3 
- mm/slab.c               |  487 ++++++++++++++++++++++++++++++++++++++++++++++++
- mm/vmalloc.c            |    4 
- 8 files changed, 565 insertions(+), 2 deletions(-)
-
diff --git a/lustre/kernel_patches/patches/small_scatterlist-2.4.21-chaos.patch b/lustre/kernel_patches/patches/small_scatterlist-2.4.21-chaos.patch
new file mode 100644 (file)
index 0000000..8bcd91a
--- /dev/null
@@ -0,0 +1,755 @@
+--- ./crypto/cipher.c  2004-07-26 12:52:03.000000000 +0100
++++ ./crypto/cipher.c  2004-07-26 12:55:11.000000000 +0100
+@@ -88,12 +88,21 @@ static void scatterwalk_start(struct sca
+       walk->sg = sg;
++#if SMALL_SCATTERLIST
++      walk->page = sg->u.page.page;
++      walk->len_this_segment = sg->length;
++
++      rest_of_page = PAGE_CACHE_SIZE - (sg->u.page.offset & (PAGE_CACHE_SIZE - 1));
++      walk->len_this_page = min(sg->length, rest_of_page);
++      walk->offset = sg->u.page.offset;
++#else
+       walk->page = sg->page;
+       walk->len_this_segment = sg->length;
+       rest_of_page = PAGE_CACHE_SIZE - (sg->offset & (PAGE_CACHE_SIZE - 1));
+       walk->len_this_page = min(sg->length, rest_of_page);
+       walk->offset = sg->offset;
++#endif
+ }
+ static void scatterwalk_map(struct scatter_walk *walk, int out)
+--- ./crypto/digest.c  2004-07-26 12:52:03.000000000 +0100
++++ ./crypto/digest.c  2004-07-26 12:55:11.000000000 +0100
+@@ -29,7 +29,11 @@ static void update(struct crypto_tfm *tf
+       unsigned int i;
+       
+       for (i = 0; i < nsg; i++) {
++#if SMALL_SCATTERLIST
++              char *p = crypto_kmap(sg[i].u.page.page, 0) + sg[i].u.page.offset;
++#else
+               char *p = crypto_kmap(sg[i].page, 0) + sg[i].offset;
++#endif
+               tfm->__crt_alg->cra_digest.dia_update(crypto_tfm_ctx(tfm),
+                                                     p, sg[i].length);
+               crypto_kunmap(p, 0);
+@@ -50,7 +54,11 @@ static void digest(struct crypto_tfm *tf
+       tfm->crt_digest.dit_init(tfm);
+               
+       for (i = 0; i < nsg; i++) {
++#if SMALL_SCATTERLIST
++              char *p = crypto_kmap(sg[i].u.page.page, 0) + sg[i].u.page.offset;
++#else
+               char *p = crypto_kmap(sg[i].page, 0) + sg[i].offset;
++#endif
+               tfm->__crt_alg->cra_digest.dia_update(crypto_tfm_ctx(tfm),
+                                                     p, sg[i].length);
+               crypto_kunmap(p, 0);
+--- ./crypto/hmac.c    2004-07-26 12:52:03.000000000 +0100
++++ ./crypto/hmac.c    2004-07-26 12:55:11.000000000 +0100
+@@ -25,8 +25,14 @@ static void hash_key(struct crypto_tfm *
+ {
+       struct scatterlist tmp;
+       
++#if SMALL_SCATTERLIST
++      tmp.ispaged = 1;
++      tmp.u.page.page = virt_to_page(key);
++      tmp.u.page.offset = ((long)key & ~PAGE_MASK);
++#else
+       tmp.page = virt_to_page(key);
+       tmp.offset = ((long)key & ~PAGE_MASK);
++#endif
+       tmp.length = keylen;
+       crypto_digest_digest(tfm, &tmp, 1, key);
+               
+@@ -70,8 +76,14 @@ void crypto_hmac_init(struct crypto_tfm 
+       for (i = 0; i < crypto_tfm_alg_blocksize(tfm); i++)
+               ipad[i] ^= 0x36;
++#if SMALL_SCATTERLIST
++      tmp.ispaged = 1;
++      tmp.u.page.page = virt_to_page(ipad);
++      tmp.u.page.offset = ((long)ipad & ~PAGE_MASK);
++#else
+       tmp.page = virt_to_page(ipad);
+       tmp.offset = ((long)ipad & ~PAGE_MASK);
++#endif
+       tmp.length = crypto_tfm_alg_blocksize(tfm);
+       
+       crypto_digest_init(tfm);
+@@ -104,15 +116,27 @@ void crypto_hmac_final(struct crypto_tfm
+       for (i = 0; i < crypto_tfm_alg_blocksize(tfm); i++)
+               opad[i] ^= 0x5c;
++#if SMALL_SCATTERLIST
++      tmp.ispaged = 1;
++      tmp.u.page.page = virt_to_page(opad);
++      tmp.u.page.offset = ((long)opad & ~PAGE_MASK);
++#else
+       tmp.page = virt_to_page(opad);
+       tmp.offset = ((long)opad & ~PAGE_MASK);
++#endif
+       tmp.length = crypto_tfm_alg_blocksize(tfm);
+       crypto_digest_init(tfm);
+       crypto_digest_update(tfm, &tmp, 1);
+       
++#if SMALL_SCATTERLIST
++      tmp.ispaged = 1;
++      tmp.u.page.page = virt_to_page(out);
++      tmp.u.page.offset = ((long)out & ~PAGE_MASK);
++#else
+       tmp.page = virt_to_page(out);
+       tmp.offset = ((long)out & ~PAGE_MASK);
++#endif
+       tmp.length = crypto_tfm_alg_digestsize(tfm);
+       
+       crypto_digest_update(tfm, &tmp, 1);
+--- ./drivers/ide/ide-dma.c    2004-07-26 12:52:17.000000000 +0100
++++ ./drivers/ide/ide-dma.c    2004-07-26 12:55:11.000000000 +0100
+@@ -281,14 +281,25 @@ static int ide_build_sglist (ide_hwif_t 
+               memset(&sg[nents], 0, sizeof(*sg));
+               if (bh->b_page) {
++#if SMALL_SCATTERLIST
++                      sg[nents].ispaged = 1;
++                      sg[nents].u.page.page = bh->b_page;
++                      sg[nents].u.page.offset = bh_offset(bh);
++#else
+                       sg[nents].page = bh->b_page;
+                       sg[nents].offset = bh_offset(bh);
++#endif
+                       lastdataend = bh_phys(bh) + bh->b_size;
+               } else {
+                       if ((unsigned long) bh->b_data < PAGE_SIZE)
+                               BUG();
++#if SMALL_SCATTERLIST
++                      sg[nents].ispaged = 0;
++                      sg[nents].u.address = bh->b_data;
++#else
+                       sg[nents].address = bh->b_data;
++#endif
+                       lastdataend = (unsigned long) bh->b_data + bh->b_size;
+               }
+@@ -329,14 +340,24 @@ static int ide_raw_build_sglist (ide_hwi
+ #if 1
+       if (sector_count > 128) {
+               memset(&sg[nents], 0, sizeof(*sg));
++#if SMALL_SCATTERLIST
++              sg[nents].ispaged = 0;
++              sg[nents].u.address = virt_addr;
++#else
+               sg[nents].address = virt_addr;
++#endif
+               sg[nents].length = 128  * SECTOR_SIZE;
+               nents++;
+               virt_addr = virt_addr + (128 * SECTOR_SIZE);
+               sector_count -= 128;
+       }
+       memset(&sg[nents], 0, sizeof(*sg));
++#if SMALL_SCATTERLIST
++      sg[nents].ispaged = 0;
++      sg[nents].u.address = virt_addr;
++#else
+       sg[nents].address = virt_addr;
++#endif
+       sg[nents].length =  sector_count  * SECTOR_SIZE;
+       nents++;
+ #else
+--- ./drivers/scsi/dpt_i2o.c   2004-07-26 12:52:39.000000000 +0100
++++ ./drivers/scsi/dpt_i2o.c   2004-07-26 12:55:11.000000000 +0100
+@@ -2151,7 +2151,13 @@ static s32 adpt_scsi_to_i2o(adpt_hba* pH
+               for(i = 0 ; i < cmd->use_sg; i++) {
+                       *mptr++ = direction|0x10000000|sg->length;
+                       len+=sg->length;
++#if SMALL_SCATTERLIST
++                      if (sg->ispaged)
++                         BUG();
++                      *mptr++ = virt_to_bus(sg->u.address);
++#else
+                       *mptr++ = virt_to_bus(sg->address);
++#endif
+                       sg++;
+               }
+               /* Make this an end of list */
+--- ./drivers/scsi/scsi_debug.c        2004-07-26 12:52:40.000000000 +0100
++++ ./drivers/scsi/scsi_debug.c        2004-07-26 12:55:11.000000000 +0100
+@@ -186,7 +186,13 @@ int scsi_debug_queuecommand(Scsi_Cmnd * 
+               struct scatterlist *sgpnt = (struct scatterlist *)
+                                               SCpnt->request_buffer;
++#if SMALL_SCATTERLIST         
++              if (sgpnt[0].ispaged)
++                 BUG();
++              buff = sgpnt[0].u.address;
++#else
+               buff = sgpnt[0].address;
++#endif
+               bufflen = sgpnt[0].length;
+               /* READ and WRITE process scatterlist themselves */
+       }
+@@ -672,7 +678,13 @@ static int resp_read(Scsi_Cmnd * SCpnt, 
+       if (SCpnt->use_sg) {
+               sgcount = 0;
+               sgpnt = (struct scatterlist *) buff;
++#if SMALL_SCATTERLIST
++              if (sgpnt[sgcount].ispaged)
++                 BUG();
++              buff = sgpnt[sgcount].u.address;
++#else
+               buff = sgpnt[sgcount].address;
++#endif
+               bufflen = sgpnt[sgcount].length;
+       }
+       do {
+@@ -682,7 +694,13 @@ static int resp_read(Scsi_Cmnd * SCpnt, 
+                       block += bufflen >> POW2_SECT_SIZE;
+                       sgcount++;
+                       if (nbytes) {
++#if SMALL_SCATTERLIST
++                              if (sgpnt[sgcount].ispaged)
++                                      BUG();
++                              buff = sgpnt[sgcount].u.address;
++#else
+                               buff = sgpnt[sgcount].address;
++#endif
+                               bufflen = sgpnt[sgcount].length;
+                       }
+               } else if (nbytes > 0)
+@@ -713,7 +731,13 @@ static int resp_write(Scsi_Cmnd * SCpnt,
+       if (SCpnt->use_sg) {
+               sgcount = 0;
+               sgpnt = (struct scatterlist *) buff;
++#if SMALL_SCATTERLIST
++              if (sgpnt[sgcount].ispaged)
++                      BUG();
++              buff = sgpnt[sgcount].u.address;
++#else
+               buff = sgpnt[sgcount].address;
++#endif
+               bufflen = sgpnt[sgcount].length;
+       }
+       do {
+@@ -724,7 +748,13 @@ static int resp_write(Scsi_Cmnd * SCpnt,
+                       block += bufflen >> POW2_SECT_SIZE;
+                       sgcount++;
+                       if (nbytes) {
++#if SMALL_SCATTERLIST
++                              if (sgpnt[sgcount].ispaged)
++                                      BUG();
++                              buff = sgpnt[sgcount].u.address;
++#else
+                               buff = sgpnt[sgcount].address;
++#endif
+                               bufflen = sgpnt[sgcount].length;
+                       }
+               } else if (nbytes > 0)
+--- ./drivers/scsi/scsi_lib.c  2004-07-26 12:52:40.000000000 +0100
++++ ./drivers/scsi/scsi_lib.c  2004-07-26 12:55:11.000000000 +0100
+@@ -549,7 +549,13 @@ static void scsi_release_buffers(Scsi_Cm
+               if (bbpnt) {
+                       for (i = 0; i < SCpnt->use_sg; i++) {
+                               if (bbpnt[i])
++#if SMALL_SCATTERLIST
++                                      if (sgpnt[i].ispaged)
++                                              BUG();
++                                      scsi_free(sgpnt[i].u.address, sgpnt[i].length);
++#else
+                                       scsi_free(sgpnt[i].address, sgpnt[i].length);
++#endif
+                       }
+               }
+               scsi_free(SCpnt->request_buffer, SCpnt->sglist_len);
+@@ -625,12 +631,23 @@ void scsi_io_completion(Scsi_Cmnd * SCpn
+               if (bbpnt) {
+                       for (i = 0; i < SCpnt->use_sg; i++) {
+                               if (bbpnt[i]) {
++#if SMALL_SCATTERLIST
++                                      if (sgpnt[i].ispaged)
++                                              BUG();
++                                      if (req->cmd == READ) {
++                                              memcpy(bbpnt[i],
++                                                     sgpnt[i].u.address,
++                                                     sgpnt[i].length);
++                                      }
++                                      scsi_free(sgpnt[i].u.address, sgpnt[i].length);
++#else
+                                       if (req->cmd == READ) {
+                                               memcpy(bbpnt[i],
+                                                      sgpnt[i].address,
+                                                      sgpnt[i].length);
+                                       }
+                                       scsi_free(sgpnt[i].address, sgpnt[i].length);
++#endif
+                               }
+                       }
+               }
+--- ./drivers/scsi/scsi_merge.c        2004-07-26 12:52:40.000000000 +0100
++++ ./drivers/scsi/scsi_merge.c        2004-07-26 13:06:01.000000000 +0100
+@@ -144,11 +144,21 @@ static void dma_exhausted(Scsi_Cmnd * SC
+        */
+       for(jj=0; jj < SCpnt->use_sg; jj++)
+       {
++#if SMALL_SCATTERLIST
++              if (sgpnt[jj].ispaged)
++                      BUG();
++              printk("[%d]\tlen:%d\taddr:%p\tbounce:%p\n",
++                     jj,
++                     sgpnt[jj].length,
++                     sgpnt[jj].u.address,
++                     (bbpnt ? bbpnt[jj] : NULL));
++#else
+               printk("[%d]\tlen:%d\taddr:%p\tbounce:%p\n",
+                      jj,
+                      sgpnt[jj].length,
+                      sgpnt[jj].address,
+                      (bbpnt ? bbpnt[jj] : NULL));
++#endif
+               if (bbpnt && bbpnt[jj])
+                       consumed += sgpnt[jj].length;
+       }
+@@ -612,6 +622,9 @@ __inline static int __scsi_merge_request
+               max_segments = scsi_max_sg;
+ #ifdef DMA_CHUNK_SIZE
++# if SMALL_SCATTERLIST
++#  error "This defeats the purpose of SMALL_SCATTERLIST"
++# endif
+       if (max_segments > 64)
+               max_segments = 64;
+@@ -929,15 +942,26 @@ __inline static int __init_io(Scsi_Cmnd 
+               }
+               if (SCpnt->host->highmem_io) {
++#if SMALL_SCATTERLIST
++                      sgpnt[count].ispaged = 1;
++                      sgpnt[count].u.page.page = bh->b_page;
++                      sgpnt[count].u.page.offset = bh_offset(bh);
++#else
+                       sgpnt[count].page = bh->b_page;
+                       sgpnt[count].offset = bh_offset(bh);
+                       sgpnt[count].address = NULL;
++#endif
+               } else {
+                       if (PageHighMem(bh->b_page))
+                               BUG();
++#if SMALL_SCATTERLIST
++                      sgpnt[count].ispaged = 0;
++                      sgpnt[count].u.address = bh->b_data;
++#else
+                       sgpnt[count].page = NULL;
+                       sgpnt[count].address = bh->b_data;
++#endif
+               }
+               
+               sgpnt[count].length = bh->b_size;
+@@ -972,6 +996,50 @@ __inline static int __init_io(Scsi_Cmnd 
+                * only done for dma_host, in which case .page is not
+                * set since it's guarenteed to be a low memory page
+                */
++#if SMALL_SCATTERLIST
++              if (sgpnt[i].ispaged)
++                      BUG();
++              if (virt_to_phys(sgpnt[i].u.address) + sgpnt[i].length - 1 >
++                  ISA_DMA_THRESHOLD) {
++                      if( scsi_dma_free_sectors - sectors <= 10  ) {
++                              /*
++                               * If this would nearly drain the DMA
++                               * pool empty, then let's stop here.
++                               * Don't make this request any larger.
++                               * This is kind of a safety valve that
++                               * we use - we could get screwed later
++                               * on if we run out completely.  
++                               */
++                              SCpnt->request_bufflen -= sgpnt[i].length;
++                              SCpnt->use_sg = i;
++                              if (i == 0) {
++                                      goto big_trouble;
++                              }
++                              break;
++                      }
++
++                      bbpnt[i] = sgpnt[i].u.address;
++                      sgpnt[i].u.address =
++                          (char *) scsi_malloc(sgpnt[i].length);
++                      /*
++                       * If we cannot allocate memory for this DMA bounce
++                       * buffer, then queue just what we have done so far.
++                       */
++                      if (sgpnt[i].u.address == NULL) {
++                              printk("Warning - running low on DMA memory\n");
++                              SCpnt->request_bufflen -= sgpnt[i].length;
++                              SCpnt->use_sg = i;
++                              if (i == 0) {
++                                      goto big_trouble;
++                              }
++                              break;
++                      }
++                      if (req->cmd == WRITE) {
++                              memcpy(sgpnt[i].u.address, bbpnt[i],
++                                     sgpnt[i].length);
++                      }
++              }
++#else
+               if (virt_to_phys(sgpnt[i].address) + sgpnt[i].length - 1 >
+                   ISA_DMA_THRESHOLD) {
+                       if( scsi_dma_free_sectors - sectors <= 10  ) {
+@@ -1012,6 +1080,7 @@ __inline static int __init_io(Scsi_Cmnd 
+                                      sgpnt[i].length);
+                       }
+               }
++#endif
+       }
+       return 1;
+--- ./drivers/scsi/sg.c        2004-07-26 12:52:40.000000000 +0100
++++ ./drivers/scsi/sg.c        2004-07-26 12:55:12.000000000 +0100
+@@ -1068,7 +1068,11 @@ static void sg_rb_correct4mmap(Sg_scatte
+         for (k = 0; k < rsv_schp->k_use_sg; ++k, ++sclp) {
+           for (m = PAGE_SIZE; m < sclp->length; m += PAGE_SIZE) {
++#if SMALL_SCATTERLIST
++              page_ptr = (unsigned char *)sclp->u.address + m;
++#else
+               page_ptr = (unsigned char *)sclp->address + m;
++#endif
+               page = virt_to_page(page_ptr);
+               if (startFinish)
+                   get_page(page);     /* increment page count */
+@@ -1121,7 +1125,11 @@ static struct page * sg_vma_nopage(struc
+             len = vma->vm_end - sa;
+             len = (len < sclp->length) ? len : sclp->length;
+           if (offset < len) {
++#if SMALL_SCATTERLIST
++              page_ptr = (unsigned char *)sclp->u.address + offset;
++#else
+               page_ptr = (unsigned char *)sclp->address + offset;
++#endif
+               page = virt_to_page(page_ptr);
+               get_page(page); /* increment page count */
+               break;
+@@ -1166,8 +1174,13 @@ static int sg_mmap(struct file * filp, s
+       for (k = 0; (k < rsv_schp->k_use_sg) && (sa < vma->vm_end); 
+            ++k, ++sclp) {
++#if SMALL_SCATTERLIST
++          if ((unsigned long)sclp->u.address & (PAGE_SIZE - 1))
++              return -EFAULT;     /* non page aligned memory ?? */
++#else
+           if ((unsigned long)sclp->address & (PAGE_SIZE - 1))
+               return -EFAULT;     /* non page aligned memory ?? */
++#endif
+           len = vma->vm_end - sa;
+           len = (len < sclp->length) ? len : sclp->length;
+           sa += len;
+@@ -1716,16 +1729,27 @@ static int sg_build_dir(Sg_request * srp
+       offset = (0 == k) ? kp->offset : 0;
+       num = (rem_sz > (PAGE_SIZE - offset)) ? (PAGE_SIZE - offset) :
+                                               rem_sz;
++#if SMALL_SCATTERLIST
++      sclp->u.address = page_address(kp->maplist[k]) + offset;
++      sclp->ispaged = 0;
++#else
+       sclp->address = page_address(kp->maplist[k]) + offset;
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13)
+       sclp->page = NULL;
+ #endif
++#endif
+       sclp->length = num;
+       mem_src_arr[k] = SG_USER_MEM;
+       rem_sz -= num;
++#if SMALL_SCATTERLIST
++      SCSI_LOG_TIMEOUT(5,
++          printk("sg_build_dir: k=%d, a=0x%p, len=%d, ms=%d\n",
++          k, sclp->u.address, num, mem_src_arr[k]));
++#else
+       SCSI_LOG_TIMEOUT(5,
+           printk("sg_build_dir: k=%d, a=0x%p, len=%d, ms=%d\n",
+           k, sclp->address, num, mem_src_arr[k]));
++#endif
+     }
+     schp->k_use_sg = k;
+     SCSI_LOG_TIMEOUT(5,
+@@ -1805,16 +1829,27 @@ static int sg_build_indi(Sg_scatter_hold
+                 if (! p)
+                     break;
+             }
++#if SMALL_SCATTERLIST
++            sclp->u.address = p;
++          sclp->ispaged = 0;
++#else
+             sclp->address = p;
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13)
+           sclp->page = NULL;
+ #endif
++#endif
+             sclp->length = ret_sz;
+           mem_src_arr[k] = mem_src;
++#if SMALL_SCATTERLIST
++          SCSI_LOG_TIMEOUT(5,
++              printk("sg_build_build: k=%d, a=0x%p, len=%d, ms=%d\n",
++                k, sclp->u.address, ret_sz, mem_src));
++#else
+           SCSI_LOG_TIMEOUT(5,
+               printk("sg_build_build: k=%d, a=0x%p, len=%d, ms=%d\n",
+                 k, sclp->address, ret_sz, mem_src));
++#endif
+         } /* end of for loop */
+       schp->k_use_sg = k;
+       SCSI_LOG_TIMEOUT(5,
+@@ -1879,13 +1914,21 @@ static int sg_write_xfer(Sg_request * sr
+       struct scatterlist * sclp = (struct scatterlist *)schp->buffer;
+       char * mem_src_arr = sg_get_sgat_msa(schp);
+       ksglen = (int)sclp->length;
++#if SMALL_SCATTERLIST
++      p = sclp->u.address;
++#else
+       p = sclp->address;
++#endif
+       for (j = 0, k = 0; j < onum; ++j) {
+           res = sg_u_iovec(hp, iovec_count, j, 1, &usglen, &up);
+           if (res) return res;
++#if SMALL_SCATTERLIST
++          for ( ; p; ++sclp, ksglen = (int)sclp->length, p = sclp->u.address) {
++#else
+           for ( ; p; ++sclp, ksglen = (int)sclp->length, p = sclp->address) {
++#endif
+               ok = (SG_USER_MEM != mem_src_arr[k]);
+               if (usglen <= 0)
+                   break;
+@@ -1962,6 +2005,18 @@ static void sg_remove_scat(Sg_scatter_ho
+         struct scatterlist * sclp = (struct scatterlist *)schp->buffer;
+       char * mem_src_arr = sg_get_sgat_msa(schp);
++#if SMALL_SCATTERLIST
++      for (k = 0; (k < schp->k_use_sg) && sclp->u.address; ++k, ++sclp) {
++          mem_src = mem_src_arr[k];
++          SCSI_LOG_TIMEOUT(5,
++              printk("sg_remove_scat: k=%d, a=0x%p, len=%d, ms=%d\n",
++                       k, sclp->u.address, sclp->length, mem_src));
++            sg_free(sclp->u.address, sclp->length, mem_src);
++            sclp->u.address = NULL;
++          sclp->ispaged = 0;
++            sclp->length = 0;
++        }
++#else
+       for (k = 0; (k < schp->k_use_sg) && sclp->address; ++k, ++sclp) {
+           mem_src = mem_src_arr[k];
+           SCSI_LOG_TIMEOUT(5,
+@@ -1974,6 +2029,7 @@ static void sg_remove_scat(Sg_scatter_ho
+ #endif
+             sclp->length = 0;
+         }
++#endif
+       sg_free(schp->buffer, schp->sglist_len, schp->buffer_mem_src);
+     }
+     else if (schp->buffer)
+@@ -2034,13 +2090,21 @@ static int sg_read_xfer(Sg_request * srp
+       struct scatterlist * sclp = (struct scatterlist *)schp->buffer;
+       char * mem_src_arr = sg_get_sgat_msa(schp);
+       ksglen = (int)sclp->length;
++#if SMALL_SCATTERLIST
++      p = sclp->u.address;
++#else
+       p = sclp->address;
++#endif
+       for (j = 0, k = 0; j < onum; ++j) {
+           res = sg_u_iovec(hp, iovec_count, j, 0, &usglen, &up);
+           if (res) return res;
++#if SMALL_SCATTERLIST
++          for ( ; p; ++sclp, ksglen = (int)sclp->length, p = sclp->u.address) {
++#else
+           for ( ; p; ++sclp, ksglen = (int)sclp->length, p = sclp->address) {
++#endif
+               ok = (SG_USER_MEM != mem_src_arr[k]);
+               if (usglen <= 0)
+                   break;
+@@ -2084,14 +2148,26 @@ static void sg_read_oxfer(Sg_request * s
+         int k, num;
+         struct scatterlist * sclp = (struct scatterlist *)schp->buffer;
++#if SMALL_SCATTERLIST
++      for (k = 0; (k < schp->k_use_sg) && sclp->u.address; ++k, ++sclp) {
++#else
+       for (k = 0; (k < schp->k_use_sg) && sclp->address; ++k, ++sclp) {
++#endif
+             num = (int)sclp->length;
+             if (num > num_read_xfer) {
++#if SMALL_SCATTERLIST
++                __copy_to_user(outp, sclp->u.address, num_read_xfer);
++#else
+                 __copy_to_user(outp, sclp->address, num_read_xfer);
++#endif
+                 break;
+             }
+             else {
++#if SMALL_SCATTERLIST
++                __copy_to_user(outp, sclp->u.address, num);
++#else
+                 __copy_to_user(outp, sclp->address, num);
++#endif
+                 num_read_xfer -= num;
+                 if (num_read_xfer <= 0)
+                     break;
+@@ -2137,7 +2213,11 @@ static void sg_link_reserve(Sg_fd * sfp,
+             if (rem <= num) {
+               if (0 == k) {
+                   req_schp->k_use_sg = 0;
++#if SMALL_SCATTERLIST
++                  req_schp->buffer = sclp->u.address;
++#else
+                   req_schp->buffer = sclp->address;
++#endif
+               }
+               else {
+                   sfp->save_scat_len = num;
+--- ./drivers/scsi/sr.c        2004-07-26 12:52:40.000000000 +0100
++++ ./drivers/scsi/sr.c        2004-07-26 12:55:12.000000000 +0100
+@@ -343,7 +343,12 @@ static int sr_scatter_pad(Scsi_Cmnd *SCp
+       i = 0;
+       if (fsize) {
++#if SMALL_SCATTERLIST
++              sg[0].ispaged = 0;
++              sg[0].u.address = bbpnt[0] = front;
++#else
+               sg[0].address = bbpnt[0] = front;
++#endif
+               sg[0].length = fsize;
+               i++;
+       }
+@@ -354,7 +359,12 @@ static int sr_scatter_pad(Scsi_Cmnd *SCp
+               scsi_free(old_sg, (((SCpnt->use_sg * sizeof(struct scatterlist)) +
+                                   (SCpnt->use_sg * sizeof(void *))) + 511) & ~511);
+       } else {
++#if SMALL_SCATTERLIST
++              sg[i].ispaged = 0;
++              sg[i].u.address = SCpnt->request_buffer;
++#else
+               sg[i].address = SCpnt->request_buffer;
++#endif
+               sg[i].length = SCpnt->request_bufflen;
+       }
+@@ -364,7 +374,12 @@ static int sr_scatter_pad(Scsi_Cmnd *SCp
+       SCpnt->use_sg += i;
+       if (bsize) {
++#if SMALL_SCATTERLIST
++              sg[SCpnt->use_sg].ispaged = 0;
++              sg[SCpnt->use_sg].u.address = back;
++#else
+               sg[SCpnt->use_sg].address = back;
++#endif
+               bbpnt[SCpnt->use_sg] = back;
+               sg[SCpnt->use_sg].length = bsize;
+               SCpnt->use_sg++;
+--- ./include/asm-i386/pci.h   2004-07-26 12:52:59.000000000 +0100
++++ ./include/asm-i386/pci.h   2004-07-26 12:55:12.000000000 +0100
+@@ -157,6 +157,17 @@ static inline int pci_map_sg(struct pci_
+        * temporary 2.4 hack
+        */
+       for (i = 0; i < nents; i++ ) {
++#if SMALL_SCATTERLIST
++              if (sg[i].ispaged) {
++                      if (!sg[i].u.page.page)
++                              out_of_line_bug();
++                      sg[i].dma_address = page_to_bus(sg[i].u.page.page) + sg[i].u.page.offset;
++              } else {
++                      if (!sg[i].u.address)
++                              out_of_line_bug();
++                      sg[i].dma_address = virt_to_bus(sg[i].u.address);
++              }
++#else
+               if (sg[i].address && sg[i].page)
+                       out_of_line_bug();
+               else if (!sg[i].address && !sg[i].page)
+@@ -166,6 +177,7 @@ static inline int pci_map_sg(struct pci_
+                       sg[i].dma_address = virt_to_bus(sg[i].address);
+               else
+                       sg[i].dma_address = page_to_bus(sg[i].page) + sg[i].offset;
++#endif
+       }
+  
+       flush_write_buffers();
+--- ./include/asm-i386/scatterlist.h   2004-07-26 12:52:59.000000000 +0100
++++ ./include/asm-i386/scatterlist.h   2004-07-26 13:45:04.000000000 +0100
+@@ -19,7 +19,25 @@
+  *
+  * and that's it. There's no excuse for not highmem enabling YOUR driver. /jens
+  */
++
++/* Define SMALL_SCATTERLIST non-zero if you want to compress scatter/gather
++   descriptors to fit in 1 page.  NB this file is arch-specific, so we only
++   define this where we actually need/want it */
++#define SMALL_SCATTERLIST 1
++
+ struct scatterlist {
++#if SMALL_SCATTERLIST
++    union {
++       char         *address;                 /* mapped address... */
++       struct {
++        struct page  *page;                   /* ...or page + offset... */
++        unsigned int  offset;
++       } page;
++    } u;
++    dma_addr_t dma_address;
++    unsigned int length:31;                   /* ...steal 1 bit from the length */
++    unsigned int ispaged:1;                   /* to discriminate */
++#else
+     char *  address;    /* Location data is to be transferred to, NULL for
+                        * highmem page */
+     struct page * page; /* Location for highmem page, if any */
+@@ -27,6 +45,7 @@ struct scatterlist {
+     dma_addr_t dma_address;
+     unsigned int length;
++#endif
+ };
+ #define ISA_DMA_THRESHOLD (0x00ffffff)
+--- ./net/xfrm/xfrm_algo.c     2004-07-26 12:53:25.000000000 +0100
++++ ./net/xfrm/xfrm_algo.c     2004-07-26 12:55:12.000000000 +0100
+@@ -487,9 +487,14 @@ void skb_icv_walk(const struct sk_buff *
+       if (copy > 0) {
+               if (copy > len)
+                       copy = len;
+-              
++#if SMALL_SCATTERLIST         
++              sg.ispaged = 1;
++              sg.u.page.page = virt_to_page(skb->data + offset);
++              sg.u.page.offset = (unsigned long)(skb->data + offset) % PAGE_SIZE;
++#else
+               sg.page = virt_to_page(skb->data + offset);
+               sg.offset = (unsigned long)(skb->data + offset) % PAGE_SIZE;
++#endif
+               sg.length = copy;
+               
+               icv_update(tfm, &sg, 1);
+@@ -511,8 +516,14 @@ void skb_icv_walk(const struct sk_buff *
+                       if (copy > len)
+                               copy = len;
+                       
++#if SMALL_SCATTERLIST
++                      sg.ispaged = 1;
++                      sg.u.page.page = frag->page;
++                      sg.u.page.offset = frag->page_offset + offset-start;
++#else
+                       sg.page = frag->page;
+                       sg.offset = frag->page_offset + offset-start;
++#endif
+                       sg.length = copy;
+                       
+                       icv_update(tfm, &sg, 1);
diff --git a/lustre/kernel_patches/patches/snapfs_core-2.4.20.patch b/lustre/kernel_patches/patches/snapfs_core-2.4.20.patch
deleted file mode 100644 (file)
index 60b27d0..0000000
+++ /dev/null
@@ -1,3082 +0,0 @@
-%patch
-Index: linux-2.4.20-8/fs/ext3/snap.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/snap.c 2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/snap.c      2004-01-27 00:07:10.000000000 +0800
-@@ -0,0 +1,2577 @@
-+/* fs/ext3/snap.c
-+ *
-+ * Copyright (c) 2002 Cluster File Systems, Inc. <info@clusterfs.com>
-+ * started by Andreas Dilger <adilger@turbolinux.com>
-+ *            Peter Braam <braam@mountainviewdata.com>
-+ *            Harrison Xing <harrisonx@mountainviewdata.com>
-+ *          Eric Mei    <Ericm@clusterfs.com>
-+ * 
-+ * port to 2.4 by Wang Di  <wangdi@clusterfs.com>
-+ *                Eric Mei <ericm@clusterfs.com>
-+ * 
-+ * Functions for implementing snapshots in the ext3 filesystem.  They are
-+ * intended to hide the internals of the filesystem from the caller in
-+ * such a way that the caller doesn't need to know about inode numbers,
-+ * how the redirectors are implemented or stored, etc.  It may not do that
-+ * all yet, but it tries.
-+ *
-+ * The snapshot inode redirection is stored in the primary/direct inode as
-+ * an extended attribute $snap, in the form of little-endian u32 inode
-+ * numbers. 
-+ *   
-+ */
-+ 
-+#define EXPORT_SYMTAB
-+#include <linux/module.h>
-+
-+#include <linux/sched.h>
-+#include <linux/jbd.h>
-+#include <linux/mm.h>
-+#include <linux/slab.h>
-+#include <linux/locks.h>
-+#include <linux/snap.h>
-+#include <linux/ext3_jbd.h>
-+#include <linux/ext3_fs.h>
-+#include <linux/ext3_xattr.h>
-+
-+#define EXT3_SNAP_ATTR "@snap"
-+#define EXT3_SNAP_GENERATION_ATTR "@snap_generation"
-+#define EXT3_MAX_SNAPS 20
-+#define EXT3_MAX_SNAP_DATA (sizeof(struct snap_ea))
-+#define EXT3_SNAP_INDEX EXT3_XATTR_INDEX_LUSTRE
-+
-+#define EXT3_SNAP_DEBUG
-+#ifdef EXT3_SNAP_DEBUG
-+       #define snap_debug(f, a...)                             \
-+       do {                                                    \
-+               printk (KERN_INFO "SNAP DEBUG: (%s, %d): %s: ", \
-+                       __FILE__, __LINE__, __FUNCTION__);      \
-+               printk (f, ## a);                               \
-+       } while (0)
-+
-+       #define snap_err(f, a...)                               \
-+       do {                                                    \
-+               printk (KERN_ERR "SNAP ERROR: (%s, %d): %s: ",  \
-+                       __FILE__, __LINE__, __FUNCTION__);      \
-+               printk (f, ## a);                               \
-+       } while (0)
-+
-+#else
-+       #define snap_debug(f, a...)             do {} while (0)
-+       #define snap_err(f, a...)                               \
-+       do {                                                    \
-+               printk (KERN_ERR "SNAP ERROR: (%s, %d): ",      \
-+                       __FILE__, __LINE__);                    \
-+               printk (f, ## a);                               \
-+       } while (0)
-+
-+#endif
-+
-+#ifdef EXT3_SNAP_DEBUG
-+       #define ALLOC(ptr, cast, size)                                  \
-+       do {                                                            \
-+               ptr = (cast)kmalloc((size_t) size, GFP_KERNEL);         \
-+               if (ptr == 0) {                                         \
-+                       printk(KERN_ERR "kmalloc returns 0 at %s:%d\n", \
-+                              __FILE__, __LINE__);                     \
-+               } else {                                                \
-+                       snap_kmem += size;                              \
-+                       printk(KERN_INFO "snap_alloc %d, kmem %ld\n",   \
-+                               (size_t)size, snap_kmem);               \
-+               }                                                       \
-+       } while (0)
-+
-+       #define FREE(ptr,size)                                          \
-+       do {                                                            \
-+               kfree((ptr));                                           \
-+               snap_kmem -= size;                                      \
-+               printk(KERN_INFO "snap_free %d, kmem %ld\n",            \
-+                       (size_t)size, snap_kmem);                       \
-+       } while (0)
-+
-+#else
-+       #define ALLOC(ptr, cast, size)                                  \
-+       do {                                                            \
-+               ptr = (cast)kmalloc((size_t) size, GFP_KERNEL);         \
-+       } while (0)
-+
-+       #define FREE(ptr,size)                                          \
-+       do {                                                            \
-+               kfree((ptr));                                           \
-+       } while (0)
-+
-+#endif /* EXT3_SNAP_DEBUG */
-+
-+#ifdef EXT3_SNAP_DEBUG
-+       /* modestr: convert inode mode to string . debug function */
-+       static char * modestr ( umode_t mode )
-+       {
-+               if( S_ISREG(mode) )
-+                       return "file";
-+               else if(S_ISDIR(mode))
-+                       return "dir";
-+               else if(S_ISLNK(mode))
-+                       return "link";
-+               else if(S_ISCHR(mode))
-+                       return "char";
-+               else if(S_ISBLK(mode))
-+                       return "block";
-+               else if(S_ISFIFO(mode))
-+                       return "fifo";
-+               else if(S_ISSOCK(mode))
-+                       return "sock";
-+               else
-+                       return "non-known";
-+       }
-+#define DEBUG_INODE(inode)                                      \
-+       if(inode && !IS_ERR(inode)) {                                                   \
-+               snap_debug("%s ino %lu, i_nlink %u, i_count %d, i_mode %u, i_size %lld, i_blocks %lu\n", \
-+               modestr(inode->i_mode), inode->i_ino, inode->i_nlink,       \
-+               atomic_read(&inode->i_count), inode->i_mode, inode->i_size, \
-+               inode->i_blocks); }
-+#else
-+       #define modestr(mode)           do {} while (0)
-+       #define DEBUG_INODE(inode)      
-+
-+#endif /* EXT3_SNAP_DEBUG */
-+/* do file cow on: dir, symlink, regular but fs has filecow flag */
-+
-+#define IS_FILECOW_TYPE(inode)         \
-+       (S_ISDIR(inode->i_mode) ||      \
-+        S_ISLNK(inode->i_mode) ||      \
-+        (S_ISREG(inode->i_mode) &&     \
-+        !SNAP_HAS_COMPAT_FEATURE(inode->i_sb, SNAP_FEATURE_COMPAT_BLOCKCOW)))
-+
-+#define SNAP_ERROR(err)  ((err) < 0 ? (err) : (-(err)))
-+/* SNAP_ERROR(err): Make sure we return negative errors for Linux ( return positive errors) */
-+
-+#ifdef DEBUG
-+#ifdef __KERNEL__
-+# ifdef  __ia64__
-+#  define CDEBUG_STACK (THREAD_SIZE -                                      \
-+                        ((unsigned long)__builtin_dwarf_cfa() &            \
-+                         (THREAD_SIZE - 1)))
-+# else
-+#  define CDEBUG_STACK (THREAD_SIZE -                                      \
-+                        ((unsigned long)__builtin_frame_address(0) &       \
-+                         (THREAD_SIZE - 1)))
-+# endif
-+
-+#define snap_debug_msg(file, fn, line, stack, format, a...)                \
-+    printf("(%s:%s,l. %d %d %lu): " format, file, fn, line,                  \
-+           getpid() , stack, ## a);
-+#endif
-+
-+#define CDEBUG(mask, format, a...)                                            \
-+do {                                                                          \
-+        CHECK_STACK(CDEBUG_STACK);                                            \
-+        if (!(mask) || ((mask) & (D_ERROR | D_EMERG)))                       \
-+                snap_debug_msg(__FILE__, __FUNCTION__, __LINE__,           \
-+                               CDEBUG_STACK, format, ## a);                \
-+} while (0)
-+
-+#define CWARN (format, a...) CDEBUG(D_WARNING, format, ## a)
-+#define CERROR(format, a...) CDEBUG(D_ERROR, format, ## a)
-+#define CEMERG(format, a...) CDEBUG(D_EMERG, format, ## a)
-+
-+#define RETURN(rc)                                                      \
-+do {                                                                    \
-+        typeof(rc) RETURN__ret = (rc);                                  \
-+        CDEBUG(D_TRACE, "Process leaving (rc=%lu : %ld : %lx)\n",       \
-+               (long)RETURN__ret, (long)RETURN__ret, (long)RETURN__ret);\
-+        return RETURN__ret;                                             \
-+} while (0)
-+
-+#define ENTRY                                                           \
-+do {                                                                    \
-+        CDEBUG(D_TRACE, "Process entered\n");                           \
-+} while (0)
-+
-+#define EXIT                                                            \
-+do {                                                                    \
-+        CDEBUG(D_TRACE, "Process leaving\n");                           \
-+} while(0)
-+#else
-+#define CDEBUG(mask, format, a...)      do { } while (0)
-+#define CWARN(format, a...)             do { } while (0)
-+#define CERROR(format, a...)            printk("<3>" format, ## a)
-+#define CEMERG(format, a...)            printk("<0>" format, ## a)
-+#define GOTO(label, rc)                 do { (void)(rc); goto label; } while (0)
-+#define RETURN(rc)                      return (rc)
-+#define ENTRY                           do { } while (0)
-+#define EXIT                            do { } while (0)
-+#endif /*DEBUG*/
-+
-+#define SNAP_ATTR_BUF_CNT 10
-+
-+#define SB_LAST_COWED_INO(sb)  (EXT3_SB(sb)->s_es->s_last_cowed_pri_ino) 
-+#define SB_FIRST_COWED_INO(sb) (EXT3_SB(sb)->s_es->s_first_cowed_pri_ino)
-+#define SB_SNAPTABLE_INO(sb)   (EXT3_SB(sb)->s_es->s_snaptable_ino)
-+#define SB_SNAP_LIST_SEM(sb)   (EXT3_SB(sb)->s_snap_list_sem)
-+#define SB_FEATURE_COMPAT(sb)  (EXT3_SB(sb)->s_es->s_feature_compat)
-+
-+#define       SNAP_HAS_COMPAT_FEATURE(sb,mask)        \
-+      (SB_FEATURE_COMPAT(sb) & cpu_to_le32(mask))
-+
-+/* NOTE: these macros are close dependant on the structure of snap ea */
-+#define SNAP_CNT_FROM_SIZE(size)       ((((size)-sizeof(ino_t)*2)/2)/sizeof(ino_t))
-+#define SNAP_EA_SIZE_FROM_INDEX(index) (sizeof(ino_t)*2 + 2*sizeof(ino_t)*((index)+1))
-+
-+#define SNAP_EA_INO_BLOCK_SIZE(size)   (((size)-sizeof(ino_t)*2)/2)
-+#define SNAP_EA_PARENT_OFFSET(size)    (sizeof(ino_t)*2 + SNAP_EA_INO_BLOCK_SIZE((size)))
-+/*SET FLAGS*/
-+extern int ext3_bmap(struct address_space *mapping, long block);
-+extern int ext3_load_inode_bitmap (struct super_block * sb, unsigned int block_group);
-+extern int ext3_block_truncate_page(handle_t *handle, struct address_space *mapping, 
-+                                  loff_t from);
-+/* helper functions to manipulate field 'parent' in snap_ea */
-+static inline int
-+set_parent_ino(struct snap_ea *pea, int size, int index, ino_t val)
-+{
-+       char * p = (char*) pea;
-+       int offset;
-+
-+       offset = sizeof(ino_t)*2 + (size - sizeof(ino_t)*2)/2;
-+       offset += sizeof(ino_t) * index;
-+       *(ino_t*)(p+offset) = val;
-+
-+       return 0;
-+}
-+/* ext3_iterate_cowed_inode:
-+ *    iterate all the cowed inode with the same index and 
-+ *  run the associate function @repeat
-+ *
-+ *  For @repeat, if it returns non-zero value, it will exit the iterator
-+ *
-+ *  return value:     0 or positive:  success
-+ *                    negative:       failure
-+ *  additional: if the return value is positive, it must be the return value
-+ *            of function @repeat.
-+ */
-+
-+static int ext3_iterate_cowed_inode(
-+              struct super_block *sb,
-+              int (*repeat)(struct inode *inode, void *priv),
-+              struct inode **start,
-+              void *priv)
-+{     
-+      struct inode *list_inode = NULL;
-+      char buf[EXT3_MAX_SNAP_DATA];   
-+      struct snap_ea *snaps;
-+      int  err = 0;
-+
-+      if (SB_FIRST_COWED_INO(sb) == 0) {
-+              snap_debug("no cowed inode in the list\n"); 
-+              return 0;
-+      }
-+
-+      /* get head inode in the list */
-+      if (start != NULL && *start != NULL && (*start)->i_ino)
-+              list_inode = iget(sb, (*start)->i_ino);
-+      else
-+              list_inode = iget (sb, le32_to_cpu( SB_FIRST_COWED_INO(sb) ));
-+
-+      /* loop for all inode in list */
-+      while (list_inode) {
-+              if (!list_inode->i_nlink || is_bad_inode(list_inode)) {
-+                      snap_err("inode %p, ino %lu, mode %o, nlink %d\n",
-+                                      list_inode,
-+                                      list_inode->i_ino,
-+                                      list_inode->i_mode,
-+                                      list_inode->i_nlink);
-+                      err = -EIO;
-+                      goto err_iput;
-+              }
-+
-+              err = ext3_xattr_get(list_inode, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                                      buf, EXT3_MAX_SNAP_DATA);
-+              if (err < 0 || err > EXT3_MAX_SNAP_DATA) {
-+                      snap_err("inode %lu, error %d\n", list_inode->i_ino, err);
-+                      goto err_iput;
-+              }
-+
-+              if ((err = (*repeat)(list_inode, priv)) != 0)
-+                      goto err_iput;
-+
-+              iput (list_inode);
-+
-+              snaps = (struct snap_ea *) buf;
-+              if (le32_to_cpu (snaps->next_ino) != 0) {
-+                      list_inode = iget(sb, le32_to_cpu(snaps->next_ino));
-+              }
-+              else {
-+                      snap_debug ("cowed inode list end, exit\n");
-+                      goto err_free;
-+              }
-+      }
-+err_iput:
-+      if (list_inode) 
-+              iput(list_inode);
-+err_free:
-+      return err; 
-+}
-+static int get_cowed_ino(struct inode *pri, void *param)
-+{
-+      ino_t *find = param;
-+        (*find) = pri->i_ino;
-+        return 0;
-+}
-+
-+/* Return 0 for error. */
-+static int get_cowed_ino_end (struct inode *inode)
-+{
-+        int rc;
-+        ino_t ino = 0;
-+
-+        rc = ext3_iterate_cowed_inode(inode->i_sb, &get_cowed_ino, &inode, &ino);
-+
-+      if (rc < 0)
-+                return 0;
-+        else
-+                return ino;
-+}
-+
-+/* find the end of the primary inode, iterate if needed
-+ * return 0 if any error found */
-+static inline ino_t find_last_cowed_ino(struct super_block *sb)
-+{
-+      struct inode *inode = NULL;
-+      ino_t first, last = 0;
-+
-+        last = le32_to_cpu(SB_LAST_COWED_INO(sb));
-+      if (last)
-+              return last;
-+
-+      first = le32_to_cpu(SB_FIRST_COWED_INO(sb));
-+
-+      if (!first) {
-+              snap_err("first cowed inode is NULL\n");
-+              goto exit;
-+      }
-+
-+      inode = iget(sb, first);
-+      if (inode) {
-+              if (is_bad_inode(inode)) {
-+                      snap_err("bad inode %lu\n", first);
-+                      goto exit;
-+              }
-+
-+              last = get_cowed_ino_end(inode);
-+      }
-+exit:
-+      if (inode)
-+              iput(inode);
-+      return last;
-+}
-+
-+/* Insert the primary inode to the cowed inode list 
-+ * Append it to the list end
-+ * 
-+ * @pri: inode to insert
-+ * @buf_pri: the valid ea buf for @pri inode ( excluding the next_ino field) , 
-+ * it's used to write the ea for @pri inode
-+ * 
-+ * To avoid list broken in abnormal case, it will first write the ea for @pri
-+ * inode, and then write ea for the list end inode. Thus list broken is 
-+ * avoid even if there are errors when writting ea.   
-+ */
-+static int insert_cowed_ino_to_list (handle_t *handle, struct inode *pri, char *buf_pri)
-+{
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      struct snap_ea *snaps;
-+      struct snap_ea *snaps_pri;
-+      struct inode *last_inode = NULL;
-+      struct ext3_sb_info *sbi = EXT3_SB(pri->i_sb);
-+      int err = 0; 
-+      
-+      snaps_pri = (struct snap_ea *)buf_pri;
-+
-+      if (!SB_FIRST_COWED_INO(pri->i_sb)) {
-+              /* we set the next_ino and write ea for pri inode */
-+              snaps_pri->next_ino = cpu_to_le32(0);
-+              snaps_pri->prev_ino = cpu_to_le32(0);
-+
-+              err = ext3_xattr_set(handle, pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                         buf_pri, EXT3_MAX_SNAP_DATA, 0);
-+              if (err < 0) {
-+                      snap_err("ino %lu, set_ext_attr err %d\n", pri->i_ino, err);
-+                      return err;
-+              }
-+              lock_super(pri->i_sb);
-+              ext3_journal_get_write_access(handle, sbi->s_sbh);
-+              sbi->s_es->s_first_cowed_pri_ino = cpu_to_le32(pri->i_ino);
-+              SB_FIRST_COWED_INO(pri->i_sb) = cpu_to_le32(pri->i_ino);
-+              pri->i_sb->s_dirt = 1;
-+              ext3_journal_dirty_metadata(handle, sbi->s_sbh);
-+              unlock_super(pri->i_sb);
-+              EXT3_I(pri)->i_flags |= EXT3_SNAP_PRI_FLAG; 
-+              return err;
-+      }
-+
-+      if (!SB_LAST_COWED_INO(pri->i_sb)){
-+              SB_LAST_COWED_INO(pri->i_sb) = find_last_cowed_ino(pri->i_sb);
-+              if (!SB_LAST_COWED_INO(pri->i_sb) ){
-+                      snap_err("error, last cowed inode is NULL\n");
-+                      return (-EINVAL);
-+              }
-+      }
-+        
-+      last_inode = iget(pri->i_sb, SB_LAST_COWED_INO(pri->i_sb));
-+      if (!last_inode || is_bad_inode(last_inode)) {
-+              iput(last_inode);
-+              return -EINVAL;
-+      }
-+      err = ext3_xattr_get(last_inode, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                             buf, EXT3_MAX_SNAP_DATA);
-+        if (err == -ENODATA) {
-+               snap_debug("no existing attributes - zeroing\n");
-+               memset(buf, 0, EXT3_MAX_SNAP_DATA);
-+        } else if (err < 0 || err > EXT3_MAX_SNAP_DATA) {
-+               snap_debug("got err %d when reading attributes\n", err);
-+             goto exit;
-+      }
-+      /*set primary inode EA*/
-+      snaps_pri->next_ino = 0;
-+        snaps_pri->prev_ino = cpu_to_le32(last_inode->i_ino);
-+
-+      err = ext3_xattr_set(handle, pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                     buf_pri, EXT3_MAX_SNAP_DATA, 0);
-+      if (err < 0) {
-+                snap_debug("set attributes error for inode %lu\n",
-+                              (ulong)pri->i_ino);
-+              goto exit;
-+      }
-+
-+      /*set last inode EA*/
-+      snaps = (struct snap_ea *) buf;
-+      snaps->next_ino = cpu_to_le32(pri->i_ino);
-+        err = ext3_xattr_set(handle, last_inode, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                            buf, EXT3_MAX_SNAP_DATA, 0);
-+        if(err < 0){
-+                snap_debug("set attributes error for inode %lu\n",
-+                              (ulong)last_inode->i_ino);
-+              goto exit;
-+      }
-+      
-+      EXT3_I(pri)->i_flags |= EXT3_SNAP_PRI_FLAG; 
-+       
-+      /* we update the new cowed ino list end in memory */ 
-+      SB_LAST_COWED_INO(pri->i_sb) = cpu_to_le32(pri->i_ino);
-+        snap_debug("cowed_inode_list_end %lu, append ino=%lu\n",
-+                  last_inode->i_ino, pri->i_ino);
-+exit:
-+      if (last_inode)
-+              iput(last_inode);
-+
-+      return err;
-+}
-+
-+/* delelte the ino from cowed inode list */
-+static int delete_cowed_ino_from_list (handle_t *handle, struct inode *inode)
-+{
-+      ino_t prev_ino = 0, next_ino = 0;
-+      struct inode *prev_inode = NULL;
-+      struct inode *next_inode = NULL;
-+      struct snap_ea *snaps;
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      int err = 0;
-+
-+      err = ext3_xattr_get(inode, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                          buf, EXT3_MAX_SNAP_DATA);
-+      if (err < 0 || err > EXT3_MAX_SNAP_DATA) {
-+              snap_err("get attr inode %lu, error %d\n", inode->i_ino, err);
-+              goto err_exit;
-+      }
-+
-+      snaps = (struct snap_ea *) buf;
-+      next_ino = le32_to_cpu(snaps->next_ino);
-+        prev_ino = le32_to_cpu(snaps->prev_ino);
-+
-+      /* if this is the first cowed ino */
-+      if (inode->i_ino == le32_to_cpu(SB_FIRST_COWED_INO(inode->i_sb))) {
-+              SB_FIRST_COWED_INO(inode->i_sb) = cpu_to_le32(next_ino); 
-+              EXT3_I(inode)->i_flags &= ~EXT3_SNAP_PRI_FLAG;
-+              if (next_ino == 0)      
-+                        SB_LAST_COWED_INO(inode->i_sb) = 0;
-+      } else {
-+              if (!prev_ino)  
-+                      goto err_exit;
-+
-+              /* find previous inode and read its ea */
-+              prev_inode = iget(inode->i_sb, prev_ino);
-+                if (!prev_inode || is_bad_inode(prev_inode)) 
-+                        goto err_exit;
-+                            
-+              err = ext3_xattr_get(prev_inode, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                                 buf, EXT3_MAX_SNAP_DATA);
-+              if (err < 0 || err > EXT3_MAX_SNAP_DATA) {
-+                      snap_err("get attr inode %lu, error %d\n", prev_inode->i_ino, err);
-+                      goto err_exit;
-+              }
-+              
-+              /* make the previous inode point to the next inode,
-+               * but ignore errors because at current version we
-+               * didn't use the previous pionter */
-+              snaps = (struct snap_ea *) buf;
-+              snaps->next_ino = cpu_to_le32(next_ino);
-+
-+              snap_debug("delete ino %lu from list\n", inode->i_ino);
-+
-+              err = ext3_xattr_set(handle, prev_inode, EXT3_SNAP_INDEX, 
-+                                   EXT3_SNAP_ATTR, buf, EXT3_MAX_SNAP_DATA, 0);
-+              if (err < 0) {
-+                      snap_err("err %d setting ea for ino %lu\n", err, prev_inode->i_ino);
-+                      goto err_exit;
-+              }
-+
-+                if (next_ino == 0) {
-+                        SB_LAST_COWED_INO(inode->i_sb) = prev_ino;
-+                        goto err_exit;
-+                }
-+
-+              /* make the next inode point to the previous one */
-+              next_inode = iget(inode->i_sb, next_ino);
-+                if (!next_inode || is_bad_inode(next_inode))       
-+                        goto err_exit;
-+
-+              err = ext3_xattr_get(next_inode, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                                 buf, EXT3_MAX_SNAP_DATA);
-+              if (err < 0 || err > EXT3_MAX_SNAP_DATA) {
-+                      snap_err("set attr inode %lu, error %d\n", next_inode->i_ino, err);
-+                      goto err_exit;
-+              }
-+              snaps = ( struct snap_ea *) buf;
-+              snaps->prev_ino = cpu_to_le32(prev_ino);
-+
-+              err = ext3_xattr_set(handle, next_inode, EXT3_SNAP_INDEX, 
-+                                      EXT3_SNAP_ATTR, buf, EXT3_MAX_SNAP_DATA, 0);
-+              if (err < 0) {
-+                      snap_err("err %d setting attributes for ino %lu\n",
-+                                    err, next_inode->i_ino);
-+              }
-+      }
-+err_exit:
-+      iput(prev_inode);
-+      iput(next_inode);
-+      return err;
-+}
-+
-+static inline void lock_list(struct super_block *sb)
-+{
-+      down(&SB_SNAP_LIST_SEM(sb));
-+}
-+
-+static inline void unlock_list(struct super_block *sb)
-+{
-+      up(&SB_SNAP_LIST_SEM(sb));
-+}
-+
-+static int ext3_snap_feature (struct super_block *sb, int feature, int op) {
-+
-+      int rc = -EINVAL;
-+      handle_t *handle;
-+      switch (op) {
-+              case SNAP_SET_FEATURE:
-+                      handle = ext3_journal_start(sb->s_root->d_inode, 1);
-+                      lock_super(sb);
-+                      ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-+                      SB_FEATURE_COMPAT(sb) |= cpu_to_le32(feature);
-+                      sb->s_dirt = 1;
-+                      ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-+                      unlock_super(sb);
-+                      ext3_journal_stop(handle, sb->s_root->d_inode); 
-+                      break;
-+              case SNAP_CLEAR_FEATURE:
-+                      handle = ext3_journal_start(sb->s_root->d_inode, 1);
-+                      lock_super(sb);
-+                      ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
-+                      SB_FEATURE_COMPAT(sb) &= ~cpu_to_le32(feature); 
-+                      ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
-+                      sb->s_dirt = 1;
-+                      unlock_super(sb);
-+                      ext3_journal_stop(handle, sb->s_root->d_inode); 
-+                      break;
-+              case SNAP_HAS_FEATURE:
-+                      /*FIXME should lock super or not*/
-+                      rc = SNAP_HAS_COMPAT_FEATURE(sb, feature);
-+                      break;
-+              default:
-+                      break;
-+      }
-+      return rc;
-+}
-+
-+#ifdef _DEVICE_FAIL_TEST
-+/*FIXME later*/
-+extern int loop_discard_io(kdev_t dev, long arg);
-+/*
-+ * modify failpos to let loop fail at certain point
-+ * let pos=0 mean no fail point
-+ */
-+static int failpos = 0;
-+#define loopfail(pos) \
-+      do{                                                                     \
-+              if( pos == failpos ){                                           \
-+                      int i;                                                  \
-+                      printk(KERN_EMERG "SNAP; hit fail point %d\n", failpos);\
-+                      for( i=0; i<15; i++ )                                   \
-+                              loop_discard_io( MKDEV(7,i), 1 );               \
-+              }                                                               \
-+      }while(0)
-+#else
-+#define loopfail(pos) do{}while(0)
-+#endif
-+
-+/* Save the indirect inode in the snapshot table of the primary inode. */
-+static int ext3_set_indirect(struct inode *pri, int index, ino_t ind_ino, ino_t parent_ino )
-+{
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      struct snap_ea *snaps;
-+      int err = 0, inlist = 1;
-+      int ea_size;
-+      handle_t *handle = NULL;
-+      
-+      snap_debug("(ino %lu, parent %lu): saving ind %lu to index %d\n", 
-+                      pri->i_ino, parent_ino, ind_ino, index);
-+
-+      if (index < 0 || index > MAX_SNAPS || !pri)
-+              return -EINVAL;
-+      /* need lock the list before get_attr() to avoid race */
-+      lock_list(pri->i_sb);
-+      /* read ea at first */
-+      err = ext3_xattr_get(pri, EXT3_SNAP_INDEX ,EXT3_SNAP_ATTR,
-+                                        buf, EXT3_MAX_SNAP_DATA);
-+      if (err == -ENODATA || err == -ENOATTR) {
-+              snap_debug("no extended attributes - zeroing\n");
-+              memset(buf, 0, EXT3_MAX_SNAP_DATA);
-+              /* XXX
-+               * To judge a inode in list, we only see if it has snap ea.
-+               * So take care of snap ea of primary inodes very carefully.
-+               * Is it right in snapfs EXT3, check it later?
-+               */
-+              inlist = 0; 
-+      } else if (err < 0 || err > EXT3_MAX_SNAP_DATA) {
-+              goto out_unlock;
-+      }
-+      
-+      handle = ext3_journal_start(pri, SNAP_SETIND_TRANS_BLOCKS);
-+      if(!handle) {
-+              err = PTR_ERR(handle);
-+              goto out_unlock;
-+      }
-+      
-+      snaps = (struct snap_ea *)buf;
-+      snaps->ino[index] = cpu_to_le32 (ind_ino);
-+      ea_size = EXT3_MAX_SNAP_DATA;
-+
-+      set_parent_ino(snaps, ea_size, index, cpu_to_le32(parent_ino));
-+
-+      snap_debug("saving attributes\n");
-+
-+      if (inlist) {
-+              err = ext3_xattr_set(handle, pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                   buf, EXT3_MAX_SNAP_DATA, 0);
-+      }
-+      else {
-+              /* This will also write the ea for the pri inode, like above */
-+              err = insert_cowed_ino_to_list(handle, pri, buf);
-+      }
-+      ext3_mark_inode_dirty(handle, pri);
-+      ext3_journal_stop(handle, pri);
-+out_unlock:
-+      unlock_list(pri->i_sb);
-+      return err;
-+}
-+
-+/*
-+ * is_redirector - determines if a primary inode is a redirector
-+ * @inode: primary inode to test
-+ *
-+ * Returns 1 if the inode is a redirector, 0 otherwise.
-+ */
-+static int is_redirector(struct inode *inode)
-+{
-+      int is_redirector = 0;
-+      int rc;
-+
-+      rc = ext3_xattr_get(inode, EXT3_SNAP_INDEX ,EXT3_SNAP_ATTR,
-+                                        NULL, 0);
-+        if (rc > 0 && rc <= MAX_SNAP_DATA)
-+                is_redirector = 1;
-+        snap_debug("inode %lu %s redirector\n", inode->i_ino, 
-+                      is_redirector ? "is" : "isn't");
-+        return is_redirector;
-+}
-+
-+/*if it's indirect inode or not */
-+static int is_indirect(struct inode *inode)
-+{
-+      if (EXT3_I(inode)->i_flags |= EXT3_COW_FL)
-+              return 1;
-+      else
-+              return 0;
-+}
-+/*
-+ * Copy inode metadata from one inode to another, excluding blocks and size.
-+ * FIXME do we copy EA data - ACLs and such (excluding snapshot data)?
-+ */
-+static void ext3_copy_meta(handle_t *handle, struct inode *dst, struct inode *src)
-+{
-+      int size;
-+      
-+      dst->i_mode = src->i_mode;
-+      dst->i_nlink = src->i_nlink;
-+      dst->i_uid = src->i_uid;
-+      dst->i_gid = src->i_gid;
-+      dst->i_atime = src->i_atime;
-+      dst->i_mtime = src->i_mtime;
-+      dst->i_ctime = src->i_ctime;
-+//    dst->i_version = src->i_version;
-+      dst->i_attr_flags = src->i_attr_flags;
-+      dst->i_generation = src->i_generation;
-+      dst->u.ext3_i.i_dtime = src->u.ext3_i.i_dtime;
-+      dst->u.ext3_i.i_flags = src->u.ext3_i.i_flags | EXT3_COW_FL;
-+#ifdef EXT3_FRAGMENTS
-+      dst->u.ext3_i.i_faddr = src->u.ext3_i.i_faddr;
-+      dst->u.ext3_i.i_frag_no = src->u.ext3_i.i_frag_no;
-+      dst->u.ext3_i.i_frag_size = src->u.ext3_i.i_frag_size;
-+#endif
-+      if ((size = ext3_xattr_list(src, NULL, 0)) > 0) {
-+              char names[size];
-+              char *name;
-+              int namelen;
-+
-+              if (ext3_xattr_list(src, names, 0) < 0)
-+                      return;
-+              /*
-+               * the list of attribute names are stored as NUL terminated
-+               * strings, with a double NUL string at the end.
-+               */
-+              name = names;
-+              while ((namelen = strlen(name))) {
-+                      int attrlen;
-+                      char *buf;
-+                      
-+                      /* don't copy snap data */
-+                      if (!strcmp(name, EXT3_SNAP_ATTR)) {
-+                              snap_debug("skipping %s item\n", name);
-+                              continue;
-+                      }
-+                      snap_debug("copying %s item\n", name);
-+                      attrlen = ext3_xattr_get(src, EXT3_SNAP_INDEX, 
-+                                                    EXT3_SNAP_ATTR, NULL, 0);
-+                      if (attrlen < 0)
-+                              continue;
-+                      if ((buf = kmalloc(attrlen, GFP_ATOMIC)) == NULL)
-+                              break;
-+                      if (ext3_xattr_get(src, EXT3_SNAP_INDEX,
-+                                              EXT3_SNAP_ATTR, buf, attrlen) < 0)
-+                              continue;       
-+                      if (ext3_xattr_set(handle, dst, EXT3_SNAP_INDEX,
-+                                              EXT3_SNAP_ATTR, buf, attrlen, 0) < 0)
-+                              break;
-+                      kfree(buf);
-+                      name += namelen + 1; /* skip name and trailing NUL */
-+              }
-+      }
-+}
-+
-+static inline int ext3_has_ea(struct inode *inode)
-+{
-+       return (EXT3_I(inode)->i_file_acl != 0);
-+}
-+/* XXX This function has a very bad effect to 
-+ * the performance of filesystem,
-+ * will find another way to fix it 
-+ */
-+static void fs_flushinval_pages(handle_t *handle, struct inode* inode)
-+{
-+      if (inode->i_blocks > 0 && inode->i_mapping) { 
-+              fsync_inode_data_buffers(inode);
-+       //     ext3_block_truncate_page(handle, inode->i_mapping, inode->i_size);
-+              truncate_inode_pages(inode->i_mapping, 0);
-+      }
-+}
-+
-+/* ext3_migrate_data2:
-+ *  MOVE all the data blocks from inode src to inode dst as well as
-+ *  COPY all attributes(meta data) from inode src to inode dst.
-+ *  For extended attributes(EA), we COPY all the EAs but skip the Snap EA from src to dst.
-+ *  If the dst has Snap EA, then we CAN'T overwrite it. We CAN'T copy the src Snap EA.
-+ *  XXX for EA, can we change it to MOVE all the EAs(exclude Snap EA) to dst and copy it back to src ?
-+ *  This is for LAN free backup later.
-+ */
-+
-+static int ext3_migrate_data (handle_t *handle, struct inode *dst, struct inode *src)
-+{
-+      unsigned long err = 0;
-+      /* 512 byte disk blocks per inode block */
-+      int bpib = src->i_sb->s_blocksize >> 9;
-+      
-+      if((!dst) || (!src)) 
-+              return -EINVAL;
-+      
-+      if (dst->i_ino == src->i_ino)
-+              return 0;
-+
-+      fs_flushinval_pages(handle, src);
-+      
-+      ext3_copy_meta(handle, dst, src);
-+
-+      snap_debug("migrating data blocks from %lu to %lu\n", src->i_ino, dst->i_ino);
-+      /* Can't check blocks in case of EAs */
-+        memcpy(EXT3_I(dst)->i_data, EXT3_I(src)->i_data,
-+                            sizeof(EXT3_I(src)->i_data));
-+        memset(EXT3_I(src)->i_data, 0, sizeof(EXT3_I(src)->i_data));
-+
-+      ext3_discard_prealloc(src);
-+
-+      dst->i_size = EXT3_I(dst)->i_disksize = EXT3_I(src)->i_disksize;
-+        src->i_size = EXT3_I(src)->i_disksize = 0;
-+
-+      dst->i_blocks = src->i_blocks;
-+        src->i_blocks = 0;
-+        /*  Check EA blocks here to modify i_blocks correctly */
-+        if(ext3_has_ea (src)) {
-+              src->i_blocks += bpib;
-+              if( ! ext3_has_ea (dst) )
-+                      if( dst->i_blocks >= bpib )
-+                              dst->i_blocks -= bpib;
-+      } else {
-+              if( ext3_has_ea (dst))
-+                      dst->i_blocks += bpib;
-+      }
-+      
-+      snap_debug("migrate data from ino %lu to ino %lu\n", 
-+              src->i_ino, dst->i_ino);        
-+        ext3_mark_inode_dirty(handle, src);
-+        ext3_mark_inode_dirty(handle, dst);
-+
-+
-+      return SNAP_ERROR(err);
-+}
-+
-+/**
-+ * ext3_get_indirect - get a specific indirect inode from a primary inode
-+ * @primary: primary (direct) inode
-+ * @table: table of @slot + 1 indices in reverse chronological order
-+ * @slot: starting slot number to check for indirect inode number
-+ *
-+ * We locate an indirect inode from a primary inode using the redirection
-+ * table stored in the primary inode.  Because the desired inode may actually
-+ * be in a "newer" slot number than the supplied slot, we are given a table
-+ * of indices in chronological order to search for the correct inode number.
-+ * We walk table from @slot to 0 looking for a non-zero inode to load.
-+ *
-+ * To only load a specific index (and fail if it does not exist), you can
-+ * pass @table = NULL, and the index number in @slot.  If @slot == 0, the
-+ * primary inode data is returned.
-+ *
-+ * We return a pointer to an inode, or an error.  If the indirect inode for
-+ * the given index does not exist, NULL is returned.
-+ */
-+static struct inode *ext3_get_indirect(struct inode *primary, int *table,
-+                                     int slot)
-+{
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      struct snap_ea *snaps;
-+      ino_t ino;
-+      struct inode *inode = NULL;
-+      int err = 0, index = 0;
-+
-+      if (slot < 0 || slot > EXT3_MAX_SNAPS || !primary)
-+              return NULL;
-+        
-+      snap_debug("ino %lu, table %p, slot %d\n", primary->i_ino, table,slot);
-+      
-+      err = ext3_xattr_get(primary, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR, 
-+                              buf, EXT3_MAX_SNAP_DATA); 
-+      if (err == -ENODATA) {
-+              slot = 0;
-+      } else if (err < 0) {
-+              snap_debug(" attribute read error\n");
-+              return NULL;
-+      }
-+      snaps = (struct snap_ea *)buf;
-+
-+      /* if table is NULL and there is a slot */
-+      if( !table && slot ) {
-+              index = slot;
-+              ino = le32_to_cpu ( snaps->ino[index] );
-+              if(ino) inode = iget(primary->i_sb, ino);
-+              goto err_free;
-+      }
-+      /* if table is not NULL */
-+      while ( !inode && slot > 0) {
-+              index = table[slot];
-+              ino = le32_to_cpu ( snaps->ino[index] );
-+
-+              snap_debug("snap inode at slot %d is %lu\n", slot, ino);
-+              if (!ino) {
-+                      --slot;
-+                      continue;
-+              }
-+              inode = iget(primary->i_sb, ino);
-+              goto err_free;
-+      }
-+      if( slot == 0 && table ) {
-+              snap_debug("redirector not found, using primary\n");
-+              inode = iget(primary->i_sb, primary->i_ino);
-+      }
-+err_free:
-+      return inode;
-+}
-+
-+/* get the indirect ino at index of the primary inode 
-+ * return value:      postive:        indirect ino number
-+ *                    negative or 0:  error
-+ */
-+static ino_t ext3_get_indirect_ino(struct inode *primary, int index)
-+{
-+        char buf[EXT3_MAX_SNAP_DATA];
-+        struct snap_ea *snaps;
-+        ino_t ino = 0;
-+        int err;
-+
-+        if (index < 0 || index > EXT3_MAX_SNAPS || !primary)
-+                return 0;
-+
-+      err = ext3_xattr_get(primary, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR, 
-+                              buf, EXT3_MAX_SNAP_DATA); 
-+        if (err == -ENOATTR) {
-+                ino = -ENOATTR;
-+              goto err_free;
-+        } else if (err < 0) {
-+                snap_err(EXT3_SNAP_ATTR " attribute read error\n");
-+                ino = -EINVAL;
-+              goto err_free;
-+        }
-+
-+        snaps = (struct snap_ea *)buf;
-+        ino = le32_to_cpu (snaps->ino[index]);
-+        snap_debug("snap ino for %ld at index %d is %lu\n",
-+                       primary->i_ino, index, ino);
-+err_free:
-+        return ino;
-+}
-+/* ext3_copy_block - copy one data block from inode @src to @dst.
-+   No lock here.  User should do the lock.
-+   User should check the return value to see if the result is correct.
-+   Return value:
-+   1:    The block has been copied successfully
-+   0:    No block is copied, usually this is because src has no such blk
-+  -1:    Error
-+*/
-+
-+static int ext3_copy_block (struct inode *dst, struct inode *src, int blk) 
-+{
-+      struct buffer_head *bh_dst = NULL, *bh_src = NULL;
-+      int err = 0;
-+      handle_t *handle = NULL;
-+
-+      
-+      snap_debug("copy blk %d from %lu to %lu \n", blk, src->i_ino, dst->i_ino);
-+      /* 
-+       * ext3_getblk() require handle!=NULL
-+       */
-+      if (S_ISREG(src->i_mode))
-+              return 0;
-+
-+      handle = ext3_journal_start(dst, SNAP_COPYBLOCK_TRANS_BLOCKS);
-+      if( !handle )
-+              return -1;
-+
-+      bh_src = ext3_bread(handle, src, blk, 0, &err);
-+      if (!bh_src) {
-+              snap_err("error for src blk %d, error %d\n", blk, err);
-+              goto exit_relese;
-+      }
-+      bh_dst = ext3_getblk(handle, dst, blk, 1, &err);
-+      if (!bh_dst) {
-+              snap_err("error for dst blk %d, error %d\n", blk, err);
-+              err = -ENOSPC;
-+              goto exit_relese;
-+      }
-+      snap_debug("copy block %lu to %lu (%ld bytes)\n",
-+                 bh_src->b_blocknr, bh_dst->b_blocknr, 
-+                 src->i_sb->s_blocksize);
-+
-+      ext3_journal_get_write_access(handle, bh_dst);
-+
-+      memcpy(bh_dst->b_data, bh_src->b_data, src->i_sb->s_blocksize);
-+
-+      ext3_journal_dirty_metadata(handle, bh_dst);
-+      err = 1;
-+exit_relese:
-+      if (bh_src) brelse(bh_src);
-+      if (bh_dst) brelse(bh_dst);
-+      if (handle)     
-+              ext3_journal_stop(handle, dst);
-+      return err;
-+}
-+
-+#ifdef EXT3_ENABLE_SNAP_ORPHAN
-+/*
-+ * add one inode to superblock's snap_orphan chain
-+ * only add on-disk data for simplicity
-+ */
-+static void add_snap_orphan(handle_t *handle, struct inode *pri, struct inode *ind)
-+{
-+      struct ext3_sb_info *sb = &pri->i_sb->u.ext3_sb;
-+      struct ext3_iloc iloc;
-+      
-+      if( ext3_get_inode_loc(ind, &iloc) ){
-+              snap_debug("--- get ind loc fail\n");
-+              brelse(iloc.bh);
-+              return;
-+      }
-+
-+      snap_debug("add new ind inode %lu into orphan list,"
-+                      " primary %lu, last orphan %u\n",
-+                      ind->i_ino, pri->i_ino, 
-+                      sb->s_es->s_last_snap_orphan);
-+      lock_super(pri->i_sb);
-+      iloc.raw_inode->i_next_snap_orphan = sb->s_es->s_last_snap_orphan;
-+      iloc.raw_inode->i_snap_primary = pri->i_ino;
-+      ext3_mark_inode_dirty(handle, ind);
-+
-+      ext3_journal_get_write_access(handle, sb->s_sbh);
-+      sb->s_es->s_last_snap_orphan = ind->i_ino;
-+      pri->i_sb->s_dirt = 1;
-+      ext3_journal_dirty_metadata(handle, sb->s_sbh);
-+      unlock_super(pri->i_sb);
-+      brelse(iloc.bh);
-+}
-+
-+/*
-+ * counterpart of add_snap_orphan
-+ */
-+static void remove_snap_orphan(handle_t *handle, struct inode *ind)
-+{
-+      struct ext3_sb_info *sb = &ind->i_sb->u.ext3_sb;
-+      struct inode *pre = NULL, *inode = NULL;
-+      struct ext3_iloc iloc, pre_iloc;
-+      ino_t ino;
-+
-+      lock_super(ind->i_sb);
-+      for(ino = sb->s_es->s_last_snap_orphan; ino; ){
-+              snap_debug("found an orphan, ino=%lu\n", ino);
-+              inode = iget( ind->i_sb, ino );
-+              if( !inode ){
-+                      snap_debug("iget %lu fail\n", ino);
-+                      break;
-+              }
-+              if( ext3_get_inode_loc(inode, &iloc) ){
-+                      snap_debug("get_inode_loc %lu fail\n", ino);
-+                      break;
-+              }
-+              if( ino == ind->i_ino ){
-+                      if( !pre ){
-+                              snap_debug("found at head of orphan chain\n");
-+                              ext3_journal_get_write_access(handle, sb->s_sbh);
-+                              sb->s_es->s_last_snap_orphan =
-+                                      iloc.raw_inode->i_next_snap_orphan;
-+                              ext3_journal_dirty_metadata(handle, sb->s_sbh);
-+                              snap_debug("set new last orphan: %u\n",
-+                                              sb->s_es->s_last_snap_orphan);
-+                              break;
-+                      }
-+                      else {
-+                              snap_debug("found in middle of orphan chain\n");
-+                              if( ext3_get_inode_loc(pre, &pre_iloc) ){
-+                                      snap_err("get pre_inode loc %lu fail\n", pre->i_ino);
-+                                      break;
-+                              }
-+                              pre_iloc.raw_inode->i_next_snap_orphan =
-+                                      iloc.raw_inode->i_next_snap_orphan;
-+                              ext3_mark_inode_dirty(handle, pre);
-+                              brelse(pre_iloc.bh);
-+                              break;
-+                      }
-+              }
-+              iput(pre);
-+              pre = inode;
-+              ino = iloc.raw_inode->i_next_snap_orphan;
-+              brelse(iloc.bh);
-+      }
-+      iput(pre);
-+      iput(inode);
-+      unlock_super(ind->i_sb);
-+      brelse(iloc.bh);
-+}
-+
-+/*
-+ * FIXME: how about crashs again during recovery?
-+ */
-+void snap_orphan_cleanup(struct super_block *sb)
-+{
-+      ino_t ind_ino, pri_ino;
-+      struct inode *ind = NULL, *pri = NULL;
-+      struct ext3_iloc ind_iloc;
-+
-+      if( (ind_ino = sb->u.ext3_sb.s_es->s_last_snap_orphan) == 0 ){
-+              snap_debug("snap_orphan_cleanup: nothing to do\n");
-+              return;
-+      }
-+
-+      snap_debug("------ begin cleanup snap orphans ------\n");
-+      do{
-+              ind = iget( sb, ind_ino );
-+              if( !ind ){
-+                      snap_err("snap_orphan_cleanup: get "
-+                                      "ind %lu fail\n", ind_ino);
-+                      break;
-+              }
-+
-+              if( ext3_get_inode_loc(ind, &ind_iloc) ){
-+                      snap_err("snap_orphan_cleanup: get "
-+                                      "iloc %lu fail\n", ind_ino);
-+                      iput( ind );
-+                      break;
-+              }
-+
-+              ind_ino = sb->u.ext3_sb.s_es->s_last_snap_orphan = 
-+                      ind_iloc.raw_inode->i_next_snap_orphan;
-+              pri_ino = ind_iloc.raw_inode->i_snap_primary;
-+
-+              pri = iget( sb, pri_ino );
-+              if( !pri ){
-+                      snap_err("snap_orphan_cleanup: get primary "
-+                                      "%lu fail\n", pri_ino);
-+                      iput( ind );
-+              }else 
-+                      restore_snap_inode(pri, ind);
-+      }while( ind_ino );
-+      snap_debug("------ end cleanup snap orphans ------\n");
-+
-+      sb->u.ext3_sb.s_es->s_last_snap_orphan = 0;
-+      sb->s_dirt = 1;
-+}
-+#endif
-+/*
-+ * reserse operation of set_indirect()
-+ * we should determine whether we had put pri into primary inode chain,
-+ * if not, don't touch it
-+ */
-+static void unset_indirect(handle_t *handle, struct inode *pri, struct inode *ind)
-+{
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      struct snap_ea *snaps;
-+      int err, alone=1, index, found;
-+
-+      snap_debug("pri %lu, ind %lu\n", pri->i_ino, ind->i_ino);
-+      err = ext3_xattr_get(pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR, buf,
-+                              EXT3_MAX_SNAP_DATA);
-+      if ( err < 0 ) {
-+              if( err == -ENOATTR ){
-+                      snap_debug("primary inode has not EA\n");
-+              }
-+              else{
-+                      snap_debug("get EA error on primary inode,"
-+                                      "returned value %d\n", err);
-+              }
-+              goto exit;
-+      }
-+
-+      /* find ind's item in the ea */
-+      snaps = (struct snap_ea*)buf;
-+      for(index=EXT3_MAX_SNAPS-1, found=-1; index>=0; index--) {
-+              if( snaps->ino[index] == ind->i_ino )
-+                      found = index;
-+              else if( snaps->ino[index] )
-+                      alone = 0;
-+      }
-+
-+      if(found >= 0) {
-+              snap_debug("remove from primary inode's EA\n");
-+              snaps->ino[found] = 0;
-+              snaps->parent_ino[found] = 0;
-+              ext3_xattr_set(handle, pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                             buf, EXT3_MAX_SNAP_DATA, 0);
-+              if(alone) {
-+                      snap_debug("delete from primary inodes chain\n");
-+                      lock_list(pri->i_sb);
-+                      delete_cowed_ino_from_list(handle, pri);
-+                      unlock_list(pri->i_sb);
-+              }
-+      }else{
-+              snap_debug("didn't found ind in pri's EA, do nothing\n");
-+      }
-+
-+exit:
-+      return;
-+}
-+
-+
-+/*
-+ * restore all data in @ind to @pri after free data blocks of @pri.
-+ * then release @ind
-+ */
-+static void restore_snap_inode(struct inode *pri, struct inode *ind)
-+{
-+      handle_t *handle;
-+      struct inode *tmp;
-+
-+      snap_debug("restore from indirect %lu to primary %lu\n",
-+                      ind->i_ino, pri->i_ino);
-+
-+      handle = ext3_journal_start(pri, SNAP_RESTOREORPHAN_TRANS_BLOCKS);
-+      if( !handle )
-+              return;
-+
-+      /* first: taken from pri's ea, or from fs-wide primary inode chain */
-+      unset_indirect(handle, pri, ind);
-+
-+      /* second: throw out half-copied data in pri */
-+      if( pri->i_blocks ){
-+              tmp = ext3_new_inode(handle, pri, (int)pri->i_mode, 0);
-+              if( !tmp ){
-+                      snap_debug("ext3_new_inode error\n");
-+                      goto exit;
-+              }
-+
-+              ext3_migrate_data(handle, tmp, pri);
-+              snap_debug("freeing half-copied %lu blocks\n", tmp->i_blocks );
-+              tmp->i_nlink = 0;
-+              iput( tmp );
-+      }
-+
-+      /* third: restore ind inode to pri inode */
-+      snap_debug("restore %lu blocks to primary inode %lu\n",
-+                      ind->i_blocks, pri->i_ino);
-+      ext3_migrate_data(handle, pri, ind);
-+
-+      /* final: delete ind inode */
-+      ind->i_nlink = 0;
-+      iput( ind );
-+      iput( pri );
-+
-+exit:
-+      ext3_journal_stop(handle, pri);
-+}
-+
-+static handle_t * ext3_copy_data(handle_t *handle, struct inode *dst,
-+                              struct inode *src, int *has_orphan)
-+{
-+      unsigned long blocks, blk, cur_blks;
-+      int low_credits, save_ref;
-+
-+      blocks =(src->i_size + src->i_sb->s_blocksize-1) >>
-+                      src->i_sb->s_blocksize_bits;
-+      low_credits = handle->h_buffer_credits - SNAP_BIGCOPY_TRANS_BLOCKS;
-+
-+      snap_debug("%lu blocks need to be copied,"
-+                      "low credits limit %d\n", blocks, low_credits);
-+      for (blk = 0, cur_blks= dst->i_blocks; blk < blocks; blk++) {
-+              if (!ext3_bmap(src->i_mapping, blk))
-+                      continue;
-+              if(handle->h_buffer_credits <= low_credits) {
-+                      int needed = (blocks - blk) * EXT3_DATA_TRANS_BLOCKS;
-+                      if (needed > 4 * SNAP_COPYBLOCK_TRANS_BLOCKS)
-+                              needed = 4 * SNAP_COPYBLOCK_TRANS_BLOCKS;
-+                      if (journal_extend(handle, needed)) {
-+                              snap_debug("create_indirect:fail to extend "
-+                                              "journal, restart trans\n");
-+                              loopfail( 3 );
-+                              if(!*has_orphan) {
-+                                      snap_debug("add orphan ino %lu nlink %d to orphan list \n", 
-+                                                 dst->i_ino, dst->i_nlink); 
-+#ifdef EXT3_ENABLE_SNAP_ORPHAN
-+                                      add_snap_orphan(handle, dst, src);
-+#else
-+                                      ext3_orphan_add(handle, dst);
-+#endif
-+                                      *has_orphan = 1;
-+                              }
-+                              dst->u.ext3_i.i_disksize =
-+                                      blk * dst->i_sb->s_blocksize;
-+                              dst->i_blocks = cur_blks;
-+                              dst->i_mtime = CURRENT_TIME;
-+                              ext3_mark_inode_dirty(handle, dst);
-+
-+                              /*
-+                               * We can be sure the last handle was stoped
-+                               * ONLY if the handle's reference count is 1
-+                               */
-+                              save_ref = handle->h_ref;
-+                              handle->h_ref = 1;
-+                              if( ext3_journal_stop(handle, dst) ){
-+                                      snap_err("fail to stop journal\n");
-+                                      handle = NULL;
-+                                      break;
-+                              }
-+                              loopfail ( 4 );
-+                              handle = ext3_journal_start(dst,
-+                                              low_credits + needed);
-+                              if( !handle ){
-+                                      snap_err("fail to restart handle\n");
-+                                      break;
-+                              }
-+                              handle->h_ref = save_ref;
-+                      }
-+              }
-+              if (ext3_copy_block( dst, src, blk) < 0 )
-+                      break;
-+              cur_blks += dst->i_sb->s_blocksize / 512;
-+      }
-+      dst->i_size = dst->u.ext3_i.i_disksize = src->i_size;
-+
-+      return handle;
-+}
-+
-+static int ext3_set_generation(struct inode *inode, unsigned long gen)
-+{
-+      handle_t *handle;
-+      int err;
-+
-+      handle = ext3_journal_start(inode, EXT3_XATTR_TRANS_BLOCKS);
-+
-+      err = ext3_xattr_set(handle, inode, EXT3_SNAP_INDEX, EXT3_SNAP_GENERATION_ATTR,
-+                           (char*)&gen, sizeof(int), 0);
-+      if (err < 0) {
-+              snap_err("ino %lu, set_ext_attr err %d\n", inode->i_ino, err);
-+              return err;
-+      }
-+      
-+      ext3_journal_stop(handle, inode);
-+      return 0;
-+}
-+
-+static int ext3_get_generation(struct inode *inode)
-+{
-+      int err, gen;
-+
-+      err = ext3_xattr_get(inode, EXT3_SNAP_INDEX, EXT3_SNAP_GENERATION_ATTR,
-+                           (char*)&gen, sizeof(gen));
-+      if (err < 0) {
-+              if (err == -ENODATA) {
-+                      return 0;
-+              } else {
-+                      snap_err("can not get generation from %lu \n", inode->i_ino);
-+                      return err;
-+              }
-+      }
-+      return gen;
-+}
-+/**
-+ * ext3_create_indirect - copy data, attributes from primary to new indir inode
-+ * @pri: primary (source) inode
-+ * @index: index in snapshot table where indirect inode should be stored
-+ * @delete: flag that the primary inode is being deleted
-+ *
-+ * We copy all of the data blocks from the @*src inode to the @*dst inode, as
-+ * well as copying the attributes from @*src to @*dst.  If @delete == 1, then
-+ * the primary inode will only be a redirector and will appear deleted.
-+ *
-+ * FIXME do we move EAs, only non-snap EAs, what?
-+ * FIXME we could do readpage/writepage, but we would have to handle block
-+ *       allocation then, and it ruins sparse files for 1k/2k filesystems,
-+ *       at the expense of doing a memcpy.
-+ */
-+
-+static struct inode *ext3_create_indirect(
-+                      struct inode *pri, 
-+                      int index,
-+                      unsigned int gen,    
-+                      ino_t parent_ino,
-+                      int del)
-+{
-+      struct inode *ind;
-+      handle_t *handle = NULL;
-+      int err = 0;
-+      int has_orphan = 0;
-+
-+      if( pri == pri->i_sb->u.ext3_sb.s_journal_inode ){
-+              printk( KERN_EMERG "TRY TO COW JOUNRAL\n");
-+              return NULL;
-+      }
-+      snap_debug("creating indirect inode for %lu at index %d, %s pri\n",
-+                      pri->i_ino, index, del ? "deleting" : "preserve");
-+
-+      ind = ext3_get_indirect(pri, NULL, index);
-+
-+      loopfail( 1 );
-+
-+      handle = ext3_journal_start(pri, SNAP_CREATEIND_TRANS_BLOCKS);
-+      if( !handle )
-+              return NULL;
-+      /* XXX ? We should pass an err argument to get_indirect and precisely
-+       * detect the errors, for some errors, we should exit right away.
-+       */
-+
-+      /* if the option is SNAP_DEL_PRI_WITH_IND and there is an indirect, 
-+       * we just free the primary data blocks and mark this inode delete
-+       */
-+      if((del) && ind && !IS_ERR(ind)) {
-+              struct inode *tmp;
-+              /* for directory, we don't free the data blocks, 
-+               * or ext3_rmdir will report errors "bad dir, no data blocks" 
-+               */
-+              snap_debug("del==SNAP_DEL_PRI_WITH_IND && ind\n");
-+              if(!S_ISDIR(pri->i_mode)) {     
-+                      /*Here delete the data of that pri inode.
-+                       * FIXME later, should throw the blocks of 
-+                       * primary inode directly
-+                       */
-+                      tmp = ext3_new_inode(handle, pri, (int)pri->i_mode, 0);
-+                      if(tmp) {
-+                              down(&tmp->i_sem);
-+                              ext3_migrate_data(handle, tmp, pri);
-+                              up(&tmp->i_sem);
-+                              tmp->i_nlink = 0;
-+                              iput(tmp);      
-+                      }
-+                      else 
-+                              snap_err("ext3_new_inode error\n");
-+
-+                      pri->i_nlink = 1;
-+              }
-+
-+              pri->u.ext3_i.i_dtime = CURRENT_TIME;
-+              ext3_mark_inode_dirty(handle, pri);
-+              err = 0;
-+              goto exit;
-+      }
-+
-+      if (ind && !IS_ERR(ind)) {
-+              snap_debug("existing indirect ino %lu for %lu: index %d\n",
-+                        ind->i_ino, pri->i_ino, index);
-+              err = 0;
-+              goto exit;
-+      }
-+      /* XXX: check this, ext3_new_inode, the first arg should be "dir" */ 
-+      ind = ext3_new_inode(handle, pri, (int)pri->i_mode, 0);
-+      if (!ind)
-+              goto exit;
-+
-+      loopfail( 2 );
-+
-+      snap_debug("got new inode %lu\n", ind->i_ino);
-+      ind->i_rdev = pri->i_rdev;
-+      ind->i_op = pri->i_op;
-+      ext3_set_generation(ind, (unsigned long)gen);
-+      /* If we are deleting the primary inode, we want to ensure that it is
-+       * written to disk with a non-zero link count, otherwise the next iget
-+       * and iput will mark the inode as free (which we don't want, we want
-+       * it to stay a redirector).  We fix this in ext3_destroy_indirect()
-+       * when the last indirect inode is removed.
-+       *
-+       * We then do what ext3_delete_inode() does so that the metadata will
-+       * appear the same as a deleted inode, and we can detect it later.
-+       */
-+      if (del) {
-+              snap_debug("deleting primary inode\n");
-+              
-+              down(&ind->i_sem);
-+              err = ext3_migrate_data(handle, ind, pri);
-+              if (err)
-+                      goto exit_unlock;
-+
-+              err = ext3_set_indirect(pri, index, ind->i_ino, parent_ino);
-+              if (err)
-+                      goto exit_unlock;
-+
-+              /* XXX for directory, we copy the block back 
-+               * or ext3_rmdir will report errors "bad dir, no data blocks" 
-+               */
-+              if( S_ISDIR(pri->i_mode)) {
-+                      handle = ext3_copy_data(handle, pri, ind, &has_orphan);
-+                      if(!handle) {
-+                              err = -EINVAL;
-+                              goto exit_unlock;
-+                      }
-+              }
-+
-+              pri->u.ext3_i.i_flags |= EXT3_DEL_FL;
-+              ind->u.ext3_i.i_flags |= EXT3_COW_FL;
-+              if(S_ISREG(pri->i_mode)) pri->i_nlink = 1;
-+              pri->u.ext3_i.i_dtime = CURRENT_TIME;
-+              //pri->u.ext3_i.i_generation++;
-+              ext3_mark_inode_dirty(handle, pri);
-+              ext3_mark_inode_dirty(handle, ind);
-+              up(&ind->i_sem);
-+      } else {
-+              down(&ind->i_sem);
-+              err = ext3_migrate_data(handle, ind, pri);
-+              if (err)
-+                      goto exit_unlock;
-+
-+              /* for regular files we do blocklevel COW's maybe */
-+              if (EXT3_HAS_COMPAT_FEATURE(pri->i_sb, EXT3_FEATURE_COMPAT_BLOCKCOW)
-+                      && S_ISREG(pri->i_mode)) {
-+
-+                      snap_debug("ino %lu, do block cow\n",pri->i_ino);
-+                      /* because after migrate_data , pri->i_size is 0 */
-+                      pri->i_size = ind->i_size;
-+              }
-+              else {
-+                      int bpib = pri->i_sb->s_blocksize >> 9;
-+                      snap_debug("ino %lu, do file cow\n", pri->i_ino);
-+
-+                      /* XXX: can we do this better? 
-+                       * If it's a fast symlink, we should copy i_data back!
-+                       * The criteria to determine a fast symlink is:
-+                       * 1) it's a link and its i_blocks is 0
-+                       * 2) it's a link and its i_blocks is bpib ( the case 
-+                       *    it has been cowed and has ea )
-+                       */
-+                        if( S_ISLNK(ind->i_mode) &&
-+                         ((ind->i_blocks == 0) || (ext3_has_ea(ind) && ind->i_blocks == bpib))) {
-+                              snap_debug("ino %lu is fast symlink\n", pri->i_ino);
-+                              memcpy(EXT3_I(pri)->i_data, EXT3_I(ind)->i_data,
-+                                     sizeof(EXT3_I(ind)->i_data));
-+                              pri->i_size = ind->i_size;
-+                      }
-+                      else {
-+                              handle = ext3_copy_data(handle, pri, ind, &has_orphan);
-+                              if (!handle)
-+                                      goto exit_unlock;
-+                      }
-+              }
-+              /* set cow flag for ind */
-+              ind->u.ext3_i.i_flags |= EXT3_COW_FL;
-+              pri->u.ext3_i.i_flags &= ~EXT3_COW_FL;
-+
-+              ext3_mark_inode_dirty(handle, pri);
-+              ext3_mark_inode_dirty(handle, ind);
-+
-+              err = ext3_set_indirect(pri, index, ind->i_ino, parent_ino);
-+              if (err)
-+                      goto exit_unlock;
-+
-+              up(&ind->i_sem);
-+      }
-+
-+      if (!EXT3_HAS_COMPAT_FEATURE(pri->i_sb,
-+                                   EXT3_FEATURE_COMPAT_SNAPFS)) {
-+              lock_super(pri->i_sb);
-+              ext3_journal_get_write_access(handle, pri->i_sb->u.ext3_sb.s_sbh);
-+              pri->i_sb->u.ext3_sb.s_es->s_feature_compat |=
-+                      cpu_to_le32(EXT3_FEATURE_COMPAT_SNAPFS);
-+              ext3_journal_dirty_metadata(handle, pri->i_sb->u.ext3_sb.s_sbh);
-+              pri->i_sb->s_dirt = 1;
-+              unlock_super(pri->i_sb);
-+      }
-+      if (has_orphan) {
-+              snap_debug("del %lu nlink %d from orphan list\n", 
-+                         ind->i_ino, ind->i_nlink);
-+#ifdef EXT3_ENABLE_SNAP_ORPHAN        
-+              remove_snap_orphan(handle, ind);
-+#else
-+              ext3_orphan_del(handle, ind);
-+#endif
-+      }
-+      ext3_journal_stop(handle, pri);
-+
-+      loopfail( 5 );
-+
-+      return ind;
-+
-+exit_unlock:
-+      up(&ind->i_sem);
-+      ind->i_nlink = 0;
-+exit:
-+      if (has_orphan) {
-+              snap_debug("del %lu nlink %d from orphan list\n", 
-+                         ind->i_ino, ind->i_nlink);
-+#ifdef EXT3_ENABLE_SNAP_ORPHAN        
-+              remove_snap_orphan(handle, ind);
-+#else
-+              ext3_orphan_del(handle, ind);
-+#endif
-+      }
-+      iput(ind);
-+      ext3_journal_stop(handle, pri);
-+      if (err)
-+              snap_err("exiting with error %d\n", err);
-+      return NULL;
-+}
-+
-+
-+/* The following functions are used by destroy_indirect */
-+#define inode_bmap(inode, nr) (EXT3_I(inode)->i_data[(nr)])
-+#define inode_setbmap(inode, nr, physical) (EXT3_I(inode)->i_data[(nr)]=(physical))
-+
-+static inline int block_bmap (struct buffer_head * bh, int nr)
-+{
-+        int tmp;
-+
-+        if (!bh)
-+                return 0;
-+        tmp = le32_to_cpu(((u32 *) bh->b_data)[nr]);
-+        brelse (bh);
-+        return tmp;
-+}
-+
-+static inline int block_setbmap (handle_t *handle, struct buffer_head * bh, int nr, int physical)
-+{
-+
-+      if (!bh)
-+              return 0;
-+      ext3_journal_get_write_access(handle, bh);
-+      ((u32 *) bh->b_data)[nr] = cpu_to_le32(physical);
-+      ext3_journal_dirty_metadata(handle, bh);
-+      brelse (bh);
-+      return 1;
-+}
-+
-+static int ext3_migrate_block (handle_t *handle, struct inode * dst, struct inode *src, int block)
-+{
-+      int i1_d=0, i1_s=0, i2_d=0, i2_s=0, i3_d=0, i3_s=0;
-+      int addr_per_block = EXT3_ADDR_PER_BLOCK(src->i_sb);
-+      int addr_per_block_bits = EXT3_ADDR_PER_BLOCK_BITS(src->i_sb);
-+      unsigned long blksz = src->i_sb->s_blocksize;
-+      kdev_t ddev = dst->i_dev;
-+      kdev_t sdev = src->i_dev;
-+      int physical = 0;
-+
-+      if (block < 0) {
-+              ext3_warning (src->i_sb, "ext3_migrate_block", "block < 0");
-+              return 0;
-+      }
-+      if (block >= EXT3_NDIR_BLOCKS + addr_per_block +
-+              (1 << (addr_per_block_bits * 2)) +
-+              ((1 << (addr_per_block_bits * 2)) << addr_per_block_bits)) {
-+              ext3_warning (src->i_sb, "ext3_migrate_block", "block > big");
-+              return 0;
-+      }
-+      /* EXT3_NDIR_BLOCK */
-+      if (block < EXT3_NDIR_BLOCKS) {
-+              if( inode_bmap(dst, block) )    return 0;
-+              else {
-+                      if( (physical = inode_bmap(src, block)) ) {
-+                              inode_setbmap (dst, block, physical);
-+                              inode_setbmap (src, block, 0);
-+                              return 1;
-+                      }
-+                      else 
-+                              return 0;
-+              }
-+      }
-+      /* EXT3_IND_BLOCK */
-+      block -= EXT3_NDIR_BLOCKS;
-+      if (block < addr_per_block) {
-+              i1_d = inode_bmap (dst, EXT3_IND_BLOCK);
-+
-+              if (!i1_d) {
-+                      physical = inode_bmap(src, EXT3_IND_BLOCK);
-+                      if( physical ) {
-+                              inode_setbmap (dst, EXT3_IND_BLOCK, physical);
-+                              inode_setbmap (src, EXT3_IND_BLOCK, 0);
-+                              return 1;
-+                      }
-+                      else 
-+                              return 0;
-+              }
-+              if( block_bmap (bread (ddev, i1_d, blksz), block )) 
-+                      return 0;
-+
-+              i1_s = inode_bmap (src, EXT3_IND_BLOCK);
-+              if( !i1_s)      return 0;
-+
-+              physical = block_bmap ( bread (sdev, i1_s, blksz), block );
-+
-+              if( physical) {
-+                      block_setbmap(handle, bread(ddev, i1_d, blksz),block,physical); 
-+                      block_setbmap(handle, bread(sdev, i1_s, blksz), block, 0);
-+                      return 1; 
-+              }
-+              else 
-+                      return 0;
-+      }
-+      /* EXT3_DIND_BLOCK */
-+      block -= addr_per_block;
-+      if (block < (1 << (addr_per_block_bits * 2))) {
-+              i1_d = inode_bmap (dst, EXT3_DIND_BLOCK);
-+              i1_s = inode_bmap (src, EXT3_DIND_BLOCK);
-+              if (!i1_d) {
-+                      if( (physical = inode_bmap(src, EXT3_DIND_BLOCK)) ) {
-+                              inode_setbmap (dst, EXT3_DIND_BLOCK, physical);
-+                              inode_setbmap (src, EXT3_DIND_BLOCK, 0);
-+                              return 1;
-+                      }
-+                      else 
-+                              return 0;
-+              }
-+              i2_d = block_bmap (bread (ddev, i1_d, blksz),
-+                              block >> addr_per_block_bits);
-+
-+              if (!i2_d) {
-+                      
-+                      if( !i1_s)      return 0;
-+
-+                      physical = block_bmap (bread (sdev, i1_s, blksz),
-+                              block >> addr_per_block_bits);
-+                      if( physical) {
-+                              block_setbmap (handle, bread (ddev, i1_d, blksz), 
-+                                      block >> addr_per_block_bits, physical);
-+                              block_setbmap (handle, bread (sdev, i1_s, blksz), 
-+                                      block >> addr_per_block_bits, 0);
-+                              return 1;
-+                      }
-+                      else
-+                              return 0;
-+              }
-+              physical = block_bmap (bread (ddev, i2_d,
-+                                        blksz),
-+                                 block & (addr_per_block - 1));
-+              if(physical) 
-+                              return 0;
-+              else {
-+                      i2_s =  block_bmap (bread (sdev, i1_s,
-+                                     blksz),
-+                              block >> addr_per_block_bits);
-+                      if(!i2_s)       return 0;
-+      
-+                      physical = block_bmap(bread (sdev, i2_s,
-+                                        blksz),
-+                                 block & (addr_per_block - 1));
-+                      if(physical) {
-+                              block_setbmap(handle, bread (ddev, i2_d, blksz),
-+                                 block & (addr_per_block - 1), physical);
-+                              block_setbmap(handle, bread (sdev, i2_s, blksz),
-+                                 block & (addr_per_block - 1), 0);
-+                              return 1;
-+                      }
-+                      else 
-+                              return 0;
-+              }
-+              
-+      }
-+      /* EXT3_TIND_BLOCK */
-+      block -= (1 << (addr_per_block_bits * 2));
-+      i1_d = inode_bmap (dst, EXT3_TIND_BLOCK);
-+      i1_s = inode_bmap (src, EXT3_TIND_BLOCK);
-+      if (!i1_d) {
-+              if( (physical = inode_bmap(src, EXT3_TIND_BLOCK)) )
-+                              inode_setbmap (dst, EXT3_TIND_BLOCK, physical);
-+              else 
-+                      return 0;
-+      }
-+      i2_d = block_bmap (bread (ddev, i1_d, blksz),
-+                      block >> (addr_per_block_bits * 2));
-+
-+      if(i1_s) i2_s = block_bmap (bread (sdev, i1_s, blksz),
-+                      block >> (addr_per_block_bits * 2));
-+
-+      if (!i2_d) {
-+
-+              if( !i1_s)      return 0;
-+              
-+              physical = block_bmap (bread (sdev, i1_s, blksz),
-+                      block >> (addr_per_block_bits * 2));
-+              if(physical) {
-+                      block_setbmap (handle, bread (ddev, i1_d, blksz),
-+                              block >> (addr_per_block_bits * 2), physical);
-+                      block_setbmap (handle, bread (sdev, i1_s, blksz),
-+                              block >> (addr_per_block_bits * 2), 0);
-+                      return 1;
-+              }
-+              else
-+                      return 0;
-+      }
-+      i3_d = block_bmap (bread (ddev, i2_d, blksz),
-+                      (block >> addr_per_block_bits) & (addr_per_block - 1));
-+      if( i2_s) i3_s = block_bmap (bread (sdev, i2_s, blksz),
-+                      (block >> addr_per_block_bits) & (addr_per_block - 1));
-+      
-+      if (!i3_d) {
-+              if (!i2_s)      return 0;       
-+              physical = block_bmap (bread (sdev, i2_s, blksz),
-+                      (block >> addr_per_block_bits) & (addr_per_block - 1));
-+              if( physical) {
-+                      block_setbmap (handle, bread (ddev, i2_d, blksz),
-+                      (block >> addr_per_block_bits) & (addr_per_block - 1), 
-+                      physical);
-+                      block_setbmap (handle, bread (sdev, i2_s, blksz),
-+                      (block >> addr_per_block_bits) & (addr_per_block - 1),
-+                      0);
-+                      return 1;
-+              }
-+              else
-+                      return 0;
-+      }
-+      physical = block_bmap (bread (ddev, i3_d, blksz),
-+                         block & (addr_per_block - 1)) ;
-+      if(physical) return 0;
-+      else {
-+              if(!i3_s)       return 0;       
-+              physical =  block_bmap (bread (sdev, i3_s, blksz),
-+                         block & (addr_per_block - 1)) ;
-+              if( physical) {
-+                      block_setbmap (handle, bread (ddev, i3_d, blksz),
-+                         block & (addr_per_block - 1), physical); 
-+                      block_setbmap (handle, bread (sdev, i3_s, blksz),
-+                         block & (addr_per_block - 1), 0); 
-+                      return 1;
-+              }
-+              else
-+                      return 0; 
-+      }
-+}
-+
-+/* Generate i_blocks from blocks for an inode .
-+ * We also calculate EA block here.
-+ */
-+static unsigned long calculate_i_blocks(struct inode *inode, int blocks)
-+{
-+      /* 512 byte disk blocks per inode block */
-+      int bpib = inode->i_sb->s_blocksize >> 9;
-+      int addr_per_block = EXT3_ADDR_PER_BLOCK(inode->i_sb);
-+      unsigned long i_blocks = 0;
-+      int i=0;
-+      int j=0;
-+      int meta_blocks = 0;
-+
-+      if( !inode )    return 0;
-+
-+      if( blocks < 0 ) {
-+              /* re-calculate blocks here */  
-+              blocks = (inode->i_size + inode->i_sb->s_blocksize-1) 
-+                      >> inode->i_sb->s_blocksize_bits;
-+      }
-+
-+      /* calculate data blocks */
-+      for(i = 0; i < blocks; i++ ) {
-+              if(ext3_bmap(inode->i_mapping, i))  
-+                      i_blocks += bpib;
-+      }
-+      /* calculate meta blocks */
-+      blocks -= EXT3_NDIR_BLOCKS;
-+      if( blocks > 0 ) {
-+              meta_blocks++;
-+              blocks -= addr_per_block;
-+      }
-+      if( blocks > 0 ) meta_blocks++;
-+      i=0;
-+      while( (blocks > 0) && (i < addr_per_block) ) {
-+              meta_blocks++;
-+              blocks -= addr_per_block;
-+              i++;
-+      }
-+      if ( blocks > 0 ) meta_blocks += 2;
-+      i=0;
-+      j=0;
-+      while( blocks > 0) {
-+              meta_blocks++;
-+              blocks -= addr_per_block;
-+              i++;
-+              if(i >= addr_per_block  ) {
-+                      i=0;
-+                      j++;
-+              }
-+              if( j >= addr_per_block) {
-+                      j=0;
-+                      meta_blocks++;
-+              }
-+      }
-+      /* calculate EA blocks */
-+      if( ext3_has_ea (inode) )       meta_blocks++;
-+
-+      i_blocks += meta_blocks * bpib;
-+      snap_debug("ino %lu, get i_blocks %lu\n", inode->i_ino, i_blocks);
-+      return i_blocks;
-+}
-+
-+/**
-+ * ext3_destroy_indirect - delete an indirect inode from the table
-+ * @pri: primary inode
-+ * @ind: indirect inode
-+ * @index: index of inode that should be deleted
-+ *
-+ * We delete the @*ind inode, and remove it from the snapshot table.  If @*ind
-+ * is NULL, we use the inode at @index.
-+ */
-+static int ext3_destroy_indirect(struct inode *pri, int index, 
-+                              struct inode *next_ind)
-+{
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      struct snap_ea *snaps;
-+      struct inode *ind;
-+      int save = 0;
-+      int i=0;
-+      int err = 0;
-+      handle_t *handle=NULL;
-+      time_t ctime;
-+
-+      if (index < 0 || index > EXT3_MAX_SNAPS)
-+              return 0;
-+
-+      if( pri == pri->i_sb->u.ext3_sb.s_journal_inode ){
-+              snap_err("TRY TO DESTROY JOURNAL'S IND\n");
-+              return -EINVAL;
-+      }
-+
-+      err = ext3_xattr_get(pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                           buf, EXT3_MAX_SNAP_DATA);
-+      if (err < 0) {
-+              snap_err("inode %lu attribute read error\n", pri->i_ino);
-+              return err;
-+      }
-+      
-+      snaps = (struct snap_ea *)buf;
-+      if ( !snaps->ino[index] ) {
-+              snap_err("for pri ino %lu, index %d, redirect ino is 0\n",
-+                              pri->i_ino, index);     
-+              return -EINVAL;
-+      }
-+
-+      snap_debug("for pri ino %lu, reading inode %lu at index %d\n", 
-+              pri->i_ino, (ulong)le32_to_cpu(snaps->ino[index]), index);
-+
-+      ind = iget(pri->i_sb, le32_to_cpu (snaps->ino[index]) );
-+
-+      if ( !ind || IS_ERR(ind) || is_bad_inode(ind)) 
-+              return  -EINVAL;
-+
-+      snap_debug("iget ind %lu, ref count = %d\n", 
-+                 ind->i_ino, atomic_read(&ind->i_count));
-+
-+      handle = ext3_journal_start(pri, SNAP_DESTROY_TRANS_BLOCKS);
-+      if (!handle) {
-+              iput(ind);
-+              return -EINVAL;
-+      }
-+      /* if it's block level cow, first copy the blocks back */       
-+      if (EXT3_HAS_COMPAT_FEATURE(pri->i_sb, EXT3_FEATURE_COMPAT_BLOCKCOW) &&
-+          S_ISREG(pri->i_mode)) {
-+
-+              int blocks;
-+              if (!next_ind) {        
-+                      next_ind = pri;
-+                      down(&ind->i_sem);
-+              } else {
-+                      double_down(&next_ind->i_sem, &ind->i_sem);
-+              }
-+              blocks = (next_ind->i_size + next_ind->i_sb->s_blocksize-1) 
-+                              >> next_ind->i_sb->s_blocksize_bits;
-+#define FAST_MIGRATE_BLOCK
-+#ifdef FAST_MIGRATE_BLOCK
-+              snap_debug("migrate block back from ino %lu to %lu\n",
-+                              ind->i_ino, next_ind->i_ino);
-+
-+              for(i = 0; i < blocks; i++) {
-+                      if( ext3_bmap(next_ind->i_mapping, i) ) 
-+                              continue;
-+                      if( !ext3_bmap(ind->i_mapping, i) ) 
-+                              continue;
-+                      ext3_migrate_block(handle, next_ind, ind, i) ;
-+              }
-+              /* Now re-compute the i_blocks */
-+              /* XXX shall we take care of ind here? probably not */
-+              next_ind->i_blocks = calculate_i_blocks( next_ind, blocks);
-+              ext3_mark_inode_dirty(handle, next_ind);
-+
-+#else
-+              for (i = 0; i < blocks; i++) {
-+                      if (ext3_bmap(next_ind->i_mapping, i))  
-+                              continue;
-+                      if (ext3_copy_block(next_ind, ind, i ) < 0)     
-+                              break;
-+              }
-+              ext3_mark_inode_dirty(handle, next_ind);
-+#endif 
-+              if (next_ind == pri) 
-+                      up(&ind->i_sem);
-+              else 
-+                      double_up(&next_ind->i_sem, &ind->i_sem);
-+
-+      }
-+      
-+      snap_debug("delete indirect ino %lu\n", ind->i_ino);
-+      snap_debug("iput ind %lu, ref count = %d\n", 
-+                  ind->i_ino, atomic_read(&ind->i_count));
-+      ind->i_nlink = 0;
-+      iput (ind);
-+
-+      snaps->ino[index] = cpu_to_le32(0);
-+      for (i = 0; i < EXT3_MAX_SNAPS; i++)
-+              save += snaps->ino[i];
-+
-+      if(!save) {     
-+              lock_list(pri->i_sb);
-+              delete_cowed_ino_from_list(handle, pri);
-+              unlock_list(pri->i_sb);
-+      }
-+
-+      /* if there are no cowed inode left, then remove snapfs feature */
-+      if(!SB_FIRST_COWED_INO(pri->i_sb)) {
-+
-+              lock_super(pri->i_sb);
-+
-+              ext3_journal_get_write_access(handle, pri->i_sb->u.ext3_sb.s_sbh);
-+              if (EXT3_HAS_COMPAT_FEATURE(pri->i_sb,
-+                                     EXT3_FEATURE_COMPAT_SNAPFS)) {
-+                      pri->i_sb->u.ext3_sb.s_es->s_feature_compat &=
-+                              cpu_to_le32(~EXT3_FEATURE_COMPAT_SNAPFS);
-+              }
-+              /* clean up block level cow feature */
-+              if (EXT3_HAS_COMPAT_FEATURE(pri->i_sb,
-+                      EXT3_FEATURE_COMPAT_BLOCKCOW)) {
-+                              pri->i_sb->u.ext3_sb.s_es->s_feature_compat &=
-+                                      cpu_to_le32(~EXT3_FEATURE_COMPAT_BLOCKCOW);
-+                 }
-+              /* XXX clean the extended attribute feature,
-+               * this is not safe, find a better way
-+               */
-+                if (EXT3_HAS_COMPAT_FEATURE(pri->i_sb,
-+                      EXT3_FEATURE_COMPAT_EXT_ATTR)) {
-+                              pri->i_sb->u.ext3_sb.s_es->s_feature_compat &=
-+                                      cpu_to_le32(~EXT3_FEATURE_COMPAT_EXT_ATTR);
-+                }
-+
-+              ext3_journal_dirty_metadata(handle, pri->i_sb->u.ext3_sb.s_sbh);
-+              pri->i_sb->s_dirt = 1;
-+              unlock_super(pri->i_sb);
-+        }
-+
-+      /*
-+       * If we are deleting the last indirect inode, and the primary inode
-+       * has already been deleted, then mark the primary for deletion also.
-+       * Otherwise, if we are deleting the last indirect inode remove the
-+       * snaptable from the inode.    XXX
-+       */
-+      if (!save && pri->u.ext3_i.i_dtime) {
-+              snap_debug("deleting primary %lu\n", pri->i_ino);
-+              pri->i_nlink = 0;
-+              /* reset err to 0 now */
-+              err = 0;
-+      } else {
-+              snap_debug("%s redirector table\n",
-+                              save ? "saving" : "deleting");
-+              /* XXX: since set ea will modify i_ctime of pri, 
-+                      so save/restore i_ctime. Need this necessary ? */
-+              ctime = pri->i_ctime;   
-+              err = ext3_xattr_set(handle, pri, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                         save ? buf : NULL, EXT3_MAX_SNAP_DATA, 0);
-+              pri->i_ctime = ctime;
-+              ext3_mark_inode_dirty(handle, pri);
-+      }
-+      ext3_journal_stop(handle, pri);
-+      return err;
-+}
-+
-+/* restore a primary inode with the indirect inode at index */
-+static int ext3_restore_indirect(struct inode *pri, int index)
-+{
-+      struct inode *ind;
-+      struct inode *tmp;
-+      int err = 0;
-+      handle_t *handle = NULL;
-+
-+      if (index < 0 || index > EXT3_MAX_SNAPS)
-+              return -EINVAL;
-+
-+      if( pri == pri->i_sb->u.ext3_sb.s_journal_inode ){
-+              printk( KERN_EMERG "TRY TO RESTORE JOURNAL\n");
-+              return -EINVAL;
-+      }
-+      snap_debug("pri ino %lu, index %d\n", pri->i_ino, index);
-+
-+      ind = ext3_get_indirect(pri, NULL, index);
-+
-+      if ( !ind ) 
-+              return -EINVAL;
-+
-+      snap_debug("restore ino %lu to %lu\n", pri->i_ino, ind->i_ino);
-+
-+      handle = ext3_journal_start(pri, SNAP_RESTORE_TRANS_BLOCKS);
-+      if( !handle )
-+              return -EINVAL;
-+      /* first destroy all the data blocks in primary inode */
-+      /* XXX: check this, ext3_new_inode, the first arg should be "dir" */ 
-+      tmp = ext3_new_inode(handle, pri, (int)pri->i_mode, 0);
-+      if(tmp) {
-+              double_down(&pri->i_sem, &tmp->i_sem);
-+              ext3_migrate_data(handle, tmp, pri);
-+              double_up(&pri->i_sem, &tmp->i_sem);
-+
-+              tmp->i_nlink = 0;
-+              iput(tmp);      
-+      }
-+      else    
-+              snap_err("restore_indirect, new_inode err\n");
-+      
-+      double_down(&pri->i_sem, &ind->i_sem);
-+      ext3_migrate_data(handle, pri, ind);
-+      /* clear the cow flag for pri because ind has it */
-+      pri->u.ext3_i.i_flags &= ~EXT3_COW_FL;
-+      ext3_mark_inode_dirty(handle, pri);
-+      double_up(&pri->i_sem, &ind->i_sem);
-+      iput(ind);
-+
-+//    ext3_destroy_indirect(pri, index);
-+
-+      ext3_journal_stop(handle, pri);
-+      return err;
-+}
-+
-+
-+/**
-+ * ext3_snap_iterate - iterate through all of the inodes
-+ * @sb: filesystem superblock
-+ * @repeat: pointer to function called on each valid inode
-+ * @start: inode to start iterating at
-+ * @priv: private data to the caller/repeat function
-+ *
-+ * If @start is NULL, then we do not return an inode pointer.  If @*start is
-+ * NULL, then we start at the beginning of the filesystem, and iterate over
-+ * all of the inodes in the system.  If @*start is non-NULL, then we start
-+ * iterating at this inode.
-+ *
-+ * We call the repeat function for each inode that is in use.  The repeat
-+ * function must check if this is a redirector (with is_redirector) if it
-+ * only wants to operate on redirector inodes.  If there is an error or
-+ * the repeat function returns non-zero, we return the last inode operated
-+ * on in the @*start parameter.  This allows the caller to restart the
-+ * iteration at this inode if desired, by returning a positive value.
-+ * Negative return values indicate an error.
-+ *
-+ * NOTE we cannot simply traverse the existing filesystem tree from the root
-+ *      inode, as there may be disconnected trees from deleted files/dirs
-+ *
-+ * FIXME If there was a list of inodes with EAs, we could simply walk the list
-+ * intead of reading every inode.  This is an internal implementation issue.
-+ */
-+
-+static int ext3_iterate_all(struct super_block *sb,
-+                      int (*repeat)(struct inode *inode, void *priv),
-+                      struct inode **start, void *priv)
-+{
-+      struct inode *tmp = NULL;
-+      int gstart, gnum;
-+      ino_t istart, ibase;
-+      int err = 0;
-+
-+      if (!start)
-+              start = &tmp;
-+      if (!*start) {
-+              *start = iget(sb, EXT3_ROOT_INO);
-+              if (!*start) {
-+                      err = -ENOMEM;
-+                      goto exit;
-+              }
-+              if (is_bad_inode(*start)) {
-+                      err = -EIO;
-+                      goto exit;
-+              }
-+      }
-+      if ((*start)->i_ino > le32_to_cpu(EXT3_SB(sb)->s_es->s_inodes_count)) {
-+              snap_debug("invalid starting inode %ld\n",(*start)->i_ino);
-+              err = -EINVAL;
-+              goto exit;
-+      }
-+      if ((*start)->i_ino < EXT3_FIRST_INO(sb)) {
-+              if ((err = (*repeat)(*start, priv) != 0))
-+                      goto exit;
-+              iput(*start);
-+              *start = iget(sb, EXT3_FIRST_INO(sb));
-+              if (!*start) {
-+                      err = -ENOMEM;
-+                      goto exit;
-+              }
-+              if (is_bad_inode(*start)) {
-+                      err = -EIO;
-+                      goto exit;
-+              }
-+      }
-+
-+      gstart = ((*start)->i_ino - 1) / EXT3_INODES_PER_GROUP(sb);
-+      istart = ((*start)->i_ino - 1) % EXT3_INODES_PER_GROUP(sb);
-+      ibase = gstart * EXT3_INODES_PER_GROUP(sb);
-+      for (gnum = gstart; gnum < EXT3_SB(sb)->s_groups_count;
-+           gnum++, ibase += EXT3_INODES_PER_GROUP(sb)) {
-+              struct ext3_group_desc * gdp;
-+              int bitmap_nr;
-+              char *bitmap;
-+              int ibyte;
-+
-+              gdp = ext3_get_group_desc (sb, gnum, NULL);
-+              if (!gdp || le16_to_cpu(gdp->bg_free_inodes_count) ==
-+                  EXT3_INODES_PER_GROUP(sb))
-+                      continue;
-+
-+              bitmap_nr = ext3_load_inode_bitmap(sb, gnum);
-+              if (bitmap_nr < 0)
-+                      continue;
-+
-+              bitmap = EXT3_SB(sb)->s_inode_bitmap[bitmap_nr]->b_data;
-+              for (ibyte = istart >> 3;
-+                   ibyte < EXT3_INODES_PER_GROUP(sb) >> 3;
-+                   ibyte++)
-+              {
-+                      int i;
-+                      int bit;
-+
-+                      if (!bitmap[ibyte])
-+                              continue;
-+
-+                      /* FIXME need to verify if bit endianness will
-+                       *       work properly here for all architectures.
-+                       */
-+                      for (i = 1, bit = 1; i <= 8; i++, bit <<= 1) {
-+                              ino_t ino = ibase + (ibyte << 3) + i;
-+
-+                              if ((bitmap[ibyte] & bit) == 0)
-+                                      continue;
-+                              if (*start) {
-+                                      if (ino < (*start)->i_ino)
-+                                              continue;
-+                              } else {
-+                                      *start = iget(sb, ino);
-+                                      if (!*start) {
-+                                              err = -ENOMEM;
-+                                              goto exit;
-+                                      }
-+                                      if (is_bad_inode(*start)) {
-+                                              err = -EIO;
-+                                              goto exit;
-+                                      }
-+                              }
-+                              if ((err = (*repeat)(*start, priv)) != 0)
-+                                      goto exit;
-+                              iput(*start);
-+                              *start = NULL;
-+                      }
-+              }
-+              istart = 0;
-+      }
-+exit:
-+      iput(tmp);
-+      return err;
-+}
-+
-+static int ext3_iterate(struct super_block *sb,
-+                      int (*repeat)(struct inode *inode, void *priv),
-+                      struct inode **start, void *priv, int flag)
-+{
-+      switch(flag) {
-+              case SNAP_ITERATE_ALL_INODE:
-+                      return ext3_iterate_all (sb, repeat, start, priv);
-+
-+              case SNAP_ITERATE_COWED_INODE:
-+                      return ext3_iterate_cowed_inode (sb, repeat, start,priv);
-+
-+              default:
-+                      return -EINVAL;
-+      }
-+}
-+
-+static int find_snap_meta_index(
-+      struct table_snap_meta_data *snap_meta,
-+      char                        *name)
-+{
-+      int i;
-+
-+      /* table max length is null*/
-+      for( i = 0; i < TABLE_ITEM_COUNT; i++){
-+              /*compare name Max name Length 15*/
-+              if (snap_meta->array[i].name[0]){
-+                      if(!strncmp(snap_meta->array[i].name, name, strlen(name)))
-+                              return i;
-+              }
-+      }
-+      return -1; /* can not find */
-+}
-+
-+int set_snap_meta_index(
-+      struct table_snap_meta_data *snap_meta,
-+      char                        *name,
-+      int                          size)
-+{
-+      int i;
-+
-+      for( i = 0; i < TABLE_ITEM_COUNT; i++){
-+              /*compare name Max name Length 15*/
-+              if (! snap_meta->array[i].name[0]){
-+                      strcpy(snap_meta->array[i].name, name);
-+                      snap_meta->count ++;
-+                      snap_meta->array[i].start = i * TABLE_ITEM_SIZE + 1;
-+                      snap_meta->array[i].len   = size;
-+                      return i;
-+              }
-+      }
-+      return -1; /* can not find */
-+}
-+
-+static int ext3_get_meta_attr(struct super_block *sb, 
-+                            char* name, char* buf, 
-+                            int *size)
-+{
-+        ino_t                         ino;
-+        struct inode                          *inode;
-+      struct buffer_head              *bh = NULL;
-+      struct table_snap_meta_data     *s_attr;
-+      unsigned long                   map_len = 0,  left_size;
-+        int                           i, error = 0, index = 0;
-+      
-+      ino = SB_SNAPTABLE_INO(sb);     
-+      if (ino == 0){
-+              snap_err("No table file \n");
-+              return  -ENODATA;
-+      } 
-+      inode = iget(sb, ino);
-+        if(!inode || is_bad_inode(inode)){
-+                snap_err("unable to get table ino %lu\n", ino);
-+                error = -ENOENT;
-+                      goto out_iput; 
-+      }
-+      /*read the table from the table inode*/
-+      bh = ext3_bread(NULL, inode, 0, 0, &error);
-+      if (!bh) {
-+              snap_err("read table ino %lu, error %d\n", ino, error);
-+              error = -ENODATA;
-+              goto out_iput;
-+      }
-+      s_attr = (struct table_snap_meta_data *)(bh->b_data);
-+      index = find_snap_meta_index(s_attr, name);
-+      if (index < 0) {
-+              snap_debug("not exit %s meta attr of table ino %lu \n", 
-+                                      name, inode->i_ino);
-+              error = 0;
-+              goto out_iput;
-+      }
-+      if (!buf || *size < s_attr->array[index].len) {
-+              /*return the size of this meta attr */
-+              error = s_attr->array[index].len;               
-+              goto out_iput;  
-+      }
-+      map_len = (s_attr->array[index].len + sb->s_blocksize - 1) >> sb->s_blocksize_bits;     
-+      left_size = *size;
-+      for(i = 0; i < map_len; i++) {
-+              struct buffer_head *array_bh = NULL;
-+
-+              array_bh = ext3_bread(NULL, inode, 
-+                                    s_attr->array[index].start + i,
-+                                    0, &error);
-+              if (!array_bh) {
-+                      snap_err("ino %lu read snap attr offset %d error %d \n",
-+                                inode->i_ino, (s_attr->array[index].start + i),
-+                                error);
-+                      goto out_iput;
-+              }
-+              if (left_size >= sb->s_blocksize) {
-+                      memcpy(buf, array_bh->b_data, sb->s_blocksize);
-+              }else
-+                      memcpy(buf, array_bh->b_data, left_size);
-+              left_size -= sb->s_blocksize;
-+              brelse(array_bh);
-+      }
-+      *size = s_attr->array[index].len;
-+out_iput:
-+      brelse(bh);
-+      iput(inode);
-+      return error;
-+} 
-+
-+static int ext3_set_meta_attr(struct super_block *sb, char* name, 
-+                            char* buf, int size)
-+{
-+        struct inode                          *inode = NULL;
-+        handle_t                      *handle = NULL;
-+      struct  buffer_head             *bh = NULL;
-+      struct table_snap_meta_data     *s_attr = NULL;
-+      unsigned long                   ino;
-+        int                           i, index = 0, error = 0;
-+      unsigned long                   new_len = 0, left_size; 
-+              
-+      ino = SB_SNAPTABLE_INO(sb);
-+      
-+      if (ino == 0 && !buf) {
-+              snap_debug("no table ino \n");
-+              return 0;
-+      }
-+      
-+      handle = ext3_journal_start(sb->s_root->d_inode, 2*EXT3_SETMETA_TRANS_BLOCKS);
-+      if(!handle)
-+              return -EINVAL;
-+
-+      if (ino == 0) {
-+              /*create table inode update table ino*/
-+              inode = ext3_new_inode(handle, sb->s_root->d_inode, (int)S_IFREG, 0);
-+              if (!inode)
-+                      return  -EINVAL;
-+              lock_super(sb);
-+              ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
-+              SB_SNAPTABLE_INO(sb) = inode->i_ino;
-+              ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
-+              sb->s_dirt = 1;
-+              unlock_super(sb);
-+
-+      } else {
-+              inode = iget(sb, ino);
-+              if (!inode || !inode->i_nlink || is_bad_inode(inode)) {
-+                      snap_err("unable to get table ino %lu\n", ino);
-+                      error = -ENOENT;
-+                      goto exit;
-+              }
-+      }
-+      /*read the table from the table inode,
-+       * If can not find the block just create it*/
-+      bh = ext3_bread(handle, inode, 0, 1, &error);
-+      if (!bh) {
-+              snap_err("read table ino %lu, error %d\n", ino, error);
-+              error = -ENODATA;
-+              goto exit;
-+      }
-+      s_attr = (struct table_snap_meta_data *)(bh->b_data);
-+      index = find_snap_meta_index(s_attr, name);
-+      if (index < 0 && !buf) {        
-+              snap_debug("%s meta attr of table ino %lu do not exist\n", 
-+                          name, inode->i_ino);
-+                error = 0;
-+              brelse(bh);
-+              goto exit;
-+      }
-+      if (!buf) {
-+              snap_debug("delete the meta attr %s in the table ino %lu",
-+                         name, inode->i_ino);
-+              /*Here we only delete the entry of the attr
-+               *FIXME, should we also delete the block of 
-+               * this attr
-+               */
-+              ext3_journal_get_write_access(handle, bh);
-+              memset(s_attr->array[index].name, 0, TABLE_ITEM_NAME_SIZE);
-+              s_attr->array[index].len = 0;
-+              s_attr->count --;
-+              ext3_journal_dirty_metadata(handle, bh);
-+              brelse(bh);
-+              goto exit;
-+      }
-+      new_len = (size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
-+      /*find the place to put this attr in that index*/
-+      ext3_journal_get_write_access(handle, bh);
-+      if (index < 0){
-+              index = set_snap_meta_index(s_attr, name, size);
-+              if (index < 0){
-+                      snap_err("table full of ino %lu \n", inode->i_ino);
-+                      error = index;
-+                      brelse(bh);
-+                      goto exit;
-+              }
-+      }
-+      s_attr->array[index].len = size;
-+      journal_dirty_metadata(handle, bh);
-+      brelse(bh);
-+      /*put this attr to the snap table*/
-+      left_size = size;
-+      for(i = 0; i < new_len; i++) {
-+              struct buffer_head *array_bh = NULL;
-+              
-+              array_bh = ext3_bread(handle, inode, 
-+                                    s_attr->array[index].start + i, 1, &error);
-+              if (!array_bh) {
-+                      snap_err("inode %lu Can not get the block of attr %s\n",  
-+                                inode->i_ino, name);
-+                      error = -ENOSPC;
-+                      brelse(array_bh);
-+                      goto exit;
-+              }
-+              ext3_journal_get_write_access(handle, array_bh);
-+              if (left_size > inode->i_sb->s_blocksize)       
-+                      memcpy(array_bh->b_data, buf, inode->i_sb->s_blocksize);
-+              else
-+                      memcpy(array_bh->b_data, buf, left_size);
-+              ext3_journal_dirty_metadata(handle, array_bh);
-+              left_size -= inode->i_sb->s_blocksize;
-+              brelse(array_bh);
-+      }
-+exit:
-+      if (handle)
-+              ext3_journal_stop(handle, sb->s_root->d_inode); 
-+      iput(inode);
-+      return error;
-+}
-+
-+struct snapshot_operations ext3_snap_operations = {
-+      ops_version:            SNAP_VERSION(2,0,2),
-+      is_redirector:          is_redirector,
-+      is_indirect:            is_indirect,
-+      create_indirect:        ext3_create_indirect,
-+      get_indirect:           ext3_get_indirect,
-+        get_indirect_ino:     ext3_get_indirect_ino,
-+      destroy_indirect:       ext3_destroy_indirect,
-+      restore_indirect:       ext3_restore_indirect,
-+      iterate:                ext3_iterate,
-+      copy_block:             ext3_copy_block,
-+      set_indirect:           ext3_set_indirect,
-+      snap_feature:           ext3_snap_feature,
-+      get_generation:         ext3_get_generation,
-+      set_generation:         ext3_set_generation,
-+      get_meta_attr:          ext3_get_meta_attr,
-+      set_meta_attr:          ext3_set_meta_attr,                             
-+};
-+
-+EXPORT_SYMBOL(ext3_snap_operations);
-+#ifdef SNAP_PROFILE
-+EXPORT_SYMBOL(prof_snapdel);
-+#endif
-+
-+#ifdef SNAP_DEBUG_IOC
-+
-+static int print_inode(struct inode *pri, void *index_val)
-+{
-+
-+      int err=0;
-+      struct snap_ea *snaps;
-+      char buf[EXT3_MAX_SNAP_DATA];
-+      int index = *(int *)index_val;
-+
-+      err = ext3_xattr_get(primary, EXT3_SNAP_INDEX, EXT3_SNAP_ATTR,
-+                                              buf, EXT3_MAX_SNAP_DATA);
-+      
-+      if (err == -ENODATA) {
-+              memset(buf, 0, EXT3_MAX_SNAP_DATA);
-+      } 
-+      else if (err < 0) {
-+              snap_err("got err %d when reading attributes\n", err);
-+              goto err_exit;
-+      }
-+
-+      snaps = (struct snap_ea *) buf;
-+
-+      if( le32_to_cpu(snaps->ino[index]) == 0 ) {
-+              snap_debug("no redirected ino for primary inode %lu\n",
-+                              primary->i_ino);
-+      }
-+      else {
-+              snap_debug("primary inode %lu , redirected ino=%d\n",
-+                              primary->i_ino,le32_to_cpu(snaps->ino[index]));
-+      }
-+err_exit:
-+      return err;
-+}
-+
-+int snap_print(struct super_block *sb, int index)
-+{
-+      ext3_iterate_cowed_inode(sb, &print_inode, NULL, &index);
-+      return 0;
-+}
-+
-+static int ext3_snap_destroy_inode(struct inode *primary,void *index_val)
-+{
-+      int index = *(int *)index_val;
-+      int rc = 0;
-+      printk("delete_inode for index %d\n",index);
-+      rc = ext3_destroy_indirect(primary,index, NULL);
-+      if(rc != 0)     
-+              printk("ERROR:ext3_destroy_indirect(ino %lu,index %d),ret %d\n",                        
-+                                              primary->i_ino, index, rc);
-+      return 0;
-+}
-+
-+int ext3_snap_delete(struct super_block *sb, int index)
-+{
-+      ext3_iterate(sb, &ext3_snap_destroy_inode, NULL, &index, 
-+                                      SNAP_ITERATE_COWED_INODE);
-+      return 0;
-+}
-+#endif
-+
-+
-+
-+
-+
-+
-+
-+
-Index: linux-2.4.20-8/fs/ext3/Makefile
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/Makefile       2004-01-19 22:06:25.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/Makefile    2004-01-19 22:06:25.000000000 +0800
-@@ -13,7 +13,7 @@
- obj-y    := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
-               ioctl.o namei.o super.o symlink.o hash.o ext3-exports.o \
--              xattr_trusted.o
-+              xattr_trusted.o snap.o
- obj-m    := $(O_TARGET)
- export-objs += xattr.o
-Index: linux-2.4.20-8/fs/ext3/inode.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/inode.c        2004-01-19 22:06:24.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/inode.c     2004-01-26 01:12:48.000000000 +0800
-@@ -1191,7 +1191,7 @@
-  * So, if we see any bmap calls here on a modified, data-journaled file,
-  * take extra steps to flush any blocks which might be in the cache. 
-  */
--static int ext3_bmap(struct address_space *mapping, long block)
-+int ext3_bmap(struct address_space *mapping, long block)
- {
-       struct inode *inode = mapping->host;
-       journal_t *journal;
-@@ -1403,7 +1403,7 @@
-  * This required during truncate. We need to physically zero the tail end
-  * of that block so it doesn't yield old data if the file is later grown.
-  */
--static int ext3_block_truncate_page(handle_t *handle,
-+int ext3_block_truncate_page(handle_t *handle,
-               struct address_space *mapping, loff_t from)
- {
-       unsigned long index = from >> PAGE_CACHE_SHIFT;
-Index: linux-2.4.20-8/fs/ext3/ialloc.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/ialloc.c       2004-01-19 22:06:24.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/ialloc.c    2004-01-19 22:06:25.000000000 +0800
-@@ -160,6 +160,13 @@
-       return retval;
- }
-+/* Export load_inode_bitmap*/
-+int ext3_load_inode_bitmap (struct super_block * sb,
-+                           unsigned int block_group)
-+{
-+       return load_inode_bitmap(sb, block_group);
-+}
-+
- /*
-  * NOTE! When we get the inode, we're the only people
-  * that have access to it, and as such there are no
-Index: linux-2.4.20-8/fs/ext3/super.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/super.c        2004-01-19 22:06:24.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/super.c     2004-01-19 22:06:25.000000000 +0800
-@@ -1324,6 +1324,13 @@
-       sbi->s_mount_state = le16_to_cpu(es->s_state);
-       sbi->s_addr_per_block_bits = log2(EXT3_ADDR_PER_BLOCK(sb));
-       sbi->s_desc_per_block_bits = log2(EXT3_DESC_PER_BLOCK(sb));
-+#define EXT3_SNAP_FS
-+#ifdef EXT3_SNAP_FS
-+      init_MUTEX(&(sbi->s_snap_list_sem));
-+      sbi->s_snaptable_ino = le32_to_cpu(es->s_snaptable_ino);
-+      sbi->s_first_cowed_pri_ino = le32_to_cpu(es->s_first_cowed_pri_ino);
-+      sbi->s_last_cowed_pri_ino = le32_to_cpu(es->s_last_cowed_pri_ino);
-+#endif        
-       for (i=0; i < 4; i++)
-               sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);
-       sbi->s_def_hash_version = es->s_def_hash_version;
-Index: linux-2.4.20-8/fs/ext3/ext3-exports.c
-===================================================================
---- linux-2.4.20-8.orig/fs/ext3/ext3-exports.c 2004-01-19 22:06:19.000000000 +0800
-+++ linux-2.4.20-8/fs/ext3/ext3-exports.c      2004-01-26 01:13:53.000000000 +0800
-@@ -21,6 +21,9 @@
- EXPORT_SYMBOL(ext3_xattr_set);
- EXPORT_SYMBOL(ext3_prep_san_write);
- EXPORT_SYMBOL(ext3_map_inode_page);
-+EXPORT_SYMBOL(ext3_orphan_add);
-+EXPORT_SYMBOL(ext3_orphan_del);
-+EXPORT_SYMBOL(ext3_block_truncate_page)
- EXPORT_SYMBOL(ext3_abort);
- EXPORT_SYMBOL(ext3_decode_error);
-Index: linux-2.4.20-8/include/linux/snap.h
-===================================================================
---- linux-2.4.20-8.orig/include/linux/snap.h   2003-01-30 18:24:37.000000000 +0800
-+++ linux-2.4.20-8/include/linux/snap.h        2004-01-19 22:11:26.000000000 +0800
-@@ -0,0 +1,266 @@
-+/*
-+ * Copyright (c) 2002 Cluster File Systems, Inc. <info@clusterfs.com>
-+ * started by Andreas Dilger <adilger@turbolinux.com>
-+ *            Peter Braam <braam@mountainviewdata.com>
-+ *            Harrison Xing <harrisonx@mountainviewdata.com>
-+ * 
-+ * Redesigned 2003 by Peter Braam <braam@clusterfs.com>
-+ *                  Eric Mei    <Ericm@clusterfs.com>
-+ *                  Wang Di     <wangdi@clusterfs.com>
-+ * 
-+ * Rewriten   2003  by Wang Di  <wangdi@clusterfs.com>
-+ *                    Eric Mei <ericm@clusterfs.com>
-+ *
-+ * Functions for implementing snapshots in the ext3 filesystem.  They are
-+ * intended to hide the internals of the filesystem from the caller in
-+ * such a way that the caller doesn't need to know about inode numbers,
-+ * how the redirectors are implemented or stored, etc.  It may not do that
-+ * all yet, but it tries.
-+ *
-+ * The snapshot inode redirection is stored in the primary/direct inode as
-+ * an extended attribute $snap, in the form of little-endian u32 inode
-+ * numbers. 
-+ *   
-+ */
-+
-+#ifndef _LINUX_SNAP_H
-+#define _LINUX_SNAP_H
-+
-+#include <linux/fs.h>
-+
-+/* maximum number of snapshots available for users */
-+#define MAX_SNAPS     20      
-+
-+/* snap extended attributes definition */
-+#define SNAP_ATTR     "@snap"
-+struct snap_ea{                       
-+      int   generation;
-+      ino_t prev_ino;
-+      ino_t next_ino;
-+      ino_t ino[MAX_SNAPS+1]; /* including current snapshot */
-+      ino_t parent_ino[MAX_SNAPS+1];
-+};
-+#define MAX_SNAP_DATA (sizeof(struct snap_ea))
-+#if 0
-+/* for compatibility with old 128 max snapshots */
-+#define MAX_SNAP128_DATA (sizeof(struct snap_ea) - (sizeof(ino_t) * 128 * 2))
-+#define ZERO_SNAP_ATTR_TOP(buf)                                               \
-+      do {                                                            \
-+              struct snap_ea *p = (struct snap_ea*)buf;               \
-+              memset(&p->ino[129], 0, sizeof(ino_t)*128);             \
-+              memset(&p->parent_ino[129], 0, sizeof(ino_t)*128);      \
-+      } while(0)
-+
-+/* snap new ea definition , for logging of new inode */
-+#define SNAP_NEW_INO_ATTR     "@snap_new"
-+struct snap_new_ea{                   
-+      ino_t prev_ino; /* reserved. save the inode to a linked list */
-+      ino_t next_ino;
-+      int new_index;  /* indicate for which index this is a new inode */
-+};
-+#define NULL_NEW_INDEX        -1      /* null new index, to clear the snap_new_ea */
-+
-+/* ea to identiry a indirect inode's infomation */
-+#define SNAP_INDIRECT_INFO_ATTR       "@snap_indirect_inode_info"
-+struct snap_indirect_info {
-+      __u32 index; /* which index belongs to */
-+      __u32 reserved[3]; /* reserved */
-+};
-+#endif
-+
-+/* snapfs meta data stored in extended attributes of root ino */
-+#define DISK_SNAP_META_ATTR   "@disk_snap_meta_attr"
-+struct disk_snap_meta_data {
-+      ino_t snap_first_cowed_ino;
-+      ino_t snap_table_ino;
-+      __u32 snap_feature_compat;
-+};
-+/*snapfs quota info */
-+
-+#define SNAP_USR_QUOTA                0
-+#define SNAP_GRP_QUOTA                1
-+#define DISK_SNAP_QUOTA_INFO  "@disk_snap_quota_info"
-+struct quota_info_len {
-+      int     uid_len;     /*uid quota info length */
-+      int     gid_len;     /*gid quota info length */
-+};
-+/*
-+ * Check if the EA @name is Snap EA or not.
-+ * Snap EA includes the SNAP_ATTR, SNAP_NEW_INO_ATTR and DISK_SNAP_META_ATTR
-+ */
-+
-+#define IS_SNAP_EA(name) ( (!strcmp((name), SNAP_ATTR)) ||            \
-+                         (!strcmp((name), DISK_SNAP_META_ATTR)))
-+
-+
-+
-+/* file system features */
-+#define SNAP_FEATURE_COMPAT_SNAPFS              0x0010
-+#define SNAP_FEATURE_COMPAT_BLOCKCOW            0x0020
-+
-+/* constants for snap_feature operations */
-+#define SNAP_CLEAR_FEATURE    0x0
-+#define SNAP_SET_FEATURE      0x1
-+#define SNAP_HAS_FEATURE      0x2
-+
-+/* snap flags for inode, within 1 byte range, each occupy 1 bit */
-+#define SNAP_INO_MAGIC        0x88            /* magic for snap inode */
-+#define SNAP_COW_FLAG 0x01            /* snap redirected inode */
-+#define SNAP_DEL_FLAG 0x02            /* snap deleted inode */
-+#define SNAP_TABLE_FLAG       0x04            /* snap table inode */
-+#define SNAP_PRI_FLAG 0x08            /* primary inode */
-+
-+/* no snapfs attributes for get_indirect_ino */
-+#define ENOSNAPATTR   320
-+
-+/* constants used by iterator */
-+#define SNAP_ITERATE_ALL_INODE          0x0
-+#define SNAP_ITERATE_COWED_INODE        0x1
-+
-+/* constants used by create_indirect */
-+#define SNAP_CREATE_IND_NORMAL                0x0
-+#define       SNAP_CREATE_IND_DEL_PRI         0x1
-+
-+/* the data structure represent in the xfs_dinode.pad
-+      offset  0:      magic   (1 byte)
-+      offset  1:      flag    (1 byte)
-+      offset  2:      gen     (4 bytes)
-+      offset  6:      unused
-+ */
-+#define SIZEOF_MAGIC          1
-+#define SIZEOF_FLAG           1
-+#define SIZEOF_GENERATION     4
-+
-+#define MAGIC_OFFSET          0
-+#define FLAG_OFFSET           1
-+#define GENERATION_OFFSET     2
-+
-+#define SNAP_GET_DINODE_MAGIC(dinode) \
-+              (((__u8*)(dinode)->di_pad)[MAGIC_OFFSET])
-+#define SNAP_SET_DINODE_MAGIC(dinode) \
-+              ((__u8*)(dinode)->di_pad)[MAGIC_OFFSET] = (SNAP_INO_MAGIC)
-+#define SNAP_GET_DINODE_FLAG(dinode)  \
-+              (((__u8*)(dinode)->di_pad)[FLAG_OFFSET])
-+#define SNAP_SET_DINODE_FLAG(dinode, flag)    \
-+              (((__u8*)(dinode)->di_pad)[FLAG_OFFSET] |= (flag))
-+#define SNAP_CLEAR_DINODE_FLAG(dinode, flag)  \
-+              (((__u8*)(dinode)->di_pad)[FLAG_OFFSET] &= ~(flag))
-+#define SNAP_GET_DINODE_GEN(dinode)   \
-+              (le32_to_cpu(*(__u32*)(&((__u8*)(dinode)->di_pad)[GENERATION_OFFSET])))
-+#define SNAP_SET_DINODE_GEN(dinode, gen)      \
-+              *(__u32*)(&((__u8*)(dinode)->di_pad)[GENERATION_OFFSET]) = cpu_to_le32(gen)
-+
-+#if 0
-+/* header of saving snaptable */
-+struct raw_data {
-+      unsigned int size;      /* buffer size passed by */
-+      char data[0];           /* followed by actual data */
-+};
-+
-+/* header of on-disk table data */
-+struct disk_snap_table_header {
-+      __u32   magic;
-+      __u32   version;
-+      __u32   datasize;
-+};
-+
-+/* table magic and version constant */
-+#define SNAP_TABLE_MAGIC      0xB3A2957F
-+#define SNAP_TABLE_VERSION    1
-+
-+
-+#define SNAPTABLE_BLOCKS(sb,size)     \
-+              (((size-sizeof(__u32)+sizeof(struct disk_snap_table_header)) \
-+              >> sb->s_blocksize_bits)+1)
-+#endif
-+
-+#define SNAP_VERSION(a,b,c)           \
-+              (((a & 0xFF) << 16) | ((b & 0xFF) << 8) | (c & 0xFF))
-+#define SNAP_VERSION_MAJOR(v)         \
-+              ((v >> 16) & 0xFF)
-+#define SNAP_VERSION_MINOR(v)         \
-+              ((v >> 8) & 0xFF)
-+#define SNAP_VERSION_REL(v)           \
-+              (v & 0xFF)
-+
-+/* for snap meta attr table */
-+#define TABLE_ITEM_COUNT      200
-+#define TABLE_ITEM_SIZE               1000
-+#define TABLE_ITEM_NAME_SIZE  16
-+
-+/*snap table array */
-+struct snap_meta_array {
-+      char    name[TABLE_ITEM_NAME_SIZE];
-+      int     start;  /* where is the start of the array */
-+      int     len;  /* the len of the array */
-+}; 
-+/* snap table structure for record the information */
-+struct table_snap_meta_data {
-+      int                     count;
-+      struct snap_meta_array  array[TABLE_ITEM_COUNT]; 
-+};
-+
-+
-+#if 0
-+#define SNAP_PROFILE
-+#else
-+#undef SNAP_PROFILE
-+#endif
-+
-+#ifdef SNAP_PROFILE
-+struct profile_snapdel_stat
-+{
-+      unsigned long total_tick;               /* total time */
-+      unsigned long inodes;                   /* primary inodes */
-+
-+      unsigned long yield_count;              /* for yeild cpu */
-+      unsigned long yield_tick;
-+      unsigned long yield_max_tick;
-+
-+      unsigned long getea_count;              /* for get ea */
-+      unsigned long getea_tick;
-+      unsigned long getea_max_tick;
-+
-+      unsigned long setea_count;              /* for set ea */
-+      unsigned long setea_tick;
-+      unsigned long setea_max_tick;
-+
-+      unsigned long converge_count;           /* for converge */
-+      unsigned long converge_tick;
-+      unsigned long converge_max_tick;
-+};
-+
-+#endif
-+
-+/* snapshot operations */
-+struct snapshot_operations {
-+      unsigned int ops_version;
-+        int (*is_redirector) (struct inode *inode);
-+      int (*is_indirect) (struct inode *inode);
-+        struct inode * (*create_indirect) (struct inode *pri, int index,
-+                                         unsigned int gen, ino_t parent_ino,
-+                                         int del);
-+        struct inode * (*get_indirect) (struct inode *pri, int *table,int slot);
-+        ino_t (*get_indirect_ino) (struct inode *pri, int index);
-+        int (*destroy_indirect) (struct inode *pri, int index, 
-+                              struct inode *next_ind);
-+        int (*restore_indirect) (struct inode *pri, int index);
-+        int (*iterate) (struct super_block *sb,
-+                        int (*repeat)(struct inode *inode, void *priv),
-+                        struct inode **start, void *priv, int flag);
-+        int (*copy_block) ( struct inode *dst, struct inode *src, int blk);
-+      int (*has_block) (struct inode *dst, int blk);
-+      int (*set_indirect) (struct inode *pri, int index, 
-+                           ino_t ind_ino, ino_t parent_ino );
-+      int (*snap_feature) (struct super_block *sb, int feature, int op);
-+      int (*get_generation) (struct inode *pri);
-+      int (*set_generation) (struct inode *pri, unsigned long new_gen);
-+      int (*has_del_flag) (struct inode *inode);
-+      int (*clear_del_flag) (struct inode *inode);
-+      int (*set_meta_attr)(struct super_block *sb, char *name,
-+                              char *buf, int size);
-+      int (*get_meta_attr)(struct super_block *sb, char *name,
-+                              char *buf, int *size);
-+};
-+
-+#endif
-Index: linux-2.4.20-8/include/linux/ext3_fs.h
-===================================================================
---- linux-2.4.20-8.orig/include/linux/ext3_fs.h        2004-01-19 22:06:24.000000000 +0800
-+++ linux-2.4.20-8/include/linux/ext3_fs.h     2004-01-19 22:11:15.000000000 +0800
-@@ -183,7 +183,13 @@
- #define EXT3_INDEX_FL                 0x00001000 /* hash-indexed directory */
- #define EXT3_IMAGIC_FL                        0x00002000 /* AFS directory */
- #define EXT3_JOURNAL_DATA_FL          0x00004000 /* file data should be journaled */
--#define EXT3_RESERVED_FL              0x80000000 /* reserved for ext3 lib */
-+/* For snapfs in EXT3 flags --- FIXME will find other ways to store it*/
-+#define EXT3_COW_FL                   0x00008000 /* inode is snapshot cow */
-+#define EXT3_DEL_FL                   0x00010000 /* inode is deleting in snapshot */
-+#define EXT3_SNAP_TABLE_FLAG                  0x00020000 /* snap table inode */
-+/* FIXME For debugging will be removed later*/
-+#define EXT3_SNAP_PRI_FLAG            0x00040000 /* primary inode */
-+
- #define EXT3_FL_USER_VISIBLE          0x00005FFF /* User visible flags */
- #define EXT3_FL_USER_MODIFIABLE               0x000000FF /* User modifiable flags */
-@@ -205,10 +211,25 @@
- /* EXT3_IOC_CREATE_INUM at bottom of file (visible to kernel and user). */
- #define       EXT3_IOC_GETVERSION_OLD         _IOR('v', 1, long)
- #define       EXT3_IOC_SETVERSION_OLD         _IOW('v', 2, long)
-+/* the following are for temporary test */
-+/* snapfs ioctls */
-+#define EXT3_IOC_CREATE_INDIR           _IOW('v', 3, long)
-+#define EXT3_IOC_GET_INDIR              _IOW('v', 4, long)
-+#define EXT3_IOC_DESTROY_INDIR          _IOW('v', 5, long)
-+#define EXT3_IOC_IS_REDIR               _IOW('v', 6, long)
-+#define EXT3_IOC_RESTORE_INDIR          _IOW('v', 7, long)
-+
-+#define EXT3_IOC_SNAP_SETFILECOW       _IOW('v', 10, long)
-+
-+/* XXX: the following are for temporary test, can be removed later */
-+#define EXT3_IOC_SNAP_PRINT             _IOW('v', 11, long)
-+#define EXT3_IOC_SNAP_DELETE            _IOW('v', 12, long)
-+#define EXT3_IOC_SNAP_RESTORE           _IOW('v', 13, long)
-+
-+
- #ifdef CONFIG_JBD_DEBUG
- #define EXT3_IOC_WAIT_FOR_READONLY    _IOR('f', 99, long)
- #endif
--
- /*
-  * Structure of an inode on the disk
-  */
-@@ -429,7 +450,15 @@
-       __u8    s_def_hash_version;     /* Default hash version to use */
-       __u8    s_reserved_char_pad;
-       __u16   s_reserved_word_pad;
--      __u32   s_reserved[192];        /* Padding to the end of the block */
-+      __u32   s_default_mount_opts;
-+        __u32   s_first_meta_bg;        /* First metablock group */
-+      __u32   s_mkfs_time;            /* When the filesystem was created */
-+      /* for snapfs */
-+      __u32   s_first_cowed_pri_ino;  /* For snapfs,the first cowed primary inode */
-+      __u32   s_last_cowed_pri_ino;     /* last cowed ino in memory */
-+      __u32   s_snaptable_ino;        /* snaptable ino in memory */
-+      __u32   s_last_snap_orphan;     /* SnapFS: start of cowing indirect inode */
-+      __u32   s_reserved[186];        /* Padding to the end of the block,originally 204 */
- };
- #ifdef __KERNEL__
-@@ -503,6 +532,9 @@
- #define EXT3_FEATURE_INCOMPAT_RECOVER         0x0004 /* Needs recovery */
- #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV     0x0008 /* Journal device */
-+#define EXT3_FEATURE_COMPAT_SNAPFS             0x0010
-+#define EXT3_FEATURE_COMPAT_BLOCKCOW           0x0020
-+
- #define EXT3_FEATURE_COMPAT_SUPP      EXT2_FEATURE_COMPAT_EXT_ATTR
- #define EXT3_FEATURE_INCOMPAT_SUPP    (EXT3_FEATURE_INCOMPAT_FILETYPE| \
-                                        EXT3_FEATURE_INCOMPAT_RECOVER)
-Index: linux-2.4.20-8/include/linux/ext3_fs_sb.h
-===================================================================
---- linux-2.4.20-8.orig/include/linux/ext3_fs_sb.h     2004-01-19 22:06:18.000000000 +0800
-+++ linux-2.4.20-8/include/linux/ext3_fs_sb.h  2004-01-19 22:10:06.000000000 +0800
-@@ -86,6 +86,13 @@
-       wait_queue_head_t s_delete_thread_queue;
-       wait_queue_head_t s_delete_waiter_queue;
- #endif
-+#define EXT3_SNAP_FS
-+#ifdef EXT3_SNAP_FS
-+      struct semaphore s_snap_list_sem;
-+      unsigned long   s_first_cowed_pri_ino;/* For snapfs,the first cowed primary inode */
-+      unsigned long   s_last_cowed_pri_ino;     /* last cowed ino in memory */
-+      unsigned long   s_snaptable_ino;      /* snaptable ino in memory */
-+#endif
- };
- #endif        /* _LINUX_EXT3_FS_SB */
-Index: linux-2.4.20-8/include/linux/ext3_jbd.h
-===================================================================
---- linux-2.4.20-8.orig/include/linux/ext3_jbd.h       2004-01-19 22:06:15.000000000 +0800
-+++ linux-2.4.20-8/include/linux/ext3_jbd.h    2004-01-19 22:11:15.000000000 +0800
-@@ -71,6 +71,33 @@
- #define EXT3_INDEX_EXTRA_TRANS_BLOCKS 8
-+/*snapshot transaction blocks*/
-+
-+#define EXT3_EA_TRANS_BLOCKS          EXT3_DATA_TRANS_BLOCKS
-+#define EXT3_SETMETA_TRANS_BLOCKS     EXT3_DATA_TRANS_BLOCKS
-+#define EXT3_NEWINODE_TRANS_BLOCKS    10
-+#define SNAP_INSERTLIST_TRANS_BLOCKS  (2 * EXT3_EA_TRANS_BLOCKS + 1)
-+#define SNAP_DELETELIST_TRANS_BLOCKS  (2 * EXT3_EA_TRANS_BLOCKS + 2)
-+#define SNAP_COPYBLOCK_TRANS_BLOCKS   (EXT3_DATA_TRANS_BLOCKS)
-+#define SNAP_MIGRATEDATA_TRANS_BLOCKS 2
-+#define SNAP_SETIND_TRANS_BLOCKS      (SNAP_INSERTLIST_TRANS_BLOCKS + 1)
-+#define SNAP_ADDORPHAN_TRANS_BLOCKS   2
-+#define SNAP_REMOVEORPHAN_TRANS_BLOCKS        1
-+#define SNAP_RESTOREORPHAN_TRANS_BLOCKS       (EXT3_EA_TRANS_BLOCKS + \
-+                                       SNAP_DELETELIST_TRANS_BLOCKS + \
-+                                       EXT3_NEWINODE_TRANS_BLOCKS + \
-+                                       2 * SNAP_MIGRATEDATA_TRANS_BLOCKS)
-+#define SNAP_BIGCOPY_TRANS_BLOCKS     (2 * EXT3_DATA_TRANS_BLOCKS)
-+#define SNAP_CREATEIND_TRANS_BLOCKS   (EXT3_NEWINODE_TRANS_BLOCKS + \
-+                                       SNAP_MIGRATEDATA_TRANS_BLOCKS + \
-+                                       SNAP_SETIND_TRANS_BLOCKS + \
-+                                       SNAP_BIGCOPY_TRANS_BLOCKS + 3)
-+#define SNAP_MIGRATEBLK_TRANS_BLOCKS  2
-+#define SNAP_DESTROY_TRANS_BLOCKS     (SNAP_DELETELIST_TRANS_BLOCKS + \
-+                                       EXT3_EA_TRANS_BLOCKS + 2)
-+#define SNAP_RESTORE_TRANS_BLOCKS     (EXT3_NEWINODE_TRANS_BLOCKS + \
-+                                       2 * SNAP_MIGRATEDATA_TRANS_BLOCKS + 1)
-+
- int
- ext3_mark_iloc_dirty(handle_t *handle, 
-                    struct inode *inode,
-
-%diffstat
- fs/ext3/Makefile           |    2 
- fs/ext3/ext3-exports.c     |    3 
- fs/ext3/ialloc.c           |    7 
- fs/ext3/inode.c            |    4 
- fs/ext3/snap.c             | 2577 +++++++++++++++++++++++++++++++++++++++++++++
- fs/ext3/super.c            |    7 
- include/linux/ext3_fs.h    |   38 
- include/linux/ext3_fs_sb.h |    7 
- include/linux/ext3_jbd.h   |   27 
- include/linux/snap.h       |  266 ++++
- 10 files changed, 2932 insertions(+), 6 deletions(-)
-
diff --git a/lustre/kernel_patches/patches/tcp-zero-copy-2.4.19-pre1.patch b/lustre/kernel_patches/patches/tcp-zero-copy-2.4.19-pre1.patch
deleted file mode 100644 (file)
index bcd3f73..0000000
+++ /dev/null
@@ -1,461 +0,0 @@
-Index: linux-2.4.19-pre1/include/linux/skbuff.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/skbuff.h      2001-11-22 22:46:26.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/skbuff.h   2004-01-14 01:15:13.000000000 +0300
-@@ -116,6 +116,30 @@
-       __u16 size;
- };
-+/* Support for callback when skb data has been released */
-+typedef struct zccd                           /* Zero Copy Callback Descriptor */
-+{                                             /* (embed as first member of custom struct) */
-+      atomic_t        zccd_count;             /* reference count */
-+      void           (*zccd_destructor)(struct zccd *); /* callback when refcount reaches zero */
-+} zccd_t;
-+
-+static inline void zccd_init (zccd_t *d, void (*callback)(zccd_t *))
-+{
-+      atomic_set (&d->zccd_count, 1);
-+      d->zccd_destructor = callback;
-+}
-+
-+static inline void zccd_get (zccd_t *d)               /* take a reference */
-+{
-+      atomic_inc (&d->zccd_count);
-+}
-+
-+static inline void zccd_put (zccd_t *d)               /* release a reference */
-+{
-+      if (atomic_dec_and_test (&d->zccd_count))
-+              (d->zccd_destructor)(d);
-+}
-+
- /* This data is invariant across clones and lives at
-  * the end of the header data, ie. at skb->end.
-  */
-@@ -123,6 +147,12 @@
-       atomic_t        dataref;
-       unsigned int    nr_frags;
-       struct sk_buff  *frag_list;
-+      zccd_t          *zccd;                  /* zero copy descriptor */
-+      zccd_t          *zccd2;                 /* 2nd zero copy descriptor */
-+      /* NB we expect zero-copy data to be at least 1 packet, so
-+       * having 2 zccds means we don't unneccessarily split the packet
-+       * where consecutive zero-copy sends abutt.
-+       */
-       skb_frag_t      frags[MAX_SKB_FRAGS];
- };
-Index: linux-2.4.19-pre1/include/net/tcp.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/net/tcp.h   2001-11-22 22:47:22.000000000 +0300
-+++ linux-2.4.19-pre1/include/net/tcp.h        2004-01-14 01:15:13.000000000 +0300
-@@ -640,6 +640,8 @@
- extern int                    tcp_sendmsg(struct sock *sk, struct msghdr *msg, int size);
- extern ssize_t                        tcp_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags);
-+extern ssize_t                        tcp_sendpage_zccd(struct socket *sock, struct page *page, int offset, size_t size,
-+                                                int flags, zccd_t *zccd);
- extern int                    tcp_ioctl(struct sock *sk, 
-                                         int cmd, 
-@@ -733,6 +735,9 @@
-                                           struct msghdr *msg,
-                                           int len, int nonblock, 
-                                           int flags, int *addr_len);
-+extern int                    tcp_recvpackets(struct sock *sk,
-+                                              struct sk_buff_head *packets,
-+                                              int len, int nonblock);
- extern int                    tcp_listen_start(struct sock *sk);
-Index: linux-2.4.19-pre1/net/netsyms.c
-===================================================================
---- linux-2.4.19-pre1.orig/net/netsyms.c       2004-01-14 01:10:37.000000000 +0300
-+++ linux-2.4.19-pre1/net/netsyms.c    2004-01-14 01:15:54.000000000 +0300
-@@ -409,6 +409,9 @@
- #endif
-+EXPORT_SYMBOL(tcp_sendpage_zccd);
-+EXPORT_SYMBOL(tcp_recvpackets);
-+
- EXPORT_SYMBOL(netlink_set_err);
- EXPORT_SYMBOL(netlink_broadcast);
- EXPORT_SYMBOL(netlink_unicast);
-Index: linux-2.4.19-pre1/net/core/skbuff.c
-===================================================================
---- linux-2.4.19-pre1.orig/net/core/skbuff.c   2001-12-21 20:42:05.000000000 +0300
-+++ linux-2.4.19-pre1/net/core/skbuff.c        2004-01-14 01:15:13.000000000 +0300
-@@ -208,6 +208,8 @@
-       atomic_set(&(skb_shinfo(skb)->dataref), 1);
-       skb_shinfo(skb)->nr_frags = 0;
-       skb_shinfo(skb)->frag_list = NULL;
-+      skb_shinfo(skb)->zccd = NULL;           /* skbuffs kick off with NO user zero copy descriptors */
-+      skb_shinfo(skb)->zccd2 = NULL;
-       return skb;
- nodata:
-@@ -276,6 +278,10 @@
- {
-       if (!skb->cloned ||
-           atomic_dec_and_test(&(skb_shinfo(skb)->dataref))) {
-+              if (skb_shinfo(skb)->zccd != NULL) /* zero copy callback descriptor? */
-+                      zccd_put (skb_shinfo(skb)->zccd); /* release hold */
-+              if (skb_shinfo(skb)->zccd2 != NULL) /* 2nd zero copy callback descriptor? */
-+                      zccd_put (skb_shinfo(skb)->zccd2); /* release hold */
-               if (skb_shinfo(skb)->nr_frags) {
-                       int i;
-                       for (i = 0; i < skb_shinfo(skb)->nr_frags; i++)
-@@ -532,6 +538,8 @@
-       atomic_set(&(skb_shinfo(skb)->dataref), 1);
-       skb_shinfo(skb)->nr_frags = 0;
-       skb_shinfo(skb)->frag_list = NULL;
-+      skb_shinfo(skb)->zccd = NULL;           /* copied data => no user zero copy descriptor */
-+      skb_shinfo(skb)->zccd2 = NULL;
-       /* We are no longer a clone, even if we were. */
-       skb->cloned = 0;
-@@ -578,6 +586,14 @@
-       n->data_len = skb->data_len;
-       n->len = skb->len;
-+      if (skb_shinfo(skb)->zccd != NULL)      /* user zero copy descriptor? */
-+              zccd_get (skb_shinfo(skb)->zccd); /* 1 more ref (pages are shared) */
-+      skb_shinfo(n)->zccd = skb_shinfo(skb)->zccd;
-+
-+      if (skb_shinfo(skb)->zccd2 != NULL)     /* 2nd user zero copy descriptor? */
-+              zccd_get (skb_shinfo(skb)->zccd2); /* 1 more ref (pages are shared) */
-+      skb_shinfo(n)->zccd2 = skb_shinfo(skb)->zccd2;
-+
-       if (skb_shinfo(skb)->nr_frags) {
-               int i;
-@@ -620,6 +636,8 @@
-       u8 *data;
-       int size = nhead + (skb->end - skb->head) + ntail;
-       long off;
-+      zccd_t *zccd = skb_shinfo(skb)->zccd;   /* stash user zero copy descriptor */
-+      zccd_t *zccd2 = skb_shinfo(skb)->zccd2; /* stash 2nd user zero copy descriptor */
-       if (skb_shared(skb))
-               BUG();
-@@ -641,6 +659,11 @@
-       if (skb_shinfo(skb)->frag_list)
-               skb_clone_fraglist(skb);
-+      if (zccd != NULL)                       /* user zero copy descriptor? */
-+              zccd_get (zccd);                /* extra ref (pages are shared) */
-+      if (zccd2 != NULL)                      /* 2nd user zero copy descriptor? */
-+              zccd_get (zccd2);               /* extra ref (pages are shared) */
-+
-       skb_release_data(skb);
-       off = (data+nhead) - skb->head;
-@@ -655,6 +678,8 @@
-       skb->nh.raw += off;
-       skb->cloned = 0;
-       atomic_set(&skb_shinfo(skb)->dataref, 1);
-+      skb_shinfo(skb)->zccd = zccd;
-+      skb_shinfo(skb)->zccd2 = zccd2;
-       return 0;
- nodata:
-Index: linux-2.4.19-pre1/net/ipv4/tcp.c
-===================================================================
---- linux-2.4.19-pre1.orig/net/ipv4/tcp.c      2001-12-21 20:42:05.000000000 +0300
-+++ linux-2.4.19-pre1/net/ipv4/tcp.c   2004-01-14 01:15:13.000000000 +0300
-@@ -744,7 +744,7 @@
-       goto out;
- }
--ssize_t do_tcp_sendpages(struct sock *sk, struct page **pages, int poffset, size_t psize, int flags);
-+ssize_t do_tcp_sendpages(struct sock *sk, struct page **pages, int poffset, size_t psize, int flags, zccd_t *zccd);
- static inline int
- can_coalesce(struct sk_buff *skb, int i, struct page *page, int off)
-@@ -823,7 +823,8 @@
-       return err;
- }
--ssize_t do_tcp_sendpages(struct sock *sk, struct page **pages, int poffset, size_t psize, int flags)
-+/* Extra parameter: user zero copy descriptor (or NULL if not doing that) */
-+ssize_t do_tcp_sendpages(struct sock *sk, struct page **pages, int poffset, size_t psize, int flags, zccd_t *zccd)
- {
-       struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);
-       int mss_now;
-@@ -871,6 +872,17 @@
-                       copy = size;
-               i = skb_shinfo(skb)->nr_frags;
-+
-+              if (zccd != NULL &&             /* this is a zcc I/O */
-+                  skb_shinfo(skb)->zccd != NULL && /* skb is part of a zcc I/O */
-+                  skb_shinfo(skb)->zccd2 != NULL &&
-+                  skb_shinfo(skb)->zccd != zccd && /* not the same one */
-+                  skb_shinfo(skb)->zccd2 != zccd)
-+              {
-+                      tcp_mark_push (tp, skb);
-+                      goto new_segment;
-+              }
-+
-               if (can_coalesce(skb, i, page, offset)) {
-                       skb_shinfo(skb)->frags[i-1].size += copy;
-               } else if (i < MAX_SKB_FRAGS) {
-@@ -881,6 +893,20 @@
-                       goto new_segment;
-               }
-+              if (zccd != NULL &&     /* this is a zcc I/O */
-+                  skb_shinfo(skb)->zccd != zccd && /* not already referencing this zccd */
-+                  skb_shinfo(skb)->zccd2 != zccd)
-+              {
-+                      zccd_get (zccd);        /* bump ref count */
-+
-+                      BUG_TRAP (skb_shinfo(skb)->zccd2 == NULL);
-+
-+                      if (skb_shinfo(skb)->zccd == NULL) /* reference this zccd */
-+                              skb_shinfo(skb)->zccd = zccd;
-+                      else
-+                              skb_shinfo(skb)->zccd2 = zccd;
-+              }
-+
-               skb->len += copy;
-               skb->data_len += copy;
-               skb->ip_summed = CHECKSUM_HW;
-@@ -944,7 +970,31 @@
-       lock_sock(sk);
-       TCP_CHECK_TIMER(sk);
--      res = do_tcp_sendpages(sk, &page, offset, size, flags);
-+      res = do_tcp_sendpages(sk, &page, offset, size, flags, NULL);
-+      TCP_CHECK_TIMER(sk);
-+      release_sock(sk);
-+      return res;
-+}
-+
-+ssize_t tcp_sendpage_zccd(struct socket *sock, struct page *page, int offset, size_t size,
-+                        int flags, zccd_t *zccd)
-+{
-+      ssize_t res;
-+      struct sock *sk = sock->sk;
-+
-+#define TCP_ZC_CSUM_FLAGS (NETIF_F_IP_CSUM|NETIF_F_NO_CSUM|NETIF_F_HW_CSUM)
-+
-+      if (!(sk->route_caps & NETIF_F_SG) ||   /* caller shouldn't waste her time */
-+          !(sk->route_caps & TCP_ZC_CSUM_FLAGS)) /* on double mapping */
-+              BUG ();
-+
-+#undef TCP_ZC_CSUM_FLAGS
-+
-+      lock_sock(sk);
-+      TCP_CHECK_TIMER(sk);
-+
-+      res = do_tcp_sendpages(sk, &page, offset, size, flags, zccd);
-+
-       TCP_CHECK_TIMER(sk);
-       release_sock(sk);
-       return res;
-@@ -1683,6 +1733,202 @@
-       goto out;
- }
-+int tcp_recvpackets (struct sock *sk, struct sk_buff_head *packets,
-+                   int len, int nonblock)
-+{
-+      struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);
-+      int copied;
-+      long timeo;
-+
-+      BUG_TRAP (len > 0);
-+      /*BUG_TRAP ((flags & (MSG_OOB | MSG_PEEK | MSG_TRUNC)) == 0);*/
-+
-+      lock_sock(sk);
-+
-+      TCP_CHECK_TIMER(sk);
-+
-+      copied = -ENOTCONN;
-+      if (sk->state == TCP_LISTEN)
-+              goto out;
-+
-+      copied = 0;
-+      timeo = sock_rcvtimeo(sk, nonblock);
-+
-+      do {
-+              struct sk_buff * skb;
-+              u32 offset;
-+              unsigned long used;
-+              int exhausted;
-+              int eaten;
-+
-+              /* Are we at urgent data? Stop if we have read anything. */
-+              if (copied && tp->urg_data && tp->urg_seq == tp->copied_seq)
-+                      break;
-+
-+              /* We need to check signals first, to get correct SIGURG
-+               * handling. FIXME: Need to check this doesnt impact 1003.1g
-+               * and move it down to the bottom of the loop
-+               */
-+              if (signal_pending(current)) {
-+                      if (copied)
-+                              break;
-+                      copied = timeo ? sock_intr_errno(timeo) : -EAGAIN;
-+                      break;
-+              }
-+
-+              /* Next get a buffer. */
-+
-+              skb = skb_peek(&sk->receive_queue);
-+
-+              if (skb == NULL)                /* nothing ready */
-+              {
-+                      if (copied) {
-+                              if (sk->err ||
-+                                  sk->state == TCP_CLOSE ||
-+                                  (sk->shutdown & RCV_SHUTDOWN) ||
-+                                  !timeo ||
-+                                  (0))
-+                                      break;
-+                      } else {
-+                              if (sk->done)
-+                                      break;
-+
-+                              if (sk->err) {
-+                                      copied = sock_error(sk);
-+                                      break;
-+                              }
-+
-+                              if (sk->shutdown & RCV_SHUTDOWN)
-+                                      break;
-+
-+                              if (sk->state == TCP_CLOSE) {
-+                                      if (!sk->done) {
-+                                              /* This occurs when user tries to read
-+                                               * from never connected socket.
-+                                               */
-+                                              copied = -ENOTCONN;
-+                                              break;
-+                                      }
-+                                      break;
-+                              }
-+
-+                              if (!timeo) {
-+                                      copied = -EAGAIN;
-+                                      break;
-+                              }
-+                      }
-+
-+                      cleanup_rbuf(sk, copied);
-+                      timeo = tcp_data_wait(sk, timeo);
-+                      continue;
-+              }
-+
-+              BUG_TRAP (atomic_read (&skb->users) == 1);
-+
-+              exhausted = eaten = 0;
-+
-+              offset = tp->copied_seq - TCP_SKB_CB(skb)->seq;
-+              if (skb->h.th->syn)
-+                      offset--;
-+
-+              used = skb->len - offset;
-+
-+              if (tp->urg_data) {
-+                      u32 urg_offset = tp->urg_seq - tp->copied_seq;
-+                      if (urg_offset < used) {
-+                              if (!urg_offset) { /* at urgent date */
-+                                      if (!sk->urginline) {
-+                                              tp->copied_seq++; /* discard the single byte of urgent data */
-+                                              offset++;
-+                                              used--;
-+                                      }
-+                              } else          /* truncate read */
-+                                      used = urg_offset;
-+                      }
-+              }
-+
-+              BUG_TRAP (used >= 0);
-+              if (len < used)
-+                      used = len;
-+
-+              if (used == 0)
-+                      exhausted = 1;
-+              else
-+              {
-+                      if (skb_is_nonlinear (skb))
-+                      {
-+                              int   rc = skb_linearize (skb, GFP_KERNEL);
-+
-+                              printk ("tcp_recvpackets(): linearising: %d\n", rc);
-+
-+                              if (rc)
-+                              {
-+                                      if (!copied)
-+                                              copied = rc;
-+                                      break;
-+                              }
-+                      }
-+
-+                      if ((offset + used) == skb->len) /* consuming the whole packet */
-+                      {
-+                              __skb_unlink (skb, &sk->receive_queue);
-+                              dst_release (skb->dst);
-+                              skb_orphan (skb);
-+                              __skb_pull (skb, offset);
-+                              __skb_queue_tail (packets, skb);
-+                              exhausted = eaten = 1;
-+                      }
-+                      else                    /* consuming only part of the packet */
-+                      {
-+                              struct sk_buff *skb2 = skb_clone (skb, GFP_KERNEL);
-+
-+                              if (skb2 == NULL)
-+                              {
-+                                      if (!copied)
-+                                              copied = -ENOMEM;
-+                                      break;
-+                              }
-+
-+                              dst_release (skb2->dst);
-+                              __skb_pull (skb2, offset);
-+                              __skb_trim (skb2, used);
-+                              __skb_queue_tail (packets, skb2);
-+                      }
-+
-+                      tp->copied_seq += used;
-+                      copied += used;
-+                      len -= used;
-+              }
-+
-+              if (tp->urg_data && after(tp->copied_seq,tp->urg_seq)) {
-+                      tp->urg_data = 0;
-+                      tcp_fast_path_check(sk, tp);
-+              }
-+
-+              if (!exhausted)
-+                      continue;
-+
-+              if (skb->h.th->fin)
-+              {
-+                      tp->copied_seq++;
-+                      if (!eaten)
-+                              tcp_eat_skb (sk, skb);
-+                      break;
-+              }
-+
-+              if (!eaten)
-+                      tcp_eat_skb (sk, skb);
-+
-+      } while (len > 0);
-+
-+ out:
-+      /* Clean up data we have read: This will do ACK frames. */
-+      cleanup_rbuf(sk, copied);
-+      TCP_CHECK_TIMER(sk);
-+      release_sock(sk);
-+      return copied;
-+}
-+
- /*
-  *    State processing on a close. This implements the state shift for
-  *    sending our FIN frame. Note that we only send a FIN for some
diff --git a/lustre/kernel_patches/patches/uml-2.4.20-fixes-1.patch b/lustre/kernel_patches/patches/uml-2.4.20-fixes-1.patch
deleted file mode 100644 (file)
index 6f4c8e3..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
- arch/um/kernel/process.c           |    2 +-
- arch/um/kernel/skas/process.c      |   26 +++++++++++++-------------
- arch/um/kernel/skas/syscall_kern.c |    3 ++-
- arch/um/kernel/trap_user.c         |    2 +-
- arch/um/kernel/tt/syscall_kern.c   |    3 ++-
- arch/um/kernel/tt/uaccess_user.c   |    2 +-
- arch/um/kernel/uaccess_user.c      |    2 +-
- arch/um/link.ld.in                 |    1 -
- 8 files changed, 21 insertions(+), 20 deletions(-)
-
-Index: linux-2.4.20/arch/um/link.ld.in
-===================================================================
---- linux-2.4.20.orig/arch/um/link.ld.in       2003-10-25 00:35:59.000000000 +0400
-+++ linux-2.4.20/arch/um/link.ld.in    2003-10-25 00:36:02.000000000 +0400
-@@ -6,7 +6,6 @@
- {
-   . = START() + SIZEOF_HEADERS;
--  . = ALIGN(4096);
-   __binary_start = .;
- ifdef(`MODE_TT', `
-   .thread_private : {
-Index: linux-2.4.20/arch/um/kernel/process.c
-===================================================================
---- linux-2.4.20.orig/arch/um/kernel/process.c 2003-10-25 00:35:59.000000000 +0400
-+++ linux-2.4.20/arch/um/kernel/process.c      2003-10-25 00:36:02.000000000 +0400
-@@ -232,7 +232,7 @@
-       int n;
-       *jmp_ptr = &buf;
--      n = setjmp(buf);
-+      n = sigsetjmp(buf, 1);
-       if(n != 0)
-               return(n);
-       (*fn)(arg);
-Index: linux-2.4.20/arch/um/kernel/skas/process.c
-===================================================================
---- linux-2.4.20.orig/arch/um/kernel/skas/process.c    2003-10-25 00:35:59.000000000 +0400
-+++ linux-2.4.20/arch/um/kernel/skas/process.c 2003-10-25 00:36:02.000000000 +0400
-@@ -59,11 +59,11 @@
-       int err, syscall_nr, status;
-       syscall_nr = PT_SYSCALL_NR(regs->skas.regs);
-+      UPT_SYSCALL_NR(regs) = syscall_nr;
-       if(syscall_nr < 1){
-               relay_signal(SIGTRAP, regs);
-               return;
-       }
--      UPT_SYSCALL_NR(regs) = syscall_nr;
-       err = ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_NR_OFFSET, __NR_getpid);
-       if(err < 0)
-@@ -189,7 +189,7 @@
-       *switch_buf_ptr = &switch_buf;
-       *fork_buf_ptr = &fork_buf;
--      if(setjmp(fork_buf) == 0)
-+      if(sigsetjmp(fork_buf, 1) == 0)
-               new_thread_proc(stack, handler);
-       remove_sigstack();
-@@ -201,8 +201,8 @@
-       *switch_buf = &buf;
-       fork_buf = fb;
--      if(setjmp(buf) == 0)
--              longjmp(*fork_buf, 1);
-+      if(sigsetjmp(buf, 1) == 0)
-+              siglongjmp(*fork_buf, 1);
- }
- static int move_registers(int int_op, int fp_op, union uml_pt_regs *regs,
-@@ -260,8 +260,8 @@
-       jmp_buf my_buf, **me_ptr = me, *next_buf = next;
-       
-       *me_ptr = &my_buf;
--      if(setjmp(my_buf) == 0)
--              longjmp(*next_buf, 1);
-+      if(sigsetjmp(my_buf, 1) == 0)
-+              siglongjmp(*next_buf, 1);
- }
- static jmp_buf initial_jmpbuf;
-@@ -277,14 +277,14 @@
-       int n;
-       *fork_buf_ptr = &initial_jmpbuf;
--      n = setjmp(initial_jmpbuf);
-+      n = sigsetjmp(initial_jmpbuf, 1);
-       if(n == 0)
-               new_thread_proc((void *) stack, new_thread_handler);
-       else if(n == 1)
-               remove_sigstack();
-       else if(n == 2){
-               (*cb_proc)(cb_arg);
--              longjmp(*cb_back, 1);
-+              siglongjmp(*cb_back, 1);
-       }
-       else if(n == 3){
-               kmalloc_ok = 0;
-@@ -294,7 +294,7 @@
-               kmalloc_ok = 0;
-               return(1);
-       }
--      longjmp(**switch_buf, 1);
-+      siglongjmp(**switch_buf, 1);
- }
- void remove_sigstack(void)
-@@ -316,8 +316,8 @@
-       cb_back = &here;
-       block_signals();
--      if(setjmp(here) == 0)
--              longjmp(initial_jmpbuf, 2);
-+      if(sigsetjmp(here, 1) == 0)
-+              siglongjmp(initial_jmpbuf, 2);
-       unblock_signals();
-       cb_proc = NULL;
-@@ -328,13 +328,13 @@
- void halt_skas(void)
- {
-       block_signals();
--      longjmp(initial_jmpbuf, 3);
-+      siglongjmp(initial_jmpbuf, 3);
- }
- void reboot_skas(void)
- {
-       block_signals();
--      longjmp(initial_jmpbuf, 4);
-+      siglongjmp(initial_jmpbuf, 4);
- }
- int new_mm(int from)
-Index: linux-2.4.20/arch/um/kernel/skas/syscall_kern.c
-===================================================================
---- linux-2.4.20.orig/arch/um/kernel/skas/syscall_kern.c       2003-10-25 00:35:59.000000000 +0400
-+++ linux-2.4.20/arch/um/kernel/skas/syscall_kern.c    2003-10-25 00:36:02.000000000 +0400
-@@ -23,7 +23,8 @@
-       nsyscalls++;
-       syscall = UPT_SYSCALL_NR(&regs->regs);
--      if((syscall >= NR_syscalls) || (syscall < 0))
-+      if((syscall >= NR_syscalls) || (syscall < 0) || 
-+         (sys_call_table[syscall] == NULL))
-               res = -ENOSYS;
-       else res = EXECUTE_SYSCALL(syscall, regs);
-Index: linux-2.4.20/arch/um/kernel/trap_user.c
-===================================================================
---- linux-2.4.20.orig/arch/um/kernel/trap_user.c       2003-10-25 00:35:59.000000000 +0400
-+++ linux-2.4.20/arch/um/kernel/trap_user.c    2003-10-25 00:36:02.000000000 +0400
-@@ -125,7 +125,7 @@
- {
-       jmp_buf *buf = b;
--      longjmp(*buf, val);
-+      siglongjmp(*buf, val);
- }
- /*
-Index: linux-2.4.20/arch/um/kernel/tt/syscall_kern.c
-===================================================================
---- linux-2.4.20.orig/arch/um/kernel/tt/syscall_kern.c 2003-10-25 00:35:59.000000000 +0400
-+++ linux-2.4.20/arch/um/kernel/tt/syscall_kern.c      2003-10-25 00:36:02.000000000 +0400
-@@ -113,7 +113,8 @@
-       nsyscalls++;
-       syscall = UPT_SYSCALL_NR(&regs->regs);
--      if((syscall >= NR_syscalls) || (syscall < 0))
-+      if((syscall >= NR_syscalls) || (syscall < 0) || 
-+         (sys_call_table[syscall] == NULL))
-               res = -ENOSYS;
-       else if(honeypot && check_bogosity(regs))
-               res = -EFAULT;
-Index: linux-2.4.20/arch/um/kernel/tt/uaccess_user.c
-===================================================================
---- linux-2.4.20.orig/arch/um/kernel/tt/uaccess_user.c 2003-10-25 00:35:59.000000000 +0400
-+++ linux-2.4.20/arch/um/kernel/tt/uaccess_user.c      2003-10-25 00:36:02.000000000 +0400
-@@ -75,7 +75,7 @@
-       jmp_buf jbuf;
-       *fault_catcher = &jbuf;
--      if(setjmp(jbuf) == 0){
-+      if(sigsetjmp(jbuf, 1) == 0){
-               ret = strlen(str) + 1;
-       } 
-       else {
-Index: linux-2.4.20/arch/um/kernel/uaccess_user.c
-===================================================================
---- linux-2.4.20.orig/arch/um/kernel/uaccess_user.c    2003-10-25 00:35:59.000000000 +0400
-+++ linux-2.4.20/arch/um/kernel/uaccess_user.c 2003-10-25 00:36:02.000000000 +0400
-@@ -20,7 +20,7 @@
-       jmp_buf jbuf;
-       *fault_catcher = &jbuf;
--      if(setjmp(jbuf) == 0){
-+      if(sigsetjmp(jbuf, 1) == 0){
-               (*op)(to, from, n);
-               ret = 0;
-               *faulted_out = 0;
-Index: linux-2.4.20/arch/um/kernel/tt/ptproxy/sysdep.c
-===================================================================
---- linux-2.4.20.orig/arch/um/kernel/tt/ptproxy/sysdep.c       2003-10-25 00:35:59.000000000 +0400
-+++ linux-2.4.20/arch/um/kernel/tt/ptproxy/sysdep.c    2003-10-25 00:36:23.000000000 +0400
-@@ -9,6 +9,7 @@
- #include <string.h>
- #include <stdlib.h>
- #include <signal.h>
-+#include <errno.h>
- #include <sys/types.h>
- #include <sys/ptrace.h>
- #include <asm/ptrace.h>
index f10484d..3ca2d14 100644 (file)
@@ -6423,7 +6423,7 @@ Index: uml-2.6.7/fs/hostfs/hostfs_kern.c
 ===================================================================
 --- uml-2.6.7.orig/fs/hostfs/hostfs_kern.c     2004-07-16 19:47:23.631218720 +0300
 +++ uml-2.6.7/fs/hostfs/hostfs_kern.c  2004-07-16 19:47:24.263122656 +0300
-@@ -0,0 +1,1024 @@
+@@ -0,0 +1,1022 @@
 +/* 
 + * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -6716,7 +6716,6 @@ Index: uml-2.6.7/fs/hostfs/hostfs_kern.c
 +{
 +      if(HOSTFS_I(inode)->fd != -1) {
 +              close_file(&HOSTFS_I(inode)->fd);
-+              printk("Closing host fd in .delete_inode\n");
 +              HOSTFS_I(inode)->fd = -1;
 +      }
 +      clear_inode(inode);
@@ -6729,7 +6728,6 @@ Index: uml-2.6.7/fs/hostfs/hostfs_kern.c
 +
 +      if(HOSTFS_I(inode)->fd != -1) {
 +              close_file(&HOSTFS_I(inode)->fd);
-+              printk("Closing host fd in .destroy_inode\n");
 +      }
 +
 +      kfree(HOSTFS_I(inode));
diff --git a/lustre/kernel_patches/patches/uml-patch-2.4.20-6.patch b/lustre/kernel_patches/patches/uml-patch-2.4.20-6.patch
deleted file mode 100644 (file)
index 6bb0d68..0000000
+++ /dev/null
@@ -1,39586 +0,0 @@
-diff -Naur -X ../exclude-files orig/arch/um/common.ld.in um/arch/um/common.ld.in
---- orig/arch/um/common.ld.in  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/common.ld.in    2003-02-04 19:35:13.000000000 -0500
-@@ -0,0 +1,53 @@
-+  .kstrtab : { *(.kstrtab) }
-+
-+  . = ALIGN(16);              /* Exception table */
-+  __start___ex_table = .;
-+  __ex_table : { *(__ex_table) }
-+  __stop___ex_table = .;
-+
-+  __start___ksymtab = .;      /* Kernel symbol table */
-+  __ksymtab : { *(__ksymtab) }
-+  __stop___ksymtab = .;
-+
-+  .unprotected : { *(.unprotected) }
-+  . = ALIGN(4096);
-+  PROVIDE (_unprotected_end = .);
-+
-+  . = ALIGN(4096);
-+  __uml_setup_start = .;
-+  .uml.setup.init : { *(.uml.setup.init) }
-+  __uml_setup_end = .;
-+  __uml_help_start = .;
-+  .uml.help.init : { *(.uml.help.init) }
-+  __uml_help_end = .;
-+  __uml_postsetup_start = .;
-+  .uml.postsetup.init : { *(.uml.postsetup.init) }
-+  __uml_postsetup_end = .;
-+  __setup_start = .;
-+  .setup.init : { *(.setup.init) }
-+  __setup_end = .;
-+  __initcall_start = .;
-+  .initcall.init : { *(.initcall.init) }
-+  __initcall_end = .;
-+  __uml_initcall_start = .;
-+  .uml.initcall.init : { *(.uml.initcall.init) }
-+  __uml_initcall_end = .;
-+  __init_end = .;
-+  __exitcall_begin = .;
-+  .exitcall : { *(.exitcall.exit) }
-+  __exitcall_end = .;
-+  __uml_exitcall_begin = .;
-+  .uml.exitcall : { *(.uml.exitcall.exit) }
-+  __uml_exitcall_end = .;
-+
-+  __preinit_array_start = .;
-+  .preinit_array : { *(.preinit_array) }
-+  __preinit_array_end = .;
-+  __init_array_start = .;
-+  .init_array : { *(.init_array) }
-+  __init_array_end = .;
-+  __fini_array_start = .;
-+  .fini_array : { *(.fini_array) }
-+  __fini_array_end = .;
-+
-+  .data.init : { *(.data.init) }
-diff -Naur -X ../exclude-files orig/arch/um/config_block.in um/arch/um/config_block.in
---- orig/arch/um/config_block.in       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/config_block.in 2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,16 @@
-+mainmenu_option next_comment
-+comment 'Block Devices'
-+
-+bool 'Virtual block device' CONFIG_BLK_DEV_UBD
-+dep_bool '  Always do synchronous disk IO for UBD' CONFIG_BLK_DEV_UBD_SYNC $CONFIG_BLK_DEV_UBD
-+tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP
-+dep_tristate 'Network block device support' CONFIG_BLK_DEV_NBD $CONFIG_NET
-+tristate 'RAM disk support' CONFIG_BLK_DEV_RAM
-+if [ "$CONFIG_BLK_DEV_RAM" = "y" -o "$CONFIG_BLK_DEV_RAM" = "m" ]; then
-+      int '   Default RAM disk size' CONFIG_BLK_DEV_RAM_SIZE 4096
-+fi
-+dep_bool '  Initial RAM disk (initrd) support' CONFIG_BLK_DEV_INITRD $CONFIG_BLK_DEV_RAM
-+
-+tristate 'Example IO memory driver' CONFIG_MMAPPER
-+
-+endmenu
-diff -Naur -X ../exclude-files orig/arch/um/config_char.in um/arch/um/config_char.in
---- orig/arch/um/config_char.in        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/config_char.in  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,37 @@
-+mainmenu_option next_comment
-+comment 'Character Devices'
-+
-+define_bool CONFIG_STDIO_CONSOLE y
-+
-+bool 'Virtual serial line' CONFIG_SSL
-+
-+bool 'file descriptor channel support' CONFIG_FD_CHAN
-+bool 'null channel support' CONFIG_NULL_CHAN
-+bool 'port channel support' CONFIG_PORT_CHAN
-+bool 'pty channel support' CONFIG_PTY_CHAN
-+bool 'tty channel support' CONFIG_TTY_CHAN
-+bool 'xterm channel support' CONFIG_XTERM_CHAN
-+string 'Default main console channel initialization' CONFIG_CON_ZERO_CHAN \
-+            "fd:0,fd:1"
-+string 'Default console channel initialization' CONFIG_CON_CHAN "xterm"
-+string 'Default serial line channel initialization' CONFIG_SSL_CHAN "pty"
-+
-+
-+bool 'Unix98 PTY support' CONFIG_UNIX98_PTYS
-+if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
-+   int 'Maximum number of Unix98 PTYs in use (0-2048)' CONFIG_UNIX98_PTY_COUNT 256
-+fi
-+
-+bool 'Watchdog Timer Support' CONFIG_WATCHDOG
-+dep_bool '  Disable watchdog shutdown on close' CONFIG_WATCHDOG_NOWAYOUT \
-+      $CONFIG_WATCHDOG
-+dep_tristate '  Software Watchdog' CONFIG_SOFT_WATCHDOG $CONFIG_WATCHDOG
-+dep_tristate '  UML watchdog' CONFIG_UML_WATCHDOG $CONFIG_WATCHDOG
-+
-+tristate 'Sound support' CONFIG_UML_SOUND
-+define_tristate CONFIG_SOUND $CONFIG_UML_SOUND
-+define_tristate CONFIG_HOSTAUDIO $CONFIG_UML_SOUND
-+
-+bool 'Enable tty logging' CONFIG_TTY_LOG
-+
-+endmenu
-diff -Naur -X ../exclude-files orig/arch/um/config.in um/arch/um/config.in
---- orig/arch/um/config.in     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/config.in       2003-02-27 13:12:39.000000000 -0500
-@@ -0,0 +1,104 @@
-+define_bool CONFIG_USERMODE y
-+
-+mainmenu_name "Linux/Usermode Kernel Configuration"
-+
-+define_bool CONFIG_ISA n
-+define_bool CONFIG_SBUS n
-+define_bool CONFIG_PCI n
-+
-+define_bool CONFIG_UID16 y
-+
-+define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM y
-+
-+mainmenu_option next_comment
-+comment 'Code maturity level options'
-+bool 'Prompt for development and/or incomplete code/drivers' CONFIG_EXPERIMENTAL
-+endmenu
-+
-+mainmenu_option next_comment
-+comment 'General Setup'
-+
-+bool 'Separate kernel address space support' CONFIG_MODE_SKAS
-+
-+# This is to ensure that at least one of the modes is enabled.  When neither
-+# is present in defconfig, they default to N, which is bad.
-+if [ "$CONFIG_MODE_SKAS" != "y" ]; then
-+   define_bool CONFIG_MODE_TT y
-+fi
-+
-+bool 'Tracing thread support' CONFIG_MODE_TT
-+if [ "$CONFIG_MODE_TT" != "y" ]; then
-+   bool 'Statically linked binary when CONFIG_MODE_TT is disabled' CONFIG_STATIC_LINK
-+fi
-+bool 'Networking support' CONFIG_NET
-+bool 'System V IPC' CONFIG_SYSVIPC
-+bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
-+bool 'Sysctl support' CONFIG_SYSCTL
-+tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
-+tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
-+tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
-+tristate 'Host filesystem' CONFIG_HOSTFS
-+tristate 'Honeypot proc filesystem' CONFIG_HPPFS
-+bool 'Management console' CONFIG_MCONSOLE
-+dep_bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ $CONFIG_MCONSOLE
-+bool '2G/2G host address space split' CONFIG_HOST_2G_2G
-+bool 'Symmetric multi-processing support' CONFIG_UML_SMP
-+define_bool CONFIG_SMP $CONFIG_UML_SMP
-+int 'Nesting level' CONFIG_NEST_LEVEL 0
-+int 'Kernel address space size (in .5G units)' CONFIG_KERNEL_HALF_GIGS 1
-+bool 'Highmem support' CONFIG_HIGHMEM
-+bool '/proc/mm' CONFIG_PROC_MM
-+int 'Kernel stack size order' CONFIG_KERNEL_STACK_ORDER 2
-+endmenu
-+
-+mainmenu_option next_comment
-+comment 'Loadable module support'
-+bool 'Enable loadable module support' CONFIG_MODULES
-+if [ "$CONFIG_MODULES" = "y" ]; then
-+# MODVERSIONS does not yet work in this architecture
-+#   bool '  Set version information on all module symbols' CONFIG_MODVERSIONS
-+    bool '  Kernel module loader' CONFIG_KMOD
-+fi
-+endmenu
-+
-+source arch/um/config_char.in
-+
-+source arch/um/config_block.in
-+
-+define_bool CONFIG_NETDEVICES $CONFIG_NET
-+
-+if [ "$CONFIG_NET" = "y" ]; then
-+   source arch/um/config_net.in
-+   source net/Config.in
-+fi
-+
-+source fs/Config.in
-+
-+mainmenu_option next_comment
-+comment 'SCSI support'
-+
-+tristate 'SCSI support' CONFIG_SCSI
-+
-+if [ "$CONFIG_SCSI" != "n" ]; then
-+   source arch/um/config_scsi.in
-+fi
-+endmenu
-+
-+source drivers/md/Config.in
-+
-+source drivers/mtd/Config.in
-+
-+source lib/Config.in
-+
-+mainmenu_option next_comment
-+comment 'Kernel hacking'
-+bool 'Debug memory allocations' CONFIG_DEBUG_SLAB
-+bool 'Enable kernel debugging symbols' CONFIG_DEBUGSYM
-+if [ "$CONFIG_XTERM_CHAN" = "y" ]; then
-+   dep_bool 'Enable ptrace proxy' CONFIG_PT_PROXY $CONFIG_DEBUGSYM
-+else 
-+   define_bool CONFIG_PT_PROXY n
-+fi
-+dep_bool 'Enable gprof support' CONFIG_GPROF $CONFIG_DEBUGSYM
-+dep_bool 'Enable gcov support' CONFIG_GCOV $CONFIG_DEBUGSYM
-+endmenu
-diff -Naur -X ../exclude-files orig/arch/um/config_net.in um/arch/um/config_net.in
---- orig/arch/um/config_net.in 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/config_net.in   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,47 @@
-+mainmenu_option next_comment
-+comment 'Network Devices'
-+
-+# UML virtual driver
-+bool 'Virtual network device' CONFIG_UML_NET
-+
-+dep_bool '  Ethertap transport' CONFIG_UML_NET_ETHERTAP $CONFIG_UML_NET
-+dep_bool '  TUN/TAP transport' CONFIG_UML_NET_TUNTAP $CONFIG_UML_NET
-+dep_bool '  SLIP transport' CONFIG_UML_NET_SLIP $CONFIG_UML_NET
-+dep_bool '  SLiRP transport' CONFIG_UML_NET_SLIRP $CONFIG_UML_NET
-+dep_bool '  Daemon transport' CONFIG_UML_NET_DAEMON $CONFIG_UML_NET
-+dep_bool '  Multicast transport' CONFIG_UML_NET_MCAST $CONFIG_UML_NET
-+dep_bool '  pcap transport' CONFIG_UML_NET_PCAP $CONFIG_UML_NET
-+
-+# Below are hardware-independent drivers mirrored from
-+# drivers/net/Config.in. It would be nice if Linux
-+# had HW independent drivers separated from the other
-+# but it does not. Until then each non-ISA/PCI arch
-+# needs to provide it's own menu of network drivers
-+
-+tristate 'Dummy net driver support' CONFIG_DUMMY
-+tristate 'Bonding driver support' CONFIG_BONDING
-+tristate 'EQL (serial line load balancing) support' CONFIG_EQUALIZER
-+tristate 'Universal TUN/TAP device driver support' CONFIG_TUN
-+if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-+   if [ "$CONFIG_NETLINK" = "y" ]; then
-+      tristate 'Ethertap network tap (OBSOLETE)' CONFIG_ETHERTAP
-+   fi
-+fi
-+
-+tristate 'PPP (point-to-point protocol) support' CONFIG_PPP
-+if [ ! "$CONFIG_PPP" = "n" ]; then
-+   dep_bool '  PPP multilink support (EXPERIMENTAL)' CONFIG_PPP_MULTILINK $CONFIG_EXPERIMENTAL
-+   dep_bool '  PPP filtering' CONFIG_PPP_FILTER $CONFIG_FILTER
-+   dep_tristate '  PPP support for async serial ports' CONFIG_PPP_ASYNC $CONFIG_PPP
-+   dep_tristate '  PPP support for sync tty ports' CONFIG_PPP_SYNC_TTY $CONFIG_PPP
-+   dep_tristate '  PPP Deflate compression' CONFIG_PPP_DEFLATE $CONFIG_PPP
-+   dep_tristate '  PPP BSD-Compress compression' CONFIG_PPP_BSDCOMP $CONFIG_PPP
-+   dep_tristate '  PPP over Ethernet (EXPERIMENTAL)' CONFIG_PPPOE $CONFIG_PPP $CONFIG_EXPERIMENTAL
-+fi
-+
-+tristate 'SLIP (serial line) support' CONFIG_SLIP
-+dep_bool '  CSLIP compressed headers' CONFIG_SLIP_COMPRESSED $CONFIG_SLIP
-+dep_bool '  Keepalive and linefill' CONFIG_SLIP_SMART $CONFIG_SLIP
-+dep_bool '  Six bit SLIP encapsulation' CONFIG_SLIP_MODE_SLIP6 $CONFIG_SLIP
-+
-+endmenu
-diff -Naur -X ../exclude-files orig/arch/um/config.release um/arch/um/config.release
---- orig/arch/um/config.release        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/config.release  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,302 @@
-+#
-+# Automatically generated make config: don't edit
-+#
-+CONFIG_USERMODE=y
-+# CONFIG_ISA is not set
-+# CONFIG_SBUS is not set
-+# CONFIG_PCI is not set
-+CONFIG_UID16=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+
-+#
-+# Code maturity level options
-+#
-+CONFIG_EXPERIMENTAL=y
-+
-+#
-+# General Setup
-+#
-+CONFIG_NET=y
-+CONFIG_SYSVIPC=y
-+CONFIG_BSD_PROCESS_ACCT=y
-+CONFIG_SYSCTL=y
-+CONFIG_BINFMT_AOUT=y
-+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=y
-+CONFIG_HOSTFS=y
-+# CONFIG_HPPFS is not set
-+CONFIG_MCONSOLE=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_HOST_2G_2G is not set
-+# CONFIG_UML_SMP is not set
-+# CONFIG_SMP is not set
-+CONFIG_NEST_LEVEL=0
-+CONFIG_KERNEL_HALF_GIGS=1
-+
-+#
-+# Loadable module support
-+#
-+CONFIG_MODULES=y
-+CONFIG_KMOD=y
-+
-+#
-+# Character Devices
-+#
-+CONFIG_STDIO_CONSOLE=y
-+CONFIG_SSL=y
-+CONFIG_FD_CHAN=y
-+# CONFIG_NULL_CHAN is not set
-+CONFIG_PORT_CHAN=y
-+CONFIG_PTY_CHAN=y
-+CONFIG_TTY_CHAN=y
-+CONFIG_XTERM_CHAN=y
-+CONFIG_CON_ZERO_CHAN="fd:0,fd:1"
-+CONFIG_CON_CHAN="xterm"
-+CONFIG_SSL_CHAN="pty"
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_UNIX98_PTY_COUNT=256
-+# CONFIG_WATCHDOG is not set
-+CONFIG_UML_SOUND=y
-+CONFIG_SOUND=y
-+CONFIG_HOSTAUDIO=y
-+# CONFIG_TTY_LOG is not set
-+
-+#
-+# Block Devices
-+#
-+CONFIG_BLK_DEV_UBD=y
-+# CONFIG_BLK_DEV_UBD_SYNC is not set
-+CONFIG_BLK_DEV_LOOP=y
-+CONFIG_BLK_DEV_NBD=y
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_SIZE=4096
-+CONFIG_BLK_DEV_INITRD=y
-+# CONFIG_MMAPPER is not set
-+CONFIG_NETDEVICES=y
-+
-+#
-+# Network Devices
-+#
-+CONFIG_UML_NET=y
-+CONFIG_UML_NET_ETHERTAP=y
-+CONFIG_UML_NET_TUNTAP=y
-+CONFIG_UML_NET_SLIP=y
-+CONFIG_UML_NET_DAEMON=y
-+CONFIG_UML_NET_MCAST=y
-+CONFIG_DUMMY=y
-+CONFIG_BONDING=m
-+CONFIG_EQUALIZER=m
-+CONFIG_TUN=y
-+CONFIG_PPP=m
-+CONFIG_PPP_MULTILINK=y
-+# CONFIG_PPP_ASYNC is not set
-+CONFIG_PPP_SYNC_TTY=m
-+CONFIG_PPP_DEFLATE=m
-+CONFIG_PPP_BSDCOMP=m
-+CONFIG_PPPOE=m
-+CONFIG_SLIP=m
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+CONFIG_PACKET_MMAP=y
-+# CONFIG_NETLINK_DEV is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_FILTER is not set
-+CONFIG_UNIX=y
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+# CONFIG_IP_PNP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_INET_ECN is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_KHTTPD is not set
-+# CONFIG_ATM is not set
-+# CONFIG_VLAN_8021Q is not set
-+
-+#
-+#  
-+#
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+
-+#
-+# Appletalk devices
-+#
-+# CONFIG_DECNET is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_LLC is not set
-+# CONFIG_NET_DIVERT is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_FASTROUTE is not set
-+# CONFIG_NET_HW_FLOWCONTROL is not set
-+
-+#
-+# QoS and/or fair queueing
-+#
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_QUOTA=y
-+CONFIG_AUTOFS_FS=m
-+CONFIG_AUTOFS4_FS=m
-+CONFIG_REISERFS_FS=m
-+# CONFIG_REISERFS_CHECK is not set
-+# CONFIG_REISERFS_PROC_INFO is not set
-+CONFIG_ADFS_FS=m
-+# CONFIG_ADFS_FS_RW is not set
-+CONFIG_AFFS_FS=m
-+CONFIG_HFS_FS=m
-+CONFIG_BFS_FS=m
-+CONFIG_EXT3_FS=y
-+CONFIG_JBD=y
-+# CONFIG_JBD_DEBUG is not set
-+CONFIG_FAT_FS=y
-+CONFIG_MSDOS_FS=y
-+CONFIG_UMSDOS_FS=y
-+CONFIG_VFAT_FS=y
-+CONFIG_EFS_FS=m
-+CONFIG_CRAMFS=m
-+CONFIG_TMPFS=y
-+CONFIG_RAMFS=y
-+CONFIG_ISO9660_FS=y
-+# CONFIG_JOLIET is not set
-+# CONFIG_ZISOFS is not set
-+CONFIG_MINIX_FS=m
-+CONFIG_VXFS_FS=m
-+# CONFIG_NTFS_FS is not set
-+CONFIG_HPFS_FS=m
-+CONFIG_PROC_FS=y
-+CONFIG_DEVFS_FS=y
-+CONFIG_DEVFS_MOUNT=y
-+# CONFIG_DEVFS_DEBUG is not set
-+CONFIG_DEVPTS_FS=y
-+CONFIG_QNX4FS_FS=m
-+# CONFIG_QNX4FS_RW is not set
-+CONFIG_ROMFS_FS=m
-+CONFIG_EXT2_FS=y
-+CONFIG_SYSV_FS=m
-+CONFIG_UDF_FS=m
-+# CONFIG_UDF_RW is not set
-+CONFIG_UFS_FS=m
-+# CONFIG_UFS_FS_WRITE is not set
-+
-+#
-+# Network File Systems
-+#
-+# CONFIG_CODA_FS is not set
-+# CONFIG_INTERMEZZO_FS is not set
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+CONFIG_NFSD=y
-+CONFIG_NFSD_V3=y
-+CONFIG_SUNRPC=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+# CONFIG_SMB_FS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_ZISOFS_FS is not set
-+CONFIG_ZLIB_FS_INFLATE=m
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_SMB_NLS is not set
-+CONFIG_NLS=y
-+
-+#
-+# Native Language Support
-+#
-+CONFIG_NLS_DEFAULT="iso8859-1"
-+# CONFIG_NLS_CODEPAGE_437 is not set
-+# CONFIG_NLS_CODEPAGE_737 is not set
-+# CONFIG_NLS_CODEPAGE_775 is not set
-+# CONFIG_NLS_CODEPAGE_850 is not set
-+# CONFIG_NLS_CODEPAGE_852 is not set
-+# CONFIG_NLS_CODEPAGE_855 is not set
-+# CONFIG_NLS_CODEPAGE_857 is not set
-+# CONFIG_NLS_CODEPAGE_860 is not set
-+# CONFIG_NLS_CODEPAGE_861 is not set
-+# CONFIG_NLS_CODEPAGE_862 is not set
-+# CONFIG_NLS_CODEPAGE_863 is not set
-+# CONFIG_NLS_CODEPAGE_864 is not set
-+# CONFIG_NLS_CODEPAGE_865 is not set
-+# CONFIG_NLS_CODEPAGE_866 is not set
-+# CONFIG_NLS_CODEPAGE_869 is not set
-+# CONFIG_NLS_CODEPAGE_936 is not set
-+# CONFIG_NLS_CODEPAGE_950 is not set
-+# CONFIG_NLS_CODEPAGE_932 is not set
-+# CONFIG_NLS_CODEPAGE_949 is not set
-+# CONFIG_NLS_CODEPAGE_874 is not set
-+# CONFIG_NLS_ISO8859_8 is not set
-+# CONFIG_NLS_CODEPAGE_1250 is not set
-+# CONFIG_NLS_CODEPAGE_1251 is not set
-+# CONFIG_NLS_ISO8859_1 is not set
-+# CONFIG_NLS_ISO8859_2 is not set
-+# CONFIG_NLS_ISO8859_3 is not set
-+# CONFIG_NLS_ISO8859_4 is not set
-+# CONFIG_NLS_ISO8859_5 is not set
-+# CONFIG_NLS_ISO8859_6 is not set
-+# CONFIG_NLS_ISO8859_7 is not set
-+# CONFIG_NLS_ISO8859_9 is not set
-+# CONFIG_NLS_ISO8859_13 is not set
-+# CONFIG_NLS_ISO8859_14 is not set
-+# CONFIG_NLS_ISO8859_15 is not set
-+# CONFIG_NLS_KOI8_R is not set
-+# CONFIG_NLS_KOI8_U is not set
-+# CONFIG_NLS_UTF8 is not set
-+
-+#
-+# SCSI support
-+#
-+CONFIG_SCSI=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+# CONFIG_BLK_DEV_SD is not set
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+# CONFIG_CHR_DEV_SG is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_DEBUG_QUEUES is not set
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+CONFIG_SCSI_DEBUG=m
-+
-+#
-+# Multi-device support (RAID and LVM)
-+#
-+# CONFIG_MD is not set
-+
-+#
-+# Memory Technology Devices (MTD)
-+#
-+# CONFIG_MTD is not set
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_DEBUG_SLAB is not set
-+# CONFIG_DEBUGSYM is not set
-diff -Naur -X ../exclude-files orig/arch/um/config_scsi.in um/arch/um/config_scsi.in
---- orig/arch/um/config_scsi.in        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/config_scsi.in  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,30 @@
-+comment 'SCSI support type (disk, tape, CD-ROM)'
-+
-+dep_tristate '  SCSI disk support' CONFIG_BLK_DEV_SD $CONFIG_SCSI
-+
-+if [ "$CONFIG_BLK_DEV_SD" != "n" ]; then
-+   int  'Maximum number of SCSI disks that can be loaded as modules' CONFIG_SD_EXTRA_DEVS 40
-+fi
-+
-+dep_tristate '  SCSI tape support' CONFIG_CHR_DEV_ST $CONFIG_SCSI
-+
-+dep_tristate '  SCSI CD-ROM support' CONFIG_BLK_DEV_SR $CONFIG_SCSI
-+
-+if [ "$CONFIG_BLK_DEV_SR" != "n" ]; then
-+   bool '    Enable vendor-specific extensions (for SCSI CDROM)' CONFIG_BLK_DEV_SR_VENDOR
-+   int  'Maximum number of CDROM devices that can be loaded as modules' CONFIG_SR_EXTRA_DEVS 2
-+fi
-+dep_tristate '  SCSI generic support' CONFIG_CHR_DEV_SG $CONFIG_SCSI
-+
-+comment 'Some SCSI devices (e.g. CD jukebox) support multiple LUNs'
-+
-+#if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-+   bool '  Enable extra checks in new queueing code' CONFIG_SCSI_DEBUG_QUEUES
-+#fi
-+
-+bool '  Probe all LUNs on each SCSI device' CONFIG_SCSI_MULTI_LUN
-+  
-+bool '  Verbose SCSI error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS
-+bool '  SCSI logging facility' CONFIG_SCSI_LOGGING
-+
-+dep_tristate 'SCSI debugging host simulator (EXPERIMENTAL)' CONFIG_SCSI_DEBUG $CONFIG_SCSI
-diff -Naur -X ../exclude-files orig/arch/um/defconfig um/arch/um/defconfig
---- orig/arch/um/defconfig     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/defconfig       2003-01-20 11:26:54.000000000 -0500
-@@ -0,0 +1,396 @@
-+#
-+# Automatically generated make config: don't edit
-+#
-+CONFIG_USERMODE=y
-+# CONFIG_ISA is not set
-+# CONFIG_SBUS is not set
-+# CONFIG_PCI is not set
-+CONFIG_UID16=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+
-+#
-+# Code maturity level options
-+#
-+CONFIG_EXPERIMENTAL=y
-+
-+#
-+# General Setup
-+#
-+CONFIG_MODE_TT=y
-+CONFIG_MODE_SKAS=y
-+CONFIG_NET=y
-+CONFIG_SYSVIPC=y
-+CONFIG_BSD_PROCESS_ACCT=y
-+CONFIG_SYSCTL=y
-+CONFIG_BINFMT_AOUT=y
-+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=y
-+CONFIG_HOSTFS=y
-+CONFIG_HPPFS=y
-+CONFIG_MCONSOLE=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_HOST_2G_2G is not set
-+# CONFIG_UML_SMP is not set
-+# CONFIG_SMP is not set
-+CONFIG_NEST_LEVEL=0
-+CONFIG_KERNEL_HALF_GIGS=1
-+# CONFIG_HIGHMEM is not set
-+CONFIG_PROC_MM=y
-+CONFIG_KERNEL_STACK_ORDER=2
-+
-+#
-+# Loadable module support
-+#
-+CONFIG_MODULES=y
-+# CONFIG_KMOD is not set
-+
-+#
-+# Character Devices
-+#
-+CONFIG_STDIO_CONSOLE=y
-+CONFIG_SSL=y
-+CONFIG_FD_CHAN=y
-+CONFIG_NULL_CHAN=y
-+CONFIG_PORT_CHAN=y
-+CONFIG_PTY_CHAN=y
-+CONFIG_TTY_CHAN=y
-+CONFIG_XTERM_CHAN=y
-+CONFIG_CON_ZERO_CHAN="fd:0,fd:1"
-+CONFIG_CON_CHAN="xterm"
-+CONFIG_SSL_CHAN="pty"
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_UNIX98_PTY_COUNT=256
-+# CONFIG_WATCHDOG is not set
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+# CONFIG_SOFT_WATCHDOG is not set
-+# CONFIG_UML_WATCHDOG is not set
-+CONFIG_UML_SOUND=y
-+CONFIG_SOUND=y
-+CONFIG_HOSTAUDIO=y
-+# CONFIG_TTY_LOG is not set
-+
-+#
-+# Block Devices
-+#
-+CONFIG_BLK_DEV_UBD=y
-+# CONFIG_BLK_DEV_UBD_SYNC is not set
-+CONFIG_BLK_DEV_LOOP=y
-+CONFIG_BLK_DEV_NBD=y
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_SIZE=4096
-+CONFIG_BLK_DEV_INITRD=y
-+# CONFIG_MMAPPER is not set
-+CONFIG_NETDEVICES=y
-+
-+#
-+# Network Devices
-+#
-+CONFIG_UML_NET=y
-+CONFIG_UML_NET_ETHERTAP=y
-+CONFIG_UML_NET_TUNTAP=y
-+CONFIG_UML_NET_SLIP=y
-+CONFIG_UML_NET_SLIRP=y
-+CONFIG_UML_NET_DAEMON=y
-+CONFIG_UML_NET_MCAST=y
-+# CONFIG_UML_NET_PCAP is not set
-+CONFIG_DUMMY=y
-+# CONFIG_BONDING is not set
-+# CONFIG_EQUALIZER is not set
-+CONFIG_TUN=y
-+CONFIG_PPP=y
-+# CONFIG_PPP_MULTILINK is not set
-+# CONFIG_PPP_FILTER is not set
-+# CONFIG_PPP_ASYNC is not set
-+# CONFIG_PPP_SYNC_TTY is not set
-+# CONFIG_PPP_DEFLATE is not set
-+# CONFIG_PPP_BSDCOMP is not set
-+# CONFIG_PPPOE is not set
-+CONFIG_SLIP=y
-+# CONFIG_SLIP_COMPRESSED is not set
-+# CONFIG_SLIP_SMART is not set
-+# CONFIG_SLIP_MODE_SLIP6 is not set
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+CONFIG_PACKET_MMAP=y
-+# CONFIG_NETLINK_DEV is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_FILTER is not set
-+CONFIG_UNIX=y
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+# CONFIG_IP_PNP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_INET_ECN is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_KHTTPD is not set
-+# CONFIG_ATM is not set
-+# CONFIG_VLAN_8021Q is not set
-+
-+#
-+#  
-+#
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+
-+#
-+# Appletalk devices
-+#
-+# CONFIG_DEV_APPLETALK is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_LLC is not set
-+# CONFIG_NET_DIVERT is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_FASTROUTE is not set
-+# CONFIG_NET_HW_FLOWCONTROL is not set
-+
-+#
-+# QoS and/or fair queueing
-+#
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_QUOTA=y
-+CONFIG_AUTOFS_FS=y
-+CONFIG_AUTOFS4_FS=y
-+CONFIG_REISERFS_FS=y
-+# CONFIG_REISERFS_CHECK is not set
-+# CONFIG_REISERFS_PROC_INFO is not set
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_ADFS_FS_RW is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_JBD is not set
-+# CONFIG_JBD_DEBUG is not set
-+CONFIG_FAT_FS=y
-+CONFIG_MSDOS_FS=y
-+CONFIG_UMSDOS_FS=y
-+CONFIG_VFAT_FS=y
-+# CONFIG_EFS_FS is not set
-+CONFIG_JFFS_FS=y
-+CONFIG_JFFS_FS_VERBOSE=0
-+CONFIG_JFFS_PROC_FS=y
-+CONFIG_JFFS2_FS=y
-+CONFIG_JFFS2_FS_DEBUG=0
-+# CONFIG_CRAMFS is not set
-+# CONFIG_TMPFS is not set
-+CONFIG_RAMFS=y
-+CONFIG_ISO9660_FS=y
-+# CONFIG_JOLIET is not set
-+# CONFIG_ZISOFS is not set
-+CONFIG_MINIX_FS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_NTFS_FS is not set
-+# CONFIG_NTFS_RW is not set
-+# CONFIG_HPFS_FS is not set
-+CONFIG_PROC_FS=y
-+CONFIG_DEVFS_FS=y
-+CONFIG_DEVFS_MOUNT=y
-+# CONFIG_DEVFS_DEBUG is not set
-+CONFIG_DEVPTS_FS=y
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_QNX4FS_RW is not set
-+# CONFIG_ROMFS_FS is not set
-+CONFIG_EXT2_FS=y
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UDF_FS is not set
-+# CONFIG_UDF_RW is not set
-+# CONFIG_UFS_FS is not set
-+# CONFIG_UFS_FS_WRITE is not set
-+
-+#
-+# Network File Systems
-+#
-+# CONFIG_CODA_FS is not set
-+# CONFIG_INTERMEZZO_FS is not set
-+# CONFIG_NFS_FS is not set
-+# CONFIG_NFS_V3 is not set
-+# CONFIG_ROOT_NFS is not set
-+# CONFIG_NFSD is not set
-+# CONFIG_NFSD_V3 is not set
-+# CONFIG_SUNRPC is not set
-+# CONFIG_LOCKD is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_NCPFS_PACKET_SIGNING is not set
-+# CONFIG_NCPFS_IOCTL_LOCKING is not set
-+# CONFIG_NCPFS_STRONG is not set
-+# CONFIG_NCPFS_NFS_NS is not set
-+# CONFIG_NCPFS_OS2_NS is not set
-+# CONFIG_NCPFS_SMALLDOS is not set
-+# CONFIG_NCPFS_NLS is not set
-+# CONFIG_NCPFS_EXTRAS is not set
-+# CONFIG_ZISOFS_FS is not set
-+# CONFIG_ZLIB_FS_INFLATE is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_SMB_NLS is not set
-+CONFIG_NLS=y
-+
-+#
-+# Native Language Support
-+#
-+CONFIG_NLS_DEFAULT="iso8859-1"
-+# CONFIG_NLS_CODEPAGE_437 is not set
-+# CONFIG_NLS_CODEPAGE_737 is not set
-+# CONFIG_NLS_CODEPAGE_775 is not set
-+# CONFIG_NLS_CODEPAGE_850 is not set
-+# CONFIG_NLS_CODEPAGE_852 is not set
-+# CONFIG_NLS_CODEPAGE_855 is not set
-+# CONFIG_NLS_CODEPAGE_857 is not set
-+# CONFIG_NLS_CODEPAGE_860 is not set
-+# CONFIG_NLS_CODEPAGE_861 is not set
-+# CONFIG_NLS_CODEPAGE_862 is not set
-+# CONFIG_NLS_CODEPAGE_863 is not set
-+# CONFIG_NLS_CODEPAGE_864 is not set
-+# CONFIG_NLS_CODEPAGE_865 is not set
-+# CONFIG_NLS_CODEPAGE_866 is not set
-+# CONFIG_NLS_CODEPAGE_869 is not set
-+# CONFIG_NLS_CODEPAGE_936 is not set
-+# CONFIG_NLS_CODEPAGE_950 is not set
-+# CONFIG_NLS_CODEPAGE_932 is not set
-+# CONFIG_NLS_CODEPAGE_949 is not set
-+# CONFIG_NLS_CODEPAGE_874 is not set
-+# CONFIG_NLS_ISO8859_8 is not set
-+# CONFIG_NLS_CODEPAGE_1250 is not set
-+# CONFIG_NLS_CODEPAGE_1251 is not set
-+# CONFIG_NLS_ISO8859_1 is not set
-+# CONFIG_NLS_ISO8859_2 is not set
-+# CONFIG_NLS_ISO8859_3 is not set
-+# CONFIG_NLS_ISO8859_4 is not set
-+# CONFIG_NLS_ISO8859_5 is not set
-+# CONFIG_NLS_ISO8859_6 is not set
-+# CONFIG_NLS_ISO8859_7 is not set
-+# CONFIG_NLS_ISO8859_9 is not set
-+# CONFIG_NLS_ISO8859_13 is not set
-+# CONFIG_NLS_ISO8859_14 is not set
-+# CONFIG_NLS_ISO8859_15 is not set
-+# CONFIG_NLS_KOI8_R is not set
-+# CONFIG_NLS_KOI8_U is not set
-+# CONFIG_NLS_UTF8 is not set
-+
-+#
-+# SCSI support
-+#
-+CONFIG_SCSI=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+# CONFIG_BLK_DEV_SD is not set
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+# CONFIG_CHR_DEV_SG is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_DEBUG_QUEUES is not set
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+CONFIG_SCSI_DEBUG=y
-+
-+#
-+# Multi-device support (RAID and LVM)
-+#
-+# CONFIG_MD is not set
-+# CONFIG_BLK_DEV_MD is not set
-+# CONFIG_MD_LINEAR is not set
-+# CONFIG_MD_RAID0 is not set
-+# CONFIG_MD_RAID1 is not set
-+# CONFIG_MD_RAID5 is not set
-+# CONFIG_MD_MULTIPATH is not set
-+# CONFIG_BLK_DEV_LVM is not set
-+
-+#
-+# 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
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+CONFIG_MTD_BLOCK=y
-+# CONFIG_FTL is not set
-+# CONFIG_NFTL is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+# CONFIG_MTD_CFI is not set
-+# CONFIG_MTD_JEDECPROBE is not set
-+# CONFIG_MTD_GEN_PROBE is not set
-+# CONFIG_MTD_CFI_INTELEXT is not set
-+# CONFIG_MTD_CFI_AMDSTD is not set
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+# CONFIG_MTD_OBSOLETE_CHIPS is not set
-+# CONFIG_MTD_AMDSTD is not set
-+# CONFIG_MTD_SHARP is not set
-+# CONFIG_MTD_JEDEC is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_PHYSMAP is not set
-+# CONFIG_MTD_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=y
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC1000 is not set
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOCPROBE is not set
-+
-+#
-+# NAND Flash Device Drivers
-+#
-+# CONFIG_MTD_NAND is not set
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_DEBUG_SLAB is not set
-+CONFIG_DEBUGSYM=y
-+CONFIG_PT_PROXY=y
-+# CONFIG_GPROF is not set
-+# CONFIG_GCOV is not set
-diff -Naur -X ../exclude-files orig/arch/um/drivers/chan_kern.c um/arch/um/drivers/chan_kern.c
---- orig/arch/um/drivers/chan_kern.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/chan_kern.c     2003-03-06 19:25:16.000000000 -0500
-@@ -0,0 +1,510 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <linux/stddef.h>
-+#include <linux/kernel.h>
-+#include <linux/list.h>
-+#include <linux/slab.h>
-+#include <linux/tty.h>
-+#include <linux/string.h>
-+#include <linux/tty_flip.h>
-+#include <asm/irq.h>
-+#include "chan_kern.h"
-+#include "user_util.h"
-+#include "kern.h"
-+#include "irq_user.h"
-+#include "sigio.h"
-+#include "line.h"
-+
-+static void *not_configged_init(char *str, int device, struct chan_opts *opts)
-+{
-+      printk(KERN_ERR "Using a channel type which is configured out of "
-+             "UML\n");
-+      return(NULL);
-+}
-+
-+static int not_configged_open(int input, int output, int primary, void *data,
-+                            char **dev_out)
-+{
-+      printk(KERN_ERR "Using a channel type which is configured out of "
-+             "UML\n");
-+      return(-ENODEV);
-+}
-+
-+static void not_configged_close(int fd, void *data)
-+{
-+      printk(KERN_ERR "Using a channel type which is configured out of "
-+             "UML\n");
-+}
-+
-+static int not_configged_read(int fd, char *c_out, void *data)
-+{
-+      printk(KERN_ERR "Using a channel type which is configured out of "
-+             "UML\n");
-+      return(-EIO);
-+}
-+
-+static int not_configged_write(int fd, const char *buf, int len, void *data)
-+{
-+      printk(KERN_ERR "Using a channel type which is configured out of "
-+             "UML\n");
-+      return(-EIO);
-+}
-+
-+static int not_configged_console_write(int fd, const char *buf, int len,
-+                                     void *data)
-+{
-+      printk(KERN_ERR "Using a channel type which is configured out of "
-+             "UML\n");
-+      return(-EIO);
-+}
-+
-+static int not_configged_window_size(int fd, void *data, unsigned short *rows,
-+                                   unsigned short *cols)
-+{
-+      printk(KERN_ERR "Using a channel type which is configured out of "
-+             "UML\n");
-+      return(-ENODEV);
-+}
-+
-+static void not_configged_free(void *data)
-+{
-+      printk(KERN_ERR "Using a channel type which is configured out of "
-+             "UML\n");
-+}
-+
-+static struct chan_ops not_configged_ops = {
-+      .init           = not_configged_init,
-+      .open           = not_configged_open,
-+      .close          = not_configged_close,
-+      .read           = not_configged_read,
-+      .write          = not_configged_write,
-+      .console_write  = not_configged_console_write,
-+      .window_size    = not_configged_window_size,
-+      .free           = not_configged_free,
-+      .winch          = 0,
-+};
-+
-+static void tty_receive_char(struct tty_struct *tty, char ch)
-+{
-+      if(tty == NULL) return;
-+
-+      if(I_IXON(tty) && !I_IXOFF(tty) && !tty->raw) {
-+              if(ch == STOP_CHAR(tty)){
-+                      stop_tty(tty);
-+                      return;
-+              }
-+              else if(ch == START_CHAR(tty)){
-+                      start_tty(tty);
-+                      return;
-+              }
-+      }
-+
-+      if((tty->flip.flag_buf_ptr == NULL) || 
-+         (tty->flip.char_buf_ptr == NULL))
-+              return;
-+      tty_insert_flip_char(tty, ch, TTY_NORMAL);
-+}
-+
-+static int open_one_chan(struct chan *chan, int input, int output, int primary)
-+{
-+      int fd;
-+
-+      if(chan->opened) return(0);
-+      if(chan->ops->open == NULL) fd = 0;
-+      else fd = (*chan->ops->open)(input, output, primary, chan->data,
-+                                   &chan->dev);
-+      if(fd < 0) return(fd);
-+      chan->fd = fd;
-+
-+      chan->opened = 1;
-+      return(0);
-+}
-+
-+int open_chan(struct list_head *chans)
-+{
-+      struct list_head *ele;
-+      struct chan *chan;
-+      int ret, err = 0;
-+
-+      list_for_each(ele, chans){
-+              chan = list_entry(ele, struct chan, list);
-+              ret = open_one_chan(chan, chan->input, chan->output,
-+                                  chan->primary);
-+              if(chan->primary) err = ret;
-+      }
-+      return(err);
-+}
-+
-+void chan_enable_winch(struct list_head *chans, void *line)
-+{
-+      struct list_head *ele;
-+      struct chan *chan;
-+
-+      list_for_each(ele, chans){
-+              chan = list_entry(ele, struct chan, list);
-+              if(chan->primary && chan->output && chan->ops->winch){
-+                      register_winch(chan->fd, line);
-+                      return;
-+              }
-+      }
-+}
-+
-+void enable_chan(struct list_head *chans, void *data)
-+{
-+      struct list_head *ele;
-+      struct chan *chan;
-+
-+      list_for_each(ele, chans){
-+              chan = list_entry(ele, struct chan, list);
-+              if(!chan->opened) continue;
-+
-+              line_setup_irq(chan->fd, chan->input, chan->output, data);
-+      }
-+}
-+
-+void close_chan(struct list_head *chans)
-+{
-+      struct list_head *ele;
-+      struct chan *chan;
-+
-+      /* Close in reverse order as open in case more than one of them
-+       * refers to the same device and they save and restore that device's
-+       * state.  Then, the first one opened will have the original state,
-+       * so it must be the last closed.
-+       */
-+        for(ele = chans->prev; ele != chans; ele = ele->prev){
-+                chan = list_entry(ele, struct chan, list);
-+              if(!chan->opened) continue;
-+              if(chan->ops->close != NULL)
-+                      (*chan->ops->close)(chan->fd, chan->data);
-+              chan->opened = 0;
-+              chan->fd = -1;
-+      }
-+}
-+
-+int write_chan(struct list_head *chans, const char *buf, int len, 
-+             int write_irq)
-+{
-+      struct list_head *ele;
-+      struct chan *chan;
-+      int n, ret = 0;
-+
-+      list_for_each(ele, chans){
-+              chan = list_entry(ele, struct chan, list);
-+              if(!chan->output || (chan->ops->write == NULL)) continue;
-+              n = chan->ops->write(chan->fd, buf, len, chan->data);
-+              if(chan->primary){
-+                      ret = n;
-+                      if((ret == -EAGAIN) || ((ret >= 0) && (ret < len))){
-+                              reactivate_fd(chan->fd, write_irq);
-+                              if(ret == -EAGAIN) ret = 0;
-+                      }
-+              }
-+      }
-+      return(ret);
-+}
-+
-+int console_write_chan(struct list_head *chans, const char *buf, int len)
-+{
-+      struct list_head *ele;
-+      struct chan *chan;
-+      int n, ret = 0;
-+
-+      list_for_each(ele, chans){
-+              chan = list_entry(ele, struct chan, list);
-+              if(!chan->output || (chan->ops->console_write == NULL))
-+                      continue;
-+              n = chan->ops->console_write(chan->fd, buf, len, chan->data);
-+              if(chan->primary) ret = n;
-+      }
-+      return(ret);
-+}
-+
-+int chan_window_size(struct list_head *chans, unsigned short *rows_out,
-+                    unsigned short *cols_out)
-+{
-+      struct list_head *ele;
-+      struct chan *chan;
-+
-+      list_for_each(ele, chans){
-+              chan = list_entry(ele, struct chan, list);
-+              if(chan->primary){
-+                      if(chan->ops->window_size == NULL) return(0);
-+                      return(chan->ops->window_size(chan->fd, chan->data,
-+                                                    rows_out, cols_out));
-+              }
-+      }
-+      return(0);
-+}
-+
-+void free_one_chan(struct chan *chan)
-+{
-+      list_del(&chan->list);
-+      if(chan->ops->free != NULL)
-+              (*chan->ops->free)(chan->data);
-+      free_irq_by_fd(chan->fd);
-+      if(chan->primary && chan->output) ignore_sigio_fd(chan->fd);
-+      kfree(chan);
-+}
-+
-+void free_chan(struct list_head *chans)
-+{
-+      struct list_head *ele, *next;
-+      struct chan *chan;
-+
-+      list_for_each_safe(ele, next, chans){
-+              chan = list_entry(ele, struct chan, list);
-+              free_one_chan(chan);
-+      }
-+}
-+
-+static int one_chan_config_string(struct chan *chan, char *str, int size,
-+                                char **error_out)
-+{
-+      int n = 0;
-+
-+      CONFIG_CHUNK(str, size, n, chan->ops->type, 0);
-+
-+      if(chan->dev == NULL){
-+              CONFIG_CHUNK(str, size, n, "", 1);
-+              return(n);
-+      }
-+
-+      CONFIG_CHUNK(str, size, n, ":", 0);
-+      CONFIG_CHUNK(str, size, n, chan->dev, 0);
-+
-+      return(n);
-+}
-+
-+static int chan_pair_config_string(struct chan *in, struct chan *out, 
-+                                 char *str, int size, char **error_out)
-+{
-+      int n;
-+
-+      n = one_chan_config_string(in, str, size, error_out);
-+      str += n;
-+      size -= n;
-+
-+      if(in == out){
-+              CONFIG_CHUNK(str, size, n, "", 1);
-+              return(n);
-+      }
-+
-+      CONFIG_CHUNK(str, size, n, ",", 1);
-+      n = one_chan_config_string(out, str, size, error_out);
-+      str += n;
-+      size -= n;
-+      CONFIG_CHUNK(str, size, n, "", 1);
-+
-+      return(n);
-+}
-+
-+int chan_config_string(struct list_head *chans, char *str, int size, 
-+                     char **error_out)
-+{
-+      struct list_head *ele;
-+      struct chan *chan, *in = NULL, *out = NULL;
-+
-+      list_for_each(ele, chans){
-+              chan = list_entry(ele, struct chan, list);
-+              if(!chan->primary)
-+                      continue;
-+              if(chan->input)
-+                      in = chan;
-+              if(chan->output)
-+                      out = chan;
-+      }
-+
-+      return(chan_pair_config_string(in, out, str, size, error_out));
-+}
-+
-+struct chan_type {
-+      char *key;
-+      struct chan_ops *ops;
-+};
-+
-+struct chan_type chan_table[] = {
-+#ifdef CONFIG_FD_CHAN
-+      { "fd", &fd_ops },
-+#else
-+      { "fd", &not_configged_ops },
-+#endif
-+
-+#ifdef CONFIG_NULL_CHAN
-+      { "null", &null_ops },
-+#else
-+      { "null", &not_configged_ops },
-+#endif
-+
-+#ifdef CONFIG_PORT_CHAN
-+      { "port", &port_ops },
-+#else
-+      { "port", &not_configged_ops },
-+#endif
-+
-+#ifdef CONFIG_PTY_CHAN
-+      { "pty", &pty_ops },
-+      { "pts", &pts_ops },
-+#else
-+      { "pty", &not_configged_ops },
-+      { "pts", &not_configged_ops },
-+#endif
-+
-+#ifdef CONFIG_TTY_CHAN
-+      { "tty", &tty_ops },
-+#else
-+      { "tty", &not_configged_ops },
-+#endif
-+
-+#ifdef CONFIG_XTERM_CHAN
-+      { "xterm", &xterm_ops },
-+#else
-+      { "xterm", &not_configged_ops },
-+#endif
-+};
-+
-+static struct chan *parse_chan(char *str, int pri, int device, 
-+                             struct chan_opts *opts)
-+{
-+      struct chan_type *entry;
-+      struct chan_ops *ops;
-+      struct chan *chan;
-+      void *data;
-+      int i;
-+
-+      ops = NULL;
-+      data = NULL;
-+      for(i = 0; i < sizeof(chan_table)/sizeof(chan_table[0]); i++){
-+              entry = &chan_table[i];
-+              if(!strncmp(str, entry->key, strlen(entry->key))){
-+                      ops = entry->ops;
-+                      str += strlen(entry->key);
-+                      break;
-+              }
-+      }
-+      if(ops == NULL){
-+              printk(KERN_ERR "parse_chan couldn't parse \"%s\"\n", 
-+                     str);
-+              return(NULL);
-+      }
-+      if(ops->init == NULL) return(NULL); 
-+      data = (*ops->init)(str, device, opts);
-+      if(data == NULL) return(NULL);
-+
-+      chan = kmalloc(sizeof(*chan), GFP_KERNEL);
-+      if(chan == NULL) return(NULL);
-+      *chan = ((struct chan) { .list          = LIST_HEAD_INIT(chan->list),
-+                               .primary       = 1,
-+                               .input         = 0,
-+                               .output        = 0,
-+                               .opened        = 0,
-+                               .fd            = -1,
-+                               .pri           = pri,
-+                               .ops           = ops,
-+                               .data          = data });
-+      return(chan);
-+}
-+
-+int parse_chan_pair(char *str, struct list_head *chans, int pri, int device,
-+                  struct chan_opts *opts)
-+{
-+      struct chan *new, *chan;
-+      char *in, *out;
-+
-+      if(!list_empty(chans)){
-+              chan = list_entry(chans->next, struct chan, list);
-+              if(chan->pri >= pri) return(0);
-+              free_chan(chans);
-+              INIT_LIST_HEAD(chans);
-+      }
-+
-+      if((out = strchr(str, ',')) != NULL){
-+              in = str;
-+              *out = '\0';
-+              out++;
-+              new = parse_chan(in, pri, device, opts);
-+              if(new == NULL) return(-1);
-+              new->input = 1;
-+              list_add(&new->list, chans);
-+
-+              new = parse_chan(out, pri, device, opts);
-+              if(new == NULL) return(-1);
-+              list_add(&new->list, chans);
-+              new->output = 1;
-+      }
-+      else {
-+              new = parse_chan(str, pri, device, opts);
-+              if(new == NULL) return(-1);
-+              list_add(&new->list, chans);
-+              new->input = 1;
-+              new->output = 1;
-+      }
-+      return(0);
-+}
-+
-+int chan_out_fd(struct list_head *chans)
-+{
-+      struct list_head *ele;
-+      struct chan *chan;
-+
-+      list_for_each(ele, chans){
-+              chan = list_entry(ele, struct chan, list);
-+              if(chan->primary && chan->output)
-+                      return(chan->fd);
-+      }
-+      return(-1);
-+}
-+
-+void chan_interrupt(struct list_head *chans, struct tq_struct *task,
-+                  struct tty_struct *tty, int irq, void *dev)
-+{
-+      struct list_head *ele, *next;
-+      struct chan *chan;
-+      int err;
-+      char c;
-+
-+      list_for_each_safe(ele, next, chans){
-+              chan = list_entry(ele, struct chan, list);
-+              if(!chan->input || (chan->ops->read == NULL)) continue;
-+              do {
-+                      if((tty != NULL) && 
-+                         (tty->flip.count >= TTY_FLIPBUF_SIZE)){
-+                              queue_task(task, &tq_timer);
-+                              goto out;
-+                      }
-+                      err = chan->ops->read(chan->fd, &c, chan->data);
-+                      if(err > 0) tty_receive_char(tty, c);
-+              } while(err > 0);
-+              if(err == 0) reactivate_fd(chan->fd, irq);
-+              if(err == -EIO){
-+                      if(chan->primary){
-+                              if(tty != NULL) tty_hangup(tty);
-+                              line_disable(dev, irq);
-+                              close_chan(chans);
-+                              free_chan(chans);
-+                              return;
-+                      }
-+                      else {
-+                              if(chan->ops->close != NULL)
-+                                      chan->ops->close(chan->fd, chan->data);
-+                              free_one_chan(chan);
-+                      }
-+              }
-+      }
-+ out:
-+      if(tty) tty_flip_buffer_push(tty);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/chan_user.c um/arch/um/drivers/chan_user.c
---- orig/arch/um/drivers/chan_user.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/chan_user.c     2003-03-26 13:23:48.000000000 -0500
-@@ -0,0 +1,213 @@
-+/* 
-+ * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <unistd.h>
-+#include <stdlib.h>
-+#include <errno.h>
-+#include <termios.h>
-+#include <fcntl.h>
-+#include <string.h>
-+#include <signal.h>
-+#include <sys/stat.h>
-+#include <sys/ioctl.h>
-+#include <sys/socket.h>
-+#include "kern_util.h"
-+#include "user_util.h"
-+#include "chan_user.h"
-+#include "user.h"
-+#include "helper.h"
-+#include "os.h"
-+#include "choose-mode.h"
-+#include "mode.h"
-+
-+void generic_close(int fd, void *unused)
-+{
-+      close(fd);
-+}
-+
-+int generic_read(int fd, char *c_out, void *unused)
-+{
-+      int n;
-+
-+      n = read(fd, c_out, sizeof(*c_out));
-+      if(n < 0){
-+              if(errno == EAGAIN) return(0);
-+              return(-errno);
-+      }
-+      else if(n == 0) return(-EIO);
-+      return(1);
-+}
-+
-+int generic_write(int fd, const char *buf, int n, void *unused)
-+{
-+      int count;
-+
-+      count = write(fd, buf, n);
-+      if(count < 0) return(-errno);
-+      return(count);
-+}
-+
-+int generic_console_write(int fd, const char *buf, int n, void *unused)
-+{
-+      struct termios save, new;
-+      int err;
-+
-+      if(isatty(fd)){
-+              tcgetattr(fd, &save);
-+              new = save;
-+              new.c_oflag |= OPOST;
-+              tcsetattr(fd, TCSAFLUSH, &new);
-+      }
-+      err = generic_write(fd, buf, n, NULL);
-+      if(isatty(fd)) tcsetattr(fd, TCSAFLUSH, &save);
-+      return(err);
-+}
-+
-+int generic_window_size(int fd, void *unused, unsigned short *rows_out,
-+                      unsigned short *cols_out)
-+{
-+      struct winsize size;
-+      int ret = 0;
-+
-+      if(ioctl(fd, TIOCGWINSZ, &size) == 0){
-+              ret = ((*rows_out != size.ws_row) || 
-+                     (*cols_out != size.ws_col));
-+              *rows_out = size.ws_row;
-+              *cols_out = size.ws_col;
-+      }
-+      return(ret);
-+}
-+
-+void generic_free(void *data)
-+{
-+      kfree(data);
-+}
-+
-+static void winch_handler(int sig)
-+{
-+}
-+
-+struct winch_data {
-+      int pty_fd;
-+      int pipe_fd;
-+      int close_me;
-+};
-+
-+static int winch_thread(void *arg)
-+{
-+      struct winch_data *data = arg;
-+      sigset_t sigs;
-+      int pty_fd, pipe_fd;
-+      char c = 1;
-+
-+      close(data->close_me);
-+      pty_fd = data->pty_fd;
-+      pipe_fd = data->pipe_fd;
-+      if(write(pipe_fd, &c, sizeof(c)) != sizeof(c))
-+              printk("winch_thread : failed to write synchronization "
-+                     "byte, errno = %d\n", errno);
-+
-+      signal(SIGWINCH, winch_handler);
-+      sigfillset(&sigs);
-+      sigdelset(&sigs, SIGWINCH);
-+      if(sigprocmask(SIG_SETMASK, &sigs, NULL) < 0){
-+              printk("winch_thread : sigprocmask failed, errno = %d\n", 
-+                     errno);
-+              exit(1);
-+      }
-+
-+      if(setsid() < 0){
-+              printk("winch_thread : setsid failed, errno = %d\n", errno);
-+              exit(1);
-+      }
-+
-+      if(ioctl(pty_fd, TIOCSCTTY, 0) < 0){
-+              printk("winch_thread : TIOCSCTTY failed, errno = %d\n", errno);
-+              exit(1);
-+      }
-+      if(tcsetpgrp(pty_fd, os_getpid()) < 0){
-+              printk("winch_thread : tcsetpgrp failed, errno = %d\n", errno);
-+              exit(1);
-+      }
-+
-+      if(read(pipe_fd, &c, sizeof(c)) != sizeof(c))
-+              printk("winch_thread : failed to read synchronization byte, "
-+                     "errno = %d\n", errno);
-+
-+      while(1){
-+              pause();
-+
-+              if(write(pipe_fd, &c, sizeof(c)) != sizeof(c)){
-+                      printk("winch_thread : write failed, errno = %d\n",
-+                             errno);
-+              }
-+      }
-+}
-+
-+static int winch_tramp(int fd, void *device_data, int *fd_out)
-+{
-+      struct winch_data data;
-+      unsigned long stack;
-+      int fds[2], pid, n, err;
-+      char c;
-+
-+      err = os_pipe(fds, 1, 1);
-+      if(err){
-+              printk("winch_tramp : os_pipe failed, errno = %d\n", -err);
-+              return(err);
-+      }
-+
-+      data = ((struct winch_data) { .pty_fd           = fd,
-+                                    .pipe_fd          = fds[1],
-+                                    .close_me         = fds[0] } );
-+      pid = run_helper_thread(winch_thread, &data, 0, &stack, 0);
-+      if(pid < 0){
-+              printk("fork of winch_thread failed - errno = %d\n", errno);
-+              return(pid);
-+      }
-+
-+      close(fds[1]);
-+      *fd_out = fds[0];
-+      n = read(fds[0], &c, sizeof(c));
-+      if(n != sizeof(c)){
-+              printk("winch_tramp : failed to read synchronization byte\n");
-+              printk("read returned %d, errno = %d\n", n, errno);
-+              printk("fd %d will not support SIGWINCH\n", fd);
-+              *fd_out = -1;
-+      }
-+      return(pid);
-+}
-+
-+void register_winch(int fd, void *device_data)
-+{
-+      int pid, thread, thread_fd;
-+      char c = 1;
-+
-+      if(!isatty(fd)) return;
-+
-+      pid = tcgetpgrp(fd);
-+      if(!CHOOSE_MODE_PROC(is_tracer_winch, is_skas_winch, pid, fd, 
-+                           device_data) && (pid == -1)){
-+              thread = winch_tramp(fd, device_data, &thread_fd);
-+              if(fd != -1){
-+                      register_winch_irq(thread_fd, fd, thread, device_data);
-+
-+                      if(write(thread_fd, &c, sizeof(c)) != sizeof(c))
-+                              printk("register_winch : failed to write "
-+                                     "synchronization byte\n");
-+              }
-+      }
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/cow.h um/arch/um/drivers/cow.h
---- orig/arch/um/drivers/cow.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/cow.h   2003-06-05 14:28:44.000000000 -0400
-@@ -0,0 +1,34 @@
-+#ifndef __COW_H__
-+#define __COW_H__
-+
-+#include <asm/types.h>
-+
-+#if __BYTE_ORDER == __BIG_ENDIAN
-+# define ntohll(x) (x)
-+# define htonll(x) (x)
-+#elif __BYTE_ORDER == __LITTLE_ENDIAN
-+# define ntohll(x)  bswap_64(x)
-+# define htonll(x)  bswap_64(x)
-+#else
-+#error "__BYTE_ORDER not defined"
-+#endif
-+
-+extern int init_cow_file(int fd, char *cow_file, char *backing_file, 
-+                       int sectorsize, int *bitmap_offset_out, 
-+                       unsigned long *bitmap_len_out, int *data_offset_out);
-+extern int read_cow_header(int fd, __u32 *magic_out, char **backing_file_out, 
-+                         time_t *mtime_out, __u64 *size_out, 
-+                         int *sectorsize_out, int *bitmap_offset_out);
-+extern int write_cow_header(char *cow_file, int fd, char *backing_file, 
-+                          int sectorsize, long long *size);
-+extern void cow_sizes(__u64 size, int sectorsize, int bitmap_offset, 
-+                    unsigned long *bitmap_len_out, int *data_offset_out);
-+
-+#endif
-+
-+/*
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/cow_sys.h um/arch/um/drivers/cow_sys.h
---- orig/arch/um/drivers/cow_sys.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/cow_sys.h       2003-06-05 14:29:25.000000000 -0400
-@@ -0,0 +1,48 @@
-+#ifndef __COW_SYS_H__
-+#define __COW_SYS_H__
-+
-+#include "kern_util.h"
-+#include "user_util.h"
-+#include "os.h"
-+#include "user.h"
-+
-+static inline void *cow_malloc(int size)
-+{
-+      return(um_kmalloc(size));
-+}
-+
-+static inline void cow_free(void *ptr)
-+{
-+      kfree(ptr);
-+}
-+
-+#define cow_printf printk
-+
-+static inline char *cow_strdup(char *str)
-+{
-+      return(uml_strdup(str));
-+}
-+
-+static inline int cow_seek_file(int fd, __u64 offset)
-+{
-+      return(os_seek_file(fd, offset));
-+}
-+
-+static inline int cow_file_size(char *file, __u64 *size_out)
-+{
-+      return(os_file_size(file, size_out));
-+}
-+
-+static inline int cow_write_file(int fd, char *buf, int size)
-+{
-+      return(os_write_file(fd, buf, size));
-+}
-+
-+#endif
-+
-+/*
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/cow_user.c um/arch/um/drivers/cow_user.c
---- orig/arch/um/drivers/cow_user.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/cow_user.c      2003-06-05 14:39:18.000000000 -0400
-@@ -0,0 +1,287 @@
-+#include <stddef.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <byteswap.h>
-+#include <sys/stat.h>
-+#include <sys/time.h>
-+#include <sys/param.h>
-+#include <netinet/in.h>
-+
-+#include "cow.h"
-+#include "cow_sys.h"
-+
-+#define PATH_LEN_V1 256
-+
-+struct cow_header_v1 {
-+      int magic;
-+      int version;
-+      char backing_file[PATH_LEN_V1];
-+      time_t mtime;
-+      __u64 size;
-+      int sectorsize;
-+};
-+
-+#define PATH_LEN_V2 MAXPATHLEN
-+
-+struct cow_header_v2 {
-+      unsigned long magic;
-+      unsigned long version;
-+      char backing_file[PATH_LEN_V2];
-+      time_t mtime;
-+      __u64 size;
-+      int sectorsize;
-+};
-+
-+union cow_header {
-+      struct cow_header_v1 v1;
-+      struct cow_header_v2 v2;
-+};
-+
-+#define COW_MAGIC 0x4f4f4f4d  /* MOOO */
-+#define COW_VERSION 2
-+
-+void cow_sizes(__u64 size, int sectorsize, int bitmap_offset, 
-+             unsigned long *bitmap_len_out, int *data_offset_out)
-+{
-+      *bitmap_len_out = (size + sectorsize - 1) / (8 * sectorsize);
-+
-+      *data_offset_out = bitmap_offset + *bitmap_len_out;
-+      *data_offset_out = (*data_offset_out + sectorsize - 1) / sectorsize;
-+      *data_offset_out *= sectorsize;
-+}
-+
-+static int absolutize(char *to, int size, char *from)
-+{
-+      char save_cwd[256], *slash;
-+      int remaining;
-+
-+      if(getcwd(save_cwd, sizeof(save_cwd)) == NULL) {
-+              cow_printf("absolutize : unable to get cwd - errno = %d\n", 
-+                         errno);
-+              return(-1);
-+      }
-+      slash = strrchr(from, '/');
-+      if(slash != NULL){
-+              *slash = '\0';
-+              if(chdir(from)){
-+                      *slash = '/';
-+                      cow_printf("absolutize : Can't cd to '%s' - " 
-+                                 "errno = %d\n", from, errno);
-+                      return(-1);
-+              }
-+              *slash = '/';
-+              if(getcwd(to, size) == NULL){
-+                      cow_printf("absolutize : unable to get cwd of '%s' - "
-+                             "errno = %d\n", from, errno);
-+                      return(-1);
-+              }
-+              remaining = size - strlen(to);
-+              if(strlen(slash) + 1 > remaining){
-+                      cow_printf("absolutize : unable to fit '%s' into %d "
-+                             "chars\n", from, size);
-+                      return(-1);
-+              }
-+              strcat(to, slash);
-+      }
-+      else {
-+              if(strlen(save_cwd) + 1 + strlen(from) + 1 > size){
-+                      cow_printf("absolutize : unable to fit '%s' into %d "
-+                             "chars\n", from, size);
-+                      return(-1);
-+              }
-+              strcpy(to, save_cwd);
-+              strcat(to, "/");
-+              strcat(to, from);
-+      }
-+      chdir(save_cwd);
-+      return(0);
-+}
-+
-+int write_cow_header(char *cow_file, int fd, char *backing_file, 
-+                   int sectorsize, long long *size)
-+{
-+        struct cow_header_v2 *header;
-+      struct stat64 buf;
-+      int err;
-+
-+      err = cow_seek_file(fd, 0);
-+      if(err != 0){
-+              cow_printf("write_cow_header - lseek failed, errno = %d\n", 
-+                         errno);
-+              return(-errno);
-+      }
-+
-+      err = -ENOMEM;
-+      header = cow_malloc(sizeof(*header));
-+      if(header == NULL){
-+              cow_printf("Failed to allocate COW V2 header\n");
-+              goto out;
-+      }
-+      header->magic = htonl(COW_MAGIC);
-+      header->version = htonl(COW_VERSION);
-+
-+      err = -EINVAL;
-+      if(strlen(backing_file) > sizeof(header->backing_file) - 1){
-+              cow_printf("Backing file name \"%s\" is too long - names are "
-+                         "limited to %d characters\n", backing_file, 
-+                         sizeof(header->backing_file) - 1);
-+              goto out_free;
-+      }
-+
-+      if(absolutize(header->backing_file, sizeof(header->backing_file), 
-+                    backing_file))
-+              goto out_free;
-+
-+      err = stat64(header->backing_file, &buf);
-+      if(err < 0){
-+              cow_printf("Stat of backing file '%s' failed, errno = %d\n",
-+                         header->backing_file, errno);
-+              err = -errno;
-+              goto out_free;
-+      }
-+
-+      err = cow_file_size(header->backing_file, size);
-+      if(err){
-+              cow_printf("Couldn't get size of backing file '%s', "
-+                         "errno = %d\n", header->backing_file, -*size);
-+              goto out_free;
-+      }
-+
-+      header->mtime = htonl(buf.st_mtime);
-+      header->size = htonll(*size);
-+      header->sectorsize = htonl(sectorsize);
-+
-+      err = write(fd, header, sizeof(*header));
-+      if(err != sizeof(*header)){
-+              cow_printf("Write of header to new COW file '%s' failed, "
-+                         "errno = %d\n", cow_file, errno);
-+              goto out_free;
-+      }
-+      err = 0;
-+ out_free:
-+      cow_free(header);
-+ out:
-+      return(err);
-+}
-+
-+int read_cow_header(int fd, __u32 *magic_out, char **backing_file_out, 
-+                  time_t *mtime_out, __u64 *size_out, 
-+                  int *sectorsize_out, int *bitmap_offset_out)
-+{
-+      union cow_header *header;
-+      char *file;
-+      int err, n;
-+      unsigned long version, magic;
-+
-+      header = cow_malloc(sizeof(*header));
-+      if(header == NULL){
-+              cow_printf("read_cow_header - Failed to allocate header\n");
-+              return(-ENOMEM);
-+      }
-+      err = -EINVAL;
-+      n = read(fd, header, sizeof(*header));
-+      if(n < offsetof(typeof(header->v1), backing_file)){
-+              cow_printf("read_cow_header - short header\n");
-+              goto out;
-+      }
-+
-+      magic = header->v1.magic;
-+      if(magic == COW_MAGIC) {
-+              version = header->v1.version;
-+      }
-+      else if(magic == ntohl(COW_MAGIC)){
-+              version = ntohl(header->v1.version);
-+      }
-+      else goto out;
-+
-+      *magic_out = COW_MAGIC;
-+
-+      if(version == 1){
-+              if(n < sizeof(header->v1)){
-+                      cow_printf("read_cow_header - failed to read V1 "
-+                                 "header\n");
-+                      goto out;
-+              }
-+              *mtime_out = header->v1.mtime;
-+              *size_out = header->v1.size;
-+              *sectorsize_out = header->v1.sectorsize;
-+              *bitmap_offset_out = sizeof(header->v1);
-+              file = header->v1.backing_file;
-+      }
-+      else if(version == 2){
-+              if(n < sizeof(header->v2)){
-+                      cow_printf("read_cow_header - failed to read V2 "
-+                                 "header\n");
-+                      goto out;
-+              }
-+              *mtime_out = ntohl(header->v2.mtime);
-+              *size_out = ntohll(header->v2.size);
-+              *sectorsize_out = ntohl(header->v2.sectorsize);
-+              *bitmap_offset_out = sizeof(header->v2);
-+              file = header->v2.backing_file;
-+      }
-+      else {
-+              cow_printf("read_cow_header - invalid COW version\n");
-+              goto out;
-+      }
-+      err = -ENOMEM;
-+      *backing_file_out = cow_strdup(file);
-+      if(*backing_file_out == NULL){
-+              cow_printf("read_cow_header - failed to allocate backing "
-+                         "file\n");
-+              goto out;
-+      }
-+      err = 0;
-+ out:
-+      cow_free(header);
-+      return(err);
-+}
-+
-+int init_cow_file(int fd, char *cow_file, char *backing_file, int sectorsize,
-+                int *bitmap_offset_out, unsigned long *bitmap_len_out, 
-+                int *data_offset_out)
-+{
-+      __u64 size, offset;
-+      char zero = 0;
-+      int err;
-+
-+      err = write_cow_header(cow_file, fd, backing_file, sectorsize, &size);
-+      if(err) 
-+              goto out;
-+      
-+      cow_sizes(size, sectorsize, sizeof(struct cow_header_v2), 
-+                bitmap_len_out, data_offset_out);
-+      *bitmap_offset_out = sizeof(struct cow_header_v2);
-+
-+      offset = *data_offset_out + size - sizeof(zero);
-+      err = cow_seek_file(fd, offset);
-+      if(err != 0){
-+              cow_printf("cow bitmap lseek failed : errno = %d\n", errno);
-+              goto out;
-+      }
-+
-+      /* does not really matter how much we write it is just to set EOF 
-+       * this also sets the entire COW bitmap
-+       * to zero without having to allocate it 
-+       */
-+      err = cow_write_file(fd, &zero, sizeof(zero));
-+      if(err != sizeof(zero)){
-+              err = -EINVAL;
-+              cow_printf("Write of bitmap to new COW file '%s' failed, "
-+                         "errno = %d\n", cow_file, errno);
-+              goto out;
-+      }
-+
-+      return(0);
-+
-+ out:
-+      return(err);
-+}
-+
-+/*
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/daemon.h um/arch/um/drivers/daemon.h
---- orig/arch/um/drivers/daemon.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/daemon.h        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,35 @@
-+/* 
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "net_user.h"
-+
-+#define SWITCH_VERSION 3
-+
-+struct daemon_data {
-+      char *sock_type;
-+      char *ctl_sock;
-+      void *ctl_addr;
-+      void *data_addr;
-+      void *local_addr;
-+      int fd;
-+      int control;
-+      void *dev;
-+};
-+
-+extern struct net_user_info daemon_user_info;
-+
-+extern int daemon_user_write(int fd, void *buf, int len, 
-+                           struct daemon_data *pri);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/daemon_kern.c um/arch/um/drivers/daemon_kern.c
---- orig/arch/um/drivers/daemon_kern.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/daemon_kern.c   2002-12-15 21:19:17.000000000 -0500
-@@ -0,0 +1,113 @@
-+/*
-+ * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) and 
-+ * James Leu (jleu@mindspring.net).
-+ * Copyright (C) 2001 by various other people who didn't put their name here.
-+ * Licensed under the GPL.
-+ */
-+
-+#include "linux/kernel.h"
-+#include "linux/init.h"
-+#include "linux/netdevice.h"
-+#include "linux/etherdevice.h"
-+#include "net_kern.h"
-+#include "net_user.h"
-+#include "daemon.h"
-+
-+struct daemon_init {
-+      char *sock_type;
-+      char *ctl_sock;
-+};
-+
-+void daemon_init(struct net_device *dev, void *data)
-+{
-+      struct uml_net_private *pri;
-+      struct daemon_data *dpri;
-+      struct daemon_init *init = data;
-+
-+      init_etherdev(dev, 0);
-+      pri = dev->priv;
-+      dpri = (struct daemon_data *) pri->user;
-+      *dpri = ((struct daemon_data)
-+              { .sock_type            = init->sock_type,
-+                .ctl_sock             = init->ctl_sock,
-+                .ctl_addr             = NULL,
-+                .data_addr            = NULL,
-+                .local_addr           = NULL,
-+                .fd                   = -1,
-+                .control              = -1,
-+                .dev                  = dev });
-+
-+      printk("daemon backend (uml_switch version %d) - %s:%s", 
-+             SWITCH_VERSION, dpri->sock_type, dpri->ctl_sock);
-+      printk("\n");
-+}
-+
-+static int daemon_read(int fd, struct sk_buff **skb, 
-+                     struct uml_net_private *lp)
-+{
-+      *skb = ether_adjust_skb(*skb, ETH_HEADER_OTHER);
-+      if(*skb == NULL) return(-ENOMEM);
-+      return(net_recvfrom(fd, (*skb)->mac.raw, 
-+                          (*skb)->dev->mtu + ETH_HEADER_OTHER));
-+}
-+
-+static int daemon_write(int fd, struct sk_buff **skb,
-+                      struct uml_net_private *lp)
-+{
-+      return(daemon_user_write(fd, (*skb)->data, (*skb)->len, 
-+                               (struct daemon_data *) &lp->user));
-+}
-+
-+static struct net_kern_info daemon_kern_info = {
-+      .init                   = daemon_init,
-+      .protocol               = eth_protocol,
-+      .read                   = daemon_read,
-+      .write                  = daemon_write,
-+};
-+
-+int daemon_setup(char *str, char **mac_out, void *data)
-+{
-+      struct daemon_init *init = data;
-+      char *remain;
-+
-+      *init = ((struct daemon_init)
-+              { .sock_type            = "unix",
-+                .ctl_sock             = "/tmp/uml.ctl" });
-+      
-+      remain = split_if_spec(str, mac_out, &init->sock_type, &init->ctl_sock,
-+                             NULL);
-+      if(remain != NULL)
-+              printk(KERN_WARNING "daemon_setup : Ignoring data socket "
-+                     "specification\n");
-+      
-+      return(1);
-+}
-+
-+static struct transport daemon_transport = {
-+      .list           = LIST_HEAD_INIT(daemon_transport.list),
-+      .name           = "daemon",
-+      .setup          = daemon_setup,
-+      .user           = &daemon_user_info,
-+      .kern           = &daemon_kern_info,
-+      .private_size   = sizeof(struct daemon_data),
-+      .setup_size     = sizeof(struct daemon_init),
-+};
-+
-+static int register_daemon(void)
-+{
-+      register_transport(&daemon_transport);
-+      return(1);
-+}
-+
-+__initcall(register_daemon);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/daemon_user.c um/arch/um/drivers/daemon_user.c
---- orig/arch/um/drivers/daemon_user.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/daemon_user.c   2003-01-17 13:48:59.000000000 -0500
-@@ -0,0 +1,195 @@
-+/*
-+ * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) and 
-+ * James Leu (jleu@mindspring.net).
-+ * Copyright (C) 2001 by various other people who didn't put their name here.
-+ * Licensed under the GPL.
-+ */
-+
-+#include <errno.h>
-+#include <unistd.h>
-+#include <stdint.h>
-+#include <sys/socket.h>
-+#include <sys/un.h>
-+#include <sys/time.h>
-+#include "net_user.h"
-+#include "daemon.h"
-+#include "kern_util.h"
-+#include "user_util.h"
-+#include "user.h"
-+#include "os.h"
-+
-+#define MAX_PACKET (ETH_MAX_PACKET + ETH_HEADER_OTHER)
-+
-+enum request_type { REQ_NEW_CONTROL };
-+
-+#define SWITCH_MAGIC 0xfeedface
-+
-+struct request_v3 {
-+      uint32_t magic;
-+      uint32_t version;
-+      enum request_type type;
-+      struct sockaddr_un sock;
-+};
-+
-+static struct sockaddr_un *new_addr(void *name, int len)
-+{
-+      struct sockaddr_un *sun;
-+
-+      sun = um_kmalloc(sizeof(struct sockaddr_un));
-+      if(sun == NULL){
-+              printk("new_addr: allocation of sockaddr_un failed\n");
-+              return(NULL);
-+      }
-+      sun->sun_family = AF_UNIX;
-+      memcpy(sun->sun_path, name, len);
-+      return(sun);
-+}
-+
-+static int connect_to_switch(struct daemon_data *pri)
-+{
-+      struct sockaddr_un *ctl_addr = pri->ctl_addr;
-+      struct sockaddr_un *local_addr = pri->local_addr;
-+      struct sockaddr_un *sun;
-+      struct request_v3 req;
-+      int fd, n, err;
-+
-+      if((pri->control = socket(AF_UNIX, SOCK_STREAM, 0)) < 0){
-+              printk("daemon_open : control socket failed, errno = %d\n", 
-+                     errno);          
-+              return(-errno);
-+      }
-+
-+      if(connect(pri->control, (struct sockaddr *) ctl_addr, 
-+                 sizeof(*ctl_addr)) < 0){
-+              printk("daemon_open : control connect failed, errno = %d\n",
-+                     errno);
-+              err = -errno;
-+              goto out;
-+      }
-+
-+      if((fd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0){
-+              printk("daemon_open : data socket failed, errno = %d\n", 
-+                     errno);
-+              err = -errno;
-+              goto out;
-+      }
-+      if(bind(fd, (struct sockaddr *) local_addr, sizeof(*local_addr)) < 0){
-+              printk("daemon_open : data bind failed, errno = %d\n", 
-+                     errno);
-+              err = -errno;
-+              goto out_close;
-+      }
-+
-+      sun = um_kmalloc(sizeof(struct sockaddr_un));
-+      if(sun == NULL){
-+              printk("new_addr: allocation of sockaddr_un failed\n");
-+              err = -ENOMEM;
-+              goto out_close;
-+      }
-+
-+      req.magic = SWITCH_MAGIC;
-+      req.version = SWITCH_VERSION;
-+      req.type = REQ_NEW_CONTROL;
-+      req.sock = *local_addr;
-+      n = write(pri->control, &req, sizeof(req));
-+      if(n != sizeof(req)){
-+              printk("daemon_open : control setup request returned %d, "
-+                     "errno = %d\n", n, errno);
-+              err = -ENOTCONN;
-+              goto out;               
-+      }
-+
-+      n = read(pri->control, sun, sizeof(*sun));
-+      if(n != sizeof(*sun)){
-+              printk("daemon_open : read of data socket returned %d, "
-+                     "errno = %d\n", n, errno);
-+              err = -ENOTCONN;
-+              goto out_close;         
-+      }
-+
-+      pri->data_addr = sun;
-+      return(fd);
-+
-+ out_close:
-+      close(fd);
-+ out:
-+      close(pri->control);
-+      return(err);
-+}
-+
-+static void daemon_user_init(void *data, void *dev)
-+{
-+      struct daemon_data *pri = data;
-+      struct timeval tv;
-+      struct {
-+              char zero;
-+              int pid;
-+              int usecs;
-+      } name;
-+
-+      if(!strcmp(pri->sock_type, "unix"))
-+              pri->ctl_addr = new_addr(pri->ctl_sock, 
-+                                       strlen(pri->ctl_sock) + 1);
-+      name.zero = 0;
-+      name.pid = os_getpid();
-+      gettimeofday(&tv, NULL);
-+      name.usecs = tv.tv_usec;
-+      pri->local_addr = new_addr(&name, sizeof(name));
-+      pri->dev = dev;
-+      pri->fd = connect_to_switch(pri);
-+      if(pri->fd < 0){
-+              kfree(pri->local_addr);
-+              pri->local_addr = NULL;
-+      }
-+}
-+
-+static int daemon_open(void *data)
-+{
-+      struct daemon_data *pri = data;
-+      return(pri->fd);
-+}
-+
-+static void daemon_remove(void *data)
-+{
-+      struct daemon_data *pri = data;
-+
-+      close(pri->fd);
-+      close(pri->control);
-+      if(pri->data_addr != NULL) kfree(pri->data_addr);
-+      if(pri->ctl_addr != NULL) kfree(pri->ctl_addr);
-+      if(pri->local_addr != NULL) kfree(pri->local_addr);
-+}
-+
-+int daemon_user_write(int fd, void *buf, int len, struct daemon_data *pri)
-+{
-+      struct sockaddr_un *data_addr = pri->data_addr;
-+
-+      return(net_sendto(fd, buf, len, data_addr, sizeof(*data_addr)));
-+}
-+
-+static int daemon_set_mtu(int mtu, void *data)
-+{
-+      return(mtu);
-+}
-+
-+struct net_user_info daemon_user_info = {
-+      .init           = daemon_user_init,
-+      .open           = daemon_open,
-+      .close          = NULL,
-+      .remove         = daemon_remove,
-+      .set_mtu        = daemon_set_mtu,
-+      .add_address    = NULL,
-+      .delete_address = NULL,
-+      .max_packet     = MAX_PACKET - ETH_HEADER_OTHER
-+};
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/fd.c um/arch/um/drivers/fd.c
---- orig/arch/um/drivers/fd.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/fd.c    2002-12-15 20:57:25.000000000 -0500
-@@ -0,0 +1,96 @@
-+/* 
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <termios.h>
-+#include "user.h"
-+#include "user_util.h"
-+#include "chan_user.h"
-+
-+struct fd_chan {
-+      int fd;
-+      int raw;
-+      struct termios tt;
-+      char str[sizeof("1234567890\0")];
-+};
-+
-+void *fd_init(char *str, int device, struct chan_opts *opts)
-+{
-+      struct fd_chan *data;
-+      char *end;
-+      int n;
-+
-+      if(*str != ':'){
-+              printk("fd_init : channel type 'fd' must specify a file "
-+                     "descriptor\n");
-+              return(NULL);
-+      }
-+      str++;
-+      n = strtoul(str, &end, 0);
-+      if((*end != '\0') || (end == str)){
-+              printk("fd_init : couldn't parse file descriptor '%s'\n", str);
-+              return(NULL);
-+      }
-+      if((data = um_kmalloc(sizeof(*data))) == NULL) return(NULL);
-+      *data = ((struct fd_chan) { .fd         = n,
-+                                  .raw        = opts->raw });
-+      return(data);
-+}
-+
-+int fd_open(int input, int output, int primary, void *d, char **dev_out)
-+{
-+      struct fd_chan *data = d;
-+
-+      if(data->raw && isatty(data->fd)){
-+              tcgetattr(data->fd, &data->tt);
-+              raw(data->fd, 0);
-+      }
-+      sprintf(data->str, "%d", data->fd);
-+      *dev_out = data->str;
-+      return(data->fd);
-+}
-+
-+void fd_close(int fd, void *d)
-+{
-+      struct fd_chan *data = d;
-+
-+      if(data->raw && isatty(fd)){
-+              tcsetattr(fd, TCSAFLUSH, &data->tt);
-+              data->raw = 0;
-+      }
-+}
-+
-+int fd_console_write(int fd, const char *buf, int n, void *d)
-+{
-+      struct fd_chan *data = d;
-+
-+      return(generic_console_write(fd, buf, n, &data->tt));
-+}
-+
-+struct chan_ops fd_ops = {
-+      .type           = "fd",
-+      .init           = fd_init,
-+      .open           = fd_open,
-+      .close          = fd_close,
-+      .read           = generic_read,
-+      .write          = generic_write,
-+      .console_write  = fd_console_write,
-+      .window_size    = generic_window_size,
-+      .free           = generic_free,
-+      .winch          = 1,
-+};
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/harddog_kern.c um/arch/um/drivers/harddog_kern.c
---- orig/arch/um/drivers/harddog_kern.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/harddog_kern.c  2002-12-15 20:57:42.000000000 -0500
-@@ -0,0 +1,194 @@
-+/* UML hardware watchdog, shamelessly stolen from:
-+ *
-+ *    SoftDog 0.05:   A Software Watchdog Device
-+ *
-+ *    (c) Copyright 1996 Alan Cox <alan@redhat.com>, All Rights Reserved.
-+ *                            http://www.redhat.com
-+ *
-+ *    This program is free software; you can redistribute it and/or
-+ *    modify it under the terms of the GNU General Public License
-+ *    as published by the Free Software Foundation; either version
-+ *    2 of the License, or (at your option) any later version.
-+ *    
-+ *    Neither Alan Cox nor CymruNet Ltd. admit liability nor provide 
-+ *    warranty for any of this software. This material is provided 
-+ *    "AS-IS" and at no charge.       
-+ *
-+ *    (c) Copyright 1995    Alan Cox <alan@lxorguk.ukuu.org.uk>
-+ *
-+ *    Software only watchdog driver. Unlike its big brother the WDT501P
-+ *    driver this won't always recover a failed machine.
-+ *
-+ *  03/96: Angelo Haritsis <ah@doc.ic.ac.uk> :
-+ *    Modularised.
-+ *    Added soft_margin; use upon insmod to change the timer delay.
-+ *    NB: uses same minor as wdt (WATCHDOG_MINOR); we could use separate
-+ *        minors.
-+ *
-+ *  19980911 Alan Cox
-+ *    Made SMP safe for 2.3.x
-+ *
-+ *  20011127 Joel Becker (jlbec@evilplan.org>
-+ *    Added soft_noboot; Allows testing the softdog trigger without 
-+ *    requiring a recompile.
-+ *    Added WDIOC_GETTIMEOUT and WDIOC_SETTIMOUT.
-+ */
-+ 
-+#include <linux/module.h>
-+#include <linux/config.h>
-+#include <linux/types.h>
-+#include <linux/kernel.h>
-+#include <linux/fs.h>
-+#include <linux/mm.h>
-+#include <linux/miscdevice.h>
-+#include <linux/watchdog.h>
-+#include <linux/reboot.h>
-+#include <linux/smp_lock.h>
-+#include <linux/init.h>
-+#include <asm/uaccess.h>
-+#include "helper.h"
-+#include "mconsole.h"
-+
-+MODULE_LICENSE("GPL");
-+
-+/* Locked by the BKL in harddog_open and harddog_release */
-+static int timer_alive;
-+static int harddog_in_fd = -1;
-+static int harddog_out_fd = -1;
-+
-+/*
-+ *    Allow only one person to hold it open
-+ */
-+ 
-+extern int start_watchdog(int *in_fd_ret, int *out_fd_ret, char *sock);
-+
-+static int harddog_open(struct inode *inode, struct file *file)
-+{
-+      int err;
-+      char *sock = NULL;
-+
-+      lock_kernel();
-+      if(timer_alive)
-+              return -EBUSY;
-+#ifdef CONFIG_HARDDOG_NOWAYOUT         
-+      MOD_INC_USE_COUNT;
-+#endif
-+
-+#ifdef CONFIG_MCONSOLE
-+      sock = mconsole_notify_socket();
-+#endif
-+      err = start_watchdog(&harddog_in_fd, &harddog_out_fd, sock);
-+      if(err) return(err);
-+
-+      timer_alive = 1;
-+      unlock_kernel();
-+      return 0;
-+}
-+
-+extern void stop_watchdog(int in_fd, int out_fd);
-+
-+static int harddog_release(struct inode *inode, struct file *file)
-+{
-+      /*
-+       *      Shut off the timer.
-+       */
-+      lock_kernel();
-+
-+      stop_watchdog(harddog_in_fd, harddog_out_fd);
-+      harddog_in_fd = -1;
-+      harddog_out_fd = -1;
-+
-+      timer_alive=0;
-+      unlock_kernel();
-+      return 0;
-+}
-+
-+extern int ping_watchdog(int fd);
-+
-+static ssize_t harddog_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;
-+
-+      /*
-+       *      Refresh the timer.
-+       */
-+      if(len)
-+              return(ping_watchdog(harddog_out_fd));
-+      return 0;
-+}
-+
-+static int harddog_ioctl(struct inode *inode, struct file *file,
-+                       unsigned int cmd, unsigned long arg)
-+{
-+      static struct watchdog_info ident = {
-+              WDIOF_SETTIMEOUT,
-+              0,
-+              "UML Hardware Watchdog"
-+      };
-+      switch (cmd) {
-+              default:
-+                      return -ENOTTY;
-+              case WDIOC_GETSUPPORT:
-+                      if(copy_to_user((struct harddog_info *)arg, &ident,
-+                                      sizeof(ident)))
-+                              return -EFAULT;
-+                      return 0;
-+              case WDIOC_GETSTATUS:
-+              case WDIOC_GETBOOTSTATUS:
-+                      return put_user(0,(int *)arg);
-+              case WDIOC_KEEPALIVE:
-+                      return(ping_watchdog(harddog_out_fd));
-+      }
-+}
-+
-+static struct file_operations harddog_fops = {
-+      .owner          = THIS_MODULE,
-+      .write          = harddog_write,
-+      .ioctl          = harddog_ioctl,
-+      .open           = harddog_open,
-+      .release        = harddog_release,
-+};
-+
-+static struct miscdevice harddog_miscdev = {
-+      .minor          = WATCHDOG_MINOR,
-+      .name           = "watchdog",
-+      .fops           = &harddog_fops,
-+};
-+
-+static char banner[] __initdata = KERN_INFO "UML Watchdog Timer\n";
-+
-+static int __init harddog_init(void)
-+{
-+      int ret;
-+
-+      ret = misc_register(&harddog_miscdev);
-+
-+      if (ret)
-+              return ret;
-+
-+      printk(banner);
-+
-+      return(0);
-+}
-+
-+static void __exit harddog_exit(void)
-+{
-+      misc_deregister(&harddog_miscdev);
-+}
-+
-+module_init(harddog_init);
-+module_exit(harddog_exit);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/harddog_user.c um/arch/um/drivers/harddog_user.c
---- orig/arch/um/drivers/harddog_user.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/harddog_user.c  2002-12-04 16:38:05.000000000 -0500
-@@ -0,0 +1,137 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <unistd.h>
-+#include <errno.h>
-+#include "user_util.h"
-+#include "user.h"
-+#include "helper.h"
-+#include "mconsole.h"
-+#include "os.h"
-+#include "choose-mode.h"
-+#include "mode.h"
-+
-+struct dog_data {
-+      int stdin;
-+      int stdout;
-+      int close_me[2];
-+};
-+
-+static void pre_exec(void *d)
-+{
-+      struct dog_data *data = d;
-+
-+      dup2(data->stdin, 0);
-+      dup2(data->stdout, 1);
-+      dup2(data->stdout, 2);
-+      close(data->stdin);
-+      close(data->stdout);
-+      close(data->close_me[0]);
-+      close(data->close_me[1]);
-+}
-+
-+int start_watchdog(int *in_fd_ret, int *out_fd_ret, char *sock)
-+{
-+      struct dog_data data;
-+      int in_fds[2], out_fds[2], pid, n, err;
-+      char pid_buf[sizeof("nnnnn\0")], c;
-+      char *pid_args[] = { "/usr/bin/uml_watchdog", "-pid", pid_buf, NULL };
-+      char *mconsole_args[] = { "/usr/bin/uml_watchdog", "-mconsole", NULL, 
-+                                NULL };
-+      char **args = NULL;
-+
-+      err = os_pipe(in_fds, 1, 0);
-+      if(err){
-+              printk("harddog_open - os_pipe failed, errno = %d\n", -err);
-+              return(err);
-+      }
-+
-+      err = os_pipe(out_fds, 1, 0);
-+      if(err){
-+              printk("harddog_open - os_pipe failed, errno = %d\n", -err);
-+              return(err);
-+      }
-+
-+      data.stdin = out_fds[0];
-+      data.stdout = in_fds[1];
-+      data.close_me[0] = out_fds[1];
-+      data.close_me[1] = in_fds[0];
-+
-+      if(sock != NULL){
-+              mconsole_args[2] = sock;
-+              args = mconsole_args;
-+      }
-+      else {
-+              /* XXX The os_getpid() is not SMP correct */
-+              sprintf(pid_buf, "%d", CHOOSE_MODE(tracing_pid, os_getpid()));
-+              args = pid_args;
-+      }
-+
-+      pid = run_helper(pre_exec, &data, args, NULL);
-+
-+      close(out_fds[0]);
-+      close(in_fds[1]);
-+
-+      if(pid < 0){
-+              err = -pid;
-+              printk("harddog_open - run_helper failed, errno = %d\n", err);
-+              goto out;
-+      }
-+
-+      n = read(in_fds[0], &c, sizeof(c));
-+      if(n == 0){
-+              printk("harddog_open - EOF on watchdog pipe\n");
-+              helper_wait(pid);
-+              err = -EIO;
-+              goto out;
-+      }
-+      else if(n < 0){
-+              printk("harddog_open - read of watchdog pipe failed, "
-+                     "errno = %d\n", errno);
-+              helper_wait(pid);
-+              err = -errno;
-+              goto out;
-+      }
-+      *in_fd_ret = in_fds[0];
-+      *out_fd_ret = out_fds[1];
-+      return(0);
-+ out:
-+      close(out_fds[1]);
-+      close(in_fds[0]);
-+      return(err);
-+}
-+
-+void stop_watchdog(int in_fd, int out_fd)
-+{
-+      close(in_fd);
-+      close(out_fd);
-+}
-+
-+int ping_watchdog(int fd)
-+{
-+      int n;
-+      char c = '\n';
-+
-+      n = write(fd, &c, sizeof(c));
-+      if(n < sizeof(c)){
-+              printk("ping_watchdog - write failed, errno = %d\n",
-+                     errno);
-+              return(-errno);
-+      }
-+      return 1;
-+
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_kern.c um/arch/um/drivers/hostaudio_kern.c
---- orig/arch/um/drivers/hostaudio_kern.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/hostaudio_kern.c        2003-03-28 21:57:16.000000000 -0500
-@@ -0,0 +1,330 @@
-+/* 
-+ * Copyright (C) 2002 Steve Schmidtke 
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/config.h"
-+#include "linux/module.h"
-+#include "linux/version.h"
-+#include "linux/init.h"
-+#include "linux/slab.h"
-+#include "linux/fs.h"
-+#include "linux/sound.h"
-+#include "linux/soundcard.h"
-+#include "asm/uaccess.h"
-+#include "kern_util.h"
-+#include "init.h"
-+#include "hostaudio.h"
-+
-+/* Only changed from linux_main at boot time */
-+char *dsp = HOSTAUDIO_DEV_DSP;
-+char *mixer = HOSTAUDIO_DEV_MIXER;
-+
-+#ifndef MODULE
-+static int set_dsp(char *name, int *add)
-+{
-+      dsp = name;
-+      return(0);
-+}
-+
-+__uml_setup("dsp=", set_dsp,
-+"dsp=<dsp device>\n"
-+"    This is used to specify the host dsp device to the hostaudio driver.\n"
-+"    The default is \"" HOSTAUDIO_DEV_DSP "\".\n\n"
-+);
-+
-+static int set_mixer(char *name, int *add)
-+{
-+      mixer = name;
-+      return(0);
-+}
-+
-+__uml_setup("mixer=", set_mixer,
-+"mixer=<mixer device>\n"
-+"    This is used to specify the host mixer device to the hostaudio driver.\n"
-+"    The default is \"" HOSTAUDIO_DEV_MIXER "\".\n\n"
-+);
-+#endif
-+
-+/* /dev/dsp file operations */
-+
-+static ssize_t hostaudio_read(struct file *file, char *buffer, size_t count, 
-+                            loff_t *ppos)
-+{
-+        struct hostaudio_state *state = file->private_data;
-+      void *kbuf;
-+      int err;
-+
-+#ifdef DEBUG
-+        printk("hostaudio: read called, count = %d\n", count);
-+#endif
-+
-+      kbuf = kmalloc(count, GFP_KERNEL);
-+      if(kbuf == NULL)
-+              return(-ENOMEM);
-+
-+        err = hostaudio_read_user(state, kbuf, count, ppos);
-+      if(err < 0)
-+              goto out;
-+
-+      if(copy_to_user(buffer, kbuf, err))
-+              err = -EFAULT;
-+
-+ out:
-+      kfree(kbuf);
-+      return(err);
-+}
-+
-+static ssize_t hostaudio_write(struct file *file, const char *buffer, 
-+                             size_t count, loff_t *ppos)
-+{
-+        struct hostaudio_state *state = file->private_data;
-+      void *kbuf;
-+      int err;
-+
-+#ifdef DEBUG
-+        printk("hostaudio: write called, count = %d\n", count);
-+#endif
-+
-+      kbuf = kmalloc(count, GFP_KERNEL);
-+      if(kbuf == NULL)
-+              return(-ENOMEM);
-+
-+      err = -EFAULT;
-+      if(copy_from_user(kbuf, buffer, count))
-+              goto out;
-+
-+        err = hostaudio_write_user(state, kbuf, count, ppos);
-+      if(err < 0)
-+              goto out;
-+
-+ out:
-+      kfree(kbuf);
-+      return(err);
-+}
-+
-+static unsigned int hostaudio_poll(struct file *file, 
-+                                 struct poll_table_struct *wait)
-+{
-+        unsigned int mask = 0;
-+
-+#ifdef DEBUG
-+        printk("hostaudio: poll called (unimplemented)\n");
-+#endif
-+
-+        return(mask);
-+}
-+
-+static int hostaudio_ioctl(struct inode *inode, struct file *file, 
-+                         unsigned int cmd, unsigned long arg)
-+{
-+        struct hostaudio_state *state = file->private_data;
-+      unsigned long data = 0;
-+      int err;
-+
-+#ifdef DEBUG
-+        printk("hostaudio: ioctl called, cmd = %u\n", cmd);
-+#endif
-+      switch(cmd){
-+      case SNDCTL_DSP_SPEED:
-+      case SNDCTL_DSP_STEREO:
-+      case SNDCTL_DSP_GETBLKSIZE:
-+      case SNDCTL_DSP_CHANNELS:
-+      case SNDCTL_DSP_SUBDIVIDE:
-+      case SNDCTL_DSP_SETFRAGMENT:
-+              if(get_user(data, (int *) arg))
-+                      return(-EFAULT);
-+              break;
-+      default:
-+              break;
-+      }
-+
-+        err = hostaudio_ioctl_user(state, cmd, (unsigned long) &data);
-+
-+      switch(cmd){
-+      case SNDCTL_DSP_SPEED:
-+      case SNDCTL_DSP_STEREO:
-+      case SNDCTL_DSP_GETBLKSIZE:
-+      case SNDCTL_DSP_CHANNELS:
-+      case SNDCTL_DSP_SUBDIVIDE:
-+      case SNDCTL_DSP_SETFRAGMENT:
-+              if(put_user(data, (int *) arg))
-+                      return(-EFAULT);
-+              break;
-+      default:
-+              break;
-+      }
-+
-+      return(err);
-+}
-+
-+static int hostaudio_open(struct inode *inode, struct file *file)
-+{
-+        struct hostaudio_state *state;
-+        int r = 0, w = 0;
-+        int ret;
-+
-+#ifdef DEBUG
-+        printk("hostaudio: open called (host: %s)\n", dsp);
-+#endif
-+
-+        state = kmalloc(sizeof(struct hostaudio_state), GFP_KERNEL);
-+        if(state == NULL) return(-ENOMEM);
-+
-+        if(file->f_mode & FMODE_READ) r = 1;
-+        if(file->f_mode & FMODE_WRITE) w = 1;
-+
-+        ret = hostaudio_open_user(state, r, w, dsp);
-+        if(ret < 0){
-+              kfree(state);
-+              return(ret);
-+        }
-+
-+        file->private_data = state;
-+        return(0);
-+}
-+
-+static int hostaudio_release(struct inode *inode, struct file *file)
-+{
-+        struct hostaudio_state *state = file->private_data;
-+        int ret;
-+
-+#ifdef DEBUG
-+        printk("hostaudio: release called\n");
-+#endif
-+
-+        ret = hostaudio_release_user(state);
-+        kfree(state);
-+
-+        return(ret);
-+}
-+
-+/* /dev/mixer file operations */
-+
-+static int hostmixer_ioctl_mixdev(struct inode *inode, struct file *file, 
-+                                unsigned int cmd, unsigned long arg)
-+{
-+        struct hostmixer_state *state = file->private_data;
-+
-+#ifdef DEBUG
-+        printk("hostmixer: ioctl called\n");
-+#endif
-+
-+        return(hostmixer_ioctl_mixdev_user(state, cmd, arg));
-+}
-+
-+static int hostmixer_open_mixdev(struct inode *inode, struct file *file)
-+{
-+        struct hostmixer_state *state;
-+        int r = 0, w = 0;
-+        int ret;
-+
-+#ifdef DEBUG
-+        printk("hostmixer: open called (host: %s)\n", mixer);
-+#endif
-+
-+        state = kmalloc(sizeof(struct hostmixer_state), GFP_KERNEL);
-+        if(state == NULL) return(-ENOMEM);
-+
-+        if(file->f_mode & FMODE_READ) r = 1;
-+        if(file->f_mode & FMODE_WRITE) w = 1;
-+
-+        ret = hostmixer_open_mixdev_user(state, r, w, mixer);
-+        
-+        if(ret < 0){
-+              kfree(state);
-+              return(ret);
-+        }
-+
-+        file->private_data = state;
-+        return(0);
-+}
-+
-+static int hostmixer_release(struct inode *inode, struct file *file)
-+{
-+        struct hostmixer_state *state = file->private_data;
-+      int ret;
-+
-+#ifdef DEBUG
-+        printk("hostmixer: release called\n");
-+#endif
-+
-+        ret = hostmixer_release_mixdev_user(state);
-+        kfree(state);
-+
-+        return(ret);
-+}
-+
-+
-+/* kernel module operations */
-+
-+static struct file_operations hostaudio_fops = {
-+        .owner          = THIS_MODULE,
-+        .llseek         = no_llseek,
-+        .read           = hostaudio_read,
-+        .write          = hostaudio_write,
-+        .poll           = hostaudio_poll,
-+        .ioctl          = hostaudio_ioctl,
-+        .mmap           = NULL,
-+        .open           = hostaudio_open,
-+        .release        = hostaudio_release,
-+};
-+
-+static struct file_operations hostmixer_fops = {
-+        .owner          = THIS_MODULE,
-+        .llseek         = no_llseek,
-+        .ioctl          = hostmixer_ioctl_mixdev,
-+        .open           = hostmixer_open_mixdev,
-+        .release        = hostmixer_release,
-+};
-+
-+struct {
-+      int dev_audio;
-+      int dev_mixer;
-+} module_data;
-+
-+MODULE_AUTHOR("Steve Schmidtke");
-+MODULE_DESCRIPTION("UML Audio Relay");
-+MODULE_LICENSE("GPL");
-+
-+static int __init hostaudio_init_module(void)
-+{
-+        printk(KERN_INFO "UML Audio Relay (host dsp = %s, host mixer = %s)\n",
-+             dsp, mixer);
-+
-+      module_data.dev_audio = register_sound_dsp(&hostaudio_fops, -1);
-+        if(module_data.dev_audio < 0){
-+                printk(KERN_ERR "hostaudio: couldn't register DSP device!\n");
-+                return -ENODEV;
-+        }
-+
-+      module_data.dev_mixer = register_sound_mixer(&hostmixer_fops, -1);
-+        if(module_data.dev_mixer < 0){
-+                printk(KERN_ERR "hostmixer: couldn't register mixer "
-+                     "device!\n");
-+                unregister_sound_dsp(module_data.dev_audio);
-+                return -ENODEV;
-+        }
-+
-+        return 0;
-+}
-+
-+static void __exit hostaudio_cleanup_module (void)
-+{
-+       unregister_sound_mixer(module_data.dev_mixer);
-+       unregister_sound_dsp(module_data.dev_audio);
-+}
-+
-+module_init(hostaudio_init_module);
-+module_exit(hostaudio_cleanup_module);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_user.c um/arch/um/drivers/hostaudio_user.c
---- orig/arch/um/drivers/hostaudio_user.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/hostaudio_user.c        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,149 @@
-+/* 
-+ * Copyright (C) 2002 Steve Schmidtke 
-+ * Licensed under the GPL
-+ */
-+
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <sys/ioctl.h>
-+#include <fcntl.h>
-+#include <unistd.h>
-+#include <errno.h>
-+#include "hostaudio.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "os.h"
-+
-+/* /dev/dsp file operations */
-+
-+ssize_t hostaudio_read_user(struct hostaudio_state *state, char *buffer, 
-+                          size_t count, loff_t *ppos)
-+{
-+      ssize_t ret;
-+
-+#ifdef DEBUG
-+        printk("hostaudio: read_user called, count = %d\n", count);
-+#endif
-+
-+        ret = read(state->fd, buffer, count);
-+
-+        if(ret < 0) return(-errno);
-+        return(ret);
-+}
-+
-+ssize_t hostaudio_write_user(struct hostaudio_state *state, const char *buffer,
-+                           size_t count, loff_t *ppos)
-+{
-+      ssize_t ret;
-+
-+#ifdef DEBUG
-+        printk("hostaudio: write_user called, count = %d\n", count);
-+#endif
-+
-+        ret = write(state->fd, buffer, count);
-+
-+        if(ret < 0) return(-errno);
-+        return(ret);
-+}
-+
-+int hostaudio_ioctl_user(struct hostaudio_state *state, unsigned int cmd, 
-+                       unsigned long arg)
-+{
-+      int ret;
-+#ifdef DEBUG
-+        printk("hostaudio: ioctl_user called, cmd = %u\n", cmd);
-+#endif
-+
-+        ret = ioctl(state->fd, cmd, arg);
-+      
-+        if(ret < 0) return(-errno);
-+        return(ret);
-+}
-+
-+int hostaudio_open_user(struct hostaudio_state *state, int r, int w, char *dsp)
-+{
-+#ifdef DEBUG
-+        printk("hostaudio: open_user called\n");
-+#endif
-+
-+        state->fd = os_open_file(dsp, of_set_rw(OPENFLAGS(), r, w), 0);
-+
-+        if(state->fd >= 0) return(0);
-+
-+        printk("hostaudio_open_user failed to open '%s', errno = %d\n",
-+             dsp, errno);
-+        
-+        return(-errno); 
-+}
-+
-+int hostaudio_release_user(struct hostaudio_state *state)
-+{
-+#ifdef DEBUG
-+        printk("hostaudio: release called\n");
-+#endif
-+        if(state->fd >= 0){
-+              close(state->fd);
-+              state->fd=-1;
-+        }
-+
-+        return(0);
-+}
-+
-+/* /dev/mixer file operations */
-+
-+int hostmixer_ioctl_mixdev_user(struct hostmixer_state *state, 
-+                              unsigned int cmd, unsigned long arg)
-+{
-+      int ret;
-+#ifdef DEBUG
-+        printk("hostmixer: ioctl_user called cmd = %u\n",cmd);
-+#endif
-+
-+        ret = ioctl(state->fd, cmd, arg);
-+      if(ret < 0) 
-+              return(-errno);
-+      return(ret);
-+}
-+
-+int hostmixer_open_mixdev_user(struct hostmixer_state *state, int r, int w,
-+                             char *mixer)
-+{
-+#ifdef DEBUG
-+        printk("hostmixer: open_user called\n");
-+#endif
-+
-+        state->fd = os_open_file(mixer, of_set_rw(OPENFLAGS(), r, w), 0);
-+
-+        if(state->fd >= 0) return(0);
-+
-+        printk("hostaudio_open_mixdev_user failed to open '%s', errno = %d\n",
-+             mixer, errno);
-+        
-+        return(-errno); 
-+}
-+
-+int hostmixer_release_mixdev_user(struct hostmixer_state *state)
-+{
-+#ifdef DEBUG
-+        printk("hostmixer: release_user called\n");
-+#endif
-+
-+        if(state->fd >= 0){
-+              close(state->fd);
-+              state->fd = -1;
-+        }
-+
-+        return 0;
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/line.c um/arch/um/drivers/line.c
---- orig/arch/um/drivers/line.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/line.c  2003-03-26 15:09:44.000000000 -0500
-@@ -0,0 +1,589 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/sched.h"
-+#include "linux/slab.h"
-+#include "linux/list.h"
-+#include "linux/devfs_fs_kernel.h"
-+#include "asm/irq.h"
-+#include "asm/uaccess.h"
-+#include "chan_kern.h"
-+#include "irq_user.h"
-+#include "line.h"
-+#include "kern.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "os.h"
-+
-+#define LINE_BUFSIZE 4096
-+
-+void line_interrupt(int irq, void *data, struct pt_regs *unused)
-+{
-+      struct line *dev = data;
-+
-+      if(dev->count > 0) 
-+              chan_interrupt(&dev->chan_list, &dev->task, dev->tty, irq, 
-+                             dev);
-+}
-+
-+void line_timer_cb(void *arg)
-+{
-+      struct line *dev = arg;
-+
-+      line_interrupt(dev->driver->read_irq, dev, NULL);
-+}
-+
-+static void buffer_data(struct line *line, const char *buf, int len)
-+{
-+      int end;
-+
-+      if(line->buffer == NULL){
-+              line->buffer = kmalloc(LINE_BUFSIZE, GFP_ATOMIC);
-+              if(line->buffer == NULL){
-+                      printk("buffer_data - atomic allocation failed\n");
-+                      return;
-+              }
-+              line->head = line->buffer;
-+              line->tail = line->buffer;
-+      }
-+      end = line->buffer + LINE_BUFSIZE - line->tail;
-+      if(len < end){
-+              memcpy(line->tail, buf, len);
-+              line->tail += len;
-+      }
-+      else {
-+              memcpy(line->tail, buf, end);
-+              buf += end;
-+              len -= end;
-+              memcpy(line->buffer, buf, len);
-+              line->tail = line->buffer + len;
-+      }
-+}
-+
-+static int flush_buffer(struct line *line)
-+{
-+      int n, count;
-+
-+      if((line->buffer == NULL) || (line->head == line->tail)) return(1);
-+
-+      if(line->tail < line->head){
-+              count = line->buffer + LINE_BUFSIZE - line->head;
-+              n = write_chan(&line->chan_list, line->head, count,
-+                             line->driver->write_irq);
-+              if(n < 0) return(n);
-+              if(n == count) line->head = line->buffer;
-+              else {
-+                      line->head += n;
-+                      return(0);
-+              }
-+      }
-+
-+      count = line->tail - line->head;
-+      n = write_chan(&line->chan_list, line->head, count, 
-+                     line->driver->write_irq);
-+      if(n < 0) return(n);
-+
-+      line->head += n;
-+      return(line->head == line->tail);
-+}
-+
-+int line_write(struct line *lines, struct tty_struct *tty, int from_user,
-+             const char *buf, int len)
-+{
-+      struct line *line;
-+      char *new;
-+      unsigned long flags;
-+      int n, err, i;
-+
-+      if(tty->stopped) return 0;
-+
-+      if(from_user){
-+              new = kmalloc(len, GFP_KERNEL);
-+              if(new == NULL)
-+                      return(0);
-+              n = copy_from_user(new, buf, len);
-+              if(n == len)
-+                      return(-EFAULT);
-+              buf = new;
-+      }
-+
-+      i = minor(tty->device) - tty->driver.minor_start;
-+      line = &lines[i];
-+
-+      down(&line->sem);
-+      if(line->head != line->tail){
-+              local_irq_save(flags);
-+              buffer_data(line, buf, len);
-+              err = flush_buffer(line);
-+              local_irq_restore(flags);
-+              if(err <= 0)
-+                      goto out;
-+      }
-+      else {
-+              n = write_chan(&line->chan_list, buf, len, 
-+                             line->driver->write_irq);
-+              if(n < 0){
-+                      len = n;
-+                      goto out;
-+              }
-+              if(n < len)
-+                      buffer_data(line, buf + n, len - n);
-+      }
-+ out:
-+      up(&line->sem);
-+
-+      if(from_user)
-+              kfree(buf);
-+      return(len);
-+}
-+
-+void line_write_interrupt(int irq, void *data, struct pt_regs *unused)
-+{
-+      struct line *dev = data;
-+      struct tty_struct *tty = dev->tty;
-+      int err;
-+
-+      err = flush_buffer(dev);
-+      if(err == 0) return;
-+      else if(err < 0){
-+              dev->head = dev->buffer;
-+              dev->tail = dev->buffer;
-+      }
-+
-+      if(tty == NULL) return;
-+
-+      if(test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) &&
-+         (tty->ldisc.write_wakeup != NULL))
-+              (tty->ldisc.write_wakeup)(tty);
-+      
-+      /* BLOCKING mode
-+       * In blocking mode, everything sleeps on tty->write_wait.
-+       * Sleeping in the console driver would break non-blocking
-+       * writes.
-+       */
-+
-+      if (waitqueue_active(&tty->write_wait))
-+              wake_up_interruptible(&tty->write_wait);
-+
-+}
-+
-+int line_write_room(struct tty_struct *tty)
-+{
-+      struct line *dev = tty->driver_data;
-+      int n;
-+
-+      if(dev->buffer == NULL) return(LINE_BUFSIZE - 1);
-+
-+      n = dev->head - dev->tail;
-+      if(n <= 0) n = LINE_BUFSIZE + n;
-+      return(n - 1);
-+}
-+
-+int line_setup_irq(int fd, int input, int output, void *data)
-+{
-+      struct line *line = data;
-+      struct line_driver *driver = line->driver;
-+      int err = 0, flags = SA_INTERRUPT | SA_SHIRQ | SA_SAMPLE_RANDOM;
-+
-+      if(input) err = um_request_irq(driver->read_irq, fd, IRQ_READ, 
-+                                     line_interrupt, flags, 
-+                                     driver->read_irq_name, line);
-+      if(err) return(err);
-+      if(output) err = um_request_irq(driver->write_irq, fd, IRQ_WRITE, 
-+                                      line_write_interrupt, flags, 
-+                                      driver->write_irq_name, line);
-+      line->have_irq = 1;
-+      return(err);
-+}
-+
-+void line_disable(struct line *line, int current_irq)
-+{
-+      if(!line->have_irq) return;
-+
-+      if(line->driver->read_irq == current_irq)
-+              free_irq_later(line->driver->read_irq, line);
-+      else
-+              free_irq(line->driver->read_irq, line);
-+
-+      if(line->driver->write_irq == current_irq)
-+              free_irq_later(line->driver->write_irq, line);
-+      else
-+              free_irq(line->driver->write_irq, line);
-+
-+      line->have_irq = 0;
-+}
-+
-+int line_open(struct line *lines, struct tty_struct *tty,
-+            struct chan_opts *opts)
-+{
-+      struct line *line;
-+      int n, err = 0;
-+
-+      if(tty == NULL) n = 0;
-+      else n = minor(tty->device) - tty->driver.minor_start;
-+      line = &lines[n];
-+
-+      down(&line->sem);
-+      if(line->count == 0){
-+              if(!line->valid){
-+                      err = -ENODEV;
-+                      goto out;
-+              }
-+              if(list_empty(&line->chan_list)){
-+                      err = parse_chan_pair(line->init_str, &line->chan_list,
-+                                            line->init_pri, n, opts);
-+                      if(err) goto out;
-+                      err = open_chan(&line->chan_list);
-+                      if(err) goto out;
-+              }
-+              enable_chan(&line->chan_list, line);
-+              INIT_TQUEUE(&line->task, line_timer_cb, line);
-+      }
-+
-+      if(!line->sigio){
-+              chan_enable_winch(&line->chan_list, line);
-+              line->sigio = 1;
-+      }
-+
-+      /* This is outside the if because the initial console is opened
-+       * with tty == NULL
-+       */
-+      line->tty = tty;
-+
-+      if(tty != NULL){
-+              tty->driver_data = line;
-+              chan_window_size(&line->chan_list, &tty->winsize.ws_row, 
-+                               &tty->winsize.ws_col);
-+      }
-+
-+      line->count++;
-+ out:
-+      up(&line->sem);
-+      return(err);
-+}
-+
-+void line_close(struct line *lines, struct tty_struct *tty)
-+{
-+      struct line *line;
-+      int n;
-+
-+      if(tty == NULL) n = 0;
-+      else n = minor(tty->device) - tty->driver.minor_start;
-+      line = &lines[n];
-+
-+      down(&line->sem);
-+      line->count--;
-+
-+      /* I don't like this, but I can't think of anything better.  What's
-+       * going on is that the tty is in the process of being closed for
-+       * the last time.  Its count hasn't been dropped yet, so it's still
-+       * at 1.  This may happen when line->count != 0 because of the initial
-+       * console open (without a tty) bumping it up to 1.
-+       */
-+      if((line->tty != NULL) && (line->tty->count == 1))
-+              line->tty = NULL;
-+      if(line->count == 0)
-+              line_disable(line, -1);
-+      up(&line->sem);
-+}
-+
-+void close_lines(struct line *lines, int nlines)
-+{
-+      int i;
-+
-+      for(i = 0; i < nlines; i++)
-+              close_chan(&lines[i].chan_list);
-+}
-+
-+int line_setup(struct line *lines, int num, char *init, int all_allowed)
-+{
-+      int i, n;
-+      char *end;
-+
-+      if(*init == '=') n = -1;
-+      else {
-+              n = simple_strtoul(init, &end, 0);
-+              if(*end != '='){
-+                      printk(KERN_ERR "line_setup failed to parse \"%s\"\n", 
-+                             init);
-+                      return(1);
-+              }
-+              init = end;
-+      }
-+      init++;
-+      if((n >= 0) && (n >= num)){
-+              printk("line_setup - %d out of range ((0 ... %d) allowed)\n",
-+                     n, num);
-+              return(1);
-+      }
-+      else if(n >= 0){
-+              if(lines[n].count > 0){
-+                      printk("line_setup - device %d is open\n", n);
-+                      return(1);
-+              }
-+              if(lines[n].init_pri <= INIT_ONE){
-+                      lines[n].init_pri = INIT_ONE;
-+                      if(!strcmp(init, "none")) lines[n].valid = 0;
-+                      else {
-+                              lines[n].init_str = init;
-+                              lines[n].valid = 1;
-+                      }       
-+              }
-+      }
-+      else if(!all_allowed){
-+              printk("line_setup - can't configure all devices from "
-+                     "mconsole\n");
-+              return(1);
-+      }
-+      else {
-+              for(i = 0; i < num; i++){
-+                      if(lines[i].init_pri <= INIT_ALL){
-+                              lines[i].init_pri = INIT_ALL;
-+                              if(!strcmp(init, "none")) lines[i].valid = 0;
-+                              else {
-+                                      lines[i].init_str = init;
-+                                      lines[i].valid = 1;
-+                              }
-+                      }
-+              }
-+      }
-+      return(0);
-+}
-+
-+int line_config(struct line *lines, int num, char *str)
-+{
-+      char *new = uml_strdup(str);
-+
-+      if(new == NULL){
-+              printk("line_config - uml_strdup failed\n");
-+              return(-ENOMEM);
-+      }
-+      return(line_setup(lines, num, new, 0));
-+}
-+
-+int line_get_config(char *name, struct line *lines, int num, char *str, 
-+                  int size, char **error_out)
-+{
-+      struct line *line;
-+      char *end;
-+      int dev, n = 0;
-+
-+      dev = simple_strtoul(name, &end, 0);
-+      if((*end != '\0') || (end == name)){
-+              *error_out = "line_get_config failed to parse device number";
-+              return(0);
-+      }
-+
-+      if((dev < 0) || (dev >= num)){
-+              *error_out = "device number of of range";
-+              return(0);
-+      }
-+
-+      line = &lines[dev];
-+
-+      down(&line->sem);
-+      if(!line->valid)
-+              CONFIG_CHUNK(str, size, n, "none", 1);
-+      else if(line->count == 0)
-+              CONFIG_CHUNK(str, size, n, line->init_str, 1);
-+      else n = chan_config_string(&line->chan_list, str, size, error_out);
-+      up(&line->sem);
-+
-+      return(n);
-+}
-+
-+int line_remove(struct line *lines, int num, char *str)
-+{
-+      char config[sizeof("conxxxx=none\0")];
-+
-+      sprintf(config, "%s=none", str);
-+      return(line_setup(lines, num, config, 0));
-+}
-+
-+void line_register_devfs(struct lines *set, struct line_driver *line_driver, 
-+                       struct tty_driver *driver, struct line *lines,
-+                       int nlines)
-+{
-+      int err, i, n;
-+      char *from, *to;
-+
-+      driver->driver_name = line_driver->name;
-+      driver->name = line_driver->devfs_name;
-+      driver->major = line_driver->major;
-+      driver->minor_start = line_driver->minor_start;
-+      driver->type = line_driver->type;
-+      driver->subtype = line_driver->subtype;
-+      driver->magic = TTY_DRIVER_MAGIC;
-+      driver->flags = TTY_DRIVER_REAL_RAW;
-+
-+      n = set->num;
-+      driver->num = n;
-+      driver->table = kmalloc(n * sizeof(driver->table[0]), GFP_KERNEL);
-+      driver->termios = kmalloc(n * sizeof(driver->termios[0]), GFP_KERNEL);
-+      driver->termios_locked = kmalloc(n * sizeof(driver->termios_locked[0]),
-+                                       GFP_KERNEL);
-+      if((driver->table == NULL) || (driver->termios == NULL) ||
-+         (driver->termios_locked == NULL))
-+              panic("Failed to allocate driver table");
-+
-+      memset(driver->table, 0, n * sizeof(driver->table[0]));
-+      memset(driver->termios, 0, n * sizeof(driver->termios[0]));
-+      memset(driver->termios_locked, 0, 
-+             n * sizeof(driver->termios_locked[0]));
-+
-+      driver->write_room = line_write_room;
-+      driver->init_termios = tty_std_termios;
-+
-+      if (tty_register_driver(driver))
-+              panic("line_register_devfs : Couldn't register driver\n");
-+
-+      from = line_driver->symlink_from;
-+      to = line_driver->symlink_to;
-+      err = devfs_mk_symlink(NULL, from, 0, to, NULL, NULL);
-+      if(err) printk("Symlink creation from /dev/%s to /dev/%s "
-+                     "returned %d\n", from, to, err);
-+
-+      for(i = 0; i < nlines; i++){
-+              if(!lines[i].valid) 
-+                      tty_unregister_devfs(driver, driver->minor_start + i);
-+      }
-+
-+      mconsole_register_dev(&line_driver->mc);
-+}
-+
-+void lines_init(struct line *lines, int nlines)
-+{
-+      struct line *line;
-+      int i;
-+
-+      for(i = 0; i < nlines; i++){
-+              line = &lines[i];
-+              INIT_LIST_HEAD(&line->chan_list);
-+              sema_init(&line->sem, 1);
-+              if(line->init_str != NULL){
-+                      line->init_str = uml_strdup(line->init_str);
-+                      if(line->init_str == NULL)
-+                              printk("lines_init - uml_strdup returned "
-+                                     "NULL\n");
-+              }
-+      }
-+}
-+
-+struct winch {
-+      struct list_head list;
-+      int fd;
-+      int tty_fd;
-+      int pid;
-+      struct line *line;
-+};
-+
-+void winch_interrupt(int irq, void *data, struct pt_regs *unused)
-+{
-+      struct winch *winch = data;
-+      struct tty_struct *tty;
-+      int err;
-+      char c;
-+
-+      if(winch->fd != -1){
-+              err = generic_read(winch->fd, &c, NULL);
-+              if(err < 0){
-+                      if(err != -EAGAIN){
-+                              printk("winch_interrupt : read failed, "
-+                                     "errno = %d\n", -err);
-+                              printk("fd %d is losing SIGWINCH support\n", 
-+                                     winch->tty_fd);
-+                              return;
-+                      }
-+                      goto out;
-+              }
-+      }
-+      tty = winch->line->tty;
-+      if(tty != NULL){
-+              chan_window_size(&winch->line->chan_list, 
-+                               &tty->winsize.ws_row, 
-+                               &tty->winsize.ws_col);
-+              kill_pg(tty->pgrp, SIGWINCH, 1);
-+      }
-+ out:
-+      if(winch->fd != -1)
-+              reactivate_fd(winch->fd, WINCH_IRQ);
-+}
-+
-+DECLARE_MUTEX(winch_handler_sem);
-+LIST_HEAD(winch_handlers);
-+
-+void register_winch_irq(int fd, int tty_fd, int pid, void *line)
-+{
-+      struct winch *winch;
-+
-+      down(&winch_handler_sem);
-+      winch = kmalloc(sizeof(*winch), GFP_KERNEL);
-+      if(winch == NULL){
-+              printk("register_winch_irq - kmalloc failed\n");
-+              goto out;
-+      }
-+      *winch = ((struct winch) { .list        = LIST_HEAD_INIT(winch->list),
-+                                 .fd          = fd,
-+                                 .tty_fd      = tty_fd,
-+                                 .pid         = pid,
-+                                 .line        = line });
-+      list_add(&winch->list, &winch_handlers);
-+      if(um_request_irq(WINCH_IRQ, fd, IRQ_READ, winch_interrupt, 
-+                        SA_INTERRUPT | SA_SHIRQ | SA_SAMPLE_RANDOM, 
-+                        "winch", winch) < 0)
-+              printk("register_winch_irq - failed to register IRQ\n");
-+ out:
-+      up(&winch_handler_sem);
-+}
-+
-+static void winch_cleanup(void)
-+{
-+      struct list_head *ele;
-+      struct winch *winch;
-+
-+      list_for_each(ele, &winch_handlers){
-+              winch = list_entry(ele, struct winch, list);
-+              if(winch->fd != -1){
-+                      deactivate_fd(winch->fd, WINCH_IRQ);
-+                      close(winch->fd);
-+              }
-+              if(winch->pid != -1) 
-+                      os_kill_process(winch->pid, 1);
-+      }
-+}
-+
-+__uml_exitcall(winch_cleanup);
-+
-+char *add_xterm_umid(char *base)
-+{
-+      char *umid, *title;
-+      int len;
-+
-+      umid = get_umid(1);
-+      if(umid == NULL) return(base);
-+      
-+      len = strlen(base) + strlen(" ()") + strlen(umid) + 1;
-+      title = kmalloc(len, GFP_KERNEL);
-+      if(title == NULL){
-+              printk("Failed to allocate buffer for xterm title\n");
-+              return(base);
-+      }
-+
-+      strncpy(title, base, len);
-+      len -= strlen(title);
-+      snprintf(&title[strlen(title)], len, " (%s)", umid);
-+      return(title);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/Makefile um/arch/um/drivers/Makefile
---- orig/arch/um/drivers/Makefile      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/Makefile        2003-06-05 13:48:51.000000000 -0400
-@@ -0,0 +1,94 @@
-+# 
-+# Copyright (C) 2000, 2002 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+O_TARGET := built-in.o 
-+
-+CHAN_OBJS := chan_kern.o chan_user.o line.o 
-+
-+list-multi := slip.o slirp.o daemon.o mcast.o mconsole.o net.o ubd.o \
-+      hostaudio.o pcap.o port.o harddog.o
-+
-+slip-objs := slip_kern.o slip_user.o
-+slirp-objs := slirp_kern.o slirp_user.o
-+daemon-objs := daemon_kern.o daemon_user.o
-+mcast-objs := mcast_kern.o mcast_user.o
-+pcap-objs := pcap_kern.o pcap_user.o -lpcap -L/usr/lib
-+net-objs := net_kern.o net_user.o
-+mconsole-objs := mconsole_kern.o mconsole_user.o
-+hostaudio-objs := hostaudio_kern.o hostaudio_user.o
-+ubd-objs := ubd_kern.o ubd_user.o cow_user.o
-+port-objs := port_kern.o port_user.o
-+harddog-objs := harddog_kern.o harddog_user.o
-+
-+export-objs := mconsole_kern.o
-+
-+obj-y = 
-+obj-$(CONFIG_SSL) += ssl.o 
-+obj-$(CONFIG_UML_NET_SLIP) += slip.o
-+obj-$(CONFIG_UML_NET_SLIRP) += slirp.o
-+obj-$(CONFIG_UML_NET_DAEMON) += daemon.o 
-+obj-$(CONFIG_UML_NET_MCAST) += mcast.o 
-+obj-$(CONFIG_UML_NET_PCAP) += pcap.o 
-+obj-$(CONFIG_UML_NET) += net.o 
-+obj-$(CONFIG_MCONSOLE) += mconsole.o
-+obj-$(CONFIG_MMAPPER) += mmapper_kern.o 
-+obj-$(CONFIG_BLK_DEV_UBD) += ubd.o 
-+obj-$(CONFIG_HOSTAUDIO) += hostaudio.o
-+obj-$(CONFIG_FD_CHAN) += fd.o 
-+obj-$(CONFIG_NULL_CHAN) += null.o 
-+obj-$(CONFIG_PORT_CHAN) += port.o
-+obj-$(CONFIG_PTY_CHAN) += pty.o
-+obj-$(CONFIG_TTY_CHAN) += tty.o 
-+obj-$(CONFIG_XTERM_CHAN) += xterm.o xterm_kern.o
-+obj-$(CONFIG_UML_WATCHDOG) += harddog.o
-+
-+CFLAGS_pcap_user.o = -I/usr/include/pcap
-+
-+obj-y += stdio_console.o $(CHAN_OBJS)
-+
-+USER_SINGLE_OBJS = $(foreach f,$(patsubst %.o,%,$(obj-y) $(obj-m)),$($(f)-objs))
-+
-+USER_OBJS = $(filter %_user.o,$(obj-y) $(obj-m) $(USER_SINGLE_OBJS)) fd.o \
-+      null.o pty.o tty.o xterm.o
-+
-+include $(TOPDIR)/Rules.make
-+
-+$(USER_OBJS) : %.o: %.c
-+      $(CC) $(CFLAGS_$@) $(USER_CFLAGS) -c -o $@ $<
-+
-+clean:
-+
-+modules:
-+
-+fastdep:
-+
-+dep:
-+
-+archmrproper:
-+
-+daemon.o : $(daemon-objs)
-+
-+slip.o : $(slip-objs)
-+
-+slirp.o : $(slirp-objs)
-+
-+mcast.o : $(mcast-objs)
-+
-+pcap.o : $(pcap-objs)
-+
-+mconsole.o : $(mconsole-objs)
-+
-+net.o : $(net-objs)
-+
-+hostaudio.o : $(hostaudio-objs)
-+
-+ubd.o : $(ubd-objs)
-+
-+port.o : $(port-objs)
-+
-+harddog.o : $(harddog-objs)
-+
-+$(list-multi) : # This doesn't work, but should : '%.o : $(%-objs)'
-+      $(LD) $(LD_RFLAG) -r -o $@ $($(patsubst %.o,%,$@)-objs)
-diff -Naur -X ../exclude-files orig/arch/um/drivers/mcast.h um/arch/um/drivers/mcast.h
---- orig/arch/um/drivers/mcast.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/mcast.h 2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,30 @@
-+/* 
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "net_user.h"
-+
-+struct mcast_data {
-+      char *addr;
-+      unsigned short port;
-+      void *mcast_addr;
-+      int ttl;
-+      void *dev;
-+};
-+
-+extern struct net_user_info mcast_user_info;
-+
-+extern int mcast_user_write(int fd, void *buf, int len, 
-+                          struct mcast_data *pri);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/mcast_kern.c um/arch/um/drivers/mcast_kern.c
---- orig/arch/um/drivers/mcast_kern.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/mcast_kern.c    2002-12-15 20:58:55.000000000 -0500
-@@ -0,0 +1,145 @@
-+/*
-+ * user-mode-linux networking multicast transport
-+ * Copyright (C) 2001 by Harald Welte <laforge@gnumonks.org>
-+ *
-+ * based on the existing uml-networking code, which is
-+ * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) and 
-+ * James Leu (jleu@mindspring.net).
-+ * Copyright (C) 2001 by various other people who didn't put their name here.
-+ *
-+ * Licensed under the GPL.
-+ */
-+
-+#include "linux/kernel.h"
-+#include "linux/init.h"
-+#include "linux/netdevice.h"
-+#include "linux/etherdevice.h"
-+#include "linux/in.h"
-+#include "linux/inet.h"
-+#include "net_kern.h"
-+#include "net_user.h"
-+#include "mcast.h"
-+
-+struct mcast_init {
-+      char *addr;
-+      int port;
-+      int ttl;
-+};
-+
-+void mcast_init(struct net_device *dev, void *data)
-+{
-+      struct uml_net_private *pri;
-+      struct mcast_data *dpri;
-+      struct mcast_init *init = data;
-+
-+      init_etherdev(dev, 0);
-+      pri = dev->priv;
-+      dpri = (struct mcast_data *) pri->user;
-+      *dpri = ((struct mcast_data)
-+              { .addr         = init->addr,
-+                .port         = init->port,
-+                .ttl          = init->ttl,
-+                .mcast_addr   = NULL,
-+                .dev          = dev });
-+      printk("mcast backend ");
-+      printk("multicast adddress: %s:%u, TTL:%u ",
-+             dpri->addr, dpri->port, dpri->ttl);
-+
-+      printk("\n");
-+}
-+
-+static int mcast_read(int fd, struct sk_buff **skb, struct uml_net_private *lp)
-+{
-+      *skb = ether_adjust_skb(*skb, ETH_HEADER_OTHER);
-+      if(*skb == NULL) return(-ENOMEM);
-+      return(net_recvfrom(fd, (*skb)->mac.raw, 
-+                          (*skb)->dev->mtu + ETH_HEADER_OTHER));
-+}
-+
-+static int mcast_write(int fd, struct sk_buff **skb,
-+                      struct uml_net_private *lp)
-+{
-+      return mcast_user_write(fd, (*skb)->data, (*skb)->len, 
-+                               (struct mcast_data *) &lp->user);
-+}
-+
-+static struct net_kern_info mcast_kern_info = {
-+      .init                   = mcast_init,
-+      .protocol               = eth_protocol,
-+      .read                   = mcast_read,
-+      .write                  = mcast_write,
-+};
-+
-+int mcast_setup(char *str, char **mac_out, void *data)
-+{
-+      struct mcast_init *init = data;
-+      char *port_str = NULL, *ttl_str = NULL, *remain;
-+      char *last;
-+      int n;
-+
-+      *init = ((struct mcast_init)
-+              { .addr         = "239.192.168.1",
-+                .port         = 1102,
-+                .ttl          = 1 });
-+
-+      remain = split_if_spec(str, mac_out, &init->addr, &port_str, &ttl_str,
-+                             NULL);
-+      if(remain != NULL){
-+              printk(KERN_ERR "mcast_setup - Extra garbage on "
-+                     "specification : '%s'\n", remain);
-+              return(0);
-+      }
-+      
-+      if(port_str != NULL){
-+              n = simple_strtoul(port_str, &last, 10);
-+              if((*last != '\0') || (last == port_str)){
-+                      printk(KERN_ERR "mcast_setup - Bad port : '%s'\n", 
-+                             port_str);
-+                      return(0);
-+              }
-+              init->port = htons(n);
-+      }
-+
-+      if(ttl_str != NULL){
-+              init->ttl = simple_strtoul(ttl_str, &last, 10);
-+              if((*last != '\0') || (last == ttl_str)){
-+                      printk(KERN_ERR "mcast_setup - Bad ttl : '%s'\n", 
-+                             ttl_str);
-+                      return(0);
-+              }
-+      }
-+
-+      printk(KERN_INFO "Configured mcast device: %s:%u-%u\n", init->addr,
-+             init->port, init->ttl);
-+
-+      return(1);
-+}
-+
-+static struct transport mcast_transport = {
-+      .list           = LIST_HEAD_INIT(mcast_transport.list),
-+      .name           = "mcast",
-+      .setup          = mcast_setup,
-+      .user           = &mcast_user_info,
-+      .kern           = &mcast_kern_info,
-+      .private_size   = sizeof(struct mcast_data),
-+      .setup_size     = sizeof(struct mcast_init),
-+};
-+
-+static int register_mcast(void)
-+{
-+      register_transport(&mcast_transport);
-+      return(1);
-+}
-+
-+__initcall(register_mcast);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/mcast_user.c um/arch/um/drivers/mcast_user.c
---- orig/arch/um/drivers/mcast_user.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/mcast_user.c    2002-12-15 21:19:16.000000000 -0500
-@@ -0,0 +1,175 @@
-+/*
-+ * user-mode-linux networking multicast transport
-+ * Copyright (C) 2001 by Harald Welte <laforge@gnumonks.org>
-+ *
-+ * based on the existing uml-networking code, which is
-+ * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) and 
-+ * James Leu (jleu@mindspring.net).
-+ * Copyright (C) 2001 by various other people who didn't put their name here.
-+ *
-+ * Licensed under the GPL.
-+ *
-+ */
-+
-+#include <errno.h>
-+#include <unistd.h>
-+#include <linux/inet.h>
-+#include <sys/socket.h>
-+#include <sys/un.h>
-+#include <sys/time.h>
-+#include <netinet/in.h>
-+#include "net_user.h"
-+#include "mcast.h"
-+#include "kern_util.h"
-+#include "user_util.h"
-+#include "user.h"
-+
-+#define MAX_PACKET (ETH_MAX_PACKET + ETH_HEADER_OTHER)
-+
-+static struct sockaddr_in *new_addr(char *addr, unsigned short port)
-+{
-+      struct sockaddr_in *sin;
-+
-+      sin = um_kmalloc(sizeof(struct sockaddr_in));
-+      if(sin == NULL){
-+              printk("new_addr: allocation of sockaddr_in failed\n");
-+              return(NULL);
-+      }
-+      sin->sin_family = AF_INET;
-+      sin->sin_addr.s_addr = in_aton(addr);
-+      sin->sin_port = port;
-+      return(sin);
-+}
-+
-+static void mcast_user_init(void *data, void *dev)
-+{
-+      struct mcast_data *pri = data;
-+
-+      pri->mcast_addr = new_addr(pri->addr, pri->port);
-+      pri->dev = dev;
-+}
-+
-+static int mcast_open(void *data)
-+{
-+      struct mcast_data *pri = data;
-+      struct sockaddr_in *sin = pri->mcast_addr;
-+      struct ip_mreq mreq;
-+      int fd, yes = 1;
-+
-+
-+      if ((sin->sin_addr.s_addr == 0) || (sin->sin_port == 0)) {
-+              fd = -EINVAL;
-+              goto out;
-+      }
-+
-+      if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){
-+              printk("mcast_open : data socket failed, errno = %d\n", 
-+                     errno);
-+              fd = -ENOMEM;
-+              goto out;
-+      }
-+
-+      if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0) {
-+              printk("mcast_open: SO_REUSEADDR failed, errno = %d\n",
-+                      errno);
-+              close(fd);
-+              fd = -EINVAL;
-+              goto out;
-+      }
-+
-+      /* set ttl according to config */
-+      if (setsockopt(fd, SOL_IP, IP_MULTICAST_TTL, &pri->ttl,
-+                     sizeof(pri->ttl)) < 0) {
-+              printk("mcast_open: IP_MULTICAST_TTL failed, error = %d\n",
-+                      errno);
-+              close(fd);
-+              fd = -EINVAL;
-+              goto out;
-+      }
-+
-+      /* set LOOP, so data does get fed back to local sockets */
-+      if (setsockopt(fd, SOL_IP, IP_MULTICAST_LOOP, &yes, sizeof(yes)) < 0) {
-+              printk("mcast_open: IP_MULTICAST_LOOP failed, error = %d\n",
-+                      errno);
-+              close(fd);
-+              fd = -EINVAL;
-+              goto out;
-+      }
-+
-+      /* bind socket to mcast address */
-+      if (bind(fd, (struct sockaddr *) sin, sizeof(*sin)) < 0) {
-+              printk("mcast_open : data bind failed, errno = %d\n", errno);
-+              close(fd);
-+              fd = -EINVAL;
-+              goto out;
-+      }               
-+      
-+      /* subscribe to the multicast group */
-+      mreq.imr_multiaddr.s_addr = sin->sin_addr.s_addr;
-+      mreq.imr_interface.s_addr = 0;
-+      if (setsockopt(fd, SOL_IP, IP_ADD_MEMBERSHIP, 
-+                     &mreq, sizeof(mreq)) < 0) {
-+              printk("mcast_open: IP_ADD_MEMBERSHIP failed, error = %d\n",
-+                      errno);
-+              printk("There appears not to be a multicast-capable network "
-+                     "interface on the host.\n");
-+              printk("eth0 should be configured in order to use the "
-+                     "multicast transport.\n");
-+              close(fd);
-+              fd = -EINVAL;
-+      }
-+
-+ out:
-+      return(fd);
-+}
-+
-+static void mcast_close(int fd, void *data)
-+{
-+      struct ip_mreq mreq;
-+      struct mcast_data *pri = data;
-+      struct sockaddr_in *sin = pri->mcast_addr;
-+
-+      mreq.imr_multiaddr.s_addr = sin->sin_addr.s_addr;
-+      mreq.imr_interface.s_addr = 0;
-+      if (setsockopt(fd, SOL_IP, IP_DROP_MEMBERSHIP,
-+                     &mreq, sizeof(mreq)) < 0) {
-+              printk("mcast_open: IP_DROP_MEMBERSHIP failed, error = %d\n",
-+                      errno);
-+      }
-+
-+      close(fd);
-+}
-+
-+int mcast_user_write(int fd, void *buf, int len, struct mcast_data *pri)
-+{
-+      struct sockaddr_in *data_addr = pri->mcast_addr;
-+
-+      return(net_sendto(fd, buf, len, data_addr, sizeof(*data_addr)));
-+}
-+
-+static int mcast_set_mtu(int mtu, void *data)
-+{
-+      return(mtu);
-+}
-+
-+struct net_user_info mcast_user_info = {
-+      .init           = mcast_user_init,
-+      .open           = mcast_open,
-+      .close          = mcast_close,
-+      .remove         = NULL,
-+      .set_mtu        = mcast_set_mtu,
-+      .add_address    = NULL,
-+      .delete_address = NULL,
-+      .max_packet     = MAX_PACKET - ETH_HEADER_OTHER
-+};
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/mconsole_kern.c um/arch/um/drivers/mconsole_kern.c
---- orig/arch/um/drivers/mconsole_kern.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/mconsole_kern.c 2003-03-28 21:58:11.000000000 -0500
-@@ -0,0 +1,453 @@
-+/*
-+ * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org)
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/kernel.h"
-+#include "linux/slab.h"
-+#include "linux/init.h"
-+#include "linux/notifier.h"
-+#include "linux/reboot.h"
-+#include "linux/utsname.h"
-+#include "linux/ctype.h"
-+#include "linux/interrupt.h"
-+#include "linux/sysrq.h"
-+#include "linux/tqueue.h"
-+#include "linux/module.h"
-+#include "linux/proc_fs.h"
-+#include "asm/irq.h"
-+#include "asm/uaccess.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "kern.h"
-+#include "mconsole.h"
-+#include "mconsole_kern.h"
-+#include "irq_user.h"
-+#include "init.h"
-+#include "os.h"
-+#include "umid.h"
-+
-+static int do_unlink_socket(struct notifier_block *notifier, 
-+                          unsigned long what, void *data)
-+{
-+      return(mconsole_unlink_socket());
-+}
-+
-+
-+static struct notifier_block reboot_notifier = {
-+      .notifier_call          = do_unlink_socket,
-+      .priority               = 0,
-+};
-+
-+/* Safe without explicit locking for now.  Tasklets provide their own 
-+ * locking, and the interrupt handler is safe because it can't interrupt
-+ * itself and it can only happen on CPU 0.
-+ */
-+
-+LIST_HEAD(mc_requests);
-+
-+void mc_task_proc(void *unused)
-+{
-+      struct mconsole_entry *req;
-+      unsigned long flags;
-+      int done;
-+
-+      do {
-+              save_flags(flags);
-+              req = list_entry(mc_requests.next, struct mconsole_entry, 
-+                               list);
-+              list_del(&req->list);
-+              done = list_empty(&mc_requests);
-+              restore_flags(flags);
-+              req->request.cmd->handler(&req->request);
-+              kfree(req);
-+      } while(!done);
-+}
-+
-+struct tq_struct mconsole_task = {
-+      .routine        = mc_task_proc,
-+      .data           = NULL
-+};
-+
-+void mconsole_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+      int fd;
-+      struct mconsole_entry *new;
-+      struct mc_request req;
-+
-+      fd = (int) dev_id;
-+      while (mconsole_get_request(fd, &req)){
-+              if(req.cmd->as_interrupt) (*req.cmd->handler)(&req);
-+              else {
-+                      new = kmalloc(sizeof(req), GFP_ATOMIC);
-+                      if(new == NULL)
-+                              mconsole_reply(&req, "Out of memory", 1, 0);
-+                      else {
-+                              new->request = req;
-+                              list_add(&new->list, &mc_requests);
-+                      }
-+              }
-+      }
-+      if(!list_empty(&mc_requests)) schedule_task(&mconsole_task);
-+      reactivate_fd(fd, MCONSOLE_IRQ);
-+}
-+
-+void mconsole_version(struct mc_request *req)
-+{
-+      char version[256];
-+
-+      sprintf(version, "%s %s %s %s %s", system_utsname.sysname, 
-+              system_utsname.nodename, system_utsname.release, 
-+              system_utsname.version, system_utsname.machine);
-+      mconsole_reply(req, version, 0, 0);
-+}
-+
-+#define UML_MCONSOLE_HELPTEXT \
-+"Commands: \n\
-+    version - Get kernel version \n\
-+    help - Print this message \n\
-+    halt - Halt UML \n\
-+    reboot - Reboot UML \n\
-+    config <dev>=<config> - Add a new device to UML;  \n\
-+      same syntax as command line \n\
-+    config <dev> - Query the configuration of a device \n\
-+    remove <dev> - Remove a device from UML \n\
-+    sysrq <letter> - Performs the SysRq action controlled by the letter \n\
-+    cad - invoke the Ctl-Alt-Del handler \n\
-+    stop - pause the UML; it will do nothing until it receives a 'go' \n\
-+    go - continue the UML after a 'stop' \n\
-+"
-+
-+void mconsole_help(struct mc_request *req)
-+{
-+      mconsole_reply(req, UML_MCONSOLE_HELPTEXT, 0, 0);
-+}
-+
-+void mconsole_halt(struct mc_request *req)
-+{
-+      mconsole_reply(req, "", 0, 0);
-+      machine_halt();
-+}
-+
-+void mconsole_reboot(struct mc_request *req)
-+{
-+      mconsole_reply(req, "", 0, 0);
-+      machine_restart(NULL);
-+}
-+
-+extern void ctrl_alt_del(void);
-+
-+void mconsole_cad(struct mc_request *req)
-+{
-+      mconsole_reply(req, "", 0, 0);
-+      ctrl_alt_del();
-+}
-+
-+void mconsole_go(struct mc_request *req)
-+{
-+      mconsole_reply(req, "Not stopped", 1, 0);
-+}
-+
-+void mconsole_stop(struct mc_request *req)
-+{
-+      deactivate_fd(req->originating_fd, MCONSOLE_IRQ);
-+      os_set_fd_block(req->originating_fd, 1);
-+      mconsole_reply(req, "", 0, 0);
-+      while(mconsole_get_request(req->originating_fd, req)){
-+              if(req->cmd->handler == mconsole_go) break;
-+              (*req->cmd->handler)(req);
-+      }
-+      os_set_fd_block(req->originating_fd, 0);
-+      reactivate_fd(req->originating_fd, MCONSOLE_IRQ);
-+      mconsole_reply(req, "", 0, 0);
-+}
-+
-+/* This list is populated by __initcall routines. */
-+
-+LIST_HEAD(mconsole_devices);
-+
-+void mconsole_register_dev(struct mc_device *new)
-+{
-+      list_add(&new->list, &mconsole_devices);
-+}
-+
-+static struct mc_device *mconsole_find_dev(char *name)
-+{
-+      struct list_head *ele;
-+      struct mc_device *dev;
-+
-+      list_for_each(ele, &mconsole_devices){
-+              dev = list_entry(ele, struct mc_device, list);
-+              if(!strncmp(name, dev->name, strlen(dev->name)))
-+                      return(dev);
-+      }
-+      return(NULL);
-+}
-+
-+#define CONFIG_BUF_SIZE 64
-+
-+static void mconsole_get_config(int (*get_config)(char *, char *, int, 
-+                                                char **),
-+                              struct mc_request *req, char *name)
-+{
-+      char default_buf[CONFIG_BUF_SIZE], *error, *buf;
-+      int n, size;
-+
-+      if(get_config == NULL){
-+              mconsole_reply(req, "No get_config routine defined", 1, 0);
-+              return;
-+      }
-+
-+      error = NULL;
-+      size = sizeof(default_buf)/sizeof(default_buf[0]);
-+      buf = default_buf;
-+
-+      while(1){
-+              n = (*get_config)(name, buf, size, &error);
-+              if(error != NULL){
-+                      mconsole_reply(req, error, 1, 0);
-+                      goto out;
-+              }
-+
-+              if(n <= size){
-+                      mconsole_reply(req, buf, 0, 0);
-+                      goto out;
-+              }
-+
-+              if(buf != default_buf)
-+                      kfree(buf);
-+
-+              size = n;
-+              buf = kmalloc(size, GFP_KERNEL);
-+              if(buf == NULL){
-+                      mconsole_reply(req, "Failed to allocate buffer", 1, 0);
-+                      return;
-+              }
-+      }
-+ out:
-+      if(buf != default_buf)
-+              kfree(buf);
-+      
-+}
-+
-+void mconsole_config(struct mc_request *req)
-+{
-+      struct mc_device *dev;
-+      char *ptr = req->request.data, *name;
-+      int err;
-+
-+      ptr += strlen("config");
-+      while(isspace(*ptr)) ptr++;
-+      dev = mconsole_find_dev(ptr);
-+      if(dev == NULL){
-+              mconsole_reply(req, "Bad configuration option", 1, 0);
-+              return;
-+      }
-+
-+      name = &ptr[strlen(dev->name)];
-+      ptr = name;
-+      while((*ptr != '=') && (*ptr != '\0'))
-+              ptr++;
-+
-+      if(*ptr == '='){
-+              err = (*dev->config)(name);
-+              mconsole_reply(req, "", err, 0);
-+      }
-+      else mconsole_get_config(dev->get_config, req, name);
-+}
-+
-+void mconsole_remove(struct mc_request *req)
-+{
-+      struct mc_device *dev;  
-+      char *ptr = req->request.data;
-+      int err;
-+
-+      ptr += strlen("remove");
-+      while(isspace(*ptr)) ptr++;
-+      dev = mconsole_find_dev(ptr);
-+      if(dev == NULL){
-+              mconsole_reply(req, "Bad remove option", 1, 0);
-+              return;
-+      }
-+      err = (*dev->remove)(&ptr[strlen(dev->name)]);
-+      mconsole_reply(req, "", err, 0);
-+}
-+
-+#ifdef CONFIG_MAGIC_SYSRQ
-+void mconsole_sysrq(struct mc_request *req)
-+{
-+      char *ptr = req->request.data;
-+
-+      ptr += strlen("sysrq");
-+      while(isspace(*ptr)) ptr++;
-+
-+      handle_sysrq(*ptr, &current->thread.regs, NULL, NULL);
-+      mconsole_reply(req, "", 0, 0);
-+}
-+#else
-+void mconsole_sysrq(struct mc_request *req)
-+{
-+      mconsole_reply(req, "Sysrq not compiled in", 1, 0);
-+}
-+#endif
-+
-+/* Changed by mconsole_setup, which is __setup, and called before SMP is
-+ * active.
-+ */
-+static char *notify_socket = NULL; 
-+
-+int mconsole_init(void)
-+{
-+      int err, sock;
-+      char file[256];
-+
-+      if(umid_file_name("mconsole", file, sizeof(file))) return(-1);
-+      snprintf(mconsole_socket_name, sizeof(file), "%s", file);
-+
-+      sock = create_unix_socket(file, sizeof(file));
-+      if (sock < 0){
-+              printk("Failed to initialize management console\n");
-+              return(1);
-+      }
-+
-+      register_reboot_notifier(&reboot_notifier);
-+
-+      err = um_request_irq(MCONSOLE_IRQ, sock, IRQ_READ, mconsole_interrupt,
-+                           SA_INTERRUPT | SA_SHIRQ | SA_SAMPLE_RANDOM,
-+                           "mconsole", (void *)sock);
-+      if (err){
-+              printk("Failed to get IRQ for management console\n");
-+              return(1);
-+      }
-+
-+      if(notify_socket != NULL){
-+              notify_socket = uml_strdup(notify_socket);
-+              if(notify_socket != NULL)
-+                      mconsole_notify(notify_socket, MCONSOLE_SOCKET,
-+                                      mconsole_socket_name, 
-+                                      strlen(mconsole_socket_name) + 1);
-+              else printk(KERN_ERR "mconsole_setup failed to strdup "
-+                          "string\n");
-+      }
-+
-+      printk("mconsole (version %d) initialized on %s\n", 
-+             MCONSOLE_VERSION, mconsole_socket_name);
-+      return(0);
-+}
-+
-+__initcall(mconsole_init);
-+
-+static int write_proc_mconsole(struct file *file, const char *buffer,
-+                             unsigned long count, void *data)
-+{
-+      char *buf;
-+
-+      buf = kmalloc(count + 1, GFP_KERNEL);
-+      if(buf == NULL) 
-+              return(-ENOMEM);
-+
-+      if(copy_from_user(buf, buffer, count))
-+              return(-EFAULT);
-+      buf[count] = '\0';
-+
-+      mconsole_notify(notify_socket, MCONSOLE_USER_NOTIFY, buf, count);
-+      return(count);
-+}
-+
-+static int create_proc_mconsole(void)
-+{
-+      struct proc_dir_entry *ent;
-+
-+      if(notify_socket == NULL) return(0);
-+
-+      ent = create_proc_entry("mconsole", S_IFREG | 0200, NULL);
-+      if(ent == NULL){
-+              printk("create_proc_mconsole : create_proc_entry failed\n");
-+              return(0);
-+      }
-+
-+      ent->read_proc = NULL;
-+      ent->write_proc = write_proc_mconsole;
-+      return(0);
-+}
-+
-+static spinlock_t notify_spinlock = SPIN_LOCK_UNLOCKED;
-+
-+void lock_notify(void)
-+{
-+      spin_lock(&notify_spinlock);
-+}
-+
-+void unlock_notify(void)
-+{
-+      spin_unlock(&notify_spinlock);
-+}
-+
-+__initcall(create_proc_mconsole);
-+
-+#define NOTIFY "=notify:"
-+
-+static int mconsole_setup(char *str)
-+{
-+      if(!strncmp(str, NOTIFY, strlen(NOTIFY))){
-+              str += strlen(NOTIFY);
-+              notify_socket = str;
-+      }
-+      else printk(KERN_ERR "mconsole_setup : Unknown option - '%s'\n", str);
-+      return(1);
-+}
-+
-+__setup("mconsole", mconsole_setup);
-+
-+__uml_help(mconsole_setup,
-+"mconsole=notify:<socket>\n"
-+"    Requests that the mconsole driver send a message to the named Unix\n"
-+"    socket containing the name of the mconsole socket.  This also serves\n"
-+"    to notify outside processes when UML has booted far enough to respond\n"
-+"    to mconsole requests.\n\n"
-+);
-+
-+static int notify_panic(struct notifier_block *self, unsigned long unused1,
-+                      void *ptr)
-+{
-+      char *message = ptr;
-+
-+      if(notify_socket == NULL) return(0);
-+
-+      mconsole_notify(notify_socket, MCONSOLE_PANIC, message, 
-+                      strlen(message) + 1);
-+      return(0);
-+}
-+
-+static struct notifier_block panic_exit_notifier = {
-+      .notifier_call          = notify_panic,
-+      .next                   = NULL,
-+      .priority               = 1
-+};
-+
-+static int add_notifier(void)
-+{
-+      notifier_chain_register(&panic_notifier_list, &panic_exit_notifier);
-+      return(0);
-+}
-+
-+__initcall(add_notifier);
-+
-+char *mconsole_notify_socket(void)
-+{
-+      return(notify_socket);
-+}
-+
-+EXPORT_SYMBOL(mconsole_notify_socket);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/mconsole_user.c um/arch/um/drivers/mconsole_user.c
---- orig/arch/um/drivers/mconsole_user.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/mconsole_user.c 2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,212 @@
-+/*
-+ * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org)
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <errno.h>
-+#include <signal.h>
-+#include <sys/socket.h>
-+#include <sys/types.h>
-+#include <sys/uio.h>
-+#include <sys/un.h>
-+#include <unistd.h>
-+#include "user.h"
-+#include "mconsole.h"
-+#include "umid.h"
-+
-+static struct mconsole_command commands[] = {
-+      { "version", mconsole_version, 1 },
-+      { "halt", mconsole_halt, 0 },
-+      { "reboot", mconsole_reboot, 0 },
-+      { "config", mconsole_config, 0 },
-+      { "remove", mconsole_remove, 0 },
-+      { "sysrq", mconsole_sysrq, 1 },
-+      { "help", mconsole_help, 1 },
-+      { "cad", mconsole_cad, 1 },
-+      { "stop", mconsole_stop, 0 },
-+      { "go", mconsole_go, 1 },
-+};
-+
-+/* Initialized in mconsole_init, which is an initcall */
-+char mconsole_socket_name[256];
-+
-+int mconsole_reply_v0(struct mc_request *req, char *reply)
-+{
-+        struct iovec iov;
-+        struct msghdr msg;
-+
-+        iov.iov_base = reply;
-+        iov.iov_len = strlen(reply);
-+
-+        msg.msg_name = &(req->origin);
-+        msg.msg_namelen = req->originlen;
-+        msg.msg_iov = &iov;
-+        msg.msg_iovlen = 1;
-+        msg.msg_control = NULL;
-+        msg.msg_controllen = 0;
-+        msg.msg_flags = 0;
-+
-+        return sendmsg(req->originating_fd, &msg, 0);
-+}
-+
-+static struct mconsole_command *mconsole_parse(struct mc_request *req)
-+{
-+      struct mconsole_command *cmd;
-+      int i;
-+
-+      for(i=0;i<sizeof(commands)/sizeof(commands[0]);i++){
-+              cmd = &commands[i];
-+              if(!strncmp(req->request.data, cmd->command, 
-+                          strlen(cmd->command))){
-+                      return(cmd);
-+              }
-+      }
-+      return(NULL);
-+}
-+
-+#define MIN(a,b) ((a)<(b) ? (a):(b))
-+
-+#define STRINGX(x) #x
-+#define STRING(x) STRINGX(x)
-+
-+int mconsole_get_request(int fd, struct mc_request *req)
-+{
-+      int len;
-+
-+      req->originlen = sizeof(req->origin);
-+      req->len = recvfrom(fd, &req->request, sizeof(req->request), 0,
-+                          (struct sockaddr *) req->origin, &req->originlen);
-+      if (req->len < 0)
-+              return 0;
-+
-+      req->originating_fd = fd;
-+
-+      if(req->request.magic != MCONSOLE_MAGIC){
-+              /* Unversioned request */
-+              len = MIN(sizeof(req->request.data) - 1, 
-+                        strlen((char *) &req->request));
-+              memmove(req->request.data, &req->request, len);
-+              req->request.data[len] = '\0';
-+
-+              req->request.magic = MCONSOLE_MAGIC;
-+              req->request.version = 0;
-+              req->request.len = len;
-+
-+              mconsole_reply_v0(req, "ERR Version 0 mconsole clients are "
-+                                "not supported by this driver");
-+              return(0);
-+      }
-+
-+      if(req->request.len >= MCONSOLE_MAX_DATA){
-+              mconsole_reply(req, "Request too large", 1, 0);
-+              return(0);
-+      }
-+      if(req->request.version != MCONSOLE_VERSION){
-+              mconsole_reply(req, "This driver only supports version " 
-+                               STRING(MCONSOLE_VERSION) " clients", 1, 0);
-+      }
-+      
-+      req->request.data[req->request.len] = '\0';
-+      req->cmd = mconsole_parse(req);
-+      if(req->cmd == NULL){
-+              mconsole_reply(req, "Unknown command", 1, 0);
-+              return(0);
-+      }
-+
-+      return(1);
-+}
-+
-+int mconsole_reply(struct mc_request *req, char *str, int err, int more)
-+{
-+      struct mconsole_reply reply;
-+      int total, len, n;
-+
-+      total = strlen(str);
-+      do {
-+              reply.err = err;
-+
-+              /* err can only be true on the first packet */
-+              err = 0;
-+
-+              len = MIN(total, MCONSOLE_MAX_DATA - 1);
-+
-+              if(len == total) reply.more = more;
-+              else reply.more = 1;
-+
-+              memcpy(reply.data, str, len);
-+              reply.data[len] = '\0';
-+              total -= len;
-+              reply.len = len + 1;
-+
-+              len = sizeof(reply) + reply.len - sizeof(reply.data);
-+
-+              n = sendto(req->originating_fd, &reply, len, 0,
-+                         (struct sockaddr *) req->origin, req->originlen);
-+
-+              if(n < 0) return(-errno);
-+      } while(total > 0);
-+      return(0);
-+}
-+
-+int mconsole_unlink_socket(void)
-+{
-+      unlink(mconsole_socket_name);
-+      return 0;
-+}
-+
-+static int notify_sock = -1;
-+
-+int mconsole_notify(char *sock_name, int type, const void *data, int len)
-+{
-+      struct sockaddr_un target;
-+      struct mconsole_notify packet;
-+      int n, err = 0;
-+
-+      lock_notify();
-+      if(notify_sock < 0){
-+              notify_sock = socket(PF_UNIX, SOCK_DGRAM, 0);
-+              if(notify_sock < 0){
-+                      printk("mconsole_notify - socket failed, errno = %d\n",
-+                             errno);
-+                      err = -errno;
-+              }
-+      }
-+      unlock_notify();
-+      
-+      if(err)
-+              return(err);
-+
-+      target.sun_family = AF_UNIX;
-+      strcpy(target.sun_path, sock_name);
-+
-+      packet.magic = MCONSOLE_MAGIC;
-+      packet.version = MCONSOLE_VERSION;
-+      packet.type = type;
-+      len = (len > sizeof(packet.data)) ? sizeof(packet.data) : len;
-+      packet.len = len;
-+      memcpy(packet.data, data, len);
-+
-+      err = 0;
-+      len = sizeof(packet) + packet.len - sizeof(packet.data);
-+      n = sendto(notify_sock, &packet, len, 0, (struct sockaddr *) &target, 
-+                 sizeof(target));
-+      if(n < 0){
-+              printk("mconsole_notify - sendto failed, errno = %d\n", errno);
-+              err = -errno;
-+      }
-+      return(err);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/mmapper_kern.c um/arch/um/drivers/mmapper_kern.c
---- orig/arch/um/drivers/mmapper_kern.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/mmapper_kern.c  2002-12-15 21:03:08.000000000 -0500
-@@ -0,0 +1,148 @@
-+/*
-+ * arch/um/drivers/mmapper_kern.c
-+ *
-+ * BRIEF MODULE DESCRIPTION
-+ *
-+ * Copyright (C) 2000 RidgeRun, Inc.
-+ * Author: RidgeRun, Inc.
-+ *         Greg Lonnon glonnon@ridgerun.com or info@ridgerun.com
-+ *
-+ */
-+#include <linux/kdev_t.h>
-+#include <linux/time.h>
-+#include <linux/devfs_fs_kernel.h>
-+#include <linux/module.h>
-+#include <linux/mm.h> 
-+#include <linux/slab.h>
-+#include <linux/init.h> 
-+#include <asm/uaccess.h>
-+#include <asm/irq.h>
-+#include <asm/smplock.h>
-+#include <asm/pgtable.h>
-+#include "mem_user.h"
-+#include "user_util.h"
-+ 
-+/* These are set in mmapper_init, which is called at boot time */
-+static unsigned long mmapper_size;
-+static unsigned long p_buf = 0;
-+static char *v_buf = NULL;
-+
-+static ssize_t
-+mmapper_read(struct file *file, char *buf, size_t count, loff_t *ppos)
-+{
-+      if(*ppos > mmapper_size)
-+              return -EINVAL;
-+
-+      if(count + *ppos > mmapper_size)
-+              count = count + *ppos - mmapper_size;
-+
-+      if(count < 0)
-+              return -EINVAL;
-+ 
-+      copy_to_user(buf,&v_buf[*ppos],count);
-+      
-+      return count;
-+}
-+
-+static ssize_t
-+mmapper_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
-+{
-+      if(*ppos > mmapper_size)
-+              return -EINVAL;
-+
-+      if(count + *ppos > mmapper_size)
-+              count = count + *ppos - mmapper_size;
-+
-+      if(count < 0)
-+              return -EINVAL;
-+
-+      copy_from_user(&v_buf[*ppos],buf,count);
-+      
-+      return count;
-+}
-+
-+static int 
-+mmapper_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
-+       unsigned long arg)
-+{
-+      return(-ENOIOCTLCMD);
-+}
-+
-+static int 
-+mmapper_mmap(struct file *file, struct vm_area_struct * vma)
-+{
-+      int ret = -EINVAL;
-+      int size;
-+
-+      lock_kernel();
-+      if (vma->vm_pgoff != 0)
-+              goto out;
-+      
-+      size = vma->vm_end - vma->vm_start;
-+      if(size > mmapper_size) return(-EFAULT);
-+
-+      /* XXX A comment above remap_page_range says it should only be
-+       * called when the mm semaphore is held
-+       */
-+      if (remap_page_range(vma->vm_start, p_buf, size, vma->vm_page_prot))
-+              goto out;
-+      ret = 0;
-+out:
-+      unlock_kernel();
-+      return ret;
-+}
-+
-+static int
-+mmapper_open(struct inode *inode, struct file *file)
-+{
-+      return 0;
-+}
-+
-+static int 
-+mmapper_release(struct inode *inode, struct file *file)
-+{
-+      return 0;
-+}
-+
-+static struct file_operations mmapper_fops = {
-+      .owner          = THIS_MODULE,
-+      .read           = mmapper_read,
-+      .write          = mmapper_write,
-+      .ioctl          = mmapper_ioctl,
-+      .mmap           = mmapper_mmap,
-+      .open           = mmapper_open,
-+      .release        = mmapper_release,
-+};
-+
-+static int __init mmapper_init(void)
-+{
-+      printk(KERN_INFO "Mapper v0.1\n");
-+
-+      v_buf = (char *) find_iomem("mmapper", &mmapper_size);
-+      if(mmapper_size == 0) return(0);
-+
-+      p_buf = __pa(v_buf);
-+
-+      devfs_register (NULL, "mmapper", DEVFS_FL_DEFAULT, 
-+                      30, 0, S_IFCHR | S_IRUGO | S_IWUGO, 
-+                      &mmapper_fops, NULL); 
-+      devfs_mk_symlink(NULL, "mmapper0", DEVFS_FL_DEFAULT, "mmapper",
-+                       NULL, NULL);
-+      return(0);
-+}
-+
-+static void mmapper_exit(void)
-+{
-+}
-+
-+module_init(mmapper_init);
-+module_exit(mmapper_exit);
-+
-+MODULE_AUTHOR("Greg Lonnon <glonnon@ridgerun.com>");
-+MODULE_DESCRIPTION("DSPLinux simulator mmapper driver");
-+/*
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/net_kern.c um/arch/um/drivers/net_kern.c
---- orig/arch/um/drivers/net_kern.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/net_kern.c      2002-12-15 21:19:16.000000000 -0500
-@@ -0,0 +1,870 @@
-+/*
-+ * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) and 
-+ * James Leu (jleu@mindspring.net).
-+ * Copyright (C) 2001 by various other people who didn't put their name here.
-+ * Licensed under the GPL.
-+ */
-+
-+#include "linux/config.h"
-+#include "linux/kernel.h"
-+#include "linux/netdevice.h"
-+#include "linux/rtnetlink.h"
-+#include "linux/skbuff.h"
-+#include "linux/socket.h"
-+#include "linux/spinlock.h"
-+#include "linux/module.h"
-+#include "linux/init.h"
-+#include "linux/etherdevice.h"
-+#include "linux/list.h"
-+#include "linux/inetdevice.h"
-+#include "linux/ctype.h"
-+#include "linux/bootmem.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "net_kern.h"
-+#include "net_user.h"
-+#include "mconsole_kern.h"
-+#include "init.h"
-+#include "irq_user.h"
-+
-+static spinlock_t opened_lock = SPIN_LOCK_UNLOCKED;
-+LIST_HEAD(opened);
-+
-+static int uml_net_rx(struct net_device *dev)
-+{
-+      struct uml_net_private *lp = dev->priv;
-+      int pkt_len;
-+      struct sk_buff *skb;
-+
-+      /* If we can't allocate memory, try again next round. */
-+      if ((skb = dev_alloc_skb(dev->mtu)) == NULL) {
-+              lp->stats.rx_dropped++;
-+              return 0;
-+      }
-+
-+      skb->dev = dev;
-+      skb_put(skb, dev->mtu);
-+      skb->mac.raw = skb->data;
-+      pkt_len = (*lp->read)(lp->fd, &skb, lp);
-+
-+      if (pkt_len > 0) {
-+              skb_trim(skb, pkt_len);
-+              skb->protocol = (*lp->protocol)(skb);
-+              netif_rx(skb);
-+
-+              lp->stats.rx_bytes += skb->len;
-+              lp->stats.rx_packets++;
-+              return pkt_len;
-+      }
-+
-+      kfree_skb(skb);
-+      return pkt_len;
-+}
-+
-+void uml_net_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+      struct net_device *dev = dev_id;
-+      struct uml_net_private *lp = dev->priv;
-+      int err;
-+
-+      if(!netif_running(dev))
-+              return;
-+
-+      spin_lock(&lp->lock);
-+      while((err = uml_net_rx(dev)) > 0) ;
-+      if(err < 0) {
-+              printk(KERN_ERR 
-+                     "Device '%s' read returned %d, shutting it down\n", 
-+                     dev->name, err);
-+              dev_close(dev);
-+              goto out;
-+      }
-+      reactivate_fd(lp->fd, UM_ETH_IRQ);
-+
-+ out:
-+      spin_unlock(&lp->lock);
-+}
-+
-+static int uml_net_open(struct net_device *dev)
-+{
-+      struct uml_net_private *lp = dev->priv;
-+      char addr[sizeof("255.255.255.255\0")];
-+      int err;
-+
-+      spin_lock(&lp->lock);
-+
-+      if(lp->fd >= 0){
-+              err = -ENXIO;
-+              goto out;
-+      }
-+
-+      if(!lp->have_mac){
-+              dev_ip_addr(dev, addr, &lp->mac[2]);
-+              set_ether_mac(dev, lp->mac);
-+      }
-+
-+      lp->fd = (*lp->open)(&lp->user);
-+      if(lp->fd < 0){
-+              err = lp->fd;
-+              goto out;
-+      }
-+
-+      err = um_request_irq(dev->irq, lp->fd, IRQ_READ, uml_net_interrupt,
-+                           SA_INTERRUPT | SA_SHIRQ, dev->name, dev);
-+      if(err != 0){
-+              printk(KERN_ERR "uml_net_open: failed to get irq(%d)\n", err);
-+              if(lp->close != NULL) (*lp->close)(lp->fd, &lp->user);
-+              lp->fd = -1;
-+              err = -ENETUNREACH;
-+      }
-+
-+      lp->tl.data = (unsigned long) &lp->user;
-+      netif_start_queue(dev);
-+
-+      spin_lock(&opened_lock);
-+      list_add(&lp->list, &opened);
-+      spin_unlock(&opened_lock);
-+      MOD_INC_USE_COUNT;
-+ out:
-+      spin_unlock(&lp->lock);
-+      return(err);
-+}
-+
-+static int uml_net_close(struct net_device *dev)
-+{
-+      struct uml_net_private *lp = dev->priv;
-+      
-+      netif_stop_queue(dev);
-+      spin_lock(&lp->lock);
-+
-+      free_irq(dev->irq, dev);
-+      if(lp->close != NULL) (*lp->close)(lp->fd, &lp->user);
-+      lp->fd = -1;
-+      spin_lock(&opened_lock);
-+      list_del(&lp->list);
-+      spin_unlock(&opened_lock);
-+
-+      MOD_DEC_USE_COUNT;
-+      spin_unlock(&lp->lock);
-+      return 0;
-+}
-+
-+static int uml_net_start_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+      struct uml_net_private *lp = dev->priv;
-+      unsigned long flags;
-+      int len;
-+
-+      netif_stop_queue(dev);
-+
-+      spin_lock_irqsave(&lp->lock, flags);
-+
-+      len = (*lp->write)(lp->fd, &skb, lp);
-+
-+      if(len == skb->len) {
-+              lp->stats.tx_packets++;
-+              lp->stats.tx_bytes += skb->len;
-+              dev->trans_start = jiffies;
-+              netif_start_queue(dev);
-+
-+              /* this is normally done in the interrupt when tx finishes */
-+              netif_wake_queue(dev);
-+      } 
-+      else if(len == 0){
-+              netif_start_queue(dev);
-+              lp->stats.tx_dropped++;
-+      }
-+      else {
-+              netif_start_queue(dev);
-+              printk(KERN_ERR "uml_net_start_xmit: failed(%d)\n", len);
-+      }
-+
-+      spin_unlock_irqrestore(&lp->lock, flags);
-+
-+      dev_kfree_skb(skb);
-+
-+      return 0;
-+}
-+
-+static struct net_device_stats *uml_net_get_stats(struct net_device *dev)
-+{
-+      struct uml_net_private *lp = dev->priv;
-+      return &lp->stats;
-+}
-+
-+static void uml_net_set_multicast_list(struct net_device *dev)
-+{
-+      if (dev->flags & IFF_PROMISC) return;
-+      else if (dev->mc_count) dev->flags |= IFF_ALLMULTI;
-+      else dev->flags &= ~IFF_ALLMULTI;
-+}
-+
-+static void uml_net_tx_timeout(struct net_device *dev)
-+{
-+      dev->trans_start = jiffies;
-+      netif_wake_queue(dev);
-+}
-+
-+static int uml_net_set_mac(struct net_device *dev, void *addr)
-+{
-+      struct uml_net_private *lp = dev->priv;
-+      struct sockaddr *hwaddr = addr;
-+
-+      spin_lock(&lp->lock);
-+      memcpy(dev->dev_addr, hwaddr->sa_data, ETH_ALEN);
-+      spin_unlock(&lp->lock);
-+
-+      return(0);
-+}
-+
-+static int uml_net_change_mtu(struct net_device *dev, int new_mtu)
-+{
-+      struct uml_net_private *lp = dev->priv;
-+      int err = 0;
-+
-+      spin_lock(&lp->lock);
-+
-+      new_mtu = (*lp->set_mtu)(new_mtu, &lp->user);
-+      if(new_mtu < 0){
-+              err = new_mtu;
-+              goto out;
-+      }
-+
-+      dev->mtu = new_mtu;
-+
-+ out:
-+      spin_unlock(&lp->lock);
-+      return err;
-+}
-+
-+static int uml_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
-+{
-+      return(-EINVAL);
-+}
-+
-+void uml_net_user_timer_expire(unsigned long _conn)
-+{
-+#ifdef undef
-+      struct connection *conn = (struct connection *)_conn;
-+
-+      dprintk(KERN_INFO "uml_net_user_timer_expire [%p]\n", conn);
-+      do_connect(conn);
-+#endif
-+}
-+
-+/*
-+ * default do nothing hard header packet routines for struct net_device init.
-+ * real ethernet transports will overwrite with real routines.
-+ */
-+static int uml_net_hard_header(struct sk_buff *skb, struct net_device *dev,
-+                 unsigned short type, void *daddr, void *saddr, unsigned len)
-+{
-+      return(0); /* no change */
-+}
-+
-+static int uml_net_rebuild_header(struct sk_buff *skb)
-+{
-+      return(0); /* ignore */ 
-+}
-+
-+static int uml_net_header_cache(struct neighbour *neigh, struct hh_cache *hh)
-+{
-+      return(-1); /* fail */
-+}
-+
-+static void uml_net_header_cache_update(struct hh_cache *hh,
-+                 struct net_device *dev, unsigned char * haddr)
-+{
-+      /* ignore */
-+}
-+
-+static int uml_net_header_parse(struct sk_buff *skb, unsigned char *haddr)
-+{
-+      return(0); /* nothing */
-+}
-+
-+static spinlock_t devices_lock = SPIN_LOCK_UNLOCKED;
-+static struct list_head devices = LIST_HEAD_INIT(devices);
-+
-+static int eth_configure(int n, void *init, char *mac,
-+                       struct transport *transport)
-+{
-+      struct uml_net *device;
-+      struct net_device *dev;
-+      struct uml_net_private *lp;
-+      int save, err, size;
-+
-+      size = transport->private_size + sizeof(struct uml_net_private) + 
-+              sizeof(((struct uml_net_private *) 0)->user);
-+
-+      device = kmalloc(sizeof(*device), GFP_KERNEL);
-+      if(device == NULL){
-+              printk(KERN_ERR "eth_configure failed to allocate uml_net\n");
-+              return(1);
-+      }
-+
-+      *device = ((struct uml_net) { .list     = LIST_HEAD_INIT(device->list),
-+                                    .dev      = NULL,
-+                                    .index    = n,
-+                                    .mac      = { [ 0 ... 5 ] = 0 },
-+                                    .have_mac = 0 });
-+
-+      spin_lock(&devices_lock);
-+      list_add(&device->list, &devices);
-+      spin_unlock(&devices_lock);
-+
-+      if(setup_etheraddr(mac, device->mac))
-+              device->have_mac = 1;
-+
-+      printk(KERN_INFO "Netdevice %d ", n);
-+      if(device->have_mac) printk("(%02x:%02x:%02x:%02x:%02x:%02x) ",
-+                                  device->mac[0], device->mac[1], 
-+                                  device->mac[2], device->mac[3], 
-+                                  device->mac[4], device->mac[5]);
-+      printk(": ");
-+      dev = kmalloc(sizeof(*dev) + size, GFP_KERNEL);
-+      if(dev == NULL){
-+              printk(KERN_ERR "eth_configure: failed to allocate device\n");
-+              return(1);
-+      }
-+      memset(dev, 0, sizeof(*dev) + size);
-+
-+      snprintf(dev->name, sizeof(dev->name), "eth%d", n);
-+      dev->priv = (void *) &dev[1];
-+      device->dev = dev;
-+
-+        dev->hard_header = uml_net_hard_header;
-+        dev->rebuild_header = uml_net_rebuild_header;
-+        dev->hard_header_cache = uml_net_header_cache;
-+        dev->header_cache_update= uml_net_header_cache_update;
-+        dev->hard_header_parse = uml_net_header_parse;
-+
-+      (*transport->kern->init)(dev, init);
-+
-+      dev->mtu = transport->user->max_packet;
-+      dev->open = uml_net_open;
-+      dev->hard_start_xmit = uml_net_start_xmit;
-+      dev->stop = uml_net_close;
-+      dev->get_stats = uml_net_get_stats;
-+      dev->set_multicast_list = uml_net_set_multicast_list;
-+      dev->tx_timeout = uml_net_tx_timeout;
-+      dev->set_mac_address = uml_net_set_mac;
-+      dev->change_mtu = uml_net_change_mtu;
-+      dev->do_ioctl = uml_net_ioctl;
-+      dev->watchdog_timeo = (HZ >> 1);
-+      dev->irq = UM_ETH_IRQ;
-+
-+      rtnl_lock();
-+      err = register_netdevice(dev);
-+      rtnl_unlock();
-+      if(err)
-+              return(1);
-+      lp = dev->priv;
-+
-+      /* lp.user is the first four bytes of the transport data, which
-+       * has already been initialized.  This structure assignment will
-+       * overwrite that, so we make sure that .user gets overwritten with
-+       * what it already has.
-+       */
-+      save = lp->user[0];
-+      *lp = ((struct uml_net_private) 
-+              { .list                 = LIST_HEAD_INIT(lp->list),
-+                .lock                 = SPIN_LOCK_UNLOCKED,
-+                .dev                  = dev,
-+                .fd                   = -1,
-+                .mac                  = { 0xfe, 0xfd, 0x0, 0x0, 0x0, 0x0},
-+                .have_mac             = device->have_mac,
-+                .protocol             = transport->kern->protocol,
-+                .open                 = transport->user->open,
-+                .close                = transport->user->close,
-+                .remove               = transport->user->remove,
-+                .read                 = transport->kern->read,
-+                .write                = transport->kern->write,
-+                .add_address          = transport->user->add_address,
-+                .delete_address       = transport->user->delete_address,
-+                .set_mtu              = transport->user->set_mtu,
-+                .user                 = { save } });
-+      init_timer(&lp->tl);
-+      lp->tl.function = uml_net_user_timer_expire;
-+      memset(&lp->stats, 0, sizeof(lp->stats));
-+      if(lp->have_mac) memcpy(lp->mac, device->mac, sizeof(lp->mac));
-+
-+      if(transport->user->init) 
-+              (*transport->user->init)(&lp->user, dev);
-+
-+      if(device->have_mac)
-+              set_ether_mac(dev, device->mac);
-+      return(0);
-+}
-+
-+static struct uml_net *find_device(int n)
-+{
-+      struct uml_net *device;
-+      struct list_head *ele;
-+
-+      spin_lock(&devices_lock);
-+      list_for_each(ele, &devices){
-+              device = list_entry(ele, struct uml_net, list);
-+              if(device->index == n)
-+                      goto out;
-+      }
-+      device = NULL;
-+ out:
-+      spin_unlock(&devices_lock);
-+      return(device);
-+}
-+
-+static int eth_parse(char *str, int *index_out, char **str_out)
-+{
-+      char *end;
-+      int n;
-+
-+      n = simple_strtoul(str, &end, 0);
-+      if(end == str){
-+              printk(KERN_ERR "eth_setup: Failed to parse '%s'\n", str);
-+              return(1);
-+      }
-+      if(n < 0){
-+              printk(KERN_ERR "eth_setup: device %d is negative\n", n);
-+              return(1);
-+      }
-+      str = end;
-+      if(*str != '='){
-+              printk(KERN_ERR 
-+                     "eth_setup: expected '=' after device number\n");
-+              return(1);
-+      }
-+      str++;
-+      if(find_device(n)){
-+              printk(KERN_ERR "eth_setup: Device %d already configured\n",
-+                     n);
-+              return(1);
-+      }
-+      if(index_out) *index_out = n;
-+      *str_out = str;
-+      return(0);
-+}
-+
-+struct eth_init {
-+      struct list_head list;
-+      char *init;
-+      int index;
-+};
-+
-+/* Filled in at boot time.  Will need locking if the transports become
-+ * modular.
-+ */
-+struct list_head transports = LIST_HEAD_INIT(transports);
-+
-+/* Filled in during early boot */
-+struct list_head eth_cmd_line = LIST_HEAD_INIT(eth_cmd_line);
-+
-+static int check_transport(struct transport *transport, char *eth, int n,
-+                         void **init_out, char **mac_out)
-+{
-+      int len;
-+
-+      len = strlen(transport->name);
-+      if(strncmp(eth, transport->name, len))
-+              return(0);
-+
-+      eth += len;
-+      if(*eth == ',')
-+              eth++;
-+      else if(*eth != '\0')
-+              return(0);
-+
-+      *init_out = kmalloc(transport->setup_size, GFP_KERNEL);
-+      if(*init_out == NULL)
-+              return(1);
-+
-+      if(!transport->setup(eth, mac_out, *init_out)){
-+              kfree(*init_out);
-+              *init_out = NULL;
-+      }
-+      return(1);
-+}
-+
-+void register_transport(struct transport *new)
-+{
-+      struct list_head *ele, *next;
-+      struct eth_init *eth;
-+      void *init;
-+      char *mac = NULL;
-+      int match;
-+
-+      list_add(&new->list, &transports);
-+
-+      list_for_each_safe(ele, next, &eth_cmd_line){
-+              eth = list_entry(ele, struct eth_init, list);
-+              match = check_transport(new, eth->init, eth->index, &init,
-+                                      &mac);
-+              if(!match)
-+                      continue;
-+              else if(init != NULL){
-+                      eth_configure(eth->index, init, mac, new);
-+                      kfree(init);
-+              }
-+              list_del(&eth->list);
-+      }
-+}
-+
-+static int eth_setup_common(char *str, int index)
-+{
-+      struct list_head *ele;
-+      struct transport *transport;
-+      void *init;
-+      char *mac = NULL;
-+
-+      list_for_each(ele, &transports){
-+              transport = list_entry(ele, struct transport, list);
-+              if(!check_transport(transport, str, index, &init, &mac))
-+                      continue;
-+              if(init != NULL){
-+                      eth_configure(index, init, mac, transport);
-+                      kfree(init);
-+              }
-+              return(1);
-+      }
-+      return(0);
-+}
-+
-+static int eth_setup(char *str)
-+{
-+      struct eth_init *new;
-+      int n, err;
-+
-+      err = eth_parse(str, &n, &str);
-+      if(err) return(1);
-+
-+      new = alloc_bootmem(sizeof(new));
-+      if(new == NULL){
-+              printk("eth_init : alloc_bootmem failed\n");
-+              return(1);
-+      }
-+      *new = ((struct eth_init) { .list       = LIST_HEAD_INIT(new->list),
-+                                  .index      = n,
-+                                  .init       = str });
-+      list_add_tail(&new->list, &eth_cmd_line);
-+      return(1);
-+}
-+
-+__setup("eth", eth_setup);
-+__uml_help(eth_setup,
-+"eth[0-9]+=<transport>,<options>\n"
-+"    Configure a network device.\n\n"
-+);
-+
-+static int eth_init(void)
-+{
-+      struct list_head *ele, *next;
-+      struct eth_init *eth;
-+
-+      list_for_each_safe(ele, next, &eth_cmd_line){
-+              eth = list_entry(ele, struct eth_init, list);
-+
-+              if(eth_setup_common(eth->init, eth->index))
-+                      list_del(&eth->list);
-+      }
-+      
-+      return(1);
-+}
-+
-+__initcall(eth_init);
-+
-+static int net_config(char *str)
-+{
-+      int n, err;
-+
-+      err = eth_parse(str, &n, &str);
-+      if(err) return(err);
-+
-+      str = uml_strdup(str);
-+      if(str == NULL){
-+              printk(KERN_ERR "net_config failed to strdup string\n");
-+              return(-1);
-+      }
-+      err = !eth_setup_common(str, n);
-+      if(err) 
-+              kfree(str);
-+      return(err);
-+}
-+
-+static int net_remove(char *str)
-+{
-+      struct uml_net *device;
-+      struct net_device *dev;
-+      struct uml_net_private *lp;
-+      char *end;
-+      int n;
-+
-+      n = simple_strtoul(str, &end, 0);
-+      if((*end != '\0') || (end == str))
-+              return(-1);
-+
-+      device = find_device(n);
-+      if(device == NULL)
-+              return(0);
-+
-+      dev = device->dev;
-+      lp = dev->priv;
-+      if(lp->fd > 0) return(-1);
-+      if(lp->remove != NULL) (*lp->remove)(&lp->user);
-+      unregister_netdev(dev);
-+
-+      list_del(&device->list);
-+      kfree(device);
-+      return(0);
-+}
-+
-+static struct mc_device net_mc = {
-+      .name           = "eth",
-+      .config         = net_config,
-+      .get_config     = NULL,
-+      .remove         = net_remove,
-+};
-+
-+static int uml_inetaddr_event(struct notifier_block *this, unsigned long event,
-+                            void *ptr)
-+{
-+      struct in_ifaddr *ifa = ptr;
-+      u32 addr = ifa->ifa_address;
-+      u32 netmask = ifa->ifa_mask;
-+      struct net_device *dev = ifa->ifa_dev->dev;
-+      struct uml_net_private *lp;
-+      void (*proc)(unsigned char *, unsigned char *, void *);
-+      unsigned char addr_buf[4], netmask_buf[4];
-+
-+      if(dev->open != uml_net_open) return(NOTIFY_DONE);
-+
-+      lp = dev->priv;
-+
-+      proc = NULL;
-+      switch (event){
-+      case NETDEV_UP:
-+              proc = lp->add_address;
-+              break;
-+      case NETDEV_DOWN:
-+              proc = lp->delete_address;
-+              break;
-+      }
-+      if(proc != NULL){
-+              addr_buf[0] = addr & 0xff;
-+              addr_buf[1] = (addr >> 8) & 0xff;
-+              addr_buf[2] = (addr >> 16) & 0xff;
-+              addr_buf[3] = addr >> 24;
-+              netmask_buf[0] = netmask & 0xff;
-+              netmask_buf[1] = (netmask >> 8) & 0xff;
-+              netmask_buf[2] = (netmask >> 16) & 0xff;
-+              netmask_buf[3] = netmask >> 24;
-+              (*proc)(addr_buf, netmask_buf, &lp->user);
-+      }
-+      return(NOTIFY_DONE);
-+}
-+
-+struct notifier_block uml_inetaddr_notifier = {
-+      .notifier_call          = uml_inetaddr_event,
-+};
-+
-+static int uml_net_init(void)
-+{
-+      struct list_head *ele;
-+      struct uml_net_private *lp;     
-+      struct in_device *ip;
-+      struct in_ifaddr *in;
-+
-+      mconsole_register_dev(&net_mc);
-+      register_inetaddr_notifier(&uml_inetaddr_notifier);
-+
-+      /* Devices may have been opened already, so the uml_inetaddr_notifier
-+       * didn't get a chance to run for them.  This fakes it so that
-+       * addresses which have already been set up get handled properly.
-+       */
-+      list_for_each(ele, &opened){
-+              lp = list_entry(ele, struct uml_net_private, list);
-+              ip = lp->dev->ip_ptr;
-+              if(ip == NULL) continue;
-+              in = ip->ifa_list;
-+              while(in != NULL){
-+                      uml_inetaddr_event(NULL, NETDEV_UP, in);
-+                      in = in->ifa_next;
-+              }
-+      }       
-+
-+      return(0);
-+}
-+
-+__initcall(uml_net_init);
-+
-+static void close_devices(void)
-+{
-+      struct list_head *ele;
-+      struct uml_net_private *lp;     
-+
-+      list_for_each(ele, &opened){
-+              lp = list_entry(ele, struct uml_net_private, list);
-+              if(lp->close != NULL) (*lp->close)(lp->fd, &lp->user);
-+              if(lp->remove != NULL) (*lp->remove)(&lp->user);
-+      }
-+}
-+
-+__uml_exitcall(close_devices);
-+
-+int setup_etheraddr(char *str, unsigned char *addr)
-+{
-+      char *end;
-+      int i;
-+
-+      if(str == NULL)
-+              return(0);
-+      for(i=0;i<6;i++){
-+              addr[i] = simple_strtoul(str, &end, 16);
-+              if((end == str) ||
-+                 ((*end != ':') && (*end != ',') && (*end != '\0'))){
-+                      printk(KERN_ERR 
-+                             "setup_etheraddr: failed to parse '%s' "
-+                             "as an ethernet address\n", str);
-+                      return(0);
-+              }
-+              str = end + 1;
-+      }
-+      if(addr[0] & 1){
-+              printk(KERN_ERR 
-+                     "Attempt to assign a broadcast ethernet address to a "
-+                     "device disallowed\n");
-+              return(0);
-+      }
-+      return(1);
-+}
-+
-+void dev_ip_addr(void *d, char *buf, char *bin_buf)
-+{
-+      struct net_device *dev = d;
-+      struct in_device *ip = dev->ip_ptr;
-+      struct in_ifaddr *in;
-+      u32 addr;
-+
-+      if((ip == NULL) || ((in = ip->ifa_list) == NULL)){
-+              printk(KERN_WARNING "dev_ip_addr - device not assigned an "
-+                     "IP address\n");
-+              return;
-+      }
-+      addr = in->ifa_address;
-+      sprintf(buf, "%d.%d.%d.%d", addr & 0xff, (addr >> 8) & 0xff, 
-+              (addr >> 16) & 0xff, addr >> 24);
-+      if(bin_buf){
-+              bin_buf[0] = addr & 0xff;
-+              bin_buf[1] = (addr >> 8) & 0xff;
-+              bin_buf[2] = (addr >> 16) & 0xff;
-+              bin_buf[3] = addr >> 24;
-+      }
-+}
-+
-+void set_ether_mac(void *d, unsigned char *addr)
-+{
-+      struct net_device *dev = d;
-+
-+      memcpy(dev->dev_addr, addr, ETH_ALEN);  
-+}
-+
-+struct sk_buff *ether_adjust_skb(struct sk_buff *skb, int extra)
-+{
-+      if((skb != NULL) && (skb_tailroom(skb) < extra)){
-+              struct sk_buff *skb2;
-+
-+              skb2 = skb_copy_expand(skb, 0, extra, GFP_ATOMIC);
-+              dev_kfree_skb(skb);
-+              skb = skb2;
-+      }
-+      if(skb != NULL) skb_put(skb, extra);
-+      return(skb);
-+}
-+
-+void iter_addresses(void *d, void (*cb)(unsigned char *, unsigned char *, 
-+                                      void *), 
-+                  void *arg)
-+{
-+      struct net_device *dev = d;
-+      struct in_device *ip = dev->ip_ptr;
-+      struct in_ifaddr *in;
-+      unsigned char address[4], netmask[4];
-+
-+      if(ip == NULL) return;
-+      in = ip->ifa_list;
-+      while(in != NULL){
-+              address[0] = in->ifa_address & 0xff;
-+              address[1] = (in->ifa_address >> 8) & 0xff;
-+              address[2] = (in->ifa_address >> 16) & 0xff;
-+              address[3] = in->ifa_address >> 24;
-+              netmask[0] = in->ifa_mask & 0xff;
-+              netmask[1] = (in->ifa_mask >> 8) & 0xff;
-+              netmask[2] = (in->ifa_mask >> 16) & 0xff;
-+              netmask[3] = in->ifa_mask >> 24;
-+              (*cb)(address, netmask, arg);
-+              in = in->ifa_next;
-+      }
-+}
-+
-+int dev_netmask(void *d, void *m)
-+{
-+      struct net_device *dev = d;
-+      struct in_device *ip = dev->ip_ptr;
-+      struct in_ifaddr *in;
-+      __u32 *mask_out = m;
-+
-+      if(ip == NULL) 
-+              return(1);
-+
-+      in = ip->ifa_list;
-+      if(in == NULL) 
-+              return(1);
-+
-+      *mask_out = in->ifa_mask;
-+      return(0);
-+}
-+
-+void *get_output_buffer(int *len_out)
-+{
-+      void *ret;
-+
-+      ret = (void *) __get_free_pages(GFP_KERNEL, 0);
-+      if(ret) *len_out = PAGE_SIZE;
-+      else *len_out = 0;
-+      return(ret);
-+}
-+
-+void free_output_buffer(void *buffer)
-+{
-+      free_pages((unsigned long) buffer, 0);
-+}
-+
-+int tap_setup_common(char *str, char *type, char **dev_name, char **mac_out, 
-+                   char **gate_addr)
-+{
-+      char *remain;
-+
-+      remain = split_if_spec(str, dev_name, mac_out, gate_addr, NULL);
-+      if(remain != NULL){
-+              printk("tap_setup_common - Extra garbage on specification : "
-+                     "'%s'\n", remain);
-+              return(1);
-+      }
-+
-+      return(0);
-+}
-+
-+unsigned short eth_protocol(struct sk_buff *skb)
-+{
-+      return(eth_type_trans(skb, skb->dev));
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/net_user.c um/arch/um/drivers/net_user.c
---- orig/arch/um/drivers/net_user.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/net_user.c      2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,254 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stddef.h>
-+#include <stdarg.h>
-+#include <unistd.h>
-+#include <stdio.h>
-+#include <errno.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <sys/socket.h>
-+#include <sys/wait.h>
-+#include "user.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "net_user.h"
-+#include "helper.h"
-+#include "os.h"
-+
-+int tap_open_common(void *dev, char *gate_addr)
-+{
-+      int tap_addr[4];
-+
-+      if(gate_addr == NULL) return(0);
-+      if(sscanf(gate_addr, "%d.%d.%d.%d", &tap_addr[0], 
-+                &tap_addr[1], &tap_addr[2], &tap_addr[3]) != 4){
-+              printk("Invalid tap IP address - '%s'\n", 
-+                     gate_addr);
-+              return(-EINVAL);
-+      }
-+      return(0);
-+}
-+
-+void tap_check_ips(char *gate_addr, char *eth_addr)
-+{
-+      int tap_addr[4];
-+
-+      if((gate_addr != NULL) && 
-+         (sscanf(gate_addr, "%d.%d.%d.%d", &tap_addr[0], 
-+                 &tap_addr[1], &tap_addr[2], &tap_addr[3]) == 4) &&
-+         (eth_addr[0] == tap_addr[0]) && 
-+         (eth_addr[1] == tap_addr[1]) && 
-+         (eth_addr[2] == tap_addr[2]) && 
-+         (eth_addr[3] == tap_addr[3])){
-+              printk("The tap IP address and the UML eth IP address"
-+                     " must be different\n");
-+      }
-+}
-+
-+void read_output(int fd, char *output, int len)
-+{
-+      int remain, n, actual;
-+      char c;
-+
-+      if(output == NULL){
-+              output = &c;
-+              len = sizeof(c);
-+      }
-+              
-+      *output = '\0';
-+      if(read(fd, &remain, sizeof(remain)) != sizeof(remain)){
-+              printk("read_output - read of length failed, errno = %d\n",
-+                     errno);
-+              return;
-+      }
-+
-+      while(remain != 0){
-+              n = (remain < len) ? remain : len;
-+              actual = read(fd, output, n);
-+              if(actual != n){
-+                      printk("read_output - read of data failed, "
-+                             "errno = %d\n", errno);
-+                      return;
-+              }
-+              remain -= actual;
-+      }
-+      return;
-+}
-+
-+int net_read(int fd, void *buf, int len)
-+{
-+      int n;
-+
-+      while(((n = read(fd,  buf,  len)) < 0) && (errno == EINTR)) ;
-+
-+      if(n < 0){
-+              if(errno == EAGAIN) return(0);
-+              return(-errno);
-+      }
-+      else if(n == 0) return(-ENOTCONN);
-+      return(n);
-+}
-+
-+int net_recvfrom(int fd, void *buf, int len)
-+{
-+      int n;
-+
-+      while(((n = recvfrom(fd,  buf,  len, 0, NULL, NULL)) < 0) && 
-+            (errno == EINTR)) ;
-+
-+      if(n < 0){
-+              if(errno == EAGAIN) return(0);
-+              return(-errno);
-+      }
-+      else if(n == 0) return(-ENOTCONN);
-+      return(n);
-+}
-+
-+int net_write(int fd, void *buf, int len)
-+{
-+      int n;
-+
-+      while(((n = write(fd, buf, len)) < 0) && (errno == EINTR)) ;
-+      if(n < 0){
-+              if(errno == EAGAIN) return(0);
-+              return(-errno);
-+      }
-+      else if(n == 0) return(-ENOTCONN);
-+      return(n);      
-+}
-+
-+int net_send(int fd, void *buf, int len)
-+{
-+      int n;
-+
-+      while(((n = send(fd, buf, len, 0)) < 0) && (errno == EINTR)) ;
-+      if(n < 0){
-+              if(errno == EAGAIN) return(0);
-+              return(-errno);
-+      }
-+      else if(n == 0) return(-ENOTCONN);
-+      return(n);      
-+}
-+
-+int net_sendto(int fd, void *buf, int len, void *to, int sock_len)
-+{
-+      int n;
-+
-+      while(((n = sendto(fd, buf, len, 0, (struct sockaddr *) to,
-+                         sock_len)) < 0) && (errno == EINTR)) ;
-+      if(n < 0){
-+              if(errno == EAGAIN) return(0);
-+              return(-errno);
-+      }
-+      else if(n == 0) return(-ENOTCONN);
-+      return(n);      
-+}
-+
-+struct change_pre_exec_data {
-+      int close_me;
-+      int stdout;
-+};
-+
-+static void change_pre_exec(void *arg)
-+{
-+      struct change_pre_exec_data *data = arg;
-+
-+      close(data->close_me);
-+      dup2(data->stdout, 1);
-+}
-+
-+static int change_tramp(char **argv, char *output, int output_len)
-+{
-+      int pid, fds[2], err;
-+      struct change_pre_exec_data pe_data;
-+
-+      err = os_pipe(fds, 1, 0);
-+      if(err){
-+              printk("change_tramp - pipe failed, errno = %d\n", -err);
-+              return(err);
-+      }
-+      pe_data.close_me = fds[0];
-+      pe_data.stdout = fds[1];
-+      pid = run_helper(change_pre_exec, &pe_data, argv, NULL);
-+
-+      close(fds[1]);
-+      read_output(fds[0], output, output_len);
-+      waitpid(pid, NULL, 0);  
-+      return(pid);
-+}
-+
-+static void change(char *dev, char *what, unsigned char *addr,
-+                 unsigned char *netmask)
-+{
-+      char addr_buf[sizeof("255.255.255.255\0")];
-+      char netmask_buf[sizeof("255.255.255.255\0")];
-+      char version[sizeof("nnnnn\0")];
-+      char *argv[] = { "uml_net", version, what, dev, addr_buf, 
-+                       netmask_buf, NULL };
-+      char *output;
-+      int output_len, pid;
-+
-+      sprintf(version, "%d", UML_NET_VERSION);
-+      sprintf(addr_buf, "%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]);
-+      sprintf(netmask_buf, "%d.%d.%d.%d", netmask[0], netmask[1], 
-+              netmask[2], netmask[3]);
-+
-+      output_len = page_size();
-+      output = um_kmalloc(output_len);
-+      if(output == NULL)
-+              printk("change : failed to allocate output buffer\n");
-+
-+      pid = change_tramp(argv, output, output_len);
-+      if(pid < 0) return;
-+
-+      if(output != NULL){
-+              printk("%s", output);
-+              kfree(output);
-+      }
-+}
-+
-+void open_addr(unsigned char *addr, unsigned char *netmask, void *arg)
-+{
-+      change(arg, "add", addr, netmask);
-+}
-+
-+void close_addr(unsigned char *addr, unsigned char *netmask, void *arg)
-+{
-+      change(arg, "del", addr, netmask);
-+}
-+
-+char *split_if_spec(char *str, ...)
-+{
-+      char **arg, *end;
-+      va_list ap;
-+
-+      va_start(ap, str);
-+      while((arg = va_arg(ap, char **)) != NULL){
-+              if(*str == '\0')
-+                      return(NULL);
-+              end = strchr(str, ',');
-+              if(end != str)
-+                      *arg = str;
-+              if(end == NULL)
-+                      return(NULL);
-+              *end++ = '\0';
-+              str = end;
-+      }
-+      va_end(ap);
-+      return(str);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/null.c um/arch/um/drivers/null.c
---- orig/arch/um/drivers/null.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/null.c  2002-12-15 21:04:00.000000000 -0500
-@@ -0,0 +1,56 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdlib.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include "chan_user.h"
-+#include "os.h"
-+
-+static int null_chan;
-+
-+void *null_init(char *str, int device, struct chan_opts *opts)
-+{
-+      return(&null_chan);
-+}
-+
-+int null_open(int input, int output, int primary, void *d, char **dev_out)
-+{
-+      *dev_out = NULL;
-+      return(os_open_file(DEV_NULL, of_rdwr(OPENFLAGS()), 0));
-+}
-+
-+int null_read(int fd, char *c_out, void *unused)
-+{
-+      return(-ENODEV);
-+}
-+
-+void null_free(void *data)
-+{
-+}
-+
-+struct chan_ops null_ops = {
-+      .type           = "null",
-+      .init           = null_init,
-+      .open           = null_open,
-+      .close          = generic_close,
-+      .read           = null_read,
-+      .write          = generic_write,
-+      .console_write  = generic_console_write,
-+      .window_size    = generic_window_size,
-+      .free           = null_free,
-+      .winch          = 0,
-+};
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/pcap_kern.c um/arch/um/drivers/pcap_kern.c
---- orig/arch/um/drivers/pcap_kern.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/pcap_kern.c     2002-12-15 21:19:15.000000000 -0500
-@@ -0,0 +1,127 @@
-+/*
-+ * Copyright (C) 2002 Jeff Dike <jdike@karaya.com>
-+ * Licensed under the GPL.
-+ */
-+
-+#include "linux/init.h"
-+#include "linux/netdevice.h"
-+#include "linux/etherdevice.h"
-+#include "net_kern.h"
-+#include "net_user.h"
-+#include "pcap_user.h"
-+
-+struct pcap_init {
-+      char *host_if;
-+      int promisc;
-+      int optimize;
-+      char *filter;
-+};
-+
-+void pcap_init(struct net_device *dev, void *data)
-+{
-+      struct uml_net_private *pri;
-+      struct pcap_data *ppri;
-+      struct pcap_init *init = data;
-+
-+      init_etherdev(dev, 0);
-+      pri = dev->priv;
-+      ppri = (struct pcap_data *) pri->user;
-+      *ppri = ((struct pcap_data)
-+              { .host_if      = init->host_if,
-+                .promisc      = init->promisc,
-+                .optimize     = init->optimize,
-+                .filter       = init->filter,
-+                .compiled     = NULL,
-+                .pcap         = NULL });
-+}
-+
-+static int pcap_read(int fd, struct sk_buff **skb, 
-+                     struct uml_net_private *lp)
-+{
-+      *skb = ether_adjust_skb(*skb, ETH_HEADER_OTHER);
-+      if(*skb == NULL) return(-ENOMEM);
-+      return(pcap_user_read(fd, (*skb)->mac.raw, 
-+                            (*skb)->dev->mtu + ETH_HEADER_OTHER,
-+                            (struct pcap_data *) &lp->user));
-+}
-+
-+static int pcap_write(int fd, struct sk_buff **skb, struct uml_net_private *lp)
-+{
-+      return(-EPERM);
-+}
-+
-+static struct net_kern_info pcap_kern_info = {
-+      .init                   = pcap_init,
-+      .protocol               = eth_protocol,
-+      .read                   = pcap_read,
-+      .write                  = pcap_write,
-+};
-+
-+int pcap_setup(char *str, char **mac_out, void *data)
-+{
-+      struct pcap_init *init = data;
-+      char *remain, *host_if = NULL, *options[2] = { NULL, NULL };
-+      int i;
-+
-+      *init = ((struct pcap_init)
-+              { .host_if      = "eth0",
-+                .promisc      = 1,
-+                .optimize     = 0,
-+                .filter       = NULL });
-+
-+      remain = split_if_spec(str, &host_if, &init->filter, 
-+                             &options[0], &options[1], NULL);
-+      if(remain != NULL){
-+              printk(KERN_ERR "pcap_setup - Extra garbage on "
-+                     "specification : '%s'\n", remain);
-+              return(0);
-+      }
-+
-+      if(host_if != NULL)
-+              init->host_if = host_if;
-+
-+      for(i = 0; i < sizeof(options)/sizeof(options[0]); i++){
-+              if(options[i] == NULL)
-+                      continue;
-+              if(!strcmp(options[i], "promisc"))
-+                      init->promisc = 1;
-+              else if(!strcmp(options[i], "nopromisc"))
-+                      init->promisc = 0;
-+              else if(!strcmp(options[i], "optimize"))
-+                      init->optimize = 1;
-+              else if(!strcmp(options[i], "nooptimize"))
-+                      init->optimize = 0;
-+              else printk("pcap_setup : bad option - '%s'\n", options[i]);
-+      }
-+
-+      return(1);
-+}
-+
-+static struct transport pcap_transport = {
-+      .list           = LIST_HEAD_INIT(pcap_transport.list),
-+      .name           = "pcap",
-+      .setup          = pcap_setup,
-+      .user           = &pcap_user_info,
-+      .kern           = &pcap_kern_info,
-+      .private_size   = sizeof(struct pcap_data),
-+      .setup_size     = sizeof(struct pcap_init),
-+};
-+
-+static int register_pcap(void)
-+{
-+      register_transport(&pcap_transport);
-+      return(1);
-+}
-+
-+__initcall(register_pcap);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/pcap_user.c um/arch/um/drivers/pcap_user.c
---- orig/arch/um/drivers/pcap_user.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/pcap_user.c     2002-12-15 21:04:39.000000000 -0500
-@@ -0,0 +1,143 @@
-+/*
-+ * Copyright (C) 2002 Jeff Dike <jdike@karaya.com>
-+ * Licensed under the GPL.
-+ */
-+
-+#include <unistd.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <pcap.h>
-+#include <asm/types.h>
-+#include "net_user.h"
-+#include "pcap_user.h"
-+#include "user.h"
-+
-+#define MAX_PACKET (ETH_MAX_PACKET + ETH_HEADER_OTHER)
-+
-+#define PCAP_FD(p) (*(int *)(p))
-+
-+static void pcap_user_init(void *data, void *dev)
-+{
-+      struct pcap_data *pri = data;
-+      pcap_t *p;
-+      char errors[PCAP_ERRBUF_SIZE];
-+
-+      p = pcap_open_live(pri->host_if, MAX_PACKET, pri->promisc, 0, errors);
-+      if(p == NULL){
-+              printk("pcap_user_init : pcap_open_live failed - '%s'\n", 
-+                     errors);
-+              return;
-+      }
-+
-+      pri->dev = dev;
-+      pri->pcap = p;
-+}
-+
-+static int pcap_open(void *data)
-+{
-+      struct pcap_data *pri = data;
-+      __u32 netmask;
-+      int err;
-+
-+      if(pri->pcap == NULL)
-+              return(-ENODEV);
-+
-+      if(pri->filter != NULL){
-+              err = dev_netmask(pri->dev, &netmask);
-+              if(err < 0){
-+                      printk("pcap_open : dev_netmask failed\n");
-+                      return(-EIO);
-+              }
-+
-+              pri->compiled = um_kmalloc(sizeof(struct bpf_program));
-+              if(pri->compiled == NULL){
-+                      printk("pcap_open : kmalloc failed\n");
-+                      return(-ENOMEM);
-+              }
-+              
-+              err = pcap_compile(pri->pcap, 
-+                                 (struct bpf_program *) pri->compiled, 
-+                                 pri->filter, pri->optimize, netmask);
-+              if(err < 0){
-+                      printk("pcap_open : pcap_compile failed - '%s'\n", 
-+                             pcap_geterr(pri->pcap));
-+                      return(-EIO);
-+              }
-+
-+              err = pcap_setfilter(pri->pcap, pri->compiled);
-+              if(err < 0){
-+                      printk("pcap_open : pcap_setfilter failed - '%s'\n", 
-+                             pcap_geterr(pri->pcap));
-+                      return(-EIO);
-+              }
-+      }
-+      
-+      return(PCAP_FD(pri->pcap));
-+}
-+
-+static void pcap_remove(void *data)
-+{
-+      struct pcap_data *pri = data;
-+
-+      if(pri->compiled != NULL)
-+              pcap_freecode(pri->compiled);
-+
-+      pcap_close(pri->pcap);
-+}
-+
-+struct pcap_handler_data {
-+      char *buffer;
-+      int len;
-+};
-+
-+static void handler(u_char *data, const struct pcap_pkthdr *header, 
-+                  const u_char *packet)
-+{
-+      int len;
-+
-+      struct pcap_handler_data *hdata = (struct pcap_handler_data *) data;
-+
-+      len = hdata->len < header->caplen ? hdata->len : header->caplen;
-+      memcpy(hdata->buffer, packet, len);
-+      hdata->len = len;
-+}
-+
-+int pcap_user_read(int fd, void *buffer, int len, struct pcap_data *pri)
-+{
-+      struct pcap_handler_data hdata = ((struct pcap_handler_data)
-+                                        { .buffer     = buffer,
-+                                          .len        = len });
-+      int n;
-+
-+      n = pcap_dispatch(pri->pcap, 1, handler, (u_char *) &hdata);
-+      if(n < 0){
-+              printk("pcap_dispatch failed - %s\n", pcap_geterr(pri->pcap));
-+              return(-EIO);
-+      }
-+      else if(n == 0) 
-+              return(0);
-+      return(hdata.len);
-+}
-+
-+struct net_user_info pcap_user_info = {
-+      .init           = pcap_user_init,
-+      .open           = pcap_open,
-+      .close          = NULL,
-+      .remove         = pcap_remove,
-+      .set_mtu        = NULL,
-+      .add_address    = NULL,
-+      .delete_address = NULL,
-+      .max_packet     = MAX_PACKET - ETH_HEADER_OTHER
-+};
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/pcap_user.h um/arch/um/drivers/pcap_user.h
---- orig/arch/um/drivers/pcap_user.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/pcap_user.h     2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,31 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "net_user.h"
-+
-+struct pcap_data {
-+      char *host_if;
-+      int promisc;
-+      int optimize;
-+      char *filter;
-+      void *compiled;
-+      void *pcap;
-+      void *dev;
-+};
-+
-+extern struct net_user_info pcap_user_info;
-+
-+extern int pcap_user_read(int fd, void *buf, int len, struct pcap_data *pri);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/port.h um/arch/um/drivers/port.h
---- orig/arch/um/drivers/port.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/port.h  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,30 @@
-+/* 
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __PORT_H__
-+#define __PORT_H__
-+
-+extern void *port_data(int port);
-+extern int port_wait(void *data);
-+extern void port_kern_close(void *d);
-+extern int port_connection(int fd, int *socket_out, int *pid_out);
-+extern int port_listen_fd(int port);
-+extern void port_read(int fd, void *data);
-+extern void port_kern_free(void *d);
-+extern int port_rcv_fd(int fd);
-+extern void port_remove_dev(void *d);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/port_kern.c um/arch/um/drivers/port_kern.c
---- orig/arch/um/drivers/port_kern.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/port_kern.c     2002-12-30 20:57:42.000000000 -0500
-@@ -0,0 +1,302 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/list.h"
-+#include "linux/sched.h"
-+#include "linux/slab.h"
-+#include "linux/irq.h"
-+#include "linux/spinlock.h"
-+#include "linux/errno.h"
-+#include "asm/semaphore.h"
-+#include "asm/errno.h"
-+#include "kern_util.h"
-+#include "kern.h"
-+#include "irq_user.h"
-+#include "port.h"
-+#include "init.h"
-+#include "os.h"
-+
-+struct port_list {
-+      struct list_head list;
-+      int has_connection;
-+      struct semaphore sem;
-+      int port;
-+      int fd;
-+      spinlock_t lock;
-+      struct list_head pending;
-+      struct list_head connections;
-+};
-+
-+struct port_dev {
-+      struct port_list *port;
-+      int helper_pid;
-+      int telnetd_pid;
-+};
-+
-+struct connection {
-+      struct list_head list;
-+      int fd;
-+      int helper_pid;
-+      int socket[2];
-+      int telnetd_pid;
-+      struct port_list *port;
-+};
-+
-+static void pipe_interrupt(int irq, void *data, struct pt_regs *regs)
-+{
-+      struct connection *conn = data;
-+      int fd;
-+
-+      fd = os_rcv_fd(conn->socket[0], &conn->helper_pid);
-+      if(fd < 0){
-+              if(fd == -EAGAIN)
-+                      return;
-+
-+              printk(KERN_ERR "pipe_interrupt : os_rcv_fd returned %d\n",
-+                     -fd);
-+              os_close_file(conn->fd);
-+      }
-+
-+      list_del(&conn->list);
-+
-+      conn->fd = fd;
-+      list_add(&conn->list, &conn->port->connections);
-+
-+      up(&conn->port->sem);
-+}
-+
-+static int port_accept(struct port_list *port)
-+{
-+      struct connection *conn;
-+      int fd, socket[2], pid, ret = 0;
-+
-+      fd = port_connection(port->fd, socket, &pid);
-+      if(fd < 0){
-+              if(fd != -EAGAIN)
-+                      printk(KERN_ERR "port_accept : port_connection "
-+                             "returned %d\n", -fd);
-+              goto out;
-+      }
-+
-+      conn = kmalloc(sizeof(*conn), GFP_ATOMIC);
-+      if(conn == NULL){
-+              printk(KERN_ERR "port_accept : failed to allocate "
-+                     "connection\n");
-+              goto out_close;
-+      }
-+      *conn = ((struct connection) 
-+              { .list         = LIST_HEAD_INIT(conn->list),
-+                .fd           = fd,
-+                .socket       = { socket[0], socket[1] },
-+                .telnetd_pid  = pid,
-+                .port         = port });
-+
-+      if(um_request_irq(TELNETD_IRQ, socket[0], IRQ_READ, pipe_interrupt, 
-+                        SA_INTERRUPT | SA_SHIRQ | SA_SAMPLE_RANDOM, 
-+                        "telnetd", conn)){
-+              printk(KERN_ERR "port_accept : failed to get IRQ for "
-+                     "telnetd\n");
-+              goto out_free;
-+      }
-+
-+      list_add(&conn->list, &port->pending);
-+      return(1);
-+
-+ out_free:
-+      kfree(conn);
-+ out_close:
-+      os_close_file(fd);
-+      if(pid != -1) 
-+              os_kill_process(pid, 1);
-+ out:
-+      return(ret);
-+} 
-+
-+DECLARE_MUTEX(ports_sem);
-+struct list_head ports = LIST_HEAD_INIT(ports);
-+
-+void port_task_proc(void *unused)
-+{
-+      struct port_list *port;
-+      struct list_head *ele;
-+      unsigned long flags;
-+
-+      save_flags(flags);
-+      list_for_each(ele, &ports){
-+              port = list_entry(ele, struct port_list, list);
-+              if(!port->has_connection)
-+                      continue;
-+              reactivate_fd(port->fd, ACCEPT_IRQ);
-+              while(port_accept(port)) ;
-+              port->has_connection = 0;
-+      }
-+      restore_flags(flags);
-+}
-+
-+struct tq_struct port_task = {
-+      .routine        = port_task_proc,
-+      .data           = NULL
-+};
-+
-+static void port_interrupt(int irq, void *data, struct pt_regs *regs)
-+{
-+      struct port_list *port = data;
-+
-+      port->has_connection = 1;
-+      schedule_task(&port_task);
-+} 
-+
-+void *port_data(int port_num)
-+{
-+      struct list_head *ele;
-+      struct port_list *port;
-+      struct port_dev *dev = NULL;
-+      int fd;
-+
-+      down(&ports_sem);
-+      list_for_each(ele, &ports){
-+              port = list_entry(ele, struct port_list, list);
-+              if(port->port == port_num) goto found;
-+      }
-+      port = kmalloc(sizeof(struct port_list), GFP_KERNEL);
-+      if(port == NULL){
-+              printk(KERN_ERR "Allocation of port list failed\n");
-+              goto out;
-+      }
-+
-+      fd = port_listen_fd(port_num);
-+      if(fd < 0){
-+              printk(KERN_ERR "binding to port %d failed, errno = %d\n",
-+                     port_num, -fd);
-+              goto out_free;
-+      }
-+      if(um_request_irq(ACCEPT_IRQ, fd, IRQ_READ, port_interrupt, 
-+                        SA_INTERRUPT | SA_SHIRQ | SA_SAMPLE_RANDOM, "port",
-+                        port)){
-+              printk(KERN_ERR "Failed to get IRQ for port %d\n", port_num);
-+              goto out_close;
-+      }
-+
-+      *port = ((struct port_list) 
-+              { .list                 = LIST_HEAD_INIT(port->list),
-+                .has_connection       = 0,
-+                .sem                  = __SEMAPHORE_INITIALIZER(port->sem, 
-+                                                                0),
-+                .lock                 = SPIN_LOCK_UNLOCKED,
-+                .port                 = port_num,
-+                .fd                   = fd,
-+                .pending              = LIST_HEAD_INIT(port->pending),
-+                .connections          = LIST_HEAD_INIT(port->connections) });
-+      list_add(&port->list, &ports);
-+
-+ found:
-+      dev = kmalloc(sizeof(struct port_dev), GFP_KERNEL);
-+      if(dev == NULL){
-+              printk(KERN_ERR "Allocation of port device entry failed\n");
-+              goto out;
-+      }
-+
-+      *dev = ((struct port_dev) { .port               = port,
-+                                  .helper_pid         = -1,
-+                                  .telnetd_pid        = -1 });
-+      goto out;
-+
-+ out_free:
-+      kfree(port);
-+ out_close:
-+      os_close_file(fd);
-+ out:
-+      up(&ports_sem);
-+      return(dev);
-+}
-+
-+int port_wait(void *data)
-+{
-+      struct port_dev *dev = data;
-+      struct connection *conn;
-+      struct port_list *port = dev->port;
-+      int fd;
-+
-+      while(1){
-+              if(down_interruptible(&port->sem)) 
-+                      return(-ERESTARTSYS);
-+
-+              spin_lock(&port->lock);
-+
-+              conn = list_entry(port->connections.next, struct connection, 
-+                                list);
-+              list_del(&conn->list);
-+              spin_unlock(&port->lock);
-+
-+              os_shutdown_socket(conn->socket[0], 1, 1);
-+              os_close_file(conn->socket[0]);
-+              os_shutdown_socket(conn->socket[1], 1, 1);
-+              os_close_file(conn->socket[1]); 
-+
-+              /* This is done here because freeing an IRQ can't be done
-+               * within the IRQ handler.  So, pipe_interrupt always ups
-+               * the semaphore regardless of whether it got a successful
-+               * connection.  Then we loop here throwing out failed 
-+               * connections until a good one is found.
-+               */
-+              free_irq(TELNETD_IRQ, conn);
-+
-+              if(conn->fd >= 0) break;
-+              os_close_file(conn->fd);
-+              kfree(conn);
-+      }
-+
-+      fd = conn->fd;
-+      dev->helper_pid = conn->helper_pid;
-+      dev->telnetd_pid = conn->telnetd_pid;
-+      kfree(conn);
-+
-+      return(fd);
-+}
-+
-+void port_remove_dev(void *d)
-+{
-+      struct port_dev *dev = d;
-+
-+      if(dev->helper_pid != -1)
-+              os_kill_process(dev->helper_pid, 0);
-+      if(dev->telnetd_pid != -1)
-+              os_kill_process(dev->telnetd_pid, 1);
-+      dev->helper_pid = -1;
-+      dev->telnetd_pid = -1;
-+}
-+
-+void port_kern_free(void *d)
-+{
-+      struct port_dev *dev = d;
-+
-+      port_remove_dev(dev);
-+      kfree(dev);
-+}
-+
-+static void free_port(void)
-+{
-+      struct list_head *ele;
-+      struct port_list *port;
-+
-+      list_for_each(ele, &ports){
-+              port = list_entry(ele, struct port_list, list);
-+              free_irq_by_fd(port->fd);
-+              os_close_file(port->fd);
-+      }
-+}
-+
-+__uml_exitcall(free_port);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/port_user.c um/arch/um/drivers/port_user.c
---- orig/arch/um/drivers/port_user.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/port_user.c     2002-12-16 22:46:20.000000000 -0500
-@@ -0,0 +1,206 @@
-+/* 
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <stddef.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <termios.h>
-+#include <sys/socket.h>
-+#include <sys/un.h>
-+#include <netinet/in.h>
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "chan_user.h"
-+#include "port.h"
-+#include "helper.h"
-+#include "os.h"
-+
-+struct port_chan {
-+      int raw;
-+      struct termios tt;
-+      void *kernel_data;
-+      char dev[sizeof("32768\0")];
-+};
-+
-+void *port_init(char *str, int device, struct chan_opts *opts)
-+{
-+      struct port_chan *data;
-+      void *kern_data;
-+      char *end;
-+      int port;
-+
-+      if(*str != ':'){
-+              printk("port_init : channel type 'port' must specify a "
-+                     "port number\n");
-+              return(NULL);
-+      }
-+      str++;
-+      port = strtoul(str, &end, 0);
-+      if((*end != '\0') || (end == str)){
-+              printk("port_init : couldn't parse port '%s'\n", str);
-+              return(NULL);
-+      }
-+
-+      if((kern_data = port_data(port)) == NULL) 
-+              return(NULL);
-+
-+      if((data = um_kmalloc(sizeof(*data))) == NULL) 
-+              goto err;
-+
-+      *data = ((struct port_chan) { .raw              = opts->raw,
-+                                    .kernel_data      = kern_data });
-+      sprintf(data->dev, "%d", port);
-+
-+      return(data);
-+ err:
-+      port_kern_free(kern_data);
-+      return(NULL);
-+}
-+
-+void port_free(void *d)
-+{
-+      struct port_chan *data = d;
-+
-+      port_kern_free(data->kernel_data);
-+      kfree(data);
-+}
-+
-+int port_open(int input, int output, int primary, void *d, char **dev_out)
-+{
-+      struct port_chan *data = d;
-+      int fd;
-+
-+      fd = port_wait(data->kernel_data);
-+      if((fd >= 0) && data->raw){
-+              tcgetattr(fd, &data->tt);
-+              raw(fd, 0);
-+      }
-+      *dev_out = data->dev;
-+      return(fd);
-+}
-+
-+void port_close(int fd, void *d)
-+{
-+      struct port_chan *data = d;
-+
-+      port_remove_dev(data->kernel_data);
-+      close(fd);
-+}
-+
-+int port_console_write(int fd, const char *buf, int n, void *d)
-+{
-+      struct port_chan *data = d;
-+
-+      return(generic_console_write(fd, buf, n, &data->tt));
-+}
-+
-+struct chan_ops port_ops = {
-+      .type           = "port",
-+      .init           = port_init,
-+      .open           = port_open,
-+      .close          = port_close,
-+      .read           = generic_read,
-+      .write          = generic_write,
-+      .console_write  = port_console_write,
-+      .window_size    = generic_window_size,
-+      .free           = port_free,
-+      .winch          = 1,
-+};
-+
-+int port_listen_fd(int port)
-+{
-+      struct sockaddr_in addr;
-+      int fd, err;
-+
-+      fd = socket(PF_INET, SOCK_STREAM, 0);
-+      if(fd == -1) 
-+              return(-errno);
-+
-+      addr.sin_family = AF_INET;
-+      addr.sin_port = htons(port);
-+      addr.sin_addr.s_addr = htonl(INADDR_ANY);
-+      if(bind(fd, (struct sockaddr *) &addr, sizeof(addr)) < 0){
-+              err = -errno;
-+              goto out;
-+      }
-+  
-+      if((listen(fd, 1) < 0) || (os_set_fd_block(fd, 0))){
-+              err = -errno;
-+              goto out;
-+      }
-+
-+      return(fd);
-+ out:
-+      os_close_file(fd);
-+      return(err);
-+}
-+
-+struct port_pre_exec_data {
-+      int sock_fd;
-+      int pipe_fd;
-+};
-+
-+void port_pre_exec(void *arg)
-+{
-+      struct port_pre_exec_data *data = arg;
-+
-+      dup2(data->sock_fd, 0);
-+      dup2(data->sock_fd, 1);
-+      dup2(data->sock_fd, 2);
-+      close(data->sock_fd);
-+      dup2(data->pipe_fd, 3);
-+      os_shutdown_socket(3, 1, 0);
-+      close(data->pipe_fd);
-+}
-+
-+int port_connection(int fd, int *socket, int *pid_out)
-+{
-+      int new, err;
-+      char *argv[] = { "/usr/sbin/in.telnetd", "-L", 
-+                       "/usr/lib/uml/port-helper", NULL };
-+      struct port_pre_exec_data data;
-+
-+      if((new = os_accept_connection(fd)) < 0)
-+              return(-errno);
-+
-+      err = os_pipe(socket, 0, 0);
-+      if(err) 
-+              goto out_close;
-+
-+      data = ((struct port_pre_exec_data)
-+              { .sock_fd              = new,
-+                .pipe_fd              = socket[1] });
-+
-+      err = run_helper(port_pre_exec, &data, argv, NULL);
-+      if(err < 0) 
-+              goto out_shutdown;
-+
-+      *pid_out = err;
-+      return(new);
-+
-+ out_shutdown:
-+      os_shutdown_socket(socket[0], 1, 1);
-+      close(socket[0]);
-+      os_shutdown_socket(socket[1], 1, 1);    
-+      close(socket[1]);
-+ out_close:
-+      close(new);
-+      return(err);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/pty.c um/arch/um/drivers/pty.c
---- orig/arch/um/drivers/pty.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/pty.c   2002-12-15 21:06:01.000000000 -0500
-@@ -0,0 +1,148 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <unistd.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <termios.h>
-+#include "chan_user.h"
-+#include "user.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+
-+struct pty_chan {
-+      void (*announce)(char *dev_name, int dev);
-+      int dev;
-+      int raw;
-+      struct termios tt;
-+      char dev_name[sizeof("/dev/pts/0123456\0")];
-+};
-+
-+void *pty_chan_init(char *str, int device, struct chan_opts *opts)
-+{
-+      struct pty_chan *data;
-+
-+      if((data = um_kmalloc(sizeof(*data))) == NULL) return(NULL);
-+      *data = ((struct pty_chan) { .announce          = opts->announce, 
-+                                   .dev               = device,
-+                                   .raw               = opts->raw });
-+      return(data);
-+}
-+
-+int pts_open(int input, int output, int primary, void *d, char **dev_out)
-+{
-+      struct pty_chan *data = d;
-+      char *dev;
-+      int fd;
-+
-+      if((fd = get_pty()) < 0){
-+              printk("open_pts : Failed to open pts\n");
-+              return(-errno);
-+      }
-+      if(data->raw){
-+              tcgetattr(fd, &data->tt);
-+              raw(fd, 0);
-+      }
-+
-+      dev = ptsname(fd);
-+      sprintf(data->dev_name, "%s", dev);
-+      *dev_out = data->dev_name;
-+      if(data->announce) (*data->announce)(dev, data->dev);
-+      return(fd);
-+}
-+
-+int getmaster(char *line)
-+{
-+      struct stat stb;
-+      char *pty, *bank, *cp;
-+      int master;
-+
-+      pty = &line[strlen("/dev/ptyp")];
-+      for (bank = "pqrs"; *bank; bank++) {
-+              line[strlen("/dev/pty")] = *bank;
-+              *pty = '0';
-+              if (stat(line, &stb) < 0)
-+                      break;
-+              for (cp = "0123456789abcdef"; *cp; cp++) {
-+                      *pty = *cp;
-+                      master = open(line, O_RDWR);
-+                      if (master >= 0) {
-+                              char *tp = &line[strlen("/dev/")];
-+                              int ok;
-+
-+                              /* verify slave side is usable */
-+                              *tp = 't';
-+                              ok = access(line, R_OK|W_OK) == 0;
-+                              *tp = 'p';
-+                              if (ok) return(master);
-+                              (void) close(master);
-+                      }
-+              }
-+      }
-+      return(-1);
-+}
-+
-+int pty_open(int input, int output, int primary, void *d, char **dev_out)
-+{
-+      struct pty_chan *data = d;
-+      int fd;
-+      char dev[sizeof("/dev/ptyxx\0")] = "/dev/ptyxx";
-+
-+      fd = getmaster(dev);
-+      if(fd < 0) return(-errno);
-+      
-+      if(data->raw) raw(fd, 0);
-+      if(data->announce) (*data->announce)(dev, data->dev);
-+
-+      sprintf(data->dev_name, "%s", dev);
-+      *dev_out = data->dev_name;
-+      return(fd);
-+}
-+
-+int pty_console_write(int fd, const char *buf, int n, void *d)
-+{
-+      struct pty_chan *data = d;
-+
-+      return(generic_console_write(fd, buf, n, &data->tt));
-+}
-+
-+struct chan_ops pty_ops = {
-+      .type           = "pty",
-+      .init           = pty_chan_init,
-+      .open           = pty_open,
-+      .close          = generic_close,
-+      .read           = generic_read,
-+      .write          = generic_write,
-+      .console_write  = pty_console_write,
-+      .window_size    = generic_window_size,
-+      .free           = generic_free,
-+      .winch          = 0,
-+};
-+
-+struct chan_ops pts_ops = {
-+      .type           = "pts",
-+      .init           = pty_chan_init,
-+      .open           = pts_open,
-+      .close          = generic_close,
-+      .read           = generic_read,
-+      .write          = generic_write,
-+      .console_write  = pty_console_write,
-+      .window_size    = generic_window_size,
-+      .free           = generic_free,
-+      .winch          = 0,
-+};
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/slip.h um/arch/um/drivers/slip.h
---- orig/arch/um/drivers/slip.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/slip.h  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,39 @@
-+#ifndef __UM_SLIP_H
-+#define __UM_SLIP_H
-+
-+#define BUF_SIZE 1500
-+ /* two bytes each for a (pathological) max packet of escaped chars +  * 
-+  * terminating END char + initial END char                            */
-+#define ENC_BUF_SIZE (2 * BUF_SIZE + 2)
-+
-+struct slip_data {
-+      void *dev;
-+      char name[sizeof("slnnnnn\0")];
-+      char *addr;
-+      char *gate_addr;
-+      int slave;
-+      char ibuf[ENC_BUF_SIZE];
-+      char obuf[ENC_BUF_SIZE];
-+      int more; /* more data: do not read fd until ibuf has been drained */
-+      int pos;
-+      int esc;
-+};
-+
-+extern struct net_user_info slip_user_info;
-+
-+extern int set_umn_addr(int fd, char *addr, char *ptp_addr);
-+extern int slip_user_read(int fd, void *buf, int len, struct slip_data *pri);
-+extern int slip_user_write(int fd, void *buf, int len, struct slip_data *pri);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/slip_kern.c um/arch/um/drivers/slip_kern.c
---- orig/arch/um/drivers/slip_kern.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/slip_kern.c     2002-12-15 21:06:24.000000000 -0500
-@@ -0,0 +1,109 @@
-+#include "linux/config.h"
-+#include "linux/kernel.h"
-+#include "linux/stddef.h"
-+#include "linux/init.h"
-+#include "linux/netdevice.h"
-+#include "linux/if_arp.h"
-+#include "net_kern.h"
-+#include "net_user.h"
-+#include "kern.h"
-+#include "slip.h"
-+
-+struct slip_init {
-+      char *gate_addr;
-+};
-+
-+void slip_init(struct net_device *dev, void *data)
-+{
-+      struct uml_net_private *private;
-+      struct slip_data *spri;
-+      struct slip_init *init = data;
-+
-+      private = dev->priv;
-+      spri = (struct slip_data *) private->user;
-+      *spri = ((struct slip_data)
-+              { .name         = { '\0' },
-+                .addr         = NULL,
-+                .gate_addr    = init->gate_addr,
-+                .slave        = -1,
-+                .ibuf         = { '\0' },
-+                .obuf         = { '\0' },
-+                .pos          = 0,
-+                .esc          = 0,
-+                .dev          = dev });
-+
-+      dev->init = NULL;
-+      dev->hard_header_len = 0;
-+      dev->addr_len = 4;
-+      dev->type = ARPHRD_ETHER;
-+      dev->tx_queue_len = 256;
-+      dev->flags = IFF_NOARP;
-+      printk("SLIP backend - SLIP IP = %s\n", spri->gate_addr);
-+}
-+
-+static unsigned short slip_protocol(struct sk_buff *skbuff)
-+{
-+      return(htons(ETH_P_IP));
-+}
-+
-+static int slip_read(int fd, struct sk_buff **skb, 
-+                     struct uml_net_private *lp)
-+{
-+      return(slip_user_read(fd, (*skb)->mac.raw, (*skb)->dev->mtu, 
-+                            (struct slip_data *) &lp->user));
-+}
-+
-+static int slip_write(int fd, struct sk_buff **skb,
-+                    struct uml_net_private *lp)
-+{
-+      return(slip_user_write(fd, (*skb)->data, (*skb)->len, 
-+                             (struct slip_data *) &lp->user));
-+}
-+
-+struct net_kern_info slip_kern_info = {
-+      .init                   = slip_init,
-+      .protocol               = slip_protocol,
-+      .read                   = slip_read,
-+      .write                  = slip_write,
-+};
-+
-+static int slip_setup(char *str, char **mac_out, void *data)
-+{
-+      struct slip_init *init = data;
-+
-+      *init = ((struct slip_init)
-+              { .gate_addr            = NULL });
-+
-+      if(str[0] != '\0') 
-+              init->gate_addr = str;
-+      return(1);
-+}
-+
-+static struct transport slip_transport = {
-+      .list           = LIST_HEAD_INIT(slip_transport.list),
-+      .name           = "slip",
-+      .setup          = slip_setup,
-+      .user           = &slip_user_info,
-+      .kern           = &slip_kern_info,
-+      .private_size   = sizeof(struct slip_data),
-+      .setup_size     = sizeof(struct slip_init),
-+};
-+
-+static int register_slip(void)
-+{
-+      register_transport(&slip_transport);
-+      return(1);
-+}
-+
-+__initcall(register_slip);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/slip_proto.h um/arch/um/drivers/slip_proto.h
---- orig/arch/um/drivers/slip_proto.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/slip_proto.h    2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,93 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_SLIP_PROTO_H__
-+#define __UM_SLIP_PROTO_H__
-+
-+/* SLIP protocol characters. */
-+#define SLIP_END             0300     /* indicates end of frame       */
-+#define SLIP_ESC             0333     /* indicates byte stuffing      */
-+#define SLIP_ESC_END         0334     /* ESC ESC_END means END 'data' */
-+#define SLIP_ESC_ESC         0335     /* ESC ESC_ESC means ESC 'data' */
-+
-+static inline int slip_unesc(unsigned char c,char *buf,int *pos, int *esc)
-+{
-+      int ret;
-+
-+      switch(c){
-+      case SLIP_END:
-+              *esc = 0;
-+              ret=*pos;
-+              *pos=0;
-+              return(ret);
-+      case SLIP_ESC:
-+              *esc = 1;
-+              return(0);
-+      case SLIP_ESC_ESC:
-+              if(*esc){
-+                      *esc = 0;
-+                      c = SLIP_ESC;
-+              }
-+              break;
-+      case SLIP_ESC_END:
-+              if(*esc){
-+                      *esc = 0;
-+                      c = SLIP_END;
-+              }
-+              break;
-+      }
-+      buf[(*pos)++] = c;
-+      return(0);
-+}
-+
-+static inline int slip_esc(unsigned char *s, unsigned char *d, int len)
-+{
-+      unsigned char *ptr = d;
-+      unsigned char c;
-+
-+      /*
-+       * Send an initial END character to flush out any
-+       * data that may have accumulated in the receiver
-+       * due to line noise.
-+       */
-+
-+      *ptr++ = SLIP_END;
-+
-+      /*
-+       * For each byte in the packet, send the appropriate
-+       * character sequence, according to the SLIP protocol.
-+       */
-+
-+      while (len-- > 0) {
-+              switch(c = *s++) {
-+              case SLIP_END:
-+                      *ptr++ = SLIP_ESC;
-+                      *ptr++ = SLIP_ESC_END;
-+                      break;
-+              case SLIP_ESC:
-+                      *ptr++ = SLIP_ESC;
-+                      *ptr++ = SLIP_ESC_ESC;
-+                      break;
-+              default:
-+                      *ptr++ = c;
-+                      break;
-+              }
-+      }
-+      *ptr++ = SLIP_END;
-+      return (ptr - d);
-+}
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/slip_user.c um/arch/um/drivers/slip_user.c
---- orig/arch/um/drivers/slip_user.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/slip_user.c     2002-12-15 21:06:35.000000000 -0500
-@@ -0,0 +1,279 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <stddef.h>
-+#include <sched.h>
-+#include <string.h>
-+#include <sys/fcntl.h>
-+#include <sys/errno.h>
-+#include <sys/termios.h>
-+#include <sys/wait.h>
-+#include <sys/ioctl.h>
-+#include <sys/signal.h>
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "net_user.h"
-+#include "slip.h"
-+#include "slip_proto.h"
-+#include "helper.h"
-+#include "os.h"
-+
-+void slip_user_init(void *data, void *dev)
-+{
-+      struct slip_data *pri = data;
-+
-+      pri->dev = dev;
-+}
-+
-+static int set_up_tty(int fd)
-+{
-+      int i;
-+      struct termios tios;
-+
-+      if (tcgetattr(fd, &tios) < 0) {
-+              printk("could not get initial terminal attributes\n");
-+              return(-1);
-+      }
-+
-+      tios.c_cflag = CS8 | CREAD | HUPCL | CLOCAL;
-+      tios.c_iflag = IGNBRK | IGNPAR;
-+      tios.c_oflag = 0;
-+      tios.c_lflag = 0;
-+      for (i = 0; i < NCCS; i++)
-+              tios.c_cc[i] = 0;
-+      tios.c_cc[VMIN] = 1;
-+      tios.c_cc[VTIME] = 0;
-+
-+      cfsetospeed(&tios, B38400);
-+      cfsetispeed(&tios, B38400);
-+
-+      if (tcsetattr(fd, TCSAFLUSH, &tios) < 0) {
-+              printk("failed to set terminal attributes\n");
-+              return(-1);
-+      }
-+      return(0);
-+}
-+
-+struct slip_pre_exec_data {
-+      int stdin;
-+      int stdout;
-+      int close_me;
-+};
-+
-+static void slip_pre_exec(void *arg)
-+{
-+      struct slip_pre_exec_data *data = arg;
-+
-+      if(data->stdin != -1) dup2(data->stdin, 0);
-+      dup2(data->stdout, 1);
-+      if(data->close_me != -1) close(data->close_me);
-+}
-+
-+static int slip_tramp(char **argv, int fd)
-+{
-+      struct slip_pre_exec_data pe_data;
-+      char *output;
-+      int status, pid, fds[2], err, output_len;
-+
-+      err = os_pipe(fds, 1, 0);
-+      if(err){
-+              printk("slip_tramp : pipe failed, errno = %d\n", -err);
-+              return(err);
-+      }
-+
-+      err = 0;
-+      pe_data.stdin = fd;
-+      pe_data.stdout = fds[1];
-+      pe_data.close_me = fds[0];
-+      pid = run_helper(slip_pre_exec, &pe_data, argv, NULL);
-+
-+      if(pid < 0) err = pid;
-+      else {
-+              output_len = page_size();
-+              output = um_kmalloc(output_len);
-+              if(output == NULL)
-+                      printk("slip_tramp : failed to allocate output "
-+                             "buffer\n");
-+
-+              close(fds[1]);
-+              read_output(fds[0], output, output_len);
-+              if(output != NULL){
-+                      printk("%s", output);
-+                      kfree(output);
-+              }
-+              if(waitpid(pid, &status, 0) < 0) err = errno;
-+              else if(!WIFEXITED(status) || (WEXITSTATUS(status) != 0)){
-+                      printk("'%s' didn't exit with status 0\n", argv[0]);
-+                      err = EINVAL;
-+              }
-+      }
-+      return(err);
-+}
-+
-+static int slip_open(void *data)
-+{
-+      struct slip_data *pri = data;
-+      char version_buf[sizeof("nnnnn\0")];
-+      char gate_buf[sizeof("nnn.nnn.nnn.nnn\0")];
-+      char *argv[] = { "uml_net", version_buf, "slip", "up", gate_buf, 
-+                       NULL };
-+      int sfd, mfd, disc, sencap, err;
-+
-+      if((mfd = get_pty()) < 0){
-+              printk("umn : Failed to open pty\n");
-+              return(-1);
-+      }
-+      if((sfd = os_open_file(ptsname(mfd), of_rdwr(OPENFLAGS()), 0)) < 0){
-+              printk("Couldn't open tty for slip line\n");
-+              return(-1);
-+      }
-+      if(set_up_tty(sfd)) return(-1);
-+      pri->slave = sfd;
-+      pri->pos = 0;
-+      pri->esc = 0;
-+      if(pri->gate_addr != NULL){
-+              sprintf(version_buf, "%d", UML_NET_VERSION);
-+              strcpy(gate_buf, pri->gate_addr);
-+
-+              err = slip_tramp(argv, sfd);
-+
-+              if(err != 0){
-+                      printk("slip_tramp failed - errno = %d\n", err);
-+                      return(-err);
-+              }
-+              if(ioctl(pri->slave, SIOCGIFNAME, pri->name) < 0){
-+                      printk("SIOCGIFNAME failed, errno = %d\n", errno);
-+                      return(-errno);
-+              }
-+              iter_addresses(pri->dev, open_addr, pri->name);
-+      }
-+      else {
-+              disc = N_SLIP;
-+              if(ioctl(sfd, TIOCSETD, &disc) < 0){
-+                      printk("Failed to set slip line discipline - "
-+                             "errno = %d\n", errno);
-+                      return(-errno);
-+              }
-+              sencap = 0;
-+              if(ioctl(sfd, SIOCSIFENCAP, &sencap) < 0){
-+                      printk("Failed to set slip encapsulation - "
-+                             "errno = %d\n", errno);
-+                      return(-errno);
-+              }
-+      }
-+      return(mfd);
-+}
-+
-+static void slip_close(int fd, void *data)
-+{
-+      struct slip_data *pri = data;
-+      char version_buf[sizeof("nnnnn\0")];
-+      char *argv[] = { "uml_net", version_buf, "slip", "down", pri->name, 
-+                       NULL };
-+      int err;
-+
-+      if(pri->gate_addr != NULL)
-+              iter_addresses(pri->dev, close_addr, pri->name);
-+
-+      sprintf(version_buf, "%d", UML_NET_VERSION);
-+
-+      err = slip_tramp(argv, -1);
-+
-+      if(err != 0)
-+              printk("slip_tramp failed - errno = %d\n", err);
-+      close(fd);
-+      close(pri->slave);
-+      pri->slave = -1;
-+}
-+
-+int slip_user_read(int fd, void *buf, int len, struct slip_data *pri)
-+{
-+      int i, n, size, start;
-+
-+      if(pri->more>0) {
-+              i = 0;
-+              while(i < pri->more) {
-+                      size = slip_unesc(pri->ibuf[i++],
-+                                      pri->ibuf, &pri->pos, &pri->esc);
-+                      if(size){
-+                              memcpy(buf, pri->ibuf, size);
-+                              memmove(pri->ibuf, &pri->ibuf[i], pri->more-i);
-+                              pri->more=pri->more-i; 
-+                              return(size);
-+                      }
-+              }
-+              pri->more=0;
-+      }
-+
-+      n = net_read(fd, &pri->ibuf[pri->pos], sizeof(pri->ibuf) - pri->pos);
-+      if(n <= 0) return(n);
-+
-+      start = pri->pos;
-+      for(i = 0; i < n; i++){
-+              size = slip_unesc(pri->ibuf[start + i],
-+                              pri->ibuf, &pri->pos, &pri->esc);
-+              if(size){
-+                      memcpy(buf, pri->ibuf, size);
-+                      memmove(pri->ibuf, &pri->ibuf[start+i+1], n-(i+1));
-+                      pri->more=n-(i+1); 
-+                      return(size);
-+              }
-+      }
-+      return(0);
-+}
-+
-+int slip_user_write(int fd, void *buf, int len, struct slip_data *pri)
-+{
-+      int actual, n;
-+
-+      actual = slip_esc(buf, pri->obuf, len);
-+      n = net_write(fd, pri->obuf, actual);
-+      if(n < 0) return(n);
-+      else return(len);
-+}
-+
-+static int slip_set_mtu(int mtu, void *data)
-+{
-+      return(mtu);
-+}
-+
-+static void slip_add_addr(unsigned char *addr, unsigned char *netmask,
-+                        void *data)
-+{
-+      struct slip_data *pri = data;
-+
-+      if(pri->slave == -1) return;
-+      open_addr(addr, netmask, pri->name);
-+}
-+
-+static void slip_del_addr(unsigned char *addr, unsigned char *netmask,
-+                          void *data)
-+{
-+      struct slip_data *pri = data;
-+
-+      if(pri->slave == -1) return;
-+      close_addr(addr, netmask, pri->name);
-+}
-+
-+struct net_user_info slip_user_info = {
-+      .init           = slip_user_init,
-+      .open           = slip_open,
-+      .close          = slip_close,
-+      .remove         = NULL,
-+      .set_mtu        = slip_set_mtu,
-+      .add_address    = slip_add_addr,
-+      .delete_address = slip_del_addr,
-+      .max_packet     = BUF_SIZE
-+};
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/slirp.h um/arch/um/drivers/slirp.h
---- orig/arch/um/drivers/slirp.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/slirp.h 2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,51 @@
-+#ifndef __UM_SLIRP_H
-+#define __UM_SLIRP_H
-+
-+#define BUF_SIZE 1500
-+ /* two bytes each for a (pathological) max packet of escaped chars +  * 
-+  * terminating END char + initial END char                            */
-+#define ENC_BUF_SIZE (2 * BUF_SIZE + 2)
-+
-+#define SLIRP_MAX_ARGS 100
-+/*
-+ * XXX this next definition is here because I don't understand why this
-+ * initializer doesn't work in slirp_kern.c:
-+ *
-+ *   argv :  { init->argv[ 0 ... SLIRP_MAX_ARGS-1 ] },
-+ *
-+ * or why I can't typecast like this:
-+ *
-+ *   argv :  (char* [SLIRP_MAX_ARGS])(init->argv), 
-+ */
-+struct arg_list_dummy_wrapper { char *argv[SLIRP_MAX_ARGS]; };
-+
-+struct slirp_data {
-+      void *dev;
-+      struct arg_list_dummy_wrapper argw;
-+      int pid;
-+      int slave;
-+      char ibuf[ENC_BUF_SIZE];
-+      char obuf[ENC_BUF_SIZE];
-+      int more; /* more data: do not read fd until ibuf has been drained */
-+      int pos;
-+      int esc;
-+};
-+
-+extern struct net_user_info slirp_user_info;
-+
-+extern int set_umn_addr(int fd, char *addr, char *ptp_addr);
-+extern int slirp_user_read(int fd, void *buf, int len, struct slirp_data *pri);
-+extern int slirp_user_write(int fd, void *buf, int len, struct slirp_data *pri);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/slirp_kern.c um/arch/um/drivers/slirp_kern.c
---- orig/arch/um/drivers/slirp_kern.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/slirp_kern.c    2002-12-15 21:06:54.000000000 -0500
-@@ -0,0 +1,132 @@
-+#include "linux/kernel.h"
-+#include "linux/stddef.h"
-+#include "linux/init.h"
-+#include "linux/netdevice.h"
-+#include "linux/if_arp.h"
-+#include "net_kern.h"
-+#include "net_user.h"
-+#include "kern.h"
-+#include "slirp.h"
-+
-+struct slirp_init {
-+      struct arg_list_dummy_wrapper argw;  /* XXX should be simpler... */
-+};
-+
-+void slirp_init(struct net_device *dev, void *data)
-+{
-+      struct uml_net_private *private;
-+      struct slirp_data *spri;
-+      struct slirp_init *init = data;
-+      int i;
-+
-+      private = dev->priv;
-+      spri = (struct slirp_data *) private->user;
-+      *spri = ((struct slirp_data)
-+              { .argw         = init->argw,
-+                .pid          = -1,
-+                .slave        = -1,
-+                .ibuf         = { '\0' },
-+                .obuf         = { '\0' },
-+                .pos          = 0,
-+                .esc          = 0,
-+                .dev          = dev });
-+
-+      dev->init = NULL;
-+      dev->hard_header_len = 0;
-+      dev->addr_len = 4;
-+      dev->type = ARPHRD_ETHER;
-+      dev->tx_queue_len = 256;
-+      dev->flags = IFF_NOARP;
-+      printk("SLIRP backend - command line:");
-+      for(i=0;spri->argw.argv[i]!=NULL;i++) {
-+              printk(" '%s'",spri->argw.argv[i]);
-+      }
-+      printk("\n");
-+}
-+
-+static unsigned short slirp_protocol(struct sk_buff *skbuff)
-+{
-+      return(htons(ETH_P_IP));
-+}
-+
-+static int slirp_read(int fd, struct sk_buff **skb, 
-+                     struct uml_net_private *lp)
-+{
-+      return(slirp_user_read(fd, (*skb)->mac.raw, (*skb)->dev->mtu, 
-+                            (struct slirp_data *) &lp->user));
-+}
-+
-+static int slirp_write(int fd, struct sk_buff **skb,
-+                    struct uml_net_private *lp)
-+{
-+      return(slirp_user_write(fd, (*skb)->data, (*skb)->len, 
-+                             (struct slirp_data *) &lp->user));
-+}
-+
-+struct net_kern_info slirp_kern_info = {
-+      .init                   = slirp_init,
-+      .protocol               = slirp_protocol,
-+      .read                   = slirp_read,
-+      .write                  = slirp_write,
-+};
-+
-+static int slirp_setup(char *str, char **mac_out, void *data)
-+{
-+      struct slirp_init *init = data;
-+      int i=0;
-+
-+      *init = ((struct slirp_init)
-+              { argw :                { { "slirp", NULL  } } });
-+
-+      str = split_if_spec(str, mac_out, NULL);
-+
-+      if(str == NULL) { /* no command line given after MAC addr */
-+              return(1);
-+      }
-+
-+      do {
-+              if(i>=SLIRP_MAX_ARGS-1) {
-+                      printk("slirp_setup: truncating slirp arguments\n");
-+                      break;
-+              }
-+              init->argw.argv[i++] = str;
-+              while(*str && *str!=',') {
-+                      if(*str=='_') *str=' ';
-+                      str++;
-+              }
-+              if(*str!=',')
-+                      break;
-+              *str++='\0';
-+      } while(1);
-+      init->argw.argv[i]=NULL;
-+      return(1);
-+}
-+
-+static struct transport slirp_transport = {
-+      .list           = LIST_HEAD_INIT(slirp_transport.list),
-+      .name           = "slirp",
-+      .setup          = slirp_setup,
-+      .user           = &slirp_user_info,
-+      .kern           = &slirp_kern_info,
-+      .private_size   = sizeof(struct slirp_data),
-+      .setup_size     = sizeof(struct slirp_init),
-+};
-+
-+static int register_slirp(void)
-+{
-+      register_transport(&slirp_transport);
-+      return(1);
-+}
-+
-+__initcall(register_slirp);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/slirp_user.c um/arch/um/drivers/slirp_user.c
---- orig/arch/um/drivers/slirp_user.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/slirp_user.c    2002-12-15 21:07:08.000000000 -0500
-@@ -0,0 +1,202 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <stddef.h>
-+#include <sched.h>
-+#include <string.h>
-+#include <sys/fcntl.h>
-+#include <sys/errno.h>
-+#include <sys/wait.h>
-+#include <sys/signal.h>
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "net_user.h"
-+#include "slirp.h"
-+#include "slip_proto.h"
-+#include "helper.h"
-+#include "os.h"
-+
-+void slirp_user_init(void *data, void *dev)
-+{
-+      struct slirp_data *pri = data;
-+
-+      pri->dev = dev;
-+}
-+
-+struct slirp_pre_exec_data {
-+      int stdin;
-+      int stdout;
-+};
-+
-+static void slirp_pre_exec(void *arg)
-+{
-+      struct slirp_pre_exec_data *data = arg;
-+
-+      if(data->stdin != -1) dup2(data->stdin, 0);
-+      if(data->stdout != -1) dup2(data->stdout, 1);
-+}
-+
-+static int slirp_tramp(char **argv, int fd)
-+{
-+      struct slirp_pre_exec_data pe_data;
-+      int pid;
-+
-+      pe_data.stdin = fd;
-+      pe_data.stdout = fd;
-+      pid = run_helper(slirp_pre_exec, &pe_data, argv, NULL);
-+
-+      return(pid);
-+}
-+ 
-+static int slirp_datachan(int *mfd, int *sfd)
-+{
-+      int fds[2], err;
-+
-+      err = os_pipe(fds, 1, 1);
-+      if(err){
-+              printk("slirp_datachan: Failed to open pipe, errno = %d\n",
-+                     -err);
-+              return(err);
-+      }
-+
-+      *mfd = fds[0];
-+      *sfd = fds[1];
-+      return(0);
-+}
-+
-+static int slirp_open(void *data)
-+{
-+      struct slirp_data *pri = data;
-+      int sfd, mfd, pid, err;
-+
-+      err = slirp_datachan(&mfd, &sfd);
-+      if(err)
-+              return(err);
-+
-+      pid = slirp_tramp(pri->argw.argv, sfd);
-+
-+      if(pid < 0){
-+              printk("slirp_tramp failed - errno = %d\n", pid);
-+              os_close_file(sfd);     
-+              os_close_file(mfd);     
-+              return(pid);
-+      }
-+
-+      pri->slave = sfd;
-+      pri->pos = 0;
-+      pri->esc = 0;
-+
-+      pri->pid = pid;
-+
-+      return(mfd);
-+}
-+
-+static void slirp_close(int fd, void *data)
-+{
-+      struct slirp_data *pri = data;
-+      int status,err;
-+
-+      close(fd);
-+      close(pri->slave);
-+
-+      pri->slave = -1;
-+
-+      if(pri->pid<1) {
-+              printk("slirp_close: no child process to shut down\n");
-+              return;
-+      }
-+
-+#if 0
-+      if(kill(pri->pid, SIGHUP)<0) {
-+              printk("slirp_close: sending hangup to %d failed (%d)\n",
-+                      pri->pid, errno);
-+      }
-+#endif
-+
-+      err = waitpid(pri->pid, &status, WNOHANG);
-+      if(err<0) {
-+              printk("slirp_close: waitpid returned %d\n", errno);
-+              return;
-+      }
-+
-+      if(err==0) {
-+              printk("slirp_close: process %d has not exited\n");
-+              return;
-+      }
-+
-+      pri->pid = -1;
-+}
-+
-+int slirp_user_read(int fd, void *buf, int len, struct slirp_data *pri)
-+{
-+      int i, n, size, start;
-+
-+      if(pri->more>0) {
-+              i = 0;
-+              while(i < pri->more) {
-+                      size = slip_unesc(pri->ibuf[i++],
-+                                      pri->ibuf,&pri->pos,&pri->esc);
-+                      if(size){
-+                              memcpy(buf, pri->ibuf, size);
-+                              memmove(pri->ibuf, &pri->ibuf[i], pri->more-i);
-+                              pri->more=pri->more-i; 
-+                              return(size);
-+                      }
-+              }
-+              pri->more=0;
-+      }
-+
-+      n = net_read(fd, &pri->ibuf[pri->pos], sizeof(pri->ibuf) - pri->pos);
-+      if(n <= 0) return(n);
-+
-+      start = pri->pos;
-+      for(i = 0; i < n; i++){
-+              size = slip_unesc(pri->ibuf[start + i],
-+                              pri->ibuf,&pri->pos,&pri->esc);
-+              if(size){
-+                      memcpy(buf, pri->ibuf, size);
-+                      memmove(pri->ibuf, &pri->ibuf[start+i+1], n-(i+1));
-+                      pri->more=n-(i+1); 
-+                      return(size);
-+              }
-+      }
-+      return(0);
-+}
-+
-+int slirp_user_write(int fd, void *buf, int len, struct slirp_data *pri)
-+{
-+      int actual, n;
-+
-+      actual = slip_esc(buf, pri->obuf, len);
-+      n = net_write(fd, pri->obuf, actual);
-+      if(n < 0) return(n);
-+      else return(len);
-+}
-+
-+static int slirp_set_mtu(int mtu, void *data)
-+{
-+      return(mtu);
-+}
-+
-+struct net_user_info slirp_user_info = {
-+      .init           = slirp_user_init,
-+      .open           = slirp_open,
-+      .close          = slirp_close,
-+      .remove         = NULL,
-+      .set_mtu        = slirp_set_mtu,
-+      .add_address    = NULL,
-+      .delete_address = NULL,
-+      .max_packet     = BUF_SIZE
-+};
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/ssl.c um/arch/um/drivers/ssl.c
---- orig/arch/um/drivers/ssl.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/ssl.c   2003-03-06 18:55:01.000000000 -0500
-@@ -0,0 +1,265 @@
-+/* 
-+ * Copyright (C) 2000, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/config.h"
-+#include "linux/fs.h"
-+#include "linux/tty.h"
-+#include "linux/tty_driver.h"
-+#include "linux/major.h"
-+#include "linux/mm.h"
-+#include "linux/init.h"
-+#include "asm/termbits.h"
-+#include "asm/irq.h"
-+#include "line.h"
-+#include "ssl.h"
-+#include "chan_kern.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "kern.h"
-+#include "init.h"
-+#include "irq_user.h"
-+#include "mconsole_kern.h"
-+#include "2_5compat.h"
-+
-+static int ssl_version = 1;
-+
-+/* Referenced only by tty_driver below - presumably it's locked correctly
-+ * by the tty driver.
-+ */
-+static int ssl_refcount = 0;
-+
-+static struct tty_driver ssl_driver;
-+
-+#define NR_PORTS 64
-+
-+void ssl_announce(char *dev_name, int dev)
-+{
-+      printk(KERN_INFO "Serial line %d assigned device '%s'\n", dev,
-+             dev_name);
-+}
-+
-+static struct chan_opts opts = {
-+      .announce       = ssl_announce,
-+      .xterm_title    = "Serial Line #%d",
-+      .raw            = 1,
-+      .tramp_stack    = 0,
-+      .in_kernel      = 1,
-+};
-+
-+static int ssl_config(char *str);
-+static int ssl_get_config(char *dev, char *str, int size, char **error_out);
-+static int ssl_remove(char *str);
-+
-+static struct line_driver driver = {
-+      .name                   = "UML serial line",
-+      .devfs_name             = "tts/%d",
-+      .major                  = TTY_MAJOR,
-+      .minor_start            = 64,
-+      .type                   = TTY_DRIVER_TYPE_SERIAL,
-+      .subtype                = 0,
-+      .read_irq               = SSL_IRQ,
-+      .read_irq_name          = "ssl",
-+      .write_irq              = SSL_WRITE_IRQ,
-+      .write_irq_name         = "ssl-write",
-+      .symlink_from           = "serial",
-+      .symlink_to             = "tts",
-+      .mc  = {
-+              .name           = "ssl",
-+              .config         = ssl_config,
-+              .get_config     = ssl_get_config,
-+              .remove         = ssl_remove,
-+      },
-+};
-+
-+/* The array is initialized by line_init, which is an initcall.  The 
-+ * individual elements are protected by individual semaphores.
-+ */
-+static struct line serial_lines[NR_PORTS] =
-+      { [0 ... NR_PORTS - 1] = LINE_INIT(CONFIG_SSL_CHAN, &driver) };
-+
-+static struct lines lines = LINES_INIT(NR_PORTS);
-+
-+static int ssl_config(char *str)
-+{
-+      return(line_config(serial_lines, 
-+                         sizeof(serial_lines)/sizeof(serial_lines[0]), str));
-+}
-+
-+static int ssl_get_config(char *dev, char *str, int size, char **error_out)
-+{
-+      return(line_get_config(dev, serial_lines, 
-+                             sizeof(serial_lines)/sizeof(serial_lines[0]), 
-+                             str, size, error_out));
-+}
-+
-+static int ssl_remove(char *str)
-+{
-+      return(line_remove(serial_lines, 
-+                         sizeof(serial_lines)/sizeof(serial_lines[0]), str));
-+}
-+
-+int ssl_open(struct tty_struct *tty, struct file *filp)
-+{
-+      return(line_open(serial_lines, tty, &opts));
-+}
-+
-+static void ssl_close(struct tty_struct *tty, struct file * filp)
-+{
-+      line_close(serial_lines, tty);
-+}
-+
-+static int ssl_write(struct tty_struct * tty, int from_user,
-+                   const unsigned char *buf, int count)
-+{
-+      return(line_write(serial_lines, tty, from_user, buf, count));
-+}
-+
-+static void ssl_put_char(struct tty_struct *tty, unsigned char ch)
-+{
-+      line_write(serial_lines, tty, 0, &ch, sizeof(ch));
-+}
-+
-+static void ssl_flush_chars(struct tty_struct *tty)
-+{
-+      return;
-+}
-+
-+static int ssl_chars_in_buffer(struct tty_struct *tty)
-+{
-+      return(0);
-+}
-+
-+static void ssl_flush_buffer(struct tty_struct *tty)
-+{
-+      return;
-+}
-+
-+static int ssl_ioctl(struct tty_struct *tty, struct file * file,
-+                   unsigned int cmd, unsigned long arg)
-+{
-+      int ret;
-+
-+      ret = 0;
-+      switch(cmd){
-+      case TCGETS:
-+      case TCSETS:
-+      case TCFLSH:
-+      case TCSETSF:
-+      case TCSETSW:
-+      case TCGETA:
-+      case TIOCMGET:
-+              ret = -ENOIOCTLCMD;
-+              break;
-+      default:
-+              printk(KERN_ERR 
-+                     "Unimplemented ioctl in ssl_ioctl : 0x%x\n", cmd);
-+              ret = -ENOIOCTLCMD;
-+              break;
-+      }
-+      return(ret);
-+}
-+
-+static void ssl_throttle(struct tty_struct * tty)
-+{
-+      printk(KERN_ERR "Someone should implement ssl_throttle\n");
-+}
-+
-+static void ssl_unthrottle(struct tty_struct * tty)
-+{
-+      printk(KERN_ERR "Someone should implement ssl_unthrottle\n");
-+}
-+
-+static void ssl_set_termios(struct tty_struct *tty, 
-+                          struct termios *old_termios)
-+{
-+}
-+
-+static void ssl_stop(struct tty_struct *tty)
-+{
-+      printk(KERN_ERR "Someone should implement ssl_stop\n");
-+}
-+
-+static void ssl_start(struct tty_struct *tty)
-+{
-+      printk(KERN_ERR "Someone should implement ssl_start\n");
-+}
-+
-+void ssl_hangup(struct tty_struct *tty)
-+{
-+}
-+
-+static struct tty_driver ssl_driver = {
-+      .refcount               = &ssl_refcount,
-+      .open                   = ssl_open,
-+      .close                  = ssl_close,
-+      .write                  = ssl_write,
-+      .put_char               = ssl_put_char,
-+      .flush_chars            = ssl_flush_chars,
-+      .chars_in_buffer        = ssl_chars_in_buffer,
-+      .flush_buffer           = ssl_flush_buffer,
-+      .ioctl                  = ssl_ioctl,
-+      .throttle               = ssl_throttle,
-+      .unthrottle             = ssl_unthrottle,
-+      .set_termios            = ssl_set_termios,
-+      .stop                   = ssl_stop,
-+      .start                  = ssl_start,
-+      .hangup                 = ssl_hangup
-+};
-+
-+/* Changed by ssl_init and referenced by ssl_exit, which are both serialized
-+ * by being an initcall and exitcall, respectively.
-+ */
-+static int ssl_init_done = 0;
-+
-+int ssl_init(void)
-+{
-+      char *new_title;
-+
-+      printk(KERN_INFO "Initializing software serial port version %d\n", 
-+             ssl_version);
-+
-+      line_register_devfs(&lines, &driver, &ssl_driver, serial_lines, 
-+                          sizeof(serial_lines)/sizeof(serial_lines[0]));
-+
-+      lines_init(serial_lines, sizeof(serial_lines)/sizeof(serial_lines[0]));
-+
-+      new_title = add_xterm_umid(opts.xterm_title);
-+      if(new_title != NULL) opts.xterm_title = new_title;
-+
-+      ssl_init_done = 1;
-+      return(0);
-+}
-+
-+__initcall(ssl_init);
-+
-+static int ssl_chan_setup(char *str)
-+{
-+      line_setup(serial_lines, sizeof(serial_lines)/sizeof(serial_lines[0]),
-+                 str, 1);
-+      return(1);
-+}
-+
-+__setup("ssl", ssl_chan_setup);
-+__channel_help(ssl_chan_setup, "ssl");
-+
-+static void ssl_exit(void)
-+{
-+      if(!ssl_init_done) return;
-+      close_lines(serial_lines, 
-+                  sizeof(serial_lines)/sizeof(serial_lines[0]));
-+}
-+
-+__uml_exitcall(ssl_exit);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/ssl.h um/arch/um/drivers/ssl.h
---- orig/arch/um/drivers/ssl.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/ssl.h   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,23 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SSL_H__
-+#define __SSL_H__
-+
-+extern int ssl_read(int fd, int line);
-+extern void ssl_receive_char(int line, char ch);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/stdio_console.c um/arch/um/drivers/stdio_console.c
---- orig/arch/um/drivers/stdio_console.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/stdio_console.c 2002-12-15 21:08:20.000000000 -0500
-@@ -0,0 +1,250 @@
-+/* 
-+ * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/config.h"
-+#include "linux/posix_types.h"
-+#include "linux/tty.h"
-+#include "linux/tty_flip.h"
-+#include "linux/types.h"
-+#include "linux/major.h"
-+#include "linux/kdev_t.h"
-+#include "linux/console.h"
-+#include "linux/string.h"
-+#include "linux/sched.h"
-+#include "linux/list.h"
-+#include "linux/init.h"
-+#include "linux/interrupt.h"
-+#include "linux/slab.h"
-+#include "asm/current.h"
-+#include "asm/softirq.h"
-+#include "asm/hardirq.h"
-+#include "asm/irq.h"
-+#include "stdio_console.h"
-+#include "line.h"
-+#include "chan_kern.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "irq_user.h"
-+#include "mconsole_kern.h"
-+#include "init.h"
-+#include "2_5compat.h"
-+
-+#define MAX_TTYS (8)
-+
-+/* Referenced only by tty_driver below - presumably it's locked correctly
-+ * by the tty driver.
-+ */
-+
-+static struct tty_driver console_driver;
-+
-+static int console_refcount = 0;
-+
-+static struct chan_ops init_console_ops = {
-+      .type           = "you shouldn't see this",
-+      .init           = NULL,
-+      .open           = NULL,
-+      .close          = NULL,
-+      .read           = NULL,
-+      .write          = NULL,
-+      .console_write  = generic_write,
-+      .window_size    = NULL,
-+      .free           = NULL,
-+      .winch          = 0,
-+};
-+
-+static struct chan init_console_chan = {
-+      .list           = { },
-+      .primary        = 1,
-+      .input          = 0,
-+      .output         = 1,
-+      .opened         = 1,
-+      .fd             = 1,
-+      .pri            = INIT_STATIC,
-+      .ops            = &init_console_ops,
-+      .data           = NULL
-+};
-+
-+void stdio_announce(char *dev_name, int dev)
-+{
-+      printk(KERN_INFO "Virtual console %d assigned device '%s'\n", dev,
-+             dev_name);
-+}
-+
-+static struct chan_opts opts = {
-+      .announce       = stdio_announce,
-+      .xterm_title    = "Virtual Console #%d",
-+      .raw            = 1,
-+      .tramp_stack    = 0,
-+      .in_kernel      = 1,
-+};
-+
-+static int con_config(char *str);
-+static int con_get_config(char *dev, char *str, int size, char **error_out);
-+static int con_remove(char *str);
-+
-+static struct line_driver driver = {
-+      .name                   = "UML console",
-+      .devfs_name             = "vc/%d",
-+      .major                  = TTY_MAJOR,
-+      .minor_start            = 0,
-+      .type                   = TTY_DRIVER_TYPE_CONSOLE,
-+      .subtype                = SYSTEM_TYPE_CONSOLE,
-+      .read_irq               = CONSOLE_IRQ,
-+      .read_irq_name          = "console",
-+      .write_irq              = CONSOLE_WRITE_IRQ,
-+      .write_irq_name         = "console-write",
-+      .symlink_from           = "ttys",
-+      .symlink_to             = "vc",
-+      .mc  = {
-+              .name           = "con",
-+              .config         = con_config,
-+              .get_config     = con_get_config,
-+              .remove         = con_remove,
-+      },
-+};
-+
-+static struct lines console_lines = LINES_INIT(MAX_TTYS);
-+
-+/* The array is initialized by line_init, which is an initcall.  The 
-+ * individual elements are protected by individual semaphores.
-+ */
-+struct line vts[MAX_TTYS] = { LINE_INIT(CONFIG_CON_ZERO_CHAN, &driver),
-+                            [ 1 ... MAX_TTYS - 1 ] = 
-+                            LINE_INIT(CONFIG_CON_CHAN, &driver) };
-+
-+static int con_config(char *str)
-+{
-+      return(line_config(vts, sizeof(vts)/sizeof(vts[0]), str));
-+}
-+
-+static int con_get_config(char *dev, char *str, int size, char **error_out)
-+{
-+      return(line_get_config(dev, vts, sizeof(vts)/sizeof(vts[0]), str, 
-+                             size, error_out));
-+}
-+
-+static int con_remove(char *str)
-+{
-+      return(line_remove(vts, sizeof(vts)/sizeof(vts[0]), str));
-+}
-+
-+static int open_console(struct tty_struct *tty)
-+{
-+      return(line_open(vts, tty, &opts));
-+}
-+
-+static int con_open(struct tty_struct *tty, struct file *filp)
-+{
-+      return(open_console(tty));
-+}
-+
-+static void con_close(struct tty_struct *tty, struct file *filp)
-+{
-+      line_close(vts, tty);
-+}
-+
-+static int con_write(struct tty_struct *tty, int from_user, 
-+                   const unsigned char *buf, int count)
-+{
-+       return(line_write(vts, tty, from_user, buf, count));
-+}
-+
-+static void set_termios(struct tty_struct *tty, struct termios * old)
-+{
-+}
-+
-+static int chars_in_buffer(struct tty_struct *tty)
-+{
-+      return(0);
-+}
-+
-+static int con_init_done = 0;
-+
-+int stdio_init(void)
-+{
-+      char *new_title;
-+
-+      printk(KERN_INFO "Initializing stdio console driver\n");
-+
-+      line_register_devfs(&console_lines, &driver, &console_driver, vts, 
-+                          sizeof(vts)/sizeof(vts[0]));
-+
-+      lines_init(vts, sizeof(vts)/sizeof(vts[0]));
-+
-+      new_title = add_xterm_umid(opts.xterm_title);
-+      if(new_title != NULL) opts.xterm_title = new_title;
-+
-+      open_console(NULL);
-+      con_init_done = 1;
-+      return(0);
-+}
-+
-+__initcall(stdio_init);
-+
-+static void console_write(struct console *console, const char *string, 
-+                        unsigned len)
-+{
-+      if(con_init_done) down(&vts[console->index].sem);
-+      console_write_chan(&vts[console->index].chan_list, string, len);
-+      if(con_init_done) up(&vts[console->index].sem);
-+}
-+
-+static struct tty_driver console_driver = {
-+      .refcount               = &console_refcount,
-+      .open                   = con_open,
-+      .close                  = con_close,
-+      .write                  = con_write,
-+      .chars_in_buffer        = chars_in_buffer,
-+      .set_termios            = set_termios
-+};
-+
-+static kdev_t console_device(struct console *c)
-+{
-+      return mk_kdev(TTY_MAJOR, c->index);
-+}
-+
-+static int console_setup(struct console *co, char *options)
-+{
-+      return(0);
-+}
-+
-+static struct console stdiocons = INIT_CONSOLE("tty", console_write, 
-+                                             console_device, console_setup,
-+                                             CON_PRINTBUFFER);
-+
-+void stdio_console_init(void)
-+{
-+      INIT_LIST_HEAD(&vts[0].chan_list);
-+      list_add(&init_console_chan.list, &vts[0].chan_list);
-+      register_console(&stdiocons);
-+}
-+
-+static int console_chan_setup(char *str)
-+{
-+      line_setup(vts, sizeof(vts)/sizeof(vts[0]), str, 1);
-+      return(1);
-+}
-+
-+__setup("con", console_chan_setup);
-+__channel_help(console_chan_setup, "con");
-+
-+static void console_exit(void)
-+{
-+      if(!con_init_done) return;
-+      close_lines(vts, sizeof(vts)/sizeof(vts[0]));
-+}
-+
-+__uml_exitcall(console_exit);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/stdio_console.h um/arch/um/drivers/stdio_console.h
---- orig/arch/um/drivers/stdio_console.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/stdio_console.h 2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,21 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __STDIO_CONSOLE_H
-+#define __STDIO_CONSOLE_H
-+
-+extern void save_console_flags(void);
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/tty.c um/arch/um/drivers/tty.c
---- orig/arch/um/drivers/tty.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/tty.c   2002-12-15 21:08:41.000000000 -0500
-@@ -0,0 +1,86 @@
-+/* 
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <termios.h>
-+#include <fcntl.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include "chan_user.h"
-+#include "user_util.h"
-+#include "user.h"
-+#include "os.h"
-+
-+struct tty_chan {
-+      char *dev;
-+      int raw;
-+      struct termios tt;
-+};
-+
-+void *tty_chan_init(char *str, int device, struct chan_opts *opts)
-+{
-+      struct tty_chan *data;
-+
-+      if(*str != ':'){
-+              printk("tty_init : channel type 'tty' must specify "
-+                     "a device\n");
-+              return(NULL);
-+      }
-+      str++;
-+
-+      if((data = um_kmalloc(sizeof(*data))) == NULL) 
-+              return(NULL);
-+      *data = ((struct tty_chan) { .dev       = str,
-+                                   .raw       = opts->raw });
-+                                   
-+      return(data);
-+}
-+
-+int tty_open(int input, int output, int primary, void *d, char **dev_out)
-+{
-+      struct tty_chan *data = d;
-+      int fd;
-+
-+      fd = os_open_file(data->dev, of_set_rw(OPENFLAGS(), input, output), 0);
-+      if(fd < 0) return(fd);
-+      if(data->raw){
-+              tcgetattr(fd, &data->tt);
-+              raw(fd, 0);
-+      }
-+
-+      *dev_out = data->dev;
-+      return(fd);
-+}
-+
-+int tty_console_write(int fd, const char *buf, int n, void *d)
-+{
-+      struct tty_chan *data = d;
-+
-+      return(generic_console_write(fd, buf, n, &data->tt));
-+}
-+
-+struct chan_ops tty_ops = {
-+      .type           = "tty",
-+      .init           = tty_chan_init,
-+      .open           = tty_open,
-+      .close          = generic_close,
-+      .read           = generic_read,
-+      .write          = generic_write,
-+      .console_write  = tty_console_write,
-+      .window_size    = generic_window_size,
-+      .free           = generic_free,
-+      .winch          = 0,
-+};
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/ubd_kern.c um/arch/um/drivers/ubd_kern.c
---- orig/arch/um/drivers/ubd_kern.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/ubd_kern.c      2003-03-11 15:46:36.000000000 -0500
-@@ -0,0 +1,1067 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+/* 2001-09-28...2002-04-17
-+ * Partition stuff by James_McMechan@hotmail.com
-+ * old style ubd by setting UBD_SHIFT to 0
-+ */
-+
-+#define MAJOR_NR UBD_MAJOR
-+#define UBD_SHIFT 4
-+
-+#include "linux/config.h"
-+#include "linux/blk.h"
-+#include "linux/blkdev.h"
-+#include "linux/hdreg.h"
-+#include "linux/init.h"
-+#include "linux/devfs_fs_kernel.h"
-+#include "linux/cdrom.h"
-+#include "linux/proc_fs.h"
-+#include "linux/ctype.h"
-+#include "linux/capability.h"
-+#include "linux/mm.h"
-+#include "linux/vmalloc.h"
-+#include "linux/blkpg.h"
-+#include "linux/genhd.h"
-+#include "linux/spinlock.h"
-+#include "asm/segment.h"
-+#include "asm/uaccess.h"
-+#include "asm/irq.h"
-+#include "asm/types.h"
-+#include "user_util.h"
-+#include "mem_user.h"
-+#include "kern_util.h"
-+#include "kern.h"
-+#include "mconsole_kern.h"
-+#include "init.h"
-+#include "irq_user.h"
-+#include "ubd_user.h"
-+#include "2_5compat.h"
-+#include "os.h"
-+
-+static int ubd_open(struct inode * inode, struct file * filp);
-+static int ubd_release(struct inode * inode, struct file * file);
-+static int ubd_ioctl(struct inode * inode, struct file * file,
-+                   unsigned int cmd, unsigned long arg);
-+static int ubd_revalidate(kdev_t rdev);
-+static int ubd_revalidate1(kdev_t rdev);
-+
-+#define MAX_DEV (8)
-+#define MAX_MINOR (MAX_DEV << UBD_SHIFT)
-+
-+/* Not modified by this driver */
-+static int blk_sizes[MAX_MINOR] = { [ 0 ... MAX_MINOR - 1 ] = BLOCK_SIZE };
-+static int hardsect_sizes[MAX_MINOR] = { [ 0 ... MAX_MINOR - 1 ] = 512 };
-+
-+/* Protected by ubd_lock */
-+static int sizes[MAX_MINOR] = { [ 0 ... MAX_MINOR - 1 ] = 0 };
-+
-+static struct block_device_operations ubd_blops = {
-+        .open         = ubd_open,
-+        .release      = ubd_release,
-+        .ioctl                = ubd_ioctl,
-+        .revalidate   = ubd_revalidate,
-+};
-+
-+/* Protected by ubd_lock, except in prepare_request and ubd_ioctl because 
-+ * the block layer should ensure that the device is idle before closing it.
-+ */
-+static struct hd_struct       ubd_part[MAX_MINOR] =
-+      { [ 0 ... MAX_MINOR - 1 ] = { 0, 0, 0 } };
-+
-+/* Protected by io_request_lock */
-+static request_queue_t *ubd_queue;
-+
-+/* Protected by ubd_lock */
-+static int fake_major = MAJOR_NR;
-+
-+static spinlock_t ubd_lock = SPIN_LOCK_UNLOCKED;
-+
-+#define INIT_GENDISK(maj, name, parts, shift, bsizes, max, blops) \
-+{ \
-+      .major          = maj, \
-+      .major_name     = name, \
-+      .minor_shift    = shift, \
-+      .max_p          = 1 << shift, \
-+      .part           = parts, \
-+      .sizes          = bsizes, \
-+      .nr_real        = max, \
-+      .real_devices   = NULL, \
-+      .next           = NULL, \
-+      .fops           = blops, \
-+      .de_arr         = NULL, \
-+      .flags          = 0 \
-+}
-+
-+static struct gendisk ubd_gendisk = INIT_GENDISK(MAJOR_NR, "ubd", ubd_part,
-+                                               UBD_SHIFT, sizes, MAX_DEV, 
-+                                               &ubd_blops);
-+static struct gendisk fake_gendisk = INIT_GENDISK(0, "ubd", ubd_part, 
-+                                                UBD_SHIFT, sizes, MAX_DEV, 
-+                                                &ubd_blops);
-+
-+#ifdef CONFIG_BLK_DEV_UBD_SYNC
-+#define OPEN_FLAGS ((struct openflags) { .r = 1, .w = 1, .s = 1, .c = 0, \
-+                                       .cl = 1 })
-+#else
-+#define OPEN_FLAGS ((struct openflags) { .r = 1, .w = 1, .s = 0, .c = 0, \
-+                                       .cl = 1 })
-+#endif
-+
-+/* Not protected - changed only in ubd_setup_common and then only to
-+ * to enable O_SYNC.
-+ */
-+static struct openflags global_openflags = OPEN_FLAGS;
-+
-+struct cow {
-+      char *file;
-+      int fd;
-+      unsigned long *bitmap;
-+      unsigned long bitmap_len;
-+      int bitmap_offset;
-+        int data_offset;
-+};
-+
-+struct ubd {
-+      char *file;
-+      int count;
-+      int fd;
-+      __u64 size;
-+      struct openflags boot_openflags;
-+      struct openflags openflags;
-+      devfs_handle_t devfs;
-+      struct cow cow;
-+};
-+
-+#define DEFAULT_COW { \
-+      .file                   = NULL, \
-+        .fd                   = -1, \
-+        .bitmap                       = NULL, \
-+      .bitmap_offset          = 0, \
-+        .data_offset          = 0, \
-+}
-+
-+#define DEFAULT_UBD { \
-+      .file                   = NULL, \
-+      .count                  = 0, \
-+      .fd                     = -1, \
-+      .size                   = -1, \
-+      .boot_openflags         = OPEN_FLAGS, \
-+      .openflags              = OPEN_FLAGS, \
-+      .devfs                  = NULL, \
-+        .cow                  = DEFAULT_COW, \
-+}
-+
-+struct ubd ubd_dev[MAX_DEV] = { [ 0 ... MAX_DEV - 1 ] = DEFAULT_UBD };
-+
-+static int ubd0_init(void)
-+{
-+      struct ubd *dev = &ubd_dev[0];
-+
-+      if(dev->file == NULL)
-+              dev->file = "root_fs";
-+      return(0);
-+}
-+
-+__initcall(ubd0_init);
-+
-+/* Only changed by fake_ide_setup which is a setup */
-+static int fake_ide = 0;
-+static struct proc_dir_entry *proc_ide_root = NULL;
-+static struct proc_dir_entry *proc_ide = NULL;
-+
-+static void make_proc_ide(void)
-+{
-+      proc_ide_root = proc_mkdir("ide", 0);
-+      proc_ide = proc_mkdir("ide0", proc_ide_root);
-+}
-+
-+static int proc_ide_read_media(char *page, char **start, off_t off, int count,
-+                             int *eof, void *data)
-+{
-+      int len;
-+
-+      strcpy(page, "disk\n");
-+      len = strlen("disk\n");
-+      len -= off;
-+      if (len < count){
-+              *eof = 1;
-+              if (len <= 0) return 0;
-+      }
-+      else len = count;
-+      *start = page + off;
-+      return len;
-+}
-+
-+static void make_ide_entries(char *dev_name)
-+{
-+      struct proc_dir_entry *dir, *ent;
-+      char name[64];
-+
-+      if(!fake_ide) return;
-+
-+      /* Without locking this could race if a UML was booted with no 
-+       * disks and then two mconsole requests which add disks came in 
-+       * at the same time.
-+       */
-+      spin_lock(&ubd_lock);
-+      if(proc_ide_root == NULL) make_proc_ide();
-+      spin_unlock(&ubd_lock);
-+
-+      dir = proc_mkdir(dev_name, proc_ide);
-+      if(!dir) return;
-+
-+      ent = create_proc_entry("media", S_IFREG|S_IRUGO, dir);
-+      if(!ent) return;
-+      ent->nlink = 1;
-+      ent->data = NULL;
-+      ent->read_proc = proc_ide_read_media;
-+      ent->write_proc = NULL;
-+      sprintf(name,"ide0/%s", dev_name);
-+      proc_symlink(dev_name, proc_ide_root, name);
-+}
-+
-+static int fake_ide_setup(char *str)
-+{
-+      fake_ide = 1;
-+      return(1);
-+}
-+
-+__setup("fake_ide", fake_ide_setup);
-+
-+__uml_help(fake_ide_setup,
-+"fake_ide\n"
-+"    Create ide0 entries that map onto ubd devices.\n\n"
-+);
-+
-+static int parse_unit(char **ptr)
-+{
-+      char *str = *ptr, *end;
-+      int n = -1;
-+
-+      if(isdigit(*str)) {
-+              n = simple_strtoul(str, &end, 0);
-+              if(end == str)
-+                      return(-1);
-+              *ptr = end;
-+      }
-+      else if (('a' <= *str) && (*str <= 'h')) {
-+              n = *str - 'a';
-+              str++;
-+              *ptr = str;
-+      }
-+      return(n);
-+}
-+
-+static int ubd_setup_common(char *str, int *index_out)
-+{
-+      struct openflags flags = global_openflags;
-+      struct ubd *dev;
-+      char *backing_file;
-+      int n, err;
-+
-+      if(index_out) *index_out = -1;
-+      n = *str;
-+      if(n == '='){
-+              char *end;
-+              int major;
-+
-+              str++;
-+              if(!strcmp(str, "sync")){
-+                      global_openflags.s = 1;
-+                      return(0);
-+              }
-+              major = simple_strtoul(str, &end, 0);
-+              if((*end != '\0') || (end == str)){
-+                      printk(KERN_ERR 
-+                             "ubd_setup : didn't parse major number\n");
-+                      return(1);
-+              }
-+
-+              err = 1;
-+              spin_lock(&ubd_lock);
-+              if(fake_major != MAJOR_NR){
-+                      printk(KERN_ERR "Can't assign a fake major twice\n");
-+                      goto out1;
-+              }
-+
-+              fake_gendisk.major = major;
-+              fake_major = major;
-+      
-+              printk(KERN_INFO "Setting extra ubd major number to %d\n",
-+                     major);
-+              err = 0;
-+      out1:
-+              spin_unlock(&ubd_lock);
-+              return(err);
-+      }
-+
-+      n = parse_unit(&str);
-+      if(n < 0){
-+              printk(KERN_ERR "ubd_setup : couldn't parse unit number "
-+                     "'%s'\n", str);
-+              return(1);
-+      }
-+
-+      if(n >= MAX_DEV){
-+              printk(KERN_ERR "ubd_setup : index %d out of range "
-+                     "(%d devices)\n", n, MAX_DEV);   
-+              return(1);
-+      }
-+
-+      err = 1;
-+      spin_lock(&ubd_lock);
-+
-+      dev = &ubd_dev[n];
-+      if(dev->file != NULL){
-+              printk(KERN_ERR "ubd_setup : device already configured\n");
-+              goto out2;
-+      }
-+
-+      if(index_out) *index_out = n;
-+
-+      if (*str == 'r'){
-+              flags.w = 0;
-+              str++;
-+      }
-+      if (*str == 's'){
-+              flags.s = 1;
-+              str++;
-+      }
-+      if(*str++ != '='){
-+              printk(KERN_ERR "ubd_setup : Expected '='\n");
-+              goto out2;
-+      }
-+
-+      err = 0;
-+      backing_file = strchr(str, ',');
-+      if(backing_file){
-+              *backing_file = '\0';
-+              backing_file++;
-+      }
-+      dev->file = str;
-+      dev->cow.file = backing_file;
-+      dev->boot_openflags = flags;
-+ out2:
-+      spin_unlock(&ubd_lock);
-+      return(err);
-+}
-+
-+static int ubd_setup(char *str)
-+{
-+      ubd_setup_common(str, NULL);
-+      return(1);
-+}
-+
-+__setup("ubd", ubd_setup);
-+__uml_help(ubd_setup,
-+"ubd<n>=<filename>\n"
-+"    This is used to associate a device with a file in the underlying\n"
-+"    filesystem. Usually, there is a filesystem in the file, but \n"
-+"    that's not required. Swap devices containing swap files can be\n"
-+"    specified like this. Also, a file which doesn't contain a\n"
-+"    filesystem can have its contents read in the virtual \n"
-+"    machine by running dd on the device. n must be in the range\n"
-+"    0 to 7. Appending an 'r' to the number will cause that device\n"
-+"    to be mounted read-only. For example ubd1r=./ext_fs. Appending\n"
-+"    an 's' (has to be _after_ 'r', if there is one) will cause data\n"
-+"    to be written to disk on the host immediately.\n\n"
-+);
-+
-+static int fakehd(char *str)
-+{
-+      printk(KERN_INFO 
-+             "fakehd : Changing ubd_gendisk.major_name to \"hd\".\n");
-+      ubd_gendisk.major_name = "hd";
-+      return(1);
-+}
-+
-+__setup("fakehd", fakehd);
-+__uml_help(fakehd,
-+"fakehd\n"
-+"    Change the ubd device name to \"hd\".\n\n"
-+);
-+
-+static void do_ubd_request(request_queue_t * q);
-+
-+/* Only changed by ubd_init, which is an initcall. */
-+int thread_fd = -1;
-+
-+/* Changed by ubd_handler, which is serialized because interrupts only
-+ * happen on CPU 0.
-+ */
-+int intr_count = 0;
-+
-+static void ubd_finish(int error)
-+{
-+      int nsect;
-+
-+      if(error){
-+              end_request(0);
-+              return;
-+      }
-+      nsect = CURRENT->current_nr_sectors;
-+      CURRENT->sector += nsect;
-+      CURRENT->buffer += nsect << 9;
-+      CURRENT->errors = 0;
-+      CURRENT->nr_sectors -= nsect;
-+      CURRENT->current_nr_sectors = 0;
-+      end_request(1);
-+}
-+
-+static void ubd_handler(void)
-+{
-+      struct io_thread_req req;
-+      int n;
-+
-+      DEVICE_INTR = NULL;
-+      intr_count++;
-+      n = read_ubd_fs(thread_fd, &req, sizeof(req));
-+      if(n != sizeof(req)){
-+              printk(KERN_ERR "Pid %d - spurious interrupt in ubd_handler, "
-+                     "errno = %d\n", os_getpid(), -n);
-+              spin_lock(&io_request_lock);
-+              end_request(0);
-+              spin_unlock(&io_request_lock);
-+              return;
-+      }
-+        
-+        if((req.offset != ((__u64) (CURRENT->sector)) << 9) ||
-+         (req.length != (CURRENT->current_nr_sectors) << 9))
-+              panic("I/O op mismatch");
-+      
-+      spin_lock(&io_request_lock);
-+      ubd_finish(req.error);
-+      reactivate_fd(thread_fd, UBD_IRQ);      
-+      do_ubd_request(ubd_queue);
-+      spin_unlock(&io_request_lock);
-+}
-+
-+static void ubd_intr(int irq, void *dev, struct pt_regs *unused)
-+{
-+      ubd_handler();
-+}
-+
-+/* Only changed by ubd_init, which is an initcall. */
-+static int io_pid = -1;
-+
-+void kill_io_thread(void)
-+{
-+      if(io_pid != -1)
-+              os_kill_process(io_pid, 1);
-+}
-+
-+__uml_exitcall(kill_io_thread);
-+
-+/* Initialized in an initcall, and unchanged thereafter */
-+devfs_handle_t ubd_dir_handle;
-+
-+static int ubd_add(int n)
-+{
-+      struct ubd *dev = &ubd_dev[n];
-+      char name[sizeof("nnnnnn\0")], dev_name[sizeof("ubd0x")];
-+      int err = -EISDIR;
-+
-+      if(dev->file == NULL)
-+              goto out;
-+
-+      err = ubd_revalidate1(MKDEV(MAJOR_NR, n << UBD_SHIFT));
-+      if(err)
-+              goto out;
-+
-+      sprintf(name, "%d", n);
-+      dev->devfs = devfs_register(ubd_dir_handle, name, DEVFS_FL_REMOVABLE,
-+                                  MAJOR_NR, n << UBD_SHIFT, S_IFBLK | 
-+                                  S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP,
-+                                  &ubd_blops, NULL);
-+
-+      if(!strcmp(ubd_gendisk.major_name, "ubd"))
-+              sprintf(dev_name, "%s%d", ubd_gendisk.major_name, n);
-+      else sprintf(dev_name, "%s%c", ubd_gendisk.major_name, 
-+                   n + 'a');
-+
-+      make_ide_entries(dev_name);
-+      return(0);
-+
-+ out:
-+      return(err);
-+}
-+
-+static int ubd_config(char *str)
-+{
-+      int n, err;
-+
-+      str = uml_strdup(str);
-+      if(str == NULL){
-+              printk(KERN_ERR "ubd_config failed to strdup string\n");
-+              return(1);
-+      }
-+      err = ubd_setup_common(str, &n);
-+      if(err){
-+              kfree(str);
-+              return(-1);
-+      }
-+      if(n == -1) return(0);
-+
-+      spin_lock(&ubd_lock);
-+      err = ubd_add(n);
-+      if(err)
-+              ubd_dev[n].file = NULL;
-+      spin_unlock(&ubd_lock);
-+
-+      return(err);
-+}
-+
-+static int ubd_get_config(char *name, char *str, int size, char **error_out)
-+{
-+      struct ubd *dev;
-+      char *end;
-+      int n, len = 0;
-+
-+      n = simple_strtoul(name, &end, 0);
-+      if((*end != '\0') || (end == name)){
-+              *error_out = "ubd_get_config : didn't parse device number";
-+              return(-1);
-+      }
-+
-+      if((n >= MAX_DEV) || (n < 0)){
-+              *error_out = "ubd_get_config : device number out of range";
-+              return(-1);
-+      }
-+
-+      dev = &ubd_dev[n];
-+      spin_lock(&ubd_lock);
-+
-+      if(dev->file == NULL){
-+              CONFIG_CHUNK(str, size, len, "", 1);
-+              goto out;
-+      }
-+
-+      CONFIG_CHUNK(str, size, len, dev->file, 0);
-+
-+      if(dev->cow.file != NULL){
-+              CONFIG_CHUNK(str, size, len, ",", 0);
-+              CONFIG_CHUNK(str, size, len, dev->cow.file, 1);
-+      }
-+      else CONFIG_CHUNK(str, size, len, "", 1);
-+
-+ out:
-+      spin_unlock(&ubd_lock);
-+      return(len);
-+}
-+
-+static int ubd_remove(char *str)
-+{
-+      struct ubd *dev;
-+      int n, err = -ENODEV;
-+
-+      if(isdigit(*str)){
-+              char *end;
-+              n = simple_strtoul(str, &end, 0);
-+              if ((*end != '\0') || (end == str)) 
-+                      return(err);
-+      }
-+      else if (('a' <= *str) && (*str <= 'h'))
-+              n = *str - 'a';
-+      else
-+              return(err);    /* it should be a number 0-7/a-h */
-+
-+      if((n < 0) || (n >= MAX_DEV))
-+              return(err);
-+
-+      dev = &ubd_dev[n];
-+
-+      spin_lock(&ubd_lock);
-+      err = 0;
-+      if(dev->file == NULL)
-+              goto out;
-+      err = -1;
-+      if(dev->count > 0)
-+              goto out;
-+      if(dev->devfs != NULL) 
-+              devfs_unregister(dev->devfs);
-+
-+      *dev = ((struct ubd) DEFAULT_UBD);
-+      err = 0;
-+ out:
-+      spin_unlock(&ubd_lock);
-+      return(err);
-+}
-+
-+static struct mc_device ubd_mc = {
-+      .name           = "ubd",
-+      .config         = ubd_config,
-+      .get_config     = ubd_get_config,
-+      .remove         = ubd_remove,
-+};
-+
-+static int ubd_mc_init(void)
-+{
-+      mconsole_register_dev(&ubd_mc);
-+      return(0);
-+}
-+
-+__initcall(ubd_mc_init);
-+
-+static request_queue_t *ubd_get_queue(kdev_t device)
-+{
-+      return(ubd_queue);
-+}
-+
-+int ubd_init(void)
-+{
-+      unsigned long stack;
-+        int i, err;
-+
-+      ubd_dir_handle = devfs_mk_dir (NULL, "ubd", NULL);
-+      if (devfs_register_blkdev(MAJOR_NR, "ubd", &ubd_blops)) {
-+              printk(KERN_ERR "ubd: unable to get major %d\n", MAJOR_NR);
-+              return -1;
-+      }
-+      read_ahead[MAJOR_NR] = 8;               /* 8 sector (4kB) read-ahead */
-+      blksize_size[MAJOR_NR] = blk_sizes;
-+      blk_size[MAJOR_NR] = sizes;
-+      INIT_HARDSECT(hardsect_size, MAJOR_NR, hardsect_sizes);
-+
-+      ubd_queue = BLK_DEFAULT_QUEUE(MAJOR_NR);
-+      blk_init_queue(ubd_queue, DEVICE_REQUEST);
-+      INIT_ELV(ubd_queue, &ubd_queue->elevator);
-+
-+        add_gendisk(&ubd_gendisk);
-+      if (fake_major != MAJOR_NR){
-+              /* major number 0 is used to auto select */
-+              err = devfs_register_blkdev(fake_major, "fake", &ubd_blops);
-+              if(fake_major == 0){
-+              /* auto device number case */
-+                      fake_major = err;
-+                      if(err == 0)
-+                              return(-ENODEV);
-+              } 
-+              else if (err){
-+                      /* not auto so normal error */
-+                      printk(KERN_ERR "ubd: error %d getting major %d\n", 
-+                             err, fake_major);
-+                      return(-ENODEV);
-+              }
-+
-+              blk_dev[fake_major].queue = ubd_get_queue;
-+              read_ahead[fake_major] = 8;     /* 8 sector (4kB) read-ahead */
-+              blksize_size[fake_major] = blk_sizes;
-+              blk_size[fake_major] = sizes;
-+              INIT_HARDSECT(hardsect_size, fake_major, hardsect_sizes);
-+                add_gendisk(&fake_gendisk);
-+      }
-+
-+      for(i=0;i<MAX_DEV;i++) 
-+              ubd_add(i);
-+
-+      if(global_openflags.s){
-+              printk(KERN_INFO "ubd : Synchronous mode\n");
-+              return(0);
-+      }
-+      stack = alloc_stack(0, 0);
-+      io_pid = start_io_thread(stack + PAGE_SIZE - sizeof(void *), 
-+                               &thread_fd);
-+      if(io_pid < 0){
-+              printk(KERN_ERR 
-+                     "ubd : Failed to start I/O thread (errno = %d) - "
-+                     "falling back to synchronous I/O\n", -io_pid);
-+              return(0);
-+      }
-+      err = um_request_irq(UBD_IRQ, thread_fd, IRQ_READ, ubd_intr, 
-+                           SA_INTERRUPT, "ubd", ubd_dev);
-+      if(err != 0) printk(KERN_ERR 
-+                          "um_request_irq failed - errno = %d\n", -err);
-+      return(err);
-+}
-+
-+__initcall(ubd_init);
-+
-+static void ubd_close(struct ubd *dev)
-+{
-+      os_close_file(dev->fd);
-+      if(dev->cow.file != NULL) {
-+              os_close_file(dev->cow.fd);
-+              vfree(dev->cow.bitmap);
-+              dev->cow.bitmap = NULL;
-+      }
-+}
-+
-+static int ubd_open_dev(struct ubd *dev)
-+{
-+      struct openflags flags;
-+      int err, create_cow, *create_ptr;
-+
-+      dev->openflags = dev->boot_openflags;
-+      create_cow = 0;
-+      create_ptr = (dev->cow.file != NULL) ? &create_cow : NULL;
-+      dev->fd = open_ubd_file(dev->file, &dev->openflags, &dev->cow.file,
-+                              &dev->cow.bitmap_offset, &dev->cow.bitmap_len, 
-+                              &dev->cow.data_offset, create_ptr);
-+
-+      if((dev->fd == -ENOENT) && create_cow){
-+              dev->fd = create_cow_file(dev->file, dev->cow.file, 
-+                                        dev->openflags, 1 << 9,
-+                                        &dev->cow.bitmap_offset, 
-+                                        &dev->cow.bitmap_len,
-+                                        &dev->cow.data_offset);
-+              if(dev->fd >= 0){
-+                      printk(KERN_INFO "Creating \"%s\" as COW file for "
-+                             "\"%s\"\n", dev->file, dev->cow.file);
-+              }
-+      }
-+
-+      if(dev->fd < 0) return(dev->fd);
-+
-+      if(dev->cow.file != NULL){
-+              err = -ENOMEM;
-+              dev->cow.bitmap = (void *) vmalloc(dev->cow.bitmap_len);
-+              if(dev->cow.bitmap == NULL) goto error;
-+              flush_tlb_kernel_vm();
-+
-+              err = read_cow_bitmap(dev->fd, dev->cow.bitmap, 
-+                                    dev->cow.bitmap_offset, 
-+                                    dev->cow.bitmap_len);
-+              if(err) goto error;
-+
-+              flags = dev->openflags;
-+              flags.w = 0;
-+              err = open_ubd_file(dev->cow.file, &flags, NULL, NULL, NULL, 
-+                                  NULL, NULL);
-+              if(err < 0) goto error;
-+              dev->cow.fd = err;
-+      }
-+      return(0);
-+ error:
-+      os_close_file(dev->fd);
-+      return(err);
-+}
-+
-+static int ubd_file_size(struct ubd *dev, __u64 *size_out)
-+{
-+      char *file;
-+
-+      file = dev->cow.file ? dev->cow.file : dev->file;
-+      return(os_file_size(file, size_out));
-+}
-+
-+static int ubd_open(struct inode *inode, struct file *filp)
-+{
-+      struct ubd *dev;
-+      int n, offset, err = 0;
-+
-+      n = DEVICE_NR(inode->i_rdev);
-+      dev = &ubd_dev[n];
-+      if(n >= MAX_DEV)
-+              return -ENODEV;
-+
-+      spin_lock(&ubd_lock);
-+      offset = n << UBD_SHIFT;
-+
-+      if(dev->count == 0){
-+              err = ubd_open_dev(dev);
-+              if(err){
-+                      printk(KERN_ERR "ubd%d: Can't open \"%s\": "
-+                             "errno = %d\n", n, dev->file, -err);
-+                      goto out;
-+              }
-+              err = ubd_file_size(dev, &dev->size);
-+              if(err)
-+                      goto out;
-+              sizes[offset] = dev->size / BLOCK_SIZE;
-+              ubd_part[offset].nr_sects = dev->size / hardsect_sizes[offset];
-+      }
-+      dev->count++;
-+      if((filp->f_mode & FMODE_WRITE) && !dev->openflags.w){
-+              if(--dev->count == 0) ubd_close(dev);
-+              err = -EROFS;
-+      }
-+ out:
-+      spin_unlock(&ubd_lock);
-+      return(err);
-+}
-+
-+static int ubd_release(struct inode * inode, struct file * file)
-+{
-+        int n, offset;
-+
-+      n =  DEVICE_NR(inode->i_rdev);
-+      offset = n << UBD_SHIFT;
-+      if(n >= MAX_DEV)
-+              return -ENODEV;
-+
-+      spin_lock(&ubd_lock);
-+      if(--ubd_dev[n].count == 0)
-+              ubd_close(&ubd_dev[n]);
-+      spin_unlock(&ubd_lock);
-+
-+      return(0);
-+}
-+
-+void cowify_req(struct io_thread_req *req, struct ubd *dev)
-+{
-+        int i, update_bitmap, sector = req->offset >> 9;
-+
-+      if(req->length > (sizeof(req->sector_mask) * 8) << 9)
-+              panic("Operation too long");
-+      if(req->op == UBD_READ) {
-+              for(i = 0; i < req->length >> 9; i++){
-+                      if(ubd_test_bit(sector + i, (unsigned char *) 
-+                                      dev->cow.bitmap)){
-+                              ubd_set_bit(i, (unsigned char *) 
-+                                          &req->sector_mask);
-+                      }
-+                }
-+        } 
-+        else {
-+              update_bitmap = 0;
-+              for(i = 0; i < req->length >> 9; i++){
-+                      ubd_set_bit(i, (unsigned char *) 
-+                                  &req->sector_mask);
-+                      if(!ubd_test_bit(sector + i, (unsigned char *) 
-+                                       dev->cow.bitmap))
-+                              update_bitmap = 1;
-+                      ubd_set_bit(sector + i, (unsigned char *) 
-+                                  dev->cow.bitmap);
-+              }
-+              if(update_bitmap){
-+                      req->cow_offset = sector / (sizeof(unsigned long) * 8);
-+                      req->bitmap_words[0] = 
-+                              dev->cow.bitmap[req->cow_offset];
-+                      req->bitmap_words[1] = 
-+                              dev->cow.bitmap[req->cow_offset + 1];
-+                      req->cow_offset *= sizeof(unsigned long);
-+                      req->cow_offset += dev->cow.bitmap_offset;
-+              }
-+      }
-+}
-+
-+static int prepare_request(struct request *req, struct io_thread_req *io_req)
-+{
-+      struct ubd *dev;
-+      __u64 block;
-+      int nsect, minor, n;
-+
-+      if(req->rq_status == RQ_INACTIVE) return(1);
-+
-+      minor = MINOR(req->rq_dev);
-+      n = minor >> UBD_SHIFT;
-+      dev = &ubd_dev[n];
-+      if(IS_WRITE(req) && !dev->openflags.w){
-+              printk("Write attempted on readonly ubd device %d\n", n);
-+              end_request(0);
-+              return(1);
-+      }
-+
-+        req->sector += ubd_part[minor].start_sect;
-+        block = req->sector;
-+        nsect = req->current_nr_sectors;
-+
-+      io_req->op = (req->cmd == READ) ? UBD_READ : UBD_WRITE;
-+      io_req->fds[0] = (dev->cow.file != NULL) ? dev->cow.fd : dev->fd;
-+      io_req->fds[1] = dev->fd;
-+      io_req->offsets[0] = 0;
-+      io_req->offsets[1] = dev->cow.data_offset;
-+      io_req->offset = ((__u64) block) << 9;
-+      io_req->length = nsect << 9;
-+      io_req->buffer = req->buffer;
-+      io_req->sectorsize = 1 << 9;
-+      io_req->sector_mask = 0;
-+      io_req->cow_offset = -1;
-+      io_req->error = 0;
-+
-+        if(dev->cow.file != NULL) cowify_req(io_req, dev);
-+      return(0);
-+}
-+
-+static void do_ubd_request(request_queue_t *q)
-+{
-+      struct io_thread_req io_req;
-+      struct request *req;
-+      int err, n;
-+
-+      if(thread_fd == -1){
-+              while(!list_empty(&q->queue_head)){
-+                      req = blkdev_entry_next_request(&q->queue_head);
-+                      err = prepare_request(req, &io_req);
-+                      if(!err){
-+                              do_io(&io_req);
-+                              ubd_finish(io_req.error);
-+                      }
-+              }
-+      }
-+      else {
-+              if(DEVICE_INTR || list_empty(&q->queue_head)) return;
-+              req = blkdev_entry_next_request(&q->queue_head);
-+              err = prepare_request(req, &io_req);
-+              if(!err){
-+                      SET_INTR(ubd_handler);
-+                      n = write_ubd_fs(thread_fd, (char *) &io_req, 
-+                                       sizeof(io_req));
-+                      if(n != sizeof(io_req))
-+                              printk("write to io thread failed, "
-+                                     "errno = %d\n", -n);
-+              }
-+      }
-+}
-+
-+static int ubd_ioctl(struct inode * inode, struct file * file,
-+                   unsigned int cmd, unsigned long arg)
-+{
-+      struct hd_geometry *loc = (struct hd_geometry *) arg;
-+      struct ubd *dev;
-+      int n, minor, err;
-+      struct hd_driveid ubd_id = {
-+              .cyls           = 0,
-+              .heads          = 128,
-+              .sectors        = 32,
-+      };
-+      
-+        if(!inode) return(-EINVAL);
-+      minor = MINOR(inode->i_rdev);
-+      n = minor >> UBD_SHIFT;
-+      if(n >= MAX_DEV)
-+              return(-EINVAL);
-+      dev = &ubd_dev[n];
-+      switch (cmd) {
-+              struct hd_geometry g;
-+              struct cdrom_volctrl volume;
-+      case HDIO_GETGEO:
-+              if(!loc) return(-EINVAL);
-+              g.heads = 128;
-+              g.sectors = 32;
-+              g.cylinders = dev->size / (128 * 32 * hardsect_sizes[minor]);
-+              g.start = 2;
-+              return(copy_to_user(loc, &g, sizeof(g)) ? -EFAULT : 0);
-+      case BLKGETSIZE:   /* Return device size */
-+              if(!arg) return(-EINVAL);
-+              err = verify_area(VERIFY_WRITE, (long *) arg, sizeof(long));
-+              if(err)
-+                      return(err);
-+              put_user(ubd_part[minor].nr_sects, (long *) arg);
-+              return(0);
-+      case BLKRRPART: /* Re-read partition tables */
-+              return(ubd_revalidate(inode->i_rdev));
-+
-+      case HDIO_SET_UNMASKINTR:
-+              if(!capable(CAP_SYS_ADMIN)) return(-EACCES);
-+              if((arg > 1) || (minor & 0x3F)) return(-EINVAL);
-+              return(0);
-+
-+      case HDIO_GET_UNMASKINTR:
-+              if(!arg)  return(-EINVAL);
-+              err = verify_area(VERIFY_WRITE, (long *) arg, sizeof(long));
-+              if(err)
-+                      return(err);
-+              return(0);
-+
-+      case HDIO_GET_MULTCOUNT:
-+              if(!arg)  return(-EINVAL);
-+              err = verify_area(VERIFY_WRITE, (long *) arg, sizeof(long));
-+              if(err)
-+                      return(err);
-+              return(0);
-+
-+      case HDIO_SET_MULTCOUNT:
-+              if(!capable(CAP_SYS_ADMIN)) return(-EACCES);
-+              if(MINOR(inode->i_rdev) & 0x3F) return(-EINVAL);
-+              return(0);
-+
-+      case HDIO_GET_IDENTITY:
-+              ubd_id.cyls = dev->size / (128 * 32 * hardsect_sizes[minor]);
-+              if(copy_to_user((char *) arg, (char *) &ubd_id, 
-+                               sizeof(ubd_id)))
-+                      return(-EFAULT);
-+              return(0);
-+              
-+      case CDROMVOLREAD:
-+              if(copy_from_user(&volume, (char *) arg, sizeof(volume)))
-+                      return(-EFAULT);
-+              volume.channel0 = 255;
-+              volume.channel1 = 255;
-+              volume.channel2 = 255;
-+              volume.channel3 = 255;
-+              if(copy_to_user((char *) arg, &volume, sizeof(volume)))
-+                      return(-EFAULT);
-+              return(0);
-+
-+      default:
-+              return blk_ioctl(inode->i_rdev, cmd, arg);
-+      }
-+}
-+
-+static int ubd_revalidate1(kdev_t rdev)
-+{
-+      int i, n, offset, err = 0, pcount = 1 << UBD_SHIFT;
-+      struct ubd *dev;
-+      struct hd_struct *part;
-+
-+      n = DEVICE_NR(rdev);
-+      offset = n << UBD_SHIFT;
-+      dev = &ubd_dev[n];
-+
-+      part = &ubd_part[offset];
-+
-+      /* clear all old partition counts */
-+      for(i = 1; i < pcount; i++) {
-+              part[i].start_sect = 0;
-+              part[i].nr_sects = 0;
-+      }
-+
-+      /* If it already has been opened we can check the partitions 
-+       * directly 
-+       */
-+      if(dev->count){
-+              part->start_sect = 0;
-+              register_disk(&ubd_gendisk, MKDEV(MAJOR_NR, offset), pcount, 
-+                            &ubd_blops, part->nr_sects);
-+      } 
-+      else if(dev->file){
-+              err = ubd_open_dev(dev);
-+              if(err){
-+                      printk(KERN_ERR "unable to open %s for validation\n",
-+                             dev->file);
-+                      goto out;
-+              }
-+
-+              /* have to recompute sizes since we opened it */
-+              err = ubd_file_size(dev, &dev->size);
-+              if(err) {
-+                      ubd_close(dev);
-+                      goto out;
-+              }
-+              part->start_sect = 0;
-+              part->nr_sects = dev->size / hardsect_sizes[offset];
-+              register_disk(&ubd_gendisk, MKDEV(MAJOR_NR, offset), pcount, 
-+                            &ubd_blops, part->nr_sects);
-+
-+              /* we are done so close it */
-+              ubd_close(dev);
-+      } 
-+      else err = -ENODEV;
-+ out:
-+      return(err);
-+}
-+
-+static int ubd_revalidate(kdev_t rdev)
-+{
-+      int err;
-+
-+      spin_lock(&ubd_lock);
-+      err = ubd_revalidate1(rdev);
-+      spin_unlock(&ubd_lock);
-+      return(err);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/ubd_user.c um/arch/um/drivers/ubd_user.c
---- orig/arch/um/drivers/ubd_user.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/ubd_user.c      2003-06-05 14:39:22.000000000 -0400
-@@ -0,0 +1,372 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Copyright (C) 2001 Ridgerun,Inc (glonnon@ridgerun.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stddef.h>
-+#include <unistd.h>
-+#include <errno.h>
-+#include <sched.h>
-+#include <signal.h>
-+#include <string.h>
-+#include <netinet/in.h>
-+#include <sys/stat.h>
-+#include <sys/time.h>
-+#include <sys/fcntl.h>
-+#include <sys/socket.h>
-+#include <string.h>
-+#include <sys/mman.h>
-+#include <sys/param.h>
-+#include "asm/types.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "ubd_user.h"
-+#include "os.h"
-+#include "cow.h"
-+
-+#include <endian.h>
-+#include <byteswap.h>
-+
-+static int same_backing_files(char *from_cmdline, char *from_cow, char *cow)
-+{
-+      struct stat64 buf1, buf2;
-+
-+      if(from_cmdline == NULL) return(1);
-+      if(!strcmp(from_cmdline, from_cow)) return(1);
-+
-+      if(stat64(from_cmdline, &buf1) < 0){
-+              printk("Couldn't stat '%s', errno = %d\n", from_cmdline, 
-+                     errno);
-+              return(1);
-+      }
-+      if(stat64(from_cow, &buf2) < 0){
-+              printk("Couldn't stat '%s', errno = %d\n", from_cow, errno);
-+              return(1);
-+      }
-+      if((buf1.st_dev == buf2.st_dev) && (buf1.st_ino == buf2.st_ino))
-+              return(1);
-+
-+      printk("Backing file mismatch - \"%s\" requested,\n"
-+             "\"%s\" specified in COW header of \"%s\"\n",
-+             from_cmdline, from_cow, cow);
-+      return(0);
-+}
-+
-+static int backing_file_mismatch(char *file, __u64 size, time_t mtime)
-+{
-+      struct stat64 buf;
-+      long long actual;
-+      int err;
-+
-+      printk("%ld", htonll(size));
-+      if(stat64(file, &buf) < 0){
-+              printk("Failed to stat backing file \"%s\", errno = %d\n",
-+                     file, errno);
-+              return(-errno);
-+      }
-+
-+      err = os_file_size(file, &actual);
-+      if(err){
-+              printk("Failed to get size of backing file \"%s\", "
-+                     "errno = %d\n", file, -err);
-+              return(err);
-+      }
-+
-+      if(actual != size){
-+              printk("Size mismatch (%ld vs %ld) of COW header vs backing "
-+                     "file\n", size, actual);
-+              return(-EINVAL);
-+      }
-+      if(buf.st_mtime != mtime){
-+              printk("mtime mismatch (%ld vs %ld) of COW header vs backing "
-+                     "file\n", mtime, buf.st_mtime);
-+              return(-EINVAL);
-+      }
-+      return(0);
-+}
-+
-+int read_cow_bitmap(int fd, void *buf, int offset, int len)
-+{
-+      int err;
-+
-+      err = os_seek_file(fd, offset);
-+      if(err != 0) return(-errno);
-+      err = read(fd, buf, len);
-+      if(err < 0) return(-errno);
-+      return(0);
-+}
-+
-+int open_ubd_file(char *file, struct openflags *openflags, 
-+                char **backing_file_out, int *bitmap_offset_out, 
-+                unsigned long *bitmap_len_out, int *data_offset_out, 
-+                int *create_cow_out)
-+{
-+      time_t mtime;
-+      __u64 size;
-+      char *backing_file;
-+        int fd, err, sectorsize, magic, same, mode = 0644;
-+
-+        if((fd = os_open_file(file, *openflags, mode)) < 0){
-+              if((fd == -ENOENT) && (create_cow_out != NULL))
-+                      *create_cow_out = 1;
-+                if(!openflags->w ||
-+                   ((errno != EROFS) && (errno != EACCES))) return(-errno);
-+              openflags->w = 0;
-+                if((fd = os_open_file(file, *openflags, mode)) < 0) 
-+                      return(fd);
-+        }
-+
-+      err = os_lock_file(fd, openflags->w);
-+      if(err){
-+              printk("Failed to lock '%s', errno = %d\n", file, -err);
-+              goto error;
-+      }
-+      
-+      if(backing_file_out == NULL) return(fd);
-+
-+      err = read_cow_header(fd, &magic, &backing_file, &mtime, &size, 
-+                            &sectorsize, bitmap_offset_out);
-+      if(err && (*backing_file_out != NULL)){
-+              printk("Failed to read COW header from COW file \"%s\", "
-+                     "errno = %d\n", file, err);
-+              goto error;
-+      }
-+      if(err) return(fd);
-+
-+      if(backing_file_out == NULL) return(fd);
-+      
-+      same = same_backing_files(*backing_file_out, backing_file, file);
-+
-+      if(!same && !backing_file_mismatch(*backing_file_out, size, mtime)){
-+              printk("Switching backing file to '%s'\n", *backing_file_out);
-+              err = write_cow_header(file, fd, *backing_file_out, 
-+                                     sectorsize, &size);
-+              if(err){
-+                      printk("Switch failed, errno = %d\n", err);
-+                      return(err);
-+              }
-+      }
-+      else {
-+              *backing_file_out = backing_file;
-+              err = backing_file_mismatch(*backing_file_out, size, mtime);
-+              if(err) goto error;
-+      }
-+
-+      cow_sizes(size, sectorsize, *bitmap_offset_out, bitmap_len_out, 
-+                data_offset_out);
-+
-+        return(fd);
-+ error:
-+      os_close_file(fd);
-+      return(err);
-+}
-+
-+int create_cow_file(char *cow_file, char *backing_file, struct openflags flags,
-+                  int sectorsize, int *bitmap_offset_out, 
-+                  unsigned long *bitmap_len_out, int *data_offset_out)
-+{
-+      int err, fd;
-+
-+      flags.c = 1;
-+      fd = open_ubd_file(cow_file, &flags, NULL, NULL, NULL, NULL, NULL);
-+      if(fd < 0){
-+              err = fd;
-+              printk("Open of COW file '%s' failed, errno = %d\n", cow_file,
-+                     -err);
-+              goto out;
-+      }
-+
-+      err = init_cow_file(fd, cow_file, backing_file, sectorsize, 
-+                          bitmap_offset_out, bitmap_len_out, 
-+                          data_offset_out);
-+      if(!err)
-+              return(fd);
-+
-+      os_close_file(fd);
-+ out:
-+      return(err);
-+}
-+
-+int read_ubd_fs(int fd, void *buffer, int len)
-+{
-+      int n;
-+
-+      n = read(fd, buffer, len);
-+      if(n < 0) return(-errno);
-+      else return(n);
-+}
-+
-+int write_ubd_fs(int fd, char *buffer, int len)
-+{
-+      int n;
-+
-+      n = write(fd, buffer, len);
-+      if(n < 0) return(-errno);
-+      else return(n);
-+}
-+
-+void do_io(struct io_thread_req *req)
-+{
-+      char *buf;
-+      unsigned long len;
-+      int n, nsectors, start, end, bit;
-+      __u64 off;
-+
-+      nsectors = req->length / req->sectorsize;
-+      start = 0;
-+      do {
-+              bit = ubd_test_bit(start, (unsigned char *) &req->sector_mask);
-+              end = start;
-+              while((end < nsectors) && 
-+                    (ubd_test_bit(end, (unsigned char *) 
-+                                  &req->sector_mask) == bit))
-+                      end++;
-+
-+              if(end != nsectors)
-+                      printk("end != nsectors\n");
-+              off = req->offset + req->offsets[bit] + 
-+                      start * req->sectorsize;
-+              len = (end - start) * req->sectorsize;
-+              buf = &req->buffer[start * req->sectorsize];
-+
-+              if(os_seek_file(req->fds[bit], off) != 0){
-+                      printk("do_io - lseek failed : errno = %d\n", errno);
-+                      req->error = 1;
-+                      return;
-+              }
-+              if(req->op == UBD_READ){
-+                      n = 0;
-+                      do {
-+                              buf = &buf[n];
-+                              len -= n;
-+                              n = read(req->fds[bit], buf, len);
-+                              if (n < 0) {
-+                                      printk("do_io - read returned %d : "
-+                                             "errno = %d fd = %d\n", n,
-+                                             errno, req->fds[bit]);
-+                                      req->error = 1;
-+                                      return;
-+                              }
-+                      } while((n < len) && (n != 0));
-+                      if (n < len) memset(&buf[n], 0, len - n);
-+              }
-+              else {
-+                      n = write(req->fds[bit], buf, len);
-+                      if(n != len){
-+                              printk("do_io - write returned %d : "
-+                                     "errno = %d fd = %d\n", n, 
-+                                     errno, req->fds[bit]);
-+                              req->error = 1;
-+                              return;
-+                      }
-+              }
-+
-+              start = end;
-+      } while(start < nsectors);
-+
-+      if(req->cow_offset != -1){
-+              if(os_seek_file(req->fds[1], req->cow_offset) != 0){
-+                      printk("do_io - bitmap lseek failed : errno = %d\n",
-+                             errno);
-+                      req->error = 1;
-+                      return;
-+              }
-+              n = write(req->fds[1], &req->bitmap_words, 
-+                        sizeof(req->bitmap_words));
-+              if(n != sizeof(req->bitmap_words)){
-+                      printk("do_io - bitmap update returned %d : "
-+                             "errno = %d fd = %d\n", n, errno, req->fds[1]);
-+                      req->error = 1;
-+                      return;
-+              }
-+      }
-+      req->error = 0;
-+      return;
-+}
-+
-+/* Changed in start_io_thread, which is serialized by being called only
-+ * from ubd_init, which is an initcall.
-+ */
-+int kernel_fd = -1;
-+
-+/* Only changed by the io thread */
-+int io_count = 0;
-+
-+int io_thread(void *arg)
-+{
-+      struct io_thread_req req;
-+      int n;
-+
-+      signal(SIGWINCH, SIG_IGN);
-+      while(1){
-+              n = read(kernel_fd, &req, sizeof(req));
-+              if(n < 0) printk("io_thread - read returned %d, errno = %d\n",
-+                               n, errno);
-+              else if(n < sizeof(req)){
-+                      printk("io_thread - short read : length = %d\n", n);
-+                      continue;
-+              }
-+              io_count++;
-+              do_io(&req);
-+              n = write(kernel_fd, &req, sizeof(req));
-+              if(n != sizeof(req))
-+                      printk("io_thread - write failed, errno = %d\n",
-+                             errno);
-+      }
-+}
-+
-+int start_io_thread(unsigned long sp, int *fd_out)
-+{
-+      int pid, fds[2], err;
-+
-+      err = os_pipe(fds, 1, 1);
-+      if(err){
-+              printk("start_io_thread - os_pipe failed, errno = %d\n", -err);
-+              return(-1);
-+      }
-+      kernel_fd = fds[0];
-+      *fd_out = fds[1];
-+
-+      pid = clone(io_thread, (void *) sp, CLONE_FILES | CLONE_VM | SIGCHLD,
-+                  NULL);
-+      if(pid < 0){
-+              printk("start_io_thread - clone failed : errno = %d\n", errno);
-+              return(-errno);
-+      }
-+      return(pid);
-+}
-+
-+#ifdef notdef
-+int start_io_thread(unsigned long sp, int *fd_out)
-+{
-+      int pid;
-+
-+      if((kernel_fd = get_pty()) < 0) return(-1);
-+      raw(kernel_fd, 0);
-+      if((*fd_out = open(ptsname(kernel_fd), O_RDWR)) < 0){
-+              printk("Couldn't open tty for IO\n");
-+              return(-1);
-+      }
-+
-+      pid = clone(io_thread, (void *) sp, CLONE_FILES | CLONE_VM | SIGCHLD,
-+                  NULL);
-+      if(pid < 0){
-+              printk("start_io_thread - clone failed : errno = %d\n", errno);
-+              return(-errno);
-+      }
-+      return(pid);
-+}
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/xterm.c um/arch/um/drivers/xterm.c
---- orig/arch/um/drivers/xterm.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/xterm.c 2002-12-30 20:49:22.000000000 -0500
-@@ -0,0 +1,200 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <termios.h>
-+#include <signal.h>
-+#include <sched.h>
-+#include <sys/socket.h>
-+#include "kern_util.h"
-+#include "chan_user.h"
-+#include "helper.h"
-+#include "user_util.h"
-+#include "user.h"
-+#include "os.h"
-+#include "xterm.h"
-+
-+struct xterm_chan {
-+      int pid;
-+      int helper_pid;
-+      char *title;
-+      int device;
-+      int raw;
-+      struct termios tt;
-+      unsigned long stack;
-+      int direct_rcv;
-+};
-+
-+void *xterm_init(char *str, int device, struct chan_opts *opts)
-+{
-+      struct xterm_chan *data;
-+
-+      if((data = malloc(sizeof(*data))) == NULL) return(NULL);
-+      *data = ((struct xterm_chan) { .pid             = -1, 
-+                                     .helper_pid      = -1,
-+                                     .device          = device, 
-+                                     .title           = opts->xterm_title,
-+                                     .raw             = opts->raw,
-+                                     .stack           = opts->tramp_stack,
-+                                     .direct_rcv      = !opts->in_kernel } );
-+      return(data);
-+}
-+
-+/* Only changed by xterm_setup, which is a setup */
-+static char *terminal_emulator = "xterm";
-+static char *title_switch = "-T";
-+static char *exec_switch = "-e";
-+
-+static int __init xterm_setup(char *line, int *add)
-+{
-+      *add = 0;
-+      terminal_emulator = line;
-+
-+      line = strchr(line, ',');
-+      if(line == NULL) return(0);
-+      *line++ = '\0';
-+      if(*line) title_switch = line;
-+
-+      line = strchr(line, ',');
-+      if(line == NULL) return(0);
-+      *line++ = '\0';
-+      if(*line) exec_switch = line;
-+
-+      return(0);
-+}
-+
-+__uml_setup("xterm=", xterm_setup,
-+"xterm=<terminal emulator>,<title switch>,<exec switch>\n"
-+"    Specifies an alternate terminal emulator to use for the debugger,\n"
-+"    consoles, and serial lines when they are attached to the xterm channel.\n"
-+"    The values are the terminal emulator binary, the switch it uses to set\n"
-+"    its title, and the switch it uses to execute a subprocess,\n"
-+"    respectively.  The title switch must have the form '<switch> title',\n"
-+"    not '<switch>=title'.  Similarly, the exec switch must have the form\n"
-+"    '<switch> command arg1 arg2 ...'.\n"
-+"    The default values are 'xterm=xterm,-T,-e'.  Values for gnome-terminal\n"
-+"    are 'xterm=gnome-terminal,-t,-x'.\n\n"
-+);
-+
-+int xterm_open(int input, int output, int primary, void *d, char **dev_out)
-+{
-+      struct xterm_chan *data = d;
-+      unsigned long stack;
-+      int pid, fd, new, err;
-+      char title[256], file[] = "/tmp/xterm-pipeXXXXXX";
-+      char *argv[] = { terminal_emulator, title_switch, title, exec_switch, 
-+                       "/usr/lib/uml/port-helper", "-uml-socket",
-+                       file, NULL };
-+
-+      if(access(argv[4], X_OK))
-+              argv[4] = "port-helper";
-+
-+      fd = mkstemp(file);
-+      if(fd < 0){
-+              printk("xterm_open : mkstemp failed, errno = %d\n", errno);
-+              return(-errno);
-+      }
-+
-+      if(unlink(file)){
-+              printk("xterm_open : unlink failed, errno = %d\n", errno);
-+              return(-errno);
-+      }
-+      close(fd);
-+
-+      fd = create_unix_socket(file, sizeof(file));
-+      if(fd < 0){
-+              printk("xterm_open : create_unix_socket failed, errno = %d\n", 
-+                     -fd);
-+              return(-fd);
-+      }
-+
-+      sprintf(title, data->title, data->device);
-+      stack = data->stack;
-+      pid = run_helper(NULL, NULL, argv, &stack);
-+      if(pid < 0){
-+              printk("xterm_open : run_helper failed, errno = %d\n", -pid);
-+              return(pid);
-+      }
-+
-+      if(data->stack == 0) free_stack(stack, 0);
-+
-+      if(data->direct_rcv)
-+              new = os_rcv_fd(fd, &data->helper_pid);
-+      else {
-+              if((err = os_set_fd_block(fd, 0)) != 0){
-+                      printk("xterm_open : failed to set descriptor "
-+                             "non-blocking, errno = %d\n", err);
-+                      return(err);
-+              }
-+              new = xterm_fd(fd, &data->helper_pid);
-+      }
-+      if(new < 0){
-+              printk("xterm_open : os_rcv_fd failed, errno = %d\n", -new);
-+              goto out;
-+      }
-+
-+      tcgetattr(new, &data->tt);
-+      if(data->raw) raw(new, 0);
-+
-+      data->pid = pid;
-+      *dev_out = NULL;
-+ out:
-+      unlink(file);
-+      return(new);
-+}
-+
-+void xterm_close(int fd, void *d)
-+{
-+      struct xterm_chan *data = d;
-+      
-+      if(data->pid != -1) 
-+              os_kill_process(data->pid, 1);
-+      data->pid = -1;
-+      if(data->helper_pid != -1) 
-+              os_kill_process(data->helper_pid, 0);
-+      data->helper_pid = -1;
-+      close(fd);
-+}
-+
-+void xterm_free(void *d)
-+{
-+      free(d);
-+}
-+
-+int xterm_console_write(int fd, const char *buf, int n, void *d)
-+{
-+      struct xterm_chan *data = d;
-+
-+      return(generic_console_write(fd, buf, n, &data->tt));
-+}
-+
-+struct chan_ops xterm_ops = {
-+      .type           = "xterm",
-+      .init           = xterm_init,
-+      .open           = xterm_open,
-+      .close          = xterm_close,
-+      .read           = generic_read,
-+      .write          = generic_write,
-+      .console_write  = xterm_console_write,
-+      .window_size    = generic_window_size,
-+      .free           = xterm_free,
-+      .winch          = 1,
-+};
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/xterm.h um/arch/um/drivers/xterm.h
---- orig/arch/um/drivers/xterm.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/xterm.h 2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,22 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __XTERM_H__
-+#define __XTERM_H__
-+
-+extern int xterm_fd(int socket, int *pid_out);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/xterm_kern.c um/arch/um/drivers/xterm_kern.c
---- orig/arch/um/drivers/xterm_kern.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/xterm_kern.c    2002-12-17 17:31:20.000000000 -0500
-@@ -0,0 +1,79 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/errno.h"
-+#include "linux/slab.h"
-+#include "asm/semaphore.h"
-+#include "asm/irq.h"
-+#include "irq_user.h"
-+#include "kern_util.h"
-+#include "os.h"
-+#include "xterm.h"
-+
-+struct xterm_wait {
-+      struct semaphore sem;
-+      int fd;
-+      int pid;
-+      int new_fd;
-+};
-+
-+static void xterm_interrupt(int irq, void *data, struct pt_regs *regs)
-+{
-+      struct xterm_wait *xterm = data;
-+      int fd;
-+
-+      fd = os_rcv_fd(xterm->fd, &xterm->pid);
-+      if(fd == -EAGAIN)
-+              return;
-+
-+      xterm->new_fd = fd;
-+      up(&xterm->sem);
-+}
-+
-+int xterm_fd(int socket, int *pid_out)
-+{
-+      struct xterm_wait *data;
-+      int err, ret;
-+
-+      data = kmalloc(sizeof(*data), GFP_KERNEL);
-+      if(data == NULL){
-+              printk(KERN_ERR "xterm_fd : failed to allocate xterm_wait\n");
-+              return(-ENOMEM);
-+      }
-+      *data = ((struct xterm_wait) 
-+              { .sem          = __SEMAPHORE_INITIALIZER(data->sem, 0),
-+                .fd           = socket,
-+                .pid          = -1,
-+                .new_fd       = -1 });
-+
-+      err = um_request_irq(XTERM_IRQ, socket, IRQ_READ, xterm_interrupt, 
-+                           SA_INTERRUPT | SA_SHIRQ | SA_SAMPLE_RANDOM, 
-+                           "xterm", data);
-+      if(err){
-+              printk(KERN_ERR "xterm_fd : failed to get IRQ for xterm, "
-+                     "err = %d\n",  err);
-+              return(err);
-+      }
-+      down(&data->sem);
-+
-+      free_irq(XTERM_IRQ, data);
-+
-+      ret = data->new_fd;
-+      *pid_out = data->pid;
-+      kfree(data);
-+
-+      return(ret);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/dyn_link.ld.in um/arch/um/dyn_link.ld.in
---- orig/arch/um/dyn_link.ld.in        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/dyn_link.ld.in  2003-01-17 23:37:27.000000000 -0500
-@@ -0,0 +1,172 @@
-+OUTPUT_FORMAT("ELF_FORMAT")
-+OUTPUT_ARCH(ELF_ARCH)
-+ENTRY(_start)
-+SEARCH_DIR("/usr/local/i686-pc-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
-+/* Do we need any of these for elf?
-+   __DYNAMIC = 0;    */
-+SECTIONS
-+{
-+  . = START() + SIZEOF_HEADERS;
-+  .interp         : { *(.interp) }
-+  . = ALIGN(4096);
-+  __binary_start = .;
-+  . = ALIGN(4096);            /* Init code and data */
-+  _stext = .;
-+  __init_begin = .;
-+  .text.init : { *(.text.init) }
-+
-+  . = ALIGN(4096);
-+
-+  /* Read-only sections, merged into text segment: */
-+  .hash           : { *(.hash) }
-+  .dynsym         : { *(.dynsym) }
-+  .dynstr         : { *(.dynstr) }
-+  .gnu.version    : { *(.gnu.version) }
-+  .gnu.version_d  : { *(.gnu.version_d) }
-+  .gnu.version_r  : { *(.gnu.version_r) }
-+  .rel.init       : { *(.rel.init) }
-+  .rela.init      : { *(.rela.init) }
-+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
-+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
-+  .rel.fini       : { *(.rel.fini) }
-+  .rela.fini      : { *(.rela.fini) }
-+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
-+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
-+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
-+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
-+  .rel.tdata    : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
-+  .rela.tdata   : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
-+  .rel.tbss     : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
-+  .rela.tbss    : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
-+  .rel.ctors      : { *(.rel.ctors) }
-+  .rela.ctors     : { *(.rela.ctors) }
-+  .rel.dtors      : { *(.rel.dtors) }
-+  .rela.dtors     : { *(.rela.dtors) }
-+  .rel.got        : { *(.rel.got) }
-+  .rela.got       : { *(.rela.got) }
-+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
-+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
-+  .rel.plt        : { *(.rel.plt) }
-+  .rela.plt       : { *(.rela.plt) }
-+  .init           : {
-+    KEEP (*(.init))
-+  } =0x90909090
-+  .plt            : { *(.plt) }
-+  .text           : {
-+    *(.text .stub .text.* .gnu.linkonce.t.*)
-+    /* .gnu.warning sections are handled specially by elf32.em.  */
-+    *(.gnu.warning)
-+  } =0x90909090
-+  .fini           : {
-+    KEEP (*(.fini))
-+  } =0x90909090
-+
-+  PROVIDE (__etext = .);
-+  PROVIDE (_etext = .);
-+  PROVIDE (etext = .);
-+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
-+  .rodata1        : { *(.rodata1) }
-+  .eh_frame_hdr : { *(.eh_frame_hdr) }
-+
-+
-+  . = ALIGN(4096);
-+  PROVIDE (_sdata = .);
-+
-+include(`arch/um/common.ld.in')
-+
-+  /* Ensure the __preinit_array_start label is properly aligned.  We
-+     could instead move the label definition inside the section, but
-+     the linker would then create the section even if it turns out to
-+     be empty, which isn't pretty.  */
-+  . = ALIGN(32 / 8);
-+  .preinit_array     : { *(.preinit_array) }
-+  .init_array     : { *(.init_array) }
-+  .fini_array     : { *(.fini_array) }
-+  .data           : {
-+    . = ALIGN(KERNEL_STACK_SIZE);             /* init_task */
-+    *(.data.init_task)
-+    *(.data .data.* .gnu.linkonce.d.*)
-+    SORT(CONSTRUCTORS)
-+  }
-+  .data1          : { *(.data1) }
-+  .tdata        : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-+  .tbss                 : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
-+  .eh_frame       : { KEEP (*(.eh_frame)) }
-+  .gcc_except_table   : { *(.gcc_except_table) }
-+  .dynamic        : { *(.dynamic) }
-+  .ctors          : {
-+    /* gcc uses crtbegin.o to find the start of
-+       the constructors, so we make sure it is
-+       first.  Because this is a wildcard, it
-+       doesn't matter if the user does not
-+       actually link against crtbegin.o; the
-+       linker won't look for a file to match a
-+       wildcard.  The wildcard also means that it
-+       doesn't matter which directory crtbegin.o
-+       is in.  */
-+    KEEP (*crtbegin.o(.ctors))
-+    /* We don't want to include the .ctor section from
-+       from the crtend.o file until after the sorted ctors.
-+       The .ctor section from the crtend file contains the
-+       end of ctors marker and it must be last */
-+    KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
-+    KEEP (*(SORT(.ctors.*)))
-+    KEEP (*(.ctors))
-+  }
-+  .dtors          : {
-+    KEEP (*crtbegin.o(.dtors))
-+    KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
-+    KEEP (*(SORT(.dtors.*)))
-+    KEEP (*(.dtors))
-+  }
-+  .jcr            : { KEEP (*(.jcr)) }
-+  .got            : { *(.got.plt) *(.got) }
-+  _edata = .;
-+  PROVIDE (edata = .);
-+  __bss_start = .;
-+  .bss            : {
-+   *(.dynbss)
-+   *(.bss .bss.* .gnu.linkonce.b.*)
-+   *(COMMON)
-+   /* Align here to ensure that the .bss section occupies space up to
-+      _end.  Align after .bss to ensure correct alignment even if the
-+      .bss section disappears because there are no input sections.  */
-+   . = ALIGN(32 / 8);
-+  . = ALIGN(32 / 8);
-+  }
-+  _end = .;
-+  PROVIDE (end = .);
-+   /* Stabs debugging sections.  */
-+  .stab          0 : { *(.stab) }
-+  .stabstr       0 : { *(.stabstr) }
-+  .stab.excl     0 : { *(.stab.excl) }
-+  .stab.exclstr  0 : { *(.stab.exclstr) }
-+  .stab.index    0 : { *(.stab.index) }
-+  .stab.indexstr 0 : { *(.stab.indexstr) }
-+  .comment       0 : { *(.comment) }
-+  /* DWARF debug sections.
-+     Symbols in the DWARF debugging sections are relative to the beginning
-+     of the section so we begin them at 0.  */
-+  /* DWARF 1 */
-+  .debug          0 : { *(.debug) }
-+  .line           0 : { *(.line) }
-+  /* GNU DWARF 1 extensions */
-+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
-+  .debug_sfnames  0 : { *(.debug_sfnames) }
-+  /* DWARF 1.1 and DWARF 2 */
-+  .debug_aranges  0 : { *(.debug_aranges) }
-+  .debug_pubnames 0 : { *(.debug_pubnames) }
-+  /* DWARF 2 */
-+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
-+  .debug_abbrev   0 : { *(.debug_abbrev) }
-+  .debug_line     0 : { *(.debug_line) }
-+  .debug_frame    0 : { *(.debug_frame) }
-+  .debug_str      0 : { *(.debug_str) }
-+  .debug_loc      0 : { *(.debug_loc) }
-+  .debug_macinfo  0 : { *(.debug_macinfo) }
-+  /* SGI/MIPS DWARF 2 extensions */
-+  .debug_weaknames 0 : { *(.debug_weaknames) }
-+  .debug_funcnames 0 : { *(.debug_funcnames) }
-+  .debug_typenames 0 : { *(.debug_typenames) }
-+  .debug_varnames  0 : { *(.debug_varnames) }
-+}
-diff -Naur -X ../exclude-files orig/arch/um/fs/hostfs/hostfs.h um/arch/um/fs/hostfs/hostfs.h
---- orig/arch/um/fs/hostfs/hostfs.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/fs/hostfs/hostfs.h      2003-05-22 11:03:20.000000000 -0400
-@@ -0,0 +1,69 @@
-+#ifndef __UM_FS_HOSTFS
-+#define __UM_FS_HOSTFS
-+
-+#include "os.h"
-+
-+/* These are exactly the same definitions as in fs.h, but the names are 
-+ * changed so that this file can be included in both kernel and user files.
-+ */
-+
-+#define HOSTFS_ATTR_MODE      1
-+#define HOSTFS_ATTR_UID       2
-+#define HOSTFS_ATTR_GID       4
-+#define HOSTFS_ATTR_SIZE      8
-+#define HOSTFS_ATTR_ATIME     16
-+#define HOSTFS_ATTR_MTIME     32
-+#define HOSTFS_ATTR_CTIME     64
-+#define HOSTFS_ATTR_ATIME_SET 128
-+#define HOSTFS_ATTR_MTIME_SET 256
-+#define HOSTFS_ATTR_FORCE     512     /* Not a change, but a change it */
-+#define HOSTFS_ATTR_ATTR_FLAG 1024
-+
-+struct hostfs_iattr {
-+      unsigned int    ia_valid;
-+      mode_t          ia_mode;
-+      uid_t           ia_uid;
-+      gid_t           ia_gid;
-+      loff_t          ia_size;
-+      time_t          ia_atime;
-+      time_t          ia_mtime;
-+      time_t          ia_ctime;
-+      unsigned int    ia_attr_flags;
-+};
-+
-+extern int stat_file(const char *path, int *dev_out, 
-+                   unsigned long long *inode_out, int *mode_out, 
-+                   int *nlink_out, int *uid_out, int *gid_out, 
-+                   unsigned long long *size_out, unsigned long *atime_out, 
-+                   unsigned long *mtime_out, unsigned long *ctime_out, 
-+                   int *blksize_out, unsigned long long *blocks_out);
-+extern int access_file(char *path, int r, int w, int x);
-+extern int open_file(char *path, int r, int w, int append);
-+extern int file_type(const char *path, int *rdev);
-+extern void *open_dir(char *path, int *err_out);
-+extern char *read_dir(void *stream, unsigned long long *pos, 
-+                    unsigned long long *ino_out, int *len_out);
-+extern void close_file(void *stream);
-+extern void close_dir(void *stream);
-+extern int read_file(int fd, unsigned long long *offset, char *buf, int len);
-+extern int write_file(int fd, unsigned long long *offset, const char *buf,
-+                    int len);
-+extern int lseek_file(int fd, long long offset, int whence);
-+extern int file_create(char *name, int ur, int uw, int ux, int gr, 
-+                     int gw, int gx, int or, int ow, int ox);
-+extern int set_attr(const char *file, struct hostfs_iattr *attrs);
-+extern int make_symlink(const char *from, const char *to);
-+extern int unlink_file(const char *file);
-+extern int do_mkdir(const char *file, int mode);
-+extern int do_rmdir(const char *file);
-+extern int do_mknod(const char *file, int mode, int dev);
-+extern int link_file(const char *from, const char *to);
-+extern int do_readlink(char *file, char *buf, int size);
-+extern int rename_file(char *from, char *to);
-+extern int do_statfs(char *root, long *bsize_out, long long *blocks_out, 
-+                   long long *bfree_out, long long *bavail_out, 
-+                   long long *files_out, long long *ffree_out, 
-+                   void *fsid_out, int fsid_size, long *namelen_out, 
-+                   long *spare_out);
-+
-+#endif
-diff -Naur -X ../exclude-files orig/arch/um/fs/hostfs/hostfs_kern.c um/arch/um/fs/hostfs/hostfs_kern.c
---- orig/arch/um/fs/hostfs/hostfs_kern.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/fs/hostfs/hostfs_kern.c 2003-05-22 11:26:25.000000000 -0400
-@@ -0,0 +1,923 @@
-+/* 
-+ * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <linux/stddef.h>
-+#include <linux/fs.h>
-+#include <linux/version.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/pagemap.h>
-+#include <linux/blkdev.h>
-+#include <asm/uaccess.h>
-+#include "hostfs.h"
-+#include "kern_util.h"
-+#include "kern.h"
-+#include "user_util.h"
-+#include "2_5compat.h"
-+#include "init.h"
-+
-+#define file_hostfs_i(file) (&(file)->f_dentry->d_inode->u.hostfs_i)
-+
-+int hostfs_d_delete(struct dentry *dentry)
-+{
-+      return(1);
-+}
-+
-+struct dentry_operations hostfs_dentry_ops = {
-+      .d_delete               = hostfs_d_delete,
-+};
-+
-+/* Changed in hostfs_args before the kernel starts running */
-+static char *root_ino = "/";
-+static int append = 0;
-+
-+#define HOSTFS_SUPER_MAGIC 0x00c0ffee
-+
-+static struct inode_operations hostfs_iops;
-+static struct inode_operations hostfs_dir_iops;
-+static struct address_space_operations hostfs_link_aops;
-+
-+static int __init hostfs_args(char *options, int *add)
-+{
-+      char *ptr;
-+
-+      ptr = strchr(options, ',');
-+      if(ptr != NULL)
-+              *ptr++ = '\0';
-+      if(*options != '\0')
-+              root_ino = options;
-+
-+      options = ptr;
-+      while(options){
-+              ptr = strchr(options, ',');
-+              if(ptr != NULL)
-+                      *ptr++ = '\0';
-+              if(*options != '\0'){
-+                      if(!strcmp(options, "append"))
-+                              append = 1;
-+                      else printf("hostfs_args - unsupported option - %s\n",
-+                                  options);
-+              }
-+              options = ptr;
-+      }
-+      return(0);
-+}
-+
-+__uml_setup("hostfs=", hostfs_args,
-+"hostfs=<root dir>,<flags>,...\n"
-+"    This is used to set hostfs parameters.  The root directory argument\n"
-+"    is used to confine all hostfs mounts to within the specified directory\n"
-+"    tree on the host.  If this isn't specified, then a user inside UML can\n"
-+"    mount anything on the host that's accessible to the user that's running\n"
-+"    it.\n"
-+"    The only flag currently supported is 'append', which specifies that all\n"
-+"    files opened by hostfs will be opened in append mode.\n\n"
-+);
-+
-+static char *dentry_name(struct dentry *dentry, int extra)
-+{
-+      struct dentry *parent;
-+      char *root, *name;
-+      int len;
-+
-+      len = 0;
-+      parent = dentry;
-+      while(parent->d_parent != parent){
-+              len += parent->d_name.len + 1;
-+              parent = parent->d_parent;
-+      }
-+      
-+      root = parent->d_inode->u.hostfs_i.host_filename;
-+      len += strlen(root);
-+      name = kmalloc(len + extra + 1, GFP_KERNEL);
-+      if(name == NULL) return(NULL);
-+
-+      name[len] = '\0';
-+      parent = dentry;
-+      while(parent->d_parent != parent){
-+              len -= parent->d_name.len + 1;
-+              name[len] = '/';
-+              strncpy(&name[len + 1], parent->d_name.name, 
-+                      parent->d_name.len);
-+              parent = parent->d_parent;
-+      }
-+      strncpy(name, root, strlen(root));
-+      return(name);
-+}
-+
-+static char *inode_name(struct inode *ino, int extra)
-+{
-+      struct dentry *dentry;
-+
-+      dentry = list_entry(ino->i_dentry.next, struct dentry, d_alias);
-+      return(dentry_name(dentry, extra));
-+}
-+
-+static int read_name(struct inode *ino, char *name)
-+{
-+      /* The non-int inode fields are copied into ints by stat_file and
-+       * then copied into the inode because passing the actual pointers
-+       * in and having them treated as int * breaks on big-endian machines
-+       */
-+      int err;
-+      int i_dev, i_mode, i_nlink, i_blksize;
-+      unsigned long long i_size;
-+      unsigned long long i_ino;
-+      unsigned long long i_blocks;
-+      err = stat_file(name, &i_dev, &i_ino, &i_mode, &i_nlink, 
-+                      &ino->i_uid, &ino->i_gid, &i_size, &ino->i_atime, 
-+                      &ino->i_mtime, &ino->i_ctime, &i_blksize, &i_blocks);
-+      if(err) return(err);
-+      ino->i_ino = i_ino;
-+      ino->i_dev = i_dev;
-+      ino->i_mode = i_mode;
-+      ino->i_nlink = i_nlink;
-+      ino->i_size = i_size;
-+      ino->i_blksize = i_blksize;
-+      ino->i_blocks = i_blocks;
-+      if(kdev_same(ino->i_sb->s_dev, ROOT_DEV) && (ino->i_uid == getuid()))
-+              ino->i_uid = 0;
-+      return(0);
-+}
-+
-+static char *follow_link(char *link)
-+{
-+      int len, n;
-+      char *name, *resolved, *end;
-+
-+      len = 64;
-+      while(1){
-+              n = -ENOMEM;
-+              name = kmalloc(len, GFP_KERNEL);
-+              if(name == NULL)
-+                      goto out;
-+
-+              n = do_readlink(link, name, len);
-+              if(n < len)
-+                      break;
-+              len *= 2;
-+              kfree(name);
-+      }
-+      if(n < 0)
-+              goto out_free;
-+
-+      if(*name == '/')
-+              return(name);
-+
-+      end = strrchr(link, '/');
-+      if(end == NULL)
-+              return(name);
-+
-+      *(end + 1) = '\0';
-+      len = strlen(link) + strlen(name) + 1;
-+
-+      resolved = kmalloc(len, GFP_KERNEL);
-+      if(resolved == NULL){
-+              n = -ENOMEM;
-+              goto out_free;
-+      }
-+
-+      sprintf(resolved, "%s%s", link, name);
-+      kfree(name);
-+      kfree(link);
-+      return(resolved);
-+
-+ out_free:
-+      kfree(name);
-+ out:
-+      return(ERR_PTR(n));
-+}
-+
-+static int read_inode(struct inode *ino)
-+{
-+      char *name;
-+      int err;
-+
-+      err = -ENOMEM;
-+      name = inode_name(ino, 0);
-+      if(name == NULL) 
-+              goto out;
-+
-+      if(file_type(name, NULL) == OS_TYPE_SYMLINK){
-+              name = follow_link(name);
-+              if(IS_ERR(name)){
-+                      err = PTR_ERR(name);
-+                      goto out;
-+              }
-+      }
-+      
-+      err = read_name(ino, name);
-+      kfree(name);
-+ out:
-+      return(err);
-+}
-+
-+void hostfs_delete_inode(struct inode *ino)
-+{
-+      if(ino->u.hostfs_i.host_filename) 
-+              kfree(ino->u.hostfs_i.host_filename);
-+      ino->u.hostfs_i.host_filename = NULL;
-+
-+      if(ino->u.hostfs_i.fd != -1) 
-+              close_file(&ino->u.hostfs_i.fd);
-+
-+      ino->u.hostfs_i.mode = 0;
-+      clear_inode(ino);
-+}
-+
-+int hostfs_statfs(struct super_block *sb, struct statfs *sf)
-+{
-+      /* do_statfs uses struct statfs64 internally, but the linux kernel
-+       * struct statfs still has 32-bit versions for most of these fields,
-+       * so we convert them here
-+       */
-+      int err;
-+      long long f_blocks;
-+      long long f_bfree;
-+      long long f_bavail;
-+      long long f_files;
-+      long long f_ffree;
-+
-+      err = do_statfs(sb->s_root->d_inode->u.hostfs_i.host_filename,
-+                      &sf->f_bsize, &f_blocks, &f_bfree, &f_bavail, &f_files,
-+                      &f_ffree, &sf->f_fsid, sizeof(sf->f_fsid), 
-+                      &sf->f_namelen, sf->f_spare);
-+      if(err) return(err);
-+      sf->f_blocks = f_blocks;
-+      sf->f_bfree = f_bfree;
-+      sf->f_bavail = f_bavail;
-+      sf->f_files = f_files;
-+      sf->f_ffree = f_ffree;
-+      sf->f_type = HOSTFS_SUPER_MAGIC;
-+      return(0);
-+}
-+
-+static struct super_operations hostfs_sbops = { 
-+      .put_inode      = force_delete,
-+      .delete_inode   = hostfs_delete_inode,
-+      .statfs         = hostfs_statfs,
-+};
-+
-+int hostfs_readdir(struct file *file, void *ent, filldir_t filldir)
-+{
-+      void *dir;
-+      char *name;
-+      unsigned long long next, ino;
-+      int error, len;
-+
-+      name = dentry_name(file->f_dentry, 0);
-+      if(name == NULL) return(-ENOMEM);
-+      dir = open_dir(name, &error);
-+      kfree(name);
-+      if(dir == NULL) return(-error);
-+      next = file->f_pos;
-+      while((name = read_dir(dir, &next, &ino, &len)) != NULL){
-+              error = (*filldir)(ent, name, len, file->f_pos, 
-+                                 ino, DT_UNKNOWN);
-+              if(error) break;
-+              file->f_pos = next;
-+      }
-+      close_dir(dir);
-+      return(0);
-+}
-+
-+int hostfs_file_open(struct inode *ino, struct file *file)
-+{
-+      char *name;
-+      int mode = 0, r = 0, w = 0, fd;
-+
-+      mode = file->f_mode & (FMODE_READ | FMODE_WRITE);
-+      if((mode & ino->u.hostfs_i.mode) == mode)
-+              return(0);
-+
-+      /* The file may already have been opened, but with the wrong access,
-+       * so this resets things and reopens the file with the new access.
-+       */
-+      if(ino->u.hostfs_i.fd != -1){
-+              close_file(&ino->u.hostfs_i.fd);
-+              ino->u.hostfs_i.fd = -1;
-+      }
-+
-+      ino->u.hostfs_i.mode |= mode;
-+      if(ino->u.hostfs_i.mode & FMODE_READ) 
-+              r = 1;
-+      if(ino->u.hostfs_i.mode & FMODE_WRITE) 
-+              w = 1;
-+      if(w) 
-+              r = 1;
-+
-+      name = dentry_name(file->f_dentry, 0);
-+      if(name == NULL) 
-+              return(-ENOMEM);
-+
-+      fd = open_file(name, r, w, append);
-+      kfree(name);
-+      if(fd < 0) return(fd);
-+      file_hostfs_i(file)->fd = fd;
-+
-+      return(0);
-+}
-+
-+int hostfs_dir_open(struct inode *ino, struct file *file)
-+{
-+      return(0);      
-+}
-+
-+int hostfs_dir_release(struct inode *ino, struct file *file)
-+{
-+      return(0);
-+}
-+
-+int hostfs_fsync(struct file *file, struct dentry *dentry, int datasync)
-+{
-+      return(0);
-+}
-+
-+static struct file_operations hostfs_file_fops = {
-+      .owner          = NULL,
-+      .read           = generic_file_read,
-+      .write          = generic_file_write,
-+      .mmap           = generic_file_mmap,
-+      .open           = hostfs_file_open,
-+      .release        = NULL,
-+      .fsync          = hostfs_fsync,
-+};
-+
-+static struct file_operations hostfs_dir_fops = {
-+      .owner          = NULL,
-+      .readdir        = hostfs_readdir,
-+      .open           = hostfs_dir_open,
-+      .release        = hostfs_dir_release,
-+      .fsync          = hostfs_fsync,
-+};
-+
-+int hostfs_writepage(struct page *page)
-+{
-+      struct address_space *mapping = page->mapping;
-+      struct inode *inode = mapping->host;
-+      char *buffer;
-+      unsigned long long base;
-+      int count = PAGE_CACHE_SIZE;
-+      int end_index = inode->i_size >> PAGE_CACHE_SHIFT;
-+      int err;
-+
-+      if (page->index >= end_index)
-+              count = inode->i_size & (PAGE_CACHE_SIZE-1);
-+
-+      buffer = kmap(page);
-+      base = ((unsigned long long) page->index) << PAGE_CACHE_SHIFT;
-+
-+      err = write_file(inode->u.hostfs_i.fd, &base, buffer, count);
-+      if(err != count){
-+              ClearPageUptodate(page);
-+              goto out;
-+      }
-+
-+      if (base > inode->i_size)
-+              inode->i_size = base;
-+
-+      if (PageError(page))
-+              ClearPageError(page);   
-+      err = 0;
-+
-+ out: 
-+      kunmap(page);
-+
-+      UnlockPage(page);
-+      return err; 
-+}
-+
-+int hostfs_readpage(struct file *file, struct page *page)
-+{
-+      char *buffer;
-+      long long start;
-+      int err = 0;
-+
-+      start = (long long) page->index << PAGE_CACHE_SHIFT;
-+      buffer = kmap(page);
-+      err = read_file(file_hostfs_i(file)->fd, &start, buffer,
-+                      PAGE_CACHE_SIZE);
-+      if(err < 0) goto out;
-+
-+      memset(&buffer[err], 0, PAGE_CACHE_SIZE - err);
-+
-+      flush_dcache_page(page);
-+      SetPageUptodate(page);
-+      if (PageError(page)) ClearPageError(page);
-+      err = 0;
-+ out:
-+      kunmap(page);
-+      UnlockPage(page);
-+      return(err);
-+}
-+
-+int hostfs_prepare_write(struct file *file, struct page *page, 
-+                       unsigned int from, unsigned int to)
-+{
-+      char *buffer;
-+      long long start, tmp;
-+      int err;
-+
-+      start = (long long) page->index << PAGE_CACHE_SHIFT;
-+      buffer = kmap(page);
-+      if(from != 0){
-+              tmp = start;
-+              err = read_file(file_hostfs_i(file)->fd, &tmp, buffer,
-+                              from);
-+              if(err < 0) goto out;
-+      }
-+      if(to != PAGE_CACHE_SIZE){
-+              start += to;
-+              err = read_file(file_hostfs_i(file)->fd, &start, buffer + to,
-+                              PAGE_CACHE_SIZE - to);
-+              if(err < 0) goto out;           
-+      }
-+      err = 0;
-+ out:
-+      kunmap(page);
-+      return(err);
-+}
-+
-+int hostfs_commit_write(struct file *file, struct page *page, unsigned from,
-+               unsigned to)
-+{
-+      struct address_space *mapping = page->mapping;
-+      struct inode *inode = mapping->host;
-+      char *buffer;
-+      long long start;
-+      int err = 0;
-+
-+      start = (long long) (page->index << PAGE_CACHE_SHIFT) + from;
-+      buffer = kmap(page);
-+      err = write_file(file_hostfs_i(file)->fd, &start, buffer + from, 
-+                       to - from);
-+      if(err > 0) err = 0;
-+      if(!err && (start > inode->i_size))
-+              inode->i_size = start;
-+
-+      kunmap(page);
-+      return(err);
-+}
-+
-+static struct address_space_operations hostfs_aops = {
-+      .writepage      = hostfs_writepage,
-+      .readpage       = hostfs_readpage,
-+/*    .set_page_dirty = __set_page_dirty_nobuffers, */
-+      .prepare_write  = hostfs_prepare_write,
-+      .commit_write   = hostfs_commit_write
-+};
-+
-+static struct inode *get_inode(struct super_block *sb, struct dentry *dentry,
-+                             int *error)
-+{
-+      struct inode *inode;
-+      char *name;
-+      int type, err = -ENOMEM, rdev;
-+
-+      inode = new_inode(sb);
-+      if(inode == NULL) 
-+              goto out;
-+
-+      inode->u.hostfs_i.host_filename = NULL;
-+      inode->u.hostfs_i.fd = -1;
-+      inode->u.hostfs_i.mode = 0;
-+      insert_inode_hash(inode);
-+      if(dentry){
-+              name = dentry_name(dentry, 0);
-+              if(name == NULL){
-+                      err = -ENOMEM;
-+                      goto out_put;
-+              }
-+              type = file_type(name, &rdev);
-+              kfree(name);
-+      }
-+      else type = OS_TYPE_DIR;
-+      inode->i_sb = sb;
-+
-+      err = 0;
-+      if(type == OS_TYPE_SYMLINK)
-+              inode->i_op = &page_symlink_inode_operations;
-+      else if(type == OS_TYPE_DIR)
-+              inode->i_op = &hostfs_dir_iops;
-+      else inode->i_op = &hostfs_iops;
-+
-+      if(type == OS_TYPE_DIR) inode->i_fop = &hostfs_dir_fops;
-+      else inode->i_fop = &hostfs_file_fops;
-+
-+      if(type == OS_TYPE_SYMLINK) 
-+              inode->i_mapping->a_ops = &hostfs_link_aops;
-+      else inode->i_mapping->a_ops = &hostfs_aops;
-+
-+      switch (type) {
-+      case OS_TYPE_CHARDEV:
-+              init_special_inode(inode, S_IFCHR, rdev);
-+              break;
-+      case OS_TYPE_BLOCKDEV:
-+              init_special_inode(inode, S_IFBLK, rdev);
-+              break;
-+      case OS_TYPE_FIFO:
-+              init_special_inode(inode, S_IFIFO, 0);
-+              break;
-+      case OS_TYPE_SOCK:
-+              init_special_inode(inode, S_IFSOCK, 0);
-+              break;
-+      }
-+      
-+      if(error) *error = err;
-+      return(inode);
-+ out_put:
-+      iput(inode);
-+ out:
-+      if(error) *error = err;
-+      return(NULL);
-+}
-+
-+int hostfs_create(struct inode *dir, struct dentry *dentry, int mode)
-+{
-+      struct inode *inode;
-+      char *name;
-+      int error, fd;
-+
-+      inode = get_inode(dir->i_sb, dentry, &error);
-+      if(error) return(error);
-+      name = dentry_name(dentry, 0);
-+      if(name == NULL){
-+              iput(inode);
-+              return(-ENOMEM);
-+      }
-+      fd = file_create(name, 
-+                       mode & S_IRUSR, mode & S_IWUSR, mode & S_IXUSR, 
-+                       mode & S_IRGRP, mode & S_IWGRP, mode & S_IXGRP, 
-+                       mode & S_IROTH, mode & S_IWOTH, mode & S_IXOTH);
-+      if(fd < 0) 
-+              error = fd;
-+      else error = read_name(inode, name);
-+
-+      kfree(name);
-+      if(error){
-+              iput(inode);
-+              return(error);
-+      }
-+      inode->u.hostfs_i.fd = fd;
-+      inode->u.hostfs_i.mode = FMODE_READ | FMODE_WRITE;
-+      d_instantiate(dentry, inode);
-+      return(0);
-+}
-+ 
-+struct dentry *hostfs_lookup(struct inode *ino, struct dentry *dentry)
-+{
-+      struct inode *inode;
-+      char *name;
-+      int error;
-+
-+      inode = get_inode(ino->i_sb, dentry, &error);
-+      if(error != 0) return(ERR_PTR(error));
-+      name = dentry_name(dentry, 0);
-+      if(name == NULL) return(ERR_PTR(-ENOMEM));
-+      error = read_name(inode, name);
-+      kfree(name);
-+      if(error){
-+              iput(inode);
-+              if(error == -ENOENT) inode = NULL;
-+              else return(ERR_PTR(error));
-+      }
-+      d_add(dentry, inode);
-+      dentry->d_op = &hostfs_dentry_ops;
-+      return(NULL);
-+}
-+
-+static char *inode_dentry_name(struct inode *ino, struct dentry *dentry)
-+{
-+        char *file;
-+      int len;
-+
-+      file = inode_name(ino, dentry->d_name.len + 1);
-+      if(file == NULL) return(NULL);
-+        strcat(file, "/");
-+      len = strlen(file);
-+        strncat(file, dentry->d_name.name, dentry->d_name.len);
-+      file[len + dentry->d_name.len] = '\0';
-+        return(file);
-+}
-+
-+int hostfs_link(struct dentry *to, struct inode *ino, struct dentry *from)
-+{
-+        char *from_name, *to_name;
-+        int err;
-+
-+        if((from_name = inode_dentry_name(ino, from)) == NULL) 
-+                return(-ENOMEM);
-+        to_name = dentry_name(to, 0);
-+      if(to_name == NULL){
-+              kfree(from_name);
-+              return(-ENOMEM);
-+      }
-+        err = link_file(to_name, from_name);
-+        kfree(from_name);
-+        kfree(to_name);
-+        return(err);
-+}
-+
-+int hostfs_unlink(struct inode *ino, struct dentry *dentry)
-+{
-+      char *file;
-+      int err;
-+
-+      if((file = inode_dentry_name(ino, dentry)) == NULL) return(-ENOMEM);
-+      if(append)
-+              return(-EPERM);
-+
-+      err = unlink_file(file);
-+      kfree(file);
-+      return(err);
-+}
-+
-+int hostfs_symlink(struct inode *ino, struct dentry *dentry, const char *to)
-+{
-+      char *file;
-+      int err;
-+
-+      if((file = inode_dentry_name(ino, dentry)) == NULL) return(-ENOMEM);
-+      err = make_symlink(file, to);
-+      kfree(file);
-+      return(err);
-+}
-+
-+int hostfs_mkdir(struct inode *ino, struct dentry *dentry, int mode)
-+{
-+      char *file;
-+      int err;
-+
-+      if((file = inode_dentry_name(ino, dentry)) == NULL) return(-ENOMEM);
-+      err = do_mkdir(file, mode);
-+      kfree(file);
-+      return(err);
-+}
-+
-+int hostfs_rmdir(struct inode *ino, struct dentry *dentry)
-+{
-+      char *file;
-+      int err;
-+
-+      if((file = inode_dentry_name(ino, dentry)) == NULL) return(-ENOMEM);
-+      err = do_rmdir(file);
-+      kfree(file);
-+      return(err);
-+}
-+
-+int hostfs_mknod(struct inode *dir, struct dentry *dentry, int mode, int dev)
-+{
-+      struct inode *inode;
-+      char *name;
-+      int error;
-+ 
-+      inode = get_inode(dir->i_sb, dentry, &error);
-+      if(error) return(error);
-+      name = dentry_name(dentry, 0);
-+      if(name == NULL){
-+              iput(inode);
-+              return(-ENOMEM);
-+      }
-+      init_special_inode(inode, mode, dev);
-+      error = do_mknod(name, mode, dev);
-+      if(!error) error = read_name(inode, name);
-+      kfree(name);
-+      if(error){
-+              iput(inode);
-+              return(error);
-+      }
-+      d_instantiate(dentry, inode);
-+      return(0);
-+}
-+
-+int hostfs_rename(struct inode *from_ino, struct dentry *from,
-+                struct inode *to_ino, struct dentry *to)
-+{
-+      char *from_name, *to_name;
-+      int err;
-+
-+      if((from_name = inode_dentry_name(from_ino, from)) == NULL)
-+              return(-ENOMEM);
-+      if((to_name = inode_dentry_name(to_ino, to)) == NULL){
-+              kfree(from_name);
-+              return(-ENOMEM);
-+      }
-+      err = rename_file(from_name, to_name);
-+      kfree(from_name);
-+      kfree(to_name);
-+      return(err);
-+}
-+
-+void hostfs_truncate(struct inode *ino)
-+{
-+      not_implemented();
-+}
-+
-+int hostfs_permission(struct inode *ino, int desired)
-+{
-+      char *name;
-+      int r = 0, w = 0, x = 0, err;
-+
-+      if(desired & MAY_READ) r = 1;
-+      if(desired & MAY_WRITE) w = 1;
-+      if(desired & MAY_EXEC) x = 1;
-+      name = inode_name(ino, 0);
-+      if(name == NULL) return(-ENOMEM);
-+      err = access_file(name, r, w, x);
-+      kfree(name);
-+      if(!err) err = vfs_permission(ino, desired);
-+      return(err);
-+}
-+
-+int hostfs_setattr(struct dentry *dentry, struct iattr *attr)
-+{
-+      struct hostfs_iattr attrs;
-+      char *name;
-+      int err;
-+      
-+      if(append) 
-+              attr->ia_valid &= ~ATTR_SIZE;
-+
-+      attrs.ia_valid = 0;
-+      if(attr->ia_valid & ATTR_MODE){
-+              attrs.ia_valid |= HOSTFS_ATTR_MODE;
-+              attrs.ia_mode = attr->ia_mode;
-+      }
-+      if(attr->ia_valid & ATTR_UID){
-+              if(kdev_same(dentry->d_inode->i_sb->s_dev, ROOT_DEV) && 
-+                 (attr->ia_uid == 0))
-+                      attr->ia_uid = getuid();
-+              attrs.ia_valid |= HOSTFS_ATTR_UID;
-+              attrs.ia_uid = attr->ia_uid;
-+      }
-+      if(attr->ia_valid & ATTR_GID){
-+              if(kdev_same(dentry->d_inode->i_sb->s_dev, ROOT_DEV) && 
-+                 (attr->ia_gid == 0))
-+                      attr->ia_gid = getuid();
-+              attrs.ia_valid |= HOSTFS_ATTR_GID;
-+              attrs.ia_gid = attr->ia_gid;
-+      }
-+      if(attr->ia_valid & ATTR_SIZE){
-+              attrs.ia_valid |= HOSTFS_ATTR_SIZE;
-+              attrs.ia_size = attr->ia_size;
-+      }
-+      if(attr->ia_valid & ATTR_ATIME){
-+              attrs.ia_valid |= HOSTFS_ATTR_ATIME;
-+              attrs.ia_atime = attr->ia_atime;
-+      }
-+      if(attr->ia_valid & ATTR_MTIME){
-+              attrs.ia_valid |= HOSTFS_ATTR_MTIME;
-+              attrs.ia_mtime = attr->ia_mtime;
-+      }
-+      if(attr->ia_valid & ATTR_CTIME){
-+              attrs.ia_valid |= HOSTFS_ATTR_CTIME;
-+              attrs.ia_ctime = attr->ia_ctime;
-+      }
-+      if(attr->ia_valid & ATTR_ATIME_SET){
-+              attrs.ia_valid |= HOSTFS_ATTR_ATIME_SET;
-+      }
-+      if(attr->ia_valid & ATTR_MTIME_SET){
-+              attrs.ia_valid |= HOSTFS_ATTR_MTIME_SET;
-+      }
-+      name = dentry_name(dentry, 0);
-+      if(name == NULL) return(-ENOMEM);
-+      err = set_attr(name, &attrs);
-+      kfree(name);
-+      if(err)
-+              return(err);
-+
-+      return(inode_setattr(dentry->d_inode, attr));
-+}
-+
-+int hostfs_getattr(struct dentry *dentry, struct iattr *attr)
-+{
-+      not_implemented();
-+      return(-EINVAL);
-+}
-+
-+static struct inode_operations hostfs_iops = {
-+      .create         = hostfs_create,
-+      .link           = hostfs_link,
-+      .unlink         = hostfs_unlink,
-+      .symlink        = hostfs_symlink,
-+      .mkdir          = hostfs_mkdir,
-+      .rmdir          = hostfs_rmdir,
-+      .mknod          = hostfs_mknod,
-+      .rename         = hostfs_rename,
-+      .truncate       = hostfs_truncate,
-+      .permission     = hostfs_permission,
-+      .setattr        = hostfs_setattr,
-+      .getattr        = hostfs_getattr,
-+};
-+
-+static struct inode_operations hostfs_dir_iops = {
-+      .create         = hostfs_create,
-+      .lookup         = hostfs_lookup,
-+      .link           = hostfs_link,
-+      .unlink         = hostfs_unlink,
-+      .symlink        = hostfs_symlink,
-+      .mkdir          = hostfs_mkdir,
-+      .rmdir          = hostfs_rmdir,
-+      .mknod          = hostfs_mknod,
-+      .rename         = hostfs_rename,
-+      .truncate       = hostfs_truncate,
-+      .permission     = hostfs_permission,
-+      .setattr        = hostfs_setattr,
-+      .getattr        = hostfs_getattr,
-+};
-+
-+int hostfs_link_readpage(struct file *file, struct page *page)
-+{
-+      char *buffer, *name;
-+      long long start;
-+      int err;
-+
-+      start = page->index << PAGE_CACHE_SHIFT;
-+      buffer = kmap(page);
-+      name = inode_name(page->mapping->host, 0);
-+      if(name == NULL) return(-ENOMEM);
-+      err = do_readlink(name, buffer, PAGE_CACHE_SIZE);
-+      kfree(name);
-+      if(err == PAGE_CACHE_SIZE)
-+              err = -E2BIG;
-+      else if(err > 0){
-+              flush_dcache_page(page);
-+              SetPageUptodate(page);
-+              if (PageError(page)) ClearPageError(page);
-+              err = 0;
-+      }
-+      kunmap(page);
-+      UnlockPage(page);
-+      return(err);
-+}
-+
-+static struct address_space_operations hostfs_link_aops = {
-+      .readpage       = hostfs_link_readpage,
-+};
-+
-+static struct super_block *hostfs_read_super_common(struct super_block *sb, 
-+                                                  char *data)
-+{
-+      struct inode *root_inode;
-+      char *name;
-+
-+      sb->s_blocksize = 1024;
-+      sb->s_blocksize_bits = 10;
-+      sb->s_magic = HOSTFS_SUPER_MAGIC;
-+      sb->s_op = &hostfs_sbops;
-+      if((data == NULL) || (*((char *) data) == '\0')) data = root_ino;
-+      name = kmalloc(strlen(data) + 1, GFP_KERNEL);
-+      if(name == NULL) return(NULL);
-+      strcpy(name, data);
-+      root_inode = get_inode(sb, NULL, NULL);
-+      if(root_inode == NULL)
-+              goto out_free;
-+
-+      root_inode->u.hostfs_i.host_filename = name;
-+      sb->s_root = d_alloc_root(root_inode);
-+      if(read_inode(root_inode))
-+              goto out_put;
-+      return(sb);
-+
-+ out_free:
-+      kfree(name);
-+ out_put:
-+      iput(root_inode);
-+      return(NULL);
-+}
-+
-+struct super_block *hostfs_read_super(struct super_block *sb, void *data, 
-+                                    int silent)
-+{
-+      return(hostfs_read_super_common(sb, data));
-+}
-+
-+DECLARE_FSTYPE(hostfs_type, "hostfs", hostfs_read_super, 0);
-+
-+static int __init init_hostfs(void)
-+{
-+      return(register_filesystem(&hostfs_type));
-+}
-+
-+static void __exit exit_hostfs(void)
-+{
-+      unregister_filesystem(&hostfs_type);
-+}
-+
-+module_init(init_hostfs)
-+module_exit(exit_hostfs)
-+MODULE_LICENSE("GPL");
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/fs/hostfs/hostfs_user.c um/arch/um/fs/hostfs/hostfs_user.c
---- orig/arch/um/fs/hostfs/hostfs_user.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/fs/hostfs/hostfs_user.c 2003-05-22 11:06:46.000000000 -0400
-@@ -0,0 +1,347 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <unistd.h>
-+#include <stdio.h>
-+#include <fcntl.h>
-+#include <dirent.h>
-+#include <errno.h>
-+#include <utime.h>
-+#include <string.h>
-+#include <sys/stat.h>
-+#include <sys/time.h>
-+#include <sys/vfs.h>
-+#include "hostfs.h"
-+#include "kern_util.h"
-+#include "user.h"
-+
-+int stat_file(const char *path, int *dev_out, unsigned long long *inode_out,
-+            int *mode_out, int *nlink_out, int *uid_out, int *gid_out, 
-+            unsigned long long *size_out, unsigned long *atime_out,
-+            unsigned long *mtime_out, unsigned long *ctime_out,
-+            int *blksize_out, unsigned long long *blocks_out)
-+{
-+      struct stat64 buf;
-+
-+      if(lstat64(path, &buf) < 0) 
-+              return(-errno);
-+      if(dev_out != NULL) *dev_out = buf.st_dev;
-+
-+      /* See the Makefile for why STAT64_INO_FIELD is passed in
-+       * by the build
-+       */
-+      if(inode_out != NULL) *inode_out = buf.STAT64_INO_FIELD;
-+      if(mode_out != NULL) *mode_out = buf.st_mode;
-+      if(nlink_out != NULL) *nlink_out = buf.st_nlink;
-+      if(uid_out != NULL) *uid_out = buf.st_uid;
-+      if(gid_out != NULL) *gid_out = buf.st_gid;
-+      if(size_out != NULL) *size_out = buf.st_size;
-+      if(atime_out != NULL) *atime_out = buf.st_atime;
-+      if(mtime_out != NULL) *mtime_out = buf.st_mtime;
-+      if(ctime_out != NULL) *ctime_out = buf.st_ctime;
-+      if(blksize_out != NULL) *blksize_out = buf.st_blksize;
-+      if(blocks_out != NULL) *blocks_out = buf.st_blocks;
-+      return(0);
-+}
-+
-+int file_type(const char *path, int *rdev)
-+{
-+      struct stat64 buf;
-+
-+      if(lstat64(path, &buf) < 0) 
-+              return(-errno);
-+      if(rdev != NULL) 
-+              *rdev = buf.st_rdev;
-+
-+      if(S_ISDIR(buf.st_mode)) return(OS_TYPE_DIR);
-+      else if(S_ISLNK(buf.st_mode)) return(OS_TYPE_SYMLINK);
-+      else if(S_ISCHR(buf.st_mode)) return(OS_TYPE_CHARDEV);
-+      else if(S_ISBLK(buf.st_mode)) return(OS_TYPE_BLOCKDEV);
-+      else if(S_ISFIFO(buf.st_mode))return(OS_TYPE_FIFO);
-+      else if(S_ISSOCK(buf.st_mode))return(OS_TYPE_SOCK);
-+      else return(OS_TYPE_FILE);
-+}
-+
-+int access_file(char *path, int r, int w, int x)
-+{
-+      int mode = 0;
-+
-+      if(r) mode = R_OK;
-+      if(w) mode |= W_OK;
-+      if(x) mode |= X_OK;
-+      if(access(path, mode) != 0) return(-errno);
-+      else return(0);
-+}
-+
-+int open_file(char *path, int r, int w, int append)
-+{
-+      int mode = 0, fd;
-+
-+      if(r && !w) 
-+              mode = O_RDONLY;
-+      else if(!r && w) 
-+              mode = O_WRONLY;
-+      else if(r && w) 
-+              mode = O_RDWR;
-+      else panic("Impossible mode in open_file");
-+
-+      if(append)
-+              mode |= O_APPEND;
-+      fd = open64(path, mode);
-+      if(fd < 0) return(-errno);
-+      else return(fd);
-+}
-+
-+void *open_dir(char *path, int *err_out)
-+{
-+      DIR *dir;
-+
-+      dir = opendir(path);
-+      *err_out = errno;
-+      if(dir == NULL) return(NULL);
-+      return(dir);
-+}
-+
-+char *read_dir(void *stream, unsigned long long *pos, 
-+             unsigned long long *ino_out, int *len_out)
-+{
-+      DIR *dir = stream;
-+      struct dirent *ent;
-+
-+      seekdir(dir, *pos);
-+      ent = readdir(dir);
-+      if(ent == NULL) return(NULL);
-+      *len_out = strlen(ent->d_name);
-+      *ino_out = ent->d_ino;
-+      *pos = telldir(dir);
-+      return(ent->d_name);
-+}
-+
-+int read_file(int fd, unsigned long long *offset, char *buf, int len)
-+{
-+      int n;
-+
-+      n = pread64(fd, buf, len, *offset);
-+      if(n < 0) return(-errno);
-+      *offset += n;
-+      return(n);
-+}
-+
-+int write_file(int fd, unsigned long long *offset, const char *buf, int len)
-+{
-+      int n;
-+
-+      n = pwrite64(fd, buf, len, *offset);
-+      if(n < 0) return(-errno);
-+      *offset += n;
-+      return(n);
-+}
-+
-+int lseek_file(int fd, long long offset, int whence)
-+{
-+      int ret;
-+
-+      ret = lseek64(fd, offset, whence);
-+      if(ret < 0) return(-errno);
-+      return(0);
-+}
-+
-+void close_file(void *stream)
-+{
-+      close(*((int *) stream));
-+}
-+
-+void close_dir(void *stream)
-+{
-+      closedir(stream);
-+}
-+
-+int file_create(char *name, int ur, int uw, int ux, int gr, 
-+              int gw, int gx, int or, int ow, int ox)
-+{
-+      int mode, fd;
-+
-+      mode = 0;
-+      mode |= ur ? S_IRUSR : 0;
-+      mode |= uw ? S_IWUSR : 0;
-+      mode |= ux ? S_IXUSR : 0;
-+      mode |= gr ? S_IRGRP : 0;
-+      mode |= gw ? S_IWGRP : 0;
-+      mode |= gx ? S_IXGRP : 0;
-+      mode |= or ? S_IROTH : 0;
-+      mode |= ow ? S_IWOTH : 0;
-+      mode |= ox ? S_IXOTH : 0;
-+      fd = open64(name, O_CREAT | O_RDWR, mode);
-+      if(fd < 0) 
-+              return(-errno);
-+      return(fd);
-+}
-+
-+int set_attr(const char *file, struct hostfs_iattr *attrs)
-+{
-+      struct utimbuf buf;
-+      int err, ma;
-+
-+      if(attrs->ia_valid & HOSTFS_ATTR_MODE){
-+              if(chmod(file, attrs->ia_mode) != 0) return(-errno);
-+      }
-+      if(attrs->ia_valid & HOSTFS_ATTR_UID){
-+              if(chown(file, attrs->ia_uid, -1)) return(-errno);
-+      }
-+      if(attrs->ia_valid & HOSTFS_ATTR_GID){
-+              if(chown(file, -1, attrs->ia_gid)) return(-errno);
-+      }
-+      if(attrs->ia_valid & HOSTFS_ATTR_SIZE){
-+              if(truncate(file, attrs->ia_size)) return(-errno);
-+      }
-+      ma = HOSTFS_ATTR_ATIME_SET | HOSTFS_ATTR_MTIME_SET;
-+      if((attrs->ia_valid & ma) == ma){
-+              buf.actime = attrs->ia_atime;
-+              buf.modtime = attrs->ia_mtime;
-+              if(utime(file, &buf) != 0) return(-errno);
-+      }
-+      else {
-+              if(attrs->ia_valid & HOSTFS_ATTR_ATIME_SET){
-+                      err = stat_file(file, NULL, NULL, NULL, NULL, NULL, 
-+                                      NULL, NULL, NULL, &buf.modtime, NULL,
-+                                      NULL, NULL);
-+                      if(err != 0) return(err);
-+                      buf.actime = attrs->ia_atime;
-+                      if(utime(file, &buf) != 0) return(-errno);
-+              }
-+              if(attrs->ia_valid & HOSTFS_ATTR_MTIME_SET){
-+                      err = stat_file(file, NULL, NULL, NULL, NULL, NULL, 
-+                                      NULL, NULL, &buf.actime, NULL, NULL, 
-+                                      NULL, NULL);
-+                      if(err != 0) return(err);
-+                      buf.modtime = attrs->ia_mtime;
-+                      if(utime(file, &buf) != 0) return(-errno);
-+              }
-+      }
-+      if(attrs->ia_valid & HOSTFS_ATTR_CTIME) ;
-+      if(attrs->ia_valid & (HOSTFS_ATTR_ATIME | HOSTFS_ATTR_MTIME)){
-+              err = stat_file(file, NULL, NULL, NULL, NULL, NULL, 
-+                              NULL, NULL, &attrs->ia_atime, &attrs->ia_mtime,
-+                              NULL, NULL, NULL);
-+              if(err != 0) return(err);
-+      }
-+      return(0);
-+}
-+
-+int make_symlink(const char *from, const char *to)
-+{
-+      int err;
-+
-+      err = symlink(to, from);
-+      if(err) return(-errno);
-+      return(0);
-+}
-+
-+int unlink_file(const char *file)
-+{
-+      int err;
-+
-+      err = unlink(file);
-+      if(err) return(-errno);
-+      return(0);
-+}
-+
-+int do_mkdir(const char *file, int mode)
-+{
-+      int err;
-+
-+      err = mkdir(file, mode);
-+      if(err) return(-errno);
-+      return(0);
-+}
-+
-+int do_rmdir(const char *file)
-+{
-+      int err;
-+
-+      err = rmdir(file);
-+      if(err) return(-errno);
-+      return(0);
-+}
-+
-+int do_mknod(const char *file, int mode, int dev)
-+{
-+      int err;
-+
-+      err = mknod(file, mode, dev);
-+      if(err) return(-errno);
-+      return(0);
-+}
-+
-+int link_file(const char *to, const char *from)
-+{
-+      int err;
-+
-+      err = link(to, from);
-+      if(err) return(-errno);
-+      return(0);
-+}
-+
-+int do_readlink(char *file, char *buf, int size)
-+{
-+      int n;
-+
-+      n = readlink(file, buf, size);
-+      if(n < 0) 
-+              return(-errno);
-+      if(n < size) 
-+              buf[n] = '\0';
-+      return(n);
-+}
-+
-+int rename_file(char *from, char *to)
-+{
-+      int err;
-+
-+      err = rename(from, to);
-+      if(err < 0) return(-errno);
-+      return(0);      
-+}
-+
-+int do_statfs(char *root, long *bsize_out, long long *blocks_out, 
-+            long long *bfree_out, long long *bavail_out, 
-+            long long *files_out, long long *ffree_out,
-+            void *fsid_out, int fsid_size, long *namelen_out, 
-+            long *spare_out)
-+{
-+      struct statfs64 buf;
-+      int err;
-+
-+      err = statfs64(root, &buf);
-+      if(err < 0) return(-errno);
-+      *bsize_out = buf.f_bsize;
-+      *blocks_out = buf.f_blocks;
-+      *bfree_out = buf.f_bfree;
-+      *bavail_out = buf.f_bavail;
-+      *files_out = buf.f_files;
-+      *ffree_out = buf.f_ffree;
-+      memcpy(fsid_out, &buf.f_fsid, 
-+             sizeof(buf.f_fsid) > fsid_size ? fsid_size : 
-+             sizeof(buf.f_fsid));
-+      *namelen_out = buf.f_namelen;
-+      spare_out[0] = buf.f_spare[0];
-+      spare_out[1] = buf.f_spare[1];
-+      spare_out[2] = buf.f_spare[2];
-+      spare_out[3] = buf.f_spare[3];
-+      spare_out[4] = buf.f_spare[4];
-+      spare_out[5] = buf.f_spare[5];
-+      return(0);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/fs/hostfs/Makefile um/arch/um/fs/hostfs/Makefile
---- orig/arch/um/fs/hostfs/Makefile    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/fs/hostfs/Makefile      2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,24 @@
-+# 
-+# Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+# struct stat64 changed the inode field name between 2.2 and 2.4 from st_ino
-+# to __st_ino.  It stayed in the same place, so as long as the correct name
-+# is used, hostfs compiled on 2.2 should work on 2.4 and vice versa.
-+
-+STAT64_INO_FIELD := $(shell grep -q __st_ino /usr/include/bits/stat.h && \
-+                              echo __)st_ino
-+
-+USER_CFLAGS := $(USER_CFLAGS) -DSTAT64_INO_FIELD=$(STAT64_INO_FIELD)
-+
-+O_TARGET := hostfs.o
-+obj-y = hostfs_kern.o hostfs_user.o
-+obj-m = $(O_TARGET)
-+
-+USER_OBJS = $(filter %_user.o,$(obj-y))
-+
-+include $(TOPDIR)/Rules.make
-+
-+$(USER_OBJS) : %.o: %.c
-+      $(CC) $(CFLAGS_$@) $(USER_CFLAGS) -c -o $@ $<
-diff -Naur -X ../exclude-files orig/arch/um/fs/hppfs/hppfs_kern.c um/arch/um/fs/hppfs/hppfs_kern.c
---- orig/arch/um/fs/hppfs/hppfs_kern.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/fs/hppfs/hppfs_kern.c   2003-02-27 13:14:26.000000000 -0500
-@@ -0,0 +1,725 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <linux/fs.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+#include <linux/list.h>
-+#include <linux/kernel.h>
-+#include <linux/ctype.h>
-+#include <asm/uaccess.h>
-+#include "os.h"
-+
-+struct hppfs_data {
-+      struct list_head list;
-+      char contents[PAGE_SIZE - sizeof(struct list_head)];
-+};
-+
-+struct hppfs_private {
-+      struct file proc_file;
-+      int host_fd;
-+      loff_t len;
-+      struct hppfs_data *contents;
-+};
-+
-+#define HPPFS_SUPER_MAGIC 0xb00000ee
-+
-+static struct super_operations hppfs_sbops;
-+
-+static struct inode *get_inode(struct super_block *sb, struct dentry *dentry,
-+                             int *error);
-+
-+static int is_pid(struct dentry *dentry)
-+{
-+      struct super_block *sb;
-+      int i;
-+
-+      sb = dentry->d_sb;
-+      if((sb->s_op != &hppfs_sbops) || (dentry->d_parent != sb->s_root))
-+              return(0);
-+
-+      for(i = 0; i < dentry->d_name.len; i++){
-+              if(!isdigit(dentry->d_name.name[i]))
-+                      return(0);
-+      }
-+      return(1);
-+}
-+
-+static char *dentry_name(struct dentry *dentry, int extra)
-+{
-+      struct dentry *parent;
-+      char *root, *name;
-+      const char *seg_name;
-+      int len, seg_len;
-+
-+      len = 0;
-+      parent = dentry;
-+      while(parent->d_parent != parent){
-+              if(is_pid(parent))
-+                      len += strlen("pid") + 1;
-+              else len += parent->d_name.len + 1;
-+              parent = parent->d_parent;
-+      }
-+      
-+      root = "proc";
-+      len += strlen(root);
-+      name = kmalloc(len + extra + 1, GFP_KERNEL);
-+      if(name == NULL) return(NULL);
-+
-+      name[len] = '\0';
-+      parent = dentry;
-+      while(parent->d_parent != parent){
-+              if(is_pid(parent)){
-+                      seg_name = "pid";
-+                      seg_len = strlen("pid");
-+              }
-+              else {
-+                      seg_name = parent->d_name.name;
-+                      seg_len = parent->d_name.len;
-+              }
-+
-+              len -= seg_len + 1;
-+              name[len] = '/';
-+              strncpy(&name[len + 1], seg_name, seg_len);
-+              parent = parent->d_parent;
-+      }
-+      strncpy(name, root, strlen(root));
-+      return(name);
-+}
-+
-+struct dentry_operations hppfs_dentry_ops = {
-+};
-+
-+static int file_removed(struct dentry *dentry, const char *file)
-+{
-+      char *host_file;
-+      int extra, fd;
-+
-+      extra = 0;
-+      if(file != NULL) extra += strlen(file) + 1;
-+
-+      host_file = dentry_name(dentry, extra + strlen("/remove"));
-+      if(host_file == NULL){
-+              printk("file_removed : allocation failed\n");
-+              return(-ENOMEM);
-+      }
-+
-+      if(file != NULL){
-+              strcat(host_file, "/");
-+              strcat(host_file, file);
-+      }
-+      strcat(host_file, "/remove");
-+
-+      fd = os_open_file(host_file, of_read(OPENFLAGS()), 0);
-+      kfree(host_file);
-+      if(fd > 0){
-+              os_close_file(fd);
-+              return(1);
-+      }
-+      return(0);
-+}
-+
-+static struct dentry *hppfs_lookup(struct inode *ino, struct dentry *dentry)
-+{
-+      struct dentry *proc_dentry;
-+      struct inode *inode;
-+      int err, deleted;
-+
-+      deleted = file_removed(dentry, NULL);
-+      if(deleted < 0)
-+              return(ERR_PTR(deleted));
-+      else if(deleted)
-+              return(ERR_PTR(-ENOENT));
-+
-+      proc_dentry = lookup_hash(&dentry->d_name, ino->u.hppfs_i.proc_dentry);
-+      if(IS_ERR(proc_dentry))
-+              return(proc_dentry);
-+
-+      inode = get_inode(ino->i_sb, proc_dentry, &err);
-+      if(err != 0) 
-+              return(ERR_PTR(err));
-+
-+      d_add(dentry, inode);
-+      dentry->d_op = &hppfs_dentry_ops;
-+      return(NULL);
-+}
-+
-+static struct inode_operations hppfs_file_iops = {
-+};
-+
-+static struct inode_operations hppfs_dir_iops = {
-+      .lookup         = hppfs_lookup,
-+};
-+
-+static ssize_t read_proc(struct file *file, char *buf, ssize_t count, 
-+                       loff_t *ppos, int is_user)
-+{
-+      ssize_t (*read)(struct file *, char *, size_t, loff_t *);
-+      ssize_t n;
-+
-+      read = file->f_dentry->d_inode->i_fop->read;
-+
-+      if(!is_user)
-+              set_fs(KERNEL_DS);
-+              
-+      n = (*read)(file, buf, count, &file->f_pos);
-+
-+      if(!is_user)
-+              set_fs(USER_DS);
-+
-+      if(ppos) *ppos = file->f_pos;
-+      return(n);
-+}
-+
-+static ssize_t hppfs_read_file(int fd, char *buf, ssize_t count)
-+{
-+      ssize_t n;
-+      int cur, err;
-+      char *new_buf;
-+
-+      n = -ENOMEM;
-+      new_buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
-+      if(new_buf == NULL){
-+              printk("hppfs_read_file : kmalloc failed\n");
-+              goto out;
-+      }
-+      n = 0;
-+      while(count > 0){
-+              cur = min_t(ssize_t, count, PAGE_SIZE);
-+              err = os_read_file(fd, new_buf, cur);
-+              if(err < 0){
-+                      printk("hppfs_read : read failed, errno = %d\n",
-+                             count);
-+                      n = err;
-+                      goto out_free;
-+              }
-+              else if(err == 0)
-+                      break;
-+
-+              if(copy_to_user(buf, new_buf, err)){
-+                      n = -EFAULT;
-+                      goto out_free;
-+              }
-+              n += err;
-+              count -= err;
-+      }
-+ out_free:
-+      kfree(new_buf);
-+ out:
-+      return(n);
-+}
-+
-+static ssize_t hppfs_read(struct file *file, char *buf, size_t count, 
-+                        loff_t *ppos)
-+{
-+      struct hppfs_private *hppfs = file->private_data;
-+      struct hppfs_data *data;
-+      loff_t off;
-+      int err;
-+
-+      if(hppfs->contents != NULL){
-+              if(*ppos >= hppfs->len) return(0);
-+
-+              data = hppfs->contents;
-+              off = *ppos;
-+              while(off >= sizeof(data->contents)){
-+                      data = list_entry(data->list.next, struct hppfs_data,
-+                                        list);
-+                      off -= sizeof(data->contents);
-+              }
-+
-+              if(off + count > hppfs->len)
-+                      count = hppfs->len - off;
-+              copy_to_user(buf, &data->contents[off], count);
-+              *ppos += count;
-+      }
-+      else if(hppfs->host_fd != -1){
-+              err = os_seek_file(hppfs->host_fd, *ppos);
-+              if(err){
-+                      printk("hppfs_read : seek failed, errno = %d\n", err);
-+                      return(err);
-+              }
-+              count = hppfs_read_file(hppfs->host_fd, buf, count);
-+              if(count > 0)
-+                      *ppos += count;
-+      }
-+      else count = read_proc(&hppfs->proc_file, buf, count, ppos, 1);
-+
-+      return(count);
-+}
-+
-+static ssize_t hppfs_write(struct file *file, const char *buf, size_t len, 
-+                         loff_t *ppos)
-+{
-+      struct hppfs_private *data = file->private_data;
-+      struct file *proc_file = &data->proc_file;
-+      ssize_t (*write)(struct file *, const char *, size_t, loff_t *);
-+      int err;
-+
-+      write = proc_file->f_dentry->d_inode->i_fop->write;
-+
-+      proc_file->f_pos = file->f_pos;
-+      err = (*write)(proc_file, buf, len, &proc_file->f_pos);
-+      file->f_pos = proc_file->f_pos;
-+
-+      return(err);
-+}
-+
-+static int open_host_sock(char *host_file, int *filter_out)
-+{
-+      char *end;
-+      int fd;
-+
-+      end = &host_file[strlen(host_file)];
-+      strcpy(end, "/rw");
-+      *filter_out = 1;
-+      fd = os_connect_socket(host_file);
-+      if(fd > 0)
-+              return(fd);
-+
-+      strcpy(end, "/r");
-+      *filter_out = 0;
-+      fd = os_connect_socket(host_file);
-+      return(fd);
-+}
-+
-+static void free_contents(struct hppfs_data *head)
-+{
-+      struct hppfs_data *data;
-+      struct list_head *ele, *next;
-+
-+      if(head == NULL) return;
-+
-+      list_for_each_safe(ele, next, &head->list){
-+              data = list_entry(ele, struct hppfs_data, list);
-+              kfree(data);
-+      }
-+      kfree(head);
-+}
-+
-+static struct hppfs_data *hppfs_get_data(int fd, int filter, 
-+                                       struct file *proc_file, 
-+                                       struct file *hppfs_file, 
-+                                       loff_t *size_out)
-+{
-+      struct hppfs_data *data, *new, *head;
-+      int n, err;
-+
-+      err = -ENOMEM;
-+      data = kmalloc(sizeof(*data), GFP_KERNEL);
-+      if(data == NULL){
-+              printk("hppfs_get_data : head allocation failed\n");
-+              goto failed;
-+      }
-+
-+      INIT_LIST_HEAD(&data->list);
-+
-+      head = data;
-+      *size_out = 0;
-+
-+      if(filter){
-+              while((n = read_proc(proc_file, data->contents,
-+                                   sizeof(data->contents), NULL, 0)) > 0)
-+                      os_write_file(fd, data->contents, n);
-+              err = os_shutdown_socket(fd, 0, 1);
-+              if(err){
-+                      printk("hppfs_get_data : failed to shut down "
-+                             "socket\n");
-+                      goto failed_free;
-+              }
-+      }
-+      while(1){
-+              n = os_read_file(fd, data->contents, sizeof(data->contents));
-+              if(n < 0){
-+                      err = n;
-+                      printk("hppfs_get_data : read failed, errno = %d\n",
-+                             err);
-+                      goto failed_free;
-+              }
-+              else if(n == 0)
-+                      break;
-+
-+              *size_out += n;
-+
-+              if(n < sizeof(data->contents))
-+                      break;
-+
-+              new = kmalloc(sizeof(*data), GFP_KERNEL);
-+              if(new == 0){
-+                      printk("hppfs_get_data : data allocation failed\n");
-+                      err = -ENOMEM;
-+                      goto failed_free;
-+              }
-+      
-+              INIT_LIST_HEAD(&new->list);
-+              list_add(&new->list, &data->list);
-+              data = new;
-+      }
-+      return(head);
-+
-+ failed_free:
-+      free_contents(head);
-+ failed:              
-+      return(ERR_PTR(err));
-+}
-+
-+static struct hppfs_private *hppfs_data(void)
-+{
-+      struct hppfs_private *data;
-+
-+      data = kmalloc(sizeof(*data), GFP_KERNEL);
-+      if(data == NULL)
-+              return(data);
-+
-+      *data = ((struct hppfs_private ) { .host_fd             = -1,
-+                                         .len                 = -1,
-+                                         .contents            = NULL } );
-+      return(data);
-+}
-+
-+static int hppfs_open(struct inode *inode, struct file *file)
-+{
-+      struct hppfs_private *data;
-+      struct dentry *proc_dentry;
-+      char *host_file;
-+      int err, fd, type, filter;
-+
-+      err = -ENOMEM;
-+      data = hppfs_data();
-+      if(data == NULL)
-+              goto out;
-+
-+      host_file = dentry_name(file->f_dentry, strlen("/rw"));
-+      if(host_file == NULL)
-+              goto out_free2;
-+
-+      proc_dentry = inode->u.hppfs_i.proc_dentry;
-+      err = init_private_file(&data->proc_file, proc_dentry, file->f_mode);
-+      if(err)
-+              goto out_free1;
-+
-+      type = os_file_type(host_file);
-+      if(type == OS_TYPE_FILE){
-+              fd = os_open_file(host_file, of_read(OPENFLAGS()), 0);
-+              if(fd >= 0) 
-+                      data->host_fd = fd;
-+              else printk("hppfs_open : failed to open '%s', errno = %d\n",
-+                          host_file, -fd);
-+
-+              data->contents = NULL;
-+      }
-+      else if(type == OS_TYPE_DIR){
-+              fd = open_host_sock(host_file, &filter);
-+              if(fd > 0){
-+                      data->contents = hppfs_get_data(fd, filter, 
-+                                                      &data->proc_file, 
-+                                                      file, &data->len);
-+                      if(!IS_ERR(data->contents))
-+                              data->host_fd = fd;
-+              }
-+              else printk("hppfs_open : failed to open a socket in "
-+                          "'%s', errno = %d\n", host_file, -fd);
-+      }
-+      kfree(host_file);
-+
-+      file->private_data = data;
-+      return(0);
-+
-+ out_free1:
-+      kfree(host_file);
-+ out_free2:
-+      free_contents(data->contents);
-+      kfree(data);
-+ out:
-+      return(err);
-+}
-+
-+static int hppfs_dir_open(struct inode *inode, struct file *file)
-+{
-+      struct hppfs_private *data;
-+      struct dentry *proc_dentry;
-+      int err;
-+
-+      err = -ENOMEM;
-+      data = hppfs_data();
-+      if(data == NULL)
-+              goto out;
-+
-+      proc_dentry = inode->u.hppfs_i.proc_dentry;
-+      err = init_private_file(&data->proc_file, proc_dentry, file->f_mode);
-+      if(err)
-+              goto out_free;
-+
-+      file->private_data = data;
-+      return(0);
-+
-+ out_free:
-+      kfree(data);
-+ out:
-+      return(err);
-+}
-+
-+static loff_t hppfs_llseek(struct file *file, loff_t off, int where)
-+{
-+      struct hppfs_private *data = file->private_data;
-+      struct file *proc_file = &data->proc_file;
-+      loff_t (*llseek)(struct file *, loff_t, int);
-+      loff_t ret;
-+
-+      llseek = proc_file->f_dentry->d_inode->i_fop->llseek;
-+      if(llseek != NULL){
-+              ret = (*llseek)(proc_file, off, where);
-+              if(ret < 0)
-+                      return(ret);
-+      }
-+
-+      return(default_llseek(file, off, where));
-+}
-+
-+struct hppfs_dirent {
-+      void *vfs_dirent;
-+      filldir_t filldir;
-+      struct dentry *dentry;
-+};
-+
-+static int hppfs_filldir(void *d, const char *name, int size, 
-+                       loff_t offset, ino_t inode, unsigned int type)
-+{
-+      struct hppfs_dirent *dirent = d;
-+
-+      if(file_removed(dirent->dentry, name))
-+              return(0);
-+
-+      return((*dirent->filldir)(dirent->vfs_dirent, name, size, offset, 
-+                                inode, type));
-+}
-+
-+static int hppfs_readdir(struct file *file, void *ent, filldir_t filldir)
-+{
-+      struct hppfs_private *data = file->private_data;
-+      struct file *proc_file = &data->proc_file;
-+      int (*readdir)(struct file *, void *, filldir_t);
-+      struct hppfs_dirent dirent = ((struct hppfs_dirent)
-+                                    { .vfs_dirent     = ent,
-+                                      .filldir        = filldir,
-+                                      .dentry         = file->f_dentry } );
-+      int err;
-+
-+      readdir = proc_file->f_dentry->d_inode->i_fop->readdir;
-+
-+      proc_file->f_pos = file->f_pos;
-+      err = (*readdir)(proc_file, &dirent, hppfs_filldir);
-+      file->f_pos = proc_file->f_pos;
-+
-+      return(err);
-+}
-+
-+static int hppfs_fsync(struct file *file, struct dentry *dentry, int datasync)
-+{
-+      return(0);
-+}
-+
-+static struct file_operations hppfs_file_fops = {
-+      .owner          = NULL,
-+      .llseek         = hppfs_llseek,
-+      .read           = hppfs_read,
-+      .write          = hppfs_write,
-+      .open           = hppfs_open,
-+};
-+
-+static struct file_operations hppfs_dir_fops = {
-+      .owner          = NULL,
-+      .readdir        = hppfs_readdir,
-+      .open           = hppfs_dir_open,
-+      .fsync          = hppfs_fsync,
-+};
-+
-+static int hppfs_statfs(struct super_block *sb, struct statfs *sf)
-+{
-+      sf->f_blocks = 0;
-+      sf->f_bfree = 0;
-+      sf->f_bavail = 0;
-+      sf->f_files = 0;
-+      sf->f_ffree = 0;
-+      sf->f_type = HPPFS_SUPER_MAGIC;
-+      return(0);
-+}
-+
-+static struct super_operations hppfs_sbops = { 
-+      .put_inode      = force_delete,
-+      .delete_inode   = NULL,
-+      .statfs         = hppfs_statfs,
-+};
-+
-+static int hppfs_readlink(struct dentry *dentry, char *buffer, int buflen)
-+{
-+      struct file proc_file;
-+      struct dentry *proc_dentry;
-+      int (*readlink)(struct dentry *, char *, int);
-+      int err, n;
-+
-+      proc_dentry = dentry->d_inode->u.hppfs_i.proc_dentry;
-+      err = init_private_file(&proc_file, proc_dentry, FMODE_READ);
-+      if(err) 
-+              return(err);
-+
-+      readlink = proc_dentry->d_inode->i_op->readlink;
-+      n = (*readlink)(proc_dentry, buffer, buflen);
-+
-+      if(proc_file.f_op->release)
-+              (*proc_file.f_op->release)(proc_dentry->d_inode, &proc_file);
-+      
-+      return(n);
-+}
-+
-+static int hppfs_follow_link(struct dentry *dentry, struct nameidata *nd)
-+{
-+      struct file proc_file;
-+      struct dentry *proc_dentry;
-+      int (*follow_link)(struct dentry *, struct nameidata *);
-+      int err, n;
-+
-+      proc_dentry = dentry->d_inode->u.hppfs_i.proc_dentry;
-+      err = init_private_file(&proc_file, proc_dentry, FMODE_READ);
-+      if(err) 
-+              return(err);
-+
-+      follow_link = proc_dentry->d_inode->i_op->follow_link;
-+      n = (*follow_link)(proc_dentry, nd);
-+
-+      if(proc_file.f_op->release)
-+              (*proc_file.f_op->release)(proc_dentry->d_inode, &proc_file);
-+      
-+      return(n);
-+}
-+
-+static struct inode_operations hppfs_link_iops = {
-+      .readlink       = hppfs_readlink,
-+      .follow_link    = hppfs_follow_link,
-+};
-+
-+static void read_inode(struct inode *ino)
-+{
-+      struct inode *proc_ino;
-+
-+      proc_ino = ino->u.hppfs_i.proc_dentry->d_inode;
-+      ino->i_uid = proc_ino->i_uid;
-+      ino->i_gid = proc_ino->i_gid;
-+      ino->i_atime = proc_ino->i_atime;
-+      ino->i_mtime = proc_ino->i_mtime;
-+      ino->i_ctime = proc_ino->i_ctime;
-+      ino->i_ino = proc_ino->i_ino;
-+      ino->i_dev = proc_ino->i_dev;
-+      ino->i_mode = proc_ino->i_mode;
-+      ino->i_nlink = proc_ino->i_nlink;
-+      ino->i_size = proc_ino->i_size;
-+      ino->i_blksize = proc_ino->i_blksize;
-+      ino->i_blocks = proc_ino->i_blocks;
-+}
-+
-+static struct inode *get_inode(struct super_block *sb, struct dentry *dentry,
-+                             int *error)
-+{
-+      struct inode *inode;
-+      int err = -ENOMEM;
-+
-+      inode = new_inode(sb);
-+      if(inode == NULL) 
-+              goto out;
-+
-+      insert_inode_hash(inode);
-+      if(S_ISDIR(dentry->d_inode->i_mode)){
-+              inode->i_op = &hppfs_dir_iops;
-+              inode->i_fop = &hppfs_dir_fops;
-+      }
-+      else if(S_ISLNK(dentry->d_inode->i_mode)){
-+              inode->i_op = &hppfs_link_iops;
-+              inode->i_fop = &hppfs_file_fops;
-+      }
-+      else {
-+              inode->i_op = &hppfs_file_iops;
-+              inode->i_fop = &hppfs_file_fops;
-+      }
-+
-+      inode->i_sb = sb;
-+      inode->u.hppfs_i.proc_dentry = dentry;
-+
-+      read_inode(inode);
-+      err = 0;
-+
-+      if(error) *error = err;
-+      return(inode);
-+ out:
-+      if(error) *error = err;
-+      return(NULL);
-+}
-+
-+static struct super_block *hppfs_read_super(struct super_block *sb, void *d, 
-+                                          int silent)
-+{
-+      struct inode *root_inode;
-+      struct file_system_type *procfs;
-+      struct super_block *proc_sb;
-+
-+      procfs = get_fs_type("proc");
-+      if(procfs == NULL) 
-+              goto out;
-+
-+      if(list_empty(&procfs->fs_supers))
-+              goto out;
-+
-+      proc_sb = list_entry(procfs->fs_supers.next, struct super_block,
-+                           s_instances);
-+      
-+      sb->s_blocksize = 1024;
-+      sb->s_blocksize_bits = 10;
-+      sb->s_magic = HPPFS_SUPER_MAGIC;
-+      sb->s_op = &hppfs_sbops;
-+
-+      dget(proc_sb->s_root);
-+      root_inode = get_inode(sb, proc_sb->s_root, NULL);
-+      if(root_inode == NULL)
-+              goto out_dput;
-+
-+      sb->s_root = d_alloc_root(root_inode);
-+      if(sb->s_root == NULL)
-+              goto out_put;
-+
-+      return(sb);
-+
-+ out_put:
-+      iput(root_inode);
-+ out_dput:
-+      dput(proc_sb->s_root);
-+ out:
-+      return(NULL);
-+}
-+
-+DECLARE_FSTYPE(hppfs_type, "hppfs", hppfs_read_super, 0);
-+
-+static int __init init_hppfs(void)
-+{
-+      return(register_filesystem(&hppfs_type));
-+}
-+
-+static void __exit exit_hppfs(void)
-+{
-+      unregister_filesystem(&hppfs_type);
-+}
-+
-+module_init(init_hppfs)
-+module_exit(exit_hppfs)
-+MODULE_LICENSE("GPL");
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/fs/hppfs/Makefile um/arch/um/fs/hppfs/Makefile
---- orig/arch/um/fs/hppfs/Makefile     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/fs/hppfs/Makefile       2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,10 @@
-+O_TARGET := hppfs.o
-+obj-y = hppfs_kern.o #hppfs_user.o
-+obj-m = $(O_TARGET)
-+
-+CFLAGS_hppfs_kern.o := $(CFLAGS)
-+#CFLAGS_hppfs_user.o := $(USER_CFLAGS)
-+
-+override CFLAGS =  
-+
-+include $(TOPDIR)/Rules.make
-diff -Naur -X ../exclude-files orig/arch/um/fs/Makefile um/arch/um/fs/Makefile
---- orig/arch/um/fs/Makefile   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/fs/Makefile     2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,23 @@
-+# 
-+# Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+O_TARGET := built-in.o
-+
-+subdir-y =
-+subdir-m =
-+
-+subdir-$(CONFIG_HOSTFS) += hostfs
-+subdir-$(CONFIG_HPPFS) += hppfs
-+
-+obj-y += $(join $(subdir-y),$(subdir-y:%=/%.o))
-+obj-m += $(join $(subdir-m),$(subdir-m:%=/%.o))
-+
-+include $(TOPDIR)/Rules.make
-+
-+dep:
-+
-+clean:
-+
-+archmrproper:
-diff -Naur -X ../exclude-files orig/arch/um/include/2_5compat.h um/arch/um/include/2_5compat.h
---- orig/arch/um/include/2_5compat.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/2_5compat.h     2003-02-27 20:15:19.000000000 -0500
-@@ -0,0 +1,46 @@
-+/* 
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __2_5_COMPAT_H__
-+#define __2_5_COMPAT_H__
-+
-+#include "linux/version.h"
-+
-+#define INIT_CONSOLE(dev_name, write_proc, device_proc, setup_proc, f) { \
-+      name :          dev_name, \
-+      write :         write_proc, \
-+      read :          NULL, \
-+      device :        device_proc, \
-+      unblank :       NULL, \
-+      setup :         setup_proc, \
-+      flags :         f, \
-+      index :         -1, \
-+      cflag :         0, \
-+      next :          NULL \
-+}
-+
-+#define INIT_ELV(queue, elv) elevator_init(elv, ELV_NOOP)
-+
-+#define ELV_NOOP ELEVATOR_NOOP
-+
-+#define INIT_HARDSECT(arr, maj, sizes) arr[maj] = sizes
-+
-+#define IS_WRITE(req) ((req)->cmd == WRITE)
-+
-+#define SET_PRI(task) \
-+      do { (task)->nice = 20; (task)->counter = -100; } while(0);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/chan_kern.h um/arch/um/include/chan_kern.h
---- orig/arch/um/include/chan_kern.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/chan_kern.h     2002-11-15 13:32:35.000000000 -0500
-@@ -0,0 +1,56 @@
-+/* 
-+ * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __CHAN_KERN_H__
-+#define __CHAN_KERN_H__
-+
-+#include "linux/tty.h"
-+#include "linux/list.h"
-+#include "chan_user.h"
-+
-+struct chan {
-+      struct list_head list;
-+      char *dev;
-+      unsigned int primary:1;
-+      unsigned int input:1;
-+      unsigned int output:1;
-+      unsigned int opened:1;
-+      int fd;
-+      enum chan_init_pri pri;
-+      struct chan_ops *ops;
-+      void *data;
-+};
-+
-+extern void chan_interrupt(struct list_head *chans, struct tq_struct *task,
-+                         struct tty_struct *tty, int irq, void *dev);
-+extern int parse_chan_pair(char *str, struct list_head *chans, int pri, 
-+                         int device, struct chan_opts *opts);
-+extern int open_chan(struct list_head *chans);
-+extern int write_chan(struct list_head *chans, const char *buf, int len,
-+                           int write_irq);
-+extern int console_write_chan(struct list_head *chans, const char *buf, 
-+                            int len);
-+extern void close_chan(struct list_head *chans);
-+extern void chan_enable_winch(struct list_head *chans, void *line);
-+extern void enable_chan(struct list_head *chans, void *data);
-+extern int chan_window_size(struct list_head *chans, 
-+                           unsigned short *rows_out, 
-+                           unsigned short *cols_out);
-+extern int chan_out_fd(struct list_head *chans);
-+extern int chan_config_string(struct list_head *chans, char *str, int size,
-+                            char **error_out);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/chan_user.h um/arch/um/include/chan_user.h
---- orig/arch/um/include/chan_user.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/chan_user.h     2002-11-06 16:44:00.000000000 -0500
-@@ -0,0 +1,66 @@
-+/* 
-+ * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __CHAN_USER_H__
-+#define __CHAN_USER_H__
-+
-+#include "init.h"
-+
-+struct chan_opts {
-+      void (*announce)(char *dev_name, int dev);
-+      char *xterm_title;
-+      int raw;
-+      unsigned long tramp_stack;
-+      int in_kernel;
-+};
-+
-+enum chan_init_pri { INIT_STATIC, INIT_ALL, INIT_ONE };
-+
-+struct chan_ops {
-+      char *type;
-+      void *(*init)(char *, int, struct chan_opts *);
-+      int (*open)(int, int, int, void *, char **);
-+      void (*close)(int, void *);
-+      int (*read)(int, char *, void *);
-+      int (*write)(int, const char *, int, void *);
-+      int (*console_write)(int, const char *, int, void *);
-+      int (*window_size)(int, void *, unsigned short *, unsigned short *);
-+      void (*free)(void *);
-+      int winch;
-+};
-+
-+extern struct chan_ops fd_ops, null_ops, port_ops, pts_ops, pty_ops, tty_ops,
-+      xterm_ops;
-+
-+extern void generic_close(int fd, void *unused);
-+extern int generic_read(int fd, char *c_out, void *unused);
-+extern int generic_write(int fd, const char *buf, int n, void *unused);
-+extern int generic_console_write(int fd, const char *buf, int n, void *state);
-+extern int generic_window_size(int fd, void *unused, unsigned short *rows_out,
-+                             unsigned short *cols_out);
-+extern void generic_free(void *data);
-+
-+extern void register_winch(int fd, void *device_data);
-+extern void register_winch_irq(int fd, int tty_fd, int pid, void *line);
-+
-+#define __channel_help(fn, prefix) \
-+__uml_help(fn, prefix "[0-9]*=<channel description>\n" \
-+"    Attach a console or serial line to a host channel.  See\n" \
-+"    http://user-mode-linux.sourceforge.net/input.html for a complete\n" \
-+"    description of this switch.\n\n" \
-+);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/choose-mode.h um/arch/um/include/choose-mode.h
---- orig/arch/um/include/choose-mode.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/choose-mode.h   2003-01-17 13:23:32.000000000 -0500
-@@ -0,0 +1,35 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __CHOOSE_MODE_H__
-+#define __CHOOSE_MODE_H__
-+
-+#include "uml-config.h"
-+
-+#if defined(UML_CONFIG_MODE_TT) && defined(UML_CONFIG_MODE_SKAS)
-+#define CHOOSE_MODE(tt, skas) (mode_tt ? (tt) : (skas))
-+
-+#elif defined(UML_CONFIG_MODE_SKAS)
-+#define CHOOSE_MODE(tt, skas) (skas)
-+
-+#elif defined(UML_CONFIG_MODE_TT)
-+#define CHOOSE_MODE(tt, skas) (tt)
-+#endif
-+
-+#define CHOOSE_MODE_PROC(tt, skas, args...) \
-+      CHOOSE_MODE(tt(args), skas(args))
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/frame.h um/arch/um/include/frame.h
---- orig/arch/um/include/frame.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/frame.h 2002-12-02 21:43:03.000000000 -0500
-@@ -0,0 +1,53 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __FRAME_H_
-+#define __FRAME_H_
-+
-+#include "sysdep/frame.h"
-+
-+struct frame_common {
-+      void *data;
-+      int len;
-+      int sig_index;
-+      int sr_index;
-+      int sr_relative;
-+      int sp_index;
-+      struct arch_frame_data arch;
-+};
-+
-+struct sc_frame {
-+      struct frame_common common;
-+      int sc_index;
-+};
-+
-+extern struct sc_frame signal_frame_sc;
-+
-+extern struct sc_frame signal_frame_sc_sr;
-+
-+struct si_frame {
-+      struct frame_common common;
-+      int sip_index;
-+      int si_index;
-+      int ucp_index;
-+      int uc_index;
-+};
-+
-+extern struct si_frame signal_frame_si;
-+
-+extern void capture_signal_stack(void);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/frame_kern.h um/arch/um/include/frame_kern.h
---- orig/arch/um/include/frame_kern.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/frame_kern.h    2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,34 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __FRAME_KERN_H_
-+#define __FRAME_KERN_H_
-+
-+#include "frame.h"
-+#include "sysdep/frame_kern.h"
-+
-+extern int setup_signal_stack_sc(unsigned long stack_top, int sig, 
-+                               unsigned long handler,
-+                               void (*restorer)(void), 
-+                               struct pt_regs *regs, 
-+                               sigset_t *mask);
-+extern int setup_signal_stack_si(unsigned long stack_top, int sig, 
-+                               unsigned long handler, 
-+                               void (*restorer)(void), 
-+                               struct pt_regs *regs, siginfo_t *info, 
-+                               sigset_t *mask);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/frame_user.h um/arch/um/include/frame_user.h
---- orig/arch/um/include/frame_user.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/frame_user.h    2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,23 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __FRAME_USER_H_
-+#define __FRAME_USER_H_
-+
-+#include "sysdep/frame_user.h"
-+#include "frame.h"
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/helper.h um/arch/um/include/helper.h
---- orig/arch/um/include/helper.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/helper.h        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,27 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __HELPER_H__
-+#define __HELPER_H__
-+
-+extern int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv,
-+                    unsigned long *stack_out);
-+extern int run_helper_thread(int (*proc)(void *), void *arg, 
-+                           unsigned int flags, unsigned long *stack_out,
-+                           int stack_order);
-+extern int helper_wait(int pid);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/hostaudio.h um/arch/um/include/hostaudio.h
---- orig/arch/um/include/hostaudio.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/hostaudio.h     2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,48 @@
-+/* 
-+ * Copyright (C) 2002 Steve Schmidtke 
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef HOSTAUDIO_H
-+#define HOSTAUDIO_H
-+
-+#define HOSTAUDIO_DEV_DSP "/dev/sound/dsp"
-+#define HOSTAUDIO_DEV_MIXER "/dev/sound/mixer"
-+
-+struct hostaudio_state {
-+  int fd;
-+};
-+
-+struct hostmixer_state {
-+  int fd;
-+};
-+
-+/* UML user-side protoypes */
-+extern ssize_t hostaudio_read_user(struct hostaudio_state *state, char *buffer,
-+                                 size_t count, loff_t *ppos);
-+extern ssize_t hostaudio_write_user(struct hostaudio_state *state, 
-+                                  const char *buffer, size_t count, 
-+                                  loff_t *ppos);
-+extern int hostaudio_ioctl_user(struct hostaudio_state *state, 
-+                              unsigned int cmd, unsigned long arg);
-+extern int hostaudio_open_user(struct hostaudio_state *state, int r, int w, 
-+                             char *dsp);
-+extern int hostaudio_release_user(struct hostaudio_state *state);
-+extern int hostmixer_ioctl_mixdev_user(struct hostmixer_state *state, 
-+                              unsigned int cmd, unsigned long arg);
-+extern int hostmixer_open_mixdev_user(struct hostmixer_state *state, int r, 
-+                                    int w, char *mixer);
-+extern int hostmixer_release_mixdev_user(struct hostmixer_state *state);
-+
-+#endif /* HOSTAUDIO_H */
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/init.h um/arch/um/include/init.h
---- orig/arch/um/include/init.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/init.h  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,114 @@
-+#ifndef _LINUX_UML_INIT_H
-+#define _LINUX_UML_INIT_H
-+
-+/* These macros are used to mark some functions or
-+ * initialized data (doesn't apply to uninitialized data)
-+ * as `initialization' functions. The kernel can take this
-+ * as hint that the function is used only during the initialization
-+ * phase and free up used memory resources after
-+ *
-+ * Usage:
-+ * For functions:
-+ *
-+ * You should add __init immediately before the function name, like:
-+ *
-+ * static void __init initme(int x, int y)
-+ * {
-+ *    extern int z; z = x * y;
-+ * }
-+ *
-+ * If the function has a prototype somewhere, you can also add
-+ * __init between closing brace of the prototype and semicolon:
-+ *
-+ * extern int initialize_foobar_device(int, int, int) __init;
-+ *
-+ * For initialized data:
-+ * You should insert __initdata between the variable name and equal
-+ * sign followed by value, e.g.:
-+ *
-+ * static int init_variable __initdata = 0;
-+ * static char linux_logo[] __initdata = { 0x32, 0x36, ... };
-+ *
-+ * Don't forget to initialize data not at file scope, i.e. within a function,
-+ * as gcc otherwise puts the data into the bss section and not into the init
-+ * section.
-+ *
-+ * Also note, that this data cannot be "const".
-+ */
-+
-+#ifndef _LINUX_INIT_H
-+typedef int (*initcall_t)(void);
-+typedef void (*exitcall_t)(void);
-+
-+#define __init          __attribute__ ((__section__ (".text.init")))
-+#define __exit          __attribute__ ((unused, __section__(".text.exit")))
-+#define __initdata      __attribute__ ((__section__ (".data.init")))
-+
-+#endif
-+
-+#ifndef MODULE
-+struct uml_param {
-+        const char *str;
-+        int (*setup_func)(char *, int *);
-+};
-+
-+extern initcall_t __uml_initcall_start, __uml_initcall_end;
-+extern initcall_t __uml_postsetup_start, __uml_postsetup_end;
-+extern const char *__uml_help_start, *__uml_help_end;
-+#endif
-+
-+#define __uml_initcall(fn)                                            \
-+      static initcall_t __uml_initcall_##fn __uml_init_call = fn
-+
-+#define __uml_exitcall(fn)                                            \
-+      static exitcall_t __uml_exitcall_##fn __uml_exit_call = fn
-+
-+extern struct uml_param __uml_setup_start, __uml_setup_end;
-+
-+#define __uml_postsetup(fn)                                           \
-+      static initcall_t __uml_postsetup_##fn __uml_postsetup_call = fn
-+
-+#define __non_empty_string(dummyname,string)                          \
-+      struct __uml_non_empty_string_struct_##dummyname                \
-+      {                                                               \
-+              char _string[sizeof(string)-2];                         \
-+      }
-+
-+#ifndef MODULE
-+#define __uml_setup(str, fn, help...)                                 \
-+      __non_empty_string(fn ##_setup, str);                           \
-+      __uml_help(fn, help);                                           \
-+      static char __uml_setup_str_##fn[] __initdata = str;            \
-+      static struct uml_param __uml_setup_##fn __uml_init_setup = { __uml_setup_str_##fn, fn }
-+#else
-+#define __uml_setup(str, fn, help...)                                 \
-+
-+#endif
-+
-+#define __uml_help(fn, help...)                                               \
-+      __non_empty_string(fn ##__help, help);                          \
-+      static char __uml_help_str_##fn[] __initdata = help;            \
-+      static const char *__uml_help_##fn __uml_setup_help = __uml_help_str_##fn
-+
-+/*
-+ * Mark functions and data as being only used at initialization
-+ * or exit time.
-+ */
-+#define __uml_init_setup      __attribute__ ((unused,__section__ (".uml.setup.init")))
-+#define __uml_setup_help      __attribute__ ((unused,__section__ (".uml.help.init")))
-+#define __uml_init_call               __attribute__ ((unused,__section__ (".uml.initcall.init")))
-+#define __uml_postsetup_call  __attribute__ ((unused,__section__ (".uml.postsetup.init")))
-+#define __uml_exit_call               __attribute__ ((unused,__section__ (".uml.exitcall.exit")))
-+
-+#endif /* _LINUX_UML_INIT_H */
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/initrd.h um/arch/um/include/initrd.h
---- orig/arch/um/include/initrd.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/initrd.h        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,22 @@
-+/*
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __INITRD_USER_H__
-+#define __INITRD_USER_H__
-+
-+extern int load_initrd(char *filename, void *buf, int size);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/irq_kern.h um/arch/um/include/irq_kern.h
---- orig/arch/um/include/irq_kern.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/irq_kern.h      2003-05-15 13:57:48.000000000 -0400
-@@ -0,0 +1,27 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __IRQ_KERN_H__
-+#define __IRQ_KERN_H__
-+
-+#include "linux/interrupt.h"
-+
-+extern int um_request_irq(unsigned int irq, int fd, int type,
-+                        void (*handler)(int, void *, struct pt_regs *),
-+                        unsigned long irqflags,  const char * devname,
-+                        void *dev_id);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/irq_user.h um/arch/um/include/irq_user.h
---- orig/arch/um/include/irq_user.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/irq_user.h      2002-12-08 20:38:42.000000000 -0500
-@@ -0,0 +1,35 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __IRQ_USER_H__
-+#define __IRQ_USER_H__
-+
-+enum { IRQ_READ, IRQ_WRITE };
-+
-+extern void sigio_handler(int sig, union uml_pt_regs *regs);
-+extern int activate_fd(int irq, int fd, int type, void *dev_id);
-+extern void free_irq_by_irq_and_dev(int irq, void *dev_id);
-+extern void free_irq_by_fd(int fd);
-+extern void reactivate_fd(int fd, int irqnum);
-+extern void deactivate_fd(int fd, int irqnum);
-+extern void forward_interrupts(int pid);
-+extern void init_irq_signals(int on_sigstack);
-+extern void forward_ipi(int fd, int pid);
-+extern void free_irq_later(int irq, void *dev_id);
-+extern int activate_ipi(int fd, int pid);
-+extern unsigned long irq_lock(void);
-+extern void irq_unlock(unsigned long flags);
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/kern.h um/arch/um/include/kern.h
---- orig/arch/um/include/kern.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/kern.h  2002-11-02 21:38:02.000000000 -0500
-@@ -0,0 +1,48 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __KERN_H__
-+#define __KERN_H__
-+
-+/* These are all user-mode things which are convenient to call directly
-+ * from kernel code and for which writing a wrapper is too much of a pain.
-+ * The regular include files can't be included because this file is included
-+ * only into kernel code, and user-space includes conflict with kernel
-+ * includes.
-+ */
-+
-+extern int errno;
-+
-+extern int clone(int (*proc)(void *), void *sp, int flags, void *data);
-+extern int sleep(int);
-+extern int printf(char *fmt, ...);
-+extern char *strerror(int errnum);
-+extern char *ptsname(int __fd);
-+extern int munmap(void *, int);
-+extern void *sbrk(int increment);
-+extern void *malloc(int size);
-+extern void perror(char *err);
-+extern int kill(int pid, int sig);
-+extern int getuid(void);
-+extern int pause(void);
-+extern int write(int, const void *, int);
-+extern int exit(int);
-+extern int close(int);
-+extern int read(unsigned int, char *, int);
-+extern int pipe(int *);
-+extern int sched_yield(void);
-+extern int ptrace(int op, int pid, long addr, long data);
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/kern_util.h um/arch/um/include/kern_util.h
---- orig/arch/um/include/kern_util.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/kern_util.h     2003-04-16 16:00:11.000000000 -0400
-@@ -0,0 +1,121 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __KERN_UTIL_H__
-+#define __KERN_UTIL_H__
-+
-+#include "sysdep/ptrace.h"
-+
-+extern int ncpus;
-+extern char *linux_prog;
-+extern char *gdb_init;
-+extern int kmalloc_ok;
-+extern int timer_irq_inited;
-+extern int jail;
-+extern int nsyscalls;
-+
-+#define UML_ROUND_DOWN(addr) ((void *)(((unsigned long) addr) & PAGE_MASK))
-+#define UML_ROUND_UP(addr) \
-+      UML_ROUND_DOWN(((unsigned long) addr) + PAGE_SIZE - 1)
-+
-+extern int kernel_fork(unsigned long flags, int (*fn)(void *), void * arg);
-+extern unsigned long stack_sp(unsigned long page);
-+extern int kernel_thread_proc(void *data);
-+extern void syscall_segv(int sig);
-+extern int current_pid(void);
-+extern unsigned long alloc_stack(int order, int atomic);
-+extern int do_signal(int error);
-+extern int is_stack_fault(unsigned long sp);
-+extern unsigned long segv(unsigned long address, unsigned long ip, 
-+                        int is_write, int is_user, void *sc);
-+extern unsigned long handle_page_fault(unsigned long address, unsigned long ip,
-+                                     int is_write, int is_user, 
-+                                     int *code_out);
-+extern void syscall_ready(void);
-+extern int segv_syscall(void);
-+extern void kern_finish_exec(void *task, int new_pid, unsigned long stack);
-+extern int page_size(void);
-+extern int page_mask(void);
-+extern int need_finish_fork(void);
-+extern void free_stack(unsigned long stack, int order);
-+extern void add_input_request(int op, void (*proc)(int), void *arg);
-+extern int sys_execve(char *file, char **argv, char **env);
-+extern char *current_cmd(void);
-+extern void timer_handler(int sig, union uml_pt_regs *regs);
-+extern int set_signals(int enable);
-+extern void force_sigbus(void);
-+extern int pid_to_processor_id(int pid);
-+extern void block_signals(void);
-+extern void unblock_signals(void);
-+extern void deliver_signals(void *t);
-+extern int next_syscall_index(int max);
-+extern int next_trap_index(int max);
-+extern void cpu_idle(void);
-+extern void finish_fork(void);
-+extern void paging_init(void);
-+extern void init_flush_vm(void);
-+extern void *syscall_sp(void *t);
-+extern void syscall_trace(void);
-+extern int hz(void);
-+extern void idle_timer(void);
-+extern unsigned int do_IRQ(int irq, union uml_pt_regs *regs);
-+extern int external_pid(void *t);
-+extern void boot_timer_handler(int sig);
-+extern void interrupt_end(void);
-+extern void initial_thread_cb(void (*proc)(void *), void *arg);
-+extern int debugger_signal(int status, int pid);
-+extern void debugger_parent_signal(int status, int pid);
-+extern void child_signal(int pid, int status);
-+extern int init_ptrace_proxy(int idle_pid, int startup, int stop);
-+extern int init_parent_proxy(int pid);
-+extern void check_stack_overflow(void *ptr);
-+extern void relay_signal(int sig, union uml_pt_regs *regs);
-+extern void not_implemented(void);
-+extern int user_context(unsigned long sp);
-+extern void timer_irq(union uml_pt_regs *regs);
-+extern void unprotect_stack(unsigned long stack);
-+extern void do_uml_exitcalls(void);
-+extern int attach_debugger(int idle_pid, int pid, int stop);
-+extern void bad_segv(unsigned long address, unsigned long ip, int is_write);
-+extern int config_gdb(char *str);
-+extern int remove_gdb(void);
-+extern char *uml_strdup(char *string);
-+extern void unprotect_kernel_mem(void);
-+extern void protect_kernel_mem(void);
-+extern void set_kmem_end(unsigned long);
-+extern void uml_cleanup(void);
-+extern void set_current(void *t);
-+extern void lock_signalled_task(void *t);
-+extern void IPI_handler(int cpu);
-+extern int jail_setup(char *line, int *add);
-+extern void *get_init_task(void);
-+extern int clear_user_proc(void *buf, int size);
-+extern int copy_to_user_proc(void *to, void *from, int size);
-+extern int copy_from_user_proc(void *to, void *from, int size);
-+extern int strlen_user_proc(char *str);
-+extern void bus_handler(int sig, union uml_pt_regs *regs);
-+extern void winch(int sig, union uml_pt_regs *regs);
-+extern long execute_syscall(void *r);
-+extern int smp_sigio_handler(void);
-+extern void *get_current(void);
-+extern struct task_struct *get_task(int pid, int require);
-+extern void machine_halt(void);
-+extern int is_syscall(unsigned long addr);
-+extern void arch_switch(void);
-+extern void free_irq(unsigned int, void *);
-+extern int um_in_interrupt(void);
-+extern int cpu(void);
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/line.h um/arch/um/include/line.h
---- orig/arch/um/include/line.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/line.h  2002-11-15 13:44:44.000000000 -0500
-@@ -0,0 +1,106 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __LINE_H__
-+#define __LINE_H__
-+
-+#include "linux/list.h"
-+#include "linux/tqueue.h"
-+#include "linux/tty.h"
-+#include "asm/semaphore.h"
-+#include "chan_user.h"
-+#include "mconsole_kern.h"
-+
-+struct line_driver {
-+      char *name;
-+      char *devfs_name;
-+      short major;
-+      short minor_start;
-+      short type;
-+      short subtype;
-+      int read_irq;
-+      char *read_irq_name;
-+      int write_irq;
-+      char *write_irq_name;
-+      char *symlink_from;
-+      char *symlink_to;
-+      struct mc_device mc;
-+};
-+
-+struct line {
-+      char *init_str;
-+      int init_pri;
-+      struct list_head chan_list;
-+      int valid;
-+      int count;
-+      struct tty_struct *tty;
-+      struct semaphore sem;
-+      char *buffer;
-+      char *head;
-+      char *tail;
-+      int sigio;
-+      struct tq_struct task;
-+      struct line_driver *driver;
-+      int have_irq;
-+};
-+
-+#define LINE_INIT(str, d) \
-+      { init_str :    str, \
-+        init_pri :    INIT_STATIC, \
-+        chan_list :   { }, \
-+        valid :       1, \
-+        count :       0, \
-+        tty :         NULL, \
-+        sem :         { }, \
-+        buffer :      NULL, \
-+        head :        NULL, \
-+        tail :        NULL, \
-+        sigio :       0, \
-+        driver :      d, \
-+          have_irq :  0 }
-+
-+struct lines {
-+      int num;
-+};
-+
-+#define LINES_INIT(n) {  num :                n }
-+
-+extern void line_interrupt(int irq, void *data, struct pt_regs *unused);
-+extern void line_write_interrupt(int irq, void *data, struct pt_regs *unused);
-+extern void line_close(struct line *lines, struct tty_struct *tty);
-+extern int line_open(struct line *lines, struct tty_struct *tty, 
-+                   struct chan_opts *opts);
-+extern int line_setup(struct line *lines, int num, char *init, 
-+                    int all_allowed);
-+extern int line_write(struct line *line, struct tty_struct *tty, int from_user,
-+                    const char *buf, int len);
-+extern int line_write_room(struct tty_struct *tty);
-+extern char *add_xterm_umid(char *base);
-+extern int line_setup_irq(int fd, int input, int output, void *data);
-+extern void line_close_chan(struct line *line);
-+extern void line_disable(struct line *line, int current_irq);
-+extern void line_register_devfs(struct lines *set, 
-+                              struct line_driver *line_driver, 
-+                              struct tty_driver *driver, struct line *lines,
-+                              int nlines);
-+extern void lines_init(struct line *lines, int nlines);
-+extern void close_lines(struct line *lines, int nlines);
-+extern int line_config(struct line *lines, int num, char *str);
-+extern int line_remove(struct line *lines, int num, char *str);
-+extern int line_get_config(char *dev, struct line *lines, int num, char *str, 
-+                         int size, char **error_out);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/Makefile um/arch/um/include/Makefile
---- orig/arch/um/include/Makefile      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/Makefile        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,7 @@
-+all : sc.h
-+
-+sc.h : ../util/mk_sc
-+      ../util/mk_sc > $@
-+
-+../util/mk_sc :
-+      $(MAKE) -C ../util mk_sc
-diff -Naur -X ../exclude-files orig/arch/um/include/mconsole.h um/arch/um/include/mconsole.h
---- orig/arch/um/include/mconsole.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/mconsole.h      2003-01-17 13:48:25.000000000 -0500
-@@ -0,0 +1,99 @@
-+/*
-+ * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org)
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __MCONSOLE_H__
-+#define __MCONSOLE_H__
-+
-+#ifndef __KERNEL__
-+#include <stdint.h>
-+#define u32 uint32_t
-+#endif
-+
-+#define MCONSOLE_MAGIC (0xcafebabe)
-+#define MCONSOLE_MAX_DATA (512)
-+#define MCONSOLE_VERSION 2
-+
-+struct mconsole_request {
-+      u32 magic;
-+      u32 version;
-+      u32 len;
-+      char data[MCONSOLE_MAX_DATA];
-+};
-+
-+struct mconsole_reply {
-+      u32 err;
-+      u32 more;
-+      u32 len;
-+      char data[MCONSOLE_MAX_DATA];
-+};
-+
-+struct mconsole_notify {
-+      u32 magic;
-+      u32 version;    
-+      enum { MCONSOLE_SOCKET, MCONSOLE_PANIC, MCONSOLE_HANG,
-+             MCONSOLE_USER_NOTIFY } type;
-+      u32 len;
-+      char data[MCONSOLE_MAX_DATA];
-+};
-+
-+struct mc_request;
-+
-+struct mconsole_command
-+{
-+      char *command;
-+      void (*handler)(struct mc_request *req);
-+      int as_interrupt;
-+};
-+
-+struct mc_request
-+{
-+      int len;
-+      int as_interrupt;
-+
-+      int originating_fd;
-+      int originlen;
-+      unsigned char origin[128];                      /* sockaddr_un */
-+
-+      struct mconsole_request request;
-+      struct mconsole_command *cmd;
-+};
-+
-+extern char mconsole_socket_name[];
-+
-+extern int mconsole_unlink_socket(void);
-+extern int mconsole_reply(struct mc_request *req, char *reply, int err,
-+                        int more);
-+
-+extern void mconsole_version(struct mc_request *req);
-+extern void mconsole_help(struct mc_request *req);
-+extern void mconsole_halt(struct mc_request *req);
-+extern void mconsole_reboot(struct mc_request *req);
-+extern void mconsole_config(struct mc_request *req);
-+extern void mconsole_remove(struct mc_request *req);
-+extern void mconsole_sysrq(struct mc_request *req);
-+extern void mconsole_cad(struct mc_request *req);
-+extern void mconsole_stop(struct mc_request *req);
-+extern void mconsole_go(struct mc_request *req);
-+
-+extern int mconsole_get_request(int fd, struct mc_request *req);
-+extern int mconsole_notify(char *sock_name, int type, const void *data, 
-+                         int len);
-+extern char *mconsole_notify_socket(void);
-+extern void lock_notify(void);
-+extern void unlock_notify(void);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/mconsole_kern.h um/arch/um/include/mconsole_kern.h
---- orig/arch/um/include/mconsole_kern.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/mconsole_kern.h 2002-11-15 15:21:58.000000000 -0500
-@@ -0,0 +1,62 @@
-+/*
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __MCONSOLE_KERN_H__
-+#define __MCONSOLE_KERN_H__
-+
-+#include "linux/config.h"
-+#include "linux/list.h"
-+#include "mconsole.h"
-+
-+struct mconsole_entry {
-+      struct list_head list;
-+      struct mc_request request;
-+};
-+
-+struct mc_device {
-+      struct list_head list;
-+      char *name;
-+      int (*config)(char *);
-+      int (*get_config)(char *, char *, int, char **);
-+      int (*remove)(char *);
-+};
-+
-+#define CONFIG_CHUNK(str, size, current, chunk, end) \
-+do { \
-+      current += strlen(chunk); \
-+      if(current >= size) \
-+              str = NULL; \
-+      if(str != NULL){ \
-+              strcpy(str, chunk); \
-+              str += strlen(chunk); \
-+      } \
-+      if(end) \
-+              current++; \
-+} while(0)
-+
-+#ifdef CONFIG_MCONSOLE
-+
-+extern void mconsole_register_dev(struct mc_device *new);
-+
-+#else
-+
-+static inline void mconsole_register_dev(struct mc_device *new)
-+{
-+}
-+
-+#endif
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/mem.h um/arch/um/include/mem.h
---- orig/arch/um/include/mem.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/mem.h   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,29 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __MEM_H__
-+#define __MEM_H__
-+
-+struct vm_reserved {
-+      struct list_head list;
-+      unsigned long start;
-+      unsigned long end;
-+};
-+
-+extern void set_usable_vm(unsigned long start, unsigned long end);
-+extern void set_kmem_end(unsigned long new);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/mem_user.h um/arch/um/include/mem_user.h
---- orig/arch/um/include/mem_user.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/mem_user.h      2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,87 @@
-+/*
-+ * arch/um/include/mem_user.h
-+ *
-+ * BRIEF MODULE DESCRIPTION
-+ * user side memory interface for support IO memory inside user mode linux
-+ *
-+ * Copyright (C) 2001 RidgeRun, Inc.
-+ * Author: RidgeRun, Inc.
-+ *         Greg Lonnon glonnon@ridgerun.com or info@ridgerun.com
-+ *
-+ *  This program is free software; you can redistribute  it and/or modify it
-+ *  under  the terms of  the GNU General  Public License as published by the
-+ *  Free Software Foundation;  either version 2 of the  License, or (at your
-+ *  option) any later version.
-+ *
-+ *  THIS  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.
-+ */
-+
-+#ifndef _MEM_USER_H
-+#define _MEM_USER_H
-+
-+struct mem_region {
-+      char *driver;
-+      unsigned long start_pfn;
-+      unsigned long start;
-+      unsigned long len;
-+      void *mem_map;
-+      int fd;
-+};
-+
-+extern struct mem_region *regions[];
-+extern struct mem_region physmem_region;
-+
-+#define ROUND_4M(n) ((((unsigned long) (n)) + (1 << 22)) & ~((1 << 22) - 1))
-+
-+extern unsigned long host_task_size;
-+extern unsigned long task_size;
-+
-+extern int init_mem_user(void);
-+extern int create_mem_file(unsigned long len);
-+extern void setup_range(int fd, char *driver, unsigned long start,
-+                      unsigned long pfn, unsigned long total, int need_vm, 
-+                      struct mem_region *region, void *reserved);
-+extern void setup_memory(void *entry);
-+extern unsigned long find_iomem(char *driver, unsigned long *len_out);
-+extern int init_maps(struct mem_region *region);
-+extern int nregions(void);
-+extern int reserve_vm(unsigned long start, unsigned long end, void *e);
-+extern unsigned long get_vm(unsigned long len);
-+extern void setup_physmem(unsigned long start, unsigned long usable,
-+                        unsigned long len);
-+extern int setup_region(struct mem_region *region, void *entry);
-+extern void add_iomem(char *name, int fd, unsigned long size);
-+extern struct mem_region *phys_region(unsigned long phys);
-+extern unsigned long phys_offset(unsigned long phys);
-+extern void unmap_physmem(void);
-+extern int map_memory(unsigned long virt, unsigned long phys, 
-+                    unsigned long len, int r, int w, int x);
-+extern int protect_memory(unsigned long addr, unsigned long len, 
-+                        int r, int w, int x, int must_succeed);
-+extern unsigned long get_kmem_end(void);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/mode.h um/arch/um/include/mode.h
---- orig/arch/um/include/mode.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/mode.h  2003-01-17 13:23:32.000000000 -0500
-@@ -0,0 +1,30 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __MODE_H__
-+#define __MODE_H__
-+
-+#include "uml-config.h"
-+
-+#ifdef UML_CONFIG_MODE_TT
-+#include "../kernel/tt/include/mode.h"
-+#endif
-+
-+#ifdef UML_CONFIG_MODE_SKAS
-+#include "../kernel/skas/include/mode.h"
-+#endif
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/mode_kern.h um/arch/um/include/mode_kern.h
---- orig/arch/um/include/mode_kern.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/mode_kern.h     2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,30 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __MODE_KERN_H__
-+#define __MODE_KERN_H__
-+
-+#include "linux/config.h"
-+
-+#ifdef CONFIG_MODE_TT
-+#include "../kernel/tt/include/mode_kern.h"
-+#endif
-+
-+#ifdef CONFIG_MODE_SKAS
-+#include "../kernel/skas/include/mode_kern.h"
-+#endif
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/net_kern.h um/arch/um/include/net_kern.h
---- orig/arch/um/include/net_kern.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/net_kern.h      2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,81 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_NET_KERN_H
-+#define __UM_NET_KERN_H
-+
-+#include "linux/netdevice.h"
-+#include "linux/skbuff.h"
-+#include "linux/socket.h"
-+#include "linux/list.h"
-+
-+struct uml_net {
-+      struct list_head list;
-+      struct net_device *dev;
-+      int index;
-+      unsigned char mac[ETH_ALEN];
-+      int have_mac;
-+};
-+
-+struct uml_net_private {
-+      struct list_head list;
-+      spinlock_t lock;
-+      struct net_device *dev;
-+      struct timer_list tl;
-+      struct net_device_stats stats;
-+      int fd;
-+      unsigned char mac[ETH_ALEN];
-+      int have_mac;
-+      unsigned short (*protocol)(struct sk_buff *);
-+      int (*open)(void *);
-+      void (*close)(int, void *);
-+      void (*remove)(void *);
-+      int (*read)(int, struct sk_buff **skb, struct uml_net_private *);
-+      int (*write)(int, struct sk_buff **skb, struct uml_net_private *);
-+      
-+      void (*add_address)(unsigned char *, unsigned char *, void *);
-+      void (*delete_address)(unsigned char *, unsigned char *, void *);
-+      int (*set_mtu)(int mtu, void *);
-+      int user[1];
-+};
-+
-+struct net_kern_info {
-+      void (*init)(struct net_device *, void *);
-+      unsigned short (*protocol)(struct sk_buff *);
-+      int (*read)(int, struct sk_buff **skb, struct uml_net_private *);
-+      int (*write)(int, struct sk_buff **skb, struct uml_net_private *);
-+};
-+
-+struct transport {
-+      struct list_head list;
-+      char *name;
-+      int (*setup)(char *, char **, void *);
-+      struct net_user_info *user;
-+      struct net_kern_info *kern;
-+      int private_size;
-+      int setup_size;
-+};
-+
-+extern struct net_device *ether_init(int);
-+extern unsigned short ether_protocol(struct sk_buff *);
-+extern int setup_etheraddr(char *str, unsigned char *addr);
-+extern struct sk_buff *ether_adjust_skb(struct sk_buff *skb, int extra);
-+extern int tap_setup_common(char *str, char *type, char **dev_name, 
-+                          char **mac_out, char **gate_addr);
-+extern void register_transport(struct transport *new);
-+extern unsigned short eth_protocol(struct sk_buff *skb);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/net_user.h um/arch/um/include/net_user.h
---- orig/arch/um/include/net_user.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/net_user.h      2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,66 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_NET_USER_H__
-+#define __UM_NET_USER_H__
-+
-+#define ETH_ADDR_LEN (6)
-+#define ETH_HEADER_ETHERTAP (16)
-+#define ETH_HEADER_OTHER (14)
-+#define ETH_MAX_PACKET (1500)
-+
-+#define UML_NET_VERSION (4)
-+
-+struct net_user_info {
-+      void (*init)(void *, void *);
-+      int (*open)(void *);
-+      void (*close)(int, void *);
-+      void (*remove)(void *);
-+      int (*set_mtu)(int mtu, void *);
-+      void (*add_address)(unsigned char *, unsigned char *, void *);
-+      void (*delete_address)(unsigned char *, unsigned char *, void *);
-+      int max_packet;
-+};
-+
-+extern void ether_user_init(void *data, void *dev);
-+extern void dev_ip_addr(void *d, char *buf, char *bin_buf);
-+extern void set_ether_mac(void *d, unsigned char *addr);
-+extern void iter_addresses(void *d, void (*cb)(unsigned char *, 
-+                                             unsigned char *, void *), 
-+                         void *arg);
-+
-+extern void *get_output_buffer(int *len_out);
-+extern void free_output_buffer(void *buffer);
-+
-+extern int tap_open_common(void *dev, char *gate_addr);
-+extern void tap_check_ips(char *gate_addr, char *eth_addr);
-+
-+extern void read_output(int fd, char *output_out, int len);
-+
-+extern int net_read(int fd, void *buf, int len);
-+extern int net_recvfrom(int fd, void *buf, int len);
-+extern int net_write(int fd, void *buf, int len);
-+extern int net_send(int fd, void *buf, int len);
-+extern int net_sendto(int fd, void *buf, int len, void *to, int sock_len);
-+
-+extern void open_addr(unsigned char *addr, unsigned char *netmask, void *arg);
-+extern void close_addr(unsigned char *addr, unsigned char *netmask, void *arg);
-+
-+extern char *split_if_spec(char *str, ...);
-+
-+extern int dev_netmask(void *d, void *m);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/os.h um/arch/um/include/os.h
---- orig/arch/um/include/os.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/os.h    2003-02-04 19:11:32.000000000 -0500
-@@ -0,0 +1,137 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __OS_H__
-+#define __OS_H__
-+
-+#include "asm/types.h"
-+#include "../os/include/file.h"
-+
-+#define OS_TYPE_FILE 1 
-+#define OS_TYPE_DIR 2 
-+#define OS_TYPE_SYMLINK 3 
-+#define OS_TYPE_CHARDEV 4
-+#define OS_TYPE_BLOCKDEV 5
-+#define OS_TYPE_FIFO 6
-+#define OS_TYPE_SOCK 7
-+
-+struct openflags {
-+      unsigned int r : 1;
-+      unsigned int w : 1;
-+      unsigned int s : 1;     /* O_SYNC */
-+      unsigned int c : 1;     /* O_CREAT */
-+      unsigned int t : 1;     /* O_TRUNC */
-+      unsigned int a : 1;     /* O_APPEND */
-+      unsigned int e : 1;     /* O_EXCL */
-+      unsigned int cl : 1;    /* FD_CLOEXEC */
-+};
-+
-+#define OPENFLAGS() ((struct openflags) { .r = 0, .w = 0, .s = 0, .c = 0, \
-+                                        .t = 0, .a = 0, .e = 0, .cl = 0 })
-+
-+static inline struct openflags of_read(struct openflags flags)
-+{
-+      flags.r = 1; 
-+      return(flags);
-+}
-+
-+static inline struct openflags of_write(struct openflags flags)
-+{
-+      flags.w = 1; 
-+      return(flags); 
-+}
-+
-+static inline struct openflags of_rdwr(struct openflags flags)
-+{
-+      return(of_read(of_write(flags)));
-+}
-+
-+static inline struct openflags of_set_rw(struct openflags flags, int r, int w)
-+{
-+      flags.r = r;
-+      flags.w = w;
-+      return(flags);
-+}
-+
-+static inline struct openflags of_sync(struct openflags flags)
-+{ 
-+      flags.s = 1; 
-+      return(flags); 
-+}
-+
-+static inline struct openflags of_create(struct openflags flags)
-+{ 
-+      flags.c = 1; 
-+      return(flags); 
-+}
-+ 
-+static inline struct openflags of_trunc(struct openflags flags)
-+{ 
-+      flags.t = 1; 
-+      return(flags); 
-+}
-+ 
-+static inline struct openflags of_append(struct openflags flags)
-+{ 
-+      flags.a = 1; 
-+      return(flags); 
-+}
-+ 
-+static inline struct openflags of_excl(struct openflags flags)
-+{ 
-+      flags.e = 1; 
-+      return(flags); 
-+}
-+
-+static inline struct openflags of_cloexec(struct openflags flags)
-+{ 
-+      flags.cl = 1; 
-+      return(flags); 
-+}
-+ 
-+extern int os_seek_file(int fd, __u64 offset);
-+extern int os_open_file(char *file, struct openflags flags, int mode);
-+extern int os_read_file(int fd, void *buf, int len);
-+extern int os_write_file(int fd, void *buf, int count);
-+extern int os_file_size(char *file, long long *size_out);
-+extern int os_pipe(int *fd, int stream, int close_on_exec);
-+extern int os_set_fd_async(int fd, int owner);
-+extern int os_set_fd_block(int fd, int blocking);
-+extern int os_accept_connection(int fd);
-+extern int os_shutdown_socket(int fd, int r, int w);
-+extern void os_close_file(int fd);
-+extern int os_rcv_fd(int fd, int *helper_pid_out);
-+extern int create_unix_socket(char *file, int len);
-+extern int os_connect_socket(char *name);
-+extern int os_file_type(char *file);
-+extern int os_file_mode(char *file, struct openflags *mode_out);
-+extern int os_lock_file(int fd, int excl);
-+
-+extern unsigned long os_process_pc(int pid);
-+extern int os_process_parent(int pid);
-+extern void os_stop_process(int pid);
-+extern void os_kill_process(int pid, int reap_child);
-+extern void os_usr1_process(int pid);
-+extern int os_getpid(void);
-+
-+extern int os_map_memory(void *virt, int fd, unsigned long off, 
-+                       unsigned long len, int r, int w, int x);
-+extern int os_protect_memory(void *addr, unsigned long len, 
-+                           int r, int w, int x);
-+extern int os_unmap_memory(void *addr, int len);
-+extern void os_flush_stdout(void);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/process.h um/arch/um/include/process.h
---- orig/arch/um/include/process.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/process.h       2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,25 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __PROCESS_H__
-+#define __PROCESS_H__
-+
-+#include <asm/sigcontext.h>
-+
-+extern void sig_handler(int sig, struct sigcontext sc);
-+extern void alarm_handler(int sig, struct sigcontext sc);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/ptrace_user.h um/arch/um/include/ptrace_user.h
---- orig/arch/um/include/ptrace_user.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/ptrace_user.h   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,18 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __PTRACE_USER_H__
-+#define __PTRACE_USER_H__
-+
-+#include "sysdep/ptrace_user.h"
-+
-+extern int ptrace_getregs(long pid, unsigned long *regs_out);
-+extern int ptrace_setregs(long pid, unsigned long *regs_in);
-+extern int ptrace_getfpregs(long pid, unsigned long *regs_out);
-+extern void arch_enter_kernel(void *task, int pid);
-+extern void arch_leave_kernel(void *task, int pid);
-+extern void ptrace_pokeuser(unsigned long addr, unsigned long data);
-+
-+#endif
-diff -Naur -X ../exclude-files orig/arch/um/include/sigcontext.h um/arch/um/include/sigcontext.h
---- orig/arch/um/include/sigcontext.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sigcontext.h    2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,25 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UML_SIGCONTEXT_H__
-+#define __UML_SIGCONTEXT_H__
-+
-+#include "sysdep/sigcontext.h"
-+
-+extern int sc_size(void *data);
-+extern void sc_to_sc(void *to_ptr, void *from_ptr);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sigio.h um/arch/um/include/sigio.h
---- orig/arch/um/include/sigio.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sigio.h 2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,28 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SIGIO_H__
-+#define __SIGIO_H__
-+
-+extern int write_sigio_irq(int fd);
-+extern int register_sigio_fd(int fd);
-+extern int read_sigio_fd(int fd);
-+extern int add_sigio_fd(int fd, int read);
-+extern int ignore_sigio_fd(int fd);
-+extern void sigio_lock(void);
-+extern void sigio_unlock(void);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/signal_kern.h um/arch/um/include/signal_kern.h
---- orig/arch/um/include/signal_kern.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/signal_kern.h   2002-12-05 18:08:47.000000000 -0500
-@@ -0,0 +1,22 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SIGNAL_KERN_H__
-+#define __SIGNAL_KERN_H__
-+
-+extern int have_signals(void *t);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/signal_user.h um/arch/um/include/signal_user.h
---- orig/arch/um/include/signal_user.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/signal_user.h   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,26 @@
-+/* 
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SIGNAL_USER_H__
-+#define __SIGNAL_USER_H__
-+
-+extern int signal_stack_size;
-+
-+extern int change_sig(int signal, int on);
-+extern void set_sigstack(void *stack, int size);
-+extern void set_handler(int sig, void (*handler)(int), int flags, ...);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/skas_ptrace.h um/arch/um/include/skas_ptrace.h
---- orig/arch/um/include/skas_ptrace.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/skas_ptrace.h   2002-12-16 11:54:52.000000000 -0500
-@@ -0,0 +1,36 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SKAS_PTRACE_H
-+#define __SKAS_PTRACE_H
-+
-+struct ptrace_faultinfo {
-+      int is_write;
-+      unsigned long addr;
-+};
-+
-+struct ptrace_ldt {
-+      int func;
-+      void *ptr;
-+      unsigned long bytecount;
-+};
-+
-+#define PTRACE_FAULTINFO 52
-+#define PTRACE_SIGPENDING 53
-+#define PTRACE_LDT 54
-+#define PTRACE_SWITCH_MM 55
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/syscall_user.h um/arch/um/include/syscall_user.h
---- orig/arch/um/include/syscall_user.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/syscall_user.h  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,23 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SYSCALL_USER_H
-+#define __SYSCALL_USER_H
-+
-+extern int record_syscall_start(int syscall);
-+extern void record_syscall_end(int index, int result);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/checksum.h um/arch/um/include/sysdep-i386/checksum.h
---- orig/arch/um/include/sysdep-i386/checksum.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-i386/checksum.h  2002-10-29 21:23:02.000000000 -0500
-@@ -0,0 +1,217 @@
-+/* 
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_SYSDEP_CHECKSUM_H
-+#define __UM_SYSDEP_CHECKSUM_H
-+
-+#include "linux/string.h"
-+
-+/*
-+ * computes the checksum of a memory block at buff, length len,
-+ * and adds in "sum" (32-bit)
-+ *
-+ * returns a 32-bit number suitable for feeding into itself
-+ * or csum_tcpudp_magic
-+ *
-+ * this function must be called with even lengths, except
-+ * for the last fragment, which may be odd
-+ *
-+ * it's best to have buff aligned on a 32-bit boundary
-+ */
-+unsigned int csum_partial(const unsigned char * buff, int len, 
-+                        unsigned int sum);
-+
-+/*
-+ * the same as csum_partial, but copies from src while it
-+ * checksums, and handles user-space pointer exceptions correctly, when needed.
-+ *
-+ * here even more important to align src and dst on a 32-bit (or even
-+ * better 64-bit) boundary
-+ */
-+
-+unsigned int csum_partial_copy_to(const char *src, char *dst, int len, 
-+                                int sum, int *err_ptr);
-+unsigned int csum_partial_copy_from(const char *src, char *dst, int len, 
-+                                  int sum, int *err_ptr);
-+
-+/*
-+ *    Note: when you get a NULL pointer exception here this means someone
-+ *    passed in an incorrect kernel address to one of these functions.
-+ *
-+ *    If you use these functions directly please don't forget the
-+ *    verify_area().
-+ */
-+
-+static __inline__
-+unsigned int csum_partial_copy_nocheck(const char *src, char *dst,
-+                                     int len, int sum)
-+{
-+      memcpy(dst, src, len);
-+      return(csum_partial(dst, len, sum));
-+}
-+
-+static __inline__
-+unsigned int csum_partial_copy_from_user(const char *src, char *dst,
-+                                       int len, int sum, int *err_ptr)
-+{
-+      return csum_partial_copy_from(src, dst, len, sum, err_ptr);
-+}
-+
-+/*
-+ * These are the old (and unsafe) way of doing checksums, a warning message 
-+ * will be printed if they are used and an exeption occurs.
-+ *
-+ * these functions should go away after some time.
-+ */
-+
-+#define csum_partial_copy_fromuser csum_partial_copy_from_user
-+unsigned int csum_partial_copy( const char *src, char *dst, int len, int sum);
-+
-+/*
-+ *    This is a version of ip_compute_csum() optimized for IP headers,
-+ *    which always checksum on 4 octet boundaries.
-+ *
-+ *    By Jorge Cwik <jorge@laser.satlink.net>, adapted for linux by
-+ *    Arnt Gulbrandsen.
-+ */
-+static inline unsigned short ip_fast_csum(unsigned char * iph,
-+                                        unsigned int ihl)
-+{
-+      unsigned int sum;
-+
-+      __asm__ __volatile__(
-+          "movl (%1), %0      ;\n"
-+          "subl $4, %2        ;\n"
-+          "jbe 2f             ;\n"
-+          "addl 4(%1), %0     ;\n"
-+          "adcl 8(%1), %0     ;\n"
-+          "adcl 12(%1), %0    ;\n"
-+"1:       adcl 16(%1), %0     ;\n"
-+          "lea 4(%1), %1      ;\n"
-+          "decl %2            ;\n"
-+          "jne 1b             ;\n"
-+          "adcl $0, %0        ;\n"
-+          "movl %0, %2        ;\n"
-+          "shrl $16, %0       ;\n"
-+          "addw %w2, %w0      ;\n"
-+          "adcl $0, %0        ;\n"
-+          "notl %0            ;\n"
-+"2:                           ;\n"
-+      /* Since the input registers which are loaded with iph and ipl
-+         are modified, we must also specify them as outputs, or gcc
-+         will assume they contain their original values. */
-+      : "=r" (sum), "=r" (iph), "=r" (ihl)
-+      : "1" (iph), "2" (ihl));
-+      return(sum);
-+}
-+
-+/*
-+ *    Fold a partial checksum
-+ */
-+
-+static inline unsigned int csum_fold(unsigned int sum)
-+{
-+      __asm__(
-+              "addl %1, %0            ;\n"
-+              "adcl $0xffff, %0       ;\n"
-+              : "=r" (sum)
-+              : "r" (sum << 16), "0" (sum & 0xffff0000)
-+      );
-+      return (~sum) >> 16;
-+}
-+
-+static inline unsigned long csum_tcpudp_nofold(unsigned long saddr,
-+                                                 unsigned long daddr,
-+                                                 unsigned short len,
-+                                                 unsigned short proto,
-+                                                 unsigned int sum)
-+{
-+    __asm__(
-+      "addl %1, %0    ;\n"
-+      "adcl %2, %0    ;\n"
-+      "adcl %3, %0    ;\n"
-+      "adcl $0, %0    ;\n"
-+      : "=r" (sum)
-+      : "g" (daddr), "g"(saddr), "g"((ntohs(len)<<16)+proto*256), "0"(sum));
-+    return sum;
-+}
-+
-+/*
-+ * computes the checksum of the TCP/UDP pseudo-header
-+ * returns a 16-bit checksum, already complemented
-+ */
-+static inline unsigned short int csum_tcpudp_magic(unsigned long saddr,
-+                                                 unsigned long daddr,
-+                                                 unsigned short len,
-+                                                 unsigned short proto,
-+                                                 unsigned int sum)
-+{
-+      return csum_fold(csum_tcpudp_nofold(saddr,daddr,len,proto,sum));
-+}
-+
-+/*
-+ * this routine is used for miscellaneous IP-like checksums, mainly
-+ * in icmp.c
-+ */
-+
-+static inline unsigned short ip_compute_csum(unsigned char * buff, int len)
-+{
-+    return csum_fold (csum_partial(buff, len, 0));
-+}
-+
-+#define _HAVE_ARCH_IPV6_CSUM
-+static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr,
-+                                                   struct in6_addr *daddr,
-+                                                   __u32 len,
-+                                                   unsigned short proto,
-+                                                   unsigned int sum)
-+{
-+      __asm__(
-+              "addl 0(%1), %0         ;\n"
-+              "adcl 4(%1), %0         ;\n"
-+              "adcl 8(%1), %0         ;\n"
-+              "adcl 12(%1), %0        ;\n"
-+              "adcl 0(%2), %0         ;\n"
-+              "adcl 4(%2), %0         ;\n"
-+              "adcl 8(%2), %0         ;\n"
-+              "adcl 12(%2), %0        ;\n"
-+              "adcl %3, %0            ;\n"
-+              "adcl %4, %0            ;\n"
-+              "adcl $0, %0            ;\n"
-+              : "=&r" (sum)
-+              : "r" (saddr), "r" (daddr),
-+                "r"(htonl(len)), "r"(htonl(proto)), "0"(sum));
-+
-+      return csum_fold(sum);
-+}
-+
-+/*
-+ *    Copy and checksum to user
-+ */
-+#define HAVE_CSUM_COPY_USER
-+static __inline__ unsigned int csum_and_copy_to_user(const char *src, 
-+                                                   char *dst, int len,
-+                                                   int sum, int *err_ptr)
-+{
-+      if (access_ok(VERIFY_WRITE, dst, len))
-+              return(csum_partial_copy_to(src, dst, len, sum, err_ptr));
-+
-+      if (len)
-+              *err_ptr = -EFAULT;
-+
-+      return -1; /* invalid checksum */
-+}
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/frame.h um/arch/um/include/sysdep-i386/frame.h
---- orig/arch/um/include/sysdep-i386/frame.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-i386/frame.h     2002-12-06 14:07:54.000000000 -0500
-@@ -0,0 +1,29 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __FRAME_I386_H
-+#define __FRAME_I386_H
-+
-+struct arch_frame_data_raw {
-+      unsigned long fp_start;
-+      unsigned long sr;
-+};
-+
-+struct arch_frame_data {
-+      int fpstate_size;
-+};
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/frame_kern.h um/arch/um/include/sysdep-i386/frame_kern.h
---- orig/arch/um/include/sysdep-i386/frame_kern.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-i386/frame_kern.h        2002-12-02 21:45:04.000000000 -0500
-@@ -0,0 +1,69 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __FRAME_KERN_I386_H
-+#define __FRAME_KERN_I386_H
-+
-+/* This is called from sys_sigreturn.  It takes the sp at the point of the
-+ * sigreturn system call and returns the address of the sigcontext struct
-+ * on the stack.
-+ */
-+
-+static inline void *sp_to_sc(unsigned long sp)
-+{
-+      return((void *) sp);
-+}
-+
-+static inline void *sp_to_uc(unsigned long sp)
-+{
-+      unsigned long uc;
-+
-+      uc = sp + signal_frame_si.uc_index - 
-+              signal_frame_si.common.sp_index - 4;
-+      return((void *) uc);
-+}
-+
-+static inline void *sp_to_rt_sc(unsigned long sp)
-+{
-+      unsigned long sc;
-+
-+      sc = sp - signal_frame_si.common.sp_index + 
-+              signal_frame_si.common.len - 4;
-+      return((void *) sc);
-+}
-+
-+static inline void *sp_to_mask(unsigned long sp)
-+{
-+      unsigned long mask;
-+
-+      mask = sp - signal_frame_sc.common.sp_index + 
-+              signal_frame_sc.common.len - 8;
-+      return((void *) mask);
-+}
-+
-+extern int sc_size(void *data);
-+
-+static inline void *sp_to_rt_mask(unsigned long sp)
-+{
-+      unsigned long mask;
-+
-+      mask = sp - signal_frame_si.common.sp_index + 
-+              signal_frame_si.common.len + 
-+              sc_size(&signal_frame_si.common.arch) - 4;
-+      return((void *) mask);
-+}
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/frame_user.h um/arch/um/include/sysdep-i386/frame_user.h
---- orig/arch/um/include/sysdep-i386/frame_user.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-i386/frame_user.h        2002-12-06 14:13:59.000000000 -0500
-@@ -0,0 +1,91 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __FRAME_USER_I386_H
-+#define __FRAME_USER_I386_H
-+
-+#include <asm/page.h>
-+#include "sysdep/frame.h"
-+
-+/* This stuff is to calculate the size of the fp state struct at runtime
-+ * because it has changed between 2.2 and 2.4 and it would be good for a
-+ * UML compiled on one to work on the other.
-+ * So, setup_arch_frame_raw fills in the arch struct with the raw data, which
-+ * just contains the address of the end of the sigcontext.  This is invoked
-+ * from the signal handler.
-+ * setup_arch_frame uses that data to figure out what 
-+ * arch_frame_data.fpstate_size should be.  It really has no idea, since it's
-+ * not allowed to do sizeof(struct fpstate) but it's safe to consider that it's
-+ * everything from the end of the sigcontext up to the top of the stack.  So,
-+ * it masks off the page number to get the offset within the page and subtracts
-+ * that from the page size, and that's how big the fpstate struct will be
-+ * considered to be.
-+ */
-+
-+static inline void setup_arch_frame_raw(struct arch_frame_data_raw *data,
-+                                      void *end, unsigned long srp)
-+{
-+      unsigned long sr = *((unsigned long *) srp);
-+
-+      data->fp_start = (unsigned long) end;
-+      if((sr & PAGE_MASK) == ((unsigned long) end & PAGE_MASK))
-+              data->sr = sr;
-+      else data->sr = 0;
-+}
-+
-+static inline void setup_arch_frame(struct arch_frame_data_raw *in, 
-+                                  struct arch_frame_data *out)
-+{
-+      unsigned long fpstate_start = in->fp_start;
-+
-+      if(in->sr == 0){
-+              fpstate_start &= ~PAGE_MASK;
-+              out->fpstate_size = PAGE_SIZE - fpstate_start;
-+      }
-+      else {
-+              out->fpstate_size = in->sr - fpstate_start;
-+      }
-+}
-+
-+/* This figures out where on the stack the SA_RESTORER function address
-+ * is stored.  For i386, it's the signal handler return address, so it's
-+ * located next to the frame pointer.
-+ * This is inlined, so __builtin_frame_address(0) is correct.  Otherwise,
-+ * it would have to be __builtin_frame_address(1).
-+ */
-+
-+static inline unsigned long frame_restorer(void)
-+{
-+      unsigned long *fp;
-+
-+      fp = __builtin_frame_address(0);
-+      return((unsigned long) (fp + 1));
-+}
-+
-+/* Similarly, this returns the value of sp when the handler was first
-+ * entered.  This is used to calculate the proper sp when delivering
-+ * signals.
-+ */
-+
-+static inline unsigned long frame_sp(void)
-+{
-+      unsigned long *fp;
-+
-+      fp = __builtin_frame_address(0);
-+      return((unsigned long) (fp + 1));
-+}
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/ptrace.h um/arch/um/include/sysdep-i386/ptrace.h
---- orig/arch/um/include/sysdep-i386/ptrace.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-i386/ptrace.h    2003-01-17 13:23:31.000000000 -0500
-@@ -0,0 +1,193 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SYSDEP_I386_PTRACE_H
-+#define __SYSDEP_I386_PTRACE_H
-+
-+#include "uml-config.h"
-+
-+#ifdef UML_CONFIG_MODE_TT
-+#include "ptrace-tt.h"
-+#endif
-+
-+#ifdef UML_CONFIG_MODE_SKAS
-+#include "ptrace-skas.h"
-+#endif
-+
-+#include "choose-mode.h"
-+
-+union uml_pt_regs {
-+#ifdef UML_CONFIG_MODE_TT
-+      struct tt_regs {
-+              long syscall;
-+              void *sc;
-+      } tt;
-+#endif
-+#ifdef UML_CONFIG_MODE_SKAS
-+      struct skas_regs {
-+              unsigned long regs[HOST_FRAME_SIZE];
-+              unsigned long fp[HOST_FP_SIZE];
-+              unsigned long xfp[HOST_XFP_SIZE];
-+              unsigned long fault_addr;
-+              unsigned long fault_type;
-+              unsigned long trap_type;
-+              long syscall;
-+              int is_user;
-+      } skas;
-+#endif
-+};
-+
-+#define EMPTY_UML_PT_REGS { }
-+
-+extern int mode_tt;
-+
-+#define UPT_SC(r) ((r)->tt.sc)
-+#define UPT_IP(r) \
-+      CHOOSE_MODE(SC_IP(UPT_SC(r)), REGS_IP((r)->skas.regs))
-+#define UPT_SP(r) \
-+      CHOOSE_MODE(SC_SP(UPT_SC(r)), REGS_SP((r)->skas.regs))
-+#define UPT_EFLAGS(r) \
-+      CHOOSE_MODE(SC_EFLAGS(UPT_SC(r)), REGS_EFLAGS((r)->skas.regs))
-+#define UPT_EAX(r) \
-+      CHOOSE_MODE(SC_EAX(UPT_SC(r)), REGS_EAX((r)->skas.regs))
-+#define UPT_EBX(r) \
-+      CHOOSE_MODE(SC_EBX(UPT_SC(r)), REGS_EBX((r)->skas.regs))
-+#define UPT_ECX(r) \
-+      CHOOSE_MODE(SC_ECX(UPT_SC(r)), REGS_ECX((r)->skas.regs))
-+#define UPT_EDX(r) \
-+      CHOOSE_MODE(SC_EDX(UPT_SC(r)), REGS_EDX((r)->skas.regs))
-+#define UPT_ESI(r) \
-+      CHOOSE_MODE(SC_ESI(UPT_SC(r)), REGS_ESI((r)->skas.regs))
-+#define UPT_EDI(r) \
-+      CHOOSE_MODE(SC_EDI(UPT_SC(r)), REGS_EDI((r)->skas.regs))
-+#define UPT_EBP(r) \
-+      CHOOSE_MODE(SC_EBP(UPT_SC(r)), REGS_EBP((r)->skas.regs))
-+#define UPT_ORIG_EAX(r) \
-+      CHOOSE_MODE((r)->tt.syscall, (r)->skas.syscall)
-+#define UPT_CS(r) \
-+      CHOOSE_MODE(SC_CS(UPT_SC(r)), REGS_CS((r)->skas.regs))
-+#define UPT_SS(r) \
-+      CHOOSE_MODE(SC_SS(UPT_SC(r)), REGS_SS((r)->skas.regs))
-+#define UPT_DS(r) \
-+      CHOOSE_MODE(SC_DS(UPT_SC(r)), REGS_DS((r)->skas.regs))
-+#define UPT_ES(r) \
-+      CHOOSE_MODE(SC_ES(UPT_SC(r)), REGS_ES((r)->skas.regs))
-+#define UPT_FS(r) \
-+      CHOOSE_MODE(SC_FS(UPT_SC(r)), REGS_FS((r)->skas.regs))
-+#define UPT_GS(r) \
-+      CHOOSE_MODE(SC_GS(UPT_SC(r)), REGS_GS((r)->skas.regs))
-+
-+#define UPT_SYSCALL_ARG1(r) UPT_EBX(r)
-+#define UPT_SYSCALL_ARG2(r) UPT_ECX(r)
-+#define UPT_SYSCALL_ARG3(r) UPT_EDX(r)
-+#define UPT_SYSCALL_ARG4(r) UPT_ESI(r)
-+#define UPT_SYSCALL_ARG5(r) UPT_EDI(r)
-+#define UPT_SYSCALL_ARG6(r) UPT_EBP(r)
-+
-+extern int user_context(unsigned long sp);
-+
-+#define UPT_IS_USER(r) \
-+      CHOOSE_MODE(user_context(UPT_SP(r)), (r)->skas.is_user)
-+
-+struct syscall_args {
-+      unsigned long args[6];
-+};
-+
-+#define SYSCALL_ARGS(r) ((struct syscall_args) \
-+                        { .args = { UPT_SYSCALL_ARG1(r), \
-+                                    UPT_SYSCALL_ARG2(r), \
-+                                  UPT_SYSCALL_ARG3(r), \
-+                                    UPT_SYSCALL_ARG4(r), \
-+                                  UPT_SYSCALL_ARG5(r), \
-+                                    UPT_SYSCALL_ARG6(r) } } )
-+
-+#define UPT_REG(regs, reg) \
-+      ({      unsigned long val; \
-+              switch(reg){ \
-+              case EIP: val = UPT_IP(regs); break; \
-+              case UESP: val = UPT_SP(regs); break; \
-+              case EAX: val = UPT_EAX(regs); break; \
-+              case EBX: val = UPT_EBX(regs); break; \
-+              case ECX: val = UPT_ECX(regs); break; \
-+              case EDX: val = UPT_EDX(regs); break; \
-+              case ESI: val = UPT_ESI(regs); break; \
-+              case EDI: val = UPT_EDI(regs); break; \
-+              case EBP: val = UPT_EBP(regs); break; \
-+              case ORIG_EAX: val = UPT_ORIG_EAX(regs); break; \
-+              case CS: val = UPT_CS(regs); break; \
-+              case SS: val = UPT_SS(regs); break; \
-+              case DS: val = UPT_DS(regs); break; \
-+              case ES: val = UPT_ES(regs); break; \
-+              case FS: val = UPT_FS(regs); break; \
-+              case GS: val = UPT_GS(regs); break; \
-+              case EFL: val = UPT_EFLAGS(regs); break; \
-+              default :  \
-+                      panic("Bad register in UPT_REG : %d\n", reg);  \
-+                      val = -1; \
-+              } \
-+              val; \
-+      })
-+      
-+
-+#define UPT_SET(regs, reg, val) \
-+      do { \
-+              switch(reg){ \
-+              case EIP: UPT_IP(regs) = val; break; \
-+              case UESP: UPT_SP(regs) = val; break; \
-+              case EAX: UPT_EAX(regs) = val; break; \
-+              case EBX: UPT_EBX(regs) = val; break; \
-+              case ECX: UPT_ECX(regs) = val; break; \
-+              case EDX: UPT_EDX(regs) = val; break; \
-+              case ESI: UPT_ESI(regs) = val; break; \
-+              case EDI: UPT_EDI(regs) = val; break; \
-+              case EBP: UPT_EBP(regs) = val; break; \
-+              case ORIG_EAX: UPT_ORIG_EAX(regs) = val; break; \
-+              case CS: UPT_CS(regs) = val; break; \
-+              case SS: UPT_SS(regs) = val; break; \
-+              case DS: UPT_DS(regs) = val; break; \
-+              case ES: UPT_ES(regs) = val; break; \
-+              case FS: UPT_FS(regs) = val; break; \
-+              case GS: UPT_GS(regs) = val; break; \
-+              case EFL: UPT_EFLAGS(regs) = val; break; \
-+              default :  \
-+                      panic("Bad register in UPT_SET : %d\n", reg);  \
-+                      break; \
-+              } \
-+      } while (0)
-+
-+#define UPT_SET_SYSCALL_RETURN(r, res) \
-+      CHOOSE_MODE(SC_SET_SYSCALL_RETURN(UPT_SC(r), (res)), \
-+                    REGS_SET_SYSCALL_RETURN((r)->skas.regs, (res)))
-+
-+#define UPT_RESTART_SYSCALL(r) \
-+      CHOOSE_MODE(SC_RESTART_SYSCALL(UPT_SC(r)), \
-+                  REGS_RESTART_SYSCALL((r)->skas.regs))
-+
-+#define UPT_ORIG_SYSCALL(r) UPT_EAX(r)
-+#define UPT_SYSCALL_NR(r) UPT_ORIG_EAX(r)
-+#define UPT_SYSCALL_RET(r) UPT_EAX(r)
-+
-+#define UPT_SEGV_IS_FIXABLE(r) \
-+      CHOOSE_MODE(SC_SEGV_IS_FIXABLE(UPT_SC(r)), \
-+                    REGS_SEGV_IS_FIXABLE(&r->skas))
-+
-+#define UPT_FAULT_ADDR(r) \
-+      CHOOSE_MODE(SC_FAULT_ADDR(UPT_SC(r)), REGS_FAULT_ADDR(&r->skas))
-+
-+#define UPT_FAULT_WRITE(r) \
-+      CHOOSE_MODE(SC_FAULT_WRITE(UPT_SC(r)), REGS_FAULT_WRITE(&r->skas))
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/ptrace_user.h um/arch/um/include/sysdep-i386/ptrace_user.h
---- orig/arch/um/include/sysdep-i386/ptrace_user.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-i386/ptrace_user.h       2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,62 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SYSDEP_I386_PTRACE_USER_H__
-+#define __SYSDEP_I386_PTRACE_USER_H__
-+
-+#include <asm/ptrace.h>
-+
-+#define PT_OFFSET(r) ((r) * sizeof(long))
-+
-+#define PT_SYSCALL_NR(regs) ((regs)[ORIG_EAX])
-+#define PT_SYSCALL_NR_OFFSET PT_OFFSET(ORIG_EAX)
-+
-+#define PT_SYSCALL_ARG1_OFFSET PT_OFFSET(EBX)
-+#define PT_SYSCALL_ARG2_OFFSET PT_OFFSET(ECX)
-+#define PT_SYSCALL_ARG3_OFFSET PT_OFFSET(EDX)
-+#define PT_SYSCALL_ARG4_OFFSET PT_OFFSET(ESI)
-+#define PT_SYSCALL_ARG5_OFFSET PT_OFFSET(EDI)
-+
-+#define PT_SYSCALL_RET_OFFSET PT_OFFSET(EAX)
-+
-+#define PT_IP_OFFSET PT_OFFSET(EIP)
-+#define PT_IP(regs) ((regs)[EIP])
-+#define PT_SP(regs) ((regs)[UESP])
-+
-+#ifndef FRAME_SIZE
-+#define FRAME_SIZE (17)
-+#endif
-+#define FRAME_SIZE_OFFSET (FRAME_SIZE * sizeof(unsigned long))
-+
-+#define FP_FRAME_SIZE (27)
-+#define FPX_FRAME_SIZE (128)
-+
-+#ifdef PTRACE_GETREGS
-+#define UM_HAVE_GETREGS
-+#endif
-+
-+#ifdef PTRACE_SETREGS
-+#define UM_HAVE_SETREGS
-+#endif
-+
-+#ifdef PTRACE_GETFPREGS
-+#define UM_HAVE_GETFPREGS
-+#endif
-+
-+#ifdef PTRACE_SETFPREGS
-+#define UM_HAVE_SETFPREGS
-+#endif
-+
-+#ifdef PTRACE_GETFPXREGS
-+#define UM_HAVE_GETFPXREGS
-+#endif
-+
-+#ifdef PTRACE_SETFPXREGS
-+#define UM_HAVE_SETFPXREGS
-+#endif
-+
-+extern void update_debugregs(int seq);
-+
-+#endif
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/sigcontext.h um/arch/um/include/sysdep-i386/sigcontext.h
---- orig/arch/um/include/sysdep-i386/sigcontext.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-i386/sigcontext.h        2002-12-08 18:21:33.000000000 -0500
-@@ -0,0 +1,49 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SYS_SIGCONTEXT_I386_H
-+#define __SYS_SIGCONTEXT_I386_H
-+
-+#include "sc.h"
-+
-+#define IP_RESTART_SYSCALL(ip) ((ip) -= 2)
-+
-+#define SC_RESTART_SYSCALL(sc) IP_RESTART_SYSCALL(SC_IP(sc))
-+#define SC_SET_SYSCALL_RETURN(sc, result) SC_EAX(sc) = (result)
-+
-+#define SC_FAULT_ADDR(sc) SC_CR2(sc)
-+#define SC_FAULT_TYPE(sc) SC_ERR(sc)
-+
-+#define FAULT_WRITE(err) (err & 2)
-+#define TO_SC_ERR(is_write) ((is_write) ? 2 : 0)
-+
-+#define SC_FAULT_WRITE(sc) (FAULT_WRITE(SC_ERR(sc)))
-+
-+#define SC_TRAP_TYPE(sc) SC_TRAPNO(sc)
-+
-+/* ptrace expects that, at the start of a system call, %eax contains
-+ * -ENOSYS, so this makes it so.
-+ */
-+#define SC_START_SYSCALL(sc) do SC_EAX(sc) = -ENOSYS; while(0)
-+
-+/* These are General Protection and Page Fault */
-+#define SEGV_IS_FIXABLE(trap) ((trap == 13) || (trap == 14))
-+
-+#define SC_SEGV_IS_FIXABLE(sc) (SEGV_IS_FIXABLE(SC_TRAPNO(sc)))
-+
-+extern unsigned long *sc_sigmask(void *sc_ptr);
-+extern int sc_get_fpregs(unsigned long buf, void *sc_ptr);
-+
-+#endif
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/syscalls.h um/arch/um/include/sysdep-i386/syscalls.h
---- orig/arch/um/include/sysdep-i386/syscalls.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-i386/syscalls.h  2002-12-08 18:04:15.000000000 -0500
-@@ -0,0 +1,61 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "asm/unistd.h"
-+#include "sysdep/ptrace.h"
-+
-+typedef long syscall_handler_t(struct pt_regs);
-+
-+#define EXECUTE_SYSCALL(syscall, regs) \
-+      ((long (*)(struct syscall_args)) (*sys_call_table[syscall]))(SYSCALL_ARGS(&regs->regs))
-+
-+extern syscall_handler_t sys_modify_ldt;
-+extern syscall_handler_t old_mmap_i386;
-+extern syscall_handler_t old_select;
-+extern syscall_handler_t sys_ni_syscall;
-+
-+#define ARCH_SYSCALLS \
-+      [ __NR_mmap ] = old_mmap_i386, \
-+      [ __NR_select ] = old_select, \
-+      [ __NR_vm86old ] = sys_ni_syscall, \
-+        [ __NR_modify_ldt ] = sys_modify_ldt, \
-+      [ __NR_lchown32 ] = sys_lchown, \
-+      [ __NR_getuid32 ] = sys_getuid, \
-+      [ __NR_getgid32 ] = sys_getgid, \
-+      [ __NR_geteuid32 ] = sys_geteuid, \
-+      [ __NR_getegid32 ] = sys_getegid, \
-+      [ __NR_setreuid32 ] = sys_setreuid, \
-+      [ __NR_setregid32 ] = sys_setregid, \
-+      [ __NR_getgroups32 ] = sys_getgroups, \
-+      [ __NR_setgroups32 ] = sys_setgroups, \
-+      [ __NR_fchown32 ] = sys_fchown, \
-+      [ __NR_setresuid32 ] = sys_setresuid, \
-+      [ __NR_getresuid32 ] = sys_getresuid, \
-+      [ __NR_setresgid32 ] = sys_setresgid, \
-+      [ __NR_getresgid32 ] = sys_getresgid, \
-+      [ __NR_chown32 ] = sys_chown, \
-+      [ __NR_setuid32 ] = sys_setuid, \
-+      [ __NR_setgid32 ] = sys_setgid, \
-+      [ __NR_setfsuid32 ] = sys_setfsuid, \
-+      [ __NR_setfsgid32 ] = sys_setfsgid, \
-+      [ __NR_pivot_root ] = sys_pivot_root, \
-+      [ __NR_mincore ] = sys_mincore, \
-+      [ __NR_madvise ] = sys_madvise, \
-+        [ 222 ] = sys_ni_syscall, 
-+        
-+/* 222 doesn't yet have a name in include/asm-i386/unistd.h */
-+
-+#define LAST_ARCH_SYSCALL 222
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-ia64/ptrace.h um/arch/um/include/sysdep-ia64/ptrace.h
---- orig/arch/um/include/sysdep-ia64/ptrace.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-ia64/ptrace.h    2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,26 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SYSDEP_IA64_PTRACE_H
-+#define __SYSDEP_IA64_PTRACE_H
-+
-+struct sys_pt_regs {
-+  int foo;
-+};
-+
-+#define EMPTY_REGS { 0 }
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-ia64/sigcontext.h um/arch/um/include/sysdep-ia64/sigcontext.h
---- orig/arch/um/include/sysdep-ia64/sigcontext.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-ia64/sigcontext.h        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,20 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SYSDEP_IA64_SIGCONTEXT_H
-+#define __SYSDEP_IA64_SIGCONTEXT_H
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-ia64/syscalls.h um/arch/um/include/sysdep-ia64/syscalls.h
---- orig/arch/um/include/sysdep-ia64/syscalls.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-ia64/syscalls.h  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,20 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SYSDEP_IA64_SYSCALLS_H
-+#define __SYSDEP_IA64_SYSCALLS_H
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-ppc/ptrace.h um/arch/um/include/sysdep-ppc/ptrace.h
---- orig/arch/um/include/sysdep-ppc/ptrace.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-ppc/ptrace.h     2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,104 @@
-+/* 
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SYS_PTRACE_PPC_H
-+#define __SYS_PTRACE_PPC_H
-+
-+#include "linux/config.h"
-+#include "linux/types.h"
-+
-+/* the following taken from <asm-ppc/ptrace.h> */
-+
-+#ifdef CONFIG_PPC64
-+#define PPC_REG unsigned long /*long*/
-+#else
-+#define PPC_REG unsigned long
-+#endif
-+struct sys_pt_regs_s {
-+      PPC_REG gpr[32];
-+      PPC_REG nip;
-+      PPC_REG msr;
-+      PPC_REG orig_gpr3;      /* Used for restarting system calls */
-+      PPC_REG ctr;
-+      PPC_REG link;
-+      PPC_REG xer;
-+      PPC_REG ccr;
-+      PPC_REG mq;             /* 601 only (not used at present) */
-+                              /* Used on APUS to hold IPL value. */
-+      PPC_REG trap;           /* Reason for being here */
-+      PPC_REG dar;            /* Fault registers */
-+      PPC_REG dsisr;
-+      PPC_REG result;         /* Result of a system call */
-+};
-+
-+#define NUM_REGS (sizeof(struct sys_pt_regs_s) / sizeof(PPC_REG))
-+
-+struct sys_pt_regs {
-+    PPC_REG regs[sizeof(struct sys_pt_regs_s) / sizeof(PPC_REG)];
-+};
-+
-+#define UM_MAX_REG (PT_FPR0)
-+#define UM_MAX_REG_OFFSET (UM_MAX_REG * sizeof(PPC_REG))
-+
-+#define EMPTY_REGS { { [ 0 ... NUM_REGS - 1] = 0 } }
-+
-+#define UM_REG(r, n) ((r)->regs[n])
-+
-+#define UM_SYSCALL_RET(r) UM_REG(r, PT_R3)
-+#define UM_SP(r) UM_REG(r, PT_R1)
-+#define UM_IP(r) UM_REG(r, PT_NIP)
-+#define UM_ELF_ZERO(r) UM_REG(r, PT_FPSCR)
-+#define UM_SYSCALL_NR(r) UM_REG(r, PT_R0)
-+#define UM_SYSCALL_ARG1(r) UM_REG(r, PT_ORIG_R3)
-+#define UM_SYSCALL_ARG2(r) UM_REG(r, PT_R4)
-+#define UM_SYSCALL_ARG3(r) UM_REG(r, PT_R5)
-+#define UM_SYSCALL_ARG4(r) UM_REG(r, PT_R6)
-+#define UM_SYSCALL_ARG5(r) UM_REG(r, PT_R7)
-+#define UM_SYSCALL_ARG6(r) UM_REG(r, PT_R8)
-+
-+#define UM_SYSCALL_NR_OFFSET (PT_R0 * sizeof(PPC_REG))
-+#define UM_SYSCALL_RET_OFFSET (PT_R3 * sizeof(PPC_REG))
-+#define UM_SYSCALL_ARG1_OFFSET (PT_R3 * sizeof(PPC_REG))
-+#define UM_SYSCALL_ARG2_OFFSET (PT_R4 * sizeof(PPC_REG))
-+#define UM_SYSCALL_ARG3_OFFSET (PT_R5 * sizeof(PPC_REG))
-+#define UM_SYSCALL_ARG4_OFFSET (PT_R6 * sizeof(PPC_REG))
-+#define UM_SYSCALL_ARG5_OFFSET (PT_R7 * sizeof(PPC_REG))
-+#define UM_SYSCALL_ARG6_OFFSET (PT_R8 * sizeof(PPC_REG))
-+#define UM_SP_OFFSET (PT_R1 * sizeof(PPC_REG))
-+#define UM_IP_OFFSET (PT_NIP * sizeof(PPC_REG))
-+#define UM_ELF_ZERO_OFFSET (PT_R3 * sizeof(PPC_REG))
-+
-+#define UM_SET_SYSCALL_RETURN(_regs, result)          \
-+do {                                                    \
-+        if (result < 0) {                             \
-+              (_regs)->regs[PT_CCR] |= 0x10000000;    \
-+              UM_SYSCALL_RET((_regs)) = -result;      \
-+        } else {                                      \
-+              UM_SYSCALL_RET((_regs)) = result;       \
-+        }                                               \
-+} while(0)
-+
-+extern void shove_aux_table(unsigned long sp);
-+#define UM_FIX_EXEC_STACK(sp) shove_aux_table(sp);
-+
-+/* These aren't actually defined.  The undefs are just to make sure
-+ * everyone's clear on the concept.
-+ */
-+#undef UML_HAVE_GETREGS
-+#undef UML_HAVE_GETFPREGS
-+#undef UML_HAVE_SETREGS
-+#undef UML_HAVE_SETFPREGS
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-ppc/sigcontext.h um/arch/um/include/sysdep-ppc/sigcontext.h
---- orig/arch/um/include/sysdep-ppc/sigcontext.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-ppc/sigcontext.h 2002-11-23 22:02:19.000000000 -0500
-@@ -0,0 +1,62 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SYS_SIGCONTEXT_PPC_H
-+#define __SYS_SIGCONTEXT_PPC_H
-+
-+#define DSISR_WRITE 0x02000000
-+
-+#define SC_FAULT_ADDR(sc) ({ \
-+              struct sigcontext *_sc = (sc); \
-+              long retval = -1; \
-+              switch (_sc->regs->trap) { \
-+              case 0x300: \
-+                      /* data exception */ \
-+                      retval = _sc->regs->dar; \
-+                      break; \
-+              case 0x400: \
-+                      /* instruction exception */ \
-+                      retval = _sc->regs->nip; \
-+                      break; \
-+              default: \
-+                      panic("SC_FAULT_ADDR: unhandled trap type\n"); \
-+              } \
-+              retval; \
-+      })
-+
-+#define SC_FAULT_WRITE(sc) ({ \
-+              struct sigcontext *_sc = (sc); \
-+              long retval = -1; \
-+              switch (_sc->regs->trap) { \
-+              case 0x300: \
-+                      /* data exception */ \
-+                      retval = !!(_sc->regs->dsisr & DSISR_WRITE); \
-+                      break; \
-+              case 0x400: \
-+                      /* instruction exception: not a write */ \
-+                      retval = 0; \
-+                      break; \
-+              default: \
-+                      panic("SC_FAULT_ADDR: unhandled trap type\n"); \
-+              } \
-+              retval; \
-+      })
-+
-+#define SC_IP(sc) ((sc)->regs->nip)
-+#define SC_SP(sc) ((sc)->regs->gpr[1])
-+#define SEGV_IS_FIXABLE(sc) (1)
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-ppc/syscalls.h um/arch/um/include/sysdep-ppc/syscalls.h
---- orig/arch/um/include/sysdep-ppc/syscalls.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-ppc/syscalls.h   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,50 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+typedef long syscall_handler_t(unsigned long arg1, unsigned long arg2,
-+                             unsigned long arg3, unsigned long arg4,
-+                             unsigned long arg5, unsigned long arg6);
-+
-+#define EXECUTE_SYSCALL(syscall, regs) \
-+        (*sys_call_table[syscall])(UM_SYSCALL_ARG1(&regs), \
-+                                 UM_SYSCALL_ARG2(&regs), \
-+                                 UM_SYSCALL_ARG3(&regs), \
-+                                 UM_SYSCALL_ARG4(&regs), \
-+                                 UM_SYSCALL_ARG5(&regs), \
-+                                 UM_SYSCALL_ARG6(&regs))
-+
-+extern syscall_handler_t sys_mincore;
-+extern syscall_handler_t sys_madvise;
-+
-+/* old_mmap needs the correct prototype since syscall_kern.c includes
-+ * this file.
-+ */
-+int old_mmap(unsigned long addr, unsigned long len,
-+           unsigned long prot, unsigned long flags,
-+           unsigned long fd, unsigned long offset);
-+
-+#define ARCH_SYSCALLS \
-+      [ __NR_modify_ldt ] = sys_ni_syscall, \
-+      [ __NR_pciconfig_read ] = sys_ni_syscall, \
-+      [ __NR_pciconfig_write ] = sys_ni_syscall, \
-+      [ __NR_pciconfig_iobase ] = sys_ni_syscall, \
-+      [ __NR_pivot_root ] = sys_ni_syscall, \
-+      [ __NR_multiplexer ] = sys_ni_syscall, \
-+      [ __NR_mmap ] = old_mmap, \
-+      [ __NR_madvise ] = sys_madvise, \
-+      [ __NR_mincore ] = sys_mincore, 
-+
-+#define LAST_ARCH_SYSCALL __NR_mincore
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/sysrq.h um/arch/um/include/sysrq.h
---- orig/arch/um/include/sysrq.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysrq.h 2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_SYSRQ_H
-+#define __UM_SYSRQ_H
-+
-+extern void show_trace(unsigned long *stack);
-+
-+#endif
-diff -Naur -X ../exclude-files orig/arch/um/include/tempfile.h um/arch/um/include/tempfile.h
---- orig/arch/um/include/tempfile.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/tempfile.h      2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,21 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __TEMPFILE_H__
-+#define __TEMPFILE_H__
-+
-+extern int make_tempfile(const char *template, char **tempname, int do_unlink);
-+
-+#endif
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/time_user.h um/arch/um/include/time_user.h
---- orig/arch/um/include/time_user.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/time_user.h     2003-01-08 12:55:47.000000000 -0500
-@@ -0,0 +1,17 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __TIME_USER_H__
-+#define __TIME_USER_H__
-+
-+extern void timer(void);
-+extern void switch_timers(int to_real);
-+extern void set_interval(int timer_type);
-+extern void idle_sleep(int secs);
-+extern void enable_timer(void);
-+extern unsigned long time_lock(void);
-+extern void time_unlock(unsigned long);
-+
-+#endif
-diff -Naur -X ../exclude-files orig/arch/um/include/tlb.h um/arch/um/include/tlb.h
---- orig/arch/um/include/tlb.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/tlb.h   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,23 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __TLB_H__
-+#define __TLB_H__
-+
-+extern void mprotect_kernel_vm(int w);
-+extern void force_flush_all(void);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/ubd_user.h um/arch/um/include/ubd_user.h
---- orig/arch/um/include/ubd_user.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/ubd_user.h      2003-03-06 18:09:14.000000000 -0500
-@@ -0,0 +1,77 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Copyright (C) 2001 RidgeRun, Inc (glonnon@ridgerun.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_UBD_USER_H
-+#define __UM_UBD_USER_H
-+
-+#include "os.h"
-+
-+enum ubd_req { UBD_READ, UBD_WRITE };
-+
-+struct io_thread_req {
-+      enum ubd_req op;
-+      int fds[2];
-+      unsigned long offsets[2];
-+      unsigned long long offset;
-+      unsigned long length;
-+      char *buffer;
-+      int sectorsize;
-+      unsigned long sector_mask;
-+      unsigned long cow_offset;
-+      unsigned long bitmap_words[2];
-+      int error;
-+};
-+
-+extern int open_ubd_file(char *file, struct openflags *openflags, 
-+                       char **backing_file_out, int *bitmap_offset_out, 
-+                       unsigned long *bitmap_len_out, int *data_offset_out,
-+                       int *create_cow_out);
-+extern int create_cow_file(char *cow_file, char *backing_file, 
-+                         struct openflags flags, int sectorsize, 
-+                         int *bitmap_offset_out, 
-+                         unsigned long *bitmap_len_out,
-+                         int *data_offset_out);
-+extern int read_cow_bitmap(int fd, void *buf, int offset, int len);
-+extern int read_ubd_fs(int fd, void *buffer, int len);
-+extern int write_ubd_fs(int fd, char *buffer, int len);
-+extern int start_io_thread(unsigned long sp, int *fds_out);
-+extern void do_io(struct io_thread_req *req);
-+
-+static inline int ubd_test_bit(__u64 bit, unsigned char *data)
-+{
-+      __u64 n;
-+      int bits, off;
-+
-+      bits = sizeof(data[0]) * 8;
-+      n = bit / bits;
-+      off = bit % bits;
-+      return((data[n] & (1 << off)) != 0);
-+}
-+
-+static inline void ubd_set_bit(__u64 bit, unsigned char *data)
-+{
-+      __u64 n;
-+      int bits, off;
-+
-+      bits = sizeof(data[0]) * 8;
-+      n = bit / bits;
-+      off = bit % bits;
-+      data[n] |= (1 << off);
-+}
-+
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/umid.h um/arch/um/include/umid.h
---- orig/arch/um/include/umid.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/umid.h  2002-12-16 20:52:19.000000000 -0500
-@@ -0,0 +1,22 @@
-+/*
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UMID_H__
-+#define __UMID_H__
-+
-+extern int umid_file_name(char *name, char *buf, int len);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/uml_uaccess.h um/arch/um/include/uml_uaccess.h
---- orig/arch/um/include/uml_uaccess.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/uml_uaccess.h   2002-12-19 13:15:22.000000000 -0500
-@@ -0,0 +1,28 @@
-+/*
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UML_UACCESS_H__
-+#define __UML_UACCESS_H__
-+
-+extern int __do_copy_to_user(void *to, const void *from, int n,
-+                                void **fault_addr, void **fault_catcher);
-+extern unsigned long __do_user_copy(void *to, const void *from, int n,
-+                                  void **fault_addr, void **fault_catcher,
-+                                  void (*op)(void *to, const void *from,
-+                                             int n), int *faulted_out);
-+void __do_copy(void *to, const void *from, int n);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/um_mmu.h um/arch/um/include/um_mmu.h
---- orig/arch/um/include/um_mmu.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/um_mmu.h        2002-11-09 12:51:43.000000000 -0500
-@@ -0,0 +1,40 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __ARCH_UM_MMU_H
-+#define __ARCH_UM_MMU_H
-+
-+#include "linux/config.h"
-+#include "choose-mode.h"
-+
-+#ifdef CONFIG_MODE_TT
-+#include "../kernel/tt/include/mmu.h"
-+#endif
-+
-+#ifdef CONFIG_MODE_SKAS
-+#include "../kernel/skas/include/mmu.h"
-+#endif
-+
-+typedef union {
-+#ifdef CONFIG_MODE_TT
-+      struct mmu_context_tt tt;
-+#endif
-+#ifdef CONFIG_MODE_SKAS
-+      struct mmu_context_skas skas;
-+#endif
-+} mm_context_t;
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/umn.h um/arch/um/include/umn.h
---- orig/arch/um/include/umn.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/umn.h   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,27 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UMN_H
-+#define __UMN_H
-+
-+extern int open_umn_tty(int *slave_out, int *slipno_out);
-+extern void close_umn_tty(int master, int slave);
-+extern int umn_send_packet(int fd, void *data, int len);
-+extern int set_umn_addr(int fd, char *addr, char *ptp_addr);
-+extern void slip_unesc(unsigned char s);
-+extern void umn_read(int fd);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/um_uaccess.h um/arch/um/include/um_uaccess.h
---- orig/arch/um/include/um_uaccess.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/um_uaccess.h    2002-11-23 22:03:02.000000000 -0500
-@@ -0,0 +1,73 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __ARCH_UM_UACCESS_H
-+#define __ARCH_UM_UACCESS_H
-+
-+#include "linux/config.h"
-+#include "choose-mode.h"
-+
-+#ifdef CONFIG_MODE_TT
-+#include "../kernel/tt/include/uaccess.h"
-+#endif
-+
-+#ifdef CONFIG_MODE_SKAS
-+#include "../kernel/skas/include/uaccess.h"
-+#endif
-+
-+#define access_ok(type, addr, size) \
-+      CHOOSE_MODE_PROC(access_ok_tt, access_ok_skas, type, addr, size)
-+
-+static inline int verify_area(int type, const void * addr, unsigned long size)
-+{
-+      return(CHOOSE_MODE_PROC(verify_area_tt, verify_area_skas, type, addr,
-+                              size));
-+}
-+
-+static inline int copy_from_user(void *to, const void *from, int n)
-+{
-+      return(CHOOSE_MODE_PROC(copy_from_user_tt, copy_from_user_skas, to,
-+                              from, n));
-+}
-+
-+static inline int copy_to_user(void *to, const void *from, int n)
-+{
-+      return(CHOOSE_MODE_PROC(copy_to_user_tt, copy_to_user_skas, to, 
-+                              from, n));
-+}
-+
-+static inline int strncpy_from_user(char *dst, const char *src, int count)
-+{
-+      return(CHOOSE_MODE_PROC(strncpy_from_user_tt, strncpy_from_user_skas,
-+                              dst, src, count));
-+}
-+
-+static inline int __clear_user(void *mem, int len)
-+{
-+      return(CHOOSE_MODE_PROC(__clear_user_tt, __clear_user_skas, mem, len));
-+}
-+
-+static inline int clear_user(void *mem, int len)
-+{
-+      return(CHOOSE_MODE_PROC(clear_user_tt, clear_user_skas, mem, len));
-+}
-+
-+static inline int strnlen_user(const void *str, int len)
-+{
-+      return(CHOOSE_MODE_PROC(strnlen_user_tt, strnlen_user_skas, str, len));
-+}
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/user.h um/arch/um/include/user.h
---- orig/arch/um/include/user.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/user.h  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,29 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __USER_H__
-+#define __USER_H__
-+
-+extern void panic(const char *fmt, ...);
-+extern int printk(const char *fmt, ...);
-+extern void schedule(void);
-+extern void *um_kmalloc(int size);
-+extern void *um_kmalloc_atomic(int size);
-+extern void kfree(void *ptr);
-+extern int in_aton(char *str);
-+extern int open_gdb_chan(void);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/include/user_util.h um/arch/um/include/user_util.h
---- orig/arch/um/include/user_util.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/user_util.h     2003-05-15 13:53:40.000000000 -0400
-@@ -0,0 +1,104 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __USER_UTIL_H__
-+#define __USER_UTIL_H__
-+
-+#include "sysdep/ptrace.h"
-+
-+extern int mode_tt;
-+
-+extern int grantpt(int __fd);
-+extern int unlockpt(int __fd);
-+extern char *ptsname(int __fd);
-+
-+enum { OP_NONE, OP_EXEC, OP_FORK, OP_TRACE_ON, OP_REBOOT, OP_HALT, OP_CB };
-+
-+struct cpu_task {
-+      int pid;
-+      void *task;
-+};
-+
-+extern struct cpu_task cpu_tasks[];
-+
-+struct signal_info {
-+      void (*handler)(int, union uml_pt_regs *);
-+      int is_irq;
-+};
-+
-+extern struct signal_info sig_info[];
-+
-+extern unsigned long low_physmem;
-+extern unsigned long high_physmem;
-+extern unsigned long uml_physmem;
-+extern unsigned long uml_reserved;
-+extern unsigned long end_vm;
-+extern unsigned long start_vm;
-+extern unsigned long highmem;
-+
-+extern char host_info[];
-+
-+extern char saved_command_line[];
-+extern char command_line[];
-+
-+extern char *tempdir;
-+
-+extern unsigned long _stext, _etext, _sdata, _edata, __bss_start, _end;
-+extern unsigned long _unprotected_end;
-+extern unsigned long brk_start;
-+
-+extern int pty_output_sigio;
-+extern int pty_close_sigio;
-+
-+extern void stop(void);
-+extern void stack_protections(unsigned long address);
-+extern void task_protections(unsigned long address);
-+extern int wait_for_stop(int pid, int sig, int cont_type, void *relay);
-+extern void *add_signal_handler(int sig, void (*handler)(int));
-+extern int start_fork_tramp(void *arg, unsigned long temp_stack, 
-+                          int clone_flags, int (*tramp)(void *));
-+extern int linux_main(int argc, char **argv);
-+extern void set_cmdline(char *cmd);
-+extern void input_cb(void (*proc)(void *), void *arg, int arg_len);
-+extern int get_pty(void);
-+extern void *um_kmalloc(int size);
-+extern int raw(int fd, int complain);
-+extern int switcheroo(int fd, int prot, void *from, void *to, int size);
-+extern void setup_machinename(char *machine_out);
-+extern void setup_hostinfo(void);
-+extern void add_arg(char *cmd_line, char *arg);
-+extern void init_new_thread_stack(void *sig_stack, void (*usr1_handler)(int));
-+extern void init_new_thread_signals(int altstack);
-+extern void do_exec(int old_pid, int new_pid);
-+extern void tracer_panic(char *msg, ...);
-+extern char *get_umid(int only_if_set);
-+extern void do_longjmp(void *p, int val);
-+extern void suspend_new_thread(int fd);
-+extern int detach(int pid, int sig);
-+extern int attach(int pid);
-+extern void kill_child_dead(int pid);
-+extern int cont(int pid);
-+extern void check_ptrace(void);
-+extern void check_sigio(void);
-+extern int run_kernel_thread(int (*fn)(void *), void *arg, void **jmp_ptr);
-+extern void write_sigio_workaround(void);
-+extern void arch_check_bugs(void);
-+extern int arch_handle_signal(int sig, union uml_pt_regs *regs);
-+extern int arch_fixup(unsigned long address, void *sc_ptr);
-+extern int can_do_skas(void);
-+extern void arch_init_thread(void);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/checksum.c um/arch/um/kernel/checksum.c
---- orig/arch/um/kernel/checksum.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/checksum.c       2002-10-31 22:39:58.000000000 -0500
-@@ -0,0 +1,42 @@
-+#include "asm/uaccess.h"
-+#include "linux/errno.h"
-+
-+extern unsigned int arch_csum_partial(const char *buff, int len, int sum);
-+
-+extern unsigned int csum_partial(char *buff, int len, int sum)
-+{
-+      return(arch_csum_partial(buff, len, sum));
-+}
-+
-+unsigned int csum_partial_copy_to(const char *src, char *dst, int len, 
-+                                int sum, int *err_ptr)
-+{
-+      if(copy_to_user(dst, src, len)){
-+              *err_ptr = -EFAULT;
-+              return(-1);
-+      }
-+
-+      return(arch_csum_partial(src, len, sum));
-+}
-+
-+unsigned int csum_partial_copy_from(const char *src, char *dst, int len, 
-+                                  int sum, int *err_ptr)
-+{
-+      if(copy_from_user(dst, src, len)){
-+              *err_ptr = -EFAULT;
-+              return(-1);
-+      }
-+
-+      return(arch_csum_partial(dst, len, sum));
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/config.c.in um/arch/um/kernel/config.c.in
---- orig/arch/um/kernel/config.c.in    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/config.c.in      2003-04-10 11:17:55.000000000 -0400
-@@ -0,0 +1,32 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include "init.h"
-+
-+static __initdata char *config = "CONFIG";
-+
-+static int __init print_config(char *line, int *add)
-+{
-+      printf("%s", config);
-+      exit(0);
-+}
-+
-+__uml_setup("--showconfig", print_config,
-+"--showconfig\n"
-+"    Prints the config file that this UML binary was generated from.\n\n"
-+);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/exec_kern.c um/arch/um/kernel/exec_kern.c
---- orig/arch/um/kernel/exec_kern.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/exec_kern.c      2003-04-16 16:35:05.000000000 -0400
-@@ -0,0 +1,86 @@
-+/* 
-+ * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/slab.h"
-+#include "linux/smp_lock.h"
-+#include "asm/ptrace.h"
-+#include "asm/pgtable.h"
-+#include "asm/pgalloc.h"
-+#include "asm/uaccess.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "mem_user.h"
-+#include "kern.h"
-+#include "irq_user.h"
-+#include "tlb.h"
-+#include "2_5compat.h"
-+#include "os.h"
-+#include "time_user.h"
-+#include "choose-mode.h"
-+#include "mode_kern.h"
-+
-+void flush_thread(void)
-+{
-+      CHOOSE_MODE(flush_thread_tt(), flush_thread_skas());
-+}
-+
-+void start_thread(struct pt_regs *regs, unsigned long eip, unsigned long esp)
-+{
-+      CHOOSE_MODE_PROC(start_thread_tt, start_thread_skas, regs, eip, esp);
-+}
-+
-+extern void log_exec(char **argv, void *tty);
-+
-+static int execve1(char *file, char **argv, char **env)
-+{
-+        int error;
-+
-+#ifdef CONFIG_TTY_LOG
-+      log_exec(argv, current->tty);
-+#endif
-+        error = do_execve(file, argv, env, &current->thread.regs);
-+        if (error == 0){
-+                current->ptrace &= ~PT_DTRACE;
-+                set_cmdline(current_cmd());
-+        }
-+        return(error);
-+}
-+
-+int um_execve(char *file, char **argv, char **env)
-+{
-+      int err;
-+
-+      err = execve1(file, argv, env);
-+      if(!err) 
-+              do_longjmp(current->thread.exec_buf, 1);
-+      return(err);
-+}
-+
-+int sys_execve(char *file, char **argv, char **env)
-+{
-+      int error;
-+      char *filename;
-+
-+      lock_kernel();
-+      filename = getname((char *) file);
-+      error = PTR_ERR(filename);
-+      if (IS_ERR(filename)) goto out;
-+      error = execve1(filename, argv, env);
-+      putname(filename);
-+ out:
-+      unlock_kernel();
-+      return(error);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/exitcode.c um/arch/um/kernel/exitcode.c
---- orig/arch/um/kernel/exitcode.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/exitcode.c       2002-11-07 18:22:04.000000000 -0500
-@@ -0,0 +1,73 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/init.h"
-+#include "linux/ctype.h"
-+#include "linux/proc_fs.h"
-+#include "asm/uaccess.h"
-+
-+/* If read and write race, the read will still atomically read a valid
-+ * value.
-+ */
-+int uml_exitcode = 0;
-+
-+static int read_proc_exitcode(char *page, char **start, off_t off,
-+                            int count, int *eof, void *data)
-+{
-+      int len;
-+
-+      len = sprintf(page, "%d\n", uml_exitcode);
-+      len -= off;
-+      if(len <= off+count) *eof = 1;
-+      *start = page + off;
-+      if(len > count) len = count;
-+      if(len < 0) len = 0;
-+      return(len);
-+}
-+
-+static int write_proc_exitcode(struct file *file, const char *buffer,
-+                             unsigned long count, void *data)
-+{
-+      char *end, buf[sizeof("nnnnn\0")];
-+      int tmp;
-+
-+      if(copy_from_user(buf, buffer, count))
-+              return(-EFAULT);
-+      tmp = simple_strtol(buf, &end, 0);
-+      if((*end != '\0') && !isspace(*end))
-+              return(-EINVAL);
-+      uml_exitcode = tmp;
-+      return(count);
-+}
-+
-+static int make_proc_exitcode(void)
-+{
-+      struct proc_dir_entry *ent;
-+
-+      ent = create_proc_entry("exitcode", 0600, &proc_root);
-+      if(ent == NULL){
-+              printk("make_proc_exitcode : Failed to register "
-+                     "/proc/exitcode\n");
-+              return(0);
-+      }
-+
-+      ent->read_proc = read_proc_exitcode;
-+      ent->write_proc = write_proc_exitcode;
-+      
-+      return(0);
-+}
-+
-+__initcall(make_proc_exitcode);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/frame.c um/arch/um/kernel/frame.c
---- orig/arch/um/kernel/frame.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/frame.c  2002-12-11 11:12:41.000000000 -0500
-@@ -0,0 +1,342 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <string.h>
-+#include <signal.h>
-+#include <wait.h>
-+#include <sched.h>
-+#include <errno.h>
-+#include <sys/ptrace.h>
-+#include <sys/syscall.h>
-+#include <sys/mman.h>
-+#include <asm/page.h>
-+#include <asm/ptrace.h>
-+#include <asm/sigcontext.h>
-+#include "sysdep/ptrace.h"
-+#include "sysdep/sigcontext.h"
-+#include "frame_user.h"
-+#include "kern_util.h"
-+#include "ptrace_user.h"
-+#include "os.h"
-+
-+static int capture_stack(int (*child)(void *arg), void *arg, void *sp,
-+                       unsigned long top, void **data_out)
-+{
-+      unsigned long regs[FRAME_SIZE];
-+      int pid, status, n, len;
-+
-+      /* Start the child as a thread */
-+      pid = clone(child, sp, CLONE_VM | SIGCHLD, arg);
-+      if(pid < 0){
-+              printf("capture_stack : clone failed - errno = %d\n", errno);
-+              exit(1);
-+      }
-+
-+      /* Wait for it to stop itself and continue it with a SIGUSR1 to force 
-+       * it into the signal handler.
-+       */
-+      n = waitpid(pid, &status, WUNTRACED);
-+      if(n < 0){
-+              printf("capture_stack : waitpid failed - errno = %d\n", errno);
-+              exit(1);
-+      }
-+      if(!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGSTOP)){
-+              fprintf(stderr, "capture_stack : Expected SIGSTOP, "
-+                      "got status = 0x%x\n", status);
-+              exit(1);
-+      }
-+      if(ptrace(PTRACE_CONT, pid, 0, SIGUSR1) < 0){
-+              printf("capture_stack : PTRACE_CONT failed - errno = %d\n", 
-+                     errno);
-+              exit(1);
-+      }
-+
-+      /* Wait for it to stop itself again and grab its registers again.  
-+       * At this point, the handler has stuffed the addresses of
-+       * sig, sc, and SA_RESTORER in raw.
-+       */
-+      n = waitpid(pid, &status, WUNTRACED);
-+      if(n < 0){
-+              printf("capture_stack : waitpid failed - errno = %d\n", errno);
-+              exit(1);
-+      }
-+      if(!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGSTOP)){
-+              fprintf(stderr, "capture_stack : Expected SIGSTOP, "
-+                      "got status = 0x%x\n", status);
-+              exit(1);
-+      }
-+      if(ptrace(PTRACE_GETREGS, pid, 0, regs) < 0){
-+              printf("capture_stack : PTRACE_GETREGS failed - errno = %d\n", 
-+                     errno);
-+              exit(1);
-+      }
-+
-+      /* It has outlived its usefulness, so continue it so it can exit */
-+      if(ptrace(PTRACE_CONT, pid, 0, 0) < 0){
-+              printf("capture_stack : PTRACE_CONT failed - errno = %d\n", 
-+                     errno);
-+              exit(1);
-+      }
-+      if(waitpid(pid, &status, 0) < 0){
-+              printf("capture_stack : waitpid failed - errno = %d\n", errno);
-+              exit(1);
-+      }
-+      if(!WIFSIGNALED(status) || (WTERMSIG(status) != 9)){
-+              printf("capture_stack : Expected exit signal 9, "
-+                     "got status = 0x%x\n", status);
-+              exit(1);
-+      }
-+
-+      /* The frame that we want is the top of the signal stack */
-+
-+      len = top - PT_SP(regs);
-+      *data_out = malloc(len);
-+      if(*data_out == NULL){
-+              printf("capture_stack : malloc failed - errno = %d\n", errno);
-+              exit(1);
-+      }
-+      memcpy(*data_out, (void *) PT_SP(regs), len);
-+
-+      return(len);
-+}
-+
-+struct common_raw {
-+      void *stack;
-+      int size;
-+      unsigned long sig;
-+      unsigned long sr;
-+      unsigned long sp;       
-+      struct arch_frame_data_raw arch;
-+};
-+
-+#define SA_RESTORER (0x04000000)
-+
-+typedef unsigned long old_sigset_t;
-+
-+struct old_sigaction {
-+      __sighandler_t handler;
-+      old_sigset_t sa_mask;
-+      unsigned long sa_flags;
-+      void (*sa_restorer)(void);
-+};
-+
-+static void child_common(struct common_raw *common, sighandler_t handler,
-+                       int restorer, int flags)
-+{
-+      stack_t ss = ((stack_t) { .ss_sp        = common->stack,
-+                                .ss_flags     = 0,
-+                                .ss_size      = common->size });
-+      int err;
-+
-+      if(ptrace(PTRACE_TRACEME, 0, 0, 0) < 0){
-+              printf("PTRACE_TRACEME failed, errno = %d\n", errno);
-+      }
-+      if(sigaltstack(&ss, NULL) < 0){
-+              printf("sigaltstack failed - errno = %d\n", errno);
-+              kill(getpid(), SIGKILL);
-+      }
-+
-+      if(restorer){
-+              struct sigaction sa;
-+
-+              sa.sa_handler = handler;
-+              sigemptyset(&sa.sa_mask);
-+              sa.sa_flags = SA_ONSTACK | flags;
-+              err = sigaction(SIGUSR1, &sa, NULL);
-+      }
-+      else {
-+              struct old_sigaction sa;
-+
-+              sa.handler = handler;
-+              sa.sa_mask = 0;
-+              sa.sa_flags = (SA_ONSTACK | flags) & ~SA_RESTORER;
-+              err = syscall(__NR_sigaction, SIGUSR1, &sa, NULL);
-+      }
-+      
-+      if(err < 0){
-+              printf("sigaction failed - errno = %d\n", errno);
-+              kill(getpid(), SIGKILL);
-+      }
-+
-+      os_stop_process(os_getpid());
-+}
-+
-+/* Changed only during early boot */
-+struct sc_frame signal_frame_sc;
-+
-+struct sc_frame signal_frame_sc_sr;
-+
-+struct sc_frame_raw {
-+      struct common_raw common;
-+      unsigned long sc;
-+      int restorer;
-+};
-+
-+/* Changed only during early boot */
-+static struct sc_frame_raw *raw_sc = NULL;
-+
-+static void sc_handler(int sig, struct sigcontext sc)
-+{
-+      raw_sc->common.sig = (unsigned long) &sig;
-+      raw_sc->common.sr = frame_restorer();
-+      raw_sc->common.sp = frame_sp();
-+      raw_sc->sc = (unsigned long) &sc;
-+      setup_arch_frame_raw(&raw_sc->common.arch, &sc + 1, raw_sc->common.sr);
-+
-+      os_stop_process(os_getpid());
-+      kill(getpid(), SIGKILL);
-+}
-+
-+static int sc_child(void *arg)
-+{
-+      raw_sc = arg;
-+      child_common(&raw_sc->common, (sighandler_t) sc_handler, 
-+                   raw_sc->restorer, 0);
-+      return(-1);
-+}
-+
-+/* Changed only during early boot */
-+struct si_frame signal_frame_si;
-+
-+struct si_frame_raw {
-+      struct common_raw common;
-+      unsigned long sip;
-+      unsigned long si;
-+      unsigned long ucp;
-+      unsigned long uc;
-+};
-+
-+/* Changed only during early boot */
-+static struct si_frame_raw *raw_si = NULL;
-+
-+static void si_handler(int sig, siginfo_t *si, struct ucontext *ucontext)
-+{
-+      raw_si->common.sig = (unsigned long) &sig;
-+      raw_si->common.sr = frame_restorer();
-+      raw_si->common.sp = frame_sp();
-+      raw_si->sip = (unsigned long) &si;
-+      raw_si->si = (unsigned long) si;
-+      raw_si->ucp = (unsigned long) &ucontext;
-+      raw_si->uc = (unsigned long) ucontext;
-+      setup_arch_frame_raw(&raw_si->common.arch, 
-+                           ucontext->uc_mcontext.fpregs, raw_si->common.sr);
-+      
-+      os_stop_process(os_getpid());
-+      kill(getpid(), SIGKILL);
-+}
-+
-+static int si_child(void *arg)
-+{
-+      raw_si = arg;
-+      child_common(&raw_si->common, (sighandler_t) si_handler, 1, 
-+                   SA_SIGINFO);
-+      return(-1);
-+}
-+
-+static int relative_sr(unsigned long sr, int sr_index, void *stack, 
-+                     void *framep)
-+{
-+      unsigned long *srp = (unsigned long *) sr;
-+      unsigned long frame = (unsigned long) framep;
-+
-+      if((*srp & PAGE_MASK) == (unsigned long) stack){
-+              *srp -= sr;
-+              *((unsigned long *) (frame + sr_index)) = *srp;
-+              return(1);
-+      }
-+      else return(0);
-+}
-+
-+static unsigned long capture_stack_common(int (*proc)(void *), void *arg, 
-+                                        struct common_raw *common_in, 
-+                                        void *top, void *sigstack, 
-+                                        int stack_len, 
-+                                        struct frame_common *common_out)
-+{
-+      unsigned long sig_top = (unsigned long) sigstack + stack_len, base;
-+
-+      common_in->stack = (void *) sigstack;
-+      common_in->size = stack_len;
-+      common_out->len = capture_stack(proc, arg, top, sig_top, 
-+                                      &common_out->data);
-+      base = sig_top - common_out->len;
-+      common_out->sig_index = common_in->sig - base;
-+      common_out->sp_index = common_in->sp - base;
-+      common_out->sr_index = common_in->sr - base;
-+      common_out->sr_relative = relative_sr(common_in->sr, 
-+                                            common_out->sr_index, sigstack, 
-+                                            common_out->data);
-+      return(base);
-+}
-+
-+void capture_signal_stack(void)
-+{
-+      struct sc_frame_raw raw_sc;
-+      struct si_frame_raw raw_si;
-+      void *stack, *sigstack;
-+      unsigned long top, sig_top, base;
-+
-+      stack = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC,
-+                   MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-+      sigstack = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC,
-+                      MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-+      if((stack == MAP_FAILED) || (sigstack == MAP_FAILED)){
-+              printf("capture_signal_stack : mmap failed - errno = %d\n", 
-+                     errno);
-+              exit(1);
-+      }
-+
-+      top = (unsigned long) stack + PAGE_SIZE - sizeof(void *);
-+      sig_top = (unsigned long) sigstack + PAGE_SIZE;
-+
-+      /* Get the sigcontext, no sigrestorer layout */
-+      raw_sc.restorer = 0;
-+      base = capture_stack_common(sc_child, &raw_sc, &raw_sc.common, 
-+                                  (void *) top, sigstack, PAGE_SIZE, 
-+                                  &signal_frame_sc.common);
-+
-+      signal_frame_sc.sc_index = raw_sc.sc - base;
-+      setup_arch_frame(&raw_sc.common.arch, &signal_frame_sc.common.arch);
-+
-+      /* Ditto for the sigcontext, sigrestorer layout */
-+      raw_sc.restorer = 1;
-+      base = capture_stack_common(sc_child, &raw_sc, &raw_sc.common, 
-+                                  (void *) top, sigstack, PAGE_SIZE, 
-+                                  &signal_frame_sc_sr.common);
-+      signal_frame_sc_sr.sc_index = raw_sc.sc - base;
-+      setup_arch_frame(&raw_sc.common.arch, &signal_frame_sc_sr.common.arch);
-+
-+      /* And the siginfo layout */
-+
-+      base = capture_stack_common(si_child, &raw_si, &raw_si.common, 
-+                                  (void *) top, sigstack, PAGE_SIZE, 
-+                                  &signal_frame_si.common);
-+      signal_frame_si.sip_index = raw_si.sip - base;
-+      signal_frame_si.si_index = raw_si.si - base;
-+      signal_frame_si.ucp_index = raw_si.ucp - base;
-+      signal_frame_si.uc_index = raw_si.uc - base;
-+      setup_arch_frame(&raw_si.common.arch, &signal_frame_si.common.arch);
-+
-+      if((munmap(stack, PAGE_SIZE) < 0) || 
-+         (munmap(sigstack, PAGE_SIZE) < 0)){
-+              printf("capture_signal_stack : munmap failed - errno = %d\n", 
-+                     errno);
-+              exit(1);
-+      }
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/frame_kern.c um/arch/um/kernel/frame_kern.c
---- orig/arch/um/kernel/frame_kern.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/frame_kern.c     2002-12-08 19:44:13.000000000 -0500
-@@ -0,0 +1,171 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "asm/ptrace.h"
-+#include "asm/uaccess.h"
-+#include "asm/signal.h"
-+#include "asm/uaccess.h"
-+#include "asm/ucontext.h"
-+#include "frame_kern.h"
-+#include "sigcontext.h"
-+#include "sysdep/ptrace.h"
-+#include "choose-mode.h"
-+#include "mode.h"
-+
-+int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from)
-+{
-+      if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t)))
-+              return -EFAULT;
-+      if (from->si_code < 0)
-+              return __copy_to_user(to, from, sizeof(siginfo_t));
-+      else {
-+              int err;
-+
-+              /* If you change siginfo_t structure, please be sure
-+                 this code is fixed accordingly.
-+                 It should never copy any pad contained in the structure
-+                 to avoid security leaks, but must copy the generic
-+                 3 ints plus the relevant union member.  */
-+              err = __put_user(from->si_signo, &to->si_signo);
-+              err |= __put_user(from->si_errno, &to->si_errno);
-+              err |= __put_user((short)from->si_code, &to->si_code);
-+              /* First 32bits of unions are always present.  */
-+              err |= __put_user(from->si_pid, &to->si_pid);
-+              switch (from->si_code >> 16) {
-+              case __SI_FAULT >> 16:
-+                      break;
-+              case __SI_CHLD >> 16:
-+                      err |= __put_user(from->si_utime, &to->si_utime);
-+                      err |= __put_user(from->si_stime, &to->si_stime);
-+                      err |= __put_user(from->si_status, &to->si_status);
-+              default:
-+                      err |= __put_user(from->si_uid, &to->si_uid);
-+                      break;
-+              }
-+              return err;
-+      }
-+}
-+
-+static int copy_restorer(void (*restorer)(void), unsigned long start, 
-+                       unsigned long sr_index, int sr_relative)
-+{
-+      unsigned long sr;
-+
-+      if(sr_relative){
-+              sr = (unsigned long) restorer;
-+              sr += start + sr_index;
-+              restorer = (void (*)(void)) sr;
-+      }
-+
-+      return(copy_to_user((void *) (start + sr_index), &restorer, 
-+                          sizeof(restorer)));
-+}
-+
-+static int copy_sc_to_user(void *to, void *fp, struct pt_regs *from, 
-+                         struct arch_frame_data *arch)
-+{
-+      return(CHOOSE_MODE(copy_sc_to_user_tt(to, fp, UPT_SC(&from->regs), 
-+                                            arch),
-+                         copy_sc_to_user_skas(to, fp, &from->regs,
-+                                              current->thread.cr2,
-+                                              current->thread.err)));
-+}
-+
-+static int copy_ucontext_to_user(struct ucontext *uc, void *fp, sigset_t *set,
-+                               unsigned long sp)
-+{
-+      int err = 0;
-+
-+      err |= put_user(current->sas_ss_sp, &uc->uc_stack.ss_sp);
-+      err |= put_user(sas_ss_flags(sp), &uc->uc_stack.ss_flags);
-+      err |= put_user(current->sas_ss_size, &uc->uc_stack.ss_size);
-+      err |= copy_sc_to_user(&uc->uc_mcontext, fp, &current->thread.regs,
-+                             &signal_frame_si.common.arch);
-+      err |= copy_to_user(&uc->uc_sigmask, set, sizeof(*set));
-+      return(err);
-+}
-+
-+int setup_signal_stack_si(unsigned long stack_top, int sig, 
-+                        unsigned long handler, void (*restorer)(void), 
-+                        struct pt_regs *regs, siginfo_t *info, 
-+                        sigset_t *mask)
-+{
-+      unsigned long start;
-+      void *sip, *ucp, *fp;
-+
-+      start = stack_top - signal_frame_si.common.len;
-+      sip = (void *) (start + signal_frame_si.si_index);
-+      ucp = (void *) (start + signal_frame_si.uc_index);
-+      fp = (void *) (((unsigned long) ucp) + sizeof(struct ucontext));
-+
-+      if(restorer == NULL)
-+              panic("setup_signal_stack_si - no restorer");
-+
-+      if(copy_to_user((void *) start, signal_frame_si.common.data,
-+                      signal_frame_si.common.len) ||
-+         copy_to_user((void *) (start + signal_frame_si.common.sig_index), 
-+                      &sig, sizeof(sig)) ||
-+         copy_siginfo_to_user(sip, info) ||
-+         copy_to_user((void *) (start + signal_frame_si.sip_index), &sip,
-+                      sizeof(sip)) ||
-+         copy_ucontext_to_user(ucp, fp, mask, PT_REGS_SP(regs)) ||
-+         copy_to_user((void *) (start + signal_frame_si.ucp_index), &ucp,
-+                      sizeof(ucp)) ||
-+         copy_restorer(restorer, start, signal_frame_si.common.sr_index,
-+                       signal_frame_si.common.sr_relative))
-+              return(1);
-+      
-+      PT_REGS_IP(regs) = handler;
-+      PT_REGS_SP(regs) = start + signal_frame_si.common.sp_index;
-+      return(0);
-+}
-+
-+int setup_signal_stack_sc(unsigned long stack_top, int sig, 
-+                        unsigned long handler, void (*restorer)(void), 
-+                        struct pt_regs *regs, sigset_t *mask)
-+{
-+      struct frame_common *frame = &signal_frame_sc_sr.common;
-+      void *user_sc;
-+      int sig_size = (_NSIG_WORDS - 1) * sizeof(unsigned long);
-+      unsigned long sigs, sr;
-+      unsigned long start = stack_top - frame->len - sig_size;
-+
-+      user_sc = (void *) (start + signal_frame_sc_sr.sc_index);
-+      if(restorer == NULL){
-+              frame = &signal_frame_sc.common;
-+              user_sc = (void *) (start + signal_frame_sc.sc_index);
-+              sr = (unsigned long) frame->data;
-+              sr += frame->sr_index;
-+              sr = *((unsigned long *) sr);
-+              restorer = ((void (*)(void)) sr);
-+      }
-+
-+      sigs = start + frame->len;
-+      if(copy_to_user((void *) start, frame->data, frame->len) ||
-+         copy_to_user((void *) (start + frame->sig_index), &sig, 
-+                      sizeof(sig)) ||
-+         copy_sc_to_user(user_sc, NULL, regs, 
-+                         &signal_frame_sc.common.arch) ||
-+         copy_to_user(sc_sigmask(user_sc), mask, sizeof(mask->sig[0])) ||
-+         copy_to_user((void *) sigs, &mask->sig[1], sig_size) ||
-+         copy_restorer(restorer, start, frame->sr_index, frame->sr_relative))
-+              return(1);
-+
-+      PT_REGS_IP(regs) = handler;
-+      PT_REGS_SP(regs) = start + frame->sp_index;
-+
-+      return(0);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/gmon_syms.c um/arch/um/kernel/gmon_syms.c
---- orig/arch/um/kernel/gmon_syms.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/gmon_syms.c      2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,20 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/module.h"
-+
-+extern void __bb_init_func(void *);
-+EXPORT_SYMBOL(__bb_init_func);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/gprof_syms.c um/arch/um/kernel/gprof_syms.c
---- orig/arch/um/kernel/gprof_syms.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/gprof_syms.c     2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,20 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/module.h"
-+
-+extern void mcount(void);
-+EXPORT_SYMBOL(mcount);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/helper.c um/arch/um/kernel/helper.c
---- orig/arch/um/kernel/helper.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/helper.c 2002-10-31 10:34:23.000000000 -0500
-@@ -0,0 +1,153 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <sched.h>
-+#include <sys/signal.h>
-+#include <sys/wait.h>
-+#include "user.h"
-+#include "kern_util.h"
-+#include "os.h"
-+
-+struct helper_data {
-+      void (*pre_exec)(void*);
-+      void *pre_data;
-+      char **argv;
-+      int fd;
-+};
-+
-+/* Debugging aid, changed only from gdb */
-+int helper_pause = 0;
-+
-+static void helper_hup(int sig)
-+{
-+}
-+
-+static int helper_child(void *arg)
-+{
-+      struct helper_data *data = arg;
-+      char **argv = data->argv;
-+
-+      if(helper_pause){
-+              signal(SIGHUP, helper_hup);
-+              pause();
-+      }
-+      if(data->pre_exec != NULL)
-+              (*data->pre_exec)(data->pre_data);
-+      execvp(argv[0], argv);
-+      printk("execvp of '%s' failed - errno = %d\n", argv[0], errno);
-+      write(data->fd, &errno, sizeof(errno));
-+      os_kill_process(os_getpid(), 0);
-+      return(0);
-+}
-+
-+/* XXX The alloc_stack here breaks if this is called in the tracing thread */
-+
-+int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv,
-+             unsigned long *stack_out)
-+{
-+      struct helper_data data;
-+      unsigned long stack, sp;
-+      int pid, fds[2], err, n;
-+
-+      if((stack_out != NULL) && (*stack_out != 0))
-+              stack = *stack_out;
-+      else stack = alloc_stack(0, um_in_interrupt());
-+      if(stack == 0) return(-ENOMEM);
-+
-+      err = os_pipe(fds, 1, 0);
-+      if(err){
-+              printk("run_helper : pipe failed, errno = %d\n", -err);
-+              return(err);
-+      }
-+      if(fcntl(fds[1], F_SETFD, 1) != 0){
-+              printk("run_helper : setting FD_CLOEXEC failed, errno = %d\n",
-+                     errno);
-+              return(-errno);
-+      }
-+
-+      sp = stack + page_size() - sizeof(void *);
-+      data.pre_exec = pre_exec;
-+      data.pre_data = pre_data;
-+      data.argv = argv;
-+      data.fd = fds[1];
-+      pid = clone(helper_child, (void *) sp, CLONE_VM | SIGCHLD, &data);
-+      if(pid < 0){
-+              printk("run_helper : clone failed, errno = %d\n", errno);
-+              return(-errno);
-+      }
-+      close(fds[1]);
-+      n = read(fds[0], &err, sizeof(err));
-+      if(n < 0){
-+              printk("run_helper : read on pipe failed, errno = %d\n", 
-+                     errno);
-+              return(-errno);
-+      }
-+      else if(n != 0){
-+              waitpid(pid, NULL, 0);
-+              pid = -err;
-+      }
-+
-+      if(stack_out == NULL) free_stack(stack, 0);
-+        else *stack_out = stack;
-+      return(pid);
-+}
-+
-+int run_helper_thread(int (*proc)(void *), void *arg, unsigned int flags, 
-+                    unsigned long *stack_out, int stack_order)
-+{
-+      unsigned long stack, sp;
-+      int pid, status;
-+
-+      stack = alloc_stack(stack_order, um_in_interrupt());
-+      if(stack == 0) return(-ENOMEM);
-+
-+      sp = stack + (page_size() << stack_order) - sizeof(void *);
-+      pid = clone(proc, (void *) sp, flags | SIGCHLD, arg);
-+      if(pid < 0){
-+              printk("run_helper_thread : clone failed, errno = %d\n", 
-+                     errno);
-+              return(-errno);
-+      }
-+      if(stack_out == NULL){
-+              pid = waitpid(pid, &status, 0);
-+              if(pid < 0)
-+                      printk("run_helper_thread - wait failed, errno = %d\n",
-+                             pid);
-+              if(!WIFEXITED(status) || (WEXITSTATUS(status) != 0))
-+                      printk("run_helper_thread - thread returned status "
-+                             "0x%x\n", status);
-+              free_stack(stack, stack_order);
-+      }
-+        else *stack_out = stack;
-+      return(pid);
-+}
-+
-+int helper_wait(int pid, int block)
-+{
-+      int ret;
-+
-+      ret = waitpid(pid, NULL, WNOHANG);
-+      if(ret < 0){
-+              printk("helper_wait : waitpid failed, errno = %d\n", errno);
-+              return(-errno);
-+      }
-+      return(ret);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/initrd_kern.c um/arch/um/kernel/initrd_kern.c
---- orig/arch/um/kernel/initrd_kern.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/initrd_kern.c    2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,59 @@
-+/*
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/init.h"
-+#include "linux/bootmem.h"
-+#include "linux/blk.h"
-+#include "asm/types.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "initrd.h"
-+#include "init.h"
-+#include "os.h"
-+
-+/* Changed by uml_initrd_setup, which is a setup */
-+static char *initrd __initdata = NULL;
-+
-+static int __init read_initrd(void)
-+{
-+      void *area;
-+      long long size;
-+      int err;
-+
-+      if(initrd == NULL) return 0;
-+      err = os_file_size(initrd, &size);
-+      if(err) return 0;
-+      area = alloc_bootmem(size);
-+      if(area == NULL) return 0;
-+      if(load_initrd(initrd, area, size) == -1) return 0;
-+      initrd_start = (unsigned long) area;
-+      initrd_end = initrd_start + size;
-+      return 0;
-+}
-+
-+__uml_postsetup(read_initrd);
-+
-+static int __init uml_initrd_setup(char *line, int *add)
-+{
-+      initrd = line;
-+      return 0;
-+}
-+
-+__uml_setup("initrd=", uml_initrd_setup, 
-+"initrd=<initrd image>\n"
-+"    This is used to boot UML from an initrd image.  The argument is the\n"
-+"    name of the file containing the image.\n\n"
-+);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/initrd_user.c um/arch/um/kernel/initrd_user.c
---- orig/arch/um/kernel/initrd_user.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/initrd_user.c    2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,43 @@
-+/*
-+ * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <unistd.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+#include <errno.h>
-+
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "initrd.h"
-+#include "os.h"
-+
-+int load_initrd(char *filename, void *buf, int size)
-+{
-+      int fd, n;
-+
-+      if((fd = os_open_file(filename, of_read(OPENFLAGS()), 0)) < 0){
-+              printk("Opening '%s' failed - errno = %d\n", filename, errno);
-+              return(-1);
-+      }
-+      if((n = read(fd, buf, size)) != size){
-+              printk("Read of %d bytes from '%s' returned %d, errno = %d\n",
-+                     size, filename, n, errno);
-+              return(-1);
-+      }
-+      return(0);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/init_task.c um/arch/um/kernel/init_task.c
---- orig/arch/um/kernel/init_task.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/init_task.c      2002-12-28 19:58:44.000000000 -0500
-@@ -0,0 +1,61 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/config.h"
-+#include "linux/mm.h"
-+#include "linux/sched.h"
-+#include "linux/version.h"
-+#include "asm/uaccess.h"
-+#include "asm/pgtable.h"
-+#include "user_util.h"
-+#include "mem_user.h"
-+
-+static struct fs_struct init_fs = INIT_FS;
-+static struct files_struct init_files = INIT_FILES;
-+static struct signal_struct init_signals = INIT_SIGNALS;
-+struct mm_struct init_mm = INIT_MM(init_mm);
-+
-+/*
-+ * Initial task structure.
-+ *
-+ * We need to make sure that this is 16384-byte aligned due to the
-+ * way process stacks are handled. This is done by having a special
-+ * "init_task" linker map entry..
-+ */
-+
-+union task_union init_task_union 
-+__attribute__((__section__(".data.init_task"))) = 
-+{ INIT_TASK(init_task_union.task) };
-+
-+struct task_struct *alloc_task_struct(void)
-+{
-+      return((struct task_struct *) 
-+             __get_free_pages(GFP_KERNEL, CONFIG_KERNEL_STACK_ORDER));
-+}
-+
-+void unprotect_stack(unsigned long stack)
-+{
-+      protect_memory(stack, (1 << CONFIG_KERNEL_STACK_ORDER) * PAGE_SIZE, 
-+                     1, 1, 0, 1);
-+}
-+
-+void free_task_struct(struct task_struct *task)
-+{
-+      /* free_pages decrements the page counter and only actually frees
-+       * the pages if they are now not accessed by anything.
-+       */
-+      free_pages((unsigned long) task, CONFIG_KERNEL_STACK_ORDER);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/irq.c um/arch/um/kernel/irq.c
---- orig/arch/um/kernel/irq.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/irq.c    2003-03-26 14:45:29.000000000 -0500
-@@ -0,0 +1,842 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ * Derived (i.e. mostly copied) from arch/i386/kernel/irq.c:
-+ *    Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar
-+ */
-+
-+#include "linux/config.h"
-+#include "linux/kernel.h"
-+#include "linux/smp.h"
-+#include "linux/irq.h"
-+#include "linux/kernel_stat.h"
-+#include "linux/interrupt.h"
-+#include "linux/random.h"
-+#include "linux/slab.h"
-+#include "linux/file.h"
-+#include "linux/proc_fs.h"
-+#include "linux/init.h"
-+#include "linux/seq_file.h"
-+#include "asm/irq.h"
-+#include "asm/hw_irq.h"
-+#include "asm/hardirq.h"
-+#include "asm/atomic.h"
-+#include "asm/signal.h"
-+#include "asm/system.h"
-+#include "asm/errno.h"
-+#include "asm/uaccess.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "irq_user.h"
-+
-+static void register_irq_proc (unsigned int irq);
-+
-+irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned =
-+        { [0 ... NR_IRQS-1] = { 0, &no_irq_type, NULL, 0, SPIN_LOCK_UNLOCKED}};
-+
-+/*
-+ * Generic no controller code
-+ */
-+
-+static void enable_none(unsigned int irq) { }
-+static unsigned int startup_none(unsigned int irq) { return 0; }
-+static void disable_none(unsigned int irq) { }
-+static void ack_none(unsigned int irq)
-+{
-+/*
-+ * 'what should we do if we get a hw irq event on an illegal vector'.
-+ * each architecture has to answer this themselves, it doesnt deserve
-+ * a generic callback i think.
-+ */
-+#if CONFIG_X86
-+      printk(KERN_ERR "unexpected IRQ trap at vector %02x\n", irq);
-+#ifdef CONFIG_X86_LOCAL_APIC
-+      /*
-+       * Currently unexpected vectors happen only on SMP and APIC.
-+       * We _must_ ack these because every local APIC has only N
-+       * irq slots per priority level, and a 'hanging, unacked' IRQ
-+       * holds up an irq slot - in excessive cases (when multiple
-+       * unexpected vectors occur) that might lock up the APIC
-+       * completely.
-+       */
-+      ack_APIC_irq();
-+#endif
-+#endif
-+}
-+
-+/* startup is the same as "enable", shutdown is same as "disable" */
-+#define shutdown_none disable_none
-+#define end_none      enable_none
-+
-+struct hw_interrupt_type no_irq_type = {
-+      "none",
-+      startup_none,
-+      shutdown_none,
-+      enable_none,
-+      disable_none,
-+      ack_none,
-+      end_none
-+};
-+
-+/* Not changed */
-+volatile unsigned long irq_err_count;
-+
-+/*
-+ * Generic, controller-independent functions:
-+ */
-+
-+int get_irq_list(char *buf)
-+{
-+      int i, j;
-+      unsigned long flags;
-+      struct irqaction * action;
-+      char *p = buf;
-+
-+      p += sprintf(p, "           ");
-+      for (j=0; j<smp_num_cpus; j++)
-+              p += sprintf(p, "CPU%d       ",j);
-+      *p++ = '\n';
-+
-+      for (i = 0 ; i < NR_IRQS ; i++) {
-+              spin_lock_irqsave(&irq_desc[i].lock, flags);
-+              action = irq_desc[i].action;
-+              if (!action) 
-+                      goto end;
-+              p += sprintf(p, "%3d: ",i);
-+#ifndef CONFIG_SMP
-+              p += sprintf(p, "%10u ", kstat_irqs(i));
-+#else
-+              for (j = 0; j < smp_num_cpus; j++)
-+                      p += sprintf(p, "%10u ",
-+                              kstat.irqs[cpu_logical_map(j)][i]);
-+#endif
-+              p += sprintf(p, " %14s", irq_desc[i].handler->typename);
-+              p += sprintf(p, "  %s", action->name);
-+
-+              for (action=action->next; action; action = action->next)
-+                      p += sprintf(p, ", %s", action->name);
-+              *p++ = '\n';
-+      end:
-+              spin_unlock_irqrestore(&irq_desc[i].lock, flags);
-+      }
-+      p += sprintf(p, "\n");
-+#ifdef notdef
-+#if CONFIG_SMP
-+      p += sprintf(p, "LOC: ");
-+      for (j = 0; j < smp_num_cpus; j++)
-+              p += sprintf(p, "%10u ",
-+                      apic_timer_irqs[cpu_logical_map(j)]);
-+      p += sprintf(p, "\n");
-+#endif
-+#endif
-+      p += sprintf(p, "ERR: %10lu\n", irq_err_count);
-+      return p - buf;
-+}
-+
-+
-+/*
-+ * This should really return information about whether
-+ * we should do bottom half handling etc. Right now we
-+ * end up _always_ checking the bottom half, which is a
-+ * waste of time and is not what some drivers would
-+ * prefer.
-+ */
-+int handle_IRQ_event(unsigned int irq, struct pt_regs * regs, 
-+                   struct irqaction * action)
-+{
-+      int status;
-+      int cpu = smp_processor_id();
-+
-+      irq_enter(cpu, irq);
-+
-+      status = 1;     /* Force the "do bottom halves" bit */
-+
-+      if (!(action->flags & SA_INTERRUPT))
-+              __sti();
-+
-+      do {
-+              status |= action->flags;
-+              action->handler(irq, action->dev_id, regs);
-+              action = action->next;
-+      } while (action);
-+      if (status & SA_SAMPLE_RANDOM)
-+              add_interrupt_randomness(irq);
-+      __cli();
-+
-+      irq_exit(cpu, irq);
-+
-+      return status;
-+}
-+
-+/*
-+ * Generic enable/disable code: this just calls
-+ * down into the PIC-specific version for the actual
-+ * hardware disable after having gotten the irq
-+ * controller lock. 
-+ */
-+ 
-+/**
-+ *    disable_irq_nosync - disable an irq without waiting
-+ *    @irq: Interrupt to disable
-+ *
-+ *    Disable the selected interrupt line. Disables of an interrupt
-+ *    stack. Unlike disable_irq(), this function does not ensure existing
-+ *    instances of the IRQ handler have completed before returning.
-+ *
-+ *    This function may be called from IRQ context.
-+ */
-+ 
-+void inline disable_irq_nosync(unsigned int irq)
-+{
-+      irq_desc_t *desc = irq_desc + irq;
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&desc->lock, flags);
-+      if (!desc->depth++) {
-+              desc->status |= IRQ_DISABLED;
-+              desc->handler->disable(irq);
-+      }
-+      spin_unlock_irqrestore(&desc->lock, flags);
-+}
-+
-+/**
-+ *    disable_irq - disable an irq and wait for completion
-+ *    @irq: Interrupt to disable
-+ *
-+ *    Disable the selected interrupt line. Disables of an interrupt
-+ *    stack. That is for two disables you need two enables. This
-+ *    function waits for any pending IRQ handlers for this interrupt
-+ *    to complete before returning. If you use this function while
-+ *    holding a resource the IRQ handler may need you will deadlock.
-+ *
-+ *    This function may be called - with care - from IRQ context.
-+ */
-+ 
-+void disable_irq(unsigned int irq)
-+{
-+      disable_irq_nosync(irq);
-+
-+      if (!local_irq_count(smp_processor_id())) {
-+              do {
-+                      barrier();
-+              } while (irq_desc[irq].status & IRQ_INPROGRESS);
-+      }
-+}
-+
-+/**
-+ *    enable_irq - enable interrupt handling on an irq
-+ *    @irq: Interrupt to enable
-+ *
-+ *    Re-enables the processing of interrupts on this IRQ line
-+ *    providing no disable_irq calls are now in effect.
-+ *
-+ *    This function may be called from IRQ context.
-+ */
-+ 
-+void enable_irq(unsigned int irq)
-+{
-+      irq_desc_t *desc = irq_desc + irq;
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&desc->lock, flags);
-+      switch (desc->depth) {
-+      case 1: {
-+              unsigned int status = desc->status & ~IRQ_DISABLED;
-+              desc->status = status;
-+              if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
-+                      desc->status = status | IRQ_REPLAY;
-+                      hw_resend_irq(desc->handler,irq);
-+              }
-+              desc->handler->enable(irq);
-+              /* fall-through */
-+      }
-+      default:
-+              desc->depth--;
-+              break;
-+      case 0:
-+              printk(KERN_ERR "enable_irq() unbalanced from %p\n",
-+                     __builtin_return_address(0));
-+      }
-+      spin_unlock_irqrestore(&desc->lock, flags);
-+}
-+
-+/*
-+ * do_IRQ handles all normal device IRQ's (the special
-+ * SMP cross-CPU interrupts have their own specific
-+ * handlers).
-+ */
-+unsigned int do_IRQ(int irq, union uml_pt_regs *regs)
-+{     
-+      /* 
-+       * 0 return value means that this irq is already being
-+       * handled by some other CPU. (or is disabled)
-+       */
-+      int cpu = smp_processor_id();
-+      irq_desc_t *desc = irq_desc + irq;
-+      struct irqaction * action;
-+      unsigned int status;
-+
-+      kstat.irqs[cpu][irq]++;
-+      spin_lock(&desc->lock);
-+      desc->handler->ack(irq);
-+      /*
-+         REPLAY is when Linux resends an IRQ that was dropped earlier
-+         WAITING is used by probe to mark irqs that are being tested
-+         */
-+      status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING);
-+      status |= IRQ_PENDING; /* we _want_ to handle it */
-+
-+      /*
-+       * If the IRQ is disabled for whatever reason, we cannot
-+       * use the action we have.
-+       */
-+      action = NULL;
-+      if (!(status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
-+              action = desc->action;
-+              status &= ~IRQ_PENDING; /* we commit to handling */
-+              status |= IRQ_INPROGRESS; /* we are handling it */
-+      }
-+      desc->status = status;
-+
-+      /*
-+       * If there is no IRQ handler or it was disabled, exit early.
-+         Since we set PENDING, if another processor is handling
-+         a different instance of this same irq, the other processor
-+         will take care of it.
-+       */
-+      if (!action)
-+              goto out;
-+
-+      /*
-+       * Edge triggered interrupts need to remember
-+       * pending events.
-+       * This applies to any hw interrupts that allow a second
-+       * instance of the same irq to arrive while we are in do_IRQ
-+       * or in the handler. But the code here only handles the _second_
-+       * instance of the irq, not the third or fourth. So it is mostly
-+       * useful for irq hardware that does not mask cleanly in an
-+       * SMP environment.
-+       */
-+      for (;;) {
-+              spin_unlock(&desc->lock);
-+              handle_IRQ_event(irq, (struct pt_regs *) regs, action);
-+              spin_lock(&desc->lock);
-+              
-+              if (!(desc->status & IRQ_PENDING))
-+                      break;
-+              desc->status &= ~IRQ_PENDING;
-+      }
-+      desc->status &= ~IRQ_INPROGRESS;
-+out:
-+      /*
-+       * The ->end() handler has to deal with interrupts which got
-+       * disabled while the handler was running.
-+       */
-+      desc->handler->end(irq);
-+      spin_unlock(&desc->lock);
-+
-+      if (softirq_pending(cpu))
-+              do_softirq();
-+      return 1;
-+}
-+
-+/**
-+ *    request_irq - allocate an interrupt line
-+ *    @irq: Interrupt line to allocate
-+ *    @handler: Function to be called when the IRQ occurs
-+ *    @irqflags: Interrupt type flags
-+ *    @devname: An ascii name for the claiming device
-+ *    @dev_id: A cookie passed back to the handler function
-+ *
-+ *    This call allocates interrupt resources and enables the
-+ *    interrupt line and IRQ handling. From the point this
-+ *    call is made your handler function may be invoked. Since
-+ *    your handler function must clear any interrupt the board 
-+ *    raises, you must take care both to initialise your hardware
-+ *    and to set up the interrupt handler in the right order.
-+ *
-+ *    Dev_id must be globally unique. Normally the address of the
-+ *    device data structure is used as the cookie. Since the handler
-+ *    receives this value it makes sense to use it.
-+ *
-+ *    If your interrupt is shared you must pass a non NULL dev_id
-+ *    as this is required when freeing the interrupt.
-+ *
-+ *    Flags:
-+ *
-+ *    SA_SHIRQ                Interrupt is shared
-+ *
-+ *    SA_INTERRUPT            Disable local interrupts while processing
-+ *
-+ *    SA_SAMPLE_RANDOM        The interrupt can be used for entropy
-+ *
-+ */
-+ 
-+int request_irq(unsigned int irq,
-+              void (*handler)(int, void *, struct pt_regs *),
-+              unsigned long irqflags, 
-+              const char * devname,
-+              void *dev_id)
-+{
-+      int retval;
-+      struct irqaction * action;
-+
-+#if 1
-+      /*
-+       * Sanity-check: shared interrupts should REALLY pass in
-+       * a real dev-ID, otherwise we'll have trouble later trying
-+       * to figure out which interrupt is which (messes up the
-+       * interrupt freeing logic etc).
-+       */
-+      if (irqflags & SA_SHIRQ) {
-+              if (!dev_id)
-+                      printk(KERN_ERR "Bad boy: %s (at 0x%x) called us "
-+                             "without a dev_id!\n", devname, (&irq)[-1]);
-+      }
-+#endif
-+
-+      if (irq >= NR_IRQS)
-+              return -EINVAL;
-+      if (!handler)
-+              return -EINVAL;
-+
-+      action = (struct irqaction *)
-+                      kmalloc(sizeof(struct irqaction), GFP_KERNEL);
-+      if (!action)
-+              return -ENOMEM;
-+
-+      action->handler = handler;
-+      action->flags = irqflags;
-+      action->mask = 0;
-+      action->name = devname;
-+      action->next = NULL;
-+      action->dev_id = dev_id;
-+
-+      retval = setup_irq(irq, action);
-+      if (retval)
-+              kfree(action);
-+      return retval;
-+}
-+
-+int um_request_irq(unsigned int irq, int fd, int type,
-+                 void (*handler)(int, void *, struct pt_regs *),
-+                 unsigned long irqflags, const char * devname,
-+                 void *dev_id)
-+{
-+      int err;
-+
-+      err = request_irq(irq, handler, irqflags, devname, dev_id);
-+      if(err) 
-+              return(err);
-+
-+      if(fd != -1)
-+              err = activate_fd(irq, fd, type, dev_id);
-+      return(err);
-+}
-+
-+/* this was setup_x86_irq but it seems pretty generic */
-+int setup_irq(unsigned int irq, struct irqaction * new)
-+{
-+      int shared = 0;
-+      unsigned long flags;
-+      struct irqaction *old, **p;
-+      irq_desc_t *desc = irq_desc + irq;
-+
-+      /*
-+       * Some drivers like serial.c use request_irq() heavily,
-+       * so we have to be careful not to interfere with a
-+       * running system.
-+       */
-+      if (new->flags & SA_SAMPLE_RANDOM) {
-+              /*
-+               * This function might sleep, we want to call it first,
-+               * outside of the atomic block.
-+               * Yes, this might clear the entropy pool if the wrong
-+               * driver is attempted to be loaded, without actually
-+               * installing a new handler, but is this really a problem,
-+               * only the sysadmin is able to do this.
-+               */
-+              rand_initialize_irq(irq);
-+      }
-+
-+      /*
-+       * The following block of code has to be executed atomically
-+       */
-+      spin_lock_irqsave(&desc->lock,flags);
-+      p = &desc->action;
-+      if ((old = *p) != NULL) {
-+              /* Can't share interrupts unless both agree to */
-+              if (!(old->flags & new->flags & SA_SHIRQ)) {
-+                      spin_unlock_irqrestore(&desc->lock,flags);
-+                      return -EBUSY;
-+              }
-+
-+              /* add new interrupt at end of irq queue */
-+              do {
-+                      p = &old->next;
-+                      old = *p;
-+              } while (old);
-+              shared = 1;
-+      }
-+
-+      *p = new;
-+
-+      if (!shared) {
-+              desc->depth = 0;
-+              desc->status &= ~IRQ_DISABLED;
-+              desc->handler->startup(irq);
-+      }
-+      spin_unlock_irqrestore(&desc->lock,flags);
-+
-+      register_irq_proc(irq);
-+      return 0;
-+}
-+
-+/**
-+ *    free_irq - free an interrupt
-+ *    @irq: Interrupt line to free
-+ *    @dev_id: Device identity to free
-+ *
-+ *    Remove an interrupt handler. The handler is removed and if the
-+ *    interrupt line is no longer in use by any driver it is disabled.
-+ *    On a shared IRQ the caller must ensure the interrupt is disabled
-+ *    on the card it drives before calling this function. The function
-+ *    does not return until any executing interrupts for this IRQ
-+ *    have completed.
-+ *
-+ *    This function may be called from interrupt context. 
-+ *
-+ *    Bugs: Attempting to free an irq in a handler for the same irq hangs
-+ *          the machine.
-+ */
-+ 
-+void free_irq(unsigned int irq, void *dev_id)
-+{
-+      irq_desc_t *desc;
-+      struct irqaction **p;
-+      unsigned long flags;
-+
-+      if (irq >= NR_IRQS)
-+              return;
-+
-+      desc = irq_desc + irq;
-+      spin_lock_irqsave(&desc->lock,flags);
-+      p = &desc->action;
-+      for (;;) {
-+              struct irqaction * action = *p;
-+              if (action) {
-+                      struct irqaction **pp = p;
-+                      p = &action->next;
-+                      if (action->dev_id != dev_id)
-+                              continue;
-+
-+                      /* Found it - now remove it from the list of entries */
-+                      *pp = action->next;
-+                      if (!desc->action) {
-+                              desc->status |= IRQ_DISABLED;
-+                              desc->handler->shutdown(irq);
-+                      }
-+                      free_irq_by_irq_and_dev(irq, dev_id);
-+                      spin_unlock_irqrestore(&desc->lock,flags);
-+
-+#ifdef CONFIG_SMP
-+                      /* Wait to make sure it's not being used on another CPU */
-+                      while (desc->status & IRQ_INPROGRESS)
-+                              barrier();
-+#endif
-+                      kfree(action);
-+                      return;
-+              }
-+              printk(KERN_ERR "Trying to free free IRQ%d\n",irq);
-+              spin_unlock_irqrestore(&desc->lock,flags);
-+              return;
-+      }
-+}
-+
-+/* These are initialized by sysctl_init, which is called from init/main.c */
-+static struct proc_dir_entry * root_irq_dir;
-+static struct proc_dir_entry * irq_dir [NR_IRQS];
-+static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
-+
-+/* These are read and written as longs, so a read won't see a partial write
-+ * even during a race.
-+ */
-+static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-+
-+#define HEX_DIGITS 8
-+
-+static int irq_affinity_read_proc (char *page, char **start, off_t off,
-+                      int count, int *eof, void *data)
-+{
-+      if (count < HEX_DIGITS+1)
-+              return -EINVAL;
-+      return sprintf (page, "%08lx\n", irq_affinity[(long)data]);
-+}
-+
-+static unsigned int parse_hex_value (const char *buffer,
-+              unsigned long count, unsigned long *ret)
-+{
-+      unsigned char hexnum [HEX_DIGITS];
-+      unsigned long value;
-+      int i;
-+
-+      if (!count)
-+              return -EINVAL;
-+      if (count > HEX_DIGITS)
-+              count = HEX_DIGITS;
-+      if (copy_from_user(hexnum, buffer, count))
-+              return -EFAULT;
-+
-+      /*
-+       * Parse the first 8 characters as a hex string, any non-hex char
-+       * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
-+       */
-+      value = 0;
-+
-+      for (i = 0; i < count; i++) {
-+              unsigned int c = hexnum[i];
-+
-+              switch (c) {
-+                      case '0' ... '9': c -= '0'; break;
-+                      case 'a' ... 'f': c -= 'a'-10; break;
-+                      case 'A' ... 'F': c -= 'A'-10; break;
-+              default:
-+                      goto out;
-+              }
-+              value = (value << 4) | c;
-+      }
-+out:
-+      *ret = value;
-+      return 0;
-+}
-+
-+static int irq_affinity_write_proc (struct file *file, const char *buffer,
-+                                      unsigned long count, void *data)
-+{
-+      int irq = (long) data, full_count = count, err;
-+      unsigned long new_value;
-+
-+      if (!irq_desc[irq].handler->set_affinity)
-+              return -EIO;
-+
-+      err = parse_hex_value(buffer, count, &new_value);
-+
-+#if CONFIG_SMP
-+      /*
-+       * Do not allow disabling IRQs completely - it's a too easy
-+       * way to make the system unusable accidentally :-) At least
-+       * one online CPU still has to be targeted.
-+       */
-+      if (!(new_value & cpu_online_map))
-+              return -EINVAL;
-+#endif
-+
-+      irq_affinity[irq] = new_value;
-+      irq_desc[irq].handler->set_affinity(irq, new_value);
-+
-+      return full_count;
-+}
-+
-+static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
-+                      int count, int *eof, void *data)
-+{
-+      unsigned long *mask = (unsigned long *) data;
-+      if (count < HEX_DIGITS+1)
-+              return -EINVAL;
-+      return sprintf (page, "%08lx\n", *mask);
-+}
-+
-+static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
-+                                      unsigned long count, void *data)
-+{
-+      unsigned long *mask = (unsigned long *) data, full_count = count, err;
-+      unsigned long new_value;
-+
-+      err = parse_hex_value(buffer, count, &new_value);
-+      if (err)
-+              return err;
-+
-+      *mask = new_value;
-+      return full_count;
-+}
-+
-+#define MAX_NAMELEN 10
-+
-+static void register_irq_proc (unsigned int irq)
-+{
-+      struct proc_dir_entry *entry;
-+      char name [MAX_NAMELEN];
-+
-+      if (!root_irq_dir || (irq_desc[irq].handler == &no_irq_type) ||
-+          irq_dir[irq])
-+              return;
-+
-+      memset(name, 0, MAX_NAMELEN);
-+      sprintf(name, "%d", irq);
-+
-+      /* create /proc/irq/1234 */
-+      irq_dir[irq] = proc_mkdir(name, root_irq_dir);
-+
-+      /* create /proc/irq/1234/smp_affinity */
-+      entry = create_proc_entry("smp_affinity", 0600, irq_dir[irq]);
-+
-+      entry->nlink = 1;
-+      entry->data = (void *)(long)irq;
-+      entry->read_proc = irq_affinity_read_proc;
-+      entry->write_proc = irq_affinity_write_proc;
-+
-+      smp_affinity_entry[irq] = entry;
-+}
-+
-+/* Read and written as a long */
-+unsigned long prof_cpu_mask = -1;
-+
-+void __init init_irq_proc (void)
-+{
-+      struct proc_dir_entry *entry;
-+      int i;
-+
-+      /* create /proc/irq */
-+      root_irq_dir = proc_mkdir("irq", 0);
-+
-+      /* create /proc/irq/prof_cpu_mask */
-+      entry = create_proc_entry("prof_cpu_mask", 0600, root_irq_dir);
-+
-+      entry->nlink = 1;
-+      entry->data = (void *)&prof_cpu_mask;
-+      entry->read_proc = prof_cpu_mask_read_proc;
-+      entry->write_proc = prof_cpu_mask_write_proc;
-+
-+      /*
-+       * Create entries for all existing IRQs.
-+       */
-+      for (i = 0; i < NR_IRQS; i++)
-+              register_irq_proc(i);
-+}
-+
-+static spinlock_t irq_spinlock = SPIN_LOCK_UNLOCKED;
-+
-+unsigned long irq_lock(void)
-+{
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&irq_spinlock, flags);
-+      return(flags);
-+}
-+
-+void irq_unlock(unsigned long flags)
-+{
-+      spin_unlock_irqrestore(&irq_spinlock, flags);
-+}
-+
-+unsigned long probe_irq_on(void)
-+{
-+      return(0);
-+}
-+
-+int probe_irq_off(unsigned long val)
-+{
-+      return(0);
-+}
-+
-+static unsigned int startup_SIGIO_irq(unsigned int irq)
-+{
-+      return(0);
-+}
-+
-+static void shutdown_SIGIO_irq(unsigned int irq)
-+{
-+}
-+
-+static void enable_SIGIO_irq(unsigned int irq)
-+{
-+}
-+
-+static void disable_SIGIO_irq(unsigned int irq)
-+{
-+}
-+
-+static void mask_and_ack_SIGIO(unsigned int irq)
-+{
-+}
-+
-+static void end_SIGIO_irq(unsigned int irq)
-+{
-+}
-+
-+static unsigned int startup_SIGVTALRM_irq(unsigned int irq)
-+{
-+      return(0);
-+}
-+
-+static void shutdown_SIGVTALRM_irq(unsigned int irq)
-+{
-+}
-+
-+static void enable_SIGVTALRM_irq(unsigned int irq)
-+{
-+}
-+
-+static void disable_SIGVTALRM_irq(unsigned int irq)
-+{
-+}
-+
-+static void mask_and_ack_SIGVTALRM(unsigned int irq)
-+{
-+}
-+
-+static void end_SIGVTALRM_irq(unsigned int irq)
-+{
-+}
-+
-+static struct hw_interrupt_type SIGIO_irq_type = {
-+      "SIGIO",
-+      startup_SIGIO_irq,
-+      shutdown_SIGIO_irq,
-+      enable_SIGIO_irq,
-+      disable_SIGIO_irq,
-+      mask_and_ack_SIGIO,
-+      end_SIGIO_irq,
-+      NULL
-+};
-+
-+static struct hw_interrupt_type SIGVTALRM_irq_type = {
-+      "SIGVTALRM",
-+      startup_SIGVTALRM_irq,
-+      shutdown_SIGVTALRM_irq,
-+      enable_SIGVTALRM_irq,
-+      disable_SIGVTALRM_irq,
-+      mask_and_ack_SIGVTALRM,
-+      end_SIGVTALRM_irq,
-+      NULL
-+};
-+
-+void __init init_IRQ(void)
-+{
-+      int i;
-+
-+      irq_desc[TIMER_IRQ].status = IRQ_DISABLED;
-+      irq_desc[TIMER_IRQ].action = 0;
-+      irq_desc[TIMER_IRQ].depth = 1;
-+      irq_desc[TIMER_IRQ].handler = &SIGVTALRM_irq_type;
-+      enable_irq(TIMER_IRQ);
-+      for(i=1;i<NR_IRQS;i++){
-+              irq_desc[i].status = IRQ_DISABLED;
-+              irq_desc[i].action = 0;
-+              irq_desc[i].depth = 1;
-+              irq_desc[i].handler = &SIGIO_irq_type;
-+              enable_irq(i);
-+      }
-+      init_irq_signals(0);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/irq_user.c um/arch/um/kernel/irq_user.c
---- orig/arch/um/kernel/irq_user.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/irq_user.c       2002-12-22 15:49:46.000000000 -0500
-@@ -0,0 +1,427 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <signal.h>
-+#include <string.h>
-+#include <sys/poll.h>
-+#include <sys/types.h>
-+#include <sys/time.h>
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "process.h"
-+#include "signal_user.h"
-+#include "sigio.h"
-+#include "irq_user.h"
-+#include "os.h"
-+
-+struct irq_fd {
-+      struct irq_fd *next;
-+      void *id;
-+      int fd;
-+      int type;
-+      int irq;
-+      int pid;
-+      int events;
-+      int current_events;
-+      int freed;
-+};
-+
-+static struct irq_fd *active_fds = NULL;
-+static struct irq_fd **last_irq_ptr = &active_fds;
-+
-+static struct pollfd *pollfds = NULL;
-+static int pollfds_num = 0;
-+static int pollfds_size = 0;
-+
-+extern int io_count, intr_count;
-+
-+void sigio_handler(int sig, union uml_pt_regs *regs)
-+{
-+      struct irq_fd *irq_fd, *next;
-+      int i, n;
-+
-+      if(smp_sigio_handler()) return;
-+      while(1){
-+              if((n = poll(pollfds, pollfds_num, 0)) < 0){
-+                      if(errno == EINTR) continue;
-+                      printk("sigio_handler : poll returned %d, "
-+                             "errno = %d\n", n, errno);
-+                      break;
-+              }
-+              if(n == 0) break;
-+
-+              irq_fd = active_fds;
-+              for(i = 0; i < pollfds_num; i++){
-+                      if(pollfds[i].revents != 0){
-+                              irq_fd->current_events = pollfds[i].revents;
-+                              pollfds[i].fd = -1;
-+                      }
-+                      irq_fd = irq_fd->next;
-+              }
-+
-+              for(irq_fd = active_fds; irq_fd != NULL; irq_fd = next){
-+                      next = irq_fd->next;
-+                      if(irq_fd->current_events != 0){
-+                              irq_fd->current_events = 0;
-+                              do_IRQ(irq_fd->irq, regs);
-+
-+                              /* This is here because the next irq may be
-+                               * freed in the handler.  If a console goes
-+                               * away, both the read and write irqs will be
-+                               * freed.  After do_IRQ, ->next will point to
-+                               * a good IRQ.
-+                               * Irqs can't be freed inside their handlers,
-+                               * so the next best thing is to have them
-+                               * marked as needing freeing, so that they
-+                               * can be freed here.
-+                               */
-+                              next = irq_fd->next;
-+                              if(irq_fd->freed)
-+                                      free_irq(irq_fd->irq, irq_fd->id);
-+                      }
-+              }
-+      }
-+}
-+
-+int activate_ipi(int fd, int pid)
-+{
-+      return(os_set_fd_async(fd, pid));
-+}
-+
-+static void maybe_sigio_broken(int fd, int type)
-+{
-+      if(isatty(fd)){
-+              if((type == IRQ_WRITE) && !pty_output_sigio){
-+                      write_sigio_workaround();
-+                      add_sigio_fd(fd, 0);
-+              }
-+              else if((type == IRQ_READ) && !pty_close_sigio){
-+                      write_sigio_workaround();
-+                      add_sigio_fd(fd, 1);                    
-+              }
-+      }
-+}
-+
-+int activate_fd(int irq, int fd, int type, void *dev_id)
-+{
-+      struct pollfd *tmp_pfd;
-+      struct irq_fd *new_fd, *irq_fd;
-+      unsigned long flags;
-+      int pid, events, err, n, size;
-+
-+      pid = os_getpid();
-+      err = os_set_fd_async(fd, pid);
-+      if(err < 0)
-+              goto out;
-+
-+      new_fd = um_kmalloc(sizeof(*new_fd));
-+      err = -ENOMEM;
-+      if(new_fd == NULL)
-+              goto out;
-+
-+      if(type == IRQ_READ) events = POLLIN | POLLPRI;
-+      else events = POLLOUT;
-+      *new_fd = ((struct irq_fd) { .next              = NULL,
-+                                   .id                = dev_id,
-+                                   .fd                = fd,
-+                                   .type              = type,
-+                                   .irq               = irq,
-+                                   .pid               = pid,
-+                                   .events            = events,
-+                                   .current_events    = 0,
-+                                   .freed             = 0  } );
-+
-+      /* Critical section - locked by a spinlock because this stuff can
-+       * be changed from interrupt handlers.  The stuff above is done 
-+       * outside the lock because it allocates memory.
-+       */
-+
-+      /* Actually, it only looks like it can be called from interrupt
-+       * context.  The culprit is reactivate_fd, which calls 
-+       * maybe_sigio_broken, which calls write_sigio_workaround,
-+       * which calls activate_fd.  However, write_sigio_workaround should
-+       * only be called once, at boot time.  That would make it clear that
-+       * this is called only from process context, and can be locked with
-+       * a semaphore.
-+       */
-+      flags = irq_lock();
-+      for(irq_fd = active_fds; irq_fd != NULL; irq_fd = irq_fd->next){
-+              if((irq_fd->fd == fd) && (irq_fd->type == type)){
-+                      printk("Registering fd %d twice\n", fd);
-+                      printk("Irqs : %d, %d\n", irq_fd->irq, irq);
-+                      printk("Ids : 0x%x, 0x%x\n", irq_fd->id, dev_id);
-+                      goto out_unlock;
-+              }
-+      }
-+
-+      n = pollfds_num;
-+      if(n == pollfds_size){
-+              while(1){
-+                      /* Here we have to drop the lock in order to call 
-+                       * kmalloc, which might sleep.  If something else
-+                       * came in and changed the pollfds array, we free
-+                       * the buffer and try again.
-+                       */
-+                      irq_unlock(flags);
-+                      size = (pollfds_num + 1) * sizeof(pollfds[0]);
-+                      tmp_pfd = um_kmalloc(size);
-+                      flags = irq_lock();
-+                      if(tmp_pfd == NULL)
-+                              goto out_unlock;
-+                      if(n == pollfds_size)
-+                              break;
-+                      kfree(tmp_pfd);
-+              }
-+              if(pollfds != NULL){
-+                      memcpy(tmp_pfd, pollfds,
-+                             sizeof(pollfds[0]) * pollfds_size);
-+                      kfree(pollfds);
-+              }
-+              pollfds = tmp_pfd;
-+              pollfds_size++;
-+      }
-+
-+      if(type == IRQ_WRITE) 
-+              fd = -1;
-+
-+      pollfds[pollfds_num] = ((struct pollfd) { .fd   = fd,
-+                                                .events       = events,
-+                                                .revents      = 0 });
-+      pollfds_num++;
-+
-+      *last_irq_ptr = new_fd;
-+      last_irq_ptr = &new_fd->next;
-+
-+      irq_unlock(flags);
-+
-+      /* This calls activate_fd, so it has to be outside the critical
-+       * section.
-+       */
-+      maybe_sigio_broken(fd, type);
-+
-+      return(0);
-+
-+ out_unlock:
-+      irq_unlock(flags);
-+      kfree(new_fd);
-+ out:
-+      return(err);
-+}
-+
-+static void free_irq_by_cb(int (*test)(struct irq_fd *, void *), void *arg)
-+{
-+      struct irq_fd **prev;
-+      unsigned long flags;
-+      int i = 0;
-+
-+      flags = irq_lock();
-+      prev = &active_fds;
-+      while(*prev != NULL){
-+              if((*test)(*prev, arg)){
-+                      struct irq_fd *old_fd = *prev;
-+                      if((pollfds[i].fd != -1) && 
-+                         (pollfds[i].fd != (*prev)->fd)){
-+                              printk("free_irq_by_cb - mismatch between "
-+                                     "active_fds and pollfds, fd %d vs %d\n",
-+                                     (*prev)->fd, pollfds[i].fd);
-+                              goto out;
-+                      }
-+                      memcpy(&pollfds[i], &pollfds[i + 1],
-+                             (pollfds_num - i - 1) * sizeof(pollfds[0]));
-+                      pollfds_num--;
-+                      if(last_irq_ptr == &old_fd->next) 
-+                              last_irq_ptr = prev;
-+                      *prev = (*prev)->next;
-+                      if(old_fd->type == IRQ_WRITE) 
-+                              ignore_sigio_fd(old_fd->fd);
-+                      kfree(old_fd);
-+                      continue;
-+              }
-+              prev = &(*prev)->next;
-+              i++;
-+      }
-+ out:
-+      irq_unlock(flags);
-+}
-+
-+struct irq_and_dev {
-+      int irq;
-+      void *dev;
-+};
-+
-+static int same_irq_and_dev(struct irq_fd *irq, void *d)
-+{
-+      struct irq_and_dev *data = d;
-+
-+      return((irq->irq == data->irq) && (irq->id == data->dev));
-+}
-+
-+void free_irq_by_irq_and_dev(int irq, void *dev)
-+{
-+      struct irq_and_dev data = ((struct irq_and_dev) { .irq  = irq,
-+                                                        .dev  = dev });
-+
-+      free_irq_by_cb(same_irq_and_dev, &data);
-+}
-+
-+static int same_fd(struct irq_fd *irq, void *fd)
-+{
-+      return(irq->fd == *((int *) fd));
-+}
-+
-+void free_irq_by_fd(int fd)
-+{
-+      free_irq_by_cb(same_fd, &fd);
-+}
-+
-+static struct irq_fd *find_irq_by_fd(int fd, int irqnum, int *index_out)
-+{
-+      struct irq_fd *irq;
-+      int i = 0;
-+
-+      for(irq=active_fds; irq != NULL; irq = irq->next){
-+              if((irq->fd == fd) && (irq->irq == irqnum)) break;
-+              i++;
-+      }
-+      if(irq == NULL){
-+              printk("find_irq_by_fd doesn't have descriptor %d\n", fd);
-+              goto out;
-+      }
-+      if((pollfds[i].fd != -1) && (pollfds[i].fd != fd)){
-+              printk("find_irq_by_fd - mismatch between active_fds and "
-+                     "pollfds, fd %d vs %d, need %d\n", irq->fd, 
-+                     pollfds[i].fd, fd);
-+              irq = NULL;
-+              goto out;
-+      }
-+      *index_out = i;
-+ out:
-+      return(irq);
-+}
-+
-+void free_irq_later(int irq, void *dev_id)
-+{
-+      struct irq_fd *irq_fd;
-+      unsigned long flags;
-+
-+      flags = irq_lock();
-+      for(irq_fd = active_fds; irq_fd != NULL; irq_fd = irq_fd->next){
-+              if((irq_fd->irq == irq) && (irq_fd->id == dev_id))
-+                      break;
-+      }
-+      if(irq_fd == NULL){
-+              printk("free_irq_later found no irq, irq = %d, "
-+                     "dev_id = 0x%p\n", irq, dev_id);
-+              goto out;
-+      }
-+      irq_fd->freed = 1;
-+ out:
-+      irq_unlock(flags);
-+}
-+
-+void reactivate_fd(int fd, int irqnum)
-+{
-+      struct irq_fd *irq;
-+      unsigned long flags;
-+      int i;
-+
-+      flags = irq_lock();
-+      irq = find_irq_by_fd(fd, irqnum, &i);
-+      if(irq == NULL){
-+              irq_unlock(flags);
-+              return;
-+      }
-+
-+      pollfds[i].fd = irq->fd;
-+
-+      irq_unlock(flags);
-+
-+      /* This calls activate_fd, so it has to be outside the critical
-+       * section.
-+       */
-+      maybe_sigio_broken(fd, irq->type);
-+}
-+
-+void deactivate_fd(int fd, int irqnum)
-+{
-+      struct irq_fd *irq;
-+      unsigned long flags;
-+      int i;
-+
-+      flags = irq_lock();
-+      irq = find_irq_by_fd(fd, irqnum, &i);
-+      if(irq == NULL)
-+              goto out;
-+      pollfds[i].fd = -1;
-+ out:
-+      irq_unlock(flags);
-+}
-+
-+void forward_ipi(int fd, int pid)
-+{
-+      if(fcntl(fd, F_SETOWN, pid) < 0){
-+              int save_errno = errno;
-+              if(fcntl(fd, F_GETOWN, 0) != pid){
-+                      printk("forward_ipi: F_SETOWN failed, fd = %d, "
-+                             "me = %d, target = %d, errno = %d\n", fd, 
-+                             os_getpid(), pid, save_errno);
-+              }
-+      }
-+}
-+
-+void forward_interrupts(int pid)
-+{
-+      struct irq_fd *irq;
-+      unsigned long flags;
-+
-+      flags = irq_lock();
-+      for(irq=active_fds;irq != NULL;irq = irq->next){
-+              if(fcntl(irq->fd, F_SETOWN, pid) < 0){
-+                      int save_errno = errno;
-+                      if(fcntl(irq->fd, F_GETOWN, 0) != pid){
-+                              /* XXX Just remove the irq rather than
-+                               * print out an infinite stream of these
-+                               */
-+                              printk("Failed to forward %d to pid %d, "
-+                                     "errno = %d\n", irq->fd, pid, 
-+                                     save_errno);
-+                      }
-+              }
-+              irq->pid = pid;
-+      }
-+      irq_unlock(flags);
-+}
-+
-+void init_irq_signals(int on_sigstack)
-+{
-+      __sighandler_t h;
-+      int flags;
-+
-+      flags = on_sigstack ? SA_ONSTACK : 0;
-+      if(timer_irq_inited) h = (__sighandler_t) alarm_handler;
-+      else h = boot_timer_handler;
-+
-+      set_handler(SIGVTALRM, h, flags | SA_RESTART, 
-+                  SIGUSR1, SIGIO, SIGWINCH, SIGALRM, -1);
-+      set_handler(SIGIO, (__sighandler_t) sig_handler, flags | SA_RESTART,
-+                  SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1);
-+      signal(SIGWINCH, SIG_IGN);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/ksyms.c um/arch/um/kernel/ksyms.c
---- orig/arch/um/kernel/ksyms.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/ksyms.c  2002-12-17 13:29:43.000000000 -0500
-@@ -0,0 +1,94 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/config.h"
-+#include "linux/module.h"
-+#include "linux/string.h"
-+#include "linux/smp_lock.h"
-+#include "linux/spinlock.h"
-+#include "asm/current.h"
-+#include "asm/delay.h"
-+#include "asm/processor.h"
-+#include "asm/unistd.h"
-+#include "asm/pgalloc.h"
-+#include "asm/pgtable.h"
-+#include "asm/page.h"
-+#include "kern_util.h"
-+#include "user_util.h"
-+#include "os.h"
-+#include "helper.h"
-+
-+EXPORT_SYMBOL(stop);
-+EXPORT_SYMBOL(strtok);
-+EXPORT_SYMBOL(uml_physmem);
-+EXPORT_SYMBOL(set_signals);
-+EXPORT_SYMBOL(get_signals);
-+EXPORT_SYMBOL(kernel_thread);
-+EXPORT_SYMBOL(__const_udelay);
-+EXPORT_SYMBOL(__udelay);
-+EXPORT_SYMBOL(sys_waitpid);
-+EXPORT_SYMBOL(task_size);
-+EXPORT_SYMBOL(flush_tlb_range);
-+EXPORT_SYMBOL(host_task_size);
-+EXPORT_SYMBOL(arch_validate);
-+
-+EXPORT_SYMBOL(region_pa);
-+EXPORT_SYMBOL(region_va);
-+EXPORT_SYMBOL(phys_mem_map);
-+EXPORT_SYMBOL(page_mem_map);
-+EXPORT_SYMBOL(high_physmem);
-+EXPORT_SYMBOL(empty_zero_page);
-+EXPORT_SYMBOL(um_virt_to_phys);
-+EXPORT_SYMBOL(mode_tt);
-+EXPORT_SYMBOL(handle_page_fault);
-+
-+EXPORT_SYMBOL(os_getpid);
-+EXPORT_SYMBOL(os_open_file);
-+EXPORT_SYMBOL(os_read_file);
-+EXPORT_SYMBOL(os_write_file);
-+EXPORT_SYMBOL(os_seek_file);
-+EXPORT_SYMBOL(os_pipe);
-+EXPORT_SYMBOL(os_file_type);
-+EXPORT_SYMBOL(os_close_file);
-+EXPORT_SYMBOL(helper_wait);
-+EXPORT_SYMBOL(os_shutdown_socket);
-+EXPORT_SYMBOL(os_connect_socket);
-+EXPORT_SYMBOL(run_helper);
-+EXPORT_SYMBOL(start_thread);
-+EXPORT_SYMBOL(dump_thread);
-+
-+/* This is here because UML expands open to sys_open, not to a system
-+ * call instruction.
-+ */
-+EXPORT_SYMBOL(sys_open);
-+EXPORT_SYMBOL(sys_lseek);
-+EXPORT_SYMBOL(sys_read);
-+EXPORT_SYMBOL(sys_wait4);
-+
-+#ifdef CONFIG_SMP
-+
-+/* required for SMP */
-+
-+extern void FASTCALL( __write_lock_failed(rwlock_t *rw));
-+EXPORT_SYMBOL_NOVERS(__write_lock_failed);
-+
-+extern void FASTCALL( __read_lock_failed(rwlock_t *rw));
-+EXPORT_SYMBOL_NOVERS(__read_lock_failed);
-+
-+EXPORT_SYMBOL(kernel_flag_cacheline);
-+EXPORT_SYMBOL(smp_num_cpus);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/Makefile um/arch/um/kernel/Makefile
---- orig/arch/um/kernel/Makefile       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/Makefile 2003-04-10 11:14:55.000000000 -0400
-@@ -0,0 +1,73 @@
-+# 
-+# Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+O_TARGET = built-in.o
-+
-+obj-y = config.o checksum.o exec_kern.o exitcode.o frame_kern.o frame.o \
-+      helper.o init_task.o irq.o irq_user.o ksyms.o mem.o mem_user.o \
-+      process.o process_kern.o ptrace.o reboot.o resource.o sigio_user.o \
-+      sigio_kern.o signal_kern.o signal_user.o smp.o syscall_kern.o \
-+      syscall_user.o sysrq.o sys_call_table.o tempfile.o time.o \
-+      time_kern.o tlb.o trap_kern.o trap_user.o uaccess_user.o um_arch.o \
-+      umid.o user_syms.o user_util.o
-+
-+obj-$(CONFIG_BLK_DEV_INITRD) += initrd_kern.o initrd_user.o
-+obj-$(CONFIG_GPROF) += gprof_syms.o
-+obj-$(CONFIG_GCOV) += gmon_syms.o
-+obj-$(CONFIG_TTY_LOG) += tty_log.o
-+
-+subdir-$(CONFIG_MODE_TT) += tt
-+subdir-$(CONFIG_MODE_SKAS) += skas
-+
-+user-objs-$(CONFIG_TTY_LOG) += tty_log.o
-+
-+obj-y += $(join $(subdir-y),$(subdir-y:%=/%.o))
-+
-+# user_syms.o not included here because Rules.make has its own ideas about
-+# building anything in export-objs
-+
-+USER_OBJS = $(filter %_user.o,$(obj-y)) $(user-objs-y) config.o helper.o \
-+      process.o tempfile.o time.o umid.o user_util.o 
-+
-+DMODULES-$(CONFIG_MODULES) = -D__CONFIG_MODULES__
-+DMODVERSIONS-$(CONFIG_MODVERSIONS) = -D__CONFIG_MODVERSIONS__
-+
-+export-objs-$(CONFIG_GPROF) += gprof_syms.o
-+export-objs-$(CONFIG_GCOV) += gmon_syms.o
-+
-+export-objs = ksyms.o process_kern.o signal_kern.o user_syms.o $(export-objs-y)
-+
-+CFLAGS_user_syms.o = -D__AUTOCONF_INCLUDED__ $(DMODULES-y) $(DMODVERSIONS-y) \
-+      -I/usr/include -I../include
-+
-+CFLAGS_frame.o := $(patsubst -fomit-frame-pointer,,$(USER_CFLAGS))
-+
-+include $(TOPDIR)/Rules.make
-+
-+$(USER_OBJS) : %.o: %.c
-+      $(CC) $(CFLAGS_$@) $(USER_CFLAGS) -c -o $@ $<
-+
-+# This has to be separate because it needs be compiled with frame pointers
-+# regardless of how the rest of the kernel is built.
-+
-+frame.o: frame.c
-+      $(CC) $(CFLAGS_$@) -c -o $@ $<
-+
-+QUOTE = 'my $$config=`cat $(TOPDIR)/.config`; $$config =~ s/"/\\"/g ; $$config =~ s/\n/\\n"\n"/g ; while(<STDIN>) { $$_ =~ s/CONFIG/$$config/; print $$_ }'
-+
-+config.c : config.c.in $(TOPDIR)/.config
-+      $(PERL) -e $(QUOTE) < config.c.in > $@
-+
-+clean:
-+      $(RM) config.c
-+      for dir in $(subdir-y) ; do $(MAKE) -C $$dir clean; done
-+
-+modules:
-+
-+fastdep:
-+
-+dep:
-+
-+archmrproper: clean
-diff -Naur -X ../exclude-files orig/arch/um/kernel/mem.c um/arch/um/kernel/mem.c
---- orig/arch/um/kernel/mem.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/mem.c    2003-03-30 14:30:26.000000000 -0500
-@@ -0,0 +1,852 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/config.h"
-+#include "linux/types.h"
-+#include "linux/mm.h"
-+#include "linux/fs.h"
-+#include "linux/init.h"
-+#include "linux/bootmem.h"
-+#include "linux/swap.h"
-+#include "linux/slab.h"
-+#include "linux/vmalloc.h"
-+#include "linux/highmem.h"
-+#include "asm/page.h"
-+#include "asm/pgtable.h"
-+#include "asm/pgalloc.h"
-+#include "asm/bitops.h"
-+#include "asm/uaccess.h"
-+#include "asm/tlb.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "mem_user.h"
-+#include "mem.h"
-+#include "kern.h"
-+#include "init.h"
-+#include "os.h"
-+#include "mode_kern.h"
-+#include "uml_uaccess.h"
-+
-+/* Changed during early boot */
-+pgd_t swapper_pg_dir[1024];
-+unsigned long high_physmem;
-+unsigned long vm_start;
-+unsigned long vm_end;
-+unsigned long highmem;
-+unsigned long *empty_zero_page = NULL;
-+unsigned long *empty_bad_page = NULL;
-+
-+/* Not modified */
-+const char bad_pmd_string[] = "Bad pmd in pte_alloc: %08lx\n";
-+
-+/* Changed during early boot */
-+static unsigned long totalram_pages = 0;
-+
-+extern char __init_begin, __init_end;
-+extern long physmem_size;
-+
-+#ifdef CONFIG_SMP
-+/* Not changed by UML */
-+mmu_gather_t mmu_gathers[NR_CPUS];
-+#endif
-+
-+/* Changed during early boot */
-+int kmalloc_ok = 0;
-+
-+#define NREGIONS (phys_region_index(0xffffffff) - phys_region_index(0x0) + 1)
-+struct mem_region *regions[NREGIONS] = { [ 0 ... NREGIONS - 1 ] = NULL };
-+#define REGION_SIZE ((0xffffffff & ~REGION_MASK) + 1)
-+
-+/* Changed during early boot */
-+static unsigned long brk_end;
-+
-+static void map_cb(void *unused)
-+{
-+      map_memory(brk_end, __pa(brk_end), uml_reserved - brk_end, 1, 1, 0);
-+}
-+
-+void unmap_physmem(void)
-+{
-+      os_unmap_memory((void *) brk_end, uml_reserved - brk_end);
-+}
-+
-+extern char __binary_start;
-+
-+void mem_init(void)
-+{
-+      unsigned long start;
-+
-+#ifdef CONFIG_HIGHMEM
-+      highmem_start_page = phys_page(__pa(high_physmem));
-+#endif
-+
-+        /* clear the zero-page */
-+        memset((void *) empty_zero_page, 0, PAGE_SIZE);
-+
-+      /* Map in the area just after the brk now that kmalloc is about
-+       * to be turned on.
-+       */
-+      brk_end = (unsigned long) UML_ROUND_UP(sbrk(0));
-+      map_cb(NULL);
-+      initial_thread_cb(map_cb, NULL);
-+      free_bootmem(__pa(brk_end), uml_reserved - brk_end);
-+      uml_reserved = brk_end;
-+
-+      /* Fill in any hole at the start of the binary */
-+      start = (unsigned long) &__binary_start;
-+      if(uml_physmem != start){
-+              map_memory(uml_physmem, __pa(uml_physmem), start - uml_physmem,
-+                  1, 1, 0);
-+      }
-+
-+      /* this will put all low memory onto the freelists */
-+      totalram_pages = free_all_bootmem();
-+      totalram_pages += highmem >> PAGE_SHIFT;
-+      max_mapnr = totalram_pages;
-+      num_physpages = totalram_pages;
-+      printk(KERN_INFO "Memory: %luk available\n", 
-+             (unsigned long) nr_free_pages() << (PAGE_SHIFT-10));
-+      kmalloc_ok = 1;
-+}
-+
-+/* Changed during early boot */
-+static unsigned long kmem_top = 0;
-+
-+unsigned long get_kmem_end(void)
-+{
-+      if(kmem_top == 0) 
-+              kmem_top = CHOOSE_MODE(kmem_end_tt, kmem_end_skas);
-+      return(kmem_top);
-+}
-+
-+void set_kmem_end(unsigned long new)
-+{
-+      kmem_top = new;
-+}
-+
-+#if CONFIG_HIGHMEM
-+/* Changed during early boot */
-+pte_t *kmap_pte;
-+pgprot_t kmap_prot;
-+
-+#define kmap_get_fixmap_pte(vaddr)                                    \
-+      pte_offset(pmd_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr))
-+
-+void __init kmap_init(void)
-+{
-+      unsigned long kmap_vstart;
-+
-+      /* cache the first kmap pte */
-+      kmap_vstart = __fix_to_virt(FIX_KMAP_BEGIN);
-+      kmap_pte = kmap_get_fixmap_pte(kmap_vstart);
-+
-+      kmap_prot = PAGE_KERNEL;
-+}
-+#endif /* CONFIG_HIGHMEM */
-+
-+static void __init fixrange_init(unsigned long start, unsigned long end, 
-+                               pgd_t *pgd_base)
-+{
-+      pgd_t *pgd;
-+      pmd_t *pmd;
-+      pte_t *pte;
-+      int i, j;
-+      unsigned long vaddr;
-+
-+      vaddr = start;
-+      i = __pgd_offset(vaddr);
-+      j = __pmd_offset(vaddr);
-+      pgd = pgd_base + i;
-+
-+      for ( ; (i < PTRS_PER_PGD) && (vaddr < end); pgd++, i++) {
-+              pmd = (pmd_t *)pgd;
-+              for (; (j < PTRS_PER_PMD) && (vaddr != end); pmd++, j++) {
-+                      if (pmd_none(*pmd)) {
-+                              pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
-+                              set_pmd(pmd, __pmd(_KERNPG_TABLE + 
-+                                                 (unsigned long) __pa(pte)));
-+                              if (pte != pte_offset(pmd, 0))
-+                                      BUG();
-+                      }
-+                      vaddr += PMD_SIZE;
-+              }
-+              j = 0;
-+      }
-+}
-+
-+int init_maps(struct mem_region *region)
-+{
-+      struct page *p, *map;
-+      int i, n, len;
-+
-+      if(region == &physmem_region){
-+              region->mem_map = mem_map;
-+              return(0);
-+      }
-+      else if(region->mem_map != NULL) return(0);
-+
-+      n = region->len >> PAGE_SHIFT;
-+      len = n * sizeof(struct page);
-+      if(kmalloc_ok){
-+              map = kmalloc(len, GFP_KERNEL);
-+              if(map == NULL) map = vmalloc(len);
-+      }
-+      else map = alloc_bootmem_low_pages(len);
-+
-+      if(map == NULL)
-+              return(-ENOMEM);
-+      for(i = 0; i < n; i++){
-+              p = &map[i];
-+              set_page_count(p, 0);
-+              SetPageReserved(p);
-+              INIT_LIST_HEAD(&p->list);
-+      }
-+      region->mem_map = map;
-+      return(0);
-+}
-+
-+DECLARE_MUTEX(regions_sem);
-+
-+static int setup_one_range(int fd, char *driver, unsigned long start, 
-+                         unsigned long pfn, int len, 
-+                         struct mem_region *region)
-+{
-+      int i;
-+
-+      down(&regions_sem);
-+      for(i = 0; i < NREGIONS; i++){
-+              if(regions[i] == NULL) break;           
-+      }
-+      if(i == NREGIONS){
-+              printk("setup_one_range : no free regions\n");
-+              i = -1;
-+              goto out;
-+      }
-+
-+      if(fd == -1)
-+              fd = create_mem_file(len);
-+
-+      if(region == NULL){
-+              if(kmalloc_ok)
-+                      region = kmalloc(sizeof(*region), GFP_KERNEL);
-+              else region = alloc_bootmem_low_pages(sizeof(*region));
-+              if(region == NULL)
-+                      panic("Failed to allocating mem_region");
-+      }
-+
-+      *region = ((struct mem_region) { .driver        = driver,
-+                                       .start_pfn     = pfn,
-+                                       .start         = start, 
-+                                       .len           = len, 
-+                                       .fd            = fd } );
-+      regions[i] = region;
-+ out:
-+      up(&regions_sem);
-+      return(i);
-+}
-+
-+#ifdef CONFIG_HIGHMEM
-+static void init_highmem(void)
-+{
-+      pgd_t *pgd;
-+      pmd_t *pmd;
-+      pte_t *pte;
-+      unsigned long vaddr;
-+
-+      /*
-+       * Permanent kmaps:
-+       */
-+      vaddr = PKMAP_BASE;
-+      fixrange_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, swapper_pg_dir);
-+
-+      pgd = swapper_pg_dir + __pgd_offset(vaddr);
-+      pmd = pmd_offset(pgd, vaddr);
-+      pte = pte_offset(pmd, vaddr);
-+      pkmap_page_table = pte;
-+
-+      kmap_init();
-+}
-+
-+void setup_highmem(unsigned long len)
-+{
-+      struct mem_region *region;
-+      struct page *page, *map;
-+      unsigned long phys;
-+      int i, cur, index;
-+
-+      phys = physmem_size;
-+      do {
-+              cur = min(len, (unsigned long) REGION_SIZE);
-+              i = setup_one_range(-1, NULL, -1, phys >> PAGE_SHIFT, cur,
-+                                  NULL);
-+              if(i == -1){
-+                      printk("setup_highmem - setup_one_range failed\n");
-+                      return;
-+              }
-+              region = regions[i];
-+              index = phys / PAGE_SIZE;
-+              region->mem_map = &mem_map[index];
-+
-+              map = region->mem_map;
-+              for(i = 0; i < (cur >> PAGE_SHIFT); i++){
-+                      page = &map[i];
-+                      ClearPageReserved(page);
-+                      set_bit(PG_highmem, &page->flags);
-+                      atomic_set(&page->count, 1);
-+                      __free_page(page);
-+              }
-+              phys += cur;
-+              len -= cur;
-+      } while(len > 0);
-+}
-+#endif
-+
-+void paging_init(void)
-+{
-+      struct mem_region *region;
-+      unsigned long zones_size[MAX_NR_ZONES], start, end, vaddr;
-+      int i, index;
-+
-+      empty_zero_page = (unsigned long *) alloc_bootmem_low_pages(PAGE_SIZE);
-+      empty_bad_page = (unsigned long *) alloc_bootmem_low_pages(PAGE_SIZE);
-+      for(i=0;i<sizeof(zones_size)/sizeof(zones_size[0]);i++) 
-+              zones_size[i] = 0;
-+      zones_size[0] = (high_physmem >> PAGE_SHIFT) - 
-+              (uml_physmem >> PAGE_SHIFT);
-+      zones_size[2] = highmem >> PAGE_SHIFT;
-+      free_area_init(zones_size);
-+      start = phys_region_index(__pa(uml_physmem));
-+      end = phys_region_index(__pa(high_physmem - 1));
-+      for(i = start; i <= end; i++){
-+              region = regions[i];
-+              index = (region->start - uml_physmem) / PAGE_SIZE;
-+              region->mem_map = &mem_map[index];
-+              if(i > start) free_bootmem(__pa(region->start), region->len);
-+      }
-+
-+      /*
-+       * Fixed mappings, only the page table structure has to be
-+       * created - mappings will be set by set_fixmap():
-+       */
-+      vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK;
-+      fixrange_init(vaddr, FIXADDR_TOP, swapper_pg_dir);
-+
-+#if CONFIG_HIGHMEM
-+      init_highmem();
-+      setup_highmem(highmem);
-+#endif
-+}
-+
-+/* Changed by meminfo_compat, which is a setup */
-+static int meminfo_22 = 0;
-+
-+static int meminfo_compat(char *str)
-+{
-+      meminfo_22 = 1;
-+      return(1);
-+}
-+
-+__setup("22_meminfo", meminfo_compat);
-+
-+void si_meminfo(struct sysinfo *val)
-+{
-+      val->totalram = totalram_pages;
-+      val->sharedram = 0;
-+      val->freeram = nr_free_pages();
-+      val->bufferram = atomic_read(&buffermem_pages);
-+      val->totalhigh = highmem >> PAGE_SHIFT;
-+      val->freehigh = nr_free_highpages();
-+      val->mem_unit = PAGE_SIZE;
-+      if(meminfo_22){
-+              val->freeram <<= PAGE_SHIFT;
-+              val->bufferram <<= PAGE_SHIFT;
-+              val->totalram <<= PAGE_SHIFT;
-+              val->sharedram <<= PAGE_SHIFT;
-+      }
-+}
-+
-+pte_t __bad_page(void)
-+{
-+      clear_page(empty_bad_page);
-+        return pte_mkdirty(mk_pte((struct page *) empty_bad_page, 
-+                                PAGE_SHARED));
-+}
-+
-+/* This can't do anything because nothing in the kernel image can be freed
-+ * since it's not in kernel physical memory.
-+ */
-+
-+void free_initmem(void)
-+{
-+}
-+
-+#ifdef CONFIG_BLK_DEV_INITRD
-+
-+void free_initrd_mem(unsigned long start, unsigned long end)
-+{
-+      if (start < end)
-+              printk ("Freeing initrd memory: %ldk freed\n", 
-+                      (end - start) >> 10);
-+      for (; start < end; start += PAGE_SIZE) {
-+              ClearPageReserved(virt_to_page(start));
-+              set_page_count(virt_to_page(start), 1);
-+              free_page(start);
-+              totalram_pages++;
-+      }
-+}
-+      
-+#endif
-+
-+int do_check_pgt_cache(int low, int high)
-+{
-+        int freed = 0;
-+        if(pgtable_cache_size > high) {
-+                do {
-+                        if (pgd_quicklist) {
-+                                free_pgd_slow(get_pgd_fast());
-+                                freed++;
-+                        }
-+                        if (pmd_quicklist) {
-+                                pmd_free_slow(pmd_alloc_one_fast(NULL, 0));
-+                                freed++;
-+                        }
-+                        if (pte_quicklist) {
-+                                pte_free_slow(pte_alloc_one_fast(NULL, 0));
-+                                freed++;
-+                        }
-+                } while(pgtable_cache_size > low);
-+        }
-+        return freed;
-+}
-+
-+void show_mem(void)
-+{
-+        int i, total = 0, reserved = 0;
-+        int shared = 0, cached = 0;
-+        int highmem = 0;
-+
-+        printk("Mem-info:\n");
-+        show_free_areas();
-+        printk("Free swap:       %6dkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
-+        i = max_mapnr;
-+        while(i-- > 0) {
-+                total++;
-+                if(PageHighMem(mem_map + i))
-+                        highmem++;
-+                if(PageReserved(mem_map + i))
-+                        reserved++;
-+                else if(PageSwapCache(mem_map + i))
-+                        cached++;
-+                else if(page_count(mem_map + i))
-+                        shared += page_count(mem_map + i) - 1;
-+        }
-+        printk("%d pages of RAM\n", total);
-+        printk("%d pages of HIGHMEM\n", highmem);
-+        printk("%d reserved pages\n", reserved);
-+        printk("%d pages shared\n", shared);
-+        printk("%d pages swap cached\n", cached);
-+        printk("%ld pages in page table cache\n", pgtable_cache_size);
-+        show_buffers();
-+}
-+
-+static int __init uml_mem_setup(char *line, int *add)
-+{
-+      char *retptr;
-+      physmem_size = memparse(line,&retptr);
-+      return 0;
-+}
-+__uml_setup("mem=", uml_mem_setup,
-+"mem=<Amount of desired ram>\n"
-+"    This controls how much \"physical\" memory the kernel allocates\n"
-+"    for the system. The size is specified as a number followed by\n"
-+"    one of 'k', 'K', 'm', 'M', which have the obvious meanings.\n"
-+"    This is not related to the amount of memory in the physical\n"
-+"    machine. It can be more, and the excess, if it's ever used, will\n"
-+"    just be swapped out.\n        Example: mem=64M\n\n"
-+);
-+
-+struct page *arch_validate(struct page *page, int mask, int order)
-+{
-+      unsigned long addr, zero = 0;
-+      int i;
-+
-+ again:
-+      if(page == NULL) return(page);
-+      if(PageHighMem(page)) return(page);
-+
-+      addr = (unsigned long) page_address(page);
-+      for(i = 0; i < (1 << order); i++){
-+              current->thread.fault_addr = (void *) addr;
-+              if(__do_copy_to_user((void *) addr, &zero, 
-+                                   sizeof(zero),
-+                                   &current->thread.fault_addr,
-+                                   &current->thread.fault_catcher)){
-+                      if(!(mask & __GFP_WAIT)) return(NULL);
-+                      else break;
-+              }
-+              addr += PAGE_SIZE;
-+      }
-+      if(i == (1 << order)) return(page);
-+      page = _alloc_pages(mask, order);
-+      goto again;
-+}
-+
-+DECLARE_MUTEX(vm_reserved_sem);
-+static struct list_head vm_reserved = LIST_HEAD_INIT(vm_reserved);
-+
-+/* Static structures, linked in to the list in early boot */
-+static struct vm_reserved head = {
-+      .list           = LIST_HEAD_INIT(head.list),
-+      .start          = 0,
-+      .end            = 0xffffffff
-+};
-+
-+static struct vm_reserved tail = {
-+      .list           = LIST_HEAD_INIT(tail.list),
-+      .start          = 0,
-+      .end            = 0xffffffff
-+};
-+
-+void set_usable_vm(unsigned long start, unsigned long end)
-+{
-+      list_add(&head.list, &vm_reserved);
-+      list_add(&tail.list, &head.list);
-+      head.end = start;
-+      tail.start = end;
-+}
-+
-+int reserve_vm(unsigned long start, unsigned long end, void *e)
-+             
-+{
-+      struct vm_reserved *entry = e, *reserved, *prev;
-+      struct list_head *ele;
-+      int err;
-+
-+      down(&vm_reserved_sem);
-+      list_for_each(ele, &vm_reserved){
-+              reserved = list_entry(ele, struct vm_reserved, list);
-+              if(reserved->start >= end) goto found;
-+      }
-+      panic("Reserved vm out of range");
-+ found:
-+      prev = list_entry(ele->prev, struct vm_reserved, list);
-+      if(prev->end > start)
-+              panic("Can't reserve vm");
-+      if(entry == NULL)
-+              entry = kmalloc(sizeof(*entry), GFP_KERNEL);
-+      if(entry == NULL){
-+              printk("reserve_vm : Failed to allocate entry\n");
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+      *entry = ((struct vm_reserved) 
-+              { .list         = LIST_HEAD_INIT(entry->list),
-+                .start        = start,
-+                .end          = end });
-+      list_add(&entry->list, &prev->list);
-+      err = 0;
-+ out:
-+      up(&vm_reserved_sem);
-+      return(0);
-+}
-+
-+unsigned long get_vm(unsigned long len)
-+{
-+      struct vm_reserved *this, *next;
-+      struct list_head *ele;
-+      unsigned long start;
-+      int err;
-+      
-+      down(&vm_reserved_sem);
-+      list_for_each(ele, &vm_reserved){
-+              this = list_entry(ele, struct vm_reserved, list);
-+              next = list_entry(ele->next, struct vm_reserved, list);
-+              if((this->start < next->start) && 
-+                 (this->end + len + PAGE_SIZE <= next->start))
-+                      goto found;
-+      }
-+      up(&vm_reserved_sem);
-+      return(0);
-+ found:
-+      up(&vm_reserved_sem);
-+      start = (unsigned long) UML_ROUND_UP(this->end) + PAGE_SIZE;
-+      err = reserve_vm(start, start + len, NULL);
-+      if(err) return(0);
-+      return(start);
-+}
-+
-+int nregions(void)
-+{
-+      return(NREGIONS);
-+}
-+
-+void setup_range(int fd, char *driver, unsigned long start, unsigned long pfn,
-+               unsigned long len, int need_vm, struct mem_region *region, 
-+               void *reserved)
-+{
-+      int i, cur;
-+
-+      do {
-+              cur = min(len, (unsigned long) REGION_SIZE);
-+              i = setup_one_range(fd, driver, start, pfn, cur, region);
-+              region = regions[i];
-+              if(need_vm && setup_region(region, reserved)){
-+                      kfree(region);
-+                      regions[i] = NULL;
-+                      return;
-+              }
-+              start += cur;
-+              if(pfn != -1) pfn += cur;
-+              len -= cur;
-+      } while(len > 0);
-+}
-+
-+struct iomem {
-+      char *name;
-+      int fd;
-+      unsigned long size;
-+};
-+
-+/* iomem regions can only be added on the command line at the moment.  
-+ * Locking will be needed when they can be added via mconsole.
-+ */
-+
-+struct iomem iomem_regions[NREGIONS] = { [ 0 ... NREGIONS - 1 ] =
-+                                       { .name        = NULL,
-+                                         .fd          = -1,
-+                                         .size        = 0 } };
-+
-+int num_iomem_regions = 0;
-+
-+void add_iomem(char *name, int fd, unsigned long size)
-+{
-+      if(num_iomem_regions == sizeof(iomem_regions)/sizeof(iomem_regions[0]))
-+              return;
-+      size = (size + PAGE_SIZE - 1) & PAGE_MASK;
-+      iomem_regions[num_iomem_regions++] = 
-+              ((struct iomem) { .name         = name,
-+                                .fd           = fd,
-+                                .size         = size } );
-+}
-+
-+int setup_iomem(void)
-+{
-+      struct iomem *iomem;
-+      int i;
-+
-+      for(i = 0; i < num_iomem_regions; i++){
-+              iomem = &iomem_regions[i];
-+              setup_range(iomem->fd, iomem->name, -1, -1, iomem->size, 1, 
-+                          NULL, NULL);
-+      }
-+      return(0);
-+}
-+
-+__initcall(setup_iomem);
-+
-+#define PFN_UP(x)     (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
-+#define PFN_DOWN(x)   ((x) >> PAGE_SHIFT)
-+
-+/* Changed during early boot */
-+static struct mem_region physmem_region;
-+static struct vm_reserved physmem_reserved;
-+
-+void setup_physmem(unsigned long start, unsigned long reserve_end,
-+                 unsigned long len)
-+{
-+      struct mem_region *region = &physmem_region;
-+      struct vm_reserved *reserved = &physmem_reserved;
-+      unsigned long cur, pfn = 0;
-+      int do_free = 1, bootmap_size;
-+
-+      do {
-+              cur = min(len, (unsigned long) REGION_SIZE);
-+              if(region == NULL) 
-+                      region = alloc_bootmem_low_pages(sizeof(*region));
-+              if(reserved == NULL) 
-+                      reserved = alloc_bootmem_low_pages(sizeof(*reserved));
-+              if((region == NULL) || (reserved == NULL))
-+                      panic("Couldn't allocate physmem region or vm "
-+                            "reservation\n");
-+              setup_range(-1, NULL, start, pfn, cur, 1, region, reserved);
-+
-+              if(do_free){
-+                      unsigned long reserve = reserve_end - start;
-+                      int pfn = PFN_UP(__pa(reserve_end));
-+                      int delta = (len - reserve) >> PAGE_SHIFT;
-+
-+                      bootmap_size = init_bootmem(pfn, pfn + delta);
-+                      free_bootmem(__pa(reserve_end) + bootmap_size,
-+                                   cur - bootmap_size - reserve);
-+                      do_free = 0;
-+              }
-+              start += cur;
-+              pfn += cur >> PAGE_SHIFT;
-+              len -= cur;
-+              region = NULL;
-+              reserved = NULL;
-+      } while(len > 0);
-+}
-+
-+struct mem_region *phys_region(unsigned long phys)
-+{
-+      unsigned int n = phys_region_index(phys);
-+
-+      if(regions[n] == NULL) 
-+              panic("Physical address in uninitialized region");
-+      return(regions[n]);
-+}
-+
-+unsigned long phys_offset(unsigned long phys)
-+{
-+      return(phys_addr(phys));
-+}
-+
-+struct page *phys_mem_map(unsigned long phys)
-+{
-+      return((struct page *) phys_region(phys)->mem_map);
-+}
-+
-+struct page *pte_mem_map(pte_t pte)
-+{
-+      return(phys_mem_map(pte_val(pte)));
-+}
-+
-+struct mem_region *page_region(struct page *page, int *index_out)
-+{
-+      int i;
-+      struct mem_region *region;
-+      struct page *map;
-+
-+      for(i = 0; i < NREGIONS; i++){
-+              region = regions[i];
-+              if(region == NULL) continue;
-+              map = region->mem_map;
-+              if((page >= map) && (page < &map[region->len >> PAGE_SHIFT])){
-+                      if(index_out != NULL) *index_out = i;
-+                      return(region);
-+              }
-+      }
-+      panic("No region found for page");
-+      return(NULL);
-+}
-+
-+unsigned long page_to_pfn(struct page *page)
-+{
-+      struct mem_region *region = page_region(page, NULL);
-+
-+      return(region->start_pfn + (page - (struct page *) region->mem_map));
-+}
-+
-+struct mem_region *pfn_to_region(unsigned long pfn, int *index_out)
-+{
-+      struct mem_region *region;
-+      int i;
-+
-+      for(i = 0; i < NREGIONS; i++){
-+              region = regions[i];
-+              if(region == NULL)
-+                      continue;
-+
-+              if((region->start_pfn <= pfn) &&
-+                 (region->start_pfn + (region->len >> PAGE_SHIFT) > pfn)){
-+                      if(index_out != NULL) 
-+                              *index_out = i;
-+                      return(region);
-+              }
-+      }
-+      return(NULL);
-+}
-+
-+struct page *pfn_to_page(unsigned long pfn)
-+{
-+      struct mem_region *region = pfn_to_region(pfn, NULL);
-+      struct page *mem_map = (struct page *) region->mem_map;
-+
-+      return(&mem_map[pfn - region->start_pfn]);
-+}
-+
-+unsigned long phys_to_pfn(unsigned long p)
-+{
-+      struct mem_region *region = regions[phys_region_index(p)];
-+
-+      return(region->start_pfn + (phys_addr(p) >> PAGE_SHIFT));
-+}
-+
-+unsigned long pfn_to_phys(unsigned long pfn)
-+{
-+      int n;
-+      struct mem_region *region = pfn_to_region(pfn, &n);
-+
-+      return(mk_phys((pfn - region->start_pfn) << PAGE_SHIFT, n));
-+}
-+
-+struct page *page_mem_map(struct page *page)
-+{
-+      return((struct page *) page_region(page, NULL)->mem_map);
-+}
-+
-+extern unsigned long region_pa(void *virt)
-+{
-+      struct mem_region *region;
-+      unsigned long addr = (unsigned long) virt;
-+      int i;
-+
-+      for(i = 0; i < NREGIONS; i++){
-+              region = regions[i];
-+              if(region == NULL) continue;
-+              if((region->start <= addr) && 
-+                 (addr <= region->start + region->len))
-+                      return(mk_phys(addr - region->start, i));
-+      }
-+      panic("region_pa : no region for virtual address");
-+      return(0);
-+}
-+
-+extern void *region_va(unsigned long phys)
-+{
-+      return((void *) (phys_region(phys)->start + phys_addr(phys)));
-+}
-+
-+unsigned long page_to_phys(struct page *page)
-+{
-+      int n;
-+      struct mem_region *region = page_region(page, &n);
-+      struct page *map = region->mem_map;
-+      return(mk_phys((page - map) << PAGE_SHIFT, n));
-+}
-+
-+struct page *phys_to_page(unsigned long phys)
-+{
-+      struct page *mem_map;
-+
-+      mem_map = phys_mem_map(phys);
-+      return(mem_map + (phys_offset(phys) >> PAGE_SHIFT));
-+}
-+
-+static int setup_mem_maps(void)
-+{
-+      struct mem_region *region;
-+      int i;
-+
-+      for(i = 0; i < NREGIONS; i++){
-+              region = regions[i];
-+              if((region != NULL) && (region->fd > 0)) init_maps(region);
-+      }
-+      return(0);
-+}
-+
-+__initcall(setup_mem_maps);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/mem_user.c um/arch/um/kernel/mem_user.c
---- orig/arch/um/kernel/mem_user.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/mem_user.c       2003-03-06 16:05:21.000000000 -0500
-@@ -0,0 +1,232 @@
-+/*
-+ * arch/um/kernel/mem_user.c
-+ *
-+ * BRIEF MODULE DESCRIPTION
-+ * user side memory routines for supporting IO memory inside user mode linux
-+ *
-+ * Copyright (C) 2001 RidgeRun, Inc.
-+ * Author: RidgeRun, Inc.
-+ *         Greg Lonnon glonnon@ridgerun.com or info@ridgerun.com
-+ *
-+ *  This program is free software; you can redistribute  it and/or modify it
-+ *  under  the terms of  the GNU General  Public License as published by the
-+ *  Free Software Foundation;  either version 2 of the  License, or (at your
-+ *  option) any later version.
-+ *
-+ *  THIS  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 <stdio.h>
-+#include <stdlib.h>
-+#include <stddef.h>
-+#include <stdarg.h>
-+#include <unistd.h>
-+#include <fcntl.h>
-+#include <errno.h>
-+#include <string.h>
-+#include <sys/stat.h>
-+#include <sys/types.h>
-+#include <sys/mman.h>
-+#include "kern_util.h"
-+#include "user.h"
-+#include "user_util.h"
-+#include "mem_user.h"
-+#include "init.h"
-+#include "os.h"
-+#include "tempfile.h"
-+
-+extern struct mem_region physmem_region;
-+
-+#define TEMPNAME_TEMPLATE "vm_file-XXXXXX"
-+
-+int create_mem_file(unsigned long len)
-+{
-+      int fd;
-+      char zero;
-+
-+      fd = make_tempfile(TEMPNAME_TEMPLATE, NULL, 1);
-+      if (fchmod(fd, 0777) < 0){
-+              perror("fchmod");
-+              exit(1);
-+      }
-+      if(os_seek_file(fd, len) < 0){
-+              perror("lseek");
-+              exit(1);
-+      }
-+      zero = 0;
-+      if(write(fd, &zero, 1) != 1){
-+              perror("write");
-+              exit(1);
-+      }
-+      if(fcntl(fd, F_SETFD, 1) != 0)
-+              perror("Setting FD_CLOEXEC failed");
-+      return(fd);
-+}
-+
-+int setup_region(struct mem_region *region, void *entry)
-+{
-+      void *loc, *start;
-+      char *driver;
-+      int err, offset;
-+
-+      if(region->start != -1){
-+              err = reserve_vm(region->start, 
-+                               region->start + region->len, entry);
-+              if(err){
-+                      printk("setup_region : failed to reserve "
-+                             "0x%x - 0x%x for driver '%s'\n",
-+                             region->start, 
-+                             region->start + region->len,
-+                             region->driver);
-+                      return(-1);
-+              }
-+      }
-+      else region->start = get_vm(region->len);
-+      if(region->start == 0){
-+              if(region->driver == NULL) driver = "physmem";
-+              else driver = region->driver;
-+              printk("setup_region : failed to find vm for "
-+                     "driver '%s' (length %d)\n", driver, region->len);
-+              return(-1);
-+      }
-+      if(region->start == uml_physmem){
-+              start = (void *) uml_reserved;
-+              offset = uml_reserved - uml_physmem;
-+      }
-+      else {
-+              start = (void *) region->start;
-+              offset = 0;
-+      }
-+
-+      loc = mmap(start, region->len - offset, PROT_READ | PROT_WRITE, 
-+                 MAP_SHARED | MAP_FIXED, region->fd, offset);
-+      if(loc != start){
-+              perror("Mapping memory");
-+              exit(1);
-+      }
-+      return(0);
-+}
-+
-+static int __init parse_iomem(char *str, int *add)
-+{
-+      struct stat64 buf;
-+      char *file, *driver;
-+      int fd;
-+
-+      driver = str;
-+      file = strchr(str,',');
-+      if(file == NULL){
-+              printf("parse_iomem : failed to parse iomem\n");
-+              return(1);
-+      }
-+      *file = '\0';
-+      file++;
-+      fd = os_open_file(file, of_rdwr(OPENFLAGS()), 0);
-+      if(fd < 0){
-+              printf("parse_iomem - Couldn't open io file, errno = %d\n", 
-+                     errno);
-+              return(1);
-+      }
-+      if(fstat64(fd, &buf) < 0) {
-+              printf("parse_iomem - cannot fstat file, errno = %d\n", errno);
-+              return(1);
-+      }
-+      add_iomem(driver, fd, buf.st_size);
-+      return(0);
-+}
-+
-+__uml_setup("iomem=", parse_iomem,
-+"iomem=<name>,<file>\n"
-+"    Configure <file> as an IO memory region named <name>.\n\n"
-+);
-+
-+#ifdef notdef
-+int logging = 0;
-+int logging_fd = -1;
-+
-+int logging_line = 0;
-+char logging_buf[256];
-+
-+void log(char *fmt, ...)
-+{
-+      va_list ap;
-+      struct timeval tv;
-+      struct openflags flags;
-+
-+      if(logging == 0) return;
-+      if(logging_fd < 0){
-+              flags = of_create(of_trunc(of_rdrw(OPENFLAGS())));
-+              logging_fd = os_open_file("log", flags, 0644);
-+      }
-+      gettimeofday(&tv, NULL);
-+      sprintf(logging_buf, "%d\t %u.%u  ", logging_line++, tv.tv_sec, 
-+              tv.tv_usec);
-+      va_start(ap, fmt);
-+      vsprintf(&logging_buf[strlen(logging_buf)], fmt, ap);
-+      va_end(ap);
-+      write(logging_fd, logging_buf, strlen(logging_buf));
-+}
-+#endif
-+
-+int map_memory(unsigned long virt, unsigned long phys, unsigned long len, 
-+             int r, int w, int x)
-+{
-+      struct mem_region *region = phys_region(phys);
-+
-+      return(os_map_memory((void *) virt, region->fd, phys_offset(phys), len,
-+                           r, w, x));
-+}
-+
-+int protect_memory(unsigned long addr, unsigned long len, int r, int w, int x,
-+                 int must_succeed)
-+{
-+      if(os_protect_memory((void *) addr, len, r, w, x) < 0){
-+                if(must_succeed)
-+                        panic("protect failed, errno = %d", errno);
-+                else return(-errno);
-+      }
-+      return(0);
-+}
-+
-+unsigned long find_iomem(char *driver, unsigned long *len_out)
-+{
-+      struct mem_region *region;
-+      int i, n;
-+
-+      n = nregions();
-+      for(i = 0; i < n; i++){
-+              region = regions[i];
-+              if(region == NULL) continue;
-+              if((region->driver != NULL) &&
-+                 !strcmp(region->driver, driver)){
-+                      *len_out = region->len;
-+                      return(region->start);
-+              }
-+      }
-+      *len_out = 0;
-+      return 0;
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/mprot.h um/arch/um/kernel/mprot.h
---- orig/arch/um/kernel/mprot.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/mprot.h  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __MPROT_H__
-+#define __MPROT_H__
-+
-+extern void no_access(unsigned long addr, unsigned int len);
-+
-+#endif
-diff -Naur -X ../exclude-files orig/arch/um/kernel/process.c um/arch/um/kernel/process.c
---- orig/arch/um/kernel/process.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/process.c        2003-04-23 20:36:15.000000000 -0400
-@@ -0,0 +1,286 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <unistd.h>
-+#include <signal.h>
-+#include <sched.h>
-+#include <errno.h>
-+#include <stdarg.h>
-+#include <fcntl.h>
-+#include <stdlib.h>
-+#include <setjmp.h>
-+#include <sys/time.h>
-+#include <sys/ptrace.h>
-+#include <sys/ioctl.h>
-+#include <sys/wait.h>
-+#include <sys/mman.h>
-+#include <asm/ptrace.h>
-+#include <asm/sigcontext.h>
-+#include <asm/unistd.h>
-+#include <asm/page.h>
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "process.h"
-+#include "signal_kern.h"
-+#include "signal_user.h"
-+#include "sysdep/ptrace.h"
-+#include "sysdep/sigcontext.h"
-+#include "irq_user.h"
-+#include "ptrace_user.h"
-+#include "time_user.h"
-+#include "init.h"
-+#include "os.h"
-+#include "uml-config.h"
-+#include "choose-mode.h"
-+#include "mode.h"
-+#ifdef UML_CONFIG_MODE_SKAS
-+#include "skas.h"
-+#include "skas_ptrace.h"
-+#endif
-+
-+void init_new_thread_stack(void *sig_stack, void (*usr1_handler)(int))
-+{
-+      int flags = 0, pages;
-+
-+      if(sig_stack != NULL){
-+              pages = (1 << UML_CONFIG_KERNEL_STACK_ORDER) - 2;
-+              set_sigstack(sig_stack, pages * page_size());
-+              flags = SA_ONSTACK;
-+      }
-+      if(usr1_handler) set_handler(SIGUSR1, usr1_handler, flags, -1);
-+}
-+
-+void init_new_thread_signals(int altstack)
-+{
-+      int flags = altstack ? SA_ONSTACK : 0;
-+
-+      set_handler(SIGSEGV, (__sighandler_t) sig_handler, flags,
-+                  SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1);
-+      set_handler(SIGTRAP, (__sighandler_t) sig_handler, flags, 
-+                  SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1);
-+      set_handler(SIGFPE, (__sighandler_t) sig_handler, flags, 
-+                  SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1);
-+      set_handler(SIGILL, (__sighandler_t) sig_handler, flags, 
-+                  SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1);
-+      set_handler(SIGBUS, (__sighandler_t) sig_handler, flags, 
-+                  SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1);
-+      set_handler(SIGWINCH, (__sighandler_t) sig_handler, flags, 
-+                  SIGUSR1, SIGIO, SIGWINCH, SIGALRM, SIGVTALRM, -1);
-+      set_handler(SIGUSR2, (__sighandler_t) sig_handler, 
-+                  SA_NOMASK | flags, -1);
-+      signal(SIGHUP, SIG_IGN);
-+
-+      init_irq_signals(altstack);
-+}
-+
-+struct tramp {
-+      int (*tramp)(void *);
-+      void *tramp_data;
-+      unsigned long temp_stack;
-+      int flags;
-+      int pid;
-+};
-+
-+/* See above for why sigkill is here */
-+
-+int sigkill = SIGKILL;
-+
-+int outer_tramp(void *arg)
-+{
-+      struct tramp *t;
-+      int sig = sigkill;
-+
-+      t = arg;
-+      t->pid = clone(t->tramp, (void *) t->temp_stack + page_size()/2,
-+                     t->flags, t->tramp_data);
-+      if(t->pid > 0) wait_for_stop(t->pid, SIGSTOP, PTRACE_CONT, NULL);
-+      kill(os_getpid(), sig);
-+      _exit(0);
-+}
-+
-+int start_fork_tramp(void *thread_arg, unsigned long temp_stack, 
-+                   int clone_flags, int (*tramp)(void *))
-+{
-+      struct tramp arg;
-+      unsigned long sp;
-+      int new_pid, status, err;
-+
-+      /* The trampoline will run on the temporary stack */
-+      sp = stack_sp(temp_stack);
-+
-+      clone_flags |= CLONE_FILES | SIGCHLD;
-+
-+      arg.tramp = tramp;
-+      arg.tramp_data = thread_arg;
-+      arg.temp_stack = temp_stack;
-+      arg.flags = clone_flags;
-+
-+      /* Start the process and wait for it to kill itself */
-+      new_pid = clone(outer_tramp, (void *) sp, clone_flags, &arg);
-+      if(new_pid < 0) return(-errno);
-+      while((err = waitpid(new_pid, &status, 0) < 0) && (errno == EINTR)) ;
-+      if(err < 0) panic("Waiting for outer trampoline failed - errno = %d", 
-+                        errno);
-+      if(!WIFSIGNALED(status) || (WTERMSIG(status) != SIGKILL))
-+              panic("outer trampoline didn't exit with SIGKILL");
-+
-+      return(arg.pid);
-+}
-+
-+void suspend_new_thread(int fd)
-+{
-+      char c;
-+
-+      os_stop_process(os_getpid());
-+
-+      if(read(fd, &c, sizeof(c)) != sizeof(c))
-+              panic("read failed in suspend_new_thread");
-+}
-+
-+static int ptrace_child(void *arg)
-+{
-+      int pid = os_getpid();
-+
-+      if(ptrace(PTRACE_TRACEME, 0, 0, 0) < 0){
-+              perror("ptrace");
-+              os_kill_process(pid, 0);
-+      }
-+      os_stop_process(pid);
-+      _exit(os_getpid() == pid);
-+}
-+
-+static int start_ptraced_child(void **stack_out)
-+{
-+      void *stack;
-+      unsigned long sp;
-+      int pid, n, status;
-+      
-+      stack = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC,
-+                   MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-+      if(stack == MAP_FAILED)
-+              panic("check_ptrace : mmap failed, errno = %d", errno);
-+      sp = (unsigned long) stack + PAGE_SIZE - sizeof(void *);
-+      pid = clone(ptrace_child, (void *) sp, SIGCHLD, NULL);
-+      if(pid < 0)
-+              panic("check_ptrace : clone failed, errno = %d", errno);
-+      n = waitpid(pid, &status, WUNTRACED);
-+      if(n < 0)
-+              panic("check_ptrace : wait failed, errno = %d", errno);
-+      if(!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGSTOP))
-+              panic("check_ptrace : expected SIGSTOP, got status = %d",
-+                    status);
-+
-+      *stack_out = stack;
-+      return(pid);
-+}
-+
-+static void stop_ptraced_child(int pid, void *stack, int exitcode)
-+{
-+      int status, n;
-+
-+      if(ptrace(PTRACE_CONT, pid, 0, 0) < 0)
-+              panic("check_ptrace : ptrace failed, errno = %d", errno);
-+      n = waitpid(pid, &status, 0);
-+      if(!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode))
-+              panic("check_ptrace : child exited with status 0x%x", status);
-+
-+      if(munmap(stack, PAGE_SIZE) < 0)
-+              panic("check_ptrace : munmap failed, errno = %d", errno);
-+}
-+
-+void __init check_ptrace(void)
-+{
-+      void *stack;
-+      int pid, syscall, n, status;
-+
-+      printk("Checking that ptrace can change system call numbers...");
-+      pid = start_ptraced_child(&stack);
-+
-+      while(1){
-+              if(ptrace(PTRACE_SYSCALL, pid, 0, 0) < 0)
-+                      panic("check_ptrace : ptrace failed, errno = %d", 
-+                            errno);
-+              n = waitpid(pid, &status, WUNTRACED);
-+              if(n < 0)
-+                      panic("check_ptrace : wait failed, errno = %d", errno);
-+              if(!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGTRAP))
-+                      panic("check_ptrace : expected SIGTRAP, "
-+                            "got status = %d", status);
-+              
-+              syscall = ptrace(PTRACE_PEEKUSER, pid, PT_SYSCALL_NR_OFFSET,
-+                               0);
-+              if(syscall == __NR_getpid){
-+                      n = ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_NR_OFFSET,
-+                                 __NR_getppid);
-+                      if(n < 0)
-+                              panic("check_ptrace : failed to modify system "
-+                                    "call, errno = %d", errno);
-+                      break;
-+              }
-+      }
-+      stop_ptraced_child(pid, stack, 0);
-+      printk("OK\n");
-+}
-+
-+int run_kernel_thread(int (*fn)(void *), void *arg, void **jmp_ptr)
-+{
-+      jmp_buf buf;
-+      int n;
-+
-+      *jmp_ptr = &buf;
-+      n = setjmp(buf);
-+      if(n != 0)
-+              return(n);
-+      (*fn)(arg);
-+      return(0);
-+}
-+
-+int can_do_skas(void)
-+{
-+#ifdef UML_CONFIG_MODE_SKAS
-+      struct ptrace_faultinfo fi;
-+      void *stack;
-+      int pid, n, ret = 1;
-+
-+      printf("Checking for the skas3 patch in the host...");
-+      pid = start_ptraced_child(&stack);
-+
-+      n = ptrace(PTRACE_FAULTINFO, pid, 0, &fi);
-+      if(n < 0){
-+              if(errno == EIO)
-+                      printf("not found\n");
-+              else printf("No (unexpected errno - %d)\n", errno);
-+              ret = 0;
-+      }
-+      else printf("found\n");
-+
-+      init_registers(pid);
-+      stop_ptraced_child(pid, stack, 1);
-+
-+      printf("Checking for /proc/mm...");
-+      if(access("/proc/mm", W_OK)){
-+              printf("not found\n");
-+              ret = 0;
-+      }
-+      else printf("found\n");
-+
-+      return(ret);
-+#else
-+      return(0);
-+#endif
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/process_kern.c um/arch/um/kernel/process_kern.c
---- orig/arch/um/kernel/process_kern.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/process_kern.c   2003-04-16 16:02:09.000000000 -0400
-@@ -0,0 +1,391 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/config.h"
-+#include "linux/kernel.h"
-+#include "linux/sched.h"
-+#include "linux/interrupt.h"
-+#include "linux/mm.h"
-+#include "linux/slab.h"
-+#include "linux/utsname.h"
-+#include "linux/fs.h"
-+#include "linux/utime.h"
-+#include "linux/smp_lock.h"
-+#include "linux/module.h"
-+#include "linux/init.h"
-+#include "linux/capability.h"
-+#include "asm/unistd.h"
-+#include "asm/mman.h"
-+#include "asm/segment.h"
-+#include "asm/stat.h"
-+#include "asm/pgtable.h"
-+#include "asm/processor.h"
-+#include "asm/pgalloc.h"
-+#include "asm/spinlock.h"
-+#include "asm/uaccess.h"
-+#include "asm/user.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "kern.h"
-+#include "signal_kern.h"
-+#include "signal_user.h"
-+#include "init.h"
-+#include "irq_user.h"
-+#include "mem_user.h"
-+#include "time_user.h"
-+#include "tlb.h"
-+#include "frame_kern.h"
-+#include "sigcontext.h"
-+#include "2_5compat.h"
-+#include "os.h"
-+#include "mode.h"
-+#include "mode_kern.h"
-+#include "choose-mode.h"
-+
-+/* This is a per-cpu array.  A processor only modifies its entry and it only
-+ * cares about its entry, so it's OK if another processor is modifying its
-+ * entry.
-+ */
-+struct cpu_task cpu_tasks[NR_CPUS] = { [0 ... NR_CPUS - 1] = { -1, NULL } };
-+
-+struct task_struct *get_task(int pid, int require)
-+{
-+        struct task_struct *ret;
-+
-+        read_lock(&tasklist_lock);
-+      ret = find_task_by_pid(pid);
-+        read_unlock(&tasklist_lock);
-+
-+        if(require && (ret == NULL)) panic("get_task couldn't find a task\n");
-+        return(ret);
-+}
-+
-+int external_pid(void *t)
-+{
-+      struct task_struct *task = t ? t : current;
-+
-+      return(CHOOSE_MODE_PROC(external_pid_tt, external_pid_skas, task));
-+}
-+
-+int pid_to_processor_id(int pid)
-+{
-+      int i;
-+
-+      for(i = 0; i < smp_num_cpus; i++){
-+              if(cpu_tasks[i].pid == pid) return(i);
-+      }
-+      return(-1);
-+}
-+
-+void free_stack(unsigned long stack, int order)
-+{
-+      free_pages(stack, order);
-+}
-+
-+unsigned long alloc_stack(int order, int atomic)
-+{
-+      unsigned long page;
-+      int flags = GFP_KERNEL;
-+
-+      if(atomic) flags |= GFP_ATOMIC;
-+      if((page = __get_free_pages(flags, order)) == 0)
-+              return(0);
-+      stack_protections(page);
-+      return(page);
-+}
-+
-+int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
-+{
-+      int pid;
-+
-+      current->thread.request.u.thread.proc = fn;
-+      current->thread.request.u.thread.arg = arg;
-+      pid = do_fork(CLONE_VM | flags, 0, NULL, 0);
-+      if(pid < 0) panic("do_fork failed in kernel_thread");
-+      return(pid);
-+}
-+
-+void switch_mm(struct mm_struct *prev, struct mm_struct *next, 
-+             struct task_struct *tsk, unsigned cpu)
-+{
-+      if (prev != next) 
-+              clear_bit(cpu, &prev->cpu_vm_mask);
-+      set_bit(cpu, &next->cpu_vm_mask);
-+}
-+
-+void set_current(void *t)
-+{
-+      struct task_struct *task = t;
-+
-+      cpu_tasks[task->processor] = ((struct cpu_task) 
-+              { external_pid(task), task });
-+}
-+
-+void *_switch_to(void *prev, void *next)
-+{
-+      return(CHOOSE_MODE(_switch_to_tt(prev, next), 
-+                         _switch_to_skas(prev, next)));
-+}
-+
-+void interrupt_end(void)
-+{
-+      if(current->need_resched) schedule();
-+      if(current->sigpending != 0) do_signal(0);
-+}
-+
-+void release_thread(struct task_struct *task)
-+{
-+      CHOOSE_MODE(release_thread_tt(task), release_thread_skas(task));
-+}
-+
-+void exit_thread(void)
-+{
-+      CHOOSE_MODE(exit_thread_tt(), exit_thread_skas());
-+      unprotect_stack((unsigned long) current);
-+}
-+
-+void *get_current(void)
-+{
-+      return(current);
-+}
-+
-+int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
-+              unsigned long stack_top, struct task_struct * p, 
-+              struct pt_regs *regs)
-+{
-+      p->thread = (struct thread_struct) INIT_THREAD;
-+      p->thread.kernel_stack = (unsigned long) p + 2 * PAGE_SIZE;
-+
-+      return(CHOOSE_MODE_PROC(copy_thread_tt, copy_thread_skas, nr, 
-+                              clone_flags, sp, stack_top, p, regs));
-+}
-+
-+void initial_thread_cb(void (*proc)(void *), void *arg)
-+{
-+      int save_kmalloc_ok = kmalloc_ok;
-+
-+      kmalloc_ok = 0;
-+      CHOOSE_MODE_PROC(initial_thread_cb_tt, initial_thread_cb_skas, proc, 
-+                       arg);
-+      kmalloc_ok = save_kmalloc_ok;
-+}
-+
-+unsigned long stack_sp(unsigned long page)
-+{
-+      return(page + PAGE_SIZE - sizeof(void *));
-+}
-+
-+int current_pid(void)
-+{
-+      return(current->pid);
-+}
-+
-+void cpu_idle(void)
-+{
-+      CHOOSE_MODE(init_idle_tt(), init_idle_skas());
-+
-+      atomic_inc(&init_mm.mm_count);
-+      current->mm = &init_mm;
-+      current->active_mm = &init_mm;
-+
-+      while(1){
-+              /* endless idle loop with no priority at all */
-+              SET_PRI(current);
-+
-+              /*
-+               * although we are an idle CPU, we do not want to
-+               * get into the scheduler unnecessarily.
-+               */
-+              if (current->need_resched) {
-+                      schedule();
-+                      check_pgt_cache();
-+              }
-+              idle_sleep(10);
-+      }
-+}
-+
-+int page_size(void)
-+{
-+      return(PAGE_SIZE);
-+}
-+
-+int page_mask(void)
-+{
-+      return(PAGE_MASK);
-+}
-+
-+void *um_virt_to_phys(struct task_struct *task, unsigned long addr, 
-+                    pte_t *pte_out)
-+{
-+      pgd_t *pgd;
-+      pmd_t *pmd;
-+      pte_t *pte;
-+
-+      if(task->mm == NULL) 
-+              return(ERR_PTR(-EINVAL));
-+      pgd = pgd_offset(task->mm, addr);
-+      pmd = pmd_offset(pgd, addr);
-+      if(!pmd_present(*pmd)) 
-+              return(ERR_PTR(-EINVAL));
-+      pte = pte_offset(pmd, addr);
-+      if(!pte_present(*pte)) 
-+              return(ERR_PTR(-EINVAL));
-+      if(pte_out != NULL)
-+              *pte_out = *pte;
-+      return((void *) (pte_val(*pte) & PAGE_MASK) + (addr & ~PAGE_MASK));
-+}
-+
-+char *current_cmd(void)
-+{
-+#if defined(CONFIG_SMP) || defined(CONFIG_HIGHMEM)
-+      return("(Unknown)");
-+#else
-+      void *addr = um_virt_to_phys(current, current->mm->arg_start, NULL);
-+      return IS_ERR(addr) ? "(Unknown)": __va((unsigned long) addr);
-+#endif
-+}
-+
-+void force_sigbus(void)
-+{
-+      printk(KERN_ERR "Killing pid %d because of a lack of memory\n", 
-+             current->pid);
-+      lock_kernel();
-+      sigaddset(&current->pending.signal, SIGBUS);
-+      recalc_sigpending(current);
-+      current->flags |= PF_SIGNALED;
-+      do_exit(SIGBUS | 0x80);
-+}
-+
-+void dump_thread(struct pt_regs *regs, struct user *u)
-+{
-+}
-+
-+void enable_hlt(void)
-+{
-+      panic("enable_hlt");
-+}
-+
-+void disable_hlt(void)
-+{
-+      panic("disable_hlt");
-+}
-+
-+extern int signal_frame_size;
-+
-+void *um_kmalloc(int size)
-+{
-+      return(kmalloc(size, GFP_KERNEL));
-+}
-+
-+void *um_kmalloc_atomic(int size)
-+{
-+      return(kmalloc(size, GFP_ATOMIC));
-+}
-+
-+unsigned long get_fault_addr(void)
-+{
-+      return((unsigned long) current->thread.fault_addr);
-+}
-+
-+EXPORT_SYMBOL(get_fault_addr);
-+
-+void not_implemented(void)
-+{
-+      printk(KERN_DEBUG "Something isn't implemented in here\n");
-+}
-+
-+EXPORT_SYMBOL(not_implemented);
-+
-+int user_context(unsigned long sp)
-+{
-+      unsigned long stack;
-+
-+      stack = sp & (PAGE_MASK << CONFIG_KERNEL_STACK_ORDER);
-+      stack += 2 * PAGE_SIZE;
-+      return(stack != current->thread.kernel_stack);
-+}
-+
-+extern void remove_umid_dir(void);
-+
-+__uml_exitcall(remove_umid_dir);
-+
-+extern exitcall_t __uml_exitcall_begin, __uml_exitcall_end;
-+
-+void do_uml_exitcalls(void)
-+{
-+      exitcall_t *call;
-+
-+      call = &__uml_exitcall_end;
-+      while (--call >= &__uml_exitcall_begin)
-+              (*call)();
-+}
-+
-+char *uml_strdup(char *string)
-+{
-+      char *new;
-+
-+      new = kmalloc(strlen(string) + 1, GFP_KERNEL);
-+      if(new == NULL) return(NULL);
-+      strcpy(new, string);
-+      return(new);
-+}
-+
-+void *get_init_task(void)
-+{
-+      return(&init_task_union.task);
-+}
-+
-+int copy_to_user_proc(void *to, void *from, int size)
-+{
-+      return(copy_to_user(to, from, size));
-+}
-+
-+int copy_from_user_proc(void *to, void *from, int size)
-+{
-+      return(copy_from_user(to, from, size));
-+}
-+
-+int clear_user_proc(void *buf, int size)
-+{
-+      return(clear_user(buf, size));
-+}
-+
-+int strlen_user_proc(char *str)
-+{
-+      return(strlen_user(str));
-+}
-+
-+int smp_sigio_handler(void)
-+{
-+#ifdef CONFIG_SMP
-+      int cpu = current->processor;
-+
-+      IPI_handler(cpu);
-+      if(cpu != 0)
-+              return(1);
-+#endif
-+      return(0);
-+}
-+
-+int um_in_interrupt(void)
-+{
-+      return(in_interrupt());
-+}
-+
-+int cpu(void)
-+{
-+        return(current->processor);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/ptrace.c um/arch/um/kernel/ptrace.c
---- orig/arch/um/kernel/ptrace.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/ptrace.c 2002-12-28 22:50:21.000000000 -0500
-@@ -0,0 +1,325 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/sched.h"
-+#include "linux/mm.h"
-+#include "linux/errno.h"
-+#include "linux/smp_lock.h"
-+#ifdef CONFIG_PROC_MM
-+#include "linux/proc_mm.h"
-+#endif
-+#include "asm/ptrace.h"
-+#include "asm/uaccess.h"
-+#include "kern_util.h"
-+#include "ptrace_user.h"
-+
-+/*
-+ * Called by kernel/ptrace.c when detaching..
-+ */
-+void ptrace_disable(struct task_struct *child)
-+{ 
-+}
-+
-+extern long do_mmap2(struct task_struct *task, unsigned long addr, 
-+                   unsigned long len, unsigned long prot, 
-+                   unsigned long flags, unsigned long fd,
-+                   unsigned long pgoff);
-+
-+int sys_ptrace(long request, long pid, long addr, long data)
-+{
-+      struct task_struct *child;
-+      int i, ret;
-+
-+      lock_kernel();
-+      ret = -EPERM;
-+      if (request == PTRACE_TRACEME) {
-+              /* are we already being traced? */
-+              if (current->ptrace & PT_PTRACED)
-+                      goto out;
-+              /* set the ptrace bit in the process flags. */
-+              current->ptrace |= PT_PTRACED;
-+              ret = 0;
-+              goto out;
-+      }
-+      ret = -ESRCH;
-+      read_lock(&tasklist_lock);
-+      child = find_task_by_pid(pid);
-+      if (child)
-+              get_task_struct(child);
-+      read_unlock(&tasklist_lock);
-+      if (!child)
-+              goto out;
-+
-+      ret = -EPERM;
-+      if (pid == 1)           /* you may not mess with init */
-+              goto out_tsk;
-+
-+      if (request == PTRACE_ATTACH) {
-+              ret = ptrace_attach(child);
-+              goto out_tsk;
-+      }
-+
-+      ret = ptrace_check_attach(child, request == PTRACE_KILL);
-+      if (ret < 0)
-+              goto out_tsk;
-+
-+      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_PEEKDATA: {
-+              unsigned long tmp;
-+              int copied;
-+
-+              ret = -EIO;
-+              copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
-+              if (copied != sizeof(tmp))
-+                      break;
-+              ret = put_user(tmp,(unsigned long *) data);
-+              break;
-+      }
-+
-+      /* read the word at location addr in the USER area. */
-+      case PTRACE_PEEKUSR: {
-+              unsigned long tmp;
-+
-+              ret = -EIO;
-+              if ((addr & 3) || addr < 0) 
-+                      break;
-+
-+              tmp = 0;  /* Default return condition */
-+              if(addr < FRAME_SIZE_OFFSET){
-+                      tmp = getreg(child, addr);
-+              }
-+              else if((addr >= offsetof(struct user, u_debugreg[0])) &&
-+                      (addr <= offsetof(struct user, u_debugreg[7]))){
-+                      addr -= offsetof(struct user, u_debugreg[0]);
-+                      addr = addr >> 2;
-+                      tmp = child->thread.arch.debugregs[addr];
-+              }
-+              ret = put_user(tmp, (unsigned long *) data);
-+              break;
-+      }
-+
-+      /* when I and D space are separate, this will have to be fixed. */
-+      case PTRACE_POKETEXT: /* write the word at location addr. */
-+      case PTRACE_POKEDATA:
-+              ret = -EIO;
-+              if (access_process_vm(child, addr, &data, sizeof(data), 
-+                                    1) != sizeof(data))
-+                      break;
-+              ret = 0;
-+              break;
-+
-+      case PTRACE_POKEUSR: /* write the word at location addr in the USER area */
-+              ret = -EIO;
-+              if ((addr & 3) || addr < 0)
-+                      break;
-+
-+              if (addr < FRAME_SIZE_OFFSET) {
-+                      ret = putreg(child, addr, data);
-+                      break;
-+              }
-+              else if((addr >= offsetof(struct user, u_debugreg[0])) &&
-+                      (addr <= offsetof(struct user, u_debugreg[7]))){
-+                        addr -= offsetof(struct user, u_debugreg[0]);
-+                        addr = addr >> 2;
-+                        if((addr == 4) || (addr == 5)) break;
-+                        child->thread.arch.debugregs[addr] = data;
-+                        ret = 0;
-+              }
-+
-+              break;
-+
-+      case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */
-+      case PTRACE_CONT: { /* restart after signal. */
-+              ret = -EIO;
-+              if ((unsigned long) data > _NSIG)
-+                      break;
-+              if (request == PTRACE_SYSCALL)
-+                      child->ptrace |= PT_TRACESYS;
-+              else
-+                      child->ptrace &= ~PT_TRACESYS;
-+              child->exit_code = data;
-+              wake_up_process(child);
-+              ret = 0;
-+              break;
-+      }
-+
-+/*
-+ * 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: {
-+              ret = 0;
-+              if (child->state == TASK_ZOMBIE)        /* already dead */
-+                      break;
-+              child->exit_code = SIGKILL;
-+              wake_up_process(child);
-+              break;
-+      }
-+
-+      case PTRACE_SINGLESTEP: {  /* set the trap flag. */
-+              ret = -EIO;
-+              if ((unsigned long) data > _NSIG)
-+                      break;
-+              child->ptrace &= ~PT_TRACESYS;
-+              child->ptrace |= PT_DTRACE;
-+              child->exit_code = data;
-+              /* give it a chance to run. */
-+              wake_up_process(child);
-+              ret = 0;
-+              break;
-+      }
-+
-+      case PTRACE_DETACH:
-+              /* detach a process that was attached. */
-+              ret = ptrace_detach(child, data);
-+              break;
-+
-+#ifdef PTRACE_GETREGS
-+      case PTRACE_GETREGS: { /* Get all gp regs from the child. */
-+              if (!access_ok(VERIFY_WRITE, (unsigned long *)data, 
-+                             FRAME_SIZE_OFFSET)) {
-+                      ret = -EIO;
-+                      break;
-+              }
-+              for ( i = 0; i < FRAME_SIZE_OFFSET; i += sizeof(long) ) {
-+                      __put_user(getreg(child, i), (unsigned long *) data);
-+                      data += sizeof(long);
-+              }
-+              ret = 0;
-+              break;
-+      }
-+#endif
-+#ifdef PTRACE_SETREGS
-+      case PTRACE_SETREGS: { /* Set all gp regs in the child. */
-+              unsigned long tmp = 0;
-+              if (!access_ok(VERIFY_READ, (unsigned *)data, 
-+                             FRAME_SIZE_OFFSET)) {
-+                      ret = -EIO;
-+                      break;
-+              }
-+              for ( i = 0; i < FRAME_SIZE_OFFSET; i += sizeof(long) ) {
-+                      __get_user(tmp, (unsigned long *) data);
-+                      putreg(child, i, tmp);
-+                      data += sizeof(long);
-+              }
-+              ret = 0;
-+              break;
-+      }
-+#endif
-+#ifdef PTRACE_GETFPREGS
-+      case PTRACE_GETFPREGS: /* Get the child FPU state. */
-+              ret = get_fpregs(data, child);
-+              break;
-+#endif
-+#ifdef PTRACE_SETFPREGS
-+      case PTRACE_SETFPREGS: /* Set the child FPU state. */
-+              ret = set_fpregs(data, child);
-+              break;
-+#endif
-+#ifdef PTRACE_GETFPXREGS
-+      case PTRACE_GETFPXREGS: /* Get the child FPU state. */
-+              ret = get_fpxregs(data, child);
-+              break;
-+#endif
-+#ifdef PTRACE_SETFPXREGS
-+      case PTRACE_SETFPXREGS: /* Set the child FPU state. */
-+              ret = set_fpxregs(data, child);
-+              break;
-+#endif
-+      case PTRACE_FAULTINFO: {
-+              struct ptrace_faultinfo fault;
-+
-+              fault = ((struct ptrace_faultinfo) 
-+                      { .is_write     = child->thread.err,
-+                        .addr         = child->thread.cr2 });
-+              ret = copy_to_user((unsigned long *) data, &fault, 
-+                                 sizeof(fault));
-+              if(ret)
-+                      break;
-+              break;
-+      }
-+      case PTRACE_SIGPENDING:
-+              ret = copy_to_user((unsigned long *) data, 
-+                                 &child->pending.signal,
-+                                 sizeof(child->pending.signal));
-+              break;
-+
-+      case PTRACE_LDT: {
-+              struct ptrace_ldt ldt;
-+
-+              if(copy_from_user(&ldt, (unsigned long *) data, 
-+                                sizeof(ldt))){
-+                      ret = -EIO;
-+                      break;
-+              }
-+
-+              /* This one is confusing, so just punt and return -EIO for 
-+               * now
-+               */
-+              ret = -EIO;
-+              break;
-+      }
-+#ifdef CONFIG_PROC_MM
-+      case PTRACE_SWITCH_MM: {
-+              struct mm_struct *old = child->mm;
-+              struct mm_struct *new = proc_mm_get_mm(data);
-+
-+              if(IS_ERR(new)){
-+                      ret = PTR_ERR(new);
-+                      break;
-+              }
-+
-+              atomic_inc(&new->mm_users);
-+              child->mm = new;
-+              child->active_mm = new;
-+              mmput(old);
-+              ret = 0;
-+              break;
-+      }
-+#endif
-+      default:
-+              ret = -EIO;
-+              break;
-+      }
-+ out_tsk:
-+      free_task_struct(child);
-+ out:
-+      unlock_kernel();
-+      return ret;
-+}
-+
-+void syscall_trace(void)
-+{
-+      if ((current->ptrace & (PT_PTRACED|PT_TRACESYS))
-+          != (PT_PTRACED|PT_TRACESYS))
-+              return;
-+      current->exit_code = SIGTRAP;
-+      current->state = TASK_STOPPED;
-+      notify_parent(current, SIGCHLD);
-+      schedule();
-+      /*
-+       * this isn't the same as continuing with a signal, but it will do
-+       * for normal use.  strace only continues with a signal if the
-+       * stopping signal is not SIGTRAP.  -brl
-+       */
-+      if (current->exit_code) {
-+              send_sig(current->exit_code, current, 1);
-+              current->exit_code = 0;
-+      }
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/reboot.c um/arch/um/kernel/reboot.c
---- orig/arch/um/kernel/reboot.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/reboot.c 2002-12-30 20:57:42.000000000 -0500
-@@ -0,0 +1,71 @@
-+/* 
-+ * Copyright (C) 2000, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/sched.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "kern.h"
-+#include "os.h"
-+#include "mode.h"
-+#include "choose-mode.h"
-+
-+#ifdef CONFIG_SMP
-+static void kill_idlers(int me)
-+{
-+      struct task_struct *p;
-+      int i;
-+
-+      for(i = 0; i < sizeof(init_tasks)/sizeof(init_tasks[0]); i++){
-+              p = init_tasks[i];
-+              if((p != NULL) && (p->thread.mode.tt.extern_pid != me) &&
-+                 (p->thread.mode.tt.extern_pid != -1))
-+                      os_kill_process(p->thread.mode.tt.extern_pid, 0);
-+      }
-+}
-+#endif
-+
-+static void kill_off_processes(void)
-+{
-+      CHOOSE_MODE(kill_off_processes_tt(), kill_off_processes_skas());
-+#ifdef CONFIG_SMP
-+      kill_idlers(os_getpid());
-+#endif
-+}
-+
-+void uml_cleanup(void)
-+{
-+      kill_off_processes();
-+      do_uml_exitcalls();
-+}
-+
-+void machine_restart(char * __unused)
-+{
-+      do_uml_exitcalls();
-+      kill_off_processes();
-+      CHOOSE_MODE(reboot_tt(), reboot_skas());
-+}
-+
-+void machine_power_off(void)
-+{
-+      do_uml_exitcalls();
-+      kill_off_processes();
-+      CHOOSE_MODE(halt_tt(), halt_skas());
-+}
-+
-+void machine_halt(void)
-+{
-+      machine_power_off();
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/resource.c um/arch/um/kernel/resource.c
---- orig/arch/um/kernel/resource.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/resource.c       2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,23 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/pci.h"
-+
-+unsigned long resource_fixup(struct pci_dev * dev, struct resource * res,
-+                           unsigned long start, unsigned long size)
-+{
-+      return start;
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/sigio_kern.c um/arch/um/kernel/sigio_kern.c
---- orig/arch/um/kernel/sigio_kern.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/sigio_kern.c     2003-05-11 18:34:01.000000000 -0400
-@@ -0,0 +1,57 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/kernel.h"
-+#include "linux/list.h"
-+#include "linux/slab.h"
-+#include "asm/irq.h"
-+#include "init.h"
-+#include "sigio.h"
-+#include "irq_user.h"
-+#include "irq_kern.h"
-+
-+/* Protected by sigio_lock() called from write_sigio_workaround */
-+static int sigio_irq_fd = -1;
-+
-+void sigio_interrupt(int irq, void *data, struct pt_regs *unused)
-+{
-+      read_sigio_fd(sigio_irq_fd);
-+      reactivate_fd(sigio_irq_fd, SIGIO_WRITE_IRQ);
-+}
-+
-+int write_sigio_irq(int fd)
-+{
-+      if(um_request_irq(SIGIO_WRITE_IRQ, fd, IRQ_READ, sigio_interrupt,
-+                        SA_INTERRUPT | SA_SAMPLE_RANDOM, "write sigio", 
-+                        NULL)){
-+              printk("write_sigio_irq : um_request_irq failed\n");
-+              return(-1);
-+      }
-+      sigio_irq_fd = fd;
-+      return(0);
-+}
-+
-+static spinlock_t sigio_spinlock = SPIN_LOCK_UNLOCKED;
-+
-+void sigio_lock(void)
-+{
-+      spin_lock(&sigio_spinlock);
-+}
-+
-+void sigio_unlock(void)
-+{
-+      spin_unlock(&sigio_spinlock);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/sigio_user.c um/arch/um/kernel/sigio_user.c
---- orig/arch/um/kernel/sigio_user.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/sigio_user.c     2002-12-29 23:36:35.000000000 -0500
-@@ -0,0 +1,440 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <unistd.h>
-+#include <stdlib.h>
-+#include <termios.h>
-+#include <pty.h>
-+#include <fcntl.h>
-+#include <signal.h>
-+#include <errno.h>
-+#include <string.h>
-+#include <sched.h>
-+#include <sys/socket.h>
-+#include <sys/poll.h>
-+#include "init.h"
-+#include "user.h"
-+#include "kern_util.h"
-+#include "sigio.h"
-+#include "helper.h"
-+#include "os.h"
-+
-+/* Changed during early boot */
-+int pty_output_sigio = 0;
-+int pty_close_sigio = 0;
-+
-+/* Used as a flag during SIGIO testing early in boot */
-+static int got_sigio = 0;
-+
-+void __init handler(int sig)
-+{
-+      got_sigio = 1;
-+}
-+
-+struct openpty_arg {
-+      int master;
-+      int slave;
-+      int err;
-+};
-+
-+static void openpty_cb(void *arg)
-+{
-+      struct openpty_arg *info = arg;
-+
-+      info->err = 0;
-+      if(openpty(&info->master, &info->slave, NULL, NULL, NULL))
-+              info->err = errno;
-+}
-+
-+void __init check_one_sigio(void (*proc)(int, int))
-+{
-+      struct sigaction old, new;
-+      struct termios tt;
-+      struct openpty_arg pty = { .master = -1, .slave = -1 };
-+      int master, slave, flags;
-+
-+      initial_thread_cb(openpty_cb, &pty);
-+      if(pty.err){
-+              printk("openpty failed, errno = %d\n", pty.err);
-+              return;
-+      }
-+
-+      master = pty.master;
-+      slave = pty.slave;
-+
-+      if((master == -1) || (slave == -1)){
-+              printk("openpty failed to allocate a pty\n");
-+              return;
-+      }
-+
-+      if(tcgetattr(master, &tt) < 0)
-+              panic("check_sigio : tcgetattr failed, errno = %d\n", errno);
-+      cfmakeraw(&tt);
-+      if(tcsetattr(master, TCSADRAIN, &tt) < 0)
-+              panic("check_sigio : tcsetattr failed, errno = %d\n", errno);
-+
-+      if((flags = fcntl(master, F_GETFL)) < 0)
-+              panic("tty_fds : fcntl F_GETFL failed, errno = %d\n", errno);
-+
-+      if((fcntl(master, F_SETFL, flags | O_NONBLOCK | O_ASYNC) < 0) ||
-+         (fcntl(master, F_SETOWN, os_getpid()) < 0))
-+              panic("check_sigio : fcntl F_SETFL or F_SETOWN failed, "
-+                    "errno = %d\n", errno);
-+
-+      if((fcntl(slave, F_SETFL, flags | O_NONBLOCK) < 0))
-+              panic("check_sigio : fcntl F_SETFL failed, errno = %d\n", 
-+                    errno);
-+
-+      if(sigaction(SIGIO, NULL, &old) < 0)
-+              panic("check_sigio : sigaction 1 failed, errno = %d\n", errno);
-+      new = old;
-+      new.sa_handler = handler;
-+      if(sigaction(SIGIO, &new, NULL) < 0)
-+              panic("check_sigio : sigaction 2 failed, errno = %d\n", errno);
-+
-+      got_sigio = 0;
-+      (*proc)(master, slave);
-+              
-+      close(master);
-+      close(slave);
-+
-+      if(sigaction(SIGIO, &old, NULL) < 0)
-+              panic("check_sigio : sigaction 3 failed, errno = %d\n", errno);
-+}
-+
-+static void tty_output(int master, int slave)
-+{
-+      int n;
-+      char buf[512];
-+
-+      printk("Checking that host ptys support output SIGIO...");
-+
-+      memset(buf, 0, sizeof(buf));
-+      while(write(master, buf, sizeof(buf)) > 0) ;
-+      if(errno != EAGAIN)
-+              panic("check_sigio : write failed, errno = %d\n", errno);
-+
-+      while(((n = read(slave, buf, sizeof(buf))) > 0) && !got_sigio) ;
-+
-+      if(got_sigio){
-+              printk("Yes\n");
-+              pty_output_sigio = 1;
-+      }
-+      else if(errno == EAGAIN) printk("No, enabling workaround\n");
-+      else panic("check_sigio : read failed, errno = %d\n", errno);
-+}
-+
-+static void tty_close(int master, int slave)
-+{
-+      printk("Checking that host ptys support SIGIO on close...");
-+
-+      close(slave);
-+      if(got_sigio){
-+              printk("Yes\n");
-+              pty_close_sigio = 1;
-+      }
-+      else printk("No, enabling workaround\n");
-+}
-+
-+void __init check_sigio(void)
-+{
-+      if(access("/dev/ptmx", R_OK) && access("/dev/ptyp0", R_OK)){
-+              printk("No pseudo-terminals available - skipping pty SIGIO "
-+                     "check\n");
-+              return;
-+      }
-+      check_one_sigio(tty_output);
-+      check_one_sigio(tty_close);
-+}
-+
-+/* Protected by sigio_lock(), also used by sigio_cleanup, which is an 
-+ * exitcall.
-+ */
-+static int write_sigio_pid = -1;
-+
-+/* These arrays are initialized before the sigio thread is started, and
-+ * the descriptors closed after it is killed.  So, it can't see them change.
-+ * On the UML side, they are changed under the sigio_lock.
-+ */
-+static int write_sigio_fds[2] = { -1, -1 };
-+static int sigio_private[2] = { -1, -1 };
-+
-+struct pollfds {
-+      struct pollfd *poll;
-+      int size;
-+      int used;
-+};
-+
-+/* Protected by sigio_lock().  Used by the sigio thread, but the UML thread
-+ * synchronizes with it.
-+ */
-+struct pollfds current_poll = {
-+      .poll           = NULL,
-+      .size           = 0,
-+      .used           = 0
-+};
-+
-+struct pollfds next_poll = {
-+      .poll           = NULL,
-+      .size           = 0,
-+      .used           = 0
-+};
-+
-+static int write_sigio_thread(void *unused)
-+{
-+      struct pollfds *fds, tmp;
-+      struct pollfd *p;
-+      int i, n, respond_fd;
-+      char c;
-+
-+      fds = &current_poll;
-+      while(1){
-+              n = poll(fds->poll, fds->used, -1);
-+              if(n < 0){
-+                      if(errno == EINTR) continue;
-+                      printk("write_sigio_thread : poll returned %d, "
-+                             "errno = %d\n", n, errno);
-+              }
-+              for(i = 0; i < fds->used; i++){
-+                      p = &fds->poll[i];
-+                      if(p->revents == 0) continue;
-+                      if(p->fd == sigio_private[1]){
-+                              n = read(sigio_private[1], &c, sizeof(c));
-+                              if(n != sizeof(c))
-+                                      printk("write_sigio_thread : "
-+                                             "read failed, errno = %d\n",
-+                                             errno);
-+                              tmp = current_poll;
-+                              current_poll = next_poll;
-+                              next_poll = tmp;
-+                              respond_fd = sigio_private[1];
-+                      }
-+                      else {
-+                              respond_fd = write_sigio_fds[1];
-+                              fds->used--;
-+                              memmove(&fds->poll[i], &fds->poll[i + 1],
-+                                      (fds->used - i) * sizeof(*fds->poll));
-+                      }
-+
-+                      n = write(respond_fd, &c, sizeof(c));
-+                      if(n != sizeof(c))
-+                              printk("write_sigio_thread : write failed, "
-+                                     "errno = %d\n", errno);
-+              }
-+      }
-+}
-+
-+static int need_poll(int n)
-+{
-+      if(n <= next_poll.size){
-+              next_poll.used = n;
-+              return(0);
-+      }
-+      if(next_poll.poll != NULL) kfree(next_poll.poll);
-+      next_poll.poll = um_kmalloc_atomic(n * sizeof(struct pollfd));
-+      if(next_poll.poll == NULL){
-+              printk("need_poll : failed to allocate new pollfds\n");
-+              next_poll.size = 0;
-+              next_poll.used = 0;
-+              return(-1);
-+      }
-+      next_poll.size = n;
-+      next_poll.used = n;
-+      return(0);
-+}
-+
-+static void update_thread(void)
-+{
-+      unsigned long flags;
-+      int n;
-+      char c;
-+
-+      flags = set_signals(0);
-+      n = write(sigio_private[0], &c, sizeof(c));
-+      if(n != sizeof(c)){
-+              printk("update_thread : write failed, errno = %d\n", errno);
-+              goto fail;
-+      }
-+
-+      n = read(sigio_private[0], &c, sizeof(c));
-+      if(n != sizeof(c)){
-+              printk("update_thread : read failed, errno = %d\n", errno);
-+              goto fail;
-+      }
-+
-+      set_signals(flags);
-+      return;
-+ fail:
-+      sigio_lock();
-+      if(write_sigio_pid != -1) 
-+              os_kill_process(write_sigio_pid, 1);
-+      write_sigio_pid = -1;
-+      close(sigio_private[0]);
-+      close(sigio_private[1]);        
-+      close(write_sigio_fds[0]);
-+      close(write_sigio_fds[1]);
-+      sigio_unlock();
-+      set_signals(flags);
-+}
-+
-+int add_sigio_fd(int fd, int read)
-+{
-+      int err = 0, i, n, events;
-+
-+      sigio_lock();
-+      for(i = 0; i < current_poll.used; i++){
-+              if(current_poll.poll[i].fd == fd) 
-+                      goto out;
-+      }
-+
-+      n = current_poll.used + 1;
-+      err = need_poll(n);
-+      if(err) 
-+              goto out;
-+
-+      for(i = 0; i < current_poll.used; i++)
-+              next_poll.poll[i] = current_poll.poll[i];
-+
-+      if(read) events = POLLIN;
-+      else events = POLLOUT;
-+
-+      next_poll.poll[n - 1] = ((struct pollfd) { .fd          = fd,
-+                                                 .events      = events,
-+                                                 .revents     = 0 });
-+      update_thread();
-+ out:
-+      sigio_unlock();
-+      return(err);
-+}
-+
-+int ignore_sigio_fd(int fd)
-+{
-+      struct pollfd *p;
-+      int err = 0, i, n = 0;
-+
-+      sigio_lock();
-+      for(i = 0; i < current_poll.used; i++){
-+              if(current_poll.poll[i].fd == fd) break;
-+      }
-+      if(i == current_poll.used)
-+              goto out;
-+      
-+      err = need_poll(current_poll.used - 1);
-+      if(err)
-+              goto out;
-+
-+      for(i = 0; i < current_poll.used; i++){
-+              p = &current_poll.poll[i];
-+              if(p->fd != fd) next_poll.poll[n++] = current_poll.poll[i];
-+      }
-+      if(n == i){
-+              printk("ignore_sigio_fd : fd %d not found\n", fd);
-+              err = -1;
-+              goto out;
-+      }
-+
-+      update_thread();
-+ out:
-+      sigio_unlock();
-+      return(err);
-+}
-+
-+static int setup_initial_poll(int fd)
-+{
-+      struct pollfd *p;
-+
-+      p = um_kmalloc(sizeof(struct pollfd));
-+      if(p == NULL){
-+              printk("setup_initial_poll : failed to allocate poll\n");
-+              return(-1);
-+      }
-+      *p = ((struct pollfd) { .fd     = fd,
-+                              .events         = POLLIN,
-+                              .revents        = 0 });
-+      current_poll = ((struct pollfds) { .poll        = p,
-+                                         .used        = 1,
-+                                         .size        = 1 });
-+      return(0);
-+}
-+
-+void write_sigio_workaround(void)
-+{
-+      unsigned long stack;
-+      int err;
-+
-+      sigio_lock();
-+      if(write_sigio_pid != -1)
-+              goto out;
-+
-+      err = os_pipe(write_sigio_fds, 1, 1);
-+      if(err){
-+              printk("write_sigio_workaround - os_pipe 1 failed, "
-+                     "errno = %d\n", -err);
-+              goto out;
-+      }
-+      err = os_pipe(sigio_private, 1, 1);
-+      if(err){
-+              printk("write_sigio_workaround - os_pipe 2 failed, "
-+                     "errno = %d\n", -err);
-+              goto out_close1;
-+      }
-+      if(setup_initial_poll(sigio_private[1]))
-+              goto out_close2;
-+
-+      write_sigio_pid = run_helper_thread(write_sigio_thread, NULL, 
-+                                          CLONE_FILES | CLONE_VM, &stack, 0);
-+
-+      if(write_sigio_pid < 0) goto out_close2;
-+
-+      if(write_sigio_irq(write_sigio_fds[0])) 
-+              goto out_kill;
-+
-+ out:
-+      sigio_unlock();
-+      return;
-+
-+ out_kill:
-+      os_kill_process(write_sigio_pid, 1);
-+      write_sigio_pid = -1;
-+ out_close2:
-+      close(sigio_private[0]);
-+      close(sigio_private[1]);        
-+ out_close1:
-+      close(write_sigio_fds[0]);
-+      close(write_sigio_fds[1]);
-+      sigio_unlock();
-+}
-+
-+int read_sigio_fd(int fd)
-+{
-+      int n;
-+      char c;
-+
-+      n = read(fd, &c, sizeof(c));
-+      if(n != sizeof(c)){
-+              printk("read_sigio_fd - read failed, errno = %d\n", errno);
-+              return(-errno);
-+      }
-+      return(n);
-+}
-+
-+static void sigio_cleanup(void)
-+{
-+      if(write_sigio_pid != -1)
-+              os_kill_process(write_sigio_pid, 1);
-+}
-+
-+__uml_exitcall(sigio_cleanup);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/signal_kern.c um/arch/um/kernel/signal_kern.c
---- orig/arch/um/kernel/signal_kern.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/signal_kern.c    2002-12-08 19:44:13.000000000 -0500
-@@ -0,0 +1,367 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/config.h"
-+#include "linux/stddef.h"
-+#include "linux/sys.h"
-+#include "linux/sched.h"
-+#include "linux/wait.h"
-+#include "linux/kernel.h"
-+#include "linux/smp_lock.h"
-+#include "linux/module.h"
-+#include "linux/slab.h"
-+#include "asm/signal.h"
-+#include "asm/uaccess.h"
-+#include "asm/ucontext.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "signal_kern.h"
-+#include "signal_user.h"
-+#include "kern.h"
-+#include "frame_kern.h"
-+#include "sigcontext.h"
-+#include "mode.h"
-+
-+EXPORT_SYMBOL(block_signals);
-+EXPORT_SYMBOL(unblock_signals);
-+
-+static void force_segv(int sig)
-+{
-+      if(sig == SIGSEGV){
-+              struct k_sigaction *ka;
-+
-+              ka = &current->sig->action[SIGSEGV - 1];
-+              ka->sa.sa_handler = SIG_DFL;
-+      }
-+      force_sig(SIGSEGV, current);
-+}
-+
-+#define _S(nr) (1<<((nr)-1))
-+
-+#define _BLOCKABLE (~(_S(SIGKILL) | _S(SIGSTOP)))
-+
-+/*
-+ * OK, we're invoking a handler
-+ */   
-+static int handle_signal(struct pt_regs *regs, unsigned long signr, 
-+                       struct k_sigaction *ka, siginfo_t *info, 
-+                       sigset_t *oldset, int error)
-+{
-+        __sighandler_t handler;
-+      void (*restorer)(void);
-+      unsigned long sp;
-+      sigset_t save;
-+      int err, ret;
-+
-+      ret = 0;
-+      switch(error){
-+      case -ERESTARTNOHAND:
-+              ret = -EINTR;
-+              break;
-+
-+      case -ERESTARTSYS:
-+              if (!(ka->sa.sa_flags & SA_RESTART)) {
-+                      ret = -EINTR;
-+                      break;
-+              }
-+              /* fallthrough */
-+      case -ERESTARTNOINTR:
-+              PT_REGS_RESTART_SYSCALL(regs);
-+              PT_REGS_ORIG_SYSCALL(regs) = PT_REGS_SYSCALL_NR(regs);
-+
-+              /* This is because of the UM_SET_SYSCALL_RETURN and the fact
-+               * that on i386 the system call number and return value are
-+               * in the same register.  When the system call restarts, %eax
-+               * had better have the system call number in it.  Since the
-+               * return value doesn't matter (except that it shouldn't be
-+               * -ERESTART*), we'll stick the system call number there.
-+               */
-+              ret = PT_REGS_SYSCALL_NR(regs);
-+              break;
-+      }
-+
-+      handler = ka->sa.sa_handler;
-+      save = *oldset;
-+
-+      if (ka->sa.sa_flags & SA_ONESHOT)
-+              ka->sa.sa_handler = SIG_DFL;
-+
-+      if (!(ka->sa.sa_flags & SA_NODEFER)) {
-+              spin_lock_irq(&current->sigmask_lock);
-+              sigorsets(&current->blocked, &current->blocked, 
-+                        &ka->sa.sa_mask);
-+              sigaddset(&current->blocked, signr);
-+              recalc_sigpending(current);
-+              spin_unlock_irq(&current->sigmask_lock);
-+      }
-+
-+      sp = PT_REGS_SP(regs);
-+
-+      if((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags(sp) == 0))
-+              sp = current->sas_ss_sp + current->sas_ss_size;
-+      
-+      if(error != 0) PT_REGS_SET_SYSCALL_RETURN(regs, ret);
-+
-+      if (ka->sa.sa_flags & SA_RESTORER) restorer = ka->sa.sa_restorer;
-+      else restorer = NULL;
-+
-+      if(ka->sa.sa_flags & SA_SIGINFO)
-+              err = setup_signal_stack_si(sp, signr, (unsigned long) handler,
-+                                          restorer, regs, info, &save);
-+      else
-+              err = setup_signal_stack_sc(sp, signr, (unsigned long) handler,
-+                                          restorer, regs, &save);
-+      if(err) goto segv;
-+
-+      return(0);
-+ segv:
-+      force_segv(signr);
-+      return(1);
-+}
-+
-+/*
-+ * Note that 'init' is a special process: it doesn't get signals it doesn't
-+ * want to handle. Thus you cannot kill init even with a SIGKILL even by
-+ * mistake.
-+ */
-+
-+static int kern_do_signal(struct pt_regs *regs, sigset_t *oldset, int error)
-+{
-+      siginfo_t info;
-+      struct k_sigaction *ka;
-+      int err;
-+
-+      if (!oldset)
-+              oldset = &current->blocked;
-+
-+      for (;;) {
-+              unsigned long signr;
-+
-+              spin_lock_irq(&current->sigmask_lock);
-+              signr = dequeue_signal(&current->blocked, &info);
-+              spin_unlock_irq(&current->sigmask_lock);
-+
-+              if (!signr)
-+                      break;
-+
-+              if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) {
-+                      /* Let the debugger run.  */
-+                      current->exit_code = signr;
-+                      current->state = TASK_STOPPED;
-+                      notify_parent(current, SIGCHLD);
-+                      schedule();
-+
-+                      /* We're back.  Did the debugger cancel the sig?  */
-+                      if (!(signr = current->exit_code))
-+                              continue;
-+                      current->exit_code = 0;
-+
-+                      /* The debugger continued.  Ignore SIGSTOP.  */
-+                      if (signr == SIGSTOP)
-+                              continue;
-+
-+                      /* Update the siginfo structure.  Is this good?  */
-+                      if (signr != info.si_signo) {
-+                              info.si_signo = signr;
-+                              info.si_errno = 0;
-+                              info.si_code = SI_USER;
-+                              info.si_pid = current->p_pptr->pid;
-+                              info.si_uid = current->p_pptr->uid;
-+                      }
-+
-+                      /* If the (new) signal is now blocked, requeue it.  */
-+                      if (sigismember(&current->blocked, signr)) {
-+                              send_sig_info(signr, &info, current);
-+                              continue;
-+                      }
-+              }
-+
-+              ka = &current->sig->action[signr-1];
-+              if (ka->sa.sa_handler == SIG_IGN) {
-+                      if (signr != SIGCHLD)
-+                              continue;
-+                      /* Check for SIGCHLD: it's special.  */
-+                      while (sys_wait4(-1, NULL, WNOHANG, NULL) > 0)
-+                              /* nothing */;
-+                      continue;
-+              }
-+
-+              if (ka->sa.sa_handler == SIG_DFL) {
-+                      int exit_code = signr;
-+
-+                      /* Init gets no signals it doesn't want.  */
-+                      if (current->pid == 1)
-+                              continue;
-+
-+                      switch (signr) {
-+                      case SIGCONT: case SIGCHLD: case SIGWINCH: case SIGURG:
-+                              continue;
-+
-+                      case SIGTSTP: case SIGTTIN: case SIGTTOU:
-+                              if (is_orphaned_pgrp(current->pgrp))
-+                                      continue;
-+                              /* FALLTHRU */
-+
-+                        case SIGSTOP: {
-+                                struct signal_struct *sig;
-+                              current->state = TASK_STOPPED;
-+                              current->exit_code = signr;
-+                                sig = current->p_pptr->sig;
-+                                if (sig && !(sig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
-+                                      notify_parent(current, SIGCHLD);
-+                              schedule();
-+                              continue;
-+                      }
-+                      case SIGQUIT: case SIGILL: case SIGTRAP:
-+                      case SIGABRT: case SIGFPE: case SIGSEGV:
-+                      case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
-+                              if (do_coredump(signr, &current->thread.regs))
-+                                      exit_code |= 0x80;
-+                              /* FALLTHRU */
-+
-+                      default:
-+                              sig_exit(signr, exit_code, &info);
-+                              /* NOTREACHED */
-+                      }
-+              }
-+
-+              /* Whee!  Actually deliver the signal.  */
-+              err = handle_signal(regs, signr, ka, &info, oldset, error);
-+              if(!err) return(1);
-+      }
-+
-+      /* Did we come from a system call? */
-+      if(PT_REGS_SYSCALL_NR(regs) >= 0){
-+              /* Restart the system call - no handlers present */
-+              if(PT_REGS_SYSCALL_RET(regs) == -ERESTARTNOHAND ||
-+                 PT_REGS_SYSCALL_RET(regs) == -ERESTARTSYS ||
-+                 PT_REGS_SYSCALL_RET(regs) == -ERESTARTNOINTR){
-+                      PT_REGS_ORIG_SYSCALL(regs) = PT_REGS_SYSCALL_NR(regs);
-+                      PT_REGS_RESTART_SYSCALL(regs);
-+              }
-+      }
-+
-+      /* This closes a way to execute a system call on the host.  If
-+       * you set a breakpoint on a system call instruction and singlestep
-+       * from it, the tracing thread used to PTRACE_SINGLESTEP the process
-+       * rather than PTRACE_SYSCALL it, allowing the system call to execute
-+       * on the host.  The tracing thread will check this flag and 
-+       * PTRACE_SYSCALL if necessary.
-+       */
-+      if((current->ptrace & PT_DTRACE) && 
-+         is_syscall(PT_REGS_IP(&current->thread.regs)))
-+              (void) CHOOSE_MODE(current->thread.mode.tt.singlestep_syscall = 1, 0);
-+
-+      return(0);
-+}
-+
-+int do_signal(int error)
-+{
-+      return(kern_do_signal(&current->thread.regs, NULL, error));
-+}
-+
-+/*
-+ * Atomically swap in the new signal mask, and wait for a signal.
-+ */
-+int sys_sigsuspend(int history0, int history1, old_sigset_t mask)
-+{
-+      sigset_t saveset;
-+
-+      mask &= _BLOCKABLE;
-+      spin_lock_irq(&current->sigmask_lock);
-+      saveset = current->blocked;
-+      siginitset(&current->blocked, mask);
-+      recalc_sigpending(current);
-+      spin_unlock_irq(&current->sigmask_lock);
-+
-+      while (1) {
-+              current->state = TASK_INTERRUPTIBLE;
-+              schedule();
-+              if(kern_do_signal(&current->thread.regs, &saveset, -EINTR))
-+                      return(-EINTR);
-+      }
-+}
-+
-+int sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize)
-+{
-+      sigset_t saveset, newset;
-+
-+      /* XXX: Don't preclude handling different sized sigset_t's.  */
-+      if (sigsetsize != sizeof(sigset_t))
-+              return -EINVAL;
-+
-+      if (copy_from_user(&newset, unewset, sizeof(newset)))
-+              return -EFAULT;
-+      sigdelsetmask(&newset, ~_BLOCKABLE);
-+
-+      spin_lock_irq(&current->sigmask_lock);
-+      saveset = current->blocked;
-+      current->blocked = newset;
-+      recalc_sigpending(current);
-+      spin_unlock_irq(&current->sigmask_lock);
-+
-+      while (1) {
-+              current->state = TASK_INTERRUPTIBLE;
-+              schedule();
-+              if (kern_do_signal(&current->thread.regs, &saveset, -EINTR))
-+                      return(-EINTR);
-+      }
-+}
-+
-+static int copy_sc_from_user(struct pt_regs *to, void *from, 
-+                           struct arch_frame_data *arch)
-+{
-+      int ret;
-+
-+      ret = CHOOSE_MODE(copy_sc_from_user_tt(UPT_SC(&to->regs), from, arch),
-+                        copy_sc_from_user_skas(&to->regs, from));
-+      return(ret);
-+}
-+
-+int sys_sigreturn(struct pt_regs regs)
-+{
-+      void *sc = sp_to_sc(PT_REGS_SP(&current->thread.regs));
-+      void *mask = sp_to_mask(PT_REGS_SP(&current->thread.regs));
-+      int sig_size = (_NSIG_WORDS - 1) * sizeof(unsigned long);
-+
-+      spin_lock_irq(&current->sigmask_lock);
-+      copy_from_user(&current->blocked.sig[0], sc_sigmask(sc), 
-+                     sizeof(current->blocked.sig[0]));
-+      copy_from_user(&current->blocked.sig[1], mask, sig_size);
-+      sigdelsetmask(&current->blocked, ~_BLOCKABLE);
-+      recalc_sigpending(current);
-+      spin_unlock_irq(&current->sigmask_lock);
-+      copy_sc_from_user(&current->thread.regs, sc, 
-+                        &signal_frame_sc.common.arch);
-+      return(PT_REGS_SYSCALL_RET(&current->thread.regs));
-+}
-+
-+int sys_rt_sigreturn(struct pt_regs regs)
-+{
-+      struct ucontext *uc = sp_to_uc(PT_REGS_SP(&current->thread.regs));
-+      void *fp;
-+      int sig_size = _NSIG_WORDS * sizeof(unsigned long);
-+
-+      spin_lock_irq(&current->sigmask_lock);
-+      copy_from_user(&current->blocked, &uc->uc_sigmask, sig_size);
-+      sigdelsetmask(&current->blocked, ~_BLOCKABLE);
-+      recalc_sigpending(current);
-+      spin_unlock_irq(&current->sigmask_lock);
-+      fp = (void *) (((unsigned long) uc) + sizeof(struct ucontext));
-+      copy_sc_from_user(&current->thread.regs, &uc->uc_mcontext,
-+                        &signal_frame_si.common.arch);
-+      return(PT_REGS_SYSCALL_RET(&current->thread.regs));
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/signal_user.c um/arch/um/kernel/signal_user.c
---- orig/arch/um/kernel/signal_user.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/signal_user.c    2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,142 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <unistd.h>
-+#include <stdlib.h>
-+#include <signal.h>
-+#include <errno.h>
-+#include <stdarg.h>
-+#include <string.h>
-+#include <sys/mman.h>
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "signal_user.h"
-+#include "signal_kern.h"
-+#include "sysdep/sigcontext.h"
-+#include "sigcontext.h"
-+
-+void set_sigstack(void *sig_stack, int size)
-+{
-+      stack_t stack = ((stack_t) { .ss_flags  = 0,
-+                                   .ss_sp     = (__ptr_t) sig_stack,
-+                                   .ss_size   = size - sizeof(void *) });
-+
-+      if(sigaltstack(&stack, NULL) != 0)
-+              panic("enabling signal stack failed, errno = %d\n", errno);
-+}
-+
-+void set_handler(int sig, void (*handler)(int), int flags, ...)
-+{
-+      struct sigaction action;
-+      va_list ap;
-+      int mask;
-+
-+      va_start(ap, flags);
-+      action.sa_handler = handler;
-+      sigemptyset(&action.sa_mask);
-+      while((mask = va_arg(ap, int)) != -1){
-+              sigaddset(&action.sa_mask, mask);
-+      }
-+      action.sa_flags = flags;
-+      action.sa_restorer = NULL;
-+      if(sigaction(sig, &action, NULL) < 0)
-+              panic("sigaction failed");
-+}
-+
-+int change_sig(int signal, int on)
-+{
-+      sigset_t sigset, old;
-+
-+      sigemptyset(&sigset);
-+      sigaddset(&sigset, signal);
-+      sigprocmask(on ? SIG_UNBLOCK : SIG_BLOCK, &sigset, &old);
-+      return(!sigismember(&old, signal));
-+}
-+
-+static void change_signals(int type)
-+{
-+      sigset_t mask;
-+
-+      sigemptyset(&mask);
-+      sigaddset(&mask, SIGVTALRM);
-+      sigaddset(&mask, SIGALRM);
-+      sigaddset(&mask, SIGIO);
-+      sigaddset(&mask, SIGPROF);
-+      if(sigprocmask(type, &mask, NULL) < 0)
-+              panic("Failed to change signal mask - errno = %d", errno);
-+}
-+
-+void block_signals(void)
-+{
-+      change_signals(SIG_BLOCK);
-+}
-+
-+void unblock_signals(void)
-+{
-+      change_signals(SIG_UNBLOCK);
-+}
-+
-+#define SIGIO_BIT 0
-+#define SIGVTALRM_BIT 1
-+
-+static int enable_mask(sigset_t *mask)
-+{
-+      int sigs;
-+
-+      sigs = sigismember(mask, SIGIO) ? 0 : 1 << SIGIO_BIT;
-+      sigs |= sigismember(mask, SIGVTALRM) ? 0 : 1 << SIGVTALRM_BIT;
-+      sigs |= sigismember(mask, SIGALRM) ? 0 : 1 << SIGVTALRM_BIT;
-+      return(sigs);
-+}
-+
-+int get_signals(void)
-+{
-+      sigset_t mask;
-+      
-+      if(sigprocmask(SIG_SETMASK, NULL, &mask) < 0)
-+              panic("Failed to get signal mask");
-+      return(enable_mask(&mask));
-+}
-+
-+int set_signals(int enable)
-+{
-+      sigset_t mask;
-+      int ret;
-+
-+      sigemptyset(&mask);
-+      if(enable & (1 << SIGIO_BIT)) 
-+              sigaddset(&mask, SIGIO);
-+      if(enable & (1 << SIGVTALRM_BIT)){
-+              sigaddset(&mask, SIGVTALRM);
-+              sigaddset(&mask, SIGALRM);
-+      }
-+      if(sigprocmask(SIG_UNBLOCK, &mask, &mask) < 0)
-+              panic("Failed to enable signals");
-+      ret = enable_mask(&mask);
-+      sigemptyset(&mask);
-+      if((enable & (1 << SIGIO_BIT)) == 0) 
-+              sigaddset(&mask, SIGIO);
-+      if((enable & (1 << SIGVTALRM_BIT)) == 0){
-+              sigaddset(&mask, SIGVTALRM);
-+              sigaddset(&mask, SIGALRM);
-+      }
-+      if(sigprocmask(SIG_BLOCK, &mask, NULL) < 0)
-+              panic("Failed to block signals");
-+
-+      return(ret);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/exec_kern.c um/arch/um/kernel/skas/exec_kern.c
---- orig/arch/um/kernel/skas/exec_kern.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/exec_kern.c 2002-11-11 18:57:19.000000000 -0500
-@@ -0,0 +1,41 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/kernel.h"
-+#include "asm/current.h"
-+#include "asm/page.h"
-+#include "asm/signal.h"
-+#include "asm/ptrace.h"
-+#include "asm/uaccess.h"
-+#include "asm/mmu_context.h"
-+#include "tlb.h"
-+#include "skas.h"
-+#include "mmu.h"
-+#include "os.h"
-+
-+void flush_thread_skas(void)
-+{
-+      force_flush_all();
-+      switch_mm_skas(current->mm->context.skas.mm_fd);
-+}
-+
-+void start_thread_skas(struct pt_regs *regs, unsigned long eip, 
-+                     unsigned long esp)
-+{
-+      set_fs(USER_DS);
-+        PT_REGS_IP(regs) = eip;
-+      PT_REGS_SP(regs) = esp;
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/exec_user.c um/arch/um/kernel/skas/exec_user.c
---- orig/arch/um/kernel/skas/exec_user.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/exec_user.c 2002-11-03 19:23:01.000000000 -0500
-@@ -0,0 +1,61 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdlib.h>
-+#include <errno.h>
-+#include <signal.h>
-+#include <sched.h>
-+#include <sys/wait.h>
-+#include <sys/ptrace.h>
-+#include "user.h"
-+#include "kern_util.h"
-+#include "os.h"
-+#include "time_user.h"
-+
-+static int user_thread_tramp(void *arg)
-+{
-+      if(ptrace(PTRACE_TRACEME, 0, 0, 0) < 0)
-+              panic("user_thread_tramp - PTRACE_TRACEME failed, "
-+                    "errno = %d\n", errno);
-+      enable_timer();
-+      os_stop_process(os_getpid());
-+      return(0);
-+}
-+
-+int user_thread(unsigned long stack, int flags)
-+{
-+      int pid, status;
-+
-+      pid = clone(user_thread_tramp, (void *) stack_sp(stack), 
-+                  flags | CLONE_FILES | SIGCHLD, NULL);
-+      if(pid < 0){
-+              printk("user_thread - clone failed, errno = %d\n", errno);
-+              return(pid);
-+      }
-+
-+      if(waitpid(pid, &status, WUNTRACED) < 0){
-+              printk("user_thread - waitpid failed, errno = %d\n", errno);
-+              return(-errno);
-+      }
-+
-+      if(!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGSTOP)){
-+              printk("user_thread - trampoline didn't stop, status = %d\n", 
-+                     status);
-+              return(-EINVAL);
-+      }
-+
-+      return(pid);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/include/mmu.h um/arch/um/kernel/skas/include/mmu.h
---- orig/arch/um/kernel/skas/include/mmu.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/include/mmu.h       2002-11-10 21:21:50.000000000 -0500
-@@ -0,0 +1,27 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SKAS_MMU_H
-+#define __SKAS_MMU_H
-+
-+#include "linux/list.h"
-+#include "linux/spinlock.h"
-+
-+struct mmu_context_skas {
-+      int mm_fd;
-+};
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/include/mode.h um/arch/um/kernel/skas/include/mode.h
---- orig/arch/um/kernel/skas/include/mode.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/include/mode.h      2003-03-26 13:27:46.000000000 -0500
-@@ -0,0 +1,36 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __MODE_SKAS_H__
-+#define __MODE_SKAS_H__
-+
-+extern unsigned long exec_regs[];
-+extern unsigned long exec_fp_regs[];
-+extern unsigned long exec_fpx_regs[];
-+extern int have_fpx_regs;
-+
-+extern void user_time_init_skas(void);
-+extern int copy_sc_from_user_skas(union uml_pt_regs *regs, void *from_ptr);
-+extern int copy_sc_to_user_skas(void *to_ptr, void *fp, 
-+                              union uml_pt_regs *regs, 
-+                              unsigned long fault_addr, int fault_type);
-+extern void sig_handler_common_skas(int sig, void *sc_ptr);
-+extern void halt_skas(void);
-+extern void reboot_skas(void);
-+extern void kill_off_processes_skas(void);
-+extern int is_skas_winch(int pid, int fd, void *data);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/include/mode_kern.h um/arch/um/kernel/skas/include/mode_kern.h
---- orig/arch/um/kernel/skas/include/mode_kern.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/include/mode_kern.h 2002-12-16 21:49:11.000000000 -0500
-@@ -0,0 +1,51 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SKAS_MODE_KERN_H__
-+#define __SKAS_MODE_KERN_H__
-+
-+#include "linux/sched.h"
-+#include "asm/page.h"
-+#include "asm/ptrace.h"
-+
-+extern void flush_thread_skas(void);
-+extern void *_switch_to_skas(void *prev, void *next);
-+extern void start_thread_skas(struct pt_regs *regs, unsigned long eip, 
-+                            unsigned long esp);
-+extern int copy_thread_skas(int nr, unsigned long clone_flags, 
-+                          unsigned long sp, unsigned long stack_top, 
-+                          struct task_struct *p, struct pt_regs *regs);
-+extern void release_thread_skas(struct task_struct *task);
-+extern void exit_thread_skas(void);
-+extern void initial_thread_cb_skas(void (*proc)(void *), void *arg);
-+extern void init_idle_skas(void);
-+extern void flush_tlb_kernel_vm_skas(void);
-+extern void __flush_tlb_one_skas(unsigned long addr);
-+extern void flush_tlb_range_skas(struct mm_struct *mm, unsigned long start, 
-+                               unsigned long end);
-+extern void flush_tlb_mm_skas(struct mm_struct *mm);
-+extern void force_flush_all_skas(void);
-+extern long execute_syscall_skas(void *r);
-+extern void before_mem_skas(unsigned long unused);
-+extern unsigned long set_task_sizes_skas(int arg, unsigned long *host_size_out,
-+                                       unsigned long *task_size_out);
-+extern int start_uml_skas(void);
-+extern int external_pid_skas(struct task_struct *task);
-+extern int thread_pid_skas(struct thread_struct *thread);
-+
-+#define kmem_end_skas (host_task_size - 1024 * 1024)
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/include/proc_mm.h um/arch/um/kernel/skas/include/proc_mm.h
---- orig/arch/um/kernel/skas/include/proc_mm.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/include/proc_mm.h   2002-11-13 11:57:23.000000000 -0500
-@@ -0,0 +1,55 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SKAS_PROC_MM_H
-+#define __SKAS_PROC_MM_H
-+
-+#define MM_MMAP 54
-+#define MM_MUNMAP 55
-+#define MM_MPROTECT 56
-+#define MM_COPY_SEGMENTS 57
-+
-+struct mm_mmap {
-+      unsigned long addr;
-+      unsigned long len;
-+      unsigned long prot;
-+      unsigned long flags;
-+      unsigned long fd;
-+      unsigned long offset;
-+};
-+
-+struct mm_munmap {
-+      unsigned long addr;
-+      unsigned long len;      
-+};
-+
-+struct mm_mprotect {
-+      unsigned long addr;
-+      unsigned long len;
-+        unsigned int prot;
-+};
-+
-+struct proc_mm_op {
-+      int op;
-+      union {
-+              struct mm_mmap mmap;
-+              struct mm_munmap munmap;
-+              struct mm_mprotect mprotect;
-+              int copy_segments;
-+      } u;
-+};
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/include/ptrace-skas.h um/arch/um/kernel/skas/include/ptrace-skas.h
---- orig/arch/um/kernel/skas/include/ptrace-skas.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/include/ptrace-skas.h       2003-01-17 13:22:09.000000000 -0500
-@@ -0,0 +1,57 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __PTRACE_SKAS_H
-+#define __PTRACE_SKAS_H
-+
-+#include "uml-config.h"
-+
-+#ifdef UML_CONFIG_MODE_SKAS
-+
-+#include "skas_ptregs.h"
-+
-+#define HOST_FRAME_SIZE 17
-+
-+#define REGS_IP(r) ((r)[HOST_IP])
-+#define REGS_SP(r) ((r)[HOST_SP])
-+#define REGS_EFLAGS(r) ((r)[HOST_EFLAGS])
-+#define REGS_EAX(r) ((r)[HOST_EAX])
-+#define REGS_EBX(r) ((r)[HOST_EBX])
-+#define REGS_ECX(r) ((r)[HOST_ECX])
-+#define REGS_EDX(r) ((r)[HOST_EDX])
-+#define REGS_ESI(r) ((r)[HOST_ESI])
-+#define REGS_EDI(r) ((r)[HOST_EDI])
-+#define REGS_EBP(r) ((r)[HOST_EBP])
-+#define REGS_CS(r) ((r)[HOST_CS])
-+#define REGS_SS(r) ((r)[HOST_SS])
-+#define REGS_DS(r) ((r)[HOST_DS])
-+#define REGS_ES(r) ((r)[HOST_ES])
-+#define REGS_FS(r) ((r)[HOST_FS])
-+#define REGS_GS(r) ((r)[HOST_GS])
-+
-+#define REGS_SET_SYSCALL_RETURN(r, res) REGS_EAX(r) = (res)
-+
-+#define REGS_RESTART_SYSCALL(r) IP_RESTART_SYSCALL(REGS_IP(r))
-+
-+#define REGS_SEGV_IS_FIXABLE(r) SEGV_IS_FIXABLE((r)->trap_type)
-+
-+#define REGS_FAULT_ADDR(r) ((r)->fault_addr)
-+
-+#define REGS_FAULT_WRITE(r) FAULT_WRITE((r)->fault_type)
-+
-+#endif
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/include/skas.h um/arch/um/kernel/skas/include/skas.h
---- orig/arch/um/kernel/skas/include/skas.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/include/skas.h      2002-12-08 21:00:12.000000000 -0500
-@@ -0,0 +1,49 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SKAS_H
-+#define __SKAS_H
-+
-+#include "sysdep/ptrace.h"
-+
-+extern int userspace_pid;
-+
-+extern void switch_threads(void *me, void *next);
-+extern void thread_wait(void *sw, void *fb);
-+extern void new_thread(void *stack, void **switch_buf_ptr, void **fork_buf_ptr,
-+                       void (*handler)(int));
-+extern int start_idle_thread(void *stack, void *switch_buf_ptr, 
-+                           void **fork_buf_ptr);
-+extern int user_thread(unsigned long stack, int flags);
-+extern void userspace(union uml_pt_regs *regs);
-+extern void new_thread_proc(void *stack, void (*handler)(int sig));
-+extern void remove_sigstack(void);
-+extern void new_thread_handler(int sig);
-+extern void handle_syscall(union uml_pt_regs *regs);
-+extern void map(int fd, unsigned long virt, unsigned long phys, 
-+              unsigned long len, int r, int w, int x);
-+extern int unmap(int fd, void *addr, int len);
-+extern int protect(int fd, unsigned long addr, unsigned long len, 
-+                 int r, int w, int x, int must_succeed);
-+extern void user_signal(int sig, union uml_pt_regs *regs);
-+extern int singlestepping_skas(void);
-+extern int new_mm(int from);
-+extern void save_registers(union uml_pt_regs *regs);
-+extern void restore_registers(union uml_pt_regs *regs);
-+extern void start_userspace(void);
-+extern void init_registers(int pid);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/include/uaccess.h um/arch/um/kernel/skas/include/uaccess.h
---- orig/arch/um/kernel/skas/include/uaccess.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/include/uaccess.h   2003-01-31 23:05:56.000000000 -0500
-@@ -0,0 +1,232 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __SKAS_UACCESS_H
-+#define __SKAS_UACCESS_H
-+
-+#include "linux/string.h"
-+#include "linux/sched.h"
-+#include "asm/processor.h"
-+#include "asm/pgtable.h"
-+#include "asm/errno.h"
-+#include "asm/current.h"
-+#include "asm/a.out.h"
-+#include "kern_util.h"
-+
-+#define access_ok_skas(type, addr, size) \
-+      ((segment_eq(get_fs(), KERNEL_DS)) || \
-+       (((unsigned long) (addr) < TASK_SIZE) && \
-+        ((unsigned long) (addr) + (size) <= TASK_SIZE)))
-+
-+static inline int verify_area_skas(int type, const void * addr, 
-+                                 unsigned long size)
-+{
-+      return(access_ok_skas(type, addr, size) ? 0 : -EFAULT);
-+}
-+
-+static inline unsigned long maybe_map(unsigned long virt, int is_write)
-+{
-+      pte_t pte;
-+
-+      void *phys = um_virt_to_phys(current, virt, &pte);
-+      int dummy_code;
-+
-+      if(IS_ERR(phys) || (is_write && !pte_write(pte))){
-+              if(!handle_page_fault(virt, 0, is_write, 0, &dummy_code))
-+                      return(0);
-+              phys = um_virt_to_phys(current, virt, NULL);
-+      }
-+      return((unsigned long) __va((unsigned long) phys));
-+}
-+
-+static inline int buffer_op(unsigned long addr, int len, 
-+                          int (*op)(unsigned long addr, int len, void *arg),
-+                          void *arg)
-+{
-+      int size = min(PAGE_ALIGN(addr) - addr, (unsigned long) len);
-+      int remain = len, n;
-+
-+      n = (*op)(addr, size, arg);
-+      if(n != 0)
-+              return(n < 0 ? remain : 0);
-+
-+      addr += size;
-+      remain -= size;
-+      if(remain == 0) 
-+              return(0);
-+
-+      while(addr < ((addr + remain) & PAGE_MASK)){
-+              n = (*op)(addr, PAGE_SIZE, arg);
-+              if(n != 0)
-+                      return(n < 0 ? remain : 0);
-+
-+              addr += PAGE_SIZE;
-+              remain -= PAGE_SIZE;
-+      }
-+      if(remain == 0)
-+              return(0);
-+
-+      n = (*op)(addr, remain, arg);
-+      if(n != 0)
-+              return(n < 0 ? remain : 0);
-+      return(0);
-+}
-+
-+static inline int copy_chunk_from_user(unsigned long from, int len, void *arg)
-+{
-+      unsigned long *to_ptr = arg, to = *to_ptr;
-+
-+      from = maybe_map(from, 0);
-+      if(from == 0)
-+              return(-1);
-+
-+      memcpy((void *) to, (void *) from, len);
-+      *to_ptr += len;
-+      return(0);
-+}
-+
-+static inline int copy_from_user_skas(void *to, const void *from, int n)
-+{
-+      if(segment_eq(get_fs(), KERNEL_DS)){
-+              memcpy(to, from, n);
-+              return(0);
-+      }
-+
-+      return(access_ok_skas(VERIFY_READ, from, n) ?
-+             buffer_op((unsigned long) from, n, copy_chunk_from_user, &to) :
-+             n);
-+}
-+
-+static inline int copy_chunk_to_user(unsigned long to, int len, void *arg)
-+{
-+      unsigned long *from_ptr = arg, from = *from_ptr;
-+
-+      to = maybe_map(to, 1);
-+      if(to == 0)
-+              return(-1);
-+
-+      memcpy((void *) to, (void *) from, len);
-+      *from_ptr += len;
-+      return(0);
-+}
-+
-+static inline int copy_to_user_skas(void *to, const void *from, int n)
-+{
-+      if(segment_eq(get_fs(), KERNEL_DS)){
-+              memcpy(to, from, n);
-+              return(0);
-+      }
-+
-+      return(access_ok_skas(VERIFY_WRITE, to, n) ?
-+             buffer_op((unsigned long) to, n, copy_chunk_to_user, &from) :
-+             n);
-+}
-+
-+static inline int strncpy_chunk_from_user(unsigned long from, int len, 
-+                                        void *arg)
-+{
-+        char **to_ptr = arg, *to = *to_ptr;
-+      int n;
-+
-+      from = maybe_map(from, 0);
-+      if(from == 0)
-+              return(-1);
-+
-+      strncpy(to, (void *) from, len);
-+      n = strnlen(to, len);
-+      *to_ptr += n;
-+
-+      if(n < len) 
-+              return(1);
-+      return(0);
-+}
-+
-+static inline int strncpy_from_user_skas(char *dst, const char *src, int count)
-+{
-+      int n;
-+      char *ptr = dst;
-+
-+      if(segment_eq(get_fs(), KERNEL_DS)){
-+              strncpy(dst, src, count);
-+              return(strnlen(dst, count));
-+      }
-+
-+      if(!access_ok_skas(VERIFY_READ, src, 1))
-+              return(-EFAULT);
-+
-+      n = buffer_op((unsigned long) src, count, strncpy_chunk_from_user, 
-+                    &ptr);
-+      if(n != 0)
-+              return(-EFAULT);
-+      return(strnlen(dst, count));
-+}
-+
-+static inline int clear_chunk(unsigned long addr, int len, void *unused)
-+{
-+      addr = maybe_map(addr, 1);
-+      if(addr == 0) 
-+              return(-1);
-+
-+      memset((void *) addr, 0, len);
-+      return(0);
-+}
-+
-+static inline int __clear_user_skas(void *mem, int len)
-+{
-+      return(buffer_op((unsigned long) mem, len, clear_chunk, NULL));
-+}
-+
-+static inline int clear_user_skas(void *mem, int len)
-+{
-+      if(segment_eq(get_fs(), KERNEL_DS)){
-+              memset(mem, 0, len);
-+              return(0);
-+      }
-+
-+      return(access_ok_skas(VERIFY_WRITE, mem, len) ? 
-+             buffer_op((unsigned long) mem, len, clear_chunk, NULL) : len);
-+}
-+
-+static inline int strnlen_chunk(unsigned long str, int len, void *arg)
-+{
-+      int *len_ptr = arg, n;
-+
-+      str = maybe_map(str, 0);
-+      if(str == 0) 
-+              return(-1);
-+
-+      n = strnlen((void *) str, len);
-+      *len_ptr += n;
-+
-+      if(n < len)
-+              return(1);
-+      return(0);
-+}
-+
-+static inline int strnlen_user_skas(const void *str, int len)
-+{
-+      int count = 0, n;
-+
-+      if(segment_eq(get_fs(), KERNEL_DS))
-+              return(strnlen(str, len) + 1);
-+
-+      n = buffer_op((unsigned long) str, len, strnlen_chunk, &count);
-+      if(n == 0)
-+              return(count + 1);
-+      return(-EFAULT);
-+}
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/Makefile um/arch/um/kernel/skas/Makefile
---- orig/arch/um/kernel/skas/Makefile  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/Makefile    2002-11-01 16:05:44.000000000 -0500
-@@ -0,0 +1,30 @@
-+# 
-+# Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+O_TARGET = skas.o
-+
-+obj-y = exec_kern.o exec_user.o mem.o mem_user.o mmu.o process.o \
-+      process_kern.o syscall_kern.o syscall_user.o time.o tlb.o trap_user.o
-+
-+subdir-y = sys-$(SUBARCH)
-+
-+obj-y += $(join $(subdir-y),$(subdir-y:%=/%.o))
-+
-+USER_OBJS = $(filter %_user.o,$(obj-y)) process.o time.o
-+
-+include $(TOPDIR)/Rules.make
-+
-+include/skas_ptregs.h : util/mk_ptregs
-+      util/mk_ptregs > $@
-+
-+util/mk_ptregs :
-+      $(MAKE) -C util
-+
-+$(USER_OBJS) : %.o: %.c
-+      $(CC) $(CFLAGS_$@) $(USER_CFLAGS) -c -o $@ $<
-+
-+clean :
-+      $(MAKE) -C util clean
-+      $(RM) -f include/skas_ptregs.h
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/mem.c um/arch/um/kernel/skas/mem.c
---- orig/arch/um/kernel/skas/mem.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/mem.c       2002-12-16 21:49:39.000000000 -0500
-@@ -0,0 +1,30 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/config.h"
-+#include "linux/mm.h"
-+#include "mem_user.h"
-+
-+unsigned long set_task_sizes_skas(int arg, unsigned long *host_size_out, 
-+                                unsigned long *task_size_out)
-+{
-+      /* Round up to the nearest 4M */
-+      unsigned long top = ROUND_4M((unsigned long) &arg);
-+
-+      *host_size_out = top;
-+      *task_size_out = top;
-+      return(((unsigned long) set_task_sizes_skas) & ~0xffffff);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/mem_user.c um/arch/um/kernel/skas/mem_user.c
---- orig/arch/um/kernel/skas/mem_user.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/mem_user.c  2002-12-31 00:13:18.000000000 -0500
-@@ -0,0 +1,95 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <errno.h>
-+#include <sys/mman.h>
-+#include <sys/ptrace.h>
-+#include "mem_user.h"
-+#include "user.h"
-+#include "os.h"
-+#include "proc_mm.h"
-+
-+void map(int fd, unsigned long virt, unsigned long phys, unsigned long len, 
-+       int r, int w, int x)
-+{
-+      struct proc_mm_op map;
-+      struct mem_region *region;
-+      int prot, n;
-+
-+      prot = (r ? PROT_READ : 0) | (w ? PROT_WRITE : 0) | 
-+              (x ? PROT_EXEC : 0);
-+      region = phys_region(phys);
-+
-+      map = ((struct proc_mm_op) { .op        = MM_MMAP,
-+                                   .u         = 
-+                                   { .mmap    = 
-+                                     { .addr          = virt,
-+                                       .len           = len,
-+                                       .prot          = prot,
-+                                       .flags         = MAP_SHARED | 
-+                                                        MAP_FIXED,
-+                                       .fd            = region->fd,
-+                                       .offset        = phys_offset(phys)
-+                                     } } } );
-+      n = os_write_file(fd, &map, sizeof(map));
-+      if(n != sizeof(map)) 
-+              printk("map : /proc/mm map failed, errno = %d\n", errno);
-+}
-+
-+int unmap(int fd, void *addr, int len)
-+{
-+      struct proc_mm_op unmap;
-+      int n;
-+
-+      unmap = ((struct proc_mm_op) { .op      = MM_MUNMAP,
-+                                     .u       = 
-+                                     { .munmap        = 
-+                                       { .addr        = (unsigned long) addr,
-+                                         .len         = len } } } );
-+      n = os_write_file(fd, &unmap, sizeof(unmap));
-+      if((n != 0) && (n != sizeof(unmap)))
-+              return(-errno);
-+      return(0);
-+}
-+
-+int protect(int fd, unsigned long addr, unsigned long len, int r, int w, 
-+          int x, int must_succeed)
-+{
-+      struct proc_mm_op protect;
-+      int prot, n;
-+
-+      prot = (r ? PROT_READ : 0) | (w ? PROT_WRITE : 0) | 
-+              (x ? PROT_EXEC : 0);
-+
-+      protect = ((struct proc_mm_op) { .op    = MM_MPROTECT,
-+                                     .u       = 
-+                                     { .mprotect      = 
-+                                       { .addr        = (unsigned long) addr,
-+                                         .len         = len,
-+                                         .prot        = prot } } } );
-+
-+      n = os_write_file(fd, &protect, sizeof(protect));
-+      if((n != 0) && (n != sizeof(protect))){
-+              if(must_succeed)
-+                      panic("protect failed, errno = %d", errno);
-+              return(-errno);
-+      }
-+      return(0);
-+}
-+
-+void before_mem_skas(unsigned long unused)
-+{
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/mmu.c um/arch/um/kernel/skas/mmu.c
---- orig/arch/um/kernel/skas/mmu.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/mmu.c       2002-11-13 13:09:57.000000000 -0500
-@@ -0,0 +1,44 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/list.h"
-+#include "linux/spinlock.h"
-+#include "linux/slab.h"
-+#include "asm/segment.h"
-+#include "asm/mmu.h"
-+#include "os.h"
-+#include "skas.h"
-+
-+int init_new_context_skas(struct task_struct *task, struct mm_struct *mm)
-+{
-+      int from;
-+
-+      if((current->mm != NULL) && (current->mm != &init_mm))
-+              from = current->mm->context.skas.mm_fd;
-+      else from = -1;
-+
-+      mm->context.skas.mm_fd = new_mm(from);
-+      if(mm->context.skas.mm_fd < 0)
-+              panic("init_new_context_skas - new_mm failed, errno = %d\n",
-+                    mm->context.skas.mm_fd);
-+
-+      return(0);
-+}
-+
-+void destroy_context_skas(struct mm_struct *mm)
-+{
-+      os_close_file(mm->context.skas.mm_fd);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/process.c um/arch/um/kernel/skas/process.c
---- orig/arch/um/kernel/skas/process.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/process.c   2003-05-15 15:21:48.000000000 -0400
-@@ -0,0 +1,409 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <errno.h>
-+#include <signal.h>
-+#include <setjmp.h>
-+#include <sched.h>
-+#include <sys/wait.h>
-+#include <sys/ptrace.h>
-+#include <sys/mman.h>
-+#include <sys/user.h>
-+#include <asm/unistd.h>
-+#include "user.h"
-+#include "ptrace_user.h"
-+#include "time_user.h"
-+#include "sysdep/ptrace.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "skas.h"
-+#include "sysdep/sigcontext.h"
-+#include "os.h"
-+#include "proc_mm.h"
-+#include "skas_ptrace.h"
-+#include "chan_user.h"
-+
-+int is_skas_winch(int pid, int fd, void *data)
-+{
-+      if(pid != getpid())
-+              return(0);
-+
-+      register_winch_irq(-1, fd, -1, data);
-+      return(1);
-+}
-+
-+unsigned long exec_regs[FRAME_SIZE];
-+unsigned long exec_fp_regs[HOST_FP_SIZE];
-+unsigned long exec_fpx_regs[HOST_XFP_SIZE];
-+int have_fpx_regs = 1;
-+
-+static void handle_segv(int pid)
-+{
-+      struct ptrace_faultinfo fault;
-+      int err;
-+
-+      err = ptrace(PTRACE_FAULTINFO, pid, 0, &fault);
-+      if(err)
-+              panic("handle_segv - PTRACE_FAULTINFO failed, errno = %d\n",
-+                    errno);
-+
-+      segv(fault.addr, 0, FAULT_WRITE(fault.is_write), 1, NULL);
-+}
-+
-+static void handle_trap(int pid, union uml_pt_regs *regs)
-+{
-+      int err, syscall_nr, status;
-+
-+      syscall_nr = PT_SYSCALL_NR(regs->skas.regs);
-+      if(syscall_nr < 1){
-+              relay_signal(SIGTRAP, regs);
-+              return;
-+      }
-+      UPT_SYSCALL_NR(regs) = syscall_nr;
-+
-+      err = ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_NR_OFFSET, __NR_getpid);
-+      if(err < 0)
-+              panic("handle_trap - nullifying syscall failed errno = %d\n", 
-+                    errno);
-+
-+      err = ptrace(PTRACE_SYSCALL, pid, 0, 0);
-+      if(err < 0)
-+              panic("handle_trap - continuing to end of syscall failed, "
-+                    "errno = %d\n", errno);
-+
-+      err = waitpid(pid, &status, WUNTRACED);
-+      if((err < 0) || !WIFSTOPPED(status) || (WSTOPSIG(status) != SIGTRAP))
-+              panic("handle_trap - failed to wait at end of syscall, "
-+                    "errno = %d, status = %d\n", errno, status);
-+
-+      handle_syscall(regs);
-+}
-+
-+static int userspace_tramp(void *arg)
-+{
-+      init_new_thread_signals(0);
-+      enable_timer();
-+      ptrace(PTRACE_TRACEME, 0, 0, 0);
-+      os_stop_process(os_getpid());
-+      return(0);
-+}
-+
-+int userspace_pid;
-+
-+void start_userspace(void)
-+{
-+      void *stack;
-+      unsigned long sp;
-+      int pid, status, n;
-+
-+      stack = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC,
-+                   MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-+      if(stack == MAP_FAILED)
-+              panic("start_userspace : mmap failed, errno = %d", errno);
-+      sp = (unsigned long) stack + PAGE_SIZE - sizeof(void *);
-+
-+      pid = clone(userspace_tramp, (void *) sp, 
-+                  CLONE_FILES | CLONE_VM | SIGCHLD, NULL);
-+      if(pid < 0)
-+              panic("start_userspace : clone failed, errno = %d", errno);
-+
-+      do {
-+              n = waitpid(pid, &status, WUNTRACED);
-+              if(n < 0)
-+                      panic("start_userspace : wait failed, errno = %d", 
-+                            errno);
-+      } while(WIFSTOPPED(status) && (WSTOPSIG(status) == SIGVTALRM));
-+
-+      if(!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGSTOP))
-+              panic("start_userspace : expected SIGSTOP, got status = %d",
-+                    status);
-+
-+      if(munmap(stack, PAGE_SIZE) < 0)
-+              panic("start_userspace : munmap failed, errno = %d\n", errno);
-+
-+      userspace_pid = pid;
-+}
-+
-+void userspace(union uml_pt_regs *regs)
-+{
-+      int err, status, op;
-+
-+      restore_registers(regs);
-+              
-+      err = ptrace(PTRACE_SYSCALL, userspace_pid, 0, 0);
-+      if(err)
-+              panic("userspace - PTRACE_SYSCALL failed, errno = %d\n", 
-+                     errno);
-+      while(1){
-+              err = waitpid(userspace_pid, &status, WUNTRACED);
-+              if(err < 0)
-+                      panic("userspace - waitpid failed, errno = %d\n", 
-+                            errno);
-+
-+              regs->skas.is_user = 1;
-+              save_registers(regs);
-+
-+              if(WIFSTOPPED(status)){
-+                      switch(WSTOPSIG(status)){
-+                      case SIGSEGV:
-+                              handle_segv(userspace_pid);
-+                              break;
-+                      case SIGTRAP:
-+                              handle_trap(userspace_pid, regs);
-+                              break;
-+                      case SIGIO:
-+                      case SIGVTALRM:
-+                      case SIGILL:
-+                      case SIGBUS:
-+                      case SIGFPE:
-+                      case SIGWINCH:
-+                              user_signal(WSTOPSIG(status), regs);
-+                              break;
-+                      default:
-+                              printk("userspace - child stopped with signal "
-+                                     "%d\n", WSTOPSIG(status));
-+                      }
-+                      interrupt_end();
-+              }
-+
-+              restore_registers(regs);
-+
-+              op = singlestepping_skas() ? PTRACE_SINGLESTEP : 
-+                      PTRACE_SYSCALL;
-+              err = ptrace(op, userspace_pid, 0, 0);
-+              if(err)
-+                      panic("userspace - PTRACE_SYSCALL failed, "
-+                            "errno = %d\n", errno);
-+      }
-+}
-+
-+void new_thread(void *stack, void **switch_buf_ptr, void **fork_buf_ptr,
-+              void (*handler)(int))
-+{
-+      jmp_buf switch_buf, fork_buf;
-+
-+      *switch_buf_ptr = &switch_buf;
-+      *fork_buf_ptr = &fork_buf;
-+
-+      if(setjmp(fork_buf) == 0)
-+              new_thread_proc(stack, handler);
-+
-+      remove_sigstack();
-+}
-+
-+void thread_wait(void *sw, void *fb)
-+{
-+      jmp_buf buf, **switch_buf = sw, *fork_buf;
-+
-+      *switch_buf = &buf;
-+      fork_buf = fb;
-+      if(setjmp(buf) == 0)
-+              longjmp(*fork_buf, 1);
-+}
-+
-+static int move_registers(int int_op, int fp_op, union uml_pt_regs *regs,
-+                        unsigned long *fp_regs)
-+{
-+      if(ptrace(int_op, userspace_pid, 0, regs->skas.regs) < 0)
-+              return(-errno);
-+      if(ptrace(fp_op, userspace_pid, 0, fp_regs) < 0)
-+              return(-errno);
-+      return(0);
-+}
-+
-+void save_registers(union uml_pt_regs *regs)
-+{
-+      unsigned long *fp_regs;
-+      int err, fp_op;
-+
-+      if(have_fpx_regs){
-+              fp_op = PTRACE_GETFPXREGS;
-+              fp_regs = regs->skas.xfp;
-+      }
-+      else {
-+              fp_op = PTRACE_GETFPREGS;
-+              fp_regs = regs->skas.fp;
-+      }
-+
-+      err = move_registers(PTRACE_GETREGS, fp_op, regs, fp_regs);
-+      if(err)
-+              panic("save_registers - saving registers failed, errno = %d\n",
-+                    err);
-+}
-+
-+void restore_registers(union uml_pt_regs *regs)
-+{
-+      unsigned long *fp_regs;
-+      int err, fp_op;
-+
-+      if(have_fpx_regs){
-+              fp_op = PTRACE_SETFPXREGS;
-+              fp_regs = regs->skas.xfp;
-+      }
-+      else {
-+              fp_op = PTRACE_SETFPREGS;
-+              fp_regs = regs->skas.fp;
-+      }
-+
-+      err = move_registers(PTRACE_SETREGS, fp_op, regs, fp_regs);
-+      if(err)
-+              panic("restore_registers - saving registers failed, "
-+                    "errno = %d\n", err);
-+}
-+
-+void switch_threads(void *me, void *next)
-+{
-+      jmp_buf my_buf, **me_ptr = me, *next_buf = next;
-+      
-+      *me_ptr = &my_buf;
-+      if(setjmp(my_buf) == 0)
-+              longjmp(*next_buf, 1);
-+}
-+
-+static jmp_buf initial_jmpbuf;
-+
-+/* XXX Make these percpu */
-+static void (*cb_proc)(void *arg);
-+static void *cb_arg;
-+static jmp_buf *cb_back;
-+
-+int start_idle_thread(void *stack, void *switch_buf_ptr, void **fork_buf_ptr)
-+{
-+      jmp_buf **switch_buf = switch_buf_ptr;
-+      int n;
-+
-+      *fork_buf_ptr = &initial_jmpbuf;
-+      n = setjmp(initial_jmpbuf);
-+      if(n == 0)
-+              new_thread_proc((void *) stack, new_thread_handler);
-+      else if(n == 1)
-+              remove_sigstack();
-+      else if(n == 2){
-+              (*cb_proc)(cb_arg);
-+              longjmp(*cb_back, 1);
-+      }
-+      else if(n == 3){
-+              kmalloc_ok = 0;
-+              return(0);
-+      }
-+      else if(n == 4){
-+              kmalloc_ok = 0;
-+              return(1);
-+      }
-+      longjmp(**switch_buf, 1);
-+}
-+
-+void remove_sigstack(void)
-+{
-+      stack_t stack = ((stack_t) { .ss_flags  = SS_DISABLE,
-+                                   .ss_sp     = NULL,
-+                                   .ss_size   = 0 });
-+
-+      if(sigaltstack(&stack, NULL) != 0)
-+              panic("disabling signal stack failed, errno = %d\n", errno);
-+}
-+
-+void initial_thread_cb_skas(void (*proc)(void *), void *arg)
-+{
-+      jmp_buf here;
-+
-+      cb_proc = proc;
-+      cb_arg = arg;
-+      cb_back = &here;
-+
-+      block_signals();
-+      if(setjmp(here) == 0)
-+              longjmp(initial_jmpbuf, 2);
-+      unblock_signals();
-+
-+      cb_proc = NULL;
-+      cb_arg = NULL;
-+      cb_back = NULL;
-+}
-+
-+void halt_skas(void)
-+{
-+      block_signals();
-+      longjmp(initial_jmpbuf, 3);
-+}
-+
-+void reboot_skas(void)
-+{
-+      block_signals();
-+      longjmp(initial_jmpbuf, 4);
-+}
-+
-+int new_mm(int from)
-+{
-+      struct proc_mm_op copy;
-+      int n, fd = os_open_file("/proc/mm", 
-+                               of_cloexec(of_write(OPENFLAGS())), 0);
-+
-+      if(fd < 0)
-+              return(-errno);
-+
-+      if(from != -1){
-+              copy = ((struct proc_mm_op) { .op       = MM_COPY_SEGMENTS,
-+                                            .u        = 
-+                                            { .copy_segments  = from } } );
-+              n = os_write_file(fd, &copy, sizeof(copy));
-+              if(n != sizeof(copy)) 
-+                      printk("new_mm : /proc/mm copy_segments failed, "
-+                             "errno = %d\n", errno);
-+      }
-+
-+      return(fd);
-+}
-+
-+void switch_mm_skas(int mm_fd)
-+{
-+      int err;
-+
-+      err = ptrace(PTRACE_SWITCH_MM, userspace_pid, 0, mm_fd);
-+      if(err)
-+              panic("switch_mm_skas - PTRACE_SWITCH_MM failed, errno = %d\n",
-+                    errno);
-+}
-+
-+void kill_off_processes_skas(void)
-+{
-+      os_kill_process(userspace_pid, 1);
-+}
-+
-+void init_registers(int pid)
-+{
-+      int err;
-+
-+      if(ptrace(PTRACE_GETREGS, pid, 0, exec_regs) < 0)
-+              panic("check_ptrace : PTRACE_GETREGS failed, errno = %d", 
-+                    errno);
-+
-+      err = ptrace(PTRACE_GETFPXREGS, pid, 0, exec_fpx_regs);
-+      if(!err)
-+              return;
-+
-+      have_fpx_regs = 0;
-+      if(errno != EIO)
-+              panic("check_ptrace : PTRACE_GETFPXREGS failed, errno = %d", 
-+                    errno);
-+
-+      err = ptrace(PTRACE_GETFPREGS, pid, 0, exec_fp_regs);
-+      if(err)
-+              panic("check_ptrace : PTRACE_GETFPREGS failed, errno = %d", 
-+                    errno);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/process_kern.c um/arch/um/kernel/skas/process_kern.c
---- orig/arch/um/kernel/skas/process_kern.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/process_kern.c      2002-12-22 20:37:39.000000000 -0500
-@@ -0,0 +1,191 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/sched.h"
-+#include "linux/slab.h"
-+#include "kern_util.h"
-+#include "time_user.h"
-+#include "signal_user.h"
-+#include "skas.h"
-+#include "os.h"
-+#include "user_util.h"
-+#include "tlb.h"
-+#include "frame.h"
-+#include "kern.h"
-+#include "mode.h"
-+
-+int singlestepping_skas(void)
-+{
-+      int ret = current->ptrace & PT_DTRACE;
-+
-+      current->ptrace &= ~PT_DTRACE;
-+      return(ret);
-+}
-+
-+void *_switch_to_skas(void *prev, void *next)
-+{
-+      struct task_struct *from, *to;
-+
-+      from = prev;
-+      to = next;
-+
-+      /* XXX need to check runqueues[cpu].idle */
-+      if(current->pid == 0)
-+              switch_timers(0);
-+
-+      to->thread.prev_sched = from;
-+      set_current(to);
-+
-+      switch_threads(&from->thread.mode.skas.switch_buf, 
-+                     to->thread.mode.skas.switch_buf);
-+
-+      if(current->pid == 0)
-+              switch_timers(1);
-+
-+      return(current->thread.prev_sched);
-+}
-+
-+extern void schedule_tail(struct task_struct *prev);
-+
-+void new_thread_handler(int sig)
-+{
-+      int (*fn)(void *), n;
-+      void *arg;
-+
-+      fn = current->thread.request.u.thread.proc;
-+      arg = current->thread.request.u.thread.arg;
-+      change_sig(SIGUSR1, 1);
-+      thread_wait(&current->thread.mode.skas.switch_buf, 
-+                  current->thread.mode.skas.fork_buf);
-+
-+      if(current->thread.prev_sched != NULL)
-+              schedule_tail(current->thread.prev_sched);
-+      current->thread.prev_sched = NULL;
-+
-+      n = run_kernel_thread(fn, arg, &current->thread.exec_buf);
-+      if(n == 1)
-+              userspace(&current->thread.regs.regs);
-+      else do_exit(0);
-+}
-+
-+void new_thread_proc(void *stack, void (*handler)(int sig))
-+{
-+      init_new_thread_stack(stack, handler);
-+      os_usr1_process(os_getpid());
-+}
-+
-+void release_thread_skas(struct task_struct *task)
-+{
-+}
-+
-+void exit_thread_skas(void)
-+{
-+}
-+
-+void fork_handler(int sig)
-+{
-+        change_sig(SIGUSR1, 1);
-+      thread_wait(&current->thread.mode.skas.switch_buf, 
-+                  current->thread.mode.skas.fork_buf);
-+      
-+      force_flush_all();
-+      if(current->thread.prev_sched != NULL)
-+              schedule_tail(current->thread.prev_sched);
-+      current->thread.prev_sched = NULL;
-+      unblock_signals();
-+
-+      userspace(&current->thread.regs.regs);
-+}
-+
-+int copy_thread_skas(int nr, unsigned long clone_flags, unsigned long sp,
-+                   unsigned long stack_top, struct task_struct * p, 
-+                   struct pt_regs *regs)
-+{
-+      void (*handler)(int);
-+
-+      if(current->thread.forking){
-+              memcpy(&p->thread.regs.regs.skas, 
-+                     &current->thread.regs.regs.skas, 
-+                     sizeof(p->thread.regs.regs.skas));
-+              REGS_SET_SYSCALL_RETURN(p->thread.regs.regs.skas.regs, 0);
-+              if(sp != 0) REGS_SP(p->thread.regs.regs.skas.regs) = sp;
-+
-+              handler = fork_handler;
-+      }
-+      else {
-+              memcpy(p->thread.regs.regs.skas.regs, exec_regs, 
-+                     sizeof(p->thread.regs.regs.skas.regs));
-+              memcpy(p->thread.regs.regs.skas.fp, exec_fp_regs, 
-+                     sizeof(p->thread.regs.regs.skas.fp));
-+              memcpy(p->thread.regs.regs.skas.xfp, exec_fpx_regs, 
-+                     sizeof(p->thread.regs.regs.skas.xfp));
-+                p->thread.request.u.thread = current->thread.request.u.thread;
-+              handler = new_thread_handler;
-+      }
-+
-+      new_thread((void *) p->thread.kernel_stack, 
-+                 &p->thread.mode.skas.switch_buf, 
-+                 &p->thread.mode.skas.fork_buf, handler);
-+      return(0);
-+}
-+
-+void init_idle_skas(void)
-+{
-+      cpu_tasks[current->processor].pid = os_getpid();
-+}
-+
-+extern void start_kernel(void);
-+
-+static int start_kernel_proc(void *unused)
-+{
-+      int pid;
-+
-+      block_signals();
-+      pid = os_getpid();
-+
-+      cpu_tasks[0].pid = pid;
-+      cpu_tasks[0].task = current;
-+#ifdef CONFIG_SMP
-+      cpu_online_map = 1;
-+#endif
-+      start_kernel();
-+      return(0);
-+}
-+
-+int start_uml_skas(void)
-+{
-+      start_userspace();
-+      capture_signal_stack();
-+
-+      init_new_thread_signals(1);
-+      idle_timer();
-+
-+      init_task.thread.request.u.thread.proc = start_kernel_proc;
-+      init_task.thread.request.u.thread.arg = NULL;
-+      return(start_idle_thread((void *) init_task.thread.kernel_stack,
-+                               &init_task.thread.mode.skas.switch_buf,
-+                               &init_task.thread.mode.skas.fork_buf));
-+}
-+
-+int external_pid_skas(struct task_struct *task)
-+{
-+      return(userspace_pid);
-+}
-+
-+int thread_pid_skas(struct thread_struct *thread)
-+{
-+      return(userspace_pid);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/syscall_kern.c um/arch/um/kernel/skas/syscall_kern.c
---- orig/arch/um/kernel/skas/syscall_kern.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/syscall_kern.c      2002-12-08 21:01:44.000000000 -0500
-@@ -0,0 +1,42 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/sys.h"
-+#include "asm/errno.h"
-+#include "asm/unistd.h"
-+#include "asm/ptrace.h"
-+#include "asm/current.h"
-+#include "sysdep/syscalls.h"
-+#include "kern_util.h"
-+
-+extern syscall_handler_t *sys_call_table[];
-+
-+long execute_syscall_skas(void *r)
-+{
-+      struct pt_regs *regs = r;
-+      long res;
-+      int syscall;
-+
-+      current->thread.nsyscalls++;
-+      nsyscalls++;
-+      syscall = UPT_SYSCALL_NR(&regs->regs);
-+
-+      if((syscall >= NR_syscalls) || (syscall < 0))
-+              res = -ENOSYS;
-+      else res = EXECUTE_SYSCALL(syscall, regs);
-+
-+      return(res);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/syscall_user.c um/arch/um/kernel/skas/syscall_user.c
---- orig/arch/um/kernel/skas/syscall_user.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/syscall_user.c      2002-12-08 21:00:12.000000000 -0500
-@@ -0,0 +1,46 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdlib.h>
-+#include <signal.h>
-+#include "kern_util.h"
-+#include "syscall_user.h"
-+#include "sysdep/ptrace.h"
-+#include "sysdep/sigcontext.h"
-+
-+/* XXX Bogus */
-+#define ERESTARTSYS   512
-+#define ERESTARTNOINTR        513
-+#define ERESTARTNOHAND        514
-+
-+void handle_syscall(union uml_pt_regs *regs)
-+{
-+      long result;
-+      int index;
-+
-+      index = record_syscall_start(UPT_SYSCALL_NR(regs));
-+
-+      syscall_trace();
-+      result = execute_syscall(regs);
-+
-+      REGS_SET_SYSCALL_RETURN(regs->skas.regs, result);
-+      if((result == -ERESTARTNOHAND) || (result == -ERESTARTSYS) || 
-+         (result == -ERESTARTNOINTR))
-+              do_signal(result);
-+
-+      syscall_trace();
-+      record_syscall_end(index, result);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/sys-i386/Makefile um/arch/um/kernel/skas/sys-i386/Makefile
---- orig/arch/um/kernel/skas/sys-i386/Makefile 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/sys-i386/Makefile   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,17 @@
-+# 
-+# Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+O_TARGET = sys-i386.o
-+
-+obj-y = sigcontext.o
-+
-+USER_OBJS = sigcontext.o
-+
-+include $(TOPDIR)/Rules.make
-+
-+$(USER_OBJS) : %.o: %.c
-+      $(CC) $(CFLAGS_$@) $(USER_CFLAGS) -c -o $@ $<
-+
-+clean :
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/sys-i386/sigcontext.c um/arch/um/kernel/skas/sys-i386/sigcontext.c
---- orig/arch/um/kernel/skas/sys-i386/sigcontext.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/sys-i386/sigcontext.c       2002-12-08 20:38:46.000000000 -0500
-@@ -0,0 +1,115 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <errno.h>
-+#include <asm/sigcontext.h>
-+#include <sys/ptrace.h>
-+#include <linux/ptrace.h>
-+#include "sysdep/ptrace.h"
-+#include "sysdep/ptrace_user.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "sigcontext.h"
-+
-+extern int userspace_pid;
-+
-+int copy_sc_from_user_skas(union uml_pt_regs *regs, void *from_ptr)
-+{
-+      struct sigcontext sc, *from = from_ptr;
-+      unsigned long fpregs[FP_FRAME_SIZE];
-+      int err;
-+
-+      err = copy_from_user_proc(&sc, from, sizeof(sc));
-+      err |= copy_from_user_proc(fpregs, sc.fpstate, sizeof(fpregs));
-+      if(err)
-+              return(err);
-+
-+      regs->skas.regs[GS] = sc.gs;
-+      regs->skas.regs[FS] = sc.fs;
-+      regs->skas.regs[ES] = sc.es;
-+      regs->skas.regs[DS] = sc.ds;
-+      regs->skas.regs[EDI] = sc.edi;
-+      regs->skas.regs[ESI] = sc.esi;
-+      regs->skas.regs[EBP] = sc.ebp;
-+      regs->skas.regs[UESP] = sc.esp;
-+      regs->skas.regs[EBX] = sc.ebx;
-+      regs->skas.regs[EDX] = sc.edx;
-+      regs->skas.regs[ECX] = sc.ecx;
-+      regs->skas.regs[EAX] = sc.eax;
-+      regs->skas.regs[EIP] = sc.eip;
-+      regs->skas.regs[CS] = sc.cs;
-+      regs->skas.regs[EFL] = sc.eflags;
-+      regs->skas.regs[UESP] = sc.esp_at_signal;
-+      regs->skas.regs[SS] = sc.ss;
-+      regs->skas.fault_addr = sc.cr2;
-+      regs->skas.fault_type = FAULT_WRITE(sc.err);
-+      regs->skas.trap_type = sc.trapno;
-+
-+      err = ptrace(PTRACE_SETFPREGS, userspace_pid, 0, fpregs);
-+      if(err < 0){
-+              printk("copy_sc_to_user - PTRACE_SETFPREGS failed, "
-+                     "errno = %d\n", errno);
-+              return(1);
-+      }
-+
-+      return(0);
-+}
-+
-+int copy_sc_to_user_skas(void *to_ptr, void *fp, union uml_pt_regs *regs, 
-+                       unsigned long fault_addr, int fault_type)
-+{
-+      struct sigcontext sc, *to = to_ptr;
-+      struct _fpstate *to_fp;
-+      unsigned long fpregs[FP_FRAME_SIZE];
-+      int err;
-+
-+      sc.gs = regs->skas.regs[GS];
-+      sc.fs = regs->skas.regs[FS];
-+      sc.es = regs->skas.regs[ES];
-+      sc.ds = regs->skas.regs[DS];
-+      sc.edi = regs->skas.regs[EDI];
-+      sc.esi = regs->skas.regs[ESI];
-+      sc.ebp = regs->skas.regs[EBP];
-+      sc.esp = regs->skas.regs[UESP];
-+      sc.ebx = regs->skas.regs[EBX];
-+      sc.edx = regs->skas.regs[EDX];
-+      sc.ecx = regs->skas.regs[ECX];
-+      sc.eax = regs->skas.regs[EAX];
-+      sc.eip = regs->skas.regs[EIP];
-+      sc.cs = regs->skas.regs[CS];
-+      sc.eflags = regs->skas.regs[EFL];
-+      sc.esp_at_signal = regs->skas.regs[UESP];
-+      sc.ss = regs->skas.regs[SS];
-+      sc.cr2 = fault_addr;
-+      sc.err = TO_SC_ERR(fault_type);
-+      sc.trapno = regs->skas.trap_type;
-+
-+      err = ptrace(PTRACE_GETFPREGS, userspace_pid, 0, fpregs);
-+      if(err < 0){
-+              printk("copy_sc_to_user - PTRACE_GETFPREGS failed, "
-+                     "errno = %d\n", errno);
-+              return(1);
-+      }
-+      to_fp = (struct _fpstate *) 
-+              (fp ? (unsigned long) fp : ((unsigned long) to + sizeof(*to)));
-+      sc.fpstate = to_fp;
-+
-+      if(err)
-+              return(err);
-+
-+      return(copy_to_user_proc(to, &sc, sizeof(sc)) ||
-+             copy_to_user_proc(to_fp, fpregs, sizeof(fpregs)));
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/time.c um/arch/um/kernel/skas/time.c
---- orig/arch/um/kernel/skas/time.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/time.c      2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,30 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <sys/signal.h>
-+#include <sys/time.h>
-+#include "time_user.h"
-+#include "process.h"
-+#include "user.h"
-+
-+void user_time_init_skas(void)
-+{
-+        if(signal(SIGALRM, (__sighandler_t) alarm_handler) == SIG_ERR)
-+                panic("Couldn't set SIGALRM handler");
-+      if(signal(SIGVTALRM, (__sighandler_t) alarm_handler) == SIG_ERR)
-+              panic("Couldn't set SIGVTALRM handler");
-+      set_interval(ITIMER_VIRTUAL);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/tlb.c um/arch/um/kernel/skas/tlb.c
---- orig/arch/um/kernel/skas/tlb.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/tlb.c       2002-12-22 18:30:35.000000000 -0500
-@@ -0,0 +1,153 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/stddef.h"
-+#include "linux/sched.h"
-+#include "asm/page.h"
-+#include "asm/pgtable.h"
-+#include "asm/mmu.h"
-+#include "user_util.h"
-+#include "mem_user.h"
-+#include "skas.h"
-+#include "os.h"
-+
-+static void fix_range(struct mm_struct *mm, unsigned long start_addr,
-+                    unsigned long end_addr, int force)
-+{
-+      pgd_t *npgd;
-+      pmd_t *npmd;
-+      pte_t *npte;
-+      unsigned long addr;
-+      int r, w, x, err, fd;
-+
-+      if(mm == NULL) return;
-+      fd = mm->context.skas.mm_fd;
-+      for(addr = start_addr; addr < end_addr;){
-+              npgd = pgd_offset(mm, addr);
-+              npmd = pmd_offset(npgd, addr);
-+              if(pmd_present(*npmd)){
-+                      npte = pte_offset(npmd, addr);
-+                      r = pte_read(*npte);
-+                      w = pte_write(*npte);
-+                      x = pte_exec(*npte);
-+                      if(!pte_dirty(*npte)) w = 0;
-+                      if(!pte_young(*npte)){
-+                              r = 0;
-+                              w = 0;
-+                      }
-+                      if(force || pte_newpage(*npte)){
-+                              err = unmap(fd, (void *) addr, PAGE_SIZE);
-+                              if(err < 0)
-+                                      panic("munmap failed, errno = %d\n",
-+                                            -err);
-+                              if(pte_present(*npte))
-+                                      map(fd, addr, 
-+                                          pte_val(*npte) & PAGE_MASK,
-+                                          PAGE_SIZE, r, w, x);
-+                      }
-+                      else if(pte_newprot(*npte)){
-+                              protect(fd, addr, PAGE_SIZE, r, w, x, 1);
-+                      }
-+                      *npte = pte_mkuptodate(*npte);
-+                      addr += PAGE_SIZE;
-+              }
-+              else {
-+                      if(force || pmd_newpage(*npmd)){
-+                              err = unmap(fd, (void *) addr, PMD_SIZE);
-+                              if(err < 0)
-+                                      panic("munmap failed, errno = %d\n",
-+                                            -err);
-+                              pmd_mkuptodate(*npmd);
-+                      }
-+                      addr += PMD_SIZE;
-+              }
-+      }
-+}
-+
-+static void flush_kernel_vm_range(unsigned long start, unsigned long end)
-+{
-+      struct mm_struct *mm;
-+      pgd_t *pgd;
-+      pmd_t *pmd;
-+      pte_t *pte;
-+      unsigned long addr;
-+      int updated = 0, err;
-+
-+      mm = &init_mm;
-+      for(addr = start_vm; addr < end_vm;){
-+              pgd = pgd_offset(mm, addr);
-+              pmd = pmd_offset(pgd, addr);
-+              if(pmd_present(*pmd)){
-+                      pte = pte_offset(pmd, addr);
-+                      if(!pte_present(*pte) || pte_newpage(*pte)){
-+                              updated = 1;
-+                              err = os_unmap_memory((void *) addr, 
-+                                                    PAGE_SIZE);
-+                              if(err < 0)
-+                                      panic("munmap failed, errno = %d\n",
-+                                            -err);
-+                              if(pte_present(*pte))
-+                                      map_memory(addr, 
-+                                                 pte_val(*pte) & PAGE_MASK,
-+                                                 PAGE_SIZE, 1, 1, 1);
-+                      }
-+                      else if(pte_newprot(*pte)){
-+                              updated = 1;
-+                              protect_memory(addr, PAGE_SIZE, 1, 1, 1, 1);
-+                      }
-+                      addr += PAGE_SIZE;
-+              }
-+              else {
-+                      if(pmd_newpage(*pmd)){
-+                              updated = 1;
-+                              err = os_unmap_memory((void *) addr, PMD_SIZE);
-+                              if(err < 0)
-+                                      panic("munmap failed, errno = %d\n",
-+                                            -err);
-+                      }
-+                      addr += PMD_SIZE;
-+              }
-+      }
-+}
-+
-+void flush_tlb_kernel_vm_skas(void)
-+{
-+      flush_kernel_vm_range(start_vm, end_vm);
-+}
-+
-+void __flush_tlb_one_skas(unsigned long addr)
-+{
-+      flush_kernel_vm_range(addr, addr + PAGE_SIZE);
-+}
-+
-+void flush_tlb_range_skas(struct mm_struct *mm, unsigned long start, 
-+                   unsigned long end)
-+{
-+      if(mm == NULL)
-+              flush_kernel_vm_range(start, end);
-+      else fix_range(mm, start, end, 0);
-+}
-+
-+void flush_tlb_mm_skas(struct mm_struct *mm)
-+{
-+      flush_tlb_kernel_vm_skas();
-+      fix_range(mm, 0, host_task_size, 0);
-+}
-+
-+void force_flush_all_skas(void)
-+{
-+      fix_range(current->mm, 0, host_task_size, 1);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/trap_user.c um/arch/um/kernel/skas/trap_user.c
---- orig/arch/um/kernel/skas/trap_user.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/trap_user.c 2002-12-15 13:28:41.000000000 -0500
-@@ -0,0 +1,65 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <signal.h>
-+#include <errno.h>
-+#include <asm/sigcontext.h>
-+#include "sysdep/ptrace.h"
-+#include "signal_user.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "task.h"
-+#include "sigcontext.h"
-+
-+void sig_handler_common_skas(int sig, void *sc_ptr)
-+{
-+      struct sigcontext *sc = sc_ptr;
-+      struct skas_regs *r;
-+      struct signal_info *info;
-+      int save_errno = errno;
-+
-+      r = &TASK_REGS(get_current())->skas;
-+      r->is_user = 0;
-+      r->fault_addr = SC_FAULT_ADDR(sc);
-+      r->fault_type = SC_FAULT_TYPE(sc);
-+      r->trap_type = SC_TRAP_TYPE(sc);
-+
-+      change_sig(SIGUSR1, 1);
-+      info = &sig_info[sig];
-+      if(!info->is_irq) unblock_signals();
-+
-+      (*info->handler)(sig, (union uml_pt_regs *) r);
-+
-+      errno = save_errno;
-+}
-+
-+extern int missed_ticks[];
-+
-+void user_signal(int sig, union uml_pt_regs *regs)
-+{
-+      struct signal_info *info;
-+
-+      if(sig == SIGVTALRM)
-+              missed_ticks[cpu()]++;
-+      regs->skas.is_user = 1;
-+      regs->skas.fault_addr = 0;
-+      regs->skas.fault_type = 0;
-+      regs->skas.trap_type = 0;
-+      info = &sig_info[sig];
-+      (*info->handler)(sig, regs);
-+
-+      unblock_signals();
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/util/Makefile um/arch/um/kernel/skas/util/Makefile
---- orig/arch/um/kernel/skas/util/Makefile     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/util/Makefile       2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,10 @@
-+all: mk_ptregs
-+
-+mk_ptregs : mk_ptregs.o
-+      $(CC) -o mk_ptregs mk_ptregs.o
-+
-+mk_ptregs.o : mk_ptregs.c
-+      $(CC) -c $< 
-+
-+clean : 
-+      $(RM) -f mk_ptregs *.o *~
-diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/util/mk_ptregs.c um/arch/um/kernel/skas/util/mk_ptregs.c
---- orig/arch/um/kernel/skas/util/mk_ptregs.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/util/mk_ptregs.c    2002-11-11 12:10:06.000000000 -0500
-@@ -0,0 +1,50 @@
-+#include <asm/ptrace.h>
-+#include <asm/user.h>
-+
-+#define PRINT_REG(name, val) printf("#define HOST_%s %d\n", (name), (val))
-+
-+int main(int argc, char **argv)
-+{
-+      printf("/* Automatically generated by "
-+             "arch/um/kernel/skas/util/mk_ptregs */\n");
-+      printf("\n");
-+      printf("#ifndef __SKAS_PT_REGS_\n");
-+      printf("#define __SKAS_PT_REGS_\n");
-+      printf("\n");
-+      printf("#define HOST_FRAME_SIZE %d\n", FRAME_SIZE);
-+      printf("#define HOST_FP_SIZE %d\n", 
-+             sizeof(struct user_i387_struct) / sizeof(unsigned long));
-+      printf("#define HOST_XFP_SIZE %d\n", 
-+             sizeof(struct user_fxsr_struct) / sizeof(unsigned long));
-+
-+      PRINT_REG("IP", EIP);
-+      PRINT_REG("SP", UESP);
-+      PRINT_REG("EFLAGS", EFL);
-+      PRINT_REG("EAX", EAX);
-+      PRINT_REG("EBX", EBX);
-+      PRINT_REG("ECX", ECX);
-+      PRINT_REG("EDX", EDX);
-+      PRINT_REG("ESI", ESI);
-+      PRINT_REG("EDI", EDI);
-+      PRINT_REG("EBP", EBP);
-+      PRINT_REG("CS", CS);
-+      PRINT_REG("SS", SS);
-+      PRINT_REG("DS", DS);
-+      PRINT_REG("FS", FS);
-+      PRINT_REG("ES", ES);
-+      PRINT_REG("GS", GS);
-+      printf("\n");
-+      printf("#endif\n");
-+      return(0);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/smp.c um/arch/um/kernel/smp.c
---- orig/arch/um/kernel/smp.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/smp.c    2003-02-22 14:28:45.000000000 -0500
-@@ -0,0 +1,324 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/config.h"
-+
-+
-+#ifdef CONFIG_SMP
-+
-+#include "linux/sched.h"
-+#include "linux/threads.h"
-+#include "linux/interrupt.h"
-+#include "asm/smp.h"
-+#include "asm/processor.h"
-+#include "asm/spinlock.h"
-+#include "asm/softirq.h"
-+#include "asm/hardirq.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "irq_user.h"
-+#include "kern.h"
-+#include "os.h"
-+
-+/* Total count of live CPUs, set by smp_boot_cpus */
-+int smp_num_cpus = 1;
-+
-+/* The 'big kernel lock' */
-+spinlock_cacheline_t kernel_flag_cacheline = {SPIN_LOCK_UNLOCKED};
-+
-+/* Per CPU bogomips and other parameters */
-+
-+/* The only piece used here is the ipi pipe, which is set before SMP is
-+ * started and never changed.
-+ */
-+struct cpuinfo_um cpu_data[NR_CPUS];
-+
-+/* CPU online map, set by smp_boot_cpus */
-+unsigned long cpu_online_map;
-+
-+atomic_t global_bh_count;
-+
-+/* Set when the idlers are all forked */
-+int smp_threads_ready = 0;
-+
-+/* Not used by UML */
-+unsigned char global_irq_holder = 0;
-+unsigned volatile long global_irq_lock;
-+
-+/* A statistic, can be a little off */
-+static int num_reschedules_sent = 0;
-+
-+void smp_send_reschedule(int cpu)
-+{
-+      write(cpu_data[cpu].ipi_pipe[1], "R", 1);
-+      num_reschedules_sent++;
-+}
-+
-+static void show(char * str)
-+{
-+      int cpu = smp_processor_id();
-+
-+      printk(KERN_INFO "\n%s, CPU %d:\n", str, cpu);
-+}
-+      
-+#define MAXCOUNT 100000000
-+
-+static inline void wait_on_bh(void)
-+{
-+      int count = MAXCOUNT;
-+      do {
-+              if (!--count) {
-+                      show("wait_on_bh");
-+                      count = ~0;
-+              }
-+              /* nothing .. wait for the other bh's to go away */
-+      } while (atomic_read(&global_bh_count) != 0);
-+}
-+
-+/*
-+ * This is called when we want to synchronize with
-+ * bottom half handlers. We need to wait until
-+ * no other CPU is executing any bottom half handler.
-+ *
-+ * Don't wait if we're already running in an interrupt
-+ * context or are inside a bh handler. 
-+ */
-+void synchronize_bh(void)
-+{
-+      if (atomic_read(&global_bh_count) && !in_interrupt())
-+              wait_on_bh();
-+}
-+
-+void smp_send_stop(void)
-+{
-+      int i;
-+ 
-+      printk(KERN_INFO "Stopping all CPUs...");
-+      for(i = 0; i < ncpus; i++){
-+              if(i == current->processor)
-+                      continue;
-+              write(cpu_data[i].ipi_pipe[1], "S", 1);
-+      }
-+      printk("done\n");
-+}
-+
-+
-+static atomic_t smp_commenced = ATOMIC_INIT(0);
-+static volatile unsigned long smp_callin_map = 0;
-+
-+void smp_commence(void)
-+{
-+      printk("All CPUs are go!\n");
-+
-+      wmb();
-+      atomic_set(&smp_commenced, 1);
-+}
-+
-+static int idle_proc(void *unused)
-+{
-+      int cpu, err;
-+
-+      set_current(current);
-+      del_from_runqueue(current);
-+      unhash_process(current);
-+
-+      cpu = current->processor;
-+      err = os_pipe(cpu_data[cpu].ipi_pipe, 1, 1);
-+      if(err)
-+              panic("CPU#%d failed to create IPI pipe, errno = %d", cpu, 
-+                    -err);
-+
-+      activate_ipi(cpu_data[cpu].ipi_pipe[0], 
-+                   current->thread.mode.tt.extern_pid);
-+ 
-+      wmb();
-+      if (test_and_set_bit(current->processor, &smp_callin_map)) {
-+              printk("huh, CPU#%d already present??\n", current->processor);
-+              BUG();
-+      }
-+
-+      while (!atomic_read(&smp_commenced))
-+              cpu_relax();
-+
-+      init_idle();
-+      cpu_idle();
-+      return(0);
-+}
-+
-+static int idle_thread(int (*fn)(void *), int cpu)
-+{
-+      struct task_struct *new_task;
-+      int pid;
-+      unsigned char c;
-+
-+        current->thread.request.u.thread.proc = fn;
-+        current->thread.request.u.thread.arg = NULL;
-+      pid = do_fork(CLONE_VM | CLONE_PID, 0, NULL, 0);
-+      if(pid < 0) panic("do_fork failed in idle_thread");
-+      new_task = get_task(pid, 1);
-+
-+      cpu_tasks[cpu].pid = new_task->thread.mode.tt.extern_pid;
-+      cpu_tasks[cpu].task = new_task;
-+      init_tasks[cpu] = new_task;
-+      new_task->processor = cpu;
-+      new_task->cpus_allowed = 1 << cpu;
-+      new_task->cpus_runnable = new_task->cpus_allowed;
-+      CHOOSE_MODE(write(new_task->thread.mode.tt.switch_pipe[1], &c, 
-+                        sizeof(c)),
-+                  ({ panic("skas mode doesn't support SMP"); }));
-+      return(new_task->thread.mode.tt.extern_pid);
-+}
-+
-+void smp_boot_cpus(void)
-+{
-+      int err;
-+
-+      set_bit(0, &cpu_online_map);
-+      set_bit(0, &smp_callin_map);
-+
-+      err = os_pipe(cpu_data[0].ipi_pipe, 1, 1);
-+      if(err) panic("CPU#0 failed to create IPI pipe, errno = %d", -err);
-+
-+      activate_ipi(cpu_data[0].ipi_pipe[0], 
-+                   current->thread.mode.tt.extern_pid);
-+
-+      if(ncpus < 1){
-+              printk(KERN_INFO "ncpus set to 1\n");
-+              ncpus = 1;
-+      }
-+      else if(ncpus > NR_CPUS){
-+              printk(KERN_INFO 
-+                     "ncpus can't be greater than NR_CPUS, set to %d\n",
-+                     NR_CPUS);
-+              ncpus = NR_CPUS;
-+      }
-+
-+      if(ncpus > 1){
-+              int i, pid;
-+
-+              printk(KERN_INFO "Starting up other processors:\n");
-+              for(i=1;i<ncpus;i++){
-+                      int waittime;
-+
-+                      /* Do this early, for hard_smp_processor_id()  */
-+                      cpu_tasks[i].pid = -1;
-+                      set_bit(i, &cpu_online_map);
-+                      smp_num_cpus++;
-+
-+                      pid = idle_thread(idle_proc, i);
-+                      printk(KERN_INFO "\t#%d - idle thread pid = %d.. ",
-+                             i, pid);
-+
-+                      waittime = 200000000;
-+                      while (waittime-- && !test_bit(i, &smp_callin_map))
-+                              cpu_relax();
-+
-+                      if (test_bit(i, &smp_callin_map))
-+                              printk("online\n");
-+                      else {
-+                              printk("failed\n");
-+                              clear_bit(i, &cpu_online_map);
-+                      }
-+              }
-+      }
-+}
-+
-+int setup_profiling_timer(unsigned int multiplier)
-+{
-+      printk(KERN_INFO "setup_profiling_timer\n");
-+      return(0);
-+}
-+
-+void smp_call_function_slave(int cpu);
-+
-+void IPI_handler(int cpu)
-+{
-+      unsigned char c;
-+      int fd;
-+
-+      fd = cpu_data[cpu].ipi_pipe[0];
-+      while (read(fd, &c, 1) == 1) {
-+              switch (c) {
-+              case 'C':
-+                      smp_call_function_slave(cpu);
-+                      break;
-+
-+              case 'R':
-+                      current->need_resched = 1;
-+                      break;
-+
-+              case 'S':
-+                      printk("CPU#%d stopping\n", cpu);
-+                      while(1)
-+                              pause();
-+                      break;
-+
-+              default:
-+                      printk("CPU#%d received unknown IPI [%c]!\n", cpu, c);
-+                      break;
-+              }
-+      }
-+}
-+
-+int hard_smp_processor_id(void)
-+{
-+      return(pid_to_processor_id(os_getpid()));
-+}
-+
-+static spinlock_t call_lock = SPIN_LOCK_UNLOCKED;
-+static atomic_t scf_started;
-+static atomic_t scf_finished;
-+static void (*func)(void *info);
-+static void *info;
-+
-+void smp_call_function_slave(int cpu)
-+{
-+      atomic_inc(&scf_started);
-+      (*func)(info);
-+      atomic_inc(&scf_finished);
-+}
-+
-+int smp_call_function(void (*_func)(void *info), void *_info, int nonatomic, 
-+                    int wait)
-+{
-+      int cpus = smp_num_cpus - 1;
-+      int i;
-+
-+      if (!cpus)
-+              return 0;
-+
-+      spin_lock_bh(&call_lock);
-+      atomic_set(&scf_started, 0);
-+      atomic_set(&scf_finished, 0);
-+      func = _func;
-+      info = _info;
-+
-+      for (i=0;i<NR_CPUS;i++)
-+              if (i != current->processor && test_bit(i, &cpu_online_map))
-+                      write(cpu_data[i].ipi_pipe[1], "C", 1);
-+
-+      while (atomic_read(&scf_started) != cpus)
-+              barrier();
-+
-+      if (wait)
-+              while (atomic_read(&scf_finished) != cpus)
-+                      barrier();
-+
-+      spin_unlock_bh(&call_lock);
-+      return 0;
-+}
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/syscall_kern.c um/arch/um/kernel/syscall_kern.c
---- orig/arch/um/kernel/syscall_kern.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/syscall_kern.c   2002-11-08 14:04:10.000000000 -0500
-@@ -0,0 +1,343 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/sched.h"
-+#include "linux/file.h"
-+#include "linux/smp_lock.h"
-+#include "linux/mm.h"
-+#include "linux/utsname.h"
-+#include "linux/msg.h"
-+#include "linux/shm.h"
-+#include "linux/sys.h"
-+#include "linux/unistd.h"
-+#include "linux/slab.h"
-+#include "linux/utime.h"
-+#include "asm/mman.h"
-+#include "asm/uaccess.h"
-+#include "asm/ipc.h"
-+#include "kern_util.h"
-+#include "user_util.h"
-+#include "sysdep/syscalls.h"
-+#include "mode_kern.h"
-+#include "choose-mode.h"
-+
-+/*  Unlocked, I don't care if this is a bit off */
-+int nsyscalls = 0;
-+
-+long um_mount(char * dev_name, char * dir_name, char * type,
-+            unsigned long new_flags, void * data)
-+{
-+      if(type == NULL) type = "";
-+      return(sys_mount(dev_name, dir_name, type, new_flags, data));
-+}
-+
-+long sys_fork(void)
-+{
-+      long ret;
-+
-+      current->thread.forking = 1;
-+        ret = do_fork(SIGCHLD, 0, NULL, 0);
-+      current->thread.forking = 0;
-+      return(ret);
-+}
-+
-+long sys_clone(unsigned long clone_flags, unsigned long newsp)
-+{
-+      long ret;
-+
-+      current->thread.forking = 1;
-+      ret = do_fork(clone_flags, newsp, NULL, 0);
-+      current->thread.forking = 0;
-+      return(ret);
-+}
-+
-+long sys_vfork(void)
-+{
-+      long ret;
-+
-+      current->thread.forking = 1;
-+      ret = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, 0, NULL, 0);
-+      current->thread.forking = 0;
-+      return(ret);
-+}
-+
-+/* common code for old and new mmaps */
-+long do_mmap2(struct mm_struct *mm, unsigned long addr, unsigned long len,
-+            unsigned long prot, unsigned long flags, unsigned long fd,
-+            unsigned long pgoff)
-+{
-+      int error = -EBADF;
-+      struct file * file = NULL;
-+
-+      flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
-+      if (!(flags & MAP_ANONYMOUS)) {
-+              file = fget(fd);
-+              if (!file)
-+                      goto out;
-+      }
-+
-+      down_write(&mm->mmap_sem);
-+      error = do_mmap_pgoff(mm, file, addr, len, prot, flags, pgoff);
-+      up_write(&mm->mmap_sem);
-+
-+      if (file)
-+              fput(file);
-+ out:
-+      return error;
-+}
-+
-+long sys_mmap2(unsigned long addr, unsigned long len,
-+             unsigned long prot, unsigned long flags,
-+             unsigned long fd, unsigned long pgoff)
-+{
-+      return do_mmap2(current->mm, addr, len, prot, flags, fd, pgoff);
-+}
-+
-+/*
-+ * Perform the select(nd, in, out, ex, tv) and mmap() system
-+ * calls. Linux/i386 didn't use to be able to handle more than
-+ * 4 system call parameters, so these system calls used a memory
-+ * block for parameter passing..
-+ */
-+
-+struct mmap_arg_struct {
-+      unsigned long addr;
-+      unsigned long len;
-+      unsigned long prot;
-+      unsigned long flags;
-+      unsigned long fd;
-+      unsigned long offset;
-+};
-+
-+int old_mmap(unsigned long addr, unsigned long len,
-+           unsigned long prot, unsigned long flags,
-+           unsigned long fd, unsigned long offset)
-+{
-+      int err = -EINVAL;
-+      if (offset & ~PAGE_MASK)
-+              goto out;
-+
-+      err = do_mmap2(current->mm, addr, len, prot, flags, fd, 
-+                     offset >> PAGE_SHIFT);
-+ out:
-+      return err;
-+}
-+/*
-+ * sys_pipe() is the normal C calling standard for creating
-+ * a pipe. It's not the way unix traditionally does this, though.
-+ */
-+int sys_pipe(unsigned long * fildes)
-+{
-+        int fd[2];
-+        int error;
-+
-+        error = do_pipe(fd);
-+        if (!error) {
-+                if (copy_to_user(fildes, fd, 2*sizeof(int)))
-+                        error = -EFAULT;
-+        }
-+        return error;
-+}
-+
-+int sys_pause(void)
-+{
-+      current->state = TASK_INTERRUPTIBLE;
-+      schedule();
-+      return -ERESTARTNOHAND;
-+}
-+
-+int sys_sigaction(int sig, const struct old_sigaction *act,
-+                       struct old_sigaction *oact)
-+{
-+      struct k_sigaction new_ka, old_ka;
-+      int ret;
-+
-+      if (act) {
-+              old_sigset_t mask;
-+              if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
-+                  __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
-+                  __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
-+                      return -EFAULT;
-+              __get_user(new_ka.sa.sa_flags, &act->sa_flags);
-+              __get_user(mask, &act->sa_mask);
-+              siginitset(&new_ka.sa.sa_mask, mask);
-+      }
-+
-+      ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
-+
-+      if (!ret && oact) {
-+              if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
-+                  __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
-+                  __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
-+                      return -EFAULT;
-+              __put_user(old_ka.sa.sa_flags, &oact->sa_flags);
-+              __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask);
-+      }
-+
-+      return ret;
-+}
-+
-+/*
-+ * sys_ipc() is the de-multiplexer for the SysV IPC calls..
-+ *
-+ * This is really horribly ugly.
-+ */
-+int sys_ipc (uint call, int first, int second,
-+           int third, void *ptr, long fifth)
-+{
-+      int version, ret;
-+
-+      version = call >> 16; /* hack for backward compatibility */
-+      call &= 0xffff;
-+
-+      switch (call) {
-+      case SEMOP:
-+              return sys_semop (first, (struct sembuf *)ptr, second);
-+      case SEMGET:
-+              return sys_semget (first, second, third);
-+      case SEMCTL: {
-+              union semun fourth;
-+              if (!ptr)
-+                      return -EINVAL;
-+              if (get_user(fourth.__pad, (void **) ptr))
-+                      return -EFAULT;
-+              return sys_semctl (first, second, third, fourth);
-+      }
-+
-+      case MSGSND:
-+              return sys_msgsnd (first, (struct msgbuf *) ptr, 
-+                                 second, third);
-+      case MSGRCV:
-+              switch (version) {
-+              case 0: {
-+                      struct ipc_kludge tmp;
-+                      if (!ptr)
-+                              return -EINVAL;
-+                      
-+                      if (copy_from_user(&tmp,
-+                                         (struct ipc_kludge *) ptr, 
-+                                         sizeof (tmp)))
-+                              return -EFAULT;
-+                      return sys_msgrcv (first, tmp.msgp, second,
-+                                         tmp.msgtyp, third);
-+              }
-+              default:
-+                      panic("msgrcv with version != 0");
-+                      return sys_msgrcv (first,
-+                                         (struct msgbuf *) ptr,
-+                                         second, fifth, third);
-+              }
-+      case MSGGET:
-+              return sys_msgget ((key_t) first, second);
-+      case MSGCTL:
-+              return sys_msgctl (first, second, (struct msqid_ds *) ptr);
-+
-+      case SHMAT:
-+              switch (version) {
-+              default: {
-+                      ulong raddr;
-+                      ret = sys_shmat (first, (char *) ptr, second, &raddr);
-+                      if (ret)
-+                              return ret;
-+                      return put_user (raddr, (ulong *) third);
-+              }
-+              case 1: /* iBCS2 emulator entry point */
-+                      if (!segment_eq(get_fs(), get_ds()))
-+                              return -EINVAL;
-+                      return sys_shmat (first, (char *) ptr, second, (ulong *) third);
-+              }
-+      case SHMDT: 
-+              return sys_shmdt ((char *)ptr);
-+      case SHMGET:
-+              return sys_shmget (first, second, third);
-+      case SHMCTL:
-+              return sys_shmctl (first, second,
-+                                 (struct shmid_ds *) ptr);
-+      default:
-+              return -EINVAL;
-+      }
-+}
-+
-+int sys_uname(struct old_utsname * name)
-+{
-+      int err;
-+      if (!name)
-+              return -EFAULT;
-+      down_read(&uts_sem);
-+      err=copy_to_user(name, &system_utsname, sizeof (*name));
-+      up_read(&uts_sem);
-+      return err?-EFAULT:0;
-+}
-+
-+int sys_olduname(struct oldold_utsname * name)
-+{
-+      int error;
-+
-+      if (!name)
-+              return -EFAULT;
-+      if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname)))
-+              return -EFAULT;
-+  
-+      down_read(&uts_sem);
-+      
-+      error = __copy_to_user(&name->sysname,&system_utsname.sysname,
-+                             __OLD_UTS_LEN);
-+      error |= __put_user(0,name->sysname+__OLD_UTS_LEN);
-+      error |= __copy_to_user(&name->nodename,&system_utsname.nodename,
-+                              __OLD_UTS_LEN);
-+      error |= __put_user(0,name->nodename+__OLD_UTS_LEN);
-+      error |= __copy_to_user(&name->release,&system_utsname.release,
-+                              __OLD_UTS_LEN);
-+      error |= __put_user(0,name->release+__OLD_UTS_LEN);
-+      error |= __copy_to_user(&name->version,&system_utsname.version,
-+                              __OLD_UTS_LEN);
-+      error |= __put_user(0,name->version+__OLD_UTS_LEN);
-+      error |= __copy_to_user(&name->machine,&system_utsname.machine,
-+                              __OLD_UTS_LEN);
-+      error |= __put_user(0,name->machine+__OLD_UTS_LEN);
-+      
-+      up_read(&uts_sem);
-+      
-+      error = error ? -EFAULT : 0;
-+
-+      return error;
-+}
-+
-+int sys_sigaltstack(const stack_t *uss, stack_t *uoss)
-+{
-+      return(do_sigaltstack(uss, uoss, PT_REGS_SP(&current->thread.regs)));
-+}
-+
-+long execute_syscall(void *r)
-+{
-+      return(CHOOSE_MODE_PROC(execute_syscall_tt, execute_syscall_skas, r));
-+}
-+
-+spinlock_t syscall_lock = SPIN_LOCK_UNLOCKED;
-+
-+static int syscall_index = 0;
-+
-+int next_syscall_index(int limit)
-+{
-+      int ret;
-+
-+      spin_lock(&syscall_lock);
-+      ret = syscall_index;
-+      if(++syscall_index == limit)
-+              syscall_index = 0;
-+      spin_unlock(&syscall_lock);
-+      return(ret);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/sys_call_table.c um/arch/um/kernel/sys_call_table.c
---- orig/arch/um/kernel/sys_call_table.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/sys_call_table.c 2003-02-27 13:33:23.000000000 -0500
-@@ -0,0 +1,485 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/unistd.h"
-+#include "linux/version.h"
-+#include "linux/sys.h"
-+#include "asm/signal.h"
-+#include "sysdep/syscalls.h"
-+#include "kern_util.h"
-+
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_exit;
-+extern syscall_handler_t sys_fork;
-+extern syscall_handler_t sys_creat;
-+extern syscall_handler_t sys_link;
-+extern syscall_handler_t sys_unlink;
-+extern syscall_handler_t sys_chdir;
-+extern syscall_handler_t sys_mknod;
-+extern syscall_handler_t sys_chmod;
-+extern syscall_handler_t sys_lchown16;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_stat;
-+extern syscall_handler_t sys_getpid;
-+extern syscall_handler_t sys_oldumount;
-+extern syscall_handler_t sys_setuid16;
-+extern syscall_handler_t sys_getuid16;
-+extern syscall_handler_t sys_ptrace;
-+extern syscall_handler_t sys_alarm;
-+extern syscall_handler_t sys_fstat;
-+extern syscall_handler_t sys_pause;
-+extern syscall_handler_t sys_utime;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_access;
-+extern syscall_handler_t sys_nice;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_sync;
-+extern syscall_handler_t sys_kill;
-+extern syscall_handler_t sys_rename;
-+extern syscall_handler_t sys_mkdir;
-+extern syscall_handler_t sys_rmdir;
-+extern syscall_handler_t sys_pipe;
-+extern syscall_handler_t sys_times;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_brk;
-+extern syscall_handler_t sys_setgid16;
-+extern syscall_handler_t sys_getgid16;
-+extern syscall_handler_t sys_signal;
-+extern syscall_handler_t sys_geteuid16;
-+extern syscall_handler_t sys_getegid16;
-+extern syscall_handler_t sys_acct;
-+extern syscall_handler_t sys_umount;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_ioctl;
-+extern syscall_handler_t sys_fcntl;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_setpgid;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_olduname;
-+extern syscall_handler_t sys_umask;
-+extern syscall_handler_t sys_chroot;
-+extern syscall_handler_t sys_ustat;
-+extern syscall_handler_t sys_dup2;
-+extern syscall_handler_t sys_getppid;
-+extern syscall_handler_t sys_getpgrp;
-+extern syscall_handler_t sys_sigaction;
-+extern syscall_handler_t sys_sgetmask;
-+extern syscall_handler_t sys_ssetmask;
-+extern syscall_handler_t sys_setreuid16;
-+extern syscall_handler_t sys_setregid16;
-+extern syscall_handler_t sys_sigsuspend;
-+extern syscall_handler_t sys_sigpending;
-+extern syscall_handler_t sys_sethostname;
-+extern syscall_handler_t sys_setrlimit;
-+extern syscall_handler_t sys_old_getrlimit;
-+extern syscall_handler_t sys_getrusage;
-+extern syscall_handler_t sys_gettimeofday;
-+extern syscall_handler_t sys_settimeofday;
-+extern syscall_handler_t sys_getgroups16;
-+extern syscall_handler_t sys_setgroups16;
-+extern syscall_handler_t sys_symlink;
-+extern syscall_handler_t sys_lstat;
-+extern syscall_handler_t sys_readlink;
-+extern syscall_handler_t sys_uselib;
-+extern syscall_handler_t sys_swapon;
-+extern syscall_handler_t sys_reboot;
-+extern syscall_handler_t old_readdir;
-+extern syscall_handler_t sys_munmap;
-+extern syscall_handler_t sys_truncate;
-+extern syscall_handler_t sys_ftruncate;
-+extern syscall_handler_t sys_fchmod;
-+extern syscall_handler_t sys_fchown16;
-+extern syscall_handler_t sys_getpriority;
-+extern syscall_handler_t sys_setpriority;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_statfs;
-+extern syscall_handler_t sys_fstatfs;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_socketcall;
-+extern syscall_handler_t sys_syslog;
-+extern syscall_handler_t sys_setitimer;
-+extern syscall_handler_t sys_getitimer;
-+extern syscall_handler_t sys_newstat;
-+extern syscall_handler_t sys_newlstat;
-+extern syscall_handler_t sys_newfstat;
-+extern syscall_handler_t sys_uname;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_vhangup;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_swapoff;
-+extern syscall_handler_t sys_sysinfo;
-+extern syscall_handler_t sys_ipc;
-+extern syscall_handler_t sys_fsync;
-+extern syscall_handler_t sys_sigreturn;
-+extern syscall_handler_t sys_rt_sigreturn;
-+extern syscall_handler_t sys_clone;
-+extern syscall_handler_t sys_setdomainname;
-+extern syscall_handler_t sys_newuname;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_adjtimex;
-+extern syscall_handler_t sys_mprotect;
-+extern syscall_handler_t sys_sigprocmask;
-+extern syscall_handler_t sys_create_module;
-+extern syscall_handler_t sys_init_module;
-+extern syscall_handler_t sys_delete_module;
-+extern syscall_handler_t sys_get_kernel_syms;
-+extern syscall_handler_t sys_quotactl;
-+extern syscall_handler_t sys_getpgid;
-+extern syscall_handler_t sys_fchdir;
-+extern syscall_handler_t sys_bdflush;
-+extern syscall_handler_t sys_sysfs;
-+extern syscall_handler_t sys_personality;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_setfsuid16;
-+extern syscall_handler_t sys_setfsgid16;
-+extern syscall_handler_t sys_llseek;
-+extern syscall_handler_t sys_getdents;
-+extern syscall_handler_t sys_flock;
-+extern syscall_handler_t sys_msync;
-+extern syscall_handler_t sys_readv;
-+extern syscall_handler_t sys_writev;
-+extern syscall_handler_t sys_getsid;
-+extern syscall_handler_t sys_fdatasync;
-+extern syscall_handler_t sys_sysctl;
-+extern syscall_handler_t sys_mlock;
-+extern syscall_handler_t sys_munlock;
-+extern syscall_handler_t sys_mlockall;
-+extern syscall_handler_t sys_munlockall;
-+extern syscall_handler_t sys_sched_setparam;
-+extern syscall_handler_t sys_sched_getparam;
-+extern syscall_handler_t sys_sched_setscheduler;
-+extern syscall_handler_t sys_sched_getscheduler;
-+extern syscall_handler_t sys_sched_get_priority_max;
-+extern syscall_handler_t sys_sched_get_priority_min;
-+extern syscall_handler_t sys_sched_rr_get_interval;
-+extern syscall_handler_t sys_nanosleep;
-+extern syscall_handler_t sys_mremap;
-+extern syscall_handler_t sys_setresuid16;
-+extern syscall_handler_t sys_getresuid16;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_query_module;
-+extern syscall_handler_t sys_poll;
-+extern syscall_handler_t sys_nfsservctl;
-+extern syscall_handler_t sys_setresgid16;
-+extern syscall_handler_t sys_getresgid16;
-+extern syscall_handler_t sys_prctl;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_rt_sigaction;
-+extern syscall_handler_t sys_rt_sigprocmask;
-+extern syscall_handler_t sys_rt_sigpending;
-+extern syscall_handler_t sys_rt_sigtimedwait;
-+extern syscall_handler_t sys_rt_sigqueueinfo;
-+extern syscall_handler_t sys_rt_sigsuspend;
-+extern syscall_handler_t sys_pread;
-+extern syscall_handler_t sys_pwrite;
-+extern syscall_handler_t sys_chown16;
-+extern syscall_handler_t sys_getcwd;
-+extern syscall_handler_t sys_capget;
-+extern syscall_handler_t sys_capset;
-+extern syscall_handler_t sys_sigaltstack;
-+extern syscall_handler_t sys_sendfile;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_ni_syscall;
-+extern syscall_handler_t sys_vfork;
-+extern syscall_handler_t sys_getrlimit;
-+extern syscall_handler_t sys_mmap2;
-+extern syscall_handler_t sys_truncate64;
-+extern syscall_handler_t sys_ftruncate64;
-+extern syscall_handler_t sys_stat64;
-+extern syscall_handler_t sys_lstat64;
-+extern syscall_handler_t sys_fstat64;
-+extern syscall_handler_t sys_lchown;
-+extern syscall_handler_t sys_getuid;
-+extern syscall_handler_t sys_getgid;
-+extern syscall_handler_t sys_geteuid;
-+extern syscall_handler_t sys_getegid;
-+extern syscall_handler_t sys_setreuid;
-+extern syscall_handler_t sys_setregid;
-+extern syscall_handler_t sys_getgroups;
-+extern syscall_handler_t sys_setgroups;
-+extern syscall_handler_t sys_fchown;
-+extern syscall_handler_t sys_setresuid;
-+extern syscall_handler_t sys_getresuid;
-+extern syscall_handler_t sys_setresgid;
-+extern syscall_handler_t sys_getresgid;
-+extern syscall_handler_t sys_chown;
-+extern syscall_handler_t sys_setuid;
-+extern syscall_handler_t sys_setgid;
-+extern syscall_handler_t sys_setfsuid;
-+extern syscall_handler_t sys_setfsgid;
-+extern syscall_handler_t sys_pivot_root;
-+extern syscall_handler_t sys_mincore;
-+extern syscall_handler_t sys_madvise;
-+extern syscall_handler_t sys_fcntl64;
-+extern syscall_handler_t sys_getdents64;
-+extern syscall_handler_t sys_gettid;
-+extern syscall_handler_t sys_readahead;
-+extern syscall_handler_t sys_tkill;
-+extern syscall_handler_t sys_setxattr;
-+extern syscall_handler_t sys_lsetxattr;
-+extern syscall_handler_t sys_fsetxattr;
-+extern syscall_handler_t sys_getxattr;
-+extern syscall_handler_t sys_lgetxattr;
-+extern syscall_handler_t sys_fgetxattr;
-+extern syscall_handler_t sys_listxattr;
-+extern syscall_handler_t sys_llistxattr;
-+extern syscall_handler_t sys_flistxattr;
-+extern syscall_handler_t sys_removexattr;
-+extern syscall_handler_t sys_lremovexattr;
-+extern syscall_handler_t sys_fremovexattr;
-+
-+extern syscall_handler_t um_mount;
-+extern syscall_handler_t um_time;
-+extern syscall_handler_t um_stime;
-+
-+#define LAST_GENERIC_SYSCALL __NR_sched_getaffinity
-+
-+#if LAST_GENERIC_SYSCALL > LAST_ARCH_SYSCALL
-+#define LAST_SYSCALL LAST_GENERIC_SYSCALL
-+#else
-+#define LAST_SYSCALL LAST_ARCH_SYSCALL
-+#endif
-+
-+syscall_handler_t *sys_call_table[] = {
-+      [ 0 ] = sys_ni_syscall,
-+      [ __NR_exit ] = sys_exit,
-+      [ __NR_fork ] = sys_fork,
-+      [ __NR_read ] = (syscall_handler_t *) sys_read,
-+      [ __NR_write ] = (syscall_handler_t *) sys_write,
-+
-+      /* These three are declared differently in asm/unistd.h */
-+      [ __NR_open ] = (syscall_handler_t *) sys_open,
-+      [ __NR_close ] = (syscall_handler_t *) sys_close,
-+      [ __NR_waitpid ] = (syscall_handler_t *) sys_waitpid,
-+      [ __NR_creat ] = sys_creat,
-+      [ __NR_link ] = sys_link,
-+      [ __NR_unlink ] = sys_unlink,
-+
-+      /* declared differently in kern_util.h */
-+      [ __NR_execve ] = (syscall_handler_t *) sys_execve,
-+      [ __NR_chdir ] = sys_chdir,
-+      [ __NR_time ] = um_time,
-+      [ __NR_mknod ] = sys_mknod,
-+      [ __NR_chmod ] = sys_chmod,
-+      [ __NR_lchown ] = sys_lchown16,
-+      [ __NR_break ] = sys_ni_syscall,
-+      [ __NR_oldstat ] = sys_stat,
-+      [ __NR_lseek ] = (syscall_handler_t *) sys_lseek,
-+      [ __NR_getpid ] = sys_getpid,
-+      [ __NR_mount ] = um_mount,
-+      [ __NR_umount ] = sys_oldumount,
-+      [ __NR_setuid ] = sys_setuid16,
-+      [ __NR_getuid ] = sys_getuid16,
-+      [ __NR_stime ] = um_stime,
-+      [ __NR_ptrace ] = sys_ptrace,
-+      [ __NR_alarm ] = sys_alarm,
-+      [ __NR_oldfstat ] = sys_fstat,
-+      [ __NR_pause ] = sys_pause,
-+      [ __NR_utime ] = sys_utime,
-+      [ __NR_stty ] = sys_ni_syscall,
-+      [ __NR_gtty ] = sys_ni_syscall,
-+      [ __NR_access ] = sys_access,
-+      [ __NR_nice ] = sys_nice,
-+      [ __NR_ftime ] = sys_ni_syscall,
-+      [ __NR_sync ] = sys_sync,
-+      [ __NR_kill ] = sys_kill,
-+      [ __NR_rename ] = sys_rename,
-+      [ __NR_mkdir ] = sys_mkdir,
-+      [ __NR_rmdir ] = sys_rmdir,
-+
-+      /* Declared differently in asm/unistd.h */
-+      [ __NR_dup ] = (syscall_handler_t *) sys_dup,
-+      [ __NR_pipe ] = sys_pipe,
-+      [ __NR_times ] = sys_times,
-+      [ __NR_prof ] = sys_ni_syscall,
-+      [ __NR_brk ] = sys_brk,
-+      [ __NR_setgid ] = sys_setgid16,
-+      [ __NR_getgid ] = sys_getgid16,
-+      [ __NR_signal ] = sys_signal,
-+      [ __NR_geteuid ] = sys_geteuid16,
-+      [ __NR_getegid ] = sys_getegid16,
-+      [ __NR_acct ] = sys_acct,
-+      [ __NR_umount2 ] = sys_umount,
-+      [ __NR_lock ] = sys_ni_syscall,
-+      [ __NR_ioctl ] = sys_ioctl,
-+      [ __NR_fcntl ] = sys_fcntl,
-+      [ __NR_mpx ] = sys_ni_syscall,
-+      [ __NR_setpgid ] = sys_setpgid,
-+      [ __NR_ulimit ] = sys_ni_syscall,
-+      [ __NR_oldolduname ] = sys_olduname,
-+      [ __NR_umask ] = sys_umask,
-+      [ __NR_chroot ] = sys_chroot,
-+      [ __NR_ustat ] = sys_ustat,
-+      [ __NR_dup2 ] = sys_dup2,
-+      [ __NR_getppid ] = sys_getppid,
-+      [ __NR_getpgrp ] = sys_getpgrp,
-+      [ __NR_setsid ] = (syscall_handler_t *) sys_setsid,
-+      [ __NR_sigaction ] = sys_sigaction,
-+      [ __NR_sgetmask ] = sys_sgetmask,
-+      [ __NR_ssetmask ] = sys_ssetmask,
-+      [ __NR_setreuid ] = sys_setreuid16,
-+      [ __NR_setregid ] = sys_setregid16,
-+      [ __NR_sigsuspend ] = sys_sigsuspend,
-+      [ __NR_sigpending ] = sys_sigpending,
-+      [ __NR_sethostname ] = sys_sethostname,
-+      [ __NR_setrlimit ] = sys_setrlimit,
-+      [ __NR_getrlimit ] = sys_old_getrlimit,
-+      [ __NR_getrusage ] = sys_getrusage,
-+      [ __NR_gettimeofday ] = sys_gettimeofday,
-+      [ __NR_settimeofday ] = sys_settimeofday,
-+      [ __NR_getgroups ] = sys_getgroups16,
-+      [ __NR_setgroups ] = sys_setgroups16,
-+      [ __NR_symlink ] = sys_symlink,
-+      [ __NR_oldlstat ] = sys_lstat,
-+      [ __NR_readlink ] = sys_readlink,
-+      [ __NR_uselib ] = sys_uselib,
-+      [ __NR_swapon ] = sys_swapon,
-+      [ __NR_reboot ] = sys_reboot,
-+      [ __NR_readdir ] = old_readdir,
-+      [ __NR_munmap ] = sys_munmap,
-+      [ __NR_truncate ] = sys_truncate,
-+      [ __NR_ftruncate ] = sys_ftruncate,
-+      [ __NR_fchmod ] = sys_fchmod,
-+      [ __NR_fchown ] = sys_fchown16,
-+      [ __NR_getpriority ] = sys_getpriority,
-+      [ __NR_setpriority ] = sys_setpriority,
-+      [ __NR_profil ] = sys_ni_syscall,
-+      [ __NR_statfs ] = sys_statfs,
-+      [ __NR_fstatfs ] = sys_fstatfs,
-+      [ __NR_ioperm ] = sys_ni_syscall,
-+      [ __NR_socketcall ] = sys_socketcall,
-+      [ __NR_syslog ] = sys_syslog,
-+      [ __NR_setitimer ] = sys_setitimer,
-+      [ __NR_getitimer ] = sys_getitimer,
-+      [ __NR_stat ] = sys_newstat,
-+      [ __NR_lstat ] = sys_newlstat,
-+      [ __NR_fstat ] = sys_newfstat,
-+      [ __NR_olduname ] = sys_uname,
-+      [ __NR_iopl ] = sys_ni_syscall,
-+      [ __NR_vhangup ] = sys_vhangup,
-+      [ __NR_idle ] = sys_ni_syscall,
-+      [ __NR_wait4 ] = (syscall_handler_t *) sys_wait4,
-+      [ __NR_swapoff ] = sys_swapoff,
-+      [ __NR_sysinfo ] = sys_sysinfo,
-+      [ __NR_ipc ] = sys_ipc,
-+      [ __NR_fsync ] = sys_fsync,
-+      [ __NR_sigreturn ] = sys_sigreturn,
-+      [ __NR_clone ] = sys_clone,
-+      [ __NR_setdomainname ] = sys_setdomainname,
-+      [ __NR_uname ] = sys_newuname,
-+      [ __NR_adjtimex ] = sys_adjtimex,
-+      [ __NR_mprotect ] = sys_mprotect,
-+      [ __NR_sigprocmask ] = sys_sigprocmask,
-+      [ __NR_create_module ] = sys_create_module,
-+      [ __NR_init_module ] = sys_init_module,
-+      [ __NR_delete_module ] = sys_delete_module,
-+      [ __NR_get_kernel_syms ] = sys_get_kernel_syms,
-+      [ __NR_quotactl ] = sys_quotactl,
-+      [ __NR_getpgid ] = sys_getpgid,
-+      [ __NR_fchdir ] = sys_fchdir,
-+      [ __NR_bdflush ] = sys_bdflush,
-+      [ __NR_sysfs ] = sys_sysfs,
-+      [ __NR_personality ] = sys_personality,
-+      [ __NR_afs_syscall ] = sys_ni_syscall,
-+      [ __NR_setfsuid ] = sys_setfsuid16,
-+      [ __NR_setfsgid ] = sys_setfsgid16,
-+      [ __NR__llseek ] = sys_llseek,
-+      [ __NR_getdents ] = sys_getdents,
-+      [ __NR__newselect ] = (syscall_handler_t *) sys_select,
-+      [ __NR_flock ] = sys_flock,
-+      [ __NR_msync ] = sys_msync,
-+      [ __NR_readv ] = sys_readv,
-+      [ __NR_writev ] = sys_writev,
-+      [ __NR_getsid ] = sys_getsid,
-+      [ __NR_fdatasync ] = sys_fdatasync,
-+      [ __NR__sysctl ] = sys_sysctl,
-+      [ __NR_mlock ] = sys_mlock,
-+      [ __NR_munlock ] = sys_munlock,
-+      [ __NR_mlockall ] = sys_mlockall,
-+      [ __NR_munlockall ] = sys_munlockall,
-+      [ __NR_sched_setparam ] = sys_sched_setparam,
-+      [ __NR_sched_getparam ] = sys_sched_getparam,
-+      [ __NR_sched_setscheduler ] = sys_sched_setscheduler,
-+      [ __NR_sched_getscheduler ] = sys_sched_getscheduler,
-+      [ __NR_sched_yield ] = (syscall_handler_t *) yield,
-+      [ __NR_sched_get_priority_max ] = sys_sched_get_priority_max,
-+      [ __NR_sched_get_priority_min ] = sys_sched_get_priority_min,
-+      [ __NR_sched_rr_get_interval ] = sys_sched_rr_get_interval,
-+      [ __NR_nanosleep ] = sys_nanosleep,
-+      [ __NR_mremap ] = sys_mremap,
-+      [ __NR_setresuid ] = sys_setresuid16,
-+      [ __NR_getresuid ] = sys_getresuid16,
-+      [ __NR_vm86 ] = sys_ni_syscall,
-+      [ __NR_query_module ] = sys_query_module,
-+      [ __NR_poll ] = sys_poll,
-+      [ __NR_nfsservctl ] = sys_nfsservctl,
-+      [ __NR_setresgid ] = sys_setresgid16,
-+      [ __NR_getresgid ] = sys_getresgid16,
-+      [ __NR_prctl ] = sys_prctl,
-+      [ __NR_rt_sigreturn ] = sys_rt_sigreturn,
-+      [ __NR_rt_sigaction ] = sys_rt_sigaction,
-+      [ __NR_rt_sigprocmask ] = sys_rt_sigprocmask,
-+      [ __NR_rt_sigpending ] = sys_rt_sigpending,
-+      [ __NR_rt_sigtimedwait ] = sys_rt_sigtimedwait,
-+      [ __NR_rt_sigqueueinfo ] = sys_rt_sigqueueinfo,
-+      [ __NR_rt_sigsuspend ] = sys_rt_sigsuspend,
-+      [ __NR_pread ] = sys_pread,
-+      [ __NR_pwrite ] = sys_pwrite,
-+      [ __NR_chown ] = sys_chown16,
-+      [ __NR_getcwd ] = sys_getcwd,
-+      [ __NR_capget ] = sys_capget,
-+      [ __NR_capset ] = sys_capset,
-+      [ __NR_sigaltstack ] = sys_sigaltstack,
-+      [ __NR_sendfile ] = sys_sendfile,
-+      [ __NR_getpmsg ] = sys_ni_syscall,
-+      [ __NR_putpmsg ] = sys_ni_syscall,
-+      [ __NR_vfork ] = sys_vfork,
-+      [ __NR_ugetrlimit ] = sys_getrlimit,
-+      [ __NR_mmap2 ] = sys_mmap2,
-+      [ __NR_truncate64 ] = sys_truncate64,
-+      [ __NR_ftruncate64 ] = sys_ftruncate64,
-+      [ __NR_stat64 ] = sys_stat64,
-+      [ __NR_lstat64 ] = sys_lstat64,
-+      [ __NR_fstat64 ] = sys_fstat64,
-+      [ __NR_fcntl64 ] = sys_fcntl64,
-+      [ __NR_getdents64 ] = sys_getdents64,
-+        [ __NR_security ] = sys_ni_syscall,
-+      [ __NR_gettid ] = sys_gettid,
-+      [ __NR_readahead ] = sys_readahead,
-+      [ __NR_setxattr ] = sys_setxattr,
-+      [ __NR_lsetxattr ] = sys_lsetxattr,
-+      [ __NR_fsetxattr ] = sys_fsetxattr,
-+      [ __NR_getxattr ] = sys_getxattr,
-+      [ __NR_lgetxattr ] = sys_lgetxattr,
-+      [ __NR_fgetxattr ] = sys_fgetxattr,
-+      [ __NR_listxattr ] = sys_listxattr,
-+      [ __NR_llistxattr ] = sys_llistxattr,
-+      [ __NR_flistxattr ] = sys_flistxattr,
-+      [ __NR_removexattr ] = sys_removexattr,
-+      [ __NR_lremovexattr ] = sys_lremovexattr,
-+      [ __NR_fremovexattr ] = sys_fremovexattr,
-+      [ __NR_tkill ] = sys_tkill,
-+      [ __NR_sendfile64 ] = sys_ni_syscall,
-+      [ __NR_futex ] = sys_ni_syscall,
-+      [ __NR_sched_setaffinity ] = sys_ni_syscall,
-+      [ __NR_sched_getaffinity ] = sys_ni_syscall,
-+
-+      ARCH_SYSCALLS
-+      [ LAST_SYSCALL + 1 ... NR_syscalls ] = 
-+              (syscall_handler_t *) sys_ni_syscall
-+};
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/syscall_user.c um/arch/um/kernel/syscall_user.c
---- orig/arch/um/kernel/syscall_user.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/syscall_user.c   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,48 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdlib.h>
-+#include <sys/time.h>
-+#include "kern_util.h"
-+#include "syscall_user.h"
-+
-+struct {
-+      int syscall;
-+      int pid;
-+      int result;
-+      struct timeval start;
-+      struct timeval end;
-+} syscall_record[1024];
-+
-+int record_syscall_start(int syscall)
-+{
-+      int max, index;
-+      
-+      max = sizeof(syscall_record)/sizeof(syscall_record[0]);
-+      index = next_syscall_index(max);
-+
-+      syscall_record[index].syscall = syscall;
-+      syscall_record[index].pid = current_pid();
-+      syscall_record[index].result = 0xdeadbeef;
-+      gettimeofday(&syscall_record[index].start, NULL);
-+      return(index);
-+}
-+
-+void record_syscall_end(int index, int result)
-+{
-+      syscall_record[index].result = result;
-+      gettimeofday(&syscall_record[index].end, NULL);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/sysrq.c um/arch/um/kernel/sysrq.c
---- orig/arch/um/kernel/sysrq.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/sysrq.c  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,98 @@
-+/* 
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/sched.h"
-+#include "linux/kernel.h"
-+#include "linux/module.h"
-+#include "asm/page.h"
-+#include "asm/processor.h"
-+#include "sysrq.h"
-+#include "user_util.h"
-+
-+ /*
-+  * If the address is either in the .text section of the
-+  * kernel, or in the vmalloc'ed module regions, it *may* 
-+  * be the address of a calling routine
-+  */
-+ 
-+#ifdef CONFIG_MODULES
-+
-+extern struct module *module_list;
-+extern struct module kernel_module;
-+
-+static inline int kernel_text_address(unsigned long addr)
-+{
-+      int retval = 0;
-+      struct module *mod;
-+
-+      if (addr >= (unsigned long) &_stext &&
-+          addr <= (unsigned long) &_etext)
-+              return 1;
-+
-+      for (mod = module_list; mod != &kernel_module; mod = mod->next) {
-+              /* mod_bound tests for addr being inside the vmalloc'ed
-+               * module area. Of course it'd be better to test only
-+               * for the .text subset... */
-+              if (mod_bound(addr, 0, mod)) {
-+                      retval = 1;
-+                      break;
-+              }
-+      }
-+
-+      return retval;
-+}
-+
-+#else
-+
-+static inline int kernel_text_address(unsigned long addr)
-+{
-+      return (addr >= (unsigned long) &_stext &&
-+              addr <= (unsigned long) &_etext);
-+}
-+
-+#endif
-+
-+void show_trace(unsigned long * stack)
-+{
-+        int i;
-+        unsigned long addr;
-+
-+        if (!stack)
-+                stack = (unsigned long*) &stack;
-+
-+        printk("Call Trace: ");
-+        i = 1;
-+        while (((long) stack & (THREAD_SIZE-1)) != 0) {
-+                addr = *stack++;
-+              if (kernel_text_address(addr)) {
-+                      if (i && ((i % 6) == 0))
-+                              printk("\n   ");
-+                      printk("[<%08lx>] ", addr);
-+                      i++;
-+                }
-+        }
-+        printk("\n");
-+}
-+
-+void show_trace_task(struct task_struct *tsk)
-+{
-+      unsigned long esp = PT_REGS_SP(&tsk->thread.regs);
-+
-+      /* User space on another CPU? */
-+      if ((esp ^ (unsigned long)tsk) & (PAGE_MASK<<1))
-+              return;
-+      show_trace((unsigned long *)esp);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tempfile.c um/arch/um/kernel/tempfile.c
---- orig/arch/um/kernel/tempfile.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tempfile.c       2003-01-17 23:16:19.000000000 -0500
-@@ -0,0 +1,80 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <sys/param.h>
-+#include "init.h"
-+
-+/* Modified from create_mem_file and start_debugger */
-+static char *tempdir = NULL;
-+
-+static void __init find_tempdir(void)
-+{
-+      char *dirs[] = { "TMP", "TEMP", "TMPDIR", NULL };
-+      int i;
-+      char *dir = NULL;
-+
-+      if(tempdir != NULL) return;     /* We've already been called */
-+      for(i = 0; dirs[i]; i++){
-+              dir = getenv(dirs[i]);
-+              if((dir != NULL) && (*dir != '\0'))
-+                      break;
-+      }
-+      if((dir == NULL) || (*dir == '\0')) 
-+              dir = "/tmp";
-+
-+      tempdir = malloc(strlen(dir) + 2);
-+      if(tempdir == NULL){
-+              fprintf(stderr, "Failed to malloc tempdir, "
-+                      "errno = %d\n", errno);
-+              return;
-+      }
-+      strcpy(tempdir, dir);
-+      strcat(tempdir, "/");
-+}
-+
-+int make_tempfile(const char *template, char **out_tempname, int do_unlink)
-+{
-+      char tempname[MAXPATHLEN];
-+      int fd;
-+
-+      find_tempdir();
-+      if (*template != '/')
-+              strcpy(tempname, tempdir);
-+      else
-+              *tempname = 0;
-+      strcat(tempname, template);
-+      if((fd = mkstemp(tempname)) < 0){
-+              fprintf(stderr, "open - cannot create %s: %s\n", tempname, 
-+                      strerror(errno));
-+              return -1;
-+      }
-+      if(do_unlink && (unlink(tempname) < 0)){
-+              perror("unlink");
-+              return -1;
-+      }
-+      if(out_tempname){
-+              if((*out_tempname = strdup(tempname)) == NULL){
-+                      perror("strdup");
-+                      return -1;
-+              }
-+      }
-+      return(fd);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/time.c um/arch/um/kernel/time.c
---- orig/arch/um/kernel/time.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/time.c   2003-04-23 20:45:19.000000000 -0400
-@@ -0,0 +1,127 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <unistd.h>
-+#include <time.h>
-+#include <sys/time.h>
-+#include <signal.h>
-+#include <errno.h>
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "process.h"
-+#include "signal_user.h"
-+#include "time_user.h"
-+
-+extern struct timeval xtime;
-+
-+struct timeval local_offset = { 0, 0 };
-+
-+void timer(void)
-+{
-+      gettimeofday(&xtime, NULL);
-+      timeradd(&xtime, &local_offset, &xtime);
-+}
-+
-+void set_interval(int timer_type)
-+{
-+      int usec = 1000000/hz();
-+      struct itimerval interval = ((struct itimerval) { { 0, usec },
-+                                                        { 0, usec } });
-+
-+      if(setitimer(timer_type, &interval, NULL) == -1)
-+              panic("setitimer failed - errno = %d\n", errno);
-+}
-+
-+void enable_timer(void)
-+{
-+      int usec = 1000000/hz();
-+      struct itimerval enable = ((struct itimerval) { { 0, usec },
-+                                                      { 0, usec }});
-+      if(setitimer(ITIMER_VIRTUAL, &enable, NULL))
-+              printk("enable_timer - setitimer failed, errno = %d\n",
-+                     errno);
-+}
-+
-+void switch_timers(int to_real)
-+{
-+      struct itimerval disable = ((struct itimerval) { { 0, 0 }, { 0, 0 }});
-+      struct itimerval enable = ((struct itimerval) { { 0, 1000000/hz() },
-+                                                      { 0, 1000000/hz() }});
-+      int old, new;
-+
-+      if(to_real){
-+              old = ITIMER_VIRTUAL;
-+              new = ITIMER_REAL;
-+      }
-+      else {
-+              old = ITIMER_REAL;
-+              new = ITIMER_VIRTUAL;
-+      }
-+
-+      if((setitimer(old, &disable, NULL) < 0) ||
-+         (setitimer(new, &enable, NULL)))
-+              printk("switch_timers - setitimer failed, errno = %d\n",
-+                     errno);
-+}
-+
-+void idle_timer(void)
-+{
-+      if(signal(SIGVTALRM, SIG_IGN) == SIG_ERR)
-+              panic("Couldn't unset SIGVTALRM handler");
-+      
-+      set_handler(SIGALRM, (__sighandler_t) alarm_handler, 
-+                  SA_RESTART, SIGUSR1, SIGIO, SIGWINCH, SIGVTALRM, -1);
-+      set_interval(ITIMER_REAL);
-+}
-+
-+void time_init(void)
-+{
-+      if(signal(SIGVTALRM, boot_timer_handler) == SIG_ERR)
-+              panic("Couldn't set SIGVTALRM handler");
-+      set_interval(ITIMER_VIRTUAL);
-+}
-+
-+void do_gettimeofday(struct timeval *tv)
-+{
-+      unsigned long flags;
-+
-+      flags = time_lock();
-+      gettimeofday(tv, NULL);
-+      timeradd(tv, &local_offset, tv);
-+      time_unlock(flags);
-+}
-+
-+void do_settimeofday(struct timeval *tv)
-+{
-+      struct timeval now;
-+      unsigned long flags;
-+
-+      flags = time_lock();
-+      gettimeofday(&now, NULL);
-+      timersub(tv, &now, &local_offset);
-+      time_unlock(flags);
-+}
-+
-+void idle_sleep(int secs)
-+{
-+      struct timespec ts;
-+
-+      ts.tv_sec = secs;
-+      ts.tv_nsec = 0;
-+      nanosleep(&ts, NULL);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/time_kern.c um/arch/um/kernel/time_kern.c
---- orig/arch/um/kernel/time_kern.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/time_kern.c      2003-04-23 22:19:08.000000000 -0400
-@@ -0,0 +1,172 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/kernel.h"
-+#include "linux/unistd.h"
-+#include "linux/stddef.h"
-+#include "linux/spinlock.h"
-+#include "linux/sched.h"
-+#include "linux/interrupt.h"
-+#include "linux/init.h"
-+#include "linux/delay.h"
-+#include "asm/irq.h"
-+#include "asm/param.h"
-+#include "asm/current.h"
-+#include "kern_util.h"
-+#include "user_util.h"
-+#include "time_user.h"
-+#include "mode.h"
-+
-+extern rwlock_t xtime_lock;
-+
-+int hz(void)
-+{
-+      return(HZ);
-+}
-+
-+/* Changed at early boot */
-+int timer_irq_inited = 0;
-+
-+/* missed_ticks will be modified after kernel memory has been 
-+ * write-protected, so this puts it in a section which will be left 
-+ * write-enabled.
-+ */
-+int __attribute__ ((__section__ (".unprotected"))) missed_ticks[NR_CPUS];
-+
-+void timer_irq(union uml_pt_regs *regs)
-+{
-+      int cpu = current->processor, ticks = missed_ticks[cpu];
-+
-+        if(!timer_irq_inited) return;
-+      missed_ticks[cpu] = 0;
-+      while(ticks--) do_IRQ(TIMER_IRQ, regs);
-+}
-+
-+void boot_timer_handler(int sig)
-+{
-+      struct pt_regs regs;
-+
-+      CHOOSE_MODE((void) 
-+                  (UPT_SC(&regs.regs) = (struct sigcontext *) (&sig + 1)),
-+                  (void) (regs.regs.skas.is_user = 0));
-+      do_timer(&regs);
-+}
-+
-+void um_timer(int irq, void *dev, struct pt_regs *regs)
-+{
-+      do_timer(regs);
-+      write_lock(&xtime_lock);
-+      vxtime_lock();
-+      timer();
-+      vxtime_unlock();
-+      write_unlock(&xtime_lock);
-+}
-+
-+long um_time(int * tloc)
-+{
-+      struct timeval now;
-+
-+      do_gettimeofday(&now);
-+      if (tloc) {
-+              if (put_user(now.tv_sec,tloc))
-+                      now.tv_sec = -EFAULT;
-+      }
-+      return now.tv_sec;
-+}
-+
-+long um_stime(int * tptr)
-+{
-+      int value;
-+      struct timeval new;
-+
-+      if (get_user(value, tptr))
-+                return -EFAULT;
-+      new.tv_sec = value;
-+      new.tv_usec = 0;
-+      do_settimeofday(&new);
-+      return 0;
-+}
-+
-+/* XXX Needs to be moved under sys-i386 */
-+void __delay(um_udelay_t time)
-+{
-+      /* Stolen from the i386 __loop_delay */
-+      int d0;
-+      __asm__ __volatile__(
-+              "\tjmp 1f\n"
-+              ".align 16\n"
-+              "1:\tjmp 2f\n"
-+              ".align 16\n"
-+              "2:\tdecl %0\n\tjns 2b"
-+              :"=&a" (d0)
-+              :"0" (time));
-+}
-+
-+void __udelay(um_udelay_t usecs)
-+{
-+      int i, n;
-+
-+      n = (loops_per_jiffy * HZ * usecs) / 1000000;
-+      for(i=0;i<n;i++) ;
-+}
-+
-+void __const_udelay(um_udelay_t usecs)
-+{
-+      int i, n;
-+
-+      n = (loops_per_jiffy * HZ * usecs) / 1000000;
-+      for(i=0;i<n;i++) ;
-+}
-+
-+void timer_handler(int sig, union uml_pt_regs *regs)
-+{
-+#ifdef CONFIG_SMP
-+      update_process_times(user_context(UPT_SP(regs)));
-+#endif
-+      if(current->processor == 0)
-+              timer_irq(regs);
-+}
-+
-+static spinlock_t timer_spinlock = SPIN_LOCK_UNLOCKED;
-+
-+unsigned long time_lock(void)
-+{
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&timer_spinlock, flags);
-+      return(flags);
-+}
-+
-+void time_unlock(unsigned long flags)
-+{
-+      spin_unlock_irqrestore(&timer_spinlock, flags);
-+}
-+
-+int __init timer_init(void)
-+{
-+      int err;
-+
-+      CHOOSE_MODE(user_time_init_tt(), user_time_init_skas());
-+      if((err = request_irq(TIMER_IRQ, um_timer, SA_INTERRUPT, "timer", 
-+                            NULL)) != 0)
-+              printk(KERN_ERR "timer_init : request_irq failed - "
-+                     "errno = %d\n", -err);
-+      timer_irq_inited = 1;
-+      return(0);
-+}
-+
-+__initcall(timer_init);
-+
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tlb.c um/arch/um/kernel/tlb.c
---- orig/arch/um/kernel/tlb.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tlb.c    2002-10-23 22:15:51.000000000 -0400
-@@ -0,0 +1,80 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/mm.h"
-+#include "asm/page.h"
-+#include "asm/pgalloc.h"
-+#include "choose-mode.h"
-+#include "mode_kern.h"
-+
-+void flush_tlb_page(struct vm_area_struct *vma, unsigned long address)
-+{
-+      address &= PAGE_MASK;
-+      flush_tlb_range(vma->vm_mm, address, address + PAGE_SIZE);
-+}
-+
-+void flush_tlb_all(void)
-+{
-+      flush_tlb_mm(current->mm);
-+}
-+
-+void flush_tlb_kernel_vm(void)
-+{
-+      CHOOSE_MODE(flush_tlb_kernel_vm_tt(), flush_tlb_kernel_vm_skas());
-+}
-+
-+void __flush_tlb_one(unsigned long addr)
-+{
-+      CHOOSE_MODE_PROC(__flush_tlb_one_tt, __flush_tlb_one_skas, addr);
-+}
-+
-+void flush_tlb_range(struct mm_struct *mm, unsigned long start, 
-+                   unsigned long end)
-+{
-+      CHOOSE_MODE_PROC(flush_tlb_range_tt, flush_tlb_range_skas, mm, start, 
-+                       end);
-+}
-+
-+void flush_tlb_mm(struct mm_struct *mm)
-+{
-+      CHOOSE_MODE_PROC(flush_tlb_mm_tt, flush_tlb_mm_skas, mm);
-+}
-+
-+void force_flush_all(void)
-+{
-+      CHOOSE_MODE(force_flush_all_tt(), force_flush_all_skas());
-+}
-+
-+
-+pgd_t *pgd_offset_proc(struct mm_struct *mm, unsigned long address)
-+{
-+      return(pgd_offset(mm, address));
-+}
-+
-+pmd_t *pmd_offset_proc(pgd_t *pgd, unsigned long address)
-+{
-+      return(pmd_offset(pgd, address));
-+}
-+
-+pte_t *pte_offset_proc(pmd_t *pmd, unsigned long address)
-+{
-+      return(pte_offset(pmd, address));
-+}
-+
-+pte_t *addr_pte(struct task_struct *task, unsigned long addr)
-+{
-+      return(pte_offset(pmd_offset(pgd_offset(task->mm, addr), addr), addr));
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/trap_kern.c um/arch/um/kernel/trap_kern.c
---- orig/arch/um/kernel/trap_kern.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/trap_kern.c      2003-03-26 13:26:00.000000000 -0500
-@@ -0,0 +1,192 @@
-+/* 
-+ * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/kernel.h"
-+#include "linux/sched.h"
-+#include "linux/mm.h"
-+#include "linux/spinlock.h"
-+#include "linux/config.h"
-+#include "linux/init.h"
-+#include "asm/semaphore.h"
-+#include "asm/pgtable.h"
-+#include "asm/pgalloc.h"
-+#include "asm/a.out.h"
-+#include "asm/current.h"
-+#include "asm/irq.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "kern.h"
-+#include "chan_kern.h"
-+#include "mconsole_kern.h"
-+#include "2_5compat.h"
-+
-+unsigned long handle_page_fault(unsigned long address, unsigned long ip, 
-+                              int is_write, int is_user, int *code_out)
-+{
-+      struct mm_struct *mm = current->mm;
-+      struct vm_area_struct *vma;
-+      pgd_t *pgd;
-+      pmd_t *pmd;
-+      pte_t *pte;
-+      unsigned long page;
-+      int handled = 0;
-+
-+      *code_out = SEGV_MAPERR;
-+      down_read(&mm->mmap_sem);
-+      vma = find_vma(mm, address);
-+      if(!vma) 
-+              goto out;
-+      else if(vma->vm_start <= address) 
-+              goto good_area;
-+      else if(!(vma->vm_flags & VM_GROWSDOWN)) 
-+              goto out;
-+      else if(expand_stack(vma, address)) 
-+              goto out;
-+
-+ good_area:
-+      *code_out = SEGV_ACCERR;
-+      if(is_write && !(vma->vm_flags & VM_WRITE)) 
-+              goto out;
-+      page = address & PAGE_MASK;
-+      if(page == (unsigned long) current + PAGE_SIZE)
-+              panic("Kernel stack overflow");
-+      pgd = pgd_offset(mm, page);
-+      pmd = pmd_offset(pgd, page);
-+      do {
-+      survive:
-+              switch (handle_mm_fault(mm, vma, address, is_write)) {
-+              case 1:
-+                      current->min_flt++;
-+                      break;
-+              case 2:
-+                      current->maj_flt++;
-+                      break;
-+              default:
-+                      if (current->pid == 1) {
-+                              up_read(&mm->mmap_sem);
-+                              yield();
-+                              down_read(&mm->mmap_sem);
-+                              goto survive;
-+                      }
-+                      /* Fall through to bad area case */
-+              case 0:
-+                      goto out;
-+              }
-+              pte = pte_offset(pmd, page);
-+      } while(!pte_present(*pte));
-+      handled = 1;
-+      *pte = pte_mkyoung(*pte);
-+      if(pte_write(*pte)) *pte = pte_mkdirty(*pte);
-+      flush_tlb_page(vma, page);
-+ out:
-+      up_read(&mm->mmap_sem);
-+      return(handled);
-+}
-+
-+unsigned long segv(unsigned long address, unsigned long ip, int is_write, 
-+                 int is_user, void *sc)
-+{
-+      struct siginfo si;
-+      void *catcher;
-+      int handled;
-+
-+        if(!is_user && (address >= start_vm) && (address < end_vm)){
-+                flush_tlb_kernel_vm();
-+                return(0);
-+        }
-+        if(current->mm == NULL)
-+              panic("Segfault with no mm");
-+
-+      handled = handle_page_fault(address, ip, is_write, is_user, 
-+                                  &si.si_code);
-+
-+      catcher = current->thread.fault_catcher;
-+      if(handled)
-+              return(0);
-+      else if(catcher != NULL){
-+              current->thread.fault_addr = (void *) address;
-+              do_longjmp(catcher, 1);
-+      } 
-+      else if(current->thread.fault_addr != NULL){
-+              panic("fault_addr set but no fault catcher");
-+      }
-+      else if(arch_fixup(ip, sc))
-+              return(0);
-+
-+      if(!is_user) 
-+              panic("Kernel mode fault at addr 0x%lx, ip 0x%lx", 
-+                    address, ip);
-+      si.si_signo = SIGSEGV;
-+      si.si_addr = (void *) address;
-+      current->thread.cr2 = address;
-+      current->thread.err = is_write;
-+      force_sig_info(SIGSEGV, &si, current);
-+      return(0);
-+}
-+
-+void bad_segv(unsigned long address, unsigned long ip, int is_write)
-+{
-+      struct siginfo si;
-+
-+      printk(KERN_ERR "Unfixable SEGV in '%s' (pid %d) at 0x%lx "
-+             "(ip 0x%lx)\n", current->comm, current->pid, address, ip);
-+      si.si_signo = SIGSEGV;
-+      si.si_code = SEGV_ACCERR;
-+      si.si_addr = (void *) address;
-+      current->thread.cr2 = address;
-+      current->thread.err = is_write;
-+      force_sig_info(SIGSEGV, &si, current);
-+}
-+
-+void relay_signal(int sig, union uml_pt_regs *regs)
-+{
-+      if(arch_handle_signal(sig, regs)) return;
-+      if(!UPT_IS_USER(regs))
-+              panic("Kernel mode signal %d", sig);
-+      force_sig(sig, current);
-+}
-+
-+void bus_handler(int sig, union uml_pt_regs *regs)
-+{
-+      if(current->thread.fault_catcher != NULL)
-+              do_longjmp(current->thread.fault_catcher, 1);
-+      else relay_signal(sig, regs);
-+}
-+
-+void winch(int sig, union uml_pt_regs *regs)
-+{
-+      do_IRQ(WINCH_IRQ, regs);
-+}
-+
-+void trap_init(void)
-+{
-+}
-+
-+spinlock_t trap_lock = SPIN_LOCK_UNLOCKED;
-+
-+static int trap_index = 0;
-+
-+int next_trap_index(int limit)
-+{
-+      int ret;
-+
-+      spin_lock(&trap_lock);
-+      ret = trap_index;
-+      if(++trap_index == limit)
-+              trap_index = 0;
-+      spin_unlock(&trap_lock);
-+      return(ret);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/trap_user.c um/arch/um/kernel/trap_user.c
---- orig/arch/um/kernel/trap_user.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/trap_user.c      2003-03-26 13:25:50.000000000 -0500
-@@ -0,0 +1,140 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdlib.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <setjmp.h>
-+#include <signal.h>
-+#include <sys/time.h>
-+#include <sys/ioctl.h>
-+#include <sys/ptrace.h>
-+#include <sys/wait.h>
-+#include <asm/page.h>
-+#include <asm/unistd.h>
-+#include <asm/ptrace.h>
-+#include "init.h"
-+#include "sysdep/ptrace.h"
-+#include "sigcontext.h"
-+#include "sysdep/sigcontext.h"
-+#include "irq_user.h"
-+#include "frame_user.h"
-+#include "signal_user.h"
-+#include "time_user.h"
-+#include "task.h"
-+#include "mode.h"
-+#include "choose-mode.h"
-+#include "kern_util.h"
-+#include "user_util.h"
-+#include "os.h"
-+
-+void kill_child_dead(int pid)
-+{
-+      kill(pid, SIGKILL);
-+      kill(pid, SIGCONT);
-+      while(waitpid(pid, NULL, 0) > 0) kill(pid, SIGCONT);
-+}
-+
-+/* Unlocked - don't care if this is a bit off */
-+int nsegfaults = 0;
-+
-+struct {
-+      unsigned long address;
-+      int is_write;
-+      int pid;
-+      unsigned long sp;
-+      int is_user;
-+} segfault_record[1024];
-+
-+void segv_handler(int sig, union uml_pt_regs *regs)
-+{
-+      int index, max;
-+
-+      if(UPT_IS_USER(regs) && !UPT_SEGV_IS_FIXABLE(regs)){
-+              bad_segv(UPT_FAULT_ADDR(regs), UPT_IP(regs), 
-+                       UPT_FAULT_WRITE(regs));
-+              return;
-+      }
-+      max = sizeof(segfault_record)/sizeof(segfault_record[0]);
-+      index = next_trap_index(max);
-+
-+      nsegfaults++;
-+      segfault_record[index].address = UPT_FAULT_ADDR(regs);
-+      segfault_record[index].pid = os_getpid();
-+      segfault_record[index].is_write = UPT_FAULT_WRITE(regs);
-+      segfault_record[index].sp = UPT_SP(regs);
-+      segfault_record[index].is_user = UPT_IS_USER(regs);
-+      segv(UPT_FAULT_ADDR(regs), UPT_IP(regs), UPT_FAULT_WRITE(regs),
-+           UPT_IS_USER(regs), regs);
-+}
-+
-+void usr2_handler(int sig, union uml_pt_regs *regs)
-+{
-+      CHOOSE_MODE(syscall_handler_tt(sig, regs), (void) 0);
-+}
-+
-+struct signal_info sig_info[] = {
-+      [ SIGTRAP ] { .handler          = relay_signal,
-+                    .is_irq           = 0 },
-+      [ SIGFPE ] { .handler           = relay_signal,
-+                   .is_irq            = 0 },
-+      [ SIGILL ] { .handler           = relay_signal,
-+                   .is_irq            = 0 },
-+      [ SIGWINCH ] { .handler         = winch,
-+                     .is_irq          = 1 },
-+      [ SIGBUS ] { .handler           = bus_handler,
-+                   .is_irq            = 0 },
-+      [ SIGSEGV] { .handler           = segv_handler,
-+                   .is_irq            = 0 },
-+      [ SIGIO ] { .handler            = sigio_handler,
-+                  .is_irq             = 1 },
-+      [ SIGVTALRM ] { .handler        = timer_handler,
-+                      .is_irq         = 1 },
-+        [ SIGALRM ] { .handler          = timer_handler,
-+                      .is_irq           = 1 },
-+      [ SIGUSR2 ] { .handler          = usr2_handler,
-+                    .is_irq           = 0 },
-+};
-+
-+void sig_handler(int sig, struct sigcontext sc)
-+{
-+      CHOOSE_MODE_PROC(sig_handler_common_tt, sig_handler_common_skas,
-+                       sig, &sc);
-+}
-+
-+extern int timer_irq_inited, missed_ticks[];
-+
-+void alarm_handler(int sig, struct sigcontext sc)
-+{
-+      if(!timer_irq_inited) return;
-+      missed_ticks[cpu()]++;
-+
-+      if(sig == SIGALRM)
-+              switch_timers(0);
-+
-+      CHOOSE_MODE_PROC(sig_handler_common_tt, sig_handler_common_skas,
-+                       sig, &sc);
-+
-+      if(sig == SIGALRM)
-+              switch_timers(1);
-+}
-+
-+void do_longjmp(void *b, int val)
-+{
-+      jmp_buf *buf = b;
-+
-+      longjmp(*buf, val);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/exec_kern.c um/arch/um/kernel/tt/exec_kern.c
---- orig/arch/um/kernel/tt/exec_kern.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/exec_kern.c   2002-10-24 19:22:17.000000000 -0400
-@@ -0,0 +1,83 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/kernel.h"
-+#include "linux/mm.h"
-+#include "asm/signal.h"
-+#include "asm/ptrace.h"
-+#include "asm/uaccess.h"
-+#include "asm/pgalloc.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "irq_user.h"
-+#include "time_user.h"
-+#include "mem_user.h"
-+#include "os.h"
-+#include "tlb.h"
-+
-+static int exec_tramp(void *sig_stack)
-+{
-+      init_new_thread_stack(sig_stack, NULL);
-+      init_new_thread_signals(1);
-+      os_stop_process(os_getpid());
-+      return(0);
-+}
-+
-+void flush_thread_tt(void)
-+{
-+      unsigned long stack;
-+      int new_pid;
-+
-+      stack = alloc_stack(0, 0);
-+      if(stack == 0){
-+              printk(KERN_ERR 
-+                     "flush_thread : failed to allocate temporary stack\n");
-+              do_exit(SIGKILL);
-+      }
-+              
-+      new_pid = start_fork_tramp((void *) current->thread.kernel_stack,
-+                                 stack, 0, exec_tramp);
-+      if(new_pid < 0){
-+              printk(KERN_ERR 
-+                     "flush_thread : new thread failed, errno = %d\n",
-+                     -new_pid);
-+              do_exit(SIGKILL);
-+      }
-+
-+      if(current->processor == 0)
-+              forward_interrupts(new_pid);
-+      current->thread.request.op = OP_EXEC;
-+      current->thread.request.u.exec.pid = new_pid;
-+      unprotect_stack((unsigned long) current);
-+      os_usr1_process(os_getpid());
-+
-+      enable_timer();
-+      free_page(stack);
-+      protect_memory(uml_reserved, high_physmem - uml_reserved, 1, 1, 0, 1);
-+      task_protections((unsigned long) current);
-+      force_flush_all();
-+      unblock_signals();
-+}
-+
-+void start_thread_tt(struct pt_regs *regs, unsigned long eip, 
-+                   unsigned long esp)
-+{
-+      set_fs(USER_DS);
-+      flush_tlb_mm(current->mm);
-+      PT_REGS_IP(regs) = eip;
-+      PT_REGS_SP(regs) = esp;
-+      PT_FIX_EXEC_STACK(esp);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/exec_user.c um/arch/um/kernel/tt/exec_user.c
---- orig/arch/um/kernel/tt/exec_user.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/exec_user.c   2002-12-05 19:36:57.000000000 -0500
-@@ -0,0 +1,49 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <unistd.h>
-+#include <stdlib.h>
-+#include <sched.h>
-+#include <errno.h>
-+#include <sys/wait.h>
-+#include <sys/ptrace.h>
-+#include <signal.h>
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "ptrace_user.h"
-+
-+void do_exec(int old_pid, int new_pid)
-+{
-+      unsigned long regs[FRAME_SIZE];
-+
-+      if((ptrace(PTRACE_ATTACH, new_pid, 0, 0) < 0) ||
-+         (ptrace(PTRACE_CONT, new_pid, 0, 0) < 0) ||
-+         (waitpid(new_pid, 0, WUNTRACED) < 0))
-+              tracer_panic("do_exec failed to attach proc - errno = %d",
-+                           errno);
-+
-+      if(ptrace_getregs(old_pid, regs) < 0)
-+              tracer_panic("do_exec failed to get registers - errno = %d",
-+                           errno);
-+
-+      kill(old_pid, SIGKILL);
-+
-+      if(ptrace_setregs(new_pid, regs) < 0)
-+              tracer_panic("do_exec failed to start new proc - errno = %d",
-+                           errno);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/gdb.c um/arch/um/kernel/tt/gdb.c
---- orig/arch/um/kernel/tt/gdb.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/gdb.c 2003-01-17 13:23:31.000000000 -0500
-@@ -0,0 +1,278 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <errno.h>
-+#include <string.h>
-+#include <signal.h>
-+#include <sys/ptrace.h>
-+#include <sys/types.h>
-+#include "uml-config.h"
-+#include "kern_constants.h"
-+#include "chan_user.h"
-+#include "init.h"
-+#include "user.h"
-+#include "debug.h"
-+#include "kern_util.h"
-+#include "user_util.h"
-+#include "tt.h"
-+#include "sysdep/thread.h"
-+
-+extern int debugger_pid;
-+extern int debugger_fd;
-+extern int debugger_parent;
-+
-+int detach(int pid, int sig)
-+{
-+      return(ptrace(PTRACE_DETACH, pid, 0, sig));
-+}
-+
-+int attach(int pid)
-+{
-+      int err;
-+
-+      err = ptrace(PTRACE_ATTACH, pid, 0, 0);
-+      if(err < 0) return(-errno);
-+      else return(err);
-+}
-+
-+int cont(int pid)
-+{
-+      return(ptrace(PTRACE_CONT, pid, 0, 0));
-+}
-+
-+#ifdef UML_CONFIG_PT_PROXY
-+
-+int debugger_signal(int status, pid_t pid)
-+{
-+      return(debugger_proxy(status, pid));
-+}
-+
-+void child_signal(pid_t pid, int status)
-+{
-+      child_proxy(pid, status);
-+}
-+
-+static void gdb_announce(char *dev_name, int dev)
-+{
-+      printf("gdb assigned device '%s'\n", dev_name);
-+}
-+
-+static struct chan_opts opts = {
-+      .announce       = gdb_announce,
-+      .xterm_title    = "UML kernel debugger",
-+      .raw            = 0,
-+      .tramp_stack    = 0,
-+      .in_kernel      = 0,
-+};
-+
-+/* Accessed by the tracing thread, which automatically serializes access */
-+static void *xterm_data;
-+static int xterm_fd;
-+
-+extern void *xterm_init(char *, int, struct chan_opts *);
-+extern int xterm_open(int, int, int, void *, char **);
-+extern void xterm_close(int, void *);
-+
-+int open_gdb_chan(void)
-+{
-+      char stack[UM_KERN_PAGE_SIZE], *dummy;
-+
-+      opts.tramp_stack = (unsigned long) stack;
-+      xterm_data = xterm_init("", 0, &opts);
-+      xterm_fd = xterm_open(1, 1, 1, xterm_data, &dummy);
-+      return(xterm_fd);
-+}
-+
-+static void exit_debugger_cb(void *unused)
-+{
-+      if(debugger_pid != -1){
-+              if(gdb_pid != -1){
-+                      fake_child_exit();
-+                      gdb_pid = -1;
-+              }
-+              else kill_child_dead(debugger_pid);
-+              debugger_pid = -1;
-+              if(debugger_parent != -1)
-+                      detach(debugger_parent, SIGINT);
-+      }
-+      if(xterm_data != NULL) xterm_close(xterm_fd, xterm_data);
-+}
-+
-+static void exit_debugger(void)
-+{
-+      initial_thread_cb(exit_debugger_cb, NULL);
-+}
-+
-+__uml_exitcall(exit_debugger);
-+
-+struct gdb_data {
-+      char *str;
-+      int err;
-+};
-+
-+static void config_gdb_cb(void *arg)
-+{
-+      struct gdb_data *data = arg;
-+      void *task;
-+      int pid;
-+
-+      data->err = -1;
-+      if(debugger_pid != -1) exit_debugger_cb(NULL);
-+      if(!strncmp(data->str, "pid,", strlen("pid,"))){
-+              data->str += strlen("pid,");
-+              pid = strtoul(data->str, NULL, 0);
-+              task = cpu_tasks[0].task;
-+              debugger_pid = attach_debugger(TASK_EXTERN_PID(task), pid, 0);
-+              if(debugger_pid != -1){
-+                      data->err = 0;
-+                      gdb_pid = pid;
-+              }
-+              return;
-+      }
-+      data->err = 0;
-+      debugger_pid = start_debugger(linux_prog, 0, 0, &debugger_fd);
-+      init_proxy(debugger_pid, 0, 0);
-+}
-+
-+int gdb_config(char *str)
-+{
-+      struct gdb_data data;
-+
-+      if(*str++ != '=') return(-1);
-+      data.str = str;
-+      initial_thread_cb(config_gdb_cb, &data);
-+      return(data.err);
-+}
-+
-+void remove_gdb_cb(void *unused)
-+{
-+      exit_debugger_cb(NULL);
-+}
-+
-+int gdb_remove(char *unused)
-+{
-+      initial_thread_cb(remove_gdb_cb, NULL);
-+      return(0);
-+}
-+
-+void signal_usr1(int sig)
-+{
-+      if(debugger_pid != -1){
-+              printk(UM_KERN_ERR "The debugger is already running\n");
-+              return;
-+      }
-+      debugger_pid = start_debugger(linux_prog, 0, 0, &debugger_fd);
-+      init_proxy(debugger_pid, 0, 0);
-+}
-+
-+int init_ptrace_proxy(int idle_pid, int startup, int stop)
-+{
-+      int pid, status;
-+
-+      pid = start_debugger(linux_prog, startup, stop, &debugger_fd);
-+      status = wait_for_stop(idle_pid, SIGSTOP, PTRACE_CONT, NULL);
-+      if(pid < 0){
-+              cont(idle_pid);
-+              return(-1);
-+      }
-+      init_proxy(pid, 1, status);
-+      return(pid);
-+}
-+
-+int attach_debugger(int idle_pid, int pid, int stop)
-+{
-+      int status = 0, err;
-+
-+      err = attach(pid);
-+      if(err < 0){
-+              printf("Failed to attach pid %d, errno = %d\n", pid, -err);
-+              return(-1);
-+      }
-+      if(stop) status = wait_for_stop(idle_pid, SIGSTOP, PTRACE_CONT, NULL);
-+      init_proxy(pid, 1, status);
-+      return(pid);
-+}
-+
-+#ifdef notdef /* Put this back in when it does something useful */
-+static int __init uml_gdb_init_setup(char *line, int *add)
-+{
-+      gdb_init = uml_strdup(line);
-+      return 0;
-+}
-+
-+__uml_setup("gdb=", uml_gdb_init_setup, 
-+"gdb=<channel description>\n\n"
-+);
-+#endif
-+
-+static int __init uml_gdb_pid_setup(char *line, int *add)
-+{
-+      gdb_pid = strtoul(line, NULL, 0);
-+      *add = 0;
-+      return 0;
-+}
-+
-+__uml_setup("gdb-pid=", uml_gdb_pid_setup, 
-+"gdb-pid=<pid>\n"
-+"    gdb-pid is used to attach an external debugger to UML.  This may be\n"
-+"    an already-running gdb or a debugger-like process like strace.\n\n"
-+);
-+
-+#else
-+
-+int debugger_signal(int status, pid_t pid){ return(0); }
-+void child_signal(pid_t pid, int status){ }
-+int init_ptrace_proxy(int idle_pid, int startup, int stop)
-+{
-+      printk(UM_KERN_ERR "debug requested when CONFIG_PT_PROXY is off\n");
-+      kill_child_dead(idle_pid);
-+      exit(1);
-+}
-+
-+void signal_usr1(int sig)
-+{
-+      printk(UM_KERN_ERR "debug requested when CONFIG_PT_PROXY is off\n");
-+}
-+
-+int attach_debugger(int idle_pid, int pid, int stop)
-+{
-+      printk(UM_KERN_ERR "attach_debugger called when CONFIG_PT_PROXY "
-+             "is off\n");
-+      return(-1);
-+}
-+
-+int config_gdb(char *str)
-+{
-+      return(-1);
-+}
-+
-+int remove_gdb(void)
-+{
-+      return(-1);
-+}
-+
-+int init_parent_proxy(int pid)
-+{
-+      return(-1);
-+}
-+
-+void debugger_parent_signal(int status, int pid)
-+{
-+}
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/gdb_kern.c um/arch/um/kernel/tt/gdb_kern.c
---- orig/arch/um/kernel/tt/gdb_kern.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/gdb_kern.c    2002-12-15 21:16:17.000000000 -0500
-@@ -0,0 +1,40 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/init.h"
-+#include "linux/config.h"
-+#include "mconsole_kern.h"
-+
-+#ifdef CONFIG_MCONSOLE
-+
-+extern int gdb_config(char *str);
-+extern int gdb_remove(char *unused);
-+
-+static struct mc_device gdb_mc = {
-+      .name           = "gdb",
-+      .config         = gdb_config,
-+      .remove         = gdb_remove,
-+};
-+
-+int gdb_mc_init(void)
-+{
-+      mconsole_register_dev(&gdb_mc);
-+      return(0);
-+}
-+
-+__initcall(gdb_mc_init);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/include/debug.h um/arch/um/kernel/tt/include/debug.h
---- orig/arch/um/kernel/tt/include/debug.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/include/debug.h       2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,29 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002  Jeff Dike (jdike@karaya.com) and
-+ * Lars Brinkhoff.
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __DEBUG_H
-+#define __DEBUG_H
-+
-+extern int debugger_proxy(int status, pid_t pid);
-+extern void child_proxy(pid_t pid, int status);
-+extern void init_proxy (pid_t pid, int waiting, int status);
-+extern int start_debugger(char *prog, int startup, int stop, int *debugger_fd);
-+extern void fake_child_exit(void);
-+extern int gdb_config(char *str);
-+extern int gdb_remove(char *unused);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/include/mmu.h um/arch/um/kernel/tt/include/mmu.h
---- orig/arch/um/kernel/tt/include/mmu.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/include/mmu.h 2002-11-09 12:51:32.000000000 -0500
-@@ -0,0 +1,23 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __TT_MMU_H
-+#define __TT_MMU_H
-+
-+struct mmu_context_tt {
-+};
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/include/mode.h um/arch/um/kernel/tt/include/mode.h
---- orig/arch/um/kernel/tt/include/mode.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/include/mode.h        2002-12-09 00:34:40.000000000 -0500
-@@ -0,0 +1,36 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __MODE_TT_H__
-+#define __MODE_TT_H__
-+
-+#include "sysdep/ptrace.h"
-+
-+extern int tracing_pid;
-+
-+extern int tracer(int (*init_proc)(void *), void *sp);
-+extern void user_time_init_tt(void);
-+extern int copy_sc_from_user_tt(void *to_ptr, void *from_ptr, void *data);
-+extern int copy_sc_to_user_tt(void *to_ptr, void *fp, void *from_ptr, 
-+                            void *data);
-+extern void sig_handler_common_tt(int sig, void *sc);
-+extern void syscall_handler_tt(int sig, union uml_pt_regs *regs);
-+extern void reboot_tt(void);
-+extern void halt_tt(void);
-+extern int is_tracer_winch(int pid, int fd, void *data);
-+extern void kill_off_processes_tt(void);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/include/mode_kern.h um/arch/um/kernel/tt/include/mode_kern.h
---- orig/arch/um/kernel/tt/include/mode_kern.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/include/mode_kern.h   2002-12-16 21:49:18.000000000 -0500
-@@ -0,0 +1,52 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __TT_MODE_KERN_H__
-+#define __TT_MODE_KERN_H__
-+
-+#include "linux/sched.h"
-+#include "asm/page.h"
-+#include "asm/ptrace.h"
-+#include "asm/uaccess.h"
-+
-+extern void *_switch_to_tt(void *prev, void *next);
-+extern void flush_thread_tt(void);
-+extern void start_thread_tt(struct pt_regs *regs, unsigned long eip, 
-+                         unsigned long esp);
-+extern int copy_thread_tt(int nr, unsigned long clone_flags, unsigned long sp,
-+                        unsigned long stack_top, struct task_struct *p, 
-+                        struct pt_regs *regs);
-+extern void release_thread_tt(struct task_struct *task);
-+extern void exit_thread_tt(void);
-+extern void initial_thread_cb_tt(void (*proc)(void *), void *arg);
-+extern void init_idle_tt(void);
-+extern void flush_tlb_kernel_vm_tt(void);
-+extern void __flush_tlb_one_tt(unsigned long addr);
-+extern void flush_tlb_range_tt(struct mm_struct *mm, unsigned long start, 
-+                             unsigned long end);
-+extern void flush_tlb_mm_tt(struct mm_struct *mm);
-+extern void force_flush_all_tt(void);
-+extern long execute_syscall_tt(void *r);
-+extern void before_mem_tt(unsigned long brk_start);
-+extern unsigned long set_task_sizes_tt(int arg, unsigned long *host_size_out, 
-+                                     unsigned long *task_size_out);
-+extern int start_uml_tt(void);
-+extern int external_pid_tt(struct task_struct *task);
-+extern int thread_pid_tt(struct thread_struct *thread);
-+
-+#define kmem_end_tt (host_task_size - ABOVE_KMEM)
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/include/ptrace-tt.h um/arch/um/kernel/tt/include/ptrace-tt.h
---- orig/arch/um/kernel/tt/include/ptrace-tt.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/include/ptrace-tt.h   2003-01-17 13:23:30.000000000 -0500
-@@ -0,0 +1,26 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __PTRACE_TT_H
-+#define __PTRACE_TT_H
-+
-+#include "uml-config.h"
-+
-+#ifdef UML_CONFIG_MODE_TT
-+#include "sysdep/sc.h"
-+#endif
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/include/tt.h um/arch/um/kernel/tt/include/tt.h
---- orig/arch/um/kernel/tt/include/tt.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/include/tt.h  2002-12-20 23:29:11.000000000 -0500
-@@ -0,0 +1,46 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __TT_H__
-+#define __TT_H__
-+
-+#include "sysdep/ptrace.h"
-+
-+extern int gdb_pid;
-+extern int debug;
-+extern int debug_stop;
-+extern int debug_trace;
-+
-+extern int honeypot;
-+
-+extern int fork_tramp(void *sig_stack);
-+extern int do_proc_op(void *t, int proc_id);
-+extern int tracer(int (*init_proc)(void *), void *sp);
-+extern void attach_process(int pid);
-+extern void tracer_panic(char *format, ...);
-+extern void set_init_pid(int pid);
-+extern int set_user_mode(void *task);
-+extern void set_tracing(void *t, int tracing);
-+extern int is_tracing(void *task);
-+extern int singlestepping_tt(void *t);
-+extern void clear_singlestep(void *t);
-+extern void syscall_handler(int sig, union uml_pt_regs *regs);
-+extern void exit_kernel(int pid, void *task);
-+extern int do_syscall(void *task, int pid);
-+extern int is_valid_pid(int pid);
-+extern void remap_data(void *segment_start, void *segment_end, int w);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/include/uaccess.h um/arch/um/kernel/tt/include/uaccess.h
---- orig/arch/um/kernel/tt/include/uaccess.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/include/uaccess.h     2003-03-25 16:58:42.000000000 -0500
-@@ -0,0 +1,122 @@
-+/* 
-+ * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __TT_UACCESS_H
-+#define __TT_UACCESS_H
-+
-+#include "linux/string.h"
-+#include "linux/sched.h"
-+#include "asm/processor.h"
-+#include "asm/errno.h"
-+#include "asm/current.h"
-+#include "asm/a.out.h"
-+#include "uml_uaccess.h"
-+
-+#define ABOVE_KMEM (16 * 1024 * 1024)
-+
-+extern unsigned long end_vm;
-+extern unsigned long uml_physmem;
-+
-+#define under_task_size(addr, size) \
-+      (((unsigned long) (addr) < TASK_SIZE) && \
-+         (((unsigned long) (addr) + (size)) < TASK_SIZE))
-+
-+#define is_stack(addr, size) \
-+      (((unsigned long) (addr) < STACK_TOP) && \
-+       ((unsigned long) (addr) >= STACK_TOP - ABOVE_KMEM) && \
-+       (((unsigned long) (addr) + (size)) <= STACK_TOP))
-+
-+#define access_ok_tt(type, addr, size) \
-+      ((type == VERIFY_READ) || (segment_eq(get_fs(), KERNEL_DS)) || \
-+         (((unsigned long) (addr) <= ((unsigned long) (addr) + (size))) && \
-+          (under_task_size(addr, size) || is_stack(addr, size))))
-+
-+static inline int verify_area_tt(int type, const void * addr, 
-+                               unsigned long size)
-+{
-+      return(access_ok_tt(type, addr, size) ? 0 : -EFAULT);
-+}
-+
-+extern unsigned long get_fault_addr(void);
-+
-+extern int __do_copy_from_user(void *to, const void *from, int n,
-+                             void **fault_addr, void **fault_catcher);
-+
-+static inline int copy_from_user_tt(void *to, const void *from, int n)
-+{
-+      if(!access_ok_tt(VERIFY_READ, from, n)) 
-+              return(n);
-+
-+      return(__do_copy_from_user(to, from, n, &current->thread.fault_addr,
-+                                 &current->thread.fault_catcher));
-+}
-+
-+static inline int copy_to_user_tt(void *to, const void *from, int n)
-+{
-+      if(!access_ok_tt(VERIFY_WRITE, to, n))
-+              return(n);
-+              
-+      return(__do_copy_to_user(to, from, n, &current->thread.fault_addr,
-+                               &current->thread.fault_catcher));
-+}
-+
-+extern int __do_strncpy_from_user(char *dst, const char *src, size_t n,
-+                                void **fault_addr, void **fault_catcher);
-+
-+static inline int strncpy_from_user_tt(char *dst, const char *src, int count)
-+{
-+      int n;
-+
-+      if(!access_ok_tt(VERIFY_READ, src, 1)) 
-+              return(-EFAULT);
-+
-+      n = __do_strncpy_from_user(dst, src, count, 
-+                                 &current->thread.fault_addr,
-+                                 &current->thread.fault_catcher);
-+      if(n < 0) return(-EFAULT);
-+      return(n);
-+}
-+
-+extern int __do_clear_user(void *mem, size_t len, void **fault_addr,
-+                         void **fault_catcher);
-+
-+static inline int __clear_user_tt(void *mem, int len)
-+{
-+      return(__do_clear_user(mem, len,
-+                             &current->thread.fault_addr,
-+                             &current->thread.fault_catcher));
-+}
-+
-+static inline int clear_user_tt(void *mem, int len)
-+{
-+      if(!access_ok_tt(VERIFY_WRITE, mem, len))
-+              return(len);
-+
-+      return(__do_clear_user(mem, len, &current->thread.fault_addr,
-+                             &current->thread.fault_catcher));
-+}
-+
-+extern int __do_strnlen_user(const char *str, unsigned long n,
-+                           void **fault_addr, void **fault_catcher);
-+
-+static inline int strnlen_user_tt(const void *str, int len)
-+{
-+      return(__do_strnlen_user(str, len,
-+                               &current->thread.fault_addr,
-+                               &current->thread.fault_catcher));
-+}
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/ksyms.c um/arch/um/kernel/tt/ksyms.c
---- orig/arch/um/kernel/tt/ksyms.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/ksyms.c       2002-10-27 17:01:56.000000000 -0500
-@@ -0,0 +1,28 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/module.h"
-+#include "asm/uaccess.h"
-+#include "mode.h"
-+
-+EXPORT_SYMBOL(__do_copy_from_user);
-+EXPORT_SYMBOL(__do_copy_to_user);
-+EXPORT_SYMBOL(__do_strncpy_from_user);
-+EXPORT_SYMBOL(__do_strnlen_user); 
-+EXPORT_SYMBOL(__do_clear_user);
-+
-+EXPORT_SYMBOL(tracing_pid);
-+EXPORT_SYMBOL(honeypot);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/Makefile um/arch/um/kernel/tt/Makefile
---- orig/arch/um/kernel/tt/Makefile    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/Makefile      2002-12-20 23:29:42.000000000 -0500
-@@ -0,0 +1,39 @@
-+# 
-+# Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+O_TARGET = tt.o
-+
-+obj-y = exec_kern.o exec_user.o gdb.o ksyms.o mem.o mem_user.o process_kern.o \
-+      syscall_kern.o syscall_user.o time.o tlb.o tracer.o trap_user.o \
-+      uaccess_user.o
-+
-+obj-$(CONFIG_PT_PROXY) += gdb_kern.o 
-+
-+subdir-y = sys-$(SUBARCH)
-+subdir-$(CONFIG_PT_PROXY) += ptproxy
-+
-+obj-y += $(join $(subdir-y),$(subdir-y:%=/%.o))
-+
-+export-objs = ksyms.o
-+
-+USER_OBJS = $(filter %_user.o,$(obj-y)) gdb.o time.o tracer.o
-+
-+UNMAP_CFLAGS := $(patsubst -pg -DPROFILING,,$(USER_CFLAGS))
-+UNMAP_CFLAGS := $(patsubst -fprofile-arcs -ftest-coverage,,$(UNMAP_CFLAGS))
-+
-+include $(TOPDIR)/Rules.make
-+
-+$(USER_OBJS) : %.o: %.c
-+      $(CC) $(CFLAGS_$@) $(USER_CFLAGS) -c -o $@ $<
-+
-+$(O_TARGET) : unmap_fin.o
-+
-+unmap.o: unmap.c
-+      $(CC) $(UNMAP_CFLAGS) -c -o $@ $<
-+
-+unmap_fin.o : unmap.o
-+      ld -r -o $@ $< -lc -L/usr/lib
-+
-+clean :
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/mem.c um/arch/um/kernel/tt/mem.c
---- orig/arch/um/kernel/tt/mem.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/mem.c 2002-12-16 21:49:51.000000000 -0500
-@@ -0,0 +1,51 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/stddef.h"
-+#include "linux/config.h"
-+#include "linux/mm.h"
-+#include "asm/uaccess.h"
-+#include "mem_user.h"
-+#include "kern_util.h"
-+#include "user_util.h"
-+#include "kern.h"
-+#include "tt.h"
-+
-+void before_mem_tt(unsigned long brk_start)
-+{
-+      if(!jail || debug)
-+              remap_data(UML_ROUND_DOWN(&_stext), UML_ROUND_UP(&_etext), 1);
-+      remap_data(UML_ROUND_DOWN(&_sdata), UML_ROUND_UP(&_edata), 1);
-+      remap_data(UML_ROUND_DOWN(&__bss_start), UML_ROUND_UP(brk_start), 1);
-+}
-+
-+#ifdef CONFIG_HOST_2G_2G
-+#define TOP 0x80000000
-+#else
-+#define TOP 0xc0000000
-+#endif
-+
-+#define SIZE ((CONFIG_NEST_LEVEL + CONFIG_KERNEL_HALF_GIGS) * 0x20000000)
-+#define START (TOP - SIZE)
-+
-+unsigned long set_task_sizes_tt(int arg, unsigned long *host_size_out, 
-+                              unsigned long *task_size_out)
-+{
-+      /* Round up to the nearest 4M */
-+      *host_size_out = ROUND_4M((unsigned long) &arg);
-+      *task_size_out = START;
-+      return(START);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/mem_user.c um/arch/um/kernel/tt/mem_user.c
---- orig/arch/um/kernel/tt/mem_user.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/mem_user.c    2003-01-17 22:07:31.000000000 -0500
-@@ -0,0 +1,50 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdlib.h>
-+#include <stdio.h>
-+#include <unistd.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <sys/mman.h>
-+#include "tt.h"
-+#include "mem_user.h"
-+#include "user_util.h"
-+
-+void remap_data(void *segment_start, void *segment_end, int w)
-+{
-+      void *addr;
-+      unsigned long size;
-+      int data, prot;
-+
-+      if(w) prot = PROT_WRITE;
-+      else prot = 0;
-+      prot |= PROT_READ | PROT_EXEC;
-+      size = (unsigned long) segment_end - 
-+              (unsigned long) segment_start;
-+      data = create_mem_file(size);
-+      if((addr = mmap(NULL, size, PROT_WRITE | PROT_READ, 
-+                      MAP_SHARED, data, 0)) == MAP_FAILED){
-+              perror("mapping new data segment");
-+              exit(1);
-+      }
-+      memcpy(addr, segment_start, size);
-+      if(switcheroo(data, prot, addr, segment_start, 
-+                    size) < 0){
-+              printf("switcheroo failed\n");
-+              exit(1);
-+      }
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/process_kern.c um/arch/um/kernel/tt/process_kern.c
---- orig/arch/um/kernel/tt/process_kern.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/process_kern.c        2003-05-29 13:46:00.000000000 -0400
-@@ -0,0 +1,517 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/sched.h"
-+#include "linux/signal.h"
-+#include "linux/kernel.h"
-+#include "asm/system.h"
-+#include "asm/pgalloc.h"
-+#include "asm/ptrace.h"
-+#include "irq_user.h"
-+#include "signal_user.h"
-+#include "kern_util.h"
-+#include "user_util.h"
-+#include "os.h"
-+#include "kern.h"
-+#include "sigcontext.h"
-+#include "time_user.h"
-+#include "mem_user.h"
-+#include "tlb.h"
-+#include "mode.h"
-+#include "init.h"
-+#include "tt.h"
-+
-+void *_switch_to_tt(void *prev, void *next)
-+{
-+      struct task_struct *from, *to;
-+      unsigned long flags;
-+      int err, vtalrm, alrm, prof, cpu;
-+      char c;
-+      /* jailing and SMP are incompatible, so this doesn't need to be 
-+       * made per-cpu 
-+       */
-+      static int reading;
-+
-+      from = prev;
-+      to = next;
-+
-+      to->thread.prev_sched = from;
-+
-+      cpu = from->processor;
-+      if(cpu == 0)
-+              forward_interrupts(to->thread.mode.tt.extern_pid);
-+#ifdef CONFIG_SMP
-+      forward_ipi(cpu_data[cpu].ipi_pipe[0], to->thread.mode.tt.extern_pid);
-+#endif
-+      local_irq_save(flags);
-+
-+      vtalrm = change_sig(SIGVTALRM, 0);
-+      alrm = change_sig(SIGALRM, 0);
-+      prof = change_sig(SIGPROF, 0);
-+
-+      c = 0;
-+      set_current(to);
-+
-+      reading = 0;
-+      err = os_write_file(to->thread.mode.tt.switch_pipe[1], &c, sizeof(c));
-+      if(err != sizeof(c))
-+              panic("write of switch_pipe failed, errno = %d", -err);
-+
-+      reading = 1;
-+      if(from->state == TASK_ZOMBIE)
-+              os_kill_process(os_getpid(), 0);
-+
-+      err = os_read_file(from->thread.mode.tt.switch_pipe[0], &c, sizeof(c));
-+      if(err != sizeof(c))
-+              panic("read of switch_pipe failed, errno = %d", -err);
-+
-+      /* This works around a nasty race with 'jail'.  If we are switching
-+       * between two threads of a threaded app and the incoming process 
-+       * runs before the outgoing process reaches the read, and it makes
-+       * it all the way out to userspace, then it will have write-protected 
-+       * the outgoing process stack.  Then, when the outgoing process 
-+       * returns from the write, it will segfault because it can no longer
-+       * write its own stack.  So, in order to avoid that, the incoming 
-+       * thread sits in a loop yielding until 'reading' is set.  This 
-+       * isn't entirely safe, since there may be a reschedule from a timer
-+       * happening between setting 'reading' and sleeping in read.  But,
-+       * it should get a whole quantum in which to reach the read and sleep,
-+       * which should be enough.
-+       */
-+
-+      if(jail){
-+              while(!reading) sched_yield();
-+      }
-+
-+      change_sig(SIGVTALRM, vtalrm);
-+      change_sig(SIGALRM, alrm);
-+      change_sig(SIGPROF, prof);
-+
-+      arch_switch();
-+
-+      flush_tlb_all();
-+      local_irq_restore(flags);
-+
-+      return(current->thread.prev_sched);
-+}
-+
-+void release_thread_tt(struct task_struct *task)
-+{
-+      os_kill_process(task->thread.mode.tt.extern_pid, 0);
-+}
-+
-+void exit_thread_tt(void)
-+{
-+      close(current->thread.mode.tt.switch_pipe[0]);
-+      close(current->thread.mode.tt.switch_pipe[1]);
-+}
-+
-+extern void schedule_tail(struct task_struct *prev);
-+
-+static void new_thread_handler(int sig)
-+{
-+      int (*fn)(void *);
-+      void *arg;
-+
-+      fn = current->thread.request.u.thread.proc;
-+      arg = current->thread.request.u.thread.arg;
-+      UPT_SC(&current->thread.regs.regs) = (void *) (&sig + 1);
-+      suspend_new_thread(current->thread.mode.tt.switch_pipe[0]);
-+
-+      init_new_thread_signals(1);
-+      enable_timer();
-+      free_page(current->thread.temp_stack);
-+      set_cmdline("(kernel thread)");
-+      force_flush_all();
-+
-+      if(current->thread.prev_sched != NULL)
-+              schedule_tail(current->thread.prev_sched);
-+      current->thread.prev_sched = NULL;
-+
-+      change_sig(SIGUSR1, 1);
-+      change_sig(SIGVTALRM, 1);
-+      change_sig(SIGPROF, 1);
-+      sti();
-+      if(!run_kernel_thread(fn, arg, &current->thread.exec_buf))
-+              do_exit(0);
-+}
-+
-+static int new_thread_proc(void *stack)
-+{
-+      cli();
-+      init_new_thread_stack(stack, new_thread_handler);
-+      os_usr1_process(os_getpid());
-+      return(0);
-+}
-+
-+/* Signal masking - signals are blocked at the start of fork_tramp.  They
-+ * are re-enabled when finish_fork_handler is entered by fork_tramp hitting
-+ * itself with a SIGUSR1.  set_user_mode has to be run with SIGUSR1 off,
-+ * so it is blocked before it's called.  They are re-enabled on sigreturn
-+ * despite the fact that they were blocked when the SIGUSR1 was issued because
-+ * copy_thread copies the parent's signcontext, including the signal mask
-+ * onto the signal frame.
-+ */
-+
-+static void finish_fork_handler(int sig)
-+{
-+      UPT_SC(&current->thread.regs.regs) = (void *) (&sig + 1);
-+      suspend_new_thread(current->thread.mode.tt.switch_pipe[0]);
-+      
-+      init_new_thread_signals(1);
-+      enable_timer();
-+      sti();
-+      force_flush_all();
-+      if(current->mm != current->p_pptr->mm)
-+              protect_memory(uml_reserved, high_physmem - uml_reserved, 1, 
-+                             1, 0, 1);
-+      task_protections((unsigned long) current);
-+
-+      if(current->thread.prev_sched != NULL)
-+              schedule_tail(current->thread.prev_sched);
-+      current->thread.prev_sched = NULL;
-+
-+      free_page(current->thread.temp_stack);
-+      cli();
-+      change_sig(SIGUSR1, 0);
-+      set_user_mode(current);
-+}
-+
-+int fork_tramp(void *stack)
-+{
-+      cli();
-+      arch_init_thread();
-+      init_new_thread_stack(stack, finish_fork_handler);
-+      os_usr1_process(os_getpid());
-+      return(0);
-+}
-+
-+int copy_thread_tt(int nr, unsigned long clone_flags, unsigned long sp,
-+                 unsigned long stack_top, struct task_struct * p, 
-+                 struct pt_regs *regs)
-+{
-+      int (*tramp)(void *);
-+      int new_pid, err;
-+      unsigned long stack;
-+      
-+      if(current->thread.forking)
-+              tramp = fork_tramp;
-+      else {
-+              tramp = new_thread_proc;
-+              p->thread.request.u.thread = current->thread.request.u.thread;
-+      }
-+
-+      err = os_pipe(p->thread.mode.tt.switch_pipe, 1, 1);
-+      if(err){
-+              printk("copy_thread : pipe failed, errno = %d\n", -err);
-+              return(err);
-+      }
-+
-+      stack = alloc_stack(0, 0);
-+      if(stack == 0){
-+              printk(KERN_ERR "copy_thread : failed to allocate "
-+                     "temporary stack\n");
-+              return(-ENOMEM);
-+      }
-+
-+      clone_flags &= CLONE_VM;
-+      p->thread.temp_stack = stack;
-+      new_pid = start_fork_tramp((void *) p->thread.kernel_stack, stack,
-+                                 clone_flags, tramp);
-+      if(new_pid < 0){
-+              printk(KERN_ERR "copy_thread : clone failed - errno = %d\n", 
-+                     -new_pid);
-+              return(new_pid);
-+      }
-+
-+      if(current->thread.forking){
-+              sc_to_sc(UPT_SC(&p->thread.regs.regs), 
-+                       UPT_SC(&current->thread.regs.regs));
-+              SC_SET_SYSCALL_RETURN(UPT_SC(&p->thread.regs.regs), 0);
-+              if(sp != 0) SC_SP(UPT_SC(&p->thread.regs.regs)) = sp;
-+      }
-+      p->thread.mode.tt.extern_pid = new_pid;
-+
-+      current->thread.request.op = OP_FORK;
-+      current->thread.request.u.fork.pid = new_pid;
-+      os_usr1_process(os_getpid());
-+      return(0);
-+}
-+
-+void reboot_tt(void)
-+{
-+      current->thread.request.op = OP_REBOOT;
-+      os_usr1_process(os_getpid());
-+      os_kill_process(os_getpid(), 0);
-+}
-+
-+void halt_tt(void)
-+{
-+      current->thread.request.op = OP_HALT;
-+      os_usr1_process(os_getpid());
-+      os_kill_process(os_getpid(), 0);
-+}
-+
-+void kill_off_processes_tt(void)
-+{
-+      struct task_struct *p;
-+      int me;
-+
-+      me = os_getpid();
-+      for_each_task(p){
-+              int pid = p->thread.mode.tt.extern_pid;
-+              if((pid != me) && (pid != -1))
-+                      os_kill_process(p->thread.mode.tt.extern_pid, 0);
-+      }
-+      if((init_task.thread.mode.tt.extern_pid != me) &&
-+         (init_task.thread.mode.tt.extern_pid != -1))
-+              os_kill_process(init_task.thread.mode.tt.extern_pid, 0);
-+}
-+
-+void initial_thread_cb_tt(void (*proc)(void *), void *arg)
-+{
-+      if(os_getpid() == tracing_pid){
-+              (*proc)(arg);
-+      }
-+      else {
-+              current->thread.request.op = OP_CB;
-+              current->thread.request.u.cb.proc = proc;
-+              current->thread.request.u.cb.arg = arg;
-+              os_usr1_process(os_getpid());
-+      }
-+}
-+
-+int do_proc_op(void *t, int proc_id)
-+{
-+      struct task_struct *task;
-+      struct thread_struct *thread;
-+      int op, pid;
-+
-+      task = t;
-+      thread = &task->thread;
-+      op = thread->request.op;
-+      switch(op){
-+      case OP_NONE:
-+      case OP_TRACE_ON:
-+              break;
-+      case OP_EXEC:
-+              pid = thread->request.u.exec.pid;
-+              do_exec(thread->mode.tt.extern_pid, pid);
-+              thread->mode.tt.extern_pid = pid;
-+              cpu_tasks[task->processor].pid = pid;
-+              break;
-+      case OP_FORK:
-+              attach_process(thread->request.u.fork.pid);
-+              break;
-+      case OP_CB:
-+              (*thread->request.u.cb.proc)(thread->request.u.cb.arg);
-+              break;
-+      case OP_REBOOT:
-+      case OP_HALT:
-+              break;
-+      default:
-+              tracer_panic("Bad op in do_proc_op");
-+              break;
-+      }
-+      thread->request.op = OP_NONE;
-+      return(op);
-+}
-+
-+void init_idle_tt(void)
-+{
-+      idle_timer();
-+}
-+
-+/* Changed by jail_setup, which is a setup */
-+int jail = 0;
-+
-+int __init jail_setup(char *line, int *add)
-+{
-+      int ok = 1;
-+
-+      if(jail) return(0);
-+#ifdef CONFIG_SMP
-+      printf("'jail' may not used used in a kernel with CONFIG_SMP "
-+             "enabled\n");
-+      ok = 0;
-+#endif
-+#ifdef CONFIG_HOSTFS
-+      printf("'jail' may not used used in a kernel with CONFIG_HOSTFS "
-+             "enabled\n");
-+      ok = 0;
-+#endif
-+#ifdef CONFIG_MODULES
-+      printf("'jail' may not used used in a kernel with CONFIG_MODULES "
-+             "enabled\n");
-+      ok = 0;
-+#endif        
-+      if(!ok) exit(1);
-+
-+      /* CAP_SYS_RAWIO controls the ability to open /dev/mem and /dev/kmem.
-+       * Removing it from the bounding set eliminates the ability of anything
-+       * to acquire it, and thus read or write kernel memory.
-+       */
-+      cap_lower(cap_bset, CAP_SYS_RAWIO);
-+      jail = 1;
-+      return(0);
-+}
-+
-+__uml_setup("jail", jail_setup,
-+"jail\n"
-+"    Enables the protection of kernel memory from processes.\n\n"
-+);
-+
-+static void mprotect_kernel_mem(int w)
-+{
-+      unsigned long start, end;
-+      int pages;
-+
-+      if(!jail || (current == &init_task)) return;
-+
-+      pages = (1 << CONFIG_KERNEL_STACK_ORDER);
-+
-+      start = (unsigned long) current + PAGE_SIZE;
-+      end = (unsigned long) current + PAGE_SIZE * pages;
-+      protect_memory(uml_reserved, start - uml_reserved, 1, w, 1, 1);
-+      protect_memory(end, high_physmem - end, 1, w, 1, 1);
-+
-+      start = (unsigned long) UML_ROUND_DOWN(&_stext);
-+      end = (unsigned long) UML_ROUND_UP(&_etext);
-+      protect_memory(start, end - start, 1, w, 1, 1);
-+
-+      start = (unsigned long) UML_ROUND_DOWN(&_unprotected_end);
-+      end = (unsigned long) UML_ROUND_UP(&_edata);
-+      protect_memory(start, end - start, 1, w, 1, 1);
-+
-+      start = (unsigned long) UML_ROUND_DOWN(&__bss_start);
-+      end = (unsigned long) UML_ROUND_UP(brk_start);
-+      protect_memory(start, end - start, 1, w, 1, 1);
-+
-+      mprotect_kernel_vm(w);
-+}
-+
-+void unprotect_kernel_mem(void)
-+{
-+      mprotect_kernel_mem(1);
-+}
-+
-+void protect_kernel_mem(void)
-+{
-+      mprotect_kernel_mem(0);
-+}
-+
-+extern void start_kernel(void);
-+
-+static int start_kernel_proc(void *unused)
-+{
-+      int pid;
-+
-+      block_signals();
-+      pid = os_getpid();
-+
-+      cpu_tasks[0].pid = pid;
-+      cpu_tasks[0].task = current;
-+#ifdef CONFIG_SMP
-+      cpu_online_map = 1;
-+#endif
-+      if(debug) os_stop_process(pid);
-+      start_kernel();
-+      return(0);
-+}
-+
-+void set_tracing(void *task, int tracing)
-+{
-+      ((struct task_struct *) task)->thread.mode.tt.tracing = tracing;
-+}
-+
-+int is_tracing(void *t)
-+{
-+      return (((struct task_struct *) t)->thread.mode.tt.tracing);
-+}
-+
-+int set_user_mode(void *t)
-+{
-+      struct task_struct *task;
-+
-+      task = t ? t : current;
-+      if(task->thread.mode.tt.tracing) 
-+              return(1);
-+      task->thread.request.op = OP_TRACE_ON;
-+      os_usr1_process(os_getpid());
-+      return(0);
-+}
-+
-+void set_init_pid(int pid)
-+{
-+      int err;
-+
-+      init_task.thread.mode.tt.extern_pid = pid;
-+      err = os_pipe(init_task.thread.mode.tt.switch_pipe, 1, 1);
-+      if(err) panic("Can't create switch pipe for init_task, errno = %d", 
-+                    err);
-+}
-+
-+int singlestepping_tt(void *t)
-+{
-+      struct task_struct *task = t;
-+
-+      if(task->thread.mode.tt.singlestep_syscall)
-+              return(0);
-+      return(task->ptrace & PT_DTRACE);
-+}
-+
-+void clear_singlestep(void *t)
-+{
-+      struct task_struct *task = t;
-+
-+      task->ptrace &= ~PT_DTRACE;
-+}
-+
-+int start_uml_tt(void)
-+{
-+      void *sp;
-+      int pages;
-+
-+      pages = (1 << CONFIG_KERNEL_STACK_ORDER) - 2;
-+      sp = (void *) init_task.thread.kernel_stack + pages * PAGE_SIZE - 
-+              sizeof(unsigned long);
-+      return(tracer(start_kernel_proc, sp));
-+}
-+
-+int external_pid_tt(struct task_struct *task)
-+{
-+      return(task->thread.mode.tt.extern_pid);
-+}
-+
-+int thread_pid_tt(struct thread_struct *thread)
-+{
-+      return(thread->mode.tt.extern_pid);
-+}
-+
-+int is_valid_pid(int pid)
-+{
-+      struct task_struct *task;
-+
-+        read_lock(&tasklist_lock);
-+        for_each_task(task){
-+                if(task->thread.mode.tt.extern_pid == pid){
-+                      read_unlock(&tasklist_lock);
-+                      return(1);
-+                }
-+        }
-+      read_unlock(&tasklist_lock);
-+      return(0);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/ptproxy/Makefile um/arch/um/kernel/tt/ptproxy/Makefile
---- orig/arch/um/kernel/tt/ptproxy/Makefile    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/ptproxy/Makefile      2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,12 @@
-+O_TARGET = ptproxy.o
-+
-+obj-y = proxy.o ptrace.o sysdep.o wait.o
-+
-+USER_OBJS = $(obj-y)
-+
-+include $(TOPDIR)/Rules.make
-+
-+$(USER_OBJS) : %.o: %.c
-+      $(CC) $(CFLAGS_$@) $(USER_CFLAGS) -c -o $@ $<
-+
-+clean:
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/ptproxy/proxy.c um/arch/um/kernel/tt/ptproxy/proxy.c
---- orig/arch/um/kernel/tt/ptproxy/proxy.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/ptproxy/proxy.c       2003-04-16 14:01:03.000000000 -0400
-@@ -0,0 +1,370 @@
-+/**********************************************************************
-+proxy.c
-+
-+Copyright (C) 1999 Lars Brinkhoff.  See the file COPYING for licensing
-+terms and conditions.
-+
-+Jeff Dike (jdike@karaya.com) : Modified for integration into uml
-+**********************************************************************/
-+
-+/* XXX This file shouldn't refer to CONFIG_* */
-+
-+#include <errno.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <signal.h>
-+#include <string.h>
-+#include <fcntl.h>
-+#include <termios.h>
-+#include <sys/wait.h>
-+#include <sys/types.h>
-+#include <sys/ptrace.h>
-+#include <sys/ioctl.h>
-+#include <asm/unistd.h>
-+
-+#include "ptproxy.h"
-+#include "sysdep.h"
-+#include "wait.h"
-+
-+#include "user_util.h"
-+#include "user.h"
-+#include "os.h"
-+#include "tempfile.h"
-+
-+static int debugger_wait(debugger_state *debugger, int *status, int options,
-+                       int (*syscall)(debugger_state *debugger, pid_t child),
-+                       int (*normal_return)(debugger_state *debugger, 
-+                                            pid_t unused),
-+                       int (*wait_return)(debugger_state *debugger, 
-+                                          pid_t unused))
-+{
-+      if(debugger->real_wait){
-+              debugger->handle_trace = normal_return;
-+              syscall_continue(debugger->pid);
-+              debugger->real_wait = 0;
-+              return(1);
-+      }
-+      debugger->wait_status_ptr = status;
-+      debugger->wait_options = options;
-+      if((debugger->debugee != NULL) && debugger->debugee->event){
-+              syscall_continue(debugger->pid);
-+              wait_for_stop(debugger->pid, SIGTRAP, PTRACE_SYSCALL,
-+                            NULL);
-+              (*wait_return)(debugger, -1);
-+              return(0);
-+      }
-+      else if(debugger->wait_options & WNOHANG){
-+              syscall_cancel(debugger->pid, 0);
-+              debugger->handle_trace = syscall;
-+              return(0);
-+      }
-+      else {
-+              syscall_pause(debugger->pid);
-+              debugger->handle_trace = wait_return;
-+              debugger->waiting = 1;
-+      }
-+      return(1);
-+}
-+
-+/*
-+ * Handle debugger trap, i.e. syscall.
-+ */
-+
-+int debugger_syscall(debugger_state *debugger, pid_t child)
-+{
-+      long arg1, arg2, arg3, arg4, arg5, result;
-+      int syscall, ret = 0;
-+
-+      syscall = get_syscall(debugger->pid, &arg1, &arg2, &arg3, &arg4, 
-+                            &arg5);
-+
-+      switch(syscall){
-+      case __NR_execve:
-+              /* execve never returns */
-+              debugger->handle_trace = debugger_syscall; 
-+              break;
-+
-+      case __NR_ptrace:
-+              if(debugger->debugee->pid != 0) arg2 = debugger->debugee->pid;
-+              if(!debugger->debugee->in_context) 
-+                      child = debugger->debugee->pid;
-+              result = proxy_ptrace(debugger, arg1, arg2, arg3, arg4, child,
-+                                    &ret);
-+              syscall_cancel(debugger->pid, result);
-+              debugger->handle_trace = debugger_syscall;
-+              return(ret);
-+
-+      case __NR_waitpid:
-+      case __NR_wait4:
-+              if(!debugger_wait(debugger, (int *) arg2, arg3, 
-+                                debugger_syscall, debugger_normal_return, 
-+                                proxy_wait_return))
-+                      return(0);
-+              break;
-+
-+      case __NR_kill:
-+              if(!debugger->debugee->in_context) 
-+                      child = debugger->debugee->pid;
-+              if(arg1 == debugger->debugee->pid){
-+                      result = kill(child, arg2);
-+                      syscall_cancel(debugger->pid, result);
-+                      debugger->handle_trace = debugger_syscall;
-+                      return(0);
-+              }
-+              else debugger->handle_trace = debugger_normal_return;
-+              break;
-+
-+      default:
-+              debugger->handle_trace = debugger_normal_return;
-+      }
-+
-+      syscall_continue(debugger->pid);
-+      return(0);
-+}
-+
-+/* Used by the tracing thread */
-+static debugger_state parent;
-+static int parent_syscall(debugger_state *debugger, int pid);
-+
-+int init_parent_proxy(int pid)
-+{
-+      parent = ((debugger_state) { .pid               = pid,
-+                                   .wait_options      = 0,
-+                                   .wait_status_ptr   = NULL,
-+                                   .waiting           = 0,
-+                                   .real_wait         = 0,
-+                                   .expecting_child   = 0,
-+                                   .handle_trace      = parent_syscall,
-+                                   .debugee           = NULL } );
-+      return(0);
-+}
-+
-+int parent_normal_return(debugger_state *debugger, pid_t unused)
-+{
-+      debugger->handle_trace = parent_syscall;
-+      syscall_continue(debugger->pid);
-+      return(0);
-+}
-+
-+static int parent_syscall(debugger_state *debugger, int pid)
-+{
-+      long arg1, arg2, arg3, arg4, arg5;
-+      int syscall;
-+
-+      syscall = get_syscall(pid, &arg1, &arg2, &arg3, &arg4, &arg5);
-+              
-+      if((syscall == __NR_waitpid) || (syscall == __NR_wait4)){
-+              debugger_wait(&parent, (int *) arg2, arg3, parent_syscall,
-+                            parent_normal_return, parent_wait_return);
-+      }
-+      else ptrace(PTRACE_SYSCALL, pid, 0, 0);
-+      return(0);
-+}
-+
-+int debugger_normal_return(debugger_state *debugger, pid_t unused)
-+{
-+      debugger->handle_trace = debugger_syscall;
-+      syscall_continue(debugger->pid);
-+      return(0);
-+}
-+
-+void debugger_cancelled_return(debugger_state *debugger, int result)
-+{
-+      debugger->handle_trace = debugger_syscall;
-+      syscall_set_result(debugger->pid, result);
-+      syscall_continue(debugger->pid);
-+}
-+
-+/* Used by the tracing thread */
-+static debugger_state debugger;
-+static debugee_state debugee;
-+
-+void init_proxy (pid_t debugger_pid, int stopped, int status)
-+{
-+      debugger.pid = debugger_pid;
-+      debugger.handle_trace = debugger_syscall;
-+      debugger.debugee = &debugee;
-+      debugger.waiting = 0;
-+      debugger.real_wait = 0;
-+      debugger.expecting_child = 0;
-+
-+      debugee.pid = 0;
-+      debugee.traced = 0;
-+      debugee.stopped = stopped;
-+      debugee.event = 0;
-+      debugee.zombie = 0;
-+      debugee.died = 0;
-+      debugee.wait_status = status;
-+      debugee.in_context = 1;
-+}
-+
-+int debugger_proxy(int status, int pid)
-+{
-+      int ret = 0, sig;
-+
-+      if(WIFSTOPPED(status)){
-+              sig = WSTOPSIG(status);
-+              if (sig == SIGTRAP)
-+                      ret = (*debugger.handle_trace)(&debugger, pid);
-+                                                     
-+              else if(sig == SIGCHLD){
-+                      if(debugger.expecting_child){
-+                              ptrace(PTRACE_SYSCALL, debugger.pid, 0, sig);
-+                              debugger.expecting_child = 0;
-+                      }
-+                      else if(debugger.waiting)
-+                              real_wait_return(&debugger);
-+                      else {
-+                              ptrace(PTRACE_SYSCALL, debugger.pid, 0, sig);
-+                              debugger.real_wait = 1;
-+                      }
-+              }
-+              else ptrace(PTRACE_SYSCALL, debugger.pid, 0, sig);
-+      }
-+      else if(WIFEXITED(status)){
-+              tracer_panic("debugger (pid %d) exited with status %d", 
-+                           debugger.pid, WEXITSTATUS(status));
-+      }
-+      else if(WIFSIGNALED(status)){
-+              tracer_panic("debugger (pid %d) exited with signal %d", 
-+                           debugger.pid, WTERMSIG(status));
-+      }
-+      else {
-+              tracer_panic("proxy got unknown status (0x%x) on debugger "
-+                           "(pid %d)", status, debugger.pid);
-+      }
-+      return(ret);
-+}
-+
-+void child_proxy(pid_t pid, int status)
-+{
-+      debugee.event = 1;
-+      debugee.wait_status = status;
-+
-+      if(WIFSTOPPED(status)){
-+              debugee.stopped = 1;
-+              debugger.expecting_child = 1;
-+              kill(debugger.pid, SIGCHLD);
-+      }
-+      else if(WIFEXITED(status) || WIFSIGNALED(status)){
-+              debugee.zombie = 1;
-+              debugger.expecting_child = 1;
-+              kill(debugger.pid, SIGCHLD);
-+      }
-+      else panic("proxy got unknown status (0x%x) on child (pid %d)", 
-+                 status, pid);
-+}
-+
-+void debugger_parent_signal(int status, int pid)
-+{
-+      int sig;
-+
-+      if(WIFSTOPPED(status)){
-+              sig = WSTOPSIG(status);
-+              if(sig == SIGTRAP) (*parent.handle_trace)(&parent, pid);
-+              else ptrace(PTRACE_SYSCALL, pid, 0, sig);
-+      }
-+}
-+
-+void fake_child_exit(void)
-+{
-+      int status, pid;
-+
-+      child_proxy(1, W_EXITCODE(0, 0));
-+      while(debugger.waiting == 1){
-+              pid = waitpid(debugger.pid, &status, WUNTRACED);
-+              if(pid != debugger.pid){
-+                      printk("fake_child_exit - waitpid failed, "
-+                             "errno = %d\n", errno);
-+                      return;
-+              }
-+              debugger_proxy(status, debugger.pid);
-+      }
-+      pid = waitpid(debugger.pid, &status, WUNTRACED);
-+      if(pid != debugger.pid){
-+              printk("fake_child_exit - waitpid failed, "
-+                     "errno = %d\n", errno);
-+              return;
-+      }
-+      if(ptrace(PTRACE_DETACH, debugger.pid, 0, SIGCONT) < 0)
-+              printk("fake_child_exit - PTRACE_DETACH failed, errno = %d\n",
-+                     errno);
-+}
-+
-+char gdb_init_string[] = 
-+"att 1 \n\
-+b panic \n\
-+b stop \n\
-+handle SIGWINCH nostop noprint pass \n\
-+";
-+
-+int start_debugger(char *prog, int startup, int stop, int *fd_out)
-+{
-+      int slave, child;
-+
-+      slave = open_gdb_chan();
-+      if((child = fork()) == 0){
-+              char *tempname = NULL;
-+              int fd;
-+
-+              if(setsid() < 0) perror("setsid");
-+              if((dup2(slave, 0) < 0) || (dup2(slave, 1) < 0) || 
-+                 (dup2(slave, 2) < 0)){
-+                      printk("start_debugger : dup2 failed, errno = %d\n",
-+                             errno);
-+                      exit(1);
-+              }
-+              if(ioctl(0, TIOCSCTTY, 0) < 0){
-+                      printk("start_debugger : TIOCSCTTY failed, "
-+                             "errno = %d\n", errno);
-+                      exit(1);
-+              }
-+              if(tcsetpgrp (1, os_getpid()) < 0){
-+                      printk("start_debugger : tcsetpgrp failed, "
-+                             "errno = %d\n", errno);
-+#ifdef notdef
-+                      exit(1);
-+#endif
-+              }
-+              if((fd = make_tempfile("/tmp/gdb_init-XXXXXX", &tempname, 0)) < 0){
-+                      printk("start_debugger : make_tempfile failed, errno = %d\n",
-+                             errno);
-+                      exit(1);
-+              }
-+              write(fd, gdb_init_string, sizeof(gdb_init_string) - 1);
-+              if(startup){
-+                      if(stop){
-+                              write(fd, "b start_kernel\n",
-+                                    strlen("b start_kernel\n"));
-+                      }
-+                      write(fd, "c\n", strlen("c\n"));
-+              }
-+              if(ptrace(PTRACE_TRACEME, 0, 0, 0) < 0){
-+                      printk("start_debugger :  PTRACE_TRACEME failed, "
-+                             "errno = %d\n", errno);
-+                      exit(1);
-+              }
-+              execlp("gdb", "gdb", "--command", tempname, prog, NULL);
-+              printk("start_debugger : exec of gdb failed, errno = %d\n",
-+                     errno);
-+      }
-+      if(child < 0){
-+              printk("start_debugger : fork for gdb failed, errno = %d\n",
-+                     errno);
-+              return(-1);
-+      }
-+      *fd_out = slave;
-+      return(child);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/ptproxy/ptproxy.h um/arch/um/kernel/tt/ptproxy/ptproxy.h
---- orig/arch/um/kernel/tt/ptproxy/ptproxy.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/ptproxy/ptproxy.h     2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,61 @@
-+/**********************************************************************
-+ptproxy.h
-+
-+Copyright (C) 1999 Lars Brinkhoff.  See the file COPYING for licensing
-+terms and conditions.
-+**********************************************************************/
-+
-+#ifndef __PTPROXY_H
-+#define __PTPROXY_H
-+
-+#include <sys/types.h>
-+
-+typedef struct debugger debugger_state;
-+typedef struct debugee debugee_state;
-+
-+struct debugger
-+{
-+      pid_t pid;
-+      int wait_options;
-+      int *wait_status_ptr;
-+      unsigned int waiting : 1;
-+      unsigned int real_wait : 1;
-+      unsigned int expecting_child : 1;
-+      int (*handle_trace) (debugger_state *, pid_t);
-+
-+      debugee_state *debugee;
-+};
-+
-+struct debugee
-+{
-+      pid_t pid;
-+      int wait_status;
-+      unsigned int died : 1;
-+      unsigned int event : 1;
-+      unsigned int stopped : 1;
-+      unsigned int trace_singlestep : 1;
-+      unsigned int trace_syscall : 1;
-+      unsigned int traced : 1;
-+      unsigned int zombie : 1;
-+      unsigned int in_context : 1;
-+};
-+
-+extern int debugger_syscall(debugger_state *debugger, pid_t pid);
-+extern int debugger_normal_return (debugger_state *debugger, pid_t unused);
-+
-+extern long proxy_ptrace (struct debugger *, int, pid_t, long, long, pid_t,
-+                        int *strace_out);
-+extern void debugger_cancelled_return(debugger_state *debugger, int result);
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/ptproxy/ptrace.c um/arch/um/kernel/tt/ptproxy/ptrace.c
---- orig/arch/um/kernel/tt/ptproxy/ptrace.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/ptproxy/ptrace.c      2002-11-11 13:06:03.000000000 -0500
-@@ -0,0 +1,239 @@
-+/**********************************************************************
-+ptrace.c
-+
-+Copyright (C) 1999 Lars Brinkhoff.  See the file COPYING for licensing
-+terms and conditions.
-+
-+Jeff Dike (jdike@karaya.com) : Modified for integration into uml
-+**********************************************************************/
-+
-+#include <errno.h>
-+#include <unistd.h>
-+#include <signal.h>
-+#include <sys/types.h>
-+#include <sys/time.h>
-+#include <sys/ptrace.h>
-+#include <sys/wait.h>
-+#include <asm/ptrace.h>
-+
-+#include "ptproxy.h"
-+#include "debug.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "ptrace_user.h"
-+#include "tt.h"
-+
-+long proxy_ptrace(struct debugger *debugger, int arg1, pid_t arg2,
-+                long arg3, long arg4, pid_t child, int *ret)
-+{
-+      sigset_t relay;
-+      long result;
-+      int status;
-+
-+      *ret = 0;
-+      if(debugger->debugee->died) return(-ESRCH);
-+
-+      switch(arg1){
-+      case PTRACE_ATTACH:
-+              if(debugger->debugee->traced) return(-EPERM);
-+
-+              debugger->debugee->pid = arg2;
-+              debugger->debugee->traced = 1;
-+
-+              if(is_valid_pid(arg2) && (arg2 != child)){
-+                      debugger->debugee->in_context = 0;
-+                      kill(arg2, SIGSTOP);
-+                      debugger->debugee->event = 1;
-+                      debugger->debugee->wait_status = W_STOPCODE(SIGSTOP);
-+              }
-+              else {
-+                      debugger->debugee->in_context = 1;
-+                      if(debugger->debugee->stopped) 
-+                              child_proxy(child, W_STOPCODE(SIGSTOP));
-+                      else kill(child, SIGSTOP);
-+              }
-+
-+              return(0);
-+
-+      case PTRACE_DETACH:
-+              if(!debugger->debugee->traced) return(-EPERM);
-+              
-+              debugger->debugee->traced = 0;
-+              debugger->debugee->pid = 0;
-+              if(!debugger->debugee->in_context)
-+                      kill(child, SIGCONT);
-+
-+              return(0);
-+
-+      case PTRACE_CONT:
-+              if(!debugger->debugee->in_context) return(-EPERM);
-+              *ret = PTRACE_CONT;
-+              return(ptrace(PTRACE_CONT, child, arg3, arg4));
-+
-+#ifdef UM_HAVE_GETFPREGS
-+      case PTRACE_GETFPREGS:
-+      {
-+              long regs[FP_FRAME_SIZE];
-+              int i, result;
-+
-+              result = ptrace(PTRACE_GETFPREGS, child, 0, regs);
-+              if(result == -1) return(-errno);
-+              
-+              for (i = 0; i < sizeof(regs)/sizeof(regs[0]); i++)
-+                      ptrace(PTRACE_POKEDATA, debugger->pid, arg4 + 4 * i,
-+                             regs[i]);
-+              return(result);
-+      }
-+#endif
-+
-+#ifdef UM_HAVE_GETFPXREGS
-+      case PTRACE_GETFPXREGS:
-+      {
-+              long regs[FPX_FRAME_SIZE];
-+              int i, result;
-+
-+              result = ptrace(PTRACE_GETFPXREGS, child, 0, regs);
-+              if(result == -1) return(-errno);
-+              
-+              for (i = 0; i < sizeof(regs)/sizeof(regs[0]); i++)
-+                      ptrace(PTRACE_POKEDATA, debugger->pid, arg4 + 4 * i,
-+                             regs[i]);
-+              return(result);
-+      }
-+#endif
-+
-+#ifdef UM_HAVE_GETREGS
-+      case PTRACE_GETREGS:
-+      {
-+              long regs[FRAME_SIZE];
-+              int i, result;
-+
-+              result = ptrace(PTRACE_GETREGS, child, 0, regs);
-+              if(result == -1) return(-errno);
-+
-+              for (i = 0; i < sizeof(regs)/sizeof(regs[0]); i++)
-+                      ptrace (PTRACE_POKEDATA, debugger->pid,
-+                              arg4 + 4 * i, regs[i]);
-+              return(result);
-+      }
-+      break;
-+#endif
-+
-+      case PTRACE_KILL:
-+              result = ptrace(PTRACE_KILL, child, arg3, arg4);
-+              if(result == -1) return(-errno);
-+
-+              return(result);
-+
-+      case PTRACE_PEEKDATA:
-+      case PTRACE_PEEKTEXT:
-+      case PTRACE_PEEKUSER:
-+              /* The value being read out could be -1, so we have to 
-+               * check errno to see if there's an error, and zero it
-+               * beforehand so we're not faked out by an old error
-+               */
-+
-+              errno = 0;
-+              result = ptrace(arg1, child, arg3, 0);
-+              if((result == -1) && (errno != 0)) return(-errno);
-+
-+              result = ptrace(PTRACE_POKEDATA, debugger->pid, arg4, result);
-+              if(result == -1) return(-errno);
-+                      
-+              return(result);
-+
-+      case PTRACE_POKEDATA:
-+      case PTRACE_POKETEXT:
-+      case PTRACE_POKEUSER:
-+              result = ptrace(arg1, child, arg3, arg4);
-+              if(result == -1) return(-errno);
-+
-+              if(arg1 == PTRACE_POKEUSER) ptrace_pokeuser(arg3, arg4);
-+              return(result);
-+
-+#ifdef UM_HAVE_SETFPREGS
-+      case PTRACE_SETFPREGS:
-+      {
-+              long regs[FP_FRAME_SIZE];
-+              int i;
-+
-+              for (i = 0; i < sizeof(regs)/sizeof(regs[0]); i++)
-+                      regs[i] = ptrace (PTRACE_PEEKDATA, debugger->pid,
-+                                        arg4 + 4 * i, 0);
-+              result = ptrace(PTRACE_SETFPREGS, child, 0, regs);
-+              if(result == -1) return(-errno);
-+
-+              return(result);
-+      }
-+#endif
-+
-+#ifdef UM_HAVE_SETFPXREGS
-+      case PTRACE_SETFPXREGS:
-+      {
-+              long regs[FPX_FRAME_SIZE];
-+              int i;
-+
-+              for (i = 0; i < sizeof(regs)/sizeof(regs[0]); i++)
-+                      regs[i] = ptrace (PTRACE_PEEKDATA, debugger->pid,
-+                                        arg4 + 4 * i, 0);
-+              result = ptrace(PTRACE_SETFPXREGS, child, 0, regs);
-+              if(result == -1) return(-errno);
-+
-+              return(result);
-+      }
-+#endif
-+
-+#ifdef UM_HAVE_SETREGS
-+      case PTRACE_SETREGS:
-+      {
-+              long regs[FRAME_SIZE];
-+              int i;
-+
-+              for (i = 0; i < sizeof(regs)/sizeof(regs[0]); i++)
-+                      regs[i] = ptrace(PTRACE_PEEKDATA, debugger->pid,
-+                                       arg4 + 4 * i, 0);
-+              result = ptrace(PTRACE_SETREGS, child, 0, regs);
-+              if(result == -1) return(-errno);
-+
-+              return(result);
-+      }
-+#endif
-+
-+      case PTRACE_SINGLESTEP:
-+              if(!debugger->debugee->in_context) return(-EPERM);
-+              sigemptyset(&relay);
-+              sigaddset(&relay, SIGSEGV);
-+              sigaddset(&relay, SIGILL);
-+              sigaddset(&relay, SIGBUS);
-+              result = ptrace(PTRACE_SINGLESTEP, child, arg3, arg4);
-+              if(result == -1) return(-errno);
-+              
-+              status = wait_for_stop(child, SIGTRAP, PTRACE_SINGLESTEP,
-+                                     &relay);
-+              child_proxy(child, status);
-+              return(result);
-+
-+      case PTRACE_SYSCALL:
-+              if(!debugger->debugee->in_context) return(-EPERM);
-+              result = ptrace(PTRACE_SYSCALL, child, arg3, arg4);
-+              if(result == -1) return(-errno);
-+
-+              *ret = PTRACE_SYSCALL;
-+              return(result);
-+
-+      case PTRACE_TRACEME:
-+      default:
-+              return(-EINVAL);
-+      }
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/ptproxy/sysdep.c um/arch/um/kernel/tt/ptproxy/sysdep.c
---- orig/arch/um/kernel/tt/ptproxy/sysdep.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/ptproxy/sysdep.c      2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,71 @@
-+/**********************************************************************
-+sysdep.c
-+
-+Copyright (C) 1999 Lars Brinkhoff.  See the file COPYING for licensing
-+terms and conditions.
-+**********************************************************************/
-+
-+#include <stdio.h>
-+#include <string.h>
-+#include <stdlib.h>
-+#include <signal.h>
-+#include <sys/types.h>
-+#include <sys/ptrace.h>
-+#include <asm/ptrace.h>
-+#include <linux/unistd.h>
-+#include "ptrace_user.h"
-+#include "user_util.h"
-+#include "user.h"
-+
-+int get_syscall(pid_t pid, long *arg1, long *arg2, long *arg3, long *arg4, 
-+              long *arg5)
-+{
-+      *arg1 = ptrace(PTRACE_PEEKUSER, pid, PT_SYSCALL_ARG1_OFFSET, 0);
-+      *arg2 = ptrace(PTRACE_PEEKUSER, pid, PT_SYSCALL_ARG2_OFFSET, 0);
-+      *arg3 = ptrace(PTRACE_PEEKUSER, pid, PT_SYSCALL_ARG3_OFFSET, 0);
-+      *arg4 = ptrace(PTRACE_PEEKUSER, pid, PT_SYSCALL_ARG4_OFFSET, 0);
-+      *arg5 = ptrace(PTRACE_PEEKUSER, pid, PT_SYSCALL_ARG5_OFFSET, 0);
-+      return(ptrace(PTRACE_PEEKUSER, pid, PT_SYSCALL_NR_OFFSET, 0));
-+}
-+
-+void syscall_cancel(pid_t pid, int result)
-+{
-+      if((ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_NR_OFFSET, 
-+                 __NR_getpid) < 0) ||
-+         (ptrace(PTRACE_SYSCALL, pid, 0, 0) < 0) ||
-+         (wait_for_stop(pid, SIGTRAP, PTRACE_SYSCALL, NULL) < 0) ||
-+         (ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_RET_OFFSET, result) < 0) ||
-+         (ptrace(PTRACE_SYSCALL, pid, 0, 0) < 0))
-+              printk("ptproxy: couldn't cancel syscall: errno = %d\n", 
-+                     errno);
-+}
-+
-+void syscall_set_result(pid_t pid, long result)
-+{
-+      ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_RET_OFFSET, result);
-+}
-+
-+void syscall_continue(pid_t pid)
-+{
-+      ptrace(PTRACE_SYSCALL, pid, 0, 0);
-+}
-+
-+int syscall_pause(pid_t pid) 
-+{
-+      if(ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_NR_OFFSET, __NR_pause) < 0){
-+              printk("syscall_change - ptrace failed, errno = %d\n", errno);
-+              return(-1);
-+      }
-+      return(0);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/ptproxy/sysdep.h um/arch/um/kernel/tt/ptproxy/sysdep.h
---- orig/arch/um/kernel/tt/ptproxy/sysdep.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/ptproxy/sysdep.h      2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,25 @@
-+/**********************************************************************
-+sysdep.h
-+
-+Copyright (C) 1999 Lars Brinkhoff.
-+Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+See the file COPYING for licensing terms and conditions.
-+**********************************************************************/
-+
-+extern int get_syscall(pid_t pid, long *arg1, long *arg2, long *arg3, 
-+                     long *arg4, long *arg5);
-+extern void syscall_cancel (pid_t pid, long result);
-+extern void syscall_set_result (pid_t pid, long result);
-+extern void syscall_continue (pid_t pid);
-+extern int syscall_pause(pid_t pid);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/ptproxy/wait.c um/arch/um/kernel/tt/ptproxy/wait.c
---- orig/arch/um/kernel/tt/ptproxy/wait.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/ptproxy/wait.c        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,86 @@
-+/**********************************************************************
-+wait.c
-+
-+Copyright (C) 1999 Lars Brinkhoff.  See the file COPYING for licensing
-+terms and conditions.
-+
-+**********************************************************************/
-+
-+#include <errno.h>
-+#include <signal.h>
-+#include <sys/wait.h>
-+#include <sys/ptrace.h>
-+#include <asm/ptrace.h>
-+
-+#include "ptproxy.h"
-+#include "sysdep.h"
-+#include "wait.h"
-+#include "user_util.h"
-+#include "sysdep/ptrace.h"
-+#include "sysdep/ptrace_user.h"
-+#include "sysdep/sigcontext.h"
-+
-+int proxy_wait_return(struct debugger *debugger, pid_t unused)
-+{
-+      debugger->waiting = 0;
-+
-+      if(debugger->debugee->died || (debugger->wait_options & __WCLONE)){
-+              debugger_cancelled_return(debugger, -ECHILD);
-+              return(0);
-+      }
-+
-+      if(debugger->debugee->zombie && debugger->debugee->event)
-+              debugger->debugee->died = 1;
-+
-+      if(debugger->debugee->event){
-+              debugger->debugee->event = 0;
-+              ptrace(PTRACE_POKEDATA, debugger->pid,
-+                     debugger->wait_status_ptr, 
-+                     debugger->debugee->wait_status);
-+              /* if (wait4)
-+                 ptrace (PTRACE_POKEDATA, pid, rusage_ptr, ...); */
-+              debugger_cancelled_return(debugger, debugger->debugee->pid);
-+              return(0);
-+      }
-+
-+      /* pause will return -EINTR, which happens to be right for wait */
-+      debugger_normal_return(debugger, -1);
-+      return(0);
-+}
-+
-+int parent_wait_return(struct debugger *debugger, pid_t unused)
-+{
-+      return(debugger_normal_return(debugger, -1));
-+}
-+
-+int real_wait_return(struct debugger *debugger)
-+{
-+      unsigned long ip;
-+      int err, pid;
-+
-+      pid = debugger->pid;
-+      ip = ptrace(PTRACE_PEEKUSER, pid, PT_IP_OFFSET, 0);
-+      ip = IP_RESTART_SYSCALL(ip);
-+      err = ptrace(PTRACE_POKEUSER, pid, PT_IP_OFFSET, ip);
-+      if(ptrace(PTRACE_POKEUSER, pid, PT_IP_OFFSET, ip) < 0)
-+              tracer_panic("real_wait_return : Failed to restart system "
-+                           "call, errno = %d\n");
-+      if((ptrace(PTRACE_SYSCALL, debugger->pid, 0, SIGCHLD) < 0) ||
-+         (ptrace(PTRACE_SYSCALL, debugger->pid, 0, 0) < 0) ||
-+         (ptrace(PTRACE_SYSCALL, debugger->pid, 0, 0) < 0) ||
-+         debugger_normal_return(debugger, -1))
-+              tracer_panic("real_wait_return : gdb failed to wait, "
-+                           "errno = %d\n");
-+      return(0);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/ptproxy/wait.h um/arch/um/kernel/tt/ptproxy/wait.h
---- orig/arch/um/kernel/tt/ptproxy/wait.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/ptproxy/wait.h        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,15 @@
-+/**********************************************************************
-+wait.h
-+
-+Copyright (C) 1999 Lars Brinkhoff.  See the file COPYING for licensing
-+terms and conditions.
-+**********************************************************************/
-+
-+#ifndef __PTPROXY_WAIT_H
-+#define __PTPROXY_WAIT_H
-+
-+extern int proxy_wait_return(struct debugger *debugger, pid_t unused);
-+extern int real_wait_return(struct debugger *debugger);
-+extern int parent_wait_return(struct debugger *debugger, pid_t unused);
-+
-+#endif
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/syscall_kern.c um/arch/um/kernel/tt/syscall_kern.c
---- orig/arch/um/kernel/tt/syscall_kern.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/syscall_kern.c        2002-12-08 19:32:53.000000000 -0500
-@@ -0,0 +1,142 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/types.h"
-+#include "linux/utime.h"
-+#include "linux/sys.h"
-+#include "asm/unistd.h"
-+#include "asm/ptrace.h"
-+#include "asm/uaccess.h"
-+#include "sysdep/syscalls.h"
-+#include "kern_util.h"
-+
-+static inline int check_area(void *ptr, int size)
-+{
-+      return(verify_area(VERIFY_WRITE, ptr, size));
-+}
-+
-+static int check_readlink(struct pt_regs *regs)
-+{
-+      return(check_area((void *) UPT_SYSCALL_ARG1(&regs->regs),
-+                        UPT_SYSCALL_ARG2(&regs->regs)));
-+}
-+
-+static int check_utime(struct pt_regs *regs)
-+{
-+      return(check_area((void *) UPT_SYSCALL_ARG1(&regs->regs),
-+                        sizeof(struct utimbuf)));
-+}
-+
-+static int check_oldstat(struct pt_regs *regs)
-+{
-+      return(check_area((void *) UPT_SYSCALL_ARG1(&regs->regs), 
-+                        sizeof(struct __old_kernel_stat)));
-+}
-+
-+static int check_stat(struct pt_regs *regs)
-+{
-+      return(check_area((void *) UPT_SYSCALL_ARG1(&regs->regs), 
-+                        sizeof(struct stat)));
-+}
-+
-+static int check_stat64(struct pt_regs *regs)
-+{
-+      return(check_area((void *) UPT_SYSCALL_ARG1(&regs->regs), 
-+                        sizeof(struct stat64)));
-+}
-+
-+struct bogus {
-+      int kernel_ds;
-+      int (*check_params)(struct pt_regs *);
-+};
-+
-+struct bogus this_is_bogus[256] = {
-+      [ __NR_mknod ] = { 1, NULL },
-+      [ __NR_mkdir ] = { 1, NULL },
-+      [ __NR_rmdir ] = { 1, NULL },
-+      [ __NR_unlink ] = { 1, NULL },
-+      [ __NR_symlink ] = { 1, NULL },
-+      [ __NR_link ] = { 1, NULL },
-+      [ __NR_rename ] = { 1, NULL },
-+      [ __NR_umount ] = { 1, NULL },
-+      [ __NR_mount ] = { 1, NULL },
-+      [ __NR_pivot_root ] = { 1, NULL },
-+      [ __NR_chdir ] = { 1, NULL },
-+      [ __NR_chroot ] = { 1, NULL },
-+      [ __NR_open ] = { 1, NULL },
-+      [ __NR_quotactl ] = { 1, NULL },
-+      [ __NR_sysfs ] = { 1, NULL },
-+      [ __NR_readlink ] = { 1, check_readlink },
-+      [ __NR_acct ] = { 1, NULL },
-+      [ __NR_execve ] = { 1, NULL },
-+      [ __NR_uselib ] = { 1, NULL },
-+      [ __NR_statfs ] = { 1, NULL },
-+      [ __NR_truncate ] = { 1, NULL },
-+      [ __NR_access ] = { 1, NULL },
-+      [ __NR_chmod ] = { 1, NULL },
-+      [ __NR_chown ] = { 1, NULL },
-+      [ __NR_lchown ] = { 1, NULL },
-+      [ __NR_utime ] = { 1, check_utime },
-+      [ __NR_oldlstat ] = { 1, check_oldstat },
-+      [ __NR_oldstat ] = { 1, check_oldstat },
-+      [ __NR_stat ] = { 1, check_stat },
-+      [ __NR_lstat ] = { 1, check_stat },
-+      [ __NR_stat64 ] = { 1, check_stat64 },
-+      [ __NR_lstat64 ] = { 1, check_stat64 },
-+      [ __NR_chown32 ] = { 1, NULL },
-+};
-+
-+/* sys_utimes */
-+
-+static int check_bogosity(struct pt_regs *regs)
-+{
-+      struct bogus *bogon = &this_is_bogus[UPT_SYSCALL_NR(&regs->regs)];
-+
-+      if(!bogon->kernel_ds) return(0);
-+      if(bogon->check_params && (*bogon->check_params)(regs))
-+              return(-EFAULT);
-+      set_fs(KERNEL_DS);
-+      return(0);
-+}
-+
-+extern syscall_handler_t *sys_call_table[];
-+
-+long execute_syscall_tt(void *r)
-+{
-+      struct pt_regs *regs = r;
-+      long res;
-+      int syscall;
-+
-+      current->thread.nsyscalls++;
-+      nsyscalls++;
-+      syscall = UPT_SYSCALL_NR(&regs->regs);
-+
-+      if((syscall >= NR_syscalls) || (syscall < 0))
-+              res = -ENOSYS;
-+      else if(honeypot && check_bogosity(regs))
-+              res = -EFAULT;
-+      else res = EXECUTE_SYSCALL(syscall, regs);
-+
-+      set_fs(USER_DS);
-+
-+      if(current->thread.mode.tt.singlestep_syscall){
-+              current->thread.mode.tt.singlestep_syscall = 0;
-+              current->ptrace &= ~PT_DTRACE;
-+              force_sig(SIGTRAP, current);
-+      }
-+
-+      return(res);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/syscall_user.c um/arch/um/kernel/tt/syscall_user.c
---- orig/arch/um/kernel/tt/syscall_user.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/syscall_user.c        2002-12-08 21:00:11.000000000 -0500
-@@ -0,0 +1,89 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <unistd.h>
-+#include <signal.h>
-+#include <errno.h>
-+#include <sys/ptrace.h>
-+#include <asm/unistd.h>
-+#include "sysdep/ptrace.h"
-+#include "sigcontext.h"
-+#include "ptrace_user.h"
-+#include "task.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "syscall_user.h"
-+#include "tt.h"
-+
-+/* XXX Bogus */
-+#define ERESTARTSYS   512
-+#define ERESTARTNOINTR        513
-+#define ERESTARTNOHAND        514
-+
-+void syscall_handler_tt(int sig, union uml_pt_regs *regs)
-+{
-+      void *sc;
-+      long result;
-+      int index, syscall;
-+
-+      syscall = UPT_SYSCALL_NR(regs);
-+      sc = UPT_SC(regs);
-+      SC_START_SYSCALL(sc);
-+
-+      index = record_syscall_start(syscall);
-+      syscall_trace();
-+      result = execute_syscall(regs);
-+
-+      /* regs->sc may have changed while the system call ran (there may
-+       * have been an interrupt or segfault), so it needs to be refreshed.
-+       */
-+      UPT_SC(regs) = sc;
-+
-+      SC_SET_SYSCALL_RETURN(sc, result);
-+      if((result == -ERESTARTNOHAND) || (result == -ERESTARTSYS) || 
-+         (result == -ERESTARTNOINTR))
-+              do_signal(result);
-+
-+      syscall_trace();
-+      record_syscall_end(index, result);
-+}
-+
-+int do_syscall(void *task, int pid)
-+{
-+      unsigned long proc_regs[FRAME_SIZE];
-+      union uml_pt_regs *regs;
-+      int syscall;
-+
-+      if(ptrace_getregs(pid, proc_regs) < 0)
-+              tracer_panic("Couldn't read registers");
-+      syscall = PT_SYSCALL_NR(proc_regs);
-+
-+      regs = TASK_REGS(task);
-+      UPT_SYSCALL_NR(regs) = syscall;
-+
-+      if(syscall < 1) return(0);
-+
-+      if((syscall != __NR_sigreturn) &&
-+         ((unsigned long *) PT_IP(proc_regs) >= &_stext) && 
-+         ((unsigned long *) PT_IP(proc_regs) <= &_etext))
-+              tracer_panic("I'm tracing myself and I can't get out");
-+
-+      if(ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_NR_OFFSET, 
-+                __NR_getpid) < 0)
-+              tracer_panic("do_syscall : Nullifying syscall failed, "
-+                           "errno = %d", errno);
-+      return(1);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/sys-i386/Makefile um/arch/um/kernel/tt/sys-i386/Makefile
---- orig/arch/um/kernel/tt/sys-i386/Makefile   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/sys-i386/Makefile     2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,17 @@
-+# 
-+# Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+O_TARGET = sys-i386.o
-+
-+obj-y = sigcontext.o
-+
-+USER_OBJS = sigcontext.o
-+
-+include $(TOPDIR)/Rules.make
-+
-+$(USER_OBJS) : %.o: %.c
-+      $(CC) $(CFLAGS_$@) $(USER_CFLAGS) -c -o $@ $<
-+
-+clean :
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/sys-i386/sigcontext.c um/arch/um/kernel/tt/sys-i386/sigcontext.c
---- orig/arch/um/kernel/tt/sys-i386/sigcontext.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/sys-i386/sigcontext.c 2002-12-01 23:33:52.000000000 -0500
-@@ -0,0 +1,60 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdlib.h>
-+#include <asm/sigcontext.h>
-+#include "kern_util.h"
-+#include "sysdep/frame.h"
-+
-+int copy_sc_from_user_tt(void *to_ptr, void *from_ptr, void *data)
-+{
-+      struct arch_frame_data *arch = data;
-+      struct sigcontext *to = to_ptr, *from = from_ptr;
-+      struct _fpstate *to_fp, *from_fp;
-+      unsigned long sigs;
-+      int err;
-+
-+      to_fp = to->fpstate;
-+      from_fp = from->fpstate;
-+      sigs = to->oldmask;
-+      err = copy_from_user_proc(to, from, sizeof(*to));
-+      to->oldmask = sigs;
-+      if(to_fp != NULL){
-+              err |= copy_from_user_proc(&to->fpstate, &to_fp,
-+                                         sizeof(to->fpstate));
-+              err |= copy_from_user_proc(to_fp, from_fp, arch->fpstate_size);
-+      }
-+      return(err);
-+}
-+
-+int copy_sc_to_user_tt(void *to_ptr, void *fp, void *from_ptr, void *data)
-+{
-+      struct arch_frame_data *arch = data;
-+      struct sigcontext *to = to_ptr, *from = from_ptr;
-+      struct _fpstate *to_fp, *from_fp;
-+      int err;
-+
-+      to_fp = (struct _fpstate *) 
-+              (fp ? (unsigned long) fp : ((unsigned long) to + sizeof(*to)));
-+      from_fp = from->fpstate;
-+      err = copy_to_user_proc(to, from, sizeof(*to));
-+      if(from_fp != NULL){
-+              err |= copy_to_user_proc(&to->fpstate, &to_fp,
-+                                       sizeof(to->fpstate));
-+              err |= copy_to_user_proc(to_fp, from_fp, arch->fpstate_size);
-+      }
-+      return(err);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/time.c um/arch/um/kernel/tt/time.c
---- orig/arch/um/kernel/tt/time.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/time.c        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,28 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <signal.h>
-+#include <sys/time.h>
-+#include <time_user.h>
-+#include "process.h"
-+#include "user.h"
-+
-+void user_time_init_tt(void)
-+{
-+      if(signal(SIGVTALRM, (__sighandler_t) alarm_handler) == SIG_ERR)
-+              panic("Couldn't set SIGVTALRM handler");
-+      set_interval(ITIMER_VIRTUAL);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/tlb.c um/arch/um/kernel/tt/tlb.c
---- orig/arch/um/kernel/tt/tlb.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/tlb.c 2002-12-19 13:03:11.000000000 -0500
-@@ -0,0 +1,220 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/stddef.h"
-+#include "linux/kernel.h"
-+#include "linux/sched.h"
-+#include "asm/page.h"
-+#include "asm/pgtable.h"
-+#include "asm/uaccess.h"
-+#include "user_util.h"
-+#include "mem_user.h"
-+#include "os.h"
-+
-+static void fix_range(struct mm_struct *mm, unsigned long start_addr, 
-+                    unsigned long end_addr, int force)
-+{
-+      pgd_t *npgd;
-+      pmd_t *npmd;
-+      pte_t *npte;
-+      unsigned long addr;
-+      int r, w, x, err;
-+
-+      if((current->thread.mode.tt.extern_pid != -1) && 
-+         (current->thread.mode.tt.extern_pid != os_getpid()))
-+              panic("fix_range fixing wrong address space, current = 0x%p",
-+                    current);
-+      if(mm == NULL) return;
-+      for(addr=start_addr;addr<end_addr;){
-+              if(addr == TASK_SIZE){
-+                      /* Skip over kernel text, kernel data, and physical
-+                       * memory, which don't have ptes, plus kernel virtual
-+                       * memory, which is flushed separately, and remap
-+                       * the process stack.  The only way to get here is
-+                       * if (end_addr == STACK_TOP) > TASK_SIZE, which is
-+                       * only true in the honeypot case.
-+                       */
-+                      addr = STACK_TOP - ABOVE_KMEM;
-+                      continue;
-+              }
-+              npgd = pgd_offset(mm, addr);
-+              npmd = pmd_offset(npgd, addr);
-+              if(pmd_present(*npmd)){
-+                      npte = pte_offset(npmd, addr);
-+                      r = pte_read(*npte);
-+                      w = pte_write(*npte);
-+                      x = pte_exec(*npte);
-+                      if(!pte_dirty(*npte)) w = 0;
-+                      if(!pte_young(*npte)){
-+                              r = 0;
-+                              w = 0;
-+                      }
-+                      if(force || pte_newpage(*npte)){
-+                              err = os_unmap_memory((void *) addr, 
-+                                                    PAGE_SIZE);
-+                              if(err < 0)
-+                                      panic("munmap failed, errno = %d\n",
-+                                            -err);
-+                              if(pte_present(*npte))
-+                                      map_memory(addr, 
-+                                                 pte_val(*npte) & PAGE_MASK,
-+                                                 PAGE_SIZE, r, w, x);
-+                      }
-+                      else if(pte_newprot(*npte)){
-+                              protect_memory(addr, PAGE_SIZE, r, w, x, 1);
-+                      }
-+                      *npte = pte_mkuptodate(*npte);
-+                      addr += PAGE_SIZE;
-+              }
-+              else {
-+                      if(force || pmd_newpage(*npmd)){
-+                              err = os_unmap_memory((void *) addr, PMD_SIZE);
-+                              if(err < 0)
-+                                      panic("munmap failed, errno = %d\n",
-+                                            -err);
-+                              pmd_mkuptodate(*npmd);
-+                      }
-+                      addr += PMD_SIZE;
-+              }
-+      }
-+}
-+
-+atomic_t vmchange_seq = ATOMIC_INIT(1);
-+
-+static void flush_kernel_vm_range(unsigned long start, unsigned long end,
-+                                int update_seq)
-+{
-+      struct mm_struct *mm;
-+      pgd_t *pgd;
-+      pmd_t *pmd;
-+      pte_t *pte;
-+      unsigned long addr;
-+      int updated = 0, err;
-+
-+      mm = &init_mm;
-+      for(addr = start; addr < end;){
-+              pgd = pgd_offset(mm, addr);
-+              pmd = pmd_offset(pgd, addr);
-+              if(pmd_present(*pmd)){
-+                      pte = pte_offset(pmd, addr);
-+                      if(!pte_present(*pte) || pte_newpage(*pte)){
-+                              updated = 1;
-+                              err = os_unmap_memory((void *) addr, 
-+                                                    PAGE_SIZE);
-+                              if(err < 0)
-+                                      panic("munmap failed, errno = %d\n",
-+                                            -err);
-+                              if(pte_present(*pte))
-+                                      map_memory(addr, 
-+                                                 pte_val(*pte) & PAGE_MASK,
-+                                                 PAGE_SIZE, 1, 1, 1);
-+                      }
-+                      else if(pte_newprot(*pte)){
-+                              updated = 1;
-+                              protect_memory(addr, PAGE_SIZE, 1, 1, 1, 1);
-+                      }
-+                      addr += PAGE_SIZE;
-+              }
-+              else {
-+                      if(pmd_newpage(*pmd)){
-+                              updated = 1;
-+                              err = os_unmap_memory((void *) addr, PMD_SIZE);
-+                              if(err < 0)
-+                                      panic("munmap failed, errno = %d\n",
-+                                            -err);
-+                      }
-+                      addr += PMD_SIZE;
-+              }
-+      }
-+      if(updated && update_seq) atomic_inc(&vmchange_seq);
-+}
-+
-+static void protect_vm_page(unsigned long addr, int w, int must_succeed)
-+{
-+      int err;
-+
-+      err = protect_memory(addr, PAGE_SIZE, 1, w, 1, must_succeed);
-+      if(err == 0) return;
-+      else if((err == -EFAULT) || (err == -ENOMEM)){
-+              flush_kernel_vm_range(addr, addr + PAGE_SIZE, 1);
-+              protect_vm_page(addr, w, 1);
-+      }
-+      else panic("protect_vm_page : protect failed, errno = %d\n", err);
-+}
-+
-+void mprotect_kernel_vm(int w)
-+{
-+      struct mm_struct *mm;
-+      pgd_t *pgd;
-+      pmd_t *pmd;
-+      pte_t *pte;
-+      unsigned long addr;
-+      
-+      mm = &init_mm;
-+      for(addr = start_vm; addr < end_vm;){
-+              pgd = pgd_offset(mm, addr);
-+              pmd = pmd_offset(pgd, addr);
-+              if(pmd_present(*pmd)){
-+                      pte = pte_offset(pmd, addr);
-+                      if(pte_present(*pte)) protect_vm_page(addr, w, 0);
-+                      addr += PAGE_SIZE;
-+              }
-+              else addr += PMD_SIZE;
-+      }
-+}
-+
-+void flush_tlb_kernel_vm_tt(void)
-+{
-+      flush_kernel_vm_range(start_vm, end_vm, 1);
-+}
-+
-+void __flush_tlb_one_tt(unsigned long addr)
-+{
-+      flush_kernel_vm_range(addr, addr + PAGE_SIZE, 1);
-+}
-+
-+void flush_tlb_range_tt(struct mm_struct *mm, unsigned long start, 
-+                   unsigned long end)
-+{
-+      if(mm != current->mm) return;
-+
-+      /* Assumes that the range start ... end is entirely within
-+       * either process memory or kernel vm
-+       */
-+      if((start >= start_vm) && (start < end_vm)) 
-+              flush_kernel_vm_range(start, end, 1);
-+      else fix_range(mm, start, end, 0);
-+}
-+
-+void flush_tlb_mm_tt(struct mm_struct *mm)
-+{
-+      unsigned long seq;
-+
-+      if(mm != current->mm) return;
-+
-+      fix_range(mm, 0, STACK_TOP, 0);
-+
-+      seq = atomic_read(&vmchange_seq);
-+      if(current->thread.mode.tt.vm_seq == seq) return;
-+      current->thread.mode.tt.vm_seq = seq;
-+      flush_kernel_vm_range(start_vm, end_vm, 0);
-+}
-+
-+void force_flush_all_tt(void)
-+{
-+      fix_range(current->mm, 0, STACK_TOP, 1);
-+      flush_kernel_vm_range(start_vm, end_vm, 0);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/tracer.c um/arch/um/kernel/tt/tracer.c
---- orig/arch/um/kernel/tt/tracer.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/tracer.c      2003-03-26 10:01:33.000000000 -0500
-@@ -0,0 +1,453 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <stdarg.h>
-+#include <unistd.h>
-+#include <signal.h>
-+#include <errno.h>
-+#include <sched.h>
-+#include <string.h>
-+#include <sys/mman.h>
-+#include <sys/ptrace.h>
-+#include <sys/time.h>
-+#include <sys/wait.h>
-+#include "user.h"
-+#include "sysdep/ptrace.h"
-+#include "sigcontext.h"
-+#include "sysdep/sigcontext.h"
-+#include "os.h"
-+#include "signal_user.h"
-+#include "user_util.h"
-+#include "mem_user.h"
-+#include "process.h"
-+#include "kern_util.h"
-+#include "frame.h"
-+#include "chan_user.h"
-+#include "ptrace_user.h"
-+#include "mode.h"
-+#include "tt.h"
-+
-+static int tracer_winch[2];
-+
-+int is_tracer_winch(int pid, int fd, void *data)
-+{
-+      if(pid != tracing_pid)
-+              return(0);
-+
-+      register_winch_irq(tracer_winch[0], fd, -1, data);
-+      return(1);
-+}
-+
-+static void tracer_winch_handler(int sig)
-+{
-+      char c = 1;
-+
-+      if(write(tracer_winch[1], &c, sizeof(c)) != sizeof(c))
-+              printk("tracer_winch_handler - write failed, errno = %d\n",
-+                     errno);
-+}
-+
-+/* Called only by the tracing thread during initialization */
-+
-+static void setup_tracer_winch(void)
-+{
-+      int err;
-+
-+      err = os_pipe(tracer_winch, 1, 1);
-+      if(err){
-+              printk("setup_tracer_winch : os_pipe failed, errno = %d\n", 
-+                     -err);
-+              return;
-+      }
-+      signal(SIGWINCH, tracer_winch_handler);
-+}
-+
-+void attach_process(int pid)
-+{
-+      if((ptrace(PTRACE_ATTACH, pid, 0, 0) < 0) ||
-+         (ptrace(PTRACE_CONT, pid, 0, 0) < 0))
-+              tracer_panic("OP_FORK failed to attach pid");
-+      wait_for_stop(pid, SIGSTOP, PTRACE_CONT, NULL);
-+      if(ptrace(PTRACE_CONT, pid, 0, 0) < 0)
-+              tracer_panic("OP_FORK failed to continue process");
-+}
-+
-+void tracer_panic(char *format, ...)
-+{
-+      va_list ap;
-+
-+      va_start(ap, format);
-+      vprintf(format, ap);
-+      printf("\n");
-+      while(1) pause();
-+}
-+
-+static void tracer_segv(int sig, struct sigcontext sc)
-+{
-+      printf("Tracing thread segfault at address 0x%lx, ip 0x%lx\n",
-+             SC_FAULT_ADDR(&sc), SC_IP(&sc));
-+      while(1)
-+              pause();
-+}
-+
-+/* Changed early in boot, and then only read */
-+int debug = 0;
-+int debug_stop = 1;
-+int debug_parent = 0;
-+int honeypot = 0;
-+
-+static int signal_tramp(void *arg)
-+{
-+      int (*proc)(void *);
-+
-+      if(honeypot && munmap((void *) (host_task_size - 0x10000000),
-+                            0x10000000)) 
-+              panic("Unmapping stack failed");
-+      if(ptrace(PTRACE_TRACEME, 0, 0, 0) < 0)
-+              panic("ptrace PTRACE_TRACEME failed");
-+      os_stop_process(os_getpid());
-+      change_sig(SIGWINCH, 0);
-+      signal(SIGUSR1, SIG_IGN);
-+      change_sig(SIGCHLD, 0);
-+      signal(SIGSEGV, (__sighandler_t) sig_handler);
-+      set_cmdline("(idle thread)");
-+      set_init_pid(os_getpid());
-+      proc = arg;
-+      return((*proc)(NULL));
-+}
-+
-+static void sleeping_process_signal(int pid, int sig)
-+{
-+      switch(sig){
-+      /* These two result from UML being ^Z-ed and bg-ed.  PTRACE_CONT is
-+       * right because the process must be in the kernel already.
-+       */
-+      case SIGCONT:
-+      case SIGTSTP:
-+              if(ptrace(PTRACE_CONT, pid, 0, sig) < 0)
-+                      tracer_panic("sleeping_process_signal : Failed to "
-+                                   "continue pid %d, errno = %d\n", pid,
-+                                   sig);
-+              break;
-+
-+      /* This happens when the debugger (e.g. strace) is doing system call 
-+       * tracing on the kernel.  During a context switch, the current task
-+       * will be set to the incoming process and the outgoing process will
-+       * hop into write and then read.  Since it's not the current process
-+       * any more, the trace of those will land here.  So, we need to just 
-+       * PTRACE_SYSCALL it.
-+       */
-+      case SIGTRAP:
-+              if(ptrace(PTRACE_SYSCALL, pid, 0, 0) < 0)
-+                      tracer_panic("sleeping_process_signal : Failed to "
-+                                   "PTRACE_SYSCALL pid %d, errno = %d\n",
-+                                   pid, sig);
-+              break;
-+      case SIGSTOP:
-+              break;
-+      default:
-+              tracer_panic("sleeping process %d got unexpected "
-+                           "signal : %d\n", pid, sig);
-+              break;
-+      }
-+}
-+
-+/* Accessed only by the tracing thread */
-+int debugger_pid = -1;
-+int debugger_parent = -1;
-+int debugger_fd = -1;
-+int gdb_pid = -1;
-+
-+struct {
-+      int pid;
-+      int signal;
-+      unsigned long addr;
-+      struct timeval time;
-+} signal_record[1024][32];
-+
-+int signal_index[32];
-+int nsignals = 0;
-+int debug_trace = 0;
-+extern int io_nsignals, io_count, intr_count;
-+
-+extern void signal_usr1(int sig);
-+
-+int tracing_pid = -1;
-+
-+int tracer(int (*init_proc)(void *), void *sp)
-+{
-+      void *task = NULL;
-+      unsigned long eip = 0;
-+      int status, pid = 0, sig = 0, cont_type, tracing = 0, op = 0;
-+      int last_index, proc_id = 0, n, err, old_tracing = 0, strace = 0;
-+
-+      capture_signal_stack();
-+      signal(SIGPIPE, SIG_IGN);
-+      setup_tracer_winch();
-+      tracing_pid = os_getpid();
-+      printf("tracing thread pid = %d\n", tracing_pid);
-+
-+      pid = clone(signal_tramp, sp, CLONE_FILES | SIGCHLD, init_proc);
-+      n = waitpid(pid, &status, WUNTRACED);
-+      if(n < 0){
-+              printf("waitpid on idle thread failed, errno = %d\n", errno);
-+              exit(1);
-+      }
-+      if((ptrace(PTRACE_CONT, pid, 0, 0) < 0)){
-+              printf("Failed to continue idle thread, errno = %d\n", errno);
-+              exit(1);
-+      }
-+
-+      signal(SIGSEGV, (sighandler_t) tracer_segv);
-+      signal(SIGUSR1, signal_usr1);
-+      if(debug_trace){
-+              printf("Tracing thread pausing to be attached\n");
-+              stop();
-+      }
-+      if(debug){
-+              if(gdb_pid != -1) 
-+                      debugger_pid = attach_debugger(pid, gdb_pid, 1);
-+              else debugger_pid = init_ptrace_proxy(pid, 1, debug_stop);
-+              if(debug_parent){
-+                      debugger_parent = os_process_parent(debugger_pid);
-+                      init_parent_proxy(debugger_parent);
-+                      err = attach(debugger_parent);
-+                      if(err){
-+                              printf("Failed to attach debugger parent %d, "
-+                                     "errno = %d\n", debugger_parent, err);
-+                              debugger_parent = -1;
-+                      }
-+                      else {
-+                              if(ptrace(PTRACE_SYSCALL, debugger_parent, 
-+                                        0, 0) < 0){
-+                                      printf("Failed to continue debugger "
-+                                             "parent, errno = %d\n", errno);
-+                                      debugger_parent = -1;
-+                              }
-+                      }
-+              }
-+      }
-+      set_cmdline("(tracing thread)");
-+      while(1){
-+              if((pid = waitpid(-1, &status, WUNTRACED)) <= 0){
-+                      if(errno != ECHILD){
-+                              printf("wait failed - errno = %d\n", errno);
-+                      }
-+                      continue;
-+              }
-+              if(pid == debugger_pid){
-+                      int cont = 0;
-+
-+                      if(WIFEXITED(status) || WIFSIGNALED(status))
-+                              debugger_pid = -1;
-+                      /* XXX Figure out how to deal with gdb and SMP */
-+                      else cont = debugger_signal(status, cpu_tasks[0].pid);
-+                      if(cont == PTRACE_SYSCALL) strace = 1;
-+                      continue;
-+              }
-+              else if(pid == debugger_parent){
-+                      debugger_parent_signal(status, pid);
-+                      continue;
-+              }
-+              nsignals++;
-+              if(WIFEXITED(status)) ;
-+#ifdef notdef
-+              {
-+                      printf("Child %d exited with status %d\n", pid, 
-+                             WEXITSTATUS(status));
-+              }
-+#endif
-+              else if(WIFSIGNALED(status)){
-+                      sig = WTERMSIG(status);
-+                      if(sig != 9){
-+                              printf("Child %d exited with signal %d\n", pid,
-+                                     sig);
-+                      }
-+              }
-+              else if(WIFSTOPPED(status)){
-+                      proc_id = pid_to_processor_id(pid);
-+                      sig = WSTOPSIG(status);
-+                      if(signal_index[proc_id] == 1024){
-+                              signal_index[proc_id] = 0;
-+                              last_index = 1023;
-+                      }
-+                      else last_index = signal_index[proc_id] - 1;
-+                      if(((sig == SIGPROF) || (sig == SIGVTALRM) || 
-+                          (sig == SIGALRM)) &&
-+                         (signal_record[proc_id][last_index].signal == sig)&&
-+                         (signal_record[proc_id][last_index].pid == pid))
-+                              signal_index[proc_id] = last_index;
-+                      signal_record[proc_id][signal_index[proc_id]].pid = pid;
-+                      gettimeofday(&signal_record[proc_id][signal_index[proc_id]].time, NULL);
-+                      eip = ptrace(PTRACE_PEEKUSER, pid, PT_IP_OFFSET, 0);
-+                      signal_record[proc_id][signal_index[proc_id]].addr = eip;
-+                      signal_record[proc_id][signal_index[proc_id]++].signal = sig;
-+                      
-+                      if(proc_id == -1){
-+                              sleeping_process_signal(pid, sig);
-+                              continue;
-+                      }
-+
-+                      task = cpu_tasks[proc_id].task;
-+                      tracing = is_tracing(task);
-+                      old_tracing = tracing;
-+
-+                      switch(sig){
-+                      case SIGUSR1:
-+                              sig = 0;
-+                              op = do_proc_op(task, proc_id);
-+                              switch(op){
-+                              case OP_TRACE_ON:
-+                                      arch_leave_kernel(task, pid);
-+                                      tracing = 1;
-+                                      break;
-+                              case OP_REBOOT:
-+                              case OP_HALT:
-+                                      unmap_physmem();
-+                                      kmalloc_ok = 0;
-+                                      ptrace(PTRACE_KILL, pid, 0, 0);
-+                                      return(op == OP_REBOOT);
-+                              case OP_NONE:
-+                                      printf("Detaching pid %d\n", pid);
-+                                      detach(pid, SIGSTOP);
-+                                      continue;
-+                              default:
-+                                      break;
-+                              }
-+                              /* OP_EXEC switches host processes on us,
-+                               * we want to continue the new one.
-+                               */
-+                              pid = cpu_tasks[proc_id].pid;
-+                              break;
-+                      case SIGTRAP:
-+                              if(!tracing && (debugger_pid != -1)){
-+                                      child_signal(pid, status);
-+                                      continue;
-+                              }
-+                              tracing = 0;
-+                              if(do_syscall(task, pid)) sig = SIGUSR2;
-+                              else clear_singlestep(task);
-+                              break;
-+                      case SIGPROF:
-+                              if(tracing) sig = 0;
-+                              break;
-+                      case SIGCHLD:
-+                      case SIGHUP:
-+                              sig = 0;
-+                              break;
-+                      case SIGSEGV:
-+                      case SIGIO:
-+                      case SIGALRM:
-+                      case SIGVTALRM:
-+                      case SIGFPE:
-+                      case SIGBUS:
-+                      case SIGILL:
-+                      case SIGWINCH:
-+                      default:
-+                              tracing = 0;
-+                              break;
-+                      }
-+                      set_tracing(task, tracing);
-+
-+                      if(!tracing && old_tracing)
-+                              arch_enter_kernel(task, pid);
-+
-+                      if(!tracing && (debugger_pid != -1) && (sig != 0) &&
-+                              (sig != SIGALRM) && (sig != SIGVTALRM) &&
-+                              (sig != SIGSEGV) && (sig != SIGTRAP) &&
-+                              (sig != SIGUSR2) && (sig != SIGIO) &&
-+                              (sig != SIGFPE)){
-+                              child_signal(pid, status);
-+                              continue;
-+                      }
-+
-+                      if(tracing){
-+                              if(singlestepping_tt(task))
-+                                      cont_type = PTRACE_SINGLESTEP;
-+                              else cont_type = PTRACE_SYSCALL;
-+                      }
-+                      else cont_type = PTRACE_CONT;
-+
-+                      if((cont_type == PTRACE_CONT) && 
-+                         (debugger_pid != -1) && strace)
-+                              cont_type = PTRACE_SYSCALL;
-+
-+                      if(ptrace(cont_type, pid, 0, sig) != 0){
-+                              tracer_panic("ptrace failed to continue "
-+                                           "process - errno = %d\n", 
-+                                           errno);
-+                      }
-+              }
-+      }
-+      return(0);
-+}
-+
-+static int __init uml_debug_setup(char *line, int *add)
-+{
-+      char *next;
-+
-+      debug = 1;
-+      *add = 0;
-+      if(*line != '=') return(0);
-+      line++;
-+
-+      while(line != NULL){
-+              next = strchr(line, ',');
-+              if(next) *next++ = '\0';
-+              
-+              if(!strcmp(line, "go")) debug_stop = 0;
-+              else if(!strcmp(line, "parent")) debug_parent = 1;
-+              else printf("Unknown debug option : '%s'\n", line);
-+
-+              line = next;
-+      }
-+      return(0);
-+}
-+
-+__uml_setup("debug", uml_debug_setup,
-+"debug\n"
-+"    Starts up the kernel under the control of gdb. See the \n"
-+"    kernel debugging tutorial and the debugging session pages\n"
-+"    at http://user-mode-linux.sourceforge.net/ for more information.\n\n"
-+);
-+
-+static int __init uml_debugtrace_setup(char *line, int *add)
-+{
-+      debug_trace = 1;
-+      return 0;
-+}
-+__uml_setup("debugtrace", uml_debugtrace_setup,
-+"debugtrace\n"
-+"    Causes the tracing thread to pause until it is attached by a\n"
-+"    debugger and continued.  This is mostly for debugging crashes\n"
-+"    early during boot, and should be pretty much obsoleted by\n"
-+"    the debug switch.\n\n"
-+);
-+
-+static int __init uml_honeypot_setup(char *line, int *add)
-+{
-+      jail_setup("", add);
-+      honeypot = 1;
-+      return 0;
-+}
-+__uml_setup("honeypot", uml_honeypot_setup, 
-+"honeypot\n"
-+"    This makes UML put process stacks in the same location as they are\n"
-+"    on the host, allowing expoits such as stack smashes to work against\n"
-+"    UML.  This implies 'jail'.\n\n"
-+);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/trap_user.c um/arch/um/kernel/tt/trap_user.c
---- orig/arch/um/kernel/tt/trap_user.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/trap_user.c   2002-12-09 13:14:42.000000000 -0500
-@@ -0,0 +1,59 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdlib.h>
-+#include <errno.h>
-+#include <signal.h>
-+#include <asm/sigcontext.h>
-+#include "sysdep/ptrace.h"
-+#include "signal_user.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "task.h"
-+#include "tt.h"
-+
-+void sig_handler_common_tt(int sig, void *sc_ptr)
-+{
-+      struct sigcontext *sc = sc_ptr;
-+      struct tt_regs save_regs, *r;
-+      struct signal_info *info;
-+      int save_errno = errno, is_user;
-+
-+      unprotect_kernel_mem();
-+
-+      r = &TASK_REGS(get_current())->tt;
-+      save_regs = *r;
-+      is_user = user_context(SC_SP(sc));
-+      r->sc = sc;
-+      if(sig != SIGUSR2) 
-+              r->syscall = -1;
-+
-+      change_sig(SIGUSR1, 1);
-+      info = &sig_info[sig];
-+      if(!info->is_irq) unblock_signals();
-+
-+      (*info->handler)(sig, (union uml_pt_regs *) r);
-+
-+      if(is_user){
-+              interrupt_end();
-+              block_signals();
-+              change_sig(SIGUSR1, 0);
-+              set_user_mode(NULL);
-+      }
-+      *r = save_regs;
-+      errno = save_errno;
-+      if(is_user) protect_kernel_mem();
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/uaccess_user.c um/arch/um/kernel/tt/uaccess_user.c
---- orig/arch/um/kernel/tt/uaccess_user.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/uaccess_user.c        2003-03-25 17:10:54.000000000 -0500
-@@ -0,0 +1,100 @@
-+/* 
-+ * Copyright (C) 2001 Chris Emerson (cemerson@chiark.greenend.org.uk)
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <setjmp.h>
-+#include <string.h>
-+#include "user_util.h"
-+#include "uml_uaccess.h"
-+#include "task.h"
-+#include "kern_util.h"
-+
-+int __do_copy_from_user(void *to, const void *from, int n,
-+                      void **fault_addr, void **fault_catcher)
-+{
-+      struct tt_regs save = TASK_REGS(get_current())->tt;
-+      unsigned long fault;
-+      int faulted;
-+
-+      fault = __do_user_copy(to, from, n, fault_addr, fault_catcher,
-+                             __do_copy, &faulted);
-+      TASK_REGS(get_current())->tt = save;
-+
-+      if(!faulted) return(0);
-+      else return(n - (fault - (unsigned long) from));
-+}
-+
-+static void __do_strncpy(void *dst, const void *src, int count)
-+{
-+      strncpy(dst, src, count);
-+}     
-+
-+int __do_strncpy_from_user(char *dst, const char *src, unsigned long count,
-+                         void **fault_addr, void **fault_catcher)
-+{
-+      struct tt_regs save = TASK_REGS(get_current())->tt;
-+      unsigned long fault;
-+      int faulted;
-+
-+      fault = __do_user_copy(dst, src, count, fault_addr, fault_catcher,
-+                             __do_strncpy, &faulted);
-+      TASK_REGS(get_current())->tt = save;
-+
-+      if(!faulted) return(strlen(dst));
-+      else return(-1);
-+}
-+
-+static void __do_clear(void *to, const void *from, int n)
-+{
-+      memset(to, 0, n);
-+}     
-+
-+int __do_clear_user(void *mem, unsigned long len,
-+                  void **fault_addr, void **fault_catcher)
-+{
-+      struct tt_regs save = TASK_REGS(get_current())->tt;
-+      unsigned long fault;
-+      int faulted;
-+
-+      fault = __do_user_copy(mem, NULL, len, fault_addr, fault_catcher,
-+                             __do_clear, &faulted);
-+      TASK_REGS(get_current())->tt = save;
-+
-+      if(!faulted) return(0);
-+      else return(len - (fault - (unsigned long) mem));
-+}
-+
-+int __do_strnlen_user(const char *str, unsigned long n,
-+                    void **fault_addr, void **fault_catcher)
-+{
-+      struct tt_regs save = TASK_REGS(get_current())->tt;
-+      int ret;
-+      unsigned long *faddrp = (unsigned long *)fault_addr;
-+      jmp_buf jbuf;
-+
-+      *fault_catcher = &jbuf;
-+      if(setjmp(jbuf) == 0){
-+              ret = strlen(str) + 1;
-+      } 
-+      else {
-+              ret = *faddrp - (unsigned long) str;
-+      }
-+      *fault_addr = NULL;
-+      *fault_catcher = NULL;
-+
-+      TASK_REGS(get_current())->tt = save;
-+      return ret;
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/unmap.c um/arch/um/kernel/tt/unmap.c
---- orig/arch/um/kernel/tt/unmap.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/unmap.c       2002-12-11 10:42:21.000000000 -0500
-@@ -0,0 +1,31 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <sys/mman.h>
-+
-+int switcheroo(int fd, int prot, void *from, void *to, int size)
-+{
-+      if(munmap(to, size) < 0){
-+              return(-1);
-+      }
-+      if(mmap(to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) != to){
-+              return(-1);
-+      }
-+      if(munmap(from, size) < 0){
-+              return(-1);
-+      }
-+      return(0);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/tty_log.c um/arch/um/kernel/tty_log.c
---- orig/arch/um/kernel/tty_log.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tty_log.c        2003-04-16 16:35:20.000000000 -0400
-@@ -0,0 +1,213 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) and 
-+ * geoffrey hing <ghing@net.ohio-state.edu>
-+ * Licensed under the GPL
-+ */
-+
-+#include <errno.h>
-+#include <string.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <fcntl.h>
-+#include <sys/time.h>
-+#include "init.h"
-+#include "user.h"
-+#include "kern_util.h"
-+#include "os.h"
-+
-+#define TTY_LOG_DIR "./"
-+
-+/* Set early in boot and then unchanged */
-+static char *tty_log_dir = TTY_LOG_DIR;
-+static int tty_log_fd = -1;
-+
-+#define TTY_LOG_OPEN 1
-+#define TTY_LOG_CLOSE 2
-+#define TTY_LOG_WRITE 3
-+#define TTY_LOG_EXEC 4
-+
-+#define TTY_READ 1
-+#define TTY_WRITE 2
-+
-+struct tty_log_buf {
-+      int what;
-+      unsigned long tty;
-+      int len;
-+      int direction;
-+      unsigned long sec;
-+      unsigned long usec;
-+};
-+
-+int open_tty_log(void *tty, void *current_tty)
-+{
-+      struct timeval tv;
-+      struct tty_log_buf data;
-+      char buf[strlen(tty_log_dir) + sizeof("01234567890-01234567\0")];
-+      int fd;
-+
-+      gettimeofday(&tv, NULL);
-+      if(tty_log_fd != -1){
-+              data = ((struct tty_log_buf) { .what    = TTY_LOG_OPEN,
-+                                             .tty  = (unsigned long) tty,
-+                                             .len  = sizeof(current_tty),
-+                                             .direction = 0,
-+                                             .sec = tv.tv_sec,
-+                                             .usec = tv.tv_usec } );
-+              write(tty_log_fd, &data, sizeof(data));
-+              write(tty_log_fd, &current_tty, data.len);
-+              return(tty_log_fd);
-+      }
-+
-+      sprintf(buf, "%s/%0u-%0u", tty_log_dir, (unsigned int) tv.tv_sec, 
-+              (unsigned int) tv.tv_usec);
-+
-+      fd = os_open_file(buf, of_append(of_create(of_rdwr(OPENFLAGS()))),
-+                        0644);
-+      if(fd < 0){
-+              printk("open_tty_log : couldn't open '%s', errno = %d\n",
-+                     buf, -fd);
-+      }
-+      return(fd);
-+}
-+
-+void close_tty_log(int fd, void *tty)
-+{
-+      struct tty_log_buf data;
-+      struct timeval tv;
-+
-+      if(tty_log_fd != -1){
-+              gettimeofday(&tv, NULL);
-+              data = ((struct tty_log_buf) { .what    = TTY_LOG_CLOSE,
-+                                             .tty  = (unsigned long) tty,
-+                                             .len  = 0,
-+                                             .direction = 0,
-+                                             .sec = tv.tv_sec,
-+                                             .usec = tv.tv_usec } );
-+              write(tty_log_fd, &data, sizeof(data));
-+              return;
-+      }
-+      close(fd);
-+}
-+
-+static int log_chunk(int fd, char *buf, int len)
-+{
-+      int total = 0, try, missed, n;
-+      char chunk[64];
-+
-+      while(len > 0){
-+              try = (len > sizeof(chunk)) ? sizeof(chunk) : len;
-+              missed = copy_from_user_proc(chunk, buf, try);
-+              try -= missed;
-+              n = write(fd, chunk, try);
-+              if(n != try)
-+                      return(-errno);
-+              if(missed != 0)
-+                      return(-EFAULT);
-+
-+              len -= try;
-+              total += try;
-+              buf += try;
-+      }
-+
-+      return(total);
-+}
-+
-+int write_tty_log(int fd, char *buf, int len, void *tty, int is_read)
-+{
-+      struct timeval tv;
-+      struct tty_log_buf data;
-+      int direction;
-+
-+      if(fd == tty_log_fd){
-+              gettimeofday(&tv, NULL);
-+              direction = is_read ? TTY_READ : TTY_WRITE;
-+              data = ((struct tty_log_buf) { .what    = TTY_LOG_WRITE,
-+                                             .tty  = (unsigned long) tty,
-+                                             .len  = len,
-+                                             .direction = direction,
-+                                             .sec = tv.tv_sec,
-+                                             .usec = tv.tv_usec } );
-+              write(tty_log_fd, &data, sizeof(data));
-+      }
-+
-+      return(log_chunk(fd, buf, len));
-+}
-+
-+void log_exec(char **argv, void *tty)
-+{
-+      struct timeval tv;
-+      struct tty_log_buf data;
-+      char **ptr,*arg;
-+      int len;
-+      
-+      if(tty_log_fd == -1) return;
-+
-+      gettimeofday(&tv, NULL);
-+
-+      len = 0;
-+      for(ptr = argv; ; ptr++){
-+              if(copy_from_user_proc(&arg, ptr, sizeof(arg)))
-+                      return;
-+              if(arg == NULL) break;
-+              len += strlen_user_proc(arg);
-+      }
-+
-+      data = ((struct tty_log_buf) { .what    = TTY_LOG_EXEC,
-+                                     .tty  = (unsigned long) tty,
-+                                     .len  = len,
-+                                     .direction = 0,
-+                                     .sec = tv.tv_sec,
-+                                     .usec = tv.tv_usec } );
-+      write(tty_log_fd, &data, sizeof(data));
-+
-+      for(ptr = argv; ; ptr++){
-+              if(copy_from_user_proc(&arg, ptr, sizeof(arg)))
-+                      return;
-+              if(arg == NULL) break;
-+              log_chunk(tty_log_fd, arg, strlen_user_proc(arg));
-+      }
-+}
-+
-+static int __init set_tty_log_dir(char *name, int *add)
-+{
-+      tty_log_dir = name;
-+      return 0;
-+}
-+
-+__uml_setup("tty_log_dir=", set_tty_log_dir,
-+"tty_log_dir=<directory>\n"
-+"    This is used to specify the directory where the logs of all pty\n"
-+"    data from this UML machine will be written.\n\n"
-+);
-+
-+static int __init set_tty_log_fd(char *name, int *add)
-+{
-+      char *end;
-+
-+      tty_log_fd = strtoul(name, &end, 0);
-+      if((*end != '\0') || (end == name)){
-+              printf("set_tty_log_fd - strtoul failed on '%s'\n", name);
-+              tty_log_fd = -1;
-+      }
-+      return 0;
-+}
-+
-+__uml_setup("tty_log_fd=", set_tty_log_fd,
-+"tty_log_fd=<fd>\n"
-+"    This is used to specify a preconfigured file descriptor to which all\n"
-+"    tty data will be written.  Preconfigure the descriptor with something\n"
-+"    like '10>tty_log tty_log_fd=10'.\n\n"
-+);
-+
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/uaccess_user.c um/arch/um/kernel/uaccess_user.c
---- orig/arch/um/kernel/uaccess_user.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/uaccess_user.c   2003-03-25 17:06:05.000000000 -0500
-@@ -0,0 +1,64 @@
-+/* 
-+ * Copyright (C) 2001 Chris Emerson (cemerson@chiark.greenend.org.uk)
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <setjmp.h>
-+#include <string.h>
-+
-+/* These are here rather than tt/uaccess.c because skas mode needs them in
-+ * order to do SIGBUS recovery when a tmpfs mount runs out of room.
-+ */
-+
-+unsigned long __do_user_copy(void *to, const void *from, int n,
-+                           void **fault_addr, void **fault_catcher,
-+                           void (*op)(void *to, const void *from,
-+                                      int n), int *faulted_out)
-+{
-+      unsigned long *faddrp = (unsigned long *) fault_addr, ret;
-+
-+      jmp_buf jbuf;
-+      *fault_catcher = &jbuf;
-+      if(setjmp(jbuf) == 0){
-+              (*op)(to, from, n);
-+              ret = 0;
-+              *faulted_out = 0;
-+      } 
-+      else {
-+              ret = *faddrp;
-+              *faulted_out = 1;
-+      }
-+      *fault_addr = NULL;
-+      *fault_catcher = NULL;
-+      return ret;
-+}
-+
-+void __do_copy(void *to, const void *from, int n)
-+{
-+      memcpy(to, from, n);
-+}     
-+
-+
-+int __do_copy_to_user(void *to, const void *from, int n,
-+                    void **fault_addr, void **fault_catcher)
-+{
-+      unsigned long fault;
-+      int faulted;
-+
-+      fault = __do_user_copy(to, from, n, fault_addr, fault_catcher,
-+                             __do_copy, &faulted);
-+      if(!faulted) return(0);
-+      else return(n - (fault - (unsigned long) to));
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/um_arch.c um/arch/um/kernel/um_arch.c
---- orig/arch/um/kernel/um_arch.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/um_arch.c        2003-03-06 19:06:09.000000000 -0500
-@@ -0,0 +1,425 @@
-+/* 
-+ * Copyright (C) 2000, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/config.h"
-+#include "linux/kernel.h"
-+#include "linux/sched.h"
-+#include "linux/notifier.h"
-+#include "linux/mm.h"
-+#include "linux/types.h"
-+#include "linux/tty.h"
-+#include "linux/init.h"
-+#include "linux/bootmem.h"
-+#include "linux/spinlock.h"
-+#include "linux/utsname.h"
-+#include "linux/sysrq.h"
-+#include "linux/seq_file.h"
-+#include "linux/delay.h"
-+#include "asm/page.h"
-+#include "asm/pgtable.h"
-+#include "asm/ptrace.h"
-+#include "asm/elf.h"
-+#include "asm/user.h"
-+#include "ubd_user.h"
-+#include "asm/current.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "kern.h"
-+#include "mprot.h"
-+#include "mem_user.h"
-+#include "mem.h"
-+#include "umid.h"
-+#include "initrd.h"
-+#include "init.h"
-+#include "os.h"
-+#include "choose-mode.h"
-+#include "mode_kern.h"
-+#include "mode.h"
-+
-+#define DEFAULT_COMMAND_LINE "root=/dev/ubd0"
-+
-+struct cpuinfo_um boot_cpu_data = { 
-+      .loops_per_jiffy        = 0,
-+      .pgd_quick              = NULL,
-+      .pmd_quick              = NULL,
-+      .pte_quick              = NULL,
-+      .pgtable_cache_sz       = 0,
-+      .ipi_pipe               = { -1, -1 }
-+};
-+
-+unsigned long thread_saved_pc(struct thread_struct *thread)
-+{
-+      return(os_process_pc(CHOOSE_MODE_PROC(thread_pid_tt, thread_pid_skas,
-+                                            thread)));
-+}
-+
-+static int show_cpuinfo(struct seq_file *m, void *v)
-+{
-+      int index;
-+
-+      index = (struct cpuinfo_um *)v - cpu_data;
-+#ifdef CONFIG_SMP
-+      if (!(cpu_online_map & (1 << index)))
-+              return 0;
-+#endif
-+
-+      seq_printf(m, "processor\t: %d\n", index);
-+      seq_printf(m, "vendor_id\t: User Mode Linux\n");
-+      seq_printf(m, "model name\t: UML\n");
-+      seq_printf(m, "mode\t\t: %s\n", CHOOSE_MODE("tt", "skas"));
-+      seq_printf(m, "host\t\t: %s\n", host_info);
-+      seq_printf(m, "bogomips\t: %lu.%02lu\n\n",
-+                 loops_per_jiffy/(500000/HZ),
-+                 (loops_per_jiffy/(5000/HZ)) % 100);
-+
-+      return(0);
-+}
-+
-+static void *c_start(struct seq_file *m, loff_t *pos)
-+{
-+      return *pos < NR_CPUS ? cpu_data + *pos : NULL;
-+}
-+
-+static void *c_next(struct seq_file *m, void *v, loff_t *pos)
-+{
-+      ++*pos;
-+      return c_start(m, pos);
-+}
-+
-+static void c_stop(struct seq_file *m, void *v)
-+{
-+}
-+
-+struct seq_operations cpuinfo_op = {
-+      .start  = c_start,
-+      .next   = c_next,
-+      .stop   = c_stop,
-+      .show   = show_cpuinfo,
-+};
-+
-+pte_t * __bad_pagetable(void)
-+{
-+      panic("Someone should implement __bad_pagetable");
-+      return(NULL);
-+}
-+
-+/* Set in linux_main */
-+unsigned long host_task_size;
-+unsigned long task_size;
-+unsigned long uml_start;
-+
-+/* Set in early boot */
-+unsigned long uml_physmem;
-+unsigned long uml_reserved;
-+unsigned long start_vm;
-+unsigned long end_vm;
-+int ncpus = 1;
-+
-+#ifdef CONFIG_MODE_TT
-+/* Pointer set in linux_main, the array itself is private to each thread,
-+ * and changed at address space creation time so this poses no concurrency
-+ * problems.
-+ */
-+static char *argv1_begin = NULL;
-+static char *argv1_end = NULL;
-+#endif
-+
-+/* Set in early boot */
-+static int have_root __initdata = 0;
-+long physmem_size = 32 * 1024 * 1024;
-+
-+void set_cmdline(char *cmd)
-+{
-+#ifdef CONFIG_MODE_TT
-+      char *umid, *ptr;
-+
-+      if(CHOOSE_MODE(honeypot, 0)) return;
-+
-+      umid = get_umid(1);
-+      if(umid != NULL){
-+              snprintf(argv1_begin, 
-+                       (argv1_end - argv1_begin) * sizeof(*ptr), 
-+                       "(%s) ", umid);
-+              ptr = &argv1_begin[strlen(argv1_begin)];
-+      }
-+      else ptr = argv1_begin;
-+
-+      snprintf(ptr, (argv1_end - ptr) * sizeof(*ptr), "[%s]", cmd);
-+      memset(argv1_begin + strlen(argv1_begin), '\0', 
-+             argv1_end - argv1_begin - strlen(argv1_begin));
-+#endif
-+}
-+
-+static char *usage_string = 
-+"User Mode Linux v%s\n"
-+"     available at http://user-mode-linux.sourceforge.net/\n\n";
-+
-+static int __init uml_version_setup(char *line, int *add)
-+{
-+      printf("%s\n", system_utsname.release);
-+      exit(0);
-+}
-+
-+__uml_setup("--version", uml_version_setup,
-+"--version\n"
-+"    Prints the version number of the kernel.\n\n"
-+);
-+
-+static int __init uml_root_setup(char *line, int *add)
-+{
-+      have_root = 1;
-+      return 0;
-+}
-+
-+__uml_setup("root=", uml_root_setup,
-+"root=<file containing the root fs>\n"
-+"    This is actually used by the generic kernel in exactly the same\n"
-+"    way as in any other kernel. If you configure a number of block\n"
-+"    devices and want to boot off something other than ubd0, you \n"
-+"    would use something like:\n"
-+"        root=/dev/ubd5\n\n"
-+);
-+
-+#ifdef CONFIG_SMP
-+static int __init uml_ncpus_setup(char *line, int *add)
-+{
-+       if (!sscanf(line, "%d", &ncpus)) {
-+               printf("Couldn't parse [%s]\n", line);
-+               return -1;
-+       }
-+
-+       return 0;
-+}
-+
-+__uml_setup("ncpus=", uml_ncpus_setup,
-+"ncpus=<# of desired CPUs>\n"
-+"    This tells an SMP kernel how many virtual processors to start.\n\n" 
-+);
-+#endif
-+
-+int force_tt = 0;
-+
-+#if defined(CONFIG_MODE_TT) && defined(CONFIG_MODE_SKAS)
-+#define DEFAULT_TT 0
-+
-+static int __init mode_tt_setup(char *line, int *add)
-+{
-+      force_tt = 1;
-+      return(0);
-+}
-+
-+#else
-+#ifdef CONFIG_MODE_SKAS
-+
-+#define DEFAULT_TT 0
-+
-+static int __init mode_tt_setup(char *line, int *add)
-+{
-+      printf("CONFIG_MODE_TT disabled - 'mode=tt' ignored\n");
-+      return(0);
-+}
-+
-+#else
-+#ifdef CONFIG_MODE_TT
-+
-+#define DEFAULT_TT 1
-+
-+static int __init mode_tt_setup(char *line, int *add)
-+{
-+      printf("CONFIG_MODE_SKAS disabled - 'mode=tt' redundant\n");
-+      return(0);
-+}
-+
-+#else
-+
-+#error Either CONFIG_MODE_TT or CONFIG_MODE_SKAS must be enabled
-+
-+#endif
-+#endif
-+#endif
-+
-+__uml_setup("mode=tt", mode_tt_setup,
-+"mode=tt\n"
-+"    When both CONFIG_MODE_TT and CONFIG_MODE_SKAS are enabled, this option\n"
-+"    forces UML to run in tt (tracing thread) mode.  It is not the default\n"
-+"    because it's slower and less secure than skas mode.\n\n"
-+);
-+
-+int mode_tt = DEFAULT_TT;
-+
-+static int __init Usage(char *line, int *add)
-+{
-+      const char **p;
-+
-+      printf(usage_string, system_utsname.release);
-+      p = &__uml_help_start;
-+      while (p < &__uml_help_end) {
-+              printf("%s", *p);
-+              p++;
-+      }
-+      exit(0);
-+}
-+
-+__uml_setup("--help", Usage,
-+"--help\n"
-+"    Prints this message.\n\n"
-+);
-+
-+static int __init uml_checksetup(char *line, int *add)
-+{
-+      struct uml_param *p;
-+
-+      p = &__uml_setup_start;
-+      while(p < &__uml_setup_end) {
-+              int n;
-+
-+              n = strlen(p->str);
-+              if(!strncmp(line, p->str, n)){
-+                      if (p->setup_func(line + n, add)) return 1;
-+              }
-+              p++;
-+      }
-+      return 0;
-+}
-+
-+static void __init uml_postsetup(void)
-+{
-+      initcall_t *p;
-+
-+      p = &__uml_postsetup_start;
-+      while(p < &__uml_postsetup_end){
-+              (*p)();
-+              p++;
-+      }
-+      return;
-+}
-+
-+/* Set during early boot */
-+unsigned long brk_start;
-+static struct vm_reserved kernel_vm_reserved;
-+
-+#define MIN_VMALLOC (32 * 1024 * 1024)
-+
-+int linux_main(int argc, char **argv)
-+{
-+      unsigned long avail;
-+      unsigned long virtmem_size, max_physmem;
-+      unsigned int i, add, err;
-+
-+      for (i = 1; i < argc; i++){
-+              if((i == 1) && (argv[i][0] == ' ')) continue;
-+              add = 1;
-+              uml_checksetup(argv[i], &add);
-+              if(add) add_arg(saved_command_line, argv[i]);
-+      }
-+      if(have_root == 0) add_arg(saved_command_line, DEFAULT_COMMAND_LINE);
-+
-+      mode_tt = force_tt ? 1 : !can_do_skas();
-+      uml_start = CHOOSE_MODE_PROC(set_task_sizes_tt, set_task_sizes_skas, 0,
-+                                   &host_task_size, &task_size);
-+
-+      brk_start = (unsigned long) sbrk(0);
-+      CHOOSE_MODE_PROC(before_mem_tt, before_mem_skas, brk_start);
-+
-+      uml_physmem = uml_start;
-+
-+      /* Reserve up to 4M after the current brk */
-+      uml_reserved = ROUND_4M(brk_start) + (1 << 22);
-+
-+      setup_machinename(system_utsname.machine);
-+
-+#ifdef CONFIG_MODE_TT
-+      argv1_begin = argv[1];
-+      argv1_end = &argv[1][strlen(argv[1])];
-+#endif
-+  
-+      set_usable_vm(uml_physmem, get_kmem_end());
-+
-+      highmem = 0;
-+      max_physmem = get_kmem_end() - uml_physmem - MIN_VMALLOC;
-+      if(physmem_size > max_physmem){
-+              highmem = physmem_size - max_physmem;
-+              physmem_size -= highmem;
-+#ifndef CONFIG_HIGHMEM
-+              highmem = 0;
-+              printf("CONFIG_HIGHMEM not enabled - physical memory shrunk "
-+                     "to %ld bytes\n", physmem_size);
-+#endif
-+      }
-+
-+      high_physmem = uml_physmem + physmem_size;
-+      high_memory = (void *) high_physmem;
-+
-+      start_vm = VMALLOC_START;
-+
-+      setup_physmem(uml_physmem, uml_reserved, physmem_size);
-+      virtmem_size = physmem_size;
-+      avail = get_kmem_end() - start_vm;
-+      if(physmem_size > avail) virtmem_size = avail;
-+      end_vm = start_vm + virtmem_size;
-+
-+      if(virtmem_size < physmem_size)
-+              printf("Kernel virtual memory size shrunk to %ld bytes\n",
-+                     virtmem_size);
-+
-+      err = reserve_vm(high_physmem, end_vm, &kernel_vm_reserved);
-+      if(err){
-+              printf("Failed to reserve VM area for kernel VM\n");
-+              exit(1);
-+      }
-+
-+      uml_postsetup();
-+
-+      init_task.thread.kernel_stack = (unsigned long) &init_task + 
-+              2 * PAGE_SIZE;
-+
-+      task_protections((unsigned long) &init_task);
-+      os_flush_stdout();
-+
-+      return(CHOOSE_MODE(start_uml_tt(), start_uml_skas()));
-+}
-+
-+static int panic_exit(struct notifier_block *self, unsigned long unused1,
-+                    void *unused2)
-+{
-+#ifdef CONFIG_SYSRQ
-+      handle_sysrq('p', &current->thread.regs, NULL, NULL);
-+#endif
-+      machine_halt();
-+      return(0);
-+}
-+
-+static struct notifier_block panic_exit_notifier = {
-+      .notifier_call          = panic_exit,
-+      .next                   = NULL,
-+      .priority               = 0
-+};
-+
-+void __init setup_arch(char **cmdline_p)
-+{
-+      notifier_chain_register(&panic_notifier_list, &panic_exit_notifier);
-+      paging_init();
-+      strcpy(command_line, saved_command_line);
-+      *cmdline_p = command_line;
-+      setup_hostinfo();
-+}
-+
-+void __init check_bugs(void)
-+{
-+      arch_check_bugs();
-+      check_ptrace();
-+      check_sigio();
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/umid.c um/arch/um/kernel/umid.c
---- orig/arch/um/kernel/umid.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/umid.c   2003-02-24 23:11:23.000000000 -0500
-@@ -0,0 +1,319 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <unistd.h>
-+#include <fcntl.h>
-+#include <errno.h>
-+#include <string.h>
-+#include <stdlib.h>
-+#include <dirent.h>
-+#include <signal.h>
-+#include <sys/stat.h>
-+#include <sys/param.h>
-+#include "user.h"
-+#include "umid.h"
-+#include "init.h"
-+#include "os.h"
-+#include "user_util.h"
-+#include "choose-mode.h"
-+
-+#define UMID_LEN 64
-+#define UML_DIR "~/.uml/"
-+
-+/* Changed by set_umid and make_umid, which are run early in boot */
-+static char umid[UMID_LEN] = { 0 };
-+
-+/* Changed by set_uml_dir and make_uml_dir, which are run early in boot */
-+static char *uml_dir = UML_DIR;
-+
-+/* Changed by set_umid */
-+static int umid_is_random = 1;
-+static int umid_inited = 0;
-+
-+static int make_umid(int (*printer)(const char *fmt, ...));
-+
-+static int __init set_umid(char *name, int is_random, 
-+                         int (*printer)(const char *fmt, ...))
-+{
-+      if(umid_inited){
-+              (*printer)("Unique machine name can't be set twice\n");
-+              return(-1);
-+      }
-+
-+      if(strlen(name) > UMID_LEN - 1)
-+              (*printer)("Unique machine name is being truncated to %s "
-+                         "characters\n", UMID_LEN);
-+      strncpy(umid, name, UMID_LEN - 1);
-+      umid[UMID_LEN - 1] = '\0';
-+
-+      umid_is_random = is_random;
-+      umid_inited = 1;
-+      return 0;
-+}
-+
-+static int __init set_umid_arg(char *name, int *add)
-+{
-+      return(set_umid(name, 0, printf));
-+}
-+
-+__uml_setup("umid=", set_umid_arg,
-+"umid=<name>\n"
-+"    This is used to assign a unique identity to this UML machine and\n"
-+"    is used for naming the pid file and management console socket.\n\n"
-+);
-+
-+int __init umid_file_name(char *name, char *buf, int len)
-+{
-+      int n;
-+
-+      if(!umid_inited && make_umid(printk)) return(-1);
-+
-+      n = strlen(uml_dir) + strlen(umid) + strlen(name) + 1;
-+      if(n > len){
-+              printk("umid_file_name : buffer too short\n");
-+              return(-1);
-+      }
-+
-+      sprintf(buf, "%s%s/%s", uml_dir, umid, name);
-+      return(0);
-+}
-+
-+extern int tracing_pid;
-+
-+static int __init create_pid_file(void)
-+{
-+      char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")];
-+      char pid[sizeof("nnnnn\0")];
-+      int fd;
-+
-+      if(umid_file_name("pid", file, sizeof(file))) return 0;
-+
-+      fd = os_open_file(file, of_create(of_excl(of_rdwr(OPENFLAGS()))), 
-+                        0644);
-+      if(fd < 0){
-+              printf("Open of machine pid file \"%s\" failed - "
-+                     "errno = %d\n", file, -fd);
-+              return 0;
-+      }
-+
-+      sprintf(pid, "%d\n", os_getpid());
-+      if(write(fd, pid, strlen(pid)) != strlen(pid))
-+              printf("Write of pid file failed - errno = %d\n", errno);
-+      close(fd);
-+      return 0;
-+}
-+
-+static int actually_do_remove(char *dir)
-+{
-+      DIR *directory;
-+      struct dirent *ent;
-+      int len;
-+      char file[256];
-+
-+      if((directory = opendir(dir)) == NULL){
-+              printk("actually_do_remove : couldn't open directory '%s', "
-+                     "errno = %d\n", dir, errno);
-+              return(1);
-+      }
-+      while((ent = readdir(directory)) != NULL){
-+              if(!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, ".."))
-+                      continue;
-+              len = strlen(dir) + sizeof("/") + strlen(ent->d_name) + 1;
-+              if(len > sizeof(file)){
-+                      printk("Not deleting '%s' from '%s' - name too long\n",
-+                             ent->d_name, dir);
-+                      continue;
-+              }
-+              sprintf(file, "%s/%s", dir, ent->d_name);
-+              if(unlink(file) < 0){
-+                      printk("actually_do_remove : couldn't remove '%s' "
-+                             "from '%s', errno = %d\n", ent->d_name, dir, 
-+                             errno);
-+                      return(1);
-+              }
-+      }
-+      if(rmdir(dir) < 0){
-+              printk("actually_do_remove : couldn't rmdir '%s', "
-+                     "errno = %d\n", dir, errno);
-+              return(1);
-+      }
-+      return(0);
-+}
-+
-+void remove_umid_dir(void)
-+{
-+      char dir[strlen(uml_dir) + UMID_LEN + 1];
-+      if(!umid_inited) return;
-+
-+      sprintf(dir, "%s%s", uml_dir, umid);
-+      actually_do_remove(dir);
-+}
-+
-+char *get_umid(int only_if_set)
-+{
-+      if(only_if_set && umid_is_random) return(NULL);
-+      return(umid);
-+}
-+
-+int not_dead_yet(char *dir)
-+{
-+      char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")];
-+      char pid[sizeof("nnnnn\0")], *end;
-+      int dead, fd, p;
-+
-+      sprintf(file, "%s/pid", dir);
-+      dead = 0;
-+      if((fd = os_open_file(file, of_read(OPENFLAGS()), 0)) < 0){
-+              if(fd != -ENOENT){
-+                      printk("not_dead_yet : couldn't open pid file '%s', "
-+                             "errno = %d\n", file, -fd);
-+                      return(1);
-+              }
-+              dead = 1;
-+      }
-+      if(fd > 0){
-+              if(read(fd, pid, sizeof(pid)) < 0){
-+                      printk("not_dead_yet : couldn't read pid file '%s', "
-+                             "errno = %d\n", file, errno);
-+                      return(1);
-+              }
-+              p = strtoul(pid, &end, 0);
-+              if(end == pid){
-+                      printk("not_dead_yet : couldn't parse pid file '%s', "
-+                             "errno = %d\n", file, errno);
-+                      dead = 1;
-+              }
-+              if(((kill(p, 0) < 0) && (errno == ESRCH)) ||
-+                 (p == CHOOSE_MODE(tracing_pid, os_getpid())))
-+                      dead = 1;
-+      }
-+      if(!dead) return(1);
-+      return(actually_do_remove(dir));
-+}
-+
-+static int __init set_uml_dir(char *name, int *add)
-+{
-+      if((strlen(name) > 0) && (name[strlen(name) - 1] != '/')){
-+              uml_dir = malloc(strlen(name) + 1);
-+              if(uml_dir == NULL){
-+                      printf("Failed to malloc uml_dir - error = %d\n",
-+                             errno);
-+                      uml_dir = name;
-+                      return(0);
-+              }
-+              sprintf(uml_dir, "%s/", name);
-+      }
-+      else uml_dir = name;
-+      return 0;
-+}
-+
-+static int __init make_uml_dir(void)
-+{
-+      char dir[MAXPATHLEN + 1] = { '\0' };
-+      int len;
-+
-+      if(*uml_dir == '~'){
-+              char *home = getenv("HOME");
-+
-+              if(home == NULL){
-+                      printf("make_uml_dir : no value in environment for "
-+                             "$HOME\n");
-+                      exit(1);
-+              }
-+              strncpy(dir, home, sizeof(dir));
-+              uml_dir++;
-+      }
-+      len = strlen(dir);
-+      strncat(dir, uml_dir, sizeof(dir) - len);
-+      len = strlen(dir);
-+      if((len > 0) && (len < sizeof(dir) - 1) && (dir[len - 1] != '/')){
-+              dir[len] = '/';
-+              dir[len + 1] = '\0';
-+      }
-+
-+      if((uml_dir = malloc(strlen(dir) + 1)) == NULL){
-+              printf("make_uml_dir : malloc failed, errno = %d\n", errno);
-+              exit(1);
-+      }
-+      strcpy(uml_dir, dir);
-+      
-+      if((mkdir(uml_dir, 0777) < 0) && (errno != EEXIST)){
-+              printf("Failed to mkdir %s - errno = %i\n", uml_dir, errno);
-+              return(-1);
-+      }
-+      return 0;
-+}
-+
-+static int __init make_umid(int (*printer)(const char *fmt, ...))
-+{
-+      int fd, err;
-+      char tmp[strlen(uml_dir) + UMID_LEN + 1];
-+
-+      strncpy(tmp, uml_dir, sizeof(tmp) - 1);
-+      tmp[sizeof(tmp) - 1] = '\0';
-+
-+      if(!umid_inited){
-+              strcat(tmp, "XXXXXX");
-+              fd = mkstemp(tmp);
-+              if(fd < 0){
-+                      (*printer)("make_umid - mkstemp failed, errno = %d\n",
-+                                 errno);
-+                      return(1);
-+              }
-+
-+              close(fd);
-+              /* There's a nice tiny little race between this unlink and
-+               * the mkdir below.  It'd be nice if there were a mkstemp
-+               * for directories.
-+               */
-+              unlink(tmp);
-+              set_umid(&tmp[strlen(uml_dir)], 1, printer);
-+      }
-+      
-+      sprintf(tmp, "%s%s", uml_dir, umid);
-+
-+      if((err = mkdir(tmp, 0777)) < 0){
-+              if(errno == EEXIST){
-+                      if(not_dead_yet(tmp)){
-+                              (*printer)("umid '%s' is in use\n", umid);
-+                              return(-1);
-+                      }
-+                      err = mkdir(tmp, 0777);
-+              }
-+      }
-+      if(err < 0){
-+              (*printer)("Failed to create %s - errno = %d\n", umid, errno);
-+              return(-1);
-+      }
-+
-+      return(0);
-+}
-+
-+__uml_setup("uml_dir=", set_uml_dir,
-+"uml_dir=<directory>\n"
-+"    The location to place the pid and umid files.\n\n"
-+);
-+
-+__uml_postsetup(make_uml_dir);
-+
-+static int __init make_umid_setup(void)
-+{
-+      return(make_umid(printf));
-+}
-+
-+__uml_postsetup(make_umid_setup);
-+__uml_postsetup(create_pid_file);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/kernel/user_syms.c um/arch/um/kernel/user_syms.c
---- orig/arch/um/kernel/user_syms.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/user_syms.c      2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,116 @@
-+#include <stdio.h>
-+#include <unistd.h>
-+#include <fcntl.h>
-+#include <dirent.h>
-+#include <errno.h>
-+#include <utime.h>
-+#include <string.h>
-+#include <sys/stat.h>
-+#include <sys/vfs.h>
-+#include <sys/ioctl.h>
-+#include "user_util.h"
-+#include "mem_user.h"
-+
-+/* XXX All the __CONFIG_* stuff is broken because this file can't include
-+ * config.h
-+ */
-+
-+/* Had to steal this from linux/module.h because that file can't be included
-+ * since this includes various user-level headers.
-+ */
-+
-+struct module_symbol
-+{
-+      unsigned long value;
-+      const char *name;
-+};
-+
-+/* Indirect stringification.  */
-+
-+#define __MODULE_STRING_1(x)  #x
-+#define __MODULE_STRING(x)    __MODULE_STRING_1(x)
-+
-+#if !defined(__AUTOCONF_INCLUDED__)
-+
-+#define __EXPORT_SYMBOL(sym,str)   error config_must_be_included_before_module
-+#define EXPORT_SYMBOL(var)       error config_must_be_included_before_module
-+#define EXPORT_SYMBOL_NOVERS(var)  error config_must_be_included_before_module
-+
-+#elif !defined(__CONFIG_MODULES__)
-+
-+#define __EXPORT_SYMBOL(sym,str)
-+#define EXPORT_SYMBOL(var)
-+#define EXPORT_SYMBOL_NOVERS(var)
-+
-+#else
-+
-+#define __EXPORT_SYMBOL(sym, str)                     \
-+const char __kstrtab_##sym[]                          \
-+__attribute__((section(".kstrtab"))) = str;           \
-+const struct module_symbol __ksymtab_##sym            \
-+__attribute__((section("__ksymtab"))) =                       \
-+{ (unsigned long)&sym, __kstrtab_##sym }
-+
-+#if defined(__MODVERSIONS__) || !defined(__CONFIG_MODVERSIONS__)
-+#define EXPORT_SYMBOL(var)  __EXPORT_SYMBOL(var, __MODULE_STRING(var))
-+#else
-+#define EXPORT_SYMBOL(var)  __EXPORT_SYMBOL(var, __MODULE_STRING(__VERSIONED_SYMBOL(var)))
-+#endif
-+
-+#define EXPORT_SYMBOL_NOVERS(var)  __EXPORT_SYMBOL(var, __MODULE_STRING(var))
-+
-+#endif
-+
-+EXPORT_SYMBOL(__errno_location);
-+
-+EXPORT_SYMBOL(access);
-+EXPORT_SYMBOL(open);
-+EXPORT_SYMBOL(open64);
-+EXPORT_SYMBOL(close);
-+EXPORT_SYMBOL(read);
-+EXPORT_SYMBOL(write);
-+EXPORT_SYMBOL(dup2);
-+EXPORT_SYMBOL(__xstat);
-+EXPORT_SYMBOL(__lxstat);
-+EXPORT_SYMBOL(__lxstat64);
-+EXPORT_SYMBOL(lseek);
-+EXPORT_SYMBOL(lseek64);
-+EXPORT_SYMBOL(chown);
-+EXPORT_SYMBOL(truncate);
-+EXPORT_SYMBOL(utime);
-+EXPORT_SYMBOL(chmod);
-+EXPORT_SYMBOL(rename);
-+EXPORT_SYMBOL(__xmknod);
-+
-+EXPORT_SYMBOL(symlink);
-+EXPORT_SYMBOL(link);
-+EXPORT_SYMBOL(unlink);
-+EXPORT_SYMBOL(readlink);
-+
-+EXPORT_SYMBOL(mkdir);
-+EXPORT_SYMBOL(rmdir);
-+EXPORT_SYMBOL(opendir);
-+EXPORT_SYMBOL(readdir);
-+EXPORT_SYMBOL(closedir);
-+EXPORT_SYMBOL(seekdir);
-+EXPORT_SYMBOL(telldir);
-+
-+EXPORT_SYMBOL(ioctl);
-+
-+extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
-+                      __off64_t __offset);
-+extern ssize_t pwrite64 (int __fd, __const void *__buf, size_t __n,
-+                       __off64_t __offset);
-+EXPORT_SYMBOL(pread64);
-+EXPORT_SYMBOL(pwrite64);
-+
-+EXPORT_SYMBOL(statfs);
-+EXPORT_SYMBOL(statfs64);
-+
-+EXPORT_SYMBOL(memcpy);
-+EXPORT_SYMBOL(getuid);
-+
-+EXPORT_SYMBOL(memset);
-+EXPORT_SYMBOL(strstr);
-+
-+EXPORT_SYMBOL(find_iomem);
-diff -Naur -X ../exclude-files orig/arch/um/kernel/user_util.c um/arch/um/kernel/user_util.c
---- orig/arch/um/kernel/user_util.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/user_util.c      2003-04-23 20:41:54.000000000 -0400
-@@ -0,0 +1,164 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <fcntl.h>
-+#include <unistd.h>
-+#include <limits.h>
-+#include <sys/mman.h> 
-+#include <sys/stat.h>
-+#include <sys/ptrace.h>
-+#include <sys/utsname.h>
-+#include <sys/param.h>
-+#include <sys/time.h>
-+#include "asm/types.h"
-+#include <ctype.h>
-+#include <signal.h>
-+#include <wait.h>
-+#include <errno.h>
-+#include <stdarg.h>
-+#include <sched.h>
-+#include <termios.h>
-+#include <string.h>
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "mem_user.h"
-+#include "init.h"
-+#include "helper.h"
-+#include "uml-config.h"
-+
-+#define COMMAND_LINE_SIZE _POSIX_ARG_MAX
-+
-+/* Changed in linux_main and setup_arch, which run before SMP is started */
-+char saved_command_line[COMMAND_LINE_SIZE] = { 0 };
-+char command_line[COMMAND_LINE_SIZE] = { 0 };
-+
-+void add_arg(char *cmd_line, char *arg)
-+{
-+      if (strlen(cmd_line) + strlen(arg) + 1 > COMMAND_LINE_SIZE) {
-+              printf("add_arg: Too much command line!\n");
-+              exit(1);
-+      }
-+      if(strlen(cmd_line) > 0) strcat(cmd_line, " ");
-+      strcat(cmd_line, arg);
-+}
-+
-+void stop(void)
-+{
-+      while(1) sleep(1000000);
-+}
-+
-+void stack_protections(unsigned long address)
-+{
-+      int prot = PROT_READ | PROT_WRITE | PROT_EXEC;
-+
-+        if(mprotect((void *) address, page_size(), prot) < 0)
-+              panic("protecting stack failed, errno = %d", errno);
-+}
-+
-+void task_protections(unsigned long address)
-+{
-+      unsigned long guard = address + page_size();
-+      unsigned long stack = guard + page_size();
-+      int prot = 0, pages;
-+#ifdef notdef
-+      if(mprotect((void *) guard, page_size(), prot) < 0)
-+              panic("protecting guard page failed, errno = %d", errno);
-+#endif
-+      pages = (1 << UML_CONFIG_KERNEL_STACK_ORDER) - 2;
-+      prot = PROT_READ | PROT_WRITE | PROT_EXEC;
-+      if(mprotect((void *) stack, pages * page_size(), prot) < 0)
-+              panic("protecting stack failed, errno = %d", errno);
-+}
-+
-+int wait_for_stop(int pid, int sig, int cont_type, void *relay)
-+{
-+      sigset_t *relay_signals = relay;
-+      int status, ret;
-+
-+      while(1){
-+              if(((ret = waitpid(pid, &status, WUNTRACED)) < 0) ||
-+                 !WIFSTOPPED(status) || (WSTOPSIG(status) != sig)){
-+                      if(ret < 0){
-+                              if(errno == EINTR) continue;
-+                              printk("wait failed, errno = %d\n",
-+                                     errno);
-+                      }
-+                      else if(WIFEXITED(status)) 
-+                              printk("process exited with status %d\n", 
-+                                     WEXITSTATUS(status));
-+                      else if(WIFSIGNALED(status))
-+                              printk("process exited with signal %d\n", 
-+                                     WTERMSIG(status));
-+                      else if((WSTOPSIG(status) == SIGVTALRM) ||
-+                              (WSTOPSIG(status) == SIGALRM) ||
-+                              (WSTOPSIG(status) == SIGIO) ||
-+                              (WSTOPSIG(status) == SIGPROF) ||
-+                              (WSTOPSIG(status) == SIGCHLD) ||
-+                              (WSTOPSIG(status) == SIGWINCH) ||
-+                              (WSTOPSIG(status) == SIGINT)){
-+                              ptrace(cont_type, pid, 0, WSTOPSIG(status));
-+                              continue;
-+                      }
-+                      else if((relay_signals != NULL) &&
-+                              sigismember(relay_signals, WSTOPSIG(status))){
-+                              ptrace(cont_type, pid, 0, WSTOPSIG(status));
-+                              continue;
-+                      }
-+                      else printk("process stopped with signal %d\n", 
-+                                  WSTOPSIG(status));
-+                      panic("wait_for_stop failed to wait for %d to stop "
-+                            "with %d\n", pid, sig);
-+              }
-+              return(status);
-+      }
-+}
-+
-+int raw(int fd, int complain)
-+{
-+      struct termios tt;
-+      int err;
-+
-+      tcgetattr(fd, &tt);
-+      cfmakeraw(&tt);
-+      err = tcsetattr(fd, TCSANOW, &tt);
-+      if((err < 0) && complain){
-+              printk("tcsetattr failed, errno = %d\n", errno);
-+              return(-errno);
-+      }
-+      return(0);
-+}
-+
-+void setup_machinename(char *machine_out)
-+{
-+      struct utsname host;
-+
-+      uname(&host);
-+      strcpy(machine_out, host.machine);
-+}
-+
-+char host_info[(_UTSNAME_LENGTH + 1) * 4 + _UTSNAME_NODENAME_LENGTH + 1];
-+
-+void setup_hostinfo(void)
-+{
-+      struct utsname host;
-+
-+      uname(&host);
-+      sprintf(host_info, "%s %s %s %s %s", host.sysname, host.nodename,
-+              host.release, host.version, host.machine);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/link.ld.in um/arch/um/link.ld.in
---- orig/arch/um/link.ld.in    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/link.ld.in      2003-01-17 23:11:30.000000000 -0500
-@@ -0,0 +1,95 @@
-+OUTPUT_FORMAT("ELF_FORMAT")
-+OUTPUT_ARCH(ELF_ARCH)
-+ENTRY(_start)
-+
-+SECTIONS
-+{
-+  . = START() + SIZEOF_HEADERS;
-+
-+  . = ALIGN(4096);
-+  __binary_start = .;
-+ifdef(`MODE_TT', `
-+  .thread_private : {
-+    __start_thread_private = .;
-+    errno = .;
-+    . += 4;
-+    arch/um/kernel/tt/unmap_fin.o (.data)
-+    __end_thread_private = .;
-+  }
-+  . = ALIGN(4096);
-+  .remap : { arch/um/kernel/tt/unmap_fin.o (.text) }
-+')
-+  . = ALIGN(4096);            /* Init code and data */
-+  _stext = .;
-+  __init_begin = .;
-+  .text.init : { *(.text.init) }
-+  . = ALIGN(4096);
-+  .text      :
-+  {
-+    *(.text)
-+    /* .gnu.warning sections are handled specially by elf32.em.  */
-+    *(.gnu.warning)
-+    *(.gnu.linkonce.t*)
-+  }
-+  .fini      : { *(.fini)    } =0x9090
-+  .rodata    : { *(.rodata) *(.gnu.linkonce.r*) }
-+  .rodata1   : { *(.rodata1) }
-+  _etext = .;
-+  PROVIDE (etext = .);
-+
-+  . = ALIGN(4096);
-+  PROVIDE (_sdata = .);
-+
-+include(`arch/um/common.ld.in')
-+
-+  .data    :
-+  {
-+    . = ALIGN(KERNEL_STACK_SIZE);             /* init_task */
-+    *(.data.init_task)
-+    *(.data)
-+    *(.gnu.linkonce.d*)
-+    CONSTRUCTORS
-+  }
-+  .data1   : { *(.data1) }
-+  .ctors         :
-+  {
-+    *(.ctors)
-+  }
-+  .dtors         :
-+  {
-+    *(.dtors)
-+  }
-+
-+  .got           : { *(.got.plt) *(.got) }
-+  .dynamic       : { *(.dynamic) }
-+  /* We want the small data sections together, so single-instruction offsets
-+     can access them all, and initialized data all before uninitialized, so
-+     we can shorten the on-disk segment size.  */
-+  .sdata     : { *(.sdata) }
-+  _edata  =  .;
-+  PROVIDE (edata = .);
-+  . = ALIGN(0x1000);
-+  .sbss      : 
-+  {
-+   __bss_start = .;
-+   PROVIDE(_bss_start = .);
-+   *(.sbss) 
-+   *(.scommon) 
-+  }
-+  .bss       :
-+  {
-+   *(.dynbss)
-+   *(.bss)
-+   *(COMMON)
-+  }
-+  _end = . ;
-+  PROVIDE (end = .);
-+  /* Stabs debugging sections.  */
-+  .stab 0 : { *(.stab) }
-+  .stabstr 0 : { *(.stabstr) }
-+  .stab.excl 0 : { *(.stab.excl) }
-+  .stab.exclstr 0 : { *(.stab.exclstr) }
-+  .stab.index 0 : { *(.stab.index) }
-+  .stab.indexstr 0 : { *(.stab.indexstr) }
-+  .comment 0 : { *(.comment) }
-+}
-diff -Naur -X ../exclude-files orig/arch/um/main.c um/arch/um/main.c
---- orig/arch/um/main.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/main.c  2003-01-17 13:22:40.000000000 -0500
-@@ -0,0 +1,195 @@
-+/* 
-+ * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <unistd.h>
-+#include <stdio.h> 
-+#include <stdlib.h>
-+#include <string.h>
-+#include <signal.h>
-+#include <sys/resource.h>
-+#include <sys/mman.h>
-+#include <sys/user.h>
-+#include <asm/page.h>
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "mem_user.h"
-+#include "signal_user.h"
-+#include "user.h"
-+#include "init.h"
-+#include "mode.h"
-+#include "choose-mode.h"
-+#include "uml-config.h"
-+
-+/* Set in set_stklim, which is called from main and __wrap_malloc.  
-+ * __wrap_malloc only calls it if main hasn't started.
-+ */
-+unsigned long stacksizelim;
-+
-+/* Set in main */
-+char *linux_prog;
-+
-+#define PGD_BOUND (4 * 1024 * 1024)
-+#define STACKSIZE (8 * 1024 * 1024)
-+#define THREAD_NAME_LEN (256)
-+
-+static void set_stklim(void)
-+{
-+      struct rlimit lim;
-+
-+      if(getrlimit(RLIMIT_STACK, &lim) < 0){
-+              perror("getrlimit");
-+              exit(1);
-+      }
-+      if((lim.rlim_cur == RLIM_INFINITY) || (lim.rlim_cur > STACKSIZE)){
-+              lim.rlim_cur = STACKSIZE;
-+              if(setrlimit(RLIMIT_STACK, &lim) < 0){
-+                      perror("setrlimit");
-+                      exit(1);
-+              }
-+      }
-+      stacksizelim = (lim.rlim_cur + PGD_BOUND - 1) & ~(PGD_BOUND - 1);
-+}
-+
-+static __init void do_uml_initcalls(void)
-+{
-+      initcall_t *call;
-+
-+      call = &__uml_initcall_start;
-+      while (call < &__uml_initcall_end){;
-+              (*call)();
-+              call++;
-+      }
-+}
-+
-+static void last_ditch_exit(int sig)
-+{
-+      CHOOSE_MODE(kmalloc_ok = 0, (void) 0);
-+      signal(SIGINT, SIG_DFL);
-+      signal(SIGTERM, SIG_DFL);
-+      signal(SIGHUP, SIG_DFL);
-+      uml_cleanup();
-+      exit(1);
-+}
-+
-+extern int uml_exitcode;
-+
-+int main(int argc, char **argv, char **envp)
-+{
-+      char **new_argv;
-+      sigset_t mask;
-+      int ret, i;
-+
-+      /* Enable all signals except SIGIO - in some environments, we can 
-+       * enter with some signals blocked
-+       */
-+
-+      sigemptyset(&mask);
-+      sigaddset(&mask, SIGIO);
-+      if(sigprocmask(SIG_SETMASK, &mask, NULL) < 0){
-+              perror("sigprocmask");
-+              exit(1);
-+      }
-+
-+#ifdef UML_CONFIG_MODE_TT
-+      /* Allocate memory for thread command lines */
-+      if(argc < 2 || strlen(argv[1]) < THREAD_NAME_LEN - 1){
-+
-+              char padding[THREAD_NAME_LEN] = { 
-+                      [ 0 ...  THREAD_NAME_LEN - 2] = ' ', '\0' 
-+              };
-+
-+              new_argv = malloc((argc + 2) * sizeof(char*));
-+              if(!new_argv) {
-+                      perror("Allocating extended argv");
-+                      exit(1);
-+              }       
-+              
-+              new_argv[0] = argv[0];
-+              new_argv[1] = padding;
-+              
-+              for(i = 2; i <= argc; i++)
-+                      new_argv[i] = argv[i - 1];
-+              new_argv[argc + 1] = NULL;
-+              
-+              execvp(new_argv[0], new_argv);
-+              perror("execing with extended args");
-+              exit(1);
-+      }       
-+#endif
-+
-+      linux_prog = argv[0];
-+
-+      set_stklim();
-+
-+      if((new_argv = malloc((argc + 1) * sizeof(char *))) == NULL){
-+              perror("Mallocing argv");
-+              exit(1);
-+      }
-+      for(i=0;i<argc;i++){
-+              if((new_argv[i] = strdup(argv[i])) == NULL){
-+                      perror("Mallocing an arg");
-+                      exit(1);
-+              }
-+      }
-+      new_argv[argc] = NULL;
-+
-+      set_handler(SIGINT, last_ditch_exit, SA_ONESHOT | SA_NODEFER, -1);
-+      set_handler(SIGTERM, last_ditch_exit, SA_ONESHOT | SA_NODEFER, -1);
-+      set_handler(SIGHUP, last_ditch_exit, SA_ONESHOT | SA_NODEFER, -1);
-+
-+      do_uml_initcalls();
-+      ret = linux_main(argc, argv);
-+      
-+      /* Reboot */
-+      if(ret){
-+              printf("\n");
-+              execvp(new_argv[0], new_argv);
-+              perror("Failed to exec kernel");
-+              ret = 1;
-+      }
-+      printf("\n");
-+      return(uml_exitcode);
-+}
-+
-+#define CAN_KMALLOC() \
-+      (kmalloc_ok && CHOOSE_MODE((getpid() != tracing_pid), 1))
-+
-+extern void *__real_malloc(int);
-+
-+void *__wrap_malloc(int size)
-+{
-+      if(CAN_KMALLOC())
-+              return(um_kmalloc(size));
-+      else
-+              return(__real_malloc(size));
-+}
-+
-+void *__wrap_calloc(int n, int size)
-+{
-+      void *ptr = __wrap_malloc(n * size);
-+
-+      if(ptr == NULL) return(NULL);
-+      memset(ptr, 0, n * size);
-+      return(ptr);
-+}
-+
-+extern void __real_free(void *);
-+
-+void __wrap_free(void *ptr)
-+{
-+      if(CAN_KMALLOC()) kfree(ptr);
-+      else __real_free(ptr);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/Makefile um/arch/um/Makefile
---- orig/arch/um/Makefile      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/Makefile        2003-06-05 15:42:11.000000000 -0400
-@@ -0,0 +1,168 @@
-+# 
-+# Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+OS := $(shell uname -s)
-+
-+ARCH_DIR = arch/um
-+
-+core-y := kernel sys-$(SUBARCH) os-$(OS)
-+drivers-y := fs drivers
-+subdir-y := $(core-y) $(drivers-y)
-+SUBDIRS += $(foreach dir,$(subdir-y),$(ARCH_DIR)/$(dir))
-+
-+CORE_FILES += $(foreach dir,$(core-y),$(ARCH_DIR)/$(dir)/built-in.o)
-+DRIVERS += $(foreach dir,$(drivers-y),$(ARCH_DIR)/$(dir)/built-in.o)
-+
-+include $(ARCH_DIR)/Makefile-$(SUBARCH)
-+include $(ARCH_DIR)/Makefile-os-$(OS)
-+
-+MAKEFILE-$(CONFIG_MODE_TT) += Makefile-tt
-+MAKEFILE-$(CONFIG_MODE_SKAS) += Makefile-skas
-+
-+ifneq ($(MAKEFILE-y),)
-+  include $(addprefix $(ARCH_DIR)/,$(MAKEFILE-y))
-+endif
-+
-+EXTRAVERSION := $(EXTRAVERSION)-6um
-+
-+include/linux/version.h: arch/$(ARCH)/Makefile
-+
-+# Recalculate MODLIB to reflect the EXTRAVERSION changes (via KERNELRELEASE)
-+# The way the toplevel Makefile is written EXTRAVERSION is not supposed
-+# to be changed outside the toplevel Makefile, but recalculating MODLIB is
-+# a sufficient workaround until we no longer need architecture dependent
-+# EXTRAVERSION...
-+MODLIB := $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
-+
-+ifeq ($(CONFIG_DEBUGSYM),y)
-+CFLAGS := $(subst -fomit-frame-pointer,,$(CFLAGS))
-+endif
-+
-+CFLAGS-$(CONFIG_DEBUGSYM) += -g
-+
-+ARCH_INCLUDE = -I$(TOPDIR)/$(ARCH_DIR)/include
-+
-+# -Derrno=kernel_errno - This turns all kernel references to errno into
-+# kernel_errno to separate them from the libc errno.  This allows -fno-common
-+# in CFLAGS.  Otherwise, it would cause ld to complain about the two different
-+# errnos.
-+
-+CFLAGS += $(ARCH_CFLAGS) $(CFLAGS-y) -D__arch_um__ -DSUBARCH=\"$(SUBARCH)\" \
-+      -D_LARGEFILE64_SOURCE $(ARCH_INCLUDE) -Derrno=kernel_errno \
-+      $(MODE_INCLUDE)
-+
-+LINKFLAGS += -r
-+
-+LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc
-+
-+SIZE = (($(CONFIG_NEST_LEVEL) + $(CONFIG_KERNEL_HALF_GIGS)) * 0x20000000)
-+
-+# These aren't in Makefile-tt because they are needed in the !CONFIG_MODE_TT +
-+# CONFIG_MODE_SKAS + CONFIG_STATIC_LINK case.
-+
-+LINK_TT = -static
-+LD_SCRIPT_TT := link.ld
-+
-+ifeq ($(CONFIG_STATIC_LINK),y)
-+  LINK-y += $(LINK_TT)
-+  LD_SCRIPT-y := $(LD_SCRIPT_TT)
-+else
-+ifeq ($(CONFIG_MODE_TT),y)
-+  LINK-y += $(LINK_TT)
-+  LD_SCRIPT-y := $(LD_SCRIPT_TT)
-+else
-+ifeq ($(CONFIG_MODE_SKAS),y)
-+  LINK-y += $(LINK_SKAS)
-+  LD_SCRIPT-y := $(LD_SCRIPT_SKAS)
-+endif
-+endif
-+endif
-+
-+LD_SCRIPT-y := $(ARCH_DIR)/$(LD_SCRIPT-y)
-+M4_MODE_TT := $(shell [ "$(CONFIG_MODE_TT)" = "y" ] && echo -DMODE_TT)
-+
-+$(LD_SCRIPT-y): $(LD_SCRIPT-y).in
-+      pages=$$(( 1 << $(CONFIG_KERNEL_STACK_ORDER) )) ; \
-+      m4 -DSTART=$$(($(TOP_ADDR) - $(SIZE))) -DELF_ARCH=$(ELF_ARCH) \
-+              -DELF_FORMAT=$(ELF_FORMAT) $(M4_MODE_TT) \
-+              -DKERNEL_STACK_SIZE=$$(( 4096 * $$pages )) $< > $@
-+
-+SYMLINK_HEADERS = include/asm-um/archparam.h include/asm-um/system.h \
-+      include/asm-um/sigcontext.h include/asm-um/processor.h \
-+      include/asm-um/ptrace.h include/asm-um/arch-signal.h
-+
-+ARCH_SYMLINKS = include/asm-um/arch arch/um/include/sysdep arch/um/os \
-+      $(SYMLINK_HEADERS) $(ARCH_DIR)/include/uml-config.h
-+
-+ifeq ($(CONFIG_MODE_SKAS), y)
-+$(SYS_HEADERS) : $(ARCH_DIR)/kernel/skas/include/skas_ptregs.h
-+endif
-+
-+GEN_HEADERS += $(ARCH_DIR)/include/task.h $(ARCH_DIR)/include/kern_constants.h 
-+
-+setup: $(ARCH_SYMLINKS) $(SYS_HEADERS) $(GEN_HEADERS) 
-+
-+linux: setup $(ARCH_DIR)/main.o vmlinux $(LD_SCRIPT-y)
-+      mv vmlinux vmlinux.o
-+      $(CC) -Wl,-T,$(LD_SCRIPT-y) $(LINK-y) $(LINK_WRAPS) \
-+              -o linux $(ARCH_DIR)/main.o vmlinux.o -L/usr/lib -lutil
-+
-+USER_CFLAGS := $(patsubst -I%,,$(CFLAGS))
-+USER_CFLAGS := $(patsubst -Derrno=kernel_errno,,$(USER_CFLAGS))
-+USER_CFLAGS := $(patsubst -D__KERNEL__,,$(USER_CFLAGS)) $(ARCH_INCLUDE) \
-+      $(MODE_INCLUDE)
-+
-+# To get a definition of F_SETSIG
-+USER_CFLAGS += -D_GNU_SOURCE
-+
-+CLEAN_FILES += linux x.i gmon.out $(ARCH_DIR)/link.ld $(ARCH_DIR)/dyn_link.ld \
-+      $(GEN_HEADERS) $(ARCH_DIR)/include/uml-config.h
-+
-+$(ARCH_DIR)/main.o: $(ARCH_DIR)/main.c
-+      $(CC) $(USER_CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<
-+
-+archmrproper:
-+      rm -f $(SYMLINK_HEADERS) $(ARCH_SYMLINKS) include/asm \
-+              $(LD_SCRIPT) $(addprefix $(ARCH_DIR)/kernel/,$(KERN_SYMLINKS))
-+
-+archclean: sysclean
-+      find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
-+              -o -name '*.gcov' \) -type f -print | xargs rm -f
-+      cd $(ARCH_DIR) ; \
-+      for dir in $(subdir-y) util ; do $(MAKE) -C $$dir clean; done
-+
-+archdep: 
-+
-+$(SYMLINK_HEADERS):
-+      cd $(TOPDIR)/$(dir $@) ; \
-+      ln -sf $(basename $(notdir $@))-$(SUBARCH)$(suffix $@) $(notdir $@)
-+
-+include/asm-um/arch:
-+      cd $(TOPDIR)/include/asm-um && ln -sf ../asm-$(SUBARCH) arch
-+
-+arch/um/include/sysdep:
-+      cd $(TOPDIR)/arch/um/include && ln -sf sysdep-$(SUBARCH) sysdep
-+
-+arch/um/os:
-+      cd $(ARCH_DIR) && ln -sf os-$(OS) os
-+
-+$(ARCH_DIR)/include/task.h : $(ARCH_DIR)/util/mk_task
-+      $< > $@
-+
-+$(ARCH_DIR)/include/kern_constants.h : $(ARCH_DIR)/util/mk_constants
-+      $< > $@
-+
-+$(ARCH_DIR)/include/uml-config.h : $(TOPDIR)/include/linux/autoconf.h
-+      sed 's/ CONFIG/ UML_CONFIG/' $(TOPDIR)/include/linux/autoconf.h > $@
-+
-+$(ARCH_DIR)/util/mk_task : $(ARCH_DIR)/util/mk_task_user.c \
-+      $(ARCH_DIR)/util/mk_task_kern.c $(SYS_HEADERS)
-+      $(MAKE) $(MFLAGS) -C $(ARCH_DIR)/util mk_task
-+
-+$(ARCH_DIR)/util/mk_constants : $(ARCH_DIR)/util/mk_constants_user.c \
-+      $(ARCH_DIR)/util/mk_constants_kern.c 
-+      $(MAKE) $(MFLAGS) -C $(ARCH_DIR)/util mk_constants
-+
-+export SUBARCH USER_CFLAGS OS
-diff -Naur -X ../exclude-files orig/arch/um/Makefile-i386 um/arch/um/Makefile-i386
---- orig/arch/um/Makefile-i386 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/Makefile-i386   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,35 @@
-+ifeq ($(CONFIG_HOST_2G_2G), y)
-+TOP_ADDR = 0x80000000
-+else
-+TOP_ADDR = 0xc0000000
-+endif
-+
-+ARCH_CFLAGS = -U__$(SUBARCH)__ -U$(SUBARCH) -DUM_FASTCALL
-+ELF_ARCH = $(SUBARCH)
-+ELF_FORMAT = elf32-$(SUBARCH)
-+
-+I386_H = $(ARCH_DIR)/include/sysdep-i386
-+SYS = $(ARCH_DIR)/sys-i386
-+UTIL = $(SYS)/util
-+SUBDIRS += $(UTIL)
-+
-+SYS_HEADERS = $(I386_H)/sc.h $(I386_H)/thread.h
-+
-+$(I386_H)/sc.h : $(UTIL)/mk_sc
-+      $(UTIL)/mk_sc > $@
-+
-+$(I386_H)/thread.h : $(UTIL)/mk_thread
-+      $(UTIL)/mk_thread > $@
-+
-+$(UTIL)/mk_sc : $(UTIL)/mk_sc.c
-+      $(MAKE) -C $(UTIL) mk_sc
-+
-+$(UTIL)/mk_thread : $(UTIL)/mk_thread_user.c $(UTIL)/mk_thread_kern.c \
-+      $(I386_H)/sc.h
-+      $(MAKE) -C $(UTIL) mk_thread
-+
-+sysclean :
-+      rm -f $(SYS_HEADERS)
-+      $(MAKE) -C $(UTIL) clean
-+      $(MAKE) -C $(SYS) clean
-+
-diff -Naur -X ../exclude-files orig/arch/um/Makefile-ia64 um/arch/um/Makefile-ia64
---- orig/arch/um/Makefile-ia64 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/Makefile-ia64   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1 @@
-+START_ADDR = 0x1000000000000000
-diff -Naur -X ../exclude-files orig/arch/um/Makefile-os-Linux um/arch/um/Makefile-os-Linux
---- orig/arch/um/Makefile-os-Linux     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/Makefile-os-Linux       2002-12-09 14:21:51.000000000 -0500
-@@ -0,0 +1,7 @@
-+# 
-+# Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+SUBDIRS += $(ARCH_DIR)/os-$(OS)/drivers
-+DRIVERS += $(ARCH_DIR)/os-$(OS)/drivers/drivers.o
-diff -Naur -X ../exclude-files orig/arch/um/Makefile-ppc um/arch/um/Makefile-ppc
---- orig/arch/um/Makefile-ppc  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/Makefile-ppc    2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,9 @@
-+ifeq ($(CONFIG_HOST_2G_2G), y)
-+START_ADDR = 0x80000000
-+else
-+START_ADDR = 0xc0000000
-+endif
-+ARCH_CFLAGS = -U__powerpc__ -D__UM_PPC__
-+
-+# The arch is ppc, but the elf32 name is powerpc
-+ELF_SUBARCH = powerpc
-diff -Naur -X ../exclude-files orig/arch/um/Makefile-skas um/arch/um/Makefile-skas
---- orig/arch/um/Makefile-skas 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/Makefile-skas   2002-12-15 22:02:57.000000000 -0500
-@@ -0,0 +1,20 @@
-+# 
-+# Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+PROFILE += -pg
-+
-+CFLAGS-$(CONFIG_GCOV) += -fprofile-arcs -ftest-coverage
-+CFLAGS-$(CONFIG_GPROF) += $(PROFILE)
-+LINK-$(CONFIG_GPROF) += $(PROFILE)
-+
-+MODE_INCLUDE += -I$(TOPDIR)/$(ARCH_DIR)/kernel/skas/include
-+
-+LINK_SKAS = -Wl,-rpath,/lib 
-+LD_SCRIPT_SKAS = dyn_link.ld
-+
-+GEN_HEADERS += $(ARCH_DIR)/kernel/skas/include/skas_ptregs.h
-+
-+$(ARCH_DIR)/kernel/skas/include/skas_ptregs.h :
-+      $(MAKE) -C $(ARCH_DIR)/kernel/skas include/skas_ptregs.h
-diff -Naur -X ../exclude-files orig/arch/um/Makefile-tt um/arch/um/Makefile-tt
---- orig/arch/um/Makefile-tt   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/Makefile-tt     2002-12-16 20:22:23.000000000 -0500
-@@ -0,0 +1,7 @@
-+# 
-+# Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+MODE_INCLUDE += -I$(TOPDIR)/$(ARCH_DIR)/kernel/tt/include
-+
-diff -Naur -X ../exclude-files orig/arch/um/os-Linux/drivers/etap.h um/arch/um/os-Linux/drivers/etap.h
---- orig/arch/um/os-Linux/drivers/etap.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/drivers/etap.h 2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,27 @@
-+/* 
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "net_user.h"
-+
-+struct ethertap_data {
-+      char *dev_name;
-+      char *gate_addr;
-+      int data_fd;
-+      int control_fd;
-+      void *dev;
-+};
-+
-+extern struct net_user_info ethertap_user_info;
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/os-Linux/drivers/ethertap_kern.c um/arch/um/os-Linux/drivers/ethertap_kern.c
---- orig/arch/um/os-Linux/drivers/ethertap_kern.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/drivers/ethertap_kern.c        2002-12-15 21:17:37.000000000 -0500
-@@ -0,0 +1,122 @@
-+/*
-+ * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) and 
-+ * James Leu (jleu@mindspring.net).
-+ * Copyright (C) 2001 by various other people who didn't put their name here.
-+ * Licensed under the GPL.
-+ */
-+
-+#include "linux/init.h"
-+#include "linux/netdevice.h"
-+#include "linux/etherdevice.h"
-+#include "linux/init.h"
-+#include "net_kern.h"
-+#include "net_user.h"
-+#include "etap.h"
-+
-+struct ethertap_init {
-+      char *dev_name;
-+      char *gate_addr;
-+};
-+
-+static void etap_init(struct net_device *dev, void *data)
-+{
-+      struct uml_net_private *pri;
-+      struct ethertap_data *epri;
-+      struct ethertap_init *init = data;
-+
-+      init_etherdev(dev, 0);
-+      pri = dev->priv;
-+      epri = (struct ethertap_data *) pri->user;
-+      *epri = ((struct ethertap_data)
-+              { .dev_name             = init->dev_name,
-+                .gate_addr            = init->gate_addr,
-+                .data_fd              = -1,
-+                .control_fd           = -1,
-+                .dev                  = dev });
-+
-+      printk("ethertap backend - %s", epri->dev_name);
-+      if(epri->gate_addr != NULL) 
-+              printk(", IP = %s", epri->gate_addr);
-+      printk("\n");
-+}
-+
-+static int etap_read(int fd, struct sk_buff **skb, struct uml_net_private *lp)
-+{
-+      int len;
-+
-+      *skb = ether_adjust_skb(*skb, ETH_HEADER_ETHERTAP);
-+      if(*skb == NULL) return(-ENOMEM);
-+      len = net_recvfrom(fd, (*skb)->mac.raw, 
-+                         (*skb)->dev->mtu + 2 * ETH_HEADER_ETHERTAP);
-+      if(len <= 0) return(len);
-+      skb_pull(*skb, 2);
-+      len -= 2;
-+      return(len);
-+}
-+
-+static int etap_write(int fd, struct sk_buff **skb, struct uml_net_private *lp)
-+{
-+      if(skb_headroom(*skb) < 2){
-+              struct sk_buff *skb2;
-+
-+              skb2 = skb_realloc_headroom(*skb, 2);
-+              dev_kfree_skb(*skb);
-+              if (skb2 == NULL) return(-ENOMEM);
-+              *skb = skb2;
-+      }
-+      skb_push(*skb, 2);
-+      return(net_send(fd, (*skb)->data, (*skb)->len));
-+}
-+
-+struct net_kern_info ethertap_kern_info = {
-+      .init                   = etap_init,
-+      .protocol               = eth_protocol,
-+      .read                   = etap_read,
-+      .write                  = etap_write,
-+};
-+
-+int ethertap_setup(char *str, char **mac_out, void *data)
-+{
-+      struct ethertap_init *init = data;
-+
-+      *init = ((struct ethertap_init)
-+              { .dev_name     = NULL,
-+                .gate_addr    = NULL });
-+      if(tap_setup_common(str, "ethertap", &init->dev_name, mac_out,
-+                          &init->gate_addr))
-+              return(0);
-+      if(init->dev_name == NULL){
-+              printk("ethertap_setup : Missing tap device name\n");
-+              return(0);
-+      }
-+
-+      return(1);
-+}
-+
-+static struct transport ethertap_transport = {
-+      .list           = LIST_HEAD_INIT(ethertap_transport.list),
-+      .name           = "ethertap",
-+      .setup          = ethertap_setup,
-+      .user           = &ethertap_user_info,
-+      .kern           = &ethertap_kern_info,
-+      .private_size   = sizeof(struct ethertap_data),
-+};
-+
-+static int register_ethertap(void)
-+{
-+      register_transport(&ethertap_transport);
-+      return(1);
-+}
-+
-+__initcall(register_ethertap);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/os-Linux/drivers/ethertap_user.c um/arch/um/os-Linux/drivers/ethertap_user.c
---- orig/arch/um/os-Linux/drivers/ethertap_user.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/drivers/ethertap_user.c        2002-12-15 21:17:52.000000000 -0500
-@@ -0,0 +1,238 @@
-+/*
-+ * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) and 
-+ * James Leu (jleu@mindspring.net).
-+ * Copyright (C) 2001 by various other people who didn't put their name here.
-+ * Licensed under the GPL.
-+ */
-+
-+#include <stdio.h>
-+#include <unistd.h>
-+#include <stddef.h>
-+#include <fcntl.h>
-+#include <stdlib.h>
-+#include <sys/errno.h>
-+#include <sys/socket.h>
-+#include <sys/wait.h>
-+#include <sys/un.h>
-+#include <net/if.h>
-+#include "user.h"
-+#include "kern_util.h"
-+#include "net_user.h"
-+#include "etap.h"
-+#include "helper.h"
-+#include "os.h"
-+
-+#define MAX_PACKET ETH_MAX_PACKET
-+
-+void etap_user_init(void *data, void *dev)
-+{
-+      struct ethertap_data *pri = data;
-+
-+      pri->dev = dev;
-+}
-+
-+struct addr_change {
-+      enum { ADD_ADDR, DEL_ADDR } what;
-+      unsigned char addr[4];
-+      unsigned char netmask[4];
-+};
-+
-+static void etap_change(int op, unsigned char *addr, unsigned char *netmask,
-+                      int fd)
-+{
-+      struct addr_change change;
-+      void *output;
-+
-+      change.what = op;
-+      memcpy(change.addr, addr, sizeof(change.addr));
-+      memcpy(change.netmask, netmask, sizeof(change.netmask));
-+      if(write(fd, &change, sizeof(change)) != sizeof(change))
-+              printk("etap_change - request failed, errno = %d\n",
-+                     errno);
-+      output = um_kmalloc(page_size());
-+      if(output == NULL)
-+              printk("etap_change : Failed to allocate output buffer\n");
-+      read_output(fd, output, page_size());
-+      if(output != NULL){
-+              printk("%s", output);
-+              kfree(output);
-+      }
-+}
-+
-+static void etap_open_addr(unsigned char *addr, unsigned char *netmask,
-+                         void *arg)
-+{
-+      etap_change(ADD_ADDR, addr, netmask, *((int *) arg));
-+}
-+
-+static void etap_close_addr(unsigned char *addr, unsigned char *netmask,
-+                          void *arg)
-+{
-+      etap_change(DEL_ADDR, addr, netmask, *((int *) arg));
-+}
-+
-+struct etap_pre_exec_data {
-+      int control_remote;
-+      int control_me;
-+      int data_me;
-+};
-+
-+static void etap_pre_exec(void *arg)
-+{
-+      struct etap_pre_exec_data *data = arg;
-+
-+      dup2(data->control_remote, 1);
-+      close(data->data_me);
-+      close(data->control_me);
-+}
-+
-+static int etap_tramp(char *dev, char *gate, int control_me, 
-+                    int control_remote, int data_me, int data_remote)
-+{
-+      struct etap_pre_exec_data pe_data;
-+      int pid, status, err;
-+      char version_buf[sizeof("nnnnn\0")];
-+      char data_fd_buf[sizeof("nnnnnn\0")];
-+      char gate_buf[sizeof("nnn.nnn.nnn.nnn\0")];
-+      char *setup_args[] = { "uml_net", version_buf, "ethertap", dev,
-+                             data_fd_buf, gate_buf, NULL };
-+      char *nosetup_args[] = { "uml_net", version_buf, "ethertap", 
-+                               dev, data_fd_buf, NULL };
-+      char **args, c;
-+
-+      sprintf(data_fd_buf, "%d", data_remote);
-+      sprintf(version_buf, "%d", UML_NET_VERSION);
-+      if(gate != NULL){
-+              strcpy(gate_buf, gate);
-+              args = setup_args;
-+      }
-+      else args = nosetup_args;
-+
-+      err = 0;
-+      pe_data.control_remote = control_remote;
-+      pe_data.control_me = control_me;
-+      pe_data.data_me = data_me;
-+      pid = run_helper(etap_pre_exec, &pe_data, args, NULL);
-+
-+      if(pid < 0) err = errno;
-+      close(data_remote);
-+      close(control_remote);
-+      if(read(control_me, &c, sizeof(c)) != sizeof(c)){
-+              printk("etap_tramp : read of status failed, errno = %d\n",
-+                     errno);
-+              return(EINVAL);
-+      }
-+      if(c != 1){
-+              printk("etap_tramp : uml_net failed\n");
-+              err = EINVAL;
-+              if(waitpid(pid, &status, 0) < 0) err = errno;
-+              else if(!WIFEXITED(status) || (WEXITSTATUS(status) != 1)){
-+                      printk("uml_net didn't exit with status 1\n");
-+              }
-+      }
-+      return(err);
-+}
-+
-+static int etap_open(void *data)
-+{
-+      struct ethertap_data *pri = data;
-+      char *output;
-+      int data_fds[2], control_fds[2], err, output_len;
-+
-+      err = tap_open_common(pri->dev, pri->gate_addr);
-+      if(err) return(err);
-+
-+      err = os_pipe(data_fds, 0, 0);
-+      if(err){
-+              printk("data os_pipe failed - errno = %d\n", -err);
-+              return(err);
-+      }
-+
-+      err = os_pipe(control_fds, 1, 0);
-+      if(err){
-+              printk("control os_pipe failed - errno = %d\n", -err);
-+              return(err);
-+      }
-+      
-+      err = etap_tramp(pri->dev_name, pri->gate_addr, control_fds[0], 
-+                       control_fds[1], data_fds[0], data_fds[1]);
-+      output_len = page_size();
-+      output = um_kmalloc(output_len);
-+      read_output(control_fds[0], output, output_len);
-+
-+      if(output == NULL)
-+              printk("etap_open : failed to allocate output buffer\n");
-+      else {
-+              printk("%s", output);
-+              kfree(output);
-+      }
-+
-+      if(err != 0){
-+              printk("etap_tramp failed - errno = %d\n", err);
-+              return(-err);
-+      }
-+
-+      pri->data_fd = data_fds[0];
-+      pri->control_fd = control_fds[0];
-+      iter_addresses(pri->dev, etap_open_addr, &pri->control_fd);
-+      return(data_fds[0]);
-+}
-+
-+static void etap_close(int fd, void *data)
-+{
-+      struct ethertap_data *pri = data;
-+
-+      iter_addresses(pri->dev, etap_close_addr, &pri->control_fd);
-+      close(fd);
-+      os_shutdown_socket(pri->data_fd, 1, 1);
-+      close(pri->data_fd);
-+      pri->data_fd = -1;
-+      close(pri->control_fd);
-+      pri->control_fd = -1;
-+}
-+
-+static int etap_set_mtu(int mtu, void *data)
-+{
-+      return(mtu);
-+}
-+
-+static void etap_add_addr(unsigned char *addr, unsigned char *netmask,
-+                        void *data)
-+{
-+      struct ethertap_data *pri = data;
-+
-+      tap_check_ips(pri->gate_addr, addr);
-+      if(pri->control_fd == -1) return;
-+      etap_open_addr(addr, netmask, &pri->control_fd);
-+}
-+
-+static void etap_del_addr(unsigned char *addr, unsigned char *netmask, 
-+                        void *data)
-+{
-+      struct ethertap_data *pri = data;
-+
-+      if(pri->control_fd == -1) return;
-+      etap_close_addr(addr, netmask, &pri->control_fd);
-+}
-+
-+struct net_user_info ethertap_user_info = {
-+      .init           = etap_user_init,
-+      .open           = etap_open,
-+      .close          = etap_close,
-+      .remove         = NULL,
-+      .set_mtu        = etap_set_mtu,
-+      .add_address    = etap_add_addr,
-+      .delete_address = etap_del_addr,
-+      .max_packet     = MAX_PACKET - ETH_HEADER_ETHERTAP
-+};
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/os-Linux/drivers/Makefile um/arch/um/os-Linux/drivers/Makefile
---- orig/arch/um/os-Linux/drivers/Makefile     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/drivers/Makefile       2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,31 @@
-+# 
-+# Copyright (C) 2000, 2002 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+O_TARGET := drivers.o
-+
-+list-multi := tuntap.o ethertap.o
-+
-+ethertap-objs := ethertap_kern.o ethertap_user.o
-+tuntap-objs := tuntap_kern.o tuntap_user.o
-+
-+obj-y = 
-+obj-$(CONFIG_UML_NET_ETHERTAP) += ethertap.o
-+obj-$(CONFIG_UML_NET_TUNTAP) += tuntap.o
-+
-+USER_SINGLE_OBJS = $(foreach f,$(patsubst %.o,%,$(obj-y)),$($(f)-objs))
-+
-+USER_OBJS = $(filter %_user.o,$(obj-y) $(USER_SINGLE_OBJS))
-+
-+include $(TOPDIR)/Rules.make
-+
-+$(USER_OBJS) : %.o: %.c
-+      $(CC) $(CFLAGS_$@) $(USER_CFLAGS) -c -o $@ $<
-+
-+ethertap.o : $(ethertap-objs)
-+
-+tuntap.o : $(tuntap-objs)
-+
-+$(list-multi) : # This doesn't work, but should : '%.o : $(%-objs)'
-+      $(LD) $(LD_RFLAG) -r -o $@ $($(patsubst %.o,%,$@)-objs)
-diff -Naur -X ../exclude-files orig/arch/um/os-Linux/drivers/tuntap.h um/arch/um/os-Linux/drivers/tuntap.h
---- orig/arch/um/os-Linux/drivers/tuntap.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/drivers/tuntap.h       2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,32 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_TUNTAP_H
-+#define __UM_TUNTAP_H
-+
-+#include "net_user.h"
-+
-+struct tuntap_data {
-+      char *dev_name;
-+      int fixed_config;
-+      char *gate_addr;
-+      int fd;
-+      void *dev;
-+};
-+
-+extern struct net_user_info tuntap_user_info;
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/os-Linux/drivers/tuntap_kern.c um/arch/um/os-Linux/drivers/tuntap_kern.c
---- orig/arch/um/os-Linux/drivers/tuntap_kern.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/drivers/tuntap_kern.c  2002-12-15 21:18:16.000000000 -0500
-@@ -0,0 +1,105 @@
-+/* 
-+ * Copyright (C) 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/stddef.h"
-+#include "linux/netdevice.h"
-+#include "linux/etherdevice.h"
-+#include "linux/skbuff.h"
-+#include "linux/init.h"
-+#include "asm/errno.h"
-+#include "net_kern.h"
-+#include "net_user.h"
-+#include "tuntap.h"
-+
-+struct tuntap_init {
-+      char *dev_name;
-+      char *gate_addr;
-+};
-+
-+static void tuntap_init(struct net_device *dev, void *data)
-+{
-+      struct uml_net_private *pri;
-+      struct tuntap_data *tpri;
-+      struct tuntap_init *init = data;
-+
-+      init_etherdev(dev, 0);
-+      pri = dev->priv;
-+      tpri = (struct tuntap_data *) pri->user;
-+      *tpri = ((struct tuntap_data)
-+              { .dev_name             = init->dev_name,
-+                .fixed_config         = (init->dev_name != NULL),
-+                .gate_addr            = init->gate_addr,
-+                .fd                   = -1,
-+                .dev                  = dev });
-+      printk("TUN/TAP backend - ");
-+      if(tpri->gate_addr != NULL) 
-+              printk("IP = %s", tpri->gate_addr);
-+      printk("\n");
-+}
-+
-+static int tuntap_read(int fd, struct sk_buff **skb, 
-+                     struct uml_net_private *lp)
-+{
-+      *skb = ether_adjust_skb(*skb, ETH_HEADER_OTHER);
-+      if(*skb == NULL) return(-ENOMEM);
-+      return(net_read(fd, (*skb)->mac.raw, 
-+                      (*skb)->dev->mtu + ETH_HEADER_OTHER));
-+}
-+
-+static int tuntap_write(int fd, struct sk_buff **skb, 
-+                      struct uml_net_private *lp)
-+{
-+      return(net_write(fd, (*skb)->data, (*skb)->len));
-+}
-+
-+struct net_kern_info tuntap_kern_info = {
-+      .init                   = tuntap_init,
-+      .protocol               = eth_protocol,
-+      .read                   = tuntap_read,
-+      .write                  = tuntap_write,
-+};
-+
-+int tuntap_setup(char *str, char **mac_out, void *data)
-+{
-+      struct tuntap_init *init = data;
-+
-+      *init = ((struct tuntap_init)
-+              { .dev_name     = NULL,
-+                .gate_addr    = NULL });
-+      if(tap_setup_common(str, "tuntap", &init->dev_name, mac_out,
-+                          &init->gate_addr))
-+              return(0);
-+
-+      return(1);
-+}
-+
-+static struct transport tuntap_transport = {
-+      .list           = LIST_HEAD_INIT(tuntap_transport.list),
-+      .name           = "tuntap",
-+      .setup          = tuntap_setup,
-+      .user           = &tuntap_user_info,
-+      .kern           = &tuntap_kern_info,
-+      .private_size   = sizeof(struct tuntap_data),
-+      .setup_size     = sizeof(struct tuntap_init),
-+};
-+
-+static int register_tuntap(void)
-+{
-+      register_transport(&tuntap_transport);
-+      return(1);
-+}
-+
-+__initcall(register_tuntap);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/os-Linux/drivers/tuntap_user.c um/arch/um/os-Linux/drivers/tuntap_user.c
---- orig/arch/um/os-Linux/drivers/tuntap_user.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/drivers/tuntap_user.c  2002-12-15 21:18:25.000000000 -0500
-@@ -0,0 +1,223 @@
-+/* 
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <stddef.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <sys/wait.h>
-+#include <sys/socket.h>
-+#include <sys/un.h>
-+#include <sys/uio.h>
-+#include <sys/ioctl.h>
-+#include <net/if.h>
-+#include <linux/if_tun.h>
-+#include "net_user.h"
-+#include "tuntap.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "helper.h"
-+#include "os.h"
-+
-+#define MAX_PACKET ETH_MAX_PACKET
-+
-+void tuntap_user_init(void *data, void *dev)
-+{
-+      struct tuntap_data *pri = data;
-+
-+      pri->dev = dev;
-+}
-+
-+static void tuntap_add_addr(unsigned char *addr, unsigned char *netmask,
-+                          void *data)
-+{
-+      struct tuntap_data *pri = data;
-+
-+      tap_check_ips(pri->gate_addr, addr);
-+      if((pri->fd == -1) || pri->fixed_config) return;
-+      open_addr(addr, netmask, pri->dev_name);
-+}
-+
-+static void tuntap_del_addr(unsigned char *addr, unsigned char *netmask,
-+                          void *data)
-+{
-+      struct tuntap_data *pri = data;
-+
-+      if((pri->fd == -1) || pri->fixed_config) return;
-+      close_addr(addr, netmask, pri->dev_name);
-+}
-+
-+struct tuntap_pre_exec_data {
-+      int stdout;
-+      int close_me;
-+};
-+
-+static void tuntap_pre_exec(void *arg)
-+{
-+      struct tuntap_pre_exec_data *data = arg;
-+      
-+      dup2(data->stdout, 1);
-+      close(data->close_me);
-+}
-+
-+static int tuntap_open_tramp(char *gate, int *fd_out, int me, int remote,
-+                           char *buffer, int buffer_len, int *used_out)
-+{
-+      struct tuntap_pre_exec_data data;
-+      char version_buf[sizeof("nnnnn\0")];
-+      char *argv[] = { "uml_net", version_buf, "tuntap", "up", gate,
-+                       NULL };
-+      char buf[CMSG_SPACE(sizeof(*fd_out))];
-+      struct msghdr msg;
-+      struct cmsghdr *cmsg;
-+      struct iovec iov;
-+      int pid, n;
-+
-+      sprintf(version_buf, "%d", UML_NET_VERSION);
-+
-+      data.stdout = remote;
-+      data.close_me = me;
-+
-+      pid = run_helper(tuntap_pre_exec, &data, argv, NULL);
-+
-+      if(pid < 0) return(-pid);
-+
-+      close(remote);
-+
-+      msg.msg_name = NULL;
-+      msg.msg_namelen = 0;
-+      if(buffer != NULL){
-+              iov = ((struct iovec) { buffer, buffer_len });
-+              msg.msg_iov = &iov;
-+              msg.msg_iovlen = 1;
-+      }
-+      else {
-+              msg.msg_iov = NULL;
-+              msg.msg_iovlen = 0;
-+      }
-+      msg.msg_control = buf;
-+      msg.msg_controllen = sizeof(buf);
-+      msg.msg_flags = 0;
-+      n = recvmsg(me, &msg, 0);
-+      *used_out = n;
-+      if(n < 0){
-+              printk("tuntap_open_tramp : recvmsg failed - errno = %d\n", 
-+                     errno);
-+              return(errno);
-+      }
-+      waitpid(pid, NULL, 0);
-+
-+      cmsg = CMSG_FIRSTHDR(&msg);
-+      if(cmsg == NULL){
-+              printk("tuntap_open_tramp : didn't receive a message\n");
-+              return(EINVAL);
-+      }
-+      if((cmsg->cmsg_level != SOL_SOCKET) || 
-+         (cmsg->cmsg_type != SCM_RIGHTS)){
-+              printk("tuntap_open_tramp : didn't receive a descriptor\n");
-+              return(EINVAL);
-+      }
-+      *fd_out = ((int *) CMSG_DATA(cmsg))[0];
-+      return(0);
-+}
-+
-+static int tuntap_open(void *data)
-+{
-+      struct ifreq ifr;
-+      struct tuntap_data *pri = data;
-+      char *output, *buffer;
-+      int err, fds[2], len, used;
-+
-+      err = tap_open_common(pri->dev, pri->gate_addr);
-+      if(err) return(err);
-+
-+      if(pri->fixed_config){
-+              if((pri->fd = open("/dev/net/tun", O_RDWR)) < 0){
-+                      printk("Failed to open /dev/net/tun, errno = %d\n",
-+                             errno);
-+                      return(-errno);
-+              }
-+              memset(&ifr, 0, sizeof(ifr));
-+              ifr.ifr_flags = IFF_TAP;
-+              strncpy(ifr.ifr_name, pri->dev_name, sizeof(ifr.ifr_name) - 1);
-+              if(ioctl(pri->fd, TUNSETIFF, (void *) &ifr) < 0){
-+                      printk("TUNSETIFF failed, errno = %d", errno);
-+                      close(pri->fd);
-+                      return(-errno);
-+              }
-+      }
-+      else {
-+              err = os_pipe(fds, 0, 0);
-+              if(err){
-+                      printk("tuntap_open : os_pipe failed - errno = %d\n",
-+                             -err);
-+                      return(err);
-+              }
-+
-+              buffer = get_output_buffer(&len);
-+              if(buffer != NULL) len--;
-+              used = 0;
-+
-+              err = tuntap_open_tramp(pri->gate_addr, &pri->fd, fds[0],
-+                                      fds[1], buffer, len, &used);
-+
-+              output = buffer;
-+              if(err == 0){
-+                      pri->dev_name = uml_strdup(buffer);
-+                      output += IFNAMSIZ;
-+                      printk(output);
-+                      free_output_buffer(buffer);
-+              }
-+              else {
-+                      printk(output);
-+                      free_output_buffer(buffer);
-+                      printk("tuntap_open_tramp failed - errno = %d\n", err);
-+                      return(-err);
-+              }
-+              close(fds[0]);
-+              iter_addresses(pri->dev, open_addr, pri->dev_name);
-+      }
-+
-+      return(pri->fd);
-+}
-+
-+static void tuntap_close(int fd, void *data)
-+{
-+      struct tuntap_data *pri = data;
-+
-+      if(!pri->fixed_config) 
-+              iter_addresses(pri->dev, close_addr, pri->dev_name);
-+      close(fd);
-+      pri->fd = -1;
-+}
-+
-+static int tuntap_set_mtu(int mtu, void *data)
-+{
-+      return(mtu);
-+}
-+
-+struct net_user_info tuntap_user_info = {
-+      .init           = tuntap_user_init,
-+      .open           = tuntap_open,
-+      .close          = tuntap_close,
-+      .remove         = NULL,
-+      .set_mtu        = tuntap_set_mtu,
-+      .add_address    = tuntap_add_addr,
-+      .delete_address = tuntap_del_addr,
-+      .max_packet     = MAX_PACKET
-+};
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/os-Linux/file.c um/arch/um/os-Linux/file.c
---- orig/arch/um/os-Linux/file.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/file.c 2003-02-04 19:32:10.000000000 -0500
-@@ -0,0 +1,384 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <unistd.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <signal.h>
-+#include <sys/socket.h>
-+#include <sys/un.h>
-+#include <sys/ioctl.h>
-+#include <sys/mount.h>
-+#include <sys/uio.h>
-+#include "os.h"
-+#include "user.h"
-+#include "kern_util.h"
-+
-+int os_file_type(char *file)
-+{
-+      struct stat64 buf;
-+
-+      if(stat64(file, &buf) == -1)
-+              return(-errno);
-+
-+      if(S_ISDIR(buf.st_mode)) return(OS_TYPE_DIR);
-+      else if(S_ISLNK(buf.st_mode)) return(OS_TYPE_SYMLINK);
-+      else if(S_ISCHR(buf.st_mode)) return(OS_TYPE_CHARDEV);
-+      else if(S_ISBLK(buf.st_mode)) return(OS_TYPE_BLOCKDEV);
-+      else if(S_ISFIFO(buf.st_mode)) return(OS_TYPE_FIFO);
-+      else if(S_ISSOCK(buf.st_mode)) return(OS_TYPE_SOCK);
-+      else return(OS_TYPE_FILE);
-+}
-+
-+int os_file_mode(char *file, struct openflags *mode_out)
-+{
-+      *mode_out = OPENFLAGS();
-+
-+      if(!access(file, W_OK)) *mode_out = of_write(*mode_out);
-+      else if(errno != EACCES) 
-+              return(-errno);
-+
-+      if(!access(file, R_OK)) *mode_out = of_read(*mode_out);
-+      else if(errno != EACCES) 
-+              return(-errno);
-+
-+      return(0);
-+}
-+
-+int os_open_file(char *file, struct openflags flags, int mode)
-+{
-+      int fd, f = 0;
-+
-+      if(flags.r && flags.w) f = O_RDWR;
-+      else if(flags.r) f = O_RDONLY;
-+      else if(flags.w) f = O_WRONLY;
-+      else f = 0;
-+
-+      if(flags.s) f |= O_SYNC;
-+      if(flags.c) f |= O_CREAT;
-+      if(flags.t) f |= O_TRUNC;
-+      if(flags.e) f |= O_EXCL;
-+
-+      fd = open64(file, f, mode);
-+      if(fd < 0) return(-errno);
-+
-+      if(flags.cl){
-+              if(fcntl(fd, F_SETFD, 1)){
-+                      close(fd);
-+                      return(-errno);
-+              }
-+      }
-+
-+      return(fd);
-+}
-+
-+int os_connect_socket(char *name)
-+{
-+      struct sockaddr_un sock;
-+      int fd, err;
-+
-+      sock.sun_family = AF_UNIX;
-+      snprintf(sock.sun_path, sizeof(sock.sun_path), "%s", name);
-+
-+      fd = socket(AF_UNIX, SOCK_STREAM, 0);
-+      if(fd < 0)
-+              return(fd);
-+
-+      err = connect(fd, (struct sockaddr *) &sock, sizeof(sock));
-+      if(err)
-+              return(err);
-+
-+      return(fd);
-+}
-+
-+void os_close_file(int fd)
-+{
-+      close(fd);
-+}
-+
-+int os_seek_file(int fd, __u64 offset)
-+{
-+      __u64 actual;
-+
-+      actual = lseek64(fd, offset, SEEK_SET);
-+      if(actual != offset) return(-errno);
-+      return(0);
-+}
-+
-+int os_read_file(int fd, void *buf, int len)
-+{
-+      int n;
-+
-+      /* Force buf into memory if it's not already. */
-+
-+      /* XXX This fails if buf is kernel memory */
-+#ifdef notdef
-+      if(copy_to_user_proc(buf, &c, sizeof(c)))
-+              return(-EFAULT);
-+#endif
-+
-+      n = read(fd, buf, len);
-+      if(n < 0)
-+              return(-errno);
-+      return(n);
-+}
-+
-+int os_write_file(int fd, void *buf, int count)
-+{
-+      int n;
-+
-+      /* Force buf into memory if it's not already. */
-+      
-+      /* XXX This fails if buf is kernel memory */
-+#ifdef notdef
-+      if(copy_to_user_proc(buf, buf, buf[0]))
-+              return(-EFAULT);
-+#endif
-+
-+      n = write(fd, buf, count);
-+      if(n < 0)
-+              return(-errno);
-+      return(n);
-+}
-+
-+int os_file_size(char *file, long long *size_out)
-+{
-+      struct stat64 buf;
-+
-+      if(stat64(file, &buf) == -1){
-+              printk("Couldn't stat \"%s\" : errno = %d\n", file, errno);
-+              return(-errno);
-+      }
-+      if(S_ISBLK(buf.st_mode)){
-+              int fd, blocks;
-+
-+              if((fd = open64(file, O_RDONLY)) < 0){
-+                      printk("Couldn't open \"%s\", errno = %d\n", file,
-+                             errno);
-+                      return(-errno);
-+              }
-+              if(ioctl(fd, BLKGETSIZE, &blocks) < 0){
-+                      printk("Couldn't get the block size of \"%s\", "
-+                             "errno = %d\n", file, errno);
-+                      close(fd);
-+                      return(-errno);
-+              }
-+              *size_out = ((long long) blocks) * 512;
-+              close(fd);
-+              return(0);
-+      }
-+      *size_out = buf.st_size;
-+      return(0);
-+}
-+
-+int os_pipe(int *fds, int stream, int close_on_exec)
-+{
-+      int err, type = stream ? SOCK_STREAM : SOCK_DGRAM;
-+
-+      err = socketpair(AF_UNIX, type, 0, fds);
-+      if(err) 
-+              return(-errno);
-+
-+      if(!close_on_exec)
-+              return(0);
-+
-+      if((fcntl(fds[0], F_SETFD, 1) < 0) || (fcntl(fds[1], F_SETFD, 1) < 0))
-+              printk("os_pipe : Setting FD_CLOEXEC failed, errno = %d", 
-+                     errno);
-+
-+      return(0);
-+}
-+
-+int os_set_fd_async(int fd, int owner)
-+{
-+      /* XXX This should do F_GETFL first */
-+      if(fcntl(fd, F_SETFL, O_ASYNC | O_NONBLOCK) < 0){
-+              printk("os_set_fd_async : failed to set O_ASYNC and "
-+                     "O_NONBLOCK on fd # %d, errno = %d\n", fd, errno);
-+              return(-errno);
-+      }
-+#ifdef notdef
-+      if(fcntl(fd, F_SETFD, 1) < 0){
-+              printk("os_set_fd_async : Setting FD_CLOEXEC failed, "
-+                     "errno = %d\n", errno);
-+      }
-+#endif
-+
-+      if((fcntl(fd, F_SETSIG, SIGIO) < 0) ||
-+         (fcntl(fd, F_SETOWN, owner) < 0)){
-+              printk("os_set_fd_async : Failed to fcntl F_SETOWN "
-+                     "(or F_SETSIG) fd %d to pid %d, errno = %d\n", fd, 
-+                     owner, errno);
-+              return(-errno);
-+      }
-+
-+      return(0);
-+}
-+
-+int os_set_fd_block(int fd, int blocking)
-+{
-+      int flags;
-+
-+      flags = fcntl(fd, F_GETFL);
-+
-+      if(blocking) flags &= ~O_NONBLOCK;
-+      else flags |= O_NONBLOCK;
-+
-+      if(fcntl(fd, F_SETFL, flags) < 0){
-+              printk("Failed to change blocking on fd # %d, errno = %d\n",
-+                     fd, errno);
-+              return(-errno);
-+      }
-+      return(0);
-+}
-+
-+int os_accept_connection(int fd)
-+{
-+      int new;
-+
-+      new = accept(fd, NULL, 0);
-+      if(new < 0) 
-+              return(-errno);
-+      return(new);
-+}
-+
-+#ifndef SHUT_RD
-+#define SHUT_RD 0
-+#endif
-+
-+#ifndef SHUT_WR
-+#define SHUT_WR 1
-+#endif
-+
-+#ifndef SHUT_RDWR
-+#define SHUT_RDWR 2
-+#endif
-+
-+int os_shutdown_socket(int fd, int r, int w)
-+{
-+      int what, err;
-+
-+      if(r && w) what = SHUT_RDWR;
-+      else if(r) what = SHUT_RD;
-+      else if(w) what = SHUT_WR;
-+      else {
-+              printk("os_shutdown_socket : neither r or w was set\n");
-+              return(-EINVAL);
-+      }
-+      err = shutdown(fd, what);
-+      if(err)
-+              return(-errno);
-+      return(0);
-+}
-+
-+int os_rcv_fd(int fd, int *helper_pid_out)
-+{
-+      int new, n;
-+      char buf[CMSG_SPACE(sizeof(new))];
-+      struct msghdr msg;
-+      struct cmsghdr *cmsg;
-+      struct iovec iov;
-+
-+      msg.msg_name = NULL;
-+      msg.msg_namelen = 0;
-+      iov = ((struct iovec) { .iov_base  = helper_pid_out,
-+                              .iov_len   = sizeof(*helper_pid_out) });
-+      msg.msg_iov = &iov;
-+      msg.msg_iovlen = 1;
-+      msg.msg_control = buf;
-+      msg.msg_controllen = sizeof(buf);
-+      msg.msg_flags = 0;
-+
-+      n = recvmsg(fd, &msg, 0);
-+      if(n < 0)
-+              return(-errno);
-+
-+      else if(n != sizeof(iov.iov_len))
-+              *helper_pid_out = -1;
-+
-+      cmsg = CMSG_FIRSTHDR(&msg);
-+      if(cmsg == NULL){
-+              printk("rcv_fd didn't receive anything, error = %d\n", errno);
-+              return(-1);
-+      }
-+      if((cmsg->cmsg_level != SOL_SOCKET) || 
-+         (cmsg->cmsg_type != SCM_RIGHTS)){
-+              printk("rcv_fd didn't receive a descriptor\n");
-+              return(-1);
-+      }
-+
-+      new = ((int *) CMSG_DATA(cmsg))[0];
-+      return(new);
-+}
-+
-+int create_unix_socket(char *file, int len)
-+{
-+      struct sockaddr_un addr;
-+      int sock, err;
-+
-+      sock = socket(PF_UNIX, SOCK_DGRAM, 0);
-+      if (sock < 0){
-+              printk("create_unix_socket - socket failed, errno = %d\n",
-+                     errno);
-+              return(-errno);
-+      }
-+
-+      addr.sun_family = AF_UNIX;
-+
-+      /* XXX Be more careful about overflow */
-+      snprintf(addr.sun_path, len, "%s", file);
-+
-+      err = bind(sock, (struct sockaddr *) &addr, sizeof(addr));
-+      if (err < 0){
-+              printk("create_listening_socket - bind failed, errno = %d\n",
-+                     errno);
-+              return(-errno);
-+      }
-+
-+      return(sock);
-+}
-+
-+void os_flush_stdout(void)
-+{
-+      fflush(stdout);
-+}
-+
-+int os_lock_file(int fd, int excl)
-+{
-+      int type = excl ? F_WRLCK : F_RDLCK;
-+      struct flock lock = ((struct flock) { .l_type   = type,
-+                                            .l_whence = SEEK_SET,
-+                                            .l_start  = 0,
-+                                            .l_len    = 0 } );
-+      int err, save;
-+
-+      err = fcntl(fd, F_SETLK, &lock);
-+      if(!err)
-+              goto out;
-+
-+      save = -errno;
-+      err = fcntl(fd, F_GETLK, &lock);
-+      if(err){
-+              err = -errno;
-+              goto out;
-+      }
-+              
-+      printk("F_SETLK failed, file already locked by pid %d\n", lock.l_pid);
-+      err = save;
-+ out:
-+      return(err);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/os-Linux/include/file.h um/arch/um/os-Linux/include/file.h
---- orig/arch/um/os-Linux/include/file.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/include/file.h 2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,22 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __OS_FILE_H__
-+#define __OS_FILE_H__
-+
-+#define DEV_NULL "/dev/null"
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/os-Linux/Makefile um/arch/um/os-Linux/Makefile
---- orig/arch/um/os-Linux/Makefile     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/Makefile       2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,17 @@
-+# 
-+# Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+O_TARGET = built-in.o
-+
-+obj-y = file.o process.o tty.o
-+
-+include $(TOPDIR)/Rules.make
-+
-+$(obj-y) : %.o: %.c
-+      $(CC) $(CFLAGS_$@) $(USER_CFLAGS) -c -o $@ $<
-+
-+clean :
-+
-+archmrproper:
-diff -Naur -X ../exclude-files orig/arch/um/os-Linux/process.c um/arch/um/os-Linux/process.c
---- orig/arch/um/os-Linux/process.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/process.c      2003-01-08 14:19:00.000000000 -0500
-@@ -0,0 +1,142 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <unistd.h>
-+#include <stdio.h>
-+#include <errno.h>
-+#include <signal.h>
-+#include <sys/mman.h>
-+#include <sys/wait.h>
-+#include "os.h"
-+#include "user.h"
-+
-+unsigned long os_process_pc(int pid)
-+{
-+      char proc_stat[sizeof("/proc/#####/stat\0")], buf[256];
-+      unsigned long pc;
-+      int fd;
-+
-+      sprintf(proc_stat, "/proc/%d/stat", pid);
-+      fd = os_open_file(proc_stat, of_read(OPENFLAGS()), 0);
-+      if(fd < 0){
-+              printk("os_process_pc - couldn't open '%s', errno = %d\n", 
-+                     proc_stat, errno);
-+              return(-1);
-+      }
-+      if(read(fd, buf, sizeof(buf)) < 0){
-+              printk("os_process_pc - couldn't read '%s', errno = %d\n", 
-+                     proc_stat, errno);
-+              close(fd);
-+              return(-1);
-+      }
-+      close(fd);
-+      pc = -1;
-+      if(sscanf(buf, "%*d %*s %*c %*d %*d %*d %*d %*d %*d %*d %*d "
-+                "%*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d "
-+                "%*d %*d %*d %*d %ld", &pc) != 1){
-+              printk("os_process_pc - couldn't find pc in '%s'\n", buf);
-+      }
-+      return(pc);
-+}
-+
-+int os_process_parent(int pid)
-+{
-+      char stat[sizeof("/proc/nnnnn/stat\0")];
-+      char data[256];
-+      int parent, n, fd;
-+
-+      if(pid == -1) return(-1);
-+
-+      snprintf(stat, sizeof(stat), "/proc/%d/stat", pid);
-+      fd = os_open_file(stat, of_read(OPENFLAGS()), 0);
-+      if(fd < 0){
-+              printk("Couldn't open '%s', errno = %d\n", stat, -fd);
-+              return(-1);
-+      }
-+
-+      n = read(fd, data, sizeof(data));
-+      close(fd);
-+
-+      if(n < 0){
-+              printk("Couldn't read '%s', errno = %d\n", stat);
-+              return(-1);
-+      }
-+
-+      parent = -1;
-+      /* XXX This will break if there is a space in the command */
-+      n = sscanf(data, "%*d %*s %*c %d", &parent);
-+      if(n != 1) printk("Failed to scan '%s'\n", data);
-+
-+      return(parent);
-+}
-+
-+void os_stop_process(int pid)
-+{
-+      kill(pid, SIGSTOP);
-+}
-+
-+void os_kill_process(int pid, int reap_child)
-+{
-+      kill(pid, SIGKILL);
-+      if(reap_child)
-+              waitpid(pid, NULL, 0);
-+              
-+}
-+
-+void os_usr1_process(int pid)
-+{
-+      kill(pid, SIGUSR1);
-+}
-+
-+int os_getpid(void)
-+{
-+      return(getpid());
-+}
-+
-+int os_map_memory(void *virt, int fd, unsigned long off, unsigned long len, 
-+                int r, int w, int x)
-+{
-+      void *loc;
-+      int prot;
-+
-+      prot = (r ? PROT_READ : 0) | (w ? PROT_WRITE : 0) | 
-+              (x ? PROT_EXEC : 0);
-+
-+      loc = mmap((void *) virt, len, prot, MAP_SHARED | MAP_FIXED, 
-+                 fd, off);
-+      if(loc == MAP_FAILED)
-+              return(-errno);
-+      return(0);
-+}
-+
-+int os_protect_memory(void *addr, unsigned long len, int r, int w, int x)
-+{
-+        int prot = ((r ? PROT_READ : 0) | (w ? PROT_WRITE : 0) | 
-+                  (x ? PROT_EXEC : 0));
-+
-+        if(mprotect(addr, len, prot) < 0)
-+              return(-errno);
-+        return(0);
-+}
-+
-+int os_unmap_memory(void *addr, int len)
-+{
-+        int err;
-+
-+        err = munmap(addr, len);
-+        if(err < 0) return(-errno);
-+        return(0);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/os-Linux/tty.c um/arch/um/os-Linux/tty.c
---- orig/arch/um/os-Linux/tty.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/tty.c  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,61 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdlib.h>
-+#include <errno.h>
-+#include "os.h"
-+#include "user.h"
-+#include "kern_util.h"
-+
-+struct grantpt_info {
-+      int fd;
-+      int res;
-+      int err;
-+};
-+
-+static void grantpt_cb(void *arg)
-+{
-+      struct grantpt_info *info = arg;
-+
-+      info->res = grantpt(info->fd);
-+      info->err = errno;
-+}
-+
-+int get_pty(void)
-+{
-+      struct grantpt_info info;
-+      int fd;
-+
-+      if((fd = os_open_file("/dev/ptmx", of_rdwr(OPENFLAGS()), 0)) < 0){
-+              printk("get_pty : Couldn't open /dev/ptmx - errno = %d\n",
-+                     errno);
-+              return(-1);
-+      }
-+
-+      info.fd = fd;
-+      initial_thread_cb(grantpt_cb, &info);
-+
-+      if(info.res < 0){
-+              printk("get_pty : Couldn't grant pty - errno = %d\n", 
-+                     info.err);
-+              return(-1);
-+      }
-+      if(unlockpt(fd) < 0){
-+              printk("get_pty : Couldn't unlock pty - errno = %d\n", errno);
-+              return(-1);
-+      }
-+      return(fd);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/bugs.c um/arch/um/sys-i386/bugs.c
---- orig/arch/um/sys-i386/bugs.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/bugs.c 2003-05-29 13:46:50.000000000 -0400
-@@ -0,0 +1,177 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <unistd.h>
-+#include <fcntl.h>
-+#include <errno.h>
-+#include <string.h>
-+#include <sys/signal.h>
-+#include <asm/ldt.h>
-+#include "kern_util.h"
-+#include "user.h"
-+#include "sysdep/ptrace.h"
-+#include "task.h"
-+
-+#define MAXTOKEN 64
-+
-+/* Set during early boot */
-+int cpu_has_cmov = 1;
-+int cpu_has_xmm = 0;
-+
-+static char token(int fd, char *buf, int len, char stop)
-+{
-+      int n;
-+      char *ptr, *end, c;
-+
-+      ptr = buf;
-+      end = &buf[len];
-+      do {
-+              n = read(fd, ptr, sizeof(*ptr));
-+              c = *ptr++;
-+              if(n == 0) return(0);
-+              else if(n != sizeof(*ptr)){
-+                      printk("Reading /proc/cpuinfo failed, "
-+                             "errno = %d\n", errno);
-+                      return(-errno);
-+              }
-+      } while((c != '\n') && (c != stop) && (ptr < end));
-+
-+      if(ptr == end){
-+              printk("Failed to find '%c' in /proc/cpuinfo\n", stop);
-+              return(-1);
-+      }
-+      *(ptr - 1) = '\0';
-+      return(c);
-+}
-+
-+static int check_cpu_feature(char *feature, int *have_it)
-+{
-+      char buf[MAXTOKEN], c;
-+      int fd, len = sizeof(buf)/sizeof(buf[0]), n;
-+
-+      printk("Checking for host processor %s support...", feature);
-+      fd = open("/proc/cpuinfo", O_RDONLY);
-+      if(fd < 0){
-+              printk("Couldn't open /proc/cpuinfo, errno = %d\n", errno);
-+              return(0);
-+      }
-+
-+      *have_it = 0;
-+      buf[len - 1] = '\0';
-+      while(1){
-+              c = token(fd, buf, len - 1, ':');
-+              if(c <= 0) goto out;
-+              else if(c != ':'){
-+                      printk("Failed to find ':' in /proc/cpuinfo\n");
-+                      goto out;
-+              }
-+
-+              if(!strncmp(buf, "flags", strlen("flags"))) break;
-+
-+              do {
-+                      n = read(fd, &c, sizeof(c));
-+                      if(n != sizeof(c)){
-+                              printk("Failed to find newline in "
-+                                     "/proc/cpuinfo, n = %d, errno = %d\n",
-+                                     n, errno);
-+                              goto out;
-+                      }
-+              } while(c != '\n');
-+      }
-+
-+      c = token(fd, buf, len - 1, ' ');
-+      if(c < 0) goto out;
-+      else if(c != ' '){
-+              printk("Failed to find ':' in /proc/cpuinfo\n");
-+              goto out;
-+      }
-+
-+      while(1){
-+              c = token(fd, buf, len - 1, ' ');
-+              if(c < 0) goto out;
-+              else if(c == '\n') break;
-+
-+              if(!strcmp(buf, feature)){
-+                      *have_it = 1;
-+                      goto out;
-+              }
-+      }
-+ out:
-+      if(*have_it == 0) printk("No\n");
-+      else if(*have_it == 1) printk("Yes\n");
-+      close(fd);
-+      return(1);
-+}
-+
-+static void disable_lcall(void)
-+{
-+      struct modify_ldt_ldt_s ldt;
-+      int err;
-+
-+      bzero(&ldt, sizeof(ldt));
-+      ldt.entry_number = 7;
-+      ldt.base_addr = 0;
-+      ldt.limit = 0;
-+      err = modify_ldt(1, &ldt, sizeof(ldt));
-+      if(err)
-+              printk("Failed to disable lcall7 - errno = %d\n", errno);
-+}
-+
-+void arch_init_thread(void)
-+{
-+      disable_lcall();
-+}
-+
-+void arch_check_bugs(void)
-+{
-+      int have_it;
-+
-+      if(access("/proc/cpuinfo", R_OK)){
-+              printk("/proc/cpuinfo not available - skipping CPU capability "
-+                     "checks\n");
-+              return;
-+      }
-+      if(check_cpu_feature("cmov", &have_it)) cpu_has_cmov = have_it;
-+      if(check_cpu_feature("xmm", &have_it)) cpu_has_xmm = have_it;
-+}
-+
-+int arch_handle_signal(int sig, union uml_pt_regs *regs)
-+{
-+      unsigned long ip;
-+
-+      /* This is testing for a cmov (0x0f 0x4x) instruction causing a
-+       * SIGILL in init.
-+       */
-+      if((sig != SIGILL) || (TASK_PID(get_current()) != 1)) return(0);
-+
-+      ip = UPT_IP(regs);
-+      if((*((char *) ip) != 0x0f) || ((*((char *) (ip + 1)) & 0xf0) != 0x40))
-+              return(0);
-+
-+      if(cpu_has_cmov == 0)
-+              panic("SIGILL caused by cmov, which this processor doesn't "
-+                    "implement, boot a filesystem compiled for older "
-+                    "processors");
-+      else if(cpu_has_cmov == 1)
-+              panic("SIGILL caused by cmov, which this processor claims to "
-+                    "implement");
-+      else if(cpu_has_cmov == -1)
-+              panic("SIGILL caused by cmov, couldn't tell if this processor "
-+                    "implements it, boot a filesystem compiled for older "
-+                    "processors");
-+      else panic("Bad value for cpu_has_cmov (%d)", cpu_has_cmov);
-+      return(0);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/checksum.S um/arch/um/sys-i386/checksum.S
---- orig/arch/um/sys-i386/checksum.S   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/checksum.S     2002-10-31 20:17:50.000000000 -0500
-@@ -0,0 +1,460 @@
-+/*
-+ * INET               An implementation of the TCP/IP protocol suite for the LINUX
-+ *            operating system.  INET is implemented using the  BSD Socket
-+ *            interface as the means of communication with the user level.
-+ *
-+ *            IP/TCP/UDP checksumming routines
-+ *
-+ * Authors:   Jorge Cwik, <jorge@laser.satlink.net>
-+ *            Arnt Gulbrandsen, <agulbra@nvg.unit.no>
-+ *            Tom May, <ftom@netcom.com>
-+ *              Pentium Pro/II routines:
-+ *              Alexander Kjeldaas <astor@guardian.no>
-+ *              Finn Arne Gangstad <finnag@guardian.no>
-+ *            Lots of code moved from tcp.c and ip.c; see those files
-+ *            for more names.
-+ *
-+ * Changes:     Ingo Molnar, converted csum_partial_copy() to 2.1 exception
-+ *                         handling.
-+ *            Andi Kleen,  add zeroing on error
-+ *                   converted to pure assembler
-+ *
-+ *            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 <linux/config.h>
-+#include <asm/errno.h>
-+                              
-+/*
-+ * computes a partial checksum, e.g. for TCP/UDP fragments
-+ */
-+
-+/*    
-+unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum)
-+ */
-+              
-+.text
-+.align 4
-+.globl arch_csum_partial                                                              
-+              
-+#ifndef CONFIG_X86_USE_PPRO_CHECKSUM
-+
-+        /*            
-+         * Experiments with Ethernet and SLIP connections show that buff
-+         * is aligned on either a 2-byte or 4-byte boundary.  We get at
-+         * least a twofold speedup on 486 and Pentium if it is 4-byte aligned.
-+         * Fortunately, it is easy to convert 2-byte alignment to 4-byte
-+         * alignment for the unrolled loop.
-+         */           
-+arch_csum_partial:    
-+      pushl %esi
-+      pushl %ebx
-+      movl 20(%esp),%eax      # Function arg: unsigned int sum
-+      movl 16(%esp),%ecx      # Function arg: int len
-+      movl 12(%esp),%esi      # Function arg: unsigned char *buff
-+      testl $2, %esi          # Check alignment.
-+      jz 2f                   # Jump if alignment is ok.
-+      subl $2, %ecx           # Alignment uses up two bytes.
-+      jae 1f                  # Jump if we had at least two bytes.
-+      addl $2, %ecx           # ecx was < 2.  Deal with it.
-+      jmp 4f
-+1:    movw (%esi), %bx
-+      addl $2, %esi
-+      addw %bx, %ax
-+      adcl $0, %eax
-+2:
-+      movl %ecx, %edx
-+      shrl $5, %ecx
-+      jz 2f
-+      testl %esi, %esi
-+1:    movl (%esi), %ebx
-+      adcl %ebx, %eax
-+      movl 4(%esi), %ebx
-+      adcl %ebx, %eax
-+      movl 8(%esi), %ebx
-+      adcl %ebx, %eax
-+      movl 12(%esi), %ebx
-+      adcl %ebx, %eax
-+      movl 16(%esi), %ebx
-+      adcl %ebx, %eax
-+      movl 20(%esi), %ebx
-+      adcl %ebx, %eax
-+      movl 24(%esi), %ebx
-+      adcl %ebx, %eax
-+      movl 28(%esi), %ebx
-+      adcl %ebx, %eax
-+      lea 32(%esi), %esi
-+      dec %ecx
-+      jne 1b
-+      adcl $0, %eax
-+2:    movl %edx, %ecx
-+      andl $0x1c, %edx
-+      je 4f
-+      shrl $2, %edx           # This clears CF
-+3:    adcl (%esi), %eax
-+      lea 4(%esi), %esi
-+      dec %edx
-+      jne 3b
-+      adcl $0, %eax
-+4:    andl $3, %ecx
-+      jz 7f
-+      cmpl $2, %ecx
-+      jb 5f
-+      movw (%esi),%cx
-+      leal 2(%esi),%esi
-+      je 6f
-+      shll $16,%ecx
-+5:    movb (%esi),%cl
-+6:    addl %ecx,%eax
-+      adcl $0, %eax 
-+7:    
-+      popl %ebx
-+      popl %esi
-+      ret
-+
-+#else
-+
-+/* Version for PentiumII/PPro */
-+
-+arch_csum_partial:
-+      pushl %esi
-+      pushl %ebx
-+      movl 20(%esp),%eax      # Function arg: unsigned int sum
-+      movl 16(%esp),%ecx      # Function arg: int len
-+      movl 12(%esp),%esi      # Function arg: const unsigned char *buf
-+
-+      testl $2, %esi         
-+      jnz 30f                 
-+10:
-+      movl %ecx, %edx
-+      movl %ecx, %ebx
-+      andl $0x7c, %ebx
-+      shrl $7, %ecx
-+      addl %ebx,%esi
-+      shrl $2, %ebx  
-+      negl %ebx
-+      lea 45f(%ebx,%ebx,2), %ebx
-+      testl %esi, %esi
-+      jmp *%ebx
-+
-+      # Handle 2-byte-aligned regions
-+20:   addw (%esi), %ax
-+      lea 2(%esi), %esi
-+      adcl $0, %eax
-+      jmp 10b
-+
-+30:   subl $2, %ecx          
-+      ja 20b                 
-+      je 32f
-+      movzbl (%esi),%ebx      # csumming 1 byte, 2-aligned
-+      addl %ebx, %eax
-+      adcl $0, %eax
-+      jmp 80f
-+32:
-+      addw (%esi), %ax        # csumming 2 bytes, 2-aligned
-+      adcl $0, %eax
-+      jmp 80f
-+
-+40: 
-+      addl -128(%esi), %eax
-+      adcl -124(%esi), %eax
-+      adcl -120(%esi), %eax
-+      adcl -116(%esi), %eax   
-+      adcl -112(%esi), %eax   
-+      adcl -108(%esi), %eax
-+      adcl -104(%esi), %eax
-+      adcl -100(%esi), %eax
-+      adcl -96(%esi), %eax
-+      adcl -92(%esi), %eax
-+      adcl -88(%esi), %eax
-+      adcl -84(%esi), %eax
-+      adcl -80(%esi), %eax
-+      adcl -76(%esi), %eax
-+      adcl -72(%esi), %eax
-+      adcl -68(%esi), %eax
-+      adcl -64(%esi), %eax     
-+      adcl -60(%esi), %eax     
-+      adcl -56(%esi), %eax     
-+      adcl -52(%esi), %eax   
-+      adcl -48(%esi), %eax   
-+      adcl -44(%esi), %eax
-+      adcl -40(%esi), %eax
-+      adcl -36(%esi), %eax
-+      adcl -32(%esi), %eax
-+      adcl -28(%esi), %eax
-+      adcl -24(%esi), %eax
-+      adcl -20(%esi), %eax
-+      adcl -16(%esi), %eax
-+      adcl -12(%esi), %eax
-+      adcl -8(%esi), %eax
-+      adcl -4(%esi), %eax
-+45:
-+      lea 128(%esi), %esi
-+      adcl $0, %eax
-+      dec %ecx
-+      jge 40b
-+      movl %edx, %ecx
-+50:   andl $3, %ecx
-+      jz 80f
-+
-+      # Handle the last 1-3 bytes without jumping
-+      notl %ecx               # 1->2, 2->1, 3->0, higher bits are masked
-+      movl $0xffffff,%ebx     # by the shll and shrl instructions
-+      shll $3,%ecx
-+      shrl %cl,%ebx
-+      andl -128(%esi),%ebx    # esi is 4-aligned so should be ok
-+      addl %ebx,%eax
-+      adcl $0,%eax
-+80: 
-+      popl %ebx
-+      popl %esi
-+      ret
-+                              
-+#endif
-+
-+/*
-+unsigned int csum_partial_copy_generic (const char *src, char *dst,
-+                                int len, int sum, int *src_err_ptr, int *dst_err_ptr)
-+ */ 
-+
-+/*
-+ * Copy from ds while checksumming, otherwise like csum_partial
-+ *
-+ * The macros SRC and DST specify the type of access for the instruction.
-+ * thus we can call a custom exception handler for all access types.
-+ *
-+ * FIXME: could someone double-check whether I haven't mixed up some SRC and
-+ *      DST definitions? It's damn hard to trigger all cases.  I hope I got
-+ *      them all but there's no guarantee.
-+ */
-+
-+#define SRC(y...)                     \
-+      9999: y;                        \
-+      .section __ex_table, "a";       \
-+      .long 9999b, 6001f      ;       \
-+      .previous
-+
-+#define DST(y...)                     \
-+      9999: y;                        \
-+      .section __ex_table, "a";       \
-+      .long 9999b, 6002f      ;       \
-+      .previous
-+
-+.align 4
-+.globl csum_partial_copy_generic_i386
-+                              
-+#ifndef CONFIG_X86_USE_PPRO_CHECKSUM
-+
-+#define ARGBASE 16            
-+#define FP            12
-+              
-+csum_partial_copy_generic_i386:
-+      subl  $4,%esp   
-+      pushl %edi
-+      pushl %esi
-+      pushl %ebx
-+      movl ARGBASE+16(%esp),%eax      # sum
-+      movl ARGBASE+12(%esp),%ecx      # len
-+      movl ARGBASE+4(%esp),%esi       # src
-+      movl ARGBASE+8(%esp),%edi       # dst
-+
-+      testl $2, %edi                  # Check alignment. 
-+      jz 2f                           # Jump if alignment is ok.
-+      subl $2, %ecx                   # Alignment uses up two bytes.
-+      jae 1f                          # Jump if we had at least two bytes.
-+      addl $2, %ecx                   # ecx was < 2.  Deal with it.
-+      jmp 4f
-+SRC(1:        movw (%esi), %bx        )
-+      addl $2, %esi
-+DST(  movw %bx, (%edi)        )
-+      addl $2, %edi
-+      addw %bx, %ax   
-+      adcl $0, %eax
-+2:
-+      movl %ecx, FP(%esp)
-+      shrl $5, %ecx
-+      jz 2f
-+      testl %esi, %esi
-+SRC(1:        movl (%esi), %ebx       )
-+SRC(  movl 4(%esi), %edx      )
-+      adcl %ebx, %eax
-+DST(  movl %ebx, (%edi)       )
-+      adcl %edx, %eax
-+DST(  movl %edx, 4(%edi)      )
-+
-+SRC(  movl 8(%esi), %ebx      )
-+SRC(  movl 12(%esi), %edx     )
-+      adcl %ebx, %eax
-+DST(  movl %ebx, 8(%edi)      )
-+      adcl %edx, %eax
-+DST(  movl %edx, 12(%edi)     )
-+
-+SRC(  movl 16(%esi), %ebx     )
-+SRC(  movl 20(%esi), %edx     )
-+      adcl %ebx, %eax
-+DST(  movl %ebx, 16(%edi)     )
-+      adcl %edx, %eax
-+DST(  movl %edx, 20(%edi)     )
-+
-+SRC(  movl 24(%esi), %ebx     )
-+SRC(  movl 28(%esi), %edx     )
-+      adcl %ebx, %eax
-+DST(  movl %ebx, 24(%edi)     )
-+      adcl %edx, %eax
-+DST(  movl %edx, 28(%edi)     )
-+
-+      lea 32(%esi), %esi
-+      lea 32(%edi), %edi
-+      dec %ecx
-+      jne 1b
-+      adcl $0, %eax
-+2:    movl FP(%esp), %edx
-+      movl %edx, %ecx
-+      andl $0x1c, %edx
-+      je 4f
-+      shrl $2, %edx                   # This clears CF
-+SRC(3:        movl (%esi), %ebx       )
-+      adcl %ebx, %eax
-+DST(  movl %ebx, (%edi)       )
-+      lea 4(%esi), %esi
-+      lea 4(%edi), %edi
-+      dec %edx
-+      jne 3b
-+      adcl $0, %eax
-+4:    andl $3, %ecx
-+      jz 7f
-+      cmpl $2, %ecx
-+      jb 5f
-+SRC(  movw (%esi), %cx        )
-+      leal 2(%esi), %esi
-+DST(  movw %cx, (%edi)        )
-+      leal 2(%edi), %edi
-+      je 6f
-+      shll $16,%ecx
-+SRC(5:        movb (%esi), %cl        )
-+DST(  movb %cl, (%edi)        )
-+6:    addl %ecx, %eax
-+      adcl $0, %eax
-+7:
-+5000:
-+
-+# Exception handler:
-+.section .fixup, "ax"                                                 
-+
-+6001:
-+      movl ARGBASE+20(%esp), %ebx     # src_err_ptr
-+      movl $-EFAULT, (%ebx)
-+
-+      # zero the complete destination - computing the rest
-+      # is too much work 
-+      movl ARGBASE+8(%esp), %edi      # dst
-+      movl ARGBASE+12(%esp), %ecx     # len
-+      xorl %eax,%eax
-+      rep ; stosb
-+
-+      jmp 5000b
-+
-+6002:
-+      movl ARGBASE+24(%esp), %ebx     # dst_err_ptr
-+      movl $-EFAULT,(%ebx)
-+      jmp 5000b
-+
-+.previous
-+
-+      popl %ebx
-+      popl %esi
-+      popl %edi
-+      popl %ecx                       # equivalent to addl $4,%esp
-+      ret     
-+
-+#else
-+
-+/* Version for PentiumII/PPro */
-+
-+#define ROUND1(x) \
-+      SRC(movl x(%esi), %ebx  )       ;       \
-+      addl %ebx, %eax                 ;       \
-+      DST(movl %ebx, x(%edi)  )       ; 
-+
-+#define ROUND(x) \
-+      SRC(movl x(%esi), %ebx  )       ;       \
-+      adcl %ebx, %eax                 ;       \
-+      DST(movl %ebx, x(%edi)  )       ;
-+
-+#define ARGBASE 12
-+              
-+csum_partial_copy_generic_i386:
-+      pushl %ebx
-+      pushl %edi
-+      pushl %esi
-+      movl ARGBASE+4(%esp),%esi       #src
-+      movl ARGBASE+8(%esp),%edi       #dst    
-+      movl ARGBASE+12(%esp),%ecx      #len
-+      movl ARGBASE+16(%esp),%eax      #sum
-+#     movl %ecx, %edx  
-+      movl %ecx, %ebx  
-+      movl %esi, %edx
-+      shrl $6, %ecx     
-+      andl $0x3c, %ebx  
-+      negl %ebx
-+      subl %ebx, %esi  
-+      subl %ebx, %edi  
-+      lea  -1(%esi),%edx
-+      andl $-32,%edx
-+      lea 3f(%ebx,%ebx), %ebx
-+      testl %esi, %esi 
-+      jmp *%ebx
-+1:    addl $64,%esi
-+      addl $64,%edi 
-+      SRC(movb -32(%edx),%bl) ; SRC(movb (%edx),%bl)
-+      ROUND1(-64) ROUND(-60) ROUND(-56) ROUND(-52)    
-+      ROUND (-48) ROUND(-44) ROUND(-40) ROUND(-36)    
-+      ROUND (-32) ROUND(-28) ROUND(-24) ROUND(-20)    
-+      ROUND (-16) ROUND(-12) ROUND(-8)  ROUND(-4)     
-+3:    adcl $0,%eax
-+      addl $64, %edx
-+      dec %ecx
-+      jge 1b
-+4:    movl ARGBASE+12(%esp),%edx      #len
-+      andl $3, %edx
-+      jz 7f
-+      cmpl $2, %edx
-+      jb 5f
-+SRC(  movw (%esi), %dx         )
-+      leal 2(%esi), %esi
-+DST(  movw %dx, (%edi)         )
-+      leal 2(%edi), %edi
-+      je 6f
-+      shll $16,%edx
-+5:
-+SRC(  movb (%esi), %dl         )
-+DST(  movb %dl, (%edi)         )
-+6:    addl %edx, %eax
-+      adcl $0, %eax
-+7:
-+.section .fixup, "ax"
-+6001: movl    ARGBASE+20(%esp), %ebx  # src_err_ptr   
-+      movl $-EFAULT, (%ebx)
-+      # zero the complete destination (computing the rest is too much work)
-+      movl ARGBASE+8(%esp),%edi       # dst
-+      movl ARGBASE+12(%esp),%ecx      # len
-+      xorl %eax,%eax
-+      rep; stosb
-+      jmp 7b
-+6002: movl ARGBASE+24(%esp), %ebx     # dst_err_ptr
-+      movl $-EFAULT, (%ebx)
-+      jmp  7b                 
-+.previous                             
-+
-+      popl %esi
-+      popl %edi
-+      popl %ebx
-+      ret
-+                              
-+#undef ROUND
-+#undef ROUND1         
-+              
-+#endif
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/fault.c um/arch/um/sys-i386/fault.c
---- orig/arch/um/sys-i386/fault.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/fault.c        2002-10-27 16:49:35.000000000 -0500
-@@ -0,0 +1,34 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <signal.h>
-+#include "sysdep/ptrace.h"
-+#include "sysdep/sigcontext.h"
-+
-+extern unsigned long search_exception_table(unsigned long addr);
-+
-+int arch_fixup(unsigned long address, void *sc_ptr)
-+{
-+      struct sigcontext *sc = sc_ptr;
-+      unsigned long fixup;
-+
-+      fixup = search_exception_table(address);
-+      if(fixup != 0){
-+              sc->eip = fixup;
-+              return(1);
-+      }
-+      return(0);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/ksyms.c um/arch/um/sys-i386/ksyms.c
---- orig/arch/um/sys-i386/ksyms.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/ksyms.c        2002-10-29 21:01:45.000000000 -0500
-@@ -0,0 +1,17 @@
-+#include "linux/module.h"
-+#include "linux/in6.h"
-+#include "linux/rwsem.h"
-+#include "asm/byteorder.h"
-+#include "asm/semaphore.h"
-+#include "asm/uaccess.h"
-+#include "asm/checksum.h"
-+#include "asm/errno.h"
-+
-+EXPORT_SYMBOL(__down_failed);
-+EXPORT_SYMBOL(__down_failed_interruptible);
-+EXPORT_SYMBOL(__down_failed_trylock);
-+EXPORT_SYMBOL(__up_wakeup);
-+
-+/* Networking helper routines. */
-+EXPORT_SYMBOL(csum_partial_copy_from);
-+EXPORT_SYMBOL(csum_partial_copy_to);
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/ldt.c um/arch/um/sys-i386/ldt.c
---- orig/arch/um/sys-i386/ldt.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/ldt.c  2002-11-13 12:43:04.000000000 -0500
-@@ -0,0 +1,92 @@
-+/*
-+ * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/config.h"
-+#include "linux/slab.h"
-+#include "asm/uaccess.h"
-+#include "asm/ptrace.h"
-+#include "choose-mode.h"
-+#include "kern.h"
-+
-+#ifdef CONFIG_MODE_TT
-+extern int modify_ldt(int func, void *ptr, unsigned long bytecount);
-+
-+int sys_modify_ldt_tt(int func, void *ptr, unsigned long bytecount)
-+{
-+      if(verify_area(VERIFY_READ, ptr, bytecount)) return(-EFAULT);
-+      return(modify_ldt(func, ptr, bytecount));
-+}
-+#endif
-+
-+#ifdef CONFIG_MODE_SKAS
-+extern int userspace_pid;
-+
-+int sys_modify_ldt_skas(int func, void *ptr, unsigned long bytecount)
-+{
-+      struct ptrace_ldt ldt;
-+      void *buf;
-+      int res, n;
-+
-+      buf = kmalloc(bytecount, GFP_KERNEL);
-+      if(buf == NULL)
-+              return(-ENOMEM);
-+
-+      res = 0;
-+
-+      switch(func){
-+      case 1:
-+      case 0x11:
-+              res = copy_from_user(buf, ptr, bytecount);
-+              break;
-+      }
-+
-+      if(res != 0){
-+              res = -EFAULT;
-+              goto out;
-+      }
-+
-+      ldt = ((struct ptrace_ldt) { .func      = func,
-+                                   .ptr       = buf,
-+                                   .bytecount = bytecount });
-+      res = ptrace(PTRACE_LDT, userspace_pid, 0, (unsigned long) &ldt);
-+      if(res < 0)
-+              goto out;
-+
-+      switch(func){
-+      case 0:
-+      case 2:
-+              n = res;
-+              res = copy_to_user(ptr, buf, n);
-+              if(res != 0)
-+                      res = -EFAULT;
-+              else 
-+                      res = n;
-+              break;
-+      }
-+
-+ out:
-+      kfree(buf);
-+      return(res);
-+}
-+#endif
-+
-+int sys_modify_ldt(int func, void *ptr, unsigned long bytecount)
-+{
-+      return(CHOOSE_MODE_PROC(sys_modify_ldt_tt, sys_modify_ldt_skas, func, 
-+                              ptr, bytecount));
-+}
-+
-+
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/Makefile um/arch/um/sys-i386/Makefile
---- orig/arch/um/sys-i386/Makefile     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/Makefile       2002-11-23 23:34:24.000000000 -0500
-@@ -0,0 +1,46 @@
-+# 
-+# Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+# Licensed under the GPL
-+#
-+
-+O_TARGET = built-in.o
-+
-+obj-y = bugs.o checksum.o extable.o fault.o ksyms.o ldt.o ptrace.o \
-+      ptrace_user.o semaphore.o sigcontext.o syscalls.o sysrq.o
-+export-objs = ksyms.o
-+
-+USER_OBJS = bugs.o ptrace_user.o sigcontext.o fault.o
-+
-+SYMLINKS = semaphore.c extable.c
-+
-+semaphore.c-dir = kernel
-+extable.c-dir = mm
-+
-+include $(TOPDIR)/Rules.make
-+
-+$(USER_OBJS) : %.o: %.c
-+      $(CC) $(CFLAGS_$@) $(USER_CFLAGS) -c -o $@ $<
-+
-+define make_link
-+      -rm -f $1
-+      ln -sf $(TOPDIR)/arch/i386/$($1-dir)/$1 $1
-+endef
-+
-+$(SYMLINKS): 
-+      $(call make_link,$@)
-+
-+clean:
-+      $(MAKE) -C util clean
-+      rm -f $(SYMLINKS)
-+
-+fastdep:
-+
-+dep:
-+
-+archmrproper:
-+
-+archclean:
-+
-+archdep:
-+
-+modules:
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/ptrace.c um/arch/um/sys-i386/ptrace.c
---- orig/arch/um/sys-i386/ptrace.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/ptrace.c       2002-10-27 16:49:35.000000000 -0500
-@@ -0,0 +1,365 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/sched.h"
-+#include "asm/elf.h"
-+#include "asm/ptrace.h"
-+#include "asm/uaccess.h"
-+#include "ptrace_user.h"
-+#include "sysdep/sigcontext.h"
-+#include "sysdep/sc.h"
-+
-+void arch_switch(void)
-+{
-+      update_debugregs(current->thread.arch.debugregs_seq);
-+}
-+
-+int is_syscall(unsigned long addr)
-+{
-+      unsigned short instr;
-+      int n;
-+
-+      n = copy_from_user(&instr, (void *) addr, sizeof(instr));
-+      if(n){
-+              printk("is_syscall : failed to read instruction from 0x%lu\n", 
-+                     addr);
-+              return(0);
-+      }
-+      return(instr == 0x80cd);
-+}
-+
-+/* determines which flags the user has access to. */
-+/* 1 = access 0 = no access */
-+#define FLAG_MASK 0x00044dd5
-+
-+int putreg(struct task_struct *child, int regno, unsigned long value)
-+{
-+      regno >>= 2;
-+      switch (regno) {
-+      case FS:
-+              if (value && (value & 3) != 3)
-+                      return -EIO;
-+              PT_REGS_FS(&child->thread.regs) = value;
-+              return 0;
-+      case GS:
-+              if (value && (value & 3) != 3)
-+                      return -EIO;
-+              PT_REGS_GS(&child->thread.regs) = value;
-+              return 0;
-+      case DS:
-+      case ES:
-+              if (value && (value & 3) != 3)
-+                      return -EIO;
-+              value &= 0xffff;
-+              break;
-+      case SS:
-+      case CS:
-+              if ((value & 3) != 3)
-+                      return -EIO;
-+              value &= 0xffff;
-+              break;
-+      case EFL:
-+              value &= FLAG_MASK;
-+              value |= PT_REGS_EFLAGS(&child->thread.regs);
-+              break;
-+      }
-+      PT_REGS_SET(&child->thread.regs, regno, value);
-+      return 0;
-+}
-+
-+unsigned long getreg(struct task_struct *child, int regno)
-+{
-+      unsigned long retval = ~0UL;
-+
-+      regno >>= 2;
-+      switch (regno) {
-+      case FS:
-+      case GS:
-+      case DS:
-+      case ES:
-+      case SS:
-+      case CS:
-+              retval = 0xffff;
-+              /* fall through */
-+      default:
-+              retval &= PT_REG(&child->thread.regs, regno);
-+      }
-+      return retval;
-+}
-+
-+struct i387_fxsave_struct {
-+      unsigned short  cwd;
-+      unsigned short  swd;
-+      unsigned short  twd;
-+      unsigned short  fop;
-+      long    fip;
-+      long    fcs;
-+      long    foo;
-+      long    fos;
-+      long    mxcsr;
-+      long    reserved;
-+      long    st_space[32];   /* 8*16 bytes for each FP-reg = 128 bytes */
-+      long    xmm_space[32];  /* 8*16 bytes for each XMM-reg = 128 bytes */
-+      long    padding[56];
-+};
-+
-+/*
-+ * FPU tag word conversions.
-+ */
-+
-+static inline unsigned short twd_i387_to_fxsr( unsigned short twd )
-+{
-+      unsigned int tmp; /* to avoid 16 bit prefixes in the code */
-+ 
-+      /* Transform each pair of bits into 01 (valid) or 00 (empty) */
-+        tmp = ~twd;
-+        tmp = (tmp | (tmp>>1)) & 0x5555; /* 0V0V0V0V0V0V0V0V */
-+        /* and move the valid bits to the lower byte. */
-+        tmp = (tmp | (tmp >> 1)) & 0x3333; /* 00VV00VV00VV00VV */
-+        tmp = (tmp | (tmp >> 2)) & 0x0f0f; /* 0000VVVV0000VVVV */
-+        tmp = (tmp | (tmp >> 4)) & 0x00ff; /* 00000000VVVVVVVV */
-+        return tmp;
-+}
-+
-+static inline unsigned long twd_fxsr_to_i387( struct i387_fxsave_struct *fxsave )
-+{
-+      struct _fpxreg *st = NULL;
-+      unsigned long twd = (unsigned long) fxsave->twd;
-+      unsigned long tag;
-+      unsigned long ret = 0xffff0000;
-+      int i;
-+
-+#define FPREG_ADDR(f, n)      ((char *)&(f)->st_space + (n) * 16);
-+
-+      for ( i = 0 ; i < 8 ; i++ ) {
-+              if ( twd & 0x1 ) {
-+                      st = (struct _fpxreg *) FPREG_ADDR( fxsave, i );
-+
-+                      switch ( st->exponent & 0x7fff ) {
-+                      case 0x7fff:
-+                              tag = 2;                /* Special */
-+                              break;
-+                      case 0x0000:
-+                              if ( !st->significand[0] &&
-+                                   !st->significand[1] &&
-+                                   !st->significand[2] &&
-+                                   !st->significand[3] ) {
-+                                      tag = 1;        /* Zero */
-+                              } else {
-+                                      tag = 2;        /* Special */
-+                              }
-+                              break;
-+                      default:
-+                              if ( st->significand[3] & 0x8000 ) {
-+                                      tag = 0;        /* Valid */
-+                              } else {
-+                                      tag = 2;        /* Special */
-+                              }
-+                              break;
-+                      }
-+              } else {
-+                      tag = 3;                        /* Empty */
-+              }
-+              ret |= (tag << (2 * i));
-+              twd = twd >> 1;
-+      }
-+      return ret;
-+}
-+
-+/*
-+ * FXSR floating point environment conversions.
-+ */
-+
-+#ifdef CONFIG_MODE_TT
-+static inline int convert_fxsr_to_user_tt(struct _fpstate *buf, 
-+                                        struct pt_regs *regs)
-+{
-+      struct i387_fxsave_struct *fxsave = SC_FXSR_ENV(PT_REGS_SC(regs));
-+      unsigned long env[7];
-+      struct _fpreg *to;
-+      struct _fpxreg *from;
-+      int i;
-+
-+      env[0] = (unsigned long)fxsave->cwd | 0xffff0000;
-+      env[1] = (unsigned long)fxsave->swd | 0xffff0000;
-+      env[2] = twd_fxsr_to_i387(fxsave);
-+      env[3] = fxsave->fip;
-+      env[4] = fxsave->fcs | ((unsigned long)fxsave->fop << 16);
-+      env[5] = fxsave->foo;
-+      env[6] = fxsave->fos;
-+
-+      if ( __copy_to_user( buf, env, 7 * sizeof(unsigned long) ) )
-+              return 1;
-+
-+      to = &buf->_st[0];
-+      from = (struct _fpxreg *) &fxsave->st_space[0];
-+      for ( i = 0 ; i < 8 ; i++, to++, from++ ) {
-+              if ( __copy_to_user( to, from, sizeof(*to) ) )
-+                      return 1;
-+      }
-+      return 0;
-+}
-+#endif
-+
-+static inline int convert_fxsr_to_user(struct _fpstate *buf, 
-+                                     struct pt_regs *regs)
-+{
-+      return(CHOOSE_MODE(convert_fxsr_to_user_tt(buf, regs), 0));
-+}
-+
-+#ifdef CONFIG_MODE_TT
-+static inline int convert_fxsr_from_user_tt(struct pt_regs *regs,
-+                                          struct _fpstate *buf)
-+{
-+      struct i387_fxsave_struct *fxsave = SC_FXSR_ENV(PT_REGS_SC(regs));
-+      unsigned long env[7];
-+      struct _fpxreg *to;
-+      struct _fpreg *from;
-+      int i;
-+
-+      if ( __copy_from_user( env, buf, 7 * sizeof(long) ) )
-+              return 1;
-+
-+      fxsave->cwd = (unsigned short)(env[0] & 0xffff);
-+      fxsave->swd = (unsigned short)(env[1] & 0xffff);
-+      fxsave->twd = twd_i387_to_fxsr((unsigned short)(env[2] & 0xffff));
-+      fxsave->fip = env[3];
-+      fxsave->fop = (unsigned short)((env[4] & 0xffff0000) >> 16);
-+      fxsave->fcs = (env[4] & 0xffff);
-+      fxsave->foo = env[5];
-+      fxsave->fos = env[6];
-+
-+      to = (struct _fpxreg *) &fxsave->st_space[0];
-+      from = &buf->_st[0];
-+      for ( i = 0 ; i < 8 ; i++, to++, from++ ) {
-+              if ( __copy_from_user( to, from, sizeof(*from) ) )
-+                      return 1;
-+      }
-+      return 0;
-+}
-+#endif
-+
-+static inline int convert_fxsr_from_user(struct pt_regs *regs, 
-+                                       struct _fpstate *buf)
-+{
-+      return(CHOOSE_MODE(convert_fxsr_from_user_tt(regs, buf), 0));
-+}
-+
-+int get_fpregs(unsigned long buf, struct task_struct *child)
-+{
-+      int err;
-+
-+      err = convert_fxsr_to_user((struct _fpstate *) buf, 
-+                                 &child->thread.regs);
-+      if(err) return(-EFAULT);
-+      else return(0);
-+}
-+
-+int set_fpregs(unsigned long buf, struct task_struct *child)
-+{
-+      int err;
-+
-+      err = convert_fxsr_from_user(&child->thread.regs, 
-+                                   (struct _fpstate *) buf);
-+      if(err) return(-EFAULT);
-+      else return(0);
-+}
-+
-+#ifdef CONFIG_MODE_TT
-+int get_fpxregs_tt(unsigned long buf, struct task_struct *tsk)
-+{
-+      struct pt_regs *regs = &tsk->thread.regs;
-+      struct i387_fxsave_struct *fxsave = SC_FXSR_ENV(PT_REGS_SC(regs));
-+      int err;
-+
-+      err = __copy_to_user((void *) buf, fxsave,
-+                           sizeof(struct user_fxsr_struct));
-+      if(err) return -EFAULT;
-+      else return 0;
-+}
-+#endif
-+
-+int get_fpxregs(unsigned long buf, struct task_struct *tsk)
-+{
-+      return(CHOOSE_MODE(get_fpxregs_tt(buf, tsk), 0));
-+}
-+
-+#ifdef CONFIG_MODE_TT
-+int set_fpxregs_tt(unsigned long buf, struct task_struct *tsk)
-+{
-+      struct pt_regs *regs = &tsk->thread.regs;
-+      struct i387_fxsave_struct *fxsave = SC_FXSR_ENV(PT_REGS_SC(regs));
-+      int err;
-+
-+      err = __copy_from_user(fxsave, (void *) buf,
-+                             sizeof(struct user_fxsr_struct) );
-+      if(err) return -EFAULT;
-+      else return 0;
-+}
-+#endif
-+
-+int set_fpxregs(unsigned long buf, struct task_struct *tsk)
-+{
-+      return(CHOOSE_MODE(set_fpxregs_tt(buf, tsk), 0));
-+}
-+
-+#ifdef notdef
-+int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu)
-+{
-+      fpu->cwd = (((SC_FP_CW(PT_REGS_SC(regs)) & 0xffff) << 16) |
-+                  (SC_FP_SW(PT_REGS_SC(regs)) & 0xffff));
-+      fpu->swd = SC_FP_CSSEL(PT_REGS_SC(regs)) & 0xffff;
-+      fpu->twd = SC_FP_IPOFF(PT_REGS_SC(regs));
-+      fpu->fip = SC_FP_CSSEL(PT_REGS_SC(regs)) & 0xffff;
-+      fpu->fcs = SC_FP_DATAOFF(PT_REGS_SC(regs));
-+      fpu->foo = SC_FP_DATASEL(PT_REGS_SC(regs));
-+      fpu->fos = 0;
-+      memcpy(fpu->st_space, (void *) SC_FP_ST(PT_REGS_SC(regs)),
-+             sizeof(fpu->st_space));
-+      return(1);
-+}
-+#endif
-+
-+#ifdef CONFIG_MODE_TT
-+static inline void copy_fpu_fxsave_tt(struct pt_regs *regs,
-+                                    struct user_i387_struct *buf)
-+{
-+      struct i387_fxsave_struct *fpu = SC_FXSR_ENV(PT_REGS_SC(regs));
-+      unsigned short *to;
-+      unsigned short *from;
-+      int i;
-+
-+      memcpy( buf, fpu, 7 * sizeof(long) );
-+
-+      to = (unsigned short *) &buf->st_space[0];
-+      from = (unsigned short *) &fpu->st_space[0];
-+      for ( i = 0 ; i < 8 ; i++, to += 5, from += 8 ) {
-+              memcpy( to, from, 5 * sizeof(unsigned short) );
-+      }
-+}
-+#endif
-+
-+static inline void copy_fpu_fxsave(struct pt_regs *regs,
-+                                 struct user_i387_struct *buf)
-+{
-+      (void) CHOOSE_MODE(copy_fpu_fxsave_tt(regs, buf), 0);
-+}
-+
-+int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu )
-+{
-+      copy_fpu_fxsave(regs, (struct user_i387_struct *) fpu);
-+      return(1);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/ptrace_user.c um/arch/um/sys-i386/ptrace_user.c
---- orig/arch/um/sys-i386/ptrace_user.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/ptrace_user.c  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,117 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stdio.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <linux/stddef.h>
-+#include <sys/ptrace.h>
-+#include <asm/ptrace.h>
-+#include <asm/user.h>
-+#include "kern_util.h"
-+#include "sysdep/thread.h"
-+#include "user.h"
-+#include "os.h"
-+
-+int ptrace_getregs(long pid, unsigned long *regs_out)
-+{
-+      return(ptrace(PTRACE_GETREGS, pid, 0, regs_out));
-+}
-+
-+int ptrace_setregs(long pid, unsigned long *regs)
-+{
-+      return(ptrace(PTRACE_SETREGS, pid, 0, regs));
-+}
-+
-+int ptrace_getfpregs(long pid, unsigned long *regs)
-+{
-+      return(ptrace(PTRACE_GETFPREGS, pid, 0, regs));
-+}
-+
-+static void write_debugregs(int pid, unsigned long *regs)
-+{
-+      struct user *dummy;
-+      int nregs, i;
-+
-+      dummy = NULL;
-+      nregs = sizeof(dummy->u_debugreg)/sizeof(dummy->u_debugreg[0]);
-+      for(i = 0; i < nregs; i++){
-+              if((i == 4) || (i == 5)) continue;
-+              if(ptrace(PTRACE_POKEUSR, pid, &dummy->u_debugreg[i],
-+                        regs[i]) < 0)
-+                      printk("write_debugregs - ptrace failed, "
-+                             "errno = %d\n", errno);
-+      }
-+}
-+
-+static void read_debugregs(int pid, unsigned long *regs)
-+{
-+      struct user *dummy;
-+      int nregs, i;
-+
-+      dummy = NULL;
-+      nregs = sizeof(dummy->u_debugreg)/sizeof(dummy->u_debugreg[0]);
-+      for(i = 0; i < nregs; i++){
-+              regs[i] = ptrace(PTRACE_PEEKUSR, pid, 
-+                               &dummy->u_debugreg[i], 0);
-+      }
-+}
-+
-+/* Accessed only by the tracing thread */
-+static unsigned long kernel_debugregs[8] = { [ 0 ... 7 ] = 0 };
-+static int debugregs_seq = 0;
-+
-+void arch_enter_kernel(void *task, int pid)
-+{
-+      read_debugregs(pid, TASK_DEBUGREGS(task));
-+      write_debugregs(pid, kernel_debugregs);
-+}
-+
-+void arch_leave_kernel(void *task, int pid)
-+{
-+      read_debugregs(pid, kernel_debugregs);
-+      write_debugregs(pid, TASK_DEBUGREGS(task));
-+}
-+
-+void ptrace_pokeuser(unsigned long addr, unsigned long data)
-+{
-+      if((addr < offsetof(struct user, u_debugreg[0])) ||
-+         (addr > offsetof(struct user, u_debugreg[7])))
-+              return;
-+      addr -= offsetof(struct user, u_debugreg[0]);
-+      addr = addr >> 2;
-+      if(kernel_debugregs[addr] == data) return;
-+
-+      kernel_debugregs[addr] = data;
-+      debugregs_seq++;
-+}
-+
-+static void update_debugregs_cb(void *arg)
-+{
-+      int pid = *((int *) arg);
-+
-+      write_debugregs(pid, kernel_debugregs);
-+}
-+
-+void update_debugregs(int seq)
-+{
-+      int me;
-+
-+      if(seq == debugregs_seq) return;
-+
-+      me = os_getpid();
-+      initial_thread_cb(update_debugregs_cb, &me);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/sigcontext.c um/arch/um/sys-i386/sigcontext.c
---- orig/arch/um/sys-i386/sigcontext.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/sigcontext.c   2002-12-02 23:20:13.000000000 -0500
-@@ -0,0 +1,80 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include <stddef.h>
-+#include <string.h>
-+#include <asm/ptrace.h>
-+#include <asm/sigcontext.h>
-+#include "sysdep/ptrace.h"
-+#include "kern_util.h"
-+#include "frame_user.h"
-+
-+int sc_size(void *data)
-+{
-+      struct arch_frame_data *arch = data;
-+
-+      return(sizeof(struct sigcontext) + arch->fpstate_size);
-+}
-+
-+void sc_to_sc(void *to_ptr, void *from_ptr)
-+{
-+      struct sigcontext *to = to_ptr, *from = from_ptr;
-+      int size = sizeof(*to) + signal_frame_sc.common.arch.fpstate_size;
-+
-+      memcpy(to, from, size);
-+      if(from->fpstate != NULL) to->fpstate = (struct _fpstate *) (to + 1);
-+}
-+
-+unsigned long *sc_sigmask(void *sc_ptr)
-+{
-+      struct sigcontext *sc = sc_ptr;
-+
-+      return(&sc->oldmask);
-+}
-+
-+int sc_get_fpregs(unsigned long buf, void *sc_ptr)
-+{
-+      struct sigcontext *sc = sc_ptr;
-+      struct _fpstate *from = sc->fpstate, *to = (struct _fpstate *) buf;
-+      int err = 0;
-+
-+      if(from == NULL){
-+              err |= clear_user_proc(&to->cw, sizeof(to->cw));
-+              err |= clear_user_proc(&to->sw, sizeof(to->sw));
-+              err |= clear_user_proc(&to->tag, sizeof(to->tag));
-+              err |= clear_user_proc(&to->ipoff, sizeof(to->ipoff));
-+              err |= clear_user_proc(&to->cssel, sizeof(to->cssel));
-+              err |= clear_user_proc(&to->dataoff, sizeof(to->dataoff));
-+              err |= clear_user_proc(&to->datasel, sizeof(to->datasel));
-+              err |= clear_user_proc(&to->_st, sizeof(to->_st));
-+      }
-+      else {
-+              err |= copy_to_user_proc(&to->cw, &from->cw, sizeof(to->cw));
-+              err |= copy_to_user_proc(&to->sw, &from->sw, sizeof(to->sw));
-+              err |= copy_to_user_proc(&to->tag, &from->tag, 
-+                                       sizeof(to->tag));
-+              err |= copy_to_user_proc(&to->ipoff, &from->ipoff, 
-+                                       sizeof(to->ipoff));
-+              err |= copy_to_user_proc(&to->cssel,& from->cssel, 
-+                                       sizeof(to->cssel));
-+              err |= copy_to_user_proc(&to->dataoff, &from->dataoff, 
-+                                  sizeof(to->dataoff));
-+              err |= copy_to_user_proc(&to->datasel, &from->datasel, 
-+                                  sizeof(to->datasel));
-+              err |= copy_to_user_proc(to->_st, from->_st, sizeof(to->_st));
-+      }
-+      return(err);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/syscalls.c um/arch/um/sys-i386/syscalls.c
---- orig/arch/um/sys-i386/syscalls.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/syscalls.c     2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,68 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "asm/mman.h"
-+#include "asm/uaccess.h"
-+#include "asm/unistd.h"
-+
-+/*
-+ * Perform the select(nd, in, out, ex, tv) and mmap() system
-+ * calls. Linux/i386 didn't use to be able to handle more than
-+ * 4 system call parameters, so these system calls used a memory
-+ * block for parameter passing..
-+ */
-+
-+struct mmap_arg_struct {
-+      unsigned long addr;
-+      unsigned long len;
-+      unsigned long prot;
-+      unsigned long flags;
-+      unsigned long fd;
-+      unsigned long offset;
-+};
-+
-+extern int old_mmap(unsigned long addr, unsigned long len,
-+                  unsigned long prot, unsigned long flags,
-+                  unsigned long fd, unsigned long offset);
-+
-+int old_mmap_i386(struct mmap_arg_struct *arg)
-+{
-+      struct mmap_arg_struct a;
-+      int err = -EFAULT;
-+
-+      if (copy_from_user(&a, arg, sizeof(a)))
-+              goto out;
-+
-+      err = old_mmap(a.addr, a.len, a.prot, a.flags, a.fd, a.offset);
-+ out:
-+      return err;
-+}
-+
-+struct sel_arg_struct {
-+      unsigned long n;
-+      fd_set *inp, *outp, *exp;
-+      struct timeval *tvp;
-+};
-+
-+int old_select(struct sel_arg_struct *arg)
-+{
-+      struct sel_arg_struct a;
-+
-+      if (copy_from_user(&a, arg, sizeof(a)))
-+              return -EFAULT;
-+      /* sys_select() does the appropriate kernel locking */
-+      return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp);
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/sysrq.c um/arch/um/sys-i386/sysrq.c
---- orig/arch/um/sys-i386/sysrq.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/sysrq.c        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,30 @@
-+#include "linux/kernel.h"
-+#include "linux/smp.h"
-+#include "linux/sched.h"
-+#include "asm/ptrace.h"
-+#include "sysrq.h"
-+
-+void show_regs(struct pt_regs *regs)
-+{
-+        printk("\n");
-+        printk("EIP: %04lx:[<%08lx>] CPU: %d %s", 
-+             0xffff & PT_REGS_CS(regs), PT_REGS_IP(regs),
-+             smp_processor_id(), print_tainted());
-+        if (PT_REGS_CS(regs) & 3)
-+                printk(" ESP: %04lx:%08lx", 0xffff & PT_REGS_SS(regs),
-+                     PT_REGS_SP(regs));
-+        printk(" EFLAGS: %08lx\n    %s\n", PT_REGS_EFLAGS(regs),
-+             print_tainted());
-+        printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
-+                PT_REGS_EAX(regs), PT_REGS_EBX(regs), 
-+             PT_REGS_ECX(regs), 
-+             PT_REGS_EDX(regs));
-+        printk("ESI: %08lx EDI: %08lx EBP: %08lx",
-+             PT_REGS_ESI(regs), PT_REGS_EDI(regs), 
-+             PT_REGS_EBP(regs));
-+        printk(" DS: %04lx ES: %04lx\n",
-+             0xffff & PT_REGS_DS(regs), 
-+             0xffff & PT_REGS_ES(regs));
-+
-+        show_trace((unsigned long *) &regs);
-+}
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/util/Makefile um/arch/um/sys-i386/util/Makefile
---- orig/arch/um/sys-i386/util/Makefile        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/util/Makefile  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,28 @@
-+EXE = mk_sc mk_thread
-+
-+include $(TOPDIR)/Rules.make
-+
-+all : $(EXE)
-+
-+mk_sc : mk_sc.o
-+      $(CC) -o mk_sc mk_sc.o
-+
-+mk_sc.o : mk_sc.c
-+      $(CC) -c $< 
-+
-+mk_thread : mk_thread_user.o mk_thread_kern.o
-+      $(CC) -o mk_thread mk_thread_user.o mk_thread_kern.o
-+
-+mk_thread_user.o : mk_thread_user.c
-+      $(CC) -c $< 
-+
-+mk_thread_kern.o : mk_thread_kern.c
-+      $(CC) $(CFLAGS) -c $< 
-+
-+clean :
-+      $(RM) $(EXE) *.o
-+
-+archmrproper : clean
-+
-+fastdep :
-+
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/util/mk_sc.c um/arch/um/sys-i386/util/mk_sc.c
---- orig/arch/um/sys-i386/util/mk_sc.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/util/mk_sc.c   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,51 @@
-+#include <stdio.h>
-+#include <signal.h>
-+#include <linux/stddef.h>
-+
-+#define SC_OFFSET(name, field) \
-+  printf("#define " name "(sc) *((unsigned long *) &(((char *) (sc))[%d]))\n",\
-+       offsetof(struct sigcontext, field))
-+
-+#define SC_FP_OFFSET(name, field) \
-+  printf("#define " name \
-+       "(sc) *((unsigned long *) &(((char *) (SC_FPSTATE(sc)))[%d]))\n",\
-+       offsetof(struct _fpstate, field))
-+
-+#define SC_FP_OFFSET_PTR(name, field, type) \
-+  printf("#define " name \
-+       "(sc) ((" type " *) &(((char *) (SC_FPSTATE(sc)))[%d]))\n",\
-+       offsetof(struct _fpstate, field))
-+
-+int main(int argc, char **argv)
-+{
-+  SC_OFFSET("SC_IP", eip);
-+  SC_OFFSET("SC_SP", esp);
-+  SC_OFFSET("SC_FS", fs);
-+  SC_OFFSET("SC_GS", gs);
-+  SC_OFFSET("SC_DS", ds);
-+  SC_OFFSET("SC_ES", es);
-+  SC_OFFSET("SC_SS", ss);
-+  SC_OFFSET("SC_CS", cs);
-+  SC_OFFSET("SC_EFLAGS", eflags);
-+  SC_OFFSET("SC_EAX", eax);
-+  SC_OFFSET("SC_EBX", ebx);
-+  SC_OFFSET("SC_ECX", ecx);
-+  SC_OFFSET("SC_EDX", edx);
-+  SC_OFFSET("SC_EDI", edi);
-+  SC_OFFSET("SC_ESI", esi);
-+  SC_OFFSET("SC_EBP", ebp);
-+  SC_OFFSET("SC_TRAPNO", trapno);
-+  SC_OFFSET("SC_ERR", err);
-+  SC_OFFSET("SC_CR2", cr2);
-+  SC_OFFSET("SC_FPSTATE", fpstate);
-+  SC_FP_OFFSET("SC_FP_CW", cw);
-+  SC_FP_OFFSET("SC_FP_SW", sw);
-+  SC_FP_OFFSET("SC_FP_TAG", tag);
-+  SC_FP_OFFSET("SC_FP_IPOFF", ipoff);
-+  SC_FP_OFFSET("SC_FP_CSSEL", cssel);
-+  SC_FP_OFFSET("SC_FP_DATAOFF", dataoff);
-+  SC_FP_OFFSET("SC_FP_DATASEL", datasel);
-+  SC_FP_OFFSET_PTR("SC_FP_ST", _st, "struct _fpstate");
-+  SC_FP_OFFSET_PTR("SC_FXSR_ENV", _fxsr_env, "void");
-+  return(0);
-+}
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/util/mk_thread_kern.c um/arch/um/sys-i386/util/mk_thread_kern.c
---- orig/arch/um/sys-i386/util/mk_thread_kern.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/util/mk_thread_kern.c  2002-12-09 23:24:38.000000000 -0500
-@@ -0,0 +1,22 @@
-+#include "linux/config.h"
-+#include "linux/stddef.h"
-+#include "linux/sched.h"
-+
-+extern void print_head(void);
-+extern void print_constant_ptr(char *name, int value);
-+extern void print_constant(char *name, char *type, int value);
-+extern void print_tail(void);
-+
-+#define THREAD_OFFSET(field) offsetof(struct task_struct, thread.field)
-+
-+int main(int argc, char **argv)
-+{
-+  print_head();
-+  print_constant_ptr("TASK_DEBUGREGS", THREAD_OFFSET(arch.debugregs));
-+#ifdef CONFIG_MODE_TT
-+  print_constant("TASK_EXTERN_PID", "int", THREAD_OFFSET(mode.tt.extern_pid));
-+#endif
-+  print_tail();
-+  return(0);
-+}
-+
-diff -Naur -X ../exclude-files orig/arch/um/sys-i386/util/mk_thread_user.c um/arch/um/sys-i386/util/mk_thread_user.c
---- orig/arch/um/sys-i386/util/mk_thread_user.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/util/mk_thread_user.c  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,30 @@
-+#include <stdio.h>
-+
-+void print_head(void)
-+{
-+  printf("/*\n");
-+  printf(" * Generated by mk_thread\n");
-+  printf(" */\n");
-+  printf("\n");
-+  printf("#ifndef __UM_THREAD_H\n");
-+  printf("#define __UM_THREAD_H\n");
-+  printf("\n");
-+}
-+
-+void print_constant_ptr(char *name, int value)
-+{
-+  printf("#define %s(task) ((unsigned long *) "
-+       "&(((char *) (task))[%d]))\n", name, value);
-+}
-+
-+void print_constant(char *name, char *type, int value)
-+{
-+  printf("#define %s(task) *((%s *) &(((char *) (task))[%d]))\n", name, type, 
-+       value);
-+}
-+
-+void print_tail(void)
-+{
-+  printf("\n");
-+  printf("#endif\n");
-+}
-diff -Naur -X ../exclude-files orig/arch/um/sys-ia64/Makefile um/arch/um/sys-ia64/Makefile
---- orig/arch/um/sys-ia64/Makefile     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-ia64/Makefile       2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,26 @@
-+OBJ = sys.o
-+
-+OBJS =
-+
-+all: $(OBJ)
-+
-+$(OBJ): $(OBJS)
-+      rm -f $@
-+      $(LD) $(LINKFLAGS) --start-group $^ --end-group -o $@
-+clean:
-+      rm -f $(OBJS)
-+
-+fastdep:
-+
-+archmrproper:
-+
-+archclean:
-+      rm -f link.ld
-+      @$(MAKEBOOT) clean
-+
-+archdep:
-+      @$(MAKEBOOT) dep
-+
-+modules:
-+
-+include $(TOPDIR)/Rules.make
-diff -Naur -X ../exclude-files orig/arch/um/sys-ppc/Makefile um/arch/um/sys-ppc/Makefile
---- orig/arch/um/sys-ppc/Makefile      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-ppc/Makefile        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,80 @@
-+OBJ = sys.o
-+
-+.S.o:
-+      $(CC) $(AFLAGS) -D__ASSEMBLY__ -D__UM_PPC__ -c $< -o $*.o
-+
-+OBJS = ptrace.o sigcontext.o semaphore.o checksum.o miscthings.o misc.o \
-+      ptrace_user.o sysrq.o
-+
-+EXTRA_AFLAGS := -DCONFIG_ALL_PPC -I. -I$(TOPDIR)/arch/ppc/kernel
-+
-+all: $(OBJ)
-+
-+$(OBJ): $(OBJS)
-+      rm -f $@
-+      $(LD) $(LINKFLAGS) --start-group $^ --end-group -o $@
-+
-+ptrace_user.o: ptrace_user.c
-+      $(CC) -D__KERNEL__ $(USER_CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<
-+
-+sigcontext.o: sigcontext.c
-+      $(CC) $(USER_CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<
-+
-+semaphore.c:
-+      rm -f $@
-+      ln -s $(TOPDIR)/arch/ppc/kernel/$@ $@
-+
-+checksum.S:
-+      rm -f $@
-+      ln -s $(TOPDIR)/arch/ppc/lib/$@ $@
-+
-+mk_defs.c:
-+      rm -f $@
-+      ln -s $(TOPDIR)/arch/ppc/kernel/$@ $@
-+
-+ppc_defs.head:
-+      rm -f $@
-+      ln -s $(TOPDIR)/arch/ppc/kernel/$@ $@
-+
-+ppc_defs.h: mk_defs.c ppc_defs.head \
-+              $(TOPDIR)/include/asm-ppc/mmu.h \
-+              $(TOPDIR)/include/asm-ppc/processor.h \
-+              $(TOPDIR)/include/asm-ppc/pgtable.h \
-+              $(TOPDIR)/include/asm-ppc/ptrace.h
-+#     $(CC) $(CFLAGS) -S mk_defs.c
-+      cp ppc_defs.head ppc_defs.h
-+# for bk, this way we can write to the file even if it's not checked out
-+      echo '#define THREAD 608' >> ppc_defs.h
-+      echo '#define PT_REGS 8' >> ppc_defs.h
-+      echo '#define CLONE_VM 256' >> ppc_defs.h
-+#     chmod u+w ppc_defs.h
-+#     grep '^#define' mk_defs.s >> ppc_defs.h
-+#     rm mk_defs.s
-+
-+# the asm link is horrible, and breaks the other targets.  This is also
-+# not going to work with parallel makes.
-+
-+checksum.o: checksum.S
-+      rm -f asm
-+      ln -s $(TOPDIR)/include/asm-ppc asm
-+      $(CC) $(EXTRA_AFLAGS) $(AFLAGS) -D__ASSEMBLY__ -D__UM_PPC__ -c $< -o $*.o
-+      rm -f asm
-+
-+misc.o: misc.S ppc_defs.h
-+      rm -f asm
-+      ln -s $(TOPDIR)/include/asm-ppc asm
-+      $(CC) $(EXTRA_AFLAGS) $(AFLAGS) -D__ASSEMBLY__ -D__UM_PPC__ -c $< -o $*.o
-+      rm -f asm
-+
-+clean:
-+      rm -f $(OBJS)
-+      rm -f ppc_defs.h
-+      rm -f checksum.S semaphore.c mk_defs.c
-+
-+fastdep:
-+
-+dep:
-+
-+modules:
-+
-+include $(TOPDIR)/Rules.make
-diff -Naur -X ../exclude-files orig/arch/um/sys-ppc/misc.S um/arch/um/sys-ppc/misc.S
---- orig/arch/um/sys-ppc/misc.S        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-ppc/misc.S  2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,116 @@
-+/*
-+ * This file contains miscellaneous low-level functions.
-+ *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
-+ *
-+ * Largely rewritten by Cort Dougan (cort@cs.nmt.edu)
-+ * and Paul Mackerras.
-+ *
-+ * A couple of functions stolen from arch/ppc/kernel/misc.S for UML
-+ * by Chris Emerson.
-+ *
-+ * 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 <linux/config.h>
-+#include <asm/processor.h>
-+#include "ppc_asm.h"
-+
-+#if defined(CONFIG_4xx) || defined(CONFIG_8xx)
-+#define CACHE_LINE_SIZE               16
-+#define LG_CACHE_LINE_SIZE    4
-+#define MAX_COPY_PREFETCH     1
-+#elif !defined(CONFIG_PPC64BRIDGE)
-+#define CACHE_LINE_SIZE               32
-+#define LG_CACHE_LINE_SIZE    5
-+#define MAX_COPY_PREFETCH     4
-+#else
-+#define CACHE_LINE_SIZE               128
-+#define LG_CACHE_LINE_SIZE    7
-+#define MAX_COPY_PREFETCH     1
-+#endif /* CONFIG_4xx || CONFIG_8xx */
-+
-+      .text
-+
-+/*
-+ * Clear a page using the dcbz instruction, which doesn't cause any
-+ * memory traffic (except to write out any cache lines which get
-+ * displaced).  This only works on cacheable memory.
-+ */
-+_GLOBAL(clear_page)
-+      li      r0,4096/CACHE_LINE_SIZE
-+      mtctr   r0
-+#ifdef CONFIG_8xx
-+      li      r4, 0
-+1:    stw     r4, 0(r3)
-+      stw     r4, 4(r3)
-+      stw     r4, 8(r3)
-+      stw     r4, 12(r3)
-+#else
-+1:    dcbz    0,r3
-+#endif
-+      addi    r3,r3,CACHE_LINE_SIZE
-+      bdnz    1b
-+      blr
-+
-+/*
-+ * Copy a whole page.  We use the dcbz instruction on the destination
-+ * to reduce memory traffic (it eliminates the unnecessary reads of
-+ * the destination into cache).  This requires that the destination
-+ * is cacheable.
-+ */
-+#define COPY_16_BYTES         \
-+      lwz     r6,4(r4);       \
-+      lwz     r7,8(r4);       \
-+      lwz     r8,12(r4);      \
-+      lwzu    r9,16(r4);      \
-+      stw     r6,4(r3);       \
-+      stw     r7,8(r3);       \
-+      stw     r8,12(r3);      \
-+      stwu    r9,16(r3)
-+
-+_GLOBAL(copy_page)
-+      addi    r3,r3,-4
-+      addi    r4,r4,-4
-+      li      r5,4
-+
-+#ifndef CONFIG_8xx
-+#if MAX_COPY_PREFETCH > 1
-+      li      r0,MAX_COPY_PREFETCH
-+      li      r11,4
-+      mtctr   r0
-+11:   dcbt    r11,r4
-+      addi    r11,r11,CACHE_LINE_SIZE
-+      bdnz    11b
-+#else /* MAX_COPY_PREFETCH == 1 */
-+      dcbt    r5,r4
-+      li      r11,CACHE_LINE_SIZE+4
-+#endif /* MAX_COPY_PREFETCH */
-+#endif /* CONFIG_8xx */
-+
-+      li      r0,4096/CACHE_LINE_SIZE
-+      mtctr   r0
-+1:
-+#ifndef CONFIG_8xx
-+      dcbt    r11,r4
-+      dcbz    r5,r3
-+#endif
-+      COPY_16_BYTES
-+#if CACHE_LINE_SIZE >= 32
-+      COPY_16_BYTES
-+#if CACHE_LINE_SIZE >= 64
-+      COPY_16_BYTES
-+      COPY_16_BYTES
-+#if CACHE_LINE_SIZE >= 128
-+      COPY_16_BYTES
-+      COPY_16_BYTES
-+      COPY_16_BYTES
-+      COPY_16_BYTES
-+#endif
-+#endif
-+#endif
-+      bdnz    1b
-+      blr
-diff -Naur -X ../exclude-files orig/arch/um/sys-ppc/miscthings.c um/arch/um/sys-ppc/miscthings.c
---- orig/arch/um/sys-ppc/miscthings.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-ppc/miscthings.c    2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,53 @@
-+#include "linux/threads.h"
-+#include "linux/stddef.h"  // for NULL
-+#include "linux/elf.h"  // for AT_NULL
-+
-+/* The following function nicked from arch/ppc/kernel/process.c and
-+ * adapted slightly */
-+/*
-+ * XXX ld.so expects the auxiliary table to start on
-+ * a 16-byte boundary, so we have to find it and
-+ * move it up. :-(
-+ */
-+void shove_aux_table(unsigned long sp)
-+{
-+      int argc;
-+      char *p;
-+      unsigned long e;
-+      unsigned long aux_start, offset;
-+
-+      argc = *(int *)sp;
-+      sp += sizeof(int) + (argc + 1) * sizeof(char *);
-+      /* skip over the environment pointers */
-+      do {
-+              p = *(char **)sp;
-+              sp += sizeof(char *);
-+      } while (p != NULL);
-+      aux_start = sp;
-+      /* skip to the end of the auxiliary table */
-+      do {
-+              e = *(unsigned long *)sp;
-+              sp += 2 * sizeof(unsigned long);
-+      } while (e != AT_NULL);
-+      offset = ((aux_start + 15) & ~15) - aux_start;
-+      if (offset != 0) {
-+              do {
-+                      sp -= sizeof(unsigned long);
-+                      e = *(unsigned long *)sp;
-+                      *(unsigned long *)(sp + offset) = e;
-+              } while (sp > aux_start);
-+      }
-+}
-+/* END stuff taken from arch/ppc/kernel/process.c */
-+
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/sys-ppc/ptrace.c um/arch/um/sys-ppc/ptrace.c
---- orig/arch/um/sys-ppc/ptrace.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-ppc/ptrace.c        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,28 @@
-+#include "linux/sched.h"
-+#include "asm/ptrace.h"
-+
-+int putreg(struct task_struct *child, unsigned long regno, 
-+                unsigned long value)
-+{
-+      child->thread.process_regs.regs[regno >> 2] = value;
-+      return 0;
-+}
-+
-+unsigned long getreg(struct task_struct *child, unsigned long regno)
-+{
-+      unsigned long retval = ~0UL;
-+
-+      retval &= child->thread.process_regs.regs[regno >> 2];
-+      return retval;
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/sys-ppc/ptrace_user.c um/arch/um/sys-ppc/ptrace_user.c
---- orig/arch/um/sys-ppc/ptrace_user.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-ppc/ptrace_user.c   2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,40 @@
-+#include <sys/ptrace.h>
-+#include <errno.h>
-+#include <asm/ptrace.h>
-+#include "sysdep/ptrace.h"
-+
-+int ptrace_getregs(long pid, unsigned long *regs_out)
-+{
-+    int i;
-+    for (i=0; i < sizeof(struct sys_pt_regs)/sizeof(PPC_REG); ++i) {
-+      errno = 0;
-+      regs_out->regs[i] = ptrace(PTRACE_PEEKUSER, pid, i*4, 0);
-+      if (errno) {
-+          return -errno;
-+      }
-+    }
-+    return 0;
-+}
-+
-+int ptrace_setregs(long pid, unsigned long *regs_in)
-+{
-+    int i;
-+    for (i=0; i < sizeof(struct sys_pt_regs)/sizeof(PPC_REG); ++i) {
-+      if (i != 34 /* FIXME: PT_ORIG_R3 */ && i <= PT_MQ) {
-+          if (ptrace(PTRACE_POKEUSER, pid, i*4, regs_in->regs[i]) < 0) {
-+              return -errno;
-+          }
-+      }
-+    }
-+    return 0;
-+}
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/sys-ppc/sigcontext.c um/arch/um/sys-ppc/sigcontext.c
---- orig/arch/um/sys-ppc/sigcontext.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-ppc/sigcontext.c    2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,15 @@
-+#include "asm/ptrace.h"
-+#include "asm/sigcontext.h"
-+#include "sysdep/ptrace.h"
-+#include "user_util.h"
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/sys-ppc/sysrq.c um/arch/um/sys-ppc/sysrq.c
---- orig/arch/um/sys-ppc/sysrq.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-ppc/sysrq.c 2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,43 @@
-+/* 
-+ * Copyright (C) 2001 Chris Emerson (cemerson@chiark.greenend.org.uk)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/kernel.h"
-+#include "linux/smp.h"
-+#include "asm/ptrace.h"
-+#include "sysrq.h"
-+
-+void show_regs(struct pt_regs_subarch *regs)
-+{
-+      printk("\n");
-+      printk("show_regs(): insert regs here.\n");
-+#if 0
-+        printk("\n");
-+        printk("EIP: %04x:[<%08lx>] CPU: %d",0xffff & regs->xcs, regs->eip,
-+             smp_processor_id());
-+        if (regs->xcs & 3)
-+                printk(" ESP: %04x:%08lx",0xffff & regs->xss, regs->esp);
-+        printk(" EFLAGS: %08lx\n", regs->eflags);
-+        printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
-+                regs->eax, regs->ebx, regs->ecx, regs->edx);
-+        printk("ESI: %08lx EDI: %08lx EBP: %08lx",
-+                regs->esi, regs->edi, regs->ebp);
-+        printk(" DS: %04x ES: %04x\n",
-+                0xffff & regs->xds, 0xffff & regs->xes);
-+#endif
-+
-+        show_trace(&regs->gpr[1]);
-+}
-+
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/arch/um/util/Makefile um/arch/um/util/Makefile
---- orig/arch/um/util/Makefile 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/util/Makefile   2002-10-23 21:09:14.000000000 -0400
-@@ -0,0 +1,26 @@
-+ALL = mk_task mk_constants
-+
-+all : $(ALL)
-+
-+mk_task : mk_task_user.o mk_task_kern.o
-+      $(CC) -o mk_task mk_task_user.o mk_task_kern.o
-+
-+mk_task_user.o : mk_task_user.c
-+      $(CC) -c $< 
-+
-+mk_task_kern.o : mk_task_kern.c
-+      $(CC) $(CFLAGS) -c $< 
-+
-+mk_constants : mk_constants_user.o mk_constants_kern.o
-+      $(CC) -o mk_constants mk_constants_user.o mk_constants_kern.o
-+
-+mk_constants_user.o : mk_constants_user.c
-+      $(CC) -c $< 
-+
-+mk_constants_kern.o : mk_constants_kern.c
-+      $(CC) $(CFLAGS) -c $< 
-+
-+clean :
-+      $(RM) $(ALL) *.o *~
-+
-+archmrproper : clean
-diff -Naur -X ../exclude-files orig/arch/um/util/mk_constants_kern.c um/arch/um/util/mk_constants_kern.c
---- orig/arch/um/util/mk_constants_kern.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/util/mk_constants_kern.c        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,24 @@
-+#include "linux/kernel.h"
-+#include "linux/stringify.h"
-+#include "asm/page.h"
-+
-+extern void print_head(void);
-+extern void print_constant_str(char *name, char *value);
-+extern void print_constant_int(char *name, int value);
-+extern void print_tail(void);
-+
-+int main(int argc, char **argv)
-+{
-+  print_head();
-+  print_constant_int("UM_KERN_PAGE_SIZE", PAGE_SIZE);
-+  print_constant_str("UM_KERN_EMERG", KERN_EMERG);
-+  print_constant_str("UM_KERN_ALERT", KERN_ALERT);
-+  print_constant_str("UM_KERN_CRIT", KERN_CRIT);
-+  print_constant_str("UM_KERN_ERR", KERN_ERR);
-+  print_constant_str("UM_KERN_WARNING", KERN_WARNING);
-+  print_constant_str("UM_KERN_NOTICE", KERN_NOTICE);
-+  print_constant_str("UM_KERN_INFO", KERN_INFO);
-+  print_constant_str("UM_KERN_DEBUG", KERN_DEBUG);
-+  print_tail();
-+  return(0);
-+}
-diff -Naur -X ../exclude-files orig/arch/um/util/mk_constants_user.c um/arch/um/util/mk_constants_user.c
---- orig/arch/um/util/mk_constants_user.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/util/mk_constants_user.c        2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,28 @@
-+#include <stdio.h>
-+
-+void print_head(void)
-+{
-+  printf("/*\n");
-+  printf(" * Generated by mk_constants\n");
-+  printf(" */\n");
-+  printf("\n");
-+  printf("#ifndef __UM_CONSTANTS_H\n");
-+  printf("#define __UM_CONSTANTS_H\n");
-+  printf("\n");
-+}
-+
-+void print_constant_str(char *name, char *value)
-+{
-+  printf("#define %s \"%s\"\n", name, value);
-+}
-+
-+void print_constant_int(char *name, int value)
-+{
-+  printf("#define %s %d\n", name, value);
-+}
-+
-+void print_tail(void)
-+{
-+  printf("\n");
-+  printf("#endif\n");
-+}
-diff -Naur -X ../exclude-files orig/arch/um/util/mk_task_kern.c um/arch/um/util/mk_task_kern.c
---- orig/arch/um/util/mk_task_kern.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/util/mk_task_kern.c     2002-12-08 21:03:34.000000000 -0500
-@@ -0,0 +1,17 @@
-+#include "linux/sched.h"
-+#include "linux/stddef.h"
-+
-+extern void print(char *name, char *type, int offset);
-+extern void print_ptr(char *name, char *type, int offset);
-+extern void print_head(void);
-+extern void print_tail(void);
-+
-+int main(int argc, char **argv)
-+{
-+  print_head();
-+  print_ptr("TASK_REGS", "union uml_pt_regs", 
-+          offsetof(struct task_struct, thread.regs));
-+  print("TASK_PID", "int", offsetof(struct task_struct, pid));
-+  print_tail();
-+  return(0);
-+}
-diff -Naur -X ../exclude-files orig/arch/um/util/mk_task_user.c um/arch/um/util/mk_task_user.c
---- orig/arch/um/util/mk_task_user.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/util/mk_task_user.c     2002-10-23 21:08:04.000000000 -0400
-@@ -0,0 +1,30 @@
-+#include <stdio.h>
-+
-+void print(char *name, char *type, int offset)
-+{
-+  printf("#define %s(task) *((%s *) &(((char *) (task))[%d]))\n", name, type,
-+       offset);
-+}
-+
-+void print_ptr(char *name, char *type, int offset)
-+{
-+  printf("#define %s(task) ((%s *) &(((char *) (task))[%d]))\n", name, type,
-+       offset);
-+}
-+
-+void print_head(void)
-+{
-+  printf("/*\n");
-+  printf(" * Generated by mk_task\n");
-+  printf(" */\n");
-+  printf("\n");
-+  printf("#ifndef __TASK_H\n");
-+  printf("#define __TASK_H\n");
-+  printf("\n");
-+}
-+
-+void print_tail(void)
-+{
-+  printf("\n");
-+  printf("#endif\n");
-+}
-diff -Naur -X ../exclude-files orig/CREDITS um/CREDITS
---- orig/CREDITS       2003-02-27 13:04:11.000000000 -0500
-+++ um/CREDITS 2003-02-27 13:05:17.000000000 -0500
-@@ -432,6 +432,7 @@
- E: lars@nocrew.org
- W: http://lars.nocrew.org/
- D: dsp56k device driver
-+D: ptrace proxy in user mode kernel port
- S: Kopmansg 2
- S: 411 13  Goteborg
- S: Sweden
-@@ -721,7 +722,7 @@
- E: jdike@karaya.com
- W: http://user-mode-linux.sourceforge.net
- D: User mode kernel port
--S: RR1 Box 67C
-+S: 375 Tubbs Hill Rd
- S: Deering NH 03244
- S: USA
-diff -Naur -X ../exclude-files orig/Documentation/Configure.help um/Documentation/Configure.help
---- orig/Documentation/Configure.help  2003-02-27 13:04:11.000000000 -0500
-+++ um/Documentation/Configure.help    2003-02-27 13:05:17.000000000 -0500
-@@ -14690,19 +14690,23 @@
-   The module will be called dsbr100.o. If you want to compile it as a
-   module, say M here and read <file:Documentation/modules.txt>.
--Always do synchronous disk IO for UBD
--CONFIG_BLK_DEV_UBD_SYNC
-+CONFIG_BLK_DEV_UBD
-   The User-Mode Linux port includes a driver called UBD which will let
-   you access arbitrary files on the host computer as block devices.
--  Writes to such a block device are not immediately written to the
--  host's disk; this may cause problems if, for example, the User-Mode
--  Linux 'Virtual Machine' uses a journalling file system and the host
--  computer crashes.
-+  Unless you know that you do not need such virtual block devices say
-+  Y here.
-+
-+Always do synchronous disk IO for UBD
-+CONFIG_BLK_DEV_UBD_SYNC
-+  Writes to the virtual block device are not immediately written to the host's
-+  disk; this may cause problems if, for example, the User-Mode Linux
-+  'Virtual Machine' uses a journalling filesystem and the host computer
-+  crashes.
-   Synchronous operation (i.e. always writing data to the host's disk
-   immediately) is configurable on a per-UBD basis by using a special
-   kernel command line option.  Alternatively, you can say Y here to
--  turn on synchronous operation by default for all block.
-+  turn on synchronous operation by default for all block devices.
-   If you're running a journalling file system (like reiserfs, for
-   example) in your virtual machine, you will want to say Y here.  If
-@@ -14714,6 +14718,7 @@
- CONFIG_PT_PROXY
-   This option enables a debugging interface which allows gdb to debug
-   the kernel without needing to actually attach to kernel threads.
-+  CONFIG_XTERM_CHAN must be enabled in order to enable CONFIG_PT_PROXY.
-   If you want to do kernel debugging, say Y here; otherwise say N.
- Management console
-@@ -14908,26 +14913,174 @@
- SLIP transport
- CONFIG_UML_NET_SLIP
--  The Slip User-Mode Linux network transport allows a running UML to
-+  The slip User-Mode Linux network transport allows a running UML to
-   network with its host over a point-to-point link.  Unlike Ethertap,
-   which can carry any Ethernet frame (and hence even non-IP packets),
--  the Slip transport can only carry IP packets.
-+  the slip transport can only carry IP packets.
--  To use this, your host must support Slip devices.
-+  To use this, your host must support slip devices.
-   For more information, see
-   <http://user-mode-linux.sourceforge.net/networking.html>.  That site
--  has examples of the UML command line to use to enable Slip
-+  has examples of the UML command line to use to enable slip
-   networking, and details of a few quirks with it.
--  The Ethertap Transport is preferred over Slip because of its
--  limitation.  If you prefer Slip, however, say Y here.  Otherwise
-+  The Ethertap Transport is preferred over slip because of its
-+  limitations.  If you prefer slip, however, say Y here.  Otherwise
-   choose the Multicast transport (to network multiple UMLs on 
-   multiple hosts), Ethertap (to network with the host and the
-   outside world), and/or the Daemon transport (to network multiple
-   UMLs on a single host).  You may choose more than one without
-   conflict.  If you don't need UML networking, say N.
-+SLiRP transport
-+CONFIG_UML_NET_SLIRP
-+  The SLiRP User-Mode Linux network transport allows a running UML
-+  to network by invoking a program that can handle SLIP encapsulated
-+  packets.  This is commonly (but not limited to) the application
-+  known as SLiRP, a program that can re-socket IP packets back onto
-+  the host on which it is run.  Only IP packets are supported,
-+  unlike other network transports that can handle all Ethernet
-+  frames.  In general, slirp allows the UML the same IP connectivity
-+  to the outside world that the host user is permitted, and unlike
-+  other transports, SLiRP works without the need of root level
-+  privleges, setuid binaries, or SLIP devices on the host.  This
-+  also means not every type of connection is possible, but most
-+  situations can be accomodated with carefully crafted slirp
-+  commands that can be passed along as part of the network device's
-+  setup string.  The effect of this transport on the UML is similar
-+  that of a host behind a firewall that masquerades all network
-+  connections passing through it (but is less secure).
-+
-+  To use this you should first have slirp compiled somewhere
-+  accessible on the host, and have read its documentation.  If you
-+  don't need UML networking, say N.
-+
-+  Startup example: "eth0=slirp,FE:FD:01:02:03:04,/usr/local/bin/slirp"
-+
-+Default main console channel initialization
-+CONFIG_CON_ZERO_CHAN
-+  This is the string describing the channel to which the main console
-+  will be attached by default.  This value can be overridden from the
-+  command line.  The default value is "fd:0,fd:1", which attaches the
-+  main console to stdin and stdout.
-+  It is safe to leave this unchanged.
-+
-+Default console channel initialization
-+CONFIG_CON_CHAN
-+  This is the string describing the channel to which all consoles
-+  except the main console will be attached by default.  This value can
-+  be overridden from the command line.  The default value is "xterm",
-+  which brings them up in xterms.
-+  It is safe to leave this unchanged, although you may wish to change
-+  this if you expect the UML that you build to be run in environments
-+  which don't have X or xterm available.
-+
-+Default serial line channel initialization
-+CONFIG_SSL_CHAN
-+  This is the string describing the channel to which the serial lines
-+  will be attached by default.  This value can be overridden from the
-+  command line.  The default value is "pty", which attaches them to
-+  traditional pseudo-terminals.
-+  It is safe to leave this unchanged, although you may wish to change
-+  this if you expect the UML that you build to be run in environments
-+  which don't have a set of /dev/pty* devices.
-+
-+Nesting level
-+CONFIG_NEST_LEVEL
-+  This is set to the number of layers of UMLs that this UML will be run
-+  in.  Normally, this is zero, meaning that it will run directly on the
-+  host.  Setting it to one will build a UML that can run inside a UML
-+  that is running on the host.  Generally, if you intend this UML to run
-+  inside another UML, set CONFIG_NEST_LEVEL to one more than the host UML.
-+  Note that if the hosting UML has its CONFIG_KERNEL_HALF_GIGS set to 
-+  greater than one, then the guest UML should have its CONFIG_NEST_LEVEL 
-+  set to the host's CONFIG_NEST_LEVEL + CONFIG_KERNEL_HALF_GIGS.
-+  Only change this if you are running nested UMLs.
-+
-+Kernel address space size (in .5G units)
-+CONFIG_KERNEL_HALF_GIGS
-+  This determines the amount of address space that UML will allocate for
-+  its own, measured in half Gigabyte units.  The default is 1.
-+  Change this only if you need to boot UML with an unusually large amount
-+  of physical memory.
-+
-+UML sound support
-+CONFIG_UML_SOUND
-+  This option enables UML sound support.  If enabled, it will pull in
-+  soundcore and the UML hostaudio relay, which acts as a intermediary
-+  between the host's dsp and mixer devices and the UML sound system.
-+  It is safe to say 'Y' here.
-+
-+UML SMP support
-+CONFIG_UML_SMP
-+  This option enables UML SMP support.  UML implements virtual SMP by
-+  allowing as many processes to run simultaneously on the host as
-+  there are virtual processors configured.  Obviously, if the host is
-+  a uniprocessor, those processes will timeshare, but, inside UML,
-+  will appear to be running simultaneously.  If the host is a
-+  multiprocessor, then UML processes may run simultaneously, depending
-+  on the host scheduler.
-+  CONFIG_SMP will be set to whatever this option is set to.
-+  It is safe to leave this unchanged.
-+
-+file descriptor channel support
-+CONFIG_FD_CHAN
-+  This option enables support for attaching UML consoles and serial
-+  lines to already set up file descriptors.  Generally, the main
-+  console is attached to file descriptors 0 and 1 (stdin and stdout),
-+  so it would be wise to leave this enabled unless you intend to
-+  attach it to some other host device.
-+
-+null device channel support
-+CONFIG_NULL_CHAN
-+  This option enables support for attaching UML consoles and serial
-+  lines to a device similar to /dev/null.  Data written to it disappears
-+  and there is never any data to be read.
-+
-+port channel support
-+CONFIG_PORT_CHAN
-+  This option enables support for attaching UML consoles and serial
-+  lines to host portals.  They may be accessed with 'telnet <host>
-+  <port number>'.  Any number of consoles and serial lines may be
-+  attached to a single portal, although what UML device you get when
-+  you telnet to that portal will be unpredictable.
-+  It is safe to say 'Y' here.
-+
-+pty channel support
-+CONFIG_PTY_CHAN
-+  This option enables support for attaching UML consoles and serial
-+  lines to host pseudo-terminals.  Access to both traditional
-+  pseudo-terminals (/dev/pty*) and pts pseudo-terminals are controlled
-+  with this option.  The assignment of UML devices to host devices
-+  will be announced in the kernel message log.
-+  It is safe to say 'Y' here.
-+
-+tty channel support
-+CONFIG_TTY_CHAN
-+  This option enables support for attaching UML consoles and serial
-+  lines to host terminals.  Access to both virtual consoles
-+  (/dev/tty*) and the slave side of pseudo-terminals (/dev/ttyp* and
-+  /dev/pts/*) are controlled by this option.
-+  It is safe to say 'Y' here.
-+
-+xterm channel support
-+CONFIG_XTERM_CHAN
-+  This option enables support for attaching UML consoles and serial
-+  lines to xterms.  Each UML device so assigned will be brought up in
-+  its own xterm.
-+  If you disable this option, then CONFIG_PT_PROXY will be disabled as
-+  well, since UML's gdb currently requires an xterm.
-+  It is safe to say 'Y' here.
-+
-+tty logging
-+CONFIG_TTY_LOG
-+  This option enables logging of all data going through pseudo-terminals
-+  to the host.  This is primarily useful for honeypots, where you want
-+  secure keystroke logging that can't be detected or disabled by root.
-+  Say 'N' unless you are setting up a UML honeypot or otherwise know that
-+  you want this option.
-+
- Microtek USB scanner support
- CONFIG_USB_MICROTEK
-   Say Y here if you want support for the Microtek X6USB and
-diff -Naur -X ../exclude-files orig/drivers/char/Makefile um/drivers/char/Makefile
---- orig/drivers/char/Makefile 2003-02-27 13:04:15.000000000 -0500
-+++ um/drivers/char/Makefile   2003-02-27 13:05:21.000000000 -0500
-@@ -95,6 +95,12 @@
-   endif
- endif
-+ifeq ($(ARCH),um)
-+  KEYMAP   =
-+  KEYBD    =
-+  CONSOLE  =
-+endif
-+
- ifeq ($(ARCH),sh)
-   KEYMAP   =
-   KEYBD    =
-diff -Naur -X ../exclude-files orig/drivers/char/tty_io.c um/drivers/char/tty_io.c
---- orig/drivers/char/tty_io.c 2003-02-27 13:04:15.000000000 -0500
-+++ um/drivers/char/tty_io.c   2003-02-27 13:05:21.000000000 -0500
-@@ -637,6 +637,9 @@
-       wake_up_interruptible(&tty->write_wait);
- }
-+extern int write_tty_log(int fd, const unsigned char *buf, int len, void *tty,
-+                       int direction);
-+
- static ssize_t tty_read(struct file * file, char * buf, size_t count, 
-                       loff_t *ppos)
- {
-@@ -677,8 +680,13 @@
-       else
-               i = -EIO;
-       unlock_kernel();
--      if (i > 0)
-+      if (i > 0){
-               inode->i_atime = CURRENT_TIME;
-+#ifdef CONFIG_TTY_LOG
-+              if(tty->log_fd >= 0) 
-+                write_tty_log(tty->log_fd, buf, i, tty, 1);
-+#endif
-+      }
-       return i;
- }
-@@ -732,6 +740,10 @@
-       if (written) {
-               file->f_dentry->d_inode->i_mtime = CURRENT_TIME;
-               ret = written;
-+#ifdef CONFIG_TTY_LOG
-+              if(tty->log_fd >= 0) 
-+                write_tty_log(tty->log_fd, buf - ret, ret, tty, 0);
-+#endif
-       }
-       up(&tty->atomic_write);
-       return ret;
-@@ -945,6 +957,9 @@
-                       goto release_mem_out;
-               }
-       }
-+#ifdef CONFIG_TTY_LOG
-+      tty->log_fd = -1;
-+#endif
-       goto success;
-       /*
-@@ -1039,6 +1054,8 @@
-       free_tty_struct(tty);
- }
-+extern int close_tty_log(int fd, void *tty);
-+
- /*
-  * Even releasing the tty structures is a tricky business.. We have
-  * to be very careful that the structures are all released at the
-@@ -1267,6 +1284,10 @@
-       run_task_queue(&tq_timer);
-       flush_scheduled_tasks();
-+#ifdef CONFIG_TTY_LOG
-+      if(tty->log_fd >= 0) close_tty_log(tty->log_fd, tty);
-+#endif
-+
-       /* 
-        * The release_mem function takes care of the details of clearing
-        * the slots and preserving the termios structure.
-@@ -1274,6 +1295,8 @@
-       release_mem(tty, idx);
- }
-+extern int open_tty_log(void *tty, void *current_tty); 
-+
- /*
-  * tty_open and tty_release keep up the tty count that contains the
-  * number of opens done on a tty. We cannot use the inode-count, as
-@@ -1425,6 +1448,11 @@
-                       nr_warns++;
-               }
-       }
-+
-+#ifdef CONFIG_TTY_LOG
-+      if(tty->log_fd < 0)
-+             tty->log_fd = open_tty_log(tty, current->tty);
-+#endif
-       return 0;
- }
-diff -Naur -X ../exclude-files orig/drivers/net/setup.c um/drivers/net/setup.c
---- orig/drivers/net/setup.c   2002-09-15 12:13:19.000000000 -0400
-+++ um/drivers/net/setup.c     2002-10-23 21:08:05.000000000 -0400
-@@ -28,7 +28,6 @@
- extern int lmc_setup(void);
- extern int madgemc_probe(void);
--extern int uml_net_probe(void);
- /* Pad device name to IFNAMSIZ=16. F.e. __PAD6 is string of 9 zeros. */
- #define __PAD6 "\0\0\0\0\0\0\0\0\0"
-@@ -103,9 +102,6 @@
- #ifdef CONFIG_MADGEMC
-       {madgemc_probe, 0},
- #endif
--#ifdef CONFIG_UML_NET
--      {uml_net_probe, 0},
--#endif
-  
-       {NULL, 0},
- };
-diff -Naur -X ../exclude-files orig/include/asm-i386/hardirq.h um/include/asm-i386/hardirq.h
---- orig/include/asm-i386/hardirq.h    2002-09-15 12:13:19.000000000 -0400
-+++ um/include/asm-i386/hardirq.h      2003-05-28 11:02:07.000000000 -0400
-@@ -4,6 +4,7 @@
- #include <linux/config.h>
- #include <linux/threads.h>
- #include <linux/irq.h>
-+#include <asm/processor.h>            /* for cpu_relax */
- /* assembly code in softirq.h is sensitive to the offsets of these fields */
- typedef struct {
-diff -Naur -X ../exclude-files orig/include/asm-um/a.out.h um/include/asm-um/a.out.h
---- orig/include/asm-um/a.out.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/a.out.h  2002-10-27 11:54:50.000000000 -0500
-@@ -0,0 +1,20 @@
-+#ifndef __UM_A_OUT_H
-+#define __UM_A_OUT_H
-+
-+#include "linux/config.h"
-+#include "asm/arch/a.out.h"
-+#include "choose-mode.h"
-+
-+#undef STACK_TOP
-+
-+extern unsigned long stacksizelim;
-+
-+extern unsigned long host_task_size;
-+
-+#define STACK_ROOM (stacksizelim)
-+
-+extern int honeypot;
-+#define STACK_TOP \
-+      CHOOSE_MODE((honeypot ? host_task_size : task_size), task_size)
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/archparam-i386.h um/include/asm-um/archparam-i386.h
---- orig/include/asm-um/archparam-i386.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/archparam-i386.h 2002-12-08 20:09:11.000000000 -0500
-@@ -0,0 +1,80 @@
-+/* 
-+ * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_ARCHPARAM_I386_H
-+#define __UM_ARCHPARAM_I386_H
-+
-+/********* Bits for asm-um/elf.h ************/
-+
-+#include "user.h"
-+
-+#define ELF_PLATFORM "i586"
-+
-+#define ELF_ET_DYN_BASE (2 * TASK_SIZE / 3)
-+
-+typedef struct user_i387_struct elf_fpregset_t;
-+typedef unsigned long elf_greg_t;
-+
-+#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t))
-+typedef elf_greg_t elf_gregset_t[ELF_NGREG];
-+
-+#define ELF_DATA        ELFDATA2LSB
-+#define ELF_ARCH        EM_386
-+
-+#define ELF_PLAT_INIT(regs) do { \
-+      PT_REGS_EBX(regs) = 0; \
-+      PT_REGS_ECX(regs) = 0; \
-+      PT_REGS_EDX(regs) = 0; \
-+      PT_REGS_ESI(regs) = 0; \
-+      PT_REGS_EDI(regs) = 0; \
-+      PT_REGS_EBP(regs) = 0; \
-+      PT_REGS_EAX(regs) = 0; \
-+} while(0)
-+
-+/* Shamelessly stolen from include/asm-i386/elf.h */
-+
-+#define ELF_CORE_COPY_REGS(pr_reg, regs) do { \
-+      pr_reg[0] = PT_REGS_EBX(regs);          \
-+      pr_reg[1] = PT_REGS_ECX(regs);          \
-+      pr_reg[2] = PT_REGS_EDX(regs);          \
-+      pr_reg[3] = PT_REGS_ESI(regs);          \
-+      pr_reg[4] = PT_REGS_EDI(regs);          \
-+      pr_reg[5] = PT_REGS_EBP(regs);          \
-+      pr_reg[6] = PT_REGS_EAX(regs);          \
-+      pr_reg[7] = PT_REGS_DS(regs);           \
-+      pr_reg[8] = PT_REGS_ES(regs);           \
-+      /* fake once used fs and gs selectors? */       \
-+      pr_reg[9] = PT_REGS_DS(regs);           \
-+      pr_reg[10] = PT_REGS_DS(regs);          \
-+      pr_reg[11] = PT_REGS_SYSCALL_NR(regs);  \
-+      pr_reg[12] = PT_REGS_IP(regs);          \
-+      pr_reg[13] = PT_REGS_CS(regs);          \
-+      pr_reg[14] = PT_REGS_EFLAGS(regs);      \
-+      pr_reg[15] = PT_REGS_SP(regs);          \
-+      pr_reg[16] = PT_REGS_SS(regs);          \
-+} while(0);
-+
-+/********* Bits for asm-um/delay.h **********/
-+
-+typedef unsigned long um_udelay_t;
-+
-+/********* Nothing for asm-um/hardirq.h **********/
-+
-+/********* Nothing for asm-um/hw_irq.h **********/
-+
-+/********* Nothing for asm-um/string.h **********/
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/archparam-ppc.h um/include/asm-um/archparam-ppc.h
---- orig/include/asm-um/archparam-ppc.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/archparam-ppc.h  2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,41 @@
-+#ifndef __UM_ARCHPARAM_PPC_H
-+#define __UM_ARCHPARAM_PPC_H
-+
-+/********* Bits for asm-um/elf.h ************/
-+
-+#define ELF_PLATFORM (0)
-+
-+#define ELF_ET_DYN_BASE (0x08000000)
-+
-+/* the following stolen from asm-ppc/elf.h */
-+#define ELF_NGREG     48      /* includes nip, msr, lr, etc. */
-+#define ELF_NFPREG    33      /* includes fpscr */
-+/* General registers */
-+typedef unsigned long elf_greg_t;
-+typedef elf_greg_t elf_gregset_t[ELF_NGREG];
-+
-+/* Floating point registers */
-+typedef double elf_fpreg_t;
-+typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
-+
-+#define ELF_DATA        ELFDATA2MSB
-+#define ELF_ARCH      EM_PPC
-+
-+/********* Bits for asm-um/delay.h **********/
-+
-+typedef unsigned int um_udelay_t;
-+
-+/********* Bits for asm-um/hw_irq.h **********/
-+
-+struct hw_interrupt_type;
-+
-+/********* Bits for asm-um/hardirq.h **********/
-+
-+#define irq_enter(cpu, irq) hardirq_enter(cpu)
-+#define irq_exit(cpu, irq) hardirq_exit(cpu)
-+
-+/********* Bits for asm-um/string.h **********/
-+
-+#define __HAVE_ARCH_STRRCHR
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/arch-signal-i386.h um/include/asm-um/arch-signal-i386.h
---- orig/include/asm-um/arch-signal-i386.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/arch-signal-i386.h       2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,24 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_ARCH_SIGNAL_I386_H
-+#define __UM_ARCH_SIGNAL_I386_H
-+
-+struct arch_signal_context {
-+      unsigned long extrasigs[_NSIG_WORDS];
-+};
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/atomic.h um/include/asm-um/atomic.h
---- orig/include/asm-um/atomic.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/atomic.h 2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_ATOMIC_H
-+#define __UM_ATOMIC_H
-+
-+#include "asm/arch/atomic.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/bitops.h um/include/asm-um/bitops.h
---- orig/include/asm-um/bitops.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/bitops.h 2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_BITOPS_H
-+#define __UM_BITOPS_H
-+
-+#include "asm/arch/bitops.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/boot.h um/include/asm-um/boot.h
---- orig/include/asm-um/boot.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/boot.h   2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_BOOT_H
-+#define __UM_BOOT_H
-+
-+#include "asm/arch/boot.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/bugs.h um/include/asm-um/bugs.h
---- orig/include/asm-um/bugs.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/bugs.h   2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_BUGS_H
-+#define __UM_BUGS_H
-+
-+void check_bugs(void);
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/byteorder.h um/include/asm-um/byteorder.h
---- orig/include/asm-um/byteorder.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/byteorder.h      2003-02-27 13:20:12.000000000 -0500
-@@ -0,0 +1,6 @@
-+#ifndef __UM_BYTEORDER_H
-+#define __UM_BYTEORDER_H
-+
-+#include "asm/arch/byteorder.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/cache.h um/include/asm-um/cache.h
---- orig/include/asm-um/cache.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/cache.h  2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_CACHE_H
-+#define __UM_CACHE_H
-+
-+#define        L1_CACHE_BYTES  32
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/checksum.h um/include/asm-um/checksum.h
---- orig/include/asm-um/checksum.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/checksum.h       2002-10-29 17:25:12.000000000 -0500
-@@ -0,0 +1,6 @@
-+#ifndef __UM_CHECKSUM_H
-+#define __UM_CHECKSUM_H
-+
-+#include "sysdep/checksum.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/cobalt.h um/include/asm-um/cobalt.h
---- orig/include/asm-um/cobalt.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/cobalt.h 2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_COBALT_H
-+#define __UM_COBALT_H
-+
-+#include "asm/arch/cobalt.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/current.h um/include/asm-um/current.h
---- orig/include/asm-um/current.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/current.h        2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,34 @@
-+/* 
-+ * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_CURRENT_H
-+#define __UM_CURRENT_H
-+
-+#ifndef __ASSEMBLY__
-+
-+#include "linux/config.h"
-+#include "asm/page.h"
-+
-+struct task_struct;
-+
-+#define CURRENT_TASK(dummy) (((unsigned long) &dummy) & \
-+                           (PAGE_MASK << CONFIG_KERNEL_STACK_ORDER))
-+
-+#define current ({ int dummy; (struct task_struct *) CURRENT_TASK(dummy); })
-+
-+#endif /* __ASSEMBLY__ */
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/delay.h um/include/asm-um/delay.h
---- orig/include/asm-um/delay.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/delay.h  2002-12-08 20:09:15.000000000 -0500
-@@ -0,0 +1,7 @@
-+#ifndef __UM_DELAY_H
-+#define __UM_DELAY_H
-+
-+#include "asm/arch/delay.h"
-+#include "asm/archparam.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/desc.h um/include/asm-um/desc.h
---- orig/include/asm-um/desc.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/desc.h   2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_DESC_H
-+#define __UM_DESC_H
-+
-+#include "asm/arch/desc.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/div64.h um/include/asm-um/div64.h
---- orig/include/asm-um/div64.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/div64.h  2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef _UM_DIV64_H
-+#define _UM_DIV64_H
-+
-+#include "asm/arch/div64.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/dma.h um/include/asm-um/dma.h
---- orig/include/asm-um/dma.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/dma.h    2002-10-27 16:53:42.000000000 -0500
-@@ -0,0 +1,10 @@
-+#ifndef __UM_DMA_H
-+#define __UM_DMA_H
-+
-+#include "asm/io.h"
-+
-+extern unsigned long uml_physmem;
-+
-+#define MAX_DMA_ADDRESS (uml_physmem)
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/elf.h um/include/asm-um/elf.h
---- orig/include/asm-um/elf.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/elf.h    2002-12-08 20:13:07.000000000 -0500
-@@ -0,0 +1,18 @@
-+#ifndef __UM_ELF_H
-+#define __UM_ELF_H
-+
-+#include "asm/archparam.h"
-+
-+#define ELF_HWCAP (0)
-+
-+#define SET_PERSONALITY(ex, ibcs2) do ; while(0)
-+
-+#define ELF_EXEC_PAGESIZE 4096
-+
-+#define elf_check_arch(x) (1)
-+
-+#define ELF_CLASS ELFCLASS32
-+
-+#define USE_ELF_CORE_DUMP
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/errno.h um/include/asm-um/errno.h
---- orig/include/asm-um/errno.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/errno.h  2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_ERRNO_H
-+#define __UM_ERRNO_H
-+
-+#include "asm/arch/errno.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/fcntl.h um/include/asm-um/fcntl.h
---- orig/include/asm-um/fcntl.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/fcntl.h  2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_FCNTL_H
-+#define __UM_FCNTL_H
-+
-+#include "asm/arch/fcntl.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/fixmap.h um/include/asm-um/fixmap.h
---- orig/include/asm-um/fixmap.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/fixmap.h 2003-05-28 11:02:08.000000000 -0400
-@@ -0,0 +1,89 @@
-+#ifndef __UM_FIXMAP_H
-+#define __UM_FIXMAP_H
-+
-+#include <linux/config.h>
-+#include <asm/kmap_types.h>
-+
-+/*
-+ * Here we define all the compile-time 'special' virtual
-+ * addresses. The point is to have a constant address at
-+ * compile time, but to set the physical address only
-+ * in the boot process. We allocate these special  addresses
-+ * from the end of virtual memory (0xfffff000) backwards.
-+ * Also this lets us do fail-safe vmalloc(), we
-+ * can guarantee that these special addresses and
-+ * vmalloc()-ed addresses never overlap.
-+ *
-+ * these 'compile-time allocated' memory buffers are
-+ * fixed-size 4k pages. (or larger if used with an increment
-+ * highger than 1) use fixmap_set(idx,phys) to associate
-+ * physical memory with fixmap indices.
-+ *
-+ * TLB entries of such buffers will not be flushed across
-+ * task switches.
-+ */
-+
-+/*
-+ * on UP currently we will have no trace of the fixmap mechanizm,
-+ * no page table allocations, etc. This might change in the
-+ * future, say framebuffers for the console driver(s) could be
-+ * fix-mapped?
-+ */
-+enum fixed_addresses {
-+#ifdef CONFIG_HIGHMEM
-+      FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */
-+      FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
-+#endif
-+      __end_of_fixed_addresses
-+};
-+
-+extern void __set_fixmap (enum fixed_addresses idx,
-+                        unsigned long phys, pgprot_t flags);
-+
-+#define set_fixmap(idx, phys) \
-+              __set_fixmap(idx, phys, PAGE_KERNEL)
-+/*
-+ * Some hardware wants to get fixmapped without caching.
-+ */
-+#define set_fixmap_nocache(idx, phys) \
-+              __set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE)
-+/*
-+ * used by vmalloc.c.
-+ *
-+ * Leave one empty page between vmalloc'ed areas and
-+ * the start of the fixmap, and leave one page empty
-+ * at the top of mem..
-+ */
-+extern unsigned long get_kmem_end(void);
-+
-+#define FIXADDR_TOP   (get_kmem_end() - 0x2000)
-+#define FIXADDR_SIZE  (__end_of_fixed_addresses << PAGE_SHIFT)
-+#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
-+
-+#define __fix_to_virt(x)      (FIXADDR_TOP - ((x) << PAGE_SHIFT))
-+
-+extern void __this_fixmap_does_not_exist(void);
-+
-+/*
-+ * 'index to address' translation. If anyone tries to use the idx
-+ * directly without tranlation, we catch the bug with a NULL-deference
-+ * kernel oops. Illegal ranges of incoming indices are caught too.
-+ */
-+static inline unsigned long fix_to_virt(const unsigned int idx)
-+{
-+      /*
-+       * this branch gets completely eliminated after inlining,
-+       * except when someone tries to use fixaddr indices in an
-+       * illegal way. (such as mixing up address types or using
-+       * out-of-range indices).
-+       *
-+       * If it doesn't get removed, the linker will complain
-+       * loudly with a reasonably clear error message..
-+       */
-+      if (idx >= __end_of_fixed_addresses)
-+              __this_fixmap_does_not_exist();
-+
-+        return __fix_to_virt(idx);
-+}
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/floppy.h um/include/asm-um/floppy.h
---- orig/include/asm-um/floppy.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/floppy.h 2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_FLOPPY_H
-+#define __UM_FLOPPY_H
-+
-+#include "asm/arch/floppy.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/hardirq.h um/include/asm-um/hardirq.h
---- orig/include/asm-um/hardirq.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/hardirq.h        2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_HARDIRQ_H
-+#define __UM_HARDIRQ_H
-+
-+#include "asm/arch/hardirq.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/hdreg.h um/include/asm-um/hdreg.h
---- orig/include/asm-um/hdreg.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/hdreg.h  2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_HDREG_H
-+#define __UM_HDREG_H
-+
-+#include "asm/arch/hdreg.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/highmem.h um/include/asm-um/highmem.h
---- orig/include/asm-um/highmem.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/highmem.h        2003-05-28 11:02:08.000000000 -0400
-@@ -0,0 +1,12 @@
-+#ifndef __UM_HIGHMEM_H
-+#define __UM_HIGHMEM_H
-+
-+#include "asm/page.h"
-+#include "asm/fixmap.h"
-+#include "asm/arch/highmem.h"
-+
-+#undef PKMAP_BASE
-+
-+#define PKMAP_BASE ((FIXADDR_START - LAST_PKMAP * PAGE_SIZE) & PMD_MASK)
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/hw_irq.h um/include/asm-um/hw_irq.h
---- orig/include/asm-um/hw_irq.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/hw_irq.h 2003-05-11 18:31:58.000000000 -0400
-@@ -0,0 +1,10 @@
-+#ifndef _ASM_UM_HW_IRQ_H
-+#define _ASM_UM_HW_IRQ_H
-+
-+#include "asm/irq.h"
-+#include "asm/archparam.h"
-+
-+static inline void hw_resend_irq(struct hw_interrupt_type *h, unsigned int i)
-+{}
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/ide.h um/include/asm-um/ide.h
---- orig/include/asm-um/ide.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/ide.h    2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_IDE_H
-+#define __UM_IDE_H
-+
-+#include "asm/arch/ide.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/init.h um/include/asm-um/init.h
---- orig/include/asm-um/init.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/init.h   2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,11 @@
-+#ifndef _UM_INIT_H
-+#define _UM_INIT_H
-+
-+#ifdef notdef
-+#define __init
-+#define __initdata
-+#define __initfunc(__arginit) __arginit
-+#define __cacheline_aligned 
-+#endif
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/ioctl.h um/include/asm-um/ioctl.h
---- orig/include/asm-um/ioctl.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/ioctl.h  2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_IOCTL_H
-+#define __UM_IOCTL_H
-+
-+#include "asm/arch/ioctl.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/ioctls.h um/include/asm-um/ioctls.h
---- orig/include/asm-um/ioctls.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/ioctls.h 2002-10-23 21:11:14.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_IOCTLS_H
-+#define __UM_IOCTLS_H
-+
-+#include "asm/arch/ioctls.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/io.h um/include/asm-um/io.h
---- orig/include/asm-um/io.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/io.h     2002-10-27 16:53:42.000000000 -0500
-@@ -0,0 +1,25 @@
-+#ifndef __UM_IO_H
-+#define __UM_IO_H
-+
-+#include "asm/page.h"
-+
-+#define IO_SPACE_LIMIT 0xdeadbeef /* Sure hope nothing uses this */
-+
-+static inline int inb(unsigned long i) { return(0); }
-+static inline void outb(char c, unsigned long i) { }
-+
-+/*
-+ * Change virtual addresses to physical addresses and vv.
-+ * These are pretty trivial
-+ */
-+static inline unsigned long virt_to_phys(volatile void * address)
-+{
-+      return __pa((void *) address);
-+}
-+
-+static inline void * phys_to_virt(unsigned long address)
-+{
-+      return __va(address);
-+}
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/ipcbuf.h um/include/asm-um/ipcbuf.h
---- orig/include/asm-um/ipcbuf.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/ipcbuf.h 2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_IPCBUF_H
-+#define __UM_IPCBUF_H
-+
-+#include "asm/arch/ipcbuf.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/ipc.h um/include/asm-um/ipc.h
---- orig/include/asm-um/ipc.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/ipc.h    2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_IPC_H
-+#define __UM_IPC_H
-+
-+#include "asm/arch/ipc.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/irq.h um/include/asm-um/irq.h
---- orig/include/asm-um/irq.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/irq.h    2003-05-03 11:03:52.000000000 -0400
-@@ -0,0 +1,22 @@
-+#ifndef __UM_IRQ_H
-+#define __UM_IRQ_H
-+
-+#define TIMER_IRQ             0
-+#define UMN_IRQ                       1
-+#define CONSOLE_IRQ           2
-+#define CONSOLE_WRITE_IRQ     3
-+#define UBD_IRQ                       4
-+#define UM_ETH_IRQ            5
-+#define SSL_IRQ                       6
-+#define SSL_WRITE_IRQ         7
-+#define ACCEPT_IRQ            8
-+#define MCONSOLE_IRQ          9
-+#define WINCH_IRQ             10
-+#define SIGIO_WRITE_IRQ       11
-+#define TELNETD_IRQ           12
-+#define XTERM_IRQ             13
-+
-+#define LAST_IRQ XTERM_IRQ
-+#define NR_IRQS (LAST_IRQ + 1)
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/keyboard.h um/include/asm-um/keyboard.h
---- orig/include/asm-um/keyboard.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/keyboard.h       2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_KEYBOARD_H
-+#define __UM_KEYBOARD_H
-+
-+#include "asm/arch/keyboard.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/kmap_types.h um/include/asm-um/kmap_types.h
---- orig/include/asm-um/kmap_types.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/kmap_types.h     2003-02-27 13:20:14.000000000 -0500
-@@ -0,0 +1,11 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_KMAP_TYPES_H
-+#define __UM_KMAP_TYPES_H
-+
-+#include "asm/arch/kmap_types.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/linux_logo.h um/include/asm-um/linux_logo.h
---- orig/include/asm-um/linux_logo.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/linux_logo.h     2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_LINUX_LOGO_H
-+#define __UM_LINUX_LOGO_H
-+
-+#include "asm/arch/linux_logo.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/locks.h um/include/asm-um/locks.h
---- orig/include/asm-um/locks.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/locks.h  2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_LOCKS_H
-+#define __UM_LOCKS_H
-+
-+#include "asm/arch/locks.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/mca_dma.h um/include/asm-um/mca_dma.h
---- orig/include/asm-um/mca_dma.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/mca_dma.h        2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef mca___UM_DMA_H
-+#define mca___UM_DMA_H
-+
-+#include "asm/arch/mca_dma.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/mman.h um/include/asm-um/mman.h
---- orig/include/asm-um/mman.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/mman.h   2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_MMAN_H
-+#define __UM_MMAN_H
-+
-+#include "asm/arch/mman.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/mmu_context.h um/include/asm-um/mmu_context.h
---- orig/include/asm-um/mmu_context.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/mmu_context.h    2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,72 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_MMU_CONTEXT_H
-+#define __UM_MMU_CONTEXT_H
-+
-+#include "linux/sched.h"
-+#include "choose-mode.h"
-+
-+#define get_mmu_context(task) do ; while(0)
-+#define activate_context(tsk) do ; while(0)
-+
-+static inline void activate_mm(struct mm_struct *old, struct mm_struct *new)
-+{
-+}
-+
-+extern void switch_mm_skas(int mm_fd);
-+
-+static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, 
-+                           struct task_struct *tsk, unsigned cpu)
-+{
-+      if(prev != next){
-+              clear_bit(cpu, &prev->cpu_vm_mask);
-+              set_bit(cpu, &next->cpu_vm_mask);
-+              if(next != &init_mm)
-+                      CHOOSE_MODE((void) 0, 
-+                                  switch_mm_skas(next->context.skas.mm_fd));
-+      }
-+}
-+
-+static inline void enter_lazy_tlb(struct mm_struct *mm, 
-+                                struct task_struct *tsk, unsigned cpu)
-+{
-+}
-+
-+extern int init_new_context_skas(struct task_struct *task, 
-+                               struct mm_struct *mm);
-+
-+static inline int init_new_context_tt(struct task_struct *task, 
-+                                    struct mm_struct *mm)
-+{
-+      return(0);
-+}
-+
-+static inline int init_new_context(struct task_struct *task, 
-+                                 struct mm_struct *mm)
-+{
-+      return(CHOOSE_MODE_PROC(init_new_context_tt, init_new_context_skas, 
-+                              task, mm));
-+}
-+
-+extern void destroy_context_skas(struct mm_struct *mm);
-+
-+static inline void destroy_context(struct mm_struct *mm)
-+{
-+      CHOOSE_MODE((void) 0, destroy_context_skas(mm));
-+}
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/mmu.h um/include/asm-um/mmu.h
---- orig/include/asm-um/mmu.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/mmu.h    2002-11-09 12:51:11.000000000 -0500
-@@ -0,0 +1,22 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __MMU_H
-+#define __MMU_H
-+
-+#include "um_mmu.h"
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/module.h um/include/asm-um/module.h
---- orig/include/asm-um/module.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/module.h 2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_MODULE_H
-+#define __UM_MODULE_H
-+
-+#include "asm/arch/module.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/msgbuf.h um/include/asm-um/msgbuf.h
---- orig/include/asm-um/msgbuf.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/msgbuf.h 2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_MSGBUF_H
-+#define __UM_MSGBUF_H
-+
-+#include "asm/arch/msgbuf.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/mtrr.h um/include/asm-um/mtrr.h
---- orig/include/asm-um/mtrr.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/mtrr.h   2003-05-29 13:46:27.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_MTRR_H
-+#define __UM_MTRR_H
-+
-+#include "asm/arch/mtrr.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/namei.h um/include/asm-um/namei.h
---- orig/include/asm-um/namei.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/namei.h  2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_NAMEI_H
-+#define __UM_NAMEI_H
-+
-+#include "asm/arch/namei.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/page.h um/include/asm-um/page.h
---- orig/include/asm-um/page.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/page.h   2002-10-27 16:49:35.000000000 -0500
-@@ -0,0 +1,53 @@
-+#ifndef __UM_PAGE_H
-+#define __UM_PAGE_H
-+
-+struct page;
-+
-+#include "asm/arch/page.h"
-+
-+#undef BUG
-+#undef PAGE_BUG
-+#undef __pa
-+#undef __va
-+#undef virt_to_page
-+#undef VALID_PAGE
-+#undef PAGE_OFFSET
-+#undef KERNELBASE
-+
-+extern unsigned long uml_physmem;
-+
-+#define PAGE_OFFSET (uml_physmem)
-+#define KERNELBASE PAGE_OFFSET
-+
-+#ifndef __ASSEMBLY__
-+
-+extern void stop(void);
-+
-+#define BUG() do { \
-+      panic("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
-+} while (0)
-+
-+#define PAGE_BUG(page) do { \
-+      BUG(); \
-+} while (0)
-+
-+#endif /* __ASSEMBLY__ */
-+
-+#define __va_space (8*1024*1024)
-+
-+extern unsigned long region_pa(void *virt);
-+extern void *region_va(unsigned long phys);
-+
-+#define __pa(virt) region_pa((void *) (virt))
-+#define __va(phys) region_va((unsigned long) (phys))
-+
-+extern struct page *page_mem_map(struct page *page);
-+
-+extern struct page *pfn_to_page(unsigned long pfn);
-+
-+#define VALID_PAGE(page) (page_mem_map(page) != NULL)
-+
-+extern struct page *arch_validate(struct page *page, int mask, int order);
-+#define HAVE_ARCH_VALIDATE
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/page_offset.h um/include/asm-um/page_offset.h
---- orig/include/asm-um/page_offset.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/page_offset.h    2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1 @@
-+#define PAGE_OFFSET_RAW (uml_physmem)
-diff -Naur -X ../exclude-files orig/include/asm-um/param.h um/include/asm-um/param.h
---- orig/include/asm-um/param.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/param.h  2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,24 @@
-+#ifndef _UM_PARAM_H
-+#define _UM_PARAM_H
-+
-+#ifndef HZ
-+#define HZ 52
-+#endif
-+
-+#define EXEC_PAGESIZE   4096
-+
-+#ifndef NGROUPS
-+#define NGROUPS         32
-+#endif
-+
-+#ifndef NOGROUP
-+#define NOGROUP         (-1)
-+#endif
-+
-+#define MAXHOSTNAMELEN  64      /* max length of hostname */
-+
-+#ifdef __KERNEL__
-+# define CLOCKS_PER_SEC 100    /* frequency at which times() counts */
-+#endif
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/pci.h um/include/asm-um/pci.h
---- orig/include/asm-um/pci.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/pci.h    2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_PCI_H
-+#define __UM_PCI_H
-+
-+#define PCI_DMA_BUS_IS_PHYS     (1)
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/pgalloc.h um/include/asm-um/pgalloc.h
---- orig/include/asm-um/pgalloc.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/pgalloc.h        2003-05-28 11:02:08.000000000 -0400
-@@ -0,0 +1,162 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Derived from include/asm-i386/pgalloc.h and include/asm-i386/pgtable.h
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_PGALLOC_H
-+#define __UM_PGALLOC_H
-+
-+#include "linux/config.h"
-+#include "linux/mm.h"
-+#include "asm/fixmap.h"
-+#include "choose-mode.h"
-+
-+#define pgd_quicklist (current_cpu_data.pgd_quick)
-+#define pmd_quicklist (current_cpu_data.pmd_quick)
-+#define pte_quicklist (current_cpu_data.pte_quick)
-+#define pgtable_cache_size (current_cpu_data.pgtable_cache_sz)
-+
-+#define pmd_populate(mm, pmd, pte) set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte)))
-+
-+/*
-+ * Allocate and free page tables.
-+ */
-+
-+static inline pgd_t *get_pgd_slow_tt(void)
-+{
-+      pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL);
-+
-+      if (pgd) {
-+              memset(pgd, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
-+              memcpy(pgd + USER_PTRS_PER_PGD, 
-+                     swapper_pg_dir + USER_PTRS_PER_PGD, 
-+                     (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
-+      }
-+      return pgd;
-+}
-+
-+static inline pgd_t *get_pgd_slow_skas(void)
-+{
-+      pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL);
-+
-+      if (pgd)
-+              memset(pgd, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
-+      return pgd;
-+}
-+
-+static inline pgd_t *get_pgd_slow(void)
-+{
-+      return(CHOOSE_MODE(get_pgd_slow_tt(), get_pgd_slow_skas()));
-+}
-+
-+static inline pgd_t *get_pgd_fast(void)
-+{
-+      unsigned long *ret;
-+
-+      if ((ret = pgd_quicklist) != NULL) {
-+              pgd_quicklist = (unsigned long *)(*ret);
-+              ret[0] = 0;
-+              pgtable_cache_size--;
-+      } else
-+              ret = (unsigned long *)get_pgd_slow();
-+      return (pgd_t *)ret;
-+}
-+
-+static inline void free_pgd_fast(pgd_t *pgd)
-+{
-+      *(unsigned long *)pgd = (unsigned long) pgd_quicklist;
-+      pgd_quicklist = (unsigned long *) pgd;
-+      pgtable_cache_size++;
-+}
-+
-+static inline void free_pgd_slow(pgd_t *pgd)
-+{
-+      free_page((unsigned long)pgd);
-+}
-+
-+static inline pte_t *pte_alloc_one(struct mm_struct *mm, unsigned long address)
-+{
-+      pte_t *pte;
-+
-+      pte = (pte_t *) __get_free_page(GFP_KERNEL);
-+      if (pte)
-+              clear_page(pte);
-+      return pte;
-+}
-+
-+static inline pte_t *pte_alloc_one_fast(struct mm_struct *mm, unsigned long address)
-+{
-+      unsigned long *ret;
-+
-+      if ((ret = (unsigned long *)pte_quicklist) != NULL) {
-+              pte_quicklist = (unsigned long *)(*ret);
-+              ret[0] = ret[1];
-+              pgtable_cache_size--;
-+      }
-+      return (pte_t *)ret;
-+}
-+
-+static inline void pte_free_fast(pte_t *pte)
-+{
-+      *(unsigned long *)pte = (unsigned long) pte_quicklist;
-+      pte_quicklist = (unsigned long *) pte;
-+      pgtable_cache_size++;
-+}
-+
-+static inline void pte_free_slow(pte_t *pte)
-+{
-+      free_page((unsigned long)pte);
-+}
-+
-+#define pte_free(pte)           pte_free_fast(pte)
-+#define pgd_free(pgd)           free_pgd_slow(pgd)
-+#define pgd_alloc(mm)           get_pgd_fast()
-+
-+/*
-+ * allocating and freeing a pmd is trivial: the 1-entry pmd is
-+ * inside the pgd, so has no extra memory associated with it.
-+ */
-+
-+#define pmd_alloc_one_fast(mm, addr)  ({ BUG(); ((pmd_t *)1); })
-+#define pmd_alloc_one(mm, addr)               ({ BUG(); ((pmd_t *)2); })
-+#define pmd_free_slow(x)              do { } while (0)
-+#define pmd_free_fast(x)              do { } while (0)
-+#define pmd_free(x)                   do { } while (0)
-+#define pgd_populate(mm, pmd, pte)    BUG()
-+
-+/*
-+ * TLB flushing:
-+ *
-+ *  - flush_tlb() flushes the current mm struct TLBs
-+ *  - flush_tlb_all() flushes all processes TLBs
-+ *  - flush_tlb_mm(mm) flushes the specified mm context TLB's
-+ *  - flush_tlb_page(vma, vmaddr) flushes one page
-+ *  - flush_tlb_kernel_vm() flushes the kernel vm area
-+ *  - flush_tlb_range(mm, start, end) flushes a range of pages
-+ *  - flush_tlb_pgtables(mm, start, end) flushes a range of page tables
-+ */
-+
-+extern void flush_tlb_all(void);
-+extern void flush_tlb_mm(struct mm_struct *mm);
-+extern void flush_tlb_range(struct mm_struct *mm, unsigned long start, 
-+                          unsigned long end);
-+extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr);
-+extern void flush_tlb_kernel_vm(void);
-+
-+static inline void flush_tlb_pgtables(struct mm_struct *mm,
-+                                    unsigned long start, unsigned long end)
-+{
-+}
-+
-+#endif
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/pgtable.h um/include/asm-um/pgtable.h
---- orig/include/asm-um/pgtable.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/pgtable.h        2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,428 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Derived from include/asm-i386/pgtable.h
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_PGTABLE_H
-+#define __UM_PGTABLE_H
-+
-+#include "linux/sched.h"
-+#include "asm/processor.h"
-+#include "asm/page.h"
-+
-+extern pgd_t swapper_pg_dir[1024];
-+
-+#define flush_cache_all() do ; while (0)
-+#define flush_cache_mm(mm) do ; while (0)
-+#define flush_cache_range(vma, start, end) do ; while (0)
-+#define flush_cache_page(vma, vmaddr) do ; while (0)
-+#define flush_page_to_ram(page) do ; while (0)
-+#define flush_dcache_page(page)       do ; while (0)
-+#define flush_icache_range(from, to) do ; while (0)
-+#define flush_icache_page(vma,pg) do ; while (0)
-+#define flush_icache_user_range(vma,pg,adr,len)       do ; while (0)
-+
-+extern void __flush_tlb_one(unsigned long addr);
-+
-+extern void pte_free(pte_t *pte);
-+
-+extern void pgd_free(pgd_t *pgd);
-+
-+extern int do_check_pgt_cache(int, int);
-+
-+extern void *um_virt_to_phys(struct task_struct *task, unsigned long virt,
-+                           pte_t *pte_out);
-+
-+/* zero page used for uninitialized stuff */
-+extern unsigned long *empty_zero_page;
-+
-+#define pgtable_cache_init() do ; while (0)
-+
-+/* PMD_SHIFT determines the size of the area a second-level page table can map */
-+#define PMD_SHIFT     22
-+#define PMD_SIZE      (1UL << PMD_SHIFT)
-+#define PMD_MASK      (~(PMD_SIZE-1))
-+
-+/* PGDIR_SHIFT determines what a third-level page table entry can map */
-+#define PGDIR_SHIFT   22
-+#define PGDIR_SIZE    (1UL << PGDIR_SHIFT)
-+#define PGDIR_MASK    (~(PGDIR_SIZE-1))
-+
-+/*
-+ * entries per page directory level: the i386 is two-level, so
-+ * we don't really have any PMD directory physically.
-+ */
-+#define PTRS_PER_PTE  1024
-+#define PTRS_PER_PMD  1
-+#define PTRS_PER_PGD  1024
-+#define USER_PTRS_PER_PGD     (TASK_SIZE/PGDIR_SIZE)
-+#define FIRST_USER_PGD_NR       0
-+
-+#define pte_ERROR(e) \
-+        printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e))
-+#define pmd_ERROR(e) \
-+        printk("%s:%d: bad pmd %08lx.\n", __FILE__, __LINE__, pmd_val(e))
-+#define pgd_ERROR(e) \
-+        printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
-+
-+/*
-+ * pgd entries used up by user/kernel:
-+ */
-+
-+#define USER_PGD_PTRS (TASK_SIZE >> PGDIR_SHIFT)
-+#define KERNEL_PGD_PTRS (PTRS_PER_PGD-USER_PGD_PTRS)
-+
-+#ifndef __ASSEMBLY__
-+/* Just any arbitrary offset to the start of the vmalloc VM area: the
-+ * current 8MB value just means that there will be a 8MB "hole" after the
-+ * physical memory until the kernel virtual memory starts.  That means that
-+ * any out-of-bounds memory accesses will hopefully be caught.
-+ * The vmalloc() routines leaves a hole of 4kB between each vmalloced
-+ * area for the same reason. ;)
-+ */
-+
-+extern unsigned long high_physmem;
-+
-+#define VMALLOC_OFFSET        (__va_space)
-+#define VMALLOC_START (((unsigned long) high_physmem + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
-+#define VMALLOC_VMADDR(x) ((unsigned long)(x))
-+
-+#if CONFIG_HIGHMEM
-+# define VMALLOC_END  (PKMAP_BASE-2*PAGE_SIZE)
-+#else
-+# define VMALLOC_END  (FIXADDR_START-2*PAGE_SIZE)
-+#endif
-+
-+#define _PAGE_PRESENT 0x001
-+#define _PAGE_NEWPAGE 0x002
-+#define _PAGE_PROTNONE        0x004   /* If not present */
-+#define _PAGE_RW      0x008
-+#define _PAGE_USER    0x010
-+#define _PAGE_ACCESSED        0x020
-+#define _PAGE_DIRTY   0x040
-+#define _PAGE_NEWPROT   0x080
-+
-+#define REGION_MASK   0xf0000000
-+#define REGION_SHIFT  28
-+
-+#define _PAGE_TABLE   (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY)
-+#define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
-+#define _PAGE_CHG_MASK        (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)
-+
-+#define PAGE_NONE     __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED)
-+#define PAGE_SHARED   __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED)
-+#define PAGE_COPY     __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
-+#define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
-+#define PAGE_KERNEL   __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)
-+#define PAGE_KERNEL_RO        __pgprot(_PAGE_PRESENT | _PAGE_DIRTY | _PAGE_ACCESSED)
-+
-+/*
-+ * The i386 can't do page protection for execute, and considers that the same are read.
-+ * Also, write permissions imply read permissions. This is the closest we can get..
-+ */
-+#define __P000        PAGE_NONE
-+#define __P001        PAGE_READONLY
-+#define __P010        PAGE_COPY
-+#define __P011        PAGE_COPY
-+#define __P100        PAGE_READONLY
-+#define __P101        PAGE_READONLY
-+#define __P110        PAGE_COPY
-+#define __P111        PAGE_COPY
-+
-+#define __S000        PAGE_NONE
-+#define __S001        PAGE_READONLY
-+#define __S010        PAGE_SHARED
-+#define __S011        PAGE_SHARED
-+#define __S100        PAGE_READONLY
-+#define __S101        PAGE_READONLY
-+#define __S110        PAGE_SHARED
-+#define __S111        PAGE_SHARED
-+
-+/*
-+ * Define this if things work differently on an i386 and an i486:
-+ * it will (on an i486) warn about kernel memory accesses that are
-+ * done without a 'verify_area(VERIFY_WRITE,..)'
-+ */
-+#undef TEST_VERIFY_AREA
-+
-+/* page table for 0-4MB for everybody */
-+extern unsigned long pg0[1024];
-+
-+/*
-+ * BAD_PAGETABLE is used when we need a bogus page-table, while
-+ * BAD_PAGE is used for a bogus page.
-+ *
-+ * ZERO_PAGE is a global shared page that is always zero: used
-+ * for zero-mapped memory areas etc..
-+ */
-+extern pte_t __bad_page(void);
-+extern pte_t * __bad_pagetable(void);
-+
-+#define BAD_PAGETABLE __bad_pagetable()
-+#define BAD_PAGE __bad_page()
-+#define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
-+
-+/* number of bits that fit into a memory pointer */
-+#define BITS_PER_PTR                  (8*sizeof(unsigned long))
-+
-+/* to align the pointer to a pointer address */
-+#define PTR_MASK                      (~(sizeof(void*)-1))
-+
-+/* sizeof(void*)==1<<SIZEOF_PTR_LOG2 */
-+/* 64-bit machines, beware!  SRB. */
-+#define SIZEOF_PTR_LOG2                       2
-+
-+/* to find an entry in a page-table */
-+#define PAGE_PTR(address) \
-+((unsigned long)(address)>>(PAGE_SHIFT-SIZEOF_PTR_LOG2)&PTR_MASK&~PAGE_MASK)
-+
-+#define pte_none(x)   !(pte_val(x) & ~_PAGE_NEWPAGE)
-+#define pte_present(x)        (pte_val(x) & (_PAGE_PRESENT | _PAGE_PROTNONE))
-+
-+#define pte_clear(xp) do { pte_val(*(xp)) = _PAGE_NEWPAGE; } while (0)
-+
-+#define phys_region_index(x) (((x) & REGION_MASK) >> REGION_SHIFT)
-+#define pte_region_index(x) phys_region_index(pte_val(x))
-+
-+#define pmd_none(x)   (!(pmd_val(x) & ~_PAGE_NEWPAGE))
-+#define       pmd_bad(x)      ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE)
-+#define pmd_present(x)        (pmd_val(x) & _PAGE_PRESENT)
-+#define pmd_clear(xp) do { pmd_val(*(xp)) = _PAGE_NEWPAGE; } while (0)
-+
-+#define pmd_newpage(x)  (pmd_val(x) & _PAGE_NEWPAGE)
-+#define pmd_mkuptodate(x) (pmd_val(x) &= ~_PAGE_NEWPAGE)
-+
-+/*
-+ * The "pgd_xxx()" functions here are trivial for a folded two-level
-+ * setup: the pgd is never bad, and a pmd always exists (as it's folded
-+ * into the pgd entry)
-+ */
-+static inline int pgd_none(pgd_t pgd)         { return 0; }
-+static inline int pgd_bad(pgd_t pgd)          { return 0; }
-+static inline int pgd_present(pgd_t pgd)      { return 1; }
-+static inline void pgd_clear(pgd_t * pgdp)    { }
-+
-+#define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT))
-+
-+extern struct page *pte_mem_map(pte_t pte);
-+extern struct page *phys_mem_map(unsigned long phys);
-+extern unsigned long phys_to_pfn(unsigned long p);
-+
-+#define pte_page(x) pfn_to_page(pte_pfn(x))
-+#define pte_address(x) (__va(pte_val(x) & PAGE_MASK))
-+#define mk_phys(a, r) ((a) + (r << REGION_SHIFT))
-+#define phys_addr(p) ((p) & ~REGION_MASK)
-+#define phys_page(p) (phys_mem_map(p) + ((phys_addr(p)) >> PAGE_SHIFT))
-+#define virt_to_page(kaddr) \
-+      (phys_mem_map(__pa(kaddr)) + (phys_addr(__pa(kaddr)) >> PAGE_SHIFT))
-+#define pte_pfn(x) phys_to_pfn(pte_val(x))
-+
-+static inline pte_t pte_mknewprot(pte_t pte)
-+{
-+      pte_val(pte) |= _PAGE_NEWPROT;
-+      return(pte);
-+}
-+
-+static inline pte_t pte_mknewpage(pte_t pte)
-+{
-+      pte_val(pte) |= _PAGE_NEWPAGE;
-+      return(pte);
-+}
-+
-+static inline void set_pte(pte_t *pteptr, pte_t pteval)
-+{
-+      /* If it's a swap entry, it needs to be marked _PAGE_NEWPAGE so
-+       * fix_range knows to unmap it.  _PAGE_NEWPROT is specific to
-+       * mapped pages.
-+       */
-+      *pteptr = pte_mknewpage(pteval);
-+      if(pte_present(*pteptr)) *pteptr = pte_mknewprot(*pteptr);
-+}
-+
-+/*
-+ * (pmds are folded into pgds so this doesnt get actually called,
-+ * but the define is needed for a generic inline function.)
-+ */
-+#define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval)
-+#define set_pgd(pgdptr, pgdval) (*(pgdptr) = pgdval)
-+
-+/*
-+ * The following only work if pte_present() is true.
-+ * Undefined behaviour if not..
-+ */
-+static inline int pte_read(pte_t pte)
-+{ 
-+      return((pte_val(pte) & _PAGE_USER) && 
-+             !(pte_val(pte) & _PAGE_PROTNONE));
-+}
-+
-+static inline int pte_exec(pte_t pte){
-+      return((pte_val(pte) & _PAGE_USER) &&
-+             !(pte_val(pte) & _PAGE_PROTNONE));
-+}
-+
-+static inline int pte_write(pte_t pte)
-+{
-+      return((pte_val(pte) & _PAGE_RW) &&
-+             !(pte_val(pte) & _PAGE_PROTNONE));
-+}
-+
-+static inline int pte_dirty(pte_t pte)        { return pte_val(pte) & _PAGE_DIRTY; }
-+static inline int pte_young(pte_t pte)        { return pte_val(pte) & _PAGE_ACCESSED; }
-+static inline int pte_newpage(pte_t pte) { return pte_val(pte) & _PAGE_NEWPAGE; }
-+static inline int pte_newprot(pte_t pte)
-+{ 
-+      return(pte_present(pte) && (pte_val(pte) & _PAGE_NEWPROT)); 
-+}
-+
-+static inline pte_t pte_rdprotect(pte_t pte)
-+{ 
-+      pte_val(pte) &= ~_PAGE_USER; 
-+      return(pte_mknewprot(pte));
-+}
-+
-+static inline pte_t pte_exprotect(pte_t pte)
-+{ 
-+      pte_val(pte) &= ~_PAGE_USER;
-+      return(pte_mknewprot(pte));
-+}
-+
-+static inline pte_t pte_mkclean(pte_t pte)
-+{
-+      pte_val(pte) &= ~_PAGE_DIRTY; 
-+      return(pte);
-+}
-+
-+static inline pte_t pte_mkold(pte_t pte)      
-+{ 
-+      pte_val(pte) &= ~_PAGE_ACCESSED; 
-+      return(pte);
-+}
-+
-+static inline pte_t pte_wrprotect(pte_t pte)
-+{ 
-+      pte_val(pte) &= ~_PAGE_RW; 
-+      return(pte_mknewprot(pte)); 
-+}
-+
-+static inline pte_t pte_mkread(pte_t pte)
-+{ 
-+      pte_val(pte) |= _PAGE_USER; 
-+      return(pte_mknewprot(pte)); 
-+}
-+
-+static inline pte_t pte_mkexec(pte_t pte)
-+{ 
-+      pte_val(pte) |= _PAGE_USER; 
-+      return(pte_mknewprot(pte)); 
-+}
-+
-+static inline pte_t pte_mkdirty(pte_t pte)
-+{ 
-+      pte_val(pte) |= _PAGE_DIRTY; 
-+      return(pte);
-+}
-+
-+static inline pte_t pte_mkyoung(pte_t pte)
-+{
-+      pte_val(pte) |= _PAGE_ACCESSED; 
-+      return(pte);
-+}
-+
-+static inline pte_t pte_mkwrite(pte_t pte)    
-+{
-+      pte_val(pte) |= _PAGE_RW; 
-+      return(pte_mknewprot(pte)); 
-+}
-+
-+static inline pte_t pte_mkuptodate(pte_t pte) 
-+{
-+      pte_val(pte) &= ~_PAGE_NEWPAGE;
-+      if(pte_present(pte)) pte_val(pte) &= ~_PAGE_NEWPROT;
-+      return(pte); 
-+}
-+
-+extern unsigned long page_to_phys(struct page *page);
-+
-+/*
-+ * Conversion functions: convert a page and protection to a page entry,
-+ * and a page entry and page directory to the page they refer to.
-+ */
-+
-+#define mk_pte(page, pgprot) \
-+({                                    \
-+      pte_t __pte;                    \
-+                                        \
-+      pte_val(__pte) = page_to_phys(page) + pgprot_val(pgprot);\
-+      if(pte_present(__pte)) pte_mknewprot(pte_mknewpage(__pte)); \
-+      __pte;                          \
-+})
-+
-+/* This takes a physical page address that is used by the remapping functions */
-+#define mk_pte_phys(physpage, pgprot) \
-+      pte_mknewpage(mk_pte(phys_page(physpage), pgprot))
-+
-+static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
-+{
-+      pte_val(pte) = (pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot);
-+      if(pte_present(pte)) pte = pte_mknewpage(pte_mknewprot(pte));
-+      return pte; 
-+}
-+
-+#define pmd_page(pmd) ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK))
-+
-+/* to find an entry in a page-table-directory. */
-+#define pgd_index(address) ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))
-+#define __pgd_offset(address) pgd_index(address)
-+
-+/* to find an entry in a page-table-directory */
-+#define pgd_offset(mm, address) \
-+((mm)->pgd + ((address) >> PGDIR_SHIFT))
-+
-+/* to find an entry in a kernel page-table-directory */
-+#define pgd_offset_k(address) pgd_offset(&init_mm, address)
-+
-+#define __pmd_offset(address) \
-+              (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1))
-+
-+/* Find an entry in the second-level page table.. */
-+static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address)
-+{
-+      return (pmd_t *) dir;
-+}
-+
-+/* Find an entry in the third-level page table.. */ 
-+#define pte_offset(pmd, address) \
-+((pte_t *) (pmd_page(*pmd) + ((address>>10) & ((PTRS_PER_PTE-1)<<2))))
-+
-+#define update_mmu_cache(vma,address,pte) do ; while (0)
-+
-+/* Encode and de-code a swap entry */
-+#define SWP_TYPE(x)                   (((x).val >> 3) & 0x7f)
-+#define SWP_OFFSET(x)                 ((x).val >> 10)
-+
-+#define SWP_ENTRY(type, offset) \
-+      ((swp_entry_t) { ((type) << 3) | ((offset) << 10) })
-+#define pte_to_swp_entry(pte) \
-+      ((swp_entry_t) { pte_val(pte_mkuptodate(pte)) })
-+#define swp_entry_to_pte(x)           ((pte_t) { (x).val })
-+
-+#define PageSkip(x) (0)
-+#define kern_addr_valid(addr) (1)
-+
-+#include <asm-generic/pgtable.h>
-+
-+#endif
-+
-+#endif
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/poll.h um/include/asm-um/poll.h
---- orig/include/asm-um/poll.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/poll.h   2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_POLL_H
-+#define __UM_POLL_H
-+
-+#include "asm/arch/poll.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/posix_types.h um/include/asm-um/posix_types.h
---- orig/include/asm-um/posix_types.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/posix_types.h    2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_POSIX_TYPES_H
-+#define __UM_POSIX_TYPES_H
-+
-+#include "asm/arch/posix_types.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/processor-generic.h um/include/asm-um/processor-generic.h
---- orig/include/asm-um/processor-generic.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/processor-generic.h      2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,182 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_PROCESSOR_GENERIC_H
-+#define __UM_PROCESSOR_GENERIC_H
-+
-+struct pt_regs;
-+
-+struct task_struct;
-+
-+#include "linux/config.h"
-+#include "linux/signal.h"
-+#include "asm/ptrace.h"
-+#include "asm/siginfo.h"
-+#include "choose-mode.h"
-+
-+struct mm_struct;
-+
-+#define current_text_addr() ((void *) 0)
-+
-+#define cpu_relax()   do ; while (0)
-+
-+#ifdef CONFIG_MODE_TT
-+struct proc_tt_mode {
-+      int extern_pid;
-+      int tracing;
-+      int switch_pipe[2];
-+      int singlestep_syscall;
-+      int vm_seq;
-+};
-+#endif
-+
-+#ifdef CONFIG_MODE_SKAS
-+struct proc_skas_mode {
-+      void *switch_buf;
-+      void *fork_buf;
-+};
-+#endif
-+
-+struct thread_struct {
-+      int forking;
-+      unsigned long kernel_stack;
-+      int nsyscalls;
-+      struct pt_regs regs;
-+      unsigned long cr2;
-+      int err;
-+      void *fault_addr;
-+      void *fault_catcher;
-+      struct task_struct *prev_sched;
-+      unsigned long temp_stack;
-+      void *exec_buf;
-+      struct arch_thread arch;
-+      union {
-+#ifdef CONFIG_MODE_TT
-+              struct proc_tt_mode tt;
-+#endif
-+#ifdef CONFIG_MODE_SKAS
-+              struct proc_skas_mode skas;
-+#endif
-+      } mode;
-+      struct {
-+              int op;
-+              union {
-+                      struct {
-+                              int pid;
-+                      } fork, exec;
-+                      struct {
-+                              int (*proc)(void *);
-+                              void *arg;
-+                      } thread;
-+                      struct {
-+                              void (*proc)(void *);
-+                              void *arg;
-+                      } cb;
-+              } u;
-+      } request;
-+};
-+
-+#define INIT_THREAD \
-+{ \
-+      .forking                = 0, \
-+      .kernel_stack           = 0, \
-+      .nsyscalls              = 0, \
-+        .regs                 = EMPTY_REGS, \
-+      .cr2                    = 0, \
-+      .err                    = 0, \
-+      .fault_addr             = NULL, \
-+      .prev_sched             = NULL, \
-+      .temp_stack             = 0, \
-+      .exec_buf               = NULL, \
-+      .arch                   = INIT_ARCH_THREAD, \
-+      .request                = { 0 } \
-+}
-+
-+#define THREAD_SIZE ((1 << CONFIG_KERNEL_STACK_ORDER) * PAGE_SIZE)
-+
-+typedef struct {
-+      unsigned long seg;
-+} mm_segment_t;
-+
-+extern struct task_struct *alloc_task_struct(void);
-+extern void free_task_struct(struct task_struct *task);
-+
-+#define get_task_struct(tsk)      atomic_inc(&virt_to_page(tsk)->count)
-+
-+extern void release_thread(struct task_struct *);
-+extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
-+extern void dump_thread(struct pt_regs *regs, struct user *u);
-+
-+extern unsigned long thread_saved_pc(struct thread_struct *t);
-+
-+static inline void mm_copy_segments(struct mm_struct *from_mm, 
-+                                  struct mm_struct *new_mm)
-+{
-+}
-+
-+static inline void copy_segments(struct task_struct *p, 
-+                               struct mm_struct *new_mm)
-+{
-+}
-+
-+static inline void release_segments(struct mm_struct *mm)
-+{
-+}
-+
-+#define init_task     (init_task_union.task)
-+#define init_stack    (init_task_union.stack)
-+
-+/*
-+ * User space process size: 3GB (default).
-+ */
-+extern unsigned long task_size;
-+
-+#define TASK_SIZE     (task_size)
-+
-+/* This decides where the kernel will search for a free chunk of vm
-+ * space during mmap's.
-+ */
-+#define TASK_UNMAPPED_BASE    (0x40000000)
-+
-+extern void start_thread(struct pt_regs *regs, unsigned long entry, 
-+                       unsigned long stack);
-+
-+struct cpuinfo_um {
-+      unsigned long loops_per_jiffy;
-+      unsigned long *pgd_quick;
-+      unsigned long *pmd_quick;
-+      unsigned long *pte_quick;
-+      unsigned long pgtable_cache_sz;  
-+      int ipi_pipe[2];
-+};
-+
-+extern struct cpuinfo_um boot_cpu_data;
-+
-+#define my_cpu_data           cpu_data[smp_processor_id()]
-+
-+#ifdef CONFIG_SMP
-+extern struct cpuinfo_um cpu_data[];
-+#define current_cpu_data cpu_data[smp_processor_id()]
-+#else
-+#define cpu_data (&boot_cpu_data)
-+#define current_cpu_data boot_cpu_data
-+#endif
-+
-+#define KSTK_EIP(tsk) (PT_REGS_IP(&tsk->thread.regs))
-+#define KSTK_ESP(tsk) (PT_REGS_SP(&tsk->thread.regs))
-+#define get_wchan(p) (0)
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/processor-i386.h um/include/asm-um/processor-i386.h
---- orig/include/asm-um/processor-i386.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/processor-i386.h 2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,35 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_PROCESSOR_I386_H
-+#define __UM_PROCESSOR_I386_H
-+
-+extern int cpu_has_xmm;
-+extern int cpu_has_cmov;
-+
-+struct arch_thread {
-+      unsigned long debugregs[8];
-+      int debugregs_seq;
-+};
-+
-+#define INIT_ARCH_THREAD { .debugregs                 = { [ 0 ... 7 ] = 0 }, \
-+                           .debugregs_seq     = 0 }
-+
-+#include "asm/arch/user.h"
-+
-+#include "asm/processor-generic.h"
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/processor-ppc.h um/include/asm-um/processor-ppc.h
---- orig/include/asm-um/processor-ppc.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/processor-ppc.h  2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,15 @@
-+#ifndef __UM_PROCESSOR_PPC_H
-+#define __UM_PROCESSOR_PPC_H
-+
-+#if defined(__ASSEMBLY__)
-+
-+#define CONFIG_ALL_PPC
-+#include "arch/processor.h"
-+
-+#else
-+
-+#include "asm/processor-generic.h"
-+
-+#endif
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/ptrace-generic.h um/include/asm-um/ptrace-generic.h
---- orig/include/asm-um/ptrace-generic.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/ptrace-generic.h 2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,74 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_PTRACE_GENERIC_H
-+#define __UM_PTRACE_GENERIC_H
-+
-+#ifndef __ASSEMBLY__
-+
-+#include "linux/config.h"
-+
-+#include "asm/current.h"
-+
-+#define pt_regs pt_regs_subarch
-+#define show_regs show_regs_subarch
-+
-+#include "asm/arch/ptrace.h"
-+
-+#undef pt_regs
-+#undef show_regs
-+#undef user_mode
-+#undef instruction_pointer
-+
-+#include "sysdep/ptrace.h"
-+#include "skas_ptrace.h"
-+
-+struct pt_regs {
-+      union uml_pt_regs regs;
-+};
-+
-+#define EMPTY_REGS { regs : EMPTY_UML_PT_REGS }
-+
-+#define PT_REGS_IP(r) UPT_IP(&(r)->regs)
-+#define PT_REGS_SP(r) UPT_SP(&(r)->regs)
-+
-+#define PT_REG(r, reg) UPT_REG(&(r)->regs, reg)
-+#define PT_REGS_SET(r, reg, val) UPT_SET(&(r)->regs, reg, val)
-+
-+#define PT_REGS_SET_SYSCALL_RETURN(r, res) \
-+      UPT_SET_SYSCALL_RETURN(&(r)->regs, res)
-+#define PT_REGS_RESTART_SYSCALL(r) UPT_RESTART_SYSCALL(&(r)->regs)
-+
-+#define PT_REGS_SYSCALL_NR(r) UPT_SYSCALL_NR(&(r)->regs)
-+
-+#define PT_REGS_SC(r) UPT_SC(&(r)->regs)
-+
-+struct task_struct;
-+
-+extern unsigned long getreg(struct task_struct *child, int regno);
-+extern int putreg(struct task_struct *child, int regno, unsigned long value);
-+extern int get_fpregs(unsigned long buf, struct task_struct *child);
-+extern int set_fpregs(unsigned long buf, struct task_struct *child);
-+extern int get_fpxregs(unsigned long buf, struct task_struct *child);
-+extern int set_fpxregs(unsigned long buf, struct task_struct *tsk);
-+
-+extern void show_regs(struct pt_regs *regs);
-+
-+#define INIT_TASK_SIZE ((1 << CONFIG_KERNEL_STACK_ORDER) * PAGE_SIZE)
-+
-+#endif
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/ptrace-i386.h um/include/asm-um/ptrace-i386.h
---- orig/include/asm-um/ptrace-i386.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/ptrace-i386.h    2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,46 @@
-+/* 
-+ * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_PTRACE_I386_H
-+#define __UM_PTRACE_I386_H
-+
-+#include "sysdep/ptrace.h"
-+#include "asm/ptrace-generic.h"
-+
-+#define PT_REGS_EAX(r) UPT_EAX(&(r)->regs)
-+#define PT_REGS_EBX(r) UPT_EBX(&(r)->regs)
-+#define PT_REGS_ECX(r) UPT_ECX(&(r)->regs)
-+#define PT_REGS_EDX(r) UPT_EDX(&(r)->regs)
-+#define PT_REGS_ESI(r) UPT_ESI(&(r)->regs)
-+#define PT_REGS_EDI(r) UPT_EDI(&(r)->regs)
-+#define PT_REGS_EBP(r) UPT_EBP(&(r)->regs)
-+
-+#define PT_REGS_CS(r) UPT_CS(&(r)->regs)
-+#define PT_REGS_SS(r) UPT_SS(&(r)->regs)
-+#define PT_REGS_DS(r) UPT_DS(&(r)->regs)
-+#define PT_REGS_ES(r) UPT_ES(&(r)->regs)
-+#define PT_REGS_FS(r) UPT_FS(&(r)->regs)
-+#define PT_REGS_GS(r) UPT_GS(&(r)->regs)
-+
-+#define PT_REGS_EFLAGS(r) UPT_EFLAGS(&(r)->regs)
-+
-+#define PT_REGS_ORIG_SYSCALL(r) PT_REGS_EAX(r)
-+#define PT_REGS_SYSCALL_RET(r) PT_REGS_EAX(r)
-+#define PT_FIX_EXEC_STACK(sp) do ; while(0)
-+
-+#define user_mode(r) UPT_IS_USER(&(r)->regs)
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/resource.h um/include/asm-um/resource.h
---- orig/include/asm-um/resource.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/resource.h       2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_RESOURCE_H
-+#define __UM_RESOURCE_H
-+
-+#include "asm/arch/resource.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/rwlock.h um/include/asm-um/rwlock.h
---- orig/include/asm-um/rwlock.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/rwlock.h 2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_RWLOCK_H
-+#define __UM_RWLOCK_H
-+
-+#include "asm/arch/rwlock.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/rwsem.h um/include/asm-um/rwsem.h
---- orig/include/asm-um/rwsem.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/rwsem.h  2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,10 @@
-+#ifndef __UM_RWSEM_H__
-+#define __UM_RWSEM_H__
-+
-+#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96)
-+#define __builtin_expect(exp,c) (exp)
-+#endif
-+
-+#include "asm/arch/rwsem.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/scatterlist.h um/include/asm-um/scatterlist.h
---- orig/include/asm-um/scatterlist.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/scatterlist.h    2003-02-27 13:21:49.000000000 -0500
-@@ -0,0 +1,6 @@
-+#ifndef __UM_SCATTERLIST_H
-+#define __UM_SCATTERLIST_H
-+
-+#include "asm/arch/scatterlist.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/segment.h um/include/asm-um/segment.h
---- orig/include/asm-um/segment.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/segment.h        2002-11-01 19:45:34.000000000 -0500
-@@ -0,0 +1,4 @@
-+#ifndef __UM_SEGMENT_H
-+#define __UM_SEGMENT_H
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/semaphore.h um/include/asm-um/semaphore.h
---- orig/include/asm-um/semaphore.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/semaphore.h      2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_SEMAPHORE_H
-+#define __UM_SEMAPHORE_H
-+
-+#include "asm/arch/semaphore.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/sembuf.h um/include/asm-um/sembuf.h
---- orig/include/asm-um/sembuf.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/sembuf.h 2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_SEMBUF_H
-+#define __UM_SEMBUF_H
-+
-+#include "asm/arch/sembuf.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/serial.h um/include/asm-um/serial.h
---- orig/include/asm-um/serial.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/serial.h 2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_SERIAL_H
-+#define __UM_SERIAL_H
-+
-+#include "asm/arch/serial.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/shmbuf.h um/include/asm-um/shmbuf.h
---- orig/include/asm-um/shmbuf.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/shmbuf.h 2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_SHMBUF_H
-+#define __UM_SHMBUF_H
-+
-+#include "asm/arch/shmbuf.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/shmparam.h um/include/asm-um/shmparam.h
---- orig/include/asm-um/shmparam.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/shmparam.h       2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_SHMPARAM_H
-+#define __UM_SHMPARAM_H
-+
-+#include "asm/arch/shmparam.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/sigcontext-generic.h um/include/asm-um/sigcontext-generic.h
---- orig/include/asm-um/sigcontext-generic.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/sigcontext-generic.h     2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_SIGCONTEXT_GENERIC_H
-+#define __UM_SIGCONTEXT_GENERIC_H
-+
-+#include "asm/arch/sigcontext.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/sigcontext-i386.h um/include/asm-um/sigcontext-i386.h
---- orig/include/asm-um/sigcontext-i386.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/sigcontext-i386.h        2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_SIGCONTEXT_I386_H
-+#define __UM_SIGCONTEXT_I386_H
-+
-+#include "asm/sigcontext-generic.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/sigcontext-ppc.h um/include/asm-um/sigcontext-ppc.h
---- orig/include/asm-um/sigcontext-ppc.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/sigcontext-ppc.h 2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,10 @@
-+#ifndef __UM_SIGCONTEXT_PPC_H
-+#define __UM_SIGCONTEXT_PPC_H
-+
-+#define pt_regs sys_pt_regs
-+
-+#include "asm/sigcontext-generic.h"
-+
-+#undef pt_regs
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/siginfo.h um/include/asm-um/siginfo.h
---- orig/include/asm-um/siginfo.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/siginfo.h        2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_SIGINFO_H
-+#define __UM_SIGINFO_H
-+
-+#include "asm/arch/siginfo.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/signal.h um/include/asm-um/signal.h
---- orig/include/asm-um/signal.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/signal.h 2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,22 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_SIGNAL_H
-+#define __UM_SIGNAL_H
-+
-+#include "asm/arch/signal.h"
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/smp.h um/include/asm-um/smp.h
---- orig/include/asm-um/smp.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/smp.h    2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,19 @@
-+#ifndef __UM_SMP_H
-+#define __UM_SMP_H
-+
-+#ifdef CONFIG_SMP
-+
-+#include "linux/config.h"
-+#include "asm/current.h"
-+
-+#define smp_processor_id() (current->processor)
-+#define cpu_logical_map(n) (n)
-+#define cpu_number_map(n) (n)
-+#define PROC_CHANGE_PENALTY   15 /* Pick a number, any number */
-+extern int hard_smp_processor_id(void);
-+extern unsigned long cpu_online_map;
-+#define NO_PROC_ID -1
-+
-+#endif
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/smplock.h um/include/asm-um/smplock.h
---- orig/include/asm-um/smplock.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/smplock.h        2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_SMPLOCK_H
-+#define __UM_SMPLOCK_H
-+
-+#include "asm/arch/smplock.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/socket.h um/include/asm-um/socket.h
---- orig/include/asm-um/socket.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/socket.h 2003-02-27 13:20:13.000000000 -0500
-@@ -0,0 +1,6 @@
-+#ifndef __UM_SOCKET_H
-+#define __UM_SOCKET_H
-+
-+#include "asm/arch/socket.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/sockios.h um/include/asm-um/sockios.h
---- orig/include/asm-um/sockios.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/sockios.h        2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_SOCKIOS_H
-+#define __UM_SOCKIOS_H
-+
-+#include "asm/arch/sockios.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/softirq.h um/include/asm-um/softirq.h
---- orig/include/asm-um/softirq.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/softirq.h        2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,13 @@
-+#ifndef __UM_SOFTIRQ_H
-+#define __UM_SOFTIRQ_H
-+
-+#include "linux/smp.h"
-+#include "asm/system.h"
-+#include "asm/processor.h"
-+
-+/* A gratuitous name change */
-+#define i386_bh_lock um_bh_lock
-+#include "asm/arch/softirq.h"
-+#undef i386_bh_lock
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/spinlock.h um/include/asm-um/spinlock.h
---- orig/include/asm-um/spinlock.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/spinlock.h       2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,10 @@
-+#ifndef __UM_SPINLOCK_H
-+#define __UM_SPINLOCK_H
-+
-+#include "linux/config.h"
-+
-+#ifdef CONFIG_SMP
-+#include "asm/arch/spinlock.h"
-+#endif
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/statfs.h um/include/asm-um/statfs.h
---- orig/include/asm-um/statfs.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/statfs.h 2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef _UM_STATFS_H
-+#define _UM_STATFS_H
-+
-+#include "asm/arch/statfs.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/stat.h um/include/asm-um/stat.h
---- orig/include/asm-um/stat.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/stat.h   2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_STAT_H
-+#define __UM_STAT_H
-+
-+#include "asm/arch/stat.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/string.h um/include/asm-um/string.h
---- orig/include/asm-um/string.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/string.h 2003-02-24 22:52:09.000000000 -0500
-@@ -0,0 +1,7 @@
-+#ifndef __UM_STRING_H
-+#define __UM_STRING_H
-+
-+#include "asm/arch/string.h"
-+#include "asm/archparam.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/system-generic.h um/include/asm-um/system-generic.h
---- orig/include/asm-um/system-generic.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/system-generic.h 2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,50 @@
-+#ifndef __UM_SYSTEM_GENERIC_H
-+#define __UM_SYSTEM_GENERIC_H
-+
-+#include "asm/arch/system.h"
-+
-+#undef prepare_to_switch
-+#undef switch_to
-+#undef __save_flags
-+#undef save_flags
-+#undef __restore_flags
-+#undef restore_flags
-+#undef __cli
-+#undef __sti
-+#undef cli
-+#undef sti
-+#undef local_irq_save
-+#undef local_irq_restore
-+#undef local_irq_disable
-+#undef local_irq_enable
-+
-+#define prepare_to_switch() do ; while(0)
-+
-+void *_switch_to(void *prev, void *next);
-+
-+#define switch_to(prev, next, last) prev = _switch_to(prev, next)
-+
-+extern int get_signals(void);
-+extern int set_signals(int enable);
-+extern void block_signals(void);
-+extern void unblock_signals(void);
-+
-+#define local_irq_save(flags) do { (flags) = set_signals(0); } while(0)
-+
-+#define local_irq_restore(flags) do { set_signals(flags); } while(0)
-+
-+#define local_irq_enable() unblock_signals()
-+#define local_irq_disable() block_signals()
-+
-+#define __sti() unblock_signals()
-+#define sti() unblock_signals()
-+#define __cli() block_signals()
-+#define cli() block_signals()
-+
-+#define __save_flags(x) do { (flags) = get_signals(); } while(0)
-+#define save_flags(x) __save_flags(x)
-+
-+#define __restore_flags(x) local_irq_restore(x)
-+#define restore_flags(x) __restore_flags(x)
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/system-i386.h um/include/asm-um/system-i386.h
---- orig/include/asm-um/system-i386.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/system-i386.h    2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,39 @@
-+#ifndef __UM_SYSTEM_I386_H
-+#define __UM_SYSTEM_I386_H
-+
-+#include "asm/system-generic.h"
-+
-+#define __HAVE_ARCH_CMPXCHG 1
-+
-+static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
-+                                    unsigned long new, int size)
-+{
-+      unsigned long prev;
-+      switch (size) {
-+      case 1:
-+              __asm__ __volatile__(LOCK_PREFIX "cmpxchgb %b1,%2"
-+                                   : "=a"(prev)
-+                                   : "q"(new), "m"(*__xg(ptr)), "0"(old)
-+                                   : "memory");
-+              return prev;
-+      case 2:
-+              __asm__ __volatile__(LOCK_PREFIX "cmpxchgw %w1,%2"
-+                                   : "=a"(prev)
-+                                   : "q"(new), "m"(*__xg(ptr)), "0"(old)
-+                                   : "memory");
-+              return prev;
-+      case 4:
-+              __asm__ __volatile__(LOCK_PREFIX "cmpxchgl %1,%2"
-+                                   : "=a"(prev)
-+                                   : "q"(new), "m"(*__xg(ptr)), "0"(old)
-+                                   : "memory");
-+              return prev;
-+      }
-+      return old;
-+}
-+
-+#define cmpxchg(ptr,o,n)\
-+      ((__typeof__(*(ptr)))__cmpxchg((ptr),(unsigned long)(o),\
-+                                      (unsigned long)(n),sizeof(*(ptr))))
-+    
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/system-ppc.h um/include/asm-um/system-ppc.h
---- orig/include/asm-um/system-ppc.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/system-ppc.h     2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,12 @@
-+#ifndef __UM_SYSTEM_PPC_H
-+#define __UM_SYSTEM_PPC_H
-+
-+#define _switch_to _ppc_switch_to
-+
-+#include "asm/arch/system.h"
-+
-+#undef _switch_to
-+ 
-+#include "asm/system-generic.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/termbits.h um/include/asm-um/termbits.h
---- orig/include/asm-um/termbits.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/termbits.h       2002-10-23 21:11:14.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_TERMBITS_H
-+#define __UM_TERMBITS_H
-+
-+#include "asm/arch/termbits.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/termios.h um/include/asm-um/termios.h
---- orig/include/asm-um/termios.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/termios.h        2003-02-27 13:20:13.000000000 -0500
-@@ -0,0 +1,6 @@
-+#ifndef __UM_TERMIOS_H
-+#define __UM_TERMIOS_H
-+
-+#include "asm/arch/termios.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/timex.h um/include/asm-um/timex.h
---- orig/include/asm-um/timex.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/timex.h  2003-05-28 11:02:07.000000000 -0400
-@@ -0,0 +1,18 @@
-+#ifndef __UM_TIMEX_H
-+#define __UM_TIMEX_H
-+
-+#include "linux/time.h"
-+
-+typedef unsigned long cycles_t;
-+
-+#define cacheflush_time (0)
-+
-+static inline cycles_t get_cycles (void)
-+{
-+      return 0;
-+}
-+
-+#define vxtime_lock()         do ; while (0)
-+#define vxtime_unlock()               do ; while (0)
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/tlb.h um/include/asm-um/tlb.h
---- orig/include/asm-um/tlb.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/tlb.h    2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1 @@
-+#include <asm-generic/tlb.h>
-diff -Naur -X ../exclude-files orig/include/asm-um/types.h um/include/asm-um/types.h
---- orig/include/asm-um/types.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/types.h  2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_TYPES_H
-+#define __UM_TYPES_H
-+
-+#include "asm/arch/types.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/uaccess.h um/include/asm-um/uaccess.h
---- orig/include/asm-um/uaccess.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/uaccess.h        2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,97 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __UM_UACCESS_H
-+#define __UM_UACCESS_H
-+
-+#define VERIFY_READ 0
-+#define VERIFY_WRITE 1
-+
-+/*
-+ * The fs value determines whether argument validity checking should be
-+ * performed or not.  If get_fs() == USER_DS, checking is performed, with
-+ * get_fs() == KERNEL_DS, checking is bypassed.
-+ *
-+ * For historical reasons, these macros are grossly misnamed.
-+ */
-+
-+#define MAKE_MM_SEG(s)        ((mm_segment_t) { (s) })
-+
-+#define KERNEL_DS     MAKE_MM_SEG(0xFFFFFFFF)
-+#define USER_DS               MAKE_MM_SEG(TASK_SIZE)
-+
-+#define get_ds()      (KERNEL_DS)
-+#define get_fs()      (current->addr_limit)
-+#define set_fs(x)     (current->addr_limit = (x))
-+
-+#define segment_eq(a, b) ((a).seg == (b).seg)
-+
-+#include "um_uaccess.h"
-+
-+#define __copy_from_user(to, from, n) copy_from_user(to, from, n)
-+
-+#define __copy_to_user(to, from, n) copy_to_user(to, from, n)
-+
-+#define __get_user(x, ptr) \
-+({ \
-+        const __typeof__(ptr) __private_ptr = ptr; \
-+        __typeof__(*(__private_ptr)) __private_val; \
-+        int __private_ret = -EFAULT; \
-+        (x) = 0; \
-+      if (__copy_from_user(&__private_val, (__private_ptr), \
-+          sizeof(*(__private_ptr))) == 0) {\
-+              (x) = (__typeof__(*(__private_ptr))) __private_val; \
-+              __private_ret = 0; \
-+      } \
-+        __private_ret; \
-+}) 
-+
-+#define get_user(x, ptr) \
-+({ \
-+        const __typeof__((*ptr)) *private_ptr = (ptr); \
-+        (access_ok(VERIFY_READ, private_ptr, sizeof(*private_ptr)) ? \
-+       __get_user(x, private_ptr) : ((x) = 0, -EFAULT)); \
-+})
-+
-+#define __put_user(x, ptr) \
-+({ \
-+        __typeof__(ptr) __private_ptr = ptr; \
-+        __typeof__(*(__private_ptr)) __private_val; \
-+        int __private_ret = -EFAULT; \
-+        __private_val = (__typeof__(*(__private_ptr))) (x); \
-+        if (__copy_to_user((__private_ptr), &__private_val, \
-+                         sizeof(*(__private_ptr))) == 0) { \
-+              __private_ret = 0; \
-+      } \
-+        __private_ret; \
-+})
-+
-+#define put_user(x, ptr) \
-+({ \
-+        __typeof__(*(ptr)) *private_ptr = (ptr); \
-+        (access_ok(VERIFY_WRITE, private_ptr, sizeof(*private_ptr)) ? \
-+       __put_user(x, private_ptr) : -EFAULT); \
-+})
-+
-+#define strlen_user(str) strnlen_user(str, ~0UL >> 1)
-+
-+struct exception_table_entry
-+{
-+        unsigned long insn;
-+      unsigned long fixup;
-+};
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/ucontext.h um/include/asm-um/ucontext.h
---- orig/include/asm-um/ucontext.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/ucontext.h       2002-12-01 13:20:58.000000000 -0500
-@@ -0,0 +1,6 @@
-+#ifndef _ASM_UM_UCONTEXT_H
-+#define _ASM_UM_UCONTEXT_H
-+
-+#include "asm/arch/ucontext.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/unaligned.h um/include/asm-um/unaligned.h
---- orig/include/asm-um/unaligned.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/unaligned.h      2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_UNALIGNED_H
-+#define __UM_UNALIGNED_H
-+
-+#include "asm/arch/unaligned.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/unistd.h um/include/asm-um/unistd.h
---- orig/include/asm-um/unistd.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/unistd.h 2003-05-28 11:02:08.000000000 -0400
-@@ -0,0 +1,118 @@
-+/* 
-+ * Copyright (C) 2000, 2001  Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef _UM_UNISTD_H_
-+#define _UM_UNISTD_H_
-+
-+#include "linux/resource.h"
-+#include "asm/uaccess.h"
-+
-+extern long sys_open(const char *filename, int flags, int mode);
-+extern long sys_dup(unsigned int fildes);
-+extern long sys_close(unsigned int fd);
-+extern int um_execve(const char *file, char *const argv[], char *const env[]);
-+extern long sys_setsid(void);
-+extern long sys_waitpid(pid_t pid, unsigned int * stat_addr, int options);
-+extern long sys_wait4(pid_t pid,unsigned int *stat_addr, int options, 
-+                    struct rusage *ru);
-+extern long sys_mount(char *dev_name, char *dir_name, char *type, 
-+                    unsigned long flags, void *data);
-+extern long sys_select(int n, fd_set *inp, fd_set *outp, fd_set *exp, 
-+                     struct timeval *tvp);
-+extern long sys_lseek(unsigned int fildes, unsigned long offset, int whence);
-+extern long sys_read(unsigned int fildes, char *buf, int len);
-+extern long sys_write(unsigned int fildes, char *buf, int len);
-+
-+#ifdef __KERNEL_SYSCALLS__
-+
-+#define KERNEL_CALL(ret_t, sys, args...)      \
-+      mm_segment_t fs = get_fs();             \
-+      ret_t ret;                              \
-+      set_fs(KERNEL_DS);                      \
-+      ret = sys(args);                        \
-+      set_fs(fs);                             \
-+      return ret;
-+
-+static inline long open(const char *pathname, int flags, int mode) 
-+{
-+      KERNEL_CALL(int, sys_open, pathname, flags, mode)
-+}
-+
-+static inline long dup(unsigned int fd)
-+{
-+      KERNEL_CALL(int, sys_dup, fd);
-+}
-+
-+static inline long close(unsigned int fd)
-+{
-+      KERNEL_CALL(int, sys_close, fd);
-+}
-+
-+static inline int execve(const char *filename, char *const argv[], 
-+                       char *const envp[])
-+{
-+      KERNEL_CALL(int, um_execve, filename, argv, envp);
-+}
-+
-+static inline long waitpid(pid_t pid, unsigned int *status, int options)
-+{
-+      KERNEL_CALL(pid_t, sys_wait4, pid, status, options, NULL)
-+}
-+
-+static inline pid_t wait(int *status)
-+{
-+      KERNEL_CALL(pid_t, sys_wait4, -1, status, 0, NULL)
-+}
-+
-+static inline pid_t setsid(void)
-+{
-+      KERNEL_CALL(pid_t, sys_setsid)
-+}
-+
-+static inline long lseek(unsigned int fd, off_t offset, unsigned int whence)
-+{
-+      KERNEL_CALL(long, sys_lseek, fd, offset, whence)
-+}
-+
-+static inline int read(unsigned int fd, char * buf, int len)
-+{
-+      KERNEL_CALL(int, sys_read, fd, buf, len)
-+}
-+
-+static inline int write(unsigned int fd, char * buf, int len)
-+{
-+      KERNEL_CALL(int, sys_write, fd, buf, len)
-+}
-+
-+#endif
-+
-+/* Save the value of __KERNEL_SYSCALLS__, undefine it, include the underlying
-+ * arch's unistd.h for the system call numbers, and restore the old 
-+ * __KERNEL_SYSCALLS__.
-+ */
-+
-+#ifdef __KERNEL_SYSCALLS__
-+#define __SAVE_KERNEL_SYSCALLS__ __KERNEL_SYSCALLS__
-+#endif
-+
-+#undef __KERNEL_SYSCALLS__
-+#include "asm/arch/unistd.h"
-+
-+#ifdef __KERNEL_SYSCALLS__
-+#define __KERNEL_SYSCALLS__ __SAVE_KERNEL_SYSCALLS__
-+#endif
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/asm-um/user.h um/include/asm-um/user.h
---- orig/include/asm-um/user.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/user.h   2003-05-28 11:04:47.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_USER_H
-+#define __UM_USER_H
-+
-+#include "asm/arch/user.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/vga.h um/include/asm-um/vga.h
---- orig/include/asm-um/vga.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/vga.h    2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_VGA_H
-+#define __UM_VGA_H
-+
-+#include "asm/arch/vga.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/asm-um/xor.h um/include/asm-um/xor.h
---- orig/include/asm-um/xor.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/xor.h    2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,6 @@
-+#ifndef __UM_XOR_H
-+#define __UM_XOR_H
-+
-+#include "asm-generic/xor.h"
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/linux/blk.h um/include/linux/blk.h
---- orig/include/linux/blk.h   2002-09-15 12:13:19.000000000 -0400
-+++ um/include/linux/blk.h     2003-05-28 11:02:34.000000000 -0400
-@@ -320,6 +320,15 @@
- #define DEVICE_REQUEST do_ida_request
- #define DEVICE_NR(device) (MINOR(device) >> 4)
-+#elif (MAJOR_NR == UBD_MAJOR)
-+
-+#define DEVICE_NAME "User-mode block device"
-+#define DEVICE_INTR do_ubd
-+#define DEVICE_REQUEST do_ubd_request
-+#define DEVICE_NR(device) (MINOR(device) >> UBD_SHIFT)
-+#define DEVICE_ON(device)
-+#define DEVICE_OFF(device)
-+
- #endif /* MAJOR_NR == whatever */
- /* provide DEVICE_xxx defaults, if not explicitly defined
-diff -Naur -X ../exclude-files orig/include/linux/fs.h um/include/linux/fs.h
---- orig/include/linux/fs.h    2003-02-27 13:04:27.000000000 -0500
-+++ um/include/linux/fs.h      2003-05-28 11:02:07.000000000 -0400
-@@ -318,6 +318,8 @@
- #include <linux/ncp_fs_i.h>
- #include <linux/proc_fs_i.h>
- #include <linux/usbdev_fs_i.h>
-+#include <linux/hostfs_fs_i.h>
-+#include <linux/hppfs_fs_i.h>
- #include <linux/jffs2_fs_i.h>
- #include <linux/cramfs_fs_sb.h>
-@@ -509,7 +511,9 @@
-               struct proc_inode_info          proc_i;
-               struct socket                   socket_i;
-               struct usbdev_inode_info        usbdev_i;
--              struct jffs2_inode_info         jffs2_i;
-+              struct hostfs_inode_info        hostfs_i;
-+              struct hppfs_inode_info         hppfs_i;
-+              struct jffs2_inode_info         jffs2_i;
-               void                            *generic_ip;
-       } u;
- };
-diff -Naur -X ../exclude-files orig/include/linux/hostfs_fs_i.h um/include/linux/hostfs_fs_i.h
---- orig/include/linux/hostfs_fs_i.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/include/linux/hostfs_fs_i.h     2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,21 @@
-+#ifndef _HOSTFS_FS_I
-+#define _HOSTFS_FS_I
-+
-+struct hostfs_inode_info {
-+      char *host_filename;
-+      int fd;
-+      int mode;
-+};
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/linux/hppfs_fs_i.h um/include/linux/hppfs_fs_i.h
---- orig/include/linux/hppfs_fs_i.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/include/linux/hppfs_fs_i.h      2002-10-23 21:08:05.000000000 -0400
-@@ -0,0 +1,19 @@
-+#ifndef _HPPFS_FS_I
-+#define _HPPFS_FS_I
-+
-+struct hppfs_inode_info {
-+      struct dentry *proc_dentry;
-+};
-+
-+#endif
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/include/linux/kernel.h um/include/linux/kernel.h
---- orig/include/linux/kernel.h        2003-02-27 13:04:27.000000000 -0500
-+++ um/include/linux/kernel.h  2003-05-28 11:02:07.000000000 -0400
-@@ -49,7 +49,7 @@
- # define ATTRIB_NORET  __attribute__((noreturn))
- # define NORET_AND     noreturn,
--#ifdef __i386__
-+#if defined(__i386__) || defined(UM_FASTCALL)
- #define FASTCALL(x)   x __attribute__((regparm(3)))
- #else
- #define FASTCALL(x)   x
-diff -Naur -X ../exclude-files orig/include/linux/kernel_stat.h um/include/linux/kernel_stat.h
---- orig/include/linux/kernel_stat.h   2003-02-27 13:04:27.000000000 -0500
-+++ um/include/linux/kernel_stat.h     2003-05-28 11:02:07.000000000 -0400
-@@ -12,7 +12,7 @@
-  * used by rstatd/perfmeter
-  */
--#define DK_MAX_MAJOR 16
-+#define DK_MAX_MAJOR 99
- #define DK_MAX_DISK 16
- struct kernel_stat {
-diff -Naur -X ../exclude-files orig/include/linux/mm.h um/include/linux/mm.h
---- orig/include/linux/mm.h    2002-09-15 12:13:19.000000000 -0400
-+++ um/include/linux/mm.h      2003-05-28 11:02:07.000000000 -0400
-@@ -425,6 +425,14 @@
- extern struct page * FASTCALL(__alloc_pages(unsigned int gfp_mask, unsigned int order, zonelist_t *zonelist));
- extern struct page * alloc_pages_node(int nid, unsigned int gfp_mask, unsigned int order);
-+#ifndef HAVE_ARCH_VALIDATE
-+static inline struct page *arch_validate(struct page *page, 
-+                                       unsigned int gfp_mask, int order)
-+{
-+        return(page);
-+}
-+#endif
-+
- static inline struct page * alloc_pages(unsigned int gfp_mask, unsigned int order)
- {
-       /*
-@@ -432,7 +440,7 @@
-        */
-       if (order >= MAX_ORDER)
-               return NULL;
--      return _alloc_pages(gfp_mask, order);
-+      return arch_validate(_alloc_pages(gfp_mask, order), gfp_mask, order);
- }
- #define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0)
-@@ -492,6 +500,9 @@
- int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start,
-               int len, int write, int force, struct page **pages, struct vm_area_struct **vmas);
-+extern long do_mprotect(struct mm_struct *mm, unsigned long start, 
-+                      size_t len, unsigned long prot);
-+
- /*
-  * On a two-level page table, this ends up being trivial. Thus the
-  * inlining and the symmetry break with pte_alloc() that does all
-@@ -539,9 +550,10 @@
- extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
--extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
--      unsigned long len, unsigned long prot,
--      unsigned long flag, unsigned long pgoff);
-+extern unsigned long do_mmap_pgoff(struct mm_struct *mm, struct file *file, 
-+                                 unsigned long addr, unsigned long len,
-+                                 unsigned long prot, unsigned long flag,
-+                                 unsigned long pgoff);
- static inline unsigned long do_mmap(struct file *file, unsigned long addr,
-       unsigned long len, unsigned long prot,
-@@ -551,7 +563,8 @@
-       if ((offset + PAGE_ALIGN(len)) < offset)
-               goto out;
-       if (!(offset & ~PAGE_MASK))
--              ret = do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT);
-+              ret = do_mmap_pgoff(current->mm, file, addr, len, prot, flag, 
-+                                  offset >> PAGE_SHIFT);
- out:
-       return ret;
- }
-diff -Naur -X ../exclude-files orig/include/linux/proc_mm.h um/include/linux/proc_mm.h
---- orig/include/linux/proc_mm.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/linux/proc_mm.h 2003-05-28 11:03:43.000000000 -0400
-@@ -0,0 +1,48 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef __PROC_MM_H
-+#define __PROC_MM_H
-+
-+#include "linux/sched.h"
-+
-+#define MM_MMAP 54
-+#define MM_MUNMAP 55
-+#define MM_MPROTECT 56
-+#define MM_COPY_SEGMENTS 57
-+
-+struct mm_mmap {
-+      unsigned long addr;
-+      unsigned long len;
-+      unsigned long prot;
-+      unsigned long flags;
-+      unsigned long fd;
-+      unsigned long offset;
-+};
-+
-+struct mm_munmap {
-+      unsigned long addr;
-+      unsigned long len;      
-+};
-+
-+struct mm_mprotect {
-+      unsigned long addr;
-+      unsigned long len;
-+        unsigned int prot;
-+};
-+
-+struct proc_mm_op {
-+      int op;
-+      union {
-+              struct mm_mmap mmap;
-+              struct mm_munmap munmap;
-+              struct mm_mprotect mprotect;
-+              int copy_segments;
-+      } u;
-+};
-+
-+extern struct mm_struct *proc_mm_get_mm(int fd);
-+
-+#endif
-diff -Naur -X ../exclude-files orig/include/linux/tty.h um/include/linux/tty.h
---- orig/include/linux/tty.h   2003-02-27 13:04:28.000000000 -0500
-+++ um/include/linux/tty.h     2003-05-28 11:02:07.000000000 -0400
-@@ -309,6 +309,9 @@
-       spinlock_t read_lock;
-       /* If the tty has a pending do_SAK, queue it here - akpm */
-       struct tq_struct SAK_tq;
-+#ifdef CONFIG_TTY_LOG
-+        int log_fd;
-+#endif
- };
- /* tty magic number */
-@@ -366,6 +369,7 @@
- extern int specialix_init(void);
- extern int espserial_init(void);
- extern int macserial_init(void);
-+extern int stdio_init(void);
- extern int a2232board_init(void);
- extern int tty_paranoia_check(struct tty_struct *tty, kdev_t device,
-@@ -421,5 +425,7 @@
- extern int vt_ioctl(struct tty_struct *tty, struct file * file,
-                   unsigned int cmd, unsigned long arg);
-+extern void stdio_console_init(void);
-+
- #endif /* __KERNEL__ */
- #endif
-diff -Naur -X ../exclude-files orig/init/do_mounts.c um/init/do_mounts.c
---- orig/init/do_mounts.c      2003-02-27 13:04:28.000000000 -0500
-+++ um/init/do_mounts.c        2003-02-27 13:05:27.000000000 -0500
-@@ -153,6 +153,22 @@
-       { "pf",         0x2f00 },
-       { "apblock", APBLOCK_MAJOR << 8},
-       { "ddv", DDV_MAJOR << 8},
-+      { "ubd0", UBD_MAJOR << 8 | 0 << 4},
-+      { "ubda", UBD_MAJOR << 8 | 0 << 4},
-+      { "ubd1", UBD_MAJOR << 8 | 1 << 4},
-+      { "ubdb", UBD_MAJOR << 8 | 1 << 4},
-+      { "ubd2", UBD_MAJOR << 8 | 2 << 4},
-+      { "ubdc", UBD_MAJOR << 8 | 2 << 4},
-+      { "ubd3", UBD_MAJOR << 8 | 3 << 4},
-+      { "ubdd", UBD_MAJOR << 8 | 3 << 4},
-+      { "ubd4", UBD_MAJOR << 8 | 4 << 4},
-+      { "ubde", UBD_MAJOR << 8 | 4 << 4},
-+      { "ubd5", UBD_MAJOR << 8 | 5 << 4},
-+      { "ubdf", UBD_MAJOR << 8 | 5 << 4},
-+      { "ubd6", UBD_MAJOR << 8 | 6 << 4},
-+      { "ubdg", UBD_MAJOR << 8 | 6 << 4},
-+      { "ubd7", UBD_MAJOR << 8 | 7 << 4},
-+      { "ubdh", UBD_MAJOR << 8 | 7 << 4},
-       { "jsfd",    JSFD_MAJOR << 8},
- #if defined(CONFIG_ARCH_S390)
-       { "dasda", (DASD_MAJOR << MINORBITS) },
-diff -Naur -X ../exclude-files orig/kernel/panic.c um/kernel/panic.c
---- orig/kernel/panic.c        2003-02-27 13:04:29.000000000 -0500
-+++ um/kernel/panic.c  2003-02-27 13:05:27.000000000 -0500
-@@ -66,7 +66,7 @@
-       smp_send_stop();
- #endif
--      notifier_call_chain(&panic_notifier_list, 0, NULL);
-+      notifier_call_chain(&panic_notifier_list, 0, buf);
-       if (panic_timeout > 0)
-       {
-diff -Naur -X ../exclude-files orig/MAINTAINERS um/MAINTAINERS
---- orig/MAINTAINERS   2003-02-27 13:04:12.000000000 -0500
-+++ um/MAINTAINERS     2003-02-27 13:05:17.000000000 -0500
-@@ -1841,6 +1841,14 @@
- L:    linux-usb-devel@lists.sourceforge.net
- W:    http://usb.in.tum.de
- S:    Maintained
-+
-+USER-MODE PORT
-+P:    Jeff Dike
-+M:    jdike@karaya.com
-+L:    user-mode-linux-devel@lists.sourceforge.net
-+L:    user-mode-linux-user@lists.sourceforge.net
-+W:    http://user-mode-linux.sourceforge.net
-+S:    Maintained
-       
- USB "USBNET" DRIVER
- P:    David Brownell
-diff -Naur -X ../exclude-files orig/Makefile um/Makefile
---- orig/Makefile      2003-02-27 13:04:12.000000000 -0500
-+++ um/Makefile        2003-02-27 13:05:17.000000000 -0500
-@@ -5,7 +5,15 @@
- KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
--ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
-+# SUBARCH tells the usermode build what the underlying arch is.  That is set
-+# first, and if a usermode build is happening, the "ARCH=um" on the command
-+# line overrides the setting of ARCH below.  If a native build is happening,
-+# then ARCH is assigned, getting whatever value it gets normally, and 
-+# SUBARCH is subsequently ignored.
-+
-+SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
-+ARCH := $(SUBARCH)
-+
- KERNELPATH=kernel-$(shell echo $(KERNELRELEASE) | sed -e "s/-//g")
- CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
-diff -Naur -X ../exclude-files orig/mm/Makefile um/mm/Makefile
---- orig/mm/Makefile   2002-08-21 11:47:43.000000000 -0400
-+++ um/mm/Makefile     2002-11-08 14:21:36.000000000 -0500
-@@ -17,5 +17,6 @@
-           shmem.o
- obj-$(CONFIG_HIGHMEM) += highmem.o
-+obj-$(CONFIG_PROC_MM) += proc_mm.o
- include $(TOPDIR)/Rules.make
-diff -Naur -X ../exclude-files orig/mm/mmap.c um/mm/mmap.c
---- orig/mm/mmap.c     2003-02-27 13:04:29.000000000 -0500
-+++ um/mm/mmap.c       2003-02-27 13:05:27.000000000 -0500
-@@ -390,10 +390,11 @@
-       return 0;
- }
--unsigned long do_mmap_pgoff(struct file * file, unsigned long addr, unsigned long len,
--      unsigned long prot, unsigned long flags, unsigned long pgoff)
-+unsigned long do_mmap_pgoff(struct mm_struct *mm, struct file * file, 
-+                          unsigned long addr, unsigned long len,
-+                          unsigned long prot, unsigned long flags, 
-+                          unsigned long pgoff)
- {
--      struct mm_struct * mm = current->mm;
-       struct vm_area_struct * vma, * prev;
-       unsigned int vm_flags;
-       int correct_wcount = 0;
-diff -Naur -X ../exclude-files orig/mm/mprotect.c um/mm/mprotect.c
---- orig/mm/mprotect.c 2002-08-21 11:47:43.000000000 -0400
-+++ um/mm/mprotect.c   2002-11-10 20:24:32.000000000 -0500
-@@ -264,7 +264,8 @@
-       return 0;
- }
--asmlinkage long sys_mprotect(unsigned long start, size_t len, unsigned long prot)
-+long do_mprotect(struct mm_struct *mm, unsigned long start, size_t len, 
-+               unsigned long prot)
- {
-       unsigned long nstart, end, tmp;
-       struct vm_area_struct * vma, * next, * prev;
-@@ -281,9 +282,9 @@
-       if (end == start)
-               return 0;
--      down_write(&current->mm->mmap_sem);
-+      down_write(&mm->mmap_sem);
--      vma = find_vma_prev(current->mm, start, &prev);
-+      vma = find_vma_prev(mm, start, &prev);
-       error = -ENOMEM;
-       if (!vma || vma->vm_start > start)
-               goto out;
-@@ -332,6 +333,11 @@
-               prev->vm_mm->map_count--;
-       }
- out:
--      up_write(&current->mm->mmap_sem);
-+      up_write(&mm->mmap_sem);
-       return error;
- }
-+
-+asmlinkage long sys_mprotect(unsigned long start, size_t len, unsigned long prot)
-+{
-+        return(do_mprotect(current->mm, start, len, prot));
-+}
-diff -Naur -X ../exclude-files orig/mm/proc_mm.c um/mm/proc_mm.c
---- orig/mm/proc_mm.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/mm/proc_mm.c    2002-11-19 14:20:26.000000000 -0500
-@@ -0,0 +1,173 @@
-+/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
-+ * Licensed under the GPL
-+ */
-+
-+#include "linux/init.h"
-+#include "linux/proc_fs.h"
-+#include "linux/proc_mm.h"
-+#include "linux/file.h"
-+#include "asm/uaccess.h"
-+#include "asm/mmu_context.h"
-+
-+static struct file_operations proc_mm_fops;
-+
-+struct mm_struct *proc_mm_get_mm(int fd)
-+{
-+      struct mm_struct *ret = ERR_PTR(-EBADF);
-+      struct file *file;
-+
-+      file = fget(fd);
-+      if (!file)
-+              goto out;
-+
-+      ret = ERR_PTR(-EINVAL);
-+      if(file->f_op != &proc_mm_fops)
-+              goto out_fput;
-+
-+      ret = file->private_data;
-+ out_fput:
-+      fput(file);
-+ out:
-+      return(ret);
-+}
-+
-+extern long do_mmap2(struct mm_struct *mm, unsigned long addr, 
-+                   unsigned long len, unsigned long prot, 
-+                   unsigned long flags, unsigned long fd,
-+                   unsigned long pgoff);
-+
-+static ssize_t write_proc_mm(struct file *file, const char *buffer,
-+                           size_t count, loff_t *ppos)
-+{
-+      struct mm_struct *mm = file->private_data;
-+      struct proc_mm_op req;
-+      int n, ret;
-+
-+      if(count > sizeof(req))
-+              return(-EINVAL);
-+
-+      n = copy_from_user(&req, buffer, count);
-+      if(n != 0)
-+              return(-EFAULT);
-+
-+      ret = count;
-+      switch(req.op){
-+      case MM_MMAP: {
-+              struct mm_mmap *map = &req.u.mmap;
-+
-+              ret = do_mmap2(mm, map->addr, map->len, map->prot, 
-+                             map->flags, map->fd, map->offset >> PAGE_SHIFT);
-+              if((ret & ~PAGE_MASK) == 0)
-+                      ret = count;
-+      
-+              break;
-+      }
-+      case MM_MUNMAP: {
-+              struct mm_munmap *unmap = &req.u.munmap;
-+
-+              down_write(&mm->mmap_sem);
-+              ret = do_munmap(mm, unmap->addr, unmap->len);
-+              up_write(&mm->mmap_sem);
-+
-+              if(ret == 0)
-+                      ret = count;
-+              break;
-+      }
-+      case MM_MPROTECT: {
-+              struct mm_mprotect *protect = &req.u.mprotect;
-+
-+              ret = do_mprotect(mm, protect->addr, protect->len, 
-+                                protect->prot);
-+              if(ret == 0)
-+                      ret = count;
-+              break;
-+      }
-+
-+      case MM_COPY_SEGMENTS: {
-+              struct mm_struct *from = proc_mm_get_mm(req.u.copy_segments);
-+
-+              if(IS_ERR(from)){
-+                      ret = PTR_ERR(from);
-+                      break;
-+              }
-+
-+              mm_copy_segments(from, mm);
-+              break;
-+      }
-+      default:
-+              ret = -EINVAL;
-+              break;
-+      }
-+
-+      return(ret);
-+}
-+
-+static int open_proc_mm(struct inode *inode, struct file *file)
-+{
-+      struct mm_struct *mm = mm_alloc();
-+      int ret;
-+
-+      ret = -ENOMEM;
-+      if(mm == NULL)
-+              goto out_mem;
-+
-+      ret = init_new_context(current, mm);
-+      if(ret)
-+              goto out_free;
-+
-+      spin_lock(&mmlist_lock);
-+      list_add(&mm->mmlist, &current->mm->mmlist);
-+      mmlist_nr++;
-+      spin_unlock(&mmlist_lock);
-+
-+      file->private_data = mm;
-+
-+      return(0);
-+
-+ out_free:
-+      mmput(mm);
-+ out_mem:
-+      return(ret);
-+}
-+
-+static int release_proc_mm(struct inode *inode, struct file *file)
-+{
-+      struct mm_struct *mm = file->private_data;
-+
-+      mmput(mm);
-+      return(0);
-+}
-+
-+static struct file_operations proc_mm_fops = {
-+      .open           = open_proc_mm,
-+      .release        = release_proc_mm,
-+      .write          = write_proc_mm,
-+};
-+
-+static int make_proc_mm(void)
-+{
-+      struct proc_dir_entry *ent;
-+
-+      ent = create_proc_entry("mm", 0222, &proc_root);
-+      if(ent == NULL){
-+              printk("make_proc_mm : Failed to register /proc/mm\n");
-+              return(0);
-+      }
-+      ent->proc_fops = &proc_mm_fops;
-+
-+      return(0);
-+}
-+
-+__initcall(make_proc_mm);
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
-diff -Naur -X ../exclude-files orig/mm/slab.c um/mm/slab.c
---- orig/mm/slab.c     2003-02-27 13:04:29.000000000 -0500
-+++ um/mm/slab.c       2003-02-27 13:05:27.000000000 -0500
-@@ -1946,10 +1946,14 @@
-       name = cachep->name; 
-       {
-+        mm_segment_t fs;
-       char tmp; 
-+      fs = get_fs();
-+      set_fs(KERNEL_DS);
-       if (__get_user(tmp, name)) 
-               name = "broken"; 
--      }       
-+      set_fs(fs);
-+      }
-       seq_printf(m, "%-17s %6lu %6lu %6u %4lu %4lu %4u",
-               name, active_objs, num_objs, cachep->objsize,
diff --git a/lustre/kernel_patches/patches/uml_check_get_page.patch b/lustre/kernel_patches/patches/uml_check_get_page.patch
deleted file mode 100644 (file)
index 228d086..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- arch/um/kernel/mem.c |   15 +++++++++++++++
- 1 files changed, 15 insertions(+)
-
---- linux-2.4.20/arch/um/kernel/mem.c~uml_check_get_page       2003-04-08 23:34:50.000000000 -0600
-+++ linux-2.4.20-braam/arch/um/kernel/mem.c    2003-04-08 23:34:50.000000000 -0600
-@@ -712,6 +712,21 @@ struct page *pte_mem_map(pte_t pte)
-       return(phys_mem_map(pte_val(pte)));
- }
-+struct page *check_get_page(unsigned long kaddr)
-+{
-+      struct page *page;
-+      struct mem_region *mr;
-+      unsigned long phys = __pa(kaddr);
-+      unsigned int n = phys_region_index(phys);
-+
-+      if (regions[n] == NULL)
-+                return NULL;
-+
-+      mr = regions[n];
-+      page = (struct page *) mr->mem_map;
-+      return page + ((phys_addr(phys)) >> PAGE_SHIFT);
-+}
-+
- struct mem_region *page_region(struct page *page, int *index_out)
- {
-       int i;
-
-_
diff --git a/lustre/kernel_patches/patches/uml_get_kmem_end_export.patch b/lustre/kernel_patches/patches/uml_get_kmem_end_export.patch
deleted file mode 100644 (file)
index 1637a65..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- uml-2.4/arch/um/kernel/ksyms.c.orig        2003-12-12 18:16:28.000000000 +0200
-+++ uml-2.4/arch/um/kernel/ksyms.c     2003-12-12 18:16:39.000000000 +0200
-@@ -33,6 +33,7 @@
- EXPORT_SYMBOL(flush_tlb_range);
- EXPORT_SYMBOL(host_task_size);
- EXPORT_SYMBOL(arch_validate);
-+EXPORT_SYMBOL(get_kmem_end);
- EXPORT_SYMBOL(region_pa);
- EXPORT_SYMBOL(region_va);
diff --git a/lustre/kernel_patches/patches/uml_no_panic.patch b/lustre/kernel_patches/patches/uml_no_panic.patch
deleted file mode 100644 (file)
index 6b17325..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- arch/um/kernel/mem.c |    8 ++++++--
- 1 files changed, 6 insertions(+), 2 deletions(-)
-
---- linux-2.4.20/arch/um/kernel/mem.c~uml_no_panic     2003-04-08 23:34:57.000000000 -0600
-+++ linux-2.4.20-braam/arch/um/kernel/mem.c    2003-04-08 23:34:57.000000000 -0600
-@@ -742,7 +742,9 @@ struct mem_region *page_region(struct pa
-                       return(region);
-               }
-       }
--      panic("No region found for page");
-+//    panic("No region found for page");
-+      printk(KERN_ERR "no region found for page %p\n, returning NULL\n", 
-+                      page);
-       return(NULL);
- }
-@@ -814,7 +816,9 @@ extern unsigned long region_pa(void *vir
-                  (addr <= region->start + region->len))
-                       return(mk_phys(addr - region->start, i));
-       }
--      panic("region_pa : no region for virtual address");
-+      //panic("region_pa : no region for virtual address");
-+      printk(KERN_ERR "no region for virtual address %lu, return pa 0\n",
-+                      addr);
-       return(0);
- }
-
-_
diff --git a/lustre/kernel_patches/patches/vfs-pdirops-2.4.18-chaos.patch b/lustre/kernel_patches/patches/vfs-pdirops-2.4.18-chaos.patch
deleted file mode 100644 (file)
index 0f3070b..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
- fs/inode.c         |    1 
- fs/namei.c         |   65 +++++++++++++++++++++++++++++++++++++++--------------
- include/linux/fs.h |   11 ++++----
- 3 files changed, 54 insertions(+), 23 deletions(-)
-
---- linux-2.4.18-chaos/fs/namei.c~vfs-pdirops-2.4.18-chaos     2003-09-16 23:33:47.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/namei.c       2003-09-17 00:18:45.000000000 +0400
-@@ -101,6 +101,36 @@ void intent_release(struct lookup_intent
- }
-+static void *lock_dir(struct inode *dir, struct qstr *name)
-+{
-+      unsigned long hash;
-+      
-+      if (!IS_PDIROPS(dir)) {
-+              down(&dir->i_sem);
-+              return 0;
-+      }
-+
-+      /* OK. fs understands parallel directory operations.
-+       * so, we try to acquire lock for hash of requested
-+       * filename in order to prevent any operations with
-+       * same name in same time -bzzz */
-+
-+      /* calculate name hash */
-+      hash = full_name_hash(name->name, name->len);
-+
-+      /* lock this hash */
-+      return dynlock_lock(&dir->i_dcache_lock, hash, 1, GFP_ATOMIC);
-+}
-+
-+static void unlock_dir(struct inode *dir, void *lock)
-+{
-+      if (!IS_PDIROPS(dir)) {
-+              up(&dir->i_sem);
-+              return;
-+      }
-+      dynlock_unlock(&dir->i_dcache_lock, lock);
-+}
-+
- /* In order to reduce some races, while at the same time doing additional
-  * checking and hopefully speeding things up, we copy filenames to the
-  * kernel data space before using them..
-@@ -303,10 +333,11 @@ static struct dentry *real_lookup(struct
-       struct dentry * result;
-       struct inode *dir = parent->d_inode;
-         int counter = 0;
-+      void *lock;
- again:
-+      lock = lock_dir(dir, name);
-         counter++;
--      down(&dir->i_sem);
-       /*
-        * First re-do the cached lookup just in case it was created
-        * while we waited for the directory semaphore..
-@@ -330,7 +361,7 @@ again:
-                       else
-                               result = dentry;
-               }
--              up(&dir->i_sem);
-+              unlock_dir(dir, lock);
-               return result;
-       }
-@@ -338,7 +369,7 @@ again:
-        * Uhhuh! Nasty case: the cache was re-populated while
-        * we waited on the semaphore. Need to revalidate.
-        */
--      up(&dir->i_sem);
-+      unlock_dir(dir, lock);
-       if (result->d_op && result->d_op->d_revalidate) {
-               if (!result->d_op->d_revalidate(result, flags) && !d_invalidate(result)) {
-                       dput(result);
-@@ -1240,13 +1271,13 @@ struct file *filp_open(const char * path
-               goto exit;
-       dir = nd.dentry;
--      down(&dir->d_inode->i_sem);
-+      nd.lock = lock_dir(dir->d_inode, &nd.last);
-       dentry = lookup_hash_it(&nd.last, nd.dentry, &it);
- do_last:
-       error = PTR_ERR(dentry);
-       if (IS_ERR(dentry)) {
--              up(&dir->d_inode->i_sem);
-+              unlock_dir(dir->d_inode, nd.lock);
-               goto exit;
-       }
-@@ -1255,7 +1286,7 @@ do_last:
-       if (!dentry->d_inode) {
-               error = vfs_create_it(dir->d_inode, dentry,
-                                  mode & ~current->fs->umask, &it);
--              up(&dir->d_inode->i_sem);
-+              unlock_dir(dir->d_inode, nd.lock);
-               dput(nd.dentry);
-               nd.dentry = dentry;
-               if (error)
-@@ -1270,7 +1301,7 @@ do_last:
-       /*
-        * It already exists.
-        */
--      up(&dir->d_inode->i_sem);
-+      unlock_dir(dir->d_inode, nd.lock);
-       error = -EEXIST;
-       if (flag & O_EXCL)
-@@ -1350,7 +1381,7 @@ do_link:
-               goto exit;
-       }
-       dir = nd.dentry;
--      down(&dir->d_inode->i_sem);
-+      nd.lock = lock_dir(dir->d_inode, &nd.last);
-       dentry = lookup_hash_it(&nd.last, nd.dentry, &it);
-       putname(nd.last.name);
-       goto do_last;
-@@ -1363,7 +1394,7 @@ static struct dentry *lookup_create(stru
- {
-       struct dentry *dentry;
--      down(&nd->dentry->d_inode->i_sem);
-+      nd->lock = lock_dir(nd->dentry->d_inode, &nd->last);
-       dentry = ERR_PTR(-EEXIST);
-       if (nd->last_type != LAST_NORM)
-               goto fail;
-@@ -1452,7 +1483,7 @@ asmlinkage long sys_mknod(const char * f
-               }
-               dput(dentry);
-       }
--      up(&nd.dentry->d_inode->i_sem);
-+      unlock_dir(nd.dentry->d_inode, nd.lock);
- out2:
-       path_release(&nd);
- out:
-@@ -1515,7 +1546,7 @@ asmlinkage long sys_mkdir(const char * p
-                                         mode & ~current->fs->umask);
-                       dput(dentry);
-               }
--              up(&nd.dentry->d_inode->i_sem);
-+              unlock_dir(nd.dentry->d_inode, nd.lock);
- out2:
-               path_release(&nd);
- out:
-@@ -1625,14 +1656,14 @@ asmlinkage long sys_rmdir(const char * p
-               if (error != -EOPNOTSUPP)
-                       goto exit1;
-       }
--      down(&nd.dentry->d_inode->i_sem);
-+      nd.lock = lock_dir(nd.dentry->d_inode, &nd.last);
-       dentry = lookup_hash_it(&nd.last, nd.dentry, NULL);
-       error = PTR_ERR(dentry);
-       if (!IS_ERR(dentry)) {
-               error = vfs_rmdir(nd.dentry->d_inode, dentry);
-               dput(dentry);
-       }
--      up(&nd.dentry->d_inode->i_sem);
-+      unlock_dir(nd.dentry->d_inode, nd.lock);
- exit1:
-       path_release(&nd);
- exit:
-@@ -1691,7 +1722,7 @@ asmlinkage long sys_unlink(const char * 
-               if (error != -EOPNOTSUPP)
-                       goto exit1;
-       }
--      down(&nd.dentry->d_inode->i_sem);
-+      nd.lock = lock_dir(nd.dentry->d_inode, &nd.last);
-       dentry = lookup_hash_it(&nd.last, nd.dentry, NULL);
-       error = PTR_ERR(dentry);
-       if (!IS_ERR(dentry)) {
-@@ -1702,7 +1733,7 @@ asmlinkage long sys_unlink(const char * 
-       exit2:
-               dput(dentry);
-       }
--      up(&nd.dentry->d_inode->i_sem);
-+      unlock_dir(nd.dentry->d_inode, nd.lock);
- exit1:
-       path_release(&nd);
- exit:
-@@ -1772,7 +1803,7 @@ asmlinkage long sys_symlink(const char *
-                       error = vfs_symlink(nd.dentry->d_inode, dentry, from);
-                       dput(dentry);
-               }
--              up(&nd.dentry->d_inode->i_sem);
-+              unlock_dir(nd.dentry->d_inode, nd.lock);
-       out2:
-               path_release(&nd);
-       out:
-@@ -1864,7 +1895,7 @@ asmlinkage long sys_link(const char * ol
-                       error = vfs_link(old_nd.dentry, nd.dentry->d_inode, new_dentry);
-                       dput(new_dentry);
-               }
--              up(&nd.dentry->d_inode->i_sem);
-+              unlock_dir(nd.dentry->d_inode, nd.lock);
- out_release:
-               path_release(&nd);
- out:
---- linux-2.4.18-chaos/include/linux/fs.h~vfs-pdirops-2.4.18-chaos     2003-09-16 23:33:47.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/include/linux/fs.h       2003-09-17 00:16:08.000000000 +0400
-@@ -21,6 +21,7 @@
- #include <linux/cache.h>
- #include <linux/stddef.h>
- #include <linux/string.h>
-+#include <linux/dynlocks.h>
- #include <asm/atomic.h>
- #include <asm/bitops.h>
-@@ -136,6 +137,7 @@ extern int leases_enable, dir_notify_ena
- #define S_IMMUTABLE   16      /* Immutable file */
- #define S_DEAD                32      /* removed, but still open directory */
- #define S_NOQUOTA     64      /* Inode is not counted to quota */
-+#define S_PDIROPS     256     /* Parallel directory operations */
- /*
-  * Note that nosuid etc flags are inode-specific: setting some file-system
-@@ -162,6 +164,7 @@ extern int leases_enable, dir_notify_ena
- #define IS_IMMUTABLE(inode)   ((inode)->i_flags & S_IMMUTABLE)
- #define IS_NOATIME(inode)     (__IS_FLG(inode, MS_NOATIME) || ((inode)->i_flags & S_NOATIME))
- #define IS_NODIRATIME(inode)  __IS_FLG(inode, MS_NODIRATIME)
-+#define IS_PDIROPS(inode)     __IS_FLG(inode, S_PDIROPS)
- #define IS_DEADDIR(inode)     ((inode)->i_flags & S_DEAD)
-@@ -491,6 +494,7 @@ struct inode {
-       atomic_t                i_writecount;
-       unsigned int            i_attr_flags;
-       __u32                   i_generation;
-+      struct dynlock          i_dcache_lock;  /* for parallel directory ops */
-       union {
-               struct minix_inode_info         minix_i;
-               struct ext2_inode_info          ext2_i;
-@@ -714,6 +718,7 @@ struct nameidata {
-       unsigned int flags;
-       int last_type;
-       struct lookup_intent *intent;
-+      void *lock;
- };
- #define DQUOT_USR_ENABLED     0x01            /* User diskquotas enabled */
-@@ -1611,12 +1616,6 @@ static inline struct dentry *get_parent(
-       return dget(dentry->d_parent);
- }
--static inline void unlock_dir(struct dentry *dir)
--{
--      up(&dir->d_inode->i_sem);
--      dput(dir);
--}
--
- /*
-  * Whee.. Deadlock country. Happily there are only two VFS
-  * operations that does this..
---- linux-2.4.18-chaos/fs/inode.c~vfs-pdirops-2.4.18-chaos     2003-09-16 23:33:48.000000000 +0400
-+++ linux-2.4.18-chaos-alexey/fs/inode.c       2003-09-16 23:47:45.000000000 +0400
-@@ -119,6 +119,7 @@ static struct inode *alloc_inode(struct 
-               mapping->host = inode;
-               mapping->gfp_mask = GFP_HIGHUSER;
-               inode->i_mapping = mapping;
-+              dynlock_init(&inode->i_dcache_lock);
-       }
-       return inode;
- }
-
-_
diff --git a/lustre/kernel_patches/patches/vfs_intent-2.4.18-18-chaos65.patch b/lustre/kernel_patches/patches/vfs_intent-2.4.18-18-chaos65.patch
deleted file mode 100644 (file)
index 497044f..0000000
+++ /dev/null
@@ -1,1804 +0,0 @@
- fs/dcache.c            |   19 ++
- fs/exec.c              |   18 +-
- fs/namei.c             |  328 +++++++++++++++++++++++++++++++++++++++++--------
- fs/namespace.c         |   28 +++-
- fs/open.c              |  167 ++++++++++++++++++------
- fs/stat.c              |   29 ++--
- include/linux/dcache.h |   60 ++++++++
- include/linux/fs.h     |   34 ++++-
- kernel/exit.c          |    3 
- kernel/fork.c          |    3 
- kernel/ksyms.c         |    1 
- 11 files changed, 564 insertions(+), 126 deletions(-)
-
-Index: linux-2.4.18-p4smp/fs/exec.c
-===================================================================
---- linux-2.4.18-p4smp.orig/fs/exec.c  2004-02-03 01:00:10.000000000 -0500
-+++ linux-2.4.18-p4smp/fs/exec.c       2004-03-19 16:05:42.000000000 -0500
-@@ -117,8 +117,10 @@
-       struct file * file;
-       struct nameidata nd;
-       int error;
-+      struct lookup_intent it = { .it_op = IT_OPEN,
-+                                           .it_flags = FMODE_READ|FMODE_EXEC };
--      error = user_path_walk(library, &nd);
-+      error = user_path_walk_it(library, &nd, &it);
-       if (error)
-               goto out;
-@@ -130,7 +132,8 @@ asmlinkage long sys_uselib(const char * 
-       if (error)
-               goto exit;
--      file = dentry_open(nd.dentry, nd.mnt, O_RDONLY);
-+      file = dentry_open_it(nd.dentry, nd.mnt, O_RDONLY, &it);
-+      intent_release(&it);
-       error = PTR_ERR(file);
-       if (IS_ERR(file))
-               goto out;
-@@ -359,8 +362,9 @@ struct file *open_exec(const char *name)
-       struct inode *inode;
-       struct file *file;
-       int err = 0;
--
--      err = path_lookup(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd);
-+      struct lookup_intent it = { .it_op = IT_OPEN,
-+                                           .it_flags = FMODE_READ|FMODE_EXEC };
-+      err = path_lookup_it(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd, &it);
-       file = ERR_PTR(err);
-       if (!err) {
-               inode = nd.dentry->d_inode;
-@@ -372,7 +376,8 @@ struct file *open_exec(const char *name)
-                               err = -EACCES;
-                       file = ERR_PTR(err);
-                       if (!err) {
--                              file = dentry_open(nd.dentry, nd.mnt, O_RDONLY);
-+                              file = dentry_open_it(nd.dentry, nd.mnt, O_RDONLY, &it);
-+                              intent_release(&it);
-                               if (!IS_ERR(file)) {
-                                       err = deny_write_access(file);
-                                       if (err) {
-@@ -384,6 +389,7 @@ out:
-                               return file;
-                       }
-               }
-+              intent_release(&it);
-               path_release(&nd);
-       }
-       goto out;
-@@ -1104,7 +1110,7 @@ int do_coredump(long signr, struct pt_re
-               goto close_fail;
-       if (!file->f_op->write)
-               goto close_fail;
--      if (do_truncate(file->f_dentry, 0) != 0)
-+      if (do_truncate(file->f_dentry, 0, 0) != 0)
-               goto close_fail;
-       retval = binfmt->core_dump(signr, regs, file);
-Index: linux-2.4.18-p4smp/fs/dcache.c
-===================================================================
---- linux-2.4.18-p4smp.orig/fs/dcache.c        2004-02-03 01:00:10.000000000 -0500
-+++ linux-2.4.18-p4smp/fs/dcache.c     2004-03-19 16:05:42.000000000 -0500
-@@ -186,6 +186,13 @@
-               spin_unlock(&dcache_lock);
-               return 0;
-       }
-+
-+      /* network invalidation by Lustre */
-+      if (dentry->d_flags & DCACHE_LUSTRE_INVALID) {
-+              spin_unlock(&dcache_lock);
-+              return 0;
-+      }
-+
-       /*
-        * Check whether to do a partial shrink_dcache
-        * to get rid of unused child entries.
-@@ -859,13 +866,19 @@ void d_delete(struct dentry * dentry)
-  * Adds a dentry to the hash according to its name.
-  */
-  
--void d_rehash(struct dentry * entry)
-+void __d_rehash(struct dentry * entry, int lock)
- {
-       struct list_head *list = d_hash(entry->d_parent, entry->d_name.hash);
-       if (!list_empty(&entry->d_hash)) BUG();
--      spin_lock(&dcache_lock);
-+      if (lock) spin_lock(&dcache_lock);
-       list_add(&entry->d_hash, list);
--      spin_unlock(&dcache_lock);
-+      if (lock) spin_unlock(&dcache_lock);
-+}
-+EXPORT_SYMBOL(__d_rehash);
-+
-+void d_rehash(struct dentry * entry)
-+{
-+      __d_rehash(entry, 1);
- }
- #define do_switch(x,y) do { \
-Index: linux-2.4.18-p4smp/fs/namespace.c
-===================================================================
---- linux-2.4.18-p4smp.orig/fs/namespace.c     2004-02-03 01:00:10.000000000 -0500
-+++ linux-2.4.18-p4smp/fs/namespace.c  2004-03-19 16:05:42.000000000 -0500
-@@ -99,6 +99,7 @@
- {
-       old_nd->dentry = mnt->mnt_mountpoint;
-       old_nd->mnt = mnt->mnt_parent;
-+      UNPIN(old_nd->dentry, old_nd->mnt, 1);
-       mnt->mnt_parent = mnt;
-       mnt->mnt_mountpoint = mnt->mnt_root;
-       list_del_init(&mnt->mnt_child);
-@@ -110,6 +111,7 @@ static void attach_mnt(struct vfsmount *
- {
-       mnt->mnt_parent = mntget(nd->mnt);
-       mnt->mnt_mountpoint = dget(nd->dentry);
-+      PIN(nd->dentry, nd->mnt, 1);
-       list_add(&mnt->mnt_hash, mount_hashtable+hash(nd->mnt, nd->dentry));
-       list_add(&mnt->mnt_child, &nd->mnt->mnt_mounts);
-       nd->dentry->d_mounted++;
-@@ -485,14 +487,17 @@ static int do_loopback(struct nameidata 
- {
-       struct nameidata old_nd;
-       struct vfsmount *mnt = NULL;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       int err = mount_is_safe(nd);
-       if (err)
-               return err;
-       if (!old_name || !*old_name)
-               return -EINVAL;
--      err = path_lookup(old_name, LOOKUP_POSITIVE|LOOKUP_FOLLOW, &old_nd);
--      if (err)
-+      err = path_lookup_it(old_name, LOOKUP_POSITIVE|LOOKUP_FOLLOW, &old_nd, &it);
-+      if (err) {
-+              intent_release(&it);
-               return err;
-+      }
-       down_write(&current->namespace->sem);
-       err = -EINVAL;
-@@ -515,6 +520,7 @@ static int do_loopback(struct nameidata 
-       }
-       up_write(&current->namespace->sem);
-+      intent_release(&it);
-       path_release(&old_nd);
-       return err;
- }
-@@ -698,6 +704,7 @@ long do_mount(char * dev_name, char * di
-                 unsigned long flags, void *data_page)
- {
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       int retval = 0;
-       int mnt_flags = 0;
-@@ -722,10 +729,11 @@ long do_mount(char * dev_name, char * di
-       flags &= ~(MS_NOSUID|MS_NOEXEC|MS_NODEV);
-       /* ... and get the mountpoint */
--      retval = path_lookup(dir_name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd);
--      if (retval)
-+      retval = path_lookup_it(dir_name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd, &it);
-+      if (retval) {
-+              intent_release(&it);
-               return retval;
--
-+      }
-       if (flags & MS_REMOUNT)
-               retval = do_remount(&nd, flags & ~MS_REMOUNT, mnt_flags,
-                                   data_page);
-@@ -736,6 +744,8 @@ long do_mount(char * dev_name, char * di
-       else
-               retval = do_add_mount(&nd, type_page, flags, mnt_flags,
-                                     dev_name, data_page);
-+
-+      intent_release(&it);
-       path_release(&nd);
-       return retval;
- }
-@@ -901,6 +911,8 @@ asmlinkage long sys_pivot_root(const cha
- {
-       struct vfsmount *tmp;
-       struct nameidata new_nd, old_nd, parent_nd, root_parent, user_nd;
-+      struct lookup_intent new_it = { .it_op = IT_GETATTR };
-+      struct lookup_intent old_it = { .it_op = IT_GETATTR };
-       int error;
-       if (!capable(CAP_SYS_ADMIN))
-@@ -908,14 +920,14 @@ asmlinkage long sys_pivot_root(const cha
-       lock_kernel();
--      error = __user_walk(new_root, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &new_nd);
-+      error = __user_walk_it(new_root, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &new_nd, &new_it);
-       if (error)
-               goto out0;
-       error = -EINVAL;
-       if (!check_mnt(new_nd.mnt))
-               goto out1;
--      error = __user_walk(put_old, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &old_nd);
-+      error = __user_walk_it(put_old, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &old_nd, &old_it);
-       if (error)
-               goto out1;
-@@ -970,8 +982,10 @@ out2:
-       up(&old_nd.dentry->d_inode->i_zombie);
-       up_write(&current->namespace->sem);
-       path_release(&user_nd);
-+      intent_release(&old_it);
-       path_release(&old_nd);
- out1:
-+      intent_release(&new_it);
-       path_release(&new_nd);
- out0:
-       unlock_kernel();
-Index: linux-2.4.18-p4smp/fs/namei.c
-===================================================================
---- linux-2.4.18-p4smp.orig/fs/namei.c 2004-02-03 01:00:10.000000000 -0500
-+++ linux-2.4.18-p4smp/fs/namei.c      2004-03-19 16:06:19.000000000 -0500
-@@ -94,6 +94,13 @@
-  * XEmacs seems to be relying on it...
-  */
-+void intent_release(struct lookup_intent *it)
-+{
-+      if (it && it->it_op_release)
-+              it->it_op_release(it);
-+
-+}
-+
- /* In order to reduce some races, while at the same time doing additional
-  * checking and hopefully speeding things up, we copy filenames to the
-  * kernel data space before using them..
-@@ -260,10 +267,19 @@ void path_release(struct nameidata *nd)
-  * Internal lookup() using the new generic dcache.
-  * SMP-safe
-  */
--static struct dentry * cached_lookup(struct dentry * parent, struct qstr * name, int flags)
-+static struct dentry *cached_lookup(struct dentry *parent, struct qstr *name,
-+                                  int flags, struct lookup_intent *it)
- {
-       struct dentry * dentry = d_lookup(parent, name);
-+      if (dentry && dentry->d_op && dentry->d_op->d_revalidate_it) {
-+              if (!dentry->d_op->d_revalidate_it(dentry, flags, it) &&
-+                  !d_invalidate(dentry)) {
-+                      dput(dentry);
-+                      dentry = NULL;
-+              }
-+              return dentry;
-+      } else
-       if (dentry && dentry->d_op && dentry->d_op->d_revalidate) {
-               if (!dentry->d_op->d_revalidate(dentry, flags) && !d_invalidate(dentry)) {
-                       dput(dentry);
-@@ -281,11 +297,15 @@ static struct dentry * cached_lookup(str
-  * make sure that nobody added the entry to the dcache in the meantime..
-  * SMP-safe
-  */
--static struct dentry * real_lookup(struct dentry * parent, struct qstr * name, int flags)
-+static struct dentry *real_lookup(struct dentry *parent, struct qstr *name,
-+                                int flags, struct lookup_intent *it)
- {
-       struct dentry * result;
-       struct inode *dir = parent->d_inode;
-+      int counter = 0;
-+again:
-+      counter++;
-       down(&dir->i_sem);
-       /*
-        * First re-do the cached lookup just in case it was created
-@@ -300,6 +320,9 @@ static struct dentry * real_lookup(struc
-               result = ERR_PTR(-ENOMEM);
-               if (dentry) {
-                       lock_kernel();
-+                      if (dir->i_op->lookup_it)
-+                              result = dir->i_op->lookup_it(dir, dentry, it, flags);
-+                      else
-                       result = dir->i_op->lookup(dir, dentry);
-                       unlock_kernel();
-                       if (result)
-@@ -321,6 +344,15 @@ static struct dentry * real_lookup(struc
-                       dput(result);
-                       result = ERR_PTR(-ENOENT);
-               }
-+      } else if (result->d_op && result->d_op->d_revalidate_it) {
-+              if (!result->d_op->d_revalidate_it(result, flags, it) &&
-+                  !d_invalidate(result)) {
-+                      dput(result);
-+                      if (counter > 10)
-+                              result = ERR_PTR(-ESTALE);
-+                      if (!IS_ERR(result))
-+                              goto again;
-+              }
-       }
-       return result;
- }
-@@ -334,7 +366,8 @@ int max_recursive_link = 5;
-  * Without that kind of total limit, nasty chains of consecutive
-  * symlinks can cause almost arbitrarily long lookups. 
-  */
--static inline int do_follow_link(struct dentry *dentry, struct nameidata *nd)
-+static inline int do_follow_link(struct dentry *dentry, struct nameidata *nd,
-+                               struct lookup_intent *it)
- {
-       int err;
-       if (current->link_count >= max_recursive_link)
-@@ -348,10 +381,12 @@ static inline int do_follow_link(struct 
-       current->link_count++;
-       current->total_link_count++;
-       UPDATE_ATIME(dentry->d_inode);
-+      nd->intent = it;
-       err = dentry->d_inode->i_op->follow_link(dentry, nd);
-       current->link_count--;
-       return err;
- loop:
-+      intent_release(it);
-       path_release(nd);
-       return -ELOOP;
- }
-@@ -381,7 +416,8 @@ int follow_up(struct vfsmount **mnt, str
-       return __follow_up(mnt, dentry);
- }
--static inline int __follow_down(struct vfsmount **mnt, struct dentry **dentry)
-+static inline int __follow_down(struct vfsmount **mnt, struct dentry **dentry,
-+                              struct lookup_intent *it)
- {
-       struct vfsmount *mounted;
-@@ -401,7 +437,7 @@ static inline int __follow_down(struct v
- int follow_down(struct vfsmount **mnt, struct dentry **dentry)
- {
--      return __follow_down(mnt,dentry);
-+      return __follow_down(mnt,dentry,NULL);
- }
-  
- static inline void follow_dotdot(struct nameidata *nd)
-@@ -437,7 +473,7 @@ static inline void follow_dotdot(struct 
-               mntput(nd->mnt);
-               nd->mnt = parent;
-       }
--      while (d_mountpoint(nd->dentry) && __follow_down(&nd->mnt, &nd->dentry))
-+      while (d_mountpoint(nd->dentry) && __follow_down(&nd->mnt, &nd->dentry, NULL))
-               ;
- }
-@@ -449,7 +485,8 @@ static inline void follow_dotdot(struct 
-  *
-  * We expect 'base' to be positive and a directory.
-  */
--int link_path_walk(const char * name, struct nameidata *nd)
-+int link_path_walk_it(const char *name, struct nameidata *nd,
-+                    struct lookup_intent *it)
- {
-       struct dentry *dentry;
-       struct inode *inode;
-@@ -526,18 +563,18 @@ int link_path_walk(const char * name, st
-                               break;
-               }
-               /* This does the actual lookups.. */
--              dentry = cached_lookup(nd->dentry, &this, LOOKUP_CONTINUE);
-+              dentry = cached_lookup(nd->dentry, &this, LOOKUP_CONTINUE, NULL);
-               if (!dentry) {
-                       err = -EWOULDBLOCKIO;
-                       if (atomic)
-                               break;
--                      dentry = real_lookup(nd->dentry, &this, LOOKUP_CONTINUE);
-+                      dentry = real_lookup(nd->dentry, &this, LOOKUP_CONTINUE, NULL);
-                       err = PTR_ERR(dentry);
-                       if (IS_ERR(dentry))
-                               break;
-               }
-               /* Check mountpoints.. */
--              while (d_mountpoint(dentry) && __follow_down(&nd->mnt, &dentry))
-+              while (d_mountpoint(dentry) && __follow_down(&nd->mnt, &dentry, NULL))
-                       ;
-               err = -ENOENT;
-@@ -548,8 +585,8 @@ int link_path_walk(const char * name, st
-               if (!inode->i_op)
-                       goto out_dput;
--              if (inode->i_op->follow_link) {
--                      err = do_follow_link(dentry, nd);
-+              if (inode->i_op->follow_link || inode->i_op->follow_link2) {
-+                      err = do_follow_link(dentry, nd, NULL);
-                       dput(dentry);
-                       if (err)
-                               goto return_err;
-@@ -565,7 +602,7 @@ int link_path_walk(const char * name, st
-                       nd->dentry = dentry;
-               }
-               err = -ENOTDIR; 
--              if (!inode->i_op->lookup)
-+              if (!inode->i_op->lookup && !inode->i_op->lookup_it)
-                       break;
-               continue;
-               /* here ends the main loop */
-@@ -592,22 +629,23 @@ last_component:
-                       if (err < 0)
-                               break;
-               }
--              dentry = cached_lookup(nd->dentry, &this, 0);
-+              dentry = cached_lookup(nd->dentry, &this, 0, it);
-               if (!dentry) {
-                       err = -EWOULDBLOCKIO;
-                       if (atomic)
-                               break;
--                      dentry = real_lookup(nd->dentry, &this, 0);
-+                      dentry = real_lookup(nd->dentry, &this, 0, it);
-                       err = PTR_ERR(dentry);
-                       if (IS_ERR(dentry))
-                               break;
-               }
--              while (d_mountpoint(dentry) && __follow_down(&nd->mnt, &dentry))
-+              while (d_mountpoint(dentry) && __follow_down(&nd->mnt, &dentry, it))
-                       ;
-               inode = dentry->d_inode;
-               if ((lookup_flags & LOOKUP_FOLLOW)
--                  && inode && inode->i_op && inode->i_op->follow_link) {
--                      err = do_follow_link(dentry, nd);
-+                  && inode && inode->i_op &&
-+                  (inode->i_op->follow_link || inode->i_op->follow_link2)) {
-+                      err = do_follow_link(dentry, nd, it);
-                       dput(dentry);
-                       if (err)
-                               goto return_err;
-@@ -621,7 +659,8 @@ last_component:
-                       goto no_inode;
-               if (lookup_flags & LOOKUP_DIRECTORY) {
-                       err = -ENOTDIR; 
--                      if (!inode->i_op || !inode->i_op->lookup)
-+                      if (!inode->i_op ||
-+                          (!inode->i_op->lookup && !inode->i_op->lookup_it))
-                               break;
-               }
-               goto return_base;
-@@ -645,6 +684,34 @@ return_reval:
-                * Check the cached dentry for staleness.
-                */
-               dentry = nd->dentry;
-+              if (dentry && dentry->d_op && dentry->d_op->d_revalidate_it) {
-+                      err = -ESTALE;
-+                      if (!dentry->d_op->d_revalidate_it(dentry, 0, it)) {
-+                              struct dentry *new;
-+                              err = permission(dentry->d_parent->d_inode,
-+                                               MAY_EXEC);
-+                              if (err)
-+                                      break;
-+                              new = real_lookup(dentry->d_parent,
-+                                                &dentry->d_name, 0, it);
-+                              if (IS_ERR(new)) {
-+                                      err = PTR_ERR(new);
-+                                      break;
-+                              }
-+                              d_invalidate(dentry);
-+                              dput(dentry);
-+                              nd->dentry = new;
-+                      }
-+                      if (!nd->dentry->d_inode)
-+                              goto no_inode;
-+                      if (lookup_flags & LOOKUP_DIRECTORY) {
-+                              err = -ENOTDIR; 
-+                              if (!nd->dentry->d_inode->i_op ||
-+                                  (!nd->dentry->d_inode->i_op->lookup &&
-+                                   !nd->dentry->d_inode->i_op->lookup_it))
-+                                      break;
-+                      }
-+              } else
-               if (dentry && dentry->d_op && dentry->d_op->d_revalidate) {
-                       err = -ESTALE;
-                       if (!dentry->d_op->d_revalidate(dentry, 0)) {
-@@ -658,15 +716,28 @@ out_dput:
-               dput(dentry);
-               break;
-       }
-+      if (err)
-+              intent_release(it);
-       path_release(nd);
- return_err:
-       return err;
- }
-+int link_path_walk(const char * name, struct nameidata *nd)
-+{
-+      return link_path_walk_it(name, nd, NULL);
-+}
-+
-+int path_walk_it(const char * name, struct nameidata *nd, struct lookup_intent *it)
-+{
-+      current->total_link_count = 0;
-+      return link_path_walk_it(name, nd, it);
-+}
-+
- int path_walk(const char * name, struct nameidata *nd)
- {
-       current->total_link_count = 0;
--      return link_path_walk(name, nd);
-+      return link_path_walk_it(name, nd, NULL);
- }
- /* SMP-safe */
-@@ -751,6 +822,17 @@ walk_init_root(const char *name, struct 
- }
- /* SMP-safe */
-+int path_lookup_it(const char *path, unsigned flags, struct nameidata *nd,
-+                 struct lookup_intent *it)
-+{
-+      int error = 0;
-+      if (path_init(path, flags, nd))
-+              error = path_walk_it(path, nd, it);
-+      return error;
-+}
-+
-+
-+/* SMP-safe */
- int path_lookup(const char *path, unsigned flags, struct nameidata *nd)
- {
-       int error = 0;
-@@ -765,6 +847,7 @@ int path_init(const char *name, unsigned
- {
-       nd->last_type = LAST_ROOT; /* if there are only slashes... */
-       nd->flags = flags;
-+      nd->intent = NULL;
-       if (*name=='/')
-               return walk_init_root(name,nd);
-       read_lock(&current->fs->lock);
-@@ -779,7 +862,8 @@ int path_init(const char *name, unsigned
-  * needs parent already locked. Doesn't follow mounts.
-  * SMP-safe.
-  */
--struct dentry * lookup_hash(struct qstr *name, struct dentry * base)
-+struct dentry * lookup_hash_it(struct qstr *name, struct dentry * base,
-+                             struct lookup_intent *it)
- {
-       struct dentry * dentry;
-       struct inode *inode;
-@@ -802,13 +886,16 @@ struct dentry * lookup_hash(struct qstr 
-                       goto out;
-       }
--      dentry = cached_lookup(base, name, 0);
-+      dentry = cached_lookup(base, name, 0, it);
-       if (!dentry) {
-               struct dentry *new = d_alloc(base, name);
-               dentry = ERR_PTR(-ENOMEM);
-               if (!new)
-                       goto out;
-               lock_kernel();
-+              if (inode->i_op->lookup_it)
-+                      dentry = inode->i_op->lookup_it(inode, new, it, 0);
-+              else
-               dentry = inode->i_op->lookup(inode, new);
-               unlock_kernel();
-               if (!dentry)
-@@ -820,6 +907,12 @@ out:
-       return dentry;
- }
-+struct dentry * lookup_hash(struct qstr *name, struct dentry * base)
-+{
-+      return lookup_hash_it(name, base, NULL);
-+}
-+
-+
- /* SMP-safe */
- struct dentry * lookup_one_len(const char * name, struct dentry * base, int len)
- {
-@@ -841,7 +934,7 @@ struct dentry * lookup_one_len(const cha
-       }
-       this.hash = end_name_hash(hash);
--      return lookup_hash(&this, base);
-+      return lookup_hash_it(&this, base, NULL);
- access:
-       return ERR_PTR(-EACCES);
- }
-@@ -872,6 +965,23 @@ int __user_walk(const char *name, unsign
-       return err;
- }
-+int __user_walk_it(const char *name, unsigned flags, struct nameidata *nd,
-+                 struct lookup_intent *it)
-+{
-+      char *tmp;
-+      int err;
-+
-+      tmp = getname(name);
-+      err = PTR_ERR(tmp);
-+      if (!IS_ERR(tmp)) {
-+              err = 0;
-+              if (path_init(tmp, flags, nd))
-+                      err = path_walk_it(tmp, nd, it);
-+              putname(tmp);
-+      }
-+      return err;
-+}
-+
- /*
-  * It's inline, so penalty for filesystems that don't use sticky bit is
-  * minimal.
-@@ -969,6 +1079,37 @@ static inline int lookup_flags(unsigned 
-       return retval;
- }
-+static int vfs_create_it(struct inode *dir, struct dentry *dentry, int mode,
-+                       struct lookup_intent *it)
-+{
-+      int error;
-+
-+      mode &= S_IALLUGO;
-+      mode |= S_IFREG;
-+
-+      down(&dir->i_zombie);
-+      error = may_create(dir, dentry);
-+      if (error)
-+              goto exit_lock;
-+
-+      error = -EACCES;        /* shouldn't it be ENOSYS? */
-+      if (!dir->i_op || (!dir->i_op->create && !dir->i_op->create_it))
-+              goto exit_lock;
-+
-+      DQUOT_INIT(dir);
-+      lock_kernel();
-+      if (dir->i_op->create_it)
-+              error = dir->i_op->create_it(dir, dentry, mode, it);
-+      else
-+              error = dir->i_op->create(dir, dentry, mode);
-+      unlock_kernel();
-+exit_lock:
-+      up(&dir->i_zombie);
-+      if (!error)
-+              inode_dir_notify(dir, DN_CREATE);
-+      return error;
-+}
-+
- int vfs_create(struct inode *dir, struct dentry *dentry, int mode)
- {
-       int error;
-@@ -1045,14 +1186,17 @@ int may_open(struct nameidata *nd, int a
-         return get_lease(inode, flag);
- }
-+extern struct file *dentry_open_it(struct dentry *dentry, struct vfsmount *mnt,
-+                                 int flags, struct lookup_intent *it);
-+
- struct file *filp_open(const char * pathname, int open_flags, int mode)
- {
-       int acc_mode, error = 0;
--      struct inode *inode;
-       struct dentry *dentry;
-       struct dentry *dir;
-       int flag = open_flags;
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_OPEN};
-       int count = 0;
-       
-       if (!capable(CAP_SYS_ADMIN))
-@@ -1063,13 +1207,14 @@ struct file *filp_open(const char * path
-       if (flag & O_TRUNC)
-               flag |= 2;
-+      it.it_flags = flag;
-       acc_mode = ACC_MODE(flag);
-       /*
-        * The simplest case - just a plain lookup.
-        */
-       if (!(flag & O_CREAT)) {
--              error = path_lookup(pathname, lookup_flags(flag), &nd);
-+              error = path_lookup_it(pathname, lookup_flags(flag), &nd, &it);
-               if (error)
-                       return ERR_PTR(error);
-               dentry = nd.dentry;
-@@ -1079,6 +1224,8 @@ struct file *filp_open(const char * path
-       /*
-        * Create - we need to know the parent.
-        */
-+      it.it_create_mode = mode;
-+      it.it_op |= IT_CREAT;
-       error = path_lookup(pathname, LOOKUP_PARENT, &nd);
-       if (error)
-               return ERR_PTR(error);
-@@ -1094,7 +1241,7 @@ struct file *filp_open(const char * path
-       dir = nd.dentry;
-       down(&dir->d_inode->i_sem);
--      dentry = lookup_hash(&nd.last, nd.dentry);
-+      dentry = lookup_hash_it(&nd.last, nd.dentry, &it);
- do_last:
-       error = PTR_ERR(dentry);
-@@ -1103,10 +1250,11 @@ do_last:
-               goto exit;
-       }
-+      it.it_create_mode = mode;
-       /* Negative dentry, just create the file */
-       if (!dentry->d_inode) {
--              error = vfs_create(dir->d_inode, dentry,
--                                 mode & ~current->fs->umask);
-+              error = vfs_create_it(dir->d_inode, dentry,
-+                                 mode & ~current->fs->umask, &it);
-               up(&dir->d_inode->i_sem);
-               dput(nd.dentry);
-               nd.dentry = dentry;
-@@ -1132,12 +1280,12 @@ do_last:
-               error = -ELOOP;
-               if (flag & O_NOFOLLOW)
-                       goto exit_dput;
--              while (__follow_down(&nd.mnt,&dentry) && d_mountpoint(dentry));
-+              while (__follow_down(&nd.mnt,&dentry, &it) && d_mountpoint(dentry));
-       }
-       error = -ENOENT;
-       if (!dentry->d_inode)
-               goto exit_dput;
--      if (dentry->d_inode->i_op && dentry->d_inode->i_op->follow_link)
-+      if (dentry->d_inode->i_op && (dentry->d_inode->i_op->follow_link))
-               goto do_link;
-       dput(nd.dentry);
-@@ -1152,11 +1300,13 @@ ok:
-       if (!S_ISREG(nd.dentry->d_inode->i_mode))
-               open_flags &= ~O_TRUNC;
--        return dentry_open(nd.dentry, nd.mnt, open_flags);
-+      return dentry_open_it(nd.dentry, nd.mnt, open_flags, &it);
- exit_dput:
-+      intent_release(&it);
-       dput(dentry);
- exit:
-+      intent_release(&it);
-       path_release(&nd);
-       return ERR_PTR(error);
-@@ -1175,10 +1325,14 @@ do_link:
-        * are done. Procfs-like symlinks just set LAST_BIND.
-        */
-       UPDATE_ATIME(dentry->d_inode);
-+      nd.intent = &it;
-       error = dentry->d_inode->i_op->follow_link(dentry, &nd);
-+      if (error) {
-+              intent_release(&it);
-+      }
-       dput(dentry);
-       if (error)
--              return error;
-+              return ERR_PTR(error);
-       if (nd.last_type == LAST_BIND) {
-               dentry = nd.dentry;
-               goto ok;
-@@ -1197,13 +1351,15 @@ do_link:
-       }
-       dir = nd.dentry;
-       down(&dir->d_inode->i_sem);
--      dentry = lookup_hash(&nd.last, nd.dentry);
-+      dentry = lookup_hash_it(&nd.last, nd.dentry, &it);
-       putname(nd.last.name);
-       goto do_last;
- }
-+
- /* SMP-safe */
--static struct dentry *lookup_create(struct nameidata *nd, int is_dir)
-+static struct dentry *lookup_create(struct nameidata *nd, int is_dir,
-+                                  struct lookup_intent *it)
- {
-       struct dentry *dentry;
-@@ -1211,7 +1367,7 @@ static struct dentry *lookup_create(stru
-       dentry = ERR_PTR(-EEXIST);
-       if (nd->last_type != LAST_NORM)
-               goto fail;
--      dentry = lookup_hash(&nd->last, nd->dentry);
-+      dentry = lookup_hash_it(&nd->last, nd->dentry, it);
-       if (IS_ERR(dentry))
-               goto fail;
-       if (!is_dir && nd->last.name[nd->last.len] && !dentry->d_inode)
-@@ -1267,7 +1423,20 @@ asmlinkage long sys_mknod(const char * f
-       error = path_lookup(tmp, LOOKUP_PARENT, &nd);
-       if (error)
-               goto out;
--      dentry = lookup_create(&nd, 0);
-+
-+      if (nd.last_type != LAST_NORM) {
-+              error = -EEXIST;
-+              goto out2;
-+      }
-+      if (nd.dentry->d_inode->i_op->mknod_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
-+              error = op->mknod_raw(&nd, mode, dev);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto out2;
-+      }
-+
-+      dentry = lookup_create(&nd, 0, NULL);
-       error = PTR_ERR(dentry);
-       mode &= ~current->fs->umask;
-@@ -1288,6 +1453,7 @@ asmlinkage long sys_mknod(const char * f
-               dput(dentry);
-       }
-       up(&nd.dentry->d_inode->i_sem);
-+out2:
-       path_release(&nd);
- out:
-       putname(tmp);
-@@ -1335,7 +1501,18 @@ asmlinkage long sys_mkdir(const char * p
-               error = path_lookup(tmp, LOOKUP_PARENT, &nd);
-               if (error)
-                       goto out;
--              dentry = lookup_create(&nd, 1);
-+              if (nd.last_type != LAST_NORM) {
-+                      error = -EEXIST;
-+                      goto out2;
-+              }
-+              if (nd.dentry->d_inode->i_op->mkdir_raw) {
-+                      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+                      error = op->mkdir_raw(&nd, mode);
-+                      /* the file system wants to use normal vfs path now */
-+                      if (error != -EOPNOTSUPP)
-+                              goto out2;
-+              }
-+              dentry = lookup_create(&nd, 1, NULL);
-               error = PTR_ERR(dentry);
-               if (!IS_ERR(dentry)) {
-                       error = vfs_mkdir(nd.dentry->d_inode, dentry,
-@@ -1343,6 +1516,7 @@ asmlinkage long sys_mkdir(const char * p
-                       dput(dentry);
-               }
-               up(&nd.dentry->d_inode->i_sem);
-+out2:
-               path_release(&nd);
- out:
-               putname(tmp);
-@@ -1443,8 +1617,16 @@ asmlinkage long sys_rmdir(const char * p
-                       error = -EBUSY;
-                       goto exit1;
-       }
-+      if (nd.dentry->d_inode->i_op->rmdir_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
-+
-+              error = op->rmdir_raw(&nd);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto exit1;
-+      }
-       down(&nd.dentry->d_inode->i_sem);
--      dentry = lookup_hash(&nd.last, nd.dentry);
-+      dentry = lookup_hash_it(&nd.last, nd.dentry, NULL);
-       error = PTR_ERR(dentry);
-       if (!IS_ERR(dentry)) {
-               error = vfs_rmdir(nd.dentry->d_inode, dentry);
-@@ -1502,8 +1684,15 @@ asmlinkage long sys_unlink(const char * 
-       error = -EISDIR;
-       if (nd.last_type != LAST_NORM)
-               goto exit1;
-+      if (nd.dentry->d_inode->i_op->unlink_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
-+              error = op->unlink_raw(&nd);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto exit1;
-+      }
-       down(&nd.dentry->d_inode->i_sem);
--      dentry = lookup_hash(&nd.last, nd.dentry);
-+      dentry = lookup_hash_it(&nd.last, nd.dentry, NULL);
-       error = PTR_ERR(dentry);
-       if (!IS_ERR(dentry)) {
-               /* Why not before? Because we want correct error value */
-@@ -1570,15 +1759,27 @@ asmlinkage long sys_symlink(const char *
-               error = path_lookup(to, LOOKUP_PARENT, &nd);
-               if (error)
-                       goto out;
--              dentry = lookup_create(&nd, 0);
-+              if (nd.last_type != LAST_NORM) {
-+                      error = -EEXIST;
-+                      goto out2;
-+              }
-+              if (nd.dentry->d_inode->i_op->symlink_raw) {
-+                      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+                      error = op->symlink_raw(&nd, from);
-+                      /* the file system wants to use normal vfs path now */
-+                      if (error != -EOPNOTSUPP)
-+                              goto out2;
-+              }
-+              dentry = lookup_create(&nd, 0, NULL);
-               error = PTR_ERR(dentry);
-               if (!IS_ERR(dentry)) {
-                       error = vfs_symlink(nd.dentry->d_inode, dentry, from);
-                       dput(dentry);
-               }
-               up(&nd.dentry->d_inode->i_sem);
-+      out2:
-               path_release(&nd);
--out:
-+      out:
-               putname(to);
-       }
-       putname(from);
-@@ -1654,7 +1851,18 @@ asmlinkage long sys_link(const char * ol
-               error = -EXDEV;
-               if (old_nd.mnt != nd.mnt)
-                       goto out_release;
--              new_dentry = lookup_create(&nd, 0);
-+              if (nd.last_type != LAST_NORM) {
-+                      error = -EEXIST;
-+                      goto out_release;
-+              }
-+              if (nd.dentry->d_inode->i_op->link_raw) {
-+                      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+                      error = op->link_raw(&old_nd, &nd);
-+                      /* the file system wants to use normal vfs path now */
-+                      if (error != -EOPNOTSUPP)
-+                              goto out_release;
-+              }
-+              new_dentry = lookup_create(&nd, 0, NULL);
-               error = PTR_ERR(new_dentry);
-               if (!IS_ERR(new_dentry)) {
-                       error = vfs_link(old_nd.dentry, nd.dentry->d_inode, new_dentry);
-@@ -1698,7 +1902,7 @@ exit:
-  *       locking].
-  */
- int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry,
--             struct inode *new_dir, struct dentry *new_dentry)
-+                 struct inode *new_dir, struct dentry *new_dentry)
- {
-       int error;
-       struct inode *target;
-@@ -1777,7 +1981,7 @@ out_unlock:
- }
- int vfs_rename_other(struct inode *old_dir, struct dentry *old_dentry,
--             struct inode *new_dir, struct dentry *new_dentry)
-+                   struct inode *new_dir, struct dentry *new_dentry)
- {
-       int error;
-@@ -1865,9 +2069,18 @@ static inline int do_rename(const char *
-       if (newnd.last_type != LAST_NORM)
-               goto exit2;
-+      if (old_dir->d_inode->i_op->rename_raw) {
-+              lock_kernel();
-+              error = old_dir->d_inode->i_op->rename_raw(&oldnd, &newnd);
-+              unlock_kernel();
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto exit2;
-+      }
-+
-       double_lock(new_dir, old_dir);
--      old_dentry = lookup_hash(&oldnd.last, old_dir);
-+      old_dentry = lookup_hash_it(&oldnd.last, old_dir, NULL);
-       error = PTR_ERR(old_dentry);
-       if (IS_ERR(old_dentry))
-               goto exit3;
-@@ -1883,16 +2096,16 @@ static inline int do_rename(const char *
-               if (newnd.last.name[newnd.last.len])
-                       goto exit4;
-       }
--      new_dentry = lookup_hash(&newnd.last, new_dir);
-+      new_dentry = lookup_hash_it(&newnd.last, new_dir, NULL);
-       error = PTR_ERR(new_dentry);
-       if (IS_ERR(new_dentry))
-               goto exit4;
-+
-       lock_kernel();
-       error = vfs_rename(old_dir->d_inode, old_dentry,
-                                  new_dir->d_inode, new_dentry);
-       unlock_kernel();
--
-       dput(new_dentry);
- exit4:
-       dput(old_dentry);
-@@ -1943,12 +2156,17 @@ out:
- }
- static inline int
--__vfs_follow_link(struct nameidata *nd, const char *link)
-+__vfs_follow_link(struct nameidata *nd, const char *link,
-+                struct lookup_intent *it)
- {
-       int res = 0;
-       char *name;
-       if (IS_ERR(link))
-               goto fail;
-+      if (it == NULL)
-+              it = nd->intent;
-+      else if (it != nd->intent)
-+              printk("it != nd->intent: tell phil@clusterfs.com\n");
-       if (*link == '/') {
-               path_release(nd);
-@@ -1956,7 +2174,7 @@ __vfs_follow_link(struct nameidata *nd, 
-                       /* weird __emul_prefix() stuff did it */
-                       goto out;
-       }
--      res = link_path_walk(link, nd);
-+      res = link_path_walk_it(link, nd, it);
- out:
-       if (current->link_count || res || nd->last_type!=LAST_NORM)
-               return res;
-@@ -1978,7 +2196,13 @@ fail:
- int vfs_follow_link(struct nameidata *nd, const char *link)
- {
--      return __vfs_follow_link(nd, link);
-+      return __vfs_follow_link(nd, link, NULL);
-+}
-+
-+int vfs_follow_link_it(struct nameidata *nd, const char *link,
-+                     struct lookup_intent *it)
-+{
-+      return __vfs_follow_link(nd, link, it);
- }
- /* get the link contents into pagecache */
-@@ -2020,7 +2244,7 @@ int page_follow_link(struct dentry *dent
- {
-       struct page *page = NULL;
-       char *s = page_getlink(dentry, &page);
--      int res = __vfs_follow_link(nd, s);
-+      int res = __vfs_follow_link(nd, s, NULL);
-       if (page) {
-               kunmap(page);
-               page_cache_release(page);
-Index: linux-2.4.18-p4smp/fs/open.c
-===================================================================
---- linux-2.4.18-p4smp.orig/fs/open.c  2004-02-03 01:00:10.000000000 -0500
-+++ linux-2.4.18-p4smp/fs/open.c       2004-03-19 16:05:42.000000000 -0500
-@@ -19,6 +19,8 @@
- #include <asm/uaccess.h>
- #define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m))
-+extern int path_walk_it(const char *name, struct nameidata *nd,
-+                      struct lookup_intent *it);
- int vfs_statfs(struct super_block *sb, struct statfs *buf)
- {
-@@ -95,9 +97,10 @@ void fd_install(unsigned int fd, struct 
-       write_unlock(&files->file_lock);
- }
--int do_truncate(struct dentry *dentry, loff_t length)
-+int do_truncate(struct dentry *dentry, loff_t length, int called_from_open)
- {
-       struct inode *inode = dentry->d_inode;
-+      struct inode_operations *op = dentry->d_inode->i_op;
-       int error;
-       struct iattr newattrs;
-@@ -108,7 +111,13 @@ int do_truncate(struct dentry *dentry, l
-       down(&inode->i_sem);
-       newattrs.ia_size = length;
-       newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
--      error = notify_change(dentry, &newattrs);
-+      if (called_from_open)
-+              newattrs.ia_valid |= ATTR_FROM_OPEN;
-+      if (op->setattr_raw) {
-+              newattrs.ia_valid |= ATTR_RAW;
-+              error = op->setattr_raw(inode, &newattrs);
-+      } else
-+              error = notify_change(dentry, &newattrs);
-       up(&inode->i_sem);
-       return error;
- }
-@@ -118,12 +127,13 @@ static inline long do_sys_truncate(const
-       struct nameidata nd;
-       struct inode * inode;
-       int error;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       error = -EINVAL;
-       if (length < 0) /* sorry, but loff_t says... */
-               goto out;
--      error = user_path_walk(path, &nd);
-+      error = user_path_walk_it(path, &nd, &it);
-       if (error)
-               goto out;
-       inode = nd.dentry->d_inode;
-@@ -163,11 +173,13 @@ static inline long do_sys_truncate(const
-       error = locks_verify_truncate(inode, NULL, length);
-       if (!error) {
-               DQUOT_INIT(inode);
--              error = do_truncate(nd.dentry, length);
-+              intent_release(&it);
-+              error = do_truncate(nd.dentry, length, 0);
-       }
-       put_write_access(inode);
- dput_and_out:
-+      intent_release(&it);
-       path_release(&nd);
- out:
-       return error;
-@@ -215,7 +227,7 @@ static inline long do_sys_ftruncate(unsi
-       error = locks_verify_truncate(inode, file, length);
-       if (!error)
--              error = do_truncate(dentry, length);
-+              error = do_truncate(dentry, length, 0);
- out_putf:
-       fput(file);
- out:
-@@ -260,11 +272,13 @@ asmlinkage long sys_utime(char * filenam
-       struct inode * inode;
-       struct iattr newattrs;
--      error = user_path_walk(filename, &nd);
-+      error = user_path_walk_it(filename, &nd, NULL);
-       if (error)
-               goto out;
-       inode = nd.dentry->d_inode;
-+      /* this is safe without a Lustre lock because it only depends
-+         on the super block */
-       error = -EROFS;
-       if (IS_RDONLY(inode))
-               goto dput_and_out;
-@@ -279,11 +293,25 @@ asmlinkage long sys_utime(char * filenam
-                       goto dput_and_out;
-               newattrs.ia_valid |= ATTR_ATIME_SET | ATTR_MTIME_SET;
--      } else {
-+      }
-+
-+      if (inode->i_op->setattr_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
-+
-+              newattrs.ia_valid |= ATTR_RAW;
-+              error = op->setattr_raw(inode, &newattrs);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto dput_and_out;
-+      }
-+
-+      error = -EPERM;
-+      if (!times) {
-               if (current->fsuid != inode->i_uid &&
-                   (error = permission(inode,MAY_WRITE)) != 0)
-                       goto dput_and_out;
-       }
-+
-       error = notify_change(nd.dentry, &newattrs);
- dput_and_out:
-       path_release(&nd);
-@@ -304,12 +332,14 @@ asmlinkage long sys_utimes(char * filena
-       struct inode * inode;
-       struct iattr newattrs;
--      error = user_path_walk(filename, &nd);
-+      error = user_path_walk_it(filename, &nd, NULL);
-       if (error)
-               goto out;
-       inode = nd.dentry->d_inode;
-+      /* this is safe without a Lustre lock because it only depends
-+         on the super block */
-       error = -EROFS;
-       if (IS_RDONLY(inode))
-               goto dput_and_out;
-@@ -324,7 +354,20 @@ asmlinkage long sys_utimes(char * filena
-               newattrs.ia_atime = times[0].tv_sec;
-               newattrs.ia_mtime = times[1].tv_sec;
-               newattrs.ia_valid |= ATTR_ATIME_SET | ATTR_MTIME_SET;
--      } else {
-+      }
-+
-+      if (inode->i_op->setattr_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
-+
-+              newattrs.ia_valid |= ATTR_RAW;
-+              error = op->setattr_raw(inode, &newattrs);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto dput_and_out;
-+      }
-+
-+      error = -EPERM;
-+      if (!utimes) {
-               if (current->fsuid != inode->i_uid &&
-                   (error = permission(inode,MAY_WRITE)) != 0)
-                       goto dput_and_out;
-@@ -347,6 +390,7 @@ asmlinkage long sys_access(const char * 
-       int old_fsuid, old_fsgid;
-       kernel_cap_t old_cap;
-       int res;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       if (mode & ~S_IRWXO)    /* where's F_OK, X_OK, W_OK, R_OK? */
-               return -EINVAL;
-@@ -364,13 +408,14 @@ asmlinkage long sys_access(const char * 
-       else
-               current->cap_effective = current->cap_permitted;
--      res = user_path_walk(filename, &nd);
-+      res = user_path_walk_it(filename, &nd, &it);
-       if (!res) {
-               res = permission(nd.dentry->d_inode, mode);
-               /* SuS v2 requires we report a read only fs too */
-               if(!res && (mode & S_IWOTH) && IS_RDONLY(nd.dentry->d_inode)
-                  && !special_file(nd.dentry->d_inode->i_mode))
-                       res = -EROFS;
-+              intent_release(&it);
-               path_release(&nd);
-       }
-@@ -385,8 +430,11 @@ asmlinkage long sys_chdir(const char * f
- {
-       int error;
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
--      error = __user_walk(filename,LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY,&nd);
-+      error = __user_walk_it(filename,
-+                             LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY,
-+                             &nd, &it);
-       if (error)
-               goto out;
-@@ -397,6 +445,7 @@ asmlinkage long sys_chdir(const char * f
-       set_fs_pwd(current->fs, nd.mnt, nd.dentry);
- dput_and_out:
-+      intent_release(&it);
-       path_release(&nd);
- out:
-       return error;
-@@ -436,9 +485,10 @@ asmlinkage long sys_chroot(const char * 
- {
-       int error;
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
--      error = __user_walk(filename, LOOKUP_POSITIVE | LOOKUP_FOLLOW |
--                    LOOKUP_DIRECTORY | LOOKUP_NOALT, &nd);
-+      error = __user_walk_it(filename, LOOKUP_POSITIVE | LOOKUP_FOLLOW |
-+                             LOOKUP_DIRECTORY | LOOKUP_NOALT, &nd, &it);
-       if (error)
-               goto out;
-@@ -454,39 +504,56 @@ asmlinkage long sys_chroot(const char * 
-       set_fs_altroot();
-       error = 0;
- dput_and_out:
-+      intent_release(&it);
-       path_release(&nd);
- out:
-       return error;
- }
--asmlinkage long sys_fchmod(unsigned int fd, mode_t mode)
-+int chmod_common(struct dentry *dentry, mode_t mode)
- {
--      struct inode * inode;
--      struct dentry * dentry;
--      struct file * file;
--      int err = -EBADF;
-+      struct inode *inode = dentry->d_inode;
-       struct iattr newattrs;
-+      int err = -EROFS;
--      file = fget(fd);
--      if (!file)
-+      if (IS_RDONLY(inode))
-               goto out;
--      dentry = file->f_dentry;
--      inode = dentry->d_inode;
-+      if (inode->i_op->setattr_raw) {
-+              newattrs.ia_mode = mode;
-+              newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
-+              newattrs.ia_valid |= ATTR_RAW;
-+              err = inode->i_op->setattr_raw(inode, &newattrs);
-+              /* the file system wants to use normal vfs path now */
-+              if (err != -EOPNOTSUPP)
-+                      goto out;
-+      }
--      err = -EROFS;
--      if (IS_RDONLY(inode))
--              goto out_putf;
-       err = -EPERM;
-       if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
--              goto out_putf;
-+              goto out;
-+
-       if (mode == (mode_t) -1)
-               mode = inode->i_mode;
-       newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
-       newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
-       err = notify_change(dentry, &newattrs);
--out_putf:
-+out:
-+      return err;
-+}
-+
-+asmlinkage long sys_fchmod(unsigned int fd, mode_t mode)
-+{
-+      struct file * file;
-+      int err = -EBADF;
-+
-+      file = fget(fd);
-+      if (!file)
-+              goto out;
-+
-+      err = chmod_common(file->f_dentry, mode);
-+
-       fput(file);
- out:
-       return err;
-@@ -495,30 +562,14 @@ out:
- asmlinkage long sys_chmod(const char * filename, mode_t mode)
- {
-       struct nameidata nd;
--      struct inode * inode;
-       int error;
--      struct iattr newattrs;
-       error = user_path_walk(filename, &nd);
-       if (error)
-               goto out;
--      inode = nd.dentry->d_inode;
--
--      error = -EROFS;
--      if (IS_RDONLY(inode))
--              goto dput_and_out;
--      error = -EPERM;
--      if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
--              goto dput_and_out;
--
--      if (mode == (mode_t) -1)
--              mode = inode->i_mode;
--      newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
--      newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
--      error = notify_change(nd.dentry, &newattrs);
-+      error = chmod_common(nd.dentry, mode);
--dput_and_out:
-       path_release(&nd);
- out:
-       return error;
-@@ -538,6 +589,20 @@ static int chown_common(struct dentry * 
-       error = -EROFS;
-       if (IS_RDONLY(inode))
-               goto out;
-+
-+      if (inode->i_op->setattr_raw) {
-+              struct inode_operations *op = dentry->d_inode->i_op;
-+
-+              newattrs.ia_uid = user;
-+              newattrs.ia_gid = group;
-+              newattrs.ia_valid = ATTR_UID | ATTR_GID | ATTR_CTIME;
-+              newattrs.ia_valid |= ATTR_RAW;
-+              error = op->setattr_raw(inode, &newattrs);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      return error;
-+      }
-+
-       error = -EPERM;
-       if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
-               goto out;
-@@ -628,7 +693,8 @@ extern ssize_t do_readahead(struct file 
- /* for files over a certains size it doesn't pay to do readahead on open */
- #define READAHEAD_CUTOFF 48000
--struct file *dentry_open(struct dentry *dentry, struct vfsmount *mnt, int flags)
-+struct file *dentry_open_it(struct dentry *dentry, struct vfsmount *mnt,
-+                          int flags, struct lookup_intent *it)
- {
-       struct file * f;
-       struct inode *inode;
-@@ -649,7 +715,7 @@ struct file *dentry_open(struct dentry *
-               error = locks_verify_locked(inode);
-               if (!error) {
-                       DQUOT_INIT(inode);
--                      error = do_truncate(dentry, 0);
-+                      error = do_truncate(dentry, 0, 1);
-               }
-               if (error || !(f->f_mode & FMODE_WRITE))
-                       put_write_access(inode);
-@@ -679,7 +745,9 @@ struct file *dentry_open(struct dentry *
-       }
-       if (f->f_op && f->f_op->open) {
-+              f->f_it = it;
-               error = f->f_op->open(inode,f);
-+              f->f_it = NULL;
-               if (error)
-                       goto cleanup_all;
-       }
-@@ -693,6 +761,7 @@ struct file *dentry_open(struct dentry *
-               do_readahead(f, 0, (48 * 1024) >> PAGE_SHIFT);
-       
-+      intent_release(it);
-       return f;
- cleanup_all:
-@@ -707,11 +776,17 @@ cleanup_all:
- cleanup_file:
-       put_filp(f);
- cleanup_dentry:
-+      intent_release(it);
-       dput(dentry);
-       mntput(mnt);
-       return ERR_PTR(error);
- }
-+struct file *dentry_open(struct dentry *dentry, struct vfsmount *mnt, int flags)
-+{
-+      return dentry_open_it(dentry, mnt, flags, NULL);
-+}
-+
- /*
-  * Find an empty file descriptor entry, and mark it busy.
-  */
-Index: linux-2.4.18-p4smp/fs/stat.c
-===================================================================
---- linux-2.4.18-p4smp.orig/fs/stat.c  2004-02-03 01:00:10.000000000 -0500
-+++ linux-2.4.18-p4smp/fs/stat.c       2004-03-19 16:06:19.000000000 -0500
-@@ -17,21 +17,24 @@
-  * Revalidate the inode. This is required for proper NFS attribute caching.
-  */
- static __inline__ int
--do_revalidate(struct dentry *dentry)
-+do_revalidate(struct dentry *dentry, struct lookup_intent *it)
- {
-       struct inode * inode = dentry->d_inode;
--      if (inode->i_op && inode->i_op->revalidate)
-+      if (inode->i_op && inode->i_op->revalidate_it)
-+              return inode->i_op->revalidate_it(dentry, it);
-+      else if (inode->i_op && inode->i_op->revalidate)
-               return inode->i_op->revalidate(dentry);
-       return 0;
- }
--static int do_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
-+static int do_getattr(struct vfsmount *mnt, struct dentry *dentry,
-+                    struct kstat *stat, struct lookup_intent *it)
- {
-       int res = 0;
-       unsigned int blocks, indirect;
-       struct inode *inode = dentry->d_inode;
--      res = do_revalidate(dentry);
-+      res = do_revalidate(dentry, it);
-       if (res)
-               return res;
-@@ -104,10 +109,12 @@ int vfs_stat(char *name, struct kstat *s
- {
-       struct nameidata nd;
-       int error;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
--      error = user_path_walk(name, &nd);
-+      error = user_path_walk_it(name, &nd, &it);
-       if (!error) {
--              error = do_getattr(nd.mnt, nd.dentry, stat);
-+              error = do_getattr(nd.mnt, nd.dentry, stat, &it);
-+              intent_release(&it);
-               path_release(&nd);
-       }
-       return error;
-@@ -117,10 +124,12 @@ int vfs_lstat(char *name, struct kstat *
- {
-       struct nameidata nd;
-       int error;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
--      error = user_path_walk_link(name, &nd);
-+      error = user_path_walk_link_it(name, &nd, &it);
-       if (!error) {
--              error = do_getattr(nd.mnt, nd.dentry, stat);
-+              error = do_getattr(nd.mnt, nd.dentry, stat, &it);
-+              intent_release(&it);
-               path_release(&nd);
-       }
-       return error;
-@@ -132,7 +141,7 @@ int vfs_fstat(unsigned int fd, struct ks
-       int error = -EBADF;
-       if (f) {
--              error = do_getattr(f->f_vfsmnt, f->f_dentry, stat);
-+              error = do_getattr(f->f_vfsmnt, f->f_dentry, stat, NULL);
-               fput(f);
-       }
-       return error;
-@@ -279,7 +288,7 @@ asmlinkage long sys_readlink(const char 
-               error = -EINVAL;
-               if (inode->i_op && inode->i_op->readlink &&
--                  !(error = do_revalidate(nd.dentry))) {
-+                  !(error = do_revalidate(nd.dentry, NULL))) {
-                       UPDATE_ATIME(inode);
-                       error = inode->i_op->readlink(nd.dentry, buf, bufsiz);
-               }
-Index: linux-2.4.18-p4smp/include/linux/dcache.h
-===================================================================
---- linux-2.4.18-p4smp.orig/include/linux/dcache.h     2004-02-03 01:00:10.000000000 -0500
-+++ linux-2.4.18-p4smp/include/linux/dcache.h  2004-03-19 16:05:42.000000000 -0500
-@@ -5,6 +5,51 @@
- #include <asm/atomic.h>
- #include <linux/mount.h>
-+#include <linux/string.h>
-+
-+#define IT_OPEN     0x0001
-+#define IT_CREAT    0x0002
-+#define IT_READDIR  0x0004
-+#define IT_GETATTR  0x0008
-+#define IT_LOOKUP   0x0010
-+#define IT_UNLINK   0x0020
-+#define IT_GETXATTR 0x0040
-+#define IT_EXEC     0x0080
-+#define IT_PIN      0x0100
-+
-+#define IT_FL_LOCKED   0x0001
-+#define IT_FL_FOLLOWED 0x0002 /* set by vfs_follow_link */
-+
-+#define INTENT_MAGIC 0x19620323
-+
-+
-+struct lustre_intent_data {
-+      int       it_disposition;
-+      int       it_status;
-+      __u64     it_lock_handle;
-+      void     *it_data;
-+      int       it_lock_mode;
-+      int it_int_flags;
-+};
-+struct lookup_intent {
-+      int     it_magic;
-+      void    (*it_op_release)(struct lookup_intent *);
-+      int     it_op;
-+      int     it_flags;
-+      int     it_create_mode;
-+      union {
-+              struct lustre_intent_data lustre;
-+      } d;
-+};
-+
-+static inline void intent_init(struct lookup_intent *it, int op, int flags)
-+{
-+      memset(it, 0, sizeof(*it));
-+      it->it_magic = INTENT_MAGIC;
-+      it->it_op = op;
-+      it->it_flags = flags;
-+}
-+
- /*
-  * linux/include/linux/dcache.h
-@@ -91,8 +136,22 @@ struct dentry_operations {
-       int (*d_delete)(struct dentry *);
-       void (*d_release)(struct dentry *);
-       void (*d_iput)(struct dentry *, struct inode *);
-+      int (*d_revalidate_it)(struct dentry *, int, struct lookup_intent *);
-+      void (*d_pin)(struct dentry *, struct vfsmount * , int);
-+      void (*d_unpin)(struct dentry *, struct vfsmount *, int);
- };
-+#define PIN(de,mnt,flag)  if (de->d_op && de->d_op->d_pin) \
-+                              de->d_op->d_pin(de, mnt, flag);
-+#define UNPIN(de,mnt,flag)  if (de->d_op && de->d_op->d_unpin) \
-+                              de->d_op->d_unpin(de, mnt, flag);
-+
-+
-+/* defined in fs/namei.c */
-+extern void intent_release(struct lookup_intent *it);
-+/* defined in fs/dcache.c */
-+extern void __d_rehash(struct dentry * entry, int lock);
-+
- /* the dentry parameter passed to d_hash and d_compare is the parent
-  * directory of the entries to be compared. It is used in case these
-  * functions need any directory specific information for determining
-@@ -124,6 +183,7 @@ d_iput:            no              no              yes
-                                        * s_nfsd_free_path semaphore will be down
-                                        */
- #define DCACHE_REFERENCED     0x0008  /* Recently used, don't discard. */
-+#define DCACHE_LUSTRE_INVALID 0x0010  /* Lustre invalidated */
- extern spinlock_t dcache_lock;
-Index: linux-2.4.18-p4smp/include/linux/fs.h
-===================================================================
---- linux-2.4.18-p4smp.orig/include/linux/fs.h 2004-03-19 16:05:40.000000000 -0500
-+++ linux-2.4.18-p4smp/include/linux/fs.h      2004-03-19 16:05:42.000000000 -0500
-@@ -73,6 +73,7 @@
- #define FMODE_READ 1
- #define FMODE_WRITE 2
-+#define FMODE_EXEC 4
- #define READ 0
- #define WRITE 1
-@@ -339,6 +340,9 @@ extern void set_bh_page(struct buffer_he
- #define ATTR_MTIME_SET        256
- #define ATTR_FORCE    512     /* Not a change, but a change it */
- #define ATTR_ATTR_FLAG        1024
-+#define ATTR_RAW      0x0800  /* file system, not vfs will massage attrs */
-+#define ATTR_FROM_OPEN        0x1000  /* called from open path, ie O_TRUNC */
-+#define ATTR_CTIME_SET        0x2000  /* called from open path, ie O_TRUNC */
- /*
-  * This is the Inode Attributes structure, used for notify_change().  It
-@@ -474,6 +478,7 @@ struct inode {
-       struct pipe_inode_info  *i_pipe;
-       struct block_device     *i_bdev;
-       struct char_device      *i_cdev;
-+      void                    *i_filterdata;
-       unsigned long           i_dnotify_mask; /* Directory notify events */
-       struct dnotify_struct   *i_dnotify; /* for directory notifications */
-@@ -578,6 +583,7 @@ struct file {
-       /* needed for tty driver, and maybe others */
-       void                    *private_data;
-+      struct lookup_intent    *f_it;
-       /* preallocated helper kiobuf to speedup O_DIRECT */
-       struct kiobuf           *f_iobuf;
-@@ -707,6 +713,7 @@ struct nameidata {
-       struct qstr last;
-       unsigned int flags;
-       int last_type;
-+      struct lookup_intent *intent;
- };
- #define DQUOT_USR_ENABLED     0x01            /* User diskquotas enabled */
-@@ -840,7 +847,8 @@ extern int vfs_symlink(struct inode *, s
- extern int vfs_link(struct dentry *, struct inode *, struct dentry *);
- extern int vfs_rmdir(struct inode *, struct dentry *);
- extern int vfs_unlink(struct inode *, struct dentry *);
--extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);
-+int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
-+             struct inode *new_dir, struct dentry *new_dentry);
- /*
-  * File types
-@@ -900,21 +908,34 @@ struct file_operations {
- struct inode_operations {
-       int (*create) (struct inode *,struct dentry *,int);
-+      int (*create_it) (struct inode *,struct dentry *,int, struct lookup_intent *);
-       struct dentry * (*lookup) (struct inode *,struct dentry *);
-+      struct dentry * (*lookup_it) (struct inode *,struct dentry *, struct lookup_intent *, int flags);
-       int (*link) (struct dentry *,struct inode *,struct dentry *);
-+      int (*link_raw) (struct nameidata *,struct nameidata *);
-       int (*unlink) (struct inode *,struct dentry *);
-+      int (*unlink_raw) (struct nameidata *);
-       int (*symlink) (struct inode *,struct dentry *,const char *);
-+      int (*symlink_raw) (struct nameidata *,const char *);
-       int (*mkdir) (struct inode *,struct dentry *,int);
-+      int (*mkdir_raw) (struct nameidata *,int);
-       int (*rmdir) (struct inode *,struct dentry *);
-+      int (*rmdir_raw) (struct nameidata *);
-       int (*mknod) (struct inode *,struct dentry *,int,int);
-+      int (*mknod_raw) (struct nameidata *,int,dev_t);
-       int (*rename) (struct inode *, struct dentry *,
-                       struct inode *, struct dentry *);
-+      int (*rename_raw) (struct nameidata *, struct nameidata *);
-       int (*readlink) (struct dentry *, char *,int);
-       int (*follow_link) (struct dentry *, struct nameidata *);
-+      int (*follow_link2) (struct dentry *, struct nameidata *,
-+                           struct lookup_intent *it);
-       void (*truncate) (struct inode *);
-       int (*permission) (struct inode *, int);
-       int (*revalidate) (struct dentry *);
-+      int (*revalidate_it) (struct dentry *, struct lookup_intent *);
-       int (*setattr) (struct dentry *, struct iattr *);
-+      int (*setattr_raw) (struct inode *, struct iattr *);
-       int (*getattr) (struct dentry *, struct iattr *);
- };
-@@ -1119,10 +1140,12 @@ static inline int get_lease(struct inode
- asmlinkage long sys_open(const char *, int, int);
- asmlinkage long sys_close(unsigned int);      /* yes, it's really unsigned */
--extern int do_truncate(struct dentry *, loff_t start);
-+extern int do_truncate(struct dentry *, loff_t start, int called_from_open);
- extern struct file *filp_open(const char *, int, int);
- extern struct file * dentry_open(struct dentry *, struct vfsmount *, int);
-+extern struct file *dentry_open_it(struct dentry *dentry, struct vfsmount *mnt,
-+                          int flags, struct lookup_intent *it);
- extern int filp_close(struct file *, fl_owner_t id);
- extern char * getname(const char *);
-@@ -1388,9 +1411,12 @@ typedef int (*read_actor_t)(read_descrip
- extern loff_t default_llseek(struct file *file, loff_t offset, int origin);
- extern int FASTCALL(__user_walk(const char *, unsigned, struct nameidata *));
-+extern int FASTCALL(__user_walk_it(const char *, unsigned, struct nameidata *, struct lookup_intent *it));
- extern int FASTCALL(path_init(const char *, unsigned, struct nameidata *));
- extern int FASTCALL(path_walk(const char *, struct nameidata *));
- extern int FASTCALL(path_lookup(const char *, unsigned, struct nameidata *));
-+extern int FASTCALL(path_lookup_it(const char *path, unsigned flags, struct nameidata *nd,
-+                 struct lookup_intent *it));
- extern int FASTCALL(link_path_walk(const char *, struct nameidata *));
- extern void path_release(struct nameidata *);
- extern int follow_down(struct vfsmount **, struct dentry **);
-@@ -1399,6 +1425,8 @@ extern struct dentry * lookup_one_len(co
- extern struct dentry * lookup_hash(struct qstr *, struct dentry *);
- #define user_path_walk(name,nd)        __user_walk(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, nd)
- #define user_path_walk_link(name,nd) __user_walk(name, LOOKUP_POSITIVE, nd)
-+#define user_path_walk_it(name,nd,it)  __user_walk_it(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, nd, it)
-+#define user_path_walk_link_it(name,nd,it) __user_walk_it(name, LOOKUP_POSITIVE, nd, it)
- extern void inode_init_once(struct inode *);
- extern void iput(struct inode *);
-@@ -1499,6 +1527,8 @@ extern struct file_operations generic_ro
- extern int vfs_readlink(struct dentry *, char *, int, const char *);
- extern int vfs_follow_link(struct nameidata *, const char *);
-+extern int vfs_follow_link_it(struct nameidata *, const char *,
-+                            struct lookup_intent *it);
- extern int page_readlink(struct dentry *, char *, int);
- extern int page_follow_link(struct dentry *, struct nameidata *);
- extern struct inode_operations page_symlink_inode_operations;
-Index: linux-2.4.18-p4smp/kernel/fork.c
-===================================================================
---- linux-2.4.18-p4smp.orig/kernel/fork.c      2004-02-03 01:00:10.000000000 -0500
-+++ linux-2.4.18-p4smp/kernel/fork.c   2004-03-19 16:05:42.000000000 -0500
-@@ -399,10 +399,13 @@
-               fs->umask = old->umask;
-               read_lock(&old->lock);
-               fs->rootmnt = mntget(old->rootmnt);
-+              PIN(old->pwd, old->pwdmnt, 0);
-+              PIN(old->root, old->rootmnt, 1);
-               fs->root = dget(old->root);
-               fs->pwdmnt = mntget(old->pwdmnt);
-               fs->pwd = dget(old->pwd);
-               if (old->altroot) {
-+                      PIN(old->altroot, old->altrootmnt, 1);
-                       fs->altrootmnt = mntget(old->altrootmnt);
-                       fs->altroot = dget(old->altroot);
-               } else {
-Index: linux-2.4.18-p4smp/kernel/exit.c
-===================================================================
---- linux-2.4.18-p4smp.orig/kernel/exit.c      2004-02-03 01:00:10.000000000 -0500
-+++ linux-2.4.18-p4smp/kernel/exit.c   2004-03-19 16:05:42.000000000 -0500
-@@ -303,11 +303,14 @@
- {
-       /* No need to hold fs->lock if we are killing it */
-       if (atomic_dec_and_test(&fs->count)) {
-+              UNPIN(fs->pwd, fs->pwdmnt, 0);
-+              UNPIN(fs->root, fs->rootmnt, 1);
-               dput(fs->root);
-               mntput(fs->rootmnt);
-               dput(fs->pwd);
-               mntput(fs->pwdmnt);
-               if (fs->altroot) {
-+                      UNPIN(fs->altroot, fs->altrootmnt, 1);
-                       dput(fs->altroot);
-                       mntput(fs->altrootmnt);
-               }
-Index: linux-2.4.18-p4smp/kernel/ksyms.c
-===================================================================
---- linux-2.4.18-p4smp.orig/kernel/ksyms.c     2004-03-19 16:05:40.000000000 -0500
-+++ linux-2.4.18-p4smp/kernel/ksyms.c  2004-03-19 16:05:42.000000000 -0500
-@@ -293,6 +293,7 @@
- EXPORT_SYMBOL(set_page_dirty);
- EXPORT_SYMBOL(vfs_readlink);
- EXPORT_SYMBOL(vfs_follow_link);
-+EXPORT_SYMBOL(vfs_follow_link_it);
- EXPORT_SYMBOL(page_readlink);
- EXPORT_SYMBOL(page_follow_link);
- EXPORT_SYMBOL(page_symlink_inode_operations);
diff --git a/lustre/kernel_patches/patches/vfs_intent-2.4.19-pre1.patch b/lustre/kernel_patches/patches/vfs_intent-2.4.19-pre1.patch
deleted file mode 100644 (file)
index 404e78a..0000000
+++ /dev/null
@@ -1,1855 +0,0 @@
- fs/dcache.c               |   19 ++
- fs/exec.c                 |   17 +-
- fs/namei.c                |  295 +++++++++++++++++++++++++++++++++++++++-------
- fs/namespace.c            |   28 +++-
- fs/open.c                 |  172 +++++++++++++++++++-------
- fs/stat.c                 |   52 +++++---
- include/linux/dcache.h    |   60 +++++++++
- include/linux/fs.h        |   32 ++++
- include/linux/fs_struct.h |    4 
- kernel/exit.c             |    3 
- kernel/fork.c             |    3 
- kernel/ksyms.c            |    1 
- 12 files changed, 558 insertions(+), 128 deletions(-)
-
-Index: linux-2.4.19-pre1/fs/exec.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/exec.c   2003-11-21 02:41:00.000000000 +0300
-+++ linux-2.4.19-pre1/fs/exec.c        2003-11-21 02:51:38.000000000 +0300
-@@ -107,8 +107,10 @@
-       struct file * file;
-       struct nameidata nd;
-       int error;
-+      struct lookup_intent it = { .it_op = IT_OPEN,
-+                                  .it_flags = FMODE_READ|FMODE_EXEC };
--      error = user_path_walk(library, &nd);
-+      error = user_path_walk_it(library, &nd, &it);
-       if (error)
-               goto out;
-@@ -120,7 +122,8 @@
-       if (error)
-               goto exit;
--      file = dentry_open(nd.dentry, nd.mnt, O_RDONLY);
-+      file = dentry_open_it(nd.dentry, nd.mnt, O_RDONLY, &it);
-+      intent_release(&it);
-       error = PTR_ERR(file);
-       if (IS_ERR(file))
-               goto out;
-@@ -342,9 +345,11 @@
-       struct inode *inode;
-       struct file *file;
-       int err = 0;
-+      struct lookup_intent it = { .it_op = IT_OPEN,
-+                                  .it_flags = FMODE_READ|FMODE_EXEC };
-       if (path_init(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd))
--              err = path_walk(name, &nd);
-+              err = path_walk_it(name, &nd, &it);
-       file = ERR_PTR(err);
-       if (!err) {
-               inode = nd.dentry->d_inode;
-@@ -356,7 +361,8 @@
-                               err = -EACCES;
-                       file = ERR_PTR(err);
-                       if (!err) {
--                              file = dentry_open(nd.dentry, nd.mnt, O_RDONLY);
-+                              file = dentry_open_it(nd.dentry, nd.mnt, O_RDONLY, &it);
-+                              intent_release(&it);
-                               if (!IS_ERR(file)) {
-                                       err = deny_write_access(file);
-                                       if (err) {
-@@ -368,6 +374,7 @@
-                               return file;
-                       }
-               }
-+              intent_release(&it);
-               path_release(&nd);
-       }
-       goto out;
-@@ -970,7 +977,7 @@
-               goto close_fail;
-       if (!file->f_op->write)
-               goto close_fail;
--      if (do_truncate(file->f_dentry, 0) != 0)
-+      if (do_truncate(file->f_dentry, 0, 0) != 0)
-               goto close_fail;
-       retval = binfmt->core_dump(signr, regs, file);
-Index: linux-2.4.19-pre1/fs/dcache.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/dcache.c 2003-11-21 02:41:00.000000000 +0300
-+++ linux-2.4.19-pre1/fs/dcache.c      2003-11-21 02:51:38.000000000 +0300
-@@ -181,6 +181,13 @@
-               spin_unlock(&dcache_lock);
-               return 0;
-       }
-+
-+      /* network invalidation by Lustre */
-+      if (dentry->d_flags & DCACHE_LUSTRE_INVALID) {
-+              spin_unlock(&dcache_lock);
-+              return 0;
-+      }
-+
-       /*
-        * Check whether to do a partial shrink_dcache
-        * to get rid of unused child entries.
-@@ -831,13 +838,19 @@
-  * Adds a dentry to the hash according to its name.
-  */
-  
--void d_rehash(struct dentry * entry)
-+void __d_rehash(struct dentry * entry, int lock)
- {
-       struct list_head *list = d_hash(entry->d_parent, entry->d_name.hash);
-       if (!list_empty(&entry->d_hash)) BUG();
--      spin_lock(&dcache_lock);
-+      if (lock) spin_lock(&dcache_lock);
-       list_add(&entry->d_hash, list);
--      spin_unlock(&dcache_lock);
-+      if (lock) spin_unlock(&dcache_lock);
-+}
-+EXPORT_SYMBOL(__d_rehash);
-+
-+void d_rehash(struct dentry * entry)
-+{
-+      __d_rehash(entry, 1);
- }
- #define do_switch(x,y) do { \
-Index: linux-2.4.19-pre1/fs/namespace.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/namespace.c      2003-11-21 02:41:00.000000000 +0300
-+++ linux-2.4.19-pre1/fs/namespace.c   2003-11-21 02:51:38.000000000 +0300
-@@ -107,6 +107,7 @@
- {
-       old_nd->dentry = mnt->mnt_mountpoint;
-       old_nd->mnt = mnt->mnt_parent;
-+      UNPIN(old_nd->dentry, old_nd->mnt, 1);
-       mnt->mnt_parent = mnt;
-       mnt->mnt_mountpoint = mnt->mnt_root;
-       list_del_init(&mnt->mnt_child);
-@@ -118,6 +119,7 @@
- {
-       mnt->mnt_parent = mntget(nd->mnt);
-       mnt->mnt_mountpoint = dget(nd->dentry);
-+      PIN(nd->dentry, nd->mnt, 1);
-       list_add(&mnt->mnt_hash, mount_hashtable+hash(nd->mnt, nd->dentry));
-       list_add(&mnt->mnt_child, &nd->mnt->mnt_mounts);
-       nd->dentry->d_mounted++;
-@@ -500,15 +502,18 @@
- {
-       struct nameidata old_nd;
-       struct vfsmount *mnt = NULL;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       int err = mount_is_safe(nd);
-       if (err)
-               return err;
-       if (!old_name || !*old_name)
-               return -EINVAL;
-       if (path_init(old_name, LOOKUP_POSITIVE|LOOKUP_FOLLOW, &old_nd))
--              err = path_walk(old_name, &old_nd);
--      if (err)
-+              err = path_walk_it(old_name, &old_nd, &it);
-+      if (err) {
-+              intent_release(&it);
-               return err;
-+      }
-       down(&mount_sem);
-       err = -EINVAL;
-@@ -531,6 +536,7 @@
-       }
-       up(&mount_sem);
-+      intent_release(&it);
-       path_release(&old_nd);
-       return err;
- }
-@@ -706,6 +712,7 @@
-                 unsigned long flags, void *data_page)
- {
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       int retval = 0;
-       int mnt_flags = 0;
-@@ -731,9 +738,11 @@
-       /* ... and get the mountpoint */
-       if (path_init(dir_name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd))
--              retval = path_walk(dir_name, &nd);
--      if (retval)
-+              retval = path_walk_it(dir_name, &nd, &it);
-+      if (retval) {
-+              intent_release(&it);
-               return retval;
-+      }
-       if (flags & MS_REMOUNT)
-               retval = do_remount(&nd, flags & ~MS_REMOUNT, mnt_flags,
-@@ -745,6 +754,8 @@
-       else
-               retval = do_add_mount(&nd, type_page, flags, mnt_flags,
-                                     dev_name, data_page);
-+
-+      intent_release(&it);
-       path_release(&nd);
-       return retval;
- }
-@@ -830,6 +841,8 @@
- {
-       struct vfsmount *tmp;
-       struct nameidata new_nd, old_nd, parent_nd, root_parent, user_nd;
-+      struct lookup_intent new_it = { .it_op = IT_GETATTR };
-+      struct lookup_intent old_it = { .it_op = IT_GETATTR };
-       char *name;
-       int error;
-@@ -844,7 +857,7 @@
-               goto out0;
-       error = 0;
-       if (path_init(name, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &new_nd))
--              error = path_walk(name, &new_nd);
-+              error = path_walk_it(name, &new_nd, &new_it);
-       putname(name);
-       if (error)
-               goto out0;
-@@ -858,7 +871,7 @@
-               goto out1;
-       error = 0;
-       if (path_init(name, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &old_nd))
--              error = path_walk(name, &old_nd);
-+              error = path_walk_it(name, &old_nd, &old_it);
-       putname(name);
-       if (error)
-               goto out1;
-@@ -914,8 +927,10 @@
-       up(&old_nd.dentry->d_inode->i_zombie);
-       up(&mount_sem);
-       path_release(&user_nd);
-+      intent_release(&old_it);
-       path_release(&old_nd);
- out1:
-+      intent_release(&new_it);
-       path_release(&new_nd);
- out0:
-       unlock_kernel();
-Index: linux-2.4.19-pre1/fs/namei.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/namei.c  2003-11-21 02:41:00.000000000 +0300
-+++ linux-2.4.19-pre1/fs/namei.c       2003-11-21 02:52:01.000000000 +0300
-@@ -94,6 +94,13 @@
-  * XEmacs seems to be relying on it...
-  */
-+void intent_release(struct lookup_intent *it)
-+{
-+      if (it && it->it_op_release)
-+              it->it_op_release(it);
-+
-+}
-+
- /* In order to reduce some races, while at the same time doing additional
-  * checking and hopefully speeding things up, we copy filenames to the
-  * kernel data space before using them..
-@@ -260,10 +267,19 @@
-  * Internal lookup() using the new generic dcache.
-  * SMP-safe
-  */
--static struct dentry * cached_lookup(struct dentry * parent, struct qstr * name, int flags)
-+static struct dentry *cached_lookup(struct dentry *parent, struct qstr *name,
-+                                  int flags, struct lookup_intent *it)
- {
-       struct dentry * dentry = d_lookup(parent, name);
-+      if (dentry && dentry->d_op && dentry->d_op->d_revalidate_it) {
-+              if (!dentry->d_op->d_revalidate_it(dentry, flags, it) &&
-+                  !d_invalidate(dentry)) {
-+                      dput(dentry);
-+                      dentry = NULL;
-+              }
-+              return dentry;
-+      } else
-       if (dentry && dentry->d_op && dentry->d_op->d_revalidate) {
-               if (!dentry->d_op->d_revalidate(dentry, flags) && !d_invalidate(dentry)) {
-                       dput(dentry);
-@@ -281,11 +297,15 @@
-  * make sure that nobody added the entry to the dcache in the meantime..
-  * SMP-safe
-  */
--static struct dentry * real_lookup(struct dentry * parent, struct qstr * name, int flags)
-+static struct dentry *real_lookup(struct dentry *parent, struct qstr *name,
-+                                int flags, struct lookup_intent *it)
- {
-       struct dentry * result;
-       struct inode *dir = parent->d_inode;
-+      int counter = 0;
-+again:
-+      counter++;
-       down(&dir->i_sem);
-       /*
-        * First re-do the cached lookup just in case it was created
-@@ -300,6 +320,9 @@
-               result = ERR_PTR(-ENOMEM);
-               if (dentry) {
-                       lock_kernel();
-+                      if (dir->i_op->lookup_it)
-+                              result = dir->i_op->lookup_it(dir, dentry, it, flags);
-+                      else
-                       result = dir->i_op->lookup(dir, dentry);
-                       unlock_kernel();
-                       if (result)
-@@ -321,6 +344,15 @@
-                       dput(result);
-                       result = ERR_PTR(-ENOENT);
-               }
-+      } else if (result->d_op && result->d_op->d_revalidate_it) {
-+              if (!result->d_op->d_revalidate_it(result, flags, it) &&
-+                  !d_invalidate(result)) {
-+                      dput(result);
-+                      if (counter > 10)
-+                              result = ERR_PTR(-ESTALE);
-+                      if (!IS_ERR(result))
-+                              goto again;
-+              }
-       }
-       return result;
- }
-@@ -332,7 +364,8 @@
-  * Without that kind of total limit, nasty chains of consecutive
-  * symlinks can cause almost arbitrarily long lookups. 
-  */
--static inline int do_follow_link(struct dentry *dentry, struct nameidata *nd)
-+static inline int do_follow_link(struct dentry *dentry, struct nameidata *nd,
-+                               struct lookup_intent *it)
- {
-       int err;
-       if (current->link_count >= 5)
-@@ -346,10 +379,12 @@
-       current->link_count++;
-       current->total_link_count++;
-       UPDATE_ATIME(dentry->d_inode);
-+      nd->intent = it;
-       err = dentry->d_inode->i_op->follow_link(dentry, nd);
-       current->link_count--;
-       return err;
- loop:
-+      intent_release(it);
-       path_release(nd);
-       return -ELOOP;
- }
-@@ -445,7 +480,8 @@
-  *
-  * We expect 'base' to be positive and a directory.
-  */
--int link_path_walk(const char * name, struct nameidata *nd)
-+int link_path_walk_it(const char *name, struct nameidata *nd,
-+                    struct lookup_intent *it)
- {
-       struct dentry *dentry;
-       struct inode *inode;
-@@ -455,7 +491,7 @@
-       while (*name=='/')
-               name++;
-       if (!*name)
--              goto return_base;
-+              goto return_reval;
-       inode = nd->dentry->d_inode;
-       if (current->link_count)
-@@ -518,9 +554,10 @@
-                               break;
-               }
-               /* This does the actual lookups.. */
--              dentry = cached_lookup(nd->dentry, &this, LOOKUP_CONTINUE);
-+              dentry = cached_lookup(nd->dentry, &this, LOOKUP_CONTINUE, NULL);
-               if (!dentry) {
--                      dentry = real_lookup(nd->dentry, &this, LOOKUP_CONTINUE);
-+                      dentry = real_lookup(nd->dentry, &this, LOOKUP_CONTINUE,
-+                                              NULL);
-                       err = PTR_ERR(dentry);
-                       if (IS_ERR(dentry))
-                               break;
-@@ -538,7 +575,7 @@
-                       goto out_dput;
-               if (inode->i_op->follow_link) {
--                      err = do_follow_link(dentry, nd);
-+                      err = do_follow_link(dentry, nd, NULL);
-                       dput(dentry);
-                       if (err)
-                               goto return_err;
-@@ -554,7 +591,7 @@
-                       nd->dentry = dentry;
-               }
-               err = -ENOTDIR; 
--              if (!inode->i_op->lookup)
-+              if (!inode->i_op->lookup && !inode->i_op->lookup_it)
-                       break;
-               continue;
-               /* here ends the main loop */
-@@ -574,16 +611,16 @@
-                               inode = nd->dentry->d_inode;
-                               /* fallthrough */
-                       case 1:
--                              goto return_base;
-+                              goto return_reval;
-               }
-               if (nd->dentry->d_op && nd->dentry->d_op->d_hash) {
-                       err = nd->dentry->d_op->d_hash(nd->dentry, &this);
-                       if (err < 0)
-                               break;
-               }
--              dentry = cached_lookup(nd->dentry, &this, 0);
-+              dentry = cached_lookup(nd->dentry, &this, 0, it);
-               if (!dentry) {
--                      dentry = real_lookup(nd->dentry, &this, 0);
-+                      dentry = real_lookup(nd->dentry, &this, 0, it);
-                       err = PTR_ERR(dentry);
-                       if (IS_ERR(dentry))
-                               break;
-@@ -593,7 +630,7 @@
-               inode = dentry->d_inode;
-               if ((lookup_flags & LOOKUP_FOLLOW)
-                   && inode && inode->i_op && inode->i_op->follow_link) {
--                      err = do_follow_link(dentry, nd);
-+                      err = do_follow_link(dentry, nd, it);
-                       dput(dentry);
-                       if (err)
-                               goto return_err;
-@@ -607,7 +644,8 @@
-                       goto no_inode;
-               if (lookup_flags & LOOKUP_DIRECTORY) {
-                       err = -ENOTDIR; 
--                      if (!inode->i_op || !inode->i_op->lookup)
-+                      if (!inode->i_op ||
-+                          (!inode->i_op->lookup && !inode->i_op->lookup_it))
-                               break;
-               }
-               goto return_base;
-@@ -625,21 +663,66 @@
-                       nd->last_type = LAST_DOT;
-               else if (this.len == 2 && this.name[1] == '.')
-                       nd->last_type = LAST_DOTDOT;
-+return_reval:
-+              /*
-+               * We bypassed the ordinary revalidation routines.
-+               * Check the cached dentry for staleness.
-+               */
-+              dentry = nd->dentry;
-+              if (dentry && dentry->d_op && dentry->d_op->d_revalidate_it) {
-+                      err = -ESTALE;
-+                      if (!dentry->d_op->d_revalidate_it(dentry, 0, it)) {
-+                              struct dentry *new;
-+                              err = permission(dentry->d_parent->d_inode,
-+                                               MAY_EXEC);
-+                              if (err)
-+                                      break;
-+                              new = real_lookup(dentry->d_parent,
-+                                                &dentry->d_name, 0, it);
-+                              if (IS_ERR(new)) {
-+                                      err = PTR_ERR(new);
-+                                      break;
-+                              }
-+                              d_invalidate(dentry);
-+                              dput(dentry);
-+                              nd->dentry = new;
-+                      }
-+              } else
-+              if (dentry && dentry->d_op && dentry->d_op->d_revalidate) {
-+                      err = -ESTALE;
-+                      if (!dentry->d_op->d_revalidate(dentry, 0)) {
-+                              d_invalidate(dentry);
-+                              break;
-+                      }
-+              }
- return_base:
-               return 0;
- out_dput:
-               dput(dentry);
-               break;
-       }
-+      if (err)
-+              intent_release(it);
-       path_release(nd);
- return_err:
-       return err;
- }
-+int link_path_walk(const char * name, struct nameidata *nd)
-+{
-+      return link_path_walk_it(name, nd, NULL);
-+}
-+
-+int path_walk_it(const char * name, struct nameidata *nd, struct lookup_intent *it)
-+{
-+      current->total_link_count = 0;
-+      return link_path_walk_it(name, nd, it);
-+}
-+
- int path_walk(const char * name, struct nameidata *nd)
- {
-       current->total_link_count = 0;
--      return link_path_walk(name, nd);
-+      return link_path_walk_it(name, nd, NULL);
- }
- /* SMP-safe */
-@@ -728,6 +811,7 @@
- {
-       nd->last_type = LAST_ROOT; /* if there are only slashes... */
-       nd->flags = flags;
-+      nd->intent = NULL;
-       if (*name=='/')
-               return walk_init_root(name,nd);
-       read_lock(&current->fs->lock);
-@@ -742,7 +826,8 @@
-  * needs parent already locked. Doesn't follow mounts.
-  * SMP-safe.
-  */
--struct dentry * lookup_hash(struct qstr *name, struct dentry * base)
-+struct dentry * lookup_hash_it(struct qstr *name, struct dentry * base,
-+                             struct lookup_intent *it)
- {
-       struct dentry * dentry;
-       struct inode *inode;
-@@ -765,13 +850,16 @@
-                       goto out;
-       }
--      dentry = cached_lookup(base, name, 0);
-+      dentry = cached_lookup(base, name, 0, it);
-       if (!dentry) {
-               struct dentry *new = d_alloc(base, name);
-               dentry = ERR_PTR(-ENOMEM);
-               if (!new)
-                       goto out;
-               lock_kernel();
-+              if (inode->i_op->lookup_it)
-+                      dentry = inode->i_op->lookup_it(inode, new, it, 0);
-+              else
-               dentry = inode->i_op->lookup(inode, new);
-               unlock_kernel();
-               if (!dentry)
-@@ -783,6 +871,12 @@
-       return dentry;
- }
-+struct dentry * lookup_hash(struct qstr *name, struct dentry * base)
-+{
-+      return lookup_hash_it(name, base, NULL);
-+}
-+
-+
- /* SMP-safe */
- struct dentry * lookup_one_len(const char * name, struct dentry * base, int len)
- {
-@@ -804,7 +898,7 @@
-       }
-       this.hash = end_name_hash(hash);
--      return lookup_hash(&this, base);
-+      return lookup_hash_it(&this, base, NULL);
- access:
-       return ERR_PTR(-EACCES);
- }
-@@ -836,6 +930,23 @@
-       return err;
- }
-+int __user_walk_it(const char *name, unsigned flags, struct nameidata *nd,
-+                 struct lookup_intent *it)
-+{
-+      char *tmp;
-+      int err;
-+
-+      tmp = getname(name);
-+      err = PTR_ERR(tmp);
-+      if (!IS_ERR(tmp)) {
-+              err = 0;
-+              if (path_init(tmp, flags, nd))
-+                      err = path_walk_it(tmp, nd, it);
-+              putname(tmp);
-+      }
-+      return err;
-+}
-+
- /*
-  * It's inline, so penalty for filesystems that don't use sticky bit is
-  * minimal.
-@@ -929,7 +1040,8 @@
-       return retval;
- }
--int vfs_create(struct inode *dir, struct dentry *dentry, int mode)
-+static int vfs_create_it(struct inode *dir, struct dentry *dentry, int mode,
-+                       struct lookup_intent *it)
- {
-       int error;
-@@ -942,12 +1054,15 @@
-               goto exit_lock;
-       error = -EACCES;        /* shouldn't it be ENOSYS? */
--      if (!dir->i_op || !dir->i_op->create)
-+      if (!dir->i_op || (!dir->i_op->create && !dir->i_op->create_it))
-               goto exit_lock;
-       DQUOT_INIT(dir);
-       lock_kernel();
--      error = dir->i_op->create(dir, dentry, mode);
-+      if (dir->i_op->create_it)
-+              error = dir->i_op->create_it(dir, dentry, mode, it);
-+      else
-+              error = dir->i_op->create(dir, dentry, mode);
-       unlock_kernel();
- exit_lock:
-       up(&dir->i_zombie);
-@@ -956,6 +1071,11 @@
-       return error;
- }
-+int vfs_create(struct inode *dir, struct dentry *dentry, int mode)
-+{
-+      return vfs_create_it(dir, dentry, mode, NULL);
-+}
-+
- /*
-  *    open_namei()
-  *
-@@ -970,7 +1090,8 @@
-  * for symlinks (where the permissions are checked later).
-  * SMP-safe
-  */
--int open_namei(const char * pathname, int flag, int mode, struct nameidata *nd)
-+int open_namei_it(const char *pathname, int flag, int mode,
-+                struct nameidata *nd, struct lookup_intent *it)
- {
-       int acc_mode, error = 0;
-       struct inode *inode;
-@@ -980,12 +1101,14 @@
-       acc_mode = ACC_MODE(flag);
-+      if (it)
-+              it->it_flags = flag;
-       /*
-        * The simplest case - just a plain lookup.
-        */
-       if (!(flag & O_CREAT)) {
-               if (path_init(pathname, lookup_flags(flag), nd))
--                      error = path_walk(pathname, nd);
-+                      error = path_walk_it(pathname, nd, it);
-               if (error)
-                       return error;
-               dentry = nd->dentry;
-@@ -995,6 +1118,10 @@
-       /*
-        * Create - we need to know the parent.
-        */
-+      if (it) {
-+              it->it_create_mode = mode;
-+              it->it_op |= IT_CREAT;
-+      }
-       if (path_init(pathname, LOOKUP_PARENT, nd))
-               error = path_walk(pathname, nd);
-       if (error)
-@@ -1011,7 +1138,7 @@
-       dir = nd->dentry;
-       down(&dir->d_inode->i_sem);
--      dentry = lookup_hash(&nd->last, nd->dentry);
-+      dentry = lookup_hash_it(&nd->last, nd->dentry, it);
- do_last:
-       error = PTR_ERR(dentry);
-@@ -1020,10 +1147,11 @@
-               goto exit;
-       }
-+      it->it_create_mode = mode;
-       /* Negative dentry, just create the file */
-       if (!dentry->d_inode) {
--              error = vfs_create(dir->d_inode, dentry,
--                                 mode & ~current->fs->umask);
-+              error = vfs_create_it(dir->d_inode, dentry,
-+                                    mode & ~current->fs->umask, it);
-               up(&dir->d_inode->i_sem);
-               dput(nd->dentry);
-               nd->dentry = dentry;
-@@ -1127,7 +1255,7 @@
-               if (!error) {
-                       DQUOT_INIT(inode);
-                       
--                      error = do_truncate(dentry, 0);
-+                      error = do_truncate(dentry, 0, 1);
-               }
-               put_write_access(inode);
-               if (error)
-@@ -1139,8 +1267,10 @@
-       return 0;
- exit_dput:
-+      intent_release(it);
-       dput(dentry);
- exit:
-+      intent_release(it);
-       path_release(nd);
-       return error;
-@@ -1159,7 +1289,10 @@
-        * are done. Procfs-like symlinks just set LAST_BIND.
-        */
-       UPDATE_ATIME(dentry->d_inode);
-+      nd->intent = it;
-       error = dentry->d_inode->i_op->follow_link(dentry, nd);
-+      if (error)
-+              intent_release(it);
-       dput(dentry);
-       if (error)
-               return error;
-@@ -1181,13 +1314,20 @@
-       }
-       dir = nd->dentry;
-       down(&dir->d_inode->i_sem);
--      dentry = lookup_hash(&nd->last, nd->dentry);
-+      dentry = lookup_hash_it(&nd->last, nd->dentry, it);
-       putname(nd->last.name);
-       goto do_last;
- }
-+int open_namei(const char *pathname, int flag, int mode, struct nameidata *nd)
-+{
-+      return open_namei_it(pathname, flag, mode, nd, NULL);
-+}
-+
-+
- /* SMP-safe */
--static struct dentry *lookup_create(struct nameidata *nd, int is_dir)
-+static struct dentry *lookup_create(struct nameidata *nd, int is_dir,
-+                                  struct lookup_intent *it)
- {
-       struct dentry *dentry;
-@@ -1195,7 +1335,7 @@
-       dentry = ERR_PTR(-EEXIST);
-       if (nd->last_type != LAST_NORM)
-               goto fail;
--      dentry = lookup_hash(&nd->last, nd->dentry);
-+      dentry = lookup_hash_it(&nd->last, nd->dentry, it);
-       if (IS_ERR(dentry))
-               goto fail;
-       if (!is_dir && nd->last.name[nd->last.len] && !dentry->d_inode)
-@@ -1252,7 +1392,16 @@
-               error = path_walk(tmp, &nd);
-       if (error)
-               goto out;
--      dentry = lookup_create(&nd, 0);
-+
-+      if (nd.dentry->d_inode->i_op->mknod_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
-+              error = op->mknod_raw(&nd, mode, dev);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto out2;
-+      }
-+
-+      dentry = lookup_create(&nd, 0, NULL);
-       error = PTR_ERR(dentry);
-       mode &= ~current->fs->umask;
-@@ -1273,6 +1422,7 @@
-               dput(dentry);
-       }
-       up(&nd.dentry->d_inode->i_sem);
-+out2:
-       path_release(&nd);
- out:
-       putname(tmp);
-@@ -1321,7 +1471,14 @@
-                       error = path_walk(tmp, &nd);
-               if (error)
-                       goto out;
--              dentry = lookup_create(&nd, 1);
-+              if (nd.dentry->d_inode->i_op->mkdir_raw) {
-+                      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+                      error = op->mkdir_raw(&nd, mode);
-+                      /* the file system wants to use normal vfs path now */
-+                      if (error != -EOPNOTSUPP)
-+                              goto out2;
-+              }
-+              dentry = lookup_create(&nd, 1, NULL);
-               error = PTR_ERR(dentry);
-               if (!IS_ERR(dentry)) {
-                       error = vfs_mkdir(nd.dentry->d_inode, dentry,
-@@ -1329,6 +1486,7 @@
-                       dput(dentry);
-               }
-               up(&nd.dentry->d_inode->i_sem);
-+out2:
-               path_release(&nd);
- out:
-               putname(tmp);
-@@ -1428,8 +1586,16 @@
-                       error = -EBUSY;
-                       goto exit1;
-       }
-+      if (nd.dentry->d_inode->i_op->rmdir_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
-+
-+              error = op->rmdir_raw(&nd);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto exit1;
-+      }
-       down(&nd.dentry->d_inode->i_sem);
--      dentry = lookup_hash(&nd.last, nd.dentry);
-+      dentry = lookup_hash_it(&nd.last, nd.dentry, NULL);
-       error = PTR_ERR(dentry);
-       if (!IS_ERR(dentry)) {
-               error = vfs_rmdir(nd.dentry->d_inode, dentry);
-@@ -1488,8 +1654,15 @@
-       error = -EISDIR;
-       if (nd.last_type != LAST_NORM)
-               goto exit1;
-+      if (nd.dentry->d_inode->i_op->unlink_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
-+              error = op->unlink_raw(&nd);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto exit1;
-+      }
-       down(&nd.dentry->d_inode->i_sem);
--      dentry = lookup_hash(&nd.last, nd.dentry);
-+      dentry = lookup_hash_it(&nd.last, nd.dentry, NULL);
-       error = PTR_ERR(dentry);
-       if (!IS_ERR(dentry)) {
-               /* Why not before? Because we want correct error value */
-@@ -1557,15 +1730,23 @@
-                       error = path_walk(to, &nd);
-               if (error)
-                       goto out;
--              dentry = lookup_create(&nd, 0);
-+              if (nd.dentry->d_inode->i_op->symlink_raw) {
-+                      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+                      error = op->symlink_raw(&nd, from);
-+                      /* the file system wants to use normal vfs path now */
-+                      if (error != -EOPNOTSUPP)
-+                              goto out2;
-+              }
-+              dentry = lookup_create(&nd, 0, NULL);
-               error = PTR_ERR(dentry);
-               if (!IS_ERR(dentry)) {
-                       error = vfs_symlink(nd.dentry->d_inode, dentry, from);
-                       dput(dentry);
-               }
-               up(&nd.dentry->d_inode->i_sem);
-+      out2:
-               path_release(&nd);
--out:
-+      out:
-               putname(to);
-       }
-       putname(from);
-@@ -1648,7 +1829,14 @@
-               error = -EXDEV;
-               if (old_nd.mnt != nd.mnt)
-                       goto out_release;
--              new_dentry = lookup_create(&nd, 0);
-+              if (nd.dentry->d_inode->i_op->link_raw) {
-+                      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+                      error = op->link_raw(&old_nd, &nd);
-+                      /* the file system wants to use normal vfs path now */
-+                      if (error != -EOPNOTSUPP)
-+                              goto out_release;
-+              }
-+              new_dentry = lookup_create(&nd, 0, NULL);
-               error = PTR_ERR(new_dentry);
-               if (!IS_ERR(new_dentry)) {
-                       error = vfs_link(old_nd.dentry, nd.dentry->d_inode, new_dentry);
-@@ -1694,7 +1882,7 @@
-  *       locking].
-  */
- int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry,
--             struct inode *new_dir, struct dentry *new_dentry)
-+                 struct inode *new_dir, struct dentry *new_dentry)
- {
-       int error;
-       struct inode *target;
-@@ -1775,7 +1963,7 @@
- }
- int vfs_rename_other(struct inode *old_dir, struct dentry *old_dentry,
--             struct inode *new_dir, struct dentry *new_dentry)
-+                   struct inode *new_dir, struct dentry *new_dentry)
- {
-       int error;
-@@ -1866,9 +2054,18 @@
-       if (newnd.last_type != LAST_NORM)
-               goto exit2;
-+      if (old_dir->d_inode->i_op->rename_raw) {
-+              lock_kernel();
-+              error = old_dir->d_inode->i_op->rename_raw(&oldnd, &newnd);
-+              unlock_kernel();
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto exit2;
-+      }
-+
-       double_lock(new_dir, old_dir);
--      old_dentry = lookup_hash(&oldnd.last, old_dir);
-+      old_dentry = lookup_hash_it(&oldnd.last, old_dir, NULL);
-       error = PTR_ERR(old_dentry);
-       if (IS_ERR(old_dentry))
-               goto exit3;
-@@ -1884,16 +2081,16 @@
-               if (newnd.last.name[newnd.last.len])
-                       goto exit4;
-       }
--      new_dentry = lookup_hash(&newnd.last, new_dir);
-+      new_dentry = lookup_hash_it(&newnd.last, new_dir, NULL);
-       error = PTR_ERR(new_dentry);
-       if (IS_ERR(new_dentry))
-               goto exit4;
-+
-       lock_kernel();
-       error = vfs_rename(old_dir->d_inode, old_dentry,
-                                  new_dir->d_inode, new_dentry);
-       unlock_kernel();
--
-       dput(new_dentry);
- exit4:
-       dput(old_dentry);
-@@ -1944,20 +2141,26 @@
- }
- static inline int
--__vfs_follow_link(struct nameidata *nd, const char *link)
-+__vfs_follow_link(struct nameidata *nd, const char *link,
-+                struct lookup_intent *it)
- {
-       int res = 0;
-       char *name;
-       if (IS_ERR(link))
-               goto fail;
-+      if (it == NULL)
-+              it = nd->intent;
-+      else if (it != nd->intent)
-+              printk("it != nd->intent: tell phil@clusterfs.com\n");
-+
-       if (*link == '/') {
-               path_release(nd);
-               if (!walk_init_root(link, nd))
-                       /* weird __emul_prefix() stuff did it */
-                       goto out;
-       }
--      res = link_path_walk(link, nd);
-+      res = link_path_walk_it(link, nd, it);
- out:
-       if (current->link_count || res || nd->last_type!=LAST_NORM)
-               return res;
-@@ -1979,7 +2182,13 @@
- int vfs_follow_link(struct nameidata *nd, const char *link)
- {
--      return __vfs_follow_link(nd, link);
-+      return __vfs_follow_link(nd, link, NULL);
-+}
-+
-+int vfs_follow_link_it(struct nameidata *nd, const char *link,
-+                     struct lookup_intent *it)
-+{
-+      return __vfs_follow_link(nd, link, it);
- }
- /* get the link contents into pagecache */
-@@ -2021,7 +2230,7 @@
- {
-       struct page *page = NULL;
-       char *s = page_getlink(dentry, &page);
--      int res = __vfs_follow_link(nd, s);
-+      int res = __vfs_follow_link(nd, s, NULL);
-       if (page) {
-               kunmap(page);
-               page_cache_release(page);
-Index: linux-2.4.19-pre1/fs/open.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/open.c   2003-11-21 02:41:00.000000000 +0300
-+++ linux-2.4.19-pre1/fs/open.c        2003-11-21 02:51:38.000000000 +0300
-@@ -19,6 +19,8 @@
- #include <asm/uaccess.h>
- #define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m))
-+extern int path_walk_it(const char *name, struct nameidata *nd,
-+                      struct lookup_intent *it);
- int vfs_statfs(struct super_block *sb, struct statfs *buf)
- {
-@@ -71,9 +73,10 @@
-       return error;
- }
--int do_truncate(struct dentry *dentry, loff_t length)
-+int do_truncate(struct dentry *dentry, loff_t length, int called_from_open)
- {
-       struct inode *inode = dentry->d_inode;
-+      struct inode_operations *op = dentry->d_inode->i_op;
-       int error;
-       struct iattr newattrs;
-@@ -84,7 +87,13 @@
-       down(&inode->i_sem);
-       newattrs.ia_size = length;
-       newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
--      error = notify_change(dentry, &newattrs);
-+      if (called_from_open)
-+              newattrs.ia_valid |= ATTR_FROM_OPEN;
-+      if (op->setattr_raw) {
-+              newattrs.ia_valid |= ATTR_RAW;
-+              error = op->setattr_raw(inode, &newattrs);
-+      } else
-+              error = notify_change(dentry, &newattrs);
-       up(&inode->i_sem);
-       return error;
- }
-@@ -94,12 +103,13 @@
-       struct nameidata nd;
-       struct inode * inode;
-       int error;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       error = -EINVAL;
-       if (length < 0) /* sorry, but loff_t says... */
-               goto out;
--      error = user_path_walk(path, &nd);
-+      error = user_path_walk_it(path, &nd, &it);
-       if (error)
-               goto out;
-       inode = nd.dentry->d_inode;
-@@ -139,11 +149,13 @@
-       error = locks_verify_truncate(inode, NULL, length);
-       if (!error) {
-               DQUOT_INIT(inode);
--              error = do_truncate(nd.dentry, length);
-+              intent_release(&it);
-+              error = do_truncate(nd.dentry, length, 0);
-       }
-       put_write_access(inode);
- dput_and_out:
-+      intent_release(&it);
-       path_release(&nd);
- out:
-       return error;
-@@ -191,7 +203,7 @@
-       error = locks_verify_truncate(inode, file, length);
-       if (!error)
--              error = do_truncate(dentry, length);
-+              error = do_truncate(dentry, length, 0);
- out_putf:
-       fput(file);
- out:
-@@ -236,11 +248,13 @@
-       struct inode * inode;
-       struct iattr newattrs;
--      error = user_path_walk(filename, &nd);
-+      error = user_path_walk_it(filename, &nd, NULL);
-       if (error)
-               goto out;
-       inode = nd.dentry->d_inode;
-+      /* this is safe without a Lustre lock because it only depends
-+         on the super block */
-       error = -EROFS;
-       if (IS_RDONLY(inode))
-               goto dput_and_out;
-@@ -255,11 +269,25 @@
-                       goto dput_and_out;
-               newattrs.ia_valid |= ATTR_ATIME_SET | ATTR_MTIME_SET;
--      } else {
-+      }
-+
-+      if (inode->i_op->setattr_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
-+
-+              newattrs.ia_valid |= ATTR_RAW;
-+              error = op->setattr_raw(inode, &newattrs);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto dput_and_out;
-+      }
-+
-+      error = -EPERM;
-+      if (!times) {
-               if (current->fsuid != inode->i_uid &&
-                   (error = permission(inode,MAY_WRITE)) != 0)
-                       goto dput_and_out;
-       }
-+
-       error = notify_change(nd.dentry, &newattrs);
- dput_and_out:
-       path_release(&nd);
-@@ -280,12 +308,14 @@
-       struct inode * inode;
-       struct iattr newattrs;
--      error = user_path_walk(filename, &nd);
-+      error = user_path_walk_it(filename, &nd, NULL);
-       if (error)
-               goto out;
-       inode = nd.dentry->d_inode;
-+      /* this is safe without a Lustre lock because it only depends
-+         on the super block */
-       error = -EROFS;
-       if (IS_RDONLY(inode))
-               goto dput_and_out;
-@@ -300,7 +330,20 @@
-               newattrs.ia_atime = times[0].tv_sec;
-               newattrs.ia_mtime = times[1].tv_sec;
-               newattrs.ia_valid |= ATTR_ATIME_SET | ATTR_MTIME_SET;
--      } else {
-+      }
-+
-+      if (inode->i_op->setattr_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
-+
-+              newattrs.ia_valid |= ATTR_RAW;
-+              error = op->setattr_raw(inode, &newattrs);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto dput_and_out;
-+      }
-+
-+      error = -EPERM;
-+      if (!utimes) {
-               if ((error = permission(inode,MAY_WRITE)) != 0)
-                       goto dput_and_out;
-       }
-@@ -322,6 +365,7 @@
-       int old_fsuid, old_fsgid;
-       kernel_cap_t old_cap;
-       int res;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       if (mode & ~S_IRWXO)    /* where's F_OK, X_OK, W_OK, R_OK? */
-               return -EINVAL;
-@@ -339,13 +383,14 @@
-       else
-               current->cap_effective = current->cap_permitted;
--      res = user_path_walk(filename, &nd);
-+      res = user_path_walk_it(filename, &nd, &it);
-       if (!res) {
-               res = permission(nd.dentry->d_inode, mode);
-               /* SuS v2 requires we report a read only fs too */
-               if(!res && (mode & S_IWOTH) && IS_RDONLY(nd.dentry->d_inode)
-                  && !special_file(nd.dentry->d_inode->i_mode))
-                       res = -EROFS;
-+              intent_release(&it);
-               path_release(&nd);
-       }
-@@ -361,6 +406,7 @@
-       int error;
-       struct nameidata nd;
-       char *name;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       name = getname(filename);
-       error = PTR_ERR(name);
-@@ -369,7 +415,7 @@
-       error = 0;
-       if (path_init(name,LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY,&nd))
--              error = path_walk(name, &nd);
-+              error = path_walk_it(name, &nd, &it);
-       putname(name);
-       if (error)
-               goto out;
-@@ -381,6 +427,7 @@
-       set_fs_pwd(current->fs, nd.mnt, nd.dentry);
- dput_and_out:
-+      intent_release(&it);
-       path_release(&nd);
- out:
-       return error;
-@@ -421,6 +468,7 @@
-       int error;
-       struct nameidata nd;
-       char *name;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       name = getname(filename);
-       error = PTR_ERR(name);
-@@ -429,7 +477,7 @@
-       path_init(name, LOOKUP_POSITIVE | LOOKUP_FOLLOW |
-                     LOOKUP_DIRECTORY | LOOKUP_NOALT, &nd);
--      error = path_walk(name, &nd);   
-+      error = path_walk_it(name, &nd, &it);
-       putname(name);
-       if (error)
-               goto out;
-@@ -446,39 +494,56 @@
-       set_fs_altroot();
-       error = 0;
- dput_and_out:
-+      intent_release(&it);
-       path_release(&nd);
- out:
-       return error;
- }
--asmlinkage long sys_fchmod(unsigned int fd, mode_t mode)
-+int chmod_common(struct dentry *dentry, mode_t mode)
- {
--      struct inode * inode;
--      struct dentry * dentry;
--      struct file * file;
--      int err = -EBADF;
-+      struct inode *inode = dentry->d_inode;
-       struct iattr newattrs;
-+      int err = -EROFS;
--      file = fget(fd);
--      if (!file)
-+      if (IS_RDONLY(inode))
-               goto out;
--      dentry = file->f_dentry;
--      inode = dentry->d_inode;
-+      if (inode->i_op->setattr_raw) {
-+              newattrs.ia_mode = mode;
-+              newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
-+              newattrs.ia_valid |= ATTR_RAW;
-+              err = inode->i_op->setattr_raw(inode, &newattrs);
-+              /* the file system wants to use normal vfs path now */
-+              if (err != -EOPNOTSUPP)
-+                      goto out;
-+      }
--      err = -EROFS;
--      if (IS_RDONLY(inode))
--              goto out_putf;
-       err = -EPERM;
-       if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
--              goto out_putf;
-+              goto out;
-+
-       if (mode == (mode_t) -1)
-               mode = inode->i_mode;
-       newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
-       newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
-       err = notify_change(dentry, &newattrs);
--out_putf:
-+out:
-+      return err;
-+}
-+
-+asmlinkage long sys_fchmod(unsigned int fd, mode_t mode)
-+{
-+      struct file * file;
-+      int err = -EBADF;
-+
-+      file = fget(fd);
-+      if (!file)
-+              goto out;
-+
-+      err = chmod_common(file->f_dentry, mode);
-+
-       fput(file);
- out:
-       return err;
-@@ -487,30 +552,14 @@
- asmlinkage long sys_chmod(const char * filename, mode_t mode)
- {
-       struct nameidata nd;
--      struct inode * inode;
-       int error;
--      struct iattr newattrs;
-       error = user_path_walk(filename, &nd);
-       if (error)
-               goto out;
--      inode = nd.dentry->d_inode;
--
--      error = -EROFS;
--      if (IS_RDONLY(inode))
--              goto dput_and_out;
--      error = -EPERM;
--      if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
--              goto dput_and_out;
-+      error = chmod_common(nd.dentry, mode);
--      if (mode == (mode_t) -1)
--              mode = inode->i_mode;
--      newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
--      newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
--      error = notify_change(nd.dentry, &newattrs);
--
--dput_and_out:
-       path_release(&nd);
- out:
-       return error;
-@@ -530,6 +579,20 @@
-       error = -EROFS;
-       if (IS_RDONLY(inode))
-               goto out;
-+
-+      if (inode->i_op->setattr_raw) {
-+              struct inode_operations *op = dentry->d_inode->i_op;
-+
-+              newattrs.ia_uid = user;
-+              newattrs.ia_gid = group;
-+              newattrs.ia_valid = ATTR_UID | ATTR_GID | ATTR_CTIME;
-+              newattrs.ia_valid |= ATTR_RAW;
-+              error = op->setattr_raw(inode, &newattrs);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      return error;
-+      }
-+
-       error = -EPERM;
-       if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
-               goto out;
-@@ -634,6 +697,7 @@
- {
-       int namei_flags, error;
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_OPEN };
-       namei_flags = flags;
-       if ((namei_flags+1) & O_ACCMODE)
-@@ -641,14 +705,15 @@
-       if (namei_flags & O_TRUNC)
-               namei_flags |= 2;
--      error = open_namei(filename, namei_flags, mode, &nd);
--      if (!error)
--              return dentry_open(nd.dentry, nd.mnt, flags);
-+      error = open_namei_it(filename, namei_flags, mode, &nd, &it);
-+      if (error)
-+              return ERR_PTR(error);
--      return ERR_PTR(error);
-+      return dentry_open_it(nd.dentry, nd.mnt, flags, &it);
- }
--struct file *dentry_open(struct dentry *dentry, struct vfsmount *mnt, int flags)
-+struct file *dentry_open_it(struct dentry *dentry, struct vfsmount *mnt,
-+                          int flags, struct lookup_intent *it)
- {
-       struct file * f;
-       struct inode *inode;
-@@ -685,12 +750,15 @@
-       }
-       if (f->f_op && f->f_op->open) {
-+              f->f_it = it;
-               error = f->f_op->open(inode,f);
-+              f->f_it = NULL;
-               if (error)
-                       goto cleanup_all;
-       }
-       f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC);
-+      intent_release(it);
-       return f;
- cleanup_all:
-@@ -705,11 +773,17 @@
- cleanup_file:
-       put_filp(f);
- cleanup_dentry:
-+      intent_release(it);
-       dput(dentry);
-       mntput(mnt);
-       return ERR_PTR(error);
- }
-+struct file *dentry_open(struct dentry *dentry, struct vfsmount *mnt, int flags)
-+{
-+      return dentry_open_it(dentry, mnt, flags, NULL);
-+}
-+
- /*
-  * Find an empty file descriptor entry, and mark it busy.
-  */
-Index: linux-2.4.19-pre1/fs/stat.c
-===================================================================
---- linux-2.4.19-pre1.orig/fs/stat.c   2003-11-21 02:41:00.000000000 +0300
-+++ linux-2.4.19-pre1/fs/stat.c        2003-11-21 02:51:38.000000000 +0300
-@@ -17,10 +17,14 @@
-  * Revalidate the inode. This is required for proper NFS attribute caching.
-  */
- static __inline__ int
--do_revalidate(struct dentry *dentry)
-+do_revalidate(struct dentry *dentry, struct lookup_intent *it)
- {
-       struct inode * inode = dentry->d_inode;
--      if (inode->i_op && inode->i_op->revalidate)
-+      if (!inode)
-+              return -ENOENT;
-+      if (inode->i_op && inode->i_op->revalidate_it)
-+              return inode->i_op->revalidate_it(dentry, it);
-+      else if (inode->i_op && inode->i_op->revalidate)
-               return inode->i_op->revalidate(dentry);
-       return 0;
- }
-@@ -135,13 +139,15 @@
- asmlinkage long sys_stat(char * filename, struct __old_kernel_stat * statbuf)
- {
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       int error;
--      error = user_path_walk(filename, &nd);
-+      error = user_path_walk_it(filename, &nd, &it);
-       if (!error) {
--              error = do_revalidate(nd.dentry);
-+              error = do_revalidate(nd.dentry, &it);
-               if (!error)
-                       error = cp_old_stat(nd.dentry->d_inode, statbuf);
-+              intent_release(&it);
-               path_release(&nd);
-       }
-       return error;
-@@ -151,13 +157,15 @@
- asmlinkage long sys_newstat(char * filename, struct stat * statbuf)
- {
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       int error;
--      error = user_path_walk(filename, &nd);
-+      error = user_path_walk_it(filename, &nd, &it);
-       if (!error) {
--              error = do_revalidate(nd.dentry);
-+              error = do_revalidate(nd.dentry, &it);
-               if (!error)
-                       error = cp_new_stat(nd.dentry->d_inode, statbuf);
-+              intent_release(&it);
-               path_release(&nd);
-       }
-       return error;
-@@ -172,13 +180,15 @@
- asmlinkage long sys_lstat(char * filename, struct __old_kernel_stat * statbuf)
- {
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       int error;
--      error = user_path_walk_link(filename, &nd);
-+      error = user_path_walk_link_it(filename, &nd, &it);
-       if (!error) {
--              error = do_revalidate(nd.dentry);
-+              error = do_revalidate(nd.dentry, &it);
-               if (!error)
-                       error = cp_old_stat(nd.dentry->d_inode, statbuf);
-+              intent_release(&it);
-               path_release(&nd);
-       }
-       return error;
-@@ -189,13 +199,15 @@
- asmlinkage long sys_newlstat(char * filename, struct stat * statbuf)
- {
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       int error;
--      error = user_path_walk_link(filename, &nd);
-+      error = user_path_walk_link_it(filename, &nd, &it);
-       if (!error) {
--              error = do_revalidate(nd.dentry);
-+              error = do_revalidate(nd.dentry, &it);
-               if (!error)
-                       error = cp_new_stat(nd.dentry->d_inode, statbuf);
-+              intent_release(&it);
-               path_release(&nd);
-       }
-       return error;
-@@ -216,7 +228,7 @@
-       if (f) {
-               struct dentry * dentry = f->f_dentry;
--              err = do_revalidate(dentry);
-+              err = do_revalidate(dentry, NULL);
-               if (!err)
-                       err = cp_old_stat(dentry->d_inode, statbuf);
-               fput(f);
-@@ -235,7 +247,7 @@
-       if (f) {
-               struct dentry * dentry = f->f_dentry;
--              err = do_revalidate(dentry);
-+              err = do_revalidate(dentry, NULL);
-               if (!err)
-                       err = cp_new_stat(dentry->d_inode, statbuf);
-               fput(f);
-@@ -257,7 +269,7 @@
-               error = -EINVAL;
-               if (inode->i_op && inode->i_op->readlink &&
--                  !(error = do_revalidate(nd.dentry))) {
-+                  !(error = do_revalidate(nd.dentry, NULL))) {
-                       UPDATE_ATIME(inode);
-                       error = inode->i_op->readlink(nd.dentry, buf, bufsiz);
-               }
-@@ -333,12 +345,14 @@
- {
-       struct nameidata nd;
-       int error;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
--      error = user_path_walk(filename, &nd);
-+      error = user_path_walk_it(filename, &nd, &it);
-       if (!error) {
--              error = do_revalidate(nd.dentry);
-+              error = do_revalidate(nd.dentry, &it);
-               if (!error)
-                       error = cp_new_stat64(nd.dentry->d_inode, statbuf);
-+              intent_release(&it);
-               path_release(&nd);
-       }
-       return error;
-@@ -348,12 +362,14 @@
- {
-       struct nameidata nd;
-       int error;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
--      error = user_path_walk_link(filename, &nd);
-+      error = user_path_walk_link_it(filename, &nd, &it);
-       if (!error) {
--              error = do_revalidate(nd.dentry);
-+              error = do_revalidate(nd.dentry, &it);
-               if (!error)
-                       error = cp_new_stat64(nd.dentry->d_inode, statbuf);
-+              intent_release(&it);
-               path_release(&nd);
-       }
-       return error;
-@@ -368,7 +384,7 @@
-       if (f) {
-               struct dentry * dentry = f->f_dentry;
--              err = do_revalidate(dentry);
-+              err = do_revalidate(dentry, NULL);
-               if (!err)
-                       err = cp_new_stat64(dentry->d_inode, statbuf);
-               fput(f);
-Index: linux-2.4.19-pre1/include/linux/dcache.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/dcache.h      2003-11-21 02:41:00.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/dcache.h   2003-11-21 02:51:38.000000000 +0300
-@@ -5,6 +5,51 @@
- #include <asm/atomic.h>
- #include <linux/mount.h>
-+#include <linux/string.h>
-+
-+#define IT_OPEN     0x0001
-+#define IT_CREAT    0x0002
-+#define IT_READDIR  0x0004
-+#define IT_GETATTR  0x0008
-+#define IT_LOOKUP   0x0010
-+#define IT_UNLINK   0x0020
-+#define IT_GETXATTR 0x0040
-+#define IT_EXEC     0x0080
-+#define IT_PIN      0x0100
-+
-+#define IT_FL_LOCKED   0x0001
-+#define IT_FL_FOLLOWED 0x0002 /* set by vfs_follow_link */
-+
-+#define INTENT_MAGIC 0x19620323
-+
-+
-+struct lustre_intent_data {
-+      int       it_disposition;
-+      int       it_status;
-+      __u64     it_lock_handle;
-+      void     *it_data;
-+      int       it_lock_mode;
-+      int it_int_flags;
-+};
-+struct lookup_intent {
-+      int     it_magic;
-+      void    (*it_op_release)(struct lookup_intent *);
-+      int     it_op;
-+      int     it_flags;
-+      int     it_create_mode;
-+      union {
-+              struct lustre_intent_data lustre;
-+      } d;
-+};
-+
-+static inline void intent_init(struct lookup_intent *it, int op, int flags)
-+{
-+      memset(it, 0, sizeof(*it));
-+      it->it_magic = INTENT_MAGIC;
-+      it->it_op = op;
-+      it->it_flags = flags;
-+}
-+
- /*
-  * linux/include/linux/dcache.h
-@@ -90,8 +135,22 @@
-       int (*d_delete)(struct dentry *);
-       void (*d_release)(struct dentry *);
-       void (*d_iput)(struct dentry *, struct inode *);
-+      int (*d_revalidate_it)(struct dentry *, int, struct lookup_intent *);
-+      void (*d_pin)(struct dentry *, struct vfsmount * , int);
-+      void (*d_unpin)(struct dentry *, struct vfsmount *, int);
- };
-+#define PIN(de,mnt,flag)  if (de && de->d_op && de->d_op->d_pin) \
-+                              de->d_op->d_pin(de, mnt, flag);
-+#define UNPIN(de,mnt,flag)  if (de && de->d_op && de->d_op->d_unpin) \
-+                              de->d_op->d_unpin(de, mnt, flag);
-+
-+
-+/* defined in fs/namei.c */
-+extern void intent_release(struct lookup_intent *it);
-+/* defined in fs/dcache.c */
-+extern void __d_rehash(struct dentry * entry, int lock);
-+
- /* the dentry parameter passed to d_hash and d_compare is the parent
-  * directory of the entries to be compared. It is used in case these
-  * functions need any directory specific information for determining
-@@ -123,6 +182,7 @@
-                                        * s_nfsd_free_path semaphore will be down
-                                        */
- #define DCACHE_REFERENCED     0x0008  /* Recently used, don't discard. */
-+#define DCACHE_LUSTRE_INVALID 0x0010  /* Lustre invalidated */
- extern spinlock_t dcache_lock;
-Index: linux-2.4.19-pre1/include/linux/fs.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/fs.h  2003-11-21 02:51:37.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/fs.h       2003-11-21 02:51:38.000000000 +0300
-@@ -73,6 +73,7 @@
- #define FMODE_READ 1
- #define FMODE_WRITE 2
-+#define FMODE_EXEC 4
- #define READ 0
- #define WRITE 1
-@@ -332,6 +333,9 @@
- #define ATTR_MTIME_SET        256
- #define ATTR_FORCE    512     /* Not a change, but a change it */
- #define ATTR_ATTR_FLAG        1024
-+#define ATTR_RAW      0x0800  /* file system, not vfs will massage attrs */
-+#define ATTR_FROM_OPEN        0x1000  /* called from open path, ie O_TRUNC */
-+#define ATTR_CTIME_SET 0x2000
- /*
-  * This is the Inode Attributes structure, used for notify_change().  It
-@@ -465,6 +469,7 @@
-       struct pipe_inode_info  *i_pipe;
-       struct block_device     *i_bdev;
-       struct char_device      *i_cdev;
-+      void                    *i_filterdata;
-       unsigned long           i_dnotify_mask; /* Directory notify events */
-       struct dnotify_struct   *i_dnotify; /* for directory notifications */
-@@ -534,6 +539,7 @@
-       /* needed for tty driver, and maybe others */
-       void                    *private_data;
-+      struct lookup_intent    *f_it;
-       /* preallocated helper kiobuf to speedup O_DIRECT */
-       struct kiobuf           *f_iobuf;
-@@ -644,6 +650,7 @@
-       struct qstr last;
-       unsigned int flags;
-       int last_type;
-+      struct lookup_intent *intent;
- };
- #define DQUOT_USR_ENABLED     0x01            /* User diskquotas enabled */
-@@ -777,7 +784,8 @@
- extern int vfs_link(struct dentry *, struct inode *, struct dentry *);
- extern int vfs_rmdir(struct inode *, struct dentry *);
- extern int vfs_unlink(struct inode *, struct dentry *);
--extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);
-+int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
-+             struct inode *new_dir, struct dentry *new_dentry);
- /*
-  * File types
-@@ -837,21 +845,32 @@
- struct inode_operations {
-       int (*create) (struct inode *,struct dentry *,int);
-+      int (*create_it) (struct inode *,struct dentry *,int, struct lookup_intent *);
-       struct dentry * (*lookup) (struct inode *,struct dentry *);
-+      struct dentry * (*lookup_it) (struct inode *,struct dentry *, struct lookup_intent *, int flags);
-       int (*link) (struct dentry *,struct inode *,struct dentry *);
-+      int (*link_raw) (struct nameidata *,struct nameidata *);
-       int (*unlink) (struct inode *,struct dentry *);
-+      int (*unlink_raw) (struct nameidata *);
-       int (*symlink) (struct inode *,struct dentry *,const char *);
-+      int (*symlink_raw) (struct nameidata *,const char *);
-       int (*mkdir) (struct inode *,struct dentry *,int);
-+      int (*mkdir_raw) (struct nameidata *,int);
-       int (*rmdir) (struct inode *,struct dentry *);
-+      int (*rmdir_raw) (struct nameidata *);
-       int (*mknod) (struct inode *,struct dentry *,int,int);
-+      int (*mknod_raw) (struct nameidata *,int,dev_t);
-       int (*rename) (struct inode *, struct dentry *,
-                       struct inode *, struct dentry *);
-+      int (*rename_raw) (struct nameidata *, struct nameidata *);
-       int (*readlink) (struct dentry *, char *,int);
-       int (*follow_link) (struct dentry *, struct nameidata *);
-       void (*truncate) (struct inode *);
-       int (*permission) (struct inode *, int);
-       int (*revalidate) (struct dentry *);
-+      int (*revalidate_it) (struct dentry *, struct lookup_intent *);
-       int (*setattr) (struct dentry *, struct iattr *);
-+      int (*setattr_raw) (struct inode *, struct iattr *);
-       int (*getattr) (struct dentry *, struct iattr *);
- };
-@@ -1049,10 +1068,14 @@
- asmlinkage long sys_open(const char *, int, int);
- asmlinkage long sys_close(unsigned int);      /* yes, it's really unsigned */
--extern int do_truncate(struct dentry *, loff_t start);
-+extern int do_truncate(struct dentry *, loff_t start, int called_from_open);
- extern struct file *filp_open(const char *, int, int);
- extern struct file * dentry_open(struct dentry *, struct vfsmount *, int);
-+extern int open_namei_it(const char *filename, int namei_flags, int mode,
-+                       struct nameidata *nd, struct lookup_intent *it);
-+extern struct file *dentry_open_it(struct dentry *dentry, struct vfsmount *mnt,
-+                          int flags, struct lookup_intent *it);
- extern int filp_close(struct file *, fl_owner_t id);
- extern char * getname(const char *);
-@@ -1306,6 +1329,7 @@
- extern loff_t default_llseek(struct file *file, loff_t offset, int origin);
- extern int FASTCALL(__user_walk(const char *, unsigned, struct nameidata *));
-+extern int FASTCALL(__user_walk_it(const char *, unsigned, struct nameidata *, struct lookup_intent *it));
- extern int FASTCALL(path_init(const char *, unsigned, struct nameidata *));
- extern int FASTCALL(path_walk(const char *, struct nameidata *));
- extern int FASTCALL(link_path_walk(const char *, struct nameidata *));
-@@ -1316,6 +1340,8 @@
- extern struct dentry * lookup_hash(struct qstr *, struct dentry *);
- #define user_path_walk(name,nd)        __user_walk(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, nd)
- #define user_path_walk_link(name,nd) __user_walk(name, LOOKUP_POSITIVE, nd)
-+#define user_path_walk_it(name,nd,it)  __user_walk_it(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, nd, it)
-+#define user_path_walk_link_it(name,nd,it) __user_walk_it(name, LOOKUP_POSITIVE, nd, it)
- extern void iput(struct inode *);
- extern void force_delete(struct inode *);
-@@ -1423,6 +1449,8 @@
- extern int vfs_readlink(struct dentry *, char *, int, const char *);
- extern int vfs_follow_link(struct nameidata *, const char *);
-+extern int vfs_follow_link_it(struct nameidata *, const char *,
-+                            struct lookup_intent *it);
- extern int page_readlink(struct dentry *, char *, int);
- extern int page_follow_link(struct dentry *, struct nameidata *);
- extern struct inode_operations page_symlink_inode_operations;
-Index: linux-2.4.19-pre1/include/linux/fs_struct.h
-===================================================================
---- linux-2.4.19-pre1.orig/include/linux/fs_struct.h   2003-11-21 02:41:00.000000000 +0300
-+++ linux-2.4.19-pre1/include/linux/fs_struct.h        2003-11-21 02:51:38.000000000 +0300
-@@ -34,10 +34,12 @@
-       write_lock(&fs->lock);
-       old_root = fs->root;
-       old_rootmnt = fs->rootmnt;
-+      PIN(dentry, mnt, 1);
-       fs->rootmnt = mntget(mnt);
-       fs->root = dget(dentry);
-       write_unlock(&fs->lock);
-       if (old_root) {
-+              UNPIN(old_root, old_rootmnt, 1);
-               dput(old_root);
-               mntput(old_rootmnt);
-       }
-@@ -57,10 +59,12 @@
-       write_lock(&fs->lock);
-       old_pwd = fs->pwd;
-       old_pwdmnt = fs->pwdmnt;
-+      PIN(dentry, mnt, 0);
-       fs->pwdmnt = mntget(mnt);
-       fs->pwd = dget(dentry);
-       write_unlock(&fs->lock);
-       if (old_pwd) {
-+              UNPIN(old_pwd, old_pwdmnt, 0);
-               dput(old_pwd);
-               mntput(old_pwdmnt);
-       }
-Index: linux-2.4.19-pre1/kernel/ksyms.c
-===================================================================
---- linux-2.4.19-pre1.orig/kernel/ksyms.c      2003-11-21 02:51:37.000000000 +0300
-+++ linux-2.4.19-pre1/kernel/ksyms.c   2003-11-21 02:51:38.000000000 +0300
-@@ -260,6 +260,7 @@
- EXPORT_SYMBOL(set_page_dirty);
- EXPORT_SYMBOL(vfs_readlink);
- EXPORT_SYMBOL(vfs_follow_link);
-+EXPORT_SYMBOL(vfs_follow_link_it);
- EXPORT_SYMBOL(page_readlink);
- EXPORT_SYMBOL(page_follow_link);
- EXPORT_SYMBOL(page_symlink_inode_operations);
-Index: linux-2.4.19-pre1/kernel/fork.c
-===================================================================
---- linux-2.4.19-pre1.orig/kernel/fork.c       2003-11-21 02:41:00.000000000 +0300
-+++ linux-2.4.19-pre1/kernel/fork.c    2003-11-21 02:51:38.000000000 +0300
-@@ -372,10 +372,13 @@
-               fs->umask = old->umask;
-               read_lock(&old->lock);
-               fs->rootmnt = mntget(old->rootmnt);
-+              PIN(old->pwd, old->pwdmnt, 0);
-+              PIN(old->root, old->rootmnt, 1);
-               fs->root = dget(old->root);
-               fs->pwdmnt = mntget(old->pwdmnt);
-               fs->pwd = dget(old->pwd);
-               if (old->altroot) {
-+                      PIN(old->altroot, old->altrootmnt, 1);
-                       fs->altrootmnt = mntget(old->altrootmnt);
-                       fs->altroot = dget(old->altroot);
-               } else {
-Index: linux-2.4.19-pre1/kernel/exit.c
-===================================================================
---- linux-2.4.19-pre1.orig/kernel/exit.c       2003-11-21 02:41:00.000000000 +0300
-+++ linux-2.4.19-pre1/kernel/exit.c    2003-11-21 02:51:38.000000000 +0300
-@@ -245,11 +245,14 @@
- {
-       /* No need to hold fs->lock if we are killing it */
-       if (atomic_dec_and_test(&fs->count)) {
-+              UNPIN(fs->pwd, fs->pwdmnt, 0);
-+              UNPIN(fs->root, fs->rootmnt, 1);
-               dput(fs->root);
-               mntput(fs->rootmnt);
-               dput(fs->pwd);
-               mntput(fs->pwdmnt);
-               if (fs->altroot) {
-+                      UNPIN(fs->altroot, fs->altrootmnt, 1);
-                       dput(fs->altroot);
-                       mntput(fs->altrootmnt);
-               }
index 8c3a879..6778eec 100644 (file)
  kernel/ksyms.c            |    1 
  13 files changed, 591 insertions(+), 133 deletions(-)
 
+Index: linux/fs/dcache.c
+===================================================================
+--- linux.orig/fs/dcache.c     Thu Nov 28 18:53:15 2002
++++ linux/fs/dcache.c  Wed Mar 17 13:11:25 2004
+@@ -181,6 +181,13 @@
+               spin_unlock(&dcache_lock);
+               return 0;
+       }
++
++      /* network invalidation by Lustre */
++      if (dentry->d_flags & DCACHE_LUSTRE_INVALID) {
++              spin_unlock(&dcache_lock);
++              return 0;
++      }
++
+       /*
+        * Check whether to do a partial shrink_dcache
+        * to get rid of unused child entries.
+@@ -830,13 +837,19 @@
+  * Adds a dentry to the hash according to its name.
+  */
+  
+-void d_rehash(struct dentry * entry)
++void __d_rehash(struct dentry * entry, int lock)
+ {
+       struct list_head *list = d_hash(entry->d_parent, entry->d_name.hash);
+       if (!list_empty(&entry->d_hash)) BUG();
+-      spin_lock(&dcache_lock);
++      if (lock) spin_lock(&dcache_lock);
+       list_add(&entry->d_hash, list);
+-      spin_unlock(&dcache_lock);
++      if (lock) spin_unlock(&dcache_lock);
++}
++EXPORT_SYMBOL(__d_rehash);
++
++void d_rehash(struct dentry * entry)
++{
++      __d_rehash(entry, 1);
+ }
+ #define do_switch(x,y) do { \
 Index: linux/fs/exec.c
 ===================================================================
 --- linux.orig/fs/exec.c       Wed Mar 17 13:00:38 2004
@@ -78,164 +119,6 @@ Index: linux/fs/exec.c
                goto close_fail;
  
        retval = binfmt->core_dump(signr, regs, file);
-Index: linux/fs/dcache.c
-===================================================================
---- linux.orig/fs/dcache.c     Thu Nov 28 18:53:15 2002
-+++ linux/fs/dcache.c  Wed Mar 17 13:11:25 2004
-@@ -181,6 +181,13 @@
-               spin_unlock(&dcache_lock);
-               return 0;
-       }
-+
-+      /* network invalidation by Lustre */
-+      if (dentry->d_flags & DCACHE_LUSTRE_INVALID) {
-+              spin_unlock(&dcache_lock);
-+              return 0;
-+      }
-+
-       /*
-        * Check whether to do a partial shrink_dcache
-        * to get rid of unused child entries.
-@@ -830,13 +837,19 @@
-  * Adds a dentry to the hash according to its name.
-  */
-  
--void d_rehash(struct dentry * entry)
-+void __d_rehash(struct dentry * entry, int lock)
- {
-       struct list_head *list = d_hash(entry->d_parent, entry->d_name.hash);
-       if (!list_empty(&entry->d_hash)) BUG();
--      spin_lock(&dcache_lock);
-+      if (lock) spin_lock(&dcache_lock);
-       list_add(&entry->d_hash, list);
--      spin_unlock(&dcache_lock);
-+      if (lock) spin_unlock(&dcache_lock);
-+}
-+EXPORT_SYMBOL(__d_rehash);
-+
-+void d_rehash(struct dentry * entry)
-+{
-+      __d_rehash(entry, 1);
- }
- #define do_switch(x,y) do { \
-Index: linux/fs/namespace.c
-===================================================================
---- linux.orig/fs/namespace.c  Thu Nov 28 18:53:15 2002
-+++ linux/fs/namespace.c       Wed Mar 17 13:11:25 2004
-@@ -99,6 +99,7 @@
- {
-       old_nd->dentry = mnt->mnt_mountpoint;
-       old_nd->mnt = mnt->mnt_parent;
-+      UNPIN(old_nd->dentry, old_nd->mnt, 1);
-       mnt->mnt_parent = mnt;
-       mnt->mnt_mountpoint = mnt->mnt_root;
-       list_del_init(&mnt->mnt_child);
-@@ -110,6 +111,7 @@
- {
-       mnt->mnt_parent = mntget(nd->mnt);
-       mnt->mnt_mountpoint = dget(nd->dentry);
-+      PIN(nd->dentry, nd->mnt, 1);
-       list_add(&mnt->mnt_hash, mount_hashtable+hash(nd->mnt, nd->dentry));
-       list_add(&mnt->mnt_child, &nd->mnt->mnt_mounts);
-       nd->dentry->d_mounted++;
-@@ -485,14 +487,17 @@
- {
-       struct nameidata old_nd;
-       struct vfsmount *mnt = NULL;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       int err = mount_is_safe(nd);
-       if (err)
-               return err;
-       if (!old_name || !*old_name)
-               return -EINVAL;
--      err = path_lookup(old_name, LOOKUP_POSITIVE|LOOKUP_FOLLOW, &old_nd);
--      if (err)
-+      err = path_lookup_it(old_name, LOOKUP_POSITIVE|LOOKUP_FOLLOW, &old_nd, &it);
-+      if (err) {
-+              intent_release(&it);
-               return err;
-+      }
-       down_write(&current->namespace->sem);
-       err = -EINVAL;
-@@ -515,6 +520,7 @@
-       }
-       up_write(&current->namespace->sem);
-+      intent_release(&it);
-       path_release(&old_nd);
-       return err;
- }
-@@ -698,6 +704,7 @@
-                 unsigned long flags, void *data_page)
- {
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       int retval = 0;
-       int mnt_flags = 0;
-@@ -722,10 +729,11 @@
-       flags &= ~(MS_NOSUID|MS_NOEXEC|MS_NODEV);
-       /* ... and get the mountpoint */
--      retval = path_lookup(dir_name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd);
--      if (retval)
-+      retval = path_lookup_it(dir_name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd, &it);
-+      if (retval) {
-+              intent_release(&it);
-               return retval;
--
-+      }
-       if (flags & MS_REMOUNT)
-               retval = do_remount(&nd, flags & ~MS_REMOUNT, mnt_flags,
-                                   data_page);
-@@ -736,6 +744,8 @@
-       else
-               retval = do_add_mount(&nd, type_page, flags, mnt_flags,
-                                     dev_name, data_page);
-+
-+      intent_release(&it);
-       path_release(&nd);
-       return retval;
- }
-@@ -901,6 +911,8 @@
- {
-       struct vfsmount *tmp;
-       struct nameidata new_nd, old_nd, parent_nd, root_parent, user_nd;
-+      struct lookup_intent new_it = { .it_op = IT_GETATTR };
-+      struct lookup_intent old_it = { .it_op = IT_GETATTR };
-       int error;
-       if (!capable(CAP_SYS_ADMIN))
-@@ -908,14 +920,14 @@
-       lock_kernel();
--      error = __user_walk(new_root, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &new_nd);
-+      error = __user_walk_it(new_root, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &new_nd, &new_it);
-       if (error)
-               goto out0;
-       error = -EINVAL;
-       if (!check_mnt(new_nd.mnt))
-               goto out1;
--      error = __user_walk(put_old, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &old_nd);
-+      error = __user_walk_it(put_old, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &old_nd, &old_it);
-       if (error)
-               goto out1;
-@@ -970,8 +982,10 @@
-       up(&old_nd.dentry->d_inode->i_zombie);
-       up_write(&current->namespace->sem);
-       path_release(&user_nd);
-+      intent_release(&old_it);
-       path_release(&old_nd);
- out1:
-+      intent_release(&new_it);
-       path_release(&new_nd);
- out0:
-       unlock_kernel();
 Index: linux/fs/namei.c
 ===================================================================
 --- linux.orig/fs/namei.c      Wed Mar 17 13:00:37 2004
@@ -380,7 +263,7 @@ Index: linux/fs/namei.c
  int follow_down(struct vfsmount **mnt, struct dentry **dentry)
  {
 -      return __follow_down(mnt,dentry);
-+      return __follow_down(mnt,dentry,NULL);
++      return __follow_down(mnt, dentry, NULL);
  }
   
  static inline void follow_dotdot(struct nameidata *nd)
@@ -1072,6 +955,123 @@ Index: linux/fs/namei.c
        if (page) {
                kunmap(page);
                page_cache_release(page);
+Index: linux/fs/namespace.c
+===================================================================
+--- linux.orig/fs/namespace.c  Thu Nov 28 18:53:15 2002
++++ linux/fs/namespace.c       Wed Mar 17 13:11:25 2004
+@@ -99,6 +99,7 @@
+ {
+       old_nd->dentry = mnt->mnt_mountpoint;
+       old_nd->mnt = mnt->mnt_parent;
++      UNPIN(old_nd->dentry, old_nd->mnt, 1);
+       mnt->mnt_parent = mnt;
+       mnt->mnt_mountpoint = mnt->mnt_root;
+       list_del_init(&mnt->mnt_child);
+@@ -110,6 +111,7 @@
+ {
+       mnt->mnt_parent = mntget(nd->mnt);
+       mnt->mnt_mountpoint = dget(nd->dentry);
++      PIN(nd->dentry, nd->mnt, 1);
+       list_add(&mnt->mnt_hash, mount_hashtable+hash(nd->mnt, nd->dentry));
+       list_add(&mnt->mnt_child, &nd->mnt->mnt_mounts);
+       nd->dentry->d_mounted++;
+@@ -485,14 +487,17 @@
+ {
+       struct nameidata old_nd;
+       struct vfsmount *mnt = NULL;
++      struct lookup_intent it = { .it_op = IT_GETATTR };
+       int err = mount_is_safe(nd);
+       if (err)
+               return err;
+       if (!old_name || !*old_name)
+               return -EINVAL;
+-      err = path_lookup(old_name, LOOKUP_POSITIVE|LOOKUP_FOLLOW, &old_nd);
+-      if (err)
++      err = path_lookup_it(old_name, LOOKUP_POSITIVE|LOOKUP_FOLLOW, &old_nd, &it);
++      if (err) {
++              intent_release(&it);
+               return err;
++      }
+       down_write(&current->namespace->sem);
+       err = -EINVAL;
+@@ -515,6 +520,7 @@
+       }
+       up_write(&current->namespace->sem);
++      intent_release(&it);
+       path_release(&old_nd);
+       return err;
+ }
+@@ -698,6 +704,7 @@
+                 unsigned long flags, void *data_page)
+ {
+       struct nameidata nd;
++      struct lookup_intent it = { .it_op = IT_GETATTR };
+       int retval = 0;
+       int mnt_flags = 0;
+@@ -722,10 +729,11 @@
+       flags &= ~(MS_NOSUID|MS_NOEXEC|MS_NODEV);
+       /* ... and get the mountpoint */
+-      retval = path_lookup(dir_name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd);
+-      if (retval)
++      retval = path_lookup_it(dir_name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd, &it);
++      if (retval) {
++              intent_release(&it);
+               return retval;
+-
++      }
+       if (flags & MS_REMOUNT)
+               retval = do_remount(&nd, flags & ~MS_REMOUNT, mnt_flags,
+                                   data_page);
+@@ -736,6 +744,8 @@
+       else
+               retval = do_add_mount(&nd, type_page, flags, mnt_flags,
+                                     dev_name, data_page);
++
++      intent_release(&it);
+       path_release(&nd);
+       return retval;
+ }
+@@ -901,6 +911,8 @@
+ {
+       struct vfsmount *tmp;
+       struct nameidata new_nd, old_nd, parent_nd, root_parent, user_nd;
++      struct lookup_intent new_it = { .it_op = IT_GETATTR };
++      struct lookup_intent old_it = { .it_op = IT_GETATTR };
+       int error;
+       if (!capable(CAP_SYS_ADMIN))
+@@ -908,14 +920,14 @@
+       lock_kernel();
+-      error = __user_walk(new_root, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &new_nd);
++      error = __user_walk_it(new_root, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &new_nd, &new_it);
+       if (error)
+               goto out0;
+       error = -EINVAL;
+       if (!check_mnt(new_nd.mnt))
+               goto out1;
+-      error = __user_walk(put_old, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &old_nd);
++      error = __user_walk_it(put_old, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &old_nd, &old_it);
+       if (error)
+               goto out1;
+@@ -970,8 +982,10 @@
+       up(&old_nd.dentry->d_inode->i_zombie);
+       up_write(&current->namespace->sem);
+       path_release(&user_nd);
++      intent_release(&old_it);
+       path_release(&old_nd);
+ out1:
++      intent_release(&new_it);
+       path_release(&new_nd);
+ out0:
+       unlock_kernel();
 Index: linux/fs/open.c
 ===================================================================
 --- linux.orig/fs/open.c       Thu Nov 28 18:53:15 2002
@@ -1474,6 +1474,20 @@ Index: linux/fs/open.c
  /*
   * Find an empty file descriptor entry, and mark it busy.
   */
+Index: linux/fs/proc/base.c
+===================================================================
+--- linux.orig/fs/proc/base.c  Wed Mar 17 13:00:35 2004
++++ linux/fs/proc/base.c       Wed Mar 17 13:11:25 2004
+@@ -481,6 +481,9 @@
+       error = inode->u.proc_i.op.proc_get_link(inode, &nd->dentry, &nd->mnt);
+       nd->last_type = LAST_BIND;
++
++      if (nd->intent != NULL)
++              nd->intent->d.lustre.it_int_flags |= IT_FL_FOLLOWED;
+ out:
+       return error;
+ }
 Index: linux/fs/stat.c
 ===================================================================
 --- linux.orig/fs/stat.c       Thu Sep 13 19:04:43 2001
@@ -1635,20 +1649,6 @@ Index: linux/fs/stat.c
                if (!err)
                        err = cp_new_stat64(dentry->d_inode, statbuf);
                fput(f);
-Index: linux/fs/proc/base.c
-===================================================================
---- linux.orig/fs/proc/base.c  Wed Mar 17 13:00:35 2004
-+++ linux/fs/proc/base.c       Wed Mar 17 13:11:25 2004
-@@ -481,6 +481,9 @@
-       error = inode->u.proc_i.op.proc_get_link(inode, &nd->dentry, &nd->mnt);
-       nd->last_type = LAST_BIND;
-+
-+      if (nd->intent != NULL)
-+              nd->intent->d.lustre.it_int_flags |= IT_FL_FOLLOWED;
- out:
-       return error;
- }
 Index: linux/include/linux/dcache.h
 ===================================================================
 --- linux.orig/include/linux/dcache.h  Thu Nov 28 18:53:15 2002
@@ -1754,7 +1754,7 @@ Index: linux/include/linux/fs.h
  #define ATTR_ATTR_FLAG        1024
 +#define ATTR_RAW      0x0800  /* file system, not vfs will massage attrs */
 +#define ATTR_FROM_OPEN        0x1000  /* called from open path, ie O_TRUNC */
-+#define ATTR_CTIME_SET 0x2000
++#define ATTR_CTIME_SET        0x2000
  
  /*
   * This is the Inode Attributes structure, used for notify_change().  It
@@ -1897,18 +1897,25 @@ Index: linux/include/linux/fs_struct.h
                dput(old_pwd);
                mntput(old_pwdmnt);
        }
-Index: linux/kernel/ksyms.c
+Index: linux/kernel/exit.c
 ===================================================================
---- linux.orig/kernel/ksyms.c  Wed Mar 17 13:11:23 2004
-+++ linux/kernel/ksyms.c       Wed Mar 17 13:11:25 2004
-@@ -315,6 +315,7 @@
- EXPORT_SYMBOL(set_page_dirty);
- EXPORT_SYMBOL(vfs_readlink);
- EXPORT_SYMBOL(vfs_follow_link);
-+EXPORT_SYMBOL(vfs_follow_link_it);
- EXPORT_SYMBOL(page_readlink);
- EXPORT_SYMBOL(page_follow_link);
- EXPORT_SYMBOL(page_symlink_inode_operations);
+--- linux.orig/kernel/exit.c   Wed Mar 17 13:00:38 2004
++++ linux/kernel/exit.c        Wed Mar 17 13:11:25 2004
+@@ -239,11 +239,14 @@
+ {
+       /* No need to hold fs->lock if we are killing it */
+       if (atomic_dec_and_test(&fs->count)) {
++              UNPIN(fs->pwd, fs->pwdmnt, 0);
++              UNPIN(fs->root, fs->rootmnt, 1);
+               dput(fs->root);
+               mntput(fs->rootmnt);
+               dput(fs->pwd);
+               mntput(fs->pwdmnt);
+               if (fs->altroot) {
++                      UNPIN(fs->altroot, fs->altrootmnt, 1);
+                       dput(fs->altroot);
+                       mntput(fs->altrootmnt);
+               }
 Index: linux/kernel/fork.c
 ===================================================================
 --- linux.orig/kernel/fork.c   Wed Mar 17 13:00:38 2004
@@ -1927,22 +1934,15 @@ Index: linux/kernel/fork.c
                        fs->altrootmnt = mntget(old->altrootmnt);
                        fs->altroot = dget(old->altroot);
                } else {
-Index: linux/kernel/exit.c
+Index: linux/kernel/ksyms.c
 ===================================================================
---- linux.orig/kernel/exit.c   Wed Mar 17 13:00:38 2004
-+++ linux/kernel/exit.c        Wed Mar 17 13:11:25 2004
-@@ -239,11 +239,14 @@
- {
-       /* No need to hold fs->lock if we are killing it */
-       if (atomic_dec_and_test(&fs->count)) {
-+              UNPIN(fs->pwd, fs->pwdmnt, 0);
-+              UNPIN(fs->root, fs->rootmnt, 1);
-               dput(fs->root);
-               mntput(fs->rootmnt);
-               dput(fs->pwd);
-               mntput(fs->pwdmnt);
-               if (fs->altroot) {
-+                      UNPIN(fs->altroot, fs->altrootmnt, 1);
-                       dput(fs->altroot);
-                       mntput(fs->altrootmnt);
-               }
+--- linux.orig/kernel/ksyms.c  Wed Mar 17 13:11:23 2004
++++ linux/kernel/ksyms.c       Wed Mar 17 13:11:25 2004
+@@ -315,6 +315,7 @@
+ EXPORT_SYMBOL(set_page_dirty);
+ EXPORT_SYMBOL(vfs_readlink);
+ EXPORT_SYMBOL(vfs_follow_link);
++EXPORT_SYMBOL(vfs_follow_link_it);
+ EXPORT_SYMBOL(page_readlink);
+ EXPORT_SYMBOL(page_follow_link);
+ EXPORT_SYMBOL(page_symlink_inode_operations);
index 0b02eb2..74d556d 100644 (file)
@@ -263,7 +263,7 @@ Index: linux-2.4.20/fs/namei.c
  int follow_down(struct vfsmount **mnt, struct dentry **dentry)
  {
 -      return __follow_down(mnt,dentry);
-+      return __follow_down(mnt,dentry,NULL);
++      return __follow_down(mnt, dentry, NULL);
  }
   
  static inline void follow_dotdot(struct nameidata *nd)
@@ -286,7 +286,7 @@ Index: linux-2.4.20/fs/namei.c
  {
        struct dentry *dentry;
        struct inode *inode;
-@@ -526,19 +579,18 @@
+@@ -526,18 +579,18 @@
                                break;
                }
                /* This does the actual lookups.. */
@@ -304,11 +304,10 @@ Index: linux-2.4.20/fs/namei.c
                }
                /* Check mountpoints.. */
 -              while (d_mountpoint(dentry) && __follow_down(&nd->mnt, &dentry))
--                      ;
-+              while (d_mountpoint(dentry) && __follow_down(&nd->mnt, &dentry, NULL));
++              while (d_mountpoint(dentry) && __follow_down(&nd->mnt, &dentry, NULL))
+                       ;
  
                err = -ENOENT;
-               inode = dentry->d_inode;
 @@ -549,7 +601,7 @@
                        goto out_dput;
  
index 46f1bed..9d70dab 100644 (file)
  kernel/ksyms.c            |    1 
  12 files changed, 558 insertions(+), 128 deletions(-)
 
+Index: linux-2.4.24/fs/dcache.c
+===================================================================
+--- linux-2.4.24.orig/fs/dcache.c      Fri Jun 13 07:51:37 2003
++++ linux-2.4.24/fs/dcache.c   Wed Mar 17 17:36:14 2004
+@@ -181,6 +181,13 @@ int d_invalidate(struct dentry * dentry)
+               spin_unlock(&dcache_lock);
+               return 0;
+       }
++
++      /* network invalidation by Lustre */
++      if (dentry->d_flags & DCACHE_LUSTRE_INVALID) {
++              spin_unlock(&dcache_lock);
++              return 0;
++      }
++
+       /*
+        * Check whether to do a partial shrink_dcache
+        * to get rid of unused child entries.
+@@ -830,13 +837,19 @@ void d_delete(struct dentry * dentry)
+  * Adds a dentry to the hash according to its name.
+  */
+  
+-void d_rehash(struct dentry * entry)
++void __d_rehash(struct dentry * entry, int lock)
+ {
+       struct list_head *list = d_hash(entry->d_parent, entry->d_name.hash);
+       if (!list_empty(&entry->d_hash)) BUG();
+-      spin_lock(&dcache_lock);
++      if (lock) spin_lock(&dcache_lock);
+       list_add(&entry->d_hash, list);
+-      spin_unlock(&dcache_lock);
++      if (lock) spin_unlock(&dcache_lock);
++}
++EXPORT_SYMBOL(__d_rehash);
++
++void d_rehash(struct dentry * entry)
++{
++      __d_rehash(entry, 1);
+ }
+ #define do_switch(x,y) do { \
 Index: linux-2.4.24/fs/exec.c
 ===================================================================
 --- linux-2.4.24.orig/fs/exec.c        Fri Nov 28 10:26:21 2003
@@ -77,164 +118,6 @@ Index: linux-2.4.24/fs/exec.c
                goto close_fail;
  
        retval = binfmt->core_dump(signr, regs, file);
-Index: linux-2.4.24/fs/dcache.c
-===================================================================
---- linux-2.4.24.orig/fs/dcache.c      Fri Jun 13 07:51:37 2003
-+++ linux-2.4.24/fs/dcache.c   Wed Mar 17 17:36:14 2004
-@@ -181,6 +181,13 @@ int d_invalidate(struct dentry * dentry)
-               spin_unlock(&dcache_lock);
-               return 0;
-       }
-+
-+      /* network invalidation by Lustre */
-+      if (dentry->d_flags & DCACHE_LUSTRE_INVALID) {
-+              spin_unlock(&dcache_lock);
-+              return 0;
-+      }
-+
-       /*
-        * Check whether to do a partial shrink_dcache
-        * to get rid of unused child entries.
-@@ -830,13 +837,19 @@ void d_delete(struct dentry * dentry)
-  * Adds a dentry to the hash according to its name.
-  */
-  
--void d_rehash(struct dentry * entry)
-+void __d_rehash(struct dentry * entry, int lock)
- {
-       struct list_head *list = d_hash(entry->d_parent, entry->d_name.hash);
-       if (!list_empty(&entry->d_hash)) BUG();
--      spin_lock(&dcache_lock);
-+      if (lock) spin_lock(&dcache_lock);
-       list_add(&entry->d_hash, list);
--      spin_unlock(&dcache_lock);
-+      if (lock) spin_unlock(&dcache_lock);
-+}
-+EXPORT_SYMBOL(__d_rehash);
-+
-+void d_rehash(struct dentry * entry)
-+{
-+      __d_rehash(entry, 1);
- }
- #define do_switch(x,y) do { \
-Index: linux-2.4.24/fs/namespace.c
-===================================================================
---- linux-2.4.24.orig/fs/namespace.c   Fri Nov 28 10:26:21 2003
-+++ linux-2.4.24/fs/namespace.c        Wed Mar 17 17:36:14 2004
-@@ -98,6 +98,7 @@ static void detach_mnt(struct vfsmount *
- {
-       old_nd->dentry = mnt->mnt_mountpoint;
-       old_nd->mnt = mnt->mnt_parent;
-+      UNPIN(old_nd->dentry, old_nd->mnt, 1);
-       mnt->mnt_parent = mnt;
-       mnt->mnt_mountpoint = mnt->mnt_root;
-       list_del_init(&mnt->mnt_child);
-@@ -109,6 +110,7 @@ static void attach_mnt(struct vfsmount *
- {
-       mnt->mnt_parent = mntget(nd->mnt);
-       mnt->mnt_mountpoint = dget(nd->dentry);
-+      PIN(nd->dentry, nd->mnt, 1);
-       list_add(&mnt->mnt_hash, mount_hashtable+hash(nd->mnt, nd->dentry));
-       list_add_tail(&mnt->mnt_child, &nd->mnt->mnt_mounts);
-       nd->dentry->d_mounted++;
-@@ -488,14 +490,17 @@ static int do_loopback(struct nameidata 
- {
-       struct nameidata old_nd;
-       struct vfsmount *mnt = NULL;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       int err = mount_is_safe(nd);
-       if (err)
-               return err;
-       if (!old_name || !*old_name)
-               return -EINVAL;
--      err = path_lookup(old_name, LOOKUP_POSITIVE|LOOKUP_FOLLOW, &old_nd);
--      if (err)
-+      err = path_lookup_it(old_name, LOOKUP_POSITIVE|LOOKUP_FOLLOW, &old_nd, &it);
-+      if (err) {
-+              intent_release(&it);
-               return err;
-+      }
-       down_write(&current->namespace->sem);
-       err = -EINVAL;
-@@ -518,6 +523,7 @@ static int do_loopback(struct nameidata 
-       }
-       up_write(&current->namespace->sem);
-+      intent_release(&it);
-       path_release(&old_nd);
-       return err;
- }
-@@ -701,6 +707,7 @@ long do_mount(char * dev_name, char * di
-                 unsigned long flags, void *data_page)
- {
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_GETATTR };
-       int retval = 0;
-       int mnt_flags = 0;
-@@ -725,10 +732,11 @@ long do_mount(char * dev_name, char * di
-       flags &= ~(MS_NOSUID|MS_NOEXEC|MS_NODEV);
-       /* ... and get the mountpoint */
--      retval = path_lookup(dir_name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd);
--      if (retval)
-+      retval = path_lookup_it(dir_name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd, &it);
-+      if (retval) {
-+              intent_release(&it);
-               return retval;
--
-+      }
-       if (flags & MS_REMOUNT)
-               retval = do_remount(&nd, flags & ~MS_REMOUNT, mnt_flags,
-                                   data_page);
-@@ -739,6 +747,8 @@ long do_mount(char * dev_name, char * di
-       else
-               retval = do_add_mount(&nd, type_page, flags, mnt_flags,
-                                     dev_name, data_page);
-+
-+      intent_release(&it);
-       path_release(&nd);
-       return retval;
- }
-@@ -904,6 +914,8 @@ asmlinkage long sys_pivot_root(const cha
- {
-       struct vfsmount *tmp;
-       struct nameidata new_nd, old_nd, parent_nd, root_parent, user_nd;
-+      struct lookup_intent new_it = { .it_op = IT_GETATTR };
-+      struct lookup_intent old_it = { .it_op = IT_GETATTR };
-       int error;
-       if (!capable(CAP_SYS_ADMIN))
-@@ -911,14 +923,14 @@ asmlinkage long sys_pivot_root(const cha
-       lock_kernel();
--      error = __user_walk(new_root, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &new_nd);
-+      error = __user_walk_it(new_root, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &new_nd, &new_it);
-       if (error)
-               goto out0;
-       error = -EINVAL;
-       if (!check_mnt(new_nd.mnt))
-               goto out1;
--      error = __user_walk(put_old, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &old_nd);
-+      error = __user_walk_it(put_old, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &old_nd, &old_it);
-       if (error)
-               goto out1;
-@@ -973,8 +985,10 @@ out2:
-       up(&old_nd.dentry->d_inode->i_zombie);
-       up_write(&current->namespace->sem);
-       path_release(&user_nd);
-+      intent_release(&old_it);
-       path_release(&old_nd);
- out1:
-+      intent_release(&new_it);
-       path_release(&new_nd);
- out0:
-       unlock_kernel();
 Index: linux-2.4.24/fs/namei.c
 ===================================================================
 --- linux-2.4.24.orig/fs/namei.c       Mon Aug 25 04:44:43 2003
@@ -992,6 +875,123 @@ Index: linux-2.4.24/fs/namei.c
        if (page) {
                kunmap(page);
                page_cache_release(page);
+Index: linux-2.4.24/fs/namespace.c
+===================================================================
+--- linux-2.4.24.orig/fs/namespace.c   Fri Nov 28 10:26:21 2003
++++ linux-2.4.24/fs/namespace.c        Wed Mar 17 17:36:14 2004
+@@ -98,6 +98,7 @@ static void detach_mnt(struct vfsmount *
+ {
+       old_nd->dentry = mnt->mnt_mountpoint;
+       old_nd->mnt = mnt->mnt_parent;
++      UNPIN(old_nd->dentry, old_nd->mnt, 1);
+       mnt->mnt_parent = mnt;
+       mnt->mnt_mountpoint = mnt->mnt_root;
+       list_del_init(&mnt->mnt_child);
+@@ -109,6 +110,7 @@ static void attach_mnt(struct vfsmount *
+ {
+       mnt->mnt_parent = mntget(nd->mnt);
+       mnt->mnt_mountpoint = dget(nd->dentry);
++      PIN(nd->dentry, nd->mnt, 1);
+       list_add(&mnt->mnt_hash, mount_hashtable+hash(nd->mnt, nd->dentry));
+       list_add_tail(&mnt->mnt_child, &nd->mnt->mnt_mounts);
+       nd->dentry->d_mounted++;
+@@ -488,14 +490,17 @@ static int do_loopback(struct nameidata 
+ {
+       struct nameidata old_nd;
+       struct vfsmount *mnt = NULL;
++      struct lookup_intent it = { .it_op = IT_GETATTR };
+       int err = mount_is_safe(nd);
+       if (err)
+               return err;
+       if (!old_name || !*old_name)
+               return -EINVAL;
+-      err = path_lookup(old_name, LOOKUP_POSITIVE|LOOKUP_FOLLOW, &old_nd);
+-      if (err)
++      err = path_lookup_it(old_name, LOOKUP_POSITIVE|LOOKUP_FOLLOW, &old_nd, &it);
++      if (err) {
++              intent_release(&it);
+               return err;
++      }
+       down_write(&current->namespace->sem);
+       err = -EINVAL;
+@@ -518,6 +523,7 @@ static int do_loopback(struct nameidata 
+       }
+       up_write(&current->namespace->sem);
++      intent_release(&it);
+       path_release(&old_nd);
+       return err;
+ }
+@@ -701,6 +707,7 @@ long do_mount(char * dev_name, char * di
+                 unsigned long flags, void *data_page)
+ {
+       struct nameidata nd;
++      struct lookup_intent it = { .it_op = IT_GETATTR };
+       int retval = 0;
+       int mnt_flags = 0;
+@@ -725,10 +732,11 @@ long do_mount(char * dev_name, char * di
+       flags &= ~(MS_NOSUID|MS_NOEXEC|MS_NODEV);
+       /* ... and get the mountpoint */
+-      retval = path_lookup(dir_name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd);
+-      if (retval)
++      retval = path_lookup_it(dir_name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd, &it);
++      if (retval) {
++              intent_release(&it);
+               return retval;
+-
++      }
+       if (flags & MS_REMOUNT)
+               retval = do_remount(&nd, flags & ~MS_REMOUNT, mnt_flags,
+                                   data_page);
+@@ -739,6 +747,8 @@ long do_mount(char * dev_name, char * di
+       else
+               retval = do_add_mount(&nd, type_page, flags, mnt_flags,
+                                     dev_name, data_page);
++
++      intent_release(&it);
+       path_release(&nd);
+       return retval;
+ }
+@@ -904,6 +914,8 @@ asmlinkage long sys_pivot_root(const cha
+ {
+       struct vfsmount *tmp;
+       struct nameidata new_nd, old_nd, parent_nd, root_parent, user_nd;
++      struct lookup_intent new_it = { .it_op = IT_GETATTR };
++      struct lookup_intent old_it = { .it_op = IT_GETATTR };
+       int error;
+       if (!capable(CAP_SYS_ADMIN))
+@@ -911,14 +923,14 @@ asmlinkage long sys_pivot_root(const cha
+       lock_kernel();
+-      error = __user_walk(new_root, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &new_nd);
++      error = __user_walk_it(new_root, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &new_nd, &new_it);
+       if (error)
+               goto out0;
+       error = -EINVAL;
+       if (!check_mnt(new_nd.mnt))
+               goto out1;
+-      error = __user_walk(put_old, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &old_nd);
++      error = __user_walk_it(put_old, LOOKUP_POSITIVE|LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &old_nd, &old_it);
+       if (error)
+               goto out1;
+@@ -973,8 +985,10 @@ out2:
+       up(&old_nd.dentry->d_inode->i_zombie);
+       up_write(&current->namespace->sem);
+       path_release(&user_nd);
++      intent_release(&old_it);
+       path_release(&old_nd);
+ out1:
++      intent_release(&new_it);
+       path_release(&new_nd);
+ out0:
+       unlock_kernel();
 Index: linux-2.4.24/fs/open.c
 ===================================================================
 --- linux-2.4.24.orig/fs/open.c        Mon Aug 25 04:44:43 2003
@@ -1803,18 +1803,25 @@ Index: linux-2.4.24/include/linux/fs_struct.h
                dput(old_pwd);
                mntput(old_pwdmnt);
        }
-Index: linux-2.4.24/kernel/ksyms.c
+Index: linux-2.4.24/kernel/exit.c
 ===================================================================
---- linux-2.4.24.orig/kernel/ksyms.c   Wed Mar 17 17:36:14 2004
-+++ linux-2.4.24/kernel/ksyms.c        Wed Mar 17 17:36:14 2004
-@@ -275,6 +275,7 @@ EXPORT_SYMBOL(set_page_dirty);
- EXPORT_SYMBOL(mark_page_accessed);
- EXPORT_SYMBOL(vfs_readlink);
- EXPORT_SYMBOL(vfs_follow_link);
-+EXPORT_SYMBOL(vfs_follow_link_it);
- EXPORT_SYMBOL(page_readlink);
- EXPORT_SYMBOL(page_follow_link);
- EXPORT_SYMBOL(page_symlink_inode_operations);
+--- linux-2.4.24.orig/kernel/exit.c    Thu Nov 28 15:53:15 2002
++++ linux-2.4.24/kernel/exit.c Wed Mar 17 17:36:14 2004
+@@ -238,11 +238,14 @@ static inline void __put_fs_struct(struc
+ {
+       /* No need to hold fs->lock if we are killing it */
+       if (atomic_dec_and_test(&fs->count)) {
++              UNPIN(fs->pwd, fs->pwdmnt, 0);
++              UNPIN(fs->root, fs->rootmnt, 1);
+               dput(fs->root);
+               mntput(fs->rootmnt);
+               dput(fs->pwd);
+               mntput(fs->pwdmnt);
+               if (fs->altroot) {
++                      UNPIN(fs->altroot, fs->altrootmnt, 1);
+                       dput(fs->altroot);
+                       mntput(fs->altrootmnt);
+               }
 Index: linux-2.4.24/kernel/fork.c
 ===================================================================
 --- linux-2.4.24.orig/kernel/fork.c    Fri Nov 28 10:26:21 2003
@@ -1833,22 +1840,15 @@ Index: linux-2.4.24/kernel/fork.c
                        fs->altrootmnt = mntget(old->altrootmnt);
                        fs->altroot = dget(old->altroot);
                } else {
-Index: linux-2.4.24/kernel/exit.c
+Index: linux-2.4.24/kernel/ksyms.c
 ===================================================================
---- linux-2.4.24.orig/kernel/exit.c    Thu Nov 28 15:53:15 2002
-+++ linux-2.4.24/kernel/exit.c Wed Mar 17 17:36:14 2004
-@@ -238,11 +238,14 @@ static inline void __put_fs_struct(struc
- {
-       /* No need to hold fs->lock if we are killing it */
-       if (atomic_dec_and_test(&fs->count)) {
-+              UNPIN(fs->pwd, fs->pwdmnt, 0);
-+              UNPIN(fs->root, fs->rootmnt, 1);
-               dput(fs->root);
-               mntput(fs->rootmnt);
-               dput(fs->pwd);
-               mntput(fs->pwdmnt);
-               if (fs->altroot) {
-+                      UNPIN(fs->altroot, fs->altrootmnt, 1);
-                       dput(fs->altroot);
-                       mntput(fs->altrootmnt);
-               }
+--- linux-2.4.24.orig/kernel/ksyms.c   Wed Mar 17 17:36:14 2004
++++ linux-2.4.24/kernel/ksyms.c        Wed Mar 17 17:36:14 2004
+@@ -275,6 +275,7 @@ EXPORT_SYMBOL(set_page_dirty);
+ EXPORT_SYMBOL(mark_page_accessed);
+ EXPORT_SYMBOL(vfs_readlink);
+ EXPORT_SYMBOL(vfs_follow_link);
++EXPORT_SYMBOL(vfs_follow_link_it);
+ EXPORT_SYMBOL(page_readlink);
+ EXPORT_SYMBOL(page_follow_link);
+ EXPORT_SYMBOL(page_symlink_inode_operations);
index bff461f..7c7119d 100644 (file)
@@ -106,7 +106,7 @@ Index: linux-2.6.5-12.1/fs/namei.c
 +              return 0;
 +      if (!dentry->d_op->d_revalidate(dentry, nd)) {
 +              struct dentry *new;
-+              if ((err = permission(dentry->d_parent->d_inode, MAY_EXEC,nd)))
++              if ((err = permission(dentry->d_parent->d_inode, MAY_EXEC, nd)))
 +                      return err;
 +              new = real_lookup(dentry->d_parent, &dentry->d_name, nd);
 +              if (IS_ERR(new))
@@ -140,14 +140,14 @@ Index: linux-2.6.5-12.1/fs/namei.c
                                inode = nd->dentry->d_inode;
                                /* fallthrough */
                        case 1:
-+                              nd->flags |= LOOKUP_LAST;
-+                              err = revalidate_special(nd);
-+                              nd->flags &= ~LOOKUP_LAST;
++                              nd->flags |= LOOKUP_LAST;
++                              err = revalidate_special(nd);
++                              nd->flags &= ~LOOKUP_LAST;
 +                              if (!nd->dentry->d_inode)
 +                                      err = -ENOENT;
 +                              if (err) {
 +                                      path_release(nd);
-+                                      goto return_err;
++                                      goto return_err;
 +                              }
 +                              if (lookup_flags & LOOKUP_DIRECTORY) {
 +                                      err = -ENOTDIR;
@@ -679,7 +679,7 @@ Index: linux-2.6.5-12.1/include/linux/fs.h
        spinlock_t              f_ep_lock;
  #endif /* #ifdef CONFIG_EPOLL */
        struct address_space    *f_mapping;
-+      struct lookup_intent    *f_it;
++      struct lookup_intent    *f_it;
  };
  extern spinlock_t files_lock;
  #define file_list_lock() spin_lock(&files_lock);
index 592f0e2..f761326 100644 (file)
@@ -136,19 +136,27 @@ Index: linux-2.6.6-vanilla/fs/namei.c
                        dput(next.dentry);
                        mntput(next.mnt);
                        if (err)
-@@ -705,14 +751,26 @@
+@@ -705,14 +751,34 @@
                                inode = nd->dentry->d_inode;
                                /* fallthrough */
                        case 1:
-+                              nd->flags |= LOOKUP_LAST;
-+                              err = revalidate_special(nd);
-+                              nd->flags &= ~LOOKUP_LAST;
++                              nd->flags |= LOOKUP_LAST;
++                              err = revalidate_special(nd);
++                              nd->flags &= ~LOOKUP_LAST;
 +                              if (!nd->dentry->d_inode)
 +                                      err = -ENOENT;
 +                              if (err) {
-+                                      path_release(nd);
++                                      path_release(nd);
 +                                      goto return_err;
 +                              }
++                              if (lookup_flags & LOOKUP_DIRECTORY) {
++                                      err = -ENOTDIR;
++                                      if(!nd->dentry->d_inode->i_op ||
++                                        !nd->dentry->d_inode->i_op->lookup) {
++                                              path_release(nd);
++                                              goto return_err;
++                                      }
++                              }
                                goto return_reval;
                }
 +              
@@ -638,7 +646,7 @@ Index: linux-2.6.6-vanilla/include/linux/fs.h
        spinlock_t              f_ep_lock;
  #endif /* #ifdef CONFIG_EPOLL */
        struct address_space    *f_mapping;
-+      struct lookup_intent    *f_it;
++      struct lookup_intent    *f_it;
  };
  extern spinlock_t files_lock;
  #define file_list_lock() spin_lock(&files_lock);
index 934dd77..cfd0db0 100644 (file)
@@ -47,22 +47,24 @@ Index: linux-2.6.5-12.1/fs/namei.c
        path_release(&nd);
  out:
        putname(tmp);
-@@ -1626,10 +1637,18 @@
+@@ -1626,10 +1637,20 @@
  
                struct dentry *dentry;
                struct nameidata nd;
-+                intent_init(&nd.intent, IT_LOOKUP);
++              intent_init(&nd.intent, IT_LOOKUP);
  
                error = path_lookup(tmp, LOOKUP_PARENT, &nd);
                if (error)
                        goto out;
-+              if (nd.dentry->d_inode->i_op->mkdir_raw) {
-+                      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+                      error = op->mkdir_raw(&nd, mode);
-+                      /* the file system wants to use normal vfs path now */
-+                      if (error != -EOPNOTSUPP)
-+                              goto out2;
-+              }
++
++              if (nd.dentry->d_inode->i_op->mkdir_raw) {
++                      struct inode_operations *op = nd.dentry->d_inode->i_op;
++                      error = op->mkdir_raw(&nd, mode);
++                      /* the file system wants to use normal vfs path now */
++                      if (error != -EOPNOTSUPP)
++                              goto out2;
++              }
++
                dentry = lookup_create(&nd, 1);
                error = PTR_ERR(dentry);
                if (!IS_ERR(dentry)) {
@@ -78,22 +80,24 @@ Index: linux-2.6.5-12.1/fs/namei.c
        char * name;
        struct dentry *dentry;
        struct nameidata nd;
-+        intent_init(&nd.intent, IT_LOOKUP);
++      intent_init(&nd.intent, IT_LOOKUP);
  
        name = getname(pathname);
        if(IS_ERR(name))
-@@ -1744,6 +1765,14 @@
+@@ -1744,6 +1765,16 @@
                        error = -EBUSY;
                        goto exit1;
        }
-+      if (nd.dentry->d_inode->i_op->rmdir_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
 +
-+              error = op->rmdir_raw(&nd);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto exit1;
-+      }
++      if (nd.dentry->d_inode->i_op->rmdir_raw) {
++              struct inode_operations *op = nd.dentry->d_inode->i_op;
++
++              error = op->rmdir_raw(&nd);
++              /* the file system wants to use normal vfs path now */
++              if (error != -EOPNOTSUPP)
++                      goto exit1;
++      }
++
        down(&nd.dentry->d_inode->i_sem);
        dentry = lookup_hash(&nd.last, nd.dentry);
        error = PTR_ERR(dentry);
@@ -101,7 +105,7 @@ Index: linux-2.6.5-12.1/fs/namei.c
        struct dentry *dentry;
        struct nameidata nd;
        struct inode *inode = NULL;
-+        intent_init(&nd.intent, IT_LOOKUP);
++      intent_init(&nd.intent, IT_LOOKUP);
  
        name = getname(pathname);
        if(IS_ERR(name))
@@ -109,13 +113,13 @@ Index: linux-2.6.5-12.1/fs/namei.c
        error = -EISDIR;
        if (nd.last_type != LAST_NORM)
                goto exit1;
-+      if (nd.dentry->d_inode->i_op->unlink_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
-+              error = op->unlink_raw(&nd);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto exit1;
-+      }
++      if (nd.dentry->d_inode->i_op->unlink_raw) {
++              struct inode_operations *op = nd.dentry->d_inode->i_op;
++              error = op->unlink_raw(&nd);
++              /* the file system wants to use normal vfs path now */
++              if (error != -EOPNOTSUPP)
++                      goto exit1;
++      }
        down(&nd.dentry->d_inode->i_sem);
        dentry = lookup_hash(&nd.last, nd.dentry);
        error = PTR_ERR(dentry);
@@ -123,7 +127,7 @@ Index: linux-2.6.5-12.1/fs/namei.c
  
                struct dentry *dentry;
                struct nameidata nd;
-+                intent_init(&nd.intent, IT_LOOKUP);
++              intent_init(&nd.intent, IT_LOOKUP);
  
                error = path_lookup(to, LOOKUP_PARENT, &nd);
                if (error)
@@ -150,8 +154,8 @@ Index: linux-2.6.5-12.1/fs/namei.c
        struct nameidata nd, old_nd;
        int error;
        char * to;
-+        intent_init(&nd.intent, IT_LOOKUP);
-+        intent_init(&old_nd.intent, IT_LOOKUP);
++      intent_init(&nd.intent, IT_LOOKUP);
++      intent_init(&old_nd.intent, IT_LOOKUP);
  
        to = getname(newname);
        if (IS_ERR(to))
@@ -159,40 +163,22 @@ Index: linux-2.6.5-12.1/fs/namei.c
        error = -EXDEV;
        if (old_nd.mnt != nd.mnt)
                goto out_release;
-+        if (nd.dentry->d_inode->i_op->link_raw) {
-+                struct inode_operations *op = nd.dentry->d_inode->i_op;
-+                error = op->link_raw(&old_nd, &nd);
-+                /* the file system wants to use normal vfs path now */
-+                if (error != -EOPNOTSUPP)
-+                        goto out_release;
-+        }
++      if (nd.dentry->d_inode->i_op->link_raw) {
++              struct inode_operations *op = nd.dentry->d_inode->i_op;
++              error = op->link_raw(&old_nd, &nd);
++              /* the file system wants to use normal vfs path now */
++              if (error != -EOPNOTSUPP)
++                      goto out_release;
++      }
        new_dentry = lookup_create(&nd, 0);
        error = PTR_ERR(new_dentry);
        if (!IS_ERR(new_dentry)) {
-@@ -2038,7 +2093,7 @@
-  *       locking].
-  */
- int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry,
--             struct inode *new_dir, struct dentry *new_dentry)
-+                   struct inode *new_dir, struct dentry *new_dentry)
- {
-       int error = 0;
-       struct inode *target;
-@@ -2083,7 +2138,7 @@
- }
- int vfs_rename_other(struct inode *old_dir, struct dentry *old_dentry,
--             struct inode *new_dir, struct dentry *new_dentry)
-+                     struct inode *new_dir, struct dentry *new_dentry)
- {
-       struct inode *target;
-       int error;
 @@ -2160,6 +2215,8 @@
        struct dentry * old_dentry, *new_dentry;
        struct dentry * trap;
        struct nameidata oldnd, newnd;
-+        intent_init(&oldnd.intent, IT_LOOKUP);
-+        intent_init(&newnd.intent, IT_LOOKUP);
++      intent_init(&oldnd.intent, IT_LOOKUP);
++      intent_init(&newnd.intent, IT_LOOKUP);
  
        error = path_lookup(oldname, LOOKUP_PARENT, &oldnd);
        if (error)
@@ -200,12 +186,12 @@ Index: linux-2.6.5-12.1/fs/namei.c
        if (newnd.last_type != LAST_NORM)
                goto exit2;
  
-+      if (old_dir->d_inode->i_op->rename_raw) {
-+              error = old_dir->d_inode->i_op->rename_raw(&oldnd, &newnd);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto exit2;
-+      }
++      if (old_dir->d_inode->i_op->rename_raw) {
++              error = old_dir->d_inode->i_op->rename_raw(&oldnd, &newnd);
++              /* the file system wants to use normal vfs path now */
++              if (error != -EOPNOTSUPP)
++                      goto exit2;
++      }
 +
        trap = lock_rename(new_dir, old_dir);
  
@@ -286,10 +272,10 @@ Index: linux-2.6.5-12.1/fs/open.c
 +              if (error != -EOPNOTSUPP)
 +                      goto dput_and_out;
 +      } else {
-+                down(&inode->i_sem);
-+                error = notify_change(nd.dentry, &newattrs);
-+                up(&inode->i_sem);
-+        }
++              down(&inode->i_sem);
++              error = notify_change(nd.dentry, &newattrs);
++              up(&inode->i_sem);
++      }
  dput_and_out:
        path_release(&nd);
  
@@ -425,14 +411,6 @@ Index: linux-2.6.5-12.1/fs/open.c
        if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
                goto out;
        newattrs.ia_valid =  ATTR_CTIME;
-@@ -723,6 +749,7 @@
-       }
-       if (!S_ISDIR(inode->i_mode))
-               newattrs.ia_valid |= ATTR_KILL_SUID|ATTR_KILL_SGID;
-+
-       down(&inode->i_sem);
-       error = notify_change(dentry, &newattrs);
-       up(&inode->i_sem);
 Index: linux-2.6.5-12.1/fs/exec.c
 ===================================================================
 --- linux-2.6.5-12.1.orig/fs/exec.c    2004-05-11 15:41:54.000000000 -0400
index a2dab51..ea081d6 100644 (file)
@@ -47,22 +47,24 @@ Index: linux-2.6.4-51.0/fs/namei.c
        path_release(&nd);
  out:
        putname(tmp);
-@@ -1603,10 +1614,18 @@
+@@ -1603,10 +1614,20 @@
        if (!IS_ERR(tmp)) {
                struct dentry *dentry;
                struct nameidata nd;
-+                intent_init(&nd.intent, IT_LOOKUP);
++              intent_init(&nd.intent, IT_LOOKUP);
  
                error = path_lookup(tmp, LOOKUP_PARENT, &nd);
                if (error)
                        goto out;
-+              if (nd.dentry->d_inode->i_op->mkdir_raw) {
-+                      struct inode_operations *op = nd.dentry->d_inode->i_op;
-+                      error = op->mkdir_raw(&nd, mode);
-+                      /* the file system wants to use normal vfs path now */
-+                      if (error != -EOPNOTSUPP)
-+                              goto out2;
-+              }
++
++              if (nd.dentry->d_inode->i_op->mkdir_raw) {
++                      struct inode_operations *op = nd.dentry->d_inode->i_op;
++                      error = op->mkdir_raw(&nd, mode);
++                      /* the file system wants to use normal vfs path now */
++                      if (error != -EOPNOTSUPP)
++                              goto out2;
++              }
++
                dentry = lookup_create(&nd, 1);
                error = PTR_ERR(dentry);
                if (!IS_ERR(dentry)) {
@@ -78,7 +80,7 @@ Index: linux-2.6.4-51.0/fs/namei.c
        char * name;
        struct dentry *dentry;
        struct nameidata nd;
-+        intent_init(&nd.intent, IT_LOOKUP);
++      intent_init(&nd.intent, IT_LOOKUP);
  
        name = getname(pathname);
        if(IS_ERR(name))
@@ -86,16 +88,16 @@ Index: linux-2.6.4-51.0/fs/namei.c
                        error = -EBUSY;
                        goto exit1;
        }
-+ 
-+      if (nd.dentry->d_inode->i_op->rmdir_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
-+ 
-+              error = op->rmdir_raw(&nd);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto exit1;
-+      }
-+ 
++
++      if (nd.dentry->d_inode->i_op->rmdir_raw) {
++              struct inode_operations *op = nd.dentry->d_inode->i_op;
++
++              error = op->rmdir_raw(&nd);
++              /* the file system wants to use normal vfs path now */
++              if (error != -EOPNOTSUPP)
++                      goto exit1;
++      }
++
        down(&nd.dentry->d_inode->i_sem);
        dentry = lookup_hash(&nd.last, nd.dentry);
        error = PTR_ERR(dentry);
@@ -103,7 +105,7 @@ Index: linux-2.6.4-51.0/fs/namei.c
        struct dentry *dentry;
        struct nameidata nd;
        struct inode *inode = NULL;
-+        intent_init(&nd.intent, IT_LOOKUP);
++      intent_init(&nd.intent, IT_LOOKUP);
  
        name = getname(pathname);
        if(IS_ERR(name))
@@ -111,13 +113,13 @@ Index: linux-2.6.4-51.0/fs/namei.c
        error = -EISDIR;
        if (nd.last_type != LAST_NORM)
                goto exit1;
-+      if (nd.dentry->d_inode->i_op->unlink_raw) {
-+              struct inode_operations *op = nd.dentry->d_inode->i_op;
-+              error = op->unlink_raw(&nd);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto exit1;
-+      }
++      if (nd.dentry->d_inode->i_op->unlink_raw) {
++              struct inode_operations *op = nd.dentry->d_inode->i_op;
++              error = op->unlink_raw(&nd);
++              /* the file system wants to use normal vfs path now */
++              if (error != -EOPNOTSUPP)
++                      goto exit1;
++      }
        down(&nd.dentry->d_inode->i_sem);
        dentry = lookup_hash(&nd.last, nd.dentry);
        error = PTR_ERR(dentry);
@@ -125,7 +127,7 @@ Index: linux-2.6.4-51.0/fs/namei.c
        if (!IS_ERR(to)) {
                struct dentry *dentry;
                struct nameidata nd;
-+                intent_init(&nd.intent, IT_LOOKUP);
++              intent_init(&nd.intent, IT_LOOKUP);
  
                error = path_lookup(to, LOOKUP_PARENT, &nd);
                if (error)
@@ -152,8 +154,8 @@ Index: linux-2.6.4-51.0/fs/namei.c
        struct nameidata nd, old_nd;
        int error;
        char * to;
-+        intent_init(&nd.intent, IT_LOOKUP);
-+        intent_init(&old_nd.intent, IT_LOOKUP);
++      intent_init(&nd.intent, IT_LOOKUP);
++      intent_init(&old_nd.intent, IT_LOOKUP);
  
        to = getname(newname);
        if (IS_ERR(to))
@@ -161,40 +163,22 @@ Index: linux-2.6.4-51.0/fs/namei.c
        error = -EXDEV;
        if (old_nd.mnt != nd.mnt)
                goto out_release;
-+        if (nd.dentry->d_inode->i_op->link_raw) {
-+                struct inode_operations *op = nd.dentry->d_inode->i_op;
-+                error = op->link_raw(&old_nd, &nd);
-+                /* the file system wants to use normal vfs path now */
-+                if (error != -EOPNOTSUPP)
-+                        goto out_release;
-+        }
++      if (nd.dentry->d_inode->i_op->link_raw) {
++              struct inode_operations *op = nd.dentry->d_inode->i_op;
++              error = op->link_raw(&old_nd, &nd);
++              /* the file system wants to use normal vfs path now */
++              if (error != -EOPNOTSUPP)
++                      goto out_release;
++      }
        new_dentry = lookup_create(&nd, 0);
        error = PTR_ERR(new_dentry);
        if (!IS_ERR(new_dentry)) {
-@@ -1990,7 +2047,7 @@
-  *       locking].
-  */
- int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry,
--             struct inode *new_dir, struct dentry *new_dentry)
-+                   struct inode *new_dir, struct dentry *new_dentry)
- {
-       int error = 0;
-       struct inode *target;
-@@ -2035,7 +2092,7 @@
- }
- int vfs_rename_other(struct inode *old_dir, struct dentry *old_dentry,
--             struct inode *new_dir, struct dentry *new_dentry)
-+                     struct inode *new_dir, struct dentry *new_dentry)
- {
-       struct inode *target;
-       int error;
 @@ -2112,6 +2169,8 @@
        struct dentry * old_dentry, *new_dentry;
        struct dentry * trap;
        struct nameidata oldnd, newnd;
-+        intent_init(&oldnd.intent, IT_LOOKUP);
-+        intent_init(&newnd.intent, IT_LOOKUP);
++      intent_init(&oldnd.intent, IT_LOOKUP);
++      intent_init(&newnd.intent, IT_LOOKUP);
  
        error = path_lookup(oldname, LOOKUP_PARENT, &oldnd);
        if (error)
@@ -202,12 +186,12 @@ Index: linux-2.6.4-51.0/fs/namei.c
        if (newnd.last_type != LAST_NORM)
                goto exit2;
  
-+      if (old_dir->d_inode->i_op->rename_raw) {
-+              error = old_dir->d_inode->i_op->rename_raw(&oldnd, &newnd);
-+              /* the file system wants to use normal vfs path now */
-+              if (error != -EOPNOTSUPP)
-+                      goto exit2;
-+      }
++      if (old_dir->d_inode->i_op->rename_raw) {
++              error = old_dir->d_inode->i_op->rename_raw(&oldnd, &newnd);
++              /* the file system wants to use normal vfs path now */
++              if (error != -EOPNOTSUPP)
++                      goto exit2;
++      }
 +
        trap = lock_rename(new_dir, old_dir);
  
@@ -284,14 +268,14 @@ Index: linux-2.6.4-51.0/fs/open.c
 +
 +              newattrs.ia_valid |= ATTR_RAW;
 +              error = op->setattr_raw(inode, &newattrs);
-+              /* the file system wants to use normal vfs path now */
++              /* the file system wants to use the normal vfs path now */
 +              if (error != -EOPNOTSUPP)
 +                      goto dput_and_out;
 +      } else {
-+                down(&inode->i_sem);
-+                error = notify_change(nd.dentry, &newattrs);
-+                up(&inode->i_sem);
-+        }
++              down(&inode->i_sem);
++              error = notify_change(nd.dentry, &newattrs);
++              up(&inode->i_sem);
++      }
  dput_and_out:
        path_release(&nd);
  out:
@@ -311,10 +295,10 @@ Index: linux-2.6.4-51.0/fs/open.c
 +              if (error != -EOPNOTSUPP)
 +                      goto dput_and_out;
 +      } else {
-+                down(&inode->i_sem);
-+                error = notify_change(nd.dentry, &newattrs);
-+                up(&inode->i_sem);
-+        }
++              down(&inode->i_sem);
++              error = notify_change(nd.dentry, &newattrs);
++              up(&inode->i_sem);
++      }
  dput_and_out:
        path_release(&nd);
  out:
@@ -440,14 +424,6 @@ Index: linux-2.6.4-51.0/fs/open.c
        if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
                goto out;
        newattrs.ia_valid =  ATTR_CTIME;
-@@ -689,6 +726,7 @@
-       }
-       if (!S_ISDIR(inode->i_mode))
-               newattrs.ia_valid |= ATTR_KILL_SUID|ATTR_KILL_SGID;
-+
-       down(&inode->i_sem);
-       error = notify_change(dentry, &newattrs);
-       up(&inode->i_sem);
 Index: linux-2.6.4-51.0/fs/exec.c
 ===================================================================
 --- linux-2.6.4-51.0.orig/fs/exec.c    2004-04-05 17:36:42.000000000 -0400
diff --git a/lustre/kernel_patches/patches/vmalloc_to_page-2.4.19-pre1.patch b/lustre/kernel_patches/patches/vmalloc_to_page-2.4.19-pre1.patch
deleted file mode 100644 (file)
index 82a7d3e..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-Index: linux-2.4.19-pre1/mm/memory.c
-===================================================================
---- linux-2.4.19-pre1.orig/mm/memory.c 2004-01-14 01:11:29.000000000 +0300
-+++ linux-2.4.19-pre1/mm/memory.c      2004-01-14 01:54:44.000000000 +0300
-@@ -1470,3 +1470,25 @@
-                       len, write, 0, NULL, NULL);
-       return ret == len ? 0 : -1;
- }
-+
-+struct page * vmalloc_to_page(void * vmalloc_addr)
-+{
-+      unsigned long addr = (unsigned long) vmalloc_addr;
-+      struct page *page = NULL;
-+      pmd_t *pmd;
-+      pte_t *ptep, pte;
-+      pgd_t *pgd;
-+      
-+      pgd = pgd_offset_k(addr);
-+      if (!pgd_none(*pgd)) {
-+              pmd = pmd_offset(pgd, addr);
-+              if (!pmd_none(*pmd)) {
-+                      ptep = pte_offset(pmd, addr);
-+                      pte = *ptep;
-+                      if (pte_present(pte)) {
-+                              page = pte_page(pte);
-+                      }
-+              }
-+      }
-+      return page;
-+}
-Index: linux-2.4.19-pre1/kernel/ksyms.c
-===================================================================
---- linux-2.4.19-pre1.orig/kernel/ksyms.c      2004-01-14 01:22:28.000000000 +0300
-+++ linux-2.4.19-pre1/kernel/ksyms.c   2004-01-14 01:51:55.000000000 +0300
-@@ -112,6 +112,8 @@
- EXPORT_SYMBOL(kfree);
- EXPORT_SYMBOL(vfree);
- EXPORT_SYMBOL(__vmalloc);
-+extern struct page * vmalloc_to_page(void *addr);
-+EXPORT_SYMBOL(vmalloc_to_page);
- EXPORT_SYMBOL(mem_map);
- EXPORT_SYMBOL(remap_page_range);
- EXPORT_SYMBOL(max_mapnr);
index 9d6bc19..b221045 100644 (file)
 +              } else if (old_bh && header == HDR(old_bh)) {
 +                      /* Keep this block. */
 +                      new_bh = old_bh;
-+                      ext2_xattr_cache_insert(new_bh);
++                      (void)ext2_xattr_cache_insert(new_bh);
 +              } else {
 +                      /* We need to allocate a new block */
 +                      int force = EXT2_I(inode)->i_file_acl != 0;
 +                      memcpy(new_bh->b_data, header, new_bh->b_size);
 +                      mark_buffer_uptodate(new_bh, 1);
 +                      unlock_buffer(new_bh);
-+                      ext2_xattr_cache_insert(new_bh);
++                      (void)ext2_xattr_cache_insert(new_bh);
 +                      
 +                      ext2_xattr_update_super_block(sb);
 +              }
 +              } else if (old_bh && header == HDR(old_bh)) {
 +                      /* Keep this block. */
 +                      new_bh = old_bh;
-+                      ext3_xattr_cache_insert(new_bh);
++                      (void)ext3_xattr_cache_insert(new_bh);
 +              } else {
 +                      /* We need to allocate a new block */
 +                      int force = EXT3_I(inode)->i_file_acl != 0;
 +                      memcpy(new_bh->b_data, header, new_bh->b_size);
 +                      mark_buffer_uptodate(new_bh, 1);
 +                      unlock_buffer(new_bh);
-+                      ext3_xattr_cache_insert(new_bh);
++                      (void)ext3_xattr_cache_insert(new_bh);
 +                      
 +                      ext3_xattr_update_super_block(handle, sb);
 +              }
index acd145c..13a20cc 100644 (file)
@@ -1,6 +1,6 @@
 configurable-x86-stack-2.4.21-chaos.patch 
 dev_read_only_2.4.21-chaos.patch 
-exports_2.4.19-suse.patch
+exports-2.4.21-chaos.patch 
 lustre_version.patch
 vfs_intent-2.4.21-chaos.patch 
 invalidate_show-2.4.20-rh.patch
@@ -29,12 +29,16 @@ ext3-raw-lookup.patch
 nfs_export_kernel-2.4.21-chaos.patch 
 ext3-ea-in-inode-2.4.21-chaos.patch 
 listman-2.4.21-chaos.patch 
-gfp_memalloc-2.4.21-chaos.patch 
 ext3-xattr-ptr-arith-fix.patch
 kernel_text_address-2.4.18-chaos.patch
 pagecache-lock-2.4.21-chaos.patch 
 ext3-truncate-buffer-head.patch
 inode-max-readahead-2.4.24.patch
 dcache_refcount_debug.patch
+ext3-extents-2.4.21-chaos.patch 
+ext3-extents-asyncdel-2.4.21-chaos.patch 
+ext3-mballoc-2.4.21-chaos.patch 
 blkdev_tunables-2.4.21-chaos.patch
+small_scatterlist-2.4.21-chaos.patch
 ext3-nlinks-2.4.21-chaos.patch
+sd_iostats-2.4.21-chaos.patch
index cb9c74c..033119a 100644 (file)
@@ -38,9 +38,13 @@ ext3-raw-lookup.patch
 ext3-ea-in-inode-2.4.20.patch
 listman-2.4.20.patch
 ext3-trusted_ea-2.4.20.patch
-gfp_memalloc-2.4.22.patch
 ext3-xattr-ptr-arith-fix.patch
 procfs-ndynamic-2.4.patch
 ext3-truncate-buffer-head.patch
 inode-max-readahead-2.4.24.patch
 dcache_refcount_debug.patch
+ext3-extents-2.4.24.patch
+ext3-extents-asyncdel-2.4.24.patch
+ext3-mballoc-2.4.24.patch
+ext3-nlinks-2.4.20-hp_pnnl.patch 
+export-zap-page-range.patch
index cff99dd..fa7c715 100644 (file)
@@ -7,3 +7,7 @@ ext3-init-generation-2.6-suse.patch
 ext3-ea-in-inode-2.6-suse.patch
 export-ext3-2.6-suse.patch
 ext3-include-fixes-2.6-suse.patch
+ext3-super-ntohl.patch
+ext3-extents-2.6.5.patch 
+ext3-mballoc2-2.6.7.patch 
+ext3-nlinks-2.6.7.patch
index 3c72833..d31c290 100644 (file)
@@ -3,7 +3,10 @@ ext3-san-jdike-2.6-suse.patch
 iopen-2.6-vanilla.patch 
 export_symbols-ext3-2.6-suse.patch
 ext3-map_inode_page-2.6-suse.patch
-ext3-init-generation-2.6-suse.patch
 ext3-ea-in-inode-2.6-suse.patch
 export-ext3-2.6-suse.patch
 ext3-include-fixes-2.6-suse.patch
+ext3-super-ntohl.patch
+ext3-extents-2.6.7.patch 
+ext3-mballoc2-2.6.7.patch 
+ext3-nlinks-2.6.7.patch
index 4093450..bbb327d 100644 (file)
@@ -40,9 +40,12 @@ listman-2.4.20.patch
 ext3-trusted_ea-2.4.20.patch
 netconsole-2.4.20-rh.patch
 kernel_text_address-2.4.20-rh.patch
-gfp_memalloc-2.4.20-rh.patch
 ext3-xattr-ptr-arith-fix.patch
 procfs-ndynamic-2.4.patch
 ext3-truncate-buffer-head.patch
 inode-max-readahead-2.4.24.patch
+mkdep-revert-rh-2.4.patch
+ext3-extents-2.4.20-rh.patch 
+ext3-extents-asyncdel-2.4.20-rh.patch
+ext3-mballoc-2.4.24.patch
 x86-fpu-crash.patch
index 2d8c431..394443b 100644 (file)
@@ -25,7 +25,6 @@ nfs_export_kernel-2.4.22-rh.patch
 ext3-ea-in-inode-2.4.22-rh.patch
 listman-2.4.20.patch
 ext3-trusted_ea-2.4.20.patch
-gfp_memalloc-2.4.22.patch
 ext3-xattr-ptr-arith-fix.patch
 procfs-ndynamic-2.4.patch
 kernel_text_address-2.4.18-chaos.patch
index a0bf2a6..ae8bef7 100644 (file)
@@ -29,7 +29,6 @@ ext3-raw-lookup.patch
 nfs_export_kernel-2.4.21-chaos.patch 
 ext3-ea-in-inode-2.4.21-chaos.patch 
 listman-2.4.21-chaos.patch 
-gfp_memalloc-2.4.21-chaos.patch 
 ext3-xattr-ptr-arith-fix.patch
 kernel_text_address-2.4.18-chaos.patch
 pagecache-lock-2.4.21-chaos.patch 
index 481ed7d..8cf74b3 100644 (file)
@@ -27,7 +27,6 @@ ext3-raw-lookup.patch
 ext3-ea-in-inode-2.4.20.patch
 listman-2.4.20.patch
 ext3-trusted_ea-2.4.20.patch
-gfp_memalloc-2.4.22.patch
 ext3-xattr-ptr-arith-fix.patch
 procfs-ndynamic-2.4.patch
 ext3-truncate-buffer-head.patch
index fc59acb..a083f3f 100644 (file)
@@ -25,6 +25,5 @@ nfs_export_kernel-2.4.21-suse2.patch
 ext3-raw-lookup.patch
 ext3-ea-in-inode-2.4.21-suse2.patch
 listman-2.4.20.patch
-gfp_memalloc-2.4.24.patch 
 kernel_text_address-2.4.20-vanilla.patch 
 ext3-truncate-buffer-head.patch
index 0db2f07..62a745a 100644 (file)
@@ -1,4 +1,5 @@
 configurable-x86-stack-2.4.21-suse2.patch
+configurable-x86_64-2.4.21.patch
 dev_read_only_2.4.20-rh.patch
 exports_2.4.20-rh-hp.patch
 lustre_version.patch
@@ -15,7 +16,7 @@ extN-wantedi-2.4.21-suse2.patch
 ext3-san-2.4.20.patch
 ext3-map_inode_page-2.4.21-suse2.patch 
 ext3-error-export.patch
-iopen-2.4.19-suse.patch
+iopen-2.4.21-sles8sp3.patch
 tcp-zero-copy-2.4.21-suse2.patch 
 jbd-dont-account-blocks-twice.patch
 jbd-commit-tricks.patch
@@ -25,10 +26,11 @@ nfs_export_kernel-2.4.21-suse2.patch
 ext3-raw-lookup.patch
 ext3-ea-in-inode-2.4.21-suse2.patch
 listman-2.4.20.patch
-gfp_memalloc-2.4.24.patch 
 ext3-xattr-ptr-arith-fix.patch
 kernel_text_address-2.4.20-vanilla.patch 
 procfs-ndynamic-2.4.21-suse2.patch 
 ext3-truncate-buffer-head.patch
-qlogic-suse-2.4.21-2.patch
 loop-sync-2.4.21-suse.patch
+ext3-extents-2.4.21-suse2.patch 
+ext3-extents-asyncdel-2.4.24.patch
+ext3-mballoc-2.4.21-suse2.patch 
index b35ab9f..808aee3 100644 (file)
@@ -30,11 +30,14 @@ ext3-ea-in-inode-2.4.22-rh.patch
 listman-2.4.20.patch
 ext3-trusted_ea-2.4.20.patch
 kernel_text_address-2.4.22-vanilla.patch
-gfp_memalloc-2.4.24.patch
 ext3-xattr-ptr-arith-fix.patch
 3.5G-address-space-2.4.22-vanilla.patch
 procfs-ndynamic-2.4.patch
 ext3-truncate-buffer-head.patch
 inode-max-readahead-2.4.24.patch
-ext3-nlinks-2.4.24.patch
+ext3-extents-2.4.24.patch
+ext3-extents-asyncdel-2.4.24.patch
+ext3-mballoc-2.4.24.patch
+export-zap-page-range.patch
 export_num_siblings.patch
+ext3-nlinks-2.4.24.patch
diff --git a/lustre/scripts/clearpatches.sh b/lustre/scripts/clearpatches.sh
new file mode 100644 (file)
index 0000000..ee36ef8
--- /dev/null
@@ -0,0 +1,12 @@
+SERIESPATH=./series
+PATCHESPATH=./patches
+NOUSEPATH=./nousepatches
+
+mkdir -p $NOUSEPATH
+for PATCH in `ls $PATCHESPATH` ; do
+       echo $PATCH
+       if ! grep -r $PATCH $SERIESPATH ; then
+               echo "$PATCH was not in use !"
+               mv $PATCHESPATH/$PATCH $NOUSEPATH
+       fi
+done
diff --git a/lustre/scripts/confirmpatches.sh b/lustre/scripts/confirmpatches.sh
new file mode 100644 (file)
index 0000000..31e5d72
--- /dev/null
@@ -0,0 +1,11 @@
+SERIESPATH=./series
+PATCHESPATH=./patches
+for SERIES in `ls $SERIESPATH` ; do
+       #echo $SERIES
+       for PATCH in `cat $SERIESPATH/$SERIES`; do
+               #echo $PATCH
+               if [ ! `find $PATCHESPATH -name $PATCH` ]; then
+                       echo "$SERIESPATH/$SERIES: patch $PATCH was not found !"
+               fi
+       done
+done